diff --git a/Assets/Engine/SeedAssetList.seed b/Assets/Engine/SeedAssetList.seed index 77ec509721..579fd3c444 100644 --- a/Assets/Engine/SeedAssetList.seed +++ b/Assets/Engine/SeedAssetList.seed @@ -66,779 +66,75 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1384,166 +680,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1632,46 +768,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Assets/Engine/exclude.filetag b/Assets/Engine/exclude.filetag index 52534a87d8..3528454ec4 100644 --- a/Assets/Engine/exclude.filetag +++ b/Assets/Engine/exclude.filetag @@ -125,17 +125,6 @@ - - - - - - - - - - - @@ -207,27 +196,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/AutomatedTesting_Dependencies.xml b/AutomatedTesting/AutomatedTesting_Dependencies.xml index 50a5caea73..98e00a2914 100644 --- a/AutomatedTesting/AutomatedTesting_Dependencies.xml +++ b/AutomatedTesting/AutomatedTesting_Dependencies.xml @@ -1,5 +1,4 @@ - \ No newline at end of file diff --git a/AutomatedTesting/Config/shader_global_build_options.json b/AutomatedTesting/Config/shader_global_build_options.json index 08e4d7f502..1aacb05575 100644 --- a/AutomatedTesting/Config/shader_global_build_options.json +++ b/AutomatedTesting/Config/shader_global_build_options.json @@ -3,9 +3,15 @@ "Version": 1, "ClassName": "GlobalBuildOptions", "ClassData": { - "ShaderCompilerArguments" : { - "DefaultMatrixOrder" : "Row", - "AzslcAdditionalFreeArguments" : "--strip-unused-srgs" + "ShaderCompilerArguments": { + "DefaultMatrixOrder": "Row", + "AzslcAdditionalFreeArguments": "--strip-unused-srgs" + }, + "PreprocessorOptions": { + "predefinedMacros": [ "AZSL=17" ], + "projectIncludePaths": [ + "Gems/AtomTressFX/Assets/Shaders" + ] } } } \ No newline at end of file diff --git a/AutomatedTesting/Editor/Scripts/scene_mesh_to_prefab.py b/AutomatedTesting/Editor/Scripts/scene_mesh_to_prefab.py new file mode 100644 index 0000000000..d5a7acfe91 --- /dev/null +++ b/AutomatedTesting/Editor/Scripts/scene_mesh_to_prefab.py @@ -0,0 +1,162 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# +import os, traceback, binascii, sys, json, pathlib +import azlmbr.math +import azlmbr.bus + +# +# SceneAPI Processor +# + + +def log_exception_traceback(): + exc_type, exc_value, exc_tb = sys.exc_info() + data = traceback.format_exception(exc_type, exc_value, exc_tb) + print(str(data)) + +def get_mesh_node_names(sceneGraph): + import azlmbr.scene as sceneApi + import azlmbr.scene.graph + from scene_api import scene_data as sceneData + + meshDataList = [] + node = sceneGraph.get_root() + children = [] + paths = [] + + while node.IsValid(): + # store children to process after siblings + if sceneGraph.has_node_child(node): + children.append(sceneGraph.get_node_child(node)) + + nodeName = sceneData.SceneGraphName(sceneGraph.get_node_name(node)) + paths.append(nodeName.get_path()) + + # store any node that has mesh data content + nodeContent = sceneGraph.get_node_content(node) + if nodeContent.CastWithTypeName('MeshData'): + if sceneGraph.is_node_end_point(node) is False: + if (len(nodeName.get_path())): + meshDataList.append(sceneData.SceneGraphName(sceneGraph.get_node_name(node))) + + # advance to next node + if sceneGraph.has_node_sibling(node): + node = sceneGraph.get_node_sibling(node) + elif children: + node = children.pop() + else: + node = azlmbr.scene.graph.NodeIndex() + + return meshDataList, paths + +def update_manifest(scene): + import json + import uuid, os + import azlmbr.scene as sceneApi + import azlmbr.scene.graph + from scene_api import scene_data as sceneData + + graph = sceneData.SceneGraph(scene.graph) + # Get a list of all the mesh nodes, as well as all the nodes + mesh_name_list, all_node_paths = get_mesh_node_names(graph) + scene_manifest = sceneData.SceneManifest() + + clean_filename = scene.sourceFilename.replace('.', '_') + + # Compute the filename of the scene file + source_basepath = scene.watchFolder + source_relative_path = os.path.dirname(os.path.relpath(clean_filename, source_basepath)) + source_filename_only = os.path.basename(clean_filename) + + created_entities = [] + + # Loop every mesh node in the scene + for activeMeshIndex in range(len(mesh_name_list)): + mesh_name = mesh_name_list[activeMeshIndex] + mesh_path = mesh_name.get_path() + # Create a unique mesh group name using the filename + node name + mesh_group_name = '{}_{}'.format(source_filename_only, mesh_name.get_name()) + # Remove forbidden filename characters from the name since this will become a file on disk later + mesh_group_name = "".join(char for char in mesh_group_name if char not in "|<>:\"/?*\\") + # Add the MeshGroup to the manifest and give it a unique ID + mesh_group = scene_manifest.add_mesh_group(mesh_group_name) + mesh_group['id'] = '{' + str(uuid.uuid5(uuid.NAMESPACE_DNS, source_filename_only + mesh_path)) + '}' + # Set our current node as the only node that is included in this MeshGroup + scene_manifest.mesh_group_select_node(mesh_group, mesh_path) + + # Explicitly remove all other nodes to prevent implicit inclusions + for node in all_node_paths: + if node != mesh_path: + scene_manifest.mesh_group_unselect_node(mesh_group, node) + + # Create an editor entity + entity_id = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "CreateEditorReadyEntity", mesh_group_name) + # Add an EditorMeshComponent to the entity + editor_mesh_component = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "GetOrAddComponentByTypeName", entity_id, "AZ::Render::EditorMeshComponent") + # Set the ModelAsset assetHint to the relative path of the input asset + the name of the MeshGroup we just created + the azmodel extension + # The MeshGroup we created will be output as a product in the asset's path named mesh_group_name.azmodel + # The assetHint will be converted to an AssetId later during prefab loading + json_update = json.dumps({ + "Controller": { "Configuration": { "ModelAsset": { + "assetHint": os.path.join(source_relative_path, mesh_group_name) + ".azmodel" }}} + }); + # Apply the JSON above to the component we created + result = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "UpdateComponentForEntity", entity_id, editor_mesh_component, json_update) + + if not result: + raise RuntimeError("UpdateComponentForEntity failed") + + # Keep track of the entity we set up, we'll add them all to the prefab we're creating later + created_entities.append(entity_id) + + # Create a prefab with all our entities + prefab_filename = source_filename_only + ".prefab" + created_template_id = azlmbr.prefab.PrefabSystemScriptingBus(azlmbr.bus.Broadcast, "CreatePrefab", created_entities, prefab_filename) + + if created_template_id == azlmbr.prefab.InvalidTemplateId: + raise RuntimeError("CreatePrefab {} failed".format(prefab_filename)) + + # Convert the prefab to a JSON string + output = azlmbr.prefab.PrefabLoaderScriptingBus(azlmbr.bus.Broadcast, "SaveTemplateToString", created_template_id) + + if output.IsSuccess(): + jsonString = output.GetValue() + uuid = azlmbr.math.Uuid_CreateRandom().ToString() + jsonResult = json.loads(jsonString) + # Add a PrefabGroup to the manifest and store the JSON on it + scene_manifest.add_prefab_group(source_filename_only, uuid, jsonResult) + else: + raise RuntimeError("SaveTemplateToString failed for template id {}, prefab {}".format(created_template_id, prefab_filename)) + + # Convert the manifest to a JSON string and return it + new_manifest = scene_manifest.export() + + return new_manifest + +sceneJobHandler = None + +def on_update_manifest(args): + try: + scene = args[0] + return update_manifest(scene) + except RuntimeError as err: + print (f'ERROR - {err}') + log_exception_traceback() + + global sceneJobHandler + sceneJobHandler = None + +# try to create SceneAPI handler for processing +try: + import azlmbr.scene as sceneApi + if (sceneJobHandler == None): + sceneJobHandler = sceneApi.ScriptBuildingNotificationBusHandler() + sceneJobHandler.connect() + sceneJobHandler.add_callback('OnUpdateManifest', on_update_manifest) +except: + sceneJobHandler = None diff --git a/AutomatedTesting/Gem/Code/enabled_gems.cmake b/AutomatedTesting/Gem/Code/enabled_gems.cmake index 112e54d848..84c9e49db5 100644 --- a/AutomatedTesting/Gem/Code/enabled_gems.cmake +++ b/AutomatedTesting/Gem/Code/enabled_gems.cmake @@ -21,9 +21,9 @@ set(ENABLED_GEMS QtForPython PythonAssetBuilder Metastream - Camera EMotionFX + AtomTressFX PhysX CameraFramework StartingPointMovement @@ -52,10 +52,7 @@ set(ENABLED_GEMS AWSCore AWSClientAuth AWSMetrics - - - - + PrefabBuilder AudioSystem Multiplayer ) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt index 02aaa42597..0d6fe4c8fa 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt @@ -65,4 +65,18 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedT COMPONENT Atom ) + ly_add_pytest( + NAME AutomatedTesting::Atom_TestSuite_Main_GPU_Optimized + TEST_SUITE main + TEST_REQUIRES gpu + TEST_SERIAL + TIMEOUT 1200 + PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main_GPU_Optimized.py + RUNTIME_DEPENDENCIES + AssetProcessor + AutomatedTesting.Assets + Editor + COMPONENT + Atom + ) endif() diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py index 249b9c7096..3403d8e9b1 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py @@ -226,9 +226,9 @@ class TestMaterialEditor(object): self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name, cfg_args): """ Tests each valid RHI option (Null RHI excluded) can be launched with the MaterialEditor. - Checks for the "Finished loading viewport configurtions." success message post lounch. + Checks for the "Finished loading viewport configurations." success message post launch. """ - expected_lines = ["Finished loading viewport configurtions."] + expected_lines = ["Finished loading viewport configurations."] unexpected_lines = [ # "Trace::Assert", # "Trace::Error", @@ -241,7 +241,7 @@ class TestMaterialEditor(object): generic_launcher, editor_script="", run_python="--runpython", - timeout=30, + timeout=60, expected_lines=expected_lines, unexpected_lines=unexpected_lines, halt_on_unexpected=False, diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU_Optimized.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU_Optimized.py new file mode 100644 index 0000000000..ef572d6e5c --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU_Optimized.py @@ -0,0 +1,43 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" +import os + +import pytest + +import ly_test_tools.environment.file_system as file_system +from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite +from ly_test_tools.image.screenshot_compare_qssim import qssim as compare_screenshots +from .atom_utils.atom_component_helper import create_screenshots_archive, golden_images_directory + +DEFAULT_SUBFOLDER_PATH = 'user/PythonTests/Automated/Screenshots' + + +@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.") +@pytest.mark.parametrize("project", ["AutomatedTesting"]) +@pytest.mark.parametrize("launcher_platform", ['windows_editor']) +class TestAutomation(EditorTestSuite): + # Remove -autotest_mode from global_extra_cmdline_args since we need rendering for these tests. + global_extra_cmdline_args = ["-BatchMode"] # Default is ["-BatchMode", "-autotest_mode"] + + class AtomGPU_BasicLevelSetup_SetsUpLevel(EditorSharedTest): + use_null_renderer = False # Default is True + screenshot_name = "AtomBasicLevelSetup.ppm" + test_screenshots = [] # Gets set by setup() + screenshot_directory = "" # Gets set by setup() + + # Clear existing test screenshots before starting test. + def setup(self, workspace): + screenshot_directory = os.path.join(workspace.paths.project(), DEFAULT_SUBFOLDER_PATH) + test_screenshots = [os.path.join(screenshot_directory, self.screenshot_name)] + file_system.delete(test_screenshots, True, True) + + from Atom.tests import hydra_AtomGPU_BasicLevelSetup as test_module + + golden_images = [os.path.join(golden_images_directory(), screenshot_name)] + for test_screenshot, golden_screenshot in zip(test_screenshots, golden_images): + compare_screenshots(test_screenshot, golden_screenshot) + create_screenshots_archive(screenshot_directory) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py index 58b72ef01a..821e0acfdb 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py @@ -3,13 +3,54 @@ Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright SPDX-License-Identifier: Apache-2.0 OR MIT -File to assist with common hydra component functions used across various Atom tests. """ +import datetime import os +import zipfile -from editor_python_test_tools.editor_test_helper import EditorTestHelper -helper = EditorTestHelper(log_prefix="Atom_EditorTestHelper") +def create_screenshots_archive(screenshot_path): + """ + Creates a new zip file archive at archive_path containing all files listed within archive_path. + :param screenshot_path: location containing the files to archive, the zip archive file will also be saved here. + :return: None, but creates a new zip file archive inside path containing all of the files inside archive_path. + """ + files_to_archive = [] + + # Search for .png and .ppm files to add to the zip archive file. + for (folder_name, sub_folders, file_names) in os.walk(screenshot_path): + for file_name in file_names: + if file_name.endswith(".png") or file_name.endswith(".ppm"): + file_path = os.path.join(folder_name, file_name) + files_to_archive.append(file_path) + + # Setup variables for naming the zip archive file. + timestamp = datetime.datetime.now().timestamp() + formatted_timestamp = datetime.datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%d_%H-%M-%S") + screenshots_file = os.path.join(screenshot_path, f'screenshots_{formatted_timestamp}.zip') + + # Write all of the valid .png and .ppm files to the archive file. + with zipfile.ZipFile(screenshots_file, 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True) as zip_archive: + for file_path in files_to_archive: + file_name = os.path.basename(file_path) + zip_archive.write(file_path, file_name) + + +def golden_images_directory(): + """ + Uses this file location to return the valid location for golden image files. + :return: The path to the golden_images directory, but raises an IOError if the golden_images directory is missing. + """ + current_file_directory = os.path.join(os.path.dirname(__file__)) + golden_images_dir = os.path.join(current_file_directory, '..', 'golden_images') + + if not os.path.exists(golden_images_dir): + raise IOError( + f'golden_images" directory was not found at path "{golden_images_dir}"' + f'Please add a "golden_images" directory inside: "{current_file_directory}"' + ) + + return golden_images_dir def create_basic_atom_level(level_name): @@ -31,6 +72,9 @@ def create_basic_atom_level(level_name): import azlmbr.object import editor_python_test_tools.hydra_editor_utils as hydra + from editor_python_test_tools.editor_test_helper import EditorTestHelper + + helper = EditorTestHelper(log_prefix="Atom_EditorTestHelper") # Create a new level. new_level_name = level_name diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py index ef0a592df0..b21c74de19 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py @@ -211,7 +211,7 @@ class Timeout: return time.time() > self.die_after -screenshotsFolder = os.path.join(azlmbr.paths.devroot, "AtomTest", "Cache" "pc", "Screenshots") +screenshotsFolder = os.path.join(azlmbr.paths.products, "Screenshots") class ScreenshotHelper: diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py index 602e7564b3..bbc8463152 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py @@ -17,7 +17,7 @@ import azlmbr.legacy.general as general import azlmbr.editor as editor import azlmbr.render as render -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from editor_python_test_tools.utils import TestHelper diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py index 751f425916..7ecdc6859b 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py @@ -14,7 +14,7 @@ import azlmbr.math as math import azlmbr.paths import azlmbr.legacy.general as general -sys.path.append(os.path.join(azlmbr.paths.devassets, "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from Atom.atom_utils.atom_constants import LIGHT_TYPES diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomGPU_BasicLevelSetup.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomGPU_BasicLevelSetup.py new file mode 100644 index 0000000000..92c555127a --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomGPU_BasicLevelSetup.py @@ -0,0 +1,292 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + + +# fmt: off +class Tests : + camera_component_added = ("Camera component was added", "Camera component wasn't added") + camera_fov_set = ("Camera component FOV property set", "Camera component FOV property wasn't set") + directional_light_component_added = ("Directional Light component added", "Directional Light component wasn't added") + enter_game_mode = ("Entered game mode", "Failed to enter game mode") + exit_game_mode = ("Exited game mode", "Couldn't exit game mode") + global_skylight_component_added = ("Global Skylight (IBL) component added", "Global Skylight (IBL) component wasn't added") + global_skylight_diffuse_image_set = ("Global Skylight Diffuse Image property set", "Global Skylight Diffuse Image property wasn't set") + global_skylight_specular_image_set = ("Global Skylight Specular Image property set", "Global Skylight Specular Image property wasn't set") + ground_plane_material_asset_set = ("Ground Plane Material Asset was set", "Ground Plane Material Asset wasn't set") + ground_plane_material_component_added = ("Ground Plane Material component added", "Ground Plane Material component wasn't added") + ground_plane_mesh_asset_set = ("Ground Plane Mesh Asset property was set", "Ground Plane Mesh Asset property wasn't set") + hdri_skybox_component_added = ("HDRi Skybox component added", "HDRi Skybox component wasn't added") + hdri_skybox_cubemap_texture_set = ("HDRi Skybox Cubemap Texture property set", "HDRi Skybox Cubemap Texture property wasn't set") + mesh_component_added = ("Mesh component added", "Mesh component wasn't added") + no_assert_occurred = ("No asserts detected", "Asserts were detected") + no_error_occurred = ("No errors detected", "Errors were detected") + secondary_grid_spacing = ("Secondary Grid Spacing set", "Secondary Grid Spacing not set") + sphere_material_component_added = ("Sphere Material component added", "Sphere Material component wasn't added") + sphere_material_set = ("Sphere Material Asset was set", "Sphere Material Asset wasn't set") + sphere_mesh_asset_set = ("Sphere Mesh Asset was set", "Sphere Mesh Asset wasn't set") + viewport_set = ("Viewport set to correct size", "Viewport not set to correct size") +# fmt: on + + +def AtomGPU_BasicLevelSetup_SetsUpLevel(): + """ + Summary: + Sets up a level to match the AtomBasicLevelSetup.ppm golden image then takes a screenshot to verify the setup. + + Test setup: + - Wait for Editor idle loop. + - Open the "Base" level. + + Expected Behavior: + The scene can be setup for a basic level. + The test screenshot matches the appearance of the AtomBasicLevelSetup.ppm golden image. + + Test Steps: + 1. Close error windows and display helpers then update the viewport size. + 2. Create Default Level Entity. + 3. Create Grid Entity as a child entity of the Default Level Entity. + 4. Add Grid component to Grid Entity and set Secondary Grid Spacing. + 5. Create Global Skylight (IBL) Entity as a child entity of the Default Level Entity. + 6. Add HDRi Skybox component to the Global Skylight (IBL) Entity. + 7. Add Global Skylight (IBL) component to the Global Skylight (IBL) Entity. + 8. Set the Cubemap Texture property of the HDRi Skybox component. + 9. Set the Diffuse Image property of the Global Skylight (IBL) component. + 10. Set the Specular Image property of the Global Skylight (IBL) component. + 11. Create a Ground Plane Entity with a Material component that is a child entity of the Default Level Entity. + 12. Set the Material Asset property of the Material component for the Ground Plane Entity. + 13. Add the Mesh component to the Ground Plane Entity and set the Mesh component Mesh Asset property. + 14. Create a Directional Light Entity as a child entity of the Default Level Entity. + 15. Add Directional Light component to Directional Light Entity and set entity rotation. + 16. Create a Sphere Entity as a child entity of the Default Level Entity then add a Material component. + 17. Set the Material Asset property of the Material component for the Sphere Entity. + 18. Add Mesh component to Sphere Entity and set the Mesh Asset property for the Mesh component. + 19. Create a Camera Entity as a child entity of the Default Level Entity then add a Camera component. + 20. Set the Camera Entity rotation value and set the Camera component Field of View value. + 21. Enter game mode. + 22. Take screenshot. + 23. Exit game mode. + 24. Look for errors. + + :return: None + """ + + import os + from math import isclose + + import azlmbr.asset as asset + import azlmbr.bus as bus + import azlmbr.legacy.general as general + import azlmbr.math as math + import azlmbr.paths + + from editor_python_test_tools.editor_entity_utils import EditorEntity + from editor_python_test_tools.utils import Report, Tracer, TestHelper as helper + + from Atom.atom_utils.screenshot_utils import ScreenshotHelper + + MATERIAL_COMPONENT_NAME = "Material" + MESH_COMPONENT_NAME = "Mesh" + SCREENSHOT_NAME = "AtomBasicLevelSetup" + SCREEN_WIDTH = 1280 + SCREEN_HEIGHT = 720 + DEGREE_RADIAN_FACTOR = 0.0174533 + + def initial_viewport_setup(screen_width, screen_height): + general.set_viewport_size(screen_width, screen_height) + general.update_viewport() + result = isclose( + a=general.get_viewport_size().x, b=SCREEN_WIDTH, rel_tol=0.1) and isclose( + a=general.get_viewport_size().y, b=SCREEN_HEIGHT, rel_tol=0.1) + + return result + + with Tracer() as error_tracer: + # Test setup begins. + # Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level. + helper.init_idle() + helper.open_level("", "Base") + + # Test steps begin. + # 1. Close error windows and display helpers then update the viewport size. + helper.close_error_windows() + helper.close_display_helpers() + general.update_viewport() + Report.critical_result(Tests.viewport_set, initial_viewport_setup(SCREEN_WIDTH, SCREEN_HEIGHT)) + + # 2. Create Default Level Entity. + default_level_entity_name = "Default Level" + default_level_entity = EditorEntity.create_editor_entity_at( + math.Vector3(0.0, 0.0, 0.0), default_level_entity_name) + + # 3. Create Grid Entity as a child entity of the Default Level Entity. + grid_name = "Grid" + grid_entity = EditorEntity.create_editor_entity(grid_name, default_level_entity.id) + + # 4. Add Grid component to Grid Entity and set Secondary Grid Spacing. + grid_component = grid_entity.add_component(grid_name) + secondary_grid_spacing_property = "Controller|Configuration|Secondary Grid Spacing" + secondary_grid_spacing_value = 1.0 + grid_component.set_component_property_value(secondary_grid_spacing_property, secondary_grid_spacing_value) + secondary_grid_spacing_set = grid_component.get_component_property_value( + secondary_grid_spacing_property) == secondary_grid_spacing_value + Report.result(Tests.secondary_grid_spacing, secondary_grid_spacing_set) + + # 5. Create Global Skylight (IBL) Entity as a child entity of the Default Level Entity. + global_skylight_name = "Global Skylight (IBL)" + global_skylight_entity = EditorEntity.create_editor_entity(global_skylight_name, default_level_entity.id) + + # 6. Add HDRi Skybox component to the Global Skylight (IBL) Entity. + hdri_skybox_name = "HDRi Skybox" + hdri_skybox_component = global_skylight_entity.add_component(hdri_skybox_name) + Report.result(Tests.hdri_skybox_component_added, global_skylight_entity.has_component(hdri_skybox_name)) + + # 7. Add Global Skylight (IBL) component to the Global Skylight (IBL) Entity. + global_skylight_component = global_skylight_entity.add_component(global_skylight_name) + Report.result(Tests.global_skylight_component_added, global_skylight_entity.has_component(global_skylight_name)) + + # 8. Set the Cubemap Texture property of the HDRi Skybox component. + global_skylight_image_asset_path = os.path.join( + "LightingPresets", "greenwich_park_02_4k_iblskyboxcm_iblspecular.exr.streamingimage") + global_skylight_image_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", global_skylight_image_asset_path, math.Uuid(), False) + hdri_skybox_cubemap_texture_property = "Controller|Configuration|Cubemap Texture" + hdri_skybox_component.set_component_property_value( + hdri_skybox_cubemap_texture_property, global_skylight_image_asset) + Report.result( + Tests.hdri_skybox_cubemap_texture_set, + hdri_skybox_component.get_component_property_value( + hdri_skybox_cubemap_texture_property) == global_skylight_image_asset) + + # 9. Set the Diffuse Image property of the Global Skylight (IBL) component. + # Re-use the same image that was used in the previous test step. + global_skylight_diffuse_image_property = "Controller|Configuration|Diffuse Image" + global_skylight_component.set_component_property_value( + global_skylight_diffuse_image_property, global_skylight_image_asset) + Report.result( + Tests.global_skylight_diffuse_image_set, + global_skylight_component.get_component_property_value( + global_skylight_diffuse_image_property) == global_skylight_image_asset) + + # 10. Set the Specular Image property of the Global Skylight (IBL) component. + # Re-use the same image that was used in the previous test step. + global_skylight_specular_image_property = "Controller|Configuration|Specular Image" + global_skylight_component.set_component_property_value( + global_skylight_specular_image_property, global_skylight_image_asset) + global_skylight_specular_image_set = global_skylight_component.get_component_property_value( + global_skylight_specular_image_property) + Report.result( + Tests.global_skylight_specular_image_set, global_skylight_specular_image_set == global_skylight_image_asset) + + # 11. Create a Ground Plane Entity with a Material component that is a child entity of the Default Level Entity. + ground_plane_name = "Ground Plane" + ground_plane_entity = EditorEntity.create_editor_entity(ground_plane_name, default_level_entity.id) + ground_plane_material_component = ground_plane_entity.add_component(MATERIAL_COMPONENT_NAME) + Report.result( + Tests.ground_plane_material_component_added, ground_plane_entity.has_component(MATERIAL_COMPONENT_NAME)) + + # 12. Set the Material Asset property of the Material component for the Ground Plane Entity. + ground_plane_entity.set_local_uniform_scale(32.0) + ground_plane_material_asset_path = os.path.join("Materials", "Presets", "PBR", "metal_chrome.azmaterial") + ground_plane_material_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", ground_plane_material_asset_path, math.Uuid(), False) + ground_plane_material_asset_property = "Default Material|Material Asset" + ground_plane_material_component.set_component_property_value( + ground_plane_material_asset_property, ground_plane_material_asset) + Report.result( + Tests.ground_plane_material_asset_set, + ground_plane_material_component.get_component_property_value( + ground_plane_material_asset_property) == ground_plane_material_asset) + + # 13. Add the Mesh component to the Ground Plane Entity and set the Mesh component Mesh Asset property. + ground_plane_mesh_component = ground_plane_entity.add_component(MESH_COMPONENT_NAME) + Report.result(Tests.mesh_component_added, ground_plane_entity.has_component(MESH_COMPONENT_NAME)) + ground_plane_mesh_asset_path = os.path.join("Objects", "plane.azmodel") + ground_plane_mesh_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", ground_plane_mesh_asset_path, math.Uuid(), False) + ground_plane_mesh_asset_property = "Controller|Configuration|Mesh Asset" + ground_plane_mesh_component.set_component_property_value( + ground_plane_mesh_asset_property, ground_plane_mesh_asset) + Report.result( + Tests.ground_plane_mesh_asset_set, + ground_plane_mesh_component.get_component_property_value( + ground_plane_mesh_asset_property) == ground_plane_mesh_asset) + + # 14. Create a Directional Light Entity as a child entity of the Default Level Entity. + directional_light_name = "Directional Light" + directional_light_entity = EditorEntity.create_editor_entity_at( + math.Vector3(0.0, 0.0, 10.0), directional_light_name, default_level_entity.id) + + # 15. Add Directional Light component to Directional Light Entity and set entity rotation. + directional_light_entity.add_component(directional_light_name) + directional_light_entity_rotation = math.Vector3(DEGREE_RADIAN_FACTOR * -90.0, 0.0, 0.0) + directional_light_entity.set_local_rotation(directional_light_entity_rotation) + Report.result( + Tests.directional_light_component_added, directional_light_entity.has_component(directional_light_name)) + + # 16. Create a Sphere Entity as a child entity of the Default Level Entity then add a Material component. + sphere_entity = EditorEntity.create_editor_entity_at( + math.Vector3(0.0, 0.0, 1.0), "Sphere", default_level_entity.id) + sphere_material_component = sphere_entity.add_component(MATERIAL_COMPONENT_NAME) + Report.result(Tests.sphere_material_component_added, sphere_entity.has_component(MATERIAL_COMPONENT_NAME)) + + # 17. Set the Material Asset property of the Material component for the Sphere Entity. + sphere_material_asset_path = os.path.join("Materials", "Presets", "PBR", "metal_brass_polished.azmaterial") + sphere_material_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", sphere_material_asset_path, math.Uuid(), False) + sphere_material_asset_property = "Default Material|Material Asset" + sphere_material_component.set_component_property_value(sphere_material_asset_property, sphere_material_asset) + Report.result(Tests.sphere_material_set, sphere_material_component.get_component_property_value( + sphere_material_asset_property) == sphere_material_asset) + + # 18. Add Mesh component to Sphere Entity and set the Mesh Asset property for the Mesh component. + sphere_mesh_component = sphere_entity.add_component(MESH_COMPONENT_NAME) + sphere_mesh_asset_path = os.path.join("Models", "sphere.azmodel") + sphere_mesh_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", sphere_mesh_asset_path, math.Uuid(), False) + sphere_mesh_asset_property = "Controller|Configuration|Mesh Asset" + sphere_mesh_component.set_component_property_value(sphere_mesh_asset_property, sphere_mesh_asset) + Report.result(Tests.sphere_mesh_asset_set, sphere_mesh_component.get_component_property_value( + sphere_mesh_asset_property) == sphere_mesh_asset) + + # 19. Create a Camera Entity as a child entity of the Default Level Entity then add a Camera component. + camera_name = "Camera" + camera_entity = EditorEntity.create_editor_entity_at( + math.Vector3(5.5, -12.0, 9.0), camera_name, default_level_entity.id) + camera_component = camera_entity.add_component(camera_name) + Report.result(Tests.camera_component_added, camera_entity.has_component(camera_name)) + + # 20. Set the Camera Entity rotation value and set the Camera component Field of View value. + camera_entity_rotation = math.Vector3( + DEGREE_RADIAN_FACTOR * -27.0, DEGREE_RADIAN_FACTOR * -12.0, DEGREE_RADIAN_FACTOR * 25.0) + camera_entity.set_local_rotation(camera_entity_rotation) + camera_fov_property = "Controller|Configuration|Field of view" + camera_fov_value = 60.0 + camera_component.set_component_property_value(camera_fov_property, camera_fov_value) + azlmbr.camera.EditorCameraViewRequestBus(azlmbr.bus.Event, "ToggleCameraAsActiveView", camera_entity.id) + Report.result(Tests.camera_fov_set, camera_component.get_component_property_value( + camera_fov_property) == camera_fov_value) + + # 21. Enter game mode. + helper.enter_game_mode(Tests.enter_game_mode) + helper.wait_for_condition(function=lambda: general.is_in_game_mode(), timeout_in_seconds=4.0) + + # 22. Take screenshot. + ScreenshotHelper(general.idle_wait_frames).capture_screenshot_blocking(f"{SCREENSHOT_NAME}.ppm") + + # 23. Exit game mode. + helper.exit_game_mode(Tests.exit_game_mode) + helper.wait_for_condition(function=lambda: not general.is_in_game_mode(), timeout_in_seconds=4.0) + + # 24. Look for errors. + helper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0) + Report.result(Tests.no_assert_occurred, not error_tracer.has_asserts) + Report.result(Tests.no_error_occurred, not error_tracer.has_errors) + + +if __name__ == "__main__": + from editor_python_test_tools.utils import Report + Report.start_test(AtomGPU_BasicLevelSetup_SetsUpLevel) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py index 88a1ef4c7b..9f8f6c44b2 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py @@ -16,7 +16,7 @@ import time import azlmbr.math as math import azlmbr.paths -sys.path.append(os.path.join(azlmbr.paths.devassets, "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import Atom.atom_utils.material_editor_utils as material_editor @@ -27,10 +27,10 @@ TEST_MATERIAL_1 = "001_DefaultWhite.material" TEST_MATERIAL_2 = "002_BaseColorLerp.material" TEST_MATERIAL_3 = "003_MetalMatte.material" TEST_DATA_PATH = os.path.join( - azlmbr.paths.devroot, "Gems", "Atom", "TestData", "TestData", "Materials", "StandardPbrTestCases" + azlmbr.paths.engroot, "Gems", "Atom", "TestData", "TestData", "Materials", "StandardPbrTestCases" ) MATERIAL_TYPE_PATH = os.path.join( - azlmbr.paths.devroot, "Gems", "Atom", "Feature", "Common", "Assets", + azlmbr.paths.engroot, "Gems", "Atom", "Feature", "Common", "Assets", "Materials", "Types", "StandardPBR.materialtype", ) CACHE_FILE_EXTENSION = ".azmaterial" @@ -61,7 +61,7 @@ def run(): print(f"Material opened: {material_editor.is_open(document_id)}") # Verify if the test material exists initially - target_path = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL) + target_path = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL) print(f"Test asset doesn't exist initially: {not os.path.exists(target_path)}") # 2) Test Case: Creating a New Material Using Existing One @@ -109,10 +109,10 @@ def run(): # Assign new color to the material file and save the document as copy expected_color_1 = math.Color(0.5, 0.5, 0.5, 1.0) material_editor.set_property(document_id, property_name, expected_color_1) - target_path_1 = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL_1) + target_path_1 = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL_1) cache_file_name_1 = os.path.splitext(NEW_MATERIAL_1) # Example output: ('test_material_1', '.material') cache_file_1 = f"{cache_file_name_1[0]}{CACHE_FILE_EXTENSION}" - target_path_1_cache = os.path.join(azlmbr.paths.devassets, "Cache", "pc", "materials", cache_file_1) + target_path_1_cache = os.path.join(azlmbr.paths.products, "materials", cache_file_1) material_editor.save_document_as_copy(document_id, target_path_1) material_editor.wait_for_condition(lambda: os.path.exists(target_path_1_cache), 4.0) @@ -120,10 +120,10 @@ def run(): # Assign new color to the material file save the document as child expected_color_2 = math.Color(0.75, 0.75, 0.75, 1.0) material_editor.set_property(document_id, property_name, expected_color_2) - target_path_2 = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL_2) + target_path_2 = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL_2) cache_file_name_2 = os.path.splitext(NEW_MATERIAL_1) # Example output: ('test_material_2', '.material') cache_file_2 = f"{cache_file_name_2[0]}{CACHE_FILE_EXTENSION}" - target_path_2_cache = os.path.join(azlmbr.paths.devassets, "Cache", "pc", "materials", cache_file_2) + target_path_2_cache = os.path.join(azlmbr.paths.products, "materials", cache_file_2) material_editor.save_document_as_child(document_id, target_path_2) material_editor.wait_for_condition(lambda: os.path.exists(target_path_2_cache), 4.0) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py index 4f7edeba75..92199bf196 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py @@ -10,7 +10,7 @@ import sys import azlmbr.legacy.general as general -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from editor_python_test_tools.editor_test_helper import EditorTestHelper diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py index 62a122a723..ac28e67fa1 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py @@ -17,7 +17,7 @@ import azlmbr.math as math import azlmbr.paths import azlmbr.editor as editor -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from editor_python_test_tools.editor_test_helper import EditorTestHelper diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py index 4a3ae8c85d..1c3e6226c1 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py @@ -14,7 +14,7 @@ import azlmbr.math as math import azlmbr.paths import azlmbr.legacy.general as general -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from Atom.atom_utils import atom_component_helper, atom_constants, screenshot_utils diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py index 1d3ca11618..fcce6eab37 100755 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py @@ -42,7 +42,6 @@ class TestEditorAutomation(object): "editor command line arg bar", "editor command line arg baz", "editor engroot set", - "editor devroot set", "path resolved worked" ] diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py index bd8791fad6..c6ae65612f 100755 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py @@ -20,12 +20,6 @@ if (engroot is not None and len(engroot) is not 0): print ('engroot is {}'.format(engroot)) print ('editor engroot set') -# make sure the @devroot@ exists as a azlmbr.paths property -devroot = azlmbr.paths.devroot -if (devroot is not None and len(devroot) != 0): - print ('devroot is {}'.format(devroot)) - print ('editor devroot set') - # resolving a basic path path = azlmbr.paths.resolve_path('@engroot@/engineassets/texturemsg/defaultsolids.mtl') if (len(path) != 0 and path.find('@engroot@') == -1): diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py index 5b7f2f42c1..c5ca4de603 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py @@ -16,7 +16,7 @@ import azlmbr.entity as entity import azlmbr.math as math import azlmbr.paths -sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) +sys.path.append(os.path.join(azlmbr.paths.projectroot, 'Gem', 'PythonTests')) from automatedtesting_shared.editor_test_helper import EditorTestHelper diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg index 3adc32d20a..ccc605cec9 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg @@ -1,2 +1,2 @@ # this file is copied to $/dev/editor_autoexec.cfg so the the Editor automation runs for this Hydra test -pyRunFile @devroot@/Tests/hydra/LevelComponentCommands_test_case.py exit_when_done \ No newline at end of file +pyRunFile @engroot@/Tests/hydra/LevelComponentCommands_test_case.py exit_when_done \ No newline at end of file diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg index 6230dfe0fa..3cbd84c1b5 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg @@ -1,2 +1,2 @@ # this file is copied to $/dev/editor_autoexec.cfg so the the Editor automation runs for this Hydra test -pyRunFile @devroot@/Tests/hydra/ViewportTitleDlgCommands_test_case.py \ No newline at end of file +pyRunFile @engroot@/Tests/hydra/ViewportTitleDlgCommands_test_case.py \ No newline at end of file diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py index 154b5730d7..783f71e06c 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py @@ -361,3 +361,19 @@ class EditorEntity: :return: True if "isVisible" is enabled, False otherwise. """ return editor.EditorEntityInfoRequestBus(bus.Event, "IsVisible", self.id) + + def set_local_uniform_scale(self, scale_float) -> None: + """ + Sets the "SetLocalUniformScale" value on the entity. + :param scale_float: value for "SetLocalUniformScale" to set to. + :return: None + """ + azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalUniformScale", self.id, scale_float) + + def set_local_rotation(self, vector3_rotation) -> None: + """ + Sets the "SetLocalRotation" value on the entity. + :param vector3_rotation: The math.Vector3 value to use for rotation on the entity (uses radians). + :return: None + """ + azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalRotation", self.id, vector3_rotation) diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py index cc217f81da..ef3048d8d4 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py @@ -4,18 +4,18 @@ For complete copyright and license terms please see the LICENSE at the root of t SPDX-License-Identifier: Apache-2.0 OR MIT """ + +import json +import math import os import time -import math +import traceback +from typing import Callable, Tuple import azlmbr import azlmbr.legacy.general as general import azlmbr.debug -import json -import traceback - -from typing import Callable, Tuple class FailFast(Exception): """ @@ -127,6 +127,31 @@ class TestHelper: if ret: return True + @staticmethod + def close_error_windows(): + """ + Closes Error Report and Error Log windows that block focus if they are visible. + :return: None + """ + if general.is_pane_visible("Error Report"): + general.close_pane("Error Report") + if general.is_pane_visible("Error Log"): + general.close_pane("Error Log") + + @staticmethod + def close_display_helpers(): + """ + Closes helper gizmos, anti-aliasing, and FPS meters. + :return: None + """ + if general.is_helpers_shown(): + general.toggle_helpers() + general.idle_wait(1.0) + general.idle_wait(1.0) + general.run_console("r_displayInfo=0") + general.run_console("r_antialiasingmode=0") + general.idle_wait(1.0) + class Timeout: # type: (float) -> None @@ -149,6 +174,7 @@ class Timeout: def timed_out(self): return time.time() > self.die_after + class Report: _results = [] _exception = None @@ -290,8 +316,8 @@ class Report: Report.info(" x: {:.2f}, y: {:.2f}, z: {:.2f}".format(vector3.x, vector3.y, vector3.z)) if magnitude is not None: Report.info(" magnitude: {:.2f}".format(magnitude)) - - + + ''' Utility for scope tracing errors and warnings. Usage: @@ -303,7 +329,7 @@ Usage: Report.result(Tests.warnings_not_found_in_section, not section_tracer.has_warnings) -''' +''' class Tracer: def __init__(self): self.warnings = [] @@ -349,10 +375,10 @@ class Tracer: self.line = args[1] self.function = args[2] self.message = args[3] - + def __str__(self): return f"Assert: [{self.filename}:{self.function}:{self.line}]: {self.message}" - + def __repr__(self): return f"[Assert: {self.message}]" @@ -360,21 +386,21 @@ class Tracer: def __init__(self, args): self.window = args[0] self.message = args[1] - + def _on_warning(self, args): warningInfo = Tracer.WarningInfo(args) self.warnings.append(warningInfo) Report.info("Tracer caught Warning: %s" % warningInfo.message) self.has_warnings = True return False - + def _on_error(self, args): errorInfo = Tracer.ErrorInfo(args) self.errors.append(errorInfo) Report.info("Tracer caught Error: %s" % errorInfo.message) self.has_errors = True return False - + def _on_assert(self, args): assertInfo = Tracer.AssertInfo(args) self.asserts.append(assertInfo) @@ -436,6 +462,7 @@ class AngleHelper: def vector3_str(vector3): return "(x: {:.2f}, y: {:.2f}, z: {:.2f})".format(vector3.x, vector3.y, vector3.z) - + + def aabb_str(aabb): return "[Min: %s, Max: %s]" % (vector3_str(aabb.min), vector3_str(aabb.max)) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt index f1299ddc2d..d5c7fd5109 100644 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt @@ -96,19 +96,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ## GradientSignal ## - ly_add_pytest( - NAME AutomatedTesting::GradientSignalTests_Periodic - TEST_SERIAL - TEST_SUITE periodic - PATH ${CMAKE_CURRENT_LIST_DIR}/gradient_signal/TestSuite_Periodic.py - RUNTIME_DEPENDENCIES - AZ::AssetProcessor - Legacy::Editor - AutomatedTesting.Assets - COMPONENT - LargeWorlds - ) - ly_add_pytest( NAME AutomatedTesting::GradientSignalTests_Periodic_Optimized TEST_SERIAL diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py index e51be58ec6..84c661873c 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py @@ -109,7 +109,7 @@ def DynamicSliceInstanceSpawner_Embedded_E2E(): # 6) Save and export to engine general.save_level() general.export_to_engine() - pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak") + pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak") Report.result(Tests.saved_and_exported, os.path.exists(pak_path)) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py index 7a0abdd969..de2554034f 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py @@ -131,7 +131,7 @@ def DynamicSliceInstanceSpawner_External_E2E(): # 6) Save and export to engine general.save_level() general.export_to_engine() - pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak") + pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak") Report.result(Tests.saved_and_exported, os.path.exists(pak_path)) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py index f56c0b836e..bf6501f469 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py @@ -155,7 +155,7 @@ def LayerBlender_E2E_Editor(): # 6) Save and export to engine general.save_level() general.export_to_engine() - pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak") + pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak") Report.result(Tests.saved_and_exported, os.path.exists(pak_path)) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py index f996a1f8c3..514504d324 100644 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py @@ -10,7 +10,6 @@ import pytest from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite -@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.") @pytest.mark.SUITE_periodic @pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("project", ["AutomatedTesting"]) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py b/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py index 65ebf8e59e..957536fffb 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py @@ -17,7 +17,7 @@ import azlmbr.vegetation as vegetation import azlmbr.areasystem as areasystem import azlmbr.paths -sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) +sys.path.append(os.path.join(azlmbr.paths.projectroot, 'Gem', 'PythonTests')) import editor_python_test_tools.hydra_editor_utils as hydra @@ -25,7 +25,7 @@ def create_surface_entity(name, center_point, box_size_x, box_size_y, box_size_z # Create a "flat surface" entity to use as a plantable vegetation surface surface_entity = hydra.Entity(name) surface_entity.create_entity( - center_point, + center_point, ["Box Shape", "Shape Surface Tag Emitter"] ) if surface_entity.id.IsValid(): @@ -56,7 +56,7 @@ def create_vegetation_area(name, center_point, box_size_x, box_size_y, box_size_ # Create a vegetation area entity to use as our test vegetation spawner spawner_entity = hydra.Entity(name) spawner_entity.create_entity( - center_point, + center_point, ["Vegetation Layer Spawner", "Box Shape", "Vegetation Asset List"] ) if spawner_entity.id.IsValid(): diff --git a/AutomatedTesting/Gem/PythonTests/prefab/Prefab.py b/AutomatedTesting/Gem/PythonTests/prefab/Prefab.py index 14a1ab62f0..9b4d2d1393 100644 --- a/AutomatedTesting/Gem/PythonTests/prefab/Prefab.py +++ b/AutomatedTesting/Gem/PythonTests/prefab/Prefab.py @@ -25,28 +25,39 @@ import prefab.Prefab_Test_Utils as prefab_test_utils # This is a helper class which contains some of the useful information about a prefab instance. class PrefabInstance: - def __init__(self, name: str=None, prefab_file_name: str=None, container_entity: EditorEntity=EntityId()): - self.name = name + def __init__(self, prefab_file_name: str=None, container_entity: EditorEntity=EntityId()): self.prefab_file_name: str = prefab_file_name self.container_entity: EditorEntity = container_entity + def __eq__(self, other): + return other and self.container_entity.id == other.container_entity.id + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self.container_entity.id) + """ See if this instance is valid to be used with other prefab operations. :return: Whether the target instance is valid or not. """ def is_valid() -> bool: - return self.container_entity.id.IsValid() and self.name is not None and self.prefab_file_name in Prefab.existing_prefabs + return self.container_entity.id.IsValid() and self.prefab_file_name in Prefab.existing_prefabs - """ Reparent this instance to target parent entity. The function will also check pop up dialog ui in editor to see if there's prefab cyclical dependency error while reparenting prefabs. :param parent_entity_id: The id of the entity this instance should be a child of in the transform hierarchy next. """ async def ui_reparent_prefab_instance(self, parent_entity_id: EntityId): - container_entity_name = self.container_entity.get_name() - current_children_entity_ids_having_prefab_name = prefab_test_utils.get_children_ids_by_name(parent_entity_id, container_entity_name) - Report.info(f'current_children_entity_ids_having_prefab_name: {current_children_entity_ids_having_prefab_name}') + container_entity_id_before_reparent = self.container_entity.id + + original_parent = EditorEntity(self.container_entity.get_parent_id()) + original_parent_before_reparent_children_ids = set(original_parent.get_children_ids()) + + new_parent = EditorEntity(parent_entity_id) + new_parent_before_reparent_children_ids = set(new_parent.get_children_ids()) pyside_utils.run_soon(lambda: self.container_entity.set_parent_entity(parent_entity_id)) pyside_utils.run_soon(lambda: prefab_test_utils.wait_for_propagation()) @@ -60,18 +71,23 @@ class PrefabInstance: except pyside_utils.EventLoopTimeoutException: pass - updated_children_entity_ids_having_prefab_name = prefab_test_utils.get_children_ids_by_name(parent_entity_id, container_entity_name) - Report.info(f'updated_children_entity_ids_having_prefab_name: {updated_children_entity_ids_having_prefab_name}') - new_child_with_reparented_prefab_name_added = len(updated_children_entity_ids_having_prefab_name) == len(current_children_entity_ids_having_prefab_name) + 1 - assert new_child_with_reparented_prefab_name_added, "No entity with reparented prefab name become a child of target parent entity" + original_parent_after_reparent_children_ids = set(original_parent.get_children_ids()) + assert len(original_parent_after_reparent_children_ids) == len(original_parent_before_reparent_children_ids) - 1, \ + "The children count of the Prefab Instance's original parent should be decreased by 1." + assert not container_entity_id_before_reparent in original_parent_after_reparent_children_ids, \ + "This Prefab Instance is still a child entity of its original parent entity." + + new_parent_after_reparent_children_ids = set(new_parent.get_children_ids()) + assert len(new_parent_after_reparent_children_ids) == len(new_parent_before_reparent_children_ids) + 1, \ + "The children count of the Prefab Instance's new parent should be increased by 1." - updated_container_entity_id = set(updated_children_entity_ids_having_prefab_name).difference(current_children_entity_ids_having_prefab_name).pop() - updated_container_entity = EditorEntity(updated_container_entity_id) - updated_container_entity_parent_id = updated_container_entity.get_parent_id() - has_correct_parent = updated_container_entity_parent_id.ToString() == parent_entity_id.ToString() - assert has_correct_parent, "Prefab reparented is *not* under the expected parent entity" + container_entity_id_after_reparent = set(new_parent_after_reparent_children_ids).difference(new_parent_before_reparent_children_ids).pop() + reparented_container_entity = EditorEntity(container_entity_id_after_reparent) + reparented_container_entity_parent_id = reparented_container_entity.get_parent_id() + has_correct_parent = reparented_container_entity_parent_id.ToString() == parent_entity_id.ToString() + assert has_correct_parent, "Prefab Instance reparented is *not* under the expected parent entity" - self.container_entity = EditorEntity(updated_container_entity_id) + self.container_entity = reparented_container_entity # This is a helper class which contains some of the useful information about a prefab template. class Prefab: @@ -81,7 +97,7 @@ class Prefab: def __init__(self, file_name: str): self.file_name:str = file_name self.file_path: str = prefab_test_utils.get_prefab_file_path(file_name) - self.instances: dict = {} + self.instances: set[PrefabInstance] = set() """ Check if a prefab is ready to be used to generate its instances. @@ -122,10 +138,10 @@ class Prefab: :param entities: The entities that should form the new prefab (along with their descendants). :param file_name: A unique file name of new prefab. :param prefab_instance_name: A name for the very first instance generated while prefab creation. The default instance name is the same as file_name. - :return: An outcome object with an entityId of the new prefab's container entity; on failure, it comes with an error message detailing the cause of the error. + :return: Created Prefab object and the very first PrefabInstance object owned by the prefab. """ @classmethod - def create_prefab(cls, entities: list[EditorEntity], file_name: str, prefab_instance_name: str=None) -> Prefab: + def create_prefab(cls, entities: list[EditorEntity], file_name: str, prefab_instance_name: str=None) -> (Prefab, PrefabInstance): assert not Prefab.is_prefab_loaded(file_name), f"Can't create Prefab '{file_name}' since the prefab already exists" new_prefab = Prefab(file_name) @@ -133,18 +149,18 @@ class Prefab: create_prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'CreatePrefabInMemory', entity_ids, new_prefab.file_path) assert create_prefab_result.IsSuccess(), f"Prefab operation 'CreatePrefab' failed. Error: {create_prefab_result.GetError()}" - container_entity = EditorEntity(create_prefab_result.GetValue()) + container_entity_id = create_prefab_result.GetValue() + container_entity = EditorEntity(container_entity_id) if prefab_instance_name: container_entity.set_name(prefab_instance_name) - else: - prefab_instance_name = file_name prefab_test_utils.wait_for_propagation() - container_entity_id = prefab_test_utils.find_entity_by_unique_name(prefab_instance_name) - new_prefab.instances[prefab_instance_name] = PrefabInstance(prefab_instance_name, file_name, EditorEntity(container_entity_id)) + + new_prefab_instance = PrefabInstance(file_name, EditorEntity(container_entity_id)) + new_prefab.instances.add(new_prefab_instance) Prefab.existing_prefabs[file_name] = new_prefab - return new_prefab + return new_prefab, new_prefab_instance """ Remove target prefab instances. @@ -152,22 +168,15 @@ class Prefab: """ @classmethod def remove_prefabs(cls, prefab_instances: list[PrefabInstance]): - instances_to_remove_name_counts = Counter() - instances_removed_expected_name_counts = Counter() - - entities_to_remove = [prefab_instance.container_entity for prefab_instance in prefab_instances] - while entities_to_remove: - entity = entities_to_remove.pop(-1) - entity_name = entity.get_name() - instances_to_remove_name_counts[entity_name] += 1 - + entity_ids_to_remove = [] + entity_id_queue = [prefab_instance.container_entity for prefab_instance in prefab_instances] + while entity_id_queue: + entity = entity_id_queue.pop(0) children_entity_ids = entity.get_children_ids() for child_entity_id in children_entity_ids: - entities_to_remove.append(EditorEntity(child_entity_id)) + entity_id_queue.append(EditorEntity(child_entity_id)) - for entity_name, entity_count in instances_to_remove_name_counts.items(): - entities = prefab_test_utils.find_entities_by_name(entity_name) - instances_removed_expected_name_counts[entity_name] = len(entities) - entity_count + entity_ids_to_remove.append(entity.id) container_entity_ids = [prefab_instance.container_entity.id for prefab_instance in prefab_instances] delete_prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'DeleteEntitiesAndAllDescendantsInInstance', container_entity_ids) @@ -175,28 +184,24 @@ class Prefab: prefab_test_utils.wait_for_propagation() - prefab_entities_deleted = True - for entity_name, expected_entity_count in instances_removed_expected_name_counts.items(): - actual_entity_count = len(prefab_test_utils.find_entities_by_name(entity_name)) - if actual_entity_count is not expected_entity_count: - prefab_entities_deleted = False - break - - assert prefab_entities_deleted, "Not all entities and descendants in target prefabs are deleted." + entity_ids_after_delete = set(prefab_test_utils.get_all_entities()) + for entity_id_removed in entity_ids_to_remove: + if entity_id_removed in entity_ids_after_delete: + assert prefab_entities_deleted, "Not all entities and descendants in target prefabs are deleted." for instance in prefab_instances: instance_deleted_prefab = Prefab.get_prefab(instance.prefab_file_name) - instance_deleted_prefab.instances.pop(instance.name) + instance_deleted_prefab.instances.remove(instance) instance = PrefabInstance() """ Instantiate an instance of this prefab. - :param name: A name for newly instantiated prefab instance. The default instance name is the same as this prefab's file name. :param parent_entity: The entity the prefab should be a child of in the transform hierarchy. + :param name: A name for newly instantiated prefab instance. The default instance name is the same as this prefab's file name. :param prefab_position: The position in world space the prefab should be instantiated in. - :return: An outcome object with an entityId of the new prefab's container entity; on failure, it comes with an error message detailing the cause of the error. + :return: Instantiated PrefabInstance object owned by this prefab. """ - def instantiate(self, name: str=None, parent_entity: EditorEntity=None, prefab_position: Vector3=Vector3()) -> PrefabInstance: + def instantiate(self, parent_entity: EditorEntity=None, name: str=None, prefab_position: Vector3=Vector3()) -> PrefabInstance: parent_entity_id = parent_entity.id if parent_entity is not None else EntityId() instantiate_prefab_result = prefab.PrefabPublicRequestBus( @@ -209,13 +214,13 @@ class Prefab: if name: container_entity.set_name(name) - else: - name = self.file_name prefab_test_utils.wait_for_propagation() - container_entity_id = prefab_test_utils.find_entity_by_unique_name(name) - self.instances[name] = PrefabInstance(name, self.file_name, EditorEntity(container_entity_id)) + + new_prefab_instance = PrefabInstance(self.file_name, EditorEntity(container_entity_id)) + assert not new_prefab_instance in self.instances, "This prefab instance is already existed before this instantiation." + self.instances.add(new_prefab_instance) prefab_test_utils.check_entity_at_position(container_entity_id, prefab_position) - return container_entity_id + return new_prefab_instance diff --git a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndDeletePrefab.py b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndDeletePrefab.py index c6e0daa4dd..f3fbcfa6ad 100644 --- a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndDeletePrefab.py +++ b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndDeletePrefab.py @@ -22,11 +22,10 @@ def Prefab_BasicWorkflow_CreateAndDeletePrefab(): car_prefab_entities = [car_entity] # Checks for prefab creation passed or not - car_prefab = Prefab.create_prefab( + _, car = Prefab.create_prefab( car_prefab_entities, CAR_PREFAB_FILE_NAME) # Checks for prefab deletion passed or not - car = car_prefab.instances[CAR_PREFAB_FILE_NAME] Prefab.remove_prefabs([car]) if __name__ == "__main__": diff --git a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndReparentPrefab.py b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndReparentPrefab.py index 04f7b97628..e5a9d9930a 100644 --- a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndReparentPrefab.py +++ b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_CreateAndReparentPrefab.py @@ -28,7 +28,7 @@ def Prefab_BasicWorkflow_CreateAndReparentPrefab(): car_prefab_entities = [car_entity] # Checks for prefab creation passed or not - car_prefab = Prefab.create_prefab( + _, car = Prefab.create_prefab( car_prefab_entities, CAR_PREFAB_FILE_NAME) # Creates another new Entity at the root level @@ -36,12 +36,10 @@ def Prefab_BasicWorkflow_CreateAndReparentPrefab(): wheel_prefab_entities = [wheel_entity] # Checks for wheel prefab creation passed or not - wheel_prefab = Prefab.create_prefab( + _, wheel = Prefab.create_prefab( wheel_prefab_entities, WHEEL_PREFAB_FILE_NAME) # Checks for prefab reparenting passed or not - car = car_prefab.instances[CAR_PREFAB_FILE_NAME] - wheel = wheel_prefab.instances[WHEEL_PREFAB_FILE_NAME] await wheel.ui_reparent_prefab_instance(car.container_entity.id) run_test() diff --git a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_InstantiatePrefab.py b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_InstantiatePrefab.py index b9015ab556..46be669697 100644 --- a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_InstantiatePrefab.py +++ b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_BasicWorkflow_InstantiatePrefab.py @@ -22,11 +22,11 @@ def Prefab_BasicWorkflow_InstantiatePrefab(): # Checks for prefab instantiation passed or not test_prefab = Prefab.get_prefab(EXISTING_TEST_PREFAB_FILE_NAME) - instantiated_test_container_entity_id = test_prefab.instantiate( + test_instance = test_prefab.instantiate( prefab_position=INSTANTIATED_TEST_PREFAB_POSITION) prefab_test_utils.check_entity_children_count( - instantiated_test_container_entity_id, + test_instance.container_entity.id, EXPECTED_TEST_PREFAB_CHILDREN_COUNT) if __name__ == "__main__": diff --git a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_Test_Utils.py b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_Test_Utils.py index 8cd59ed077..3e19911449 100644 --- a/AutomatedTesting/Gem/PythonTests/prefab/Prefab_Test_Utils.py +++ b/AutomatedTesting/Gem/PythonTests/prefab/Prefab_Test_Utils.py @@ -29,20 +29,8 @@ def find_entities_by_name(entity_name): searchFilter.names = [entity_name] return entity.SearchBus(bus.Broadcast, 'SearchEntities', searchFilter) -def find_entity_by_unique_name(entity_name): - unique_name_entity_found_result = ( - "Entity with a unique name found", - "Entity with a unique name *not* found") - - entities = find_entities_by_name(entity_name) - unique_name_entity_found = len(entities) == 1 - Report.result(unique_name_entity_found_result, unique_name_entity_found) - - if unique_name_entity_found: - return entities[0] - else: - Report.info(f"{len(entities)} entities with name '{entity_name}' found") - return EntityId() +def get_all_entities(): + return entity.SearchBus(bus.Broadcast, 'SearchEntities', entity.SearchFilter()) def check_entity_at_position(entity_id, expected_entity_position): entity_at_expected_position_result = ( diff --git a/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py index 0862e03a79..b2001e6825 100755 --- a/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py +++ b/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py @@ -122,6 +122,7 @@ class TestAutomation(TestAutomationBase): from . import Debugger_HappyPath_TargetMultipleEntities as test_module self._run_test(request, workspace, editor, test_module) + @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") def test_EditMenu_Default_UndoRedo(self, request, workspace, editor, launcher_platform, project): from . import EditMenu_Default_UndoRedo as test_module self._run_test(request, workspace, editor, test_module) @@ -181,6 +182,7 @@ class TestAutomation(TestAutomationBase): from . import NodePalette_SearchText_Deletion as test_module self._run_test(request, workspace, editor, test_module) + @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") def test_VariableManager_UnpinVariableType_Works(self, request, workspace, editor, launcher_platform): from . import VariableManager_UnpinVariableType_Works as test_module self._run_test(request, workspace, editor, test_module) diff --git a/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace b/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace index 188fee9f05..05140f340b 100644 --- a/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace +++ b/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\n" +startScript="ImportActor -filename \"@products@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\n" diff --git a/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace b/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace index e429d74a57..870b9a8579 100644 --- a/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace +++ b/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_skeleton_newgeo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@assets@/Levels/Physics/C15096734_PhysxMaterials_DefaultMaterialLibrary/custom_motionset.motionset\"\nLoadAnimGraph -filename \"@assets@/Levels/Physics/C15096734_PhysxMaterials_DefaultMaterialLibrary/rin_physics.animgraph\"\n" +startScript="ImportActor -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_skeleton_newgeo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/custom_motionset.motionset\"\nLoadAnimGraph -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_physics.animgraph\"\n" diff --git a/AutomatedTesting/Registry/assets_scan_folders.setreg b/AutomatedTesting/Registry/assets_scan_folders.setreg index 91061f3337..c74ba6703e 100644 --- a/AutomatedTesting/Registry/assets_scan_folders.setreg +++ b/AutomatedTesting/Registry/assets_scan_folders.setreg @@ -51,6 +51,14 @@ [ "Gems/UiBasics" ] + }, + "Hair": + { + "SourcePaths": + [ + "Gems/AtomTressFX/Assets", + "Gems/AtomTressFX/Assets/Passes" + ] } } } diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override index 7065f0dfeb..209e9a9feb 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override @@ -109,7 +109,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physxsystemconfiguration.setreg b/AutomatedTesting/Registry/physxsystemconfiguration.setreg index 83aad307a6..2ade83d769 100644 --- a/AutomatedTesting/Registry/physxsystemconfiguration.setreg +++ b/AutomatedTesting/Registry/physxsystemconfiguration.setreg @@ -103,7 +103,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/multiple_mesh_one_material/FBXTestTexture.png b/AutomatedTesting/multiple_mesh_one_material/FBXTestTexture.png new file mode 100644 index 0000000000..4f52364cb3 --- /dev/null +++ b/AutomatedTesting/multiple_mesh_one_material/FBXTestTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:827a63985273229050bf4f63030bcc666f045091fe81cf8157a9ca23b40074b6 +size 3214 diff --git a/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx new file mode 100644 index 0000000000..d9deb899f0 --- /dev/null +++ b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8d24963e6e8765205bc79cbe2304fc39f1245ee75249e2834a71c96c3cab824 +size 22700 diff --git a/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx.assetinfo b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx.assetinfo new file mode 100644 index 0000000000..fe18a16cb5 --- /dev/null +++ b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx.assetinfo @@ -0,0 +1,8 @@ +{ + "values": [ + { + "$type": "ScriptProcessorRule", + "scriptFilename": "Editor/Scripts/scene_mesh_to_prefab.py" + } + ] +} \ No newline at end of file diff --git a/Code/Editor/AssetEditor/AssetEditorRequestsHandler.h b/Code/Editor/AssetEditor/AssetEditorRequestsHandler.h index ebfa84249d..bbe55e216a 100644 --- a/Code/Editor/AssetEditor/AssetEditorRequestsHandler.h +++ b/Code/Editor/AssetEditor/AssetEditorRequestsHandler.h @@ -7,7 +7,6 @@ */ #pragma once -#include #include #include diff --git a/Code/Editor/AssetEditor/AssetEditorWindow.h b/Code/Editor/AssetEditor/AssetEditorWindow.h index 2cf73ac282..63347d6ff3 100644 --- a/Code/Editor/AssetEditor/AssetEditorWindow.h +++ b/Code/Editor/AssetEditor/AssetEditorWindow.h @@ -9,7 +9,6 @@ #if !defined(Q_MOC_RUN) #include -#include #include #include #include diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp index 18946c7874..9fe4cfd0d2 100644 --- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp +++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp @@ -141,6 +141,10 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) m_ui->m_assetBrowserTreeViewWidget, &AzAssetBrowser::AssetBrowserTreeView::ClearTypeFilter, m_ui->m_searchWidget, &AzAssetBrowser::SearchWidget::ClearTypeFilter); + connect( + this, &AzAssetBrowserWindow::SizeChangedSignal, m_ui->m_assetBrowserTableViewWidget, + &AzAssetBrowser::AssetBrowserTableView::UpdateSizeSlot); + m_ui->m_assetBrowserTreeViewWidget->SetName("AssetBrowserTreeView_main"); } @@ -164,6 +168,25 @@ QObject* AzAssetBrowserWindow::createListenerForShowAssetEditorEvent(QObject* pa return listener; } +void AzAssetBrowserWindow::resizeEvent(QResizeEvent* resizeEvent) +{ + // leftLayout is the parent of the tableView + // rightLayout is the parent of the preview window. + // Workaround: When docking windows this event keeps holding the old size of the widgets instead of the new one + // but the resizeEvent holds the new size of the whole widget + // So we have to save the proportions somehow + const QWidget* leftLayout = m_ui->m_leftLayout; + const QVBoxLayout* rightLayout = m_ui->m_rightLayout; + + const float oldLeftLayoutWidth = aznumeric_cast(leftLayout->geometry().width()); + const float oldWidth = aznumeric_cast(leftLayout->geometry().width() + rightLayout->geometry().width()); + + const float newWidth = oldLeftLayoutWidth * aznumeric_cast(resizeEvent->size().width()) / oldWidth; + + emit SizeChangedSignal(aznumeric_cast(newWidth)); + QWidget::resizeEvent(resizeEvent); +} + void AzAssetBrowserWindow::OnInitViewToggleButton() { CreateSwitchViewMenu(); diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h index bf742b0cf2..753f000300 100644 --- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h +++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h @@ -53,9 +53,17 @@ public: static QObject* createListenerForShowAssetEditorEvent(QObject* parent); + +Q_SIGNALS: + void SizeChangedSignal(int newWidth); + +protected: + void resizeEvent(QResizeEvent* resizeEvent) override; + private: void OnInitViewToggleButton(); void UpdateDisplayInfo(); + protected slots: void CreateSwitchViewMenu(); void SetExpandedAssetBrowserMode(); diff --git a/Code/Editor/CMakeLists.txt b/Code/Editor/CMakeLists.txt index 5884795413..2ea0aa1a74 100644 --- a/Code/Editor/CMakeLists.txt +++ b/Code/Editor/CMakeLists.txt @@ -33,7 +33,6 @@ ly_add_target( BUILD_DEPENDENCIES PRIVATE Legacy::CryCommon - 3rdParty::zlib PUBLIC 3rdParty::Qt::Core 3rdParty::Qt::Gui @@ -105,7 +104,6 @@ ly_add_target( 3rdParty::Qt::Concurrent 3rdParty::tiff 3rdParty::squish-ccr - 3rdParty::zlib 3rdParty::AWSNativeSDK::STS Legacy::CryCommon Legacy::EditorCommon diff --git a/Code/Editor/Controls/FolderTreeCtrl.cpp b/Code/Editor/Controls/FolderTreeCtrl.cpp index b1cbb9414e..4088ab976f 100644 --- a/Code/Editor/Controls/FolderTreeCtrl.cpp +++ b/Code/Editor/Controls/FolderTreeCtrl.cpp @@ -278,17 +278,16 @@ void CFolderTreeCtrl::LoadTreeRec(const QString& currentFolder) void CFolderTreeCtrl::AddItem(const QString& path) { - QString folder; - QString fileNameWithoutExtension; - QString ext; - - Path::Split(path, folder, fileNameWithoutExtension, ext); + AZ::IO::FixedMaxPath folder{ AZ::IO::PathView(path.toUtf8().constData()) }; + AZ::IO::FixedMaxPath fileNameWithoutExtension = folder.Extension(); + folder = folder.ParentPath(); auto regex = QRegExp(m_fileNameSpec, Qt::CaseInsensitive, QRegExp::Wildcard); if (regex.exactMatch(path)) { - CTreeItem* folderTreeItem = CreateFolderItems(folder); - folderTreeItem->AddChild(fileNameWithoutExtension, path, eTreeImage_File); + CTreeItem* folderTreeItem = CreateFolderItems(QString::fromUtf8(folder.c_str(), static_cast(folder.Native().size()))); + folderTreeItem->AddChild(QString::fromUtf8(fileNameWithoutExtension.c_str(), + static_cast(fileNameWithoutExtension.Native().size())), path, eTreeImage_File); } } diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.cpp b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.cpp index 40ea71f577..1151137bfc 100644 --- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.cpp +++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.cpp @@ -26,6 +26,9 @@ #include #include +//AzCore +#include + // Editor #include "Clipboard.h" diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h index 64a4341096..ed5d1915ac 100644 --- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h +++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h @@ -12,7 +12,6 @@ #if !defined(Q_MOC_RUN) #include -#include #include #include "Include/EditorCoreAPI.h" #include "ReflectedPropertyItem.h" diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.h b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.h index a15f8326d1..7c38465c5e 100644 --- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.h +++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.h @@ -10,10 +10,10 @@ #define CRYINCLUDE_EDITOR_UTILS_REFLECTEDVAR_H #pragma once -#include #include #include #include "Util/VariablePropertyType.h" +#include #include #include #include diff --git a/Code/Editor/Core/QtEditorApplication.cpp b/Code/Editor/Core/QtEditorApplication.cpp index 66ed42af8f..a4aab24be4 100644 --- a/Code/Editor/Core/QtEditorApplication.cpp +++ b/Code/Editor/Core/QtEditorApplication.cpp @@ -44,7 +44,7 @@ enum { // in milliseconds GameModeIdleFrequency = 0, - EditorModeIdleFrequency = 0, + EditorModeIdleFrequency = 1, InactiveModeFrequency = 10, UninitializedFrequency = 9999, }; diff --git a/Code/Editor/Core/Tests/test_Main.cpp b/Code/Editor/Core/Tests/test_Main.cpp index 3d3e286f18..16b0aa92cf 100644 --- a/Code/Editor/Core/Tests/test_Main.cpp +++ b/Code/Editor/Core/Tests/test_Main.cpp @@ -33,6 +33,7 @@ public: protected: void SetupEnvironment() override { + AttachEditorCoreAZEnvironment(AZ::Environment::GetInstance()); m_allocatorScope.ActivateAllocators(); m_cryPak = new NiceMock(); @@ -49,6 +50,7 @@ protected: { delete m_cryPak; m_allocatorScope.DeactivateAllocators(); + DetachEditorCoreAZEnvironment(); } private: diff --git a/Code/Editor/Core/Tests/test_PathUtil.cpp b/Code/Editor/Core/Tests/test_PathUtil.cpp index 83e50a5947..cade19eb81 100644 --- a/Code/Editor/Core/Tests/test_PathUtil.cpp +++ b/Code/Editor/Core/Tests/test_PathUtil.cpp @@ -5,22 +5,29 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include "EditorDefs.h" -#include -#include "Util/PathUtil.h" -#include - -TEST(PathUtil, GamePathToFullPath_DoesNotBufferOverflow) +#include +#include +namespace UnitTest { - // There are no test assertions in this test because the purpose is just to verify that the test runs without crashing - QString pngExtension(".png"); + class PathUtil + : public ScopedAllocatorSetupFixture + { + }; + + TEST_F(PathUtil, GamePathToFullPath_DoesNotBufferOverflow) + { + // There are no test assertions in this test because the purpose is just to verify that the test runs without crashing + QString pngExtension(".png"); - // Create a string of lenth AZ_MAX_PATH_LEN that ends in .png - QString longStringMaxPath(AZ_MAX_PATH_LEN, 'x'); - longStringMaxPath.replace(longStringMaxPath.length() - pngExtension.length(), longStringMaxPath.length(), pngExtension); - Path::GamePathToFullPath(longStringMaxPath); + // Create a string of length AZ_MAX_PATH_LEN that ends in .png + QString longStringMaxPath(AZ_MAX_PATH_LEN, 'x'); + longStringMaxPath.replace(longStringMaxPath.length() - pngExtension.length(), longStringMaxPath.length(), pngExtension); + AZ_TEST_START_TRACE_SUPPRESSION; + Path::GamePathToFullPath(longStringMaxPath); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; - QString longStringMaxPathPlusOne(AZ_MAX_PATH_LEN + 1, 'x'); - longStringMaxPathPlusOne.replace(longStringMaxPathPlusOne.length() - pngExtension.length(), longStringMaxPathPlusOne.length(), pngExtension); - Path::GamePathToFullPath(longStringMaxPathPlusOne); + QString longStringMaxPathPlusOne(AZ_MAX_PATH_LEN + 1, 'x'); + longStringMaxPathPlusOne.replace(longStringMaxPathPlusOne.length() - pngExtension.length(), longStringMaxPathPlusOne.length(), pngExtension); + Path::GamePathToFullPath(longStringMaxPathPlusOne); + } } diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp index b5eb4229df..4aa3d22114 100644 --- a/Code/Editor/CryEdit.cpp +++ b/Code/Editor/CryEdit.cpp @@ -2642,7 +2642,7 @@ void CCryEditApp::OnFileResaveSlices() sliceAssetInfos.reserve(5000); AZ::Data::AssetCatalogRequests::AssetEnumerationCB sliceCountCb = [&sliceAssetInfos]([[maybe_unused]] const AZ::Data::AssetId id, const AZ::Data::AssetInfo& info) { - // Only add slices and nothing that has been temporarily added to the catalog with a macro in it (ie @devroot@) + // Only add slices and nothing that has been temporarily added to the catalog with a macro in it (ie @engroot@) if (info.m_assetType == azrtti_typeid() && info.m_relativePath[0] != '@') { sliceAssetInfos.push_back(info); diff --git a/Code/Editor/CryEditDoc.cpp b/Code/Editor/CryEditDoc.cpp index 07d946c609..75bd0ad270 100644 --- a/Code/Editor/CryEditDoc.cpp +++ b/Code/Editor/CryEditDoc.cpp @@ -1108,7 +1108,7 @@ bool CCryEditDoc::SaveLevel(const QString& filename) if (QFileInfo(filename).isRelative()) { // Resolving the path through resolvepath would normalize and lowcase it, and in this case, we don't want that. - fullPathName = Path::ToUnixPath(QDir(QString::fromUtf8(gEnv->pFileIO->GetAlias("@devassets@"))).absoluteFilePath(fullPathName)); + fullPathName = Path::ToUnixPath(QDir(QString::fromUtf8(gEnv->pFileIO->GetAlias("@projectroot@"))).absoluteFilePath(fullPathName)); } if (!CFileUtil::OverwriteFile(fullPathName)) @@ -2159,7 +2159,7 @@ bool CCryEditDoc::LoadXmlArchiveArray(TDocMultiArchive& arrXmlAr, const QString& xmlAr.bLoading = true; // bound to the level folder, as if it were the assets folder. - // this mounts (whateverlevelname.ly) as @assets@/Levels/whateverlevelname/ and thus it works... + // this mounts (whateverlevelname.ly) as @products@/Levels/whateverlevelname/ and thus it works... bool openLevelPakFileSuccess = pIPak->OpenPack(levelPath.toUtf8().data(), absoluteLevelPath.toUtf8().data()); if (!openLevelPakFileSuccess) { diff --git a/Code/Editor/Dialogs/PythonScriptsDialog.cpp b/Code/Editor/Dialogs/PythonScriptsDialog.cpp index e95fb90c0a..35047947ac 100644 --- a/Code/Editor/Dialogs/PythonScriptsDialog.cpp +++ b/Code/Editor/Dialogs/PythonScriptsDialog.cpp @@ -91,7 +91,7 @@ CPythonScriptsDialog::CPythonScriptsDialog(QWidget* parent) { AZ::IO::Path newSourcePath = jsonSourcePathPointer; // Resolve any file aliases first - Do not use ResolvePath() as that assumes - // any relative path is underneath the @assets@ alias + // any relative path is underneath the @products@ alias if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { AZ::IO::FixedMaxPath replacedAliasPath; diff --git a/Code/Editor/EditorFileMonitor.cpp b/Code/Editor/EditorFileMonitor.cpp index 7feb9d32a8..311c42befa 100644 --- a/Code/Editor/EditorFileMonitor.cpp +++ b/Code/Editor/EditorFileMonitor.cpp @@ -14,6 +14,8 @@ // Editor #include "CryEdit.h" +#include + ////////////////////////////////////////////////////////////////////////// CEditorFileMonitor::CEditorFileMonitor() { @@ -177,26 +179,14 @@ void CEditorFileMonitor::OnFileMonitorChange(const SFileChangeInfo& rChange) // Make file relative to PrimaryCD folder. QString filename = rChange.filename; - // Remove game directory if present in path. - const QString rootPath = - QDir::fromNativeSeparators(QString::fromLatin1(Path::GetEditingRootFolder().c_str())); - if (filename.startsWith(rootPath, Qt::CaseInsensitive)) - { - filename = filename.right(filename.length() - rootPath.length()); - } - - // Make sure there is no leading slash - if (!filename.isEmpty() && (filename[0] == '\\' || filename[0] == '/')) - { - filename = filename.mid(1); - } + // Make path relative to the the project directory + AZ::IO::Path projectPath{ AZ::Utils::GetProjectPath() }; + AZ::IO::FixedMaxPath projectRelativeFilePath = AZ::IO::PathView(filename.toUtf8().constData()).LexicallyProximate( + projectPath); - if (!filename.isEmpty()) + if (!projectRelativeFilePath.empty()) { - //remove game name. Make it relative to the game folder - const QString filenameRelGame = RemoveGameName(filename); - const int extIndex = filename.lastIndexOf('.'); - const QString ext = filename.right(filename.length() - 1 - extIndex); + AZ::IO::PathView ext = projectRelativeFilePath.Extension(); // Check for File Monitor callback std::vector::iterator iter; @@ -207,15 +197,11 @@ void CEditorFileMonitor::OnFileMonitorChange(const SFileChangeInfo& rChange) // We compare against length of callback string, so we get directory matches as well as full filenames if (sCallback.pListener) { - if (sCallback.extension == "*" || ext.compare(sCallback.extension, Qt::CaseInsensitive) == 0) + if (sCallback.extension == "*" || AZ::IO::PathView(sCallback.extension.toUtf8().constData()) == ext) { - if (filenameRelGame.compare(sCallback.item, Qt::CaseInsensitive) == 0) - { - sCallback.pListener->OnFileChange(qPrintable(filenameRelGame), IFileChangeListener::EChangeType(rChange.changeType)); - } - else if (filename.compare(sCallback.item, Qt::CaseInsensitive) == 0) + if (AZ::IO::PathView(sCallback.item.toUtf8().constData()) == projectRelativeFilePath) { - sCallback.pListener->OnFileChange(qPrintable(filename), IFileChangeListener::EChangeType(rChange.changeType)); + sCallback.pListener->OnFileChange(qPrintable(projectRelativeFilePath.c_str()), IFileChangeListener::EChangeType(rChange.changeType)); } } } diff --git a/Code/Editor/EditorModularViewportCameraComposer.cpp b/Code/Editor/EditorModularViewportCameraComposer.cpp index e375e98fb6..c492010336 100644 --- a/Code/Editor/EditorModularViewportCameraComposer.cpp +++ b/Code/Editor/EditorModularViewportCameraComposer.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include namespace SandboxEditor @@ -94,7 +95,8 @@ namespace SandboxEditor cameras.AddCamera(m_firstPersonPanCamera); cameras.AddCamera(m_firstPersonTranslateCamera); cameras.AddCamera(m_firstPersonScrollCamera); - cameras.AddCamera(m_orbitCamera); + cameras.AddCamera(m_firstPersonFocusCamera); + cameras.AddCamera(m_pivotCamera); }); return controller; @@ -110,6 +112,7 @@ namespace SandboxEditor viewportId, &AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Events::BeginCursorCapture); } }; + const auto showCursor = [viewportId = m_viewportId] { if (SandboxEditor::CameraCaptureCursorForLook()) @@ -131,8 +134,8 @@ namespace SandboxEditor m_firstPersonRotateCamera->SetActivationBeganFn(hideCursor); m_firstPersonRotateCamera->SetActivationEndedFn(showCursor); - m_firstPersonPanCamera = - AZStd::make_shared(SandboxEditor::CameraFreePanChannelId(), AzFramework::LookPan); + m_firstPersonPanCamera = AZStd::make_shared( + SandboxEditor::CameraFreePanChannelId(), AzFramework::LookPan, AzFramework::TranslatePivot); m_firstPersonPanCamera->m_panSpeedFn = [] { @@ -151,8 +154,8 @@ namespace SandboxEditor const auto translateCameraInputChannelIds = BuildTranslateCameraInputChannelIds(); - m_firstPersonTranslateCamera = - AZStd::make_shared(AzFramework::LookTranslation, translateCameraInputChannelIds); + m_firstPersonTranslateCamera = AZStd::make_shared( + translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivot); m_firstPersonTranslateCamera->m_translateSpeedFn = [] { @@ -171,120 +174,120 @@ namespace SandboxEditor return SandboxEditor::CameraScrollSpeed(); }; - m_orbitCamera = AZStd::make_shared(SandboxEditor::CameraOrbitChannelId()); + const auto pivotFn = [] + { + // use the manipulator transform as the pivot point + AZStd::optional entityPivot; + AzToolsFramework::EditorTransformComponentSelectionRequestBus::EventResult( + entityPivot, AzToolsFramework::GetEntityContextId(), + &AzToolsFramework::EditorTransformComponentSelectionRequestBus::Events::GetManipulatorTransform); - m_orbitCamera->SetLookAtFn( - [viewportId = m_viewportId](const AZ::Vector3& position, const AZ::Vector3& direction) -> AZStd::optional + if (entityPivot.has_value()) { - AZStd::optional lookAtAfterInterpolation; - AtomToolsFramework::ModularViewportCameraControllerRequestBus::EventResult( - lookAtAfterInterpolation, viewportId, - &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::LookAtAfterInterpolation); + return entityPivot->GetTranslation(); + } - // initially attempt to use the last set look at point after an interpolation has finished - if (lookAtAfterInterpolation.has_value()) - { - return *lookAtAfterInterpolation; - } - - const float RayDistance = 1000.0f; - AzFramework::RenderGeometry::RayRequest ray; - ray.m_startWorldPosition = position; - ray.m_endWorldPosition = position + direction * RayDistance; - ray.m_onlyVisible = true; - - AzFramework::RenderGeometry::RayResult renderGeometryIntersectionResult; - AzFramework::RenderGeometry::IntersectorBus::EventResult( - renderGeometryIntersectionResult, AzToolsFramework::GetEntityContextId(), - &AzFramework::RenderGeometry::IntersectorBus::Events::RayIntersect, ray); - - // attempt a ray intersection with any visible mesh and return the intersection position if successful - if (renderGeometryIntersectionResult) - { - return renderGeometryIntersectionResult.m_worldPosition; - } + // otherwise just use the identity + return AZ::Vector3::CreateZero(); + }; + + m_firstPersonFocusCamera = + AZStd::make_shared(SandboxEditor::CameraFocusChannelId(), AzFramework::FocusLook); - // if there is no selection or no intersection, fallback to default camera orbit behavior (ground plane - // intersection) - return {}; + m_firstPersonFocusCamera->SetPivotFn(pivotFn); + + m_pivotCamera = AZStd::make_shared(SandboxEditor::CameraPivotChannelId()); + + m_pivotCamera->SetPivotFn( + [pivotFn]([[maybe_unused]] const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) + { + return pivotFn(); }); - m_orbitRotateCamera = AZStd::make_shared(SandboxEditor::CameraOrbitLookChannelId()); + m_pivotRotateCamera = AZStd::make_shared(SandboxEditor::CameraPivotLookChannelId()); - m_orbitRotateCamera->m_rotateSpeedFn = [] + m_pivotRotateCamera->m_rotateSpeedFn = [] { return SandboxEditor::CameraRotateSpeed(); }; - m_orbitRotateCamera->m_invertYawFn = [] + m_pivotRotateCamera->m_invertYawFn = [] { - return SandboxEditor::CameraOrbitYawRotationInverted(); + return SandboxEditor::CameraPivotYawRotationInverted(); }; - m_orbitTranslateCamera = - AZStd::make_shared(AzFramework::OrbitTranslation, translateCameraInputChannelIds); + m_pivotTranslateCamera = AZStd::make_shared( + translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslateOffset); - m_orbitTranslateCamera->m_translateSpeedFn = [] + m_pivotTranslateCamera->m_translateSpeedFn = [] { return SandboxEditor::CameraTranslateSpeed(); }; - m_orbitTranslateCamera->m_boostMultiplierFn = [] + m_pivotTranslateCamera->m_boostMultiplierFn = [] { return SandboxEditor::CameraBoostMultiplier(); }; - m_orbitDollyScrollCamera = AZStd::make_shared(); + m_pivotDollyScrollCamera = AZStd::make_shared(); - m_orbitDollyScrollCamera->m_scrollSpeedFn = [] + m_pivotDollyScrollCamera->m_scrollSpeedFn = [] { return SandboxEditor::CameraScrollSpeed(); }; - m_orbitDollyMoveCamera = - AZStd::make_shared(SandboxEditor::CameraOrbitDollyChannelId()); + m_pivotDollyMoveCamera = AZStd::make_shared(SandboxEditor::CameraPivotDollyChannelId()); - m_orbitDollyMoveCamera->m_cursorSpeedFn = [] + m_pivotDollyMoveCamera->m_motionSpeedFn = [] { return SandboxEditor::CameraDollyMotionSpeed(); }; - m_orbitPanCamera = AZStd::make_shared(SandboxEditor::CameraOrbitPanChannelId(), AzFramework::OrbitPan); + m_pivotPanCamera = AZStd::make_shared( + SandboxEditor::CameraPivotPanChannelId(), AzFramework::LookPan, AzFramework::TranslateOffset); - m_orbitPanCamera->m_panSpeedFn = [] + m_pivotPanCamera->m_panSpeedFn = [] { return SandboxEditor::CameraPanSpeed(); }; - m_orbitPanCamera->m_invertPanXFn = [] + m_pivotPanCamera->m_invertPanXFn = [] { return SandboxEditor::CameraPanInvertedX(); }; - m_orbitPanCamera->m_invertPanYFn = [] + m_pivotPanCamera->m_invertPanYFn = [] { return SandboxEditor::CameraPanInvertedY(); }; - m_orbitCamera->m_orbitCameras.AddCamera(m_orbitRotateCamera); - m_orbitCamera->m_orbitCameras.AddCamera(m_orbitTranslateCamera); - m_orbitCamera->m_orbitCameras.AddCamera(m_orbitDollyScrollCamera); - m_orbitCamera->m_orbitCameras.AddCamera(m_orbitDollyMoveCamera); - m_orbitCamera->m_orbitCameras.AddCamera(m_orbitPanCamera); + m_pivotFocusCamera = + AZStd::make_shared(SandboxEditor::CameraFocusChannelId(), AzFramework::FocusPivot); + + m_pivotFocusCamera->SetPivotFn(pivotFn); + + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotRotateCamera); + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotTranslateCamera); + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotDollyScrollCamera); + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotDollyMoveCamera); + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotPanCamera); + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotFocusCamera); } void EditorModularViewportCameraComposer::OnEditorModularViewportCameraComposerSettingsChanged() { const auto translateCameraInputChannelIds = BuildTranslateCameraInputChannelIds(); m_firstPersonTranslateCamera->SetTranslateCameraInputChannelIds(translateCameraInputChannelIds); - m_orbitTranslateCamera->SetTranslateCameraInputChannelIds(translateCameraInputChannelIds); - m_firstPersonPanCamera->SetPanInputChannelId(SandboxEditor::CameraFreePanChannelId()); - m_orbitPanCamera->SetPanInputChannelId(SandboxEditor::CameraOrbitPanChannelId()); m_firstPersonRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraFreeLookChannelId()); - m_orbitRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraOrbitLookChannelId()); - m_orbitCamera->SetOrbitInputChannelId(SandboxEditor::CameraOrbitChannelId()); - m_orbitDollyMoveCamera->SetDollyInputChannelId(SandboxEditor::CameraOrbitDollyChannelId()); + m_firstPersonFocusCamera->SetFocusInputChannelId(SandboxEditor::CameraFocusChannelId()); + + m_pivotCamera->SetPivotInputChannelId(SandboxEditor::CameraPivotChannelId()); + m_pivotTranslateCamera->SetTranslateCameraInputChannelIds(translateCameraInputChannelIds); + m_pivotPanCamera->SetPanInputChannelId(SandboxEditor::CameraPivotPanChannelId()); + m_pivotRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraPivotLookChannelId()); + m_pivotDollyMoveCamera->SetDollyInputChannelId(SandboxEditor::CameraPivotDollyChannelId()); + m_pivotFocusCamera->SetFocusInputChannelId(SandboxEditor::CameraFocusChannelId()); } void EditorModularViewportCameraComposer::OnViewportViewEntityChanged(const AZ::EntityId& viewEntityId) @@ -295,8 +298,7 @@ namespace SandboxEditor AZ::TransformBus::EventResult(worldFromLocal, viewEntityId, &AZ::TransformBus::Events::GetWorldTM); AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event( - m_viewportId, &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::SetReferenceFrame, - worldFromLocal); + m_viewportId, &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::SetReferenceFrame, worldFromLocal); } else { diff --git a/Code/Editor/EditorModularViewportCameraComposer.h b/Code/Editor/EditorModularViewportCameraComposer.h index e6e71c976c..90103dba43 100644 --- a/Code/Editor/EditorModularViewportCameraComposer.h +++ b/Code/Editor/EditorModularViewportCameraComposer.h @@ -42,12 +42,14 @@ namespace SandboxEditor AZStd::shared_ptr m_firstPersonPanCamera; AZStd::shared_ptr m_firstPersonTranslateCamera; AZStd::shared_ptr m_firstPersonScrollCamera; - AZStd::shared_ptr m_orbitCamera; - AZStd::shared_ptr m_orbitRotateCamera; - AZStd::shared_ptr m_orbitTranslateCamera; - AZStd::shared_ptr m_orbitDollyScrollCamera; - AZStd::shared_ptr m_orbitDollyMoveCamera; - AZStd::shared_ptr m_orbitPanCamera; + AZStd::shared_ptr m_firstPersonFocusCamera; + AZStd::shared_ptr m_pivotCamera; + AZStd::shared_ptr m_pivotRotateCamera; + AZStd::shared_ptr m_pivotTranslateCamera; + AZStd::shared_ptr m_pivotDollyScrollCamera; + AZStd::shared_ptr m_pivotDollyMoveCamera; + AZStd::shared_ptr m_pivotPanCamera; + AZStd::shared_ptr m_pivotFocusCamera; AzFramework::ViewportId m_viewportId; }; diff --git a/Code/Editor/EditorPreferencesPageViewportCamera.cpp b/Code/Editor/EditorPreferencesPageViewportCamera.cpp index 368d2769f8..b632163186 100644 --- a/Code/Editor/EditorPreferencesPageViewportCamera.cpp +++ b/Code/Editor/EditorPreferencesPageViewportCamera.cpp @@ -61,7 +61,7 @@ static AZStd::vector GetEditorInputNames() void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serialize) { serialize.Class() - ->Version(2) + ->Version(3) ->Field("TranslateSpeed", &CameraMovementSettings::m_translateSpeed) ->Field("RotateSpeed", &CameraMovementSettings::m_rotateSpeed) ->Field("BoostMultiplier", &CameraMovementSettings::m_boostMultiplier) @@ -73,12 +73,12 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->Field("TranslateSmoothing", &CameraMovementSettings::m_translateSmoothing) ->Field("TranslateSmoothness", &CameraMovementSettings::m_translateSmoothness) ->Field("CaptureCursorLook", &CameraMovementSettings::m_captureCursorLook) - ->Field("OrbitYawRotationInverted", &CameraMovementSettings::m_orbitYawRotationInverted) + ->Field("PivotYawRotationInverted", &CameraMovementSettings::m_pivotYawRotationInverted) ->Field("PanInvertedX", &CameraMovementSettings::m_panInvertedX) ->Field("PanInvertedY", &CameraMovementSettings::m_panInvertedY); serialize.Class() - ->Version(1) + ->Version(2) ->Field("TranslateForward", &CameraInputSettings::m_translateForwardChannelId) ->Field("TranslateBackward", &CameraInputSettings::m_translateBackwardChannelId) ->Field("TranslateLeft", &CameraInputSettings::m_translateLeftChannelId) @@ -86,12 +86,13 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->Field("TranslateUp", &CameraInputSettings::m_translateUpChannelId) ->Field("TranslateDown", &CameraInputSettings::m_translateDownChannelId) ->Field("Boost", &CameraInputSettings::m_boostChannelId) - ->Field("Orbit", &CameraInputSettings::m_orbitChannelId) + ->Field("Pivot", &CameraInputSettings::m_pivotChannelId) ->Field("FreeLook", &CameraInputSettings::m_freeLookChannelId) ->Field("FreePan", &CameraInputSettings::m_freePanChannelId) - ->Field("OrbitLook", &CameraInputSettings::m_orbitLookChannelId) - ->Field("OrbitDolly", &CameraInputSettings::m_orbitDollyChannelId) - ->Field("OrbitPan", &CameraInputSettings::m_orbitPanChannelId); + ->Field("PivotLook", &CameraInputSettings::m_pivotLookChannelId) + ->Field("PivotDolly", &CameraInputSettings::m_pivotDollyChannelId) + ->Field("PivotPan", &CameraInputSettings::m_pivotPanChannelId) + ->Field("Focus", &CameraInputSettings::m_focusChannelId); serialize.Class() ->Version(1) @@ -143,8 +144,8 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->Attribute(AZ::Edit::Attributes::Min, minValue) ->Attribute(AZ::Edit::Attributes::Visibility, &CameraMovementSettings::TranslateSmoothingVisibility) ->DataElement( - AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_orbitYawRotationInverted, "Camera Orbit Yaw Inverted", - "Inverted yaw rotation while orbiting") + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_pivotYawRotationInverted, "Camera Pivot Yaw Inverted", + "Inverted yaw rotation while pivoting") ->DataElement( AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_panInvertedX, "Invert Pan X", "Invert direction of pan in local X axis") @@ -185,8 +186,8 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial "Key/button to move the camera more quickly") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitChannelId, "Orbit", - "Key/button to begin the camera orbit behavior") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotChannelId, "Pivot", + "Key/button to begin the camera pivot behavior") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_freeLookChannelId, "Free Look", @@ -196,24 +197,27 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_freePanChannelId, "Free Pan", "Key/button to begin camera free pan") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitLookChannelId, "Orbit Look", - "Key/button to begin camera orbit look") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotLookChannelId, "Pivot Look", + "Key/button to begin camera pivot look") + ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) + ->DataElement( + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotDollyChannelId, "Pivot Dolly", + "Key/button to begin camera pivot dolly") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitDollyChannelId, "Orbit Dolly", - "Key/button to begin camera orbit dolly") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotPanChannelId, "Pivot Pan", + "Key/button to begin camera pivot pan") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitPanChannelId, "Orbit Pan", - "Key/button to begin camera orbit pan") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_focusChannelId, "Focus", "Key/button to focus camera pivot") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames); editContext->Class("Viewport Preferences", "Viewport Preferences") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") ->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20)) ->DataElement( - AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportCamera::m_cameraMovementSettings, - "Camera Movement Settings", "Camera Movement Settings") + AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportCamera::m_cameraMovementSettings, "Camera Movement Settings", + "Camera Movement Settings") ->DataElement( AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportCamera::m_cameraInputSettings, "Camera Input Settings", "Camera Input Settings"); @@ -264,7 +268,7 @@ void CEditorPreferencesPage_ViewportCamera::OnApply() SandboxEditor::SetCameraTranslateSmoothness(m_cameraMovementSettings.m_translateSmoothness); SandboxEditor::SetCameraTranslateSmoothingEnabled(m_cameraMovementSettings.m_translateSmoothing); SandboxEditor::SetCameraCaptureCursorForLook(m_cameraMovementSettings.m_captureCursorLook); - SandboxEditor::SetCameraOrbitYawRotationInverted(m_cameraMovementSettings.m_orbitYawRotationInverted); + SandboxEditor::SetCameraPivotYawRotationInverted(m_cameraMovementSettings.m_pivotYawRotationInverted); SandboxEditor::SetCameraPanInvertedX(m_cameraMovementSettings.m_panInvertedX); SandboxEditor::SetCameraPanInvertedY(m_cameraMovementSettings.m_panInvertedY); @@ -275,12 +279,13 @@ void CEditorPreferencesPage_ViewportCamera::OnApply() SandboxEditor::SetCameraTranslateUpChannelId(m_cameraInputSettings.m_translateUpChannelId); SandboxEditor::SetCameraTranslateDownChannelId(m_cameraInputSettings.m_translateDownChannelId); SandboxEditor::SetCameraTranslateBoostChannelId(m_cameraInputSettings.m_boostChannelId); - SandboxEditor::SetCameraOrbitChannelId(m_cameraInputSettings.m_orbitChannelId); + SandboxEditor::SetCameraPivotChannelId(m_cameraInputSettings.m_pivotChannelId); SandboxEditor::SetCameraFreeLookChannelId(m_cameraInputSettings.m_freeLookChannelId); SandboxEditor::SetCameraFreePanChannelId(m_cameraInputSettings.m_freePanChannelId); - SandboxEditor::SetCameraOrbitLookChannelId(m_cameraInputSettings.m_orbitLookChannelId); - SandboxEditor::SetCameraOrbitDollyChannelId(m_cameraInputSettings.m_orbitDollyChannelId); - SandboxEditor::SetCameraOrbitPanChannelId(m_cameraInputSettings.m_orbitPanChannelId); + SandboxEditor::SetCameraPivotLookChannelId(m_cameraInputSettings.m_pivotLookChannelId); + SandboxEditor::SetCameraPivotDollyChannelId(m_cameraInputSettings.m_pivotDollyChannelId); + SandboxEditor::SetCameraPivotPanChannelId(m_cameraInputSettings.m_pivotPanChannelId); + SandboxEditor::SetCameraFocusChannelId(m_cameraInputSettings.m_focusChannelId); SandboxEditor::EditorModularViewportCameraComposerNotificationBus::Broadcast( &SandboxEditor::EditorModularViewportCameraComposerNotificationBus::Events::OnEditorModularViewportCameraComposerSettingsChanged); @@ -299,7 +304,7 @@ void CEditorPreferencesPage_ViewportCamera::InitializeSettings() m_cameraMovementSettings.m_translateSmoothness = SandboxEditor::CameraTranslateSmoothness(); m_cameraMovementSettings.m_translateSmoothing = SandboxEditor::CameraTranslateSmoothingEnabled(); m_cameraMovementSettings.m_captureCursorLook = SandboxEditor::CameraCaptureCursorForLook(); - m_cameraMovementSettings.m_orbitYawRotationInverted = SandboxEditor::CameraOrbitYawRotationInverted(); + m_cameraMovementSettings.m_pivotYawRotationInverted = SandboxEditor::CameraPivotYawRotationInverted(); m_cameraMovementSettings.m_panInvertedX = SandboxEditor::CameraPanInvertedX(); m_cameraMovementSettings.m_panInvertedY = SandboxEditor::CameraPanInvertedY(); @@ -310,10 +315,11 @@ void CEditorPreferencesPage_ViewportCamera::InitializeSettings() m_cameraInputSettings.m_translateUpChannelId = SandboxEditor::CameraTranslateUpChannelId().GetName(); m_cameraInputSettings.m_translateDownChannelId = SandboxEditor::CameraTranslateDownChannelId().GetName(); m_cameraInputSettings.m_boostChannelId = SandboxEditor::CameraTranslateBoostChannelId().GetName(); - m_cameraInputSettings.m_orbitChannelId = SandboxEditor::CameraOrbitChannelId().GetName(); + m_cameraInputSettings.m_pivotChannelId = SandboxEditor::CameraPivotChannelId().GetName(); m_cameraInputSettings.m_freeLookChannelId = SandboxEditor::CameraFreeLookChannelId().GetName(); m_cameraInputSettings.m_freePanChannelId = SandboxEditor::CameraFreePanChannelId().GetName(); - m_cameraInputSettings.m_orbitLookChannelId = SandboxEditor::CameraOrbitLookChannelId().GetName(); - m_cameraInputSettings.m_orbitDollyChannelId = SandboxEditor::CameraOrbitDollyChannelId().GetName(); - m_cameraInputSettings.m_orbitPanChannelId = SandboxEditor::CameraOrbitPanChannelId().GetName(); + m_cameraInputSettings.m_pivotLookChannelId = SandboxEditor::CameraPivotLookChannelId().GetName(); + m_cameraInputSettings.m_pivotDollyChannelId = SandboxEditor::CameraPivotDollyChannelId().GetName(); + m_cameraInputSettings.m_pivotPanChannelId = SandboxEditor::CameraPivotPanChannelId().GetName(); + m_cameraInputSettings.m_focusChannelId = SandboxEditor::CameraFocusChannelId().GetName(); } diff --git a/Code/Editor/EditorPreferencesPageViewportCamera.h b/Code/Editor/EditorPreferencesPageViewportCamera.h index 31a728599f..cd31141c4a 100644 --- a/Code/Editor/EditorPreferencesPageViewportCamera.h +++ b/Code/Editor/EditorPreferencesPageViewportCamera.h @@ -54,7 +54,7 @@ private: float m_translateSmoothness; bool m_translateSmoothing; bool m_captureCursorLook; - bool m_orbitYawRotationInverted; + bool m_pivotYawRotationInverted; bool m_panInvertedX; bool m_panInvertedY; @@ -80,12 +80,13 @@ private: AZStd::string m_translateUpChannelId; AZStd::string m_translateDownChannelId; AZStd::string m_boostChannelId; - AZStd::string m_orbitChannelId; + AZStd::string m_pivotChannelId; AZStd::string m_freeLookChannelId; AZStd::string m_freePanChannelId; - AZStd::string m_orbitLookChannelId; - AZStd::string m_orbitDollyChannelId; - AZStd::string m_orbitPanChannelId; + AZStd::string m_pivotLookChannelId; + AZStd::string m_pivotDollyChannelId; + AZStd::string m_pivotPanChannelId; + AZStd::string m_focusChannelId; }; CameraMovementSettings m_cameraMovementSettings; diff --git a/Code/Editor/EditorPreferencesTreeWidgetItem.cpp b/Code/Editor/EditorPreferencesTreeWidgetItem.cpp index 7adc298c2c..09578e72ee 100644 --- a/Code/Editor/EditorPreferencesTreeWidgetItem.cpp +++ b/Code/Editor/EditorPreferencesTreeWidgetItem.cpp @@ -9,6 +9,9 @@ #include "EditorPreferencesTreeWidgetItem.h" +// AzCore +#include + // AzToolsFramework #include diff --git a/Code/Editor/EditorViewportCamera.cpp b/Code/Editor/EditorViewportCamera.cpp index 0c7a1559d1..b25e7072ff 100644 --- a/Code/Editor/EditorViewportCamera.cpp +++ b/Code/Editor/EditorViewportCamera.cpp @@ -48,7 +48,7 @@ namespace SandboxEditor { AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event( viewportContext->GetId(), &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::InterpolateToTransform, - AZ::Transform::CreateFromQuaternionAndTranslation(CameraRotation(pitch, yaw), position), 0.0f); + AZ::Transform::CreateFromQuaternionAndTranslation(CameraRotation(pitch, yaw), position)); } } diff --git a/Code/Editor/EditorViewportSettings.cpp b/Code/Editor/EditorViewportSettings.cpp index 063ec125ba..c2539b008c 100644 --- a/Code/Editor/EditorViewportSettings.cpp +++ b/Code/Editor/EditorViewportSettings.cpp @@ -28,7 +28,7 @@ namespace SandboxEditor constexpr AZStd::string_view CameraRotateSpeedSetting = "/Amazon/Preferences/Editor/Camera/RotateSpeed"; constexpr AZStd::string_view CameraScrollSpeedSetting = "/Amazon/Preferences/Editor/Camera/DollyScrollSpeed"; constexpr AZStd::string_view CameraDollyMotionSpeedSetting = "/Amazon/Preferences/Editor/Camera/DollyMotionSpeed"; - constexpr AZStd::string_view CameraOrbitYawRotationInvertedSetting = "/Amazon/Preferences/Editor/Camera/YawRotationInverted"; + constexpr AZStd::string_view CameraPivotYawRotationInvertedSetting = "/Amazon/Preferences/Editor/Camera/YawRotationInverted"; constexpr AZStd::string_view CameraPanInvertedXSetting = "/Amazon/Preferences/Editor/Camera/PanInvertedX"; constexpr AZStd::string_view CameraPanInvertedYSetting = "/Amazon/Preferences/Editor/Camera/PanInvertedY"; constexpr AZStd::string_view CameraPanSpeedSetting = "/Amazon/Preferences/Editor/Camera/PanSpeed"; @@ -44,12 +44,13 @@ namespace SandboxEditor constexpr AZStd::string_view CameraTranslateUpIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpId"; constexpr AZStd::string_view CameraTranslateDownIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpDownId"; constexpr AZStd::string_view CameraTranslateBoostIdSetting = "/Amazon/Preferences/Editor/Camera/TranslateBoostId"; - constexpr AZStd::string_view CameraOrbitIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitId"; + constexpr AZStd::string_view CameraPivotIdSetting = "/Amazon/Preferences/Editor/Camera/PivotId"; constexpr AZStd::string_view CameraFreeLookIdSetting = "/Amazon/Preferences/Editor/Camera/FreeLookId"; constexpr AZStd::string_view CameraFreePanIdSetting = "/Amazon/Preferences/Editor/Camera/FreePanId"; - constexpr AZStd::string_view CameraOrbitLookIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitLookId"; - constexpr AZStd::string_view CameraOrbitDollyIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitDollyId"; - constexpr AZStd::string_view CameraOrbitPanIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitPanId"; + constexpr AZStd::string_view CameraPivotLookIdSetting = "/Amazon/Preferences/Editor/Camera/PivotLookId"; + constexpr AZStd::string_view CameraPivotDollyIdSetting = "/Amazon/Preferences/Editor/Camera/PivotDollyId"; + constexpr AZStd::string_view CameraPivotPanIdSetting = "/Amazon/Preferences/Editor/Camera/PivotPanId"; + constexpr AZStd::string_view CameraFocusIdSetting = "/Amazon/Preferences/Editor/Camera/FocusId"; template void SetRegistry(const AZStd::string_view setting, T&& value) @@ -239,14 +240,14 @@ namespace SandboxEditor SetRegistry(CameraDollyMotionSpeedSetting, speed); } - bool CameraOrbitYawRotationInverted() + bool CameraPivotYawRotationInverted() { - return GetRegistry(CameraOrbitYawRotationInvertedSetting, false); + return GetRegistry(CameraPivotYawRotationInvertedSetting, false); } - void SetCameraOrbitYawRotationInverted(const bool inverted) + void SetCameraPivotYawRotationInverted(const bool inverted) { - SetRegistry(CameraOrbitYawRotationInvertedSetting, inverted); + SetRegistry(CameraPivotYawRotationInvertedSetting, inverted); } bool CameraPanInvertedX() @@ -403,14 +404,14 @@ namespace SandboxEditor SetRegistry(CameraTranslateBoostIdSetting, cameraTranslateBoostId); } - AzFramework::InputChannelId CameraOrbitChannelId() + AzFramework::InputChannelId CameraPivotChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraPivotIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str()); } - void SetCameraOrbitChannelId(AZStd::string_view cameraOrbitId) + void SetCameraPivotChannelId(AZStd::string_view cameraPivotId) { - SetRegistry(CameraOrbitIdSetting, cameraOrbitId); + SetRegistry(CameraPivotIdSetting, cameraPivotId); } AzFramework::InputChannelId CameraFreeLookChannelId() @@ -433,33 +434,43 @@ namespace SandboxEditor SetRegistry(CameraFreePanIdSetting, cameraFreePanId); } - AzFramework::InputChannelId CameraOrbitLookChannelId() + AzFramework::InputChannelId CameraPivotLookChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraPivotLookIdSetting, AZStd::string("mouse_button_left")).c_str()); } - void SetCameraOrbitLookChannelId(AZStd::string_view cameraOrbitLookId) + void SetCameraPivotLookChannelId(AZStd::string_view cameraPivotLookId) { - SetRegistry(CameraOrbitLookIdSetting, cameraOrbitLookId); + SetRegistry(CameraPivotLookIdSetting, cameraPivotLookId); } - AzFramework::InputChannelId CameraOrbitDollyChannelId() + AzFramework::InputChannelId CameraPivotDollyChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitDollyIdSetting, AZStd::string("mouse_button_right")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraPivotDollyIdSetting, AZStd::string("mouse_button_right")).c_str()); } - void SetCameraOrbitDollyChannelId(AZStd::string_view cameraOrbitDollyId) + void SetCameraPivotDollyChannelId(AZStd::string_view cameraPivotDollyId) { - SetRegistry(CameraOrbitDollyIdSetting, cameraOrbitDollyId); + SetRegistry(CameraPivotDollyIdSetting, cameraPivotDollyId); } - AzFramework::InputChannelId CameraOrbitPanChannelId() + AzFramework::InputChannelId CameraPivotPanChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitPanIdSetting, AZStd::string("mouse_button_middle")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraPivotPanIdSetting, AZStd::string("mouse_button_middle")).c_str()); } - void SetCameraOrbitPanChannelId(AZStd::string_view cameraOrbitPanId) + void SetCameraPivotPanChannelId(AZStd::string_view cameraPivotPanId) { - SetRegistry(CameraOrbitPanIdSetting, cameraOrbitPanId); + SetRegistry(CameraPivotPanIdSetting, cameraPivotPanId); + } + + AzFramework::InputChannelId CameraFocusChannelId() + { + return AzFramework::InputChannelId(GetRegistry(CameraFocusIdSetting, AZStd::string("keyboard_key_alphanumeric_X")).c_str()); + } + + void SetCameraFocusChannelId(AZStd::string_view cameraFocusId) + { + SetRegistry(CameraFocusIdSetting, cameraFocusId); } } // namespace SandboxEditor diff --git a/Code/Editor/EditorViewportSettings.h b/Code/Editor/EditorViewportSettings.h index 20d397a29e..0253b01621 100644 --- a/Code/Editor/EditorViewportSettings.h +++ b/Code/Editor/EditorViewportSettings.h @@ -71,8 +71,8 @@ namespace SandboxEditor SANDBOX_API float CameraDollyMotionSpeed(); SANDBOX_API void SetCameraDollyMotionSpeed(float speed); - SANDBOX_API bool CameraOrbitYawRotationInverted(); - SANDBOX_API void SetCameraOrbitYawRotationInverted(bool inverted); + SANDBOX_API bool CameraPivotYawRotationInverted(); + SANDBOX_API void SetCameraPivotYawRotationInverted(bool inverted); SANDBOX_API bool CameraPanInvertedX(); SANDBOX_API void SetCameraPanInvertedX(bool inverted); @@ -119,8 +119,8 @@ namespace SandboxEditor SANDBOX_API AzFramework::InputChannelId CameraTranslateBoostChannelId(); SANDBOX_API void SetCameraTranslateBoostChannelId(AZStd::string_view cameraTranslateBoostId); - SANDBOX_API AzFramework::InputChannelId CameraOrbitChannelId(); - SANDBOX_API void SetCameraOrbitChannelId(AZStd::string_view cameraOrbitId); + SANDBOX_API AzFramework::InputChannelId CameraPivotChannelId(); + SANDBOX_API void SetCameraPivotChannelId(AZStd::string_view cameraPivotId); SANDBOX_API AzFramework::InputChannelId CameraFreeLookChannelId(); SANDBOX_API void SetCameraFreeLookChannelId(AZStd::string_view cameraFreeLookId); @@ -128,12 +128,15 @@ namespace SandboxEditor SANDBOX_API AzFramework::InputChannelId CameraFreePanChannelId(); SANDBOX_API void SetCameraFreePanChannelId(AZStd::string_view cameraFreePanId); - SANDBOX_API AzFramework::InputChannelId CameraOrbitLookChannelId(); - SANDBOX_API void SetCameraOrbitLookChannelId(AZStd::string_view cameraOrbitLookId); + SANDBOX_API AzFramework::InputChannelId CameraPivotLookChannelId(); + SANDBOX_API void SetCameraPivotLookChannelId(AZStd::string_view cameraPivotLookId); - SANDBOX_API AzFramework::InputChannelId CameraOrbitDollyChannelId(); - SANDBOX_API void SetCameraOrbitDollyChannelId(AZStd::string_view cameraOrbitDollyId); + SANDBOX_API AzFramework::InputChannelId CameraPivotDollyChannelId(); + SANDBOX_API void SetCameraPivotDollyChannelId(AZStd::string_view cameraPivotDollyId); - SANDBOX_API AzFramework::InputChannelId CameraOrbitPanChannelId(); - SANDBOX_API void SetCameraOrbitPanChannelId(AZStd::string_view cameraOrbitPanId); + SANDBOX_API AzFramework::InputChannelId CameraPivotPanChannelId(); + SANDBOX_API void SetCameraPivotPanChannelId(AZStd::string_view cameraPivotPanId); + + SANDBOX_API AzFramework::InputChannelId CameraFocusChannelId(); + SANDBOX_API void SetCameraFocusChannelId(AZStd::string_view cameraFocusId); } // namespace SandboxEditor diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp index 5b5b52d28f..dad6734428 100644 --- a/Code/Editor/EditorViewportWidget.cpp +++ b/Code/Editor/EditorViewportWidget.cpp @@ -2428,7 +2428,7 @@ void EditorViewportWidget::RestoreViewportAfterGameMode() } else { - AZ_Error("CryLegacy", false, "Not restoring the editor viewport camera is currently unsupported"); + AZ_Warning("CryLegacy", false, "Not restoring the editor viewport camera is currently unsupported"); SetViewTM(preGameModeViewTM); } } diff --git a/Code/Editor/Include/IDisplayViewport.h b/Code/Editor/Include/IDisplayViewport.h index 813c54355b..c7dff33e50 100644 --- a/Code/Editor/Include/IDisplayViewport.h +++ b/Code/Editor/Include/IDisplayViewport.h @@ -35,8 +35,6 @@ struct IDisplayViewport */ virtual float GetDistanceToLine(const Vec3& lineP1, const Vec3& lineP2, const QPoint& point) const = 0; - virtual CBaseObjectsCache* GetVisibleObjectsCache() = 0; - enum EAxis { AXIS_NONE, diff --git a/Code/Editor/Lib/Tests/Camera/test_EditorCamera.cpp b/Code/Editor/Lib/Tests/Camera/test_EditorCamera.cpp index affe5794cc..1a44d43370 100644 --- a/Code/Editor/Lib/Tests/Camera/test_EditorCamera.cpp +++ b/Code/Editor/Lib/Tests/Camera/test_EditorCamera.cpp @@ -167,7 +167,7 @@ namespace UnitTest AZ::Quaternion::CreateRotationZ(AZ::DegToRad(90.0f)), AZ::Vector3(20.0f, 40.0f, 60.0f)); AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event( TestViewportId, &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::InterpolateToTransform, - transformToInterpolateTo, 0.0f); + transformToInterpolateTo); // simulate interpolation m_controllerList->UpdateViewport({ TestViewportId, AzFramework::FloatSeconds(0.5f), AZ::ScriptTimePoint() }); @@ -193,7 +193,7 @@ namespace UnitTest // When AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event( TestViewportId, &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::InterpolateToTransform, - transformToInterpolateTo, 0.0f); + transformToInterpolateTo); // simulate interpolation m_controllerList->UpdateViewport({ TestViewportId, AzFramework::FloatSeconds(0.5f), AZ::ScriptTimePoint() }); diff --git a/Code/Editor/MainWindow.cpp b/Code/Editor/MainWindow.cpp index beb338b732..05477bb0c7 100644 --- a/Code/Editor/MainWindow.cpp +++ b/Code/Editor/MainWindow.cpp @@ -27,10 +27,11 @@ AZ_POP_DISABLE_WARNING #endif // AzCore -#include #include -#include #include +#include +#include +#include #include // AzFramework diff --git a/Code/Editor/Objects/ObjectManager.cpp b/Code/Editor/Objects/ObjectManager.cpp index 06aa8866b3..f67cf24553 100644 --- a/Code/Editor/Objects/ObjectManager.cpp +++ b/Code/Editor/Objects/ObjectManager.cpp @@ -33,10 +33,6 @@ AZ_CVAR_EXTERNED(bool, ed_visibility_logTiming); -AZ_CVAR( - bool, ed_visibility_use, true, nullptr, AZ::ConsoleFunctorFlags::Null, - "Enable/disable using the new IVisibilitySystem for Entity visibility determination"); - /*! * Class Description used for object templates. * This description filled from Xml template files. @@ -76,17 +72,6 @@ public: int GameCreationOrder() override { return superType->GameCreationOrder(); }; }; -void CBaseObjectsCache::AddObject(CBaseObject* object) -{ - m_objects.push_back(object); - if (object->GetType() == OBJTYPE_AZENTITY) - { - auto componentEntityObject = static_cast(object); - m_entityIds.push_back(componentEntityObject->GetAssociatedEntityId()); - } -} - - ////////////////////////////////////////////////////////////////////////// // CObjectManager implementation. ////////////////////////////////////////////////////////////////////////// @@ -1267,25 +1252,8 @@ void CObjectManager::Display(DisplayContext& dc) UpdateVisibilityList(); } - bool viewIsDirty = dc.settings->IsDisplayHelpers(); // displaying helpers require computing all the bound boxes and things anyway. - - if (!viewIsDirty) + if (dc.settings->IsDisplayHelpers()) { - if (CBaseObjectsCache* cache = dc.view->GetVisibleObjectsCache()) - { - // if the current rendering viewport has an out-of-date cache serial number, it needs to be refreshed too. - // views set their cache empty when they indicate they need to force a refresh. - if ((cache->GetObjectCount() == 0) || (cache->GetSerialNumber() != m_visibilitySerialNumber)) - { - viewIsDirty = true; - } - } - } - - if (viewIsDirty) - { - FindDisplayableObjects(dc, true); // this also actually draws the helpers. - // Also broadcast for anyone else that needs to draw global debug to do so now AzFramework::DebugDisplayEventBus::Broadcast(&AzFramework::DebugDisplayEvents::DrawGlobalDebugInfo); } @@ -1296,94 +1264,14 @@ void CObjectManager::Display(DisplayContext& dc) } } -void CObjectManager::ForceUpdateVisibleObjectCache(DisplayContext& dc) +void CObjectManager::ForceUpdateVisibleObjectCache([[maybe_unused]] DisplayContext& dc) { - FindDisplayableObjects(dc, false); + AZ_Assert(false, "CObjectManager::ForceUpdateVisibleObjectCache is legacy/deprecated and should not be used."); } -void CObjectManager::FindDisplayableObjects(DisplayContext& dc, [[maybe_unused]] bool bDisplay) +void CObjectManager::FindDisplayableObjects([[maybe_unused]] DisplayContext& dc, [[maybe_unused]] bool bDisplay) { - // if the new IVisibilitySystem is being used, do not run this logic - if (ed_visibility_use) - { - return; - } - - AZ_PROFILE_FUNCTION(Editor); - - auto start = std::chrono::steady_clock::now(); - CBaseObjectsCache* pDispayedViewObjects = dc.view->GetVisibleObjectsCache(); - if (!pDispayedViewObjects) - { - return; - } - - pDispayedViewObjects->SetSerialNumber(m_visibilitySerialNumber); // update viewport to be latest serial number - - AABB bbox; - bbox.min.zero(); - bbox.max.zero(); - - pDispayedViewObjects->ClearObjects(); - pDispayedViewObjects->Reserve(static_cast(m_visibleObjects.size())); - - if (dc.flags & DISPLAY_2D) - { - int numVis = static_cast(m_visibleObjects.size()); - for (int i = 0; i < numVis; i++) - { - CBaseObject* obj = m_visibleObjects[i]; - - obj->GetBoundBox(bbox); - if (dc.box.IsIntersectBox(bbox)) - { - pDispayedViewObjects->AddObject(obj); - } - } - } - else - { - CSelectionGroup* pSelection = GetSelection(); - if (pSelection && pSelection->GetCount() > 1) - { - AABB mergedAABB; - mergedAABB.Reset(); - for (int i = 0, iCount(pSelection->GetCount()); i < iCount; ++i) - { - CBaseObject* pObj(pSelection->GetObject(i)); - if (pObj == nullptr) - { - continue; - } - AABB aabb; - pObj->GetBoundBox(aabb); - mergedAABB.Add(aabb); - } - - pSelection->GetObject(0)->CBaseObject::DrawDimensions(dc, &mergedAABB); - } - - int numVis = static_cast(m_visibleObjects.size()); - for (int i = 0; i < numVis; i++) - { - CBaseObject* obj = m_visibleObjects[i]; - - if (obj) - { - if ((dc.flags & DISPLAY_SELECTION_HELPERS) || obj->IsSelected()) - { - pDispayedViewObjects->AddObject(obj); - } - } - } - } - - if (ed_visibility_logTiming && !ed_visibility_use) - { - auto stop = std::chrono::steady_clock::now(); - std::chrono::duration diff = stop - start; - AZ_Printf("Visibility", "FindDisplayableObjects (old) - Duration: %f", diff); - } + AZ_Assert(false, "CObjectManager::FindDisplayableObjects is legacy/deprecated and should not be used."); } void CObjectManager::BeginEditParams(CBaseObject* obj, int flags) @@ -1630,214 +1518,24 @@ bool CObjectManager::HitTestObject(CBaseObject* obj, HitContext& hc) return (bSelectionHelperHit || obj->HitTest(hc)); } - ////////////////////////////////////////////////////////////////////////// -bool CObjectManager::HitTest(HitContext& hitInfo) +bool CObjectManager::HitTest([[maybe_unused]] HitContext& hitInfo) { - AZ_PROFILE_FUNCTION(Editor); - - hitInfo.object = nullptr; - hitInfo.dist = FLT_MAX; - hitInfo.axis = 0; - hitInfo.manipulatorMode = 0; - - HitContext hcOrg = hitInfo; - if (hcOrg.view) - { - hcOrg.view->GetPerpendicularAxis(nullptr, &hcOrg.b2DViewport); - } - hcOrg.rayDir = hcOrg.rayDir.GetNormalized(); - - HitContext hc = hcOrg; - - float mindist = FLT_MAX; - - if (!hitInfo.bIgnoreAxis && !hc.bUseSelectionHelpers) - { - // Test gizmos. - if (m_gizmoManager->HitTest(hc)) - { - if (hc.axis != 0) - { - hitInfo.object = hc.object; - hitInfo.gizmo = hc.gizmo; - hitInfo.axis = hc.axis; - hitInfo.manipulatorMode = hc.manipulatorMode; - hitInfo.dist = hc.dist; - return true; - } - } - } - - if (hitInfo.bOnlyGizmo) - { - return false; - } - - // Only HitTest objects, that where previously Displayed. - CBaseObjectsCache* pDispayedViewObjects = hitInfo.view->GetVisibleObjectsCache(); - - const bool iconsPrioritized = true; // Force icons to always be prioritized over other things you hit. Can change to be a configurable option in the future. - - CBaseObject* selected = nullptr; - const char* name = nullptr; - bool iconHit = false; - int numVis = pDispayedViewObjects->GetObjectCount(); - for (int i = 0; i < numVis; i++) - { - CBaseObject* obj = pDispayedViewObjects->GetObject(i); - - if (obj == hitInfo.pExcludedObject) - { - continue; - } - - if (HitTestObject(obj, hc)) - { - if (m_selectCallback && !m_selectCallback->CanSelectObject(obj)) - { - continue; - } - - // Check if this object is nearest. - if (hc.axis != 0) - { - hitInfo.object = obj; - hitInfo.axis = hc.axis; - hitInfo.dist = hc.dist; - return true; - } - - // When prioritizing icons, we don't allow non-icon hits to beat icon hits - if (iconsPrioritized && iconHit && !hc.iconHit) - { - continue; - } - - if (hc.dist < mindist || (!iconHit && hc.iconHit)) - { - if (hc.iconHit) - { - iconHit = true; - } - - mindist = hc.dist; - name = hc.name; - selected = obj; - } - - // Clear the object pointer if an object was hit, not just if the collision - // was closer than any previous. Not all paths from HitTestObject set the object pointer and so you could get - // an object from a previous (rejected) result but with collision information about a closer hit. - hc.object = nullptr; - hc.iconHit = false; - - // If use deep selection - if (hitInfo.pDeepSelection) - { - hitInfo.pDeepSelection->AddObject(hc.dist, obj); - } - } - } - - if (selected) - { - hitInfo.object = selected; - hitInfo.dist = mindist; - hitInfo.name = name; - hitInfo.iconHit = iconHit; - return true; - } + AZ_Assert(false, "CObjectManager::HitTest is legacy/deprecated and should not be used."); return false; } -void CObjectManager::FindObjectsInRect(CViewport* view, const QRect& rect, std::vector& guids) -{ - AZ_PROFILE_FUNCTION(Editor); - - if (rect.width() < 1 || rect.height() < 1) - { - return; - } - - HitContext hc; - hc.view = view; - hc.b2DViewport = view->GetType() != ET_ViewportCamera; - hc.rect = rect; - hc.bUseSelectionHelpers = view->GetAdvancedSelectModeFlag(); - - guids.clear(); - CBaseObjectsCache* pDispayedViewObjects = view->GetVisibleObjectsCache(); - - int numVis = pDispayedViewObjects->GetObjectCount(); - for (int i = 0; i < numVis; ++i) - { - CBaseObject* pObj = pDispayedViewObjects->GetObject(i); - - HitTestObjectAgainstRect(pObj, view, hc, guids); - } +void CObjectManager::FindObjectsInRect( + [[maybe_unused]] CViewport* view, [[maybe_unused]] const QRect& rect, [[maybe_unused]] std::vector& guids) +{ + AZ_Assert(false, "CObjectManager::FindObjectsInRect is legacy/deprecated and should not be used."); } ////////////////////////////////////////////////////////////////////////// -void CObjectManager::SelectObjectsInRect(CViewport* view, const QRect& rect, bool bSelect) +void CObjectManager::SelectObjectsInRect( + [[maybe_unused]] CViewport* view, [[maybe_unused]] const QRect& rect, [[maybe_unused]] bool bSelect) { - AZ_PROFILE_FUNCTION(Editor); - - // Ignore too small rectangles. - if (rect.width() < 1 || rect.height() < 1) - { - return; - } - - CUndo undo("Select Object(s)"); - - HitContext hc; - hc.view = view; - hc.b2DViewport = view->GetType() != ET_ViewportCamera; - hc.rect = rect; - hc.bUseSelectionHelpers = view->GetAdvancedSelectModeFlag(); - - bool isUndoRecording = GetIEditor()->IsUndoRecording(); - if (isUndoRecording) - { - m_processingBulkSelect = true; - } - - CBaseObjectsCache* displayedViewObjects = view->GetVisibleObjectsCache(); - int numVis = displayedViewObjects->GetObjectCount(); - - // Tracking the previous selection allows proper undo/redo functionality of additional - // selections (CTRL + drag select) - AZStd::unordered_set previousSelection; - - for (int i = 0; i < numVis; ++i) - { - CBaseObject* object = displayedViewObjects->GetObject(i); - - if (object->IsSelected()) - { - previousSelection.insert(object); - } - else - { - // This will update m_currSelection - SelectObjectInRect(object, view, hc, bSelect); - - // Legacy undo/redo does not go through the Ebus system and must be done individually - if (isUndoRecording && object->GetType() != OBJTYPE_AZENTITY) - { - GetIEditor()->RecordUndo(new CUndoBaseObjectSelect(object, true)); - } - } - } - - if (isUndoRecording && m_currSelection) - { - // Component Entities can handle undo/redo in bulk due to Ebuses - GetIEditor()->RecordUndo(new CUndoBaseObjectBulkSelect(previousSelection, *m_currSelection)); - } - - m_processingBulkSelect = false; + AZ_Assert(false, "CObjectManager::SelectObjectsInRect is legacy/deprecated and should not be used."); } ////////////////////////////////////////////////////////////////////////// @@ -3011,6 +2709,4 @@ namespace AzToolsFramework } } -} - - +} // namespace AzToolsFramework diff --git a/Code/Editor/Objects/ObjectManager.h b/Code/Editor/Objects/ObjectManager.h index 4ffa5e9a07..0ad5d8323e 100644 --- a/Code/Editor/Objects/ObjectManager.h +++ b/Code/Editor/Objects/ObjectManager.h @@ -52,40 +52,6 @@ public: } }; -////////////////////////////////////////////////////////////////////////// -// Array of editor objects. -////////////////////////////////////////////////////////////////////////// -class CBaseObjectsCache -{ -public: - int GetObjectCount() const { return static_cast(m_objects.size()); } - CBaseObject* GetObject(int nIndex) const { return m_objects[nIndex]; } - void AddObject(CBaseObject* object); - - void ClearObjects() - { - m_objects.clear(); - m_entityIds.clear(); - } - - void Reserve(int nCount) - { - m_objects.reserve(nCount); - m_entityIds.reserve(nCount); - } - - const AZStd::vector& GetEntityIdCache() const { return m_entityIds; } - - /// Checksum is used as a dirty flag. - unsigned int GetSerialNumber() { return m_serialNumber; } - void SetSerialNumber(unsigned int serialNumber) { m_serialNumber = serialNumber; } -private: - //! List of objects that was displayed at last frame. - std::vector<_smart_ptr > m_objects; - AZStd::vector m_entityIds; - unsigned int m_serialNumber = 0; -}; - /*! * CObjectManager is a singleton object that * manages global set of objects in level. diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp index 47bd214b8d..41e950a058 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp @@ -142,8 +142,7 @@ void GetSelectedEntitiesSetWithFlattenedHierarchy(AzToolsFramework::EntityIdSet& } SandboxIntegrationManager::SandboxIntegrationManager() - : m_inObjectPickMode(false) - , m_startedUndoRecordingNestingLevel(0) + : m_startedUndoRecordingNestingLevel(0) , m_dc(nullptr) , m_notificationWindowManager(new AzToolsFramework::SliceOverridesNotificationWindowManager()) { @@ -1000,62 +999,6 @@ void SandboxIntegrationManager::SetupSliceContextMenu_Modify(QMenu* menu, const revertAction->setEnabled(canRevert); } -void SandboxIntegrationManager::HandleObjectModeSelection(const AZ::Vector2& point, [[maybe_unused]] int flags, bool& handled) -{ - // Todo - Use a custom "edit tool". This will eliminate the need for this bus message entirely, which technically - // makes this feature less intrusive on Sandbox. - // UPDATE: This is now provided by EditorPickEntitySelection when the new Viewport Interaction Model changes are enabled. - if (m_inObjectPickMode) - { - CViewport* view = GetIEditor()->GetViewManager()->GetGameViewport(); - const QPoint viewPoint(static_cast(point.GetX()), static_cast(point.GetY())); - - HitContext hitInfo; - hitInfo.view = view; - if (view->HitTest(viewPoint, hitInfo)) - { - if (hitInfo.object && (hitInfo.object->GetType() == OBJTYPE_AZENTITY)) - { - CComponentEntityObject* entityObject = static_cast(hitInfo.object); - AzToolsFramework::EditorPickModeRequestBus::Broadcast( - &AzToolsFramework::EditorPickModeRequests::PickModeSelectEntity, entityObject->GetAssociatedEntityId()); - } - } - - AzToolsFramework::EditorPickModeRequestBus::Broadcast( - &AzToolsFramework::EditorPickModeRequests::StopEntityPickMode); - - handled = true; - } -} - -void SandboxIntegrationManager::UpdateObjectModeCursor(AZ::u32& cursorId, AZStd::string& cursorStr) -{ - if (m_inObjectPickMode) - { - cursorId = static_cast(STD_CURSOR_HAND); - cursorStr = "Pick an entity..."; - } -} - -void SandboxIntegrationManager::OnEntityPickModeStarted() -{ - m_inObjectPickMode = true; - - // Currently this object pick mode is activated only via PropertyEntityIdCtrl picker. - // When the picker button is clicked, we transfer focus to the viewport so the - // spacebar can still be used to activate selection helpers. - if (CViewport* view = GetIEditor()->GetViewManager()->GetGameViewport()) - { - view->SetFocus(); - } -} - -void SandboxIntegrationManager::OnEntityPickModeStopped() -{ - m_inObjectPickMode = false; -} - void SandboxIntegrationManager::CreateEditorRepresentation(AZ::Entity* entity) { IEditor* editor = GetIEditor(); @@ -1739,8 +1682,7 @@ void SandboxIntegrationManager::GoToEntitiesInViewports(const AzToolsFramework:: AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event( viewportContext->GetId(), - &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::InterpolateToTransform, nextCameraTransform, - distanceToLookAt); + &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::InterpolateToTransform, nextCameraTransform); } } } @@ -1953,7 +1895,7 @@ void SandboxIntegrationManager::MakeSliceFromEntities(const AzToolsFramework::En AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(entitiesAndDescendants, &AzToolsFramework::ToolsApplicationRequestBus::Events::GatherEntitiesAndAllDescendents, entities); - const AZStd::string slicesAssetsPath = "@devassets@/Slices"; + const AZStd::string slicesAssetsPath = "@projectroot@/Slices"; if (!gEnv->pFileIO->Exists(slicesAssetsPath.c_str())) { diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h index 617c5cb2c8..40962409a3 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h @@ -93,7 +93,6 @@ namespace AzToolsFramework class SandboxIntegrationManager : private AzToolsFramework::ToolsApplicationEvents::Bus::Handler , private AzToolsFramework::EditorRequests::Bus::Handler - , private AzToolsFramework::EditorPickModeNotificationBus::Handler , private AzToolsFramework::EditorContextMenuBus::Handler , private AzToolsFramework::EditorWindowRequests::Bus::Handler , private AzFramework::AssetCatalogEventBus::Handler @@ -140,8 +139,6 @@ private: QDockWidget* InstanceViewPane(const char* paneName) override; void CloseViewPane(const char* paneName) override; void BrowseForAssets(AzToolsFramework::AssetBrowser::AssetSelectionModel& selection) override; - void HandleObjectModeSelection(const AZ::Vector2& point, int flags, bool& handled) override; - void UpdateObjectModeCursor(AZ::u32& cursorId, AZStd::string& cursorStr) override; void CreateEditorRepresentation(AZ::Entity* entity) override; bool DestroyEditorRepresentation(AZ::EntityId entityId, bool deleteAZEntity) override; void CloneSelection(bool& handled) override; @@ -175,10 +172,6 @@ private: QWidget* GetAppMainWindow() override; ////////////////////////////////////////////////////////////////////////// - // EditorPickModeNotificationBus - void OnEntityPickModeStarted() override; - void OnEntityPickModeStopped() override; - ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::EditorContextMenu::Bus::Handler overrides void PopulateEditorGlobalContextMenu(QMenu* menu, const AZ::Vector2& point, int flags) override; @@ -281,7 +274,6 @@ private: private: AZ::Vector2 m_contextMenuViewPoint; - int m_inObjectPickMode; short m_startedUndoRecordingNestingLevel; // used in OnBegin/EndUndo to ensure we only accept undo's we started recording AzToolsFramework::SliceOverridesNotificationWindowManager* m_notificationWindowManager; diff --git a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp index 98bf228391..0ff9467f33 100644 --- a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp +++ b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp @@ -30,6 +30,7 @@ class CXTPDockingPaneLayout; // Needed for settings.h #include #include #include +#include #include #include #include @@ -47,41 +48,6 @@ class CXTPDockingPaneLayout; // Needed for settings.h const char* AssetImporterWindow::s_documentationWebAddress = "http://docs.aws.amazon.com/lumberyard/latest/userguide/char-fbx-importer.html"; const AZ::Uuid AssetImporterWindow::s_browseTag = AZ::Uuid::CreateString("{C240D2E1-BFD2-4FFA-BB5B-CC0FA389A5D3}"); -void MakeUserFriendlySourceAssetPath(QString& out, const QString& sourcePath) -{ - char devAssetsRoot[AZ_MAX_PATH_LEN] = { 0 }; - if (!gEnv->pFileIO->ResolvePath("@devroot@", devAssetsRoot, AZ_MAX_PATH_LEN)) - { - out = sourcePath; - return; - } - - AZStd::replace(devAssetsRoot, devAssetsRoot + AZ_MAX_PATH_LEN- 1, AZ_WRONG_FILESYSTEM_SEPARATOR, AZ_CORRECT_FILESYSTEM_SEPARATOR); - - // Find if the sourcePathArray is a sub directory of the devAssets folder - // Keep reference to sourcePathArray long enough to use in PathView - QByteArray sourcePathArray = sourcePath.toUtf8(); - AZ::IO::PathView sourcePathRootView(sourcePathArray.data()); - AZ::IO::PathView devAssetsRootView(devAssetsRoot); - auto [sourcePathIter, devAssetsIter] = AZStd::mismatch(sourcePathRootView.begin(), sourcePathRootView.end(), - devAssetsRootView.begin(), devAssetsRootView.end()); - // If the devAssets path iterator is not equal to the end, then there was a mismistch while comparing it - // against the source path indicating that the source path is not a sub-directory - if (devAssetsIter != devAssetsRootView.end()) - { - out = sourcePath; - return; - } - - int offset = aznumeric_cast(strlen(devAssetsRoot)); - if (sourcePath.at(offset) == AZ_CORRECT_FILESYSTEM_SEPARATOR) - { - ++offset; - } - out = sourcePath.right(sourcePath.length() - offset); - -} - AssetImporterWindow::AssetImporterWindow() : AssetImporterWindow(nullptr) { @@ -102,7 +68,7 @@ AssetImporterWindow::AssetImporterWindow(QWidget* parent) AssetImporterWindow::~AssetImporterWindow() { - AZ_Assert(m_processingOverlayIndex == AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, + AZ_Assert(m_processingOverlayIndex == AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, "Processing overlay (and potentially background thread) still active at destruction."); AZ_Assert(!m_processingOverlay, "Processing overlay (and potentially background thread) still active at destruction."); } @@ -133,7 +99,7 @@ void AssetImporterWindow::OpenFile(const AZStd::string& filePath) QMessageBox::warning(this, "In progress", "Unable to close one or more windows at this time."); return; } - + OpenFileInternal(filePath); } @@ -146,7 +112,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev) if (m_processingOverlay) { - AZ_Assert(m_processingOverlayIndex != AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, + AZ_Assert(m_processingOverlayIndex != AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, "Processing overlay present, but not the index in the overlay for it."); if (m_processingOverlay->HasProcessingCompleted()) { @@ -157,7 +123,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev) } else { - QMessageBox::critical(this, "Processing In Progress", "Unable to close the result window at this time.", + QMessageBox::critical(this, "Processing In Progress", "Unable to close the result window at this time.", QMessageBox::Ok, QMessageBox::Ok); ev->ignore(); return; @@ -165,7 +131,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev) } else { - QMessageBox::critical(this, "Processing In Progress", "Please wait until processing has completed to try again.", + QMessageBox::critical(this, "Processing In Progress", "Please wait until processing has completed to try again.", QMessageBox::Ok, QMessageBox::Ok); ev->ignore(); return; @@ -199,7 +165,9 @@ void AssetImporterWindow::Init() // Load the style sheets AzQtComponents::StylesheetPreprocessor styleSheetProcessor(nullptr); - AZStd::string mainWindowQSSPath = Path::GetEditingRootFolder() + "\\Editor\\Styles\\AssetImporterWindow.qss"; + auto mainWindowQSSPath = AZ::IO::Path(AZ::Utils::GetEnginePath()) / "Assets"; + mainWindowQSSPath /= "Editor/Styles/AssetImporterWindow.qss"; + mainWindowQSSPath.MakePreferred(); QFile mainWindowStyleSheetFile(mainWindowQSSPath.c_str()); if (mainWindowStyleSheetFile.open(QFile::ReadOnly)) { @@ -212,7 +180,7 @@ void AssetImporterWindow::Init() { ui->m_actionInspect->setVisible(false); } - + ResetMenuAccess(WindowState::InitialNothingLoaded); // Setup the overlay system, and set the root to be the root display. The root display has the browse, @@ -220,7 +188,7 @@ void AssetImporterWindow::Init() m_overlay.reset(aznew AZ::SceneAPI::UI::OverlayWidget(this)); m_rootDisplay.reset(aznew ImporterRootDisplay(m_serializeContext)); connect(m_rootDisplay.data(), &ImporterRootDisplay::UpdateClicked, this, &AssetImporterWindow::UpdateClicked); - + connect(m_overlay.data(), &AZ::SceneAPI::UI::OverlayWidget::LayerAdded, this, &AssetImporterWindow::OverlayLayerAdded); connect(m_overlay.data(), &AZ::SceneAPI::UI::OverlayWidget::LayerRemoved, this, &AssetImporterWindow::OverlayLayerRemoved); @@ -242,7 +210,7 @@ void AssetImporterWindow::Init() AZStd::string joinedExtensions; AzFramework::StringFunc::Join(joinedExtensions, extensions.begin(), extensions.end(), " or "); - AZStd::string firstLineText = + AZStd::string firstLineText = AZStd::string::format( "%s files are available for use after placing them in any folder within your game project. " "These files will automatically be processed and may be accessed via the Asset Browser. Learn more...", @@ -250,13 +218,13 @@ void AssetImporterWindow::Init() ui->m_initialPromptFirstLine->setText(firstLineText.c_str()); - AZStd::string secondLineText = + AZStd::string secondLineText = AZStd::string::format("To adjust the %s settings, right-click the file in the Asset Browser and select \"Edit Settings\" from the context menu.", joinedExtensions.c_str()); ui->m_initialPromptSecondLine->setText(secondLineText.c_str()); } else { - AZStd::string firstLineText = + AZStd::string firstLineText = AZStd::string::format( "Files are available for use after placing them in any folder within your game project. " "These files will automatically be processed and may be accessed via the Asset Browser. Learn more...", s_documentationWebAddress); @@ -282,12 +250,12 @@ void AssetImporterWindow::OpenFileInternal(const AZStd::string& filePath) auto asyncLoadHandler = AZStd::make_shared( s_browseTag, [this, filePath]() - { - m_assetImporterDocument->LoadScene(filePath); + { + m_assetImporterDocument->LoadScene(filePath); }, [this]() { - HandleAssetLoadingCompleted(); + HandleAssetLoadingCompleted(); }, this); m_processingOverlay.reset(new ProcessingOverlayWidget(m_overlay.data(), ProcessingOverlayWidget::Layout::Loading, s_browseTag)); @@ -304,7 +272,7 @@ bool AssetImporterWindow::IsAllowedToChangeSourceFile() return true; } - QMessageBox messageBox(QMessageBox::Icon::NoIcon, "Unsaved changes", + QMessageBox messageBox(QMessageBox::Icon::NoIcon, "Unsaved changes", "You have unsaved changes. Do you want to discard those changes?", QMessageBox::StandardButton::Discard | QMessageBox::StandardButton::Cancel, this); messageBox.exec(); @@ -406,7 +374,7 @@ void AssetImporterWindow::OnSceneResetRequested() else { m_assetImporterDocument->ClearScene(); - AZ_TracePrintf(ErrorWindow, "Manifest reset returned in '%s'", + AZ_TracePrintf(ErrorWindow, "Manifest reset returned in '%s'", result.GetResult() == ProcessingResult::Failure ? "Failure" : "Ignored"); } }, @@ -456,7 +424,7 @@ void AssetImporterWindow::OnInspect() // make sure the inspector doesn't outlive the AssetImporterWindow, since we own the data it will be inspecting. auto* theInspectWidget = aznew AZ::SceneAPI::UI::SceneGraphInspectWidget(*m_assetImporterDocument->GetScene()); QObject::connect(this, &QObject::destroyed, theInspectWidget, [theInspectWidget]() { theInspectWidget->window()->close(); } ); - + m_overlay->PushLayer(label, theInspectWidget, "Scene Inspector", buttons); } @@ -483,7 +451,7 @@ void AssetImporterWindow::OverlayLayerRemoved() else { ResetMenuAccess(WindowState::InitialNothingLoaded); - + ui->m_initialBrowseContainer->show(); m_rootDisplay->hide(); } @@ -533,8 +501,9 @@ void AssetImporterWindow::HandleAssetLoadingCompleted() m_fullSourcePath = m_assetImporterDocument->GetScene()->GetSourceFilename(); SetTitle(m_fullSourcePath.c_str()); - QString userFriendlyFileName; - MakeUserFriendlySourceAssetPath(userFriendlyFileName, m_fullSourcePath.c_str()); + AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath(); + AZ::IO::FixedMaxPath relativeSourcePath = AZ::IO::PathView(m_fullSourcePath).LexicallyProximate(projectPath); + auto userFriendlyFileName = QString::fromUtf8(relativeSourcePath.c_str(), static_cast(relativeSourcePath.Native().size())); m_rootDisplay->SetSceneDisplay(userFriendlyFileName, m_assetImporterDocument->GetScene()); // Once we've browsed to something successfully, we need to hide the initial browse button layer and diff --git a/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp b/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp index b1d07af41c..5ee54667b9 100644 --- a/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp +++ b/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp @@ -7,9 +7,11 @@ */ #include +#include #include #include #include +#include #include #include #include @@ -50,22 +52,15 @@ namespace AZ return nullptr; } - AZStd::string cleanPath = filePath; - if (AzFramework::StringFunc::Path::IsRelative(filePath.c_str())) + AZ::IO::Path enginePath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - const char* absolutePath = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(absolutePath, - &AzToolsFramework::AssetSystemRequestBus::Events::GetAbsoluteDevRootFolderPath); - AZ_Assert(absolutePath, "Unable to retrieve the dev folder path"); - AzFramework::StringFunc::Path::Join(absolutePath, cleanPath.c_str(), cleanPath); - } - else - { - // Normalizing is not needed if the path is relative as Join(...) will also normalize. - AzFramework::StringFunc::Path::Normalize(cleanPath); + settingsRegistry->Get(enginePath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder); } - auto sceneIt = m_scenes.find(cleanPath); + AZ::IO::Path cleanPath = (enginePath / filePath).LexicallyNormal(); + + auto sceneIt = m_scenes.find(cleanPath.Native()); if (sceneIt != m_scenes.end()) { AZStd::shared_ptr scene = sceneIt->second.lock(); @@ -98,14 +93,14 @@ namespace AZ } AZStd::shared_ptr scene = - AssetImportRequest::LoadSceneFromVerifiedPath(cleanPath, sceneSourceGuid, AssetImportRequest::RequestingApplication::Editor, SceneAPI::SceneCore::LoadingComponent::TYPEINFO_Uuid()); + AssetImportRequest::LoadSceneFromVerifiedPath(cleanPath.Native(), sceneSourceGuid, AssetImportRequest::RequestingApplication::Editor, SceneAPI::SceneCore::LoadingComponent::TYPEINFO_Uuid()); if (!scene) { AZ_TracePrintf(Utilities::ErrorWindow, "Failed to load the requested scene."); return nullptr; } - m_scenes.emplace(AZStd::move(cleanPath), scene); + m_scenes.emplace(AZStd::move(cleanPath.Native()), scene); return scene; } diff --git a/Code/Editor/Plugins/EditorCommon/CMakeLists.txt b/Code/Editor/Plugins/EditorCommon/CMakeLists.txt index cd9f2e79c7..609482b581 100644 --- a/Code/Editor/Plugins/EditorCommon/CMakeLists.txt +++ b/Code/Editor/Plugins/EditorCommon/CMakeLists.txt @@ -39,7 +39,6 @@ ly_add_target( EDITOR_COMMON_IMPORTS BUILD_DEPENDENCIES PRIVATE - 3rdParty::zlib 3rdParty::Qt::Core 3rdParty::Qt::Widgets Legacy::CryCommon diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp index 6b454474be..a53ce966c4 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp +++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp @@ -46,7 +46,6 @@ namespace ProjectSettingsTool , LastPathBus::Handler() , m_ui(new Ui::ProjectSettingsToolWidget()) , m_reconfigureProcess() - , m_devRoot(GetDevRoot()) , m_projectRoot(GetProjectRoot()) , m_projectName(GetProjectName()) , m_plistsInitVector( diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h index 1c9aa4b1bf..daa5bea27c 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h +++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h @@ -147,7 +147,6 @@ namespace ProjectSettingsTool // The process used to reconfigure settings QProcess m_reconfigureProcess; - AZStd::string m_devRoot; AZStd::string m_projectRoot; AZStd::string m_projectName; diff --git a/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp b/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp index 0e171adf04..d5b94469cc 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp +++ b/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp @@ -27,37 +27,31 @@ namespace } template - StringType GetAbsoluteDevRoot() + StringType GetAbsoluteEngineRoot() { - const char* devRoot = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult( - devRoot, - &AzToolsFramework::AssetSystemRequestBus::Handler::GetAbsoluteDevRootFolderPath); + AZ::IO::FixedMaxPath engineRoot = AZ::Utils::GetEnginePath(); - if (!devRoot) + if (engineRoot.empty()) { return ""; } - StringType devRootString(devRoot); - ToUnixPath(devRootString); - return devRootString; + StringType engineRootString(engineRoot.c_str()); + ToUnixPath(engineRootString); + return engineRootString; } template StringType GetAbsoluteProjectRoot() { - const char* projectRoot = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult( - projectRoot, - &AzToolsFramework::AssetSystemRequestBus::Handler::GetAbsoluteDevGameFolderPath); + AZ::IO::FixedMaxPath projectRoot = AZ::Utils::GetProjectPath(); - if (!projectRoot) + if (projectRoot.empty()) { return ""; } - StringType projectRootString(projectRoot); + StringType projectRootString(projectRoot.c_str()); ToUnixPath(projectRootString); return projectRootString; } @@ -87,9 +81,9 @@ namespace ProjectSettingsTool return reinterpret_cast(func); } - AZStd::string GetDevRoot() + AZStd::string GetEngineRoot() { - return GetAbsoluteDevRoot(); + return GetAbsoluteEngineRoot(); } AZStd::string GetProjectRoot() { @@ -104,7 +98,7 @@ namespace ProjectSettingsTool QString SelectXmlFromFileDialog(const QString& currentFile) { // The selected file must be relative to this path - QString defaultPath = GetAbsoluteDevRoot(); + QString defaultPath = GetAbsoluteEngineRoot(); QString startPath; // Choose the starting path for file dialog @@ -139,7 +133,7 @@ namespace ProjectSettingsTool QString SelectImageFromFileDialog(const QString& currentFile) { - QString defaultPath = QStringLiteral("%1Code%2/Resources/").arg(GetAbsoluteDevRoot(), ::GetProjectName()); + QString defaultPath = QStringLiteral("%1Code%2/Resources/").arg(GetAbsoluteEngineRoot(), ::GetProjectName()); QString startPath; @@ -188,7 +182,7 @@ namespace ProjectSettingsTool // Android if (group <= ImageGroup::AndroidPortrait) { - root = GetDevRoot() + "/Code/Tools/Android/ProjectBuilder/app_"; + root = GetEngineRoot() + "/Code/Tools/Android/ProjectBuilder/app_"; } //Ios else diff --git a/Code/Editor/Plugins/ProjectSettingsTool/Utils.h b/Code/Editor/Plugins/ProjectSettingsTool/Utils.h index 4226d534a6..050fb3b85b 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/Utils.h +++ b/Code/Editor/Plugins/ProjectSettingsTool/Utils.h @@ -17,7 +17,7 @@ namespace ProjectSettingsTool { void* ConvertFunctorToVoid(AZStd::pair(*func)(const QString&)); - AZStd::string GetDevRoot(); + AZStd::string GetEngineRoot(); AZStd::string GetProjectRoot(); AZStd::string GetProjectName(); diff --git a/Code/Editor/PythonEditorFuncs.cpp b/Code/Editor/PythonEditorFuncs.cpp index 455cdfa17d..1b731a3d5f 100644 --- a/Code/Editor/PythonEditorFuncs.cpp +++ b/Code/Editor/PythonEditorFuncs.cpp @@ -18,6 +18,7 @@ #include // AzToolsFramework +#include #include #include diff --git a/Code/Editor/Settings.cpp b/Code/Editor/Settings.cpp index 05a6960695..47743d1c42 100644 --- a/Code/Editor/Settings.cpp +++ b/Code/Editor/Settings.cpp @@ -935,8 +935,9 @@ void SEditorSettings::LoadDefaultGamePaths() searchPaths[EDITOR_PATH_MATERIALS].push_back((Path::GetEditingGameDataFolder() + "/Materials").c_str()); } - AZStd::string iconsPath; - AZ::StringFunc::Path::Join(Path::GetEditingRootFolder().c_str(), "Editor/UI/Icons", iconsPath); + auto iconsPath = AZ::IO::Path(AZ::Utils::GetEnginePath()) / "Assets"; + iconsPath /= "Editor/UI/Icons"; + iconsPath.MakePreferred(); searchPaths[EDITOR_PATH_UI_ICONS].push_back(iconsPath.c_str()); } diff --git a/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp b/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp index 6b3f1c2633..d7901e338a 100644 --- a/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp +++ b/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp @@ -36,9 +36,6 @@ #include "CryEdit.h" #include "Viewport.h" -// Atom Renderer -#include - AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING #include AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING @@ -272,7 +269,7 @@ void CSequenceBatchRenderDialog::OnRenderItemSelChange() // Enable/disable the 'remove'/'update' button properly. bool bNoSelection = !m_ui->m_renderList->selectionModel()->hasSelection(); m_ui->BATCH_RENDER_REMOVE_SEQ->setEnabled(bNoSelection ? false : true); - + CheckForEnableUpdateButton(); if (bNoSelection) @@ -363,7 +360,7 @@ void CSequenceBatchRenderDialog::OnRenderItemSelChange() cvarsText += item.cvars[static_cast(i)]; cvarsText += "\r\n"; } - m_ui->m_cvarsEdit->setPlainText(cvarsText); + m_ui->m_cvarsEdit->setPlainText(cvarsText); } void CSequenceBatchRenderDialog::CheckForEnableUpdateButton() @@ -497,7 +494,7 @@ void CSequenceBatchRenderDialog::OnSavePreset() } void CSequenceBatchRenderDialog::stashActiveViewportResolution() -{ +{ // stash active resolution in global vars activeViewportWidth = resolutions[0][0]; activeViewportHeight = resolutions[0][1]; @@ -505,7 +502,7 @@ void CSequenceBatchRenderDialog::stashActiveViewportResolution() if (activeViewport) { activeViewport->GetDimensions(&activeViewportWidth, &activeViewportHeight); - } + } } void CSequenceBatchRenderDialog::OnGo() @@ -643,7 +640,7 @@ void CSequenceBatchRenderDialog::OnResolutionSelected() int defaultH; const QString currentCustomResText = m_ui->m_resolutionCombo->currentText(); GetResolutionFromCustomResText(currentCustomResText.toStdString().c_str(), defaultW, defaultH); - + CCustomResolutionDlg resDlg(defaultW, defaultH, this); if (resDlg.exec() == QDialog::Accepted) { @@ -755,7 +752,7 @@ bool CSequenceBatchRenderDialog::LoadOutputOptions(const QString& pathname) { const QString customResText = resolutionNode->getContent(); m_ui->m_resolutionCombo->setItemText(curSel, customResText); - + GetResolutionFromCustomResText(customResText.toStdString().c_str(), m_customResW, m_customResH); } m_ui->m_resolutionCombo->setCurrentIndex(curSel); @@ -910,12 +907,12 @@ void CSequenceBatchRenderDialog::CaptureItemStart() folder += "/"; folder += itemText; - // If this is a relative path, prepend the @assets@ folder to match where the Renderer is going + // If this is a relative path, prepend the @products@ folder to match where the Renderer is going // to dump the frame buffer image captures. if (AzFramework::StringFunc::Path::IsRelative(folder.toUtf8().data())) { AZStd::string absolutePath; - AZStd::string assetsRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + AZStd::string assetsRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::Path::Join(assetsRoot.c_str(), folder.toUtf8().data(), absolutePath); folder = absolutePath.c_str(); } @@ -965,7 +962,7 @@ void CSequenceBatchRenderDialog::CaptureItemStart() m_renderContext.cvarDisplayInfoBU = cvarDebugInfo->GetIVal(); if (renderItem.disableDebugInfo && cvarDebugInfo->GetIVal()) { - const int DISPLAY_INFO_OFF = 0; + const int DISPLAY_INFO_OFF = 0; cvarDebugInfo->Set(DISPLAY_INFO_OFF); } } @@ -1103,13 +1100,13 @@ void CSequenceBatchRenderDialog::OnUpdateEnd(IAnimSequence* sequence) sequence->SetActiveDirector(m_renderContext.pActiveDirectorBU); const auto imageFormat = m_ui->m_imageFormatCombo->currentText(); - + SRenderItem renderItem = m_renderItems[m_renderContext.currentItemIndex]; if (m_bFFMPEGCommandAvailable && renderItem.bCreateVideo) { // Create a video using the ffmpeg plug-in from captured images. m_renderContext.processingFFMPEG = true; - + AZStd::string outputFolder = m_renderContext.captureOptions.folder; auto future = QtConcurrent::run( [renderItem, outputFolder, imageFormat] @@ -1237,18 +1234,11 @@ void CSequenceBatchRenderDialog::OnKickIdleTimout() { componentApplication->TickSystem(); } - - // Directly tick the renderer, as it's no longer part of the system tick - if (auto rpiSystem = AZ::RPI::RPISystemInterface::Get()) - { - rpiSystem->SimulationTick(); - rpiSystem->RenderTick(); - } } } void CSequenceBatchRenderDialog::OnKickIdle() -{ +{ if (m_renderContext.captureState == CaptureState::WarmingUpAfterResChange) { OnUpdateWarmingUpAfterResChange(); @@ -1264,7 +1254,7 @@ void CSequenceBatchRenderDialog::OnKickIdle() else if (m_renderContext.captureState == CaptureState::Capturing) { OnUpdateCapturing(); - } + } else if (m_renderContext.captureState == CaptureState::End) { OnUpdateEnd(m_renderContext.endingSequence); diff --git a/Code/Editor/TrackView/TrackViewPythonFuncs.cpp b/Code/Editor/TrackView/TrackViewPythonFuncs.cpp index 72da1e0b18..dc55411f80 100644 --- a/Code/Editor/TrackView/TrackViewPythonFuncs.cpp +++ b/Code/Editor/TrackView/TrackViewPythonFuncs.cpp @@ -19,6 +19,7 @@ // Editor #include "AnimationContext.h" +#include namespace { diff --git a/Code/Editor/UndoDropDown.cpp b/Code/Editor/UndoDropDown.cpp index 6bf807ebf4..4f346b57dd 100644 --- a/Code/Editor/UndoDropDown.cpp +++ b/Code/Editor/UndoDropDown.cpp @@ -101,13 +101,13 @@ public: if (fresh.size() < m_stackNames.size()) { - beginRemoveRows(createIndex(-1, -1), static_cast(fresh.size()), static_cast(m_stackNames.size() - 1)); + beginRemoveRows(QModelIndex(), static_cast(fresh.size()), static_cast(m_stackNames.size() - 1)); m_stackNames = fresh; endRemoveRows(); } else { - beginInsertRows(createIndex(-1, -1), static_cast(m_stackNames.size()), static_cast(fresh.size() - 1)); + beginInsertRows(QModelIndex(), static_cast(m_stackNames.size()), static_cast(fresh.size() - 1)); m_stackNames = fresh; endInsertRows(); } diff --git a/Code/Editor/Util/PathUtil.cpp b/Code/Editor/Util/PathUtil.cpp index c9e6823824..ca3481ddae 100644 --- a/Code/Editor/Util/PathUtil.cpp +++ b/Code/Editor/Util/PathUtil.cpp @@ -11,9 +11,9 @@ #include "PathUtil.h" -#include // for AZ_MAX_PATH_LEN +#include +#include #include // for ebus events -#include #include #include #include @@ -179,7 +179,7 @@ namespace Path EBUS_EVENT_RESULT(engineRoot, AzFramework::ApplicationRequests::Bus, GetEngineRoot); return QString(engineRoot); } - + ////////////////////////////////////////////////////////////////////////// QString& ReplaceFilename(const QString& strFilepath, const QString& strFilename, QString& strOutputFilename, bool bCallCaselessPath) { @@ -216,30 +216,21 @@ namespace Path ////////////////////////////////////////////////////////////////////////// QString GetResolvedUserSandboxFolder() { - char resolvedPath[AZ_MAX_PATH_LEN] = { 0 }; - gEnv->pFileIO->ResolvePath(GetUserSandboxFolder().toUtf8().data(), resolvedPath, AZ_MAX_PATH_LEN); - return QString::fromLatin1(resolvedPath); + AZ::IO::FixedMaxPath userSandboxFolderPath; + gEnv->pFileIO->ResolvePath(userSandboxFolderPath, GetUserSandboxFolder().toUtf8().constData()); + return QString::fromUtf8(userSandboxFolderPath.c_str(), static_cast(userSandboxFolderPath.Native().size())); } // internal function, you should use GetEditingGameDataFolder instead. AZStd::string GetGameAssetsFolder() { - const char* resultValue = nullptr; - EBUS_EVENT_RESULT(resultValue, AzToolsFramework::AssetSystemRequestBus, GetAbsoluteDevGameFolderPath); - if (!resultValue) - { - if ((gEnv) && (gEnv->pFileIO)) - { - resultValue = gEnv->pFileIO->GetAlias("@devassets@"); - } - } - - if (!resultValue) + AZ::IO::Path projectPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - resultValue = "."; + settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); } - return resultValue; + return projectPath.Native(); } /// Get the data folder @@ -258,26 +249,6 @@ namespace Path return str; } - //! Get the root folder (in source control or other writable assets) where you should save root data. - AZStd::string GetEditingRootFolder() - { - const char* resultValue = nullptr; - EBUS_EVENT_RESULT(resultValue, AzToolsFramework::AssetSystemRequestBus, GetAbsoluteDevRootFolderPath); - - if (!resultValue) - { - if ((gEnv) && (gEnv->pFileIO)) - { - resultValue = gEnv->pFileIO->GetAlias("@devassets@"); - } - } - if (!resultValue) - { - resultValue = "."; - } - return resultValue; - } - AZStd::string MakeModPathFromGamePath(const char* relGamePath) { @@ -335,165 +306,60 @@ namespace Path return ""; } - bool relPathfound = false; + bool relPathFound = false; AZStd::string relativePath; AZStd::string fullAssetPath(fullPath.toUtf8().data()); - EBUS_EVENT_RESULT(relPathfound, AzToolsFramework::AssetSystemRequestBus, GetRelativeProductPathFromFullSourceOrProductPath, fullAssetPath, relativePath); + EBUS_EVENT_RESULT(relPathFound, AzToolsFramework::AssetSystemRequestBus, GetRelativeProductPathFromFullSourceOrProductPath, fullAssetPath, relativePath); - if (relPathfound) + if (relPathFound) { // do not normalize this path, it will already be an appropriate asset ID. return CaselessPaths(relativePath.c_str()); } - char rootpath[_MAX_PATH] = { 0 }; - azstrcpy(rootpath, _MAX_PATH, Path::GetEditingRootFolder().c_str()); - - if (bRelativeToGameFolder) - { - azstrcpy(rootpath, _MAX_PATH, Path::GetEditingGameDataFolder().c_str()); - } - - QString rootPathNormalized(rootpath); - QString srcPathNormalized(fullPath); - -#if defined(AZ_PLATFORM_WINDOWS) - // avoid confusing PathRelativePathTo - rootPathNormalized.replace('/', '\\'); - srcPathNormalized.replace('/', '\\'); -#endif + AZ::IO::FixedMaxPath rootPath = bRelativeToGameFolder ? AZ::Utils::GetProjectPath() : AZ::Utils::GetEnginePath(); + AZ::IO::FixedMaxPath resolvedFullPath; + AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(resolvedFullPath, fullPath.toUtf8().constData()); // Create relative path - char resolvedSrcPath[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(srcPathNormalized.toUtf8().data(), resolvedSrcPath, AZ_MAX_PATH_LEN); - QByteArray path = QDir(rootPathNormalized).relativeFilePath(resolvedSrcPath).toUtf8(); - if (path.isEmpty()) - { - return fullPath; - } - // The following code is required because the windows PathRelativePathTo function will always return "./SomePath" instead of just "SomePath" - // Only remove single dot (.) and slash parts of a path, never the double dot (..) - const char* pBuffer = path.data(); - bool bHasDot = false; - while (*pBuffer && pBuffer != path.end()) - { - switch (*pBuffer) - { - case '.': - if (bHasDot) - { - // Found a double dot, rewind and stop removing - pBuffer--; - break; - } - // Fall through intended - case '/': - case '\\': - bHasDot = (*pBuffer == '.'); - pBuffer++; - continue; - } - break; - } - - QString relPath = pBuffer; - return CaselessPaths(relPath); + return CaselessPaths(resolvedFullPath.LexicallyProximate(rootPath).MakePreferred().c_str()); } QString GamePathToFullPath(const QString& path) { using namespace AzToolsFramework; - AZ_Warning("GamePathToFullPath", path.size() <= AZ_MAX_PATH_LEN, "Path exceeds maximum path length of %d", AZ_MAX_PATH_LEN); - if ((gEnv) && (gEnv->pFileIO) && gEnv->pCryPak && path.size() <= AZ_MAX_PATH_LEN) + AZ_Warning("GamePathToFullPath", path.size() <= AZ::IO::MaxPathLength, "Path exceeds maximum path length of %zu", AZ::IO::MaxPathLength); + if (path.size() <= AZ::IO::MaxPathLength) { // first, adjust the file name for mods: - bool fullPathfound = false; - AZStd::string assetFullPath; - AZStd::string adjustedFilePath = path.toUtf8().data(); - AssetSystemRequestBus::BroadcastResult(fullPathfound, &AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, adjustedFilePath, assetFullPath); - if (fullPathfound) + bool fullPathFound = false; + AZ::IO::Path assetFullPath; + AZ::IO::Path adjustedFilePath = path.toUtf8().constData(); + AssetSystemRequestBus::BroadcastResult(fullPathFound, &AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, + adjustedFilePath.Native(), assetFullPath.Native()); + if (fullPathFound) { - //if the bus message succeeds than normalize and lowercase the path - AzFramework::StringFunc::Path::Normalize(assetFullPath); - return assetFullPath.c_str(); + //if the bus message succeeds than normalize + return assetFullPath.LexicallyNormal().c_str(); } - // if the bus message didn't succeed, 'guess' the source assets: + // if the bus message didn't succeed, check if he path exist as a resolved path else { // Not all systems have been converted to use local paths. Some editor files save XML files directly, and a full or correctly aliased path is already passed in. // If the path passed in exists already, then return the resolved filepath if (AZ::IO::FileIOBase::GetDirectInstance()->Exists(adjustedFilePath.c_str())) { - char resolvedPath[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 }; - AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(adjustedFilePath.c_str(), resolvedPath, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength); - return QString::fromUtf8(resolvedPath); + AZ::IO::FixedMaxPath resolvedPath; + AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(resolvedPath, adjustedFilePath); + return QString::fromUtf8(resolvedPath.c_str(), static_cast(resolvedPath.Native().size())); } - // if we get here it means that the Asset Processor does not know about this file. most of the time we should never get here - // the rest of this code just does a bunch of heuristic guesses in case of missing files or if the user has hand-edited - // the asset cache by moving files in via some other means or external process. - if (adjustedFilePath[0] != '@') - { - const char* prefix = (adjustedFilePath[0] == '/' || adjustedFilePath[0] == '\\') ? "@devassets@" : "@devassets@/"; - adjustedFilePath = prefix + adjustedFilePath; - } - - char szAdjustedFile[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 }; - gEnv->pFileIO->ResolvePath(adjustedFilePath.c_str(), szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile)); - - if ((azstrnicmp(szAdjustedFile, "@devassets@", 11) == 0) && ((szAdjustedFile[11] == '/') || (szAdjustedFile[11] == '\\'))) - { - if (!gEnv->pCryPak->IsFileExist(szAdjustedFile)) - { - AZStd::string newName(szAdjustedFile); - AzFramework::StringFunc::Replace(newName, "@devassets@", "@devroot@/engine", false); - - if (gEnv->pCryPak->IsFileExist(newName.c_str())) - { - azstrcpy(szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile), newName.c_str()); - } - else - { - // getting tricky here, try @devroot@ alone, in case its 'editor' - AzFramework::StringFunc::Replace(newName, "@devassets@", "@devroot@", false); - if (gEnv->pCryPak->IsFileExist(szAdjustedFile)) - { - azstrcpy(szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile), newName.c_str()); - } - // give up, best guess is just @devassets@ - } - } - } - - // we should very rarely actually get to this point in the code. - - // szAdjustedFile may contain an alias at this point. (@assets@/blah.whatever) - // there is a case in which the loose asset exists only within a pak file for some reason - // this is not recommended but it is possible.in that case, we want to return the original szAdjustedFile - // without touching it or resolving it so that crypak can open it successfully. - char adjustedPath[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 }; - if (gEnv->pFileIO->ResolvePath(szAdjustedFile, adjustedPath, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength)) // resolve to full path - { - if ((gEnv->pCryPak->IsFileExist(adjustedPath)) || (!gEnv->pCryPak->IsFileExist(szAdjustedFile))) - { - // note that if we get here, then EITHER - // the file exists as a loose asset in the actual adjusted path - // OR the file does not exist in the original passed-in aliased name (like '@assets@/whatever') - // in which case we may as well just resolve the path to a full path and return it. - assetFullPath = adjustedPath; - AzFramework::StringFunc::Path::Normalize(assetFullPath); - azstrcpy(szAdjustedFile, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength, assetFullPath.c_str()); - } - // if the above case succeeded then it means that the file does NOT exist loose - // but DOES exist in a pak, in which case we leave szAdjustedFile with the alias on the front of it, meaning - // fopens via crypak will actually succeed. - } - return szAdjustedFile; + return path; } } else { - return ""; + return QString{}; } } diff --git a/Code/Editor/Util/PathUtil.h b/Code/Editor/Util/PathUtil.h index 2c49031155..163d74e358 100644 --- a/Code/Editor/Util/PathUtil.h +++ b/Code/Editor/Util/PathUtil.h @@ -44,9 +44,6 @@ namespace Path //! always returns a full path EDITOR_CORE_API AZStd::string GetEditingGameDataFolder(); - //! Get the root folder (in source control or other writable assets) where you should save root data. - EDITOR_CORE_API AZStd::string GetEditingRootFolder(); - //! Set the current mod NAME for editing purposes. After doing this the above functions will take this into account //! name only, please! EDITOR_CORE_API void SetModName(const char* input); @@ -69,93 +66,6 @@ namespace Path return strPath; } - //! Split full file name to path and filename - //! @param filepath [IN] Full file name inclusing path. - //! @param path [OUT] Extracted file path. - //! @param file [OUT] Extracted file (with extension). - inline void Split(const QString& filepath, QString& path, QString& file) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.toUtf8().data(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext)); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); - path = path_buffer; - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), 0, 0, fname, ext); -#else - _splitpath(filepath.toUtf8().data(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); - path = path_buffer; - _makepath(path_buffer, 0, 0, fname, ext); -#endif - file = path_buffer; - } - inline void Split(const AZStd::string& filepath, AZStd::string& path, AZStd::string& file) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.c_str(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), 0, 0, 0, 0); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); - path = path_buffer; - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), 0, 0, fname, ext); -#else - _splitpath(filepath.c_str(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); - path = path_buffer; - _makepath(path_buffer, 0, 0, fname, ext); -#endif - file = path_buffer; - } - - //! Split full file name to path and filename - //! @param filepath [IN] Full file name inclusing path. - //! @param path [OUT] Extracted file path. - //! @param filename [OUT] Extracted file (without extension). - //! @param ext [OUT] Extracted files extension. - inline void Split(const QString& filepath, QString& path, QString& filename, QString& fext) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.toUtf8().data(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext)); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); -#else - _splitpath(filepath.toUtf8().data(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); -#endif - path = path_buffer; - filename = fname; - fext = ext; - } - inline void Split(const AZStd::string& filepath, AZStd::string& path, AZStd::string& filename, AZStd::string& fext) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.c_str(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext)); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); -#else - _splitpath(filepath.c_str(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); -#endif - path = path_buffer; - filename = fname; - fext = ext; - } - //! Split path into segments //! @param filepath [IN] path inline QStringList SplitIntoSegments(const QString& path) diff --git a/Code/Editor/Viewport.cpp b/Code/Editor/Viewport.cpp index 2d41538d92..5b4f4a4df3 100644 --- a/Code/Editor/Viewport.cpp +++ b/Code/Editor/Viewport.cpp @@ -173,8 +173,6 @@ QtViewport::QtViewport(QWidget* parent) m_bAdvancedSelectMode = false; - m_pVisibleObjectsCache = new CBaseObjectsCache; - m_constructionPlane.SetPlane(Vec3_OneZ, Vec3_Zero); m_constructionPlaneAxisX = Vec3_Zero; m_constructionPlaneAxisY = Vec3_Zero; @@ -204,8 +202,6 @@ QtViewport::QtViewport(QWidget* parent) ////////////////////////////////////////////////////////////////////////// QtViewport::~QtViewport() { - delete m_pVisibleObjectsCache; - GetIEditor()->GetViewManager()->UnregisterViewport(this); } @@ -376,11 +372,6 @@ void QtViewport::OnDeactivate() void QtViewport::ResetContent() { m_pMouseOverObject = nullptr; - - // Need to clear visual object cache. - // Right after loading new level, some code(e.g. OnMouseMove) access invalid - // previous level object before cache updated. - GetVisibleObjectsCache()->ClearObjects(); } ////////////////////////////////////////////////////////////////////////// @@ -398,11 +389,8 @@ void QtViewport::Update() m_viewportUi.Update(); m_bAdvancedSelectMode = false; - bool bSpaceClick = false; - { - bSpaceClick = CheckVirtualKey(Qt::Key_Space) & !CheckVirtualKey(Qt::Key_Shift) /*& !CheckVirtualKey(Qt::Key_Control)*/; - } - if (bSpaceClick && hasFocus()) + + if (CheckVirtualKey(Qt::Key_Space) && !CheckVirtualKey(Qt::Key_Shift) && hasFocus()) { m_bAdvancedSelectMode = true; } diff --git a/Code/Editor/Viewport.h b/Code/Editor/Viewport.h index 60c1306420..7f8ccc4c4f 100644 --- a/Code/Editor/Viewport.h +++ b/Code/Editor/Viewport.h @@ -157,7 +157,7 @@ public: virtual Vec3 SnapToGrid(const Vec3& vec) = 0; - //! Get selection procision tolerance. + //! Get selection precision tolerance. virtual float GetSelectionTolerance() const = 0; ////////////////////////////////////////////////////////////////////////// @@ -491,10 +491,6 @@ public: void ResetCursor() override; void SetSupplementaryCursorStr(const QString& str) override; - ////////////////////////////////////////////////////////////////////////// - // Return visble objects cache. - CBaseObjectsCache* GetVisibleObjectsCache() override { return m_pVisibleObjectsCache; }; - void RegisterRenderListener(IRenderListener* piListener) override; bool UnregisterRenderListener(IRenderListener* piListener) override; bool IsRenderListenerRegistered(IRenderListener* piListener) override; @@ -612,8 +608,6 @@ protected: int m_nLastUpdateFrame; int m_nLastMouseMoveFrame; - CBaseObjectsCache* m_pVisibleObjectsCache; - QRect m_rcClient; AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING diff --git a/Code/Editor/ViewportTitleDlg.cpp b/Code/Editor/ViewportTitleDlg.cpp index 65d6de8944..75d16e9a40 100644 --- a/Code/Editor/ViewportTitleDlg.cpp +++ b/Code/Editor/ViewportTitleDlg.cpp @@ -15,6 +15,7 @@ #include "ViewportTitleDlg.h" // Qt +#include #include #include @@ -36,8 +37,10 @@ #include "MathConversion.h" #include "EditorViewportSettings.h" -#include +#include #include +#include +#include #include #include @@ -145,6 +148,11 @@ CViewportTitleDlg::~CViewportTitleDlg() AZ::VR::VREventBus::Handler::BusDisconnect(); GetISystem()->GetISystemEventDispatcher()->RemoveListener(this); GetIEditor()->UnregisterNotifyListener(this); + + if (m_prefabViewportFocusPathHandler) + { + delete m_prefabViewportFocusPathHandler; + } } void CViewportTitleDlg::SetupCameraDropdownMenu() @@ -292,8 +300,6 @@ void CViewportTitleDlg::SetViewPane(CLayoutViewPane* pViewPane) ////////////////////////////////////////////////////////////////////////// void CViewportTitleDlg::OnInitDialog() { - m_ui->m_titleBtn->setText(m_title); - // Add a child parented to us that listens for r_displayInfo changes. auto displayInfoHelper = new CViewportTitleDlgDisplayInfoHelper(this); connect(displayInfoHelper, &CViewportTitleDlgDisplayInfoHelper::ViewportInfoStatusUpdated, this, &CViewportTitleDlg::UpdateDisplayInfo); @@ -314,13 +320,28 @@ void CViewportTitleDlg::OnInitDialog() m_cameraSpeed->setFixedWidth(width); + bool isPrefabSystemEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult(isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); + + if (isPrefabSystemEnabled) + { + m_prefabViewportFocusPathHandler = new AzToolsFramework::Prefab::PrefabViewportFocusPathHandler(); + m_prefabViewportFocusPathHandler->Initialize(m_ui->m_prefabFocusPath, m_ui->m_prefabFocusBackButton); + } + else + { + m_ui->m_prefabFocusPath->setEnabled(false); + m_ui->m_prefabFocusBackButton->setEnabled(false); + m_ui->m_prefabFocusPath->hide(); + m_ui->m_prefabFocusBackButton->hide(); + } + } ////////////////////////////////////////////////////////////////////////// void CViewportTitleDlg::SetTitle(const QString& title) { m_title = title; - m_ui->m_titleBtn->setText(m_title); } ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Editor/ViewportTitleDlg.h b/Code/Editor/ViewportTitleDlg.h index 4a2a454907..6996fe7750 100644 --- a/Code/Editor/ViewportTitleDlg.h +++ b/Code/Editor/ViewportTitleDlg.h @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -176,6 +177,8 @@ protected: QWidgetAction* m_gridSizeActionWidget = nullptr; QWidgetAction* m_angleSizeActionWidget = nullptr; + AzToolsFramework::Prefab::PrefabViewportFocusPathHandler* m_prefabViewportFocusPathHandler = nullptr; + QScopedPointer m_ui; }; diff --git a/Code/Editor/ViewportTitleDlg.ui b/Code/Editor/ViewportTitleDlg.ui index f0679dd2a1..7ba6361cf9 100644 --- a/Code/Editor/ViewportTitleDlg.ui +++ b/Code/Editor/ViewportTitleDlg.ui @@ -28,7 +28,7 @@ 29 - + 10 @@ -42,102 +42,112 @@ 0 - + + + Up one level + + + + :/Breadcrumb/img/UI20/Breadcrumb/arrow_left-default.svg:/Breadcrumb/img/UI20/Breadcrumb/arrow_left-default.svg + + + + + 0 0 - - Qt::NoContextMenu + + + + + + Qt::Horizontal + + + + 40 + 20 + - - Static + + + + + + Camera settings - - 11 + + + :/Menu/camera.svg:/Menu/camera.svg - - - - :/Menu/camera.svg:/Menu/camera.svg - - - - Camera settings - - - - - - - Debug information - - - - :/Menu/debug.svg:/Menu/debug.svg - - - - true - - - + + + Debug information + + + + :/Menu/debug.svg:/Menu/debug.svg + + + true + + + - - - Toggle viewport helpers - - - - :/Menu/helpers.svg:/Menu/helpers.svg - - - - true - - - + + + Toggle viewport helpers + + + + :/Menu/helpers.svg:/Menu/helpers.svg + + + true + + + - - - Viewport resolution - - - - :/Menu/resolution.svg:/Menu/resolution.svg - - - + + + Viewport resolution + + + + :/Menu/resolution.svg:/Menu/resolution.svg + + - - - Other settings - - - - :/Menu/menu.svg:/Menu/menu.svg - - - + + + Other settings + + + + :/Menu/menu.svg:/Menu/menu.svg + + - AzQtComponents::ButtonDivider + AzQtComponents::BreadCrumbs QWidget -
AzQtComponents/Components/ButtonDivider.h
+
AzQtComponents/Components/Widgets/BreadCrumbs.h
1
- - - - + + + + diff --git a/Code/Framework/AtomCore/AtomCore/Instance/InstanceData.h b/Code/Framework/AtomCore/AtomCore/Instance/InstanceData.h index 33fc93c0f5..6b07d12e9c 100644 --- a/Code/Framework/AtomCore/AtomCore/Instance/InstanceData.h +++ b/Code/Framework/AtomCore/AtomCore/Instance/InstanceData.h @@ -89,6 +89,9 @@ namespace AZ // Tracks the asset type used to create the instance. AssetType m_assetType; + + // Boolean to indicate if the instance has been orphaned from the instance database + bool m_isOrphaned = false; }; /// @cond EXCLUDE_DOCS diff --git a/Code/Framework/AtomCore/AtomCore/Instance/InstanceDatabase.h b/Code/Framework/AtomCore/AtomCore/Instance/InstanceDatabase.h index ac97af3629..4b4ad572c2 100644 --- a/Code/Framework/AtomCore/AtomCore/Instance/InstanceDatabase.h +++ b/Code/Framework/AtomCore/AtomCore/Instance/InstanceDatabase.h @@ -203,6 +203,16 @@ namespace AZ //! Calls FindOrCreate using a random InstanceId Data::Instance Create(const Asset& asset, const AZStd::any* param = nullptr); + /** + * Removes the instance data from the database. Does not release it. + * References to existing instances will remain valid, but new calls to Create/FindOrCreate will create a new instance + * This function is temporary, to provide functionality needed for Model hot-reloading, but will be removed + * once the Model class does not need it anymore. + * + * @param id The id of the instance to remove + */ + void TEMPOrphan(const InstanceId& id); + private: InstanceDatabase(const AssetType& assetType); ~InstanceDatabase(); @@ -356,6 +366,20 @@ namespace AZ return FindOrCreate(Data::InstanceId::CreateRandom(), asset, param); } + template + void InstanceDatabase::TEMPOrphan(const InstanceId& id) + { + AZStd::scoped_lock lock(m_databaseMutex); + // Check if the instance is still in the database, in case it was orphaned twice + auto instanceItr = m_database.find(id); + if (instanceItr != m_database.end()) + { + // Mark the instance as orphaned, and remove it from the database + instanceItr->second->m_isOrphaned = true; + m_database.erase(instanceItr); + } + } + template void InstanceDatabase::ReleaseInstance(InstanceData* instance, const InstanceId& instanceId) { @@ -374,6 +398,12 @@ namespace AZ m_database.erase(instance->GetId()); m_instanceHandler.m_deleteFunction(static_cast(instance)); } + else if (instance->m_isOrphaned && instance->m_useCount.compare_exchange_strong(expectedRefCount, -1)) + { + // If the instance was orphaned, it has already been removed from the database, + // but still needs to be deleted when the refcount drops to 0 + m_instanceHandler.m_deleteFunction(static_cast(instance)); + } } template diff --git a/Code/Framework/AtomCore/Tests/InstanceDatabase.cpp b/Code/Framework/AtomCore/Tests/InstanceDatabase.cpp index 5d1edc5a09..6a5c65ac7a 100644 --- a/Code/Framework/AtomCore/Tests/InstanceDatabase.cpp +++ b/Code/Framework/AtomCore/Tests/InstanceDatabase.cpp @@ -181,7 +181,76 @@ namespace UnitTest EXPECT_EQ(instance, instance3); } - void ParallelInstanceCreateHelper(size_t threadCountMax, size_t assetIdCount, size_t durationSeconds) + TEST_F(InstanceDatabaseTest, InstanceOrphan) + { + auto& assetManager = AssetManager::Instance(); + auto& instanceDatabase = InstanceDatabase::Instance(); + + Asset someAsset = assetManager.CreateAsset(s_assetId0, AZ::Data::AssetLoadBehavior::Default); + + Instance orphanedInstance = instanceDatabase.FindOrCreate(s_instanceId0, someAsset); + EXPECT_NE(orphanedInstance, nullptr); + + instanceDatabase.TEMPOrphan(s_instanceId0); + // After orphan, the instance should not be found in the database, but it should still be valid + EXPECT_EQ(instanceDatabase.Find(s_instanceId0), nullptr); + EXPECT_NE(orphanedInstance, nullptr); + + instanceDatabase.TEMPOrphan(s_instanceId0); + // Orphaning twice should be a no-op + EXPECT_EQ(instanceDatabase.Find(s_instanceId0), nullptr); + EXPECT_NE(orphanedInstance, nullptr); + + Instance instance2 = instanceDatabase.FindOrCreate(s_instanceId0, someAsset); + // Creating another instance with the same id should return a different instance than the one that was orphaned + EXPECT_NE(orphanedInstance, instance2); + } + + enum class ParallelInstanceTestCases + { + Create, + CreateAndDeferRemoval, + CreateAndOrphan, + CreateDeferRemovalAndOrphan + }; + + enum class ParralleInstanceCurrentAction + { + Create, + DeferredRemoval, + Orphan + }; + + ParralleInstanceCurrentAction ParallelInstanceGetCurrentAction(ParallelInstanceTestCases testCase) + { + switch (testCase) + { + case ParallelInstanceTestCases::CreateAndDeferRemoval: + switch (rand() % 2) + { + case 0: return ParralleInstanceCurrentAction::Create; + case 1: return ParralleInstanceCurrentAction::DeferredRemoval; + } + case ParallelInstanceTestCases::CreateAndOrphan: + switch (rand() % 2) + { + case 0: return ParralleInstanceCurrentAction::Create; + case 1: return ParralleInstanceCurrentAction::Orphan; + } + case ParallelInstanceTestCases::CreateDeferRemovalAndOrphan: + switch (rand() % 3) + { + case 0: return ParralleInstanceCurrentAction::Create; + case 1: return ParralleInstanceCurrentAction::DeferredRemoval; + case 2: return ParralleInstanceCurrentAction::Orphan; + } + case ParallelInstanceTestCases::Create: + default: + return ParralleInstanceCurrentAction::Create; + } + } + + void ParallelInstanceCreateHelper(size_t threadCountMax, size_t assetIdCount, float durationSeconds, ParallelInstanceTestCases testCase) { printf("Testing threads=%zu assetIds=%zu ... ", threadCountMax, assetIdCount); @@ -192,6 +261,7 @@ namespace UnitTest auto& instanceManager = InstanceDatabase::Instance(); AZStd::vector guids; + AZStd::vector> instances; AZStd::vector> assets; for (size_t i = 0; i < assetIdCount; ++i) @@ -199,6 +269,7 @@ namespace UnitTest Uuid guid = Uuid::CreateRandom(); guids.emplace_back(guid); + instances.emplace_back(nullptr); // Pre-create asset so we don't attempt to load it from the catalog. assets.emplace_back(assetManager.CreateAsset(guid, AZ::Data::AssetLoadBehavior::Default)); @@ -206,6 +277,7 @@ namespace UnitTest AZStd::vector threads; AZStd::mutex mutex; + AZStd::mutex referenceTableMutex; AZStd::atomic threadCount((int)threadCountMax); AZStd::condition_variable cv; AZStd::atomic_bool keepDispatching(true); @@ -225,11 +297,15 @@ namespace UnitTest for (size_t i = 0; i < threadCountMax; ++i) { threads.emplace_back( - [&instanceManager, &threadCount, &cv, &guids, &assets, &durationSeconds]() + [&instanceManager, &threadCount, &cv, &guids, &instances, &assets, &durationSeconds, &testCase, &referenceTableMutex]() { AZ::Debug::Timer timer; timer.Stamp(); + bool deferRemoval = testCase == ParallelInstanceTestCases::CreateAndDeferRemoval || + testCase == ParallelInstanceTestCases::CreateDeferRemovalAndOrphan + ? true : false; + while (timer.GetDeltaTimeInSeconds() < durationSeconds) { const size_t index = rand() % guids.size(); @@ -237,11 +313,36 @@ namespace UnitTest const InstanceId instanceId{ uuid }; const AssetId assetId{ uuid }; - Instance instance = - instanceManager.FindOrCreate(instanceId, Asset(assetId, azrtti_typeid())); - EXPECT_NE(instance, nullptr); - EXPECT_EQ(instance->GetId(), instanceId); - EXPECT_EQ(instance->m_asset, assets[index]); + ParralleInstanceCurrentAction currentAction = ParallelInstanceGetCurrentAction(testCase); + + if (currentAction == ParralleInstanceCurrentAction::Orphan) + { + // Orphan the instance, but don't decrease its refcount + instanceManager.TEMPOrphan(instanceId); + } + else if (currentAction == ParralleInstanceCurrentAction::DeferredRemoval) + { + // Drop the refcount to zero so the instance will be released + referenceTableMutex.lock(); + instances[index] = nullptr; + referenceTableMutex.unlock(); + } + else + { + // Otherwise, add a new instance + Instance instance = instanceManager.FindOrCreate(instanceId, assets[index]); + EXPECT_NE(instance, nullptr); + EXPECT_EQ(instance->GetId(), instanceId); + EXPECT_EQ(instance->m_asset, assets[index]); + + if (deferRemoval) + { + // Keep a reference to the instance alive so it can be removed later + referenceTableMutex.lock(); + instances[index] = instance; + referenceTableMutex.unlock(); + } + } } threadCount--; @@ -254,10 +355,12 @@ namespace UnitTest // Used to detect a deadlock. If we wait for more than 10 seconds, it's likely a deadlock has occurred while (threadCount > 0 && !timedOut) { + size_t durationSecondsRoundedUp = static_cast(std::ceil(durationSeconds)); + AZStd::unique_lock lock(mutex); timedOut = (AZStd::cv_status::timeout == - cv.wait_until(lock, AZStd::chrono::system_clock::now() + AZStd::chrono::seconds(durationSeconds * 2))); + cv.wait_until(lock, AZStd::chrono::system_clock::now() + AZStd::chrono::seconds(durationSecondsRoundedUp * 2))); } EXPECT_TRUE(threadCount == 0) << "One or more threads appear to be deadlocked at " << timer.GetDeltaTimeInSeconds() << " seconds"; @@ -273,11 +376,11 @@ namespace UnitTest printf("Took %f seconds\n", timer.GetDeltaTimeInSeconds()); } - TEST_F(InstanceDatabaseTest, ParallelInstanceCreate) + void ParallelCreateTest(ParallelInstanceTestCases testCase) { // This is the original test scenario from when InstanceDatabase was first implemented // threads, AssetIds, seconds - ParallelInstanceCreateHelper(8, 100, 5); + ParallelInstanceCreateHelper(8, 100, 5, testCase); // This value is checked in as 1 so this test doesn't take too much time, but can be increased locally to soak the test. const size_t attempts = 1; @@ -289,11 +392,11 @@ namespace UnitTest // The idea behind this series of tests is that there are two threads sharing one Instance, and both threads try to // create or release that instance at the same time. // At the time, this set of scenarios has something like a 10% failure rate. - const size_t duration = 2; + const float duration = 2.0f; // threads, AssetIds, seconds - ParallelInstanceCreateHelper(2, 1, duration); - ParallelInstanceCreateHelper(4, 1, duration); - ParallelInstanceCreateHelper(8, 1, duration); + ParallelInstanceCreateHelper(2, 1, duration, testCase); + ParallelInstanceCreateHelper(4, 1, duration, testCase); + ParallelInstanceCreateHelper(8, 1, duration, testCase); } for (size_t i = 0; i < attempts; ++i) @@ -301,19 +404,39 @@ namespace UnitTest printf("Attempt %zu of %zu... \n", i, attempts); // Here we try a bunch of different threadCount:assetCount ratios to be thorough - const size_t duration = 2; + const float duration = 2.0f; // threads, AssetIds, seconds - ParallelInstanceCreateHelper(2, 1, duration); - ParallelInstanceCreateHelper(4, 1, duration); - ParallelInstanceCreateHelper(4, 2, duration); - ParallelInstanceCreateHelper(4, 4, duration); - ParallelInstanceCreateHelper(8, 1, duration); - ParallelInstanceCreateHelper(8, 2, duration); - ParallelInstanceCreateHelper(8, 3, duration); - ParallelInstanceCreateHelper(8, 4, duration); + ParallelInstanceCreateHelper(2, 1, duration, testCase); + ParallelInstanceCreateHelper(4, 1, duration, testCase); + ParallelInstanceCreateHelper(4, 2, duration, testCase); + ParallelInstanceCreateHelper(4, 4, duration, testCase); + ParallelInstanceCreateHelper(8, 1, duration, testCase); + ParallelInstanceCreateHelper(8, 2, duration, testCase); + ParallelInstanceCreateHelper(8, 3, duration, testCase); + ParallelInstanceCreateHelper(8, 4, duration, testCase); } } + TEST_F(InstanceDatabaseTest, ParallelInstanceCreate) + { + ParallelCreateTest(ParallelInstanceTestCases::Create); + } + + TEST_F(InstanceDatabaseTest, ParallelInstanceCreateAndDeferRemoval) + { + ParallelCreateTest(ParallelInstanceTestCases::CreateAndDeferRemoval); + } + + TEST_F(InstanceDatabaseTest, ParallelInstanceCreateAndOrphan) + { + ParallelCreateTest(ParallelInstanceTestCases::CreateAndOrphan); + } + + TEST_F(InstanceDatabaseTest, ParallelInstanceCreateDeferRemovalAndOrphan) + { + ParallelCreateTest(ParallelInstanceTestCases::CreateDeferRemovalAndOrphan); + } + TEST_F(InstanceDatabaseTest, InstanceCreateNoDatabase) { bool m_deleted = false; diff --git a/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp b/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp index 98182a9568..06bb0b0cac 100644 --- a/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp +++ b/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp @@ -340,6 +340,14 @@ namespace AZ // (Load jobs will attempt to reuse blocked threads before spinning off new job threads) ProcessLoadJob(); } + + // Pump the AssetBus function queue once more after the load has completed in case additional + // functions have been queued between the last call to DispatchEvents and the completion + // of the current load job + if (m_shouldDispatchEvents) + { + AssetManager::Instance().DispatchEvents(); + } } void Finish() @@ -543,8 +551,6 @@ namespace AZ { PrepareShutDown(); - DispatchEvents(); - // Acquire the asset lock to make sure nobody else is trying to do anything fancy with assets AZStd::scoped_lock assetLock(m_assetMutex); @@ -567,7 +573,10 @@ namespace AZ { AZ_PROFILE_FUNCTION(AzCore); AssetManagerNotificationBus::Broadcast(&AssetManagerNotificationBus::Events::OnAssetEventsDispatchBegin); - AssetBus::ExecuteQueuedEvents(); + while (AssetBus::QueuedEventCount()) + { + AssetBus::ExecuteQueuedEvents(); + } AssetManagerNotificationBus::Broadcast(&AssetManagerNotificationBus::Events::OnAssetEventsDispatchEnd); } diff --git a/Code/Framework/AzCore/AzCore/Asset/AssetManagerComponent.cpp b/Code/Framework/AzCore/AzCore/Asset/AssetManagerComponent.cpp index 93315c9c81..b40c36bc6b 100644 --- a/Code/Framework/AzCore/AzCore/Asset/AssetManagerComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Asset/AssetManagerComponent.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Asset/AssetSerializer.cpp b/Code/Framework/AzCore/AzCore/Asset/AssetSerializer.cpp index ee594c585b..b5cc6c5df4 100644 --- a/Code/Framework/AzCore/AzCore/Asset/AssetSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Asset/AssetSerializer.cpp @@ -8,6 +8,7 @@ #include #include +#include #include namespace AZ { diff --git a/Code/Framework/AzCore/AzCore/AzCoreModule.cpp b/Code/Framework/AzCore/AzCore/AzCoreModule.cpp index c60ea1bd72..67123ed826 100644 --- a/Code/Framework/AzCore/AzCore/AzCoreModule.cpp +++ b/Code/Framework/AzCore/AzCore/AzCoreModule.cpp @@ -22,6 +22,8 @@ #include #include #include +#include +#include namespace AZ { @@ -41,6 +43,11 @@ namespace AZ TimeSystemComponent::CreateDescriptor(), LoggerSystemComponent::CreateDescriptor(), EventSchedulerSystemComponent::CreateDescriptor(), + TaskGraphSystemComponent::CreateDescriptor(), + +#if !defined(_RELEASE) + Statistics::StatisticalProfilerProxySystemComponent::CreateDescriptor(), +#endif #if !defined(AZCORE_EXCLUDE_LUA) ScriptSystemComponent::CreateDescriptor(), @@ -55,6 +62,11 @@ namespace AZ azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), + azrtti_typeid(), + +#if !defined(_RELEASE) + azrtti_typeid(), +#endif }; } } diff --git a/Code/Framework/AzCore/AzCore/Component/Component.h b/Code/Framework/AzCore/AzCore/Component/Component.h index 3cbb9b5a86..677517d896 100644 --- a/Code/Framework/AzCore/AzCore/Component/Component.h +++ b/Code/Framework/AzCore/AzCore/Component/Component.h @@ -22,6 +22,7 @@ #include #include // Used as the allocator for most components. #include +#include namespace AZ { diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index a13f11c007..7e9accffd7 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -74,8 +74,6 @@ #include #include -AZ_CVAR(float, g_simulation_tick_rate, 0, nullptr, AZ::ConsoleFunctorFlags::Null, "The rate at which the game simulation tick loop runs, or 0 for as fast as possible"); - static void PrintEntityName(const AZ::ConsoleCommandContainer& arguments) { if (arguments.empty()) @@ -1369,9 +1367,6 @@ namespace AZ #endif } - //========================================================================= - // Tick - //========================================================================= void ComponentApplication::Tick(float deltaOverride /*= -1.f*/) { { @@ -1396,29 +1391,9 @@ namespace AZ AZ_PROFILE_SCOPE(AzCore, "ComponentApplication::Tick:OnTick"); EBUS_EVENT(TickBus, OnTick, m_deltaTime, ScriptTimePoint(now)); } - - // If tick rate limiting is on, ensure (1 / g_simulation_tick_rate) ms has elapsed since the last frame, - // sleeping if there's still time remaining. - if (g_simulation_tick_rate > 0.f) - { - now = AZStd::chrono::system_clock::now(); - - // Work in microsecond durations here as that's the native measurement time for time_point - constexpr float microsecondsPerSecond = 1000.f * 1000.f; - const AZStd::chrono::microseconds timeBudgetPerTick(static_cast(microsecondsPerSecond / g_simulation_tick_rate)); - AZStd::chrono::microseconds timeUntilNextTick = m_currentTime + timeBudgetPerTick - now; - - if (timeUntilNextTick.count() > 0) - { - AZStd::this_thread::sleep_for(timeUntilNextTick); - } - } } } - //========================================================================= - // Tick - //========================================================================= void ComponentApplication::TickSystem() { AZ_PROFILE_SCOPE(System, "Component application tick"); @@ -1566,5 +1541,4 @@ namespace AZ AZ::SettingsRegistryScriptUtils::ReflectSettingsRegistryToBehaviorContext(*behaviorContext); } } - } // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index bfc541ca09..8e95ff5fa3 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -5,6 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + #pragma once #include diff --git a/Code/Framework/AzCore/AzCore/Component/Entity.cpp b/Code/Framework/AzCore/AzCore/Component/Entity.cpp index 2e92873238..0fe201d448 100644 --- a/Code/Framework/AzCore/AzCore/Component/Entity.cpp +++ b/Code/Framework/AzCore/AzCore/Component/Entity.cpp @@ -649,6 +649,16 @@ namespace AZ m_stateEvent.Signal(oldState, m_state); } + void Entity::SetSpawnTicketId(u32 spawnTicketId) + { + m_spawnTicketId = spawnTicketId; + } + + u32 Entity::GetSpawnTicketId() const + { + return m_spawnTicketId; + } + void Entity::OnNameChanged() const { EBUS_EVENT_ID(GetId(), EntityBus, OnEntityNameChanged, m_name); diff --git a/Code/Framework/AzCore/AzCore/Component/Entity.h b/Code/Framework/AzCore/AzCore/Component/Entity.h index 356533f268..c2bde375bb 100644 --- a/Code/Framework/AzCore/AzCore/Component/Entity.h +++ b/Code/Framework/AzCore/AzCore/Component/Entity.h @@ -133,6 +133,14 @@ namespace AZ //! @return The state of the entity. For example, the entity has been initialized, the entity is active, and so on. State GetState() const { return m_state; } + //! Gets the ticket id used to spawn the entity. + //! @return the ticket id used to spawn the entity. If entity is not spawned, the id will be 0. + u32 GetSpawnTicketId() const; + + //! Sets the ticket id used to spawn the entity. The ticket id in the entity will remain 0 unless it's set using this function. + //! @param spawnTicketId the ticket id used to spawn the entity. + void SetSpawnTicketId(u32 spawnTicketId); + //! Connects an entity state event handler to the entity. //! All state changes will be signaled through this event. //! @param handler reference to the EntityStateEvent handler to attach to the entities state event. @@ -410,6 +418,8 @@ namespace AZ //! A user-friendly name for the entity. This makes error messages easier to read. AZStd::string m_name; + u32 m_spawnTicketId = 0; + //! The state of the entity. State m_state; diff --git a/Code/Framework/AzCore/AzCore/Component/EntityUtils.h b/Code/Framework/AzCore/AzCore/Component/EntityUtils.h index ce258bc637..5c02a3fe74 100644 --- a/Code/Framework/AzCore/AzCore/Component/EntityUtils.h +++ b/Code/Framework/AzCore/AzCore/Component/EntityUtils.h @@ -5,8 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#ifndef AZCORE_ENTITY_UTILS_H -#define AZCORE_ENTITY_UTILS_H +#pragma once #include #include @@ -217,6 +216,3 @@ namespace AZ } // namespace EntityUtils } // namespace AZ - -#endif // AZCORE_ENTITY_UTILS_H -#pragma once diff --git a/Code/Framework/AzCore/AzCore/Component/TickBus.h b/Code/Framework/AzCore/AzCore/Component/TickBus.h index 966a3c303e..e65efb93f2 100644 --- a/Code/Framework/AzCore/AzCore/Component/TickBus.h +++ b/Code/Framework/AzCore/AzCore/Component/TickBus.h @@ -46,8 +46,6 @@ namespace AZ TICK_PRE_RENDER = 750, ///< Suggested tick handler position to update render-related data. - TICK_RENDER = 800, ///< Suggested tick handler position for rendering. - TICK_DEFAULT = 1000, ///< Default tick handler position when the handler is constructed. TICK_UI = 2000, ///< Suggested tick handler position for UI components. diff --git a/Code/Framework/AzCore/AzCore/Debug/AssetTracking.h b/Code/Framework/AzCore/AzCore/Debug/AssetTracking.h index 5c3c835271..615634c05a 100644 --- a/Code/Framework/AzCore/AzCore/Debug/AssetTracking.h +++ b/Code/Framework/AzCore/AzCore/Debug/AssetTracking.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include diff --git a/Code/Framework/AzCore/AzCore/Debug/Budget.cpp b/Code/Framework/AzCore/AzCore/Debug/Budget.cpp index f9fe7e462a..4a6f3ed114 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Budget.cpp +++ b/Code/Framework/AzCore/AzCore/Debug/Budget.cpp @@ -11,6 +11,7 @@ #include #include #include +#include AZ_DEFINE_BUDGET(Animation); AZ_DEFINE_BUDGET(Audio); @@ -30,8 +31,7 @@ namespace AZ::Debug }; Budget::Budget(const char* name) - : m_name{ name } - , m_crc{ Crc32(name) } + : Budget( name, Crc32(name) ) { } @@ -40,6 +40,10 @@ namespace AZ::Debug , m_crc{ crc } { m_impl = aznew BudgetImpl; + if (auto statsProfiler = Interface::Get(); statsProfiler) + { + statsProfiler->RegisterProfilerId(m_crc); + } } Budget::~Budget() diff --git a/Code/Framework/AzCore/AzCore/Debug/Profiler.h b/Code/Framework/AzCore/AzCore/Debug/Profiler.h index 56103e8314..6e86de2e93 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Profiler.h +++ b/Code/Framework/AzCore/AzCore/Debug/Profiler.h @@ -8,6 +8,7 @@ #pragma once #include +#include #ifdef USE_PIX #include @@ -44,7 +45,10 @@ #define AZ_PROFILE_INTERVAL_START(...) #define AZ_PROFILE_INTERVAL_START_COLORED(...) #define AZ_PROFILE_INTERVAL_END(...) -#define AZ_PROFILE_INTERVAL_SCOPED(...) +#define AZ_PROFILE_INTERVAL_SCOPED(budget, scopeNameId, ...) \ + static constexpr AZ::Crc32 AZ_JOIN(blockId, __LINE__)(scopeNameId); \ + AZ::Statistics::StatisticalProfilerProxy::TimedScope AZ_JOIN(scope, __LINE__)(AZ_CRC_CE(#budget), AZ_JOIN(blockId, __LINE__)); + #endif #ifndef AZ_PROFILE_DATAPOINT diff --git a/Code/Framework/AzCore/AzCore/Debug/Trace.h b/Code/Framework/AzCore/AzCore/Debug/Trace.h index a1334d334e..507ba48e53 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Trace.h +++ b/Code/Framework/AzCore/AzCore/Debug/Trace.h @@ -262,17 +262,17 @@ namespace AZ #else // !AZ_ENABLE_TRACING - #define AZ_Assert(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_Error(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_ErrorOnce(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_Warning(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_WarningOnce(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_TracePrintf(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_TracePrintfOnce(...) AZ_UNUSED(__VA_ARGS__); - - #define AZ_Verify(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_VerifyError(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_VerifyWarning(...) AZ_UNUSED(__VA_ARGS__); + #define AZ_Assert(...) + #define AZ_Error(...) + #define AZ_ErrorOnce(...) + #define AZ_Warning(...) + #define AZ_WarningOnce(...) + #define AZ_TracePrintf(...) + #define AZ_TracePrintfOnce(...) + + #define AZ_Verify(expression, ...) AZ_UNUSED(expression) + #define AZ_VerifyError(window, expression, ...) AZ_UNUSED(expression) + #define AZ_VerifyWarning(window, expression, ...) AZ_UNUSED(expression) #endif // AZ_ENABLE_TRACING diff --git a/Code/Framework/AzCore/AzCore/EBus/EBus.h b/Code/Framework/AzCore/AzCore/EBus/EBus.h index 58754ff9b8..da8c880963 100644 --- a/Code/Framework/AzCore/AzCore/EBus/EBus.h +++ b/Code/Framework/AzCore/AzCore/EBus/EBus.h @@ -12,21 +12,18 @@ * that Open 3D Engine uses to dispatch notifications and receive requests. * EBuses are configurable and support many different use cases. * For more information about %EBuses, see AZ::EBus in this guide and - * [Event Bus](http://docs.aws.amazon.com/lumberyard/latest/developerguide/asset-pipeline-ebus.html) + * [Event Bus](https://o3de.org/docs/user-guide/engine/ebus/) * in the *Open 3D Engine Developer Guide*. */ #pragma once #include +#include #include #include - // Included for backwards compatibility purposes -#include -#include #include -// End backwards compat #include #include @@ -65,7 +62,7 @@ namespace AZ * @endcode * * For more information about %EBuses, see EBus in this guide and - * [Event Bus](http://docs.aws.amazon.com/lumberyard/latest/developerguide/asset-pipeline-ebus.html) + * [Event Bus](https://o3de.org/docs/user-guide/engine/ebus/) * in the *Open 3D Engine Developer Guide*. */ struct EBusTraits @@ -90,14 +87,14 @@ namespace AZ * For available settings, see AZ::EBusHandlerPolicy. * By default, an EBus supports any number of handlers. */ - static const EBusHandlerPolicy HandlerPolicy = EBusHandlerPolicy::Multiple; + static constexpr EBusHandlerPolicy HandlerPolicy = EBusHandlerPolicy::Multiple; /** * Defines how many addresses exist on the EBus. * For available settings, see AZ::EBusAddressPolicy. * By default, an EBus uses a single address. */ - static const EBusAddressPolicy AddressPolicy = EBusAddressPolicy::Single; + static constexpr EBusAddressPolicy AddressPolicy = EBusAddressPolicy::Single; /** * The type of ID that is used to address the EBus. @@ -152,14 +149,14 @@ namespace AZ * `::ExecuteQueuedEvents()`. * By default, the event queue is disabled. */ - static const bool EnableEventQueue = false; + static constexpr bool EnableEventQueue = false; /** * Specifies whether the bus should accept queued messages by default or not. * If set to false, Bus::AllowFunctionQueuing(true) must be called before events are accepted. * Used only when #EnableEventQueue is true. */ - static const bool EventQueueingActiveByDefault = true; + static constexpr bool EventQueueingActiveByDefault = true; /** * Specifies whether the EBus supports queueing functions which take reference @@ -168,7 +165,7 @@ namespace AZ * You should only use this if you know that the data being passed as arguments will * outlive the dispatch of the queued event. */ - static const bool EnableQueuedReferences = false; + static constexpr bool EnableQueuedReferences = false; /** * Locking primitive that is used when adding and removing @@ -197,7 +194,7 @@ namespace AZ * to do. * By default, the standard policy is used, which locks around all dispatches */ - static const bool LocklessDispatch = false; + static constexpr bool LocklessDispatch = false; /** * Specifies where EBus data is stored. @@ -262,8 +259,8 @@ namespace AZ * * EBuses are configurable and support many different use cases. * For more information about EBuses, see - * [Event Bus](http://docs.aws.amazon.com/lumberyard/latest/developerguide/asset-pipeline-ebus.html) - * and [Components and EBuses: Best Practices ](http://docs.aws.amazon.com/lumberyard/latest/developerguide/component-entity-system-pg-components-ebuses-best-practices.html) + * [Event Bus](https://o3de.org/docs/user-guide/engine/ebus/) + * and [Components and EBuses: Best Practices ](https://o3de.org/docs/user-guide/components/development/entity-system-pg-components-ebuses-best-practices/) * in the *Open 3D Engine Developer Guide*. * * ## How Components Use EBuses diff --git a/Code/Framework/AzCore/AzCore/EBus/IEventScheduler.h b/Code/Framework/AzCore/AzCore/EBus/IEventScheduler.h index 5c1bbf6dab..021e8edfab 100644 --- a/Code/Framework/AzCore/AzCore/EBus/IEventScheduler.h +++ b/Code/Framework/AzCore/AzCore/EBus/IEventScheduler.h @@ -13,6 +13,7 @@ #include #include #include +#include namespace AZ { diff --git a/Code/Framework/AzCore/AzCore/EBus/Policies.h b/Code/Framework/AzCore/AzCore/EBus/Policies.h index db11043ef8..86cbe5d02f 100644 --- a/Code/Framework/AzCore/AzCore/EBus/Policies.h +++ b/Code/Framework/AzCore/AzCore/EBus/Policies.h @@ -18,9 +18,8 @@ #include #include #include +#include -#include -#include namespace AZ { @@ -251,29 +250,21 @@ namespace AZ void Execute() { AZ_Warning("System", m_isActive, "You are calling execute queued functions on a bus which has not activated its function queuing! Call YourBus::AllowFunctionQueuing(true)!"); - while (true) + + MessageQueueType localMessages; + + // Swap the current list of queue functions with a local instance + { + AZStd::scoped_lock lock(m_messagesMutex); + AZStd::swap(localMessages, m_messages); + } + + // Execute the queue functions safely now that are owned by the function + while (!localMessages.empty()) { - BusMessageCall invoke; - - ////////////////////////////////////////////////////////////////////////// - // Pop element from the queue. - { - AZStd::lock_guard lock(m_messagesMutex); - size_t numMessages = m_messages.size(); - if (numMessages == 0) - { - break; - } - AZStd::swap(invoke, m_messages.front()); - m_messages.pop(); - if (numMessages == 1) - { - m_messages = {}; - } - } - ////////////////////////////////////////////////////////////////////////// - - invoke(); + const BusMessageCall& localMessage = localMessages.front(); + localMessage(); + localMessages.pop(); } } diff --git a/Code/Framework/AzCore/AzCore/IO/FileIO.h b/Code/Framework/AzCore/AzCore/IO/FileIO.h index 6406025417..25dd422a47 100644 --- a/Code/Framework/AzCore/AzCore/IO/FileIO.h +++ b/Code/Framework/AzCore/AzCore/IO/FileIO.h @@ -148,7 +148,7 @@ namespace AZ virtual AZ::u64 ModificationTime(HandleType fileHandle) = 0; virtual AZ::u64 ModificationTime(const char* filePath) = 0; - /// Get the size of the file. Returns Success if we report size. + /// Get the size of the file. Returns Success if we report size. virtual Result Size(const char* filePath, AZ::u64& size) = 0; virtual Result Size(HandleType fileHandle, AZ::u64& size) = 0; @@ -198,7 +198,7 @@ namespace AZ /// note: the callback will contain the full concatenated path (filePath + slash + fileName) /// not just the individual file name found. /// note: if the file path of the found file corresponds to a registered ALIAS, the longest matching alias will be returned - /// so expect return values like @assets@/textures/mytexture.dds instead of a full path. This is so that fileIO works over remote connections. + /// so expect return values like @products@/textures/mytexture.dds instead of a full path. This is so that fileIO works over remote connections. /// note: if rootPath is specified the implementation has the option of substituting it for the current directory /// as would be the case on a file server. typedef AZStd::function FindFilesCallbackType; @@ -206,13 +206,18 @@ namespace AZ // Alias system - /// SetAlias - Adds an alias to the path resolution system, e.g. @user@, @root@, etc. + /// SetAlias - Adds an alias to the path resolution system, e.g. @user@, @products@, etc. virtual void SetAlias(const char* alias, const char* path) = 0; /// ClearAlias - Removes an alias from the path resolution system virtual void ClearAlias(const char* alias) = 0; /// GetAlias - Returns the destination path for a given alias, or nullptr if the alias does not exist virtual const char* GetAlias(const char* alias) const = 0; + /// SetDeprecateAlias - Adds a deprecated alias with path resolution which points to a new alias + /// When the DeprecatedAlias is used an Error is logged and the alias is resolved to the path + /// specified by the new alais + virtual void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) = 0; + /// Shorten the given path if it contains an alias. it will always pick the longest alias match. /// note that it re-uses the buffer, since the data can only get smaller and we don't want to internally allocate memory if we /// can avoid it. @@ -230,8 +235,8 @@ namespace AZ //! ResolvePath - Replaces any aliases in path with their values and stores the result in resolvedPath, //! also ensures that the path is absolute - //! NOTE: If the path does not start with an alias then the resolved value of the @assets@ is used - //! which has the effect of making the path relative to the @assets@/ folder + //! NOTE: If the path does not start with an alias then the resolved value of the @products@ is used + //! which has the effect of making the path relative to the @products@/ folder //! returns true if path was resolved, false otherwise //! note that all of the above file-finding and opening functions automatically resolve the path before operating //! so you should not need to call this except in very exceptional circumstances where you absolutely need to diff --git a/Code/Framework/AzCore/AzCore/IO/IStreamer.h b/Code/Framework/AzCore/AzCore/IO/IStreamer.h index d959fa716c..438384e687 100644 --- a/Code/Framework/AzCore/AzCore/IO/IStreamer.h +++ b/Code/Framework/AzCore/AzCore/IO/IStreamer.h @@ -42,8 +42,8 @@ namespace AZ::IO // These functions can't be called after a request has been queued. // - //! Creates a request to read a file. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! Creates a request to read a file. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param outputBuffer The buffer that will hold the loaded data. This must be able to at least hold "size" number of bytes. //! @param outputBufferSize The size of the buffer that will hold the loaded data. This must be equal or larger than "size" number of bytes. //! @param readSize The number of bytes to read from the file at the relative path. @@ -62,9 +62,9 @@ namespace AZ::IO IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium, size_t offset = 0) = 0; - //! Sets a request to the read command. + //! Sets a request to the read command. //! @param request The request that will store the read command. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param outputBuffer The buffer that will hold the loaded data. This must be able to at least hold "size" number of bytes. //! @param outputBufferSize The size of the buffer that will hold the loaded data. This must be equal or larger than "size" number of bytes. //! @param readSize The number of bytes to read from the file at the relative path. @@ -84,8 +84,8 @@ namespace AZ::IO IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium, size_t offset = 0) = 0; - //! Creates a request to the read command. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! Creates a request to the read command. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param allocator The allocator used to reserve and release memory for the read request. Memory allocated this way will //! be automatically freed when there are no more references to the FileRequestPtr. To avoid this, use GetReadRequestResult //! to claim the pointer and use the provided allocator to release the memory at a later point. @@ -106,9 +106,9 @@ namespace AZ::IO IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium, size_t offset = 0) = 0; - //! Sets a request to the read command. + //! Sets a request to the read command. //! @param request The request that will store the read command. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param allocator The allocator used to reserve and release memory for the read request. Memory allocated this way will //! be automatically freed when there are no more references to the FileRequestPtr. To avoid this, use GetReadRequestResult //! to claim the pointer and use the provided allocator to release the memory at a later point. @@ -138,7 +138,7 @@ namespace AZ::IO //! @result A smart pointer to the newly created request with the cancel command. virtual FileRequestPtr Cancel(FileRequestPtr target) = 0; - //! Sets a request to the cancel command. + //! Sets a request to the cancel command. //! When this request completes it's not guaranteed to have canceled the target request. Not all requests can be canceled and requests //! that already processing may complete. It's recommended to let the target request handle the completion of the request as normal //! and handle cancellation by checking the status on the target request is set to IStreamerTypes::RequestStatus::Canceled. @@ -177,7 +177,7 @@ namespace AZ::IO //! DestroyDedicatedCache is called. Typical use of a dedicated cache is for files that have their own compression //! and are periodically visited to read a section, e.g. streaming video play or streaming audio banks. This //! request will fail if there are no nodes in Streamer's stack that deal with dedicated caches. - //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @products@. //! @return A smart pointer to the newly created request with the command to create a dedicated cache. virtual FileRequestPtr CreateDedicatedCache(AZStd::string_view relativePath) = 0; @@ -186,25 +186,25 @@ namespace AZ::IO //! and are periodically visited to read a section, e.g. streaming video play or streaming audio banks. This //! request will fail if there are no nodes in Streamer's stack that deal with dedicated caches. //! @param request The request that will store the command to create a dedicated cache. - //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @products@. //! @return A reference to the provided request. virtual FileRequestPtr& CreateDedicatedCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0; //! Destroy a dedicated cache created by CreateDedicatedCache. See CreateDedicatedCache for more details. - //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @products@. //! @return A smart pointer to the newly created request with the command to destroy a dedicated cache. virtual FileRequestPtr DestroyDedicatedCache(AZStd::string_view relativePath) = 0; //! Destroy a dedicated cache created by CreateDedicatedCache. See CreateDedicatedCache for more details. //! @param request The request that will store the command to destroy a dedicated cache. - //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @products@. //! @return A reference to the provided request. virtual FileRequestPtr& DestroyDedicatedCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0; //! Clears a file from all caches in use by Streamer. //! Flushing the cache will cause the streaming stack to pause processing until it's idle before issuing the flush and resuming //! processing. This can result in a noticeable interruption. - //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @products@. //! @return A smart pointer to the newly created request with the command to flush a file from all caches. virtual FileRequestPtr FlushCache(AZStd::string_view relativePath) = 0; @@ -212,7 +212,7 @@ namespace AZ::IO //! Flushing the cache will cause the streaming stack to pause processing until it's idle before issuing the flush and resuming //! processing. This can result in a noticeable interruption. //! @param request The request that will store the command to flush a file from all caches. - //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @products@. //! @return A reference to the provided request. virtual FileRequestPtr& FlushCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0; @@ -334,7 +334,7 @@ namespace AZ::IO // //! Collect statistics from all the components that make up Streamer. - //! This is thread safe in the sense that it won't crash. + //! This is thread safe in the sense that it won't crash. //! Data is collected lockless from involved threads and might be slightly //! out of date in some cases. //! @param statistics The container where statistics will be added to. diff --git a/Code/Framework/AzCore/AzCore/IO/Path/Path.h b/Code/Framework/AzCore/AzCore/IO/Path/Path.h index 24f26daa51..3b5c224957 100644 --- a/Code/Framework/AzCore/AzCore/IO/Path/Path.h +++ b/Code/Framework/AzCore/AzCore/IO/Path/Path.h @@ -98,6 +98,11 @@ namespace AZ::IO //! made from the internal string constexpr AZStd::fixed_string FixedMaxPathString() const noexcept; + // as_posix + //! Replicates the behavior of the Python pathlib as_posix method + //! by replacing the Windows Path Separator with the Posix Path Seperator + constexpr AZStd::fixed_string FixedMaxPathStringAsPosix() const noexcept; + // decomposition //! Given a windows path of "C:\O3DE\foo\bar\name.txt" and a posix path of //! "/O3DE/foo/bar/name.txt" @@ -178,7 +183,7 @@ namespace AZ::IO //! Normalizes a path in a purely lexical manner. //! # Path separators are converted to their preferred path separator //! # Path parts of "." are collapsed to nothing empty - //! # Paths parts of ".." are removed if there is a preceding directory + //! # Paths parts of ".." are removed if there is a preceding directory //! The preceding directory is also removed //! # Runs of Two or more path separators are collapsed into one path separator //! unless the path begins with two path separators @@ -238,7 +243,7 @@ namespace AZ::IO // iterators //! Returns an iterator to the beginning of the path that can be used to traverse the path - //! according to the following + //! according to the following //! 1. Root name - (0 or 1) //! 2. Root directory - (0 or 1) //! 3. Filename - (0 or more) @@ -253,24 +258,23 @@ namespace AZ::IO template friend class BasicPath; friend struct AZStd::hash; + struct PathIterable; - template - static constexpr void MakeRelativeTo(PathResultType& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base); + static constexpr void MakeRelativeTo(PathIterable& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base) noexcept; - struct PathIterable; //! Returns a structure that provides a view of the path parts which can be used for iteration //! Only the path parts that correspond to creating an normalized path is returned //! This function is useful for returning a "view" into a normalized path without the need //! to allocate memory for the heap static constexpr PathIterable GetNormalPathParts(const AZ::IO::PathView& path) noexcept; - // joins the input path to the Path Iterable structure using similiar logic to Path::Append - // If the input path is absolute it will replace the current PathIterable otherwise - // the input path will be appended to the Path Iterable structure - // For example a PathIterable with parts = ['C:', '/', 'foo'] - // If the path input = 'bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar'] - // If the path input = 'C:/bar', then the new PathIterable parts = [C:', '/', 'bar'] - // If the path input = 'C:bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar' ] - // If the path input = 'D:bar', then the new PathIterable parts = [D:, 'bar' ] + //! joins the input path to the Path Iterable structure using similiar logic to Path::Append + //! If the input path is absolute it will replace the current PathIterable otherwise + //! the input path will be appended to the Path Iterable structure + //! For example a PathIterable with parts = ['C:', '/', 'foo'] + //! If the path input = 'bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar'] + //! If the path input = 'C:/bar', then the new PathIterable parts = [C:', '/', 'bar'] + //! If the path input = 'C:bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar' ] + //! If the path input = 'D:bar', then the new PathIterable parts = [D:, 'bar' ] static constexpr void AppendNormalPathParts(PathIterable& pathIterableResult, const AZ::IO::PathView& path) noexcept; constexpr int ComparePathView(const PathView& other) const; @@ -325,32 +329,32 @@ namespace AZ::IO constexpr BasicPath(BasicPath&& other) = default; // Conversion constructor for other types of BasicPath instantiations - constexpr BasicPath(const PathView& other); + constexpr BasicPath(const PathView& other) noexcept; // String constructors //! Constructs a Path by copying the pathString to its internal string //! The preferred separator is to the OS default path separator constexpr BasicPath(const string_type& pathString) noexcept; //! Constructs a Path by copying the pathString to its internal string - //! The preferred separator it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(const string_type& pathString, const char preferredSeparator) noexcept; //! Constructs a Path by moving the pathString to its internal string //! The preferred separator is to the OS default path separator constexpr BasicPath(string_type&& pathString) noexcept; //! Constructs a Path by copying the pathString to its internal string - //! The preferred separator it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(string_type&& pathString, const char preferredSeparator) noexcept; //! Constructs a Path by constructing it's internal out of a string_view //! The preferred separator is to the OS default path separator constexpr BasicPath(AZStd::string_view src) noexcept; //! Constructs a Path by constructing it's internal out of a string_view - //! The preferred separators it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(AZStd::string_view src, const char preferredSeparator) noexcept; //! Constructs a Path by constructing it's internal out of a value_type* //! The preferred separator is to the OS default path separator constexpr BasicPath(const value_type* pathString) noexcept; //! Constructs a Path by constructing it's internal out of a value_type* - //! The preferred separator it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(const value_type* pathString, const char preferredSeparator) noexcept; //! Constructs a empty Path with the preferred separator set to the parameter explicit constexpr BasicPath(const char preferredSeparator) noexcept; @@ -371,7 +375,7 @@ namespace AZ::IO constexpr BasicPath& operator=(BasicPath&& other) = default; // conversion assignment operator - constexpr BasicPath& operator=(const PathView& pathView); + constexpr BasicPath& operator=(const PathView& pathView) noexcept; constexpr BasicPath& operator=(const string_type& str) noexcept; constexpr BasicPath& operator=(string_type&& str) noexcept; constexpr BasicPath& operator=(AZStd::string_view str) noexcept; @@ -477,6 +481,12 @@ namespace AZ::IO //! made from the internal string constexpr AZStd::fixed_string FixedMaxPathString() const; + // as_posix + //! Replicates the behavior of the Python pathlib as_posix method + //! by replacing the Windows Path Separator with the Posix Path Seperator + AZStd::string StringAsPosix() const; + constexpr AZStd::fixed_string FixedMaxPathStringAsPosix() const noexcept; + // compare //! Performs a compare of each of the path parts for equivalence //! Each part of the path is compare using string comparison @@ -574,7 +584,7 @@ namespace AZ::IO //! Normalizes a path in a purely lexical manner. //! # Path separators are converted to their preferred path separator //! # Path parts of "." are collapsed to nothing empty - //! # Paths parts of ".." are removed if there is a preceding directory + //! # Paths parts of ".." are removed if there is a preceding directory //! The preceding directory is also removed //! # Runs of Two or more path separators are collapsed into one path separator //! unless the path begins with two path separators @@ -616,7 +626,7 @@ namespace AZ::IO // iterators //! Returns an iterator to the beginning of the path that can be used to traverse the path - //! according to the following + //! according to the following //! 1. Root name - (0 or 1) //! 2. Root directory - (0 or 1) //! 3. Filename - (0 or more) diff --git a/Code/Framework/AzCore/AzCore/IO/Path/Path.inl b/Code/Framework/AzCore/AzCore/IO/Path/Path.inl index 0147ad3356..1d654c1502 100644 --- a/Code/Framework/AzCore/AzCore/IO/Path/Path.inl +++ b/Code/Framework/AzCore/AzCore/IO/Path/Path.inl @@ -240,6 +240,14 @@ namespace AZ::IO return AZStd::fixed_string(m_path.begin(), m_path.end()); } + // as_posix + constexpr AZStd::fixed_string PathView::FixedMaxPathStringAsPosix() const noexcept + { + AZStd::fixed_string resultPath(m_path.begin(), m_path.end()); + AZStd::replace(resultPath.begin(), resultPath.end(), AZ::IO::WindowsPathSeparator, AZ::IO::PosixPathSeparator); + return resultPath; + } + // decomposition constexpr auto PathView::RootName() const -> PathView { @@ -473,8 +481,7 @@ namespace AZ::IO return lhs.Compare(rhs) >= 0; } - template - constexpr void PathView::MakeRelativeTo(PathResultType& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base) + constexpr void PathView::MakeRelativeTo(PathIterable& pathIterable, const AZ::IO::PathView& path, const AZ::IO::PathView& base) noexcept { const bool exactCaseCompare = path.m_preferred_separator == PosixPathSeparator || base.m_preferred_separator == PosixPathSeparator; @@ -492,13 +499,11 @@ namespace AZ::IO if (int res = Internal::ComparePathSegment(*pathParser, *pathParserBase, exactCaseCompare); res != 0) { - pathResult.m_path = AZStd::string_view{}; return; } } else if (CheckIterMismatchAtBase()) { - pathResult.m_path = AZStd::string_view{}; return; } @@ -512,7 +517,6 @@ namespace AZ::IO } if (CheckIterMismatchAtBase()) { - pathResult.m_path = AZStd::string_view{}; return; } } @@ -530,7 +534,7 @@ namespace AZ::IO // If there is no mismatch, return ".". if (!pathParser && !pathParserBase) { - pathResult.m_path = AZStd::string_view{ "." }; + pathIterable.emplace_back(".", parser::PathPartKind::PK_Dot); return; } @@ -539,27 +543,25 @@ namespace AZ::IO int elemCount = parser::DetermineLexicalElementCount(pathParserBase); if (elemCount < 0) { - pathResult.m_path = AZStd::string_view{}; return; } // if elemCount == 0 and (pathParser == end() || pathParser->empty()), returns path("."); otherwise if (elemCount == 0 && (pathParser.AtEnd() || *pathParser == "")) { - pathResult.m_path = AZStd::string_view{ "." }; + pathIterable.emplace_back(".", parser::PathPartKind::PK_Dot); return; } // return a path constructed with 'n' dot-dot elements, followed by the // elements of '*this' after the mismatch. - pathResult = PathResultType(path.m_preferred_separator); while (elemCount--) { - pathResult /= ".."; + pathIterable.emplace_back("..", parser::PathPartKind::PK_DotDot); } for (; pathParser; ++pathParser) { - pathResult /= *pathParser; + pathIterable.emplace_back(*pathParser, parser::ClassifyPathPart(pathParser)); } } @@ -673,7 +675,7 @@ namespace AZ::IO // Basic Path implementation template - constexpr BasicPath::BasicPath(const PathView& other) + constexpr BasicPath::BasicPath(const PathView& other) noexcept : m_path(other.m_path) , m_preferred_separator(other.m_preferred_separator) {} @@ -726,6 +728,7 @@ namespace AZ::IO : m_path(first, last) , m_preferred_separator(preferredSeparator) {} + template constexpr BasicPath::operator PathView() const noexcept { @@ -733,7 +736,7 @@ namespace AZ::IO } template - constexpr auto BasicPath::operator=(const PathView& other) -> BasicPath& + constexpr auto BasicPath::operator=(const PathView& other) noexcept -> BasicPath& { m_path = other.m_path; m_preferred_separator = other.m_preferred_separator; @@ -974,13 +977,13 @@ namespace AZ::IO template constexpr auto BasicPath::MakePreferred() -> BasicPath& { - if (m_preferred_separator != '/') + if (m_preferred_separator != PosixPathSeparator) { - AZStd::replace(m_path.begin(), m_path.end(), '/', m_preferred_separator); + AZStd::replace(m_path.begin(), m_path.end(), PosixPathSeparator, m_preferred_separator); } else { - AZStd::replace(m_path.begin(), m_path.end(), '\\', m_preferred_separator); + AZStd::replace(m_path.begin(), m_path.end(), WindowsPathSeparator, m_preferred_separator); } return *this; } @@ -1033,6 +1036,24 @@ namespace AZ::IO return AZStd::fixed_string(m_path.begin(), m_path.end()); } + // as_posix + // Returns a copy of the path with the path separators converted to PosixPathSeparator + template + AZStd::string BasicPath::StringAsPosix() const + { + AZStd::string resultPath(m_path.begin(), m_path.end()); + AZStd::replace(resultPath.begin(), resultPath.end(), WindowsPathSeparator, PosixPathSeparator); + return resultPath; + } + + template + constexpr AZStd::fixed_string BasicPath::FixedMaxPathStringAsPosix() const noexcept + { + AZStd::fixed_string resultPath(m_path.begin(), m_path.end()); + AZStd::replace(resultPath.begin(), resultPath.end(), WindowsPathSeparator, PosixPathSeparator); + return resultPath; + } + template constexpr void BasicPath::swap(BasicPath& rhs) noexcept { @@ -1234,6 +1255,7 @@ namespace AZ::IO { pathResult /= pathPartView; } + return pathResult; } @@ -1241,7 +1263,13 @@ namespace AZ::IO constexpr auto BasicPath::LexicallyRelative(const PathView& base) const -> BasicPath { BasicPath pathResult(m_preferred_separator); - static_cast(*this).MakeRelativeTo(pathResult, *this, base); + PathView::PathIterable pathIterable; + PathView::MakeRelativeTo(pathIterable, *this, base); + for ([[maybe_unused]] auto [pathPartView, pathPartKind] : pathIterable) + { + pathResult /= pathPartView; + } + return pathResult; } @@ -1355,7 +1383,7 @@ namespace AZ::IO return !basePathParts.empty() || !thisPathParts.IsAbsolute(); } - constexpr FixedMaxPath PathView::LexicallyNormal() const + constexpr auto PathView::LexicallyNormal() const -> FixedMaxPath { FixedMaxPath pathResult(m_preferred_separator); PathIterable pathIterable = GetNormalPathParts(*this); @@ -1367,21 +1395,28 @@ namespace AZ::IO return pathResult; } - constexpr FixedMaxPath PathView::LexicallyRelative(const PathView& base) const + constexpr auto PathView::LexicallyRelative(const PathView& base) const -> FixedMaxPath { FixedMaxPath pathResult(m_preferred_separator); - MakeRelativeTo(pathResult, *this, base); + PathIterable pathIterable; + MakeRelativeTo(pathIterable, *this, base); + for ([[maybe_unused]] auto [pathPartView, pathPartKind] : pathIterable) + { + pathResult /= pathPartView; + } + return pathResult; } - constexpr FixedMaxPath PathView::LexicallyProximate(const PathView& base) const + constexpr auto PathView::LexicallyProximate(const PathView& base) const -> FixedMaxPath { - FixedMaxPath result = LexicallyRelative(base); - if (result.empty()) + FixedMaxPath pathResult = LexicallyRelative(base); + if (pathResult.empty()) { return FixedMaxPath(*this); } - return result; + + return pathResult; } } diff --git a/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl b/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl index a1faa29b31..e700ab0196 100644 --- a/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl +++ b/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl @@ -49,8 +49,8 @@ namespace AZ::IO constexpr void clear() noexcept; - friend constexpr auto PathView::GetNormalPathParts(const AZ::IO::PathView&) noexcept -> PathIterable; friend constexpr auto PathView::AppendNormalPathParts(PathIterable& pathIterable, const AZ::IO::PathView&) noexcept -> void; + friend constexpr auto PathView::MakeRelativeTo(PathIterable& pathIterable, const AZ::IO::PathView&, const AZ::IO::PathView&) noexcept -> void; PartKindArray m_parts{}; size_t m_size{}; }; diff --git a/Code/Framework/AzCore/AzCore/IO/Streamer/Scheduler.cpp b/Code/Framework/AzCore/AzCore/IO/Streamer/Scheduler.cpp index 9b4996ad49..9ee0fefc99 100644 --- a/Code/Framework/AzCore/AzCore/IO/Streamer/Scheduler.cpp +++ b/Code/Framework/AzCore/AzCore/IO/Streamer/Scheduler.cpp @@ -43,10 +43,12 @@ namespace AZ::IO m_mainLoopDesc = threadDesc; m_mainLoopDesc.m_name = "IO Scheduler"; - m_mainLoop = AZStd::thread([this]() - { - Thread_MainLoop(); - }, &m_mainLoopDesc); + m_mainLoop = AZStd::thread( + m_mainLoopDesc, + [this]() + { + Thread_MainLoop(); + }); } } diff --git a/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp b/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp index 651abb89fe..ac12a59609 100644 --- a/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp +++ b/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp @@ -35,6 +35,7 @@ namespace Platform SystemFile::SizeType Length(FileHandleType handle, const SystemFile* systemFile); bool Exists(const char* fileName); + bool IsDirectory(const char* filePath); void FindFiles(const char* filter, SystemFile::FindFileCB cb); AZ::u64 ModificationTime(const char* fileName); SystemFile::SizeType Length(const char* fileName); @@ -235,6 +236,11 @@ bool SystemFile::Exists(const char* fileName) return Platform::Exists(fileName); } +bool SystemFile::IsDirectory(const char* filePath) +{ + return Platform::IsDirectory(filePath); +} + void SystemFile::FindFiles(const char* filter, FindFileCB cb) { Platform::FindFiles(filter, cb); diff --git a/Code/Framework/AzCore/AzCore/IO/SystemFile.h b/Code/Framework/AzCore/AzCore/IO/SystemFile.h index 551ce89ce7..39e44f86da 100644 --- a/Code/Framework/AzCore/AzCore/IO/SystemFile.h +++ b/Code/Framework/AzCore/AzCore/IO/SystemFile.h @@ -99,6 +99,8 @@ namespace AZ // Utility functions /// Check if a file or directory exists. static bool Exists(const char* path); + /// Check if path is a directory + static bool IsDirectory(const char* path); /// FindFiles typedef AZStd::function FindFileCB; static void FindFiles(const char* filter, FindFileCB cb); diff --git a/Code/Framework/AzCore/AzCore/Jobs/Internal/JobManagerWorkStealing.cpp b/Code/Framework/AzCore/AzCore/Jobs/Internal/JobManagerWorkStealing.cpp index f76946a667..230bf959f6 100644 --- a/Code/Framework/AzCore/AzCore/Jobs/Internal/JobManagerWorkStealing.cpp +++ b/Code/Framework/AzCore/AzCore/Jobs/Internal/JobManagerWorkStealing.cpp @@ -644,11 +644,11 @@ JobManagerWorkStealing::ThreadList JobManagerWorkStealing::CreateWorkerThreads(c } info->m_thread = AZStd::thread( + threadDesc, [this, info]() { this->ProcessJobsWorker(info); - }, - &threadDesc + } ); info->m_threadId = info->m_thread.get_id(); diff --git a/Code/Framework/AzCore/AzCore/Math/Aabb.h b/Code/Framework/AzCore/AzCore/Math/Aabb.h index 488808bc4c..438d95622e 100644 --- a/Code/Framework/AzCore/AzCore/Math/Aabb.h +++ b/Code/Framework/AzCore/AzCore/Math/Aabb.h @@ -5,7 +5,6 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ - #pragma once #include diff --git a/Code/Framework/AzCore/AzCore/Math/Uuid.cpp b/Code/Framework/AzCore/AzCore/Math/Uuid.cpp index d875e28a1e..410d235a37 100644 --- a/Code/Framework/AzCore/AzCore/Math/Uuid.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Uuid.cpp @@ -135,18 +135,12 @@ namespace AZ { stringLength = strlen(uuidString); } - if (stringLength > MaxPermissiveStringSize) - { - if (!skipWarnings) - { - AZ_Warning("Math", false, "Can't create UUID from string length %zu over maximum %zu", stringLength, MaxPermissiveStringSize); - } - return Uuid::CreateNull(); - } + size_t newLength{ 0 }; char createString[MaxPermissiveStringSize]; - for (size_t curPos = 0; curPos < stringLength; ++curPos) + // Loop until we get to the end of the string OR stop once we've accumulated a full UUID string worth of data + for (size_t curPos = 0; curPos < stringLength && newLength < ValidUuidStringLength; ++curPos) { char curChar = uuidString[curPos]; switch (curChar) diff --git a/Code/Framework/AzCore/AzCore/Math/Uuid.h b/Code/Framework/AzCore/AzCore/Math/Uuid.h index ea920e45c8..6b77e7ec3e 100644 --- a/Code/Framework/AzCore/AzCore/Math/Uuid.h +++ b/Code/Framework/AzCore/AzCore/Math/Uuid.h @@ -42,8 +42,9 @@ namespace AZ //VER_AZ_RANDOM_CRC32 = 6, // 0 1 1 0 }; + static constexpr int ValidUuidStringLength = 32; /// Number of characters (data only, no extra formatting) in a valid UUID string static const size_t MaxStringBuffer = 39; /// 32 Uuid + 4 dashes + 2 brackets + 1 terminate - + Uuid() {} Uuid(const char* string, size_t stringLength = 0) { *this = CreateString(string, stringLength); } diff --git a/Code/Framework/AzCore/AzCore/Math/Vector2.h b/Code/Framework/AzCore/AzCore/Math/Vector2.h index b2b1ceeb4d..7c37d74135 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector2.h +++ b/Code/Framework/AzCore/AzCore/Math/Vector2.h @@ -180,6 +180,13 @@ namespace AZ bool IsGreaterEqualThan(const Vector2& v) const; //! @} + //! Floor/Ceil/Round functions, operate on each component individually, result will be a new Vector2. + //! @{ + Vector2 GetFloor() const; + Vector2 GetCeil() const; + Vector2 GetRound() const; // Ties to even (banker's rounding) + //! @} + //! Min/Max functions, operate on each component individually, result will be a new Vector2. //! @{ Vector2 GetMin(const Vector2& v) const; diff --git a/Code/Framework/AzCore/AzCore/Math/Vector2.inl b/Code/Framework/AzCore/AzCore/Math/Vector2.inl index 80b2a43475..086be2bbc3 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector2.inl +++ b/Code/Framework/AzCore/AzCore/Math/Vector2.inl @@ -398,6 +398,24 @@ namespace AZ } + AZ_MATH_INLINE Vector2 Vector2::GetFloor() const + { + return Vector2(Simd::Vec2::Floor(m_value)); + } + + + AZ_MATH_INLINE Vector2 Vector2::GetCeil() const + { + return Vector2(Simd::Vec2::Ceil(m_value)); + } + + + AZ_MATH_INLINE Vector2 Vector2::GetRound() const + { + return Vector2(Simd::Vec2::Round(m_value)); + } + + AZ_MATH_INLINE Vector2 Vector2::GetMin(const Vector2& v) const { #if AZ_TRAIT_USE_PLATFORM_SIMD_SCALAR diff --git a/Code/Framework/AzCore/AzCore/Math/Vector3.h b/Code/Framework/AzCore/AzCore/Math/Vector3.h index 4bf0a18894..821dc8292c 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector3.h +++ b/Code/Framework/AzCore/AzCore/Math/Vector3.h @@ -211,6 +211,13 @@ namespace AZ bool IsGreaterEqualThan(const Vector3& rhs) const; //! @} + //! Floor/Ceil/Round functions, operate on each component individually, result will be a new Vector3. + //! @{ + Vector3 GetFloor() const; + Vector3 GetCeil() const; + Vector3 GetRound() const; // Ties to even (banker's rounding) + //! @} + //! Min/Max functions, operate on each component individually, result will be a new Vector3. //! @{ Vector3 GetMin(const Vector3& v) const; diff --git a/Code/Framework/AzCore/AzCore/Math/Vector3.inl b/Code/Framework/AzCore/AzCore/Math/Vector3.inl index 56baac5aa1..879ade38cf 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector3.inl +++ b/Code/Framework/AzCore/AzCore/Math/Vector3.inl @@ -481,6 +481,24 @@ namespace AZ } + AZ_MATH_INLINE Vector3 Vector3::GetFloor() const + { + return Vector3(Simd::Vec3::Floor(m_value)); + } + + + AZ_MATH_INLINE Vector3 Vector3::GetCeil() const + { + return Vector3(Simd::Vec3::Ceil(m_value)); + } + + + AZ_MATH_INLINE Vector3 Vector3::GetRound() const + { + return Vector3(Simd::Vec3::Round(m_value)); + } + + AZ_MATH_INLINE Vector3 Vector3::GetMin(const Vector3& v) const { #if AZ_TRAIT_USE_PLATFORM_SIMD_SCALAR diff --git a/Code/Framework/AzCore/AzCore/Math/Vector4.h b/Code/Framework/AzCore/AzCore/Math/Vector4.h index 6bd67e8831..eaa18bbaff 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector4.h +++ b/Code/Framework/AzCore/AzCore/Math/Vector4.h @@ -189,6 +189,13 @@ namespace AZ bool IsGreaterEqualThan(const Vector4& rhs) const; //! @} + //! Floor/Ceil/Round functions, operate on each component individually, result will be a new Vector4. + //! @{ + Vector4 GetFloor() const; + Vector4 GetCeil() const; + Vector4 GetRound() const; // Ties to even (banker's rounding) + //! @} + //! Min/Max functions, operate on each component individually, result will be a new Vector4. //! @{ Vector4 GetMin(const Vector4& v) const; diff --git a/Code/Framework/AzCore/AzCore/Math/Vector4.inl b/Code/Framework/AzCore/AzCore/Math/Vector4.inl index 4b4cf2f84f..001dfb6a4d 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector4.inl +++ b/Code/Framework/AzCore/AzCore/Math/Vector4.inl @@ -464,6 +464,24 @@ namespace AZ } + AZ_MATH_INLINE Vector4 Vector4::GetFloor() const + { + return Vector4(Simd::Vec4::Floor(m_value)); + } + + + AZ_MATH_INLINE Vector4 Vector4::GetCeil() const + { + return Vector4(Simd::Vec4::Ceil(m_value)); + } + + + AZ_MATH_INLINE Vector4 Vector4::GetRound() const + { + return Vector4(Simd::Vec4::Round(m_value)); + } + + AZ_MATH_INLINE Vector4 Vector4::GetMin(const Vector4& v) const { #if AZ_TRAIT_USE_PLATFORM_SIMD_SCALAR diff --git a/Code/Framework/AzCore/AzCore/Name/NameSerializer.cpp b/Code/Framework/AzCore/AzCore/Name/NameSerializer.cpp index bf3cad7178..581e11ff04 100644 --- a/Code/Framework/AzCore/AzCore/Name/NameSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Name/NameSerializer.cpp @@ -7,6 +7,7 @@ */ #include +#include namespace AZ { diff --git a/Code/Framework/AzCore/AzCore/RTTI/BehaviorContext.h b/Code/Framework/AzCore/AzCore/RTTI/BehaviorContext.h index 0a1af21213..7f48f301aa 100644 --- a/Code/Framework/AzCore/AzCore/RTTI/BehaviorContext.h +++ b/Code/Framework/AzCore/AzCore/RTTI/BehaviorContext.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Script/ScriptProperty.cpp b/Code/Framework/AzCore/AzCore/Script/ScriptProperty.cpp index dbccda4de2..578bbcf271 100644 --- a/Code/Framework/AzCore/AzCore/Script/ScriptProperty.cpp +++ b/Code/Framework/AzCore/AzCore/Script/ScriptProperty.cpp @@ -5,11 +5,13 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ +#include #include #include #include #include #include +#include namespace AZ { diff --git a/Code/Framework/AzCore/AzCore/Script/ScriptProperty.h b/Code/Framework/AzCore/AzCore/Script/ScriptProperty.h index f38931127d..6b7275dfeb 100644 --- a/Code/Framework/AzCore/AzCore/Script/ScriptProperty.h +++ b/Code/Framework/AzCore/AzCore/Script/ScriptProperty.h @@ -5,8 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#ifndef AZCORE_SCRIPT_SCRIPTPROPERTY_H -#define AZCORE_SCRIPT_SCRIPTPROPERTY_H +#pragma once #include #include @@ -490,5 +489,4 @@ namespace AZ }; } -#endif diff --git a/Code/Framework/AzCore/AzCore/Serialization/DataPatch.cpp b/Code/Framework/AzCore/AzCore/Serialization/DataPatch.cpp index 01a98667fa..6f1635148c 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/DataPatch.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/DataPatch.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp b/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp index 324df7c141..a741294544 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp @@ -9,6 +9,7 @@ #include "AzCore/RTTI/TypeInfo.h" #include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Serialization/Json/JsonSerializer.cpp b/Code/Framework/AzCore/AzCore/Serialization/Json/JsonSerializer.cpp index f06fb36be8..8b6c1d154c 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/Json/JsonSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/Json/JsonSerializer.cpp @@ -6,7 +6,9 @@ * */ +#include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Serialization/Json/MapSerializer.cpp b/Code/Framework/AzCore/AzCore/Serialization/Json/MapSerializer.cpp index 7978b8104b..196ce28216 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/Json/MapSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/Json/MapSerializer.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.cpp b/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.cpp index 6251a2e6de..746c80f3ea 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.h b/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.h index 5d920045f8..9f9b3fc9f0 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.h +++ b/Code/Framework/AzCore/AzCore/Serialization/ObjectStream.h @@ -37,7 +37,8 @@ namespace AZ class GenericStream; } - namespace ObjectStreamInternal { + namespace ObjectStreamInternal + { class ObjectStreamImpl; } diff --git a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp index b74039c876..81546f4f28 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp @@ -7,6 +7,8 @@ */ #include + +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h index 3d7f3c00f8..a37780029e 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h +++ b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h @@ -5,8 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#ifndef AZCORE_SERIALIZE_CONTEXT_H -#define AZCORE_SERIALIZE_CONTEXT_H +#pragma once #include @@ -43,6 +42,12 @@ namespace AZ { + namespace Data + { + template + class Asset; + } + class EditContext; class ObjectStream; @@ -2562,11 +2567,13 @@ namespace AZ #include #include -/// include asset generics -#include +// Forward declare asset serialization helper specialization +namespace AZ +{ + template + struct SerializeGenericTypeInfo< Data::Asset >; +} /// include implementation of SerializeContext::EnumBuilder #include -#endif // AZCORE_SERIALIZE_CONTEXT_H -#pragma once diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp index da7110e36e..36f66312d8 100644 --- a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp +++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp @@ -276,7 +276,9 @@ namespace AZ::SettingsRegistryMergeUtils return engineRoot; } - return {}; + // Fall back to using the project root as the engine root if the engine path could not be reconciled + // by checking the project.json "engine" string within o3de_manifest.json "engine_paths" object + return projectRoot; } AZ::IO::FixedMaxPath FindProjectRoot(SettingsRegistryInterface& settingsRegistry) @@ -309,7 +311,13 @@ namespace AZ::SettingsRegistryMergeUtils return projectRoot; } - return {}; + // Step 3 Check for a "Cache" directory by scanning upwards from the executable directory + if (auto candidateRoot = Internal::ScanUpRootLocator("Cache"); + !candidateRoot.empty() && AZ::IO::SystemFile::IsDirectory(candidateRoot.c_str())) + { + projectRoot = AZStd::move(candidateRoot); + } + return projectRoot; } AZStd::string_view ConfigParserSettings::DefaultCommentPrefixFilter(AZStd::string_view line) @@ -538,7 +546,7 @@ namespace AZ::SettingsRegistryMergeUtils AZ::IO::FixedMaxPath path = AZ::Utils::GetExecutableDirectory(); registry.Set(FilePathKey_BinaryFolder, path.LexicallyNormal().Native()); - // Engine root folder - corresponds to the @engroot@ and @devroot@ aliases + // Engine root folder - corresponds to the @engroot@ and @engroot@ aliases AZ::IO::FixedMaxPath engineRoot = FindEngineRoot(registry); registry.Set(FilePathKey_EngineRootFolder, engineRoot.LexicallyNormal().Native()); @@ -562,7 +570,7 @@ namespace AZ::SettingsRegistryMergeUtils assetPlatform = AZ::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME); } - // Project path - corresponds to the @devassets@ alias + // Project path - corresponds to the @projectroot@ alias // NOTE: Here we append to engineRoot, but if projectPathValue is absolute then engineRoot is discarded. path = engineRoot / projectPathValue; @@ -654,7 +662,7 @@ namespace AZ::SettingsRegistryMergeUtils } else { - // Cache: root - same as the @root@ alias, this is the starting path for cache files. + // Cache: root - same as the @products@ alias, this is the starting path for cache files. path = normalizedProjectPath / "Cache"; registry.Set(FilePathKey_CacheProjectRootFolder, path.LexicallyNormal().Native()); path /= assetPlatform; @@ -717,7 +725,9 @@ namespace AZ::SettingsRegistryMergeUtils if (registry.Get(cacheRootPath, FilePathKey_CacheRootFolder)) { mergePath = AZStd::move(cacheRootPath); - mergePath /= SettingsRegistryInterface::RegistryFolder; + AZStd::fixed_string<32> registryFolderLower(SettingsRegistryInterface::RegistryFolder); + AZStd::to_lower(registryFolderLower.begin(), registryFolderLower.end()); + mergePath /= registryFolderLower; registry.MergeSettingsFolder(mergePath.Native(), specializations, platform, "", scratchBuffer); } diff --git a/Code/Framework/AzCore/AzCore/Slice/SliceComponent.cpp b/Code/Framework/AzCore/AzCore/Slice/SliceComponent.cpp index 82a9175cf9..0b410369f0 100644 --- a/Code/Framework/AzCore/AzCore/Slice/SliceComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Slice/SliceComponent.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/AzCore/Statistics/RunningStatisticsManager.cpp b/Code/Framework/AzCore/AzCore/Statistics/RunningStatisticsManager.cpp deleted file mode 100644 index 52085d98e7..0000000000 --- a/Code/Framework/AzCore/AzCore/Statistics/RunningStatisticsManager.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "RunningStatisticsManager.h" - -namespace AzFramework -{ - namespace Statistics - { - bool RunningStatisticsManager::ContainsStatistic(const AZStd::string& name) - { - auto iterator = m_statisticsNamesToIndexMap.find(name); - return iterator != m_statisticsNamesToIndexMap.end(); - } - - bool RunningStatisticsManager::AddStatistic(const AZStd::string& name, const AZStd::string& units) - { - if (ContainsStatistic(name)) - { - return false; - } - AddStatisticValidated(name, units); - return true; - } - - void RunningStatisticsManager::RemoveStatistic(const AZStd::string& name) - { - auto iterator = m_statisticsNamesToIndexMap.find(name); - if (iterator == m_statisticsNamesToIndexMap.end()) - { - return; - } - AZ::u32 itemIndex = iterator->second; - m_statistics.erase(m_statistics.begin() + itemIndex); - m_statisticsNamesToIndexMap.erase(iterator); - //Update the indices in m_statisticsNamesToIndexMap. - while (itemIndex < m_statistics.size()) - { - const AZStd::string& statName = m_statistics[itemIndex].GetName(); - m_statisticsNamesToIndexMap[statName] = itemIndex; - ++itemIndex; - } - } - - void RunningStatisticsManager::ResetStatistic(const AZStd::string& name) - { - NamedRunningStatistic* stat = GetStatistic(name); - if (!stat) - { - return; - } - stat->Reset(); - } - - void RunningStatisticsManager::ResetAllStatistics() - { - for (NamedRunningStatistic& stat : m_statistics) - { - stat.Reset(); - } - } - - void RunningStatisticsManager::PushSampleForStatistic(const AZStd::string& name, double value) - { - NamedRunningStatistic* stat = GetStatistic(name); - if (!stat) - { - return; - } - stat->PushSample(value); - } - - NamedRunningStatistic* RunningStatisticsManager::GetStatistic(const AZStd::string& name, AZ::u32* indexOut) - { - auto iterator = m_statisticsNamesToIndexMap.find(name); - if (iterator == m_statisticsNamesToIndexMap.end()) - { - return nullptr; - } - const AZ::u32 index = iterator->second; - if (indexOut) - { - *indexOut = index; - } - return &m_statistics[index]; - } - - const AZStd::vector& RunningStatisticsManager::GetAllStatistics() const - { - return m_statistics; - } - - void RunningStatisticsManager::AddStatisticValidated(const AZStd::string& name, const AZStd::string& units) - { - m_statistics.emplace_back(NamedRunningStatistic(name, units)); - const AZ::u32 itemIndex = static_cast(m_statistics.size() - 1); - m_statisticsNamesToIndexMap[name] = itemIndex; - } - - }//namespace Statistics -}//namespace AzFramework diff --git a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h index 2d8823c6e8..876898f8ba 100644 --- a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h +++ b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h @@ -8,8 +8,8 @@ #pragma once #include //Just to get AZ::NullMutex -#include #include +#include #include namespace AZ @@ -36,8 +36,7 @@ namespace AZ //! are some things to consider when working with the StatisticalProfilerProxy: //! The StatisticalProfilerProxy OWNS an array of StatisticalProfiler. //! You can "manage" one of those StatisticalProfiler by getting a reference to it and - //! add Running statistics etc. See The TerrainProfilers mentioned above to see concrete use - //! cases on how to work with the StatisticalProfilerProxy. + //! add Running statistics etc. template class StatisticalProfiler { @@ -243,7 +242,7 @@ namespace AZ //! This one is needed because running statistics are collected many times across //! several frames. This value is used to calculate a per frame sample for @m_totalTimePerFrameStat, - //! by subtracting @m_prevAccumulatedSums from the accumulated sum in @m_statisticsManager. + //! by subtracting @m_prevAccumulatedSums from the accumulated sum in @m_statisticsManager. double m_prevAccumulatedSums; }; diff --git a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h index 33d835076f..278b2ecc98 100644 --- a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h +++ b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h @@ -7,27 +7,11 @@ */ #pragma once -#include -#include -#include -#include -#include #include #include -#include - - -#if defined(AZ_STATISTICAL_PROFILING_ENABLED) - -#if defined(AZ_PROFILE_SCOPE) -#undef AZ_PROFILE_SCOPE -#endif // #if defined(AZ_PROFILE_SCOPE) - -#define AZ_PROFILE_SCOPE(profiler, scopeNameId) \ - static const AZStd::string AZ_JOIN(blockName, __LINE__)(scopeNameId); \ - AZ::Statistics::StatisticalProfilerProxy::TimedScope AZ_JOIN(scope, __LINE__)(profiler, AZ_JOIN(blockName, __LINE__)); +#include +#include -#endif //#if defined(AZ_STATISTICAL_PROFILING_ENABLED) namespace AZ::Statistics { @@ -65,7 +49,7 @@ namespace AZ::Statistics public: AZ_TYPE_INFO(StatisticalProfilerProxy, "{1103D0EB-1C32-4854-B9D9-40A2D65BDBD2}"); - using StatIdType = AZStd::string; + using StatIdType = AZ::Crc32; using StatisticalProfilerType = StatisticalProfiler; //! A Convenience class used to measure time performance of scopes of code @@ -94,6 +78,7 @@ namespace AZ::Statistics } m_startTime = AZStd::chrono::high_resolution_clock::now(); } + ~TimedScope() { if (!m_profilerProxy) @@ -122,7 +107,6 @@ namespace AZ::Statistics StatisticalProfilerProxy() { - // TODO:BUDGETS Query available budgets at registration time and create an associated profiler per type AZ::Interface::Register(this); } @@ -135,30 +119,54 @@ namespace AZ::Statistics StatisticalProfilerProxy(StatisticalProfilerProxy&&) = delete; StatisticalProfilerProxy& operator=(StatisticalProfilerProxy&&) = delete; + void RegisterProfilerId(StatisticalProfilerId id) + { + m_profilers.try_emplace(id, ProfilerInfo()); + } + bool IsProfilerActive(StatisticalProfilerId id) const { - return m_activeProfilersFlag[static_cast(id)]; + auto iter = m_profilers.find(id); + return (iter != m_profilers.end()) ? iter->second.m_enabled : false; } StatisticalProfilerType& GetProfiler(StatisticalProfilerId id) { - return m_profilers[static_cast(id)]; + auto iter = m_profilers.try_emplace(id, ProfilerInfo()).first; + return iter->second.m_profiler; } - void ActivateProfiler(StatisticalProfilerId id, bool activate) + void ActivateProfiler(StatisticalProfilerId id, bool activate, bool autoCreate = true) { - m_activeProfilersFlag[static_cast(id)] = activate; + if (autoCreate) + { + auto iter = m_profilers.try_emplace(id, ProfilerInfo()).first; + iter->second.m_enabled = activate; + } + else if (auto iter = m_profilers.find(id); iter != m_profilers.end()) + { + iter->second.m_enabled = activate; + } } void PushSample(StatisticalProfilerId id, const StatIdType& statId, double value) { - m_profilers[static_cast(id)].PushSample(statId, value); + if (auto iter = m_profilers.find(id); iter != m_profilers.end()) + { + iter->second.m_profiler.PushSample(statId, value); + } } private: - // TODO:BUDGETS the number of bits allocated here must be based on the number of budgets available at profiler registration time - AZStd::bitset<128> m_activeProfilersFlag; - AZStd::vector m_profilers; + struct ProfilerInfo + { + StatisticalProfilerType m_profiler; + bool m_enabled{ false }; + }; + + using ProfilerMap = AZStd::unordered_map; + + ProfilerMap m_profilers; }; // class StatisticalProfilerProxy }; // namespace AZ::Statistics diff --git a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp index 2bb88fbfa2..7da04d7301 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp @@ -190,11 +190,13 @@ namespace AZ class TaskWorker { public: - void Spawn(::AZ::TaskExecutor& executor, size_t id, AZStd::semaphore& initSemaphore, bool affinitize) + static thread_local TaskWorker* t_worker; + + void Spawn(::AZ::TaskExecutor& executor, uint32_t id, AZStd::semaphore& initSemaphore, bool affinitize) { m_executor = &executor; - AZStd::string threadName = AZStd::string::format("TaskWorker %zu", id); + AZStd::string threadName = AZStd::string::format("TaskWorker %u", id); AZStd::thread_desc desc = {}; desc.m_name = threadName.c_str(); if (affinitize) @@ -203,12 +205,29 @@ namespace AZ } m_active.store(true, AZStd::memory_order_release); - m_thread = AZStd::thread{ [this, &initSemaphore] + m_thread = AZStd::thread{ desc, + [this, &initSemaphore] { + t_worker = this; initSemaphore.release(); Run(); - }, - &desc }; + } }; + } + + // Threads that wait on a graph to complete are disqualified from receiving tasks until the wait finishes + void Disable() + { + m_enabled = false; + } + + void Enable() + { + m_enabled = true; + } + + bool Enabled() const + { + return m_enabled; } void Join() @@ -222,11 +241,7 @@ namespace AZ { m_queue.Enqueue(task); - if (!m_busy.exchange(true)) - { - // The worker was idle prior to enqueueing the task, release the semaphore - m_semaphore.release(); - } + m_semaphore.release(); } private: @@ -234,7 +249,6 @@ namespace AZ { while (m_active) { - m_busy = false; m_semaphore.acquire(); if (!m_active) @@ -242,8 +256,6 @@ namespace AZ return; } - m_busy = true; - Task* task = m_queue.TryDequeue(); while (task) { @@ -271,12 +283,15 @@ namespace AZ AZStd::thread m_thread; AZStd::atomic m_active; - AZStd::atomic m_busy; + AZStd::atomic m_enabled = true; AZStd::binary_semaphore m_semaphore; ::AZ::TaskExecutor* m_executor; TaskQueue m_queue; + friend class ::AZ::TaskExecutor; }; + + thread_local TaskWorker* TaskWorker::t_worker = nullptr; } // namespace Internal static EnvironmentVariable s_executor; @@ -291,13 +306,16 @@ namespace AZ return **s_executor; } - // TODO: Create the default executor as part of a component (as in TaskManagerComponent) void TaskExecutor::SetInstance(TaskExecutor* executor) { - AZ_Assert(!s_executor, "Attempting to set the global task executor more than once"); - - s_executor = AZ::Environment::CreateVariable("GlobalTaskExecutor"); - s_executor.Set(executor); + if (!executor) + { + s_executor.Reset(); + } + else if (!s_executor) // ignore any calls to set after the first (this happens in unit tests that create new system entities) + { + s_executor = AZ::Environment::CreateVariable(s_executorName, executor); + } } TaskExecutor::TaskExecutor(uint32_t threadCount) @@ -307,14 +325,12 @@ namespace AZ m_workers = reinterpret_cast(azmalloc(m_threadCount * sizeof(Internal::TaskWorker))); - bool affinitize = m_threadCount == AZStd::thread::hardware_concurrency(); - AZStd::semaphore initSemaphore; - for (size_t i = 0; i != m_threadCount; ++i) + for (uint32_t i = 0; i != m_threadCount; ++i) { new (m_workers + i) Internal::TaskWorker{}; - m_workers[i].Spawn(*this, i, initSemaphore, affinitize); + m_workers[i].Spawn(*this, i, initSemaphore, false); } for (size_t i = 0; i != m_threadCount; ++i) @@ -334,9 +350,21 @@ namespace AZ azfree(m_workers); } - void TaskExecutor::Submit(Internal::CompiledTaskGraph& graph) + Internal::TaskWorker* TaskExecutor::GetTaskWorker() + { + if (Internal::TaskWorker::t_worker && Internal::TaskWorker::t_worker->m_executor == this) + { + return Internal::TaskWorker::t_worker; + } + return nullptr; + } + + void TaskExecutor::Submit(Internal::CompiledTaskGraph& graph, TaskGraphEvent* event) { ++m_graphsRemaining; + + event->m_executor = this; // Used to validate event is not waited for inside a job + // Submit all tasks that have no inbound edges for (Internal::Task& task : graph.Tasks()) { @@ -352,11 +380,24 @@ namespace AZ // TODO: Something more sophisticated is likely needed here. // First, we are completely ignoring affinity. // Second, some heuristics on core availability will help distribute work more effectively - m_workers[++m_lastSubmission % m_threadCount].Enqueue(&task); + uint32_t nextWorker = ++m_lastSubmission % m_threadCount; + while (!m_workers[nextWorker].Enabled()) + { + // Graphs that are waiting for the completion of a task graph cannot enqueue tasks onto + // the thread issuing the wait. + nextWorker = ++m_lastSubmission % m_threadCount; + } + + m_workers[nextWorker].Enqueue(&task); } void TaskExecutor::ReleaseGraph() { --m_graphsRemaining; } + + void TaskExecutor::ReactivateTaskWorker() + { + GetTaskWorker()->Enable(); + } } // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h index dc2fa5a4c8..7e1ff80902 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h +++ b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h @@ -72,14 +72,19 @@ namespace AZ explicit TaskExecutor(uint32_t threadCount = 0); ~TaskExecutor(); - void Submit(Internal::CompiledTaskGraph& graph); + // Submit a task graph for execution. Waitable task graphs cannot enqueue work on the task thread + // that is currently active + void Submit(Internal::CompiledTaskGraph& graph, TaskGraphEvent* event); void Submit(Internal::Task& task); private: friend class Internal::TaskWorker; + friend class TaskGraphEvent; + Internal::TaskWorker* GetTaskWorker(); void ReleaseGraph(); + void ReactivateTaskWorker(); Internal::TaskWorker* m_workers; uint32_t m_threadCount = 0; diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraph.cpp b/Code/Framework/AzCore/AzCore/Task/TaskGraph.cpp index 3fb93903c9..f57b06890a 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraph.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraph.cpp @@ -14,6 +14,12 @@ namespace AZ { using Internal::CompiledTaskGraph; + void TaskGraphEvent::Wait() + { + AZ_Assert(m_executor->GetTaskWorker() == nullptr, "Waiting in a task is unsupported"); + m_semaphore.acquire(); + } + void TaskToken::PrecedesInternal(TaskToken& comesAfter) { AZ_Assert(!m_parent.m_submitted, "Cannot mutate a TaskGraph that was previously submitted."); @@ -71,7 +77,7 @@ namespace AZ m_compiledTaskGraph->m_tasks[i].Init(); } - executor.Submit(*m_compiledTaskGraph); + executor.Submit(*m_compiledTaskGraph, waitEvent); if (m_retained) { diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraph.h b/Code/Framework/AzCore/AzCore/Task/TaskGraph.h index 4b454c63de..9553013a4b 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraph.h +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraph.h @@ -22,10 +22,19 @@ namespace AZ namespace Internal { class CompiledTaskGraph; + class TaskWorker; } class TaskExecutor; class TaskGraph; + class TaskGraphActiveInterface + { + public: + AZ_RTTI(TaskGraphActiveInterface, "{08118074-B139-4EF9-B8FD-29F1D6DC9233}"); + + virtual bool IsTaskGraphActive() const = 0; + }; + // A TaskToken is returned each time a Task is added to the TaskGraph. TaskTokens are used to // express dependencies between tasks within the graph, and have no purpose after the graph // is submitted (simply let them go out of scope) @@ -70,9 +79,12 @@ namespace AZ private: friend class ::AZ::Internal::CompiledTaskGraph; friend class TaskGraph; + friend class TaskExecutor; + void Signal(); AZStd::binary_semaphore m_semaphore; + TaskExecutor* m_executor = nullptr; }; // The TaskGraph encapsulates a set of tasks and their interdependencies. After adding @@ -89,6 +101,9 @@ namespace AZ // Reset the state of the task graph to begin recording tasks and edges again // NOTE: Graph must be in a "settled" state (cannot be in-flight) void Reset(); + + // Returns false if 1 or more tasks have been added to the graph + bool IsEmpty(); // Add a task to the graph, retrieiving a token that can be used to express dependencies // between tasks. The first argument specifies the TaskKind, used for tracking the task. diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraph.inl b/Code/Framework/AzCore/AzCore/Task/TaskGraph.inl index e0ac74ba9d..7b2f0cefdc 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraph.inl +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraph.inl @@ -33,11 +33,6 @@ namespace AZ return m_semaphore.try_acquire_for(AZStd::chrono::milliseconds{ 0 }); } - inline void TaskGraphEvent::Wait() - { - m_semaphore.acquire(); - } - inline void TaskGraphEvent::Signal() { m_semaphore.release(); @@ -59,6 +54,11 @@ namespace AZ return { AddTask(descriptor, AZStd::forward(lambdas))... }; } + inline bool TaskGraph::IsEmpty() + { + return m_tasks.empty(); + } + inline void TaskGraph::Detach() { m_retained = false; diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp new file mode 100644 index 0000000000..eed461ecb4 --- /dev/null +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include + +// Create a cvar as a central location for experimentation with switching from the Job system to TaskGraph system. +AZ_CVAR(bool, cl_activateTaskGraph, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Flag clients of TaskGraph to switch between jobs/taskgraph (Note does not disable task graph system)"); +static constexpr uint32_t TaskExecutorServiceCrc = AZ_CRC_CE("TaskExecutorService"); + +namespace AZ +{ + void TaskGraphSystemComponent::Activate() + { + AZ_Assert(m_taskExecutor == nullptr, "Error multiple activation of the TaskGraphSystemComponent"); + + if (Interface::Get() == nullptr) + { + Interface::Register(this); + m_taskExecutor = aznew TaskExecutor(); + TaskExecutor::SetInstance(m_taskExecutor); + } + } + + void TaskGraphSystemComponent::Deactivate() + { + if (&TaskExecutor::Instance() == m_taskExecutor) // check that our instance is the global instance (not always true in unit tests) + { + m_taskExecutor->SetInstance(nullptr); + } + if (m_taskExecutor) + { + azdestroy(m_taskExecutor); + m_taskExecutor = nullptr; + } + if (Interface::Get() == this) + { + Interface::Unregister(this); + } + } + + void TaskGraphSystemComponent::GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(TaskExecutorServiceCrc); + } + + void TaskGraphSystemComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(TaskExecutorServiceCrc); + } + + void TaskGraphSystemComponent::GetDependentServices([[maybe_unused]] ComponentDescriptor::DependencyArrayType& dependent) + { + } + + void TaskGraphSystemComponent::Reflect(ReflectContext* context) + { + if (SerializeContext* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(1) + ; + + if (AZ::EditContext* ec = serializeContext->GetEditContext()) + { + ec->Class + ("TaskGraph", "System component to create the default executor") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Category, "Engine") + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("System")) + ; + } + } + } + + bool TaskGraphSystemComponent::IsTaskGraphActive() const + { + return cl_activateTaskGraph; + } +} // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.h b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.h new file mode 100644 index 0000000000..a4c6da9539 --- /dev/null +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace AZ +{ + class TaskGraphSystemComponent + : public Component + , public TaskGraphActiveInterface + { + public: + AZ_COMPONENT(AZ::TaskGraphSystemComponent, "{5D56B829-1FEB-43D5-A0BD-E33C0497EFE2}") + + TaskGraphSystemComponent() = default; + + // Implement TaskGraphActiveInterface + bool IsTaskGraphActive() const override; + + private: + ////////////////////////////////////////////////////////////////////////// + // Component base + void Activate() override; + void Deactivate() override; + ////////////////////////////////////////////////////////////////////////// + + /// \ref ComponentDescriptor::GetProvidedServices + static void GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided); + /// \ref ComponentDescriptor::GetIncompatibleServices + static void GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible); + /// \ref ComponentDescriptor::GetDependentServices + static void GetDependentServices(ComponentDescriptor::DependencyArrayType& dependent); + /// \red ComponentDescriptor::Reflect + static void Reflect(ReflectContext* reflection); + + AZ::TaskExecutor* m_taskExecutor = nullptr; + }; +} diff --git a/Code/Framework/AzCore/AzCore/Time/ITime.h b/Code/Framework/AzCore/AzCore/Time/ITime.h index 845017bd14..a97ba2319a 100644 --- a/Code/Framework/AzCore/AzCore/Time/ITime.h +++ b/Code/Framework/AzCore/AzCore/Time/ITime.h @@ -13,14 +13,26 @@ #include #include #include +#include namespace AZ { //! This is a strong typedef for representing a millisecond value since application start. AZ_TYPE_SAFE_INTEGRAL(TimeMs, int64_t); + //! This is a strong typedef for representing a microsecond value since application start. + //! Using int64_t as the underlying type, this is good to represent approximately 292,471 years + AZ_TYPE_SAFE_INTEGRAL(TimeUs, int64_t); + //! @class ITime //! @brief This is an AZ::Interface<> for managing time related operations. + //! AZ::ITime and associated types may not operate in realtime. These abstractions are to allow our application + //! simulation to operate both slower and faster than realtime in a well defined and user controllable manner + //! The rate at which time passes for AZ::ITime is controlled by the cvar t_scale + //! t_scale == 0 means simulation time should halt + //! 0 < t_scale < 1 will cause time to pass slower than realtime, with t_scale 0.1 being roughly 1/10th realtime + //! t_scale == 1 will cause time to pass at roughly realtime + //! t_scale > 1 will cause time to pass faster than normal, with t_scale 10 being roughly 10x realtime class ITime { public: @@ -33,6 +45,10 @@ namespace AZ //! @return the number of milliseconds that have elapsed since application start virtual TimeMs GetElapsedTimeMs() const = 0; + //! Returns the number of microseconds since application start. + //! @return the number of microseconds that have elapsed since application start + virtual TimeUs GetElapsedTimeUs() const = 0; + AZ_DISABLE_COPY_MOVE(ITime); }; @@ -51,6 +67,53 @@ namespace AZ { return AZ::Interface::Get()->GetElapsedTimeMs(); } -} + + //! This is a simple convenience wrapper + inline TimeUs GetElapsedTimeUs() + { + return AZ::Interface::Get()->GetElapsedTimeUs(); + } + + //! Converts from milliseconds to microseconds + inline TimeUs TimeMsToUs(TimeMs value) + { + return static_cast(value * static_cast(1000)); + } + + //! Converts from microseconds to milliseconds + inline TimeMs TimeUsToMs(TimeUs value) + { + return static_cast(value / static_cast(1000)); + } + + //! Converts from milliseconds to seconds + inline float TimeMsToSeconds(TimeMs value) + { + return static_cast(value) / 1000.0f; + } + + //! Converts from microseconds to seconds + inline float TimeUsToSeconds(TimeUs value) + { + return static_cast(value) / 1000000.0f; + } + + //! Converts from milliseconds to AZStd::chrono::time_point + inline auto TimeMsToChrono(TimeMs value) + { + auto epoch = AZStd::chrono::time_point(); + auto chronoValue = AZStd::chrono::milliseconds(aznumeric_cast(value)); + return epoch + chronoValue; + } + + //! Converts from microseconds to AZStd::chrono::time_point + inline auto TimeUsToChrono(TimeUs value) + { + auto epoch = AZStd::chrono::time_point(); + auto chronoValue = AZStd::chrono::microseconds(aznumeric_cast(value)); + return epoch + chronoValue; + } +} // namespace AZ AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(AZ::TimeMs); +AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(AZ::TimeUs); diff --git a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp index a2e7733222..99145d377a 100644 --- a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp @@ -35,7 +35,7 @@ namespace AZ TimeSystemComponent::TimeSystemComponent() { - m_lastInvokedTimeMs = static_cast(AZStd::GetTimeNowMicroSecond() / 1000); + m_lastInvokedTimeUs = static_cast(AZStd::GetTimeNowMicroSecond()); AZ::Interface::Register(this); ITimeRequestBus::Handler::BusConnect(); } @@ -58,18 +58,23 @@ namespace AZ TimeMs TimeSystemComponent::GetElapsedTimeMs() const { - TimeMs currentTime = static_cast(AZStd::GetTimeNowMicroSecond() / 1000); - TimeMs deltaTime = currentTime - m_lastInvokedTimeMs; + return TimeUsToMs(GetElapsedTimeUs()); + } + + TimeUs TimeSystemComponent::GetElapsedTimeUs() const + { + TimeUs currentTime = static_cast(AZStd::GetTimeNowMicroSecond()); + TimeUs deltaTime = currentTime - m_lastInvokedTimeUs; if (t_scale != 1.0f) { float floatDelta = static_cast(deltaTime) * t_scale; - deltaTime = static_cast(static_cast(floatDelta)); + deltaTime = static_cast(static_cast(floatDelta)); } - m_accumulatedTimeMs += deltaTime; - m_lastInvokedTimeMs = currentTime; + m_accumulatedTimeUs += deltaTime; + m_lastInvokedTimeUs = currentTime; - return m_accumulatedTimeMs; + return m_accumulatedTimeUs; } } diff --git a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h index adf576becb..3ab3dbc234 100644 --- a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h +++ b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h @@ -39,11 +39,12 @@ namespace AZ //! ITime overrides. //! @{ TimeMs GetElapsedTimeMs() const override; + TimeUs GetElapsedTimeUs() const override; //! @} private: - mutable TimeMs m_lastInvokedTimeMs = TimeMs{0}; - mutable TimeMs m_accumulatedTimeMs = TimeMs{0}; + mutable TimeUs m_lastInvokedTimeUs = TimeUs{0}; + mutable TimeUs m_accumulatedTimeUs = TimeUs{0}; }; } diff --git a/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h b/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h index c9b7d44e1f..d7d0789c1a 100644 --- a/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h +++ b/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h @@ -52,6 +52,7 @@ namespace AZ MOCK_METHOD2(SetAlias, void(const char* alias, const char* path)); MOCK_METHOD1(ClearAlias, void(const char* alias)); MOCK_CONST_METHOD1(GetAlias, const char*(const char* alias)); + MOCK_METHOD2(SetDeprecatedAlias, void(AZStd::string_view, AZStd::string_view)); MOCK_CONST_METHOD2(ConvertToAlias, AZStd::optional(char* inOutBuffer, AZ::u64 bufferLength)); MOCK_CONST_METHOD2(ConvertToAlias, bool(AZ::IO::FixedMaxPath& aliasPath, const AZ::IO::PathView& path)); MOCK_CONST_METHOD3(ResolvePath, bool(const char* path, char* resolvedPath, AZ::u64 resolvedPathSize)); diff --git a/Code/Framework/AzCore/AzCore/Utils/Utils.cpp b/Code/Framework/AzCore/AzCore/Utils/Utils.cpp index c4dd24be35..2031d14d08 100644 --- a/Code/Framework/AzCore/AzCore/Utils/Utils.cpp +++ b/Code/Framework/AzCore/AzCore/Utils/Utils.cpp @@ -51,6 +51,20 @@ namespace AZ::Utils return executableDirectory; } + AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + { + AZ::IO::FixedMaxPathString absolutePath; + AZ::IO::FixedMaxPathString srcPath{ path }; + if (ConvertToAbsolutePath(srcPath.c_str(), absolutePath.data(), absolutePath.capacity())) + { + // Fix the size value of the fixed string by calculating the c-string length using char traits + absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); + return srcPath; + } + + return AZStd::nullopt; + } + AZ::IO::FixedMaxPathString GetEngineManifestPath() { AZ::IO::FixedMaxPath o3deManifestPath = GetO3deManifestDirectory(); diff --git a/Code/Framework/AzCore/AzCore/Utils/Utils.h b/Code/Framework/AzCore/AzCore/Utils/Utils.h index d8d4290f7f..c147e38bfb 100644 --- a/Code/Framework/AzCore/AzCore/Utils/Utils.h +++ b/Code/Framework/AzCore/AzCore/Utils/Utils.h @@ -104,6 +104,7 @@ namespace AZ // Attempts the supplied path to an absolute path. //! Returns nullopt if path cannot be converted to an absolute path AZStd::optional ConvertToAbsolutePath(AZStd::string_view path); + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 absolutePathMaxSize); //! Save a string to a file. Otherwise returns a failure with error message. AZ::Outcome WriteFile(AZStd::string_view content, AZStd::string_view filePath); diff --git a/Code/Framework/AzCore/AzCore/azcore_files.cmake b/Code/Framework/AzCore/AzCore/azcore_files.cmake index aa07959997..14579cbf33 100644 --- a/Code/Framework/AzCore/AzCore/azcore_files.cmake +++ b/Code/Framework/AzCore/AzCore/azcore_files.cmake @@ -633,6 +633,8 @@ set(FILES Task/TaskGraph.cpp Task/TaskGraph.h Task/TaskGraph.inl + Task/TaskGraphSystemComponent.h + Task/TaskGraphSystemComponent.cpp Threading/ThreadSafeDeque.h Threading/ThreadSafeDeque.inl Threading/ThreadSafeObject.h diff --git a/Code/Framework/AzCore/AzCore/std/parallel/thread.h b/Code/Framework/AzCore/AzCore/std/parallel/thread.h index 15d8c9dc8e..eef269c8ac 100644 --- a/Code/Framework/AzCore/AzCore/std/parallel/thread.h +++ b/Code/Framework/AzCore/AzCore/std/parallel/thread.h @@ -87,12 +87,6 @@ namespace AZStd // construct/copy/destroy: thread(); - /** - * \note thread_desc is AZStd extension. - */ - template - explicit thread(F&& f, const thread_desc* desc = 0); - ~thread(); thread(thread&& rhs) @@ -108,6 +102,15 @@ namespace AZStd return *this; } + template, thread_desc>>> + explicit thread(F&& f, Args&&... args); + + /** + * \note thread_desc is AZStd extension. + */ + template + thread(const thread_desc& desc, F&& f, Args&&... args); + // Till we fully have RVALUES template explicit thread(Internal::thread_move_t f); @@ -138,8 +141,8 @@ namespace AZStd //thread(AZStd::delegate d,const thread_desc* desc = 0); private: - thread(thread&); - thread& operator=(thread&); + thread(const thread&) = delete; + thread& operator=(const thread&) = delete; native_thread_data_type m_thread; }; diff --git a/Code/Framework/AzCore/CMakeLists.txt b/Code/Framework/AzCore/CMakeLists.txt index 60c5f50594..96ed838ccc 100644 --- a/Code/Framework/AzCore/CMakeLists.txt +++ b/Code/Framework/AzCore/CMakeLists.txt @@ -39,7 +39,7 @@ ly_add_target( 3rdParty::Lua 3rdParty::RapidJSON 3rdParty::RapidXML - 3rdParty::zlib + 3rdParty::ZLIB 3rdParty::zstd 3rdParty::cityhash ${AZ_CORE_PIX_BUILD_DEPENDENCIES} diff --git a/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp b/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp index 001cd57ac5..b9a6cfef9a 100644 --- a/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp +++ b/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp @@ -368,6 +368,21 @@ namespace Platform return access(fileName, F_OK) == 0; } } + + bool IsDirectory(const char* filePath) + { + if (AZ::Android::Utils::IsApkPath(filePath)) + { + return AZ::Android::APKFileHandler::IsDirectory(AZ::Android::Utils::StripApkPrefix(filePath).c_str()); + } + + struct stat result; + if (stat(filePath, &result) == 0) + { + return S_ISDIR(result.st_mode); + } + return false; + } } // namespace AZ::IO::Platform } // namespace AZ::IO diff --git a/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp b/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp index 1333006c4c..9a3f825bfc 100644 --- a/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp +++ b/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp @@ -60,23 +60,34 @@ namespace AZ return writeStorage ? AZStd::make_optional(writeStorage) : AZStd::nullopt; } - AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) { - AZ::IO::FixedMaxPathString absolutePath; - AZ::IO::FixedMaxPathString srcPath{ path }; - if (AZ::Android::Utils::IsApkPath(srcPath.c_str())) + if (AZ::Android::Utils::IsApkPath(path)) { - return srcPath; + azstrcpy(absolutePath, maxLength, path); + return true; } - if(char* result = realpath(srcPath.c_str(), absolutePath.data()); result) +#ifdef PATH_MAX + static constexpr size_t UnixMaxPathLength = PATH_MAX; +#else + // Fallback to 4096 if the PATH_MAX macro isn't defined on the Unix System + static constexpr size_t UnixMaxPathLength = 4096; +#endif + if (!AZ::IO::PathView(path).IsAbsolute()) { - // Fix the size value of the fixed string by calculating the c-string length using char traits - absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); - return absolutePath; + // note that realpath fails if the path does not exist and actually changes the return value + // to be the actual place that FAILED, which we don't want. + // if we fail, we'd prefer to fall through and at least use the original path. + char absolutePathBuffer[UnixMaxPathLength]; + if (const char* result = realpath(path, absolutePathBuffer); result != nullptr) + { + azstrcpy(absolutePath, maxLength, absolutePathBuffer); + return true; + } } - - return AZStd::nullopt; + azstrcpy(absolutePath, maxLength, path); + return AZ::IO::PathView(absolutePath).IsAbsolute(); } } } diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp index e9c0234ffa..f4d7db802b 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp @@ -38,7 +38,7 @@ namespace AZ { return false; } - for (size_t i = tracerPidOffset; i < numRead; ++i) + for (size_t i = tracerPidOffset + tracerPidString.length(); i < numRead; ++i) { if (!::isspace(processStatusView[i])) { diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp index 2e31936057..7327c8f152 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp @@ -47,23 +47,32 @@ namespace AZ AZ::IO::FixedMaxPath path{pass->pw_dir}; return path.Native(); } - + return {}; } - AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) { - AZ::IO::FixedMaxPathString absolutePath; - AZ::IO::FixedMaxPathString srcPath{ path }; - - if (char* result = realpath(srcPath.c_str(), absolutePath.data()); result) +#ifdef PATH_MAX + static constexpr size_t UnixMaxPathLength = PATH_MAX; +#else + // Fallback to 4096 if the PATH_MAX macro isn't defined on the Unix System + static constexpr size_t UnixMaxPathLength = 4096; +#endif + if (!AZ::IO::PathView(path).IsAbsolute()) { - // Fix the size value of the fixed string by calculating the c-string length using char traits - absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); - return absolutePath; + // note that realpath fails if the path does not exist and actually changes the return value + // to be the actual place that FAILED, which we don't want. + // if we fail, we'd prefer to fall through and at least use the original path. + char absolutePathBuffer[UnixMaxPathLength]; + if (const char* result = realpath(path, absolutePathBuffer); result != nullptr) + { + azstrcpy(absolutePath, maxLength, absolutePathBuffer); + return true; + } } - - return AZStd::nullopt; + azstrcpy(absolutePath, maxLength, path); + return AZ::IO::PathView(absolutePath).IsAbsolute(); } } // namespace Utils } // namespace AZ diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.h b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.h index 499caebac0..d9a4982a0a 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.h +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.h @@ -10,6 +10,8 @@ #include #include +#include + namespace AZStd { namespace Internal @@ -22,12 +24,20 @@ namespace AZStd ////////////////////////////////////////////////////////////////////////// // thread - template - inline thread::thread(F&& f, const thread_desc* desc) + template + thread::thread(F&& f, Args&&... args) + : thread(thread_desc{}, AZStd::forward(f), AZStd::forward(args)...) + {} + + template + thread::thread(const thread_desc& desc, F&& f, Args&&... args) { - Internal::thread_info* ti = Internal::create_thread_info(AZStd::forward(f)); - ti->m_name = desc ? desc->m_name : nullptr; - m_thread = Internal::create_thread(desc, ti); + auto threadfunc = [fn = AZStd::forward(f), argsTuple = AZStd::make_tuple(AZStd::forward(args)...)]() mutable -> void + { + AZStd::apply(AZStd::move(fn), AZStd::move(argsTuple)); + }; + Internal::thread_info* ti = Internal::create_thread_info(AZStd::move(threadfunc)); + m_thread = Internal::create_thread(&desc, ti); } inline bool thread::joinable() const diff --git a/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp b/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp index 3ca7a3fc76..88c47ed142 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp @@ -249,6 +249,16 @@ namespace Platform { return access(fileName, F_OK) == 0; } + + bool IsDirectory(const char* filePath) + { + struct stat result; + if (stat(filePath, &result) == 0) + { + return S_ISDIR(result.st_mode); + } + return false; + } } } // namespace AZ::IO diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp index 15d779017d..0fe32dcd4a 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -18,7 +19,7 @@ namespace AZ::IO { - + using FixedMaxPathWString = AZStd::fixed_wstring; namespace { //========================================================================= @@ -28,16 +29,9 @@ namespace //========================================================================= DWORD GetAttributes(const char* fileName) { - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - return GetFileAttributesW(fileNameW); - } - else - { - return INVALID_FILE_ATTRIBUTES; - } + FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + return GetFileAttributesW(fileNameW.c_str()); } //========================================================================= @@ -47,16 +41,9 @@ namespace //========================================================================= BOOL SetAttributes(const char* fileName, DWORD fileAttributes) { - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - return SetFileAttributesW(fileNameW, fileAttributes); - } - else - { - return FALSE; - } + FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + return SetFileAttributesW(fileNameW.c_str(), fileAttributes); } //========================================================================= @@ -68,9 +55,9 @@ namespace // * GetLastError() on Windows-like platforms // * errno on Unix platforms //========================================================================= - bool CreateDirRecursive(wchar_t* dirPath) + bool CreateDirRecursive(AZ::IO::FixedMaxPathWString& dirPath) { - if (CreateDirectoryW(dirPath, nullptr)) + if (CreateDirectoryW(dirPath.c_str(), nullptr)) { return true; // Created without error } @@ -78,28 +65,24 @@ namespace if (error == ERROR_PATH_NOT_FOUND) { // try to create our parent hierarchy - for (size_t i = wcslen(dirPath); i > 0; --i) + if (size_t i = dirPath.find_last_of(LR"(/\)"); i != FixedMaxPathWString::npos) { - if (dirPath[i] == L'/' || dirPath[i] == L'\\') + wchar_t delimiter = dirPath[i]; + dirPath[i] = 0; // null-terminate at the previous slash + const bool ret = CreateDirRecursive(dirPath); + dirPath[i] = delimiter; // restore slash + if (ret) { - wchar_t delimiter = dirPath[i]; - dirPath[i] = 0; // null-terminate at the previous slash - bool ret = CreateDirRecursive(dirPath); - dirPath[i] = delimiter; // restore slash - if (ret) - { - // now that our parent is created, try to create again - return CreateDirectoryW(dirPath, nullptr) != 0; - } - return false; + // now that our parent is created, try to create again + return CreateDirectoryW(dirPath.c_str(), nullptr) != 0; } } // if we reach here then there was no parent folder to create, so we failed for other reasons } else if (error == ERROR_ALREADY_EXISTS) { - DWORD attributes = GetFileAttributesW(dirPath); - return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; + DWORD attributes = GetFileAttributesW(dirPath.c_str()); + return attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; } return false; } @@ -152,13 +135,10 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) CreatePath(m_fileName.c_str()); } - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, m_fileName); m_handle = INVALID_HANDLE_VALUE; - if (mbstowcs_s(&numCharsConverted, fileNameW, m_fileName.c_str(), AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - m_handle = CreateFileW(fileNameW, dwDesiredAccess, dwShareMode, 0, dwCreationDisposition, dwFlagsAndAttributes, 0); - } + m_handle = CreateFileW(fileNameW.c_str(), dwDesiredAccess, dwShareMode, 0, dwCreationDisposition, dwFlagsAndAttributes, 0); if (m_handle == INVALID_HANDLE_VALUE) { @@ -350,6 +330,12 @@ namespace Platform return GetAttributes(fileName) != INVALID_FILE_ATTRIBUTES; } + bool IsDirectory(const char* filePath) + { + DWORD attributes = GetAttributes(filePath); + return attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; + } + void FindFiles(const char* filter, SystemFile::FindFileCB cb) { @@ -357,35 +343,26 @@ namespace Platform HANDLE hFile; int lastError; - wchar_t filterW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; + AZ::IO::FixedMaxPathWString filterW; + AZStd::to_wstring(filterW, filter); hFile = INVALID_HANDLE_VALUE; - if (mbstowcs_s(&numCharsConverted, filterW, filter, AZ_ARRAY_SIZE(filterW) - 1) == 0) - { - hFile = FindFirstFile(filterW, &fd); - } + hFile = FindFirstFileW(filterW.c_str(), &fd); if (hFile != INVALID_HANDLE_VALUE) { const char* fileName; - char fileNameA[AZ_MAX_PATH_LEN]; - fileName = NULL; - if (wcstombs_s(&numCharsConverted, fileNameA, fd.cFileName, AZ_ARRAY_SIZE(fileNameA) - 1) == 0) - { - fileName = fileNameA; - } + AZ::IO::FixedMaxPathString fileNameUtf8; + AZStd::to_string(fileNameUtf8, fd.cFileName); + fileName = fileNameUtf8.c_str(); cb(fileName, (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0); // List all the other files in the directory. while (FindNextFileW(hFile, &fd) != 0) { - fileName = NULL; - if (wcstombs_s(&numCharsConverted, fileNameA, fd.cFileName, AZ_ARRAY_SIZE(fileNameA) - 1) == 0) - { - fileName = fileNameA; - } + AZStd::to_string(fileNameUtf8, fd.cFileName); + fileName = fileNameUtf8.c_str(); cb(fileName, (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0); } @@ -411,12 +388,9 @@ namespace Platform { HANDLE handle = nullptr; - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - handle = CreateFileW(fileNameW, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - } + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + handle = CreateFileW(fileNameW.c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); if (handle == INVALID_HANDLE_VALUE) { @@ -448,12 +422,9 @@ namespace Platform WIN32_FILE_ATTRIBUTE_DATA data = { 0 }; BOOL result = FALSE; - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - result = GetFileAttributesExW(fileNameW, GetFileExInfoStandard, &data); - } + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + result = GetFileAttributesExW(fileNameW.c_str(), GetFileExInfoStandard, &data); if (result) { @@ -473,18 +444,11 @@ namespace Platform bool Delete(const char* fileName) { - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - if (DeleteFileW(fileNameW) == 0) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); - return false; - } - } - else + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + if (DeleteFileW(fileNameW.c_str()) == 0) { + EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); return false; } @@ -493,20 +457,13 @@ namespace Platform bool Rename(const char* sourceFileName, const char* targetFileName, bool overwrite) { - wchar_t sourceFileNameW[AZ_MAX_PATH_LEN]; - wchar_t targetFileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, sourceFileNameW, sourceFileName, AZ_ARRAY_SIZE(sourceFileNameW) - 1) == 0 && - mbstowcs_s(&numCharsConverted, targetFileNameW, targetFileName, AZ_ARRAY_SIZE(targetFileNameW) - 1) == 0) - { - if (MoveFileExW(sourceFileNameW, targetFileNameW, overwrite ? MOVEFILE_REPLACE_EXISTING : 0) == 0) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, sourceFileName, (int)GetLastError()); - return false; - } - } - else + AZ::IO::FixedMaxPathWString sourceFileNameW; + AZStd::to_wstring(sourceFileNameW, sourceFileName); + AZ::IO::FixedMaxPathWString targetFileNameW; + AZStd::to_wstring(targetFileNameW, targetFileName); + if (MoveFileExW(sourceFileNameW.c_str(), targetFileNameW.c_str(), overwrite ? MOVEFILE_REPLACE_EXISTING : 0) == 0) { + EBUS_EVENT(FileIOEventBus, OnError, nullptr, sourceFileName, (int)GetLastError()); return false; } @@ -543,17 +500,14 @@ namespace Platform { if (dirName) { - wchar_t dirPath[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, dirPath, dirName, AZ_ARRAY_SIZE(dirPath) - 1) == 0) + AZ::IO::FixedMaxPathWString dirNameW; + AZStd::to_wstring(dirNameW, dirName); + bool success = CreateDirRecursive(dirNameW); + if (!success) { - bool success = CreateDirRecursive(dirPath); - if (!success) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, dirName, (int)GetLastError()); - } - return success; + EBUS_EVENT(FileIOEventBus, OnError, nullptr, dirName, (int)GetLastError()); } + return success; } return false; } @@ -562,12 +516,9 @@ namespace Platform { if (dirName) { - wchar_t dirNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, dirNameW, dirName, AZ_ARRAY_SIZE(dirNameW) - 1) == 0) - { - return RemoveDirectory(dirNameW) != 0; - } + AZ::IO::FixedMaxPathWString dirNameW; + AZStd::to_wstring(dirNameW, dirName); + return RemoveDirectory(dirNameW.c_str()) != 0; } return false; diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp index bcba24b768..24786e2bc9 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp @@ -67,19 +67,12 @@ namespace AZ return AZStd::nullopt; } - AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) { - AZ::IO::FixedMaxPathString absolutePath; - AZ::IO::FixedMaxPathString srcPath{ path }; - char* result = _fullpath(absolutePath.data(), srcPath.c_str(), absolutePath.capacity()); - // Force update of the fixed_string size() value - absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); - if (result) - { - return absolutePath; - } - - return AZStd::nullopt; + char* result = _fullpath(absolutePath, path, maxLength); + return result != nullptr; } + + } } diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.h b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.h index 46986521e7..c79381a74a 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.h +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.h @@ -18,6 +18,8 @@ extern "C" AZ_DLL_IMPORT unsigned long __stdcall GetCurrentThreadId(void); } +#include + namespace AZStd { namespace Internal @@ -30,11 +32,20 @@ namespace AZStd ////////////////////////////////////////////////////////////////////////// // thread - template - inline thread::thread(F&& f, const thread_desc* desc) + template + thread::thread(F&& f, Args&&... args) + : thread(thread_desc{}, AZStd::forward(f), AZStd::forward(args)...) + {} + + template + thread::thread(const thread_desc& desc, F&& f, Args&&... args) { - Internal::thread_info* ti = Internal::create_thread_info(AZStd::forward(f)); - m_thread.m_handle = Internal::create_thread(desc, ti, &m_thread.m_id); + auto threadfunc = [fn = AZStd::forward(f), argsTuple = AZStd::make_tuple(AZStd::forward(args)...)]() mutable -> void + { + AZStd::apply(AZStd::move(fn), AZStd::move(argsTuple)); + }; + Internal::thread_info* ti = Internal::create_thread_info(AZStd::move(threadfunc)); + m_thread.m_handle = Internal::create_thread(&desc, ti, &m_thread.m_id); } inline bool thread::joinable() const diff --git a/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp b/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp index f3d4f58250..407cd3c258 100644 --- a/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp +++ b/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp @@ -195,18 +195,18 @@ namespace UnitTest void test_thread_id_for_running_thread_is_not_default_constructed_id() { - const thread_desc* desc = m_numThreadDesc ? &m_desc[0] : nullptr; - AZStd::thread t(AZStd::bind(&Parallel_Thread::do_nothing, this), desc); + const thread_desc desc = m_numThreadDesc ? m_desc[0] : thread_desc{}; + AZStd::thread t(desc, AZStd::bind(&Parallel_Thread::do_nothing, this)); AZ_TEST_ASSERT(t.get_id() != AZStd::thread::id()); t.join(); } void test_different_threads_have_different_ids() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; - const thread_desc* desc2 = m_numThreadDesc ? &m_desc[1] : nullptr; - AZStd::thread t(AZStd::bind(&Parallel_Thread::do_nothing, this), desc1); - AZStd::thread t2(AZStd::bind(&Parallel_Thread::do_nothing, this), desc2); + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; + const thread_desc desc2 = m_numThreadDesc ? m_desc[1] : thread_desc{}; + AZStd::thread t(desc1, AZStd::bind(&Parallel_Thread::do_nothing, this)); + AZStd::thread t2(desc2, AZStd::bind(&Parallel_Thread::do_nothing, this)); AZ_TEST_ASSERT(t.get_id() != t2.get_id()); t.join(); t2.join(); @@ -214,13 +214,13 @@ namespace UnitTest void test_thread_ids_have_a_total_order() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; - const thread_desc* desc2 = m_numThreadDesc ? &m_desc[1] : nullptr; - const thread_desc* desc3 = m_numThreadDesc ? &m_desc[2] : nullptr; + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; + const thread_desc desc2 = m_numThreadDesc ? m_desc[1] : thread_desc{}; + const thread_desc desc3 = m_numThreadDesc ? m_desc[2] : thread_desc{}; - AZStd::thread t(AZStd::bind(&Parallel_Thread::do_nothing, this), desc1); - AZStd::thread t2(AZStd::bind(&Parallel_Thread::do_nothing, this), desc2); - AZStd::thread t3(AZStd::bind(&Parallel_Thread::do_nothing, this), desc3); + AZStd::thread t(desc1, AZStd::bind(&Parallel_Thread::do_nothing, this)); + AZStd::thread t2(desc2, AZStd::bind(&Parallel_Thread::do_nothing, this)); + AZStd::thread t3(desc3, AZStd::bind(&Parallel_Thread::do_nothing, this)); AZ_TEST_ASSERT(t.get_id() != t2.get_id()); AZ_TEST_ASSERT(t.get_id() != t3.get_id()); AZ_TEST_ASSERT(t2.get_id() != t3.get_id()); @@ -313,10 +313,10 @@ namespace UnitTest void test_thread_id_of_running_thread_returned_by_this_thread_get_id() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; AZStd::thread::id id; - AZStd::thread t(AZStd::bind(&Parallel_Thread::get_thread_id, this, &id), desc1); + AZStd::thread t(desc1, AZStd::bind(&Parallel_Thread::get_thread_id, this, &id)); AZStd::thread::id t_id = t.get_id(); t.join(); AZ_TEST_ASSERT(id == t_id); @@ -366,10 +366,10 @@ namespace UnitTest void test_move_on_construction() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; AZStd::thread::id the_id; AZStd::thread x; - x = AZStd::thread(AZStd::bind(&Parallel_Thread::do_nothing_id, this, &the_id), desc1); + x = AZStd::thread(desc1, AZStd::bind(&Parallel_Thread::do_nothing_id, this, &the_id)); AZStd::thread::id x_id = x.get_id(); x.join(); AZ_TEST_ASSERT(the_id == x_id); @@ -377,8 +377,8 @@ namespace UnitTest AZStd::thread make_thread(AZStd::thread::id* the_id) { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; - return AZStd::thread(AZStd::bind(&Parallel_Thread::do_nothing_id, this, the_id), desc1); + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; + return AZStd::thread(desc1, AZStd::bind(&Parallel_Thread::do_nothing_id, this, the_id)); } void test_move_from_function_return() @@ -430,9 +430,9 @@ namespace UnitTest void do_test_creation() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; m_data = 0; - AZStd::thread t(AZStd::bind(&Parallel_Thread::simple_thread, this), desc1); + AZStd::thread t(desc1, AZStd::bind(&Parallel_Thread::simple_thread, this)); t.join(); AZ_TEST_ASSERT(m_data == 999); } @@ -445,9 +445,9 @@ namespace UnitTest void do_test_id_comparison() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; AZStd::thread::id self = this_thread::get_id(); - AZStd::thread thrd(AZStd::bind(&Parallel_Thread::comparison_thread, this, self), desc1); + AZStd::thread thrd(desc1, AZStd::bind(&Parallel_Thread::comparison_thread, this, self)); thrd.join(); } @@ -476,10 +476,10 @@ namespace UnitTest void do_test_creation_through_reference_wrapper() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; non_copyable_functor f; - AZStd::thread thrd(AZStd::ref(f), desc1); + AZStd::thread thrd(desc1, AZStd::ref(f)); thrd.join(); AZ_TEST_ASSERT(f.value == 999); } @@ -491,10 +491,10 @@ namespace UnitTest void test_swap() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; - const thread_desc* desc2 = m_numThreadDesc ? &m_desc[1] : nullptr; - AZStd::thread t(AZStd::bind(&Parallel_Thread::simple_thread, this), desc1); - AZStd::thread t2(AZStd::bind(&Parallel_Thread::simple_thread, this), desc2); + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; + const thread_desc desc2 = m_numThreadDesc ? m_desc[1] : thread_desc{}; + AZStd::thread t(desc1, AZStd::bind(&Parallel_Thread::simple_thread, this)); + AZStd::thread t2(desc2, AZStd::bind(&Parallel_Thread::simple_thread, this)); AZStd::thread::id id1 = t.get_id(); AZStd::thread::id id2 = t2.get_id(); @@ -512,7 +512,7 @@ namespace UnitTest void run() { - const thread_desc* desc1 = m_numThreadDesc ? &m_desc[0] : nullptr; + const thread_desc desc1 = m_numThreadDesc ? m_desc[0] : thread_desc{}; // We need to have at least one processor AZ_TEST_ASSERT(AZStd::thread::hardware_concurrency() >= 1); @@ -520,18 +520,18 @@ namespace UnitTest // Create thread to increment data till we need to m_data = 0; m_dataMax = 10; - AZStd::thread tr(AZStd::bind(&Parallel_Thread::increment_data, this), desc1); + AZStd::thread tr(desc1, AZStd::bind(&Parallel_Thread::increment_data, this)); tr.join(); AZ_TEST_ASSERT(m_data == m_dataMax); m_data = 0; - AZStd::thread trDel(make_delegate(this, &Parallel_Thread::increment_data), desc1); + AZStd::thread trDel(desc1, make_delegate(this, &Parallel_Thread::increment_data)); trDel.join(); AZ_TEST_ASSERT(m_data == m_dataMax); chrono::system_clock::time_point startTime = chrono::system_clock::now(); { - AZStd::thread tr1(AZStd::bind(&Parallel_Thread::sleep_thread, this, chrono::milliseconds(100)), desc1); + AZStd::thread tr1(desc1, AZStd::bind(&Parallel_Thread::sleep_thread, this, chrono::milliseconds(100))); tr1.join(); } auto sleepTime = chrono::system_clock::now() - startTime; @@ -563,71 +563,71 @@ namespace UnitTest { MfTest x; AZStd::function func = AZStd::bind(&MfTest::f0, &x); - AZStd::thread(func, desc1).join(); + AZStd::thread(desc1, func).join(); func = AZStd::bind(&MfTest::f0, AZStd::ref(x)); - AZStd::thread(func, desc1).join(); + AZStd::thread(desc1, func).join(); func = AZStd::bind(&MfTest::g0, &x); - AZStd::thread(func, desc1).join(); + AZStd::thread(desc1, func).join(); func = AZStd::bind(&MfTest::g0, x); - AZStd::thread(func, desc1).join(); + AZStd::thread(desc1, func).join(); func = AZStd::bind(&MfTest::g0, AZStd::ref(x)); - AZStd::thread(func, desc1).join(); + AZStd::thread(desc1, func).join(); //// 1 - //thread( AZStd::bind(&MfTest::f1, &x, 1) , desc1).join(); - //thread( AZStd::bind(&MfTest::f1, AZStd::ref(x), 1) , desc1).join(); - //thread( AZStd::bind(&MfTest::g1, &x, 1) , desc1).join(); - //thread( AZStd::bind(&MfTest::g1, x, 1) , desc1).join(); - //thread( AZStd::bind(&MfTest::g1, AZStd::ref(x), 1) , desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f1, &x, 1)).join(); + //thread( AZStd::bind(desc1, &MfTest::f1, AZStd::ref(x), 1)).join(); + //thread( AZStd::bind(desc1, &MfTest::g1, &x, 1)).join(); + //thread( AZStd::bind(desc1, &MfTest::g1, x, 1)).join(); + //thread( AZStd::bind(desc1, &MfTest::g1, AZStd::ref(x), 1)).join(); //// 2 - //thread( AZStd::bind(&MfTest::f2, &x, 1, 2) , desc1).join(); - //thread( AZStd::bind(&MfTest::f2, AZStd::ref(x), 1, 2) , desc1).join(); - //thread( AZStd::bind(&MfTest::g2, &x, 1, 2) , desc1).join(); - //thread( AZStd::bind(&MfTest::g2, x, 1, 2) , desc1).join(); - //thread( AZStd::bind(&MfTest::g2, AZStd::ref(x), 1, 2) , desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f2, &x, 1, 2)).join(); + //thread( AZStd::bind(desc1, &MfTest::f2, AZStd::ref(x), 1, 2)).join(); + //thread( AZStd::bind(desc1, &MfTest::g2, &x, 1, 2)).join(); + //thread( AZStd::bind(desc1, &MfTest::g2, x, 1, 2)).join(); + //thread( AZStd::bind(desc1, &MfTest::g2, AZStd::ref(x), 1, 2)).join(); //// 3 - //thread( AZStd::bind(&MfTest::f3, &x, 1, 2, 3) , desc1).join(); - //thread( AZStd::bind(&MfTest::f3, AZStd::ref(x), 1, 2, 3) , desc1).join(); - //thread( AZStd::bind(&MfTest::g3, &x, 1, 2, 3) , desc1).join(); - //thread( AZStd::bind(&MfTest::g3, x, 1, 2, 3) , desc1).join(); - //thread( AZStd::bind(&MfTest::g3, AZStd::ref(x), 1, 2, 3) , desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f3, &x, 1, 2, 3)).join(); + //thread( AZStd::bind(desc1, &MfTest::f3, AZStd::ref(x), 1, 2, 3)).join(); + //thread( AZStd::bind(desc1, &MfTest::g3, &x, 1, 2, 3)).join(); + //thread( AZStd::bind(desc1, &MfTest::g3, x, 1, 2, 3)).join(); + //thread( AZStd::bind(desc1, &MfTest::g3, AZStd::ref(x), 1, 2, 3)).join(); //// 4 - //thread( AZStd::bind(&MfTest::f4, &x, 1, 2, 3, 4) , desc1).join(); - //thread( AZStd::bind(&MfTest::f4, AZStd::ref(x), 1, 2, 3, 4) , desc1).join(); - //thread( AZStd::bind(&MfTest::g4, &x, 1, 2, 3, 4) , desc1).join(); - //thread( AZStd::bind(&MfTest::g4, x, 1, 2, 3, 4) , desc1).join(); - //thread( AZStd::bind(&MfTest::g4, AZStd::ref(x), 1, 2, 3, 4) , desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f4, &x, 1, 2, 3, 4)).join(); + //thread( AZStd::bind(desc1, &MfTest::f4, AZStd::ref(x), 1, 2, 3, 4)).join(); + //thread( AZStd::bind(desc1, &MfTest::g4, &x, 1, 2, 3, 4)).join(); + //thread( AZStd::bind(desc1, &MfTest::g4, x, 1, 2, 3, 4)).join(); + //thread( AZStd::bind(desc1, &MfTest::g4, AZStd::ref(x), 1, 2, 3, 4)).join(); //// 5 - //thread( AZStd::bind(&MfTest::f5, &x, 1, 2, 3, 4, 5) , desc1).join(); - //thread( AZStd::bind(&MfTest::f5, AZStd::ref(x), 1, 2, 3, 4, 5) , desc1).join(); - //thread( AZStd::bind(&MfTest::g5, &x, 1, 2, 3, 4, 5) , desc1).join(); - //thread( AZStd::bind(&MfTest::g5, x, 1, 2, 3, 4, 5) , desc1).join(); - //thread( AZStd::bind(&MfTest::g5, AZStd::ref(x), 1, 2, 3, 4, 5) , desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f5, &x, 1, 2, 3, 4, 5)).join(); + //thread( AZStd::bind(desc1, &MfTest::f5, AZStd::ref(x), 1, 2, 3, 4, 5)).join(); + //thread( AZStd::bind(desc1, &MfTest::g5, &x, 1, 2, 3, 4, 5)).join(); + //thread( AZStd::bind(desc1, &MfTest::g5, x, 1, 2, 3, 4, 5)).join(); + //thread( AZStd::bind(desc1, &MfTest::g5, AZStd::ref(x), 1, 2, 3, 4, 5)).join(); //// 6 - //thread( AZStd::bind(&MfTest::f6, &x, 1, 2, 3, 4, 5, 6) , desc1).join(); - //thread( AZStd::bind(&MfTest::f6, AZStd::ref(x), 1, 2, 3, 4, 5, 6) , desc1).join(); - //thread( AZStd::bind(&MfTest::g6, &x, 1, 2, 3, 4, 5, 6) , desc1).join(); - //thread( AZStd::bind(&MfTest::g6, x, 1, 2, 3, 4, 5, 6) , desc1).join(); - //thread( AZStd::bind(&MfTest::g6, AZStd::ref(x), 1, 2, 3, 4, 5, 6) , desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f6, &x, 1, 2, 3, 4, 5, 6)).join(); + //thread( AZStd::bind(desc1, &MfTest::f6, AZStd::ref(x), 1, 2, 3, 4, 5, 6)).join(); + //thread( AZStd::bind(desc1, &MfTest::g6, &x, 1, 2, 3, 4, 5, 6)).join(); + //thread( AZStd::bind(desc1, &MfTest::g6, x, 1, 2, 3, 4, 5, 6)).join(); + //thread( AZStd::bind(desc1, &MfTest::g6, AZStd::ref(x), 1, 2, 3, 4, 5, 6)).join(); //// 7 - //thread( AZStd::bind(&MfTest::f7, &x, 1, 2, 3, 4, 5, 6, 7), desc1).join(); - //thread( AZStd::bind(&MfTest::f7, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7), desc1).join(); - //thread( AZStd::bind(&MfTest::g7, &x, 1, 2, 3, 4, 5, 6, 7), desc1).join(); - //thread( AZStd::bind(&MfTest::g7, x, 1, 2, 3, 4, 5, 6, 7), desc1).join(); - //thread( AZStd::bind(&MfTest::g7, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7), desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f7, &x, 1, 2, 3, 4, 5, 6, 7)).join(); + //thread( AZStd::bind(desc1, &MfTest::f7, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7)).join(); + //thread( AZStd::bind(desc1, &MfTest::g7, &x, 1, 2, 3, 4, 5, 6, 7)).join(); + //thread( AZStd::bind(desc1, &MfTest::g7, x, 1, 2, 3, 4, 5, 6, 7)).join(); + //thread( AZStd::bind(desc1, &MfTest::g7, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7)).join(); //// 8 - //thread( AZStd::bind(&MfTest::f8, &x, 1, 2, 3, 4, 5, 6, 7, 8) , desc1).join(); - //thread( AZStd::bind(&MfTest::f8, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7, 8) , desc1).join(); - //thread( AZStd::bind(&MfTest::g8, &x, 1, 2, 3, 4, 5, 6, 7, 8) , desc1).join(); - //thread( AZStd::bind(&MfTest::g8, x, 1, 2, 3, 4, 5, 6, 7, 8) , desc1).join(); - //thread( AZStd::bind(&MfTest::g8, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7, 8) , desc1).join(); + //thread( AZStd::bind(desc1, &MfTest::f8, &x, 1, 2, 3, 4, 5, 6, 7, 8)).join(); + //thread( AZStd::bind(desc1, &MfTest::f8, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7, 8)).join(); + //thread( AZStd::bind(desc1, &MfTest::g8, &x, 1, 2, 3, 4, 5, 6, 7, 8)).join(); + //thread( AZStd::bind(desc1, &MfTest::g8, x, 1, 2, 3, 4, 5, 6, 7, 8)).join(); + //thread( AZStd::bind(desc1, &MfTest::g8, AZStd::ref(x), 1, 2, 3, 4, 5, 6, 7, 8)).join(); AZ_TEST_ASSERT(x.m_hash == 1366); } diff --git a/Code/Framework/AzCore/Tests/AZStd/VariantSerialization.cpp b/Code/Framework/AzCore/Tests/AZStd/VariantSerialization.cpp index a87aa70d8c..a4f2d1f1e4 100644 --- a/Code/Framework/AzCore/Tests/AZStd/VariantSerialization.cpp +++ b/Code/Framework/AzCore/Tests/AZStd/VariantSerialization.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/Asset/AssetManagerLoadingTests.cpp b/Code/Framework/AzCore/Tests/Asset/AssetManagerLoadingTests.cpp index 8ce3747620..3e6376323c 100644 --- a/Code/Framework/AzCore/Tests/Asset/AssetManagerLoadingTests.cpp +++ b/Code/Framework/AzCore/Tests/Asset/AssetManagerLoadingTests.cpp @@ -6,6 +6,7 @@ * */ #include +#include #include #include #include @@ -365,6 +366,42 @@ namespace UnitTest }; + static constexpr AZStd::chrono::seconds MaxDispatchTimeoutSeconds = BaseAssetManagerTest::DefaultTimeoutSeconds * 12; + + template + bool DispatchEventsUntilCondition(AZ::Data::AssetManager& assetManager, Pred&& conditionPredicate, + AZStd::chrono::seconds logIntervalSeconds = BaseAssetManagerTest::DefaultTimeoutSeconds, + AZStd::chrono::seconds maxTimeoutSeconds = MaxDispatchTimeoutSeconds) + { + // If the Max Timeout is hit the test will be marked as a failure + + AZStd::chrono::time_point dispatchEventTimeStart = AZStd::chrono::system_clock::now(); + AZStd::chrono::seconds dispatchEventNextLogTime = logIntervalSeconds; + + while (!conditionPredicate()) + { + AZStd::chrono::time_point currentTime = AZStd::chrono::system_clock::now(); + if (AZStd::chrono::seconds elapsedTime{ currentTime - dispatchEventTimeStart }; + elapsedTime >= dispatchEventNextLogTime) + { + const testing::TestInfo* test_info = ::testing::UnitTest::GetInstance()->current_test_info(); + AZ_Printf("AssetManagerLoadingTest", "The DispatchEventsUntiTimeout function has been waiting for %llu seconds" + " in test %s.%s", elapsedTime.count(), test_info->test_case_name(), test_info->name()); + // Update the next log time to be the next multiple of DefaultTimeout Seconds + // after current elapsed time + dispatchEventNextLogTime = elapsedTime + logIntervalSeconds - ((elapsedTime + logIntervalSeconds) % logIntervalSeconds); + if (elapsedTime >= maxTimeoutSeconds) + { + return false; + } + } + assetManager.DispatchEvents(); + AZStd::this_thread::yield(); + } + + return true; + } + #if AZ_TRAIT_DISABLE_FAILED_ASSET_MANAGER_TESTS || AZ_TRAIT_DISABLE_ASSET_MANAGER_FLOOD_TEST TEST_F(AssetJobsFloodTest, DISABLED_FloodTest) #else @@ -1357,42 +1394,74 @@ namespace UnitTest m_assetHandlerAndCatalog->m_numCreations = 0; m_assetHandlerAndCatalog->m_numDestructions = 0; { + ContainerReadyListener containerLoadingCompleteListener(NoLoadAssetId); OnAssetReadyListener readyListener(NoLoadAssetId, azrtti_typeid()); - OnAssetReadyListener depenencyListener(MyAsset2Id, azrtti_typeid()); + OnAssetReadyListener dependencyListener(MyAsset2Id, azrtti_typeid()); + + SCOPED_TRACE("LoadDependencies_BehaviorObeyed"); + + auto AssetOnlyReady = [&readyListener]() -> bool + { + return readyListener.m_ready; + }; + auto AssetAndDependencyReady = [&readyListener, &dependencyListener]() -> bool + { + return readyListener.m_ready && dependencyListener.m_ready; + }; + auto AssetContainerReady = [&containerLoadingCompleteListener]() -> bool + { + return containerLoadingCompleteListener.m_ready; + }; auto noLoadRef = m_testAssetManager->GetAsset(NoLoadAssetId, azrtti_typeid(), AZ::Data::AssetLoadBehavior::Default); - auto maxTimeout = AZStd::chrono::system_clock::now() + DefaultTimeoutSeconds; + // Dispatch AssetBus events until the NoLoadAssetId has signaled an OnAssetReady + // event or the timeout has been reached + EXPECT_TRUE(DispatchEventsUntilCondition(*m_testAssetManager, AssetOnlyReady)) + << "The DispatchEventsUntiTimeout function has not completed in " + << MaxDispatchTimeoutSeconds.count() << " seconds. The test will be marked as a failure\n"; + + // Dispatch AssetBus events until the asset container used to load + // NoLoadAssetId has signaled an OnAssetContainerReady event + // or the timeout has been reached + // Wait until the current asset container has finished loading the NoLoadAssetId + // before trigger another load + // If the wait does not occur here, most likely what would occur is + // the AssetManager::m_ownedAssetContainers object is still loading the NoLoadAssetId + // using the default AssetLoadParameters + // If a call to GetAsset occurs at this point while the Asset is still loading + // it will ignore the new loadParams below and instead just re-use the existing + // AssetContainerReader instance, resulting in the dependent MyAsset2Id not + // being loaded + // The function that can return an existing AssetContainer instance is the + // AssetManager::GetAssetContainer. Since it can be in the middle of a load, + // updating the AssetLoadParams would have an effect on the current in progress + // load + EXPECT_TRUE(DispatchEventsUntilCondition(*m_testAssetManager, AssetContainerReady)) + << "The DispatchEventsUntiTimeout function has not completed in " + << MaxDispatchTimeoutSeconds.count() << " seconds. The test will be marked as a failure\n"; + + // Reset the ContainerLoadingComplete ready status back to 0 + containerLoadingCompleteListener.m_ready = 0; - while (!readyListener.m_ready) - { - m_testAssetManager->DispatchEvents(); - if (AZStd::chrono::system_clock::now() > maxTimeout) - { - break; - } - AZStd::this_thread::yield(); - } - EXPECT_EQ(readyListener.m_ready, 1); - EXPECT_EQ(depenencyListener.m_ready, 0); - AZ::Data::AssetLoadParameters loadParams(nullptr, AZ::Data::AssetDependencyLoadRules::LoadAll); loadParams.m_reloadMissingDependencies = true; auto loadDependencyRef = m_testAssetManager->GetAsset(NoLoadAssetId, azrtti_typeid(), AZ::Data::AssetLoadBehavior::Default, loadParams); - while (!depenencyListener.m_ready || !readyListener.m_ready) - { - m_testAssetManager->DispatchEvents(); - if (AZStd::chrono::system_clock::now() > maxTimeout) - { - break; - } - AZStd::this_thread::yield(); - } + // Dispatch AssetBus events until the NoLoadAssetId and the MyAsset2Id has signaled + // an OnAssetReady event or the timeout has been reached + EXPECT_TRUE(DispatchEventsUntilCondition(*m_testAssetManager, AssetAndDependencyReady)) + << "The DispatchEventsUntiTimeout function has not completed in " + << MaxDispatchTimeoutSeconds.count() << " seconds. The test will be marked as a failure\n"; + EXPECT_EQ(readyListener.m_ready, 1); - EXPECT_EQ(depenencyListener.m_ready, 1); + EXPECT_EQ(dependencyListener.m_ready, 1); + + EXPECT_TRUE(DispatchEventsUntilCondition(*m_testAssetManager, AssetContainerReady)) + << "The DispatchEventsUntiTimeout function has not completed in " + << MaxDispatchTimeoutSeconds.count() << " seconds. The test will be marked as a failure\n"; } CheckFinishedCreationsAndDestructions(); diff --git a/Code/Framework/AzCore/Tests/Asset/AssetManagerStreamingTests.cpp b/Code/Framework/AzCore/Tests/Asset/AssetManagerStreamingTests.cpp index a683f9630e..3e9ea42f22 100644 --- a/Code/Framework/AzCore/Tests/Asset/AssetManagerStreamingTests.cpp +++ b/Code/Framework/AzCore/Tests/Asset/AssetManagerStreamingTests.cpp @@ -6,6 +6,7 @@ * */ #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/Asset/BaseAssetManagerTest.cpp b/Code/Framework/AzCore/Tests/Asset/BaseAssetManagerTest.cpp index ba47064998..4dbd3c0e1e 100644 --- a/Code/Framework/AzCore/Tests/Asset/BaseAssetManagerTest.cpp +++ b/Code/Framework/AzCore/Tests/Asset/BaseAssetManagerTest.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp b/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp index e968ee28fc..e04c5190f9 100644 --- a/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp +++ b/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/AssetManager.cpp b/Code/Framework/AzCore/Tests/AssetManager.cpp index c5f249cf21..1e875d61dc 100644 --- a/Code/Framework/AzCore/Tests/AssetManager.cpp +++ b/Code/Framework/AzCore/Tests/AssetManager.cpp @@ -6,6 +6,7 @@ * */ #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h b/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h index 26b3df55bb..5897b3aaee 100644 --- a/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h +++ b/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h @@ -426,6 +426,10 @@ public: return nullptr; } + void SetDeprecatedAlias(AZStd::string_view, AZStd::string_view) override + { + } + void ClearAlias(const char* ) override { } AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64) const override diff --git a/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp b/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp index 34076a10f6..cf239a0821 100644 --- a/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp +++ b/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp @@ -698,7 +698,7 @@ AZ_POP_DISABLE_WARNING using PathViewLexicallyProximateFixture = PathLexicallyFixture; - TEST_P(PathViewLexicallyProximateFixture, LexicallyProximate_ReturnsRelativePathIfNotEmptyOrTestPathIfNot) + TEST_P(PathViewLexicallyProximateFixture, LexicallyProximate_ReturnsRelativePathIfNotEmptyOrTestPath) { const auto& testParams = GetParam(); AZ::IO::PathView testPath(testParams.m_testPathString, testParams.m_preferredSeparator); diff --git a/Code/Framework/AzCore/Tests/Memory.cpp b/Code/Framework/AzCore/Tests/Memory.cpp index eb854050b6..5a483c1ed1 100644 --- a/Code/Framework/AzCore/Tests/Memory.cpp +++ b/Code/Framework/AzCore/Tests/Memory.cpp @@ -151,7 +151,7 @@ namespace UnitTest AZStd::thread m_threads[m_maxNumThreads]; for (unsigned int i = 0; i < m_maxNumThreads; ++i) { - m_threads[i] = AZStd::thread(AZStd::bind(&SystemAllocatorTest::ThreadFunc, this), &m_desc[i]); + m_threads[i] = AZStd::thread(m_desc[i], AZStd::bind(&SystemAllocatorTest::ThreadFunc, this)); // give some time offset to the threads so we can test alloc and dealloc at the same time. //AZStd::this_thread::sleep_for(AZStd::chrono::microseconds(500)); } @@ -286,7 +286,7 @@ namespace UnitTest AZStd::thread m_threads[m_maxNumThreads]; for (unsigned int i = 0; i < m_maxNumThreads; ++i) { - m_threads[i] = AZStd::thread(AZStd::bind(&SystemAllocatorTest::ThreadFunc, this), &m_desc[i]); + m_threads[i] = AZStd::thread(m_desc[i], AZStd::bind(&SystemAllocatorTest::ThreadFunc, this)); // give some time offset to the threads so we can test alloc and dealloc at the same time. AZStd::this_thread::sleep_for(AZStd::chrono::microseconds(500)); } @@ -724,7 +724,7 @@ namespace UnitTest AZStd::thread m_threads[m_maxNumThreads]; for (unsigned int i = 0; i < m_maxNumThreads; ++i) { - m_threads[i] = AZStd::thread(AZStd::bind(&ThreadPoolAllocatorTest::AllocDeallocFunc, this), &m_desc[i]); + m_threads[i] = AZStd::thread(m_desc[i], AZStd::bind(&ThreadPoolAllocatorTest::AllocDeallocFunc, this)); } for (unsigned int i = 0; i < m_maxNumThreads; ++i) @@ -743,12 +743,12 @@ namespace UnitTest for (unsigned int i = m_maxNumThreads/2; i +#include #include #include diff --git a/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp b/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp index 04e70d92a5..fc5fe66c4b 100644 --- a/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp +++ b/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp @@ -30,6 +30,8 @@ namespace UnitTest { + constexpr AZ::u32 ProfilerProxyGroup = AZ_CRC_CE("StatisticalProfilerProxyTests"); + class StatisticalProfilerTest : public AllocatorsFixture { @@ -98,10 +100,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -175,10 +177,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -317,26 +319,26 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance = "PerformanceResult"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock = "Block"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdBlock, statNameBlock, "us") != nullptr); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); const int iter_count = 10; { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdPerformance) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdPerformance) int counter = 0; for (int i = 0; i < iter_count; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdBlock) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdBlock) counter++; } } @@ -348,7 +350,7 @@ namespace UnitTest EXPECT_EQ(profiler.GetStatistic(statIdBlock)->GetNumSamples(), iter_count); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); #undef CODE_PROFILER_PROXY_PUSH_TIME @@ -362,12 +364,12 @@ namespace UnitTest const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread1("simple_thread1"); const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread1_loop("simple_thread1_loop"); - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread1); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread1); static int counter = 0; for (int i = 0; i < loop_cnt; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread1_loop); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread1_loop); counter++; } } @@ -377,12 +379,12 @@ namespace UnitTest const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread2("simple_thread2"); const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread2_loop("simple_thread2_loop"); - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread2); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread2); static int counter = 0; for (int i = 0; i < loop_cnt; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread2_loop); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread2_loop); counter++; } } @@ -392,12 +394,13 @@ namespace UnitTest const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread3("simple_thread3"); const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread3_loop("simple_thread3_loop"); - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread3); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread3); static int counter = 0; for (int i = 0; i < loop_cnt; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread3_loop); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread3_loop); + counter++; } } @@ -408,21 +411,21 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1 = "simple_thread1"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1("simple_thread1"); const AZStd::string statNameThread1("simple_thread1"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop = "simple_thread1_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop("simple_thread1_loop"); const AZStd::string statNameThread1Loop("simple_thread1_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2 = "simple_thread2"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2("simple_thread2"); const AZStd::string statNameThread2("simple_thread2"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop = "simple_thread2_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop("simple_thread2_loop"); const AZStd::string statNameThread2Loop("simple_thread2_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3 = "simple_thread3"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3("simple_thread3"); const AZStd::string statNameThread3("simple_thread3"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop = "simple_thread3_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop("simple_thread3_loop"); const AZStd::string statNameThread3Loop("simple_thread3_loop"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread1, statNameThread1, "us")); @@ -432,7 +435,7 @@ namespace UnitTest ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3, statNameThread3, "us")); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3Loop, statNameThread3Loop, "us")); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); //Let's kickoff the threads to see how much contention affects the profiler's performance. const int iter_count = 10; @@ -459,7 +462,7 @@ namespace UnitTest EXPECT_EQ(profiler.GetStatistic(statIdThread3Loop)->GetNumSamples(), iter_count); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); } /** Trace message handler to track messages during tests @@ -566,10 +569,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -647,10 +650,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -745,26 +748,26 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance = "PerformanceResult"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock = "Block"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdBlock, statNameBlock, "us") != nullptr); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); const int iter_count = 1000000; { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdPerformance) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdPerformance) int counter = 0; for (int i = 0; i < iter_count; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdBlock) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdBlock) counter++; } } @@ -778,7 +781,7 @@ namespace UnitTest profiler.LogAndResetStats("StatisticalProfilerProxy"); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); } #undef CODE_PROFILER_PROXY_PUSH_TIME @@ -788,21 +791,21 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1 = "simple_thread1"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1("simple_thread1"); const AZStd::string statNameThread1("simple_thread1"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop = "simple_thread1_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop("simple_thread1_loop"); const AZStd::string statNameThread1Loop("simple_thread1_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2 = "simple_thread2"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2("simple_thread2"); const AZStd::string statNameThread2("simple_thread2"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop = "simple_thread2_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop("simple_thread2_loop"); const AZStd::string statNameThread2Loop("simple_thread2_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3 = "simple_thread3"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3("simple_thread3"); const AZStd::string statNameThread3("simple_thread3"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop = "simple_thread3_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop("simple_thread3_loop"); const AZStd::string statNameThread3Loop("simple_thread3_loop"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread1, statNameThread1, "us")); @@ -812,7 +815,7 @@ namespace UnitTest ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3, statNameThread3, "us")); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3Loop, statNameThread3Loop, "us")); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); //Let's kickoff the threads to see how much contention affects the profiler's performance. const int iter_count = 1000000; @@ -841,7 +844,7 @@ namespace UnitTest profiler.LogAndResetStats("3_Threads_StatisticalProfilerProxy"); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); } }//namespace UnitTest diff --git a/Code/Framework/AzCore/Tests/TaskTests.cpp b/Code/Framework/AzCore/Tests/TaskTests.cpp index e743ab6643..9e839f60ee 100644 --- a/Code/Framework/AzCore/Tests/TaskTests.cpp +++ b/Code/Framework/AzCore/Tests/TaskTests.cpp @@ -34,7 +34,7 @@ namespace UnitTest AZ::AllocatorInstance::Create(); AZ::AllocatorInstance::Create(); - m_executor = aznew TaskExecutor(4); + m_executor = aznew TaskExecutor(); } void TearDown() override @@ -236,6 +236,82 @@ namespace UnitTest EXPECT_EQ(x, 1); } + TEST_F(TaskGraphTestFixture, SingleTask) + { + AZStd::atomic_int32_t x = 0; + + TaskGraph graph; + graph.AddTask( + defaultTD, + [&x] + { + x = 1; + }); + + TaskGraphEvent ev; + graph.SubmitOnExecutor(*m_executor, &ev); + ev.Wait(); + + EXPECT_EQ(1, x); + } + + + TEST_F(TaskGraphTestFixture, SingleTaskChain) + { + AZStd::atomic_int32_t x = 0; + + TaskGraph graph; + auto a = graph.AddTask( + defaultTD, + [&x] + { + x += 1; + }); + auto b = graph.AddTask( + defaultTD, + [&x] + { + x += 1; + }); + b.Precedes(a); + + TaskGraphEvent ev; + graph.SubmitOnExecutor(*m_executor, &ev); + ev.Wait(); + + EXPECT_EQ(2, x); + } + + TEST_F(TaskGraphTestFixture, MultipleIndependentTaskChains) + { + AZStd::atomic_int32_t x = 0; + constexpr int numChains = 5; + + TaskGraph graph; + for( int i = 0; i < numChains; ++i) + { + auto a = graph.AddTask( + defaultTD, + [&x] + { + x += 1; + }); + auto b = graph.AddTask( + defaultTD, + [&x] + { + x += 1; + }); + b.Precedes(a); + } + + TaskGraphEvent ev; + graph.SubmitOnExecutor(*m_executor, &ev); + ev.Wait(); + + EXPECT_EQ(2*numChains, x); + } + TEST_F(TaskGraphTestFixture, VariadicInterface) { int x = 0; @@ -388,6 +464,7 @@ namespace UnitTest EXPECT_EQ(3, x); } + // Waiting inside a task is disallowed , test that it fails correctly TEST_F(TaskGraphTestFixture, SpawnSubgraph) { AZStd::atomic x = 0; @@ -434,7 +511,10 @@ namespace UnitTest f.Precedes(g); TaskGraphEvent ev; subgraph.SubmitOnExecutor(*m_executor, &ev); + // TaskGraphEvent::Wait asserts if called on a worker thread, suppress & validate assert + AZ_TEST_START_TRACE_SUPPRESSION; ev.Wait(); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); }); auto d = graph.AddTask( defaultTD, @@ -464,8 +544,6 @@ namespace UnitTest TaskGraphEvent ev; graph.SubmitOnExecutor(*m_executor, &ev); ev.Wait(); - - EXPECT_EQ(3 | 0b100000, x); } TEST_F(TaskGraphTestFixture, RetainedGraph) diff --git a/Code/Framework/AzCore/Tests/Time/TimeTests.cpp b/Code/Framework/AzCore/Tests/Time/TimeTests.cpp new file mode 100644 index 0000000000..6727ef1501 --- /dev/null +++ b/Code/Framework/AzCore/Tests/Time/TimeTests.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace UnitTest +{ + class TimeTests + : public AllocatorsFixture + { + public: + void SetUp() override + { + SetupAllocator(); + m_timeComponent = new AZ::TimeSystemComponent; + } + + void TearDown() override + { + delete m_timeComponent; + TeardownAllocator(); + } + + AZ::TimeSystemComponent* m_timeComponent = nullptr; + }; + + TEST_F(TimeTests, TestConversionUsToMs) + { + AZ::TimeUs timeUs = AZ::TimeUs{ 1000 }; + AZ::TimeMs timeMs = AZ::TimeUsToMs(timeUs); + EXPECT_EQ(timeMs, AZ::TimeMs{ 1 }); + } + + TEST_F(TimeTests, TestConversionMsToUs) + { + AZ::TimeMs timeMs = AZ::TimeMs{ 1000 }; + AZ::TimeUs timeUs = AZ::TimeMsToUs(timeMs); + EXPECT_EQ(timeUs, AZ::TimeUs{ 1000000 }); + } + + TEST_F(TimeTests, TestClocks) + { + AZ::TimeUs timeUs = AZ::GetElapsedTimeUs(); + AZ::TimeMs timeMs = AZ::GetElapsedTimeMs(); + + AZ::TimeMs timeUsToMs = AZ::TimeUsToMs(timeUs); + int64_t delta = static_cast(timeMs) - static_cast(timeUsToMs); + EXPECT_LT(abs(delta), 1); + } +} diff --git a/Code/Framework/AzCore/Tests/UUIDTests.cpp b/Code/Framework/AzCore/Tests/UUIDTests.cpp index 5d4fb7a711..64b9048a62 100644 --- a/Code/Framework/AzCore/Tests/UUIDTests.cpp +++ b/Code/Framework/AzCore/Tests/UUIDTests.cpp @@ -7,6 +7,7 @@ */ #include #include +#include using namespace AZ; @@ -246,4 +247,27 @@ namespace UnitTest Uuid right = Uuid::CreateStringPermissive(permissiveStr1); EXPECT_EQ(left, right); } + + TEST_F(UuidTests, CreateStringPermissive_StringWithExtraData_Succeeds) + { + const char uuidStr[] = "{34D44249-E599-4B30-811F-4215C2DEA269}"; + Uuid left = Uuid::CreateString(uuidStr); + + const char permissiveStr[] = "0x34D44249-0xE5994B30-0x811F4215-0xC2DEA269 Hello World"; + Uuid right = Uuid::CreateStringPermissive(permissiveStr); + EXPECT_EQ(left, right); + + } + + TEST_F(UuidTests, CreateStringPermissive_StringWithLotsOfExtraData_Succeeds) + { + const char uuidStr[] = "{34D44249-E599-4B30-811F-4215C2DEA269}"; + Uuid left = Uuid::CreateString(uuidStr); + + const char permissiveStr[] = "0x34D44249-0xE5994B30-0x811F4215-0xC2DEA269 Hello World this is a really long string " + "with lots of extra data to make sure we can parse a long string without failing as long as the uuid is in " + "the beginning of the string then we should succeed"; + Uuid right = Uuid::CreateStringPermissive(permissiveStr); + EXPECT_EQ(left, right); + } } diff --git a/Code/Framework/AzCore/Tests/azcoretests_files.cmake b/Code/Framework/AzCore/Tests/azcoretests_files.cmake index c36d37d874..e155594aa0 100644 --- a/Code/Framework/AzCore/Tests/azcoretests_files.cmake +++ b/Code/Framework/AzCore/Tests/azcoretests_files.cmake @@ -61,6 +61,7 @@ set(FILES Slice.cpp State.cpp Statistics.cpp + StatisticalProfiler.cpp StreamerTests.cpp StringFunc.cpp SystemFile.cpp @@ -127,6 +128,7 @@ set(FILES Serialization/Json/UnorderedSetSerializerTests.cpp Serialization/Json/UnsupportedTypesSerializerTests.cpp Serialization/Json/UuidSerializerTests.cpp + Time/TimeTests.cpp Math/AabbTests.cpp Math/ColorTests.cpp Math/CrcTests.cpp diff --git a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp index 12974d03cf..1f99a594fa 100644 --- a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp +++ b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -76,11 +77,15 @@ namespace AzFramework { + namespace ApplicationInternal { static constexpr const char s_prefabSystemKey[] = "/Amazon/Preferences/EnablePrefabSystem"; static constexpr const char s_prefabWipSystemKey[] = "/Amazon/Preferences/EnablePrefabSystemWipFeatures"; static constexpr const char s_legacySlicesAssertKey[] = "/Amazon/Preferences/ShouldAssertForLegacySlicesUsage"; + static constexpr const char* DeprecatedFileIOAliasesRoot = "/O3DE/AzCore/FileIO/DeprecatedAliases"; + static constexpr const char* DeprecatedFileIOAliasesOldAliasKey = "OldAlias"; + static constexpr const char* DeprecatedFileIOAliasesNewAliasKey = "NewAlias"; } Application::Application() @@ -295,6 +300,7 @@ namespace AzFramework azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), + azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), @@ -477,14 +483,16 @@ namespace AzFramework newThreadDesc.m_cpuId = AFFINITY_MASK_USERTHREADS; newThreadDesc.m_name = newThreadName; AZStd::binary_semaphore binarySemaphore; - AZStd::thread newThread([&workForNewThread, &binarySemaphore, &newThreadName] - { - AZ_PROFILE_SCOPE(AzFramework, - "Application::PumpSystemEventLoopWhileDoingWorkInNewThread:ThreadWorker %s", newThreadName); + AZStd::thread newThread( + newThreadDesc, + [&workForNewThread, &binarySemaphore, &newThreadName] + { + AZ_PROFILE_SCOPE(AzFramework, + "Application::PumpSystemEventLoopWhileDoingWorkInNewThread:ThreadWorker %s", newThreadName); - workForNewThread(); - binarySemaphore.release(); - }, &newThreadDesc); + workForNewThread(); + binarySemaphore.release(); + }); while (!binarySemaphore.try_acquire_for(eventPumpFrequency)) { PumpSystemEventLoopUntilEmpty(); @@ -559,6 +567,68 @@ namespace AzFramework } } + struct DeprecatedAliasesKeyVisitor + : AZ::SettingsRegistryInterface::Visitor + { + using VisitResponse = AZ::SettingsRegistryInterface::VisitResponse; + using VisitAction = AZ::SettingsRegistryInterface::VisitAction; + using Type = AZ::SettingsRegistryInterface::Type; + + using AZ::SettingsRegistryInterface::Visitor::Visit; + + VisitResponse Traverse(AZStd::string_view path, AZStd::string_view, + VisitAction action, Type type) override + { + if (action == AZ::SettingsRegistryInterface::VisitAction::Begin) + { + if (type == AZ::SettingsRegistryInterface::Type::Array) + { + m_parentArrayPath = path; + } + + // Strip off last path segment from json path and check if is a child element of the array + if (AZ::StringFunc::TokenizeLast(path, '/'); + m_parentArrayPath == path) + { + m_aliases.emplace_back(); + } + } + else if (action == AZ::SettingsRegistryInterface::VisitAction::End) + { + if (type == AZ::SettingsRegistryInterface::Type::Array) + { + m_parentArrayPath = AZStd::string{}; + } + } + + return AZ::SettingsRegistryInterface::VisitResponse::Continue; + } + + void Visit(AZStd::string_view, AZStd::string_view valueName, Type, AZStd::string_view value) override + { + if (!m_aliases.empty()) + { + if (valueName == ApplicationInternal::DeprecatedFileIOAliasesOldAliasKey) + { + m_aliases.back().m_oldAlias = value; + } + else if (valueName == ApplicationInternal::DeprecatedFileIOAliasesNewAliasKey) + { + m_aliases.back().m_newAlias = value; + } + } + } + + struct AliasPair + { + AZStd::string m_oldAlias; + AZStd::string m_newAlias; + }; + AZStd::vector m_aliases; + + private: + AZStd::string m_parentArrayPath; + }; static void CreateUserCache(const AZ::IO::FixedMaxPath& cacheUserPath, AZ::IO::FileIOBase& fileIoBase) { @@ -606,9 +676,8 @@ namespace AzFramework void Application::SetFileIOAliases() { - if (m_archiveFileIO) + if (auto fileIoBase = m_archiveFileIO.get(); fileIoBase) { - auto fileIoBase = m_archiveFileIO.get(); // Set up the default file aliases based on the settings registry fileIoBase->SetAlias("@engroot@", GetEngineRoot()); fileIoBase->SetAlias("@projectroot@", GetEngineRoot()); @@ -616,29 +685,20 @@ namespace AzFramework { AZ::IO::FixedMaxPath pathAliases; - if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheProjectRootFolder)) - { - fileIoBase->SetAlias("@projectcache@", pathAliases.c_str()); - } pathAliases.clear(); if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder)) { - fileIoBase->SetAlias("@assets@", pathAliases.c_str()); - fileIoBase->SetAlias("@projectplatformcache@", pathAliases.c_str()); - fileIoBase->SetAlias("@root@", pathAliases.c_str()); // Deprecated Use @projectplatformcache@ + fileIoBase->SetAlias("@products@", pathAliases.c_str()); } pathAliases.clear(); if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder)) { fileIoBase->SetAlias("@engroot@", pathAliases.c_str()); - fileIoBase->SetAlias("@devroot@", pathAliases.c_str()); // Deprecated - Use @engroot@ } pathAliases.clear(); if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath)) { - fileIoBase->SetAlias("@devassets@", pathAliases.c_str()); // Deprecated - Use @projectsourceassets@ fileIoBase->SetAlias("@projectroot@", pathAliases.c_str()); - fileIoBase->SetAlias("@projectsourceassets@", (pathAliases / "Assets").c_str()); } } @@ -659,6 +719,15 @@ namespace AzFramework } fileIoBase->SetAlias("@log@", projectLogPath.c_str()); fileIoBase->CreatePath(projectLogPath.c_str()); + + DeprecatedAliasesKeyVisitor visitor; + if (m_settingsRegistry->Visit(visitor, ApplicationInternal::DeprecatedFileIOAliasesRoot)) + { + for (const auto& [oldAlias, newAlias] : visitor.m_aliases) + { + fileIoBase->SetDeprecatedAlias(oldAlias, newAlias); + } + } } } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp index d2a81102dc..e5a42aabbc 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp @@ -1121,7 +1121,7 @@ namespace AZ::IO if (AZ::IO::FixedMaxPath pathBindRoot; !AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, szBindRoot)) { - AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, "@assets@"); + AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, "@products@"); desc.m_pathBindRoot = pathBindRoot.LexicallyNormal().String(); } else @@ -1631,7 +1631,20 @@ namespace AZ::IO return nullptr; } - ZipDir::CacheFactory factory(ZipDir::ZD_INIT_FAST, nFactoryFlags); + ZipDir::InitMethod initType = ZipDir::InitMethod::Default; + if (!ZipDir::IsReleaseConfig) + { + if ((nFlags & INestedArchive::FLAGS_FULL_VALIDATE) != 0) + { + initType = ZipDir::InitMethod::FullValidation; + } + else if ((nFlags & INestedArchive::FLAGS_VALIDATE_HEADERS) != 0) + { + initType = ZipDir::InitMethod::ValidateHeaders; + } + } + + ZipDir::CacheFactory factory(initType, nFactoryFlags); ZipDir::CachePtr cache = factory.New(szFullPath->c_str()); if (cache) @@ -1794,9 +1807,9 @@ namespace AZ::IO if (m_eRecordFileOpenList != IArchive::RFOM_Disabled) { // we only want to record ASSET access - // assets are identified as files that are relative to the resolved @assets@ alias path + // assets are identified as files that are relative to the resolved @products@ alias path auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); - const char* aliasValue = fileIoBase->GetAlias("@assets@"); + const char* aliasValue = fileIoBase->GetAlias("@products@"); if (AZ::IO::FixedMaxPath resolvedFilePath; fileIoBase->ResolvePath(resolvedFilePath, szFilename) diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp index 85ce0b6f9a..9e6e1034ea 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp @@ -546,6 +546,16 @@ namespace AZ::IO realUnderlyingFileIO->GetAlias(alias); } + void ArchiveFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) + { + FileIOBase* realUnderlyingFileIO = FileIOBase::GetDirectInstance(); + if (!realUnderlyingFileIO) + { + return; + } + realUnderlyingFileIO->SetDeprecatedAlias(oldAlias, newAlias); + } + AZStd::optional ArchiveFileIO::ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const { if ((!inOutBuffer) || (bufferLength == 0)) diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h index 21cef18a7a..7fd4e15e3a 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h @@ -63,6 +63,7 @@ namespace AZ::IO IO::Result FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) override; void SetAlias(const char* alias, const char* path) override; void ClearAlias(const char* alias) override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp index d7a92efbf6..7b483dc5de 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp @@ -186,8 +186,8 @@ namespace AZ::IO { // filter out the stuff which does not match. - // the problem here is that szDir might be something like "@assets@/levels/*" - // but our archive might be mounted at the root, or at some other folder at like "@assets@" or "@assets@/levels/mylevel" + // the problem here is that szDir might be something like "@products@/levels/*" + // but our archive might be mounted at the root, or at some other folder at like "@products@" or "@products@/levels/mylevel" // so there's really no way to filter out opening the pack and looking at the files inside. // however, the bind root is not part of the inner zip entry name either // and the ZipDir::FindFile actually expects just the chopped off piece. @@ -202,22 +202,22 @@ namespace AZ::IO // Example: - // "@assets@\\levels\\*" <--- szDir - // "@assets@\\" <--- mount point + // "@products@\\levels\\*" <--- szDir + // "@products@\\" <--- mount point // ~~~~~~~~~~~ Common part // "levels\\*" <---- remainder that is not in common // "" <--- mount point remainder. In this case, we should scan the contents of the pak for the remainder // Example: - // "@assets@\\levels\\*" <--- szDir - // "@assets@\\levels\\mylevel\\" <--- mount point (its level.pak) + // "@products@\\levels\\*" <--- szDir + // "@products@\\levels\\mylevel\\" <--- mount point (its level.pak) // ~~~~~~~~~~~~~~~~~~ common part // "*" <---- remainder that is not in common // "mylevel\\" <--- mount point remainder. // example: - // "@assets@\\levels\\otherlevel\\*" <--- szDir - // "@assets@\\levels\\mylevel\\" <--- mount point (its level.pak) + // "@products@\\levels\\otherlevel\\*" <--- szDir + // "@products@\\levels\\mylevel\\" <--- mount point (its level.pak) // "otherlevel\\*" <---- remainder // "mylevel\\" <--- mount point remainder. @@ -249,7 +249,7 @@ namespace AZ::IO // which means we may search inside the pack. ScanInZip(it->pZip.get(), sourcePathRemainder.Native()); } - + } } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/INestedArchive.h b/Code/Framework/AzFramework/AzFramework/Archive/INestedArchive.h index f85fd273ce..e89d16ee5d 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/INestedArchive.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/INestedArchive.h @@ -11,7 +11,9 @@ #include #include +#include #include +#include #include namespace AZ::IO @@ -71,6 +73,13 @@ namespace AZ::IO // multiple times FLAGS_DONT_COMPACT = 1 << 5, + // if this is set, validate header data when opening the archive + FLAGS_VALIDATE_HEADERS = 1 << 9, + + // if this is set, validate header data when opening the archive and validate CRCs when decompressing + // & reading files. + FLAGS_FULL_VALIDATE = 1 << 10, + // Disable a pak file without unloading it, this flag is used in combination with patches and multiplayer // to ensure that specific paks stay in the position(to keep the same priority) but being disabled // when running multiplayer @@ -128,6 +137,10 @@ namespace AZ::IO // Deletes all files and directories in the archive. virtual int RemoveAll() = 0; + // Summary: + // Lists all the files in the archive. + virtual int ListAllFiles(AZStd::vector& outFileEntries) = 0; + // Summary: // Finds the file; you don't have to close the returned handle. // Returns: diff --git a/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp b/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp index 0a6116d313..4c6ed0363e 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp @@ -94,7 +94,7 @@ namespace AZ::IO::Internal } AZStd::smatch matches; - const AZStd::regex lodRegex("@assets@\\\\(.*)_lod[0-9]+(\\.cgfm?)"); + const AZStd::regex lodRegex("@products@\\\\(.*)_lod[0-9]+(\\.cgfm?)"); if (!AZStd::regex_match(szPath, matches, lodRegex) || matches.size() != 3) { // The current file is not a valid LOD file diff --git a/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.cpp b/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.cpp index 1e0f237df5..49a44b76fa 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.cpp @@ -89,11 +89,51 @@ namespace AZ::IO return m_pCache->RemoveDir(fullPath); } + ////////////////////////////////////////////////////////////////////////// int NestedArchive::RemoveAll() { return m_pCache->RemoveAll(); } + ////////////////////////////////////////////////////////////////////////// + // Helper for 'ListAllFiles' to recursively traverse the FileEntryTree and gather all the files + void EnumerateFilesRecursive(AZ::IO::Path currentPath, ZipDir::FileEntryTree* currentTree, AZStd::vector& fileList) + { + // Drill down directories first... + for (auto dirIter = currentTree->GetDirBegin(); dirIter != currentTree->GetDirEnd(); ++dirIter) + { + if (ZipDir::FileEntryTree* subTree = currentTree->GetDirEntry(dirIter); + subTree != nullptr) + { + EnumerateFilesRecursive(currentPath / currentTree->GetDirName(dirIter), subTree, fileList); + } + } + + // Then enumerate the files in current directory... + for (auto fileIter = currentTree->GetFileBegin(); fileIter != currentTree->GetFileEnd(); ++fileIter) + { + fileList.emplace_back(currentPath / currentTree->GetFileName(fileIter)); + } + } + + ////////////////////////////////////////////////////////////////////////// + // lists all files in the archive + int NestedArchive::ListAllFiles(AZStd::vector& outFileEntries) + { + AZStd::vector filesInArchive; + + ZipDir::FileEntryTree* tree = m_pCache->GetRoot(); + if (!tree) + { + return ZipDir::ZD_ERROR_UNEXPECTED; + } + + EnumerateFilesRecursive(AZ::IO::Path{ AZ::IO::PosixPathSeparator }, tree, filesInArchive); + + AZStd::swap(outFileEntries, filesInArchive); + return ZipDir::ZD_ERROR_SUCCESS; + } + ////////////////////////////////////////////////////////////////////////// // Adds a new file to the zip or update an existing one // adds a directory (creates several nested directories if needed) diff --git a/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.h b/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.h index 34bbcdc201..59722703f2 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/NestedArchive.h @@ -39,7 +39,7 @@ namespace AZ::IO NestedArchive(IArchive* pArchive, AZStd::string_view strBindRoot, ZipDir::CachePtr pCache, uint32_t nFlags = 0); ~NestedArchive() override; - + auto GetRootFolderHandle() -> Handle override; // Adds a new file to the zip or update an existing one @@ -68,6 +68,9 @@ namespace AZ::IO // deletes all files from the archive int RemoveAll() override; + // lists all the files in the archive + int ListAllFiles(AZStd::vector& outFileEntries) override; + // finds the file; you don't have to close the returned handle Handle FindFile(AZStd::string_view szRelativePath) override; @@ -79,7 +82,6 @@ namespace AZ::IO // returns the full path to the archive file AZ::IO::PathView GetFullPath() const override; - ZipDir::Cache* GetCache(); uint32_t GetFlags() const override; bool SetFlags(uint32_t nFlagsToSet) override; @@ -87,12 +89,15 @@ namespace AZ::IO bool SetPackAccessible(bool bAccessible) override; + ZipDir::Cache* GetCache(); + protected: // returns the pointer to the relative file path to be passed // to the underlying Cache pointer. Uses the given buffer to construct the path. // returns nullptr if the file path is invalid AZ::IO::FixedMaxPathString AdjustPath(AZStd::string_view szRelativePath); + ZipDir::CachePtr m_pCache; // the binding root may be empty string - in this case, the absolute path binding won't work AZ::IO::Path m_strBindRoot; diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp index d17dbd0837..13d5b0f723 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp @@ -101,10 +101,11 @@ namespace AZ::IO::ZipDir FileEntry* operator -> () { return m_pFileEntry; } FileEntryTransactionAdd(Cache* pCache, AZStd::string_view szRelativePath) : m_pCache(pCache) + , m_szRelativePath(AZ::IO::PosixPathSeparator) , m_bCommitted(false) { // Update the cache string pool with the relative path to the file - auto pathIt = m_pCache->m_relativePathPool.emplace(AZ::IO::PathView(szRelativePath).LexicallyNormal()); + auto pathIt = m_pCache->m_relativePathPool.emplace(AZ::IO::PathView(szRelativePath, AZ::IO::PosixPathSeparator).LexicallyNormal()); m_szRelativePath = *pathIt.first; // this is the name of the directory - create it or find it m_pFileEntry = m_pCache->GetRoot()->Add(m_szRelativePath.Native()); @@ -740,6 +741,16 @@ namespace AZ::IO::ZipDir { return ZD_ERROR_CORRUPTED_DATA; } + if (pFileEntry->bCheckCRCNextRead) + { + pFileEntry->bCheckCRCNextRead = false; + uLong uCRC32 = AZ::Crc32((Bytef*)pUncompressed, nSizeUncompressed); + if (uCRC32 != pFileEntry->desc.lCRC32) + { + AZ_Warning("Archive", false, "ZD_ERROR_CRC32_CHECK: Uncompressed stream CRC32 check failed"); + return ZD_ERROR_CRC32_CHECK; + } + } } } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h index 646410f8db..ae1e3dfa9c 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.cpp index 5c5e93d441..d5bd4d2840 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.cpp @@ -29,7 +29,7 @@ namespace AZ::IO::ZipDir // this sets the window size of the blocks of data read from the end of the file to find the Central Directory Record // since normally there are no static constexpr size_t CDRSearchWindowSize = 0x100; - CacheFactory::CacheFactory(InitMethodEnum nInitMethod, uint32_t nFlags) + CacheFactory::CacheFactory(InitMethod nInitMethod, uint32_t nFlags) { m_nCDREndPos = 0; m_bBuildFileEntryMap = false; // we only need it for validation/debugging @@ -448,7 +448,6 @@ namespace AZ::IO::ZipDir // builds up the m_mapFileEntries bool CacheFactory::BuildFileEntryMap() { - Seek(m_CDREnd.lCDROffset); if (m_CDREnd.lCDRSize == 0) @@ -530,14 +529,6 @@ namespace AZ::IO::ZipDir { // Add this file entry. char* str = reinterpret_cast(pFileName); - for (int i = 0; i < pFile->nFileNameLength; i++) - { - str[i] = std::tolower(str[i], std::locale()); - if (str[i] == AZ_WRONG_FILESYSTEM_SEPARATOR) - { - str[i] = AZ_CORRECT_FILESYSTEM_SEPARATOR; - } - } str[pFile->nFileNameLength] = 0; // Not standard!, may overwrite signature of the next memory record data in zip. AddFileEntry(str, pFile, extra); } @@ -574,11 +565,7 @@ namespace AZ::IO::ZipDir FileEntryBase fileEntry(*pFileHeader, extra); - // when using encrypted headers we should always initialize data offsets from CDR - if ((m_encryptedHeaders != ZipFile::HEADERS_NOT_ENCRYPTED || m_nInitMethod >= ZD_INIT_FULL) && pFileHeader->desc.lSizeCompressed) - { - InitDataOffset(fileEntry, pFileHeader); - } + InitDataOffset(fileEntry, pFileHeader); if (m_bBuildFileEntryMap) { @@ -606,142 +593,81 @@ namespace AZ::IO::ZipDir { Seek(pFileHeader->lLocalHeaderOffset); - // read the local file header and the name (for validation) into the buffer - AZStd::vectorpBuffer; - uint32_t nBufferLength = sizeof(ZipFile::LocalFileHeader) + pFileHeader->nFileNameLength; - pBuffer.resize(nBufferLength); - Read(&pBuffer[0], nBufferLength); - - // validate the local file header (compare with the CDR file header - they should contain basically the same information) - const auto* pLocalFileHeader = reinterpret_cast(&pBuffer[0]); - if (pFileHeader->desc != pLocalFileHeader->desc - || pFileHeader->nMethod != pLocalFileHeader->nMethod - || pFileHeader->nFileNameLength != pLocalFileHeader->nFileNameLength - // for a tough validation, we can compare the timestamps of the local and central directory entries - // but we won't do that for backward compatibility with ZipDir - //|| pFileHeader->nLastModDate != pLocalFileHeader->nLastModDate - //|| pFileHeader->nLastModTime != pLocalFileHeader->nLastModTime - ) - { - AZ_Warning("Archive", false, "ZD_ERROR_VALIDATION_FAILED:" - " The local file header descriptor doesn't match the basic parameters declared in the global file header in the file." - " The archive content is misconsistent and may be damaged. Please try to repair the archive"); - return; - } + // Read only the LocalFileHeader w/ no additional bytes ('name' or 'extra' fields) + AZStd::vector buffer; + uint32_t bufferLen = sizeof(ZipFile::LocalFileHeader); + buffer.resize_no_construct(bufferLen); + Read(buffer.data(), bufferLen); - // now compare the local file name with the one recorded in CDR: they must match. - auto CompareNoCase = [](const char lhs, const char rhs) { return std::tolower(lhs, std::locale()) == std::tolower(rhs, std::locale()); }; - auto zipFileDataBegin = pBuffer.begin() + sizeof(ZipFile::LocalFileHeader); - auto zipFileDataEnd = zipFileDataBegin + pFileHeader->nFileNameLength; - if (!AZStd::equal(zipFileDataBegin, zipFileDataEnd, reinterpret_cast(pFileHeader + 1), CompareNoCase)) - { - // either file name, or the extra field do not match - AZ_Warning("Archive", false, "ZD_ERROR_VALIDATION_FAILED:" - " The local file header contains file name which does not match the file name of the global file header." - " The archive content is misconsistent with its directory. Please repair the archive"); - return; - } + const auto* localFileHeader = reinterpret_cast(buffer.data()); - fileEntry.nFileDataOffset = pFileHeader->lLocalHeaderOffset + sizeof(ZipFile::LocalFileHeader) + pLocalFileHeader->nFileNameLength + pLocalFileHeader->nExtraFieldLength; - } + // set the correct file data offset... + fileEntry.nFileDataOffset = pFileHeader->lLocalHeaderOffset + sizeof(ZipFile::LocalFileHeader) + + localFileHeader->nFileNameLength + localFileHeader->nExtraFieldLength; - // make sure it's the same file and the fileEntry structure is properly initialized - AZ_Assert(fileEntry.nFileHeaderOffset == pFileHeader->lLocalHeaderOffset, "The file entry header offset doesn't match the file header local offst"); - - fileEntry.nEOFOffset = fileEntry.nFileDataOffset + fileEntry.desc.lSizeCompressed; - - if (fileEntry.nFileDataOffset >= m_nCDREndPos) - { - AZ_Warning("Archive", false, "ZD_ERROR_VALIDATION_FAILED:" - " The global file header declares the file which crosses the boundaries of the archive." - " The archive is either corrupted or truncated, please try to repair it"); - return; - } + fileEntry.nEOFOffset = fileEntry.nFileDataOffset + fileEntry.desc.lSizeCompressed; - if (m_nInitMethod >= ZD_INIT_VALIDATE) - { - Validate(fileEntry); - } - } + if (m_nInitMethod != ZipDir::InitMethod::Default) + { + if (m_nInitMethod == ZipDir::InitMethod::FullValidation) + { + // Mark the FileEntry to check CRC when the next read occurs + fileEntry.bCheckCRCNextRead = true; + } - ////////////////////////////////////////////////////////////////////////// - // reads the file pointed by the given header and entry (they must be coherent) - // and decompresses it; then calculates and validates its CRC32 - void CacheFactory::Validate(const FileEntryBase& fileEntry) - { - AZStd::vector pBuffer; - // validate the file contents - // allocate memory for both the compressed data and uncompressed data - pBuffer.resize(fileEntry.desc.lSizeCompressed + fileEntry.desc.lSizeUncompressed); - char* pUncompressed = &pBuffer[fileEntry.desc.lSizeCompressed]; - char* pCompressed = &pBuffer[0]; + // Timestamps + if (pFileHeader->nLastModDate != localFileHeader->nLastModDate + || pFileHeader->nLastModTime != localFileHeader->nLastModTime) + { + AZ_Warning("Archive", false, "ZD_ERROR_VALIDATION_FAILED: (%s)\n" + " The local file header's modification timestamps don't match that of the global file header in the archive." + " The archive timestamps are inconsistent and may be damaged. Check the archive file.", m_szFilename.c_str()); + // don't return here, it may be ok. + } - AZ_Assert(fileEntry.nFileDataOffset != FileEntry::INVALID_DATA_OFFSET, "File entry has invalid data offset of %" PRIx32, FileEntry::INVALID_DATA_OFFSET); - Seek(fileEntry.nFileDataOffset); + // Validate data + if (pFileHeader->desc != localFileHeader->desc // this checks CRCs and compressed/uncompressed sizes + || pFileHeader->nMethod != localFileHeader->nMethod + || pFileHeader->nFileNameLength != localFileHeader->nFileNameLength) + { + AZ_Warning("Archive", false, "ZD_ERROR_VALIDATION_FAILED: (%s)\n" + " The local file header descriptor doesn't match basic parameters declared in the global file header in the file." + " The archive content is inconsistent and may be damaged. Please try to repair the archive.", m_szFilename.c_str()); + // return here because further checks aren't worse than this. + return; + } - Read(pCompressed, fileEntry.desc.lSizeCompressed); + // Read extra data + uint32_t extraDataLen = localFileHeader->nFileNameLength + localFileHeader->nExtraFieldLength; + buffer.resize_no_construct(buffer.size() + extraDataLen); + Read(buffer.data() + buffer.size(), extraDataLen); - size_t nDestSize = fileEntry.desc.lSizeUncompressed; - int nError = Z_OK; - if (fileEntry.nMethod) - { - nError = ZipRawUncompress(pUncompressed, &nDestSize, pCompressed, fileEntry.desc.lSizeCompressed); - } - else - { - AZ_Assert(fileEntry.desc.lSizeCompressed == fileEntry.desc.lSizeUncompressed, "Uncompressed file does not have the same commpressed %u and uncompressed file sizes %u", - fileEntry.desc.lSizeCompressed, fileEntry.desc.lSizeUncompressed); - memcpy(pUncompressed, pCompressed, fileEntry.desc.lSizeUncompressed); - } - switch (nError) - { - case Z_OK: - break; - case Z_MEM_ERROR: - AZ_Warning("Archive", false, "ZD_ERROR_ZLIB_NO_MEMORY: ZLib reported out-of-memory error"); - return; - case Z_BUF_ERROR: - AZ_Warning("Archive", false, "ZD_ERROR_ZLIB_CORRUPTED_DATA: ZLib reported compressed stream buffer error"); - return; - case Z_DATA_ERROR: - AZ_Warning("Archive", false, "ZD_ERROR_ZLIB_CORRUPTED_DATA: ZLib reported compressed stream data error"); - return; - default: - AZ_Warning("Archive", false, "ZD_ERROR_ZLIB_FAILED: ZLib reported an unexpected unknown error"); - return; - } + // Compare local file name with the CDR file name, they should match + AZStd::string_view zipFileName{ buffer.data() + sizeof(ZipFile::LocalFileHeader), localFileHeader->nFileNameLength }; + AZStd::string_view cdrFileName{ reinterpret_cast(pFileHeader + 1), pFileHeader->nFileNameLength }; + if (zipFileName != cdrFileName) + { + AZ_Warning("Archive", false, "ZD_ERROR_VALIDATION_FAILED: (%s)\n" + " The file name in the local file header doesn't match the name in the global file header." + " The archive content is inconsisten with the directory. Please check the archive.", m_szFilename.c_str()); + } - if (nDestSize != fileEntry.desc.lSizeUncompressed) - { - AZ_Warning("Archive", false, "ZD_ERROR_CORRUPTED_DATA: Uncompressed stream doesn't match the size of uncompressed file stored in the archive file headers"); - return; - } + // CDR and local "extra field" lengths may be different, should we compare them if they are equal? - uLong uCRC32 = AZ::Crc32((Bytef*)pUncompressed, nDestSize); - if (uCRC32 != fileEntry.desc.lCRC32) - { - AZ_Warning("Archive", false, "ZD_ERROR_CRC32_CHECK: Uncompressed stream CRC32 check failed"); - return; - } - } + // make sure it's the same file and the fileEntry structure is properly initialized + AZ_Assert(fileEntry.nFileHeaderOffset == pFileHeader->lLocalHeaderOffset, + "The file entry header offset doesn't match the file header local offst (%s)", m_szFilename.c_str()); + if (fileEntry.nFileDataOffset >= m_nCDREndPos) + { + AZ_Warning("Archive", false, "ZD_ERROR_VALIDATION_FAILED: (%s)\n" + " The global file header declares the file which crosses the boundaries of the archive." + " The archive is either corrupted or truncated, please try to repair it", m_szFilename.c_str()); + } - ////////////////////////////////////////////////////////////////////////// - // extracts the file path from the file header with subsequent information - // may, or may not, put all letters to lower-case (depending on whether the system is to be case-sensitive or not) - // it's the responsibility of the caller to ensure that the file name is in readable valid memory - char* CacheFactory::GetFilePath(const char* pFileName, uint16_t nFileNameLength) - { - static char strResult[AZ_MAX_PATH_LEN]; - AZ_Assert(nFileNameLength < AZ_MAX_PATH_LEN, "Only filenames shorter than %zu can be copied from filename parameter", AZ_MAX_PATH_LEN); - memcpy(strResult, pFileName, nFileNameLength); - strResult[nFileNameLength] = 0; - for (int i = 0; i < nFileNameLength; i++) - { - strResult[i] = std::tolower(strResult[i], std::locale{}); + // End Validation + } } - - return strResult; } // seeks in the file relative to the starting position diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.h b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.h index c31d4d7dfd..1612829f13 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCacheFactory.h @@ -39,7 +39,7 @@ namespace AZ::IO::ZipDir // initializes the internal structures // nFlags can have FLAGS_READ_ONLY flag, in this case the object will be opened only for reading - CacheFactory(InitMethodEnum nInitMethod, uint32_t nFlags = 0); + CacheFactory(InitMethod nInitMethod, uint32_t nFlags = 0); ~CacheFactory(); // the new function creates a new cache @@ -66,28 +66,6 @@ namespace AZ::IO::ZipDir // This function can actually modify strFilePath variable, make sure you use a copy of the real path. void AddFileEntry(char* strFilePath, const ZipFile::CDRFileHeader* pFileHeader, const SExtraZipFileData& extra);// throw (ErrorEnum); - // extracts the file path from the file header with subsequent information - // may, or may not, put all letters to lower-case (depending on whether the system is to be case-sensitive or not) - // it's the responsibility of the caller to ensure that the file name is in readable valid memory - char* GetFilePath(const ZipFile::CDRFileHeader* pFileHeader) - { - return GetFilePath((const char*)(pFileHeader + 1), pFileHeader->nFileNameLength); - } - // extracts the file path from the file header with subsequent information - // may, or may not, put all letters to lower-case (depending on whether the system is to be case-sensitive or not) - // it's the responsibility of the caller to ensure that the file name is in readable valid memory - char* GetFilePath(const ZipFile::LocalFileHeader* pFileHeader) - { - return GetFilePath((const char*)(pFileHeader + 1), pFileHeader->nFileNameLength); - } - // extracts the file path from the file header with subsequent information - // may, or may not, put all letters to lower-case (depending on whether the system is to be case-sensitive or not) - // it's the responsibility of the caller to ensure that the file name is in readable valid memory - char* GetFilePath(const char* pFileName, uint16_t nFileNameLength); - - // validates (if the init method has the corresponding value) the given file/header - void Validate(const FileEntryBase& fileEntry); - // initializes the actual data offset in the file in the fileEntry structure // searches to the local file header, reads it and calculates the actual offset in the file void InitDataOffset(FileEntryBase& fileEntry, const ZipFile::CDRFileHeader* pFileHeader); @@ -104,7 +82,7 @@ namespace AZ::IO::ZipDir AZStd::string m_szFilename; CZipFile m_fileExt; - InitMethodEnum m_nInitMethod; + InitMethod m_nInitMethod; uint32_t m_nFlags; ZipFile::CDREnd m_CDREnd; @@ -129,7 +107,7 @@ namespace AZ::IO::ZipDir ZipFile::CryCustomEncryptionHeader m_headerEncryption; ZipFile::CrySignedCDRHeader m_headerSignature; ZipFile::CryCustomExtendedHeader m_headerExtended; - }; + } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp index 729f394b9d..ab9c356d7f 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp @@ -68,14 +68,14 @@ namespace AZ::IO::ZipDir { for (FileEntryTree::SubdirMap::iterator it = pTree->GetDirBegin(); it != pTree->GetDirEnd(); ++it) { - AddAllFiles(it->second.get(), (AZ::IO::Path(strRoot) / it->first).Native()); + AddAllFiles(it->second.get(), (AZ::IO::Path(strRoot, AZ::IO::PosixPathSeparator) / it->first).Native()); } for (FileEntryTree::FileMap::iterator it = pTree->GetFileBegin(); it != pTree->GetFileEnd(); ++it) { FileRecord rec; rec.pFileEntryBase = pTree->GetFileEntry(it); - rec.strPath = (AZ::IO::Path(strRoot) / it->first).Native(); + rec.strPath = (AZ::IO::Path(strRoot, AZ::IO::PosixPathSeparator) / it->first).Native(); push_back(rec); } } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.h b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.h index 9295a7dd95..c890d498e4 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.h @@ -119,19 +119,28 @@ namespace AZ::IO::ZipDir const char* m_szDescription; }; +#if defined(_RELEASE) + inline static constexpr bool IsReleaseConfig{ true }; +#else + inline static constexpr bool IsReleaseConfig{}; +#endif // _RELEASE + // possible initialization methods - enum InitMethodEnum + enum class InitMethod { - // initialize as fast as possible, with minimal validation - ZD_INIT_FAST, - // after initialization, scan through all file headers, precache the actual file data offset values and validate the headers - ZD_INIT_FULL, - // scan all file headers and try to decompress the data, searching for corrupted files - ZD_INIT_VALIDATE_IN_MEMORY, - // store archive in memory - ZD_INIT_VALIDATE, - // maximum level of validation, checks for integrity of the archive - ZD_INIT_VALIDATE_MAX = ZD_INIT_VALIDATE + // initializes without any sort of extra validation steps + Default, + + // initializes with extra validation steps + // not available in RELEASE + // will check CDR and local headers data match + ValidateHeaders, + + // initializes with extra validation steps + // not available in RELEASE + // will check CDR and local headers data match + // will check file data CRC matches (when file is read) + FullValidation, }; // Uncompresses raw (without wrapping) data that is compressed with method 8 (deflated) in the Zip file @@ -184,7 +193,11 @@ namespace AZ::IO::ZipDir // the offset to the start of the next file's header - this // can be used to calculate the available space in zip file uint32_t nEOFOffset{}; + + // whether to check the CRC upon the next data read + bool bCheckCRCNextRead{}; }; + // this is the record about the file in the Zip file. struct FileEntry : FileEntryBase diff --git a/Code/Framework/AzFramework/AzFramework/Asset/AssetBundleManifest.h b/Code/Framework/AzFramework/AzFramework/Asset/AssetBundleManifest.h index 9e05263c57..9760482231 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/AssetBundleManifest.h +++ b/Code/Framework/AzFramework/AzFramework/Asset/AssetBundleManifest.h @@ -8,7 +8,10 @@ #pragma once -#include +#include +#include +#include +#include namespace AZ { diff --git a/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp b/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp index 9b1946701c..e6b8211c28 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp +++ b/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp @@ -725,7 +725,7 @@ namespace AzFramework if (!info.m_relativePath.empty()) { - const char* devAssetRoot = fileIO->GetAlias("@devassets@"); + const char* devAssetRoot = fileIO->GetAlias("@projectroot@"); if (devAssetRoot) { AZ::Data::AssetStreamInfo streamInfo; diff --git a/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.cpp b/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.cpp index d16f4bf459..b95efc4dff 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.cpp +++ b/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.cpp @@ -8,6 +8,7 @@ */ #include +#include namespace AzFramework { diff --git a/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.h b/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.h index 2ad895596b..e982cb54e1 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.h +++ b/Code/Framework/AzFramework/AzFramework/Asset/AssetSeedList.h @@ -8,7 +8,6 @@ */ #pragma once -#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Asset/Benchmark/BenchmarkAsset.cpp b/Code/Framework/AzFramework/AzFramework/Asset/Benchmark/BenchmarkAsset.cpp index cea1cb1d8e..351eb97245 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/Benchmark/BenchmarkAsset.cpp +++ b/Code/Framework/AzFramework/AzFramework/Asset/Benchmark/BenchmarkAsset.cpp @@ -7,6 +7,7 @@ */ #include +#include namespace AzFramework { diff --git a/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.cpp b/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.cpp index 87e603015a..29cfdc5ca7 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.cpp +++ b/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.cpp @@ -7,6 +7,7 @@ */ #include +#include #include namespace AzFramework @@ -36,4 +37,36 @@ namespace AzFramework return ""; } + void SimpleAssetReferenceBase::Reflect(AZ::ReflectContext *context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(1) + ->Field("AssetPath", &SimpleAssetReferenceBase::m_assetPath); + + AZ::EditContext* edit = serializeContext->GetEditContext(); + if (edit) + { + edit->Class("Asset path", "Asset reference as a project-relative path") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::Hide) + ; + } + } + + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class() + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Category, "Asset") + ->Attribute(AZ::Script::Attributes::Module, "asset") + ->Property("assetPath", &SimpleAssetReferenceBase::GetAssetPath, nullptr) + ->Property("assetType", &SimpleAssetReferenceBase::GetAssetType, nullptr) + ->Property("fileFilter", &SimpleAssetReferenceBase::GetFileFilter, nullptr) + ->Method("SetAssetPath", &SimpleAssetReferenceBase::SetAssetPath) + ->Attribute(AZ::Script::Attributes::Alias, "set_asset_path") + ; + } + } } // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.h b/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.h index 7c7a1b4fb2..a7525e90bd 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.h +++ b/Code/Framework/AzFramework/AzFramework/Asset/SimpleAsset.h @@ -42,7 +42,6 @@ */ #include -#include #include #include #include @@ -74,38 +73,7 @@ namespace AzFramework virtual AZ::Data::AssetType GetAssetType() const = 0; virtual const char* GetFileFilter() const = 0; - static void Reflect(AZ::ReflectContext* context) - { - if (auto serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Version(1) - ->Field("AssetPath", &SimpleAssetReferenceBase::m_assetPath); - - AZ::EditContext* edit = serializeContext->GetEditContext(); - if (edit) - { - edit->Class("Asset path", "Asset reference as a project-relative path") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::Hide) - ; - } - } - - if (auto behaviorContext = azrtti_cast(context)) - { - behaviorContext->Class() - ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) - ->Attribute(AZ::Script::Attributes::Category, "Asset") - ->Attribute(AZ::Script::Attributes::Module, "asset") - ->Property("assetPath", &SimpleAssetReferenceBase::GetAssetPath, nullptr) - ->Property("assetType", &SimpleAssetReferenceBase::GetAssetType, nullptr) - ->Property("fileFilter", &SimpleAssetReferenceBase::GetFileFilter, nullptr) - ->Method("SetAssetPath", &SimpleAssetReferenceBase::SetAssetPath) - ->Attribute(AZ::Script::Attributes::Alias, "set_asset_path") - ; - } - } + static void Reflect(AZ::ReflectContext* context); protected: diff --git a/Code/Framework/AzFramework/AzFramework/Asset/XmlSchemaAsset.h b/Code/Framework/AzFramework/AzFramework/Asset/XmlSchemaAsset.h index 81338d3843..45004fd7cf 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/XmlSchemaAsset.h +++ b/Code/Framework/AzFramework/AzFramework/Asset/XmlSchemaAsset.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp b/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp index 725f71a3c9..5d82cf488a 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp +++ b/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp @@ -133,6 +133,8 @@ namespace AzFramework behaviorContext->Class("Entity") ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) ->Attribute(AZ::Script::Attributes::ConstructorOverride, &Internal::BehaviorEntityScriptConstructor) + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "entity") ->Constructor() ->Constructor() ->Constructor() diff --git a/Code/Framework/AzFramework/AzFramework/Entity/EntityOwnershipServiceBus.h b/Code/Framework/AzFramework/AzFramework/Entity/EntityOwnershipServiceBus.h index a8c0779529..08200afb9e 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/EntityOwnershipServiceBus.h +++ b/Code/Framework/AzFramework/AzFramework/Entity/EntityOwnershipServiceBus.h @@ -10,6 +10,11 @@ #include +namespace AZ +{ + class Entity; +} + namespace AzFramework { using EntityContextId = AZ::Uuid; diff --git a/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextBus.h b/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextBus.h index b5ca37df6e..f8e4dfa98b 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextBus.h +++ b/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextBus.h @@ -91,15 +91,6 @@ namespace AzFramework */ virtual void DestroyGameEntity(const AZ::EntityId& /*id*/) = 0; - /** - * Destroys an entity only in slice mode (when prefabs are disabled). This request is only added as a stop-gap solution - * to prevent the editor from crashing when prefabs are enabled and must only be called through the BehaviorContext binding - * for 'DestroyGameEntity'. No code should be written to directly call this method. This will be removed soon. - * - * @param id The ID of the entity to destroy. - */ - virtual void DestroyGameEntityOnlyInSliceMode(const AZ::EntityId& /*id*/) = 0; - /** * Destroys an entity and all of its descendants. * The entity and its descendants are immediately deactivated and will be @@ -108,15 +99,6 @@ namespace AzFramework */ virtual void DestroyGameEntityAndDescendants(const AZ::EntityId& /*id*/) = 0; - /** - * Destroys an entity and its descendants only in slice mode (when prefabs are disabled). This request is only added as a stop-gap - * solution to prevent the editor from crashing when prefabs are enabled and must only be called through the BehaviorContext - * binding for 'DestroyGameEntityAndDescendants'.No code should be written to directly call this method. This will be removed soon. - * - * @param id The ID of the entity to destroy. - */ - virtual void DestroyGameEntityAndDescendantsOnlyInSliceMode(const AZ::EntityId& /*id*/) = 0; - /** * Activates the game entity. * @param id The ID of the entity to activate. diff --git a/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.cpp b/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.cpp index a97281b9c1..aa7e03577a 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.cpp @@ -11,9 +11,10 @@ #include #include #include +#include #include #include -#include +#include #include "GameEntityContextComponent.h" @@ -47,9 +48,9 @@ namespace AzFramework ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) ->Event("CreateGameEntity", &GameEntityContextRequestBus::Events::CreateGameEntityForBehaviorContext) ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Event("DestroyGameEntity", &GameEntityContextRequestBus::Events::DestroyGameEntityOnlyInSliceMode) + ->Event("DestroyGameEntity", &GameEntityContextRequestBus::Events::DestroyGameEntity) ->Event( - "DestroyGameEntityAndDescendants", &GameEntityContextRequestBus::Events::DestroyGameEntityAndDescendantsOnlyInSliceMode) + "DestroyGameEntityAndDescendants", &GameEntityContextRequestBus::Events::DestroyGameEntityAndDescendants) ->Event("ActivateGameEntity", &GameEntityContextRequestBus::Events::ActivateGameEntity) ->Event("DeactivateGameEntity", &GameEntityContextRequestBus::Events::DeactivateGameEntity) ->Attribute(AZ::ScriptCanvasAttributes::DeactivatesInputEntity, true) @@ -249,23 +250,6 @@ namespace AzFramework DestroyGameEntityInternal(id, false); } - void GameEntityContextComponent::DestroyGameEntityOnlyInSliceMode(const AZ::EntityId& id) - { - bool isPrefabSystemEnabled = false; - AzFramework::ApplicationRequests::Bus::BroadcastResult( - isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); - if (!isPrefabSystemEnabled) - { - DestroyGameEntityInternal(id, false); - } - else - { - AZ_Error( - "GameEntityContextComponent", false, - "Destroying a game entity is temporarily disabled until the Spawnable system can support this."); - } - } - //========================================================================= // GameEntityContextComponent::DestroyGameEntityAndDescendantsById //========================================================================= @@ -274,24 +258,6 @@ namespace AzFramework DestroyGameEntityInternal(id, true); } - - void GameEntityContextComponent::DestroyGameEntityAndDescendantsOnlyInSliceMode(const AZ::EntityId& id) - { - bool isPrefabSystemEnabled = false; - AzFramework::ApplicationRequests::Bus::BroadcastResult( - isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); - if (!isPrefabSystemEnabled) - { - DestroyGameEntityInternal(id, true); - } - else - { - AZ_Error( - "GameEntityContextComponent", false, - "Destroying a game entity and its descendants is temporarily disabled until the Spawnable system can support this."); - } - } - //========================================================================= // GameEntityContextComponent::DestroyGameEntityInternal //========================================================================= @@ -319,6 +285,28 @@ namespace AzFramework EBUS_EVENT_RESULT(currentEntity, AZ::ComponentApplicationBus, FindEntity, *entityIdIter); if (currentEntity) { + bool isPrefabSystemEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); + if (isPrefabSystemEnabled) + { + if (currentEntity->GetSpawnTicketId() > 0) + { + SpawnableEntitiesDefinition* spawnableEntitiesInterface = SpawnableEntitiesInterface::Get(); + AZ_Assert(spawnableEntitiesInterface != nullptr, "SpawnableEntitiesInterface is not found."); + spawnableEntitiesInterface->RetrieveEntitySpawnTicket( + currentEntity->GetSpawnTicketId(), + [spawnableEntitiesInterface, currentEntity](EntitySpawnTicket* entitySpawnTicket) + { + if (entitySpawnTicket != nullptr) + { + spawnableEntitiesInterface->DespawnEntity(currentEntity->GetId(), *entitySpawnTicket); + } + }); + return; + } + } + if (currentEntity->GetState() == AZ::Entity::State::Active) { // Deactivate the entity, we'll destroy it as soon as it is safe. diff --git a/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.h b/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.h index b9a4ea0da1..f837bed14e 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.h +++ b/Code/Framework/AzFramework/AzFramework/Entity/GameEntityContextComponent.h @@ -90,11 +90,6 @@ namespace AzFramework } private: - ////////////////////////////////////////////////////////////////////////// - // GameEntityContextRequestBus - void DestroyGameEntityOnlyInSliceMode(const AZ::EntityId&) override; - void DestroyGameEntityAndDescendantsOnlyInSliceMode(const AZ::EntityId&) override; - ///////////////////////////////////////////////////////////////////////// AzFramework::EntityVisibilityBoundsUnionSystem m_entityVisibilityBoundsUnionSystem; }; diff --git a/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp b/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp index a7c6b18061..cc31df3dbc 100644 --- a/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp +++ b/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp @@ -61,7 +61,7 @@ namespace AzFramework AZ::IO::Path& gemAbsPath = gemInfo.m_absoluteSourcePaths.emplace_back(value); // Resolve any file aliases first - Do not use ResolvePath() as that assumes - // any relative path is underneath the @assets@ alias + // any relative path is underneath the @products@ alias if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { AZ::IO::FixedMaxPath replacedAliasPath; diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp index 4072c17ea0..c1b9c941bc 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp +++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp @@ -12,10 +12,12 @@ #include #include #include +#include #include #include #include #include +#include #include namespace AZ @@ -281,10 +283,18 @@ namespace AZ return SystemFile::Exists(resolvedPath); } + bool LocalFileIO::IsDirectory(const char* filePath) + { + char resolvedPath[AZ_MAX_PATH_LEN]; + ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + + return SystemFile::IsDirectory(resolvedPath); + } + void LocalFileIO::CheckInvalidWrite([[maybe_unused]] const char* path) { #if defined(AZ_ENABLE_TRACING) - const char* assetAliasPath = GetAlias("@assets@"); + const char* assetAliasPath = GetAlias("@products@"); if (path && assetAliasPath) { const AZ::IO::PathView pathView(path); @@ -470,17 +480,15 @@ namespace AZ return false; } - if (IsAbsolutePath(path)) + if (AZ::IO::PathView(path).HasRootPath()) { size_t pathLen = strlen(path); if (pathLen + 1 < resolvedPathSize) { azstrncpy(resolvedPath, resolvedPathSize, path, pathLen + 1); - //see if the absolute path uses @assets@ or @root@, if it does lowercase the relative part - [[maybe_unused]] bool lowercasePath = LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@assets@")) - || LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@root@")) - || LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@projectplatformcache@")); + //see if the absolute path matches the resolved value of @products@, if it does lowercase the relative part + LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@products@")); ToUnixSlashes(resolvedPath, resolvedPathSize); return true; @@ -491,34 +499,39 @@ namespace AZ } } - char rootedPathBuffer[AZ_MAX_PATH_LEN] = {0}; + constexpr AZStd::string_view productAssetAlias = "@products@"; + // Add plus one for the path separator: / + constexpr size_t MaxPathSizeWithProductAssetAlias = AZ::IO::MaxPathLength + productAssetAlias.size() + 1; + using RootedPathString = AZStd::fixed_string; + RootedPathString rootedPathBuffer; const char* rootedPath = path; - // if the path does not begin with an alias, then it is assumed to begin with @assets@ + // if the path does not begin with an alias, then it is assumed to begin with @products@ if (path[0] != '@') { - if (GetAlias("@assets@")) + if (GetAlias("@products@")) { - const int rootLength = 9;// strlen("@assets@/") - azstrncpy(rootedPathBuffer, AZ_MAX_PATH_LEN, "@assets@/", rootLength); - size_t pathLen = strlen(path); - size_t rootedPathBufferlength = rootLength + pathLen + 1;// +1 for null terminator - if (rootedPathBufferlength > resolvedPathSize) + + if (const size_t requiredSize = productAssetAlias.size() + strlen(path) + 1; + requiredSize > rootedPathBuffer.capacity()) { - AZ_Assert(rootedPathBufferlength < resolvedPathSize, "Constructed path length is wrong:%s", rootedPathBuffer);//path constructed is wrong - size_t remainingSize = resolvedPathSize - rootLength - 1;// - 1 for null terminator - azstrncpy(rootedPathBuffer + rootLength, AZ_MAX_PATH_LEN, path, remainingSize); - rootedPathBuffer[resolvedPathSize - 1] = '\0'; + AZ_Error("FileIO", false, "Prepending the %.*s alias to the input path results in a path longer than the" + " AZ::IO::MaxPathLength + the alias size of %zu. The size of the potential failed path is %zu", + AZ_STRING_ARG(productAssetAlias), rootedPathBuffer.capacity(), requiredSize) } else { - azstrncpy(rootedPathBuffer + rootLength, AZ_MAX_PATH_LEN - rootLength, path, pathLen + 1); + rootedPathBuffer = RootedPathString::format("%.*s/%s", AZ_STRING_ARG(productAssetAlias), path); } } else { - ConvertToAbsolutePath(path, rootedPathBuffer, AZ_MAX_PATH_LEN); + if (ConvertToAbsolutePath(path, rootedPathBuffer.data(), rootedPathBuffer.capacity())) + { + // Recalculate the internal string length + rootedPathBuffer.resize_no_construct(AZStd::char_traits::length(rootedPathBuffer.data())); + } } - rootedPath = rootedPathBuffer; + rootedPath = rootedPathBuffer.c_str(); } if (ResolveAliases(rootedPath, resolvedPath, resolvedPathSize)) @@ -553,11 +566,57 @@ namespace AZ const char* LocalFileIO::GetAlias(const char* key) const { - const auto it = m_aliases.find(key); - if (it != m_aliases.end()) + if (const auto it = m_aliases.find(key); it != m_aliases.end()) { return it->second.c_str(); } + else if (const auto deprecatedIt = m_deprecatedAliases.find(key); + deprecatedIt != m_deprecatedAliases.end()) + { + AZ_Error("FileIO", false, R"(Alias "%s" is deprecated. Please use alias "%s" instead)", + key, deprecatedIt->second.c_str()); + AZStd::string_view aliasValue = deprecatedIt->second; + // Contains the list of aliases resolved so far + // If max_size is hit, than an error is logged and nullptr is returned + using VisitedAliasSet = AZStd::fixed_unordered_set; + VisitedAliasSet visitedAliasSet; + while (aliasValue.starts_with("@")) + { + if (visitedAliasSet.contains(aliasValue)) + { + AZ_Error("FileIO", false, "Cycle found with for alias %.*s when trying to resolve deprecated alias %s", + AZ_STRING_ARG(aliasValue), key); + return nullptr; + } + + if(visitedAliasSet.size() == visitedAliasSet.max_size()) + { + AZ_Error("FileIO", false, "Unable to resolve path to deprecated alias %s within %zu steps", + key, visitedAliasSet.max_size()); + return nullptr; + } + + // Add the current alias value to the visited set + visitedAliasSet.emplace(aliasValue); + + // Check if the alias value corresponds to another alias + if (auto resolvedIter = m_aliases.find(aliasValue); resolvedIter != m_aliases.end()) + { + aliasValue = resolvedIter->second; + } + else if (resolvedIter = m_deprecatedAliases.find(aliasValue); + resolvedIter != m_deprecatedAliases.end()) + { + aliasValue = resolvedIter->second; + } + else + { + return nullptr; + } + } + + return aliasValue.data(); + } return nullptr; } @@ -566,6 +625,11 @@ namespace AZ m_aliases.erase(key); } + void LocalFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) + { + m_deprecatedAliases[oldAlias] = newAlias; + } + AZStd::optional LocalFileIO::ConvertToAliasBuffer(char* outBuffer, AZ::u64 outBufferLength, AZStd::string_view inBuffer) const { size_t longestMatch = 0; @@ -667,7 +731,9 @@ namespace AZ : string_view_pair{}; size_t requiredResolvedPathSize = pathView.size() - aliasKey.size() + aliasValue.size() + 1; - AZ_Assert(path != resolvedPath && resolvedPathSize >= requiredResolvedPathSize, "Resolved path is incorrect"); + AZ_Assert(path != resolvedPath, "ResolveAliases does not support inplace update of the path"); + AZ_Assert(resolvedPathSize >= requiredResolvedPathSize, "Resolved path size %llu not large enough. It needs to be %zu", + resolvedPathSize, requiredResolvedPathSize); // we assert above, but we also need to properly handle the case when the resolvedPath buffer size // is too small to copy the source into. if (path == resolvedPath || (resolvedPathSize < requiredResolvedPathSize)) @@ -691,13 +757,9 @@ namespace AZ resolvedPath[resolvedPathLen] = '\0'; // If the path started with one of the "asset cache" path aliases, lowercase the path - const char* assetAliasPath = GetAlias("@assets@"); - const char* rootAliasPath = GetAlias("@root@"); - const char* projectPlatformCacheAliasPath = GetAlias("@projectplatformcache@"); + const char* projectPlatformCacheAliasPath = GetAlias("@products@"); - const bool lowercasePath = (assetAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, assetAliasPath)) || - (rootAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, rootAliasPath)) || - (projectPlatformCacheAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, projectPlatformCacheAliasPath)); + const bool lowercasePath = projectPlatformCacheAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, projectPlatformCacheAliasPath); if (lowercasePath) { @@ -814,5 +876,10 @@ namespace AZ return pathStr + "/"; } + + bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const + { + return AZ::Utils::ConvertToAbsolutePath(path, absolutePath, maxLength); + } } // namespace IO } // namespace AZ diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h index a9db55b320..a5ee1519a2 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h +++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h @@ -61,6 +61,8 @@ namespace AZ void SetAlias(const char* alias, const char* path) override; void ClearAlias(const char* alias) override; const char* GetAlias(const char* alias) const override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; + AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; @@ -71,7 +73,7 @@ namespace AZ bool GetFilename(HandleType fileHandle, char* filename, AZ::u64 filenameSize) const override; bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const; - + private: SystemFile* GetFilePointerFromHandle(HandleType fileHandle); @@ -79,7 +81,6 @@ namespace AZ AZStd::optional ConvertToAliasBuffer(char* outBuffer, AZ::u64 outBufferLength, AZStd::string_view inBuffer) const; bool ResolveAliases(const char* path, char* resolvedPath, AZ::u64 resolvedPathSize) const; - bool IsAbsolutePath(const char* path) const; bool LowerIfBeginsWith(char* inOutBuffer, AZ::u64 bufferLen, const char* alias) const; @@ -91,6 +92,7 @@ namespace AZ AZStd::atomic m_nextHandle; AZStd::unordered_map m_openFiles; AZStd::unordered_map m_aliases; + AZStd::unordered_map m_deprecatedAliases; void CheckInvalidWrite(const char* path); }; diff --git a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp index 041e5baf4a..9e05cd5cb9 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp +++ b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp @@ -49,14 +49,14 @@ namespace AZ s_IOLog.append(m_name); s_IOLog.append("\r\n"); } - + void Append(const char* line) { s_IOLog.append(AZStd::string::format("%u ", m_fileOperation)); s_IOLog.append(line); s_IOLog.append("\r\n"); } - + ~LogCall() { s_IOLog.append(AZStd::string::format("%u End ", m_fileOperation)); @@ -251,7 +251,7 @@ namespace AZ REMOTEFILE_LOG_APPEND(AZStd::string::format("NetworkFileIO::Size(filePath=%s) size request failed. return Error", filePath).c_str()); return ResultCode::Error; } - + size = response.m_size; REMOTEFILE_LOG_APPEND(AZStd::string::format("NetworkFileIO::Size(filePath=%s) size=%u. return Success", filePath, size).c_str()); return ResultCode::Success; @@ -793,6 +793,12 @@ namespace AZ REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::ClearAlias(alias=%s)", alias?alias:"nullptr").c_str()); } + void NetworkFileIO::SetDeprecatedAlias([[maybe_unused]] AZStd::string_view oldAlias, [[maybe_unused]] AZStd::string_view newAlias) + { + REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::SetDeprecatedAlias(oldAlias=%.*s, newAlias=%.*s)", + AZ_STRING_ARG(oldAlias), AZ_STRING_ARG(newAlias)).c_str()); + } + AZStd::optional NetworkFileIO::ConvertToAlias(char* inOutBuffer, [[maybe_unused]] AZ::u64 bufferLength) const { REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::ConvertToAlias(inOutBuffer=%s, bufferLength=%u)", inOutBuffer?inOutBuffer:"nullptr", bufferLength).c_str()); @@ -927,7 +933,7 @@ namespace AZ { m_cacheLookaheadPos = filePosition - CacheStartFilePosition(); } - + void RemoteFileCache::SyncCheck() { #ifdef REMOTEFILEIO_SYNC_CHECK @@ -955,7 +961,7 @@ namespace AZ AZ_TracePrintf(RemoteFileCacheChannel, "RemoteFileCache::SyncCheck(m_fileHandle=%u) tell request failed.", m_fileHandle); REMOTEFILE_LOG_APPEND(AZStd::string::format("RemoteFileCache::SyncCheck(m_fileHandle=%u) tell request failed.", m_fileHandle).c_str()); } - + if (responce.m_offset != m_filePosition) { AZ_TracePrintf(RemoteFileCacheChannel, "RemoteFileCache::SyncCheck(m_fileHandle=%u) failed!!! m_filePosition=%u tell=%u", m_fileHandle, m_filePosition, responce.m_offset); @@ -1028,7 +1034,7 @@ namespace AZ { REMOTEFILE_LOG_CALL(AZStd::string::format("RemoteFileIO()::Close(fileHandle=%u)", fileHandle).c_str()); Result returnValue = NetworkFileIO::Close(fileHandle); - + if (returnValue == ResultCode::Success) { AZStd::lock_guard lock(m_remoteFileCacheGuard); @@ -1160,7 +1166,7 @@ namespace AZ REMOTEFILE_LOG_CALL(AZStd::string::format("RemoteFileIO()::Read(fileHandle=%u, buffer=OUT, size=%u, failOnFewerThanSizeBytesRead=%s, bytesRead=OUT)", fileHandle, size, failOnFewerThanSizeBytesRead ? "True" : "False").c_str()); AZStd::lock_guard lock(m_remoteFileCacheGuard); RemoteFileCache& cache = GetCache(fileHandle); - + AZ::u64 remainingBytesToRead = size; AZ::u64 bytesReadFromCache = 0; AZ::u64 remainingBytesInCache = cache.RemainingBytes(); @@ -1263,7 +1269,7 @@ namespace AZ RemoteFileCache& cache = GetCache(fileHandle); if (cache.m_cacheLookaheadBuffer.size() && cache.RemainingBytes()) { - // find out where we are + // find out where we are AZ::u64 seekPosition = cache.CacheFilePosition(); // note, seeks are predicted, and do not ask for a response. @@ -1361,6 +1367,14 @@ namespace AZ } } + void RemoteFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) + { + if (m_excludedFileIO) + { + m_excludedFileIO->SetDeprecatedAlias(oldAlias, newAlias); + } + } + AZStd::optional RemoteFileIO::ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const { return m_excludedFileIO ? m_excludedFileIO->ConvertToAlias(inOutBuffer, bufferLength) : strlen(inOutBuffer); diff --git a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h index d91e59bebc..77e91e1978 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h +++ b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h @@ -102,6 +102,7 @@ namespace AZ Result FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) override; void SetAlias(const char* alias, const char* path) override; void ClearAlias(const char* alias) override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; @@ -194,6 +195,7 @@ namespace AZ void SetAlias(const char* alias, const char* path) override; const char* GetAlias(const char* alias) const override; void ClearAlias(const char* alias) override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; diff --git a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp index 6837807f4e..a24860fd34 100644 --- a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp +++ b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp @@ -35,6 +35,7 @@ namespace AzFramework ->Attribute(AZ::Edit::Attributes::NameLabelOverride, &InputMappingAnd::Config::GetNameLabelOverride) ->DataElement(AZ::Edit::UIHandlers::Default, &Config::m_sourceInputChannelNames, "Source Input Channel Names", "The source input channel names that will be mapped to the output input channel name.") + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ; } } diff --git a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp index bc47065c05..7c983766c8 100644 --- a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp +++ b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp @@ -35,6 +35,7 @@ namespace AzFramework ->Attribute(AZ::Edit::Attributes::NameLabelOverride, &InputMappingOr::Config::GetNameLabelOverride) ->DataElement(AZ::Edit::UIHandlers::Default, &Config::m_sourceInputChannelNames, "Source Input Channel Names", "The source input channel names that will be mapped to the output input channel name.") + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ; } } diff --git a/Code/Framework/AzFramework/AzFramework/Logging/MissingAssetLogger.h b/Code/Framework/AzFramework/AzFramework/Logging/MissingAssetLogger.h index 9434ca80ae..b49609d820 100644 --- a/Code/Framework/AzFramework/AzFramework/Logging/MissingAssetLogger.h +++ b/Code/Framework/AzFramework/AzFramework/Logging/MissingAssetLogger.h @@ -8,6 +8,7 @@ #pragma once +#include #include namespace AzFramework { class LogFile; } diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/IMatchmakingRequests.h b/Code/Framework/AzFramework/AzFramework/Matchmaking/IMatchmakingRequests.h new file mode 100644 index 0000000000..22b65f8340 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/IMatchmakingRequests.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AzFramework +{ + //! IMatchmakingRequests + //! Pure virtual session interface class to abstract the details of session handling from application code. + class IMatchmakingRequests + { + public: + AZ_RTTI(IMatchmakingRequests, "{BC0B74DA-A448-4F40-9B50-9D73142829D5}"); + + IMatchmakingRequests() = default; + virtual ~IMatchmakingRequests() = default; + + // Registers a player's acceptance or rejection of a proposed matchmaking. + // @param acceptMatchRequest The request of AcceptMatch operation + virtual void AcceptMatch(const AcceptMatchRequest& acceptMatchRequest) = 0; + + // Create a game match for a group of players. + // @param startMatchmakingRequest The request of StartMatchmaking operation + // @return A unique identifier for a matchmaking ticket + virtual AZStd::string StartMatchmaking(const StartMatchmakingRequest& startMatchmakingRequest) = 0; + + // Cancels a matchmaking ticket that is currently being processed. + // @param stopMatchmakingRequest The request of StopMatchmaking operation + virtual void StopMatchmaking(const StopMatchmakingRequest& stopMatchmakingRequest) = 0; + }; + + //! IMatchmakingAsyncRequests + //! Async version of IMatchmakingRequests + class IMatchmakingAsyncRequests + { + public: + AZ_RTTI(ISessionAsyncRequests, "{53513480-2D02-493C-B44E-96AA27F42429}"); + + IMatchmakingAsyncRequests() = default; + virtual ~IMatchmakingAsyncRequests() = default; + + // AcceptMatch Async + // @param acceptMatchRequest The request of AcceptMatch operation + virtual void AcceptMatchAsync(const AcceptMatchRequest& acceptMatchRequest) = 0; + + // StartMatchmaking Async + // @param startMatchmakingRequest The request of StartMatchmaking operation + virtual void StartMatchmakingAsync(const StartMatchmakingRequest& startMatchmakingRequest) = 0; + + // StopMatchmaking Async + // @param stopMatchmakingRequest The request of StopMatchmaking operation + virtual void StopMatchmakingAsync(const StopMatchmakingRequest& stopMatchmakingRequest) = 0; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingNotifications.h b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingNotifications.h new file mode 100644 index 0000000000..ad61971a11 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingNotifications.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzFramework +{ + //! MatchmakingAsyncRequestNotifications + //! The notifications correspond to matchmaking async requests + class MatchmakingAsyncRequestNotifications + : public AZ::EBusTraits + { + public: + // Safeguard handler for multi-threaded use case + using MutexType = AZStd::recursive_mutex; + + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + ////////////////////////////////////////////////////////////////////////// + + // OnAcceptMatchAsyncComplete is fired once AcceptMatchAsync completes + virtual void OnAcceptMatchAsyncComplete() = 0; + + // OnStartMatchmakingAsyncComplete is fired once StartMatchmakingAsync completes + // @param matchmakingTicketId The unique identifier for the matchmaking ticket + virtual void OnStartMatchmakingAsyncComplete(const AZStd::string& matchmakingTicketId) = 0; + + // OnStopMatchmakingAsyncComplete is fired once StopMatchmakingAsync completes + virtual void OnStopMatchmakingAsyncComplete() = 0; + }; + using MatchmakingAsyncRequestNotificationBus = AZ::EBus; + + //! MatchmakingNotifications + //! The matchmaking notifications to listen for performing required operations + class MatchAcceptanceNotifications + : public AZ::EBusTraits + { + public: + // Safeguard handler for multi-threaded use case + using MutexType = AZStd::recursive_mutex; + + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + ////////////////////////////////////////////////////////////////////////// + + // OnMatchAcceptance is fired when DescribeMatchmaking ticket status is REQUIRES_ACCEPTANCE + virtual void OnMatchAcceptance() = 0; + }; + using MatchAcceptanceNotificationBus = AZ::EBus; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.cpp b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.cpp new file mode 100644 index 0000000000..b6c8c55fa4 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace AzFramework +{ + void AcceptMatchRequest::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("acceptMatch", &AcceptMatchRequest::m_acceptMatch) + ->Field("playerIds", &AcceptMatchRequest::m_playerIds) + ->Field("ticketId", &AcceptMatchRequest::m_ticketId); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AcceptMatchRequest", "The container for AcceptMatch request parameters") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &AcceptMatchRequest::m_acceptMatch, "AcceptMatch", + "Player response to accept or reject match") + ->DataElement(AZ::Edit::UIHandlers::Default, &AcceptMatchRequest::m_playerIds, "PlayerIds", + "A list of unique identifiers for players delivering the response") + ->DataElement(AZ::Edit::UIHandlers::Default, &AcceptMatchRequest::m_ticketId, "TicketId", + "A unique identifier for a matchmaking ticket"); + } + } + } + + void StartMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("ticketId", &StartMatchmakingRequest::m_ticketId); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("StartMatchmakingRequest", "The container for StartMatchmaking request parameters") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &StartMatchmakingRequest::m_ticketId, "TicketId", + "A unique identifier for a matchmaking ticket"); + } + } + } + + void StopMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("ticketId", &StopMatchmakingRequest::m_ticketId); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("StopMatchmakingRequest", "The container for StopMatchmaking request parameters") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &StopMatchmakingRequest::m_ticketId, "TicketId", + "A unique identifier for a matchmaking ticket"); + } + } + } +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.h b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.h new file mode 100644 index 0000000000..58e335696f --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AzFramework +{ + //! AcceptMatchRequest + //! The container for AcceptMatch request parameters. + struct AcceptMatchRequest + { + AZ_RTTI(AcceptMatchRequest, "{AD289D76-CEE2-424F-847E-E62AA83B7D79}"); + static void Reflect(AZ::ReflectContext* context); + + AcceptMatchRequest() = default; + virtual ~AcceptMatchRequest() = default; + + // Player response to accept or reject match + bool m_acceptMatch; + // A list of unique identifiers for players delivering the response + AZStd::vector m_playerIds; + // A unique identifier for a matchmaking ticket + AZStd::string m_ticketId; + }; + + //! StartMatchmakingRequest + //! The container for StartMatchmaking request parameters. + struct StartMatchmakingRequest + { + AZ_RTTI(StartMatchmakingRequest, "{70B47776-E8E7-4993-BEC3-5CAEC3D48E47}"); + static void Reflect(AZ::ReflectContext* context); + + StartMatchmakingRequest() = default; + virtual ~StartMatchmakingRequest() = default; + + // A unique identifier for a matchmaking ticket + AZStd::string m_ticketId; + }; + + //! StopMatchmakingRequest + //! The container for StopMatchmaking request parameters. + struct StopMatchmakingRequest + { + AZ_RTTI(StopMatchmakingRequest, "{6132E293-65EF-4DC2-A8A0-00269697229D}"); + static void Reflect(AZ::ReflectContext* context); + + StopMatchmakingRequest() = default; + virtual ~StopMatchmakingRequest() = default; + + // A unique identifier for a matchmaking ticket + AZStd::string m_ticketId; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Network/AssetProcessorConnection.cpp b/Code/Framework/AzFramework/AzFramework/Network/AssetProcessorConnection.cpp index 2e1cde443c..74b92a5681 100644 --- a/Code/Framework/AzFramework/AzFramework/Network/AssetProcessorConnection.cpp +++ b/Code/Framework/AzFramework/AzFramework/Network/AssetProcessorConnection.cpp @@ -593,7 +593,7 @@ namespace AzFramework DebugMessage("StartThread: Starting %s", thread.m_desc.m_name); thread.m_join = false; - thread.m_thread = AZStd::thread(thread.m_main, &thread.m_desc); + thread.m_thread = AZStd::thread(thread.m_desc, thread.m_main); } void AssetProcessorConnection::JoinThread(ThreadState& thread, AZStd::condition_variable* wakeUpCondition /* = nullptr */) diff --git a/Code/Framework/AzFramework/AzFramework/Physics/ClassConverters.cpp b/Code/Framework/AzFramework/AzFramework/Physics/ClassConverters.cpp index 9c1a8c83ca..7e918ee364 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/ClassConverters.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/ClassConverters.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionEvents.cpp b/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionEvents.cpp index e98bbcc21a..9c1646fa08 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionEvents.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionEvents.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionGroups.cpp b/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionGroups.cpp index 2100b0c394..13f7dbc672 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionGroups.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/Collision/CollisionGroups.cpp @@ -9,6 +9,8 @@ #include #include +#include +#include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Physics/Common/PhysicsSceneQueries.cpp b/Code/Framework/AzFramework/AzFramework/Physics/Common/PhysicsSceneQueries.cpp index ff79f097de..28e3762223 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/Common/PhysicsSceneQueries.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/Common/PhysicsSceneQueries.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Physics/Configuration/SystemConfiguration.cpp b/Code/Framework/AzFramework/AzFramework/Physics/Configuration/SystemConfiguration.cpp index f55c430a2e..4a2a7f99af 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/Configuration/SystemConfiguration.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/Configuration/SystemConfiguration.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Physics/Material.cpp b/Code/Framework/AzFramework/AzFramework/Physics/Material.cpp index 4ac97cf041..222bc48dda 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/Material.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/Material.cpp @@ -5,6 +5,8 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + +#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Physics/PhysicsScene.cpp b/Code/Framework/AzFramework/AzFramework/Physics/PhysicsScene.cpp index 62a3916e9e..a5ebdd04c6 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/PhysicsScene.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/PhysicsScene.cpp @@ -9,6 +9,7 @@ #include #include +#include namespace AzPhysics diff --git a/Code/Framework/AzFramework/AzFramework/Physics/PhysicsSystem.cpp b/Code/Framework/AzFramework/AzFramework/Physics/PhysicsSystem.cpp index 2fda459e20..2ff4780c9e 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/PhysicsSystem.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/PhysicsSystem.cpp @@ -8,6 +8,8 @@ #include +#include + namespace AzPhysics { void SystemInterface::Reflect(AZ::ReflectContext* context) diff --git a/Code/Framework/AzFramework/AzFramework/Physics/Shape.h b/Code/Framework/AzFramework/AzFramework/Physics/Shape.h index 6549269c77..0a766473e1 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/Shape.h +++ b/Code/Framework/AzFramework/AzFramework/Physics/Shape.h @@ -9,7 +9,6 @@ #pragma once #include -#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp index ab5cb90616..e90c9d4eed 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp @@ -7,9 +7,11 @@ */ #include +#include #include #include #include +#include namespace Physics { diff --git a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.h b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.h index 07845e95b9..b40a8b1edd 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.h +++ b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.h @@ -10,6 +10,7 @@ #include #include +#include #include namespace Physics diff --git a/Code/Framework/AzFramework/AzFramework/Physics/Utils.cpp b/Code/Framework/AzFramework/AzFramework/Physics/Utils.cpp index 81af7b5840..3dcb37c541 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/Utils.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/Utils.cpp @@ -10,12 +10,14 @@ #include "Utils.h" #include "Material.h" #include "Shape.h" + +#include +#include #include #include #include #include #include -#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Render/GeometryIntersectionStructures.h b/Code/Framework/AzFramework/AzFramework/Render/GeometryIntersectionStructures.h index 11c3fedb2b..9d6cd48102 100644 --- a/Code/Framework/AzFramework/AzFramework/Render/GeometryIntersectionStructures.h +++ b/Code/Framework/AzFramework/AzFramework/Render/GeometryIntersectionStructures.h @@ -11,6 +11,7 @@ #include #include #include +#include #include //! Common structures for Render geometry queries diff --git a/Code/Framework/AzFramework/AzFramework/Script/ScriptComponent.cpp b/Code/Framework/AzFramework/AzFramework/Script/ScriptComponent.cpp index e11dc6dace..bfd7c5ac4c 100644 --- a/Code/Framework/AzFramework/AzFramework/Script/ScriptComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Script/ScriptComponent.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h b/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h index 0323686442..bdc3fe1444 100644 --- a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h +++ b/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h @@ -10,98 +10,11 @@ #include #include -#include #include -#include +#include namespace AzFramework { - struct SessionConfig; - - //! CreateSessionRequest - //! The container for CreateSession request parameters. - struct CreateSessionRequest - { - AZ_RTTI(CreateSessionRequest, "{E39C2A45-89C9-4CFB-B337-9734DC798930}"); - static void Reflect(AZ::ReflectContext* context); - - CreateSessionRequest() = default; - virtual ~CreateSessionRequest() = default; - - // A unique identifier for a player or entity creating the session. - AZStd::string m_creatorId; - - // A collection of custom properties for a session. - AZStd::unordered_map m_sessionProperties; - - // A descriptive label that is associated with a session. - AZStd::string m_sessionName; - - // The maximum number of players that can be connected simultaneously to the session. - uint64_t m_maxPlayer = 0; - }; - - //! SearchSessionsRequest - //! The container for SearchSessions request parameters. - struct SearchSessionsRequest - { - AZ_RTTI(SearchSessionsRequest, "{B49207A8-8549-4ADB-B7D9-D7A4932F9B4B}"); - static void Reflect(AZ::ReflectContext* context); - - SearchSessionsRequest() = default; - virtual ~SearchSessionsRequest() = default; - - // String containing the search criteria for the session search. If no filter expression is included, the request returns results - // for all active sessions. - AZStd::string m_filterExpression; - - // Instructions on how to sort the search results. If no sort expression is included, the request returns results in random order. - AZStd::string m_sortExpression; - - // The maximum number of results to return. - uint8_t m_maxResult = 0; - - // A token that indicates the start of the next sequential page of results. - AZStd::string m_nextToken; - }; - - //! SearchSessionsResponse - //! The container for SearchSession request results. - struct SearchSessionsResponse - { - AZ_RTTI(SearchSessionsResponse, "{F93DE7DC-D381-4E08-8A3B-0B08F7C38714}"); - static void Reflect(AZ::ReflectContext* context); - - SearchSessionsResponse() = default; - virtual ~SearchSessionsResponse() = default; - - // A collection of sessions that match the search criteria and sorted in specific order. - AZStd::vector m_sessionConfigs; - - // A token that indicates the start of the next sequential page of results. - AZStd::string m_nextToken; - }; - - //! JoinSessionRequest - //! The container for JoinSession request parameters. - struct JoinSessionRequest - { - AZ_RTTI(JoinSessionRequest, "{519769E8-3CDE-4385-A0D7-24DBB3685657}"); - static void Reflect(AZ::ReflectContext* context); - - JoinSessionRequest() = default; - virtual ~JoinSessionRequest() = default; - - // A unique identifier for the session. - AZStd::string m_sessionId; - - // A unique identifier for a player. Player IDs are developer-defined. - AZStd::string m_playerId; - - // Developer-defined information related to a player. - AZStd::string m_playerData; - }; - //! ISessionRequests //! Pure virtual session interface class to abstract the details of session handling from application code. class ISessionRequests diff --git a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.cpp b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.cpp similarity index 98% rename from Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.cpp rename to Code/Framework/AzFramework/AzFramework/Session/SessionRequests.cpp index 5536d9a47d..a7ffaa2491 100644 --- a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.cpp +++ b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.cpp @@ -6,9 +6,10 @@ * */ +#include #include #include -#include +#include #include namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.h b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.h new file mode 100644 index 0000000000..1ae018e1ef --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AzFramework +{ + struct SessionConfig; + + //! CreateSessionRequest + //! The container for CreateSession request parameters. + struct CreateSessionRequest + { + AZ_RTTI(CreateSessionRequest, "{E39C2A45-89C9-4CFB-B337-9734DC798930}"); + static void Reflect(AZ::ReflectContext* context); + + CreateSessionRequest() = default; + virtual ~CreateSessionRequest() = default; + + // A unique identifier for a player or entity creating the session. + AZStd::string m_creatorId; + + // A collection of custom properties for a session. + AZStd::unordered_map m_sessionProperties; + + // A descriptive label that is associated with a session. + AZStd::string m_sessionName; + + // The maximum number of players that can be connected simultaneously to the session. + uint64_t m_maxPlayer = 0; + }; + + //! SearchSessionsRequest + //! The container for SearchSessions request parameters. + struct SearchSessionsRequest + { + AZ_RTTI(SearchSessionsRequest, "{B49207A8-8549-4ADB-B7D9-D7A4932F9B4B}"); + static void Reflect(AZ::ReflectContext* context); + + SearchSessionsRequest() = default; + virtual ~SearchSessionsRequest() = default; + + // String containing the search criteria for the session search. If no filter expression is included, the request returns results + // for all active sessions. + AZStd::string m_filterExpression; + + // Instructions on how to sort the search results. If no sort expression is included, the request returns results in random order. + AZStd::string m_sortExpression; + + // The maximum number of results to return. + uint8_t m_maxResult = 0; + + // A token that indicates the start of the next sequential page of results. + AZStd::string m_nextToken; + }; + + //! SearchSessionsResponse + //! The container for SearchSession request results. + struct SearchSessionsResponse + { + AZ_RTTI(SearchSessionsResponse, "{F93DE7DC-D381-4E08-8A3B-0B08F7C38714}"); + static void Reflect(AZ::ReflectContext* context); + + SearchSessionsResponse() = default; + virtual ~SearchSessionsResponse() = default; + + // A collection of sessions that match the search criteria and sorted in specific order. + AZStd::vector m_sessionConfigs; + + // A token that indicates the start of the next sequential page of results. + AZStd::string m_nextToken; + }; + + //! JoinSessionRequest + //! The container for JoinSession request parameters. + struct JoinSessionRequest + { + AZ_RTTI(JoinSessionRequest, "{519769E8-3CDE-4385-A0D7-24DBB3685657}"); + static void Reflect(AZ::ReflectContext* context); + + JoinSessionRequest() = default; + virtual ~JoinSessionRequest() = default; + + // A unique identifier for the session. + AZStd::string m_sessionId; + + // A unique identifier for a player. Player IDs are developer-defined. + AZStd::string m_playerId; + + // Developer-defined information related to a player. + AZStd::string m_playerData; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.cpp b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.cpp index 75fca39574..171d626b27 100644 --- a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.cpp +++ b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.cpp @@ -283,8 +283,12 @@ namespace AzFramework : m_payload(rhs.m_payload) , m_id(rhs.m_id) { + auto manager = SpawnableEntitiesInterface::Get(); + AZ_Assert(manager, "SpawnableEntitiesInterface has no implementation."); rhs.m_payload = nullptr; rhs.m_id = 0; + AZStd::scoped_lock lock(manager->m_entitySpawnTicketMapMutex); + manager->m_entitySpawnTicketMap.insert_or_assign(rhs.m_id, this); } EntitySpawnTicket::EntitySpawnTicket(AZ::Data::Asset spawnable) @@ -294,6 +298,8 @@ namespace AzFramework AZStd::pair result = manager->CreateTicket(AZStd::move(spawnable)); m_id = result.first; m_payload = result.second; + AZStd::scoped_lock lock(manager->m_entitySpawnTicketMapMutex); + manager->m_entitySpawnTicketMap.insert_or_assign(m_id, this); } EntitySpawnTicket::~EntitySpawnTicket() @@ -304,6 +310,8 @@ namespace AzFramework AZ_Assert(manager, "Attempting to destroy an entity spawn ticket while the SpawnableEntitiesInterface has no implementation."); manager->DestroyTicket(m_payload); m_payload = nullptr; + AZStd::scoped_lock lock(manager->m_entitySpawnTicketMapMutex); + manager->m_entitySpawnTicketMap.erase(m_id); m_id = 0; } } @@ -312,17 +320,23 @@ namespace AzFramework { if (this != &rhs) { + auto manager = SpawnableEntitiesInterface::Get(); + AZ_Assert(manager, "Attempting to destroy an entity spawn ticket while the SpawnableEntitiesInterface has no implementation."); if (m_payload) { - auto manager = SpawnableEntitiesInterface::Get(); - AZ_Assert(manager, "Attempting to destroy an entity spawn ticket while the SpawnableEntitiesInterface has no implementation."); manager->DestroyTicket(m_payload); } + + Id previousId = m_id; m_id = rhs.m_id; rhs.m_id = 0; m_payload = rhs.m_payload; rhs.m_payload = nullptr; + + AZStd::scoped_lock lock(manager->m_entitySpawnTicketMapMutex); + manager->m_entitySpawnTicketMap.erase(previousId); + manager->m_entitySpawnTicketMap.insert_or_assign(m_id, this); } return *this; } diff --git a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.h b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.h index 6901fc7116..74a17020df 100644 --- a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.h +++ b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesInterface.h @@ -154,7 +154,7 @@ namespace AzFramework public: friend class SpawnableEntitiesDefinition; - using Id = uint64_t; + using Id = uint32_t; EntitySpawnTicket() = default; EntitySpawnTicket(const EntitySpawnTicket&) = delete; @@ -176,6 +176,7 @@ namespace AzFramework using EntitySpawnCallback = AZStd::function; using EntityPreInsertionCallback = AZStd::function; using EntityDespawnCallback = AZStd::function; + using RetrieveEntitySpawnTicketCallback = AZStd::function; using ReloadSpawnableCallback = AZStd::function; using ListEntitiesCallback = AZStd::function; using ListIndicesEntitiesCallback = AZStd::function; @@ -220,12 +221,21 @@ namespace AzFramework struct DespawnAllEntitiesOptionalArgs final { //! Callback that's called when despawning entities has completed. This can be triggered from a different thread than the one that - //! made the function call to despawn. The returned list of entities contains all the newly created entities. + //! made the function call to despawn. EntityDespawnCallback m_completionCallback; //! The priority at which this call will be executed. SpawnablePriority m_priority { SpawnablePriority_Default }; }; + struct DespawnEntityOptionalArgs final + { + //! Callback that's called when despawning entity has completed. This can be triggered from a different thread than the one that + //! made the function call to despawn. + EntityDespawnCallback m_completionCallback; + //! The priority at which this call will be executed. + SpawnablePriority m_priority{ SpawnablePriority_Default }; + }; + struct ReloadSpawnableOptionalArgs final { //! Callback that's called when respawning entities has completed. This can be triggered from a different thread than the one that @@ -291,9 +301,17 @@ namespace AzFramework EntitySpawnTicket& ticket, AZStd::vector entityIndices, SpawnEntitiesOptionalArgs optionalArgs = {}) = 0; //! Removes all entities in the provided list from the environment. //! @param ticket The ticket previously used to spawn entities with. - //! @param priority The priority at which this call will be executed. //! @param optionalArgs Optional additional arguments, see DespawnAllEntitiesOptionalArgs. virtual void DespawnAllEntities(EntitySpawnTicket& ticket, DespawnAllEntitiesOptionalArgs optionalArgs = {}) = 0; + //! Removes the entity with the provided id from the spawned list of entities. + //! @param entityId the id of entity to despawn. + //! @param ticket The ticket previously used to spawn entities with. + //! @param optionalArgs Optional additional arguments, see DespawnEntityOptionalArgs. + virtual void DespawnEntity(AZ::EntityId entityId, EntitySpawnTicket& ticket, DespawnEntityOptionalArgs optionalArgs = {}) = 0; + //! Gets the EntitySpawnTicket associated with the entitySpawnTicketId. + //! @param entitySpawnTicketId the id of EntitySpawnTicket to get. + //! @param callback The callback to execute upon retrieving the ticket. + virtual void RetrieveEntitySpawnTicket(EntitySpawnTicket::Id entitySpawnTicketId, RetrieveEntitySpawnTicketCallback callback) = 0; //! Removes all entities in the provided list from the environment and reconstructs the entities from the provided spawnable. //! @param ticket Holds the information on the entities to reload. //! @param priority The priority at which this call will be executed. @@ -361,6 +379,9 @@ namespace AzFramework { return reinterpret_cast(ticket->m_payload); } + + AZStd::unordered_map m_entitySpawnTicketMap; + AZStd::recursive_mutex m_entitySpawnTicketMapMutex; }; using SpawnableEntitiesInterface = AZ::Interface; diff --git a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.cpp b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.cpp index 5fa072a451..ef7351aabb 100644 --- a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.cpp +++ b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.cpp @@ -85,6 +85,35 @@ namespace AzFramework QueueRequest(ticket, optionalArgs.m_priority, AZStd::move(queueEntry)); } + void SpawnableEntitiesManager::DespawnEntity(AZ::EntityId entityId, EntitySpawnTicket& ticket, DespawnEntityOptionalArgs optionalArgs) + { + AZ_Assert(ticket.IsValid(), "Ticket provided to DespawnEntity hasn't been initialized."); + + DespawnEntityCommand queueEntry; + queueEntry.m_ticketId = ticket.GetId(); + queueEntry.m_entityId = entityId; + queueEntry.m_completionCallback = AZStd::move(optionalArgs.m_completionCallback); + QueueRequest(ticket, optionalArgs.m_priority, AZStd::move(queueEntry)); + } + + void SpawnableEntitiesManager::RetrieveEntitySpawnTicket(EntitySpawnTicket::Id entitySpawnTicketId, RetrieveEntitySpawnTicketCallback callback) + { + if (entitySpawnTicketId == 0) + { + AZ_Assert(false, "Ticket id provided to RetrieveEntitySpawnTicket is invalid."); + return; + } + + AZStd::scoped_lock lock(m_entitySpawnTicketMapMutex); + auto entitySpawnTicketIterator = m_entitySpawnTicketMap.find(entitySpawnTicketId); + if (entitySpawnTicketIterator == m_entitySpawnTicketMap.end()) + { + AZ_Assert(false, "The EntitySpawnTicket corresponding to id '%lu' cannot be found", entitySpawnTicketId); + return; + } + callback(entitySpawnTicketIterator->second); + } + void SpawnableEntitiesManager::ReloadSpawnable( EntitySpawnTicket& ticket, AZ::Data::Asset spawnable, ReloadSpawnableOptionalArgs optionalArgs) { @@ -223,12 +252,13 @@ namespace AzFramework return queue.m_delayed.empty() ? CommandQueueStatus::NoCommandsLeft : CommandQueueStatus::HasCommandsLeft; } - AZStd::pair SpawnableEntitiesManager::CreateTicket(AZ::Data::Asset&& spawnable) + AZStd::pair SpawnableEntitiesManager::CreateTicket(AZ::Data::Asset&& spawnable) { - static AZStd::atomic_uint64_t idCounter { 1 }; + static AZStd::atomic_uint32_t idCounter { 1 }; auto result = aznew Ticket(); result->m_spawnable = AZStd::move(spawnable); + return AZStd::make_pair(idCounter++, result); } @@ -339,6 +369,7 @@ namespace AzFramework // Add to the game context, now the entities are active for (auto it = ticket.m_spawnedEntities.begin() + spawnedEntitiesInitialCount; it != ticket.m_spawnedEntities.end(); ++it) { + (*it)->SetSpawnTicketId(request.m_ticketId); GameEntityContextRequestBus::Broadcast(&GameEntityContextRequestBus::Events::AddGameEntity, *it); } @@ -420,6 +451,7 @@ namespace AzFramework // Add to the game context, now the entities are active for (auto it = ticket.m_spawnedEntities.begin() + spawnedEntitiesInitialCount; it != ticket.m_spawnedEntities.end(); ++it) { + (*it)->SetSpawnTicketId(request.m_ticketId); GameEntityContextRequestBus::Broadcast(&GameEntityContextRequestBus::Events::AddGameEntity, *it); } @@ -447,8 +479,10 @@ namespace AzFramework { if (entity != nullptr) { + // Setting it to 0 is needed to avoid the infite loop between GameEntityContext and SpawnableEntitiesManager. + entity->SetSpawnTicketId(0); GameEntityContextRequestBus::Broadcast( - &GameEntityContextRequestBus::Events::DestroyGameEntityAndDescendants, entity->GetId()); + &GameEntityContextRequestBus::Events::DestroyGameEntity, entity->GetId()); } } @@ -469,6 +503,40 @@ namespace AzFramework } } + bool SpawnableEntitiesManager::ProcessRequest(DespawnEntityCommand& request) + { + Ticket& ticket = *request.m_ticket; + if (request.m_requestId == ticket.m_currentRequestId) + { + AZStd::vector& spawnedEntities = request.m_ticket->m_spawnedEntities; + for (auto entityIterator = spawnedEntities.begin(); entityIterator != spawnedEntities.end(); ++entityIterator) + { + if (*entityIterator != nullptr && (*entityIterator)->GetId() == request.m_entityId) + { + // Setting it to 0 is needed to avoid the infite loop between GameEntityContext and SpawnableEntitiesManager. + (*entityIterator)->SetSpawnTicketId(0); + GameEntityContextRequestBus::Broadcast( + &GameEntityContextRequestBus::Events::DestroyGameEntity, (*entityIterator)->GetId()); + AZStd::iter_swap(entityIterator, spawnedEntities.rbegin()); + spawnedEntities.pop_back(); + break; + } + } + + if (request.m_completionCallback) + { + request.m_completionCallback(request.m_ticketId); + } + + ticket.m_currentRequestId++; + return true; + } + else + { + return false; + } + } + bool SpawnableEntitiesManager::ProcessRequest(ReloadSpawnableCommand& request) { Ticket& ticket = *request.m_ticket; @@ -482,8 +550,10 @@ namespace AzFramework { if (entity != nullptr) { + // Setting it to 0 is needed to avoid the infite loop between GameEntityContext and SpawnableEntitiesManager. + entity->SetSpawnTicketId(0); GameEntityContextRequestBus::Broadcast( - &GameEntityContextRequestBus::Events::DestroyGameEntityAndDescendants, entity->GetId()); + &GameEntityContextRequestBus::Events::DestroyGameEntity, entity->GetId()); } } @@ -636,8 +706,10 @@ namespace AzFramework { if (entity != nullptr) { + // Setting it to 0 is needed to avoid the infite loop between GameEntityContext and SpawnableEntitiesManager. + entity->SetSpawnTicketId(0); GameEntityContextRequestBus::Broadcast( - &GameEntityContextRequestBus::Events::DestroyGameEntityAndDescendants, entity->GetId()); + &GameEntityContextRequestBus::Events::DestroyGameEntity, entity->GetId()); } } delete request.m_ticket; diff --git a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.h b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.h index 69985f8aa9..c3de5be003 100644 --- a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.h +++ b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.h @@ -57,6 +57,8 @@ namespace AzFramework void SpawnEntities( EntitySpawnTicket& ticket, AZStd::vector entityIndices, SpawnEntitiesOptionalArgs optionalArgs = {}) override; void DespawnAllEntities(EntitySpawnTicket& ticket, DespawnAllEntitiesOptionalArgs optionalArgs = {}) override; + void DespawnEntity(AZ::EntityId entityId, EntitySpawnTicket& ticket, DespawnEntityOptionalArgs optionalArgs = {}) override; + void RetrieveEntitySpawnTicket(EntitySpawnTicket::Id entitySpawnTicketId, RetrieveEntitySpawnTicketCallback callback) override; void ReloadSpawnable( EntitySpawnTicket& ticket, AZ::Data::Asset spawnable, ReloadSpawnableOptionalArgs optionalArgs = {}) override; @@ -132,6 +134,14 @@ namespace AzFramework EntitySpawnTicket::Id m_ticketId; uint32_t m_requestId; }; + struct DespawnEntityCommand + { + EntityDespawnCallback m_completionCallback; + Ticket* m_ticket; + AZ::EntityId m_entityId; + EntitySpawnTicket::Id m_ticketId; + uint32_t m_requestId; + }; struct ReloadSpawnableCommand { AZ::Data::Asset m_spawnable; @@ -176,8 +186,16 @@ namespace AzFramework }; using Requests = AZStd::variant< - SpawnAllEntitiesCommand, SpawnEntitiesCommand, DespawnAllEntitiesCommand, ReloadSpawnableCommand, ListEntitiesCommand, - ListIndicesEntitiesCommand, ClaimEntitiesCommand, BarrierCommand, DestroyTicketCommand>; + SpawnAllEntitiesCommand, + SpawnEntitiesCommand, + DespawnAllEntitiesCommand, + DespawnEntityCommand, + ReloadSpawnableCommand, + ListEntitiesCommand, + ListIndicesEntitiesCommand, + ClaimEntitiesCommand, + BarrierCommand, + DestroyTicketCommand>; struct Queue { @@ -199,6 +217,7 @@ namespace AzFramework bool ProcessRequest(SpawnAllEntitiesCommand& request); bool ProcessRequest(SpawnEntitiesCommand& request); bool ProcessRequest(DespawnAllEntitiesCommand& request); + bool ProcessRequest(DespawnEntityCommand& request); bool ProcessRequest(ReloadSpawnableCommand& request); bool ProcessRequest(ListEntitiesCommand& request); bool ProcessRequest(ListIndicesEntitiesCommand& request); diff --git a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableSystemComponent.cpp b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableSystemComponent.cpp index cb1e657edd..f6130c9e31 100644 --- a/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableSystemComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableSystemComponent.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstall.cpp b/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstall.cpp index e1e193abfd..e90dcc17a1 100644 --- a/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstall.cpp +++ b/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstall.cpp @@ -7,6 +7,7 @@ */ #include +#include #include "StreamingInstall.h" namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstallRequests.h b/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstallRequests.h index dba2a78f3c..201f9007c5 100644 --- a/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstallRequests.h +++ b/Code/Framework/AzFramework/AzFramework/StreamingInstall/StreamingInstallRequests.h @@ -9,10 +9,8 @@ #pragma once #include -#include #include #include -#include namespace AzFramework { diff --git a/Code/Framework/AzFramework/AzFramework/TargetManagement/TargetManagementComponent.cpp b/Code/Framework/AzFramework/AzFramework/TargetManagement/TargetManagementComponent.cpp index 1c26cbc744..8e6bacda2b 100644 --- a/Code/Framework/AzFramework/AzFramework/TargetManagement/TargetManagementComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/TargetManagement/TargetManagementComponent.cpp @@ -319,7 +319,7 @@ namespace AzFramework AZStd::thread_desc td; td.m_name = "TargetManager Thread"; td.m_cpuId = AFFINITY_MASK_USERTHREADS; - m_threadHandle = AZStd::thread(AZStd::bind(&TargetManagementComponent::TickThread, this), &td); + m_threadHandle = AZStd::thread(td, AZStd::bind(&TargetManagementComponent::TickThread, this)); } void TargetManagementComponent::Deactivate() diff --git a/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h b/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h index 92eb28a110..3f6a8f0960 100644 --- a/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h +++ b/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -17,16 +18,38 @@ namespace AzFramework { namespace SurfaceData { + namespace Constants + { + static const char* s_unassignedTagName = "(unassigned)"; + } + struct SurfaceTagWeight { AZ_TYPE_INFO(SurfaceTagWeight, "{EA14018E-E853-4BF5-8E13-D83BB99A54CC}"); - AZ::Crc32 m_surfaceType; - float m_weight; //! A Value in the range [0.0f .. 1.0f] + AZ::Crc32 m_surfaceType = AZ::Crc32(Constants::s_unassignedTagName); + float m_weight = 0.0f; //! A Value in the range [0.0f .. 1.0f] //! Don't call this directly. TerrainDataRequests::Reflect is doing it already. static void Reflect(AZ::ReflectContext* context); }; + + struct SurfaceTagWeightComparator + { + bool operator()(const SurfaceTagWeight& tagWeight1, const SurfaceTagWeight& tagWeight2) const + { + if (!AZ::IsClose(tagWeight1.m_weight, tagWeight2.m_weight)) + { + return tagWeight1.m_weight > tagWeight2.m_weight; + } + else + { + return tagWeight1.m_surfaceType > tagWeight2.m_surfaceType; + } + } + }; + + using OrderedSurfaceTagWeightSet = AZStd::set; } //namespace SurfaceData namespace Terrain @@ -75,8 +98,28 @@ namespace AzFramework //! @terrainExists: Can be nullptr. If != nullptr then, if there's no terrain at location x,y or location x,y is inside a terrain HOLE then *terrainExistsPtr will be set to false, //! otherwise *terrainExistsPtr will be set to true. virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeight(AZ::Vector3 position, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const = 0; + virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromVector2(const AZ::Vector2& inPosition, Sampler sampleFilter = Sampler::DEFAULT, bool* terrainExistsPtr = nullptr) const = 0; virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromFloats(float x, float y, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const = 0; + //! Given an XY coordinate, return the set of surface types and weights. The Vector3 input position version is defined to ignore + //! the input Z value. + virtual void GetSurfaceWeights( + const AZ::Vector3& inPosition, + SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const = 0; + virtual void GetSurfaceWeightsFromVector2( + const AZ::Vector2& inPosition, + SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const = 0; + virtual void GetSurfaceWeightsFromFloats( + float x, + float y, + SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const = 0; + //! Convenience function for low level systems that can't do a reverse lookup from Crc to string. Everyone else should use GetMaxSurfaceWeight or GetMaxSurfaceWeightFromFloats. //! Not available in the behavior context. //! Returns nullptr if the position is inside a hole or outside of the terrain boundaries. diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp index 18667ac153..13f5303eaf 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp @@ -17,15 +17,6 @@ namespace AzFramework { - AZ_CVAR( - float, - ed_cameraSystemDefaultPlaneHeight, - 34.0f, - nullptr, - AZ::ConsoleFunctorFlags::Null, - "The default height of the ground plane to do intersection tests against when orbiting"); - AZ_CVAR(float, ed_cameraSystemMinOrbitDistance, 10.0f, nullptr, AZ::ConsoleFunctorFlags::Null, ""); - AZ_CVAR(float, ed_cameraSystemMaxOrbitDistance, 50.0f, nullptr, AZ::ConsoleFunctorFlags::Null, ""); AZ_CVAR( bool, ed_cameraSystemUseCursor, @@ -135,8 +126,8 @@ namespace AzFramework camera.m_pitch = eulerAngles.GetX(); camera.m_yaw = eulerAngles.GetZ(); - // note: m_lookDist is negative so we must invert it here - camera.m_lookAt = transform.GetTranslation() + (camera.Rotation().GetBasisY() * -camera.m_lookDist); + camera.m_pivot = transform.GetTranslation(); + camera.m_offset = AZ::Vector3::CreateZero(); } bool CameraSystem::HandleEvents(const InputEvent& event) @@ -320,14 +311,8 @@ namespace AzFramework nextCamera.m_pitch -= float(cursorDelta.m_y) * rotateSpeed * Invert(m_invertPitchFn()); nextCamera.m_yaw -= float(cursorDelta.m_x) * rotateSpeed * Invert(m_invertYawFn()); - const auto clampRotation = [](const float angle) - { - return AZStd::fmod(angle + AZ::Constants::TwoPi, AZ::Constants::TwoPi); - }; - - nextCamera.m_yaw = clampRotation(nextCamera.m_yaw); - // clamp pitch to be +/-90 degrees - nextCamera.m_pitch = AZ::GetClamp(nextCamera.m_pitch, -AZ::Constants::HalfPi, AZ::Constants::HalfPi); + nextCamera.m_yaw = WrapYawRotation(nextCamera.m_yaw); + nextCamera.m_pitch = ClampPitchRotation(nextCamera.m_pitch); return nextCamera; } @@ -337,9 +322,10 @@ namespace AzFramework m_rotateChannelId = rotateChannelId; } - PanCameraInput::PanCameraInput(const InputChannelId& panChannelId, PanAxesFn panAxesFn) + PanCameraInput::PanCameraInput(const InputChannelId& panChannelId, PanAxesFn panAxesFn, TranslationDeltaFn translationDeltaFn) : m_panAxesFn(AZStd::move(panAxesFn)) , m_panChannelId(panChannelId) + , m_translationDeltaFn(translationDeltaFn) { m_panSpeedFn = []() constexpr { @@ -375,11 +361,11 @@ namespace AzFramework const auto panAxes = m_panAxesFn(nextCamera); const float panSpeed = m_panSpeedFn(); - const auto deltaPanX = float(cursorDelta.m_x) * panAxes.m_horizontalAxis * panSpeed; - const auto deltaPanY = float(cursorDelta.m_y) * panAxes.m_verticalAxis * panSpeed; + const auto deltaPanX = aznumeric_cast(cursorDelta.m_x) * panAxes.m_horizontalAxis * panSpeed; + const auto deltaPanY = aznumeric_cast(cursorDelta.m_y) * panAxes.m_verticalAxis * panSpeed; - nextCamera.m_lookAt += deltaPanX * Invert(m_invertPanXFn()); - nextCamera.m_lookAt += deltaPanY * -Invert(m_invertPanYFn()); + m_translationDeltaFn(nextCamera, deltaPanX * Invert(m_invertPanXFn())); + m_translationDeltaFn(nextCamera, deltaPanY * -Invert(m_invertPanYFn())); return nextCamera; } @@ -426,8 +412,11 @@ namespace AzFramework } TranslateCameraInput::TranslateCameraInput( - TranslationAxesFn translationAxesFn, const TranslateCameraInputChannelIds& translateCameraInputChannelIds) + const TranslateCameraInputChannelIds& translateCameraInputChannelIds, + TranslationAxesFn translationAxesFn, + TranslationDeltaFn translateDeltaFn) : m_translationAxesFn(AZStd::move(translationAxesFn)) + , m_translateDeltaFn(AZStd::move(translateDeltaFn)) , m_translateCameraInputChannelIds(translateCameraInputChannelIds) { m_translateSpeedFn = []() constexpr @@ -497,32 +486,32 @@ namespace AzFramework if ((m_translation & TranslationType::Forward) == TranslationType::Forward) { - nextCamera.m_lookAt += axisY * speed * deltaTime; + m_translateDeltaFn(nextCamera, axisY * speed * deltaTime); } if ((m_translation & TranslationType::Backward) == TranslationType::Backward) { - nextCamera.m_lookAt -= axisY * speed * deltaTime; + m_translateDeltaFn(nextCamera, -axisY * speed * deltaTime); } if ((m_translation & TranslationType::Left) == TranslationType::Left) { - nextCamera.m_lookAt -= axisX * speed * deltaTime; + m_translateDeltaFn(nextCamera, -axisX * speed * deltaTime); } if ((m_translation & TranslationType::Right) == TranslationType::Right) { - nextCamera.m_lookAt += axisX * speed * deltaTime; + m_translateDeltaFn(nextCamera, axisX * speed * deltaTime); } if ((m_translation & TranslationType::Up) == TranslationType::Up) { - nextCamera.m_lookAt += axisZ * speed * deltaTime; + m_translateDeltaFn(nextCamera, axisZ * speed * deltaTime); } if ((m_translation & TranslationType::Down) == TranslationType::Down) { - nextCamera.m_lookAt -= axisZ * speed * deltaTime; + m_translateDeltaFn(nextCamera, -axisZ * speed * deltaTime); } if (Ending()) @@ -544,16 +533,20 @@ namespace AzFramework m_translateCameraInputChannelIds = translateCameraInputChannelIds; } - OrbitCameraInput::OrbitCameraInput(const InputChannelId& orbitChannelId) - : m_orbitChannelId(orbitChannelId) + PivotCameraInput::PivotCameraInput(const InputChannelId& pivotChannelId) + : m_pivotChannelId(pivotChannelId) { + m_pivotFn = []([[maybe_unused]] const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) + { + return AZ::Vector3::CreateZero(); + }; } - bool OrbitCameraInput::HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, const float scrollDelta) + bool PivotCameraInput::HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, const float scrollDelta) { if (const auto* input = AZStd::get_if(&event)) { - if (input->m_channelId == m_orbitChannelId) + if (input->m_channelId == m_pivotChannelId) { if (input->m_state == InputChannel::State::Began) { @@ -568,85 +561,46 @@ namespace AzFramework if (Active()) { - return m_orbitCameras.HandleEvents(event, cursorDelta, scrollDelta); + return m_pivotCameras.HandleEvents(event, cursorDelta, scrollDelta); } return !Idle(); } - Camera OrbitCameraInput::StepCamera( + Camera PivotCameraInput::StepCamera( const Camera& targetCamera, const ScreenVector& cursorDelta, const float scrollDelta, const float deltaTime) { Camera nextCamera = targetCamera; if (Beginning()) { - const auto hasLookAt = [&nextCamera, &targetCamera, &lookAtFn = m_lookAtFn] - { - if (lookAtFn) - { - // pass through the camera's position and look vector for use in the lookAt function - if (const auto lookAt = lookAtFn(targetCamera.Translation(), targetCamera.Rotation().GetBasisY())) - { - // default to internal look at behavior if the look at point matches the camera translation - if (targetCamera.m_lookAt.IsClose(*lookAt)) - { - return false; - } - - auto transform = AZ::Transform::CreateLookAt(targetCamera.m_lookAt, *lookAt); - nextCamera.m_lookDist = -lookAt->GetDistance(targetCamera.m_lookAt); - UpdateCameraFromTransform(nextCamera, transform); - - return true; - } - } - return false; - }(); - - if (!hasLookAt) - { - float hit_distance = 0.0f; - AZ::Plane::CreateFromNormalAndPoint(AZ::Vector3::CreateAxisZ(), AZ::Vector3::CreateAxisZ(ed_cameraSystemDefaultPlaneHeight)) - .CastRay(targetCamera.Translation(), targetCamera.Rotation().GetBasisY(), hit_distance); - - if (hit_distance > 0.0f) - { - hit_distance = AZStd::min(hit_distance, ed_cameraSystemMaxOrbitDistance); - nextCamera.m_lookDist = -hit_distance; - nextCamera.m_lookAt = targetCamera.Translation() + targetCamera.Rotation().GetBasisY() * hit_distance; - } - else - { - nextCamera.m_lookDist = -ed_cameraSystemMinOrbitDistance; - nextCamera.m_lookAt = - targetCamera.Translation() + targetCamera.Rotation().GetBasisY() * ed_cameraSystemMinOrbitDistance; - } - } + nextCamera.m_pivot = m_pivotFn(targetCamera.Translation(), targetCamera.Rotation().GetBasisY()); + nextCamera.m_offset = nextCamera.View().TransformPoint(targetCamera.Translation()); } if (Active()) { - nextCamera = m_orbitCameras.StepCamera(nextCamera, cursorDelta, scrollDelta, deltaTime); + MovePivotDetached(nextCamera, m_pivotFn(targetCamera.Translation(), targetCamera.Rotation().GetBasisY())); + nextCamera = m_pivotCameras.StepCamera(nextCamera, cursorDelta, scrollDelta, deltaTime); } if (Ending()) { - m_orbitCameras.Reset(); + m_pivotCameras.Reset(); - nextCamera.m_lookAt = nextCamera.Translation(); - nextCamera.m_lookDist = 0.0f; + nextCamera.m_pivot = nextCamera.Translation(); + nextCamera.m_offset = AZ::Vector3::CreateZero(); } return nextCamera; } - void OrbitCameraInput::SetOrbitInputChannelId(const InputChannelId& orbitChanneId) + void PivotCameraInput::SetPivotInputChannelId(const InputChannelId& pivotChanneId) { - m_orbitChannelId = orbitChanneId; + m_pivotChannelId = pivotChanneId; } - OrbitDollyScrollCameraInput::OrbitDollyScrollCameraInput() + PivotDollyScrollCameraInput::PivotDollyScrollCameraInput() { m_scrollSpeedFn = []() constexpr { @@ -654,7 +608,7 @@ namespace AzFramework }; } - bool OrbitDollyScrollCameraInput::HandleEvents( + bool PivotDollyScrollCameraInput::HandleEvents( const InputEvent& event, [[maybe_unused]] const ScreenVector& cursorDelta, [[maybe_unused]] const float scrollDelta) { if (const auto* scroll = AZStd::get_if(&event)) @@ -665,46 +619,70 @@ namespace AzFramework return !Idle(); } - Camera OrbitDollyScrollCameraInput::StepCamera( + static Camera PivotDolly(const Camera& targetCamera, const float delta) + { + Camera nextCamera = targetCamera; + + // handle case where pivot and offset may be the same to begin with + // choose negative y-axis for offset to default to moving the camera backwards from the pivot (standard centered pivot behavior) + const auto pivotDirection = [&targetCamera] + { + if (const auto offsetLength = targetCamera.m_offset.GetLength(); AZ::IsCloseMag(offsetLength, 0.0f)) + { + return -AZ::Vector3::CreateAxisY(); + } + else + { + return targetCamera.m_offset / offsetLength; + } + }(); + + nextCamera.m_offset -= pivotDirection * delta; + if (pivotDirection.Dot(nextCamera.m_offset) < 0.0f) + { + nextCamera.m_offset = pivotDirection * 0.001f; + } + + return nextCamera; + } + + Camera PivotDollyScrollCameraInput::StepCamera( const Camera& targetCamera, [[maybe_unused]] const ScreenVector& cursorDelta, const float scrollDelta, [[maybe_unused]] const float deltaTime) { - Camera nextCamera = targetCamera; - nextCamera.m_lookDist = AZ::GetMin(nextCamera.m_lookDist + scrollDelta * m_scrollSpeedFn(), 0.0f); + const auto nextCamera = PivotDolly(targetCamera, aznumeric_cast(scrollDelta) * m_scrollSpeedFn()); EndActivation(); return nextCamera; } - OrbitDollyCursorMoveCameraInput::OrbitDollyCursorMoveCameraInput(const InputChannelId& dollyChannelId) + PivotDollyMotionCameraInput::PivotDollyMotionCameraInput(const InputChannelId& dollyChannelId) : m_dollyChannelId(dollyChannelId) { - m_cursorSpeedFn = []() constexpr + m_motionSpeedFn = []() constexpr { return 0.01f; }; } - bool OrbitDollyCursorMoveCameraInput::HandleEvents( + bool PivotDollyMotionCameraInput::HandleEvents( const InputEvent& event, [[maybe_unused]] const ScreenVector& cursorDelta, [[maybe_unused]] const float scrollDelta) { HandleActivationEvents(event, m_dollyChannelId, cursorDelta, m_clickDetector, *this); return CameraInputUpdatingAfterMotion(*this); } - Camera OrbitDollyCursorMoveCameraInput::StepCamera( + Camera PivotDollyMotionCameraInput::StepCamera( const Camera& targetCamera, const ScreenVector& cursorDelta, [[maybe_unused]] const float scrollDelta, [[maybe_unused]] const float deltaTime) { - Camera nextCamera = targetCamera; - nextCamera.m_lookDist = AZ::GetMin(nextCamera.m_lookDist + float(cursorDelta.m_y) * m_cursorSpeedFn(), 0.0f); - return nextCamera; + return PivotDolly(targetCamera, aznumeric_cast(cursorDelta.m_y) * m_motionSpeedFn()); } - void OrbitDollyCursorMoveCameraInput::SetDollyInputChannelId(const InputChannelId& dollyChannelId) + void PivotDollyMotionCameraInput::SetDollyInputChannelId(const InputChannelId& dollyChannelId) { m_dollyChannelId = dollyChannelId; } @@ -739,7 +717,7 @@ namespace AzFramework const auto translation_basis = LookTranslation(nextCamera); const auto axisY = translation_basis.GetBasisY(); - nextCamera.m_lookAt += axisY * scrollDelta * m_scrollSpeedFn(); + nextCamera.m_pivot += axisY * scrollDelta * m_scrollSpeedFn(); EndActivation(); @@ -790,18 +768,85 @@ namespace AzFramework { const float moveRate = AZStd::exp2(cameraProps.m_translateSmoothnessFn()); const float moveTime = AZStd::exp2(-moveRate * deltaTime); - camera.m_lookDist = AZ::Lerp(targetCamera.m_lookDist, currentCamera.m_lookDist, moveTime); - camera.m_lookAt = targetCamera.m_lookAt.Lerp(currentCamera.m_lookAt, moveTime); + camera.m_pivot = targetCamera.m_pivot.Lerp(currentCamera.m_pivot, moveTime); + camera.m_offset = targetCamera.m_offset.Lerp(currentCamera.m_offset, moveTime); } else { - camera.m_lookDist = targetCamera.m_lookDist; - camera.m_lookAt = targetCamera.m_lookAt; + camera.m_pivot = targetCamera.m_pivot; + camera.m_offset = targetCamera.m_offset; } return camera; } + FocusCameraInput::FocusCameraInput(const InputChannelId& focusChannelId, FocusOffsetFn offsetFn) + : m_focusChannelId(focusChannelId) + , m_offsetFn(offsetFn) + { + } + + bool FocusCameraInput::HandleEvents( + const InputEvent& event, [[maybe_unused]] const ScreenVector& cursorDelta, [[maybe_unused]] float scrollDelta) + { + if (const auto* input = AZStd::get_if(&event)) + { + if (input->m_channelId == m_focusChannelId && input->m_state == InputChannel::State::Began) + { + BeginActivation(); + } + } + + return !Idle(); + } + + Camera FocusCameraInput::StepCamera( + const Camera& targetCamera, + [[maybe_unused]] const ScreenVector& cursorDelta, + [[maybe_unused]] float scrollDelta, + [[maybe_unused]] float deltaTime) + { + if (Beginning()) + { + // as the camera starts, record the camera we would like to end up as + m_nextCamera.m_offset = m_offsetFn(m_pivotFn().GetDistance(targetCamera.Translation())); + const auto angles = + EulerAngles(AZ::Matrix3x3::CreateFromMatrix3x4(AZ::Matrix3x4::CreateLookAt(targetCamera.Translation(), m_pivotFn()))); + m_nextCamera.m_pitch = angles.GetX(); + m_nextCamera.m_yaw = angles.GetZ(); + m_nextCamera.m_pivot = targetCamera.m_pivot; + } + + // end the behavior when the camera is in alignment + if (AZ::IsCloseMag(targetCamera.m_pitch, m_nextCamera.m_pitch) && AZ::IsCloseMag(targetCamera.m_yaw, m_nextCamera.m_yaw)) + { + EndActivation(); + } + + return m_nextCamera; + } + + void FocusCameraInput::SetPivotFn(PivotFn pivotFn) + { + m_pivotFn = AZStd::move(pivotFn); + } + + void FocusCameraInput::SetFocusInputChannelId(const InputChannelId& focusChannelId) + { + m_focusChannelId = focusChannelId; + } + + bool CustomCameraInput::HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, const float scrollDelta) + { + return m_handleEventsFn(*this, event, cursorDelta, scrollDelta); + } + + Camera CustomCameraInput::StepCamera( + const Camera& targetCamera, const ScreenVector& cursorDelta, const float scrollDelta, const float deltaTime) + { + return m_stepCameraFn(*this, targetCamera, cursorDelta, scrollDelta, deltaTime); + } + InputEvent BuildInputEvent(const InputChannel& inputChannel, const WindowSize& windowSize) { const auto& inputChannelId = inputChannel.GetInputChannelId(); diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h index 69e8b66434..9b1988f5ec 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h @@ -29,17 +29,15 @@ namespace AzFramework //! @note Order of rotation is Z, Y, X. AZ::Vector3 EulerAngles(const AZ::Matrix3x3& orientation); - //! A simple camera representation using spherical coordinates as input (pitch, yaw and look distance). + //! A simple camera representation using spherical coordinates as input (pitch, yaw, pivot and offset). //! The cameras transform and view can be obtained through accessor functions that use the internal //! spherical coordinates to calculate the position and orientation. struct Camera { - AZ::Vector3 m_lookAt = AZ::Vector3::CreateZero(); //!< Position of camera when m_lookDist is zero, - //!< or position of m_lookAt when m_lookDist is greater - //!< than zero. - float m_yaw{ 0.0 }; //!< Yaw rotation of camera (stored in radians) usually clamped to 0-360 degrees (0-2Pi radians). - float m_pitch{ 0.0 }; //!< Pitch rotation of the camera (stored in radians) usually clamped to +/-90 degrees (-Pi/2 - Pi/2 radians). - float m_lookDist{ 0.0 }; //!< Zero gives first person free look, otherwise orbit about m_lookAt + AZ::Vector3 m_pivot = AZ::Vector3::CreateZero(); //!< Pivot point to rotate about (modified in world space). + AZ::Vector3 m_offset = AZ::Vector3::CreateZero(); //!< Offset relative to pivot (modified in camera space). + float m_yaw = 0.0f; //!< Yaw rotation of camera (stored in radians) usually clamped to 0-360 degrees (0-2Pi radians). + float m_pitch = 0.0f; //!< Pitch rotation of the camera (stored in radians) usually clamped to +/-90 degrees (-Pi/2 - Pi/2 radians). //! View camera transform (V in model-view-projection matrix (MVP)). AZ::Transform View() const; @@ -51,6 +49,15 @@ namespace AzFramework AZ::Vector3 Translation() const; }; + //! Helper to allow the pivot to be positioned without altering the camera's position. + inline void MovePivotDetached(Camera& camera, const AZ::Vector3& pivot) + { + const auto& view = camera.View(); + const auto delta = view.TransformPoint(pivot) - view.TransformPoint(camera.m_pivot); + camera.m_offset -= delta; + camera.m_pivot = pivot; + } + inline AZ::Transform Camera::View() const { return Transform().GetInverse(); @@ -58,8 +65,8 @@ namespace AzFramework inline AZ::Transform Camera::Transform() const { - return AZ::Transform::CreateTranslation(m_lookAt) * AZ::Transform::CreateRotationZ(m_yaw) * - AZ::Transform::CreateRotationX(m_pitch) * AZ::Transform::CreateTranslation(AZ::Vector3::CreateAxisY(m_lookDist)); + return AZ::Transform::CreateTranslation(m_pivot) * AZ::Transform::CreateRotationZ(m_yaw) * AZ::Transform::CreateRotationX(m_pitch) * + AZ::Transform::CreateTranslation(m_offset); } inline AZ::Matrix3x3 Camera::Rotation() const @@ -279,21 +286,37 @@ namespace AzFramework public: bool HandleEvents(const InputEvent& event); Camera StepCamera(const Camera& targetCamera, float deltaTime); - bool HandlingEvents() const - { - return m_handlingEvents; - } + bool HandlingEvents() const; Cameras m_cameras; //!< Represents a collection of camera inputs that together provide a camera controller. private: - ScreenVector m_motionDelta; //!< The delta used for look/orbit/pan (rotation + translation) - two dimensional. + ScreenVector m_motionDelta; //!< The delta used for look/pivot/pan (rotation + translation) - two dimensional. CursorState m_cursorState; //!< The current and previous position of the cursor (used to calculate movement delta). float m_scrollDelta = 0.0f; //!< The delta used for dolly/movement (translation) - one dimensional. bool m_handlingEvents = false; //!< Is the camera system currently handling events (events are consumed and not propagated). }; - //! A camera input to handle motion deltas that can rotate or orbit the camera. + inline bool CameraSystem::HandlingEvents() const + { + return m_handlingEvents; + } + + //! Clamps pitch to be +/-90 degrees (-Pi/2, Pi/2). + //! @param pitch Pitch angle in radians. + inline float ClampPitchRotation(const float pitch) + { + return AZ::GetClamp(pitch, -AZ::Constants::HalfPi, AZ::Constants::HalfPi); + } + + //! Ensures yaw wraps between 0 and 360 degrees (0, 2Pi). + //! @param yaw Yaw angle in radians. + inline float WrapYawRotation(const float yaw) + { + return AZStd::fmod(yaw + AZ::Constants::TwoPi, AZ::Constants::TwoPi); + } + + //! A camera input to handle motion deltas that can rotate or pivot the camera. class RotateCameraInput : public CameraInput { public: @@ -332,8 +355,8 @@ namespace AzFramework return { orientation.GetBasisX(), orientation.GetBasisZ() }; } - //! PanAxes to use while in 'orbit' camera behavior. - inline PanAxes OrbitPan(const Camera& camera) + //! PanAxes to use while in 'pivot' camera behavior. + inline PanAxes PivotPan(const Camera& camera) { const AZ::Matrix3x3 orientation = camera.Rotation(); @@ -347,11 +370,23 @@ namespace AzFramework return { basisX, basisY }; } + using TranslationDeltaFn = AZStd::function; + + inline void TranslatePivot(Camera& camera, const AZ::Vector3& delta) + { + camera.m_pivot += delta; + } + + inline void TranslateOffset(Camera& camera, const AZ::Vector3& delta) + { + camera.m_offset += camera.View().TransformVector(delta); + } + //! A camera input to handle motion deltas that can pan the camera (translate in two axes). class PanCameraInput : public CameraInput { public: - PanCameraInput(const InputChannelId& panChannelId, PanAxesFn panAxesFn); + PanCameraInput(const InputChannelId& panChannelId, PanAxesFn panAxesFn, TranslationDeltaFn translationDeltaFn); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; @@ -365,6 +400,7 @@ namespace AzFramework private: PanAxesFn m_panAxesFn; //!< Builder for the particular pan axes (provided in the constructor). + TranslationDeltaFn m_translationDeltaFn; //!< How to apply the translation delta to the camera offset or pivot. InputChannelId m_panChannelId; //!< Input channel to begin the pan camera input. ClickDetector m_clickDetector; //!< Used to determine when a sufficient motion delta has occurred after an initial discrete input //!< event has started (press and move event). @@ -385,8 +421,8 @@ namespace AzFramework return AZ::Matrix3x3::CreateFromColumns(basisX, basisY, basisZ); } - //! TranslationAxes to use while in 'orbit' camera behavior. - inline AZ::Matrix3x3 OrbitTranslation(const Camera& camera) + //! TranslationAxes to use while in 'pivot' camera behavior. + inline AZ::Matrix3x3 PivotTranslation(const Camera& camera) { const AZ::Matrix3x3 orientation = camera.Rotation(); @@ -417,8 +453,10 @@ namespace AzFramework class TranslateCameraInput : public CameraInput { public: - explicit TranslateCameraInput( - TranslationAxesFn translationAxesFn, const TranslateCameraInputChannelIds& translateCameraInputChannelIds); + TranslateCameraInput( + const TranslateCameraInputChannelIds& translateCameraInputChannelIds, + TranslationAxesFn translationAxesFn, + TranslationDeltaFn translateDeltaFn); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; @@ -492,15 +530,16 @@ namespace AzFramework TranslationType m_translation = TranslationType::Nil; //!< Types of translation the camera input is under. TranslationAxesFn m_translationAxesFn; //!< Builder for translation axes. + TranslationDeltaFn m_translateDeltaFn; //!< How to apply the translation delta to the camera offset or pivot. TranslateCameraInputChannelIds m_translateCameraInputChannelIds; //!< Input channel ids that map to internal translation types. bool m_boost = false; //!< Is the translation speed currently being multiplied/scaled upwards. }; - //! A camera input to handle discrete scroll events that can modify the camera look distance. - class OrbitDollyScrollCameraInput : public CameraInput + //! A camera input to handle discrete scroll events that can modify the camera pivot distance. + class PivotDollyScrollCameraInput : public CameraInput { public: - OrbitDollyScrollCameraInput(); + PivotDollyScrollCameraInput(); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; @@ -509,11 +548,11 @@ namespace AzFramework AZStd::function m_scrollSpeedFn; }; - //! A camera input to handle motion deltas that can modify the camera look distance. - class OrbitDollyCursorMoveCameraInput : public CameraInput + //! A camera input to handle motion deltas that can modify the camera pivot distance. + class PivotDollyMotionCameraInput : public CameraInput { public: - explicit OrbitDollyCursorMoveCameraInput(const InputChannelId& dollyChannelId); + explicit PivotDollyMotionCameraInput(const InputChannelId& dollyChannelId); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; @@ -521,7 +560,7 @@ namespace AzFramework void SetDollyInputChannelId(const InputChannelId& dollyChannelId); - AZStd::function m_cursorSpeedFn; + AZStd::function m_motionSpeedFn; private: InputChannelId m_dollyChannelId; //!< Input channel to begin the dolly cursor camera input. @@ -544,40 +583,94 @@ namespace AzFramework //! A camera input that doubles as its own set of camera inputs. //! It is 'exclusive', so does not overlap with other sibling camera inputs - it runs its own set of camera inputs as 'children'. - class OrbitCameraInput : public CameraInput + class PivotCameraInput : public CameraInput { public: - using LookAtFn = AZStd::function(const AZ::Vector3& position, const AZ::Vector3& direction)>; + using PivotFn = AZStd::function; - explicit OrbitCameraInput(const InputChannelId& orbitChannelId); + explicit PivotCameraInput(const InputChannelId& pivotChannelId); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; Camera StepCamera(const Camera& targetCamera, const ScreenVector& cursorDelta, float scrollDelta, float deltaTime) override; bool Exclusive() const override; - void SetOrbitInputChannelId(const InputChannelId& orbitChanneId); + void SetPivotInputChannelId(const InputChannelId& pivotChanneId); - Cameras m_orbitCameras; //!< The camera inputs to run when this camera input is active (only these will run as it is exclusive). + Cameras m_pivotCameras; //!< The camera inputs to run when this camera input is active (only these will run as it is exclusive). - //! Override the default behavior for how a look-at point is calculated. - void SetLookAtFn(const LookAtFn& lookAtFn); + //! Override the default behavior for how a pivot point is calculated. + void SetPivotFn(PivotFn pivotFn); private: - InputChannelId m_orbitChannelId; //!< Input channel to begin the orbit camera input. - LookAtFn m_lookAtFn; //!< The look-at behavior to use for this orbit camera (how is the look-at point calculated/retrieved). + InputChannelId m_pivotChannelId; //!< Input channel to begin the pivot camera input. + PivotFn m_pivotFn; //!< The pivot position to use for this pivot camera (how is the pivot point calculated/retrieved). }; - inline void OrbitCameraInput::SetLookAtFn(const LookAtFn& lookAtFn) + inline void PivotCameraInput::SetPivotFn(PivotFn pivotFn) { - m_lookAtFn = lookAtFn; + m_pivotFn = AZStd::move(pivotFn); } - inline bool OrbitCameraInput::Exclusive() const + inline bool PivotCameraInput::Exclusive() const { return true; } + //! Callback to use for FocusCameraInput when a free look camera is being used. + //! @note This is when offset is zero. + inline AZ::Vector3 FocusLook(float) + { + return AZ::Vector3::CreateZero(); + } + + //! Callback to use for FocusCameraInput when a pivot camera is being used. + //! @note This is when offset is non zero. + inline AZ::Vector3 FocusPivot(const float length) + { + return AZ::Vector3::CreateAxisY(-length); + } + + using FocusOffsetFn = AZStd::function; + + //! A focus behavior to align the camera view to the position returned by the pivot function. + //! @note This only alters the camera orientation, the translation is unaffected. + class FocusCameraInput : public CameraInput + { + public: + using PivotFn = AZStd::function; + + FocusCameraInput(const InputChannelId& focusChannelId, FocusOffsetFn offsetFn); + + // CameraInput overrides ... + bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; + Camera StepCamera(const Camera& targetCamera, const ScreenVector& cursorDelta, float scrollDelta, float deltaTime) override; + + //! Override the default behavior for how a pivot point is calculated. + void SetPivotFn(PivotFn pivotFn); + + void SetFocusInputChannelId(const InputChannelId& focusChannelId); + + private: + InputChannelId m_focusChannelId; //!< Input channel to begin the focus camera input. + Camera m_nextCamera; + PivotFn m_pivotFn; + FocusOffsetFn m_offsetFn; + }; + + //! Provides a CameraInput type that can be implemented without needing to create a new type deriving from CameraInput. + //! This can be very useful for specific use cases that are less generally applicable. + class CustomCameraInput : public CameraInput + { + public: + // CameraInput overrides ... + bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; + Camera StepCamera(const Camera& targetCamera, const ScreenVector& cursorDelta, float scrollDelta, float deltaTime) override; + + AZStd::function m_handleEventsFn; + AZStd::function m_stepCameraFn; + }; + //! Map from a generic InputChannel event to a camera specific InputEvent. InputEvent BuildInputEvent(const InputChannel& inputChannel, const WindowSize& windowSize); } // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ScreenGeometry.h b/Code/Framework/AzFramework/AzFramework/Viewport/ScreenGeometry.h index c0fa1ad631..1529d760e5 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ScreenGeometry.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ScreenGeometry.h @@ -8,11 +8,10 @@ #pragma once -#include +#include #include -#include #include -#include +#include namespace AZ { @@ -27,7 +26,11 @@ namespace AzFramework AZ_TYPE_INFO(ScreenPoint, "{8472B6C2-527F-44FC-87F8-C226B1A57A97}"); ScreenPoint() = default; - ScreenPoint(int x, int y) : m_x(x), m_y(y) {} + ScreenPoint(int x, int y) + : m_x(x) + , m_y(y) + { + } int m_x; //!< X screen position. int m_y; //!< Y screen position. @@ -42,7 +45,11 @@ namespace AzFramework AZ_TYPE_INFO(ScreenVector, "{1EAA2C62-8FDB-4A28-9FE3-1FA4F1418894}"); ScreenVector() = default; - ScreenVector(int x, int y) : m_x(x), m_y(y) {} + ScreenVector(int x, int y) + : m_x(x) + , m_y(y) + { + } int m_x; //!< X screen delta. int m_y; //!< Y screen delta. @@ -71,14 +78,14 @@ namespace AzFramework inline const ScreenPoint operator+(const ScreenPoint& lhs, const ScreenVector& rhs) { - ScreenPoint result{lhs}; + ScreenPoint result{ lhs }; result += rhs; return result; } inline const ScreenPoint operator-(const ScreenPoint& lhs, const ScreenVector& rhs) { - ScreenPoint result{lhs}; + ScreenPoint result{ lhs }; result -= rhs; return result; } @@ -99,14 +106,14 @@ namespace AzFramework inline const ScreenVector operator+(const ScreenVector& lhs, const ScreenVector& rhs) { - ScreenVector result{lhs}; + ScreenVector result{ lhs }; result += rhs; return result; } inline const ScreenVector operator-(const ScreenVector& lhs, const ScreenVector& rhs) { - ScreenVector result{lhs}; + ScreenVector result{ lhs }; result -= rhs; return result; } @@ -131,21 +138,23 @@ namespace AzFramework return !operator==(lhs, rhs); } - inline float ScreenVectorLength(const ScreenVector& screenVector) + inline ScreenVector& operator*=(ScreenVector& lhs, const float rhs) { - return aznumeric_cast(AZStd::sqrt(screenVector.m_x * screenVector.m_x + screenVector.m_y * screenVector.m_y)); + lhs.m_x = aznumeric_cast(AZStd::lround(aznumeric_cast(lhs.m_x) * rhs)); + lhs.m_y = aznumeric_cast(AZStd::lround(aznumeric_cast(lhs.m_y) * rhs)); + return lhs; } - inline ScreenPoint ScreenPointFromNDC(const AZ::Vector3& screenNDC, const AZ::Vector2& viewportSize) + inline const ScreenVector operator*(const ScreenVector& lhs, const float rhs) { - return ScreenPoint( - aznumeric_caster(AZStd::round(screenNDC.GetX() * viewportSize.GetX())), - aznumeric_caster(AZStd::round((1.0f - screenNDC.GetY()) * viewportSize.GetY()))); + ScreenVector result{ lhs }; + result *= rhs; + return result; } - inline AZ::Vector2 NDCFromScreenPoint(const ScreenPoint& screenPoint, const AZ::Vector2& viewportSize) + inline float ScreenVectorLength(const ScreenVector& screenVector) { - return AZ::Vector2(aznumeric_cast(screenPoint.m_x), viewportSize.GetY() - aznumeric_cast(screenPoint.m_y)) / viewportSize; + return aznumeric_cast(AZStd::sqrt(screenVector.m_x * screenVector.m_x + screenVector.m_y * screenVector.m_y)); } //! Return an AZ::Vector2 from a ScreenPoint. diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.cpp index a94b806ad3..afd16a6c23 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.cpp @@ -23,7 +23,7 @@ namespace AzFramework // y-up, z into the screen, x-left // // x -> -x - // y -> z + // y -> z // z -> y // // the same transform can be used to go to/from z-up - the only difference is the order of @@ -37,15 +37,15 @@ namespace AzFramework // yaw = AZ::Matrix4x4::CreateRotationZ(AZ::DegToRad(180.0f)); // conversion = pitch * yaw return AZ::Matrix4x4::CreateFromColumns( - AZ::Vector4(-1.0f, 0.0f, 0.0f, 0.0f), AZ::Vector4(0.0f, 0.0f, 1.0f, .0f), - AZ::Vector4(0.0f, 1.0f, 0.0f, 0.0f), AZ::Vector4(0.0f, 0.0f, 0.0f, 1.0f)); + AZ::Vector4(-1.0f, 0.0f, 0.0f, 0.0f), AZ::Vector4(0.0f, 0.0f, 1.0f, 0.0f), AZ::Vector4(0.0f, 1.0f, 0.0f, 0.0f), + AZ::Vector4(0.0f, 0.0f, 0.0f, 1.0f)); } AZ::Matrix4x4 CameraTransform(const CameraState& cameraState) { return AZ::Matrix4x4::CreateFromColumns( - AZ::Vector3ToVector4(cameraState.m_side), AZ::Vector3ToVector4(cameraState.m_forward), - AZ::Vector3ToVector4(cameraState.m_up), AZ::Vector3ToVector4(cameraState.m_position, 1.0f)); + AZ::Vector3ToVector4(cameraState.m_side), AZ::Vector3ToVector4(cameraState.m_forward), AZ::Vector3ToVector4(cameraState.m_up), + AZ::Vector3ToVector4(cameraState.m_position, 1.0f)); } AZ::Matrix4x4 CameraView(const CameraState& cameraState) @@ -63,8 +63,7 @@ namespace AzFramework AZ::Matrix4x4 CameraProjection(const CameraState& cameraState) { return AZ::Matrix4x4::CreateProjection( - cameraState.VerticalFovRadian(), AspectRatio(cameraState.m_viewportSize), cameraState.m_nearClip, - cameraState.m_farClip); + cameraState.VerticalFovRadian(), AspectRatio(cameraState.m_viewportSize), cameraState.m_nearClip, cameraState.m_farClip); } AZ::Matrix4x4 InverseCameraProjection(const CameraState& cameraState) @@ -93,12 +92,11 @@ namespace AzFramework const auto cameraWorldTransform = AZ::Transform::CreateFromMatrix3x3AndTranslation( AZ::Matrix3x3::CreateFromMatrix4x4(worldFromView), worldFromView.GetTranslation()); return AZ::ViewFrustumAttributes( - cameraWorldTransform, AspectRatio(cameraState.m_viewportSize), cameraState.m_fovOrZoom, - cameraState.m_nearClip, cameraState.m_farClip); + cameraWorldTransform, AspectRatio(cameraState.m_viewportSize), cameraState.m_fovOrZoom, cameraState.m_nearClip, + cameraState.m_farClip); } - AZ::Vector3 WorldToScreenNDC( - const AZ::Vector3& worldPosition, const AZ::Matrix4x4& cameraView, const AZ::Matrix4x4& cameraProjection) + AZ::Vector3 WorldToScreenNdc(const AZ::Vector3& worldPosition, const AZ::Matrix4x4& cameraView, const AZ::Matrix4x4& cameraProjection) { // transform the world space position to clip space const auto clipSpacePosition = cameraProjection * cameraView * AZ::Vector3ToVector4(worldPosition, 1.0f); @@ -108,25 +106,24 @@ namespace AzFramework return (AZ::Vector4ToVector3(ndcPosition) + AZ::Vector3::CreateOne()) * 0.5f; } - ScreenPoint WorldToScreen( - const AZ::Vector3& worldPosition, const AZ::Matrix4x4& cameraView, const AZ::Matrix4x4& cameraProjection, + const AZ::Vector3& worldPosition, + const AZ::Matrix4x4& cameraView, + const AZ::Matrix4x4& cameraProjection, const AZ::Vector2& viewportSize) { - const auto ndcNormalizedPosition = WorldToScreenNDC(worldPosition, cameraView, cameraProjection); + const auto ndcNormalizedPosition = WorldToScreenNdc(worldPosition, cameraView, cameraProjection); // scale ndc position by screen dimensions to return screen position - return ScreenPointFromNDC(ndcNormalizedPosition, viewportSize); + return ScreenPointFromNdc(AZ::Vector3ToVector2(ndcNormalizedPosition), viewportSize); } ScreenPoint WorldToScreen(const AZ::Vector3& worldPosition, const CameraState& cameraState) { - return WorldToScreen( - worldPosition, CameraView(cameraState), CameraProjection(cameraState), cameraState.m_viewportSize); + return WorldToScreen(worldPosition, CameraView(cameraState), CameraProjection(cameraState), cameraState.m_viewportSize); } - AZ::Vector3 ScreenNDCToWorld( - const AZ::Vector2& normalizedScreenPosition, const AZ::Matrix4x4& inverseCameraView, - const AZ::Matrix4x4& inverseCameraProjection) + AZ::Vector3 ScreenNdcToWorld( + const AZ::Vector2& normalizedScreenPosition, const AZ::Matrix4x4& inverseCameraView, const AZ::Matrix4x4& inverseCameraProjection) { // convert screen space coordinates from <0, 1> to <-1,1> range const auto ndcPosition = normalizedScreenPosition * 2.0f - AZ::Vector2::CreateOne(); @@ -142,18 +139,19 @@ namespace AzFramework } AZ::Vector3 ScreenToWorld( - const ScreenPoint& screenPosition, const AZ::Matrix4x4& inverseCameraView, - const AZ::Matrix4x4& inverseCameraProjection, const AZ::Vector2& viewportSize) + const ScreenPoint& screenPosition, + const AZ::Matrix4x4& inverseCameraView, + const AZ::Matrix4x4& inverseCameraProjection, + const AZ::Vector2& viewportSize) { - const auto normalizedScreenPosition = NDCFromScreenPoint(screenPosition, viewportSize); + const auto normalizedScreenPosition = NdcFromScreenPoint(screenPosition, viewportSize); - return ScreenNDCToWorld(normalizedScreenPosition, inverseCameraView, inverseCameraProjection); + return ScreenNdcToWorld(normalizedScreenPosition, inverseCameraView, inverseCameraProjection); } AZ::Vector3 ScreenToWorld(const ScreenPoint& screenPosition, const CameraState& cameraState) { return ScreenToWorld( - screenPosition, InverseCameraView(cameraState), InverseCameraProjection(cameraState), - cameraState.m_viewportSize); + screenPosition, InverseCameraView(cameraState), InverseCameraProjection(cameraState), cameraState.m_viewportSize); } } // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.h b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.h index 87bad66eab..8a6c0249b2 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportScreen.h @@ -8,26 +8,42 @@ #pragma once +#include #include +#include +#include namespace AZ { class Frustum; class Matrix4x4; - class Vector3; struct ViewFrustumAttributes; } // namespace AZ namespace AzFramework { struct CameraState; - struct ScreenPoint; struct ViewportInfo; - //! Projects a position in world space to screen space normalized device coordinates for the given camera. - AZ::Vector3 WorldToScreenNDC( - const AZ::Vector3& worldPosition, const AZ::Matrix4x4& cameraView, const AZ::Matrix4x4& cameraProjection); + //! Returns a position in screen space (in the range [0-viewportSize.x, 0-viewportSize.y]) from normalized device + //! coordinates (in the range 0.0-1.0). + inline ScreenPoint ScreenPointFromNdc(const AZ::Vector2& screenNdc, const AZ::Vector2& viewportSize) + { + return ScreenPoint( + aznumeric_cast(AZStd::lround(screenNdc.GetX() * viewportSize.GetX())), + aznumeric_cast(AZStd::lround((1.0f - screenNdc.GetY()) * viewportSize.GetY()))); + } + + //! Returns a position in normalized device coordinates (in the range [0.0-1.0, 0.0-1.0]) from a + //! screen space position (in the range [0-viewportSize.x, 0-viewportSize.y]). + inline AZ::Vector2 NdcFromScreenPoint(const ScreenPoint& screenPoint, const AZ::Vector2& viewportSize) + { + return AZ::Vector2(aznumeric_cast(screenPoint.m_x), viewportSize.GetY() - aznumeric_cast(screenPoint.m_y)) / + viewportSize; + } + //! Projects a position in world space to screen space normalized device coordinates for the given camera. + AZ::Vector3 WorldToScreenNdc(const AZ::Vector3& worldPosition, const AZ::Matrix4x4& cameraView, const AZ::Matrix4x4& cameraProjection); //! Projects a position in world space to screen space for the given camera. ScreenPoint WorldToScreen(const AZ::Vector3& worldPosition, const CameraState& cameraState); @@ -35,7 +51,9 @@ namespace AzFramework //! Overload of WorldToScreen that accepts camera values that can be precomputed if this function //! is called many times in a loop. ScreenPoint WorldToScreen( - const AZ::Vector3& worldPosition, const AZ::Matrix4x4& cameraView, const AZ::Matrix4x4& cameraProjection, + const AZ::Vector3& worldPosition, + const AZ::Matrix4x4& cameraView, + const AZ::Matrix4x4& cameraProjection, const AZ::Vector2& viewportSize); //! Unprojects a position in screen space pixel coordinates to world space. @@ -45,14 +63,15 @@ namespace AzFramework //! Overload of ScreenToWorld that accepts camera values that can be precomputed if this function //! is called many times in a loop. AZ::Vector3 ScreenToWorld( - const ScreenPoint& screenPosition, const AZ::Matrix4x4& inverseCameraView, - const AZ::Matrix4x4& inverseCameraProjection, const AZ::Vector2& viewportSize); + const ScreenPoint& screenPosition, + const AZ::Matrix4x4& inverseCameraView, + const AZ::Matrix4x4& inverseCameraProjection, + const AZ::Vector2& viewportSize); //! Unprojects a position in screen space normalized device coordinates to world space. //! Note: The position returned will be on the near clip plane of the camera in world space. - AZ::Vector3 ScreenNDCToWorld( - const AZ::Vector2& ndcPosition, const AZ::Matrix4x4& inverseCameraView, - const AZ::Matrix4x4& inverseCameraProjection); + AZ::Vector3 ScreenNdcToWorld( + const AZ::Vector2& ndcPosition, const AZ::Matrix4x4& inverseCameraView, const AZ::Matrix4x4& inverseCameraProjection); //! Returns the camera projection for the current camera state. AZ::Matrix4x4 CameraProjection(const CameraState& cameraState); diff --git a/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h b/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h index b6c26e3e9e..862dea38cc 100644 --- a/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h +++ b/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h @@ -28,9 +28,12 @@ namespace AzFramework //! @note This is used to drive event driven updates to the visibility system. virtual void RefreshEntityLocalBoundsUnion(AZ::EntityId entityId) = 0; - //! Returns the cached union of all component Aabbs. + //! Returns the cached union of all component Aabbs in local entity space. virtual AZ::Aabb GetEntityLocalBoundsUnion(AZ::EntityId entityId) const = 0; + //! Returns the cached union of all component Aabbs in world space. + virtual AZ::Aabb GetEntityWorldBoundsUnion(AZ::EntityId entityId) const = 0; + //! Writes the current changes made to all entities (transforms and bounds) to the visibility system. //! @note During normal operation this is called every frame in OnTick but can //! also be called explicitly (e.g. For testing purposes). diff --git a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp index 826570fee5..1963411147 100644 --- a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp +++ b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp @@ -128,6 +128,24 @@ namespace AzFramework return AZ::Aabb::CreateNull(); } + AZ::Aabb EntityVisibilityBoundsUnionSystem::GetEntityWorldBoundsUnion(const AZ::EntityId entityId) const + { + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(entityId); + if (entity != nullptr) + { + // if the entity is not found in the mapping then return a null Aabb, this is to mimic + // as closely as possible the behavior of an individual GetLocalBounds call to an Entity that + // had been deleted (there would be no response, leaving the default value assigned) + if (auto instance_it = m_entityVisibilityBoundsUnionInstanceMapping.find(entity); + instance_it != m_entityVisibilityBoundsUnionInstanceMapping.end()) + { + return instance_it->second.m_localEntityBoundsUnion.GetTranslated(entity->GetTransform()->GetWorldTranslation()); + } + } + + return AZ::Aabb::CreateNull(); + } + void EntityVisibilityBoundsUnionSystem::ProcessEntityBoundsUnionRequests() { AZ_PROFILE_FUNCTION(AzFramework); diff --git a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h index 03109f0dd2..1a3531e506 100644 --- a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h +++ b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h @@ -31,6 +31,7 @@ namespace AzFramework // EntityBoundsUnionRequestBus overrides ... void RefreshEntityLocalBoundsUnion(AZ::EntityId entityId) override; AZ::Aabb GetEntityLocalBoundsUnion(AZ::EntityId entityId) const override; + AZ::Aabb GetEntityWorldBoundsUnion(AZ::EntityId entityId) const override; void ProcessEntityBoundsUnionRequests() override; void OnTransformUpdated(AZ::Entity* entity) override; diff --git a/Code/Framework/AzFramework/AzFramework/Windowing/NativeWindow.h b/Code/Framework/AzFramework/AzFramework/Windowing/NativeWindow.h index 7479b0d1e1..0eb699475f 100644 --- a/Code/Framework/AzFramework/AzFramework/Windowing/NativeWindow.h +++ b/Code/Framework/AzFramework/AzFramework/Windowing/NativeWindow.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index e752e5ae04..c5616d84c0 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -167,6 +167,10 @@ set(FILES Logging/MissingAssetLogger.cpp Logging/MissingAssetLogger.h Logging/MissingAssetNotificationBus.h + Matchmaking/IMatchmakingRequests.h + Matchmaking/MatchmakingRequests.cpp + Matchmaking/MatchmakingRequests.h + Matchmaking/MatchmakingNotifications.h Scene/Scene.h Scene/Scene.inl Scene/Scene.cpp @@ -181,8 +185,9 @@ set(FILES Script/ScriptRemoteDebugging.cpp Script/ScriptRemoteDebugging.h Session/ISessionHandlingRequests.h - Session/ISessionRequests.cpp Session/ISessionRequests.h + Session/SessionRequests.cpp + Session/SessionRequests.h Session/SessionConfig.cpp Session/SessionConfig.h Session/SessionNotifications.h diff --git a/Code/Framework/AzFramework/CMakeLists.txt b/Code/Framework/AzFramework/CMakeLists.txt index f6851f0ab8..b22586162b 100644 --- a/Code/Framework/AzFramework/CMakeLists.txt +++ b/Code/Framework/AzFramework/CMakeLists.txt @@ -29,7 +29,6 @@ ly_add_target( AZ::AzCore PUBLIC AZ::GridMate - 3rdParty::zlib 3rdParty::zstd 3rdParty::lz4 ) @@ -76,6 +75,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) NAMESPACE AZ FILES_CMAKE Tests/frameworktests_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake INCLUDE_DIRECTORIES PRIVATE Tests @@ -93,6 +93,8 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) NAME AZ::AzFramework.Tests ) + include(${pal_dir}/platform_specific_test_targets.cmake) + endif() endif() diff --git a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp index b88c7cf25b..bd5ba39d76 100644 --- a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp +++ b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include @@ -40,32 +39,12 @@ namespace AZ { namespace IO { - bool LocalFileIO::IsDirectory(const char* filePath) - { - ANDROID_IO_PROFILE_SECTION_ARGS("IsDir:%s", filePath); - - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); - - if (AZ::Android::Utils::IsApkPath(resolvedPath)) - { - return AZ::Android::APKFileHandler::IsDirectory(AZ::Android::Utils::StripApkPrefix(resolvedPath).c_str()); - } - - struct stat result; - if (stat(resolvedPath, &result) == 0) - { - return S_ISDIR(result.st_mode); - } - return false; - } - Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { - char resolvedSourcePath[AZ_MAX_PATH_LEN]; - char resolvedDestPath[AZ_MAX_PATH_LEN]; - ResolvePath(sourceFilePath, resolvedSourcePath, AZ_MAX_PATH_LEN); - ResolvePath(destinationFilePath, resolvedDestPath, AZ_MAX_PATH_LEN); + char resolvedSourcePath[AZ::IO::MaxPathLength]; + char resolvedDestPath[AZ::IO::MaxPathLength]; + ResolvePath(sourceFilePath, resolvedSourcePath, AZ::IO::MaxPathLength); + ResolvePath(destinationFilePath, resolvedDestPath, AZ::IO::MaxPathLength); if (AZ::Android::Utils::IsApkPath(sourceFilePath) || AZ::Android::Utils::IsApkPath(destinationFilePath)) { @@ -97,18 +76,17 @@ namespace AZ { ANDROID_IO_PROFILE_SECTION_ARGS("FindFiles:%s", filePath); - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength]; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); AZStd::string pathWithoutSlash = RemoveTrailingSlash(resolvedPath); bool isInAPK = AZ::Android::Utils::IsApkPath(pathWithoutSlash.c_str()); + AZ::IO::FixedMaxPath tempBuffer; if (isInAPK) { AZ::IO::FixedMaxPath strippedPath = AZ::Android::Utils::StripApkPrefix(pathWithoutSlash.c_str()); - char tempBuffer[AZ_MAX_PATH_LEN] = {0}; - AZ::Android::APKFileHandler::ParseDirectory(strippedPath.c_str(), [&](const char* name) { AZStd::string_view filenameView = name; @@ -118,10 +96,9 @@ namespace AZ AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath); foundFilePath += name; // if aliased, de-alias! - azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str()); - ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN); + ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath }); - if (!callback(tempBuffer)) + if (!callback(tempBuffer.c_str())) { return false; } @@ -135,10 +112,6 @@ namespace AZ if (dir != nullptr) { - // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to - // use a static buffer here. - char tempBuffer[AZ_MAX_PATH_LEN]; - // clear the errno state so we can distinguish between errors and end of stream errno = 0; struct dirent* entry = readdir(dir); @@ -153,10 +126,9 @@ namespace AZ AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath); foundFilePath += entry->d_name; // if aliased, de-alias! - azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str()); - ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN); + ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath }); - if (!callback(tempBuffer)) + if (!callback(tempBuffer.c_str())) { break; } @@ -183,8 +155,8 @@ namespace AZ Result LocalFileIO::CreatePath(const char* filePath) { - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength]; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); if (AZ::Android::Utils::IsApkPath(resolvedPath)) { @@ -221,33 +193,5 @@ namespace AZ mkdir(pathBuffer.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); return IsDirectory(resolvedPath) ? ResultCode::Success : ResultCode::Error; } - - bool LocalFileIO::IsAbsolutePath(const char* path) const - { - return path && path[0] == '/'; - } - - bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const - { - if (AZ::Android::Utils::IsApkPath(path)) - { - azstrncpy(absolutePath, maxLength, path, maxLength); - return true; - } - AZ_Assert(maxLength >= AZ_MAX_PATH_LEN, "Path length is larger than AZ_MAX_PATH_LEN"); - if (!IsAbsolutePath(path)) - { - // note that realpath fails if the path does not exist and actually changes the return value - // to be the actual place that FAILED, which we don't want. - // if we fail, we'd prefer to fall through and at least use the original path. - const char* result = realpath(path, absolutePath); - if (result) - { - return true; - } - } - azstrcpy(absolutePath, maxLength, path); - return IsAbsolutePath(absolutePath); - } } // namespace IO }//namespace AZ diff --git a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp index c9cbdfbe7d..cbcf4a3f56 100644 --- a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp +++ b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp @@ -10,33 +10,20 @@ #include #include #include -#include +#include #include namespace AZ { namespace IO { - bool LocalFileIO::IsDirectory(const char* filePath) - { - char resolvedPath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); - - struct stat result; - if (stat(resolvedPath, &result) == 0) - { - return S_ISDIR(result.st_mode); - } - return false; - } - Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { - char resolvedSourceFilePath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(sourceFilePath, resolvedSourceFilePath, AZ_MAX_PATH_LEN); + char resolvedSourceFilePath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(sourceFilePath, resolvedSourceFilePath, AZ::IO::MaxPathLength); - char resolvedDestinationFilePath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(destinationFilePath, resolvedDestinationFilePath, AZ_MAX_PATH_LEN); + char resolvedDestinationFilePath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(destinationFilePath, resolvedDestinationFilePath, AZ::IO::MaxPathLength); // Use standard C++ method of file copy. { @@ -58,17 +45,15 @@ namespace AZ Result LocalFileIO::FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) { - char resolvedPath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); AZStd::string withoutSlash = RemoveTrailingSlash(resolvedPath); DIR* dir = opendir(withoutSlash.c_str()); if (dir != nullptr) { - // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to - // use a static buffer here. - char tempBuffer[AZ_MAX_PATH_LEN]; + AZ::IO::FixedMaxPath tempBuffer; errno = 0; struct dirent* entry = readdir(dir); @@ -83,10 +68,9 @@ namespace AZ AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath); foundFilePath += entry->d_name; // if aliased, dealias! - azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str()); - ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN); + ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath }); - if (!callback(tempBuffer)) + if (!callback(tempBuffer.c_str())) { break; } @@ -105,8 +89,8 @@ namespace AZ Result LocalFileIO::CreatePath(const char* filePath) { - char resolvedPath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); // create all paths up to that directory. // its not an error if the path exists. @@ -138,28 +122,5 @@ namespace AZ mkdir(buf.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); return IsDirectory(resolvedPath) ? ResultCode::Success : ResultCode::Error; } - - bool LocalFileIO::IsAbsolutePath(const char* path) const - { - return path && path[0] == '/'; - } - - bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const - { - AZ_Assert(maxLength >= AZ_MAX_PATH_LEN, "Path length is larger than AZ_MAX_PATH_LEN"); - if (!IsAbsolutePath(path)) - { - // note that realpath fails if the path does not exist and actually changes the return value - // to be the actual place that FAILED, which we don't want. - // if we fail, we'd prefer to fall through and at least use the original path. - const char* result = realpath(path, absolutePath); - if (result) - { - return true; - } - } - azstrcpy(absolutePath, maxLength, path); - return IsAbsolutePath(absolutePath); - } } // namespace IO } // namespace AZ diff --git a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp index 5a56a360a8..7ff8a96c09 100644 --- a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp +++ b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp @@ -15,22 +15,6 @@ namespace AZ { namespace IO { - bool LocalFileIO::IsDirectory(const char* filePath) - { - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); - - wchar_t resolvedPathW[AZ_MAX_PATH_LEN]; - AZStd::to_wstring(resolvedPathW, AZ_MAX_PATH_LEN, resolvedPath); - DWORD fileAttributes = GetFileAttributesW(resolvedPathW); - if (fileAttributes == INVALID_FILE_ATTRIBUTES) - { - return false; - } - - return (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; - } - Result LocalFileIO::FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) { char resolvedPath[AZ_MAX_PATH_LEN]; @@ -63,7 +47,7 @@ namespace AZ if (hFind != INVALID_HANDLE_VALUE) { - // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to + // because the absolute path might actually be SHORTER than the alias ("D:/o3de" -> "@engroot@"), we need to // use a static buffer here. char tempBuffer[AZ_MAX_PATH_LEN]; do @@ -149,36 +133,5 @@ namespace AZ return SystemFile::CreateDir(buf.c_str()) ? ResultCode::Success : ResultCode::Error; } - - bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const - { - char* result = _fullpath(absolutePath, path, maxLength); - size_t len = ::strlen(absolutePath); - if (len > 0) - { - // strip trailing slash - if (absolutePath[len - 1] == '/' || absolutePath[len - 1] == '\\') - { - absolutePath[len - 1] = 0; - } - - // For some reason, at least on windows, _fullpath returns a lowercase drive letter even though other systems like Qt, use upper case. - if (len > 2) - { - if (absolutePath[1] == ':') - { - absolutePath[0] = (char)toupper(absolutePath[0]); - } - } - } - return result != nullptr; - } - - bool LocalFileIO::IsAbsolutePath(const char* path) const - { - char drive[16] = { 0 }; - _splitpath_s(path, drive, 16, nullptr, 0, nullptr, 0, nullptr, 0); - return strlen(drive) > 0; - } } // namespace IO }//namespace AZ diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbApplication.cpp b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbApplication.cpp index 7cbd9ae0e2..f57f4a89ac 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbApplication.cpp +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbApplication.cpp @@ -8,6 +8,7 @@ #include #include +#include namespace AzFramework { @@ -17,8 +18,8 @@ namespace AzFramework { public: XcbConnectionManagerImpl() + : m_xcbConnection(xcb_connect(nullptr, nullptr)) { - m_xcbConnection = xcb_connect(nullptr, nullptr); AZ_Error("Application", m_xcbConnection != nullptr, "Unable to connect to X11 Server."); XcbConnectionManagerBus::Handler::BusConnect(); } @@ -26,16 +27,15 @@ namespace AzFramework ~XcbConnectionManagerImpl() override { XcbConnectionManagerBus::Handler::BusDisconnect(); - xcb_disconnect(m_xcbConnection); } xcb_connection_t* GetXcbConnection() const override { - return m_xcbConnection; + return m_xcbConnection.get(); } private: - xcb_connection_t* m_xcbConnection = nullptr; + XcbUniquePtr m_xcbConnection = nullptr; }; //////////////////////////////////////////////////////////////////////////////////////////////// @@ -65,10 +65,9 @@ namespace AzFramework { if (xcb_connection_t* xcbConnection = m_xcbConnectionManager->GetXcbConnection()) { - if (xcb_generic_event_t* event = xcb_poll_for_event(xcbConnection)) + if (auto event = XcbStdFreePtr{xcb_poll_for_event(xcbConnection)}) { - XcbEventHandlerBus::Broadcast(&XcbEventHandlerBus::Events::HandleXcbEvent, event); - free(event); + XcbEventHandlerBus::Broadcast(&XcbEventHandlerBus::Events::HandleXcbEvent, event.get()); } } } @@ -78,10 +77,9 @@ namespace AzFramework { if (xcb_connection_t* xcbConnection = m_xcbConnectionManager->GetXcbConnection()) { - while (xcb_generic_event_t* event = xcb_poll_for_event(xcbConnection)) + while (auto event = XcbStdFreePtr{xcb_poll_for_event(xcbConnection)}) { - XcbEventHandlerBus::Broadcast(&XcbEventHandlerBus::Events::HandleXcbEvent, event); - free(event); + XcbEventHandlerBus::Broadcast(&XcbEventHandlerBus::Events::HandleXcbEvent, event.get()); } } } diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp index c971c3b793..de326df200 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp @@ -20,6 +20,15 @@ namespace AzFramework { + // xcb-xkb does not provide a generic event type, so we define our own. + // These fields are enough to get to the xkbType field, which can then be + // read to typecast the event to the right concrete type. + struct XcbXkbGenericEventT + { + uint8_t response_type; + uint8_t xkbType; + }; + XcbInputDeviceKeyboard::XcbInputDeviceKeyboard(InputDeviceKeyboard& inputDevice) : InputDeviceKeyboard::Implementation(inputDevice) { @@ -39,19 +48,22 @@ namespace AzFramework return; } - XcbStdFreePtr xkbUseExtensionReply{ - xcb_xkb_use_extension_reply(connection, xcb_xkb_use_extension(connection, 1, 0), nullptr) - }; - if (!xkbUseExtensionReply) + int initializeXkbExtensionSuccess = xkb_x11_setup_xkb_extension( + connection, + 1, + 0, + XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS, + nullptr, + nullptr, + &m_xkbEventCode, + nullptr + ); + + if (!initializeXkbExtensionSuccess) { AZ_Warning("ApplicationLinux", false, "Failed to initialize the xkb extension"); return; } - if (!xkbUseExtensionReply->supported) - { - AZ_Warning("ApplicationLinux", false, "The X server does not support the xkb extension"); - return; - } m_coreDeviceId = xkb_x11_get_core_keyboard_device_id(connection); @@ -59,6 +71,43 @@ namespace AzFramework m_xkbKeymap.reset(xkb_x11_keymap_new_from_device(m_xkbContext.get(), connection, m_coreDeviceId, XKB_KEYMAP_COMPILE_NO_FLAGS)); m_xkbState.reset(xkb_x11_state_new_from_device(m_xkbKeymap.get(), connection, m_coreDeviceId)); + const uint16_t affectMap = + XCB_XKB_MAP_PART_KEY_TYPES + | XCB_XKB_MAP_PART_KEY_SYMS + | XCB_XKB_MAP_PART_MODIFIER_MAP + | XCB_XKB_MAP_PART_EXPLICIT_COMPONENTS + | XCB_XKB_MAP_PART_KEY_ACTIONS + | XCB_XKB_MAP_PART_KEY_BEHAVIORS + | XCB_XKB_MAP_PART_VIRTUAL_MODS + | XCB_XKB_MAP_PART_VIRTUAL_MOD_MAP + ; + + const uint16_t selectedEvents = + XCB_XKB_EVENT_TYPE_NEW_KEYBOARD_NOTIFY + | XCB_XKB_EVENT_TYPE_MAP_NOTIFY + | XCB_XKB_EVENT_TYPE_STATE_NOTIFY + ; + + XcbStdFreePtr error{xcb_request_check( + connection, + xcb_xkb_select_events( + connection, + /* deviceSpec = */ XCB_XKB_ID_USE_CORE_KBD, + /* affectWhich = */ selectedEvents, + /* clear = */ 0, + /* selectAll = */ selectedEvents, + /* affectMap = */ affectMap, + /* map = */ affectMap, + /* details = */ nullptr + ) + )}; + + if (error) + { + AZ_Warning("ApplicationLinux", false, "failed to select notify events from XKB"); + return; + } + m_initialized = true; } @@ -70,15 +119,17 @@ namespace AzFramework bool XcbInputDeviceKeyboard::HasTextEntryStarted() const { - return false; + return m_hasTextEntryStarted; } void XcbInputDeviceKeyboard::TextEntryStart(const InputDeviceKeyboard::VirtualKeyboardOptions& options) { + m_hasTextEntryStarted = true; } void XcbInputDeviceKeyboard::TextEntryStop() { + m_hasTextEntryStarted = false; } void XcbInputDeviceKeyboard::TickInputDevice() @@ -93,30 +144,45 @@ namespace AzFramework return; } - switch (event->response_type & ~0x80) - { - case XCB_KEY_PRESS: + const auto responseType = event->response_type & ~0x80; + if (responseType == XCB_KEY_PRESS) { - auto* keyPress = reinterpret_cast(event); + const auto* keyPress = reinterpret_cast(event); + { + auto text = TextFromKeycode(m_xkbState.get(), keyPress->detail); + if (!text.empty()) + { + QueueRawTextEvent(AZStd::move(text)); + } + } - const InputChannelId* key = InputChannelFromKeyEvent(keyPress->detail); - if (key) + if (const InputChannelId* key = InputChannelFromKeyEvent(keyPress->detail)) { QueueRawKeyEvent(*key, true); } - break; } - case XCB_KEY_RELEASE: + else if (responseType == XCB_KEY_RELEASE) { - auto* keyRelease = reinterpret_cast(event); + const auto* keyRelease = reinterpret_cast(event); const InputChannelId* key = InputChannelFromKeyEvent(keyRelease->detail); if (key) { QueueRawKeyEvent(*key, false); } - break; } + else if (responseType == m_xkbEventCode) + { + const auto* xkbEvent = reinterpret_cast(event); + switch (xkbEvent->xkbType) + { + case XCB_XKB_STATE_NOTIFY: + { + const auto* stateNotifyEvent = reinterpret_cast(event); + UpdateState(stateNotifyEvent); + break; + } + } } } @@ -268,4 +334,34 @@ namespace AzFramework default: return nullptr; } } + + AZStd::string XcbInputDeviceKeyboard::TextFromKeycode(xkb_state* state, xkb_keycode_t code) + { + // Find out how much of a buffer we need + const size_t size = xkb_state_key_get_utf8(state, code, nullptr, 0); + if (!size) + { + return {}; + } + // xkb_state_key_get_utf8 will null-terminate the resulting string, and + // will truncate the result to `size - 1` if there is not enough space + // for the null byte. The first call returns the size of the resulting + // string without including the null byte. AZStd::string internally + // includes space for the null byte, but that is not included in its + // `size()`. xkb_state_key_get_utf8 will always set `buf[size - 1] = + // 0`, so add 1 to `chars.size()` to include that internal null byte in + // the string. + AZStd::string chars; + chars.resize_no_construct(size); + xkb_state_key_get_utf8(state, code, chars.data(), chars.size() + 1); + return chars; + } + + void XcbInputDeviceKeyboard::UpdateState(const xcb_xkb_state_notify_event_t* state) + { + if (m_initialized) + { + xkb_state_update_mask(m_xkbState.get(), state->baseMods, state->latchedMods, state->lockedMods, state->baseGroup, state->latchedGroup, state->lockedGroup); + } + } } // namespace AzFramework diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h index de65941a67..00383abf6c 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h @@ -13,6 +13,8 @@ #include #include +struct xcb_xkb_state_notify_event_t; + namespace AzFramework { class XcbInputDeviceKeyboard @@ -37,10 +39,16 @@ namespace AzFramework private: [[nodiscard]] const InputChannelId* InputChannelFromKeyEvent(xcb_keycode_t code) const; + static AZStd::string TextFromKeycode(xkb_state* state, xkb_keycode_t code); + + void UpdateState(const xcb_xkb_state_notify_event_t* state); + XcbUniquePtr m_xkbContext; XcbUniquePtr m_xkbKeymap; XcbUniquePtr m_xkbState; int m_coreDeviceId{-1}; + uint8_t m_xkbEventCode{0}; bool m_initialized{false}; + bool m_hasTextEntryStarted{false}; }; } // namespace AzFramework diff --git a/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp b/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp index b8f62a2b77..173ec61263 100644 --- a/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp +++ b/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp @@ -7,26 +7,24 @@ */ #include #include +#include +#include #include -namespace AZ +namespace AZ::IO { - namespace IO + Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { + AZ::IO::FixedMaxPath resolvedSourcePath; + ResolvePath(resolvedSourcePath, sourceFilePath); + AZ::IO::FixedMaxPath resolvedDestPath; + ResolvePath(resolvedDestPath, destinationFilePath); - Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) - { - char resolvedSourcePath[AZ_MAX_PATH_LEN]; - ResolvePath(sourceFilePath, resolvedSourcePath, AZ_MAX_PATH_LEN); - char resolvedDestPath[AZ_MAX_PATH_LEN]; - ResolvePath(destinationFilePath, resolvedDestPath, AZ_MAX_PATH_LEN); + AZStd::fixed_wstring resolvedSourcePathW; + AZStd::fixed_wstring resolvedDestPathW; + AZStd::to_wstring(resolvedSourcePathW, resolvedSourcePath.Native()); + AZStd::to_wstring(resolvedDestPathW, resolvedDestPath.Native()); - if (::CopyFileA(resolvedSourcePath, resolvedDestPath, false) == 0) - { - return ResultCode::Error; - } - - return ResultCode::Success; - } - } // namespace IO -}//namespace AZ + return ::CopyFileW(resolvedSourcePathW.c_str(), resolvedDestPathW.c_str(), false) != 0 ? ResultCode::Success : ResultCode::Error; + } +}//namespace AZ::IO diff --git a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp index 3f2b29a7bb..57b37037ae 100644 --- a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp +++ b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp @@ -239,6 +239,8 @@ namespace AzFramework RAWINPUT* rawInput = (RAWINPUT*)rawInputBytes; AzFramework::RawInputNotificationBusWindows::Broadcast( &AzFramework::RawInputNotificationBusWindows::Events::OnRawInputEvent, *rawInput); + + delete [] rawInputBytes; break; } case WM_CHAR: diff --git a/Code/Framework/AzFramework/Tests/Application.cpp b/Code/Framework/AzFramework/Tests/Application.cpp index 313b5e3b56..9ad072cba5 100644 --- a/Code/Framework/AzFramework/Tests/Application.cpp +++ b/Code/Framework/AzFramework/Tests/Application.cpp @@ -26,7 +26,7 @@ protected: } if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { - fileIoBase->SetAlias("@assets@", m_tempDirectory.GetDirectory()); + fileIoBase->SetAlias("@products@", m_tempDirectory.GetDirectory()); } } diff --git a/Code/Framework/AzFramework/Tests/ArchiveTests.cpp b/Code/Framework/AzFramework/Tests/ArchiveTests.cpp index 8e88ccfc39..37babb49a8 100644 --- a/Code/Framework/AzFramework/Tests/ArchiveTests.cpp +++ b/Code/Framework/AzFramework/Tests/ArchiveTests.cpp @@ -50,7 +50,7 @@ namespace UnitTest m_application->Start({}); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); } @@ -262,7 +262,7 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders.c_str())); - EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders.c_str())); + EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders.c_str())); EXPECT_TRUE(archive->IsFileExist(fileInArchiveFile)); } @@ -353,7 +353,7 @@ namespace UnitTest // and be able to IMMEDIATELY // * read the file in the subfolder // * enumerate the folders (including that subfolder) even though they are 'virtual', not real folders on physical media - // * all of the above even though the mount point for the archive is @assets@ wheras the physical pack lives in @usercache@ + // * all of the above even though the mount point for the archive is @products@ wheras the physical pack lives in @usercache@ // finally, we're going to repeat the above test but with files mounted with subfolders // so for example, the pack will contain levelinfo.xml at the root of it // but it will be mounted at a subfolder (levels/mylevel). @@ -388,7 +388,7 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders)); - EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders)); + EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders)); // ---- BARRAGE OF TESTS EXPECT_TRUE(archive->IsFileExist("levels\\mylevel\\levelinfo.xml")); EXPECT_TRUE(archive->IsFileExist("levels//mylevel//levelinfo.xml")); @@ -484,7 +484,7 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(testArchivePath_withMountPoint)); - EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2", testArchivePath_withMountPoint)); + EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2", testArchivePath_withMountPoint)); // ---- BARRAGE OF TESTS EXPECT_TRUE(archive->IsFileExist("uniquename\\mylevel2\\levelinfo.xml")); @@ -543,7 +543,7 @@ namespace UnitTest archive->ClosePack(testArchivePath_withMountPoint); // --- test to make sure that when you iterate only the first component is found, so bury it deep and ask for the root - EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint)); + EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint)); found_mylevel_folder = false; handle = archive->FindFirst("uniquename\\*"); @@ -574,9 +574,9 @@ namespace UnitTest found_mylevel_folder = false; // now make sure no red herrings appear - // for example, if a file is mounted at "@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4" - // and the file "@assets@\\somethingelse" is requested it should not be found - // in addition if the file "@assets@\\uniquename\\mylevel3" is requested it should not be found + // for example, if a file is mounted at "@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4" + // and the file "@products@\\somethingelse" is requested it should not be found + // in addition if the file "@products@\\uniquename\\mylevel3" is requested it should not be found handle = archive->FindFirst("somethingelse\\*"); EXPECT_FALSE(static_cast(handle)); @@ -610,7 +610,7 @@ namespace UnitTest cpfio.Remove(genericArchiveFileName); // create the asset alias directory - cpfio.CreatePath("@assets@"); + cpfio.CreatePath("@products@"); // create generic file @@ -635,11 +635,11 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(genericArchiveFileName)); - EXPECT_TRUE(archive->OpenPack("@assets@", genericArchiveFileName)); + EXPECT_TRUE(archive->OpenPack("@products@", genericArchiveFileName)); // ---- BARRAGE OF TESTS EXPECT_TRUE(cpfio.Exists("testfile.xml")); - EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml")); // this should be hte same file + EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml")); // this should be hte same file EXPECT_TRUE(!cpfio.Exists("@log@/testfile.xml")); EXPECT_TRUE(!cpfio.Exists("@usercache@/testfile.xml")); EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml")); @@ -685,9 +685,9 @@ namespace UnitTest EXPECT_EQ(ResultCode::Success, cpfio.Close(normalFileHandle)); EXPECT_TRUE(!cpfio.IsDirectory("testfile.xml")); - EXPECT_TRUE(cpfio.IsDirectory("@assets@")); + EXPECT_TRUE(cpfio.IsDirectory("@products@")); EXPECT_TRUE(cpfio.IsReadOnly("testfile.xml")); - EXPECT_TRUE(cpfio.IsReadOnly("@assets@/testfile.xml")); + EXPECT_TRUE(cpfio.IsReadOnly("@products@/testfile.xml")); EXPECT_TRUE(!cpfio.IsReadOnly("@log@/unittesttemp/realfileforunittest.xml")); @@ -714,10 +714,10 @@ namespace UnitTest // find files test. AZ::IO::FixedMaxPath resolvedTestFilePath; - EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@assets@/testfile.xml"))); + EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@products@/testfile.xml"))); bool foundIt = false; // note that this file exists only in the archive. - cpfio.FindFiles("@assets@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName) + cpfio.FindFiles("@products@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName) { AZ::IO::FixedMaxPath resolvedFoundPath; EXPECT_TRUE(cpfio.ResolvePath(resolvedFoundPath, AZ::IO::PathView(foundName))); @@ -734,10 +734,10 @@ namespace UnitTest // The following test is disabled because it will trigger an AZ_ERROR which will affect the outcome of this entire test - // EXPECT_NE(ResultCode::Success, cpfio.Remove("@assets@/testfile.xml")); // may not delete archive files + // EXPECT_NE(ResultCode::Success, cpfio.Remove("@products@/testfile.xml")); // may not delete archive files // make sure it works with and without alias: - EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml")); + EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml")); EXPECT_TRUE(cpfio.Exists("testfile.xml")); EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml")); @@ -788,22 +788,22 @@ namespace UnitTest EXPECT_TRUE(archive->ClosePack(realNameBuf)); // change its actual location: - EXPECT_TRUE(archive->OpenPack("@assets@", realNameBuf)); - EXPECT_TRUE(archive->IsFileExist("@assets@/foundit.dat")); + EXPECT_TRUE(archive->OpenPack("@products@", realNameBuf)); + EXPECT_TRUE(archive->IsFileExist("@products@/foundit.dat")); EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous location! - EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); - EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat")); + EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); + EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat")); EXPECT_TRUE(archive->ClosePack(realNameBuf)); // try sub-folders - EXPECT_TRUE(archive->OpenPack("@assets@/mystuff", realNameBuf)); - EXPECT_TRUE(archive->IsFileExist("@assets@/mystuff/foundit.dat")); - EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat")); // do not find it in the previous locations! + EXPECT_TRUE(archive->OpenPack("@products@/mystuff", realNameBuf)); + EXPECT_TRUE(archive->IsFileExist("@products@/mystuff/foundit.dat")); + EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat")); // do not find it in the previous locations! EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous locations! - EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); - EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); - EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat")); // non-existent file - EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/notfoundit.dat")); // non-existent file + EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); + EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); + EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat")); // non-existent file + EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/notfoundit.dat")); // non-existent file EXPECT_TRUE(archive->ClosePack(realNameBuf)); } @@ -861,7 +861,7 @@ namespace UnitTest AZ::IO::FileIOBase* ioBase = AZ::IO::FileIOBase::GetInstance(); ASSERT_NE(nullptr, ioBase); - const char* assetsPath = ioBase->GetAlias("@assets@"); + const char* assetsPath = ioBase->GetAlias("@products@"); ASSERT_NE(nullptr, assetsPath); auto stringToAdd = AZ::IO::Path(assetsPath) / "textures" / "test.dds"; @@ -872,7 +872,7 @@ namespace UnitTest // it normalizes the string, so the slashes flip and everything is lowercased. AZ::IO::FixedMaxPath resolvedAddedPath; AZ::IO::FixedMaxPath resolvedResourcePath; - EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@assets@/textures/test.dds")); + EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@products@/textures/test.dds")); EXPECT_TRUE(ioBase->ReplaceAlias(resolvedResourcePath, reslist->GetFirst())); EXPECT_EQ(resolvedAddedPath, resolvedResourcePath); reslist->Clear(); diff --git a/Code/Framework/AzFramework/Tests/CameraInputTests.cpp b/Code/Framework/AzFramework/Tests/CameraInputTests.cpp index df7d22f7ca..1e0c805587 100644 --- a/Code/Framework/AzFramework/Tests/CameraInputTests.cpp +++ b/Code/Framework/AzFramework/Tests/CameraInputTests.cpp @@ -26,7 +26,8 @@ namespace UnitTest { constexpr float deltaTime = 0.01666f; // 60fps const bool consumed = m_cameraSystem->HandleEvents(event); - m_camera = m_cameraSystem->StepCamera(m_targetCamera, deltaTime); + m_targetCamera = m_cameraSystem->StepCamera(m_targetCamera, deltaTime); + m_camera = m_targetCamera; // no smoothing return consumed; } @@ -45,20 +46,38 @@ namespace UnitTest m_translateCameraInputChannelIds.m_boostChannelId = AzFramework::InputChannelId("keyboard_key_modifier_shift_l"); m_firstPersonRotateCamera = AZStd::make_shared(AzFramework::InputDeviceMouse::Button::Right); - m_firstPersonTranslateCamera = - AZStd::make_shared(AzFramework::LookTranslation, m_translateCameraInputChannelIds); + // set rotate speed to be a value that will scale motion delta (pixels moved) by a thousandth. + m_firstPersonRotateCamera->m_rotateSpeedFn = []() + { + return 0.001f; + }; + + m_firstPersonTranslateCamera = AZStd::make_shared( + m_translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivot); + + m_pivotCamera = AZStd::make_shared(m_pivotChannelId); + m_pivotCamera->SetPivotFn( + [this](const AZ::Vector3&, const AZ::Vector3&) + { + return m_pivot; + }); + + auto pivotRotateCamera = AZStd::make_shared(AzFramework::InputDeviceMouse::Button::Left); + // set rotate speed to be a value that will scale motion delta (pixels moved) by a thousandth. + pivotRotateCamera->m_rotateSpeedFn = []() + { + return 0.001f; + }; - m_orbitCamera = AZStd::make_shared(m_orbitChannelId); - auto orbitRotateCamera = AZStd::make_shared(AzFramework::InputDeviceMouse::Button::Left); - auto orbitTranslateCamera = - AZStd::make_shared(AzFramework::OrbitTranslation, m_translateCameraInputChannelIds); + auto pivotTranslateCamera = AZStd::make_shared( + m_translateCameraInputChannelIds, AzFramework::PivotTranslation, AzFramework::TranslateOffset); - m_orbitCamera->m_orbitCameras.AddCamera(orbitRotateCamera); - m_orbitCamera->m_orbitCameras.AddCamera(orbitTranslateCamera); + m_pivotCamera->m_pivotCameras.AddCamera(pivotRotateCamera); + m_pivotCamera->m_pivotCameras.AddCamera(pivotTranslateCamera); m_cameraSystem->m_cameras.AddCamera(m_firstPersonRotateCamera); m_cameraSystem->m_cameras.AddCamera(m_firstPersonTranslateCamera); - m_cameraSystem->m_cameras.AddCamera(m_orbitCamera); + m_cameraSystem->m_cameras.AddCamera(m_pivotCamera); // these tests rely on using motion delta, not cursor positions (default is true) AzFramework::ed_cameraSystemUseCursor = false; @@ -68,7 +87,7 @@ namespace UnitTest { AzFramework::ed_cameraSystemUseCursor = true; - m_orbitCamera.reset(); + m_pivotCamera.reset(); m_firstPersonRotateCamera.reset(); m_firstPersonTranslateCamera.reset(); @@ -78,24 +97,29 @@ namespace UnitTest AllocatorsTestFixture::TearDown(); } - AzFramework::InputChannelId m_orbitChannelId = AzFramework::InputChannelId("keyboard_key_modifier_alt_l"); + AzFramework::InputChannelId m_pivotChannelId = AzFramework::InputChannelId("keyboard_key_modifier_alt_l"); AzFramework::TranslateCameraInputChannelIds m_translateCameraInputChannelIds; AZStd::shared_ptr m_firstPersonRotateCamera; AZStd::shared_ptr m_firstPersonTranslateCamera; - AZStd::shared_ptr m_orbitCamera; + AZStd::shared_ptr m_pivotCamera; + AZ::Vector3 m_pivot = AZ::Vector3::CreateZero(); + + //! This is approximately Pi/2 * 1000 - this can be used to rotate the camera 90 degrees (pitch or yaw based + //! on vertical or horizontal motion) as the rotate speed function is set to be 1/1000. + inline static const int PixelMotionDelta = 1570; }; - TEST_F(CameraInputFixture, BeginAndEndOrbitCameraInputConsumesCorrectEvents) + TEST_F(CameraInputFixture, BeginAndEndPivotCameraInputConsumesCorrectEvents) { - // begin orbit camera + // begin pivot camera const bool consumed1 = HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceKeyboard::Key::ModifierAltL, AzFramework::InputChannel::State::Began }); - // begin listening for orbit rotate (click detector) - event is not consumed + // begin listening for pivot rotate (click detector) - event is not consumed const bool consumed2 = HandleEventAndUpdate( AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Began }); - // begin orbit rotate (mouse has moved sufficient distance to initiate) + // begin pivot rotate (mouse has moved sufficient distance to initiate) const bool consumed3 = HandleEventAndUpdate(AzFramework::HorizontalMotionEvent{ 5 }); - // end orbit (mouse up) - event is not consumed + // end pivot (mouse up) - event is not consumed const bool consumed4 = HandleEventAndUpdate( AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Ended }); @@ -236,29 +260,110 @@ namespace UnitTest EXPECT_TRUE(activationEnded); } - TEST_F(CameraInputFixture, OrbitCameraInputHandlesLookAtPointAndSelfAtSamePositionWhenOrbiting) + TEST_F(CameraInputFixture, PivotCameraInputHandlesLookAtPointAndSelfAtSamePositionWhenPivoting) { // create pathological lookAtFn that just returns the same position as the camera - m_orbitCamera->SetLookAtFn( + m_pivotCamera->SetPivotFn( [](const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) { return position; }); + const auto expectedCameraPosition = AZ::Vector3(10.0f, 10.0f, 10.0f); AzFramework::UpdateCameraFromTransform( m_targetCamera, AZ::Transform::CreateFromQuaternionAndTranslation( - AZ::Quaternion::CreateFromEulerAnglesDegrees(AZ::Vector3(0.0f, 0.0f, 90.0f)), AZ::Vector3(10.0f, 10.0f, 10.0f))); + AZ::Quaternion::CreateFromEulerAnglesDegrees(AZ::Vector3(0.0f, 0.0f, 90.0f)), expectedCameraPosition)); + + HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_pivotChannelId, AzFramework::InputChannel::State::Began }); + + // verify the camera yaw has not changed and pivot point matches the expected camera position + using ::testing::FloatNear; + EXPECT_THAT(m_camera.m_yaw, FloatNear(AZ::DegToRad(90.0f), 0.001f)); + EXPECT_THAT(m_camera.m_pitch, FloatNear(0.0f, 0.001f)); + EXPECT_THAT(m_camera.m_offset, IsClose(AZ::Vector3::CreateZero())); + EXPECT_THAT(m_camera.m_pivot, IsClose(expectedCameraPosition)); + } + + TEST_F(CameraInputFixture, FirstPersonRotateCameraInputRotatesYawByNinetyDegreesWithRequiredPixelDelta) + { + const auto cameraStartingPosition = AZ::Vector3::CreateAxisY(-10.0f); + m_targetCamera.m_pivot = cameraStartingPosition; + + HandleEventAndUpdate( + AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Right, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate(AzFramework::HorizontalMotionEvent{ PixelMotionDelta }); + + const float expectedYaw = AzFramework::WrapYawRotation(-AZ::Constants::HalfPi); + + using ::testing::FloatNear; + EXPECT_THAT(m_camera.m_yaw, FloatNear(expectedYaw, 0.001f)); + EXPECT_THAT(m_camera.m_pitch, FloatNear(0.0f, 0.001f)); + EXPECT_THAT(m_camera.m_pivot, IsClose(cameraStartingPosition)); + EXPECT_THAT(m_camera.m_offset, IsClose(AZ::Vector3::CreateZero())); + } + + TEST_F(CameraInputFixture, FirstPersonRotateCameraInputRotatesPitchByNinetyDegreesWithRequiredPixelDelta) + { + const auto cameraStartingPosition = AZ::Vector3::CreateAxisY(-10.0f); + m_targetCamera.m_pivot = cameraStartingPosition; + + HandleEventAndUpdate( + AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Right, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate(AzFramework::VerticalMotionEvent{ PixelMotionDelta }); + + const float expectedPitch = AzFramework::ClampPitchRotation(-AZ::Constants::HalfPi); + + using ::testing::FloatNear; + EXPECT_THAT(m_camera.m_yaw, FloatNear(0.0f, 0.001f)); + EXPECT_THAT(m_camera.m_pitch, FloatNear(expectedPitch, 0.001f)); + EXPECT_THAT(m_camera.m_pivot, IsClose(cameraStartingPosition)); + EXPECT_THAT(m_camera.m_offset, IsClose(AZ::Vector3::CreateZero())); + } + + TEST_F(CameraInputFixture, PivotRotateCameraInputRotatesPitchOffsetByNinetyDegreesWithRequiredPixelDelta) + { + const auto cameraStartingPosition = AZ::Vector3::CreateAxisY(-20.0f); + m_targetCamera.m_pivot = cameraStartingPosition; + + m_pivot = AZ::Vector3::CreateAxisY(-10.0f); + + HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_pivotChannelId, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate( + AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate(AzFramework::VerticalMotionEvent{ PixelMotionDelta }); + + const auto expectedCameraEndingPosition = AZ::Vector3(0.0f, -10.0f, 10.0f); + const float expectedPitch = AzFramework::ClampPitchRotation(-AZ::Constants::HalfPi); - m_camera = m_targetCamera; + using ::testing::FloatNear; + EXPECT_THAT(m_camera.m_yaw, FloatNear(0.0f, 0.001f)); + EXPECT_THAT(m_camera.m_pitch, FloatNear(expectedPitch, 0.001f)); + EXPECT_THAT(m_camera.m_pivot, IsClose(m_pivot)); + EXPECT_THAT(m_camera.m_offset, IsClose(AZ::Vector3::CreateAxisY(-10.0f))); + EXPECT_THAT(m_camera.Translation(), IsCloseTolerance(expectedCameraEndingPosition, 0.01f)); + } + + TEST_F(CameraInputFixture, PivotRotateCameraInputRotatesYawOffsetByNinetyDegreesWithRequiredPixelDelta) + { + const auto cameraStartingPosition = AZ::Vector3(15.0f, -20.0f, 0.0f); + m_targetCamera.m_pivot = cameraStartingPosition; + + m_pivot = AZ::Vector3(10.0f, -10.0f, 0.0f); + + HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_pivotChannelId, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate( + AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate(AzFramework::HorizontalMotionEvent{ -PixelMotionDelta }); - HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_orbitChannelId, AzFramework::InputChannel::State::Began }); + const auto expectedCameraEndingPosition = AZ::Vector3(20.0f, -5.0f, 0.0f); + const float expectedYaw = AzFramework::WrapYawRotation(AZ::Constants::HalfPi); - // verify the camera yaw has not changed and the look at point - // does not match that of the camera translation - using ::testing::Eq; - using ::testing::Not; - EXPECT_THAT(m_camera.m_yaw, Eq(AZ::DegToRad(90.0f))); - EXPECT_THAT(m_camera.m_lookAt, Not(IsClose(m_camera.Translation()))); + using ::testing::FloatNear; + EXPECT_THAT(m_camera.m_yaw, FloatNear(expectedYaw, 0.001f)); + EXPECT_THAT(m_camera.m_pitch, FloatNear(0.0f, 0.001f)); + EXPECT_THAT(m_camera.m_pivot, IsClose(m_pivot)); + EXPECT_THAT(m_camera.m_offset, IsClose(AZ::Vector3(5.0f, -10.0f, 0.0f))); + EXPECT_THAT(m_camera.Translation(), IsCloseTolerance(expectedCameraEndingPosition, 0.01f)); } } // namespace UnitTest diff --git a/Code/Framework/AzFramework/Tests/FileIO.cpp b/Code/Framework/AzFramework/Tests/FileIO.cpp index fb95512968..ca7c46b66c 100644 --- a/Code/Framework/AzFramework/Tests/FileIO.cpp +++ b/Code/Framework/AzFramework/Tests/FileIO.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -30,21 +29,6 @@ using namespace AZ; using namespace AZ::IO; using namespace AZ::Debug; -namespace PathUtil -{ - AZStd::string AddSlash(const AZStd::string& path) - { - if (path.empty() || path[path.length() - 1] == '/') - { - return path; - } - if (path[path.length() - 1] == '\\') - { - return path.substr(0, path.length() - 1) + "/"; - } - return path + "/"; - } -} namespace UnitTest { @@ -161,15 +145,16 @@ namespace UnitTest : public ScopedAllocatorSetupFixture { public: - AZStd::string m_root; - AZStd::string folderName; - AZStd::string deepFolder; - AZStd::string extraFolder; - - AZStd::string fileRoot; - AZStd::string file01Name; - AZStd::string file02Name; - AZStd::string file03Name; + AZ::Test::ScopedAutoTempDirectory m_tempDir; + AZ::IO::Path m_root; + AZ::IO::Path m_folderName; + AZ::IO::Path m_deepFolder; + AZ::IO::Path m_extraFolder; + + AZ::IO::Path m_fileRoot; + AZ::IO::Path m_file01Name; + AZ::IO::Path m_file02Name; + AZ::IO::Path m_file03Name; int m_randomFolderKey = 0; FolderFixture() @@ -179,43 +164,13 @@ namespace UnitTest void ChooseRandomFolder() { - char currentDir[AZ_MAX_PATH_LEN]; - AZ::Utils::GetExecutableDirectory(currentDir, AZ_MAX_PATH_LEN); - - folderName = currentDir; - folderName.append("/temp"); - m_root = folderName; - if (folderName.size() > 0) - { - folderName = PathUtil::AddSlash(folderName); - } - - AZStd::string tempName = AZStd::string::format("tmp%08x", m_randomFolderKey); - folderName.append(tempName.c_str()); - folderName = PathUtil::AddSlash(folderName); - AZStd::replace(folderName.begin(), folderName.end(), '\\', '/'); - - // Make sure the drive letter is capitalized - if (folderName.size() > 2) - { - if (folderName[1] == ':') - { - folderName[0] = static_cast(toupper(folderName[0])); - } - } - - deepFolder = folderName; - deepFolder.append("test"); - - deepFolder = PathUtil::AddSlash(deepFolder); - deepFolder.append("subdir"); - - extraFolder = deepFolder; - extraFolder = PathUtil::AddSlash(extraFolder); - extraFolder.append("subdir2"); + m_root = m_tempDir.GetDirectory(); + m_folderName = m_root / AZStd::string::format("tmp%08x", m_randomFolderKey); + m_deepFolder = m_folderName / "test" / "subdir"; + m_extraFolder = m_deepFolder / "subdir2"; // make a couple files there, and in the root: - fileRoot = PathUtil::AddSlash(extraFolder); + m_fileRoot = m_extraFolder; } void SetUp() override @@ -229,37 +184,33 @@ namespace UnitTest { ChooseRandomFolder(); ++m_randomFolderKey; - } while (local.IsDirectory(fileRoot.c_str())); + } while (local.IsDirectory(m_fileRoot.c_str())); - file01Name = fileRoot + "file01.txt"; - file02Name = fileRoot + "file02.asdf"; - file03Name = fileRoot + "test123.wha"; + m_file01Name = m_fileRoot / "file01.txt"; + m_file02Name = m_fileRoot / "file02.asdf"; + m_file03Name = m_fileRoot / "test123.wha"; } void TearDown() override { - if ((!folderName.empty())&&(strstr(folderName.c_str(), "/temp") != nullptr)) - { - // cleanup! - LocalFileIO local; - local.DestroyPath(folderName.c_str()); - } } void CreateTestFiles() { + constexpr auto openMode = SystemFile::OpenMode::SF_OPEN_WRITE_ONLY + | SystemFile::OpenMode::SF_OPEN_CREATE + | SystemFile::OpenMode::SF_OPEN_CREATE_NEW; + constexpr AZStd::string_view testContent("this is just a test"); + LocalFileIO local; - AZ_TEST_ASSERT(local.CreatePath(fileRoot.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(fileRoot.c_str())); - for (const AZStd::string& filename : { file01Name, file02Name, file03Name }) + AZ_TEST_ASSERT(local.CreatePath(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_fileRoot.c_str())); + for (const AZ::IO::Path& filename : { m_file01Name, m_file02Name, m_file03Name }) { -#ifdef AZ_COMPILER_MSVC - FILE* tempFile; - fopen_s(&tempFile, filename.c_str(), "wb"); -#else - FILE* tempFile = fopen(filename.c_str(), "wb"); -#endif - fwrite("this is just a test", 1, 19, tempFile); - fclose(tempFile); + SystemFile tempFile; + tempFile.Open(filename.c_str(), openMode); + + tempFile.Write(testContent.data(), testContent.size()); + tempFile.Close(); } } }; @@ -272,28 +223,23 @@ namespace UnitTest { LocalFileIO local; - AZ_TEST_ASSERT(!local.Exists(folderName.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_folderName.c_str())); - AZStd::string longPathCreateTest = folderName; - longPathCreateTest.append("one"); - longPathCreateTest = PathUtil::AddSlash(longPathCreateTest); - longPathCreateTest.append("two"); - longPathCreateTest = PathUtil::AddSlash(longPathCreateTest); - longPathCreateTest.append("three"); + AZ::IO::Path longPathCreateTest = m_folderName / "one" / "two" / "three"; AZ_TEST_ASSERT(!local.Exists(longPathCreateTest.c_str())); AZ_TEST_ASSERT(!local.IsDirectory(longPathCreateTest.c_str())); AZ_TEST_ASSERT(local.CreatePath(longPathCreateTest.c_str())); AZ_TEST_ASSERT(local.IsDirectory(longPathCreateTest.c_str())); - AZ_TEST_ASSERT(!local.Exists(deepFolder.c_str())); - AZ_TEST_ASSERT(!local.IsDirectory(deepFolder.c_str())); - AZ_TEST_ASSERT(local.CreatePath(deepFolder.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(deepFolder.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_deepFolder.c_str())); + AZ_TEST_ASSERT(!local.IsDirectory(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_deepFolder.c_str())); - AZ_TEST_ASSERT(local.Exists(deepFolder.c_str())); - AZ_TEST_ASSERT(local.CreatePath(deepFolder.c_str())); - AZ_TEST_ASSERT(local.Exists(deepFolder.c_str())); + AZ_TEST_ASSERT(local.Exists(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.Exists(m_deepFolder.c_str())); } }; @@ -310,16 +256,19 @@ namespace UnitTest { LocalFileIO local; - AZ_TEST_ASSERT(!local.Exists(fileRoot.c_str())); - AZ_TEST_ASSERT(!local.IsDirectory(fileRoot.c_str())); - AZ_TEST_ASSERT(local.CreatePath(fileRoot.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(fileRoot.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_fileRoot.c_str())); + AZ_TEST_ASSERT(!local.IsDirectory(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_fileRoot.c_str())); - FILE* tempFile = nullptr; - azfopen(&tempFile, file01Name.c_str(), "wb"); - - fwrite("this is just a test", 1, 19, tempFile); - fclose(tempFile); + constexpr auto openMode = SystemFile::OpenMode::SF_OPEN_WRITE_ONLY + | SystemFile::OpenMode::SF_OPEN_CREATE + | SystemFile::OpenMode::SF_OPEN_CREATE_NEW; + SystemFile tempFile; + tempFile.Open(m_file01Name.c_str(), openMode); + constexpr AZStd::string_view testContent("this is just a test"); + tempFile.Write(testContent.data(), testContent.size()); + tempFile.Close(); AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; AZ_TEST_ASSERT(!local.Open("", AZ::IO::OpenMode::ModeWrite, fileHandle)); @@ -327,12 +276,12 @@ namespace UnitTest // test size without opening: AZ::u64 fs = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), fs)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), fs)); AZ_TEST_ASSERT(fs == 19); fileHandle = AZ::IO::InvalidHandle; - AZ::u64 modTimeA = local.ModificationTime(file01Name.c_str()); + AZ::u64 modTimeA = local.ModificationTime(m_file01Name.c_str()); AZ_TEST_ASSERT(modTimeA != 0); // test invalid handle ops: @@ -344,14 +293,14 @@ namespace UnitTest AZ_TEST_ASSERT(!local.Read(fileHandle, nullptr, 0, false)); AZ_TEST_ASSERT(!local.Tell(fileHandle, fs)); - AZ_TEST_ASSERT(!local.Exists((file01Name + "notexist").c_str())); + AZ_TEST_ASSERT(!local.Exists((m_file01Name.Native() + "notexist").c_str())); - AZ_TEST_ASSERT(local.Exists(file01Name.c_str())); - AZ_TEST_ASSERT(!local.IsReadOnly(file01Name.c_str())); - AZ_TEST_ASSERT(!local.IsDirectory(file01Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file01Name.c_str())); + AZ_TEST_ASSERT(!local.IsReadOnly(m_file01Name.c_str())); + AZ_TEST_ASSERT(!local.IsDirectory(m_file01Name.c_str())); // test reads and seeks. - AZ_TEST_ASSERT(local.Open(file01Name.c_str(), AZ::IO::OpenMode::ModeRead, fileHandle)); + AZ_TEST_ASSERT(local.Open(m_file01Name.c_str(), AZ::IO::OpenMode::ModeRead, fileHandle)); AZ_TEST_ASSERT(fileHandle != AZ::IO::InvalidHandle); // use this again later... @@ -368,7 +317,7 @@ namespace UnitTest // test size without opening, after its already open: fs = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), fs)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), fs)); AZ_TEST_ASSERT(fs == 19); AZ::u64 offs = 0; @@ -442,22 +391,22 @@ namespace UnitTest #if AZ_TRAIT_AZFRAMEWORKTEST_PERFORM_CHMOD_TEST #if AZ_TRAIT_USE_WINDOWS_FILE_API - _chmod(file01Name.c_str(), _S_IREAD); + _chmod(m_file01Name.c_str(), _S_IREAD); #else - chmod(file01Name.c_str(), S_IRUSR | S_IRGRP | S_IROTH); + chmod(m_file01Name.c_str(), S_IRUSR | S_IRGRP | S_IROTH); #endif - AZ_TEST_ASSERT(local.IsReadOnly(file01Name.c_str())); + AZ_TEST_ASSERT(local.IsReadOnly(m_file01Name.c_str())); #if AZ_TRAIT_USE_WINDOWS_FILE_API - _chmod(file01Name.c_str(), _S_IREAD | _S_IWRITE); + _chmod(m_file01Name.c_str(), _S_IREAD | _S_IWRITE); #else - chmod(file01Name.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + chmod(m_file01Name.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); #endif #endif - AZ_TEST_ASSERT(!local.IsReadOnly(file01Name.c_str())); + AZ_TEST_ASSERT(!local.IsReadOnly(m_file01Name.c_str())); } }; @@ -474,14 +423,14 @@ namespace UnitTest { LocalFileIO local; - AZ_TEST_ASSERT(local.CreatePath(fileRoot.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(fileRoot.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_fileRoot.c_str())); { #ifdef AZ_COMPILER_MSVC FILE* tempFile; - fopen_s(&tempFile, file01Name.c_str(), "wb"); + fopen_s(&tempFile, m_file01Name.c_str(), "wb"); #else - FILE* tempFile = fopen(file01Name.c_str(), "wb"); + FILE* tempFile = fopen(m_file01Name.c_str(), "wb"); #endif fwrite("this is just a test", 1, 19, tempFile); fclose(tempFile); @@ -489,47 +438,47 @@ namespace UnitTest // make sure attributes are copied (such as modtime) even if they're copied: AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); - AZ_TEST_ASSERT(local.Copy(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(local.Copy(m_file01Name.c_str(), m_file02Name.c_str())); AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); - AZ_TEST_ASSERT(local.Copy(file01Name.c_str(), file03Name.c_str())); - - AZ_TEST_ASSERT(local.Exists(file01Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file02Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file03Name.c_str())); - AZ_TEST_ASSERT(!local.DestroyPath(file01Name.c_str())); // you may not destroy files. - AZ_TEST_ASSERT(!local.DestroyPath(file02Name.c_str())); - AZ_TEST_ASSERT(!local.DestroyPath(file03Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file01Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file02Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file03Name.c_str())); + AZ_TEST_ASSERT(local.Copy(m_file01Name.c_str(), m_file03Name.c_str())); + + AZ_TEST_ASSERT(local.Exists(m_file01Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file02Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file03Name.c_str())); + AZ_TEST_ASSERT(!local.DestroyPath(m_file01Name.c_str())); // you may not destroy files. + AZ_TEST_ASSERT(!local.DestroyPath(m_file02Name.c_str())); + AZ_TEST_ASSERT(!local.DestroyPath(m_file03Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file01Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file02Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file03Name.c_str())); AZ::u64 f1s = 0; AZ::u64 f2s = 0; AZ::u64 f3s = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), f1s)); - AZ_TEST_ASSERT(local.Size(file02Name.c_str(), f2s)); - AZ_TEST_ASSERT(local.Size(file03Name.c_str(), f3s)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), f1s)); + AZ_TEST_ASSERT(local.Size(m_file02Name.c_str(), f2s)); + AZ_TEST_ASSERT(local.Size(m_file03Name.c_str(), f3s)); AZ_TEST_ASSERT(f1s == f2s); AZ_TEST_ASSERT(f1s == f3s); // Copying over top other files is allowed SystemFile file; - EXPECT_TRUE(file.Open(file01Name.c_str(), SystemFile::SF_OPEN_WRITE_ONLY)); + EXPECT_TRUE(file.Open(m_file01Name.c_str(), SystemFile::SF_OPEN_WRITE_ONLY)); file.Write("this is just a test that is longer", 34); file.Close(); // make sure attributes are copied (such as modtime) even if they're copied: AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); - EXPECT_TRUE(local.Copy(file01Name.c_str(), file02Name.c_str())); + EXPECT_TRUE(local.Copy(m_file01Name.c_str(), m_file02Name.c_str())); f1s = 0; f2s = 0; f3s = 0; - EXPECT_TRUE(local.Size(file01Name.c_str(), f1s)); - EXPECT_TRUE(local.Size(file02Name.c_str(), f2s)); - EXPECT_TRUE(local.Size(file03Name.c_str(), f3s)); + EXPECT_TRUE(local.Size(m_file01Name.c_str(), f1s)); + EXPECT_TRUE(local.Size(m_file02Name.c_str(), f2s)); + EXPECT_TRUE(local.Size(m_file03Name.c_str(), f3s)); EXPECT_EQ(f1s, f2s); EXPECT_NE(f1s, f3s); } @@ -552,37 +501,37 @@ namespace UnitTest AZ::u64 modTimeC = 0; AZ::u64 modTimeD = 0; - modTimeC = local.ModificationTime(file02Name.c_str()); - modTimeD = local.ModificationTime(file03Name.c_str()); + modTimeC = local.ModificationTime(m_file02Name.c_str()); + modTimeD = local.ModificationTime(m_file03Name.c_str()); // make sure modtimes are in ascending order (at least) AZ_TEST_ASSERT(modTimeD >= modTimeC); // now touch some of the files. This is also how we test append mode, and write mode. AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; - AZ_TEST_ASSERT(local.Open(file02Name.c_str(), AZ::IO::OpenMode::ModeAppend | AZ::IO::OpenMode::ModeBinary, fileHandle)); + AZ_TEST_ASSERT(local.Open(m_file02Name.c_str(), AZ::IO::OpenMode::ModeAppend | AZ::IO::OpenMode::ModeBinary, fileHandle)); AZ_TEST_ASSERT(fileHandle != AZ::IO::InvalidHandle); AZ_TEST_ASSERT(local.Write(fileHandle, "more", 4)); AZ_TEST_ASSERT(local.Close(fileHandle)); AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); // No-append-mode - AZ_TEST_ASSERT(local.Open(file03Name.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary, fileHandle)); + AZ_TEST_ASSERT(local.Open(m_file03Name.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary, fileHandle)); AZ_TEST_ASSERT(fileHandle != AZ::IO::InvalidHandle); AZ_TEST_ASSERT(local.Write(fileHandle, "more", 4)); AZ_TEST_ASSERT(local.Close(fileHandle)); - modTimeC = local.ModificationTime(file02Name.c_str()); - modTimeD = local.ModificationTime(file03Name.c_str()); + modTimeC = local.ModificationTime(m_file02Name.c_str()); + modTimeD = local.ModificationTime(m_file03Name.c_str()); AZ_TEST_ASSERT(modTimeD > modTimeC); AZ::u64 f1s = 0; AZ::u64 f2s = 0; AZ::u64 f3s = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), f1s)); - AZ_TEST_ASSERT(local.Size(file02Name.c_str(), f2s)); - AZ_TEST_ASSERT(local.Size(file03Name.c_str(), f3s)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), f1s)); + AZ_TEST_ASSERT(local.Size(m_file02Name.c_str(), f2s)); + AZ_TEST_ASSERT(local.Size(m_file03Name.c_str(), f3s)); AZ_TEST_ASSERT(f2s == f1s + 4); AZ_TEST_ASSERT(f3s == 4); } @@ -603,8 +552,8 @@ namespace UnitTest CreateTestFiles(); - AZStd::vector resultFiles; - bool foundOK = local.FindFiles(fileRoot.c_str(), "*", + AZStd::vector resultFiles; + bool foundOK = local.FindFiles(m_fileRoot.c_str(), "*", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -616,7 +565,7 @@ namespace UnitTest resultFiles.clear(); - foundOK = local.FindFiles(fileRoot.c_str(), "*", + foundOK = local.FindFiles(m_fileRoot.c_str(), "*", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -627,7 +576,7 @@ namespace UnitTest AZ_TEST_ASSERT(resultFiles.size() == 3); // note: following tests accumulate more files without clearing resultfiles. - foundOK = local.FindFiles(fileRoot.c_str(), "*.txt", + foundOK = local.FindFiles(m_fileRoot.c_str(), "*.txt", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -637,7 +586,7 @@ namespace UnitTest AZ_TEST_ASSERT(foundOK); AZ_TEST_ASSERT(resultFiles.size() == 4); - foundOK = local.FindFiles(fileRoot.c_str(), "file*.asdf", + foundOK = local.FindFiles(m_fileRoot.c_str(), "file*.asdf", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -647,7 +596,7 @@ namespace UnitTest AZ_TEST_ASSERT(foundOK); AZ_TEST_ASSERT(resultFiles.size() == 5); - foundOK = local.FindFiles(fileRoot.c_str(), "asaf.asdf", + foundOK = local.FindFiles(m_fileRoot.c_str(), "asaf.asdf", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -660,7 +609,7 @@ namespace UnitTest resultFiles.clear(); // test to make sure directories show up: - foundOK = local.FindFiles(deepFolder.c_str(), "*", + foundOK = local.FindFiles(m_deepFolder.c_str(), "*", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -668,11 +617,11 @@ namespace UnitTest }); // canonicalize the name in the same way that find does. - //AZStd::replace() extraFolder.replace('\\', '/'); FIXME PPATEL + //AZStd::replace() m_extraFolder.replace('\\', '/'); FIXME PPATEL AZ_TEST_ASSERT(foundOK); AZ_TEST_ASSERT(resultFiles.size() == 1); - AZ_TEST_ASSERT(resultFiles[0] == extraFolder); + AZ_TEST_ASSERT(resultFiles[0] == m_extraFolder); resultFiles.clear(); foundOK = local.FindFiles("o:137787621!@#$%^&&**())_+[])_", "asaf.asdf", [&](const char* filePath) -> bool @@ -684,13 +633,13 @@ namespace UnitTest AZ_TEST_ASSERT(!foundOK); AZ_TEST_ASSERT(resultFiles.size() == 0); - AZStd::string file04Name = fileRoot + "test.wha"; + AZ::IO::Path file04Name = m_fileRoot / "test.wha"; // test rename - AZ_TEST_ASSERT(local.Rename(file03Name.c_str(), file04Name.c_str())); - AZ_TEST_ASSERT(!local.Rename(file03Name.c_str(), file04Name.c_str())); + AZ_TEST_ASSERT(local.Rename(m_file03Name.c_str(), file04Name.c_str())); + AZ_TEST_ASSERT(!local.Rename(m_file03Name.c_str(), file04Name.c_str())); AZ_TEST_ASSERT(local.Rename(file04Name.c_str(), file04Name.c_str())); // this is valid and ok AZ_TEST_ASSERT(local.Exists(file04Name.c_str())); - AZ_TEST_ASSERT(!local.Exists(file03Name.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_file03Name.c_str())); AZ_TEST_ASSERT(!local.IsDirectory(file04Name.c_str())); AZ::u64 f3s = 0; @@ -698,8 +647,8 @@ namespace UnitTest AZ_TEST_ASSERT(f3s == 19); // deep destroy directory: - AZ_TEST_ASSERT(local.DestroyPath(folderName.c_str())); - AZ_TEST_ASSERT(!local.Exists(folderName.c_str())); + AZ_TEST_ASSERT(local.DestroyPath(m_folderName.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_folderName.c_str())); } }; @@ -715,7 +664,7 @@ namespace UnitTest AZ::IO::LocalFileIO local; // test aliases - local.SetAlias("@test@", folderName.c_str()); + local.SetAlias("@test@", m_folderName.c_str()); const char* testDest1 = local.GetAlias("@test@"); AZ_TEST_ASSERT(testDest1 != nullptr); const char* testDest2 = local.GetAlias("@NOPE@"); @@ -725,18 +674,18 @@ namespace UnitTest // test resolving const char* aliasTestPath = "@test@\\some\\path\\somefile.txt"; - char aliasResolvedPath[AZ_MAX_PATH_LEN]; - bool resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, AZ_MAX_PATH_LEN); + char aliasResolvedPath[AZ::IO::MaxPathLength]; + bool resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, AZ::IO::MaxPathLength); AZ_TEST_ASSERT(resolveDidWork); - AZStd::string expectedResolvedPath = folderName + "some/path/somefile.txt"; + AZ::IO::Path expectedResolvedPath = m_folderName / "some/path/somefile.txt"; AZ_TEST_ASSERT(aliasResolvedPath == expectedResolvedPath); // more resolve path tests with invalid inputs const char* testPath = nullptr; char* testResolvedPath = nullptr; - resolveDidWork = local.ResolvePath(testPath, aliasResolvedPath, AZ_MAX_PATH_LEN); + resolveDidWork = local.ResolvePath(testPath, aliasResolvedPath, AZ::IO::MaxPathLength); AZ_TEST_ASSERT(!resolveDidWork); - resolveDidWork = local.ResolvePath(aliasTestPath, testResolvedPath, AZ_MAX_PATH_LEN); + resolveDidWork = local.ResolvePath(aliasTestPath, testResolvedPath, AZ::IO::MaxPathLength); AZ_TEST_ASSERT(!resolveDidWork); resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, 0); AZ_TEST_ASSERT(!resolveDidWork); @@ -751,7 +700,7 @@ namespace UnitTest // Test that sending in a too small output path fails, // if the output buffer is too small to hold the resolved path - size_t SMALLER_THAN_FINAL_RESOLVED_PATH = expectedResolvedPath.length() - 1; + size_t SMALLER_THAN_FINAL_RESOLVED_PATH = expectedResolvedPath.Native().length() - 1; AZ_TEST_START_TRACE_SUPPRESSION; resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, SMALLER_THAN_FINAL_RESOLVED_PATH); AZ_TEST_STOP_TRACE_SUPPRESSION(1); @@ -766,22 +715,23 @@ namespace UnitTest TEST_F(AliasTest, ResolvePath_PathViewOverload_Succeeds) { AZ::IO::LocalFileIO local; - local.SetAlias("@test@", folderName.c_str()); + local.SetAlias("@test@", m_folderName.c_str()); AZ::IO::PathView aliasTestPath = "@test@\\some\\path\\somefile.txt"; AZ::IO::FixedMaxPath aliasResolvedPath; ASSERT_TRUE(local.ResolvePath(aliasResolvedPath, aliasTestPath)); - const auto expectedResolvedPath = AZ::IO::FixedMaxPathString::format("%ssome/path/somefile.txt", folderName.c_str()); - EXPECT_STREQ(expectedResolvedPath.c_str(), aliasResolvedPath.c_str()); + AZ::IO::Path expectedResolvedPath = m_folderName / "some" / "path" / "somefile.txt"; + + EXPECT_EQ(expectedResolvedPath, aliasResolvedPath); AZStd::optional optionalResolvedPath = local.ResolvePath(aliasTestPath); ASSERT_TRUE(optionalResolvedPath); - EXPECT_STREQ(expectedResolvedPath.c_str(), optionalResolvedPath->c_str()); + EXPECT_EQ(expectedResolvedPath, optionalResolvedPath.value()); } TEST_F(AliasTest, ResolvePath_PathViewOverloadWithEmptyPath_Fails) { AZ::IO::LocalFileIO local; - local.SetAlias("@test@", folderName.c_str()); + local.SetAlias("@test@", m_folderName.c_str()); AZ::IO::FixedMaxPath aliasResolvedPath; EXPECT_FALSE(local.ResolvePath(aliasResolvedPath, {})); } @@ -852,6 +802,51 @@ namespace UnitTest AZ_TEST_STOP_TRACE_SUPPRESSION(1); } + TEST_F(AliasTest, GetAlias_LogsError_WhenAccessingDeprecatedAlias_Succeeds) + { + AZ::IO::LocalFileIO local; + + AZ::IO::FixedMaxPathString aliasFolder; + EXPECT_TRUE(local.ConvertToAbsolutePath("/temp", aliasFolder.data(), aliasFolder.capacity())); + aliasFolder.resize_no_construct(AZStd::char_traits::length(aliasFolder.data())); + + local.SetAlias("@test@", aliasFolder.c_str()); + local.SetDeprecatedAlias("@deprecated@", "@test@"); + local.SetDeprecatedAlias("@deprecatednonexistent@", "@nonexistent@"); + local.SetDeprecatedAlias("@deprecatedsecond@", "@deprecated@"); + local.SetDeprecatedAlias("@deprecatednonaliaspath@", aliasFolder); + + AZ_TEST_START_TRACE_SUPPRESSION; + const char* testAlias = local.GetAlias("@test@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(0); + + // Validate that accessing Deprecated Alias results in AZ_Error + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecated@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecatednonexistent@"); + EXPECT_EQ(nullptr, testAlias); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecatedsecond@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecatednonaliaspath@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + } + class SmartMoveTests : public FolderFixture { @@ -860,24 +855,23 @@ namespace UnitTest { LocalFileIO localFileIO; AZ::IO::FileIOBase::SetInstance(&localFileIO); - AZStd::string path; - AzFramework::StringFunc::Path::GetFullPath(file01Name.c_str(), path); + AZ::IO::Path path = m_file01Name.ParentPath(); AZ_TEST_ASSERT(localFileIO.CreatePath(path.c_str())); - AzFramework::StringFunc::Path::GetFullPath(file02Name.c_str(), path); + path = m_file01Name.ParentPath(); AZ_TEST_ASSERT(localFileIO.CreatePath(path.c_str())); AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; - localFileIO.Open(file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); + localFileIO.Open(m_file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); localFileIO.Write(fileHandle, "DummyFile", 9); localFileIO.Close(fileHandle); AZ::IO::HandleType fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle1); localFileIO.Write(fileHandle1, "TestFile", 8); localFileIO.Close(fileHandle1); fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); static const size_t testStringLen = 256; char testString[testStringLen] = { 0 }; localFileIO.Read(fileHandle1, testString, testStringLen); @@ -885,50 +879,50 @@ namespace UnitTest AZ_TEST_ASSERT(strncmp(testString, "TestFile", 8) == 0); // try swapping files when none of the files are in use - AZ_TEST_ASSERT(AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); testString[0] = '\0'; localFileIO.Read(fileHandle1, testString, testStringLen); localFileIO.Close(fileHandle1); AZ_TEST_ASSERT(strncmp(testString, "DummyFile", 9) == 0); //try swapping files when source file is not present, this should fail - AZ_TEST_ASSERT(!AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(!AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); fileHandle = AZ::IO::InvalidHandle; - localFileIO.Open(file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); + localFileIO.Open(m_file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); localFileIO.Write(fileHandle, "TestFile", 8); localFileIO.Close(fileHandle); #if AZ_TRAIT_AZFRAMEWORKTEST_MOVE_WHILE_OPEN fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); testString[0] = '\0'; localFileIO.Read(fileHandle1, testString, testStringLen); // try swapping files when the destination file is open for read only, // since window is unable to move files that are open for read, this will fail. - AZ_TEST_ASSERT(!AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(!AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); localFileIO.Close(fileHandle1); #endif fileHandle = AZ::IO::InvalidHandle; - localFileIO.Open(file01Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle); + localFileIO.Open(m_file01Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle); // try swapping files when the source file is open for read only - AZ_TEST_ASSERT(AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); localFileIO.Close(fileHandle); fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); testString[0] = '\0'; localFileIO.Read(fileHandle1, testString, testStringLen); AZ_TEST_ASSERT(strncmp(testString, "TestFile", 8) == 0); localFileIO.Close(fileHandle1); - localFileIO.Remove(file01Name.c_str()); - localFileIO.Remove(file02Name.c_str()); + localFileIO.Remove(m_file01Name.c_str()); + localFileIO.Remove(m_file02Name.c_str()); localFileIO.DestroyPath(m_root.c_str()); AZ::IO::FileIOBase::SetInstance(nullptr); diff --git a/Code/Framework/AzFramework/Tests/FileTagTests.cpp b/Code/Framework/AzFramework/Tests/FileTagTests.cpp index 134e7aad6d..2b09a5638c 100644 --- a/Code/Framework/AzFramework/Tests/FileTagTests.cpp +++ b/Code/Framework/AzFramework/Tests/FileTagTests.cpp @@ -27,7 +27,7 @@ namespace UnitTest const char DummyFile[] = "dummy.txt"; const char AnotherDummyFile[] = "Foo/Dummy.txt"; - + const char DummyPattern[] = R"(^(.+)_([a-z]+)\..+$)"; const char MatchingPatternFile[] = "Foo/dummy_abc.txt"; const char NonMatchingPatternFile[] = "Foo/dummy_a8c.txt"; @@ -75,7 +75,7 @@ namespace UnitTest : public AllocatorsFixture { public: - + void SetUp() override { AllocatorsFixture::SetUp(); @@ -89,7 +89,7 @@ namespace UnitTest const char* testAssetRoot = m_tempDirectory.GetDirectory(); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -98,7 +98,7 @@ namespace UnitTest AZ::IO::FileIOBase::SetInstance(nullptr); AZ::IO::FileIOBase::SetInstance(m_data->m_localFileIO.get()); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", testAssetRoot); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", testAssetRoot); m_data->m_excludeFileQueryManager = AZStd::make_unique(FileTagType::Exclude); m_data->m_includeFileQueryManager = AZStd::make_unique(FileTagType::Include); @@ -114,7 +114,7 @@ namespace UnitTest AZStd::vector includedWildcardTags = { DummyFileTags[DummyFileTagIndex::GIdx] }; EXPECT_TRUE(m_data->m_fileTagManager.AddFilePatternTags(DummyWildcard, FilePatternType::Wildcard, FileTagType::Include, includedWildcardTags).IsSuccess()); - + AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", ExcludeFile, FileTagAsset::Extension()).c_str(), m_data->m_excludeFile); AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", IncludeFile, FileTagAsset::Extension()).c_str(), m_data->m_includeFile); @@ -184,7 +184,7 @@ namespace UnitTest TEST_F(FileTagTest, FileTags_QueryByAbsoluteFilePath_Valid) { AZStd::string absoluteDummyFilePath = DummyFile; - EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath)); + EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath)); AZStd::set tags = m_data->m_excludeFileQueryManager->GetTags(absoluteDummyFilePath); @@ -196,7 +196,7 @@ namespace UnitTest ASSERT_EQ(tags.size(), 0); AZStd::string absoluteAnotherDummyFilePath = AnotherDummyFile; - EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath)); + EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath)); tags = m_data->m_includeFileQueryManager->GetTags(absoluteAnotherDummyFilePath); ASSERT_EQ(tags.size(), 2); @@ -213,7 +213,7 @@ namespace UnitTest // Set the customized alias AZStd::string customizedAliasFilePath; - const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::AssetDatabasePath::Join(assetsAlias, "foo", customizedAliasFilePath); AZ::IO::FileIOBase::GetInstance()->SetAlias("@customizedalias@", customizedAliasFilePath.c_str()); @@ -305,7 +305,7 @@ namespace UnitTest m_data->m_excludeFileQueryManager->ClearData(); EXPECT_TRUE(m_data->m_excludeFileQueryManager->Load(m_data->m_excludeFile)); - + AZStd::set outputTags = m_data->m_excludeFileQueryManager->GetTags(MatchingWildcardFile); EXPECT_EQ(outputTags.size(), 2); diff --git a/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp index 169834249f..665c06b571 100644 --- a/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp +++ b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp @@ -6,81 +6,19 @@ * */ +#include #include #include #include -#include -#include +#include +#include namespace UnitTest { - using namespace AZ; - - class FileIOBaseRAII - { - public: - FileIOBaseRAII(AZ::IO::FileIOBase& fileIO) - : m_prevFileIO(AZ::IO::FileIOBase::GetInstance()) - { - AZ::IO::FileIOBase::SetInstance(&fileIO); - } - - ~FileIOBaseRAII() - { - AZ::IO::FileIOBase::SetInstance(m_prevFileIO); - } - private: - AZ::IO::FileIOBase* m_prevFileIO; - }; - class GenAppDescriptors : public AllocatorsTestFixture { public: - - void run() - { - struct Config - { - const char* platformName; - const char* configName; - const char* libSuffix; - }; - - ComponentApplication app; - - SerializeContext serializeContext; - AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app); - AZ::Entity::Reflect(&serializeContext); - DynamicModuleDescriptor::Reflect(&serializeContext); - - AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity"); - - const Config config = {"Platform", "Config", "libSuffix"}; - - AZ::ComponentApplication::Descriptor descriptor; - - if (config.libSuffix && config.libSuffix[0]) - { - FakePopulateModules(descriptor, config.libSuffix); - } - - const AZStd::string filename = AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName); - - IO::FileIOStream stream(filename.c_str(), IO::OpenMode::ModeWrite); - ObjectStream* objStream = ObjectStream::Create(&stream, serializeContext, ObjectStream::ST_XML); - bool descWriteOk = objStream->WriteClass(&descriptor); - (void)descWriteOk; - AZ_Warning("ComponentApplication", descWriteOk, "Failed to write memory descriptor to application descriptor file %s!", filename.c_str()); - bool entityWriteOk = objStream->WriteClass(&dummySystemEntity); - (void)entityWriteOk; - AZ_Warning("ComponentApplication", entityWriteOk, "Failed to write system entity to application descriptor file %s!", filename.c_str()); - bool flushOk = objStream->Finalize(); - (void)flushOk; - AZ_Warning("ComponentApplication", flushOk, "Failed finalizing application descriptor file %s!", filename.c_str()); - - } - void FakePopulateModules(AZ::ComponentApplication::Descriptor& desc, const char* libSuffix) { static const char* modules[] = @@ -100,10 +38,44 @@ namespace UnitTest } }; - TEST_F(GenAppDescriptors, Test) + TEST_F(GenAppDescriptors, WriteDescriptor_ToXML_Succeeds) { - AZ::IO::LocalFileIO fileIO; - FileIOBaseRAII restoreFileIOScope(fileIO); - run(); + struct Config + { + const char* platformName; + const char* configName; + const char* libSuffix; + }; + + AzFramework::Application app; + + AZ::SerializeContext serializeContext; + AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app); + AZ::Entity::Reflect(&serializeContext); + AZ::DynamicModuleDescriptor::Reflect(&serializeContext); + + AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity"); + + const Config config = {"Platform", "Config", "libSuffix"}; + + AZ::ComponentApplication::Descriptor descriptor; + + if (config.libSuffix && config.libSuffix[0]) + { + FakePopulateModules(descriptor, config.libSuffix); + } + + AZ::Test::ScopedAutoTempDirectory tempDirectory; + const auto filename = AZ::IO::Path(tempDirectory.GetDirectory()) / + AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName); + + AZ::IO::FileIOStream stream(filename.c_str(), AZ::IO::OpenMode::ModeWrite); + auto objStream = AZ::ObjectStream::Create(&stream, serializeContext, AZ::ObjectStream::ST_XML); + const bool descWriteOk = objStream->WriteClass(&descriptor); + EXPECT_TRUE(descWriteOk) << "Failed to write memory descriptor to application descriptor file " << filename.c_str() << "!"; + const bool entityWriteOk = objStream->WriteClass(&dummySystemEntity); + EXPECT_TRUE(entityWriteOk) << "Failed to write system entity to application descriptor file " << filename.c_str() << "!"; + const bool flushOk = objStream->Finalize(); + EXPECT_TRUE(flushOk) << "Failed finalizing application descriptor file " << filename.c_str() << "!"; } } diff --git a/Code/Framework/AzFramework/Tests/Main.cpp b/Code/Framework/AzFramework/Tests/Main.cpp new file mode 100644 index 0000000000..c88648458a --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Main.cpp @@ -0,0 +1,9 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); diff --git a/Code/Framework/AzFramework/Tests/Mocks/MockSpawnableEntitiesInterface.h b/Code/Framework/AzFramework/Tests/Mocks/MockSpawnableEntitiesInterface.h index a5df7af4c3..a437545adf 100644 --- a/Code/Framework/AzFramework/Tests/Mocks/MockSpawnableEntitiesInterface.h +++ b/Code/Framework/AzFramework/Tests/Mocks/MockSpawnableEntitiesInterface.h @@ -40,6 +40,11 @@ namespace AzFramework MOCK_METHOD2(DespawnAllEntities, void(EntitySpawnTicket& ticket, DespawnAllEntitiesOptionalArgs optionalArgs)); + MOCK_METHOD3(DespawnEntity, void(AZ::EntityId entityId, EntitySpawnTicket& ticket, DespawnEntityOptionalArgs optionalArgs)); + + MOCK_METHOD2( + RetrieveEntitySpawnTicket, void(EntitySpawnTicket::Id entitySpawnTicketId, RetrieveEntitySpawnTicketCallback callback)); + MOCK_METHOD3( ReloadSpawnable, void(EntitySpawnTicket& ticket, AZ::Data::Asset spawnable, ReloadSpawnableOptionalArgs optionalArgs)); diff --git a/Code/Framework/AzFramework/Tests/Platform/Android/platform_specific_test_targets.cmake b/Code/Framework/AzFramework/Tests/Platform/Android/platform_specific_test_targets.cmake new file mode 100644 index 0000000000..7a325ca97e --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Android/platform_specific_test_targets.cmake @@ -0,0 +1,7 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Actions.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Actions.h new file mode 100644 index 0000000000..1650ff4f8d --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Actions.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +ACTION_TEMPLATE(ReturnMalloc, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_1_VALUE_PARAMS(p0)) { + T* value = static_cast(malloc(sizeof(T))); + *value = T{ p0 }; + return value; +} +ACTION_TEMPLATE(ReturnMalloc, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_2_VALUE_PARAMS(p0, p1)) { + T* value = static_cast(malloc(sizeof(T))); + *value = T{ p0, p1 }; + return value; +} diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Main.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Main.cpp new file mode 100644 index 0000000000..c88648458a --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Main.cpp @@ -0,0 +1,9 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Matchers.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Matchers.h new file mode 100644 index 0000000000..77acb1c3e4 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Matchers.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +inline testing::PolymorphicMatcher> StrEq(const AZStd::string& str) +{ + return ::testing::MakePolymorphicMatcher(testing::internal::StrEqualityMatcher(str, true, true)); +} diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp new file mode 100644 index 0000000000..b15809a4c6 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp @@ -0,0 +1,119 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "MockXcbInterface.h" + +// The functions defined in this file will take precedence over those defined +// in the real libxcb.so, allowing the test code to use a mock implementation + +extern "C" +{ + +// ---------------------------------------------------------------------------- +// xcb +xcb_connection_t* xcb_connect(const char* displayname, int* screenp) +{ + return MockXcbInterface::Instance()->xcb_connect(displayname, screenp); +} +void xcb_disconnect(xcb_connection_t* c) +{ + return MockXcbInterface::Instance()->xcb_disconnect(c); +} +xcb_generic_event_t* xcb_poll_for_event(xcb_connection_t* c) +{ + return MockXcbInterface::Instance()->xcb_poll_for_event(c); +} +xcb_generic_error_t* xcb_request_check(xcb_connection_t* c, xcb_void_cookie_t cookie) +{ + return MockXcbInterface::Instance()->xcb_request_check(c, cookie); +} + +// ---------------------------------------------------------------------------- +// xcb-xkb +xcb_xkb_use_extension_cookie_t xcb_xkb_use_extension(xcb_connection_t* c, uint16_t wantedMajor, uint16_t wantedMinor) +{ + return MockXcbInterface::Instance()->xcb_xkb_use_extension(c, wantedMajor, wantedMinor); +} +xcb_xkb_use_extension_reply_t* xcb_xkb_use_extension_reply(xcb_connection_t* c, xcb_xkb_use_extension_cookie_t cookie, xcb_generic_error_t** e) +{ + return MockXcbInterface::Instance()->xcb_xkb_use_extension_reply(c, cookie, e); +} +xcb_void_cookie_t xcb_xkb_select_events(xcb_connection_t* c, xcb_xkb_device_spec_t deviceSpec, uint16_t affectWhich, uint16_t clear, uint16_t selectAll, uint16_t affectMap, uint16_t map, const void* details) +{ + return MockXcbInterface::Instance()->xcb_xkb_select_events(c, deviceSpec, affectWhich, clear, selectAll, affectMap, map, details); +} + +// ---------------------------------------------------------------------------- +// xkb-x11 +int32_t xkb_x11_get_core_keyboard_device_id(xcb_connection_t* connection) +{ + return MockXcbInterface::Instance()->xkb_x11_get_core_keyboard_device_id(connection); +} +xkb_keymap* xkb_x11_keymap_new_from_device(xkb_context* context, xcb_connection_t* connection, int32_t device_id, xkb_keymap_compile_flags flags) +{ + return MockXcbInterface::Instance()->xkb_x11_keymap_new_from_device(context, connection, device_id, flags); +} +xkb_state* xkb_x11_state_new_from_device(xkb_keymap* keymap, xcb_connection_t* connection, int32_t device_id) +{ + return MockXcbInterface::Instance()->xkb_x11_state_new_from_device(keymap, connection, device_id); +} +int xkb_x11_setup_xkb_extension( + xcb_connection_t* connection, + uint16_t major_xkb_version, + uint16_t minor_xkb_version, + xkb_x11_setup_xkb_extension_flags flags, + uint16_t* major_xkb_version_out, + uint16_t* minor_xkb_version_out, + uint8_t* base_event_out, + uint8_t* base_error_out) +{ + return MockXcbInterface::Instance()->xkb_x11_setup_xkb_extension( + connection, major_xkb_version, minor_xkb_version, flags, major_xkb_version_out, minor_xkb_version_out, base_event_out, + base_error_out); +} + +// ---------------------------------------------------------------------------- +// xkbcommon +xkb_context* xkb_context_new(xkb_context_flags flags) +{ + return MockXcbInterface::Instance()->xkb_context_new(flags); +} +void xkb_context_unref(xkb_context* context) +{ + return MockXcbInterface::Instance()->xkb_context_unref(context); +} +void xkb_keymap_unref(xkb_keymap* keymap) +{ + return MockXcbInterface::Instance()->xkb_keymap_unref(keymap); +} +void xkb_state_unref(xkb_state* state) +{ + return MockXcbInterface::Instance()->xkb_state_unref(state); +} +xkb_keysym_t xkb_state_key_get_one_sym(xkb_state* state, xkb_keycode_t key) +{ + return MockXcbInterface::Instance()->xkb_state_key_get_one_sym(state, key); +} +int xkb_state_key_get_utf8(xkb_state* state, xkb_keycode_t key, char* buffer, size_t size) +{ + return MockXcbInterface::Instance()->xkb_state_key_get_utf8(state, key, buffer, size); +} +xkb_state_component xkb_state_update_mask( + xkb_state* state, + xkb_mod_mask_t depressed_mods, + xkb_mod_mask_t latched_mods, + xkb_mod_mask_t locked_mods, + xkb_layout_index_t depressed_layout, + xkb_layout_index_t latched_layout, + xkb_layout_index_t locked_layout) +{ + return MockXcbInterface::Instance()->xkb_state_update_mask( + state, depressed_mods, latched_mods, locked_mods, depressed_layout, latched_layout, locked_layout); +} + +} diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h new file mode 100644 index 0000000000..b57751344e --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +#define explicit ExplicitIsACXXKeyword +#include +#undef explicit +#include +#include + +#include "Printers.h" + +// xcb / xkb do not provide definitions of these structs, but the tests need some concrete value for them. +struct xcb_connection_t +{ +}; + +struct xkb_context +{ +}; + +struct xkb_keymap +{ +}; + +struct xkb_state +{ + xkb_mod_mask_t m_modifiers{}; +}; + +class MockXcbInterface +{ +public: + MockXcbInterface() + { + self = this; + } + MockXcbInterface(const MockXcbInterface&) = delete; + MockXcbInterface(MockXcbInterface&&) = delete; + MockXcbInterface& operator=(const MockXcbInterface&) = delete; + MockXcbInterface& operator=(MockXcbInterface&&) = delete; + virtual ~MockXcbInterface() + { + self = nullptr; + } + + static MockXcbInterface* Instance() { return self; } + + // xcb + MOCK_CONST_METHOD2(xcb_connect, xcb_connection_t*(const char* displayname, int* screenp)); + MOCK_CONST_METHOD1(xcb_disconnect, void(xcb_connection_t* c)); + MOCK_CONST_METHOD1(xcb_poll_for_event, xcb_generic_event_t*(xcb_connection_t* c)); + MOCK_CONST_METHOD2(xcb_request_check, xcb_generic_error_t*(xcb_connection_t* c, xcb_void_cookie_t cookie)); + + // xcb-xkb + MOCK_CONST_METHOD3(xcb_xkb_use_extension, xcb_xkb_use_extension_cookie_t(xcb_connection_t* c, uint16_t wantedMajor, uint16_t wantedMinor)); + MOCK_CONST_METHOD3(xcb_xkb_use_extension_reply, xcb_xkb_use_extension_reply_t*(xcb_connection_t* c, xcb_xkb_use_extension_cookie_t cookie, xcb_generic_error_t** e)); + MOCK_CONST_METHOD8(xcb_xkb_select_events, xcb_void_cookie_t(xcb_connection_t* c, xcb_xkb_device_spec_t deviceSpec, uint16_t affectWhich, uint16_t clear, uint16_t selectAll, uint16_t affectMap, uint16_t map, const void* details)); + + // xkb-x11 + MOCK_CONST_METHOD1(xkb_x11_get_core_keyboard_device_id, int32_t(xcb_connection_t* connection)); + MOCK_CONST_METHOD4(xkb_x11_keymap_new_from_device, xkb_keymap*(xkb_context* context, xcb_connection_t* connection, int32_t device_id, xkb_keymap_compile_flags flags)); + MOCK_CONST_METHOD3(xkb_x11_state_new_from_device, xkb_state*(xkb_keymap* keymap, xcb_connection_t* connection, int32_t device_id)); + MOCK_CONST_METHOD8(xkb_x11_setup_xkb_extension, int(xcb_connection_t* connection, uint16_t major_xkb_version, uint16_t minor_xkb_version, xkb_x11_setup_xkb_extension_flags flags, uint16_t* major_xkb_version_out, uint16_t* minor_xkb_version_out, uint8_t* base_event_out, uint8_t* base_error_out)); + + // xkbcommon + MOCK_CONST_METHOD1(xkb_context_new, xkb_context*(xkb_context_flags flags)); + MOCK_CONST_METHOD1(xkb_context_unref, void(xkb_context* context)); + MOCK_CONST_METHOD1(xkb_keymap_unref, void(xkb_keymap* keymap)); + MOCK_CONST_METHOD1(xkb_state_unref, void(xkb_state* state)); + MOCK_CONST_METHOD2(xkb_state_key_get_one_sym, xkb_keysym_t(xkb_state* state, xkb_keycode_t key)); + MOCK_CONST_METHOD4(xkb_state_key_get_utf8, int(xkb_state* state, xkb_keycode_t key, char* buffer, size_t size)); + MOCK_CONST_METHOD7(xkb_state_update_mask, xkb_state_component(xkb_state* state, xkb_mod_mask_t depressed_mods, xkb_mod_mask_t latched_mods, xkb_mod_mask_t locked_mods, xkb_layout_index_t depressed_layout, xkb_layout_index_t latched_layout, xkb_layout_index_t locked_layout)); + +private: + static inline MockXcbInterface* self = nullptr; +}; diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Printers.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Printers.cpp new file mode 100644 index 0000000000..9de17bd776 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Printers.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "Printers.h" +#include +#include + +namespace AzFramework +{ + void PrintTo(const InputChannel::State& state, std::ostream* os) + { + switch(state) + { + case InputChannel::State::Began: + *os << "Began"; + break; + case InputChannel::State::Ended: + *os << "Ended"; + break; + case InputChannel::State::Idle: + *os << "Idle"; + break; + case InputChannel::State::Updated: + *os << "Updated"; + break; + } + } +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Printers.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Printers.h new file mode 100644 index 0000000000..0659ec6eb1 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Printers.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzFramework +{ + void PrintTo(const InputChannel::State& state, std::ostream* os); +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.cpp new file mode 100644 index 0000000000..937cb04e14 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "XcbBaseTestFixture.h" + +namespace AzFramework +{ + void XcbBaseTestFixture::SetUp() + { + using testing::Return; + using testing::_; + + testing::Test::SetUp(); + + EXPECT_CALL(m_interface, xcb_connect(_, _)) + .WillOnce(Return(&m_connection)); + EXPECT_CALL(m_interface, xcb_disconnect(&m_connection)) + .Times(1); + } +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h new file mode 100644 index 0000000000..8e9b008fc1 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include "MockXcbInterface.h" + +namespace AzFramework +{ + // Sets up mock behavior for the xcb library, providing an xcb_connection_t that is returned from a call to xcb_connect + class XcbBaseTestFixture + : public testing::Test + { + public: + void SetUp() override; + + protected: + testing::NiceMock m_interface; + xcb_connection_t m_connection{}; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp new file mode 100644 index 0000000000..3abbcdc564 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp @@ -0,0 +1,433 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +#include +#include +#include +#include "MockXcbInterface.h" +#include "Matchers.h" +#include "Actions.h" +#include "XcbBaseTestFixture.h" + +template +xcb_generic_event_t MakeEvent(T event) +{ + return *reinterpret_cast(&event); +} + +namespace AzFramework +{ + // Sets up default behavior for mock keyboard responses to xcb methods + class XcbInputDeviceKeyboardTests + : public XcbBaseTestFixture + { + void SetUp() override + { + using testing::Return; + using testing::SetArgPointee; + using testing::_; + + XcbBaseTestFixture::SetUp(); + EXPECT_CALL(m_interface, xkb_context_new(XKB_CONTEXT_NO_FLAGS)) + .WillOnce(Return(&m_xkbContext)); + EXPECT_CALL(m_interface, xkb_context_unref(&m_xkbContext)) + .Times(1); + + EXPECT_CALL(m_interface, xkb_x11_keymap_new_from_device(&m_xkbContext, &m_connection, s_coreDeviceId, XKB_KEYMAP_COMPILE_NO_FLAGS)) + .WillOnce(Return(&m_xkbKeymap)); + EXPECT_CALL(m_interface, xkb_keymap_unref(&m_xkbKeymap)) + .Times(1); + + EXPECT_CALL(m_interface, xkb_x11_state_new_from_device(&m_xkbKeymap, &m_connection, s_coreDeviceId)) + .WillOnce(Return(&m_xkbState)); + EXPECT_CALL(m_interface, xkb_state_unref(&m_xkbState)) + .Times(1); + + ON_CALL(m_interface, xkb_x11_setup_xkb_extension(&m_connection, 1, 0, XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS, _, _, _, _)) + .WillByDefault(DoAll( + SetArgPointee<6>(s_xkbEventCode), // Set the "base_event_out" argument to the xkbEventCode, the value to identify XKB events + Return(1) + )); + + constexpr unsigned int xcbXkbSelectEventsSequence = 342; + ON_CALL(m_interface, xcb_xkb_select_events(&m_connection, _, _, _, _, _, _, _)) + .WillByDefault(Return(xcb_void_cookie_t{/*.sequence = */ xcbXkbSelectEventsSequence})); + ON_CALL(m_interface, xcb_request_check(&m_connection, testing::Field(&xcb_void_cookie_t::sequence, testing::Eq(xcbXkbSelectEventsSequence)))) + .WillByDefault(Return(nullptr)); // indicates success + + ON_CALL(m_interface, xkb_x11_get_core_keyboard_device_id(&m_connection)) + .WillByDefault(Return(s_coreDeviceId)); + + ON_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForAKey)) + .WillByDefault(Return(XKB_KEY_a)) + ; + ON_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForShiftLKey)) + .WillByDefault(Return(XKB_KEY_Shift_L)) + ; + + ON_CALL(m_interface, xkb_state_update_mask(&m_xkbState, _, _, _, _, _, _)) + .WillByDefault(testing::Invoke(this, &XcbInputDeviceKeyboardTests::UpdateStateMask)); + + ON_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, nullptr, 0)) + .WillByDefault(Return(1)); + ON_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithoutShift, s_keycodeForAKey, _, 2)) + .WillByDefault(DoAll( + SetArgPointee<2>('a'), + Return(1) + )); + ON_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithShift, s_keycodeForAKey, _, 2)) + .WillByDefault(DoAll( + SetArgPointee<2>('A'), + Return(1) + )); + + ON_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForShiftLKey, nullptr, 0)) + .WillByDefault(Return(0)); + } + + private: + xkb_state_component UpdateStateMask( + xkb_state* state, + xkb_mod_mask_t depressed_mods, + xkb_mod_mask_t latched_mods, + xkb_mod_mask_t locked_mods, + xkb_layout_index_t depressed_layout, + xkb_layout_index_t latched_layout, + xkb_layout_index_t locked_layout) + { + state->m_modifiers = depressed_mods | locked_mods; + return {}; + } + + protected: + xkb_context m_xkbContext{}; + xkb_keymap m_xkbKeymap{}; + xkb_state m_xkbState{}; + const testing::Matcher m_matchesStateWithoutShift = testing::AllOf(&m_xkbState, testing::Field(&xkb_state::m_modifiers, 0)); + const testing::Matcher m_matchesStateWithShift = testing::AllOf(&m_xkbState, testing::Field(&xkb_state::m_modifiers, XCB_MOD_MASK_SHIFT)); + + static constexpr int32_t s_coreDeviceId{1}; + static constexpr uint8_t s_xkbEventCode{85}; + + static constexpr xcb_keycode_t s_keycodeForAKey{38}; + static constexpr xcb_keycode_t s_keycodeForShiftLKey{50}; + }; + + class InputTextNotificationListener + : public InputTextNotificationBus::Handler + { + public: + InputTextNotificationListener() + { + BusConnect(); + } + MOCK_METHOD2(OnInputTextEvent, void(const AZStd::string& /*textUTF8*/, bool& /*o_hasBeenConsumed*/)); + }; + + TEST_F(XcbInputDeviceKeyboardTests, InputChannelsUpdateStateFromXcbEvents) + { + using testing::DoAll; + using testing::Eq; + using testing::Return; + using testing::SetArgPointee; + using testing::_; + + const AZStd::array events + { + MakeEvent(xcb_key_press_event_t{ + /*.response_type = */ XCB_KEY_PRESS, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_key_release_event_t{ + /*.response_type = */ XCB_KEY_RELEASE, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + }; + + // Set the expectations for the events that will be generated + // nullptr entries represent when the event queue is empty, and will cause + // PumpSystemEventLoopUntilEmpty to return + // event pointers are freed by the calling code, so we malloc new copies + // here + EXPECT_CALL(m_interface, xcb_poll_for_event(&m_connection)) + .WillOnce(ReturnMalloc(events[0])) + .WillOnce(Return(nullptr)) + .WillOnce(ReturnMalloc(events[1])) + .WillOnce(Return(nullptr)) + ; + + EXPECT_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForAKey)) + .Times(2); + + Application application; + application.Start({}, {}); + + const InputChannel* inputChannel = InputChannelRequests::FindInputChannel(InputDeviceKeyboard::Key::AlphanumericA); + ASSERT_TRUE(inputChannel); + EXPECT_THAT(inputChannel->GetState(), Eq(InputChannel::State::Idle)); + + application.PumpSystemEventLoopUntilEmpty(); + application.TickSystem(); + application.Tick(); + + EXPECT_THAT(inputChannel->GetState(), Eq(InputChannel::State::Began)); + + application.PumpSystemEventLoopUntilEmpty(); + application.TickSystem(); + application.Tick(); + + EXPECT_THAT(inputChannel->GetState(), Eq(InputChannel::State::Ended)); + + application.Stop(); + } + + TEST_F(XcbInputDeviceKeyboardTests, TextEnteredFromXcbKeyPressEvents) + { + using testing::DoAll; + using testing::Eq; + using testing::Return; + using testing::SetArgPointee; + using testing::_; + + // press a + // release a + // press shift + // press a + // release a + // release shift + const AZStd::array events + { + MakeEvent(xcb_key_press_event_t{ + /*.response_type = */ XCB_KEY_PRESS, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_key_release_event_t{ + /*.response_type = */ XCB_KEY_RELEASE, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + // Pressing a modifier key will generate a key press event followed + // by a state notify event + MakeEvent(xcb_key_press_event_t{ + /*.response_type = */ XCB_KEY_PRESS, + /*.detail = */ s_keycodeForShiftLKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_xkb_state_notify_event_t{ + /*.response_type = */ s_xkbEventCode, + /*.xkbType = */ XCB_XKB_STATE_NOTIFY, + /*.sequence = */ 0, + /*.time = */ 0, + /*.deviceID = */ s_coreDeviceId, + /*.mods = */ XCB_MOD_MASK_SHIFT, + /*.baseMods = */ XCB_MOD_MASK_SHIFT, + /*.latchedMods = */ 0, + /*.lockedMods = */ 0, + /*.group = */ 0, + /*.baseGroup = */ 0, + /*.latchedGroup = */ 0, + /*.lockedGroup = */ 0, + /*.compatState = */ XCB_MOD_MASK_SHIFT, + /*.grabMods = */ XCB_MOD_MASK_SHIFT, + /*.compatGrabMods = */ XCB_MOD_MASK_SHIFT, + /*.lookupMods = */ XCB_MOD_MASK_SHIFT, + /*.compatLoockupMods = */ XCB_MOD_MASK_SHIFT, + /*.ptrBtnState = */ 0, + /*.changed = */ 0, + /*.keycode = */ s_keycodeForShiftLKey, + /*.eventType = */ XCB_KEY_PRESS, + /*.requestMajor = */ 0, + /*.requestMinor = */ 0, + }), + MakeEvent(xcb_key_press_event_t{ + /*.response_type = */ XCB_KEY_PRESS, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_key_release_event_t{ + /*.response_type = */ XCB_KEY_RELEASE, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_key_release_event_t{ + /*.response_type = */ XCB_KEY_RELEASE, + /*.detail = */ s_keycodeForShiftLKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_xkb_state_notify_event_t{ + /*.response_type = */ s_xkbEventCode, + /*.xkbType = */ XCB_XKB_STATE_NOTIFY, + /*.sequence = */ 0, + /*.time = */ 0, + /*.deviceID = */ s_coreDeviceId, + /*.mods = */ 0, + /*.baseMods = */ 0, + /*.latchedMods = */ 0, + /*.lockedMods = */ 0, + /*.group = */ 0, + /*.baseGroup = */ 0, + /*.latchedGroup = */ 0, + /*.lockedGroup = */ 0, + /*.compatState = */ 0, + /*.grabMods = */ 0, + /*.compatGrabMods = */ 0, + /*.lookupMods = */ 0, + /*.compatLoockupMods = */ 0, + /*.ptrBtnState = */ 0, + /*.changed = */ 0, + /*.keycode = */ s_keycodeForShiftLKey, + /*.eventType = */ XCB_KEY_RELEASE, + /*.requestMajor = */ 0, + /*.requestMinor = */ 0, + }), + }; + + // Set the expectations for the events that will be generated + // nullptr entries represent when the event queue is empty, and will cause + // PumpSystemEventLoopUntilEmpty to return + // event pointers are freed by the calling code, so we malloc new copies + // here + EXPECT_CALL(m_interface, xcb_poll_for_event(&m_connection)) + .WillOnce(ReturnMalloc(events[0])) // press a + .WillOnce(Return(nullptr)) + .WillOnce(ReturnMalloc(events[1])) // release a + .WillOnce(Return(nullptr)) + .WillOnce(ReturnMalloc(events[2])) // press shift + .WillOnce(ReturnMalloc(events[3])) // state notify shift is down + .WillOnce(ReturnMalloc(events[4])) // press a + .WillOnce(Return(nullptr)) + .WillOnce(ReturnMalloc(events[5])) // release a + .WillOnce(ReturnMalloc(events[6])) // release shift + .WillOnce(ReturnMalloc(events[7])) // state notify shift is up + .WillRepeatedly(Return(nullptr)) + ; + + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, nullptr, 0)) + .Times(2); + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithoutShift, s_keycodeForAKey, _, 2)) + .Times(1); + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithShift, s_keycodeForAKey, _, 2)) + .Times(1); + + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForShiftLKey, nullptr, 0)) + .Times(1); + + InputTextNotificationListener textListener; + EXPECT_CALL(textListener, OnInputTextEvent(StrEq("a"), _)).Times(1); + EXPECT_CALL(textListener, OnInputTextEvent(StrEq("A"), _)).Times(1); + + Application application; + application.Start({}, {}); + + for (int i = 0; i < 4; ++i) + { + application.PumpSystemEventLoopUntilEmpty(); + application.TickSystem(); + application.Tick(); + } + + application.Stop(); + } +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake new file mode 100644 index 0000000000..762d5d74fe --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake @@ -0,0 +1,20 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Actions.h + Main.cpp + Matchers.h + MockXcbInterface.cpp + MockXcbInterface.h + Printers.cpp + Printers.h + XcbBaseTestFixture.cpp + XcbBaseTestFixture.h + XcbInputDeviceKeyboardTests.cpp +) diff --git a/Code/Framework/AzFramework/Tests/Platform/Linux/platform_specific_test_targets.cmake b/Code/Framework/AzFramework/Tests/Platform/Linux/platform_specific_test_targets.cmake new file mode 100644 index 0000000000..e443831462 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Linux/platform_specific_test_targets.cmake @@ -0,0 +1,33 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +if (${PAL_TRAIT_LINUX_WINDOW_MANAGER} STREQUAL "xcb") + # This library defines local implementations of all the used xcb functions, + # in order to allow tests to run in the absence of a running X server. + # These have to be in a separate library, so that the normal AzFramework + # tests do not need to set up a mock Xcb interface. + ly_add_target( + NAME AzFramework.Xcb.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} + NAMESPACE AZ + FILES_CMAKE + Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Tests + ${pal_dir} + BUILD_DEPENDENCIES + PRIVATE + AZ::AzFramework + AZ::AzTest + AZ::AzTestShared + AZ::AzFrameworkTestShared + ) + ly_add_googletest( + NAME AZ::AzFramework.Xcb.Tests + ) +endif() diff --git a/Code/Framework/AzFramework/Tests/Platform/Mac/platform_specific_test_targets.cmake b/Code/Framework/AzFramework/Tests/Platform/Mac/platform_specific_test_targets.cmake new file mode 100644 index 0000000000..7a325ca97e --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Mac/platform_specific_test_targets.cmake @@ -0,0 +1,7 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# diff --git a/Code/Framework/AzFramework/Tests/Platform/Windows/platform_specific_test_targets.cmake b/Code/Framework/AzFramework/Tests/Platform/Windows/platform_specific_test_targets.cmake new file mode 100644 index 0000000000..7a325ca97e --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Windows/platform_specific_test_targets.cmake @@ -0,0 +1,7 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# diff --git a/Code/Framework/AzFramework/Tests/Platform/iOS/platform_specific_test_targets.cmake b/Code/Framework/AzFramework/Tests/Platform/iOS/platform_specific_test_targets.cmake new file mode 100644 index 0000000000..7a325ca97e --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/iOS/platform_specific_test_targets.cmake @@ -0,0 +1,7 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# diff --git a/Code/Framework/AzFramework/Tests/frameworktests_files.cmake b/Code/Framework/AzFramework/Tests/frameworktests_files.cmake index 680155d49d..6c4f611352 100644 --- a/Code/Framework/AzFramework/Tests/frameworktests_files.cmake +++ b/Code/Framework/AzFramework/Tests/frameworktests_files.cmake @@ -7,7 +7,7 @@ # set(FILES - ../../AzCore/Tests/Main.cpp + Main.cpp Spawnable/SpawnableEntitiesInterfaceTests.cpp Spawnable/SpawnableEntitiesManagerTests.cpp ArchiveCompressionTests.cpp diff --git a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp index f759857505..462de43262 100644 --- a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp +++ b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp @@ -28,23 +28,22 @@ namespace AzGameFramework // can read from the FileIOBase instance if available m_settingsRegistry->SetUseFileIO(true); - // Attempt to mount the engine pak from the Executable Directory - // at the Assets alias, otherwise to attempting to mount the engine pak - // from the Cache folder - AZ::IO::FixedMaxPath enginePakPath = AZ::Utils::GetExecutableDirectory(); - enginePakPath /= "Engine.pak"; - if (m_archiveFileIO->Exists(enginePakPath.c_str())) + // Attempt to mount the engine pak to the project product asset alias + // Search Order: + // - Project Cache Root Directory + // - Executable Directory + bool enginePakOpened{}; + AZ::IO::FixedMaxPath enginePakPath; + if (m_settingsRegistry->Get(enginePakPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder)) { - m_archive->OpenPack("@assets@", enginePakPath.Native()); + // fall back to checking Project Cache Root. + enginePakPath /= "engine.pak"; + enginePakOpened = m_archive->OpenPack("@products@", enginePakPath.Native()); } - else if (enginePakPath.clear(); m_settingsRegistry->Get(enginePakPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder)) + if (!enginePakOpened) { - // fall back to checking if there is an Engine.pak in the Asset Cache - enginePakPath /= "Engine.pak"; - if (m_archiveFileIO->Exists(enginePakPath.c_str())) - { - m_archive->OpenPack("@assets@", enginePakPath.Native()); - } + enginePakPath = AZ::IO::FixedMaxPath(AZ::Utils::GetExecutableDirectory()) / "engine.pak"; + m_archive->OpenPack("@products@", enginePakPath.Native()); } } diff --git a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja index c6f1a23402..145f15bb19 100644 --- a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja +++ b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja @@ -6,16 +6,25 @@ namespace {{ xml.attrib['Name'] }} { switch (aznumeric_cast(packetHeader.GetPacketType())) { +{% set packet_ns = namespace(handshake=false) %} +{% for Packet in xml.iter('Packet') %} +{% if ('HandshakePacket' in Packet.attrib) and (Packet.attrib['HandshakePacket']|booleanTrue == true) %} +{% set packet_ns.handshake = True %} +{% endif %} +{% endfor %} + {% for Packet in xml.iter('Packet') %} case aznumeric_cast({{ Packet.attrib['Name'] }}::Type): { AZLOG(Debug_DispatchPackets, "Received packet %s", "{{ Packet.attrib['Name'] }}"); -{% if ('HandshakePacket' not in Packet.attrib) or (Packet.attrib['HandshakePacket'] == 'false') %} - if (!handler.IsHandshakeComplete()) +{% if packet_ns.handshake %} +{% if ('HandshakePacket' not in Packet.attrib) or (Packet.attrib['HandshakePacket'] == 'false') %} + if (!handler.IsHandshakeComplete(connection)) { return AzNetworking::PacketDispatchResult::Skipped; } -{% endif %} +{% endif %} +{% endif %} {{ Packet.attrib['Name'] }} packet; if (!serializer.Serialize(packet, "Packet")) diff --git a/Code/Framework/AzNetworking/AzNetworking/DataStructures/FixedSizeBitsetView.inl b/Code/Framework/AzNetworking/AzNetworking/DataStructures/FixedSizeBitsetView.inl index 8cbdd27e09..6192cfa878 100644 --- a/Code/Framework/AzNetworking/AzNetworking/DataStructures/FixedSizeBitsetView.inl +++ b/Code/Framework/AzNetworking/AzNetworking/DataStructures/FixedSizeBitsetView.inl @@ -15,12 +15,12 @@ namespace AzNetworking , m_startOffset(startOffset) , m_count(startOffset < bitset.GetValidBitCount() && startOffset + count <= bitset.GetValidBitCount() ? count : 0) { - AZ_Assert(startOffset + count <= bitset.GetValidBitCount(), "Out of bounds setup in BitsetSubset. Defaulting to 0 bit count."); + AZ_Warning("FixedSizeBitsetView", startOffset + count <= bitset.GetValidBitCount(), "Out of bounds setup in BitsetSubset. Defaulting to 0 bit count."); } inline void FixedSizeBitsetView::SetBit(uint32_t index, bool value) { - AZ_Assert(index < m_count, "Out of bounds access in BitsetSubset (requested %u, count %u)", index, m_count); + AZ_Warning("FixedSizeBitsetView", index < m_count, "Out of bounds access in BitsetSubset (requested %u, count %u)", index, m_count); if (m_count) { m_bitset.SetBit(m_startOffset + index, value); @@ -29,7 +29,7 @@ namespace AzNetworking inline bool FixedSizeBitsetView::GetBit(uint32_t index) const { - AZ_Assert(index < m_count, "Out of bounds access in BitsetSubset (requested %u, count %u)", index, m_count); + AZ_Warning("FixedSizeBitsetView", index < m_count, "Out of bounds access in BitsetSubset (requested %u, count %u)", index, m_count); if (m_count) { return m_bitset.GetBit(m_startOffset + index); diff --git a/Code/Framework/AzNetworking/AzNetworking/DataStructures/TimeoutQueue.h b/Code/Framework/AzNetworking/AzNetworking/DataStructures/TimeoutQueue.h index 76defd0b32..239af5be0e 100644 --- a/Code/Framework/AzNetworking/AzNetworking/DataStructures/TimeoutQueue.h +++ b/Code/Framework/AzNetworking/AzNetworking/DataStructures/TimeoutQueue.h @@ -94,6 +94,7 @@ namespace AzNetworking class ITimeoutHandler { public: + virtual ~ITimeoutHandler() = default; //! Handler callback for timed out items. //! @param item containing registered timeout details diff --git a/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h b/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h index 09aa62f7d7..3a37a44a02 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h +++ b/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h @@ -103,13 +103,13 @@ namespace AzNetworking //! @return boolean true on success virtual bool Disconnect(ConnectionId connectionId, DisconnectReason reason) = 0; - //! Sets whether this connection interface can disconnect by virtue of a timeout - //! @param timeoutEnabled If this connection interface will automatically disconnect due to a timeout - virtual void SetTimeoutEnabled(bool timeoutEnabled) = 0; + //! Sets the timeout time in milliseconds, 0 ms means timeouts are disabled. + //! @param timeoutMs the number of milliseconds with no traffic before we timeout and close a connection + virtual void SetTimeoutMs(AZ::TimeMs timeoutMs) = 0; - //! Whether this connection interface will disconnect by virtue of a time out (does not account for cvars affecting all connections) - //! @return boolean true if this connection will not disconnect on timeout (does not account for cvars affecting all connections) - virtual bool IsTimeoutEnabled() const = 0; + //! Retrieves the timeout time in milliseconds for this network interface, 0 ms means timeouts are disabled. + //! @return the timeout time in milliseconds for this network interface, 0 ms means timeouts are disabled + virtual AZ::TimeMs GetTimeoutMs() const = 0; //! Const access to the metrics tracked by this network interface. //! @return const reference to the metrics tracked by this network interface diff --git a/Code/Framework/AzNetworking/AzNetworking/Framework/NetworkingSystemComponent.cpp b/Code/Framework/AzNetworking/AzNetworking/Framework/NetworkingSystemComponent.cpp index 83588f4acb..16e4e26f67 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Framework/NetworkingSystemComponent.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/Framework/NetworkingSystemComponent.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include namespace AzNetworking diff --git a/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h b/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h index 59e0cc8235..e99144acbf 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h +++ b/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h @@ -321,4 +321,19 @@ namespace AzNetworking return serializer.IsValid(); } }; + + template <> + struct SerializeObjectHelper + { + static bool SerializeObject(ISerializer& serializer, AZ::Aabb& value) + { + AZ::Vector3 minValue = value.GetMin(); + AZ::Vector3 maxValue = value.GetMax(); + serializer.Serialize(minValue, "minValue"); + serializer.Serialize(maxValue, "maxValue"); + value.SetMin(minValue); + value.SetMax(maxValue); + return serializer.IsValid(); + } + }; } diff --git a/Code/Framework/AzNetworking/AzNetworking/Serialization/ISerializer.inl b/Code/Framework/AzNetworking/AzNetworking/Serialization/ISerializer.inl index 0d705629f3..56cbb52049 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Serialization/ISerializer.inl +++ b/Code/Framework/AzNetworking/AzNetworking/Serialization/ISerializer.inl @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp index 62335a9b39..1ccff7be50 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp @@ -22,14 +22,15 @@ namespace AzNetworking #endif AZ_CVAR(bool, net_TcpTimeoutConnections, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Boolean value on whether we should timeout Tcp connections"); - AZ_CVAR(AZ::TimeMs, net_TcpHearthbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Tcp connection heartbeat frequency"); - AZ_CVAR(AZ::TimeMs, net_TcpTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Tcp connection"); + AZ_CVAR(AZ::TimeMs, net_TcpHeartbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Tcp connection heartbeat frequency"); + AZ_CVAR(AZ::TimeMs, net_TcpDefaultTimeoutMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Tcp connection"); TcpNetworkInterface::TcpNetworkInterface(AZ::Name name, IConnectionListener& connectionListener, TrustZone trustZone, TcpListenThread& listenThread) : m_name(name) , m_trustZone(trustZone) , m_connectionListener(connectionListener) , m_listenThread(listenThread) + , m_timeoutMs(net_TcpDefaultTimeoutMs) { ; } @@ -97,7 +98,7 @@ namespace AzNetworking } AZLOG_INFO("Adding new socket %d", static_cast(tcpSocket->GetSocketFd())); - const TimeoutId newTimeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket->GetSocketFd()), net_TcpHearthbeatTimeMs); + const TimeoutId newTimeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket->GetSocketFd()), net_TcpHeartbeatTimeMs); connection->SetTimeoutId(newTimeoutId); connection->SendReliablePacket(CorePackets::InitiateConnectionPacket()); m_connectionListener.OnConnect(connection.get()); @@ -174,14 +175,14 @@ namespace AzNetworking return connection->Disconnect(reason, TerminationEndpoint::Local); } - void TcpNetworkInterface::SetTimeoutEnabled(bool timeoutEnabled) + void TcpNetworkInterface::SetTimeoutMs(AZ::TimeMs timeoutMs) { - m_timeoutEnabled = timeoutEnabled; + m_timeoutMs = timeoutMs; } - bool TcpNetworkInterface::IsTimeoutEnabled() const + AZ::TimeMs TcpNetworkInterface::GetTimeoutMs() const { - return m_timeoutEnabled; + return m_timeoutMs; } void TcpNetworkInterface::QueueNewConnection(const PendingConnection& pendingConnection) @@ -257,7 +258,7 @@ namespace AzNetworking return; } AZLOG(NET_TcpTraffic, "Adding new socket %d", static_cast(tcpSocket.GetSocketFd())); - const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket.GetSocketFd()), net_TcpTimeoutTimeMs); + const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket.GetSocketFd()), m_timeoutMs); AZStd::unique_ptr connection = AZStd::make_unique(connectionId, remoteAddress, *this, tcpSocket, timeoutId); AZ_Assert(connection->GetConnectionRole() == ConnectionRole::Acceptor, "Invalid role for connection"); GetConnectionListener().OnConnect(connection.get()); @@ -316,7 +317,7 @@ namespace AzNetworking { tcpConnection->SendReliablePacket(CorePackets::HeartbeatPacket()); } - else if (net_TcpTimeoutConnections && m_networkInterface.IsTimeoutEnabled()) + else if (net_TcpTimeoutConnections && (m_networkInterface.GetTimeoutMs() > AZ::TimeMs{ 0 })) { tcpConnection->Disconnect(DisconnectReason::Timeout, TerminationEndpoint::Local); return TimeoutResult::Delete; diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h index b9ea88974d..d8f5d1b62b 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h @@ -99,8 +99,8 @@ namespace AzNetworking bool WasPacketAcked(ConnectionId connectionId, PacketId packetId) override; bool StopListening() override; bool Disconnect(ConnectionId connectionId, DisconnectReason reason) override; - void SetTimeoutEnabled(bool timeoutEnabled) override; - bool IsTimeoutEnabled() const override; + void SetTimeoutMs(AZ::TimeMs timeoutMs) override; + AZ::TimeMs GetTimeoutMs() const override; //! @} //! Queues a new incoming connection for this network interface. @@ -156,7 +156,7 @@ namespace AzNetworking AZ::Name m_name; TrustZone m_trustZone; uint16_t m_port = 0; - bool m_timeoutEnabled = true; + AZ::TimeMs m_timeoutMs = AZ::TimeMs{ 0 }; IConnectionListener& m_connectionListener; TcpConnectionSet m_connectionSet; TcpSocketManager m_tcpSocketManager; diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp index 272683febc..e469b70640 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp @@ -53,18 +53,11 @@ namespace AzNetworking { Close(); - if (!SocketCreateInternal()) - { - return false; - } - - if (!BindSocketForListenInternal(port)) - { - return false; - } - - if (!(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) + if (!SocketCreateInternal() + || !BindSocketForListenInternal(port) + || !(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) { + Close(); return false; } @@ -75,18 +68,11 @@ namespace AzNetworking { Close(); - if (!SocketCreateInternal()) - { - return false; - } - - if (!BindSocketForConnectInternal(address)) - { - return false; - } - - if (!(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) + if (!SocketCreateInternal() + || !BindSocketForConnectInternal(address) + || !(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) { + Close(); return false; } diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpConnectionSet.h b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpConnectionSet.h index 8594bf87db..7fa66b0470 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpConnectionSet.h +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpConnectionSet.h @@ -11,6 +11,7 @@ #include #include #include +#include namespace AzNetworking { diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp index bf01ece458..b0e64f93e3 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp @@ -31,8 +31,8 @@ namespace AzNetworking AZ_CVAR(bool, net_UdpTimeoutConnections, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Boolean value on whether we should timeout Udp connections"); AZ_CVAR(AZ::TimeMs, net_UdpPacketTimeSliceMs, AZ::TimeMs{ 8 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The number of milliseconds to allow for packet processing"); - AZ_CVAR(AZ::TimeMs, net_UdpHearthbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Udp connection heartbeat frequency"); - AZ_CVAR(AZ::TimeMs, net_UdpTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Udp connection"); + AZ_CVAR(AZ::TimeMs, net_UdpHeartbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Udp connection heartbeat frequency"); + AZ_CVAR(AZ::TimeMs, net_UdpDefaultTimeoutMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Udp connection"); AZ_CVAR(AZ::TimeMs, net_MinPacketTimeoutMs, AZ::TimeMs{ 200 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Minimum time to wait before timing out an unacked packet"); AZ_CVAR(int32_t, net_MaxTimeoutsPerFrame, 1000, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Maximum number of packet timeouts to allow to process in a single frame"); AZ_CVAR(float, net_RttFudgeScalar, 2.0f, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Scalar value to multiply computed Rtt by to determine an optimal packet timeout threshold"); @@ -61,6 +61,7 @@ namespace AzNetworking , m_connectionListener(connectionListener) , m_socket(net_UdpUseEncryption ? new DtlsSocket() : new UdpSocket()) , m_readerThread(readerThread) + , m_timeoutMs(net_UdpDefaultTimeoutMs) { const AZ::CVarFixedString compressor = static_cast(net_UdpCompressor); const AZ::Name compressorName = AZ::Name(compressor); @@ -138,7 +139,7 @@ namespace AzNetworking } const ConnectionId connectionId = m_connectionSet.GetNextConnectionId(); - const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), net_UdpHearthbeatTimeMs); + const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), m_timeoutMs); AZStd::unique_ptr connection = AZStd::make_unique(connectionId, remoteAddress, *this, ConnectionRole::Connector); UdpPacketEncodingBuffer dtlsData; @@ -403,14 +404,14 @@ namespace AzNetworking return connection->Disconnect(reason, TerminationEndpoint::Local); } - void UdpNetworkInterface::SetTimeoutEnabled(bool timeoutEnabled) + void UdpNetworkInterface::SetTimeoutMs(AZ::TimeMs timeoutMs) { - m_timeoutEnabled = timeoutEnabled; + m_timeoutMs = timeoutMs; } - bool UdpNetworkInterface::IsTimeoutEnabled() const + AZ::TimeMs UdpNetworkInterface::GetTimeoutMs() const { - return m_timeoutEnabled; + return m_timeoutMs; } bool UdpNetworkInterface::IsEncrypted() const @@ -681,7 +682,7 @@ namespace AzNetworking // How long should we sit in the timeout queue before heartbeating or disconnecting const ConnectionId connectionId = m_connectionSet.GetNextConnectionId(); - const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), net_UdpTimeoutTimeMs); + const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), m_timeoutMs); AZLOG(Debug_UdpConnect, "Accepted new Udp Connection"); AZStd::unique_ptr connection = AZStd::make_unique(connectionId, connectPacket.m_address, *this, ConnectionRole::Acceptor); @@ -745,7 +746,7 @@ namespace AzNetworking { udpConnection->SendUnreliablePacket(CorePackets::HeartbeatPacket()); } - else if (net_UdpTimeoutConnections && m_networkInterface.IsTimeoutEnabled()) + else if (net_UdpTimeoutConnections && (m_networkInterface.GetTimeoutMs() > AZ::TimeMs{ 0 })) { udpConnection->Disconnect(DisconnectReason::Timeout, TerminationEndpoint::Local); return TimeoutResult::Delete; diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h index 949914da91..8f827c74c4 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h @@ -104,8 +104,8 @@ namespace AzNetworking bool WasPacketAcked(ConnectionId connectionId, PacketId packetId) override; bool StopListening() override; bool Disconnect(ConnectionId connectionId, DisconnectReason reason) override; - void SetTimeoutEnabled(bool timeoutEnabled) override; - bool IsTimeoutEnabled() const override; + void SetTimeoutMs(AZ::TimeMs timeoutMs) override; + AZ::TimeMs GetTimeoutMs() const override; //! @} //! Returns true if this is an encrypted socket, false if not. @@ -181,7 +181,7 @@ namespace AzNetworking TrustZone m_trustZone; uint16_t m_port = 0; bool m_allowIncomingConnections = false; - bool m_timeoutEnabled = true; + AZ::TimeMs m_timeoutMs = AZ::TimeMs{ 0 }; IConnectionListener& m_connectionListener; UdpConnectionSet m_connectionSet; TimeoutQueue m_connectionTimeoutQueue; diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp index 44f6562c84..300b3527fa 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp @@ -79,17 +79,15 @@ namespace AzNetworking { const int32_t error = GetLastNetworkError(); AZLOG_ERROR("Failed to bind UDP socket to port %u (%d:%s)", uint32_t(port), error, GetNetworkErrorDesc(error)); + Close(); return false; } } - if (!SetSocketBufferSizes(m_socketFd, net_UdpSendBufferSize, net_UdpRecvBufferSize)) - { - return false; - } - - if (!SetSocketNonBlocking(m_socketFd)) + if (!SetSocketBufferSizes(m_socketFd, net_UdpSendBufferSize, net_UdpRecvBufferSize) + || !SetSocketNonBlocking(m_socketFd)) { + Close(); return false; } diff --git a/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp b/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp index 3fdfa042a5..9f496c3e0c 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp @@ -107,7 +107,7 @@ namespace AzNetworking if (AZ::IO::FileIOBase::GetInstance() != nullptr) { char buffer[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@assets@/", buffer, sizeof(buffer)); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@products@/", buffer, sizeof(buffer)); assetDir = AZStd::string(buffer); } diff --git a/Code/Framework/AzNetworking/AzNetworking/Utilities/TimedThread.cpp b/Code/Framework/AzNetworking/AzNetworking/Utilities/TimedThread.cpp index c85d15ae45..565b37202a 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Utilities/TimedThread.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/Utilities/TimedThread.cpp @@ -26,27 +26,29 @@ namespace AzNetworking { m_running = true; m_joinable = true; - m_thread = AZStd::thread([this]() - { - OnStart(); - while (m_running) + m_thread = AZStd::thread( + m_threadDesc, + [this]() { - const AZ::TimeMs startTimeMs = AZ::GetElapsedTimeMs(); - OnUpdate(m_updateRate); - const AZ::TimeMs updateTimeMs = AZ::GetElapsedTimeMs() - startTimeMs; - - if (m_updateRate > updateTimeMs) + OnStart(); + while (m_running) { - AZStd::chrono::milliseconds sleepTimeMs(static_cast(m_updateRate - updateTimeMs)); - AZStd::this_thread::sleep_for(sleepTimeMs); - } - else if (m_updateRate < updateTimeMs) - { - AZLOG(NET_TimedThread, "TimedThread bled %d ms", aznumeric_cast(updateTimeMs - m_updateRate)); + const AZ::TimeMs startTimeMs = AZ::GetElapsedTimeMs(); + OnUpdate(m_updateRate); + const AZ::TimeMs updateTimeMs = AZ::GetElapsedTimeMs() - startTimeMs; + + if (m_updateRate > updateTimeMs) + { + AZStd::chrono::milliseconds sleepTimeMs(static_cast(m_updateRate - updateTimeMs)); + AZStd::this_thread::sleep_for(sleepTimeMs); + } + else if (m_updateRate < updateTimeMs) + { + AZLOG(NET_TimedThread, "TimedThread bled %d ms", aznumeric_cast(updateTimeMs - m_updateRate)); + } } - } - OnStop(); - }, &m_threadDesc); + OnStop(); + }); } void TimedThread::Stop() diff --git a/Code/Framework/AzNetworking/CMakeLists.txt b/Code/Framework/AzNetworking/CMakeLists.txt index 7f9d856eb9..a0a3871201 100644 --- a/Code/Framework/AzNetworking/CMakeLists.txt +++ b/Code/Framework/AzNetworking/CMakeLists.txt @@ -25,7 +25,6 @@ ly_add_target( BUILD_DEPENDENCIES PRIVATE AZ::AzCore - 3rdParty::zlib 3rdParty::zstd 3rdParty::OpenSSL PUBLIC diff --git a/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetTests.cpp b/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetTests.cpp index f22e815526..12e242c86c 100644 --- a/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetTests.cpp +++ b/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetTests.cpp @@ -55,5 +55,8 @@ namespace UnitTest unusedBitTest.SetBit(i, false); } EXPECT_FALSE(unusedBitTest.AnySet()); + + unusedBitTest.SetBit(0, true); + EXPECT_TRUE(unusedBitTest.AnySet()); } } diff --git a/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetViewTests.cpp b/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetViewTests.cpp index 6f32eacda9..8ac3b63f1b 100644 --- a/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetViewTests.cpp +++ b/Code/Framework/AzNetworking/Tests/DataStructures/FixedSizeBitsetViewTests.cpp @@ -42,4 +42,29 @@ namespace UnitTest EXPECT_FALSE(view.GetBit(0)); } } + + TEST(FixedSizeBitsetView, EmptyBitset) + { + AzNetworking::FixedSizeBitset<32> bitset; + AzNetworking::FixedSizeBitsetView view(bitset, 10, 0); + EXPECT_FALSE(view.GetBit(0)); + } + + TEST(FixedSizeBitsetView, TestAnySet) + { + const uint32_t VIEW_SIZE = 5; + + AzNetworking::FixedSizeBitset<9> unusedBitTest(true); + AzNetworking::FixedSizeBitsetView view(unusedBitTest, 0, VIEW_SIZE); + for (uint32_t i = 0; i < VIEW_SIZE; ++i) + { + view.SetBit(i, false); + } + EXPECT_FALSE(view.AnySet()); + + view.SetBit(0, true); + EXPECT_TRUE(view.AnySet()); + + EXPECT_EQ(view.GetValidBitCount(), VIEW_SIZE); + } } diff --git a/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp b/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp index bc9ecab2cb..77632da572 100644 --- a/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp +++ b/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp @@ -148,6 +148,12 @@ namespace UnitTest EXPECT_EQ(testServer.m_serverNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); EXPECT_EQ(testClient.m_clientNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); + + const AZ::TimeMs timeoutMs = AZ::TimeMs{ 100 }; + testClient.m_clientNetworkInterface->SetTimeoutMs(timeoutMs); + EXPECT_EQ(testClient.m_clientNetworkInterface->GetTimeoutMs(), timeoutMs); + + EXPECT_TRUE(testServer.m_serverNetworkInterface->StopListening()); } #if AZ_TRAIT_DISABLE_FAILED_NETWORKING_TESTS diff --git a/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp b/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp index c4de3fc6dd..65c2cfa2b5 100644 --- a/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp +++ b/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp @@ -125,6 +125,18 @@ namespace UnitTest AzNetworking::NetworkingSystemComponent* m_networkingSystemComponent; }; + TEST_F(UdpTransportTests, PacketIdWrap) + { + const uint32_t SEQUENCE_BOUNDARY = 0xFFFF; + UdpPacketTracker tracker; + + for (uint32_t i = 0; i < SEQUENCE_BOUNDARY; ++i) + { + tracker.GetNextPacketId(); + } + EXPECT_EQ(tracker.GetNextPacketId(), PacketId(SEQUENCE_BOUNDARY + 1)); + } + TEST_F(UdpTransportTests, AckReplication) { static const SequenceId TestReliableSequenceId = InvalidSequenceId; @@ -266,6 +278,16 @@ namespace UnitTest EXPECT_EQ(testServer.m_serverNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); EXPECT_EQ(testClient.m_clientNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); + + const AZ::TimeMs timeoutMs = AZ::TimeMs{ 100 }; + testClient.m_clientNetworkInterface->SetTimeoutMs(timeoutMs); + EXPECT_EQ(testClient.m_clientNetworkInterface->GetTimeoutMs(), timeoutMs); + + EXPECT_FALSE(dynamic_cast(testClient.m_clientNetworkInterface)->IsEncrypted()); + + EXPECT_TRUE(testServer.m_serverNetworkInterface->StopListening()); + EXPECT_FALSE(testServer.m_serverNetworkInterface->StopListening()); + EXPECT_FALSE(dynamic_cast(testServer.m_serverNetworkInterface)->IsOpen()); } TEST_F(UdpTransportTests, TestMultipleClients) diff --git a/Code/Framework/AzNetworking/Tests/Utilities/IpAddressTests.cpp b/Code/Framework/AzNetworking/Tests/Utilities/IpAddressTests.cpp index 435ebb48e0..c143556670 100644 --- a/Code/Framework/AzNetworking/Tests/Utilities/IpAddressTests.cpp +++ b/Code/Framework/AzNetworking/Tests/Utilities/IpAddressTests.cpp @@ -11,4 +11,16 @@ namespace UnitTest { + TEST(IpAddressTests, TestIpQuads) + { + const AzNetworking::IpAddress ip = AzNetworking::IpAddress(127, 0, 0, 1, 12345); + + EXPECT_EQ(ip.GetQuadA(), 127); + EXPECT_EQ(ip.GetQuadB(), 0); + EXPECT_EQ(ip.GetQuadC(), 0); + EXPECT_EQ(ip.GetQuadD(), 1); + + EXPECT_EQ(ip.GetString(), "127.0.0.1:12345"); + EXPECT_EQ(ip.GetIpString(), "127.0.0.1"); + } } diff --git a/Code/Framework/AzNetworking/Tests/Utilities/QuantizedValuesTests.cpp b/Code/Framework/AzNetworking/Tests/Utilities/QuantizedValuesTests.cpp index 13bf9bdb0a..0f0bcac54d 100644 --- a/Code/Framework/AzNetworking/Tests/Utilities/QuantizedValuesTests.cpp +++ b/Code/Framework/AzNetworking/Tests/Utilities/QuantizedValuesTests.cpp @@ -79,13 +79,12 @@ namespace UnitTest template void TestQuantizedValuesHelper01() { - AzNetworking::QuantizedValues testIn, testOut; // Transmits float values between 0 and 1 using NUM_BYTES + AzNetworking::QuantizedValues testIn(ValueFromFloat::Construct(0.0f)), testOut; // Transmits float values between 0 and 1 using NUM_BYTES AZStd::array buffer; AzNetworking::NetworkInputSerializer inputSerializer(buffer.data(), static_cast(buffer.size())); AzNetworking::NetworkOutputSerializer outputSerializer(buffer.data(), static_cast(buffer.size())); - testIn = ValueFromFloat::Construct(0.0f); EXPECT_EQ(static_cast::ValueType>(testIn), ValueFromFloat::Construct(0.0f)); testIn.Serialize(inputSerializer); EXPECT_EQ(inputSerializer.GetSize(), NUM_BYTES * NUM_ELEMENTS); @@ -95,6 +94,8 @@ namespace UnitTest testIn = ValueFromFloat::Construct(1.0f); EXPECT_EQ(static_cast::ValueType>(testIn), ValueFromFloat::Construct(1.0f)); testIn.Serialize(inputSerializer); + EXPECT_NE(testIn, testOut); + EXPECT_NE(testIn.GetQuantizedIntegralValues()[0], testOut.GetQuantizedIntegralValues()[0]); testOut.Serialize(outputSerializer); EXPECT_EQ(testIn, testOut); diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/Damping.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/Damping.svg new file mode 100644 index 0000000000..b12640bd59 --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/Damping.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/MaxForce.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/MaxForce.svg new file mode 100644 index 0000000000..b1b09104b1 --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/MaxForce.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/MaxTorque.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/MaxTorque.svg new file mode 100644 index 0000000000..3c40cb82b2 --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/MaxTorque.svg @@ -0,0 +1,15 @@ + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SnapPosition.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SnapPosition.svg new file mode 100644 index 0000000000..a9c5811d7d --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SnapPosition.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SnapRotation.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SnapRotation.svg new file mode 100644 index 0000000000..684c32a08d --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SnapRotation.svg @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/Stiffness.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/Stiffness.svg new file mode 100644 index 0000000000..456785f1bc --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/Stiffness.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SwingLimits.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SwingLimits.svg new file mode 100644 index 0000000000..ec3d1114bb --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/SwingLimits.svg @@ -0,0 +1,22 @@ + + + + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/TwistLimits.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/TwistLimits.svg new file mode 100644 index 0000000000..98f56f547d --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/joints/TwistLimits.svg @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc b/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc index 7321128b57..16d55f1b8c 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc @@ -390,6 +390,14 @@ img/UI20/toolbar/Y_axis.svg img/UI20/toolbar/Z_axis.svg img/UI20/toolbar/XY2_copy.svg + img/UI20/toolbar/joints/Damping.svg + img/UI20/toolbar/joints/MaxForce.svg + img/UI20/toolbar/joints/MaxTorque.svg + img/UI20/toolbar/joints/SnapPosition.svg + img/UI20/toolbar/joints/SnapRotation.svg + img/UI20/toolbar/joints/Stiffness.svg + img/UI20/toolbar/joints/SwingLimits.svg + img/UI20/toolbar/joints/TwistLimits.svg img/triangle0.png img/triangle0_highlighted.png img/line.png diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ReflectedPropertyEditorPage.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ReflectedPropertyEditorPage.cpp index 7655a2076c..2be0428d63 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ReflectedPropertyEditorPage.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ReflectedPropertyEditorPage.cpp @@ -9,6 +9,7 @@ #include "ReflectedPropertyEditorPage.h" #include +#include #include #include #include diff --git a/Code/Framework/AzTest/AzTest/Platform/Common/Unimplemented/Platform_Unimplemented.cpp b/Code/Framework/AzTest/AzTest/Platform/Common/Unimplemented/Platform_Unimplemented.cpp index ea6c6bc5b8..afa75d8333 100644 --- a/Code/Framework/AzTest/AzTest/Platform/Common/Unimplemented/Platform_Unimplemented.cpp +++ b/Code/Framework/AzTest/AzTest/Platform/Common/Unimplemented/Platform_Unimplemented.cpp @@ -5,7 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include "Platform.h" +#include #include class ModuleHandle diff --git a/Code/Framework/AzTest/AzTest/Printers.cpp b/Code/Framework/AzTest/AzTest/Printers.cpp new file mode 100644 index 0000000000..dc639d87d1 --- /dev/null +++ b/Code/Framework/AzTest/AzTest/Printers.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +#include + +namespace AZ::IO +{ + void PrintTo(const AZ::IO::PathView& path, ::std::ostream* os) + { + *os << "path: " << AZ::IO::Path(path.Native(), AZ::IO::PosixPathSeparator).MakePreferred().c_str(); + } + + void PrintTo(const AZ::IO::Path& path, ::std::ostream* os) + { + *os << "path: " << AZ::IO::Path(path.Native(), AZ::IO::PosixPathSeparator).MakePreferred().c_str(); + } + + void PrintTo(const AZ::IO::FixedMaxPath& path, ::std::ostream* os) + { + *os << "path: " << AZ::IO::FixedMaxPath(path.Native(), AZ::IO::PosixPathSeparator).MakePreferred().c_str(); + } +} diff --git a/Code/Framework/AzTest/AzTest/Printers.h b/Code/Framework/AzTest/AzTest/Printers.h new file mode 100644 index 0000000000..3615f7b576 --- /dev/null +++ b/Code/Framework/AzTest/AzTest/Printers.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include + +namespace AZStd +{ + template + class basic_string; + + template + class basic_string_view; + + template + class basic_fixed_string; + + template + void PrintTo(const AZStd::basic_string& value, ::std::ostream* os); + template + void PrintTo(const AZStd::basic_string_view& value, ::std::ostream* os); + template + void PrintTo(const AZStd::basic_fixed_string& value, ::std::ostream* os); +} + +namespace AZ::IO +{ + // Add Googletest printers for the AZ::IO::Path classes + void PrintTo(const AZ::IO::PathView& path, ::std::ostream* os); + void PrintTo(const AZ::IO::Path& path, ::std::ostream* os); + void PrintTo(const AZ::IO::FixedMaxPath& path, ::std::ostream* os); +} + +#include diff --git a/Code/Framework/AzTest/AzTest/Printers.inl b/Code/Framework/AzTest/AzTest/Printers.inl new file mode 100644 index 0000000000..265918e48f --- /dev/null +++ b/Code/Framework/AzTest/AzTest/Printers.inl @@ -0,0 +1,34 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace AZStd +{ + template + void PrintTo(const AZStd::basic_string& value, ::std::ostream* os) + { + *os << value.c_str(); + } + + template + void PrintTo(const AZStd::basic_string_view& value, ::std::ostream* os) + { + *os << ::std::string_view(value.data(), value.size()); + } + + template + void PrintTo(const AZStd::basic_fixed_string& value, ::std::ostream* os) + { + *os << value.c_str(); + } +} diff --git a/Code/Framework/AzTest/AzTest/Utils.h b/Code/Framework/AzTest/AzTest/Utils.h index fc3dbdd13c..2778e163b3 100644 --- a/Code/Framework/AzTest/AzTest/Utils.h +++ b/Code/Framework/AzTest/AzTest/Utils.h @@ -9,8 +9,8 @@ #include #include #include -#include #include +#include namespace AZ { namespace Test diff --git a/Code/Framework/AzTest/AzTest/aztest_files.cmake b/Code/Framework/AzTest/AzTest/aztest_files.cmake index 9a9b085337..0e89a5dfa2 100644 --- a/Code/Framework/AzTest/AzTest/aztest_files.cmake +++ b/Code/Framework/AzTest/AzTest/aztest_files.cmake @@ -11,6 +11,9 @@ set(FILES AzTest.cpp ColorizedOutput.cpp Platform.h + Printers.h + Printers.inl + Printers.cpp Utils.h Utils.cpp GemTestEnvironment.cpp diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h index eab2d5e1a0..c18ddc2f67 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h @@ -47,14 +47,6 @@ namespace AzToolsFramework //! Retrieve the absolute path for the Asset Database Location virtual bool GetAbsoluteAssetDatabaseLocation(AZStd::string& /*result*/) { return false; } - - //! Retrieve the absolute folder path to the current game's source assets (the ones that go into source control) - //! This may include the current mod path, if a mod is being edited by the editor - virtual const char* GetAbsoluteDevGameFolderPath() = 0; - - //! Retrieve the absolute folder path to the current developer root ('dev'), which contains source artifacts - //! and is generally checked into source control. - virtual const char* GetAbsoluteDevRootFolderPath() = 0; /// Convert a full source path like "c:\\dev\\gamename\\blah\\test.tga" into a relative product path. /// asset paths never mention their alias and are relative to the asset cache root diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorEntityAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorEntityAPI.h index f2808eb0e7..3b5e5c9dc3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorEntityAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorEntityAPI.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h index c037747a08..9e29b9813c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h @@ -764,12 +764,6 @@ namespace AzToolsFramework //! Spawn asset browser for the appropriate asset types. virtual void BrowseForAssets(AssetBrowser::AssetSelectionModel& /*selection*/) = 0; - /// Allow interception of selection / left-mouse clicks in ObjectMode, for customizing selection behavior. - virtual void HandleObjectModeSelection(const AZ::Vector2& /*point*/, int /*flags*/, bool& /*handled*/) {} - - /// Allow interception of cursor, for customizing selection behavior. - virtual void UpdateObjectModeCursor(AZ::u32& /*cursorId*/, AZStd::string& /*cursorStr*/) {} - /// Creates editor-side representation of an underlying entity. virtual void CreateEditorRepresentation(AZ::Entity* /*entity*/) { } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h index bcc8afbe6a..9da8d97990 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h @@ -22,22 +22,22 @@ namespace AzToolsFramework virtual ~ViewportEditorModeTrackerInterface() = default; - //! Activates the specified editor mode for the specified viewport. + //! Activates the specified editor mode for the specified viewport editor mode tracker. virtual AZ::Outcome ActivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) = 0; + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) = 0; - //! Deactivates the specified editor mode for the specified viewport. + //! Deactivates the specified editor mode for the specified viewport editor mode tracker. virtual AZ::Outcome DeactivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) = 0; + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) = 0; - //! Attempts to retrieve the editor mode state for the specified viewport, otherwise returns nullptr. - virtual const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const = 0; + //! Attempts to retrieve the editor mode state for the specified viewport editor mode tracker, otherwise returns nullptr. + virtual const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const = 0; - //! Returns the number of viewports currently being tracked. + //! Returns the number of viewport editor mode trackers. virtual size_t GetTrackedViewportCount() const = 0; - //! Returns true if the specified viewport is being tracked, otherwise false. - virtual bool IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const = 0; + //! Returns true if viewport editor modes are being tracked for the specified od, otherwise false. + virtual bool IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const = 0; }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h index 42a1cb0113..4fcb891e61 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include #include namespace AzToolsFramework @@ -23,11 +23,11 @@ namespace AzToolsFramework Pick }; - //! Viewport identifier and other relevant viewport data. - struct ViewportEditorModeInfo + //! Viewport editor mode tracker identifier and other relevant data. + struct ViewportEditorModeTrackerInfo { - using IdType = AzFramework::ViewportId; - IdType m_id = ViewportUi::DefaultViewportId; //!< The unique identifier for a given viewport. + using IdType = AzFramework::EntityContextId; + IdType m_id = AzFramework::EntityContextId::CreateNull(); //!< The unique identifier for a given viewport editor mode tracker. }; //! Interface for the editor modes of a given viewport. @@ -49,7 +49,7 @@ namespace AzToolsFramework // EBusTraits overrides static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = ViewportEditorModeInfo::IdType; + using BusIdType = ViewportEditorModeTrackerInfo::IdType; ////////////////////////////////////////////////////////////////////////// //! Notifies subscribers of the a given viewport to the activation of the specified editor mode. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp index 91a916ae70..fbd066ec6e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -26,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +69,7 @@ #include #include #include +#include #include AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") // 4251: 'QFileInfo::d_ptr': class 'QSharedDataPointer' needs to have dll-interface to be used by clients of class 'QFileInfo' @@ -250,6 +253,7 @@ namespace AzToolsFramework azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), + azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), @@ -268,7 +272,8 @@ namespace AzToolsFramework azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), - azrtti_typeid() + azrtti_typeid(), + azrtti_typeid() }); return components; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveAPI.h index fa8c2c14ff..11c4c85722 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveAPI.h @@ -12,95 +12,84 @@ #include #include #include +#include namespace AzToolsFramework { - // use bind if you need additional context. - // Parameters: - // bool - If the archive command was successful or not. - typedef AZStd::function ArchiveResponseCallback; - // bool - If the archive command was successful or not. - // AZStd::string - The console output from the command. - typedef AZStd::function ArchiveResponseOutputCallback; - - //! ArchiveCommands //! This bus handles messages relating to archive commands //! archive commands are ASYNCHRONOUS //! archive formats officially supported are .zip - //! do not block the main thread waiting for a response, it is not okay - //! you will not get a message delivered unless you tick the tickbus anyway! class ArchiveCommands : public AZ::EBusTraits { public: - - using Bus = AZ::EBus; - + // EBus Traits static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; typedef AZStd::recursive_mutex MutexType; static const bool LocklessDispatch = true; - virtual ~ArchiveCommands() {} - - //! Start an async task to extract an archive to the target directory - //! taskHandles are used to cancel a task at some point in the future and are provided by the caller per task. - //! Multiple tasks can be associated with the same handle - virtual void ExtractArchive(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseCallback& respCallback) = 0; - virtual void ExtractArchiveOutput(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) = 0; - // Maintaining backwards API compatibility - ExtractArchiveBlocking below passes in extractWithRoot as an option - virtual void ExtractArchiveWithoutRoot(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) = 0; - - //! Start a sync task to extract an archive to the target directory - //! If you do not want to extract the root folder then set extractWithRootDirectory to false. - virtual bool ExtractArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool extractWithRootDirectory) = 0; - - //! Extract a single file asynchronously from the archive to the destination. - //! Uses cwd if destinationPath empty. overWrite = true for overwrite existing files, false for skipExisting - //! taskHandles are used to cancel a task at some point in the future and are provided by the caller per task. - //! Multiple tasks can be associated with the same handle - virtual void ExtractFile(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) = 0; - - //! Extract a single file from the archive to the destination and block until finished. - //! Uses cwd if destinationPath empty. overWrite = true for overwrite existing files, false for skipExisting - virtual bool ExtractFileBlocking(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite) = 0; - //! Start an async task to create an archive of the target directory (recursively) - //! taskHandles are used to cancel a task at some point in the future and are provided by the caller per task. - //! Multiple tasks can be associated with the same handle. - virtual void CreateArchive(const AZStd::string& archivePath, const AZStd::string& dirToArchive, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) = 0; - - //! Start a sync task to create an archive of the target directory (recursively) - virtual bool CreateArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& dirToArchive) = 0; - - //! Start an async task to retrieve the list of files and their relative paths within an archive (recursively) - //! taskHandles are used to cancel a task at some point in the future and are provided by the caller per task. - //! Multiple tasks can be associated with the same handle. - virtual void ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& fileEntries, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) = 0; - - //! Start a sync task to retrieve the list of files and their relative paths within an archive (recursively) - virtual bool ListFilesInArchiveBlocking(const AZStd::string& archivePath, AZStd::vector& fileEntries) = 0; - - //! Start an async task to add a file to a preexisting archive. - //! fileToAdd must be a relative path to the file from the working directory. The path to the file from the root of the archive will be the same as the relative path to the file on disk. - //! taskHandles are used to cancel a task at some point in the future and are provided by the caller per task. - //! Multiple tasks can be associated with the same handle. - virtual void AddFileToArchive(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& fileToAdd, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) = 0; - - //! Start a sync task to add a file to a preexisting archive. - //! fileToAdd must be a relative path to the file from the working directory. The path to the file from the root of the archive will be the same as the relative path to the file on disk. - virtual bool AddFileToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& fileToAdd) = 0; - - //! Start an async task to add files to a archive. - //! File paths inside the list file must either be a relative path from the working directory or an absolute path. - virtual void AddFilesToArchive(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) = 0; - - //! Start a sync task to add files to an archive. - //! File paths inside the list file must either be a relative path from the working directory or an absolute path. - virtual bool AddFilesToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath) = 0; - - //! Cancels tasks associtated with the given handle. Blocks until all tasks are cancelled. - virtual void CancelTasks(AZ::Uuid taskHandle) = 0; + virtual ~ArchiveCommands() = default; + + //! Create an archive of the target directory (all files and subdirectories) + //! @param archivePath The path of the archive to create + //! @dirToArchive The directory to be added to the archive + //! @return Future (bool) which can obtain the success value of the operation + [[nodiscard]] virtual std::future CreateArchive( + const AZStd::string& archivePath, + const AZStd::string& dirToArchive) = 0; + + //! Extract an archive to the target directory + //! @param archivePath The path of the archive to extract + //! @param destinationPath The directory where files will be extracted to + //! @return Future (bool) which can obtain the success value of the operation + [[nodiscard]] virtual std::future ExtractArchive( + const AZStd::string& archivePath, + const AZStd::string& destinationPath) = 0; + + //! Extract a single file from the archive to the destination + //! Destination path should not be empty + //! @param archivePath The path of the archive to extract from + //! @param fileInArchive A path to a file, relative to root of archive + //! @param destinationPath The directory where file will be extracted to + //! @return Future (bool) which can obtain the success value of the operation + [[nodiscard]] virtual std::future ExtractFile( + const AZStd::string& archivePath, + const AZStd::string& fileInArchive, + const AZStd::string& destinationPath) = 0; + + //! Retrieve the list of files contained in an archive (all files and subdirectories) + //! @param archivePath The path of the archive to list + //! @param outFileEntries An out parameter that will contain the file paths found + //! @return True if successful, false otherwise + virtual bool ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& outFileEntries) = 0; + + //! Add a file to an archive + //! The archive might not exist yet + //! The file path relative to the working directory will be replicated in the archive + //! @param archivePath The path of the archive to add to + //! @param workingDirectory A directory that will be the starting path of the file to be added + //! @param fileToAdd A path to the file relative to the working directory + //! @return Future (bool) which can obtain the success value of the operation + [[nodiscard]] virtual std::future AddFileToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& fileToAdd) = 0; + + //! Add files to an archive provided from a file listing + //! The archive might not exist yet + //! File paths in the file list should be relative to root of the archive + //! @param archivePath The path of the archive to add to + //! @param workingDirectory A directory that will be the starting path of the list of files to add + //! @param listFilePath Full path to a text file that contains the list of files to add + //! @return Future (bool) which can obtain the success value of the operation + [[nodiscard]] virtual std::future AddFilesToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& listFilePath) = 0; }; + using ArchiveCommandsBus = AZ::EBus; + }; // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp index 5004108132..3d0299667c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp @@ -12,118 +12,98 @@ #include #include -#include - +#include +#include #include #include #include + namespace AzToolsFramework { - // Forward declare platform specific functions - namespace Platform - { - AZStd::string GetZipExePath(); - AZStd::string GetUnzipExePath(); - - AZStd::string GetCreateArchiveCommand(const AZStd::string& archivePath, const AZStd::string& dirToArchive); - AZStd::string GetExtractArchiveCommand(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool includeRoot); - AZStd::string GetAddFileToArchiveCommand(const AZStd::string& archivePath, const AZStd::string& file); - AZStd::string GetAddFilesToArchiveCommand(const AZStd::string& archivePath, const AZStd::string& listFilePath); - AZStd::string GetExtractFileCommand(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite); - AZStd::string GetListFilesInArchiveCommand(const AZStd::string& archivePath); - void ParseConsoleOutputFromListFilesInArchive(const AZStd::string& consoleOutput, AZStd::vector& fileEntries); - } + [[maybe_unused]] constexpr const char s_traceName[] = "ArchiveComponent"; + constexpr AZ::u32 s_compressionMethod = AZ::IO::INestedArchive::METHOD_DEFLATE; + constexpr AZ::s32 s_compressionLevel = AZ::IO::INestedArchive::LEVEL_NORMAL; + constexpr CompressionCodec::Codec s_compressionCodec = CompressionCodec::Codec::ZLIB; - const char s_traceName[] = "ArchiveComponent"; - const unsigned int g_sleepDuration = 1; - - // Echoes all results of stdout and stderr to console and never blocks - class ConsoleEchoCommunicator + namespace ArchiveUtils { - public: - ConsoleEchoCommunicator(AzFramework::ProcessCommunicator* communicator) - : m_communicator(communicator) + // Read a file's contents into a provided buffer. + // Does not add a zero byte at the end of the buffer. + // returns true if read was successful, false otherwise. + bool ReadFile(const AZ::IO::Path& filePath, AZ::IO::OpenMode openMode, AZStd::vector& outBuffer) { - } - - ~ConsoleEchoCommunicator() - { - } + auto fileIO = AZ::IO::FileIOBase::GetDirectInstance(); + if (!fileIO) + { + return false; + } - // Call this periodically to drain the buffers - void Pump() - { - if (m_communicator->IsValid()) + bool success = false; + AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; + if (fileIO->Open(filePath.c_str(), openMode, fileHandle)) { - AZ::u32 readBufferSize = 0; - AZStd::string readBuffer; - // Don't call readOutput unless there is output or else it will block... - readBufferSize = m_communicator->PeekOutput(); - if (readBufferSize) - { - readBuffer.resize_no_construct(readBufferSize + 1); - readBuffer[readBufferSize] = '\0'; - m_communicator->ReadOutput(readBuffer.data(), readBufferSize); - EchoBuffer(readBuffer); - } - readBufferSize = m_communicator->PeekError(); - if (readBufferSize) + AZ::u64 fileSize = 0; + if (fileIO->Size(fileHandle, fileSize) && fileSize != 0) { - readBuffer.resize_no_construct(readBufferSize + 1); - readBuffer[readBufferSize] = '\0'; - m_communicator->ReadError(readBuffer.data(), readBufferSize); - EchoBuffer(readBuffer); + outBuffer.resize_no_construct(fileSize); + + AZ::u64 bytesRead = 0; + if (fileIO->Read(fileHandle, outBuffer.data(), fileSize, true, &bytesRead)) + { + success = (fileSize == bytesRead); + } } + + fileIO->Close(fileHandle); } + + return success; } - private: - void EchoBuffer(const AZStd::string& buffer) + // Reads a text file that contains a list of file paths. + // Tokenize the file by lines. + // Calls the lineVisitor function for each line of the file. + void ProcessFileList(const AZ::IO::Path& filePath, AZStd::function lineVisitor) { - size_t startIndex = 0; - size_t endIndex = 0; - const size_t bufferSize = buffer.size(); - for (size_t i = 0; i < bufferSize; ++i) + AZStd::vector fileBuffer; + if (ReadFile(filePath, AZ::IO::OpenMode::ModeText | AZ::IO::OpenMode::ModeRead, fileBuffer)) { - if (buffer[i] == '\n' || buffer[i] == '\0') - { - endIndex = i; - bool isEmptyMessage = (endIndex - startIndex == 1) && (buffer[startIndex] == '\r'); - if (!isEmptyMessage) - { - AZ_Printf(s_traceName, "%s", buffer.substr(startIndex, endIndex - startIndex).c_str()); - } - startIndex = endIndex + 1; - } + AZ::StringFunc::TokenizeVisitor(AZStd::string_view{ fileBuffer.data(), fileBuffer.size() }, lineVisitor, "\n"); } } - AzFramework::ProcessCommunicator* m_communicator = nullptr; - }; + } // namespace ArchiveUtils void ArchiveComponent::Activate() { - m_zipExePath = Platform::GetZipExePath(); - m_unzipExePath = Platform::GetUnzipExePath(); + m_fileIO = AZ::IO::FileIOBase::GetDirectInstance(); + if (m_fileIO == nullptr) + { + AZ_Error(s_traceName, false, "Failed to create a LocalFileIO instance!"); + } - ArchiveCommands::Bus::Handler::BusConnect(); + m_archive = AZ::Interface::Get(); + if (m_archive == nullptr) + { + AZ_Error(s_traceName, false, "Failed to get IArchive interface!"); + } + + ArchiveCommandsBus::Handler::BusConnect(); } void ArchiveComponent::Deactivate() { - ArchiveCommands::Bus::Handler::BusDisconnect(); + ArchiveCommandsBus::Handler::BusDisconnect(); - AZStd::unique_lock lock(m_threadControlMutex); - for (auto pair : m_threadInfoMap) + m_fileIO = nullptr; + m_archive = nullptr; + + for (AZStd::thread& t : m_threads) { - ThreadInfo& info = pair.second; - info.shouldStop = true; - m_cv.wait(lock, [&info]() { - return info.threads.size() == 0; - }); + t.join(); } - m_threadInfoMap.clear(); + m_threads = {}; } void ArchiveComponent::Reflect(AZ::ReflectContext * context) @@ -132,7 +112,7 @@ namespace AzToolsFramework { serializeContext->Class() ->Version(2) - ->Attribute(AZ::Edit::Attributes::SystemComponentTags, AZStd::vector({ AZ_CRC("AssetBuilder", 0xc739c7d7) })) + ->Attribute(AZ::Edit::Attributes::SystemComponentTags, AZStd::vector({ AZ_CRC_CE("AssetBuilder") })) ; if (AZ::EditContext* editContext = serializeContext->GetEditContext()) @@ -141,320 +121,480 @@ namespace AzToolsFramework "Archive", "Handles creation and extraction of zip archives.") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") ->Attribute(AZ::Edit::Attributes::Category, "Editor") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("System", 0xc94d118b)) + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("System")) ; } } } - void ArchiveComponent::CreateArchive(const AZStd::string& archivePath, const AZStd::string& dirToArchive, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) + std::future ArchiveComponent::CreateArchive( + const AZStd::string& archivePath, + const AZStd::string& dirToArchive) { - AZStd::string commandLineArgs = AZStd::string::format(R"(a -tzip -mx=1 "%s" -r "%s\*")", archivePath.c_str(), dirToArchive.c_str()); - LaunchZipExe(m_zipExePath, commandLineArgs, respCallback, taskHandle); - } - - bool ArchiveComponent::CreateArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& dirToArchive) - { - bool success = false; - auto createArchiveCallback = [&success](bool result, AZStd::string consoleOutput) { - success = result; - }; - - AZStd::string commandLineArgs = Platform::GetCreateArchiveCommand(archivePath, dirToArchive); - - if (commandLineArgs.empty()) + if (!CheckParamsForCreate(archivePath, dirToArchive)) { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return false; + std::promise p; + p.set_value(false); + return p.get_future(); } - LaunchZipExe(m_zipExePath, commandLineArgs, createArchiveCallback, AZ::Uuid::CreateNull(), dirToArchive, false); - return success; - } + auto FnCreateArchive = [this, archivePath, dirToArchive](std::promise&& p) -> void + { + auto archive = m_archive->OpenArchive(archivePath, {}, AZ::IO::INestedArchive::FLAGS_CREATE_NEW); + if (!archive) + { + AZ_Error(s_traceName, false, "Failed to create archive file '%s'", archivePath.c_str()); + p.set_value(false); + return; + } - void ArchiveComponent::ExtractArchive(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseCallback& respCallback) - { - ArchiveResponseOutputCallback responseHandler = [respCallback](bool result, AZStd::string /*outputStr*/) { respCallback(result); }; - ExtractArchiveOutput(archivePath, destinationPath, taskHandle, responseHandler); - } + auto foundFiles = AzFramework::FileFunc::FindFilesInPath(dirToArchive, "*", true); + if (!foundFiles.IsSuccess()) + { + AZ_Error(s_traceName, false, "Failed to find file listing under directory '%d'", dirToArchive.c_str()); + p.set_value(false); + return; + } - void ArchiveComponent::ExtractArchiveOutput(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) - { - AZStd::string commandLineArgs = Platform::GetExtractArchiveCommand(archivePath, destinationPath, true); + bool success = true; + AZStd::vector fileBuffer; + const AZ::IO::Path workingPath{ dirToArchive }; - if (commandLineArgs.empty()) - { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return; - } + for (const auto& fileName : foundFiles.GetValue()) + { + bool thisSuccess = false; - LaunchZipExe(m_unzipExePath, commandLineArgs, respCallback, taskHandle); - } + AZ::IO::PathView relativePath = AZ::IO::PathView{ fileName }.LexicallyRelative(workingPath); - void ArchiveComponent::ExtractArchiveWithoutRoot(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) - { - AZStd::string commandLineArgs = Platform::GetExtractArchiveCommand(archivePath, destinationPath, false); + AZ::IO::Path fullPath = (workingPath / relativePath); + if (ArchiveUtils::ReadFile(fullPath, AZ::IO::OpenMode::ModeRead, fileBuffer)) + { + int result = archive->UpdateFile( + relativePath.Native(), fileBuffer.data(), fileBuffer.size(), s_compressionMethod, + s_compressionLevel, s_compressionCodec); + + thisSuccess = (result == AZ::IO::ZipDir::ZD_ERROR_SUCCESS); + AZ_Error( + s_traceName, thisSuccess, "Error %d encountered while adding '%s' to archive '%.*s'", result, fileName.c_str(), + AZ_STRING_ARG(archive->GetFullPath().Native())); + } + else + { + AZ_Error( + s_traceName, false, "Error encountered while reading '%s' to add to archive '%.*s'", fileName.c_str(), + AZ_STRING_ARG(archive->GetFullPath().Native())); + } - if (commandLineArgs.empty()) - { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return; - } + success = (success && thisSuccess); + } - LaunchZipExe(m_unzipExePath, commandLineArgs, respCallback, taskHandle); + archive.reset(); + p.set_value(success); + }; + + // Async task... + std::promise p; + std::future f = p.get_future(); + + AZStd::thread_desc threadDesc; + threadDesc.m_name = "Archive Task (Create)"; + m_threads.emplace_back(threadDesc, FnCreateArchive, AZStd::move(p)); + return f; } - void ArchiveComponent::ExtractFile(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) + + std::future ArchiveComponent::ExtractArchive( + const AZStd::string& archivePath, + const AZStd::string& destinationPath) { - AZStd::string commandLineArgs = AzToolsFramework::Platform::GetExtractFileCommand(archivePath, fileInArchive, destinationPath, overWrite); - if (commandLineArgs.empty()) + if (!CheckParamsForExtract(archivePath, destinationPath)) { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return; + std::promise p; + p.set_value(false); + return p.get_future(); } - LaunchZipExe(m_unzipExePath, commandLineArgs, respCallback, taskHandle); - } - bool ArchiveComponent::ExtractFileBlocking(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite) - { - AZStd::string commandLineArgs = AzToolsFramework::Platform::GetExtractFileCommand(archivePath, fileInArchive, destinationPath, overWrite); - if (commandLineArgs.empty()) + auto FnExtractArchive = [this, archivePath, destinationPath](std::promise&& p) -> void { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return false; - } + auto archive = m_archive->OpenArchive(archivePath, {}, AZ::IO::INestedArchive::FLAGS_READ_ONLY); + if (!archive) + { + AZ_Error(s_traceName, false, "Failed to open archive file '%s'", archivePath.c_str()); + p.set_value(false); + return; + } - bool success = false; - auto createArchiveCallback = [&success](bool result, AZStd::string consoleOutput) { - success = result; - }; - LaunchZipExe(m_unzipExePath, commandLineArgs, createArchiveCallback); - return success; - } + AZStd::vector filesInArchive; + if (int result = archive->ListAllFiles(filesInArchive); result != AZ::IO::ZipDir::ZD_ERROR_SUCCESS) + { + AZ_Error(s_traceName, false, "Failed to get list of files in archive '%s'", archivePath.c_str()); + p.set_value(false); + return; + } - void ArchiveComponent::ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& fileEntries, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) - { - AZStd::string commandLineArgs = Platform::GetListFilesInArchiveCommand(archivePath); - - auto parseOutput = [respCallback, &fileEntries](bool exitCode, AZStd::string consoleOutput) - { - Platform::ParseConsoleOutputFromListFilesInArchive(consoleOutput, fileEntries); - AZ::TickBus::QueueFunction(respCallback, exitCode, AZStd::move(consoleOutput)); - }; - LaunchZipExe(m_unzipExePath, commandLineArgs, parseOutput, taskHandle, "", true); - } + AZStd::vector fileBuffer; + AZ::IO::Path destination{ destinationPath }; + AZ::u64 fileSize = 0; + AZ::u64 numFilesWritten = 0; + AZ::u64 bytesWritten = 0; + AZ::IO::INestedArchive::Handle srcHandle{}; + AZ::IO::HandleType dstHandle = AZ::IO::InvalidHandle; + constexpr AZ::IO::OpenMode openMode = + (AZ::IO::OpenMode::ModeCreatePath | AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeUpdate); + + for (const auto& filePath : filesInArchive) + { + srcHandle = archive->FindFile(filePath.Native()); + AZ_Assert(srcHandle != nullptr, "File '%s' does not exist inside archive '%s'", filePath.c_str(), archivePath.c_str()); - bool ArchiveComponent::ListFilesInArchiveBlocking(const AZStd::string& archivePath, AZStd::vector& fileEntries) - { - AZStd::string listOutput; - AZStd::string commandLineArgs = Platform::GetListFilesInArchiveCommand(archivePath.c_str()); - bool success = false; + fileSize = (srcHandle != nullptr) ? archive->GetFileSize(srcHandle) : 0; + fileBuffer.resize_no_construct(fileSize); + if (auto result = archive->ReadFile(srcHandle, fileBuffer.data()); result != AZ::IO::ZipDir::ZD_ERROR_SUCCESS) + { + AZ_Error( + s_traceName, false, "Failed to read file '%s' in archive '%s' with error %d", filePath.c_str(), archivePath.c_str(), + result); + continue; + } - auto parseOutput = [&success, &fileEntries](bool result, AZStd::string consoleOutput) - { - Platform::ParseConsoleOutputFromListFilesInArchive(consoleOutput, fileEntries); - success = result; + AZ::IO::Path destinationFile = destination / filePath; + if (!m_fileIO->Open(destinationFile.c_str(), openMode, dstHandle)) + { + AZ_Error(s_traceName, false, "Failed to open '%s' for writing", destinationFile.c_str()); + continue; + } + + if (!m_fileIO->Write(dstHandle, fileBuffer.data(), fileSize, &bytesWritten)) + { + AZ_Error(s_traceName, false, "Failed to write destination file '%s'", destinationFile.c_str()); + } + else if (bytesWritten == fileSize) + { + ++numFilesWritten; + } + + m_fileIO->Close(dstHandle); + } + + p.set_value(numFilesWritten == filesInArchive.size()); }; - LaunchZipExe(m_unzipExePath, commandLineArgs, parseOutput, AZ::Uuid::CreateNull(), "", true); - return success; - } - void ArchiveComponent::AddFileToArchive(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& fileToAdd, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) - { - AZStd::string commandLineArgs = Platform::GetAddFileToArchiveCommand(archivePath, fileToAdd); - if (commandLineArgs.empty()) - { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return; - } + // Async task... + std::promise p; + std::future f = p.get_future(); - LaunchZipExe(m_zipExePath, commandLineArgs, respCallback, taskHandle, workingDirectory); + AZStd::thread_desc threadDesc; + threadDesc.m_name = "Archive Task (Extract)"; + m_threads.emplace_back(threadDesc, FnExtractArchive, AZStd::move(p)); + return f; } - bool ArchiveComponent::AddFileToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& fileToAdd) + + std::future ArchiveComponent::ExtractFile( + const AZStd::string& archivePath, + const AZStd::string& fileInArchive, + const AZStd::string& destinationPath) { - AZStd::string commandLineArgs = Platform::GetAddFileToArchiveCommand(archivePath, fileToAdd); - if (commandLineArgs.empty()) + if (!CheckParamsForExtract(archivePath, destinationPath)) { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return false; + std::promise p; + p.set_value(false); + return p.get_future(); } - bool success = false; - auto addFileToArchiveCallback = [&success](bool result, AZStd::string consoleOutput) { - success = result; - }; - LaunchZipExe(m_zipExePath, commandLineArgs, addFileToArchiveCallback, AZ::Uuid::CreateNull(), workingDirectory); - return success; - } + auto FnExtractFile = [this, archivePath, fileInArchive, destinationPath](std::promise&& p) -> void + { + auto archive = m_archive->OpenArchive(archivePath, {}, AZ::IO::INestedArchive::FLAGS_READ_ONLY); + if (!archive) + { + AZ_Error(s_traceName, false, "Failed to open archive file '%s'", archivePath.c_str()); + p.set_value(false); + return; + } - bool ArchiveComponent::AddFilesToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath) - { - bool success = false; + AZ::IO::INestedArchive::Handle fileHandle = archive->FindFile(fileInArchive); + if (!fileHandle) + { + AZ_Error(s_traceName, false, "File '%s' does not exist inside archive '%s'", fileInArchive.c_str(), archivePath.c_str()); + p.set_value(false); + return; + } - auto addFileToArchiveCallback = [&success](bool result, AZStd::string consoleOutput) { - success = result; + AZ::u64 fileSize = archive->GetFileSize(fileHandle); + AZStd::vector fileBuffer; + fileBuffer.resize_no_construct(fileSize); + + if (auto result = archive->ReadFile(fileHandle, fileBuffer.data()); result != AZ::IO::ZipDir::ZD_ERROR_SUCCESS) + { + AZ_Error( + s_traceName, false, "Failed to read file '%s' in archive '%s' with error %d", fileInArchive.c_str(), + archivePath.c_str(), result); + p.set_value(false); + return; + } + + AZ::IO::HandleType destFileHandle = AZ::IO::InvalidHandle; + AZ::IO::Path destinationFile{ destinationPath }; + destinationFile /= fileInArchive; + AZ::IO::OpenMode openMode = (AZ::IO::OpenMode::ModeCreatePath | AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeUpdate); + if (!m_fileIO->Open(destinationFile.c_str(), openMode, destFileHandle)) + { + AZ_Error(s_traceName, false, "Failed to open destination file '%s' for writing", destinationFile.c_str()); + p.set_value(false); + return; + } + + AZ::u64 bytesWritten = 0; + if (!m_fileIO->Write(destFileHandle, fileBuffer.data(), fileSize, &bytesWritten)) + { + AZ_Error(s_traceName, false, "Failed to write destination file '%s'", destinationFile.c_str()); + } + + m_fileIO->Close(destFileHandle); + p.set_value(bytesWritten == fileSize); }; - AZStd::string commandLineArgs = Platform::GetAddFilesToArchiveCommand(archivePath.c_str(), listFilePath.c_str()); + // Async task... + std::promise p; + std::future f = p.get_future(); + + AZStd::thread_desc threadDesc; + threadDesc.m_name = "Archive Task (Extract Single)"; + m_threads.emplace_back(threadDesc, FnExtractFile, AZStd::move(p)); + return f; + } + - if (commandLineArgs.empty()) + bool ArchiveComponent::ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& outFileEntries) + { + if (!m_fileIO || !m_archive) { - // The platform-specific implementation has already thrown its own error, no need to throw another one return false; } - LaunchZipExe(m_zipExePath, commandLineArgs, addFileToArchiveCallback, AZ::Uuid::CreateNull(), workingDirectory); - return success; - } - void ArchiveComponent::AddFilesToArchive(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) - { - AZStd::string commandLineArgs = Platform::GetAddFilesToArchiveCommand(archivePath, listFilePath); - if (commandLineArgs.empty()) + if (!m_fileIO->Exists(archivePath.c_str())) + { + AZ_Error(s_traceName, false, "Archive '%s' does not exist!", archivePath.c_str()); + return false; + } + + auto archive = m_archive->OpenArchive(archivePath, {}, AZ::IO::INestedArchive::FLAGS_READ_ONLY); + if (!archive) { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return; + AZ_Error(s_traceName, false, "Failed to open archive file '%s'", archivePath.c_str()); + return false; } - LaunchZipExe(m_zipExePath, commandLineArgs, respCallback, taskHandle, workingDirectory); + AZStd::vector fileEntries; + int result = archive->ListAllFiles(fileEntries); + outFileEntries.clear(); + for (const auto& path : fileEntries) + { + outFileEntries.emplace_back(path.String()); + } + return (result == AZ::IO::ZipDir::ZD_ERROR_SUCCESS); } - bool ArchiveComponent::ExtractArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool extractWithRootDirectory) + std::future ArchiveComponent::AddFileToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& fileToAdd) { - AZStd::string commandLineArgs = Platform::GetExtractArchiveCommand(archivePath, destinationPath, extractWithRootDirectory); - - if (commandLineArgs.empty()) + if (!CheckParamsForAdd(workingDirectory, fileToAdd)) { - // The platform-specific implementation has already thrown its own error, no need to throw another one - return false; + std::promise p; + p.set_value(false); + return p.get_future(); } - bool success = false; - auto extractArchiveCallback = [&success](bool result, AZStd::string consoleOutput) { - success = result; + auto FnAddFileToArchive = [this, archivePath, workingDirectory, fileToAdd](std::promise&& p) -> void + { + auto archive = m_archive->OpenArchive(archivePath); + if (!archive) + { + AZ_Error(s_traceName, false, "Failed to open archive file '%s'", archivePath.c_str()); + p.set_value(false); + return; + } + + AZ::IO::Path workingPath{ workingDirectory }; + AZ::IO::Path fullPath = workingPath / fileToAdd; + AZ::IO::PathView relativePath = AZ::IO::PathView{ fullPath }.LexicallyRelative(workingPath); + + AZStd::vector fileBuffer; + bool success = false; + if (ArchiveUtils::ReadFile(fullPath, AZ::IO::OpenMode::ModeRead, fileBuffer)) + { + int result = archive->UpdateFile( + relativePath.Native(), fileBuffer.data(), fileBuffer.size(), s_compressionMethod, + s_compressionLevel, s_compressionCodec); + + success = (result == AZ::IO::ZipDir::ZD_ERROR_SUCCESS); + AZ_Error( + s_traceName, success, "Error %d encountered while adding '%s' to archive '%.*s'", result, fileToAdd.c_str(), + AZ_STRING_ARG(archive->GetFullPath().Native())); + } + else + { + AZ_Error( + s_traceName, false, "Error encountered while reading '%s' to add to archive '%.*s'", fileToAdd.c_str(), + AZ_STRING_ARG(archive->GetFullPath().Native())); + } + + archive.reset(); + p.set_value(success); }; - LaunchZipExe(m_unzipExePath, commandLineArgs, extractArchiveCallback); - return success; + // Async task... + std::promise p; + std::future f = p.get_future(); + + AZStd::thread_desc threadDesc; + threadDesc.m_name = "Archive Task (Add Single)"; + m_threads.emplace_back(threadDesc, FnAddFileToArchive, AZStd::move(p)); + return f; } - void ArchiveComponent::CancelTasks(AZ::Uuid taskHandle) - { - AZStd::unique_lock lock(m_threadControlMutex); - auto it = m_threadInfoMap.find(taskHandle); - if (it == m_threadInfoMap.end()) + std::future ArchiveComponent::AddFilesToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& listFilePath) + { + if (!CheckParamsForAdd(workingDirectory, listFilePath)) { - return; + std::promise p; + p.set_value(false); + return p.get_future(); } - ThreadInfo& info = it->second; - info.shouldStop = true; - m_cv.wait(lock, [&info]() { - return info.threads.size() == 0; - }); - m_threadInfoMap.erase(it); - } - - void ArchiveComponent::LaunchZipExe(const AZStd::string& exePath, const AZStd::string& commandLineArgs, const ArchiveResponseOutputCallback& respCallback, AZ::Uuid taskHandle, const AZStd::string& workingDir, bool captureOutput) - { - auto sevenZJob = [=]() + auto FnAddFilesToArchive = [this, archivePath, workingDirectory, listFilePath](std::promise&& p) -> void { - if (!taskHandle.IsNull()) + auto archive = m_archive->OpenArchive(archivePath); + if (!archive) { - AZStd::unique_lock lock(m_threadControlMutex); - m_threadInfoMap[taskHandle].threads.insert(AZStd::this_thread::get_id()); - m_cv.notify_all(); + AZ_Error(s_traceName, false, "Failed to open archive file '%s'", archivePath.c_str()); + p.set_value(false); + return; } - AzFramework::ProcessLauncher::ProcessLaunchInfo info; - info.m_commandlineParameters = exePath + " " + commandLineArgs; - - info.m_showWindow = false; - if (!workingDir.empty()) - { - info.m_workingDirectory = workingDir; - } - AZStd::unique_ptr watcher(AzFramework::ProcessWatcher::LaunchProcess(info, AzFramework::ProcessCommunicationType::COMMUNICATOR_TYPE_STDINOUT)); + bool success = true; // starts true and turns false when any error is encountered. + AZ::IO::Path basePath{ workingDirectory }; - AZStd::string consoleOutput; - AZ::u32 exitCode = static_cast(SevenZipExitCode::UserStoppedProcess); - if (watcher) + auto PerLineCallback = [&success, &basePath, &archive](AZStd::string_view filePathLine) -> void { - // callback requires output captured from 7z - if (captureOutput) + AZStd::vector fileBuffer; + AZ::IO::Path fullPath = (basePath / filePathLine); + if (ArchiveUtils::ReadFile(fullPath, AZ::IO::OpenMode::ModeRead, fileBuffer)) { - AZStd::string consoleBuffer; - while (watcher->IsProcessRunning(&exitCode)) - { - if (!taskHandle.IsNull()) - { - AZStd::unique_lock lock(m_threadControlMutex); - if (m_threadInfoMap[taskHandle].shouldStop) - { - watcher->TerminateProcess(static_cast(SevenZipExitCode::UserStoppedProcess)); - } - } - watcher->WaitForProcessToExit(g_sleepDuration, &exitCode); - AZ::u32 outputSize = watcher->GetCommunicator()->PeekOutput(); - if (outputSize) - { - consoleBuffer.resize(outputSize); - watcher->GetCommunicator()->ReadOutput(consoleBuffer.data(), outputSize); - consoleOutput += consoleBuffer; - } - } + int result = archive->UpdateFile( + filePathLine, fileBuffer.data(), fileBuffer.size(), s_compressionMethod, + s_compressionLevel, s_compressionCodec); + + bool thisSuccess = (result == AZ::IO::ZipDir::ZD_ERROR_SUCCESS); + success = (success && thisSuccess); + AZ_Error( + s_traceName, thisSuccess, "Error %d encountered while adding '%.*s' to archive '%.*s'", result, + AZ_STRING_ARG(filePathLine), AZ_STRING_ARG(archive->GetFullPath().Native())); } else { - ConsoleEchoCommunicator echoCommunicator(watcher->GetCommunicator()); - while (watcher->IsProcessRunning(&exitCode)) - { - if (!taskHandle.IsNull()) - { - AZStd::unique_lock lock(m_threadControlMutex); - if (m_threadInfoMap[taskHandle].shouldStop) - { - watcher->TerminateProcess(static_cast(SevenZipExitCode::UserStoppedProcess)); - } - } - watcher->WaitForProcessToExit(g_sleepDuration, &exitCode); - echoCommunicator.Pump(); - } + AZ_Error( + s_traceName, false, "Error encountered while reading '%.*s' to add to archive '%.*s'", AZ_STRING_ARG(filePathLine), + AZ_STRING_ARG(archive->GetFullPath().Native())); } - } + }; - if (taskHandle.IsNull()) - { - respCallback(exitCode == static_cast(SevenZipExitCode::NoError), AZStd::move(consoleOutput)); - } - else + ArchiveUtils::ProcessFileList(listFilePath, PerLineCallback); + + archive.reset(); + p.set_value(success); + }; + + // Async task... + std::promise p; + std::future f = p.get_future(); + + AZStd::thread_desc threadDesc; + threadDesc.m_name = "Archive Task (Add)"; + m_threads.emplace_back(threadDesc, FnAddFilesToArchive, AZStd::move(p)); + return f; + } + + + bool ArchiveComponent::CheckParamsForAdd(const AZStd::string& directory, const AZStd::string& file) + { + if (!m_fileIO || !m_archive) + { + return false; + } + + if (!m_fileIO->IsDirectory(directory.c_str())) + { + AZ_Error( + s_traceName, false, "Working directory '%s' is not a directory or doesn't exist!", directory.c_str()); + return false; + } + + if (!file.empty()) + { + auto filePath = AZ::IO::Path{ directory } / file; + if (!m_fileIO->Exists(filePath.c_str()) || m_fileIO->IsDirectory(filePath.c_str())) { - AZ::TickBus::QueueFunction(respCallback, (exitCode == static_cast(SevenZipExitCode::NoError)), AZStd::move(consoleOutput)); + AZ_Error(s_traceName, false, "File list '%s' is a directory or doesn't exist!", filePath.c_str()); + return false; } + } + + return true; + } - if (!taskHandle.IsNull()) + bool ArchiveComponent::CheckParamsForExtract(const AZStd::string& archive, const AZStd::string& directory) + { + if (!m_fileIO || !m_archive) + { + return false; + } + + if (!m_fileIO->Exists(archive.c_str())) + { + AZ_Error(s_traceName, false, "Archive '%s' does not exist!", archive.c_str()); + return false; + } + + if (!m_fileIO->Exists(directory.c_str())) + { + if (!m_fileIO->CreatePath(directory.c_str())) { - AZStd::unique_lock lock(m_threadControlMutex); - ThreadInfo& tInfo = m_threadInfoMap[taskHandle]; - tInfo.threads.erase(AZStd::this_thread::get_id()); - m_cv.notify_all(); + AZ_Error(s_traceName, false, "Failed to create destination directory '%s'", directory.c_str()); + return false; } - }; - if (!taskHandle.IsNull()) + } + + return true; + } + + bool ArchiveComponent::CheckParamsForCreate(const AZStd::string& archive, const AZStd::string& directory) + { + if (!m_fileIO || !m_archive) + { + return false; + } + + if (m_fileIO->Exists(archive.c_str())) { - AZStd::thread processThread(sevenZJob); - AZStd::unique_lock lock(m_threadControlMutex); - ThreadInfo& info = m_threadInfoMap[taskHandle]; - m_cv.wait(lock, [&info, &processThread]() { - return info.threads.find(processThread.get_id()) != info.threads.end(); - }); - processThread.detach(); + AZ_Error(s_traceName, false, "Archive file '%s' already exists, cannot create a new archive there!"); + return false; } - else + + if (!m_fileIO->IsDirectory(directory.c_str())) { - sevenZJob(); + AZ_Error(s_traceName, false, "Directory '%s' is not a directory or doesn't exist!", directory.c_str()); + return false; } + + return true; } + } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.h index fc344fc5a6..e2b437bcf2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.h @@ -10,80 +10,76 @@ #include #include +#include #include #include #include #include +#include #include namespace AzToolsFramework { - enum class SevenZipExitCode : AZ::u32 - { - NoError = 0, - Warning = 1, - FatalError = 2, - CommandLineError = 7, - NotEnoughMemory = 8, - UserStoppedProcess = 255 - }; - - // the ArchiveComponent's job is to execute zip commands. - // it parses the status of zip commands and returns results. + // the ArchiveComponent's job is to create and manipulate zip archives. class ArchiveComponent : public AZ::Component - , private ArchiveCommands::Bus::Handler + , private ArchiveCommandsBus::Handler { public: - AZ_COMPONENT(ArchiveComponent, "{A19EEA33-3736-447F-ACF7-DAA4B6A179AA}") + AZ_COMPONENT(ArchiveComponent, "{A19EEA33-3736-447F-ACF7-DAA4B6A179AA}"); ArchiveComponent() = default; ~ArchiveComponent() override = default; + ArchiveComponent(const ArchiveComponent&) = delete; + ArchiveComponent& operator=(const ArchiveComponent&) = delete; + ////////////////////////////////////////////////////////////////////////// // AZ::Component overrides void Activate() override; void Deactivate() override; ////////////////////////////////////////////////////////////////////////// - private: + + protected: static void Reflect(AZ::ReflectContext* context); ////////////////////////////////////////////////////////////////////////// - // ArchiveCommands::Bus::Handler overrides - void CreateArchive(const AZStd::string& archivePath, const AZStd::string& dirToArchive, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool CreateArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& dirToArchive) override; - bool ExtractArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool extractWithRootDirectory) override; - void ExtractArchive(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseCallback& respCallback) override; - void ExtractArchiveOutput(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - void ExtractArchiveWithoutRoot(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - void ExtractFile(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool ExtractFileBlocking(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite) override; - void ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& fileEntries, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool ListFilesInArchiveBlocking(const AZStd::string& archivePath, AZStd::vector& fileEntries) override; - void AddFileToArchive(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& fileToAdd, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool AddFileToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& fileToAdd) override; - bool AddFilesToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath) override; - void AddFilesToArchive(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - void CancelTasks(AZ::Uuid taskHandle) override; + // ArchiveCommandsBus::Handler overrides + [[nodiscard]] std::future CreateArchive( + const AZStd::string& archivePath, + const AZStd::string& dirToArchive) override; + + [[nodiscard]] std::future ExtractArchive( + const AZStd::string& archivePath, + const AZStd::string& destinationPath) override; + + [[nodiscard]] std::future ExtractFile( + const AZStd::string& archivePath, + const AZStd::string& fileInArchive, + const AZStd::string& destinationPath) override; + + bool ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& outFileEntries) override; + + [[nodiscard]] std::future AddFileToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& fileToAdd) override; + + [[nodiscard]] std::future AddFilesToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& listFilePath) override; ////////////////////////////////////////////////////////////////////////// - - // Launches the input zip exe as a background child process in a detached background thread, if the task handle is not null - // otherwise launches input zip exe in the calling thread. - void LaunchZipExe(const AZStd::string& exePath, const AZStd::string& commandLineArgs, const ArchiveResponseOutputCallback& respCallback, AZ::Uuid taskHandle = AZ::Uuid::CreateNull(), const AZStd::string& workingDir = "", bool captureOutput = false); - - AZStd::string m_zipExePath; - AZStd::string m_unzipExePath; - - // Struct for tracking background threads/tasks - struct ThreadInfo - { - bool shouldStop = false; - AZStd::set threads; - }; - - AZStd::mutex m_threadControlMutex; // Guards m_threadInfoMap - AZStd::condition_variable m_cv; - AZStd::unordered_map m_threadInfoMap; + + private: + AZ::IO::FileIOBase* m_fileIO = nullptr; + AZ::IO::IArchive* m_archive = nullptr; + AZStd::vector m_threads; + + bool CheckParamsForAdd(const AZStd::string& directory, const AZStd::string& file); + bool CheckParamsForExtract(const AZStd::string& archive, const AZStd::string& directory); + bool CheckParamsForCreate(const AZStd::string& archive, const AZStd::string& directory); }; + } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp index f82724a721..972e9d588f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp @@ -16,91 +16,62 @@ namespace AzToolsFramework void NullArchiveComponent::Activate() { - ArchiveCommands::Bus::Handler::BusConnect(); + ArchiveCommandsBus::Handler::BusConnect(); } void NullArchiveComponent::Deactivate() { - ArchiveCommands::Bus::Handler::BusDisconnect(); + ArchiveCommandsBus::Handler::BusDisconnect(); } - bool NullArchiveComponent::ExtractArchiveBlocking(const AZStd::string& /*archivePath*/, const AZStd::string& /*destinationPath*/, bool /*extractWithRootDirectory*/) + std::future DefaultFuture() { - return false; - } - - void NullArchiveComponent::ExtractArchive(const AZStd::string& /*archivePath*/, const AZStd::string& /*destinationPath*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseCallback& respCallback) - { - AZ::TickBus::QueueFunction(respCallback, false); + std::promise p; + p.set_value(false); + return p.get_future(); } - void NullArchiveComponent::ExtractArchiveOutput(const AZStd::string& /*archivePath*/, const AZStd::string& /*destinationPath*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseOutputCallback& respCallback) + std::future NullArchiveComponent::CreateArchive( + const AZStd::string& /*archivePath*/, + const AZStd::string& /*dirToArchive*/) { - AZ::TickBus::QueueFunction(respCallback, false, AZStd::string()); + return DefaultFuture(); } - void NullArchiveComponent::ExtractArchiveWithoutRoot(const AZStd::string& /*archivePath*/, const AZStd::string& /*destinationPath*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseOutputCallback& respCallback) + std::future NullArchiveComponent::ExtractArchive( + const AZStd::string& /*archivePath*/, + const AZStd::string& /*destinationPath*/) { - AZ::TickBus::QueueFunction(respCallback, false, AZStd::string()); + return DefaultFuture(); } - void NullArchiveComponent::ExtractFile(const AZStd::string& /*archivePath*/, const AZStd::string& /*fileInArchive*/, const AZStd::string& /*destinationPath*/, bool /*overWrite*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseOutputCallback& respCallback) + std::future NullArchiveComponent::ExtractFile( + const AZStd::string& /*archivePath*/, + const AZStd::string& /*fileInArchive*/, + const AZStd::string& /*destinationPath*/) { - // Always report we failed to extract - AZ::TickBus::QueueFunction(respCallback, false, AZStd::string()); + return DefaultFuture(); } - bool NullArchiveComponent::ExtractFileBlocking(const AZStd::string& /*archivePath*/, const AZStd::string& /*fileInArchive*/, const AZStd::string& /*destinationPath*/, bool /*overWrite*/) + bool NullArchiveComponent::ListFilesInArchive(const AZStd::string& /*archivePath*/, AZStd::vector& /*outFileEntries*/) { return false; } - void NullArchiveComponent::ListFilesInArchive(const AZStd::string& /*archivePath*/, AZStd::vector& /*consoleOutput*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseOutputCallback& respCallback) + std::future NullArchiveComponent::AddFileToArchive( + const AZStd::string& /*archivePath*/, + const AZStd::string& /*fileToAdd*/, + const AZStd::string& /*pathInArchive*/) { - // Always report we failed to extract - AZ::TickBus::QueueFunction(respCallback, false, AZStd::string()); - } - - bool NullArchiveComponent::ListFilesInArchiveBlocking(const AZStd::string& /*archivePath*/, AZStd::vector& /*consoleOutput*/) - { - return false; - } - - void NullArchiveComponent::AddFileToArchive(const AZStd::string& /*archivePath*/, const AZStd::string& /*fileToAdd*/, const AZStd::string& /*pathInArchive*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseOutputCallback& respCallback) - { - // Always report we failed to extract - AZ::TickBus::QueueFunction(respCallback, false, AZStd::string()); - } - - bool NullArchiveComponent::AddFileToArchiveBlocking(const AZStd::string& /*archivePath*/, const AZStd::string& /*fileToAdd*/, const AZStd::string& /*pathInArchive*/) - { - return false; - } - - bool NullArchiveComponent::AddFilesToArchiveBlocking(const AZStd::string& /*archivePath*/, const AZStd::string& /*workingDirectory*/, const AZStd::string& /*listFilePath*/) - { - return false; - } - - void NullArchiveComponent::AddFilesToArchive(const AZStd::string& /*archivePath*/, const AZStd::string& /*workingDirectory*/, const AZStd::string& /*listFilePath*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseOutputCallback& respCallback) - { - // Always report we failed to extract - AZ::TickBus::QueueFunction(respCallback, false, AZStd::string()); - } - - void NullArchiveComponent::CreateArchive(const AZStd::string& /*archivePath*/, const AZStd::string& /*dirToArchive*/, AZ::Uuid /*taskHandle*/, const ArchiveResponseOutputCallback& respCallback) - { - // Always report we failed to extract - AZ::TickBus::QueueFunction(respCallback, false, AZStd::string()); - } - - bool NullArchiveComponent::CreateArchiveBlocking(const AZStd::string& /*archivePath*/, const AZStd::string& /*dirToArchive*/) - { - return false; + return DefaultFuture(); } - void NullArchiveComponent::CancelTasks(AZ::Uuid /*taskHandle*/) + std::future NullArchiveComponent::AddFilesToArchive( + const AZStd::string& /*archivePath*/, + const AZStd::string& /*workingDirectory*/, + const AZStd::string& /*listFilePath*/) { + return DefaultFuture(); } void NullArchiveComponent::Reflect(AZ::ReflectContext* context) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h index 2023490351..9ce33d0c85 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h @@ -15,7 +15,7 @@ namespace AzToolsFramework { class NullArchiveComponent : public AZ::Component - , private ArchiveCommands::Bus::Handler + , private ArchiveCommandsBus::Handler { public: AZ_COMPONENT(NullArchiveComponent, "{D665B6B1-5FF4-4203-B19F-BBDB82587129}") @@ -32,23 +32,31 @@ namespace AzToolsFramework static void Reflect(AZ::ReflectContext* context); ////////////////////////////////////////////////////////////////////////// - // ArchiveCommands::Bus::Handler overrides - // ArchiveCommands::Bus::Handler overrides - void CreateArchive(const AZStd::string& archivePath, const AZStd::string& dirToArchive, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool CreateArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& dirToArchive) override; - bool ExtractArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool extractWithRootDirectory) override; - void ExtractArchive(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseCallback& respCallback) override; - void ExtractArchiveOutput(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - void ExtractArchiveWithoutRoot(const AZStd::string& archivePath, const AZStd::string& destinationPath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - void ExtractFile(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool ExtractFileBlocking(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite) override; - void ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& consoleOutput, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool ListFilesInArchiveBlocking(const AZStd::string& archivePath, AZStd::vector& consoleOutput) override; - void AddFileToArchive(const AZStd::string& archivePath, const AZStd::string& fileToAdd, const AZStd::string& pathInArchive, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - bool AddFileToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& fileToAdd, const AZStd::string& pathInArchive) override; - bool AddFilesToArchiveBlocking(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath) override; - void AddFilesToArchive(const AZStd::string& archivePath, const AZStd::string& workingDirectory, const AZStd::string& listFilePath, AZ::Uuid taskHandle, const ArchiveResponseOutputCallback& respCallback) override; - void CancelTasks(AZ::Uuid taskHandle) override; + // ArchiveCommandsBus::Handler overrides + [[nodiscard]] std::future CreateArchive( + const AZStd::string& archivePath, + const AZStd::string& dirToArchive) override; + + [[nodiscard]] std::future ExtractArchive( + const AZStd::string& archivePath, + const AZStd::string& destinationPath) override; + + [[nodiscard]] std::future ExtractFile( + const AZStd::string& archivePath, + const AZStd::string& fileInArchive, + const AZStd::string& destinationPath) override; + + bool ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& outFileEntries) override; + + [[nodiscard]] std::future AddFileToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& fileToAdd) override; + + [[nodiscard]] std::future AddFilesToArchive( + const AZStd::string& archivePath, + const AZStd::string& workingDirectory, + const AZStd::string& listFilePath) override; ////////////////////////////////////////////////////////////////////////// }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp index 5a1e491b01..86b32d4379 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp @@ -15,7 +15,9 @@ #include #include #include +#include #include +#include namespace AzToolsFramework { @@ -352,26 +354,6 @@ namespace AzToolsFramework } } - const char* AssetSystemComponent::GetAbsoluteDevGameFolderPath() - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - if (fileIO) - { - return fileIO->GetAlias("@devassets@"); - } - return ""; - } - - const char* AssetSystemComponent::GetAbsoluteDevRootFolderPath() - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - if (fileIO) - { - return fileIO->GetAlias("@devroot@"); - } - return ""; - } - void AssetSystemComponent::OnSystemTick() { AssetSystemBus::ExecuteQueuedEvents(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h index 4774b96be4..fcd697393c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h @@ -56,8 +56,6 @@ namespace AzToolsFramework ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::AssetSystemRequestBus::Handler overrides bool GetAbsoluteAssetDatabaseLocation(AZStd::string& result) override; - const char* GetAbsoluteDevGameFolderPath() override; - const char* GetAbsoluteDevRootFolderPath() override; bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& outputPath) override; bool GenerateRelativeSourcePath( const AZStd::string& sourcePath, AZStd::string& outputPath, AZStd::string& watchFolder) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.cpp index 76b634b51e..4ebeb03a71 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.cpp @@ -29,7 +29,7 @@ AZ_PUSH_DISABLE_WARNING(4251 4244, "-Wunknown-warning-option") // disable warnin AZ_POP_DISABLE_WARNING AZ_CVAR( - bool, ed_hideAssetPickerPathColumn, false, nullptr, AZ::ConsoleFunctorFlags::Null, + bool, ed_hideAssetPickerPathColumn, true, nullptr, AZ::ConsoleFunctorFlags::Null, "Hide AssetPicker path column for a clearer view."); AZ_CVAR_EXTERNED(bool, ed_useNewAssetBrowserTableView); @@ -151,6 +151,10 @@ namespace AzToolsFramework m_ui->m_assetBrowserTableViewWidget, &AssetBrowserTableView::ClearTypeFilter, m_ui->m_searchWidget, &SearchWidget::ClearTypeFilter); + connect( + this, &AssetPickerDialog::SizeChangedSignal, m_ui->m_assetBrowserTableViewWidget, + &AssetBrowserTableView::UpdateSizeSlot); + m_ui->m_assetBrowserTableViewWidget->SetName("AssetBrowserTableView_main"); m_tableModel->UpdateTableModelMaps(); } @@ -206,6 +210,12 @@ namespace AzToolsFramework } } + void AssetPickerDialog::resizeEvent(QResizeEvent* resizeEvent) + { + emit SizeChangedSignal(m_ui->verticalLayout_4->geometry().width()); + QDialog::resizeEvent(resizeEvent); + } + void AssetPickerDialog::keyPressEvent(QKeyEvent* e) { // Until search widget is revised, Return key should not close the dialog, diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.h index bab265c134..f8ec6077ce 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.h @@ -46,6 +46,9 @@ namespace AzToolsFramework explicit AssetPickerDialog(AssetSelectionModel& selection, QWidget* parent = nullptr); virtual ~AssetPickerDialog(); + Q_SIGNALS: + void SizeChangedSignal(int newWidth); + protected: ////////////////////////////////////////////////////////////////////////// // QDialog @@ -53,6 +56,7 @@ namespace AzToolsFramework void accept() override; void reject() override; void keyPressEvent(QKeyEvent* e) override; + void resizeEvent(QResizeEvent* resizeEvent) override; private Q_SLOTS: void DoubleClickedSlot(const QModelIndex& index); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.ui b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.ui index b11ffb3990..df7d27d3c8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.ui +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetPicker/AssetPickerDialog.ui @@ -117,6 +117,9 @@ 0 + + + @@ -142,9 +145,6 @@ - - -
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntryCache.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntryCache.h index e2929c0d3e..7b94108a91 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntryCache.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntryCache.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/RootAssetBrowserEntry.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/RootAssetBrowserEntry.h index d765d4e1e5..685770dd20 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/RootAssetBrowserEntry.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/RootAssetBrowserEntry.h @@ -7,6 +7,7 @@ */ #pragma once +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp index 217e282a37..feab9a9e5a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp @@ -20,13 +20,17 @@ AZ_PUSH_DISABLE_WARNING( #include #include #include - +#include #include AZ_POP_DISABLE_WARNING namespace AzToolsFramework { namespace AssetBrowser { + const float MinHeaderResizeProportion = .25f; + const float MaxHeaderResizeProportion = .75f; + const float DefaultHeaderResizeProportion = .5f; + AssetBrowserTableView::AssetBrowserTableView(QWidget* parent) : AzQtComponents::TableView(parent) , m_delegate(new SearchEntryDelegate(this)) @@ -65,8 +69,10 @@ namespace AzToolsFramework AzQtComponents::TableView::setModel(model); connect(m_tableModel, &AssetBrowserTableModel::layoutChanged, this, &AssetBrowserTableView::layoutChangedSlot); - header()->setSectionResizeMode(0, QHeaderView::ResizeMode::Stretch); - header()->setSectionResizeMode(1, QHeaderView::ResizeMode::Stretch); + header()->setStretchLastSection(true); + header()->setSectionResizeMode(0, QHeaderView::ResizeMode::Interactive); + header()->setSectionResizeMode(1, QHeaderView::ResizeMode::Interactive); + UpdateSizeSlot(parentWidget()->width()); header()->setSortIndicatorShown(false); header()->setSectionsClickable(false); } @@ -148,8 +154,17 @@ namespace AzToolsFramework void AssetBrowserTableView::OnAssetBrowserComponentReady() { + UpdateSizeSlot(parentWidget()->width()); + } + + void AssetBrowserTableView::UpdateSizeSlot(int newWidth) + { + setColumnWidth(0, aznumeric_cast(newWidth * DefaultHeaderResizeProportion)); + header()->setMinimumSectionSize(aznumeric_cast(newWidth * MinHeaderResizeProportion)); + header()->setMaximumSectionSize(aznumeric_cast(newWidth * MaxHeaderResizeProportion)); } + void AssetBrowserTableView::OnContextMenu([[maybe_unused]] const QPoint& point) { const auto& selectedAssets = GetSelectedAssets(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h index b4eca59cef..b93500ba37 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h @@ -59,12 +59,14 @@ namespace AzToolsFramework void ClearStringFilter(); void ClearTypeFilter(); + public Q_SLOTS: + void UpdateSizeSlot(int newWidth); + protected Q_SLOTS: void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) override; void rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) override; void layoutChangedSlot(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); - private: QString m_name; QPointer m_tableModel; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp index 755c59b55b..b463381638 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp @@ -290,7 +290,7 @@ namespace AzToolsFramework absoluteIconPath = AZ::IO::FixedMaxPath(AZ::Utils::GetEnginePath()) / TreeIconPathOneChild; break; } - bool pixmapLoadedSuccess = pixmap.load(absoluteIconPath.c_str()); + [[maybe_unused]] bool pixmapLoadedSuccess = pixmap.load(absoluteIconPath.c_str()); AZ_Assert(pixmapLoadedSuccess, "Error loading Branch Icons in SearchEntryDelegate"); m_branchIcons[static_cast(branchType)] = pixmap; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp index ee3669a7ba..8924907e81 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -31,12 +32,10 @@ namespace AzToolsFramework const int NumOfBytesInMB = 1024 * 1024; const int ManifestFileSizeBufferInBytes = 10 * 1024; // 10 KB const float AssetCatalogFileSizeBufferPercentage = 1.0f; - using ArchiveCommandsBus = AzToolsFramework::ArchiveCommands::Bus; using AssetCatalogRequestBus = AZ::Data::AssetCatalogRequestBus; const char AssetBundleComponent::DeltaCatalogName[] = "DeltaCatalog.xml"; - constexpr int SleepTimeMS = 250; constexpr int InjectFileRetryCount = 4; @@ -135,7 +134,7 @@ namespace AzToolsFramework AZ_TracePrintf(logWindowName, "Gathering file entries in source pak file \"%s\".\n", sourcePak.c_str()); bool result = false; AZStd::vector fileEntries; - ArchiveCommandsBus::BroadcastResult(result, &AzToolsFramework::ArchiveCommands::ListFilesInArchiveBlocking, normalizedSourcePakPath, fileEntries); + ArchiveCommandsBus::BroadcastResult(result, &AzToolsFramework::ArchiveCommandsBus::Events::ListFilesInArchive, normalizedSourcePakPath, fileEntries); // This ebus currently always returns false as the result, as it is believed that the 7z process is // being terminated by the user instead of ending gracefully. Check against an empty fileList instead // as a result. @@ -605,15 +604,17 @@ namespace AzToolsFramework { AZ_TracePrintf(logWindowName, "Injecting file (%s) into bundle (%s).\n", filePath.c_str(), archiveFilePath.c_str()); bool fileAddedToArchive = false; + std::future fileAdded; int retryCount = InjectFileRetryCount; + while (!fileAddedToArchive && retryCount) { - ArchiveCommandsBus::BroadcastResult(fileAddedToArchive, &AzToolsFramework::ArchiveCommands::AddFileToArchiveBlocking, archiveFilePath, workingDirectory, filePath); + ArchiveCommandsBus::BroadcastResult(fileAdded, &AzToolsFramework::ArchiveCommandsBus::Events::AddFileToArchive, archiveFilePath, workingDirectory, filePath); --retryCount; + fileAddedToArchive = fileAdded.get(); if (!fileAddedToArchive && retryCount) { AZ_Error(logWindowName, false, "Failed to insert file (%s) into bundle (%s). Retrying.", filePath.c_str(), archiveFilePath.c_str()); - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(SleepTimeMS)); } } @@ -626,7 +627,11 @@ namespace AzToolsFramework bool AssetBundleComponent::InjectFile(const AZStd::string& filePath, const AZStd::string& sourcePak) { - return InjectFile(filePath, sourcePak, ""); + // When no working directory is specified, assume that the file being injected goes into the root of the archive. + // The filePath should be an absolute path, making the workingDirectory be the path leading up to the file. + AZ::IO::PathView fullFilePath{ filePath, AZ::IO::PosixPathSeparator }; + AZ::IO::Path workingDir{ fullFilePath.ParentPath() }; + return InjectFile(filePath, sourcePak, workingDir.c_str()); } bool AssetBundleComponent::InjectFiles(const AZStd::vector& fileEntries, const AZStd::string& sourcePak, const char* workingDirectory) @@ -667,8 +672,9 @@ namespace AzToolsFramework } } - bool filesAddedToArchive = false; - AzToolsFramework::ArchiveCommandsBus::BroadcastResult(filesAddedToArchive, &AzToolsFramework::ArchiveCommands::AddFilesToArchiveBlocking, sourcePak, workingDirectory, listFilePath); + std::future filesAdded; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult(filesAdded, &AzToolsFramework::ArchiveCommands::AddFilesToArchive, sourcePak, workingDirectory, listFilePath); + bool filesAddedToArchive = filesAdded.get(); if (!filesAddedToArchive) { AZ_Error(logWindowName, false, "Failed to insert files into bundle (%s).\n", sourcePak.c_str()); @@ -687,7 +693,6 @@ namespace AzToolsFramework { // open the manifest and deserialize it bool manifestExtracted = false; - const bool overwriteExisting = true; TemporaryDir tempDir(sourcePak); if (!tempDir.m_result) @@ -697,7 +702,10 @@ namespace AzToolsFramework AZStd::string manifestFilePath; AzFramework::StringFunc::Path::ConstructFull(tempDir.m_tempFolderPath.c_str(), AzFramework::AssetBundleManifest::s_manifestFileName, manifestFilePath, true); - ArchiveCommandsBus::BroadcastResult(manifestExtracted, &ArchiveCommandsBus::Events::ExtractFileBlocking, sourcePak, AzFramework::AssetBundleManifest::s_manifestFileName, tempDir.m_tempFolderPath, overwriteExisting); + + std::future extractResult; + ArchiveCommandsBus::BroadcastResult(extractResult, &ArchiveCommandsBus::Events::ExtractFile, sourcePak, AzFramework::AssetBundleManifest::s_manifestFileName, tempDir.m_tempFolderPath); + manifestExtracted = extractResult.get(); if (!manifestExtracted) { AZ_Error(logWindowName, false, "Failed to extract existing manifest from archive \"%s\".", sourcePak.c_str()); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h index 307777cc1b..17a9dd40f5 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h @@ -57,7 +57,7 @@ namespace AzToolsFramework //! Returns true if the file at filePath was successfully injected into the bundle at sourcePak static bool InjectFile(const AZStd::string& filePath, const AZStd::string& sourcePak, const char* workingDirectory); - //! Inject the files with relative filePaths which espect to the working directory into the bundle at sourcePak + //! Inject the files with relative filePaths with respect to the working directory into the bundle at sourcePak //! Returns true if the file at filePath was successfully injected into the bundle at sourcePak static bool InjectFiles(const AZStd::vector& fileEntries, const AZStd::string& sourcePak, const char* workingDirectory); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorBus.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorBus.cpp new file mode 100644 index 0000000000..43c950cd00 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorBus.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "AssetEditorBus.h" +#include +#include + +namespace AzToolsFramework::AssetEditor +{ + void AssetEditorWindowSettings::Reflect(AZ::ReflectContext* context) + { + if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Field("m_openAssets", &AssetEditorWindowSettings::m_openAssets) + ; + } + } +} // namespace AzToolsFramework::AssetEditor diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorBus.h index 4d14e5c1bf..9b12ea27d4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorBus.h @@ -8,12 +8,14 @@ #pragma once #include +#include #include -#include -#include -#include +#include -namespace AZ { namespace Data { class AssetData; } } +namespace AZ::Data +{ + class AssetData; +} namespace AZStd { @@ -45,15 +47,7 @@ namespace AzToolsFramework static constexpr const char* s_name = "AssetEditorWindowSettings"; - static void Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Field("m_openAssets", &AssetEditorWindowSettings::m_openAssets) - ; - } - } + static void Reflect(AZ::ReflectContext* context); }; // External interaction with Asset Editor diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp index 95dc0f36c4..8856989911 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp @@ -22,6 +22,7 @@ AZ_POP_DISABLE_WARNING #include #include +#include #include #include #include @@ -136,7 +137,7 @@ namespace AzToolsFramework AssetEditorWidgetUserSettings::AssetEditorWidgetUserSettings() { char assetRoot[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", assetRoot, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", assetRoot, AZ_MAX_PATH_LEN); m_lastSavePath = assetRoot; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp index b68d086892..d2a88df544 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +53,7 @@ #include #include #include +#include AZ_DEFINE_BUDGET(AzToolsFramework); @@ -70,6 +72,8 @@ namespace AzToolsFramework Components::EditorSelectionAccentSystemComponent::CreateDescriptor(), EditorEntityContextComponent::CreateDescriptor(), EditorEntityFixupComponent::CreateDescriptor(), + EntityUtilityComponent::CreateDescriptor(), + ContainerEntitySystemComponent::CreateDescriptor(), FocusModeSystemComponent::CreateDescriptor(), SliceMetadataEntityContextComponent::CreateDescriptor(), SliceRequestComponent::CreateDescriptor(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp index 0259142135..df93e924b8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp @@ -8,8 +8,9 @@ #include "ComponentModeCollection.h" -#include #include +#include +#include namespace AzToolsFramework { @@ -17,7 +18,7 @@ namespace AzToolsFramework { AZ_CLASS_ALLOCATOR_IMPL(ComponentModeCollection, AZ::SystemAllocator, 0) - static const char* const s_nextActiveComponentModeTitle = "Edit Next"; + static const char* const s_nextActiveComponentModeTitle = "Edit Next"; static const char* const s_previousActiveComponentModeTitle = "Edit Previous"; static const char* const s_nextActiveComponentModeDesc = "Move to the next component"; static const char* const s_prevActiveComponentModeDesc = "Move to the previous component"; @@ -119,6 +120,11 @@ namespace AzToolsFramework } }; + ComponentModeCollection::ComponentModeCollection(ViewportEditorModeTrackerInterface* viewportEditorModeTracker) + : m_viewportEditorModeTracker(viewportEditorModeTracker) + { + } + void ComponentModeCollection::AddComponentMode( const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid componentType, const ComponentModeFactoryFunction& componentModeBuilder) @@ -209,6 +215,11 @@ namespace AzToolsFramework GetEntityContextId(), &EditorComponentModeNotifications::EnteredComponentMode, m_activeComponentTypes); + // this call to activate the component mode editor state should eventually replace the bus call in + // ComponentModeCollection::BeginComponentMode() to EditorComponentModeNotifications::EnteredComponentMode + // such that all of the notifications for activating/deactivating the different editor modes are in a central location + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); + // enable actions for the first/primary ComponentMode // note: if multiple ComponentModes are activated at the same time, actions // are not available together, the 'active' mode will bind its actions one at a time @@ -282,6 +293,10 @@ namespace AzToolsFramework &EditorComponentModeNotifications::LeftComponentMode, m_activeComponentTypes); + // this call to deactivate the component mode editor state should eventually replace the bus call in + // ComponentModeCollection::EndComponentMode() to EditorComponentModeNotifications::LeftComponentMode + // such that all of the notifications for activating/deactivating the different editor modes are in a central location + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); // clear stored modes and builders for this ComponentMode // TLDR: avoid 'use after free' error diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h index 7dd97dc0c9..9e299d2323 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h @@ -15,6 +15,7 @@ namespace AzToolsFramework { class EditorMetricsEventsBusTraits; + class ViewportEditorModeTrackerInterface; namespace ComponentModeFramework { @@ -25,7 +26,7 @@ namespace AzToolsFramework AZ_CLASS_ALLOCATOR_DECL /// @cond - ComponentModeCollection() = default; + explicit ComponentModeCollection(ViewportEditorModeTrackerInterface* viewportEditorModeTracker); ~ComponentModeCollection() = default; ComponentModeCollection(const ComponentModeCollection&) = delete; ComponentModeCollection& operator=(const ComponentModeCollection&) = delete; @@ -101,6 +102,7 @@ namespace AzToolsFramework size_t m_selectedComponentModeIndex = 0; ///< Index into the array of active ComponentModes, current index is 'selected' ComponentMode. bool m_adding = false; ///< Are we currently adding individual ComponentModes to the Editor wide ComponentMode. bool m_componentMode = false; ///< Editor (global) ComponentMode flag - is ComponentMode active or not. + ViewportEditorModeTrackerInterface* m_viewportEditorModeTracker = nullptr; //!< Tracker for activating/deactivating viewport editor modes. }; } // namespace ComponentModeFramework } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityInterface.h new file mode 100644 index 0000000000..45da3a9d8f --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityInterface.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzToolsFramework +{ + //! Outcome object that returns an error message in case of failure to allow caller to handle internal errors. + using ContainerEntityOperationResult = AZ::Outcome; + + //! ContainerEntityInterface + //! An entity registered as Container is just like a regular entity when open. If its state is changed + //! to closed, all descendants of the entity will be treated as part of the entity itself. Selecting any + //! descendant will result in the container being selected, and descendants will be hidden until the + //! container is opened. + class ContainerEntityInterface + { + public: + AZ_RTTI(ContainerEntityInterface, "{0A877C3A-726C-4FD2-BAFE-A2B9F1DE78E4}"); + + //! Registers the entity as a container. The container will be closed by default. + //! @param entityId The entityId that will be registered as a container. + virtual ContainerEntityOperationResult RegisterEntityAsContainer(AZ::EntityId entityId) = 0; + + //! Unregisters the entity as a container. + //! The system will retain the closed state in case the entity is registered again later, but + //! if queried the entity will no longer behave as a container. + //! @param entityId The entityId that will be unregistered as a container. + virtual ContainerEntityOperationResult UnregisterEntityAsContainer(AZ::EntityId entityId) = 0; + + //! Returns whether the entity id provided is registered as a container. + virtual bool IsContainer(AZ::EntityId entityId) const = 0; + + //! Sets the open state of the container entity provided. + //! @param entityId The entityId whose open state will be set. + //! @param open True if the container should be opened, false if it should be closed. + //! @return An error message if the operation was invalid, success otherwise. + virtual ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) = 0; + + //! If the entity id provided is registered as a container, it returns whether it's open. + //! @note the default value for non-containers is true, so this function can be called without + //! verifying whether the entityId is registered as a container beforehand, since the container's + //! open behavior is exactly the same as the one of a regular entity. + //! @return False if the entityId is registered as a container, and its state is closed. True otherwise. + virtual bool IsContainerOpen(AZ::EntityId entityId) const = 0; + + //! Detects if one of the ancestors of entityId is a closed container entity. + //! @return The highest closed entity container id if any, or entityId otherwise. + virtual AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const = 0; + + }; + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h new file mode 100644 index 0000000000..95608feefb --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +namespace AzToolsFramework +{ + //! Used to notify changes of state for Container Entities. + class ContainerEntityNotifications + : public AZ::EBusTraits + { + public: + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; + using BusIdType = AzFramework::EntityContextId; + ////////////////////////////////////////////////////////////////////////// + + //! Triggered when a container entity status changes. + //! @param entityId The entity whose status has changed. + //! @param open The open state the container was changed to. + virtual void OnContainerEntityStatusChanged([[maybe_unused]] AZ::EntityId entityId, [[maybe_unused]] bool open) {} + + protected: + ~ContainerEntityNotifications() = default; + }; + + using ContainerEntityNotificationBus = AZ::EBus; + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.cpp new file mode 100644 index 0000000000..0ea2eeb5f6 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include + +namespace AzToolsFramework +{ + void ContainerEntitySystemComponent::Activate() + { + AZ::Interface::Register(this); + } + + void ContainerEntitySystemComponent::Deactivate() + { + AZ::Interface::Unregister(this); + } + + void ContainerEntitySystemComponent::Reflect([[maybe_unused]] AZ::ReflectContext* context) + { + } + + void ContainerEntitySystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("ContainerEntityService")); + } + + ContainerEntityOperationResult ContainerEntitySystemComponent::RegisterEntityAsContainer(AZ::EntityId entityId) + { + if (IsContainer(entityId)) + { + return AZ::Failure(AZStd::string( + "ContainerEntitySystemComponent error - trying to register entity as container twice.")); + } + + m_containers.insert(entityId); + + return AZ::Success(); + } + + ContainerEntityOperationResult ContainerEntitySystemComponent::UnregisterEntityAsContainer(AZ::EntityId entityId) + { + if (!IsContainer(entityId)) + { + return AZ::Failure(AZStd::string( + "ContainerEntitySystemComponent error - trying to unregister entity that is not a container.")); + } + + m_containers.erase(entityId); + + return AZ::Success(); + } + + bool ContainerEntitySystemComponent::IsContainer(AZ::EntityId entityId) const + { + return m_containers.contains(entityId); + } + + ContainerEntityOperationResult ContainerEntitySystemComponent::SetContainerOpenState(AZ::EntityId entityId, bool open) + { + if (!IsContainer(entityId)) + { + return AZ::Failure(AZStd::string( + "ContainerEntitySystemComponent error - cannot set open state of entity that was not registered as container.")); + } + + if(open) + { + m_openContainers.insert(entityId); + } + else + { + m_openContainers.erase(entityId); + } + + ContainerEntityNotificationBus::Broadcast(&ContainerEntityNotificationBus::Events::OnContainerEntityStatusChanged, entityId, open); + + return AZ::Success(); + } + + bool ContainerEntitySystemComponent::IsContainerOpen(AZ::EntityId entityId) const + { + // If the entity is not a container, it should behave as open. + if(!m_containers.contains(entityId)) + { + return true; + } + + // If the entity is a container, return its state. + return m_openContainers.contains(entityId); + } + + AZ::EntityId ContainerEntitySystemComponent::FindHighestSelectableEntity(AZ::EntityId entityId) const + { + AZ::EntityId highestSelectableEntityId = entityId; + + // Go up the hierarchy until you hit the root + while (entityId.IsValid()) + { + if (!IsContainerOpen(entityId)) + { + // If one of the ancestors is a container and it's closed, keep track of its id. + // We only return of the higher closed container in the hierarchy. + highestSelectableEntityId = entityId; + } + + AZ::TransformBus::EventResult(entityId, entityId, &AZ::TransformBus::Events::GetParentId); + } + + return highestSelectableEntityId; + } + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.h new file mode 100644 index 0000000000..18c0fb70c6 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +namespace AzToolsFramework +{ + //! System Component to track Container Entity registration and open state. + //! An entity registered as Container is just like a regular entity when open. If its state is changed + //! to closed, all descendants of the entity will be treated as part of the entity itself. Selecting any + //! descendant will result in the container being selected, and descendants will be hidden until the + //! container is opened. + class ContainerEntitySystemComponent final + : public AZ::Component + , private ContainerEntityInterface + { + public: + AZ_COMPONENT(ContainerEntitySystemComponent, "{74349759-B36B-44A6-B89F-F45D7111DD11}"); + + ContainerEntitySystemComponent() = default; + virtual ~ContainerEntitySystemComponent() = default; + + // AZ::Component overrides ... + void Activate() override; + void Deactivate() override; + + static void Reflect(AZ::ReflectContext* context); + + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); + + // ContainerEntityInterface overrides ... + ContainerEntityOperationResult RegisterEntityAsContainer(AZ::EntityId entityId) override; + ContainerEntityOperationResult UnregisterEntityAsContainer(AZ::EntityId entityId) override; + bool IsContainer(AZ::EntityId entityId) const override; + ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) override; + bool IsContainerOpen(AZ::EntityId entityId) const override; + AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const override; + + private: + AZStd::unordered_set m_containers; //!< All entities in this set are containers. + AZStd::unordered_set m_openContainers; //!< All entities in this set are open containers. + }; + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h index 988963eaca..3ba826804d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h @@ -39,7 +39,7 @@ namespace AzToolsFramework // the TraceContextLogFormatter. // // Usage example: - // const char* gameFolder = m_context.pRC->GetSystemEnvironment()->pFileIO->GetAlias("@devassets@"); + // const char* gameFolder = m_context.pRC->GetSystemEnvironment()->pFileIO->GetAlias("@projectroot@"); // AZ_TraceContext("Game folder", gameFolder); // // for (int i=0; i #include #include +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EditorEntityModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EditorEntityModel.cpp index 8d96cc42fe..ce1bf84db0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EditorEntityModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EditorEntityModel.cpp @@ -381,12 +381,22 @@ namespace AzToolsFramework return; } - //orphan any children that remain attached to the entity - auto children = entityInfo.GetChildren(); - for (auto childId : children) - { - ReparentChild(childId, AZ::EntityId(), entityId); - m_entityOrphanTable[entityId].insert(childId); + bool isPrefabSystemEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); + + // For slices, orphan any children that remain attached to the entity + // For prefabs, this is an unneeded operation because the prefab system handles the orphans + // and the extra reparenting operation can be problematic for consumers subscribed to entity + // events, such as the entity outliner. + if (!isPrefabSystemEnabled) + { + auto children = entityInfo.GetChildren(); + for (auto childId : children) + { + ReparentChild(childId, AZ::EntityId(), entityId); + m_entityOrphanTable[entityId].insert(childId); + } } m_savedOrderInfo[entityId] = AZStd::make_pair(entityInfo.GetParent(), entityInfo.GetIndexForSorting()); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.cpp new file mode 100644 index 0000000000..7fb998f012 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.cpp @@ -0,0 +1,351 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + void ComponentDetails::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Field("TypeInfo", &ComponentDetails::m_typeInfo) + ->Field("BaseClasses", &ComponentDetails::m_baseClasses); + + serializeContext->RegisterGenericType>(); + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class() + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "entity") + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Property("TypeInfo", BehaviorValueProperty(&ComponentDetails::m_typeInfo)) + ->Property("BaseClasses", BehaviorValueProperty(&ComponentDetails::m_baseClasses)) + ->Method("__repr__", [](const ComponentDetails& obj) + { + std::ostringstream result; + bool first = true; + + for (const auto& baseClass : obj.m_baseClasses) + { + if (!first) + { + result << ", "; + } + + first = false; + result << baseClass.c_str(); + } + + return AZStd::string::format("%s, Base Classes: <%s>", obj.m_typeInfo.c_str(), result.str().c_str()); + }) + ->Attribute(AZ::Script::Attributes::Operator, AZ::Script::Attributes::OperatorType::ToString); + } + } + + AZ::EntityId EntityUtilityComponent::CreateEditorReadyEntity(const AZStd::string& entityName) + { + auto* newEntity = m_entityContext->CreateEntity(entityName.c_str()); + + if (!newEntity) + { + AZ_Error("EditorEntityUtility", false, "Failed to create new entity %s", entityName.c_str()); + return AZ::EntityId(); + } + + AzToolsFramework::EditorEntityContextRequestBus::Broadcast( + &AzToolsFramework::EditorEntityContextRequestBus::Events::AddRequiredComponents, *newEntity); + + newEntity->Init(); + auto newEntityId = newEntity->GetId(); + + m_createdEntities.emplace_back(newEntityId); + + return newEntityId; + } + + AZ::TypeId GetComponentTypeIdFromName(const AZStd::string& typeName) + { + // Try to create a TypeId first. We won't show any warnings if this fails as the input might be a class name instead + AZ::TypeId typeId = AZ::TypeId::CreateStringPermissive(typeName.data()); + + // If the typeId is null, try a lookup by class name + if (typeId.IsNull()) + { + AZ::SerializeContext* serializeContext = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + + auto typeNameCrc = AZ::Crc32(typeName.data()); + auto typeUuidList = serializeContext->FindClassId(typeNameCrc); + + // TypeId is invalid or class name is invalid + if (typeUuidList.empty()) + { + AZ_Error("EntityUtilityComponent", false, "Provided type %s is either an invalid TypeId or does not match any class names", typeName.c_str()); + return AZ::TypeId::CreateNull(); + } + + typeId = typeUuidList[0]; + } + + return typeId; + } + + AZ::Component* FindComponentHelper(AZ::EntityId entityId, const AZ::TypeId& typeId, AZ::ComponentId componentId, bool createComponent = false) + { + AZ::Entity* entity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationBus::Events::FindEntity, entityId); + + if (!entity) + { + AZ_Error("EntityUtilityComponent", false, "Invalid entityId %s", entityId.ToString().c_str()); + return nullptr; + } + + AZ::Component* component = nullptr; + if (componentId != AZ::InvalidComponentId) + { + component = entity->FindComponent(componentId); + } + else + { + component = entity->FindComponent(typeId); + } + + if (!component && createComponent) + { + component = entity->CreateComponent(typeId); + } + + if (!component) + { + AZ_Error( + "EntityUtilityComponent", false, "Failed to find component (%s) on entity %s (%s)", + componentId != AZ::InvalidComponentId ? AZStd::to_string(componentId).c_str() + : typeId.ToString().c_str(), + entityId.ToString().c_str(), + entity->GetName().c_str()); + return nullptr; + } + + return component; + } + + AzFramework::BehaviorComponentId EntityUtilityComponent::GetOrAddComponentByTypeName(AZ::EntityId entityId, const AZStd::string& typeName) + { + AZ::TypeId typeId = GetComponentTypeIdFromName(typeName); + + if (typeId.IsNull()) + { + return AzFramework::BehaviorComponentId(AZ::InvalidComponentId); + } + + AZ::Component* component = FindComponentHelper(entityId, typeId, AZ::InvalidComponentId, true); + + return component ? AzFramework::BehaviorComponentId(component->GetId()) : + AzFramework::BehaviorComponentId(AZ::InvalidComponentId); + } + + bool EntityUtilityComponent::UpdateComponentForEntity(AZ::EntityId entityId, AzFramework::BehaviorComponentId componentId, const AZStd::string& json) + { + if (!componentId.IsValid()) + { + AZ_Error("EntityUtilityComponent", false, "Invalid componentId passed to UpdateComponentForEntity"); + return false; + } + + AZ::Component* component = FindComponentHelper(entityId, AZ::TypeId::CreateNull(), componentId); + + if (!component) + { + return false; + } + + using namespace AZ::JsonSerializationResult; + + AZ::JsonDeserializerSettings settings = AZ::JsonDeserializerSettings{}; + settings.m_reporting = []([[maybe_unused]] AZStd::string_view message, ResultCode result, AZStd::string_view) -> auto + { + if (result.GetProcessing() == Processing::Halted) + { + AZ_Error("EntityUtilityComponent", false, "JSON %s\n", message.data()); + } + else if (result.GetOutcome() > Outcomes::PartialDefaults) + { + AZ_Warning("EntityUtilityComponent", false, "JSON %s\n", message.data()); + } + return result; + }; + + rapidjson::Document doc; + doc.Parse(json.data(), json.size()); + ResultCode resultCode = AZ::JsonSerialization::Load(*component, doc, settings); + + return resultCode.GetProcessing() != Processing::Halted; + } + + AZStd::string EntityUtilityComponent::GetComponentDefaultJson(const AZStd::string& typeName) + { + AZ::TypeId typeId = GetComponentTypeIdFromName(typeName); + + if (typeId.IsNull()) + { + // GetComponentTypeIdFromName already does error handling + return ""; + } + + AZ::SerializeContext* serializeContext = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + + const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(typeId); + + if (!classData) + { + AZ_Error("EntityUtilityComponent", false, "Failed to find ClassData for typeId %s (%s)", typeId.ToString().c_str(), typeName.c_str()); + return ""; + } + + void* component = classData->m_factory->Create("Component"); + rapidjson::Document document; + AZ::JsonSerializerSettings settings; + settings.m_keepDefaults = true; + + auto resultCode = AZ::JsonSerialization::Store(document, document.GetAllocator(), component, nullptr, typeId, settings); + + // Clean up the allocated component ASAP, we don't need it anymore + classData->m_factory->Destroy(component); + + if (resultCode.GetProcessing() == AZ::JsonSerializationResult::Processing::Halted) + { + AZ_Error("EntityUtilityComponent", false, "Failed to serialize component to json (%s): %s", + typeName.c_str(), resultCode.ToString(typeName).c_str()) + return ""; + } + + AZStd::string jsonString; + AZ::Outcome outcome = AZ::JsonSerializationUtils::WriteJsonString(document, jsonString); + + if (!outcome.IsSuccess()) + { + AZ_Error("EntityUtilityComponent", false, "Failed to write component json to string: %s", outcome.GetError().c_str()); + return ""; + } + + return jsonString; + } + + AZStd::vector EntityUtilityComponent::FindMatchingComponents(const AZStd::string& searchTerm) + { + AZ::SerializeContext* serializeContext = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + + if (m_typeInfo.empty()) + { + serializeContext->EnumerateDerived( + [this, serializeContext](const AZ::SerializeContext::ClassData* classData, const AZ::Uuid& /*typeId*/) + { + auto& typeInfo = m_typeInfo.emplace_back(classData->m_typeId, classData->m_name, AZStd::vector{}); + + serializeContext->EnumerateBase( + [&typeInfo](const AZ::SerializeContext::ClassData* classData, const AZ::Uuid&) + { + if (classData) + { + AZStd::get<2>(typeInfo).emplace_back(classData->m_name); + } + return true; + }, + classData->m_typeId); + + return true; + }); + } + + AZStd::vector matches; + + for (const auto& [typeId, typeName, baseClasses] : m_typeInfo) + { + if (AZStd::wildcard_match(searchTerm, typeName)) + { + ComponentDetails details; + details.m_typeInfo = AZStd::string::format("%s %s", typeId.ToString().c_str(), typeName.c_str()); + details.m_baseClasses = baseClasses; + + matches.emplace_back(AZStd::move(details)); + } + } + + return matches; + } + + void EntityUtilityComponent::ResetEntityContext() + { + for (AZ::EntityId entityId : m_createdEntities) + { + m_entityContext->DestroyEntityById(entityId); + } + + m_createdEntities.clear(); + m_entityContext->ResetContext(); + } + + void EntityUtilityComponent::Reflect(AZ::ReflectContext* context) + { + ComponentDetails::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class(); + } + + if (auto* behaviorContext = azrtti_cast(context)) + { + behaviorContext->ConstantProperty("InvalidComponentId", BehaviorConstant(AZ::InvalidComponentId)) + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Category, "Entity") + ->Attribute(AZ::Script::Attributes::Module, "entity"); + + behaviorContext->EBus("EntityUtilityBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Attribute(AZ::Script::Attributes::Category, "Entity") + ->Attribute(AZ::Script::Attributes::Module, "entity") + ->Event("CreateEditorReadyEntity", &EntityUtilityBus::Events::CreateEditorReadyEntity) + ->Event("GetOrAddComponentByTypeName", &EntityUtilityBus::Events::GetOrAddComponentByTypeName) + ->Event("UpdateComponentForEntity", &EntityUtilityBus::Events::UpdateComponentForEntity) + ->Event("FindMatchingComponents", &EntityUtilityBus::Events::FindMatchingComponents) + ->Event("GetComponentDefaultJson", &EntityUtilityBus::Events::GetComponentDefaultJson) + ; + } + } + + void EntityUtilityComponent::Activate() + { + m_entityContext = AZStd::make_unique(UtilityEntityContextId); + m_entityContext->InitContext(); + EntityUtilityBus::Handler::BusConnect(); + } + + void EntityUtilityComponent::Deactivate() + { + EntityUtilityBus::Handler::BusDisconnect(); + m_entityContext = nullptr; + } +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.h new file mode 100644 index 0000000000..af7c353163 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + struct ComponentDetails + { + AZ_TYPE_INFO(AzToolsFramework::ComponentDetails, "{107D8379-4AD4-4547-BEE1-184B120F23E9}"); + + static void Reflect(AZ::ReflectContext* context); + + AZStd::string m_typeInfo; + AZStd::vector m_baseClasses; + }; + + // This ebus is intended to provide behavior-context friendly APIs to create and manage entities + struct EntityUtilityTraits : AZ::EBusTraits + { + AZ_RTTI(AzToolsFramework::EntityUtilityTraits, "{A6305CAE-C825-43F9-A44D-E503910912AF}"); + + virtual ~EntityUtilityTraits() = default; + + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + + // Creates an entity with the default editor components attached and initializes the entity + virtual AZ::EntityId CreateEditorReadyEntity(const AZStd::string& entityName) = 0; + + virtual AzFramework::BehaviorComponentId GetOrAddComponentByTypeName(AZ::EntityId entity, const AZStd::string& typeName) = 0; + + virtual bool UpdateComponentForEntity(AZ::EntityId entity, AzFramework::BehaviorComponentId component, const AZStd::string& json) = 0; + + // Gets a JSON string containing describing the default serialization state of the specified component + virtual AZStd::string GetComponentDefaultJson(const AZStd::string& typeName) = 0; + + // Returns a list of matching component type names. Supports wildcard search terms + virtual AZStd::vector FindMatchingComponents(const AZStd::string& searchTerm) = 0; + + virtual void ResetEntityContext() = 0; + }; + + using EntityUtilityBus = AZ::EBus; + + struct EntityUtilityComponent : AZ::Component + , EntityUtilityBus::Handler + { + inline const static AZ::Uuid UtilityEntityContextId = AZ::Uuid("{9C277B88-E79E-4F8A-BAFF-A4C175BD565F}"); + + AZ_COMPONENT(EntityUtilityComponent, "{47205907-A0EA-4FFF-A620-04D20C04A379}"); + + AZ::EntityId CreateEditorReadyEntity(const AZStd::string& entityName) override; + AzFramework::BehaviorComponentId GetOrAddComponentByTypeName(AZ::EntityId entity, const AZStd::string& typeName) override; + bool UpdateComponentForEntity(AZ::EntityId entity, AzFramework::BehaviorComponentId component, const AZStd::string& json) override; + AZStd::string GetComponentDefaultJson(const AZStd::string& typeName) override; + AZStd::vector FindMatchingComponents(const AZStd::string& searchTerm) override; + void ResetEntityContext() override; + + static void Reflect(AZ::ReflectContext* context); + + protected: + void Activate() override; + void Deactivate() override; + + // Our own entity context. This API is intended mostly for use in Asset Builders where there is no editor context + // Additionally, an entity context is needed when using the Behavior Entity class + AZStd::unique_ptr m_entityContext; + + // TypeId, TypeName, Vector + AZStd::vector>> m_typeInfo; + + // Keep track of the entities we create so they can be reset + AZStd::vector m_createdEntities; + }; +}; // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipInterface.h index feb2fc12bf..3bd6e656ed 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipInterface.h @@ -56,5 +56,7 @@ namespace AzToolsFramework virtual void StopPlayInEditor() = 0; virtual void CreateNewLevelPrefab(AZStd::string_view filename, const AZStd::string& templateFilename) = 0; + + virtual bool IsRootPrefabAssigned() const = 0; }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp index 0f2b896b40..7db507e751 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp @@ -18,8 +18,9 @@ #include #include #include -#include #include +#include +#include #include #include #include @@ -79,6 +80,8 @@ namespace AzToolsFramework void PrefabEditorEntityOwnershipService::Reset() { + m_isRootPrefabAssigned = false; + if (m_rootInstance) { AzToolsFramework::ToolsApplicationRequestBus::Broadcast( @@ -203,6 +206,7 @@ namespace AzToolsFramework m_rootInstance->SetTemplateSourcePath(m_loaderInterface->GenerateRelativePath(filename)); m_rootInstance->SetContainerEntityName("Level"); m_prefabSystemComponent->PropagateTemplateChanges(templateId); + m_isRootPrefabAssigned = true; return true; } @@ -302,23 +306,30 @@ namespace AzToolsFramework } m_prefabSystemComponent->PropagateTemplateChanges(templateId); + m_isRootPrefabAssigned = true; + } + + bool PrefabEditorEntityOwnershipService::IsRootPrefabAssigned() const + { + return m_isRootPrefabAssigned; } Prefab::InstanceOptionalReference PrefabEditorEntityOwnershipService::CreatePrefab( const AZStd::vector& entities, AZStd::vector>&& nestedPrefabInstances, AZ::IO::PathView filePath, Prefab::InstanceOptionalReference instanceToParentUnder) { - AZStd::unique_ptr createdPrefabInstance = - m_prefabSystemComponent->CreatePrefab(entities, AZStd::move(nestedPrefabInstances), filePath, nullptr, false); + if (!instanceToParentUnder) + { + instanceToParentUnder = *m_rootInstance; + } + + AZStd::unique_ptr createdPrefabInstance = m_prefabSystemComponent->CreatePrefab( + entities, AZStd::move(nestedPrefabInstances), filePath, nullptr, instanceToParentUnder, false); if (createdPrefabInstance) { - if (!instanceToParentUnder) - { - instanceToParentUnder = *m_rootInstance; - } - - Prefab::Instance& addedInstance = instanceToParentUnder->get().AddInstance(AZStd::move(createdPrefabInstance)); + Prefab::Instance& addedInstance = instanceToParentUnder->get().AddInstance( + AZStd::move(createdPrefabInstance)); AZ::Entity* containerEntity = addedInstance.m_containerEntity.get(); containerEntity->AddComponent(aznew Prefab::EditorPrefabComponent()); HandleEntitiesAdded({containerEntity}); @@ -332,16 +343,18 @@ namespace AzToolsFramework Prefab::InstanceOptionalReference PrefabEditorEntityOwnershipService::InstantiatePrefab( AZ::IO::PathView filePath, Prefab::InstanceOptionalReference instanceToParentUnder) { - AZStd::unique_ptr createdPrefabInstance = m_prefabSystemComponent->InstantiatePrefab(filePath); - - if (createdPrefabInstance) + if (!instanceToParentUnder) { - if (!instanceToParentUnder) - { - instanceToParentUnder = *m_rootInstance; - } + instanceToParentUnder = *m_rootInstance; + } - Prefab::Instance& addedInstance = instanceToParentUnder->get().AddInstance(AZStd::move(createdPrefabInstance)); + AZStd::unique_ptr instantiatedPrefabInstance = + m_prefabSystemComponent->InstantiatePrefab(filePath, instanceToParentUnder); + + if (instantiatedPrefabInstance) + { + Prefab::Instance& addedInstance = instanceToParentUnder->get().AddInstance( + AZStd::move(instantiatedPrefabInstance)); HandleEntitiesAdded({addedInstance.m_containerEntity.get()}); return addedInstance; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h index a98fce8059..a172e9550c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h @@ -167,6 +167,7 @@ namespace AzToolsFramework void StopPlayInEditor() override; void CreateNewLevelPrefab(AZStd::string_view filename, const AZStd::string& templateFilename) override; + bool IsRootPrefabAssigned() const override; protected: @@ -215,5 +216,6 @@ namespace AzToolsFramework Prefab::PrefabLoaderInterface* m_loaderInterface; AzFramework::EntityContextId m_entityContextId; AZ::SerializeContext m_serializeContext; + bool m_isRootPrefabAssigned = false; }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h index a4b90f95b7..5455e8d773 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h @@ -8,9 +8,13 @@ #pragma once +#include #include +#include #include +#include + namespace AzToolsFramework { //! FocusModeInterface @@ -26,11 +30,11 @@ namespace AzToolsFramework virtual void SetFocusRoot(AZ::EntityId entityId) = 0; //! Clears the Editor focus, allowing the user to select the whole level again. - virtual void ClearFocusRoot() = 0; + virtual void ClearFocusRoot(AzFramework::EntityContextId entityContextId) = 0; //! Returns the entity id of the root of the current Editor focus. //! @return The entity id of the root of the Editor focus, or an invalid entity id if no focus is set. - virtual AZ::EntityId GetFocusRoot() = 0; + virtual AZ::EntityId GetFocusRoot(AzFramework::EntityContextId entityContextId) = 0; //! Returns whether the entity id provided is part of the focused sub-tree. virtual bool IsInFocusSubTree(AZ::EntityId entityId) const = 0; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeNotificationBus.h new file mode 100644 index 0000000000..ab8629ac85 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeNotificationBus.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +namespace AzToolsFramework +{ + //! Used to notify when the editor focus changes. + class FocusModeNotifications + : public AZ::EBusTraits + { + public: + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; + using BusIdType = AzFramework::EntityContextId; + ////////////////////////////////////////////////////////////////////////// + + //! Triggered when the editor focus is changed to a different entity. + //! @param entityId The entity the focus has been moved to. + virtual void OnEditorFocusChanged(AZ::EntityId entityId) = 0; + + protected: + ~FocusModeNotifications() = default; + }; + + using FocusModeNotificationBus = AZ::EBus; + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp index e1c04fcb93..af518afd66 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp @@ -9,7 +9,9 @@ #include #include +#include #include +#include namespace AzToolsFramework { @@ -64,17 +66,34 @@ namespace AzToolsFramework void FocusModeSystemComponent::SetFocusRoot(AZ::EntityId entityId) { + if (m_focusRoot == entityId) + { + return; + } + m_focusRoot = entityId; + FocusModeNotificationBus::Broadcast(&FocusModeNotifications::OnEditorFocusChanged, m_focusRoot); - // TODO - If m_focusRoot != AZ::EntityId(), activate focus mode via ViewportEditorModeTrackerInterface; else, deactivate focus mode + if (auto tracker = AZ::Interface::Get(); + tracker != nullptr) + { + if (!m_focusRoot.IsValid() && entityId.IsValid()) + { + tracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Focus); + } + else if (m_focusRoot.IsValid() && !entityId.IsValid()) + { + tracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Focus); + } + } } - void FocusModeSystemComponent::ClearFocusRoot() + void FocusModeSystemComponent::ClearFocusRoot([[maybe_unused]] AzFramework::EntityContextId entityContextId) { SetFocusRoot(AZ::EntityId()); } - AZ::EntityId FocusModeSystemComponent::GetFocusRoot() + AZ::EntityId FocusModeSystemComponent::GetFocusRoot([[maybe_unused]] AzFramework::EntityContextId entityContextId) { return m_focusRoot; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h index 27ddebe1ed..dabaa6aaf4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h @@ -40,8 +40,8 @@ namespace AzToolsFramework // FocusModeInterface overrides ... void SetFocusRoot(AZ::EntityId entityId) override; - void ClearFocusRoot() override; - AZ::EntityId GetFocusRoot() override; + void ClearFocusRoot(AzFramework::EntityContextId entityContextId) override; + AZ::EntityId GetFocusRoot(AzFramework::EntityContextId entityContextId) override; bool IsInFocusSubTree(AZ::EntityId entityId) const override; private: diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Logger/TraceLogger.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Logger/TraceLogger.cpp index e81aaed6c9..ce73826388 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Logger/TraceLogger.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Logger/TraceLogger.cpp @@ -66,7 +66,7 @@ namespace AzToolsFramework StringFunc::Path::Join(resolveBuffer, "log", logDirectory); fileIO->SetAlias("@log@", logDirectory.c_str()); - fileIO->CreatePath("@root@"); + fileIO->CreatePath("@products@"); fileIO->CreatePath("@user@"); fileIO->CreatePath("@log@"); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h index a2b004763b..06e9c82e55 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp index 1867f346ec..d8c43ace9e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp @@ -71,6 +71,7 @@ namespace AzToolsFramework } m_uniformScaleManipulator->SetVisualOrientationOverride(QuaternionFromTransformNoScaling(localTransform)); + m_uniformScaleManipulator->SetLocalPosition(localTransform.GetTranslation()); m_uniformScaleManipulator->SetLocalOrientation(AZ::Quaternion::CreateIdentity()); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp index 049cab4a13..0efe310250 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp @@ -13,14 +13,14 @@ namespace AzToolsFramework { - static const float s_surfaceManipulatorTransparency = 0.75f; - static const float s_axisLength = 2.0f; - static const float s_surfaceManipulatorRadius = 0.1f; + static const float SurfaceManipulatorTransparency = 0.75f; + static const float LinearManipulatorAxisLength = 2.0f; + static const float SurfaceManipulatorRadius = 0.1f; - static const AZ::Color s_xAxisColor = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); - static const AZ::Color s_yAxisColor = AZ::Color(0.0f, 1.0f, 0.0f, 1.0f); - static const AZ::Color s_zAxisColor = AZ::Color(0.0f, 0.0f, 1.0f, 1.0f); - static const AZ::Color s_surfaceManipulatorColor = AZ::Color(1.0f, 1.0f, 0.0f, 0.5f); + static const AZ::Color LinearManipulatorXAxisColor = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); + static const AZ::Color LinearManipulatorYAxisColor = AZ::Color(0.0f, 1.0f, 0.0f, 1.0f); + static const AZ::Color LinearManipulatorZAxisColor = AZ::Color(0.0f, 0.0f, 1.0f, 1.0f); + static const AZ::Color SurfaceManipulatorColor = AZ::Color(1.0f, 1.0f, 0.0f, 0.5f); TranslationManipulators::TranslationManipulators( const Dimensions dimensions, const AZ::Transform& worldFromLocal, const AZ::Vector3& nonUniformScale) @@ -291,7 +291,7 @@ namespace AzToolsFramework { const AZ::Color color[2] = { defaultColor, - Vector3ToVector4(BaseManipulator::s_defaultMouseOverColor.GetAsVector3(), s_surfaceManipulatorTransparency) + Vector3ToVector4(BaseManipulator::s_defaultMouseOverColor.GetAsVector3(), SurfaceManipulatorTransparency) }; return color[mouseOver]; @@ -325,15 +325,16 @@ namespace AzToolsFramework void ConfigureTranslationManipulatorAppearance3d(TranslationManipulators* translationManipulators) { translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); - translationManipulators->ConfigurePlanarView(s_xAxisColor, s_yAxisColor, s_zAxisColor); - translationManipulators->ConfigureLinearView(s_axisLength, s_xAxisColor, s_yAxisColor, s_zAxisColor); - translationManipulators->ConfigureSurfaceView(s_surfaceManipulatorRadius, s_surfaceManipulatorColor); + translationManipulators->ConfigurePlanarView(LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); + translationManipulators->ConfigureLinearView( + LinearManipulatorAxisLength, LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); + translationManipulators->ConfigureSurfaceView(SurfaceManipulatorRadius, SurfaceManipulatorColor); } void ConfigureTranslationManipulatorAppearance2d(TranslationManipulators* translationManipulators) { translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY()); - translationManipulators->ConfigurePlanarView(s_xAxisColor); - translationManipulators->ConfigureLinearView(s_axisLength, s_xAxisColor, s_yAxisColor); + translationManipulators->ConfigurePlanarView(LinearManipulatorXAxisColor); + translationManipulators->ConfigureLinearView(LinearManipulatorAxisLength, LinearManipulatorXAxisColor, LinearManipulatorYAxisColor); } } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp index 7aa5967a44..d95a704e84 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.h index 75b68c859d..8873787bd3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.h @@ -8,7 +8,6 @@ #pragma once #include -#include namespace AzToolsFramework { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index 54e7f7608c..b5db46d0db 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -28,24 +29,52 @@ namespace AzToolsFramework } Instance::Instance(AZStd::unique_ptr containerEntity) + : Instance(AZStd::move(containerEntity), AZStd::nullopt, GenerateInstanceAlias()) { - m_instanceEntityMapper = AZ::Interface::Get(); + } + + Instance::Instance(InstanceOptionalReference parent) + : Instance(nullptr, parent, GenerateInstanceAlias()) + { + } + + Instance::Instance(InstanceAlias alias) + : Instance(nullptr, AZStd::nullopt, AZStd::move(alias)) + { + } + + Instance::Instance(AZStd::unique_ptr containerEntity, InstanceOptionalReference parent) + : Instance(AZStd::move(containerEntity), parent, GenerateInstanceAlias()) + { + } + Instance::Instance(AZStd::unique_ptr containerEntity, InstanceOptionalReference parent, InstanceAlias alias) + : m_parent(parent.has_value() ? &parent->get() : nullptr) + , m_alias(AZStd::move(alias)) + , m_containerEntity(containerEntity ? AZStd::move(containerEntity) : AZStd::make_unique()) + , m_instanceEntityMapper(AZ::Interface::Get()) + , m_templateInstanceMapper(AZ::Interface::Get()) + { AZ_Assert(m_instanceEntityMapper, "Instance Entity Mapper Interface could not be found. " "It is a requirement for the Prefab Instance class. " "Check that it is being correctly initialized."); - m_templateInstanceMapper = AZ::Interface::Get(); - AZ_Assert(m_templateInstanceMapper, "Template Instance Mapper Interface could not be found. " "It is a requirement for the Prefab Instance class. " "Check that it is being correctly initialized."); - m_alias = GenerateInstanceAlias(); - m_containerEntity = containerEntity ? AZStd::move(containerEntity) - : AZStd::make_unique(); + if (parent) + { + AliasPath absoluteInstancePath = m_parent->GetAbsoluteInstanceAliasPath(); + absoluteInstancePath.Append(m_alias); + absoluteInstancePath.Append(PrefabDomUtils::ContainerEntityName); + + AZ::EntityId newContainerEntityId = InstanceEntityIdMapper::GenerateEntityIdForAliasPath(absoluteInstancePath); + m_containerEntity->SetId(newContainerEntityId); + } + RegisterEntity(m_containerEntity->GetId(), PrefabDomUtils::ContainerEntityName); } @@ -69,12 +98,12 @@ namespace AzToolsFramework } } - const TemplateId& Instance::GetTemplateId() const + TemplateId Instance::GetTemplateId() const { return m_templateId; } - void Instance::SetTemplateId(const TemplateId& templateId) + void Instance::SetTemplateId(TemplateId templateId) { // If we aren't changing the template Id, there's no need to unregister / re-register if (templateId == m_templateId) @@ -295,20 +324,21 @@ namespace AzToolsFramework } Instance& Instance::AddInstance(AZStd::unique_ptr instance) - { - InstanceAlias newInstanceAlias = GenerateInstanceAlias(); - return AddInstance(AZStd::move(instance), newInstanceAlias); - } - - Instance& Instance::AddInstance(AZStd::unique_ptr instance, InstanceAlias newInstanceAlias) { AZ_Assert(instance.get(), "instance argument is nullptr"); + + if (instance->GetInstanceAlias().empty()) + { + instance->m_alias = GenerateInstanceAlias(); + } + AZ_Assert( - m_nestedInstances.find(newInstanceAlias) == m_nestedInstances.end(), + m_nestedInstances.find(instance->GetInstanceAlias()) == m_nestedInstances.end(), "InstanceAlias' unique id collision, this should never happen."); + instance->m_parent = this; - instance->m_alias = newInstanceAlias; - return *(m_nestedInstances[newInstanceAlias] = std::move(instance)); + auto& alias = instance->GetInstanceAlias(); + return *(m_nestedInstances[alias] = AZStd::move(instance)); } void Instance::DetachNestedInstances(const AZStd::function)>& callback) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h index 39d364b4bb..50a39268fe 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h @@ -65,6 +65,9 @@ namespace AzToolsFramework Instance(); explicit Instance(AZStd::unique_ptr containerEntity); + explicit Instance(InstanceOptionalReference parent); + explicit Instance(AZStd::unique_ptr containerEntity, InstanceOptionalReference parent); + explicit Instance(InstanceAlias alias); virtual ~Instance(); Instance(const Instance& rhs) = delete; @@ -72,8 +75,8 @@ namespace AzToolsFramework static void Reflect(AZ::ReflectContext* context); - const TemplateId& GetTemplateId() const; - void SetTemplateId(const TemplateId& templateId); + TemplateId GetTemplateId() const; + void SetTemplateId(TemplateId templateId); const AZ::IO::Path& GetTemplateSourcePath() const; void SetTemplateSourcePath(AZ::IO::PathView sourcePath); @@ -97,7 +100,6 @@ namespace AzToolsFramework void Reset(); Instance& AddInstance(AZStd::unique_ptr instance); - Instance& AddInstance(AZStd::unique_ptr instance, InstanceAlias instanceAlias); AZStd::unique_ptr DetachNestedInstance(const InstanceAlias& instanceAlias); void DetachNestedInstances(const AZStd::function)>& callback); @@ -184,6 +186,8 @@ namespace AzToolsFramework private: static constexpr const char s_aliasPathSeparator = '/'; + Instance(AZStd::unique_ptr containerEntity, InstanceOptionalReference parent, InstanceAlias alias); + void ClearEntities(); void RemoveEntities(const AZStd::function&)>& filter); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplateInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplateInterface.h index b944ef159a..a8c717d6b0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplateInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplateInterface.h @@ -46,10 +46,11 @@ namespace AzToolsFramework //! Updates the template links (updating instances) for the given template and triggers propagation on its instances. //! @param providedPatch The patch to apply to the template. //! @param templateId The id of the template to update. + //! @param immediate An optional flag whether to apply the patch immediately (needed for Undo/Redos) or wait until next system tick. //! @param instanceToExclude An optional reference to an instance of the template being updated that should not be refreshes as part of propagation. //! Defaults to nullopt, which means that all instances will be refreshed. //! @return True if the template was patched correctly, false if the operation failed. - virtual bool PatchTemplate(PrefabDomValue& providedPatch, TemplateId templateId, InstanceOptionalReference instanceToExclude = AZStd::nullopt) = 0; + virtual bool PatchTemplate(PrefabDomValue& providedPatch, TemplateId templateId, bool immediate = false, InstanceOptionalReference instanceToExclude = AZStd::nullopt) = 0; virtual void ApplyPatchesToInstance(const AZ::EntityId& entityId, PrefabDom& patches, const Instance& instanceToAddPatches) = 0; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.cpp index 6b281bcbae..73acb9b8a4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.cpp @@ -156,7 +156,7 @@ namespace AzToolsFramework } } - bool InstanceToTemplatePropagator::PatchTemplate(PrefabDomValue& providedPatch, TemplateId templateId, InstanceOptionalReference instanceToExclude) + bool InstanceToTemplatePropagator::PatchTemplate(PrefabDomValue& providedPatch, TemplateId templateId, bool immediate, InstanceOptionalReference instanceToExclude) { PrefabDom& templateDomReference = m_prefabSystemComponentInterface->FindTemplateDom(templateId); @@ -178,7 +178,7 @@ namespace AzToolsFramework (result.GetOutcome() != AZ::JsonSerializationResult::Outcomes::PartialSkip), "Some of the patches were not successfully applied."); m_prefabSystemComponentInterface->SetTemplateDirtyFlag(templateId, true); - m_prefabSystemComponentInterface->PropagateTemplateChanges(templateId, instanceToExclude); + m_prefabSystemComponentInterface->PropagateTemplateChanges(templateId, immediate, instanceToExclude); return true; } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.h index 75acb410c9..80fe7de8d5 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceToTemplatePropagator.h @@ -33,7 +33,7 @@ namespace AzToolsFramework InstanceOptionalReference GetTopMostInstanceInHierarchy(AZ::EntityId entityId) override; - bool PatchTemplate(PrefabDomValue& providedPatch, TemplateId templateId, InstanceOptionalReference instanceToExclude = AZStd::nullopt) override; + bool PatchTemplate(PrefabDomValue& providedPatch, TemplateId templateId, bool immediate = false, InstanceOptionalReference instanceToExclude = AZStd::nullopt) override; void ApplyPatchesToInstance(const AZ::EntityId& entityId, PrefabDom& patches, const Instance& instanceToAddPatches) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index 9ef74167a6..feea3ce25b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -52,7 +52,7 @@ namespace AzToolsFramework AZ::Interface::Unregister(this); } - void InstanceUpdateExecutor::AddTemplateInstancesToQueue(TemplateId instanceTemplateId, InstanceOptionalReference instanceToExclude) + void InstanceUpdateExecutor::AddTemplateInstancesToQueue(TemplateId instanceTemplateId, bool immediate, InstanceOptionalReference instanceToExclude) { auto findInstancesResult = m_templateInstanceMapperInterface->FindInstancesOwnedByTemplate(instanceTemplateId); @@ -79,6 +79,11 @@ namespace AzToolsFramework m_instancesUpdateQueue.emplace_back(instance); } } + + if (immediate) + { + UpdateTemplateInstancesInQueue(); + } } void InstanceUpdateExecutor::RemoveTemplateInstanceFromQueue(const Instance* instance) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h index ee461eae88..de2b483c4d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h @@ -31,7 +31,7 @@ namespace AzToolsFramework explicit InstanceUpdateExecutor(int instanceCountToUpdateInBatch = 0); - void AddTemplateInstancesToQueue(TemplateId instanceTemplateId, InstanceOptionalReference instanceToExclude = AZStd::nullopt) override; + void AddTemplateInstancesToQueue(TemplateId instanceTemplateId, bool immediate = false, InstanceOptionalReference instanceToExclude = AZStd::nullopt) override; bool UpdateTemplateInstancesInQueue() override; virtual void RemoveTemplateInstanceFromQueue(const Instance* instance) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutorInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutorInterface.h index 8ad032e1d0..3b894efd21 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutorInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutorInterface.h @@ -23,7 +23,7 @@ namespace AzToolsFramework virtual ~InstanceUpdateExecutorInterface() = default; // Add all Instances of Template with given Id into a queue for updating them later. - virtual void AddTemplateInstancesToQueue(TemplateId instanceTemplateId, InstanceOptionalReference instanceToExclude = AZStd::nullopt) = 0; + virtual void AddTemplateInstancesToQueue(TemplateId instanceTemplateId, bool immediate = false, InstanceOptionalReference instanceToExclude = AZStd::nullopt) = 0; // Update Instances in the waiting queue. virtual bool UpdateTemplateInstancesInQueue() = 0; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.cpp index 65c498499d..5c7e5070f0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.cpp @@ -27,7 +27,7 @@ namespace AzToolsFramework } - bool TemplateInstanceMapper::RegisterTemplate(const TemplateId& templateId) + bool TemplateInstanceMapper::RegisterTemplate(TemplateId templateId) { const bool result = m_templateIdToInstancesMap.emplace(templateId, InstanceSet()).second; AZ_Assert(result, @@ -39,7 +39,7 @@ namespace AzToolsFramework return result; } - bool TemplateInstanceMapper::UnregisterTemplate(const TemplateId& templateId) + bool TemplateInstanceMapper::UnregisterTemplate(TemplateId templateId) { const bool result = m_templateIdToInstancesMap.erase(templateId) != 0; AZ_Assert(result, @@ -53,7 +53,7 @@ namespace AzToolsFramework bool TemplateInstanceMapper::RegisterInstanceToTemplate(Instance& instance) { - const TemplateId& templateId = instance.GetTemplateId(); + TemplateId templateId = instance.GetTemplateId(); if (templateId == InvalidTemplateId) { return false; @@ -79,7 +79,7 @@ namespace AzToolsFramework found->second.erase(&instance) != 0; } - InstanceSetConstReference TemplateInstanceMapper::FindInstancesOwnedByTemplate(const TemplateId& templateId) const + InstanceSetConstReference TemplateInstanceMapper::FindInstancesOwnedByTemplate(TemplateId templateId) const { auto found = m_templateIdToInstancesMap.find(templateId); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.h index 307996b381..a2330c30d2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapper.h @@ -26,10 +26,10 @@ namespace AzToolsFramework TemplateInstanceMapper(); ~TemplateInstanceMapper() override; - InstanceSetConstReference FindInstancesOwnedByTemplate(const TemplateId& templateId) const override; + InstanceSetConstReference FindInstancesOwnedByTemplate(TemplateId templateId) const override; - bool RegisterTemplate(const TemplateId& templateId); - bool UnregisterTemplate(const TemplateId& templateId); + bool RegisterTemplate(TemplateId templateId); + bool UnregisterTemplate(TemplateId templateId); protected: bool RegisterInstanceToTemplate(Instance& instance) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapperInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapperInterface.h index 6473d5e937..475b456425 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapperInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/TemplateInstanceMapperInterface.h @@ -24,7 +24,7 @@ namespace AzToolsFramework AZ_RTTI(TemplateInstanceMapperInterface, "{5DCCCDAA-3441-4266-9670-B349386E0129}"); virtual ~TemplateInstanceMapperInterface() = default; - virtual InstanceSetConstReference FindInstancesOwnedByTemplate(const TemplateId& templateId) const = 0; + virtual InstanceSetConstReference FindInstancesOwnedByTemplate(TemplateId templateId) const = 0; protected: // Only the Instance class is allowed to register and unregister Instances. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.cpp index 800a90c622..8efb62d7e8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.cpp @@ -122,12 +122,12 @@ namespace AzToolsFramework !m_instanceName.empty(); } - const TemplateId& Link::GetSourceTemplateId() const + TemplateId Link::GetSourceTemplateId() const { return m_sourceTemplateId; } - const TemplateId& Link::GetTargetTemplateId() const + TemplateId Link::GetTargetTemplateId() const { return m_targetTemplateId; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.h index 00530c4337..aa11262bdf 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Link/Link.h @@ -48,8 +48,8 @@ namespace AzToolsFramework bool IsValid() const; - const TemplateId& GetSourceTemplateId() const; - const TemplateId& GetTargetTemplateId() const; + TemplateId GetSourceTemplateId() const; + TemplateId GetTargetTemplateId() const; LinkId GetId() const; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp index d69d0004cc..9ffc18af5a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp @@ -8,9 +8,12 @@ #include +#include +#include #include #include #include +#include namespace AzToolsFramework::Prefab { @@ -23,12 +26,38 @@ namespace AzToolsFramework::Prefab "Instance Entity Mapper Interface could not be found. " "Check that it is being correctly initialized."); + EditorEntityContextNotificationBus::Handler::BusConnect(); AZ::Interface::Register(this); } PrefabFocusHandler::~PrefabFocusHandler() { AZ::Interface::Unregister(this); + EditorEntityContextNotificationBus::Handler::BusDisconnect(); + } + + void PrefabFocusHandler::Initialize() + { + m_containerEntityInterface = AZ::Interface::Get(); + AZ_Assert( + m_containerEntityInterface, + "Prefab - PrefabFocusHandler - " + "Container Entity Interface could not be found. " + "Check that it is being correctly initialized."); + + m_focusModeInterface = AZ::Interface::Get(); + AZ_Assert( + m_focusModeInterface, + "Prefab - PrefabFocusHandler - " + "Focus Mode Interface could not be found. " + "Check that it is being correctly initialized."); + + m_instanceEntityMapperInterface = AZ::Interface::Get(); + AZ_Assert( + m_instanceEntityMapperInterface, + "Prefab - PrefabFocusHandler - " + "Instance Entity Mapper Interface could not be found. " + "Check that it is being correctly initialized."); } PrefabFocusOperationResult PrefabFocusHandler::FocusOnOwningPrefab(AZ::EntityId entityId) @@ -40,7 +69,7 @@ namespace AzToolsFramework::Prefab PrefabEditorEntityOwnershipInterface* prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); - if(!prefabEditorEntityOwnershipInterface) + if (!prefabEditorEntityOwnershipInterface) { return AZ::Failure(AZStd::string("Could not focus on root prefab instance - internal error " "(PrefabEditorEntityOwnershipInterface unavailable).")); @@ -53,35 +82,86 @@ namespace AzToolsFramework::Prefab focusedInstance = m_instanceEntityMapperInterface->FindOwningInstance(entityId); } + return FocusOnPrefabInstance(focusedInstance); + } + + PrefabFocusOperationResult PrefabFocusHandler::FocusOnPathIndex([[maybe_unused]] AzFramework::EntityContextId entityContextId, int index) + { + if (index < 0 || index >= m_instanceFocusVector.size()) + { + return AZ::Failure(AZStd::string("Prefab Focus Handler: Invalid index on FocusOnPathIndex.")); + } + + InstanceOptionalReference focusedInstance = m_instanceFocusVector[index]; + + return FocusOnPrefabInstance(focusedInstance); + } + + PrefabFocusOperationResult PrefabFocusHandler::FocusOnPrefabInstance(InstanceOptionalReference focusedInstance) + { if (!focusedInstance.has_value()) { - return AZ::Failure(AZStd::string( - "Prefab Focus Handler: Couldn't find owning instance of entityId provided.")); + return AZ::Failure(AZStd::string("Prefab Focus Handler: invalid instance to focus on.")); } - m_focusedInstance = focusedInstance; - m_focusedTemplateId = focusedInstance->get().GetTemplateId(); + if (!m_isInitialized) + { + Initialize(); + } - FocusModeInterface* focusModeInterface = AZ::Interface::Get(); - if (focusModeInterface) + if (!m_focusedInstance.has_value() || &m_focusedInstance->get() != &focusedInstance->get()) { - focusModeInterface->SetFocusRoot(focusedInstance->get().GetContainerEntityId()); + // Close all container entities in the old path + CloseInstanceContainers(m_instanceFocusVector); + + m_focusedInstance = focusedInstance; + m_focusedTemplateId = focusedInstance->get().GetTemplateId(); + + AZ::EntityId containerEntityId; + + if (focusedInstance->get().GetParentInstance() != AZStd::nullopt) + { + containerEntityId = focusedInstance->get().GetContainerEntityId(); + + // Select the container entity + AzToolsFramework::SelectEntity(containerEntityId); + } + else + { + containerEntityId = AZ::EntityId(); + + // Clear the selection + AzToolsFramework::SelectEntities({}); + + } + + // Focus on the descendants of the container entity + m_focusModeInterface->SetFocusRoot(containerEntityId); + + // Refresh path variables + RefreshInstanceFocusList(); + + // Open all container entities in the new path + OpenInstanceContainers(m_instanceFocusVector); + + PrefabFocusNotificationBus::Broadcast(&PrefabFocusNotifications::OnPrefabFocusChanged); } return AZ::Success(); } - TemplateId PrefabFocusHandler::GetFocusedPrefabTemplateId() + TemplateId PrefabFocusHandler::GetFocusedPrefabTemplateId([[maybe_unused]] AzFramework::EntityContextId entityContextId) const { return m_focusedTemplateId; } - InstanceOptionalReference PrefabFocusHandler::GetFocusedPrefabInstance() + InstanceOptionalReference PrefabFocusHandler::GetFocusedPrefabInstance( + [[maybe_unused]] AzFramework::EntityContextId entityContextId) const { return m_focusedInstance; } - bool PrefabFocusHandler::IsOwningPrefabBeingFocused(AZ::EntityId entityId) + bool PrefabFocusHandler::IsOwningPrefabBeingFocused(AZ::EntityId entityId) const { if (!m_focusedInstance.has_value()) { @@ -99,4 +179,71 @@ namespace AzToolsFramework::Prefab return instance.has_value() && (&instance->get() == &m_focusedInstance->get()); } + const AZ::IO::Path& PrefabFocusHandler::GetPrefabFocusPath([[maybe_unused]] AzFramework::EntityContextId entityContextId) const + { + return m_instanceFocusPath; + } + + const int PrefabFocusHandler::GetPrefabFocusPathLength([[maybe_unused]] AzFramework::EntityContextId entityContextId) const + { + return aznumeric_cast(m_instanceFocusVector.size()); + } + + void PrefabFocusHandler::OnEntityStreamLoadSuccess() + { + if (!m_isInitialized) + { + Initialize(); + } + + // Focus on the root prefab (AZ::EntityId() will default to it) + FocusOnOwningPrefab(AZ::EntityId()); + } + + void PrefabFocusHandler::RefreshInstanceFocusList() + { + m_instanceFocusVector.clear(); + m_instanceFocusPath.clear(); + + AZStd::list instanceFocusList; + + // Use a support list to easily push front while traversing the prefab hierarchy + InstanceOptionalReference currentInstance = m_focusedInstance; + while (currentInstance.has_value()) + { + instanceFocusList.push_front(currentInstance); + + currentInstance = currentInstance->get().GetParentInstance(); + } + + // Populate internals using the support list + for (auto& instance : instanceFocusList) + { + m_instanceFocusPath.Append(instance->get().GetContainerEntity()->get().GetName()); + m_instanceFocusVector.emplace_back(instance); + } + } + + void PrefabFocusHandler::OpenInstanceContainers(const AZStd::vector& instances) const + { + for (const InstanceOptionalReference& instance : instances) + { + if (instance.has_value()) + { + m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), true); + } + } + } + + void PrefabFocusHandler::CloseInstanceContainers(const AZStd::vector& instances) const + { + for (const InstanceOptionalReference& instance : instances) + { + if (instance.has_value()) + { + m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), false); + } + } + } + } // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h index fa7727894d..2f631f772d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h @@ -10,10 +10,17 @@ #include +#include #include #include #include +namespace AzToolsFramework +{ + class ContainerEntityInterface; + class FocusModeInterface; +} + namespace AzToolsFramework::Prefab { class InstanceEntityMapperInterface; @@ -21,6 +28,7 @@ namespace AzToolsFramework::Prefab //! Handles Prefab Focus mode, determining which prefab file entity changes will target. class PrefabFocusHandler final : private PrefabFocusInterface + , private EditorEntityContextNotificationBus::Handler { public: AZ_CLASS_ALLOCATOR(PrefabFocusHandler, AZ::SystemAllocator, 0); @@ -28,17 +36,37 @@ namespace AzToolsFramework::Prefab PrefabFocusHandler(); ~PrefabFocusHandler(); - // PrefabFocusInterface override ... + void Initialize(); + + // PrefabFocusInterface overrides ... PrefabFocusOperationResult FocusOnOwningPrefab(AZ::EntityId entityId) override; - TemplateId GetFocusedPrefabTemplateId() override; - InstanceOptionalReference GetFocusedPrefabInstance() override; - bool IsOwningPrefabBeingFocused(AZ::EntityId entityId) override; + PrefabFocusOperationResult FocusOnPathIndex(AzFramework::EntityContextId entityContextId, int index) override; + TemplateId GetFocusedPrefabTemplateId(AzFramework::EntityContextId entityContextId) const override; + InstanceOptionalReference GetFocusedPrefabInstance(AzFramework::EntityContextId entityContextId) const override; + bool IsOwningPrefabBeingFocused(AZ::EntityId entityId) const override; + const AZ::IO::Path& GetPrefabFocusPath(AzFramework::EntityContextId entityContextId) const override; + const int GetPrefabFocusPathLength(AzFramework::EntityContextId entityContextId) const override; + + // EditorEntityContextNotificationBus overrides ... + void OnEntityStreamLoadSuccess() override; private: + PrefabFocusOperationResult FocusOnPrefabInstance(InstanceOptionalReference focusedInstance); + void RefreshInstanceFocusList(); + + void OpenInstanceContainers(const AZStd::vector& instances) const; + void CloseInstanceContainers(const AZStd::vector& instances) const; + InstanceOptionalReference m_focusedInstance; TemplateId m_focusedTemplateId; + AZStd::vector m_instanceFocusVector; + AZ::IO::Path m_instanceFocusPath; + + ContainerEntityInterface* m_containerEntityInterface = nullptr; + FocusModeInterface* m_focusModeInterface = nullptr; + InstanceEntityMapperInterface* m_instanceEntityMapperInterface = nullptr; - InstanceEntityMapperInterface* m_instanceEntityMapperInterface; + bool m_isInitialized = false; }; } // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusInterface.h index 833a5ef7c8..1c0f4f85e9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusInterface.h @@ -11,6 +11,8 @@ #include #include +#include + #include #include @@ -28,16 +30,27 @@ namespace AzToolsFramework::Prefab //! @param entityId The entityId of the entity whose owning instance we want the prefab system to focus on. virtual PrefabFocusOperationResult FocusOnOwningPrefab(AZ::EntityId entityId) = 0; + //! Set the focused prefab instance to the instance at position index of the current path. + //! @param index The index of the instance in the current path that we want the prefab system to focus on. + virtual PrefabFocusOperationResult FocusOnPathIndex(AzFramework::EntityContextId entityContextId, int index) = 0; + //! Returns the template id of the instance the prefab system is focusing on. - virtual TemplateId GetFocusedPrefabTemplateId() = 0; + virtual TemplateId GetFocusedPrefabTemplateId(AzFramework::EntityContextId entityContextId) const = 0; //! Returns a reference to the instance the prefab system is focusing on. - virtual InstanceOptionalReference GetFocusedPrefabInstance() = 0; + virtual InstanceOptionalReference GetFocusedPrefabInstance(AzFramework::EntityContextId entityContextId) const = 0; //! Returns whether the entity belongs to the instance that is being focused on, or one of its descendants. //! @param entityId The entityId of the queried entity. //! @return true if the entity belongs to the focused instance or one of its descendants, false otherwise. - virtual bool IsOwningPrefabBeingFocused(AZ::EntityId entityId) = 0; + virtual bool IsOwningPrefabBeingFocused(AZ::EntityId entityId) const = 0; + + //! Returns the path from the root instance to the currently focused instance. + //! @return A path composed from the names of the container entities for the instance path. + virtual const AZ::IO::Path& GetPrefabFocusPath(AzFramework::EntityContextId entityContextId) const = 0; + + //! Returns the size of the path to the currently focused instance. + virtual const int GetPrefabFocusPathLength(AzFramework::EntityContextId entityContextId) const = 0; }; } // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusNotificationBus.h new file mode 100644 index 0000000000..31bab719e2 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusNotificationBus.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzToolsFramework::Prefab +{ + //! Used to notify when the editor focus changes. + class PrefabFocusNotifications + : public AZ::EBusTraits + { + public: + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; + using BusIdType = AzFramework::EntityContextId; + ////////////////////////////////////////////////////////////////////////// + + //! Triggered when the editor focus is changed to a different prefab. + virtual void OnPrefabFocusChanged() = 0; + + protected: + ~PrefabFocusNotifications() = default; + }; + + using PrefabFocusNotificationBus = AZ::EBus; + +} // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp index 09439724cd..07bda45c8a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp @@ -50,17 +50,19 @@ namespace AzToolsFramework auto settingsRegistry = AZ::SettingsRegistry::Get(); AZ_Assert(settingsRegistry, "Settings registry is not set"); - + [[maybe_unused]] bool result = settingsRegistry->Get(m_projectPathWithOsSeparator.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); AZ_Warning("Prefab", result, "Couldn't retrieve project root path"); m_projectPathWithSlashSeparator = AZ::IO::Path(m_projectPathWithOsSeparator.Native(), '/').MakePreferred(); AZ::Interface::Register(this); + m_scriptingPrefabLoader.Connect(this); } void PrefabLoader::UnregisterPrefabLoaderInterface() { + m_scriptingPrefabLoader.Disconnect(); AZ::Interface::Unregister(this); } @@ -568,7 +570,7 @@ namespace AzToolsFramework (pathStr.find_first_of(AZ_FILESYSTEM_INVALID_CHARACTERS) == AZStd::string::npos) && (pathStr.back() != '\\' && pathStr.back() != '/'); } - + AZ::IO::Path PrefabLoader::GetFullPath(AZ::IO::PathView path) { AZ::IO::Path pathWithOSSeparator = AZ::IO::Path(path).MakePreferred(); @@ -596,26 +598,38 @@ namespace AzToolsFramework { // The asset system provided us with a valid root folder and relative path, so return it. fullPath = AZ::IO::Path(rootFolder) / assetInfo.m_relativePath; + return fullPath; } else { - // If for some reason the Asset system couldn't provide a relative path, provide some fallback logic. + // attempt to find the absolute from the Cache folder + AZStd::string assetRootFolder; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + settingsRegistry->Get(assetRootFolder, AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder); + } + fullPath = AZ::IO::Path(assetRootFolder) / path; + if (fullPath.IsAbsolute() && AZ::IO::SystemFile::Exists(fullPath.c_str())) + { + return fullPath; + } + } - // Check to see if the AssetProcessor is ready. If it *is* and we didn't get a path, print an error then follow - // the fallback logic. If it's *not* ready, we're probably either extremely early in a tool startup flow or inside - // a unit test, so just execute the fallback logic without an error. - [[maybe_unused]] bool assetProcessorReady = false; - AzFramework::AssetSystemRequestBus::BroadcastResult( - assetProcessorReady, &AzFramework::AssetSystemRequestBus::Events::AssetProcessorIsReady); + // If for some reason the Asset system couldn't provide a relative path, provide some fallback logic. - AZ_Error( - "Prefab", !assetProcessorReady, "Full source path for '%.*s' could not be determined. Using fallback logic.", - AZ_STRING_ARG(path.Native())); + // Check to see if the AssetProcessor is ready. If it *is* and we didn't get a path, print an error then follow + // the fallback logic. If it's *not* ready, we're probably either extremely early in a tool startup flow or inside + // a unit test, so just execute the fallback logic without an error. + [[maybe_unused]] bool assetProcessorReady = false; + AzFramework::AssetSystemRequestBus::BroadcastResult( + assetProcessorReady, &AzFramework::AssetSystemRequestBus::Events::AssetProcessorIsReady); - // If a relative path was passed in, make it relative to the project root. - fullPath = AZ::IO::Path(m_projectPathWithOsSeparator).Append(pathWithOSSeparator); - } + AZ_Error( + "Prefab", !assetProcessorReady, "Full source path for '%.*s' could not be determined. Using fallback logic.", + AZ_STRING_ARG(path.Native())); + // If a relative path was passed in, make it relative to the project root. + fullPath = AZ::IO::Path(m_projectPathWithOsSeparator).Append(pathWithOSSeparator); return fullPath; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h index 15f201e027..da2c3f3161 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h @@ -15,6 +15,7 @@ #include #include #include +#include namespace AZ { @@ -114,6 +115,7 @@ namespace AzToolsFramework void SetSaveAllPrefabsPreference(SaveAllPrefabsPreference saveAllPrefabsPreference) override; private: + /** * Copies the template dom provided and manipulates it into the proper format to be saved to disk. * @param templateRef The template whose dom we want to transform into the proper format to be saved to disk. @@ -177,6 +179,7 @@ namespace AzToolsFramework AZStd::optional> StoreTemplateIntoFileFormat(TemplateId templateId); PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; + ScriptingPrefabLoader m_scriptingPrefabLoader; AZ::IO::Path m_projectPathWithOsSeparator; AZ::IO::Path m_projectPathWithSlashSeparator; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h index a428f8a7b9..b4586ad5bf 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h @@ -99,7 +99,6 @@ namespace AzToolsFramework // Generates a new path static AZ::IO::Path GeneratePath(); }; - } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderScriptingBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderScriptingBus.h new file mode 100644 index 0000000000..6e9d64b147 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderScriptingBus.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + // Ebus for script-friendly APIs for the prefab loader + struct PrefabLoaderScriptingTraits : AZ::EBusTraits + { + AZ_TYPE_INFO(PrefabLoaderScriptingTraits, "{C344B7D8-8299-48C9-8450-26E1332EA011}"); + + virtual ~PrefabLoaderScriptingTraits() = default; + + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + + /** + * Saves a Prefab Template into the provided output string. + * Converts Prefab Template form into .prefab form by collapsing nested Template info + * into a source path and patches. + * @param templateId Id of the template to be saved + * @return Will contain the serialized template json on success + */ + virtual AZ::Outcome SaveTemplateToString(TemplateId templateId) = 0; + }; + + using PrefabLoaderScriptingBus = AZ::EBus; + + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 63f042be85..038f36eac9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -329,6 +329,11 @@ namespace AzToolsFramework return AZ::Failure(AZStd::string("Could not instantiate prefab - internal error " "(PrefabEditorEntityOwnershipInterface unavailable).")); } + if (!prefabEditorEntityOwnershipInterface->IsRootPrefabAssigned()) + { + return AZ::Failure(AZStd::string("Could not instantiate prefab - no root prefab assigned. " + "Currently, prefabs can only be instantiated inside a level")); + } InstanceOptionalReference instanceToParentUnder; @@ -1036,7 +1041,7 @@ namespace AzToolsFramework PrefabUndoInstance* command = aznew PrefabUndoInstance("Entity/Instance duplication"); command->SetParent(undoBatch.GetUndoBatch()); command->Capture(instanceDomBefore, instanceDomAfter, commonOwningInstance->get().GetTemplateId()); - command->Redo(); + command->RedoBatched(); DuplicateNestedInstancesInInstance(commonOwningInstance->get(), instances, instanceDomAfter, duplicatedEntityAndInstanceIds, newInstanceAliasToOldInstanceMap); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicRequestHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicRequestHandler.cpp index ad171dc6f4..0aaf81c4c9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicRequestHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicRequestHandler.cpp @@ -10,6 +10,8 @@ #include +#include + namespace AzToolsFramework { namespace Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 0d2696f14b..b1fdf9784d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -36,12 +37,14 @@ namespace AzToolsFramework m_instanceToTemplatePropagator.RegisterInstanceToTemplateInterface(); m_prefabPublicHandler.RegisterPrefabPublicHandlerInterface(); m_prefabPublicRequestHandler.Connect(); + m_prefabSystemScriptingHandler.Connect(this); AZ::SystemTickBus::Handler::BusConnect(); } void PrefabSystemComponent::Deactivate() { AZ::SystemTickBus::Handler::BusDisconnect(); + m_prefabSystemScriptingHandler.Disconnect(); m_prefabPublicRequestHandler.Disconnect(); m_prefabPublicHandler.UnregisterPrefabPublicHandlerInterface(); m_instanceToTemplatePropagator.UnregisterInstanceToTemplateInterface(); @@ -58,13 +61,24 @@ namespace AzToolsFramework AzToolsFramework::Prefab::PrefabConversionUtils::EditorInfoRemover::Reflect(context); PrefabPublicRequestHandler::Reflect(context); PrefabLoader::Reflect(context); + PrefabSystemScriptingHandler::Reflect(context); - AZ::SerializeContext* serialize = azrtti_cast(context); - if (serialize) + if (AZ::SerializeContext* serialize = azrtti_cast(context)) { serialize->Class()->Version(1); } + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + + behaviorContext->EBus("PrefabLoaderScriptingBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "prefab") + ->Attribute(AZ::Script::Attributes::Category, "Prefab") + ->Event("SaveTemplateToString", &PrefabLoaderScriptingBus::Events::SaveTemplateToString); + ; + } + AZ::JsonRegistrationContext* jsonRegistration = azrtti_cast(context); if (jsonRegistration) { @@ -92,7 +106,17 @@ namespace AzToolsFramework AZStd::unique_ptr PrefabSystemComponent::CreatePrefab( const AZStd::vector& entities, AZStd::vector>&& instancesToConsume, - AZ::IO::PathView filePath, AZStd::unique_ptr containerEntity, bool shouldCreateLinks) + AZ::IO::PathView filePath, AZStd::unique_ptr containerEntity, InstanceOptionalReference parent, + bool shouldCreateLinks) + { + AZStd::unique_ptr newInstance = AZStd::make_unique(AZStd::move(containerEntity), parent); + CreatePrefab(entities, AZStd::move(instancesToConsume), filePath, newInstance, shouldCreateLinks); + return newInstance; + } + + void PrefabSystemComponent::CreatePrefab( + const AZStd::vector& entities, AZStd::vector>&& instancesToConsume, + AZ::IO::PathView filePath, AZStd::unique_ptr& newInstance, bool shouldCreateLinks) { AZ::IO::Path relativeFilePath = m_prefabLoader.GenerateRelativePath(filePath); if (GetTemplateIdFromFilePath(relativeFilePath) != InvalidTemplateId) @@ -101,11 +125,9 @@ namespace AzToolsFramework "Filepath %s has already been registered with the Prefab System Component", relativeFilePath.c_str()); - return nullptr; + return; } - AZStd::unique_ptr newInstance = AZStd::make_unique(AZStd::move(containerEntity)); - for (AZ::Entity* entity : entities) { AZ_Assert(entity, "Prefab - Null entity passed in during Create Prefab"); @@ -136,13 +158,11 @@ namespace AzToolsFramework { newInstance->SetTemplateId(newTemplateId); } - - return newInstance; } - - void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId, InstanceOptionalReference instanceToExclude) + + void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId, bool immediate, InstanceOptionalReference instanceToExclude) { - UpdatePrefabInstances(templateId, instanceToExclude); + UpdatePrefabInstances(templateId, immediate, instanceToExclude); auto templateIdToLinkIdsIterator = m_templateToLinkIdsMap.find(templateId); if (templateIdToLinkIdsIterator != m_templateToLinkIdsMap.end()) @@ -171,9 +191,9 @@ namespace AzToolsFramework } } - void PrefabSystemComponent::UpdatePrefabInstances(const TemplateId& templateId, InstanceOptionalReference instanceToExclude) + void PrefabSystemComponent::UpdatePrefabInstances(TemplateId templateId, bool immediate, InstanceOptionalReference instanceToExclude) { - m_instanceUpdateExecutor.AddTemplateInstancesToQueue(templateId, instanceToExclude); + m_instanceUpdateExecutor.AddTemplateInstancesToQueue(templateId, immediate, instanceToExclude); } void PrefabSystemComponent::UpdateLinkedInstances(AZStd::queue& linkIdsQueue) @@ -256,7 +276,8 @@ namespace AzToolsFramework } } - AZStd::unique_ptr PrefabSystemComponent::InstantiatePrefab(AZ::IO::PathView filePath) + AZStd::unique_ptr PrefabSystemComponent::InstantiatePrefab( + AZ::IO::PathView filePath, InstanceOptionalReference parent) { // Retrieve the template id for the source prefab filepath Prefab::TemplateId templateId = GetTemplateIdFromFilePath(filePath); @@ -276,10 +297,11 @@ namespace AzToolsFramework return nullptr; } - return InstantiatePrefab(templateId); + return InstantiatePrefab(templateId, parent); } - AZStd::unique_ptr PrefabSystemComponent::InstantiatePrefab(const TemplateId& templateId) + AZStd::unique_ptr PrefabSystemComponent::InstantiatePrefab( + TemplateId templateId, InstanceOptionalReference parent) { TemplateReference instantiatingTemplate = FindTemplate(templateId); @@ -292,7 +314,7 @@ namespace AzToolsFramework return nullptr; } - auto newInstance = AZStd::make_unique(); + auto newInstance = AZStd::make_unique(parent); Instance::EntityList newEntities; if (!PrefabDomUtils::LoadInstanceFromPrefabDom(*newInstance, newEntities, instantiatingTemplate->get().GetPrefabDom())) { @@ -354,7 +376,7 @@ namespace AzToolsFramework return newTemplateId; } - TemplateReference PrefabSystemComponent::FindTemplate(const TemplateId& id) + TemplateReference PrefabSystemComponent::FindTemplate(TemplateId id) { auto found = m_templateIdMap.find(id); if (found != m_templateIdMap.end()) @@ -466,7 +488,7 @@ namespace AzToolsFramework templateToChange.SetFilePath(filePath); } - void PrefabSystemComponent::RemoveTemplate(const TemplateId& templateId) + void PrefabSystemComponent::RemoveTemplate(TemplateId templateId) { auto findTemplateResult = FindTemplate(templateId); if (!findTemplateResult.has_value()) @@ -553,8 +575,8 @@ namespace AzToolsFramework } LinkId PrefabSystemComponent::AddLink( - const TemplateId& sourceTemplateId, - const TemplateId& targetTemplateId, + TemplateId sourceTemplateId, + TemplateId targetTemplateId, PrefabDomValue::MemberIterator& instanceIterator, InstanceOptionalReference instance) { @@ -571,10 +593,13 @@ namespace AzToolsFramework Template& targetTemplate = targetTemplateReference->get(); +#if defined(AZ_ENABLE_TRACING) Template& sourceTemplate = sourceTemplateReference->get(); AZStd::string_view instanceName(instanceIterator->name.GetString(), instanceIterator->name.GetStringLength()); + const AZStd::string& targetTemplateFilePath = targetTemplate.GetFilePath().Native(); const AZStd::string& sourceTemplateFilePath = sourceTemplate.GetFilePath().Native(); +#endif LinkId newLinkId = CreateUniqueLinkId(); Link newLink(newLinkId); @@ -616,8 +641,8 @@ namespace AzToolsFramework } LinkId PrefabSystemComponent::CreateLink( - const TemplateId& linkTargetId, - const TemplateId& linkSourceId, + TemplateId linkTargetId, + TemplateId linkSourceId, const InstanceAlias& instanceAlias, const PrefabDomConstReference linkPatches, const LinkId& linkId) @@ -774,7 +799,7 @@ namespace AzToolsFramework } } - bool PrefabSystemComponent::IsTemplateDirty(const TemplateId& templateId) + bool PrefabSystemComponent::IsTemplateDirty(TemplateId templateId) { auto templateRef = FindTemplate(templateId); @@ -786,7 +811,7 @@ namespace AzToolsFramework return false; } - void PrefabSystemComponent::SetTemplateDirtyFlag(const TemplateId& templateId, bool dirty) + void PrefabSystemComponent::SetTemplateDirtyFlag(TemplateId templateId, bool dirty) { auto templateRef = FindTemplate(templateId); @@ -818,7 +843,14 @@ namespace AzToolsFramework auto linkIterator = m_linkIdMap.find(linkId); if (linkIterator != m_linkIdMap.end()) { - return AreDirtyTemplatesPresent(linkIterator->second.GetSourceTemplateId()); + if (AreDirtyTemplatesPresent(linkIterator->second.GetSourceTemplateId())) + { + return true; + } + else + { + continue; + } } } return false; @@ -896,8 +928,10 @@ namespace AzToolsFramework return false; } +#if defined(AZ_ENABLE_TRACING) Template& sourceTemplate = sourceTemplateReference->get(); Template& targetTemplate = targetTemplateReference->get(); +#endif AZStd::string_view instanceName(instanceIterator->name.GetString(), instanceIterator->name.GetStringLength()); @@ -907,7 +941,7 @@ namespace AzToolsFramework PrefabDomValue& instance = instanceIterator->value; AZ_Assert(instance.IsObject(), "Nested instance DOM provided is not a valid JSON object."); - PrefabDomValueReference sourceTemplateName = PrefabDomUtils::FindPrefabDomValue(instance, PrefabDomUtils::SourceName); + [[maybe_unused]] PrefabDomValueReference sourceTemplateName = PrefabDomUtils::FindPrefabDomValue(instance, PrefabDomUtils::SourceName); AZ_Assert(sourceTemplateName, "Couldn't find source template name in the DOM of the nested instance while creating a link."); AZ_Assert(sourceTemplateName->get() == sourceTemplate.GetFilePath().c_str(), "The name of the source template in the nested instance DOM does not match the name of the source template already loaded"); @@ -933,7 +967,7 @@ namespace AzToolsFramework return true; } - bool PrefabSystemComponent::GenerateLinksForNewTemplate(const TemplateId& newTemplateId, Instance& instance) + bool PrefabSystemComponent::GenerateLinksForNewTemplate(TemplateId newTemplateId, Instance& instance) { TemplateReference newTemplateReference = FindTemplate(newTemplateId); if (!newTemplateReference.has_value()) @@ -973,7 +1007,7 @@ namespace AzToolsFramework } const PrefabDomValue& source = instanceSourceReference->get(); - const TemplateId& nestedTemplateId = GetTemplateIdFromFilePath(source.GetString()); + TemplateId nestedTemplateId = GetTemplateIdFromFilePath(source.GetString()); if (nestedTemplateId == InvalidTemplateId) { AZ_Error("Prefab", false, diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h index 746c306c2b..480bb83121 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h @@ -27,6 +27,7 @@ #include #include #include +#include namespace AZ { @@ -84,7 +85,7 @@ namespace AzToolsFramework * @param id A unique id of a Template. * @return Reference of Template if the Template exists. */ - TemplateReference FindTemplate(const TemplateId& id) override; + TemplateReference FindTemplate(TemplateId id) override; /** * Find Link with given Link id from Prefab System Component. @@ -112,7 +113,7 @@ namespace AzToolsFramework * Remove the Template associated with the given id from Prefab System Component. * @param templateId A unique id of a Template. */ - void RemoveTemplate(const TemplateId& templateId) override; + void RemoveTemplate(TemplateId templateId) override; /** * Remove all Templates from the Prefab System Component. @@ -121,17 +122,21 @@ namespace AzToolsFramework /** * Generates a new Prefab Instance based on the Template whose source is stored in filepath. - * @param filePath the path to the prefab source file containing the template being instantiated. + * @param filePath The path to the prefab source file containing the template being instantiated. + * @param parent Reference of the target instance the instantiated instance will be placed under. * @return A unique_ptr to the newly instantiated instance. Null if operation failed. */ - AZStd::unique_ptr InstantiatePrefab(AZ::IO::PathView filePath) override; + AZStd::unique_ptr InstantiatePrefab( + AZ::IO::PathView filePath, InstanceOptionalReference parent = AZStd::nullopt) override; /** - * Generates a new Prefab Instance based on the Template referenced by templateId - * @param templateId the id of the template being instantiated. + * Generates a new Prefab Instance based on the Template referenced by templateId. + * @param templateId The id of the template being instantiated. + * @param parent Reference of the target instance the instantiated instance will be placed under. * @return A unique_ptr to the newly instantiated instance. Null if operation failed. */ - AZStd::unique_ptr InstantiatePrefab(const TemplateId& templateId) override; + AZStd::unique_ptr InstantiatePrefab( + TemplateId templateId, InstanceOptionalReference parent = AZStd::nullopt) override; /** * Add a new Link into Prefab System Component and create a unique id for it. @@ -142,8 +147,8 @@ namespace AzToolsFramework * @return A unique id for the new Link. */ LinkId AddLink( - const TemplateId& sourceTemplateId, - const TemplateId& targetTemplateId, + TemplateId sourceTemplateId, + TemplateId targetTemplateId, PrefabDomValue::MemberIterator& instanceIterator, InstanceOptionalReference instance) override; @@ -157,8 +162,8 @@ namespace AzToolsFramework * @return A unique id for the new Link. */ LinkId CreateLink( - const TemplateId& linkTargetId, - const TemplateId& linkSourceId, + TemplateId linkTargetId, + TemplateId linkSourceId, const InstanceAlias& instanceAlias, const PrefabDomConstReference linkPatches, const LinkId& linkId = InvalidLinkId) override; @@ -181,14 +186,14 @@ namespace AzToolsFramework * @param templateId The id of the template to query. * @return The value of the dirty flag on the template. */ - bool IsTemplateDirty(const TemplateId& templateId) override; + bool IsTemplateDirty(TemplateId templateId) override; /** * Sets the dirty flag of the template to the value provided. * @param templateId The id of the template to flag. * @param dirty The new value of the dirty flag. */ - void SetTemplateDirtyFlag(const TemplateId& templateId, bool dirty) override; + void SetTemplateDirtyFlag(TemplateId templateId, bool dirty) override; bool AreDirtyTemplatesPresent(TemplateId rootTemplateId) override; @@ -200,21 +205,22 @@ namespace AzToolsFramework /** * Builds a new Prefab Template out of entities and instances and returns the first instance comprised of - * these entities and instances - * @param entities A vector of entities that will be used in the new instance. May be empty + * these entities and instances. + * @param entities A vector of entities that will be used in the new instance. May be empty. * @param instances A vector of Prefab Instances that will be nested in the new instance, will be consumed and moved. - * May be empty - * @param filePath the path to associate the template of the new instance to. + * May be empty. + * @param filePath The path to associate the template of the new instance to. * @param containerEntity The container entity for the prefab to be created. It will be created if a nullptr is provided. + * @param parent Reference of an instance the created instance will be placed under, if given. * @param shouldCreateLinks The flag indicating if links should be created between the templates of the instance * and its nested instances. - * @return A pointer to the newly created instance. nullptr on failure + * @return A pointer to the newly created instance. nullptr on failure. */ AZStd::unique_ptr CreatePrefab( const AZStd::vector& entities, AZStd::vector>&& instancesToConsume, AZ::IO::PathView filePath, AZStd::unique_ptr containerEntity = nullptr, - bool ShouldCreateLinks = true) override; - + InstanceOptionalReference parent = AZStd::nullopt, bool shouldCreateLinks = true) override; + PrefabDom& FindTemplateDom(TemplateId templateId) override; /** @@ -225,17 +231,35 @@ namespace AzToolsFramework */ void UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) override; - void PropagateTemplateChanges(TemplateId templateId, InstanceOptionalReference instanceToExclude = AZStd::nullopt) override; + void PropagateTemplateChanges(TemplateId templateId, bool immediate = false, InstanceOptionalReference instanceToExclude = AZStd::nullopt) override; /** * Updates all Instances owned by a Template. * * @param templateId The id of the Template owning Instances to update. + * @param immediate An optional flag whether to apply the patch immediately (needed for Undo/Redos) or wait until next system tick. + * @param instanceToExclude An optional reference to an instance of the template being updated that should not be refreshes as part of propagation. + * Defaults to nullopt, which means that all instances will be refreshed. */ - void UpdatePrefabInstances(const TemplateId& templateId, InstanceOptionalReference instanceToExclude = AZStd::nullopt); + void UpdatePrefabInstances(TemplateId templateId, bool immediate = false, InstanceOptionalReference instanceToExclude = AZStd::nullopt); private: AZ_DISABLE_COPY_MOVE(PrefabSystemComponent); + + /** + * Builds a new Prefab Template out of entities and instances and returns the first instance comprised of + * these entities and instances. + * @param entities A vector of entities that will be used in the new instance. May be empty. + * @param instances A vector of Prefab Instances that will be nested in the new instance, will be consumed and moved. + * May be empty. + * @param filePath The path to associate the template of the new instance to. + * @param instance Reference of a pointer to the newly created instance which needs initiation. + * @param shouldCreateLinks The flag indicating if links should be created between the templates of the instance + * and its nested instances. + */ + void CreatePrefab(const AZStd::vector& entities, + AZStd::vector>&& instancesToConsume, AZ::IO::PathView filePath, + AZStd::unique_ptr& instance, bool shouldCreateLinks); /** * Updates all the linked Instances corresponding to the linkIds in the provided queue. @@ -310,7 +334,7 @@ namespace AzToolsFramework * @param instance The instance that the template was created from. This needs to be editable for inserting linkId into it. * @return bool on whether the operation succeeded */ - bool GenerateLinksForNewTemplate(const TemplateId& newTemplateId, Instance& instance); + bool GenerateLinksForNewTemplate(TemplateId newTemplateId, Instance& instance); /** * Create a unique Template id for newly created Template. @@ -389,6 +413,8 @@ namespace AzToolsFramework // Handler of the public Prefab requests. PrefabPublicRequestHandler m_prefabPublicRequestHandler; + + PrefabSystemScriptingHandler m_prefabSystemScriptingHandler; }; } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h index 1f59088518..66d85ccee9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h @@ -29,28 +29,28 @@ namespace AzToolsFramework public: AZ_RTTI(PrefabSystemComponentInterface, "{8E95A029-67F9-4F74-895F-DDBFE29516A0}"); - virtual TemplateReference FindTemplate(const TemplateId& id) = 0; + virtual TemplateReference FindTemplate(TemplateId id) = 0; virtual LinkReference FindLink(const LinkId& id) = 0; virtual TemplateId AddTemplate(const AZ::IO::Path& filePath, PrefabDom prefabDom) = 0; virtual void UpdateTemplateFilePath(TemplateId templateId, const AZ::IO::PathView& filePath) = 0; - virtual void RemoveTemplate(const TemplateId& templateId) = 0; + virtual void RemoveTemplate(TemplateId templateId) = 0; virtual void RemoveAllTemplates() = 0; - virtual LinkId AddLink(const TemplateId& sourceTemplateId, const TemplateId& targetTemplateId, + virtual LinkId AddLink(TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomValue::MemberIterator& instanceIterator, InstanceOptionalReference instance) = 0; //creates a new Link virtual LinkId CreateLink( - const TemplateId& linkTargetId, const TemplateId& linkSourceId, const InstanceAlias& instanceAlias, + TemplateId linkTargetId, TemplateId linkSourceId, const InstanceAlias& instanceAlias, const PrefabDomConstReference linkPatches, const LinkId& linkId = InvalidLinkId) = 0; virtual void RemoveLink(const LinkId& linkId) = 0; virtual TemplateId GetTemplateIdFromFilePath(AZ::IO::PathView filePath) const = 0; - virtual bool IsTemplateDirty(const TemplateId& templateId) = 0; - virtual void SetTemplateDirtyFlag(const TemplateId& templateId, bool dirty) = 0; + virtual bool IsTemplateDirty(TemplateId templateId) = 0; + virtual void SetTemplateDirtyFlag(TemplateId templateId, bool dirty) = 0; //! Recursive function to check if the template is dirty or if any dirty templates are presents in the links of the template. //! @param rootTemplateId The id of the template provided as the beginning template to check the outgoing links. @@ -67,16 +67,18 @@ namespace AzToolsFramework virtual PrefabDom& FindTemplateDom(TemplateId templateId) = 0; virtual void UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) = 0; - virtual void PropagateTemplateChanges(TemplateId templateId, InstanceOptionalReference instanceToExclude = AZStd::nullopt) = 0; + virtual void PropagateTemplateChanges(TemplateId templateId, bool immediate = false, InstanceOptionalReference instanceToExclude = AZStd::nullopt) = 0; - virtual AZStd::unique_ptr InstantiatePrefab(AZ::IO::PathView filePath) = 0; - virtual AZStd::unique_ptr InstantiatePrefab(const TemplateId& templateId) = 0; + virtual AZStd::unique_ptr InstantiatePrefab( + AZ::IO::PathView filePath, InstanceOptionalReference parent = AZStd::nullopt) = 0; + virtual AZStd::unique_ptr InstantiatePrefab( + TemplateId templateId, InstanceOptionalReference parent = AZStd::nullopt) = 0; virtual AZStd::unique_ptr CreatePrefab(const AZStd::vector& entities, AZStd::vector>&& instancesToConsume, AZ::IO::PathView filePath, - AZStd::unique_ptr containerEntity = nullptr, bool ShouldCreateLinks = true) = 0; + AZStd::unique_ptr containerEntity = nullptr, InstanceOptionalReference parent = AZStd::nullopt, + bool shouldCreateLinks = true) = 0; }; - - + } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingBus.h new file mode 100644 index 0000000000..f83bd2c6f1 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingBus.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + // Bus that exposes a script-friendly interface to the PrefabSystemComponent + struct PrefabSystemScriptingEbusTraits : AZ::EBusTraits + { + using MutexType = AZ::NullMutex; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + + virtual TemplateId CreatePrefabTemplate( + const AZStd::vector& entityIds, const AZStd::string& filePath) = 0; + }; + + using PrefabSystemScriptingBus = AZ::EBus; + + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.cpp new file mode 100644 index 0000000000..d34e2cfc92 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include + +namespace AzToolsFramework::Prefab +{ + void PrefabSystemScriptingHandler::Reflect(AZ::ReflectContext* context) + { + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->ConstantProperty("InvalidTemplateId", BehaviorConstant(InvalidTemplateId)) + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "prefab") + ->Attribute(AZ::Script::Attributes::Category, "Prefab"); + + behaviorContext->EBus("PrefabSystemScriptingBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "prefab") + ->Attribute(AZ::Script::Attributes::Category, "Prefab") + ->Event("CreatePrefab", &PrefabSystemScriptingBus::Events::CreatePrefabTemplate); + } + } + + void PrefabSystemScriptingHandler::Connect(PrefabSystemComponentInterface* prefabSystemComponentInterface) + { + AZ_Assert(prefabSystemComponentInterface != nullptr, "prefabSystemComponentInterface must not be null"); + m_prefabSystemComponentInterface = prefabSystemComponentInterface; + PrefabSystemScriptingBus::Handler::BusConnect(); + } + + void PrefabSystemScriptingHandler::Disconnect() + { + PrefabSystemScriptingBus::Handler::BusDisconnect(); + } + + TemplateId PrefabSystemScriptingHandler::CreatePrefabTemplate(const AZStd::vector& entityIds, const AZStd::string& filePath) + { + AZStd::vector entities; + + for (const auto& entityId : entityIds) + { + AZ::Entity* entity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationBus::Events::FindEntity, entityId); + + AZ_Warning( + "PrefabSystemComponent", entity, "EntityId %s was not found and will not be added to the prefab", + entityId.ToString().c_str()); + + if (entity) + { + entities.push_back(entity); + } + } + + auto prefab = m_prefabSystemComponentInterface->CreatePrefab(entities, {}, AZ::IO::PathView(AZStd::string_view(filePath))); + + if (!prefab) + { + AZ_Error("PrefabSystemComponenent", false, "Failed to create prefab %s", filePath.c_str()); + return InvalidTemplateId; + } + + return prefab->GetTemplateId(); + } +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.h new file mode 100644 index 0000000000..809690bf35 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + class PrefabSystemScriptingHandler + : PrefabSystemScriptingBus::Handler + { + public: + static void Reflect(AZ::ReflectContext* context); + + PrefabSystemScriptingHandler() = default; + + void Connect(PrefabSystemComponentInterface* prefabSystemComponentInterface); + void Disconnect(); + + private: + AZ_DISABLE_COPY(PrefabSystemScriptingHandler); + + ////////////////////////////////////////////////////////////////////////// + // PrefabSystemScriptingBus implementation + TemplateId CreatePrefabTemplate(const AZStd::vector& entityIds, const AZStd::string& filePath) override; + ////////////////////////////////////////////////////////////////////////// + + PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; + }; + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp index fe3555a853..b298304e3b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp @@ -33,7 +33,7 @@ namespace AzToolsFramework void PrefabUndoInstance::Capture( const PrefabDom& initialState, const PrefabDom& endState, - const TemplateId& templateId) + TemplateId templateId) { m_templateId = templateId; @@ -43,10 +43,15 @@ namespace AzToolsFramework void PrefabUndoInstance::Undo() { - m_instanceToTemplateInterface->PatchTemplate(m_undoPatch, m_templateId); + m_instanceToTemplateInterface->PatchTemplate(m_undoPatch, m_templateId, true); } void PrefabUndoInstance::Redo() + { + m_instanceToTemplateInterface->PatchTemplate(m_redoPatch, m_templateId, true); + } + + void PrefabUndoInstance::RedoBatched() { m_instanceToTemplateInterface->PatchTemplate(m_redoPatch, m_templateId); } @@ -91,7 +96,7 @@ namespace AzToolsFramework void PrefabUndoEntityUpdate::Undo() { [[maybe_unused]] bool isPatchApplicationSuccessful = - m_instanceToTemplateInterface->PatchTemplate(m_undoPatch, m_templateId); + m_instanceToTemplateInterface->PatchTemplate(m_undoPatch, m_templateId, true); AZ_Error( "Prefab", isPatchApplicationSuccessful, @@ -102,7 +107,7 @@ namespace AzToolsFramework void PrefabUndoEntityUpdate::Redo() { [[maybe_unused]] bool isPatchApplicationSuccessful = - m_instanceToTemplateInterface->PatchTemplate(m_redoPatch, m_templateId); + m_instanceToTemplateInterface->PatchTemplate(m_redoPatch, m_templateId, true); AZ_Error( "Prefab", isPatchApplicationSuccessful, @@ -113,7 +118,7 @@ namespace AzToolsFramework void PrefabUndoEntityUpdate::Redo(InstanceOptionalReference instanceToExclude) { [[maybe_unused]] bool isPatchApplicationSuccessful = - m_instanceToTemplateInterface->PatchTemplate(m_redoPatch, m_templateId, instanceToExclude); + m_instanceToTemplateInterface->PatchTemplate(m_redoPatch, m_templateId, false, instanceToExclude); AZ_Error( "Prefab", isPatchApplicationSuccessful, @@ -136,8 +141,8 @@ namespace AzToolsFramework } void PrefabUndoInstanceLink::Capture( - const TemplateId& targetId, - const TemplateId& sourceId, + TemplateId targetId, + TemplateId sourceId, const InstanceAlias& instanceAlias, PrefabDom linkPatches, const LinkId linkId) @@ -329,7 +334,7 @@ namespace AzToolsFramework //propagate the link changes link->get().UpdateTarget(); - m_prefabSystemComponentInterface->PropagateTemplateChanges(link->get().GetTargetTemplateId(), instanceToExclude); + m_prefabSystemComponentInterface->PropagateTemplateChanges(link->get().GetTargetTemplateId(), false, instanceToExclude); //mark as dirty m_prefabSystemComponentInterface->SetTemplateDirtyFlag(link->get().GetTargetTemplateId(), true); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h index 1b04852c37..8669024df7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h @@ -49,10 +49,11 @@ namespace AzToolsFramework void Capture( const PrefabDom& initialState, const PrefabDom& endState, - const TemplateId& templateId); + TemplateId templateId); void Undo() override; void Redo() override; + void RedoBatched(); }; //! handles entity updates, such as when the values on an entity change @@ -95,8 +96,8 @@ namespace AzToolsFramework //capture for add/remove void Capture( - const TemplateId& targetId, - const TemplateId& sourceId, + TemplateId targetId, + TemplateId sourceId, const InstanceAlias& instanceAlias, PrefabDom linkPatches = PrefabDom(), const LinkId linkId = InvalidLinkId); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp index 9c44fc7ffd..9803b55324 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp @@ -26,7 +26,7 @@ namespace AzToolsFramework PrefabUndoInstance* state = aznew Prefab::PrefabUndoInstance(undoMessage); state->Capture(instanceDomBeforeUpdate, instanceDomAfterUpdate, instance.GetTemplateId()); state->SetParent(undoBatch); - state->Redo(); + state->RedoBatched(); } LinkId CreateLink( diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.cpp new file mode 100644 index 0000000000..465d83e94b --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +#include +#include +#include +#include + +namespace AZ::Prefab +{ + static constexpr const char s_useProceduralPrefabsKey[] = "/O3DE/Preferences/Prefabs/UseProceduralPrefabs"; + + // ProceduralPrefabAsset + + ProceduralPrefabAsset::ProceduralPrefabAsset(const AZ::Data::AssetId& assetId) + : AZ::Data::AssetData(assetId) + , m_templateId(AzToolsFramework::Prefab::InvalidTemplateId) + { + } + + void ProceduralPrefabAsset::Reflect(AZ::ReflectContext* context) + { + PrefabDomData::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context); serializeContext != nullptr) + { + serializeContext->Class() + ->Version(1) + ->Field("Template Name", &ProceduralPrefabAsset::m_templateName) + ->Field("Template ID", &ProceduralPrefabAsset::m_templateId); + } + } + + const AZStd::string& ProceduralPrefabAsset::GetTemplateName() const + { + return m_templateName; + } + + void ProceduralPrefabAsset::SetTemplateName(AZStd::string templateName) + { + m_templateName = AZStd::move(templateName); + } + + AzToolsFramework::Prefab::TemplateId ProceduralPrefabAsset::GetTemplateId() const + { + return m_templateId; + } + + void ProceduralPrefabAsset::SetTemplateId(AzToolsFramework::Prefab::TemplateId templateId) + { + m_templateId = templateId; + } + + bool ProceduralPrefabAsset::UseProceduralPrefabs() + { + bool useProceduralPrefabs = false; + bool result = AZ::SettingsRegistry::Get()->GetObject(useProceduralPrefabs, s_useProceduralPrefabsKey); + return result && useProceduralPrefabs; + } + + // PrefabDomData + + void PrefabDomData::Reflect(AZ::ReflectContext* context) + { + if (auto* jsonContext = azrtti_cast(context)) + { + jsonContext->Serializer()->HandlesType(); + } + + AZ::SerializeContext* serializeContext = azrtti_cast(context); + if (serializeContext) + { + serializeContext->Class() + ->Version(1); + } + } + + void PrefabDomData::CopyValue(const rapidjson::Value& inputValue) + { + m_prefabDom.CopyFrom(inputValue, m_prefabDom.GetAllocator()); + } + + const AzToolsFramework::Prefab::PrefabDom& PrefabDomData::GetValue() const + { + return m_prefabDom; + } + + // PrefabDomDataJsonSerializer + + AZ::JsonSerializationResult::Result PrefabDomDataJsonSerializer::Load( + void* outputValue, + [[maybe_unused]] const AZ::Uuid& outputValueTypeId, + const rapidjson::Value& inputValue, + AZ::JsonDeserializerContext& context) + { + AZ_Assert(outputValueTypeId == azrtti_typeid(), + "PrefabDomDataJsonSerializer Load against output typeID that was not PrefabDomData"); + AZ_Assert(outputValue, "PrefabDomDataJsonSerializer Load against null output"); + + namespace JSR = AZ::JsonSerializationResult; + JSR::ResultCode result(JSR::Tasks::ReadField); + + if (inputValue.IsObject() == false) + { + result.Combine(context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Missing, "Missing object")); + return context.Report(result, "Prefab should be an object."); + } + + if (inputValue.MemberCount() < 1) + { + result.Combine(context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Missing, "Missing members")); + return context.Report(result, "Prefab should have multiple members."); + } + + auto* outputVariable = reinterpret_cast(outputValue); + outputVariable->CopyValue(inputValue); + return context.Report(result, "Loaded procedural prefab"); + } + + AZ::JsonSerializationResult::Result PrefabDomDataJsonSerializer::Store( + rapidjson::Value& outputValue, + const void* inputValue, + [[maybe_unused]] const void* defaultValue, + [[maybe_unused]] const AZ::Uuid& valueTypeId, + AZ::JsonSerializerContext& context) + { + AZ_Assert(inputValue, "Input value for PrefabDomDataJsonSerializer can't be null."); + AZ_Assert(azrtti_typeid() == valueTypeId, + "Unable to Serialize because the provided type is not PrefabGroup::PrefabDomData."); + + const PrefabDomData* prefabDomData = reinterpret_cast(inputValue); + + namespace JSR = AZ::JsonSerializationResult; + JSR::ResultCode result(JSR::Tasks::WriteValue); + outputValue.SetObject(); + outputValue.CopyFrom(prefabDomData->GetValue(), context.GetJsonAllocator()); + return context.Report(result, "Stored procedural prefab"); + } +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h new file mode 100644 index 0000000000..dd57389b7b --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace AZ::Prefab +{ + //! A wrapper around the JSON DOM type so that the assets can read in and write out + //! JSON directly since Prefabs are JSON serialized entity-component data + class PrefabDomData final + { + public: + AZ_RTTI(PrefabDomData, "{C73A3360-D772-4D41-9118-A039BF9340C1}"); + AZ_CLASS_ALLOCATOR(PrefabDomData, AZ::SystemAllocator, 0); + + PrefabDomData() = default; + ~PrefabDomData() = default; + + static void Reflect(AZ::ReflectContext* context); + + void CopyValue(const rapidjson::Value& inputValue); + const AzToolsFramework::Prefab::PrefabDom& GetValue() const; + + private: + AzToolsFramework::Prefab::PrefabDom m_prefabDom; + }; + + //! Registered to help read/write JSON for the PrefabDomData::m_prefabDom + class PrefabDomDataJsonSerializer final + : public AZ::BaseJsonSerializer + { + public: + AZ_RTTI(PrefabDomDataJsonSerializer, "{9FC48652-A00B-4EFA-8FD9-345A8E625439}", BaseJsonSerializer); + AZ_CLASS_ALLOCATOR(PrefabDomDataJsonSerializer, AZ::SystemAllocator, 0); + + ~PrefabDomDataJsonSerializer() override = default; + + AZ::JsonSerializationResult::Result Load( + void* outputValue, + const AZ::Uuid& outputValueTypeId, + const rapidjson::Value& inputValue, + AZ::JsonDeserializerContext& context) override; + + AZ::JsonSerializationResult::Result Store( + rapidjson::Value& outputValue, + const void* inputValue, + const void* defaultValue, + const AZ::Uuid& valueTypeId, + AZ::JsonSerializerContext& context) override; + }; + + //! An asset type to register templates into the Prefab system so that they + //! can instantiate like Authored Prefabs + class ProceduralPrefabAsset + : public AZ::Data::AssetData + { + public: + AZ_CLASS_ALLOCATOR(ProceduralPrefabAsset, AZ::SystemAllocator, 0); + AZ_RTTI(ProceduralPrefabAsset, "{9B7C8459-471E-4EAD-A363-7990CC4065A9}", AZ::Data::AssetData); + + static bool UseProceduralPrefabs(); + + ProceduralPrefabAsset(const AZ::Data::AssetId& assetId = AZ::Data::AssetId()); + ~ProceduralPrefabAsset() override = default; + ProceduralPrefabAsset(const ProceduralPrefabAsset& rhs) = delete; + ProceduralPrefabAsset& operator=(const ProceduralPrefabAsset& rhs) = delete; + + const AZStd::string& GetTemplateName() const; + void SetTemplateName(AZStd::string templateName); + + AzToolsFramework::Prefab::TemplateId GetTemplateId() const; + void SetTemplateId(AzToolsFramework::Prefab::TemplateId templateId); + + static void Reflect(AZ::ReflectContext* context); + + private: + AZStd::string m_templateName; + AzToolsFramework::Prefab::TemplateId m_templateId; + }; + +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.cpp new file mode 100644 index 0000000000..bee8a8bc3b --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace AzToolsFramework::Prefab +{ + void ScriptingPrefabLoader::Connect(PrefabLoaderInterface* prefabLoaderInterface) + { + AZ_Assert(prefabLoaderInterface, "prefabLoaderInterface must not be null"); + + m_prefabLoaderInterface = prefabLoaderInterface; + PrefabLoaderScriptingBus::Handler::BusConnect(); + } + + void ScriptingPrefabLoader::Disconnect() + { + PrefabLoaderScriptingBus::Handler::BusDisconnect(); + } + + AZ::Outcome ScriptingPrefabLoader::SaveTemplateToString(TemplateId templateId) + { + AZStd::string json; + + if (m_prefabLoaderInterface->SaveTemplateToString(templateId, json)) + { + return AZ::Success(json); + } + + return AZ::Failure(); + } +} // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.h new file mode 100644 index 0000000000..ec6219909e --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + /** + * The Scripting Prefab Loader handles scripting-friendly API requests for the prefab loader + */ + class ScriptingPrefabLoader + : private PrefabLoaderScriptingBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(ScriptingPrefabLoader, AZ::SystemAllocator, 0); + AZ_RTTI(ScriptingPrefabLoader, "{ABC3C989-4D4F-41E7-B25B-B0FEF97177E6}"); + + void Connect(PrefabLoaderInterface* prefabLoaderInterface); + void Disconnect(); + + private: + + ////////////////////////////////////////////////////////////////////////// + // PrefabLoaderRequestBus implementation + AZ::Outcome SaveTemplateToString(TemplateId templateId) override; + ////////////////////////////////////////////////////////////////////////// + + PrefabLoaderInterface* m_prefabLoaderInterface = nullptr; + }; + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Spawnable/PrefabConversionPipeline.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Spawnable/PrefabConversionPipeline.cpp index 8e0d7fcd42..ac3ada7557 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Spawnable/PrefabConversionPipeline.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Spawnable/PrefabConversionPipeline.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/PropertyTreeEditor/PropertyTreeEditor.h b/Code/Framework/AzToolsFramework/AzToolsFramework/PropertyTreeEditor/PropertyTreeEditor.h index 7e416c3cc0..648a39fe76 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/PropertyTreeEditor/PropertyTreeEditor.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/PropertyTreeEditor/PropertyTreeEditor.h @@ -12,6 +12,7 @@ #include #include +#include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp index 36f647e4c2..99d0768cf6 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -78,13 +79,9 @@ namespace AzToolsFramework AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(entitiesAndDescendants, &AzToolsFramework::ToolsApplicationRequestBus::Events::GatherEntitiesAndAllDescendents, AzToolsFramework::EntityIdList{ entityId }); - // Retrieve the game folder so we can use that as a root with the passed in relative path - const char* gameFolder = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(gameFolder, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); - // Join our relative path with the game folder to get a full path to the desired asset - AZStd::string assetFullPath; - AzFramework::StringFunc::Path::Join(gameFolder, assetPath, assetFullPath); + AZ::IO::FixedMaxPath assetFullPath = AZ::Utils::GetProjectPath(); + assetFullPath /= assetPath; // Call SliceUtilities::MakeNewSlice with all user input prompts disabled bool success = AzToolsFramework::SliceUtilities::MakeNewSlice(entitiesAndDescendants, diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp index d8b5fe0a15..9d2c58a717 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp @@ -718,7 +718,7 @@ namespace AzToolsFramework if (!fullPathFound) { - assetFullPath = AZStd::string::format("@devassets@/%s", sliceAssetPath.c_str()); + assetFullPath = AZStd::string::format("@projectroot@/%s", sliceAssetPath.c_str()); } return Commit(assetFullPath.c_str(), preSaveCallback, postSaveCallback, sliceCommitFlags); @@ -1020,13 +1020,13 @@ namespace AzToolsFramework AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); AZ_Assert(fileIO, "File IO is not initialized."); - AZStd::string devAssetPath = fileIO->GetAlias("@devassets@"); + AZStd::string devAssetPath = fileIO->GetAlias("@projectroot@"); AZStd::string userPath = fileIO->GetAlias("@user@"); AZStd::string tempPath = fullPath; EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, devAssetPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, userPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, tempPath); - AzFramework::StringFunc::Replace(tempPath, "@devassets@", devAssetPath.c_str()); + AzFramework::StringFunc::Replace(tempPath, "@projectroot@", devAssetPath.c_str()); AzFramework::StringFunc::Replace(tempPath, devAssetPath.c_str(), userPath.c_str()); tempPath.append(".slicetemp"); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/SourceControl/SourceControlAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/SourceControl/SourceControlAPI.h index df9b136752..5eb4a31ffb 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/SourceControl/SourceControlAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/SourceControl/SourceControlAPI.h @@ -10,6 +10,7 @@ #include #include +#include #include namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp index cca0071a4d..01b1213473 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp @@ -7,6 +7,7 @@ */ #include "EditorLayerComponent.h" #include +#include #include #include #include @@ -377,11 +378,11 @@ namespace AzToolsFramework // If this layer is being loaded, it won't have a level save dependency yet, so clear that flag. m_mustSaveLevelWhenLayerSaves = false; QString fullPathName = levelPakFile; - if (fullPathName.contains("@devassets@")) + if (fullPathName.contains("@projectroot@")) { AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); // Resolving the path through resolvepath would normalize and lowcase it, and in this case, we don't want that. - fullPathName.replace("@devassets@", fileIO->GetAlias("@devassets@")); + fullPathName.replace("@projectroot@", fileIO->GetAlias("@projectroot@")); } QFileInfo fileNameInfo(fullPathName); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp index cc350c8107..be29af5c0f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp index a0da20ebf0..3cdcade1b0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp @@ -37,51 +37,71 @@ namespace AzToolsFramework return m_handlerId; } - QString EditorEntityUiHandlerBase::GenerateItemInfoString(AZ::EntityId /*entityId*/) const + QString EditorEntityUiHandlerBase::GenerateItemInfoString([[maybe_unused]] AZ::EntityId entityId) const { return QString(); } - QString EditorEntityUiHandlerBase::GenerateItemTooltip(AZ::EntityId /*entityId*/) const + QString EditorEntityUiHandlerBase::GenerateItemTooltip([[maybe_unused]] AZ::EntityId entityId) const { return QString(); } - QIcon EditorEntityUiHandlerBase::GenerateItemIcon(AZ::EntityId /*entityId*/) const + QIcon EditorEntityUiHandlerBase::GenerateItemIcon([[maybe_unused]] AZ::EntityId entityId) const { return QIcon(); } - bool EditorEntityUiHandlerBase::CanToggleLockVisibility(AZ::EntityId /*entityId*/) const + bool EditorEntityUiHandlerBase::CanToggleLockVisibility([[maybe_unused]] AZ::EntityId entityId) const { return true; } - bool EditorEntityUiHandlerBase::CanRename(AZ::EntityId /*entityId*/) const + bool EditorEntityUiHandlerBase::CanRename([[maybe_unused]] AZ::EntityId entityId) const { return true; } - void EditorEntityUiHandlerBase::PaintItemBackground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/) const + void EditorEntityUiHandlerBase::PaintItemBackground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index) const { } - void EditorEntityUiHandlerBase::PaintDescendantBackground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/, - const QModelIndex& /*descendantIndex*/) const + void EditorEntityUiHandlerBase::PaintDescendantBackground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index, + [[maybe_unused]] const QModelIndex& descendantIndex) const { } - void EditorEntityUiHandlerBase::PaintDescendantBranchBackground(QPainter* /*painter*/, const QTreeView* /*view*/, const QRect& /*rect*/, - const QModelIndex& /*index*/, const QModelIndex& /*descendantIndex*/) const + void EditorEntityUiHandlerBase::PaintDescendantBranchBackground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QTreeView* view, + [[maybe_unused]] const QRect& rect, + [[maybe_unused]] const QModelIndex& index, + [[maybe_unused]] const QModelIndex& descendantIndex) const { } - void EditorEntityUiHandlerBase::PaintItemForeground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/) const + void EditorEntityUiHandlerBase::PaintItemForeground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index) const { } - void EditorEntityUiHandlerBase::PaintDescendantForeground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/, - const QModelIndex& /*descendantIndex*/) const + void EditorEntityUiHandlerBase::PaintDescendantForeground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index, + [[maybe_unused]] const QModelIndex& descendantIndex) const + { + } + + void EditorEntityUiHandlerBase::OnDoubleClick([[maybe_unused]] AZ::EntityId entityId) const { } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h index c37b099272..9554ad01fc 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h @@ -61,6 +61,9 @@ namespace AzToolsFramework virtual void PaintDescendantForeground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index, const QModelIndex& descendantIndex) const; + //! Triggered when the entity is double clicked in the Outliner. + virtual void OnDoubleClick(AZ::EntityId entityId) const; + private: EditorEntityUiHandlerId m_handlerId = 0; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp index 90f8e1d121..234696ff2a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp @@ -82,10 +82,13 @@ namespace AzToolsFramework , m_entityExpansionState() , m_entityFilteredState() { + m_focusModeInterface = AZ::Interface::Get(); + AZ_Assert(m_focusModeInterface != nullptr, "EntityOutlinerListModel requires a FocusModeInterface instance on construction."); } EntityOutlinerListModel::~EntityOutlinerListModel() { + ContainerEntityNotificationBus::Handler::BusDisconnect(); EditorEntityInfoNotificationBus::Handler::BusDisconnect(); EditorEntityContextNotificationBus::Handler::BusDisconnect(); ToolsApplicationEvents::Bus::Handler::BusDisconnect(); @@ -103,14 +106,15 @@ namespace AzToolsFramework EntityCompositionNotificationBus::Handler::BusConnect(); AZ::EntitySystemBus::Handler::BusConnect(); + AzFramework::EntityContextId editorEntityContextId = AzFramework::EntityContextId::CreateNull(); + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + editorEntityContextId, &AzToolsFramework::EditorEntityContextRequestBus::Events::GetEditorEntityContextId); + + ContainerEntityNotificationBus::Handler::BusConnect(editorEntityContextId); + m_editorEntityUiInterface = AZ::Interface::Get(); AZ_Assert(m_editorEntityUiInterface != nullptr, "EntityOutlinerListModel requires a EditorEntityUiInterface instance on Initialize."); - - m_focusModeInterface = AZ::Interface::Get(); - AZ_Assert( - m_focusModeInterface != nullptr, - "EntityOutlinerListModel requires a FocusModeInterface instance on Initialize."); } int EntityOutlinerListModel::rowCount(const QModelIndex& parent) const @@ -1336,18 +1340,35 @@ namespace AzToolsFramework emit EnableSelectionUpdates(true); } - void EntityOutlinerListModel::OnEntityRuntimeActivationChanged(AZ::EntityId entityId, bool activeOnStart) + void EntityOutlinerListModel::OnEntityRuntimeActivationChanged(AZ::EntityId entityId, [[maybe_unused]] bool activeOnStart) { - AZ_UNUSED(activeOnStart); QueueEntityUpdate(entityId); } + void EntityOutlinerListModel::OnContainerEntityStatusChanged(AZ::EntityId entityId, [[maybe_unused]] bool open) + { + QModelIndex changedIndex = GetIndexFromEntity(entityId); + + // Trigger a refresh of all direct children so that they can be shown or hidden appropriately. + int numChildren = rowCount(changedIndex); + if (numChildren > 0) + { + emit dataChanged(index(0, 0, changedIndex), index(numChildren - 1, ColumnCount - 1, changedIndex)); + } + + // Always expand containers + QueueEntityToExpand(entityId, true); + } + void EntityOutlinerListModel::OnEntityInfoUpdatedRemoveChildBegin([[maybe_unused]] AZ::EntityId parentId, [[maybe_unused]] AZ::EntityId childId) { //add/remove operations trigger selection change signals which assert and break undo/redo operations in progress in inspector etc. //so disallow selection updates until change is complete emit EnableSelectionUpdates(false); - beginResetModel(); + + auto parentIndex = GetIndexFromEntity(parentId); + auto childIndex = GetIndexFromEntity(childId); + beginRemoveRows(parentIndex, childIndex.row(), childIndex.row()); } void EntityOutlinerListModel::OnEntityInfoUpdatedRemoveChildEnd(AZ::EntityId parentId, AZ::EntityId childId) @@ -1355,7 +1376,7 @@ namespace AzToolsFramework (void)childId; AZ_PROFILE_FUNCTION(AzToolsFramework); - endResetModel(); + endRemoveRows(); //must refresh partial lock/visibility of parents m_isFilterDirty = true; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx index 4b13aa6d27..7b946c6304 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -54,6 +55,7 @@ namespace AzToolsFramework , private EntityCompositionNotificationBus::Handler , private EditorEntityRuntimeActivationChangeNotificationBus::Handler , private AZ::EntitySystemBus::Handler + , private ContainerEntityNotificationBus::Handler { Q_OBJECT; @@ -216,6 +218,9 @@ namespace AzToolsFramework // EditorEntityRuntimeActivationChangeNotificationBus::Handler void OnEntityRuntimeActivationChanged(AZ::EntityId entityId, bool activeOnStart) override; + // ContainerEntityNotificationBus overrides ... + void OnContainerEntityStatusChanged(AZ::EntityId entityId, bool open) override; + // Drag/Drop of components from Component Palette. bool dropMimeDataComponentPalette(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp index 841a01f5e5..600ca284f4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp @@ -11,6 +11,8 @@ #include #include +#include + #include "EntityOutlinerListModel.hxx" namespace AzToolsFramework @@ -19,6 +21,10 @@ namespace AzToolsFramework EntityOutlinerSortFilterProxyModel::EntityOutlinerSortFilterProxyModel(QObject* pParent) : QSortFilterProxyModel(pParent) { + m_containerEntityInterface = AZ::Interface::Get(); + AZ_Assert( + m_containerEntityInterface != nullptr, + "EntityOutlinerContainerProxyModel requires a ContainerEntityInterface instance on construction."); } void EntityOutlinerSortFilterProxyModel::UpdateFilter() @@ -26,8 +32,24 @@ namespace AzToolsFramework invalidateFilter(); } + void EntityOutlinerSortFilterProxyModel::setSourceModel(QAbstractItemModel* sourceModel) + { + QSortFilterProxyModel::setSourceModel(sourceModel); + + m_listModel = qobject_cast(sourceModel); + AZ_Assert(m_listModel != nullptr, "EntityOutlinerContainerProxyModel requires an EntityOutlinerListModel as its source ."); + } + bool EntityOutlinerSortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const { + // Retrieve the entityId of the parent entity + AZ::EntityId parentEntityId = m_listModel->GetEntityFromIndex(sourceParent); + + if(!m_containerEntityInterface->IsContainerOpen(parentEntityId)) + { + return false; + } + QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); QVariant visibilityData = sourceModel()->data(index, EntityOutlinerListModel::VisibilityRole); return visibilityData.isValid() ? visibilityData.toBool() : true; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx index b7e1a3f869..c6e1410688 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx @@ -19,11 +19,12 @@ namespace AzToolsFramework { + class ContainerEntityInterface; + class EntityOutlinerListModel; - /*! - * Enables the Outliner to filter entries based on search string. - * Enables the Outliner to do custom sorting on entries. - */ + //! Enables the Outliner to filter entries based on search string. + //! Enables the Outliner to do custom sorting on entries. + //! Enforces the correct rendering for container entities. class EntityOutlinerSortFilterProxyModel : public QSortFilterProxyModel { @@ -37,12 +38,15 @@ namespace AzToolsFramework void UpdateFilter(); // Qt overrides + void setSourceModel(QAbstractItemModel* sourceModel) override; bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override; bool lessThan(const QModelIndex& left, const QModelIndex& right) const override; void sort(int column, Qt::SortOrder order) override; private: QString m_filterName; + EntityOutlinerListModel* m_listModel = nullptr; + ContainerEntityInterface* m_containerEntityInterface = nullptr; }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.cpp index 2d20ac7364..4364ae1efc 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.cpp @@ -39,11 +39,20 @@ namespace AzToolsFramework AZ_Assert((m_editorEntityFrameworkInterface != nullptr), "EntityOutlinerTreeView requires a EditorEntityFrameworkInterface instance on Construction."); + + AzFramework::EntityContextId editorEntityContextId = AzFramework::EntityContextId::CreateNull(); + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + editorEntityContextId, &AzToolsFramework::EditorEntityContextRequestBus::Events::GetEditorEntityContextId); + + FocusModeNotificationBus::Handler::BusConnect(editorEntityContextId); + viewport()->setMouseTracking(true); } EntityOutlinerTreeView::~EntityOutlinerTreeView() { + FocusModeNotificationBus::Handler::BusDisconnect(); + ClearQueuedMouseEvent(); } @@ -303,6 +312,11 @@ namespace AzToolsFramework StyledTreeView::StartCustomDrag(indexListSorted, supportedActions); } + + void EntityOutlinerTreeView::OnEditorFocusChanged([[maybe_unused]] AZ::EntityId entityId) + { + viewport()->repaint(); + } } #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.hxx index 5b0134366b..2ddbaaafa9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerTreeView.hxx @@ -15,6 +15,7 @@ #include #include +#include #include #endif @@ -35,6 +36,7 @@ namespace AzToolsFramework //! of other entities. If the selection updates instantly, this would never be possible. class EntityOutlinerTreeView : public AzQtComponents::StyledTreeView + , private FocusModeNotificationBus::Handler { Q_OBJECT; public: @@ -61,6 +63,9 @@ namespace AzToolsFramework void dropEvent(QDropEvent* event) override; void leaveEvent(QEvent* event) override; + // FocusModeNotificationBus overrides ... + void OnEditorFocusChanged(AZ::EntityId entityId) override; + //! Renders the left side of the item: appropriate background, branch lines, icons. void drawBranches(QPainter* painter, const QRect& rect, const QModelIndex& index) const override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp index 4db235d073..8f90d2c0d7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp @@ -198,6 +198,7 @@ namespace AzToolsFramework m_proxyModel = aznew EntityOutlinerSortFilterProxyModel(this); m_proxyModel->setSourceModel(m_listModel); + m_gui->m_objectTree->setModel(m_proxyModel); // Link up signals for informing the model of tree changes using the proxy as an intermediary @@ -232,6 +233,9 @@ namespace AzToolsFramework m_gui->m_objectTree->header()->setSortIndicatorShown(false); m_gui->m_objectTree->header()->setStretchLastSection(false); + // Always expand root entity (level entity) - needed if the widget is re-created while a level is already open. + m_gui->m_objectTree->expand(m_proxyModel->index(0, 0)); + // resize the icon columns so that the Visibility and Lock toggle icon columns stay right-justified m_gui->m_objectTree->header()->setStretchLastSection(false); m_gui->m_objectTree->header()->setMinimumSectionSize(0); @@ -902,8 +906,12 @@ namespace AzToolsFramework } } - void EntityOutlinerWidget::OnTreeItemDoubleClicked(const QModelIndex& /*index*/) + void EntityOutlinerWidget::OnTreeItemDoubleClicked(const QModelIndex& index) { + if (AZ::EntityId entityId = GetEntityIdFromIndex(index); auto entityUiHandler = m_editorEntityUiInterface->GetHandler(entityId)) + { + entityUiHandler->OnDoubleClick(entityId); + } } void EntityOutlinerWidget::OnTreeItemExpanded(const QModelIndex& index) @@ -1139,7 +1147,7 @@ namespace AzToolsFramework { QTimer::singleShot(1, this, [this]() { m_gui->m_objectTree->setUpdatesEnabled(true); - m_gui->m_objectTree->expand(m_proxyModel->index(0,0)); + m_gui->m_objectTree->expandToDepth(0); }); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx index 78aced3587..78927359f2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx @@ -41,6 +41,7 @@ namespace AzToolsFramework { class EditorEntityUiInterface; class EntityOutlinerListModel; + class EntityOutlinerContainerProxyModel; class EntityOutlinerSortFilterProxyModel; namespace EntityOutliner @@ -117,6 +118,7 @@ namespace AzToolsFramework Ui::EntityOutlinerWidgetUI* m_gui; EntityOutlinerListModel* m_listModel; + EntityOutlinerContainerProxyModel* m_containerModel; EntityOutlinerSortFilterProxyModel* m_proxyModel; AZ::u64 m_selectionContextId; AZStd::vector m_selectedEntityIds; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp index 9b7f2fff10..d4b227c4ff 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -22,8 +23,12 @@ #include #include #include +#include #include #include +#include +#include +#include #include #include #include @@ -56,7 +61,7 @@ namespace AzToolsFramework { namespace Prefab { - + ContainerEntityInterface* PrefabIntegrationManager::s_containerEntityInterface = nullptr; EditorEntityUiInterface* PrefabIntegrationManager::s_editorEntityUiInterface = nullptr; PrefabFocusInterface* PrefabIntegrationManager::s_prefabFocusInterface = nullptr; PrefabLoaderInterface* PrefabIntegrationManager::s_prefabLoaderInterface = nullptr; @@ -89,6 +94,13 @@ namespace AzToolsFramework PrefabIntegrationManager::PrefabIntegrationManager() { + s_containerEntityInterface = AZ::Interface::Get(); + if (s_containerEntityInterface == nullptr) + { + AZ_Assert(false, "Prefab - could not get ContainerEntityInterface on PrefabIntegrationManager construction."); + return; + } + s_editorEntityUiInterface = AZ::Interface::Get(); if (s_editorEntityUiInterface == nullptr) { @@ -210,6 +222,16 @@ namespace AzToolsFramework instantiateAction, &QAction::triggered, instantiateAction, [] { ContextMenu_InstantiatePrefab(); }); } + // Instantiate Procedural Prefab + if (AZ::Prefab::ProceduralPrefabAsset::UseProceduralPrefabs()) + { + QAction* action = menu->addAction(QObject::tr("Instantiate Procedural Prefab...")); + action->setToolTip(QObject::tr("Instantiates a procedural prefab file in a prefab.")); + + QObject::connect( + action, &QAction::triggered, action, [] { ContextMenu_InstantiateProceduralPrefab(); }); + } + menu->addSeparator(); bool itemWasShown = false; @@ -307,7 +329,7 @@ namespace AzToolsFramework // temporarily null after QFileDialogs close, which we need in order to // be able to parent our message dialogs properly QWidget* activeWindow = QApplication::activeWindow(); - const AZStd::string prefabFilesPath = "@devassets@/Prefabs"; + const AZStd::string prefabFilesPath = "@projectroot@/Prefabs"; // Remove Level entity if it's part of the list @@ -427,6 +449,38 @@ namespace AzToolsFramework } } + void PrefabIntegrationManager::ContextMenu_InstantiateProceduralPrefab() + { + AZStd::string prefabAssetPath; + bool hasUserForProceduralPrefabAsset = QueryUserForProceduralPrefabAsset(prefabAssetPath); + + if (hasUserForProceduralPrefabAsset) + { + AZ::EntityId parentId; + AZ::Vector3 position = AZ::Vector3::CreateZero(); + + EntityIdList selectedEntities; + ToolsApplicationRequestBus::BroadcastResult(selectedEntities, &ToolsApplicationRequests::GetSelectedEntities); + if (selectedEntities.size() == 1) + { + parentId = selectedEntities.front(); + AZ::TransformBus::EventResult(position, parentId, &AZ::TransformInterface::GetWorldTranslation); + } + else + { + // otherwise return since it needs to be inside an authored prefab + return; + } + + // Instantiating from context menu always puts the instance at the root level + auto createPrefabOutcome = s_prefabPublicInterface->InstantiatePrefab(prefabAssetPath, parentId, position); + if (!createPrefabOutcome.IsSuccess()) + { + WarnUserOfError("Prefab Instantiation Error", createPrefabOutcome.GetError()); + } + } + } + void PrefabIntegrationManager::ContextMenu_EditPrefab(AZ::EntityId containerEntity) { s_prefabFocusInterface->FocusOnOwningPrefab(containerEntity); @@ -682,6 +736,33 @@ namespace AzToolsFramework return true; } + bool PrefabIntegrationManager::QueryUserForProceduralPrefabAsset(AZStd::string& outPrefabAssetPath) + { + using namespace AzToolsFramework; + auto selection = AssetBrowser::AssetSelectionModel::AssetTypeSelection(azrtti_typeid()); + EditorRequests::Bus::Broadcast(&AzToolsFramework::EditorRequests::BrowseForAssets, selection); + + if (!selection.IsValid()) + { + return false; + } + + auto product = azrtti_cast(selection.GetResult()); + if (product == nullptr) + { + return false; + } + + outPrefabAssetPath = product->GetRelativePath(); + + auto asset = AZ::Data::AssetManager::Instance().GetAsset( + product->GetAssetId(), + azrtti_typeid(), + AZ::Data::AssetLoadBehavior::Default); + + return asset.BlockUntilLoadComplete() != AZ::Data::AssetData::AssetStatus::Error; + } + void PrefabIntegrationManager::WarnUserOfError(AZStd::string_view title, AZStd::string_view message) { QWidget* activeWindow = QApplication::activeWindow(); @@ -1057,6 +1138,7 @@ namespace AzToolsFramework void PrefabIntegrationManager::OnPrefabComponentActivate(AZ::EntityId entityId) { + // Register entity to appropriate UI Handler for UI overrides if (s_prefabPublicInterface->IsLevelInstanceContainerEntity(entityId)) { s_editorEntityUiInterface->RegisterEntity(entityId, m_levelRootUiHandler.GetHandlerId()); @@ -1064,11 +1146,32 @@ namespace AzToolsFramework else { s_editorEntityUiInterface->RegisterEntity(entityId, m_prefabUiHandler.GetHandlerId()); + + bool prefabWipFeaturesEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + prefabWipFeaturesEnabled, &AzFramework::ApplicationRequests::ArePrefabWipFeaturesEnabled); + + if (prefabWipFeaturesEnabled) + { + // Register entity as a container + s_containerEntityInterface->RegisterEntityAsContainer(entityId); + } } } void PrefabIntegrationManager::OnPrefabComponentDeactivate(AZ::EntityId entityId) { + bool prefabWipFeaturesEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + prefabWipFeaturesEnabled, &AzFramework::ApplicationRequests::ArePrefabWipFeaturesEnabled); + + if (prefabWipFeaturesEnabled && !s_prefabPublicInterface->IsLevelInstanceContainerEntity(entityId)) + { + // Unregister entity as a container + s_containerEntityInterface->UnregisterEntityAsContainer(entityId); + } + + // Unregister entity from UI Handler s_editorEntityUiInterface->UnregisterEntity(entityId); } @@ -1160,7 +1263,7 @@ namespace AzToolsFramework AZStd::string unsavedPrefabFileName = unsavedPrefabFileLabel->property("FilePath").toString().toUtf8().data(); AzToolsFramework::Prefab::TemplateId unsavedPrefabTemplateId = s_prefabSystemComponentInterface->GetTemplateIdFromFilePath(unsavedPrefabFileName.data()); - bool isTemplateSavedSuccessfully = s_prefabLoaderInterface->SaveTemplate(unsavedPrefabTemplateId); + [[maybe_unused]] bool isTemplateSavedSuccessfully = s_prefabLoaderInterface->SaveTemplate(unsavedPrefabTemplateId); AZ_Error("Prefab", isTemplateSavedSuccessfully, "Prefab '%s' could not be saved successfully.", unsavedPrefabFileName.c_str()); } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h index 6f66b1f514..696c05991c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h @@ -26,6 +26,8 @@ namespace AzToolsFramework { + class ContainerEntityInterface; + namespace Prefab { class PrefabFocusInterface; @@ -89,6 +91,7 @@ namespace AzToolsFramework // Context menu item handlers static void ContextMenu_CreatePrefab(AzToolsFramework::EntityIdList selectedEntities); static void ContextMenu_InstantiatePrefab(); + static void ContextMenu_InstantiateProceduralPrefab(); static void ContextMenu_EditPrefab(AZ::EntityId containerEntity); static void ContextMenu_SavePrefab(AZ::EntityId containerEntity); static void ContextMenu_DeleteSelected(); @@ -99,6 +102,7 @@ namespace AzToolsFramework const AZStd::string& suggestedName, const char* initialTargetDirectory, AZ::u32 prefabUserSettingsId, QWidget* activeWindow, AZStd::string& outPrefabName, AZStd::string& outPrefabFilePath); static bool QueryUserForPrefabFilePath(AZStd::string& outPrefabFilePath); + static bool QueryUserForProceduralPrefabAsset(AZStd::string& outPrefabAssetPath); static void WarnUserOfError(AZStd::string_view title, AZStd::string_view message); // Path and filename generation @@ -134,6 +138,7 @@ namespace AzToolsFramework static const AZStd::string s_prefabFileExtension; + static ContainerEntityInterface* s_containerEntityInterface; static EditorEntityUiInterface* s_editorEntityUiInterface; static PrefabFocusInterface* s_prefabFocusInterface; static PrefabLoaderInterface* s_prefabLoaderInterface; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp index c802850c4b..7d1f3485aa 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp @@ -8,6 +8,8 @@ #include +#include + #include #include #include @@ -317,4 +319,17 @@ namespace AzToolsFramework return Internal_GetLastVisibleChild(model, lastChild); } + + void PrefabUiHandler::OnDoubleClick(AZ::EntityId entityId) const + { + bool prefabWipFeaturesEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + prefabWipFeaturesEnabled, &AzFramework::ApplicationRequests::ArePrefabWipFeaturesEnabled); + + if (prefabWipFeaturesEnabled) + { + // Focus on this prefab + m_prefabFocusInterface->FocusOnOwningPrefab(entityId); + } + } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h index 547c100eb1..bb7168f409 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h @@ -29,13 +29,14 @@ namespace AzToolsFramework PrefabUiHandler(); ~PrefabUiHandler() override = default; - // EditorEntityUiHandler... + // EditorEntityUiHandler overrides ... QString GenerateItemInfoString(AZ::EntityId entityId) const override; QString GenerateItemTooltip(AZ::EntityId entityId) const override; QIcon GenerateItemIcon(AZ::EntityId entityId) const override; void PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; void PaintDescendantBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index, const QModelIndex& descendantIndex) const override; + void OnDoubleClick(AZ::EntityId entityId) const override; private: Prefab::PrefabFocusInterface* m_prefabFocusInterface = nullptr; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabViewportFocusPathHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabViewportFocusPathHandler.cpp new file mode 100644 index 0000000000..6b0de5dc53 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabViewportFocusPathHandler.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include + +namespace AzToolsFramework::Prefab +{ + PrefabViewportFocusPathHandler::PrefabViewportFocusPathHandler() + { + // Get default EntityContextId + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + m_editorEntityContextId, &AzToolsFramework::EditorEntityContextRequestBus::Events::GetEditorEntityContextId); + + // Connect to Prefab Focus Notifications + PrefabFocusNotificationBus::Handler::BusConnect(m_editorEntityContextId); + } + + PrefabViewportFocusPathHandler::~PrefabViewportFocusPathHandler() + { + // Disconnect from Prefab Focus Notifications + PrefabFocusNotificationBus::Handler::BusDisconnect(); + } + + void PrefabViewportFocusPathHandler::Initialize(AzQtComponents::BreadCrumbs* breadcrumbsWidget, QToolButton* backButton) + { + // Get reference to the PrefabFocusInterface handler + m_prefabFocusInterface = AZ::Interface::Get(); + if (m_prefabFocusInterface == nullptr) + { + AZ_Assert(false, "Prefab - could not get PrefabFocusInterface on PrefabViewportFocusPathHandler construction."); + return; + } + + // Initialize Widgets + m_breadcrumbsWidget = breadcrumbsWidget; + m_backButton = backButton; + + // If a part of the path is clicked, focus on that instance + connect(m_breadcrumbsWidget, &AzQtComponents::BreadCrumbs::linkClicked, this, + [&](const QString&, int linkIndex) + { + m_prefabFocusInterface->FocusOnPathIndex(m_editorEntityContextId, linkIndex); + } + ); + + // The back button will allow user to go one level up + connect(m_backButton, &QToolButton::clicked, this, + [&]() + { + if (int length = m_prefabFocusInterface->GetPrefabFocusPathLength(m_editorEntityContextId); length > 1) + { + m_prefabFocusInterface->FocusOnPathIndex(m_editorEntityContextId, length - 2); + } + } + ); + } + + void PrefabViewportFocusPathHandler::OnPrefabFocusChanged() + { + // Push new Path + m_breadcrumbsWidget->pushPath(m_prefabFocusInterface->GetPrefabFocusPath(m_editorEntityContextId).c_str()); + } + +} // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabViewportFocusPathHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabViewportFocusPathHandler.h new file mode 100644 index 0000000000..ce7744fb1b --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabViewportFocusPathHandler.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +#include + +#include +#include + +namespace AzToolsFramework::Prefab +{ + class PrefabFocusInterface; + + class PrefabViewportFocusPathHandler + : public PrefabFocusNotificationBus::Handler + , private QObject + { + public: + PrefabViewportFocusPathHandler(); + ~PrefabViewportFocusPathHandler(); + + void Initialize(AzQtComponents::BreadCrumbs* breadcrumbsWidget, QToolButton* backButton); + + // PrefabFocusNotificationBus overrides ... + void OnPrefabFocusChanged() override; + + private: + AzQtComponents::BreadCrumbs* m_breadcrumbsWidget = nullptr; + QToolButton* m_backButton = nullptr; + + AzFramework::EntityContextId m_editorEntityContextId = AzFramework::EntityContextId::CreateNull(); + + PrefabFocusInterface* m_prefabFocusInterface = nullptr; + }; +} // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp index c07191fda2..ba84e662c1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp @@ -33,6 +33,7 @@ AZ_POP_DISABLE_WARNING #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx index 33619f9f62..cc4aff5649 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx @@ -16,6 +16,7 @@ #include #include "PropertyEditorAPI.h" #include +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEntityIdCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEntityIdCtrl.cpp index f98638fd69..7a9a5a4d7a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEntityIdCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEntityIdCtrl.cpp @@ -119,11 +119,12 @@ namespace AzToolsFramework // replace the default input handler with one specific for dealing with // entity selection in the viewport + EditorInteractionSystemViewportSelectionRequestBus::Event( GetEntityContextId(), &EditorInteractionSystemViewportSelection::SetHandler, - [](const EditorVisibleEntityDataCache* entityDataCache) + [](const EditorVisibleEntityDataCache* entityDataCache, ViewportEditorModeTrackerInterface* viewportEditorModeTracker) { - return AZStd::make_unique(entityDataCache); + return AZStd::make_unique(entityDataCache, viewportEditorModeTracker); }); if (!pickModeEntityContextId.IsNull()) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp index 9ba998b99a..bb2d2851ca 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp @@ -1102,10 +1102,7 @@ namespace AzToolsFramework { m_dropDownArrow->hide(); } - m_indent->changeSize((m_treeDepth * m_treeIndentation) + m_leafIndentation, 1, QSizePolicy::Fixed, QSizePolicy::Fixed); - m_leftHandSideLayout->invalidate(); - m_leftHandSideLayout->update(); - m_leftHandSideLayout->activate(); + SetIndentSize(m_treeDepth * m_treeIndentation + m_leafIndentation); } else { @@ -1117,10 +1114,7 @@ namespace AzToolsFramework connect(m_dropDownArrow, &QCheckBox::clicked, this, &PropertyRowWidget::OnClickedExpansionButton); } m_dropDownArrow->show(); - m_indent->changeSize((m_treeDepth * m_treeIndentation), 1, QSizePolicy::Fixed, QSizePolicy::Fixed); - m_leftHandSideLayout->invalidate(); - m_leftHandSideLayout->update(); - m_leftHandSideLayout->activate(); + SetIndentSize(m_treeDepth * m_treeIndentation); m_dropDownArrow->setChecked(m_expanded); } } @@ -1720,10 +1714,9 @@ namespace AzToolsFramework } else { - m_indicatorButton->setVisible(true); - QPixmap pixmap(imagePath); m_indicatorButton->setIcon(pixmap); + m_indicatorButton->setVisible(true); }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc index 7dcc593d5a..621f9be4ad 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc @@ -1,5 +1,6 @@ + blank.png point_hand.png cross-circle-small.png cross-small.png diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/blank.png b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/blank.png new file mode 100644 index 0000000000..d040fa2e14 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/blank.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81b5fa1f978888c3be8a40fce20455668df2723a77587aeb7039f8bf74bdd0e3 +size 119 diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h index b3a660d0f2..c4aefecce5 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -166,11 +167,12 @@ namespace UnitTest m_editorActions.Connect(); const auto viewportHandlerBuilder = - [this](const AzToolsFramework::EditorVisibleEntityDataCache* entityDataCache) + [this](const AzToolsFramework::EditorVisibleEntityDataCache* entityDataCache, + [[maybe_unused]] AzToolsFramework::ViewportEditorModeTrackerInterface* viewportEditorModeTracker) { // create the default viewport (handles ComponentMode) AZStd::unique_ptr defaultSelection = - AZStd::make_unique(entityDataCache); + AZStd::make_unique(entityDataCache, viewportEditorModeTracker); // override the phantom widget so we can use out custom test widget defaultSelection->SetOverridePhantomWidget(&m_editorActions.m_componentModeWidget); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp index 7903668409..1ad0ee8ff3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp @@ -9,6 +9,7 @@ #include "EditorDefaultSelection.h" #include +#include #include #include #include @@ -19,21 +20,26 @@ namespace AzToolsFramework { AZ_CLASS_ALLOCATOR_IMPL(EditorDefaultSelection, AZ::SystemAllocator, 0) - EditorDefaultSelection::EditorDefaultSelection(const EditorVisibleEntityDataCache* entityDataCache) + EditorDefaultSelection::EditorDefaultSelection( + const EditorVisibleEntityDataCache* entityDataCache, ViewportEditorModeTrackerInterface* viewportEditorModeTracker) : m_phantomWidget(nullptr) , m_entityDataCache(entityDataCache) + , m_viewportEditorModeTracker(viewportEditorModeTracker) + , m_componentModeCollection(viewportEditorModeTracker) { ActionOverrideRequestBus::Handler::BusConnect(GetEntityContextId()); ComponentModeFramework::ComponentModeSystemRequestBus::Handler::BusConnect(); m_manipulatorManager = AZStd::make_shared(AzToolsFramework::g_mainManipulatorManagerId); m_transformComponentSelection = AZStd::make_unique(entityDataCache); + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Default); } EditorDefaultSelection::~EditorDefaultSelection() { ComponentModeFramework::ComponentModeSystemRequestBus::Handler::BusDisconnect(); ActionOverrideRequestBus::Handler::BusDisconnect(); + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Default); } void EditorDefaultSelection::SetOverridePhantomWidget(QWidget* phantomOverrideWidget) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.h index 5763bf227c..e4c794e99e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.h @@ -15,6 +15,8 @@ namespace AzToolsFramework { + class ViewportEditorModeTrackerInterface; + //! The default selection/input handler for the editor (includes handling ComponentMode). class EditorDefaultSelection : public ViewportInteraction::InternalViewportSelectionRequests @@ -25,7 +27,7 @@ namespace AzToolsFramework AZ_CLASS_ALLOCATOR_DECL //! @cond - explicit EditorDefaultSelection(const EditorVisibleEntityDataCache* entityDataCache); + EditorDefaultSelection(const EditorVisibleEntityDataCache* entityDataCache, ViewportEditorModeTrackerInterface* viewportEditorModeTracker); EditorDefaultSelection(const EditorDefaultSelection&) = delete; EditorDefaultSelection& operator=(const EditorDefaultSelection&) = delete; virtual ~EditorDefaultSelection(); @@ -110,5 +112,7 @@ namespace AzToolsFramework AZStd::shared_ptr m_manipulatorManager; //!< The default manipulator manager. ViewportInteraction::MouseInteraction m_currentInteraction; //!< Current mouse interaction to be used for drawing manipulators. + ViewportEditorModeTrackerInterface* m_viewportEditorModeTracker = nullptr; //!< Tracker for activating/deactivating viewport editor modes. + }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp index 57e6c9ff7a..3ce350287f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp @@ -13,8 +13,9 @@ #include #include #include -#include #include +#include +#include #include #include #include @@ -191,6 +192,14 @@ namespace AzToolsFramework return AZ::EntityId(); } + // Container Entity support - if the entity that is being selected is part of a closed container, + // change the selection to the container instead. + ContainerEntityInterface* containerEntityInterface = AZ::Interface::Get(); + if (containerEntityInterface) + { + return containerEntityInterface->FindHighestSelectableEntity(entityIdUnderCursor); + } + return entityIdUnderCursor; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.cpp index 7002436d13..5d03231aab 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.cpp @@ -10,9 +10,24 @@ #include #include +#include namespace AzToolsFramework { + EditorInteractionSystemComponent::EditorInteractionSystemComponent() + : m_viewportEditorMode(AZStd::make_unique()) + { + AZ_Assert(AZ::Interface::Get() == nullptr, "Unexpected registration of viewport editor mode tracker.") + AZ::Interface::Register(m_viewportEditorMode.get()); + } + + EditorInteractionSystemComponent::~EditorInteractionSystemComponent() + { + m_interactionRequests.reset(); + AZ_Assert(AZ::Interface::Get() != nullptr, "Unexpected unregistration of viewport editor mode tracker.") + AZ::Interface::Unregister(m_viewportEditorMode.get()); + } + void EditorInteractionSystemComponent::Activate() { EditorInteractionSystemViewportSelectionRequestBus::Handler::BusConnect(GetEntityContextId()); @@ -41,7 +56,8 @@ namespace AzToolsFramework return m_interactionRequests->InternalHandleMouseManipulatorInteraction(mouseInteraction); } - void EditorInteractionSystemComponent::SetHandler(const ViewportSelectionRequestsBuilderFn& interactionRequestsBuilder) + void EditorInteractionSystemComponent::SetHandler( + const ViewportSelectionRequestsBuilderFn& interactionRequestsBuilder) { // when setting a handler, make sure we're connected to the ViewportDebugDisplayEventBus so we // can forward calls to the specific type implementing ViewportSelectionRequests @@ -59,7 +75,7 @@ namespace AzToolsFramework m_entityDataCache = AZStd::make_unique(); m_interactionRequests.reset(); // BusConnect/Disconnect in constructor/destructor, // so have to reset before assigning the new one - m_interactionRequests = interactionRequestsBuilder(m_entityDataCache.get()); + m_interactionRequests = interactionRequestsBuilder(m_entityDataCache.get(), m_viewportEditorMode.get()); } EditorInteractionSystemViewportSelectionRequestBus::Handler::BusConnect(GetEntityContextId()); @@ -68,9 +84,9 @@ namespace AzToolsFramework void EditorInteractionSystemComponent::SetDefaultHandler() { SetHandler( - [](const EditorVisibleEntityDataCache* entityDataCache) + [](const EditorVisibleEntityDataCache* entityDataCache, ViewportEditorModeTrackerInterface* viewportEditorModeTracker) { - return AZStd::make_unique(entityDataCache); + return AZStd::make_unique(entityDataCache, viewportEditorModeTracker); }); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.h index 17521eab14..856fd2e326 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemComponent.h @@ -14,6 +14,8 @@ namespace AzToolsFramework { + class ViewportEditorModeTracker; + //! System Component to wrap active input handler. //! EditorInteractionSystemComponent is notified of viewport mouse events from RenderViewport //! and forwards them to a concrete implementation of ViewportSelectionRequests. @@ -26,6 +28,9 @@ namespace AzToolsFramework public: AZ_COMPONENT(EditorInteractionSystemComponent, "{146D0317-AF42-45AB-A953-F54198525DD5}") + EditorInteractionSystemComponent(); + ~EditorInteractionSystemComponent(); + static void Reflect(AZ::ReflectContext* context); // EditorInteractionSystemViewportSelectionRequestBus @@ -54,5 +59,7 @@ namespace AzToolsFramework AZStd::unique_ptr m_interactionRequests; //!< Hold a concrete implementation of //!< ViewportSelectionRequests to handle viewport //!< input and drawing for the Editor. + + AZStd::unique_ptr m_viewportEditorMode; //!< Editor mode tracker for each viewport. }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemViewportSelectionRequestBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemViewportSelectionRequestBus.h index ee3f83f74d..3579460ca0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemViewportSelectionRequestBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorInteractionSystemViewportSelectionRequestBus.h @@ -17,6 +17,7 @@ namespace AzToolsFramework { class EditorVisibleEntityDataCache; + class ViewportEditorModeTrackerInterface; //! Bus to handle all mouse events originating from the viewport. //! Coordinated by the EditorInteractionSystemComponent @@ -32,8 +33,8 @@ namespace AzToolsFramework }; //! Alias for factory function to create a new type implementing the ViewportSelectionRequests interface. - using ViewportSelectionRequestsBuilderFn = - AZStd::function(const EditorVisibleEntityDataCache*)>; + using ViewportSelectionRequestsBuilderFn = AZStd::function( + const EditorVisibleEntityDataCache*, ViewportEditorModeTrackerInterface*)>; //! Interface for system component implementing the ViewportSelectionRequests interface. //! This interface also includes a setter to set a custom handler also implementing diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp index ea1bc73056..6e7777b31c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp @@ -8,6 +8,7 @@ #include "EditorPickEntitySelection.h" +#include #include #include @@ -15,9 +16,12 @@ namespace AzToolsFramework { AZ_CLASS_ALLOCATOR_IMPL(EditorPickEntitySelection, AZ::SystemAllocator, 0) - EditorPickEntitySelection::EditorPickEntitySelection(const EditorVisibleEntityDataCache* entityDataCache) + EditorPickEntitySelection::EditorPickEntitySelection( + const EditorVisibleEntityDataCache* entityDataCache, ViewportEditorModeTrackerInterface* viewportEditorModeTracker) : m_editorHelpers(AZStd::make_unique(entityDataCache)) + , m_viewportEditorModeTracker(viewportEditorModeTracker) { + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Pick); } EditorPickEntitySelection::~EditorPickEntitySelection() @@ -26,6 +30,8 @@ namespace AzToolsFramework { ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequests::SetEntityHighlighted, m_hoveredEntityId, false); } + + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Pick); } // note: entityIdUnderCursor is the authoritative entityId we get each frame by querying diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.h index e8d83af932..62fa4161b7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.h @@ -13,6 +13,8 @@ namespace AzToolsFramework { + class ViewportEditorModeTrackerInterface; + //! Viewport interaction that will handle assigning an entity in the viewport to //! an entity field in the entity inspector. class EditorPickEntitySelection : public ViewportInteraction::InternalViewportSelectionRequests @@ -20,7 +22,8 @@ namespace AzToolsFramework public: AZ_CLASS_ALLOCATOR_DECL - EditorPickEntitySelection(const EditorVisibleEntityDataCache* entityDataCache); + EditorPickEntitySelection( + const EditorVisibleEntityDataCache* entityDataCache, ViewportEditorModeTrackerInterface* viewportEditorModeTracker); ~EditorPickEntitySelection(); private: @@ -32,5 +35,6 @@ namespace AzToolsFramework AZStd::unique_ptr m_editorHelpers; //!< Editor visualization of entities (icons, shapes, debug visuals etc). AZ::EntityId m_hoveredEntityId; //!< What EntityId is the mouse currently hovering over (if any). AZ::EntityId m_cachedEntityIdUnderCursor; //!< Store the EntityId on each mouse move for use in Display. + ViewportEditorModeTrackerInterface* m_viewportEditorModeTracker = nullptr; //!< Tracker for activating/deactivating viewport editor modes. }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index 8157d369d2..ccb72e1d50 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -700,13 +700,6 @@ namespace AzToolsFramework switch (referenceFrame) { case ReferenceFrame::Local: - // if we have a group selection, always use the pivot override if one - // is set when moving to local space (can't pick individual local space) - if (entityIdMap.size() > 1) - { - pivot.m_worldOrientation = pivotOverrideFrame.m_orientationOverride.value(); - } - break; case ReferenceFrame::Parent: pivot.m_worldOrientation = pivotOverrideFrame.m_orientationOverride.value(); break; @@ -784,7 +777,7 @@ namespace AzToolsFramework SortEntitiesByLocationInHierarchy(sortedEntityIdsOut); } - static void UpdateInitialRotation(EntityIdManipulators& entityManipulators) + static void UpdateInitialTransform(EntityIdManipulators& entityManipulators) { // save new start orientation (if moving rotation axes separate from object // or switching type of rotation (modifier keys change)) @@ -797,22 +790,17 @@ namespace AzToolsFramework } } - // utility function to immediately return the current reference frame - // based on the state of the modifiers + // utility function to immediately return the current reference frame based on the state of the modifiers static ReferenceFrame ReferenceFrameFromModifiers(const ViewportInteraction::KeyboardModifiers modifiers) { - if (modifiers.Shift() && !modifiers.Alt()) - { - return ReferenceFrame::World; - } - else if (modifiers.Alt() && !modifiers.Shift()) - { - return ReferenceFrame::Local; - } - else - { - return ReferenceFrame::Parent; - } + return modifiers.Shift() ? ReferenceFrame::World : ReferenceFrame::Local; + } + + // utility function to immediately return the current sphere of influence of the manipulators based on the + // state of the modifiers + static Influence InfluenceFromModifiers(const ViewportInteraction::KeyboardModifiers modifiers) + { + return modifiers.Alt() ? Influence::Individual : Influence::Group; } template @@ -838,6 +826,7 @@ namespace AzToolsFramework else { const ReferenceFrame referenceFrame = spaceLock.value_or(ReferenceFrameFromModifiers(action.m_modifiers)); + const Influence influence = InfluenceFromModifiers(action.m_modifiers); // note: used for parent and world depending on the current reference frame const auto pivotOrientation = @@ -854,9 +843,9 @@ namespace AzToolsFramework const AZ::Vector3 worldTranslation = GetWorldTranslation(entityId); - switch (referenceFrame) + switch (influence) { - case ReferenceFrame::Local: + case Influence::Individual: { // move in each entities local space at once AZ::Quaternion worldOrientation = AZ::Quaternion::CreateIdentity(); @@ -876,10 +865,9 @@ namespace AzToolsFramework entityId, entityItLookupIt->second.m_initial.GetTranslation() + localOffset, transformChangedInternally); } break; - case ReferenceFrame::Parent: - case ReferenceFrame::World: + case Influence::Group: { - AZ::Quaternion offsetRotation = pivotOrientation.m_worldOrientation * + const AZ::Quaternion offsetRotation = pivotOrientation.m_worldOrientation * QuaternionFromTransformNoScaling(entityIdManipulators.m_manipulators->GetLocalTransform().GetInverse()); const AZ::Vector3 localOffset = offsetRotation.TransformVector(action.LocalPositionOffset()); @@ -1062,7 +1050,8 @@ namespace AzToolsFramework { AZStd::chrono::milliseconds timeNow; AzToolsFramework::ViewportInteraction::EditorViewportInputTimeNowRequestBus::BroadcastResult( - timeNow, &AzToolsFramework::ViewportInteraction::EditorViewportInputTimeNowRequestBus::Events::EditorViewportInputTimeNow); + timeNow, + &AzToolsFramework::ViewportInteraction::EditorViewportInputTimeNowRequestBus::Events::EditorViewportInputTimeNow); return timeNow; }); } @@ -1263,7 +1252,7 @@ namespace AzToolsFramework AZStd::unique_ptr translationManipulators = AZStd::make_unique( TranslationManipulators::Dimensions::Three, AZ::Transform::CreateIdentity(), AZ::Vector3::CreateOne()); - translationManipulators->SetLineBoundWidth(ManipulatorLineBoundWidth(ViewportUi::DefaultViewportId)); + translationManipulators->SetLineBoundWidth(ManipulatorLineBoundWidth()); InitializeManipulators(*translationManipulators); @@ -1297,7 +1286,7 @@ namespace AzToolsFramework ViewportInteraction::KeyboardModifiers prevModifiers{}; translationManipulators->InstallLinearManipulatorMouseMoveCallback( - [this, prevModifiers, manipulatorEntityIds](const LinearManipulator::Action& action) mutable -> void + [this, prevModifiers, manipulatorEntityIds](const LinearManipulator::Action& action) mutable { UpdateTranslationManipulator( action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators, m_pivotOverrideFrame, prevModifiers, @@ -1331,7 +1320,7 @@ namespace AzToolsFramework }); translationManipulators->InstallPlanarManipulatorMouseMoveCallback( - [this, prevModifiers, manipulatorEntityIds](const PlanarManipulator::Action& action) mutable -> void + [this, prevModifiers, manipulatorEntityIds](const PlanarManipulator::Action& action) mutable { UpdateTranslationManipulator( action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators, m_pivotOverrideFrame, prevModifiers, @@ -1364,7 +1353,7 @@ namespace AzToolsFramework }); translationManipulators->InstallSurfaceManipulatorMouseMoveCallback( - [this, prevModifiers, manipulatorEntityIds](const SurfaceManipulator::Action& action) mutable -> void + [this, prevModifiers, manipulatorEntityIds](const SurfaceManipulator::Action& action) mutable { UpdateTranslationManipulator( action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators, m_pivotOverrideFrame, prevModifiers, @@ -1391,7 +1380,7 @@ namespace AzToolsFramework AZStd::unique_ptr rotationManipulators = AZStd::make_unique(AZ::Transform::CreateIdentity()); - rotationManipulators->SetCircleBoundWidth(ManipulatorCicleBoundWidth(ViewportUi::DefaultViewportId)); + rotationManipulators->SetCircleBoundWidth(ManipulatorCicleBoundWidth()); InitializeManipulators(*rotationManipulators); @@ -1415,7 +1404,7 @@ namespace AzToolsFramework AZStd::shared_ptr sharedRotationState = AZStd::make_shared(); rotationManipulators->InstallLeftMouseDownCallback( - [this, sharedRotationState]([[maybe_unused]] const AngularManipulator::Action& action) mutable -> void + [this, sharedRotationState]([[maybe_unused]] const AngularManipulator::Action& action) mutable { sharedRotationState->m_savedOrientation = AZ::Quaternion::CreateIdentity(); sharedRotationState->m_referenceFrameAtMouseDown = m_referenceFrame; @@ -1437,11 +1426,13 @@ namespace AzToolsFramework BeginRecordManipulatorCommand(); }); - ViewportInteraction::KeyboardModifiers prevModifiers{}; rotationManipulators->InstallMouseMoveCallback( - [this, prevModifiers, sharedRotationState](const AngularManipulator::Action& action) mutable -> void + [this, prevModifiers = ViewportInteraction::KeyboardModifiers(), + sharedRotationState](const AngularManipulator::Action& action) mutable { const ReferenceFrame referenceFrame = m_spaceCluster.m_spaceLock.value_or(ReferenceFrameFromModifiers(action.m_modifiers)); + const Influence influence = InfluenceFromModifiers(action.m_modifiers); + const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; // store the pivot override frame when positioning the manipulator manually (ctrl) // so we don't lose the orientation when adding/removing entities from the selection @@ -1452,9 +1443,7 @@ namespace AzToolsFramework // only update the manipulator orientation if we're rotating in a local reference frame or we're // manually modifying the manipulator orientation independent of the entity by holding ctrl - if ((sharedRotationState->m_referenceFrameAtMouseDown == ReferenceFrame::Local && - m_entityIdManipulators.m_lookups.size() == 1) || - action.m_modifiers.Ctrl()) + if (sharedRotationState->m_referenceFrameAtMouseDown == ReferenceFrame::Local || action.m_modifiers.Ctrl()) { m_entityIdManipulators.m_manipulators->SetLocalTransform(AZ::Transform::CreateFromQuaternionAndTranslation( manipulatorOrientation, m_entityIdManipulators.m_manipulators->GetLocalTransform().GetTranslation())); @@ -1463,20 +1452,24 @@ namespace AzToolsFramework // save state if we change the type of rotation we're doing to to prevent snapping if (prevModifiers != action.m_modifiers) { - UpdateInitialRotation(m_entityIdManipulators); + UpdateInitialTransform(m_entityIdManipulators); sharedRotationState->m_savedOrientation = action.m_current.m_delta.GetInverseFull(); } // allow the user to modify the orientation without moving the object if ctrl is held if (action.m_modifiers.Ctrl()) { - UpdateInitialRotation(m_entityIdManipulators); + UpdateInitialTransform(m_entityIdManipulators); sharedRotationState->m_savedOrientation = action.m_current.m_delta.GetInverseFull(); } else { - const auto pivotOrientation = ETCS::CalculateSelectionPivotOrientation( - m_entityIdManipulators.m_lookups, m_pivotOverrideFrame, ReferenceFrame::Parent); + // only update the pivot override if the orientation is being modified in local space and we have + // more than one entity selected (so rotating a single entity does not set the orientation override) + if (referenceFrame == ReferenceFrame::Local && sharedRotationState->m_entityIds.size() > 1) + { + m_pivotOverrideFrame.m_orientationOverride = manipulatorOrientation; + } // note: must use sorted entityIds based on hierarchy order when updating transforms for (AZ::EntityId entityId : sharedRotationState->m_entityIds) @@ -1492,9 +1485,9 @@ namespace AzToolsFramework const AZ::Transform offsetRotation = AZ::Transform::CreateFromQuaternion(sharedRotationState->m_savedOrientation * action.m_current.m_delta); - switch (referenceFrame) + switch (influence) { - case ReferenceFrame::Local: + case Influence::Individual: { const AZ::Quaternion rotation = entityIdLookupIt->second.m_initial.GetRotation().GetNormalized(); const AZ::Vector3 position = entityIdLookupIt->second.m_initial.GetTranslation(); @@ -1510,23 +1503,10 @@ namespace AzToolsFramework AZ::Transform::CreateTranslation(-centerOffset) * AZ::Transform::CreateUniformScale(scale)); } break; - case ReferenceFrame::Parent: - { - const AZ::Transform pivotTransform = AZ::Transform::CreateFromQuaternionAndTranslation( - pivotOrientation.m_worldOrientation, - m_entityIdManipulators.m_manipulators->GetLocalTransform().GetTranslation()); - - const AZ::Transform transformInPivotSpace = - pivotTransform.GetInverse() * entityIdLookupIt->second.m_initial; - - SetEntityWorldTransform(entityId, pivotTransform * offsetRotation * transformInPivotSpace); - } - break; - case ReferenceFrame::World: + case Influence::Group: { const AZ::Transform pivotTransform = AZ::Transform::CreateFromQuaternionAndTranslation( - AZ::Quaternion::CreateIdentity(), - m_entityIdManipulators.m_manipulators->GetLocalTransform().GetTranslation()); + manipulatorOrientation, m_entityIdManipulators.m_manipulators->GetLocalTransform().GetTranslation()); const AZ::Transform transformInPivotSpace = pivotTransform.GetInverse() * entityIdLookupIt->second.m_initial; @@ -1561,7 +1541,7 @@ namespace AzToolsFramework AZ_PROFILE_FUNCTION(AzToolsFramework); AZStd::unique_ptr scaleManipulators = AZStd::make_unique(AZ::Transform::CreateIdentity()); - scaleManipulators->SetLineBoundWidth(ManipulatorLineBoundWidth(ViewportUi::DefaultViewportId)); + scaleManipulators->SetLineBoundWidth(ManipulatorLineBoundWidth()); InitializeManipulators(*scaleManipulators); @@ -1571,13 +1551,20 @@ namespace AzToolsFramework scaleManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); scaleManipulators->ConfigureView(2.0f, AZ::Color::CreateOne(), AZ::Color::CreateOne(), AZ::Color::CreateOne()); + struct SharedScaleState + { + AZ::Vector3 m_savedScaleOffset = AZ::Vector3::CreateZero(); + EntityIdList m_entityIds; + }; + // lambdas capture shared_ptr by value to increment ref count - auto manipulatorEntityIds = AZStd::make_shared(); + auto sharedScaleState = AZStd::make_shared(); - auto uniformLeftMouseDownCallback = [this, manipulatorEntityIds]([[maybe_unused]] const LinearManipulator::Action& action) + auto uniformLeftMouseDownCallback = [this, sharedScaleState]([[maybe_unused]] const LinearManipulator::Action& action) { + sharedScaleState->m_savedScaleOffset = AZ::Vector3::CreateZero(); // important to sort entityIds based on hierarchy order when updating transforms - BuildSortedEntityIdVectorFromEntityIdMap(m_entityIdManipulators.m_lookups, manipulatorEntityIds->m_entityIds); + BuildSortedEntityIdVectorFromEntityIdMap(m_entityIdManipulators.m_lookups, sharedScaleState->m_entityIds); for (auto& entityIdLookup : m_entityIdManipulators.m_lookups) { @@ -1591,20 +1578,32 @@ namespace AzToolsFramework m_axisPreview.m_orientation = QuaternionFromTransformNoScaling(m_entityIdManipulators.m_manipulators->GetLocalTransform()); }; - auto uniformLeftMouseUpCallback = [this, manipulatorEntityIds]([[maybe_unused]] const LinearManipulator::Action& action) + auto uniformLeftMouseUpCallback = [this, sharedScaleState]([[maybe_unused]] const LinearManipulator::Action& action) { AzToolsFramework::EditorTransformChangeNotificationBus::Broadcast( - &AzToolsFramework::EditorTransformChangeNotificationBus::Events::OnEntityTransformChanged, - manipulatorEntityIds->m_entityIds); + &AzToolsFramework::EditorTransformChangeNotificationBus::Events::OnEntityTransformChanged, sharedScaleState->m_entityIds); m_entityIdManipulators.m_manipulators->SetLocalTransform(RecalculateAverageManipulatorTransform( m_entityIdManipulators.m_lookups, m_pivotOverrideFrame, m_pivotMode, m_referenceFrame)); }; - auto uniformLeftMouseMoveCallback = [this, manipulatorEntityIds](const LinearManipulator::Action& action) + auto uniformLeftMouseMoveCallback = [this, sharedScaleState, prevModifiers = ViewportInteraction::KeyboardModifiers()]( + const LinearManipulator::Action& action) mutable { + // do nothing to modify the manipulator + if (action.m_modifiers.Ctrl()) + { + return; + } + + if (prevModifiers != action.m_modifiers) + { + UpdateInitialTransform(m_entityIdManipulators); + sharedScaleState->m_savedScaleOffset = action.LocalScaleOffset(); + } + // note: must use sorted entityIds based on hierarchy order when updating transforms - for (AZ::EntityId entityId : manipulatorEntityIds->m_entityIds) + for (AZ::EntityId entityId : sharedScaleState->m_entityIds) { auto entityIdLookupIt = m_entityIdManipulators.m_lookups.find(entityId); if (entityIdLookupIt == m_entityIdManipulators.m_lookups.end()) @@ -1620,26 +1619,33 @@ namespace AzToolsFramework return vec.GetX() + vec.GetY() + vec.GetZ(); }; - const float uniformScale = action.m_start.m_sign * sumVectorElements(action.LocalScaleOffset()); + const float uniformScale = + action.m_start.m_sign * sumVectorElements(action.LocalScaleOffset() - sharedScaleState->m_savedScaleOffset); const float scale = AZ::GetClamp(1.0f + uniformScale / initialScale, AZ::MinTransformScale, AZ::MaxTransformScale); const AZ::Transform scaleTransform = AZ::Transform::CreateUniformScale(scale); - if (action.m_modifiers.Alt()) + switch (InfluenceFromModifiers(action.m_modifiers)) { - const AZ::Transform pivotTransform = TransformNormalizedScale(entityIdLookupIt->second.m_initial); - const AZ::Transform transformInPivotSpace = pivotTransform.GetInverse() * initial; + case Influence::Individual: + { + const AZ::Transform pivotTransform = TransformNormalizedScale(entityIdLookupIt->second.m_initial); + const AZ::Transform transformInPivotSpace = pivotTransform.GetInverse() * initial; - SetEntityWorldTransform(entityId, pivotTransform * scaleTransform * transformInPivotSpace); - } - else - { - const AZ::Transform pivotTransform = - TransformNormalizedScale(m_entityIdManipulators.m_manipulators->GetLocalTransform()); - const AZ::Transform transformInPivotSpace = pivotTransform.GetInverse() * initial; + SetEntityWorldTransform(entityId, pivotTransform * scaleTransform * transformInPivotSpace); + } + break; + case Influence::Group: + { + const AZ::Transform pivotTransform = + TransformNormalizedScale(m_entityIdManipulators.m_manipulators->GetLocalTransform()); + const AZ::Transform transformInPivotSpace = pivotTransform.GetInverse() * initial; - SetEntityWorldTransform(entityId, pivotTransform * scaleTransform * transformInPivotSpace); + SetEntityWorldTransform(entityId, pivotTransform * scaleTransform * transformInPivotSpace); + } } } + + prevModifiers = action.m_modifiers; }; scaleManipulators->InstallAxisLeftMouseDownCallback(uniformLeftMouseDownCallback); @@ -2729,8 +2735,7 @@ namespace AzToolsFramework if (m_pivotOverrideFrame.m_orientationOverride && m_entityIdManipulators.m_manipulators) { - m_pivotOverrideFrame.m_orientationOverride = - QuaternionFromTransformNoScaling(m_entityIdManipulators.m_manipulators->GetLocalTransform()); + m_pivotOverrideFrame.m_orientationOverride = m_entityIdManipulators.m_manipulators->GetLocalTransform().GetRotation(); } if (m_pivotOverrideFrame.m_translationOverride && m_entityIdManipulators.m_manipulators) @@ -3337,7 +3342,7 @@ namespace AzToolsFramework display.SetLineWidth(4.0f); - const auto axisFlip = [&transform, &cameraState](const AZ::Vector3& axis) -> float + const auto axisFlip = [&transform, &cameraState](const AZ::Vector3& axis) { return ShouldFlipCameraAxis( AZ::Transform::CreateIdentity(), transform.GetTranslation(), TransformDirectionNoScaling(transform, axis), @@ -3554,7 +3559,7 @@ namespace AzToolsFramework // screen space const auto calculateGizmoAxis = [&cameraView, &cameraProjection, &screenOffset](const AZ::Vector3& axis) { - auto result = AZ::Vector2(AzFramework::WorldToScreenNDC(axis, cameraView, cameraProjection)); + auto result = AZ::Vector2(AzFramework::WorldToScreenNdc(axis, cameraView, cameraProjection)); result.SetY(1.0f - result.GetY()); return result + screenOffset; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h index 6cc89b2d10..a0e87d9d6f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h @@ -96,6 +96,14 @@ namespace AzToolsFramework AZ::u8 m_pickTypes = PickType::None; //!< What mode(s) were we in when picking an EntityId override. }; + //! How a manipulator should treat an adjustment. + //! @note Determines if a transform is applied to an individual entity or the whole group. + enum class Influence + { + Group, + Individual + }; + //! What frame/space is the manipulator currently operating in. enum class ReferenceFrame { @@ -328,7 +336,8 @@ namespace AzToolsFramework OptionalFrame m_pivotOverrideFrame; //!< Has a pivot override been set. Mode m_mode = Mode::Translation; //!< Manipulator mode - default to translation. Pivot m_pivotMode = Pivot::Object; //!< Entity pivot mode - default to object (authored root). - ReferenceFrame m_referenceFrame = ReferenceFrame::Parent; //!< What reference frame is the Manipulator currently operating in. + ReferenceFrame m_referenceFrame = ReferenceFrame::Local; //!< What reference frame is the Manipulator currently operating in. + Influence m_influence = Influence::Group; //!< What sphere of influence does the Manipulator have. Frame m_axisPreview; //!< Axes of entity at the time of mouse down to indicate delta of translation. bool m_triedToRefresh = false; //!< Did a refresh event occur to recalculate the current Manipulator transform. //! Was EditorTransformComponentSelection responsible for the most recent entity selection change. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp index 4adddb02e1..d3cfa47e51 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp @@ -45,30 +45,15 @@ namespace AzToolsFramework return m_editorModes[static_cast(mode)]; } - void ViewportEditorModeTracker::RegisterInterface() - { - if (AZ::Interface::Get() == nullptr) - { - AZ::Interface::Register(this); - } - } - - void ViewportEditorModeTracker::UnregisterInterface() - { - if (AZ::Interface::Get() != nullptr) - { - AZ::Interface::Unregister(this); - } - } - AZ::Outcome ViewportEditorModeTracker::ActivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) { - auto& editorModes = m_viewportEditorModesMap[viewportEditorModeInfo.m_id]; + auto& editorModes = m_viewportEditorModesMap[ViewportEditorModeTrackerInfo.m_id]; if (editorModes.IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( - "Duplicate call to ActivateMode for mode '%u' on id '%i'", static_cast(mode), viewportEditorModeInfo.m_id)); + "Duplicate call to ActivateMode for mode '%u' on id '%s'", static_cast(mode), + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } if (const auto result = editorModes.ActivateMode(mode); @@ -78,29 +63,30 @@ namespace AzToolsFramework } ViewportEditorModeNotificationsBus::Event( - viewportEditorModeInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeActivated, editorModes, mode); + ViewportEditorModeTrackerInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeActivated, editorModes, mode); return AZ::Success(); } AZ::Outcome ViewportEditorModeTracker::DeactivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) { ViewportEditorModes* editorModes = nullptr; bool modeWasActive = true; - if (m_viewportEditorModesMap.count(viewportEditorModeInfo.m_id)) + if (m_viewportEditorModesMap.count(ViewportEditorModeTrackerInfo.m_id)) { - editorModes = &m_viewportEditorModesMap.at(viewportEditorModeInfo.m_id); + editorModes = &m_viewportEditorModesMap.at(ViewportEditorModeTrackerInfo.m_id); if (!editorModes->IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( - "Duplicate call to DeactivateMode for mode '%u' on id '%i'", static_cast(mode), viewportEditorModeInfo.m_id)); + "Duplicate call to DeactivateMode for mode '%u' on id '%s'", static_cast(mode), + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } } else { modeWasActive = false; - editorModes = &m_viewportEditorModesMap[viewportEditorModeInfo.m_id]; + editorModes = &m_viewportEditorModesMap[ViewportEditorModeTrackerInfo.m_id]; } if(const auto result = editorModes->DeactivateMode(mode); @@ -110,7 +96,7 @@ namespace AzToolsFramework } ViewportEditorModeNotificationsBus::Event( - viewportEditorModeInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeDeactivated, *editorModes, mode); + ViewportEditorModeTrackerInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeDeactivated, *editorModes, mode); if (modeWasActive) { @@ -119,14 +105,14 @@ namespace AzToolsFramework else { return AZ::Failure(AZStd::string::format( - "Call to DeactivateMode for mode '%u' on id '%i' without precursor call to ActivateMode", static_cast(mode), - viewportEditorModeInfo.m_id)); + "Call to DeactivateMode for mode '%u' on id '%s' without precursor call to ActivateMode", static_cast(mode), + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } } - const ViewportEditorModesInterface* ViewportEditorModeTracker::GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const + const ViewportEditorModesInterface* ViewportEditorModeTracker::GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const { - if (auto editorModes = m_viewportEditorModesMap.find(viewportEditorModeInfo.m_id); + if (auto editorModes = m_viewportEditorModesMap.find(ViewportEditorModeTrackerInfo.m_id); editorModes != m_viewportEditorModesMap.end()) { return &editorModes->second; @@ -142,8 +128,8 @@ namespace AzToolsFramework return m_viewportEditorModesMap.size(); } - bool ViewportEditorModeTracker::IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const + bool ViewportEditorModeTracker::IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const { - return m_viewportEditorModesMap.count(viewportEditorModeInfo.m_id) > 0; + return m_viewportEditorModesMap.count(ViewportEditorModeTrackerInfo.m_id) > 0; } } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h index 6ae68b39b2..2efc0a66f7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h @@ -41,21 +41,15 @@ namespace AzToolsFramework : public ViewportEditorModeTrackerInterface { public: - //! Registers this object with the AZ::Interface. - void RegisterInterface(); - - //! Unregisters this object with the AZ::Interface. - void UnregisterInterface(); - // ViewportEditorModeTrackerInterface overrides ... - AZ::Outcome ActivateMode(const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) override; - AZ::Outcome DeactivateMode(const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) override; - const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const override; + AZ::Outcome ActivateMode(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) override; + AZ::Outcome DeactivateMode(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) override; + const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const override; size_t GetTrackedViewportCount() const override; - bool IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const override; + bool IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const override; private: - using ViewportEditorModesMap = AZStd::unordered_map; - ViewportEditorModesMap m_viewportEditorModesMap; //!< Editor mode state per viewport. + using ViewportEditorModesMap = AZStd::unordered_map; + ViewportEditorModesMap m_viewportEditorModesMap; //!< Editor mode states per tracker. }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.cpp index e933940d95..372587c110 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.cpp @@ -29,13 +29,29 @@ namespace AzToolsFramework::ViewportUi::Internal void ButtonGroup::SetHighlightedButton(ButtonId buttonId) { + if (buttonId == m_highlightedButtonId) // the requested button is highlighted, so do nothing. + { + return; + } + if (auto buttonEntry = m_buttons.find(buttonId); buttonEntry != m_buttons.end()) { - for (auto& button : m_buttons) - { - button.second->m_state = Button::State::Deselected; - } + ClearHighlightedButton(); buttonEntry->second->m_state = Button::State::Selected; + m_highlightedButtonId = buttonId; + } + } + + void ButtonGroup::ClearHighlightedButton() + { + if (m_highlightedButtonId == InvalidButtonId) + { + return; + } + if (auto buttonEntry = m_buttons.find(m_highlightedButtonId); buttonEntry != m_buttons.end()) + { + buttonEntry->second->m_state = Button::State::Deselected; + m_highlightedButtonId = InvalidButtonId; } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.h index 0500a80c36..7b6864a71b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ButtonGroup.h @@ -8,6 +8,7 @@ #pragma once +#include #include namespace AzToolsFramework::ViewportUi::Internal @@ -24,6 +25,7 @@ namespace AzToolsFramework::ViewportUi::Internal ~ButtonGroup() = default; void SetHighlightedButton(ButtonId buttonId); + void ClearHighlightedButton(); void SetViewportUiElementId(ViewportUiElementId id); ViewportUiElementId GetViewportUiElementId() const; @@ -39,5 +41,6 @@ namespace AzToolsFramework::ViewportUi::Internal AZ::Event m_buttonTriggeredEvent; ViewportUiElementId m_viewportUiId; AZStd::unordered_map> m_buttons; + ButtonId m_highlightedButtonId = InvalidButtonId; }; } // namespace AzToolsFramework::ViewportUi::Internal diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp index cee4a311e8..255d11f561 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.cpp @@ -50,6 +50,16 @@ namespace AzToolsFramework::ViewportUi } } + void ViewportUiManager::ClearClusterActiveButton(ClusterId clusterId) + { + if (auto clusterIt = m_clusterButtonGroups.find(clusterId); clusterIt != m_clusterButtonGroups.end()) + { + auto cluster = clusterIt->second; + cluster->ClearHighlightedButton(); + UpdateButtonGroupUi(cluster.get()); + } + } + void ViewportUiManager::SetSwitcherActiveButton(const SwitcherId switcherId, const ButtonId buttonId) { if (auto switcherIt = m_switcherButtonGroups.find(switcherId); switcherIt != m_switcherButtonGroups.end()) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h index c5ecf7aee6..9ec6648451 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiManager.h @@ -30,6 +30,7 @@ namespace AzToolsFramework::ViewportUi const ClusterId CreateCluster(Alignment align) override; const SwitcherId CreateSwitcher(Alignment align) override; void SetClusterActiveButton(ClusterId clusterId, ButtonId buttonId) override; + void ClearClusterActiveButton(ClusterId clusterId) override; void SetSwitcherActiveButton(SwitcherId switcherId, ButtonId buttonId) override; void SetClusterButtonLocked(ClusterId clusterId, ButtonId buttonId, bool isLocked) override; void SetClusterButtonTooltip(ClusterId clusterId, ButtonId buttonId, const AZStd::string& tooltip) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h index 649186c7e7..108d23950a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportUi/ViewportUiRequestBus.h @@ -59,6 +59,8 @@ namespace AzToolsFramework::ViewportUi virtual const SwitcherId CreateSwitcher(Alignment align) = 0; //! Sets the active button of the cluster. This is the button which will display as highlighted. virtual void SetClusterActiveButton(ClusterId clusterId, ButtonId buttonId) = 0; + //! Clears the active button of the cluster if one is active. The button will no longer display as highlighted. + virtual void ClearClusterActiveButton(ClusterId clusterId) = 0; //! Sets the active button of the switcher. This is the button which has a text label. virtual void SetSwitcherActiveButton(SwitcherId clusterId, ButtonId buttonId) = 0; //! Adds a locked overlay to the cluster button's icon. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 88febef8c2..ff7fe58f1e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -7,6 +7,7 @@ # set(FILES + AssetEditor/AssetEditorBus.cpp AssetEditor/AssetEditorBus.h AssetEditor/AssetEditorToolbar.ui AssetEditor/AssetEditorStatusBar.ui @@ -113,6 +114,10 @@ set(FILES Component/EditorLevelComponentAPIBus.h Component/EditorLevelComponentAPIComponent.cpp Component/EditorLevelComponentAPIComponent.h + ContainerEntity/ContainerEntityInterface.h + ContainerEntity/ContainerEntityNotificationBus.h + ContainerEntity/ContainerEntitySystemComponent.cpp + ContainerEntity/ContainerEntitySystemComponent.h Editor/EditorContextMenuBus.h Editor/EditorSettingsAPIBus.h Entity/EditorEntityStartStatus.h @@ -147,9 +152,12 @@ set(FILES Entity/SliceEditorEntityOwnershipService.h Entity/SliceEditorEntityOwnershipService.cpp Entity/SliceEditorEntityOwnershipServiceBus.h + Entity/EntityUtilityComponent.h + Entity/EntityUtilityComponent.cpp Fingerprinting/TypeFingerprinter.h Fingerprinting/TypeFingerprinter.cpp FocusMode/FocusModeInterface.h + FocusMode/FocusModeNotificationBus.h FocusMode/FocusModeSystemComponent.h FocusMode/FocusModeSystemComponent.cpp Logger/TraceLogger.cpp @@ -635,13 +643,20 @@ set(FILES Prefab/PrefabFocusHandler.h Prefab/PrefabFocusHandler.cpp Prefab/PrefabFocusInterface.h + Prefab/PrefabFocusNotificationBus.h Prefab/PrefabIdTypes.h Prefab/PrefabLoader.h Prefab/PrefabLoader.cpp Prefab/PrefabLoaderInterface.h + Prefab/PrefabLoaderScriptingBus.h + Prefab/ScriptingPrefabLoader.h + Prefab/ScriptingPrefabLoader.cpp Prefab/PrefabSystemComponent.h Prefab/PrefabSystemComponent.cpp Prefab/PrefabSystemComponentInterface.h + Prefab/PrefabSystemScriptingBus.h + Prefab/PrefabSystemScriptingHandler.h + Prefab/PrefabSystemScriptingHandler.cpp Prefab/Instance/Instance.h Prefab/Instance/Instance.cpp Prefab/Instance/InstanceSerializer.h @@ -664,6 +679,8 @@ set(FILES Prefab/Instance/TemplateInstanceMapperInterface.h Prefab/Link/Link.h Prefab/Link/Link.cpp + Prefab/Procedural/ProceduralPrefabAsset.h + Prefab/Procedural/ProceduralPrefabAsset.cpp Prefab/PrefabPublicHandler.h Prefab/PrefabPublicHandler.cpp Prefab/PrefabPublicInterface.h @@ -733,6 +750,8 @@ set(FILES UI/Prefab/PrefabIntegrationInterface.h UI/Prefab/PrefabUiHandler.h UI/Prefab/PrefabUiHandler.cpp + UI/Prefab/PrefabViewportFocusPathHandler.h + UI/Prefab/PrefabViewportFocusPathHandler.cpp PythonTerminal/ScriptHelpDialog.cpp PythonTerminal/ScriptHelpDialog.h PythonTerminal/ScriptHelpDialog.ui diff --git a/Code/Framework/AzToolsFramework/Platform/Linux/AzToolsFramework/Archive/ArchiveComponent_Linux.cpp b/Code/Framework/AzToolsFramework/Platform/Linux/AzToolsFramework/Archive/ArchiveComponent_Linux.cpp deleted file mode 100644 index cc8b9492e8..0000000000 --- a/Code/Framework/AzToolsFramework/Platform/Linux/AzToolsFramework/Archive/ArchiveComponent_Linux.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include - -namespace AzToolsFramework -{ - namespace Platform - { - [[maybe_unused]] static const char ErrorChannel[] = "ArchiveComponent_Linux"; - - static const char ZipExePath[] = R"(/usr/bin/zip)"; - static const char UnzipExePath[] = R"(/usr/bin/unzip)"; - - static const char CreateArchiveCmd[] = "-r \"%s\" . -i *"; - - static const char ExtractArchiveCmd[] = R"(-o "%s" -d "%s")"; - - static const char AddFileCmd[] = R"("%s" "%s")"; - - static const char ExtractFileCmd[] = R"(%s "%s" %s)"; - static const char ExtractFileDestination[] = R"(%s "%s" "%s" -d "%s")"; - static const char ExtractOverwrite[] = "-o"; - static const char ExtractSkipExisting[] = "-n"; - static const char ListFilesInArchiveCmd[] = "-l %s"; - - AZStd::string GetZipExePath() - { - return ZipExePath; - } - - AZStd::string GetUnzipExePath() - { - return UnzipExePath; - } - - AZ::Outcome MakePath(const AZStd::string& path) - { - // Create the folder if it does not already exist - if (!AZ::IO::FileIOBase::GetInstance()->Exists(path.c_str())) - { - auto result = AZ::IO::FileIOBase::GetInstance()->CreatePath(path.c_str()); - if (!result) - { - return AZ::Failure(AZStd::string::format("Path creation failed. Input path: %s \n", path.c_str())); - } - } - - return AZ::Success(path); - } - - AZ::Outcome MakeCreateArchivePath(const AZStd::string& archivePath) - { - // Remove the file name from the input path - // /some/folder/path/archive.zip -> /some/folder/path/ - AZStd::string strippedArchivePath = archivePath; - AzFramework::StringFunc::Path::StripFullName(strippedArchivePath); - - if (strippedArchivePath.empty()) - { - return AZ::Failure(AZStd::string::format("Stripped path name is empty. Cancelling path creation. Input path: %s\n", archivePath.c_str())); - } - - return MakePath(strippedArchivePath); - } - - AZ::Outcome MakeExtractArchivePath(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool includeRoot) - { - if(!includeRoot) - { - // Create the folder for the input destination path with no modifications - // /path/to/destination/ - return MakePath(destinationPath); - } - - // Get the name of the input archive. This will be the name of the root folder for the archive extraction - // /some/folder/path/archive.zip -> archive - AZStd::string zipFileName; - bool result = AzFramework::StringFunc::Path::GetFileName(archivePath.c_str(), zipFileName); - if(!result) - { - return AZ::Failure(AZStd::string::format("Failed to get name of zip file from the archive path. Cancelling path creation. \n Input Archive Path: %s \n", archivePath.c_str())); - } - - // Append the root folder name to the end of the destination path - // /path/to/destination/ + archive -> /path/to/destination/archive - AZStd::string destinationPathWithRoot; - result = AzFramework::StringFunc::Path::Join(destinationPath.c_str(), zipFileName.c_str(), destinationPathWithRoot); - if(!result) - { - return AZ::Failure(AZStd::string::format("Failed to append zip file name to the destination path. Cancelling path creation. \n Destination Path: %s \n Zip file name: %s \n", destinationPath.c_str(), zipFileName.c_str())); - } - - // Append a separator so that it is formatted like a folder - // /path/to/destination/archive -> /path/to/destination/archive/ - AzFramework::StringFunc::Path::AppendSeparator(destinationPathWithRoot); - return MakePath(destinationPathWithRoot); - } - - AZStd::string GetCreateArchiveCommand(const AZStd::string& archivePath, const AZStd::string& dirToArchive) - { - auto pathCreationResult = MakeCreateArchivePath(archivePath); - if (!pathCreationResult) - { - AZ_Error(ErrorChannel, false, "%s", pathCreationResult.GetError().c_str()); - return ""; - } - AZ_UNUSED(dirToArchive); - return AZStd::string::format(CreateArchiveCmd, archivePath.c_str()); - } - - AZStd::string GetExtractArchiveCommand(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool includeRoot) - { - auto pathCreationResult = MakeExtractArchivePath(archivePath, destinationPath, includeRoot); - if (!pathCreationResult) - { - AZ_Error(ErrorChannel, false, "%s", pathCreationResult.GetError().c_str()); - return ""; - } - - return AZStd::string::format(ExtractArchiveCmd, archivePath.c_str(), pathCreationResult.GetValue().c_str()); - } - - AZStd::string GetAddFilesToArchiveCommand(const AZStd::string& /*archivePath*/, const AZStd::string& /*listFilePath*/) - { - // Adding files into a archive using a list file is not currently supported - return {}; - } - - bool IsAddFilesToArchiveCommandSupported() - { - // Adding files into a archive using a list file is not currently supported - return false; - } - - AZStd::string GetAddFileToArchiveCommand(const AZStd::string& archivePath, const AZStd::string& file) - { - if (!MakeCreateArchivePath(archivePath).IsSuccess()) - { - AZ_Error(ErrorChannel, false, "Unable to make path for ( %s ).\n", archivePath.c_str()); - return {}; - } - return AZStd::string::format(AddFileCmd, archivePath.c_str(), file.c_str()); - } - - AZStd::string GetExtractFileCommand(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite) - { - AZStd::string commandLineArgs; - if (destinationPath.empty()) - { - // Extract file in archive from archive path to the current directory, overwriting a file of the same name that exists there. - commandLineArgs = AZStd::string::format(ExtractFileCmd, overWrite ? ExtractOverwrite : ExtractSkipExisting, archivePath.c_str(), fileInArchive.c_str()); - } - else - { - if (!MakePath(destinationPath).IsSuccess()) - { - AZ_Error(ErrorChannel, false, "Unable to make path ( %s ).\n", destinationPath.c_str()); - return {}; - } - // Extract file in archive from archive path to destinationPath, overwriting a file of the same name that exists there. - commandLineArgs = AZStd::string::format(ExtractFileDestination, overWrite ? ExtractOverwrite : ExtractSkipExisting, archivePath.c_str(), fileInArchive.c_str(), destinationPath.c_str()); - } - - return commandLineArgs; - } - - AZStd::string GetListFilesInArchiveCommand(const AZStd::string& archivePath) - { - AZStd::string commandLineArgs = AZStd::string::format(ListFilesInArchiveCmd, archivePath.c_str()); - return commandLineArgs; - } - - /* - Sample Console Output of the unzip list command - - Archive: /var/folders/1q/12nyzqc913qgm532y2c98mnm6w4_qv/T/ArchiveTests-ra8oMy/TestArchive.pak - Length Date Time Name - --------- ---------- ----- ---- - 0 10-14-2019 15:22 testfolder/ - 1 10-14-2019 15:22 testfolder/folderfile.txt - 1 10-14-2019 15:22 basicfile.txt - 1 10-14-2019 15:22 basicfile2.txt - 0 10-14-2019 15:22 testfolder2/ - 1 10-14-2019 15:22 testfolder2/sharedfolderfile2.txt - 1 10-14-2019 15:22 testfolder2/sharedfolderfile.txt - 0 10-14-2019 15:22 testfolder3/ - 0 10-14-2019 15:22 testfolder3/testfolder4/ - 1 10-14-2019 15:22 testfolder3/testfolder4/depthfile.bat - --------- ------- - 6 10 files - */ - - void ParseConsoleOutputFromListFilesInArchive(const AZStd::string& consoleOutput, AZStd::vector& fileEntries) - { - AZStd::vector fileEntryData; - AzFramework::StringFunc::Tokenize(consoleOutput.c_str(), fileEntryData, "\n"); - int startingLineIdx = 3; // first line that might contain the file name - for (size_t lineIdx = startingLineIdx; lineIdx < fileEntryData.size(); ++lineIdx) - { - AZStd::string& line = fileEntryData[lineIdx]; - AZStd::vector lineEntryData; - AzFramework::StringFunc::Tokenize(line.c_str(), lineEntryData, " "); - AZStd::string& fileName = lineEntryData.back(); - - if(fileName.back() == AZ_CORRECT_FILESYSTEM_SEPARATOR) - { - // if the filename ends with a separator - // than it indicates that this is a directory - continue; - } - - if(fileName.compare("-------") == 0) - { - return; - } - - fileEntries.emplace_back(fileName); - } - } - } // namespace Platform -} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/Platform/Linux/platform_linux_files.cmake b/Code/Framework/AzToolsFramework/Platform/Linux/platform_linux_files.cmake index 84d1cf808f..c2c5a11c4c 100644 --- a/Code/Framework/AzToolsFramework/Platform/Linux/platform_linux_files.cmake +++ b/Code/Framework/AzToolsFramework/Platform/Linux/platform_linux_files.cmake @@ -7,5 +7,4 @@ # set(FILES - AzToolsFramework/Archive/ArchiveComponent_Linux.cpp ) diff --git a/Code/Framework/AzToolsFramework/Platform/Mac/AzToolsFramework/Archive/ArchiveComponent_Mac.cpp b/Code/Framework/AzToolsFramework/Platform/Mac/AzToolsFramework/Archive/ArchiveComponent_Mac.cpp deleted file mode 100644 index 67b7b9cf66..0000000000 --- a/Code/Framework/AzToolsFramework/Platform/Mac/AzToolsFramework/Archive/ArchiveComponent_Mac.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include - -namespace AzToolsFramework -{ - namespace Platform - { - const char ErrorChannel[] = "ArchiveComponent_OSX"; - - const char ZipExePath[] = R"(/usr/bin/zip)"; - const char UnzipExePath[] = R"(/usr/bin/unzip)"; - - // v Requires investigation, the correct cmd should be R"(-r "%s" "%s/")" but tests fail - const char CreateArchiveCmd[] = R"(-r "%s" .)"; - - const char ExtractArchiveCmd[] = R"(-o "%s" -d "%s")"; - - const char AddFileCmd[] = R"("%s" "%s" -X)"; - const char AddFilesCmd[] = R"("%s" -X %s)"; - - const char ExtractFileCmd[] = R"(%s "%s" %s)"; - const char ExtractFileDestination[] = R"(%s "%s" "%s" -d "%s")"; - const char ExtractOverwrite[] = "-o"; - const char ExtractSkipExisting[] = "-n"; - const char ListFilesInArchiveCmd[] = "-l %s"; - - AZStd::string GetZipExePath() - { - return ZipExePath; - } - - AZStd::string GetUnzipExePath() - { - return UnzipExePath; - } - - AZ::Outcome MakePath(const AZStd::string& path) - { - // Create the folder if it does not already exist - if (!AZ::IO::FileIOBase::GetInstance()->Exists(path.c_str())) - { - auto result = AZ::IO::FileIOBase::GetInstance()->CreatePath(path.c_str()); - if (!result) - { - return AZ::Failure(AZStd::string::format("Path creation failed. Input path: %s \n", path.c_str())); - } - } - - return AZ::Success(path); - } - - AZ::Outcome MakeCreateArchivePath(const AZStd::string& archivePath) - { - // Remove the file name from the input path - // /some/folder/path/archive.zip -> /some/folder/path/ - AZStd::string strippedArchivePath = archivePath; - AzFramework::StringFunc::Path::StripFullName(strippedArchivePath); - - if (strippedArchivePath.empty()) - { - return AZ::Failure(AZStd::string::format("Stripped path name is empty. Cancelling path creation. Input path: %s\n", archivePath.c_str())); - } - - return MakePath(strippedArchivePath); - } - - AZ::Outcome MakeExtractArchivePath(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool includeRoot) - { - if(!includeRoot) - { - // Create the folder for the input destination path with no modifications - // /path/to/destination/ - return MakePath(destinationPath); - } - - // Get the name of the input archive. This will be the name of the root folder for the archive extraction - // /some/folder/path/archive.zip -> archive - AZStd::string zipFileName; - bool result = AzFramework::StringFunc::Path::GetFileName(archivePath.c_str(), zipFileName); - if(!result) - { - return AZ::Failure(AZStd::string::format("Failed to get name of zip file from the archive path. Cancelling path creation. \n Input Archive Path: %s \n", archivePath.c_str())); - } - - // Append the root folder name to the end of the destination path - // /path/to/destination/ + archive -> /path/to/destination/archive - AZStd::string destinationPathWithRoot; - result = AzFramework::StringFunc::Path::Join(destinationPath.c_str(), zipFileName.c_str(), destinationPathWithRoot); - if(!result) - { - return AZ::Failure(AZStd::string::format("Failed to append zip file name to the destination path. Cancelling path creation. \n Destination Path: %s \n Zip file name: %s \n", destinationPath.c_str(), zipFileName.c_str())); - } - - // Append a separator so that it is formatted like a folder - // /path/to/destination/archive -> /path/to/destination/archive/ - AzFramework::StringFunc::Path::AppendSeparator(destinationPathWithRoot); - return MakePath(destinationPathWithRoot); - } - - AZStd::string GetCreateArchiveCommand(const AZStd::string& archivePath, const AZStd::string& dirToArchive) - { - auto pathCreationResult = MakeCreateArchivePath(archivePath); - if (!pathCreationResult.IsSuccess()) - { - AZ_Error(ErrorChannel, false, pathCreationResult.GetError().c_str()); - return ""; - } - - // LY-116692. Requires proper investigation, the correct format should be: - // AZStd::string::format(CreateArchiveCmd, archivePath.c_str(), dirToArchive.c_str()); - // but unit test ArchiveTest.ListFilesInArchiveBlocking_FilesAtThreeDepths_FilesFound fails - AZ_UNUSED(dirToArchive); - return AZStd::string::format(CreateArchiveCmd, archivePath.c_str()); - } - - AZStd::string GetExtractArchiveCommand(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool includeRoot) - { - auto pathCreationResult = MakeExtractArchivePath(archivePath, destinationPath, includeRoot); - if (!pathCreationResult) - { - AZ_Error(ErrorChannel, false, pathCreationResult.GetError().c_str()); - return ""; - } - - return AZStd::string::format(ExtractArchiveCmd, archivePath.c_str(), pathCreationResult.GetValue().c_str()); - } - - AZStd::string GetAddFilesToArchiveCommand(const AZStd::string& archivePath, const AZStd::string& listFilePath) - { - auto pathCreationResult = MakeCreateArchivePath(archivePath); - if (!pathCreationResult) - { - AZ_Error(ErrorChannel, false, pathCreationResult.GetError().c_str()); - return ""; - } - AZStd::string fileListStr; - - { - AZ::IO::FileIOStream fileStream(listFilePath.c_str(), AZ::IO::OpenMode::ModeRead | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) - { - AZ::IO::SizeType length = fileStream.GetLength(); - AZStd::vector charBuffer; - charBuffer.resize_no_construct(length + 1); - - fileStream.Read(length, charBuffer.data()); - charBuffer.back() = 0; - - fileListStr.append("\""); - fileListStr.insert(1, charBuffer.data()); - AzFramework::StringFunc::Replace(fileListStr, "\n", "\" \""); - fileListStr.append("\""); - } - else - { - AZ_Error(ErrorChannel, false, "Unable to read list file ( %s ) \n", listFilePath.c_str()); - return ""; - } - } - - return AZStd::string::format(AddFilesCmd, archivePath.c_str(), fileListStr.c_str()); - } - - AZStd::string GetAddFileToArchiveCommand(const AZStd::string& archivePath, const AZStd::string& file) - { - auto pathCreationResult = MakeCreateArchivePath(archivePath); - if (!pathCreationResult) - { - AZ_Error(ErrorChannel, false, pathCreationResult.GetError().c_str()); - return ""; - } - - return AZStd::string::format(AddFileCmd, archivePath.c_str(), file.c_str()); - } - - AZStd::string GetExtractFileCommand(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite) - { - AZStd::string commandLineArgs; - if (destinationPath.empty()) - { - // Extract file in archive from archive path to the current directory, overwriting a file of the same name that exists there. - commandLineArgs = AZStd::string::format(ExtractFileCmd, overWrite ? ExtractOverwrite : ExtractSkipExisting, archivePath.c_str(), fileInArchive.c_str()); - } - else - { - if (!MakePath(destinationPath).IsSuccess()) - { - AZ_Error(ErrorChannel, false, "Unable to make path ( %s ).\n", destinationPath.c_str()); - return ""; - } - // Extract file in archive from archive path to destinationPath, overwriting a file of the same name that exists there. - commandLineArgs = AZStd::string::format(ExtractFileDestination, overWrite ? ExtractOverwrite : ExtractSkipExisting, archivePath.c_str(), fileInArchive.c_str(), destinationPath.c_str()); - } - - return commandLineArgs; - } - - AZStd::string GetListFilesInArchiveCommand(const AZStd::string& archivePath) - { - AZStd::string commandLineArgs = AZStd::string::format(ListFilesInArchiveCmd, archivePath.c_str()); - return commandLineArgs; - } - - /* - Sample Console Output of the unzip list command - - Archive: /var/folders/1q/12nyzqc913qgm532y2c98mnm6w4_qv/T/ArchiveTests-ra8oMy/TestArchive.pak - Length Date Time Name - --------- ---------- ----- ---- - 0 10-14-2019 15:22 testfolder/ - 1 10-14-2019 15:22 testfolder/folderfile.txt - 1 10-14-2019 15:22 basicfile.txt - 1 10-14-2019 15:22 basicfile2.txt - 0 10-14-2019 15:22 testfolder2/ - 1 10-14-2019 15:22 testfolder2/sharedfolderfile2.txt - 1 10-14-2019 15:22 testfolder2/sharedfolderfile.txt - 0 10-14-2019 15:22 testfolder3/ - 0 10-14-2019 15:22 testfolder3/testfolder4/ - 1 10-14-2019 15:22 testfolder3/testfolder4/depthfile.bat - --------- ------- - 6 10 files - */ - - void ParseConsoleOutputFromListFilesInArchive(const AZStd::string& consoleOutput, AZStd::vector& fileEntries) - { - AZStd::vector fileEntryData; - AzFramework::StringFunc::Tokenize(consoleOutput.c_str(), fileEntryData, "\n"); - int startingLineIdx = 3; // first line that might contain the file name - for (size_t lineIdx = startingLineIdx; lineIdx < fileEntryData.size(); ++lineIdx) - { - AZStd::string& line = fileEntryData[lineIdx]; - AZStd::vector lineEntryData; - AzFramework::StringFunc::Tokenize(line.c_str(), lineEntryData, " "); - AZStd::string& fileName = lineEntryData.back(); - - if(fileName.back() == AZ_CORRECT_FILESYSTEM_SEPARATOR) - { - // if the filename ends with a separator - // than it indicates that this is a directory - continue; - } - - if(fileName.compare("-------") == 0) - { - return; - } - - fileEntries.emplace_back(fileName); - } - } - - } // namespace Platform -} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/Platform/Mac/platform_mac_files.cmake b/Code/Framework/AzToolsFramework/Platform/Mac/platform_mac_files.cmake index 9928584f86..c2c5a11c4c 100644 --- a/Code/Framework/AzToolsFramework/Platform/Mac/platform_mac_files.cmake +++ b/Code/Framework/AzToolsFramework/Platform/Mac/platform_mac_files.cmake @@ -7,5 +7,4 @@ # set(FILES - AzToolsFramework/Archive/ArchiveComponent_Mac.cpp ) diff --git a/Code/Framework/AzToolsFramework/Platform/Windows/AzToolsFramework/Archive/ArchiveComponent_Windows.cpp b/Code/Framework/AzToolsFramework/Platform/Windows/AzToolsFramework/Archive/ArchiveComponent_Windows.cpp deleted file mode 100644 index 20f53af18b..0000000000 --- a/Code/Framework/AzToolsFramework/Platform/Windows/AzToolsFramework/Archive/ArchiveComponent_Windows.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include - -namespace AzToolsFramework -{ - namespace Platform - { - const char CreateArchiveCmd[] = R"(a -tzip -mx=1 "%s" -r "%s\*")"; - - // -aos is for skipping extract on existing files - const char ExtractArchiveCmd[] = R"(x -mmt=off "%s" -o"%s\*" -aos)"; - const char ExtractArchiveWithoutRootCmd[] = R"(x -mmt=off "%s" -o"%s" -aos)"; - const char AddFilesCmd[] = R"(a -tzip "%s" @"%s")"; - const char AddFileCmd[] = R"(a -tzip "%s" "%s")"; - const char ExtractFileCmd[] = R"(e -mmt=off "%s" "%s" %s)"; - const char ExtractFileDestination[] = R"(e -mmt=off "%s" -o"%s" "%s" %s)"; - const char ExtractOverwrite[] = "-aoa"; - const char ExtractSkipExisting[] = "-aos"; - const char ListFilesInArchiveCmd[] = R"(l -r -slt "%s")"; - - AZStd::string Get7zExePath() - { - const char* rootPath = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(rootPath, &AZ::ComponentApplicationRequests::GetEngineRoot); - AZStd::string exePath; - AzFramework::StringFunc::Path::ConstructFull(rootPath, "Tools", "7za", ".exe", exePath); - return exePath; - } - - AZStd::string GetZipExePath() - { - return Get7zExePath(); - } - - AZStd::string GetUnzipExePath() - { - return Get7zExePath(); - } - - AZStd::string GetCreateArchiveCommand(const AZStd::string& archivePath, const AZStd::string& dirToArchive) - { - return AZStd::string::format(CreateArchiveCmd, archivePath.c_str(), dirToArchive.c_str()); - } - - AZStd::string GetExtractArchiveCommand(const AZStd::string& archivePath, const AZStd::string& destinationPath, bool includeRoot) - { - if (includeRoot) - { - // Extract archive path to destinationPath\ and skipping extracting of existing files - return AZStd::string::format(ExtractArchiveCmd, archivePath.c_str(), destinationPath.c_str()); - } - else - { - // Extract archive path to destinationPath and skipping extracting of existing files - return AZStd::string::format(ExtractArchiveWithoutRootCmd, archivePath.c_str(), destinationPath.c_str()); - } - } - - AZStd::string GetAddFilesToArchiveCommand(const AZStd::string& archivePath, const AZStd::string& listFilePath) - { - return AZStd::string::format(AddFilesCmd, archivePath.c_str(), listFilePath.c_str()); - } - - AZStd::string GetAddFileToArchiveCommand(const AZStd::string& archivePath, const AZStd::string& file) - { - return AZStd::string::format(AddFileCmd, archivePath.c_str(), file.c_str()); - } - - AZStd::string GetExtractFileCommand(const AZStd::string& archivePath, const AZStd::string& fileInArchive, const AZStd::string& destinationPath, bool overWrite) - { - AZStd::string commandLineArgs; - if (destinationPath.empty()) - { - // Extract file in archive from archive path to the current directory, overwriting a file of the same name that exists there. - commandLineArgs = AZStd::string::format(ExtractFileCmd, archivePath.c_str(), fileInArchive.c_str(), overWrite ? ExtractOverwrite : ExtractSkipExisting); - } - else - { - // Extract file in archive from archive path to destinationPath, overwriting a file of the same name that exists there. - commandLineArgs = AZStd::string::format(ExtractFileDestination, archivePath.c_str(), destinationPath.c_str(), fileInArchive.c_str(), overWrite ? ExtractOverwrite : ExtractSkipExisting); - } - - return commandLineArgs; - } - - AZStd::string GetListFilesInArchiveCommand(const AZStd::string& archivePath) - { - AZStd::string commandLineArgs = AZStd::string::format(ListFilesInArchiveCmd, archivePath.c_str()); - return commandLineArgs; - } - - /* - File output for our list archive commands takes the following two patterns for files vs directories: - - Path = basicfile2.txt - Folder = - - Size = 1 - Packed Size = 1 - Modified = 2019-03-26 18:31:10 - Created = 2019-03-26 18:31:10 - Accessed = 2019-03-26 18:31:10 - Attributes = A - Encrypted = - - Comment = - CRC = 32D70693 - Method = Store - Characteristics = NTFS - Host OS = FAT - Version = 10 - Volume Index = 0 - Offset = 44 - - Path = testfolder - Folder = + - Size = 0 - Packed Size = 0 - Modified = 2019-03-26 18:31:10 - Created = 2019-03-26 18:31:10 - Accessed = 2019-03-26 18:31:10 - Attributes = D - Encrypted = - - Comment = - CRC = - Method = Store - Characteristics = NTFS - Host OS = FAT - Version = 20 - Volume Index = 0 - Offset = 89 - - */ - - void ParseConsoleOutputFromListFilesInArchive(const AZStd::string& consoleOutput, AZStd::vector& fileEntries) - { - AZStd::vector fileEntryData; - AzFramework::StringFunc::Tokenize(consoleOutput.c_str(), fileEntryData, "\r\n"); - for (size_t slotNum = 0; slotNum < fileEntryData.size(); ++slotNum) - { - AZStd::string& line = fileEntryData[slotNum]; - if (AzFramework::StringFunc::StartsWith(line, "Path = ")) - { - if ((slotNum + 1) < fileEntryData.size()) - { - // We're checking one past each entry we find for the Folder entry and skipping anything marked as a folder - // See sample output above - if (AzFramework::StringFunc::StartsWith(fileEntryData[slotNum + 1], "Folder = -")) - { - AzFramework::StringFunc::Replace(line, "Path = ", "", false, true); - fileEntries.emplace_back(AZStd::move(line)); - slotNum++; - } - } - } - } - } - } // namespace Platform -} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/Platform/Windows/platform_windows_files.cmake b/Code/Framework/AzToolsFramework/Platform/Windows/platform_windows_files.cmake index d4fc29984c..c2c5a11c4c 100644 --- a/Code/Framework/AzToolsFramework/Platform/Windows/platform_windows_files.cmake +++ b/Code/Framework/AzToolsFramework/Platform/Windows/platform_windows_files.cmake @@ -7,5 +7,4 @@ # set(FILES - AzToolsFramework/Archive/ArchiveComponent_Windows.cpp ) diff --git a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp index e7dad4b72f..395e4c9049 100644 --- a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp @@ -31,7 +31,6 @@ namespace UnitTest { namespace { - bool CreateDummyFile(const QString& fullPathToFile, const QString& tempStr = {}) { QFileInfo fi(fullPathToFile); @@ -50,7 +49,7 @@ namespace UnitTest return true; } - class ArchiveTest : + class ArchiveComponentTest : public ::testing::Test { @@ -73,7 +72,12 @@ namespace UnitTest return "Archive"; } - void CreateArchiveFolder( QString archiveFolderName, QStringList fileList ) + QString GetExtractFolderName() + { + return "Extracted"; + } + + void CreateArchiveFolder(QString archiveFolderName, QStringList fileList) { QDir tempPath = QDir(m_tempDir.GetDirectory()).filePath(archiveFolderName); @@ -84,6 +88,14 @@ namespace UnitTest } } + QString CreateArchiveListTextFile() + { + QString listFilePath = QDir(m_tempDir.GetDirectory()).absoluteFilePath("FileList.txt"); + QString textContent = CreateArchiveFileList().join("\n"); + EXPECT_TRUE(CreateDummyFile(listFilePath, textContent)); + return listFilePath; + } + void CreateArchiveFolder() { CreateArchiveFolder(GetArchiveFolderName(), CreateArchiveFileList()); @@ -99,25 +111,33 @@ namespace UnitTest return QDir(m_tempDir.GetDirectory()).filePath(GetArchiveFolderName()); } + QString GetExtractFolder() + { + return QDir(m_tempDir.GetDirectory()).filePath(GetExtractFolderName()); + } + bool CreateArchive() { - bool createResult{ false }; - AzToolsFramework::ArchiveCommandsBus::BroadcastResult(createResult, &AzToolsFramework::ArchiveCommandsBus::Events::CreateArchiveBlocking, GetArchivePath().toStdString().c_str(), GetArchiveFolder().toStdString().c_str()); - return createResult; + std::future createResult; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult(createResult, + &AzToolsFramework::ArchiveCommandsBus::Events::CreateArchive, + GetArchivePath().toUtf8().constData(), GetArchiveFolder().toUtf8().constData()); + bool result = createResult.get(); + return result; } void SetUp() override { - m_app.reset(aznew ToolsTestApplication("ArchiveTest")); + m_app.reset(aznew ToolsTestApplication("ArchiveComponentTest")); m_app->Start(AzFramework::Application::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { - fileIoBase->SetAlias("@assets@", m_tempDir.GetDirectory()); + fileIoBase->SetAlias("@products@", m_tempDir.GetDirectory()); } } @@ -132,76 +152,138 @@ namespace UnitTest }; #if AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS - TEST_F(ArchiveTest, DISABLED_CreateArchiveBlocking_FilesAtThreeDepths_ArchiveCreated) + TEST_F(ArchiveComponentTest, DISABLED_CreateArchive_FilesAtThreeDepths_ArchiveCreated) #else - TEST_F(ArchiveTest, CreateArchiveBlocking_FilesAtThreeDepths_ArchiveCreated) + TEST_F(ArchiveComponentTest, CreateArchive_FilesAtThreeDepths_ArchiveCreated) #endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS { EXPECT_TRUE(m_tempDir.IsValid()); CreateArchiveFolder(); + AZ_TEST_START_TRACE_SUPPRESSION; bool createResult = CreateArchive(); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; - EXPECT_EQ(createResult, true); + EXPECT_TRUE(createResult); } #if AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS - TEST_F(ArchiveTest, DISABLED_ListFilesInArchiveBlocking_FilesAtThreeDepths_FilesFound) + TEST_F(ArchiveComponentTest, DISABLED_ListFilesInArchive_FilesAtThreeDepths_FilesFound) #else - TEST_F(ArchiveTest, ListFilesInArchiveBlocking_FilesAtThreeDepths_FilesFound) + TEST_F(ArchiveComponentTest, ListFilesInArchive_FilesAtThreeDepths_FilesFound) #endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS { EXPECT_TRUE(m_tempDir.IsValid()); CreateArchiveFolder(); - + + AZ_TEST_START_TRACE_SUPPRESSION; EXPECT_EQ(CreateArchive(), true); AZStd::vector fileList; bool listResult{ false }; - AzToolsFramework::ArchiveCommandsBus::BroadcastResult(listResult, &AzToolsFramework::ArchiveCommandsBus::Events::ListFilesInArchiveBlocking, GetArchivePath().toStdString().c_str(), fileList); + AzToolsFramework::ArchiveCommandsBus::BroadcastResult(listResult, + &AzToolsFramework::ArchiveCommandsBus::Events::ListFilesInArchive, + GetArchivePath().toUtf8().constData(), fileList); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; + EXPECT_TRUE(listResult); EXPECT_EQ(fileList.size(), 6); } #if AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS - TEST_F(ArchiveTest, DISABLED_CreateDeltaCatalog_AssetsNotRegistered_Failure) + TEST_F(ArchiveComponentTest, DISABLED_CreateDeltaCatalog_AssetsNotRegistered_Failure) #else - TEST_F(ArchiveTest, CreateDeltaCatalog_AssetsNotRegistered_Failure) + TEST_F(ArchiveComponentTest, CreateDeltaCatalog_AssetsNotRegistered_Failure) #endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS { QStringList fileList = CreateArchiveFileList(); CreateArchiveFolder(GetArchiveFolderName(), fileList); - + AZ_TEST_START_TRACE_SUPPRESSION; bool createResult = CreateArchive(); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; EXPECT_EQ(createResult, true); bool catalogCreated{ true }; AZ::Test::AssertAbsorber assertAbsorber; - AzToolsFramework::AssetBundleCommandsBus::BroadcastResult(catalogCreated, &AzToolsFramework::AssetBundleCommandsBus::Events::CreateDeltaCatalog, GetArchivePath().toStdString().c_str(), true); + AzToolsFramework::AssetBundleCommandsBus::BroadcastResult(catalogCreated, + &AzToolsFramework::AssetBundleCommandsBus::Events::CreateDeltaCatalog, GetArchivePath().toUtf8().constData(), true); EXPECT_EQ(catalogCreated, false); } #if AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS - TEST_F(ArchiveTest, DISABLED_CreateDeltaCatalog_ArchiveWithoutCatalogAssetsRegistered_Success) + TEST_F(ArchiveComponentTest, DISABLED_AddFilesToArchive_FromListFile_Success) +#else + TEST_F(ArchiveComponentTest, AddFilesToArchive_FromListFile_Success) +#endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS + { + QString listFile = CreateArchiveListTextFile(); + CreateArchiveFolder(GetArchiveFolderName(), CreateArchiveFileList()); + + AZ_TEST_START_TRACE_SUPPRESSION; + std::future addResult; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult( + addResult, &AzToolsFramework::ArchiveCommandsBus::Events::AddFilesToArchive, GetArchivePath().toUtf8().constData(), + GetArchiveFolder().toUtf8().constData(), listFile.toUtf8().constData()); + bool result = addResult.get(); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; + + EXPECT_TRUE(result); + } + +#if AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS + TEST_F(ArchiveComponentTest, DISABLED_ExtractArchive_AllFiles_Success) +#else + TEST_F(ArchiveComponentTest, ExtractArchive_AllFiles_Success) +#endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS + { + CreateArchiveFolder(); + AZ_TEST_START_TRACE_SUPPRESSION; + bool createResult = CreateArchive(); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; + EXPECT_TRUE(createResult); + + AZ_TEST_START_TRACE_SUPPRESSION; + std::future extractResult; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult( + extractResult, &AzToolsFramework::ArchiveCommandsBus::Events::ExtractArchive, GetArchivePath().toUtf8().constData(), + GetExtractFolder().toUtf8().constData()); + bool result = extractResult.get(); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; + + EXPECT_TRUE(result); + + QStringList archiveFiles = CreateArchiveFileList(); + for (const auto& file : archiveFiles) + { + QString fullFilePath = QDir(GetExtractFolder()).absoluteFilePath(file); + QFileInfo fi(fullFilePath); + EXPECT_TRUE(fi.exists()); + } + } + +#if AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS + TEST_F(ArchiveComponentTest, DISABLED_CreateDeltaCatalog_ArchiveWithoutCatalogAssetsRegistered_Success) #else - TEST_F(ArchiveTest, CreateDeltaCatalog_ArchiveWithoutCatalogAssetsRegistered_Success) + TEST_F(ArchiveComponentTest, CreateDeltaCatalog_ArchiveWithoutCatalogAssetsRegistered_Success) #endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS { QStringList fileList = CreateArchiveFileList(); CreateArchiveFolder(GetArchiveFolderName(), fileList); + AZ_TEST_START_TRACE_SUPPRESSION; bool createResult = CreateArchive(); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; EXPECT_EQ(createResult, true); for (const auto& thisPath : fileList) { AZ::Data::AssetInfo newInfo; - newInfo.m_relativePath = thisPath.toStdString().c_str(); + newInfo.m_relativePath = thisPath.toUtf8().constData(); newInfo.m_assetType = AZ::Uuid::CreateRandom(); newInfo.m_sizeBytes = 100; // Arbitrary AZ::Data::AssetId generatedID(AZ::Uuid::CreateRandom()); @@ -212,7 +294,7 @@ namespace UnitTest bool catalogCreated{ false }; AZ_TEST_START_TRACE_SUPPRESSION; - AzToolsFramework::AssetBundleCommandsBus::BroadcastResult(catalogCreated, &AzToolsFramework::AssetBundleCommandsBus::Events::CreateDeltaCatalog, GetArchivePath().toStdString().c_str(), true); + AzToolsFramework::AssetBundleCommandsBus::BroadcastResult(catalogCreated, &AzToolsFramework::AssetBundleCommandsBus::Events::CreateDeltaCatalog, GetArchivePath().toUtf8().constData(), true); AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // produces different counts in different platforms EXPECT_EQ(catalogCreated, true); } diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp index 24488f3ed3..827737f561 100644 --- a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp +++ b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp @@ -37,10 +37,10 @@ namespace // anonymous bool Search(const AzToolsFramework::AssetFileInfoList& assetList, const AZ::Data::AssetId& assetId) { - return AZStd::find_if(assetList.m_fileInfoList.begin(), assetList.m_fileInfoList.end(), - [&](AzToolsFramework::AssetFileInfo fileInfo) - { - return fileInfo.m_assetId == assetId; + return AZStd::find_if(assetList.m_fileInfoList.begin(), assetList.m_fileInfoList.end(), + [&](AzToolsFramework::AssetFileInfo fileInfo) + { + return fileInfo.m_assetId == assetId; }); } } @@ -74,11 +74,11 @@ namespace UnitTest m_application->Start(AzFramework::Application::Descriptor()); - // By default @assets@ is setup to include the platform at the end. But this test is going to + // By default @products@ is setup to include the platform at the end. But this test is going to // loop over platforms and it will be included as part of the relative path of the file. // So the asset folder for these tests have to point to the cache project root folder, which // doesn't include the platform. - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", cacheProjectRootFolder.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", cacheProjectRootFolder.c_str()); for (int idx = 0; idx < s_totalAssets; idx++) { @@ -158,17 +158,17 @@ namespace UnitTest m_assetRegistry->RegisterAssetDependency(assets[5], AZ::Data::ProductDependency(assets[6], 0)); m_assetRegistry->RegisterAssetDependency(assets[6], AZ::Data::ProductDependency(assets[7], 0)); - // asset8 -> asset6 + // asset8 -> asset6 m_assetRegistry->RegisterAssetDependency(assets[8], AZ::Data::ProductDependency(assets[6], 0)); - // asset10 -> asset11 + // asset10 -> asset11 m_assetRegistry->RegisterAssetDependency(assets[10], AZ::Data::ProductDependency(assets[11], 0)); - // asset11 -> asset10 + // asset11 -> asset10 m_assetRegistry->RegisterAssetDependency(assets[11], AZ::Data::ProductDependency(assets[10], 0)); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -203,10 +203,6 @@ namespace UnitTest const AZStd::string engroot = AZ::Test::GetEngineRootPath(); AZ::IO::FileIOBase::GetInstance()->SetAlias("@engroot@", engroot.c_str()); - - AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); - assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); } void TearDown() override @@ -219,7 +215,7 @@ namespace UnitTest delete m_application; } - AZ::Data::AssetInfo GetAssetInfoById(const AZ::Data::AssetId& id) override + AZ::Data::AssetInfo GetAssetInfoById(const AZ::Data::AssetId& id) override { auto foundIter = m_assetRegistry->m_assetIdToInfo.find(id); if (foundIter != m_assetRegistry->m_assetIdToInfo.end()) @@ -540,7 +536,7 @@ namespace UnitTest EXPECT_TRUE(Search(assetList, assets[7])); EXPECT_TRUE(Search(assetList, assets[8])); - // Removing the android flag from the asset should still produce the same result + // Removing the android flag from the asset should still produce the same result m_assetSeedManager->RemoveSeedAsset(assets[8], AzFramework::PlatformFlags::Platform_ANDROID); assetList = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::PC); @@ -564,7 +560,7 @@ namespace UnitTest EXPECT_TRUE(Search(assetList, assets[3])); EXPECT_TRUE(Search(assetList, assets[4])); - // Adding the android flag again to the asset + // Adding the android flag again to the asset m_assetSeedManager->AddSeedAsset(assets[8], AzFramework::PlatformFlags::Platform_ANDROID); assetList = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::ANDROID_ID); @@ -624,7 +620,7 @@ namespace UnitTest EXPECT_EQ(assetList1.m_fileInfoList[0].m_assetId, assetList2.m_fileInfoList[0].m_assetId); EXPECT_GE(assetList2.m_fileInfoList[0].m_modificationTime, assetList1.m_fileInfoList[0].m_modificationTime); // file mod time should change - + // file hash should not change for (int idx = 0; idx < 5; idx++) { @@ -680,7 +676,7 @@ namespace UnitTest m_assetSeedManager->AddSeedAsset(assets[validFileIndex], AzFramework::PlatformFlags::Platform_PC, m_assetsPath[invalidFileIndex]); const AzFramework::AssetSeedList& oldSeedList = m_assetSeedManager->GetAssetSeedList(); - + for (const auto& seedInfo : oldSeedList) { if (seedInfo.m_assetId == assets[validFileIndex]) diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h b/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h index 2678c2f57c..ba3e38ba8f 100644 --- a/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h +++ b/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h @@ -18,8 +18,6 @@ namespace UnitTests { public: MOCK_METHOD1(GetAbsoluteAssetDatabaseLocation, bool(AZStd::string&)); - MOCK_METHOD0(GetAbsoluteDevGameFolderPath, const char* ()); - MOCK_METHOD0(GetAbsoluteDevRootFolderPath, const char* ()); MOCK_METHOD2(GetRelativeProductPathFromFullSourceOrProductPath, bool(const AZStd::string& fullPath, AZStd::string& relativeProductPath)); MOCK_METHOD3(GenerateRelativeSourcePath, bool(const AZStd::string& sourcePath, AZStd::string& relativePath, AZStd::string& watchFolder)); diff --git a/Code/Framework/AzToolsFramework/Tests/BoundsTestComponent.cpp b/Code/Framework/AzToolsFramework/Tests/BoundsTestComponent.cpp new file mode 100644 index 0000000000..11a077f53c --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/BoundsTestComponent.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include + +namespace UnitTest +{ + AZ::Aabb BoundsTestComponent::GetEditorSelectionBoundsViewport([[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo) + { + return GetWorldBounds(); + } + + bool BoundsTestComponent::EditorSelectionIntersectRayViewport( + [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) + { + return AzToolsFramework::AabbIntersectRay(src, dir, GetWorldBounds(), distance); + } + + bool BoundsTestComponent::SupportsEditorRayIntersect() + { + return true; + } + + void BoundsTestComponent::Reflect([[maybe_unused]] AZ::ReflectContext* context) + { + // noop + } + + void BoundsTestComponent::Activate() + { + AzFramework::BoundsRequestBus::Handler::BusConnect(GetEntityId()); + AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusConnect(GetEntityId()); + } + + void BoundsTestComponent::Deactivate() + { + AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusDisconnect(); + AzFramework::BoundsRequestBus::Handler::BusDisconnect(); + } + + AZ::Aabb BoundsTestComponent::GetWorldBounds() + { + AZ::Transform worldFromLocal = AZ::Transform::CreateIdentity(); + AZ::TransformBus::EventResult(worldFromLocal, GetEntityId(), &AZ::TransformBus::Events::GetWorldTM); + return GetLocalBounds().GetTransformedAabb(worldFromLocal); + } + + AZ::Aabb BoundsTestComponent::GetLocalBounds() + { + return AZ::Aabb::CreateFromMinMax(AZ::Vector3(-0.5f), AZ::Vector3(0.5f)); + } + +} // namespace UnitTest diff --git a/Code/Framework/AzToolsFramework/Tests/BoundsTestComponent.h b/Code/Framework/AzToolsFramework/Tests/BoundsTestComponent.h new file mode 100644 index 0000000000..1aabcfcd64 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/BoundsTestComponent.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace UnitTest +{ + //! Basic component that implements BoundsRequestBus and EditorComponentSelectionRequestsBus to be compatible + //! with the Editor visibility system. + //! Note: Used for simulating selection (picking) in the viewport. + class BoundsTestComponent + : public AzToolsFramework::Components::EditorComponentBase + , public AzFramework::BoundsRequestBus::Handler + , public AzToolsFramework::EditorComponentSelectionRequestsBus::Handler + { + public: + AZ_EDITOR_COMPONENT( + BoundsTestComponent, "{E6312E9D-8489-4677-9980-C93C328BC92C}", AzToolsFramework::Components::EditorComponentBase); + + static void Reflect(AZ::ReflectContext* context); + + // AZ::Component overrides ... + void Activate() override; + void Deactivate() override; + + // EditorComponentSelectionRequestsBus overrides ... + AZ::Aabb GetEditorSelectionBoundsViewport(const AzFramework::ViewportInfo& viewportInfo) override; + bool EditorSelectionIntersectRayViewport( + const AzFramework::ViewportInfo& viewportInfo, const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) override; + bool SupportsEditorRayIntersect() override; + + // BoundsRequestBus overrides ... + AZ::Aabb GetWorldBounds() override; + AZ::Aabb GetLocalBounds() override; + }; + +} // namespace UnitTest diff --git a/Code/Framework/AzToolsFramework/Tests/EditorTransformComponentSelectionTests.cpp b/Code/Framework/AzToolsFramework/Tests/EditorTransformComponentSelectionTests.cpp index 449c4549be..81909ac511 100644 --- a/Code/Framework/AzToolsFramework/Tests/EditorTransformComponentSelectionTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/EditorTransformComponentSelectionTests.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -22,12 +21,10 @@ #include #include #include -#include #include #include #include #include -#include #include #include #include @@ -41,6 +38,8 @@ #include #include +#include + namespace AZ { std::ostream& operator<<(std::ostream& os, const EntityId entityId) @@ -123,80 +122,6 @@ namespace UnitTest EXPECT_FALSE(m_cache.IsVisibleEntityVisible(m_cache.GetVisibleEntityIndexFromId(m_entityIds[2]).value())); } - //! Basic component that implements BoundsRequestBus and EditorComponentSelectionRequestsBus to be compatible - //! with the Editor visibility system. - //! Note: Used for simulating selection (picking) in the viewport. - class BoundsTestComponent - : public AzToolsFramework::Components::EditorComponentBase - , public AzFramework::BoundsRequestBus::Handler - , public AzToolsFramework::EditorComponentSelectionRequestsBus::Handler - { - public: - AZ_EDITOR_COMPONENT( - BoundsTestComponent, "{E6312E9D-8489-4677-9980-C93C328BC92C}", AzToolsFramework::Components::EditorComponentBase); - - static void Reflect(AZ::ReflectContext* context); - - // AZ::Component overrides ... - void Activate() override; - void Deactivate() override; - - // EditorComponentSelectionRequestsBus overrides ... - AZ::Aabb GetEditorSelectionBoundsViewport(const AzFramework::ViewportInfo& viewportInfo) override; - bool EditorSelectionIntersectRayViewport( - const AzFramework::ViewportInfo& viewportInfo, const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) override; - bool SupportsEditorRayIntersect() override; - - // BoundsRequestBus overrides ... - AZ::Aabb GetWorldBounds() override; - AZ::Aabb GetLocalBounds() override; - }; - - AZ::Aabb BoundsTestComponent::GetEditorSelectionBoundsViewport([[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo) - { - return GetWorldBounds(); - } - - bool BoundsTestComponent::EditorSelectionIntersectRayViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) - { - return AzToolsFramework::AabbIntersectRay(src, dir, GetWorldBounds(), distance); - } - - bool BoundsTestComponent::SupportsEditorRayIntersect() - { - return true; - } - - void BoundsTestComponent::Reflect([[maybe_unused]] AZ::ReflectContext* context) - { - // noop - } - - void BoundsTestComponent::Activate() - { - AzFramework::BoundsRequestBus::Handler::BusConnect(GetEntityId()); - AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusConnect(GetEntityId()); - } - - void BoundsTestComponent::Deactivate() - { - AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusDisconnect(); - AzFramework::BoundsRequestBus::Handler::BusDisconnect(); - } - - AZ::Aabb BoundsTestComponent::GetWorldBounds() - { - AZ::Transform worldFromLocal = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(worldFromLocal, GetEntityId(), &AZ::TransformBus::Events::GetWorldTM); - return GetLocalBounds().GetTransformedAabb(worldFromLocal); - } - - AZ::Aabb BoundsTestComponent::GetLocalBounds() - { - return AZ::Aabb::CreateFromMinMax(AZ::Vector3(-0.5f), AZ::Vector3(0.5f)); - } - // Fixture to support testing EditorTransformComponentSelection functionality on an Entity selection. class EditorTransformComponentSelectionFixture : public ToolsApplicationFixture { @@ -242,11 +167,11 @@ namespace UnitTest { // the initial starting position of the entities AZ::TransformBus::Event( - m_entityId1, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(m_entity1WorldTranslation)); + m_entityId1, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(Entity1WorldTranslation)); AZ::TransformBus::Event( - m_entityId2, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(m_entity2WorldTranslation)); + m_entityId2, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(Entity2WorldTranslation)); AZ::TransformBus::Event( - m_entityId3, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(m_entity3WorldTranslation)); + m_entityId3, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(Entity3WorldTranslation)); } static void PositionCamera(AzFramework::CameraState& cameraState) @@ -261,9 +186,10 @@ namespace UnitTest AZ::EntityId m_entityId1; AZ::EntityId m_entityId2; AZ::EntityId m_entityId3; - AZ::Vector3 m_entity1WorldTranslation = AZ::Vector3(5.0f, 15.0f, 10.0f); - AZ::Vector3 m_entity2WorldTranslation = AZ::Vector3(5.0f, 14.0f, 10.0f); - AZ::Vector3 m_entity3WorldTranslation = AZ::Vector3(5.0f, 16.0f, 10.0f); + + static inline const AZ::Vector3 Entity1WorldTranslation = AZ::Vector3(5.0f, 15.0f, 10.0f); + static inline const AZ::Vector3 Entity2WorldTranslation = AZ::Vector3(5.0f, 14.0f, 10.0f); + static inline const AZ::Vector3 Entity3WorldTranslation = AZ::Vector3(5.0f, 16.0f, 10.0f); }; void ArrangeIndividualRotatedEntitySelection(const AzToolsFramework::EntityIdList& entityIds, const AZ::Quaternion& orientation) @@ -343,9 +269,10 @@ namespace UnitTest using AzToolsFramework::EditorInteractionSystemViewportSelectionRequestBus; EditorInteractionSystemViewportSelectionRequestBus::Event( AzToolsFramework::GetEntityContextId(), &EditorInteractionSystemViewportSelectionRequestBus::Events::SetHandler, - [](const AzToolsFramework::EditorVisibleEntityDataCache* entityDataCache) + [](const AzToolsFramework::EditorVisibleEntityDataCache* entityDataCache, + [[maybe_unused]] AzToolsFramework::ViewportEditorModeTrackerInterface* viewportEditorModeTracker) { - return AZStd::make_unique(entityDataCache); + return AZStd::make_unique(entityDataCache, viewportEditorModeTracker); }); // When @@ -371,16 +298,16 @@ namespace UnitTest // Given AzToolsFramework::SelectEntity(m_entityId1); - ArrangeIndividualRotatedEntitySelection(m_entityIds, AZ::Quaternion::CreateRotationX(AZ::DegToRad(90.0f))); + const auto entityTransform = AZ::Transform::CreateFromQuaternion(AZ::Quaternion::CreateRotationX(AZ::DegToRad(90.0f))); + ArrangeIndividualRotatedEntitySelection(m_entityIds, entityTransform.GetRotation()); RefreshManipulators(EditorTransformComponentSelectionRequestBus::Events::RefreshType::All); SetTransformMode(EditorTransformComponentSelectionRequestBus::Events::Mode::Rotation); const AZ::Transform manipulatorTransformBefore = GetManipulatorTransform().value_or(AZ::Transform::CreateIdentity()); - // check preconditions - manipulator transform matches parent/world transform (identity) - EXPECT_THAT(manipulatorTransformBefore.GetBasisY(), IsClose(AZ::Vector3::CreateAxisY())); - EXPECT_THAT(manipulatorTransformBefore.GetBasisZ(), IsClose(AZ::Vector3::CreateAxisZ())); + // check preconditions - manipulator transform matches the entity transform + EXPECT_THAT(manipulatorTransformBefore, IsClose(entityTransform)); /////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -624,7 +551,7 @@ namespace UnitTest EXPECT_TRUE(selectedEntitiesBefore.empty()); // calculate the position in screen space of the initial entity position - const auto entity1ScreenPosition = AzFramework::WorldToScreen(m_entity1WorldTranslation, m_cameraState); + const auto entity1ScreenPosition = AzFramework::WorldToScreen(Entity1WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(true) @@ -649,7 +576,7 @@ namespace UnitTest EXPECT_TRUE(selectedEntitiesBefore.empty()); // calculate the position in screen space of the initial entity position - const auto entity1ScreenPosition = AzFramework::WorldToScreen(m_entity1WorldTranslation, m_cameraState); + const auto entity1ScreenPosition = AzFramework::WorldToScreen(Entity1WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(false) @@ -728,7 +655,7 @@ namespace UnitTest AzToolsFramework::SelectEntity(m_entityId1); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(true) @@ -754,7 +681,7 @@ namespace UnitTest AzToolsFramework::SelectEntity(m_entityId1); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(false) @@ -780,7 +707,7 @@ namespace UnitTest AzToolsFramework::SelectEntity(m_entityId1); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(true) @@ -806,7 +733,7 @@ namespace UnitTest AzToolsFramework::SelectEntity(m_entityId1); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(false) @@ -832,7 +759,7 @@ namespace UnitTest AzToolsFramework::SelectEntities({ m_entityId1, m_entityId2 }); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(true) @@ -858,7 +785,7 @@ namespace UnitTest AzToolsFramework::SelectEntities({ m_entityId1, m_entityId2 }); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // click the entity in the viewport m_actionDispatcher->SetStickySelect(false) @@ -1001,7 +928,7 @@ namespace UnitTest AzToolsFramework::SelectEntity(m_entityId1); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // single click select entity2 m_actionDispatcher->SetStickySelect(false) @@ -1035,7 +962,7 @@ namespace UnitTest AzToolsFramework::SelectEntity(m_entityId1); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // single click select entity2 m_actionDispatcher->SetStickySelect(GetParam()) @@ -1056,7 +983,7 @@ namespace UnitTest manipulatorTransform, AzToolsFramework::GetEntityContextId(), &AzToolsFramework::EditorTransformComponentSelectionRequestBus::Events::GetManipulatorTransform); - EXPECT_THAT(manipulatorTransform->GetTranslation(), IsClose(m_entity2WorldTranslation)); + EXPECT_THAT(manipulatorTransform->GetTranslation(), IsClose(Entity2WorldTranslation)); } TEST_P( @@ -1069,7 +996,7 @@ namespace UnitTest AzToolsFramework::SelectEntity(m_entityId1); // calculate the position in screen space of the second entity - const auto entity2ScreenPosition = AzFramework::WorldToScreen(m_entity2WorldTranslation, m_cameraState); + const auto entity2ScreenPosition = AzFramework::WorldToScreen(Entity2WorldTranslation, m_cameraState); // position in space above the entities const auto clickOffPositionWorld = AZ::Vector3(5.0f, 15.0f, 12.0f); @@ -1096,7 +1023,7 @@ namespace UnitTest manipulatorTransform, AzToolsFramework::GetEntityContextId(), &AzToolsFramework::EditorTransformComponentSelectionRequestBus::Events::GetManipulatorTransform); - EXPECT_THAT(manipulatorTransform->GetTranslation(), IsClose(m_entity2WorldTranslation)); + EXPECT_THAT(manipulatorTransform->GetTranslation(), IsClose(Entity2WorldTranslation)); }) ->MousePosition(clickOffPositionScreen) ->KeyboardModifierDown(AzToolsFramework::ViewportInteraction::KeyboardModifier::Control) @@ -1113,11 +1040,560 @@ namespace UnitTest &AzToolsFramework::EditorTransformComponentSelectionRequestBus::Events::GetManipulatorTransform); // manipulator transform is reset - EXPECT_THAT(manipulatorTransform->GetTranslation(), IsClose(m_entity1WorldTranslation)); + EXPECT_THAT(manipulatorTransform->GetTranslation(), IsClose(Entity1WorldTranslation)); } INSTANTIATE_TEST_CASE_P(All, EditorTransformComponentSelectionViewportPickingManipulatorTestFixtureParam, testing::Values(true, false)); + // create alias for EditorTransformComponentSelectionViewportPickingManipulatorTestFixture to help group tests + using EditorTransformComponentSelectionManipulatorInteractionTestFixture = + EditorTransformComponentSelectionViewportPickingManipulatorTestFixture; + + // type to group related inputs and outcomes for parameterized tests (single entity) + struct ManipulatorOptionsSingle + { + AzToolsFramework::ViewportInteraction::KeyboardModifier m_keyboardModifier; + AZ::Transform m_expectedManipulatorTransformAfter; + AZ::Transform m_expectedEntityTransformAfter; + }; + + class EditorTransformComponentSelectionRotationManipulatorSingleEntityTestFixtureParam + : public EditorTransformComponentSelectionManipulatorInteractionTestFixture + , public ::testing::WithParamInterface + { + }; + + TEST_P( + EditorTransformComponentSelectionRotationManipulatorSingleEntityTestFixtureParam, + RotatingASingleEntityWithDifferentModifierCombinations) + { + using AzToolsFramework::EditorTransformComponentSelectionRequestBus; + + PositionEntities(); + PositionCamera(m_cameraState); + + SetTransformMode(EditorTransformComponentSelectionRequestBus::Events::Mode::Rotation); + + AzToolsFramework::SelectEntity(m_entityId1); + + const float screenToWorldMultiplier = AzToolsFramework::CalculateScreenToWorldMultiplier(Entity1WorldTranslation, m_cameraState); + const float manipulatorRadius = 2.0f * screenToWorldMultiplier; + + const auto rotationManipulatorStartHoldWorldPosition = Entity1WorldTranslation + + AZ::Quaternion::CreateRotationX(AZ::DegToRad(-45.0f)).TransformVector(AZ::Vector3::CreateAxisY(-manipulatorRadius)); + const auto rotationManipulatorEndHoldWorldPosition = Entity1WorldTranslation + + AZ::Quaternion::CreateRotationX(AZ::DegToRad(-135.0f)).TransformVector(AZ::Vector3::CreateAxisY(-manipulatorRadius)); + + // calculate screen space positions + const auto rotationManipulatorHoldScreenPosition = + AzFramework::WorldToScreen(rotationManipulatorStartHoldWorldPosition, m_cameraState); + const auto rotationManipulatorEndHoldScreenPosition = + AzFramework::WorldToScreen(rotationManipulatorEndHoldWorldPosition, m_cameraState); + + m_actionDispatcher->CameraState(m_cameraState) + ->MousePosition(rotationManipulatorHoldScreenPosition) + ->KeyboardModifierDown(GetParam().m_keyboardModifier) + ->MouseLButtonDown() + ->MousePosition(rotationManipulatorEndHoldScreenPosition) + ->MouseLButtonUp(); + + const auto expectedEntityTransform = GetParam().m_expectedEntityTransformAfter; + const auto expectedManipulatorTransform = GetParam().m_expectedManipulatorTransformAfter; + + const auto manipulatorTransform = GetManipulatorTransform(); + const auto entityTransform = AzToolsFramework::GetWorldTransform(m_entityId1); + + EXPECT_THAT(*manipulatorTransform, IsClose(expectedManipulatorTransform)); + EXPECT_THAT(entityTransform, IsClose(expectedEntityTransform)); + } + + static const AZ::Transform ExpectedTransformAfterLocalRotationManipulatorMotion = AZ::Transform::CreateFromQuaternionAndTranslation( + AZ::Quaternion::CreateRotationX(AZ::DegToRad(-90.0f)), + EditorTransformComponentSelectionViewportPickingFixture::Entity1WorldTranslation); + + INSTANTIATE_TEST_CASE_P( + All, + EditorTransformComponentSelectionRotationManipulatorSingleEntityTestFixtureParam, + testing::Values( + // this replicates rotating an entity in local space with no modifiers held + // manipulator and entity rotate + ManipulatorOptionsSingle{ AzToolsFramework::ViewportInteraction::KeyboardModifier::None, + ExpectedTransformAfterLocalRotationManipulatorMotion, + ExpectedTransformAfterLocalRotationManipulatorMotion }, + // this replicates rotating an entity in local space with the alt modifier held + // manipulator and entity rotate + ManipulatorOptionsSingle{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Alt, + ExpectedTransformAfterLocalRotationManipulatorMotion, + ExpectedTransformAfterLocalRotationManipulatorMotion }, + // this replicates rotating an entity in world space with the shift modifier held + // entity rotates, manipulator remains aligned to world + ManipulatorOptionsSingle{ + AzToolsFramework::ViewportInteraction::KeyboardModifier::Shift, + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity1WorldTranslation), + ExpectedTransformAfterLocalRotationManipulatorMotion }, + // this replicates rotating the manipulator in local space with the ctrl modifier held (entity is unchanged) + ManipulatorOptionsSingle{ + AzToolsFramework::ViewportInteraction::KeyboardModifier::Ctrl, ExpectedTransformAfterLocalRotationManipulatorMotion, + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity1WorldTranslation) })); + + // type to group related inputs and outcomes for parameterized tests (two entities) + struct ManipulatorOptionsMultiple + { + AzToolsFramework::ViewportInteraction::KeyboardModifier m_keyboardModifier; + AZ::Transform m_expectedManipulatorTransformAfter; + AZ::Transform m_firstExpectedEntityTransformAfter; + AZ::Transform m_secondExpectedEntityTransformAfter; + }; + + class EditorTransformComponentSelectionRotationManipulatorMultipleEntityTestFixtureParam + : public EditorTransformComponentSelectionManipulatorInteractionTestFixture + , public ::testing::WithParamInterface + { + }; + + TEST_P( + EditorTransformComponentSelectionRotationManipulatorMultipleEntityTestFixtureParam, + RotatingMultipleEntitiesWithDifferentModifierCombinations) + { + using AzToolsFramework::EditorTransformComponentSelectionRequestBus; + + PositionEntities(); + PositionCamera(m_cameraState); + + SetTransformMode(EditorTransformComponentSelectionRequestBus::Events::Mode::Rotation); + + AzToolsFramework::SelectEntities({ m_entityId2, m_entityId3 }); + + // manipulator should be centered between the two entities + const auto initialManipulatorTransform = GetManipulatorTransform(); + + const float screenToWorldMultiplier = + AzToolsFramework::CalculateScreenToWorldMultiplier(initialManipulatorTransform->GetTranslation(), m_cameraState); + const float manipulatorRadius = 2.0f * screenToWorldMultiplier; + + const auto rotationManipulatorStartHoldWorldPosition = initialManipulatorTransform->GetTranslation() + + AZ::Quaternion::CreateRotationX(AZ::DegToRad(-45.0f)).TransformVector(AZ::Vector3::CreateAxisY(-manipulatorRadius)); + const auto rotationManipulatorEndHoldWorldPosition = initialManipulatorTransform->GetTranslation() + + AZ::Quaternion::CreateRotationX(AZ::DegToRad(-135.0f)).TransformVector(AZ::Vector3::CreateAxisY(-manipulatorRadius)); + + // calculate screen space positions + const auto rotationManipulatorHoldScreenPosition = + AzFramework::WorldToScreen(rotationManipulatorStartHoldWorldPosition, m_cameraState); + const auto rotationManipulatorEndHoldScreenPosition = + AzFramework::WorldToScreen(rotationManipulatorEndHoldWorldPosition, m_cameraState); + + m_actionDispatcher->CameraState(m_cameraState) + ->MousePosition(rotationManipulatorHoldScreenPosition) + ->KeyboardModifierDown(GetParam().m_keyboardModifier) + ->MouseLButtonDown() + ->MousePosition(rotationManipulatorEndHoldScreenPosition) + ->MouseLButtonUp(); + + const auto expectedEntity2Transform = GetParam().m_firstExpectedEntityTransformAfter; + const auto expectedEntity3Transform = GetParam().m_secondExpectedEntityTransformAfter; + const auto expectedManipulatorTransform = GetParam().m_expectedManipulatorTransformAfter; + + const auto manipulatorTransformAfter = GetManipulatorTransform(); + const auto entity2Transform = AzToolsFramework::GetWorldTransform(m_entityId2); + const auto entity3Transform = AzToolsFramework::GetWorldTransform(m_entityId3); + + EXPECT_THAT(*manipulatorTransformAfter, IsClose(expectedManipulatorTransform)); + EXPECT_THAT(entity2Transform, IsClose(expectedEntity2Transform)); + EXPECT_THAT(entity3Transform, IsClose(expectedEntity3Transform)); + } + + // note: The aggregate manipulator position will be the average of entity 2 and 3 combined which + // winds up being the same as entity 1 + static const AZ::Vector3 AggregateManipulatorPositionWithEntity2and3Selected = + EditorTransformComponentSelectionViewportPickingFixture::Entity1WorldTranslation; + + static const AZ::Transform ExpectedEntity2TransformAfterLocalGroupRotationManipulatorMotion = + AZ::Transform::CreateTranslation(AggregateManipulatorPositionWithEntity2and3Selected) * + AZ::Transform::CreateFromQuaternion(AZ::Quaternion::CreateRotationX(AZ::DegToRad(-90.0f))) * + AZ::Transform::CreateTranslation(AZ::Vector3::CreateAxisY(-1.0f)); + static const AZ::Transform ExpectedEntity3TransformAfterLocalGroupRotationManipulatorMotion = + AZ::Transform::CreateTranslation(AggregateManipulatorPositionWithEntity2and3Selected) * + AZ::Transform::CreateFromQuaternion(AZ::Quaternion::CreateRotationX(AZ::DegToRad(-90.0f))) * + AZ::Transform::CreateTranslation(AZ::Vector3::CreateAxisY(1.0f)); + static const AZ::Transform ExpectedEntity2TransformAfterLocalIndividualRotationManipulatorMotion = + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation) * + AZ::Transform::CreateFromQuaternion(AZ::Quaternion::CreateRotationX(AZ::DegToRad(-90.0f))); + static const AZ::Transform ExpectedEntity3TransformAfterLocalIndividualRotationManipulatorMotion = + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation) * + AZ::Transform::CreateFromQuaternion(AZ::Quaternion::CreateRotationX(AZ::DegToRad(-90.0f))); + + INSTANTIATE_TEST_CASE_P( + All, + EditorTransformComponentSelectionRotationManipulatorMultipleEntityTestFixtureParam, + testing::Values( + // this replicates rotating a group of entities in local space with no modifiers held + // manipulator and entity rotate + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::None, + ExpectedTransformAfterLocalRotationManipulatorMotion, + ExpectedEntity2TransformAfterLocalGroupRotationManipulatorMotion, + ExpectedEntity3TransformAfterLocalGroupRotationManipulatorMotion }, + // this replicates rotating a group of entities in local space with the alt modifier held + // manipulator and entity rotate + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Alt, + ExpectedTransformAfterLocalRotationManipulatorMotion, + ExpectedEntity2TransformAfterLocalIndividualRotationManipulatorMotion, + ExpectedEntity3TransformAfterLocalIndividualRotationManipulatorMotion }, + // this replicates rotating a group of entities in world space with the shift modifier held + // entity rotates, manipulator remains aligned to world + ManipulatorOptionsMultiple{ + AzToolsFramework::ViewportInteraction::KeyboardModifier::Shift, + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity1WorldTranslation), + ExpectedEntity2TransformAfterLocalGroupRotationManipulatorMotion, + ExpectedEntity3TransformAfterLocalGroupRotationManipulatorMotion }, + // this replicates rotating the manipulator in local space with the ctrl modifier held (entity is unchanged) + ManipulatorOptionsMultiple{ + AzToolsFramework::ViewportInteraction::KeyboardModifier::Ctrl, ExpectedTransformAfterLocalRotationManipulatorMotion, + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation), + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation) })); + + class EditorTransformComponentSelectionTranslationManipulatorSingleEntityTestFixtureParam + : public EditorTransformComponentSelectionManipulatorInteractionTestFixture + , public ::testing::WithParamInterface + { + }; + + static const float LinearManipulatorYAxisMovement = -3.0f; + static const float LinearManipulatorZAxisMovement = 2.0f; + + TEST_P( + EditorTransformComponentSelectionTranslationManipulatorSingleEntityTestFixtureParam, + TranslatingASingleEntityWithDifferentModifierCombinations) + { + using AzToolsFramework::EditorTransformComponentSelectionRequestBus; + + PositionEntities(); + + // move camera up and to the left so it's just above the normal row of entities + AzFramework::SetCameraTransform( + m_cameraState, + AZ::Transform::CreateFromQuaternionAndTranslation( + AZ::Quaternion::CreateFromEulerAnglesDegrees(AZ::Vector3(0.0f, 0.0f, 90.0f)), AZ::Vector3(10.0f, 14.5, 11.0f))); + + SetTransformMode(EditorTransformComponentSelectionRequestBus::Events::Mode::Translation); + + AzToolsFramework::SelectEntity(m_entityId1); + const auto entity1Transform = AzToolsFramework::GetWorldTransform(m_entityId1); + + const float screenToWorldMultiplier = AzToolsFramework::CalculateScreenToWorldMultiplier( + AzToolsFramework::GetWorldTransform(m_entityId1).GetTranslation(), m_cameraState); + + // calculate positions for two click and drag motions (moving a linear manipulator) + // begin each click in the center of the line of the linear manipulators + const auto translationManipulatorStartHoldWorldPosition1 = + AzToolsFramework::GetWorldTransform(m_entityId1).GetTranslation() + entity1Transform.GetBasisZ() * screenToWorldMultiplier; + const auto translationManipulatorEndHoldWorldPosition1 = + translationManipulatorStartHoldWorldPosition1 + AZ::Vector3::CreateAxisZ(LinearManipulatorZAxisMovement); + const auto translationManipulatorStartHoldWorldPosition2 = AzToolsFramework::GetWorldTransform(m_entityId1).GetTranslation() + + AZ::Vector3::CreateAxisZ(LinearManipulatorZAxisMovement) - entity1Transform.GetBasisY() * screenToWorldMultiplier; + const auto translationManipulatorEndHoldWorldPosition2 = + translationManipulatorStartHoldWorldPosition2 + AZ::Vector3::CreateAxisY(LinearManipulatorYAxisMovement); + + // transform to screen space + const auto translationManipulatorStartHoldScreenPosition1 = + AzFramework::WorldToScreen(translationManipulatorStartHoldWorldPosition1, m_cameraState); + const auto translationManipulatorEndHoldScreenPosition1 = + AzFramework::WorldToScreen(translationManipulatorEndHoldWorldPosition1, m_cameraState); + const auto translationManipulatorStartHoldScreenPosition2 = + AzFramework::WorldToScreen(translationManipulatorStartHoldWorldPosition2, m_cameraState); + const auto translationManipulatorEndHoldScreenPosition2 = + AzFramework::WorldToScreen(translationManipulatorEndHoldWorldPosition2, m_cameraState); + + m_actionDispatcher->CameraState(m_cameraState) + ->MousePosition(translationManipulatorStartHoldScreenPosition1) + ->KeyboardModifierDown(GetParam().m_keyboardModifier) + ->MouseLButtonDown() + ->MousePosition(translationManipulatorEndHoldScreenPosition1) + ->MouseLButtonUp() + ->MousePosition(translationManipulatorStartHoldScreenPosition2) + ->MouseLButtonDown() + ->MousePosition(translationManipulatorEndHoldScreenPosition2) + ->MouseLButtonUp(); + + const auto expectedEntityTransform = GetParam().m_expectedEntityTransformAfter; + const auto expectedManipulatorTransform = GetParam().m_expectedManipulatorTransformAfter; + + const auto manipulatorTransform = GetManipulatorTransform(); + const auto entityTransform = AzToolsFramework::GetWorldTransform(m_entityId1); + + EXPECT_THAT(*manipulatorTransform, IsCloseTolerance(expectedManipulatorTransform, 0.01f)); + EXPECT_THAT(entityTransform, IsCloseTolerance(expectedEntityTransform, 0.01f)); + } + + static const AZ::Transform ExpectedTransformAfterLocalTranslationManipulatorMotion = AZ::Transform::CreateTranslation( + EditorTransformComponentSelectionViewportPickingFixture::Entity1WorldTranslation + + AZ::Vector3(0.0f, LinearManipulatorYAxisMovement, LinearManipulatorZAxisMovement)); + + // where the manipulator should end up after the input from TranslatingMultipleEntitiesWithDifferentModifierCombinations + static const AZ::Transform ExpectedManipulatorTransformAfterGroupTranslationManipulatorMotion = AZ::Transform::CreateTranslation( + AggregateManipulatorPositionWithEntity2and3Selected + + AZ::Vector3(0.0f, LinearManipulatorYAxisMovement, LinearManipulatorZAxisMovement)); + + INSTANTIATE_TEST_CASE_P( + All, + EditorTransformComponentSelectionTranslationManipulatorSingleEntityTestFixtureParam, + testing::Values( + // this replicates translating an entity in local space with no modifiers held + // manipulator and entity translate + ManipulatorOptionsSingle{ AzToolsFramework::ViewportInteraction::KeyboardModifier::None, + ExpectedTransformAfterLocalTranslationManipulatorMotion, + ExpectedTransformAfterLocalTranslationManipulatorMotion }, + // this replicates translating an entity in local space with the alt modifier held + // manipulator and entity translate (to the user, equivalent to no modifiers with one entity selected) + ManipulatorOptionsSingle{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Alt, + ExpectedTransformAfterLocalTranslationManipulatorMotion, + ExpectedTransformAfterLocalTranslationManipulatorMotion }, + // this replicates translating an entity in world space with the shift modifier held + // manipulator and entity translate + ManipulatorOptionsSingle{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Shift, + ExpectedTransformAfterLocalTranslationManipulatorMotion, + ExpectedTransformAfterLocalTranslationManipulatorMotion }, + // this replicates translating the manipulator in local space with the ctrl modifier held + // entity is unchanged, manipulator moves + ManipulatorOptionsSingle{ + AzToolsFramework::ViewportInteraction::KeyboardModifier::Ctrl, ExpectedTransformAfterLocalTranslationManipulatorMotion, + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity1WorldTranslation) })); + + class EditorTransformComponentSelectionTranslationManipulatorMultipleEntityTestFixtureParam + : public EditorTransformComponentSelectionManipulatorInteractionTestFixture + , public ::testing::WithParamInterface + { + }; + + static const AZ::Transform Entity2RotationForLocalTranslation = + AZ::Transform::CreateFromQuaternion(AZ::Quaternion::CreateRotationZ(AZ::DegToRad(90.0f))); + + TEST_P( + EditorTransformComponentSelectionTranslationManipulatorMultipleEntityTestFixtureParam, + TranslatingMultipleEntitiesWithDifferentModifierCombinations) + { + using AzToolsFramework::EditorTransformComponentSelectionRequestBus; + + PositionEntities(); + + // move camera up and to the left so it's just above the normal row of entities + AzFramework::SetCameraTransform( + m_cameraState, + AZ::Transform::CreateFromQuaternionAndTranslation( + AZ::Quaternion::CreateFromEulerAnglesDegrees(AZ::Vector3(0.0f, 0.0f, 90.0f)), AZ::Vector3(10.0f, 14.5, 11.0f))); + + SetTransformMode(EditorTransformComponentSelectionRequestBus::Events::Mode::Translation); + + // give entity 2 a different orientation to entity 3 so when moving in local space their translation vectors will be different + AZ::TransformBus::Event( + m_entityId2, &AZ::TransformBus::Events::SetWorldRotationQuaternion, Entity2RotationForLocalTranslation.GetRotation()); + + AzToolsFramework::SelectEntities({ m_entityId2, m_entityId3 }); + + const auto initialManipulatorTransform = GetManipulatorTransform(); + + const float screenToWorldMultiplier = AzToolsFramework::CalculateScreenToWorldMultiplier( + AzToolsFramework::GetWorldTransform(m_entityId1).GetTranslation(), m_cameraState); + + // calculate positions for two click and drag motions (moving a linear manipulator) + // begin each click in the center of the line of the linear manipulators + const auto translationManipulatorStartHoldWorldPosition1 = AzToolsFramework::GetWorldTransform(m_entityId1).GetTranslation() + + initialManipulatorTransform->GetBasisZ() * screenToWorldMultiplier; + const auto translationManipulatorEndHoldWorldPosition1 = + translationManipulatorStartHoldWorldPosition1 + AZ::Vector3::CreateAxisZ(LinearManipulatorZAxisMovement); + const auto translationManipulatorStartHoldWorldPosition2 = AzToolsFramework::GetWorldTransform(m_entityId1).GetTranslation() + + AZ::Vector3::CreateAxisZ(LinearManipulatorZAxisMovement) - initialManipulatorTransform->GetBasisY() * screenToWorldMultiplier; + const auto translationManipulatorEndHoldWorldPosition2 = + translationManipulatorStartHoldWorldPosition2 + AZ::Vector3::CreateAxisY(LinearManipulatorYAxisMovement); + + // transform to screen space + const auto translationManipulatorStartHoldScreenPosition1 = + AzFramework::WorldToScreen(translationManipulatorStartHoldWorldPosition1, m_cameraState); + const auto translationManipulatorEndHoldScreenPosition1 = + AzFramework::WorldToScreen(translationManipulatorEndHoldWorldPosition1, m_cameraState); + const auto translationManipulatorStartHoldScreenPosition2 = + AzFramework::WorldToScreen(translationManipulatorStartHoldWorldPosition2, m_cameraState); + const auto translationManipulatorEndHoldScreenPosition2 = + AzFramework::WorldToScreen(translationManipulatorEndHoldWorldPosition2, m_cameraState); + + m_actionDispatcher->CameraState(m_cameraState) + ->MousePosition(translationManipulatorStartHoldScreenPosition1) + ->KeyboardModifierDown(GetParam().m_keyboardModifier) + ->MouseLButtonDown() + ->MousePosition(translationManipulatorEndHoldScreenPosition1) + ->MouseLButtonUp() + ->MousePosition(translationManipulatorStartHoldScreenPosition2) + ->MouseLButtonDown() + ->MousePosition(translationManipulatorEndHoldScreenPosition2) + ->MouseLButtonUp(); + + const auto expectedEntity2Transform = GetParam().m_firstExpectedEntityTransformAfter; + const auto expectedEntity3Transform = GetParam().m_secondExpectedEntityTransformAfter; + const auto expectedManipulatorTransform = GetParam().m_expectedManipulatorTransformAfter; + + const auto manipulatorTransformAfter = GetManipulatorTransform(); + const auto entity2Transform = AzToolsFramework::GetWorldTransform(m_entityId2); + const auto entity3Transform = AzToolsFramework::GetWorldTransform(m_entityId3); + + EXPECT_THAT(*manipulatorTransformAfter, IsCloseTolerance(expectedManipulatorTransform, 0.01f)); + EXPECT_THAT(entity2Transform, IsCloseTolerance(expectedEntity2Transform, 0.01f)); + EXPECT_THAT(entity3Transform, IsCloseTolerance(expectedEntity3Transform, 0.01f)); + } + + static const AZ::Transform ExpectedEntity2TransformAfterLocalGroupTranslationManipulatorMotion = + AZ::Transform::CreateTranslation( + EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation + + AZ::Vector3(0.0f, LinearManipulatorYAxisMovement, LinearManipulatorZAxisMovement)) * + Entity2RotationForLocalTranslation; + static const AZ::Transform ExpectedEntity3TransformAfterLocalGroupTranslationManipulatorMotion = AZ::Transform::CreateTranslation( + EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation + + AZ::Vector3(0.0f, LinearManipulatorYAxisMovement, LinearManipulatorZAxisMovement)); + // note: as entity has been rotated by 90 degrees about Z in TranslatingMultipleEntitiesWithDifferentModifierCombinations then + // LinearManipulatorYAxisMovement is now aligned to the world x-axis + static const AZ::Transform ExpectedEntity2TransformAfterLocalIndividualTranslationManipulatorMotion = + AZ::Transform::CreateTranslation( + EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation + + AZ::Vector3(-LinearManipulatorYAxisMovement, 0.0f, LinearManipulatorZAxisMovement)) * + Entity2RotationForLocalTranslation; + static const AZ::Transform ExpectedEntity3TransformAfterLocalIndividualTranslationManipulatorMotion = AZ::Transform::CreateTranslation( + EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation + + AZ::Vector3(0.0f, LinearManipulatorYAxisMovement, LinearManipulatorZAxisMovement)); + + INSTANTIATE_TEST_CASE_P( + All, + EditorTransformComponentSelectionTranslationManipulatorMultipleEntityTestFixtureParam, + testing::Values( + // this replicates translating a group of entities in local space with no modifiers held (group influence) + // manipulator and entity translate + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::None, + ExpectedManipulatorTransformAfterGroupTranslationManipulatorMotion, + ExpectedEntity2TransformAfterLocalGroupTranslationManipulatorMotion, + ExpectedEntity3TransformAfterLocalGroupTranslationManipulatorMotion }, + // this replicates translating a group of entities in local space with the alt modifier held + // entities move in their own local space (individual influence) + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Alt, + ExpectedManipulatorTransformAfterGroupTranslationManipulatorMotion, + ExpectedEntity2TransformAfterLocalIndividualTranslationManipulatorMotion, + ExpectedEntity3TransformAfterLocalIndividualTranslationManipulatorMotion }, + // this replicates translating a group of entities in world space with the shift modifier held + // entities and manipulator move in world space + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Shift, + ExpectedManipulatorTransformAfterGroupTranslationManipulatorMotion, + ExpectedEntity2TransformAfterLocalGroupTranslationManipulatorMotion, + ExpectedEntity3TransformAfterLocalGroupTranslationManipulatorMotion }, + // this replicates translating the manipulator in local space with the ctrl modifier held (entities are unchanged) + ManipulatorOptionsMultiple{ + AzToolsFramework::ViewportInteraction::KeyboardModifier::Ctrl, + ExpectedManipulatorTransformAfterGroupTranslationManipulatorMotion, + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation) * + Entity2RotationForLocalTranslation, + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation) })); + + class EditorTransformComponentSelectionScaleManipulatorMultipleEntityTestFixtureParam + : public EditorTransformComponentSelectionManipulatorInteractionTestFixture + , public ::testing::WithParamInterface + { + }; + + static const float LinearManipulatorZAxisMovementScale = 0.5f; + + TEST_P( + EditorTransformComponentSelectionScaleManipulatorMultipleEntityTestFixtureParam, + ScalingMultipleEntitiesWithDifferentModifierCombinations) + { + using AzToolsFramework::EditorTransformComponentSelectionRequestBus; + + PositionEntities(); + + // move camera up and to the left so it's just above the normal row of entities + AzFramework::SetCameraTransform( + m_cameraState, + AZ::Transform::CreateFromQuaternionAndTranslation( + AZ::Quaternion::CreateFromEulerAnglesDegrees(AZ::Vector3(0.0f, 0.0f, 90.0f)), AZ::Vector3(10.0f, 15.0f, 10.1f))); + + SetTransformMode(EditorTransformComponentSelectionRequestBus::Events::Mode::Scale); + + AzToolsFramework::SelectEntities({ m_entityId2, m_entityId3 }); + + // manipulator should be centered between the two entities + const auto initialManipulatorTransform = GetManipulatorTransform(); + + const float screenToWorldMultiplier = + AzToolsFramework::CalculateScreenToWorldMultiplier(initialManipulatorTransform->GetTranslation(), m_cameraState); + + const auto translationManipulatorStartHoldWorldPosition1 = AzToolsFramework::GetWorldTransform(m_entityId1).GetTranslation() + + initialManipulatorTransform->GetBasisZ() * screenToWorldMultiplier; + const auto translationManipulatorEndHoldWorldPosition1 = + translationManipulatorStartHoldWorldPosition1 + AZ::Vector3::CreateAxisZ(LinearManipulatorZAxisMovementScale); + + // calculate screen space positions + const auto scaleManipulatorHoldScreenPosition = + AzFramework::WorldToScreen(translationManipulatorStartHoldWorldPosition1, m_cameraState); + const auto scaleManipulatorEndHoldScreenPosition = + AzFramework::WorldToScreen(translationManipulatorEndHoldWorldPosition1, m_cameraState); + + m_actionDispatcher->CameraState(m_cameraState) + ->MousePosition(scaleManipulatorHoldScreenPosition) + ->KeyboardModifierDown(GetParam().m_keyboardModifier) + ->MouseLButtonDown() + ->MousePosition(scaleManipulatorEndHoldScreenPosition) + ->MouseLButtonUp(); + + const auto expectedEntity2Transform = GetParam().m_firstExpectedEntityTransformAfter; + const auto expectedEntity3Transform = GetParam().m_secondExpectedEntityTransformAfter; + const auto expectedManipulatorTransform = GetParam().m_expectedManipulatorTransformAfter; + + const auto manipulatorTransformAfter = GetManipulatorTransform(); + const auto entity2Transform = AzToolsFramework::GetWorldTransform(m_entityId2); + const auto entity3Transform = AzToolsFramework::GetWorldTransform(m_entityId3); + + EXPECT_THAT(*manipulatorTransformAfter, IsCloseTolerance(expectedManipulatorTransform, 0.01f)); + EXPECT_THAT(entity2Transform, IsCloseTolerance(expectedEntity2Transform, 0.01f)); + EXPECT_THAT(entity3Transform, IsCloseTolerance(expectedEntity3Transform, 0.01f)); + } + + static const AZ::Transform ExpectedEntity2TransformAfterLocalGroupScaleManipulatorMotion = + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation) * + AZ::Transform::CreateTranslation(AZ::Vector3(0.0f, -1.0f, 0.0f)) * + AZ::Transform::CreateUniformScale(LinearManipulatorZAxisMovement); + static const AZ::Transform ExpectedEntity3TransformAfterLocalGroupScaleManipulatorMotion = + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation) * + AZ::Transform::CreateTranslation(AZ::Vector3(0.0f, 1.0f, 0.0f)) * AZ::Transform::CreateUniformScale(LinearManipulatorZAxisMovement); + static const AZ::Transform ExpectedEntity2TransformAfterLocalIndividualScaleManipulatorMotion = + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation) * + AZ::Transform::CreateUniformScale(LinearManipulatorZAxisMovement); + static const AZ::Transform ExpectedEntity3TransformAfterLocalIndividualScaleManipulatorMotion = + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation) * + AZ::Transform::CreateUniformScale(LinearManipulatorZAxisMovement); + + INSTANTIATE_TEST_CASE_P( + All, + EditorTransformComponentSelectionScaleManipulatorMultipleEntityTestFixtureParam, + testing::Values( + // this replicates scaling a group of entities in local space with no modifiers held + // entities scale relative to manipulator pivot + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::None, + AZ::Transform::CreateTranslation(AggregateManipulatorPositionWithEntity2and3Selected), + ExpectedEntity2TransformAfterLocalGroupScaleManipulatorMotion, + ExpectedEntity3TransformAfterLocalGroupScaleManipulatorMotion }, + // this replicates scaling a group of entities in local space with the alt modifier held + // entities scale about their own pivot + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Alt, + AZ::Transform::CreateTranslation(AggregateManipulatorPositionWithEntity2and3Selected), + ExpectedEntity2TransformAfterLocalIndividualScaleManipulatorMotion, + ExpectedEntity3TransformAfterLocalIndividualScaleManipulatorMotion }, + // this replicates scaling a group of entities in world space with the shift modifier held + // entities scale relative to manipulator pivot in world space + ManipulatorOptionsMultiple{ AzToolsFramework::ViewportInteraction::KeyboardModifier::Shift, + AZ::Transform::CreateTranslation(AggregateManipulatorPositionWithEntity2and3Selected), + ExpectedEntity2TransformAfterLocalGroupScaleManipulatorMotion, + ExpectedEntity3TransformAfterLocalGroupScaleManipulatorMotion }, + // this has no effect (entities and manipulator are unchanged) + ManipulatorOptionsMultiple{ + AzToolsFramework::ViewportInteraction::KeyboardModifier::Ctrl, + AZ::Transform::CreateTranslation(AggregateManipulatorPositionWithEntity2and3Selected), + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity2WorldTranslation), + AZ::Transform::CreateTranslation(EditorTransformComponentSelectionViewportPickingFixture::Entity3WorldTranslation) })); + using EditorTransformComponentSelectionManipulatorTestFixture = IndirectCallManipulatorViewportInteractionFixtureMixin; @@ -1661,7 +2137,7 @@ namespace UnitTest All, EditorTransformComponentSelectionSingleEntityPivotAndOverrideFixture, testing::Values( - ReferenceFrameWithOrientation{ AzToolsFramework::ReferenceFrame::Local, ChildExpectedPivotLocalOrientationInWorldSpace }, + ReferenceFrameWithOrientation{ AzToolsFramework::ReferenceFrame::Local, PivotOverrideLocalOrientationInWorldSpace }, ReferenceFrameWithOrientation{ AzToolsFramework::ReferenceFrame::Parent, PivotOverrideLocalOrientationInWorldSpace }, ReferenceFrameWithOrientation{ AzToolsFramework::ReferenceFrame::World, AZ::Quaternion::CreateIdentity() })); diff --git a/Code/Framework/AzToolsFramework/Tests/Entity/EntityUtilityComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/Entity/EntityUtilityComponentTests.cpp new file mode 100644 index 0000000000..fce44d4833 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/Entity/EntityUtilityComponentTests.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include +#include + +namespace UnitTest +{ + // Global variables for communicating between Lua test code and C++ + AZ::EntityId g_globalEntityId = AZ::EntityId{}; + AZStd::string g_globalString = ""; + AzFramework::BehaviorComponentId g_globalComponentId = {}; + AZStd::vector g_globalComponentDetails = {}; + bool g_globalBool = false; + + class EntityUtilityComponentTests + : public ToolsApplicationFixture + { + void InitProperties() + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + + ASSERT_NE(componentApplicationRequests, nullptr); + + auto behaviorContext = componentApplicationRequests->GetBehaviorContext(); + + ASSERT_NE(behaviorContext, nullptr); + + behaviorContext->Property("g_globalEntityId", BehaviorValueProperty(&g_globalEntityId)); + behaviorContext->Property("g_globalString", BehaviorValueProperty(&g_globalString)); + behaviorContext->Property("g_globalComponentId", BehaviorValueProperty(&g_globalComponentId)); + behaviorContext->Property("g_globalBool", BehaviorValueProperty(&g_globalBool)); + behaviorContext->Property("g_globalComponentDetails", BehaviorValueProperty(&g_globalComponentDetails)); + + g_globalEntityId = AZ::EntityId{}; + g_globalString = AZStd::string{}; + g_globalComponentId = AzFramework::BehaviorComponentId{}; + g_globalBool = false; + g_globalComponentDetails = AZStd::vector{}; + } + + void SetUpEditorFixtureImpl() override + { + InitProperties(); + } + + void TearDownEditorFixtureImpl() override + { + g_globalString.set_capacity(0); // Free all memory + g_globalComponentDetails.set_capacity(0); + } + }; + + TEST_F(EntityUtilityComponentTests, CreateEntity) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalEntityId = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + my_entity = Entity(g_globalEntityId) + g_globalString = my_entity:GetName() + )LUA"); + + EXPECT_NE(g_globalEntityId, AZ::EntityId{}); + EXPECT_STREQ(g_globalString.c_str(), "test"); + + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + ASSERT_NE(entity, nullptr); + + // Test cleaning up, make sure the entity is destroyed + AzToolsFramework::EntityUtilityBus::Broadcast(&AzToolsFramework::EntityUtilityBus::Events::ResetEntityContext); + + entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + ASSERT_EQ(entity, nullptr); + } + + TEST_F(EntityUtilityComponentTests, CreateEntityEmptyName) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalEntityId = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("") + )LUA"); + + EXPECT_NE(g_globalEntityId, AZ::EntityId{}); + + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + ASSERT_NE(entity, nullptr); + } + + TEST_F(EntityUtilityComponentTests, FindComponent) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0 TransformComponent") + )LUA"); + + EXPECT_TRUE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, InvalidComponentName) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "ThisIsNotAComponent-Error") + )LUA"); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + EXPECT_FALSE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, InvalidComponentId) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "{1234-hello-world-this-is-not-an-id}") + )LUA"); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); // Should get 1 error stating the type id is not valid + EXPECT_FALSE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, CreateComponent) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "ScriptEditorComponent") + )LUA"); + + EXPECT_TRUE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, UpdateComponent) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalEntityId = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + comp_id = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(g_globalEntityId, "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent") + json_update = [[ + { + "Transform Data": { "Rotate": [0.0, 0.1, 180.0] } + } + ]] + g_globalBool = EntityUtilityBus.Broadcast.UpdateComponentForEntity(g_globalEntityId, comp_id, json_update); + )LUA"); + + EXPECT_TRUE(g_globalBool); + EXPECT_NE(g_globalEntityId, AZ::EntityId(AZ::EntityId::InvalidEntityId)); + + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + auto* transformComponent = entity->FindComponent(); + + ASSERT_NE(transformComponent, nullptr); + + AZ::Vector3 localRotation = transformComponent->GetLocalRotationQuaternion().GetEulerDegrees(); + + EXPECT_EQ(localRotation, AZ::Vector3(.0f, 0.1f, 180.0f)); + } + + TEST_F(EntityUtilityComponentTests, GetComponentJson) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalString = EntityUtilityBus.Broadcast.GetComponentDefaultJson("ScriptEditorComponent") + )LUA"); + + EXPECT_STRNE(g_globalString.c_str(), ""); + } + + TEST_F(EntityUtilityComponentTests, GetComponentJsonDoesNotExist) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + g_globalString = EntityUtilityBus.Broadcast.GetComponentDefaultJson("404") + )LUA"); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); // 1 error: Failed to find component id for type name 404 + + EXPECT_STREQ(g_globalString.c_str(), ""); + } + + TEST_F(EntityUtilityComponentTests, SearchComponents) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalComponentDetails = EntityUtilityBus.Broadcast.FindMatchingComponents("Transform*") + )LUA"); + + // There should be 2 transform components + EXPECT_EQ(g_globalComponentDetails.size(), 2); + } + + TEST_F(EntityUtilityComponentTests, SearchComponentsNotFound) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalComponentDetails = EntityUtilityBus.Broadcast.FindMatchingComponents("404") + )LUA"); + + EXPECT_EQ(g_globalComponentDetails.size(), 0); + } +} diff --git a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h index 2128b3676a..1bf51045c0 100644 --- a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h +++ b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h @@ -181,8 +181,8 @@ namespace UnitTest const char* dir = m_componentApplication->GetExecutableFolder(); - m_localFileIO.SetAlias("@assets@", dir); - m_localFileIO.SetAlias("@devassets@", dir); + m_localFileIO.SetAlias("@products@", dir); + m_localFileIO.SetAlias("@projectroot@", dir); } void Destroy() diff --git a/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeFixture.cpp b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeFixture.cpp new file mode 100644 index 0000000000..c309261a27 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeFixture.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include + +#include + +namespace AzToolsFramework +{ + void EditorFocusModeFixture::SetUpEditorFixtureImpl() + { + // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // in the unit tests. + AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); + + m_focusModeInterface = AZ::Interface::Get(); + ASSERT_TRUE(m_focusModeInterface != nullptr); + + // register a simple component implementing BoundsRequestBus and EditorComponentSelectionRequestsBus + GetApplication()->RegisterComponentDescriptor(UnitTest::BoundsTestComponent::CreateDescriptor()); + + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + m_editorEntityContextId, &AzToolsFramework::EditorEntityContextRequestBus::Events::GetEditorEntityContextId); + + GenerateTestHierarchy(); + } + + void EditorFocusModeFixture::GenerateTestHierarchy() + { + /* + * City + * |_ Street + * |_ Car + * | |_ Passenger + * |_ SportsCar + * |_ Passenger + */ + + m_entityMap[CityEntityName] = CreateEditorEntity(CityEntityName, AZ::EntityId()); + m_entityMap[StreetEntityName] = CreateEditorEntity(StreetEntityName, m_entityMap[CityEntityName]); + m_entityMap[CarEntityName] = CreateEditorEntity(CarEntityName, m_entityMap[StreetEntityName]); + m_entityMap[Passenger1EntityName] = CreateEditorEntity(Passenger1EntityName, m_entityMap[CarEntityName]); + m_entityMap[SportsCarEntityName] = CreateEditorEntity(SportsCarEntityName, m_entityMap[StreetEntityName]); + m_entityMap[Passenger2EntityName] = CreateEditorEntity(Passenger2EntityName, m_entityMap[SportsCarEntityName]); + + // Add a BoundsTestComponent to the Car entity. + AZ::Entity* entity = GetEntityById(m_entityMap[CarEntityName]); + + entity->Deactivate(); + entity->CreateComponent(); + entity->Activate(); + + // Move the CarEntity so it's out of the way. + AZ::TransformBus::Event(m_entityMap[CarEntityName], &AZ::TransformBus::Events::SetWorldTranslation, CarEntityPosition); + + // Setup the camera so the Car entity is in view. + AzFramework::SetCameraTransform( + m_cameraState, + AZ::Transform::CreateFromQuaternionAndTranslation( + AZ::Quaternion::CreateFromEulerAnglesDegrees(AZ::Vector3(0.0f, 0.0f, 0.0f)), CameraPosition)); + } + + AZ::EntityId EditorFocusModeFixture::CreateEditorEntity(const char* name, AZ::EntityId parentId) + { + AZ::Entity* entity = nullptr; + UnitTest::CreateDefaultEditorEntity(name, &entity); + + // Parent + AZ::TransformBus::Event(entity->GetId(), &AZ::TransformInterface::SetParent, parentId); + + return entity->GetId(); + } +} diff --git a/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeFixture.h b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeFixture.h new file mode 100644 index 0000000000..f038408012 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeFixture.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +#include + +#include +#include + +namespace AzToolsFramework +{ + class EditorFocusModeFixture + : public UnitTest::ToolsApplicationFixture + { + protected: + void SetUpEditorFixtureImpl() override; + + void GenerateTestHierarchy(); + AZ::EntityId CreateEditorEntity(const char* name, AZ::EntityId parentId); + + AZStd::unordered_map m_entityMap; + FocusModeInterface* m_focusModeInterface = nullptr; + + public: + AzFramework::EntityContextId m_editorEntityContextId = AzFramework::EntityContextId::CreateNull(); + + AzFramework::CameraState m_cameraState; + + inline static const AZ::Vector3 CameraPosition = AZ::Vector3(10.0f, 15.0f, 10.0f); + + inline static const char* CityEntityName = "City"; + inline static const char* StreetEntityName = "Street"; + inline static const char* CarEntityName = "Car"; + inline static const char* SportsCarEntityName = "SportsCar"; + inline static const char* Passenger1EntityName = "Passenger1"; + inline static const char* Passenger2EntityName = "Passenger2"; + + inline static AZ::Vector3 CarEntityPosition = AZ::Vector3(5.0f, 15.0f, 0.0f); + }; +} diff --git a/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeSelectionTests.cpp b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeSelectionTests.cpp new file mode 100644 index 0000000000..968bb3f293 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeSelectionTests.cpp @@ -0,0 +1,147 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + + +namespace AzToolsFramework +{ + class EditorFocusModeSelectionFixture + : public UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin + { + public: + void ClickAtWorldPositionOnViewport(const AZ::Vector3& worldPosition) + { + // Calculate the world position in screen space + const auto carScreenPosition = AzFramework::WorldToScreen(worldPosition, m_cameraState); + + // Click the entity in the viewport + m_actionDispatcher->CameraState(m_cameraState)->MousePosition(carScreenPosition)->MouseLButtonDown()->MouseLButtonUp(); + } + }; + + void ClearSelectedEntities() + { + AzToolsFramework::ToolsApplicationRequestBus::Broadcast( + &AzToolsFramework::ToolsApplicationRequestBus::Events::SetSelectedEntities, AzToolsFramework::EntityIdList()); + } + + AzToolsFramework::EntityIdList GetSelectedEntities() + { + AzToolsFramework::EntityIdList selectedEntities; + AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult( + selectedEntities, &AzToolsFramework::ToolsApplicationRequestBus::Events::GetSelectedEntities); + return selectedEntities; + } + + TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnLevel) + { + // Clear the focus, disabling focus mode + m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull()); + // Clear selection + ClearSelectedEntities(); + + // Click on Car Entity + ClickAtWorldPositionOnViewport(CarEntityPosition); + + // Verify entity is selected + auto selectedEntitiesAfter = GetSelectedEntities(); + EXPECT_EQ(selectedEntitiesAfter.size(), 1); + EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CarEntityName]); + } + + TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnAncestor) + { + // Set the focus on the Street Entity (parent of the test entity) + m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]); + // Clear selection + ClearSelectedEntities(); + + // Click on Car Entity + ClickAtWorldPositionOnViewport(CarEntityPosition); + + // Verify entity is selected + auto selectedEntitiesAfter = GetSelectedEntities(); + EXPECT_EQ(selectedEntitiesAfter.size(), 1); + EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CarEntityName]); + + // Clear the focus, disabling focus mode + m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull()); + } + + TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnItself) + { + // Set the focus on the Car Entity (test entity) + m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]); + // Clear selection + ClearSelectedEntities(); + + // Click on Car Entity + ClickAtWorldPositionOnViewport(CarEntityPosition); + + // Verify entity is selected + auto selectedEntitiesAfter = GetSelectedEntities(); + EXPECT_EQ(selectedEntitiesAfter.size(), 1); + EXPECT_EQ(selectedEntitiesAfter.front(), m_entityMap[CarEntityName]); + + // Clear the focus, disabling focus mode + m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull()); + } + + TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnSibling) + { + // Set the focus on the SportsCar Entity (sibling of the test entity) + m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]); + // Clear selection + ClearSelectedEntities(); + + // Click on Car Entity + ClickAtWorldPositionOnViewport(CarEntityPosition); + + // Verify entity is selected + auto selectedEntitiesAfter = GetSelectedEntities(); + EXPECT_EQ(selectedEntitiesAfter.size(), 0); + + // Clear the focus, disabling focus mode + m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull()); + } + + TEST_F(EditorFocusModeSelectionFixture, EditorFocusModeSelectionTests_SelectEntityWithFocusOnDescendant) + { + // Set the focus on the Passenger1 Entity (child of the entity) + m_focusModeInterface->SetFocusRoot(m_entityMap[Passenger1EntityName]); + // Clear selection + ClearSelectedEntities(); + + // Click on Car Entity + ClickAtWorldPositionOnViewport(CarEntityPosition); + + // Verify entity is selected + auto selectedEntitiesAfter = GetSelectedEntities(); + EXPECT_EQ(selectedEntitiesAfter.size(), 0); + + // Clear the focus, disabling focus mode + m_focusModeInterface->ClearFocusRoot(AzFramework::EntityContextId::CreateNull()); + } +} diff --git a/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp index 5972da58a7..22bc7a494c 100644 --- a/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp @@ -6,123 +6,99 @@ * */ -#include -#include -#include -#include -#include +#include namespace AzToolsFramework { - class EditorFocusModeTests - : public ::testing::Test + TEST_F(EditorFocusModeFixture, EditorFocusModeTests_SetFocus) { - protected: - void SetUp() override - { - m_app.Start(m_descriptor); + // When an entity is set as the focus root, GetFocusRoot should return its EntityId. + m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]); + EXPECT_EQ(m_focusModeInterface->GetFocusRoot(m_editorEntityContextId), m_entityMap[CarEntityName]); - // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash - // in the unit tests. - AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); + // Restore default expected focus. + m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId); + } - GenerateTestHierarchy(); - } + TEST_F(EditorFocusModeFixture, EditorFocusModeTests_ClearFocus) + { + // Change the value from the default. + m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]); - void GenerateTestHierarchy() - { - /* - * City - * |_ Street - * |_ Car - * | |_ Passenger - * |_ SportsCar - * |_ Passenger - */ - - m_entityMap["cityId"] = CreateEditorEntity("City", AZ::EntityId()); - m_entityMap["streetId"] = CreateEditorEntity("Street", m_entityMap["cityId"]); - m_entityMap["carId"] = CreateEditorEntity("Car", m_entityMap["streetId"]); - m_entityMap["passengerId1"] = CreateEditorEntity("Passenger", m_entityMap["carId"]); - m_entityMap["sportsCarId"] = CreateEditorEntity("SportsCar", m_entityMap["streetId"]); - m_entityMap["passengerId2"] = CreateEditorEntity("Passenger", m_entityMap["sportsCarId"]); - } + // Calling ClearFocusRoot restores the default focus root (which is an invalid EntityId). + m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId); + EXPECT_EQ(m_focusModeInterface->GetFocusRoot(m_editorEntityContextId), AZ::EntityId()); + } - AZ::EntityId CreateEditorEntity(const char* name, AZ::EntityId parentId) + TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_AncestorsDescendants) + { + // When the focus is set to an entity, all its descendants are in the focus subtree while the ancestors aren't. { - AZ::Entity* entity = nullptr; - UnitTest::CreateDefaultEditorEntity(name, &entity); - - // Parent - AZ::TransformBus::Event(entity->GetId(), &AZ::TransformInterface::SetParent, parentId); - - return entity->GetId(); + m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]); + + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true); } - void TearDown() override + // Restore default expected focus. + m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId); + } + + TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_Siblings) + { + // If the root entity has siblings, they are also outside of the focus subtree. { - m_app.Stop(); + m_focusModeInterface->SetFocusRoot(m_entityMap[CarEntityName]); + + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), false); } - UnitTest::ToolsTestApplication m_app{ "EditorFocusModeTests" }; - AZ::ComponentApplication::Descriptor m_descriptor; - AZStd::unordered_map m_entityMap; - }; + // Restore default expected focus. + m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId); + } - TEST_F(EditorFocusModeTests, EditorFocusModeTests_SetFocus) + TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_Leaf) { - FocusModeInterface* focusModeInterface = AZ::Interface::Get(); - EXPECT_TRUE(focusModeInterface != nullptr); - - focusModeInterface->SetFocusRoot(m_entityMap["carId"]); - EXPECT_EQ(focusModeInterface->GetFocusRoot(), m_entityMap["carId"]); + // If the root is a leaf, then the focus subtree will consists of just that entity. + { + m_focusModeInterface->SetFocusRoot(m_entityMap[Passenger2EntityName]); + + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), false); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true); + } - focusModeInterface->ClearFocusRoot(); - EXPECT_EQ(focusModeInterface->GetFocusRoot(), AZ::EntityId()); + // Restore default expected focus. + m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId); } - TEST_F(EditorFocusModeTests, EditorFocusModeTests_IsInFocusSubTree) + TEST_F(EditorFocusModeFixture, EditorFocusModeTests_IsInFocusSubTree_Clear) { - FocusModeInterface* focusModeInterface = AZ::Interface::Get(); - EXPECT_TRUE(focusModeInterface != nullptr); - - focusModeInterface->ClearFocusRoot(); - - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["cityId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["streetId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["carId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId1"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["sportsCarId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId2"]), true); - - focusModeInterface->SetFocusRoot(m_entityMap["streetId"]); - - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["cityId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["streetId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["carId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId1"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["sportsCarId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId2"]), true); - - focusModeInterface->SetFocusRoot(m_entityMap["carId"]); - - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["cityId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["streetId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["carId"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId1"]), true); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["sportsCarId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId2"]), false); - - focusModeInterface->SetFocusRoot(m_entityMap["passengerId2"]); - - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["cityId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["streetId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["carId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId1"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["sportsCarId"]), false); - EXPECT_EQ(focusModeInterface->IsInFocusSubTree(m_entityMap["passengerId2"]), true); - - focusModeInterface->ClearFocusRoot(); + // Change the value from the default. + m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]); + + // When the focus is cleared, the whole level is in the focus subtree; so we expect all entities to return true. + { + m_focusModeInterface->ClearFocusRoot(m_editorEntityContextId); + + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CityEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[StreetEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[CarEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger1EntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[SportsCarEntityName]), true); + EXPECT_EQ(m_focusModeInterface->IsInFocusSubTree(m_entityMap[Passenger2EntityName]), true); + } } } diff --git a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp index 67d40be376..9c226cbb1b 100644 --- a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp @@ -22,7 +22,7 @@ #include #include -namespace +namespace { static const int s_totalAssets = 12; } @@ -53,15 +53,15 @@ namespace UnitTest m_application->Start(AzFramework::Application::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); - // By default @assets@ is setup to include the platform at the end. But this test is going to + // By default @products@ is setup to include the platform at the end. But this test is going to // loop over all platforms and it will be included as part of the relative path of the file. // So the asset folder for these tests have to point to the cache project root folder, which // doesn't include the platform. - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", cacheProjectRootFolder.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", cacheProjectRootFolder.c_str()); for (int platformNum = AzFramework::PlatformId::PC; platformNum < AzFramework::PlatformId::NumPlatformIds; ++platformNum) { diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabCreateBenchmarks.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabCreateBenchmarks.cpp index 64c4058a47..8cc5e5f4d2 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabCreateBenchmarks.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabCreateBenchmarks.cpp @@ -72,7 +72,7 @@ namespace Benchmark AZStd::unique_ptr instance = m_prefabSystemComponent->CreatePrefab( entities , {} - , m_pathString); + , m_pathString); state.PauseTiming(); @@ -165,7 +165,7 @@ namespace Benchmark { nestedInstanceRoot = m_prefabSystemComponent->CreatePrefab( {}, - MakeInstanceList( AZStd::move(nestedInstanceRoot) ), + MakeInstanceList(AZStd::move(nestedInstanceRoot)), m_paths[instanceCounter]); } diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabUpdateInstancesBenchmarks.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabUpdateInstancesBenchmarks.cpp index 0d95049e76..92a30b89f2 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabUpdateInstancesBenchmarks.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/Benchmark/PrefabUpdateInstancesBenchmarks.cpp @@ -36,7 +36,7 @@ namespace Benchmark AZStd::unique_ptr enclosingInstance = m_prefabSystemComponent->CreatePrefab( {}, - MakeInstanceList( AZStd::move(nestedInstance) ), + MakeInstanceList(AZStd::move(nestedInstance)), enclosingTemplatePath); TemplateId templateToInstantiateId = enclosingInstance->GetTemplateId(); @@ -99,7 +99,7 @@ namespace Benchmark { currentInstanceRoot = m_prefabSystemComponent->CreatePrefab( {}, - MakeInstanceList( AZStd::move(currentInstanceRoot) ), + MakeInstanceList(AZStd::move(currentInstanceRoot)), m_paths[currentDepth - 1]); } @@ -151,7 +151,7 @@ namespace Benchmark { currentInstanceRoot = m_prefabSystemComponent->CreatePrefab( {}, - MakeInstanceList( AZStd::move(currentInstanceRoot) ), + MakeInstanceList(AZStd::move(currentInstanceRoot)), m_paths[currentDepth]); } @@ -214,7 +214,7 @@ namespace Benchmark currentInstanceRoot = m_prefabSystemComponent->CreatePrefab( {}, - MakeInstanceList( AZStd::move(currentInstanceRoot), AZStd::move(extraNestedInstance) ), + MakeInstanceList(AZStd::move(currentInstanceRoot), AZStd::move(extraNestedInstance)), m_paths[currentDepth]); } diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabFocus/PrefabFocusTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabFocus/PrefabFocusTests.cpp index ffd6cd2a44..72489b07a1 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabFocus/PrefabFocusTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabFocus/PrefabFocusTests.cpp @@ -30,88 +30,137 @@ namespace UnitTest * |_ Passenger */ - m_entityMap["passenger1"] = CreateEntity("Passenger1"); - m_entityMap["passenger2"] = CreateEntity("Passenger2"); - m_entityMap["city"] = CreateEntity("City"); + // Create loose entities + m_entityMap[Passenger1EntityName] = CreateEntity(Passenger1EntityName); + m_entityMap[Passenger2EntityName] = CreateEntity(Passenger2EntityName); + m_entityMap[CityEntityName] = CreateEntity(CityEntityName); + // Call HandleEntitiesAdded to the loose entities to register them with the Prefab EOS AzToolsFramework::EditorEntityContextRequestBus::Broadcast( &AzToolsFramework::EditorEntityContextRequests::HandleEntitiesAdded, - AzToolsFramework::EntityList{ m_entityMap["passenger1"], m_entityMap["passenger2"], m_entityMap["city"] }); + AzToolsFramework::EntityList{ m_entityMap[Passenger1EntityName], m_entityMap[Passenger2EntityName], m_entityMap[CityEntityName] }); + // Create a car prefab from the passenger1 entity. The container entity will be created as part of the process. AZStd::unique_ptr carInstance = - m_prefabSystemComponent->CreatePrefab({ m_entityMap["passenger1"] }, {}, "test/car"); + m_prefabSystemComponent->CreatePrefab({ m_entityMap[Passenger1EntityName] }, {}, "test/car"); ASSERT_TRUE(carInstance); - m_instanceMap["car"] = carInstance.get(); + m_instanceMap[CarEntityName] = carInstance.get(); + // Create a sportscar prefab from the passenger2 entity. The container entity will be created as part of the process. AZStd::unique_ptr sportsCarInstance = - m_prefabSystemComponent->CreatePrefab({ m_entityMap["passenger2"] }, {}, "test/sportsCar"); + m_prefabSystemComponent->CreatePrefab({ m_entityMap[Passenger2EntityName] }, {}, "test/sportsCar"); ASSERT_TRUE(sportsCarInstance); - m_instanceMap["sportsCar"] = sportsCarInstance.get(); + m_instanceMap[SportsCarEntityName] = sportsCarInstance.get(); + // Create a street prefab that nests the car and sportscar instances created above. The container entity will be created as part of the process. AZStd::unique_ptr streetInstance = - m_prefabSystemComponent->CreatePrefab({}, MakeInstanceList( AZStd::move(carInstance), AZStd::move(sportsCarInstance) ), "test/street"); + m_prefabSystemComponent->CreatePrefab({}, MakeInstanceList(AZStd::move(carInstance), AZStd::move(sportsCarInstance)), "test/street"); ASSERT_TRUE(streetInstance); - m_instanceMap["street"] = streetInstance.get(); + m_instanceMap[StreetEntityName] = streetInstance.get(); + // Create a city prefab that nests the street instances created above and the city entity. The container entity will be created as part of the process. m_rootInstance = - m_prefabSystemComponent->CreatePrefab({ m_entityMap["city"] }, MakeInstanceList(AZStd::move(streetInstance)), "test/city"); + m_prefabSystemComponent->CreatePrefab({ m_entityMap[CityEntityName] }, MakeInstanceList(AZStd::move(streetInstance)), "test/city"); ASSERT_TRUE(m_rootInstance); - m_instanceMap["city"] = m_rootInstance.get(); + m_instanceMap[CityEntityName] = m_rootInstance.get(); + } + + void SetUpEditorFixtureImpl() override + { + PrefabTestFixture::SetUpEditorFixtureImpl(); + + m_prefabFocusInterface = AZ::Interface::Get(); + ASSERT_TRUE(m_prefabFocusInterface != nullptr); + + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + m_editorEntityContextId, &AzToolsFramework::EditorEntityContextRequestBus::Events::GetEditorEntityContextId); + + GenerateTestHierarchy(); + } + + void TearDownEditorFixtureImpl() override + { + m_rootInstance.release(); + + PrefabTestFixture::TearDownEditorFixtureImpl(); } AZStd::unordered_map m_entityMap; AZStd::unordered_map m_instanceMap; AZStd::unique_ptr m_rootInstance; + + PrefabFocusInterface* m_prefabFocusInterface = nullptr; + AzFramework::EntityContextId m_editorEntityContextId = AzFramework::EntityContextId::CreateNull(); + + inline static const char* CityEntityName = "City"; + inline static const char* StreetEntityName = "Street"; + inline static const char* CarEntityName = "Car"; + inline static const char* SportsCarEntityName = "SportsCar"; + inline static const char* Passenger1EntityName = "Passenger1"; + inline static const char* Passenger2EntityName = "Passenger2"; }; - TEST_F(PrefabFocusTests, PrefabFocus_FocusOnOwningPrefab) + TEST_F(PrefabFocusTests, PrefabFocus_FocusOnOwningPrefab_RootContainer) { - GenerateTestHierarchy(); - - PrefabFocusInterface* prefabFocusInterface = AZ::Interface::Get(); - EXPECT_TRUE(prefabFocusInterface != nullptr); - // Verify FocusOnOwningPrefab works when passing the container entity of the root prefab. { - prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap["city"]->GetContainerEntityId()); - EXPECT_EQ(prefabFocusInterface->GetFocusedPrefabTemplateId(), m_instanceMap["city"]->GetTemplateId()); + m_prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap[CityEntityName]->GetContainerEntityId()); + EXPECT_EQ( + m_prefabFocusInterface->GetFocusedPrefabTemplateId(m_editorEntityContextId), + m_instanceMap[CityEntityName]->GetTemplateId()); - auto instance = prefabFocusInterface->GetFocusedPrefabInstance(); + auto instance = m_prefabFocusInterface->GetFocusedPrefabInstance(m_editorEntityContextId); EXPECT_TRUE(instance.has_value()); - EXPECT_EQ(&instance->get(), m_instanceMap["city"]); + EXPECT_EQ(&instance->get(), m_instanceMap[CityEntityName]); } + } + TEST_F(PrefabFocusTests, PrefabFocus_FocusOnOwningPrefab_RootEntity) + { // Verify FocusOnOwningPrefab works when passing a nested entity of the root prefab. { - prefabFocusInterface->FocusOnOwningPrefab(m_entityMap["city"]->GetId()); - EXPECT_EQ(prefabFocusInterface->GetFocusedPrefabTemplateId(), m_instanceMap["city"]->GetTemplateId()); + m_prefabFocusInterface->FocusOnOwningPrefab(m_entityMap[CityEntityName]->GetId()); + EXPECT_EQ( + m_prefabFocusInterface->GetFocusedPrefabTemplateId(m_editorEntityContextId), + m_instanceMap[CityEntityName]->GetTemplateId()); - auto instance = prefabFocusInterface->GetFocusedPrefabInstance(); + auto instance = m_prefabFocusInterface->GetFocusedPrefabInstance(m_editorEntityContextId); EXPECT_TRUE(instance.has_value()); - EXPECT_EQ(&instance->get(), m_instanceMap["city"]); + EXPECT_EQ(&instance->get(), m_instanceMap[CityEntityName]); } + } + TEST_F(PrefabFocusTests, PrefabFocus_FocusOnOwningPrefab_NestedContainer) + { // Verify FocusOnOwningPrefab works when passing the container entity of a nested prefab. { - prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap["car"]->GetContainerEntityId()); - EXPECT_EQ(prefabFocusInterface->GetFocusedPrefabTemplateId(), m_instanceMap["car"]->GetTemplateId()); + m_prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap[CarEntityName]->GetContainerEntityId()); + EXPECT_EQ( + m_prefabFocusInterface->GetFocusedPrefabTemplateId(m_editorEntityContextId), m_instanceMap[CarEntityName]->GetTemplateId()); - auto instance = prefabFocusInterface->GetFocusedPrefabInstance(); + auto instance = m_prefabFocusInterface->GetFocusedPrefabInstance(m_editorEntityContextId); EXPECT_TRUE(instance.has_value()); - EXPECT_EQ(&instance->get(), m_instanceMap["car"]); + EXPECT_EQ(&instance->get(), m_instanceMap[CarEntityName]); } + } + TEST_F(PrefabFocusTests, PrefabFocus_FocusOnOwningPrefab_NestedEntity) + { // Verify FocusOnOwningPrefab works when passing a nested entity of the a nested prefab. { - prefabFocusInterface->FocusOnOwningPrefab(m_entityMap["passenger1"]->GetId()); - EXPECT_EQ(prefabFocusInterface->GetFocusedPrefabTemplateId(), m_instanceMap["car"]->GetTemplateId()); + m_prefabFocusInterface->FocusOnOwningPrefab(m_entityMap[Passenger1EntityName]->GetId()); + EXPECT_EQ( + m_prefabFocusInterface->GetFocusedPrefabTemplateId(m_editorEntityContextId), m_instanceMap[CarEntityName]->GetTemplateId()); - auto instance = prefabFocusInterface->GetFocusedPrefabInstance(); + auto instance = m_prefabFocusInterface->GetFocusedPrefabInstance(m_editorEntityContextId); EXPECT_TRUE(instance.has_value()); - EXPECT_EQ(&instance->get(), m_instanceMap["car"]); + EXPECT_EQ(&instance->get(), m_instanceMap[CarEntityName]); } + } + TEST_F(PrefabFocusTests, PrefabFocus_FocusOnOwningPrefab_Clear) + { // Verify FocusOnOwningPrefab points to the root prefab when the focus is cleared. { AzToolsFramework::PrefabEditorEntityOwnershipInterface* prefabEditorEntityOwnershipInterface = @@ -120,54 +169,52 @@ namespace UnitTest prefabEditorEntityOwnershipInterface->GetRootPrefabInstance(); EXPECT_TRUE(rootPrefabInstance.has_value()); - prefabFocusInterface->FocusOnOwningPrefab(AZ::EntityId()); - EXPECT_EQ(prefabFocusInterface->GetFocusedPrefabTemplateId(), rootPrefabInstance->get().GetTemplateId()); + m_prefabFocusInterface->FocusOnOwningPrefab(AZ::EntityId()); + EXPECT_EQ( + m_prefabFocusInterface->GetFocusedPrefabTemplateId(m_editorEntityContextId), rootPrefabInstance->get().GetTemplateId()); - auto instance = prefabFocusInterface->GetFocusedPrefabInstance(); + auto instance = m_prefabFocusInterface->GetFocusedPrefabInstance(m_editorEntityContextId); EXPECT_TRUE(instance.has_value()); EXPECT_EQ(&instance->get(), &rootPrefabInstance->get()); } - - m_rootInstance.release(); } - TEST_F(PrefabFocusTests, PrefabFocus_IsOwningPrefabBeingFocused) + TEST_F(PrefabFocusTests, PrefabFocus_IsOwningPrefabBeingFocused_Content) { - GenerateTestHierarchy(); - - PrefabFocusInterface* prefabFocusInterface = AZ::Interface::Get(); - EXPECT_TRUE(prefabFocusInterface != nullptr); - // Verify IsOwningPrefabBeingFocused returns true for all entities in a focused prefab (container/nested) { - prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap["city"]->GetContainerEntityId()); + m_prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap[CityEntityName]->GetContainerEntityId()); - EXPECT_TRUE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap["city"]->GetContainerEntityId())); - EXPECT_TRUE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap["city"]->GetId())); + EXPECT_TRUE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap[CityEntityName]->GetContainerEntityId())); + EXPECT_TRUE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap[CityEntityName]->GetId())); } + } + TEST_F(PrefabFocusTests, PrefabFocus_IsOwningPrefabBeingFocused_AncestorsDescendants) + { // Verify IsOwningPrefabBeingFocused returns false for all entities not in a focused prefab (ancestors/descendants) { - prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap["street"]->GetContainerEntityId()); + m_prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap[StreetEntityName]->GetContainerEntityId()); - EXPECT_TRUE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap["street"]->GetContainerEntityId())); - EXPECT_FALSE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap["city"]->GetContainerEntityId())); - EXPECT_FALSE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap["city"]->GetId())); - EXPECT_FALSE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap["car"]->GetContainerEntityId())); - EXPECT_FALSE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap["passenger1"]->GetId())); + EXPECT_TRUE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap[StreetEntityName]->GetContainerEntityId())); + EXPECT_FALSE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap[CityEntityName]->GetContainerEntityId())); + EXPECT_FALSE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap[CityEntityName]->GetId())); + EXPECT_FALSE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap[CarEntityName]->GetContainerEntityId())); + EXPECT_FALSE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap[Passenger1EntityName]->GetId())); } + } + TEST_F(PrefabFocusTests, PrefabFocus_IsOwningPrefabBeingFocused_Siblings) + { // Verify IsOwningPrefabBeingFocused returns false for all entities not in a focused prefab (siblings) { - prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap["sportsCar"]->GetContainerEntityId()); + m_prefabFocusInterface->FocusOnOwningPrefab(m_instanceMap[SportsCarEntityName]->GetContainerEntityId()); - EXPECT_TRUE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap["sportsCar"]->GetContainerEntityId())); - EXPECT_TRUE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap["passenger2"]->GetId())); - EXPECT_FALSE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap["car"]->GetContainerEntityId())); - EXPECT_FALSE(prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap["passenger1"]->GetId())); + EXPECT_TRUE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap[SportsCarEntityName]->GetContainerEntityId())); + EXPECT_TRUE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap[Passenger2EntityName]->GetId())); + EXPECT_FALSE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_instanceMap[CarEntityName]->GetContainerEntityId())); + EXPECT_FALSE(m_prefabFocusInterface->IsOwningPrefabBeingFocused(m_entityMap[Passenger1EntityName]->GetId())); } - - m_rootInstance.release(); } } diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstanceToTemplatePropagatorTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstanceToTemplatePropagatorTests.cpp index ebe35a5402..a08b0bf6c2 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstanceToTemplatePropagatorTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstanceToTemplatePropagatorTests.cpp @@ -320,7 +320,7 @@ namespace UnitTest Instance& addedInstance = *addedInstancePtr; //create a first instance where the instance will be removed - AZStd::unique_ptr firstInstance = m_prefabSystemComponent->CreatePrefab({}, MakeInstanceList( AZStd::move(addedInstancePtr) ), "test/path"); + AZStd::unique_ptr firstInstance = m_prefabSystemComponent->CreatePrefab({}, MakeInstanceList(AZStd::move(addedInstancePtr)), "test/path"); ASSERT_TRUE(firstInstance); //get added instance alias diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp index 09aac8dcf5..cc8217a915 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp @@ -44,11 +44,11 @@ namespace UnitTest ASSERT_TRUE(firstInstance); AZStd::unique_ptr secondInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(firstInstance) ), "test/path2"); + MakeInstanceList(AZStd::move(firstInstance)), "test/path2"); ASSERT_TRUE(secondInstance); AZStd::unique_ptr thirdInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(secondInstance) ), "test/path3"); + MakeInstanceList(AZStd::move(secondInstance)), "test/path3"); ASSERT_TRUE(thirdInstance); //Instantiate it diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp new file mode 100644 index 0000000000..7e61c50629 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp @@ -0,0 +1,173 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include + +namespace UnitTest +{ + TemplateId g_globalTemplateId = {}; + AZStd::string g_globalPrefabString = ""; + + class PrefabScriptingTest : public PrefabTestFixture + { + void InitProperties() const + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + + ASSERT_NE(componentApplicationRequests, nullptr); + + auto behaviorContext = componentApplicationRequests->GetBehaviorContext(); + + ASSERT_NE(behaviorContext, nullptr); + + behaviorContext->Property("g_globalTemplateId", BehaviorValueProperty(&g_globalTemplateId)); + behaviorContext->Property("g_globalPrefabString", BehaviorValueProperty(&g_globalPrefabString)); + + g_globalTemplateId = TemplateId{}; + g_globalPrefabString = AZStd::string{}; + } + + void SetUpEditorFixtureImpl() override + { + InitProperties(); + } + + void TearDownEditorFixtureImpl() override + { + g_globalPrefabString.set_capacity(0); // Free all memory + } + }; + + TEST_F(PrefabScriptingTest, PrefabScripting_CreatePrefab) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + entities:push_back(my_id) + g_globalTemplateId = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "test.prefab") + )LUA"); + + EXPECT_NE(g_globalTemplateId, TemplateId{}); + + auto prefabSystemComponentInterface = AZ::Interface::Get(); + + ASSERT_NE(prefabSystemComponentInterface, nullptr); + + TemplateReference templateRef = prefabSystemComponentInterface->FindTemplate(g_globalTemplateId); + + EXPECT_TRUE(templateRef); + } + + TEST_F(PrefabScriptingTest, PrefabScripting_CreatePrefab_NoEntities) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + g_globalTemplateId = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "test.prefab") + )LUA"); + + EXPECT_NE(g_globalTemplateId, TemplateId{}); + + auto prefabSystemComponentInterface = AZ::Interface::Get(); + + ASSERT_NE(prefabSystemComponentInterface, nullptr); + + TemplateReference templateRef = prefabSystemComponentInterface->FindTemplate(g_globalTemplateId); + + EXPECT_TRUE(templateRef); + } + + TEST_F(PrefabScriptingTest, PrefabScripting_CreatePrefab_NoPath) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + template_id = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "") + )LUA"); + /* + error: PrefabSystemComponent::CreateTemplateFromInstance - Attempted to create a prefab template from an instance without a source file path. Unable to proceed. + error: Failed to create a Template associated with file path during CreatePrefab. + error: Failed to create prefab + */ + AZ_TEST_STOP_TRACE_SUPPRESSION(3); + } + + TEST_F(PrefabScriptingTest, PrefabScripting_SaveToString) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + entities:push_back(my_id) + template_id = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "test.prefab") + my_result = PrefabLoaderScriptingBus.Broadcast.SaveTemplateToString(template_id) + + if my_result:IsSuccess() then + g_globalPrefabString = my_result:GetValue() + end + )LUA"); + + auto prefabSystemComponentInterface = AZ::Interface::Get(); + prefabSystemComponentInterface->RemoveAllTemplates(); + + EXPECT_STRNE(g_globalPrefabString.c_str(), ""); + TemplateId templateFromString = AZ::Interface::Get()->LoadTemplateFromString(g_globalPrefabString); + + EXPECT_NE(templateFromString, InvalidTemplateId); + + // Create another entity for comparison purposes + AZ::EntityId entityId; + AzToolsFramework::EntityUtilityBus::BroadcastResult( + entityId, &AzToolsFramework::EntityUtilityBus::Events::CreateEditorReadyEntity, "test"); + + AZ::Entity* testEntity = AZ::Interface::Get()->FindEntity(entityId); + + // Instantiate the prefab we saved + AZStd::unique_ptr instance = prefabSystemComponentInterface->InstantiatePrefab(templateFromString); + + EXPECT_NE(instance, nullptr); + + AZStd::vector loadedEntities; + + // Get the entities from the instance + instance->GetConstEntities( + [&loadedEntities](const AZ::Entity& entity) + { + loadedEntities.push_back(&entity); + return true; + }); + + // Make sure the instance has an entity with the same number of components as our test entity + EXPECT_EQ(loadedEntities.size(), 1); + EXPECT_EQ(loadedEntities[0]->GetComponents().size(), testEntity->GetComponents().size()); + + g_globalPrefabString.set_capacity(0); // Free all memory + } + +} diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.cpp index b805e224bf..55e3c158a1 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.cpp @@ -21,8 +21,8 @@ namespace UnitTest using namespace AzToolsFramework::Prefab; LinkData CreateLinkData( const InstanceData& instanceData, - const TemplateId& sourceTemplateId, - const TemplateId& targetTemplateId) + TemplateId sourceTemplateId, + TemplateId targetTemplateId) { LinkData newLinkData; newLinkData.m_instanceData = instanceData; diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.h b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.h index e3048469c5..0082ad5951 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.h +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.h @@ -17,8 +17,8 @@ namespace UnitTest { LinkData CreateLinkData( const InstanceData& instanceData, - const AzToolsFramework::Prefab::TemplateId& sourceTemplateId, - const AzToolsFramework::Prefab::TemplateId& targetTemplateId); + AzToolsFramework::Prefab::TemplateId sourceTemplateId, + AzToolsFramework::Prefab::TemplateId targetTemplateId); InstanceData CreateInstanceDataWithNoPatches( const AZStd::string& name, diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp index 334f01fc3a..c71013320f 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp @@ -56,7 +56,7 @@ namespace UnitTest } void ValidateInstances( - const TemplateId& templateId, + TemplateId templateId, const PrefabDomValue& expectedContent, const PrefabDomPath& contentPath, bool isContentAnInstance, @@ -204,7 +204,7 @@ namespace UnitTest } void ValidateEntitiesOfInstances( - const AzToolsFramework::Prefab::TemplateId& templateId, + AzToolsFramework::Prefab::TemplateId templateId, const AzToolsFramework::Prefab::PrefabDom& expectedPrefabDom, const AZStd::vector& entityAliases) { @@ -219,7 +219,7 @@ namespace UnitTest } void ValidateNestedInstancesOfInstances( - const AzToolsFramework::Prefab::TemplateId& templateId, + AzToolsFramework::Prefab::TemplateId templateId, const AzToolsFramework::Prefab::PrefabDom& expectedPrefabDom, const AZStd::vector& nestedInstanceAliases) { diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.h b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.h index f90a91ea3c..b1ba7fbca0 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.h +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.h @@ -118,7 +118,7 @@ namespace UnitTest const PrefabDomValue& patches); void ValidateInstances( - const TemplateId& templateId, + TemplateId templateId, const PrefabDomValue& expectedContent, const PrefabDomPath& contentPath, bool isContentAnInstance = false, @@ -147,12 +147,12 @@ namespace UnitTest void ComparePrefabDomValues(PrefabDomValueConstReference valueA, PrefabDomValueConstReference valueB); void ValidateEntitiesOfInstances( - const AzToolsFramework::Prefab::TemplateId& templateId, + AzToolsFramework::Prefab::TemplateId templateId, const AzToolsFramework::Prefab::PrefabDom& expectedPrefabDom, const AZStd::vector& entityAliases); void ValidateNestedInstancesOfInstances( - const AzToolsFramework::Prefab::TemplateId& templateId, + AzToolsFramework::Prefab::TemplateId templateId, const AzToolsFramework::Prefab::PrefabDom& expectedPrefabDom, const AZStd::vector& nestedInstanceAliases); diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestUndoFixture.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestUndoFixture.cpp index cb44f9c401..2420b14d6c 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestUndoFixture.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestUndoFixture.cpp @@ -18,14 +18,14 @@ namespace UnitTest { //create two prefabs for test //create prefab 1 - firstInstance = AZStd::move(m_prefabSystemComponent->CreatePrefab({ }, {}, "test/path0")); + firstInstance = AZStd::move(m_prefabSystemComponent->CreatePrefab({}, {}, "test/path0")); ASSERT_TRUE(firstInstance); //get template id ownerId = firstInstance->GetTemplateId(); //create prefab 2 - secondInstance = AZStd::move(m_prefabSystemComponent->CreatePrefab({ }, {}, "test/path1")); + secondInstance = AZStd::move(m_prefabSystemComponent->CreatePrefab({}, {}, "test/path1")); ASSERT_TRUE(secondInstance); //get template id diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateInstancesTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateInstancesTests.cpp index baded6d43e..7427c06f43 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateInstancesTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateInstancesTests.cpp @@ -120,7 +120,7 @@ namespace UnitTest // Create an enclosing Template with 0 entities and 1 nested Instance. AZStd::unique_ptr nestedInstance1 = m_prefabSystemComponent->InstantiatePrefab(newNestedTemplateId); - AZStd::unique_ptr newEnclosingInstance = m_prefabSystemComponent->CreatePrefab({}, MakeInstanceList( AZStd::move(nestedInstance1) ), PrefabMockFilePath); + AZStd::unique_ptr newEnclosingInstance = m_prefabSystemComponent->CreatePrefab({}, MakeInstanceList(AZStd::move(nestedInstance1)), PrefabMockFilePath); TemplateId newEnclosingTemplateId = newEnclosingInstance->GetTemplateId(); EXPECT_TRUE(newEnclosingTemplateId != InvalidTemplateId); PrefabDom& newEnclosingTemplateDom = m_prefabSystemComponent->FindTemplateDom(newEnclosingTemplateId); @@ -284,7 +284,7 @@ namespace UnitTest AZStd::unique_ptr nestedInstance2 = m_prefabSystemComponent->InstantiatePrefab(newNestedTemplateId); AZStd::unique_ptr newEnclosingInstance = m_prefabSystemComponent->CreatePrefab( {}, - MakeInstanceList( AZStd::move(nestedInstance1), AZStd::move(nestedInstance2) ), + MakeInstanceList(AZStd::move(nestedInstance1), AZStd::move(nestedInstance2)), PrefabMockFilePath); TemplateId newEnclosingTemplateId = newEnclosingInstance->GetTemplateId(); EXPECT_TRUE(newEnclosingTemplateId != InvalidTemplateId); diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateTemplateTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateTemplateTests.cpp index 6f90e245f7..242c226c7e 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateTemplateTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateTemplateTests.cpp @@ -41,7 +41,7 @@ namespace UnitTest AZStd::unique_ptr wheel1UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr wheel2UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr axleInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(wheel1UnderAxle), AZStd::move(wheel2UnderAxle) ), AxlePrefabMockFilePath); + MakeInstanceList(AZStd::move(wheel1UnderAxle), AZStd::move(wheel2UnderAxle)), AxlePrefabMockFilePath); const TemplateId axleTemplateId = axleInstance->GetTemplateId(); const AZStd::vector wheelInstanceAliasesUnderAxle = axleInstance->GetNestedInstanceAliases(wheelTemplateId); PrefabDom& axleTemplateDom = m_prefabSystemComponent->FindTemplateDom(axleTemplateId); @@ -51,7 +51,7 @@ namespace UnitTest AZStd::unique_ptr axle2UnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr spareWheelUnderCar = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axle1UnderCar), AZStd::move(axle2UnderCar), AZStd::move(spareWheelUnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axle1UnderCar), AZStd::move(axle2UnderCar), AZStd::move(spareWheelUnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); const AZStd::vector wheelInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(wheelTemplateId); @@ -93,7 +93,7 @@ namespace UnitTest // Create an axle with 0 entities and 1 wheel instance. AZStd::unique_ptr wheel1UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr axleInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(wheel1UnderAxle) ), AxlePrefabMockFilePath); + MakeInstanceList(AZStd::move(wheel1UnderAxle)), AxlePrefabMockFilePath); const TemplateId axleTemplateId = axleInstance->GetTemplateId(); PrefabDom& axleTemplateDom = m_prefabSystemComponent->FindTemplateDom(axleTemplateId); AZStd::vector wheelInstanceAliasesUnderAxle = axleInstance->GetNestedInstanceAliases(wheelTemplateId); @@ -105,7 +105,7 @@ namespace UnitTest AZStd::unique_ptr axle1UnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr axle2UnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axle1UnderCar), AZStd::move(axle2UnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axle1UnderCar), AZStd::move(axle2UnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); PrefabDom& carTemplateDom = m_prefabSystemComponent->FindTemplateDom(carTemplateId); @@ -151,7 +151,7 @@ namespace UnitTest // Create an axle with 0 entities and 1 wheel instance. AZStd::unique_ptr wheel1UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr axleInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(wheel1UnderAxle) ), AxlePrefabMockFilePath); + MakeInstanceList(AZStd::move(wheel1UnderAxle)), AxlePrefabMockFilePath); const TemplateId axleTemplateId = axleInstance->GetTemplateId(); PrefabDom& axleTemplateDom = m_prefabSystemComponent->FindTemplateDom(axleTemplateId); const AZStd::vector wheelInstanceAliasesUnderAxle = axleInstance->GetNestedInstanceAliases(wheelTemplateId); @@ -159,7 +159,7 @@ namespace UnitTest // Create a car with 0 entities and 1 axle instance. AZStd::unique_ptr axleUnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axleUnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axleUnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); PrefabDom& carTemplateDom = m_prefabSystemComponent->FindTemplateDom(carTemplateId); @@ -205,7 +205,7 @@ namespace UnitTest // Create an axle with 0 entities and 1 wheel instance. AZStd::unique_ptr wheel1UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr axleInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(wheel1UnderAxle) ), AxlePrefabMockFilePath); + MakeInstanceList(AZStd::move(wheel1UnderAxle)), AxlePrefabMockFilePath); const TemplateId axleTemplateId = axleInstance->GetTemplateId(); PrefabDom& axleTemplateDom = m_prefabSystemComponent->FindTemplateDom(axleTemplateId); const AZStd::vector wheelInstanceAliasesUnderAxle = axleInstance->GetNestedInstanceAliases(wheelTemplateId); @@ -213,7 +213,7 @@ namespace UnitTest // Create a car with 0 entities and 1 axle instance. AZStd::unique_ptr axleUnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axleUnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axleUnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); PrefabDom& carTemplateDom = m_prefabSystemComponent->FindTemplateDom(carTemplateId); @@ -253,7 +253,7 @@ namespace UnitTest AZStd::unique_ptr wheel1UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr wheel2UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr axleInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(wheel1UnderAxle), AZStd::move(wheel2UnderAxle) ), + MakeInstanceList(AZStd::move(wheel1UnderAxle), AZStd::move(wheel2UnderAxle) ), AxlePrefabMockFilePath); const TemplateId axleTemplateId = axleInstance->GetTemplateId(); PrefabDom& axleTemplateDom = m_prefabSystemComponent->FindTemplateDom(axleTemplateId); @@ -265,7 +265,7 @@ namespace UnitTest // Create a car with 0 entities and 1 axle instance. AZStd::unique_ptr axle1UnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axle1UnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axle1UnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); PrefabDom& carTemplateDom = m_prefabSystemComponent->FindTemplateDom(carTemplateId); @@ -320,7 +320,7 @@ namespace UnitTest // Create an axle with 0 entities and 1 wheel instance. AZStd::unique_ptr wheel1UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr axleInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(wheel1UnderAxle) ), AxlePrefabMockFilePath); + MakeInstanceList(AZStd::move(wheel1UnderAxle)), AxlePrefabMockFilePath); const TemplateId axleTemplateId = axleInstance->GetTemplateId(); PrefabDom& axleTemplateDom = m_prefabSystemComponent->FindTemplateDom(axleTemplateId); const AZStd::vector wheelInstanceAliasesUnderAxle = axleInstance->GetNestedInstanceAliases(wheelTemplateId); @@ -328,7 +328,7 @@ namespace UnitTest // Create a car with 0 entities and 1 axle instance. AZStd::unique_ptr axleUnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axleUnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axleUnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); PrefabDom& carTemplateDom = m_prefabSystemComponent->FindTemplateDom(carTemplateId); @@ -381,7 +381,7 @@ namespace UnitTest // Create an axle with 0 entities and 1 wheel instance. AZStd::unique_ptr wheel1UnderAxle = m_prefabSystemComponent->InstantiatePrefab(wheelTemplateId); AZStd::unique_ptr axleInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(wheel1UnderAxle) ), AxlePrefabMockFilePath); + MakeInstanceList(AZStd::move(wheel1UnderAxle)), AxlePrefabMockFilePath); const TemplateId axleTemplateId = axleInstance->GetTemplateId(); PrefabDom& axleTemplateDom = m_prefabSystemComponent->FindTemplateDom(axleTemplateId); const AZStd::vector wheelInstanceAliasesUnderAxle = axleInstance->GetNestedInstanceAliases(wheelTemplateId); @@ -389,7 +389,7 @@ namespace UnitTest // Create a car with 0 entities and 1 axle instance. AZStd::unique_ptr axleUnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axleUnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axleUnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); PrefabDom& carTemplateDom = m_prefabSystemComponent->FindTemplateDom(carTemplateId); diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateWithPatchesTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateWithPatchesTests.cpp index c17763f778..1fa638bc29 100644 --- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateWithPatchesTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabUpdateWithPatchesTests.cpp @@ -68,7 +68,7 @@ namespace UnitTest // Create a car with 0 entities and 1 axle instance. AZStd::unique_ptr axleUnderCar = m_prefabSystemComponent->InstantiatePrefab(axleTemplateId); AZStd::unique_ptr carInstance = m_prefabSystemComponent->CreatePrefab({}, - MakeInstanceList( AZStd::move(axleUnderCar) ), CarPrefabMockFilePath); + MakeInstanceList(AZStd::move(axleUnderCar)), CarPrefabMockFilePath); const TemplateId carTemplateId = carInstance->GetTemplateId(); const AZStd::vector axleInstanceAliasesUnderCar = carInstance->GetNestedInstanceAliases(axleTemplateId); PrefabDom& carTemplateDom = m_prefabSystemComponent->FindTemplateDom(carTemplateId); diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/ProceduralPrefabAssetTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/ProceduralPrefabAssetTests.cpp new file mode 100644 index 0000000000..0b9e73bbac --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/ProceduralPrefabAssetTests.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include +#include + +namespace UnitTest +{ + class ProceduralPrefabAssetTest + : public PrefabTestFixture + { + void SetUpEditorFixtureImpl() override + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + ASSERT_NE(componentApplicationRequests, nullptr); + + auto* behaviorContext = componentApplicationRequests->GetBehaviorContext(); + ASSERT_NE(behaviorContext, nullptr); + + auto* jsonRegistrationContext = componentApplicationRequests->GetJsonRegistrationContext(); + ASSERT_NE(jsonRegistrationContext, nullptr); + + auto* serializeContext = componentApplicationRequests->GetSerializeContext(); + ASSERT_NE(serializeContext, nullptr); + + AZ::Prefab::ProceduralPrefabAsset::Reflect(serializeContext); + AZ::Prefab::ProceduralPrefabAsset::Reflect(behaviorContext); + AZ::Prefab::ProceduralPrefabAsset::Reflect(jsonRegistrationContext); + } + + void TearDownEditorFixtureImpl() override + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + componentApplicationRequests->GetJsonRegistrationContext()->EnableRemoveReflection(); + AZ::Prefab::ProceduralPrefabAsset::Reflect(componentApplicationRequests->GetJsonRegistrationContext()); + } + }; + + TEST_F(ProceduralPrefabAssetTest, ReflectContext_AccessMethods_Works) + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + + auto* serializeContext = componentApplicationRequests->GetSerializeContext(); + EXPECT_TRUE(!serializeContext->CreateAny(azrtti_typeid()).empty()); + EXPECT_TRUE(!serializeContext->CreateAny(azrtti_typeid()).empty()); + + auto* jsonRegistrationContext = componentApplicationRequests->GetJsonRegistrationContext(); + EXPECT_TRUE(jsonRegistrationContext->GetSerializerForSerializerType(azrtti_typeid())); + } + + TEST_F(ProceduralPrefabAssetTest, ProceduralPrefabAsset_AccessMethods_Works) + { + const auto templateId = TemplateId(1); + const auto prefabString = "fake.prefab"; + + AZ::Prefab::ProceduralPrefabAsset asset{}; + asset.SetTemplateId(templateId); + EXPECT_EQ(asset.GetTemplateId(), templateId); + + asset.SetTemplateName(prefabString); + EXPECT_EQ(asset.GetTemplateName(), prefabString); + } + + TEST_F(ProceduralPrefabAssetTest, PrefabDomData_AccessMethods_Works) + { + AzToolsFramework::Prefab::PrefabDom dom; + dom.SetObject(); + dom.AddMember("boolValue", true, dom.GetAllocator()); + + AZ::Prefab::PrefabDomData prefabDomData; + prefabDomData.CopyValue(dom); + + const AzToolsFramework::Prefab::PrefabDom& result = prefabDomData.GetValue(); + EXPECT_TRUE(result.HasMember("boolValue")); + EXPECT_TRUE(result.FindMember("boolValue")->value.GetBool()); + } + + TEST_F(ProceduralPrefabAssetTest, PrefabDomDataJsonSerializer_Load_Works) + { + AZ::Prefab::PrefabDomData prefabDomData; + + AzToolsFramework::Prefab::PrefabDom dom; + dom.SetObject(); + dom.AddMember("member", "value", dom.GetAllocator()); + + AZ::Prefab::PrefabDomDataJsonSerializer prefabDomDataJsonSerializer; + AZ::JsonDeserializerSettings settings; + settings.m_reporting = [](auto, auto, auto) + { + AZ::JsonSerializationResult::ResultCode result(AZ::JsonSerializationResult::Tasks::ReadField); + return result; + }; + AZ::JsonDeserializerContext context{ settings }; + + auto result = prefabDomDataJsonSerializer.Load(&prefabDomData, azrtti_typeid(prefabDomData), dom, context); + EXPECT_EQ(result.GetResultCode().GetOutcome(), AZ::JsonSerializationResult::Outcomes::DefaultsUsed); + EXPECT_TRUE(prefabDomData.GetValue().HasMember("member")); + EXPECT_STREQ(prefabDomData.GetValue().FindMember("member")->value.GetString(), "value"); + } + + TEST_F(ProceduralPrefabAssetTest, PrefabDomDataJsonSerializer_Store_Works) + { + AzToolsFramework::Prefab::PrefabDom dom; + dom.SetObject(); + dom.AddMember("member", "value", dom.GetAllocator()); + + AZ::Prefab::PrefabDomData prefabDomData; + prefabDomData.CopyValue(dom); + + AZ::Prefab::PrefabDomDataJsonSerializer prefabDomDataJsonSerializer; + AzToolsFramework::Prefab::PrefabDom outputValue; + AZ::JsonSerializerSettings settings; + settings.m_reporting = [](auto, auto, auto) + { + AZ::JsonSerializationResult::ResultCode result(AZ::JsonSerializationResult::Tasks::WriteValue); + return result; + }; + AZ::JsonSerializerContext context{ settings, outputValue.GetAllocator() }; + auto result = prefabDomDataJsonSerializer.Store(outputValue, &prefabDomData, nullptr, azrtti_typeid(prefabDomData), context); + EXPECT_EQ(result.GetResultCode().GetOutcome(), AZ::JsonSerializationResult::Outcomes::DefaultsUsed); + EXPECT_TRUE(outputValue.HasMember("member")); + EXPECT_STREQ(outputValue.FindMember("member")->value.GetString(), "value"); + } +} diff --git a/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp b/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp index 91e53f1650..5def9e6bad 100644 --- a/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h b/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h index 93e86374db..01b40fbb16 100644 --- a/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h +++ b/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h @@ -142,8 +142,6 @@ namespace UnitTest /* * AssetSystemRequestBus */ - const char* GetAbsoluteDevGameFolderPath() override { return ""; } - const char* GetAbsoluteDevRootFolderPath() override { return ""; } bool GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath) override { return false; } bool GenerateRelativeSourcePath( [[maybe_unused]] const AZStd::string& sourcePath, [[maybe_unused]] AZStd::string& relativePath, diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp index 3954ef6dc6..db6a0b8571 100644 --- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp @@ -7,7 +7,10 @@ */ #include +#include #include +#include +#include #include namespace UnitTest @@ -15,9 +18,10 @@ namespace UnitTest using ViewportEditorMode = AzToolsFramework::ViewportEditorMode; using ViewportEditorModes = AzToolsFramework::ViewportEditorModes; using ViewportEditorModeTracker = AzToolsFramework::ViewportEditorModeTracker; - using ViewportEditorModeInfo = AzToolsFramework::ViewportEditorModeInfo; - using ViewportId = ViewportEditorModeInfo::IdType; + using ViewportEditorModeTrackerInfo = AzToolsFramework::ViewportEditorModeTrackerInfo; + using TrackerId = ViewportEditorModeTrackerInfo::IdType; using ViewportEditorModesInterface = AzToolsFramework::ViewportEditorModesInterface; + using ViewportEditorModeTrackerInterface = AzToolsFramework::ViewportEditorModeTrackerInterface; void ActivateModeAndExpectSuccess(ViewportEditorModes& editorModeState, ViewportEditorMode mode) { @@ -47,6 +51,26 @@ namespace UnitTest } } + void ExpectOnlyModeActive(const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) + { + for (auto modeIndex = 0; modeIndex < ViewportEditorModes::NumEditorModes; modeIndex++) + { + const auto currentMode = static_cast(modeIndex); + const bool expectedActive = (mode == currentMode); + EXPECT_EQ(editorModeState.IsModeActive(currentMode), expectedActive); + } + } + + void ExpectOnlyModeInactive(const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) + { + for (auto modeIndex = 0; modeIndex < ViewportEditorModes::NumEditorModes; modeIndex++) + { + const auto currentMode = static_cast(modeIndex); + const bool expectedActive = (mode != currentMode); + EXPECT_EQ(editorModeState.IsModeActive(currentMode), expectedActive); + } + } + // Fixture for testing editor mode states class ViewportEditorModesTestsFixture : public ::testing::Test @@ -90,10 +114,10 @@ namespace UnitTest using EditModeTracker = AZStd::unordered_map; - ViewportEditorModeNotificationsBusHandler(ViewportId viewportId) - : m_viewportSubscription(viewportId) + ViewportEditorModeNotificationsBusHandler(TrackerId id) + : m_trackerSubscription(id) { - AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(m_viewportSubscription); + AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(m_trackerSubscription); } ~ViewportEditorModeNotificationsBusHandler() @@ -101,11 +125,6 @@ namespace UnitTest AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); } - ViewportId GetViewportSubscription() const - { - return m_viewportSubscription; - } - const EditModeTracker& GetEditorModes() const { return m_editorModes; @@ -116,13 +135,13 @@ namespace UnitTest m_editorModes[mode].m_onEnter = true; } - virtual void OnEditorModeDeactivated([[maybe_unused]] const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) override + void OnEditorModeDeactivated([[maybe_unused]] const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) override { m_editorModes[mode].m_onExit = true; } private: - ViewportId m_viewportSubscription; + TrackerId m_trackerSubscription; EditModeTracker m_editorModes; }; @@ -135,10 +154,14 @@ namespace UnitTest void SetUpEditorFixtureImpl() override { + m_handlerIds.resize(ViewportEditorModes::NumEditorModes); for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - m_editorModeHandlers[mode] = AZStd::make_unique(mode); + // Create a random GUID for each handler and associate that GUID with an index derived from one of the possible editor modes + m_handlerIds[mode] = TrackerId::CreateRandom(); + m_editorModeHandlers[mode] = AZStd::make_unique(m_handlerIds[mode]); } + } void TearDownEditorFixtureImpl() override @@ -150,6 +173,24 @@ namespace UnitTest } AZStd::array, ViewportEditorModes::NumEditorModes> m_editorModeHandlers; + AZStd::vector m_handlerIds; + }; + + // Fixture for testing the integration of viewport editor mode state tracker + class ViewportEditorModeTrackerIntegrationTestFixture + : public ToolsApplicationFixture + { + public: + void SetUpEditorFixtureImpl() override + { + m_viewportEditorModeTracker = AZ::Interface::Get(); + ASSERT_NE(m_viewportEditorModeTracker, nullptr); + m_viewportEditorModes = m_viewportEditorModeTracker->GetViewportEditorModes({AzToolsFramework::GetEntityContextId()}); + ASSERT_NE(m_viewportEditorModes, nullptr); + } + + ViewportEditorModeTrackerInterface* m_viewportEditorModeTracker = nullptr; + const ViewportEditorModesInterface* m_viewportEditorModes = nullptr; }; TEST_F(ViewportEditorModesTestsFixture, NumberOfEditorModesIsEqualTo4) @@ -168,38 +209,14 @@ namespace UnitTest TEST_P(ViewportEditorModesTestsFixtureWithParams, SettingModeActiveActivatesOnlyThatMode) { ActivateModeAndExpectSuccess(m_editorModes, m_selectedEditorMode); - - for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) - { - const auto editorMode = static_cast(mode); - if (editorMode == m_selectedEditorMode) - { - EXPECT_TRUE(m_editorModes.IsModeActive(static_cast(editorMode))); - } - else - { - EXPECT_FALSE(m_editorModes.IsModeActive(static_cast(editorMode))); - } - } + ExpectOnlyModeActive(m_editorModes, m_selectedEditorMode); } TEST_P(ViewportEditorModesTestsFixtureWithParams, SettingModeInactiveInactivatesOnlyThatMode) { SetAllModesActive(m_editorModes); DeactivateModeAndExpectSuccess(m_editorModes, m_selectedEditorMode); - - for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) - { - const auto editorMode = static_cast(mode); - if (editorMode == m_selectedEditorMode) - { - EXPECT_FALSE(m_editorModes.IsModeActive(editorMode)); - } - else - { - EXPECT_TRUE(m_editorModes.IsModeActive(editorMode)); - } - } + ExpectOnlyModeInactive(m_editorModes, m_selectedEditorMode); } TEST_P(ViewportEditorModesTestsFixtureWithParams, SettingMultipleModesActiveActivatesAllThoseModesNonMutuallyExclusively) @@ -298,46 +315,47 @@ namespace UnitTest EXPECT_EQ(m_viewportEditorModeTracker.GetTrackedViewportCount(), 0); } - TEST_F(ViewportEditorModeTrackerTestFixture, RegisteringViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatId) + TEST_F(ViewportEditorModeTrackerTestFixture, ActivatingViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatId) { // Given a viewport not currently being tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); // When a mode is activated for that viewport const auto editorMode = ViewportEditorMode::Default; - m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); // Expect that viewport to now be tracked - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); // Expect the mode for that viewport to be active EXPECT_TRUE(viewportEditorModeState->IsModeActive(editorMode)); } - TEST_F(ViewportEditorModeTrackerTestFixture, UnregisteringViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatIdButReturnsError) + TEST_F(ViewportEditorModeTrackerTestFixture, DeactivatingViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatIdButReturnsError) { // Given a viewport not currently being tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); // When a mode is deactivated for that viewport const auto editorMode = ViewportEditorMode::Default; const auto expectedErrorMsg = AZStd::string::format( - "Call to DeactivateMode for mode '%u' on id '%i' without precursor call to ActivateMode", static_cast(editorMode), viewportid); - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + "Call to DeactivateMode for mode '%u' on id '%s' without precursor call to ActivateMode", static_cast(editorMode), + id.ToString().c_str()); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect an error due to no precursor activation of that mode EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect that viewport to now be tracked - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); // Expect the mode for that viewport to be inactive EXPECT_NE(viewportEditorModeState, nullptr); @@ -346,85 +364,87 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, GettingNonExistentViewportEditorModesForIdReturnsNull) { - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); } - TEST_F(ViewportEditorModeTrackerTestFixture, RegisteringViewportEditorModesForExistingIdInThatStateReturnsError) + TEST_F(ViewportEditorModeTrackerTestFixture, ActivatingViewportEditorModesForExistingIdInThatStateReturnsError) { // Given a viewport not currently tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); const auto editorMode = ViewportEditorMode::Default; { // When the mode is activated for the viewport - const auto result = m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); // Expect no error as there is no duplicate activation EXPECT_TRUE(result.IsSuccess()); // Expect the mode to be active for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_TRUE(viewportEditorModeState->IsModeActive(editorMode)); } { // When the mode is activated again for the viewport - const auto result = m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); // Expect an error for the duplicate activation const auto expectedErrorMsg = AZStd::string::format( - "Duplicate call to ActivateMode for mode '%u' on id '%i'", static_cast(editorMode), viewportid); + "Duplicate call to ActivateMode for mode '%u' on id '%s'", static_cast(editorMode), + id.ToString().c_str()); EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect the mode to still be active for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_TRUE(viewportEditorModeState->IsModeActive(editorMode)); } } - TEST_F(ViewportEditorModeTrackerTestFixture, UnregisteringViewportEditorModesForExistingIdNotInThatStateReturnssError) + TEST_F(ViewportEditorModeTrackerTestFixture, DeactivatingViewportEditorModesForExistingIdNotInThatStateReturnssError) { // Given a viewport not currently tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); const auto editorMode = ViewportEditorMode::Default; { // When the mode is activated and then deactivated for the viewport - m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect no error as there is no duplicate deactivation EXPECT_TRUE(result.IsSuccess()); // Expect the mode to be inctive for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_FALSE(viewportEditorModeState->IsModeActive(editorMode)); } { // When the mode is deactivated again for the viewport - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect an error for the duplicate deactivation const auto expectedErrorMsg = AZStd::string::format( - "Duplicate call to DeactivateMode for mode '%u' on id '%i'", static_cast(editorMode), viewportid); + "Duplicate call to DeactivateMode for mode '%u' on id '%s'", static_cast(editorMode), + id.ToString().c_str()); EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect the mode to still be inactive for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_FALSE(viewportEditorModeState->IsModeActive(editorMode)); } @@ -432,7 +452,7 @@ namespace UnitTest TEST_F( ViewportEditorModePublisherTestFixture, - RegisteringViewportEditorModesForExistingIdPublishesOnViewportEditorModeRegisterEventForAllSubscribers) + ActivatingViewportEditorModesForExistingIdPublishesOnViewportEditorModeActivateEventForAllSubscribers) { // Given a set of subscribers tracking the editor modes for their exclusive viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) @@ -444,9 +464,9 @@ namespace UnitTest // When each editor mode is activated by the state tracker for a specific viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - const ViewportId viewportId = mode; + const TrackerId id = m_handlerIds[mode]; const ViewportEditorMode editorMode = static_cast(mode); - m_viewportEditorModeTracker.ActivateMode({ viewportId }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); } for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) @@ -465,7 +485,7 @@ namespace UnitTest TEST_F( ViewportEditorModePublisherTestFixture, - UnregisteringViewportEditorModesForExistingIdPublishesOnViewportEditorModeUnregisterEventForAllSubscribers) + DeactivatingViewportEditorModesForExistingIdPublishesOnViewportEditorModeDeactivatingEventForAllSubscribers) { // Given a set of subscribers tracking the editor modes for their exclusive viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) @@ -476,10 +496,10 @@ namespace UnitTest // When each editor mode is activated deactivated by the state tracker for a specific viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - const ViewportId viewportId = mode; + const TrackerId id = m_handlerIds[mode]; const ViewportEditorMode editorMode = static_cast(mode); - m_viewportEditorModeTracker.ActivateMode({ viewportId }, editorMode); - m_viewportEditorModeTracker.DeactivateMode({ viewportId }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); } for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) @@ -495,4 +515,54 @@ namespace UnitTest EXPECT_TRUE(expectedEditorModeSet->second.m_onExit); } } + + TEST_F(ViewportEditorModeTrackerIntegrationTestFixture, InitialViewportEditorModeIsDefault) + { + ExpectOnlyModeActive(*m_viewportEditorModes, ViewportEditorMode::Default); + } + + TEST_F( + ViewportEditorModeTrackerIntegrationTestFixture, EnteringComponentModeAfterInitialStateHasViewportEditorModesDefaultAndComponentModeActive) + { + // When component mode is entered + AzToolsFramework::ComponentModeFramework::ComponentModeSystemRequestBus::Broadcast( + &AzToolsFramework::ComponentModeFramework::ComponentModeSystemRequests::BeginComponentMode, + AZStd::vector{}); + + bool inComponentMode = false; + AzToolsFramework::ComponentModeFramework::ComponentModeSystemRequestBus::BroadcastResult( + inComponentMode, &AzToolsFramework::ComponentModeFramework::ComponentModeSystemRequests::InComponentMode); + + // Expect to be in component mode + EXPECT_TRUE(inComponentMode); + + // Expect the default and component viewport editor modes to be active + EXPECT_TRUE(m_viewportEditorModes->IsModeActive(ViewportEditorMode::Default)); + EXPECT_TRUE(m_viewportEditorModes->IsModeActive(ViewportEditorMode::Component)); + + // Do not expect the pick and focus viewport editor modes to be active + EXPECT_FALSE(m_viewportEditorModes->IsModeActive(ViewportEditorMode::Pick)); + EXPECT_FALSE(m_viewportEditorModes->IsModeActive(ViewportEditorMode::Focus)); + } + + TEST_F( + ViewportEditorModeTrackerIntegrationTestFixture, + EnteringEditorPickEntitySelectionAfterInitialStateHasOnlyViewportEditorModePickModeActive) + { + // When entering pick mode + using AzToolsFramework::EditorInteractionSystemViewportSelectionRequestBus; + EditorInteractionSystemViewportSelectionRequestBus::Event( + AzToolsFramework::GetEntityContextId(), &EditorInteractionSystemViewportSelectionRequestBus::Events::SetHandler, + [](const AzToolsFramework::EditorVisibleEntityDataCache* entityDataCache, + [[maybe_unused]] AzToolsFramework::ViewportEditorModeTrackerInterface* viewportEditorModeTracker) + { + return AZStd::make_unique(entityDataCache, viewportEditorModeTracker); + }); + + // Expect only the pick viewport editor mode to be active + ExpectOnlyModeActive(*m_viewportEditorModes, ViewportEditorMode::Pick); + } + + // FocusMode integration tests will follow (LYN-6995) + } // namespace UnitTest diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportScreenTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportScreenTests.cpp index 77058038e9..e8fce6653f 100644 --- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportScreenTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportScreenTests.cpp @@ -6,8 +6,8 @@ * */ -#include #include +#include #include #include #include @@ -20,18 +20,17 @@ namespace UnitTest { - // transform a point from normalized device coordinates to world space, and then from world space back to normalized device coordinates - AZ::Vector2 ScreenNDCToWorldToScreenNDC( - const AZ::Vector2& ndcPoint, const AzFramework::CameraState& cameraState) + // transform a point from normalized device coordinates to world space, and then from world space back to normalized device coordinates + AZ::Vector2 ScreenNdcToWorldToScreenNdc(const AZ::Vector2& ndcPoint, const AzFramework::CameraState& cameraState) { - const auto worldResult = AzFramework::ScreenNDCToWorld(ndcPoint, InverseCameraView(cameraState), InverseCameraProjection(cameraState)); - const auto ndcResult = AzFramework::WorldToScreenNDC(worldResult, CameraView(cameraState), CameraProjection(cameraState)); + const auto worldResult = + AzFramework::ScreenNdcToWorld(ndcPoint, InverseCameraView(cameraState), InverseCameraProjection(cameraState)); + const auto ndcResult = AzFramework::WorldToScreenNdc(worldResult, CameraView(cameraState), CameraProjection(cameraState)); return AZ::Vector3ToVector2(ndcResult); } // transform a point from screen space to world space, and then from world space back to screen space - AzFramework::ScreenPoint ScreenToWorldToScreen( - const AzFramework::ScreenPoint& screenPoint, const AzFramework::CameraState& cameraState) + AzFramework::ScreenPoint ScreenToWorldToScreen(const AzFramework::ScreenPoint& screenPoint, const AzFramework::CameraState& cameraState) { const auto worldResult = AzFramework::ScreenToWorld(screenPoint, cameraState); return AzFramework::WorldToScreen(worldResult, cameraState); @@ -47,25 +46,25 @@ namespace UnitTest const auto cameraState = AzFramework::CreateIdentityDefaultCamera(cameraPosition, screenDimensions); { - const auto expectedScreenPoint = ScreenPoint{600, 450}; + const auto expectedScreenPoint = ScreenPoint{ 600, 450 }; const auto resultScreenPoint = ScreenToWorldToScreen(expectedScreenPoint, cameraState); EXPECT_EQ(resultScreenPoint, expectedScreenPoint); } { - const auto expectedScreenPoint = ScreenPoint{400, 300}; + const auto expectedScreenPoint = ScreenPoint{ 400, 300 }; const auto resultScreenPoint = ScreenToWorldToScreen(expectedScreenPoint, cameraState); EXPECT_EQ(resultScreenPoint, expectedScreenPoint); } { - const auto expectedScreenPoint = ScreenPoint{0, 0}; + const auto expectedScreenPoint = ScreenPoint{ 0, 0 }; const auto resultScreenPoint = ScreenToWorldToScreen(expectedScreenPoint, cameraState); EXPECT_EQ(resultScreenPoint, expectedScreenPoint); } { - const auto expectedScreenPoint = ScreenPoint{800, 600}; + const auto expectedScreenPoint = ScreenPoint{ 800, 600 }; const auto resultScreenPoint = ScreenToWorldToScreen(expectedScreenPoint, cameraState); EXPECT_EQ(resultScreenPoint, expectedScreenPoint); } @@ -81,7 +80,7 @@ namespace UnitTest const auto cameraState = AzFramework::CreateDefaultCamera(cameraTransform, screenDimensions); - const auto expectedScreenPoint = ScreenPoint{200, 300}; + const auto expectedScreenPoint = ScreenPoint{ 200, 300 }; const auto resultScreenPoint = ScreenToWorldToScreen(expectedScreenPoint, cameraState); EXPECT_EQ(resultScreenPoint, expectedScreenPoint); } @@ -93,46 +92,46 @@ namespace UnitTest using AzFramework::ScreenPoint; const auto screenDimensions = AZ::Vector2(800.0f, 600.0f); - const auto cameraTransform = AZ::Transform::CreateTranslation(AZ::Vector3(10.0f, 0.0f, 0.0f)) * - AZ::Transform::CreateRotationZ(AZ::DegToRad(-90.0f)); + const auto cameraTransform = + AZ::Transform::CreateTranslation(AZ::Vector3(10.0f, 0.0f, 0.0f)) * AZ::Transform::CreateRotationZ(AZ::DegToRad(-90.0f)); const auto cameraState = AzFramework::CreateDefaultCamera(cameraTransform, screenDimensions); - const auto worldResult = AzFramework::ScreenToWorld(ScreenPoint{400, 300}, cameraState); + const auto worldResult = AzFramework::ScreenToWorld(ScreenPoint{ 400, 300 }, cameraState); EXPECT_THAT(worldResult, IsClose(AZ::Vector3(10.1f, 0.0f, 0.0f))); } - + //////////////////////////////////////////////////////////////////////////////////////////////////////// // NDC tests TEST(ViewportScreen, WorldToScreenNDCAndScreenNDCToWorldReturnsTheSameValueIdentityCameraOffsetFromOrigin) { using NdcPoint = AZ::Vector2; - + const auto screenDimensions = AZ::Vector2(800.0f, 600.0f); const auto cameraPosition = AZ::Vector3::CreateAxisY(-10.0f); const auto cameraState = AzFramework::CreateIdentityDefaultCamera(cameraPosition, screenDimensions); { - const auto expectedNdcPoint = NdcPoint{0.75f, 0.75f}; - const auto resultNdcPoint = ScreenNDCToWorldToScreenNDC(expectedNdcPoint, cameraState); + const auto expectedNdcPoint = NdcPoint{ 0.75f, 0.75f }; + const auto resultNdcPoint = ScreenNdcToWorldToScreenNdc(expectedNdcPoint, cameraState); EXPECT_THAT(resultNdcPoint, IsClose(expectedNdcPoint)); } { - const auto expectedNdcPoint = NdcPoint{0.5f, 0.5f}; - const auto resultNdcPoint = ScreenNDCToWorldToScreenNDC(expectedNdcPoint, cameraState); + const auto expectedNdcPoint = NdcPoint{ 0.5f, 0.5f }; + const auto resultNdcPoint = ScreenNdcToWorldToScreenNdc(expectedNdcPoint, cameraState); EXPECT_THAT(resultNdcPoint, IsClose(expectedNdcPoint)); } { - const auto expectedNdcPoint = NdcPoint{0.0f, 0.0f}; - const auto resultNdcPoint = ScreenNDCToWorldToScreenNDC(expectedNdcPoint, cameraState); + const auto expectedNdcPoint = NdcPoint{ 0.0f, 0.0f }; + const auto resultNdcPoint = ScreenNdcToWorldToScreenNdc(expectedNdcPoint, cameraState); EXPECT_THAT(resultNdcPoint, IsClose(expectedNdcPoint)); } { - const auto expectedNdcPoint = NdcPoint{1.0f, 1.0f}; - const auto resultNdcPoint = ScreenNDCToWorldToScreenNDC(expectedNdcPoint, cameraState); + const auto expectedNdcPoint = NdcPoint{ 1.0f, 1.0f }; + const auto resultNdcPoint = ScreenNdcToWorldToScreenNdc(expectedNdcPoint, cameraState); EXPECT_THAT(resultNdcPoint, IsClose(expectedNdcPoint)); } } @@ -147,8 +146,8 @@ namespace UnitTest const auto cameraState = AzFramework::CreateDefaultCamera(cameraTransform, screenDimensions); - const auto expectedNdcPoint = NdcPoint{0.25f, 0.5f}; - const auto resultNdcPoint = ScreenNDCToWorldToScreenNDC(expectedNdcPoint, cameraState); + const auto expectedNdcPoint = NdcPoint{ 0.25f, 0.5f }; + const auto resultNdcPoint = ScreenNdcToWorldToScreenNdc(expectedNdcPoint, cameraState); EXPECT_THAT(resultNdcPoint, IsClose(expectedNdcPoint)); } @@ -159,12 +158,13 @@ namespace UnitTest using NdcPoint = AZ::Vector2; const auto screenDimensions = AZ::Vector2(800.0f, 600.0f); - const auto cameraTransform = AZ::Transform::CreateTranslation(AZ::Vector3(10.0f, 0.0f, 0.0f)) * - AZ::Transform::CreateRotationZ(AZ::DegToRad(-90.0f)); + const auto cameraTransform = + AZ::Transform::CreateTranslation(AZ::Vector3(10.0f, 0.0f, 0.0f)) * AZ::Transform::CreateRotationZ(AZ::DegToRad(-90.0f)); const auto cameraState = AzFramework::CreateDefaultCamera(cameraTransform, screenDimensions); - const auto worldResult = AzFramework::ScreenNDCToWorld(NdcPoint{0.5f, 0.5f}, InverseCameraView(cameraState), InverseCameraProjection(cameraState)); + const auto worldResult = + AzFramework::ScreenNdcToWorld(NdcPoint{ 0.5f, 0.5f }, InverseCameraView(cameraState), InverseCameraProjection(cameraState)); EXPECT_THAT(worldResult, IsClose(AZ::Vector3(10.1f, 0.0f, 0.0f))); } @@ -175,7 +175,7 @@ namespace UnitTest using AzFramework::ScreenPoint; using AzFramework::ScreenVector; - const ScreenVector screenVector = ScreenPoint{100, 200} - ScreenPoint{10, 20}; + const ScreenVector screenVector = ScreenPoint{ 100, 200 } - ScreenPoint{ 10, 20 }; EXPECT_EQ(screenVector, ScreenVector(90, 180)); } @@ -184,7 +184,7 @@ namespace UnitTest using AzFramework::ScreenPoint; using AzFramework::ScreenVector; - const ScreenPoint screenPoint = ScreenPoint{100, 200} + ScreenVector{50, 25}; + const ScreenPoint screenPoint = ScreenPoint{ 100, 200 } + ScreenVector{ 50, 25 }; EXPECT_EQ(screenPoint, ScreenPoint(150, 225)); } @@ -193,7 +193,7 @@ namespace UnitTest using AzFramework::ScreenPoint; using AzFramework::ScreenVector; - const ScreenPoint screenPoint = ScreenPoint{120, 200} - ScreenVector{50, 20}; + const ScreenPoint screenPoint = ScreenPoint{ 120, 200 } - ScreenVector{ 50, 20 }; EXPECT_EQ(screenPoint, ScreenPoint(70, 180)); } @@ -202,7 +202,7 @@ namespace UnitTest using AzFramework::ScreenPoint; using AzFramework::ScreenVector; - const ScreenVector screenVector = ScreenVector{100, 200} + ScreenVector{50, 25}; + const ScreenVector screenVector = ScreenVector{ 100, 200 } + ScreenVector{ 50, 25 }; EXPECT_EQ(screenVector, ScreenVector(150, 225)); } @@ -211,7 +211,7 @@ namespace UnitTest using AzFramework::ScreenPoint; using AzFramework::ScreenVector; - const ScreenVector screenVector = ScreenVector{100, 200} - ScreenVector{50, 25}; + const ScreenVector screenVector = ScreenVector{ 100, 200 } - ScreenVector{ 50, 25 }; EXPECT_EQ(screenVector, ScreenVector(50, 175)); } @@ -220,8 +220,8 @@ namespace UnitTest using AzFramework::ScreenPoint; using AzFramework::ScreenVector; - const ScreenPoint screenPoint = ScreenPoint{100, 200}; - const ScreenVector screenVector = ScreenVector{50, 25}; + const ScreenPoint screenPoint = ScreenPoint{ 100, 200 }; + const ScreenVector screenVector = ScreenVector{ 50, 25 }; const AZ::Vector2 fromScreenPoint = AzFramework::Vector2FromScreenPoint(screenPoint); const AZ::Vector2 fromScreenVector = AzFramework::Vector2FromScreenVector(screenVector); @@ -295,6 +295,58 @@ namespace UnitTest EXPECT_NEAR(AzFramework::ScreenVectorLength(ScreenVector(12, 15)), 19.20937f, 0.001f); } + TEST(ViewportScreen, ScreenVectorTransformedByScalarUpwards) + { + using AzFramework::ScreenVector; + + auto screenVector = ScreenVector(5, 10); + auto scaledScreenVector = screenVector * 2.0f; + + EXPECT_EQ(scaledScreenVector, ScreenVector(10, 20)); + } + + TEST(ViewportScreen, ScreenVectorTransformedByScalarWithRounding) + { + using AzFramework::ScreenVector; + + auto screenVector = ScreenVector(1, 6); + auto scaledScreenVector = screenVector * 0.1f; + + // value less than 0.5 rounds down, greater than or equal to 0.5 rounds up + EXPECT_EQ(scaledScreenVector, ScreenVector(0, 1)); + } + + TEST(ViewportScreen, ScreenVectorTransformedByScalarWithRoundingAtHalfwayBoundary) + { + using AzFramework::ScreenVector; + + auto screenVector = ScreenVector(5, 10); + auto scaledScreenVector = screenVector * 0.1f; + + // value less than 0.5 rounds down, greater than or equal to 0.5 rounds up + EXPECT_EQ(scaledScreenVector, ScreenVector(1, 1)); + } + + TEST(ViewportScreen, ScreenVectorTransformedByScalarDownwards) + { + using AzFramework::ScreenVector; + + auto screenVector = ScreenVector(6, 12); + auto scaledScreenVector = screenVector * 0.5f; + + EXPECT_EQ(scaledScreenVector, ScreenVector(3, 6)); + } + + TEST(ViewportScreen, ScreenVectorTransformedByScalarInplace) + { + using AzFramework::ScreenVector; + + auto screenVector = ScreenVector(13, 37); + screenVector *= 10.0f; + + EXPECT_EQ(screenVector, ScreenVector(130, 370)); + } + //////////////////////////////////////////////////////////////////////////////////////////////////////// // Other tests TEST(ViewportScreen, CanGetCameraTransformFromCameraViewAndBack) diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiManagerTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiManagerTests.cpp index 676b9c5e35..daf4b9c29a 100644 --- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiManagerTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiManagerTests.cpp @@ -127,6 +127,25 @@ namespace UnitTest EXPECT_TRUE(button->m_state == AzToolsFramework::ViewportUi::Internal::Button::State::Selected); } + TEST_F(ViewportUiManagerTestFixture, ClearClusterActiveButtonSetsButtonStateToDeselected) + { + // setup + auto clusterId = m_viewportManagerWrapper.GetViewportManager()->CreateCluster(AzToolsFramework::ViewportUi::Alignment::TopLeft); + auto buttonId = m_viewportManagerWrapper.GetViewportManager()->CreateClusterButton(clusterId, ""); + + auto clusterEntry = m_viewportManagerWrapper.GetViewportManager()->GetClusterMap().find(clusterId); + auto button = clusterEntry->second->GetButton(buttonId); + + // first set a button to active + m_viewportManagerWrapper.GetViewportManager()->SetClusterActiveButton(clusterId, buttonId); + EXPECT_TRUE(button->m_state == AzToolsFramework::ViewportUi::Internal::Button::State::Selected); + + // clear the active button on the cluster + m_viewportManagerWrapper.GetViewportManager()->ClearClusterActiveButton(clusterId); + // the button should now be deselected + EXPECT_TRUE(button->m_state == AzToolsFramework::ViewportUi::Internal::Button::State::Deselected); + } + TEST_F(ViewportUiManagerTestFixture, RegisterClusterEventHandlerConnectsHandlerToClusterEvent) { auto clusterId = m_viewportManagerWrapper.GetViewportManager()->CreateCluster(AzToolsFramework::ViewportUi::Alignment::TopLeft); diff --git a/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake b/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake index ecc7d17ccc..87d522c4a6 100644 --- a/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake +++ b/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake @@ -12,6 +12,8 @@ set(FILES AssetFileInfoListComparison.cpp AssetSeedManager.cpp AssetSystemMocks.h + BoundsTestComponent.cpp + BoundsTestComponent.h ComponentAdapterTests.cpp ComponentAddRemove.cpp ComponentModeTestDoubles.cpp @@ -25,6 +27,7 @@ set(FILES Entity/EditorEntityHelpersTests.cpp Entity/EditorEntitySearchComponentTests.cpp Entity/EditorEntitySelectionTests.cpp + Entity/EntityUtilityComponentTests.cpp EntityIdQLabelTests.cpp EntityInspectorTests.cpp EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp @@ -34,6 +37,9 @@ set(FILES EntityTestbed.h FileFunc.cpp FingerprintingTests.cpp + FocusMode/EditorFocusModeFixture.cpp + FocusMode/EditorFocusModeFixture.h + FocusMode/EditorFocusModeSelectionTests.cpp FocusMode/EditorFocusModeTests.cpp GenericComponentWrapperTest.cpp InstanceDataHierarchy.cpp @@ -86,6 +92,8 @@ set(FILES Prefab/SpawnableSortEntitiesTestFixture.cpp Prefab/SpawnableSortEntitiesTestFixture.h Prefab/SpawnableSortEntitiesTests.cpp + Prefab/PrefabScriptingTests.cpp + Prefab/ProceduralPrefabAssetTests.cpp PropertyIntCtrlCommonTests.h PropertyIntSliderCtrlTests.cpp PropertyIntSpinCtrlTests.cpp diff --git a/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp b/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp index 095f392501..2922cc2891 100644 --- a/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp +++ b/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp @@ -1316,7 +1316,7 @@ CarrierThread::CarrierThread(const CarrierDesc& desc, AZStd::shared_ptrpFileIO->GetAlias("@root@"); + const char* rootValue = gEnv->pFileIO->GetAlias("@products@"); if (rootValue) { stack_string rootPath(ToUnixPath(rootValue)); @@ -538,7 +538,7 @@ namespace PathUtil ) { stack_string chopped_string = relativePath.substr(rootPath.size()); - stack_string rooted = stack_string("@root@") + chopped_string; + stack_string rooted = stack_string("@products@") + chopped_string; return rooted; } } diff --git a/Code/Legacy/CryCommon/Maestro/Bus/SequenceComponentBus.h b/Code/Legacy/CryCommon/Maestro/Bus/SequenceComponentBus.h index ba3d7bdcb6..9a3619b89e 100644 --- a/Code/Legacy/CryCommon/Maestro/Bus/SequenceComponentBus.h +++ b/Code/Legacy/CryCommon/Maestro/Bus/SequenceComponentBus.h @@ -7,6 +7,7 @@ */ #pragma once +#include #include #include #include diff --git a/Code/Legacy/CryCommon/ProjectDefines.h b/Code/Legacy/CryCommon/ProjectDefines.h index 203bd304c9..2c3df4e37f 100644 --- a/Code/Legacy/CryCommon/ProjectDefines.h +++ b/Code/Legacy/CryCommon/ProjectDefines.h @@ -81,9 +81,6 @@ #include AZ_RESTRICTED_FILE(ProjectDefines_h) #else #define PROJECTDEFINES_H_TRAIT_DISABLE_MONOLITHIC_PROFILING_MARKERS 1 - #if !defined(LINUX) && !defined(APPLE) - #define PROJECTDEFINES_H_TRAIT_ENABLE_SOFTCODE_SYSTEM 1 - #endif #if defined(WIN32) || defined(WIN64) || defined(LINUX) || defined(APPLE) #define PROJECTDEFINES_H_TRAIT_USE_GPU_PARTICLES 1 #endif diff --git a/Code/Legacy/CryCommon/platform_impl.cpp b/Code/Legacy/CryCommon/platform_impl.cpp index 323d3daf65..a68a5150db 100644 --- a/Code/Legacy/CryCommon/platform_impl.cpp +++ b/Code/Legacy/CryCommon/platform_impl.cpp @@ -71,7 +71,6 @@ void InitCRTHandlers() void InitCRTHandlers() {} #endif -#ifndef SOFTCODE ////////////////////////////////////////////////////////////////////////// // This is an entry to DLL initialization function that must be called for each loaded module ////////////////////////////////////////////////////////////////////////// @@ -136,8 +135,6 @@ void* GetDetachEnvironmentSymbol() return reinterpret_cast(&DetachEnvironment); } -#endif // !defined(SOFTCODE) - bool g_bProfilerEnabled = false; ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Legacy/CrySystem/CMakeLists.txt b/Code/Legacy/CrySystem/CMakeLists.txt index 9e1cf92267..4c1f0d9b82 100644 --- a/Code/Legacy/CrySystem/CMakeLists.txt +++ b/Code/Legacy/CrySystem/CMakeLists.txt @@ -28,7 +28,6 @@ ly_add_target( 3rdParty::lz4 3rdParty::md5 3rdParty::tiff - 3rdParty::zlib 3rdParty::zstd Legacy::CryCommon Legacy::CrySystem.XMLBinary diff --git a/Code/Legacy/CrySystem/ConsoleBatchFile.cpp b/Code/Legacy/CrySystem/ConsoleBatchFile.cpp index bdc8d6de7d..5b96b943a7 100644 --- a/Code/Legacy/CrySystem/ConsoleBatchFile.cpp +++ b/Code/Legacy/CrySystem/ConsoleBatchFile.cpp @@ -59,10 +59,10 @@ bool CConsoleBatchFile::ExecuteConfigFile(const char* sFilename) AZStd::string filename; - if (sFilename[0] != '@') // console config files are actually by default in @root@ instead of @assets@ + if (sFilename[0] != '@') // console config files are actually by default in @products@ instead of @products@ { // However, if we've passed in a relative or absolute path that matches an existing file name, - // don't change it. Only change it to "@root@/filename" and strip off any relative paths + // don't change it. Only change it to "@products@/filename" and strip off any relative paths // if the given pattern *didn't* match a file. if (AZ::IO::FileIOBase::GetDirectInstance()->Exists(sFilename)) { @@ -70,7 +70,7 @@ bool CConsoleBatchFile::ExecuteConfigFile(const char* sFilename) } else { - filename = PathUtil::Make("@root@", PathUtil::GetFile(sFilename)); + filename = PathUtil::Make("@products@", PathUtil::GetFile(sFilename)); } } else diff --git a/Code/Legacy/CrySystem/DebugCallStack.cpp b/Code/Legacy/CrySystem/DebugCallStack.cpp index bea6c8c035..8018e46d69 100644 --- a/Code/Legacy/CrySystem/DebugCallStack.cpp +++ b/Code/Legacy/CrySystem/DebugCallStack.cpp @@ -372,7 +372,7 @@ void DebugCallStack::LogExceptionInfo(EXCEPTION_POINTERS* pex) const char* logAlias = gEnv->pFileIO->GetAlias("@log@"); if (!logAlias) { - logAlias = gEnv->pFileIO->GetAlias("@root@"); + logAlias = gEnv->pFileIO->GetAlias("@products@"); } if (logAlias) { diff --git a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp index 2e61760d8c..49af5080ec 100644 --- a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp +++ b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp @@ -306,7 +306,7 @@ void CLevelSystem::ScanFolder(const char* subfolder, bool modFolder) } AZStd::string levelContainerPakPath; - AZ::StringFunc::Path::Join("@assets@", m_levelsFolder.c_str(), levelContainerPakPath); + AZ::StringFunc::Path::Join("@products@", m_levelsFolder.c_str(), levelContainerPakPath); if (subfolder && subfolder[0]) { AZ::StringFunc::Path::Join(levelContainerPakPath.c_str(), subfolder, levelContainerPakPath); diff --git a/Code/Legacy/CrySystem/SystemCFG.cpp b/Code/Legacy/CrySystem/SystemCFG.cpp index c97345a518..7a643f2069 100644 --- a/Code/Legacy/CrySystem/SystemCFG.cpp +++ b/Code/Legacy/CrySystem/SystemCFG.cpp @@ -292,10 +292,10 @@ static bool ParseSystemConfig(const AZStd::string& strSysConfigFilePath, ILoadCo // to either root or assets/config. this is done so that code can just request a simple file name and get its data if ( !(file.Open(filename.c_str(), "rb")) && - !(file.Open((AZStd::string("@root@/") + filename).c_str(), "rb")) && - !(file.Open((AZStd::string("@assets@/") + filename).c_str(), "rb")) && - !(file.Open((AZStd::string("@assets@/config/") + filename).c_str(), "rb")) && - !(file.Open((AZStd::string("@assets@/config/spec/") + filename).c_str(), "rb")) + !(file.Open((AZStd::string("@products@/") + filename).c_str(), "rb")) && + !(file.Open((AZStd::string("@products@/") + filename).c_str(), "rb")) && + !(file.Open((AZStd::string("@products@/config/") + filename).c_str(), "rb")) && + !(file.Open((AZStd::string("@products@/config/spec/") + filename).c_str(), "rb")) ) { if (warnIfMissing) @@ -414,7 +414,7 @@ static bool ParseSystemConfig(const AZStd::string& strSysConfigFilePath, ILoadCo // replace '\\\\' with '\\' and '\\\"' with '\"' AZ::StringFunc::Replace(strValue, "\\\\", "\\"); AZ::StringFunc::Replace(strValue, "\\\"", "\""); - + pSink->OnLoadConfigurationEntry(strKey.c_str(), strValue.c_str(), strGroup.c_str()); } } diff --git a/Code/Legacy/CrySystem/SystemInit.cpp b/Code/Legacy/CrySystem/SystemInit.cpp index 2c70717e8f..6de10f3855 100644 --- a/Code/Legacy/CrySystem/SystemInit.cpp +++ b/Code/Legacy/CrySystem/SystemInit.cpp @@ -796,7 +796,7 @@ void CSystem::OpenBasicPaks() bBasicPaksLoaded = true; // open pak files - constexpr AZStd::string_view paksFolder = "@assets@/*.pak"; // (@assets@ assumed) + constexpr AZStd::string_view paksFolder = "@products@/*.pak"; // (@products@ assumed) m_env.pCryPak->OpenPacks(paksFolder); InlineInitializationProcessing("CSystem::OpenBasicPaks OpenPacks( paksFolder.c_str() )"); @@ -805,10 +805,10 @@ void CSystem::OpenBasicPaks() // Open engine packs ////////////////////////////////////////////////////////////////////////// - const char* const assetsDir = "@assets@"; + const char* const assetsDir = "@products@"; // After game paks to have same search order as with files on disk - m_env.pCryPak->OpenPack(assetsDir, "Engine.pak"); + m_env.pCryPak->OpenPack(assetsDir, "engine.pak"); #if defined(AZ_RESTRICTED_PLATFORM) #define AZ_RESTRICTED_SECTION SYSTEMINIT_CPP_SECTION_15 @@ -874,7 +874,7 @@ void CSystem::OpenLanguageAudioPak([[maybe_unused]] const char* sLanguage) if (!AZ::StringFunc::Equal(sLocalizationFolder, "Languages", false)) { - sLocalizationFolder = "@assets@"; + sLocalizationFolder = "@products@"; } // load localized pak with crc32 filenames on consoles to save memory. @@ -1260,9 +1260,6 @@ AZ_POP_DISABLE_WARNING InlineInitializationProcessing("CSystem::Init Create console"); - // Need to load the engine.pak that includes the config files needed during initialization - m_env.pCryPak->OpenPack("@assets@", "Engine.pak"); - InitFileSystem_LoadEngineFolders(startupParams); #if !defined(RELEASE) || defined(RELEASE_LOGGING) diff --git a/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp b/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp index e0a6725ed4..24366498a5 100644 --- a/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp +++ b/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp @@ -27,7 +27,7 @@ namespace AWSNativeSDKInit void CopyCaCertBundle() { AZStd::vector contents; - AZStd::string certificatePath = "@assets@/certificates/aws/cacert.pem"; + AZStd::string certificatePath = "@products@/certificates/aws/cacert.pem"; AZStd::string publicStoragePath = AZ::Android::Utils::GetAppPublicStoragePath(); publicStoragePath.append("/certificates/aws/cacert.pem"); diff --git a/Code/Tools/AssetBundler/source/models/SeedListTableModel.cpp b/Code/Tools/AssetBundler/source/models/SeedListTableModel.cpp index 86818432bc..e0b9d9f5d8 100644 --- a/Code/Tools/AssetBundler/source/models/SeedListTableModel.cpp +++ b/Code/Tools/AssetBundler/source/models/SeedListTableModel.cpp @@ -69,7 +69,8 @@ namespace AssetBundler assetInfo = AzToolsFramework::AssetSeedManager::GetAssetInfoById( seed.m_assetId, AzFramework::PlatformHelper::GetPlatformIndicesInterpreted(seed.m_platformFlags)[0], - absolutePath); + absolutePath, + seed.m_assetRelativePath); platformList = QString(m_seedListManager->GetReadablePlatformList(seed).c_str()); m_additionalSeedInfoMap[seed.m_assetId].reset(new AdditionalSeedInfo(assetInfo.m_relativePath.c_str(), platformList)); diff --git a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp index 9c9c517020..da2edcc51f 100644 --- a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp +++ b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp @@ -36,6 +36,7 @@ #include #include #include +#include namespace AssetBuilder { @@ -80,6 +81,7 @@ AZ::ComponentTypeList AssetBuilderApplication::GetRequiredSystemComponents() con azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), + azrtti_typeid(), }); return components; diff --git a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp index eb6cc4033c..78244ab02c 100644 --- a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp +++ b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp @@ -411,7 +411,7 @@ bool AssetBuilderComponent::RunInResidentMode() m_running = true; m_jobThreadDesc.m_name = "Builder Job Thread"; - m_jobThread = AZStd::thread(AZStd::bind(&AssetBuilderComponent::JobThread, this), &m_jobThreadDesc); + m_jobThread = AZStd::thread(m_jobThreadDesc, AZStd::bind(&AssetBuilderComponent::JobThread, this)); AzFramework::EngineConnectionEvents::Bus::Handler::BusConnect(); // Listen for disconnects @@ -683,31 +683,26 @@ void AssetBuilderComponent::ProcessJob(const AssetBuilderSDK::ProcessJobFunction AZ_Assert(settingsRegistry != nullptr, "SettingsRegistry must be ready for use in the AssetBuilder."); // The root path is the cache plus the platform name. - AZ::IO::FixedMaxPath newRoot(m_gameCache); + AZ::IO::FixedMaxPath newProjectCache(m_gameCache); // Check if the platform identifier is a valid "asset platform" // If so, use it, other wise use the OS default platform as a fail safe // This is to make sure the "debug platform" isn't added as a path segment - // the Cache Root folder + // the Cache ProjectCache folder if (AzFramework::PlatformHelper::GetPlatformIdFromName(request.m_platformInfo.m_identifier) != AzFramework::PlatformId::Invalid) { - newRoot /= request.m_platformInfo.m_identifier; + newProjectCache /= request.m_platformInfo.m_identifier; } else { - newRoot /= AzFramework::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME); + newProjectCache /= AzFramework::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME); } - // The asset path is root and the lower case game name. - AZ::IO::FixedMaxPath newAssets = newRoot; - // Now set the paths and run the job. { // Save out the prior paths. - ScopedAliasSetter assetAliasScope(*ioBase, "@assets@", newAssets.c_str()); - ScopedAliasSetter rootAliasScope(*ioBase, "@root@", newRoot.c_str()); - ScopedAliasSetter projectplatformCacheAliasScope(*ioBase, "@projectplatformcache@", newRoot.c_str()); + ScopedAliasSetter projectPlatformCacheAliasScope(*ioBase, "@products@", newProjectCache.c_str()); ScopedSettingsRegistrySetter cacheRootFolderScope(*settingsRegistry, - AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder, newRoot.Native()); + AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder, newProjectCache.Native()); // Invoke the Process Job function job(request, outResponse); diff --git a/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderSDK.cpp b/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderSDK.cpp index d6c4661c15..62b063c83b 100644 --- a/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderSDK.cpp +++ b/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderSDK.cpp @@ -20,6 +20,7 @@ #include #include #include // For slice asset sub ids +#include ////////////////////////////////////////////////////////////////////////// namespace AssetBuilderSDK diff --git a/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/SerializationDependencies.cpp b/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/SerializationDependencies.cpp index 9e826faabb..09c6fc7cb4 100644 --- a/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/SerializationDependencies.cpp +++ b/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/SerializationDependencies.cpp @@ -7,6 +7,7 @@ */ #include +#include namespace AssetBuilderSDK { diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp index f570a1ccb4..d7cdd30be8 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp +++ b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp @@ -8,6 +8,7 @@ #include "native/AssetManager/AssetCatalog.h" +#include #include #include #include @@ -26,7 +27,7 @@ namespace AssetProcessor , m_registryBuiltOnce(false) , m_registriesMutex(QMutex::Recursive) { - + for (const AssetBuilderSDK::PlatformInfo& info : m_platformConfig->GetEnabledPlatforms()) { m_platforms.push_back(QString::fromUtf8(info.m_identifier.c_str())); @@ -37,17 +38,9 @@ namespace AssetProcessor // save 30mb for this. Really large projects do get this big (and bigger) // if you don't do this, things get fragmented very fast. - m_saveBuffer.reserve(1024 * 1024 * 30); - - m_absoluteDevFolderPath[0] = 0; - m_absoluteDevGameFolderPath[0] = 0; - - AZStd::string engineRoot; - AzFramework::ApplicationRequests::Bus::BroadcastResult(engineRoot, &AzFramework::ApplicationRequests::GetEngineRoot); - azstrcpy(m_absoluteDevFolderPath, AZ_MAX_PATH_LEN, engineRoot.c_str()); + m_saveBuffer.reserve(1024 * 1024 * 30); - AZStd::string gameFolderPath{AssetUtilities::ComputeProjectPath().toUtf8().constData()}; - azstrcpy(m_absoluteDevGameFolderPath, AZ_MAX_PATH_LEN, gameFolderPath.c_str()); + AssetUtilities::ComputeProjectPath(); AssetUtilities::ComputeProjectCacheRoot(m_cacheRootDir); @@ -358,7 +351,7 @@ namespace AssetProcessor [[maybe_unused]] bool makeDirResult = AZ::IO::SystemFile::CreateDir(absPath.toUtf8().constData()); AZ_Warning(AssetProcessor::ConsoleChannel, makeDirResult, "Failed create folder %s", platformCacheDir.toUtf8().constData()); } - + // if we succeeded in doing this, then use "rename" to move the file over the previous copy. bool moved = AssetUtilities::MoveFileWithTimeout(tempRegistryFile, actualRegistryFile, 3); allCatalogsSaved = allCatalogsSaved && moved; @@ -381,7 +374,7 @@ namespace AssetProcessor } } } - + { // scoped to minimize the duration of this mutex lock QMutexLocker locker(&m_savingRegistryMutex); @@ -604,7 +597,7 @@ namespace AssetProcessor AZStd::string nameForMap(relativeFilePath.toUtf8().constData()); AZStd::to_lower(nameForMap.begin(), nameForMap.end()); - + m_sourceNameToSourceUUIDMap.insert({ nameForMap, sourceUuid }); } @@ -626,16 +619,6 @@ namespace AssetProcessor ////////////////////////////////////////////////////////////////////////// - const char* AssetCatalog::GetAbsoluteDevGameFolderPath() - { - return m_absoluteDevGameFolderPath; - } - - const char* AssetCatalog::GetAbsoluteDevRootFolderPath() - { - return m_absoluteDevFolderPath; - } - bool AssetCatalog::GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullSourceOrProductPath, AZStd::string& relativeProductPath) { ProcessGetRelativeProductPathFromFullSourceOrProductPathRequest(fullSourceOrProductPath, relativeProductPath); @@ -975,7 +958,7 @@ namespace AssetProcessor // regardless of which way we come into this function we must always use ConvertToRelativePath // to convert from whatever the input format is to a database path (which may include output prefix) - QString databaseName; + QString databaseName; QString scanFolder; if (!AzFramework::StringFunc::Path::IsRelative(sourcePath)) { @@ -1162,7 +1145,7 @@ namespace AssetProcessor AZStd::string AssetCatalog::GetAssetPathById(const AZ::Data::AssetId& id) { return GetAssetInfoById(id).m_relativePath; - + } AZ::Data::AssetId AssetCatalog::GetAssetIdByPath(const char* path, const AZ::Data::AssetType& typeToRegister, bool autoRegisterIfNotFound) @@ -1174,7 +1157,7 @@ namespace AssetProcessor AZStd::string relProductPath; GetRelativeProductPathFromFullSourceOrProductPath(path, relProductPath); QString tempPlatformName = GetDefaultAssetPlatform(); - + AZ::Data::AssetId assetId; { QMutexLocker locker(&m_registriesMutex); @@ -1343,7 +1326,7 @@ namespace AssetProcessor //remove aliases if present normalisedAssetPath = AssetUtilities::NormalizeAndRemoveAlias(normalisedAssetPath); - if (!normalisedAssetPath.isEmpty()) // this happens if it comes in as just for example "@assets@/" + if (!normalisedAssetPath.isEmpty()) // this happens if it comes in as just for example "@products@/" { AZStd::lock_guard lock(m_databaseMutex); @@ -1438,7 +1421,7 @@ namespace AssetProcessor relativePath = entry.m_sourceName; watchFolder = scanEntry.m_scanFolder; - + return true; } @@ -1488,7 +1471,7 @@ namespace AssetProcessor { return foundIter->second; } - + // we did not find it - try the backup mapping! AssetId legacyMapping = registryToUse.GetAssetIdByLegacyAssetId(assetId); if (legacyMapping.IsValid()) @@ -1532,7 +1515,7 @@ namespace AssetProcessor return !assetInfo.m_relativePath.empty(); } - + // Asset isn't in the DB or in the APM queue, we don't know what this asset ID is return false; } @@ -1587,7 +1570,7 @@ namespace AssetProcessor AZStd::string sourceFileFullPath; AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), sourceFileFullPath); assetInfo.m_sizeBytes = AZ::IO::SystemFile::Length(sourceFileFullPath.c_str()); - + assetInfo.m_assetType = AZ::Uuid::CreateNull(); // most source files don't have a type! // Go through the list of source assets and see if this asset's file path matches any of the filters diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h index 84e96bcf3e..e876e259fb 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h +++ b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h @@ -88,8 +88,6 @@ namespace AssetProcessor ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::AssetSystem::AssetSystemRequestBus::Handler overrides - const char* GetAbsoluteDevGameFolderPath() override; - const char* GetAbsoluteDevRootFolderPath() override; bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& relativeProductPath) override; //! Given a partial or full source file path, respond with its relative path and the watch folder it is relative to. @@ -215,8 +213,6 @@ namespace AssetProcessor AZStd::vector m_saveBuffer; // so that we don't realloc all the time - char m_absoluteDevFolderPath[AZ_MAX_PATH_LEN]; - char m_absoluteDevGameFolderPath[AZ_MAX_PATH_LEN]; QDir m_cacheRootDir; }; } diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetRequestHandler.cpp b/Code/Tools/AssetProcessor/native/AssetManager/AssetRequestHandler.cpp index 60873ae1af..c3530c768a 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/AssetRequestHandler.cpp +++ b/Code/Tools/AssetProcessor/native/AssetManager/AssetRequestHandler.cpp @@ -8,9 +8,10 @@ #include "AssetRequestHandler.h" +#include +#include #include #include -#include using namespace AssetProcessor; diff --git a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp index 3a7bc6ef3e..4cd4489a4c 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp +++ b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp @@ -56,15 +56,8 @@ namespace AssetProcessor // cache this up front. Note that it can fail here, and will retry later. InitializeCacheRoot(); - m_absoluteDevFolderPath[0] = 0; - m_absoluteDevGameFolderPath[0] = 0; - QDir assetRoot; - if (AssetUtilities::ComputeAssetRoot(assetRoot)) - { - azstrcpy(m_absoluteDevFolderPath, AZ_MAX_PATH_LEN, assetRoot.absolutePath().toUtf8().constData()); - azstrcpy(m_absoluteDevGameFolderPath, AZ_MAX_PATH_LEN, AssetUtilities::ComputeProjectPath().toUtf8().constData()); - } + AssetUtilities::ComputeAssetRoot(assetRoot); using namespace AZStd::placeholders; diff --git a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h index 376af5d773..891e091f91 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h +++ b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h @@ -440,8 +440,6 @@ namespace AssetProcessor AZStd::mutex m_sourceUUIDToSourceInfoMapMutex; QString m_normalizedCacheRootPath; - char m_absoluteDevFolderPath[AZ_MAX_PATH_LEN]; - char m_absoluteDevGameFolderPath[AZ_MAX_PATH_LEN]; QDir m_cacheRootDir; bool m_isCurrentlyScanning = false; bool m_quitRequested = false; diff --git a/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp b/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp index 30d8e5fada..c35f3a4b0f 100644 --- a/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp +++ b/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp @@ -95,7 +95,7 @@ void FileServer::ConnectionAdded(unsigned int connId, Connection* connection) Q_UNUSED(connection); // Connection has not completed negotiation yet, register to be notified - // when we know what platform is connected and map the @assets@ alias then + // when we know what platform is connected and map the @products@ alias then connect(connection, &Connection::AssetPlatformChanged, this, [this, connection]() { auto fileIO = m_fileIOs[connection->ConnectionId()]; @@ -114,8 +114,7 @@ void FileServer::ConnectionAdded(unsigned int connId, Connection* connection) projectCacheRoot = QDir(projectCacheRoot.absoluteFilePath(assetPlatform)); } const char* projectCachePath = projectCacheRoot.absolutePath().toUtf8().data(); - fileIO->SetAlias("@assets@", projectCachePath); - fileIO->SetAlias("@root@", projectCachePath); + fileIO->SetAlias("@products@", projectCachePath); if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { @@ -955,10 +954,10 @@ void FileServer::ProcessFileTreeRequest(unsigned int connId, unsigned int, unsig FileTreeResponse::FolderList folders; AZStd::vector untestedFolders; - if (fileIO->IsDirectory("@assets@")) + if (fileIO->IsDirectory("@products@")) { - folders.push_back("@assets@"); - untestedFolders.push_back("@assets@"); + folders.push_back("@products@"); + untestedFolders.push_back("@products@"); } if (fileIO->IsDirectory("@usercache@")) { @@ -975,11 +974,6 @@ void FileServer::ProcessFileTreeRequest(unsigned int connId, unsigned int, unsig folders.push_back("@log@"); untestedFolders.push_back("@log@"); } - if (fileIO->IsDirectory("@root@")) - { - folders.push_back("@root@"); - untestedFolders.push_back("@root@"); - } AZ::IO::Result res = ResultCode::Success; diff --git a/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp b/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp index e6d9894116..c65ab24aed 100644 --- a/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp +++ b/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include diff --git a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp index 4257457291..2a1c4e4755 100644 --- a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp +++ b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp @@ -766,7 +766,7 @@ namespace AssetProcessor TEST_F(AssetCatalogTest_GetFullSourcePath, AliasedCachePath_ReturnsAbsolutePathToSource) { //feed it a path with alias and asset id - QString fileToCheck = "@assets@/subfolder3/randomfileoutput.random1"; + QString fileToCheck = "@products@/subfolder3/randomfileoutput.random1"; EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random")); } @@ -787,7 +787,7 @@ namespace AssetProcessor TEST_F(AssetCatalogTest_GetFullSourcePath, InvalidSourcePathContainingCacheAlias_ReturnsAbsolutePathToSource) { //feed it a path with alias and input name - QString fileToCheck = "@assets@/somerandomfile.random"; + QString fileToCheck = "@products@/somerandomfile.random"; EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random")); } @@ -1063,10 +1063,10 @@ namespace AssetProcessor AZStd::thread_desc threadDesc; threadDesc.m_name = "AssetCatalog Thread"; - AZStd::thread catalogThread([this]() + AZStd::thread catalogThread(threadDesc, [this]() { m_data->m_assetCatalog->BuildRegistry(); - }, &threadDesc + } ); AssetNotificationMessage message("some/path/image.png", AssetNotificationMessage::NotificationType::AssetChanged, AZ::Data::AssetType::CreateRandom(), "pc"); diff --git a/Code/Tools/AssetProcessor/native/tests/assetBuilderSDK/SerializationDependenciesTests.cpp b/Code/Tools/AssetProcessor/native/tests/assetBuilderSDK/SerializationDependenciesTests.cpp index 86c363075d..71d11b19eb 100644 --- a/Code/Tools/AssetProcessor/native/tests/assetBuilderSDK/SerializationDependenciesTests.cpp +++ b/Code/Tools/AssetProcessor/native/tests/assetBuilderSDK/SerializationDependenciesTests.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include diff --git a/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp b/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp index 48a86dc5f6..da6e995c97 100644 --- a/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp +++ b/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp @@ -9,6 +9,7 @@ #include "AssetProcessorManagerTest.h" #include "native/AssetManager/PathDependencyManager.h" #include +#include #include #include @@ -4130,11 +4131,21 @@ struct LockedFileTest MOCK_METHOD2(SendResponse, size_t (unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage&)); MOCK_METHOD1(RemoveResponseHandler, void (unsigned)); - size_t Send(unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage&) override + size_t Send(unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage& message) override { - if(m_callback) + using SourceFileNotificationMessage = AzToolsFramework::AssetSystem::SourceFileNotificationMessage; + switch (message.GetMessageType()) { - m_callback(); + case SourceFileNotificationMessage::MessageType: + if (const auto sourceFileMessage = azrtti_cast(&message); + sourceFileMessage != nullptr && sourceFileMessage->m_type == SourceFileNotificationMessage::NotificationType::FileRemoved + && m_callback) + { + m_callback(); + } + break; + default: + break; } return 0; diff --git a/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp b/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp index 50a472c44d..c33fc59d97 100644 --- a/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp @@ -62,7 +62,10 @@ namespace AssetProcessor { searchStr = searchStr.mid(0, subidPos); } - AZ::Uuid filterAsUuid = AZ::Uuid::CreateStringPermissive(searchStr.toUtf8(), 0); + + // Cap the string to some reasonable length, we don't want to try parsing an entire book + size_t cappedStringLength = searchStr.length() > 60 ? 60 : searchStr.length(); + AZ::Uuid filterAsUuid = AZ::Uuid::CreateStringPermissive(searchStr.toUtf8(), cappedStringLength); return DescendantMatchesFilter(*assetTreeItem, filter, filterAsUuid); } diff --git a/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp b/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp index 4c2f168d4a..8d889343f9 100644 --- a/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp @@ -168,7 +168,9 @@ namespace AssetProcessor if (childItem) { - return createIndex(row, column, childItem); + QModelIndex index = createIndex(row, column, childItem); + Q_ASSERT(checkIndex(index)); + return index; } return QModelIndex(); } @@ -197,7 +199,9 @@ namespace AssetProcessor { return QModelIndex(); } - return createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); + return parentIndex; } bool AssetTreeModel::hasChildren(const QModelIndex &parent) const diff --git a/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp b/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp index 0574f00961..3f3a6b7a65 100644 --- a/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp @@ -92,6 +92,7 @@ namespace AssetProcessor } QModelIndex parentIndex = createIndex(parent->GetRow(), 0, parent); + Q_ASSERT(checkIndex(parentIndex)); beginRemoveRows(parentIndex, assetToRemove->GetRow(), assetToRemove->GetRow()); @@ -179,6 +180,8 @@ namespace AssetProcessor QModelIndex existingIndexStart = createIndex(existingEntry->second->GetRow(), 0, existingEntry->second); QModelIndex existingIndexEnd = createIndex(existingEntry->second->GetRow(), existingEntry->second->GetColumnCount() - 1, existingEntry->second); + Q_ASSERT(checkIndex(existingIndexStart)); + Q_ASSERT(checkIndex(existingIndexEnd)); dataChanged(existingIndexStart, existingIndexEnd); return; } @@ -205,7 +208,8 @@ namespace AssetProcessor { if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } nextParent = parentItem->CreateChild(ProductAssetTreeItemData::MakeShared(nullptr, currentFullFolderPath.Native(), currentPath.c_str(), true, AZ::Uuid::CreateNull())); @@ -231,7 +235,8 @@ namespace AssetProcessor if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } diff --git a/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp b/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp index 88fbe5a204..eaebc57ca4 100644 --- a/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace AssetProcessor { @@ -102,7 +103,8 @@ namespace AssetProcessor { if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } nextParent = parentItem->CreateChild(SourceAssetTreeItemData::MakeShared(nullptr, nullptr, currentFullFolderPath.Native(), currentPath.c_str(), true)); @@ -118,7 +120,8 @@ namespace AssetProcessor if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } @@ -173,7 +176,8 @@ namespace AssetProcessor return; } - QModelIndex parentIndex = createIndex(parent->GetRow(), 0, parent); + QModelIndex parentIndex = parent == m_root.get() ? QModelIndex() : createIndex(parent->GetRow(), 0, parent); + Q_ASSERT(checkIndex(parentIndex)); beginRemoveRows(parentIndex, assetToRemove->GetRow(), assetToRemove->GetRow()); diff --git a/Code/Tools/AssetProcessor/native/unittests/AssetProcessorServerUnitTests.h b/Code/Tools/AssetProcessor/native/unittests/AssetProcessorServerUnitTests.h index 209897fd6e..8358bc3d2e 100644 --- a/Code/Tools/AssetProcessor/native/unittests/AssetProcessorServerUnitTests.h +++ b/Code/Tools/AssetProcessor/native/unittests/AssetProcessorServerUnitTests.h @@ -11,6 +11,7 @@ #if !defined(Q_MOC_RUN) #include "UnitTestRunner.h" #include "native/utilities/IniConfiguration.h" +#include #include #endif diff --git a/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp b/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp index 5b15a6a552..a8bc714698 100644 --- a/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp +++ b/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp @@ -47,7 +47,7 @@ void RCcontrollerUnitTests::Reset() m_rcController.m_RCJobListModel.m_jobs.clear(); m_rcController.m_RCJobListModel.m_jobsInFlight.clear(); m_rcController.m_RCJobListModel.m_jobsInQueueLookup.clear(); - + m_rcController.m_pendingCriticalJobsPerPlatform.clear(); m_rcController.m_jobsCountPerPlatform.clear(); @@ -56,7 +56,7 @@ void RCcontrollerUnitTests::Reset() m_rcController.m_RCQueueSortModel.AttachToModel(&m_rcController.m_RCJobListModel); m_rcController.m_RCQueueSortModel.m_currentJobRunKeyToJobEntries.clear(); m_rcController.m_RCQueueSortModel.m_currentlyConnectedPlatforms.clear(); -} +} void RCcontrollerUnitTests::StartTest() { @@ -183,11 +183,11 @@ void RCcontrollerUnitTests::RunRCControllerTests() QStringList tempJobNames; // Note that while this is an OS-SPECIFIC path, this test does not actually invoke the file system - // or file operators, so is purely doing in-memory testing. So the path does not actually matter and the + // or file operators, so is purely doing in-memory testing. So the path does not actually matter and the // test should function on other operating systems too. // test - exact match - tempJobNames << "c:/somerandomfolder/dev/blah/test.dds"; + tempJobNames << "c:/somerandomfolder/dev/blah/test.dds"; tempJobNames << "c:/somerandomfolder/dev/blah/test.cre"; // must not match // test - NO MATCH @@ -218,7 +218,7 @@ void RCcontrollerUnitTests::RunRCControllerTests() QList createdJobs; - + for (QString name : tempJobNames) { @@ -270,7 +270,7 @@ void RCcontrollerUnitTests::RunRCControllerTests() // EXACT MATCH TEST (with prefixes and such) NetworkRequestID requestID(1, 1234); - m_rcController.OnRequestCompileGroup(requestID, "pc", "@assets@/blah/test.dds", AZ::Data::AssetId()); + m_rcController.OnRequestCompileGroup(requestID, "pc", "@products@/blah/test.dds", AZ::Data::AssetId()); QCoreApplication::processEvents(QEventLoop::AllEvents); // this should have matched exactly one item, and when we finish that item, it should terminate: @@ -626,9 +626,9 @@ void RCcontrollerUnitTests::RunRCControllerTests() jobdetailsB.m_jobEntry.m_watchFolderPath = scanFolderInfo.ScanPath(); jobdetailsB.m_jobEntry.m_jobKey = "TestJobB"; jobdetailsB.m_jobEntry.m_builderGuid = builderUuid; - + jobdetailsB.m_critical = true; //make jobB critical so that it will be analyzed first even though we want JobA to run first - + AssetBuilderSDK::SourceFileDependency sourceFileBDependency; sourceFileBDependency.m_sourceFileDependencyPath = "fileB.txt"; @@ -694,10 +694,10 @@ void RCcontrollerUnitTests::RunRCControllerTests() m_rcController.DispatchJobs(); UNIT_TEST_EXPECT_TRUE(UnitTestUtils::BlockUntil(allJobsCompleted, 5000)); - UNIT_TEST_EXPECT_TRUE(jobFinishedB); + UNIT_TEST_EXPECT_TRUE(jobFinishedB); - // Now test the use case where we have a cyclic dependency, - // although the order in which these job will start is not defined but we can ensure that + // Now test the use case where we have a cyclic dependency, + // although the order in which these job will start is not defined but we can ensure that // all the job finishes and RCController goes Idle allJobsCompleted = false; Reset(); @@ -728,8 +728,8 @@ void RCcontrollerUnitTests::RunRCControllerTests() jobdetailsD.m_jobEntry.m_builderGuid = builderUuid; AssetBuilderSDK::SourceFileDependency sourceFileDDependency; sourceFileDDependency.m_sourceFileDependencyPath = "fileD.txt"; - - //creating cyclic job order dependencies i.e JobC and JobD have order job dependency on each other + + //creating cyclic job order dependencies i.e JobC and JobD have order job dependency on each other AssetBuilderSDK::JobDependency jobDependencyC("TestJobC", "pc", AssetBuilderSDK::JobDependencyType::Order, sourceFileCDependency); AssetBuilderSDK::JobDependency jobDependencyD("TestJobD", "pc", AssetBuilderSDK::JobDependencyType::Order, sourceFileDDependency); jobdetailsC.m_jobDependencyList.push_back({ jobDependencyD }); diff --git a/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h b/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h index f77c706421..c281b3050a 100644 --- a/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h +++ b/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h @@ -262,11 +262,10 @@ namespace UnitTestUtils AZ::IO::FileIOBase::SetInstance(m_localFileIO); - m_localFileIO->SetAlias("@assets@", (newDir + QString("/ALIAS/assets")).toUtf8().constData()); + m_localFileIO->SetAlias("@products@", (newDir + QString("/ALIAS/assets")).toUtf8().constData()); m_localFileIO->SetAlias("@log@", (newDir + QString("/ALIAS/logs")).toUtf8().constData()); m_localFileIO->SetAlias("@usercache@", (newDir + QString("/ALIAS/cache")).toUtf8().constData()); m_localFileIO->SetAlias("@user@", (newDir + QString("/ALIAS/user")).toUtf8().constData()); - m_localFileIO->SetAlias("@root@", (newDir + QString("/ALIAS/root")).toUtf8().constData()); } ~ScopedDir() diff --git a/Code/Tools/AssetProcessor/native/utilities/AssetServerHandler.cpp b/Code/Tools/AssetProcessor/native/utilities/AssetServerHandler.cpp index 3d87c11488..3fa4b1cacd 100644 --- a/Code/Tools/AssetProcessor/native/utilities/AssetServerHandler.cpp +++ b/Code/Tools/AssetProcessor/native/utilities/AssetServerHandler.cpp @@ -74,8 +74,11 @@ namespace AssetProcessor AZ_TracePrintf(AssetProcessor::DebugChannel, "Extracting archive for job (%s, %s, %s) with fingerprint (%u).\n", builderParams.m_rcJob->GetJobEntry().m_pathRelativeToWatchFolder.toUtf8().data(), builderParams.m_rcJob->GetJobKey().toUtf8().data(), builderParams.m_rcJob->GetPlatformInfo().m_identifier.c_str(), builderParams.m_rcJob->GetOriginalFingerprint()); - bool success = false; - AzToolsFramework::ArchiveCommands::Bus::BroadcastResult(success, &AzToolsFramework::ArchiveCommands::ExtractArchiveBlocking, archiveAbsFilePath.toUtf8().data(), builderParams.GetTempJobDirectory(), false); + std::future extractResult; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult(extractResult, + &AzToolsFramework::ArchiveCommandsBus::Events::ExtractArchive, + archiveAbsFilePath.toUtf8().data(), builderParams.GetTempJobDirectory()); + bool success = extractResult.get(); AZ_Error(AssetProcessor::DebugChannel, success, "Extracting archive operation failed.\n"); return success; } @@ -106,12 +109,15 @@ namespace AssetProcessor return false; } - bool success = false; - AZ_TracePrintf(AssetProcessor::DebugChannel, "Creating archive for job (%s, %s, %s) with fingerprint (%u).\n", builderParams.m_rcJob->GetJobEntry().m_pathRelativeToWatchFolder.toUtf8().data(), builderParams.m_rcJob->GetJobKey().toUtf8().data(), builderParams.m_rcJob->GetPlatformInfo().m_identifier.c_str(), builderParams.m_rcJob->GetOriginalFingerprint()); - AzToolsFramework::ArchiveCommands::Bus::BroadcastResult(success, &AzToolsFramework::ArchiveCommands::CreateArchiveBlocking, archiveAbsFilePath.toUtf8().data(), builderParams.GetTempJobDirectory()); + + std::future createResult; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult(createResult, + &AzToolsFramework::ArchiveCommandsBus::Events::CreateArchive, + archiveAbsFilePath.toUtf8().data(), builderParams.GetTempJobDirectory()); + bool success = createResult.get(); AZ_Error(AssetProcessor::DebugChannel, success, "Creating archive operation failed. \n"); if (success && sourceFileList.size()) @@ -137,14 +143,16 @@ namespace AssetProcessor allSuccess = false; continue; } - bool success{ false }; - AzToolsFramework::ArchiveCommands::Bus::BroadcastResult(success, &AzToolsFramework::ArchiveCommands::AddFileToArchiveBlocking, archivePath.toUtf8().data(), sourceDir.path().toUtf8().data(), thisProduct.c_str()); + std::future addResult; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult(addResult, + &AzToolsFramework::ArchiveCommandsBus::Events::AddFileToArchive, + archivePath.toUtf8().data(), sourceDir.path().toUtf8().data(), thisProduct.c_str()); + bool success = addResult.get(); if (!success) { AZ_Warning(AssetProcessor::DebugChannel, false, "Failed to add %s to %s", thisProduct.c_str(), archivePath.toUtf8().data()); allSuccess = false; } - } return allSuccess; } diff --git a/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp b/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp index 6f974a0ff6..40d3bd3caa 100644 --- a/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp +++ b/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp @@ -104,17 +104,17 @@ ApplicationManager::BeforeRunStatus GUIApplicationManager::BeforeRun() // The build process may leave behind some temporaries, try to delete them RemoveTemporaries(); - QDir devRoot; - AssetUtilities::ComputeAssetRoot(devRoot); + QDir projectAssetRoot; + AssetUtilities::ComputeAssetRoot(projectAssetRoot); #if defined(EXTERNAL_CRASH_REPORTING) - CrashHandler::ToolsCrashHandler::InitCrashHandler("AssetProcessor", devRoot.absolutePath().toStdString()); + CrashHandler::ToolsCrashHandler::InitCrashHandler("AssetProcessor", projectAssetRoot.absolutePath().toStdString()); #endif AssetProcessor::MessageInfoBus::Handler::BusConnect(); // we have to monitor both the cache folder and the database file and restart AP if either of them gets deleted // It is important to note that we are monitoring the parent folder and not the actual cache folder itself since // we want to handle the use case on Mac OS if the user moves the cache folder to the trash. - m_qtFileWatcher.addPath(devRoot.absolutePath()); + m_qtFileWatcher.addPath(projectAssetRoot.absolutePath()); QDir projectCacheRoot; AssetUtilities::ComputeProjectCacheRoot(projectCacheRoot); @@ -615,7 +615,6 @@ void GUIApplicationManager::DirectoryChanged([[maybe_unused]] QString path) void GUIApplicationManager::FileChanged(QString path) { - QDir devRoot = ApplicationManager::GetSystemRoot(); QDir projectCacheRoot; AssetUtilities::ComputeProjectCacheRoot(projectCacheRoot); QString assetDbPath = projectCacheRoot.filePath("assetdb.sqlite"); diff --git a/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp b/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp index c0e907f2d5..cacd6c4cc9 100644 --- a/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp +++ b/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp @@ -164,7 +164,10 @@ namespace AssetUtilsInternal AZ::SettingsRegistryMergeUtils::DumperSettings apDumperSettings; apDumperSettings.m_prettifyOutput = true; + AZ_PUSH_DISABLE_WARNING(5233, "-Wunknown-warning-option") // Older versions of MSVC toolchain require to pass constexpr in the + // capture. Newer versions issue unused warning apDumperSettings.m_includeFilter = [&AssetProcessorUserSettingsRootKey](AZStd::string_view path) + AZ_POP_DISABLE_WARNING { // The AssetUtils only updates the following keys in the registry // Dump them all out to the setreg file diff --git a/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp b/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp index 527feac6b4..2cf7705e96 100644 --- a/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp +++ b/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp @@ -56,7 +56,7 @@ namespace CrashHandler if (fileIO) { // If our devroot alias is available, use that - const char* devAlias = fileIO->GetAlias("@devroot@"); + const char* devAlias = fileIO->GetAlias("@engroot@"); if (devAlias) { return devAlias; diff --git a/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp b/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp index 5ccfbf8eff..f69e0f54ab 100644 --- a/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp +++ b/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp @@ -11,5 +11,6 @@ namespace O3DE::ProjectManager { const QString ProjectBuildPathPostfix = ProjectBuildDirectoryName + "/linux"; + const QString GetPythonScriptPath = "python/get_python.sh"; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp b/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp index 56feb9f70a..0d66009d90 100644 --- a/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp +++ b/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace O3DE::ProjectManager { @@ -18,7 +19,10 @@ namespace O3DE::ProjectManager AZ::Outcome GetCommandLineProcessEnvironment() { - return AZ::Success(QProcessEnvironment(QProcessEnvironment::systemEnvironment())); + QProcessEnvironment currentEnvironment(QProcessEnvironment::systemEnvironment()); + currentEnvironment.insert("CC", "clang-12"); + currentEnvironment.insert("CXX", "clang++-12"); + return AZ::Success(currentEnvironment); } AZ::Outcome FindSupportedCompilerForPlatform() @@ -27,7 +31,7 @@ namespace O3DE::ProjectManager auto whichCMakeResult = ProjectUtils::ExecuteCommandResult("which", QStringList{ProjectCMakeCommand}, QProcessEnvironment::systemEnvironment()); if (!whichCMakeResult.IsSuccess()) { - return AZ::Failure(QObject::tr("CMake not found. \n\n" + return AZ::Failure(QObject::tr("CMake not found.

" "Make sure that the minimum version of CMake is installed and available from the command prompt. " "Refer to the O3DE requirements page for more information.")); } @@ -45,10 +49,50 @@ namespace O3DE::ProjectManager return AZ::Success(supportClangCommand); } } - return AZ::Failure(QObject::tr("Clang not found. \n\n" + return AZ::Failure(QObject::tr("Clang not found.

" "Make sure that the clang is installed and available from the command prompt. " "Refer to the O3DE requirements page for more information.")); } + + + AZ::Outcome OpenCMakeGUI(const QString& projectPath) + { + AZ::Outcome processEnvResult = GetCommandLineProcessEnvironment(); + if (!processEnvResult.IsSuccess()) + { + return AZ::Failure(processEnvResult.GetError()); + } + + QString projectBuildPath = QDir(projectPath).filePath(ProjectBuildPathPostfix); + AZ::Outcome projectBuildPathResult = GetProjectBuildPath(projectPath); + if (projectBuildPathResult.IsSuccess()) + { + projectBuildPath = projectBuildPathResult.GetValue(); + } + + QProcess process; + process.setProcessEnvironment(processEnvResult.GetValue()); + + // if the project build path is relative, it should be relative to the project path + process.setWorkingDirectory(projectPath); + + process.setProgram("cmake-gui"); + process.setArguments({ "-S", projectPath, "-B", projectBuildPath }); + if(!process.startDetached()) + { + return AZ::Failure(QObject::tr("Failed to start CMake GUI")); + } + + return AZ::Success(); + } + AZ::Outcome RunGetPythonScript(const QString& engineRoot) + { + return ExecuteCommandResultModalDialog( + QString("%1/python/get_python.sh").arg(engineRoot), + {}, + QProcessEnvironment::systemEnvironment(), + QObject::tr("Running get_python script...")); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp b/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp index 01a7f9e375..f7d3e28bf1 100644 --- a/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp +++ b/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp @@ -11,5 +11,6 @@ namespace O3DE::ProjectManager { const QString ProjectBuildPathPostfix = ProjectBuildDirectoryName + "/mac_xcode"; + const QString GetPythonScriptPath = "python/get_python.sh"; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp b/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp index 0d150abc3b..e36f6cd0c8 100644 --- a/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp +++ b/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp @@ -8,6 +8,8 @@ #include #include +#include +#include namespace O3DE::ProjectManager { @@ -61,5 +63,46 @@ namespace O3DE::ProjectManager return AZ::Success(xcodeBuilderVersionNumber); } + + AZ::Outcome OpenCMakeGUI(const QString& projectPath) + { + const QString cmakeHelp = QObject::tr("Please verify you've installed CMake.app from " + "cmake.org or, if using HomeBrew, " + "have installed it with
brew install --cask cmake
"); + QString cmakeAppPath = QStandardPaths::locate(QStandardPaths::ApplicationsLocation, "CMake.app", QStandardPaths::LocateDirectory); + if (cmakeAppPath.isEmpty()) + { + return AZ::Failure(QObject::tr("CMake.app not found.") + cmakeHelp); + } + + QString projectBuildPath = QDir(projectPath).filePath(ProjectBuildPathPostfix); + AZ::Outcome result = GetProjectBuildPath(projectPath); + if (result.IsSuccess()) + { + projectBuildPath = result.GetValue(); + } + + QProcess process; + + // if the project build path is relative, it should be relative to the project path + process.setWorkingDirectory(projectPath); + process.setProgram("open"); + process.setArguments({"-a", "CMake", "--args", "-S", projectPath, "-B", projectBuildPath}); + if(!process.startDetached()) + { + return AZ::Failure(QObject::tr("CMake.app failed to open.") + cmakeHelp); + } + + return AZ::Success(); + } + + AZ::Outcome RunGetPythonScript(const QString& engineRoot) + { + return ExecuteCommandResultModalDialog( + QString("%1/python/get_python.sh").arg(engineRoot), + {}, + QProcessEnvironment::systemEnvironment(), + QObject::tr("Running get_python script...")); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp b/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp index 6bd2194967..6b58458ccd 100644 --- a/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp +++ b/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp @@ -10,5 +10,6 @@ namespace O3DE::ProjectManager { const QString ProjectBuildPathPostfix = ProjectBuildDirectoryName + "/windows_vs2019"; + const QString GetPythonScriptPath = "python/get_python.bat"; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp b/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp index d012ca8921..831529d5e4 100644 --- a/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp +++ b/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp @@ -92,12 +92,52 @@ namespace O3DE::ProjectManager } } - return AZ::Failure(QObject::tr("Visual Studio 2019 version 16.9.2 or higher not found.\n\n" + return AZ::Failure(QObject::tr("Visual Studio 2019 version 16.9.2 or higher not found.

" "Visual Studio 2019 is required to build this project." " Install any edition of Visual Studio 2019" " or update to a newer version before proceeding to the next step." " While installing configure Visual Studio with these workloads.")); } + AZ::Outcome OpenCMakeGUI(const QString& projectPath) + { + AZ::Outcome processEnvResult = GetCommandLineProcessEnvironment(); + if (!processEnvResult.IsSuccess()) + { + return AZ::Failure(processEnvResult.GetError()); + } + + QString projectBuildPath = QDir(projectPath).filePath(ProjectBuildPathPostfix); + AZ::Outcome projectBuildPathResult = GetProjectBuildPath(projectPath); + if (projectBuildPathResult.IsSuccess()) + { + projectBuildPath = projectBuildPathResult.GetValue(); + } + + QProcess process; + process.setProcessEnvironment(processEnvResult.GetValue()); + + // if the project build path is relative, it should be relative to the project path + process.setWorkingDirectory(projectPath); + + process.setProgram("cmake-gui"); + process.setArguments({ "-S", projectPath, "-B", projectBuildPath }); + if(!process.startDetached()) + { + return AZ::Failure(QObject::tr("Failed to start CMake GUI")); + } + + return AZ::Success(); + } + + AZ::Outcome RunGetPythonScript(const QString& engineRoot) + { + const QString batPath = QString("%1/python/get_python.bat").arg(engineRoot); + return ExecuteCommandResultModalDialog( + "cmd.exe", + QStringList{"/c", batPath}, + QProcessEnvironment::systemEnvironment(), + QObject::tr("Running get_python script...")); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Resources/ProjectManager.qss b/Code/Tools/ProjectManager/Resources/ProjectManager.qss index 957b2b4fa6..f91a597481 100644 --- a/Code/Tools/ProjectManager/Resources/ProjectManager.qss +++ b/Code/Tools/ProjectManager/Resources/ProjectManager.qss @@ -438,6 +438,11 @@ QTabBar::tab:focus { max-height:26px; } +#projectActionButton, #openEditorButton { + min-height:26px; + max-height:26px; +} + #labelButtonOverlay { background-color: rgba(50,50,50,200); min-width:210px; @@ -568,17 +573,20 @@ QProgressBar::chunk { font-size: 12px; } +#gemRepoNoReposLabel { + font-size: 16px; +} + #gemRepoHeaderRefreshButton { background-color: transparent; qproperty-flat: true; qproperty-iconSize: 14px; } -#gemRepoHeaderAddButton { +#gemRepoAddButton { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #888888, stop: 1.0 #555555); qproperty-flat: true; - margin-right:30px; min-width:120px; max-width:120px; min-height:24px; @@ -588,11 +596,11 @@ QProgressBar::chunk { font-size:12px; font-weight:600; } -#gemRepoHeaderAddButton:hover { +#gemRepoAddButton:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #999999, stop: 1.0 #666666); } -#gemRepoHeaderAddButton:pressed { +#gemRepoAddButton:pressed { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #555555, stop: 1.0 #777777); } @@ -610,6 +618,14 @@ QProgressBar::chunk { background: #444444; } +#gemRepoAddDialogInstructionTitleLabel { + font-size:14px; +} + +#addGemRepoDialog #formFrame { + margin-left:0px; +} + /************** Gem Repo Inspector **************/ #gemRepoInspectorNameLabel { diff --git a/Code/Tools/ProjectManager/Resources/Warning.svg b/Code/Tools/ProjectManager/Resources/Warning.svg index 28f7bc5f42..a330c9163c 100644 --- a/Code/Tools/ProjectManager/Resources/Warning.svg +++ b/Code/Tools/ProjectManager/Resources/Warning.svg @@ -1,5 +1,4 @@ - diff --git a/Code/Tools/ProjectManager/Source/Application.cpp b/Code/Tools/ProjectManager/Source/Application.cpp index 9ca107dae5..a7e4805ce9 100644 --- a/Code/Tools/ProjectManager/Source/Application.cpp +++ b/Code/Tools/ProjectManager/Source/Application.cpp @@ -68,17 +68,46 @@ namespace O3DE::ProjectManager } m_pythonBindings = AZStd::make_unique(GetEngineRoot()); - if (!m_pythonBindings || !m_pythonBindings->PythonStarted()) + AZ_Assert(m_pythonBindings, "Failed to create PythonBindings"); + if (!m_pythonBindings->PythonStarted()) { - if (interactive) + if (!interactive) { - QMessageBox::critical(nullptr, QObject::tr("Failed to start Python"), - QObject::tr("This tool requires an O3DE engine with a Python runtime, " - "but either Python is missing or mis-configured. Please rename " - "your python/runtime folder to python/runtime_bak, then run " - "python/get_python.bat to restore the Python runtime folder.")); + return false; + } + + int result = QMessageBox::warning(nullptr, QObject::tr("Failed to start Python"), + QObject::tr("This tool requires an O3DE engine with a Python runtime, " + "but either Python is missing or mis-configured.

Press 'OK' to " + "run the %1 script automatically, or 'Cancel' " + " if you want to manually resolve the issue by renaming your " + " python/runtime folder and running %1 yourself.") + .arg(GetPythonScriptPath), + QMessageBox::Cancel, QMessageBox::Ok); + if (result == QMessageBox::Ok) + { + auto getPythonResult = ProjectUtils::RunGetPythonScript(GetEngineRoot()); + if (!getPythonResult.IsSuccess()) + { + QMessageBox::critical( + nullptr, QObject::tr("Failed to run %1 script").arg(GetPythonScriptPath), + QObject::tr("The %1 script failed, was canceled, or could not be run. " + "Please rename your python/runtime folder and then run " + "
%1
").arg(GetPythonScriptPath)); + } + else if (!m_pythonBindings->StartPython()) + { + QMessageBox::critical( + nullptr, QObject::tr("Failed to start Python"), + QObject::tr("Failed to start Python after running %1") + .arg(GetPythonScriptPath)); + } + } + + if (!m_pythonBindings->PythonStarted()) + { + return false; } - return false; } const AZ::CommandLine* commandLine = GetCommandLine(); diff --git a/Code/Tools/ProjectManager/Source/GemRepo/GemRepoAddDialog.cpp b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoAddDialog.cpp new file mode 100644 index 0000000000..1839948e80 --- /dev/null +++ b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoAddDialog.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include +#include + +namespace O3DE::ProjectManager +{ + GemRepoAddDialog::GemRepoAddDialog(QWidget* parent) + : QDialog(parent) + { + setWindowTitle(tr("Add a User Repository")); + setModal(true); + setObjectName("addGemRepoDialog"); + + QVBoxLayout* vLayout = new QVBoxLayout(); + vLayout->setContentsMargins(30, 30, 25, 10); + vLayout->setSpacing(0); + setLayout(vLayout); + + QLabel* instructionTitleLabel = new QLabel(tr("Enter a valid path to add a new user repository")); + instructionTitleLabel->setObjectName("gemRepoAddDialogInstructionTitleLabel"); + instructionTitleLabel->setAlignment(Qt::AlignLeft); + vLayout->addWidget(instructionTitleLabel); + + vLayout->addSpacing(10); + + QLabel* instructionContextLabel = new QLabel(tr("The path can be a Repository URL or a Local Path in your directory.")); + instructionContextLabel->setAlignment(Qt::AlignLeft); + vLayout->addWidget(instructionContextLabel); + + m_repoPath = new FormLineEditWidget(tr("Repository Path"), "", this); + m_repoPath->setFixedWidth(600); + vLayout->addWidget(m_repoPath); + + vLayout->addSpacing(40); + + QDialogButtonBox* dialogButtons = new QDialogButtonBox(); + dialogButtons->setObjectName("footer"); + vLayout->addWidget(dialogButtons); + + QPushButton* cancelButton = dialogButtons->addButton(tr("Cancel"), QDialogButtonBox::RejectRole); + cancelButton->setProperty("secondary", true); + QPushButton* applyButton = dialogButtons->addButton(tr("Add"), QDialogButtonBox::ApplyRole); + + connect(cancelButton, &QPushButton::clicked, this, &QDialog::reject); + connect(applyButton, &QPushButton::clicked, this, &QDialog::accept); + } + + QString GemRepoAddDialog::GetRepoPath() + { + return m_repoPath->lineEdit()->text(); + } +} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemRepo/GemRepoAddDialog.h b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoAddDialog.h new file mode 100644 index 0000000000..4ca469098e --- /dev/null +++ b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoAddDialog.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if !defined(Q_MOC_RUN) +#include +#endif + +namespace O3DE::ProjectManager +{ + QT_FORWARD_DECLARE_CLASS(FormLineEditWidget) + + class GemRepoAddDialog + : public QDialog + { + public: + explicit GemRepoAddDialog(QWidget* parent = nullptr); + ~GemRepoAddDialog() = default; + + QString GetRepoPath(); + + private: + FormLineEditWidget* m_repoPath = nullptr; + }; +} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.cpp b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.cpp index c0b17904f8..9c432884e6 100644 --- a/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.cpp +++ b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -21,6 +22,8 @@ #include #include #include +#include +#include namespace O3DE::ProjectManager { @@ -34,11 +37,135 @@ namespace O3DE::ProjectManager vLayout->setSpacing(0); setLayout(vLayout); + m_contentStack = new QStackedWidget(this); + + m_noRepoContent = CreateNoReposContent(); + m_contentStack->addWidget(m_noRepoContent); + + m_repoContent = CreateReposContent(); + m_contentStack->addWidget(m_repoContent); + + vLayout->addWidget(m_contentStack); + + Reinit(); + } + + void GemRepoScreen::Reinit() + { + m_gemRepoModel->clear(); + FillModel(); + + // If model contains any data show the repos + if (m_gemRepoModel->rowCount()) + { + m_contentStack->setCurrentWidget(m_repoContent); + } + else + { + m_contentStack->setCurrentWidget(m_noRepoContent); + } + + // Select the first entry after everything got correctly sized + QTimer::singleShot(200, [=]{ + QModelIndex firstModelIndex = m_gemRepoListView->model()->index(0,0); + m_gemRepoListView->selectionModel()->select(firstModelIndex, QItemSelectionModel::ClearAndSelect); + }); + } + + void GemRepoScreen::HandleAddRepoButton() + { + GemRepoAddDialog* repoAddDialog = new GemRepoAddDialog(this); + + if (repoAddDialog->exec() == QDialog::DialogCode::Accepted) + { + QString repoUrl = repoAddDialog->GetRepoPath(); + if (repoUrl.isEmpty()) + { + return; + } + + AZ::Outcome addGemRepoResult = PythonBindingsInterface::Get()->AddGemRepo(repoUrl); + if (addGemRepoResult.IsSuccess()) + { + Reinit(); + } + else + { + QMessageBox::critical(this, tr("Operation failed"), + QString("Failed to add gem repo: %1.
Error:
%2").arg(repoUrl, addGemRepoResult.GetError().c_str())); + } + } + } + + void GemRepoScreen::FillModel() + { + AZ::Outcome, AZStd::string> allGemRepoInfosResult = PythonBindingsInterface::Get()->GetAllGemRepoInfos(); + if (allGemRepoInfosResult.IsSuccess()) + { + // Add all available repos to the model + const QVector allGemRepoInfos = allGemRepoInfosResult.GetValue(); + for (const GemRepoInfo& gemRepoInfo : allGemRepoInfos) + { + m_gemRepoModel->AddGemRepo(gemRepoInfo); + } + } + else + { + QMessageBox::critical(this, tr("Operation failed"), QString("Cannot retrieve gem repos for engine.
Error:
%2").arg(allGemRepoInfosResult.GetError().c_str())); + } + } + + QFrame* GemRepoScreen::CreateNoReposContent() + { + QFrame* contentFrame = new QFrame(this); + + QVBoxLayout* vLayout = new QVBoxLayout(); + vLayout->setAlignment(Qt::AlignHCenter); + vLayout->setMargin(0); + vLayout->setSpacing(0); + contentFrame->setLayout(vLayout); + + vLayout->addStretch(); + + QLabel* noRepoLabel = new QLabel(tr("No repositories have been added yet."), this); + noRepoLabel->setObjectName("gemRepoNoReposLabel"); + vLayout->addWidget(noRepoLabel); + vLayout->setAlignment(noRepoLabel, Qt::AlignHCenter); + + vLayout->addSpacing(20); + + // Size hint for button is wrong so horizontal layout with stretch is used to center it QHBoxLayout* hLayout = new QHBoxLayout(); hLayout->setMargin(0); hLayout->setSpacing(0); + + hLayout->addStretch(); + + QPushButton* addRepoButton = new QPushButton(tr("Add Repository"), this); + addRepoButton->setObjectName("gemRepoAddButton"); + addRepoButton->setMinimumWidth(120); + hLayout->addWidget(addRepoButton); + + connect(addRepoButton, &QPushButton::clicked, this, &GemRepoScreen::HandleAddRepoButton); + + hLayout->addStretch(); + vLayout->addLayout(hLayout); + vLayout->addStretch(); + + return contentFrame; + } + + QFrame* GemRepoScreen::CreateReposContent() + { + QFrame* contentFrame = new QFrame(this); + + QHBoxLayout* hLayout = new QHBoxLayout(); + hLayout->setMargin(0); + hLayout->setSpacing(0); + contentFrame->setLayout(hLayout); + hLayout->addSpacing(60); QVBoxLayout* middleVLayout = new QVBoxLayout(); @@ -63,9 +190,13 @@ namespace O3DE::ProjectManager topMiddleHLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum)); - m_AddRepoButton = new QPushButton(tr("Add Repository"), this); - m_AddRepoButton->setObjectName("gemRepoHeaderAddButton"); - topMiddleHLayout->addWidget(m_AddRepoButton); + QPushButton* addRepoButton = new QPushButton(tr("Add Repository"), this); + addRepoButton->setObjectName("gemRepoAddButton"); + topMiddleHLayout->addWidget(addRepoButton); + + connect(addRepoButton, &QPushButton::clicked, this, &GemRepoScreen::HandleAddRepoButton); + + topMiddleHLayout->addSpacing(30); middleVLayout->addLayout(topMiddleHLayout); @@ -105,37 +236,7 @@ namespace O3DE::ProjectManager m_gemRepoInspector->setFixedWidth(240); hLayout->addWidget(m_gemRepoInspector); - Reinit(); - } - - void GemRepoScreen::Reinit() - { - m_gemRepoModel->clear(); - FillModel(); - - // Select the first entry after everything got correctly sized - QTimer::singleShot(200, [=]{ - QModelIndex firstModelIndex = m_gemRepoListView->model()->index(0,0); - m_gemRepoListView->selectionModel()->select(firstModelIndex, QItemSelectionModel::ClearAndSelect); - }); - } - - void GemRepoScreen::FillModel() - { - AZ::Outcome, AZStd::string> allGemRepoInfosResult = PythonBindingsInterface::Get()->GetAllGemRepoInfos(); - if (allGemRepoInfosResult.IsSuccess()) - { - // Add all available repos to the model - const QVector allGemRepoInfos = allGemRepoInfosResult.GetValue(); - for (const GemRepoInfo& gemRepoInfo : allGemRepoInfos) - { - m_gemRepoModel->AddGemRepo(gemRepoInfo); - } - } - else - { - QMessageBox::critical(this, tr("Operation failed"), tr("Cannot retrieve gem repos for engine.\n\nError:\n%2").arg(allGemRepoInfosResult.GetError().c_str())); - } + return contentFrame; } ProjectManagerScreen GemRepoScreen::GetScreenEnum() diff --git a/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.h b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.h index f7d943fc2a..284118b978 100644 --- a/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.h +++ b/Code/Tools/ProjectManager/Source/GemRepo/GemRepoScreen.h @@ -16,6 +16,8 @@ QT_FORWARD_DECLARE_CLASS(QLabel) QT_FORWARD_DECLARE_CLASS(QPushButton) QT_FORWARD_DECLARE_CLASS(QHeaderView) QT_FORWARD_DECLARE_CLASS(QTableWidget) +QT_FORWARD_DECLARE_CLASS(QFrame) +QT_FORWARD_DECLARE_CLASS(QStackedWidget) namespace O3DE::ProjectManager { @@ -35,8 +37,17 @@ namespace O3DE::ProjectManager GemRepoModel* GetGemRepoModel() const { return m_gemRepoModel; } + public slots: + void HandleAddRepoButton(); + private: void FillModel(); + QFrame* CreateNoReposContent(); + QFrame* CreateReposContent(); + + QStackedWidget* m_contentStack = nullptr; + QFrame* m_noRepoContent; + QFrame* m_repoContent; QTableWidget* m_gemRepoHeaderTable = nullptr; QHeaderView* m_gemRepoListHeader = nullptr; @@ -46,6 +57,5 @@ namespace O3DE::ProjectManager QLabel* m_lastAllUpdateLabel; QPushButton* m_AllUpdateButton; - QPushButton* m_AddRepoButton; }; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp index 0f51524341..c425c344e1 100644 --- a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp @@ -88,6 +88,7 @@ namespace O3DE::ProjectManager QHBoxLayout* horizontalButtonLayout = new QHBoxLayout(); horizontalButtonLayout->addSpacing(34); m_actionButton = new QPushButton(tr("Project Action"), this); + m_actionButton->setObjectName("projectActionButton"); m_actionButton->setVisible(false); horizontalButtonLayout->addWidget(m_actionButton); horizontalButtonLayout->addSpacing(34); @@ -198,6 +199,7 @@ namespace O3DE::ProjectManager QMenu* menu = new QMenu(this); menu->addAction(tr("Edit Project Settings..."), this, [this]() { emit EditProject(m_projectInfo.m_path); }); menu->addAction(tr("Build"), this, [this]() { emit BuildProject(m_projectInfo); }); + menu->addAction(tr("Open CMake GUI..."), this, [this]() { emit OpenCMakeGUI(m_projectInfo); }); menu->addSeparator(); menu->addAction(tr("Open Project folder..."), this, [this]() { @@ -259,15 +261,39 @@ namespace O3DE::ProjectManager } projectActionButton->setText(text); + projectActionButton->setMenu(nullptr); m_actionButtonConnection = connect(projectActionButton, &QPushButton::clicked, lambda); } - void ProjectButton::SetProjectBuildButtonAction() + void ProjectButton::ShowDefaultBuildButton() { - m_projectImageLabel->GetWarningLabel()->setText(tr("Building project required.")); - m_projectImageLabel->GetWarningIcon()->setVisible(true); - m_projectImageLabel->GetWarningLabel()->setVisible(true); - SetProjectButtonAction(tr("Build Project"), [this]() { emit BuildProject(m_projectInfo); }); + QPushButton* projectActionButton = m_projectImageLabel->GetActionButton(); + projectActionButton->setVisible(true); + projectActionButton->setText(tr("Build Project")); + disconnect(m_actionButtonConnection); + + QMenu* menu = new QMenu(this); + QAction* autoBuildAction = menu->addAction(tr("Build Now")); + connect( autoBuildAction, &QAction::triggered, this, [this](){ emit BuildProject(m_projectInfo); }); + + QAction* openCMakeAction = menu->addAction(tr("Open CMake GUI...")); + connect( openCMakeAction, &QAction::triggered, this, [this](){ emit OpenCMakeGUI(m_projectInfo); }); + + projectActionButton->setMenu(menu); + } + + void ProjectButton::ShowBuildRequired() + { + ShowWarning(true, tr("Building project required")); + ShowDefaultBuildButton(); + } + + void ProjectButton::ShowWarning(bool show, const QString& warning) + { + m_projectImageLabel->GetWarningLabel()->setTextInteractionFlags(Qt::LinksAccessibleByMouse); + m_projectImageLabel->GetWarningLabel()->setText(warning); + m_projectImageLabel->GetWarningLabel()->setVisible(show); + m_projectImageLabel->GetWarningIcon()->setVisible(show); } void ProjectButton::SetBuildLogsLink(const QUrl& logUrl) @@ -279,18 +305,15 @@ namespace O3DE::ProjectManager { if (!logUrl.isEmpty()) { - m_projectImageLabel->GetWarningLabel()->setText(tr("Failed to build. Click to view logs.")); + ShowWarning(show, tr("Failed to build. Click to view logs.")); } else { - m_projectImageLabel->GetWarningLabel()->setText(tr("Project failed to build.")); + ShowWarning(show, tr("Project failed to build.")); } - m_projectImageLabel->GetWarningLabel()->setTextInteractionFlags(Qt::LinksAccessibleByMouse); - m_projectImageLabel->GetWarningIcon()->setVisible(show); - m_projectImageLabel->GetWarningLabel()->setVisible(show); - m_projectImageLabel->SetLogUrl(logUrl); - SetProjectButtonAction(tr("Build Project"), [this]() { emit BuildProject(m_projectInfo); }); + SetBuildLogsLink(logUrl); + ShowDefaultBuildButton(); } void ProjectButton::SetProjectBuilding() diff --git a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h index 9f64b74eab..5e81dfc2d9 100644 --- a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h +++ b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h @@ -82,9 +82,9 @@ namespace O3DE::ProjectManager void RestoreDefaultState(); void SetProjectButtonAction(const QString& text, AZStd::function lambda); - void SetProjectBuildButtonAction(); void SetBuildLogsLink(const QUrl& logUrl); void ShowBuildFailed(bool show, const QUrl& logUrl); + void ShowBuildRequired(); void SetProjectBuilding(); void SetLaunchButtonEnabled(bool enabled); @@ -99,10 +99,13 @@ namespace O3DE::ProjectManager void RemoveProject(const QString& projectName); void DeleteProject(const QString& projectName); void BuildProject(const ProjectInfo& projectInfo); + void OpenCMakeGUI(const ProjectInfo& projectInfo); private: void enterEvent(QEvent* event) override; void leaveEvent(QEvent* event) override; + void ShowWarning(bool show, const QString& warning); + void ShowDefaultBuildButton(); ProjectInfo m_projectInfo; diff --git a/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h b/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h index 264515652f..81320e3732 100644 --- a/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h +++ b/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h @@ -18,6 +18,7 @@ namespace O3DE::ProjectManager static const QString ProjectBuildDirectoryName = "build"; extern const QString ProjectBuildPathPostfix; + extern const QString GetPythonScriptPath; static const QString ProjectBuildPathCmakeFiles = "CMakeFiles"; static const QString ProjectBuildErrorLogName = "CMakeProjectBuildError.log"; static const QString ProjectCacheDirectoryName = "Cache"; diff --git a/Code/Tools/ProjectManager/Source/ProjectUtils.cpp b/Code/Tools/ProjectManager/Source/ProjectUtils.cpp index 81eb70391d..bb2bcd070e 100644 --- a/Code/Tools/ProjectManager/Source/ProjectUtils.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectUtils.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include @@ -21,6 +23,11 @@ #include #include #include +#include +#include +#include +#include +#include #include @@ -510,6 +517,97 @@ namespace O3DE::ProjectManager return ProjectManagerScreen::Invalid; } + AZ::Outcome ExecuteCommandResultModalDialog( + const QString& cmd, + const QStringList& arguments, + const QProcessEnvironment& processEnv, + const QString& title) + { + QString resultOutput; + QProcess execProcess; + execProcess.setProcessEnvironment(processEnv); + execProcess.setProcessChannelMode(QProcess::MergedChannels); + + QProgressDialog dialog(title, QObject::tr("Cancel"), /*minimum=*/0, /*maximum=*/0); + dialog.setMinimumWidth(500); + dialog.setAutoClose(false); + + QProgressBar* bar = new QProgressBar(&dialog); + bar->setTextVisible(false); + bar->setMaximum(0); // infinite + dialog.setBar(bar); + + QLabel* progressLabel = new QLabel(&dialog); + QVBoxLayout* layout = new QVBoxLayout(); + + // pre-fill the field with the title and command + const QString commandOutput = QString("%1
%2 %3
").arg(title).arg(cmd).arg(arguments.join(' ')); + + // replace the label with a scrollable text edit + QTextEdit* detailTextEdit = new QTextEdit(commandOutput, &dialog); + detailTextEdit->setReadOnly(true); + layout->addWidget(detailTextEdit); + layout->setMargin(0); + progressLabel->setLayout(layout); + progressLabel->setMinimumHeight(150); + dialog.setLabel(progressLabel); + + auto readConnection = QObject::connect(&execProcess, &QProcess::readyReadStandardOutput, + [&]() + { + QScrollBar* scrollBar = detailTextEdit->verticalScrollBar(); + bool autoScroll = scrollBar->value() == scrollBar->maximum(); + + QString output = execProcess.readAllStandardOutput(); + detailTextEdit->append(output); + resultOutput.append(output); + + if (autoScroll) + { + scrollBar->setValue(scrollBar->maximum()); + } + }); + + auto exitConnection = QObject::connect(&execProcess, + QOverload::of(&QProcess::finished), + [&](int exitCode, [[maybe_unused]] QProcess::ExitStatus exitStatus) + { + QScrollBar* scrollBar = detailTextEdit->verticalScrollBar(); + dialog.setMaximum(100); + dialog.setValue(dialog.maximum()); + if (exitCode == 0 && scrollBar->value() == scrollBar->maximum()) + { + dialog.close(); + } + else + { + // keep the dialog open so the user can look at the output + dialog.setCancelButtonText(QObject::tr("Continue")); + } + }); + + execProcess.start(cmd, arguments); + + dialog.exec(); + + QObject::disconnect(readConnection); + QObject::disconnect(exitConnection); + + if (execProcess.state() == QProcess::Running) + { + execProcess.kill(); + return AZ::Failure(QObject::tr("Process for command '%1' was canceled").arg(cmd)); + } + + int resultCode = execProcess.exitCode(); + if (resultCode != 0) + { + return AZ::Failure(QObject::tr("Process for command '%1' failed (result code %2").arg(cmd).arg(resultCode)); + } + + return AZ::Success(resultOutput); + } + AZ::Outcome ExecuteCommandResult( const QString& cmd, const QStringList& arguments, @@ -537,5 +635,33 @@ namespace O3DE::ProjectManager QString resultOutput = execProcess.readAllStandardOutput(); return AZ::Success(resultOutput); } + + AZ::Outcome GetProjectBuildPath(const QString& projectPath) + { + auto registry = AZ::SettingsRegistry::Get(); + + // the project_build_path should be in the user settings registry inside the project folder + AZ::IO::FixedMaxPath projectUserPath(projectPath.toUtf8().constData()); + projectUserPath /= AZ::SettingsRegistryInterface::DevUserRegistryFolder; + if (!QDir(projectUserPath.c_str()).exists()) + { + return AZ::Failure(QObject::tr("Failed to find the user registry folder %1").arg(projectUserPath.c_str())); + } + + AZ::SettingsRegistryInterface::Specializations specializations; + if(!registry->MergeSettingsFolder(projectUserPath.Native(), specializations, AZ_TRAIT_OS_PLATFORM_CODENAME)) + { + return AZ::Failure(QObject::tr("Failed to merge registry settings in user registry folder %1").arg(projectUserPath.c_str())); + } + + AZ::IO::FixedMaxPath projectBuildPath; + if (!registry->Get(projectBuildPath.Native(), AZ::SettingsRegistryMergeUtils::ProjectBuildPath)) + { + return AZ::Failure(QObject::tr("No project build path setting was found in the user registry folder %1").arg(projectUserPath.c_str())); + } + + return AZ::Success(QString(projectBuildPath.c_str())); + } + } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/ProjectUtils.h b/Code/Tools/ProjectManager/Source/ProjectUtils.h index 0866b57923..1fdf76913e 100644 --- a/Code/Tools/ProjectManager/Source/ProjectUtils.h +++ b/Code/Tools/ProjectManager/Source/ProjectUtils.h @@ -35,13 +35,39 @@ namespace O3DE::ProjectManager ProjectManagerScreen GetProjectManagerScreen(const QString& screen); + /** + * Execute a console command and return the result. + * @param cmd the command + * @param arguments the command argument list + * @param processEnv the environment + * @param commandTimeoutSeconds the amount of time in seconds to let the command run before terminating it + * @return AZ::Outcome with the command result on success + */ AZ::Outcome ExecuteCommandResult( const QString& cmd, const QStringList& arguments, const QProcessEnvironment& processEnv, int commandTimeoutSeconds = ProjectCommandLineTimeoutSeconds); + /** + * Execute a console command, display the progress in a modal dialog and return the result. + * @param cmd the command + * @param arguments the command argument list + * @param processEnv the environment + * @param commandTimeoutSeconds the amount of time in seconds to let the command run before terminating it + * @return AZ::Outcome with the command result on success + */ + AZ::Outcome ExecuteCommandResultModalDialog( + const QString& cmd, + const QStringList& arguments, + const QProcessEnvironment& processEnv, + const QString& title); + AZ::Outcome GetCommandLineProcessEnvironment(); + AZ::Outcome GetProjectBuildPath(const QString& projectPath); + AZ::Outcome OpenCMakeGUI(const QString& projectPath); + AZ::Outcome RunGetPythonScript(const QString& enginePath); + } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp b/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp index 81d4047db5..cf42da88fa 100644 --- a/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp @@ -185,6 +185,15 @@ namespace O3DE::ProjectManager connect(projectButton, &ProjectButton::RemoveProject, this, &ProjectsScreen::HandleRemoveProject); connect(projectButton, &ProjectButton::DeleteProject, this, &ProjectsScreen::HandleDeleteProject); connect(projectButton, &ProjectButton::BuildProject, this, &ProjectsScreen::QueueBuildProject); + connect(projectButton, &ProjectButton::OpenCMakeGUI, this, + [this](const ProjectInfo& projectInfo) + { + AZ::Outcome result = ProjectUtils::OpenCMakeGUI(projectInfo.m_path); + if (!result) + { + QMessageBox::critical(this, tr("Failed to open CMake GUI"), result.GetError(), QMessageBox::Ok); + } + }); return projectButton; } @@ -308,7 +317,7 @@ namespace O3DE::ProjectManager } else { - projectIter.value()->SetProjectBuildButtonAction(); + projectIter.value()->ShowBuildRequired(); } } } @@ -358,8 +367,9 @@ namespace O3DE::ProjectManager painter.drawPixmap(backgroundRect, m_background); // Draw a semi-transparent overlay to darken down the colors. - painter.setCompositionMode (QPainter::CompositionMode_DestinationIn); - const float overlayTransparency = 0.7f; + // Use SourceOver, DestinationIn will make background transparent on Mac + painter.setCompositionMode (QPainter::CompositionMode_SourceOver); + const float overlayTransparency = 0.3f; painter.fillRect(backgroundRect, QColor(0, 0, 0, static_cast(255.0f * overlayTransparency))); } diff --git a/Code/Tools/ProjectManager/Source/PythonBindings.cpp b/Code/Tools/ProjectManager/Source/PythonBindings.cpp index 284ed9dcec..768e44ce15 100644 --- a/Code/Tools/ProjectManager/Source/PythonBindings.cpp +++ b/Code/Tools/ProjectManager/Source/PythonBindings.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -245,9 +246,11 @@ namespace O3DE::ProjectManager if (Py_IsInitialized()) { AZ_Warning("python", false, "Python is already active"); - return false; + return m_pythonStarted; } + m_pythonStarted = false; + // set PYTHON_HOME AZStd::string pyBasePath = Platform::GetPythonHomePath(PY_PACKAGE, m_enginePath.c_str()); if (!AZ::IO::SystemFile::Exists(pyBasePath.c_str())) @@ -303,7 +306,8 @@ namespace O3DE::ProjectManager // make sure the engine is registered RegisterThisEngine(); - return !PyErr_Occurred(); + m_pythonStarted = !PyErr_Occurred(); + return m_pythonStarted; } catch ([[maybe_unused]] const std::exception& e) { @@ -921,6 +925,13 @@ namespace O3DE::ProjectManager } } + AZ::Outcome PythonBindings::AddGemRepo(const QString& repoUri) + { + // o3de scripts need method added + (void)repoUri; + return AZ::Failure("Adding Gem Repo not implemented yet in o3de scripts."); + } + GemRepoInfo PythonBindings::GemRepoInfoFromPath(pybind11::handle path, pybind11::handle pyEnginePath) { /* Placeholder Logic */ diff --git a/Code/Tools/ProjectManager/Source/PythonBindings.h b/Code/Tools/ProjectManager/Source/PythonBindings.h index 3b766c3797..5542fe146e 100644 --- a/Code/Tools/ProjectManager/Source/PythonBindings.h +++ b/Code/Tools/ProjectManager/Source/PythonBindings.h @@ -31,6 +31,7 @@ namespace O3DE::ProjectManager // PythonBindings overrides bool PythonStarted() override; + bool StartPython() override; // Engine AZ::Outcome GetEngineInfo() override; @@ -57,6 +58,7 @@ namespace O3DE::ProjectManager AZ::Outcome> GetProjectTemplates(const QString& projectPath = {}) override; // Gem Repos + AZ::Outcome AddGemRepo(const QString& repoUri) override; AZ::Outcome, AZStd::string> GetAllGemRepoInfos() override; private: @@ -69,7 +71,6 @@ namespace O3DE::ProjectManager ProjectInfo ProjectInfoFromPath(pybind11::handle path); ProjectTemplateInfo ProjectTemplateInfoFromPath(pybind11::handle path, pybind11::handle pyProjectPath); bool RegisterThisEngine(); - bool StartPython(); bool StopPython(); diff --git a/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h b/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h index ccf217d25b..589dfb604a 100644 --- a/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h +++ b/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h @@ -38,6 +38,14 @@ namespace O3DE::ProjectManager */ virtual bool PythonStarted() = 0; + /** + * Attempt to start Python. Normally, Python is started when the bindings are created, + * but this method allows you to attempt to retry starting Python in case the configuration + * has changed. + * @return true if Python was started successfully, false on failure + */ + virtual bool StartPython() = 0; + // Engine /** @@ -160,6 +168,13 @@ namespace O3DE::ProjectManager // Gem Repos + /** + * A gem repo to engine. Registers this gem repo with the current engine. + * @param repoUri the absolute filesystem path or url to the gem repo manifest file. + * @return An outcome with the success flag as well as an error message in case of a failure. + */ + virtual AZ::Outcome AddGemRepo(const QString& repoUri) = 0; + /** * Get all available gem repo infos. Gathers all repos registered with the engine. * @return A list of gem repo infos. diff --git a/Code/Tools/ProjectManager/project_manager_files.cmake b/Code/Tools/ProjectManager/project_manager_files.cmake index f71ae290e7..544fa2537b 100644 --- a/Code/Tools/ProjectManager/project_manager_files.cmake +++ b/Code/Tools/ProjectManager/project_manager_files.cmake @@ -104,6 +104,8 @@ set(FILES Source/GemCatalog/GemSortFilterProxyModel.cpp Source/GemRepo/GemRepoScreen.h Source/GemRepo/GemRepoScreen.cpp + Source/GemRepo/GemRepoAddDialog.h + Source/GemRepo/GemRepoAddDialog.cpp Source/GemRepo/GemRepoInfo.h Source/GemRepo/GemRepoInfo.cpp Source/GemRepo/GemRepoInspector.h diff --git a/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp b/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp index 91ca77fa7b..c7d85428b4 100644 --- a/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp +++ b/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp @@ -87,7 +87,7 @@ namespace PythonBindingsExample TEST_F(PythonBindingsExampleTest, Application_ImportAzLmbrPaths_Works) { ApplicationParameters params; - params.m_pythonStatement = "import azlmbr.paths; print (azlmbr.paths.engroot); print (azlmbr.paths.devroot)"; + params.m_pythonStatement = "import azlmbr.paths; print (azlmbr.paths.engroot)"; EXPECT_TRUE(s_application->RunWithParameters(params)); } diff --git a/Code/Tools/RemoteConsole/Core/RemoteConsoleCore.cpp b/Code/Tools/RemoteConsole/Core/RemoteConsoleCore.cpp index 0a8d9d8eb7..f0c1d765e5 100644 --- a/Code/Tools/RemoteConsole/Core/RemoteConsoleCore.cpp +++ b/Code/Tools/RemoteConsole/Core/RemoteConsoleCore.cpp @@ -99,7 +99,7 @@ void SRemoteThreadedObject::Start(const char* name) desc.m_name = name; auto function = AZStd::bind(&SRemoteThreadedObject::ThreadFunction, this); - m_thread = AZStd::thread(function, &desc); + m_thread = AZStd::thread(desc, function); } void SRemoteThreadedObject::WaitForThread() diff --git a/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpBlendShapeImporter.cpp b/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpBlendShapeImporter.cpp index 8e447f9d79..2dd7fff8e2 100644 --- a/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpBlendShapeImporter.cpp +++ b/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpBlendShapeImporter.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp index ab260eba4d..1efec493c1 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp @@ -194,8 +194,8 @@ namespace AZ if (baseClass) { m_behaviorClass = behaviorClass; + return true; } - return true; } return false; } diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.h b/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.h index 5b6178a63d..ded12e4051 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.h +++ b/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.h @@ -12,6 +12,10 @@ namespace AZ { + struct BehaviorParameter; + struct BehaviorValueParameter; + class BehaviorClass; + namespace Python { class PythonBehaviorInfo; diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp index b6c7eef90f..31b74405d2 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp @@ -47,6 +47,16 @@ namespace AZ return m_sourceGuid; } + void Scene::SetWatchFolder(const AZStd::string& watchFolder) + { + m_watchFolder = watchFolder; + } + + const AZStd::string& Scene::GetWatchFolder() const + { + return m_watchFolder; + } + void Scene::SetManifestFilename(const AZStd::string& name) { m_manifestFilename = name; @@ -111,6 +121,7 @@ namespace AZ ->Property("sourceGuid", BehaviorValueGetter(&Scene::m_sourceGuid), nullptr) ->Property("graph", BehaviorValueGetter(&Scene::m_graph), nullptr) ->Property("manifest", BehaviorValueGetter(&Scene::m_manifest), nullptr) + ->Property("watchFolder", BehaviorValueGetter(&Scene::m_watchFolder), nullptr) ->Constant("SceneOrientation_YUp", BehaviorConstant(SceneOrientation::YUp)) ->Constant("SceneOrientation_ZUp", BehaviorConstant(SceneOrientation::ZUp)) ->Constant("SceneOrientation_XUp", BehaviorConstant(SceneOrientation::XUp)) diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h index 49320c4592..0185c23178 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h +++ b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h @@ -34,6 +34,9 @@ namespace AZ const AZStd::string& GetSourceFilename() const; const Uuid& GetSourceGuid() const; + void SetWatchFolder(const AZStd::string& watchFolder); + const AZStd::string& GetWatchFolder() const; + void SetManifestFilename(const AZStd::string& name); void SetManifestFilename(AZStd::string&& name); const AZStd::string& GetManifestFilename() const; @@ -59,6 +62,7 @@ namespace AZ AZStd::string m_name; AZStd::string m_manifestFilename; AZStd::string m_sourceFilename; + AZStd::string m_watchFolder; Uuid m_sourceGuid; SceneGraph m_graph; SceneManifest m_manifest; diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp index cae0dc45d5..3d00dccec3 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp @@ -97,7 +97,7 @@ namespace AZ GraphObjectProxy* proxy = aznew GraphObjectProxy(graphObject); return proxy; } - return nullptr; + return aznew GraphObjectProxy(nullptr); }); } } diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp index d68b6c52d4..8e3f06b4cb 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -35,8 +36,7 @@ namespace AZ { namespace Containers { - //! Protects from allocating too much memory. The choice of a 5MB threshold is arbitrary. - const size_t MaxSceneManifestFileSizeInBytes = 5 * 1024 * 1024; + const char ErrorWindowName[] = "SceneManifest"; diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h index 4386d4fd8c..f3838096ad 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h +++ b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h @@ -41,6 +41,8 @@ namespace AZ AZ_RTTI(SceneManifest, "{9274AD17-3212-4651-9F3B-7DCCB080E467}"); + static constexpr size_t MaxSceneManifestFileSizeInBytes = AZStd::numeric_limits::max(); + virtual ~SceneManifest(); static AZStd::shared_ptr SceneManifestConstDataConverter( diff --git a/Code/Tools/SceneAPI/SceneCore/DllMain.cpp b/Code/Tools/SceneAPI/SceneCore/DllMain.cpp index 408b516f84..ad875f5538 100644 --- a/Code/Tools/SceneAPI/SceneCore/DllMain.cpp +++ b/Code/Tools/SceneAPI/SceneCore/DllMain.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include diff --git a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp index a182e4f02d..c98fa63916 100644 --- a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -73,6 +74,10 @@ namespace AZ { } + void AssetImportRequest::GetGeneratedManifestExtension(AZStd::string& /*result*/) + { + } + void AssetImportRequest::GetSupportedFileExtensions(AZStd::unordered_set& /*extensions*/) { } @@ -103,14 +108,34 @@ namespace AZ AZ_UNUSED(value); } + void AssetImportRequest::GetManifestDependencyPaths(AZStd::vector&) + { + } + AZStd::shared_ptr AssetImportRequest::LoadSceneFromVerifiedPath(const AZStd::string& assetFilePath, const Uuid& sourceGuid, - RequestingApplication requester, const Uuid& loadingComponentUuid) + RequestingApplication requester, const Uuid& loadingComponentUuid) { AZStd::string sceneName; AzFramework::StringFunc::Path::GetFileName(assetFilePath.c_str(), sceneName); AZStd::shared_ptr scene = AZStd::make_shared(AZStd::move(sceneName)); AZ_Assert(scene, "Unable to create new scene for asset importing."); + Data::AssetInfo assetInfo; + AZStd::string watchFolder; + bool result = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourceUUID, sourceGuid, assetInfo, watchFolder); + + if (result) + { + scene->SetWatchFolder(watchFolder); + } + else + { + AZ_Error( + "AssetImportRequest", false, "Failed to get watch folder for source %s", + sourceGuid.ToString().c_str()); + } + // Unique pointer, will deactivate and clean up once going out of scope. SceneCore::EntityConstructor::EntityPointer loaders = SceneCore::EntityConstructor::BuildEntity("Scene Loading", loadingComponentUuid); diff --git a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h index 8b6e119f99..a2446c5ff8 100644 --- a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h +++ b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h @@ -78,6 +78,8 @@ namespace AZ virtual void GetSupportedFileExtensions(AZStd::unordered_set& extensions); //! Gets the file extension for the manifest. virtual void GetManifestExtension(AZStd::string& result); + //! Gets the file extension for the generated manifest. + virtual void GetGeneratedManifestExtension(AZStd::string& result); //! Before asset loading starts this is called to allow for any required initialization. virtual ProcessingResult PrepareForAssetLoading(Containers::Scene& scene, RequestingApplication requester); @@ -97,6 +99,23 @@ namespace AZ // Get scene processing project setting: UseCustomNormal virtual void AreCustomNormalsUsed(bool & value); + /*! + Optional method for reporting source file dependencies that may exist in the scene manifest + Paths is a vector of JSON Path strings, relative to the IRule object + For example, the following path: /scriptFilename + Would match with this manifest: + + { + "values": [ + { + "$type": "Test", + "scriptFilename": "file.py" + } + ] + } + */ + virtual void GetManifestDependencyPaths(AZStd::vector& paths); + //! Utility function to load an asset and manifest from file by using the EBus functions above. //! @param assetFilePath The absolute path to the source file (not the manifest). //! @param sourceGuid The guid assigned to the source file (not the manifest). diff --git a/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp b/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp index aaa76e5977..aa88dee90f 100644 --- a/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp @@ -14,8 +14,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -170,11 +172,14 @@ namespace AZ { using AzToolsFramework::AssetSystemRequestBus; - const char* path = nullptr; - AssetSystemRequestBus::BroadcastResult(path, &AssetSystemRequestBus::Events::GetAbsoluteDevGameFolderPath); - if (path) + AZ::IO::Path projectPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - return path; + settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); + } + if (!projectPath.empty()) + { + return projectPath.Native(); } else { diff --git a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp index 39045da5b9..f7d3f073b9 100644 --- a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp @@ -56,8 +56,14 @@ namespace AZ result = s_extension; } + void ManifestImportRequestHandler::GetGeneratedManifestExtension(AZStd::string& result) + { + result = s_extension; + result.append(s_generated); + } + Events::LoadingResult ManifestImportRequestHandler::LoadAsset(Containers::Scene& scene, const AZStd::string& path, - const Uuid& /*guid*/, RequestingApplication /*requester*/) + const Uuid& /*guid*/, RequestingApplication /*requester*/) { AZStd::string manifestPath = path + s_extension; diff --git a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h index 7659f6908f..00c802cb6b 100644 --- a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h +++ b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h @@ -31,6 +31,7 @@ namespace AZ static void Reflect(ReflectContext* context); void GetManifestExtension(AZStd::string& result) override; + void GetGeneratedManifestExtension(AZStd::string& result) override; Events::LoadingResult LoadAsset(Containers::Scene& scene, const AZStd::string& path, const Uuid& guid, RequestingApplication requester) override; diff --git a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp index 8924f10115..8d413b6038 100644 --- a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp +++ b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -18,6 +19,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -98,6 +102,7 @@ namespace AZ::SceneAPI::Behaviors { AZStd::string result; CallResult(result, FN_OnUpdateManifest, scene); + ScriptBuildingNotificationBusHandler::BusDisconnect(); return result; } @@ -109,6 +114,7 @@ namespace AZ::SceneAPI::Behaviors { ExportProductList result; CallResult(result, FN_OnPrepareForExport, scene, outputDirectory, platformIdentifier, productList); + ScriptBuildingNotificationBusHandler::BusDisconnect(); return result; } @@ -167,21 +173,9 @@ namespace AZ::SceneAPI::Behaviors UnloadPython(); } - bool ScriptProcessorRuleBehavior::LoadPython(const AZ::SceneAPI::Containers::Scene& scene) + bool ScriptProcessorRuleBehavior::LoadPython(const AZ::SceneAPI::Containers::Scene& scene, AZStd::string& scriptPath) { - if (m_editorPythonEventsInterface && !m_scriptFilename.empty()) - { - return true; - } - - // get project folder - auto settingsRegistry = AZ::SettingsRegistry::Get(); - AZ::IO::FixedMaxPath projectPath; - if (!settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath)) - { - return false; - } - + int scriptDiscoveryAttempts = 0; const AZ::SceneAPI::Containers::SceneManifest& manifest = scene.GetManifest(); auto view = Containers::MakeDerivedFilterView(manifest.GetValueStorage()); for (const auto& scriptItem : view) @@ -193,9 +187,21 @@ namespace AZ::SceneAPI::Behaviors continue; } + ++scriptDiscoveryAttempts; + // check for file exist via absolute path if (!IO::FileIOBase::GetInstance()->Exists(scriptFilename.c_str())) { + // get project folder + auto settingsRegistry = AZ::SettingsRegistry::Get(); + AZ::IO::FixedMaxPath projectPath; + if (!settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath)) + { + AZ_Error("scene", false, "With (%s) could not find Project Path during script discovery.", + scene.GetManifestFilename().c_str()); + return false; + } + // check for script in the project folder AZ::IO::FixedMaxPath projectScriptPath = projectPath / scriptFilename; if (!IO::FileIOBase::GetInstance()->Exists(projectScriptPath.c_str())) @@ -208,32 +214,47 @@ namespace AZ::SceneAPI::Behaviors scriptFilename = AZStd::move(projectScriptPath); } - // lazy load the Python interface - auto editorPythonEventsInterface = AZ::Interface::Get(); - if (editorPythonEventsInterface->IsPythonActive() == false) - { - const bool silenceWarnings = false; - if (editorPythonEventsInterface->StartPython(silenceWarnings) == false) - { - editorPythonEventsInterface = nullptr; - } - } + scriptPath = scriptFilename.c_str(); + break; + } - // both Python and the script need to be ready - if (editorPythonEventsInterface == nullptr || scriptFilename.empty()) - { - AZ_Warning("scene", false,"The scene manifest (%s) attempted to use script(%s) but Python is not enabled;" - "please add the EditorPythonBinding gem & PythonAssetBuilder gem to your project.", - scene.GetManifestFilename().c_str(), scriptFilename.c_str()); + if (scriptPath.empty()) + { + AZ_Warning("scene", scriptDiscoveryAttempts == 0, + "The scene manifest (%s) attempted to use script rule, but no script file path could be found.", + scene.GetManifestFilename().c_str()); + return false; + } + + // already prepared the Python VM? + if (m_editorPythonEventsInterface) + { + return true; + } - return false; + // lazy load the Python interface + auto editorPythonEventsInterface = AZ::Interface::Get(); + if (editorPythonEventsInterface->IsPythonActive() == false) + { + const bool silenceWarnings = false; + if (editorPythonEventsInterface->StartPython(silenceWarnings) == false) + { + editorPythonEventsInterface = nullptr; } + } - m_editorPythonEventsInterface = editorPythonEventsInterface; - m_scriptFilename = scriptFilename.c_str(); - return true; + // both Python and the script need to be ready + if (editorPythonEventsInterface == nullptr) + { + AZ_Warning("scene", false, + "The scene manifest (%s) attempted to prepare Python but Python can not start", + scene.GetManifestFilename().c_str()); + + return false; } - return false; + + m_editorPythonEventsInterface = editorPythonEventsInterface; + return true; } void ScriptProcessorRuleBehavior::UnloadPython() @@ -250,11 +271,13 @@ namespace AZ::SceneAPI::Behaviors { using namespace AzToolsFramework; - auto executeCallback = [this, &context]() + AZStd::string scriptPath; + + auto executeCallback = [&context, &scriptPath]() { // set up script's hook callback EditorPythonRunnerRequestBus::Broadcast(&EditorPythonRunnerRequestBus::Events::ExecuteByFilename, - m_scriptFilename.c_str()); + scriptPath.c_str()); // call script's callback to allow extra products ExportProductList extraProducts; @@ -278,7 +301,7 @@ namespace AZ::SceneAPI::Behaviors } }; - if (LoadPython(context.GetScene())) + if (LoadPython(context.GetScene(), scriptPath)) { EditorPythonConsoleNotificationHandler logger; m_editorPythonEventsInterface->ExecuteWithLock(executeCallback); @@ -305,23 +328,19 @@ namespace AZ::SceneAPI::Behaviors { using namespace AzToolsFramework; - // This behavior persists on the same AssetBuilder. Clear the script file name so that if - // this builder processes a scene file with a script file name, and then later processes - // a scene without a script file name, it won't run the old script on the new scene. - m_scriptFilename.clear(); - if (action != ManifestAction::Update) { return Events::ProcessingResult::Ignored; } - if (LoadPython(scene)) + AZStd::string scriptPath; + if (LoadPython(scene, scriptPath)) { AZStd::string manifestUpdate; - auto executeCallback = [this, &scene, &manifestUpdate]() + auto executeCallback = [&scene, &manifestUpdate, &scriptPath]() { EditorPythonRunnerRequestBus::Broadcast(&EditorPythonRunnerRequestBus::Events::ExecuteByFilename, - m_scriptFilename.c_str()); + scriptPath.c_str()); ScriptBuildingNotificationBus::BroadcastResult(manifestUpdate, &ScriptBuildingNotificationBus::Events::OnUpdateManifest, scene); @@ -330,6 +349,9 @@ namespace AZ::SceneAPI::Behaviors EditorPythonConsoleNotificationHandler logger; m_editorPythonEventsInterface->ExecuteWithLock(executeCallback); + EntityUtilityBus::Broadcast(&EntityUtilityBus::Events::ResetEntityContext); + AZ::Interface::Get()->RemoveAllTemplates(); + // attempt to load the manifest string back to a JSON-scene-manifest auto sceneManifestLoader = AZStd::make_unique(); auto loadOutcome = sceneManifestLoader->LoadFromString(manifestUpdate); @@ -346,4 +368,8 @@ namespace AZ::SceneAPI::Behaviors return Events::ProcessingResult::Ignored; } + void ScriptProcessorRuleBehavior::GetManifestDependencyPaths(AZStd::vector& paths) + { + paths.emplace_back("/scriptFilename"); + } } // namespace AZ diff --git a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h index fa70a12b0d..a9ddf88df9 100644 --- a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h +++ b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h @@ -37,6 +37,7 @@ namespace AZ::SceneAPI::Behaviors , public Events::AssetImportRequestBus::Handler { public: + AZ_COMPONENT(ScriptProcessorRuleBehavior, "{24054E73-1B92-43B0-AC13-174B2F0E3F66}", SceneCore::BehaviorComponent); ~ScriptProcessorRuleBehavior() override = default; @@ -44,22 +45,21 @@ namespace AZ::SceneAPI::Behaviors SCENE_DATA_API void Activate() override; SCENE_DATA_API void Deactivate() override; static void Reflect(ReflectContext* context); - + // AssetImportRequestBus::Handler SCENE_DATA_API Events::ProcessingResult UpdateManifest( Containers::Scene& scene, ManifestAction action, RequestingApplication requester) override; - + SCENE_DATA_API void GetManifestDependencyPaths(AZStd::vector& paths) override; protected: - bool LoadPython(const AZ::SceneAPI::Containers::Scene& scene); + bool LoadPython(const AZ::SceneAPI::Containers::Scene& scene, AZStd::string& scriptPath); void UnloadPython(); bool DoPrepareForExport(Events::PreExportEventContext& context); private: AzToolsFramework::EditorPythonEventsInterface* m_editorPythonEventsInterface = nullptr; - AZStd::string m_scriptFilename; struct ExportEventHandler; AZStd::shared_ptr m_exportEventHandler; diff --git a/Code/Tools/SceneAPI/SceneData/GraphData/BlendShapeData.cpp b/Code/Tools/SceneAPI/SceneData/GraphData/BlendShapeData.cpp index fa81ea2826..066129f974 100644 --- a/Code/Tools/SceneAPI/SceneData/GraphData/BlendShapeData.cpp +++ b/Code/Tools/SceneAPI/SceneData/GraphData/BlendShapeData.cpp @@ -10,6 +10,7 @@ #include #include #include +#include namespace AZ { diff --git a/Code/Tools/SceneAPI/SceneData/GraphData/MaterialData.cpp b/Code/Tools/SceneAPI/SceneData/GraphData/MaterialData.cpp index 117a1196f8..b6b87fecc7 100644 --- a/Code/Tools/SceneAPI/SceneData/GraphData/MaterialData.cpp +++ b/Code/Tools/SceneAPI/SceneData/GraphData/MaterialData.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Code/Tools/SerializeContextTools/SliceConverter.cpp b/Code/Tools/SerializeContextTools/SliceConverter.cpp index df4f394cc5..6cfe072f80 100644 --- a/Code/Tools/SerializeContextTools/SliceConverter.cpp +++ b/Code/Tools/SerializeContextTools/SliceConverter.cpp @@ -38,7 +38,7 @@ // SliceConverter reads in a slice file (saved in an ObjectStream format), instantiates it, creates a prefab out of the data, // and saves the prefab in a JSON format. This can be used for one-time migrations of slices or slice-based levels to prefabs. -// +// // If the slice contains legacy data, it will print out warnings / errors about the data that couldn't be serialized. // The prefab will be generated without that data. @@ -56,7 +56,7 @@ namespace AZ AZ_Error("SerializeContextTools", false, "Command line not available."); return false; } - + JsonSerializerSettings convertSettings; convertSettings.m_keepDefaults = commandLine->HasSwitch("keepdefaults"); convertSettings.m_registrationContext = application.GetJsonRegistrationContext(); @@ -82,7 +82,7 @@ namespace AZ // Load the asset catalog so that we can find any nested assets successfully. We also need to tick the tick bus // so that the OnCatalogLoaded event gets processed now, instead of during application shutdown. AZ::Data::AssetCatalogRequestBus::Broadcast( - &AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@assets@/assetcatalog.xml"); + &AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@products@/assetcatalog.xml"); application.Tick(); AZStd::string logggingScratchBuffer; @@ -558,7 +558,7 @@ namespace AZ AZStd::string instanceAlias = GetInstanceAlias(instance); // Create a new unmodified prefab Instance for the nested slice instance. - auto nestedInstance = AZStd::make_unique(); + auto nestedInstance = AZStd::make_unique(AZStd::move(instanceAlias)); AzToolsFramework::Prefab::Instance::EntityList newEntities; if (!AzToolsFramework::Prefab::PrefabDomUtils::LoadInstanceFromPrefabDom( *nestedInstance, newEntities, nestedTemplate->get().GetPrefabDom())) @@ -742,7 +742,7 @@ namespace AZ instanceToTemplateInterface->GenerateDomForInstance(topLevelInstanceDomBefore, *topLevelInstance); // Use the deterministic instance alias for this new instance - AzToolsFramework::Prefab::Instance& addedInstance = topLevelInstance->AddInstance(AZStd::move(nestedInstance), instanceAlias); + AzToolsFramework::Prefab::Instance& addedInstance = topLevelInstance->AddInstance(AZStd::move(nestedInstance)); AzToolsFramework::Prefab::PrefabDom topLevelInstanceDomAfter; instanceToTemplateInterface->GenerateDomForInstance(topLevelInstanceDomAfter, *topLevelInstance); @@ -870,7 +870,7 @@ namespace AZ // Wait for the disconnect to finish. bool disconnected = false; - AzFramework::AssetSystemRequestBus::BroadcastResult(disconnected, + AzFramework::AssetSystemRequestBus::BroadcastResult(disconnected, &AzFramework::AssetSystem::AssetSystemRequests::WaitUntilAssetProcessorDisconnected, AZStd::chrono::seconds(30)); AZ_Error("Convert-Slice", disconnected, "Asset Processor failed to disconnect successfully."); diff --git a/Code/Tools/Standalone/CMakeLists.txt b/Code/Tools/Standalone/CMakeLists.txt index 78047dd6cf..12bdb8f453 100644 --- a/Code/Tools/Standalone/CMakeLists.txt +++ b/Code/Tools/Standalone/CMakeLists.txt @@ -38,3 +38,5 @@ ly_add_target( PRIVATE STANDALONETOOLS_ENABLE_LUA_IDE ) + +ly_add_dependencies(Editor LuaIDE) diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.h b/Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.h index 6ddc462e94..cf27245682 100644 --- a/Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.h +++ b/Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.h @@ -8,6 +8,7 @@ #include #include +#include #include #include #include diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp index b7a44d43ea..f39cfaaf10 100644 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp +++ b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp @@ -64,9 +64,11 @@ namespace TestImpact return !name.starts_with("DISABLED_") && name.find("/DISABLED_") == AZStd::string::npos; }; + AZ_PUSH_DISABLE_WARNING(5233, "-Wunknown-warning-option") // Older versions of MSVC toolchain require to pass constexpr + // in the capture. Newer versions issue unused warning const auto getDuration = [Keys](const AZ::rapidxml::xml_node<>* node) + AZ_POP_DISABLE_WARNING { - AZ_UNUSED(Keys); const AZStd::string duration = node->first_attribute(Keys[DurationKey])->value(); return AZStd::chrono::milliseconds(static_cast(AZStd::stof(duration) * 1000.f)); }; @@ -79,9 +81,11 @@ namespace TestImpact for (auto testcase_node = testsuite_node->first_node(Keys[TestCaseKey]); testcase_node; testcase_node = testcase_node->next_sibling()) { + AZ_PUSH_DISABLE_WARNING(5233, "-Wunknown-warning-option") // Older versions of MSVC toolchain require to pass constexpr in the capture. + // Newer versions issue unused warning const auto getStatus = [Keys](const AZ::rapidxml::xml_node<>* node) + AZ_POP_DISABLE_WARNING { - AZ_UNUSED(Keys); const AZStd::string status = node->first_attribute(Keys[StatusKey])->value(); if (status == Keys[RunKey]) { diff --git a/Gems/AWSClientAuth/Code/Include/Private/AWSClientAuthBus.h b/Gems/AWSClientAuth/Code/Include/Private/AWSClientAuthBus.h index 4e625a563c..63d5bb2a83 100644 --- a/Gems/AWSClientAuth/Code/Include/Private/AWSClientAuthBus.h +++ b/Gems/AWSClientAuth/Code/Include/Private/AWSClientAuthBus.h @@ -9,6 +9,8 @@ #include +#include + namespace Aws { namespace CognitoIdentityProvider diff --git a/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp b/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp index 198f29ebf7..dbde19aad6 100644 --- a/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp +++ b/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp @@ -33,7 +33,7 @@ namespace AWSClientAuth AZ::SerializeContext* serialize = azrtti_cast(context); if (serialize) { - serialize->Class()->Version(0); + serialize->Class()->Version(1); if (AZ::EditContext* ec = serialize->GetEditContext()) { @@ -55,26 +55,44 @@ namespace AWSClientAuth ->Enum<(int)ProviderNameEnum::AWSCognitoIDP>("ProviderNameEnum_AWSCognitoIDP") ->Enum<(int)ProviderNameEnum::LoginWithAmazon>("ProviderNameEnum_LoginWithAmazon") ->Enum<(int)ProviderNameEnum::Google>("ProviderNameEnum_Google"); - behaviorContext->EBus("AuthenticationProviderRequestBus") ->Attribute(AZ::Script::Attributes::Category, SerializeComponentName) ->Event("Initialize", &AuthenticationProviderScriptCanvasRequestBus::Events::Initialize) - ->Event("IsSignedIn", &AuthenticationProviderScriptCanvasRequestBus::Events::IsSignedIn) - ->Event("GetAuthenticationTokens", &AuthenticationProviderScriptCanvasRequestBus::Events::GetAuthenticationTokens) + ->Event("IsSignedIn", &AuthenticationProviderScriptCanvasRequestBus::Events::IsSignedIn, + { { { "Provider name", "The identity provider name" } } }) + ->Event("GetAuthenticationTokens", &AuthenticationProviderScriptCanvasRequestBus::Events::GetAuthenticationTokens, + { { { "Provider name", "The identity provider name" } } }) ->Event( "PasswordGrantSingleFactorSignInAsync", - &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantSingleFactorSignInAsync) + &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantSingleFactorSignInAsync, + { { { "Provider name", "The identity provider" }, { "Username", "The client's username" }, { "Password", "The client's password" } } }) ->Event( "PasswordGrantMultiFactorSignInAsync", - &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorSignInAsync) + &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorSignInAsync, + { { { "Provider name", "The identity provider name" }, + { "Username", "The client's username" }, + { "Password", "The client's password" } } }) ->Event( "PasswordGrantMultiFactorConfirmSignInAsync", - &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorConfirmSignInAsync) - ->Event("DeviceCodeGrantSignInAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantSignInAsync) - ->Event("DeviceCodeGrantConfirmSignInAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantConfirmSignInAsync) - ->Event("RefreshTokensAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::RefreshTokensAsync) - ->Event("GetTokensWithRefreshAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::GetTokensWithRefreshAsync) - ->Event("SignOut", &AuthenticationProviderScriptCanvasRequestBus::Events::SignOut); + &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorConfirmSignInAsync, + { { { "Provider name", "The identity provider name" }, + { "Username", "The client's username" }, + { "Confirmation code", "The client's confirmation code" } } }) + ->Event( + "DeviceCodeGrantSignInAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantSignInAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event( + "DeviceCodeGrantConfirmSignInAsync", + &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantConfirmSignInAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event( + "RefreshTokensAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::RefreshTokensAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event("GetTokensWithRefreshAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::GetTokensWithRefreshAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event( + "SignOut", &AuthenticationProviderScriptCanvasRequestBus::Events::SignOut, + { { { "Provider name", "The identity provider name" } } }); behaviorContext->EBus("AWSCognitoAuthorizationRequestBus") ->Attribute(AZ::Script::Attributes::Category, SerializeComponentName) diff --git a/Gems/AWSCore/Code/CMakeLists.txt b/Gems/AWSCore/Code/CMakeLists.txt index 808436b7fd..7559f4720b 100644 --- a/Gems/AWSCore/Code/CMakeLists.txt +++ b/Gems/AWSCore/Code/CMakeLists.txt @@ -6,18 +6,18 @@ # # -ly_get_list_relative_pal_filename(pal_editor_include_dir ${CMAKE_CURRENT_LIST_DIR}/Include/Private/Editor/Platform/${PAL_PLATFORM_NAME}) -ly_get_list_relative_pal_filename(pal_cafile_include_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Framework/Platform/${PAL_PLATFORM_NAME}) +ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}) ly_add_target( NAME AWSCore.Static STATIC NAMESPACE Gem FILES_CMAKE awscore_files.cmake - ${pal_cafile_include_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake INCLUDE_DIRECTORIES PUBLIC Include/Public + ${pal_dir} PRIVATE Include/Private BUILD_DEPENDENCIES @@ -65,11 +65,11 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS) NAMESPACE Gem FILES_CMAKE awscore_editor_files.cmake - ${pal_editor_include_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_editor_files.cmake INCLUDE_DIRECTORIES PRIVATE Include/Private - ${pal_editor_include_dir} + ${pal_dir} PUBLIC Include/Public BUILD_DEPENDENCIES @@ -164,12 +164,12 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) NAMESPACE Gem FILES_CMAKE awscore_editor_tests_files.cmake - ${pal_editor_include_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake - Tests/Editor/Platform/${PAL_PLATFORM_NAME}/awscore_editor_tests_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_editor_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_editor_tests_files.cmake INCLUDE_DIRECTORIES PRIVATE Include/Private - ${pal_editor_include_dir} + ${pal_dir} Include/Public Tests COMPILE_DEFINITIONS diff --git a/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h b/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h index 542177dcc4..388f8eefd5 100644 --- a/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h +++ b/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h @@ -21,7 +21,7 @@ namespace AWSCore { public: AWSCVarCredentialHandler() = default; - ~AWSCVarCredentialHandler() = default; + ~AWSCVarCredentialHandler() override = default; //! Activate handler and its credentials provider, make sure activation //! invoked after AWSNativeSDK init to avoid memory leak diff --git a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h index f0b9b45aff..39e96517a7 100644 --- a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h +++ b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h @@ -9,6 +9,7 @@ #include #include +#include #include diff --git a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h index 9d8b0a5e93..0f25c648d0 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h @@ -13,12 +13,15 @@ #include #include +#include + // The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. // AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in C++17. // Use std::allocator_traits instead of accessing these members directly. // You can define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received this warning. AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") +#include #include #include #include @@ -136,7 +139,11 @@ namespace AWSCore Override> writeRateLimiter; Override> readRateLimiter; Override httpLibOverride; +#if AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE + Override followRedirects; +#else Override followRedirects; +#endif Override caFile; /// Applys settings changes made after first use. diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Android.h b/Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Android.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Android.h rename to Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Android.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Android.h b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Android.h new file mode 100644 index 0000000000..2cacfb0d34 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Android.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 1 diff --git a/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..6beeb3442d --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Android/GetCertsPath_Android.cpp b/Gems/AWSCore/Code/Platform/Android/GetCertsPath_Android.cpp similarity index 97% rename from Gems/AWSCore/Code/Source/Framework/Platform/Android/GetCertsPath_Android.cpp rename to Gems/AWSCore/Code/Platform/Android/GetCertsPath_Android.cpp index 9dbacce2dd..557e29c3b6 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Android/GetCertsPath_Android.cpp +++ b/Gems/AWSCore/Code/Platform/Android/GetCertsPath_Android.cpp @@ -1,33 +1,33 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. -// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in -// C++17. Use std::allocator_traits instead of accessing these members directly. You can define -// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received -// this warning. -AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING -#include -#include - -namespace AWSCore -{ - namespace Platform - { - Aws::String GetCaCertBundlePath() - { - AZStd::string publicStoragePath = AZ::Android::Utils::GetAppPublicStoragePath(); - publicStoragePath.append("/certificates/aws/cacert.pem"); - - return publicStoragePath.c_str(); - } - } // namespace Platform -} +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. +// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in +// C++17. Use std::allocator_traits instead of accessing these members directly. You can define +// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received +// this warning. +AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING +#include +#include + +namespace AWSCore +{ + namespace Platform + { + Aws::String GetCaCertBundlePath() + { + AZStd::string publicStoragePath = AZ::Android::Utils::GetAppPublicStoragePath(); + publicStoragePath.append("/certificates/aws/cacert.pem"); + + return publicStoragePath.c_str(); + } + } // namespace Platform +} diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/platform_android_files.cmake b/Gems/AWSCore/Code/Platform/Android/platform_android_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/platform_android_files.cmake rename to Gems/AWSCore/Code/Platform/Android/platform_android_editor_files.cmake diff --git a/Gems/AWSCore/Code/Tests/Editor/Platform/Linux/awscore_editor_tests_linux_files.cmake b/Gems/AWSCore/Code/Platform/Android/platform_android_editor_tests_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Tests/Editor/Platform/Linux/awscore_editor_tests_linux_files.cmake rename to Gems/AWSCore/Code/Platform/Android/platform_android_editor_tests_files.cmake diff --git a/Gems/AWSCore/Code/Platform/Android/platform_android_files.cmake b/Gems/AWSCore/Code/Platform/Android/platform_android_files.cmake new file mode 100644 index 0000000000..e5b02beeac --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Android/platform_android_files.cmake @@ -0,0 +1,13 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Android.h + GetCertsPath_Android.cpp +) diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Common/GetCertsPath_Null.cpp b/Gems/AWSCore/Code/Platform/Common/GetCertsPath_Null.cpp similarity index 97% rename from Gems/AWSCore/Code/Source/Framework/Platform/Common/GetCertsPath_Null.cpp rename to Gems/AWSCore/Code/Platform/Common/GetCertsPath_Null.cpp index 5731327fb2..45bb45000f 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Common/GetCertsPath_Null.cpp +++ b/Gems/AWSCore/Code/Platform/Common/GetCertsPath_Null.cpp @@ -1,28 +1,28 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. -// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in -// C++17. Use std::allocator_traits instead of accessing these members directly. You can define -// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received -// this warning. -AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -namespace AWSCore -{ - namespace Platform - { - Aws::String GetCaCertBundlePath() - { - return ""; // no-op - } - } // namespace Platform -} // namespace GridMate +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. +// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in +// C++17. Use std::allocator_traits instead of accessing these members directly. You can define +// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received +// this warning. +AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING + +namespace AWSCore +{ + namespace Platform + { + Aws::String GetCaCertBundlePath() + { + return ""; // no-op + } + } // namespace Platform +} // namespace GridMate diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Linux.h b/Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Linux.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Linux.h rename to Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Linux.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Linux.h b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Linux.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Linux.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..d6ef9ceb4d --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/platform_linux_files.cmake b/Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/platform_linux_files.cmake rename to Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_files.cmake diff --git a/Gems/AWSCore/Code/Tests/Editor/Platform/Mac/awscore_editor_tests_mac_files.cmake b/Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_tests_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Tests/Editor/Platform/Mac/awscore_editor_tests_mac_files.cmake rename to Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_tests_files.cmake diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Windows/platform_windows_files.cmake b/Gems/AWSCore/Code/Platform/Linux/platform_linux_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/Windows/platform_windows_files.cmake rename to Gems/AWSCore/Code/Platform/Linux/platform_linux_files.cmake index 0abbd1adb8..1661434740 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Windows/platform_windows_files.cmake +++ b/Gems/AWSCore/Code/Platform/Linux/platform_linux_files.cmake @@ -7,5 +7,7 @@ # set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Linux.h ../Common/GetCertsPath_Null.cpp ) diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Mac.h b/Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Mac.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Mac.h rename to Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Mac.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Mac.h b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Mac.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Mac.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..2d33c834f9 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/platform_mac_files.cmake b/Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/platform_mac_files.cmake rename to Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_files.cmake diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Android/platform_android_files.cmake b/Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_tests_files.cmake similarity index 84% rename from Gems/AWSCore/Code/Source/Framework/Platform/Android/platform_android_files.cmake rename to Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_tests_files.cmake index 278e4a1c9d..07f96644ab 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Android/platform_android_files.cmake +++ b/Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_tests_files.cmake @@ -6,6 +6,5 @@ # # -set(FILES - GetCertsPath_Android.cpp +set(FILES ) diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Mac/platform_mac_files.cmake b/Gems/AWSCore/Code/Platform/Mac/platform_mac_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/Mac/platform_mac_files.cmake rename to Gems/AWSCore/Code/Platform/Mac/platform_mac_files.cmake index 0abbd1adb8..3e5e99cc05 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Mac/platform_mac_files.cmake +++ b/Gems/AWSCore/Code/Platform/Mac/platform_mac_files.cmake @@ -7,5 +7,7 @@ # set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Mac.h ../Common/GetCertsPath_Null.cpp ) diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Windows.h b/Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Windows.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Windows.h rename to Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Windows.h diff --git a/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..f6ccf10b88 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Windows.h b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Windows.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Windows.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/platform_windows_files.cmake b/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/platform_windows_files.cmake rename to Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_files.cmake diff --git a/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_tests_files.cmake b/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_tests_files.cmake new file mode 100644 index 0000000000..3b87d2f3bb --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_tests_files.cmake @@ -0,0 +1,19 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + ../../Tests/Editor/AWSCoreEditorSystemComponentTest.cpp + ../../Tests/Editor/Attribution/AWSCoreAttributionManagerTest.cpp + ../../Tests/Editor/Attribution/AWSCoreAttributionMetricTest.cpp + ../../Tests/Editor/Attribution/AWSCoreAttributionSystemComponentTest.cpp + ../../Tests/Editor/Attribution/AWSAttributionServiceApiTest.cpp + ../../Tests/Editor/UI/AWSCoreEditorMenuTest.cpp + ../../Tests/Editor/UI/AWSCoreEditorUIFixture.h + ../../Tests/Editor/UI/AWSCoreResourceMappingToolActionTest.cpp + ../../Tests/Editor/AWSCoreEditorManagerTest.cpp +) diff --git a/Gems/AWSCore/Code/Platform/Windows/platform_windows_files.cmake b/Gems/AWSCore/Code/Platform/Windows/platform_windows_files.cmake new file mode 100644 index 0000000000..aa0119d042 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/platform_windows_files.cmake @@ -0,0 +1,13 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Windows.h + ../Common/GetCertsPath_Null.cpp +) diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_iOS.h b/Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_iOS.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_iOS.h rename to Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_iOS.h diff --git a/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..7384900938 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_iOS.h b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_iOS.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_iOS.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/platform_ios_files.cmake b/Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/platform_ios_files.cmake rename to Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_files.cmake diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Linux/platform_linux_files.cmake b/Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_tests_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/Linux/platform_linux_files.cmake rename to Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_tests_files.cmake index 0abbd1adb8..07f96644ab 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Linux/platform_linux_files.cmake +++ b/Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_tests_files.cmake @@ -6,6 +6,5 @@ # # -set(FILES - ../Common/GetCertsPath_Null.cpp +set(FILES ) diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/iOS/platform_ios_files.cmake b/Gems/AWSCore/Code/Platform/iOS/platform_ios_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/iOS/platform_ios_files.cmake rename to Gems/AWSCore/Code/Platform/iOS/platform_ios_files.cmake index 0abbd1adb8..c73796afe3 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/iOS/platform_ios_files.cmake +++ b/Gems/AWSCore/Code/Platform/iOS/platform_ios_files.cmake @@ -7,5 +7,7 @@ # set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_iOS.h ../Common/GetCertsPath_Null.cpp ) diff --git a/Gems/AWSCore/Code/Source/AWSCoreSystemComponent.cpp b/Gems/AWSCore/Code/Source/AWSCoreSystemComponent.cpp index 92a5aa493f..294462e654 100644 --- a/Gems/AWSCore/Code/Source/AWSCoreSystemComponent.cpp +++ b/Gems/AWSCore/Code/Source/AWSCoreSystemComponent.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include diff --git a/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp b/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp index 4653975a52..d51539a471 100644 --- a/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp +++ b/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp @@ -64,7 +64,7 @@ namespace AWSCore void AWSCoreConfiguration::InitSourceProjectFolderPath() { - auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); if (!sourceProjectFolder) { AZ_Error(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage); diff --git a/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp b/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp index 83487f665d..8102efa2f8 100644 --- a/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp +++ b/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp @@ -5,15 +5,14 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ - #include #include namespace AWSCore { - AZ_CVAR(AZ::CVarFixedString, cl_awsAccessKey, "", nullptr, AZ::ConsoleFunctorFlags::Null, "Override AWS access key"); - AZ_CVAR(AZ::CVarFixedString, cl_awsSecretKey, "", nullptr, AZ::ConsoleFunctorFlags::Null, "Override AWS secret key"); + AZ_CVAR(AZ::CVarFixedString, cl_awsAccessKey, "", nullptr, AZ::ConsoleFunctorFlags::IsInvisible, "Override AWS access key"); + AZ_CVAR(AZ::CVarFixedString, cl_awsSecretKey, "", nullptr, AZ::ConsoleFunctorFlags::IsInvisible, "Override AWS secret key"); static constexpr char AWSCVARCREDENTIALHANDLER_ALLOC_TAG[] = "AWSCVarCredentialHandler"; @@ -36,12 +35,12 @@ namespace AWSCore std::shared_ptr AWSCVarCredentialHandler::GetCredentialsProvider() { - auto accessKey = static_cast(cl_awsAccessKey); - auto secretKey = static_cast(cl_awsSecretKey); + const auto accessKey = static_cast(cl_awsAccessKey); + const auto secretKey = static_cast(cl_awsSecretKey); if (!accessKey.empty() && !secretKey.empty()) { - AZStd::lock_guard credentialsLock{m_credentialMutex}; + AZStd::lock_guard credentialsLock{ m_credentialMutex }; m_cvarCredentialsProvider = Aws::MakeShared( AWSCVARCREDENTIALHANDLER_ALLOC_TAG, accessKey.c_str(), secretKey.c_str()); return m_cvarCredentialsProvider; @@ -52,7 +51,7 @@ namespace AWSCore void AWSCVarCredentialHandler::ResetCredentialsProvider() { // Must reset credential provider after AWSNativeSDKs init or before AWSNativeSDKs shutdown - AZStd::lock_guard credentialsLock{m_credentialMutex}; + AZStd::lock_guard credentialsLock{ m_credentialMutex }; m_cvarCredentialsProvider.reset(); } } // namespace AWSCore diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp index a2c89a5af3..d55510930e 100644 --- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp +++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp @@ -78,7 +78,7 @@ namespace AWSCore void AWSCoreEditorMenu::InitializeResourceMappingToolAction() { -#ifdef AWSCORE_EDITOR_RESOURCE_MAPPING_TOOL_ENABLED +#if AWSCORE_EDITOR_RESOURCE_MAPPING_TOOL_ENABLED AWSCoreResourceMappingToolAction* resourceMappingTool = new AWSCoreResourceMappingToolAction(QObject::tr(AWSResourceMappingToolActionText), this); QObject::connect(resourceMappingTool, &QAction::triggered, this, @@ -197,7 +197,7 @@ namespace AWSCore subMenu->addAction(AddExternalLinkAction( AWSMetricsAdvancedTopicsActionText, AWSMetricsAdvancedTopicsUrl, ":/Notifications/link.svg")); - AZStd::string priorAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devroot@"); + AZStd::string priorAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@engroot@"); AZStd::string configFilePath = priorAlias + "\\Gems\\AWSMetrics\\Code\\" + AZ::SettingsRegistryInterface::RegistryFolder; AzFramework::StringFunc::Path::Normalize(configFilePath); diff --git a/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp b/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp index cc51213e09..0f15c862d5 100644 --- a/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp +++ b/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp @@ -12,16 +12,6 @@ #include #include -// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. -// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in C++17. -// Use std::allocator_traits instead of accessing these members directly. -// You can define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received this warning. - -AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - - namespace AWSCore { void AwsApiJobConfig::ApplySettings() diff --git a/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp b/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp index 730fc97f49..f9fff631f4 100644 --- a/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp +++ b/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp b/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp index 6bde2c2fbf..e54a55f728 100644 --- a/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp +++ b/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp @@ -60,7 +60,7 @@ public: m_normalizedSourceProjectFolder.c_str(), AZ::SettingsRegistryInterface::RegistryFolder); AzFramework::StringFunc::Path::Normalize(m_normalizedSetRegFolderPath); - m_localFileIO->SetAlias("@devassets@", m_normalizedSourceProjectFolder.c_str()); + m_localFileIO->SetAlias("@projectroot@", m_normalizedSourceProjectFolder.c_str()); CreateTestSetRegFile(TEST_VALID_RESOURCE_MAPPING_SETREG); } @@ -122,7 +122,7 @@ private: TEST_F(AWSCoreConfigurationTest, InitConfig_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath) { m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {}); - m_localFileIO->ClearAlias("@devassets@"); + m_localFileIO->ClearAlias("@projectroot@"); AZ_TEST_START_TRACE_SUPPRESSION; m_awsCoreConfiguration->InitConfig(); @@ -154,7 +154,7 @@ TEST_F(AWSCoreConfigurationTest, InitConfig_LoadValidSettingsRegistry_ReturnNonE TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath) { m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {}); - m_localFileIO->ClearAlias("@devassets@"); + m_localFileIO->ClearAlias("@projectroot@"); m_awsCoreConfiguration->ReloadConfiguration(); auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath(); diff --git a/Gems/AWSCore/Code/Tests/Editor/AWSCoreEditorSystemComponentTest.cpp b/Gems/AWSCore/Code/Tests/Editor/AWSCoreEditorSystemComponentTest.cpp index 07a6c8ae08..0cd01b4245 100644 --- a/Gems/AWSCore/Code/Tests/Editor/AWSCoreEditorSystemComponentTest.cpp +++ b/Gems/AWSCore/Code/Tests/Editor/AWSCoreEditorSystemComponentTest.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/AWSCore/Code/Tests/Editor/Platform/Windows/awscore_editor_tests_windows_files.cmake b/Gems/AWSCore/Code/Tests/Editor/Platform/Windows/awscore_editor_tests_windows_files.cmake deleted file mode 100644 index 0d47bbe795..0000000000 --- a/Gems/AWSCore/Code/Tests/Editor/Platform/Windows/awscore_editor_tests_windows_files.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - ../../AWSCoreEditorSystemComponentTest.cpp - ../../Attribution/AWSCoreAttributionManagerTest.cpp - ../../Attribution/AWSCoreAttributionMetricTest.cpp - ../../Attribution/AWSCoreAttributionSystemComponentTest.cpp - ../../Attribution/AWSAttributionServiceApiTest.cpp - ../../UI/AWSCoreEditorMenuTest.cpp - ../../UI/AWSCoreEditorUIFixture.h - ../../UI/AWSCoreResourceMappingToolActionTest.cpp - ../../AWSCoreEditorManagerTest.cpp -) diff --git a/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp b/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp index 40ed5b53b5..e9453a4a0a 100644 --- a/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp +++ b/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp @@ -32,7 +32,7 @@ class AWSCoreEditorMenuTest { AWSCoreEditorUIFixture::SetUp(); AWSCoreFixture::SetUp(); - m_localFileIO->SetAlias("@devroot@", "dummy engine root"); + m_localFileIO->SetAlias("@engroot@", "dummy engine root"); } void TearDown() override diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftAcceptMatchRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftAcceptMatchRequest.h new file mode 100644 index 0000000000..415550b6bc --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftAcceptMatchRequest.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AWSGameLift +{ + //! AWSGameLiftAcceptMatchRequest + //! GameLift accept match request which corresponds to Amazon GameLift + //! Registers a player's acceptance or rejection of a proposed FlexMatch match. + //! AcceptMatchRequest + struct AWSGameLiftAcceptMatchRequest + : public AzFramework::AcceptMatchRequest + { + public: + AZ_RTTI(AWSGameLiftAcceptMatchRequest, "{8372B297-88E8-4C13-B31D-BE87236CA416}", AzFramework::AcceptMatchRequest); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftAcceptMatchRequest() = default; + virtual ~AWSGameLiftAcceptMatchRequest() = default; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h index be2c766d7e..a9b06c5bc9 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h index 75440868c9..4fab16ca70 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h index 32f549c7d5..07d6da3870 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h index 655c83252e..bfc2dc630e 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStartMatchmakingRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStartMatchmakingRequest.h new file mode 100644 index 0000000000..cd30bc45ab --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStartMatchmakingRequest.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AWSGameLift +{ + //! AWSGameLiftPlayerInformation + //! Information on each player to be matched + //! This information must include a player ID, and may contain player attributes and latency data to be used in the matchmaking process + //! After a successful match, Player objects contain the name of the team the player is assigned to + struct AWSGameLiftPlayerInformation + { + AZ_RTTI(AWSGameLiftPlayerInformation, "{B62C118E-C55D-4903-8ECB-E58E8CA613C4}"); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftPlayerInformation() = default; + virtual ~AWSGameLiftPlayerInformation() = default; + + // A map of region names to latencies in millseconds, that indicates + // the amount of latency that a player experiences when connected to AWS Regions + AZStd::unordered_map m_latencyInMs; + // A collection of key:value pairs containing player information for use in matchmaking + // Player attribute keys must match the playerAttributes used in a matchmaking rule set + // Example: {"skill": "{\"N\": \"23\"}", "gameMode": "{\"S\": \"deathmatch\"}"} + AZStd::unordered_map m_playerAttributes; + // A unique identifier for a player + AZStd::string m_playerId; + // Name of the team that the player is assigned to in a match + AZStd::string m_team; + }; + + //! AWSGameLiftStartMatchmakingRequest + //! GameLift start matchmaking request which corresponds to Amazon GameLift + //! Uses FlexMatch to create a game match for a group of players based on custom matchmaking rules + //! StartMatchmakingRequest + struct AWSGameLiftStartMatchmakingRequest + : public AzFramework::StartMatchmakingRequest + { + public: + AZ_RTTI(AWSGameLiftStartMatchmakingRequest, "{D273DF71-9C55-48C1-95F9-8D7B66B9CF3E}", AzFramework::StartMatchmakingRequest); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftStartMatchmakingRequest() = default; + virtual ~AWSGameLiftStartMatchmakingRequest() = default; + + // Name of the matchmaking configuration to use for this request + AZStd::string m_configurationName; + // Information on each player to be matched + AZStd::vector m_players; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStopMatchmakingRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStopMatchmakingRequest.h new file mode 100644 index 0000000000..81d811d32d --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStopMatchmakingRequest.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AWSGameLift +{ + //! AWSGameLiftStopMatchmakingRequest + //! GameLift stop matchmaking request which corresponds to Amazon GameLift + //! Cancels a matchmaking ticket or match backfill ticket that is currently being processed. + //! StopMatchmakingRequest + struct AWSGameLiftStopMatchmakingRequest + : public AzFramework::StopMatchmakingRequest + { + public: + AZ_RTTI(AWSGameLiftStopMatchmakingRequest, "{2766BC03-9F84-4346-A52B-49129BBAF38B}", AzFramework::StopMatchmakingRequest); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftStopMatchmakingRequest() = default; + virtual ~AWSGameLiftStopMatchmakingRequest() = default; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h index 25445553f4..10269dc8c3 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h @@ -11,6 +11,7 @@ #include #include #include +#include #include namespace AWSGameLift @@ -71,4 +72,26 @@ namespace AWSGameLift static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; }; using AWSGameLiftSessionRequestBus = AZ::EBus; + + // IMatchmakingAsyncRequests EBus wrapper for scripting + class AWSGameLiftMatchmakingAsyncRequests + : public AZ::EBusTraits + { + public: + using MutexType = AZStd::recursive_mutex; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + }; + using AWSGameLiftMatchmakingAsyncRequestBus = AZ::EBus; + + // IMatchmakingRequests EBus wrapper for scripting + class AWSGameLiftMatchmakingRequests + : public AZ::EBusTraits + { + public: + using MutexType = AZStd::recursive_mutex; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + }; + using AWSGameLiftMatchmakingRequestBus = AZ::EBus; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp new file mode 100644 index 0000000000..9ae168aea9 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +namespace AWSGameLift +{ + AWSGameLiftClientLocalTicketTracker::AWSGameLiftClientLocalTicketTracker() + : m_status(TicketTrackerStatus::Idle) + , m_pollingPeriodInMS(AWSGameLiftClientDefaultPollingPeriodInMS) + { + } + + void AWSGameLiftClientLocalTicketTracker::ActivateTracker() + { + AZ::Interface::Register(this); + } + + void AWSGameLiftClientLocalTicketTracker::DeactivateTracker() + { + AZ::Interface::Unregister(this); + StopPolling(); + } + + void AWSGameLiftClientLocalTicketTracker::StartPolling( + const AZStd::string& ticketId, const AZStd::string& playerId) + { + AZStd::lock_guard lock(m_trackerMutex); + if (m_status == TicketTrackerStatus::Running) + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, "Matchmaking ticket tracker is running."); + return; + } + m_status = TicketTrackerStatus::Running; + m_trackerThread = AZStd::thread(AZStd::bind( + &AWSGameLiftClientLocalTicketTracker::ProcessPolling, this, ticketId, playerId)); + } + + void AWSGameLiftClientLocalTicketTracker::StopPolling() + { + AZStd::lock_guard lock(m_trackerMutex); + m_status = TicketTrackerStatus::Idle; + if (m_trackerThread.joinable()) + { + m_trackerThread.join(); + } + } + + void AWSGameLiftClientLocalTicketTracker::ProcessPolling( + const AZStd::string& ticketId, const AZStd::string& playerId) + { + while (m_status == TicketTrackerStatus::Running) + { + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); + if (gameliftClient) + { + Aws::GameLift::Model::DescribeMatchmakingRequest request; + request.AddTicketIds(ticketId.c_str()); + + auto describeMatchmakingOutcome = gameliftClient->DescribeMatchmaking(request); + if (describeMatchmakingOutcome.IsSuccess()) + { + if (describeMatchmakingOutcome.GetResult().GetTicketList().size() == 1) + { + auto ticket = describeMatchmakingOutcome.GetResult().GetTicketList().front(); + if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED) + { + m_status = TicketTrackerStatus::Idle; + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, + "Matchmaking ticket %s is complete.", ticket.GetTicketId().c_str()); + RequestPlayerJoinMatch(ticket, playerId); + return; + } + else if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::TIMED_OUT || + ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::FAILED || + ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::CANCELLED) + { + m_status = TicketTrackerStatus::Idle; + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, "Matchmaking ticket %s is not complete, %s", + ticket.GetTicketId().c_str(), ticket.GetStatusReason().c_str()); + return; + } + else if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::REQUIRES_ACCEPTANCE) + { + // broadcast acceptance requires to player + } + else + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, "Matchmaking ticket %s is processing, %s.", + ticket.GetTicketId().c_str(), ticket.GetStatusReason().c_str()); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, "Unable to find expected ticket with id %s", ticketId.c_str()); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, AWSGameLiftErrorMessageTemplate, + describeMatchmakingOutcome.GetError().GetExceptionName().c_str(), + describeMatchmakingOutcome.GetError().GetMessage().c_str()); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, AWSGameLiftClientMissingErrorMessage); + } + AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(m_pollingPeriodInMS)); + } + } + + void AWSGameLiftClientLocalTicketTracker::RequestPlayerJoinMatch( + const Aws::GameLift::Model::MatchmakingTicket& ticket, const AZStd::string& playerId) + { + auto connectionInfo = ticket.GetGameSessionConnectionInfo(); + AzFramework::SessionConnectionConfig sessionConnectionConfig; + sessionConnectionConfig.m_ipAddress = connectionInfo.GetIpAddress().c_str(); + for (auto matchedPlayer : connectionInfo.GetMatchedPlayerSessions()) + { + if (playerId.compare(matchedPlayer.GetPlayerId().c_str()) == 0) + { + sessionConnectionConfig.m_playerSessionId = matchedPlayer.GetPlayerSessionId().c_str(); + break; + } + } + sessionConnectionConfig.m_port = static_cast(connectionInfo.GetPort()); + + if (!sessionConnectionConfig.m_playerSessionId.empty()) + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, + "Requesting and validating player session %s to connect to the match ...", + sessionConnectionConfig.m_playerSessionId.c_str()); + bool result = + AZ::Interface::Get()->RequestPlayerJoinSession(sessionConnectionConfig); + if (result) + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, + "Started connection process, and connection validation is in process."); + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, + "Failed to start connection process."); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, + "Player session id is missing for player % to join the match.", playerId.c_str()); + } + } +} diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h new file mode 100644 index 0000000000..7b317a0485 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +#include + +namespace AWSGameLift +{ + enum TicketTrackerStatus + { + Idle, + Running + }; + + //! AWSGameLiftClientLocalTicketTracker + //! GameLift client ticket tracker to describe submitted matchmaking ticket periodically, + //! and join player to the match once matchmaking ticket is complete. + //! For use in production, please see GameLifts guidance about matchmaking at volume. + //! The continuous polling approach here is only suitable for low volume matchmaking and is meant to aid with development only + class AWSGameLiftClientLocalTicketTracker + : public IAWSGameLiftMatchmakingInternalRequests + { + public: + static constexpr const char AWSGameLiftClientLocalTicketTrackerName[] = "AWSGameLiftClientLocalTicketTracker"; + // Set ticket polling period to 10 seconds + // https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html#match-client-track + static constexpr const uint64_t AWSGameLiftClientDefaultPollingPeriodInMS = 10000; + + AWSGameLiftClientLocalTicketTracker(); + virtual ~AWSGameLiftClientLocalTicketTracker() = default; + + virtual void ActivateTracker(); + virtual void DeactivateTracker(); + + // IAWSGameLiftMatchmakingInternalRequests interface implementation + void StartPolling(const AZStd::string& ticketId, const AZStd::string& playerId) override; + void StopPolling() override; + + protected: + // For testing friendly access + uint64_t m_pollingPeriodInMS; + TicketTrackerStatus m_status; + + private: + void ProcessPolling(const AZStd::string& ticketId, const AZStd::string& playerId); + void RequestPlayerJoinMatch(const Aws::GameLift::Model::MatchmakingTicket& ticket, const AZStd::string& playerId); + + AZStd::mutex m_trackerMutex; + AZStd::thread m_trackerThread; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp index f9249d1ad2..ee731993aa 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp @@ -17,11 +17,13 @@ #include #include +#include #include #include #include #include #include +#include #include @@ -31,11 +33,6 @@ namespace AWSGameLift AZ_CVAR(AZ::CVarFixedString, cl_gameliftLocalEndpoint, "", nullptr, AZ::ConsoleFunctorFlags::Null, "The local endpoint to test with GameLiftLocal SDK."); #endif - AWSGameLiftClientManager::AWSGameLiftClientManager() - { - m_gameliftClient.reset(); - } - void AWSGameLiftClientManager::ActivateManager() { AZ::Interface::Register(this); @@ -62,8 +59,7 @@ namespace AWSGameLift bool AWSGameLiftClientManager::ConfigureGameLiftClient(const AZStd::string& region) { - m_gameliftClient.reset(); - + AZ::Interface::Get()->SetGameLiftClient(nullptr); Aws::Client::ClientConfiguration clientConfig; // Set up client endpoint or region AZStd::string localEndpoint = ""; @@ -103,7 +99,8 @@ namespace AWSGameLift AZ_Error(AWSGameLiftClientManagerName, false, AWSGameLiftClientCredentialMissingErrorMessage); return false; } - m_gameliftClient = AZStd::make_shared(credentialResult.result, clientConfig); + AZ::Interface::Get()->SetGameLiftClient( + AZStd::make_shared(credentialResult.result, clientConfig)); return true; } @@ -112,6 +109,16 @@ namespace AWSGameLift return AZ::Uuid::CreateRandom().ToString(includeBrackets, includeDashes); } + void AWSGameLiftClientManager::AcceptMatch(const AzFramework::AcceptMatchRequest& acceptMatchRequest) + { + AZ_UNUSED(acceptMatchRequest); + } + + void AWSGameLiftClientManager::AcceptMatchAsync(const AzFramework::AcceptMatchRequest& acceptMatchRequest) + { + AZ_UNUSED(acceptMatchRequest); + } + AZStd::string AWSGameLiftClientManager::CreateSession(const AzFramework::CreateSessionRequest& createSessionRequest) { AZStd::string result = ""; @@ -184,15 +191,15 @@ namespace AWSGameLift AZStd::string AWSGameLiftClientManager::CreateSessionHelper( const AWSGameLiftCreateSessionRequest& createSessionRequest) { - AZStd::shared_ptr gameLiftClient = m_gameliftClient; + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); AZStd::string result = ""; - if (!gameLiftClient) + if (!gameliftClient) { AZ_Error(AWSGameLiftClientManagerName, false, AWSGameLiftClientMissingErrorMessage); } else { - result = CreateSessionActivity::CreateSession(*gameLiftClient, createSessionRequest); + result = CreateSessionActivity::CreateSession(*gameliftClient, createSessionRequest); } return result; } @@ -200,7 +207,7 @@ namespace AWSGameLift AZStd::string AWSGameLiftClientManager::CreateSessionOnQueueHelper( const AWSGameLiftCreateSessionOnQueueRequest& createSessionOnQueueRequest) { - AZStd::shared_ptr gameliftClient = m_gameliftClient; + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); AZStd::string result; if (!gameliftClient) { @@ -255,7 +262,7 @@ namespace AWSGameLift bool AWSGameLiftClientManager::JoinSessionHelper(const AWSGameLiftJoinSessionRequest& joinSessionRequest) { - AZStd::shared_ptr gameliftClient = m_gameliftClient; + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); bool result = false; if (!gameliftClient) { @@ -335,8 +342,7 @@ namespace AWSGameLift AzFramework::SearchSessionsResponse AWSGameLiftClientManager::SearchSessionsHelper( const AWSGameLiftSearchSessionsRequest& searchSessionsRequest) const { - AZStd::shared_ptr gameliftClient = m_gameliftClient; - + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); AzFramework::SearchSessionsResponse response; if (!gameliftClient) { @@ -349,8 +355,25 @@ namespace AWSGameLift return response; } - void AWSGameLiftClientManager::SetGameLiftClient(AZStd::shared_ptr gameliftClient) + AZStd::string AWSGameLiftClientManager::StartMatchmaking(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) + { + AZ_UNUSED(startMatchmakingRequest); + + return AZStd::string{}; + } + + void AWSGameLiftClientManager::StartMatchmakingAsync(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) + { + AZ_UNUSED(startMatchmakingRequest); + } + + void AWSGameLiftClientManager::StopMatchmaking(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) + { + AZ_UNUSED(stopMatchmakingRequest); + } + + void AWSGameLiftClientManager::StopMatchmakingAsync(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) { - m_gameliftClient.swap(gameliftClient); + AZ_UNUSED(stopMatchmakingRequest); } } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h index 1b9296d20a..fbdc1d6104 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h @@ -9,15 +9,9 @@ #pragma once #include -#include +#include -namespace Aws -{ - namespace GameLift - { - class GameLiftClient; - } -} +#include namespace AWSGameLift { @@ -26,6 +20,54 @@ namespace AWSGameLift struct AWSGameLiftJoinSessionRequest; struct AWSGameLiftSearchSessionsRequest; + // MatchAcceptanceNotificationBus EBus handler for scripting + class AWSGameLiftMatchAcceptanceNotificationBusHandler + : public AzFramework::MatchAcceptanceNotificationBus::Handler + , public AZ::BehaviorEBusHandler + { + public: + AZ_EBUS_BEHAVIOR_BINDER( + AWSGameLiftMatchAcceptanceNotificationBusHandler, + "{CBE057D3-F5CE-46D3-B02D-8A6A1446B169}", + AZ::SystemAllocator, + OnMatchAcceptance); + + void OnMatchAcceptance() override + { + Call(FN_OnMatchAcceptance); + } + }; + + // MatchmakingAsyncRequestNotificationBus EBus handler for scripting + class AWSGameLiftMatchmakingAsyncRequestNotificationBusHandler + : public AzFramework::MatchmakingAsyncRequestNotificationBus::Handler + , public AZ::BehaviorEBusHandler + { + public: + AZ_EBUS_BEHAVIOR_BINDER( + AWSGameLiftMatchmakingAsyncRequestNotificationBusHandler, + "{2045EE8F-2AB7-4ED0-9614-3496A1A43677}", + AZ::SystemAllocator, + OnAcceptMatchAsyncComplete, + OnStartMatchmakingAsyncComplete, + OnStopMatchmakingAsyncComplete); + + void OnAcceptMatchAsyncComplete() override + { + Call(FN_OnAcceptMatchAsyncComplete); + } + + void OnStartMatchmakingAsyncComplete(const AZStd::string& matchmakingTicketId) override + { + Call(FN_OnStartMatchmakingAsyncComplete, matchmakingTicketId); + } + + void OnStopMatchmakingAsyncComplete() override + { + Call(FN_OnStopMatchmakingAsyncComplete); + } + }; + // SessionAsyncRequestNotificationBus EBus handler for scripting class AWSGameLiftSessionAsyncRequestNotificationBusHandler : public AzFramework::SessionAsyncRequestNotificationBus::Handler @@ -66,6 +108,8 @@ namespace AWSGameLift //! GameLift client manager to support game and player session related client requests class AWSGameLiftClientManager : public AWSGameLiftRequestBus::Handler + , public AWSGameLiftMatchmakingAsyncRequestBus::Handler + , public AWSGameLiftMatchmakingRequestBus::Handler , public AWSGameLiftSessionAsyncRequestBus::Handler , public AWSGameLiftSessionRequestBus::Handler { @@ -75,13 +119,11 @@ namespace AWSGameLift "Missing AWS region for GameLift client."; static constexpr const char AWSGameLiftClientCredentialMissingErrorMessage[] = "Missing AWS credential for GameLift client."; - static constexpr const char AWSGameLiftClientMissingErrorMessage[] = - "GameLift client is not configured yet."; static constexpr const char AWSGameLiftCreateSessionRequestInvalidErrorMessage[] = "Invalid GameLift CreateSession or CreateSessionOnQueue request."; - AWSGameLiftClientManager(); + AWSGameLiftClientManager() = default; virtual ~AWSGameLiftClientManager() = default; virtual void ActivateManager(); @@ -91,28 +133,32 @@ namespace AWSGameLift bool ConfigureGameLiftClient(const AZStd::string& region) override; AZStd::string CreatePlayerId(bool includeBrackets, bool includeDashes) override; + // AWSGameLiftMatchmakingAsyncRequestBus interface implementation + void AcceptMatchAsync(const AzFramework::AcceptMatchRequest& acceptMatchRequest) override; + void StartMatchmakingAsync(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) override; + void StopMatchmakingAsync(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) override; + // AWSGameLiftSessionAsyncRequestBus interface implementation void CreateSessionAsync(const AzFramework::CreateSessionRequest& createSessionRequest) override; void JoinSessionAsync(const AzFramework::JoinSessionRequest& joinSessionRequest) override; void SearchSessionsAsync(const AzFramework::SearchSessionsRequest& searchSessionsRequest) const override; void LeaveSessionAsync() override; + // AWSGameLiftMatchmakingRequestBus interface implementation + void AcceptMatch(const AzFramework::AcceptMatchRequest& acceptMatchRequest) override; + AZStd::string StartMatchmaking(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) override; + void StopMatchmaking(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) override; + // AWSGameLiftSessionRequestBus interface implementation AZStd::string CreateSession(const AzFramework::CreateSessionRequest& createSessionRequest) override; bool JoinSession(const AzFramework::JoinSessionRequest& joinSessionRequest) override; AzFramework::SearchSessionsResponse SearchSessions(const AzFramework::SearchSessionsRequest& searchSessionsRequest) const override; void LeaveSession() override; - protected: - // Use for automation tests only to inject mock objects. - void SetGameLiftClient(AZStd::shared_ptr gameliftClient); - private: AZStd::string CreateSessionHelper(const AWSGameLiftCreateSessionRequest& createSessionRequest); AZStd::string CreateSessionOnQueueHelper(const AWSGameLiftCreateSessionOnQueueRequest& createSessionOnQueueRequest); bool JoinSessionHelper(const AWSGameLiftJoinSessionRequest& joinSessionRequest); AzFramework::SearchSessionsResponse SearchSessionsHelper(const AWSGameLiftSearchSessionsRequest& searchSessionsRequest) const; - - AZStd::shared_ptr m_gameliftClient; }; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp index ceb7376b85..ea5fff99a3 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -13,10 +14,13 @@ #include #include +#include #include #include #include #include +#include +#include #include @@ -24,23 +28,19 @@ namespace AWSGameLift { AWSGameLiftClientSystemComponent::AWSGameLiftClientSystemComponent() { - m_gameliftClientManager = AZStd::make_unique(); + m_gameliftManager = AZStd::make_unique(); + m_gameliftTicketTracker = AZStd::make_unique(); } void AWSGameLiftClientSystemComponent::Reflect(AZ::ReflectContext* context) { - ReflectCreateSessionRequest(context); - AWSGameLiftCreateSessionOnQueueRequest::Reflect(context); - AWSGameLiftCreateSessionRequest::Reflect(context); - AWSGameLiftJoinSessionRequest::Reflect(context); - AWSGameLiftSearchSessionsRequest::Reflect(context); - ReflectSearchSessionsResponse(context); + ReflectGameLiftMatchmaking(context); + ReflectGameLiftSession(context); if (AZ::SerializeContext* serialize = azrtti_cast(context)) { serialize->Class() - ->Version(0) - ; + ->Version(1); if (AZ::EditContext* editContext = serialize->GetEditContext()) { @@ -50,8 +50,7 @@ namespace AWSGameLift "Create the GameLift client manager that handles communication between game clients and the GameLift service.") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("System")) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ; + ->Attribute(AZ::Edit::Attributes::AutoExpand, true); } } @@ -63,33 +62,7 @@ namespace AWSGameLift {{{"Region", ""}}}) ->Event("CreatePlayerId", &AWSGameLiftRequestBus::Events::CreatePlayerId, {{{"IncludeBrackets", ""}, - {"IncludeDashes", ""}}}) - ; - behaviorContext->EBus("AWSGameLiftSessionAsyncRequestBus") - ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") - ->Event("CreateSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::CreateSessionAsync, - {{{"CreateSessionRequest", ""}}}) - ->Event("JoinSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::JoinSessionAsync, - {{{"JoinSessionRequest", ""}}}) - ->Event("SearchSessionsAsync", &AWSGameLiftSessionAsyncRequestBus::Events::SearchSessionsAsync, - {{{"SearchSessionsRequest", ""}}}) - ->Event("LeaveSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::LeaveSessionAsync) - ; - behaviorContext - ->EBus("AWSGameLiftSessionAsyncRequestNotificationBus") - ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") - ->Handler() - ; - behaviorContext->EBus("AWSGameLiftSessionRequestBus") - ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") - ->Event("CreateSession", &AWSGameLiftSessionRequestBus::Events::CreateSession, - {{{"CreateSessionRequest", ""}}}) - ->Event("JoinSession", &AWSGameLiftSessionRequestBus::Events::JoinSession, - {{{"JoinSessionRequest", ""}}}) - ->Event("SearchSessions", &AWSGameLiftSessionRequestBus::Events::SearchSessions, - {{{"SearchSessionsRequest", ""}}}) - ->Event("LeaveSession", &AWSGameLiftSessionRequestBus::Events::LeaveSession) - ; + {"IncludeDashes", ""}}}); } } @@ -119,12 +92,88 @@ namespace AWSGameLift void AWSGameLiftClientSystemComponent::Activate() { - m_gameliftClientManager->ActivateManager(); + AZ::Interface::Register(this); + + m_gameliftClient.reset(); + m_gameliftManager->ActivateManager(); + m_gameliftTicketTracker->ActivateTracker(); } void AWSGameLiftClientSystemComponent::Deactivate() { - m_gameliftClientManager->DeactivateManager(); + m_gameliftTicketTracker->DeactivateTracker(); + m_gameliftManager->DeactivateManager(); + m_gameliftClient.reset(); + + AZ::Interface::Unregister(this); + } + + void AWSGameLiftClientSystemComponent::ReflectGameLiftMatchmaking(AZ::ReflectContext* context) + { + AWSGameLiftAcceptMatchRequest::Reflect(context); + AWSGameLiftStartMatchmakingRequest::Reflect(context); + AWSGameLiftStopMatchmakingRequest::Reflect(context); + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("AWSGameLiftMatchmakingAsyncRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("AcceptMatchAsync", &AWSGameLiftMatchmakingAsyncRequestBus::Events::AcceptMatchAsync, + { { { "AcceptMatchRequest", "" } } }) + ->Event("StartMatchmakingAsync", &AWSGameLiftMatchmakingAsyncRequestBus::Events::StartMatchmakingAsync, + { { { "StartMatchmakingRequest", "" } } }) + ->Event("StopMatchmakingAsync", &AWSGameLiftMatchmakingAsyncRequestBus::Events::StopMatchmakingAsync, + { { { "StopMatchmakingRequest", "" } } }); + + behaviorContext->EBus("AWSGameLiftMatchmakingAsyncRequestNotificationBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Handler(); + + behaviorContext->EBus("AWSGameLiftMatchmakingRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("AcceptMatch", &AWSGameLiftMatchmakingRequestBus::Events::AcceptMatch, { { { "AcceptMatchRequest", "" } } }) + ->Event("StartMatchmaking", &AWSGameLiftMatchmakingRequestBus::Events::StartMatchmaking, + { { { "StartMatchmakingRequest", "" } } }) + ->Event("StopMatchmaking", &AWSGameLiftMatchmakingRequestBus::Events::StopMatchmaking, + { { { "StopMatchmakingRequest", "" } } }); + + behaviorContext->EBus("AWSGameLiftMatchAcceptanceNotificationBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Handler(); + } + } + + void AWSGameLiftClientSystemComponent::ReflectGameLiftSession(AZ::ReflectContext* context) + { + ReflectCreateSessionRequest(context); + AWSGameLiftCreateSessionOnQueueRequest::Reflect(context); + AWSGameLiftCreateSessionRequest::Reflect(context); + AWSGameLiftJoinSessionRequest::Reflect(context); + AWSGameLiftSearchSessionsRequest::Reflect(context); + ReflectSearchSessionsResponse(context); + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("AWSGameLiftSessionAsyncRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("CreateSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::CreateSessionAsync, + { { { "CreateSessionRequest", "" } } }) + ->Event("JoinSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::JoinSessionAsync, { { { "JoinSessionRequest", "" } } }) + ->Event("SearchSessionsAsync", &AWSGameLiftSessionAsyncRequestBus::Events::SearchSessionsAsync, + { { { "SearchSessionsRequest", "" } } }) + ->Event("LeaveSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::LeaveSessionAsync); + + behaviorContext->EBus("AWSGameLiftSessionAsyncRequestNotificationBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Handler(); + + behaviorContext->EBus("AWSGameLiftSessionRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("CreateSession", &AWSGameLiftSessionRequestBus::Events::CreateSession, { { { "CreateSessionRequest", "" } } }) + ->Event("JoinSession", &AWSGameLiftSessionRequestBus::Events::JoinSession, { { { "JoinSessionRequest", "" } } }) + ->Event("SearchSessions", &AWSGameLiftSessionRequestBus::Events::SearchSessions, { { { "SearchSessionsRequest", "" } } }) + ->Event("LeaveSession", &AWSGameLiftSessionRequestBus::Events::LeaveSession); + } } void AWSGameLiftClientSystemComponent::ReflectCreateSessionRequest(AZ::ReflectContext* context) @@ -174,9 +223,25 @@ namespace AWSGameLift } } - void AWSGameLiftClientSystemComponent::SetGameLiftClientManager(AZStd::unique_ptr gameliftClientManager) + AZStd::shared_ptr AWSGameLiftClientSystemComponent::GetGameLiftClient() const + { + return m_gameliftClient; + } + + void AWSGameLiftClientSystemComponent::SetGameLiftClient(AZStd::shared_ptr gameliftClient) + { + m_gameliftClient.swap(gameliftClient); + } + + void AWSGameLiftClientSystemComponent::SetGameLiftClientManager(AZStd::unique_ptr gameliftManager) + { + m_gameliftManager.reset(); + m_gameliftManager = AZStd::move(gameliftManager); + } + + void AWSGameLiftClientSystemComponent::SetGameLiftClientTicketTracker(AZStd::unique_ptr gameliftTicketTracker) { - m_gameliftClientManager.reset(); - m_gameliftClientManager = AZStd::move(gameliftClientManager); + m_gameliftTicketTracker.reset(); + m_gameliftTicketTracker = AZStd::move(gameliftTicketTracker); } } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h index bac24d44fa..30d4ee0106 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h @@ -11,6 +11,9 @@ #include #include +#include +#include + namespace AWSGameLift { class AWSGameLiftClientManager; @@ -18,6 +21,7 @@ namespace AWSGameLift //! Gem client system component. Responsible for creating the gamelift client manager. class AWSGameLiftClientSystemComponent : public AZ::Component + , public IAWSGameLiftInternalRequests { public: AZ_COMPONENT(AWSGameLiftClientSystemComponent, "{d481c15c-732a-4eea-9853-4965ed1bc2be}"); @@ -32,6 +36,10 @@ namespace AWSGameLift static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required); static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent); + // IAWSGameLiftInternalRequests interface implementation + AZStd::shared_ptr GetGameLiftClient() const override; + void SetGameLiftClient(AZStd::shared_ptr gameliftClient) override; + protected: //////////////////////////////////////////////////////////////////////// // AZ::Component interface implementation @@ -40,13 +48,19 @@ namespace AWSGameLift void Deactivate() override; //////////////////////////////////////////////////////////////////////// - void SetGameLiftClientManager(AZStd::unique_ptr gameliftClientManager); + void SetGameLiftClientManager(AZStd::unique_ptr gameliftManager); + void SetGameLiftClientTicketTracker(AZStd::unique_ptr gameliftTicketTracker); private: + static void ReflectGameLiftMatchmaking(AZ::ReflectContext* context); + static void ReflectGameLiftSession(AZ::ReflectContext* context); + static void ReflectCreateSessionRequest(AZ::ReflectContext* context); static void ReflectSearchSessionsResponse(AZ::ReflectContext* context); - AZStd::unique_ptr m_gameliftClientManager; + AZStd::shared_ptr m_gameliftClient; + AZStd::unique_ptr m_gameliftManager; + AZStd::unique_ptr m_gameliftTicketTracker; }; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftAcceptMatchRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftAcceptMatchRequest.cpp new file mode 100644 index 0000000000..8a8327b92b --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftAcceptMatchRequest.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AWSGameLift +{ + void AWSGameLiftAcceptMatchRequest::Reflect(AZ::ReflectContext* context) + { + AzFramework::AcceptMatchRequest::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftAcceptMatchRequest", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftAcceptMatchRequest") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("AcceptMatch", BehaviorValueProperty(&AWSGameLiftAcceptMatchRequest::m_acceptMatch)) + ->Property("PlayerIds", BehaviorValueProperty(&AWSGameLiftAcceptMatchRequest::m_playerIds)) + ->Property("TicketId", BehaviorValueProperty(&AWSGameLiftAcceptMatchRequest::m_ticketId)); + } + } +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionOnQueueRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionOnQueueRequest.cpp index 4f178f4655..a6cb024ba8 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionOnQueueRequest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionOnQueueRequest.cpp @@ -6,11 +6,12 @@ * */ +#include + +#include #include #include -#include - namespace AWSGameLift { void AWSGameLiftCreateSessionOnQueueRequest::Reflect(AZ::ReflectContext* context) diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionRequest.cpp index 4e21c0e711..1c9669e474 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionRequest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftCreateSessionRequest.cpp @@ -6,11 +6,12 @@ * */ +#include + +#include #include #include -#include - namespace AWSGameLift { void AWSGameLiftCreateSessionRequest::Reflect(AZ::ReflectContext* context) diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftJoinSessionRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftJoinSessionRequest.cpp index 4007093175..7d23a4b581 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftJoinSessionRequest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftJoinSessionRequest.cpp @@ -5,12 +5,12 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ +#include +#include #include #include -#include - namespace AWSGameLift { void AWSGameLiftJoinSessionRequest::Reflect(AZ::ReflectContext* context) diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftSearchSessionsRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftSearchSessionsRequest.cpp index f484a0b357..b78320dc32 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftSearchSessionsRequest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftSearchSessionsRequest.cpp @@ -6,13 +6,14 @@ * */ +#include +#include + +#include #include #include #include -#include -#include - namespace AWSGameLift { void AWSGameLiftSearchSessionsRequest::Reflect(AZ::ReflectContext* context) diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStartMatchmakingRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStartMatchmakingRequest.cpp new file mode 100644 index 0000000000..03d802fd36 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStartMatchmakingRequest.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AWSGameLift +{ + void AWSGameLiftPlayerInformation::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("latencyInMs", &AWSGameLiftPlayerInformation::m_latencyInMs) + ->Field("playerAttributes", &AWSGameLiftPlayerInformation::m_playerAttributes) + ->Field("playerId", &AWSGameLiftPlayerInformation::m_playerId) + ->Field("team", &AWSGameLiftPlayerInformation::m_team); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftPlayerInformation", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_latencyInMs, "LatencyInMs", + "A set of values, expressed in milliseconds, that indicates the amount of latency that" + "a player experiences when connected to AWS Regions") + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_playerAttributes, "PlayerAttributes", + "A collection of key:value pairs containing player information for use in matchmaking") + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_playerId, "PlayerId", + "A unique identifier for a player") + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_team, "Team", + "Name of the team that the player is assigned to in a match"); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftPlayerInformation") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("LatencyInMs", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_latencyInMs)) + ->Property("PlayerAttributes", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_playerAttributes)) + ->Property("PlayerId", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_playerId)) + ->Property("Team", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_team)); + } + } + + void AWSGameLiftStartMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + AzFramework::StartMatchmakingRequest::Reflect(context); + AWSGameLiftPlayerInformation::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("configurationName", &AWSGameLiftStartMatchmakingRequest::m_configurationName) + ->Field("players", &AWSGameLiftStartMatchmakingRequest::m_players); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftStartMatchmakingRequest", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &AWSGameLiftStartMatchmakingRequest::m_configurationName, "ConfigurationName", + "Name of the matchmaking configuration to use for this request") + ->DataElement(AZ::Edit::UIHandlers::Default, &AWSGameLiftStartMatchmakingRequest::m_players, "Players", + "Information on each player to be matched."); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftStartMatchmakingRequest") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("TicketId", BehaviorValueProperty(&AWSGameLiftStartMatchmakingRequest::m_ticketId)) + ->Property("ConfigurationName", BehaviorValueProperty(&AWSGameLiftStartMatchmakingRequest::m_configurationName)) + ->Property("Players", BehaviorValueProperty(&AWSGameLiftStartMatchmakingRequest::m_players)); + } + } +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStopMatchmakingRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStopMatchmakingRequest.cpp new file mode 100644 index 0000000000..bcea1fa8fe --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStopMatchmakingRequest.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AWSGameLift +{ + void AWSGameLiftStopMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + AzFramework::StopMatchmakingRequest::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftStopMatchmakingRequest", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftStopMatchmakingRequest") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("TicketId", BehaviorValueProperty(&AWSGameLiftStopMatchmakingRequest::m_ticketId)); + } + } +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftInternalRequests.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftInternalRequests.h new file mode 100644 index 0000000000..dbac9a798a --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftInternalRequests.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace Aws +{ + namespace GameLift + { + class GameLiftClient; + } +} // namespace Aws + +namespace AWSGameLift +{ + //! IAWSGameLiftRequests + //! GameLift Gem internal interface which is used to fetch gem global GameLift client + class IAWSGameLiftInternalRequests + { + public: + AZ_RTTI(IAWSGameLiftInternalRequests, "{DC0CC1C4-21EE-4A41-B428-D12D697F88A2}"); + + IAWSGameLiftInternalRequests() = default; + virtual ~IAWSGameLiftInternalRequests() = default; + + //! GetGameLiftClient + //! Get GameLift client to interact with Amazon GameLift service + //! @return Shared pointer to the GameLift client + virtual AZStd::shared_ptr GetGameLiftClient() const = 0; + + //! SetGameLiftClient + //! Set GameLift client to provided GameLift client + //! @param gameliftClient Input new GameLift client + virtual void SetGameLiftClient(AZStd::shared_ptr gameliftClient) = 0; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftMatchmakingInternalRequests.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftMatchmakingInternalRequests.h new file mode 100644 index 0000000000..81d04314af --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftMatchmakingInternalRequests.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AWSGameLift +{ + //! IAWSGameLiftMatchmakingInternalRequests + //! GameLift Gem matchmaking internal interfaces which is used to communicate + //! with client side ticket tracker to sync matchmaking ticket data and join + //! player to the match + class IAWSGameLiftMatchmakingInternalRequests + { + public: + AZ_RTTI(IAWSGameLiftMatchmakingInternalRequests, "{C2DA440E-74E0-411E-813D-5880B50B0C9E}"); + + IAWSGameLiftMatchmakingInternalRequests() = default; + virtual ~IAWSGameLiftMatchmakingInternalRequests() = default; + + //! StartPolling + //! Request to start process for polling matchmaking ticket based on given ticket id and player id + //! @param ticketId The requested matchmaking ticket id + //! @param playerId The requested matchmaking player id + virtual void StartPolling(const AZStd::string& ticketId, const AZStd::string& playerId) = 0; + + //! StopPolling + //! Request to stop process for polling matchmaking ticket + virtual void StopPolling() = 0; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp new file mode 100644 index 0000000000..6e688b28e3 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp @@ -0,0 +1,353 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include + +#include + +using namespace AWSGameLift; + +static constexpr const uint64_t TEST_RACKER_POLLING_PERIOD_MS = 100; +static constexpr const uint64_t TEST_WAIT_BUFFER_TIME_MS = 10; +static constexpr const uint64_t TEST_WAIT_MAXIMUM_TIME_MS = 10000; + +class TestAWSGameLiftClientLocalTicketTracker + : public AWSGameLiftClientLocalTicketTracker +{ +public: + TestAWSGameLiftClientLocalTicketTracker() = default; + virtual ~TestAWSGameLiftClientLocalTicketTracker() = default; + + void SetUp() + { + ActivateTracker(); + m_pollingPeriodInMS = TEST_RACKER_POLLING_PERIOD_MS; + } + + void TearDown() + { + DeactivateTracker(); + } + + bool IsTrackerIdle() + { + return m_status == TicketTrackerStatus::Idle; + } +}; + +class AWSGameLiftClientLocalTicketTrackerTest + : public AWSGameLiftClientFixture + , public IAWSGameLiftInternalRequests +{ +protected: + void SetUp() override + { + AWSGameLiftClientFixture::SetUp(); + + AZ::Interface::Register(this); + + m_gameliftClientMockPtr = AZStd::make_shared(); + m_gameliftClientTicketTracker = AZStd::make_unique(); + m_gameliftClientTicketTracker->SetUp(); + } + + void TearDown() override + { + m_gameliftClientTicketTracker->TearDown(); + m_gameliftClientTicketTracker.reset(); + m_gameliftClientMockPtr.reset(); + + AZ::Interface::Unregister(this); + + AWSGameLiftClientFixture::TearDown(); + } + + AZStd::shared_ptr GetGameLiftClient() const + { + return m_gameliftClientMockPtr; + } + + void SetGameLiftClient(AZStd::shared_ptr gameliftClient) + { + AZ_UNUSED(gameliftClient); + m_gameliftClientMockPtr.reset(); + } + + void WaitForProcessFinish(uint64_t expectedNum) + { + int processingTime = 0; + while (processingTime < TEST_WAIT_MAXIMUM_TIME_MS) + { + if (::UnitTest::TestRunner::Instance().m_numAssertsFailed == expectedNum) + { + AZ_TEST_STOP_TRACE_SUPPRESSION(expectedNum); + return; + } + AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(TEST_WAIT_BUFFER_TIME_MS)); + processingTime += TEST_WAIT_BUFFER_TIME_MS; + } + } + + void WaitForProcessFinish() + { + int processingTime = 0; + while (processingTime < TEST_WAIT_MAXIMUM_TIME_MS) + { + if (m_gameliftClientTicketTracker->IsTrackerIdle()) + { + return; + } + AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(TEST_WAIT_BUFFER_TIME_MS)); + processingTime += TEST_WAIT_BUFFER_TIME_MS; + } + } + +public: + AZStd::unique_ptr m_gameliftClientTicketTracker; + AZStd::shared_ptr m_gameliftClientMockPtr; +}; + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallWithoutClientSetup_GetExpectedErrors) +{ + AZ::Interface::Get()->SetGameLiftClient(nullptr); + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_MultipleCallsWithoutClientSetup_GetExpectedErrors) +{ + AZ::Interface::Get()->SetGameLiftClient(nullptr); + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButWithFailedOutcome_GetExpectedErrors) +{ + Aws::Client::AWSError error; + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(error); + + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallWithMoreThanOneTicket_GetExpectedErrors) +{ + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(Aws::GameLift::Model::MatchmakingTicket()); + result.AddTicketList(Aws::GameLift::Model::MatchmakingTicket()); + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallWithCompleteStatus_ProcessStopsAndGetExpectedResult) +{ + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + connectionInfo.AddMatchedPlayerSessions( + Aws::GameLift::Model::MatchedPlayerSession() + .WithPlayerId("player1") + .WithPlayerSessionId("playersession1")); + + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + SessionHandlingClientRequestsMock handlerMock; + EXPECT_CALL(handlerMock, RequestPlayerJoinSession(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(true)); + + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButNoPlayerSession_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButFailedToJoinMatch_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + connectionInfo.AddMatchedPlayerSessions( + Aws::GameLift::Model::MatchedPlayerSession() + .WithPlayerId("player1") + .WithPlayerSessionId("playersession1")); + + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + SessionHandlingClientRequestsMock handlerMock; + EXPECT_CALL(handlerMock, RequestPlayerJoinSession(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(false)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButTicketTimeOut_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::TIMED_OUT); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButTicketFailed_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::FAILED); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButTicketCancelled_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::CANCELLED); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallAndTicketCompleteAtLast_ProcessContinuesAndStop) +{ + Aws::GameLift::Model::MatchmakingTicket ticket1; + ticket1.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::QUEUED); + + Aws::GameLift::Model::DescribeMatchmakingResult result1; + result1.AddTicketList(ticket1); + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome1(result1); + + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + connectionInfo.AddMatchedPlayerSessions( + Aws::GameLift::Model::MatchedPlayerSession() + .WithPlayerId("player1") + .WithPlayerSessionId("playersession1")); + + Aws::GameLift::Model::MatchmakingTicket ticket2; + ticket2.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket2.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result2; + result2.AddTicketList(ticket2); + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome2(result2); + + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .WillOnce(::testing::Return(outcome1)) + .WillOnce(::testing::Return(outcome2)); + + SessionHandlingClientRequestsMock handlerMock; + EXPECT_CALL(handlerMock, RequestPlayerJoinSession(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(true)); + + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp index caa5113a25..e7612618ee 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp @@ -23,8 +23,7 @@ #include #include #include - -#include +#include using namespace AWSGameLift; @@ -117,38 +116,19 @@ public: MOCK_METHOD0(GetDefaultConfig, AWSCore::AwsApiJobConfig*()); }; -class TestAWSGameLiftClientManager - : public AWSGameLiftClientManager -{ -public: - TestAWSGameLiftClientManager() - { - m_gameliftClientMockPtr = nullptr; - } - ~TestAWSGameLiftClientManager() - { - m_gameliftClientMockPtr = nullptr; - } - - void SetUpMockClient() - { - m_gameliftClientMockPtr = AZStd::make_shared(); - SetGameLiftClient(m_gameliftClientMockPtr); - } - - AZStd::shared_ptr m_gameliftClientMockPtr; -}; - class AWSGameLiftClientManagerTest : public AWSGameLiftClientFixture + , public IAWSGameLiftInternalRequests { protected: void SetUp() override { AWSGameLiftClientFixture::SetUp(); - m_gameliftClientManager = AZStd::make_unique(); - m_gameliftClientManager->SetUpMockClient(); + AZ::Interface::Register(this); + + m_gameliftClientMockPtr = AZStd::make_shared(); + m_gameliftClientManager = AZStd::make_unique(); m_gameliftClientManager->ActivateManager(); } @@ -156,10 +136,24 @@ protected: { m_gameliftClientManager->DeactivateManager(); m_gameliftClientManager.reset(); + m_gameliftClientMockPtr.reset(); + + AZ::Interface::Unregister(this); AWSGameLiftClientFixture::TearDown(); } + AZStd::shared_ptr GetGameLiftClient() const + { + return m_gameliftClientMockPtr; + } + + void SetGameLiftClient(AZStd::shared_ptr gameliftClient) + { + AZ_UNUSED(gameliftClient); + m_gameliftClientMockPtr.reset(); + } + AWSGameLiftSearchSessionsRequest GetValidSearchSessionsRequest() { AWSGameLiftSearchSessionsRequest request; @@ -230,7 +224,8 @@ protected: } public: - AZStd::unique_ptr m_gameliftClientManager; + AZStd::unique_ptr m_gameliftClientManager; + AZStd::shared_ptr m_gameliftClientMockPtr; }; TEST_F(AWSGameLiftClientManagerTest, ConfigureGameLiftClient_CallWithoutRegion_GetFalseAsResult) @@ -319,7 +314,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSession_CallWithValidRequest_GetSucce Aws::GameLift::Model::CreateGameSessionResult result; result.SetGameSession(Aws::GameLift::Model::GameSession()); Aws::GameLift::Model::CreateGameSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); m_gameliftClientManager->CreateSession(request); @@ -331,7 +326,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSession_CallWithValidRequest_GetError request.m_aliasId = "dummyAlias"; Aws::Client::AWSError error; Aws::GameLift::Model::CreateGameSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -357,7 +352,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionAsync_CallWithValidRequest_Get Aws::GameLift::Model::CreateGameSessionResult result; result.SetGameSession(Aws::GameLift::Model::GameSession()); Aws::GameLift::Model::CreateGameSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -373,7 +368,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionAsync_CallWithValidRequest_Get request.m_aliasId = "dummyAlias"; Aws::Client::AWSError error; Aws::GameLift::Model::CreateGameSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -403,7 +398,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueue_CallWithValidRequest_G Aws::GameLift::Model::StartGameSessionPlacementResult result; result.SetGameSessionPlacement(Aws::GameLift::Model::GameSessionPlacement()); Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); m_gameliftClientManager->CreateSession(request); @@ -416,7 +411,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueue_CallWithValidRequest_G request.m_placementId = "dummyPlacementId"; Aws::Client::AWSError error; Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -434,7 +429,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueueAsync_CallWithValidRequ Aws::GameLift::Model::StartGameSessionPlacementResult result; result.SetGameSessionPlacement(Aws::GameLift::Model::GameSessionPlacement()); Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -451,7 +446,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueueAsync_CallWithValidRequ request.m_placementId = "dummyPlacementId"; Aws::Client::AWSError error; Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -489,7 +484,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequestButNoReques Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -505,7 +500,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequest_GetErrorOu request.m_playerId = "dummyPlayerId"; Aws::Client::AWSError error; Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -524,7 +519,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequestAndRequestH Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); auto response = m_gameliftClientManager->JoinSession(request); @@ -541,7 +536,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequestAndRequestH Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); auto response = m_gameliftClientManager->JoinSession(request); @@ -567,7 +562,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequestButNoR Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -586,7 +581,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequest_GetEr request.m_playerId = "dummyPlayerId"; Aws::Client::AWSError error; Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -608,7 +603,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequestAndReq Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -628,7 +623,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequestAndReq Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -642,7 +637,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessions_CallWithValidRequestAndError Aws::Client::AWSError error; Aws::GameLift::Model::SearchGameSessionsOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); @@ -657,7 +652,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessions_CallWithValidRequestAndSucce AWSGameLiftSearchSessionsRequest request = GetValidSearchSessionsRequest(); Aws::GameLift::Model::SearchGameSessionsOutcome outcome = GetValidSearchGameSessionsOutcome(); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); @@ -703,7 +698,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessionsAsync_CallWithValidRequestAnd Aws::Client::AWSError error; Aws::GameLift::Model::SearchGameSessionsOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); @@ -724,7 +719,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessionsAsync_CallWithValidRequestAnd EXPECT_CALL(coreHandlerMock, GetDefaultJobContext()).Times(1).WillOnce(::testing::Return(m_jobContext.get())); Aws::GameLift::Model::SearchGameSessionsOutcome outcome = GetValidSearchGameSessionsOutcome(); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h index a161168159..5c09f43e08 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include #include @@ -39,6 +41,7 @@ public: MOCK_CONST_METHOD1(CreateGameSession, Model::CreateGameSessionOutcome(const Model::CreateGameSessionRequest&)); MOCK_CONST_METHOD1(CreatePlayerSession, Model::CreatePlayerSessionOutcome(const Model::CreatePlayerSessionRequest&)); + MOCK_CONST_METHOD1(DescribeMatchmaking, Model::DescribeMatchmakingOutcome(const Model::DescribeMatchmakingRequest&)); MOCK_CONST_METHOD1(SearchGameSessions, Model::SearchGameSessionsOutcome(const Model::SearchGameSessionsRequest&)); MOCK_CONST_METHOD1(StartGameSessionPlacement, Model::StartGameSessionPlacementOutcome(const Model::StartGameSessionPlacementRequest&)); }; diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp index df6fb0d666..096a182819 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp @@ -13,10 +13,9 @@ #include #include +#include #include -#include - using namespace AWSGameLift; class AWSGameLiftClientManagerMock @@ -30,6 +29,17 @@ public: MOCK_METHOD0(DeactivateManager, void()); }; +class AWSGameLiftClientLocalTicketTrackerMock + : public AWSGameLiftClientLocalTicketTracker +{ +public: + AWSGameLiftClientLocalTicketTrackerMock() = default; + ~AWSGameLiftClientLocalTicketTrackerMock() = default; + + MOCK_METHOD0(ActivateTracker, void()); + MOCK_METHOD0(DeactivateTracker, void()); +}; + class TestAWSGameLiftClientSystemComponent : public AWSGameLiftClientSystemComponent { @@ -37,20 +47,29 @@ public: TestAWSGameLiftClientSystemComponent() { m_gameliftClientManagerMockPtr = nullptr; + m_gameliftClientTicketTrackerMockPtr = nullptr; } ~TestAWSGameLiftClientSystemComponent() { m_gameliftClientManagerMockPtr = nullptr; + m_gameliftClientTicketTrackerMockPtr = nullptr; } void SetUpMockManager() { - AZStd::unique_ptr gameliftClientManagerMock = AZStd::make_unique(); + AZStd::unique_ptr gameliftClientManagerMock = + AZStd::make_unique(); m_gameliftClientManagerMockPtr = gameliftClientManagerMock.get(); SetGameLiftClientManager(AZStd::move(gameliftClientManagerMock)); + + AZStd::unique_ptr gameliftClientTicketTrackerMock = + AZStd::make_unique(); + m_gameliftClientTicketTrackerMockPtr = gameliftClientTicketTrackerMock.get(); + SetGameLiftClientTicketTracker(AZStd::move(gameliftClientTicketTrackerMock)); } AWSGameLiftClientManagerMock* m_gameliftClientManagerMockPtr; + AWSGameLiftClientLocalTicketTrackerMock* m_gameliftClientTicketTrackerMockPtr; }; class AWSCoreSystemComponentMock @@ -145,8 +164,10 @@ TEST_F(AWSGameLiftClientSystemComponentTest, ActivateDeactivate_Call_GameLiftCli { m_entity->Init(); EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientManagerMockPtr), ActivateManager()).Times(1); + EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientTicketTrackerMockPtr), ActivateTracker()).Times(1); m_entity->Activate(); EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientManagerMockPtr), DeactivateManager()).Times(1); + EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientTicketTrackerMockPtr), DeactivateTracker()).Times(1); m_entity->Deactivate(); } diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake index 771bdf0c08..d3b9d8d1b9 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake @@ -7,10 +7,14 @@ # set(FILES + ../AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h + Include/Request/AWSGameLiftAcceptMatchRequest.h Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h Include/Request/AWSGameLiftCreateSessionRequest.h Include/Request/AWSGameLiftJoinSessionRequest.h Include/Request/AWSGameLiftSearchSessionsRequest.h + Include/Request/AWSGameLiftStartMatchmakingRequest.h + Include/Request/AWSGameLiftStopMatchmakingRequest.h Include/Request/IAWSGameLiftRequests.h Source/Activity/AWSGameLiftActivityUtils.cpp Source/Activity/AWSGameLiftActivityUtils.h @@ -24,12 +28,19 @@ set(FILES Source/Activity/AWSGameLiftLeaveSessionActivity.h Source/Activity/AWSGameLiftSearchSessionsActivity.cpp Source/Activity/AWSGameLiftSearchSessionsActivity.h + Source/AWSGameLiftClientLocalTicketTracker.cpp + Source/AWSGameLiftClientLocalTicketTracker.h Source/AWSGameLiftClientManager.cpp Source/AWSGameLiftClientManager.h Source/AWSGameLiftClientSystemComponent.cpp Source/AWSGameLiftClientSystemComponent.h + Source/Request/AWSGameLiftAcceptMatchRequest.cpp Source/Request/AWSGameLiftCreateSessionOnQueueRequest.cpp Source/Request/AWSGameLiftCreateSessionRequest.cpp Source/Request/AWSGameLiftJoinSessionRequest.cpp Source/Request/AWSGameLiftSearchSessionsRequest.cpp + Source/Request/AWSGameLiftStartMatchmakingRequest.cpp + Source/Request/AWSGameLiftStopMatchmakingRequest.cpp + Source/Request/IAWSGameLiftInternalRequests.h + Source/Request/IAWSGameLiftMatchmakingInternalRequests.h ) diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake index 6614eabb46..130ed28e4e 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake @@ -12,6 +12,7 @@ set(FILES Tests/Activity/AWSGameLiftJoinSessionActivityTest.cpp Tests/Activity/AWSGameLiftSearchSessionsActivityTest.cpp Tests/AWSGameLiftClientFixture.h + Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp Tests/AWSGameLiftClientManagerTest.cpp Tests/AWSGameLiftClientMocks.h Tests/AWSGameLiftClientSystemComponentTest.cpp diff --git a/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h b/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h index 588bd51380..e29df324d3 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h @@ -17,4 +17,5 @@ namespace AWSGameLift static const char* AWSGameLiftSessionStatusReasons[2] = { "NotSet", "Interrupted" }; static constexpr const char AWSGameLiftErrorMessageTemplate[] = "Exception: %s, Message: %s"; + static constexpr const char AWSGameLiftClientMissingErrorMessage[] = "GameLift client is not configured yet."; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py b/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py index 69f74e709e..67fa2aa054 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py @@ -52,6 +52,7 @@ class AWSGameLift(core.Construct): stack_name=stack_name, fleet_configurations=fleet_configurations, create_game_session_queue=self.node.try_get_context('create_game_session_queue') == 'true', + flex_match=self.node.try_get_context('flex_match') == 'true', description=f'Contains resources for the AWS GameLift Gem stack as part of the {project_name} project', tags=tags, env=env diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/__init__.py b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/__init__.py new file mode 100644 index 0000000000..50cbb262dd --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/__init__.py @@ -0,0 +1,6 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/flexmatch_configurations.py b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/flexmatch_configurations.py new file mode 100644 index 0000000000..436089b2c0 --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/flexmatch_configurations.py @@ -0,0 +1,30 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + +# Matchmaking rule formatted as a JSON string. +# Comments are not allowed in JSON, but most elements support a description field. +# For instructions on designing Matchmaking rule sets, please check: +# https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-design-ruleset.html +RULE_SET_BODY = '{"ruleLanguageVersion":"1.0","teams":[{"name":"Players","maxPlayers":4,"minPlayers":2}]}' + +# A flag that determines whether a match that was created with this configuration +# must be accepted by the matched players. +ACCEPTANCE_REQUIRED = False + +# The maximum duration, in seconds, that a matchmaking ticket can remain in process before timing out. +# Requests that fail due to timing out can be resubmitted as needed. +REQUEST_TIMEOUT_SECONDS = 300 + +# The number of player slots in a match to keep open for future players. +# This parameter is not used if FlexMatchMode is set to STANDALONE. +ADDITIONAL_PLAYER_COUNT = 2 + +# The method used to backfill game sessions that are created with this matchmaking configuration. +# Specify MANUAL when your game manages backfill requests manually or does not use the match backfill feature. +# Specify AUTOMATIC to have GameLift create a StartMatchBackfill request whenever a game session has one or more +# open slots. +BACKFILL_MODE = 'AUTOMATIC' diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/matchmaking.py b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/matchmaking.py new file mode 100644 index 0000000000..abdaef6713 --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/matchmaking.py @@ -0,0 +1,60 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + +import typing + +from aws_cdk import ( + core, + aws_gamelift as gamelift +) + +from . import flexmatch_configurations + +FLEX_MATCH_MODE = 'WITH_QUEUE' + + +class MatchmakingResoures: + """ + Create a matchmaking rule set and matchmaking configuration for Gamelift FlexMatch. + For more information about Gamelift FlexMatch, please check + https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-intro.html + """ + def __init__(self, stack: core.Stack, game_session_queue_arns: typing.List[str]): + rule_set = gamelift.CfnMatchmakingRuleSet( + scope=stack, + id='MatchmakingRuleSet', + name=f'{stack.stack_name}-MatchmakingRuleSet', + rule_set_body=flexmatch_configurations.RULE_SET_BODY + ) + + matchmaking_configuration = gamelift.CfnMatchmakingConfiguration( + scope=stack, + id='MatchmakingConfiguration', + acceptance_required=flexmatch_configurations.ACCEPTANCE_REQUIRED, + name=f'{stack.stack_name}-MatchmakingConfiguration', + request_timeout_seconds=flexmatch_configurations.REQUEST_TIMEOUT_SECONDS, + rule_set_name=rule_set.name, + additional_player_count=flexmatch_configurations.ADDITIONAL_PLAYER_COUNT, + backfill_mode=flexmatch_configurations.BACKFILL_MODE, + flex_match_mode=FLEX_MATCH_MODE, + game_session_queue_arns=game_session_queue_arns if len(game_session_queue_arns) else None + ) + matchmaking_configuration.node.add_dependency(rule_set) + + # Export the matchmaking rule set and configuration names as stack outputs + core.CfnOutput( + stack, + id='MatchmakingRuleSetName', + description='Name of the matchmaking rule set', + export_name=f'{stack.stack_name}:MatchmakingRuleSet', + value=rule_set.name) + core.CfnOutput( + stack, + id='MatchmakingConfigurationName', + description='Name of the matchmaking configuration', + export_name=f'{stack.stack_name}:MatchmakingConfiguration', + value=matchmaking_configuration.name) diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/__init__.py b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/__init__.py new file mode 100644 index 0000000000..50cbb262dd --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/__init__.py @@ -0,0 +1,6 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/game_session_queue.py b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/game_session_queue.py new file mode 100644 index 0000000000..3b06359b68 --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/game_session_queue.py @@ -0,0 +1,43 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" +import typing + +from aws_cdk import ( + core, + aws_gamelift as gamelift +) + + +class GameSessionQueueResources: + """ + Create a game session queue which fulfills game session placement requests using the fleets. + For more information about Gamelift game session queues, please check + https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-intro.html + """ + def __init__(self, stack: core.Stack, destinations: typing.List): + self._game_session_queue = gamelift.CfnGameSessionQueue( + scope=stack, + id=f'{stack.stack_name}-GameLiftQueue', + name=f'{stack.stack_name}-GameLiftQueue', + destinations=[ + gamelift.CfnGameSessionQueue.DestinationProperty( + destination_arn=resource_arn + ) for resource_arn in destinations + ] + ) + + # Export the game session queue name as a stack output + core.CfnOutput( + scope=stack, + id='GameSessionQueue', + description='Name of the game session queue', + export_name=f'{stack.stack_name}:GameSessionQueue', + value=self._game_session_queue.name) + + @property + def game_session_queue_arn(self) -> str: + return self._game_session_queue.attr_arn diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py b/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py index b6cfa44d8a..e2e115fe38 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py @@ -5,10 +5,13 @@ For complete copyright and license terms please see the LICENSE at the root of t SPDX-License-Identifier: Apache-2.0 OR MIT """ -import typing +from aws_cdk import ( + core, + aws_gamelift as gamelift +) -from aws_cdk import core -from aws_cdk import aws_gamelift as gamelift +from .flexmatch import matchmaking +from .game_session_queue import game_session_queue class GameLiftStack(core.Stack): @@ -19,7 +22,9 @@ class GameLiftStack(core.Stack): """ def __init__(self, scope: core.Construct, id_: str, stack_name: str, fleet_configurations: dict, - create_game_session_queue: bool, **kwargs) -> None: + create_game_session_queue: bool, + flex_match: bool, + **kwargs) -> None: super().__init__(scope, id_, **kwargs) self._stack_name = stack_name @@ -50,7 +55,7 @@ class GameLiftStack(core.Stack): queue_destinations.append(destination_arn) # Export the GameLift fleet ids as a stack output - fleets_output = core.CfnOutput( + core.CfnOutput( self, id='GameLiftFleets', description='List of GameLift fleet ids', @@ -58,17 +63,13 @@ class GameLiftStack(core.Stack): value=','.join(fleet_ids) ) - if create_game_session_queue: - # Create a game session queue which fulfills game session placement requests using the fleets - game_session_queue = self._create_game_session_queue(queue_destinations) + game_session_queue_arns = [] + if flex_match or create_game_session_queue: + queue = game_session_queue.GameSessionQueueResources(self, queue_destinations) + game_session_queue_arns.append(queue.game_session_queue_arn) - # Export the game session queue name as a stack output - game_session_queue_output = core.CfnOutput( - self, - id='GameSessionQueue', - description='Name of the game session queue', - export_name=f'{self._stack_name}:GameSessionQueue', - value=game_session_queue.name) + if flex_match: + matchmaking.MatchmakingResoures(self, game_session_queue_arns) def _create_fleet(self, fleet_configuration: dict, identifier: int) -> gamelift.CfnFleet: """ @@ -155,25 +156,3 @@ class GameLiftStack(core.Stack): ) return alias - - def _create_game_session_queue(self, destinations: typing.List) -> gamelift.CfnGameSessionQueue: - """ - Create a placement queue that processes requests for new game sessions. - :param destinations: Destinations of the queue. - :return: Generated GameLift game session queue. - """ - game_session_queue = gamelift.CfnGameSessionQueue( - self, - id=f'{self._stack_name}-GameLiftQueue', - name=f'{self._stack_name}-game-session-queue', - destinations=[ - gamelift.CfnGameSessionQueue.DestinationProperty( - destination_arn=resource_arn - ) for resource_arn in destinations - ] - ) - - return game_session_queue - - - diff --git a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp index 7e4ec05aba..bc8ff9a42e 100644 --- a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp +++ b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp @@ -22,7 +22,7 @@ namespace AWSMetrics AZStd::string IdentityProvider::GetEngineVersion() { - static constexpr const char* EngineConfigFilePath = "@root@/engine.json"; + static constexpr const char* EngineConfigFilePath = "@products@/engine.json"; static constexpr const char* EngineVersionJsonKey = "O3DEVersion"; AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetDirectInstance(); diff --git a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h index 6b7c809601..b77f39c93c 100644 --- a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h +++ b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h @@ -16,8 +16,8 @@ #include #include #include +#include #include -#include namespace AWSMetrics { @@ -34,15 +34,22 @@ namespace AWSMetrics // Set up the file IO and alias m_localFileIO = aznew AZ::IO::LocalFileIO(); m_priorFileIO = AZ::IO::FileIOBase::GetInstance(); - // we need to set it to nullptr first because otherwise the + // we need to set it to nullptr first because otherwise the // underneath code assumes that we might be leaking the previous instance AZ::IO::FileIOBase::SetInstance(nullptr); AZ::IO::FileIOBase::SetInstance(m_localFileIO); - const AZStd::string engineRoot = AZ::Test::GetEngineRootPath(); - m_localFileIO->SetAlias("@devroot@", engineRoot.c_str()); - m_localFileIO->SetAlias("@root@", engineRoot.c_str()); - m_localFileIO->SetAlias("@user@", GetTestFolderPath().c_str()); + const AZ::IO::Path engineRoot = AZ::Test::GetEngineRootPath(); + const auto productAssetPath = GetTestFolderPath() / "Cache"; + const auto userPath = GetTestFolderPath() / "user"; + m_localFileIO->CreatePath(productAssetPath.c_str()); + m_localFileIO->CreatePath(userPath.c_str()); + m_localFileIO->SetAlias("@engroot@", engineRoot.c_str()); + m_localFileIO->SetAlias("@products@", productAssetPath.c_str()); + m_localFileIO->SetAlias("@user@", userPath.c_str()); + // Copy engine.json to the cache + EXPECT_TRUE(m_localFileIO->Copy((engineRoot / "engine.json").c_str(), "engine.json")); + m_serializeContext = AZStd::make_unique(); m_registrationContext = AZStd::make_unique(); @@ -69,6 +76,13 @@ namespace AWSMetrics m_serializeContext.reset(); m_registrationContext.reset(); + const auto productAssetPath = GetTestFolderPath() / "Cache"; + const auto userPath = GetTestFolderPath() / "user"; + // Clear the product asset cache alias to prevent cache write errors + m_localFileIO->ClearAlias("@products@"); + m_localFileIO->DestroyPath(userPath.c_str()); + m_localFileIO->DestroyPath(productAssetPath.c_str()); + AZ::IO::FileIOBase::SetInstance(nullptr); delete m_localFileIO; AZ::IO::FileIOBase::SetInstance(m_priorFileIO); @@ -97,22 +111,22 @@ namespace AWSMetrics bool CreateFile(const AZStd::string& filePath, const AZStd::string& content) { AZ::IO::HandleType fileHandle; + // Suppress errors about writing to product asset cache + AZ_TEST_START_TRACE_SUPPRESSION; if (!m_localFileIO->Open(filePath.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText, fileHandle)) { return false; } m_localFileIO->Write(fileHandle, content.c_str(), content.size()); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; m_localFileIO->Close(fileHandle); return true; } AZStd::string GetDefaultTestFilePath() { - AZStd::string testFilePath = GetTestFolderPath(); - AzFramework::StringFunc::Path::Join(testFilePath.c_str(), "Test.json", testFilePath); - - return testFilePath; + return (GetTestFolderPath() / "Test.json").Native(); } bool RemoveFile(const AZStd::string& filePath) @@ -133,14 +147,16 @@ namespace AWSMetrics AZ::IO::FileIOBase* m_priorFileIO = nullptr; AZ::IO::FileIOBase* m_localFileIO = nullptr; + AZ::Test::ScopedAutoTempDirectory m_testDirectory; AZStd::unique_ptr m_serializeContext; AZStd::unique_ptr m_registrationContext; AZStd::unique_ptr m_settingsRegistry; private: - AZStd::string GetTestFolderPath() + AZ::IO::Path GetTestFolderPath() { - return AZ_TRAIT_TEST_ROOT_FOLDER; + AZ::IO::Path testPathString{ m_testDirectory.GetDirectory() }; + return testPathString; } }; } diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.cpp index f111b972e4..798da14aa1 100644 --- a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.cpp +++ b/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include /////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp b/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp index b4bf68bac1..56f28856af 100644 --- a/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp +++ b/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp @@ -142,14 +142,14 @@ namespace AssetValidation system.GetIConsole()->AddCommand("addseedlist", ConsoleCommandAddSeedList); system.GetIConsole()->AddCommand("removeseedlist", ConsoleCommandRemoveSeedList); system.GetIConsole()->AddCommand("printexcluded", ConsoleCommandTogglePrintExcluded); - } + } bool AssetValidationSystemComponent::IsKnownAsset(const char* assetPath) { AZStd::string lowerAsset{ assetPath }; AZStd::replace(lowerAsset.begin(), lowerAsset.end(), AZ_WRONG_DATABASE_SEPARATOR, AZ_CORRECT_DATABASE_SEPARATOR); - const AZStd::vector prefixes = { "./", "@assets@/" }; + const AZStd::vector prefixes = { "./", "@products@/" }; for (const AZStd::string& prefix : prefixes) { if (lowerAsset.starts_with(prefix)) @@ -392,7 +392,7 @@ namespace AssetValidation AssetValidationRequestBus::Broadcast(&AssetValidationRequestBus::Events::AddSeedList, seedfilepath); } - bool AssetValidationSystemComponent::AddSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) + bool AssetValidationSystemComponent::AddSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) { for (const AzFramework::SeedInfo& thisSeed : seedList) { @@ -401,7 +401,7 @@ namespace AssetValidation return true; } - bool AssetValidationSystemComponent::RemoveSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) + bool AssetValidationSystemComponent::RemoveSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) { AssetValidationRequests::AssetSourceList removeList; for (const AzFramework::SeedInfo& thisSeed : seedList) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp index 3493099d4c..924c01b916 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp @@ -244,7 +244,7 @@ namespace ImageProcessingAtom } AZ::IO::FixedMaxPath projectConfigFolder; - if (auto sourceGameRoot = fileIoBase->ResolvePath("@devassets@"); sourceGameRoot.has_value()) + if (auto sourceGameRoot = fileIoBase->ResolvePath("@projectroot@"); sourceGameRoot.has_value()) { projectConfigFolder = *sourceGameRoot; projectConfigFolder /= s_projectConfigRelativeFolder; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp index c4240306c4..c72e1dc309 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp @@ -860,8 +860,9 @@ namespace UnitTest { continue; } - +#if defined(AZ_ENABLE_TRACING) auto formatInfo = CPixelFormats::GetInstance().GetPixelFormatInfo(pixelFormat); +#endif ColorSpace sourceColorSpace = srcImage->HasImageFlags(EIF_SRGBRead) ? ColorSpace::sRGB : ColorSpace::linear; ICompressorPtr compressor = ICompressor::FindCompressor(pixelFormat, sourceColorSpace, true); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset index e0d043cf20..fe2e7e0cb4 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset @@ -40,6 +40,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "MipMapSetting": { @@ -61,6 +62,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "MipMapSetting": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset index 8c196530e9..19d2b2bbe6 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset @@ -37,6 +37,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -56,6 +57,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset index 638e31f838..d5acef34d6 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset @@ -28,6 +28,7 @@ "_amb", "_ambientocclusion" ], + "MaxTextureSize": 2048, "PixelFormat": "ASTC_4x4" }, "ios": { @@ -41,6 +42,7 @@ "_amb", "_ambientocclusion" ], + "MaxTextureSize": 2048, "PixelFormat": "ASTC_4x4" }, "mac": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset index 628cd673e9..e2e009afc5 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset @@ -25,6 +25,7 @@ "_decal" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -39,6 +40,7 @@ "_decal" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset index 8f21ad005b..28ac84d646 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset @@ -46,6 +46,7 @@ "_h" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "SizeReduceLevel": 3, @@ -71,6 +72,7 @@ "_h" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "MipMapSetting": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset index 8f6c846e82..f5e3a79357 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset @@ -30,6 +30,7 @@ "_emit" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true }, "ios": { @@ -44,6 +45,7 @@ "_emit" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true }, "mac": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset index 46e97c3443..a960ae41b2 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset @@ -28,6 +28,7 @@ "_bump" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipRenormalize": true, "MipMapSetting": { @@ -43,6 +44,7 @@ "_bump" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipRenormalize": true, "MipMapSetting": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset index b8f6e38ac1..2c66cf9190 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset @@ -39,6 +39,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "MipRenormalize": true, @@ -60,6 +61,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "MipRenormalize": true, diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset index 58bb02cd72..f7cba42886 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset @@ -32,6 +32,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "UseLegacyGloss": true, @@ -50,6 +51,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "UseLegacyGloss": true, diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset index 8b66b30f28..53998583cc 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset @@ -45,6 +45,7 @@ "_blend" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -68,6 +69,7 @@ "_blend" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset index e9ea34060b..2ac88dca85 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset @@ -58,6 +58,7 @@ "_rough" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -87,6 +88,7 @@ "_rough" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset index e868a44096..7a0c137f07 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset @@ -23,6 +23,7 @@ "_spec" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -35,6 +36,7 @@ "_spec" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset index e52b616f48..f59fd594f4 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset @@ -27,6 +27,7 @@ "_refl" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -41,6 +42,7 @@ "_refl" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp index 2babba1ecc..3bc63b89a0 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp @@ -228,9 +228,9 @@ namespace AZ response.m_createJobOutputs.push_back(jobDescriptor); } // for all request.m_enabledPlatforms - const AZStd::sys_time_t createJobsEndStamp = AZStd::GetTimeNowMicroSecond(); - const u64 createJobDurationMicros = createJobsEndStamp - shaderAssetBuildTimestamp; - AZ_TracePrintf(ShaderAssetBuilderName, "CreateJobs for %s took %llu microseconds", fullPath.c_str(), createJobDurationMicros ); + AZ_TracePrintf( + ShaderAssetBuilderName, "CreateJobs for %s took %llu microseconds", fullPath.c_str(), + AZStd::GetTimeNowMicroSecond() - shaderAssetBuildTimestamp); response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success; } diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp index 7c5be89508..27ae90dcdc 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp @@ -139,16 +139,16 @@ namespace AZ //! Validates if a given .shadervariantlist file is located at the correct path for a given .shader full path. //! There are two valid paths: //! 1- Lower Precedence: The same folder where the .shader file is located. - //! 2- Higher Precedence: //ShaderVariants/. + //! 2- Higher Precedence: /ShaderVariants/. //! The "Higher Precedence" path gives the option to game projects to override what variants to generate. If this //! file exists then the "Lower Precedence" path is disregarded. //! A .shader full path is located under an AP scan folder. - //! Example: "/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shader" - //! - In this example the Scan Folder is "/Gems/Atom/Feature/Common/Assets", while the subfolder is "Materials/Types". + //! Example: "/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shader" + //! - In this example the Scan Folder is "/Gems/Atom/Feature/Common/Assets", while the subfolder is "Materials/Types". //! The "Higher Precedence" expected valid location for the .shadervariantlist would be: - //! - //ShaderVariants/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. + //! - //ShaderVariants/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. //! The "Lower Precedence" valid location would be: - //! - /Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. + //! - /Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. //! @shouldExitEarlyFromProcessJob [out] Set to true if ProcessJob should do no work but return successfully. //! Set to false if ProcessJob should do work and create assets. //! When @shaderVariantListFileFullPath is provided by a Gem/Feature instead of the Game Project @@ -169,17 +169,13 @@ namespace AZ AZStd::string shaderVariantListFileRelativePath = shaderProductFileRelativePath; AzFramework::StringFunc::Path::ReplaceExtension(shaderVariantListFileRelativePath, RPI::ShaderVariantListSourceData::Extension); - const char * gameProjectPath = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(gameProjectPath, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); + AZ::IO::FixedMaxPath gameProjectPath = AZ::Utils::GetProjectPath(); - AZStd::string expectedHigherPrecedenceFileFullPath; - AzFramework::StringFunc::Path::Join(gameProjectPath, RPI::ShaderVariantTreeAsset::CommonSubFolder, expectedHigherPrecedenceFileFullPath, false /* handle directory overlap? */, false /* be case insensitive? */); - AzFramework::StringFunc::Path::Join(expectedHigherPrecedenceFileFullPath.c_str(), shaderProductFileRelativePath.c_str(), expectedHigherPrecedenceFileFullPath, false /* handle directory overlap? */, false /* be case insensitive? */); - AzFramework::StringFunc::Path::ReplaceExtension(expectedHigherPrecedenceFileFullPath, AZ::RPI::ShaderVariantListSourceData::Extension); - AzFramework::StringFunc::Path::Normalize(expectedHigherPrecedenceFileFullPath); + auto expectedHigherPrecedenceFileFullPath = (gameProjectPath + / RPI::ShaderVariantTreeAsset::CommonSubFolder / shaderProductFileRelativePath).LexicallyNormal(); + expectedHigherPrecedenceFileFullPath.ReplaceExtension(AZ::RPI::ShaderVariantListSourceData::Extension); - AZStd::string normalizedShaderVariantListFileFullPath = shaderVariantListFileFullPath; - AzFramework::StringFunc::Path::Normalize(normalizedShaderVariantListFileFullPath); + auto normalizedShaderVariantListFileFullPath = AZ::IO::FixedMaxPath(shaderVariantListFileFullPath).LexicallyNormal(); if (expectedHigherPrecedenceFileFullPath == normalizedShaderVariantListFileFullPath) { @@ -203,23 +199,15 @@ namespace AZ } // Check the "Lower Precedence" case, .shader path == .shadervariantlist path. - AZStd::string normalizedShaderFileFullPath = shaderFileFullPath; - AzFramework::StringFunc::Path::Normalize(normalizedShaderFileFullPath); - - AZStd::string normalizedShaderFileFullPathWithoutExtension = normalizedShaderFileFullPath; - AzFramework::StringFunc::Path::StripExtension(normalizedShaderFileFullPathWithoutExtension); - - AZStd::string normalizedShaderVariantListFileFullPathWithoutExtension = normalizedShaderVariantListFileFullPath; - AzFramework::StringFunc::Path::StripExtension(normalizedShaderVariantListFileFullPathWithoutExtension); - -#if AZ_TRAIT_OS_USE_WINDOWS_FILE_PATHS - //In certain circumstances, the capitalization of the drive letter may not match - const bool caseSensitive = false; -#else - //On the other platforms there's no drive letter, so it should be a non-issue. - const bool caseSensitive = true; -#endif - if (!StringFunc::Equal(normalizedShaderFileFullPathWithoutExtension.c_str(), normalizedShaderVariantListFileFullPathWithoutExtension.c_str(), caseSensitive)) + AZ::IO::Path normalizedShaderFileFullPath = AZ::IO::Path(shaderFileFullPath).LexicallyNormal(); + + auto normalizedShaderFileFullPathWithoutExtension = normalizedShaderFileFullPath; + normalizedShaderFileFullPathWithoutExtension.ReplaceExtension(""); + + auto normalizedShaderVariantListFileFullPathWithoutExtension = normalizedShaderVariantListFileFullPath; + normalizedShaderVariantListFileFullPathWithoutExtension.ReplaceExtension(""); + + if (normalizedShaderFileFullPathWithoutExtension != normalizedShaderVariantListFileFullPathWithoutExtension) { AZ_Error(ShaderVariantAssetBuilderName, false, "For shader file at path [%s], the shader variant list [%s] is expected to be located at [%s.%s] or [%s]" , normalizedShaderFileFullPath.c_str(), normalizedShaderVariantListFileFullPath.c_str(), diff --git a/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapNotificationBus.h b/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapNotificationBus.h index f4ce51fc02..e40bf39923 100644 --- a/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapNotificationBus.h +++ b/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapNotificationBus.h @@ -56,8 +56,7 @@ namespace AZ ////////////////////////////////////////////////////////////////////////// - virtual void OnBootstrapSceneReady([[maybe_unused]]AZ::RPI::Scene* bootstrapScene){} - virtual void OnFrameRateLimitChanged([[maybe_unused]]float fpsLimit){} + virtual void OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene) = 0; }; using NotificationBus = AZ::EBus; } // namespace Bootstrap diff --git a/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapRequestBus.h b/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapRequestBus.h index fbf3bad935..21cc91420b 100644 --- a/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapRequestBus.h +++ b/Gems/Atom/Bootstrap/Code/Include/Atom/Bootstrap/BootstrapRequestBus.h @@ -23,8 +23,6 @@ namespace AZ::Render::Bootstrap virtual AZ::RPI::ScenePtr GetOrCreateAtomSceneFromAzScene(AzFramework::Scene* scene) = 0; virtual bool EnsureDefaultRenderPipelineInstalledForScene(AZ::RPI::ScenePtr scene, AZ::RPI::ViewportContextPtr viewportContext) = 0; - virtual float GetFrameRateLimit() const = 0; - virtual void SetFrameRateLimit(float fpsLimit) = 0; protected: ~Request() = default; diff --git a/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp b/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp index 8a6b7db1ca..8f2ff264e5 100644 --- a/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp +++ b/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp @@ -42,14 +42,7 @@ #include #include -static void OnFrameRateLimitChanged(const float& fpsLimit) -{ - AZ::Render::Bootstrap::RequestBus::Broadcast( - &AZ::Render::Bootstrap::RequestBus::Events::SetFrameRateLimit, fpsLimit); -} - AZ_CVAR(AZ::CVarFixedString, r_default_pipeline_name, AZ_TRAIT_BOOTSTRAPSYSTEMCOMPONENT_PIPELINE_NAME, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Default Render pipeline name"); -AZ_CVAR(float, r_fps_limit, 0, OnFrameRateLimitChanged, AZ::ConsoleFunctorFlags::Null, "The maximum framerate to render at, or 0 for unlimited"); namespace AZ { @@ -95,6 +88,7 @@ namespace AZ dependent.push_back(AZ_CRC("CoreLightsService", 0x91932ef6)); dependent.push_back(AZ_CRC("DynamicDrawService", 0x023c1673)); dependent.push_back(AZ_CRC("CommonService", 0x6398eec4)); + dependent.push_back(AZ_CRC_CE("HairService")); } void BootstrapSystemComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) @@ -358,22 +352,6 @@ namespace AZ return true; } - float BootstrapSystemComponent::GetFrameRateLimit() const - { - return r_fps_limit; - } - - void BootstrapSystemComponent::SetFrameRateLimit(float fpsLimit) - { - r_fps_limit = fpsLimit; - if (m_viewportContext) - { - m_viewportContext->SetFpsLimit(r_fps_limit); - } - Render::Bootstrap::NotificationBus::Broadcast( - &Render::Bootstrap::NotificationBus::Events::OnFrameRateLimitChanged, fpsLimit); - } - void BootstrapSystemComponent::CreateDefaultRenderPipeline() { EnsureDefaultRenderPipelineInstalledForScene(m_defaultScene, m_viewportContext); @@ -413,11 +391,23 @@ namespace AZ } void BootstrapSystemComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] ScriptTimePoint time) - { } + { + // Temp: When running in the launcher without the legacy renderer + // we need to call RenderTick on the viewport context each frame. + if (m_viewportContext) + { + AZ::ApplicationTypeQuery appType; + ComponentApplicationBus::Broadcast(&AZ::ComponentApplicationBus::Events::QueryApplicationType, appType); + if (appType.IsGame()) + { + m_viewportContext->RenderTick(); + } + } + } int BootstrapSystemComponent::GetTickOrder() { - return TICK_PRE_RENDER; + return TICK_LAST; } void BootstrapSystemComponent::OnWindowClosed() diff --git a/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.h b/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.h index 438c6cb236..566d19b1a4 100644 --- a/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.h +++ b/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.h @@ -69,8 +69,6 @@ namespace AZ // Render::Bootstrap::RequestBus::Handler overrides ... AZ::RPI::ScenePtr GetOrCreateAtomSceneFromAzScene(AzFramework::Scene* scene) override; bool EnsureDefaultRenderPipelineInstalledForScene(AZ::RPI::ScenePtr scene, AZ::RPI::ViewportContextPtr viewportContext) override; - float GetFrameRateLimit() const override; - void SetFrameRateLimit(float fpsLimit) override; protected: // Component overrides ... diff --git a/Gems/Atom/Component/DebugCamera/Code/Source/ArcBallControllerComponent.cpp b/Gems/Atom/Component/DebugCamera/Code/Source/ArcBallControllerComponent.cpp index 040338ab6f..904d6e0c2f 100644 --- a/Gems/Atom/Component/DebugCamera/Code/Source/ArcBallControllerComponent.cpp +++ b/Gems/Atom/Component/DebugCamera/Code/Source/ArcBallControllerComponent.cpp @@ -9,6 +9,7 @@ #include +#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Assets/Materials/ReflectionProbe/ReflectionProbeVisualization.materialtype b/Gems/Atom/Feature/Common/Assets/Materials/ReflectionProbe/ReflectionProbeVisualization.materialtype index 9a2edc9fca..17209771e5 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/ReflectionProbe/ReflectionProbeVisualization.materialtype +++ b/Gems/Atom/Feature/Common/Assets/Materials/ReflectionProbe/ReflectionProbeVisualization.materialtype @@ -5,7 +5,7 @@ "properties": { "general": [ { - "id": "texcoord", + "name": "texcoord", "displayName": "Texture Coordinate Stream", "description": "Which UV channel to use when sampling textures.", "type": "Int", @@ -14,75 +14,75 @@ "max": 8 }, { - "id": "enableShadows", + "name": "enableShadows", "displayName": "Enable Shadows", "description": "Whether to use the shadow maps.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_enableShadows" + "name": "o_enableShadows" } }, { - "id": "enableDirectionalLights", + "name": "enableDirectionalLights", "displayName": "Enable Directional Lights", "description": "Whether to use directional lights.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_enableDirectionalLights" + "name": "o_enableDirectionalLights" } }, { - "id": "enablePunctualLights", + "name": "enablePunctualLights", "displayName": "Enable Punctual Lights", "description": "Whether to use punctual lights.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_enablePunctualLights" + "name": "o_enablePunctualLights" } }, { - "id": "enableAreaLights", + "name": "enableAreaLights", "displayName": "Enable Area Lights", "description": "Whether to use area lights.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_enableAreaLights" + "name": "o_enableAreaLights" } }, { - "id": "enableIBL", + "name": "enableIBL", "displayName": "Enable IBL", "description": "Whether to use Image Based Lighting (IBL).", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableIBL" + "name": "o_enableIBL" } } ], "baseColor": [ { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_baseColor" + "name": "m_baseColor" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -91,31 +91,31 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_baseColorFactor" + "name": "m_baseColorFactor" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture map.", "type": "Bool", "defaultValue": true }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "Base color texture map", "type": "Image", "defaultValue": "Textures/Default/default_basecolor.tif", "connection": { "type": "ShaderInput", - "id": "m_baseColorMap" + "name": "m_baseColorMap" } } ], "metallic": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "This value is linear, black is non-metal and white means raw metal.", "type": "Float", @@ -124,30 +124,30 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_metallicFactor" + "name": "m_metallicFactor" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture map, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_metallicMap" + "name": "m_metallicMap" } } ], "roughness": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -156,31 +156,31 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessFactor" + "name": "m_roughnessFactor" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture map, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "Texture map for defining surface roughness.", "type": "Image", "defaultValue": "Textures/Default/default_roughness.tif", "connection": { "type": "ShaderInput", - "id": "m_roughnessMap" + "name": "m_roughnessMap" } } ], "specularF0": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", "type": "Float", @@ -189,51 +189,51 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_specularF0Factor" + "name": "m_specularF0Factor" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture map, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "Texture map for defining surface reflectance.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_specularF0Map" + "name": "m_specularF0Map" } }, { - "id": "applySpecularAA", + "name": "applySpecularAA", "displayName": "Apply Specular AA", "description": "Whether to apply specular anti-aliasing in the shader.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_applySpecularAA" + "name": "o_applySpecularAA" } }, { - "id": "enableMultiScatterCompensation", + "name": "enableMultiScatterCompensation", "displayName": "Multiscattering Compensation", "description": "Whether to enable multiple scattering compensation.", "type": "Bool", "connection": { "type": "ShaderOption", - "id": "o_specularF0_enableMultiScatterCompensation" + "name": "o_specularF0_enableMultiScatterCompensation" } } ], "normal": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -243,85 +243,85 @@ "max": 2.0, "connection": { "type": "ShaderInput", - "id": "m_normalFactor" + "name": "m_normalFactor" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture map, or just rely on vertex normals.", "type": "Bool", "defaultValue": true }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "Texture map for defining surface normal direction.", "type": "Image", "defaultValue": "Textures/Default/default_normal.tif", "connection": { "type": "ShaderInput", - "id": "m_normalMap" + "name": "m_normalMap" } }, { - "id": "flipX", + "name": "flipX", "displayName": "Flip X Channel", "description": "Flip tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalX" + "name": "m_flipNormalX" } }, { - "id": "flipY", + "name": "flipY", "displayName": "Flip Y Channel", "description": "Flip bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalY" + "name": "m_flipNormalY" } } ], "opacity": [ { - "id": "mode", + "name": "mode", "displayName": "Opacity Mode", "description": "Opacity mode for this texture. 0: Opaque, 1: Cutout, 2:Blended", "type": "Uint", "defaultValue": 0, "connection": { "type": "ShaderOption", - "id": "o_opacity_mode" + "name": "o_opacity_mode" } }, { - "id": "alphaSource", + "name": "alphaSource", "displayName": "Alpha Source", "description": "Source texture of alpha value. 0:Packed, 1:Split, 2:None", "type": "Uint", "defaultValue": 0, "connection": { "type": "ShaderOption", - "id": "o_opacity_source" + "name": "o_opacity_source" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "Texture map for defining surface opacity.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_opacityMap" + "name": "m_opacityMap" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Factor for cutout threshold and blending", "type": "Float", @@ -330,11 +330,11 @@ "defaultValue": 0.5, "connection": { "type": "ShaderInput", - "id": "m_opacityFactor" + "name": "m_opacityFactor" } }, { - "id": "doubleSided", + "name": "doubleSided", "displayName": "Double-sided", "description": "Whether to render back-faces or just front-faces.", "type": "Bool" @@ -342,14 +342,14 @@ ], "uv": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", "defaultValue": [0.0, 0.0] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in V.", "type": "float", @@ -357,7 +357,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -365,7 +365,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -374,7 +374,7 @@ "max": 1.0 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -383,7 +383,7 @@ "max": 1.0 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -393,7 +393,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", @@ -403,29 +403,29 @@ ], "emissive": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable the emissive group", "type":"Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_emissiveEnabled" + "name": "o_emissiveEnabled" } }, { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_emissiveColor" + "name": "m_emissiveColor" } }, { - "id": "intensity", + "name": "intensity", "displayName": "Intensity", "description": "The amount of energy emitted, in EV100 unit", "type": "Float", @@ -434,33 +434,33 @@ "max": 5 }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture map.", "type": "Bool", "defaultValue": false }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "Texture map for defining emissive area.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_emissiveMap" + "name": "m_emissiveMap" } } ], "parallax": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Whether to enable the parallax feature.", "type": "Bool", "defaultValue": false }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the depth values", "type": "Float", @@ -469,39 +469,39 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_heightmapScale" + "name": "m_heightmapScale" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture Map", "description": "Depthmap to create parallax effect.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_heightmap" + "name": "m_heightmap" } }, { - "id": "algorithm", + "name": "algorithm", "displayName": "Algorithm", "description": "Select the algorithm to use for parallax mapping. 0: Basic, 1:Steep, 2:POM, 3:Relief, 4:Contact refinement", "type": "Uint", "defaultValue": 0, "connection":{ "type": "ShaderOption", - "id": "o_parallax_algorithm" + "name": "o_parallax_algorithm" } }, { - "id": "quality", + "name": "quality", "displayName": "Quality", "description": "Quality of parallax mapping. 0:Low, 1:Medium, 2:High, 3:Ultra", "type": "Uint", "defaultValue": 0, "connection":{ "type": "ShaderOption", - "id": "o_parallax_quality" + "name": "o_parallax_quality" } } ] diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Special/ShadowCatcher.materialtype b/Gems/Atom/Feature/Common/Assets/Materials/Special/ShadowCatcher.materialtype index 59b7af8439..74246f85db 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Special/ShadowCatcher.materialtype +++ b/Gems/Atom/Feature/Common/Assets/Materials/Special/ShadowCatcher.materialtype @@ -5,7 +5,7 @@ "properties": { "settings": [ { - "id": "opacity", + "name": "opacity", "displayName": "Opacity", "description": "Opacity of the shadow effect.", "type": "Float", @@ -14,17 +14,17 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_opacity" + "name": "m_opacity" } }, { - "id": "shadeAll", + "name": "shadeAll", "displayName": "Shade All", "description": "Shades the entire geometry with the shadow color, not just what's in shadow. For debugging.", "type": "Bool", "connection": { "type": "ShaderOption", - "id": "o_shadeAll" + "name": "o_shadeAll" } } ] diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR.materialtype b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR.materialtype index 9b2c465352..bed3b69c4c 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR.materialtype +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR.materialtype @@ -4,88 +4,88 @@ "version": 3, "groups": [ { - "id": "baseColor", + "name": "baseColor", "displayName": "Base Color", "description": "Properties for configuring the surface reflected color for dielectrics or reflectance values for metals." }, { - "id": "metallic", + "name": "metallic", "displayName": "Metallic", "description": "Properties for configuring whether the surface is metallic or not." }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Properties for configuring how rough the surface appears." }, { - "id": "specularF0", + "name": "specularF0", "displayName": "Specular Reflectance f0", "description": "The constant f0 represents the specular reflectance at normal incidence (Fresnel 0 Angle). Used to adjust reflectance of non-metal surfaces." }, { - "id": "normal", + "name": "normal", "displayName": "Normal", "description": "Properties related to configuring surface normal." }, { - "id": "detailLayerGroup", + "name": "detailLayerGroup", "displayName": "Detail Layer", "description": "Properties for Fine Details Layer." }, { - "id": "detailUV", + "name": "detailUV", "displayName": "Detail Layer UV", "description": "Properties for modifying detail layer UV." }, { - "id": "anisotropy", + "name": "anisotropy", "displayName": "Anisotropic Material Response", "description": "How much is this material response anisotropic." }, { - "id": "occlusion", + "name": "occlusion", "displayName": "Occlusion", "description": "Properties for baked textures that represent geometric occlusion of light." }, { - "id": "emissive", + "name": "emissive", "displayName": "Emissive", "description": "Properties to add light emission, independent of other lights in the scene." }, { - "id": "subsurfaceScattering", + "name": "subsurfaceScattering", "displayName": "Subsurface Scattering", "description": "Properties for configuring subsurface scattering effects." }, { - "id": "clearCoat", + "name": "clearCoat", "displayName": "Clear Coat", "description": "Properties for configuring gloss clear coat" }, { - "id": "parallax", + "name": "parallax", "displayName": "Displacement", "description": "Properties for parallax effect produced by a height map." }, { - "id": "opacity", + "name": "opacity", "displayName": "Opacity", "description": "Properties for configuring the materials transparency." }, { - "id": "uv", + "name": "uv", "displayName": "UVs", "description": "Properties for configuring UV transforms." }, { // Note: this property group is used in the DiffuseGlobalIllumination pass and not by the main forward shader - "id": "irradiance", + "name": "irradiance", "displayName": "Irradiance", "description": "Properties for configuring the irradiance used in global illumination." }, { - "id": "general", + "name": "general", "displayName": "General Settings", "description": "General settings." } @@ -93,97 +93,97 @@ "properties": { "general": [ { - "id": "applySpecularAA", + "name": "applySpecularAA", "displayName": "Apply Specular AA", "description": "Whether to apply specular anti-aliasing in the shader.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_applySpecularAA" + "name": "o_applySpecularAA" } }, { - "id": "enableShadows", + "name": "enableShadows", "displayName": "Enable Shadows", "description": "Whether to use the shadow maps.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableShadows" + "name": "o_enableShadows" } }, { - "id": "enableDirectionalLights", + "name": "enableDirectionalLights", "displayName": "Enable Directional Lights", "description": "Whether to use directional lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableDirectionalLights" + "name": "o_enableDirectionalLights" } }, { - "id": "enablePunctualLights", + "name": "enablePunctualLights", "displayName": "Enable Punctual Lights", "description": "Whether to use punctual lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enablePunctualLights" + "name": "o_enablePunctualLights" } }, { - "id": "enableAreaLights", + "name": "enableAreaLights", "displayName": "Enable Area Lights", "description": "Whether to use area lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableAreaLights" + "name": "o_enableAreaLights" } }, { - "id": "enableIBL", + "name": "enableIBL", "displayName": "Enable IBL", "description": "Whether to use Image Based Lighting (IBL).", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableIBL" + "name": "o_enableIBL" } }, { - "id": "forwardPassIBLSpecular", + "name": "forwardPassIBLSpecular", "displayName": "Forward Pass IBL Specular", "description": "Whether to apply IBL specular in the forward pass.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_materialUseForwardPassIBLSpecular" + "name": "o_materialUseForwardPassIBLSpecular" } } ], "baseColor": [ { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_baseColor" + "name": "m_baseColor" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -192,28 +192,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_baseColorFactor" + "name": "m_baseColorFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Base color texture map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_baseColorMap" + "name": "m_baseColorMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Base color map UV set", "type": "Enum", @@ -221,11 +221,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_baseColorMapUvIndex" + "name": "m_baseColorMapUvIndex" } }, { - "id": "textureBlendMode", + "name": "textureBlendMode", "displayName": "Texture Blend Mode", "description": "Selects the equation to use when combining Color, Factor, and Texture.", "type": "Enum", @@ -233,13 +233,13 @@ "defaultValue": "Multiply", "connection": { "type": "ShaderOption", - "id": "o_baseColorTextureBlendMode" + "name": "o_baseColorTextureBlendMode" } } ], "metallic": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "This value is linear, black is non-metal and white means raw metal.", "type": "Float", @@ -248,28 +248,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_metallicFactor" + "name": "m_metallicFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_metallicMap" + "name": "m_metallicMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Metallic map UV set", "type": "Enum", @@ -277,30 +277,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_metallicMapUvIndex" + "name": "m_metallicMapUvIndex" } } ], "roughness": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface roughness.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_roughnessMap" + "name": "m_roughnessMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Roughness map UV set", "type": "Enum", @@ -308,12 +308,12 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_roughnessMapUvIndex" + "name": "m_roughnessMapUvIndex" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "lowerBound", + "name": "lowerBound", "displayName": "Lower Bound", "description": "The roughness value that corresponds to black in the texture.", "type": "Float", @@ -322,12 +322,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessLowerBound" + "name": "m_roughnessLowerBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "upperBound", + "name": "upperBound", "displayName": "Upper Bound", "description": "The roughness value that corresponds to white in the texture.", "type": "Float", @@ -336,12 +336,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessUpperBound" + "name": "m_roughnessUpperBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Controls the roughness value", "type": "Float", @@ -350,24 +350,24 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessFactor" + "name": "m_roughnessFactor" } } ], "anisotropy": [ { - "id": "enableAnisotropy", + "name": "enableAnisotropy", "displayName": "Enable Anisotropy", "description": "Enable anisotropic surface response for non uniform reflection along the axis", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_enableAnisotropy" + "name": "o_enableAnisotropy" } }, { - "id": "factor", + "name": "factor", "displayName": "Anisotropy Factor", "description": "Strength factor for the anisotropy: negative = along v, positive = along u", "type": "Float", @@ -376,11 +376,11 @@ "max": 0.95, "connection": { "type": "ShaderInput", - "id": "m_anisotropicFactor" + "name": "m_anisotropicFactor" } }, { - "id": "anisotropyAngle", + "name": "anisotropyAngle", "displayName": "Anisotropy Angle", "description": "Anisotropy direction of major reflection axis: 0 = 0 degrees, 1.0 = 180 degrees", "type": "Float", @@ -389,13 +389,13 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_anisotropicAngle" + "name": "m_anisotropicAngle" } } ], "specularF0": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", "type": "Float", @@ -404,28 +404,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_specularF0Factor" + "name": "m_specularF0Factor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface reflectance.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_specularF0Map" + "name": "m_specularF0Map" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Specular reflection map UV set", "type": "Enum", @@ -433,31 +433,31 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_specularF0MapUvIndex" + "name": "m_specularF0MapUvIndex" } }, // Consider moving this to the "general" group to be consistent with StandardMultilayerPBR { - "id": "enableMultiScatterCompensation", + "name": "enableMultiScatterCompensation", "displayName": "Multiscattering Compensation", "description": "Whether to enable multiple scattering compensation.", "type": "Bool", "connection": { "type": "ShaderOption", - "id": "o_specularF0_enableMultiScatterCompensation" + "name": "o_specularF0_enableMultiScatterCompensation" } } ], "clearCoat": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable clear coat", "type": "Bool", "defaultValue": false }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the percentage of effect applied", "type": "Float", @@ -466,28 +466,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_clearCoatFactor" + "name": "m_clearCoatFactor" } }, { - "id": "influenceMap", + "name": "influenceMap", "displayName": " Influence Map", "description": "Strength factor texture", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_clearCoatInfluenceMap" + "name": "m_clearCoatInfluenceMap" } }, { - "id": "useInfluenceMap", + "name": "useInfluenceMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "influenceMapUv", + "name": "influenceMapUv", "displayName": " UV", "description": "Strength factor map UV set", "type": "Enum", @@ -495,11 +495,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_clearCoatInfluenceMapUvIndex" + "name": "m_clearCoatInfluenceMapUvIndex" } }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Clear coat layer roughness", "type": "Float", @@ -508,28 +508,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_clearCoatRoughness" + "name": "m_clearCoatRoughness" } }, { - "id": "roughnessMap", + "name": "roughnessMap", "displayName": " Roughness Map", "description": "Texture for defining surface roughness", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_clearCoatRoughnessMap" + "name": "m_clearCoatRoughnessMap" } }, { - "id": "useRoughnessMap", + "name": "useRoughnessMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the roughness value.", "type": "Bool", "defaultValue": true }, { - "id": "roughnessMapUv", + "name": "roughnessMapUv", "displayName": " UV", "description": "Roughness map UV set", "type": "Enum", @@ -537,11 +537,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_clearCoatRoughnessMapUvIndex" + "name": "m_clearCoatRoughnessMapUvIndex" } }, { - "id": "normalStrength", + "name": "normalStrength", "displayName": "Normal Strength", "description": "Scales the impact of the clear coat normal map", "type": "Float", @@ -550,28 +550,28 @@ "max": 2.0, "connection": { "type": "ShaderInput", - "id": "m_clearCoatNormalStrength" + "name": "m_clearCoatNormalStrength" } }, { - "id": "normalMap", + "name": "normalMap", "displayName": "Normal Map", "description": "Normal map for clear coat layer, as top layer material clear coat doesn't affect by base layer normal map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_clearCoatNormalMap" + "name": "m_clearCoatNormalMap" } }, { - "id": "useNormalMap", + "name": "useNormalMap", "displayName": " Use Texture", "description": "Whether to use the normal map", "type": "Bool", "defaultValue": true }, { - "id": "normalMapUv", + "name": "normalMapUv", "displayName": " UV", "description": "Normal map UV set", "type": "Enum", @@ -579,30 +579,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_clearCoatNormalMapUvIndex" + "name": "m_clearCoatNormalMapUvIndex" } } ], "normal": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface normal direction.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_normalMap" + "name": "m_normalMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just rely on vertex normals.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Normal map UV set", "type": "Enum", @@ -610,33 +610,33 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_normalMapUvIndex" + "name": "m_normalMapUvIndex" } }, { - "id": "flipX", + "name": "flipX", "displayName": "Flip X Channel", "description": "Flip tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalX" + "name": "m_flipNormalX" } }, { - "id": "flipY", + "name": "flipY", "displayName": "Flip Y Channel", "description": "Flip bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalY" + "name": "m_flipNormalY" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -645,13 +645,13 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_normalFactor" + "name": "m_normalFactor" } } ], "opacity": [ { - "id": "mode", + "name": "mode", "displayName": "Opacity Mode", "description": "Indicates the general approach how transparency is to be applied.", "type": "Enum", @@ -659,11 +659,11 @@ "defaultValue": "Opaque", "connection": { "type": "ShaderOption", - "id": "o_opacity_mode" + "name": "o_opacity_mode" } }, { - "id": "alphaSource", + "name": "alphaSource", "displayName": "Alpha Source", "description": "Indicates whether to get the opacity texture from the Base Color map (Packed) or from a separate greyscale texture (Split).", "type": "Enum", @@ -671,21 +671,21 @@ "defaultValue": "Packed", "connection": { "type": "ShaderOption", - "id": "o_opacity_source" + "name": "o_opacity_source" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface opacity.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_opacityMap" + "name": "m_opacityMap" } }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Opacity map UV set", "type": "Enum", @@ -693,11 +693,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_opacityMapUvIndex" + "name": "m_opacityMapUvIndex" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Factor for cutout threshold and blending", "type": "Float", @@ -706,17 +706,17 @@ "defaultValue": 0.5, "connection": { "type": "ShaderInput", - "id": "m_opacityFactor" + "name": "m_opacityFactor" } }, { - "id": "doubleSided", + "name": "doubleSided", "displayName": "Double-sided", "description": "Whether to render back-faces or just front-faces.", "type": "Bool" }, { - "id": "alphaAffectsSpecular", + "name": "alphaAffectsSpecular", "displayName": "Alpha affects specular", "description": "How much the alpha value should also affect specular reflection. This should be 0.0 for materials where light can transmit through their physical surface (like glass), but 1.0 when alpha determines the very presence of a surface (like hair or grass)", "type": "float", @@ -725,13 +725,13 @@ "defaultValue": 0.0, "connection": { "type": "ShaderInput", - "id": "m_opacityAffectsSpecularFactor" + "name": "m_opacityAffectsSpecularFactor" } } ], "uv": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -739,7 +739,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in U.", "type": "float", @@ -747,7 +747,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -755,7 +755,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -764,7 +764,7 @@ "max": 1.0 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -773,7 +773,7 @@ "max": 1.0 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -783,7 +783,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", @@ -793,24 +793,24 @@ ], "occlusion": [ { - "id": "diffuseTextureMap", + "name": "diffuseTextureMap", "displayName": "Diffuse AO", "description": "Texture for defining occlusion area for diffuse ambient lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionMap" + "name": "m_diffuseOcclusionMap" } }, { - "id": "diffuseUseTexture", + "name": "diffuseUseTexture", "displayName": " Use Texture", "description": "Whether to use the Diffuse AO map.", "type": "Bool", "defaultValue": true }, { - "id": "diffuseTextureMapUv", + "name": "diffuseTextureMapUv", "displayName": " UV", "description": "Diffuse AO map UV set.", "type": "Enum", @@ -818,11 +818,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionMapUvIndex" + "name": "m_diffuseOcclusionMapUvIndex" } }, { - "id": "diffuseFactor", + "name": "diffuseFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Diffuse AO", "type": "Float", @@ -831,28 +831,28 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionFactor" + "name": "m_diffuseOcclusionFactor" } }, { - "id": "specularTextureMap", + "name": "specularTextureMap", "displayName": "Specular Cavity", "description": "Texture for defining occlusion area for specular lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionMap" + "name": "m_specularOcclusionMap" } }, { - "id": "specularUseTexture", + "name": "specularUseTexture", "displayName": " Use Texture", "description": "Whether to use the Specular Cavity map.", "type": "Bool", "defaultValue": true }, { - "id": "specularTextureMapUv", + "name": "specularTextureMapUv", "displayName": " UV", "description": "Specular Cavity map UV set.", "type": "Enum", @@ -860,11 +860,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionMapUvIndex" + "name": "m_specularOcclusionMapUvIndex" } }, { - "id": "specularFactor", + "name": "specularFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Specular Cavity", "type": "Float", @@ -873,20 +873,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionFactor" + "name": "m_specularOcclusionFactor" } } ], "emissive": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable the emissive group", "type": "Bool", "defaultValue": false }, { - "id": "unit", + "name": "unit", "displayName": "Units", "description": "The photometric units of the Intensity property.", "type": "Enum", @@ -894,18 +894,18 @@ "defaultValue": "Ev100" }, { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_emissiveColor" + "name": "m_emissiveColor" } }, { - "id": "intensity", + "name": "intensity", "displayName": "Intensity", "description": "The amount of energy emitted.", "type": "Float", @@ -916,24 +916,24 @@ "softMax": 16 }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining emissive area.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_emissiveMap" + "name": "m_emissiveMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Emissive map UV set", "type": "Enum", @@ -941,30 +941,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_emissiveMapUvIndex" + "name": "m_emissiveMapUvIndex" } } ], "parallax": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Height Map", "description": "Displacement height map to create parallax effect.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_heightmap" + "name": "m_heightmap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the height map.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Height map UV set", "type": "Enum", @@ -972,11 +972,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_parallaxUvIndex" + "name": "m_parallaxUvIndex" } }, { - "id": "factor", + "name": "factor", "displayName": "Height Map Scale", "description": "The total height of the height map in local model units.", "type": "Float", @@ -985,11 +985,11 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_heightmapScale" + "name": "m_heightmapScale" } }, { - "id": "offset", + "name": "offset", "displayName": "Offset", "description": "Adjusts the overall displacement amount in local model units.", "type": "Float", @@ -998,11 +998,11 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_heightmapOffset" + "name": "m_heightmapOffset" } }, { - "id": "algorithm", + "name": "algorithm", "displayName": "Algorithm", "description": "Select the algorithm to use for parallax mapping.", "type": "Enum", @@ -1010,11 +1010,11 @@ "defaultValue": "POM", "connection": { "type": "ShaderOption", - "id": "o_parallax_algorithm" + "name": "o_parallax_algorithm" } }, { - "id": "quality", + "name": "quality", "displayName": "Quality", "description": "Quality of parallax mapping.", "type": "Enum", @@ -1022,46 +1022,46 @@ "defaultValue": "Low", "connection": { "type": "ShaderOption", - "id": "o_parallax_quality" + "name": "o_parallax_quality" } }, { - "id": "pdo", + "name": "pdo", "displayName": "Pixel Depth Offset", "description": "Enable PDO to offset the original pixel depths. This will affect any shaders using depth, for example, when receiving shadows.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_parallax_enablePixelDepthOffset" + "name": "o_parallax_enablePixelDepthOffset" } }, { - "id": "showClipping", + "name": "showClipping", "displayName": "Show Clipping", "description": "Highlight areas where the height map is clipped by the mesh surface.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_parallax_highlightClipping" + "name": "o_parallax_highlightClipping" } } ], "subsurfaceScattering": [ { - "id": "enableSubsurfaceScattering", + "name": "enableSubsurfaceScattering", "displayName": "Subsurface Scattering", "description": "Enable subsurface scattering feature, this will disable metallic and parallax mapping property due to incompatibility", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_enableSubsurfaceScattering" + "name": "o_enableSubsurfaceScattering" } }, { - "id": "subsurfaceScatterFactor", + "name": "subsurfaceScatterFactor", "displayName": " Factor", "description": "Strength factor for scaling percentage of subsurface scattering effect applied", "type": "float", @@ -1070,28 +1070,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringFactor" + "name": "m_subsurfaceScatteringFactor" } }, { - "id": "influenceMap", + "name": "influenceMap", "displayName": " Influence Map", "description": "Texture for controlling the strength of subsurface scattering", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringInfluenceMap" + "name": "m_subsurfaceScatteringInfluenceMap" } }, { - "id": "useInfluenceMap", + "name": "useInfluenceMap", "displayName": " Use Influence Map", "description": "Whether to use the influence map.", "type": "Bool", "defaultValue": true }, { - "id": "influenceMapUv", + "name": "influenceMapUv", "displayName": " UV", "description": "Influence map UV set", "type": "Enum", @@ -1099,18 +1099,18 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringInfluenceMapUvIndex" + "name": "m_subsurfaceScatteringInfluenceMapUvIndex" } }, { - "id": "scatterColor", + "name": "scatterColor", "displayName": " Scatter color", "description": "Color of volume light traveled through", "type": "Color", "defaultValue": [ 1.0, 0.27, 0.13 ] }, { - "id": "scatterDistance", + "name": "scatterDistance", "displayName": " Scatter distance", "description": "How far light traveled inside the volume", "type": "float", @@ -1119,7 +1119,7 @@ "softMax": 20.0 }, { - "id": "quality", + "name": "quality", "displayName": " Quality", "description": "How much percent of sample will be used for each pixel, more samples improve quality and reduce artifacts, especially when the scatter distance is relatively large, but slow down computation time, 1.0 = full set 200 samples per pixel", "type": "float", @@ -1128,11 +1128,11 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringQuality" + "name": "m_subsurfaceScatteringQuality" } }, { - "id": "transmissionMode", + "name": "transmissionMode", "displayName": "Transmission", "description": "Algorithm used for calculating transmission", "type": "Enum", @@ -1140,11 +1140,11 @@ "defaultValue": "None", "connection": { "type": "ShaderOption", - "id": "o_transmission_mode" + "name": "o_transmission_mode" } }, { - "id": "thickness", + "name": "thickness", "displayName": " Thickness", "description": "Normalized global thickness, the maxima between this value (multiplied by thickness map if enabled) and thickness from shadow map (if applicable) will be used as final thickness of pixel", "type": "float", @@ -1153,24 +1153,24 @@ "max": 1.0 }, { - "id": "thicknessMap", + "name": "thicknessMap", "displayName": " Thickness Map", "description": "Texture for controlling per pixel thickness", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_transmissionThicknessMap" + "name": "m_transmissionThicknessMap" } }, { - "id": "useThicknessMap", + "name": "useThicknessMap", "displayName": " Use Thickness Map", "description": "Whether to use the thickness map", "type": "Bool", "defaultValue": true }, { - "id": "thicknessMapUv", + "name": "thicknessMapUv", "displayName": " UV", "description": "Thickness map UV set", "type": "Enum", @@ -1178,18 +1178,18 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_transmissionThicknessMapUvIndex" + "name": "m_transmissionThicknessMapUvIndex" } }, { - "id": "transmissionTint", + "name": "transmissionTint", "displayName": " Transmission Tint", "description": "Color of the volume light traveling through", "type": "Color", "defaultValue": [ 1.0, 0.8, 0.6 ] }, { - "id": "transmissionPower", + "name": "transmissionPower", "displayName": " Power", "description": "How much transmitted light scatter radially ", "type": "float", @@ -1198,7 +1198,7 @@ "softMax": 20.0 }, { - "id": "transmissionDistortion", + "name": "transmissionDistortion", "displayName": " Distortion", "description": "How much light direction distorted towards surface normal", "type": "float", @@ -1207,7 +1207,7 @@ "max": 1.0 }, { - "id": "transmissionAttenuation", + "name": "transmissionAttenuation", "displayName": " Attenuation", "description": "How fast transmitted light fade with thickness", "type": "float", @@ -1216,7 +1216,7 @@ "softMax": 20.0 }, { - "id": "transmissionScale", + "name": "transmissionScale", "displayName": " Scale", "description": "Strength of transmission", "type": "float", @@ -1227,14 +1227,14 @@ ], "detailLayerGroup": [ { - "id": "enableDetailLayer", + "name": "enableDetailLayer", "displayName": "Enable Detail Layer", "description": "Enable detail layer for fine details and scratches", "type": "Bool", "defaultValue": false }, { - "id": "blendDetailFactor", + "name": "blendDetailFactor", "displayName": "Blend Factor", "description": "Scales the overall impact of the detail layer.", "type": "Float", @@ -1243,28 +1243,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_detail_blendFactor" + "name": "m_detail_blendFactor" } }, { - "id": "blendDetailMask", + "name": "blendDetailMask", "displayName": "Blend Mask", "description": "Detailed blend mask for application of the detail maps.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_detail_blendMask_texture" + "name": "m_detail_blendMask_texture" } }, { - "id": "enableDetailMaskTexture", + "name": "enableDetailMaskTexture", "displayName": " Use Texture", "description": "Enable detail blend mask", "type": "Bool", "defaultValue": true }, { - "id": "blendDetailMaskUv", + "name": "blendDetailMaskUv", "displayName": " Blend Mask UV", "description": "Which UV set to use for sampling the detail blend mask", "type": "Enum", @@ -1272,11 +1272,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_detail_blendMask_uvIndex" + "name": "m_detail_blendMask_uvIndex" } }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "Detail Map UVs", "description": "Which UV set to use for detail map sampling", "type": "Enum", @@ -1284,28 +1284,28 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_detail_allMapsUvIndex" + "name": "m_detail_allMapsUvIndex" } }, { - "id": "enableBaseColor", + "name": "enableBaseColor", "displayName": "Enable Base Color", "description": "Enable detail blending for base color", "type": "Bool", "defaultValue": false }, { - "id": "baseColorDetailMap", + "name": "baseColorDetailMap", "displayName": " Texture", "description": "Detailed Base Color Texture", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_detail_baseColor_texture" + "name": "m_detail_baseColor_texture" } }, { - "id": "baseColorDetailBlend", + "name": "baseColorDetailBlend", "displayName": " Blend Factor", "description": "How much to blend the detail layer into the base color.", "type": "Float", @@ -1314,18 +1314,18 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_detail_baseColor_factor" + "name": "m_detail_baseColor_factor" } }, { - "id": "enableNormals", + "name": "enableNormals", "displayName": "Enable Normal", "description": "Enable detail normal map to be used for fine detail normal such as scratches and small dents", "type": "Bool", "defaultValue": false }, { - "id": "normalDetailStrength", + "name": "normalDetailStrength", "displayName": " Factor", "description": "Strength factor for scaling the Detail Normal", "type": "Float", @@ -1334,45 +1334,45 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_detail_normal_factor" + "name": "m_detail_normal_factor" } }, { - "id": "normalDetailMap", + "name": "normalDetailMap", "displayName": " Texture", "description": "Detailed Normal map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_detail_normal_texture" + "name": "m_detail_normal_texture" } }, { - "id": "normalDetailFlipX", + "name": "normalDetailFlipX", "displayName": " Flip X Channel", "description": "Flip Detail tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_detail_normal_flipX" + "name": "m_detail_normal_flipX" } }, { - "id": "normalDetailFlipY", + "name": "normalDetailFlipY", "displayName": " Flip Y Channel", "description": "Flip Detail bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_detail_normal_flipY" + "name": "m_detail_normal_flipY" } } ], "detailUV": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -1380,7 +1380,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in V.", "type": "float", @@ -1388,7 +1388,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -1396,7 +1396,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -1405,7 +1405,7 @@ "max": 1.0 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -1414,7 +1414,7 @@ "max": 1.0 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -1424,7 +1424,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", @@ -1435,14 +1435,14 @@ "irradiance": [ // Note: this property group is used in the DiffuseGlobalIllumination pass and not by the main forward shader { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ] }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the irradiance color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.materialtype b/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.materialtype index fe86576cf8..0969cc36e8 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.materialtype +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.materialtype @@ -4,52 +4,52 @@ "version": 3, "groups": [ { - "id": "baseColor", + "name": "baseColor", "displayName": "Base Color", "description": "Properties for configuring the surface reflected color for dielectrics or reflectance values for metals." }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Properties for configuring how rough the surface appears." }, { - "id": "specularF0", + "name": "specularF0", "displayName": "Specular Reflectance f0", "description": "The constant f0 represents the specular reflectance at normal incidence (Fresnel 0 Angle). Used to adjust reflectance of non-metal surfaces." }, { - "id": "normal", + "name": "normal", "displayName": "Normal", "description": "Properties related to configuring surface normal." }, { - "id": "detailLayerGroup", + "name": "detailLayerGroup", "displayName": "Detail Layer", "description": "Properties for Fine Details Layer." }, { - "id": "detailUV", + "name": "detailUV", "displayName": "Detail Layer UV", "description": "Properties for modifying detail layer UV." }, { - "id": "occlusion", + "name": "occlusion", "displayName": "Occlusion", "description": "Properties for baked textures that represent geometric occlusion of light." }, { - "id": "subsurfaceScattering", + "name": "subsurfaceScattering", "displayName": "Subsurface Scattering", "description": "Properties for configuring subsurface scattering effects." }, { - "id": "wrinkleLayers", + "name": "wrinkleLayers", "displayName": "Wrinkle Layers", "description": "Properties for wrinkle maps to support morph animation, using vertex color blend weights." }, { - "id": "general", + "name": "general", "displayName": "General Settings", "description": "General settings." } @@ -57,86 +57,86 @@ "properties": { "general": [ { - "id": "applySpecularAA", + "name": "applySpecularAA", "displayName": "Apply Specular AA", "description": "Whether to apply specular anti-aliasing in the shader.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_applySpecularAA" + "name": "o_applySpecularAA" } }, { - "id": "enableShadows", + "name": "enableShadows", "displayName": "Enable Shadows", "description": "Whether to use the shadow maps.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableShadows" + "name": "o_enableShadows" } }, { - "id": "enableDirectionalLights", + "name": "enableDirectionalLights", "displayName": "Enable Directional Lights", "description": "Whether to use directional lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableDirectionalLights" + "name": "o_enableDirectionalLights" } }, { - "id": "enablePunctualLights", + "name": "enablePunctualLights", "displayName": "Enable Punctual Lights", "description": "Whether to use punctual lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enablePunctualLights" + "name": "o_enablePunctualLights" } }, { - "id": "enableAreaLights", + "name": "enableAreaLights", "displayName": "Enable Area Lights", "description": "Whether to use area lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableAreaLights" + "name": "o_enableAreaLights" } }, { - "id": "enableIBL", + "name": "enableIBL", "displayName": "Enable IBL", "description": "Whether to use Image Based Lighting (IBL).", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableIBL" + "name": "o_enableIBL" } } ], "baseColor": [ { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_baseColor" + "name": "m_baseColor" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -145,28 +145,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_baseColorFactor" + "name": "m_baseColorFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Base color texture map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_baseColorMap" + "name": "m_baseColorMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Base color map UV set", "type": "Enum", @@ -174,11 +174,11 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_baseColorMapUvIndex" + "name": "m_baseColorMapUvIndex" } }, { - "id": "textureBlendMode", + "name": "textureBlendMode", "displayName": "Texture Blend Mode", "description": "Selects the equation to use when combining Color, Factor, and Texture.", "type": "Enum", @@ -186,30 +186,30 @@ "defaultValue": "Multiply", "connection": { "type": "ShaderOption", - "id": "o_baseColorTextureBlendMode" + "name": "o_baseColorTextureBlendMode" } } ], "roughness": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface roughness.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_roughnessMap" + "name": "m_roughnessMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Roughness map UV set", "type": "Enum", @@ -217,12 +217,12 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_roughnessMapUvIndex" + "name": "m_roughnessMapUvIndex" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "lowerBound", + "name": "lowerBound", "displayName": "Lower Bound", "description": "The roughness value that corresponds to black in the texture.", "type": "Float", @@ -231,12 +231,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessLowerBound" + "name": "m_roughnessLowerBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "upperBound", + "name": "upperBound", "displayName": "Upper Bound", "description": "The roughness value that corresponds to white in the texture.", "type": "Float", @@ -245,12 +245,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessUpperBound" + "name": "m_roughnessUpperBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Controls the roughness value", "type": "Float", @@ -259,13 +259,13 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessFactor" + "name": "m_roughnessFactor" } } ], "specularF0": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", "type": "Float", @@ -274,28 +274,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_specularF0Factor" + "name": "m_specularF0Factor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface reflectance.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_specularF0Map" + "name": "m_specularF0Map" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Specular reflection map UV set", "type": "Enum", @@ -303,41 +303,41 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_specularF0MapUvIndex" + "name": "m_specularF0MapUvIndex" } }, // Consider moving this to the "general" group to be consistent with StandardMultilayerPBR { - "id": "enableMultiScatterCompensation", + "name": "enableMultiScatterCompensation", "displayName": "Multiscattering Compensation", "description": "Whether to enable multiple scattering compensation.", "type": "Bool", "connection": { "type": "ShaderOption", - "id": "o_specularF0_enableMultiScatterCompensation" + "name": "o_specularF0_enableMultiScatterCompensation" } } ], "normal": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface normal direction.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_normalMap" + "name": "m_normalMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just rely on vertex normals.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Normal map UV set", "type": "Enum", @@ -345,33 +345,33 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_normalMapUvIndex" + "name": "m_normalMapUvIndex" } }, { - "id": "flipX", + "name": "flipX", "displayName": "Flip X Channel", "description": "Flip tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalX" + "name": "m_flipNormalX" } }, { - "id": "flipY", + "name": "flipY", "displayName": "Flip Y Channel", "description": "Flip bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalY" + "name": "m_flipNormalY" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -380,30 +380,30 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_normalFactor" + "name": "m_normalFactor" } } ], "occlusion": [ { - "id": "diffuseTextureMap", + "name": "diffuseTextureMap", "displayName": "Diffuse AO", "description": "Texture for defining occlusion area for diffuse ambient lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionMap" + "name": "m_diffuseOcclusionMap" } }, { - "id": "diffuseUseTexture", + "name": "diffuseUseTexture", "displayName": " Use Texture", "description": "Whether to use the Diffuse AO map.", "type": "Bool", "defaultValue": true }, { - "id": "diffuseTextureMapUv", + "name": "diffuseTextureMapUv", "displayName": " UV", "description": "Diffuse AO map UV set.", "type": "Enum", @@ -411,11 +411,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionMapUvIndex" + "name": "m_diffuseOcclusionMapUvIndex" } }, { - "id": "diffuseFactor", + "name": "diffuseFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Diffuse AO", "type": "Float", @@ -424,28 +424,28 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionFactor" + "name": "m_diffuseOcclusionFactor" } }, { - "id": "specularTextureMap", + "name": "specularTextureMap", "displayName": "Specular Cavity", "description": "Texture for defining occlusion area for specular lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionMap" + "name": "m_specularOcclusionMap" } }, { - "id": "specularUseTexture", + "name": "specularUseTexture", "displayName": " Use Texture", "description": "Whether to use the Specular Cavity map.", "type": "Bool", "defaultValue": true }, { - "id": "specularTextureMapUv", + "name": "specularTextureMapUv", "displayName": " UV", "description": "Specular Cavity map UV set.", "type": "Enum", @@ -453,11 +453,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionMapUvIndex" + "name": "m_specularOcclusionMapUvIndex" } }, { - "id": "specularFactor", + "name": "specularFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Specular Cavity", "type": "Float", @@ -466,24 +466,24 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionFactor" + "name": "m_specularOcclusionFactor" } } ], "subsurfaceScattering": [ { - "id": "enableSubsurfaceScattering", + "name": "enableSubsurfaceScattering", "displayName": "Subsurface Scattering", "description": "Enable subsurface scattering feature, this will disable metallic and parallax mapping property due to incompatibility", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_enableSubsurfaceScattering" + "name": "o_enableSubsurfaceScattering" } }, { - "id": "subsurfaceScatterFactor", + "name": "subsurfaceScatterFactor", "displayName": " Factor", "description": "Strength factor for scaling percentage of subsurface scattering effect applied", "type": "float", @@ -492,28 +492,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringFactor" + "name": "m_subsurfaceScatteringFactor" } }, { - "id": "influenceMap", + "name": "influenceMap", "displayName": " Influence Map", "description": "Texture for controlling the strength of subsurface scattering", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringInfluenceMap" + "name": "m_subsurfaceScatteringInfluenceMap" } }, { - "id": "useInfluenceMap", + "name": "useInfluenceMap", "displayName": " Use Influence Map", "description": "Whether to use the influence map.", "type": "Bool", "defaultValue": true }, { - "id": "influenceMapUv", + "name": "influenceMapUv", "displayName": " UV", "description": "Influence map UV set", "type": "Enum", @@ -521,18 +521,18 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringInfluenceMapUvIndex" + "name": "m_subsurfaceScatteringInfluenceMapUvIndex" } }, { - "id": "scatterColor", + "name": "scatterColor", "displayName": " Scatter color", "description": "Color of volume light traveled through", "type": "Color", "defaultValue": [ 1.0, 0.27, 0.13 ] }, { - "id": "scatterDistance", + "name": "scatterDistance", "displayName": " Scatter distance", "description": "How far light traveled inside the volume", "type": "float", @@ -541,7 +541,7 @@ "softMax": 20.0 }, { - "id": "quality", + "name": "quality", "displayName": " Quality", "description": "How much percent of sample will be used for each pixel, more samples improve quality and reduce artifacts, especially when the scatter distance is relatively large, but slow down computation time, 1.0 = full set 200 samples per pixel", "type": "float", @@ -550,11 +550,11 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_subsurfaceScatteringQuality" + "name": "m_subsurfaceScatteringQuality" } }, { - "id": "transmissionMode", + "name": "transmissionMode", "displayName": "Transmission", "description": "Algorithm used for calculating transmission", "type": "Enum", @@ -562,11 +562,11 @@ "defaultValue": "None", "connection": { "type": "ShaderOption", - "id": "o_transmission_mode" + "name": "o_transmission_mode" } }, { - "id": "thickness", + "name": "thickness", "displayName": " Thickness", "description": "Normalized global thickness, the maxima between this value (multiplied by thickness map if enabled) and thickness from shadow map (if applicable) will be used as final thickness of pixel", "type": "float", @@ -575,24 +575,24 @@ "max": 1.0 }, { - "id": "thicknessMap", + "name": "thicknessMap", "displayName": " Thickness Map", "description": "Texture for controlling per pixel thickness", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_transmissionThicknessMap" + "name": "m_transmissionThicknessMap" } }, { - "id": "useThicknessMap", + "name": "useThicknessMap", "displayName": " Use Thickness Map", "description": "Whether to use the thickness map", "type": "Bool", "defaultValue": true }, { - "id": "thicknessMapUv", + "name": "thicknessMapUv", "displayName": " UV", "description": "Thickness map UV set", "type": "Enum", @@ -600,18 +600,18 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_transmissionThicknessMapUvIndex" + "name": "m_transmissionThicknessMapUvIndex" } }, { - "id": "transmissionTint", + "name": "transmissionTint", "displayName": " Transmission Tint", "description": "Color of the volume light traveling through", "type": "Color", "defaultValue": [ 1.0, 0.8, 0.6 ] }, { - "id": "transmissionPower", + "name": "transmissionPower", "displayName": " Power", "description": "How much transmitted light scatter radially ", "type": "float", @@ -620,7 +620,7 @@ "softMax": 20.0 }, { - "id": "transmissionDistortion", + "name": "transmissionDistortion", "displayName": " Distortion", "description": "How much light direction distorted towards surface normal", "type": "float", @@ -629,7 +629,7 @@ "max": 1.0 }, { - "id": "transmissionAttenuation", + "name": "transmissionAttenuation", "displayName": " Attenuation", "description": "How fast transmitted light fade with thickness", "type": "float", @@ -638,7 +638,7 @@ "softMax": 20.0 }, { - "id": "transmissionScale", + "name": "transmissionScale", "displayName": " Scale", "description": "Strength of transmission", "type": "float", @@ -649,14 +649,14 @@ ], "wrinkleLayers": [ { - "id": "enable", + "name": "enable", "displayName": "Enable Wrinkle Layers", "description": "Enable wrinkle layers for morph animations, using vertex color blend weights.", "type": "Bool", "defaultValue": false }, { - "id": "count", + "name": "count", "displayName": "Number Of Layers", "description": "The number of wrinkle map layers to use. The blend values come from the 'COLOR0' vertex stream, where R/G/B/A correspond to wrinkle layers 1/2/3/4 respectively.", "type": "UInt", @@ -665,109 +665,109 @@ "max": 4 }, { - "id": "showBlendValues", + "name": "showBlendValues", "displayName": "Show Blend Values", "description": "Enable a debug mode that draws the blend values as red, green, blue, and white overlays.", "type": "Bool", "defaultValue": false }, { - "id": "enableBaseColor", + "name": "enableBaseColor", "displayName": "Enable Base Color Maps", "description": "Enable support for blending the base color according to morph animations.", "type": "Bool", "defaultValue": false }, { - "id": "baseColorMap1", + "name": "baseColorMap1", "displayName": " Base Color 1", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_baseColor_texture1" + "name": "m_wrinkle_baseColor_texture1" } }, { - "id": "baseColorMap2", + "name": "baseColorMap2", "displayName": " Base Color 2", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_baseColor_texture2" + "name": "m_wrinkle_baseColor_texture2" } }, { - "id": "baseColorMap3", + "name": "baseColorMap3", "displayName": " Base Color 3", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_baseColor_texture3" + "name": "m_wrinkle_baseColor_texture3" } }, { - "id": "baseColorMap4", + "name": "baseColorMap4", "displayName": " Base Color 4", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_baseColor_texture4" + "name": "m_wrinkle_baseColor_texture4" } }, { - "id": "enableNormal", + "name": "enableNormal", "displayName": "Enable Normal Maps", "description": "Enable support for blending the normal maps according to morph animations.", "type": "Bool", "defaultValue": false }, { - "id": "normalMap1", + "name": "normalMap1", "displayName": " Normals 1", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_normal_texture1" + "name": "m_wrinkle_normal_texture1" } }, { - "id": "normalMap2", + "name": "normalMap2", "displayName": " Normals 2", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_normal_texture2" + "name": "m_wrinkle_normal_texture2" } }, { - "id": "normalMap3", + "name": "normalMap3", "displayName": " Normals 3", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_normal_texture3" + "name": "m_wrinkle_normal_texture3" } }, { - "id": "normalMap4", + "name": "normalMap4", "displayName": " Normals 4", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_wrinkle_normal_texture4" + "name": "m_wrinkle_normal_texture4" } } ], "detailLayerGroup": [ { - "id": "enableDetailLayer", + "name": "enableDetailLayer", "displayName": "Enable Detail Layer", "description": "Enable detail layer for fine details and scratches", "type": "Bool", "defaultValue": false }, { - "id": "blendDetailFactor", + "name": "blendDetailFactor", "displayName": "Blend Factor", "description": "Scales the overall impact of the detail layer.", "type": "Float", @@ -776,28 +776,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_detail_blendFactor" + "name": "m_detail_blendFactor" } }, { - "id": "blendDetailMask", + "name": "blendDetailMask", "displayName": "Blend Mask", "description": "Detailed blend mask for application of the detail maps.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_detail_blendMask_texture" + "name": "m_detail_blendMask_texture" } }, { - "id": "enableDetailMaskTexture", + "name": "enableDetailMaskTexture", "displayName": " Use Texture", "description": "Enable detail blend mask", "type": "Bool", "defaultValue": true }, { - "id": "blendDetailMaskUv", + "name": "blendDetailMaskUv", "displayName": " Blend Mask UV", "description": "Which UV set to use for sampling the detail blend mask", "type": "Enum", @@ -805,11 +805,11 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_detail_blendMask_uvIndex" + "name": "m_detail_blendMask_uvIndex" } }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "Detail Map UVs", "description": "Which UV set to use for detail map sampling", "type": "Enum", @@ -817,28 +817,28 @@ "defaultValue": "Unwrapped", "connection": { "type": "ShaderInput", - "id": "m_detail_allMapsUvIndex" + "name": "m_detail_allMapsUvIndex" } }, { - "id": "enableBaseColor", + "name": "enableBaseColor", "displayName": "Enable Base Color", "description": "Enable detail blending for base color", "type": "Bool", "defaultValue": false }, { - "id": "baseColorDetailMap", + "name": "baseColorDetailMap", "displayName": " Texture", "description": "Detailed Base Color Texture", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_detail_baseColor_texture" + "name": "m_detail_baseColor_texture" } }, { - "id": "baseColorDetailBlend", + "name": "baseColorDetailBlend", "displayName": " Blend Factor", "description": "How much to blend the detail layer into the base color.", "type": "Float", @@ -847,18 +847,18 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_detail_baseColor_factor" + "name": "m_detail_baseColor_factor" } }, { - "id": "enableNormals", + "name": "enableNormals", "displayName": "Enable Normal", "description": "Enable detail normal map to be used for fine detail normal such as scratches and small dents", "type": "Bool", "defaultValue": false }, { - "id": "normalDetailStrength", + "name": "normalDetailStrength", "displayName": " Factor", "description": "Strength factor for scaling the Detail Normal", "type": "Float", @@ -867,45 +867,45 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_detail_normal_factor" + "name": "m_detail_normal_factor" } }, { - "id": "normalDetailMap", + "name": "normalDetailMap", "displayName": " Texture", "description": "Detailed Normal map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_detail_normal_texture" + "name": "m_detail_normal_texture" } }, { - "id": "normalDetailFlipX", + "name": "normalDetailFlipX", "displayName": " Flip X Channel", "description": "Flip Detail tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_detail_normal_flipX" + "name": "m_detail_normal_flipX" } }, { - "id": "normalDetailFlipY", + "name": "normalDetailFlipY", "displayName": " Flip Y Channel", "description": "Flip Detail bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_detail_normal_flipY" + "name": "m_detail_normal_flipY" } } ], "detailUV": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -913,7 +913,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in V.", "type": "float", @@ -921,7 +921,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -929,7 +929,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -938,7 +938,7 @@ "max": 1.0 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -947,7 +947,7 @@ "max": 1.0 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -957,7 +957,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR.materialtype b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR.materialtype index bccb530eb4..5fa0dcb217 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR.materialtype +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR.materialtype @@ -4,28 +4,28 @@ "version": 3, "groups": [ { - "id": "blend", + "name": "blend", "displayName": "Blend Settings", "description": "Properties for configuring how layers are blended together." }, { - "id": "parallax", + "name": "parallax", "displayName": "Parallax Settings", "description": "Properties for configuring the parallax effect, applied to all layers." }, { - "id": "uv", + "name": "uv", "displayName": "UVs", "description": "Properties for configuring UV transforms for the entire material, including the blend masks." }, { // Note: this property group is used in the DiffuseGlobalIllumination pass, it is not read by the StandardPBR shader - "id": "irradiance", + "name": "irradiance", "displayName": "Irradiance", "description": "Properties for configuring the irradiance used in global illumination." }, { - "id": "general", + "name": "general", "displayName": "General Settings", "description": "General settings." }, @@ -33,52 +33,52 @@ // Layer 1 Groups //############################################################################################## { - "id": "layer1_baseColor", + "name": "layer1_baseColor", "displayName": "Layer 1: Base Color", "description": "Properties for configuring the surface reflected color for dielectrics or reflectance values for metals." }, { - "id": "layer1_metallic", + "name": "layer1_metallic", "displayName": "Layer 1: Metallic", "description": "Properties for configuring whether the surface is metallic or not." }, { - "id": "layer1_roughness", + "name": "layer1_roughness", "displayName": "Layer 1: Roughness", "description": "Properties for configuring how rough the surface appears." }, { - "id": "layer1_specularF0", + "name": "layer1_specularF0", "displayName": "Layer 1: Specular Reflectance f0", "description": "The constant f0 represents the specular reflectance at normal incidence (Fresnel 0 Angle). Used to adjust reflectance of non-metal surfaces." }, { - "id": "layer1_normal", + "name": "layer1_normal", "displayName": "Layer 1: Normal", "description": "Properties related to configuring surface normal." }, { - "id": "layer1_occlusion", + "name": "layer1_occlusion", "displayName": "Layer 1: Occlusion", "description": "Properties for baked textures for diffuse and specular occlusion of ambient lighting." }, { - "id": "layer1_emissive", + "name": "layer1_emissive", "displayName": "Layer 1: Emissive", "description": "Properties to add light emission, independent of other lights in the scene." }, { - "id": "layer1_clearCoat", + "name": "layer1_clearCoat", "displayName": "Layer 1: Clear Coat", "description": "Properties for configuring gloss clear coat" }, { - "id": "layer1_parallax", + "name": "layer1_parallax", "displayName": "Layer 1: Displacement", "description": "Properties for surface displacement, which can be used for displacement-based blending and/or a parallax effect." }, { - "id": "layer1_uv", + "name": "layer1_uv", "displayName": "Layer 1: UVs", "description": "Properties for configuring UV transforms." }, @@ -86,52 +86,52 @@ // Layer 2 Groups //############################################################################################## { - "id": "layer2_baseColor", + "name": "layer2_baseColor", "displayName": "Layer 2: Base Color", "description": "Properties for configuring the surface reflected color for dielectrics or reflectance values for metals." }, { - "id": "layer2_metallic", + "name": "layer2_metallic", "displayName": "Layer 2: Metallic", "description": "Properties for configuring whether the surface is metallic or not." }, { - "id": "layer2_roughness", + "name": "layer2_roughness", "displayName": "Layer 2: Roughness", "description": "Properties for configuring how rough the surface appears." }, { - "id": "layer2_specularF0", + "name": "layer2_specularF0", "displayName": "Layer 2: Specular Reflectance f0", "description": "The constant f0 represents the specular reflectance at normal incidence (Fresnel 0 Angle). Used to adjust reflectance of non-metal surfaces." }, { - "id": "layer2_normal", + "name": "layer2_normal", "displayName": "Layer 2: Normal", "description": "Properties related to configuring surface normal." }, { - "id": "layer2_occlusion", + "name": "layer2_occlusion", "displayName": "Layer 2: Occlusion", "description": "Properties for baked textures for diffuse and specular occlusion of ambient lighting." }, { - "id": "layer2_emissive", + "name": "layer2_emissive", "displayName": "Layer 2: Emissive", "description": "Properties to add light emission, independent of other lights in the scene." }, { - "id": "layer2_clearCoat", + "name": "layer2_clearCoat", "displayName": "Layer 2: Clear Coat", "description": "Properties for configuring gloss clear coat" }, { - "id": "layer2_parallax", + "name": "layer2_parallax", "displayName": "Layer 2: Displacement", "description": "Properties for surface displacement, which can be used for displacement-based blending and/or a parallax effect." }, { - "id": "layer2_uv", + "name": "layer2_uv", "displayName": "Layer 2: UVs", "description": "Properties for configuring UV transforms." }, @@ -139,52 +139,52 @@ // Layer 3 Groups //############################################################################################## { - "id": "layer3_baseColor", + "name": "layer3_baseColor", "displayName": "Layer 3: Base Color", "description": "Properties for configuring the surface reflected color for dielectrics or reflectance values for metals." }, { - "id": "layer3_metallic", + "name": "layer3_metallic", "displayName": "Layer 3: Metallic", "description": "Properties for configuring whether the surface is metallic or not." }, { - "id": "layer3_roughness", + "name": "layer3_roughness", "displayName": "Layer 3: Roughness", "description": "Properties for configuring how rough the surface appears." }, { - "id": "layer3_specularF0", + "name": "layer3_specularF0", "displayName": "Layer 3: Specular Reflectance f0", "description": "The constant f0 represents the specular reflectance at normal incidence (Fresnel 0 Angle). Used to adjust reflectance of non-metal surfaces." }, { - "id": "layer3_normal", + "name": "layer3_normal", "displayName": "Layer 3: Normal", "description": "Properties related to configuring surface normal." }, { - "id": "layer3_occlusion", + "name": "layer3_occlusion", "displayName": "Layer 3: Occlusion", "description": "Properties for baked textures for diffuse and specular occlusion of ambient lighting." }, { - "id": "layer3_emissive", + "name": "layer3_emissive", "displayName": "Layer 3: Emissive", "description": "Properties to add light emission, independent of other lights in the scene." }, { - "id": "layer3_clearCoat", + "name": "layer3_clearCoat", "displayName": "Layer 3: Clear Coat", "description": "Properties for configuring gloss clear coat" }, { - "id": "layer3_parallax", + "name": "layer3_parallax", "displayName": "Layer 3: Displacement", "description": "Properties for surface displacement, which can be used for displacement-based blending and/or a parallax effect." }, { - "id": "layer3_uv", + "name": "layer3_uv", "displayName": "Layer 3: UVs", "description": "Properties for configuring UV transforms." } @@ -195,118 +195,118 @@ //############################################################################################## "general": [ { - "id": "applySpecularAA", + "name": "applySpecularAA", "displayName": "Apply Specular AA", "description": "Whether to apply specular anti-aliasing in the shader.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_applySpecularAA" + "name": "o_applySpecularAA" } }, { - "id": "enableMultiScatterCompensation", + "name": "enableMultiScatterCompensation", "displayName": "Multiscattering Compensation", "description": "Whether to enable multiple scattering compensation.", "type": "Bool", "connection": { "type": "ShaderOption", - "id": "o_specularF0_enableMultiScatterCompensation" + "name": "o_specularF0_enableMultiScatterCompensation" } }, { - "id": "enableShadows", + "name": "enableShadows", "displayName": "Enable Shadows", "description": "Whether to use the shadow maps.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableShadows" + "name": "o_enableShadows" } }, { - "id": "enableDirectionalLights", + "name": "enableDirectionalLights", "displayName": "Enable Directional Lights", "description": "Whether to use directional lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableDirectionalLights" + "name": "o_enableDirectionalLights" } }, { - "id": "enablePunctualLights", + "name": "enablePunctualLights", "displayName": "Enable Punctual Lights", "description": "Whether to use punctual lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enablePunctualLights" + "name": "o_enablePunctualLights" } }, { - "id": "enableAreaLights", + "name": "enableAreaLights", "displayName": "Enable Area Lights", "description": "Whether to use area lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableAreaLights" + "name": "o_enableAreaLights" } }, { - "id": "enableIBL", + "name": "enableIBL", "displayName": "Enable IBL", "description": "Whether to use Image Based Lighting (IBL).", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableIBL" + "name": "o_enableIBL" } }, { - "id": "forwardPassIBLSpecular", + "name": "forwardPassIBLSpecular", "displayName": "Forward Pass IBL Specular", "description": "Whether to apply IBL specular in the forward pass.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_materialUseForwardPassIBLSpecular" + "name": "o_materialUseForwardPassIBLSpecular" } } ], "blend": [ { - "id": "enableLayer2", + "name": "enableLayer2", "displayName": "Enable Layer 2", "description": "Whether to enable layer 2.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_layer2_enabled" + "name": "o_layer2_enabled" } }, { - "id": "enableLayer3", + "name": "enableLayer3", "displayName": "Enable Layer 3", "description": "Whether to enable layer 3.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_layer3_enabled" + "name": "o_layer3_enabled" } }, { - "id": "blendSource", + "name": "blendSource", "displayName": "Blend Source", "description": "The source to use for defining the blend mask. Note VertexColors mode will still use the texture as a fallback if the mesh does not have a COLOR0 stream.", "type": "Enum", @@ -314,22 +314,22 @@ "defaultValue": "BlendMaskTexture", "connection": { "type": "ShaderOption", - "id": "o_layerBlendSource" + "name": "o_layerBlendSource" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Blend Mask Texture", "description": "RGB image where each channel is the blend mask for one of the three available layers.", "type": "Image", "defaultValue": "Textures/DefaultBlendMask_layers.png", "connection": { "type": "ShaderInput", - "id": "m_blendMaskTexture" + "name": "m_blendMaskTexture" } }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "Blend Mask UV", "description": "Blend Mask UV set.", "type": "Enum", @@ -337,11 +337,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_blendMaskUvIndex" + "name": "m_blendMaskUvIndex" } }, { - "id": "displacementBlendDistance", + "name": "displacementBlendDistance", "displayName": "Blend Distance", "description": "Adjusts how smoothly to transition between layers when displacement blending is enabled.", "type": "Float", @@ -351,11 +351,11 @@ "step": 0.001, "connection": { "type": "ShaderInput", - "id": "m_displacementBlendDistance" + "name": "m_displacementBlendDistance" } }, { - "id": "debugDrawMode", + "name": "debugDrawMode", "displayName": "Debug Draw Mode", "description": "Enables various debug view features.", "type": "Enum", @@ -363,7 +363,7 @@ "defaultValue": "None", "connection": { "type": "ShaderOption", - "id": "o_debugDrawMode" + "name": "o_debugDrawMode" } } ], @@ -372,14 +372,14 @@ // Note parallax is enabled by default so that as soon as a user hooks up displacement settings they will see some parallax applied. // The functor that controls parallax will set o_parallax_feature_enabled=false when all the individual layers have no displacement, so // a default value of true here will not have any initial impact on performance. - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Whether to enable the parallax feature for this material.", "type": "Bool", "defaultValue": true }, { - "id": "parallaxUv", + "name": "parallaxUv", "displayName": "UV", "description": "UV set that supports parallax mapping.", "type": "Enum", @@ -387,11 +387,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_parallaxUvIndex" + "name": "m_parallaxUvIndex" } }, { - "id": "algorithm", + "name": "algorithm", "displayName": "Algorithm", "description": "Select the algorithm to use for parallax mapping.", "type": "Enum", @@ -399,11 +399,11 @@ "defaultValue": "POM", "connection": { "type": "ShaderOption", - "id": "o_parallax_algorithm" + "name": "o_parallax_algorithm" } }, { - "id": "quality", + "name": "quality", "displayName": "Quality", "description": "Quality of parallax mapping.", "type": "Enum", @@ -411,35 +411,35 @@ "defaultValue": "Low", "connection": { "type": "ShaderOption", - "id": "o_parallax_quality" + "name": "o_parallax_quality" } }, { - "id": "pdo", + "name": "pdo", "displayName": "Pixel Depth Offset", "description": "Enable PDO to offset the original pixel depths. This will affect any shaders using depth, for example, when receiving shadows.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_parallax_enablePixelDepthOffset" + "name": "o_parallax_enablePixelDepthOffset" } }, { - "id": "showClipping", + "name": "showClipping", "displayName": "Show Clipping", "description": "Highlight areas where the height map is clipped by the mesh surface.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_parallax_highlightClipping" + "name": "o_parallax_highlightClipping" } } ], "uv": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -447,7 +447,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in V.", "type": "float", @@ -455,7 +455,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -463,7 +463,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -473,7 +473,7 @@ "step": 0.001 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -483,7 +483,7 @@ "step": 0.001 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -493,7 +493,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", @@ -504,14 +504,14 @@ "irradiance": [ // Note: this property group is used in the DiffuseGlobalIllumination pass, it is not read by the StandardPBR shader { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ] }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the irradiance color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -525,18 +525,18 @@ //############################################################################################## "layer1_baseColor": [ { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_layer1_m_baseColor" + "name": "m_layer1_m_baseColor" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -545,28 +545,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_baseColorFactor" + "name": "m_layer1_m_baseColorFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Base color texture map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_baseColorMap" + "name": "m_layer1_m_baseColorMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Base color map UV set", "type": "Enum", @@ -574,11 +574,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_baseColorMapUvIndex" + "name": "m_layer1_m_baseColorMapUvIndex" } }, { - "id": "textureBlendMode", + "name": "textureBlendMode", "displayName": "Texture Blend Mode", "description": "Selects the equation to use when combining Color, Factor, and Texture.", "type": "Enum", @@ -586,13 +586,13 @@ "defaultValue": "Multiply", "connection": { "type": "ShaderOption", - "id": "o_layer1_o_baseColorTextureBlendMode" + "name": "o_layer1_o_baseColorTextureBlendMode" } } ], "layer1_metallic": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "This value is linear, black is non-metal and white means raw metal.", "type": "Float", @@ -601,28 +601,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_metallicFactor" + "name": "m_layer1_m_metallicFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_metallicMap" + "name": "m_layer1_m_metallicMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Metallic map UV set", "type": "Enum", @@ -630,30 +630,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_metallicMapUvIndex" + "name": "m_layer1_m_metallicMapUvIndex" } } ], "layer1_roughness": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface roughness.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_roughnessMap" + "name": "m_layer1_m_roughnessMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Roughness map UV set", "type": "Enum", @@ -661,12 +661,12 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_roughnessMapUvIndex" + "name": "m_layer1_m_roughnessMapUvIndex" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "lowerBound", + "name": "lowerBound", "displayName": "Lower Bound", "description": "The roughness value that corresponds to black in the texture.", "type": "Float", @@ -675,12 +675,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_roughnessLowerBound" + "name": "m_layer1_m_roughnessLowerBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "upperBound", + "name": "upperBound", "displayName": "Upper Bound", "description": "The roughness value that corresponds to white in the texture.", "type": "Float", @@ -689,12 +689,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_roughnessUpperBound" + "name": "m_layer1_m_roughnessUpperBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Controls the roughness value", "type": "Float", @@ -703,13 +703,13 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_roughnessFactor" + "name": "m_layer1_m_roughnessFactor" } } ], "layer1_specularF0": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", "type": "Float", @@ -718,28 +718,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_specularF0Factor" + "name": "m_layer1_m_specularF0Factor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface reflectance.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_specularF0Map" + "name": "m_layer1_m_specularF0Map" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Specular reflection map UV set", "type": "Enum", @@ -747,30 +747,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_specularF0MapUvIndex" + "name": "m_layer1_m_specularF0MapUvIndex" } } ], "layer1_normal": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface normal direction.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_normalMap" + "name": "m_layer1_m_normalMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just rely on vertex normals.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Normal map UV set", "type": "Enum", @@ -778,33 +778,33 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_normalMapUvIndex" + "name": "m_layer1_m_normalMapUvIndex" } }, { - "id": "flipX", + "name": "flipX", "displayName": "Flip X Channel", "description": "Flip tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_flipNormalX" + "name": "m_layer1_m_flipNormalX" } }, { - "id": "flipY", + "name": "flipY", "displayName": "Flip Y Channel", "description": "Flip bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_flipNormalY" + "name": "m_layer1_m_flipNormalY" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -813,20 +813,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_normalFactor" + "name": "m_layer1_m_normalFactor" } } ], "layer1_clearCoat": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable clear coat", "type": "Bool", "defaultValue": false }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the percentage of effect applied", "type": "Float", @@ -835,28 +835,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatFactor" + "name": "m_layer1_m_clearCoatFactor" } }, { - "id": "influenceMap", + "name": "influenceMap", "displayName": " Influence Map", "description": "Strength factor texture", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatInfluenceMap" + "name": "m_layer1_m_clearCoatInfluenceMap" } }, { - "id": "useInfluenceMap", + "name": "useInfluenceMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "influenceMapUv", + "name": "influenceMapUv", "displayName": " UV", "description": "Strength factor map UV set", "type": "Enum", @@ -864,11 +864,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatInfluenceMapUvIndex" + "name": "m_layer1_m_clearCoatInfluenceMapUvIndex" } }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Clear coat layer roughness", "type": "Float", @@ -877,28 +877,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatRoughness" + "name": "m_layer1_m_clearCoatRoughness" } }, { - "id": "roughnessMap", + "name": "roughnessMap", "displayName": " Roughness Map", "description": "Texture for defining surface roughness", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatRoughnessMap" + "name": "m_layer1_m_clearCoatRoughnessMap" } }, { - "id": "useRoughnessMap", + "name": "useRoughnessMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the roughness value.", "type": "Bool", "defaultValue": true }, { - "id": "roughnessMapUv", + "name": "roughnessMapUv", "displayName": " UV", "description": "Roughness map UV set", "type": "Enum", @@ -906,11 +906,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatRoughnessMapUvIndex" + "name": "m_layer1_m_clearCoatRoughnessMapUvIndex" } }, { - "id": "normalStrength", + "name": "normalStrength", "displayName": "Normal Strength", "description": "Scales the impact of the clear coat normal map", "type": "Float", @@ -919,28 +919,28 @@ "max": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatNormalStrength" + "name": "m_layer1_m_clearCoatNormalStrength" } }, { - "id": "normalMap", + "name": "normalMap", "displayName": "Normal Map", "description": "Normal map for clear coat layer, as top layer material clear coat doesn't affect by base layer normal map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatNormalMap" + "name": "m_layer1_m_clearCoatNormalMap" } }, { - "id": "useNormalMap", + "name": "useNormalMap", "displayName": " Use Texture", "description": "Whether to use the normal map", "type": "Bool", "defaultValue": true }, { - "id": "normalMapUv", + "name": "normalMapUv", "displayName": " UV", "description": "Normal map UV set", "type": "Enum", @@ -948,30 +948,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_clearCoatNormalMapUvIndex" + "name": "m_layer1_m_clearCoatNormalMapUvIndex" } } ], "layer1_occlusion": [ { - "id": "diffuseTextureMap", + "name": "diffuseTextureMap", "displayName": "Diffuse AO", "description": "Texture for defining occlusion area for diffuse ambient lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_diffuseOcclusionMap" + "name": "m_layer1_m_diffuseOcclusionMap" } }, { - "id": "diffuseUseTexture", + "name": "diffuseUseTexture", "displayName": " Use Texture", "description": "Whether to use the Diffuse AO map.", "type": "Bool", "defaultValue": true }, { - "id": "diffuseTextureMapUv", + "name": "diffuseTextureMapUv", "displayName": " UV", "description": "Diffuse AO map UV set.", "type": "Enum", @@ -979,11 +979,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_diffuseOcclusionMapUvIndex" + "name": "m_layer1_m_diffuseOcclusionMapUvIndex" } }, { - "id": "diffuseFactor", + "name": "diffuseFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Diffuse AO", "type": "Float", @@ -992,28 +992,28 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_diffuseOcclusionFactor" + "name": "m_layer1_m_diffuseOcclusionFactor" } }, { - "id": "specularTextureMap", + "name": "specularTextureMap", "displayName": "Specular Cavity", "description": "Texture for defining occlusion area for specular lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_specularOcclusionMap" + "name": "m_layer1_m_specularOcclusionMap" } }, { - "id": "specularUseTexture", + "name": "specularUseTexture", "displayName": " Use Texture", "description": "Whether to use the Specular Cavity map.", "type": "Bool", "defaultValue": true }, { - "id": "specularTextureMapUv", + "name": "specularTextureMapUv", "displayName": " UV", "description": "Specular Cavity map UV set.", "type": "Enum", @@ -1021,11 +1021,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_specularOcclusionMapUvIndex" + "name": "m_layer1_m_specularOcclusionMapUvIndex" } }, { - "id": "specularFactor", + "name": "specularFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Specular Cavity", "type": "Float", @@ -1034,20 +1034,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_specularOcclusionFactor" + "name": "m_layer1_m_specularOcclusionFactor" } } ], "layer1_emissive": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable the emissive group", "type": "Bool", "defaultValue": false }, { - "id": "unit", + "name": "unit", "displayName": "Units", "description": "The photometric units of the Intensity property.", "type": "Enum", @@ -1055,18 +1055,18 @@ "defaultValue": "Ev100" }, { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_layer1_m_emissiveColor" + "name": "m_layer1_m_emissiveColor" } }, { - "id": "intensity", + "name": "intensity", "displayName": "Intensity", "description": "The amount of energy emitted.", "type": "Float", @@ -1077,24 +1077,24 @@ "softMax": 16 }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining emissive area.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_emissiveMap" + "name": "m_layer1_m_emissiveMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Emissive map UV set", "type": "Enum", @@ -1102,30 +1102,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_emissiveMapUvIndex" + "name": "m_layer1_m_emissiveMapUvIndex" } } ], "layer1_parallax": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Height Map", "description": "Displacement height map, which can be used for layer blending and/or a parallax effect.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer1_m_heightmap" + "name": "m_layer1_m_heightmap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the height map.", "type": "Bool", "defaultValue": true }, { - "id": "factor", + "name": "factor", "displayName": "Scale", "description": "The total height of the height map in local model units.", "type": "Float", @@ -1134,11 +1134,11 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_heightmapScale" + "name": "m_layer1_m_heightmapScale" } }, { - "id": "offset", + "name": "offset", "displayName": "Offset", "description": "Adjusts the overall displacement amount in local model units.", "type": "Float", @@ -1147,13 +1147,13 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_layer1_m_heightmapOffset" + "name": "m_layer1_m_heightmapOffset" } } ], "layer1_uv": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -1161,7 +1161,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in V.", "type": "float", @@ -1169,7 +1169,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -1177,7 +1177,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -1187,7 +1187,7 @@ "step": 0.001 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -1197,7 +1197,7 @@ "step": 0.001 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -1207,7 +1207,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", @@ -1220,18 +1220,18 @@ //############################################################################################## "layer2_baseColor": [ { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_layer2_m_baseColor" + "name": "m_layer2_m_baseColor" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -1240,28 +1240,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_baseColorFactor" + "name": "m_layer2_m_baseColorFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Base color texture map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_baseColorMap" + "name": "m_layer2_m_baseColorMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Base color map UV set", "type": "Enum", @@ -1269,11 +1269,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_baseColorMapUvIndex" + "name": "m_layer2_m_baseColorMapUvIndex" } }, { - "id": "textureBlendMode", + "name": "textureBlendMode", "displayName": "Texture Blend Mode", "description": "Selects the equation to use when combining Color, Factor, and Texture.", "type": "Enum", @@ -1281,13 +1281,13 @@ "defaultValue": "Multiply", "connection": { "type": "ShaderOption", - "id": "o_layer2_o_baseColorTextureBlendMode" + "name": "o_layer2_o_baseColorTextureBlendMode" } } ], "layer2_metallic": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "This value is linear, black is non-metal and white means raw metal.", "type": "Float", @@ -1296,28 +1296,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_metallicFactor" + "name": "m_layer2_m_metallicFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_metallicMap" + "name": "m_layer2_m_metallicMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Metallic map UV set", "type": "Enum", @@ -1325,30 +1325,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_metallicMapUvIndex" + "name": "m_layer2_m_metallicMapUvIndex" } } ], "layer2_roughness": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface roughness.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_roughnessMap" + "name": "m_layer2_m_roughnessMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Roughness map UV set", "type": "Enum", @@ -1356,12 +1356,12 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_roughnessMapUvIndex" + "name": "m_layer2_m_roughnessMapUvIndex" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "lowerBound", + "name": "lowerBound", "displayName": "Lower Bound", "description": "The roughness value that corresponds to black in the texture.", "type": "Float", @@ -1370,12 +1370,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_roughnessLowerBound" + "name": "m_layer2_m_roughnessLowerBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "upperBound", + "name": "upperBound", "displayName": "Upper Bound", "description": "The roughness value that corresponds to white in the texture.", "type": "Float", @@ -1384,12 +1384,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_roughnessUpperBound" + "name": "m_layer2_m_roughnessUpperBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Controls the roughness value", "type": "Float", @@ -1398,13 +1398,13 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_roughnessFactor" + "name": "m_layer2_m_roughnessFactor" } } ], "layer2_specularF0": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", "type": "Float", @@ -1413,28 +1413,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_specularF0Factor" + "name": "m_layer2_m_specularF0Factor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface reflectance.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_specularF0Map" + "name": "m_layer2_m_specularF0Map" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Specular reflection map UV set", "type": "Enum", @@ -1442,30 +1442,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_specularF0MapUvIndex" + "name": "m_layer2_m_specularF0MapUvIndex" } } ], "layer2_normal": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface normal direction.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_normalMap" + "name": "m_layer2_m_normalMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just rely on vertex normals.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Normal map UV set", "type": "Enum", @@ -1473,33 +1473,33 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_normalMapUvIndex" + "name": "m_layer2_m_normalMapUvIndex" } }, { - "id": "flipX", + "name": "flipX", "displayName": "Flip X Channel", "description": "Flip tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_flipNormalX" + "name": "m_layer2_m_flipNormalX" } }, { - "id": "flipY", + "name": "flipY", "displayName": "Flip Y Channel", "description": "Flip bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_flipNormalY" + "name": "m_layer2_m_flipNormalY" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -1508,20 +1508,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_normalFactor" + "name": "m_layer2_m_normalFactor" } } ], "layer2_clearCoat": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable clear coat", "type": "Bool", "defaultValue": false }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the percentage of effect applied", "type": "Float", @@ -1530,28 +1530,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatFactor" + "name": "m_layer2_m_clearCoatFactor" } }, { - "id": "influenceMap", + "name": "influenceMap", "displayName": " Influence Map", "description": "Strength factor texture", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatInfluenceMap" + "name": "m_layer2_m_clearCoatInfluenceMap" } }, { - "id": "useInfluenceMap", + "name": "useInfluenceMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "influenceMapUv", + "name": "influenceMapUv", "displayName": " UV", "description": "Strength factor map UV set", "type": "Enum", @@ -1559,11 +1559,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatInfluenceMapUvIndex" + "name": "m_layer2_m_clearCoatInfluenceMapUvIndex" } }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Clear coat layer roughness", "type": "Float", @@ -1572,28 +1572,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatRoughness" + "name": "m_layer2_m_clearCoatRoughness" } }, { - "id": "roughnessMap", + "name": "roughnessMap", "displayName": " Roughness Map", "description": "Texture for defining surface roughness", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatRoughnessMap" + "name": "m_layer2_m_clearCoatRoughnessMap" } }, { - "id": "useRoughnessMap", + "name": "useRoughnessMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the roughness value.", "type": "Bool", "defaultValue": true }, { - "id": "roughnessMapUv", + "name": "roughnessMapUv", "displayName": " UV", "description": "Roughness map UV set", "type": "Enum", @@ -1601,11 +1601,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatRoughnessMapUvIndex" + "name": "m_layer2_m_clearCoatRoughnessMapUvIndex" } }, { - "id": "normalStrength", + "name": "normalStrength", "displayName": "Normal Strength", "description": "Scales the impact of the clear coat normal map", "type": "Float", @@ -1614,28 +1614,28 @@ "max": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatNormalStrength" + "name": "m_layer2_m_clearCoatNormalStrength" } }, { - "id": "normalMap", + "name": "normalMap", "displayName": "Normal Map", "description": "Normal map for clear coat layer, as top layer material clear coat doesn't affect by base layer normal map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatNormalMap" + "name": "m_layer2_m_clearCoatNormalMap" } }, { - "id": "useNormalMap", + "name": "useNormalMap", "displayName": " Use Texture", "description": "Whether to use the normal map", "type": "Bool", "defaultValue": true }, { - "id": "normalMapUv", + "name": "normalMapUv", "displayName": " UV", "description": "Normal map UV set", "type": "Enum", @@ -1643,30 +1643,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_clearCoatNormalMapUvIndex" + "name": "m_layer2_m_clearCoatNormalMapUvIndex" } } ], "layer2_occlusion": [ { - "id": "diffuseTextureMap", + "name": "diffuseTextureMap", "displayName": "Diffuse AO", "description": "Texture for defining occlusion area for diffuse ambient lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_diffuseOcclusionMap" + "name": "m_layer2_m_diffuseOcclusionMap" } }, { - "id": "diffuseUseTexture", + "name": "diffuseUseTexture", "displayName": " Use Texture", "description": "Whether to use the Diffuse AO map.", "type": "Bool", "defaultValue": true }, { - "id": "diffuseTextureMapUv", + "name": "diffuseTextureMapUv", "displayName": " UV", "description": "Diffuse AO map UV set.", "type": "Enum", @@ -1674,11 +1674,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_diffuseOcclusionMapUvIndex" + "name": "m_layer2_m_diffuseOcclusionMapUvIndex" } }, { - "id": "diffuseFactor", + "name": "diffuseFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Diffuse AO", "type": "Float", @@ -1687,28 +1687,28 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_diffuseOcclusionFactor" + "name": "m_layer2_m_diffuseOcclusionFactor" } }, { - "id": "specularTextureMap", + "name": "specularTextureMap", "displayName": "Specular Cavity", "description": "Texture for defining occlusion area for specular lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_specularOcclusionMap" + "name": "m_layer2_m_specularOcclusionMap" } }, { - "id": "specularUseTexture", + "name": "specularUseTexture", "displayName": " Use Texture", "description": "Whether to use the Specular Cavity map.", "type": "Bool", "defaultValue": true }, { - "id": "specularTextureMapUv", + "name": "specularTextureMapUv", "displayName": " UV", "description": "Specular Cavity map UV set.", "type": "Enum", @@ -1716,11 +1716,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_specularOcclusionMapUvIndex" + "name": "m_layer2_m_specularOcclusionMapUvIndex" } }, { - "id": "specularFactor", + "name": "specularFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Specular Cavity", "type": "Float", @@ -1729,20 +1729,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_specularOcclusionFactor" + "name": "m_layer2_m_specularOcclusionFactor" } } ], "layer2_emissive": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable the emissive group", "type": "Bool", "defaultValue": false }, { - "id": "unit", + "name": "unit", "displayName": "Units", "description": "The photometric units of the Intensity property.", "type": "Enum", @@ -1750,18 +1750,18 @@ "defaultValue": "Ev100" }, { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_layer2_m_emissiveColor" + "name": "m_layer2_m_emissiveColor" } }, { - "id": "intensity", + "name": "intensity", "displayName": "Intensity", "description": "The amount of energy emitted.", "type": "Float", @@ -1772,24 +1772,24 @@ "softMax": 16 }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining emissive area.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_emissiveMap" + "name": "m_layer2_m_emissiveMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Emissive map UV set", "type": "Enum", @@ -1797,30 +1797,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_emissiveMapUvIndex" + "name": "m_layer2_m_emissiveMapUvIndex" } } ], "layer2_parallax": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Height Map", "description": "Displacement height map, which can be used for layer blending and/or a parallax effect.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer2_m_heightmap" + "name": "m_layer2_m_heightmap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the height map.", "type": "Bool", "defaultValue": true }, { - "id": "factor", + "name": "factor", "displayName": "Scale", "description": "The total height of the height map in local model units.", "type": "Float", @@ -1829,11 +1829,11 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_heightmapScale" + "name": "m_layer2_m_heightmapScale" } }, { - "id": "offset", + "name": "offset", "displayName": "Offset", "description": "Adjusts the overall displacement amount in local model units.", "type": "Float", @@ -1842,13 +1842,13 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_layer2_m_heightmapOffset" + "name": "m_layer2_m_heightmapOffset" } } ], "layer2_uv": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -1856,7 +1856,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in V.", "type": "float", @@ -1864,7 +1864,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -1872,7 +1872,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -1882,7 +1882,7 @@ "step": 0.001 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -1892,7 +1892,7 @@ "step": 0.001 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -1902,7 +1902,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", @@ -1915,18 +1915,18 @@ //############################################################################################## "layer3_baseColor": [ { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_layer3_m_baseColor" + "name": "m_layer3_m_baseColor" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -1935,28 +1935,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_baseColorFactor" + "name": "m_layer3_m_baseColorFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Base color texture map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_baseColorMap" + "name": "m_layer3_m_baseColorMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Base color map UV set", "type": "Enum", @@ -1964,11 +1964,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_baseColorMapUvIndex" + "name": "m_layer3_m_baseColorMapUvIndex" } }, { - "id": "textureBlendMode", + "name": "textureBlendMode", "displayName": "Texture Blend Mode", "description": "Selects the equation to use when combining Color, Factor, and Texture.", "type": "Enum", @@ -1976,13 +1976,13 @@ "defaultValue": "Multiply", "connection": { "type": "ShaderOption", - "id": "o_layer3_o_baseColorTextureBlendMode" + "name": "o_layer3_o_baseColorTextureBlendMode" } } ], "layer3_metallic": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "This value is linear, black is non-metal and white means raw metal.", "type": "Float", @@ -1991,28 +1991,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_metallicFactor" + "name": "m_layer3_m_metallicFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_metallicMap" + "name": "m_layer3_m_metallicMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Metallic map UV set", "type": "Enum", @@ -2020,30 +2020,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_metallicMapUvIndex" + "name": "m_layer3_m_metallicMapUvIndex" } } ], "layer3_roughness": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface roughness.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_roughnessMap" + "name": "m_layer3_m_roughnessMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Roughness map UV set", "type": "Enum", @@ -2051,12 +2051,12 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_roughnessMapUvIndex" + "name": "m_layer3_m_roughnessMapUvIndex" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "lowerBound", + "name": "lowerBound", "displayName": "Lower Bound", "description": "The roughness value that corresponds to black in the texture.", "type": "Float", @@ -2065,12 +2065,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_roughnessLowerBound" + "name": "m_layer3_m_roughnessLowerBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "upperBound", + "name": "upperBound", "displayName": "Upper Bound", "description": "The roughness value that corresponds to white in the texture.", "type": "Float", @@ -2079,12 +2079,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_roughnessUpperBound" + "name": "m_layer3_m_roughnessUpperBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Controls the roughness value", "type": "Float", @@ -2093,13 +2093,13 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_roughnessFactor" + "name": "m_layer3_m_roughnessFactor" } } ], "layer3_specularF0": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", "type": "Float", @@ -2108,28 +2108,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_specularF0Factor" + "name": "m_layer3_m_specularF0Factor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface reflectance.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_specularF0Map" + "name": "m_layer3_m_specularF0Map" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Specular reflection map UV set", "type": "Enum", @@ -2137,30 +2137,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_specularF0MapUvIndex" + "name": "m_layer3_m_specularF0MapUvIndex" } } ], "layer3_normal": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface normal direction.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_normalMap" + "name": "m_layer3_m_normalMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just rely on vertex normals.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Normal map UV set", "type": "Enum", @@ -2168,33 +2168,33 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_normalMapUvIndex" + "name": "m_layer3_m_normalMapUvIndex" } }, { - "id": "flipX", + "name": "flipX", "displayName": "Flip X Channel", "description": "Flip tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_flipNormalX" + "name": "m_layer3_m_flipNormalX" } }, { - "id": "flipY", + "name": "flipY", "displayName": "Flip Y Channel", "description": "Flip bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_flipNormalY" + "name": "m_layer3_m_flipNormalY" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -2203,20 +2203,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_normalFactor" + "name": "m_layer3_m_normalFactor" } } ], "layer3_clearCoat": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable clear coat", "type": "Bool", "defaultValue": false }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the percentage of effect applied", "type": "Float", @@ -2225,28 +2225,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatFactor" + "name": "m_layer3_m_clearCoatFactor" } }, { - "id": "influenceMap", + "name": "influenceMap", "displayName": " Influence Map", "description": "Strength factor texture", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatInfluenceMap" + "name": "m_layer3_m_clearCoatInfluenceMap" } }, { - "id": "useInfluenceMap", + "name": "useInfluenceMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "influenceMapUv", + "name": "influenceMapUv", "displayName": " UV", "description": "Strength factor map UV set", "type": "Enum", @@ -2254,11 +2254,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatInfluenceMapUvIndex" + "name": "m_layer3_m_clearCoatInfluenceMapUvIndex" } }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Clear coat layer roughness", "type": "Float", @@ -2267,28 +2267,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatRoughness" + "name": "m_layer3_m_clearCoatRoughness" } }, { - "id": "roughnessMap", + "name": "roughnessMap", "displayName": " Roughness Map", "description": "Texture for defining surface roughness", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatRoughnessMap" + "name": "m_layer3_m_clearCoatRoughnessMap" } }, { - "id": "useRoughnessMap", + "name": "useRoughnessMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the roughness value.", "type": "Bool", "defaultValue": true }, { - "id": "roughnessMapUv", + "name": "roughnessMapUv", "displayName": " UV", "description": "Roughness map UV set", "type": "Enum", @@ -2296,11 +2296,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatRoughnessMapUvIndex" + "name": "m_layer3_m_clearCoatRoughnessMapUvIndex" } }, { - "id": "normalStrength", + "name": "normalStrength", "displayName": "Normal Strength", "description": "Scales the impact of the clear coat normal map", "type": "Float", @@ -2309,28 +2309,28 @@ "max": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatNormalStrength" + "name": "m_layer3_m_clearCoatNormalStrength" } }, { - "id": "normalMap", + "name": "normalMap", "displayName": "Normal Map", "description": "Normal map for clear coat layer, as top layer material clear coat doesn't affect by base layer normal map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatNormalMap" + "name": "m_layer3_m_clearCoatNormalMap" } }, { - "id": "useNormalMap", + "name": "useNormalMap", "displayName": " Use Texture", "description": "Whether to use the normal map", "type": "Bool", "defaultValue": true }, { - "id": "normalMapUv", + "name": "normalMapUv", "displayName": " UV", "description": "Normal map UV set", "type": "Enum", @@ -2338,30 +2338,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_clearCoatNormalMapUvIndex" + "name": "m_layer3_m_clearCoatNormalMapUvIndex" } } ], "layer3_occlusion": [ { - "id": "diffuseTextureMap", + "name": "diffuseTextureMap", "displayName": "Diffuse AO", "description": "Texture for defining occlusion area for diffuse ambient lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_diffuseOcclusionMap" + "name": "m_layer3_m_diffuseOcclusionMap" } }, { - "id": "diffuseUseTexture", + "name": "diffuseUseTexture", "displayName": " Use Texture", "description": "Whether to use the Diffuse AO map.", "type": "Bool", "defaultValue": true }, { - "id": "diffuseTextureMapUv", + "name": "diffuseTextureMapUv", "displayName": " UV", "description": "Diffuse AO map UV set.", "type": "Enum", @@ -2369,11 +2369,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_diffuseOcclusionMapUvIndex" + "name": "m_layer3_m_diffuseOcclusionMapUvIndex" } }, { - "id": "diffuseFactor", + "name": "diffuseFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Diffuse AO", "type": "Float", @@ -2382,28 +2382,28 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_diffuseOcclusionFactor" + "name": "m_layer3_m_diffuseOcclusionFactor" } }, { - "id": "specularTextureMap", + "name": "specularTextureMap", "displayName": "Specular Cavity", "description": "Texture for defining occlusion area for specular lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_specularOcclusionMap" + "name": "m_layer3_m_specularOcclusionMap" } }, { - "id": "specularUseTexture", + "name": "specularUseTexture", "displayName": " Use Texture", "description": "Whether to use the Specular Cavity map.", "type": "Bool", "defaultValue": true }, { - "id": "specularTextureMapUv", + "name": "specularTextureMapUv", "displayName": " UV", "description": "Specular Cavity map UV set.", "type": "Enum", @@ -2411,11 +2411,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_specularOcclusionMapUvIndex" + "name": "m_layer3_m_specularOcclusionMapUvIndex" } }, { - "id": "specularFactor", + "name": "specularFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Specular Cavity", "type": "Float", @@ -2424,20 +2424,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_specularOcclusionFactor" + "name": "m_layer3_m_specularOcclusionFactor" } } ], "layer3_emissive": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable the emissive group", "type": "Bool", "defaultValue": false }, { - "id": "unit", + "name": "unit", "displayName": "Units", "description": "The photometric units of the Intensity property.", "type": "Enum", @@ -2445,18 +2445,18 @@ "defaultValue": "Ev100" }, { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_layer3_m_emissiveColor" + "name": "m_layer3_m_emissiveColor" } }, { - "id": "intensity", + "name": "intensity", "displayName": "Intensity", "description": "The amount of energy emitted.", "type": "Float", @@ -2467,24 +2467,24 @@ "softMax": 16 }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining emissive area.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_emissiveMap" + "name": "m_layer3_m_emissiveMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Emissive map UV set", "type": "Enum", @@ -2492,30 +2492,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_emissiveMapUvIndex" + "name": "m_layer3_m_emissiveMapUvIndex" } } ], "layer3_parallax": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Height Map", "description": "Displacement height map, which can be used for layer blending and/or a parallax effect.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_layer3_m_heightmap" + "name": "m_layer3_m_heightmap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the height map.", "type": "Bool", "defaultValue": true }, { - "id": "factor", + "name": "factor", "displayName": "Scale", "description": "The total height of the height map in local model units.", "type": "Float", @@ -2524,11 +2524,11 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_heightmapScale" + "name": "m_layer3_m_heightmapScale" } }, { - "id": "offset", + "name": "offset", "displayName": "Offset", "description": "Adjusts the overall displacement amount in local model units.", "type": "Float", @@ -2537,13 +2537,13 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_layer3_m_heightmapOffset" + "name": "m_layer3_m_heightmapOffset" } } ], "layer3_uv": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -2551,7 +2551,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in V.", "type": "float", @@ -2559,7 +2559,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -2567,7 +2567,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -2577,7 +2577,7 @@ "step": 0.001 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -2587,7 +2587,7 @@ "step": 0.001 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -2597,7 +2597,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR.materialtype b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR.materialtype index 8b7e4b1c7e..6eb82b85ae 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR.materialtype +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR.materialtype @@ -4,68 +4,68 @@ "version": 3, "groups": [ { - "id": "baseColor", + "name": "baseColor", "displayName": "Base Color", "description": "Properties for configuring the surface reflected color for dielectrics or reflectance values for metals." }, { - "id": "metallic", + "name": "metallic", "displayName": "Metallic", "description": "Properties for configuring whether the surface is metallic or not." }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Properties for configuring how rough the surface appears." }, { - "id": "specularF0", + "name": "specularF0", "displayName": "Specular Reflectance f0", "description": "The constant f0 represents the specular reflectance at normal incidence (Fresnel 0 Angle). Used to adjust reflectance of non-metal surfaces." }, { - "id": "normal", + "name": "normal", "displayName": "Normal", "description": "Properties related to configuring surface normal." }, { - "id": "occlusion", + "name": "occlusion", "displayName": "Occlusion", "description": "Properties for baked textures that represent geometric occlusion of light." }, { - "id": "emissive", + "name": "emissive", "displayName": "Emissive", "description": "Properties to add light emission, independent of other lights in the scene." }, { - "id": "clearCoat", + "name": "clearCoat", "displayName": "Clear Coat", "description": "Properties for configuring gloss clear coat" }, { - "id": "parallax", + "name": "parallax", "displayName": "Displacement", "description": "Properties for parallax effect produced by a height map." }, { - "id": "opacity", + "name": "opacity", "displayName": "Opacity", "description": "Properties for configuring the materials transparency." }, { - "id": "uv", + "name": "uv", "displayName": "UVs", "description": "Properties for configuring UV transforms." }, { // Note: this property group is used in the DiffuseGlobalIllumination pass, it is not read by the StandardPBR shader - "id": "irradiance", + "name": "irradiance", "displayName": "Irradiance", "description": "Properties for configuring the irradiance used in global illumination." }, { - "id": "general", + "name": "general", "displayName": "General Settings", "description": "General settings." } @@ -73,97 +73,97 @@ "properties": { "general": [ { - "id": "applySpecularAA", + "name": "applySpecularAA", "displayName": "Apply Specular AA", "description": "Whether to apply specular anti-aliasing in the shader.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_applySpecularAA" + "name": "o_applySpecularAA" } }, { - "id": "enableShadows", + "name": "enableShadows", "displayName": "Enable Shadows", "description": "Whether to use the shadow maps.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableShadows" + "name": "o_enableShadows" } }, { - "id": "enableDirectionalLights", + "name": "enableDirectionalLights", "displayName": "Enable Directional Lights", "description": "Whether to use directional lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableDirectionalLights" + "name": "o_enableDirectionalLights" } }, { - "id": "enablePunctualLights", + "name": "enablePunctualLights", "displayName": "Enable Punctual Lights", "description": "Whether to use punctual lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enablePunctualLights" + "name": "o_enablePunctualLights" } }, { - "id": "enableAreaLights", + "name": "enableAreaLights", "displayName": "Enable Area Lights", "description": "Whether to use area lights.", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableAreaLights" + "name": "o_enableAreaLights" } }, { - "id": "enableIBL", + "name": "enableIBL", "displayName": "Enable IBL", "description": "Whether to use Image Based Lighting (IBL).", "type": "Bool", "defaultValue": true, "connection": { "type": "ShaderOption", - "id": "o_enableIBL" + "name": "o_enableIBL" } }, { - "id": "forwardPassIBLSpecular", + "name": "forwardPassIBLSpecular", "displayName": "Forward Pass IBL Specular", "description": "Whether to apply IBL specular in the forward pass.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_materialUseForwardPassIBLSpecular" + "name": "o_materialUseForwardPassIBLSpecular" } } ], "baseColor": [ { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_baseColor" + "name": "m_baseColor" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", @@ -172,28 +172,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_baseColorFactor" + "name": "m_baseColorFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Base color texture map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_baseColorMap" + "name": "m_baseColorMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Base color map UV set", "type": "Enum", @@ -201,11 +201,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_baseColorMapUvIndex" + "name": "m_baseColorMapUvIndex" } }, { - "id": "textureBlendMode", + "name": "textureBlendMode", "displayName": "Texture Blend Mode", "description": "Selects the equation to use when combining Color, Factor, and Texture.", "type": "Enum", @@ -213,13 +213,13 @@ "defaultValue": "Multiply", "connection": { "type": "ShaderOption", - "id": "o_baseColorTextureBlendMode" + "name": "o_baseColorTextureBlendMode" } } ], "metallic": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "This value is linear, black is non-metal and white means raw metal.", "type": "Float", @@ -228,28 +228,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_metallicFactor" + "name": "m_metallicFactor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_metallicMap" + "name": "m_metallicMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Metallic map UV set", "type": "Enum", @@ -257,30 +257,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_metallicMapUvIndex" + "name": "m_metallicMapUvIndex" } } ], "roughness": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface roughness.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_roughnessMap" + "name": "m_roughnessMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Roughness map UV set", "type": "Enum", @@ -288,12 +288,12 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_roughnessMapUvIndex" + "name": "m_roughnessMapUvIndex" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "lowerBound", + "name": "lowerBound", "displayName": "Lower Bound", "description": "The roughness value that corresponds to black in the texture.", "type": "Float", @@ -302,12 +302,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessLowerBound" + "name": "m_roughnessLowerBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "upperBound", + "name": "upperBound", "displayName": "Upper Bound", "description": "The roughness value that corresponds to white in the texture.", "type": "Float", @@ -316,12 +316,12 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessUpperBound" + "name": "m_roughnessUpperBound" } }, { // Note that "factor" is mutually exclusive with "lowerBound"/"upperBound". These are swapped by a lua functor. - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Controls the roughness value", "type": "Float", @@ -330,13 +330,13 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughnessFactor" + "name": "m_roughnessFactor" } } ], "specularF0": [ { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", "type": "Float", @@ -345,28 +345,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_specularF0Factor" + "name": "m_specularF0Factor" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface reflectance.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_specularF0Map" + "name": "m_specularF0Map" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Specular reflection map UV set", "type": "Enum", @@ -374,31 +374,31 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_specularF0MapUvIndex" + "name": "m_specularF0MapUvIndex" } }, // Consider moving this to the "general" group to be consistent with StandardMultilayerPBR { - "id": "enableMultiScatterCompensation", + "name": "enableMultiScatterCompensation", "displayName": "Multiscattering Compensation", "description": "Whether to enable multiple scattering compensation.", "type": "Bool", "connection": { "type": "ShaderOption", - "id": "o_specularF0_enableMultiScatterCompensation" + "name": "o_specularF0_enableMultiScatterCompensation" } } ], "clearCoat": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable clear coat", "type": "Bool", "defaultValue": false }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the percentage of effect applied", "type": "Float", @@ -407,28 +407,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_clearCoatFactor" + "name": "m_clearCoatFactor" } }, { - "id": "influenceMap", + "name": "influenceMap", "displayName": " Influence Map", "description": "Strength factor texture", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_clearCoatInfluenceMap" + "name": "m_clearCoatInfluenceMap" } }, { - "id": "useInfluenceMap", + "name": "useInfluenceMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the Factor value.", "type": "Bool", "defaultValue": true }, { - "id": "influenceMapUv", + "name": "influenceMapUv", "displayName": " UV", "description": "Strength factor map UV set", "type": "Enum", @@ -436,11 +436,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_clearCoatInfluenceMapUvIndex" + "name": "m_clearCoatInfluenceMapUvIndex" } }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "description": "Clear coat layer roughness", "type": "Float", @@ -449,28 +449,28 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_clearCoatRoughness" + "name": "m_clearCoatRoughness" } }, { - "id": "roughnessMap", + "name": "roughnessMap", "displayName": " Roughness Map", "description": "Texture for defining surface roughness", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_clearCoatRoughnessMap" + "name": "m_clearCoatRoughnessMap" } }, { - "id": "useRoughnessMap", + "name": "useRoughnessMap", "displayName": " Use Texture", "description": "Whether to use the texture, or just default to the roughness value.", "type": "Bool", "defaultValue": true }, { - "id": "roughnessMapUv", + "name": "roughnessMapUv", "displayName": " UV", "description": "Roughness map UV set", "type": "Enum", @@ -478,11 +478,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_clearCoatRoughnessMapUvIndex" + "name": "m_clearCoatRoughnessMapUvIndex" } }, { - "id": "normalStrength", + "name": "normalStrength", "displayName": "Normal Strength", "description": "Scales the impact of the clear coat normal map", "type": "Float", @@ -491,28 +491,28 @@ "max": 2.0, "connection": { "type": "ShaderInput", - "id": "m_clearCoatNormalStrength" + "name": "m_clearCoatNormalStrength" } }, { - "id": "normalMap", + "name": "normalMap", "displayName": "Normal Map", "description": "Normal map for clear coat layer, as top layer material clear coat doesn't affect by base layer normal map", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_clearCoatNormalMap" + "name": "m_clearCoatNormalMap" } }, { - "id": "useNormalMap", + "name": "useNormalMap", "displayName": " Use Texture", "description": "Whether to use the normal map", "type": "Bool", "defaultValue": true }, { - "id": "normalMapUv", + "name": "normalMapUv", "displayName": " UV", "description": "Normal map UV set", "type": "Enum", @@ -520,30 +520,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_clearCoatNormalMapUvIndex" + "name": "m_clearCoatNormalMapUvIndex" } } ], "normal": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface normal direction.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_normalMap" + "name": "m_normalMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture, or just rely on vertex normals.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Normal map UV set", "type": "Enum", @@ -551,33 +551,33 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_normalMapUvIndex" + "name": "m_normalMapUvIndex" } }, { - "id": "flipX", + "name": "flipX", "displayName": "Flip X Channel", "description": "Flip tangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalX" + "name": "m_flipNormalX" } }, { - "id": "flipY", + "name": "flipY", "displayName": "Flip Y Channel", "description": "Flip bitangent direction for this normal map.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderInput", - "id": "m_flipNormalY" + "name": "m_flipNormalY" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the values", "type": "Float", @@ -586,13 +586,13 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_normalFactor" + "name": "m_normalFactor" } } ], "opacity": [ { - "id": "mode", + "name": "mode", "displayName": "Opacity Mode", "description": "Indicates the general approach how transparency is to be applied.", "type": "Enum", @@ -600,11 +600,11 @@ "defaultValue": "Opaque", "connection": { "type": "ShaderOption", - "id": "o_opacity_mode" + "name": "o_opacity_mode" } }, { - "id": "alphaSource", + "name": "alphaSource", "displayName": "Alpha Source", "description": "Indicates whether to get the opacity texture from the Base Color map (Packed) or from a separate greyscale texture (Split).", "type": "Enum", @@ -612,21 +612,21 @@ "defaultValue": "Packed", "connection": { "type": "ShaderOption", - "id": "o_opacity_source" + "name": "o_opacity_source" } }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining surface opacity.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_opacityMap" + "name": "m_opacityMap" } }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Opacity map UV set", "type": "Enum", @@ -634,11 +634,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_opacityMapUvIndex" + "name": "m_opacityMapUvIndex" } }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Factor for cutout threshold and blending", "type": "Float", @@ -647,17 +647,17 @@ "defaultValue": 0.5, "connection": { "type": "ShaderInput", - "id": "m_opacityFactor" + "name": "m_opacityFactor" } }, { - "id": "doubleSided", + "name": "doubleSided", "displayName": "Double-sided", "description": "Whether to render back-faces or just front-faces.", "type": "Bool" }, { - "id": "alphaAffectsSpecular", + "name": "alphaAffectsSpecular", "displayName": "Alpha affects specular", "description": "How much the alpha value should also affect specular reflection. This should be 0.0 for materials where light can transmit through their physical surface (like glass), but 1.0 when alpha determines the very presence of a surface (like hair or grass)", "type": "float", @@ -666,13 +666,13 @@ "defaultValue": 0.0, "connection": { "type": "ShaderInput", - "id": "m_opacityAffectsSpecularFactor" + "name": "m_opacityAffectsSpecularFactor" } } ], "uv": [ { - "id": "center", + "name": "center", "displayName": "Center", "description": "Center point for scaling and rotation transformations.", "type": "vector2", @@ -680,7 +680,7 @@ "defaultValue": [ 0.5, 0.5 ] }, { - "id": "tileU", + "name": "tileU", "displayName": "Tile U", "description": "Scales texture coordinates in U.", "type": "float", @@ -688,7 +688,7 @@ "step": 0.1 }, { - "id": "tileV", + "name": "tileV", "displayName": "Tile V", "description": "Scales texture coordinates in V.", "type": "float", @@ -696,7 +696,7 @@ "step": 0.1 }, { - "id": "offsetU", + "name": "offsetU", "displayName": "Offset U", "description": "Offsets texture coordinates in the U direction.", "type": "float", @@ -705,7 +705,7 @@ "max": 1.0 }, { - "id": "offsetV", + "name": "offsetV", "displayName": "Offset V", "description": "Offsets texture coordinates in the V direction.", "type": "float", @@ -714,7 +714,7 @@ "max": 1.0 }, { - "id": "rotateDegrees", + "name": "rotateDegrees", "displayName": "Rotate", "description": "Rotates the texture coordinates (degrees).", "type": "float", @@ -724,7 +724,7 @@ "step": 1.0 }, { - "id": "scale", + "name": "scale", "displayName": "Scale", "description": "Scales texture coordinates in both U and V.", "type": "float", @@ -734,24 +734,24 @@ ], "occlusion": [ { - "id": "diffuseTextureMap", + "name": "diffuseTextureMap", "displayName": "Diffuse AO", "description": "Texture for defining occlusion area for diffuse ambient lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionMap" + "name": "m_diffuseOcclusionMap" } }, { - "id": "diffuseUseTexture", + "name": "diffuseUseTexture", "displayName": " Use Texture", "description": "Whether to use the Diffuse AO map.", "type": "Bool", "defaultValue": true }, { - "id": "diffuseTextureMapUv", + "name": "diffuseTextureMapUv", "displayName": " UV", "description": "Diffuse AO map UV set.", "type": "Enum", @@ -759,11 +759,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionMapUvIndex" + "name": "m_diffuseOcclusionMapUvIndex" } }, { - "id": "diffuseFactor", + "name": "diffuseFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Diffuse AO", "type": "Float", @@ -772,28 +772,28 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_diffuseOcclusionFactor" + "name": "m_diffuseOcclusionFactor" } }, { - "id": "specularTextureMap", + "name": "specularTextureMap", "displayName": "Specular Cavity", "description": "Texture for defining occlusion area for specular lighting.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionMap" + "name": "m_specularOcclusionMap" } }, { - "id": "specularUseTexture", + "name": "specularUseTexture", "displayName": " Use Texture", "description": "Whether to use the Specular Cavity map.", "type": "Bool", "defaultValue": true }, { - "id": "specularTextureMapUv", + "name": "specularTextureMapUv", "displayName": " UV", "description": "Specular Cavity map UV set.", "type": "Enum", @@ -801,11 +801,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionMapUvIndex" + "name": "m_specularOcclusionMapUvIndex" } }, { - "id": "specularFactor", + "name": "specularFactor", "displayName": " Factor", "description": "Strength factor for scaling the values of Specular Cavity", "type": "Float", @@ -814,20 +814,20 @@ "softMax": 2.0, "connection": { "type": "ShaderInput", - "id": "m_specularOcclusionFactor" + "name": "m_specularOcclusionFactor" } } ], "emissive": [ { - "id": "enable", + "name": "enable", "displayName": "Enable", "description": "Enable the emissive group", "type": "Bool", "defaultValue": false }, { - "id": "unit", + "name": "unit", "displayName": "Units", "description": "The photometric units of the Intensity property.", "type": "Enum", @@ -835,18 +835,18 @@ "defaultValue": "Ev100" }, { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_emissiveColor" + "name": "m_emissiveColor" } }, { - "id": "intensity", + "name": "intensity", "displayName": "Intensity", "description": "The amount of energy emitted.", "type": "Float", @@ -857,24 +857,24 @@ "softMax": 16 }, { - "id": "textureMap", + "name": "textureMap", "displayName": "Texture", "description": "Texture for defining emissive area.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_emissiveMap" + "name": "m_emissiveMap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the texture.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Emissive map UV set", "type": "Enum", @@ -882,30 +882,30 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_emissiveMapUvIndex" + "name": "m_emissiveMapUvIndex" } } ], "parallax": [ { - "id": "textureMap", + "name": "textureMap", "displayName": "Height Map", "description": "Displacement height map to create parallax effect.", "type": "Image", "connection": { "type": "ShaderInput", - "id": "m_heightmap" + "name": "m_heightmap" } }, { - "id": "useTexture", + "name": "useTexture", "displayName": "Use Texture", "description": "Whether to use the height map.", "type": "Bool", "defaultValue": true }, { - "id": "textureMapUv", + "name": "textureMapUv", "displayName": "UV", "description": "Height map UV set", "type": "Enum", @@ -913,11 +913,11 @@ "defaultValue": "Tiled", "connection": { "type": "ShaderInput", - "id": "m_parallaxUvIndex" + "name": "m_parallaxUvIndex" } }, { - "id": "factor", + "name": "factor", "displayName": "Height Map Scale", "description": "The total height of the height map in local model units.", "type": "Float", @@ -926,11 +926,11 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_heightmapScale" + "name": "m_heightmapScale" } }, { - "id": "offset", + "name": "offset", "displayName": "Offset", "description": "Adjusts the overall displacement amount in local model units.", "type": "Float", @@ -939,11 +939,11 @@ "softMax": 0.1, "connection": { "type": "ShaderInput", - "id": "m_heightmapOffset" + "name": "m_heightmapOffset" } }, { - "id": "algorithm", + "name": "algorithm", "displayName": "Algorithm", "description": "Select the algorithm to use for parallax mapping.", "type": "Enum", @@ -951,11 +951,11 @@ "defaultValue": "POM", "connection": { "type": "ShaderOption", - "id": "o_parallax_algorithm" + "name": "o_parallax_algorithm" } }, { - "id": "quality", + "name": "quality", "displayName": "Quality", "description": "Quality of parallax mapping.", "type": "Enum", @@ -963,43 +963,43 @@ "defaultValue": "Low", "connection": { "type": "ShaderOption", - "id": "o_parallax_quality" + "name": "o_parallax_quality" } }, { - "id": "pdo", + "name": "pdo", "displayName": "Pixel Depth Offset", "description": "Enable PDO to offset the original pixel depths. This will affect any shaders using depth, for example, when receiving shadows.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_parallax_enablePixelDepthOffset" + "name": "o_parallax_enablePixelDepthOffset" } }, { - "id": "showClipping", + "name": "showClipping", "displayName": "Show Clipping", "description": "Highlight areas where the height map is clipped by the mesh surface.", "type": "Bool", "defaultValue": false, "connection": { "type": "ShaderOption", - "id": "o_parallax_highlightClipping" + "name": "o_parallax_highlightClipping" } } ], "irradiance": [ // Note: this property group is used in the DiffuseGlobalIllumination pass and not by the main forward shader { - "id": "color", + "name": "color", "displayName": "Color", "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ] }, { - "id": "factor", + "name": "factor", "displayName": "Factor", "description": "Strength factor for scaling the irradiance color values. Zero (0.0) is black, white (1.0) is full color.", "type": "Float", diff --git a/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass b/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass index cd52ce946b..877ae489c0 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass @@ -147,22 +147,6 @@ }, "LoadAction": "Clear" } - }, - { - "Name": "ScatterDistanceOutput", - "SlotType": "Output", - "ScopeAttachmentUsage": "RenderTarget", - "LoadStoreAction": { - "ClearValue": { - "Value": [ - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - "LoadAction": "Clear" - } } ], "ImageAttachments": [ @@ -257,23 +241,6 @@ "AssetRef": { "FilePath": "Textures/BRDFTexture.attimage" } - }, - { - "Name": "ScatterDistanceImage", - "SizeSource": { - "Source": { - "Pass": "Parent", - "Attachment": "Output" - } - }, - "MultisampleSource": { - "Pass": "This", - "Attachment": "DepthStencilInputOutput" - }, - "ImageDescriptor": { - "Format": "R11G11B10_FLOAT", - "SharedQueueMask": "Graphics" - } } ], "Connections": [ @@ -318,13 +285,6 @@ "Pass": "This", "Attachment": "BRDFTexture" } - }, - { - "LocalSlot": "ScatterDistanceOutput", - "AttachmentRef": { - "Pass": "This", - "Attachment": "ScatterDistanceImage" - } } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset index 4e38717d31..76285b00c7 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset +++ b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset @@ -468,6 +468,14 @@ "Name": "OpaqueParentTemplate", "Path": "Passes/OpaqueParent.pass" }, + { + "Name": "ThumbnailPipeline", + "Path": "Passes/ThumbnailPipeline.pass" + }, + { + "Name": "ThumbnailPipelineRenderToTexture", + "Path": "Passes/ThumbnailPipelineRenderToTexture.pass" + }, { "Name": "TransparentParentTemplate", "Path": "Passes/TransparentParent.pass" diff --git a/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipeline.pass b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipeline.pass new file mode 100644 index 0000000000..932b6ac435 --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipeline.pass @@ -0,0 +1,463 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "ThumbnailPipeline", + "PassClass": "ParentPass", + "Slots": [ + { + "Name": "SwapChainOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget" + } + ], + "PassRequests": [ + { + "Name": "MorphTargetPass", + "TemplateName": "MorphTargetPassTemplate" + }, + { + "Name": "SkinningPass", + "TemplateName": "SkinningPassTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshOutputStream", + "AttachmentRef": { + "Pass": "MorphTargetPass", + "Attachment": "MorphTargetDeltaOutput" + } + } + ] + }, + { + "Name": "RayTracingAccelerationStructurePass", + "TemplateName": "RayTracingAccelerationStructurePassTemplate" + }, + { + "Name": "DiffuseProbeGridUpdatePass", + "TemplateName": "DiffuseProbeGridUpdatePassTemplate", + "ExecuteAfter": [ + "RayTracingAccelerationStructurePass" + ] + }, + { + "Name": "DepthPrePass", + "TemplateName": "DepthMSAAParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "MotionVectorPass", + "TemplateName": "MotionVectorParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "LightCullingPass", + "TemplateName": "LightCullingParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "DepthMSAA", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "ShadowPass", + "TemplateName": "ShadowParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "OpaquePass", + "TemplateName": "OpaqueParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "TransparentPass", + "TemplateName": "TransparentParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "OpaquePass", + "Attachment": "Output" + } + } + ] + }, + { + "Name": "DeferredFogPass", + "TemplateName": "DeferredFogPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "InputDepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "TransparentPass", + "Attachment": "InputOutput" + } + } + ], + "PassData": { + "$type": "FullscreenTrianglePassData", + "ShaderAsset": { + "FilePath": "Shaders/ScreenSpace/DeferredFog.shader" + }, + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "ReflectionCopyFrameBufferPass", + "TemplateName": "ReflectionCopyFrameBufferPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + { + "Name": "PostProcessPass", + "TemplateName": "PostProcessParentTemplate", + "Connections": [ + { + "LocalSlot": "LightingInput", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "MotionVectors", + "AttachmentRef": { + "Pass": "MotionVectorPass", + "Attachment": "MotionVectorOutput" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "AuxGeomPass", + "TemplateName": "AuxGeomPassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "ColorInputOutput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + } + ], + "PassData": { + "$type": "RasterPassData", + "DrawListTag": "auxgeom", + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "DebugOverlayPass", + "TemplateName": "DebugOverlayParentTemplate", + "Connections": [ + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "RawLightingInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "RawLightingOutput" + } + }, + { + "LocalSlot": "LuminanceMipChainInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "LuminanceMipChainOutput" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "AuxGeomPass", + "Attachment": "ColorInputOutput" + } + } + ] + }, + { + "Name": "UIPass", + "TemplateName": "UIParentTemplate", + "Connections": [ + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "DebugOverlayPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + } + ] + }, + { + "Name": "CopyToSwapChain", + "TemplateName": "FullscreenCopyTemplate", + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "UIPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "Output", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + } + ] + } + } +} diff --git a/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipelineRenderToTexture.pass b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipelineRenderToTexture.pass new file mode 100644 index 0000000000..11e2cb717a --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipelineRenderToTexture.pass @@ -0,0 +1,32 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "ThumbnailPipelineRenderToTexture", + "PassClass": "RenderToTexturePass", + "PassData": { + "$type": "RenderToTexturePassData", + "OutputWidth": 512, + "OutputHeight": 512, + "OutputFormat": "R8G8B8A8_UNORM" + }, + "PassRequests": [ + { + "Name": "Pipeline", + "TemplateName": "ThumbnailPipeline", + "Connections": [ + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "Output" + } + } + ] + } + ] + } + } +} diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli index 1bd8e0b9a5..f9ead72ce4 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli @@ -16,6 +16,7 @@ #include #include #include +#include void ApplyDecal(uint currDecalIndex, inout Surface surface); @@ -47,9 +48,10 @@ void ApplyDecal(uint currDecalIndex, inout Surface surface) ViewSrg::Decal decal = ViewSrg::m_decals[currDecalIndex]; float3x3 decalRot = MatrixFromQuaternion(decal.m_quaternion); - + decalRot = transpose(decalRot); + float3 localPos = surface.position - decal.m_position; - localPos = mul(localPos, decalRot); + localPos = mul(decalRot, localPos); float3 decalUVW = localPos * rcp(decal.m_halfSize); if(decalUVW.x >= -1.0f && decalUVW.x <= 1.0f && @@ -63,30 +65,41 @@ void ApplyDecal(uint currDecalIndex, inout Surface surface) decalUVW.y *= -1; float3 decalUV = float3(decalUVW.xy * 0.5f + 0.5f, textureIndex); - + float3 decalSample; float4 baseMap = 0; + float2 normalMap = 0; + // Each texture array handles a size permutation. + // e.g. it could be that tex array 0 handles 256x256 and tex array 1 handles 512x64, etc. switch(textureArrayIndex) { case 0: - baseMap = ViewSrg::m_decalTextureArray0.Sample(PassSrg::LinearSampler, decalUV); + baseMap = ViewSrg::m_decalTextureArrayDiffuse0.Sample(PassSrg::LinearSampler, decalUV); + normalMap = ViewSrg::m_decalTextureArrayNormalMaps0.Sample(PassSrg::LinearSampler, decalUV); break; case 1: - baseMap = ViewSrg::m_decalTextureArray1.Sample(PassSrg::LinearSampler, decalUV); + baseMap = ViewSrg::m_decalTextureArrayDiffuse1.Sample(PassSrg::LinearSampler, decalUV); + normalMap = ViewSrg::m_decalTextureArrayNormalMaps1.Sample(PassSrg::LinearSampler, decalUV); break; case 2: - baseMap = ViewSrg::m_decalTextureArray2.Sample(PassSrg::LinearSampler, decalUV); + baseMap = ViewSrg::m_decalTextureArrayDiffuse2.Sample(PassSrg::LinearSampler, decalUV); + normalMap = ViewSrg::m_decalTextureArrayNormalMaps2.Sample(PassSrg::LinearSampler, decalUV); break; case 3: - baseMap = ViewSrg::m_decalTextureArray3.Sample(PassSrg::LinearSampler, decalUV); + baseMap = ViewSrg::m_decalTextureArrayDiffuse3.Sample(PassSrg::LinearSampler, decalUV); + normalMap = ViewSrg::m_decalTextureArrayNormalMaps3.Sample(PassSrg::LinearSampler, decalUV); break; case 4: - baseMap = ViewSrg::m_decalTextureArray4.Sample(PassSrg::LinearSampler, decalUV); - break; + baseMap = ViewSrg::m_decalTextureArrayDiffuse4.Sample(PassSrg::LinearSampler, decalUV); + normalMap = ViewSrg::m_decalTextureArrayNormalMaps4.Sample(PassSrg::LinearSampler, decalUV); + break; } float opacity = baseMap.a * decal.m_opacity * GetDecalAttenuation(surface.normal, decalRot[2], decal.m_angleAttenuation); - surface.albedo = lerp(surface.albedo, baseMap.rgb, opacity); + surface.albedo = lerp(surface.albedo, baseMap.rgb, opacity); + + float3 normalMapWS = GetWorldSpaceNormal(normalMap, decalRot[2], decalRot[0], decalRot[1], 1.0f); + surface.normal = normalize(lerp(surface.normal, normalMapWS, opacity)); } } diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli index 712761602a..f807acc374 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli @@ -8,14 +8,14 @@ #pragma once -option bool o_specularF0_enableMultiScatterCompensation; +option bool o_specularF0_enableMultiScatterCompensation = true; option bool o_enableShadows = true; option bool o_enableDirectionalLights = true; option bool o_enablePunctualLights = true; option bool o_enableAreaLights = true; option bool o_enableIBL = true; -option bool o_enableSubsurfaceScattering; -option bool o_clearCoat_feature_enabled; +option bool o_enableSubsurfaceScattering = false; +option bool o_clearCoat_feature_enabled = false; option enum class TransmissionMode {None, ThickObject, ThinObject} o_transmission_mode; option bool o_meshUseForwardPassIBLSpecular = false; option bool o_materialUseForwardPassIBLSpecular = false; diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli index 2f39c3a049..99e0d1372f 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli @@ -8,6 +8,7 @@ #pragma once +#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli index 2bdaf71e27..0b761fff8f 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli @@ -8,7 +8,7 @@ #pragma once -#include +#include void ApplySimplePointLight(ViewSrg::SimplePointLight light, Surface surface, inout LightingData lightingData) { diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli index 899fbb1553..b91d0ce915 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli @@ -10,7 +10,6 @@ #include #include -#include #include #include #include "BicubicPcfFilters.azsli" diff --git a/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/Decals/ViewSrg.azsli b/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/Decals/ViewSrg.azsli index 16b23432e1..260614b0f7 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/Decals/ViewSrg.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/Decals/ViewSrg.azsli @@ -31,12 +31,18 @@ partial ShaderResourceGroup ViewSrg // e.g. m_decalTextureArray0 might store 24 textures @128x128, // m_decalTextureArray1 might store 16 * 256x256 // and m_decalTextureArray2 might store 4 @ 512x512 - - Texture2DArray m_decalTextureArray0; - Texture2DArray m_decalTextureArray1; - Texture2DArray m_decalTextureArray2; - Texture2DArray m_decalTextureArray3; - Texture2DArray m_decalTextureArray4; + // This must match the variable NumTextureArrays in DecalTextureArrayFeatureProcessor.h + Texture2DArray m_decalTextureArrayDiffuse0; + Texture2DArray m_decalTextureArrayDiffuse1; + Texture2DArray m_decalTextureArrayDiffuse2; + Texture2DArray m_decalTextureArrayDiffuse3; + Texture2DArray m_decalTextureArrayDiffuse4; + + Texture2DArray m_decalTextureArrayNormalMaps0; + Texture2DArray m_decalTextureArrayNormalMaps1; + Texture2DArray m_decalTextureArrayNormalMaps2; + Texture2DArray m_decalTextureArrayNormalMaps3; + Texture2DArray m_decalTextureArrayNormalMaps4; uint m_decalCount; } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader index 596f9a383e..31fae5d98b 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_dx12_0.azshadervariant index 8481bdb15b..19e9fdfc8d 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant index 2f2cd5cccf..43c4a615cf 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant index cb5de53e97..75f070a03e 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader index fc11f9de64..0025388bc1 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_dx12_0.azshadervariant index a35179ef7f..34a9b3659f 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant index 2f2cd5cccf..4a2b0e9944 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant index 450f5595a4..c053a7db19 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader index 3f3d113787..c507b12563 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant index 76f61d2fd4..f60c713597 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_null_0.azshadervariant index 2f2cd5cccf..3e810bcfb5 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_vulkan_0.azshadervariant index 8b6ec377a6..5918f277b5 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow.azshader index 9050f90943..120eb70e54 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant index 89ab946fd0..d38d779696 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_null_0.azshadervariant index 2f2cd5cccf..6d7a604701 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant index 8fb8e92117..dee941cfae 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader index b9552a85db..e2e0fa90f5 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_dx12_0.azshadervariant index c5d569a0a6..7a92fc2de5 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant index 2f2cd5cccf..43408b26f3 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant index ae1bae8220..877085446d 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing.azshader index 66895758de..2c403c77f8 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant index fd22ac4fd3..4bcc47ee43 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant index 0bf9ac53d7..f173416210 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant index 58ce16948b..0eb04a25b8 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader index 44a8b1426d..2847d0035a 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_dx12_0.azshadervariant index acfb2aa716..93cfb47819 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_null_0.azshadervariant index 0bf9ac53d7..4a16e24211 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant index 8c66d30c98..df52c9c8d2 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader index fad06893e9..d95fd5b3b2 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant index 1c0894bd23..c853de4d14 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant index 0bf9ac53d7..40e18c215c 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant index cf8bbbd824..34761ccf98 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader index b46a476221..c19020dc84 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant index d0287e91ec..a7d44b5541 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant index 2f2cd5cccf..82e0065216 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant index f74f35eb99..20b81aee6c 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader index e309733d11..aec2786540 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant index d015d52280..de851f187e 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant index 7922055a82..5d8207dfdb 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant index 780163eb07..c819e57c4c 100644 Binary files a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant and b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant differ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl b/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl index 806337499c..207da9e857 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl +++ b/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl @@ -15,7 +15,6 @@ // box-filtered from the MSAA sub-pixels of the reflection texture. #include -#include #include #include @@ -26,8 +25,6 @@ ShaderResourceGroup PassSrg : SRG_PerPass Texture2DMS m_reflection; } -#include - // Vertex Shader VSOutput MainVS(VSInput input) { diff --git a/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake b/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake index c8f99cdb24..60614993b5 100644 --- a/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake +++ b/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake @@ -160,6 +160,8 @@ set(FILES Passes/LuminanceHistogramGenerator.pass Passes/MainPipeline.pass Passes/MainPipelineRenderToTexture.pass + Passes/ThumbnailPipeline.pass + Passes/ThumbnailPipelineRenderToTexture.pass Passes/MeshMotionVector.pass Passes/ModulateTexture.pass Passes/MorphTarget.pass diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Material/MaterialAssignment.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Material/MaterialAssignment.h index 987e78ae0f..40555bae00 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Material/MaterialAssignment.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Material/MaterialAssignment.h @@ -39,13 +39,24 @@ namespace AZ //! Otherwise an attempt will be made to find or create a shared instance. void RebuildInstance(); + //! Release asset and instance references + void Release(); + + //! Return true if contained assets have not been loaded + bool RequiresLoading() const; + + //! Applies property overrides to material instance + bool ApplyProperties(); + //! Returns a string composed of the asset path. AZStd::string ToString() const; Data::Asset m_materialAsset; + Data::Asset m_defaultMaterialAsset; Data::Instance m_materialInstance; MaterialPropertyOverrideMap m_propertyOverrides; RPI::MaterialModelUvOverrideMap m_matModUvOverrides; + bool m_materialInstancePreCreated = false; }; using MaterialAssignmentMap = AZStd::unordered_map; diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h index 389c5902f9..2ac184e2e0 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h @@ -14,10 +14,14 @@ #include #include #include +#include #include #include #include #include +#include + +#include namespace AZ { @@ -38,6 +42,7 @@ namespace AZ private: class MeshLoader : private Data::AssetBus::Handler + , private AzFramework::AssetCatalogEventBus::Handler { public: using ModelChangedEvent = MeshFeatureProcessorInterface::ModelChangedEvent; @@ -52,6 +57,15 @@ namespace AZ void OnAssetReady(Data::Asset asset) override; void OnAssetError(Data::Asset asset) override; + // AssetCatalogEventBus::Handler overrides... + void OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) override; + void OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) override; + + void OnModelReloaded(Data::Asset asset); + ModelReloadedEvent::Handler m_modelReloadedEventHandler { [&](Data::Asset modelAsset) + { + OnModelReloaded(modelAsset); + } }; MeshFeatureProcessorInterface::ModelChangedEvent m_modelChangedEvent; Data::Asset m_modelAsset; MeshDataInstance* m_parent = nullptr; @@ -61,6 +75,7 @@ namespace AZ void Init(Data::Instance model); void BuildDrawPacketList(size_t modelLodIndex); void SetRayTracingData(); + void RemoveRayTracingData(); void SetSortKey(RHI::DrawItemSortKey sortKey); RHI::DrawItemSortKey GetSortKey() const; void SetMeshLodConfiguration(RPI::Cullable::LodConfiguration meshLodConfig); diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h new file mode 100644 index 0000000000..bf0ca6a1a3 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace AZ +{ + namespace Data + { + template + class Asset; + } + + namespace Render + { + using ModelReloadedEvent = Event>; + + //! A system that handles reloading the hierarchy of model assets in the correct order + class ModelReloaderSystemInterface + { + public: + AZ_RTTI(AZ::Render::ModelReloaderSystemInterface, "{E7E05B1F-8928-4A1B-B75D-3D5433E65BCA}"); + + ModelReloaderSystemInterface() + { + Interface::Register(this); + } + + virtual ~ModelReloaderSystemInterface() + { + Interface::Unregister(this); + } + + static ModelReloaderSystemInterface* Get() + { + return Interface::Get(); + } + + //! Requests a model reload and passes in a callback event handler for when the reload is finished + virtual void ReloadModel( + Data::Asset modelAsset, ModelReloadedEvent::Handler& onReloadedEventHandler) = 0; + + // Note that you have to delete these for safety reasons, you will trip a static_assert if you do not + AZ_DISABLE_COPY_MOVE(ModelReloaderSystemInterface); + }; + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/RenderCommon.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/RenderCommon.h similarity index 100% rename from Gems/Atom/Feature/Common/Code/Source/RenderCommon.h rename to Gems/Atom/Feature/Common/Code/Include/Atom/Feature/RenderCommon.h diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshVertexStreams.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshVertexStreams.h index 5be3bece5e..aedfb73396 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshVertexStreams.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshVertexStreams.h @@ -8,7 +8,6 @@ #pragma once -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp index db49fba96f..22c5f37ff8 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp @@ -103,11 +103,15 @@ #include #include #include +#include namespace AZ { namespace Render { + CommonSystemComponent::CommonSystemComponent() = default; + CommonSystemComponent::~CommonSystemComponent() = default; + void CommonSystemComponent::Reflect(ReflectContext* context) { AuxGeomFeatureProcessor::Reflect(context); @@ -292,10 +296,13 @@ namespace AZ // setup handler for load pass template mappings m_loadTemplatesHandler = RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler([this]() { this->LoadPassTemplateMappings(); }); RPI::PassSystemInterface::Get()->ConnectEvent(m_loadTemplatesHandler); + + m_modelReloaderSystem = AZStd::make_unique(); } void CommonSystemComponent::Deactivate() { + m_modelReloaderSystem.reset(); m_loadTemplatesHandler.Disconnect(); AZ::RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); AZ::RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); diff --git a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h index 766256dd36..b12ad3459c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h +++ b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h @@ -20,12 +20,17 @@ namespace AZ { namespace Render { + class ModelReloaderSystem; + class CommonSystemComponent : public AZ::Component { public: AZ_COMPONENT(CommonSystemComponent, "{BFB8FE2B-C952-4D0C-8E32-4FE7C7A97757}"); + CommonSystemComponent(); + ~CommonSystemComponent(); + static void Reflect(AZ::ReflectContext* context); static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); @@ -44,6 +49,8 @@ namespace AZ RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler m_loadTemplatesHandler; + AZStd::unique_ptr m_modelReloaderSystem; + #if AZ_TRAIT_LUXCORE_SUPPORTED // LuxCore LuxCoreRenderer m_luxCore; diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CoreLightsSystemComponent.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CoreLightsSystemComponent.cpp index a2c6b8a67e..947028610c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CoreLightsSystemComponent.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CoreLightsSystemComponent.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -33,8 +34,6 @@ #include #include -#include - namespace AZ { namespace Render diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp index ebdc884ecf..87ac0a9679 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp @@ -5,7 +5,6 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ - #include "DecalTextureArray.h" #include #include @@ -24,7 +23,16 @@ namespace AZ { namespace { - static const char* BaseColorTextureMapName = "baseColor.textureMap"; + static AZ::Name GetMapName(const DecalMapType mapType) + { + // Using local static to avoid cost of creating AZ::Name. Also so that this can be called from other static functions + static AZStd::array mapNames = + { + AZ::Name("baseColor.textureMap"), + AZ::Name("normal.textureMap") + }; + return mapNames[mapType]; + } static AZ::Data::AssetId GetImagePoolId() { @@ -40,6 +48,7 @@ namespace AZ return asset; } + // Extract exactly which texture asset we need to load from the given material and map type (diffuse, normal, etc). static AZ::Data::Asset GetStreamingImageAsset(const AZ::RPI::MaterialAsset& materialAsset, const AZ::Name& propertyName) { if (!materialAsset.IsReady()) @@ -78,11 +87,6 @@ namespace AZ const AZ::RPI::MaterialAsset* materialAsset = materialAssetData.GetAs(); return GetStreamingImageAsset(*materialAsset, propertyName); } - - AZ::Data::Asset GetBaseColorImageAsset(const AZ::Data::Asset materialAssetData) - { - return GetStreamingImageAsset(materialAssetData, AZ::Name(BaseColorTextureMapName)); - } } int DecalTextureArray::FindMaterial(const AZ::Data::AssetId materialAssetId) const @@ -103,7 +107,7 @@ namespace AZ { AZ_Error("DecalTextureArray", FindMaterial(materialAssetId) == -1, "Adding material when it already exists in the array"); // Invalidate the existing texture array, as we need to repack it taking into account the new material. - m_textureArrayPacked = nullptr; + AZStd::fill(m_textureArrayPacked.begin(), m_textureArrayPacked.end(), nullptr); MaterialData materialData; materialData.m_materialAssetId = materialAssetId; @@ -122,42 +126,42 @@ namespace AZ return m_materials[index].m_materialAssetId; } - RHI::Size DecalTextureArray::GetImageDimensions() const + RHI::Size DecalTextureArray::GetImageDimensions(const DecalMapType mapType) const { AZ_Assert(m_materials.size() > 0, "GetImageDimensions() cannot be called until at least one material has been added"); const int iter = m_materials.begin(); // All textures in a texture array must have the same size, so just pick the first const MaterialData& firstMaterial = m_materials[iter]; - const auto& baseColorAsset = GetBaseColorImageAsset(firstMaterial.m_materialAssetData); + const auto& baseColorAsset = GetStreamingImageAsset(firstMaterial.m_materialAssetData, GetMapName(mapType)); return baseColorAsset->GetImageDescriptor().m_size; } - const AZ::Data::Instance& DecalTextureArray::GetPackedTexture() const + const AZ::Data::Instance& DecalTextureArray::GetPackedTexture(const DecalMapType mapType) const { - return m_textureArrayPacked; + return m_textureArrayPacked[mapType]; } bool DecalTextureArray::IsValidDecalMaterial(const AZ::RPI::MaterialAsset& materialAsset) { - return GetStreamingImageAsset(materialAsset, AZ::Name(BaseColorTextureMapName)).IsReady(); + return GetStreamingImageAsset(materialAsset, GetMapName(DecalMapType_Diffuse)).IsReady(); } - AZ::Data::Asset DecalTextureArray::BuildPackedMipChainAsset(const size_t numTexturesToCreate) + AZ::Data::Asset DecalTextureArray::BuildPackedMipChainAsset(const DecalMapType mapType, const size_t numTexturesToCreate) { RPI::ImageMipChainAssetCreator assetCreator; - const uint32_t mipLevels = GetNumMipLevels(); + const uint32_t mipLevels = GetNumMipLevels(mapType); - assetCreator.Begin(Data::AssetId(AZ::Uuid::CreateRandom()), static_cast(mipLevels), aznumeric_cast(numTexturesToCreate)); + assetCreator.Begin(Data::AssetId(AZ::Uuid::CreateRandom()), aznumeric_cast(mipLevels), aznumeric_cast(numTexturesToCreate)); for (uint32_t mipLevel = 0; mipLevel < mipLevels; ++mipLevel) { - const auto& layout = GetLayout(mipLevel); + const auto& layout = GetLayout(mapType, mipLevel); assetCreator.BeginMip(layout); for (int i = 0; i < m_materials.array_size(); ++i) { - const auto rawData = GetRawImageData(i, mipLevel); - assetCreator.AddSubImage(rawData.data(), rawData.size()); + const auto imageData = GetRawImageData(GetMapName(mapType), i, mipLevel); + assetCreator.AddSubImage(imageData.data(), imageData.size()); } assetCreator.EndMip(); @@ -169,10 +173,12 @@ namespace AZ return AZStd::move(asset); } - RHI::ImageDescriptor DecalTextureArray::CreatePackedImageDescriptor(const uint16_t arraySize, const uint16_t mipLevels) const + RHI::ImageDescriptor DecalTextureArray::CreatePackedImageDescriptor( + const DecalMapType mapType, const uint16_t arraySize, const uint16_t mipLevels) const { - const RHI::Size imageDimensions = GetImageDimensions(); - RHI::ImageDescriptor imageDescriptor = RHI::ImageDescriptor::Create2DArray(RHI::ImageBindFlags::ShaderRead, imageDimensions.m_width, imageDimensions.m_height, arraySize, GetFormat()); + const RHI::Size imageDimensions = GetImageDimensions(mapType); + RHI::ImageDescriptor imageDescriptor = RHI::ImageDescriptor::Create2DArray( + RHI::ImageBindFlags::ShaderRead, imageDimensions.m_width, imageDimensions.m_height, arraySize, GetFormat(mapType)); imageDescriptor.m_mipLevels = mipLevels; return imageDescriptor; } @@ -189,21 +195,34 @@ namespace AZ } const size_t numTexturesToCreate = m_materials.array_size(); - const auto mipChainAsset = BuildPackedMipChainAsset(numTexturesToCreate); - RHI::ImageViewDescriptor imageViewDescriptor; - imageViewDescriptor.m_isArray = true; - - RPI::StreamingImageAssetCreator assetCreator; - assetCreator.Begin(Data::AssetId(Uuid::CreateRandom())); - assetCreator.SetPoolAssetId(GetImagePoolId()); - assetCreator.SetFlags(RPI::StreamingImageFlags::None); - assetCreator.SetImageDescriptor(CreatePackedImageDescriptor(aznumeric_cast(numTexturesToCreate), GetNumMipLevels())); - assetCreator.SetImageViewDescriptor(imageViewDescriptor); - assetCreator.AddMipChainAsset(*mipChainAsset); - Data::Asset packedAsset; - const bool createdOk = assetCreator.End(packedAsset); - AZ_Error("TextureArrayData", createdOk, "Pack() call failed."); - m_textureArrayPacked = createdOk ? RPI::StreamingImage::FindOrCreate(packedAsset) : nullptr; + for (int i = 0; i < DecalMapType_Num; ++i) + { + const DecalMapType mapType = aznumeric_cast(i); + if (!AreAllTextureMapsPresent(mapType)) + { + AZ_Warning("DecalTextureArray", true, "Missing decal texture maps for %s. Please make sure all maps of this type are present.\n", GetMapName(mapType).GetCStr()); + m_textureArrayPacked[i] = nullptr; + continue; + } + + const auto mipChainAsset = BuildPackedMipChainAsset(mapType, numTexturesToCreate); + RHI::ImageViewDescriptor imageViewDescriptor; + imageViewDescriptor.m_isArray = true; + + RPI::StreamingImageAssetCreator assetCreator; + assetCreator.Begin(Data::AssetId(Uuid::CreateRandom())); + assetCreator.SetPoolAssetId(GetImagePoolId()); + assetCreator.SetFlags(RPI::StreamingImageFlags::None); + assetCreator.SetImageDescriptor( + CreatePackedImageDescriptor(mapType, aznumeric_cast(numTexturesToCreate), GetNumMipLevels(mapType))); + assetCreator.SetImageViewDescriptor(imageViewDescriptor); + assetCreator.AddMipChainAsset(*mipChainAsset); + Data::Asset packedAsset; + const bool createdOk = assetCreator.End(packedAsset); + AZ_Error("TextureArrayData", createdOk, "Pack() call failed."); + m_textureArrayPacked[i] = createdOk ? RPI::StreamingImage::FindOrCreate(packedAsset) : nullptr; + + } // Free unused memory ClearAssets(); @@ -225,29 +244,30 @@ namespace AZ } } - uint16_t DecalTextureArray::GetNumMipLevels() const + uint16_t DecalTextureArray::GetNumMipLevels(const DecalMapType mapType) const { AZ_Assert(m_materials.size() > 0, "GetNumMipLevels() cannot be called until at least one material has been added"); // All decals in a texture array must have the same number of mips, so just pick the first const int iter = m_materials.begin(); const MaterialData& firstMaterial = m_materials[iter]; - const auto& baseColorAsset = GetBaseColorImageAsset(firstMaterial.m_materialAssetData); - return baseColorAsset->GetImageDescriptor().m_mipLevels; + const auto& imageAsset = GetStreamingImageAsset(firstMaterial.m_materialAssetData, GetMapName(mapType)); + return imageAsset->GetImageDescriptor().m_mipLevels; } - RHI::ImageSubresourceLayout DecalTextureArray::GetLayout(int mip) const + RHI::ImageSubresourceLayout DecalTextureArray::GetLayout(const DecalMapType mapType, int mip) const { AZ_Assert(m_materials.size() > 0, "GetLayout() cannot be called unless at least one material has been added"); const int iter = m_materials.begin(); - const auto& descriptor = GetBaseColorImageAsset(m_materials[iter].m_materialAssetData)->GetImageDescriptor(); + const auto& descriptor = + GetStreamingImageAsset(m_materials[iter].m_materialAssetData, GetMapName(mapType))->GetImageDescriptor(); RHI::Size mipSize = descriptor.m_size; mipSize.m_width >>= mip; mipSize.m_height >>= mip; return AZ::RHI::GetImageSubresourceLayout(mipSize, descriptor.m_format); } - AZStd::array_view DecalTextureArray::GetRawImageData(int arrayLevel, const int mip) const + AZStd::array_view DecalTextureArray::GetRawImageData(const AZ::Name& mapName, int arrayLevel, const int mip) const { // We always want to provide valid data to the AssetCreator for each texture. // If this spot in the array is empty, just provide some random image as filler. @@ -257,17 +277,20 @@ namespace AZ { arrayLevel = m_materials.begin(); } - - const auto image = GetBaseColorImageAsset(m_materials[arrayLevel].m_materialAssetData); + const auto image = GetStreamingImageAsset(m_materials[arrayLevel].m_materialAssetData, mapName); + if (!image) + { + return {}; + } const auto srcData = image->GetSubImageData(mip, 0); return srcData; } - AZ::RHI::Format DecalTextureArray::GetFormat() const + AZ::RHI::Format DecalTextureArray::GetFormat(const DecalMapType mapType) const { AZ_Assert(m_materials.size() > 0, "GetFormat() can only be called after at least one material has been added."); const int iter = m_materials.begin(); - const auto& baseColorAsset = GetBaseColorImageAsset(m_materials[iter].m_materialAssetData); + const auto& baseColorAsset = GetStreamingImageAsset(m_materials[iter].m_materialAssetData, GetMapName(mapType)); return baseColorAsset->GetImageDescriptor().m_format; } @@ -290,6 +313,25 @@ namespace AZ return id.IsValid() && materialData.m_materialAssetData.IsReady(); } + bool DecalTextureArray::AreAllTextureMapsPresent(const DecalMapType mapType) const + { + int iter = m_materials.begin(); + while (iter != -1) + { + if (!IsTextureMapPresentInMaterial(m_materials[iter], mapType)) + { + return false; + } + iter = m_materials.next(iter); + } + return true; + } + + bool DecalTextureArray::IsTextureMapPresentInMaterial(const MaterialData& materialData, const DecalMapType mapType) const + { + return GetStreamingImageAsset(materialData.m_materialAssetData, GetMapName(mapType)).IsReady(); + } + void DecalTextureArray::ClearAssets() { int iter = m_materials.begin(); @@ -330,7 +372,8 @@ namespace AZ if (m_materials.size() == 0) return false; - return m_textureArrayPacked == nullptr; + // We pack all diffuse/normal/etc in one go, so just check to see if the diffusemaps need packing + return m_textureArrayPacked[DecalMapType_Diffuse] == nullptr; } } diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h index eb0f825e08..97bd8b9cbe 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h @@ -28,8 +28,18 @@ namespace AZ namespace Render { + enum DecalMapType : uint32_t + { + DecalMapType_Diffuse, + DecalMapType_Normal, + DecalMapType_Num + }; + //! Helper class used by DecalTextureArrayFeatureProcessor. //! Given a set of images (all with the same dimensions and format), it can pack them together into a single textureArray that can be sent to the GPU. + //! Note that once textures are packed, this class will release any material references + //! This might free memory if nothing else is holding onto them + //! The class DOES keep note of which material asset ids were added, so it can load them again if necessary if the whole thing needs to be repacked class DecalTextureArray : public Data::AssetBus::MultiHandler { public: @@ -40,8 +50,12 @@ namespace AZ AZ::Data::AssetId GetMaterialAssetId(const int index) const; + // Packs all the added materials into one texture array per DecalMapType. void Pack(); - const Data::Instance& GetPackedTexture() const; + + // Note that we pack each type into a separate texture array. This is because formats are + // often different (BC5 for normals, BC7 for diffuse, etc) + const Data::Instance& GetPackedTexture(const DecalMapType mapType) const; static bool IsValidDecalMaterial(const RPI::MaterialAsset& materialAsset); @@ -56,22 +70,25 @@ namespace AZ void OnAssetReady(Data::Asset asset) override; + // Returns the index of the material in the m_materials container. -1 if not present. int FindMaterial(const AZ::Data::AssetId materialAssetId) const; // packs the contents of the source images into a texture array readable by the GPU and returns it - AZ::Data::Asset BuildPackedMipChainAsset(const size_t numTexturesToCreate); - - RHI::ImageDescriptor CreatePackedImageDescriptor(const uint16_t arraySize, const uint16_t mipLevels) const; + AZ::Data::Asset BuildPackedMipChainAsset(const DecalMapType mapType, const size_t numTexturesToCreate); + RHI::ImageDescriptor CreatePackedImageDescriptor(const DecalMapType mapType, const uint16_t arraySize, const uint16_t mipLevels) const; - uint16_t GetNumMipLevels() const; - RHI::Size GetImageDimensions() const; - RHI::Format GetFormat() const; - RHI::ImageSubresourceLayout GetLayout(int mip) const; - AZStd::array_view GetRawImageData(int arrayLevel, int mip) const; + uint16_t GetNumMipLevels(const DecalMapType mapType) const; + RHI::Size GetImageDimensions(const DecalMapType mapType) const; + RHI::Format GetFormat(const DecalMapType mapType) const; + RHI::ImageSubresourceLayout GetLayout(const DecalMapType mapType, int mip) const; + AZStd::array_view GetRawImageData(const AZ::Name& mapName, int arrayLevel, int mip) const; bool AreAllAssetsReady() const; bool IsAssetReady(const MaterialData& materialData) const; + bool AreAllTextureMapsPresent(const DecalMapType mapType) const; + bool IsTextureMapPresentInMaterial(const MaterialData& materialData, const DecalMapType mapType) const; + void ClearAssets(); void ClearAsset(MaterialData& materialData); @@ -81,7 +98,7 @@ namespace AZ bool NeedsPacking() const; IndexableList m_materials; - Data::Instance m_textureArrayPacked; + AZStd::array, DecalMapType_Num> m_textureArrayPacked; AZStd::unordered_set m_assetsCurrentlyLoading; }; diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp index c0b8f3315a..472dbff5c8 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp @@ -301,34 +301,78 @@ namespace AZ return; } - if (material.IsValid()) + if (GetMaterialUsedByDecal(handle) == material) { - AZ_Assert(m_decalData.GetData(handle.GetIndex()).m_textureArrayIndex == DecalData::UnusedIndex, "Setting Material on a decal more than once is not currently supported."); + return; + } - const auto iter = m_materialToTextureArrayLookupTable.find(material); - if (iter != m_materialToTextureArrayLookupTable.end()) - { - // This material is already loaded and registered with this feature processor - iter->second.m_useCount++; - SetDecalTextureLocation(handle, iter->second.m_location); - return; - } + const auto decalIndex = handle.GetIndex(); + + const bool isValidMaterialBeingUsedCurrently = m_decalData.GetData(decalIndex).m_textureArrayIndex != DecalData::UnusedIndex; + if (isValidMaterialBeingUsedCurrently) + { + RemoveMaterialFromDecal(decalIndex); + } - // Material not loaded so queue it up for loading. - QueueMaterialLoadForDecal(material, handle); + if (!material.IsValid()) + { + return; + } + + const auto iter = m_materialToTextureArrayLookupTable.find(material); + if (iter != m_materialToTextureArrayLookupTable.end()) + { + // This material is already loaded and registered with this feature processor + iter->second.m_useCount++; + SetDecalTextureLocation(handle, iter->second.m_location); return; } + + // Material not loaded so queue it up for loading. + QueueMaterialLoadForDecal(material, handle); } - void DecalTextureArrayFeatureProcessor::CacheShaderIndices() + void DecalTextureArrayFeatureProcessor::RemoveMaterialFromDecal(const uint16_t decalIndex) { - for (int i = 0; i < NumTextureArrays; ++i) - { - const RHI::ShaderResourceGroupLayout* viewSrgLayout = RPI::RPISystemInterface::Get()->GetViewSrgLayout().get(); - const AZStd::string baseName = "m_decalTextureArray" + AZStd::to_string(i); + auto& decalData = m_decalData.GetData(decalIndex); + + DecalLocation decalLocation; + decalLocation.textureArrayIndex = decalData.m_textureArrayIndex; + decalLocation.textureIndex = decalData.m_textureIndex; + RemoveDecalFromTextureArrays(decalLocation); + + decalData.m_textureArrayIndex = DecalData::UnusedIndex; + decalData.m_textureIndex = DecalData::UnusedIndex; + + m_deviceBufferNeedsUpdate = true; + } - m_decalTextureArrayIndices[i] = viewSrgLayout->FindShaderInputImageIndex(Name(baseName.c_str())); - AZ_Warning("DecalTextureArrayFeatureProcessor", m_decalTextureArrayIndices[i].IsValid(), "Unable to find %s in decal shader.", baseName.c_str()); + void DecalTextureArrayFeatureProcessor::CacheShaderIndices() + { + // The azsl shader should define several texture arrays such as: + // Texture2DArray m_decalTextureArrayDiffuse0; + // Texture2DArray m_decalTextureArrayDiffuse1; + // Texture2DArray m_decalTextureArrayDiffuse2; + // and + // Texture2DArray m_decalTextureArrayNormalMaps0; + // Texture2DArray m_decalTextureArrayNormalMaps1; + // Texture2DArray m_decalTextureArrayNormalMaps2; + static const AZStd::array ShaderNames = { "m_decalTextureArrayDiffuse", + "m_decalTextureArrayNormalMaps" }; + + for (int mapType = 0; mapType < DecalMapType_Num; ++mapType) + { + for (int texArrayIdx = 0; texArrayIdx < NumTextureArrays; ++texArrayIdx) + { + const RHI::ShaderResourceGroupLayout* viewSrgLayout = RPI::RPISystemInterface::Get()->GetViewSrgLayout().get(); + const AZStd::string baseName = ShaderNames[mapType] + AZStd::to_string(texArrayIdx); + + m_decalTextureArrayIndices[texArrayIdx][mapType] = viewSrgLayout->FindShaderInputImageIndex(Name(baseName.c_str())); + AZ_Warning( + "DecalTextureArrayFeatureProcessor", m_decalTextureArrayIndices[texArrayIdx][mapType].IsValid(), + "Unable to find %s in decal shader.", + baseName.c_str()); + } } } @@ -411,8 +455,11 @@ namespace AZ int iter = m_textureArrayList.begin(); while (iter != -1) { - const auto& packedTexture = m_textureArrayList[iter].second.GetPackedTexture(); - view->GetShaderResourceGroup()->SetImage(m_decalTextureArrayIndices[iter], packedTexture); + for (int mapType = 0 ; mapType < DecalMapType_Num ; ++mapType) + { + const auto& packedTexture = m_textureArrayList[iter].second.GetPackedTexture(aznumeric_cast(mapType)); + view->GetShaderResourceGroup()->SetImage(m_decalTextureArrayIndices[iter][mapType], packedTexture); + } iter = m_textureArrayList.next(iter); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h index 57c5c69e0d..fd535bbe64 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h @@ -89,6 +89,7 @@ namespace AZ private: // Number of size and format permutations + // This number should match the number of texture arrays in Decals/ViewSrg.azsli static constexpr int NumTextureArrays = 5; static constexpr const char* FeatureProcessorName = "DecalTextureArrayFeatureProcessor"; @@ -113,6 +114,7 @@ namespace AZ AZStd::optional AddMaterialToTextureArrays(const AZ::RPI::MaterialAsset* materialAsset); int FindTextureArrayWithSize(const RHI::Size& size) const; + void RemoveMaterialFromDecal(const uint16_t decalIndex); void SetDecalTextureLocation(const DecalHandle& handle, const DecalLocation location); void QueueMaterialLoadForDecal(const AZ::Data::AssetId material, const DecalHandle handle); bool RemoveDecalFromTextureArrays(const DecalLocation decalLocation); @@ -128,7 +130,7 @@ namespace AZ // 4 textures @ 512x512 IndexableList < AZStd::pair < AZ::RHI::Size, DecalTextureArray>> m_textureArrayList; - AZStd::array m_decalTextureArrayIndices; + AZStd::array, NumTextureArrays> m_decalTextureArrayIndices; GpuBufferHandler m_decalBufferHandler; AsyncLoadTracker m_materialLoadTracker; diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.cpp index 4d58948b98..b4f91e58d9 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.cpp @@ -128,8 +128,8 @@ namespace AZ void DiffuseProbeGrid::SetTransform(const AZ::Transform& transform) { - m_position = transform.GetTranslation(); - m_aabbWs = Aabb::CreateCenterHalfExtents(m_position, m_extents / 2.0f); + m_transform = transform; + m_obbWs = Obb::CreateFromPositionRotationAndHalfLengths(m_transform.GetTranslation(), m_transform.GetRotation(), m_extents / 2.0f); // probes need to be relocated since the grid position changed m_remainingRelocationIterations = DefaultNumRelocationIterations; @@ -145,7 +145,7 @@ namespace AZ void DiffuseProbeGrid::SetExtents(const AZ::Vector3& extents) { m_extents = extents; - m_aabbWs = Aabb::CreateCenterHalfExtents(m_position, m_extents / 2.0f); + m_obbWs = Obb::CreateFromPositionRotationAndHalfLengths(m_transform.GetTranslation(), m_transform.GetRotation(), m_extents / 2.0f); // recompute the number of probes since the extents changed UpdateProbeCount(); @@ -467,7 +467,10 @@ namespace AZ RHI::ShaderInputConstantIndex constantIndex; constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.origin")); - srg->SetConstant(constantIndex, m_position); + srg->SetConstant(constantIndex, m_transform.GetTranslation()); + + constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.rotation")); + srg->SetConstant(constantIndex, m_transform.GetRotation()); constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.numRaysPerProbe")); srg->SetConstant(constantIndex, m_numRaysPerProbe); @@ -760,14 +763,15 @@ namespace AZ RHI::ShaderInputImageIndex imageIndex; constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_modelToWorld")); - AZ::Matrix3x4 modelToWorld = AZ::Matrix3x4::CreateFromMatrix3x3AndTranslation(Matrix3x3::CreateIdentity(), m_position) * AZ::Matrix3x4::CreateScale(m_extents); + AZ::Matrix3x4 modelToWorld = AZ::Matrix3x4::CreateFromTransform(m_transform) * AZ::Matrix3x4::CreateScale(m_extents); m_renderObjectSrg->SetConstant(constantIndex, modelToWorld); - constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_aabbMin")); - m_renderObjectSrg->SetConstant(constantIndex, m_aabbWs.GetMin()); + constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_modelToWorldInverse")); + AZ::Matrix3x4 modelToWorldInverse = AZ::Matrix3x4::CreateFromTransform(m_transform).GetInverseFull(); + m_renderObjectSrg->SetConstant(constantIndex, modelToWorldInverse); - constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_aabbMax")); - m_renderObjectSrg->SetConstant(constantIndex, m_aabbWs.GetMax()); + constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_obbHalfLengths")); + m_renderObjectSrg->SetConstant(constantIndex, m_obbWs.GetHalfLengths()); constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_enableDiffuseGI")); m_renderObjectSrg->SetConstant(constantIndex, m_enabled); @@ -821,13 +825,14 @@ namespace AZ lod.m_screenCoverageMax = 1.0f; // update cullable bounds + Aabb aabbWs = Aabb::CreateFromObb(m_obbWs); Vector3 center; float radius; - m_aabbWs.GetAsSphere(center, radius); + aabbWs.GetAsSphere(center, radius); m_cullable.m_cullData.m_boundingSphere = Sphere(center, radius); - m_cullable.m_cullData.m_boundingObb = m_aabbWs.GetTransformedObb(AZ::Transform::CreateIdentity()); - m_cullable.m_cullData.m_visibilityEntry.m_boundingVolume = m_aabbWs; + m_cullable.m_cullData.m_boundingObb = m_obbWs; + m_cullable.m_cullData.m_visibilityEntry.m_boundingVolume = aabbWs; m_cullable.m_cullData.m_visibilityEntry.m_userData = &m_cullable; m_cullable.m_cullData.m_visibilityEntry.m_typeFlags = AzFramework::VisibilityEntry::TYPE_RPI_Cullable; diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.h b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.h index 89e7173dd5..97c336ed41 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.h +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGrid.h @@ -72,7 +72,7 @@ namespace AZ const AZ::Vector3& GetExtents() const { return m_extents; } void SetExtents(const AZ::Vector3& extents); - const AZ::Aabb& GetAabbWs() const { return m_aabbWs; } + const AZ::Obb& GetObbWs() const { return m_obbWs; } bool ValidateProbeSpacing(const AZ::Vector3& newSpacing); const AZ::Vector3& GetProbeSpacing() const { return m_probeSpacing; } @@ -183,14 +183,14 @@ namespace AZ // scene RPI::Scene* m_scene = nullptr; - // probe grid position - AZ::Vector3 m_position = AZ::Vector3(0.0f, 0.0f, 0.0f); + // probe grid transform + AZ::Transform m_transform = AZ::Transform::CreateIdentity(); // extents of the probe grid AZ::Vector3 m_extents = AZ::Vector3(0.0f, 0.0f, 0.0f); - // probe grid AABB (world space), built from position and extents - AZ::Aabb m_aabbWs = AZ::Aabb::CreateNull(); + // probe grid OBB (world space), built from transform and extents + AZ::Obb m_obbWs; // per-axis spacing of probes in the grid AZ::Vector3 m_probeSpacing; diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp index 69a4ecdee5..cf1897054a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp @@ -54,27 +54,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeGridBlendDistancePass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeGridBlendDistancePass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp index 83ef312bf4..f4733c833a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp @@ -54,27 +54,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeBlendIrradiancePass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeBlendIrradiancePass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp index b251526cb4..6c72f904b9 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp @@ -67,27 +67,10 @@ namespace AZ srgLayout = shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(shader->GetAsset(), dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeGridBorderUpdatePass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeGridBorderUpdatePass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp index 2690f90a7d..61540c3332 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp @@ -58,27 +58,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeClassificationPass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeClassificationPass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridFeatureProcessor.cpp index d79240d4f1..4329fd556c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridFeatureProcessor.cpp @@ -154,10 +154,11 @@ namespace AZ // sort the probes by descending inner volume size, so the smallest volumes are rendered last auto sortFn = [](AZStd::shared_ptr const& probe1, AZStd::shared_ptr const& probe2) -> bool { - const Aabb& aabb1 = probe1->GetAabbWs(); - const Aabb& aabb2 = probe2->GetAabbWs(); - float size1 = aabb1.GetXExtent() * aabb1.GetZExtent() * aabb1.GetYExtent(); - float size2 = aabb2.GetXExtent() * aabb2.GetZExtent() * aabb2.GetYExtent(); + const Obb& obb1 = probe1->GetObbWs(); + const Obb& obb2 = probe2->GetObbWs(); + float size1 = obb1.GetHalfLengthX() * obb1.GetHalfLengthZ() * obb1.GetHalfLengthY(); + float size2 = obb2.GetHalfLengthX() * obb2.GetHalfLengthZ() * obb2.GetHalfLengthY(); + return (size1 > size2); }; diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp index 67fb95a833..a1b236ed4d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp @@ -58,27 +58,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeRelocationPass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeRelocationPass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DisplayMapper/DisplayMapperConfigurationDescriptor.cpp b/Gems/Atom/Feature/Common/Code/Source/DisplayMapper/DisplayMapperConfigurationDescriptor.cpp index a9ee46dd2c..9e29070e71 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DisplayMapper/DisplayMapperConfigurationDescriptor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DisplayMapper/DisplayMapperConfigurationDescriptor.cpp @@ -7,6 +7,7 @@ */ +#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/FrameCaptureSystemComponent.cpp b/Gems/Atom/Feature/Common/Code/Source/FrameCaptureSystemComponent.cpp index 9f6d2a343d..51e18b8e31 100644 --- a/Gems/Atom/Feature/Common/Code/Source/FrameCaptureSystemComponent.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/FrameCaptureSystemComponent.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -34,21 +35,12 @@ #include #include -#if defined(OPEN_IMAGE_IO_ENABLED) -// OpenImageIO/fmath.h(2271,5): error C4777: 'fprintf' : format string '%zd' requires an argument of type 'unsigned __int64', but variadic -// argument 5 has type 'OpenImageIO_v2_1::span_strided::index_type' -AZ_PUSH_DISABLE_WARNING(4777, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING -#endif - namespace AZ { namespace Render { AZ_ENUM_DEFINE_REFLECT_UTILITIES(FrameCaptureResult); -#if defined(OPEN_IMAGE_IO_ENABLED) AZ_CVAR(unsigned int, r_pngCompressionLevel, 3, // A compression level of 3 seems like the best default in terms of file size and saving speeds @@ -97,28 +89,22 @@ namespace AZ jobCompletion.StartAndWaitForCompletion(); } - using namespace OIIO; - AZStd::unique_ptr out = ImageOutput::create(outputFilePath.c_str()); - if (out) - { - ImageSpec spec( - readbackResult.m_imageDescriptor.m_size.m_width, - readbackResult.m_imageDescriptor.m_size.m_height, - numChannels - ); - spec.attribute("png:compressionLevel", r_pngCompressionLevel); + Utils::PngFile image = Utils::PngFile::Create(readbackResult.m_imageDescriptor.m_size, readbackResult.m_imageDescriptor.m_format, *buffer); - if (out->open(outputFilePath.c_str(), spec)) - { - out->write_image(TypeDesc::UINT8, buffer->data()); - out->close(); - return FrameCaptureOutputResult{FrameCaptureResult::Success, AZStd::nullopt}; - } + Utils::PngFile::SaveSettings saveSettings; + saveSettings.m_compressionLevel = r_pngCompressionLevel; + // We should probably strip alpha to save space, especially for automated test screenshots. Alpha is left in to maintain + // prior behavior, changing this is out of scope for the current task. Note, it would have bit of a cascade effect where + // AtomSampleViewer's ScriptReporter assumes an RGBA image. + saveSettings.m_stripAlpha = false; + + if(image && image.Save(outputFilePath.c_str(), saveSettings)) + { + return FrameCaptureOutputResult{FrameCaptureResult::Success, AZStd::nullopt}; } - return FrameCaptureOutputResult{FrameCaptureResult::InternalError, "Unable to save frame capture output to " + outputFilePath}; + return FrameCaptureOutputResult{FrameCaptureResult::InternalError, "Unable to save frame capture output to '" + outputFilePath + "'"}; } -#endif FrameCaptureOutputResult DdsFrameCaptureOutput( const AZStd::string& outputFilePath, const AZ::RPI::AttachmentReadback::ReadbackResult& readbackResult) @@ -502,7 +488,6 @@ namespace AZ m_result = ddsFrameCapture.m_result; m_latestCaptureInfo = ddsFrameCapture.m_errorMessage.value_or(""); } -#if defined(OPEN_IMAGE_IO_ENABLED) else if (extension == "png") { if (readbackResult.m_imageDescriptor.m_format == RHI::Format::R8G8B8A8_UNORM || @@ -523,7 +508,6 @@ namespace AZ m_result = FrameCaptureResult::UnsupportedFormat; } } -#endif else { m_latestCaptureInfo = AZStd::string::format("Only supports saving image to ppm or dds files"); diff --git a/Gems/Atom/Feature/Common/Code/Source/Material/MaterialAssignment.cpp b/Gems/Atom/Feature/Common/Code/Source/Material/MaterialAssignment.cpp index 4d437be244..8984ec160b 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Material/MaterialAssignment.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Material/MaterialAssignment.cpp @@ -7,6 +7,8 @@ */ #include +#include +#include #include #include #include @@ -69,9 +71,9 @@ namespace AZ } MaterialAssignment::MaterialAssignment(const AZ::Data::AssetId& materialAssetId) - : m_materialInstance() + : m_materialAsset(materialAssetId, AZ::AzTypeInfo::Uuid()) + , m_materialInstance() { - m_materialAsset.Create(materialAssetId); } MaterialAssignment::MaterialAssignment(const Data::Asset& asset) @@ -88,12 +90,70 @@ namespace AZ void MaterialAssignment::RebuildInstance() { + if (m_materialInstancePreCreated) + { + return; + } + if (m_materialAsset.IsReady()) { - m_materialInstance = - m_propertyOverrides.empty() ? RPI::Material::FindOrCreate(m_materialAsset) : RPI::Material::Create(m_materialAsset); + m_materialInstance = m_propertyOverrides.empty() ? RPI::Material::FindOrCreate(m_materialAsset) : RPI::Material::Create(m_materialAsset); AZ_Error("MaterialAssignment", m_materialInstance, "Material instance not initialized"); } + else if (m_defaultMaterialAsset.IsReady()) + { + m_materialInstance = m_propertyOverrides.empty() ? RPI::Material::FindOrCreate(m_defaultMaterialAsset) : RPI::Material::Create(m_defaultMaterialAsset); + AZ_Error("MaterialAssignment", m_materialInstance, "Material instance not initialized"); + } + } + + void MaterialAssignment::Release() + { + if (!m_materialInstancePreCreated) + { + m_materialInstance = nullptr; + } + m_materialAsset.Release(); + m_defaultMaterialAsset.Release(); + } + + bool MaterialAssignment::RequiresLoading() const + { + return + !m_materialInstancePreCreated && + !m_materialAsset.IsReady() && + !m_materialAsset.IsLoading() && + !m_defaultMaterialAsset.IsReady() && + !m_defaultMaterialAsset.IsLoading(); + } + + bool MaterialAssignment::ApplyProperties() + { + // if there is no instance or no properties there's nothing to apply + if (!m_materialInstance || m_propertyOverrides.empty()) + { + return true; + } + + if (m_materialInstance->CanCompile()) + { + for (const auto& propertyPair : m_propertyOverrides) + { + if (!propertyPair.second.empty()) + { + const auto& materialPropertyIndex = m_materialInstance->FindPropertyIndex(propertyPair.first); + if (!materialPropertyIndex.IsNull()) + { + m_materialInstance->SetPropertyValue( + materialPropertyIndex, AZ::RPI::MaterialPropertyValue::FromAny(propertyPair.second)); + } + } + } + + return m_materialInstance->Compile(); + } + + return false; } AZStd::string MaterialAssignment::ToString() const diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp index 3fcda71998..c7fb19bc5d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp @@ -6,11 +6,11 @@ * */ -#include - #include #include +#include #include +#include #include #include #include @@ -19,6 +19,8 @@ #include +#include + #include #include @@ -176,6 +178,7 @@ namespace AZ { if (meshHandle.IsValid()) { + meshHandle->m_meshLoader.reset(); meshHandle->DeInit(); m_transformService->ReleaseObjectId(meshHandle->m_objectId); @@ -488,10 +491,12 @@ namespace AZ } Data::AssetBus::Handler::BusConnect(modelAsset.GetId()); + AzFramework::AssetCatalogEventBus::Handler::BusConnect(); } MeshDataInstance::MeshLoader::~MeshLoader() { + AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); Data::AssetBus::Handler::BusDisconnect(); } @@ -534,6 +539,7 @@ namespace AZ if (model) { + m_parent->RemoveRayTracingData(); m_parent->Init(model); m_modelChangedEvent.Signal(AZStd::move(model)); } @@ -546,10 +552,51 @@ namespace AZ } } + + void MeshDataInstance::MeshLoader::OnModelReloaded(Data::Asset asset) + { + OnAssetReady(asset); + } + void MeshDataInstance::MeshLoader::OnAssetError(Data::Asset asset) { // Note: m_modelAsset and asset represents same asset, but only m_modelAsset contains the file path in its hint from serialization - AZ_Error("MeshDataInstance::MeshLoader", false, "Failed to load asset %s.", m_modelAsset.GetHint().c_str()); + AZ_Error( + "MeshDataInstance::MeshLoader", false, "Failed to load asset %s. It may be missing, or not be finished processing", + m_modelAsset.GetHint().c_str()); + + AzFramework::AssetSystemRequestBus::Broadcast( + &AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetByUuid, m_modelAsset.GetId().m_guid); + } + + void MeshDataInstance::MeshLoader::OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) + { + if (assetId == m_modelAsset.GetId()) + { + Data::Asset modelAssetReference = m_modelAsset; + + // If the asset was modified, reload it + AZ::SystemTickBus::QueueFunction( + [=]() mutable + { + ModelReloaderSystemInterface::Get()->ReloadModel(modelAssetReference, m_modelReloadedEventHandler); + }); + } + } + + void MeshDataInstance::MeshLoader::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) + { + if (assetId == m_modelAsset.GetId()) + { + Data::Asset modelAssetReference = m_modelAsset; + + // If the asset didn't exist in the catalog when it first attempted to load, we need to try loading it again + AZ::SystemTickBus::QueueFunction( + [=]() mutable + { + ModelReloaderSystemInterface::Get()->ReloadModel(modelAssetReference, m_modelReloadedEventHandler); + }); + } } // MeshDataInstance... @@ -558,14 +605,8 @@ namespace AZ { m_scene->GetCullingScene()->UnregisterCullable(m_cullable); - // remove from ray tracing - RayTracingFeatureProcessor* rayTracingFeatureProcessor = m_scene->GetFeatureProcessor(); - if (rayTracingFeatureProcessor) - { - rayTracingFeatureProcessor->RemoveMesh(m_objectId); - } + RemoveRayTracingData(); - m_meshLoader.reset(); m_drawPacketListsByLod.clear(); m_materialAssignments.clear(); m_shaderResourceGroup = {}; @@ -952,6 +993,16 @@ namespace AZ rayTracingFeatureProcessor->SetMesh(m_objectId, m_model->GetModelAsset()->GetId(), subMeshes); } + void MeshDataInstance::RemoveRayTracingData() + { + // remove from ray tracing + RayTracingFeatureProcessor* rayTracingFeatureProcessor = m_scene->GetFeatureProcessor(); + if (rayTracingFeatureProcessor) + { + rayTracingFeatureProcessor->RemoveMesh(m_objectId); + } + } + void MeshDataInstance::SetSortKey(RHI::DrawItemSortKey sortKey) { m_sortKey = sortKey; diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.cpp new file mode 100644 index 0000000000..75df7c020b --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + ModelReloader::ModelReloader( + Data::Asset modelAsset, RemoveModelFromReloaderSystemEvent::Handler& removeReloaderFromSystemHandler) + { + m_modelAsset.push_back(modelAsset); + m_pendingDependencyListStatus.reset(); + removeReloaderFromSystemHandler.Connect(m_onRemoveReloaderFromSystem); + + // Iterate over the model and track the assets that need to be reloaded + for (auto& modelLodAsset : modelAsset->GetLodAssets()) + { + for (auto& mesh : modelLodAsset->GetMeshes()) + { + for (auto& streamBufferInfo : mesh.GetStreamBufferInfoList()) + { + InsertMeshDependencyIfUnique(streamBufferInfo.m_bufferAssetView.GetBufferAsset()); + + } + InsertMeshDependencyIfUnique(mesh.GetIndexBufferAssetView().GetBufferAsset()); + } + m_modelDependencies.push_back(modelLodAsset); + } + + AZ_Assert( + m_meshDependencies.size() <= m_pendingDependencyListStatus.size(), + "There are more buffers used by the model %s than are supported by the ModelReloader.", modelAsset.GetHint().c_str()); + + m_state = State::WaitingForMeshDependencies; + ReloadDependenciesAndWait(); + } + + void ModelReloader::ConnectOnReloadedEventHandler(ModelReloadedEvent::Handler& onReloadedEventHandler) + { + onReloadedEventHandler.Connect(m_onModelReloaded); + } + + void ModelReloader::OnAssetReloaded(AZ::Data::Asset asset) + { + DependencyList& pendingDependencies = GetPendingDependencyList(); + + const Data::AssetId& reloadedAssetId = asset.GetId(); + + // Find the index of the asset that was reloaded + const auto matchesId = [reloadedAssetId](const Data::Asset& asset){ return asset.GetId() == reloadedAssetId;}; + const auto& iter = AZStd::find_if(AZStd::begin(pendingDependencies), AZStd::end(pendingDependencies), matchesId); + AZ_Assert( + iter != AZStd::end(pendingDependencies), + "ModelReloader - handling an AssetReloaded event for an asset that is not part of the dependency list."); + size_t currentIndex = AZStd::distance(AZStd::begin(pendingDependencies), iter); + + // Keep a reference to the newly reloaded asset to prevent it from being immediately released + pendingDependencies[currentIndex] = asset; + Data::AssetBus::MultiHandler::BusDisconnect(reloadedAssetId); + + // Clear the bit, now that it has been reloaded + m_pendingDependencyListStatus.reset(currentIndex); + + if (m_pendingDependencyListStatus.none()) + { + AdvanceToNextLevelOfHierarchy(); + } + } + + void ModelReloader::OnAssetReloadError(Data::Asset asset) + { + // An error is actually okay/expected in some situations. + // For example, if the 2nd UV set was removed, and we tried to reload the second uv set, the reload would fail. + // We want to treat it as a success, and mark that dependency as 'up to date' + OnAssetReloaded(asset); + } + + void ModelReloader::InsertMeshDependencyIfUnique(Data::Asset asset) + { + if (AZStd::find(AZStd::begin(m_meshDependencies), AZStd::end(m_meshDependencies), asset) == AZStd::end(m_meshDependencies)) + { + // Multiple meshes may reference the same buffer, so only add the dependency if it is unique + m_meshDependencies.push_back(asset); + } + } + + void ModelReloader::ReloadDependenciesAndWait() + { + // Get the current list of dependencies depending on the current state + DependencyList& dependencies = GetPendingDependencyList(); + + if (!m_pendingDependencyListStatus.none()) + { + AZ_Assert( + m_pendingDependencyListStatus.none(), + "ModelReloader attempting to add new dependencies while still waiting for other dependencies in the hierarchy to " + "load."); + } + if (dependencies.empty()) + { + // If the original model asset failed to load, it won't have any dependencies to reload + AdvanceToNextLevelOfHierarchy(); + } + AZ_Assert( + dependencies.size() <= m_pendingDependencyListStatus.size(), + "ModelReloader has more dependencies than can fit in the bitset. The size of m_pendingDependencyListStatus needs to be increased."); + + // Set all bits to 1 + m_pendingDependencyListStatus.set(); + // Clear the least significant n-bits + m_pendingDependencyListStatus <<= dependencies.size(); + // Set the least significant n-bits to 1, and the rest to 0 + m_pendingDependencyListStatus.flip(); + + // Reload all the assets + for (Data::Asset& dependencyAsset : dependencies) + { + Data::AssetBus::MultiHandler::BusConnect(dependencyAsset.GetId()); + dependencyAsset.Reload(); + } + } + + void ModelReloader::AdvanceToNextLevelOfHierarchy() + { + switch (m_state) + { + case State::WaitingForMeshDependencies: + m_state = State::WaitingForModelDependencies; + ReloadDependenciesAndWait(); + break; + case State::WaitingForModelDependencies: + m_state = State::WaitingForModel; + ReloadDependenciesAndWait(); + break; + case State::WaitingForModel: + Data::AssetBus::MultiHandler::BusDisconnect(); + // Since the model asset is finished reloading, orphan model from the instance database + // so that all of the buffer instances are re-created with the latest data + RPI::Model::TEMPOrphanFromDatabase(m_modelAsset.front()); + // Signal that the model is ready + m_onModelReloaded.Signal(m_modelAsset.front()); + // Remove this reloader from the ModelReloaderSystem + m_onRemoveReloaderFromSystem.Signal(m_modelAsset.front().GetId()); + delete this; + break; + } + } + + ModelReloader::DependencyList& ModelReloader::GetPendingDependencyList() + { + switch (m_state) + { + case State::WaitingForMeshDependencies: + return m_meshDependencies; + break; + case State::WaitingForModelDependencies: + return m_modelDependencies; + break; + case State::WaitingForModel: + default: + return m_modelAsset; + break; + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.h b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.h new file mode 100644 index 0000000000..6b4c493d52 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace AZ +{ + namespace RPI + { + class ModelAsset; + } + + namespace Render + { + //! ModelReloader takes care of reloading Buffer, ModelLod, and Model assets in the correct order + //! The ModelReloaderSystem should be used to reload a model, rather than using a ModelReloader directly + class ModelReloader + : private Data::AssetBus::MultiHandler + { + using DependencyList = AZStd::vector>; + public: + AZ_RTTI(AZ::Render::ModelReloader, "{99B75A6A-62B6-490A-9953-029BE7D69452}"); + + ModelReloader() = default; + + //! Reload a model asset + //! @param modelAsset - the asset to be reloaded + //! @param removeReloaderFromSystemHandler - an event that will tell the ModelReloaderSystem when to remove the reloader because it is finished + ModelReloader(Data::Asset modelAsset, RemoveModelFromReloaderSystemEvent::Handler& removeReloaderFromSystemHandler); + + //! Connects a handler that will handle an event when the model is finished reloading + void ConnectOnReloadedEventHandler(ModelReloadedEvent::Handler& onReloadedEventHandler); + + private: + enum class State + { + WaitingForMeshDependencies, + WaitingForModelDependencies, + WaitingForModel + }; + + // Data::AssetBus::MultiHandler overrides... + void OnAssetReloaded(AZ::Data::Asset asset) override; + void OnAssetReloadError(Data::Asset asset) override; + + void InsertMeshDependencyIfUnique(Data::Asset asset); + void ReloadDependenciesAndWait(); + void AdvanceToNextLevelOfHierarchy(); + DependencyList& GetPendingDependencyList(); + + ModelReloadedEvent m_onModelReloaded; + RemoveModelFromReloaderSystemEvent m_onRemoveReloaderFromSystem; + + // Keep track of all the asset references for each level of the hierarchy + DependencyList m_modelAsset; + DependencyList m_meshDependencies; + DependencyList m_modelDependencies; + + AZStd::bitset<1024> m_pendingDependencyListStatus; + State m_state; + }; + + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.cpp new file mode 100644 index 0000000000..017f0f3419 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + void ModelReloaderSystem::ReloadModel(Data::Asset modelAsset, ModelReloadedEvent::Handler& onReloadedEventHandler) + { + AZStd::scoped_lock lock(m_pendingReloadMutex); + if (m_pendingReloads.find(modelAsset.GetId()) == m_pendingReloads.end()) + { + ModelReloader* reloader = new ModelReloader(modelAsset, m_removeModelHandler); + m_pendingReloads[modelAsset.GetId()] = reloader; + } + + m_pendingReloads[modelAsset.GetId()]->ConnectOnReloadedEventHandler(onReloadedEventHandler); + } + + void ModelReloaderSystem::RemoveReloader(const Data::AssetId& assetId) + { + AZStd::scoped_lock lock(m_pendingReloadMutex); + // We don't delete the ModelReloader here, because its in the middle of signaling this RemoveReloader event. + // We only remove it from the pending reloads here. + // The ModelReloader will delete itself after it finishes firing this event. + m_pendingReloads.erase(assetId); + } + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.h b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.h new file mode 100644 index 0000000000..dbdc6c77b1 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + class ModelReloader; + + using RemoveModelFromReloaderSystemEvent = Event; + + class ModelReloaderSystem + : public ModelReloaderSystemInterface + { + public: + AZ_RTTI(Render::ModelReloaderSystem, "{8C85ECCD-B6C8-4949-B26C-9C4F1020F2B8}", Render::ModelReloaderSystemInterface); + + void ReloadModel(Data::Asset modelAsset, ModelReloadedEvent::Handler& onReloadedEventHandler) override; + + private: + void RemoveReloader(const Data::AssetId& assetId); + + // Keep track of all the pending reloads so there are no duplicates + AZStd::unordered_map m_pendingReloads; + AZStd::mutex m_pendingReloadMutex; + + RemoveModelFromReloaderSystemEvent::Handler m_removeModelHandler{ + [&](const Data::AssetId& assetId) + { + RemoveReloader(assetId); + } }; + + friend class ModelReloader; + }; + + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp b/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp index 19f379b17d..fcf1402ae6 100644 --- a/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -79,15 +80,11 @@ namespace AZ m_dispatchItem.m_pipelineState = m_morphTargetShader->AcquirePipelineState(pipelineStateDescriptor); // Get the threads-per-group values from the compute shader [numthreads(x,y,z)] - const auto& numThreads = m_morphTargetShader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, AZ::Name{ "numthreads" }); auto& arguments = m_dispatchItem.m_arguments.m_direct; - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_morphTargetShader->GetAsset(), arguments); + if (!outcome.IsSuccess()) { - const auto& args = *numThreads; - // Check that the arguments are valid integers, and fall back to 1,1,1 if there is an error - arguments.m_threadsPerGroupX = static_cast(args[0].type() == azrtti_typeid() ? AZStd::any_cast(args[0]) : 1); - arguments.m_threadsPerGroupY = static_cast(args[1].type() == azrtti_typeid() ? AZStd::any_cast(args[1]) : 1); - arguments.m_threadsPerGroupZ = static_cast(args[2].type() == azrtti_typeid() ? AZStd::any_cast(args[2]) : 1); + AZ_Error("MorphTargetDispatchItem", false, outcome.GetError().c_str()); } arguments.m_totalNumberOfThreadsX = m_morphTargetMetaData.m_vertexCount; diff --git a/Gems/Atom/Feature/Common/Code/Source/Platform/Windows/platform_windows.cmake b/Gems/Atom/Feature/Common/Code/Source/Platform/Windows/platform_windows.cmake index ecdc7d59ab..7c594fc945 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Platform/Windows/platform_windows.cmake +++ b/Gems/Atom/Feature/Common/Code/Source/Platform/Windows/platform_windows.cmake @@ -12,12 +12,5 @@ endif() set(LY_BUILD_DEPENDENCIES PRIVATE - 3rdParty::OpenImageIO 3rdParty::ilmbase ) - -# [GFX-TODO] Add macro defintion in OpenImageIO 3rd party find cmake file -set(LY_COMPILE_DEFINITIONS - PRIVATE - OPEN_IMAGE_IO_ENABLED -) diff --git a/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.h b/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.h index 5b56b70ec8..bee304c5b9 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.h +++ b/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp index bfc533763e..5ec26cebde 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -199,17 +200,14 @@ namespace AZ m_instanceSrg->Compile(); m_dispatchItem.m_uniqueShaderResourceGroup = m_instanceSrg->GetRHIShaderResourceGroup(); m_dispatchItem.m_pipelineState = m_skinningShader->AcquirePipelineState(pipelineStateDescriptor); - - const auto& numThreads = m_skinningShader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, AZ::Name{ "numthreads" }); + auto& arguments = m_dispatchItem.m_arguments.m_direct; - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_skinningShader->GetAsset(), arguments); + if (!outcome.IsSuccess()) { - const auto& args = *numThreads; - arguments.m_threadsPerGroupX = static_cast(args[0].type() == azrtti_typeid() ? AZStd::any_cast(args[0]) : 1); - arguments.m_threadsPerGroupY = static_cast(args[1].type() == azrtti_typeid() ? AZStd::any_cast(args[1]) : 1); - arguments.m_threadsPerGroupZ = static_cast(args[2].type() == azrtti_typeid() ? AZStd::any_cast(args[2]) : 1); + AZ_Error("SkinnedMeshInputBuffers", false, outcome.GetError().c_str()); } - + arguments.m_totalNumberOfThreadsX = xThreads; arguments.m_totalNumberOfThreadsY = yThreads; arguments.m_totalNumberOfThreadsZ = 1; diff --git a/Gems/Atom/Feature/Common/Code/Source/Utils/LightingPreset.cpp b/Gems/Atom/Feature/Common/Code/Source/Utils/LightingPreset.cpp index 36c604c931..8984747b74 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Utils/LightingPreset.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Utils/LightingPreset.cpp @@ -9,6 +9,7 @@ #undef RC_INVOKED #include +#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/Utils/ModelPreset.cpp b/Gems/Atom/Feature/Common/Code/Source/Utils/ModelPreset.cpp index 156fca3b7e..c684b3cc89 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Utils/ModelPreset.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Utils/ModelPreset.cpp @@ -9,8 +9,11 @@ #undef RC_INVOKED #include +#include #include #include +#include +#include namespace AZ { diff --git a/Gems/Atom/Feature/Common/Code/Tests/Decals/DecalTextureArrayTests.cpp b/Gems/Atom/Feature/Common/Code/Tests/Decals/DecalTextureArrayTests.cpp index fcbcec0256..84c2b88507 100644 --- a/Gems/Atom/Feature/Common/Code/Tests/Decals/DecalTextureArrayTests.cpp +++ b/Gems/Atom/Feature/Common/Code/Tests/Decals/DecalTextureArrayTests.cpp @@ -42,7 +42,7 @@ namespace UnitTest { AZ::Render::DecalTextureArray decalTextureArray; decalTextureArray.Pack(); - auto nothing = decalTextureArray.GetPackedTexture(); + auto nothing = decalTextureArray.GetPackedTexture(AZ::Render::DecalMapType_Diffuse); EXPECT_EQ(nothing, nullptr); } diff --git a/Gems/Atom/Feature/Common/Code/atom_feature_common_editor_files.cmake b/Gems/Atom/Feature/Common/Code/atom_feature_common_editor_files.cmake index 59a29f04b6..8262500ca1 100644 --- a/Gems/Atom/Feature/Common/Code/atom_feature_common_editor_files.cmake +++ b/Gems/Atom/Feature/Common/Code/atom_feature_common_editor_files.cmake @@ -7,6 +7,7 @@ # set(FILES + Include/Atom/Feature/RenderCommon.h Include/Atom/Feature/Utils/EditorRenderComponentAdapter.h Include/Atom/Feature/Utils/EditorRenderComponentAdapter.inl Include/Atom/Feature/Utils/EditorLightingPreset.h @@ -16,7 +17,6 @@ set(FILES Source/EditorCommonSystemComponent.cpp Source/EditorCommonSystemComponent.h Source/CommonModule.cpp - Source/RenderCommon.h Source/Material/ConvertEmissiveUnitFunctorSourceData.cpp Source/Material/ConvertEmissiveUnitFunctorSourceData.h Source/Material/MaterialConverterSystemComponent.cpp diff --git a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake index 92f96a591b..18cdc273d2 100644 --- a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake +++ b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake @@ -8,6 +8,7 @@ set(FILES 3rdParty/ACES/ACES/Aces.h + Include/Atom/Feature/RenderCommon.h Include/Atom/Feature/ACES/AcesDisplayMapperFeatureProcessor.h Include/Atom/Feature/Automation/AtomAutomationBus.h Include/Atom/Feature/AuxGeom/AuxGeomFeatureProcessor.h @@ -25,6 +26,7 @@ set(FILES Include/Atom/Feature/ImageBasedLights/ImageBasedLightFeatureProcessor.h Include/Atom/Feature/LookupTable/LookupTableAsset.h Include/Atom/Feature/Mesh/MeshFeatureProcessor.h + Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h Include/Atom/Feature/PostProcessing/PostProcessingConstants.h Include/Atom/Feature/PostProcessing/SMAAFeatureProcessorInterface.h Include/Atom/Feature/PostProcess/PostFxLayerCategoriesConstants.h @@ -52,7 +54,6 @@ set(FILES Source/FrameCaptureSystemComponent.h Source/ProfilingCaptureSystemComponent.cpp Source/ProfilingCaptureSystemComponent.h - Source/RenderCommon.h 3rdParty/ACES/ACES/Aces.cpp Source/ACES/AcesDisplayMapperFeatureProcessor.cpp Source/AuxGeom/AuxGeomBase.h @@ -169,6 +170,10 @@ set(FILES Source/Math/MathFilter.cpp Source/Math/MathFilterDescriptor.h Source/Mesh/MeshFeatureProcessor.cpp + Source/Mesh/ModelReloader.cpp + Source/Mesh/ModelReloader.h + Source/Mesh/ModelReloaderSystem.cpp + Source/Mesh/ModelReloaderSystem.h Source/MorphTargets/MorphTargetComputePass.cpp Source/MorphTargets/MorphTargetComputePass.h Source/MorphTargets/MorphTargetDispatchItem.cpp diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Handle.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Handle.h index 01e1fab7cc..3e0c3335a0 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Handle.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Handle.h @@ -9,6 +9,7 @@ #include #include +#include namespace AZ { diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h index ddcee53e69..48e7e0f339 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h @@ -23,6 +23,7 @@ namespace AZ { class Job; + class TaskGraphActiveInterface; namespace RHI { @@ -228,6 +229,8 @@ namespace AZ // list of RayTracingShaderTables that should be built this frame AZStd::vector> m_rayTracingShaderTablesToBuild; + + AZ::TaskGraphActiveInterface* m_taskGraphActive = nullptr; }; } } diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h index 0ce43159f6..cbb0db53c8 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h @@ -166,6 +166,10 @@ namespace AZ AZStd::array_view> GetImageGroup() const; AZStd::array_view> GetBufferGroup() const; AZStd::array_view GetSamplerGroup() const; + + //! Reset image and buffer views setup for this ShaderResourceGroupData + //! So it won't hold references for any RHI resources + void ResetViews(); //! Returns the opaque constant data populated by calls to SetConstant and SetConstantData. //! diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h index dbea45c54a..4d3534b845 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h @@ -11,6 +11,7 @@ #include #include +#include namespace AZ { diff --git a/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderSemantic.cpp b/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderSemantic.cpp index 3cb4bd05a5..718604d750 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderSemantic.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderSemantic.cpp @@ -7,6 +7,8 @@ */ #include + +#include #include #include #include diff --git a/Gems/Atom/RHI/Code/Source/RHI/AsyncWorkQueue.cpp b/Gems/Atom/RHI/Code/Source/RHI/AsyncWorkQueue.cpp index a076bf3e58..61f05306be 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/AsyncWorkQueue.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/AsyncWorkQueue.cpp @@ -26,7 +26,7 @@ namespace AZ m_workItemIndex = 0; m_lastCompletedWorkItem = AsyncWorkHandle::Null; AZStd::thread_desc threadDesc{ "AsyncWorkQueue" }; - m_thread = AZStd::thread([&]() { ProcessQueue(); }, &threadDesc); + m_thread = AZStd::thread(threadDesc, [&]() { ProcessQueue(); }); m_isInitialized = true; } diff --git a/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp b/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp index b50c36d3f9..f65c36f2ed 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp @@ -43,7 +43,7 @@ namespace AZ m_isWorkQueueEmpty = true; AZStd::thread_desc threadDesc{ GetName().GetCStr() }; - m_thread = AZStd::thread([&]() { ProcessQueue(); }, &threadDesc); + m_thread = AZStd::thread(threadDesc, [&]() { ProcessQueue(); }); } return resultCode; } diff --git a/Gems/Atom/RHI/Code/Source/RHI/Fence.cpp b/Gems/Atom/RHI/Code/Source/RHI/Fence.cpp index d030ff8d2b..162b07406e 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/Fence.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/Fence.cpp @@ -108,7 +108,7 @@ namespace AZ AZStd::thread_desc threadDesc{ "Fence WaitOnCpu Thread" }; - m_waitThread = AZStd::thread([this, callback]() + m_waitThread = AZStd::thread(threadDesc, [this, callback]() { ResultCode resultCode = WaitOnCpu(); if (resultCode != ResultCode::Success) @@ -116,7 +116,7 @@ namespace AZ AZ_Error("Fence", false, "Failed to call WaitOnCpu in async thread."); } callback(); - }, &threadDesc); + }); return ResultCode::Success; } diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp index 5d2feb1e34..0d3ac8216b 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp @@ -25,9 +25,11 @@ #include #include +#include #include #include #include +#include namespace AZ { @@ -77,6 +79,8 @@ namespace AZ m_rootScope = m_rootScopeProducer->GetScope(); m_device = &device; + m_taskGraphActive = AZ::Interface::Get(); + m_lastFrameEndTime = AZStd::GetTimeNowTicks(); return ResultCode::Success; @@ -85,6 +89,7 @@ namespace AZ void FrameScheduler::Shutdown() { m_device = nullptr; + m_taskGraphActive = nullptr; m_rootScopeProducer = nullptr; m_rootScope = nullptr; m_frameGraphExecuter = nullptr; @@ -258,50 +263,98 @@ namespace AZ if (m_compileRequest.m_jobPolicy == JobPolicy::Parallel) { - const auto compileGroupsBeginFunction = [](ShaderResourceGroupPool* srgPool) - { - srgPool->CompileGroupsBegin(); - }; - - resourcePoolDatabase.ForEachShaderResourceGroupPool(compileGroupsBeginFunction); - // Iterate over each SRG pool and fork jobs to compile SRGs. const uint32_t compilesPerJob = m_compileRequest.m_shaderResourceGroupCompilesPerJob; - AZ::JobCompletion jobCompletion; - - const auto compileIntervalsFunction = [compilesPerJob, &jobCompletion](ShaderResourceGroupPool* srgPool) + if (m_taskGraphActive && m_taskGraphActive->IsTaskGraphActive()) { - const uint32_t compilesInPool = srgPool->GetGroupsToCompileCount(); - const uint32_t jobCount = DivideByMultiple(compilesInPool, compilesPerJob); + AZ::TaskGraph taskGraph; - for (uint32_t i = 0; i < jobCount; ++i) + const auto compileIntervalsFunction = [compilesPerJob, &taskGraph](ShaderResourceGroupPool* srgPool) { - Interval interval; - interval.m_min = i * compilesPerJob; - interval.m_max = AZStd::min(interval.m_min + compilesPerJob, compilesInPool); - - const auto compileGroupsForIntervalLambda = [srgPool, interval]() + srgPool->CompileGroupsBegin(); + const uint32_t compilesInPool = srgPool->GetGroupsToCompileCount(); + const uint32_t jobCount = DivideByMultiple(compilesInPool, compilesPerJob); + AZ::TaskDescriptor srgCompileDesc{"SrgCompile", "Graphics"}; + AZ::TaskDescriptor srgCompileEndDesc{"SrgCompileEnd", "Graphics"}; + + auto srgCompileEndTask = taskGraph.AddTask( + srgCompileEndDesc, + [srgPool]() + { + srgPool->CompileGroupsEnd(); + }); + + for (uint32_t i = 0; i < jobCount; ++i) { - AZ_PROFILE_SCOPE(RHI, "FrameScheduler : compileGroupsForIntervalLambda"); - srgPool->CompileGroupsForInterval(interval); - }; + Interval interval; + interval.m_min = i * compilesPerJob; + interval.m_max = AZStd::min(interval.m_min + compilesPerJob, compilesInPool); + + auto compileTask = taskGraph.AddTask( + srgCompileDesc, + [srgPool, interval]() + { + AZ_PROFILE_SCOPE(RHI, "FrameScheduler : compileGroupsForIntervalLambda"); + srgPool->CompileGroupsForInterval(interval); + }); + compileTask.Precedes(srgCompileEndTask); + } + }; - AZ::Job* executeGroupJob = AZ::CreateJobFunction(AZStd::move(compileGroupsForIntervalLambda), true, nullptr); - executeGroupJob->SetDependent(&jobCompletion); - executeGroupJob->Start(); + resourcePoolDatabase.ForEachShaderResourceGroupPool(AZStd::move(compileIntervalsFunction)); + if (!taskGraph.IsEmpty()) + { + AZ::TaskGraphEvent finishedEvent; + taskGraph.Submit(&finishedEvent); + finishedEvent.Wait(); } - }; + } + else // use Job system + { + const auto compileGroupsBeginFunction = [](ShaderResourceGroupPool* srgPool) + { + srgPool->CompileGroupsBegin(); + }; - resourcePoolDatabase.ForEachShaderResourceGroupPool(AZStd::move(compileIntervalsFunction)); + resourcePoolDatabase.ForEachShaderResourceGroupPool(compileGroupsBeginFunction); - jobCompletion.StartAndWaitForCompletion(); + // Iterate over each SRG pool and fork jobs to compile SRGs. + AZ::JobCompletion jobCompletion; - const auto compileGroupsEndFunction = [](ShaderResourceGroupPool* srgPool) - { - srgPool->CompileGroupsEnd(); - }; + const auto compileIntervalsFunction = [compilesPerJob, &jobCompletion](ShaderResourceGroupPool* srgPool) + { + const uint32_t compilesInPool = srgPool->GetGroupsToCompileCount(); + const uint32_t jobCount = DivideByMultiple(compilesInPool, compilesPerJob); - resourcePoolDatabase.ForEachShaderResourceGroupPool(compileGroupsEndFunction); + for (uint32_t i = 0; i < jobCount; ++i) + { + Interval interval; + interval.m_min = i * compilesPerJob; + interval.m_max = AZStd::min(interval.m_min + compilesPerJob, compilesInPool); + + const auto compileGroupsForIntervalLambda = [srgPool, interval]() + { + AZ_PROFILE_SCOPE(RHI, "FrameScheduler : compileGroupsForIntervalLambda"); + srgPool->CompileGroupsForInterval(interval); + }; + + AZ::Job* executeGroupJob = AZ::CreateJobFunction(AZStd::move(compileGroupsForIntervalLambda), true, nullptr); + executeGroupJob->SetDependent(&jobCompletion); + executeGroupJob->Start(); + } + }; + + resourcePoolDatabase.ForEachShaderResourceGroupPool(AZStd::move(compileIntervalsFunction)); + + jobCompletion.StartAndWaitForCompletion(); + + const auto compileGroupsEndFunction = [](ShaderResourceGroupPool* srgPool) + { + srgPool->CompileGroupsEnd(); + }; + + resourcePoolDatabase.ForEachShaderResourceGroupPool(compileGroupsEndFunction); + } } else { @@ -317,7 +370,7 @@ namespace AZ //It is possible for certain back ends to run out of SRG memory (due to fragmentation) in which case //we try to compact and re-compile SRGs. - RHI::ResultCode resultCode = m_device->CompactSRGMemory(); + [[maybe_unused]] RHI::ResultCode resultCode = m_device->CompactSRGMemory(); AZ_Assert(resultCode == RHI::ResultCode::Success, "SRG compaction failed and this can lead to a gpu crash."); } diff --git a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp index ad3ab119ef..744b688c60 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp @@ -18,6 +18,7 @@ #include #include #include +#include AZ_DEFINE_BUDGET(RHI); @@ -101,6 +102,8 @@ namespace AZ } AZStd::string preferredUserAdapterName = RHI::GetCommandLineValue("forceAdapter"); + AZStd::to_lower(preferredUserAdapterName.begin(), preferredUserAdapterName.end()); + bool findPreferredUserDevice = preferredUserAdapterName.size() > 0; RHI::PhysicalDevice* preferredUserDevice{}; RHI::PhysicalDevice* preferredVendorDevice{}; @@ -110,12 +113,15 @@ namespace AZ const RHI::PhysicalDeviceDescriptor& descriptor = physicalDevice->GetDescriptor(); AZ_Printf("RHISystem", "\tEnumerated physical device: %s\n", descriptor.m_description.c_str()); - - if (!preferredUserDevice && descriptor.m_description == preferredUserAdapterName) + if (findPreferredUserDevice) { - preferredUserDevice = physicalDevice.get(); + AZStd::string descriptorLowerCase = descriptor.m_description; + AZStd::to_lower( descriptorLowerCase.begin(), descriptorLowerCase.end()); + if (!preferredUserDevice && descriptorLowerCase.contains(preferredUserAdapterName)) + { + preferredUserDevice = physicalDevice.get(); + } } - // Record the first nVidia or AMD device we find. if (!preferredVendorDevice && (descriptor.m_vendorId == RHI::VendorId::AMD || descriptor.m_vendorId == RHI::VendorId::nVidia)) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp index da7697d8f2..18b292ac64 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp @@ -330,6 +330,14 @@ namespace AZ return m_samplers; } + void ShaderResourceGroupData::ResetViews() + { + m_imageViews.assign(m_imageViews.size(), nullptr); + m_bufferViews.assign(m_bufferViews.size(), nullptr); + m_imageViewsUnboundedArray.assign(m_imageViewsUnboundedArray.size(), nullptr); + m_bufferViewsUnboundedArray.assign(m_bufferViewsUnboundedArray.size(), nullptr); + } + AZStd::array_view ShaderResourceGroupData::GetConstantData() const { return m_constantsData.GetConstantData(); diff --git a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp index 8495e9b119..27336c8280 100644 --- a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp +++ b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp @@ -28,7 +28,7 @@ namespace UnitTest m_application.reset(); } - static constexpr const char TestDataFolder[] = "@devroot@/Gems/Atom/RHI/Code/Tests/UtilsTestsData/"; + static constexpr const char TestDataFolder[] = "@engroot@/Gems/Atom/RHI/Code/Tests/UtilsTestsData/"; AZStd::unique_ptr m_application; }; diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp index cb9dac3864..5f85d3ad03 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp @@ -48,11 +48,6 @@ namespace AZ FramePacket& framePacket = m_framePackets.back(); framePacket.m_fence.Init(dx12Device, RHI::FenceState::Signaled); - Microsoft::WRL::ComPtr commandAllocator; - AssertSuccess(dx12Device->CreateCommandAllocator( - D3D12_COMMAND_LIST_TYPE_COPY, - IID_GRAPHICS_PPV_ARGS(commandAllocator.GetAddressOf()))); - CD3DX12_HEAP_PROPERTIES heapProperties(D3D12_HEAP_TYPE_UPLOAD); CD3DX12_RESOURCE_DESC bufferDesc = CD3DX12_RESOURCE_DESC::Buffer(descriptor.m_stagingSizeInBytes); @@ -65,22 +60,28 @@ namespace AZ nullptr, IID_GRAPHICS_PPV_ARGS(stagingResource.GetAddressOf()))); - framePacket.m_commandAllocator = commandAllocator.Get(); framePacket.m_stagingResource = stagingResource.Get(); CD3DX12_RANGE readRange(0, 0); framePacket.m_stagingResource->Map(0, &readRange, reinterpret_cast(&framePacket.m_stagingResourceData)); - } - Microsoft::WRL::ComPtr commandList; - AssertSuccess(dx12Device->CreateCommandList( - 0, - D3D12_COMMAND_LIST_TYPE_COPY, - m_framePackets.front().m_commandAllocator.get(), - nullptr, - IID_GRAPHICS_PPV_ARGS(commandList.GetAddressOf()))); + + Microsoft::WRL::ComPtr commandAllocator; + AssertSuccess(dx12Device->CreateCommandAllocator( + D3D12_COMMAND_LIST_TYPE_COPY, + IID_GRAPHICS_PPV_ARGS(commandAllocator.GetAddressOf()))); + framePacket.m_commandAllocator = commandAllocator.Get(); + + Microsoft::WRL::ComPtr commandList; + AssertSuccess(dx12Device->CreateCommandList( + 0, + D3D12_COMMAND_LIST_TYPE_COPY, + framePacket.m_commandAllocator.get(), + nullptr, + IID_GRAPHICS_PPV_ARGS(commandList.GetAddressOf()))); - m_commandList = commandList.Get(); - AssertSuccess(m_commandList->Close()); + framePacket.m_commandList = commandList.Get(); + AssertSuccess(framePacket.m_commandList->Close()); + } } void AsyncUploadQueue::Shutdown() @@ -90,11 +91,12 @@ namespace AZ m_copyQueue->Shutdown(); m_copyQueue = nullptr; } - m_commandList = nullptr; for (auto& framePacket : m_framePackets) { framePacket.m_fence.Shutdown(); + framePacket.m_commandList = nullptr; + framePacket.m_commandAllocator = nullptr; } m_framePackets.clear(); m_uploadFence.Shutdown(); @@ -170,7 +172,7 @@ namespace AZ memcpy(framePacket->m_stagingResourceData, sourceData + pendingByteOffset, bytesToCopy); } - m_commandList->CopyBufferRegion( + framePacket->m_commandList->CopyBufferRegion( dx12Buffer.get(), byteOffset + pendingByteOffset, framePacket->m_stagingResource.get(), @@ -204,7 +206,9 @@ namespace AZ framePacket->m_fence.Increment(); framePacket->m_dataOffset = 0; - AssertSuccess(m_commandList->Reset(framePacket->m_commandAllocator.get(), nullptr)); + AssertSuccess(framePacket->m_commandAllocator->Reset()); + AssertSuccess(framePacket->m_commandList->Reset(framePacket->m_commandAllocator.get(), nullptr)); + m_recordingFrame = true; return framePacket; @@ -215,11 +219,12 @@ namespace AZ AZ_PROFILE_SCOPE(RHI, "AsyncUploadQueue: EndFramePacket"); AZ_Assert(m_recordingFrame, "The frame packet wasn't started. You need to call StartFramePacket first."); - AssertSuccess(m_commandList->Close()); - ID3D12CommandList* commandLists[] = { m_commandList.get() }; + FramePacket& framePacket = m_framePackets[m_frameIndex]; + + AssertSuccess(framePacket.m_commandList->Close()); + ID3D12CommandList* commandLists[] = { framePacket.m_commandList.get() }; commandQueue->ExecuteCommandLists(1, commandLists); - FramePacket& framePacket = m_framePackets[m_frameIndex]; commandQueue->Signal(framePacket.m_fence.Get(), framePacket.m_fence.GetPendingValue()); m_frameIndex = (m_frameIndex + 1) % m_descriptor.m_frameCount; @@ -344,7 +349,7 @@ namespace AZ const uint32_t subresourceIdx = D3D12CalcSubresource(curMip, arraySlice, 0, imageMipLevels, arraySize); CD3DX12_TEXTURE_COPY_LOCATION destLocation(imageMemory, subresourceIdx); - m_commandList->CopyTextureRegion( + framePacket->m_commandList->CopyTextureRegion( &destLocation, 0, 0, depth, &sourceLocation, @@ -417,7 +422,7 @@ namespace AZ footprint.Offset = framePacket->m_dataOffset; CD3DX12_TEXTURE_COPY_LOCATION sourceLocation(framePacket->m_stagingResource.get(), footprint); - m_commandList->CopyTextureRegion( + framePacket->m_commandList->CopyTextureRegion( &destLocation, 0, destHeight, depth, &sourceLocation, diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h index 0856db0a11..a468ee4bc2 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h @@ -69,12 +69,13 @@ namespace AZ void ProcessCallbacks(uint64_t fenceValue); RHI::Ptr m_copyQueue; - RHI::Ptr m_commandList; struct FramePacket { - RHI::Ptr m_commandAllocator; RHI::Ptr m_stagingResource; + RHI::Ptr m_commandAllocator; + RHI::Ptr m_commandList; + Fence m_fence; // Using persistent mapping for the staging resource so the Map function only need to be called called once. diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp index bd163f1419..eadd571452 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp @@ -33,6 +33,7 @@ namespace AZ // Use separate work submission queue from the hw copy queue to avoid the per frame sync. m_copyQueue = CommandQueue::Create(); + m_copyQueue->SetName(AZ::Name("AsyncUpload Queue")); RHI::CommandQueueDescriptor commandQueueDescriptor; commandQueueDescriptor.m_hardwareQueueClass = RHI::HardwareQueueClass::Copy; diff --git a/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli b/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli index b004623c4e..80f8a6cc36 100644 --- a/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli +++ b/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli @@ -31,6 +31,23 @@ void swap(inout float a, inout float b) b = c; } +float Pow2(float x) +{ + return x * x; +} +float Pow3(float x) +{ + return x * x * x; +} +float Pow4(float x) +{ + x *= x; + return x * x; +} +float Pow5(float x) +{ + return x * Pow4(x); +} // ---------- Intersection ----------- // a simple ray sphere intersection function, didn't take limited precision @@ -250,3 +267,19 @@ float LerpInverse(float a, float b, float value) return (value - a) / (b - a); } } +//-------- Gaussinan distribution functions --------- +// https://en.wikipedia.org/wiki/Gaussian_function +// Parameter: +// amplitude - the height of the curve's peak +// median - the position of the Mean / Median - the center of the "bell" +// standardDeviation - controls the width of the "bell" +float Gaussian(float x, float amplitude, float median, float standardDeviation) +{ + float exponent = -0.5 * Pow2((x - median) / standardDeviation); + return amplitude * exp(exponent); +} +float GaussianNormalized(float x, float expectedValue, float standardDeviation) +{ + float normalizedAmplitude = 1.0f / (standardDeviation * sqrt(TWO_PI)); + return Gaussian(x, normalizedAmplitude, expectedValue, standardDeviation); +} diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h index 341824a84d..bd11965ffa 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h @@ -44,14 +44,14 @@ namespace AZ AZStd::string GetSourcePathByAssetId(const AZ::Data::AssetId& assetId); //! Tries to resolve a relative file reference, given the path of a referencing file. - //! @param originatingSourceFilePath Path to the parent file that references referencedSourceFilePath. May be absolute or relative to asset-root. + //! @param originatingSourceFilePath Path to the parent file that references referencedSourceFilePath. May be absolute or relative to asset-root. //! @param referencedSourceFilePath Path that the parent file references. May be relative to the parent file location or relative to asset-root. //! @return A full path for referencedSourceFilePath, if a full path was found. If a full path could not be constructed, returns referencedSourceFilePath unmodified. AZStd::string ResolvePathReference(const AZStd::string& originatingSourceFilePath, const AZStd::string& referencedSourceFilePath); - //! Returns the list of paths where a source asset file could possibly appear. + //! Returns the list of paths where a source asset file could possibly appear. //! This is intended for use by AssetBuilders when reporting dependencies, to support relative paths between source files. - //! When a source data file references another file using a relative path, the path might be relative to the originating + //! When a source data file references another file using a relative path, the path might be relative to the originating //! file or it might be a standard source asset path (i.e. relative to the logical asset-root). This function will help reporting //! dependencies on all possible locations where that file may appear at some point in the future. //! For example a file MyGem/Assets/Foo/a.json might reference another file as "Bar/b.json". In this case, calling @@ -94,9 +94,9 @@ namespace AZ template Outcome> LoadAsset(const AZ::Data::AssetId& assetId, [[maybe_unused]] const char* sourcePathForDebug) { - if (nullptr == AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@")) + if (nullptr == AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@")) { - // The absence of "@assets@" is not necessarily the reason LoadAsset() can't be used in CreateJobs(), but it + // The absence of "@products@" is not necessarily the reason LoadAsset() can't be used in CreateJobs(), but it // is a symptom of calling LoadAsset() from CreateJobs() which is not supported. AZ_Assert(false, "It appears AssetUtils::LoadAsset() is being called in CreateJobs(). It can only be used in ProcessJob()."); return AZ::Failure(); diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyConnectionSerializer.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyConnectionSerializer.h new file mode 100644 index 0000000000..44b8805667 --- /dev/null +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyConnectionSerializer.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + class ReflectContext; + + namespace RPI + { + //! The property connection itself is rather simple, but we need this custom serializer to provide backward compatibility + //! for when the "id" key was changed to "name". If the JSON serialization system is ever updated to provide built-in + //! support for versioning, then we can probably remove this class. + class JsonMaterialPropertyConnectionSerializer + : public BaseJsonSerializer + { + public: + AZ_RTTI(JsonMaterialPropertyConnectionSerializer, "{2B7F00CF-51F7-4409-9C0E-914E59696FB9}", BaseJsonSerializer); + AZ_CLASS_ALLOCATOR_DECL; + + JsonSerializationResult::Result Load(void* outputValue, const Uuid& outputValueTypeId, const rapidjson::Value& inputValue, + JsonDeserializerContext& context) override; + + JsonSerializationResult::Result Store(rapidjson::Value& outputValue, const void* inputValue, + const void* defaultValue, const Uuid& valueTypeId, JsonSerializerContext& context) override; + }; + + } // namespace RPI +} // namespace AZ diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyGroupSerializer.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyGroupSerializer.h new file mode 100644 index 0000000000..138dace86a --- /dev/null +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyGroupSerializer.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + class ReflectContext; + + namespace RPI + { + //! The property group itself is rather simple, but we need this custom serializer to provide backward compatibility + //! for when the "id" key was changed to "name". If the JSON serialization system is ever updated to provide built-in + //! support for versioning, then we can probably remove this class. + class JsonMaterialPropertyGroupSerializer + : public BaseJsonSerializer + { + public: + AZ_RTTI(JsonMaterialPropertyGroupSerializer, "{74C56BBC-2084-46AF-9393-04C2FBDF6B20}", BaseJsonSerializer); + AZ_CLASS_ALLOCATOR_DECL; + + JsonSerializationResult::Result Load(void* outputValue, const Uuid& outputValueTypeId, const rapidjson::Value& inputValue, + JsonDeserializerContext& context) override; + + JsonSerializationResult::Result Store(rapidjson::Value& outputValue, const void* inputValue, + const void* defaultValue, const Uuid& valueTypeId, JsonSerializerContext& context) override; + }; + + } // namespace RPI +} // namespace AZ diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialTypeSourceData.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialTypeSourceData.h index 7019289466..04b6222404 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialTypeSourceData.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialTypeSourceData.h @@ -40,12 +40,12 @@ namespace AZ AZ_TYPE_INFO(AZ::RPI::MaterialTypeSourceData::PropertyConnection, "{C2F37C26-D7EF-4142-A650-EF50BB18610F}"); PropertyConnection() = default; - PropertyConnection(MaterialPropertyOutputType type, AZStd::string_view nameId, int32_t shaderIndex = -1); + PropertyConnection(MaterialPropertyOutputType type, AZStd::string_view fieldName, int32_t shaderIndex = -1); MaterialPropertyOutputType m_type = MaterialPropertyOutputType::Invalid; //! The name of a specific shader setting. This will either be a ShaderResourceGroup input or a ShaderOption, depending on m_type - AZStd::string m_nameId; + AZStd::string m_fieldName; //! For m_type==ShaderOption, this is either the index of a specific shader in m_shaderCollection, or -1 which means every shader in m_shaderCollection. //! For m_type==ShaderInput, this field is not used. @@ -58,8 +58,8 @@ namespace AZ { AZ_TYPE_INFO(AZ::RPI::MaterialTypeSourceData::GroupDefinition, "{B2D0FC5C-72A3-435E-A194-1BFDABAC253D}"); - //! The unique name of the property group. A property's full ID will be groupNameId.propertyNameId. - AZStd::string m_nameId; + //! The unique name of the property group. The full property ID will be groupName.propertyName + AZStd::string m_name; // Editor metadata ... AZStd::string m_displayName; @@ -74,7 +74,7 @@ namespace AZ static const float DefaultMax; static const float DefaultStep; - AZStd::string m_nameId; //!< The name of the property within the property group. The full ID will be groupNameId.propertyNameId. + AZStd::string m_name; //!< The name of the property within the property group. The full property ID will be groupName.propertyName. MaterialPropertyVisibility m_visibility = MaterialPropertyVisibility::Default; @@ -130,7 +130,7 @@ namespace AZ AZStd::vector m_groups; //! Collection of all available user-facing properties - AZStd::map m_properties; + AZStd::map m_properties; }; AZStd::string m_description; @@ -151,9 +151,9 @@ namespace AZ //! Copy over UV custom names to the properties enum values. void ResolveUvEnums(); - const GroupDefinition* FindGroup(AZStd::string_view groupNameId) const; + const GroupDefinition* FindGroup(AZStd::string_view groupName) const; - const PropertyDefinition* FindProperty(AZStd::string_view groupNameId, AZStd::string_view propertyNameId) const; + const PropertyDefinition* FindProperty(AZStd::string_view groupName, AZStd::string_view propertyName) const; //! Construct a complete list of group definitions, including implicit groups, arranged in the same order as the source data //! Groups with the same name will be consolidated into a single entry diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialUtils.h index 7801e0c3a7..d12e848a02 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialUtils.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialUtils.h @@ -15,6 +15,13 @@ namespace AZ { + class JsonDeserializerContext; + + namespace JsonSerializationResult + { + union ResultCode; + } + namespace RPI { class MaterialTypeSourceData; @@ -35,6 +42,17 @@ namespace AZ //! @param filePath a relative path if document is provided, an absolute path if document is not provided. //! @param document the loaded json document. AZ::Outcome LoadMaterialTypeSourceData(const AZStd::string& filePath, const rapidjson::Value* document = nullptr); + + //! Utility function for custom JSON serializers to report results as "Skipped" when encountering keys that aren't recognized + //! as part of the custom format. + //! @param acceptedFieldNames an array of names that are recognized by the custom format + //! @param acceptedFieldNameCount the number of elements in @acceptedFieldNames + //! @param object the JSON object being loaded + //! @param context the common JsonDeserializerContext that is central to the serialization process + //! @param result the ResultCode that well be updated with the Outcomes "Skipped" if an unrecognized field is encountered + void CheckForUnrecognizedJsonFields( + const AZStd::string_view* acceptedFieldNames, uint32_t acceptedFieldNameCount, + const rapidjson::Value& object, JsonDeserializerContext& context, JsonSerializationResult::ResultCode& result); } } } diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h index 93e595243e..c35d0750a5 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h @@ -268,6 +268,8 @@ namespace AZ AZStd::vector m_cachedStreamBufferViews; AZStd::vector m_cachedIndexBufferViews; AZStd::vector> m_cachedDrawSrg; + + uint32_t m_nextDrawSrgIdx = 0; // structure includes DrawItem and stream and index buffer index using BufferViewIndexType = uint32_t; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Material/Material.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Material/Material.h index 3976ef989b..d8a0cf0e7d 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Material/Material.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Material/Material.h @@ -70,8 +70,8 @@ namespace AZ virtual ~Material(); - //! Finds the material property index from the material property name - MaterialPropertyIndex FindPropertyIndex(const Name& name) const; + //! Finds the material property index from the material property ID + MaterialPropertyIndex FindPropertyIndex(const Name& propertyId) const; //! Sets the value of a material property. The template data type must match the property's data type. //! @return true if property value was changed diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h index a19c985f2d..91a9a2d009 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h @@ -24,6 +24,8 @@ namespace AZ { namespace RPI { + class ModelAsset; + class Model final : public Data::InstanceData { @@ -35,6 +37,10 @@ namespace AZ static Data::Instance FindOrCreate(const Data::Asset& modelAsset); + //! Orphan the model, its lods, and all their buffers so that they can be replaced in the instance database + //! This is a temporary function, that will be removed once the Model/ModelAsset classes no longer need it + static void TEMPOrphanFromDatabase(const Data::Asset& modelAsset); + ~Model() = default; //! Blocks the CPU until the streaming upload is complete. Returns immediately if no diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h index a2972ff0fd..3e92542429 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h @@ -11,6 +11,7 @@ #include +#include #include #include #include @@ -40,6 +41,23 @@ namespace AZ //! Loads a streaming image asset for the given file path Data::Instance LoadStreamingTexture(AZStd::string_view path); + + //! Looks for a three arguments attribute named @attributeName in the given shader asset. + //! Assigns the value to each non-null output variables. + //! @param shaderAsset + //! @param attributeName + //! @param numThreadsX Can be NULL. If not NULL it takes the value of the 1st argument of the attribute. Becomes 1 on error. + //! @param numThreadsY Can be NULL. If not NULL it takes the value of the 2nd argument of the attribute. Becomes 1 on error. + //! @param numThreadsZ Can be NULL. If not NULL it takes the value of the 3rd argument of the attribute. Becomes 1 on error. + //! @returns An Outcome instance with error message in case of error. + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, const AZ::Name& attributeName, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ); + + //! Same as above, but assumes the name of the attribute to be 'numthreads'. + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ); + + //! Same as above. Provided as a convenience when all arguments of the 'numthreads' attributes should be assigned to RHI::DispatchDirect::m_threadsPerGroup* variables. + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, RHI::DispatchDirect& dispatchDirect); + } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h index cc25aa17c4..90389687de 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h @@ -161,25 +161,19 @@ namespace AZ //! Add this RenderPipeline to RPI system's RenderTick and it will be rendered whenever //! the RPI system's RenderTick is called. - //! The RenderPipeline is rendered per RenderTick by default. + //! The RenderPipeline is rendered per RenderTick by default unless AddToRenderTickOnce() was called. void AddToRenderTick(); - //! Add this RenderPipeline to RPI system's RenderTick and it will be rendered every RenderTick - //! after the specified interval has elapsed since the last rendered frame. - //! @param renderInterval The desired time between rendered frames, in seconds. - void AddToRenderTickAtInterval(AZStd::chrono::duration renderInterval); - //! Disable render for this RenderPipeline void RemoveFromRenderTick(); ~RenderPipeline(); - + enum class RenderMode : uint8_t { - RenderEveryTick, //!< Render at each RPI system render tick. - RenderAtTargetRate, //!< Render on RPI system render tick after a target refresh rate interval has passed. - RenderOnce, //!< Render once in next RPI system render tick. - NoRender //!< Render disabled. + RenderEveryTick, // Render at each RPI system render tick + RenderOnce, // Render once in next RPI system render tick + NoRender // Render disabled. }; //! Get current render mode @@ -191,12 +185,6 @@ namespace AZ //! Get draw filter mask RHI::DrawFilterMask GetDrawFilterMask() const; - using FrameNotificationEvent = AZ::Event<>; - //! Notifies a listener when a frame is about to be prepared for render, before SRGs are bound. - void ConnectPrepareFrameHandler(FrameNotificationEvent::Handler& handler); - //! Notifies a listener when the rendering of a frame has finished - void ConnectEndFrameHandler(FrameNotificationEvent::Handler& handler); - private: RenderPipeline() = default; @@ -214,11 +202,8 @@ namespace AZ void OnAddedToScene(Scene* scene); void OnRemovedFromScene(Scene* scene); - // Called before this pipeline is about to be rendered and before SRGs are bound. - void OnPrepareFrame(); - // Called when this pipeline is about to be rendered - void OnStartFrame(); + void OnStartFrame(const TickTimeInfo& tick); // Called when the rendering of current frame is finished. void OnFrameEnd(); @@ -243,14 +228,8 @@ namespace AZ PipelineViewMap m_pipelineViewsByTag; - // The system time when the last time this pipeline render was started - AZStd::chrono::system_clock::time_point m_lastRenderStartTime; - - // The current system time, as of OnPrepareFrame's execution. - AZStd::chrono::system_clock::time_point m_lastRenderRequestTime; - - // The target time between renders when m_renderMode is RenderMode::RenderAtTargetRate - AZStd::chrono::duration m_targetRefreshRate; + /// The system time when the last time this pipeline render was started + float m_lastRenderStartTime = 0; // RenderPipeline's name id, it will be used to identify the render pipeline when it's added to a Scene RenderPipelineId m_nameId; @@ -280,11 +259,7 @@ namespace AZ RHI::DrawFilterTag m_drawFilterTag; // A mask to filter draw items submitted by passes of this render pipeline. // This mask is created from the value of m_drawFilterTag. - RHI::DrawFilterMask m_drawFilterMask = 0; - - // Events for notification on render state - FrameNotificationEvent m_prepareFrameEvent; - FrameNotificationEvent m_endFrameEvent; + RHI::DrawFilterMask m_drawFilterMask = 0; }; } // namespace RPI diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h index b1c6aac92d..fc81368331 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -194,6 +195,9 @@ namespace AZ // This function is called every time scene's render pipelines change. void RebuildPipelineStatesLookup(); + // Helper function to wait for end of TaskGraph + void WaitTGEvent(AZ::TaskGraphEvent& completionTGEvent, AZStd::atomic_bool* workToWaitOn = nullptr); + // Helper function for wait and clean up a completion job void WaitAndCleanCompletionJob(AZ::JobCompletion*& completionJob); @@ -204,12 +208,26 @@ namespace AZ // This happens in UpdateSrgs() void PrepareSceneSrg(); + // Implementation functions that allow scene to switch between using Jobs or TaskGraphs + void SimulateTaskGraph(); + void SimulateJobs(); + + void CollectDrawPacketsTaskGraph(); + void CollectDrawPacketsJobs(); + + void FinalizeDrawListsTaskGraph(); + void FinalizeDrawListsJobs(); + // List of feature processors that are active for this scene AZStd::vector m_featureProcessors; // List of pipelines of this scene. Each pipeline has an unique pipeline Id. AZStd::vector m_pipelines; + // CPU simulation TaskGraphEvent to wait for completion of all the simulation tasks + AZ::TaskGraphEvent m_simulationFinishedTGEvent; + AZStd::atomic_bool m_simulationFinishedWorkActive = false; + // CPU simulation job completion for track all feature processors' simulation jobs AZ::JobCompletion* m_simulationCompletion = nullptr; @@ -228,6 +246,7 @@ namespace AZ SceneId m_id; bool m_activated = false; + bool m_taskGraphActive = false; // update during tick, to ensure it only changes on frame boundaries RenderPipelinePtr m_defaultPipeline; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/SceneBus.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/SceneBus.h index 748c470edf..ca531d2de6 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/SceneBus.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/SceneBus.h @@ -67,9 +67,6 @@ namespace AZ //! Notifies when the PrepareRender phase is ending virtual void OnEndPrepareRender() {} - - //! Notifies when the render tick for a given frame has finished. - virtual void OnFrameEnd() {} }; using SceneNotificationBus = AZ::EBus; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h index b2cea448c1..99f1f5f598 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h @@ -133,6 +133,9 @@ namespace AZ /// Returns an array of RPI buffers associated with the buffer shader input index. AZStd::array_view> GetBufferArray(RHI::ShaderInputNameIndex& inputIndex) const; AZStd::array_view> GetBufferArray(RHI::ShaderInputBufferIndex inputIndex) const; + + //! Reset image and buffer views so that it won't hold references for any RHI resources + void ResetViews(); ////////////////////////////////////////////////////////////////////////// // Methods for assignment / access of RHI Image types. diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h index feed24a80d..966e6b3016 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h @@ -51,21 +51,9 @@ namespace AZ //! Sets the root scene associated with this viewport. //! This does not provide a default render pipeline, one must be provided to enable rendering. void SetRenderScene(ScenePtr scene); - - //! Gets the maximum frame rate this viewport context's pipeline can render at, 0 for unlimited. - //! The target framerate for the pipeline will be determined by this frame limit and the - //! vsync settings for the current window. - float GetFpsLimit() const; - - //! Sets the maximum frame rate this viewport context's pipeline can render at, 0 for unlimited. - //! The target framerate for the pipeline will be determined by this frame limit and the - //! vsync settings for the current window. - void SetFpsLimit(float fpsLimit); - - //! Gets the target frame rate for this viewport context. - //! This returns the lowest of either the current VSync refresh rate - //! or 0 for an unlimited frame rate (if there's no FPS limit and vsync is off). - float GetTargetFrameRate() const; + //! Runs one simulation and render tick and renders a frame to this viewport's window. + //! @note This is likely to be replaced by a tick management system in the RPI. + void RenderTick(); //! Gets the current name of this ViewportContext. //! This name is used to tie this ViewportContext to its View stack, and ViewportContexts may be @@ -86,28 +74,19 @@ namespace AZ //! \see AzFramework::WindowRequests::GetDpiScaleFactor float GetDpiScalingFactor() const; - //! Gets the current vsync interval, as a divisor of the current refresh rate. - //! A value of 0 indicates that vsync is disabled. - uint32_t GetVsyncInterval() const; - - //! Gets the current display refresh rate, in frames per second. - uint32_t GetRefreshRate() const; - // SceneNotificationBus interface overrides... //! Ensures our default view remains set when our scene's render pipelines are modified. void OnRenderPipelineAdded(RenderPipelinePtr pipeline) override; //! Ensures our default view remains set when our scene's render pipelines are modified. void OnRenderPipelineRemoved(RenderPipeline* pipeline) override; + //! OnBeginPrepareRender is forwarded to our RenderTick notification to allow subscribers to do rendering. + void OnBeginPrepareRender() override; // WindowNotificationBus interface overrides... //! Used to fire a notification when our window resizes. void OnWindowResized(uint32_t width, uint32_t height) override; //! Used to fire a notification when our window DPI changes. void OnDpiScaleFactorChanged(float dpiScaleFactor) override; - //! Used to fire a notification when our vsync interval changes. - void OnVsyncIntervalChanged(uint32_t interval) override; - //! Used to fire a notification when our refresh rate changes. - void OnRefreshRateChanged(uint32_t refreshRate) override; using SizeChangedEvent = AZ::Event; //! Notifies consumers when the viewport size has changed. @@ -119,12 +98,6 @@ namespace AZ //! Alternatively, connect to ViewportContextNotificationsBus and listen to ViewportContextNotifications::OnViewportDpiScalingChanged. void ConnectDpiScalingFactorChangedHandler(ScalarChangedEvent::Handler& handler); - using UintChangedEvent = AZ::Event; - //! Notifies consumers when the vsync interval has changed. - void ConnectVsyncIntervalChangedHandler(UintChangedEvent::Handler& handler); - //! Notifies consumers when the refresh rate has changed. - void ConnectRefreshRateChangedHandler(UintChangedEvent::Handler& handler); - using MatrixChangedEvent = AZ::Event; //! Notifies consumers when the view matrix has changed. void ConnectViewMatrixChangedHandler(MatrixChangedEvent::Handler& handler); @@ -166,24 +139,15 @@ namespace AZ void SetDefaultView(ViewPtr view); // Ensures our render pipeline's default camera matches ours. void UpdatePipelineView(); - // Ensures our render pipeline refresh rate matches our refresh rate. - void UpdatePipelineRefreshRate(); - // Resets the current pipeline reference and ensures pipeline events are disconnected. - void ResetCurrentPipeline(); ScenePtr m_rootScene; WindowContextSharedPtr m_windowContext; ViewPtr m_defaultView; AzFramework::WindowSize m_viewportSize; float m_viewportDpiScaleFactor = 1.0f; - uint32_t m_vsyncInterval = 1; - uint32_t m_refreshRate = 60; - float m_fpsLimit = 0.f; SizeChangedEvent m_sizeChangedEvent; ScalarChangedEvent m_dpiScalingFactorChangedEvent; - UintChangedEvent m_vsyncIntervalChangedEvent; - UintChangedEvent m_refreshRateChangedEvent; MatrixChangedEvent m_viewMatrixChangedEvent; MatrixChangedEvent::Handler m_onViewMatrixChangedHandler; MatrixChangedEvent m_projectionMatrixChangedEvent; @@ -193,9 +157,6 @@ namespace AZ ViewChangedEvent m_defaultViewChangedEvent; ViewportIdEvent m_aboutToBeDestroyedEvent; - AZ::Event<>::Handler m_prepareFrameHandler; - AZ::Event<>::Handler m_endFrameHandler; - ViewportContextManager* m_manager; RenderPipelinePtr m_currentPipeline; Name m_name; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContextBus.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContextBus.h index fa13a3987a..0b53172ba2 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContextBus.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContextBus.h @@ -110,13 +110,11 @@ namespace AZ virtual void OnViewportSizeChanged(AzFramework::WindowSize size){AZ_UNUSED(size);} //! Called when the window DPI scaling changes for a given viewport context. virtual void OnViewportDpiScalingChanged(float dpiScale){AZ_UNUSED(dpiScale);} - //! Called when the active view changes for a given viewport context. + //! Called when the active view for a given viewport context name changes. virtual void OnViewportDefaultViewChanged(AZ::RPI::ViewPtr view){AZ_UNUSED(view);} //! Called when the viewport is to be rendered. - //! Add draws to this function if they only need to be rendered to this viewport. - virtual void OnRenderTick(){} - //! Called when the viewport finishes rendering a frame. - virtual void OnFrameEnd(){} + //! Add draws to this functions if they only need to be rendered to this viewport. + virtual void OnRenderTick(){}; protected: ~ViewportContextNotifications() = default; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h index 4f4b2b340d..e6fe68b21e 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h @@ -60,6 +60,12 @@ namespace AZ const AZStd::string& GetName() const; private: + // AssetData overrides... + bool HandleAutoReload() override + { + return false; + } + // Called by asset creators to assign the asset to a ready state. void SetReady(); diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertiesLayout.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertiesLayout.h index 45c8f0dc30..bc020b8129 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertiesLayout.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertiesLayout.h @@ -35,7 +35,7 @@ namespace AZ AZ_DISABLE_COPY_MOVE(MaterialPropertiesLayout); size_t GetPropertyCount() const; - MaterialPropertyIndex FindPropertyIndex(const Name& propertyName) const; + MaterialPropertyIndex FindPropertyIndex(const Name& propertyId) const; const MaterialPropertyDescriptor* GetPropertyDescriptor(MaterialPropertyIndex index) const; private: diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h index dbcfc69d56..91d89ce719 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h @@ -77,6 +77,12 @@ namespace AZ float& distanceNormalized, AZ::Vector3& normal) const; private: + // AssetData overrides... + bool HandleAutoReload() override + { + return false; + } + void SetReady(); AZ::Name m_name; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h index 8c8edddfe1..4b09cf8d91 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h @@ -149,6 +149,12 @@ namespace AZ const AZ::Aabb& GetAabb() const; private: + // AssetData overrides... + bool HandleAutoReload() override + { + return false; + } + AZStd::vector m_meshes; AZ::Aabb m_aabb = AZ::Aabb::CreateNull(); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Builders/Material/MaterialBuilder.cpp b/Gems/Atom/RPI/Code/Source/RPI.Builders/Material/MaterialBuilder.cpp index ef0678046c..86ea8ab688 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Builders/Material/MaterialBuilder.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Builders/Material/MaterialBuilder.cpp @@ -47,7 +47,7 @@ namespace AZ { AssetBuilderSDK::AssetBuilderDesc materialBuilderDescriptor; materialBuilderDescriptor.m_name = JobKey; - materialBuilderDescriptor.m_version = 108; // Set materialtype dependency to OrderOnce + materialBuilderDescriptor.m_version = 109; // Changed "id" to "name" in serialization materialBuilderDescriptor.m_patterns.push_back(AssetBuilderSDK::AssetBuilderPattern("*.material", AssetBuilderSDK::AssetBuilderPattern::PatternType::Wildcard)); materialBuilderDescriptor.m_patterns.push_back(AssetBuilderSDK::AssetBuilderPattern("*.materialtype", AssetBuilderSDK::AssetBuilderPattern::PatternType::Wildcard)); materialBuilderDescriptor.m_busId = azrtti_typeid(); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp b/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp index 1da16b44b6..9fc99e3ea4 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp @@ -1078,7 +1078,9 @@ namespace AZ template void ModelAssetBuilderComponent::ValidateStreamSize([[maybe_unused]] size_t expectedVertexCount, [[maybe_unused]] const AZStd::vector& bufferData, [[maybe_unused]] AZ::RHI::Format format, [[maybe_unused]] const char* streamName) const { +#if defined(AZ_ENABLE_TRACING) size_t actualVertexCount = (bufferData.size() * sizeof(T)) / RHI::GetFormatSize(format); +#endif AZ_Error(s_builderName, expectedVertexCount == actualVertexCount, "VertexStream '%s' does not match the expected vertex count. This typically means multiple sub-meshes have mis-matched vertex stream layouts (such as one having more uv sets than the other) but are assigned the same material in the dcc tool so they were merged.", streamName); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyConnectionSerializer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyConnectionSerializer.cpp new file mode 100644 index 0000000000..a0be7b9dca --- /dev/null +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyConnectionSerializer.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include + +namespace AZ +{ + namespace RPI + { + namespace JsonMaterialPropertyConnectionSerializerInternal + { + namespace Field + { + static constexpr const char type[] = "type"; + static constexpr const char name[] = "name"; + static constexpr const char id[] = "id"; // For backward compatibility + static constexpr const char shaderIndex[] = "shaderIndex"; + } + + static const AZStd::string_view AcceptedFields[] = + { + Field::type, + Field::name, + Field::id, + Field::shaderIndex + }; + } + + AZ_CLASS_ALLOCATOR_IMPL(JsonMaterialPropertyConnectionSerializer, SystemAllocator, 0); + + JsonSerializationResult::Result JsonMaterialPropertyConnectionSerializer::Load(void* outputValue, const Uuid& outputValueTypeId, + const rapidjson::Value& inputValue, JsonDeserializerContext& context) + { + namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertyConnectionSerializerInternal; + + AZ_Assert(azrtti_typeid() == outputValueTypeId, + "Unable to deserialize material property connection to json because the provided type is %s", + outputValueTypeId.ToString().c_str()); + AZ_UNUSED(outputValueTypeId); + + MaterialTypeSourceData::PropertyConnection* propertyConnection = reinterpret_cast(outputValue); + AZ_Assert(propertyConnection, "Output value for JsonMaterialPropertyConnectionSerializer can't be null."); + + JSR::ResultCode result(JSR::Tasks::ReadField); + + if (!inputValue.IsObject()) + { + return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, "Property connection must be a JSON object."); + } + + MaterialUtils::CheckForUnrecognizedJsonFields(AcceptedFields, AZ_ARRAY_SIZE(AcceptedFields), inputValue, context, result); + + result.Combine(ContinueLoadingFromJsonObjectField(&propertyConnection->m_type, azrtti_typeid(), inputValue, Field::type, context)); + + JsonSerializationResult::ResultCode nameResult = ContinueLoadingFromJsonObjectField(&propertyConnection->m_fieldName, azrtti_typeid(), inputValue, Field::name, context); + if (nameResult.GetOutcome() == JsonSerializationResult::Outcomes::DefaultsUsed) + { + // This "id" key is for backward compatibility. + result.Combine(ContinueLoadingFromJsonObjectField(&propertyConnection->m_fieldName, azrtti_typeid(), inputValue, Field::id, context)); + } + else + { + result.Combine(nameResult); + } + + result.Combine(ContinueLoadingFromJsonObjectField(&propertyConnection->m_shaderIndex, azrtti_typeid(), inputValue, Field::shaderIndex, context)); + + if (result.GetProcessing() == JsonSerializationResult::Processing::Completed) + { + return context.Report(result, "Successfully loaded property connection."); + } + else + { + return context.Report(result, "Partially loaded property connection."); + } + } + + + JsonSerializationResult::Result JsonMaterialPropertyConnectionSerializer::Store(rapidjson::Value& outputValue, const void* inputValue, + [[maybe_unused]] const void* defaultValue, const Uuid& valueTypeId, JsonSerializerContext& context) + { + namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertyConnectionSerializerInternal; + + AZ_Assert(azrtti_typeid() == valueTypeId, + "Unable to serialize material property connection to json because the provided type is %s", + valueTypeId.ToString().c_str()); + AZ_UNUSED(valueTypeId); + + const MaterialTypeSourceData::PropertyConnection* propertyConnection = reinterpret_cast(inputValue); + AZ_Assert(propertyConnection, "Input value for JsonMaterialPropertyConnectionSerializer can't be null."); + + JSR::ResultCode result(JSR::Tasks::WriteValue); + + outputValue.SetObject(); + + MaterialTypeSourceData::PropertyConnection defaultConnection; + + result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::type, &propertyConnection->m_type, &defaultConnection.m_type, azrtti_typeid(), context)); + result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::name, &propertyConnection->m_fieldName, &defaultConnection.m_fieldName, azrtti_typeid(), context)); + result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::shaderIndex, &propertyConnection->m_shaderIndex, &defaultConnection.m_shaderIndex, azrtti_typeid(), context)); + + if (result.GetProcessing() == JsonSerializationResult::Processing::Completed) + { + return context.Report(result, "Successfully stored property connection."); + } + else + { + return context.Report(result, "Partially stored property connection."); + } + } + + } // namespace RPI +} // namespace AZ diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyGroupSerializer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyGroupSerializer.cpp new file mode 100644 index 0000000000..b54ba012d4 --- /dev/null +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyGroupSerializer.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include + +namespace AZ +{ + namespace RPI + { + namespace JsonMaterialPropertyGroupSerializerInternal + { + namespace Field + { + static constexpr const char name[] = "name"; + static constexpr const char id[] = "id"; // For backward compatibility + static constexpr const char displayName[] = "displayName"; + static constexpr const char description[] = "description"; + } + + static const AZStd::string_view AcceptedFields[] = + { + Field::name, + Field::id, + Field::displayName, + Field::description + }; + } + + AZ_CLASS_ALLOCATOR_IMPL(JsonMaterialPropertyGroupSerializer, SystemAllocator, 0); + + JsonSerializationResult::Result JsonMaterialPropertyGroupSerializer::Load(void* outputValue, const Uuid& outputValueTypeId, + const rapidjson::Value& inputValue, JsonDeserializerContext& context) + { + namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertyGroupSerializerInternal; + + AZ_Assert(azrtti_typeid() == outputValueTypeId, + "Unable to deserialize material property group to json because the provided type is %s", + outputValueTypeId.ToString().c_str()); + AZ_UNUSED(outputValueTypeId); + + MaterialTypeSourceData::GroupDefinition* propertyGroup = reinterpret_cast(outputValue); + AZ_Assert(propertyGroup, "Output value for JsonMaterialPropertyGroupSerializer can't be null."); + + JSR::ResultCode result(JSR::Tasks::ReadField); + + if (!inputValue.IsObject()) + { + return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, "Property group must be a JSON object."); + } + + MaterialUtils::CheckForUnrecognizedJsonFields(AcceptedFields, AZ_ARRAY_SIZE(AcceptedFields), inputValue, context, result); + + JsonSerializationResult::ResultCode nameResult = ContinueLoadingFromJsonObjectField(&propertyGroup->m_name, azrtti_typeid(), inputValue, Field::name, context); + if (nameResult.GetOutcome() == JsonSerializationResult::Outcomes::DefaultsUsed) + { + // This "id" key is for backward compatibility. + result.Combine(ContinueLoadingFromJsonObjectField(&propertyGroup->m_name, azrtti_typeid(), inputValue, Field::id, context)); + } + else + { + result.Combine(nameResult); + } + + result.Combine(ContinueLoadingFromJsonObjectField(&propertyGroup->m_displayName, azrtti_typeid(), inputValue, Field::displayName, context)); + result.Combine(ContinueLoadingFromJsonObjectField(&propertyGroup->m_description, azrtti_typeid(), inputValue, Field::description, context)); + + if (result.GetProcessing() == JsonSerializationResult::Processing::Completed) + { + return context.Report(result, "Successfully loaded property group."); + } + else + { + return context.Report(result, "Partially loaded property group."); + } + } + + + JsonSerializationResult::Result JsonMaterialPropertyGroupSerializer::Store(rapidjson::Value& outputValue, const void* inputValue, + [[maybe_unused]] const void* defaultValue, const Uuid& valueTypeId, JsonSerializerContext& context) + { + namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertyGroupSerializerInternal; + + AZ_Assert(azrtti_typeid() == valueTypeId, + "Unable to serialize material property group to json because the provided type is %s", + valueTypeId.ToString().c_str()); + AZ_UNUSED(valueTypeId); + + const MaterialTypeSourceData::GroupDefinition* propertyGroup = reinterpret_cast(inputValue); + AZ_Assert(propertyGroup, "Input value for JsonMaterialPropertyGroupSerializer can't be null."); + + JSR::ResultCode result(JSR::Tasks::WriteValue); + + outputValue.SetObject(); + + AZStd::string defaultEmpty; + + result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::name, &propertyGroup->m_name, &defaultEmpty, azrtti_typeid(), context)); + result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::displayName, &propertyGroup->m_displayName, &defaultEmpty, azrtti_typeid(), context)); + result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::description, &propertyGroup->m_description, &defaultEmpty, azrtti_typeid(), context)); + + if (result.GetProcessing() == JsonSerializationResult::Processing::Completed) + { + return context.Report(result, "Successfully stored property group."); + } + else + { + return context.Report(result, "Partially stored property group."); + } + } + + } // namespace RPI +} // namespace AZ diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertySerializer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertySerializer.cpp index f3d499ac78..4c66f753f2 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertySerializer.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertySerializer.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -23,11 +24,12 @@ namespace AZ { namespace RPI { - namespace // Avoid conflicts in uber builds + namespace JsonMaterialPropertySerializerInternal { namespace Field { - static constexpr const char id[] = "id"; + static constexpr const char name[] = "name"; + static constexpr const char id[] = "id"; // For backward compatibility static constexpr const char displayName[] = "displayName"; static constexpr const char description[] = "description"; static constexpr const char type[] = "type"; @@ -46,6 +48,7 @@ namespace AZ static const AZStd::string_view AcceptedFields[] = { + Field::name, Field::id, Field::displayName, Field::description, @@ -103,6 +106,7 @@ namespace AZ JsonDeserializerContext& context) { namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; JSR::ResultCode result(JSR::Tasks::ReadField); @@ -160,6 +164,7 @@ namespace AZ JsonDeserializerContext& context) { namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; JSR::ResultCode result(JSR::Tasks::ReadField); @@ -181,6 +186,7 @@ namespace AZ const rapidjson::Value& inputValue, JsonDeserializerContext& context) { namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; AZ_Assert(azrtti_typeid() == outputValueTypeId, "Unable to deserialize material property to json because the provided type is %s", @@ -197,28 +203,19 @@ namespace AZ return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, "Property definition must be a JSON object."); } - // First check for unexpected fields - for (auto iter = inputValue.MemberBegin(); iter != inputValue.MemberEnd(); ++iter) - { - bool matched = false; - - for (int i = 0; i < AZ_ARRAY_SIZE(AcceptedFields); ++i) - { - if (iter->name.GetString() == AcceptedFields[i]) - { - matched = true; - break; - } - } + MaterialUtils::CheckForUnrecognizedJsonFields(AcceptedFields, AZ_ARRAY_SIZE(AcceptedFields), inputValue, context, result); - if (!matched) - { - ScopedContextPath subPath{context, iter->name.GetString()}; - result.Combine(context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Skipped, "Skipping unrecognized field")); - } + JsonSerializationResult::ResultCode nameResult = ContinueLoadingFromJsonObjectField(&property->m_name, azrtti_typeid(), inputValue, Field::name, context); + if (nameResult.GetOutcome() == JsonSerializationResult::Outcomes::DefaultsUsed) + { + // This "id" key is for backward compatibility. + result.Combine(ContinueLoadingFromJsonObjectField(&property->m_name, azrtti_typeid(), inputValue, Field::id, context)); + } + else + { + result.Combine(nameResult); } - result.Combine(ContinueLoadingFromJsonObjectField(&property->m_nameId, azrtti_typeid(), inputValue, Field::id, context)); result.Combine(ContinueLoadingFromJsonObjectField(&property->m_displayName, azrtti_typeid(), inputValue, Field::displayName, context)); result.Combine(ContinueLoadingFromJsonObjectField(&property->m_description, azrtti_typeid(), inputValue, Field::description, context)); result.Combine(ContinueLoadingFromJsonObjectField(&property->m_dataType, azrtti_typeid(), inputValue, Field::type, context)); @@ -302,6 +299,8 @@ namespace AZ JsonSerializerContext& context) { namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; + JSR::ResultCode result(JSR::Tasks::WriteValue); if (property->m_value.Is()) @@ -345,6 +344,8 @@ namespace AZ JsonSerializerContext& context) { namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; + JsonSerializationResult::ResultCode result(JSR::Tasks::WriteValue); if (property->m_value.Is()) @@ -360,6 +361,7 @@ namespace AZ [[maybe_unused]] const void* defaultValue, const Uuid& valueTypeId, JsonSerializerContext& context) { namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; AZ_Assert(azrtti_typeid() == valueTypeId, "Unable to serialize material property to json because the provided type is %s", @@ -374,7 +376,7 @@ namespace AZ outputValue.SetObject(); const AZStd::string emptyString; - result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::id, &property->m_nameId, &emptyString, azrtti_typeid(), context)); + result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::name, &property->m_name, &emptyString, azrtti_typeid(), context)); result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::displayName, &property->m_displayName, &emptyString, azrtti_typeid(), context)); result.Combine(ContinueStoringToJsonObjectField(outputValue, Field::description, &property->m_description, &emptyString, azrtti_typeid(), context)); @@ -452,6 +454,8 @@ namespace AZ const rapidjson::Value& inputValue, JsonDeserializerContext& context) { namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; + JSR::ResultCode result(JSR::Tasks::ReadField); if (inputValue.HasMember(Field::vectorLabels)) @@ -467,6 +471,8 @@ namespace AZ { AZStd::string emptyString; namespace JSR = JsonSerializationResult; + using namespace JsonMaterialPropertySerializerInternal; + JsonSerializationResult::ResultCode result(JSR::Tasks::WriteValue); if (!property->m_vectorLabels.empty()) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyValueSerializer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyValueSerializer.cpp index 060a563c53..3b2d36451a 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyValueSerializer.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyValueSerializer.cpp @@ -62,18 +62,18 @@ namespace AZ return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Catastrophic, "Material type reference not found."); } - // Construct the full property name (groupId.propertyId) by parsing it from the JSON path string. - size_t startPropertyNameId = context.GetPath().Get().rfind('/'); - size_t startGroupNameId = context.GetPath().Get().rfind('/', startPropertyNameId-1); - AZStd::string_view groupNameId = context.GetPath().Get().substr(startGroupNameId + 1, startPropertyNameId - startGroupNameId - 1); - AZStd::string_view propertyNameId = context.GetPath().Get().substr(startPropertyNameId + 1); + // Construct the full property name (groupName.propertyName) by parsing it from the JSON path string. + size_t startPropertyName = context.GetPath().Get().rfind('/'); + size_t startGroupName = context.GetPath().Get().rfind('/', startPropertyName-1); + AZStd::string_view groupName = context.GetPath().Get().substr(startGroupName + 1, startPropertyName - startGroupName - 1); + AZStd::string_view propertyName = context.GetPath().Get().substr(startPropertyName + 1); JSR::ResultCode result(JSR::Tasks::ReadField); - auto propertyDefinition = materialType->FindProperty(groupNameId, propertyNameId); + auto propertyDefinition = materialType->FindProperty(groupName, propertyName); if (!propertyDefinition) { - AZStd::string message = AZStd::string::format("Property '%.*s.%.*s' not found in material type.", AZ_STRING_ARG(groupNameId), AZ_STRING_ARG(propertyNameId)); + AZStd::string message = AZStd::string::format("Property '%.*s.%.*s' not found in material type.", AZ_STRING_ARG(groupName), AZ_STRING_ARG(propertyName)); return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, message); } else diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialTypeSourceData.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialTypeSourceData.cpp index 5a95cb35a6..1cc57f4d47 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialTypeSourceData.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialTypeSourceData.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include @@ -46,29 +48,17 @@ namespace AZ if (JsonRegistrationContext* jsonContext = azrtti_cast(context)) { jsonContext->Serializer()->HandlesType(); + jsonContext->Serializer()->HandlesType(); + jsonContext->Serializer()->HandlesType(); } else if (auto* serializeContext = azrtti_cast(context)) { - serializeContext->Class() - ->Version(1) - ->Field("type", &PropertyConnection::m_type) - ->Field("id", &PropertyConnection::m_nameId) - ->Field("shaderIndex", &PropertyConnection::m_shaderIndex) - ; + serializeContext->Class()->Version(3); + serializeContext->Class()->Version(4); + serializeContext->Class()->Version(1); serializeContext->RegisterGenericType(); - serializeContext->Class() - ->Version(1) - ->Field("id", &GroupDefinition::m_nameId) - ->Field("displayName", &GroupDefinition::m_displayName) - ->Field("description", &GroupDefinition::m_description) - ; - - serializeContext->Class() - ->Version(1) - ; - serializeContext->Class() ->Version(2) ->Field("file", &ShaderVariantReferenceData::m_shaderFilePath) @@ -96,9 +86,9 @@ namespace AZ } } - MaterialTypeSourceData::PropertyConnection::PropertyConnection(MaterialPropertyOutputType type, AZStd::string_view nameId, int32_t shaderIndex) + MaterialTypeSourceData::PropertyConnection::PropertyConnection(MaterialPropertyOutputType type, AZStd::string_view fieldName, int32_t shaderIndex) : m_type(type) - , m_nameId(nameId) + , m_fieldName(fieldName) , m_shaderIndex(shaderIndex) { } @@ -107,11 +97,11 @@ namespace AZ const float MaterialTypeSourceData::PropertyDefinition::DefaultMax = std::numeric_limits::max(); const float MaterialTypeSourceData::PropertyDefinition::DefaultStep = 0.1f; - const MaterialTypeSourceData::GroupDefinition* MaterialTypeSourceData::FindGroup(AZStd::string_view groupNameId) const + const MaterialTypeSourceData::GroupDefinition* MaterialTypeSourceData::FindGroup(AZStd::string_view groupName) const { for (const GroupDefinition& group : m_propertyLayout.m_groups) { - if (group.m_nameId == groupNameId) + if (group.m_name == groupName) { return &group; } @@ -120,9 +110,9 @@ namespace AZ return nullptr; } - const MaterialTypeSourceData::PropertyDefinition* MaterialTypeSourceData::FindProperty(AZStd::string_view groupNameId, AZStd::string_view propertyNameId) const + const MaterialTypeSourceData::PropertyDefinition* MaterialTypeSourceData::FindProperty(AZStd::string_view groupName, AZStd::string_view propertyName) const { - auto groupIter = m_propertyLayout.m_properties.find(groupNameId); + auto groupIter = m_propertyLayout.m_properties.find(groupName); if (groupIter == m_propertyLayout.m_properties.end()) { return nullptr; @@ -130,7 +120,7 @@ namespace AZ for (const PropertyDefinition& property : groupIter->second) { - if (property.m_nameId == propertyNameId) + if (property.m_name == propertyName) { return &property; } @@ -169,24 +159,24 @@ namespace AZ AZStd::unordered_set foundGroups; for (const auto& groupDefinition : m_propertyLayout.m_groups) { - if (foundGroups.insert(groupDefinition.m_nameId).second) + if (foundGroups.insert(groupDefinition.m_name).second) { groupDefinitions.push_back(groupDefinition); } else { - AZ_Warning("Material source data", false, "Duplicate group '%s' found.", groupDefinition.m_nameId.c_str()); + AZ_Warning("Material source data", false, "Duplicate group '%s' found.", groupDefinition.m_name.c_str()); } } // Some groups are defined implicitly, in the "properties" section where a group name is used but not explicitly defined in the "groups" section. for (const auto& propertyListPair : m_propertyLayout.m_properties) { - const AZStd::string& groupNameId = propertyListPair.first; - if (foundGroups.insert(groupNameId).second) + const AZStd::string& groupName = propertyListPair.first; + if (foundGroups.insert(groupName).second) { MaterialTypeSourceData::GroupDefinition groupDefinition; - groupDefinition.m_nameId = groupNameId; + groupDefinition.m_name = groupName; groupDefinitions.push_back(groupDefinition); } } @@ -203,12 +193,12 @@ namespace AZ for (const auto& propertyListPair : m_propertyLayout.m_properties) { - const AZStd::string& groupNameId = propertyListPair.first; + const AZStd::string& groupName = propertyListPair.first; const auto& propertyList = propertyListPair.second; for (const auto& propertyDefinition : propertyList) { - const AZStd::string& propertyNameId = propertyDefinition.m_nameId; - if (!callback(groupNameId, propertyNameId, propertyDefinition)) + const AZStd::string& propertyName = propertyDefinition.m_name; + if (!callback(groupName, propertyName, propertyDefinition)) { return; } @@ -225,15 +215,15 @@ namespace AZ for (const auto& groupDefinition : GetGroupDefinitionsInDisplayOrder()) { - const AZStd::string& groupNameId = groupDefinition.m_nameId; - const auto propertyListItr = m_propertyLayout.m_properties.find(groupNameId); + const AZStd::string& groupName = groupDefinition.m_name; + const auto propertyListItr = m_propertyLayout.m_properties.find(groupName); if (propertyListItr != m_propertyLayout.m_properties.end()) { const auto& propertyList = propertyListItr->second; for (const auto& propertyDefinition : propertyList) { - const AZStd::string& propertyNameId = propertyDefinition.m_nameId; - if (!callback(groupNameId, propertyNameId, propertyDefinition)) + const AZStd::string& propertyName = propertyDefinition.m_name; + if (!callback(groupName, propertyName, propertyDefinition)) { return; } @@ -249,7 +239,7 @@ namespace AZ const uint32_t index = propertyValue.GetValue(); if (index >= propertyDefinition.m_enumValues.size()) { - AZ_Error("Material source data", false, "Invalid value for material enum property: '%s'.", propertyDefinition.m_nameId.c_str()); + AZ_Error("Material source data", false, "Invalid value for material enum property: '%s'.", propertyDefinition.m_name.c_str()); return false; } @@ -272,7 +262,7 @@ namespace AZ imageAsset.GetId(), imageAsset.GetType(), platformName, imageAssetInfo, rootFilePath); if (!result) { - AZ_Error("Material source data", false, "Image asset could not be found for property: '%s'.", propertyDefinition.m_nameId.c_str()); + AZ_Error("Material source data", false, "Image asset could not be found for property: '%s'.", propertyDefinition.m_name.c_str()); return false; } } @@ -340,13 +330,13 @@ namespace AZ for (auto& groupIter : m_propertyLayout.m_properties) { - const AZStd::string& groupNameId = groupIter.first; + const AZStd::string& groupName = groupIter.first; for (const PropertyDefinition& property : groupIter.second) { // Register the property... - MaterialPropertyId propertyId{ groupNameId, property.m_nameId }; + MaterialPropertyId propertyId{ groupName, property.m_name }; if (!propertyId.IsValid()) { @@ -366,16 +356,16 @@ namespace AZ switch (output.m_type) { case MaterialPropertyOutputType::ShaderInput: - materialTypeAssetCreator.ConnectMaterialPropertyToShaderInput(Name{ output.m_nameId.data() }); + materialTypeAssetCreator.ConnectMaterialPropertyToShaderInput(Name{ output.m_fieldName.data() }); break; case MaterialPropertyOutputType::ShaderOption: if (output.m_shaderIndex >= 0) { - materialTypeAssetCreator.ConnectMaterialPropertyToShaderOption(Name{ output.m_nameId.data() }, output.m_shaderIndex); + materialTypeAssetCreator.ConnectMaterialPropertyToShaderOption(Name{ output.m_fieldName.data() }, output.m_shaderIndex); } else { - materialTypeAssetCreator.ConnectMaterialPropertyToShaderOptions(Name{ output.m_nameId.data() }); + materialTypeAssetCreator.ConnectMaterialPropertyToShaderOptions(Name{ output.m_fieldName.data() }); } break; case MaterialPropertyOutputType::Invalid: diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialUtils.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialUtils.cpp index 62f4f02e3c..90ce9e66ce 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialUtils.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialUtils.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include @@ -99,6 +101,29 @@ namespace AZ return AZ::Success(AZStd::move(materialType)); } } + + void CheckForUnrecognizedJsonFields(const AZStd::string_view* acceptedFieldNames, uint32_t acceptedFieldNameCount, const rapidjson::Value& object, JsonDeserializerContext& context, JsonSerializationResult::ResultCode &result) + { + for (auto iter = object.MemberBegin(); iter != object.MemberEnd(); ++iter) + { + bool matched = false; + + for (uint32_t i = 0; i < acceptedFieldNameCount; ++i) + { + if (iter->name.GetString() == acceptedFieldNames[i]) + { + matched = true; + break; + } + } + + if (!matched) + { + ScopedContextPath subPath{context, iter->name.GetString()}; + result.Combine(context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Skipped, "Skipping unrecognized field")); + } + } + } } } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Shader/ShaderVariantListSourceData.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Shader/ShaderVariantListSourceData.cpp index b6a2132b89..6cd38f65bc 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Edit/Shader/ShaderVariantListSourceData.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Shader/ShaderVariantListSourceData.cpp @@ -8,9 +8,10 @@ #include #include - +#include #include + namespace AZ { namespace RPI diff --git a/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp b/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp index 789d43712e..2567d221e5 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp @@ -14,9 +14,6 @@ #include #include -#include -#include -#include #include #include @@ -96,29 +93,20 @@ namespace AZ } m_rpiSystem.Initialize(m_rpiDescriptor); - AZ::TickBus::Handler::BusConnect(); + AZ::SystemTickBus::Handler::BusConnect(); } void RPISystemComponent::Deactivate() { - AZ::TickBus::Handler::BusDisconnect(); + AZ::SystemTickBus::Handler::BusDisconnect(); m_rpiSystem.Shutdown(); } - void RPISystemComponent::OnTick([[maybe_unused]]float deltaTime, [[maybe_unused]]ScriptTimePoint time) + void RPISystemComponent::OnSystemTick() { - if (deltaTime == 0.f) - { - return; - } - m_rpiSystem.SimulationTick(); m_rpiSystem.RenderTick(); } - int RPISystemComponent::GetTickOrder() - { - return AZ::ComponentTickBus::TICK_RENDER; - } } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.h b/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.h index 7933e1581c..e0a128c3f1 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.h +++ b/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.h @@ -32,7 +32,7 @@ namespace AZ */ class RPISystemComponent final : public AZ::Component - , private AZ::TickBus::Handler + , public AZ::SystemTickBus::Handler { public: AZ_COMPONENT(RPISystemComponent, "{83E301F3-7A0C-4099-B530-9342B91B1BC0}"); @@ -50,9 +50,8 @@ namespace AZ private: RPISystemComponent(const RPISystemComponent&) = delete; - // TickBus overrides... - void OnTick(float deltaTime, ScriptTimePoint time) override; - int GetTickOrder() override; + // SystemTickBus overrides... + void OnSystemTick() override; RPISystem m_rpiSystem; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp index 4da85823b3..3b3473a2da 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp @@ -518,7 +518,6 @@ namespace AZ if (drawSrg) { drawItem.m_uniqueShaderResourceGroup = drawSrg->GetRHIShaderResourceGroup(); - m_cachedDrawSrg.push_back(drawSrg); } // Set scissor per draw if scissor is enabled. @@ -608,7 +607,6 @@ namespace AZ if (drawSrg) { drawItem.m_uniqueShaderResourceGroup = drawSrg->GetRHIShaderResourceGroup(); - m_cachedDrawSrg.push_back(drawSrg); } // Set scissor per draw if scissor is enabled. @@ -635,7 +633,22 @@ namespace AZ { return nullptr; } - auto drawSrg = AZ::RPI::ShaderResourceGroup::Create(m_shader->GetAsset(), m_shader->GetSupervariantIndex(), m_drawSrgLayout->GetName()); + + Data::Instance drawSrg; + if (m_nextDrawSrgIdx == m_cachedDrawSrg.size()) + { + drawSrg = AZ::RPI::ShaderResourceGroup::Create(m_shader->GetAsset(), m_shader->GetSupervariantIndex(), m_drawSrgLayout->GetName()); + m_cachedDrawSrg.push_back(drawSrg); + } + else if (m_nextDrawSrgIdx < m_cachedDrawSrg.size()) + { + drawSrg = m_cachedDrawSrg[m_nextDrawSrgIdx]; + } + else + { + AZ_Assert(false, "Unexpected next draw srg index"); + } + m_nextDrawSrgIdx++; // Set fallback value for shader variant if draw srg contains constant for shader variant fallback if (m_hasShaderVariantKeyFallbackEntry) @@ -727,7 +740,7 @@ namespace AZ } for (auto& drawItemProperties : m_cachedDrawList) - { + { view->AddDrawItem(m_drawListTag, drawItemProperties); } } @@ -743,9 +756,14 @@ namespace AZ m_cachedDrawItems.clear(); m_cachedStreamBufferViews.clear(); m_cachedIndexBufferViews.clear(); - m_cachedDrawSrg.clear(); m_cachedDrawList.clear(); + m_nextDrawSrgIdx = 0; m_drawFinalized = false; + + for (auto srg:m_cachedDrawSrg) + { + srg->ResetViews(); + } } const RHI::PipelineState* DynamicDrawContext::GetCurrentPipelineState() diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp index d44ed40c7b..c87646e17d 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp @@ -386,9 +386,9 @@ namespace AZ return m_currentChangeId; } - MaterialPropertyIndex Material::FindPropertyIndex(const Name& name) const + MaterialPropertyIndex Material::FindPropertyIndex(const Name& propertyId) const { - return m_layout->FindPropertyIndex(name); + return m_layout->FindPropertyIndex(propertyId); } template diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp index 50da470ec4..6549255d7e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp @@ -7,6 +7,7 @@ */ #include +#include #include @@ -30,6 +31,28 @@ namespace AZ modelAsset); } + + void Model::TEMPOrphanFromDatabase(const Data::Asset& modelAsset) + { + for (auto& modelLodAsset : modelAsset->GetLodAssets()) + { + for(auto& mesh : modelLodAsset->GetMeshes()) + { + for (auto& streamBufferInfo : mesh.GetStreamBufferInfoList()) + { + Data::InstanceDatabase::Instance().TEMPOrphan( + Data::InstanceId::CreateFromAssetId(streamBufferInfo.m_bufferAssetView.GetBufferAsset().GetId())); + } + Data::InstanceDatabase::Instance().TEMPOrphan( + Data::InstanceId::CreateFromAssetId(mesh.GetIndexBufferAssetView().GetBufferAsset().GetId())); + } + Data::InstanceDatabase::Instance().TEMPOrphan(Data::InstanceId::CreateFromAssetId(modelLodAsset.GetId())); + } + + Data::InstanceDatabase::Instance().TEMPOrphan( + Data::InstanceId::CreateFromAssetId(modelAsset.GetId())); + } + size_t Model::GetLodCount() const { return m_lods.size(); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLodUtils.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLodUtils.cpp index a1651defbc..3cbb20b9e9 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLodUtils.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLodUtils.cpp @@ -10,7 +10,9 @@ #include #include +#include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelSystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelSystem.cpp index 1ed81f8e16..775d02f7ab 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelSystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelSystem.cpp @@ -11,6 +11,8 @@ #include #include +#include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp index 2505409c62..8bcf9b1b85 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp @@ -107,30 +107,13 @@ namespace AZ dispatchArgs.m_totalNumberOfThreadsY = passData->m_totalNumberOfThreadsY; dispatchArgs.m_totalNumberOfThreadsZ = passData->m_totalNumberOfThreadsZ; - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[ComputePass '%s']: Shader '%s' contains invalid numthreads arguments.", - GetPathName().GetCStr(), - passData->m_shaderReference.m_filePath.data()); - return; - } - - dispatchArgs.m_threadsPerGroupX = aznumeric_cast(AZStd::any_cast(args[0])); - dispatchArgs.m_threadsPerGroupY = aznumeric_cast(AZStd::any_cast(args[1])); - dispatchArgs.m_threadsPerGroupZ = aznumeric_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[ComputePass '%s']: Shader '%.*s' contains invalid numthreads arguments:\n%s", + GetPathName().GetCStr(), passData->m_shaderReference.m_filePath.size(), passData->m_shaderReference.m_filePath.data(), outcome.GetError().c_str()); } + m_dispatchItem.m_arguments = dispatchArgs; m_isFullscreenPass = passData->m_makeFullscreenPass; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp index c5e871697b..a8d94e9a91 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp @@ -93,11 +93,8 @@ namespace AZ void Pass::SetEnabled(bool enabled) { - if (m_flags.m_enabled != enabled) - { - m_flags.m_enabled = enabled; - OnHierarchyChange(); - } + m_flags.m_enabled = enabled; + OnHierarchyChange(); } bool Pass::IsEnabled() const diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp index 8eedf3aa1f..c43edafd6b 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp @@ -410,7 +410,7 @@ namespace AZ { RHI::Format format = slot.m_bufferViewDesc->m_elementFormat; AZStd::string formatLocation = AZStd::string::format("BufferViewDescriptor on Slot [%s] in PassTemplate [%s]", slot.m_name.GetCStr(), passTemplate->m_name.GetCStr()); - RHI::FormatCapabilities capabilities = RHI::GetCapabilities(slot.m_scopeAttachmentUsage, slot.GetAttachmentAccess(), RHI::AttachmentType::Image); + RHI::FormatCapabilities capabilities = RHI::GetCapabilities(slot.m_scopeAttachmentUsage, slot.GetAttachmentAccess(), RHI::AttachmentType::Buffer); slot.m_bufferViewDesc->m_elementFormat = RHI::ValidateFormat(format, formatLocation.c_str(), slot.m_formatFallbacks, capabilities); } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp index 9173b47fad..e70885daa1 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp @@ -143,5 +143,79 @@ namespace AZ return RPI::StreamingImage::FindOrCreate(streamingImageAsset); } + + //! A helper function for GetComputeShaderNumThreads(), to consolidate error messages, etc. + static bool GetAttributeArgumentByIndex(const Data::Asset& shaderAsset, const AZ::Name& attributeName, const RHI::ShaderStageAttributeArguments& args, const size_t argIndex, uint16_t* value, AZStd::string& errorMsg) + { + if (value) + { + const auto numArguments = args.size(); + if (numArguments > argIndex) + { + if (args[argIndex].type() == azrtti_typeid()) + { + *value = aznumeric_caster(AZStd::any_cast(args[argIndex])); + } + else + { + errorMsg = AZStd::string::format("Was expecting argument '%zu' in attribute '%s' to be of type 'int' from shader asset '%s'", argIndex, attributeName.GetCStr(), shaderAsset.GetHint().c_str()); + return false; + } + } + else + { + errorMsg = AZStd::string::format("Was expecting at least '%zu' arguments in attribute '%s' from shader asset '%s'", argIndex + 1, attributeName.GetCStr(), shaderAsset.GetHint().c_str()); + return false; + } + } + return true; + } + + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, const AZ::Name& attributeName, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ) + { + // Set default 1, 1, 1 now. In case of errors later this is what the caller will get. + if (numThreadsX) + { + *numThreadsX = 1; + } + if (numThreadsY) + { + *numThreadsY = 1; + } + if (numThreadsZ) + { + *numThreadsZ = 1; + } + const auto numThreads = shaderAsset->GetAttribute(RHI::ShaderStage::Compute, attributeName); + if (!numThreads) + { + return AZ::Failure(AZStd::string::format("Couldn't find attribute '%s' in shader asset '%s'", attributeName.GetCStr(), shaderAsset.GetHint().c_str())); + } + const RHI::ShaderStageAttributeArguments& args = *numThreads; + AZStd::string errorMsg; + if (!GetAttributeArgumentByIndex(shaderAsset, attributeName, args, 0, numThreadsX, errorMsg)) + { + return AZ::Failure(errorMsg); + } + if (!GetAttributeArgumentByIndex(shaderAsset, attributeName, args, 1, numThreadsY, errorMsg)) + { + return AZ::Failure(errorMsg); + } + if (!GetAttributeArgumentByIndex(shaderAsset, attributeName, args, 2, numThreadsZ, errorMsg)) + { + return AZ::Failure(errorMsg); + } + return AZ::Success(); + } + + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ) + { + return GetComputeShaderNumThreads(shaderAsset, Name{ "numthreads" }, numThreadsX, numThreadsY, numThreadsZ); + } + + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, RHI::DispatchDirect& dispatchDirect) + { + return GetComputeShaderNumThreads(shaderAsset, &dispatchDirect.m_threadsPerGroupX, &dispatchDirect.m_threadsPerGroupY, &dispatchDirect.m_threadsPerGroupZ); + } } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp index 409a084e4f..1b99abae4e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp @@ -301,26 +301,6 @@ namespace AZ m_drawFilterMask = 0; } - void RenderPipeline::OnPrepareFrame() - { - m_lastRenderRequestTime = AZStd::chrono::system_clock::now(); - - // If we're attempting to render at a target interval, check to see if we're within - // 1ms of that interval, enabling rendering only if we are. - if (m_renderMode == RenderMode::RenderAtTargetRate) - { - constexpr AZStd::chrono::duration updateThresholdMs(0.001f); - const bool shouldRender = - m_lastRenderRequestTime - m_lastRenderStartTime + updateThresholdMs >= m_targetRefreshRate; - m_rootPass->SetEnabled(shouldRender); - } - - if (NeedsRender()) - { - m_prepareFrameEvent.Signal(); - } - } - void RenderPipeline::OnPassModified() { if (m_needsPassRecreate) @@ -395,11 +375,11 @@ namespace AZ m_scene->RemoveRenderPipeline(m_nameId); } - void RenderPipeline::OnStartFrame() + void RenderPipeline::OnStartFrame(const TickTimeInfo& tick) { AZ_PROFILE_SCOPE(RPI, "RenderPipeline: OnStartFrame"); - m_lastRenderStartTime = m_lastRenderRequestTime; + m_lastRenderStartTime = tick.m_currentGameTime; OnPassModified(); @@ -427,7 +407,6 @@ namespace AZ { RemoveFromRenderTick(); } - m_endFrameEvent.Signal(); } void RenderPipeline::CollectPersistentViews(AZStd::map& outViewMasks) const @@ -510,13 +489,6 @@ namespace AZ m_renderMode = RenderMode::RenderEveryTick; } - void RenderPipeline::AddToRenderTickAtInterval(AZStd::chrono::duration renderInterval) - { - m_rootPass->SetEnabled(false); - m_renderMode = RenderMode::RenderAtTargetRate; - m_targetRefreshRate = renderInterval; - } - void RenderPipeline::RemoveFromRenderTick() { m_renderMode = RenderMode::NoRender; @@ -530,7 +502,7 @@ namespace AZ bool RenderPipeline::NeedsRender() const { - return m_rootPass->IsEnabled(); + return m_renderMode != RenderMode::NoRender; } RHI::DrawFilterTag RenderPipeline::GetDrawFilterTag() const @@ -543,16 +515,6 @@ namespace AZ return m_drawFilterMask; } - void RenderPipeline::ConnectPrepareFrameHandler(FrameNotificationEvent::Handler& handler) - { - handler.Connect(m_prepareFrameEvent); - } - - void RenderPipeline::ConnectEndFrameHandler(FrameNotificationEvent::Handler& handler) - { - handler.Connect(m_endFrameEvent); - } - void RenderPipeline::SetDrawFilterTag(RHI::DrawFilterTag tag) { m_drawFilterTag = tag; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp index a7ecf089c0..c5d82c6f29 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp @@ -23,6 +23,8 @@ #include #include +#include + #include namespace AZ @@ -92,7 +94,14 @@ namespace AZ Scene::~Scene() { - WaitAndCleanCompletionJob(m_simulationCompletion); + if (m_taskGraphActive) + { + WaitTGEvent(m_simulationFinishedTGEvent, &m_simulationFinishedWorkActive); + } + else + { + WaitAndCleanCompletionJob(m_simulationCompletion); + } SceneRequestBus::Handler::BusDisconnect(); // Remove all the render pipelines. Need to process queued changes with pass system before and after remove render pipelines @@ -346,6 +355,47 @@ namespace AZ return nullptr; } + void Scene::SimulateTaskGraph() + { + static const AZ::TaskDescriptor simulationTGDesc{"RPI::Scene::Simulate", "Graphics"}; + AZ::TaskGraph simulationTG; + + for (FeatureProcessorPtr& fp : m_featureProcessors) + { + FeatureProcessor* featureProcessor = fp.get(); + simulationTG.AddTask( + simulationTGDesc, + [this, featureProcessor]() + { + featureProcessor->Simulate(m_simulatePacket); + }); + } + simulationTG.Detach(); + m_simulationFinishedWorkActive = true; + simulationTG.Submit(&m_simulationFinishedTGEvent); + } + + void Scene::SimulateJobs() + { + // Create a new job to track completion. + m_simulationCompletion = aznew AZ::JobCompletion(); + + for (FeatureProcessorPtr& fp : m_featureProcessors) + { + FeatureProcessor* featureProcessor = fp.get(); + const auto jobLambda = [this, featureProcessor]() + { + + featureProcessor->Simulate(m_simulatePacket); + }; + + AZ::Job* simulationJob = AZ::CreateJobFunction(AZStd::move(jobLambda), true, nullptr); //auto-deletes + simulationJob->SetDependent(m_simulationCompletion); + simulationJob->Start(); + } + //[GFX TODO]: the completion job should start here + } + void Scene::Simulate([[maybe_unused]] const TickTimeInfo& tickInfo, RHI::JobPolicy jobPolicy) { AZ_PROFILE_SCOPE(RPI, "Scene: Simulate"); @@ -353,7 +403,17 @@ namespace AZ m_simulationTime = tickInfo.m_currentGameTime; // If previous simulation job wasn't done, wait for it to finish. - WaitAndCleanCompletionJob(m_simulationCompletion); + if (m_taskGraphActive) + { + WaitTGEvent(m_simulationFinishedTGEvent, &m_simulationFinishedWorkActive); + } + else + { + WaitAndCleanCompletionJob(m_simulationCompletion); + } + + auto taskGraphActiveInterface = AZ::Interface::Get(); + m_taskGraphActive = taskGraphActiveInterface && taskGraphActiveInterface->IsTaskGraphActive(); if (jobPolicy == RHI::JobPolicy::Serial) { @@ -364,22 +424,27 @@ namespace AZ } else { - // Create a new job to track completion. - m_simulationCompletion = aznew AZ::JobCompletion(); - - for (FeatureProcessorPtr& fp : m_featureProcessors) + if (m_taskGraphActive) { - FeatureProcessor* featureProcessor = fp.get(); - const auto jobLambda = [this, featureProcessor]() - { - featureProcessor->Simulate(m_simulatePacket); - }; - - AZ::Job* simulationJob = AZ::CreateJobFunction(AZStd::move(jobLambda), true, nullptr); //auto-deletes - simulationJob->SetDependent(m_simulationCompletion); - simulationJob->Start(); + SimulateTaskGraph(); + } + else + { + SimulateJobs(); } - //[GFX TODO]: the completion job should start here + } + } + + void Scene::WaitTGEvent(AZ::TaskGraphEvent& completionTGEvent, AZStd::atomic_bool* workToWaitOn ) + { + AZ_PROFILE_SCOPE(RPI, "Scene: WaitAndCleanCompletionJob"); + if (!workToWaitOn || workToWaitOn->load()) + { + completionTGEvent.Wait(); + } + if (workToWaitOn) + { + workToWaitOn->store(false); } } @@ -394,7 +459,7 @@ namespace AZ completionJob = nullptr; } } - + void Scene::ConnectEvent(PrepareSceneSrgEvent::Handler& handler) { handler.Connect(m_prepareSrgEvent); @@ -418,38 +483,158 @@ namespace AZ } } - void Scene::PrepareRender([[maybe_unused]]const TickTimeInfo& tickInfo, RHI::JobPolicy jobPolicy) + void Scene::CollectDrawPacketsTaskGraph() + { + AZ_PROFILE_SCOPE(RPI, "CollectDrawPackets"); + AZ::TaskGraphEvent collectDrawPacketsTGEvent; + static const AZ::TaskDescriptor collectDrawPacketsTGDesc{"RPI_Scene_PrepareRender_CollectDrawPackets", "Graphics"}; + + AZ::TaskGraph collectDrawPacketsTG; + // Launch FeatureProcessor::Render() jobs + for (auto& fp : m_featureProcessors) + { + collectDrawPacketsTG.AddTask( + collectDrawPacketsTGDesc, + [this, &fp]() + { + fp->Render(m_renderPacket); + }); + + } + collectDrawPacketsTG.Submit(&collectDrawPacketsTGEvent); + + // Launch CullingSystem::ProcessCullables() jobs (will run concurrently with FeatureProcessor::Render() jobs if m_parallelOctreeTraversal) + bool parallelOctreeTraversal = m_cullingScene->GetDebugContext().m_parallelOctreeTraversal; + m_cullingScene->BeginCulling(m_renderPacket.m_views); + AZ::JobCompletion processCullablesCompletion; + for (ViewPtr& viewPtr : m_renderPacket.m_views) + { + AZ::Job* processCullablesJob = AZ::CreateJobFunction([this, &viewPtr](AZ::Job& thisJob) + { + m_cullingScene->ProcessCullables(*this, *viewPtr, thisJob); // can't call directly because ProcessCullables needs a parent job + }, + true, nullptr); //auto-deletes + if (parallelOctreeTraversal) + { + processCullablesJob->SetDependent(&processCullablesCompletion); + processCullablesJob->Start(); + } + else + { + processCullablesJob->StartAndWaitForCompletion(); + } + } + + WaitTGEvent(collectDrawPacketsTGEvent); + processCullablesCompletion.StartAndWaitForCompletion(); + } + + void Scene::CollectDrawPacketsJobs() + { + AZ_PROFILE_SCOPE(RPI, "CollectDrawPackets"); + AZ::JobCompletion* collectDrawPacketsCompletion = aznew AZ::JobCompletion(); + + // Launch FeatureProcessor::Render() jobs + for (auto& fp : m_featureProcessors) + { + const auto renderLambda = [this, &fp]() + { + fp->Render(m_renderPacket); + }; + + AZ::Job* renderJob = AZ::CreateJobFunction(AZStd::move(renderLambda), true, nullptr); //auto-deletes + renderJob->SetDependent(collectDrawPacketsCompletion); + renderJob->Start(); + } + + // Launch CullingSystem::ProcessCullables() jobs (will run concurrently with FeatureProcessor::Render() jobs) + m_cullingScene->BeginCulling(m_renderPacket.m_views); + for (ViewPtr& viewPtr : m_renderPacket.m_views) + { + AZ::Job* processCullablesJob = AZ::CreateJobFunction([this, &viewPtr](AZ::Job& thisJob) + { + m_cullingScene->ProcessCullables(*this, *viewPtr, thisJob); // can't call directly because ProcessCullables needs a parent job + }, + true, nullptr); //auto-deletes + if (m_cullingScene->GetDebugContext().m_parallelOctreeTraversal) + { + processCullablesJob->SetDependent(collectDrawPacketsCompletion); + processCullablesJob->Start(); + } + else + { + processCullablesJob->StartAndWaitForCompletion(); + } + } + + WaitAndCleanCompletionJob(collectDrawPacketsCompletion); + } + + void Scene::FinalizeDrawListsTaskGraph() + { + AZ::TaskGraphEvent finalizeDrawListsTGEvent; + static const AZ::TaskDescriptor finalizeDrawListsTGDesc{"RPI_Scene_PrepareRender_FinalizeDrawLists", "Graphics"}; + + AZ::TaskGraph finalizeDrawListsTG; + for (auto& view : m_renderPacket.m_views) + { + finalizeDrawListsTG.AddTask( + finalizeDrawListsTGDesc, + [view]() + { + view->FinalizeDrawLists(); + }); + } + finalizeDrawListsTG.Submit(&finalizeDrawListsTGEvent); + WaitTGEvent(finalizeDrawListsTGEvent); + } + + void Scene::FinalizeDrawListsJobs() + { + AZ::JobCompletion* finalizeDrawListsCompletion = aznew AZ::JobCompletion(); + for (auto& view : m_renderPacket.m_views) + { + const auto finalizeDrawListsLambda = [view]() + { + view->FinalizeDrawLists(); + }; + + AZ::Job* finalizeDrawListsJob = AZ::CreateJobFunction(AZStd::move(finalizeDrawListsLambda), true, nullptr); //auto-deletes + finalizeDrawListsJob->SetDependent(finalizeDrawListsCompletion); + finalizeDrawListsJob->Start(); + } + WaitAndCleanCompletionJob(finalizeDrawListsCompletion); + } + + void Scene::PrepareRender(const TickTimeInfo& tickInfo, RHI::JobPolicy jobPolicy) { AZ_PROFILE_SCOPE(RPI, "Scene: PrepareRender"); + if (m_taskGraphActive) + { + WaitTGEvent(m_simulationFinishedTGEvent, &m_simulationFinishedWorkActive); + } + else { - AZ_PROFILE_SCOPE(RPI, "WaitForSimulationCompletion"); WaitAndCleanCompletionJob(m_simulationCompletion); } SceneNotificationBus::Event(GetId(), &SceneNotification::OnBeginPrepareRender); - // Get active pipelines which need to be rendered and notify them of an impending frame. + // Get active pipelines which need to be rendered and notify them frame started AZStd::vector activePipelines; { - AZ_PROFILE_SCOPE(RPI, "Scene: OnPrepareFrame"); + AZ_PROFILE_SCOPE(RPI, "Scene: OnStartFrame"); for (auto& pipeline : m_pipelines) { - pipeline->OnPrepareFrame(); if (pipeline->NeedsRender()) { activePipelines.push_back(pipeline); + pipeline->OnStartFrame(tickInfo); } } } - // Get active pipelines which need to be rendered and notify them frame started - for (const auto& pipeline : activePipelines) - { - AZ_PROFILE_SCOPE(RPI, "Scene: OnStartFrame"); - pipeline->OnStartFrame(); - } - // Return if there is no active render pipeline if (activePipelines.empty()) { @@ -503,44 +688,16 @@ namespace AZ } { - AZ_PROFILE_SCOPE(RPI, "CollectDrawPackets"); - AZ::JobCompletion* collectDrawPacketsCompletion = aznew AZ::JobCompletion(); - // Launch FeatureProcessor::Render() jobs - for (auto& fp : m_featureProcessors) + if (m_taskGraphActive) { - const auto renderLambda = [this, &fp]() - { - fp->Render(m_renderPacket); - }; - - AZ::Job* renderJob = AZ::CreateJobFunction(AZStd::move(renderLambda), true, nullptr); //auto-deletes - renderJob->SetDependent(collectDrawPacketsCompletion); - renderJob->Start(); + CollectDrawPacketsTaskGraph(); } - - // Launch CullingSystem::ProcessCullables() jobs (will run concurrently with FeatureProcessor::Render() jobs) - m_cullingScene->BeginCulling(m_renderPacket.m_views); - for (ViewPtr& viewPtr : m_renderPacket.m_views) + else { - AZ::Job* processCullablesJob = AZ::CreateJobFunction([this, &viewPtr](AZ::Job& thisJob) - { - m_cullingScene->ProcessCullables(*this, *viewPtr, thisJob); - }, - true, nullptr); //auto-deletes - if (m_cullingScene->GetDebugContext().m_parallelOctreeTraversal) - { - processCullablesJob->SetDependent(collectDrawPacketsCompletion); - processCullablesJob->Start(); - } - else - { - processCullablesJob->StartAndWaitForCompletion(); - } + CollectDrawPacketsJobs(); } - WaitAndCleanCompletionJob(collectDrawPacketsCompletion); - m_cullingScene->EndCulling(); // Add dynamic draw data for all the views @@ -563,20 +720,15 @@ namespace AZ } else { - AZ::JobCompletion* finalizeDrawListsCompletion = aznew AZ::JobCompletion(); - for (auto& view : m_renderPacket.m_views) + if (m_taskGraphActive) { - const auto finalizeDrawListsLambda = [view]() - { - view->FinalizeDrawLists(); - }; - - AZ::Job* finalizeDrawListsJob = AZ::CreateJobFunction(AZStd::move(finalizeDrawListsLambda), true, nullptr); //auto-deletes - finalizeDrawListsJob->SetDependent(finalizeDrawListsCompletion); - finalizeDrawListsJob->Start(); + FinalizeDrawListsTaskGraph(); + } + else + { + FinalizeDrawListsJobs(); } AZ_PROFILE_END(RPI); - WaitAndCleanCompletionJob(finalizeDrawListsCompletion); } } @@ -589,12 +741,10 @@ namespace AZ void Scene::OnFrameEnd() { AZ_PROFILE_SCOPE(RPI, "Scene: OnFrameEnd"); - bool didRender = false; for (auto& pipeline : m_pipelines) { if (pipeline->NeedsRender()) { - didRender = true; pipeline->OnFrameEnd(); } } @@ -602,10 +752,6 @@ namespace AZ { fp->OnRenderEnd(); } - if (didRender) - { - SceneNotificationBus::Event(GetId(), &SceneNotification::OnFrameEnd); - } } void Scene::UpdateSrgs() diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Metrics/ShaderMetricsSystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Metrics/ShaderMetricsSystem.cpp index 528d32e217..e11624a921 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Metrics/ShaderMetricsSystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Metrics/ShaderMetricsSystem.cpp @@ -23,11 +23,11 @@ namespace AZ { namespace RPI { - AZStd::string GetMetricsFilePath() + AZ::IO::FixedMaxPath GetMetricsFilePath() { - char shaderMetricPath[AZ_MAX_PATH_LEN]; - AZ::Utils::GetExecutableDirectory(shaderMetricPath, AZ_MAX_PATH_LEN); - return AZStd::string(shaderMetricPath) + AZ_CORRECT_FILESYSTEM_SEPARATOR_STRING + "ShaderMetrics.json"; + AZ::IO::FixedMaxPath resolvedPath; + AZ::IO::LocalFileIO::GetInstance()->ResolvePath(resolvedPath, "@user@/ShaderMetrics.json"); + return resolvedPath; } ShaderMetricsSystemInterface* ShaderMetricsSystemInterface::Get() @@ -64,7 +64,7 @@ namespace AZ void ShaderMetricsSystem::ReadLog() { - const AZStd::string metricsFilePath = GetMetricsFilePath(); + const AZ::IO::FixedMaxPath metricsFilePath = GetMetricsFilePath(); if (AZ::IO::LocalFileIO::GetInstance()->Exists(metricsFilePath.c_str())) { @@ -80,7 +80,7 @@ namespace AZ void ShaderMetricsSystem::WriteLog() { - const AZStd::string metricsFilePath = GetMetricsFilePath(); + const AZ::IO::FixedMaxPath metricsFilePath = GetMetricsFilePath(); auto saveResult = AZ::JsonSerializationUtils::SaveObjectToFile(&m_metrics, metricsFilePath.c_str()); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp index 499365a9a9..f95c6abfcd 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp @@ -580,6 +580,11 @@ namespace AZ return {}; } + void ShaderResourceGroup::ResetViews() + { + m_data.ResetViews(); + } + const RHI::SamplerState& ShaderResourceGroup::GetSampler(RHI::ShaderInputNameIndex& inputIndex, uint32_t arrayIndex) const { inputIndex.ValidateOrFindSamplerIndex(GetLayout()); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderVariantAsyncLoader.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderVariantAsyncLoader.cpp index 4855fbd864..36109b7b82 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderVariantAsyncLoader.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderVariantAsyncLoader.cpp @@ -24,12 +24,11 @@ namespace AZ threadDesc.m_name = "ShaderVariantAsyncLoader"; m_serviceThread = AZStd::thread( + threadDesc, [this]() { this->ThreadServiceLoop(); - }, - &threadDesc - ); + }); } void ShaderVariantAsyncLoader::ThreadServiceLoop() diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp index c2356cea45..8c1e38ba58 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp @@ -241,10 +241,7 @@ namespace AZ { AZ_PROFILE_SCOPE(RPI, "View: FinalizeDrawLists"); m_drawListContext.FinalizeLists(); - if (m_passesByDrawList) - { - SortFinalizedDrawLists(); - } + SortFinalizedDrawLists(); } void View::SortFinalizedDrawLists() diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp index 3dcbae2fb9..77114e5cf5 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp @@ -25,13 +25,14 @@ namespace AZ , m_viewportSize(1, 1) { m_windowContext->Initialize(device, nativeWindow); - AzFramework::WindowRequestBus::Event(nativeWindow, [this](AzFramework::WindowRequestBus::Events* window) - { - m_viewportSize = window->GetClientAreaSize(); - m_viewportDpiScaleFactor = window->GetDpiScaleFactor(); - m_vsyncInterval = window->GetSyncInterval(); - m_refreshRate = window->GetDisplayRefreshRate(); - }); + AzFramework::WindowRequestBus::EventResult( + m_viewportSize, + nativeWindow, + &AzFramework::WindowRequestBus::Events::GetClientAreaSize); + AzFramework::WindowRequestBus::EventResult( + m_viewportDpiScaleFactor, + nativeWindow, + &AzFramework::WindowRequestBus::Events::GetDpiScaleFactor); AzFramework::WindowNotificationBus::Handler::BusConnect(nativeWindow); AzFramework::ViewportRequestBus::Handler::BusConnect(id); @@ -45,20 +46,6 @@ namespace AZ m_viewMatrixChangedEvent.Signal(matrix); }); - m_prepareFrameHandler = RenderPipeline::FrameNotificationEvent::Handler( - [this]() - { - ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick); - ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick); - }); - - m_endFrameHandler = RenderPipeline::FrameNotificationEvent::Handler( - [this]() - { - ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnFrameEnd); - ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnFrameEnd); - }); - SetRenderScene(renderScene); } @@ -124,38 +111,26 @@ namespace AZ { SceneNotificationBus::Handler::BusConnect(m_rootScene->GetId()); } - ResetCurrentPipeline(); + m_currentPipeline.reset(); UpdatePipelineView(); - UpdatePipelineRefreshRate(); } m_sceneChangedEvent.Signal(scene); } - float ViewportContext::GetFpsLimit() const - { - return m_fpsLimit; - } - - void ViewportContext::SetFpsLimit(float fpsLimit) + void ViewportContext::RenderTick() { - m_fpsLimit = fpsLimit; - UpdatePipelineRefreshRate(); + // add the current pipeline to next render tick if it's not already added. + if (m_currentPipeline && m_currentPipeline->GetRenderMode() != RenderPipeline::RenderMode::RenderOnce) + { + m_currentPipeline->AddToRenderTickOnce(); + } } - float ViewportContext::GetTargetFrameRate() const + void ViewportContext::OnBeginPrepareRender() { - float targetFrameRate = GetFpsLimit(); - const AZ::u32 vsyncInterval = GetVsyncInterval(); - if (vsyncInterval != 0) - { - const float vsyncFrameRate = static_cast(GetRefreshRate()) / static_cast(vsyncInterval); - if (targetFrameRate == 0.f || vsyncFrameRate < targetFrameRate) - { - targetFrameRate = vsyncFrameRate; - } - } - return targetFrameRate; + ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick); + ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick); } AZ::Name ViewportContext::GetName() const @@ -183,16 +158,6 @@ namespace AZ return m_viewportDpiScaleFactor; } - uint32_t ViewportContext::GetVsyncInterval() const - { - return m_vsyncInterval; - } - - uint32_t ViewportContext::GetRefreshRate() const - { - return m_refreshRate; - } - void ViewportContext::ConnectSizeChangedHandler(SizeChangedEvent::Handler& handler) { handler.Connect(m_sizeChangedEvent); @@ -203,16 +168,6 @@ namespace AZ handler.Connect(m_dpiScalingFactorChangedEvent); } - void ViewportContext::ConnectVsyncIntervalChangedHandler(UintChangedEvent::Handler& handler) - { - handler.Connect(m_vsyncIntervalChangedEvent); - } - - void ViewportContext::ConnectRefreshRateChangedHandler(UintChangedEvent::Handler& handler) - { - handler.Connect(m_refreshRateChangedEvent); - } - void ViewportContext::ConnectViewMatrixChangedHandler(MatrixChangedEvent::Handler& handler) { handler.Connect(m_viewMatrixChangedEvent); @@ -308,43 +263,12 @@ namespace AZ m_currentPipelineChangedEvent.Signal(m_currentPipeline); } - if (m_currentPipeline) + if (auto pipeline = GetCurrentPipeline()) { - if (!m_prepareFrameHandler.IsConnected()) - { - m_currentPipeline->ConnectPrepareFrameHandler(m_prepareFrameHandler); - m_currentPipeline->ConnectEndFrameHandler(m_endFrameHandler); - } - m_currentPipeline->SetDefaultView(m_defaultView); - } - } - - void ViewportContext::UpdatePipelineRefreshRate() - { - if (!m_currentPipeline) - { - return; - } - - const float refreshRate = GetTargetFrameRate(); - // If we have a truly unlimited framerate, just render every tick - if (refreshRate == 0.f) - { - m_currentPipeline->AddToRenderTick(); - } - else - { - m_currentPipeline->AddToRenderTickAtInterval(AZStd::chrono::duration(1.f / refreshRate)); + pipeline->SetDefaultView(m_defaultView); } } - void ViewportContext::ResetCurrentPipeline() - { - m_prepareFrameHandler.Disconnect(); - m_endFrameHandler.Disconnect(); - m_currentPipeline.reset(); - } - RenderPipelinePtr ViewportContext::GetCurrentPipeline() { return m_currentPipeline; @@ -357,9 +281,8 @@ namespace AZ // in the event prioritization is added later if (pipeline->GetWindowHandle() == m_windowContext->GetWindowHandle()) { - ResetCurrentPipeline(); + m_currentPipeline.reset(); UpdatePipelineView(); - UpdatePipelineRefreshRate(); } } @@ -367,9 +290,8 @@ namespace AZ { if (m_currentPipeline.get() == pipeline) { - ResetCurrentPipeline(); + m_currentPipeline.reset(); UpdatePipelineView(); - UpdatePipelineRefreshRate(); } } @@ -383,30 +305,10 @@ namespace AZ } } - void ViewportContext::OnRefreshRateChanged(uint32_t refreshRate) - { - if (m_refreshRate != refreshRate) - { - m_refreshRate = refreshRate; - m_refreshRateChangedEvent.Signal(m_refreshRate); - UpdatePipelineRefreshRate(); - } - } - void ViewportContext::OnDpiScaleFactorChanged(float dpiScaleFactor) { m_viewportDpiScaleFactor = dpiScaleFactor; m_dpiScalingFactorChangedEvent.Signal(dpiScaleFactor); } - - void ViewportContext::OnVsyncIntervalChanged(uint32_t interval) - { - if (m_vsyncInterval != interval) - { - m_vsyncInterval = interval; - m_vsyncIntervalChangedEvent.Signal(m_vsyncInterval); - UpdatePipelineRefreshRate(); - } - } } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp index 180ce6d5a7..95f47d7393 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp @@ -8,6 +8,7 @@ #include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetView.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetView.cpp index a88d4f10e4..2b3aabdba2 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetView.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetView.cpp @@ -7,6 +7,7 @@ */ #include +#include namespace AZ { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 1caba9dba8..59f359e474 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -8,6 +8,7 @@ #include +#include #include namespace AZ diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImagePoolAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImagePoolAsset.cpp index fda4c31b08..056002f527 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImagePoolAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImagePoolAsset.cpp @@ -9,6 +9,7 @@ #include #include +#include namespace AZ { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp index 9338d52cb2..c33409f687 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialAsset.cpp index c3e0221192..5c7af601fb 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialAsset.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp index 0f70d0af35..52b6349ca0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp @@ -417,14 +417,16 @@ namespace AZ template const Color& MaterialFunctor::EditorContext::GetMaterialPropertyValue (const MaterialPropertyIndex& index) const; template const Data::Instance& MaterialFunctor::EditorContext::GetMaterialPropertyValue> (const MaterialPropertyIndex& index) const; - void CheckPropertyAccess(const MaterialPropertyIndex& index, const MaterialPropertyFlags& materialPropertyDependencies, [[maybe_unused]] const MaterialPropertiesLayout& materialPropertiesLayout) + void CheckPropertyAccess([[maybe_unused]] const MaterialPropertyIndex& index, [[maybe_unused]] const MaterialPropertyFlags& materialPropertyDependencies, [[maybe_unused]] const MaterialPropertiesLayout& materialPropertiesLayout) { +#if defined(AZ_ENABLE_TRACING) if (!materialPropertyDependencies.test(index.GetIndex())) { const MaterialPropertyDescriptor* propertyDescriptor = materialPropertiesLayout.GetPropertyDescriptor(index); AZ_Error("MaterialFunctor", false, "Material functor accessing an unregistered material property '%s'.", propertyDescriptor ? propertyDescriptor->GetName().GetCStr() : ""); } +#endif } const MaterialPropertyValue& MaterialFunctor::RuntimeContext::GetMaterialPropertyValue(const MaterialPropertyIndex& index) const diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertiesLayout.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertiesLayout.cpp index 273ea321a6..1c5142031d 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertiesLayout.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertiesLayout.cpp @@ -34,9 +34,9 @@ namespace AZ return m_materialPropertyDescriptors.size(); } - MaterialPropertyIndex MaterialPropertiesLayout::FindPropertyIndex(const Name& propertyName) const + MaterialPropertyIndex MaterialPropertiesLayout::FindPropertyIndex(const Name& propertyId) const { - return m_materialPropertyIndexes.Find(propertyName); + return m_materialPropertyIndexes.Find(propertyId); } const MaterialPropertyDescriptor* MaterialPropertiesLayout::GetPropertyDescriptor(MaterialPropertyIndex index) const diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertyValue.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertyValue.cpp index 13ecea52dc..d1017139fc 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertyValue.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialPropertyValue.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/ShaderCollection.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/ShaderCollection.cpp index 7b3b6b7a28..87076891dd 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/ShaderCollection.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/ShaderCollection.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp index 8e2d1bdd7e..9a432643d7 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelMaterialSlot.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelMaterialSlot.cpp index b9d9200aaf..4485359cf9 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelMaterialSlot.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelMaterialSlot.cpp @@ -6,6 +6,7 @@ */ #include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/MorphTargetMetaAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/MorphTargetMetaAsset.cpp index 228ef67025..bcdc91abda 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/MorphTargetMetaAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/MorphTargetMetaAsset.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp index 49ef457311..692087d93b 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp index 63a1524929..a5511edea1 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp +++ b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp @@ -53,16 +53,6 @@ namespace UnitTest return false; } - const char* AssetSystemStub::GetAbsoluteDevGameFolderPath() - { - return nullptr; - } - - const char* AssetSystemStub::GetAbsoluteDevRootFolderPath() - { - return nullptr; - } - bool AssetSystemStub::GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath) { return false; diff --git a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h index a73570e3c9..2dd810b1e6 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h +++ b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h @@ -56,8 +56,6 @@ namespace UnitTest AZStd::unordered_map m_sourceInfoMap; bool GetSourceInfoBySourcePath(const char* sourcePath, AZ::Data::AssetInfo& assetInfo, AZStd::string& watchFolder) override; - const char* GetAbsoluteDevGameFolderPath() override; - const char* GetAbsoluteDevRootFolderPath() override; bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& relativeProductPath) override; bool GenerateRelativeSourcePath( const AZStd::string& sourcePath, AZStd::string& relativePath, AZStd::string& watchFolder) override; diff --git a/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp b/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp index aaa574a14a..5343c295d8 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp +++ b/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp @@ -67,7 +67,7 @@ namespace UnitTest AZ::IO::Path assetPath = AZStd::string_view{ AZ::Utils::GetProjectPath() }; assetPath /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetPath.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetPath.c_str()); m_jsonRegistrationContext = AZStd::make_unique(); m_jsonSystemComponent = AZStd::make_unique(); @@ -90,7 +90,7 @@ namespace UnitTest JobManagerThreadDesc threadDesc; #if AZ_TRAIT_SET_JOB_PROCESSOR_ID threadDesc.m_cpuId = 0; // Don't set processors IDs on windows -#endif +#endif uint32_t numWorkerThreads = AZStd::thread::hardware_concurrency(); @@ -99,7 +99,7 @@ namespace UnitTest desc.m_workerThreads.push_back(threadDesc); #if AZ_TRAIT_SET_JOB_PROCESSOR_ID threadDesc.m_cpuId++; -#endif +#endif } m_jobManager = AZStd::make_unique(desc); diff --git a/Gems/Atom/RPI/Code/Tests/Material/MaterialPropertySerializerTests.cpp b/Gems/Atom/RPI/Code/Tests/Material/MaterialPropertySerializerTests.cpp index ce842d385d..9afc05a237 100644 --- a/Gems/Atom/RPI/Code/Tests/Material/MaterialPropertySerializerTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Material/MaterialPropertySerializerTests.cpp @@ -46,7 +46,7 @@ namespace JsonSerializationTests AZStd::shared_ptr CreatePartialDefaultInstance() override { auto result = AZStd::make_shared(); - result->m_nameId = "testProperty"; + result->m_name = "testProperty"; result->m_dataType = AZ::RPI::MaterialPropertyDataType::Float; result->m_step = 1.0f; result->m_value = 0.0f; @@ -57,7 +57,7 @@ namespace JsonSerializationTests { return R"( { - "id": "testProperty", + "name": "testProperty", "type": "Float", "step": 1.0 })"; @@ -66,7 +66,7 @@ namespace JsonSerializationTests AZStd::shared_ptr CreateFullySetInstance() override { auto result = AZStd::make_shared(); - result->m_nameId = "testProperty"; + result->m_name = "testProperty"; result->m_description = "description"; result->m_displayName = "display_name"; result->m_dataType = AZ::RPI::MaterialPropertyDataType::Float; @@ -87,7 +87,7 @@ namespace JsonSerializationTests { return R"( { - "id": "testProperty", + "name": "testProperty", "displayName": "display_name", "description": "description", "type": "Float", @@ -101,7 +101,7 @@ namespace JsonSerializationTests "connection": { "type": "ShaderOption", - "id": "o_foo", + "name": "o_foo", "shaderIndex": 2 }, "enumIsUv": true @@ -135,7 +135,7 @@ namespace JsonSerializationTests const AZ::RPI::MaterialTypeSourceData::PropertyDefinition& lhs, const AZ::RPI::MaterialTypeSourceData::PropertyDefinition& rhs) override { - if (lhs.m_nameId != rhs.m_nameId) { return false; } + if (lhs.m_name != rhs.m_name) { return false; } if (lhs.m_description != rhs.m_description) { return false; } if (lhs.m_displayName != rhs.m_displayName) { return false; } if (lhs.m_dataType != rhs.m_dataType) { return false; } @@ -153,7 +153,7 @@ namespace JsonSerializationTests auto& leftConnection = lhs.m_outputConnections[i]; auto& rightConnection = rhs.m_outputConnections[i]; if (leftConnection.m_type != rightConnection.m_type) { return false; } - if (leftConnection.m_nameId != rightConnection.m_nameId) { return false; } + if (leftConnection.m_fieldName != rightConnection.m_fieldName) { return false; } if (leftConnection.m_shaderIndex != rightConnection.m_shaderIndex) { return false; } } return true; @@ -202,7 +202,7 @@ namespace UnitTest { const AZStd::string inputJson = R"( { - "id": "testProperty", + "name": "testProperty", "displayName": "Test Property", "description": "This is a property description", "type": "Float" @@ -216,12 +216,12 @@ namespace UnitTest EXPECT_EQ(AZ::JsonSerializationResult::Processing::Completed, loadResult.m_jsonResultCode.GetProcessing()); EXPECT_EQ(AZ::JsonSerializationResult::Outcomes::PartialDefaults, loadResult.m_jsonResultCode.GetOutcome()); - EXPECT_EQ("testProperty", propertyData.m_nameId); + EXPECT_EQ("testProperty", propertyData.m_name); EXPECT_EQ("Test Property", propertyData.m_displayName); EXPECT_EQ("This is a property description", propertyData.m_description); EXPECT_EQ(MaterialPropertyDataType::Float, propertyData.m_dataType); - EXPECT_TRUE(loadResult.ContainsMessage("/id", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage("/name", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/displayName", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/description", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/type", "Success")); @@ -237,7 +237,7 @@ namespace UnitTest // Note we are keeping id and type because they are required fields const AZStd::string inputJson = R"( { - "id": "testProperty", + "name": "testProperty", "type": "Float" } )"; @@ -252,7 +252,7 @@ namespace UnitTest EXPECT_TRUE(propertyData.m_displayName.empty()); EXPECT_TRUE(propertyData.m_description.empty()); - EXPECT_TRUE(loadResult.ContainsMessage("/id", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage("/name", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/type", "Success")); EXPECT_FALSE(loadResult.ContainsOutcome(JsonSerializationResult::Outcomes::Skipped)); @@ -280,7 +280,7 @@ namespace UnitTest { const AZStd::string inputJson = R"( { - "id": "testProperty", + "name": "testProperty", "type": "foo" } )"; @@ -294,7 +294,7 @@ namespace UnitTest EXPECT_EQ(AZ::RPI::MaterialPropertyDataType::Invalid, propertyData.m_dataType); - EXPECT_TRUE(loadResult.ContainsMessage("/id", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage("/name", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/type", "Enum value could not read")); } @@ -303,7 +303,7 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "testProperty1", + "name": "testProperty1", "type": "Float", "defaultValue": 0.5, "min": 0.1, @@ -313,7 +313,7 @@ namespace UnitTest "step": 0.05 }, { - "id": "testProperty2", + "name": "testProperty2", "type": "Int", "defaultValue": -1, "min": -5, @@ -323,7 +323,7 @@ namespace UnitTest "step": 1 }, { - "id": "testProperty3", + "name": "testProperty3", "type": "UInt", "defaultValue": 4294901761, "min": 4294901760, @@ -368,7 +368,7 @@ namespace UnitTest for (int i = 0; i < propertyData.size(); ++i) { AZStd::string prefix = AZStd::string::format("/%d", i); - EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/id", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/name", "Success")); EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/type", "Success")); EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/defaultValue", "Success")); EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/min", "Success")); @@ -388,19 +388,19 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "testProperty1", + "name": "testProperty1", "displayName": "Test Property 1", "description": "Test", "type": "Float" }, { - "id": "testProperty2", + "name": "testProperty2", "displayName": "Test Property 2", "description": "Test", "type": "Int" }, { - "id": "testProperty3", + "name": "testProperty3", "displayName": "Test Property 3", "description": "Test", "type": "UInt" @@ -443,13 +443,13 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "testProperty1", + "name": "testProperty1", "type": "Vector2", "vectorLabels": ["U", "V"], "defaultValue": [0.6, 0.5] }, { - "id": "testProperty2", + "name": "testProperty2", "type": "Vector4", "vectorLabels": ["A", "B", "C", "D"], "defaultValue": [0.3, 0.4, 0.5, 0.6] @@ -485,21 +485,21 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "visibilityIsDefault", + "name": "visibilityIsDefault", "type": "Float" }, { - "id": "visibilityIsEditable", + "name": "visibilityIsEditable", "type": "Float", "visibility": "Enabled" }, { - "id": "visibilityIsDisabled", + "name": "visibilityIsDisabled", "type": "Float", "visibility": "Disabled" }, { - "id": "visibilityIsHidden", + "name": "visibilityIsHidden", "type": "Float", "visibility": "Hidden" } @@ -509,20 +509,20 @@ namespace UnitTest const AZStd::string expectedOutputJson = R"( [ { - "id": "visibilityIsDefault", + "name": "visibilityIsDefault", "type": "Float" }, { - "id": "visibilityIsEditable", + "name": "visibilityIsEditable", "type": "Float" }, { - "id": "visibilityIsDisabled", + "name": "visibilityIsDisabled", "type": "Float", "visibility": "Disabled" }, { - "id": "visibilityIsHidden", + "name": "visibilityIsHidden", "type": "Float", "visibility": "Hidden" } @@ -552,7 +552,7 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "testProperty1", + "name": "testProperty1", "type": "Float", "defaultValue": true, "min": -1, @@ -560,7 +560,7 @@ namespace UnitTest "step": "1" }, { - "id": "testProperty2", + "name": "testProperty2", "type": "Int", "defaultValue": true, "min": -1.5, @@ -568,7 +568,7 @@ namespace UnitTest "step": "1" }, { - "id": "testProperty3", + "name": "testProperty3", "type": "UInt", "defaultValue": "4294963200", "min": true, @@ -610,32 +610,32 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "testProperty1", + "name": "testProperty1", "type": "Bool", "defaultValue": true }, { - "id": "testProperty2", + "name": "testProperty2", "type": "Vector2", "defaultValue": [0.1, 0.2] }, { - "id": "testProperty3", + "name": "testProperty3", "type": "Vector3", "defaultValue": [0.3, 0.4, 0.5] }, { - "id": "testProperty4", + "name": "testProperty4", "type": "Vector4", "defaultValue": [0.6, 0.5, 0.8, 0.4] }, { - "id": "testProperty5", + "name": "testProperty5", "type": "Color", "defaultValue": [0.1, 0.2, 0.3] }, { - "id": "testProperty6", + "name": "testProperty6", "type": "Image", "defaultValue": "Default.png" } @@ -669,7 +669,7 @@ namespace UnitTest for (int i = 0; i < propertyData.size(); ++i) { AZStd::string prefix = AZStd::string::format("/%d", i); - EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/id", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/name", "Success")); EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/type", "Success")); EXPECT_TRUE(loadResult.ContainsMessage(prefix + "/defaultValue", "Success")); } @@ -684,27 +684,27 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "testProperty1", + "name": "testProperty1", "type": "Bool" }, { - "id": "testProperty2", + "name": "testProperty2", "type": "Vector2" }, { - "id": "testProperty3", + "name": "testProperty3", "type": "Vector3" }, { - "id": "testProperty4", + "name": "testProperty4", "type": "Vector4" }, { - "id": "testProperty5", + "name": "testProperty5", "type": "Color" }, { - "id": "testProperty6", + "name": "testProperty6", "type": "Image" } ] @@ -745,27 +745,27 @@ namespace UnitTest const AZStd::string inputJson = R"( [ { - "id": "testProperty1", + "name": "testProperty1", "type": "Bool", "defaultValue": 1 }, { - "id": "testProperty2", + "name": "testProperty2", "type": "Vector2", "defaultValue": { "x": 0.4, "y": 0.1 } }, { - "id": "testProperty3", + "name": "testProperty3", "type": "Vector3", "defaultValue": { "x": 0.4, "y": 0.1, "z": 0.5 } }, { - "id": "testProperty4", + "name": "testProperty4", "type": "Vector4", "defaultValue": { "x": 0.4, "y": 0.1, "z": 0.5, "w": 0.6 } }, { - "id": "testProperty5", + "name": "testProperty5", "type": "Color", "defaultValue": { "hex": "FF00FF" } } @@ -798,6 +798,41 @@ namespace UnitTest TEST_F(MaterialPropertySerializerTests, LoadAndStoreJson_OneConnection) { + const AZStd::string inputJson = R"( + { + "name": "testProperty", + "type": "Float", + "connection": { + "type": "ShaderOption", + "name": "o_foo", + "shaderIndex": 2 + } + } + )"; + + MaterialTypeSourceData::PropertyDefinition propertyData; + JsonTestResult loadResult = LoadTestDataFromJson(propertyData, inputJson); + + EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask()); + EXPECT_EQ(AZ::JsonSerializationResult::Processing::Completed, loadResult.m_jsonResultCode.GetProcessing()); + + EXPECT_EQ(1, propertyData.m_outputConnections.size()); + EXPECT_EQ(MaterialPropertyOutputType::ShaderOption, propertyData.m_outputConnections[0].m_type); + EXPECT_EQ("o_foo", propertyData.m_outputConnections[0].m_fieldName); + EXPECT_EQ(2, propertyData.m_outputConnections[0].m_shaderIndex); + + EXPECT_TRUE(loadResult.ContainsMessage("/connection/type", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage("/connection/name", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage("/connection/shaderIndex", "Success")); + EXPECT_FALSE(loadResult.ContainsOutcome(JsonSerializationResult::Outcomes::Skipped)); + + TestStoreToJson(propertyData, inputJson); + } + + TEST_F(MaterialPropertySerializerTests, LoadUsingOldFormat) + { + // Tests backward compatibility for when "id" was the key instead of "name", for both the property and its connections. + const AZStd::string inputJson = R"( { "id": "testProperty", @@ -815,35 +850,35 @@ namespace UnitTest EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask()); EXPECT_EQ(AZ::JsonSerializationResult::Processing::Completed, loadResult.m_jsonResultCode.GetProcessing()); + + EXPECT_EQ("testProperty", propertyData.m_name); EXPECT_EQ(1, propertyData.m_outputConnections.size()); EXPECT_EQ(MaterialPropertyOutputType::ShaderOption, propertyData.m_outputConnections[0].m_type); - EXPECT_EQ("o_foo", propertyData.m_outputConnections[0].m_nameId); + EXPECT_EQ("o_foo", propertyData.m_outputConnections[0].m_fieldName); EXPECT_EQ(2, propertyData.m_outputConnections[0].m_shaderIndex); EXPECT_TRUE(loadResult.ContainsMessage("/connection/type", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/connection/id", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/connection/shaderIndex", "Success")); EXPECT_FALSE(loadResult.ContainsOutcome(JsonSerializationResult::Outcomes::Skipped)); - - TestStoreToJson(propertyData, inputJson); } TEST_F(MaterialPropertySerializerTests, LoadAndStoreJson_MultipleConnections) { const AZStd::string inputJson = R"( { - "id": "testProperty", + "name": "testProperty", "type": "Float", "connection": [ { "type": "ShaderInput", - "id": "o_foo", + "name": "o_foo", "shaderIndex": 2 }, { "type": "ShaderOption", - "id": "o_bar", + "name": "o_bar", "shaderIndex": 1 } ] @@ -858,18 +893,18 @@ namespace UnitTest EXPECT_EQ(2, propertyData.m_outputConnections.size()); EXPECT_EQ(MaterialPropertyOutputType::ShaderInput, propertyData.m_outputConnections[0].m_type); - EXPECT_EQ("o_foo", propertyData.m_outputConnections[0].m_nameId); + EXPECT_EQ("o_foo", propertyData.m_outputConnections[0].m_fieldName); EXPECT_EQ(2, propertyData.m_outputConnections[0].m_shaderIndex); EXPECT_EQ(MaterialPropertyOutputType::ShaderOption, propertyData.m_outputConnections[1].m_type); - EXPECT_EQ("o_bar", propertyData.m_outputConnections[1].m_nameId); + EXPECT_EQ("o_bar", propertyData.m_outputConnections[1].m_fieldName); EXPECT_EQ(1, propertyData.m_outputConnections[1].m_shaderIndex); EXPECT_TRUE(loadResult.ContainsMessage("/connection/0/type", "Success")); - EXPECT_TRUE(loadResult.ContainsMessage("/connection/0/id", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage("/connection/0/name", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/connection/0/shaderIndex", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/connection/1/type", "Success")); - EXPECT_TRUE(loadResult.ContainsMessage("/connection/1/id", "Success")); + EXPECT_TRUE(loadResult.ContainsMessage("/connection/1/name", "Success")); EXPECT_TRUE(loadResult.ContainsMessage("/connection/1/shaderIndex", "Success")); EXPECT_FALSE(loadResult.ContainsOutcome(JsonSerializationResult::Outcomes::Skipped)); @@ -881,12 +916,12 @@ namespace UnitTest // "conection" is misspelled const AZStd::string inputJson = R"( { - "id": "testProperty", + "name": "testProperty", "type": "Float", "conection": [ { "type": "ShaderInput", - "id": "o_foo", + "name": "o_foo", "shaderIndex": 2 } ] @@ -899,7 +934,7 @@ namespace UnitTest EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask()); EXPECT_EQ(AZ::JsonSerializationResult::Processing::Completed, loadResult.m_jsonResultCode.GetProcessing()); - EXPECT_EQ(propertyData.m_nameId, "testProperty"); + EXPECT_EQ(propertyData.m_name, "testProperty"); EXPECT_EQ(propertyData.m_dataType, MaterialPropertyDataType::Float); EXPECT_EQ(propertyData.m_outputConnections.size(), 0); @@ -911,13 +946,13 @@ namespace UnitTest // "shadrIndex" is misspelled const AZStd::string inputJson = R"( { - "id": "testProperty", + "name": "testProperty", "type": "Float", "connection": [ { "type": "ShaderInput", "shadrIndex": 2, - "id": "o_foo" + "name": "o_foo" } ] } @@ -929,10 +964,10 @@ namespace UnitTest EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask()); EXPECT_EQ(AZ::JsonSerializationResult::Processing::Completed, loadResult.m_jsonResultCode.GetProcessing()); - EXPECT_EQ(propertyData.m_nameId, "testProperty"); + EXPECT_EQ(propertyData.m_name, "testProperty"); EXPECT_EQ(propertyData.m_dataType, MaterialPropertyDataType::Float); EXPECT_EQ(propertyData.m_outputConnections.size(), 1); - EXPECT_EQ(propertyData.m_outputConnections[0].m_nameId, "o_foo"); + EXPECT_EQ(propertyData.m_outputConnections[0].m_fieldName, "o_foo"); EXPECT_EQ(propertyData.m_outputConnections[0].m_type, MaterialPropertyOutputType::ShaderInput); EXPECT_EQ(propertyData.m_outputConnections[0].m_shaderIndex, -1); diff --git a/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp b/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp index 553c3243e1..dd3b3b2711 100644 --- a/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp @@ -89,14 +89,14 @@ namespace UnitTest } }; - void AddPropertyGroup(MaterialSourceData& material, AZStd::string_view groupNameId) + void AddPropertyGroup(MaterialSourceData& material, AZStd::string_view groupName) { - material.m_properties.insert(groupNameId); + material.m_properties.insert(groupName); } - void AddProperty(MaterialSourceData& material, AZStd::string_view groupNameId, AZStd::string_view propertyNameId, const MaterialPropertyValue& anyValue) + void AddProperty(MaterialSourceData& material, AZStd::string_view groupName, AZStd::string_view propertyName, const MaterialPropertyValue& anyValue) { - material.m_properties[groupNameId][propertyNameId].m_value = anyValue; + material.m_properties[groupName][propertyName].m_value = anyValue; } TEST_F(MaterialSourceDataTests, CreateMaterialAsset_BasicProperties) @@ -205,25 +205,25 @@ namespace UnitTest " \"propertyLayout\": { \n" " \"version\": 1, \n" " \"groups\": [ \n" - " { \"id\": \"groupA\" }, \n" - " { \"id\": \"groupB\" }, \n" - " { \"id\": \"groupC\" } \n" + " { \"name\": \"groupA\" }, \n" + " { \"name\": \"groupB\" }, \n" + " { \"name\": \"groupC\" } \n" " ], \n" " \"properties\": { \n" " \"groupA\": [ \n" - " {\"id\": \"MyBool\", \"type\": \"bool\"}, \n" - " {\"id\": \"MyInt\", \"type\": \"int\"}, \n" - " {\"id\": \"MyUInt\", \"type\": \"uint\"} \n" + " {\"name\": \"MyBool\", \"type\": \"bool\"}, \n" + " {\"name\": \"MyInt\", \"type\": \"int\"}, \n" + " {\"name\": \"MyUInt\", \"type\": \"uint\"} \n" " ], \n" " \"groupB\": [ \n" - " {\"id\": \"MyFloat\", \"type\": \"float\"}, \n" - " {\"id\": \"MyFloat2\", \"type\": \"vector2\"}, \n" - " {\"id\": \"MyFloat3\", \"type\": \"vector3\"} \n" + " {\"name\": \"MyFloat\", \"type\": \"float\"}, \n" + " {\"name\": \"MyFloat2\", \"type\": \"vector2\"}, \n" + " {\"name\": \"MyFloat3\", \"type\": \"vector3\"} \n" " ], \n" " \"groupC\": [ \n" - " {\"id\": \"MyFloat4\", \"type\": \"vector4\"}, \n" - " {\"id\": \"MyColor\", \"type\": \"color\"}, \n" - " {\"id\": \"MyImage\", \"type\": \"image\"} \n" + " {\"name\": \"MyFloat4\", \"type\": \"vector4\"}, \n" + " {\"name\": \"MyColor\", \"type\": \"color\"}, \n" + " {\"name\": \"MyImage\", \"type\": \"image\"} \n" " ] \n" " } \n" " } \n" @@ -271,7 +271,7 @@ namespace UnitTest "properties": { "general": [ { - "id": "testColor", + "name": "testColor", "type": "color" } ] @@ -381,7 +381,7 @@ namespace UnitTest "properties": { "general": [ { - "id": "testColor", + "name": "testColor", "type": "color" } ] @@ -427,7 +427,7 @@ namespace UnitTest "properties": { "general": [ { - "id": "testColor", + "name": "testColor", "type": "color" } ] diff --git a/Gems/Atom/RPI/Code/Tests/Material/MaterialTypeSourceDataTests.cpp b/Gems/Atom/RPI/Code/Tests/Material/MaterialTypeSourceDataTests.cpp index 179dc7c966..ba4a58b9ff 100644 --- a/Gems/Atom/RPI/Code/Tests/Material/MaterialTypeSourceDataTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Material/MaterialTypeSourceDataTests.cpp @@ -510,7 +510,7 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{ TestShaderFilename }); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "MyBool"; + propertySource.m_name = "MyBool"; propertySource.m_displayName = "My Bool"; propertySource.m_description = "This is a bool"; propertySource.m_dataType = MaterialPropertyDataType::Bool; @@ -536,7 +536,7 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{ TestShaderFilename }); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "MyFloat"; + propertySource.m_name = "MyFloat"; propertySource.m_displayName = "My Float"; propertySource.m_description = "This is a float"; propertySource.m_min = 0.0f; @@ -566,7 +566,7 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{ TestShaderFilename }); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "MyImage"; + propertySource.m_name = "MyImage"; propertySource.m_displayName = "My Image"; propertySource.m_description = "This is an image"; propertySource.m_dataType = MaterialPropertyDataType::Image; @@ -591,7 +591,7 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{TestShaderFilename}); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "MyInt"; + propertySource.m_name = "MyInt"; propertySource.m_displayName = "My Integer"; propertySource.m_dataType = MaterialPropertyDataType::Int; propertySource.m_outputConnections.push_back(MaterialTypeSourceData::PropertyConnection{MaterialPropertyOutputType::ShaderOption, AZStd::string("o_foo"), 0}); @@ -614,7 +614,7 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{TestShaderFilename}); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "MyInt"; + propertySource.m_name = "MyInt"; propertySource.m_dataType = MaterialPropertyDataType::Int; propertySource.m_outputConnections.push_back(MaterialTypeSourceData::PropertyConnection{MaterialPropertyOutputType::ShaderOption, AZStd::string("DoesNotExist"), 0}); sourceData.m_propertyLayout.m_properties["general"].push_back(propertySource); @@ -633,7 +633,7 @@ namespace UnitTest MaterialTypeSourceData::PropertyDefinition propertySource; propertySource.m_dataType = MaterialPropertyDataType::Int; - propertySource.m_nameId = "a"; + propertySource.m_name = "a"; sourceData.m_propertyLayout.m_properties["not a valid name because it has spaces"].push_back(propertySource); // Expected errors: @@ -654,7 +654,7 @@ namespace UnitTest MaterialTypeSourceData::PropertyDefinition propertySource; propertySource.m_dataType = MaterialPropertyDataType::Int; - propertySource.m_nameId = "not a valid name because it has spaces"; + propertySource.m_name = "not a valid name because it has spaces"; sourceData.m_propertyLayout.m_properties["general"].push_back(propertySource); // Expected errors: @@ -674,7 +674,7 @@ namespace UnitTest MaterialTypeSourceData::PropertyDefinition propertySource; propertySource.m_dataType = MaterialPropertyDataType::Int; - propertySource.m_nameId = "a"; + propertySource.m_name = "a"; sourceData.m_propertyLayout.m_properties["general"].push_back(propertySource); sourceData.m_propertyLayout.m_properties["general"].push_back(propertySource); @@ -738,7 +738,7 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{ "shaderC.shader" }); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "MyInt"; + propertySource.m_name = "MyInt"; propertySource.m_displayName = "Integer"; propertySource.m_description = "Integer property that is connected to multiple shader settings"; propertySource.m_dataType = MaterialPropertyDataType::Int; @@ -797,7 +797,7 @@ namespace UnitTest MaterialTypeSourceData sourceData; MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "NonAliasFloat"; + propertySource.m_name = "NonAliasFloat"; propertySource.m_displayName = "Non-Alias Float"; propertySource.m_description = "This float is processed by a functor, not with a direct alias"; propertySource.m_dataType = MaterialPropertyDataType::Float; @@ -842,13 +842,13 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{TestShaderFilename}); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "EnableSpecialPassA"; + propertySource.m_name = "EnableSpecialPassA"; propertySource.m_displayName = "Enable Special Pass"; propertySource.m_description = "This is a bool to enable an extra shader/pass"; propertySource.m_dataType = MaterialPropertyDataType::Bool; // Note that we don't fill propertySource.m_outputConnections because this is not a direct-connected property sourceData.m_propertyLayout.m_properties["general"].push_back(propertySource); - propertySource.m_nameId = "EnableSpecialPassB"; + propertySource.m_name = "EnableSpecialPassB"; sourceData.m_propertyLayout.m_properties["general"].push_back(propertySource); sourceData.m_materialFunctorSourceData.push_back( @@ -902,7 +902,7 @@ namespace UnitTest sourceData.m_shaderCollection.push_back(MaterialTypeSourceData::ShaderVariantReferenceData{TestShaderFilename}); MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = "MyProperty"; + propertySource.m_name = "MyProperty"; propertySource.m_dataType = MaterialPropertyDataType::Bool; // Note that we don't fill propertySource.m_outputConnections because this is not a direct-connected property sourceData.m_propertyLayout.m_properties["general"].push_back(propertySource); @@ -938,7 +938,7 @@ namespace UnitTest auto addProperty = [&sourceData](MaterialPropertyDataType dateType, const char* propertyName, const char* srgConstantName, const AZ::RPI::MaterialPropertyValue& value) { MaterialTypeSourceData::PropertyDefinition propertySource; - propertySource.m_nameId = propertyName; + propertySource.m_name = propertyName; propertySource.m_dataType = dateType; propertySource.m_outputConnections.push_back(MaterialTypeSourceData::PropertyConnection{ MaterialPropertyOutputType::ShaderInput, AZStd::string(srgConstantName) }); propertySource.m_value = value; @@ -975,6 +975,152 @@ namespace UnitTest // Note that serialization of individual fields within material properties is thoroughly tested in // MaterialPropertySerializerTests, so the sample property data used here is cursory. + const AZStd::string inputJson = R"( + { + "description": "This is a general description about the material", + "propertyLayout": { + "version": 2, + "groups": [ + { + "name": "groupA", + "displayName": "Property Group A", + "description": "Description of property group A" + }, + { + "name": "groupB", + "displayName": "Property Group B", + "description": "Description of property group B" + } + ], + "properties": { + "groupA": [ + { + "name": "foo", + "type": "Bool", + "defaultValue": true + }, + { + "name": "bar", + "type": "Image", + "defaultValue": "Default.png", + "visibility": "Hidden" + } + ], + "groupB": [ + { + "name": "foo", + "type": "Float", + "defaultValue": 0.5 + }, + { + "name": "bar", + "type": "Color", + "defaultValue": [0.5, 0.5, 0.5], + "visibility": "Disabled" + } + ] + } + }, + "shaders": [ + { + "file": "ForwardPass.shader", + "tag": "ForwardPass", + "options": { + "o_optionA": "False", + "o_optionB": "True" + } + }, + { + "file": "DepthPass.shader", + "options": { + "o_optionC": "1", + "o_optionD": "2" + } + } + ], + "functors": [ + { + "type": "EnableShader", + "args": { + "enablePassProperty": "groupA.foo", + "shaderIndex": 1 + } + }, + { + "type": "Splat3", + "args": { + "floatPropertyInput": "groupB.foo", + "float3ShaderSettingOutput": "m_someFloat3" + } + } + ] + } + )"; + + MaterialTypeSourceData material; + JsonTestResult loadResult = LoadTestDataFromJson(material, inputJson); + + EXPECT_EQ(material.m_description, "This is a general description about the material"); + + EXPECT_EQ(material.m_propertyLayout.m_version, 2); + + EXPECT_EQ(material.m_propertyLayout.m_groups.size(), 2); + EXPECT_TRUE(material.FindGroup("groupA") != nullptr); + EXPECT_TRUE(material.FindGroup("groupB") != nullptr); + EXPECT_EQ(material.FindGroup("groupA")->m_displayName, "Property Group A"); + EXPECT_EQ(material.FindGroup("groupB")->m_displayName, "Property Group B"); + EXPECT_EQ(material.FindGroup("groupA")->m_description, "Description of property group A"); + EXPECT_EQ(material.FindGroup("groupB")->m_description, "Description of property group B"); + + EXPECT_EQ(material.m_propertyLayout.m_properties.size(), 2); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"].size(), 2); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"].size(), 2); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][0].m_name, "foo"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][1].m_name, "bar"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][0].m_name, "foo"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][1].m_name, "bar"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][0].m_dataType, MaterialPropertyDataType::Bool); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][1].m_dataType, MaterialPropertyDataType::Image); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][0].m_dataType, MaterialPropertyDataType::Float); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][1].m_dataType, MaterialPropertyDataType::Color); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][0].m_visibility, MaterialPropertyVisibility::Enabled); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][1].m_visibility, MaterialPropertyVisibility::Hidden); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][0].m_visibility, MaterialPropertyVisibility::Enabled); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][1].m_visibility, MaterialPropertyVisibility::Disabled); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][0].m_value, true); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][1].m_value, AZStd::string{"Default.png"}); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][0].m_value, 0.5f); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][1].m_value, AZ::Color(0.5f, 0.5f, 0.5f, 1.0f)); + + EXPECT_EQ(material.m_shaderCollection.size(), 2); + EXPECT_EQ(material.m_shaderCollection[0].m_shaderFilePath, "ForwardPass.shader"); + EXPECT_EQ(material.m_shaderCollection[1].m_shaderFilePath, "DepthPass.shader"); + EXPECT_EQ(material.m_shaderCollection[0].m_shaderOptionValues.size(), 2); + EXPECT_EQ(material.m_shaderCollection[1].m_shaderOptionValues.size(), 2); + EXPECT_EQ(material.m_shaderCollection[0].m_shaderOptionValues[Name{"o_optionA"}], Name{"False"}); + EXPECT_EQ(material.m_shaderCollection[0].m_shaderOptionValues[Name{"o_optionB"}], Name{"True"}); + EXPECT_EQ(material.m_shaderCollection[1].m_shaderOptionValues[Name{"o_optionC"}], Name{"1"}); + EXPECT_EQ(material.m_shaderCollection[1].m_shaderOptionValues[Name{"o_optionD"}], Name{"2"}); + EXPECT_EQ(material.m_shaderCollection[0].m_shaderTag, Name{"ForwardPass"}); + + EXPECT_EQ(material.m_materialFunctorSourceData.size(), 2); + EXPECT_TRUE(azrtti_cast(material.m_materialFunctorSourceData[0]->GetActualSourceData().get())); + EXPECT_EQ(azrtti_cast(material.m_materialFunctorSourceData[0]->GetActualSourceData().get())->m_enablePassPropertyId, "groupA.foo"); + EXPECT_EQ(azrtti_cast(material.m_materialFunctorSourceData[0]->GetActualSourceData().get())->m_shaderIndex, 1); + EXPECT_TRUE(azrtti_cast(material.m_materialFunctorSourceData[1]->GetActualSourceData().get())); + EXPECT_EQ(azrtti_cast(material.m_materialFunctorSourceData[1]->GetActualSourceData().get())->m_floatPropertyInputId, "groupB.foo"); + EXPECT_EQ(azrtti_cast(material.m_materialFunctorSourceData[1]->GetActualSourceData().get())->m_float3ShaderSettingOutputId, "m_someFloat3"); + + AZStd::string outputJson; + JsonTestResult storeResult = StoreTestDataToJson(material, outputJson); + ExpectSimilarJson(inputJson, outputJson); + } + + TEST_F(MaterialTypeSourceDataTests, LoadAllFieldsUsingOldFormat) + { + // The content of this test was copied from LoadAndStoreJson_AllFields to prove backward compatibility. + // (The "store" part of the test was not included because the saved data will be the new format). + const AZStd::string inputJson = R"( { "description": "This is a general description about the material", @@ -1075,10 +1221,10 @@ namespace UnitTest EXPECT_EQ(material.m_propertyLayout.m_properties.size(), 2); EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"].size(), 2); EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"].size(), 2); - EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][0].m_nameId, "foo"); - EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][1].m_nameId, "bar"); - EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][0].m_nameId, "foo"); - EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][1].m_nameId, "bar"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][0].m_name, "foo"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][1].m_name, "bar"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][0].m_name, "foo"); + EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][1].m_name, "bar"); EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][0].m_dataType, MaterialPropertyDataType::Bool); EXPECT_EQ(material.m_propertyLayout.m_properties["groupA"][1].m_dataType, MaterialPropertyDataType::Image); EXPECT_EQ(material.m_propertyLayout.m_properties["groupB"][0].m_dataType, MaterialPropertyDataType::Float); @@ -1110,10 +1256,6 @@ namespace UnitTest EXPECT_TRUE(azrtti_cast(material.m_materialFunctorSourceData[1]->GetActualSourceData().get())); EXPECT_EQ(azrtti_cast(material.m_materialFunctorSourceData[1]->GetActualSourceData().get())->m_floatPropertyInputId, "groupB.foo"); EXPECT_EQ(azrtti_cast(material.m_materialFunctorSourceData[1]->GetActualSourceData().get())->m_float3ShaderSettingOutputId, "m_someFloat3"); - - AZStd::string outputJson; - JsonTestResult storeResult = StoreTestDataToJson(material, outputJson); - ExpectSimilarJson(inputJson, outputJson); } TEST_F(MaterialTypeSourceDataTests, CreateMaterialTypeAsset_PropertyImagePath) @@ -1127,7 +1269,7 @@ namespace UnitTest "version": 2, "groups": [ { - "id": "general", + "name": "general", "displayName": "General", "description": "" } @@ -1135,12 +1277,12 @@ namespace UnitTest "properties": { "general": [ { - "id": "absolute", + "name": "absolute", "type": "Image", "defaultValue": "%s" }, { - "id": "relative", + "name": "relative", "type": "Image", "defaultValue": "%s" } diff --git a/Gems/Atom/RPI/Code/atom_rpi_edit_files.cmake b/Gems/Atom/RPI/Code/atom_rpi_edit_files.cmake index c7a459f217..e32d19ffd7 100644 --- a/Gems/Atom/RPI/Code/atom_rpi_edit_files.cmake +++ b/Gems/Atom/RPI/Code/atom_rpi_edit_files.cmake @@ -18,6 +18,8 @@ set(FILES Include/Atom/RPI.Edit/Material/MaterialTypeSourceData.h Include/Atom/RPI.Edit/Material/MaterialConverterBus.h Include/Atom/RPI.Edit/Material/MaterialPropertyId.h + Include/Atom/RPI.Edit/Material/MaterialPropertyConnectionSerializer.h + Include/Atom/RPI.Edit/Material/MaterialPropertyGroupSerializer.h Include/Atom/RPI.Edit/Material/MaterialPropertySerializer.h Include/Atom/RPI.Edit/Material/MaterialPropertyValueSerializer.h Include/Atom/RPI.Edit/Material/MaterialPropertyValueSourceData.h @@ -36,6 +38,8 @@ set(FILES Source/RPI.Edit/Material/LuaMaterialFunctorSourceData.cpp Source/RPI.Edit/Material/MaterialTypeSourceData.cpp Source/RPI.Edit/Material/MaterialPropertyId.cpp + Source/RPI.Edit/Material/MaterialPropertyGroupSerializer.cpp + Source/RPI.Edit/Material/MaterialPropertyConnectionSerializer.cpp Source/RPI.Edit/Material/MaterialPropertySerializer.cpp Source/RPI.Edit/Material/MaterialPropertyValueSerializer.cpp Source/RPI.Edit/Material/MaterialPropertyValueSourceData.cpp diff --git a/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/001_DefaultWhite.material b/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/001_DefaultWhite.material index 8fe732cb09..2e4eee7f8e 100644 --- a/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/001_DefaultWhite.material +++ b/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/001_DefaultWhite.material @@ -1,6 +1,6 @@ { "description": "", - "materialType": "Materials\\Types\\StandardPBR.materialtype", + "materialType": "Materials/Types/StandardPBR.materialtype", "parentMaterial": "", "propertyLayoutVersion": 3 -} +} \ No newline at end of file diff --git a/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/002_BaseColorLerp.material b/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/002_BaseColorLerp.material index 8509e08d78..f8214e1b2e 100644 --- a/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/002_BaseColorLerp.material +++ b/Gems/Atom/TestData/TestData/Materials/StandardPbrTestCases/002_BaseColorLerp.material @@ -1,6 +1,6 @@ { "description": "", - "materialType": "Materials\\Types\\StandardPBR.materialtype", + "materialType": "Materials/Types/StandardPBR.materialtype", "parentMaterial": "", "propertyLayoutVersion": 3, "properties": { @@ -16,4 +16,4 @@ "textureMap": "TestData/Textures/TextureHaven/4k_castle_brick_02_red/4k_castle_brick_02_red_hp_bc.png" } } -} +} \ No newline at end of file diff --git a/Gems/Atom/TestData/TestData/Materials/Types/AutoBrick.materialtype b/Gems/Atom/TestData/TestData/Materials/Types/AutoBrick.materialtype index 0b62638c5a..00f11663f7 100644 --- a/Gems/Atom/TestData/TestData/Materials/Types/AutoBrick.materialtype +++ b/Gems/Atom/TestData/TestData/Materials/Types/AutoBrick.materialtype @@ -4,12 +4,12 @@ "version": 3, "groups": [ { - "id": "shape", + "name": "shape", "displayName": "Shape", "description": "Properties for configuring size, shape, and position of the bricks." }, { - "id": "appearance", + "name": "appearance", "displayName": "Appearance", "description": "Properties for configuring the appearance of the bricks and grout lines." } @@ -17,7 +17,7 @@ "properties": { "shape": [ { - "id": "brickWidth", + "name": "brickWidth", "displayName": "Brick Width", "description": "The width of each brick.", "type": "Float", @@ -27,11 +27,11 @@ "step": 0.001, "connection": { "type": "ShaderInput", - "id": "m_brickWidth" + "name": "m_brickWidth" } }, { - "id": "brickHeight", + "name": "brickHeight", "displayName": "Brick Height", "description": "The height of each brick.", "type": "Float", @@ -41,11 +41,11 @@ "step": 0.001, "connection": { "type": "ShaderInput", - "id": "m_brickHeight" + "name": "m_brickHeight" } }, { - "id": "brickOffset", + "name": "brickOffset", "displayName": "Offset", "description": "The offset of each stack of bricks as a percentage of brick width.", "type": "Float", @@ -54,11 +54,11 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_brickOffset" + "name": "m_brickOffset" } }, { - "id": "lineWidth", + "name": "lineWidth", "displayName": "Line Width", "description": "The width of the grout lines.", "type": "Float", @@ -68,11 +68,11 @@ "step": 0.0001, "connection": { "type": "ShaderInput", - "id": "m_lineWidth" + "name": "m_lineWidth" } }, { - "id": "lineDepth", + "name": "lineDepth", "displayName": "Line Depth", "description": "The depth of the grout lines.", "type": "Float", @@ -81,34 +81,34 @@ "softMax": 0.02, "connection": { "type": "ShaderInput", - "id": "m_lineDepth" + "name": "m_lineDepth" } } ], "appearance": [ { - "id": "noiseTexture", + "name": "noiseTexture", "type": "Image", "defaultValue": "TestData/Textures/noise512.png", "visibility": "Hidden", "connection": { "type": "ShaderInput", - "id": "m_noise" + "name": "m_noise" } }, { - "id": "brickColor", + "name": "brickColor", "displayName": "Brick Color", "description": "The color of the bricks.", "type": "Color", "defaultValue": [1.0,1.0,1.0], "connection": { "type": "ShaderInput", - "id": "m_brickColor" + "name": "m_brickColor" } }, { - "id": "brickColorNoise", + "name": "brickColorNoise", "displayName": "Brick Color Noise", "description": "Scale the variation of brick color.", "type": "Float", @@ -117,22 +117,22 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_brickNoiseFactor" + "name": "m_brickNoiseFactor" } }, { - "id": "lineColor", + "name": "lineColor", "displayName": "Line Color", "description": "The color of the grout lines.", "type": "Color", "defaultValue": [0.5,0.5,0.5], "connection": { "type": "ShaderInput", - "id": "m_lineColor" + "name": "m_lineColor" } }, { - "id": "lineColorNoise", + "name": "lineColorNoise", "displayName": "Line Color Noise", "description": "Scale the variation of grout line color.", "type": "Float", @@ -141,11 +141,11 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_lineNoiseFactor" + "name": "m_lineNoiseFactor" } }, { - "id": "brickColorBleed", + "name": "brickColorBleed", "displayName": "Brick Color Bleed", "description": "Distance into the grout line that the brick color will continue.", "type": "Float", @@ -154,11 +154,11 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_brickColorBleed" + "name": "m_brickColorBleed" } }, { - "id": "ao", + "name": "ao", "displayName": "Ambient Occlusion", "description": "The strength of baked ambient occlusion in the grout lines.", "type": "Float", @@ -167,7 +167,7 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_aoFactor" + "name": "m_aoFactor" } } ] diff --git a/Gems/Atom/TestData/TestData/Materials/Types/MinimalPBR.materialtype b/Gems/Atom/TestData/TestData/Materials/Types/MinimalPBR.materialtype index fb2b8523e1..81ebd63c28 100644 --- a/Gems/Atom/TestData/TestData/Materials/Types/MinimalPBR.materialtype +++ b/Gems/Atom/TestData/TestData/Materials/Types/MinimalPBR.materialtype @@ -4,24 +4,24 @@ "version": 3, "groups": [ { - "id": "settings", + "name": "settings", "displayName": "Settings" } ], "properties": { "settings": [ { - "id": "color", + "name": "color", "displayName": "Color", "type": "Color", "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", - "id": "m_baseColor" + "name": "m_baseColor" } }, { - "id": "metallic", + "name": "metallic", "displayName": "Metallic", "type": "Float", "defaultValue": 0.0, @@ -29,11 +29,11 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_metallic" + "name": "m_metallic" } }, { - "id": "roughness", + "name": "roughness", "displayName": "Roughness", "type": "Float", "defaultValue": 1.0, @@ -41,7 +41,7 @@ "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughness" + "name": "m_roughness" } } ] diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/DisplayVertexColor.material b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/DisplayVertexColor.material new file mode 100644 index 0000000000..104d675387 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/DisplayVertexColor.material @@ -0,0 +1,18 @@ +{ + "description": "", + "materialType": "Materials/Types/StandardMultilayerPBR.materialtype", + "parentMaterial": "", + "propertyLayoutVersion": 3, + "properties": { + "blend": { + "blendSource": "BlendMaskVertexColors", + "debugDrawMode": "FinalBlendWeights", + "enableLayer2": true, + "enableLayer3": true, + "textureMap": "" + }, + "parallax": { + "enable": false + } + } +} diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/novertexcolor.fbx b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/novertexcolor.fbx new file mode 100644 index 0000000000..abc518cf09 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/novertexcolor.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6d860c6fc3703914716a97910899eca2e66927688690646f697c6246ac310fb +size 317340 diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/sphere_5lods.fbx b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/sphere_5lods.fbx new file mode 100644 index 0000000000..de03622834 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/sphere_5lods.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91b8153f93e4773d872478fef40ff00c1b8d5f1ef13101cf62f81956e1c30107 +size 68800 diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/vertexcolor.fbx b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/vertexcolor.fbx new file mode 100644 index 0000000000..3bbbc29a33 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/vertexcolor.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cf646a0a977c2edc5ee2ab6351ef633f194ce60c59ea3cb8359f71648db668e +size 374492 diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocument.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocument.h index 565c9f00a3..bf18d36c2c 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocument.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocument.h @@ -32,10 +32,10 @@ namespace AtomToolsFramework // AtomToolsDocumentRequestBus::Handler implementation AZStd::string_view GetAbsolutePath() const override; AZStd::string_view GetRelativePath() const override; - const AZStd::any& GetPropertyValue(const AZ::Name& propertyFullName) const override; - const AtomToolsFramework::DynamicProperty& GetProperty(const AZ::Name& propertyFullName) const override; + const AZStd::any& GetPropertyValue(const AZ::Name& propertyId) const override; + const AtomToolsFramework::DynamicProperty& GetProperty(const AZ::Name& propertyId) const override; bool IsPropertyGroupVisible(const AZ::Name& propertyGroupFullName) const override; - void SetPropertyValue(const AZ::Name& propertyFullName, const AZStd::any& value) override; + void SetPropertyValue(const AZ::Name& propertyId, const AZStd::any& value) override; bool Open(AZStd::string_view loadPath) override; bool Reopen() override; bool Save() override; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocumentRequestBus.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocumentRequestBus.h index a8ef7852ea..6a21a8a2df 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocumentRequestBus.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocumentRequestBus.h @@ -10,6 +10,7 @@ #include #include #include +#include namespace AtomToolsFramework { diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/DynamicProperty/DynamicProperty.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/DynamicProperty/DynamicProperty.h index 9ee53680ae..68e5e38cbd 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/DynamicProperty/DynamicProperty.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/DynamicProperty/DynamicProperty.h @@ -42,8 +42,8 @@ namespace AtomToolsFramework AZ_CLASS_ALLOCATOR(DynamicPropertyConfig, AZ::SystemAllocator, 0); DynamicPropertyType m_dataType = DynamicPropertyType::Invalid; - AZ::Name m_id; - AZStd::string m_nameId; + AZ::Name m_id; //!< The full property ID, which will normally be "groupName.propertyName" + AZStd::string m_name; AZStd::string m_displayName; AZStd::string m_groupName; AZStd::string m_description; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h index cef3eada75..d641af697f 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h @@ -41,7 +41,9 @@ namespace AtomToolsFramework AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler = {}, QWidget* parent = {}, const AZ::u32 saveStateKey = {}, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}); + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}, + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction = {}, + int leafIndentSize = 16); void Refresh() override; void Rebuild() override; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorRequestBus.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorRequestBus.h index 900dc3535c..6e5ac6e463 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorRequestBus.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorRequestBus.h @@ -41,27 +41,27 @@ namespace AtomToolsFramework //! Add a group consisting of a collapsable header and widget virtual void AddGroup( - const AZStd::string& groupNameId, + const AZStd::string& groupName, const AZStd::string& groupDisplayName, const AZStd::string& groupDescription, QWidget* groupWidget) = 0; //! Sets the visibility of a specific property group. This impacts both the header and the widget. - virtual void SetGroupVisible(const AZStd::string& groupNameId, bool visible) = 0; + virtual void SetGroupVisible(const AZStd::string& groupName, bool visible) = 0; //! Returns whether a specific property is visible. //! Note this follows the same rules as QWidget::isVisible(), meaning a group could be not visible due to the widget's parents being not visible. - virtual bool IsGroupVisible(const AZStd::string& groupNameId) const = 0; + virtual bool IsGroupVisible(const AZStd::string& groupName) const = 0; //! Returns whether a specific property is explicitly hidden. //! Note this follows the same rules as QWidget::isHidden(), meaning a group that is hidden will not become visible automatically when the parent becomes visible. - virtual bool IsGroupHidden(const AZStd::string& groupNameId) const = 0; + virtual bool IsGroupHidden(const AZStd::string& groupName) const = 0; //! Calls Refresh for a specific InspectorGroupWidget, allowing for non-destructive UI changes - virtual void RefreshGroup(const AZStd::string& groupNameId) = 0; + virtual void RefreshGroup(const AZStd::string& groupName) = 0; //! Calls Rebuild for a specific InspectorGroupWidget, allowing for destructive UI changes - virtual void RebuildGroup(const AZStd::string& groupNameId) = 0; + virtual void RebuildGroup(const AZStd::string& groupName) = 0; //! Calls Refresh for all InspectorGroupWidget, allowing for non-destructive UI changes virtual void RefreshAll() = 0; @@ -70,13 +70,13 @@ namespace AtomToolsFramework virtual void RebuildAll() = 0; //! Expands a specific group - virtual void ExpandGroup(const AZStd::string& groupNameId) = 0; + virtual void ExpandGroup(const AZStd::string& groupName) = 0; //! Collapses a specific group - virtual void CollapseGroup(const AZStd::string& groupNameId) = 0; + virtual void CollapseGroup(const AZStd::string& groupName) = 0; //! Checks the expansion state of a specific group - virtual bool IsGroupExpanded(const AZStd::string& groupNameId) const = 0; + virtual bool IsGroupExpanded(const AZStd::string& groupName) const = 0; //! Expands all groups and headers virtual void ExpandAll() = 0; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorWidget.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorWidget.h index adcd94ca10..7e655d978e 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorWidget.h @@ -52,33 +52,33 @@ namespace AtomToolsFramework void AddGroupsEnd() override; void AddGroup( - const AZStd::string& groupNameId, + const AZStd::string& groupName, const AZStd::string& groupDisplayName, const AZStd::string& groupDescription, QWidget* groupWidget) override; - void SetGroupVisible(const AZStd::string& groupNameId, bool visible) override; - bool IsGroupVisible(const AZStd::string& groupNameId) const override; - bool IsGroupHidden(const AZStd::string& groupNameId) const override; + void SetGroupVisible(const AZStd::string& groupName, bool visible) override; + bool IsGroupVisible(const AZStd::string& groupName) const override; + bool IsGroupHidden(const AZStd::string& groupName) const override; - void RefreshGroup(const AZStd::string& groupNameId) override; - void RebuildGroup(const AZStd::string& groupNameId) override; + void RefreshGroup(const AZStd::string& groupName) override; + void RebuildGroup(const AZStd::string& groupName) override; void RefreshAll() override; void RebuildAll() override; - void ExpandGroup(const AZStd::string& groupNameId) override; - void CollapseGroup(const AZStd::string& groupNameId) override; - bool IsGroupExpanded(const AZStd::string& groupNameId) const override; + void ExpandGroup(const AZStd::string& groupName) override; + void CollapseGroup(const AZStd::string& groupName) override; + bool IsGroupExpanded(const AZStd::string& groupName) const override; void ExpandAll() override; void CollapseAll() override; protected: - virtual bool ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const; - virtual void OnGroupExpanded(const AZStd::string& groupNameId); - virtual void OnGroupCollapsed(const AZStd::string& groupNameId); - virtual void OnHeaderClicked(const AZStd::string& groupNameId, QMouseEvent* event); + virtual bool ShouldGroupAutoExpanded(const AZStd::string& groupName) const; + virtual void OnGroupExpanded(const AZStd::string& groupName); + virtual void OnGroupCollapsed(const AZStd::string& groupName); + virtual void OnHeaderClicked(const AZStd::string& groupName, QMouseEvent* event); private: QScopedPointer m_ui; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraController.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraController.h index 4956fbc1dc..1200cb3d79 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraController.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraController.h @@ -10,7 +10,6 @@ #include #include -#include #include #include @@ -103,7 +102,6 @@ namespace AtomToolsFramework class ModularViewportCameraControllerInstance final : public AzFramework::MultiViewportControllerInstanceInterface , public ModularViewportCameraControllerRequestBus::Handler - , private AzFramework::ViewportDebugDisplayEventBus::Handler { public: explicit ModularViewportCameraControllerInstance(AzFramework::ViewportId viewportId, ModularViewportCameraController* controller); @@ -114,16 +112,12 @@ namespace AtomToolsFramework void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override; // ModularViewportCameraControllerRequestBus overrides ... - void InterpolateToTransform(const AZ::Transform& worldFromLocal, float lookAtDistance) override; - AZStd::optional LookAtAfterInterpolation() const override; + void InterpolateToTransform(const AZ::Transform& worldFromLocal) override; AZ::Transform GetReferenceFrame() const override; void SetReferenceFrame(const AZ::Transform& worldFromLocal) override; void ClearReferenceFrame() override; private: - // AzFramework::ViewportDebugDisplayEventBus overrides ... - void DisplayViewport(const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) override; - //! Update the reference frame after a change has been made to the camera //! view without updating the internal camera via user input. void RefreshReferenceFrame(); @@ -154,9 +148,8 @@ namespace AtomToolsFramework CameraAnimation m_cameraAnimation; //!< Camera animation state (used during CameraMode::Animation). CameraMode m_cameraMode = CameraMode::Control; //!< The current mode the camera is operating in. - AZStd::optional m_lookAtAfterInterpolation; //!< The look at point after an interpolation has finished. - //!< Will be cleared when the view changes (camera looks away). - AZ::Transform m_referenceFrameOverride = AZ::Transform::CreateIdentity(); //!< + //! An additional reference frame the camera can operate in (identity has no effect). + AZ::Transform m_referenceFrameOverride = AZ::Transform::CreateIdentity(); //! Flag to prevent circular updates of the camera transform (while the viewport transform is being updated internally). bool m_updatingTransformInternally = false; //! Listen for camera view changes outside of the camera controller. diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraControllerRequestBus.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraControllerRequestBus.h index 388d24164a..ab397692e4 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraControllerRequestBus.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/ModularViewportCameraControllerRequestBus.h @@ -29,11 +29,7 @@ namespace AtomToolsFramework //! Begin a smooth transition of the camera to the requested transform. //! @param worldFromLocal The transform of where the camera should end up. - //! @param lookAtDistance The distance between the camera transform and the imagined look at point. - virtual void InterpolateToTransform(const AZ::Transform& worldFromLocal, float lookAtDistance) = 0; - - //! Look at point after an interpolation has finished and no translation has occurred. - virtual AZStd::optional LookAtAfterInterpolation() const = 0; + virtual void InterpolateToTransform(const AZ::Transform& worldFromLocal) = 0; //! Return the current reference frame. //! @note If a reference frame has not been set or a frame has been cleared, this is just the identity. diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h index 318a49027a..623d759c9f 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h @@ -10,7 +10,6 @@ #include #include -#include #include #include #include @@ -22,8 +21,6 @@ #include #include #include -#include -#include namespace AtomToolsFramework { @@ -38,8 +35,6 @@ namespace AtomToolsFramework , public AzFramework::WindowRequestBus::Handler , protected AzFramework::InputChannelEventListener , protected AZ::TickBus::Handler - , protected AZ::Render::Bootstrap::NotificationBus::Handler - , protected AtomToolsFramework::RenderViewportWidgetNotificationBus::Handler { public: //! Creates a RenderViewportWidget. @@ -126,7 +121,6 @@ namespace AtomToolsFramework // AZ::TickBus::Handler ... void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; - int GetTickOrder() override; // QWidget ... void resizeEvent(QResizeEvent *event) override; @@ -134,21 +128,9 @@ namespace AtomToolsFramework void enterEvent(QEvent* event) override; void leaveEvent(QEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; - void focusInEvent(QFocusEvent* event) override; - - // AZ::Render::Bootstrap::NotificationBus::Handler ... - void OnFrameRateLimitChanged(float fpsLimit) override; - - // AtomToolsFramework::RenderViewportWidgetNotificationBus::Handler ... - void OnInactiveViewportFrameRateChanged(float fpsLimit) override; private: - AzFramework::NativeWindowHandle GetNativeWindowHandle() const; - void UpdateFrameRate(); - - void SetScreen(QScreen* screen); void SendWindowResizeEvent(); - void NotifyUpdateRefreshRate(); // The underlying ViewportContext, our entry-point to the Atom RPI. AZ::RPI::ViewportContextPtr m_viewportContext; @@ -169,11 +151,5 @@ namespace AtomToolsFramework AZ::ScriptTimePoint m_time; // Maps our internal Qt events into AzFramework InputChannels for our ViewportControllerList. AzToolsFramework::QtEventToAzInputMapper* m_inputChannelMapper = nullptr; - // Stores our current screen, used for tracking the current refresh rate. - QScreen* m_screen = nullptr; - // Stores the last RenderViewportWidget that has received user focus. - // This is used for optional framerate throtting for "inactive" viewports via the - // ed_inactive_viewport_fps_limit CVAR. - AZ::EnvironmentVariable m_lastFocusedViewport; }; } //namespace AtomToolsFramework diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidgetNotificationBus.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidgetNotificationBus.h deleted file mode 100644 index 0563bd6bf2..0000000000 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidgetNotificationBus.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include - -namespace AtomToolsFramework -{ - //! Provides an interface for providing notifications specific to RenderViewportWidget. - //! @note Most behaviors in RenderViewportWidget are handled by its underyling - //! ViewportContext, this bus is specifically for functionality exclusive to the - //! Qt layer provided by RenderViewportWidget. - class RenderViewportWidgetNotifications : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - - //! Triggered when the idle frame rate limit for inactive viewports changed. - //! Controlled by the ed_inactive_viewport_fps_limit CVAR. - //! Active viewports are controlled by the r_fps_limit CVAR. - virtual void OnInactiveViewportFrameRateChanged([[maybe_unused]]float fpsLimit){} - - protected: - ~RenderViewportWidgetNotifications() = default; - }; - - using RenderViewportWidgetNotificationBus = AZ::EBus; -} // namespace AtomToolsFramework diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp index 13b9a2ba27..3fae2ee7a3 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp @@ -173,7 +173,7 @@ namespace AtomToolsFramework AzToolsFramework::AssetBrowser::AssetDatabaseLocationNotificationBus::Broadcast( &AzToolsFramework::AssetBrowser::AssetDatabaseLocationNotifications::OnDatabaseInitialized); - AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@assets@/assetcatalog.xml"); + AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@products@/assetcatalog.xml"); if (!AZ::RPI::RPISystemInterface::Get()->IsInitialized()) { @@ -289,7 +289,7 @@ namespace AtomToolsFramework ExitMainLoop(); } } - + void AtomToolsApplication::SaveSettings() { if (m_activatedLocalUserSettings) @@ -378,7 +378,7 @@ namespace AtomToolsFramework ExitMainLoop(); } } - + bool AtomToolsApplication::LaunchLocalServer() { // Determine if this is the first launch of the tool by attempting to connect to a running server diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Document/AtomToolsDocument.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Document/AtomToolsDocument.cpp index 336737f419..1e2c685c3c 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Document/AtomToolsDocument.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Document/AtomToolsDocument.cpp @@ -38,16 +38,16 @@ namespace AtomToolsFramework return m_relativePath; } - const AZStd::any& AtomToolsDocument::GetPropertyValue([[maybe_unused]] const AZ::Name& propertyFullName) const + const AZStd::any& AtomToolsDocument::GetPropertyValue([[maybe_unused]] const AZ::Name& propertyId) const { - AZ_UNUSED(propertyFullName); + AZ_UNUSED(propertyId); AZ_Error("AtomToolsDocument", false, "%s not implemented.", __FUNCTION__); return m_invalidValue; } - const AtomToolsFramework::DynamicProperty& AtomToolsDocument::GetProperty([[maybe_unused]] const AZ::Name& propertyFullName) const + const AtomToolsFramework::DynamicProperty& AtomToolsDocument::GetProperty([[maybe_unused]] const AZ::Name& propertyId) const { - AZ_UNUSED(propertyFullName); + AZ_UNUSED(propertyId); AZ_Error("AtomToolsDocument", false, "%s not implemented.", __FUNCTION__); return m_invalidProperty; } @@ -59,9 +59,9 @@ namespace AtomToolsFramework return false; } - void AtomToolsDocument::SetPropertyValue([[maybe_unused]] const AZ::Name& propertyFullName, [[maybe_unused]] const AZStd::any& value) + void AtomToolsDocument::SetPropertyValue([[maybe_unused]] const AZ::Name& propertyId, [[maybe_unused]] const AZStd::any& value) { - AZ_UNUSED(propertyFullName); + AZ_UNUSED(propertyId); AZ_UNUSED(value); AZ_Error("AtomToolsDocument", false, "%s not implemented.", __FUNCTION__); } diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp index d08728aad1..2054858726 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp @@ -192,7 +192,7 @@ namespace AtomToolsFramework AZStd::string DynamicProperty::GetDisplayName() const { - return !m_config.m_displayName.empty() ? m_config.m_displayName : m_config.m_nameId; + return !m_config.m_displayName.empty() ? m_config.m_displayName : m_config.m_name; } AZStd::string DynamicProperty::GetGroupName() const diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp index e1f8573bb3..6b9aee17f7 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace AtomToolsFramework { @@ -19,7 +20,9 @@ namespace AtomToolsFramework AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler, QWidget* parent, const AZ::u32 saveStateKey, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction) + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction, + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction, + int leafIndentSize) : InspectorGroupWidget(parent) { AZ::SerializeContext* context = nullptr; @@ -32,8 +35,10 @@ namespace AtomToolsFramework m_propertyEditor = new AzToolsFramework::ReflectedPropertyEditor(this); m_propertyEditor->SetHideRootProperties(true); - m_propertyEditor->SetAutoResizeLabels(true); + m_propertyEditor->SetAutoResizeLabels(false); + m_propertyEditor->SetLeafIndentation(leafIndentSize); m_propertyEditor->SetValueComparisonFunction(valueComparisonFunction); + m_propertyEditor->SetIndicatorQueryFunction(indicatorQueryFunction); m_propertyEditor->SetSavedStateKey(saveStateKey); m_propertyEditor->Setup(context, instanceNotificationHandler, false); m_propertyEditor->AddInstance(instance, instanceClassId, nullptr, instanceToCompare); diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.cpp index 5eda93ca59..fbe188364a 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.cpp @@ -31,20 +31,26 @@ namespace AtomToolsFramework void InspectorWidget::AddHeading(QWidget* headingWidget) { - headingWidget->setParent(m_ui->m_headingSection); - m_ui->m_headingSectionLayout->addWidget(headingWidget); + headingWidget->setParent(this); + m_ui->m_headingContentsLayout->addWidget(headingWidget); } void InspectorWidget::ClearHeading() { - qDeleteAll(m_ui->m_headingSection->findChildren(QString(), Qt::FindDirectChildrenOnly)); - qDeleteAll(m_ui->m_headingSectionLayout->children()); + while (QLayoutItem* child = m_ui->m_headingContentsLayout->takeAt(0)) + { + delete child->widget(); + delete child; + } } void InspectorWidget::Reset() { - qDeleteAll(m_ui->m_groupContents->findChildren(QString(), Qt::FindDirectChildrenOnly)); - qDeleteAll(m_ui->m_groupContentsLayout->children()); + while (QLayoutItem* child = m_ui->m_groupContentsLayout->takeAt(0)) + { + delete child->widget(); + delete child; + } m_groups.clear(); } @@ -66,7 +72,7 @@ namespace AtomToolsFramework } void InspectorWidget::AddGroup( - const AZStd::string& groupNameId, + const AZStd::string& groupName, const AZStd::string& groupDisplayName, const AZStd::string& groupDescription, QWidget* groupWidget) @@ -76,31 +82,31 @@ namespace AtomToolsFramework groupHeader->setToolTip(groupDescription.c_str()); m_ui->m_groupContentsLayout->addWidget(groupHeader); - groupWidget->setObjectName(groupNameId.c_str()); + groupWidget->setObjectName(groupName.c_str()); groupWidget->setParent(m_ui->m_groupContents); m_ui->m_groupContentsLayout->addWidget(groupWidget); - m_groups[groupNameId] = {groupHeader, groupWidget}; + m_groups[groupName] = {groupHeader, groupWidget}; - connect(groupHeader, &InspectorGroupHeaderWidget::clicked, this, [this, groupNameId](QMouseEvent* event) { - OnHeaderClicked(groupNameId, event); + connect(groupHeader, &InspectorGroupHeaderWidget::clicked, this, [this, groupName](QMouseEvent* event) { + OnHeaderClicked(groupName, event); }); - connect(groupHeader, &InspectorGroupHeaderWidget::expanded, this, [this, groupNameId]() { OnGroupExpanded(groupNameId); }); - connect(groupHeader, &InspectorGroupHeaderWidget::collapsed, this, [this, groupNameId]() { OnGroupCollapsed(groupNameId); }); + connect(groupHeader, &InspectorGroupHeaderWidget::expanded, this, [this, groupName]() { OnGroupExpanded(groupName); }); + connect(groupHeader, &InspectorGroupHeaderWidget::collapsed, this, [this, groupName]() { OnGroupCollapsed(groupName); }); - if (ShouldGroupAutoExpanded(groupNameId)) + if (ShouldGroupAutoExpanded(groupName)) { - ExpandGroup(groupNameId); + ExpandGroup(groupName); } else { - CollapseGroup(groupNameId); + CollapseGroup(groupName); } } - void InspectorWidget::SetGroupVisible(const AZStd::string& groupNameId, bool visible) + void InspectorWidget::SetGroupVisible(const AZStd::string& groupName, bool visible) { - auto groupItr = m_groups.find(groupNameId); + auto groupItr = m_groups.find(groupName); if (groupItr != m_groups.end()) { groupItr->second.m_header->setVisible(visible); @@ -108,29 +114,29 @@ namespace AtomToolsFramework } } - bool InspectorWidget::IsGroupVisible(const AZStd::string& groupNameId) const + bool InspectorWidget::IsGroupVisible(const AZStd::string& groupName) const { - auto groupItr = m_groups.find(groupNameId); + auto groupItr = m_groups.find(groupName); return groupItr != m_groups.end() ? groupItr->second.m_header->isVisible() : false; } - bool InspectorWidget::IsGroupHidden(const AZStd::string& groupNameId) const + bool InspectorWidget::IsGroupHidden(const AZStd::string& groupName) const { - auto groupItr = m_groups.find(groupNameId); + auto groupItr = m_groups.find(groupName); return groupItr != m_groups.end() ? groupItr->second.m_header->isHidden() : false; } - void InspectorWidget::RefreshGroup(const AZStd::string& groupNameId) + void InspectorWidget::RefreshGroup(const AZStd::string& groupName) { - for (auto groupWidget : m_ui->m_groupContents->findChildren(groupNameId.c_str())) + for (auto groupWidget : m_ui->m_groupContents->findChildren(groupName.c_str())) { groupWidget->Refresh(); } } - void InspectorWidget::RebuildGroup(const AZStd::string& groupNameId) + void InspectorWidget::RebuildGroup(const AZStd::string& groupName) { - for (auto groupWidget : m_ui->m_groupContents->findChildren(groupNameId.c_str())) + for (auto groupWidget : m_ui->m_groupContents->findChildren(groupName.c_str())) { groupWidget->Rebuild(); } @@ -152,9 +158,9 @@ namespace AtomToolsFramework } } - void InspectorWidget::ExpandGroup(const AZStd::string& groupNameId) + void InspectorWidget::ExpandGroup(const AZStd::string& groupName) { - auto groupItr = m_groups.find(groupNameId); + auto groupItr = m_groups.find(groupName); if (groupItr != m_groups.end()) { groupItr->second.m_header->SetExpanded(true); @@ -162,9 +168,9 @@ namespace AtomToolsFramework } } - void InspectorWidget::CollapseGroup(const AZStd::string& groupNameId) + void InspectorWidget::CollapseGroup(const AZStd::string& groupName) { - auto groupItr = m_groups.find(groupNameId); + auto groupItr = m_groups.find(groupName); if (groupItr != m_groups.end()) { groupItr->second.m_header->SetExpanded(false); @@ -172,9 +178,9 @@ namespace AtomToolsFramework } } - bool InspectorWidget::IsGroupExpanded(const AZStd::string& groupNameId) const + bool InspectorWidget::IsGroupExpanded(const AZStd::string& groupName) const { - auto groupItr = m_groups.find(groupNameId); + auto groupItr = m_groups.find(groupName); return groupItr != m_groups.end() ? groupItr->second.m_header->IsExpanded() : false; } @@ -196,33 +202,33 @@ namespace AtomToolsFramework } } - bool InspectorWidget::ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const + bool InspectorWidget::ShouldGroupAutoExpanded(const AZStd::string& groupName) const { - AZ_UNUSED(groupNameId); + AZ_UNUSED(groupName); return true; } - void InspectorWidget::OnGroupExpanded(const AZStd::string& groupNameId) + void InspectorWidget::OnGroupExpanded(const AZStd::string& groupName) { - AZ_UNUSED(groupNameId); + AZ_UNUSED(groupName); } - void InspectorWidget::OnGroupCollapsed(const AZStd::string& groupNameId) + void InspectorWidget::OnGroupCollapsed(const AZStd::string& groupName) { - AZ_UNUSED(groupNameId); + AZ_UNUSED(groupName); } - void InspectorWidget::OnHeaderClicked(const AZStd::string& groupNameId, QMouseEvent* event) + void InspectorWidget::OnHeaderClicked(const AZStd::string& groupName, QMouseEvent* event) { if (event->button() == Qt::MouseButton::LeftButton) { - if (!IsGroupExpanded(groupNameId)) + if (!IsGroupExpanded(groupName)) { - ExpandGroup(groupNameId); + ExpandGroup(groupName); } else { - CollapseGroup(groupNameId); + CollapseGroup(groupName); } return; } @@ -230,8 +236,8 @@ namespace AtomToolsFramework if (event->button() == Qt::MouseButton::RightButton) { QMenu menu; - menu.addAction("Expand", [this, groupNameId]() { ExpandGroup(groupNameId); })->setEnabled(!IsGroupExpanded(groupNameId)); - menu.addAction("Collapse", [this, groupNameId]() { CollapseGroup(groupNameId); })->setEnabled(IsGroupExpanded(groupNameId)); + menu.addAction("Expand", [this, groupName]() { ExpandGroup(groupName); })->setEnabled(!IsGroupExpanded(groupName)); + menu.addAction("Collapse", [this, groupName]() { CollapseGroup(groupName); })->setEnabled(IsGroupExpanded(groupName)); menu.addAction("Expand All", [this]() { ExpandAll(); }); menu.addAction("Collapse All", [this]() { CollapseAll(); }); menu.exec(event->globalPos()); diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.ui b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.ui index 13f9c9e41c..c197ee172e 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.ui +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorWidget.ui @@ -30,104 +30,85 @@ 0 - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::ScrollBarAsNeeded - - 0 + + true - - 0 - - - 0 - - - 0 - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::ScrollBarAsNeeded + + + + 0 + 0 + 679 + 767 + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 - - true + + 0 - - - - 0 - 0 - 683 - 763 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - -
+ + + + + diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp index 641cf63d04..3f8a173918 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp @@ -74,7 +74,7 @@ namespace AtomToolsFramework void ConvertToPropertyConfig(AtomToolsFramework::DynamicPropertyConfig& propertyConfig, const AZ::RPI::MaterialTypeSourceData::PropertyDefinition& propertyDefinition) { propertyConfig.m_dataType = ConvertToEditableType(propertyDefinition.m_dataType); - propertyConfig.m_nameId = propertyDefinition.m_nameId; + propertyConfig.m_name = propertyDefinition.m_name; propertyConfig.m_displayName = propertyDefinition.m_displayName; propertyConfig.m_description = propertyDefinition.m_description; propertyConfig.m_defaultValue = ConvertToEditableType(propertyDefinition.m_value); @@ -150,6 +150,7 @@ namespace AtomToolsFramework ComparePropertyValues(valueA, valueB) || ComparePropertyValues(valueA, valueB) || ComparePropertyValues(valueA, valueB) || + ComparePropertyValues>(valueA, valueB) || ComparePropertyValues>(valueA, valueB) || ComparePropertyValues>(valueA, valueB) || ComparePropertyValues>(valueA, valueB) || diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp index bcc9a08f77..a92bfdbcdb 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp @@ -21,15 +21,6 @@ namespace AtomToolsFramework { - AZ_CVAR( - AZ::Color, - ed_cameraSystemOrbitPointColor, - AZ::Color::CreateFromRgba(255, 255, 255, 255), - nullptr, - AZ::ConsoleFunctorFlags::Null, - ""); - AZ_CVAR(float, ed_cameraSystemOrbitPointSize, 0.1f, nullptr, AZ::ConsoleFunctorFlags::Null, ""); - AZ::Transform TransformFromMatrix4x4(const AZ::Matrix4x4& matrix) { const auto rotation = AZ::Matrix3x3::CreateFromMatrix4x4(matrix); @@ -200,14 +191,12 @@ namespace AtomToolsFramework m_cameraViewMatrixChangeHandler = AZ::RPI::ViewportContext::MatrixChangedEvent::Handler(handleCameraChange); m_modularCameraViewportContext->ConnectViewMatrixChangedHandler(m_cameraViewMatrixChangeHandler); - AzFramework::ViewportDebugDisplayEventBus::Handler::BusConnect(AzToolsFramework::GetEntityContextId()); ModularViewportCameraControllerRequestBus::Handler::BusConnect(viewportId); } ModularViewportCameraControllerInstance::~ModularViewportCameraControllerInstance() { ModularViewportCameraControllerRequestBus::Handler::BusDisconnect(); - AzFramework::ViewportDebugDisplayEventBus::Handler::BusDisconnect(); } bool ModularViewportCameraControllerInstance::HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) @@ -238,19 +227,6 @@ namespace AtomToolsFramework { m_targetCamera = m_cameraSystem.StepCamera(m_targetCamera, event.m_deltaTime.count()); m_camera = AzFramework::SmoothCamera(m_camera, m_targetCamera, m_cameraProps, event.m_deltaTime.count()); - - // if there has been an interpolation, only clear the look at point if it is no longer - // centered in the view (the camera has looked away from it) - if (m_lookAtAfterInterpolation.has_value()) - { - if (const float lookDirection = - (*m_lookAtAfterInterpolation - m_camera.Translation()).GetNormalized().Dot(m_camera.Transform().GetBasisY()); - !AZ::IsCloseMag(lookDirection, 1.0f, 0.001f)) - { - m_lookAtAfterInterpolation = {}; - } - } - m_modularCameraViewportContext->SetCameraTransform(m_referenceFrameOverride * m_camera.Transform()); } else if (m_cameraMode == CameraMode::Animation) @@ -272,7 +248,8 @@ namespace AtomToolsFramework const AZ::Vector3 eulerAngles = AzFramework::EulerAngles(AZ::Matrix3x3::CreateFromTransform(current)); m_camera.m_pitch = eulerAngles.GetX(); m_camera.m_yaw = eulerAngles.GetZ(); - m_camera.m_lookAt = current.GetTranslation(); + m_camera.m_pivot = current.GetTranslation(); + m_camera.m_offset = AZ::Vector3::CreateZero(); m_targetCamera = m_camera; m_modularCameraViewportContext->SetCameraTransform(current); @@ -287,27 +264,10 @@ namespace AtomToolsFramework m_updatingTransformInternally = false; } - void ModularViewportCameraControllerInstance::DisplayViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) - { - if (const float alpha = AZStd::min(-m_camera.m_lookDist / 5.0f, 1.0f); alpha > AZ::Constants::FloatEpsilon) - { - const AZ::Color orbitPointColor = ed_cameraSystemOrbitPointColor; - debugDisplay.SetColor(orbitPointColor.GetR(), orbitPointColor.GetG(), orbitPointColor.GetB(), alpha); - debugDisplay.DrawWireSphere(m_camera.m_lookAt, ed_cameraSystemOrbitPointSize); - } - } - - void ModularViewportCameraControllerInstance::InterpolateToTransform(const AZ::Transform& worldFromLocal, const float lookAtDistance) + void ModularViewportCameraControllerInstance::InterpolateToTransform(const AZ::Transform& worldFromLocal) { m_cameraMode = CameraMode::Animation; m_cameraAnimation = CameraAnimation{ m_referenceFrameOverride * m_camera.Transform(), worldFromLocal, 0.0f }; - m_lookAtAfterInterpolation = worldFromLocal.GetTranslation() + worldFromLocal.GetBasisY() * lookAtDistance; - } - - AZStd::optional ModularViewportCameraControllerInstance::LookAtAfterInterpolation() const - { - return m_lookAtAfterInterpolation; } AZ::Transform ModularViewportCameraControllerInstance::GetReferenceFrame() const @@ -325,8 +285,8 @@ namespace AtomToolsFramework m_referenceFrameOverride = worldFromLocal; m_targetCamera.m_pitch = 0.0f; m_targetCamera.m_yaw = 0.0f; - m_targetCamera.m_lookAt = AZ::Vector3::CreateZero(); - m_targetCamera.m_lookDist = 0.0f; + m_targetCamera.m_offset = AZ::Vector3::CreateZero(); + m_targetCamera.m_pivot = AZ::Vector3::CreateZero(); m_camera = m_targetCamera; } diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp index 2a15041e20..7192afebf7 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp @@ -6,42 +6,23 @@ * */ -#include -#include -#include +#include #include #include -#include -#include -#include +#include #include #include #include #include +#include +#include +#include #include -#include #include -#include -#include -#include +#include #include - -static void OnInactiveViewportFrameRateChanged(const float& fpsLimit) -{ - AtomToolsFramework::RenderViewportWidgetNotificationBus::Broadcast( - &AtomToolsFramework::RenderViewportWidgetNotificationBus::Events::OnInactiveViewportFrameRateChanged, fpsLimit); -} - -AZ_CVAR( - float, - ed_inactive_viewport_fps_limit, - 0, - OnInactiveViewportFrameRateChanged, - AZ::ConsoleFunctorFlags::Null, - "The maximum framerate to render viewports that don't have focus at"); - -static constexpr const char* LastFocusedViewportVariableName = "AtomToolsFramework::RenderViewportWidget::LastFocusedViewport"; +#include namespace AtomToolsFramework { @@ -49,12 +30,6 @@ namespace AtomToolsFramework : QWidget(parent) , AzFramework::InputChannelEventListener(AzFramework::InputChannelEventListener::GetPriorityDefault()) { - m_lastFocusedViewport = AZ::Environment::FindVariable(LastFocusedViewportVariableName); - if (!m_lastFocusedViewport) - { - m_lastFocusedViewport = AZ::Environment::CreateVariable(LastFocusedViewportVariableName, nullptr); - } - if (shouldInitializeViewportContext) { InitializeViewportContext(); @@ -63,24 +38,13 @@ namespace AtomToolsFramework setUpdatesEnabled(false); setFocusPolicy(Qt::FocusPolicy::WheelFocus); setMouseTracking(true); - - // Wait a frame for our window handle to be constructed, then wire up our screen change signals. - QTimer::singleShot( - 0, - [this]() - { - QObject::connect(windowHandle(), &QWindow::screenChanged, this, &RenderViewportWidget::SetScreen); - }); - SetScreen(screen()); } bool RenderViewportWidget::InitializeViewportContext(AzFramework::ViewportId id) { if (m_viewportContext != nullptr) { - AZ_Assert( - id == AzFramework::InvalidViewportId || m_viewportContext->GetId() == id, - "Attempted to reinitialize RenderViewportWidget with a different ID"); + AZ_Assert(id == AzFramework::InvalidViewportId || m_viewportContext->GetId() == id, "Attempted to reinitialize RenderViewportWidget with a different ID"); return true; } @@ -95,7 +59,7 @@ namespace AtomToolsFramework // Before we do anything else, we must create a ViewportContext which will give us a ViewportId if we didn't manually specify one. AZ::RPI::ViewportContextRequestsInterface::CreationParameters params; params.device = AZ::RHI::RHISystemInterface::Get()->GetDevice(); - params.windowHandle = GetNativeWindowHandle(); + params.windowHandle = reinterpret_cast(winId()); params.id = id; AzFramework::WindowRequestBus::Handler::BusConnect(params.windowHandle); m_viewportContext = viewportContextManager->CreateViewportContext(AZ::Name(), params); @@ -116,46 +80,29 @@ namespace AtomToolsFramework AzFramework::InputChannelEventListener::Connect(); AZ::TickBus::Handler::BusConnect(); AzFramework::WindowRequestBus::Handler::BusConnect(params.windowHandle); - AZ::Render::Bootstrap::NotificationBus::Handler::BusConnect(); - AtomToolsFramework::RenderViewportWidgetNotificationBus::Handler::BusConnect(); m_inputChannelMapper = new AzToolsFramework::QtEventToAzInputMapper(this, id); // Forward input events to our controller list. - QObject::connect( - m_inputChannelMapper, &AzToolsFramework::QtEventToAzInputMapper::InputChannelUpdated, this, + QObject::connect(m_inputChannelMapper, &AzToolsFramework::QtEventToAzInputMapper::InputChannelUpdated, this, [this](const AzFramework::InputChannel* inputChannel, QEvent* event) + { + AzFramework::NativeWindowHandle windowId = reinterpret_cast(winId()); + if (m_controllerList->HandleInputChannelEvent(AzFramework::ViewportControllerInputEvent{GetId(), windowId, *inputChannel})) { - const AzFramework::NativeWindowHandle windowId = GetNativeWindowHandle(); - if (m_controllerList->HandleInputChannelEvent( - AzFramework::ViewportControllerInputEvent{ GetId(), windowId, *inputChannel })) + // If the controller handled the input event, mark the event as accepted so it doesn't continue to propagate. + if (event) { - // If the controller handled the input event, mark the event as accepted so it doesn't continue to propagate. - if (event) - { - event->setAccepted(true); - } + event->setAccepted(true); } - }); - - // Update our target frame rate. If we're the only viewport, become active. - if (m_lastFocusedViewport.Get() == nullptr) - { - m_lastFocusedViewport.Set(this); - } - UpdateFrameRate(); - + } + }); return true; } RenderViewportWidget::~RenderViewportWidget() { - if (m_lastFocusedViewport.Get() == this) - { - m_lastFocusedViewport.Set(nullptr); - } - AzFramework::WindowRequestBus::Handler::BusDisconnect(); AZ::TickBus::Handler::BusDisconnect(); AzFramework::InputChannelEventListener::Disconnect(); @@ -234,22 +181,17 @@ namespace AtomToolsFramework bool shouldConsumeEvent = true; - const bool eventHandled = m_controllerList->HandleInputChannelEvent({ GetId(), GetNativeWindowHandle(), inputChannel }); + AzFramework::NativeWindowHandle windowId = reinterpret_cast(winId()); + const bool eventHandled = m_controllerList->HandleInputChannelEvent({GetId(), windowId, inputChannel}); - // If our controllers handled the event and it's one we can safely consume (i.e. it's not an Ended event that other viewports might - // need), consume it. + // If our controllers handled the event and it's one we can safely consume (i.e. it's not an Ended event that other viewports might need), consume it. return eventHandled && shouldConsumeEvent; } - void RenderViewportWidget::OnTick([[maybe_unused]] float deltaTime, AZ::ScriptTimePoint time) + void RenderViewportWidget::OnTick([[maybe_unused]]float deltaTime, AZ::ScriptTimePoint time) { m_time = time; - m_controllerList->UpdateViewport({ GetId(), AzFramework::FloatSeconds(deltaTime), m_time }); - } - - int RenderViewportWidget::GetTickOrder() - { - return AZ::ComponentTickBus::TICK_PRE_RENDER; + m_controllerList->UpdateViewport({GetId(), AzFramework::FloatSeconds(deltaTime), m_time}); } void RenderViewportWidget::resizeEvent([[maybe_unused]] QResizeEvent* event) @@ -277,75 +219,6 @@ namespace AtomToolsFramework m_mousePosition = event->localPos(); } - void RenderViewportWidget::focusInEvent([[maybe_unused]] QFocusEvent* event) - { - RenderViewportWidget* lastFocusedViewport = m_lastFocusedViewport.Get(); - if (lastFocusedViewport == this) - { - return; - } - - RenderViewportWidget* previousFocusWidget = lastFocusedViewport; - m_lastFocusedViewport.Set(this); - - // Ensure this viewport and whatever viewport last had focus (if any) respect - // the active / inactive viewport frame rate settings. - UpdateFrameRate(); - if (previousFocusWidget != nullptr) - { - previousFocusWidget->UpdateFrameRate(); - } - } - - void RenderViewportWidget::OnFrameRateLimitChanged([[maybe_unused]] float fpsLimit) - { - UpdateFrameRate(); - } - - void RenderViewportWidget::OnInactiveViewportFrameRateChanged([[maybe_unused]] float fpsLimit) - { - UpdateFrameRate(); - } - - AzFramework::NativeWindowHandle RenderViewportWidget::GetNativeWindowHandle() const - { - return reinterpret_cast(winId()); - } - - void RenderViewportWidget::UpdateFrameRate() - { - if (ed_inactive_viewport_fps_limit > 0.f && m_lastFocusedViewport.Get() != this) - { - m_viewportContext->SetFpsLimit(ed_inactive_viewport_fps_limit); - } - else - { - float fpsLimit = 0.f; - AZ::Render::Bootstrap::RequestBus::BroadcastResult(fpsLimit, &AZ::Render::Bootstrap::RequestBus::Events::GetFrameRateLimit); - m_viewportContext->SetFpsLimit(fpsLimit); - } - } - - void RenderViewportWidget::SetScreen(QScreen* screen) - { - if (m_screen != screen) - { - if (m_screen) - { - QObject::disconnect(m_screen, &QScreen::refreshRateChanged, this, &RenderViewportWidget::NotifyUpdateRefreshRate); - } - - if (screen) - { - QObject::connect(m_screen, &QScreen::refreshRateChanged, this, &RenderViewportWidget::NotifyUpdateRefreshRate); - } - - NotifyUpdateRefreshRate(); - - m_screen = screen; - } - } - void RenderViewportWidget::SendWindowResizeEvent() { // Scale the size by the DPI of the platform to @@ -353,14 +226,8 @@ namespace AtomToolsFramework const QSize uiWindowSize = size(); const QSize windowSize = uiWindowSize * devicePixelRatioF(); - AzFramework::WindowNotificationBus::Event( - GetNativeWindowHandle(), &AzFramework::WindowNotifications::OnWindowResized, windowSize.width(), windowSize.height()); - } - - void RenderViewportWidget::NotifyUpdateRefreshRate() - { - AzFramework::WindowNotificationBus::Event( - GetNativeWindowHandle(), &AzFramework::WindowNotificationBus::Events::OnRefreshRateChanged, GetDisplayRefreshRate()); + const AzFramework::NativeWindowHandle windowId = reinterpret_cast(winId()); + AzFramework::WindowNotificationBus::Event(windowId, &AzFramework::WindowNotifications::OnWindowResized, windowSize.width(), windowSize.height()); } AZ::Name RenderViewportWidget::GetCurrentContextName() const @@ -418,7 +285,9 @@ namespace AtomToolsFramework // Build camera state from Atom camera transforms AzFramework::CameraState cameraState = AzFramework::CreateCameraFromWorldFromViewMatrix( - currentView->GetViewToWorldMatrix(), AZ::Vector2{ aznumeric_cast(width()), aznumeric_cast(height()) }); + currentView->GetViewToWorldMatrix(), + AZ::Vector2{aznumeric_cast(width()), aznumeric_cast(height())} + ); AzFramework::SetCameraClippingVolumeFromPerspectiveFovMatrixRH(cameraState, currentView->GetViewToClipMatrix()); // Convert from Z-up @@ -430,7 +299,8 @@ namespace AtomToolsFramework AzFramework::ScreenPoint RenderViewportWidget::ViewportWorldToScreen(const AZ::Vector3& worldPosition) { - if (AZ::RPI::ViewPtr currentView = m_viewportContext->GetDefaultView(); currentView == nullptr) + if (AZ::RPI::ViewPtr currentView = m_viewportContext->GetDefaultView(); + currentView == nullptr) { return AzFramework::ScreenPoint(0, 0); } @@ -443,10 +313,12 @@ namespace AtomToolsFramework const auto& cameraProjection = m_viewportContext->GetCameraProjectionMatrix(); const auto& cameraView = m_viewportContext->GetCameraViewMatrix(); - const AZ::Vector4 normalizedScreenPosition{ screenPosition.m_x * 2.f / width() - 1.0f, - (height() - screenPosition.m_y) * 2.f / height() - 1.0f, - 1.f - depth, // [GFX TODO] [ATOM-1501] Currently we always assume reverse depth - 1.f }; + const AZ::Vector4 normalizedScreenPosition { + screenPosition.m_x * 2.f / width() - 1.0f, + (height() - screenPosition.m_y) * 2.f / height() - 1.0f, + 1.f - depth, // [GFX TODO] [ATOM-1501] Currently we always assume reverse depth + 1.f + }; AZ::Matrix4x4 worldFromScreen = cameraProjection * cameraView; worldFromScreen.InvertFull(); @@ -475,7 +347,7 @@ namespace AtomToolsFramework AZ::Vector3 rayDirection = pos1.value() - pos0.value(); rayDirection.Normalize(); - return AzToolsFramework::ViewportInteraction::ProjectedViewportRay{ rayOrigin, rayDirection }; + return AzToolsFramework::ViewportInteraction::ProjectedViewportRay{rayOrigin, rayDirection}; } float RenderViewportWidget::DeviceScalingFactor() @@ -505,12 +377,12 @@ namespace AtomToolsFramework AzFramework::WindowSize RenderViewportWidget::GetClientAreaSize() const { - return AzFramework::WindowSize{ aznumeric_cast(width()), aznumeric_cast(height()) }; + return AzFramework::WindowSize{aznumeric_cast(width()), aznumeric_cast(height())}; } void RenderViewportWidget::ResizeClientArea(AzFramework::WindowSize clientAreaSize) { - const QSize targetSize = QSize{ aznumeric_cast(clientAreaSize.m_width), aznumeric_cast(clientAreaSize.m_height) }; + const QSize targetSize = QSize{aznumeric_cast(clientAreaSize.m_width), aznumeric_cast(clientAreaSize.m_height)}; resize(targetSize); } @@ -520,7 +392,7 @@ namespace AtomToolsFramework return false; } - void RenderViewportWidget::SetFullScreenState([[maybe_unused]] bool fullScreenState) + void RenderViewportWidget::SetFullScreenState([[maybe_unused]]bool fullScreenState) { // The RenderViewportWidget does not currently support full screen. } @@ -543,20 +415,11 @@ namespace AtomToolsFramework uint32_t RenderViewportWidget::GetDisplayRefreshRate() const { - return static_cast(screen()->refreshRate()); + return 60; } uint32_t RenderViewportWidget::GetSyncInterval() const { - uint32_t interval = 1; - - // Get vsync_interval from AzFramework::NativeWindow, which owns it. - // NativeWindow also handles broadcasting OnVsyncIntervalChanged to all - // WindowNotificationBus listeners. - if (auto console = AZ::Interface::Get()) - { - console->GetCvarValue("vsync_interval", interval); - } - return interval; + return 1; } -} // namespace AtomToolsFramework +} //namespace AtomToolsFramework diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake b/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake index a24b45179f..3d4bb82eec 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/atomtoolsframework_files.cmake @@ -28,7 +28,6 @@ set(FILES Include/AtomToolsFramework/Util/MaterialPropertyUtil.h Include/AtomToolsFramework/Util/Util.h Include/AtomToolsFramework/Viewport/RenderViewportWidget.h - Include/AtomToolsFramework/Viewport/RenderViewportWidgetNotificationBus.h Include/AtomToolsFramework/Viewport/ModularViewportCameraController.h Include/AtomToolsFramework/Viewport/ModularViewportCameraControllerRequestBus.h Include/AtomToolsFramework/Window/AtomToolsMainWindow.h diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Include/Atom/Window/MaterialEditorWindowSettings.h b/Gems/Atom/Tools/MaterialEditor/Code/Include/Atom/Window/MaterialEditorWindowSettings.h index dd42f79106..c56da58ff1 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Include/Atom/Window/MaterialEditorWindowSettings.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Include/Atom/Window/MaterialEditorWindowSettings.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #endif diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp index d032f35e38..17e292ac16 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp @@ -59,7 +59,7 @@ namespace MaterialEditor return &m_materialTypeSourceData; } - const AZStd::any& MaterialDocument::GetPropertyValue(const AZ::Name& propertyFullName) const + const AZStd::any& MaterialDocument::GetPropertyValue(const AZ::Name& propertyId) const { using namespace AZ; using namespace RPI; @@ -70,10 +70,10 @@ namespace MaterialEditor return m_invalidValue; } - const auto it = m_properties.find(propertyFullName); + const auto it = m_properties.find(propertyId); if (it == m_properties.end()) { - AZ_Error("MaterialDocument", false, "Material document property could not be found: '%s'.", propertyFullName.GetCStr()); + AZ_Error("MaterialDocument", false, "Material document property could not be found: '%s'.", propertyId.GetCStr()); return m_invalidValue; } @@ -81,7 +81,7 @@ namespace MaterialEditor return property.GetValue(); } - const AtomToolsFramework::DynamicProperty& MaterialDocument::GetProperty(const AZ::Name& propertyFullName) const + const AtomToolsFramework::DynamicProperty& MaterialDocument::GetProperty(const AZ::Name& propertyId) const { if (!IsOpen()) { @@ -89,10 +89,10 @@ namespace MaterialEditor return m_invalidProperty; } - const auto it = m_properties.find(propertyFullName); + const auto it = m_properties.find(propertyId); if (it == m_properties.end()) { - AZ_Error("MaterialDocument", false, "Material document property could not be found: '%s'.", propertyFullName.GetCStr()); + AZ_Error("MaterialDocument", false, "Material document property could not be found: '%s'.", propertyId.GetCStr()); return m_invalidProperty; } @@ -118,7 +118,7 @@ namespace MaterialEditor return it->second; } - void MaterialDocument::SetPropertyValue(const AZ::Name& propertyFullName, const AZStd::any& value) + void MaterialDocument::SetPropertyValue(const AZ::Name& propertyId, const AZStd::any& value) { using namespace AZ; using namespace RPI; @@ -129,10 +129,10 @@ namespace MaterialEditor return; } - const auto it = m_properties.find(propertyFullName); + const auto it = m_properties.find(propertyId); if (it == m_properties.end()) { - AZ_Error("MaterialDocument", false, "Material document property could not be found: '%s'.", propertyFullName.GetCStr()); + AZ_Error("MaterialDocument", false, "Material document property could not be found: '%s'.", propertyId.GetCStr()); return; } @@ -143,8 +143,7 @@ namespace MaterialEditor AtomToolsFramework::DynamicProperty& property = it->second; property.SetValue(AtomToolsFramework::ConvertToEditableType(propertyValue)); - const AZ::RPI::MaterialPropertyId propertyId = AZ::RPI::MaterialPropertyId::Parse(propertyFullName.GetStringView()); - const auto propertyIndex = m_materialInstance->FindPropertyIndex(propertyFullName); + const auto propertyIndex = m_materialInstance->FindPropertyIndex(propertyId); if (!propertyIndex.IsNull()) { if (m_materialInstance->SetPropertyValue(propertyIndex, propertyValue)) @@ -593,8 +592,9 @@ namespace MaterialEditor bool result = true; // populate sourceData with properties that meet the filter - m_materialTypeSourceData.EnumerateProperties([this, &sourceData, &propertyFilter, &result](const AZStd::string& groupNameId, const AZStd::string& propertyNameId, const auto& propertyDefinition) { - const MaterialPropertyId propertyId(groupNameId, propertyNameId); + m_materialTypeSourceData.EnumerateProperties([this, &sourceData, &propertyFilter, &result](const AZStd::string& groupName, const AZStd::string& propertyName, const auto& propertyDefinition) { + + const MaterialPropertyId propertyId(groupName, propertyName); const auto it = m_properties.find(propertyId.GetFullName()); if (it != m_properties.end() && propertyFilter(it->second)) @@ -609,7 +609,7 @@ namespace MaterialEditor return false; } - sourceData.m_properties[groupNameId][propertyNameId].m_value = propertyValue; + sourceData.m_properties[groupName][propertyName].m_value = propertyValue; } } return true; @@ -770,11 +770,11 @@ namespace MaterialEditor // Populate the property map from a combination of source data and assets // Assets must still be used for now because they contain the final accumulated value after all other materials // in the hierarchy are applied - m_materialTypeSourceData.EnumerateProperties([this, &parentPropertyValues](const AZStd::string& groupNameId, const AZStd::string& propertyNameId, const auto& propertyDefinition) { + m_materialTypeSourceData.EnumerateProperties([this, &parentPropertyValues](const AZStd::string& groupName, const AZStd::string& propertyName, const auto& propertyDefinition) { AtomToolsFramework::DynamicPropertyConfig propertyConfig; // Assign id before conversion so it can be used in dynamic description - propertyConfig.m_id = MaterialPropertyId(groupNameId, propertyNameId).GetCStr(); + propertyConfig.m_id = MaterialPropertyId(groupName, propertyName).GetCStr(); const auto& propertyIndex = m_materialAsset->GetMaterialPropertiesLayout()->FindPropertyIndex(propertyConfig.m_id); const bool propertyIndexInBounds = propertyIndex.IsValid() && propertyIndex.GetIndex() < m_materialAsset->GetPropertyValues().size(); @@ -786,8 +786,8 @@ namespace MaterialEditor propertyConfig.m_showThumbnail = true; propertyConfig.m_originalValue = AtomToolsFramework::ConvertToEditableType(m_materialAsset->GetPropertyValues()[propertyIndex.GetIndex()]); propertyConfig.m_parentValue = AtomToolsFramework::ConvertToEditableType(parentPropertyValues[propertyIndex.GetIndex()]); - auto groupDefinition = m_materialTypeSourceData.FindGroup(groupNameId); - propertyConfig.m_groupName = groupDefinition ? groupDefinition->m_displayName : groupNameId; + auto groupDefinition = m_materialTypeSourceData.FindGroup(groupName); + propertyConfig.m_groupName = groupDefinition ? groupDefinition->m_displayName : groupName; m_properties[propertyConfig.m_id] = AtomToolsFramework::DynamicProperty(propertyConfig); } return true; @@ -796,7 +796,7 @@ namespace MaterialEditor // Populate the property group visibility map for (MaterialTypeSourceData::GroupDefinition& group : m_materialTypeSourceData.GetGroupDefinitionsInDisplayOrder()) { - m_propertyGroupVisibility[AZ::Name{group.m_nameId}] = true; + m_propertyGroupVisibility[AZ::Name{group.m_name}] = true; } // Adding properties for material type and parent as part of making dynamic @@ -808,7 +808,7 @@ namespace MaterialEditor AtomToolsFramework::DynamicPropertyConfig propertyConfig; propertyConfig.m_dataType = AtomToolsFramework::DynamicPropertyType::Asset; propertyConfig.m_id = "overview.materialType"; - propertyConfig.m_nameId = "materialType"; + propertyConfig.m_name = "materialType"; propertyConfig.m_displayName = "Material Type"; propertyConfig.m_groupName = "Overview"; propertyConfig.m_description = "The material type defines the layout, properties, default values, shader connections, and other " @@ -823,7 +823,7 @@ namespace MaterialEditor propertyConfig = {}; propertyConfig.m_dataType = AtomToolsFramework::DynamicPropertyType::Asset; propertyConfig.m_id = "overview.parentMaterial"; - propertyConfig.m_nameId = "parentMaterial"; + propertyConfig.m_name = "parentMaterial"; propertyConfig.m_displayName = "Parent Material"; propertyConfig.m_groupName = "Overview"; propertyConfig.m_description = @@ -846,7 +846,7 @@ namespace MaterialEditor propertyConfig = {}; propertyConfig.m_dataType = AtomToolsFramework::DynamicPropertyType::String; propertyConfig.m_id = MaterialPropertyId(UvGroupName, shaderInput).GetCStr(); - propertyConfig.m_nameId = shaderInput; + propertyConfig.m_name = shaderInput; propertyConfig.m_displayName = shaderInput; propertyConfig.m_groupName = "UV Sets"; propertyConfig.m_description = shaderInput; diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h index d732680b7b..03997a2a91 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.h @@ -43,10 +43,10 @@ namespace MaterialEditor //////////////////////////////////////////////////////////////////////// // AtomToolsFramework::AtomToolsDocument //////////////////////////////////////////////////////////////////////// - const AZStd::any& GetPropertyValue(const AZ::Name& propertyFullName) const override; - const AtomToolsFramework::DynamicProperty& GetProperty(const AZ::Name& propertyFullName) const override; + const AZStd::any& GetPropertyValue(const AZ::Name& propertyId) const override; + const AtomToolsFramework::DynamicProperty& GetProperty(const AZ::Name& propertyId) const override; bool IsPropertyGroupVisible(const AZ::Name& propertyGroupFullName) const override; - void SetPropertyValue(const AZ::Name& propertyFullName, const AZStd::any& value) override; + void SetPropertyValue(const AZ::Name& propertyId, const AZStd::any& value) override; bool Open(AZStd::string_view loadPath) override; bool Reopen() override; bool Save() override; diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/InputController/MaterialEditorViewportInputController.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/InputController/MaterialEditorViewportInputController.cpp index 7571738597..932e2e7436 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/InputController/MaterialEditorViewportInputController.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/InputController/MaterialEditorViewportInputController.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportComponent.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportComponent.cpp index 24e78b5ad3..a8f41917f9 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportComponent.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportComponent.cpp @@ -190,7 +190,7 @@ namespace MaterialEditor void MaterialViewportComponent::ReloadContent() { - AZ_TracePrintf("Material Editor", "Started loading viewport configurtions.\n"); + AZ_TracePrintf("Material Editor", "Started loading viewport configurations.\n"); MaterialViewportNotificationBus::Broadcast(&MaterialViewportNotificationBus::Events::OnBeginReloadContent); @@ -239,7 +239,7 @@ namespace MaterialEditor { auto presetPtr = AddLightingPreset(*preset); m_lightingPresetLastSavePathMap[presetPtr] = AZ::RPI::AssetUtils::GetSourcePathByAssetId(info.m_assetId); - AZ_TracePrintf("Material Editor", "Loaded viewport configurtion: %s.\n", info.m_relativePath.c_str()); + AZ_TracePrintf("Material Editor", "Loaded viewport configuration: %s.\n", info.m_relativePath.c_str()); } } } @@ -258,7 +258,7 @@ namespace MaterialEditor { auto presetPtr = AddModelPreset(*preset); m_modelPresetLastSavePathMap[presetPtr] = AZ::RPI::AssetUtils::GetSourcePathByAssetId(info.m_assetId); - AZ_TracePrintf("Material Editor", "Loaded viewport configurtion: %s.\n", info.m_relativePath.c_str()); + AZ_TracePrintf("Material Editor", "Loaded viewport configuration: %s.\n", info.m_relativePath.c_str()); } } } @@ -271,7 +271,7 @@ namespace MaterialEditor MaterialViewportNotificationBus::Broadcast(&MaterialViewportNotificationBus::Events::OnEndReloadContent); - AZ_TracePrintf("Material Editor", "Finished loading viewport configurtions.\n"); + AZ_TracePrintf("Material Editor", "Finished loading viewport configurations.\n"); } AZ::Render::LightingPresetPtr MaterialViewportComponent::AddLightingPreset(const AZ::Render::LightingPreset& preset) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp index 7edff11174..6d6fd377e3 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/MaterialViewportRenderer.cpp @@ -182,7 +182,9 @@ namespace MaterialEditor AZ_Error("MaterialViewportRenderer", m_shadowCatcherMaterial != nullptr, "Could not create shadow catcher material."); AZ::Render::MaterialAssignmentMap shadowCatcherMaterials; - shadowCatcherMaterials[AZ::Render::DefaultMaterialAssignmentId].m_materialInstance = m_shadowCatcherMaterial; + auto& shadowCatcherMaterialAssignment = shadowCatcherMaterials[AZ::Render::DefaultMaterialAssignmentId]; + shadowCatcherMaterialAssignment.m_materialInstance = m_shadowCatcherMaterial; + shadowCatcherMaterialAssignment.m_materialInstancePreCreated = true; AZ::Render::MaterialComponentRequestBus::Event(m_shadowCatcherEntity->GetId(), &AZ::Render::MaterialComponentRequestBus::Events::SetMaterialOverrides, shadowCatcherMaterials); @@ -291,7 +293,9 @@ namespace MaterialEditor MaterialDocumentRequestBus::EventResult(materialInstance, documentId, &MaterialDocumentRequestBus::Events::GetInstance); AZ::Render::MaterialAssignmentMap materials; - materials[AZ::Render::DefaultMaterialAssignmentId].m_materialInstance = materialInstance; + auto& materialAssignment = materials[AZ::Render::DefaultMaterialAssignmentId]; + materialAssignment.m_materialInstance = materialInstance; + materialAssignment.m_materialInstancePreCreated = true; AZ::Render::MaterialComponentRequestBus::Event(m_modelEntity->GetId(), &AZ::Render::MaterialComponentRequestBus::Events::SetMaterialOverrides, materials); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp index f27a08b08d..fd20716570 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp @@ -24,7 +24,7 @@ namespace MaterialEditor { CreateMaterialDialog::CreateMaterialDialog(QWidget* parent) - : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent) + : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent) { } diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/Icons/skybox.svg b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/Icons/skybox.svg new file mode 100644 index 0000000000..83df996198 --- /dev/null +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/Icons/skybox.svg @@ -0,0 +1,15 @@ + + + + icon / Environmental / Sky Highlight + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc index cde48079ac..902201e792 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc @@ -19,6 +19,7 @@ Icons/texture_edit.png Icons/grid.svg Icons/shadow.svg + Icons/skybox.svg Icons/toneMapping.svg Icons/View.svg diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp index e6ffd2842f..d73737a2dc 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp @@ -106,7 +106,7 @@ namespace MaterialEditor menu->addAction("Create Material...", [entry]() { const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + + QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); @@ -182,7 +182,7 @@ namespace MaterialEditor menu->addAction("Create Child Material...", [entry]() { const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + + QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp index 28d7d3d3f5..025de21d31 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp @@ -44,20 +44,20 @@ namespace MaterialEditor AtomToolsFramework::InspectorWidget::Reset(); } - bool MaterialInspector::ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const + bool MaterialInspector::ShouldGroupAutoExpanded(const AZStd::string& groupName) const { - auto stateItr = m_windowSettings->m_inspectorCollapsedGroups.find(GetGroupSaveStateKey(groupNameId)); + auto stateItr = m_windowSettings->m_inspectorCollapsedGroups.find(GetGroupSaveStateKey(groupName)); return stateItr == m_windowSettings->m_inspectorCollapsedGroups.end(); } - void MaterialInspector::OnGroupExpanded(const AZStd::string& groupNameId) + void MaterialInspector::OnGroupExpanded(const AZStd::string& groupName) { - m_windowSettings->m_inspectorCollapsedGroups.erase(GetGroupSaveStateKey(groupNameId)); + m_windowSettings->m_inspectorCollapsedGroups.erase(GetGroupSaveStateKey(groupName)); } - void MaterialInspector::OnGroupCollapsed(const AZStd::string& groupNameId) + void MaterialInspector::OnGroupCollapsed(const AZStd::string& groupName) { - m_windowSettings->m_inspectorCollapsedGroups.insert(GetGroupSaveStateKey(groupNameId)); + m_windowSettings->m_inspectorCollapsedGroups.insert(GetGroupSaveStateKey(groupName)); } void MaterialInspector::OnDocumentOpened(const AZ::Uuid& documentId) @@ -86,17 +86,24 @@ namespace MaterialEditor AddGroupsEnd(); } - AZ::Crc32 MaterialInspector::GetGroupSaveStateKey(const AZStd::string& groupNameId) const + AZ::Crc32 MaterialInspector::GetGroupSaveStateKey(const AZStd::string& groupName) const { - return AZ::Crc32(AZStd::string::format("MaterialInspector::PropertyGroup::%s::%s", m_documentPath.c_str(), groupNameId.c_str())); + return AZ::Crc32(AZStd::string::format("MaterialInspector::PropertyGroup::%s::%s", m_documentPath.c_str(), groupName.c_str())); } - bool MaterialInspector::CompareInstanceNodeProperties( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) const + bool MaterialInspector::IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const { - AZ_UNUSED(source); - const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); - return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(node); + return property && !AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + } + + const char* MaterialInspector::GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const + { + if (IsInstanceNodePropertyModifed(node)) + { + return ":/PropertyEditor/Resources/changed_data_item.png"; + } + return ":/PropertyEditor/Resources/blank.png"; } void MaterialInspector::AddOverviewGroup() @@ -105,10 +112,10 @@ namespace MaterialEditor MaterialDocumentRequestBus::EventResult( materialTypeSourceData, m_documentId, &MaterialDocumentRequestBus::Events::GetMaterialTypeSourceData); - const AZStd::string groupNameId = "overview"; + const AZStd::string groupName = "overview"; const AZStd::string groupDisplayName = "Overview"; const AZStd::string groupDescription = materialTypeSourceData->m_description; - auto& group = m_groups[groupNameId]; + auto& group = m_groups[groupName]; AtomToolsFramework::DynamicProperty property; AtomToolsFramework::AtomToolsDocumentRequestBus::EventResult( @@ -122,9 +129,9 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); - AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupName), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); + AddGroup(groupName, groupDisplayName, groupDescription, propertyGroupWidget); } void MaterialInspector::AddUvNamesGroup() @@ -132,10 +139,10 @@ namespace MaterialEditor AZ::Data::Asset materialAsset; MaterialDocumentRequestBus::EventResult(materialAsset, m_documentId, &MaterialDocumentRequestBus::Events::GetAsset); - const AZStd::string groupNameId = UvGroupName; + const AZStd::string groupName = UvGroupName; const AZStd::string groupDisplayName = "UV Sets"; const AZStd::string groupDescription = "UV set names in this material, which can be renamed to match those in the model."; - auto& group = m_groups[groupNameId]; + auto& group = m_groups[groupName]; const auto& uvNameMap = materialAsset->GetMaterialTypeAsset()->GetUvNameMap(); group.m_properties.reserve(uvNameMap.size()); @@ -145,7 +152,7 @@ namespace MaterialEditor AtomToolsFramework::DynamicProperty property; AtomToolsFramework::AtomToolsDocumentRequestBus::EventResult( property, m_documentId, &AtomToolsFramework::AtomToolsDocumentRequestBus::Events::GetProperty, - AZ::RPI::MaterialPropertyId(groupNameId, uvNamePair.m_shaderInput.ToString()).GetFullName()); + AZ::RPI::MaterialPropertyId(groupName, uvNamePair.m_shaderInput.ToString()).GetFullName()); group.m_properties.push_back(property); property.SetValue(property.GetConfig().m_parentValue); @@ -153,9 +160,9 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); - AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupName), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); + AddGroup(groupName, groupDisplayName, groupDescription, propertyGroupWidget); } void MaterialInspector::AddPropertiesGroup() @@ -166,14 +173,14 @@ namespace MaterialEditor for (const auto& groupDefinition : materialTypeSourceData->GetGroupDefinitionsInDisplayOrder()) { - const AZStd::string& groupNameId = groupDefinition.m_nameId; - const AZStd::string& groupDisplayName = !groupDefinition.m_displayName.empty() ? groupDefinition.m_displayName : groupNameId; + const AZStd::string& groupName = groupDefinition.m_name; + const AZStd::string& groupDisplayName = !groupDefinition.m_displayName.empty() ? groupDefinition.m_displayName : groupName; const AZStd::string& groupDescription = !groupDefinition.m_description.empty() ? groupDefinition.m_description : groupDisplayName; - auto& group = m_groups[groupNameId]; + auto& group = m_groups[groupName]; const auto& propertyLayout = materialTypeSourceData->m_propertyLayout; - const auto& propertyListItr = propertyLayout.m_properties.find(groupNameId); + const auto& propertyListItr = propertyLayout.m_properties.find(groupName); if (propertyListItr != propertyLayout.m_properties.end()) { group.m_properties.reserve(propertyListItr->second.size()); @@ -182,21 +189,21 @@ namespace MaterialEditor AtomToolsFramework::DynamicProperty property; AtomToolsFramework::AtomToolsDocumentRequestBus::EventResult( property, m_documentId, &AtomToolsFramework::AtomToolsDocumentRequestBus::Events::GetProperty, - AZ::RPI::MaterialPropertyId(groupNameId, propertyDefinition.m_nameId).GetFullName()); + AZ::RPI::MaterialPropertyId(groupName, propertyDefinition.m_name).GetFullName()); group.m_properties.push_back(property); } } // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); - AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupName), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); + AddGroup(groupName, groupDisplayName, groupDescription, propertyGroupWidget); bool isGroupVisible = false; AtomToolsFramework::AtomToolsDocumentRequestBus::EventResult( - isGroupVisible, m_documentId, &AtomToolsFramework::AtomToolsDocumentRequestBus::Events::IsPropertyGroupVisible, AZ::Name{groupNameId}); - SetGroupVisible(groupNameId, isGroupVisible); + isGroupVisible, m_documentId, &AtomToolsFramework::AtomToolsDocumentRequestBus::Events::IsPropertyGroupVisible, AZ::Name{groupName}); + SetGroupVisible(groupName, isGroupVisible); } } diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h index 845a8cb0f7..a3b98e13d2 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h @@ -37,14 +37,14 @@ namespace MaterialEditor void Reset() override; protected: - bool ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const override; - void OnGroupExpanded(const AZStd::string& groupNameId) override; - void OnGroupCollapsed(const AZStd::string& groupNameId) override; + bool ShouldGroupAutoExpanded(const AZStd::string& groupName) const override; + void OnGroupExpanded(const AZStd::string& groupName) override; + void OnGroupCollapsed(const AZStd::string& groupName) override; private: - AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupNameId) const; - bool CompareInstanceNodeProperties( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) const; + AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupName) const; + bool IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const; + const char* GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const; void AddOverviewGroup(); void AddUvNamesGroup(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/SettingsDialog/SettingsWidget.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/SettingsDialog/SettingsWidget.cpp index c7d4b195a3..2a061a2ed6 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/SettingsDialog/SettingsWidget.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/SettingsDialog/SettingsWidget.cpp @@ -35,26 +35,26 @@ namespace MaterialEditor void SettingsWidget::AddDocumentSettingsGroup() { - const AZStd::string groupNameId = "documentSettings"; + const AZStd::string groupName = "documentSettings"; const AZStd::string groupDisplayName = "Document Settings"; const AZStd::string groupDescription = "Document Settings"; const AZ::Crc32 saveStateKey(AZStd::string::format("SettingsWidget::DocumentSettingsGroup")); AddGroup( - groupNameId, groupDisplayName, groupDescription, + groupName, groupDisplayName, groupDescription, new AtomToolsFramework::InspectorPropertyGroupWidget( m_documentSettings.get(), nullptr, m_documentSettings->TYPEINFO_Uuid(), this, this, saveStateKey)); } void SettingsWidget::AddDocumentSystemSettingsGroup() { - const AZStd::string groupNameId = "documentSystemSettings"; + const AZStd::string groupName = "documentSystemSettings"; const AZStd::string groupDisplayName = "Document System Settings"; const AZStd::string groupDescription = "Document System Settings"; const AZ::Crc32 saveStateKey(AZStd::string::format("SettingsWidget::DocumentSystemSettingsGroup")); AddGroup( - groupNameId, groupDisplayName, groupDescription, + groupName, groupDisplayName, groupDescription, new AtomToolsFramework::InspectorPropertyGroupWidget( m_documentSystemSettings.get(), nullptr, m_documentSystemSettings->TYPEINFO_Uuid(), this, this, saveStateKey)); } diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp index 55829fd744..1e189168da 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp @@ -50,8 +50,16 @@ namespace MaterialEditor }); m_toggleShadowCatcher->setChecked(viewportSettings->m_enableShadowCatcher); - // Add mapping selection button + // Add toggle alternate skybox button + m_toggleAlternateSkybox = addAction(QIcon(":/Icons/skybox.svg"), "Toggle Alternate Skybox"); + m_toggleAlternateSkybox->setCheckable(true); + connect(m_toggleAlternateSkybox, &QAction::triggered, [this]() { + MaterialViewportRequestBus::Broadcast( + &MaterialViewportRequestBus::Events::SetAlternateSkyboxEnabled, m_toggleAlternateSkybox->isChecked()); + }); + m_toggleAlternateSkybox->setChecked(viewportSettings->m_enableAlternateSkybox); + // Add mapping selection button QToolButton* toneMappingButton = new QToolButton(this); QMenu* toneMappingMenu = new QMenu(toneMappingButton); @@ -105,6 +113,11 @@ namespace MaterialEditor m_toggleGrid->setChecked(enable); } + void MaterialEditorToolBar::OnAlternateSkyboxEnabledChanged(bool enable) + { + m_toggleAlternateSkybox->setChecked(enable); + } + void MaterialEditorToolBar::OnDisplayMapperOperationTypeChanged(AZ::Render::DisplayMapperOperationType operationType) { for (auto operationActionPair : m_operationActions) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h index d68c23665f..c25b90eb80 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h @@ -29,10 +29,12 @@ namespace MaterialEditor // MaterialViewportNotificationBus::Handler overrides... void OnShadowCatcherEnabledChanged([[maybe_unused]] bool enable) override; void OnGridEnabledChanged([[maybe_unused]] bool enable) override; + void OnAlternateSkyboxEnabledChanged([[maybe_unused]] bool enable) override; void OnDisplayMapperOperationTypeChanged(AZ::Render::DisplayMapperOperationType operationType) override; QAction* m_toggleGrid = {}; QAction* m_toggleShadowCatcher = {}; + QAction* m_toggleAlternateSkybox = {}; AZStd::unordered_map m_operationNames; AZStd::unordered_map m_operationActions; diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp index d4269c2438..5721dfcc72 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -53,19 +54,19 @@ namespace MaterialEditor void ViewportSettingsInspector::AddGeneralGroup() { - const AZStd::string groupNameId = "generalSettings"; + const AZStd::string groupName = "generalSettings"; const AZStd::string groupDisplayName = "General Settings"; const AZStd::string groupDescription = "General Settings"; AddGroup( - groupNameId, groupDisplayName, groupDescription, + groupName, groupDisplayName, groupDescription, new AtomToolsFramework::InspectorPropertyGroupWidget( - m_viewportSettings.get(), nullptr, m_viewportSettings->TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId))); + m_viewportSettings.get(), nullptr, m_viewportSettings->TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupName))); } void ViewportSettingsInspector::AddModelGroup() { - const AZStd::string groupNameId = "modelSettings"; + const AZStd::string groupName = "modelSettings"; const AZStd::string groupDisplayName = "Model Settings"; const AZStd::string groupDescription = "Model Settings"; @@ -93,12 +94,12 @@ namespace MaterialEditor if (m_modelPreset) { auto inspectorWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - m_modelPreset.get(), nullptr, m_modelPreset.get()->TYPEINFO_Uuid(), this, groupWidget, GetGroupSaveStateKey(groupNameId)); + m_modelPreset.get(), nullptr, m_modelPreset.get()->TYPEINFO_Uuid(), this, groupWidget, GetGroupSaveStateKey(groupName)); groupWidget->layout()->addWidget(inspectorWidget); } - AddGroup(groupNameId, groupDisplayName, groupDescription, groupWidget); + AddGroup(groupName, groupDisplayName, groupDescription, groupWidget); } void ViewportSettingsInspector::AddModelPreset() @@ -152,7 +153,7 @@ namespace MaterialEditor void ViewportSettingsInspector::AddLightingGroup() { - const AZStd::string groupNameId = "lightingSettings"; + const AZStd::string groupName = "lightingSettings"; const AZStd::string groupDisplayName = "Lighting Settings"; const AZStd::string groupDescription = "Lighting Settings"; @@ -181,12 +182,12 @@ namespace MaterialEditor { auto inspectorWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( m_lightingPreset.get(), nullptr, m_lightingPreset.get()->TYPEINFO_Uuid(), this, groupWidget, - GetGroupSaveStateKey(groupNameId)); + GetGroupSaveStateKey(groupName)); groupWidget->layout()->addWidget(inspectorWidget); } - AddGroup(groupNameId, groupDisplayName, groupDescription, groupWidget); + AddGroup(groupName, groupDisplayName, groupDescription, groupWidget); } void ViewportSettingsInspector::AddLightingPreset() @@ -345,7 +346,7 @@ namespace MaterialEditor AZStd::string ViewportSettingsInspector::GetDefaultUniqueSaveFilePath(const AZStd::string& baseName) const { - AZStd::string savePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + AZStd::string savePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); savePath += AZ_CORRECT_FILESYSTEM_SEPARATOR; savePath += "Materials"; savePath += AZ_CORRECT_FILESYSTEM_SEPARATOR; @@ -354,25 +355,25 @@ namespace MaterialEditor return savePath; } - AZ::Crc32 ViewportSettingsInspector::GetGroupSaveStateKey(const AZStd::string& groupNameId) const + AZ::Crc32 ViewportSettingsInspector::GetGroupSaveStateKey(const AZStd::string& groupName) const { - return AZ::Crc32(AZStd::string::format("ViewportSettingsInspector::PropertyGroup::%s", groupNameId.c_str())); + return AZ::Crc32(AZStd::string::format("ViewportSettingsInspector::PropertyGroup::%s", groupName.c_str())); } - bool ViewportSettingsInspector::ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const + bool ViewportSettingsInspector::ShouldGroupAutoExpanded(const AZStd::string& groupName) const { - auto stateItr = m_windowSettings->m_inspectorCollapsedGroups.find(GetGroupSaveStateKey(groupNameId)); + auto stateItr = m_windowSettings->m_inspectorCollapsedGroups.find(GetGroupSaveStateKey(groupName)); return stateItr == m_windowSettings->m_inspectorCollapsedGroups.end(); } - void ViewportSettingsInspector::OnGroupExpanded(const AZStd::string& groupNameId) + void ViewportSettingsInspector::OnGroupExpanded(const AZStd::string& groupName) { - m_windowSettings->m_inspectorCollapsedGroups.erase(GetGroupSaveStateKey(groupNameId)); + m_windowSettings->m_inspectorCollapsedGroups.erase(GetGroupSaveStateKey(groupName)); } - void ViewportSettingsInspector::OnGroupCollapsed(const AZStd::string& groupNameId) + void ViewportSettingsInspector::OnGroupCollapsed(const AZStd::string& groupName) { - m_windowSettings->m_inspectorCollapsedGroups.insert(GetGroupSaveStateKey(groupNameId)); + m_windowSettings->m_inspectorCollapsedGroups.insert(GetGroupSaveStateKey(groupName)); } } // namespace MaterialEditor diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.h index d1cd7a7cf3..6299ddb1f2 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.h @@ -75,10 +75,10 @@ namespace MaterialEditor AZStd::string GetDefaultUniqueSaveFilePath(const AZStd::string& baseName) const; - AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupNameId) const; - bool ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const override; - void OnGroupExpanded(const AZStd::string& groupNameId) override; - void OnGroupCollapsed(const AZStd::string& groupNameId) override; + AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupName) const; + bool ShouldGroupAutoExpanded(const AZStd::string& groupName) const override; + void OnGroupExpanded(const AZStd::string& groupName) override; + void OnGroupCollapsed(const AZStd::string& groupName) override; AZ::Render::ModelPresetPtr m_modelPreset; AZ::Render::LightingPresetPtr m_lightingPreset; diff --git a/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py b/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py index 6708553e20..041e1a80c5 100755 --- a/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py +++ b/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py @@ -16,10 +16,10 @@ import sys import os.path import filecmp -g_devroot = azlmbr.paths.devroot -sys.path.append(os.path.join(g_devroot, 'Tests', 'Atom', 'Automated')) +g_engroot = azlmbr.paths.engroot +sys.path.append(os.path.join(g_engroot, 'Tests', 'Atom', 'Automated')) -g_materialTestFolder = os.path.join(g_devroot,'Gems','Atom','TestData','TestData','Materials','StandardPbrTestCases') +g_materialTestFolder = os.path.join(g_engroot,'Gems','Atom','TestData','TestData','Materials','StandardPbrTestCases') # Change this to True to replace the expected screenshot images g_replaceExpectedScreenshots = False diff --git a/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py b/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py index 7bd65568ed..c31047d347 100755 --- a/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py +++ b/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py @@ -135,7 +135,7 @@ def main(): # clean previously generated shader variant list file so they don't clash. pre, ext = os.path.splitext(shaderAssetInfo.relativePath) - projectShaderVariantListFilePath = os.path.join(azlmbr.paths.devassets, PROJECT_SHADER_VARIANTS_FOLDER, f'{pre}.shadervariantlist') + projectShaderVariantListFilePath = os.path.join(azlmbr.paths.projectroot, PROJECT_SHADER_VARIANTS_FOLDER, f'{pre}.shadervariantlist') pre, ext = os.path.splitext(filename) defaultShaderVariantListFilePath = f'{pre}.shadervariantlist' diff --git a/Gems/Atom/Utils/Code/CMakeLists.txt b/Gems/Atom/Utils/Code/CMakeLists.txt index 63a2e029f7..89bc8dd0a5 100644 --- a/Gems/Atom/Utils/Code/CMakeLists.txt +++ b/Gems/Atom/Utils/Code/CMakeLists.txt @@ -24,6 +24,7 @@ ly_add_target( Gem::Atom_RHI.Public PUBLIC Gem::Atom_RHI.Reflect + 3rdParty::libpng ) ################################################################################ @@ -43,6 +44,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) BUILD_DEPENDENCIES PRIVATE AZ::AzTest + AZ::AzFramework Gem::Atom_Utils.Static ) ly_add_googletest( diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/AssetCollectionAsyncLoader.h b/Gems/Atom/Utils/Code/Include/Atom/Utils/AssetCollectionAsyncLoader.h index 2d05a68771..d1027daa36 100644 --- a/Gems/Atom/Utils/Code/Include/Atom/Utils/AssetCollectionAsyncLoader.h +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/AssetCollectionAsyncLoader.h @@ -7,6 +7,7 @@ */ #pragma once +#include #include #include #include diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/PngFile.h b/Gems/Atom/Utils/Code/Include/Atom/Utils/PngFile.h new file mode 100644 index 0000000000..1de27e9b96 --- /dev/null +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/PngFile.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace AZ +{ + namespace Utils + { + //! This is a light wrapper class for libpng, to load and save .png files. + //! Functionality is limited, feel free to add more features as needed. + class PngFile + { + public: + using ErrorHandler = AZStd::function; + + struct LoadSettings + { + ErrorHandler m_errorHandler{}; //!< optional callback function describing any errors that are encountered + bool m_stripAlpha = false; //!< the alpha channel will be skipped, loading an RGBA image as RGB + LoadSettings() {}; // clang errors out if this is not provided. + }; + + struct SaveSettings + { + ErrorHandler m_errorHandler{}; //!< optional callback function describing any errors that are encountered + bool m_stripAlpha = false; //!< the alpha channel will be skipped, saving an RGBA buffer as RGB + int m_compressionLevel = 6; //!< this is the zlib compression level. See png_set_compression_level in png.h + SaveSettings() {}; // clang errors out if this is not provided. + }; + + // To keep things simple for now we limit all images to RGB and RGBA, 8 bits per channel. + enum class Format + { + Unknown, + RGB, + RGBA + }; + + //! @return the loaded PngFile or an invalid PngFile if there was an error. + static PngFile Load(const char* path, LoadSettings loadSettings = {}); + + //! Create a PngFile from an RHI data buffer. + //! @param size the dimensions of the image (m_depth is not used, assumed to be 1) + //! @param format indicates the pixel format represented by @data. Only a limited set of formats are supported, see implementation. + //! @param data the buffer of image data. The size of the buffer must match the @size and @format parameters. + //! @param errorHandler optional callback function describing any errors that are encountered + //! @return the created PngFile or an invalid PngFile if there was an error. + static PngFile Create(const RHI::Size& size, RHI::Format format, AZStd::array_view data, ErrorHandler errorHandler = {}); + static PngFile Create(const RHI::Size& size, RHI::Format format, AZStd::vector&& data, ErrorHandler errorHandler = {}); + + PngFile() = default; + AZ_DEFAULT_MOVE(PngFile) + + //! @return true if the save operation was successful + bool Save(const char* path, SaveSettings saveSettings = {}); + + bool IsValid() const; + operator bool() const { return IsValid(); } + + uint32_t GetWidth() const { return m_width; } + uint32_t GetHeight() const { return m_height; } + + Format GetBufferFormat() const { return m_bufferFormat; } + const AZStd::vector& GetBuffer() const { return m_buffer; } + + //! Returns a r-value reference that can be moved. This will invalidate the PngFile. + AZStd::vector&& TakeBuffer(); + + private: + AZ_DEFAULT_COPY(PngFile) + + static const int HeaderSize = 8; + + static void DefaultErrorHandler(const char* message); + + uint32_t m_width = 0; + uint32_t m_height = 0; + int32_t m_bitDepth = 0; + + Format m_bufferFormat = Format::Unknown; + AZStd::vector m_buffer; + }; + } +} // namespace AZ diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/Utils.h b/Gems/Atom/Utils/Code/Include/Atom/Utils/Utils.h index 73a61b2345..25b96319c5 100644 --- a/Gems/Atom/Utils/Code/Include/Atom/Utils/Utils.h +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/Utils.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include diff --git a/Gems/Atom/Utils/Code/Source/PngFile.cpp b/Gems/Atom/Utils/Code/Source/PngFile.cpp new file mode 100644 index 0000000000..28f5374d88 --- /dev/null +++ b/Gems/Atom/Utils/Code/Source/PngFile.cpp @@ -0,0 +1,324 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace AZ +{ + namespace Utils + { + namespace + { + void PngImage_user_error_fn(png_structp png_ptr, png_const_charp error_msg) + { + PngFile::ErrorHandler* errorHandler = reinterpret_cast(png_get_error_ptr(png_ptr)); + (*errorHandler)(error_msg); + } + + void PngImage_user_warning_fn(png_structp /*png_ptr*/, [[maybe_unused]] png_const_charp warning_msg) + { + AZ_Warning("PngFile", false, "%s", warning_msg); + } + } + + PngFile PngFile::Create(const RHI::Size& size, RHI::Format format, AZStd::array_view data, ErrorHandler errorHandler) + { + return Create(size, format, AZStd::vector{data.begin(), data.end()}, errorHandler); + } + + PngFile PngFile::Create(const RHI::Size& size, RHI::Format format, AZStd::vector&& data, ErrorHandler errorHandler) + { + if (!errorHandler) + { + errorHandler = [](const char* message) { DefaultErrorHandler(message); }; + } + + PngFile image; + + if (RHI::Format::R8G8B8A8_UNORM == format) + { + if (size.m_width * size.m_height * 4 == data.size()) + { + image.m_width = size.m_width; + image.m_height = size.m_height; + image.m_bitDepth = 8; + image.m_bufferFormat = PngFile::Format::RGBA; + image.m_buffer = AZStd::move(data); + } + else + { + errorHandler("Invalid arguments. Buffer size does not match the image dimensions."); + } + } + else + { + errorHandler(AZStd::string::format("Cannot create PngFile with unsupported format %s", AZ::RHI::ToString(format)).c_str()); + } + + return image; + } + + PngFile PngFile::Load(const char* path, LoadSettings loadSettings) + { + if (!loadSettings.m_errorHandler) + { + loadSettings.m_errorHandler = [path](const char* message) { DefaultErrorHandler(AZStd::string::format("Could not load file '%s'. %s", path, message).c_str()); }; + } + + // For documentation of this code, see http://www.libpng.org/pub/png/libpng-1.4.0-manual.pdf chapter 3 + + FILE* fp = NULL; + azfopen(&fp, path, "rb"); // return type differs across platforms so can't do inside if + if (!fp) + { + loadSettings.m_errorHandler("Cannot open file."); + return {}; + } + + png_byte header[HeaderSize] = {}; + + if (fread(header, 1, HeaderSize, fp) != HeaderSize) + { + fclose(fp); + loadSettings.m_errorHandler("Invalid png header."); + return {}; + } + + bool isPng = !png_sig_cmp(header, 0, HeaderSize); + if (!isPng) + { + fclose(fp); + loadSettings.m_errorHandler("Invalid png header."); + return {}; + } + + png_voidp user_error_ptr = &loadSettings.m_errorHandler; + png_error_ptr user_error_fn = PngImage_user_error_fn; + png_error_ptr user_warning_fn = PngImage_user_warning_fn; + + png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, user_error_ptr, user_error_fn, user_warning_fn); + if (!png_ptr) + { + fclose(fp); + loadSettings.m_errorHandler("png_create_read_struct failed."); + return {}; + } + + png_infop info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + { + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + fclose(fp); + loadSettings.m_errorHandler("png_create_info_struct failed."); + return {}; + } + + png_infop end_info = png_create_info_struct(png_ptr); + if (!end_info) + { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + fclose(fp); + loadSettings.m_errorHandler("png_create_info_struct failed."); + return {}; + } + +AZ_PUSH_DISABLE_WARNING(4611, "-Wunknown-warning-option") // Disables "interaction between '_setjmp' and C++ object destruction is non-portable". See https://docs.microsoft.com/en-us/cpp/preprocessor/warning?view=msvc-160 + if (setjmp(png_jmpbuf(png_ptr))) + { + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + fclose(fp); + // We don't report an error message here because the user_error_fn should have done that already. + return {}; + } +AZ_POP_DISABLE_WARNING + + png_init_io(png_ptr, fp); + + png_set_sig_bytes(png_ptr, HeaderSize); + + png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_NEVER, NULL, 0); + + // To keep things simple for now we limit all images to RGB and RGBA, 8 bits per channel + int png_transforms = PNG_TRANSFORM_PACKING | // Expand 1, 2 and 4-bit samples to bytes + PNG_TRANSFORM_STRIP_16 | // Reduce 16 bit samples to 8 bits + PNG_TRANSFORM_GRAY_TO_RGB; + + if (loadSettings.m_stripAlpha) + { + png_transforms |= PNG_TRANSFORM_STRIP_ALPHA; + } + + png_read_png(png_ptr, info_ptr, png_transforms, NULL); + + // Note that libpng will allocate row_pointers for us. If we want to manage the memory ourselves, we need to call png_set_rows. + // In that case we would have to use the low level interface: png_read_info, png_read_image, and png_read_end. + png_bytep* row_pointers = png_get_rows(png_ptr, info_ptr); + + PngFile pngFile; + + int colorType = 0; + + png_get_IHDR(png_ptr, info_ptr, &pngFile.m_width, &pngFile.m_height, &pngFile.m_bitDepth, &colorType, NULL, NULL, NULL); + + uint32_t bytesPerPixel = 0; + + switch (colorType) + { + case PNG_COLOR_TYPE_RGB: + pngFile.m_bufferFormat = PngFile::Format::RGB; + bytesPerPixel = 3; + break; + case PNG_COLOR_TYPE_RGBA: + pngFile.m_bufferFormat = PngFile::Format::RGBA; + bytesPerPixel = 4; + break; + case PNG_COLOR_TYPE_PALETTE: + // Handles cases where the image uses 1, 2, or 4 bit samples. + // Note bytesPerPixel is 3 because we use PNG_TRANSFORM_PACKING + pngFile.m_bufferFormat = PngFile::Format::RGB; + bytesPerPixel = 3; + break; + default: + AZ_Assert(false, "The png transforms should have ensured a pixel format of RGB or RGBA, 8 bits per channel"); + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + fclose(fp); + loadSettings.m_errorHandler("Unsupported pixel format."); + return {}; + } + + // In the future we could use the low-level interface to avoid copying the image (and provide progress callbacks) + pngFile.m_buffer.set_capacity(pngFile.m_width * pngFile.m_height * bytesPerPixel); + for (uint32_t rowIndex = 0; rowIndex < pngFile.m_height; ++rowIndex) + { + png_bytep row = row_pointers[rowIndex]; + pngFile.m_buffer.insert(pngFile.m_buffer.end(), row, row + (pngFile.m_width * bytesPerPixel)); + } + + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + fclose(fp); + return pngFile; + } + + bool PngFile::Save(const char* path, SaveSettings saveSettings) + { + if (!saveSettings.m_errorHandler) + { + saveSettings.m_errorHandler = [path](const char* message) { DefaultErrorHandler(AZStd::string::format("Could not save file '%s'. %s", path, message).c_str()); }; + } + + if (!IsValid()) + { + saveSettings.m_errorHandler("This PngFile is invalid."); + return false; + } + + // For documentation of this code, see http://www.libpng.org/pub/png/libpng-1.4.0-manual.pdf chapter 4 + + FILE* fp = NULL; + azfopen(&fp, path, "wb"); // return type differs across platforms so can't do inside if + if (!fp) + { + saveSettings.m_errorHandler("Cannot open file."); + return false; + } + + png_voidp user_error_ptr = &saveSettings.m_errorHandler; + png_error_ptr user_error_fn = PngImage_user_error_fn; + png_error_ptr user_warning_fn = PngImage_user_warning_fn; + + png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, user_error_ptr, user_error_fn, user_warning_fn); + if (!png_ptr) + { + fclose(fp); + saveSettings.m_errorHandler("png_create_write_struct failed."); + return false; + } + + png_infop info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + { + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + fclose(fp); + saveSettings.m_errorHandler("png_destroy_write_struct failed."); + return false; + } + +AZ_PUSH_DISABLE_WARNING(4611, "-Wunknown-warning-option") // Disables "interaction between '_setjmp' and C++ object destruction is non-portable". See https://docs.microsoft.com/en-us/cpp/preprocessor/warning?view=msvc-160 + if (setjmp(png_jmpbuf(png_ptr))) + { + png_destroy_write_struct(&png_ptr, &info_ptr); + fclose(fp); + // We don't report an error message here because the user_error_fn should have done that already. + return false; + } +AZ_POP_DISABLE_WARNING + + png_init_io(png_ptr, fp); + + int colorType = 0; + if (saveSettings.m_stripAlpha || m_bufferFormat == PngFile::Format::RGB) + { + colorType = PNG_COLOR_TYPE_RGB; + } + else + { + colorType = PNG_COLOR_TYPE_RGBA; + } + + int transforms = PNG_TRANSFORM_IDENTITY; + if (saveSettings.m_stripAlpha && m_bufferFormat == PngFile::Format::RGBA) + { + transforms |= PNG_TRANSFORM_STRIP_FILLER_AFTER; + } + + png_set_IHDR(png_ptr, info_ptr, m_width, m_height, m_bitDepth, colorType, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + png_set_compression_level(png_ptr, saveSettings.m_compressionLevel); + + const uint32_t bytesPerPixel = (m_bufferFormat == PngFile::Format::RGB) ? 3 : 4; + + AZStd::vector rows; + rows.reserve(m_height); + for (uint32_t i = 0; i < m_height; ++i) + { + rows.push_back(m_buffer.begin() + m_width * bytesPerPixel * i); + } + + png_set_rows(png_ptr, info_ptr, rows.begin()); + + png_write_png(png_ptr, info_ptr, transforms, NULL); + + png_destroy_write_struct(&png_ptr, &info_ptr); + + fclose(fp); + + return true; + } + + void PngFile::DefaultErrorHandler([[maybe_unused]] const char* message) + { + AZ_Error("PngFile", false, "%s", message); + } + + bool PngFile::IsValid() const + { + return + !m_buffer.empty() && + m_width > 0 && + m_height > 0 && + m_bitDepth > 0; + } + + AZStd::vector&& PngFile::TakeBuffer() + { + return AZStd::move(m_buffer); + } + + } // namespace Utils +}// namespace AZ diff --git a/Gems/Atom/Utils/Code/Tests/PngFileTests.cpp b/Gems/Atom/Utils/Code/Tests/PngFileTests.cpp new file mode 100644 index 0000000000..1c5b844204 --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngFileTests.cpp @@ -0,0 +1,313 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include + +namespace UnitTest +{ + using namespace AZ::Utils; + + class PngFileTests + : public AllocatorsFixture + { + protected: + AZ::IO::Path m_testImageFolder; + AZ::IO::Path m_tempPngFilePath; + AZStd::vector m_primaryColors3x1; + AZStd::unique_ptr m_localFileIO; + + void SetUp() override + { + AllocatorsFixture::SetUp(); + + m_testImageFolder = AZ::IO::Path(AZ::Test::GetEngineRootPath()) / AZ::IO::Path("Gems/Atom/Utils/Code/Tests/PngTestImages", '/'); + + m_tempPngFilePath = m_testImageFolder / "temp.png"; + + m_localFileIO.reset(aznew AZ::IO::LocalFileIO()); + AZ::IO::FileIOBase::SetInstance(m_localFileIO.get()); + + AZ::IO::FileIOBase::GetInstance()->Remove(m_tempPngFilePath.c_str()); + + m_primaryColors3x1 = { + 255u, 0u, 0u, 255u, + 0u, 255u, 0u, 255u, + 0u, 0u, 255u, 255u + }; + } + + void TearDown() override + { + m_testImageFolder = AZ::IO::Path{}; + m_tempPngFilePath = AZ::IO::Path{}; + m_primaryColors3x1 = AZStd::vector{}; + + AZ::IO::FileIOBase::SetInstance(nullptr); + m_localFileIO.reset(); + + AllocatorsFixture::TearDown(); + } + + struct Color3 : public AZStd::array + { + using Base = AZStd::array; + Color3(uint8_t r, uint8_t g, uint8_t b) : Base({r, g, b}) {} + Color3(const uint8_t* raw) : Base({raw[0], raw[1], raw[2]}) {} + }; + + struct Color4 : public AZStd::array + { + using Base = AZStd::array; + Color4(uint8_t r, uint8_t g, uint8_t b, uint8_t a) : Base({r, g, b, a}) {} + Color4(const uint8_t* raw) : Base({raw[0], raw[1], raw[2], raw[3]}) {} + }; + }; + + TEST_F(PngFileTests, LoadRgb) + { + PngFile image = PngFile::Load((m_testImageFolder / "ColorChart_rgb.png").c_str()); + EXPECT_TRUE(image.IsValid()); + EXPECT_EQ(image.GetBufferFormat(), PngFile::Format::RGB); + EXPECT_EQ(image.GetWidth(), 3); + EXPECT_EQ(image.GetHeight(), 2); + EXPECT_EQ(image.GetBuffer().size(), 18); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 0), Color3(255u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 3), Color3(0u, 255u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 6), Color3(0u, 0u, 255u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 9), Color3(255u, 255u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 12), Color3(0u, 255u, 255u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 15), Color3(255u, 0u, 255u)); + } + + TEST_F(PngFileTests, LoadRgba) + { + PngFile image = PngFile::Load((m_testImageFolder / "ColorChart_rgba.png").c_str()); + EXPECT_TRUE(image.IsValid()); + EXPECT_EQ(image.GetBufferFormat(), PngFile::Format::RGBA); + EXPECT_EQ(image.GetWidth(), 3); + EXPECT_EQ(image.GetHeight(), 2); + EXPECT_EQ(image.GetBuffer().size(), 24); + EXPECT_EQ(Color4(image.GetBuffer().begin() + 0), Color4(255u, 0u, 0u, 200u)); + EXPECT_EQ(Color4(image.GetBuffer().begin() + 4), Color4(0u, 255u, 0u, 150u)); + EXPECT_EQ(Color4(image.GetBuffer().begin() + 8), Color4(0u, 0u, 255u, 100u)); + EXPECT_EQ(Color4(image.GetBuffer().begin() + 12), Color4(255u, 255u, 0u, 125u)); + EXPECT_EQ(Color4(image.GetBuffer().begin() + 16), Color4(0u, 255u, 255u, 175u)); + EXPECT_EQ(Color4(image.GetBuffer().begin() + 20), Color4(255u, 0u, 255u, 75u)); + } + + TEST_F(PngFileTests, LoadRgbaStripAlpha) + { + PngFile::LoadSettings loadSettings; + loadSettings.m_stripAlpha = true; + + PngFile image = PngFile::Load((m_testImageFolder / "ColorChart_rgba.png").c_str(), loadSettings); + // Note these checks are identical to the LoadRgb test. + EXPECT_TRUE(image.IsValid()); + EXPECT_EQ(image.GetBufferFormat(), PngFile::Format::RGB); + EXPECT_EQ(image.GetWidth(), 3); + EXPECT_EQ(image.GetHeight(), 2); + EXPECT_EQ(image.GetBuffer().size(), 18); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 0), Color3(255u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 3), Color3(0u, 255u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 6), Color3(0u, 0u, 255u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 9), Color3(255u, 255u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 12), Color3(0u, 255u, 255u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 15), Color3(255u, 0u, 255u)); + } + + TEST_F(PngFileTests, LoadColorPaletteTwoBits) + { + PngFile image = PngFile::Load((m_testImageFolder / "ColorPalette_2bit.png").c_str()); + EXPECT_TRUE(image.IsValid()); + EXPECT_EQ(image.GetBufferFormat(), PngFile::Format::RGB); + EXPECT_EQ(image.GetWidth(), 1); + EXPECT_EQ(image.GetHeight(), 3); + EXPECT_EQ(image.GetBuffer().size(), 9); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 0), Color3(255u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 3), Color3(0u, 255u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 6), Color3(0u, 0u, 255u)); + } + + TEST_F(PngFileTests, LoadGrayscaleOneBit) + { + PngFile image = PngFile::Load((m_testImageFolder / "GrayPalette_1bit.png").c_str()); + EXPECT_TRUE(image.IsValid()); + EXPECT_EQ(image.GetBufferFormat(), PngFile::Format::RGB); + EXPECT_EQ(image.GetWidth(), 1); + EXPECT_EQ(image.GetHeight(), 2); + EXPECT_EQ(image.GetBuffer().size(), 6); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 0), Color3(0u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 3), Color3(255u, 255u, 255u)); + } + + TEST_F(PngFileTests, LoadRgba64Bits) + { + PngFile image = PngFile::Load((m_testImageFolder / "Gradient_rgb_16bpc.png").c_str()); + EXPECT_TRUE(image.IsValid()); + EXPECT_EQ(image.GetBufferFormat(), PngFile::Format::RGB); + EXPECT_EQ(image.GetWidth(), 5); + EXPECT_EQ(image.GetHeight(), 1); + EXPECT_EQ(image.GetBuffer().size(), 15); + // The values in this file are 30.0f, 30.1f, 30.2f, 30.3f, 30.4f. But we use PNG_TRANSFORM_STRIP_16 to reduce them to 8 bits per channel for simplicity. + EXPECT_EQ(Color3(image.GetBuffer().begin() + 0), Color3(76u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 3), Color3(77u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 6), Color3(77u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 9), Color3(77u, 0u, 0u)); + EXPECT_EQ(Color3(image.GetBuffer().begin() + 12), Color3(77u, 0u, 0u)); + } + + TEST_F(PngFileTests, CreateCopy) + { + AZStd::vector data = m_primaryColors3x1; + + PngFile savedImage = PngFile::Create(AZ::RHI::Size{3, 1, 0}, AZ::RHI::Format::R8G8B8A8_UNORM, data); + EXPECT_TRUE(savedImage.IsValid()); + EXPECT_EQ(savedImage.GetWidth(), 3); + EXPECT_EQ(savedImage.GetHeight(), 1); + EXPECT_EQ(savedImage.GetBuffer(), data); + } + + TEST_F(PngFileTests, CreateMove) + { + AZStd::vector data = m_primaryColors3x1; + + PngFile savedImage = PngFile::Create(AZ::RHI::Size{3, 1, 0}, AZ::RHI::Format::R8G8B8A8_UNORM, AZStd::move(data)); + EXPECT_TRUE(savedImage.IsValid()); + EXPECT_EQ(savedImage.GetWidth(), 3); + EXPECT_EQ(savedImage.GetHeight(), 1); + EXPECT_EQ(savedImage.GetBuffer(), m_primaryColors3x1); + EXPECT_TRUE(data.empty()); // The data should have been moved + } + + TEST_F(PngFileTests, SaveRgba) + { + PngFile savedImage = PngFile::Create(AZ::RHI::Size{3, 1, 0}, AZ::RHI::Format::R8G8B8A8_UNORM, m_primaryColors3x1); + bool result = savedImage.Save(m_tempPngFilePath.c_str()); + EXPECT_TRUE(result); + + PngFile loadedImage = PngFile::Load(m_tempPngFilePath.c_str()); + EXPECT_TRUE(loadedImage.IsValid()); + EXPECT_EQ(loadedImage.GetBufferFormat(), savedImage.GetBufferFormat()); + EXPECT_EQ(loadedImage.GetWidth(), savedImage.GetWidth()); + EXPECT_EQ(loadedImage.GetHeight(), savedImage.GetHeight()); + EXPECT_EQ(loadedImage.GetBuffer(), savedImage.GetBuffer()); + } + + TEST_F(PngFileTests, SaveRgbaStripAlpha) + { + PngFile savedImage = PngFile::Create(AZ::RHI::Size{3, 1, 0}, AZ::RHI::Format::R8G8B8A8_UNORM, m_primaryColors3x1); + + PngFile::SaveSettings saveSettings; + saveSettings.m_stripAlpha = true; + + bool result = savedImage.Save(m_tempPngFilePath.c_str(), saveSettings); + EXPECT_TRUE(result); + + // The alpha was stripped when saving. Now we load the data without stripping anything and should find + // that there is no alpha channel. + + PngFile loadedImage = PngFile::Load(m_tempPngFilePath.c_str()); + + // The dimensions are the same... + EXPECT_TRUE(loadedImage.IsValid()); + EXPECT_EQ(loadedImage.GetWidth(), savedImage.GetWidth()); + EXPECT_EQ(loadedImage.GetHeight(), savedImage.GetHeight()); + + // ... but the format is different + EXPECT_NE(loadedImage.GetBufferFormat(), savedImage.GetBufferFormat()); + EXPECT_EQ(loadedImage.GetBufferFormat(), PngFile::Format::RGB); + + // ... and the loaded data is smaller + EXPECT_NE(loadedImage.GetBuffer(), savedImage.GetBuffer()); + EXPECT_EQ(Color3(loadedImage.GetBuffer().begin() + 0), Color3(255u, 0u, 0u)); + EXPECT_EQ(Color3(loadedImage.GetBuffer().begin() + 3), Color3(0u, 255u, 0u)); + EXPECT_EQ(Color3(loadedImage.GetBuffer().begin() + 6), Color3(0u, 0u, 255u)); + } + + TEST_F(PngFileTests, Error_CreateUnsupportedFormat) + { + AZStd::vector data = m_primaryColors3x1; + + AZStd::string gotErrorMessage; + + PngFile savedImage = PngFile::Create(AZ::RHI::Size{3, 1, 0}, AZ::RHI::Format::R32_UINT, data, + [&gotErrorMessage](const char* errorMessage) { gotErrorMessage = errorMessage; }); + + EXPECT_FALSE(savedImage.IsValid()); + EXPECT_TRUE(gotErrorMessage.find("unsupported format R32_UINT") != AZStd::string::npos); + } + + TEST_F(PngFileTests, Error_CreateIncorrectBufferSize) + { + AZStd::vector data = m_primaryColors3x1; + + AZStd::string gotErrorMessage; + + PngFile savedImage = PngFile::Create(AZ::RHI::Size{3, 2, 0}, AZ::RHI::Format::R8G8B8A8_UNORM, data, + [&gotErrorMessage](const char* errorMessage) { gotErrorMessage = errorMessage; }); + + EXPECT_FALSE(savedImage.IsValid()); + EXPECT_TRUE(gotErrorMessage.find("does not match") != AZStd::string::npos); + } + + TEST_F(PngFileTests, Error_LoadFileNotFound) + { + AZStd::string gotErrorMessage; + + PngFile::LoadSettings loadSettings; + loadSettings.m_errorHandler = [&gotErrorMessage](const char* errorMessage) { gotErrorMessage = errorMessage; }; + + PngFile image = PngFile::Load((m_testImageFolder / "DoesNotExist.png").c_str(), loadSettings); + EXPECT_FALSE(image.IsValid()); + EXPECT_TRUE(gotErrorMessage.find("not open file") != AZStd::string::npos); + } + + TEST_F(PngFileTests, Error_LoadEmptyFile) + { + AZStd::string gotErrorMessage; + + PngFile::LoadSettings loadSettings; + loadSettings.m_errorHandler = [&gotErrorMessage](const char* errorMessage) { gotErrorMessage = errorMessage; }; + + PngFile image = PngFile::Load((m_testImageFolder / "EmptyFile.png").c_str(), loadSettings); + EXPECT_FALSE(image.IsValid()); + EXPECT_TRUE(gotErrorMessage.find("Invalid png header") != AZStd::string::npos); + } + + TEST_F(PngFileTests, Error_LoadNotPngFile) + { + AZStd::string gotErrorMessage; + + PngFile::LoadSettings loadSettings; + loadSettings.m_errorHandler = [&gotErrorMessage](const char* errorMessage) { gotErrorMessage = errorMessage; }; + + PngFile image = PngFile::Load((m_testImageFolder / "ColorChart_rgba.jpg").c_str(), loadSettings); + EXPECT_FALSE(image.IsValid()); + EXPECT_TRUE(gotErrorMessage.find("Invalid png header") != AZStd::string::npos); + } + + TEST_F(PngFileTests, Error_SaveInvalidPngFile) + { + AZStd::string gotErrorMessage; + + PngFile::SaveSettings saveSettings; + saveSettings.m_errorHandler = [&gotErrorMessage](const char* errorMessage) { gotErrorMessage = errorMessage; }; + + PngFile savedImage; + bool result = savedImage.Save(m_tempPngFilePath.c_str(), saveSettings); + EXPECT_FALSE(result); + EXPECT_TRUE(gotErrorMessage.find("PngFile is invalid") != AZStd::string::npos); + EXPECT_FALSE(AZ::IO::FileIOBase::GetInstance()->Exists(m_tempPngFilePath.c_str())); + } +} diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/.gitignore b/Gems/Atom/Utils/Code/Tests/PngTestImages/.gitignore new file mode 100644 index 0000000000..ea08b96982 --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngTestImages/.gitignore @@ -0,0 +1 @@ +temp.png \ No newline at end of file diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgb.png b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgb.png new file mode 100644 index 0000000000..4dc14cc8eb --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af0d0d079354495ff96aa266ecb4092d679e6c5a952e8b2d4ee743e538d54809 +size 126 diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgba.jpg b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgba.jpg new file mode 100644 index 0000000000..ea6f2283bd --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgba.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01cad8dd75c9a26169e858960817424362c16cbf2a8df8bc55857f6172ce2526 +size 834 diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgba.png b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgba.png new file mode 100644 index 0000000000..943208e2cf --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorChart_rgba.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ddb5f70eaf72fe09add6cc7cdf7cbba2d327ab312bb9bde73d7f456f80b8d6e +size 141 diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorPalette_2bit.png b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorPalette_2bit.png new file mode 100644 index 0000000000..38bdbc9755 --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngTestImages/ColorPalette_2bit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b50e93bbbd320d69752df2c25b4118c0198226a0d230781a6ed93f89b7eea053 +size 142 diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/EmptyFile.png b/Gems/Atom/Utils/Code/Tests/PngTestImages/EmptyFile.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/Gradient_rgb_16bpc.png b/Gems/Atom/Utils/Code/Tests/PngTestImages/Gradient_rgb_16bpc.png new file mode 100644 index 0000000000..c28c2baf36 --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngTestImages/Gradient_rgb_16bpc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb56e8bf15a4727bcebba579cb97a36e1f26e4a4870b2b4a38bdbd4b4bd076fd +size 127 diff --git a/Gems/Atom/Utils/Code/Tests/PngTestImages/GrayPalette_1bit.png b/Gems/Atom/Utils/Code/Tests/PngTestImages/GrayPalette_1bit.png new file mode 100644 index 0000000000..752e100691 --- /dev/null +++ b/Gems/Atom/Utils/Code/Tests/PngTestImages/GrayPalette_1bit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:710fd5c80af49a42249a471ded6c9119be79d6748218073bb8297ffb4b4e62d1 +size 137 diff --git a/Gems/Atom/Utils/Code/atom_utils_files.cmake b/Gems/Atom/Utils/Code/atom_utils_files.cmake index b1f8170317..dd4654b738 100644 --- a/Gems/Atom/Utils/Code/atom_utils_files.cmake +++ b/Gems/Atom/Utils/Code/atom_utils_files.cmake @@ -23,6 +23,7 @@ set(FILES Include/Atom/Utils/ImGuiShaderMetrics.inl Include/Atom/Utils/ImGuiTransientAttachmentProfiler.h Include/Atom/Utils/ImGuiTransientAttachmentProfiler.inl + Include/Atom/Utils/PngFile.h Include/Atom/Utils/PpmFile.h Include/Atom/Utils/StableDynamicArray.h Include/Atom/Utils/StableDynamicArray.inl @@ -31,6 +32,7 @@ set(FILES Include/Atom/Utils/AssetCollectionAsyncLoader.h Source/DdsFile.cpp Source/ImageComparison.cpp + Source/PngFile.cpp Source/PpmFile.cpp Source/Utils.cpp Source/AssetCollectionAsyncLoader.cpp diff --git a/Gems/Atom/Utils/Code/atom_utils_tests_files.cmake b/Gems/Atom/Utils/Code/atom_utils_tests_files.cmake index 9069eeb682..5b43758a60 100644 --- a/Gems/Atom/Utils/Code/atom_utils_tests_files.cmake +++ b/Gems/Atom/Utils/Code/atom_utils_tests_files.cmake @@ -8,5 +8,6 @@ set(FILES Tests/ImageComparisonTests.cpp + Tests/PngFileTests.cpp Tests/StableDynamicArrayTests.cpp ) diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp index 5711e3ff6e..cdb941546d 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp @@ -46,7 +46,7 @@ static void DumfontTexture(IConsoleCmdArgs* cmdArgs) if (fontName && *fontName && *fontName != '0') { - AZStd::string fontFilePath("@devroot@/"); + AZStd::string fontFilePath("@engroot@/"); fontFilePath += fontName; fontFilePath += ".bmp"; diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp index c5268b427f..86b3011836 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp @@ -1726,7 +1726,7 @@ void AZ::FFont::DrawScreenAlignedText3d( { return; } - AZ::Vector3 positionNDC = AzFramework::WorldToScreenNDC( + AZ::Vector3 positionNDC = AzFramework::WorldToScreenNdc( params.m_position, currentView->GetWorldToViewMatrix(), currentView->GetViewToClipMatrix() diff --git a/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.cpp b/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.cpp index bf356fa4b5..7d659ebb7a 100644 --- a/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.cpp +++ b/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.cpp @@ -183,15 +183,6 @@ namespace AZ::Render DrawFramerate(); } - void AtomViewportDisplayInfoSystemComponent::OnFrameEnd() - { - auto currentTime = AZStd::chrono::system_clock::now(); - if (!m_fpsHistory.empty()) - { - m_fpsHistory.back().m_endFrameTime = currentTime; - } - } - AtomBridge::ViewportInfoDisplayState AtomViewportDisplayInfoSystemComponent::GetDisplayState() const { return aznumeric_cast(r_displayInfo.operator int()); @@ -257,11 +248,11 @@ namespace AZ::Render void AtomViewportDisplayInfoSystemComponent::UpdateFramerate() { auto currentTime = AZStd::chrono::system_clock::now(); - while (!m_fpsHistory.empty() && (currentTime - m_fpsHistory.front().m_beginFrameTime) > m_fpsInterval) + while (!m_fpsHistory.empty() && (currentTime - m_fpsHistory.front()) > m_fpsInterval) { m_fpsHistory.pop_front(); } - m_fpsHistory.push_back(FrameTimingInfo(currentTime)); + m_fpsHistory.push_back(currentTime); } void AtomViewportDisplayInfoSystemComponent::DrawFramerate() @@ -270,31 +261,25 @@ namespace AZ::Render double minFPS = DBL_MAX; double maxFPS = 0; AZStd::chrono::duration deltaTime; - AZStd::chrono::milliseconds totalFrameMS(0); for (const auto& time : m_fpsHistory) { if (lastTime.has_value()) { - deltaTime = time.m_beginFrameTime - lastTime.value(); + deltaTime = time - lastTime.value(); double fps = AZStd::chrono::seconds(1) / deltaTime; minFPS = AZStd::min(minFPS, fps); maxFPS = AZStd::max(maxFPS, fps); } - lastTime = time.m_beginFrameTime; - - if (time.m_endFrameTime.has_value()) - { - totalFrameMS += time.m_endFrameTime.value() - time.m_beginFrameTime; - } + lastTime = time; } double averageFPS = 0; double averageFrameMs = 0; if (m_fpsHistory.size() > 1) { - deltaTime = m_fpsHistory.back().m_beginFrameTime - m_fpsHistory.front().m_beginFrameTime; - averageFPS = AZStd::chrono::seconds(m_fpsHistory.size() - 1) / deltaTime; - averageFrameMs = aznumeric_cast(totalFrameMS.count()) / (m_fpsHistory.size() - 1); + deltaTime = m_fpsHistory.back() - m_fpsHistory.front(); + averageFPS = AZStd::chrono::seconds(m_fpsHistory.size()) / deltaTime; + averageFrameMs = 1000.0f/averageFPS; } const double frameIntervalSeconds = m_fpsInterval.count(); @@ -303,7 +288,7 @@ namespace AZ::Render AZStd::string::format( "FPS %.1f [%.0f..%.0f], %.1fms/frame, avg over %.1fs", averageFPS, - minFPS == DBL_MAX ? 0.0 : minFPS, + minFPS, maxFPS, averageFrameMs, frameIntervalSeconds), diff --git a/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.h b/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.h index 689cfdb43b..1d53e188d0 100644 --- a/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.h +++ b/Gems/AtomLyIntegration/AtomViewportDisplayInfo/Code/Source/AtomViewportDisplayInfoSystemComponent.h @@ -45,7 +45,6 @@ namespace AZ // AZ::RPI::ViewportContextNotificationBus::Handler overrides... void OnRenderTick() override; - void OnFrameEnd() override; // AZ::AtomBridge::AtomViewportInfoDisplayRequestBus::Handler overrides... AtomBridge::ViewportInfoDisplayState GetDisplayState() const override; @@ -62,8 +61,6 @@ namespace AZ void DrawPassInfo(); void DrawFramerate(); - void UpdateScene(AZ::RPI::ScenePtr scene); - static constexpr float BaseFontSize = 0.7f; AZStd::string m_rendererDescription; @@ -71,17 +68,7 @@ namespace AZ AzFramework::FontDrawInterface* m_fontDrawInterface = nullptr; float m_lineSpacing; AZStd::chrono::duration m_fpsInterval = AZStd::chrono::seconds(1); - struct FrameTimingInfo - { - AZStd::chrono::system_clock::time_point m_beginFrameTime; - AZStd::optional m_endFrameTime; - - explicit FrameTimingInfo(AZStd::chrono::system_clock::time_point beginFrameTime) - : m_beginFrameTime(beginFrameTime) - { - } - }; - AZStd::deque m_fpsHistory; + AZStd::deque m_fpsHistory; AZStd::optional m_lastMemoryUpdate; bool m_updateRootPassQuery = true; }; diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Include/AtomLyIntegration/CommonFeatures/Material/MaterialComponentBus.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Include/AtomLyIntegration/CommonFeatures/Material/MaterialComponentBus.h index ace16ba6ca..ed7f1564ac 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Include/AtomLyIntegration/CommonFeatures/Material/MaterialComponentBus.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Include/AtomLyIntegration/CommonFeatures/Material/MaterialComponentBus.h @@ -151,7 +151,9 @@ namespace AZ //! Returns the list of all ModelMaterialSlot's for the model, across all LODs. virtual RPI::ModelMaterialSlotMap GetModelMaterialSlots() const = 0; + //! Returns the available, overridable material slots and the default assigned materials virtual MaterialAssignmentMap GetMaterialAssignments() const = 0; + virtual AZStd::unordered_set GetModelUvNames() const = 0; }; using MaterialReceiverRequestBus = EBus; @@ -161,6 +163,7 @@ namespace AZ : public ComponentBus { public: + //! Notification that overridable material slots are available or have changed virtual void OnMaterialAssignmentsChanged() = 0; }; using MaterialReceiverNotificationBus = EBus; diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/AttachmentComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/AttachmentComponent.cpp index ac37e293b9..ee66518779 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/AttachmentComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/AttachmentComponent.cpp @@ -6,6 +6,7 @@ * */ #include "AttachmentComponent.h" +#include #include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp index 878eb51efb..b10a3e6695 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace AZ { diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp index 49b31388ad..dd8266c1ca 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -229,7 +230,7 @@ namespace AZ { DecalNotificationBus::Event(m_entityId, &DecalNotifications::OnMaterialChanged, m_configuration.m_materialAsset); - if (m_featureProcessor && m_configuration.m_materialAsset.GetId().IsValid()) + if (m_featureProcessor) { m_featureProcessor->SetDecalMaterial(m_handle, m_configuration.m_materialAsset.GetId()); } diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp index c5d61dd54a..f8865e8d34 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp @@ -192,7 +192,7 @@ namespace AZ u32 EditorDecalComponent::OnConfigurationChanged() { - BaseClass::OnConfigurationChanged(); + m_controller.ConfigurationChanged(); return Edit::PropertyRefreshLevels::AttributesAndValues; } diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp index 8aec22e22c..8b864613c4 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp index 013a8ee1b4..4363ac1a62 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include AZ_PUSH_DISABLE_WARNING(4251 4800, "-Wunknown-warning-option") // disable warnings spawned by QT @@ -388,7 +389,7 @@ namespace AZ // create the full paths char projectPath[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN); AZStd::string irradianceTextureFullPath; AzFramework::StringFunc::Path::Join(projectPath, irradianceTextureRelativePath.c_str(), irradianceTextureFullPath, true, true); @@ -480,7 +481,7 @@ namespace AZ AZStd::string fullPath; char projectPath[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN); if (!relativePath.empty()) { diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/ImageBasedLightComponentConfig.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/ImageBasedLightComponentConfig.cpp index c98d5be5ef..8ddd727076 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/ImageBasedLightComponentConfig.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/ImageBasedLightComponentConfig.cpp @@ -7,6 +7,7 @@ */ #include +#include #include namespace AZ diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp index a3152faf87..665adcd568 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp @@ -88,6 +88,12 @@ namespace AZ AZ::Data::AssetId materialAssetId = {}; MaterialComponentRequestBus::EventResult( materialAssetId, m_entityId, &MaterialComponentRequestBus::Events::GetMaterialOverride, m_materialAssignmentId); + if (!materialAssetId.IsValid()) + { + MaterialComponentRequestBus::EventResult( + materialAssetId, m_entityId, &MaterialComponentRequestBus::Events::GetDefaultMaterialAssetId, + m_materialAssignmentId); + } if (!materialAssetId.IsValid()) { @@ -169,7 +175,7 @@ namespace AZ void MaterialPropertyInspector::AddDetailsGroup() { - const AZStd::string& groupNameId = "Details"; + const AZStd::string& groupName = "Details"; const AZStd::string& groupDisplayName = "Details"; const AZStd::string& groupDescription = ""; @@ -235,15 +241,15 @@ namespace AZ propertyGroupContainer->layout()->addWidget(materialInfoWidget); - AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupContainer); + AddGroup(groupName, groupDisplayName, groupDescription, propertyGroupContainer); } void MaterialPropertyInspector::AddUvNamesGroup() { - const AZStd::string groupNameId = AZ::RPI::UvGroupName; + const AZStd::string groupName = AZ::RPI::UvGroupName; const AZStd::string groupDisplayName = "UV Sets"; const AZStd::string groupDescription = "UV set names in this material, which can be renamed to match those in the model."; - auto& group = m_groups[groupNameId]; + auto& group = m_groups[groupName]; const RPI::MaterialUvNameMap& uvNameMap = m_editData.m_materialAsset->GetMaterialTypeAsset()->GetUvNameMap(); group.m_properties.reserve(uvNameMap.size()); @@ -257,8 +263,8 @@ namespace AZ propertyConfig = {}; propertyConfig.m_dataType = AtomToolsFramework::DynamicPropertyType::String; - propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupNameId, shaderInputStr).GetCStr(); - propertyConfig.m_nameId = shaderInputStr; + propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupName, shaderInputStr).GetCStr(); + propertyConfig.m_name = shaderInputStr; propertyConfig.m_displayName = shaderInputStr; propertyConfig.m_groupName = groupDisplayName; propertyConfig.m_description = shaderInputStr; @@ -271,8 +277,9 @@ namespace AZ // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, nullptr, group.TYPEINFO_Uuid(), this, this, GetSaveStateKeyForGroup(groupNameId)); - AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupName), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); + AddGroup(groupName, groupDisplayName, groupDescription, propertyGroupWidget); } void MaterialPropertyInspector::Populate() @@ -285,13 +292,13 @@ namespace AZ // Copy all of the properties from the material asset to the source data that will be exported for (const auto& groupDefinition : m_editData.m_materialTypeSourceData.GetGroupDefinitionsInDisplayOrder()) { - const AZStd::string& groupNameId = groupDefinition.m_nameId; - const AZStd::string& groupDisplayName = !groupDefinition.m_displayName.empty() ? groupDefinition.m_displayName : groupNameId; + const AZStd::string& groupName = groupDefinition.m_name; + const AZStd::string& groupDisplayName = !groupDefinition.m_displayName.empty() ? groupDefinition.m_displayName : groupName; const AZStd::string& groupDescription = !groupDefinition.m_description.empty() ? groupDefinition.m_description : groupDisplayName; - auto& group = m_groups[groupNameId]; + auto& group = m_groups[groupName]; const auto& propertyLayout = m_editData.m_materialTypeSourceData.m_propertyLayout; - const auto& propertyListItr = propertyLayout.m_properties.find(groupNameId); + const auto& propertyListItr = propertyLayout.m_properties.find(groupName); if (propertyListItr != propertyLayout.m_properties.end()) { group.m_properties.reserve(propertyListItr->second.size()); @@ -300,7 +307,7 @@ namespace AZ AtomToolsFramework::DynamicPropertyConfig propertyConfig; // Assign id before conversion so it can be used in dynamic description - propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupNameId, propertyDefinition.m_nameId).GetFullName(); + propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupName, propertyDefinition.m_name).GetFullName(); AtomToolsFramework::ConvertToPropertyConfig(propertyConfig, propertyDefinition); @@ -316,8 +323,9 @@ namespace AZ // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, nullptr, group.TYPEINFO_Uuid(), this, this, GetSaveStateKeyForGroup(groupNameId)); - AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupName), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); + AddGroup(groupName, groupDisplayName, groupDescription, propertyGroupWidget); } AddGroupsEnd(); @@ -496,25 +504,32 @@ namespace AZ } } - AZ::Crc32 MaterialPropertyInspector::GetSaveStateKeyForGroup(const AZStd::string& groupNameId) const + AZ::Crc32 MaterialPropertyInspector::GetGroupSaveStateKey(const AZStd::string& groupName) const { return AZ::Crc32(AZStd::string::format( "MaterialPropertyInspector::PropertyGroup::%s::%s", m_editData.m_materialAssetId.ToString().c_str(), - groupNameId.c_str())); + groupName.c_str())); } - bool MaterialPropertyInspector::AreNodePropertyValuesEqual( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) + bool MaterialPropertyInspector::IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const { - AZ_UNUSED(source); - const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); - return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(node); + return property && !AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + } + + const char* MaterialPropertyInspector::GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const + { + if (IsInstanceNodePropertyModifed(node)) + { + return ":/PropertyEditor/Resources/changed_data_item.png"; + } + return ":/PropertyEditor/Resources/blank.png"; } bool MaterialPropertyInspector::SaveMaterial() const { const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + + QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); @@ -728,11 +743,16 @@ namespace AZ void MaterialPropertyInspector::UpdateUI() { - AZ::Data::AssetId assetId; + AZ::Data::AssetId materialAssetId = {}; MaterialComponentRequestBus::EventResult( - assetId, m_entityId, &MaterialComponentRequestBus::Events::GetMaterialOverride, m_materialAssignmentId); + materialAssetId, m_entityId, &MaterialComponentRequestBus::Events::GetMaterialOverride, m_materialAssignmentId); + if (!materialAssetId.IsValid()) + { + MaterialComponentRequestBus::EventResult( + materialAssetId, m_entityId, &MaterialComponentRequestBus::Events::GetDefaultMaterialAssetId, m_materialAssignmentId); + } - if (IsLoaded() && m_editData.m_materialAssetId == assetId) + if (IsLoaded() && m_editData.m_materialAssetId == materialAssetId) { LoadOverridesFromEntity(); } diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h index 11eb2cec51..048c1e19cb 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h @@ -100,9 +100,9 @@ namespace AZ void RunEditorMaterialFunctors(); void UpdateMaterialInstanceProperty(const AtomToolsFramework::DynamicProperty& property); - AZ::Crc32 GetSaveStateKeyForGroup(const AZStd::string& groupNameId) const; - static bool AreNodePropertyValuesEqual( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target); + AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupName) const; + bool IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const; + const char* GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const; // Tracking the property that is actively being edited in the inspector const AtomToolsFramework::DynamicProperty* m_activeProperty = {}; diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.cpp index 363221d3fc..f5d38f48c4 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -117,10 +118,16 @@ namespace AZ } }; + AZ::Data::AssetId EditorMaterialComponentSlot::GetActiveAssetId() const + { + return m_materialAsset.GetId().IsValid() ? m_materialAsset.GetId() : GetDefaultAssetId(); + } + AZ::Data::AssetId EditorMaterialComponentSlot::GetDefaultAssetId() const { AZ::Data::AssetId assetId; - MaterialComponentRequestBus::EventResult(assetId, m_entityId, &MaterialComponentRequestBus::Events::GetDefaultMaterialAssetId, m_id); + MaterialComponentRequestBus::EventResult( + assetId, m_entityId, &MaterialComponentRequestBus::Events::GetDefaultMaterialAssetId, m_id); return assetId; } @@ -134,7 +141,7 @@ namespace AZ bool EditorMaterialComponentSlot::HasSourceData() const { // The slot only has valid source data if the source path is valid and the file has the correct extension - const AZStd::string& sourcePath = AZ::RPI::AssetUtils::GetSourcePathByAssetId(m_materialAsset.GetId()); + const AZStd::string& sourcePath = AZ::RPI::AssetUtils::GetSourcePathByAssetId(GetActiveAssetId()); return !sourcePath.empty() && AZ::StringFunc::Path::IsExtension(sourcePath.c_str(), AZ::RPI::MaterialSourceData::Extension); } @@ -219,7 +226,7 @@ namespace AZ void EditorMaterialComponentSlot::OpenMaterialEditor() const { - const AZStd::string& sourcePath = AZ::RPI::AssetUtils::GetSourcePathByAssetId(m_materialAsset.GetId()); + const AZStd::string& sourcePath = AZ::RPI::AssetUtils::GetSourcePathByAssetId(GetActiveAssetId()); if (!sourcePath.empty() && AZ::StringFunc::Path::IsExtension(sourcePath.c_str(), AZ::RPI::MaterialSourceData::Extension)) { EditorMaterialSystemComponentRequestBus::Broadcast( @@ -235,7 +242,7 @@ namespace AZ void EditorMaterialComponentSlot::OpenUvNameMapInspector() { - if (m_materialAsset.GetId().IsValid()) + if (GetActiveAssetId().IsValid()) { AZStd::unordered_set modelUvNames; MaterialReceiverRequestBus::EventResult(modelUvNames, m_entityId, &MaterialReceiverRequestBus::Events::GetModelUvNames); @@ -251,7 +258,7 @@ namespace AZ }; if (EditorMaterialComponentInspector::OpenInspectorDialog( - m_materialAsset.GetId(), matModUvOverrides, modelUvNames, applyMatModUvOverrideChangedCallback)) + GetActiveAssetId(), matModUvOverrides, modelUvNames, applyMatModUvOverrideChangedCallback)) { OnDataChanged(); } @@ -273,10 +280,10 @@ namespace AZ action->setEnabled(HasSourceData()); action = menu.addAction("Edit Material Instance...", [this]() { OpenMaterialInspector(); }); - action->setEnabled(m_materialAsset.GetId().IsValid()); + action->setEnabled(GetActiveAssetId().IsValid()); action = menu.addAction("Edit Material Instance UV Map...", [this]() { OpenUvNameMapInspector(); }); - action->setEnabled(m_materialAsset.GetId().IsValid()); + action->setEnabled(GetActiveAssetId().IsValid()); menu.addSeparator(); diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.h index 01e357f1bb..377fe9a18b 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentSlot.h @@ -30,6 +30,7 @@ namespace AZ static void Reflect(ReflectContext* context); static bool ConvertVersion(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement); + AZ::Data::AssetId GetActiveAssetId() const; AZ::Data::AssetId GetDefaultAssetId() const; AZStd::string GetLabel() const; bool HasSourceData() const; diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentUtil.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentUtil.cpp index e7059ccdf7..070c42fd7c 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentUtil.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentUtil.cpp @@ -137,8 +137,8 @@ namespace AZ // Copy all of the properties from the material asset to the source data that will be exported result = true; - editData.m_materialTypeSourceData.EnumerateProperties([&](const AZStd::string& groupNameId, const AZStd::string& propertyNameId, const auto& propertyDefinition) { - const AZ::RPI::MaterialPropertyId propertyId(groupNameId, propertyNameId); + editData.m_materialTypeSourceData.EnumerateProperties([&](const AZStd::string& groupName, const AZStd::string& propertyName, const auto& propertyDefinition) { + const AZ::RPI::MaterialPropertyId propertyId(groupName, propertyName); const AZ::RPI::MaterialPropertyIndex propertyIndex = editData.m_materialAsset->GetMaterialPropertiesLayout()->FindPropertyIndex(propertyId.GetFullName()); @@ -170,7 +170,7 @@ namespace AZ return true; } - exportData.m_properties[groupNameId][propertyDefinition.m_nameId].m_value = propertyValue; + exportData.m_properties[groupName][propertyDefinition.m_name].m_value = propertyValue; return true; }); diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialModelUvNameMapInspector.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialModelUvNameMapInspector.cpp index 91b519a06b..64bc54bae8 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialModelUvNameMapInspector.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialModelUvNameMapInspector.cpp @@ -81,7 +81,7 @@ namespace AZ { AddGroupsBegin(); - const AZStd::string groupNameId = "ModelUvMap"; + const AZStd::string groupName = "ModelUvMap"; const AZStd::string groupDisplayName = "Material to Model UV Map"; const AZStd::string groupDescription = "Custom map that maps a UV name from the material to one from the model."; @@ -96,8 +96,8 @@ namespace AZ const AZStd::string materialUvName = m_materialUvNames[i].m_uvName.GetStringView(); propertyConfig.m_dataType = AtomToolsFramework::DynamicPropertyType::Enum; - propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupNameId, shaderInput).GetFullName(); - propertyConfig.m_nameId = shaderInput; + propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupName, shaderInput).GetFullName(); + propertyConfig.m_name = shaderInput; propertyConfig.m_displayName = materialUvName; propertyConfig.m_description = shaderInput; propertyConfig.m_defaultValue = 0u; @@ -108,7 +108,7 @@ namespace AZ m_group.m_properties.back().SetValue(AZStd::any(m_modelUvNameIndices[i])); } - AddGroup(groupNameId, groupDisplayName, groupDescription, + AddGroup(groupName, groupDisplayName, groupDescription, new AtomToolsFramework::InspectorPropertyGroupWidget(&m_group, nullptr, m_group.TYPEINFO_Uuid(), this)); AddGroupsEnd(); @@ -238,7 +238,7 @@ namespace AZ ResetModelUvNameIndices(); - const AZStd::string groupNameId = "ModelUvMap"; + const AZStd::string groupName = "ModelUvMap"; size_t uvSize = m_materialUvNames.size(); for (size_t i = 0u; i < uvSize; ++i) @@ -248,8 +248,8 @@ namespace AZ const AZStd::string materialUvName = m_materialUvNames[i].m_uvName.GetStringView(); propertyConfig.m_dataType = AtomToolsFramework::DynamicPropertyType::Enum; - propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupNameId, shaderInput).GetFullName(); - propertyConfig.m_nameId = shaderInput; + propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupName, shaderInput).GetFullName(); + propertyConfig.m_name = shaderInput; propertyConfig.m_displayName = materialUvName; propertyConfig.m_description = shaderInput; propertyConfig.m_defaultValue = 0u; diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialSystemComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialSystemComponent.cpp index 83ddbf46c5..a6b595940f 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialSystemComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialSystemComponent.cpp @@ -137,7 +137,7 @@ namespace AZ arguments.append(QString("--project-path=%1").arg(projectPath.c_str())); } - AtomToolsFramework::LaunchTool("MaterialEditor", ".exe", arguments); + AtomToolsFramework::LaunchTool("MaterialEditor", AZ_TRAIT_OS_EXECUTABLE_EXTENSION, arguments); } void EditorMaterialSystemComponent::OpenMaterialInspector( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.cpp index 1d9f1e81dd..4c26042a26 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -110,12 +111,14 @@ namespace AZ m_queuedMaterialUpdateNotification = false; MaterialComponentRequestBus::Handler::BusConnect(m_entityId); + MaterialReceiverNotificationBus::Handler::BusConnect(m_entityId); LoadMaterials(); } void MaterialComponentController::Deactivate() { MaterialComponentRequestBus::Handler::BusDisconnect(); + MaterialReceiverNotificationBus::Handler::BusDisconnect(); TickBus::Handler::BusDisconnect(); ReleaseMaterials(); @@ -142,59 +145,29 @@ namespace AZ { InitializeMaterialInstance(asset); } - + void MaterialComponentController::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) { - AZStd::unordered_set propertyOverrides; - AZStd::swap(m_queuedPropertyOverrides, propertyOverrides); + AZStd::unordered_set materialsWithDirtyProperties; + AZStd::swap(m_materialsWithDirtyProperties, materialsWithDirtyProperties); // Iterate through all MaterialAssignmentId's that have property overrides and attempt to apply them // if material instance is already compiling, delay application of property overrides until next frame - for (const auto& materialAssignmentId : propertyOverrides) + for (const auto& materialAssignmentId : materialsWithDirtyProperties) { const auto materialIt = m_configuration.m_materials.find(materialAssignmentId); - if (materialIt == m_configuration.m_materials.end()) - { - //Skip materials that do not exist in the map - continue; - } - - auto materialInstance = materialIt->second.m_materialInstance; - if (!materialInstance) + if (materialIt != m_configuration.m_materials.end()) { - //Skip materials with an invalid instances - continue; - } - - if (!materialInstance->CanCompile()) - { - //If a material cannot currently be compiled then it must be queued again - m_queuedPropertyOverrides.emplace(materialAssignmentId); - continue; - } - - const auto& propertyOverrides2 = materialIt->second.m_propertyOverrides; - for (auto& propertyPair : propertyOverrides2) - { - if (propertyPair.second.empty()) + if (!materialIt->second.ApplyProperties()) { - continue; + // If a material cannot currently be compiled then it must be queued again + m_materialsWithDirtyProperties.emplace(materialAssignmentId); } - - const auto& materialPropertyIndex = materialInstance->FindPropertyIndex(propertyPair.first); - if (materialPropertyIndex.IsNull()) - { - continue; - } - - materialInstance->SetPropertyValue(materialPropertyIndex, AZ::RPI::MaterialPropertyValue::FromAny(propertyPair.second)); } - - materialInstance->Compile(); } - // Only disconnect from tick bus and send notification after all pending properties have been applied - if (m_queuedPropertyOverrides.empty()) + // Only disconnect from tick bus and send notification after all pending properties have been applied + if (m_materialsWithDirtyProperties.empty()) { if (m_queuedMaterialUpdateNotification) { @@ -212,15 +185,35 @@ namespace AZ Data::AssetBus::MultiHandler::BusDisconnect(); bool anyQueued = false; - for (auto& materialPair : m_configuration.m_materials) + auto queueAsset = [&anyQueued, this](AZ::Data::Asset& materialAsset) -> bool { - auto& materialAsset = materialPair.second.m_materialAsset; - - if (materialAsset.GetId().IsValid() && !Data::AssetBus::MultiHandler::BusIsConnectedId(materialAsset.GetId())) + if (materialAsset.GetId().IsValid() && !this->Data::AssetBus::MultiHandler::BusIsConnectedId(materialAsset.GetId())) { anyQueued = true; materialAsset.QueueLoad(); - Data::AssetBus::MultiHandler::BusConnect(materialAsset.GetId()); + this->Data::AssetBus::MultiHandler::BusConnect(materialAsset.GetId()); + return true; + } + return false; + }; + + for (auto& materialPair : m_configuration.m_materials) + { + if (materialPair.second.m_materialInstancePreCreated) + { + continue; + } + + materialPair.second.m_defaultMaterialAsset = {}; + if (!queueAsset(materialPair.second.m_materialAsset)) + { + // Only assign and load the default material if there was no material override and there are propoerties to apply + if (!materialPair.second.m_propertyOverrides.empty() || !materialPair.second.m_matModUvOverrides.empty()) + { + materialPair.second.m_defaultMaterialAsset = AZ::Data::Asset( + GetDefaultMaterialAssetId(materialPair.first), AZ::AzTypeInfo::Uuid()); + queueAsset(materialPair.second.m_defaultMaterialAsset); + } } } @@ -229,14 +222,12 @@ namespace AZ ReleaseMaterials(); } } - + void MaterialComponentController::InitializeMaterialInstance(const Data::Asset& asset) { bool allReady = true; - - for (auto& materialPair : m_configuration.m_materials) + auto updateAsset = [&](AZ::Data::Asset& materialAsset) { - auto& materialAsset = materialPair.second.m_materialAsset; if (materialAsset.GetId() == asset.GetId()) { materialAsset = asset; @@ -246,6 +237,12 @@ namespace AZ { allReady = false; } + }; + + for (auto& materialPair : m_configuration.m_materials) + { + updateAsset(materialPair.second.m_materialAsset); + updateAsset(materialPair.second.m_defaultMaterialAsset); } if (allReady) @@ -268,11 +265,7 @@ namespace AZ for (auto& materialPair : m_configuration.m_materials) { - if (materialPair.second.m_materialAsset.GetId().IsValid()) - { - materialPair.second.m_materialAsset.Release(); - materialPair.second.m_materialInstance = nullptr; - } + materialPair.second.Release(); } MaterialComponentNotificationBus::Event(m_entityId, &MaterialComponentNotifications::OnMaterialsUpdated, m_configuration.m_materials); @@ -334,7 +327,7 @@ namespace AZ // this function is called twice once material asset is changed, a temp variable is // needed to prevent material asset going out of scope during second call // before LoadMaterials() is called [LYN-2249] - auto temp = m_configuration.m_materials; + auto temp = m_configuration.m_materials; m_configuration.m_materials = materials; LoadMaterials(); } @@ -440,12 +433,7 @@ namespace AZ AZ::Data::AssetId MaterialComponentController::GetMaterialOverride(const MaterialAssignmentId& materialAssignmentId) const { auto materialIt = m_configuration.m_materials.find(materialAssignmentId); - if (materialIt == m_configuration.m_materials.end()) - { - return {}; - } - - return materialIt->second.m_materialAsset.GetId(); + return materialIt != m_configuration.m_materials.end() ? materialIt->second.m_materialAsset.GetId() : AZ::Data::AssetId(); } void MaterialComponentController::ClearMaterialOverride(const MaterialAssignmentId& materialAssignmentId) @@ -459,18 +447,21 @@ namespace AZ void MaterialComponentController::SetPropertyOverride(const MaterialAssignmentId& materialAssignmentId, const AZStd::string& propertyName, const AZStd::any& value) { auto& materialAssignment = m_configuration.m_materials[materialAssignmentId]; + const bool wasEmpty = materialAssignment.m_propertyOverrides.empty(); + materialAssignment.m_propertyOverrides[AZ::Name(propertyName)] = value; - // When applying property overrides for the first time, new instance needs to be created in case the current instance is already used somewhere else to keep overrides local - if (materialAssignment.m_propertyOverrides.empty()) + if (materialAssignment.RequiresLoading()) { - materialAssignment.m_propertyOverrides[AZ::Name(propertyName)] = value; - materialAssignment.RebuildInstance(); - MaterialComponentNotificationBus::Event(m_entityId, &MaterialComponentNotifications::OnMaterialInstanceCreated, materialAssignment); - QueueMaterialUpdateNotification(); + LoadMaterials(); + return; } - else + + if (wasEmpty != materialAssignment.m_propertyOverrides.empty()) { - materialAssignment.m_propertyOverrides[AZ::Name(propertyName)] = value; + materialAssignment.RebuildInstance(); + MaterialComponentNotificationBus::Event( + m_entityId, &MaterialComponentNotifications::OnMaterialInstanceCreated, materialAssignment); + QueueMaterialUpdateNotification(); } QueuePropertyChanges(materialAssignmentId); @@ -703,6 +694,12 @@ namespace AZ const bool wasEmpty = materialAssignment.m_propertyOverrides.empty(); materialAssignment.m_propertyOverrides = propertyOverrides; + if (materialAssignment.RequiresLoading()) + { + LoadMaterials(); + return; + } + if (wasEmpty != materialAssignment.m_propertyOverrides.empty()) { materialAssignment.RebuildInstance(); @@ -712,14 +709,11 @@ namespace AZ QueuePropertyChanges(materialAssignmentId); } - MaterialPropertyOverrideMap MaterialComponentController::GetPropertyOverrides(const MaterialAssignmentId& materialAssignmentId) const + MaterialPropertyOverrideMap MaterialComponentController::GetPropertyOverrides( + const MaterialAssignmentId& materialAssignmentId) const { const auto materialIt = m_configuration.m_materials.find(materialAssignmentId); - if (materialIt == m_configuration.m_materials.end()) - { - return {}; - } - return materialIt->second.m_propertyOverrides; + return materialIt != m_configuration.m_materials.end() ? materialIt->second.m_propertyOverrides : MaterialPropertyOverrideMap(); } void MaterialComponentController::SetModelUvOverrides( @@ -729,6 +723,12 @@ namespace AZ const bool wasEmpty = materialAssignment.m_matModUvOverrides.empty(); materialAssignment.m_matModUvOverrides = modelUvOverrides; + if (materialAssignment.RequiresLoading()) + { + LoadMaterials(); + return; + } + if (wasEmpty != materialAssignment.m_matModUvOverrides.empty()) { materialAssignment.RebuildInstance(); @@ -742,16 +742,24 @@ namespace AZ const MaterialAssignmentId& materialAssignmentId) const { const auto materialIt = m_configuration.m_materials.find(materialAssignmentId); - if (materialIt == m_configuration.m_materials.end()) + return materialIt != m_configuration.m_materials.end() ? materialIt->second.m_matModUvOverrides : AZ::RPI::MaterialModelUvOverrideMap(); + } + + void MaterialComponentController::OnMaterialAssignmentsChanged() + { + for (const auto& materialPair : m_configuration.m_materials) { - return {}; + if (materialPair.second.RequiresLoading()) + { + LoadMaterials(); + return; + } } - return materialIt->second.m_matModUvOverrides; } void MaterialComponentController::QueuePropertyChanges(const MaterialAssignmentId& materialAssignmentId) { - m_queuedPropertyOverrides.emplace(materialAssignmentId); + m_materialsWithDirtyProperties.emplace(materialAssignmentId); if (!TickBus::Handler::BusIsConnected()) { TickBus::Handler::BusConnect(); diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.h index 2bf15ca3b8..1594456a31 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/MaterialComponentController.h @@ -22,6 +22,7 @@ namespace AZ //! to provide material overrides on a per-entity basis. class MaterialComponentController final : MaterialComponentRequestBus::Handler + , MaterialReceiverNotificationBus::Handler , Data::AssetBus::MultiHandler , TickBus::Handler { @@ -100,6 +101,9 @@ namespace AZ const MaterialAssignmentId& materialAssignmentId, const AZ::RPI::MaterialModelUvOverrideMap& modelUvOverrides) override; AZ::RPI::MaterialModelUvOverrideMap GetModelUvOverrides(const MaterialAssignmentId& materialAssignmentId) const override; + //! MaterialReceiverNotificationBus::Handler overrides... + void OnMaterialAssignmentsChanged() override; + private: AZ_DISABLE_COPY(MaterialComponentController); @@ -121,7 +125,7 @@ namespace AZ EntityId m_entityId; MaterialComponentConfig m_configuration; - AZStd::unordered_set m_queuedPropertyOverrides; + AZStd::unordered_set m_materialsWithDirtyProperties; bool m_queuedMaterialUpdateNotification = false; }; } // namespace Render diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp index 9e0c285001..12b14d8162 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -31,6 +32,23 @@ namespace AZ { namespace Render { + namespace Internal + { + struct MeshComponentNotificationBusHandler final + : public MeshComponentNotificationBus::Handler + , public AZ::BehaviorEBusHandler + { + AZ_EBUS_BEHAVIOR_BINDER( + MeshComponentNotificationBusHandler, "{8B8F4977-817F-4C7C-9141-0E5FF899E1BC}", AZ::SystemAllocator, OnModelReady); + + void OnModelReady( + [[maybe_unused]] const Data::Asset& modelAsset, + [[maybe_unused]] const Data::Instance& model) override + { + Call(FN_OnModelReady); + } + }; + } // namespace Internal namespace MeshComponentControllerVersionUtility { @@ -172,6 +190,12 @@ namespace AZ ->VirtualProperty("MinimumScreenCoverage", "GetMinimumScreenCoverage", "SetMinimumScreenCoverage") ->VirtualProperty("QualityDecayRate", "GetQualityDecayRate", "SetQualityDecayRate") ; + + behaviorContext->EBus("MeshComponentNotificationBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Category, "render") + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Handler(); } } @@ -193,41 +217,13 @@ namespace AZ incompatible.push_back(AZ_CRC("MeshService", 0x71d8a455)); } - // [GFX TODO] [ATOM-13339] Remove the ModelAsset id fix up function in MeshComponentController - // Model id was changed due to fix for [ATOM-13312]. We can remove this code when all the levels are updated. - void FixUpModelAsset(Data::Asset& modelAsset) - { - Data::AssetId assetId; - Data::AssetCatalogRequestBus::BroadcastResult( - assetId, - &Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, - modelAsset.GetHint().c_str(), - AZ::RPI::ModelAsset::TYPEINFO_Uuid(), - false); - if (assetId != modelAsset.GetId()) - { - if (assetId.IsValid()) - { - modelAsset = Data::Asset{ assetId, AZ::RPI::ModelAsset::TYPEINFO_Uuid(), modelAsset.GetHint().c_str() }; - modelAsset.SetAutoLoadBehavior(AZ::Data::AssetLoadBehavior::QueueLoad); - } - else - { - AZ_Error("MeshComponentController", false, "Failed to find asset id for [%s] ", modelAsset.GetHint().c_str()); - } - } - } - MeshComponentController::MeshComponentController(const MeshComponentConfig& config) : m_configuration(config) { - FixUpModelAsset(m_configuration.m_modelAsset); } void MeshComponentController::Activate(const AZ::EntityComponentIdPair& entityComponentIdPair) { - FixUpModelAsset(m_configuration.m_modelAsset); - const AZ::EntityId entityId = entityComponentIdPair.GetEntityId(); m_entityComponentIdPair = entityComponentIdPair; @@ -333,7 +329,7 @@ namespace AZ return model ? model->GetUvNames() : AZStd::unordered_set(); } - void MeshComponentController::OnMaterialsUpdated([[maybe_unused]] const MaterialAssignmentMap& materials) + void MeshComponentController::OnMaterialsUpdated(const MaterialAssignmentMap& materials) { if (m_meshFeatureProcessor) { diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/DisplayMapperComponentConfig.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/DisplayMapperComponentConfig.cpp index 9c137f5b72..f9a427a3a0 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/DisplayMapperComponentConfig.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/DisplayMapperComponentConfig.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp index d06bc981fe..e10a8b14c9 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp @@ -6,9 +6,10 @@ * */ -#include #include #include +#include +#include namespace AZ { diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/GradientWeightModifierComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/GradientWeightModifierComponent.cpp index d38130bef6..3318f84905 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/GradientWeightModifierComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/GradientWeightModifierComponent.cpp @@ -8,6 +8,8 @@ #include +#include + namespace AZ { namespace Render diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentConfig.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentConfig.cpp index f77f67635f..4b1665895f 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentConfig.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentConfig.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentController.cpp index aedb25bb36..4f321ed8b1 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/LookModificationComponentController.cpp @@ -7,6 +7,7 @@ */ #include +#include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/RadiusWeightModifierComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/RadiusWeightModifierComponent.cpp index 53b508c619..d668533807 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/RadiusWeightModifierComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/RadiusWeightModifierComponent.cpp @@ -8,6 +8,8 @@ #include +#include + namespace AZ { namespace Render diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponent.cpp index fd3063fe98..bc3f6f8719 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponent.cpp @@ -8,6 +8,8 @@ #include +#include + namespace AZ { namespace Render diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponentController.cpp index 42898cd188..d4761efa96 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/ShapeWeightModifierComponentController.cpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace AZ { diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp index aa68333108..f325a20ac1 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp @@ -13,7 +13,9 @@ #include #include #include +#include #include +#include #include AZ_PUSH_DISABLE_WARNING(4251 4800, "-Wunknown-warning-option") // disable warnings spawned by QT @@ -319,7 +321,7 @@ namespace AZ } char projectPath[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN); // retrieve the source cubemap path from the configuration // we need to make sure to use the same source cubemap for each bake diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp index 764741a5cf..4022dfda9b 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/HDRiSkyboxComponentConfig.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/HDRiSkyboxComponentConfig.cpp index b86cccf341..288892cddf 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/HDRiSkyboxComponentConfig.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/HDRiSkyboxComponentConfig.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp index 46eb0937bd..6f74627bee 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp @@ -86,7 +86,7 @@ namespace AZ RPI::RenderPipelineDescriptor pipelineDesc; pipelineDesc.m_mainViewTagName = "MainCamera"; pipelineDesc.m_name = data->m_pipelineName; - pipelineDesc.m_rootPassTemplate = "MainPipelineRenderToTexture"; + pipelineDesc.m_rootPassTemplate = "ThumbnailPipelineRenderToTexture"; // We have to set the samples to 4 to match the pipeline passes' setting, otherwise it may lead to device lost issue // [GFX TODO] [ATOM-13551] Default value sand validation required to prevent pipeline crash and device lost pipelineDesc.m_renderSettings.m_multisampleState.m_samples = 4; diff --git a/Gems/AtomTressFX/.gitattributes b/Gems/AtomTressFX/.gitattributes new file mode 100644 index 0000000000..8d27c1e373 --- /dev/null +++ b/Gems/AtomTressFX/.gitattributes @@ -0,0 +1,4 @@ +*.ptx filter=lfs diff=lfs merge=lfs -text +*.tfx filter=lfs diff=lfs merge=lfs -text +*.tfxbone filter=lfs diff=lfs merge=lfs -text +*.tfxmesh filter=lfs diff=lfs merge=lfs -text diff --git a/Gems/AtomTressFX/.gitignore b/Gems/AtomTressFX/.gitignore new file mode 100644 index 0000000000..1ab0eb9149 --- /dev/null +++ b/Gems/AtomTressFX/.gitignore @@ -0,0 +1,4 @@ +.maya_data +.mayaSwatches +.ma.swatches +*.pyc diff --git a/Gems/AtomTressFX/Assets/DefaultWhite.png b/Gems/AtomTressFX/Assets/DefaultWhite.png new file mode 100644 index 0000000000..e93f731efb --- /dev/null +++ b/Gems/AtomTressFX/Assets/DefaultWhite.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7310efe7e71a8de16f32daf3688984e7d7ad3761690bd7af948965c9b5ecd2e +size 132 diff --git a/Gems/AtomTressFX/Assets/Passes/AtomTressFX_MainPipeline.pass b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_MainPipeline.pass new file mode 100644 index 0000000000..84bb85c3e1 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_MainPipeline.pass @@ -0,0 +1,552 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "MainPipeline", + "PassClass": "ParentPass", + "Slots": [ + { + "Name": "SwapChainOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget" + } + ], + "PassRequests": [ + { + "Name": "MorphTargetPass", + "TemplateName": "MorphTargetPassTemplate" + }, + { + "Name": "SkinningPass", + "TemplateName": "SkinningPassTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshOutputStream", + "AttachmentRef": { + "Pass": "MorphTargetPass", + "Attachment": "MorphTargetDeltaOutput" + } + } + ] + }, + { + "Name": "RayTracingAccelerationStructurePass", + "TemplateName": "RayTracingAccelerationStructurePassTemplate" + }, + { + "Name": "DiffuseProbeGridUpdatePass", + "TemplateName": "DiffuseProbeGridUpdatePassTemplate", + "ExecuteAfter": [ + "RayTracingAccelerationStructurePass" + ] + }, + { + "Name": "DepthPrePass", + "TemplateName": "DepthMSAAParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "MotionVectorPass", + "TemplateName": "MotionVectorParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "LightCullingPass", + "TemplateName": "LightCullingParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "DepthMSAA", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "ShadowPass", + "TemplateName": "ShadowParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "OpaquePass", + "TemplateName": "OpaqueParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + + { + // NOTE: HairParentPass does not write into Depth MSAA from Opaque Pass. If new passes downstream + // of HairParentPass will need to use Depth MSAA, HairParentPass will need to be updated to use Depth MSAA + // instead of regular Depth as DepthStencil. Specifically, HairResolvePPLL.pass and the associated + // .azsl file will need to be updated. + "Name": "HairParentPass", + "TemplateName": "HairParentPassTemplate", + "Enabled": true, + "Connections": [ + // Critical to keep DepthLinear as input - used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + { + "LocalSlot": "DepthLinearInput", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "OpaquePass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "RenderTargetInputOnly", + "AttachmentRef": { + "Pass": "OpaquePass", + "Attachment": "Output" + } + }, + + // Shadows resources + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + + // Lighting Resources + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + } + ] + }, + + { + "Name": "TransparentPass", + "TemplateName": "TransparentParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + { + "Name": "DeferredFogPass", + "TemplateName": "DeferredFogPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "InputDepthStencil", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "RenderTargetInputOutput" + } + } + ], + "PassData": { + "$type": "FullscreenTrianglePassData", + "ShaderAsset": { + "FilePath": "Shaders/ScreenSpace/DeferredFog.shader" + }, + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "ReflectionCopyFrameBufferPass", + "TemplateName": "ReflectionCopyFrameBufferPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + { + "Name": "PostProcessPass", + "TemplateName": "PostProcessParentTemplate", + "Connections": [ + { + "LocalSlot": "LightingInput", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "MotionVectors", + "AttachmentRef": { + "Pass": "MotionVectorPass", + "Attachment": "MotionVectorOutput" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "AuxGeomPass", + "TemplateName": "AuxGeomPassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "ColorInputOutput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + } + ], + "PassData": { + "$type": "RasterPassData", + "DrawListTag": "auxgeom", + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "DebugOverlayPass", + "TemplateName": "DebugOverlayParentTemplate", + "Connections": [ + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "RawLightingInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "RawLightingOutput" + } + }, + { + "LocalSlot": "LuminanceMipChainInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "LuminanceMipChainOutput" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "AuxGeomPass", + "Attachment": "ColorInputOutput" + } + } + ] + }, + { + "Name": "UIPass", + "TemplateName": "UIParentTemplate", + "Connections": [ + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "DebugOverlayPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + } + ] + }, + { + "Name": "CopyToSwapChain", + "TemplateName": "FullscreenCopyTemplate", + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "UIPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "Output", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + } + ] + } + } +} diff --git a/Gems/AtomTressFX/Assets/Passes/AtomTressFX_PassTemplates.azasset b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_PassTemplates.azasset new file mode 100644 index 0000000000..a287664286 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_PassTemplates.azasset @@ -0,0 +1,45 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "AssetAliasesSourceData", + "ClassData": { + "AssetPaths": [ + { + "Name": "HairParentPassTemplate", + "Path": "Passes/HairParentPass.pass" + }, + { + "Name": "HairGlobalShapeConstraintsComputePassTemplate", + "Path": "Passes/HairGlobalShapeConstraintsCompute.pass" + }, + { + "Name": "HairCalculateStrandLevelDataComputePassTemplate", + "Path": "Passes/HairCalculateStrandLevelDataCompute.pass" + }, + { + "Name": "HairVelocityShockPropagationComputePassTemplate", + "Path": "Passes/HairVelocityShockPropagationCompute.pass" + }, + { + "Name": "HairLocalShapeConstraintsComputePassTemplate", + "Path": "Passes/HairLocalShapeConstraintsCompute.pass" + }, + { + "Name": "HairLengthConstraintsWindAndCollisionComputePassTemplate", + "Path": "Passes/HairLengthConstraintsWindAndCollisionCompute.pass" + }, + { + "Name": "HairUpdateFollowHairComputePassTemplate", + "Path": "Passes/HairUpdateFollowHairCompute.pass" + }, + { + "Name": "HairPPLLRasterPassTemplate", + "Path": "Passes/HairFillPPLL.pass" + }, + { + "Name": "HairPPLLResolvePassTemplate", + "Path": "Passes/HairResolvePPLL.pass" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Passes/HairCalculateStrandLevelDataCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairCalculateStrandLevelDataCompute.pass new file mode 100644 index 0000000000..a20a246933 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairCalculateStrandLevelDataCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairCalculateStrandLevelDataComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairCalculateStrandLevelDataCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairFillPPLL.pass b/Gems/AtomTressFX/Assets/Passes/HairFillPPLL.pass new file mode 100644 index 0000000000..fd196551bf --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairFillPPLL.pass @@ -0,0 +1,130 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairPPLLRasterPassTemplate", + "PassClass": "HairPPLLRasterPass", + "Slots": [ + // Input/Outputs... + { + // Super important to keep this as it is used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + "Name": "DepthLinear", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader" + }, + { // The depth buffer will be used to write the closest hair fragment depth + "Name": "Depth", + "SlotType": "Input", + "ScopeAttachmentUsage": "DepthStencil" + }, + { + "Name": "RenderTargetInputOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + }, + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader" + }, + { + "Name": "PPLLIndexCounter", + "ShaderInputName": "m_linkedListCounter", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader", + "BufferViewDesc": { + "m_elementOffset": "0", + "m_elementCount": "1", + "m_elementSize": "4", + "m_elementFormat": "R32_UINT" // Unknown is not accpeted and the pass compilation failsd + }, + "LoadStoreAction": { + "ClearValue": { + "Value": [ 0, 0, 0, 0 ] + }, + "LoadAction": "Clear" + } + }, + { + "Name": "PerPixelListHead", + "ShaderInputName": "m_fragmentListHead", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "ClearValue": { + "Value": [ + 0, + 0, + 0, + 0 + ] + }, + "LoadAction": "Clear", + "StoreAction": "Store" + } + }, + { + "Name": "PerPixelLinkedList", + "ShaderInputName": "m_linkedListNodes", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader" + } + ], + "BufferAttachments": [ + { + "Name": "PPLLIndexCounter", + "BufferDescriptor": { + "m_bindFlags": "ShaderReadWrite", + "m_byteCount": "4", + "m_alignment": "0" // or size of the buffer element + } + } + ], + "ImageAttachments": [ + { + "Name": "PerPixelListHead", + "SizeSource": { + "Source": { + "Pass": "This", + "Attachment": "DepthLinear" + } + }, + "ImageDescriptor": { + "Format": "R32_UINT", + "SharedQueueMask": "Graphics", + "BindFlags": "ShaderReadWrite" + } + } + ], + "Connections": [ + { + "LocalSlot": "PerPixelListHead", + "AttachmentRef": { + "Pass": "This", + "Attachment": "PerPixelListHead" + } + }, + { + "LocalSlot": "PPLLIndexCounter", + "AttachmentRef": { + "Pass": "This", + "Attachment": "PPLLIndexCounter" + } + } + ], + "PassData": { + "$type": "RasterPassData", + "DrawListTag": "hairFillPass", + "PipelineViewTag": "MainCamera" + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairGlobalShapeConstraintsCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairGlobalShapeConstraintsCompute.pass new file mode 100644 index 0000000000..ab10c6fe97 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairGlobalShapeConstraintsCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairGlobalShapeConstraintsComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairGlobalShapeConstraintsCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass new file mode 100644 index 0000000000..820864161a --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairLengthConstraintsWindAndCollisionComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairLengthConstraintsWindAndCollisionCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairLocalShapeConstraintsCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairLocalShapeConstraintsCompute.pass new file mode 100644 index 0000000000..718e01a30f --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairLocalShapeConstraintsCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairLocalShapeConstraintsComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairLocalShapeConstraintsCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairParentPass.pass b/Gems/AtomTressFX/Assets/Passes/HairParentPass.pass new file mode 100644 index 0000000000..6ae8b9526e --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairParentPass.pass @@ -0,0 +1,347 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairParentPassTemplate", + "PassClass": "ParentPass", + "Slots": [ + { + "Name": "RenderTargetInputOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget" + }, + { + "Name": "RenderTargetInputOnly", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader" + }, + // This is the depth stencil buffer that is to be used by the fill pass + // to early reject pixels by depth and in the resolve pass to write the + // the hair depth + { + "Name": "Depth", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "DepthStencil" + }, + // Keep DepthLinear as input - used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + { + "Name": "DepthLinearInput", + "SlotType": "Input" + }, + { + "Name": "DepthLinear", + "SlotType": "Output" + }, + + // Lights & Shadows resources + { + "Name": "DirectionalShadowmap", + "SlotType": "Input" + }, + { + "Name": "DirectionalESM", + "SlotType": "Input" + }, + { + "Name": "ProjectedShadowmap", + "SlotType": "Input" + }, + { + "Name": "ProjectedESM", + "SlotType": "Input" + }, + { + "Name": "TileLightData", + "SlotType": "Input" + }, + { + "Name": "LightListRemapped", + "SlotType": "Input" + } + ], + "Connections": [ + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "DepthToDepthLinearPass", + "Attachment": "Output" + } + } + ], + "PassRequests": [ + { + "Name": "HairGlobalShapeConstraintsComputePass", + "TemplateName": "HairGlobalShapeConstraintsComputePassTemplate", + "Enabled": true + }, + { + "Name": "HairCalculateStrandLevelDataComputePass", + "TemplateName": "HairCalculateStrandLevelDataComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairGlobalShapeConstraintsComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairVelocityShockPropagationComputePass", + "TemplateName": "HairVelocityShockPropagationComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairCalculateStrandLevelDataComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairLocalShapeConstraintsComputePass", + "TemplateName": "HairLocalShapeConstraintsComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairVelocityShockPropagationComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairLengthConstraintsWindAndCollisionComputePass", + "TemplateName": "HairLengthConstraintsWindAndCollisionComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairLocalShapeConstraintsComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairUpdateFollowHairComputePass", + "TemplateName": "HairUpdateFollowHairComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairLengthConstraintsWindAndCollisionComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + + { + "Name": "HairPPLLRasterPass", + "TemplateName": "HairPPLLRasterPassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairUpdateFollowHairComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + }, + // Keep DepthLinear as input - used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DepthLinearInput" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + + { + "Name": "RenderTargetCopyPass", + "TemplateName": "FullscreenCopyTemplate", + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "RenderTargetInputOnly" + } + }, + { + "LocalSlot": "Output", + "AttachmentRef": { + "Pass": "This", + "Attachment": "Output" + } + } + ], + "ImageAttachments": [ + { + "Name": "Output", + "SizeSource": { + "Source": { + "Pass": "This", + "Attachment": "Input" + } + }, + "FormatSource": { + "Pass": "This", + "Attachment": "Input" + }, + "GenerateFullMipChain": false + } + ] + }, + + { + "Name": "HairPPLLResolvePass", + "TemplateName": "HairPPLLResolvePassTemplate", + "Enabled": true, + "Connections": [ + // General + Render Target resources + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "RenderTargetInputOutput" + } + }, + { + "LocalSlot": "RenderTargetCopy", + "AttachmentRef": { + "Pass": "RenderTargetCopyPass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DepthLinearInput" + } + }, + + // Shadows resources + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "ProjectedESM" + } + }, + + // Lights Resources + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "LightListRemapped" + } + }, + + + // PPLL Resources + { + "LocalSlot": "PerPixelListHead", + "AttachmentRef": { + "Pass": "HairPPLLRasterPass", + "Attachment": "PerPixelListHead" + } + }, + { + "LocalSlot": "PerPixelLinkedList", + "AttachmentRef": { + "Pass": "HairPPLLRasterPass", + "Attachment": "PerPixelLinkedList" + } + } + ] + }, + { + // This pass copies the updated depth buffer (now contains hair depth) to linear depth texture + // for downstream passes to use. This can be optimized even further by writing into the stencil + // buffer pixels that were touched by HairPPLLResolvePass hence preventing depth update unless + // it is hair. + "Name": "DepthToDepthLinearPass", + "TemplateName": "DepthToLinearTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "HairPPLLResolvePass", + "Attachment": "Depth" + } + } + ] + } + ] + } + } +} + diff --git a/Gems/AtomTressFX/Assets/Passes/HairResolvePPLL.pass b/Gems/AtomTressFX/Assets/Passes/HairResolvePPLL.pass new file mode 100644 index 0000000000..0061fa1666 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairResolvePPLL.pass @@ -0,0 +1,150 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairPPLLResolvePassTemplate", + "PassClass": "HairPPLLResolvePass", + "Slots": [ + //------ General Input/Output resources and Render Target ------ + { + "Name": "RenderTargetInputOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + }, + { // Will be used to get the background color for the hair blending + "Name": "RenderTargetCopy", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ShaderInputName": "m_frameBuffer" + }, + { // Used to get the transform from screen space to world space. + "Name": "DepthLinear", + "SlotType": "Input", + "ShaderInputName": "m_linearDepth", + "ScopeAttachmentUsage": "Shader" + }, + { // The depth buffer will be used to write the closest hair fragment depth + "Name": "Depth", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "DepthStencil", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + }, + + //------------- Shadowing Resources ------------- + { + "Name": "DirectionalShadowmap", + "ShaderInputName": "m_directionalLightShadowmap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + { + "Name": "DirectionalESM", + "ShaderInputName": "m_directionalLightExponentialShadowmap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + { + "Name": "ProjectedShadowmap", + "ShaderInputName": "m_projectedShadowmaps", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + { + "Name": "ProjectedESM", + "ShaderInputName": "m_projectedExponentialShadowmap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + + //------------- Lighting Resources ------------- + { + "Name": "BRDFTextureInput", + "ShaderInputName": "m_brdfMap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader" + }, + { + "Name": "TileLightData", + "SlotType": "Input", + "ShaderInputName": "m_tileLightData", + "ScopeAttachmentUsage": "Shader" + }, + { + "Name": "LightListRemapped", + "SlotType": "Input", + "ShaderInputName": "m_lightListRemapped", + "ScopeAttachmentUsage": "Shader" + }, + + //---------- PPLL Resources ----------- + { + "Name": "PerPixelListHead", + "ShaderInputName": "m_fragmentListHead", + "SlotType": "Input", // Read only - the reset is done before the fill pass + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "DontCare" + } + }, + { + "Name": "PerPixelLinkedList", + "ShaderInputName": "m_linkedListNodes", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "DontCare" + } + } + ], + "ImageAttachments": [ + { + "Name": "BRDFTexture", + "Lifetime": "Imported", + "AssetRef": { + "FilePath": "Textures/BRDFTexture.attimage" + } + } + ], + "Connections": [ + { + "LocalSlot": "BRDFTextureInput", + "AttachmentRef": { + "Pass": "This", + "Attachment": "BRDFTexture" + } + } + ], + "PassData": { + "$type": "FullscreenTrianglePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairRenderingResolvePPLL.shader" + } + } + } + } +} + diff --git a/Gems/AtomTressFX/Assets/Passes/HairUpdateFollowHairCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairUpdateFollowHairCompute.pass new file mode 100644 index 0000000000..6f265b4e99 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairUpdateFollowHairCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairUpdateFollowHairComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "inputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairUpdateFollowHairCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairVelocityShockPropagationCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairVelocityShockPropagationCompute.pass new file mode 100644 index 0000000000..0b94cd5d6b --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairVelocityShockPropagationCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairVelocityShockPropagationComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairVelocityShockPropagationCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Shaders/HairCalculateStrandLevelDataCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairCalculateStrandLevelDataCompute.shader new file mode 100644 index 0000000000..66bac88250 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairCalculateStrandLevelDataCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "CalculateStrandLevelData", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairGlobalShapeConstraintsCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairGlobalShapeConstraintsCompute.shader new file mode 100644 index 0000000000..32b9c1bd4f --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairGlobalShapeConstraintsCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "IntegrationAndGlobalShapeConstraints", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader new file mode 100644 index 0000000000..a00916f1e4 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "LengthConstriantsWindAndCollision", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLightTypes.azsli b/Gems/AtomTressFX/Assets/Shaders/HairLightTypes.azsli new file mode 100644 index 0000000000..535d1380e7 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLightTypes.azsli @@ -0,0 +1,495 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//------------------------------------------------------------------------------ +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------ + +#pragma once + +//============================================================================== +// Atom Lighting & Light Types +//============================================================================== +// Include options first +#include +#include +#include +#include + +#include +#include +#include +//------------------------------------------------------------------------------ +#include + +#include +//===================== Hair Lighting Shader Options =========================== +enum class HairLightingModel {GGX, Marschner, Kajiya}; +option HairLightingModel o_hairLightingModel = HairLightingModel::Marschner; + +//============================================================================== +float3 GetSpecularLighting(Surface surface, LightingData lightingData, const float3 lightIntensity, const float3 dirToLight) +{ + float3 specular = float3(1, 0, 1); // purple - error color + if (o_hairLightingModel == HairLightingModel::GGX) + { + specular = SpecularGGX(lightingData.dirToCamera, dirToLight, surface.normal, surface.specularF0, lightingData.NdotV, surface.roughnessA2, lightingData.multiScatterCompensation); + } + else if(o_hairLightingModel == HairLightingModel::Marschner) + { + specular = HairMarschnerBSDF(surface, lightingData, dirToLight); + } + // [To Do] - add the Kajiya-Kay lighting model option here in order to connect to Atom lighting loop + + return specular * lightIntensity; +} + +float3 GetHairBackLighting(Surface surface, LightingData lightingData, float3 lightIntensity, float3 dirToLight, float shadowRatio) +{ + if (o_hairLightingModel == HairLightingModel::GGX) + { + float3 result = float3(0.0, 0.0, 0.0); + float thickness = 0.0; + float4 transmissionParams = surface.transmission.transmissionParams; + + // Thin object mode, using thin-film assumption proposed by Jimenez J. et al, 2010, "Real-Time Realistic Skin Translucency" + // http://www.iryoku.com/translucency/downloads/Real-Time-Realistic-Skin-Translucency.pdf + + result = shadowRatio ? + float3(0.0, 0.0, 0.0) : + TransmissionKernel(surface.transmission.thickness * transmissionParams.w, rcp(transmissionParams.xyz)) * + saturate(dot(-surface.normal, dirToLight)) * lightIntensity * shadowRatio; + + return result; + } + else // if ((o_hairLightingModel == HairLightingModel::Marschner) || (o_hairLightingModel == HairLightingModel::Kajiya)) + { + return float3(0.0f, 0.0f, 0.0f); + } + + return float3(1.0f, 0.0f, 0.0f); +} + +//! Simple Lambertian BRDF +float3 HairDiffuseLambertian(float3 albedo, float3 normal, float3 dirToLight) +{ + float NdotL = saturate(dot(normal, dirToLight)); + return albedo * NdotL * INV_PI; +} + +// Replacing the generic Diffuse and Specular methods in StandardLighting.azsli +// and removing the regular usage of clear coat second lobe energy distribution. +float3 GetDiffuseLighting(Surface surface, LightingData lightingData, float3 lightIntensity, float3 dirToLight) +{ + float3 diffuse = float3(0, 1, 0); // Green - error color + + if (o_hairLightingModel == HairLightingModel::GGX) + { + // Notice that addition of the response (1-F) here + diffuse = HairDiffuseLambertian(surface.albedo, surface.normal, dirToLight) * lightingData.diffuseResponse; + } + else if (o_hairLightingModel == HairLightingModel::Marschner) + { + return float3(0.0f, 0.0f, 0.0f); + } + // [To Do] - add the Kajiya-Kay lighting model option here in order to connect to Atom lighting loop + + diffuse *= lightIntensity; + return diffuse; +} + +void UpdateLightingParameters( + inout LightingData lightingData, + float3 positionWS, float3 normal, float roughnessLinear) +{ + lightingData.dirToCamera = normalize(ViewSrg::m_worldPosition.xyz - positionWS); + + // sample BRDF map (indexed by smoothness values rather than roughness) + lightingData.NdotV = saturate(dot(normal, lightingData.dirToCamera)); + + float2 brdfUV = float2(lightingData.NdotV, (1.0f - roughnessLinear)); + + lightingData.brdf = PassSrg::m_brdfMap.Sample(PassSrg::LinearSampler, brdfUV).rg; +} + +void SetNormalAndUpdateLightingParams( + in float3 tangent, in float3 dirToLight, + inout Surface surface, + inout LightingData lightingData) +{ + float3 biNormal; + if (o_hairLightingModel == HairLightingModel::GGX) + { // Towards half vector but never cross fully (more weight to camera direction) + float3 halfDir = normalize( dirToLight + 1.2 * lightingData.dirToCamera); + biNormal = normalize(cross(tangent, halfDir)); + } + else + { // Face forward towards the camera + biNormal = normalize(cross(tangent, lightingData.dirToCamera)); + } + + float3 projectedNormal = cross(biNormal, tangent); + surface.normal = normalize(projectedNormal); // the normalization might be redundunt + + // Next is important in order to set NdotV and other PBR settings - needs to be set once per light + UpdateLightingParameters(lightingData, surface.position, surface.normal, surface.roughnessLinear); + + // Diffuse and Specular response + lightingData.specularResponse = FresnelSchlickWithRoughness(lightingData.NdotV, surface.specularF0, surface.roughnessLinear); + lightingData.diffuseResponse = 1.0f - lightingData.specularResponse; +} + +//============================================================================== +#include +//============================================================================== + + +//============================================================================== +// Simple Point Light +//============================================================================== +void ApplySimplePointLight(ViewSrg::SimplePointLight light, Surface surface, inout LightingData lightingData) +{ + float3 posToLight = light.m_position - surface.position; + float d2 = dot(posToLight, posToLight); // light distance squared + float falloff = d2 * light.m_invAttenuationRadiusSquared; + + // Only calculate shading if light is in range + if (falloff < 1.0f) + { + // Smoothly adjusts the light intensity so it reaches 0 at light.m_attenuationRadius distance + float radiusAttenuation = 1.0 - (falloff * falloff); + radiusAttenuation = radiusAttenuation * radiusAttenuation; + + // Standard quadratic falloff + d2 = max(0.001 * 0.001, d2); // clamp the light to at least 1mm away to avoid extreme values. + float3 lightIntensity = (light.m_rgbIntensityCandelas / d2) * radiusAttenuation; + + float3 dirToLight = normalize(posToLight); + SetNormalAndUpdateLightingParams(surface.tangent, dirToLight, surface, lightingData); + + // Diffuse contribution + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, dirToLight); + + // Specular contribution + lightingData.specularLighting += GetSpecularLighting(surface, lightingData, lightIntensity, dirToLight); + } +} + +// The following function is currently not used and is written here for future testing. +// The culling scheme requires some more preperation and testing in HairLighting.azsli +// and once done, all light types can use the culling. +// Not that the current culling scheme assumes light types lists order and is bogus if +// some light types are not used or out of order (Atom's To Do list) +void ApplyCulledSimplePointLights(Surface surface, inout LightingData lightingData) +{ + lightingData.tileIterator.LoadAdvance(); + + int lightCount = 0; + while( !lightingData.tileIterator.IsDone() && lightCount<1) + { + uint currLightIndex = lightingData.tileIterator.GetValue(); + lightingData.tileIterator.LoadAdvance(); + + ViewSrg::SimplePointLight light = ViewSrg::m_simplePointLights[currLightIndex]; + ApplySimplePointLight(light, surface, lightingData); + ++lightCount; + } +} + +void ApplyAllSimplePointLights(Surface surface, inout LightingData lightingData) +{ + for (int l = 0; l < ViewSrg::m_simplePointLightCount; ++l) + { + ViewSrg::SimplePointLight light = ViewSrg::m_simplePointLights[l]; + ApplySimplePointLight(light, surface, lightingData); + } +} + +//============================================================================== +// Simple Spot Light +//============================================================================== +void ApplySimpleSpotLight(ViewSrg::SimpleSpotLight light, Surface surface, inout LightingData lightingData) +{ + float3 posToLight = light.m_position - surface.position; + float3 dirToLight = normalize(posToLight); + float dotWithDirection = dot(dirToLight, -normalize(light.m_direction)); + + // If outside the outer cone angle return. + if (dotWithDirection < light.m_cosOuterConeAngle) + { + return; + } + + float d2 = dot(posToLight, posToLight); // light distance squared + float falloff = d2 * light.m_invAttenuationRadiusSquared; + + // Only calculate shading if light is in range + if (falloff < 1.0f) + { + // Smoothly adjusts the light intensity so it reaches 0 at light.m_attenuationRadius distance + float radiusAttenuation = 1.0 - (falloff * falloff); + radiusAttenuation = radiusAttenuation * radiusAttenuation; + + // Standard quadratic falloff + d2 = max(0.001 * 0.001, d2); // clamp the light to at least 1mm away to avoid extreme values. + float3 lightIntensity = (light.m_rgbIntensityCandelas / d2) * radiusAttenuation; + + if (dotWithDirection < light.m_cosInnerConeAngle) // in penumbra + { + // Normalize into 0.0 - 1.0 space. + float penumbraMask = (dotWithDirection - light.m_cosOuterConeAngle) / (light.m_cosInnerConeAngle - light.m_cosOuterConeAngle); + + // Apply smoothstep + penumbraMask = penumbraMask * penumbraMask * (3.0 - 2.0 * penumbraMask); + + lightIntensity *= penumbraMask; + } + + SetNormalAndUpdateLightingParams(surface.tangent, dirToLight, surface, lightingData); + + // Tranmission contribution + lightingData.translucentBackLighting += GetHairBackLighting(surface, lightingData, lightIntensity, dirToLight, 1.0); + + // Diffuse contribution + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, dirToLight); + + // Specular contribution + lightingData.specularLighting += GetSpecularLighting(surface, lightingData, lightIntensity, dirToLight); + } +} + +void ApplyAllSimpleSpotLights(Surface surface, inout LightingData lightingData) +{ + for (int l = 0; l < ViewSrg::m_simpleSpotLightCount; ++l) + { + ViewSrg::SimpleSpotLight light = ViewSrg::m_simpleSpotLights[l]; + ApplySimpleSpotLight(light, surface, lightingData); + } +} +//============================================================================== +// Point Light +//============================================================================== +void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingData lightingData) +{ + float3 posToLight = light.m_position - surface.position; + float d2 = dot(posToLight, posToLight); // light distance squared + float falloff = d2 * light.m_invAttenuationRadiusSquared; + + // Only calculate shading if light is in range + if (falloff < 1.0f) + { + // Smoothly adjusts the light intensity so it reaches 0 at light.m_attenuationRadius distance + float radiusAttenuation = 1.0 - (falloff * falloff); + radiusAttenuation = radiusAttenuation * radiusAttenuation; + + // Standard quadratic falloff + d2 = max(0.001 * 0.001, d2); // clamp the light to at least 1mm away to avoid extreme values. + float3 lightIntensity = (light.m_rgbIntensityCandelas / d2) * radiusAttenuation; + + float3 dirToLight = normalize(posToLight); + SetNormalAndUpdateLightingParams(surface.tangent, dirToLight, surface, lightingData); + + // Diffuse contribution + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, dirToLight); + + // Tranmission contribution + lightingData.translucentBackLighting += GetHairBackLighting(surface, lightingData, lightIntensity, dirToLight, 1.0); + + // Adjust the light direcion for specular based on bulb size + + // Calculate the reflection off the normal from the view direction + float3 reflectionDir = reflect(-lightingData.dirToCamera, surface.normal); + + // Calculate a vector from the reflection vector to the light + float3 reflectionPosToLight = posToLight - dot(posToLight, reflectionDir) * reflectionDir; + + // Adjust the direction to light based on the bulb size + posToLight -= reflectionPosToLight * saturate(light.m_bulbRadius / length(reflectionPosToLight)); + + // Adjust the intensity of the light based on the bulb size to conserve energy + float sphereIntensityNormalization = GetIntensityAdjustedByRadiusAndRoughness(surface.roughnessA, light.m_bulbRadius, d2); + + // Specular contribution + lightingData.specularLighting += sphereIntensityNormalization * GetSpecularLighting(surface, lightingData, lightIntensity, normalize(posToLight)); + } +} + +void ApplyAllPointLights(Surface surface, inout LightingData lightingData) +{ + for (int l = 0; l < ViewSrg::m_pointLightCount; ++l) + { + ViewSrg::PointLight light = ViewSrg::m_pointLights[l]; + ApplyPointLight(light, surface, lightingData); + } +} + +//============================================================================== +// Disk Lights +//============================================================================== +#include + +void ApplyAllDiskLights(Surface surface, inout LightingData lightingData) +{ + SetNormalAndUpdateLightingParams(surface.tangent, lightingData.dirToCamera, surface, lightingData); + for (int l = 0; l < ViewSrg::m_diskLightCount; ++l) + { + ViewSrg::DiskLight light = ViewSrg::m_diskLights[l]; + ApplyDiskLight(light, surface, lightingData); + } +} + +//============================================================================== +// Directional Lights +//============================================================================== +void ApplyDirectionalLights(Surface surface, inout LightingData lightingData) +{ + DirectionalLightShadow::DebugInfo debugInfo = {0, false}; + + // Shadowed check + const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight; + float litRatio = 1.0f; + float backShadowRatio = 0.0f; + + SetNormalAndUpdateLightingParams(surface.tangent, -lightingData.dirToCamera, surface, lightingData); + + if (o_enableShadows && shadowIndex < SceneSrg::m_directionalLightCount) + { + litRatio = DirectionalLightShadow::GetVisibility( + shadowIndex, + lightingData.shadowCoords, + surface.normal, + debugInfo); + } + + // Add the lighting contribution for each directional light + for (int index = 0; index < SceneSrg::m_directionalLightCount; index++) + { + SceneSrg::DirectionalLight light = SceneSrg::m_directionalLights[index]; + float3 dirToLight = normalize(-light.m_direction); + + // Adjust the direction of the light based on its angular diameter. + float3 reflectionDir = reflect(-lightingData.dirToCamera, surface.normal); + float3 lightDirToReflectionDir = reflectionDir - dirToLight; + float lightDirToReflectionDirLen = length(lightDirToReflectionDir); + lightDirToReflectionDir = lightDirToReflectionDir / lightDirToReflectionDirLen; // normalize the length + lightDirToReflectionDirLen = min(light.m_angularRadius, lightDirToReflectionDirLen); + dirToLight += lightDirToReflectionDir * lightDirToReflectionDirLen; + dirToLight = normalize(dirToLight); + + float currentLitRatio = 1.0f; + float currentBackShadowRatio = 1.0f; + if (o_enableShadows) + { + currentLitRatio = (index == shadowIndex) ? litRatio : 1.0f; + + currentBackShadowRatio = 1.0 - currentLitRatio; + if (o_transmission_mode == TransmissionMode::ThickObject) + { + currentBackShadowRatio = (index == shadowIndex) ? backShadowRatio : 0.; + } + } + + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio; + lightingData.specularLighting += GetSpecularLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio; + lightingData.translucentBackLighting += GetHairBackLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight, currentBackShadowRatio); + } +} + +//============================================================================== +// IBL - GI and Reflections +//============================================================================== +// Adding diffuse contribution from IBL to the hair - this part still requires +// multiple passes and improvements for both diffuse and specular IBL components. +// The immediate things to improve: +// - Virtual direction to 'light' +// - Absorption function based on hair accumulated thickness (back to front) and +// reverse thickness (front to back) +// - Diffuse contribution elements / scaling +float3 ApplyIblDiffuse(Surface surface, LightingData lightingData) +{ + float3 irradianceDir = MultiplyVectorQuaternion(surface.normal, SceneSrg::m_iblOrientation); + float3 diffuseSample = SceneSrg::m_diffuseEnvMap.Sample(SceneSrg::m_samplerEnv, GetCubemapCoords(irradianceDir)).rgb; + +// float3 diffuseLighting = HairDiffuseLambertian(surface.albedo, surface.normal, lightingData.dirToCamera) * lightingData.diffuseResponse * diffuseSample; +// float3 diffuseLighting = GetDiffuseLighting(surface, lightingData, diffuseSample, surface.normal); + + // Notice the multiplication with inverse thickness used as a measure of occlusion + return lightingData.diffuseResponse * surface.albedo * diffuseSample * (1.0f - surface.thickness); +} + +float3 ApplyIblSpecular(Surface surface, LightingData lightingData) +{ + float3 reflectDir = reflect(-lightingData.dirToCamera, surface.normal); + reflectDir = MultiplyVectorQuaternion(reflectDir, SceneSrg::m_iblOrientation); + + // global + float3 specularSample = SceneSrg::m_specularEnvMap.SampleLevel( + SceneSrg::m_samplerEnv, GetCubemapCoords(reflectDir), + GetRoughnessMip(surface.roughnessLinear)).rgb; + + float3 specularLighting = GetSpecularLighting(surface, lightingData, specularSample, reflectDir); + return specularLighting; +} + +// Remark: IBL is still WIP and this part will change in the near future +void ApplyIBL(Surface surface, inout LightingData lightingData) +{ +// float3 normal = normalize(float3(surface.tangent.z, -surface.tangent.x, surface.tangent.y)); +// SetNormalAndUpdateLightingParams(surface.tangent, normal, surface, lightingData); + SetNormalAndUpdateLightingParams(surface.tangent, lightingData.dirToCamera, surface, lightingData); + + float3 iblDiffuse = ApplyIblDiffuse(surface, lightingData); + float3 iblSpecular = ApplyIblSpecular(surface, lightingData); + + // Adjust IBL lighting by exposure. + float iblExposureFactor = pow(2.0, SceneSrg::m_iblExposure); + lightingData.diffuseLighting += (iblDiffuse * iblExposureFactor * lightingData.diffuseAmbientOcclusion); + lightingData.specularLighting += (iblSpecular * iblExposureFactor); +} + + +//============================================================================== +// +// Light Types Application +// +//============================================================================== +void ApplyLighting(inout Surface surface, inout LightingData lightingData) +{ + // Shadow coordinates generation for the directional light + const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight; + if (o_enableShadows && shadowIndex < SceneSrg::m_directionalLightCount) + { + DirectionalLightShadow::GetShadowCoords(shadowIndex, surface.position, lightingData.shadowCoords); + } + + // Light loops application. + // If culling is used, the order of the calls must match the light types list order +// ApplyDecals(lightingData.tileIterator, surface); + + if (o_enableDirectionalLights) + { + ApplyDirectionalLights(surface, lightingData); + } + + if (o_enablePunctualLights) + { + ApplyAllSimplePointLights(surface, lightingData); + ApplyAllSimpleSpotLights(surface, lightingData); + } + + if (o_enableAreaLights) + { + ApplyAllPointLights(surface, lightingData); + ApplyAllDiskLights(surface, lightingData); + } + + if (o_enableIBL) + { + ApplyIBL(surface, lightingData); + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLighting.azsli b/Gems/AtomTressFX/Assets/Shaders/HairLighting.azsli new file mode 100644 index 0000000000..bf452e6ba8 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLighting.azsli @@ -0,0 +1,275 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//------------------------------------------------------------------------------ +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include +//------------------------------------------------------------------------------ +struct HairShadeParams +{ + float3 m_color; + float m_hairShadowAlpha; + float m_fiberRadius; + float m_fiberSpacing; + + // Original TressFX Kajiya lighting model parameters + float m_Ka; + float m_Kd; + float m_Ks1; + float m_Ex1; + float m_Ks2; + float m_Ex2; + + // Marschner lighting model parameters + float m_cuticleTilt; + float m_roughness; +}; + +//! Original TressFX enhanced Kajiya-Kay lighting model code +//! +//! Returns a float3 which is the scale for diffuse, spec term, and colored spec term. +//! +//! The diffuse term is from Kajiya. +//! +//! The spec term is what Marschner refers to as "R", reflecting directly off the surface +//! of the hair, taking the color of the light like a dielectric specular term. This +//! highlight is shifted towards the root of the hair. +//! +//! The colored spec term is caused by light passing through the hair, bouncing off the +//! back, and coming back out. It therefore picks up the color of the light. +//! Marschner refers to this term as the "TRT" term. This highlight is shifted towards the +//! tip of the hair. +//! +//! vEyeDir, vLightDir and vTangentDir are all pointing out. +//! coneAngleRadians explained below. +//! +//! hair has a tiled-conical shape along its lenght. Sort of like the following. +//! +//! \ / +//! \ / +//! \ / +//! \ / +//! +//! The angle of the cone is the last argument, in radians. +//! It's typically in the range of 5 to 10 degrees +float3 ComputeDiffuseSpecFactors( + float3 vEyeDir, float3 vLightDir, float3 vTangentDir, HairShadeParams params, + float coneAngleRadians = 10 * AMD_PI / 180) +{ + // In Kajiya's model: diffuse component: sin(t, l) + float cosTL = (dot(vTangentDir, vLightDir)); + float sinTL = sqrt(1 - cosTL * cosTL); + float diffuse = sinTL; + + float cosTRL = -cosTL; + float sinTRL = sinTL; + float cosTE = (dot(vTangentDir, vEyeDir)); + float sinTE = sqrt(1 - cosTE * cosTE); + + // Primary highlight: reflected direction shift towards root (2 * coneAngleRadians) + float cosTRL_root = cosTRL * cos(2 * coneAngleRadians) - sinTRL * sin(2 * coneAngleRadians); + float sinTRL_root = sqrt(1 - cosTRL_root * cosTRL_root); + float specular_root = max(0, cosTRL_root * cosTE + sinTRL_root * sinTE); + + // Secondary highlight: reflected direction shifted toward tip (3*coneAngleRadians) + float cosTRL_tip = cosTRL * cos(-3 * coneAngleRadians) - sinTRL * sin(-3 * coneAngleRadians); + float sinTRL_tip = sqrt(1 - cosTRL_tip * cosTRL_tip); + float specular_tip = max(0, cosTRL_tip * cosTE + sinTRL_tip * sinTE); + + return float3( + params.m_Kd * diffuse, + params.m_Ks1 * pow(specular_root, params.m_Ex1), + params.m_Ks2 * pow(specular_tip, params.m_Ex2)); +} + +float LinearizeDepth(float depthNDC, float fNear, float fFar) +{ + return fNear * fFar / (fFar - depthNDC * (fFar - fNear)); +} + +//! The following code is for reference only and should be removed once the +//! Kajiya-Kay original TressFX lighting model is connected to Atom as was +//! done for the Marshcner lighting model. +#define DEMO_NUMBER_OF_LIGHTS 3 +#define DEMO_NUMBER_OF_LIGHTS 3 +float3 SimplifiedHairLighting(float3 vTangent, float3 vPositionWS, float3 vViewDirWS, in HairShadeParams params, float3 vNDC) +{ + // Initialize information needed for all lights + float3 V = normalize(vViewDirWS); + float3 T = normalize(vTangent); + + float3 accumulatedHairColor = float3(0.0, 0.0, 0.0); + + float4 lightPosWSVec[DEMO_NUMBER_OF_LIGHTS] = { + float4(3, 0, 3, 1.5f), // Sun + float4(-.5, 0, 0.5, .5f), + float4(.5, 0, 0.5, .5f), + }; + + float3 lightColorVec[DEMO_NUMBER_OF_LIGHTS] = { + float3(1,1,.95f), // Sun + float3(1,1,1), + float3(1,1,1) + }; + + // Static lights loop for reference - not connected to Atom + // [To Do] - connect to Atom lighting ala HairLightTypes loop + for (int l = 0; l < DEMO_NUMBER_OF_LIGHTS ; l++) + { + float3 lightPosWS = lightPosWSVec[l].xyz; + float3 LightVector = normalize( vPositionWS - lightPosWS ); + float lightIntensity = lightPosWSVec[l].w; + float3 LightColor = lightColorVec[l]; + float3 L = LightVector; + + // Reference usage of shadow +// float shadowTerm = ComputeLightShadow(l, vPositionWS, params); +// if (shadowTerm <= 0.f) +// continue; + + float3 lightSurfaceCoeffs = ComputeDiffuseSpecFactors(V, L, T, params); + + // The diffuse coefficient here is a rough approximation as per the Kajiya model + float3 diffuseCompoenent = lightSurfaceCoeffs.x * params.m_color; + + // This is the approximation to Marschner R but azimuthal only + float3 specularAtPos = lightSurfaceCoeffs.y; + + // This is the approximation to Marschner TRT but azimuthal only + // Notice the base color gather due to the trsmittance within the hair + float3 specularAtBase = lightSurfaceCoeffs.z * params.m_color; + + // Final result + float3 lightContribution = (diffuseCompoenent + specularAtPos + specularAtBase) * lightIntensity * LightColor; // * shadowTerm; + + accumulatedHairColor += max(float3(0, 0, 0), lightContribution ); + } + return accumulatedHairColor; +} + +//============================================================================== +// Atom Lighting +//============================================================================== +#include +#include +//------------------------------------------------------------------------------ + +float3 CalculateLighting( + float4 screenCoords, // XY - screen coords 0..max pix res, Z - depth 0..1 + float3 vPositionWS, float3 vViewDirWS, float3 vTangent, + float thickness, in HairShadeParams material ) +{ + //-------- Surface init -------- + Surface surface; + + const float specularF0Factor = 0.04f; // set this to 0.04?! + + surface.position = vPositionWS; + surface.tangent = vTangent; // Redundant - will be calculated per light + surface.normal = float3(0, 0, 0); // Will fail lights that did not initialize properly. + surface.roughnessLinear = material.m_roughness; + surface.cuticleTilt = material.m_cuticleTilt; + surface.thickness = thickness; + surface.CalculateRoughnessA(); + surface.SetAlbedoAndSpecularF0( material.m_color, specularF0Factor); + + // The trasmission / back lighting does not seem to work! + surface.transmission.InitializeToZero(); // Assuming thin layer + surface.transmission.tint = material.m_color; + surface.transmission.thickness = 0.001; // 1 mm settings + surface.transmission.transmissionParams = float4(1.0, 1.0, 1.0, 32.0); // for thin surface XYZ are partials * W that is the exponent mult + + //------- LightingData init ------- + LightingData lightingData; + + float4 screenPositionForLighting = mul(ViewSrg::m_viewProjectionMatrix, float4(vPositionWS, 1.0)); + uint2 dimensions; + PassSrg::m_linearDepth.GetDimensions(dimensions.x, dimensions.y); + screenPositionForLighting.y = 1.0 - screenPositionForLighting.y; + screenPositionForLighting.xy = (screenPositionForLighting.xy * 0.5 + 0.5) * dimensions; + + // Light iterator - required for the init but the culling is not used yet. + lightingData.tileIterator.Init(screenCoords, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); + + // The normal assignment will be overriden afterwards per light + lightingData.Init(surface.position, surface.normal, surface.roughnessLinear); + + ApplyLighting(surface, lightingData); + + return lightingData.diffuseLighting + lightingData.specularLighting; +} + +float3 TressFXShading(float2 pixelCoord, float depth, float3 vTangentCoverage, float3 baseColor, float thickness, int shaderParamIndex) +{ + float3 vNDC; // normalized device / screen coordinates: [-1..1, -1..1, 0..1] + float3 vPositionWS = ScreenPosToWorldPos(PassSrg::m_linearDepth, pixelCoord, depth, vNDC); + + // [To Do] the follwing two lines are a hack to make the tile lighting work for now + #define _BIG_HACK_FOR_TESTING_ 1//32 + float4 screenCoords = float4( _BIG_HACK_FOR_TESTING_ * pixelCoord, depth, depth); // screen space position - XY in pixels - ZW are depth 0..1 + + float3 vViewDirWS = g_vEye - vPositionWS; + + // Need to expand the tangent that was compressed to store in the buffer + float3 vTangent = normalize(vTangentCoverage.xyz * 2.f - 1.f); + + //---- TressFX original lighting params setting ---- + HairShadeParams params; + params.m_color = baseColor; + params.m_hairShadowAlpha = HairParams[shaderParamIndex].m_shadowAlpha; + params.m_fiberRadius = HairParams[shaderParamIndex].m_fiberRadius; + params.m_fiberSpacing = HairParams[shaderParamIndex].m_fiberSpacing; + + params.m_Ka = HairParams[shaderParamIndex].m_matKValue.x; + params.m_Kd = HairParams[shaderParamIndex].m_matKValue.y; + params.m_Ks1 = HairParams[shaderParamIndex].m_matKValue.z; + params.m_Ex1 = HairParams[shaderParamIndex].m_matKValue.w; + params.m_Ks2 = HairParams[shaderParamIndex].m_hairKs2; + params.m_Ex2 = HairParams[shaderParamIndex].m_hairEx2; + + params.m_cuticleTilt = HairParams[shaderParamIndex].m_cuticleTilt; + params.m_roughness = HairParams[shaderParamIndex].m_roughness; + //--------------------------------------------------- + + float3 accumulatedLight = float3(0, 0, 1); + if (o_hairLightingModel == HairLightingModel::Kajiya) + { // This option should be removed and the Kajiya-Kay model should be operated from within + // the Atom lighting loop. + accumulatedLight = SimplifiedHairLighting(vTangent, vPositionWS, vViewDirWS, params, vNDC); + } + else + { + accumulatedLight = CalculateLighting(screenCoords, vPositionWS, vViewDirWS, vTangent, thickness, params); + } + return accumulatedLight; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli b/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli new file mode 100644 index 0000000000..83ebc04521 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli @@ -0,0 +1,243 @@ +/* +* Modifications Copyright (c) Contributors to the Open 3D Engine Project. +* For complete copyright and license terms please see the LICENSE at the root of this distribution. +* +* SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT +* +*/ + +#pragma once + +// --- Overview --- +// +// This is a modified Marschner Lighting Model for hair based on the following papers: +// +// The original Marschner Siggraph paper defining the fundementsal hair lighting model. +// http://www.graphics.stanford.edu/papers/hair/hair-sg03final.pdf +// +// An Energy-Conserving Hair Reflectance Model +// http://www.eugenedeon.com/project/an-energy-conserving-hair-reflectance-model/ +// http://www.eugenedeon.com/wp-content/uploads/2014/04/egsrhair.pdf +// +// Physically Based Hair Shading in Unreal - specifically adapted in our shader +// https://blog.selfshadow.com/publications/s2016-shading-course/karis/s2016_pbs_epic_hair.pptx +// +// Strand-based Hair Rendering in Frostbite for reference +// https://advances.realtimerendering.com/s2019/hair_presentation_final.pdf +// +// +// Path Notations +// -------------- +// The Marschner model divides hair rendering into three light paths: R, TT and TRT +// R - the light bounces straight off the hair fiber (Reflection) +// TT - the light penetrates the hair fiber and exits at the other side (Transmitance - Transmitance) +// TRT - the light penetrates the hair fiber, bounces inside and exists (Transmitance - Reflection - Transmitance) +// +// The calculations for each path are devided into longitude (M) and azimuth (N) terms: +// Longtitude: M_R, M_TT, M_TRT +// Azimuth: N_R, N_TT, N_TRT +// +// Other notations +// --------------- +// Wi - incoming light vector +// Wr - reflected light vector +// L - angles with respect to the Longitude +// O - vectors with respect to the azimuth +// Li and Lr are the longitudinal angles with respect to incoming/reflected light, i.e. the angle between +// those vector and the normal plane (plane perpendicular to the hair) +// Oi and Or are the azimuthal angles, i.e. the angles contained by the normal plane +// Lh and Oh are the averages, i.e. Lh = (Lr + Li) / 2 and Oh = (Or + Oi) / 2 +// Ld is the difference angle, i.e. Ld = (Lr - Li) / 2 +// O denotes the relative azimuth, simply O = (Or - Oi) + +#include + +//------------------------------------------------------------------------------ +option bool o_enableMarschner_R = true; +option bool o_enableMarschner_TRT = true; +option bool o_enableMarschner_TT = true; + +option bool o_enableLongtitudeCoeff = true; +option bool o_enableAzimuthCoeff = true; +//------------------------------------------------------------------------------ + +// Longitudinal functions (M_R, M_TT, M_RTR) +// Notice that tilt and roughness multipliers are a-priori per Epic artistic taste +float M_R(Surface surface, float Lh, float sinLiPlusSinLr) +{ + float a = 1.0f * surface.cuticleTilt; // Tilt is translate as the mean offset + float b = 0.5 * surface.roughnessA2; // Roughness is used as the standard deviation + +// return GaussianNormalized(sinLiPlusSinLr, a, b); // reference + return GaussianNormalized(Lh, a, b); +} + +float M_TT(Surface surface, float Lh, float sinLiPlusSinLr) +{ + float a = 1.0 * surface.cuticleTilt; + float b = 0.5 * surface.roughnessA2; + +// return GaussianNormalized(sinLiPlusSinLr, a, b); // reference + return GaussianNormalized(Lh, a, b); +} + +float M_TRT(Surface surface, float Lh, float sinLiPlusSinLr) +{ + float a = 1.5 * surface.cuticleTilt; + float b = 1.0 * surface.roughnessA2; + +// return GaussianNormalized(sinLiPlusSinLr, a, b); // reference + return GaussianNormalized(Lh, a, b); +} + + +// Azimuth functions (N_R, N_TT, N_RTR) +float N_R(Surface surface, float cos_O2, float3 Wi, float3 Wr, float f0) +{ + // Fresnel part of the attentuation term (A in the papers) + float fresnel = FresnelSchlick( sqrt(0.5 * dot(Wi, Wr) + 0.5) , f0); + + // Distribution term + float distribution = 0.25 * cos_O2; + + // No absorption term since this is the reflected light path + return fresnel * distribution; +} + +// Light passes through the hair and exits at the back - most dominant effect +// will be of lights at the back of the hair when the hair is thin and not concealed +float3 N_TT(Surface surface, float n2, float cos_O, float cos_O2, float3 cos_Ld, float f0) +{ + // Helper variables (see papers) + float a = rcp(n2); + float h = (1 + a * (0.6 - (0.8 * cos_O))) * cos_O2; + + // Fresnel part of the attentuation term (A in the papers) + float fresnel = FresnelSchlick(cos_Ld * sqrt( 1 - (h*h) ), f0); + fresnel = Pow2(1 - fresnel); + + // The absorption part of the attenuation term (A in the papers). + float3 absorption = pow(surface.albedo, sqrt( 1 - (h*h*a*a) ) / (2 * cos_Ld) ); + + // Distribution term + float distribution = exp(-3.65 * cos_O - 3.98); + + return absorption * (fresnel * distribution); +} + +float3 N_TRT(Surface surface, float cos_O, float3 cos_Ld, float f0) +{ + // Helper variables (see papers) + float h = sqrt(3.0f) * 0.5f; + + // Fresnel part of the attentuation term (A in the papers) + float fresnel = FresnelSchlick(cos_Ld * sqrt( 1 - (h*h) ), f0); + fresnel = Pow2(1 - fresnel) * fresnel; + + // How much light the hair will absorb. Part of the attenuation term (A in the papers) + float3 absorption = pow(surface.albedo, 0.8f / max(cos_Ld, 0.001) ); + + // Distribution term + float distribution = exp(17.0f * cos_O - 16.78f); + + return absorption * (fresnel * distribution); +} + +//------------------------------------------------------------------------------ +// The BSDF lighting function used by Hair +//------------------------------------------------------------------------------ +float3 HairMarschnerBSDF(Surface surface, LightingData lightingData, const float3 dirToLight) +{ + //-------------- Lighting Parameters Calculations --------------- + // Incoming and outgoing light directions + float3 Wi = normalize(dirToLight); // Incident light direction + float3 Wr = normalize(lightingData.dirToCamera); // Reflected light measurement direction AKA reflection + float3 T = normalize(surface.tangent); // Hair tangent + + // Incident light and reflection direction projected along the tangent + float Ti = T * dot(T, Wi); + float Tr = T * dot(T, Wr); + + // The light and reflection vectors projected along the normal plane to the hair. + // The plane is spliting the Azimuth and Longtitude angles and vectors contributions. + float3 NPi = normalize(Wi - Ti); + float3 NPr = normalize(Wr - Tr); + + // Azimuthal angle between the incident light vector and the reflection + // direction (the direction at which we measure the light scaterring) + // float O = acos(dot(NPi, NPr)) <- Unused, for reference only + float cos_O = dot(NPi, NPr); + + // cosine(O / 2) + float cos_O2 = sqrt(0.5 * cos_O + 0.5); // <- trigonometric formula for calculating cos(x/2) given cos(x) + + // Longitude angles + float Li = acos(clamp(dot(Wi, NPi),-1.0f, 1.0f)); + float Lr = acos(clamp(dot(Wr, NPr),-1.0f, 1.0f)); + float Lh = (Lr + Li) * 0.5f; + float Ld = (Lr - Li) * 0.5f; + + // The folowing is according to the original article - reference only + // float sinLiPlusSinLr = dot(Wi, NPi) * dot(Wr, NPr);// sin(Li) + sin(Lr); + float sinLiPlusSinLr = sin(Li) + sin(Lr); + + // Refraction index + const float n = 1.55f; + float cos_Ld = cos(Ld); + float n2 = (1.19f / cos_Ld) + 0.36f * cos_Ld; + + // Fresnel F0 + float f0 = Pow2( (1.0f - n) / (1.0f + n) ); + + //--------------- Lighting accumulation per lobe ------------------ + float3 lighting = float3(0.0f, 0.0f, 0.0f); + + // R Path - single reflection from the hair towards the eye. + if (o_enableMarschner_R) + { + float lighting_R = o_enableLongtitudeCoeff ? M_R(surface, Lh, sinLiPlusSinLr) : 1.0f; + if (o_enableAzimuthCoeff) + lighting_R *= N_R(surface, cos_O2, Wi, Wr, f0); + + // The following lines are a cheap method to get occluded reflection by accoounting + // for the thickness if the reflection of light is going through the hair. + // A reminder for this approximation - this is the R and not the TT lobe. + float lightToEye = saturate(-dot(Wi, Wr)); + float selfOcclude = lightToEye * surface.thickness; + float lightTransferRatio = 1.0f - selfOcclude; + lightTransferRatio *= lightTransferRatio; + lighting_R *= lightTransferRatio; + + lighting += float3(lighting_R, lighting_R, lighting_R); + } + + // TT Path - ray passes through the hair. + // The ray from the eye is refracted into the hair, then refracted again through the + // back of the hair. The main contribution here would for thin hair areas from lights + // behind the hair that are not concealed. For thicker hair this contribution should + // be blocked by the head consealing the back light and by the thickness of the hair + // that absorbs this energy over thick area hence reducing the energy pass based + // on the average thickness. + if (o_enableMarschner_TT) + { + float3 lighting_TT = o_enableLongtitudeCoeff ? M_TT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); + if (o_enableAzimuthCoeff) + lighting_TT *= N_TT(surface, n2, cos_O, cos_O2, cos_Ld, f0); + + // Reduce back transmittance based on the thickness of the hair + lighting_TT *= (1.0f - surface.thickness); + lighting += lighting_TT; + } + + // TRT Path - ray refracted into the hair, reflected back inside and exits (refracted) + // the hair towards the eye. + if (o_enableMarschner_TRT) + { + float3 lighting_TRT = o_enableLongtitudeCoeff ? M_TRT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); + if (o_enableAzimuthCoeff) + lighting_TRT *= N_TRT(surface, cos_O, cos_Ld, f0); + lighting += lighting_TRT; + } + + return lighting; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLocalShapeConstraintsCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairLocalShapeConstraintsCompute.shader new file mode 100644 index 0000000000..18d5b2d3bd --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLocalShapeConstraintsCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "LocalShapeConstraints", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.azsl b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.azsl new file mode 100644 index 0000000000..82c677faad --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.azsl @@ -0,0 +1,233 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to per-pixel linked lists. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//============================================================================== +#include +#include + +//!------------------------------ SRG Structure -------------------------------- +//! Per pass SRG the holds the dynamic shared read-write buffer shared +//! across all dispatches and draw calls and used for all the dynamic buffers +//! that can change between passes due to the application of skinning, simulation +//! and physics affect and is then read by the rendering shaders. +ShaderResourceGroup PassSrg : SRG_PerPass_WithFallback +{ //! This shared buffer needs to match the SharedBuffer structure + //! shared between all draw calls / dispatches for the hair skinning + StructuredBuffer m_skinnedHairSharedBuffer; + + //! Per Pixel Linked List data used by the render raster pass to generate per pixel + //! hair OIT data and shade it in the full screen resolve pass. + //! Originally used space3 for raster pass linked lists and space0 for the resolve pass. + RWTexture2D m_fragmentListHead; + RWStructuredBuffer m_linkedListNodes; + RWBuffer m_linkedListCounter; + + // Linear depth is used for getting the screen to world transform + Texture2D m_linearDepth; +} + +//------------------------------------------------------------------------------ +// Originally marked for the TressFX raster pass at space3 +#define RWFragmentListHead PassSrg::m_fragmentListHead +#define LinkedListUAV PassSrg::m_linkedListNodes +#define LinkedListCounter PassSrg::m_linkedListCounter +//------------------------------------------------------------------------------ + + +//!============================================================================= +//! +//! Per Instance Space 1 - Dynamic Buffers for Hair Skinning and Simulation +//! +//! ---------------------------------------------------------------------------- +struct StrandLevelData +{ + float4 skinningQuat; + float4 vspQuat; + float4 vspTranslation; +}; +//!------------------------------ SRG Structure -------------------------------- +//! Per instance/draw SRG representing dynamic read-write set of buffers +//! that are unique per instance and are shared and changed between passes due +//! to the application of skinning, simulation and physics affect. +//! It is then also read by the rendering shaders. +//! This Srg is NOT shared by the passes since it requires having barriers between +//! both passes and draw calls, instead, all buffers are allocated from a single +//! shared buffer (through BufferViews) and that buffer is then shared between +//! the passes via the PerPass Srg frequency. +ShaderResourceGroup HairDynamicDataSrg : SRG_PerObject // space 1 - per instance / object +{ + Buffer m_hairVertexPositions; + Buffer m_hairVertexTangents; + + //! Per hair object offset to the start location of each buffer within + //! 'm_skinnedHairSharedBuffer'. The offset is in bytes! + uint m_positionBufferOffset; + uint m_tangentBufferOffset; +}; +//------------------------------------------------------------------------------ +// Allow for the code to run with minimal changes - skinning / simulation compute passes + +// Usage of per-instance buffer +#define g_GuideHairVertexPositions HairDynamicDataSrg::m_hairVertexPositions +#define g_GuideHairVertexTangents HairDynamicDataSrg::m_hairVertexTangents + +//============================================================================== +#include +//============================================================================== +//! Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; + float4 Tangent : Tangent; + float4 p0p1 : TEXCOORD0; + float4 StrandColor : TEXCOORD1; +}; + +//! Hair Render VS +PS_INPUT_HAIR RenderHairVS(uint vertexId : SV_VertexID) +{ +// uint2 scrSize; +// PassSrg::m_linearDepth.GetDimensions(scrSize.x, scrSize.y); +// TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye.xyz, float2(scrSize), g_mVP); + + // [To Do] Hair: the above code should replace the existing but requires modifications to + // the function GetExpandedTressFXVert. + // Note that in Atom g_vViewport is aspect ratio and NOT size. + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye.xyz, g_vViewport.zw, g_mVP); + + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = tressfxVert.Tangent; + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = tressfxVert.StrandColor; + + return Output; +} + +// Allocate a new fragment location in fragment color, depth, and link buffers +int AllocateFragment(int2 vScreenAddress) +{ + uint newAddress; + InterlockedAdd(LinkedListCounter[0], 1, newAddress); + + if (newAddress < 0 || newAddress >= NodePoolSize) + newAddress = FRAGMENT_LIST_NULL; + return newAddress; +} + +// Insert a new fragment at the head of the list. The old list head becomes the +// the second fragment in the list and so on. Return the address of the *old* head. +int MakeFragmentLink(int2 vScreenAddress, int nNewHeadAddress) +{ + int nOldHeadAddress; + InterlockedExchange(RWFragmentListHead[vScreenAddress], nNewHeadAddress, nOldHeadAddress); + return nOldHeadAddress; +} + +// Write fragment attributes to list location. +void WriteFragmentAttributes(int nAddress, int nPreviousLink, float4 vData, float3 vColor3, float fDepth) +{ + PPLL_STRUCT element; + element.data = PackFloat4IntoUint(vData); + element.color = PackFloat3ByteIntoUint(vColor3, RenderParamsIndex); + element.depth = asuint(saturate(fDepth)); + element.uNext = nPreviousLink; + LinkedListUAV[nAddress] = element; +} + + +// Use the following structure for debug purposes for outputting test results to RT +// You can use depth, color or both when outputing and testing the calculation. +struct PSOutput +{ + float4 m_color : SV_Target0; + float m_depth : SV_Depth; +}; + + +////////////////////////////////////////////////////////////// +// PPLL Fill PS +// First pass of PPLL implementation +// Builds up the linked list of hair fragments +[earlydepthstencil] +void PPLLFillPS(PS_INPUT_HAIR input) +{ + // Strand Color read in is either the BaseMatColor, or BaseMatColor modulated with a color read + // from texture in the vertex shader for base color along with modulation by the tip color + float4 strandColor = float4(input.StrandColor.rgb, MatBaseColor.a); + + // If we are supporting strand UV texturing, further blend in the texture color/alpha + // Do this while computing NDC and coverage to hide latency from texture lookup + if (EnableStrandUV) + { + // Grab the uv in case we need it + float2 uv = float2(input.Tangent.w, input.StrandColor.w); + + // Apply StrandUVTiling + float2 strandUV = float2(uv.x, (uv.y * StrandUVTilingFactor) - floor(uv.y * StrandUVTilingFactor)); + + strandColor.rgb *= StrandAlbedoTexture.Sample(LinearWrapSampler, strandUV).rgb; + } + + ////////////////////////////////////////////////////////////////////// + // [To Do] Hair: anti aliasing via coverage requires work and is disabled for now + float3 vNDC = ScreenPosToNDC(PassSrg::m_linearDepth, input.Position.xy, input.Position.z); + uint2 dimensions; + PassSrg::m_linearDepth.GetDimensions(dimensions.x, dimensions.y); +// float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, float2(dimensions.x, dimensions.y)); + float coverage = 1.0; + ///////////////////////////////////////////////////////////////////// + + // Update the alpha to have proper value (accounting for coverage, base alpha, and strand alpha) + float alpha = coverage * strandColor.w; + + // Early out + if (alpha < 1.f / 255.f) + { + discard; + } + + // Get the screen address + int2 vScreenAddress = int2(input.Position.xy); + + // Allocate a new fragment + int nNewFragmentAddress = AllocateFragment(vScreenAddress); + + int nOldFragmentAddress = MakeFragmentLink(vScreenAddress, nNewFragmentAddress); + WriteFragmentAttributes(nNewFragmentAddress, nOldFragmentAddress, + float4(input.Tangent.xyz * 0.5 + float3(0.5, 0.5, 0.5), alpha), + strandColor.xyz, + input.Position.z + ); +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.shader b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.shader new file mode 100644 index 0000000000..e4859eca9b --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.shader @@ -0,0 +1,43 @@ +{ + "Source" : "HairRenderingFillPPLL.azsl", + "DrawList" : "hairFillPass", + + "DepthStencilState" : + { + "Depth" : + { + "Enable" : true, + "CompareFunc" : "GreaterEqual" + // Originally in TressFX this is LessEqual - Atom is using reverse sort + }, + "Stencil" : + { + "Enable" : false + } + }, + + "RasterState" : + { + "CullMode" : "None" + }, + + "BlendState" : + { + "Enable" : false + }, + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "RenderHairVS", + "type": "Vertex" + }, + { + "name": "PPLLFillPS", + "type": "Fragment" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.azsl b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.azsl new file mode 100644 index 0000000000..82c75280f6 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.azsl @@ -0,0 +1,394 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to per-pixel linked lists. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//============================================================================== +#include +#include + +#define AMD_TRESSFX_MAX_HAIR_GROUP_RENDER 16 + +//!------------------------------ SRG Structure -------------------------------- +//! Per pass SRG that holds the dynamic shared read-write buffer shared +//! across all dispatches and draw calls. It is used for all the dynamic buffers +//! that can change between passes due to the application of skinning, simulation +//! and physics affect. +//! Once the compute pases are done, it is read by the rendering shaders. +ShaderResourceGroup PassSrg : SRG_PerPass_WithFallback +{ + //! Per Pixel Linked List data used by the render raster pass to generate per pixel + //! hair OIT data and shade it in the full screen resolve pass. + //! Originally used space3 for raster pass linked lists and space0 for the resolve pass. + Texture2D m_fragmentListHead; + StructuredBuffer m_linkedListNodes; + + //! Per hair object material array used by the PPLL resolve pass + //! Originally in TressFXRendering.hlsl this is space 0 + HairObjectShadeParams m_hairParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; + + // Used as the base color to blend with the furthest hair strand - it is the first + // in the OIT process. + // It can also be used to avoid the HW blend done at the end of the pixel + // shader stage but HW blend might be cheaper than additional PS blend. + Texture2D m_frameBuffer; // The merged MSAA output + + // Linear depth is used for getting the screen to world transform + Texture2D m_linearDepth; + + //------------------------------ + // Lighting Data + //------------------------------ + Sampler LinearSampler + { // Required by LightingData.azsli + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; + }; + + Texture2DArray m_directionalLightShadowmap; + Texture2DArray m_directionalLightExponentialShadowmap; + Texture2DArray m_projectedShadowmaps; + Texture2DArray m_projectedExponentialShadowmap; + Texture2D m_brdfMap; + Texture2D m_tileLightData; + StructuredBuffer m_lightListRemapped; +} + +//------------------------------------------------------------------------------ +// Originally defined for the TressFX resolve pass at space0 +#define FragmentListHead PassSrg::m_fragmentListHead +#define LinkedListNodes PassSrg::m_linkedListNodes +//! The hair objects' material array buffer used by the rendering resolve pass +#define HairParams PassSrg::m_hairParams +//============================================================================== + +#include +#include +#include + +// Generates a fullscreen triangle from pipeline provided vertex id +VSOutput FullScreenVS(VSInput input) +{ + VSOutput OUT; + + float4 posTex = GetVertexPositionAndTexCoords(input.m_vertexID); + + OUT.m_texCoord = float2(posTex.z, posTex.w); + OUT.m_position = float4(posTex.x, posTex.y, 0.0, 1.0); + + return OUT; +} + +////////////////////////////////////////////////////////////// +// Bind data for PPLLResolvePS + +#define NODE_DATA(x) LinkedListNodes[x].data +#define NODE_NEXT(x) LinkedListNodes[x].uNext +#define NODE_DEPTH(x) LinkedListNodes[x].depth +#define NODE_COLOR(x) LinkedListNodes[x].color + +#define GET_DEPTH_AT_INDEX(uIndex) kBuffer[uIndex].x +#define GET_DATA_AT_INDEX(uIndex) kBuffer[uIndex].y +#define GET_COLOR_AT_INDEX(uIndex) kBuffer[uIndex].z +#define STORE_DEPTH_AT_INDEX(uIndex, uValue) kBuffer[uIndex].x = uValue +#define STORE_DATA_AT_INDEX( uIndex, uValue) kBuffer[uIndex].y = uValue +#define STORE_COLOR_AT_INDEX( uIndex, uValue ) kBuffer[uIndex].z = uValue + +float GetLinearDepth(float zDepth) +{ + return abs(((ViewSrg::GetFarZTimesNearZ()) / (ViewSrg::GetFarZMinusNearZ() * zDepth - ViewSrg::GetFarZ()))); +} + +float4 GatherLinkedList(float2 vfScreenAddress, float2 screenUV, inout float outDepth ) +{ + uint2 vScreenAddress = uint2(vfScreenAddress); + uint pointer = FragmentListHead[vScreenAddress]; + + + if (pointer == FRAGMENT_LIST_NULL) // [To Do] Skips the very first hair if reset value is 0 + { + discard; + } + + uint4 kBuffer[KBUFFER_SIZE]; + + // Init kbuffer to far depth values (reverse depth - 0 is the furthest) + [unroll] + for (int t = 0; t < KBUFFER_SIZE; ++t) + { + STORE_DEPTH_AT_INDEX(t, asuint(0.0)); + STORE_DATA_AT_INDEX(t, 0); + } + + // Get first K elements from the top (top to bottom) + // And store them in the kbuffer for later + for (int p = 0; p < KBUFFER_SIZE; ++p) + { + if (pointer != FRAGMENT_LIST_NULL) + { + STORE_DEPTH_AT_INDEX(p, NODE_DEPTH(pointer)); + STORE_DATA_AT_INDEX(p, NODE_DATA(pointer)); + STORE_COLOR_AT_INDEX(p, NODE_COLOR(pointer)); + pointer = NODE_NEXT(pointer); + } + } + +// float4 fcolor = float4(1, 1, 1, 1); // Blend alpha and inverse alpha +// float4 fcolor = float4(1, 1, 1, 0); // Blend one and inverse alpha + // The very first color taken is the background render target pixel color. + // Alpha should be 1 for Alpha blend alpha and 0 for alpha One, depending on your + // alpha blending method of choice + // When using the render target as the input, alpha blending mode should be disabled! + float4 backgroundColor = float4(PassSrg::m_frameBuffer.Sample(PassSrg::LinearSampler, screenUV).xyz, 0); // Blend one and inverse alpha + float4 fcolor = backgroundColor; + float backgroundLinearDepth = PassSrg::m_linearDepth.Sample(PassSrg::LinearSampler, screenUV).x; + float previousLinearDepth = backgroundLinearDepth; + + // Go through the remaining layers of hair + [allow_uav_condition] + for (int iFragment = 0; iFragment < MAX_FRAGMENTS && pointer != FRAGMENT_LIST_NULL ; ++iFragment) + { + int id = 0; + float minDepth = 1.0; + + // Find the current furthest sample in the KBuffer + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (minDepth > fDepth) + { + minDepth = fDepth; + id = i; + } + } + + // Fetch the node data + uint data = NODE_DATA(pointer); + uint color = NODE_COLOR(pointer); + uint nodeDepth = NODE_DEPTH(pointer); + float fNodeDepth = asfloat(nodeDepth); + + // If the node in the linked list is nearer than the furthest one in the local array, exchange the node + // in the local array for the one in the linked list. + if (minDepth < fNodeDepth) + { + uint tmp = GET_DEPTH_AT_INDEX(id); + STORE_DEPTH_AT_INDEX(id, nodeDepth); + fNodeDepth = asfloat(tmp); + + tmp = GET_DATA_AT_INDEX(id); + STORE_DATA_AT_INDEX(id, data); + data = tmp; + + tmp = GET_COLOR_AT_INDEX(id); + STORE_COLOR_AT_INDEX(id, color); + color = tmp; + } + + // Calculate color contribution from whatever sample we are using + float4 vData = UnpackUintIntoFloat4(data); + float alpha = vData.w; + + uint shadeParamIndex; // So we know what settings to shade with + float3 fragmentColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + + // Cheap back layers - the bottom hair layers use background and scalp base color + // The first layer blends the image buffer and the rest of the hairs are blended + // on top. + // These layer also used as the blocking factor for the TT lobe in the Marschner + // lighting model by accumulating the depth. + fcolor.xyz = fcolor.xyz * (1.f - alpha) + fragmentColor * alpha; + fcolor.w += alpha * (1.0f - fcolor.w); + + pointer = NODE_NEXT(pointer); + } + + // Make sure we are blending the correct number of strands (don't blend more than we have) + float maxAlpha = 0; + float minDepth = 1.0; // furthest fragment in Atom + const float closeRangeTH = 0.01f; // Lying on the skin - block lights from the back + const float gapRangeTH = 0.05f; // Far enough from the previous hair - allow for TT lobe to pass + bool isCloseToObject = false; + + // Blend the top-most entries + for (int j = 0; j < KBUFFER_SIZE; j++) + { + int id = 0; + minDepth = 1.0; + + // find the furthest node in the array + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (minDepth > fDepth) + { + minDepth = fDepth; + id = i; + } + } + + // take this node out of the next search + uint nodeDepth = GET_DEPTH_AT_INDEX(id); + uint data = GET_DATA_AT_INDEX(id); + uint color = GET_COLOR_AT_INDEX(id); + + // take this node out of the next search + STORE_DEPTH_AT_INDEX(id, asuint(1.0)); + + // Use high quality shading for the nearest k fragments + float fDepth = asfloat(nodeDepth); + float currentLinearDepth = GetLinearDepth(fDepth); + + // Light should not pass through hair if the back of the hair is too close to the + // background object. In this case mark the hair as thick to prevent TT lobe from + // transmitting light and cancel light accumulation passed so far. + bool currentIsCloseToObject = (backgroundLinearDepth - currentLinearDepth < closeRangeTH) ? true : false; + if (!isCloseToObject && currentIsCloseToObject) + { // Indicate that the object behind is very close - need to preven any light passage. + // Food for Thought: should the color be reset to background color / other? + isCloseToObject = true; // TT should be blocked +// fcolor.xyz = backgroundColor; // remove the accumulated lighting so far + fcolor.w = 1.0; // Mark hair as thick / blocked from behind. + } + + // When the front hair strands are separated from the back, hence creating a large + // gap we should only count for the front hair group thickness (restart counting). + bool hairHasGap = (previousLinearDepth - currentLinearDepth > gapRangeTH) ? true : false; + if (!currentIsCloseToObject && hairHasGap) + { // These is a gap to the previous strands group - restard depth blocking + fcolor.w = 0.0f; // Reset the hair thickness - large gap. + } + + previousLinearDepth = currentLinearDepth; + + float4 vData = UnpackUintIntoFloat4(data); + float3 vTangent = vData.xyz; + float alpha = vData.w; // Alpha will be used to determine light pass + uint shadeParamIndex; // So we know what settings to shade with + + float3 vColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + float3 fragmentColor = TressFXShading(vfScreenAddress, fDepth, vTangent, vColor, fcolor.w, shadeParamIndex); + + // Blend in the fragment color + fcolor.xyz = fcolor.xyz * (1.f - alpha) + fragmentColor * alpha; + // No HW alpha blending - the first layer blends the image buffer and + // the rest of the hairs are blended on top. However, this might be used + // as the blocking factor for the TT lobe in the Marschner lighting model + // to gradually block light passing through the hair strands from the back. + fcolor.w += alpha * (1.0f - fcolor.w); + } + + outDepth = minDepth; // Output closest hair depth + return fcolor; +} + +//!----------------------------------------------------------------------------- +//! This method is a testing method for displaying only the closest hair +//! strand for getting a clear method for testing the lighting elelments, the +//! depth and the blending of a single hair strand. +//!----------------------------------------------------------------------------- +float4 GetClosestFragment(float2 vfScreenAddress, float2 screenUV, inout float closestDepth) +{ + uint2 vScreenAddress = uint2(vfScreenAddress); + uint pointer = FragmentListHead[vScreenAddress]; + + if (pointer == FRAGMENT_LIST_NULL) + { + discard; + } + + float4 fcolor = float4(PassSrg::m_frameBuffer.Sample(PassSrg::LinearSampler, screenUV).xyz, 0); // Blend one and inverse alpha + + float maxDepth = -999.0f; + float minDepth = 999.0f; + uint curColor, curData; + for ( ; (pointer!=FRAGMENT_LIST_NULL) ; ) + { + float depth = asfloat(NODE_DEPTH(pointer)); + if (depth > maxDepth) + { + maxDepth = depth; + curColor = NODE_COLOR(pointer); + curData = NODE_DATA(pointer); + } + if (depth < minDepth) + { + minDepth = depth; + } + pointer = NODE_NEXT(pointer); + } + + float curDepth = closestDepth = maxDepth; + float4 vData = UnpackUintIntoFloat4(curData); + float3 vTangent = vData.xyz; + float alpha = 1.0; + uint shadeParamIndex; // the material index + float3 vColor = UnpackUintIntoFloat3Byte(curColor, shadeParamIndex); + float3 fragmentColor = TressFXShading(vfScreenAddress, curDepth, vTangent, vColor, fcolor.w, shadeParamIndex); + + // Blend in the fragment color + fcolor.xyz = fcolor.xyz * (1.f - alpha) + (fragmentColor * alpha); + fcolor.w = saturate(fcolor.w + alpha); // Blend alpha and inverse alpha + + /*-------------------- + // Depth Testing - this block will draw [closets hair depth, furthest hair depth, background depth] + float backgroundLinearDepth = PassSrg::m_linearDepth.Sample(PassSrg::LinearSampler, screenUV).x; + float minLinearDepth = GetLinearDepth(minDepth); + float maxLinearDepth = GetLinearDepth(maxDepth); + fcolor = float4( minLinearDepth * 0.1f, maxLinearDepth * 0.1f, backgroundLinearDepth * 0.1f, 1.0f); + //------------------- */ + + return fcolor; +} + +struct PSColorDepthOutput +{ + float4 m_color : SV_Target; + float m_depth : SV_Depth; +}; + +// The resolve will combine the base color driven by the further fragments while +// the actual shading will be combined on top based on the shaded closest fragments. +// The closest depth will be returned and written in the depth buffer. +PSColorDepthOutput PPLLResolvePS(VSOutput input) +{ + PSColorDepthOutput pixOut; + + // GetClosestFragment is a refernece method for testing the closest hair strand lone +// pixOut.m_color = GetClosestFragment(input.m_position.xy, input.m_texCoord, tangent, pixOut.m_depth); + + pixOut.m_color = GatherLinkedList(input.m_position.xy, input.m_texCoord, pixOut.m_depth); + + return pixOut; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.shader b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.shader new file mode 100644 index 0000000000..b3d56b980b --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.shader @@ -0,0 +1,42 @@ +{ + "Source" : "HairRenderingResolvePPLL.azsl", + + "DepthStencilState" : + { + "Depth" : + { + "Enable" : true, // The resolve will write the closest hair depth + // Pixels that don't belong to the hair will be discarded, otherwise if a fragment + // already exists in the list, it passed the depth test in the fill pass + "CompareFunc" : "Always" + }, + "Stencil" : + { + "Enable" : false + } + }, + + // Note that in the original TressFX 4.1 a blend operation is used with source One and destination AlphaSource. + // In our current implementation alpha blending is not required as the backbuffer is being sampled to create + // the proper background color. This will prevent having the slight silhuette that the original implementation + // sometime had. + "BlendState" : + { + "Enable" : false + }, + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "FullScreenVS", + "type": "Vertex" + }, + { + "name": "PPLLResolvePS", + "type": "Fragment" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingSrgs.azsli b/Gems/AtomTressFX/Assets/Shaders/HairRenderingSrgs.azsli new file mode 100644 index 0000000000..314592befc --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingSrgs.azsli @@ -0,0 +1,203 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//------------------------------------------------------------------------------ +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// originated from: TressFXRendering.hlsl + +#pragma once + +#include + +//------------------------------------------------------------------------------ +#define g_mVP ViewSrg::m_viewProjectionMatrix +#define g_vEye ViewSrg::m_worldPosition.xyz +#define g_vViewport ViewSrg::m_unprojectionConstants // xy = normaliz scale, zw = offset in 0..1 scale +#define cInvViewProjMatrix ViewSrg::m_viewProjectionInverseMatrix +//------------------------------------------------------------------------------ + +#define AMD_PI 3.1415926 +#define AMD_e 2.71828183 +#define AMD_TRESSFX_KERNEL_SIZE 5 +#define KBUFFER_SIZE 8 +#define MAX_FRAGMENTS 512 +// Using value 0 as indicator will skip the first hair fragment to allow +// for clear screen value (0). +// If Atom will allow other value (0xffffffff) this can be avoided. +#define FRAGMENT_LIST_NULL 0 +//!============================================================================= +//! +//! Render Pass only +//! +//!============================================================================= +// If you change this, you MUST also change TressFXRenderParams in TressFXConstantBuffers.h +// originally: cbuffer TressFXParameters : register(b3, space0) +struct TressFXRenderParameters +{ + // General information + float m_hairFiberRadius; + + // For deep approximated shadow lookup + float m_shadowAlpha; + float m_fiberSpacing; + + // Original TressFX Kajiya lighting model parameters + float m_hairKs2; + float m_hairEx2; + float3 m_fPadding0; + float4 m_matKValue; + + int m_maxShadowFibers; + + // Marschner lighting model parameters + float m_roughness; + float m_cuticleTilt; + + float m_fPadding1; +}; + +// Separate strand params from pixel render params (so we can index for PPLL) +// If you change this, you MUST change TressFXStrandParams in TressFXConstantBuffers.h +// originally: cbuffer TressFXStrandParameters : register(b4, space0) +struct TressFXStrandParameters +{ + float4 m_matBaseColor; + float4 m_matTipColor; + + float m_tipPercentage; + float m_strandUVTilingFactor; + float m_fiberRatio; + float m_fiberRadius; + + int m_numVerticesPerStrand; + int m_enableThinTip; + int m_nodePoolSize; + int m_renderParamsIndex; // Material index in the hair material array + + // Other params + int m_enableStrandUV; + int m_enableStrandTangent; + int2 m_iPadding1; +}; + +//!------------------------------ SRG Structure -------------------------------- +//! Used by the rendering raster pass only - might be possible to harness +//! the material pipeline / tooling. +//! This is the per draw Srg containing the specific per hair object parameters +//! for the physics simulation and material rendering. +//! Originally at space0 in TressFXRendering.hlsl +//!----------------------------------------------------------------------------- +ShaderResourceGroup HairRenderingMaterialSrg : SRG_PerMaterial +{ + // Generated + Buffer m_hairThicknessCoeffs; // Does not seem to be used! + Buffer m_hairStrandTexCd; + + //! The hair textures defining the color of the hair at its base + Texture2D m_baseAlbedoTexture; + Texture2D m_strandAlbedoTexture; + + //! The hair render material properties (combined with the above textures) + TressFXRenderParameters m_tressFXRenderParameters; + + //! The hair object physical material properties. + TressFXStrandParameters m_tressFXStrandParameters; + + Sampler LinearWrapSampler + { + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; + AddressW = Wrap; + }; +}; +//------------------------------------------------------------------------------ +#define g_HairThicknessCoeffs HairRenderingMaterialSrg::m_hairThicknessCoeffs +#define g_HairStrandTexCd HairRenderingMaterialSrg::m_hairStrandTexCd +#define BaseAlbedoTexture HairRenderingMaterialSrg::m_baseAlbedoTexture +#define StrandAlbedoTexture HairRenderingMaterialSrg::m_strandAlbedoTexture +#define LinearWrapSampler HairRenderingMaterialSrg::LinearWrapSampler + +#define HairFiberRadius HairRenderingMaterialSrg::m_tressFXRenderParameters.m_hairFiberRadius +#define ShadowAlpha HairRenderingMaterialSrg::m_tressFXRenderParameters.m_shadowAlpha +#define FiberSpacing HairRenderingMaterialSrg::m_tressFXRenderParameters.m_fiberSpacing +#define HairKs2 HairRenderingMaterialSrg::m_tressFXRenderParameters.m_hairKs2 +#define HairEx2 HairRenderingMaterialSrg::m_tressFXRenderParameters.m_hairEx2 +#define MatKValue HairRenderingMaterialSrg::m_tressFXRenderParameters.m_matKValue +#define MaxShadowFibers HairRenderingMaterialSrg::m_tressFXRenderParameters.m_maxShadowFibers + +#define MatBaseColor HairRenderingMaterialSrg::m_tressFXStrandParameters.m_matBaseColor +#define MatTipColor HairRenderingMaterialSrg::m_tressFXStrandParameters.m_matTipColor +#define TipPercentage HairRenderingMaterialSrg::m_tressFXStrandParameters.m_tipPercentage +#define StrandUVTilingFactor HairRenderingMaterialSrg::m_tressFXStrandParameters.m_strandUVTilingFactor +#define FiberRatio HairRenderingMaterialSrg::m_tressFXStrandParameters.m_fiberRatio +#define FiberRadius HairRenderingMaterialSrg::m_tressFXStrandParameters.m_fiberRadius +#define NumVerticesPerStrand HairRenderingMaterialSrg::m_tressFXStrandParameters.m_numVerticesPerStrand +#define EnableThinTip HairRenderingMaterialSrg::m_tressFXStrandParameters.m_enableThinTip +#define NodePoolSize HairRenderingMaterialSrg::m_tressFXStrandParameters.m_nodePoolSize +#define RenderParamsIndex HairRenderingMaterialSrg::m_tressFXStrandParameters.m_renderParamsIndex +#define EnableStrandUV HairRenderingMaterialSrg::m_tressFXStrandParameters.m_enableStrandUV +#define EnableStrandTangent HairRenderingMaterialSrg::m_tressFXStrandParameters.m_enableStrandTangent +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +//! If you change this, you MUST also change TressFXShadeParams in TressFXConstantBuffers.h +//! and ShadeParams in TressFXShortcut.hlsl +struct HairObjectShadeParams +{ + // General information + float m_fiberRadius; + // For deep approximated shadow lookup + float m_shadowAlpha; + float m_fiberSpacing; + + // Original TressFX Kajiya lighting model parameters + float m_hairEx2; + float4 m_matKValue; // KAmbient, KDiffuse, KSpec1, Exp1 + float m_hairKs2; + + // Marschner lighting model parameters + float m_roughness; + float m_cuticleTilt; + + float fPadding0; +}; + +//------------------------------------------------------------------------------ +struct PPLL_STRUCT +{ + uint depth; + uint data; + uint color; + uint uNext; +}; +//------------------------------------------------------------------------------ diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSimulationCommon.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCommon.azsli new file mode 100644 index 0000000000..a3ee3b9769 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCommon.azsli @@ -0,0 +1,444 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +//-------------------------------------------------------------------------------------- +// File: HairSimulation.azsl +// +// Physics simulation of hair using compute shaders +//-------------------------------------------------------------------------------------- + +#pragma once + +#define USE_MESH_BASED_HAIR_TRANSFORM 0 + +// If you change the value below, you must change it in TressFXAsset.h as well. +#ifndef THREAD_GROUP_SIZE + #define THREAD_GROUP_SIZE 64 +#endif + +groupshared float4 sharedPos[THREAD_GROUP_SIZE]; +groupshared float4 sharedTangent[THREAD_GROUP_SIZE]; +groupshared float sharedLength[THREAD_GROUP_SIZE]; + +//-------------------------------------------------------------------------------------- +// +// Helper Functions for the main simulation shaders +// +//-------------------------------------------------------------------------------------- +bool IsMovable(float4 particle) +{ + if ( particle.w > 0 ) + return true; + return false; +} + +float2 ConstraintMultiplier(float4 particle0, float4 particle1) +{ + if (IsMovable(particle0)) + { + if (IsMovable(particle1)) + return float2(0.5, 0.5); + else + return float2(1, 0); + } + else + { + if (IsMovable(particle1)) + return float2(0, 1); + else + return float2(0, 0); + } +} + +float4 MakeQuaternion(float angle_radian, float3 axis) +{ + // create quaternion using angle and rotation axis + float4 quaternion; + float halfAngle = 0.5f * angle_radian; + float sinHalf = sin(halfAngle); + + quaternion.w = cos(halfAngle); + quaternion.xyz = sinHalf * axis.xyz; + + return quaternion; +} + +// Makes a quaternion from a 4x4 column major rigid transform matrix. Rigid transform means that rotational 3x3 sub matrix is orthonormal. +// Note that this function does not check the orthonormality. +float4 MakeQuaternion(column_major float4x4 m) +{ + float4 q; + float trace = m[0][0] + m[1][1] + m[2][2]; + + if (trace > 0.0f) + { + float r = sqrt(trace + 1.0f); + q.w = 0.5 * r; + r = 0.5 / r; + q.x = (m[1][2] - m[2][1])*r; + q.y = (m[2][0] - m[0][2])*r; + q.z = (m[0][1] - m[1][0])*r; + } + else + { + int i = 0, j = 1, k = 2; + + if (m[1][1] > m[0][0]) + { + i = 1; j = 2; k = 0; + } + if (m[2][2] > m[i][i]) + { + i = 2; j = 0; k = 1; + } + + float r = sqrt(m[i][i] - m[j][j] - m[k][k] + 1.0f); + + float qq[4]; + + qq[i] = 0.5f * r; + r = 0.5f / r; + q.w = (m[j][k] - m[k][j])*r; + qq[j] = (m[j][i] + m[i][j])*r; + qq[k] = (m[k][i] + m[i][k])*r; + + q.x = qq[0]; q.y = qq[1]; q.z = qq[2]; + } + + return q; +} + +float4 InverseQuaternion(float4 q) +{ + float lengthSqr = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if ( lengthSqr < 0.001 ) + return float4(0, 0, 0, 1.0f); + + q.x = -q.x / lengthSqr; + q.y = -q.y / lengthSqr; + q.z = -q.z / lengthSqr; + q.w = q.w / lengthSqr; + + return q; +} + +float3 MultQuaternionAndVector(float4 q, float3 v) +{ + float3 uv, uuv; + float3 qvec = float3(q.x, q.y, q.z); + uv = cross(qvec, v); + uuv = cross(qvec, uv); + uv *= (2.0f * q.w); + uuv *= 2.0f; + + return v + uv + uuv; +} + +float4 MultQuaternionAndQuaternion(float4 qA, float4 qB) +{ + float4 q; + + q.w = qA.w * qB.w - qA.x * qB.x - qA.y * qB.y - qA.z * qB.z; + q.x = qA.w * qB.x + qA.x * qB.w + qA.y * qB.z - qA.z * qB.y; + q.y = qA.w * qB.y + qA.y * qB.w + qA.z * qB.x - qA.x * qB.z; + q.z = qA.w * qB.z + qA.z * qB.w + qA.x * qB.y - qA.y * qB.x; + + return q; +} + +float4 NormalizeQuaternion(float4 q) +{ + float4 qq = q; + float n = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if (n < 1e-10f) + { + qq.w = 1; + return qq; + } + + qq *= 1.0f / sqrt(n); + return qq; +} + +// Compute a quaternion which rotates u to v. u and v must be unit vector. +float4 QuatFromTwoUnitVectors(float3 u, float3 v) +{ + float r = 1.f + dot(u, v); + float3 n; + + // if u and v are parallel + if (r < 1e-7) + { + r = 0.0f; + n = abs(u.x) > abs(u.z) ? float3(-u.y, u.x, 0.f) : float3(0.f, -u.z, u.y); + } + else + { + n = cross(u, v); + } + + float4 q = float4(n.x, n.y, n.z, r); + return NormalizeQuaternion(q); +} + +// Make the inpute 4x4 matrix be identity +float4x4 MakeIdentity() +{ + float4x4 m; + m._m00 = 1; m._m01 = 0; m._m02 = 0; m._m03 = 0; + m._m10 = 0; m._m11 = 1; m._m12 = 0; m._m13 = 0; + m._m20 = 0; m._m21 = 0; m._m22 = 1; m._m23 = 0; + m._m30 = 0; m._m31 = 0; m._m32 = 0; m._m33 = 1; + + return m; +} + +void ApplyDistanceConstraint(inout float4 pos0, inout float4 pos1, float targetDistance, float stiffness = 1.0) +{ + float3 delta = pos1.xyz - pos0.xyz; + float distance = max(length(delta), 1e-7); + float stretching = 1 - targetDistance / distance; + delta = stretching * delta; + float2 multiplier = ConstraintMultiplier(pos0, pos1); + + pos0.xyz += multiplier[0] * delta * stiffness; + pos1.xyz -= multiplier[1] * delta * stiffness; +} + +void CalcIndicesInVertexLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInVertexLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInStrandLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +void CalcIndicesInStrandLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +//-------------------------------------------------------------------------------------- +// +// Integrate +// +// Verlet integration for calculating the new position based on exponential decay to move +// from the current position towards an approximated extrapolation point based +// on the velocity between the two last points and influenced by gravity force. +//-------------------------------------------------------------------------------------- +float3 Integrate(float3 curPosition, float3 oldPosition, float3 initialPos, float dampingCoeff = 1.0f) +{ + float3 force = g_GravityMagnitude * float3(0, 0, -1.0f); + // float decay = exp(-g_TimeStep/decayTime) + float decay = exp(-dampingCoeff * g_TimeStep * 60.0f); + return curPosition + decay * (curPosition - oldPosition) + force * g_TimeStep * g_TimeStep; +} + + +struct CollisionCapsule +{ + float4 p0; // xyz = position of capsule 0, w = radius 0 + float4 p1; // xyz = position of capsule 1, w = radius 1 +}; + +//-------------------------------------------------------------------------------------- +// +// CapsuleCollision +// +// Moves the position based on collision with capsule +// +//-------------------------------------------------------------------------------------- +bool CapsuleCollision(float4 curPosition, float4 oldPosition, inout float3 newPosition, CollisionCapsule cc, float friction = 0.4f) +{ + const float radius0 = cc.p0.w; + const float radius1 = cc.p1.w; + newPosition = curPosition.xyz; + + if ( !IsMovable(curPosition) ) + return false; + + float3 segment = cc.p1.xyz - cc.p0.xyz; + float3 delta0 = curPosition.xyz - cc.p0.xyz; + float3 delta1 = cc.p1.xyz - curPosition.xyz; + + float dist0 = dot(delta0, segment); + float dist1 = dot(delta1, segment); + + // colliding with sphere 1 + if (dist0 < 0.f ) + { + if ( dot(delta0, delta0) < radius0 * radius0) + { + float3 n = normalize(delta0); + newPosition = radius0 * n + cc.p0.xyz; + return true; + } + + return false; + } + + // colliding with sphere 2 + if (dist1 < 0.f ) + { + if ( dot(delta1, delta1) < radius1 * radius1) + { + float3 n = normalize(-delta1); + newPosition = radius1 * n + cc.p1.xyz; + return true; + } + + return false; + } + + // colliding with middle cylinder + float3 x = (dist0 * cc.p1.xyz + dist1 * cc.p0.xyz) / (dist0 + dist1); + float3 delta = curPosition.xyz - x; + + float radius_at_x = (dist0 * radius1 + dist1 * radius0) / (dist0 + dist1); + + if ( dot(delta, delta) < radius_at_x * radius_at_x) + { + float3 n = normalize(delta); + float3 vec = curPosition.xyz - oldPosition.xyz; + float3 segN = normalize(segment); + float3 vecTangent = dot(vec, segN) * segN; + float3 vecNormal = vec - vecTangent; + newPosition = oldPosition.xyz + friction * vecTangent + (vecNormal + radius_at_x * n - delta); + return true; + } + + return false; +} + +float3 ApplyVertexBoneSkinning(float3 vertexPos, BoneSkinningData skinningData, inout float4 bone_quat) +{ + float3 newVertexPos; + +#if TRESSFX_DQ + { + // weighted rotation part of dual quaternion + float4 nq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2] * skinningData.boneWeight.x + + g_BoneSkinningDQ[skinningData.boneIndex.y * 2] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2] * skinningData.boneWeight.z + + g_BoneSkinningDQ[skinningData.boneIndex.w * 2] * skinningData.boneWeight.w; + + // weighted tranlation part of dual quaternion + float4 dq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2 + 1] * skinningData.boneWeight.x + + g_BoneSkinningDQ[skinningData.boneIndex.y * 2 + 1] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2 + 1] * skinningData.boneWeight.z + + g_BoneSkinningDQ[skinningData.boneIndex.w * 2 + 1] * skinningData.boneWeight.w; + + float len = rsqrt(dot(nq, nq)); + nq *= len; + dq *= len; + + bone_quat = nq; + + //convert translation part of dual quaternion to translation vector: + float3 translation = (nq.w*dq.xyz - dq.w*nq.xyz + cross(nq.xyz, dq.xyz)) * 2; + + newVertexPos = MultQuaternionAndVector(nq, vertexPos) + translation.xyz; + } +#else + { + // Interpolate world space bone matrices using weights. + row_major float4x4 bone_matrix = g_BoneSkinningMatrix[skinningData.boneIndex[0]] * skinningData.boneWeight[0]; + float weight_sum = skinningData.boneWeight[0]; + + for (int i = 1; i < 4; i++) + { + if (skinningData.boneWeight[i] > 0) + { + bone_matrix += g_BoneSkinningMatrix[skinningData.boneIndex[i]] * skinningData.boneWeight[i]; + weight_sum += skinningData.boneWeight[i]; + } + } + + bone_matrix /= weight_sum; + bone_quat = MakeQuaternion(bone_matrix); + + newVertexPos = mul(float4(vertexPos, 1), bone_matrix).xyz; + } +#endif + + return newVertexPos; +} + + +//-------------------------------------------------------------------------------------- +// +// UpdateFinalVertexPositions +// +// Updates the hair vertex positions based on the physics simulation +// +//-------------------------------------------------------------------------------------- +void UpdateFinalVertexPositions(float4 oldPosition, float4 newPosition, int globalVertexIndex) +{ + SetSharedPrevPrevPosition(globalVertexIndex, GetSharedPrevPosition(globalVertexIndex)); + SetSharedPrevPosition(globalVertexIndex, oldPosition); + SetSharedPosition(globalVertexIndex, newPosition); +} +//-------------------------------------------------------------------------------------- diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl new file mode 100644 index 0000000000..496aa5c7da --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl @@ -0,0 +1,437 @@ +/* +* Modifications Copyright (c) Contributors to the Open 3D Engine Project. +* For complete copyright and license terms please see the LICENSE at the root of this distribution. +* +* SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT +* +*/ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- +#include +#include + +//-------------------------------------------------------------------------------------- +// +// IntegrationAndGlobalShapeConstraints +// +// Compute shader to simulate the gravitational force with integration and to maintain the +// global shape constraints. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void IntegrationAndGlobalShapeConstraints( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // Copy data from init rest data to be used to set updated shared memory + float4 initialPos = float4(CM_TO_METERS,CM_TO_METERS,CM_TO_METERS,1.0) * g_InitialHairPositions[globalVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + + // position when this step starts. In other words, a position from the last step. + sharedPos[indexForSharedMem] = GetSharedPosition(globalVertexIndex); + float4 currentPos = sharedPos[indexForSharedMem]; + // float4 currentPos = sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + + GroupMemoryBarrierWithGroupSync(); + + // Integrate + float dampingCoeff = GetDamping(strandType); + float4 oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + + // reset if we got teleported + if (g_ResetPositions != 0.0f) + { // Originally part of the data here was NaN as the original TressFX code wrote number + // vertices including the follow hair although the shader accounts for that, hence + // memory was overwriten. In our implementation the memory resides all within + // a single buffer and this would actively overwrite the rest of the buffer hence + // destroying the original contexnt. + currentPos = initialPos; + g_HairVertexPositions[globalVertexIndex] = initialPos; + g_HairVertexPositionsPrev[globalVertexIndex] = initialPos; + g_HairVertexPositionsPrevPrev[globalVertexIndex] = initialPos; + oldPos = initialPos; + } + + // skipping all the physics simulation in between + if ( IsMovable(currentPos) ) + sharedPos[indexForSharedMem].xyz = Integrate(currentPos.xyz, oldPos.xyz, initialPos.xyz, dampingCoeff); + else + sharedPos[indexForSharedMem] = initialPos; + + // Global Shape Constraints + float stiffnessForGlobalShapeMatching = GetGlobalStiffness(strandType); + float globalShapeMatchingEffectiveRange = GetGlobalRange(strandType); + + if ( stiffnessForGlobalShapeMatching > 0 && globalShapeMatchingEffectiveRange ) + { + if ( IsMovable(sharedPos[indexForSharedMem]) ) + { + if ( (float)localVertexIndex < globalShapeMatchingEffectiveRange * (float)numVerticesInTheStrand ) + { + float factor = stiffnessForGlobalShapeMatching; + float3 del = factor * (initialPos - sharedPos[indexForSharedMem]).xyz; + sharedPos[indexForSharedMem].xyz += del; + } + } + } + + // update global position buffers + UpdateFinalVertexPositions(currentPos, sharedPos[indexForSharedMem], globalVertexIndex); +} + + +//-------------------------------------------------------------------------------------- +// +// Calculate Strand Level Data +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes two vertices within a strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CalculateStrandLevelData( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // Accounting for the right and left side of the strand. + float4 pos_old_old[2]; // previous previous positions for vertex 0 (root) and vertex 1. + float4 pos_old[2]; // previous positions for vertex 0 (root) and vertex 1. + float4 pos_new[2]; // current positions for vertex 0 (root) and vertex 1. + + pos_old_old[0] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex]; + pos_old_old[1] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex + 1]; + + pos_old[0] = g_HairVertexPositionsPrev[globalRootVertexIndex]; + pos_old[1] = g_HairVertexPositionsPrev[globalRootVertexIndex + 1]; + + pos_new[0] = g_HairVertexPositions[globalRootVertexIndex]; + pos_new[1] = g_HairVertexPositions[globalRootVertexIndex + 1]; + + float3 u = normalize(pos_old[1].xyz - pos_old[0].xyz); + float3 v = normalize(pos_new[1].xyz - pos_new[0].xyz); + + // Compute rotation and translation which transform pos_old to pos_new. + // Since the first two vertices are immovable, we can assume that there is no scaling during tranform. + float4 rot = QuatFromTwoUnitVectors(u, v); + float3 trans = pos_new[0].xyz - MultQuaternionAndVector(rot, pos_old[0].xyz); + + float vspCoeff = GetVelocityShockPropogation(); + float restLength0 = g_HairRestLengthSRV[globalRootVertexIndex]; + float vspAccelThreshold = GetVSPAccelThreshold(); + + // Increase the VSP coefficient by checking pseudo-acceleration to handle over-stretching when the character moves very fast + float accel = length(pos_new[1] - 2.0 * pos_old[1] + pos_old_old[1]); + + if (accel > vspAccelThreshold) + vspCoeff = 1.0f; + g_StrandLevelData[globalStrandIndex].vspQuat = rot; + g_StrandLevelData[globalStrandIndex].vspTranslation = float4(trans, vspCoeff); + + // Skinning + + // Copy data from init rest data to be used to set updated shared memory + float4 initialPos = float4(CM_TO_METERS,CM_TO_METERS,CM_TO_METERS,1.0) * g_InitialHairPositions[globalRootVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + g_StrandLevelData[globalStrandIndex].skinningQuat = bone_quat; +} + + +//-------------------------------------------------------------------------------------- +// +// VelocityShockPropagation +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes a vertex in a strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void VelocityShockPropagation( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // The first two vertices are the ones attached to the skin + if (localVertexIndex < 2) + return; + + float4 vspQuat = g_StrandLevelData[globalStrandIndex].vspQuat; + float4 vspTrans = g_StrandLevelData[globalStrandIndex].vspTranslation; + float vspCoeff = vspTrans.w; + + float4 pos_new_n = g_HairVertexPositions[globalVertexIndex]; + float4 pos_old_n = g_HairVertexPositionsPrev[globalVertexIndex]; + + pos_new_n.xyz = (1.f - vspCoeff) * pos_new_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_new_n.xyz) + vspTrans.xyz); + pos_old_n.xyz = (1.f - vspCoeff) * pos_old_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_old_n.xyz) + vspTrans.xyz); + + g_HairVertexPositions[globalVertexIndex].xyz = pos_new_n.xyz; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = pos_old_n.xyz; +} + + +//-------------------------------------------------------------------------------------- +// +// LocalShapeConstraints +// +// Compute shader to maintain the local shape constraints. +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LocalShapeConstraints( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // stiffness for local shape constraints + float stiffnessForLocalShapeMatching = GetLocalStiffness(strandType); + + // Going beyond the TH will create less stability in convergence + const float stabilityTH = 0.95f; + stiffnessForLocalShapeMatching = 0.5f * min(stiffnessForLocalShapeMatching, stabilityTH); + + //-------------------------------------------- + // Local shape constraint for bending/twisting + //-------------------------------------------- + { + float4 boneQuat = g_StrandLevelData[globalStrandIndex].skinningQuat; + + // vertex 1 through n-1 + for (uint localVertexIndex = 1; localVertexIndex < numVerticesInTheStrand - 1; localVertexIndex++) + { + uint globalVertexIndex = globalRootVertexIndex + localVertexIndex; + + float4 pos = g_HairVertexPositions[globalVertexIndex]; + float4 pos_plus_one = g_HairVertexPositions[globalVertexIndex + 1]; + float4 pos_minus_one = g_HairVertexPositions[globalVertexIndex - 1]; + + float3 bindPos = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex].xyz * CM_TO_METERS); + float3 bindPos_plus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex + 1].xyz * CM_TO_METERS); + float3 bindPos_minus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex - 1].xyz * CM_TO_METERS); + + float3 lastVec = pos.xyz - pos_minus_one.xyz; + + float3 vecBindPose = bindPos_plus_one - bindPos; + float3 lastVecBindPose = bindPos - bindPos_minus_one; + float4 rotGlobal = QuatFromTwoUnitVectors(normalize(lastVecBindPose), normalize(lastVec)); + + float3 orgPos_i_plus_1_InGlobalFrame = MultQuaternionAndVector(rotGlobal, vecBindPose) + pos.xyz; + float3 del = stiffnessForLocalShapeMatching * (orgPos_i_plus_1_InGlobalFrame - pos_plus_one.xyz); + + if (IsMovable(pos)) + pos.xyz -= del.xyz; + + if (IsMovable(pos_plus_one)) + pos_plus_one.xyz += del.xyz; + + + g_HairVertexPositions[globalVertexIndex].xyz = pos.xyz; + g_HairVertexPositions[globalVertexIndex + 1].xyz = pos_plus_one.xyz; + } + } +} + +//-------------------------------------------------------------------------------------- +// +// LengthConstriantsWindAndCollision +// +// Compute shader to move the vertex position based on wind, maintain the lenght constraints +// and handles collisions. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LengthConstriantsWindAndCollision(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + uint numOfStrandsPerThreadGroup = g_NumOfStrandsPerThreadGroup; + + //------------------------------ + // Copy data into shared memory + //------------------------------ + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedLength[indexForSharedMem] = g_HairRestLengthSRV[globalVertexIndex] * CM_TO_METERS; + + GroupMemoryBarrierWithGroupSync(); + +/* + //------------ + // Wind - does not work yet and requires some LTC + //------------ + if (any(g_Wind.xyz)) // g_Wind.w is the current frame + { + float4 force = float4(0, 0, 0, 0); + + if ( localVertexIndex >= 2 && localVertexIndex < numVerticesInTheStrand-1 ) + { + // combining four winds. + float a = ((float)(globalStrandIndex % 20))/20.0f; + float3 w = a* g_Wind.xyz + (1.0f - a) * g_Wind1.xyz + a * g_Wind2.xyz + (1.0f - a) * g_Wind3.xyz; +// float3 w = float3(5.2, 0, 0); + + uint sharedIndex = localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + float3 v = sharedPos[sharedIndex].xyz - sharedPos[sharedIndex+numOfStrandsPerThreadGroup].xyz; + float3 force = -cross(cross(v, w), v); + sharedPos[sharedIndex].xyz += force*g_TimeStep*g_TimeStep; + } + } + + GroupMemoryBarrierWithGroupSync(); +*/ + //---------------------------- + // Enforce length constraints + //---------------------------- + uint a = numVerticesInTheStrand/2.0f; + uint b = (numVerticesInTheStrand-1)/2.0f; + + int lengthContraintIterations = GetLengthConstraintIterations(); + + for ( int iterationE=0; iterationE < lengthContraintIterations; iterationE++ ) + { + uint sharedIndex = 2 * localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + // Notice that the following is based on the fact that we are dealing here with two vertices + // one at each side of the central control point and each should extend towards its side only. + if( localVertexIndex < a ) + ApplyDistanceConstraint(sharedPos[sharedIndex], sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedLength[sharedIndex].x); + + GroupMemoryBarrierWithGroupSync(); + + if( localVertexIndex < b ) + ApplyDistanceConstraint(sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedPos[sharedIndex+numOfStrandsPerThreadGroup*2], sharedLength[sharedIndex+numOfStrandsPerThreadGroup].x); + + GroupMemoryBarrierWithGroupSync(); + } + + //------------------------------------------ + // Collision handling with capsule objects + //------------------------------------------ + float4 oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + bool bAnyColDetected = false; // Adi +// bool bAnyColDetected = ResolveCapsuleCollisions(sharedPos[indexForSharedMem], oldPos); + GroupMemoryBarrierWithGroupSync(); + + //------------------- + // Compute tangent + //------------------- + // If this is the last vertex in the strand, we can't get tangent from subtracting from the next vertex, need to use last vertex to current + uint indexForTangent = (localVertexIndex == numVerticesInTheStrand - 1) ? indexForSharedMem - numOfStrandsPerThreadGroup : indexForSharedMem; + float3 tangent = sharedPos[indexForTangent + numOfStrandsPerThreadGroup].xyz - sharedPos[indexForTangent].xyz; + g_HairVertexTangents[globalVertexIndex].xyz = normalize(tangent); + + //--------------------------------------- + // clamp velocities, rewrite history + //--------------------------------------- + float3 positionDelta = sharedPos[indexForSharedMem].xyz - oldPos; + float speedSqr = dot(positionDelta, positionDelta); + if (speedSqr > g_ClampPositionDelta * g_ClampPositionDelta) { + positionDelta *= g_ClampPositionDelta * g_ClampPositionDelta / speedSqr; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = sharedPos[indexForSharedMem].xyz - positionDelta; + } + + //--------------------------------------- + // update global position buffers + //--------------------------------------- + g_HairVertexPositions[globalVertexIndex] = sharedPos[indexForSharedMem]; + + if (bAnyColDetected) + g_HairVertexPositionsPrev[globalVertexIndex] = sharedPos[indexForSharedMem]; + + return; +} + +//-------------------------------------------------------------------------------------- +// +// UpdateFollowHairVertices +// +// Last stage update of the follow hair to follow their guide hair +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void UpdateFollowHairVertices( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + sharedPos[indexForSharedMem] = GetSharedPosition(globalVertexIndex); // g_HairVertexPositions[globalVertexIndex]; + sharedTangent[indexForSharedMem].xyz = GetSharedTangent(globalVertexIndex); // g_HairVertexTangents[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + int globalFollowStrandIndex = globalStrandIndex + i + 1; + float factor = g_TipSeparationFactor*((float)localVertexIndex / (float)numVerticesInTheStrand) + 1.0f; + float3 followPos = sharedPos[indexForSharedMem].xyz + factor * CM_TO_METERS * g_FollowHairRootOffset[globalFollowStrandIndex].xyz; + + SetSharedPosition3(globalFollowVertexIndex, followPos); + // g_HairVertexPositions[globalFollowVertexIndex].xyz = followPos; + //----------------------- + // SetSharedTangent(globalFollowVertexIndex, sharedTangent[indexForSharedMem]); + g_HairVertexTangents[globalFollowVertexIndex] = sharedTangent[indexForSharedMem]; + } + + return; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSimulationSrgs.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSimulationSrgs.azsli new file mode 100644 index 0000000000..f95dac92cf --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSimulationSrgs.azsli @@ -0,0 +1,179 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//----------------------------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//------------------------------------------------------------------------------ +// File: HairSRGs.azsli +// +// Declarations of SRGs used by the hair shaders. +//------------------------------------------------------------------------------ +#pragma once + +#include + +//!----------------------------------------------------------------------------- +//! +//! Skinning / Simulation Render Usage +//! Per Objects Space 0 - Static Buffers for Hair Generation +//! +//! ---------------------------------------------------------------------------- +struct TressFXSimulationParams +{ + float4 m_Wind; + float4 m_Wind1; + float4 m_Wind2; + float4 m_Wind3; + + float4 m_Shape; // damping, local stiffness, global stiffness, global range. + float4 m_GravTimeTip; // gravity maginitude (assumed to be in negative y direction.) + int4 m_SimInts; // Length iterations, local iterations, collision flag. + int4 m_Counts; // num strands per thread group, num follow hairs per guid hair, num verts per strand. + float4 m_VSP; // VSP parameters - controls how Velocity Shock Propogation will dictate how + // fast velocities are handled and can be compensated using the hair root velocity + + float m_ResetPositions; + float m_ClampPositionDelta; + float m_pad1; + float m_pad2; + +#if TRESSFX_DQ // this option is currently not functional + float4 m_BoneSkinningDQ[AMD_TRESSFX_MAX_NUM_BONES * 2]; +#else + row_major float4x4 m_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +#endif +}; + +struct BoneSkinningData +{ + float4 boneIndex; // x, y, z and w component are four bone indices per strand + float4 boneWeight; // x, y, z and w component are four bone weights per strand +}; + +//!------------------------------ SRG Structure -------------------------------- +//! This is the static Srg required for the hair genration per hair object draw. +//! The data is used only for skinning / simulation and doesn't change between +//! the object's passes. +//! To match to the original TressFX naming follow the global defines bellow. +ShaderResourceGroup HairGenerationSrg : SRG_PerDraw +{ + // Buffers containing hair generation properties. + Buffer m_initialHairPositions; + Buffer m_hairRestLengthSRV; + Buffer m_hairStrandType; + Buffer m_followHairRootOffset; + StructuredBuffer m_boneSkinningData; + + // Constant buffer structure reflected in code as 'TressFXSimulationParams' + TressFXSimulationParams m_tressfxSimParameters; +}; + +//------------------------------------------------------------------------------ +// Allow for the code to run with minimal changes - compute passes usage + +#define g_InitialHairPositions HairGenerationSrg::m_initialHairPositions +#define g_HairRestLengthSRV HairGenerationSrg::m_hairRestLengthSRV +#define g_HairStrandType HairGenerationSrg::m_hairStrandType + +#define g_FollowHairRootOffset HairGenerationSrg::m_followHairRootOffset +#define g_BoneSkinningData HairGenerationSrg::m_boneSkinningData + +#define g_NumOfStrandsPerThreadGroup HairGenerationSrg::m_tressfxSimParameters.m_Counts.x +#define g_NumFollowHairsPerGuideHair HairGenerationSrg::m_tressfxSimParameters.m_Counts.y +#define g_NumVerticesPerStrand HairGenerationSrg::m_tressfxSimParameters.m_Counts.z + +#define g_NumLocalShapeMatchingIterations HairGenerationSrg::m_tressfxSimParameters.m_SimInts.y + +#define g_GravityMagnitude HairGenerationSrg::m_tressfxSimParameters.m_GravTimeTip.x +#define g_TimeStep HairGenerationSrg::m_tressfxSimParameters.m_GravTimeTip.y +#define g_TipSeparationFactor HairGenerationSrg::m_tressfxSimParameters.m_GravTimeTip.z + +#define g_Wind HairGenerationSrg::m_tressfxSimParameters.m_Wind +#define g_Wind1 HairGenerationSrg::m_tressfxSimParameters.m_Wind1 +#define g_Wind2 HairGenerationSrg::m_tressfxSimParameters.m_Wind2 +#define g_Wind3 HairGenerationSrg::m_tressfxSimParameters.m_Wind3 +#define g_ResetPositions HairGenerationSrg::m_tressfxSimParameters.m_ResetPositions +#define g_ClampPositionDelta HairGenerationSrg::m_tressfxSimParameters.m_ClampPositionDelta +#define g_BoneSkinningDQ HairGenerationSrg::m_tressfxSimParameters.m_BoneSkinningDQ +#define g_BoneSkinningMatrix HairGenerationSrg::m_tressfxSimParameters.m_BoneSkinningMatrix + +// We no longer support groups (indirection). +int GetStrandType(int globalThreadIndex) +{ + return 0; +} + +float GetDamping(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.x; +} + +float GetLocalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.y; +} + +float GetGlobalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.z; +} + +float GetGlobalRange(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.w; +} + +float GetVelocityShockPropogation() +{ + return HairGenerationSrg::m_tressfxSimParameters.m_VSP.x; +} + +float GetVSPAccelThreshold() +{ + return HairGenerationSrg::m_tressfxSimParameters.m_VSP.y; +} + +int GetLocalConstraintIterations() +{ + return (int)HairGenerationSrg::m_tressfxSimParameters.m_SimInts.y; +} + +int GetLengthConstraintIterations() +{ + return (int)HairGenerationSrg::m_tressfxSimParameters.m_SimInts.x; +} +//------------------------------------------------------------------------------ + diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSrgs.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSrgs.azsli new file mode 100644 index 0000000000..cb0bdc2c6c --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSrgs.azsli @@ -0,0 +1,217 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//----------------------------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//------------------------------------------------------------------------------ +// File: HairSRGs.azsli +// +// Declarations of SRGs used by the hair shaders. +//------------------------------------------------------------------------------ +#pragma once + +#include + +// Whether bones are specified by dual quaternion. +// This option is not currently functional. +#define TRESSFX_DQ 0 + +//! notice - the following constants need to match what appears in AMD_TressFX.h +#define AMD_TRESSFX_MAX_HAIR_GROUP_RENDER 16 +#define AMD_TRESSFX_MAX_NUM_BONES 512 + +#define CM_TO_METERS 1.0 +#define METERS_TO_CM 1.0 +//#define CM_TO_METERS 0.01 +//#define METERS_TO_CM 100.0 + +// The following macro is not being used yet due to limitation of the C preprocessor +// mcpp that creates a shader compilation fault not being able to extend the macro. +#define BYTE_OFFSET(index,baseOffset) ((baseOffset >> 2) + (index << 2)) + +//!------------------------------ SRG Structure -------------------------------- +//! Per pass SRG the holds the dynamic read-write buffer shared across all +//! dispatches and draw calls and used as the memory pool for all the dynamic +//! buffer that can change between passes due to the application of skinning, +//! simulation and physics affect and read by the rendering shaders. +ShaderResourceGroup PassSrg : SRG_PerPass +{ + RWStructuredBuffer m_skinnedHairSharedBuffer; +} + +//!============================================================================= +//! +//! Per Instance Space 1 - Dynamic Buffers for Hair Skinning and Simulation +//! +//! ---------------------------------------------------------------------------- +struct StrandLevelData +{ + float4 skinningQuat; + float4 vspQuat; + float4 vspTranslation; +}; + +//!------------------------------ SRG Structure -------------------------------- +//! Per instance/draw SRG representing dynamic read-write set of buffers +//! that are unique per instance and are shared and changed between passes due +//! to the application of skinning, simulation and physics affect. +//! It is then also read by the rendering shaders. +//! This Srg is NOT shared by the passes since it requires having barriers between +//! both passes and draw calls, instead, all buffers are allocated from a single +//! shared buffer (through BufferViews) and that buffer is then shared between +//! the passes via the PerPass Srg frequency. +ShaderResourceGroup HairDynamicDataSrg : SRG_PerObject // space 1 - per instance / object +{ + RWBuffer m_hairVertexPositions; + RWBuffer m_hairVertexPositionsPrev; + RWBuffer m_hairVertexPositionsPrevPrev; + RWBuffer m_hairVertexTangents; + RWStructuredBuffer m_strandLevelData; + + //! Per hair object offset to the start location of each buffer within + //! 'm_skinnedHairSharedBuffer'. The offset is in bytes! + uint m_positionBufferOffset; + uint m_positionPrevBufferOffset; + uint m_positionPrevPrevBufferOffset; + uint m_tangentBufferOffset; + uint m_strandLevelDataOffset; +}; +//------------------------------------------------------------------------------ +// Allow for the code to run with minimal changes - skinning / simulation compute passes + +// Usage of per-instance buffer +#define g_HairVertexPositions HairDynamicDataSrg::m_hairVertexPositions + +#define g_HairVertexPositionsPrev HairDynamicDataSrg::m_hairVertexPositionsPrev +#define g_HairVertexPositionsPrevPrev HairDynamicDataSrg::m_hairVertexPositionsPrevPrev +#define g_HairVertexTangents HairDynamicDataSrg::m_hairVertexTangents +#define g_StrandLevelData HairDynamicDataSrg::m_strandLevelData + +//------------------------------------------------------------------------------ +float3 GetSharedVector3(int offset) +{ + return float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 2]) + );// *CM_TO_METERS; // convert to meters when using +} + +void SetSharedVector3(int offset, float3 pos) +{ +// pos.xyz *= METERS_TO_CM; // convert to cm when storing + PassSrg::m_skinnedHairSharedBuffer[offset] = asint(pos.x); + PassSrg::m_skinnedHairSharedBuffer[offset+1] = asint(pos.y); + PassSrg::m_skinnedHairSharedBuffer[offset+2] = asint(pos.z); +} + +float4 GetSharedVector4(int offset) +{ + return float4( + float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 2]) + ),// * CM_TO_METERS, // convert to meters when using + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 3]) + ); +} + +void SetSharedVector4(int offset, float4 pos) +{ +// pos.xyz *= METERS_TO_CM; // convert to cm when storing + PassSrg::m_skinnedHairSharedBuffer[offset] = asint(pos.x); + PassSrg::m_skinnedHairSharedBuffer[offset+1] = asint(pos.y); + PassSrg::m_skinnedHairSharedBuffer[offset+2] = asint(pos.z); + PassSrg::m_skinnedHairSharedBuffer[offset+3] = asint(pos.w); +} + +//------------------------------------------------------------------------------ +//! Getter/setter of position / tangent in the global shared buffer based on the +//! per-instance offset of the instance positions buffer within the global shared buffer +void SetSharedPosition3(int vertexIndex, float3 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector3(vertexOffset, position); +} + +void SetSharedPosition(int vertexIndex, float4 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector4(vertexOffset, position); +} + +float4 GetSharedPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +void SetSharedPrevPosition(int vertexIndex, float4 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector4(vertexOffset, position); +} + +float4 GetSharedPrevPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +void SetSharedPrevPrevPosition(int vertexIndex, float4 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevPrevBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector4(vertexOffset, position); +} + +float4 GetSharedPrevPrevPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevPrevBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +void SetSharedTangent(int tangentIndex, float3 currentTangent) +{ + int tangentOffset = (HairDynamicDataSrg::m_tangentBufferOffset >> 2) + (tangentIndex << 2); + + PassSrg::m_skinnedHairSharedBuffer[tangentOffset] = asint(currentTangent.x); + PassSrg::m_skinnedHairSharedBuffer[tangentOffset+1] = asint(currentTangent.y); + PassSrg::m_skinnedHairSharedBuffer[tangentOffset+2] = asint(currentTangent.z); +} + +float3 GetSharedTangent(int tangentIndex) +{ + int tangentOffset = (HairDynamicDataSrg::m_tangentBufferOffset >> 2) + (tangentIndex << 2); + + return float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 2]) + ); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Shaders/HairStrands.azsli b/Gems/AtomTressFX/Assets/Shaders/HairStrands.azsli new file mode 100644 index 0000000000..b8c4ea9eb4 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairStrands.azsli @@ -0,0 +1,182 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to hair strands in the graphics pipeline. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include + +#define CM_TO_METERS_RENDER 0.01 + +float4 GetSharedVector4(int offset) +{ + return float4( + float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 2]) + ),// * CM_TO_METERS, // convert to meters when using + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 3]) + ); +} + +float4 GetSharedPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +float3 GetSharedTangent(int tangentIndex) +{ + int tangentOffset = (HairDynamicDataSrg::m_tangentBufferOffset >> 2) + (tangentIndex << 2); + + return float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 2]) + ); +} + +struct TressFXVertex +{ + float4 Position; + float4 Tangent; + float4 p0p1; + float4 StrandColor; +}; + +float3 GetStrandColor(int index, float fractionOfStrand) +{ + float3 rootColor; + float3 tipColor; + + float2 texCd = g_HairStrandTexCd[(float) index / NumVerticesPerStrand].xy; + rootColor = BaseAlbedoTexture.SampleLevel(LinearWrapSampler, texCd, 0).rgb; + tipColor = MatTipColor.rgb; + + // Multiply with Base Material color + rootColor *= MatBaseColor.rgb; + + // Update the color based on position along the strand (vertex level) and lerp between tip and root if within the tipPercentage requested + float rootRange = 1.f - TipPercentage; + return (fractionOfStrand > rootRange) ? lerp(rootColor, tipColor, (fractionOfStrand - rootRange) / TipPercentage) : rootColor; +} + +TressFXVertex GetExpandedTressFXVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + // Access the current line / curve segment - remember that the mesh is built around + // the center line / curve that is expanded as the vertices. + uint index = vertexId / 2; // vertexId is the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result +// float3 v = GetSharedPosition(index).xyz; + float3 v = g_GuideHairVertexPositions[index].xyz; + + // Both approaches (offset to shared buffer or BufferView) will work! +// float3 t = GetSharedTangent(index); + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; // need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 0.71 * CM_TO_METERS_RENDER; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v - right * ratio * FiberRadius, 1.0); + hairEdgePositions[1] = float4(v + right * ratio * FiberRadius, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Gonna hi-jack Tangent.w (unused) and add a .w component to strand color to store a strand UV + float2 strandUV; + strandUV.x = (vertexId & 0x01) ? 0.f : 1.f; + strandUV.y = fractionOfStrand; + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + // [To Do] Hair: remove the scale + + CM_TO_METERS_RENDER * fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) + * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + Output.Tangent = float4(t, strandUV.x); + Output.p0p1 = float4(hairEdgePositions[0].xy / max(hairEdgePositions[0].w, TRESSFX_FLOAT_EPSILON), hairEdgePositions[1].xy / max(hairEdgePositions[1].w, TRESSFX_FLOAT_EPSILON)); + Output.StrandColor = float4(GetStrandColor(index, fractionOfStrand), strandUV.y); + return Output; +} + +TressFXVertex GetExpandedTressFXShadowVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + + // Access the current line segment + uint index = vertexId / 2; // vertexId is actually the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result +// float3 v = GetSharedPosition(index).xyz; + float3 v = g_GuideHairVertexPositions[index].xyz; +// float3 t = GetSharedTangent(index); // Adi: both approaches will work!! + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; //need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 1.f * CM_TO_METERS_RENDER; // Disable for shadows 0.71; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v + -1.0 * right * ratio * FiberRadius * CM_TO_METERS_RENDER, 1.0); + hairEdgePositions[1] = float4(v + 1.0 * right * ratio * FiberRadius * CM_TO_METERS_RENDER, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + return Output; +} + +// EndHLSL + diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSurface.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSurface.azsli new file mode 100644 index 0000000000..16496f0dcd --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSurface.azsli @@ -0,0 +1,80 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +class Surface +{ + TransmissionSurfaceData transmission; + + // ------- BasePbrSurfaceData ------- + float3 position; //!< Position in world-space + float3 normal; //!< Normal in world-space + float3 albedo; //!< Albedo color of the non-metallic material, will be multiplied against the diffuse lighting value + float3 specularF0; //!< Fresnel f0 spectral value of the surface + float roughnessLinear; //!< Perceptually linear roughness value authored by artists. Must be remapped to roughnessA before use + float roughnessA; //!< Actual roughness value ( a.k.a. "alpha roughness") to be used in microfacet calculations + float roughnessA2; //!< Alpha roughness ^ 2 (i.e. roughnessA * roughnessA), used in GGX, cached here for perfromance + + // ------- Hair Surface Data ------- + float3 tangent; + float3 cuticleTilt; + float thickness; + + //! Applies specular anti-aliasing to roughnessA2 + void ApplySpecularAA(); + + //! Calculates roughnessA and roughnessA2 after roughness has been set + void CalculateRoughnessA(); + + //! Sets albedo and specularF0 using metallic workflow + void SetAlbedoAndSpecularF0(float3 baseColor, float specularF0Factor); + +}; + +// Specular Anti-Aliasing technique from this paper: +// http://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf +void Surface::ApplySpecularAA() +{ + // Constants for formula below + const float screenVariance = 0.25f; + const float varianceThresh = 0.18f; + + // Specular Anti-Aliasing + float3 dndu = ddx_fine( normal ); + float3 dndv = ddy_fine( normal ); + float variance = screenVariance * (dot( dndu , dndu ) + dot( dndv , dndv )); + float kernelRoughnessA2 = min(2.0 * variance , varianceThresh ); + float filteredRoughnessA2 = saturate ( roughnessA2 + kernelRoughnessA2 ); + roughnessA2 = filteredRoughnessA2; +} + +void Surface::CalculateRoughnessA() +{ + // The roughness value in microfacet calculations (called "alpha" in the literature) does not give perceptually + // linear results. Disney found that squaring the roughness value before using it in microfacet equations causes + // the user-provided roughness parameter to be more perceptually linear. We keep both values available as some + // equations need roughnessLinear (i.e. IBL sampling) while others need roughnessA (i.e. GGX equations). + // See Burley's Disney PBR: https://pdfs.semanticscholar.org/eeee/3b125c09044d3e2f58ed0e4b1b66a677886d.pdf + + roughnessA = max(roughnessLinear * roughnessLinear, MinRoughnessA); + roughnessA2 = roughnessA * roughnessA; + if(o_applySpecularAA) + { + ApplySpecularAA(); + } +} + +void Surface::SetAlbedoAndSpecularF0(float3 baseColor, float specularF0Factor) +{ + albedo = baseColor; + specularF0 = MaxDielectricSpecularF0 * specularF0Factor; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairUpdateFollowHairCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairUpdateFollowHairCompute.shader new file mode 100644 index 0000000000..c53a8a766f --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairUpdateFollowHairCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "UpdateFollowHairVertices", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairUtilities.azsli b/Gems/AtomTressFX/Assets/Shaders/HairUtilities.azsli new file mode 100644 index 0000000000..1d50d3c040 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairUtilities.azsli @@ -0,0 +1,167 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code utilities for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// Cutoff to not render hair + +#pragma once + +#include + + +#define SHORTCUT_MIN_ALPHA 0.02 + +#define TRESSFX_FLOAT_EPSILON 1e-7 + +//-------------------------------------------------------------------------------------- +// +// Controls whether you do mul(M,v) or mul(v,M) +// i.e., row major vs column major +// +//-------------------------------------------------------------------------------------- +float4 MatrixMult(float4x4 m, float4 v) +{ + return mul(m, v); +} + +// Given the depth buffer depth of the current pixel and the fragment XY position, +// reconstruct the NDC. +// screenCoords - from 0.. dimension of the screen of the current pixel +// screenTexture - screen buffer texture representing the same resolution we work in +// sDepth - the depth buffer depth at the fragment location +// NDC - Normalized Device Coordinates = warped screen space ( -1.1, -1..1, 0..1 ) +float3 ScreenPosToNDC( Texture2D screenTexture, float2 screenCoords, float depth ) +{ + uint2 dimensions; + screenTexture.GetDimensions(dimensions.x, dimensions.y); + float2 UV = saturate(screenCoords / dimensions.xy); + + float x = UV.x * 2.0f - 1.0f; + float y = (1.0f - UV.y) * 2.0f - 1.0f; + float3 NDC = float3(x, y, depth); + + return NDC; +} + +// Given the depth buffer depth of the current pixel and the fragment XY position, +// reconstruct the world space position +float3 ScreenPosToWorldPos( + Texture2D screenTexture, float2 screenCoords, float depth, + inout float3 screenPosNDC ) +{ + screenPosNDC = ScreenPosToNDC(PassSrg::m_linearDepth, screenCoords, depth); + float4 projectedPos = float4(screenPosNDC, 1.0f); // warped projected space [0..1] + float4 positionVS = mul(ViewSrg::m_projectionMatrixInverse, projectedPos); + positionVS /= positionVS.w; // notice the normalization factor - crucial! + float4 positionWS = mul(ViewSrg::m_viewMatrixInverse, positionVS); + + return positionWS.xyz; +} + +// Pack a float4 into an uint +uint PackFloat4IntoUint(float4 vValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | (uint)(vValue.w * 255); +} + +// Unpack a uint into a float4 value +float4 UnpackUintIntoFloat4(uint uValue) +{ + return float4(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0, ((uValue & 0x000000FF)) / 255.0); +} + +// Pack a float3 and a uint8 into an uint +uint PackFloat3ByteIntoUint(float3 vValue, uint uByteValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | uByteValue; +} + +// Unpack a uint into a float3 and a uint8 value +float3 UnpackUintIntoFloat3Byte(uint uValue, out uint uByteValue) +{ + uByteValue = uValue & 0x000000FF; + return float3(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float2 +// +//-------------------------------------------------------------------------------------- +float2 Safe_normalize(float2 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float2(0, 0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float3 +// +//-------------------------------------------------------------------------------------- +float3 Safe_normalize(float3 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float3(0, 0, 0); +} + +//-------------------------------------------------------------------------------------- +// ComputeCoverage +// +// Calculate the pixel coverage of a hair strand by computing the hair width +//-------------------------------------------------------------------------------------- +float ComputeCoverage(float2 p0, float2 p1, float2 pixelLoc, float2 winSize) +{ + // p0, p1, pixelLoc are in d3d clip space (-1 to 1)x(-1 to 1) + + // Scale positions so 1.f = half pixel width + p0 *= winSize; + p1 *= winSize; + pixelLoc *= winSize; + + float p0dist = length(p0 - pixelLoc); + float p1dist = length(p1 - pixelLoc); + float hairWidth = length(p0 - p1); + + // will be 1.f if pixel outside hair, 0.f if pixel inside hair + float outside = any(float2(step(hairWidth, p0dist), step(hairWidth, p1dist))); + + // if outside, set sign to -1, else set sign to 1 + float sign = outside > 0.f ? -1.f : 1.f; + + // signed distance (positive if inside hair, negative if outside hair) + float relDist = sign * saturate(min(p0dist, p1dist)); + + // returns coverage based on the relative distance + // 0, if completely outside hair edge + // 1, if completely inside hair edge + return (relDist + 1.f) * 0.5f; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairVelocityShockPropagationCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairVelocityShockPropagationCompute.shader new file mode 100644 index 0000000000..fb64f79127 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairVelocityShockPropagationCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "VelocityShockPropagation", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/TestData/DefaultHairColorWithNoise.tga b/Gems/AtomTressFX/Assets/TestData/DefaultHairColorWithNoise.tga new file mode 100644 index 0000000000..f304d70498 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/DefaultHairColorWithNoise.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a0d9d2461d2317b21e0fbd9bf8385bfb978f4dfd0db8f50450c3482faee85ed +size 4116085 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.fbx b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.fbx new file mode 100644 index 0000000000..77292bed4a --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ea292419a5d2ebc9c33eaddb1b69a5d7b21055bcce2edc703dc32cfcb3a45cb +size 209056 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.mb b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.mb new file mode 100644 index 0000000000..98a646a4ff --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.mb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4856b6163507f326804fd98e1d3d5d0cbfc08139068ceea6480dae542a2ddfb3 +size 15098332 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfx b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfx new file mode 100644 index 0000000000..1970051619 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:092278e1a27dbd90685f4e7f0da0fc7c2600f5c9e5217bdcef523ece6e8900b4 +size 1934040 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxbone b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxbone new file mode 100644 index 0000000000..c396e56a60 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxbone @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae42c22c58c6daef42dbe9db16dd827f44ca66e8d1bb1761dfcb1f5890396dc2 +size 134009 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxmesh b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxmesh new file mode 100644 index 0000000000..4b33f98c5a --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxmesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cbc84f42d4acdaf748dfdc76102796e705a5c95bc3e73acf1deca3db57b53a9 +size 221701 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style__hair_test_01.xgen b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style__hair_test_01.xgen new file mode 100644 index 0000000000..e285952543 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style__hair_test_01.xgen @@ -0,0 +1,89546 @@ +# XGen Palette File +# +# Version: C:/Program Files/Autodesk/Maya2020/plug-ins/xgen/ +# Author: gallowj +# Date: Wed May 12 18:27:28 2021 + +FileVersion 18 + +Palette + name hair_test_01 + parent + xgDataPath ${PROJECT}xgen/collections/hair_test_01 + xgProjectPath C:/Depot/CC-O3DE-TressFX/Gems/AtomTressFX/ + xgDogTag + endAttrs + +Description + name hair_desc_01 + flipNormals false + strayPercentage 0.0 + lodFlag false + averageWidth 1.0 + pixelCullSize 0.0 + pixelFadeSize 20.0 + cullFade 0.1 + minDensity 0.01 + cullWidthRatio 0.01 + maxWidthRatio 20.0 + groom + descriptionId 10 + xgDataPath ${PROJECT}xgen/collections/hair_test_01/ + xgProjectPath C:/Depot/CC-O3DE-TressFX/Gems/AtomTressFX/ + endAttrs + +SplinePrimitive + _patchNames + length $a=1.0000;#0.05,5.0\n$a + width $a=0.0500;#0.005,0.5\n$a + depth $a=1.0;#0.05,5.0\n$a + offU $a=0.0000;#-2.0,2.0\n$a + offV $a=0.0000;#-2.0,2.0\n$a + offN $a=0.0000;#-180.0,180.0\n$a + aboutN $a=0.0000;#-180.0,180.0\n$a + regionMap ${DESC}/Region/ + regionMask 0.0 + iMethod 1 + useCache false + liveMode true + _wireNames + cacheFileName ${DESC}/guides.abc + attrCVCount 3 + bendParam[0] $a=0.5000;#0.0,1.0\n$a + bendU[0] $a=0.0000;#-2.0,2.0\n$a + bendV[0] $a=0.0000;#-2.0,2.0\n$a + fxCVCount 20 + uniformCVs true + taper $a=0.8000;#-1.0,1.0\n$a + taperStart $a=0.0000;#0.0,1.0\n$a + displayWidth true + faceCamera true + tubeShade true + tubes + guideSpacing 1.0 + guideMask 1.0 + cutParam 1.0 + texelsPerUnit 10.0 + CVFrequency 1.0 + widthRamp rampUI(0.0,1.0,1:1.0,1.0,1) + endAttrs + +ClumpingFXModule + active true + mask 1.0 + name Clumping1 + cvAttr false + mapInitialized True + pointDir ${DESC}/${FXMODULE}/Points/ + mapDir ${DESC}/${FXMODULE}/Maps/ + clump .5 + clumpScale rampUI(0.0,0.475806451613,3:1.0,0.0,3) + clumpVolumize true + clumpVariance 10 + cut 0.0 + copy 0.0 + copyScale rampUI(0.0,0.0,3) + copyVariance 0.0 + curl 0.0 + curlScale rampUI(0.0,0.5,3) + offset 0.0 + offsetScale rampUI(0.0,0.0,3:0.5,1.0,3:1.0,0.0,3) + flatness 0.0 + flatnessScale rampUI(0.0,0.0,3) + frame 0.0 + noise 0.0 + noiseScale rampUI(0.0,0.0,3) + noiseFrequency 0.0 + noiseCorrelation 0.0 + exportCurves false + exportDir curves/ + exportFaces + texelsPerUnit 10.0 + radiusVariance .5 + ptDensity 10.0 + ptMask 1.0 + ptLength 5.0 + colorPreview false + useControlMaps 0 + controlMask 0.0 + controlMapDir ${DESC}/Region/ + endAttrs + +CutFXModule + active true + mask 1.0 + name Cut1 + amount rand(0.2,0.5) + rebuildType 1 + endAttrs + +NoiseFXModule + active true + mask 1 + name Noise1 + frequency .1 + magnitude 10 + magnitudeScale rampUI(0.0,0.0,1:1.0,1.0,1) + correlation 0.0 + preserveLength 0.0 + mode 0 + bakeDir ${DESC}/${FXMODULE}/ + endAttrs + +GuideRenderer + percent 10.0 + startPercent 0.0 + inCameraOnly false + inCameraMargin 0.0 + replace true + applyFX true + endAttrs + +UniformGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + spacing 1.0 + endAttrs + +RandomGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + density 100.0 + mask 1.0 # map('${DESC}/density/') + dcFlag false + scFlag true + usePoints false + pointDir ${DESC}/Points/ + ptLength 1.0 + endAttrs + +GLRenderer + percent 10.0 + startPercent 0.0 + inCameraOnly true + inCameraMargin 0.0 + patchNames false + faceIds false + primIDs false + primIDsAt 1.0 + vertices false + poly false + culled false + unitCube false + color $a=[0,0,0];#color\n$a + guideColor $a=[1.0,0.4313725,0.0];#color\n$a + TEXCOORD3 [ $cWidth, 0, 0 ] # red channel reserved by XGen + TEXCOORD4 + TEXCOORD5 + TEXCOORD6 + TEXCOORD7 + splineSegments 2 + primNumLimit 3000 + endAttrs + +PointGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + pointDir ${DESC}/Points/ + ptLength 1.0 + endAttrs + +RendermanRenderer + percent 100.0 + startPercent 0.0 + inCameraOnly false + inCameraMargin 0.0 + length_XP true + width_XP true + T_XP false + stray_XP false + id_XP false + descid_XP false + ri_XP true + rf_XP true + u_XS true + v_XS true + faceid_XS true + geomid_XS false + geomName_XS true + P_XS true + Pref_XS false + Pg_XS false + Prefg_XS false + N_XS true + Ng_XS false + Nref_XS false + Nrefg_XS false + dPdu_XS true + dPduref_XS false + dPdug_XS false + dPdurefg_XS false + dPdv_XS true + dPdvref_XS false + dPdvg_XS false + dPdvrefg_XS false + renderer None + renderMethod 2 + draMode 0 + primitiveBound 1.0 + custom__arnold_rendermode 0 + custom__arnold_curveMode 0 + custom__arnold_minPixelWidth 0.0 + custom__arnold_motion_blur 0 + custom__arnold_motion_blur_mode 1 + custom__arnold_motion_blur_steps 2 + custom__arnold_motion_blur_factor 0.5 + custom__arnold_useAuxRenderPatch 0 + custom__arnold_auxRenderPatch 0 + custom__arnold_multithreading 0 + endAttrs + +GuideGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + endAttrs + + Active SplinePrimitive + Active RandomGenerator + Active GuideRenderer + Preview GLRenderer + +Patches hair_desc_01 3719 +Patch Subd + name defaultHead + faceIds 1642 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 + animCurves 0 +Guides Spline 3719 + id 11239 + loc 6.1766004562377930e-01 3.2296255230903625e-01 1070 + blend 0.0000000000000000e+00 + interp 4.8250411230059725e-01:4.3533091168113164e-01:7.4855125270986744e-01:4.8249928725947427e-01:1.0949231440375033e+00:4.0644893538153759e-01:1.8421064143743513e+00:4.1593970243878403e-01:2.4420267811887344e+00:3.8291967032135965e-01:3.0008632363956571e+00:3.7392378005353183e-01:3.9180893488767223e+00 + CVs 20 + 2.4846511913689479e-01 3.2214596061080186e-01 -2.0354872028641174e-01 + 4.7915935495719814e-01 5.7264123779978848e-01 -3.0958901426499796e-01 + 6.8786984326479572e-01 7.8802773588567043e-01 -3.7633277396523857e-01 + 8.7149724962639363e-01 9.7900841465162469e-01 -4.1423700683137077e-01 + 1.0409465093987373e+00 1.1575257395592029e+00 -4.0048104127307915e-01 + 1.2131268217066997e+00 1.3609372405672167e+00 -3.3505296216045410e-01 + 1.3877108223369525e+00 1.6239682150453278e+00 -2.6811589618590415e-01 + 1.5514042867190785e+00 1.9428618786108545e+00 -2.6562657512600163e-01 + 1.6991993789006590e+00 2.2831574957507570e+00 -3.5591150405796346e-01 + 1.8437029628891737e+00 2.5981805363819901e+00 -5.4073419892738617e-01 + 2.0110791040178126e+00 2.8242167378938330e+00 -8.1452125581881329e-01 + 2.2139823909981251e+00 2.8939078783708525e+00 -1.1522920225465267e+00 + 2.4307488126471855e+00 2.7848199708489068e+00 -1.5039743113312687e+00 + 2.6342413877634598e+00 2.5269886273184481e+00 -1.8209479330197982e+00 + 2.8183279152655691e+00 2.1616889472471188e+00 -2.0742175047181197e+00 + 2.9798265639151449e+00 1.6999234255440816e+00 -2.2433791958691245e+00 + 3.0770753624352079e+00 1.1373855238938864e+00 -2.2885142541752801e+00 + 3.0394375887415297e+00 5.3603446702325241e-01 -2.1752430886144971e+00 + 3.0146542150128006e+00 1.1458961218477914e-01 -2.1417414129211032e+00 + id 11240 + loc 6.2059760093688965e-01 9.4030863046646118e-01 1077 + blend 0.0000000000000000e+00 + interp 4.2977053398824394e-01:3.5725795778658548e-01:3.0989393716459590e-02:3.6149101805564876e-01:9.5714156011088758e-01:4.2807020525498701e-01:1.9716085115790805e+00:4.1881657767306374e-01:2.2644834972059975e+00:3.9587324654258443e-01:2.9946765242667817e+00:4.2976623628290406e-01:3.4053831056794803e+00 + CVs 20 + 1.4598030893277561e-01 3.6265297671607266e-01 -1.8903296177682780e-01 + 2.9001014815205933e-01 6.9064855813398063e-01 -4.0354826322926746e-01 + 4.1605384674189483e-01 9.8112484549610501e-01 -6.4768420911160784e-01 + 5.0897198373475727e-01 1.2296565341061132e+00 -9.2287873105698115e-01 + 5.5889109839327511e-01 1.4361219452528187e+00 -1.2323782375656125e+00 + 5.7107814925083333e-01 1.6082853521248741e+00 -1.5843150571348776e+00 + 5.7356566362509342e-01 1.7539215702150270e+00 -1.9872415787319906e+00 + 6.0356057178739564e-01 1.8722295870525882e+00 -2.4398769657963602e+00 + 6.8969893824209061e-01 1.9524156115373135e+00 -2.9281597352526809e+00 + 8.4087184829371853e-01 1.9722322858211312e+00 -3.4216818644356630e+00 + 1.0207419878574946e+00 1.9081727787799216e+00 -3.8654400069504060e+00 + 1.1333356030107091e+00 1.7734007673006829e+00 -4.1927219935317099e+00 + 1.1227223960470871e+00 1.6228651373965948e+00 -4.3904708397790202e+00 + 1.0544801206334347e+00 1.4198452347851684e+00 -4.5325361724002615e+00 + 9.4896760833746130e-01 1.1252326871501357e+00 -4.6365483526669795e+00 + 7.9480159958330587e-01 9.5227673875680896e-01 -4.6767813603590058e+00 + 7.4814346733443837e-01 1.2261063089953383e+00 -4.7048761497406879e+00 + 9.1609986574566049e-01 1.5585359404363155e+00 -4.7609421610985070e+00 + 5.0776356194935579e-01 1.4145008385396176e+00 -4.7452816866369725e+00 + id 11241 + loc 7.3946279287338257e-01 4.6131584048271179e-01 410 + blend 0.0000000000000000e+00 + interp 4.5890157615427518e-01:3.3656738264634023e-01:4.7635488526662184e-01:2.7076987405761810e-01:1.0142872175827768e+00:3.1046619940156961e-01:1.9911709296561084e+00:2.7253223215495348e-01:2.9173550394527834e+00:3.9312529834466109e-01:3.4808854407796193e+00:4.5889698713851368e-01:3.9938441220327663e+00 + CVs 20 + -4.7461451783151598e-01 3.9982365853629770e-01 1.0059133897716148e-01 + -8.9239769779437195e-01 7.5421079737479291e-01 1.8878590190240330e-01 + -1.3187898826797613e+00 1.0937133313103355e+00 2.5931801488333284e-01 + -1.7891056920101294e+00 1.4143430275030737e+00 3.4146393799269692e-01 + -2.3080042562962193e+00 1.6845128250663066e+00 4.7562439748027863e-01 + -2.8636774395062137e+00 1.8665051897071143e+00 6.9627444131892724e-01 + -3.4191353095889450e+00 1.9269986165100004e+00 1.0068178956152343e+00 + -3.9333412885433074e+00 1.8521522371706072e+00 1.3654821938701287e+00 + -4.3856960021083706e+00 1.6415536541246738e+00 1.7202202196135672e+00 + -4.7617036023298507e+00 1.2981017004023760e+00 2.0281231400803996e+00 + -5.0391481791347612e+00 8.4678756862816340e-01 2.2553453421129568e+00 + -5.2098821321305753e+00 3.2094557828592585e-01 2.4100014755328534e+00 + -5.2901825344166467e+00 -2.7390577707525310e-01 2.5456814153630685e+00 + -5.3097856406487010e+00 -9.3075834333233498e-01 2.7317874819979986e+00 + -5.3052679698375984e+00 -1.6179653197549726e+00 3.0231629131324635e+00 + -5.3104551011946892e+00 -2.2904790265893578e+00 3.4214003573219602e+00 + -5.3568949752264983e+00 -2.9232256784687327e+00 3.8723781334110994e+00 + -5.4683507868910359e+00 -3.5084886092025820e+00 4.3152929295445501e+00 + -5.6210220746587058e+00 -4.0282849994590153e+00 4.7058919264253927e+00 + id 11242 + loc 2.4403645098209381e-01 7.5677603483200073e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3348958057862880e-01:3.4895738320241698e-01:2.4644026811798314e-01:4.2466330470954194e-01:9.7596746527485712e-01:3.3104090821974635e-01:1.8773290084940342e+00:3.8491509362178528e-01:2.8667521597695647e+00:4.3348524568282304e-01:3.2854852966045058e+00:2.8648918184150668e-01:3.8722186532711671e+00 + CVs 20 + -2.8657863403758321e-01 4.3492695504183299e-01 2.8953997676938570e-01 + -5.1975654170584140e-01 8.1112395078547017e-01 4.9927969188073223e-01 + -7.1056132306491149e-01 1.1675071806173625e+00 6.9920221427909890e-01 + -8.9343155142724617e-01 1.5097401774106458e+00 8.5991472969261595e-01 + -1.0862941133912958e+00 1.8029176488641019e+00 9.1014701348899973e-01 + -1.2764326654451055e+00 2.0205460416851468e+00 8.3898033301759822e-01 + -1.4198458934718945e+00 2.1448920024329814e+00 6.7884483185811861e-01 + -1.4281549520774679e+00 2.1674046970714578e+00 5.0199826066124165e-01 + -1.2416670217837362e+00 2.1315075728203059e+00 4.5667102454010622e-01 + -1.0058706911202391e+00 2.1282514296791657e+00 6.0623118006494714e-01 + -8.4799664840049926e-01 2.1500003465407858e+00 7.6602104897467838e-01 + -7.2010657727583238e-01 2.1520257451303859e+00 8.8441416818509044e-01 + -5.9201671440122861e-01 2.1188030722467626e+00 9.8682785988288213e-01 + -4.0746771127462972e-01 1.9896295262286250e+00 1.0505400670295015e+00 + -1.1510867095823551e-01 1.6834558747073116e+00 1.0424515341411233e+00 + 2.4366806686854420e-01 1.2100390889697481e+00 8.7260809136364137e-01 + 5.6406479222599670e-01 7.0631452781019743e-01 3.9265112879091751e-01 + 6.8194385643885669e-01 4.9397881880312766e-01 -5.1814866305649365e-01 + 7.4351884466827389e-01 4.3954166351020962e-01 -7.1381651064939622e-01 + id 11243 + loc 3.5056790709495544e-01 2.2520402073860168e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7161415510986737e-01:2.8086590374772819e-01:2.2423713086493269e-02:4.7160943896831631e-01:4.0416718586487266e-01:4.4081031464401360e-01:1.0257869543901426e+00:3.7072491698081955e-01:1.6411871066445718e+00:2.5630139945730285e-01:2.0380538087915565e+00:2.8269060852355188e-01:2.9566996011760187e+00:3.6345283878021095e-01:3.3148630804549351e+00 + CVs 20 + -1.6360640871792401e-01 2.6421289525509695e-01 2.9995225428842837e-03 + -3.1755842433191628e-01 5.1493198464873213e-01 -1.1089937169873804e-02 + -4.6549849333266846e-01 7.4446663222648723e-01 -4.9199699687006548e-02 + -6.0812570262721088e-01 9.4853134529589900e-01 -1.1264452478601411e-01 + -7.4518838385253516e-01 1.1269153831663057e+00 -1.9722314893747817e-01 + -8.7688930331844284e-01 1.2809117428885446e+00 -2.9773128091818418e-01 + -1.0047652382694248e+00 1.4116659641547273e+00 -4.1150931162771426e-01 + -1.1314995558534122e+00 1.5182710278487592e+00 -5.4005235066136459e-01 + -1.2573338741511890e+00 1.5968890994679681e+00 -6.8958860602630112e-01 + -1.3785871333951583e+00 1.6379313737516670e+00 -8.7337246662149204e-01 + -1.4923815448000819e+00 1.6301629993810316e+00 -1.0992730391085093e+00 + -1.6025492015443534e+00 1.5697953026286118e+00 -1.3582573734848258e+00 + -1.7151382172067611e+00 1.4554360758539013e+00 -1.6363278229700269e+00 + -1.8340181866721867e+00 1.2703739964937877e+00 -1.9235438493270267e+00 + -1.9650848285463884e+00 9.8404954701181890e-01 -2.1968544287738303e+00 + -2.1181501786596821e+00 5.7139061790127554e-01 -2.3746146484782136e+00 + -2.3094403599750484e+00 5.0438633268983235e-02 -2.3312537608107693e+00 + -2.5755581793191906e+00 -4.4127840380517935e-01 -2.0235392613821119e+00 + -2.7870858389604627e+00 -5.3206797214788359e-01 -1.6881333429960148e+00 + id 11244 + loc 4.6513280272483826e-01 6.1413817107677460e-02 1051 + blend 0.0000000000000000e+00 + interp 3.7327538845454264e+00:1.7773141623964150e+00:7.3373316265661792e-02:2.6715193022916344e+00:7.7629404478597785e-02:4.2867817829031057e-01:3.2261785003334653e-01:3.9394967544100845e-01:9.7943334227607248e-01:2.2408772120476719e-01:1.7196944843555664e+00:2.5750043404263928e-01:1.9750082016946628e+00:5.7496549099723371e-01:1.9987429827309402e+00:1.9679081232879532e+00:2.0249678803851587e+00:2.8575556819183370e+00:2.0305731560489639e+00:3.2216942272252096e+00:2.0356588771129775e+00:3.4908659077586770e+00:2.0441762341288521e+00:3.7327438845454264e+00:2.0491966337121803e+00 + CVs 20 + 6.0639485433271370e-02 4.3411385224016430e-01 -3.0000765763808912e-01 + 1.1126466072956538e-01 8.1032172612428210e-01 -5.0698366706265341e-01 + 1.3945033526786055e-01 1.2075437811769389e+00 -6.4963078369328620e-01 + 1.7853288365958264e-01 1.7036624677639611e+00 -7.6060097659739978e-01 + 3.4665357417168102e-01 2.2809550074180360e+00 -8.9955694362832350e-01 + 7.3422613929258662e-01 2.7985555186561584e+00 -1.1300041583264189e+00 + 1.3034147377960690e+00 3.1030053910260240e+00 -1.4589596795692854e+00 + 1.9348243298444214e+00 3.1168601116120458e+00 -1.8302906880372949e+00 + 2.5172414608810092e+00 2.8730934663676964e+00 -2.1506108389258842e+00 + 2.9682424894502595e+00 2.4998386437782996e+00 -2.3361742735134872e+00 + 3.2577548847693354e+00 2.1615718476344683e+00 -2.3751410210022428e+00 + 3.4080178086900461e+00 1.9426385907736956e+00 -2.2960807823805194e+00 + 3.4944308714995453e+00 1.8114157364839176e+00 -2.1050546021910863e+00 + 3.7173207439461313e+00 1.7066271357850689e+00 -1.8937149805840090e+00 + 4.1562626423565980e+00 1.6511376913937914e+00 -1.8909215054943733e+00 + 4.6923555830028487e+00 1.6429948891621169e+00 -2.1469850558093424e+00 + 5.2424085754559178e+00 1.6140386914765636e+00 -2.5432172559779991e+00 + 5.7534965310633366e+00 1.4959770382817095e+00 -2.8465317137348665e+00 + 6.2067239485145240e+00 1.3044304865482277e+00 -2.9147635717861684e+00 + id 11245 + loc 1.3318803906440735e-01 7.8666359186172485e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5064609808207740e-01:3.6884525654436368e-01:4.2825366257954678e-01:4.5064159162109657e-01:9.9992319068122526e-01:4.4349351027539968e-01:1.3614296355075641e+00:4.2569046639763231e-01:1.9283185688374558e+00:3.0253330240372889e-01:2.1727187972906474e+00:4.1075126450218624e-01:3.0062007789445042e+00:2.9794376613931056e-01:3.6883098710971249e+00 + CVs 20 + 1.9054302130905390e-01 2.7026481811022524e-01 -5.9085954745423032e-02 + 3.4679597402629947e-01 5.5565458712225479e-01 -1.4549534187815527e-01 + 5.0525796759676989e-01 8.3810912577373275e-01 -2.6318515551372268e-01 + 6.8582886878845750e-01 1.0995086591871772e+00 -4.1443728156887272e-01 + 8.8876044472603710e-01 1.3301222904377208e+00 -6.0256425066501040e-01 + 1.1161151000032457e+00 1.5174445904895686e+00 -8.2765646918915081e-01 + 1.3720389086029596e+00 1.6473094759291511e+00 -1.0854831536743539e+00 + 1.6589113407623748e+00 1.7078336569346038e+00 -1.3671985826625264e+00 + 1.9743300045444716e+00 1.6925108416794821e+00 -1.6603355652546365e+00 + 2.3103780185338163e+00 1.6008300465471315e+00 -1.9531812607479175e+00 + 2.6516340717261611e+00 1.4384105499751214e+00 -2.2400907449190246e+00 + 2.9730750713287195e+00 1.2156564067843663e+00 -2.5207368118944147e+00 + 3.2433897984871538e+00 9.4397599586305247e-01 -2.7970553928530220e+00 + 3.4260391974903390e+00 6.3963300754293284e-01 -3.0721999656559627e+00 + 3.4796878273449394e+00 3.3706496642230421e-01 -3.3496126547367746e+00 + 3.3717638684815672e+00 1.1352046239581348e-01 -3.6210624444607724e+00 + 3.1648577114987795e+00 8.4859078628669815e-02 -3.8687581813563603e+00 + 3.0293397762952003e+00 2.8039518428333521e-01 -4.0646414094851337e+00 + 2.8980878285040879e+00 2.7732866685035984e-01 -4.3274719578244270e+00 + id 11246 + loc 2.3129728436470032e-01 8.9733213186264038e-01 410 + blend 0.0000000000000000e+00 + interp 4.3245667417841016e-01:3.7015565771251041e-01:4.0427668585726739e-01:4.3245234961166840e-01:1.0599013001672317e+00:3.4125331677304588e-01:1.9590447743911703e+00:3.7375857108107513e-01:2.8157372820239548e+00:3.4514573078606270e-01:3.2615302584416628e+00:3.0535149778952364e-01:3.9568558971205494e+00 + CVs 20 + 3.2859321888387322e-01 2.1908242107866643e-01 -3.4869758473066545e-02 + 5.7067170541436840e-01 3.9906742767173864e-01 -6.2150101893577808e-02 + 7.8465078484166850e-01 5.6605322043080109e-01 -8.3219528037176083e-02 + 1.0140766383662783e+00 7.4150238253015299e-01 -9.5695519777494076e-02 + 1.2575740152820738e+00 9.1843218431894136e-01 -9.8933803735602455e-02 + 1.5099124366776127e+00 1.0885270572439194e+00 -9.2270631562123673e-02 + 1.7686438534088236e+00 1.2458212560241106e+00 -7.2952620023985060e-02 + 2.0338078416582128e+00 1.3857453912783473e+00 -3.7881331991143241e-02 + 2.3005331446652457e+00 1.5032166013064023e+00 1.1900323669769841e-02 + 2.5635211022674045e+00 1.5958743905677806e+00 7.3873107747856992e-02 + 2.8485922899313367e+00 1.6698121895852771e+00 1.6478929388077207e-01 + 3.2239768151825108e+00 1.7239908520971392e+00 3.2257495477541737e-01 + 3.7239311727766307e+00 1.7165339724263653e+00 5.2276585065491377e-01 + 4.2751139139193013e+00 1.6058253202145303e+00 6.6100702036666670e-01 + 4.7922524852434547e+00 1.4044175901140019e+00 6.8565199249210607e-01 + 5.2504377041374699e+00 1.1396036597230013e+00 6.0874670761299088e-01 + 5.6352152398373079e+00 8.3903590617303569e-01 4.4779585128527599e-01 + 5.9215016642444898e+00 5.4142267235381025e-01 2.2015723889619332e-01 + 6.0349002146193547e+00 3.3184690608081180e-01 -2.7595155062146937e-02 + id 11247 + loc 8.1744241714477539e-01 4.0772235393524170e-01 1077 + blend 0.0000000000000000e+00 + interp 3.5526841965139205e-01:3.1036510647559634e-01:1.7980081091779399e-02:3.4341152419971954e-01:9.3317863709942406e-01:2.5105301465512042e-01:1.4997672317600268e+00:3.5526486696719556e-01:2.0546892327625228e+00:3.4737880534329896e-01:3.0285944733599233e+00 + CVs 20 + -1.0933945760014097e-01 2.9398478899795988e-01 3.0525077788503763e-01 + -1.7524732797313675e-01 6.3083393137140487e-01 5.7590977449723957e-01 + -2.3447099493923468e-01 9.7778904808028311e-01 8.6443424469927677e-01 + -3.1479123993919494e-01 1.3103248912406102e+00 1.2046488244146472e+00 + -4.4028249489808802e-01 1.6065355645614894e+00 1.6126316596586521e+00 + -6.3530508903853844e-01 1.8394137237243045e+00 2.0853073738380270e+00 + -9.1845560293009754e-01 1.9830691118944639e+00 2.5983994576214346e+00 + -1.2960088403306211e+00 2.0223882919343827e+00 3.1133723714710930e+00 + -1.7559883105892296e+00 1.9560471459905882e+00 3.5925821534949365e+00 + -2.2685788164861225e+00 1.7930818539966058e+00 4.0177577314777544e+00 + -2.7975645989525972e+00 1.5380087657573400e+00 4.3979255753839546e+00 + -3.3039727753074701e+00 1.1795660339489906e+00 4.7573280760382257e+00 + -3.7384628043159740e+00 7.0458212226022643e-01 5.1197488657872174e+00 + -4.0318571932562728e+00 1.2635665837253418e-01 5.5161823203471236e+00 + -4.0836183668586470e+00 -4.9630856402208900e-01 5.9915533099482507e+00 + -3.8483863915751533e+00 -9.8418947736174589e-01 6.5567781474481777e+00 + -3.4780086420371790e+00 -1.1437185636292013e+00 7.1592395740356700e+00 + -3.1583051213341369e+00 -1.1043480844552309e+00 7.7211485991198945e+00 + -2.9547293535379242e+00 -1.3810947325946115e+00 8.1916009674638595e+00 + id 11248 + loc 4.5940113067626953e-01 5.9736484289169312e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1961586828616892e-01:3.2307646654426014e-01:2.5081550972079703e-01:3.7244906037262482e-01:8.8784725885179350e-01:3.8071745766169951e-01:1.4017351482526514e+00:3.0633597295697484e-01:1.9981983728494841e+00:3.6727399360742413e-01:2.6801664602642621e+00:4.1808103674640323e-01:3.0521753718501232e+00:4.1961167212748607e-01:3.9855702113976297e+00 + CVs 20 + 1.5966063422579185e-01 2.6347213664814073e-01 -1.9194391665356372e-01 + 2.6586052171508778e-01 5.5182162412653657e-01 -3.9339566337841114e-01 + 3.5084605038998606e-01 8.3323592741905927e-01 -6.2304141540835889e-01 + 4.3268706971278392e-01 1.0859869540212055e+00 -8.8898028128983331e-01 + 5.1900779274455966e-01 1.3013743142806105e+00 -1.1920186010120135e+00 + 6.2344055906374352e-01 1.4713751246417748e+00 -1.5312743907644364e+00 + 7.6171568937419543e-01 1.5849664379592616e+00 -1.8987888257064989e+00 + 9.4311572336357030e-01 1.6305645072988313e+00 -2.2763158209642596e+00 + 1.1660010572410426e+00 1.6023355096638854e+00 -2.6387807031479484e+00 + 1.4180918547648278e+00 1.5041800243391541e+00 -2.9602085688041919e+00 + 1.6808510423766629e+00 1.3503862913572064e+00 -3.2223591902072162e+00 + 1.9362220234019676e+00 1.1608042495821425e+00 -3.4214144712571386e+00 + 2.1694665641825948e+00 9.5468397100479629e-01 -3.5651970316962376e+00 + 2.3700540952375899e+00 7.4678915460374917e-01 -3.6633901836606113e+00 + 2.5336637081721558e+00 5.4743617255920141e-01 -3.7191827762351490e+00 + 2.6596703768827243e+00 3.6066983019724685e-01 -3.7415521816815347e+00 + 2.7320295381561168e+00 1.5301183799765661e-01 -3.7649821850800635e+00 + 2.7021516688054974e+00 -9.1086862464741181e-02 -3.8525979844391585e+00 + 2.5351197512392538e+00 -3.1132586748196767e-01 -4.0737791947174706e+00 + id 11249 + loc 1.9332330673933029e-02 1.5976321697235107e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1960251021936743e-01:3.4153836515856817e-01:1.0544303647520203e-01:3.3512728696871719e-01:1.0002384578988952e+00:4.2566431135897653e-01:1.5386824046489334e+00:2.9069766691037102e-01:2.2225514592398237e+00:5.1959731419426525e-01:2.9705089603168267e+00:3.1846435421605057e-01:3.6641787151580214e+00 + CVs 20 + -7.3276651383610003e-03 4.0058043492797835e-01 -3.6728927736000422e-02 + -8.1186539667377405e-02 7.7871667850492243e-01 -8.8805227474750503e-02 + -2.0870000714188541e-01 1.1309755326868616e+00 -1.5877915489881650e-01 + -3.8838743053745517e-01 1.4431852837383827e+00 -2.5150423617959250e-01 + -6.1935426057497156e-01 1.6911966418309108e+00 -3.7059712143916207e-01 + -8.9032102218395148e-01 1.8498586647008839e+00 -5.1383210707261862e-01 + -1.1812803557590967e+00 1.9035321759176784e+00 -6.7236238433735929e-01 + -1.4717166103908914e+00 1.8532063391584805e+00 -8.3454504853324707e-01 + -1.7479188381774844e+00 1.7105483317648280e+00 -9.8670084571203187e-01 + -2.0065643689453472e+00 1.4936466814275964e+00 -1.1091020847129458e+00 + -2.2485365942995110e+00 1.2247275455568920e+00 -1.1768036558629089e+00 + -2.4675905796843152e+00 9.3034746425841131e-01 -1.1628429878482347e+00 + -2.6499497043973359e+00 6.5065730995429960e-01 -1.0382283515153043e+00 + -2.7791381694590913e+00 4.5468526218883243e-01 -7.7921662164424865e-01 + -2.8293263057596132e+00 4.4869301698841613e-01 -3.9894483476988718e-01 + -2.8050984602206621e+00 6.9422152745953292e-01 -1.6589646439372135e-02 + -2.7653330815025199e+00 1.1263672974314904e+00 2.3008379987976951e-01 + -2.7318060284436423e+00 1.6139766810696612e+00 3.0584752861109371e-01 + -2.9311488749848329e+00 1.6810972870801315e+00 6.0431193294614172e-01 + id 11250 + loc 7.2338765859603882e-01 6.7745864391326904e-01 1070 + blend 0.0000000000000000e+00 + interp 3.8849599008605762e-01:3.8849210512615678e-01:4.4228602653311333e-01:3.2841934110992127e-01:1.0394511212575157e+00:2.7415892130968605e-01:1.9443088546354739e+00:3.6054172612427066e-01:2.2813878510589900e+00:3.4972619620357315e-01:3.0318601795608360e+00:3.6038180880552972e-01:3.9442284473709037e+00 + CVs 20 + -3.1054339152341681e-01 3.9487291860453000e-01 8.2403504868078681e-02 + -5.5870749365937111e-01 7.7414004302385586e-01 1.6076393881376161e-01 + -7.6391187973062646e-01 1.1540441764730121e+00 2.5576758508945219e-01 + -9.7491344962220805e-01 1.5289336021669397e+00 3.1244098429695266e-01 + -1.2309048355956387e+00 1.8671146828746286e+00 2.6166474312613430e-01 + -1.5328474358728874e+00 2.1294157629894328e+00 8.5465901548536616e-02 + -1.8345819674218828e+00 2.2744259128098254e+00 -2.0646192466675006e-01 + -2.0347081252971919e+00 2.2769309063432233e+00 -5.8684450042613001e-01 + -2.0309755787871846e+00 2.1581762548090415e+00 -9.8517297110122626e-01 + -1.8441711905657889e+00 1.9798028309546458e+00 -1.3153087441214890e+00 + -1.5727832217807625e+00 1.7673829740079032e+00 -1.5684988858697717e+00 + -1.2350410811732129e+00 1.4967176958569279e+00 -1.7328441769364231e+00 + -8.5194313321557669e-01 1.1702341926458228e+00 -1.7726415798321868e+00 + -5.1912331326845107e-01 8.4600116439142181e-01 -1.8027986489694194e+00 + -3.1720544521928307e-01 5.7423711740987093e-01 -2.0438692422563518e+00 + -3.1101467643162173e-01 4.8976864660103847e-01 -2.5455389821756578e+00 + -5.7321524121938627e-01 8.8258202031634192e-01 -3.1080663365561558e+00 + -1.0297613159464218e+00 1.7799352713593937e+00 -3.1953726738502071e+00 + -1.0608225075976532e+00 1.8895494600080207e+00 -3.5175758535224140e+00 + id 11251 + loc 2.5593778491020203e-01 2.0799468457698822e-01 410 + blend 0.0000000000000000e+00 + interp 3.8155119961273437e-01:2.9853847392786897e-01:1.0921523064978400e-03:3.4045358855122021e-01:9.3987748342479716e-01:3.8154738410073824e-01:1.9577216504690100e+00:3.4903908543069762e-01:2.7349073182278647e+00:3.2373856069993673e-01:3.1648215290605002e+00 + CVs 20 + -1.2955398851746824e-01 1.1956593130168594e-01 -2.1693254552318855e-01 + -2.4019560079610658e-01 2.3974564087212008e-01 -4.0870646813706968e-01 + -3.3737299767222118e-01 3.6282640108452102e-01 -5.8708274198871535e-01 + -4.2325250056989860e-01 4.9055016154325837e-01 -7.5693727719692161e-01 + -4.9603482448397762e-01 6.2183211965429941e-01 -9.1621839526088955e-01 + -5.5430777004547926e-01 7.5492255162879096e-01 -1.0616900128513533e+00 + -5.9693118231467324e-01 8.8802340688876513e-01 -1.1892282629604605e+00 + -6.2497360318629469e-01 1.0201881773599930e+00 -1.2952531996035308e+00 + -6.4312592854563688e-01 1.1516664695909595e+00 -1.3781012848094234e+00 + -6.5863709958055161e-01 1.2829900234499219e+00 -1.4381487387133087e+00 + -6.7206107419325800e-01 1.4183679319483449e+00 -1.4807223869783637e+00 + -6.5126633611445184e-01 1.5762148588468299e+00 -1.5186489605719973e+00 + -5.3137469852590113e-01 1.7817483494000768e+00 -1.5706869870049811e+00 + -2.9032538586653323e-01 2.0311829817035676e+00 -1.6761679432703089e+00 + 1.7082863827141526e-02 2.2886554148686034e+00 -1.8727079712257639e+00 + 3.3551621414468602e-01 2.5254866988776081e+00 -2.1679306849779056e+00 + 6.4306936094609690e-01 2.7231724079231214e+00 -2.5600700567654391e+00 + 9.1405822399054881e-01 2.8681311507222165e+00 -3.0289232035900655e+00 + 1.0065957195366007e+00 3.0215754169981617e+00 -3.1757512602818827e+00 + id 11252 + loc 1.5156152844429016e-01 4.4093063473701477e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8318625418662448e-01:3.8013349040582456e-01:3.5932622168840456e-01:2.9544940253400498e-01:9.9620282253966197e-01:4.1875228098485784e-01:1.4322196087892807e+00:3.1668415061825456e-01:2.0399793745030323e+00:4.8318142232408262e-01:2.9996394885750743e+00:3.7963839276517763e-01:3.7902426451990738e+00 + CVs 20 + -7.9519661120537627e-02 2.8826147533052893e-01 -1.0288604601145600e-01 + -1.7931902952211867e-01 5.8973253169490203e-01 -2.0149286811535860e-01 + -2.9995639547295611e-01 8.8812013215704755e-01 -3.1761628856222845e-01 + -4.4423771363040770e-01 1.1670342556465934e+00 -4.6177331573507202e-01 + -6.1432652658795761e-01 1.4108478524640891e+00 -6.3505342949887555e-01 + -8.0623673032502996e-01 1.6039477699816396e+00 -8.3648959542637746e-01 + -1.0109809363051332e+00 1.7350919518254193e+00 -1.0624252009499884e+00 + -1.2176816265725725e+00 1.8005708404013274e+00 -1.3065578709522689e+00 + -1.4175293515216509e+00 1.8031548167854541e+00 -1.5614903686482844e+00 + -1.6078048147404345e+00 1.7481151285511394e+00 -1.8210271538602079e+00 + -1.7901455230761132e+00 1.6395068689412640e+00 -2.0786183346562073e+00 + -1.9651227701511187e+00 1.4795275804344126e+00 -2.3245669839226202e+00 + -2.1303848889203931e+00 1.2703502153077992e+00 -2.5459254513537801e+00 + -2.2861668376028832e+00 1.0122623893155942e+00 -2.7299436942432020e+00 + -2.4391722883676832e+00 7.0261547956591786e-01 -2.8600203011407781e+00 + -2.6012972305869222e+00 3.4541198309348897e-01 -2.9030051728323825e+00 + -2.7892843242954859e+00 -3.5469869478894411e-02 -2.8136344781001901e+00 + -3.0196309344213841e+00 -3.7501158693708159e-01 -2.5768075142665001e+00 + -3.1363744497927319e+00 -5.2386430319009514e-01 -2.3945219002224549e+00 + id 11253 + loc 2.2471497952938080e-01 4.4820398092269897e-01 1070 + blend 0.0000000000000000e+00 + interp 1.3170359928719133e+00:3.4309432322788602e-01:6.3130904710610369e-01:1.3170259928719132e+00:7.9004430661961711e-01:3.7702242566891880e-01:2.6106300760092007e+00:4.9179940552769458e-01:3.0306187576332344e+00:3.6880936599767611e-01:3.7977354860326229e+00 + CVs 20 + 2.6714292389095184e-01 3.3096425856446171e-01 3.7082578034879010e-01 + 4.3913102651166180e-01 5.8544682012496230e-01 6.5671119679777268e-01 + 6.0437936620701038e-01 8.0853802218954240e-01 8.6964305987640267e-01 + 7.9552676829224600e-01 1.0112066379013909e+00 9.9671638624202585e-01 + 1.0084820047664211e+00 1.2127678583812160e+00 1.0601458586023373e+00 + 1.2314902682401763e+00 1.4581784654567853e+00 1.1335707438505347e+00 + 1.4396295019077086e+00 1.7574178425288185e+00 1.2758537409483237e+00 + 1.6232181797628904e+00 2.0845996113852152e+00 1.5170229438526843e+00 + 1.7615532107932852e+00 2.4209543814363270e+00 1.8939101016354198e+00 + 1.7286223861284546e+00 2.7445093106424414e+00 2.4082096588798652e+00 + 1.3996210752962210e+00 2.9989940585323969e+00 2.8939036839840009e+00 + 7.8954178034498157e-01 3.1464688129025928e+00 3.2086822071617722e+00 + 1.8394361416049776e-03 3.1206648695486177e+00 3.2709852067630738e+00 + -6.3611707164805731e-01 2.9598291361313587e+00 3.1368741881038886e+00 + -9.0760546628929384e-01 2.8975426624340455e+00 3.0208507958666471e+00 + -7.6811998134365167e-01 3.0512816152858173e+00 2.9948319573003754e+00 + -6.1682629963641489e-02 3.2974283822761716e+00 2.9416435074161997e+00 + 1.3673924218453593e+00 3.0751473929924682e+00 2.5289230864848133e+00 + 1.2452091646337533e+00 3.2728291759580812e+00 2.6737953938226271e+00 + id 11254 + loc 4.3200597167015076e-01 5.8635413646697998e-01 410 + blend 0.0000000000000000e+00 + interp 4.3063273414973374e-01:3.7062358752781188e-01:2.8817592850253559e-01:3.5885287435108715e-01:9.9634620928951467e-01:4.3062842782239225e-01:1.6730844490335373e+00:3.2128925706775824e-01:2.0897654273525177e+00:2.9564996449930675e-01:3.0700904131048743e+00:3.6378638476363262e-01:3.8784800769612215e+00 + CVs 20 + 3.1803335472518401e-01 1.1720191523485306e-01 -1.7147236446308356e-01 + 6.0174449413946829e-01 2.1184562304716445e-01 -3.1475367073670302e-01 + 8.8778049239891432e-01 2.9744717422642197e-01 -4.4448357267412797e-01 + 1.1969457019701402e+00 3.8251279813010441e-01 -5.6889278550650302e-01 + 1.5262897185149651e+00 4.6559181891068185e-01 -6.8813434215667668e-01 + 1.8712386286689102e+00 5.4517235690637822e-01 -7.9811974908197225e-01 + 2.2263560515592506e+00 6.2007746792153473e-01 -8.8709066027997807e-01 + 2.5851943795635339e+00 6.8864202110509243e-01 -9.3905395358179811e-01 + 2.9392567810476642e+00 7.4899610339859057e-01 -9.3847716300638928e-01 + 3.2770858189297973e+00 8.0094435698624156e-01 -8.7350534613943109e-01 + 3.5895670164067930e+00 8.4216665710873784e-01 -7.4634680068000825e-01 + 3.8933300907820749e+00 8.5232731193766398e-01 -5.9542642766618048e-01 + 4.2351995380118819e+00 7.9062610240634279e-01 -4.9107496567722109e-01 + 4.6244639594738883e+00 6.3639310718978570e-01 -4.8436608259567659e-01 + 5.0208072737678897e+00 4.0933185986459719e-01 -5.8100466274241935e-01 + 5.3876833274331659e+00 1.3471148167537583e-01 -7.7902618886866815e-01 + 5.6942445221691838e+00 -1.6356655592723701e-01 -1.0867826217190788e+00 + 5.9152506813445953e+00 -4.5070528877792215e-01 -1.4902353055677138e+00 + 6.2032754634326013e+00 -6.1755115821603423e-01 -1.6864896769123625e+00 + id 11255 + loc 6.1082065105438232e-01 1.6355621814727783e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7820951267485945e-01:4.7820473057973273e-01:4.9671265689518929e-01:4.4541772022996329e-01:9.3488524144925467e-01:3.8132958110980397e-01:1.1454475291795470e+00:3.2696953032635689e-01:2.0008853046888735e+00:3.2188332610953391e-01:2.5150433567090964e+00:2.8432123993418407e-01:3.0125693036575112e+00:3.2722945418161015e-01:3.9889751479256486e+00 + CVs 20 + -6.3499303460113302e-02 2.5044579076053225e-01 2.3963608403933218e-01 + -1.2693677007495818e-01 4.8712300897517591e-01 4.4270878139573888e-01 + -1.9091102301974419e-01 6.9372442685801206e-01 6.2036896306762412e-01 + -2.5216918929811039e-01 8.6653276040645644e-01 7.7826514148726833e-01 + -3.0556449434889238e-01 1.0120529390608290e+00 9.2062460750283526e-01 + -3.4602375535713953e-01 1.1398882172960081e+00 1.0546730888674327e+00 + -3.7181881245873610e-01 1.2592502267359345e+00 1.1900719464096257e+00 + -3.9124903911393383e-01 1.3733335433372513e+00 1.3391219832234826e+00 + -4.2697397040774254e-01 1.4761464832689883e+00 1.5058334893089322e+00 + -5.0886678421084397e-01 1.5545708810939789e+00 1.6767233194690858e+00 + -6.5257861259723415e-01 1.6060456227677959e+00 1.8330741865808502e+00 + -8.6061788088123214e-01 1.6404282237329317e+00 1.9691085604901404e+00 + -1.1369825275327763e+00 1.6554386486928854e+00 2.0884180544198556e+00 + -1.5005011156138017e+00 1.6146785047178063e+00 2.1856952145659938e+00 + -1.9642752281393188e+00 1.4567232894149662e+00 2.2592056684126613e+00 + -2.4303528077818801e+00 1.0837082850671607e+00 2.3248104664049754e+00 + -2.7049494678261428e+00 4.7326339655936622e-01 2.4074884121890596e+00 + -2.6944073154530388e+00 -1.2520932703996701e-01 2.5763582468917354e+00 + -2.4880328435541923e+00 -1.2241475370774424e-01 2.8195494333008289e+00 + id 11256 + loc 5.5327582359313965e-01 9.2272841930389404e-01 1070 + blend 0.0000000000000000e+00 + interp 5.3900728273881049e-01:2.9769596423061456e-01:3.2556298495553848e-01:3.6274458290221684e-01:1.3552172317979581e+00:4.3920044234718209e-01:1.7810522078529509e+00:5.3900189266598308e-01:2.0057440307646441e+00:4.0532357402035085e-01:2.6984089590863429e+00:3.4937434294254149e-01:3.0866679700441222e+00:4.7131563756458328e-01:3.6768952445980663e+00 + CVs 20 + -2.5400352113901109e-01 3.4565392714708632e-01 1.7772818523908779e-01 + -4.6373828035623926e-01 6.4696438336305095e-01 3.3145325182300239e-01 + -6.2590467173274189e-01 9.3215617544735907e-01 5.0024514437230261e-01 + -7.6448421877274175e-01 1.2005754521169150e+00 6.5396939443539670e-01 + -9.0727442282156634e-01 1.4349482202046744e+00 7.4097707428298032e-01 + -1.0618606673194979e+00 1.6257033538340822e+00 7.4890837781552710e-01 + -1.2118258260888171e+00 1.7632582328217041e+00 7.0034745513323904e-01 + -1.3392723228887262e+00 1.8497125842119826e+00 6.4034150461488792e-01 + -1.4547503215662809e+00 1.9068011057660279e+00 5.8902277918279644e-01 + -1.5507839730928601e+00 1.9399911870696918e+00 5.0329788787752072e-01 + -1.6002350652886010e+00 1.9534095718680045e+00 3.7432890953618791e-01 + -1.6141621508676400e+00 1.9660280444809841e+00 2.1414975293160432e-01 + -1.5721610266447268e+00 1.9617478095653624e+00 4.4353933050279792e-02 + -1.4283114811937865e+00 1.8967552064950877e+00 -3.5418114740186413e-02 + -1.1815992294516464e+00 1.7403071174754130e+00 4.3963642364540423e-02 + -8.4724915893912744e-01 1.4215041625892055e+00 2.2681343792357067e-01 + -4.0287233524337129e-01 7.7680366376694310e-01 3.3287522018002974e-01 + -4.9046125289791279e-03 5.9198519635569775e-02 -1.5757698129850797e-03 + -2.6372643411875615e-02 7.5837777279346444e-02 -1.1592849256426388e-01 + id 11257 + loc 8.1865882873535156e-01 7.3305612802505493e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5476870251197360e-01:3.0120036317977100e-01:5.0135832290187921e-05:3.6713669227925000e-01:8.4032631482469156e-01:4.5476415482494847e-01:1.4010995250839744e+00:3.1795715164726107e-01:2.0456011555915059e+00:4.3667763166693091e-01:2.7047000693457117e+00:3.6606496387656695e-01:3.0789502969539724e+00 + CVs 20 + 2.9047651999747667e-02 3.4929251844095643e-01 -2.1187047471971854e-01 + 9.7986630386479701e-02 6.7451901041879381e-01 -4.1342604449000475e-01 + 1.8830685339987174e-01 9.8196853714249532e-01 -6.2085312210926102e-01 + 2.9126900730579464e-01 1.2732525869551305e+00 -8.5020175985784474e-01 + 4.0464980189766958e-01 1.5424313157132628e+00 -1.1143922151958814e+00 + 5.2838391069483270e-01 1.7778297247408341e+00 -1.4131679596512732e+00 + 6.7284659105326572e-01 1.9678235302036846e+00 -1.7294089954144982e+00 + 8.4877450743857086e-01 2.1055914001984339e+00 -2.0371314817311390e+00 + 1.0554259222612290e+00 2.1922164813823986e+00 -2.3121434857144596e+00 + 1.2866579801734992e+00 2.2352701287813632e+00 -2.5418978696236980e+00 + 1.5441748837468054e+00 2.2428346166405779e+00 -2.7305135339323265e+00 + 1.8420210333859368e+00 2.2133219682576946e+00 -2.8983501823237461e+00 + 2.1698204391925686e+00 2.1117785773071178e+00 -3.0660332832141077e+00 + 2.4477697583772842e+00 1.8959624367489125e+00 -3.2170380010693855e+00 + 2.6159643748976871e+00 1.5742392488639261e+00 -3.3218541160841424e+00 + 2.6989881066514352e+00 1.1133020632820967e+00 -3.3755195127958237e+00 + 2.6434053544663048e+00 4.0415059131114850e-01 -3.3703809485103950e+00 + 2.2364903451884848e+00 -2.3424702361535310e-01 -3.3238516145959860e+00 + 1.8673594350007299e+00 -1.5776642894604165e-01 -3.2929560189700458e+00 + id 11258 + loc 1.0068932175636292e-01 5.3251320123672485e-01 410 + blend 0.0000000000000000e+00 + interp 4.1498723942059679e-01:2.6216028477569869e-01:1.4700219104293277e-01:4.1498308954820262e-01:9.9819329837654758e-01:4.1364880840183399e-01:1.4632032836328295e+00:2.9119689676374216e-01:2.0546729375864947e+00:3.2073156432023403e-01:2.9893969547177912e+00:3.1069153489925855e-01:3.5920449425109826e+00 + CVs 20 + 2.3292751140230455e-01 1.6148453771117938e-01 -3.0516619918143278e-02 + 4.1415679432750940e-01 2.9002532664196723e-01 -4.7448709125580968e-02 + 5.6798596742588447e-01 4.0123234761733795e-01 -5.1624140002487939e-02 + 7.1547775957933879e-01 5.1083909181977716e-01 -4.1332886597182761e-02 + 8.5295553859896489e-01 6.1734484658781874e-01 -2.1565267058823390e-02 + 9.7466232493012550e-01 7.1803442346370405e-01 3.5076915743725845e-05 + 1.0785639278004606e+00 8.1268792261161704e-01 1.7232169928400376e-02 + 1.1689232279627224e+00 9.0386831615655383e-01 2.8514493187610235e-02 + 1.2506837321764965e+00 9.9271481496274028e-01 3.2850247535724353e-02 + 1.3265884848980247e+00 1.0777122700987991e+00 2.6172886451995336e-02 + 1.4033457358296706e+00 1.1652126147654507e+00 2.0105345395616536e-02 + 1.4950112730604972e+00 1.2851746589566786e+00 8.1881470876071782e-02 + 1.6273646130107102e+00 1.4641776514060980e+00 2.9964462642735307e-01 + 1.8464853638757117e+00 1.6665655717849515e+00 6.4566416075040467e-01 + 2.1543276417497141e+00 1.8318638300053023e+00 9.8349795987486033e-01 + 2.5144363134488756e+00 1.9466865198049246e+00 1.2460763191886319e+00 + 2.9143793448232600e+00 2.0155047926694327e+00 1.4505775799493053e+00 + 3.3438628768680507e+00 2.0363398445490279e+00 1.6084518366910499e+00 + 3.4999019658610688e+00 2.0472276949910704e+00 1.5314633904901338e+00 + id 11259 + loc 8.7983590364456177e-01 1.5931004285812378e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0344641936156531e-01:2.7564566074774077e-01:2.1435345788985982e-03:5.0344138489737167e-01:9.6224660174425203e-01:4.3364462451785263e-01:1.5016793650025573e+00:4.1917420044836229e-01:2.0390115518862815e+00:2.7423845415462023e-01:2.7192376202478585e+00:2.9236560389228139e-01:3.2192863377533953e+00 + CVs 20 + 3.8064975217108810e-01 3.0067366200031537e-01 -1.6308090497124197e-01 + 7.4461103427177533e-01 5.5091871660271319e-01 -2.4431017815981776e-01 + 1.1012366962563418e+00 7.9411907842130469e-01 -2.6758100831935372e-01 + 1.4430079677259364e+00 1.0577426553166629e+00 -2.3336105137282870e-01 + 1.7338399504062667e+00 1.3294574054865140e+00 -1.7924748425211678e-01 + 1.9522693395754256e+00 1.5577381058232858e+00 -1.9153942205480312e-01 + 2.1168720624564172e+00 1.6926545723060893e+00 -2.8208589975359755e-01 + 2.2585568178654536e+00 1.7454838895895868e+00 -3.9325739215988920e-01 + 2.3768229196991086e+00 1.7163540847747989e+00 -4.7268808852902255e-01 + 2.4317220875861190e+00 1.6002672612199813e+00 -4.5277582880086475e-01 + 2.4055701147038135e+00 1.4866157321852849e+00 -3.3057299317721789e-01 + 2.3753093188634304e+00 1.4497251231992143e+00 -2.1356737900692591e-01 + 2.3962465591724511e+00 1.4536570570534164e+00 -1.5668004812019909e-01 + 2.4722811842289714e+00 1.4475025602138634e+00 -1.5751773987406459e-01 + 2.5856758176808143e+00 1.4030175847664208e+00 -1.9472518390993310e-01 + 2.6936997929610640e+00 1.3374403164028341e+00 -2.3509345543857463e-01 + 2.7618904529024455e+00 1.2692457094641325e+00 -2.6012160042855581e-01 + 2.7946739626290826e+00 1.1279171734905724e+00 -2.5630083838362683e-01 + 2.8319917988631964e+00 7.1232529610504280e-01 -2.0437878291893563e-01 + id 11260 + loc 5.5300253629684448e-01 1.6139855980873108e-01 410 + blend 0.0000000000000000e+00 + interp 4.7478210530003201e-01:4.7477735747897903e-01:3.7194841997908634e-01:3.5395802157777145e-01:9.5933475539871893e-01:3.5539110736760504e-01:1.8218809458458787e+00:2.8263876370366331e-01:2.7119175466792353e+00:3.9850185413019606e-01:3.1744990870157848e+00:4.0435506289442613e-01:3.9332134187430849e+00 + CVs 20 + -3.4039151216189090e-01 2.6043713333147589e-01 1.1296161748292478e-01 + -6.4867414173904225e-01 5.1047493143147449e-01 2.6511078813421507e-01 + -9.5581678107985879e-01 7.7467637336326711e-01 4.3605234056740738e-01 + -1.2594818392597369e+00 1.0408914471349726e+00 6.2166178554713003e-01 + -1.5399783237841576e+00 1.2717719791489286e+00 8.2295337700237159e-01 + -1.7749370648777902e+00 1.4265397500004395e+00 1.0318801593783589e+00 + -1.9617437332376775e+00 1.5014533115969240e+00 1.2543163745051620e+00 + -2.1309733918588640e+00 1.5182250558117216e+00 1.5234420048628743e+00 + -2.3056882650013586e+00 1.4794246821791708e+00 1.8492857257731266e+00 + -2.4997464507969873e+00 1.3712067704006685e+00 2.2034687042688232e+00 + -2.7140695914438409e+00 1.1791493080255424e+00 2.5391290361067744e+00 + -2.9301339426728696e+00 9.2582890584743094e-01 2.8094337959726561e+00 + -3.1394391912125679e+00 6.6234372573375078e-01 3.0091554739452637e+00 + -3.3525861717621641e+00 4.1266505084639449e-01 3.1728330813407233e+00 + -3.5864972492059772e+00 1.7602095391183359e-01 3.3581314860787450e+00 + -3.8681968138178062e+00 -4.6622571296172977e-02 3.6477274845802805e+00 + -4.2277634462450431e+00 -2.4295852808762297e-01 4.0770060600374078e+00 + -4.6828281636422622e+00 -4.1004244845541948e-01 4.5818791940990762e+00 + -5.2143098466856275e+00 -5.5458404737840850e-01 5.0865075697169413e+00 + id 11261 + loc 3.7122738361358643e-01 8.3648252487182617e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4308282416350986e-01:4.2215490376567183e-01:3.5528379750886518e-03:2.6671255178044384e-01:1.0123139258110041e+00:3.5733241780717923e-01:1.9768205793285838e+00:3.0410765117452759e-01:2.9417659176763937e+00:4.4307839333526822e-01:3.6629114682669597e+00 + CVs 20 + 3.0275037337693683e-01 2.3026117501283869e-01 -2.2644511802121847e-01 + 5.5685987555972982e-01 4.9590969618897873e-01 -4.6108453949143113e-01 + 7.9967355792145522e-01 7.4388209039317810e-01 -7.1561225165939046e-01 + 1.0473525660540712e+00 9.5564183956113968e-01 -9.9828736162114662e-01 + 1.3019140461488432e+00 1.1201083116229165e+00 -1.3055711924164026e+00 + 1.5729508522254378e+00 1.2266138880760136e+00 -1.6277723560641126e+00 + 1.8722386846649091e+00 1.2684209701186500e+00 -1.9532102450421629e+00 + 2.2053674967099677e+00 1.2429095169635103e+00 -2.2709669013397438e+00 + 2.5677607222223036e+00 1.1493415631985937e+00 -2.5702520887934619e+00 + 2.9441637025283036e+00 9.8968648946721105e-01 -2.8439561356755254e+00 + 3.3098732891654277e+00 7.6814628709078958e-01 -3.0922883538447010e+00 + 3.6321184167736273e+00 4.8715036690512070e-01 -3.3174390128930016e+00 + 3.8720900863754641e+00 1.4941738846699359e-01 -3.5201320313729534e+00 + 3.9874995055639850e+00 -2.3098536261037728e-01 -3.7048926349550042e+00 + 3.9358530010061945e+00 -6.1505432746718092e-01 -3.8858451729646939e+00 + 3.6816920378443507e+00 -9.2268065682478095e-01 -4.0768222630935744e+00 + 3.2830728030962302e+00 -1.0367930134060530e+00 -4.2942901578602273e+00 + 2.8905307090107168e+00 -9.2097546554101761e-01 -4.5354487652386428e+00 + 2.6912638540025657e+00 -1.0393262196727391e+00 -4.6295493454262413e+00 + id 11262 + loc 6.6333115100860596e-01 8.1335955858230591e-01 410 + blend 0.0000000000000000e+00 + interp 5.0051352313555508e-01:2.3605690957175166e-01:6.0436016871159359e-01:3.7276445339550751e-01:1.0694146068470203e+00:3.1509471249651144e-01:1.9999512158409041e+00:5.0050851800032370e-01:2.2898766748551305e+00:4.4545565426920286e-01:3.0054216057743912e+00:3.0472181656721092e-01:3.9730567657348712e+00 + CVs 20 + 5.3050344736833432e-01 2.8741224640076818e-01 -9.4406308057840879e-02 + 9.4923251598114100e-01 4.9270485654991891e-01 -1.8540650545864695e-01 + 1.3618826268640114e+00 6.7093246959741593e-01 -2.6340985328817307e-01 + 1.8036659104982271e+00 8.3184563911546205e-01 -3.2853497294017331e-01 + 2.2587398284099494e+00 9.5706562896349667e-01 -3.9385099493663756e-01 + 2.7119798189444153e+00 1.0284789961852323e+00 -4.7215523941304993e-01 + 3.1515910997278969e+00 1.0262225837469963e+00 -5.7517124596039837e-01 + 3.5567535899197198e+00 9.3264360982713113e-01 -7.1031928110367404e-01 + 3.9004745915857564e+00 7.5283762886907590e-01 -8.6536123423096378e-01 + 4.1658073657845085e+00 5.1937413749825900e-01 -1.0093593285397693e+00 + 4.3605675253580767e+00 2.3726414146422603e-01 -1.1154649643636654e+00 + 4.5145537638542157e+00 -1.7427246588720458e-01 -1.1709219100103516e+00 + 4.6515960887889225e+00 -7.7873612323561381e-01 -1.2042194235502812e+00 + 4.7943215537689134e+00 -1.5431624584495889e+00 -1.3069258799445844e+00 + 4.9615962255354784e+00 -2.3550300412107221e+00 -1.5644153113159707e+00 + 5.1524362063301155e+00 -3.0580392023078335e+00 -1.9750212106016574e+00 + 5.3606136427772046e+00 -3.5771584544071584e+00 -2.4602586956834651e+00 + 5.5999971695180806e+00 -3.9561078723870375e+00 -2.9523535050089427e+00 + 5.8890118846206692e+00 -4.2561029733485416e+00 -3.4090298811363171e+00 + id 11263 + loc 4.5592591166496277e-01 9.8290756344795227e-02 1070 + blend 0.0000000000000000e+00 + interp 1.6881172001052274e+00:3.4455155657682734e-01:4.1498292377263613e-01:4.7047798805452895e-01:6.0388349878669934e-01:7.9118663662153399e-01:7.0584293540744691e-01:1.6881072001052273e+00:2.6809272031410378e+00:1.3170259928719132e+00:2.7207969618288459e+00:9.8119754100703305e-01:2.7738617323219263e+00:4.0371266565382286e-01:3.0562816220486377e+00:3.3896386141348556e-01:3.8092049930566736e+00 + CVs 20 + 3.7406363135950293e-01 4.2718823586294852e-01 2.9443130521343308e-01 + 5.9908703246567341e-01 8.1052820976782458e-01 5.4825244619440860e-01 + 7.3916182830838284e-01 1.1775591180485019e+00 7.5465151398403663e-01 + 8.2197910846583766e-01 1.5462221449203684e+00 9.0561672024662532e-01 + 8.7669931851683924e-01 1.8766623895845020e+00 9.6254116933609013e-01 + 9.6153198452446065e-01 2.1262689835212676e+00 9.2355415936455376e-01 + 1.0943859776682952e+00 2.3241002099644508e+00 8.4936027082639753e-01 + 1.2923132509640480e+00 2.5531958699400725e+00 8.1070032910650114e-01 + 1.6007856279748958e+00 2.8247733985526478e+00 8.5605870201386414e-01 + 2.0486186857793349e+00 3.0660407372422158e+00 1.0350153078167315e+00 + 2.6008665308235925e+00 3.1555559066646448e+00 1.3763262768293001e+00 + 3.1329341165789297e+00 3.0208033556079217e+00 1.8235339578829746e+00 + 3.5514304847551847e+00 2.6928458520445675e+00 2.2919752662374493e+00 + 3.8290614190612344e+00 2.2180908711069716e+00 2.7410150321116111e+00 + 3.9520339657960712e+00 1.6495412500136655e+00 3.1517798341687611e+00 + 3.9129256381031396e+00 1.0255579115766940e+00 3.5007599547683244e+00 + 3.6949874584044800e+00 3.5439176075578471e-01 3.7288944556838710e+00 + 3.2833897954148292e+00 -3.0705577057944211e-01 3.7632711923598050e+00 + 3.1037348794777837e+00 -5.9648495667476742e-01 3.8924395919949757e+00 + id 11264 + loc 1.9087237119674683e-01 2.9600101988762617e-03 1077 + blend 0.0000000000000000e+00 + interp 5.4864453789397916e-01:1.6768382302204488e-01:4.6108405695831745e-01:4.3175821060470310e-01:9.9951808624274785e-01:4.6883916235448220e-01:1.3464314142444307e+00:5.4863905144860026e-01:1.8530221182206135e+00:5.1401455954485176e-01:2.0012156003597807e+00:3.1978996528853204e-01:2.6317283876958628e+00:2.6903925534976803e-01:3.0331138287388382e+00:2.6756515830885108e-01:3.8702503796180654e+00 + CVs 20 + -9.9026906309465326e-02 3.5822715679412143e-01 5.1623447138970574e-02 + -2.2605701458459743e-01 6.8378194862204222e-01 7.1446541058530544e-02 + -3.7607337601467244e-01 9.8143248145333961e-01 6.4556473380320001e-02 + -5.4524095201525680e-01 1.2475923843307271e+00 3.1327106814389105e-02 + -7.3081226458793425e-01 1.4737671229105218e+00 -3.0926665597698411e-02 + -9.2691822682402669e-01 1.6528574727334435e+00 -1.2243625434749583e-01 + -1.1267676161403326e+00 1.7800003953636252e+00 -2.4246306637155934e-01 + -1.3240303787146122e+00 1.8526283181716356e+00 -3.9092381130193093e-01 + -1.5119644642646388e+00 1.8694069697877858e+00 -5.6870404314426293e-01 + -1.6870331621574672e+00 1.8278984709632315e+00 -7.7717059418547318e-01 + -1.8517779523665943e+00 1.7244107600406098e+00 -1.0110024837985958e+00 + -2.0122101724672117e+00 1.5553895262217547e+00 -1.2539019877357556e+00 + -2.1751531835699378e+00 1.3145248170894768e+00 -1.4815840932819546e+00 + -2.3516367850796893e+00 9.9055026434546056e-01 -1.6581506834663515e+00 + -2.5549241356301797e+00 5.8578713759926992e-01 -1.7214888790406304e+00 + -2.8036990779396485e+00 1.4781678420959610e-01 -1.6121220405428058e+00 + -3.1443052913195677e+00 -2.3627535194518878e-01 -1.3197472575878051e+00 + -3.6009071207799423e+00 -4.6330299860098045e-01 -9.0695885829512546e-01 + -3.9903520448690264e+00 -6.9903713942079126e-01 -6.3599855912888303e-01 + id 11265 + loc 6.6654686816036701e-03 1.1573594808578491e-01 410 + blend 0.0000000000000000e+00 + interp 4.0303406205490333e-01:3.3044649961738354e-01:3.4239333764538271e-01:2.5536860410779760e-01:9.9924005905154645e-01:3.8529195127177707e-01:2.0244642202638468e+00:4.0303003171428281e-01:2.8788656594061326e+00:3.0593111777888155e-01:3.0727844028546261e+00:3.8664260558465674e-01:3.9546814504461185e+00 + CVs 20 + -1.1041324272177679e-01 1.0668398434576194e-01 -1.0696773039150997e-01 + -2.3167774035604016e-01 2.0754057907387274e-01 -2.0020253107928471e-01 + -3.6240534049433148e-01 3.1449793430691247e-01 -2.9614666817688451e-01 + -4.9702971495511694e-01 4.3644243386059217e-01 -4.0597810563007314e-01 + -6.3221722252374191e-01 5.7606666354657188e-01 -5.3834070221385066e-01 + -7.6190944532399407e-01 7.3468804844573721e-01 -7.0288260277841297e-01 + -8.7347339022512671e-01 9.1166634338874197e-01 -9.0474776102771748e-01 + -9.5202132392124228e-01 1.1019042171274549e+00 -1.1396491192343767e+00 + -9.8943897901098188e-01 1.2978204440449894e+00 -1.3997910232173525e+00 + -9.8382725165431362e-01 1.4928459188929881e+00 -1.6792454890863262e+00 + -9.3735376793043246e-01 1.6809255245285355e+00 -1.9609403665216922e+00 + -8.7006221738270328e-01 1.8531246296593453e+00 -2.1957873593996990e+00 + -8.2225995708640676e-01 2.0021140763630676e+00 -2.3253975415671930e+00 + -8.0404325961858225e-01 2.1358901108504029e+00 -2.3499646315258689e+00 + -7.9968584990016922e-01 2.2606395940071318e+00 -2.3546283467261864e+00 + -8.1810333315652628e-01 2.3677917382281022e+00 -2.3923401000399904e+00 + -8.5867572325600050e-01 2.4585949098206843e+00 -2.4290726233814079e+00 + -9.0475716934325456e-01 2.5418447404242084e+00 -2.4293388166347230e+00 + -1.1132700226343490e+00 2.5227145039851768e+00 -2.5947664242160511e+00 + id 11266 + loc 6.1922818422317505e-01 4.0964931249618530e-01 1077 + blend 0.0000000000000000e+00 + interp 4.6993938100347299e-01:3.7583548213779044e-01:2.1592262207515656e-01:3.6215322102802627e-01:9.2729299779033025e-01:4.2111259926989286e-01:1.6137445050383121e+00:3.5974680254230335e-01:2.0930356543492850e+00:2.8797530080046957e-01:2.8486432356915747e+00:4.6993468160966295e-01:3.0188179224824072e+00:4.1028982439234224e-01:3.9198239465527536e+00 + CVs 20 + -1.4679233572254394e-01 2.4142503377009650e-01 2.4995046137805166e-01 + -2.8885133564032622e-01 5.1746790197307146e-01 4.8641877912784898e-01 + -4.4730553793584338e-01 7.8789490424179565e-01 7.3276511818239876e-01 + -6.3611843946516622e-01 1.0235047836865765e+00 1.0057974267816485e+00 + -8.6135580753301810e-01 1.2008047076765591e+00 1.3056391047203240e+00 + -1.1276940037032639e+00 1.2983687993066133e+00 1.6173517576133405e+00 + -1.4344487991799078e+00 1.3031219702077133e+00 1.9158733233983232e+00 + -1.7730663975477654e+00 1.2136110810188490e+00 2.1772463969943341e+00 + -2.1290809326222306e+00 1.0376612713110061e+00 2.3896795357411427e+00 + -2.4864654385583376e+00 7.8478742197251272e-01 2.5626270214779323e+00 + -2.8232377001374296e+00 4.5982144297329985e-01 2.7155391666925066e+00 + -3.1063064975689163e+00 6.5883859187188865e-02 2.8622807498208855e+00 + -3.2994182283474194e+00 -3.8851044410852076e-01 3.0102097621005308e+00 + -3.3731044707795461e+00 -8.9543107813959799e-01 3.1843384188366741e+00 + -3.2753019289597116e+00 -1.4454094155021808e+00 3.4355801987252312e+00 + -2.9536029413001899e+00 -1.9806376480397954e+00 3.8321057852210236e+00 + -2.4243837686628193e+00 -2.3710328064448078e+00 4.4345846033255629e+00 + -1.8540653103976394e+00 -2.5145741903253143e+00 5.1109554669592621e+00 + -1.6389766200150317e+00 -2.6912053367208597e+00 5.4021912216755368e+00 + id 11267 + loc 9.0655112266540527e-01 4.0591442584991455e-01 1070 + blend 0.0000000000000000e+00 + interp 3.8546267485736019e-01:3.8545882023061162e-01:2.9881514207339399e-01:3.8379917056650464e-01:1.0711864747373487e+00:2.8808070499282545e-01:2.0167267772395800e+00:3.5709673233342487e-01:2.9970593766348932e+00:3.5224001892451462e-01:3.5951775007046995e+00 + CVs 20 + 1.7217497068891752e-01 2.8804187676787757e-01 -7.1911262553681576e-02 + 3.2347941070182817e-01 5.1413864580675817e-01 -8.7120111396487038e-02 + 4.4551357729087598e-01 6.9523260196581926e-01 -9.0981606851524510e-02 + 5.4075005180255298e-01 8.4121116909589466e-01 -1.0260407574934427e-01 + 6.3130038083744067e-01 9.6836050274565288e-01 -7.2766431202496595e-02 + 7.2535991560921720e-01 1.0926057464808938e+00 5.1163310292009712e-02 + 8.1804676564256518e-01 1.2614193394461233e+00 2.3817468763160388e-01 + 8.9568752750808678e-01 1.5134749582025382e+00 3.9788185019734679e-01 + 9.4509764161213605e-01 1.8440989881558245e+00 4.7883846885112380e-01 + 9.7039361696011639e-01 2.2518382033674573e+00 4.7049956769838741e-01 + 1.0294163467905129e+00 2.7130252423898096e+00 3.3496338574889517e-01 + 1.1941744460976875e+00 3.0831651958855804e+00 4.5220583876437237e-02 + 1.4276186720822555e+00 3.2336921055927732e+00 -3.2499645744355421e-01 + 1.6550982526450269e+00 3.1714404389462323e+00 -6.9209878139342296e-01 + 1.8637819681344263e+00 2.9559296840485745e+00 -1.0140854821605367e+00 + 2.0864783481057003e+00 2.6349123366399692e+00 -1.2776361482390914e+00 + 2.3192835055894552e+00 2.2199946959023045e+00 -1.4632868833895514e+00 + 2.4709505261719480e+00 1.7418011363242718e+00 -1.5191075587171243e+00 + 2.4436334174118839e+00 1.3686450525554326e+00 -1.4112258336828074e+00 + id 11268 + loc 9.1891449689865112e-01 9.7416579723358154e-01 410 + blend 0.0000000000000000e+00 + interp 4.8613592304118131e-01:2.6649626805222676e-01:6.4666593348914936e-01:4.8613106168195092e-01:1.3816612747187653e+00:2.7063424963508498e-01:1.9881471380736073e+00:2.7677028735900872e-01:2.8359264200685264e+00:2.9998279505852776e-01:3.2416237552542881e+00:4.3517760336708750e-01:3.9938864066591457e+00 + CVs 20 + 6.0900641393598531e-01 2.6101612324450402e-01 -1.5243099437395360e-01 + 1.0854872014144716e+00 4.1569515022693204e-01 -2.7206626861666783e-01 + 1.5490598465923475e+00 5.3163347778649361e-01 -3.6289176854814142e-01 + 2.0386032794726185e+00 6.2698218290044683e-01 -4.2680396353131078e-01 + 2.5420370115165207e+00 6.8985078514316789e-01 -4.7621375897769802e-01 + 3.0527763117934881e+00 7.0485759078738397e-01 -5.3178444711020978e-01 + 3.5570390357804609e+00 6.5477882518094566e-01 -6.1539386608111712e-01 + 4.0204469707598776e+00 5.3582887117144851e-01 -7.3605630857717763e-01 + 4.4120194740888525e+00 3.6935621488926507e-01 -8.8337234537905340e-01 + 4.7273003651544911e+00 1.9216095499723607e-01 -1.0467468349581865e+00 + 4.9915753902557487e+00 -8.7580540780018978e-03 -1.2277193578358958e+00 + 5.2355130780265240e+00 -3.3709554879119041e-01 -1.4174974078621609e+00 + 5.4420931270104891e+00 -8.4596405493251892e-01 -1.6354742933574420e+00 + 5.5867526909620731e+00 -1.4813262948445827e+00 -1.9692644055083071e+00 + 5.6616388738963259e+00 -2.1205137122841400e+00 -2.5060668640300796e+00 + 5.6793967955434397e+00 -2.6379003621246730e+00 -3.2793840778259931e+00 + 5.6897878309115342e+00 -3.0360719522836037e+00 -4.2644110793099914e+00 + 5.7675360165894727e+00 -3.4227013968236433e+00 -5.3783972680457079e+00 + 5.9180797183947433e+00 -3.8460965017368105e+00 -6.4963750017086408e+00 + id 11269 + loc 8.1789022684097290e-01 1.6511510312557220e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5823000152790133e-01:4.5822541922788607e-01:6.4009492771731269e-01:3.8724359025198796e-01:1.1804109071415640e+00:2.8130450818495695e-01:2.0705433460796714e+00:2.8395975697548242e-01:3.0463911238528518e+00:3.1355297747629290e-01:3.9828353931652480e+00 + CVs 20 + 3.2641270598543493e-03 3.5285087266025622e-01 2.8952547311360355e-01 + 1.0873901884448367e-03 7.2572666318465873e-01 5.5031621462881442e-01 + -3.1516808248826411e-02 1.0991074315330527e+00 8.3574471398590855e-01 + -1.2005455223598793e-01 1.4477179806088063e+00 1.1729132250385128e+00 + -2.8334652001823779e-01 1.7442839988039265e+00 1.5627193898811602e+00 + -5.2888192179762117e-01 1.9634838900735219e+00 1.9863492325221108e+00 + -8.5224853722848048e-01 2.0876616209792873e+00 2.4110922525161693e+00 + -1.2371588138607503e+00 2.1128464423169291e+00 2.8003560550256070e+00 + -1.6573528854708099e+00 2.0504823219641941e+00 3.1296167732295483e+00 + -2.0847058274837478e+00 1.9197698291935832e+00 3.3991449988766100e+00 + -2.4986175487880788e+00 1.7351316786834170e+00 3.6290484537149608e+00 + -2.8868465234089840e+00 1.4998089995261559e+00 3.8419078492705698e+00 + -3.2396564171195243e+00 1.2108817903787985e+00 4.0554970354593456e+00 + -3.5454431284523968e+00 8.6557348737209283e-01 4.2885537695178009e+00 + -3.7854337632391188e+00 4.5117335041418083e-01 4.5722730117524035e+00 + -3.9206565909101827e+00 -2.3941457201163807e-02 4.9281840667852155e+00 + -3.9288920553140692e+00 -4.7243982801904005e-01 5.3275485436636263e+00 + -3.8510765596533698e+00 -8.1298308910792350e-01 5.7176033964318336e+00 + -3.8198894070695264e+00 -9.1742373750241168e-01 5.9389110382650614e+00 + id 11270 + loc 4.6293541789054871e-01 5.8480817079544067e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0782047001221217e-01:3.7035772719321225e-01:5.3296567367120151e-01:2.7501558491905514e-01:1.1385192400901065e+00:2.7262746855376718e-01:2.0485838762223278e+00:4.0781639180751206e-01:3.0005209000645787e+00:3.2244418463895719e-01:3.6264039348043808e+00 + CVs 20 + -3.3373883954594313e-01 3.4285459089294951e-01 2.2228903210086226e-01 + -6.0526630663386105e-01 6.4990413918905632e-01 3.9319219704503477e-01 + -8.2818776013118078e-01 9.5357748892984573e-01 5.6989739758544622e-01 + -1.0339119966306307e+00 1.2606197580192573e+00 7.2917840167672177e-01 + -1.2516644015655884e+00 1.5492679802592744e+00 8.0355180742898646e-01 + -1.4904676464279021e+00 1.7987407474106663e+00 7.6478202588555722e-01 + -1.7259401994022137e+00 1.9863869986072782e+00 6.2213424421915564e-01 + -1.8989038767114503e+00 2.0952334901884617e+00 4.1180467492275219e-01 + -1.9513727039042683e+00 2.1362957438083323e+00 1.9831477020217614e-01 + -1.8984806542175479e+00 2.1420605033085716e+00 2.8079197690152657e-02 + -1.7923791855934934e+00 2.1187399145521031e+00 -1.2703532848102705e-01 + -1.6387164591732049e+00 2.0457568919836207e+00 -2.7644967708237300e-01 + -1.4369061739888920e+00 1.9045361289791067e+00 -3.9427810934864216e-01 + -1.2097895628190145e+00 1.6956651263897073e+00 -4.8653815597014294e-01 + -9.9618253387101086e-01 1.4354821758809857e+00 -6.1420972674988461e-01 + -8.5318608568755694e-01 1.1848016737534453e+00 -8.3516528884717489e-01 + -8.3985323067173190e-01 1.0740387241001059e+00 -1.1349356351270756e+00 + -9.5613767599310706e-01 1.2088815887496442e+00 -1.3497341550489361e+00 + -1.0147226570741652e+00 1.2083555427635795e+00 -1.5832745161666204e+00 + id 11271 + loc 2.7293118834495544e-01 6.2223482131958008e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5859485752593138e-01:3.7327057348823739e-01:8.1286601661230362e-02:4.5859027157735616e-01:9.8738541389450774e-01:3.4780187087076614e-01:1.3121441872288881e+00:4.1666665862223068e-01:1.9859422083733749e+00:4.0683855683171527e-01:2.7358314616964554e+00:3.2461004573920504e-01:3.2299607493520681e+00 + CVs 20 + 1.6350797467921052e-01 2.8283598883120231e-01 -1.1004290675612202e-01 + 3.1547545938253735e-01 5.8087107555309658e-01 -2.2944898554587895e-01 + 4.8584223052390618e-01 8.6750582216819194e-01 -3.7021889114921958e-01 + 6.8553033930659502e-01 1.1206345954595505e+00 -5.3818836712641904e-01 + 9.0804393937245131e-01 1.3252698961651315e+00 -7.3161739876160481e-01 + 1.1451951951806782e+00 1.4681889485999773e+00 -9.4084057162234402e-01 + 1.3889602094438260e+00 1.5435502493751483e+00 -1.1531832361945757e+00 + 1.6305208648124250e+00 1.5546962761790259e+00 -1.3588333894354276e+00 + 1.8610772513402163e+00 1.5118237663010061e+00 -1.5533476533641417e+00 + 2.0760109377701079e+00 1.4269335860857322e+00 -1.7390298342925885e+00 + 2.2717711146311199e+00 1.3120884771492987e+00 -1.9209903165358775e+00 + 2.4417122157793405e+00 1.1827118708283284e+00 -2.1017521216607289e+00 + 2.5831094258631913e+00 1.0556689492066027e+00 -2.2791523962762081e+00 + 2.7052254355559548e+00 9.4065945729585132e-01 -2.4449091717525238e+00 + 2.8314849428453632e+00 8.3886212419794592e-01 -2.5813923203024300e+00 + 2.9825305572618257e+00 7.2220369360579895e-01 -2.6696066711765960e+00 + 3.1080733542207377e+00 5.2545740362268978e-01 -2.7059508275000876e+00 + 3.1191138173179436e+00 2.7062213325647777e-01 -2.7218444624022640e+00 + 2.9693244487762729e+00 3.7828322653290947e-01 -2.8551274000027873e+00 + id 11272 + loc 9.7540110349655151e-01 3.5624668002128601e-01 410 + blend 0.0000000000000000e+00 + interp 4.8325297742800122e-01:3.2448449367045834e-01:2.6614207183273675e-02:3.6820373988203819e-01:6.5546794297924116e-01:2.8886506653341343e-01:1.0508256165028844e+00:3.9411415013351442e-01:1.7031047982549250e+00:3.5008131127393349e-01:2.3616447686879072e+00:4.8324814489822698e-01:2.9997860745830613e+00:4.6920762848724690e-01:3.6694920931918267e+00 + CVs 20 + -4.0660191357291897e-01 3.0908405379882609e-01 1.9287895365581706e-01 + -7.4329340411859857e-01 6.0471118728499540e-01 3.6484928097000319e-01 + -1.0666874966861992e+00 9.1651332674503605e-01 5.2773357442993674e-01 + -1.4022105191932295e+00 1.2462694454625725e+00 7.0209840168947324e-01 + -1.7553658906824148e+00 1.5734651617734590e+00 9.1549275339457603e-01 + -2.1293046678044427e+00 1.8727957369382191e+00 1.1971746123531612e+00 + -2.5244932403445506e+00 2.1147563766063104e+00 1.5706433046131922e+00 + -2.9410651032402408e+00 2.2626838075147484e+00 2.0416605820448104e+00 + -3.3857261527259879e+00 2.2742041070075207e+00 2.5900614660462109e+00 + -3.8624722190988972e+00 2.1049955947687256e+00 3.1710454477951675e+00 + -4.3345720013425062e+00 1.7485784010258856e+00 3.6884217554062770e+00 + -4.7311224286175300e+00 1.3043236976285459e+00 4.0354524051983915e+00 + -5.0209016870068144e+00 8.8230926320890379e-01 4.2112627268652547e+00 + -5.2110063509129754e+00 4.9984412441186610e-01 4.2847419946479395e+00 + -5.3144378008686086e+00 1.1213597788777419e-01 4.3182158306113116e+00 + -5.3483448101980002e+00 -3.3548893065725593e-01 4.3839460107997166e+00 + -5.3327940956116944e+00 -8.5810124722304382e-01 4.5265788867000110e+00 + -5.3065293242057416e+00 -1.4489789709595802e+00 4.7215370285076244e+00 + -5.3544300107675440e+00 -2.0921010831221469e+00 4.9185693643982020e+00 + id 11273 + loc 7.9099977016448975e-01 8.7534785270690918e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6890479663028573e-01:4.6890010758231943e-01:1.9247769367652456e-01:4.1181538403233842e-01:7.9044617170992693e-01:3.2119964589892303e-01:1.0926000297372174e+00:3.1506085929094702e-01:1.9946354475132231e+00:3.0506737365974607e-01:2.7606990742949371e+00:3.9012068165832919e-01:3.1233863122641070e+00:3.9214085400705956e-01:3.9829834407364584e+00 + CVs 20 + -2.5979244925508244e-01 3.0028975283751286e-01 9.6885706351267087e-02 + -4.7877793897190640e-01 5.7406761004800766e-01 2.0265949118212881e-01 + -6.5846089692946519e-01 8.3644658075783962e-01 3.3664992739451111e-01 + -8.2590343316111547e-01 1.0857046910659616e+00 4.6780713973396665e-01 + -1.0127354807294406e+00 1.3053774301447776e+00 5.4229021475783101e-01 + -1.2267914215356415e+00 1.4754829753922214e+00 5.3730352587525720e-01 + -1.4527252327900690e+00 1.5797597954831171e+00 4.6650607555509316e-01 + -1.6747299727314060e+00 1.6147942699495637e+00 3.5113699229065676e-01 + -1.8704657742862449e+00 1.5859251547302622e+00 1.9978245715988741e-01 + -2.0011431898845840e+00 1.5031750489367737e+00 2.6471897358500751e-02 + -2.0626703880318171e+00 1.3958559055990043e+00 -1.3467957409045772e-01 + -2.0958761430858917e+00 1.3065691882772494e+00 -2.6699516731082973e-01 + -2.1054409736244954e+00 1.2435077196191329e+00 -3.6537674321088753e-01 + -2.0219541121502482e+00 1.1528750159216978e+00 -3.6209441209702886e-01 + -1.7866407995412104e+00 9.5138903265150376e-01 -2.1006058712685838e-01 + -1.3826165146251235e+00 5.0233270899313764e-01 -3.9222894584144630e-02 + -8.4412505885421718e-01 -3.0771049997319727e-01 -2.1119956055261005e-01 + -4.6205930356766939e-01 -9.8044269947330853e-01 -9.1785994442468799e-01 + -4.0564331898138917e-01 -1.0000766699626289e+00 -1.0831698230569966e+00 + id 11274 + loc 9.9648362398147583e-01 3.8210994005203247e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7132573098949176e-01:3.1847222869119834e-01:1.4261805834824282e-03:2.0128608538275164e-01:8.9008739795249148e-01:2.7318107342349540e-01:1.5921014551144950e+00:2.8218042797717602e-01:2.0099308849423325e+00:4.7132101773218188e-01:2.8992460691301063e+00:3.2160562551969679e-01:3.1388829696311467e+00 + CVs 20 + -1.0416387388510240e-01 3.1389577230081267e-01 1.0762111540785373e-01 + -1.6593669845708325e-01 6.7759253912409123e-01 2.3240962173663471e-01 + -2.2090724165791903e-01 1.0704675327517392e+00 3.5458026627421146e-01 + -2.9327475075170373e-01 1.4793052609153790e+00 4.8566963754838399e-01 + -4.0586125639713855e-01 1.8922744189857346e+00 6.4973252275693016e-01 + -5.8763223756789018e-01 2.2824166886622304e+00 8.5905451930266441e-01 + -8.7334540286553486e-01 2.6001721210361182e+00 1.1050204126644525e+00 + -1.2859470661038928e+00 2.7685039998840235e+00 1.3418196752503890e+00 + -1.7819443470500611e+00 2.7343965174708851e+00 1.4959078254341975e+00 + -2.2871142691172119e+00 2.5348039987962778e+00 1.5479756914580873e+00 + -2.7753948566865319e+00 2.1942601412557599e+00 1.5340471873192214e+00 + -3.1979698479990519e+00 1.6706840958048907e+00 1.4908872005328118e+00 + -3.4507083793942153e+00 9.7574978930073286e-01 1.4308009555889643e+00 + -3.5688219577912288e+00 3.0565072813166805e-01 1.3154404978989234e+00 + -3.7818809295298430e+00 -1.6474596810383479e-01 1.1124957059425158e+00 + -4.2120956260716733e+00 -3.5973467949896731e-01 8.7784344022373806e-01 + -4.7951927377065990e+00 -2.3324900788140646e-01 7.2759607514247127e-01 + -5.3570855986106949e+00 4.4588169335100680e-02 7.0253172163250943e-01 + -5.8746184419702834e+00 -1.7980611241124445e-01 6.1507304343429847e-01 + id 11275 + loc 8.8321614265441895e-01 6.5653109550476074e-01 410 + blend 0.0000000000000000e+00 + interp 4.3020523596987104e-01:3.0672584484093340e-01:3.9288217449803975e-01:2.9437957444639329e-01:1.2888425256556055e+00:4.3020093391751135e-01:2.0424595178806397e+00:2.5905176627239418e-01:2.7249816104729181e+00:2.9515817286157514e-01:3.4955881900722474e+00 + CVs 20 + 4.8284102408473395e-01 2.7251338164930045e-01 -1.5550891575429623e-01 + 8.8338107732539295e-01 4.9013407127435743e-01 -2.9986219660901042e-01 + 1.2878992737216493e+00 6.9684261304502715e-01 -4.3418233711880538e-01 + 1.7283232611606896e+00 8.9527234501276931e-01 -5.6494904778816513e-01 + 2.1959493835530153e+00 1.0581285968487337e+00 -7.0909366515240413e-01 + 2.6776717547550941e+00 1.1581674788382950e+00 -8.8623838748731021e-01 + 3.1549001205058795e+00 1.1754888036763529e+00 -1.1063371145788587e+00 + 3.6061309262875372e+00 1.1030627633009786e+00 -1.3572686461383880e+00 + 4.0203055061679418e+00 9.5057842584939567e-01 -1.6077671471028205e+00 + 4.3986051831190558e+00 7.3819317136351525e-01 -1.8278789829557074e+00 + 4.7496774282207319e+00 4.6840762943560099e-01 -2.0008396188868089e+00 + 5.0898345869439137e+00 9.9470771323555418e-02 -2.1200661218578190e+00 + 5.4340747907868341e+00 -3.9866439849748092e-01 -2.2073949125838159e+00 + 5.7935464962072913e+00 -9.9088341531243973e-01 -2.3284984056613922e+00 + 6.1665671460212490e+00 -1.5891646873373664e+00 -2.5446607042248361e+00 + 6.5322733460103262e+00 -2.0833809714489009e+00 -2.8593175934964066e+00 + 6.8693685065707708e+00 -2.4256527990463836e+00 -3.2263897675355615e+00 + 7.1871684770993376e+00 -2.6733417552098393e+00 -3.6215762471024848e+00 + 7.5542053291619231e+00 -2.9479964947000257e+00 -4.0929697513983614e+00 + id 11276 + loc 7.0187473297119141e-01 4.9079671502113342e-01 1070 + blend 0.0000000000000000e+00 + interp 4.5254379744429585e-01:3.1578979826729803e-01:1.0982066090443010e-01:3.3638331997431359e-01:1.0279216023615538e+00:3.9163457221332088e-01:1.7657683827007120e+00:3.4919703091841509e-01:2.6952043007204924e+00:4.5253927200632144e-01:3.0441712237661411e+00:4.2307225427340261e-01:3.6770486768607293e+00 + CVs 20 + 3.5993529570701360e-01 3.0037371219568720e-01 -1.0895502837879423e-01 + 6.4992184571807676e-01 5.4491321638866086e-01 -1.8440485875126872e-01 + 8.9599162057080473e-01 7.6634970493615884e-01 -2.6147021313727981e-01 + 1.1111621747709814e+00 9.7515298309752507e-01 -3.4451381046084206e-01 + 1.3048110672855151e+00 1.1726099546017874e+00 -4.0800917993943819e-01 + 1.4899220176040813e+00 1.3611345071365926e+00 -4.3244452411979339e-01 + 1.6726032047375536e+00 1.5365425846069007e+00 -4.2471406976693693e-01 + 1.8642276544875886e+00 1.6927375758913401e+00 -4.0579294374675356e-01 + 2.0794633083202965e+00 1.8257010402338336e+00 -3.7686253125881541e-01 + 2.3007807177897748e+00 1.9163755369665780e+00 -2.9663926644116367e-01 + 2.4730550449198874e+00 1.9464589381954931e+00 -1.4506362960015617e-01 + 2.5822388776401102e+00 1.9345241853114339e+00 5.5417199648479798e-02 + 2.6206630838655283e+00 1.8815504274035955e+00 2.7259616794923702e-01 + 2.5416276966006945e+00 1.7396628266673528e+00 4.1327254691797743e-01 + 2.3246496810882200e+00 1.4721997132205678e+00 4.1576523622838901e-01 + 2.0025400249697447e+00 1.0533041421336222e+00 3.9516476009522483e-01 + 1.6372545056890699e+00 4.8553021886491021e-01 5.6688641648074611e-01 + 1.3662647660833269e+00 2.9834930744394306e-03 1.1092350087356015e+00 + 1.3207516625085223e+00 -2.4911401366944474e-02 1.4399517456285083e+00 + id 11277 + loc 9.3766796588897705e-01 7.3640143871307373e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9550588450874657e-01:3.1687000779327318e-01:4.3536676780551820e-01:3.8600289255393838e-01:1.1120483301100139e+00:3.9446383340912561e-01:1.9788847077502918e+00:2.9887784638651277e-01:2.2763683243757802e+00:2.6569936233803709e-01:3.0108802132488983e+00:3.9550192944990148e-01:3.9494755865358671e+00 + CVs 20 + -2.9357576912245192e-01 3.9403484052964155e-01 -5.2790685905962642e-02 + -5.2013728167654705e-01 7.8074503269753981e-01 -9.6577839269871513e-02 + -7.0395623752361880e-01 1.1565844074366254e+00 -1.3685392087769810e-01 + -8.7720608262702227e-01 1.4876010440369263e+00 -2.2623369741017940e-01 + -1.0590674032059726e+00 1.7382105312955849e+00 -3.9559935690164605e-01 + -1.2417082752788220e+00 1.8870648532449039e+00 -6.3096576714579833e-01 + -1.3677347532638053e+00 1.9139820499573403e+00 -8.8751062986325124e-01 + -1.3586056303586873e+00 1.8429246314112970e+00 -1.0820401925114267e+00 + -1.2296752920810259e+00 1.7558990372481835e+00 -1.1443299888602945e+00 + -1.0895299335374879e+00 1.6926039413121239e+00 -1.1263388646015591e+00 + -9.7285117744347394e-01 1.6302795203658311e+00 -1.0905376626095951e+00 + -8.7947789150973066e-01 1.5726180800827816e+00 -1.0280633826389163e+00 + -7.9677988442339598e-01 1.5015084502159159e+00 -9.6593579681894770e-01 + -6.4771397818505805e-01 1.3177414874284019e+00 -9.5114023735849762e-01 + -3.9924854282831868e-01 9.6304423680071305e-01 -1.0229011754367252e+00 + -1.2044247629436398e-01 5.0213182770893150e-01 -1.2864827850514355e+00 + 8.1553168144789662e-02 1.1915425774363131e-01 -1.8415563905576890e+00 + 1.2875903537784611e-01 2.8547780972980608e-03 -2.4603020104754849e+00 + 1.2043906309706220e-01 -4.1961659839021559e-02 -2.7595297751555492e+00 + id 11278 + loc 7.7397656440734863e-01 1.9632850587368011e-01 410 + blend 0.0000000000000000e+00 + interp 5.1669072909456326e-01:3.9065376607778340e-01:1.4845942270228907e-01:4.4281676855654811e-01:9.5203689779007827e-01:5.1668556218727235e-01:1.2671238592500202e+00:3.4396314299858499e-01:1.8891836652701013e+00:4.0139613466626273e-01:2.5619782019590165e+00:3.7154647363767385e-01:3.0104436195207636e+00:4.1759984292855562e-01:3.8919265949167459e+00 + CVs 20 + -3.3113690338315904e-01 1.7034469788831699e-01 1.6795423310828142e-01 + -6.3744032946591378e-01 3.2113196725839194e-01 3.2503814306164036e-01 + -9.4822676796516470e-01 4.7281134618004972e-01 4.6361951989317585e-01 + -1.2639072298100189e+00 6.1759614859981049e-01 5.7840787629415213e-01 + -1.5728515769837768e+00 7.3572310469564961e-01 6.7922761000513088e-01 + -1.8706767318113782e+00 8.1563681303886371e-01 7.8658320307185747e-01 + -2.1436115785907557e+00 8.5514119382301090e-01 9.1718959123844201e-01 + -2.3689944314649729e+00 8.6049149522304202e-01 1.0684216497887431e+00 + -2.5393060532252760e+00 8.4937451711869971e-01 1.2223931091494094e+00 + -2.6656149698617329e+00 8.4809677564105668e-01 1.3669387909095816e+00 + -2.7822744820550138e+00 8.3595637776011589e-01 1.5109051115271208e+00 + -2.9332431856505261e+00 6.9543419755691138e-01 1.6405187071710448e+00 + -3.1260812683164056e+00 3.4916203482131847e-01 1.7320466947839783e+00 + -3.3505881876011374e+00 -1.7321292073967398e-01 1.8393829894940117e+00 + -3.5941909327833854e+00 -7.8356205146179003e-01 2.0568387200243978e+00 + -3.8337033806414214e+00 -1.3552618963007537e+00 2.4432338088616214e+00 + -4.0605594760001544e+00 -1.8097458437350729e+00 2.9854299492550851e+00 + -4.3193205145132492e+00 -2.1790045916630127e+00 3.6225997785044242e+00 + -4.6690501208594268e+00 -2.5050853811818659e+00 4.2629424739078106e+00 + id 11279 + loc 6.3450592756271362e-01 7.0521062612533569e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1199256573531404e-01:4.8490679204173825e-01:2.0367035841185155e-01:3.5324612869455663e-01:8.6187132398314004e-01:4.7555311740049699e-01:1.1530229252326560e+00:3.3140467557543640e-01:1.9423869933532656e+00:5.1004990169866937e-01:2.3798575049055906e+00:3.2437918956351602e-01:3.0104999290846810e+00:5.1198744580965672e-01:3.4558071501570558e+00:4.9970336893673539e-01:3.9793685673856185e+00 + CVs 20 + 3.9879645356399984e-02 3.9650540724989836e-01 -1.7407558711792376e-01 + 1.1783865920526954e-01 7.8383894409079424e-01 -3.7100133544946240e-01 + 2.0352835461636365e-01 1.1596249434115842e+00 -6.0393785415424239e-01 + 2.8030863726267852e-01 1.5085695142080180e+00 -8.8769222993908581e-01 + 3.4705843206296816e-01 1.8101271523359519e+00 -1.2285501869190685e+00 + 4.2001563233036115e-01 2.0486399366786401e+00 -1.6164620117761164e+00 + 5.2395139608827390e-01 2.2140993929675084e+00 -2.0298456399136118e+00 + 6.7306630563595737e-01 2.2990648214463505e+00 -2.4419250064818407e+00 + 8.6406943231540512e-01 2.2954075460641263e+00 -2.8255604478630434e+00 + 1.0719761372299219e+00 2.1946722296472663e+00 -3.1544569927014763e+00 + 1.2426470429566958e+00 1.9986641975888335e+00 -3.4019308727360937e+00 + 1.2997726130580818e+00 1.7439607875641752e+00 -3.5359297827621630e+00 + 1.2253975011412468e+00 1.5212561499089194e+00 -3.5507714516189033e+00 + 1.1082064749067697e+00 1.3506341936269470e+00 -3.5148110892113782e+00 + 9.8538419454076531e-01 1.1917363155087686e+00 -3.4665336747041562e+00 + 8.7335044570237352e-01 1.1230569259128536e+00 -3.4015451663874208e+00 + 9.0307133361298852e-01 1.2418939660957067e+00 -3.3365902520571820e+00 + 1.0215092340648422e+00 1.3025134772147349e+00 -3.2781570398375734e+00 + 7.2145031882311095e-01 1.2834681886407611e+00 -3.1970846632024643e+00 + id 11280 + loc 5.1258808374404907e-01 7.5637429952621460e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9756838495028574e-01:3.1478906443189958e-01:1.6707749626438728e-02:3.9324201040410789e-01:7.5364603761145177e-01:3.9756440926643627e-01:1.1976422430566636e+00:3.3594123020758776e-01:1.9251523610467969e+00:3.9680160728717273e-01:2.7726686643103213e+00:3.4298200178131100e-01:3.4817741699142148e+00 + CVs 20 + -2.7022130866426158e-01 4.8272593445360690e-01 1.7114289352803069e-01 + -4.6474025262028407e-01 9.1185216559429738e-01 3.2691173712501553e-01 + -5.9905327049371437e-01 1.3113499010180363e+00 4.9421385629034953e-01 + -7.3339119644625927e-01 1.6932557471424801e+00 6.2262832964114867e-01 + -9.0851135883319334e-01 2.0416416927054488e+00 6.4953166531328910e-01 + -1.1210692852642330e+00 2.3351041268189388e+00 5.6495448412418137e-01 + -1.3316913265755708e+00 2.5539378235371317e+00 3.8825363112862599e-01 + -1.4674120795769745e+00 2.6885202299896038e+00 1.6245304381040238e-01 + -1.4826869393744979e+00 2.7643016071276083e+00 -3.9344098110410286e-02 + -1.4323116517586112e+00 2.8206053152965005e+00 -1.9597022332451375e-01 + -1.3632803580514428e+00 2.8493208941332631e+00 -3.7759428138116258e-01 + -1.2473946048803506e+00 2.8160271110449706e+00 -6.1347542144269762e-01 + -1.0541099980562563e+00 2.6937472363101889e+00 -8.7537773633104066e-01 + -8.2191645880510233e-01 2.5140209197405285e+00 -1.0939563892390587e+00 + -6.4047959607487726e-01 2.3625452201408845e+00 -1.2337934092981093e+00 + -5.5491605743118155e-01 2.3056588015222674e+00 -1.2686718932758050e+00 + -5.5225690679390937e-01 2.3555136595284263e+00 -1.0793475053612895e+00 + -4.9099069761021319e-01 2.2997240720175163e+00 -5.0152884169047907e-01 + -5.3966439223768092e-01 2.3414849993315703e+00 -6.2831027997997579e-01 + id 11281 + loc 6.1936122365295887e-03 7.9560768604278564e-01 410 + blend 0.0000000000000000e+00 + interp 4.5782818941649633e-01:4.5782361113460218e-01:2.3862113697146170e-01:2.6924615123154244e-01:1.1274227563471622e+00:3.3559131587819568e-01:2.2849987810716987e+00:3.9261299580781733e-01:3.0642189189131996e+00:2.7725364723190454e-01:3.6211446393032012e+00:3.9875388962551550e-01:3.9902919741720435e+00 + CVs 20 + 3.4498710896352247e-01 1.6405353742312573e-01 -6.0152203244412311e-02 + 5.9982196833383561e-01 2.6446747800888593e-01 -1.4436847254459265e-01 + 8.3020900421603794e-01 3.4050568355920718e-01 -2.3998830656926479e-01 + 1.0699033166049501e+00 4.1232298834228315e-01 -3.4019741313653162e-01 + 1.3207052180336278e+00 4.7671307338506053e-01 -4.4379585222866297e-01 + 1.5849373540333507e+00 5.3084846515043749e-01 -5.4780618835618400e-01 + 1.8634628232404484e+00 5.7317316907658322e-01 -6.4529610615715449e-01 + 2.1529981621361047e+00 6.0242646105965147e-01 -7.2845912578672334e-01 + 2.4486660380903320e+00 6.1688148507553686e-01 -7.9320869838784791e-01 + 2.7432764305538235e+00 6.1598729433243737e-01 -8.3759290512152051e-01 + 3.0082854162276975e+00 6.0829951991085407e-01 -8.5673345632647346e-01 + 3.1803389398001549e+00 6.1917164727450857e-01 -8.4394664944369269e-01 + 3.2244522503037940e+00 6.7466225283354930e-01 -7.8654807112033098e-01 + 3.2081296699491939e+00 7.5825858926761247e-01 -6.8135826815715672e-01 + 3.2042040077910832e+00 8.3172530533709421e-01 -5.5539815406284065e-01 + 3.2130521264340048e+00 8.9277759411334567e-01 -4.1015923051066472e-01 + 3.2231818779347128e+00 9.4950929456240496e-01 -2.2427167459093822e-01 + 3.2411461812865792e+00 9.8903087127188238e-01 -1.1072018684122220e-02 + 3.2439750177120485e+00 8.8516577293267429e-01 -6.3185700064389949e-02 + id 11282 + loc 4.3267992138862610e-01 8.4021168947219849e-01 410 + blend 0.0000000000000000e+00 + interp 4.5754890457718045e-01:3.5529153930448720e-01:2.6541917384551095e-01:3.1561168551235541e-01:1.0131026198293296e+00:4.5754432908813469e-01:1.6617403310309049e+00:3.3379518376121187e-01:2.2365607246367714e+00:3.5294266169275190e-01:3.0117501367071791e+00:3.9143407808753655e-01:3.8360689467685036e+00 + CVs 20 + 3.3618718512917256e-01 1.8255398392613351e-01 -1.2080410396369393e-01 + 5.8190135240575291e-01 3.1847457928060968e-01 -2.2932136879875159e-01 + 8.0184268098241862e-01 4.3260020607798133e-01 -3.4018198725618343e-01 + 1.0332884223307834e+00 5.4205255072420555e-01 -4.5912632124295716e-01 + 1.2773600730957555e+00 6.4599259099288442e-01 -5.8715097421031270e-01 + 1.5337292421466759e+00 7.4284495447997734e-01 -7.2543708261717388e-01 + 1.8042398946396272e+00 8.3200342336924404e-01 -8.7069601589375634e-01 + 2.0933240782736320e+00 9.1325636367769802e-01 -1.0137501959558919e+00 + 2.4041657980806113e+00 9.8480391253783250e-01 -1.1423083990903959e+00 + 2.7355439930732586e+00 1.0441063445061336e+00 -1.2429809787666473e+00 + 3.0850361443991257e+00 1.0925813315380553e+00 -1.3000483619837337e+00 + 3.4548198932965564e+00 1.1318578445179137e+00 -1.2998259654332731e+00 + 3.8492023164481282e+00 1.1454834796822415e+00 -1.2553396675868145e+00 + 4.2635750735803333e+00 1.1014361457289934e+00 -1.2159235233677999e+00 + 4.6811834796407297e+00 9.8379140085551264e-01 -1.2251944418568514e+00 + 5.0787986016218536e+00 7.9985087050460191e-01 -1.2987985954885770e+00 + 5.4291915713821091e+00 5.7098791683972339e-01 -1.4391096727011417e+00 + 5.7136832381694855e+00 3.2478269602831888e-01 -1.6387796960297285e+00 + 5.9703591817590969e+00 9.5246198888078837e-02 -1.8284205210499040e+00 + id 11283 + loc 6.7631584405899048e-01 9.5125325024127960e-02 1070 + blend 0.0000000000000000e+00 + interp 4.0446620885016793e-01:4.0446216418807945e-01:3.7855624589658710e-01:2.7343799107682804e-01:9.8236632488013431e-01:3.4970190850228006e-01:1.9766803188776212e+00:3.3975636670369264e-01:2.7041557999964079e+00:3.1473573403506094e-01:3.3500196025074378e+00:3.8461156584635203e-01:3.9944645977898041e+00 + CVs 20 + 2.2374348862532628e-01 3.4230601015218715e-01 -1.0932225229579362e-01 + 3.9329413912710620e-01 6.1004817151224344e-01 -1.3316321156974315e-01 + 5.3038186342524196e-01 8.3326634334286764e-01 -1.1500616097935462e-01 + 6.3868805308990573e-01 1.0196617791851943e+00 -8.7195948190910477e-02 + 7.2594009203412901e-01 1.1753606682671536e+00 -2.7727421426902543e-02 + 8.0614874308615092e-01 1.3428337214636921e+00 9.6222257622407659e-02 + 8.8549555057918594e-01 1.5909698556809264e+00 2.4107478623678924e-01 + 9.5962856535363206e-01 1.9320676342894703e+00 2.9714688628925057e-01 + 1.0350621077456899e+00 2.3278045811237602e+00 2.1197714622835062e-01 + 1.1378803766023939e+00 2.7433827757735569e+00 -2.1343874564482723e-02 + 1.3096038176146771e+00 3.1132576142222996e+00 -3.9097126603032373e-01 + 1.5667686488986490e+00 3.3306170881983364e+00 -8.2267785924549286e-01 + 1.8718514362664669e+00 3.3612707261622279e+00 -1.2235322625286209e+00 + 2.1734329873858722e+00 3.2446515413418258e+00 -1.5561752447071087e+00 + 2.4334376234568995e+00 3.0273749528013698e+00 -1.8110248962867825e+00 + 2.6597260753228040e+00 2.7629529124568402e+00 -1.9990891456027695e+00 + 2.8983683872036146e+00 2.4953316505240108e+00 -2.1503618586826265e+00 + 3.1642163912694272e+00 2.2187907550734347e+00 -2.2771532788222606e+00 + 3.1298844095692013e+00 2.0161984936422712e+00 -2.1112452741013987e+00 + id 11284 + loc 1.4282165095210075e-02 5.7948648929595947e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5113208919273867e-01:3.3381864829388619e-01:1.4655257368196206e-01:2.7831512159863986e-01:8.8015672749123119e-01:3.9185078250583361e-01:1.7064908961075105e+00:3.9088399325325296e-01:2.2617689155788296e+00:4.5112757787184676e-01:2.9250201197095569e+00:3.1490286254660643e-01:3.8456542657442707e+00 + CVs 20 + 1.5009928327669511e-01 2.9376160924126932e-01 -3.2665469432586552e-02 + 2.7300862621535626e-01 5.7903677753940630e-01 -1.0894690411511077e-01 + 3.9124561580705186e-01 8.4136790750712487e-01 -2.1365181395445579e-01 + 5.1093404734763370e-01 1.0712732647925329e+00 -3.3695377657257986e-01 + 6.2639825882619538e-01 1.2668070394814310e+00 -4.7513618806722169e-01 + 7.3425313194284059e-01 1.4307096634968333e+00 -6.2711734850984080e-01 + 8.3663632400226962e-01 1.5664745899842138e+00 -7.9877604142397129e-01 + 9.3927047428627208e-01 1.6729277857916025e+00 -9.9940781886558661e-01 + 1.0469596886883483e+00 1.7432573825714166e+00 -1.2324816304505282e+00 + 1.1600824648398511e+00 1.7683971391485742e+00 -1.4899528071683894e+00 + 1.2704374072138256e+00 1.7477079022978510e+00 -1.7564738708190120e+00 + 1.3650490310035899e+00 1.6953930778188375e+00 -2.0166742153779000e+00 + 1.4338780404260287e+00 1.6391978250750960e+00 -2.2498359626154305e+00 + 1.4784321639273179e+00 1.6208006814109188e+00 -2.4220490051344568e+00 + 1.5376380728830221e+00 1.7030630407887695e+00 -2.4817385872303195e+00 + 1.6986610582130770e+00 1.8896746422244202e+00 -2.3802030016668416e+00 + 1.9844533673194427e+00 2.0304555453181314e+00 -2.1137992754766630e+00 + 2.2137154471015257e+00 2.0053330361621224e+00 -1.8183724965010049e+00 + 1.8541921272430999e+00 2.1123117005929317e+00 -1.9923408339365862e+00 + id 11285 + loc 7.3946279287338257e-01 4.9332624673843384e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5683737186235163e-01:4.5683280348863303e-01:4.9906043369236330e-01:3.3117541671375339e-01:1.0007665886566368e+00:3.7399300678665193e-01:2.0000761509881588e+00:3.6123262346580504e-01:2.8658704255901899e+00:4.4021417766850701e-01:3.4576505730357918e+00:2.7500849698105062e-01:3.9774992680083692e+00 + CVs 20 + -8.1876473094165542e-02 2.0143295626259919e-01 2.3619958760388676e-01 + -1.9525187718625084e-01 3.7176086388801777e-01 4.7451123123161865e-01 + -3.3847193231285866e-01 5.0721002955893679e-01 7.0645206501838798e-01 + -5.0464252441300061e-01 6.0333663206197197e-01 9.2196560207274303e-01 + -6.8457624676186757e-01 6.5830475700032842e-01 1.1110586717603121e+00 + -8.6891411524721363e-01 6.7531091444687408e-01 1.2658143921308038e+00 + -1.0529660632251272e+00 6.6304162080806817e-01 1.3805481196803200e+00 + -1.2394486512055494e+00 6.3429946033994444e-01 1.4540637618127874e+00 + -1.4324758327769460e+00 6.0164439708981177e-01 1.4982382228855271e+00 + -1.6282928037934241e+00 5.7329821620602772e-01 1.5319756595068414e+00 + -1.8209595124033220e+00 5.5430914089295746e-01 1.5673473689293640e+00 + -2.0083442087951999e+00 5.4657771364124341e-01 1.6114757127563053e+00 + -2.1919582174691947e+00 5.5386264359619131e-01 1.6656512592561286e+00 + -2.3806518344292060e+00 5.8491764808054891e-01 1.7309993244998600e+00 + -2.5837525018820271e+00 6.3972389285529419e-01 1.8228144720627970e+00 + -2.8013166636860176e+00 6.8377007469521867e-01 1.9672938069407153e+00 + -3.0091314318307569e+00 6.5607403769669881e-01 2.1671408130211876e+00 + -3.1505924633978166e+00 5.1838264257960631e-01 2.3673333173124833e+00 + -3.0614311320482366e+00 2.3074406826419730e-01 2.3505354683039230e+00 + id 11286 + loc 8.1472116708755493e-01 9.4590193033218384e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0370086506839870e-01:3.0836052413171505e-01:9.9691641829775346e-01:3.7277155762307856e-01:1.9000357233354457e+00:4.0369682805974805e-01:2.3264855437572627e+00:2.8809093786225526e-01:3.1422591483166720e+00:3.0438084623197820e-01:3.9694442405207213e+00 + CVs 20 + 1.6843720809268750e-01 3.5207102390658673e-01 -2.7383390603495739e-01 + 3.5997498472548528e-01 6.9522771848297671e-01 -5.3427241566864259e-01 + 5.5917639932015006e-01 1.0272422707405215e+00 -8.0748448525416672e-01 + 7.5286245402662555e-01 1.3437111195109446e+00 -1.1113830040982540e+00 + 9.3620609997244009e-01 1.6323759908140945e+00 -1.4506309260087487e+00 + 1.1232205618829310e+00 1.8794311346540007e+00 -1.8148991002858164e+00 + 1.3379006528465403e+00 2.0829383833306530e+00 -2.1904706051638474e+00 + 1.5967833891593410e+00 2.2486115197078220e+00 -2.5659118927418243e+00 + 1.9064965634512374e+00 2.3754843489564603e+00 -2.9334105188716686e+00 + 2.2698976810919174e+00 2.4471405458040838e+00 -3.2987684187175654e+00 + 2.6848401046642847e+00 2.4170925558670593e+00 -3.6869302254003049e+00 + 3.1212127726302255e+00 2.1844371400767697e+00 -4.1258285065811195e+00 + 3.4677651167382133e+00 1.6565913509721049e+00 -4.5761076839753665e+00 + 3.6080876207935479e+00 9.3480983256981931e-01 -4.9375253968557722e+00 + 3.5302432766896978e+00 1.6386228818939164e-01 -5.1958051559101177e+00 + 3.1213185943537516e+00 -6.2733887158517510e-01 -5.3878684100231249e+00 + 2.1339080149844158e+00 -1.1772186041524448e+00 -5.5445626514017574e+00 + 1.1462771110309731e+00 -1.1056498100058572e+00 -5.6930566348983893e+00 + 7.7654235899971913e-01 -1.0734178766782203e+00 -5.8086576577124545e+00 + id 11287 + loc 4.1206067800521851e-01 3.4933090209960938e-01 410 + blend 0.0000000000000000e+00 + interp 4.0904290226544543e-01:4.0903881183642277e-01:1.0665507158406162e-01:3.8444984471391919e-01:8.8213165311906216e-01:3.6621388703647151e-01:1.1962386944861230e+00:3.1892247691991749e-01:1.9971614528092876e+00:3.4740892549006924e-01:2.6863862710207251e+00:2.9657759218598068e-01:3.1970505193368832e+00 + CVs 20 + -1.5482040561050339e-01 1.1503013514215116e-01 -2.8618063589884241e-01 + -2.7654591744013013e-01 2.1642834204987701e-01 -5.4337543907158126e-01 + -3.8286060505818426e-01 3.0878521733456171e-01 -7.9255377592842546e-01 + -4.8084127991076120e-01 3.9581820386255745e-01 -1.0426951864127156e+00 + -5.6906072178418632e-01 4.7771638273047895e-01 -1.2913887370914172e+00 + -6.4303032987863462e-01 5.5416337057581477e-01 -1.5338543516158381e+00 + -6.9452768942534693e-01 6.2449688620845745e-01 -1.7634707954290041e+00 + -7.1542172202842502e-01 6.8746333816831917e-01 -1.9723919519043005e+00 + -7.0154800089632308e-01 7.4140251962552128e-01 -2.1516350078803792e+00 + -6.5519862426049369e-01 7.8520770442764265e-01 -2.2928721870080593e+00 + -5.8572708700960274e-01 8.2004206176685368e-01 -2.3998169883361364e+00 + -4.9956782896009105e-01 8.5064292814240938e-01 -2.5067464021486714e+00 + -3.9387670799667646e-01 8.7604011071001242e-01 -2.6611522878989957e+00 + -2.7999710913532050e-01 8.8061444894851126e-01 -2.8771018052329964e+00 + -1.8033105835023688e-01 8.5029605463170133e-01 -3.1373229115366925e+00 + -1.1087933059187061e-01 7.7810846297340053e-01 -3.4312861988146479e+00 + -8.7278141399172782e-02 6.5986769112545818e-01 -3.7509592313505089e+00 + -1.1865227651320087e-01 5.0344465806975114e-01 -4.0712674604418391e+00 + -1.2751984829094110e-01 3.9479653497494693e-01 -4.2722395028321856e+00 + id 11288 + loc 1.1579153686761856e-01 9.1325068473815918e-01 1070 + blend 0.0000000000000000e+00 + interp 4.2366942941427255e-01:2.9153018073329329e-01:8.6901255469766236e-02:4.0676477011100781e-01:1.9997281484999645e+00:4.2366519271997843e-01:2.4113864864615131e+00:2.9537760109964972e-01:2.9638450799591869e+00:3.3835165797797506e-01:3.4472750833009131e+00 + CVs 20 + -2.6743010026169012e-01 3.6620692302482016e-01 3.6722231757753554e-01 + -4.7249748750036658e-01 6.2055906271316219e-01 6.5083395536034527e-01 + -6.2116807624718551e-01 8.2262376895177447e-01 9.3310138303270052e-01 + -7.3672259488268632e-01 1.0090167673408934e+00 1.2344524058386563e+00 + -8.5780631248255712e-01 1.1966815270728519e+00 1.5171797631364337e+00 + -1.0168262422308341e+00 1.3930593092859673e+00 1.7452766002882367e+00 + -1.2257813712427699e+00 1.5877608202014446e+00 1.9071923369236090e+00 + -1.5107324098904626e+00 1.7711170481182812e+00 2.0051028791773051e+00 + -1.8987111973202393e+00 1.9296143613992554e+00 1.9721972499198266e+00 + -2.2229709145698013e+00 2.0053731578193643e+00 1.7403577416954583e+00 + -2.3528141156507054e+00 2.0086778641790253e+00 1.4425777066978733e+00 + -2.3408960594678194e+00 1.9825784025158717e+00 1.1438318995114582e+00 + -2.2186378576777694e+00 1.9306429131494831e+00 8.8908619747372364e-01 + -2.0107200077066234e+00 1.8478912068196003e+00 7.8241663562892594e-01 + -1.7401013690267702e+00 1.7283030918911437e+00 8.7389769513346172e-01 + -1.4023037296795853e+00 1.5111702248402752e+00 1.0957551657621343e+00 + -9.7642167900363686e-01 1.0580641380495706e+00 1.3203549696469259e+00 + -4.4574520765029524e-01 2.9643375201055050e-01 1.1647885479766658e+00 + -3.7316981852280251e-01 2.9797897520979832e-01 1.0039170728694695e+00 + id 11289 + loc 2.4736027419567108e-01 6.7103427648544312e-01 410 + blend 0.0000000000000000e+00 + interp 3.7161748510510095e-01:2.8417687915079082e-01:7.7421799636815836e-02:3.2026828331929025e-01:9.9829699174968745e-01:2.9117735744304751e-01:1.9740118365257420e+00:3.3745558119819868e-01:2.9436791264128477e+00:3.7161376893024994e-01:3.6389620547197166e+00 + CVs 20 + 3.4804542057138055e-01 1.3861759341879681e-01 -1.3300408370159955e-01 + 6.4161468164079916e-01 2.4764063457135740e-01 -2.5507517660239792e-01 + 9.3212489443194180e-01 3.5067646291846083e-01 -3.6214640037166801e-01 + 1.2429692927951304e+00 4.5787689887246380e-01 -4.5168254107446154e-01 + 1.5703651015392999e+00 5.6419962403508039e-01 -5.1939800271760639e-01 + 1.9077162899125035e+00 6.6465498084590036e-01 -5.5658848843983266e-01 + 2.2457110070155362e+00 7.5479328511243815e-01 -5.5164651595986824e-01 + 2.5735738084731890e+00 8.3057088026875636e-01 -4.9660250342700563e-01 + 2.8795385309670687e+00 8.8983514402454245e-01 -3.8982559950993900e-01 + 3.1514375094514131e+00 9.3381702641939413e-01 -2.3541636905208174e-01 + 3.3921298151461632e+00 9.6108789560873609e-01 -4.7624927949011187e-02 + 3.6476636104328577e+00 9.5416393550766543e-01 1.4564232041012914e-01 + 3.9765061811234852e+00 8.8008199441896262e-01 3.0478052626353902e-01 + 4.3634109252540538e+00 7.2436827578024410e-01 3.9103405582776218e-01 + 4.7470961739753035e+00 5.0799910125157899e-01 4.0111311864702265e-01 + 5.0989288421517660e+00 2.5116432635803676e-01 3.4204923323292513e-01 + 5.4082977062138635e+00 -3.0980128642469129e-02 2.0855033217364793e-01 + 5.6623928854405152e+00 -3.1271846551547622e-01 1.1715032095797384e-02 + 5.8630277446482024e+00 -4.9335854941274615e-01 -7.6670175935990237e-02 + id 11290 + loc 1.8031007051467896e-01 2.2370871901512146e-01 1077 + blend 0.0000000000000000e+00 + interp 3.8453508600336650e-01:3.1294112139320718e-01:3.0727560454120917e-01:3.1714181265596703e-01:9.8863684762099202e-01:3.8453124065250649e-01:1.2963472691578883e+00:2.8079357648953185e-01:1.9896336953341884e+00:2.8990592057323150e-01:2.9870521598247652e+00:3.2749159388305887e-01:3.9115496637043732e+00 + CVs 20 + -1.3476247951222556e-01 2.3978305420857510e-01 5.5548051700448929e-02 + -2.8159310786958325e-01 4.7261854112061941e-01 1.0675126280819741e-01 + -4.3661861317201500e-01 6.9936982850960749e-01 1.4651128806552827e-01 + -5.9425561389399262e-01 9.1750220181585651e-01 1.6975680108965302e-01 + -7.5620675322325936e-01 1.1261441999859731e+00 1.7339226749562592e-01 + -9.2601140846499752e-01 1.3246926185123886e+00 1.5372655588153433e-01 + -1.1096102975546296e+00 1.5094469018287175e+00 1.0473404344562648e-01 + -1.3110606883328970e+00 1.6707968301874307e+00 1.8900538765520836e-02 + -1.5226396601450463e+00 1.7967289827801616e+00 -1.0822375497206665e-01 + -1.7225076829280810e+00 1.8789745098490345e+00 -2.7562182317526129e-01 + -1.8903872231959773e+00 1.9189749419816220e+00 -4.7669171684013001e-01 + -2.0235278485222885e+00 1.9272932060611487e+00 -7.0335162149441277e-01 + -2.1282894256417930e+00 1.9156335548118917e+00 -9.5376446964741224e-01 + -2.2077834661298898e+00 1.8859786023322984e+00 -1.2372816090856276e+00 + -2.2651224049401666e+00 1.8207629833309604e+00 -1.5732963880694530e+00 + -2.3131168357934002e+00 1.6665117263433755e+00 -1.9490874476673203e+00 + -2.3518549074691144e+00 1.3594083988388821e+00 -2.2668700682802774e+00 + -2.3864990999307603e+00 9.1079153149115999e-01 -2.4260772540052042e+00 + -2.5608522454127156e+00 7.7686764282242871e-01 -2.2983320996335816e+00 + id 11291 + loc 2.7024719119071960e-01 1.4151073060929775e-02 1051 + blend 0.0000000000000000e+00 + interp 3.2128290921299524e-01:1.0113799330841389e-01:4.9010311043105692e-01:1.6235653536247760e-01:1.6529751811297331e+00:3.2127969638390314e-01:1.9980320188079914e+00:2.5750043404263928e-01:3.9309687303790111e+00 + CVs 20 + 1.2071650614254369e-01 4.5201118957422792e-01 -2.4029272704852095e-01 + 2.3400876675945334e-01 8.7584579239581362e-01 -3.7971392149705635e-01 + 3.3890995060587376e-01 1.3387304593036125e+00 -4.4085209396364894e-01 + 5.0588159752651252e-01 1.9063145008774760e+00 -4.6934750095128719e-01 + 8.8018250406745968e-01 2.5199596194257197e+00 -5.3739136921016617e-01 + 1.5224237054374954e+00 2.9900723171127854e+00 -7.0755793591838256e-01 + 2.3316818388875733e+00 3.1541167479378567e+00 -9.7675981549032254e-01 + 3.1350187192049179e+00 2.9794359824446399e+00 -1.2692120972859740e+00 + 3.8119516841089358e+00 2.5688711723529205e+00 -1.4832514520630040e+00 + 4.3193424526719051e+00 2.1239403515347299e+00 -1.5506476274700343e+00 + 4.6758598022881621e+00 1.8651611429570152e+00 -1.5003280628865938e+00 + 4.9116436391294425e+00 1.8538248236835528e+00 -1.4640056630430980e+00 + 5.0398321368433354e+00 1.9865428692016158e+00 -1.5504773807597350e+00 + 5.0948393135733703e+00 2.1357358819336740e+00 -1.7248140814061150e+00 + 5.2500708950223487e+00 2.2066653534039808e+00 -1.9377775728721667e+00 + 5.5959259561741579e+00 2.1772067123983598e+00 -2.2629103801595787e+00 + 6.1449594595369987e+00 1.9702665487401996e+00 -2.6906540770322183e+00 + 6.8219466805853575e+00 1.5086386403496843e+00 -2.9847729252140835e+00 + 7.0867765123370141e+00 1.2424840438979108e+00 -3.0893235395829683e+00 + id 11292 + loc 3.2963293790817261e-01 9.0552043914794922e-01 1070 + blend 0.0000000000000000e+00 + interp 5.3780020082156865e-01:3.6508388857282420e-01:7.6788568581444583e-01:3.0486318874097090e-01:1.1234002072156306e+00:4.8531767698767886e-01:1.5992083597645190e+00:5.3779482281956048e-01:2.0447601990428490e+00:3.9162491316665426e-01:2.6021656620057403e+00:4.7228715488216322e-01:3.2072076674295125e+00:3.8395357663479190e-01:3.8438357489510269e+00 + CVs 20 + -2.4620391821819648e-01 4.0341537507587599e-01 2.5502782063899126e-01 + -4.3909927809079996e-01 7.2634743851014250e-01 4.6612551013557246e-01 + -5.8073278622285351e-01 1.0038429352657032e+00 6.8633810226435377e-01 + -7.0305414205601102e-01 1.2575042959344707e+00 9.1107795111721035e-01 + -8.4152355746783525e-01 1.4905996697969706e+00 1.0977088487892617e+00 + -1.0171916696296304e+00 1.7038207811374624e+00 1.2203583856867954e+00 + -1.2268607517872336e+00 1.8878180184370192e+00 1.2728678801216369e+00 + -1.4559986462732861e+00 2.0322727300616941e+00 1.2615010837229623e+00 + -1.6967685395164711e+00 2.1350857131824155e+00 1.1816982871812129e+00 + -1.9101865104505404e+00 2.1871043282420719e+00 1.0065034586607793e+00 + -2.0301312596006689e+00 2.1837660136084445e+00 7.5969644357045385e-01 + -2.0535906128847299e+00 2.1401561607578938e+00 4.7800736880974748e-01 + -1.9874229156684147e+00 2.0607671244188612e+00 1.8464091192806498e-01 + -1.8446841640807838e+00 1.9502215532654112e+00 -4.1554129627359604e-02 + -1.6688142900755889e+00 1.8414472021701327e+00 -1.1629859381473739e-01 + -1.4803107650505911e+00 1.7423050568783041e+00 -2.4993822961877799e-02 + -1.2652182818957289e+00 1.5847839981973260e+00 2.0914533468454888e-01 + -9.6052851419552820e-01 1.1865326775800633e+00 5.4079753900882177e-01 + -9.0609100830714517e-01 1.1733748757809099e+00 4.1244194545060375e-01 + id 11293 + loc 2.3129728436470032e-01 9.5959740877151489e-01 1074 + blend 0.0000000000000000e+00 + interp 5.2941829604553736e-01:3.0052612555542052e-01:9.1381762787312659e-01:5.2941300186257689e-01:1.2860168020423675e+00:4.1725599084052339e-01:1.9804093633565243e+00:3.3346558674364535e-01:2.4804608222965263e+00:2.6661147581158140e-01:2.8824122850236433e+00:4.1592167631505156e-01:3.1980183170831249e+00:3.7945915120960172e-01:3.9881581491596774e+00 + CVs 20 + 1.2979171396199418e-01 3.8880875572563350e-01 -9.1466063951900892e-02 + 2.6341938257808423e-01 7.9741686796064992e-01 -2.0698027002729438e-01 + 4.2001720015532773e-01 1.2207098723061522e+00 -3.4742981496556130e-01 + 6.1691445197105954e-01 1.6506654362384616e+00 -5.1203740868563186e-01 + 8.6697915963293526e-01 2.0804871468471275e+00 -7.0407113541769750e-01 + 1.1663038412975486e+00 2.4993809080622662e+00 -9.5111638696673717e-01 + 1.4907107510352307e+00 2.8856357836592816e+00 -1.3136472389987215e+00 + 1.7981441788656685e+00 3.1706360857564300e+00 -1.8464946049214730e+00 + 2.0133093782891276e+00 3.2245403079161332e+00 -2.5020587441085507e+00 + 2.0910891388535120e+00 3.0045459129824690e+00 -3.1174263341957804e+00 + 2.0631193962430947e+00 2.5936745718494585e+00 -3.5799359416647998e+00 + 1.9900312229557682e+00 2.0992230858543452e+00 -3.8616028597143175e+00 + 1.9237666037712022e+00 1.5909756201655216e+00 -4.0030359013171655e+00 + 1.8919751811318071e+00 1.0995581602021443e+00 -4.0662138131547900e+00 + 1.9045616384028474e+00 6.0169650678417386e-01 -4.1306668780678200e+00 + 1.9899724538918171e+00 6.1599919551539442e-02 -4.3311467117124032e+00 + 2.1960545347012492e+00 -3.9275147309912295e-01 -4.8203106761679573e+00 + 2.4033229566288252e+00 -4.7764149304248577e-01 -5.4054110116481153e+00 + 2.4297667665118934e+00 -3.3085882343362383e-01 -5.7219685981536177e+00 + id 11294 + loc 3.5312560200691223e-01 4.3247827887535095e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4691229362115009e-01:3.0622832795483701e-01:7.4551437711427604e-01:3.0697052142859210e-01:1.1247587769622918e+00:4.4553524125097937e-01:1.6793803408353085e+00:3.7591434660704226e-01:2.1596448140326063e+00:3.6084441677216816e-01:3.0145991170577728e+00:3.0712426246778413e-01:3.5682208343994568e+00:4.4690782449821392e-01:3.9801584067751614e+00 + CVs 20 + -1.7604703063795243e-01 2.6070470782203764e-01 -5.2846146869415675e-02 + -3.4928512569113035e-01 5.4732133557953022e-01 -9.3469634642059513e-02 + -5.3415109962258389e-01 8.4338900395983141e-01 -1.4813231314323022e-01 + -7.4236517956596171e-01 1.1332272960712078e+00 -2.3526427898254382e-01 + -9.8203800585087420e-01 1.4044063932076571e+00 -3.6508121583311759e-01 + -1.2532215445568458e+00 1.6384946383289798e+00 -5.4878379603045557e-01 + -1.5432405140097509e+00 1.8138480301910653e+00 -7.9411612600993109e-01 + -1.8295080972840181e+00 1.9139354232344676e+00 -1.0986194601534667e+00 + -2.0875367713548036e+00 1.9334198048950397e+00 -1.4487952729930105e+00 + -2.3016602048908341e+00 1.8775645427399261e+00 -1.8256833675271307e+00 + -2.4722256383124050e+00 1.7562642464970957e+00 -2.2110139328495135e+00 + -2.6116096334399268e+00 1.5763903104270471e+00 -2.5892844115048410e+00 + -2.7376761736345823e+00 1.3358795425977452e+00 -2.9480902815351540e+00 + -2.8735557995146670e+00 1.0171761449828050e+00 -3.2751073664471724e+00 + -3.0503616061422760e+00 5.8881387365310633e-01 -3.5394641317985185e+00 + -3.2911969201249258e+00 5.3266888663327183e-02 -3.6670412686942711e+00 + -3.5935094682299495e+00 -5.0437794303222527e-01 -3.5966256340332197e+00 + -3.9385534867570793e+00 -9.5813606519873984e-01 -3.3687841792358215e+00 + -4.1128785448907790e+00 -1.1023682421089922e+00 -3.2796085478112786e+00 + id 11295 + loc 4.9788245558738708e-01 2.9297864437103271e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1471260511589675e-01:2.9526094379995477e-01:9.4195920899544494e-01:3.4605810995639896e-01:1.4302452123625240e+00:3.1721205879668984e-01:2.0641075716773720e+00:4.1470845798984562e-01:2.9960362763398045e+00:2.9124388459266648e-01:3.3488219394196537e+00:3.2457830147804062e-01:3.9999431358641964e+00 + CVs 20 + -2.2982804897015985e-01 2.1790466609158479e-01 1.9140584926273782e-02 + -4.4194410578253474e-01 4.3350834214583023e-01 5.1722122196950798e-02 + -6.4122114996806112e-01 6.3514269836101644e-01 8.6584134387785797e-02 + -8.3455492852061830e-01 8.2154809026004050e-01 1.1704556718409836e-01 + -1.0347217123333745e+00 9.9964153774336517e-01 1.4060898953976425e-01 + -1.2587892471857387e+00 1.1716111205397497e+00 1.5020247532644418e-01 + -1.5183309896058619e+00 1.3286674132343927e+00 1.3214524580010834e-01 + -1.8126756304761773e+00 1.4520292209744037e+00 7.0676192381114666e-02 + -2.1204992738835760e+00 1.5215203706214506e+00 -4.5329855336729841e-02 + -2.4045714729233580e+00 1.5251399565196668e+00 -2.1632066398161592e-01 + -2.6380765773322423e+00 1.4685346453064088e+00 -4.2832311476958690e-01 + -2.8160591269043684e+00 1.3688244436956776e+00 -6.6104121747576694e-01 + -2.9440175244373039e+00 1.2385673365812861e+00 -8.9537404129184206e-01 + -3.0182477046507779e+00 1.0797418552023403e+00 -1.1153114523403802e+00 + -3.0292573660427613e+00 9.0051602854785551e-01 -1.3071229464520244e+00 + -3.0065539280306353e+00 6.6110830479632399e-01 -1.4229591287757923e+00 + -3.0366448485688111e+00 3.3649990348453052e-01 -1.3594987035579793e+00 + -3.2153251925778994e+00 4.6839881217277890e-02 -1.0585522572128516e+00 + -3.5422622829455457e+00 -1.2871628089963172e-01 -5.7808866956589222e-01 + id 11296 + loc 2.5593778491020203e-01 2.2242730855941772e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4858318065660613e-01:2.7489896606830766e-01:4.2805994967278671e-01:3.9941185164497456e-01:9.8370200360083904e-01:3.8750474711157906e-01:1.3486707134730676e+00:4.1014537347450258e-01:2.0924561349505892e+00:3.9397019026026803e-01:2.7968378334199393e+00:4.4857869482479956e-01:3.2272441303384243e+00:3.6810210807819671e-01:3.9930256377321580e+00 + CVs 20 + -2.1196133344264056e-01 4.0174430236081587e-01 -9.5021733504204592e-02 + -4.1142318188154925e-01 8.1833033093847440e-01 -1.5426803629708113e-01 + -5.9546689788291884e-01 1.2456331822150735e+00 -1.6612522437213859e-01 + -7.4410034911546108e-01 1.6759392228264647e+00 -1.2478759981977244e-01 + -8.7061480751408404e-01 2.1092477388928215e+00 -3.8595212590662620e-02 + -1.0607359316462475e+00 2.5280311317229316e+00 6.6875293742765352e-02 + -1.4019465907732245e+00 2.8460259212952663e+00 1.4920729788791026e-01 + -1.8646822519431223e+00 2.9854996954895752e+00 1.7443680354956687e-01 + -2.3793898709198089e+00 2.9458239575045257e+00 1.1940665336298850e-01 + -2.8803600500544291e+00 2.7482092248725412e+00 -4.3989699514141223e-02 + -3.3043397950980991e+00 2.4358571956767081e+00 -3.3314094355172752e-01 + -3.6015793325175705e+00 2.0647079892931313e+00 -7.2465334319907759e-01 + -3.7618480001939201e+00 1.6821347987700750e+00 -1.1342339117195170e+00 + -3.8027651033766743e+00 1.2880386351857651e+00 -1.4933250210721998e+00 + -3.7181237777345872e+00 8.6732080822280821e-01 -1.7475134373145107e+00 + -3.5374580923773999e+00 4.6832431491623239e-01 -1.7871927182839769e+00 + -3.2377590370323621e+00 1.5368333325567049e-01 -1.5966927115670455e+00 + -2.9021159485408563e+00 1.3887408332991541e-01 -1.1486852606374498e+00 + -2.6075830843438421e+00 -6.0851484374443016e-02 -8.9524515920260850e-01 + id 11297 + loc 1.8432857096195221e-01 9.6837002784013748e-03 410 + blend 0.0000000000000000e+00 + interp 4.4923481829881184e-01:1.7006240298801323e-01:5.1219831506534685e-01:2.1402060374479104e-01:1.7201215750200718e+00:3.4054211721692457e-01:2.1459148550232889e+00:4.4923032595062889e-01:2.8049750646441978e+00:3.1086027959027157e-01:3.7249670216399675e+00 + CVs 20 + -7.3253522013953076e-02 1.1748774597886917e-01 -2.4847595229177988e-01 + -1.1323940739468473e-01 2.2808421672553625e-01 -4.8347166896692573e-01 + -1.3033082209022778e-01 3.2899890540808263e-01 -7.0467274275035963e-01 + -1.2856057931397880e-01 4.1923769275244394e-01 -9.0973031533956072e-01 + -1.0832360074446562e-01 4.9774727374865818e-01 -1.0944359416300777e+00 + -6.7260437649339477e-02 5.5947384150815438e-01 -1.2478116704430802e+00 + -6.5989845697543847e-03 5.9707746350440449e-01 -1.3548279947195612e+00 + 6.2877000410788697e-02 6.0785259403266734e-01 -1.4052518559334768e+00 + 1.3838405521972866e-01 6.2290593865766231e-01 -1.4435424742155494e+00 + 2.1657914298159087e-01 6.3709771171468410e-01 -1.4815527280401610e+00 + 1.9306375535685813e-01 5.6775371137103270e-01 -1.4027912153441962e+00 + 1.5027530005205103e-01 5.4609749003241115e-01 -1.2880833210386360e+00 + 2.8862126501495550e-01 6.1495963140082377e-01 -1.2374114237677107e+00 + 5.6170148569174216e-01 7.2976311486278889e-01 -1.2550040539920122e+00 + 8.8696164420739221e-01 8.5629462438059334e-01 -1.3596967321889857e+00 + 1.2143015440038387e+00 9.7483697308859341e-01 -1.5482392937320482e+00 + 1.5333710030401577e+00 1.0722092567220487e+00 -1.8326222953241733e+00 + 1.8169381510930627e+00 1.1349642406583129e+00 -2.1985010853976403e+00 + 1.9569269172103425e+00 1.2004136984396843e+00 -2.2638561610563444e+00 + id 11298 + loc 4.5271006226539612e-01 4.2247107625007629e-01 1070 + blend 0.0000000000000000e+00 + interp 4.1572494768780999e-01:3.4127262072720443e-01:9.7310666898146581e-01:4.1572079043833315e-01:1.8517870094376980e+00:3.9184657832074016e-01:2.5148939814745654e+00:3.4975629905060679e-01:3.3091121382738691e+00:3.4274539512835184e-01:3.9999851769811867e+00 + CVs 20 + 2.3257485479633866e-01 3.2742408926944783e-01 4.0871617288543544e-01 + 4.3018128404077205e-01 5.8277399580584777e-01 7.5813421493183275e-01 + 6.5558419223525333e-01 8.0354919995976526e-01 1.0756995985476543e+00 + 8.7591376611162208e-01 9.9290698059741422e-01 1.3958945955172635e+00 + 1.0139383103239354e+00 1.1326634287748729e+00 1.7407978943466573e+00 + 1.0431120338458713e+00 1.2023729665739979e+00 2.1020114259799811e+00 + 9.7898489300908409e-01 1.1898823345879330e+00 2.4468356936928264e+00 + 8.4085495994944093e-01 1.1002204814019312e+00 2.7373014818727777e+00 + 6.5731684490733122e-01 9.4700403929338361e-01 2.9242729515905683e+00 + 4.9628571588085513e-01 7.5518490529268734e-01 2.9860492912790080e+00 + 4.3351235419478262e-01 5.6367841846136246e-01 2.9693503299482202e+00 + 5.1519089481383484e-01 4.2909815459220230e-01 2.9546444391265552e+00 + 6.5823794609804909e-01 3.6115686236619371e-01 2.9827614494623216e+00 + 7.1741199694960434e-01 1.9672706483690061e-01 2.9455882782145721e+00 + 6.1690258845864721e-01 -1.8572287056049330e-01 2.7834826560692156e+00 + 2.0995815157220871e-01 -7.1378252090393279e-01 2.5935150989812699e+00 + -6.9874470137297540e-01 -1.1174423830275353e+00 2.5685367602558031e+00 + -1.7034168243700933e+00 -9.8994936732103178e-01 2.8187022204079089e+00 + -1.9931954584088922e+00 -9.3674146460925867e-01 2.8697838390841865e+00 + id 11299 + loc 4.6900436282157898e-01 1.0273956507444382e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7161415510986737e-01:2.5460612467830013e-01:1.0360519013236758e-02:3.3036357229165580e-01:8.3586211945591671e-01:3.0290606984427965e-01:1.3810034481521107e+00:4.5515199048974203e-01:1.8991734384455372e+00:4.7160943896831631e-01:2.3836654551595737e+00:2.7187330284002370e-01:2.8862374561962230e+00:3.0982356967644509e-01:3.4440378553962625e+00 + CVs 20 + -1.8835185877247965e-01 3.6281498168096427e-01 -1.3898021372926950e-02 + -3.8803968158626539e-01 7.0465405926782565e-01 -3.0393573433046217e-02 + -6.1326475828093630e-01 1.0113655546367299e+00 -5.8163353515043981e-02 + -8.6561090325931822e-01 1.2688053556500933e+00 -1.0412019275826817e-01 + -1.1372757523422554e+00 1.4658199096032214e+00 -1.7187875570319566e-01 + -1.4155449635752870e+00 1.5962724748485952e+00 -2.6069353709494475e-01 + -1.6859068586936334e+00 1.6616512535860415e+00 -3.6647866122419909e-01 + -1.9366972846481558e+00 1.6697775197013516e+00 -4.8407038132378816e-01 + -2.1587693824037384e+00 1.6320017338086061e+00 -6.0939181503909490e-01 + -2.3436552720550190e+00 1.5610850543849735e+00 -7.4111244458811854e-01 + -2.4853194107240451e+00 1.4718845141453745e+00 -8.7948136188214610e-01 + -2.5844273573973373e+00 1.3807839375194755e+00 -1.0275349994165131e+00 + -2.6481841864990758e+00 1.2965624999840810e+00 -1.1966725910117071e+00 + -2.6866408785982099e+00 1.2039111652975074e+00 -1.4091901816455763e+00 + -2.7154089306008795e+00 1.0572457818404051e+00 -1.6821649074724960e+00 + -2.7647487205121730e+00 7.7534433334359476e-01 -1.9665218203053221e+00 + -2.8684387772680320e+00 3.1083205448033557e-01 -2.1334714393054446e+00 + -3.0788330460224604e+00 -2.2891170370375180e-01 -2.0986239403755471e+00 + -3.3407277123079688e+00 -4.4214844956016131e-01 -1.9880958815502241e+00 + id 11300 + loc 4.3200597167015076e-01 6.2704086303710938e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3623978302171873e-01:2.6603181157783751e-01:6.3209564445964972e-01:2.8034269633797260e-01:1.2149990932793631e+00:4.3623542062388854e-01:2.1536214319620681e+00:2.7533249355283668e-01:2.6865222214545890e+00:3.5969251743085423e-01:3.0291906638081070e+00:4.2878522832333066e-01:3.9307144407035448e+00 + CVs 20 + 1.4106558457219870e-01 3.5335012536233079e-01 -3.3833022380421074e-01 + 3.2475889602415065e-01 6.9626437408808328e-01 -6.5547495414038615e-01 + 5.3781593819459195e-01 1.0314635700502075e+00 -9.5395084054496426e-01 + 7.7146927235850549e-01 1.3570697208122620e+00 -1.2290009089934339e+00 + 1.0122453542957071e+00 1.6611858940642830e+00 -1.4898539666476078e+00 + 1.2404371337646360e+00 1.9251954833189544e+00 -1.7701184119700670e+00 + 1.4371730558282492e+00 2.1248684325926783e+00 -2.1006631298983072e+00 + 1.5829108531745011e+00 2.2222737603001863e+00 -2.4804784399772437e+00 + 1.6655348848685554e+00 2.1932774675600539e+00 -2.8821279395463217e+00 + 1.6875906175631066e+00 2.0458563457888461e+00 -3.2815726638973923e+00 + 1.6622500725818266e+00 1.8017280551293775e+00 -3.6559711294086856e+00 + 1.6182635232762372e+00 1.4926476747931514e+00 -3.9954525323708001e+00 + 1.5895458198142947e+00 1.1525407183822665e+00 -4.3134708174046201e+00 + 1.5915456470351561e+00 8.2025759741003701e-01 -4.6184343834753356e+00 + 1.6196587599010230e+00 5.4250027216435093e-01 -4.9135124920758075e+00 + 1.6611577246220062e+00 3.4307309155800136e-01 -5.2020312670062543e+00 + 1.7111981827964662e+00 2.2686156793944542e-01 -5.4979672950359078e+00 + 1.7699598690928948e+00 2.3692419721800628e-01 -5.8436490382535391e+00 + 1.8121436244632603e+00 4.0424254155853639e-01 -6.1954318627634937e+00 + id 11301 + loc 8.7139332294464111e-01 5.6852984428405762e-01 1070 + blend 0.0000000000000000e+00 + interp 4.2999215698660620e-01:3.1533062769536829e-01:9.2780946958708532e-02:3.2780863412470762e-01:1.0267175613235220e+00:3.5621575420136309e-01:1.9582358813362137e+00:3.0917760786594695e-01:2.5461085194062614e+00:3.9133856158560276e-01:2.9967274698037998e+00:4.2998785706503634e-01:3.3742085252299097e+00 + CVs 20 + -3.4317607070252676e-01 3.0343345673940464e-01 4.8624831319433598e-02 + -6.0850236390660672e-01 6.0398425690144353e-01 9.9427918287011363e-02 + -8.2387064234252316e-01 9.1804539175474764e-01 1.6857160297771384e-01 + -1.0274605593576585e+00 1.2551946096607285e+00 2.3239587167170506e-01 + -1.2593602806420006e+00 1.6069821319493705e+00 2.4068564281441451e-01 + -1.5431989563713977e+00 1.9441378001422644e+00 1.6149377244023322e-01 + -1.8755728876532682e+00 2.2237940473598674e+00 -1.6095809946608863e-02 + -2.2199440892432203e+00 2.4022723291633685e+00 -3.0128431047742632e-01 + -2.5073340261468662e+00 2.4501640620925325e+00 -6.9280924515804521e-01 + -2.6750966342130056e+00 2.3722185902536408e+00 -1.1437145861533500e+00 + -2.7176979772405860e+00 2.1947875702613060e+00 -1.6016859954496694e+00 + -2.6419812569917376e+00 1.9143704304531837e+00 -2.0427112170352184e+00 + -2.4656541983462175e+00 1.5582936074392593e+00 -2.4062775380887018e+00 + -2.3066134309870110e+00 1.2798640734377267e+00 -2.6423617607141101e+00 + -2.2855264427366642e+00 1.2207691089518866e+00 -2.7628028107886160e+00 + -2.3951498714180324e+00 1.3892475027328532e+00 -2.6890448212894902e+00 + -2.5267743685916195e+00 1.6379882441939406e+00 -2.2248031274168714e+00 + -2.5138039433367307e+00 1.6084759617429072e+00 -1.6395301285012061e+00 + -2.5580374162596744e+00 1.6327819756199085e+00 -1.8470985717719821e+00 + id 11302 + loc 2.5529208779335022e-01 4.4461563229560852e-01 410 + blend 0.0000000000000000e+00 + interp 3.6315111098878960e-01:3.1039962185531900e-01:1.7448057575863984e-05:3.6314747947767972e-01:7.2061862394686116e-01:3.2183227072267923e-01:1.1369048788205796e+00:2.8938929666170926e-01:2.0113320705743774e+00:3.4219033213984629e-01:2.7734471980496318e+00:3.1596880843769437e-01:3.1961796465371153e+00 + CVs 20 + -1.5496269059178602e-01 1.2843489060681806e-01 -2.3277816970067214e-01 + -2.9770340913797594e-01 2.3494992279806870e-01 -4.3286504446095886e-01 + -4.3227373153302584e-01 3.3543754891262695e-01 -6.3503764242337812e-01 + -5.5775259334719018e-01 4.3756739034348657e-01 -8.5465377226754269e-01 + -6.7326718184480616e-01 5.4006511699081328e-01 -1.0912854879703540e+00 + -7.7725662552345132e-01 6.4108412791564084e-01 -1.3449491494252510e+00 + -8.6151578968737119e-01 7.3900327437926072e-01 -1.6152199504587417e+00 + -9.1307363204768899e-01 8.3146922018212788e-01 -1.8990734189796217e+00 + -9.1997959629810655e-01 9.1508873293136639e-01 -2.1899291213070611e+00 + -8.7476079953191954e-01 9.8703327040120326e-01 -2.4772966809918371e+00 + -7.7871159393741696e-01 1.0451040222146561e+00 -2.7488405945903489e+00 + -6.5057067697874127e-01 1.0820825140429504e+00 -3.0019010307191327e+00 + -5.2590532125739331e-01 1.0828975577243769e+00 -3.2509255685111320e+00 + -4.3753606815161405e-01 1.0352825326378341e+00 -3.5073619554567061e+00 + -3.9764561562208889e-01 9.3901409771008804e-01 -3.7657582325580856e+00 + -4.0769631803054218e-01 8.0155946310679949e-01 -4.0101905494642098e+00 + -4.6715863590429751e-01 6.3639072227597593e-01 -4.2213686440897913e+00 + -5.6510300494905574e-01 4.6024410384866665e-01 -4.3881742297153838e+00 + -6.3300361588465304e-01 2.9124710520013641e-01 -4.5514389247340024e+00 + id 11303 + loc 1.0068932175636292e-01 5.6946396827697754e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3548403006787306e-01:3.8221966220173398e-01:1.9813865344952020e-01:2.5915935428139764e-01:1.0754777853509034e+00:3.0790189872788964e-01:1.8905075329133236e+00:4.1494676376948331e-01:2.1170668974765032e+00:4.3547967522757242e-01:2.9551862444325616e+00:3.5892944313052572e-01:3.6265572657345309e+00 + CVs 20 + 2.4979678330713734e-01 3.8188028612917457e-01 -1.9234417588985003e-01 + 4.7503953371637020e-01 7.8450201597244729e-01 -3.8638681971133143e-01 + 6.8492987286249696e-01 1.1990319241962009e+00 -5.7357429454477782e-01 + 8.7194437343659836e-01 1.6202518199406626e+00 -7.3690203723706516e-01 + 1.0240191893309207e+00 2.0234598117015561e+00 -8.7926730820547128e-01 + 1.1410987345197192e+00 2.3426519925838454e+00 -1.0435650734334281e+00 + 1.2258529981581900e+00 2.5084862825706034e+00 -1.2403352626670039e+00 + 1.2854814291785837e+00 2.5470472374185009e+00 -1.4352552747982907e+00 + 1.3299841491600706e+00 2.5109324936112061e+00 -1.6193070764803739e+00 + 1.3686022504720432e+00 2.4223837357428475e+00 -1.7975881137009164e+00 + 1.4206737364452597e+00 2.2822044996379738e+00 -1.9797731133111667e+00 + 1.5109521492698412e+00 2.0928946410646669e+00 -2.1547594123337683e+00 + 1.6446385872062628e+00 1.8838490639335657e+00 -2.2970198247629128e+00 + 1.7951095007710998e+00 1.7159687480683903e+00 -2.4035991920006681e+00 + 1.9494244556902143e+00 1.6452710119502090e+00 -2.5040585993757865e+00 + 2.1483909491281374e+00 1.6483145897884841e+00 -2.6470785250004232e+00 + 2.4670825399716776e+00 1.6244425744319073e+00 -2.9048630728033800e+00 + 2.8900264737798436e+00 1.3783368867946511e+00 -3.1298357394338634e+00 + 2.8368221967193801e+00 1.2110619410208114e+00 -2.8288807807946745e+00 + id 11304 + loc 9.0901029109954834e-01 5.6528007984161377e-01 1077 + blend 0.0000000000000000e+00 + interp 4.9861594391989011e-01:3.6385139879026152e-01:2.3365820248599789e-03:3.4273614064444990e-01:8.1578023190170812e-01:3.3518644596568814e-01:1.1999933063293986e+00:3.5573784465957520e-01:2.0209854419183735e+00:4.9861095776045095e-01:2.4957217820406994e+00:3.3978065548211506e-01:3.2458665498169688e+00 + CVs 20 + -4.3367930580072295e-03 3.6513704992898333e-01 -2.8619741329575504e-01 + 3.2166558980430443e-02 6.9617309913102421e-01 -5.4488305802784021e-01 + 7.1743950936798639e-02 9.9566392129447445e-01 -8.0146762666920457e-01 + 1.0128013716462009e-01 1.2590651543547464e+00 -1.0716076766450238e+00 + 1.2003935933425391e-01 1.4827867421967145e+00 -1.3652888025066461e+00 + 1.2906492609956377e-01 1.6669147814192906e+00 -1.6873355994120243e+00 + 1.3739767375107637e-01 1.8111185210554370e+00 -2.0402024537803145e+00 + 1.6169102564794902e-01 1.9138720545214190e+00 -2.4233907261622871e+00 + 2.2137452259126478e-01 1.9722099882443003e+00 -2.8300889040653763e+00 + 3.3395553657094423e-01 1.9773563142060282e+00 -3.2425369652689335e+00 + 4.9933984935905723e-01 1.9141820026227747e+00 -3.6256229273546916e+00 + 6.7999006838720399e-01 1.7736448580061241e+00 -3.9354704667184270e+00 + 8.2055369234420827e-01 1.5446317305537351e+00 -4.1550892763220402e+00 + 8.9134659389404891e-01 1.1955020382120796e+00 -4.2965164562140030e+00 + 8.7846336402620451e-01 7.4641681485588229e-01 -4.3551153388924098e+00 + 7.3420349288647224e-01 3.3172135353699844e-01 -4.3413022276983027e+00 + 3.9862047044206417e-01 1.8504481357698216e-01 -4.3137730432750017e+00 + -2.6405668795544554e-02 2.2931213810786610e-01 -4.3108210983544764e+00 + -5.9225264258697730e-01 -1.5247174538504299e-02 -4.3338971248956746e+00 + id 11305 + loc 2.6870819926261902e-01 5.9806495904922485e-01 1070 + blend 0.0000000000000000e+00 + interp 4.9180432357093029e-01:4.9179940552769458e-01:3.7695494149101227e-02:3.7306382144333750e-01:7.5868238654057996e-01:3.4343329585956534e-01:1.4137995034566084e+00:2.6340931230607462e-01:2.0019830188700647e+00:2.6026216291938808e-01:2.9847651837687268e+00:4.0067617940295458e-01:3.6498344955818696e+00 + CVs 20 + -3.4389147007210236e-01 3.2509560876481097e-01 3.2282564128906632e-01 + -6.3247472058486731e-01 5.8182364958515020e-01 5.8091903180951476e-01 + -8.8285357916319351e-01 8.1794189095348768e-01 8.6378753149886955e-01 + -1.1387122986935041e+00 1.0540594984799272e+00 1.1613172599037713e+00 + -1.4517349491637295e+00 1.2779179804601386e+00 1.3859526792162575e+00 + -1.8287474145236695e+00 1.4537675760841282e+00 1.4797195551321902e+00 + -2.2294962275327661e+00 1.5435633190755538e+00 1.4339329337340807e+00 + -2.5909152441780670e+00 1.5297680014877151e+00 1.2471341453004867e+00 + -2.8147344897624618e+00 1.4035759908461849e+00 9.3402760895561943e-01 + -2.8395154740778135e+00 1.1806441639238083e+00 6.1255678009535774e-01 + -2.7433406471949522e+00 9.0188781296003628e-01 4.0583544948363337e-01 + -2.6221809944585250e+00 5.9713226849427481e-01 3.6049404571248411e-01 + -2.5496775881670568e+00 3.0069758281411213e-01 4.2842613947216135e-01 + -2.5223149408939776e+00 -1.1969735605532716e-02 4.5409740448525537e-01 + -2.5259563978886934e+00 -3.6344181128154462e-01 3.2687688727456549e-01 + -2.6016412245514635e+00 -6.7674538301292586e-01 -9.7582059240448049e-03 + -2.8338289643373851e+00 -7.5443587923503141e-01 -6.0537596198944466e-01 + -3.2378254633436896e+00 -4.3146742984296099e-01 -1.1446691568226266e+00 + -3.4190594913034693e+00 -4.6690970888818439e-01 -1.3513487689572528e+00 + id 11306 + loc 5.5300253629684448e-01 1.7259790003299713e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8882454665255933e-01:3.2961232284484421e-01:2.7374475653056185e-01:2.6100152911222779e-01:1.1023777449730678e+00:3.8882065840709285e-01:1.8826371324602991e+00:3.8053004451950290e-01:2.6631185068242251e+00:2.5613196455994186e-01:3.6940076867775149e+00 + CVs 20 + -2.0672007650995639e-01 1.4105937834697202e-01 2.3798593648521021e-01 + -4.0418259750631497e-01 2.8560829476181487e-01 4.5443819485288567e-01 + -6.1217122809281099e-01 4.2108411626210129e-01 6.4920078038696871e-01 + -8.3923424778052380e-01 5.4845148479224592e-01 8.2294817716821822e-01 + -1.0798266833041215e+00 6.7858780579677813e-01 9.7318818770805882e-01 + -1.3348745861530078e+00 8.2387182078248622e-01 1.1119854985526212e+00 + -1.6038426133696002e+00 9.9066295971886864e-01 1.2643213527000750e+00 + -1.8767120418996632e+00 1.1789204811070797e+00 1.4437384387478163e+00 + -2.1441058624172977e+00 1.3869733946669311e+00 1.6485377702446746e+00 + -2.4067244425490832e+00 1.6108295628587523e+00 1.8781460884175085e+00 + -2.6743670859576425e+00 1.8384454055899018e+00 2.1425597107041590e+00 + -2.9577377629738533e+00 2.0445337426014785e+00 2.4603320874891548e+00 + -3.2544896441768358e+00 2.1928872215875446e+00 2.8453500556694871e+00 + -3.5447288364232143e+00 2.2462279990082998e+00 3.2861836686596884e+00 + -3.8086545103651650e+00 2.1828216604141404e+00 3.7546063419269862e+00 + -4.0480157355413082e+00 1.9819496532322551e+00 4.2379742006326317e+00 + -4.2539457151248952e+00 1.6148382962724765e+00 4.7312003804788487e+00 + -4.3593185692127836e+00 1.1310419188126166e+00 5.1867492566459106e+00 + -4.2928119437674752e+00 9.2001998120890160e-01 5.3781317108648725e+00 + id 11307 + loc 5.7015877962112427e-01 4.7101145982742310e-01 410 + blend 0.0000000000000000e+00 + interp 4.1771397263765414e-01:3.2393496513539577e-01:6.1146611573832421e-01:3.2095402132545608e-01:1.2136726381499174e+00:4.1770979549792780e-01:2.0471771515219199e+00:3.3331283357040775e-01:2.9999948994421004e+00:3.1110574723155687e-01:3.6967757550896447e+00 + CVs 20 + -4.4401867565304065e-01 3.1217571261954707e-01 7.8974037747024897e-02 + -8.2425241066934485e-01 5.9257614749896870e-01 1.5950611252111443e-01 + -1.2083385002076577e+00 8.7878010383448357e-01 2.2583355000784960e-01 + -1.6285034827220179e+00 1.1740367081473952e+00 2.8908685777419829e-01 + -2.0889734644841047e+00 1.4480315491712774e+00 3.7933484179446403e-01 + -2.5938283959939419e+00 1.6534570041083370e+00 5.3151022721488372e-01 + -3.1270582516336871e+00 1.7363255035310894e+00 7.7206023332522000e-01 + -3.6496817317764321e+00 1.6667653579068449e+00 1.0892363818733592e+00 + -4.1370457184320557e+00 1.4409672016368711e+00 1.4343224203256961e+00 + -4.5743992795377597e+00 1.0631149872856016e+00 1.7429190529953889e+00 + -4.9468380209175722e+00 5.6916077000524545e-01 1.9696886747490323e+00 + -5.2717119978046219e+00 2.7564723788287893e-02 2.1536669981099563e+00 + -5.5919071252200077e+00 -4.9800363882601362e-01 2.3860803535758581e+00 + -5.9314469186545331e+00 -9.3373461499630794e-01 2.7121184676482897e+00 + -6.2893125108655337e+00 -1.2121515665280085e+00 3.0977592283459678e+00 + -6.6531313213954890e+00 -1.3324713837800912e+00 3.4586304380573241e+00 + -7.0039618122003757e+00 -1.3571411084409375e+00 3.7455761362810809e+00 + -7.3062493135750337e+00 -1.3505807882792200e+00 3.9909233603460561e+00 + -7.5685283231805034e+00 -1.4048724967392525e+00 4.3016555744721003e+00 + id 11308 + loc 9.9219799041748047e-01 2.8027021884918213e-01 1070 + blend 0.0000000000000000e+00 + interp 3.7492905638484053e-01:3.7323155353763032e-01:9.3729384751433664e-02:3.1983518070903794e-01:1.0044109266450285e+00:3.7492530709427668e-01:1.6305825830426737e+00:2.7664121808204695e-01:2.8261408868511637e+00:3.2791442572090135e-01:3.2351580848559198e+00 + CVs 20 + 2.2036966277044517e-01 2.9055350084479281e-01 -4.1928060147730595e-02 + 4.0387120881986549e-01 5.4177627646471427e-01 -2.5263944471268118e-02 + 5.4916799764844415e-01 7.6780958840485514e-01 2.3726966768688129e-02 + 6.5241056096921324e-01 9.7061457316770250e-01 9.4269752921491867e-02 + 7.1561906766422734e-01 1.1534240607506652e+00 2.0180104724002268e-01 + 7.4470732674258244e-01 1.3398129688909433e+00 3.5423154093039277e-01 + 7.4790139155875668e-01 1.5808938375077586e+00 5.1472521553467654e-01 + 7.3316506453512287e-01 1.9146140654222199e+00 6.1266054777634027e-01 + 7.2022379700167805e-01 2.3464917905992482e+00 5.9238887129269224e-01 + 7.6761862930448843e-01 2.8624548686991700e+00 3.9610271202169289e-01 + 9.6680308210615118e-01 3.3461104844664837e+00 -2.9056741016704857e-02 + 1.3127770781508952e+00 3.5936274884905188e+00 -6.0745759482450423e-01 + 1.7039949882323153e+00 3.5419907211156314e+00 -1.2074401523806608e+00 + 2.0688881487380000e+00 3.2291363261861497e+00 -1.7526089290743594e+00 + 2.3787862644687676e+00 2.7096833764160979e+00 -2.1898141420021440e+00 + 2.6200007725993881e+00 2.0201254845378260e+00 -2.4763377163662703e+00 + 2.7281985251942142e+00 1.2017213948845062e+00 -2.5567710201757743e+00 + 2.6239953242791647e+00 4.0800470777684916e-01 -2.4183166585331328e+00 + 2.4987622989329474e+00 -2.3117866641745088e-02 -2.3353795263048482e+00 + id 11309 + loc 4.4592660665512085e-01 9.9984085559844971e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1589102891995527e-01:3.6690336154946052e-01:8.6085586246608126e-01:2.0865915269737745e-01:1.3123799026803302e+00:3.5949410647413560e-01:2.2150237350369331e+00:3.4325624921425918e-01:3.4199661620626829e+00:4.1588687000966612e-01:3.9994423135779500e+00 + CVs 20 + 1.2879554111092301e-01 3.7139475783300036e-01 -9.4564725261414656e-02 + 2.7304683818328629e-01 7.3439035822371568e-01 -2.3145757969836633e-01 + 4.2218762983581359e-01 1.0925474502210166e+00 -4.0914470247925649e-01 + 5.6309621120855069e-01 1.4427656953665631e+00 -6.3507552034174708e-01 + 6.8765285619028771e-01 1.7767686304007229e+00 -9.2058194920618042e-01 + 8.0741877544017315e-01 2.0861287906886279e+00 -1.2695505933985851e+00 + 9.5284502854945496e-01 2.3608876308464071e+00 -1.6781250534801668e+00 + 1.1518806633761911e+00 2.5871569942163033e+00 -2.1346292174020478e+00 + 1.4165156672164552e+00 2.7444253999180948e+00 -2.6265716090530562e+00 + 1.7430506168008375e+00 2.7940187144567386e+00 -3.1425953680677576e+00 + 2.1019885119294095e+00 2.6669960603132798e+00 -3.6604291078881670e+00 + 2.4103390710521246e+00 2.2742743830994181e+00 -4.1234552826413573e+00 + 2.5248438380586964e+00 1.6404586999440394e+00 -4.4477292595883053e+00 + 2.4155695951259197e+00 9.5547090722276751e-01 -4.6343469731696194e+00 + 2.1558170289531429e+00 3.0872441573865017e-01 -4.7388147927242272e+00 + 1.6865777610067765e+00 -2.1781255375632269e-01 -4.7778607817442920e+00 + 8.6849108944323117e-01 -2.8586710127137249e-01 -4.7712900287088527e+00 + 1.3956547406275888e-01 3.0187704334507326e-01 -4.8210995223640625e+00 + -2.8434169266000725e-01 1.9914461986861132e-01 -4.8747682377160100e+00 + id 11310 + loc 3.8074609637260437e-01 8.8046461343765259e-02 410 + blend 0.0000000000000000e+00 + interp 3.5606563909391054e-01:3.0455045158326549e-01:5.8845631029391665e-04:3.2393447969713624e-01:1.0781495338388396e+00:3.4291957412793478e-01:2.0023406323339819e+00:3.5606207843751964e-01:2.8797559944686668e+00:3.5147979889337277e-01:3.2375434796467557e+00 + CVs 20 + -1.5267679174443874e-01 1.0448832159087390e-01 -1.9761422286537694e-01 + -2.7044584088129486e-01 2.1323900161213694e-01 -4.1082702463034948e-01 + -3.7159873561084361e-01 3.1889022672278755e-01 -6.3938908179696452e-01 + -4.6228010229849958e-01 4.1757018628552955e-01 -8.8103090609012025e-01 + -5.4075811798916784e-01 5.0770013343846687e-01 -1.1317574535335764e+00 + -6.0138873462978726e-01 5.8711307150540681e-01 -1.3850253296161323e+00 + -6.3219458328327116e-01 6.5276998977480694e-01 -1.6312302533103409e+00 + -6.1983877818035371e-01 6.9999391543724632e-01 -1.8573929795742996e+00 + -5.5598140776805283e-01 7.2248736169054817e-01 -2.0467467307159328e+00 + -4.4310910489037980e-01 7.1371325701602562e-01 -2.1802229501374897e+00 + -3.0268900817950772e-01 6.6757579342902718e-01 -2.2471062473652363e+00 + -1.8248346933934817e-01 5.9376863420572412e-01 -2.3038840207693552e+00 + -1.3105988772352989e-01 5.3022211960029619e-01 -2.5154638302984984e+00 + -4.4836062110064578e-02 4.3045534681203346e-01 -2.5708842374663092e+00 + 1.1695512522151674e-02 3.0538174888140901e-01 -2.6097360025700169e+00 + 2.1859402946597384e-02 1.6457146163181235e-01 -2.7475993550137918e+00 + 4.9837504998030413e-03 1.3626824764888079e-02 -2.8976864301669600e+00 + -3.9820779116318317e-02 -1.4585056088264525e-01 -3.0437945917462748e+00 + -3.8298389792223886e-02 -2.7171496323223954e-01 -3.1432239254217667e+00 + id 11311 + loc 7.9412913322448730e-01 2.8803077340126038e-01 1070 + blend 0.0000000000000000e+00 + interp 4.8250411230059725e-01:2.5214805262929818e-01:8.3750015881652917e-01:3.1234688954951290e-01:1.3083664429985538e+00:3.0294924091416775e-01:2.0027566632291132e+00:3.7265715516891085e-01:2.6134162677365245e+00:4.8249928725947427e-01:3.0810330202369958e+00:3.7589171491736600e-01:3.9410383623141914e+00 + CVs 20 + 2.5029958052727541e-01 3.1915524031630049e-01 -1.3907343863024271e-01 + 4.7248744985060076e-01 6.0853300271353361e-01 -2.0201541870716333e-01 + 6.6228771400658748e-01 8.8679609407630422e-01 -2.2164686709035675e-01 + 8.1505233429153212e-01 1.1593898680019687e+00 -1.9888488192326281e-01 + 9.2592830344926447e-01 1.4247023797581595e+00 -1.3230266503958377e-01 + 9.9891215874572326e-01 1.6991639305050836e+00 -6.6136158358499619e-02 + 1.0442848551310471e+00 1.9965316931199539e+00 -6.2294260247814259e-02 + 1.0792357653256270e+00 2.3123247471017363e+00 -1.5516118426474046e-01 + 1.1320953838901797e+00 2.6280602427364759e+00 -3.6002011696706115e-01 + 1.2446757497747338e+00 2.8876542752168639e+00 -6.9171305791076132e-01 + 1.4441647196120182e+00 2.9783149873588242e+00 -1.1264122321385150e+00 + 1.6733227279207816e+00 2.8250889046806695e+00 -1.5541297095863251e+00 + 1.8500620253942182e+00 2.4876782420862873e+00 -1.8863734636913767e+00 + 1.9586909750167756e+00 2.0451125778477910e+00 -2.1067922591252999e+00 + 2.0141990730692698e+00 1.5477316612449332e+00 -2.2121423449974555e+00 + 1.9999112606733940e+00 1.0403504322359654e+00 -2.1870675081409394e+00 + 1.8570488550275812e+00 6.0764935901842798e-01 -2.0183154564620418e+00 + 1.5774784862142397e+00 3.6118227758605670e-01 -1.7527145141114295e+00 + 1.4328579165423307e+00 7.5343691499170973e-02 -1.6046863149225157e+00 + id 11312 + loc 6.6333115100860596e-01 8.6979806423187256e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6353071563594439e-01:3.2674632864321695e-01:6.0699158897153338e-01:4.6352608032878806e-01:1.0266195002531457e+00:4.6347874102875541e-01:1.5503507220491954e+00:3.8343146788529586e-01:2.0076847617587825e+00:3.8811857992105347e-01:2.7036234868550482e+00:3.3547310874275810e-01:3.2501256508593204e+00:3.6388622689710992e-01:3.9936183645834027e+00 + CVs 20 + 9.4233700030069423e-02 3.3062512587146881e-01 -2.5715652589917820e-01 + 2.3099279892996344e-01 6.6724403218728279e-01 -4.7135752561428790e-01 + 4.2640696413959139e-01 1.0099889503157373e+00 -6.7170822724827117e-01 + 6.8660556948507667e-01 1.3543253208569028e+00 -8.7473117149827728e-01 + 1.0121639073358142e+00 1.7006753127542151e+00 -1.0952409757528994e+00 + 1.3958299541509624e+00 2.0498327650867285e+00 -1.3657628881978110e+00 + 1.8181873352532338e+00 2.3892435026108805e+00 -1.7384423743570483e+00 + 2.2395940761944457e+00 2.6567647479705006e+00 -2.2720933604524571e+00 + 2.5879074244887712e+00 2.7392956454813184e+00 -2.9603604956914364e+00 + 2.7943666865135426e+00 2.5787607259784111e+00 -3.6922993174882039e+00 + 2.8439120388948256e+00 2.2205283745102204e+00 -4.3507739807698504e+00 + 2.7703208165247495e+00 1.7583182207246946e+00 -4.8660890113467907e+00 + 2.6321070532427342e+00 1.2777075684847250e+00 -5.2358236311658697e+00 + 2.4767301876217451e+00 8.2397499714180011e-01 -5.5117117750353852e+00 + 2.3170133862816771e+00 4.1643703369968144e-01 -5.7690591485386049e+00 + 2.1599643564429836e+00 6.5339415779953613e-02 -6.0695226762956898e+00 + 2.0190218416204586e+00 -2.0170885731062016e-01 -6.4410938495417751e+00 + 1.9012881081698727e+00 -3.3503273013274854e-01 -6.9015674348169931e+00 + 1.7523378922762973e+00 -3.0789723968410265e-01 -7.3566420819831118e+00 + id 11313 + loc 2.3875829577445984e-01 9.1328114271163940e-01 1077 + blend 0.0000000000000000e+00 + interp 4.9395014142041177e-01:2.8369731603844461e-01:8.4426655248464311e-01:2.7897856490173245e-01:1.3747369434686127e+00:3.1125722690793428e-01:1.8386225006364869e+00:4.9394520191899760e-01:2.1770684652991159e+00:4.2974631816294451e-01:2.8797323172466895e+00:2.5475658459452272e-01:3.4544073767220063e+00:4.1826199181535278e-01:3.9963755937764387e+00 + CVs 20 + 3.5964001969245268e-01 2.5416184892999300e-01 -2.0785324550383741e-01 + 6.7157889188975728e-01 5.3181499026937462e-01 -4.2512394645219831e-01 + 9.8241990533971935e-01 7.7077327784017635e-01 -6.5538423569918725e-01 + 1.3038653615511027e+00 9.5158780427887157e-01 -8.9978685944602532e-01 + 1.6287081341560135e+00 1.0634695658643292e+00 -1.1473233129822373e+00 + 1.9529857934409602e+00 1.1040805940807910e+00 -1.3812941117351423e+00 + 2.2760034327797056e+00 1.0850360689484373e+00 -1.5911831038977899e+00 + 2.5980425777220297e+00 1.0242000086670431e+00 -1.7759831105347366e+00 + 2.9191114395376947e+00 9.3713392088855108e-01 -1.9415976299738362e+00 + 3.2413308719622034e+00 8.3374809726250110e-01 -2.1021634723915210e+00 + 3.5640187078065639e+00 7.1378437406841477e-01 -2.2730098109596262e+00 + 3.8778696968574997e+00 5.6614941014150055e-01 -2.4639454185712624e+00 + 4.1658686346465625e+00 3.7077582837339396e-01 -2.6839303970143065e+00 + 4.4001921001560014e+00 1.0444881113177851e-01 -2.9480592732034721e+00 + 4.5216893652498555e+00 -2.4492703119515413e-01 -3.2764453056935707e+00 + 4.4531651778914476e+00 -6.1538829478557755e-01 -3.6841774892460362e+00 + 4.2241410953609009e+00 -8.3156959772097361e-01 -4.1445767573934535e+00 + 4.0196507444905558e+00 -8.3579862872565913e-01 -4.5541870296900493e+00 + 3.9480227834090535e+00 -8.3677733852596070e-01 -4.8203782643245496e+00 + id 11314 + loc 7.4777489900588989e-01 5.7513701915740967e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1199256573531404e-01:4.0635782816610094e-01:9.7331927099820081e-02:3.4005090171820035e-01:7.9745978951790419e-01:5.1198744580965672e-01:1.4423340022254623e+00:3.1722804040898128e-01:1.9651715104240421e+00:3.1554519283304483e-01:2.7567593704959528e+00:2.9561606460628270e-01:3.2280426020837067e+00 + CVs 20 + 1.7636206601208410e-01 2.4603875600234978e-01 -2.7064737142876460e-01 + 3.1562943690246986e-01 5.2048781767964292e-01 -4.9426999820721285e-01 + 4.5156400857252138e-01 7.9241748578464610e-01 -7.0567950793188994e-01 + 6.0345838784943751e-01 1.0457794270018184e+00 -9.2823267414250266e-01 + 7.7756599432425288e-01 1.2738684235463162e+00 -1.1730089688169472e+00 + 9.8086504197210345e-01 1.4655000349512286e+00 -1.4427610807611193e+00 + 1.2214678888690647e+00 1.6077014572505812e+00 -1.7307654143238940e+00 + 1.5055030202425805e+00 1.6882958915381050e+00 -2.0240178308609376e+00 + 1.8357911633412767e+00 1.6989160391793843e+00 -2.3068383193669599e+00 + 2.2138598293116858e+00 1.6358253314091036e+00 -2.5668844997162585e+00 + 2.6347820868551661e+00 1.4975812536216935e+00 -2.8039281702946655e+00 + 3.0806478789253511e+00 1.2797708404705190e+00 -3.0311505508928258e+00 + 3.5194652584582355e+00 9.7484565138231405e-01 -3.2667861744672972e+00 + 3.9103316065450753e+00 5.7317350148692925e-01 -3.5271499984441084e+00 + 4.2082574504181745e+00 6.4985220887695538e-02 -3.8353967527747210e+00 + 4.3414220616845842e+00 -5.2399542905311147e-01 -4.2177729325271924e+00 + 4.2538020449943161e+00 -1.0743818831140355e+00 -4.6659745894847369e+00 + 4.0076096939316539e+00 -1.4425288683746720e+00 -5.1234094118133875e+00 + 3.8203361592908212e+00 -1.5251562186739189e+00 -5.3732942953879759e+00 + id 11315 + loc 1.0647183656692505e-01 3.3372393250465393e-01 410 + blend 0.0000000000000000e+00 + interp 4.5931332740639669e-01:3.1543996937596180e-01:3.9597478047352030e-02:4.5930873427312263e-01:9.3076617881346457e-01:2.7559501304288692e-01:1.3635243748144432e+00:4.0598470629605504e-01:1.9011471117027225e+00:3.0328596100910882e-01:2.6855723548635981e+00:2.9083784476222951e-01:3.1960050969189142e+00 + CVs 20 + -1.6634499658258806e-01 1.3138506694022095e-01 -1.0111086085392385e-01 + -3.3302651723064314e-01 2.4170459035146510e-01 -1.7385823655074481e-01 + -5.0589881938024894e-01 3.4908411519359595e-01 -2.5211979422737485e-01 + -6.8016682124216854e-01 4.6334744139767237e-01 -3.4969902261473662e-01 + -8.6018297192792603e-01 5.8648382854583558e-01 -4.7470939608835461e-01 + -1.0501543474711139e+00 7.2106639227884672e-01 -6.4109000684467099e-01 + -1.2398583018127638e+00 8.6933883167133597e-01 -8.6061495930999721e-01 + -1.4068204500298094e+00 1.0291935798516942e+00 -1.1349344621592234e+00 + -1.5315712357994082e+00 1.1921374650385033e+00 -1.4588430790500462e+00 + -1.6001830961406700e+00 1.3486623309754091e+00 -1.8198051680690570e+00 + -1.5980005052926898e+00 1.4979474068920391e+00 -2.1649737622737666e+00 + -1.5280778763089913e+00 1.6484258261197873e+00 -2.3948081039958842e+00 + -1.4063566248807629e+00 1.8104813016725774e+00 -2.4731475499205500e+00 + -1.2524673293145760e+00 1.9698674827676901e+00 -2.5115909806171977e+00 + -1.1151277491158673e+00 2.0891583432485463e+00 -2.6173799981618169e+00 + -1.0135202295190997e+00 2.1601140007189095e+00 -2.7724950749731292e+00 + -9.3716981000120980e-01 2.1943266174836600e+00 -2.9286446559806754e+00 + -8.9909645154555295e-01 2.1918353790311134e+00 -3.0768436465184967e+00 + -1.0565257262092551e+00 2.0737366155332300e+00 -3.2895201024106608e+00 + id 11316 + loc 5.0304943323135376e-01 2.2309830784797668e-01 1070 + blend 0.0000000000000000e+00 + interp 7.3351829256816947e-01:4.1593970243878403e-01:4.3659124963227836e-01:4.4241928600284103e-01:1.0184395690425703e+00:3.2143244272916854e-01:1.5932403664690777e+00:4.0371266565382286e-01:2.0642991984432992e+00:7.3351095738524386e-01:3.4295986236601452e+00:3.3890123430884328e-01:3.8984785356406935e+00 + CVs 20 + 2.2181431620147499e-01 3.6040082643510096e-01 -1.9703172777714573e-01 + 3.8447279046619753e-01 6.3708470302782338e-01 -2.6830068256913603e-01 + 5.0722851087586718e-01 8.6322433434286627e-01 -2.8025883978210303e-01 + 5.9258471449403116e-01 1.0413083263271563e+00 -2.6699226694843020e-01 + 6.5922895756766398e-01 1.1871791474127806e+00 -1.9935262763077821e-01 + 7.3183712131018352e-01 1.3789265930664554e+00 -4.5383630025864874e-02 + 8.0668032435966919e-01 1.7002794100292853e+00 1.1449475078632676e-01 + 8.6939299788850433e-01 2.1404340243157440e+00 1.5919543748703613e-01 + 9.3450586383032430e-01 2.6637404085948164e+00 3.4260367844540340e-02 + 1.0512208798143714e+00 3.2324369597201912e+00 -3.0488388761991136e-01 + 1.2972397544910472e+00 3.7157270182971018e+00 -8.6369531953987710e-01 + 1.6944652978285495e+00 3.9454539654369407e+00 -1.5180943189521166e+00 + 2.1781531208418512e+00 3.8792067775354915e+00 -2.1340141844099447e+00 + 2.6577192269229215e+00 3.5607466940460428e+00 -2.6358911361640640e+00 + 3.0800600593187735e+00 3.0662687300106710e+00 -2.9831698474607382e+00 + 3.4538996817672878e+00 2.4407862692801454e+00 -3.1746328031874653e+00 + 3.7590246395346094e+00 1.6918851681459881e+00 -3.1896905671344191e+00 + 3.8939169692522864e+00 9.4324119845895660e-01 -2.9910901354331951e+00 + 3.8637887539949576e+00 6.1171820741198535e-01 -2.7231131008404068e+00 + id 11317 + loc 6.6654686816036701e-03 1.2376679480075836e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7572180730749299e-01:3.5533935769615566e-01:3.1971697668273080e-01:3.1972389539418244e-01:1.0096435240637738e+00:2.8343711755373879e-01:1.8097923014815500e+00:2.9728341522040824e-01:2.2662163901555887e+00:3.7571805008941994e-01:2.9739069610859405e+00:2.6045411273952029e-01:3.7532696867103015e+00 + CVs 20 + -1.4793114352129980e-01 4.0627074293106263e-01 -1.0743932094114864e-01 + -3.1170901922554817e-01 8.3278334873080762e-01 -2.0098098723812666e-01 + -4.7194213540412905e-01 1.2804213566632052e+00 -2.5544860281490062e-01 + -6.0029395492768511e-01 1.7408846390713768e+00 -2.5197114781870378e-01 + -6.9905887040189540e-01 2.2075883363623610e+00 -1.9316701673354697e-01 + -8.5082305965240446e-01 2.6721347446921500e+00 -1.1608996051353082e-01 + -1.1653737934184889e+00 3.0608080327914129e+00 -8.9760245950553208e-02 + -1.6169191602388628e+00 3.2542940810851713e+00 -1.7555541919149764e-01 + -2.0623015234722608e+00 3.2141472594728766e+00 -3.9184835355790837e-01 + -2.3651519275171955e+00 3.0100550801289323e+00 -7.0771571193186067e-01 + -2.4939235302815215e+00 2.7544929877710413e+00 -1.0652767707601731e+00 + -2.4967396077230091e+00 2.4963298521352906e+00 -1.4137223950746136e+00 + -2.4265839121967470e+00 2.2250409814368517e+00 -1.7200109640821257e+00 + -2.3017330554168698e+00 1.9102448170213857e+00 -1.9476114513462497e+00 + -2.1284863636925428e+00 1.5579443393039605e+00 -2.0397176938144406e+00 + -1.9170309538724970e+00 1.2434335679457975e+00 -1.9665806261712242e+00 + -1.6969927758538665e+00 1.0852055078429861e+00 -1.7295276671540798e+00 + -1.5813568349604461e+00 1.1155773719730400e+00 -1.4499396148382337e+00 + -1.4251422822702415e+00 1.0216015866119086e+00 -1.2081434084034932e+00 + id 11318 + loc 5.0775855779647827e-01 7.7970671653747559e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7555787297922675e-01:3.0514946638851365e-01:4.7658768040811050e-01:2.7880770494061025e-01:1.5882701102286401e+00:4.1566131861988687e-01:2.0290155741131897e+00:3.8287757581920423e-01:2.8831355424921252e+00:4.7555311740049699e-01:3.1628401789123108e+00:3.3570713465109092e-01:3.9015171543646670e+00 + CVs 20 + 6.8702231332715330e-02 3.9012560847439187e-01 -1.2703450060128735e-01 + 1.6931806698881477e-01 7.4118797503612588e-01 -2.8694508646474215e-01 + 2.7759698135731325e-01 1.0580945641659976e+00 -4.7173850538194750e-01 + 3.7903933777486953e-01 1.3388114412831162e+00 -6.7767628029162985e-01 + 4.6589744498833646e-01 1.5800677073048481e+00 -9.0327802298692872e-01 + 5.3530385098576605e-01 1.7814432369914084e+00 -1.1429934934086730e+00 + 5.9363202688210159e-01 1.9458399122632590e+00 -1.3897258397740899e+00 + 6.4931175939963093e-01 2.0795597856000532e+00 -1.6367264618390047e+00 + 7.0563468132887652e-01 2.1939092747105624e+00 -1.8777129619132955e+00 + 7.6810010916438798e-01 2.3052934708565056e+00 -2.1053580257508480e+00 + 8.5378542806251367e-01 2.4391257218317017e+00 -2.3037842494355192e+00 + 1.0069425584596341e+00 2.6399210678171325e+00 -2.4653661407097927e+00 + 1.2755734136142314e+00 2.8515364382736159e+00 -2.6456118145632228e+00 + 1.5516785038058249e+00 2.8963225611452375e+00 -2.8590565399399508e+00 + 1.7654825566167383e+00 2.7809494096809297e+00 -3.0355888597934699e+00 + 2.1007234944799031e+00 2.5598279213711419e+00 -3.1358980536418906e+00 + 2.6972578925909310e+00 2.0407815043355200e+00 -3.1511843015441254e+00 + 2.9444614490929144e+00 1.3742272193599525e+00 -3.0512363996264154e+00 + 2.6501164597631295e+00 1.4295837431639749e+00 -2.8851256185169958e+00 + id 11319 + loc 7.6299774646759033e-01 9.7695469856262207e-01 410 + blend 0.0000000000000000e+00 + interp 5.1976986833508132e-01:5.0050851800032370e-01:3.0744388742341577e-01:2.9183089413501173e-01:8.7901389164030574e-01:5.1976467063639797e-01:1.1519399506302350e+00:4.7034538212797888e-01:1.8892669694477875e+00:2.7319076112155061e-01:2.1335371670145493e+00:3.4297615159984540e-01:3.3416426765576510e+00:4.8692583926299715e-01:3.8833856044004920e+00 + CVs 20 + 6.9715249817542913e-01 2.1086242571868283e-01 -2.0780430638370806e-01 + 1.2667313555892210e+00 3.2163373095985326e-01 -3.9945511136793249e-01 + 1.8218473407378211e+00 4.0171151526301629e-01 -5.7074114547026378e-01 + 2.3775827983748834e+00 4.5652161163373883e-01 -7.3535912741544851e-01 + 2.8937182222636242e+00 4.6327361627874142e-01 -9.1389511010674984e-01 + 3.3324079932252184e+00 4.0713886332434357e-01 -1.1196810221224416e+00 + 3.6785684550695814e+00 2.9227836301713772e-01 -1.3546896192073867e+00 + 3.9481279793035884e+00 1.3360504693832254e-01 -1.6153209769443735e+00 + 4.1645799438592874e+00 -6.0829252225561126e-02 -1.8954131176840510e+00 + 4.3379203496321264e+00 -2.9112169514130670e-01 -2.1807771332435397e+00 + 4.4787572643139688e+00 -5.6593073867500565e-01 -2.4645416556677424e+00 + 4.6015093004147563e+00 -8.9756047309642040e-01 -2.7547606155319215e+00 + 4.7135485702628097e+00 -1.2630872717680750e+00 -3.0574642704585728e+00 + 4.8202454097478924e+00 -1.6155779335776885e+00 -3.3693211017997746e+00 + 4.9233148878480870e+00 -1.9370137556097879e+00 -3.6756903824675615e+00 + 5.0291497200812518e+00 -2.2489622451120361e+00 -3.9888085482016518e+00 + 5.1462996938105636e+00 -2.5809700012709227e+00 -4.3371318279385154e+00 + 5.2811922138631093e+00 -2.9457836875169603e+00 -4.6962229655612973e+00 + 5.4659488431426606e+00 -3.3248836290768078e+00 -4.9759701497975177e+00 + id 11320 + loc 9.7540110349655151e-01 3.8096639513969421e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6173862431650192e-01:4.0182419356688287e-01:6.2883379029778474e-02:4.5314570598395199e-01:4.2968738474247581e-01:3.0877260767675058e-01:1.1900608625976863e+00:3.0347098667483313e-01:1.9951700394216729e+00:4.6173400693025879e-01:2.3913115260511271e+00:3.2830931101754840e-01:3.1006471739323582e+00 + CVs 20 + -1.7292773451951404e-01 2.7580137334260957e-01 2.2332904832944564e-01 + -3.5690877510982677e-01 5.5062944138267444e-01 4.3497241902840561e-01 + -5.6193925909462661e-01 8.2159222188620784e-01 6.4079359859412222e-01 + -7.8951458665337948e-01 1.0864082937944508e+00 8.4770867985788967e-01 + -1.0349735285543848e+00 1.3431330532697401e+00 1.0650755659865661e+00 + -1.2903141993952882e+00 1.5887331603147858e+00 1.3043762759477593e+00 + -1.5453862960838074e+00 1.8184053159406999e+00 1.5779990896602243e+00 + -1.7888978620474805e+00 2.0236179169661646e+00 1.8962381033692153e+00 + -2.0096873192208111e+00 2.1914584025686210e+00 2.2622973726695399e+00 + -2.2000274696099162e+00 2.3074670160490744e+00 2.6681451067629505e+00 + -2.3588017968675690e+00 2.3602932437947066e+00 3.0950455656452713e+00 + -2.4924659555836617e+00 2.3472342936876598e+00 3.5164009422175009e+00 + -2.6129185443220537e+00 2.2775362990758889e+00 3.9069512035381173e+00 + -2.7267053936953514e+00 2.1692573509898052e+00 4.2542766151850460e+00 + -2.8343078960798835e+00 2.0372995765584188e+00 4.5619249030498850e+00 + -2.9370813042424366e+00 1.8795943376043600e+00 4.8478032645475277e+00 + -3.0410557751980622e+00 1.6756031047585229e+00 5.1258174717085074e+00 + -3.1475078681435473e+00 1.4157810343953710e+00 5.3781854615898297e+00 + -3.2429619801808918e+00 1.1585860976607987e+00 5.5200087127788677e+00 + id 11321 + loc 4.6941488981246948e-01 4.8526945710182190e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2618335887704589e-01:3.9775804504001278e-01:9.9222560612122201e-05:2.6629844760776467e-01:7.5651316429310178e-01:2.9455944312581067e-01:1.6794674463972641e+00:3.7979076380369420e-01:2.0333266873129885e+00:4.2617909704345713e-01:2.8790406636128347e+00:3.6774736618017539e-01:3.2883644389682747e+00 + CVs 20 + -2.2632832390143914e-01 2.3855054541249712e-01 1.4999741918954451e-03 + -4.4117629389201435e-01 4.7193970398298657e-01 -2.8271087429166619e-02 + -6.4263297687510446e-01 7.0397867155746607e-01 -7.7625335239219606e-02 + -8.3759285609487666e-01 9.3755441064393019e-01 -1.4572881921045866e-01 + -1.0365297398513171e+00 1.1715186666021702e+00 -2.3763667771157682e-01 + -1.2437813851789399e+00 1.4057488302717895e+00 -3.4840341928850094e-01 + -1.4559553621202614e+00 1.6416753943720057e+00 -4.6624343662321877e-01 + -1.6683422940878345e+00 1.8802033694743661e+00 -5.8437100259895203e-01 + -1.8860909367443293e+00 2.1213106250551239e+00 -7.0603506745361977e-01 + -2.1342999484754270e+00 2.3628797484388087e+00 -8.3822745701847590e-01 + -2.4534643668175584e+00 2.5848124854849468e+00 -9.8280864559144898e-01 + -2.8643651583433205e+00 2.7336070383113698e+00 -1.1318886350192301e+00 + -3.3276860021095671e+00 2.7560487897303467e+00 -1.2727015201333467e+00 + -3.7716312631188949e+00 2.6517384255491150e+00 -1.4037027911400735e+00 + -4.1649863056857619e+00 2.4491708394276923e+00 -1.5382582794024287e+00 + -4.5225364368336294e+00 2.1514634674773934e+00 -1.6837251027494697e+00 + -4.8643648355694085e+00 1.7376080649229346e+00 -1.8202317207925891e+00 + -5.1714900873728027e+00 1.2296921270587164e+00 -1.8985121785888395e+00 + -5.2955445125261065e+00 9.0307573750499337e-01 -1.9301780625225422e+00 + id 11322 + loc 6.8531984090805054e-01 9.9107176065444946e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3343800895705431e-01:3.2539160129037442e-01:3.0243279900166176e-04:4.0532357402035085e-01:7.0072492658851182e-01:4.3343367457696474e-01:1.5305343877575566e+00:2.1263647940444277e-01:2.1942838165606711e+00:3.0452164598649795e-01:3.1429373420498985e+00 + CVs 20 + -2.3939125307528336e-01 3.2053307218408034e-01 1.2526267717736728e-01 + -4.4663793301773158e-01 6.2689898103809294e-01 2.4053769928054616e-01 + -6.0963374827074590e-01 9.3700133964755450e-01 3.7197748984519502e-01 + -7.5233095794312865e-01 1.2342655619364726e+00 4.7038512995279369e-01 + -8.9962283278142552e-01 1.4802697590311806e+00 4.7286879689362804e-01 + -1.0446388325896521e+00 1.6538664367850471e+00 3.7526951671334663e-01 + -1.1495083281414105e+00 1.7458643988621012e+00 2.1400733921067627e-01 + -1.1639657148906046e+00 1.7671033803120753e+00 5.8221194814104926e-02 + -1.0928863364174513e+00 1.7631604270267531e+00 -2.8590503431400127e-02 + -9.8643719103548178e-01 1.7615369915926522e+00 -8.0070290369204988e-02 + -8.5091180453162796e-01 1.7593229640350097e+00 -1.2873337199571666e-01 + -6.9976228879735336e-01 1.7664570665592898e+00 -1.5450851568932833e-01 + -5.2345037099441805e-01 1.7650344483203653e+00 -1.7058060647046769e-01 + -2.4556856106571481e-01 1.6737517956609191e+00 -1.9802581118074658e-01 + 1.5352985375510850e-01 1.4334098969757356e+00 -2.6435187689916084e-01 + 5.8505787809133469e-01 1.0838239766200113e+00 -4.6249663074385139e-01 + 9.4044708935515831e-01 7.5878697202441336e-01 -8.8312915266108760e-01 + 1.1227786797736814e+00 6.6395085266577336e-01 -1.4017391858878419e+00 + 1.1828776506960148e+00 7.4279017781086776e-01 -1.5948885632501852e+00 + id 11323 + loc 7.0260155200958252e-01 2.8199586272239685e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7820951267485945e-01:4.3624118254073779e-01:3.5186504575520527e-02:3.3684929360761706e-01:9.9603365874133665e-01:2.4421160956806826e-01:1.8456924799439203e+00:4.7820473057973273e-01:2.4867695860662771e+00:3.7156075894765395e-01:2.9977904997849847e+00:4.2111259926989286e-01:3.6014733680892976e+00 + CVs 20 + -1.0089465972463510e-01 2.0272209671209257e-01 2.7099186960432176e-01 + -1.5732911014350925e-01 4.0907641758814861e-01 5.0955711514024982e-01 + -1.7821217810960616e-01 6.0273139283912980e-01 7.2814500626103895e-01 + -1.7199911029357515e-01 7.8466351033828263e-01 9.4346679609163098e-01 + -1.4639117479365826e-01 9.6521643451692796e-01 1.1735507645641692e+00 + -1.1601472258822337e-01 1.1502228718637202e+00 1.4406956808123808e+00 + -1.0249567332511378e-01 1.3354091672824295e+00 1.7614410453422669e+00 + -1.3058590137115639e-01 1.5059738941682326e+00 2.1396233462290666e+00 + -2.2085345009878204e-01 1.6439987708877881e+00 2.5588950311874021e+00 + -3.7845978157272958e-01 1.7395648091260292e+00 2.9828135831092375e+00 + -5.9118011493106692e-01 1.7991401376284228e+00 3.3778208480790402e+00 + -8.4390582687971993e-01 1.8358470721920295e+00 3.7316385928429501e+00 + -1.1258052310311677e+00 1.8526621666652014e+00 4.0467640186393874e+00 + -1.4267728694285293e+00 1.8474608861945632e+00 4.3130728750606400e+00 + -1.7505804191438548e+00 1.8359813397763418e+00 4.4982503138606891e+00 + -2.0989712237417959e+00 1.8146157083888919e+00 4.5700389430104744e+00 + -2.4404575483780282e+00 1.7369293062075788e+00 4.5078056314917943e+00 + -2.6856431368198423e+00 1.5784535600114906e+00 4.4300109915409758e+00 + -2.5058541702834263e+00 1.5583461076206471e+00 4.8000769524003291e+00 + id 11324 + loc 8.8321614265441895e-01 7.0208740234375000e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1016482818899963e-01:4.1016072654071778e-01:4.2382424062252011e-01:3.4127861980827595e-01:1.2307764728401023e+00:3.3088944510808976e-01:1.9609687357830698e+00:3.4542455086724699e-01:2.7201573989733774e+00:3.3330851583238963e-01:3.4782191284871997e+00 + CVs 20 + 7.4022389997884380e-02 2.7629521052679978e-01 -1.9299410605274625e-01 + 1.3376343037676802e-01 5.4197621583559108e-01 -3.5546723638430805e-01 + 1.9544779753218888e-01 8.0557519504852582e-01 -5.0234241429873006e-01 + 2.7085694773455704e-01 1.0706454141186093e+00 -6.4166130292615109e-01 + 3.6809320157844411e-01 1.3388147662749379e+00 -7.7709260667341495e-01 + 4.9703449841566033e-01 1.6092111521293706e+00 -9.1211010673085458e-01 + 6.7106841686988328e-01 1.8794939004961422e+00 -1.0502139210236816e+00 + 9.0464782008355782e-01 2.1434950930755541e+00 -1.1999314220879809e+00 + 1.1998826186163356e+00 2.3866546598494192e+00 -1.3833557391573801e+00 + 1.5400722069311270e+00 2.5898245521809753e+00 -1.6284358919528428e+00 + 1.9036749644301560e+00 2.7351756683193602e+00 -1.9506928693107390e+00 + 2.2700917908326428e+00 2.8044226432110837e+00 -2.3496715084306841e+00 + 2.6165635069451429e+00 2.7820113061732563e+00 -2.8158008412730560e+00 + 2.9220369202411622e+00 2.6582744278530832e+00 -3.3362277065312278e+00 + 3.1683057454172121e+00 2.4222838638700228e+00 -3.8911706883253543e+00 + 3.3409559343958093e+00 2.0566284186386459e+00 -4.4405939698052466e+00 + 3.4268365210806850e+00 1.5566319078881588e+00 -4.9186244088922315e+00 + 3.4178287994095964e+00 9.6761951570911509e-01 -5.2441950383212612e+00 + 3.3329131971753485e+00 6.1751581210806827e-01 -5.1978948364903053e+00 + id 11325 + loc 5.7412284612655640e-01 6.5706807374954224e-01 410 + blend 0.0000000000000000e+00 + interp 4.0226026864326270e-01:2.6422147930183854e-01:2.8311667310983757e-01:3.5999394843251609e-01:1.2120440863110624e+00:2.4745525162235110e-01:2.0524609103245379e+00:3.0764334640711882e-01:2.9079047739070720e+00:4.0225624604057630e-01:3.5033930314183124e+00 + CVs 20 + 2.9255053248769364e-01 1.4374455884242104e-01 -1.7487479587814536e-01 + 5.2983959969891159e-01 2.5190760530232881e-01 -3.2004533965108917e-01 + 7.5448673234007713e-01 3.3520764232244216e-01 -4.5782221131067241e-01 + 9.8906227179331763e-01 3.9885325154444967e-01 -5.9791551082847694e-01 + 1.2300352775530681e+00 4.3933593752314304e-01 -7.3686506483329739e-01 + 1.4716619477734549e+00 4.5400014414583867e-01 -8.7174213977331727e-01 + 1.7078235109866369e+00 4.4246043082317765e-01 -9.9841368708040845e-01 + 1.9329810955487114e+00 4.0668130723296236e-01 -1.1118836281408662e+00 + 2.1422356538761878e+00 3.4974740534805593e-01 -1.2088585595981711e+00 + 2.3323073651870918e+00 2.7510785826173589e-01 -1.2892129006399629e+00 + 2.5016469764598042e+00 1.8883521747489052e-01 -1.3519897717772573e+00 + 2.6436752059761872e+00 1.0381933992793968e-01 -1.3855911950911401e+00 + 2.7459207671672390e+00 3.3135343540665829e-02 -1.3732029137219361e+00 + 2.8153675905312614e+00 -2.9398976071552507e-02 -1.3177893070445095e+00 + 2.8720465867995113e+00 -1.0284366162609904e-01 -1.2385521639447721e+00 + 2.9248056411146939e+00 -1.9394775660267149e-01 -1.1429848380844907e+00 + 2.9801178629529099e+00 -3.0316694848967973e-01 -1.0292046472443863e+00 + 3.0438485121576027e+00 -4.3690826761168733e-01 -9.0959269795960040e-01 + 3.0763882628824488e+00 -6.6377370478458109e-01 -9.3353462780287433e-01 + id 11326 + loc 2.3904095869511366e-03 7.9451626539230347e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5064609808207740e-01:3.4877290363845348e-01:3.5192837014640010e-01:4.0403489781450386e-01:9.9662137494710634e-01:2.0965571804815766e-01:1.6704301683782821e+00:2.8707738319745113e-01:2.1207554875244026e+00:4.5064159162109657e-01:3.0000226775336909e+00:3.4545664075551563e-01:3.6465049881204599e+00 + CVs 20 + 1.4147292739389536e-01 2.8788507915698325e-01 -2.1651660346319315e-01 + 2.9745184447869588e-01 5.8013891439190657e-01 -4.0779792385221059e-01 + 4.6194265437450666e-01 8.5202759303475095e-01 -6.0489859865783102e-01 + 6.3326393632297406e-01 1.0937155925475992e+00 -8.1802077464267398e-01 + 8.0994046244998807e-01 1.2963245196788051e+00 -1.0457333844245806e+00 + 9.8859656053373857e-01 1.4484478902237266e+00 -1.2845215193704185e+00 + 1.1640060117967541e+00 1.5444712326121739e+00 -1.5317525081478820e+00 + 1.3295269876101683e+00 1.5863121135742024e+00 -1.7864311866393281e+00 + 1.4768532821106861e+00 1.5771672040130589e+00 -2.0459665628206380e+00 + 1.5970690617730803e+00 1.5201667014464060e+00 -2.3049857321882250e+00 + 1.6824489678068477e+00 1.4196829058911429e+00 -2.5557189181492772e+00 + 1.7277980388327312e+00 1.2821974926290238e+00 -2.7879405659015606e+00 + 1.7318994993355314e+00 1.1165464167318273e+00 -2.9911738852888328e+00 + 1.6976731074131868e+00 9.3258478091545416e-01 -3.1574938049076979e+00 + 1.6295597828352841e+00 7.4235776102610440e-01 -3.2795211682883569e+00 + 1.5299492914900830e+00 5.8052683538169680e-01 -3.3406563053802114e+00 + 1.4009652427537278e+00 5.5147596727559467e-01 -3.3385228822058699e+00 + 1.2660538650913935e+00 6.8827269302655159e-01 -3.3895070567588381e+00 + 1.1277410089441715e+00 5.3161136763746852e-01 -3.2606935170760365e+00 + id 11327 + loc 8.8649797439575195e-01 4.5190095901489258e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0521512889414821e-01:4.4538676955972945e-01:7.0539121966835827e-01:3.4453644957810481e-01:1.0304895691307585e+00:2.7991687185377634e-01:1.9974060869838959e+00:5.0521007674285934e-01:2.6114798135847979e+00:4.7433229369337299e-01:3.0000105985281360e+00:2.6588535413129222e-01:3.4350217070682909e+00:4.4629951307121524e-01:3.9997801425750814e+00 + CVs 20 + -1.5124996666028379e-01 2.4477000729547504e-01 2.0379983955234268e-01 + -2.4482719902385067e-01 5.4874132905838913e-01 4.0804863293366156e-01 + -3.2235920070739638e-01 8.8841549233995742e-01 6.0699239223191626e-01 + -4.2535989208838371e-01 1.2428104803132638e+00 8.1817992327418354e-01 + -5.9828580867526715e-01 1.5781733748264819e+00 1.0725611703938374e+00 + -8.7302002940815648e-01 1.8314069255905823e+00 1.3806201175352404e+00 + -1.2595062077896406e+00 1.9234794154640331e+00 1.7077303849433711e+00 + -1.7287989631269158e+00 1.8093735282825441e+00 1.9568151890671241e+00 + -2.2088904954259228e+00 1.5422074276703941e+00 2.0389194205147496e+00 + -2.6481138506422131e+00 1.2151344034775651e+00 1.9596612846073735e+00 + -3.0347694475764233e+00 8.6276415634094950e-01 1.7459927327175848e+00 + -3.3370741683994458e+00 4.8851148780722320e-01 1.3930091400947047e+00 + -3.5107025711209645e+00 1.2155939973923502e-01 9.3974960588951384e-01 + -3.6177987711515316e+00 -2.0140147648229867e-01 5.2520206511406431e-01 + -3.8081597396048719e+00 -4.6420000274830375e-01 2.5061844154294211e-01 + -4.1538336468518269e+00 -5.8235100794800387e-01 1.2471308869391345e-01 + -4.5953810775389039e+00 -3.8722299958229578e-01 1.7963880794186676e-01 + -4.9084069109766597e+00 2.5845737962558735e-02 3.8548470612201996e-01 + -5.2923601949774808e+00 3.6787977559309848e-02 2.3711288274028341e-01 + id 11328 + loc 8.5015721619129181e-02 7.3130798339843750e-01 1070 + blend 0.0000000000000000e+00 + interp 2.5497746308182645e+00:2.5497646308182644e+00:1.9366523193962122e+00:2.2424038191231901e+00:1.9510483273644030e+00:3.1518192307960935e-01:1.9909206964967159e+00:4.8316839740533468e-01:2.4013728498537024e+00:4.2466330470954194e-01:2.9780636974821673e+00:3.4184429347398915e-01:3.4880022830924990e+00:6.6271434995844281e-01:3.9346502812520927e+00 + CVs 20 + -3.2470924282126923e-01 2.8712360617641136e-01 3.8140332373409741e-01 + -5.9091157247482962e-01 5.0664237602276241e-01 6.4288115221932318e-01 + -8.0453146482484605e-01 7.1622406514260539e-01 8.9960584351012141e-01 + -9.6826809349563714e-01 9.2695206441331013e-01 1.1620654140629532e+00 + -1.1089615314727228e+00 1.1276619475521596e+00 1.3764169204807239e+00 + -1.2481846947292401e+00 1.3146991290721770e+00 1.5191866178915139e+00 + -1.3839108391934238e+00 1.4757088070355928e+00 1.6131766189889722e+00 + -1.5189559155293932e+00 1.6079787543095123e+00 1.7222821753297652e+00 + -1.7150466401478672e+00 1.7474221882316652e+00 1.8765931251315784e+00 + -1.9649223622247729e+00 1.8881893580594329e+00 1.9242555920559381e+00 + -2.1382177664127329e+00 2.0032225616481312e+00 1.8229331020300776e+00 + -2.2130521964013536e+00 2.1004746412509308e+00 1.6279376055531953e+00 + -2.1550119248808466e+00 2.1227946753660545e+00 1.4188108020147623e+00 + -1.9545405745918014e+00 2.0126822382798446e+00 1.3267035489758734e+00 + -1.6608904627249284e+00 1.7655627447932081e+00 1.3672345963074948e+00 + -1.3185020645730348e+00 1.3653989622046341e+00 1.4454538117703912e+00 + -9.0121825544613621e-01 6.9002664556713778e-01 1.3849530499414542e+00 + -6.3151812308311084e-01 1.0138541148865055e-01 9.0382916267365765e-01 + -7.2097406140081766e-01 2.0161538190993639e-01 7.8438058546933520e-01 + id 11329 + loc 7.7397656440734863e-01 2.0995160937309265e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8205749566305303e-01:2.7867919546261499e-01:5.4170080730941761e-01:2.9562834350980977e-01:1.0392309880613175e+00:3.8205367508809640e-01:1.9404658519237468e+00:2.9732449267896482e-01:2.2296117556268054e+00:2.7821086990256078e-01:3.4049303288795798e+00 + CVs 20 + -1.0872744289456446e-01 2.6673428232193563e-01 1.6843465671093469e-01 + -2.2783213856976556e-01 5.5373724355636122e-01 3.3490827930606082e-01 + -3.5370776505127322e-01 8.5880892717634461e-01 4.8922070570204151e-01 + -4.8111946447693543e-01 1.1794400480912934e+00 6.3230124012331324e-01 + -6.0427619669751398e-01 1.5133501602180777e+00 7.7425989995381039e-01 + -7.1647177335199452e-01 1.8572156965221240e+00 9.2996244985916232e-01 + -8.1085092345040077e-01 2.2058065705243144e+00 1.1186338398904343e+00 + -8.8001223017781560e-01 2.5492681987785364e+00 1.3619549448581132e+00 + -9.1456875426873052e-01 2.8692675853791587e+00 1.6785119793451140e+00 + -9.0506709424128651e-01 3.1394456952923511e+00 2.0780243425867804e+00 + -8.4602831847307169e-01 3.3282694289509691e+00 2.5576145860478761e+00 + -7.4010653051789810e-01 3.4058546417973123e+00 3.0964389203938358e+00 + -6.0155645557691984e-01 3.3538740766242823e+00 3.6661458528089654e+00 + -4.5397731673130226e-01 3.1627531830829567e+00 4.2437955589564362e+00 + -3.2530183656868716e-01 2.8260341296970211e+00 4.8082350624243162e+00 + -2.4188039910353176e-01 2.3409763025768253e+00 5.3323948719636540e+00 + -2.1661741974882565e-01 1.7268157870484211e+00 5.7721258321219873e+00 + -2.3060802287035032e-01 1.0596794542603591e+00 6.0787336071770959e+00 + -1.8227564925905526e-01 6.9030541383423150e-01 6.2232619893119496e+00 + id 11330 + loc 6.4856249094009399e-01 8.1625849008560181e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7132035076809092e-01:4.3917140027936452e-01:5.3857987478070690e-02:3.9680160728717273e-01:7.7283388484587046e-01:4.6058853556772839e-01:1.0848612129402129e+00:4.7131563756458328e-01:1.6573251264156550e+00:2.9244384941875967e-01:2.0421742190883068e+00:4.1181538403233842e-01:2.7901081331774931e+00:2.8273265749167609e-01:3.6779514497850201e+00 + CVs 20 + -2.6794299170235453e-01 4.2516895672796851e-01 1.1992838683696144e-01 + -4.7976315270983771e-01 8.3961133816224809e-01 2.3941808052352770e-01 + -6.4440259372525954e-01 1.2570129931174776e+00 3.7712780386360822e-01 + -8.2577554466332970e-01 1.6664176522717984e+00 4.5187349047637970e-01 + -1.0607843809050359e+00 2.0135469994078261e+00 3.7177902249703887e-01 + -1.3157740264996627e+00 2.2469493154810145e+00 1.3711370956552393e-01 + -1.5125126333251677e+00 2.3426101919527560e+00 -2.0305727278755947e-01 + -1.5365307106050416e+00 2.3085511914653978e+00 -5.6909031222798401e-01 + -1.3344508060068365e+00 2.2052500412549789e+00 -8.3601633588767776e-01 + -1.0312571257041647e+00 2.1022402256974617e+00 -9.5460960519170290e-01 + -7.3927047858086736e-01 1.9894366672643937e+00 -1.0015750983315965e+00 + -4.5601317867718244e-01 1.8332116255498696e+00 -9.8153905023878796e-01 + -1.9566050581363625e-01 1.6350561759372988e+00 -8.8670203593936603e-01 + 2.3580566430255689e-02 1.3912592482129944e+00 -8.3488265778008885e-01 + 2.0579813695695756e-01 1.0791358219410867e+00 -9.5535780797612035e-01 + 3.0108046753189438e-01 7.8283936494548145e-01 -1.2843724735501001e+00 + 2.3541093244758834e-01 7.1502553139701563e-01 -1.7702474872244496e+00 + 1.2005195152517772e-02 9.8842738039331535e-01 -2.1465023916899977e+00 + -5.5652144551657734e-02 9.4838300735486769e-01 -2.3385252809486858e+00 + id 11331 + loc 9.0012633800506592e-01 1.0506589710712433e-01 410 + blend 0.0000000000000000e+00 + interp 5.1669072909456326e-01:3.4132808715228047e-01:9.4638059215111314e-01:4.5997394792806062e-01:1.2590934078983635e+00:4.0558981248222847e-01:1.8489767386262748e+00:5.1434430247779039e-01:2.3719501072737366e+00:3.3273467809923318e-01:2.9759960028642833e+00:5.1668556218727235e-01:3.2828030218463464e+00:3.6408897954962166e-01:3.9998946863860616e+00 + CVs 20 + -3.3997824532073095e-01 4.0212086040802225e-01 1.6124215001302561e-01 + -6.5270546026918519e-01 7.9167915356107399e-01 3.0676983718668838e-01 + -9.7223011713515317e-01 1.1803565976059558e+00 4.6028088201169315e-01 + -1.3113028407631195e+00 1.5581507273710509e+00 6.6481868054991300e-01 + -1.6565626207637483e+00 1.8943485826590090e+00 9.5510385638595985e-01 + -1.9903206093542340e+00 2.1572537232964417e+00 1.3393080545892107e+00 + -2.3106766225686743e+00 2.3217607596569536e+00 1.8048461865128647e+00 + -2.6317682567201328e+00 2.3645063462004656e+00 2.3283369416472453e+00 + -2.9710160285968028e+00 2.2592638345550413e+00 2.8785088210170100e+00 + -3.3349057880017048e+00 1.9772685629152660e+00 3.4113129785331839e+00 + -3.6920995020029892e+00 1.5339634357988159e+00 3.8523037444027159e+00 + -3.9840675365660125e+00 1.0478439231782617e+00 4.1530729590280187e+00 + -4.1960859163342947e+00 6.2544987440041044e-01 4.3541177159641151e+00 + -4.3565574982385824e+00 2.6801715463815934e-01 4.5195382922862031e+00 + -4.4992080583062179e+00 -6.6935338653498322e-02 4.7036901311518147e+00 + -4.6603820910865741e+00 -4.2415847310752808e-01 4.9637882151865176e+00 + -4.8741110493164337e+00 -8.2433090563663991e-01 5.3265791000926077e+00 + -5.1520589972414790e+00 -1.2565447793056406e+00 5.7630087084695960e+00 + -5.4493207304801947e+00 -1.7062077974826448e+00 6.2608638607874321e+00 + id 11332 + loc 3.3994814753532410e-01 6.2600828707218170e-02 1077 + blend 0.0000000000000000e+00 + interp 4.5515654205516254e-01:2.6196705556277594e-01:1.4023216951206008e-01:4.3813942740521339e-01:1.0586769790711508e+00:2.6524851822444617e-01:1.8545499875981240e+00:3.1057695468009378e-01:2.4653497451686484e+00:4.4081031464401360e-01:3.0243561878422964e+00:4.5515199048974203e-01:3.9095383382806812e+00 + CVs 20 + -1.7588434279837653e-01 2.7843623299129616e-01 7.0787708119639095e-02 + -3.7893462263991862e-01 5.4983855951316118e-01 1.3215656734175399e-01 + -6.1436516960366494e-01 8.1012706600953277e-01 1.7870633946814912e-01 + -8.8515234708876211e-01 1.0506614646171957e+00 2.0264119990822965e-01 + -1.1915156256228321e+00 1.2584539149336231e+00 1.9358992537343289e-01 + -1.5287206810421685e+00 1.4192597887071439e+00 1.4273322165999275e-01 + -1.8864698371112252e+00 1.5188564015089034e+00 4.3767781400549266e-02 + -2.2494782972726952e+00 1.5459005322468617e+00 -1.0536754414562000e-01 + -2.5965444889684242e+00 1.4945846021688580e+00 -2.9629356264022866e-01 + -2.9072964127976046e+00 1.3702474681256689e+00 -5.0330378401550391e-01 + -3.1752633459041091e+00 1.1910102347690694e+00 -6.9186041117282182e-01 + -3.4042207072607704e+00 9.7769951391849719e-01 -8.3387985539559395e-01 + -3.5954049180157406e+00 7.5224757882672955e-01 -9.0530716219917617e-01 + -3.7475348417429246e+00 5.4990374405586617e-01 -8.8261560602843692e-01 + -3.8574264789769077e+00 4.2814828085980072e-01 -7.5422833953302759e-01 + -3.9334191058268693e+00 4.3179189281583819e-01 -5.6376602631189576e-01 + -4.0165836497528291e+00 5.4797013435823649e-01 -3.9218737421532912e-01 + -4.1200592257399613e+00 7.4786068273569883e-01 -2.8626959456389584e-01 + -4.3707866343439550e+00 6.2244736474218576e-01 -9.7708634299486091e-02 + id 11333 + loc 1.4605772495269775e-01 1.0126683861017227e-01 1075 + blend 0.0000000000000000e+00 + interp 3.6986163383140364e-01:3.0306021779356601e-01:7.1213269991427919e-01:2.6168924022152862e-01:1.1393383546972482e+00:2.7522292866337150e-01:2.0450819720798954e+00:3.5290240853148064e-01:2.9300279746453821e+00:3.6985793521506533e-01:3.8119127846329208e+00 + CVs 20 + -1.8926241598604240e-01 1.7380858261978344e-01 7.9703560477815752e-02 + -3.9648015102895240e-01 3.7845518483775498e-01 1.7533103963364655e-01 + -6.0224142666229141e-01 6.1660281322421751e-01 2.8564247568106821e-01 + -7.9942979772462130e-01 8.8551761476830693e-01 4.0230717032734786e-01 + -1.0082966861914993e+00 1.1848394425940751e+00 5.0885685010783133e-01 + -1.2514992130826776e+00 1.5094577188248428e+00 5.8497332168984695e-01 + -1.5504968461487154e+00 1.8512826668670592e+00 6.0696086831103213e-01 + -1.9291923138195313e+00 2.1902383482989474e+00 5.2491098231920796e-01 + -2.3688584306344902e+00 2.4508775671569376e+00 2.5973261559563510e-01 + -2.7562318069333607e+00 2.5356235578020936e+00 -1.7801847491697687e-01 + -3.0191292164952919e+00 2.4550834001066777e+00 -6.7735126359139486e-01 + -3.1827426237912100e+00 2.2524743508884217e+00 -1.1601764408054471e+00 + -3.2930381888303710e+00 1.9211654750735976e+00 -1.5804449777526093e+00 + -3.3652813469744451e+00 1.4399123819829995e+00 -1.9316908497462710e+00 + -3.3632623605346104e+00 8.5691907089166808e-01 -2.2803774524881133e+00 + -3.2557156708854667e+00 3.3225162163204369e-01 -2.7237783721723554e+00 + -3.0978725477605011e+00 6.6374921449817714e-02 -3.2799142411997129e+00 + -2.9793617747703163e+00 8.9144768813073316e-02 -3.8477467929438571e+00 + -2.8360603251575101e+00 -5.7238437145743060e-02 -4.4093834732135173e+00 + id 11334 + loc 1.3997372984886169e-01 6.1493670940399170e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1648396482861958e-01:5.1647879998897128e-01:3.4698280563100614e-01:4.5112757787184676e-01:9.1758122434921163e-01:3.1583021650121496e-01:1.4383217206763108e+00:2.9724775326039443e-01:2.3302286876951905e+00:4.5859027157735616e-01:2.9904968208517753e+00:4.6442674202747058e-01:3.4499221802841848e+00:4.8318142232408262e-01:3.9998633855886236e+00 + CVs 20 + 1.3991290953111943e-01 2.9279130046332674e-01 -5.6597227327350813e-02 + 2.4057927914791158e-01 6.0321764505710695e-01 -1.2041151460776758e-01 + 3.3588125680820313e-01 9.1991330592097253e-01 -1.9870327185438022e-01 + 4.4726506884919542e-01 1.2337379865765432e+00 -2.9930827495860585e-01 + 5.8418297186905632e-01 1.5403425202867247e+00 -4.3205919882526511e-01 + 7.5828148496512471e-01 1.8301054839916944e+00 -6.0404530004603196e-01 + 9.8001340828883066e-01 2.0840879535710561e+00 -8.1666244644048369e-01 + 1.2528988187181642e+00 2.2795184059339531e+00 -1.0608654413016427e+00 + 1.5726694091502358e+00 2.3983965995565790e+00 -1.3184661505022071e+00 + 1.9297092732913295e+00 2.4302512350072591e+00 -1.5673504965151910e+00 + 2.3110838287161992e+00 2.3731119079527283e+00 -1.7917826956300322e+00 + 2.7027363692850579e+00 2.2304597009368301e+00 -1.9895605959058003e+00 + 3.0909870613135726e+00 2.0035422002638783e+00 -2.1669096197657569e+00 + 3.4595191061657666e+00 1.6850361118358719e+00 -2.3317791378767261e+00 + 3.7840639072840716e+00 1.2578319880602971e+00 -2.4991559682593398e+00 + 4.0031409007331185e+00 7.1257083274825628e-01 -2.6871001235318901e+00 + 4.0220997746491820e+00 1.0152003841342649e-01 -2.8877778118289452e+00 + 3.8139321957417955e+00 -4.5986066582831553e-01 -3.1045389661072376e+00 + 3.6409484671994017e+00 -5.9921632754700394e-01 -3.1985097579635893e+00 + id 11335 + loc 6.1936122365295887e-03 8.5081434249877930e-01 1074 + blend 0.0000000000000000e+00 + interp 3.5259291160240369e-01:3.5258938567328768e-01:3.2231176872117828e-01:8.1006255716198183e-02:1.0086038775252413e+00:2.9099233803925956e-01:1.7584794244657325e+00:2.8743883567845985e-01:2.9021729711331572e+00:3.3233338531253381e-01:3.6458770030528385e+00 + CVs 20 + 2.0685377751614206e-01 3.7116884671738770e-01 -9.1468922352871185e-02 + 4.2141153274121462e-01 7.5580208990168418e-01 -2.1974200568401425e-01 + 6.4604527567050363e-01 1.1520221965440818e+00 -3.5950193269969699e-01 + 8.8441138530105867e-01 1.5556173843850711e+00 -5.0206420154974818e-01 + 1.1366068978487418e+00 1.9590907316026107e+00 -6.6289111069010409e-01 + 1.3901364801449796e+00 2.3421661696272413e+00 -8.8462345521008579e-01 + 1.6224997221809332e+00 2.6612591233922367e+00 -1.2151519594380669e+00 + 1.8032151026842460e+00 2.8340729111259906e+00 -1.6692513946075391e+00 + 1.8918714774840355e+00 2.7801706123718040e+00 -2.1779357134144184e+00 + 1.8830093182014940e+00 2.5281178497109078e+00 -2.6310533841665684e+00 + 1.8178642130071412e+00 2.1625055908829798e+00 -2.9915923357314580e+00 + 1.7488879570923404e+00 1.7484178468620324e+00 -3.2810220765207387e+00 + 1.7106496151430748e+00 1.3417265758825254e+00 -3.5322639346630447e+00 + 1.7036333235726402e+00 1.0119209873570678e+00 -3.7684865360834983e+00 + 1.7074447674987421e+00 8.0258318322215660e-01 -3.9868754211659385e+00 + 1.7118237738409476e+00 6.8833082890888508e-01 -4.1746334332890420e+00 + 1.7385533072368697e+00 6.1875982128090590e-01 -4.3747964798032442e+00 + 1.8141345726583886e+00 6.3458185968253367e-01 -4.6433081640350569e+00 + 1.9052611693651604e+00 7.7078211879109459e-01 -4.8859868920383427e+00 + id 11336 + loc 1.3238435983657837e-01 5.9996634721755981e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5786791849914971e-01:3.8272723237653539e-01:5.2720848245111707e-01:2.7261437837695646e-01:1.0211474961563451e+00:4.5786333981996474e-01:1.9266976380599248e+00:3.2960755617462162e-01:2.2156833936726796e+00:2.5576770230308182e-01:3.0537200741327548e+00:3.6071992782454981e-01:3.7879203462646425e+00 + CVs 20 + -9.0955556115719788e-03 2.6361975549106820e-01 -4.1170869175920735e-02 + 3.0156657821414634e-03 5.1284155002410059e-01 -1.1675430151912958e-01 + 2.9336864075436009e-02 7.4227281906033282e-01 -2.0391746121402393e-01 + 6.8134495380015980e-02 9.6079872845888559e-01 -2.9561674478830430e-01 + 1.2114007850603969e-01 1.1613908163766065e+00 -3.9918947775496783e-01 + 1.8797860453810378e-01 1.3349533089438137e+00 -5.1414291805413470e-01 + 2.6548924628965315e-01 1.4851655280113598e+00 -6.3322014448846664e-01 + 3.4712473062974702e-01 1.6309517587570919e+00 -7.4788512241539518e-01 + 4.2854013949833181e-01 1.7978871312339753e+00 -8.5098695525377943e-01 + 5.1534524296034179e-01 2.0115380878863607e+00 -9.4249083245529641e-01 + 6.2394138656299969e-01 2.2936036559717259e+00 -1.0442979664474659e+00 + 7.7684688637586929e-01 2.6378886399411594e+00 -1.2125450258539427e+00 + 9.7307111950401393e-01 2.9696663325325190e+00 -1.5062742080295657e+00 + 1.1567882969463685e+00 3.1758403654159966e+00 -1.8963385982815588e+00 + 1.3003718021300332e+00 3.2230661211267231e+00 -2.2938744092641596e+00 + 1.4511627542782128e+00 3.1318997988280106e+00 -2.6639938898448587e+00 + 1.6504577518631289e+00 2.9023442156510137e+00 -3.0000584807966120e+00 + 1.8422645500887449e+00 2.5517270509779850e+00 -3.2839109492446146e+00 + 1.8407364337142162e+00 2.2640025480713257e+00 -3.3794039690821047e+00 + id 11337 + loc 7.3946279287338257e-01 6.2772053480148315e-01 1047 + blend 0.0000000000000000e+00 + interp 3.2217042272252097e+00:3.2216942272252096e+00:2.6289356370956685e-01:3.7202225635186587e-01:3.5415763401859757e-01:4.3598686816250892e-01:1.0007578853148591e+00:2.8260263595529411e-01:1.4528822554864704e+00:3.4869896273873430e-01:2.0003039625125418e+00:5.3284014127083079e-01:2.4715023705827210e+00:2.8277144485165867e-01:2.5057082815927636e+00 + CVs 20 + 2.2952887249079768e-01 7.4498200094108458e-01 -6.3528217343886051e-01 + 5.0821690862002566e-01 1.4420296455231159e+00 -1.2168816488917660e+00 + 8.6360024859358364e-01 2.1193779697552708e+00 -1.7054455690584536e+00 + 1.3341801570060867e+00 2.7416499009967090e+00 -1.9491145622177044e+00 + 1.8694535060820818e+00 3.1813626503869110e+00 -1.8390541840807177e+00 + 2.3512448763181402e+00 3.3478273096062949e+00 -1.4735167423107272e+00 + 2.7011451219035707e+00 3.2523794896138165e+00 -1.0313017833436551e+00 + 2.9192027930081035e+00 2.9821106888820399e+00 -6.3727099243839924e-01 + 3.0437542518921425e+00 2.6307519132911366e+00 -3.2937806281765636e-01 + 3.1092684859953570e+00 2.2454047310160972e+00 -7.3913259153973176e-02 + 3.1087728248973860e+00 1.7644550151272971e+00 2.0408632296649398e-01 + 2.9725166391510056e+00 1.0768296450584058e+00 5.5416903436430054e-01 + 2.6361646257265106e+00 2.2429798587802752e-01 1.0359815957714265e+00 + 2.1385715041193332e+00 -5.8281498670022391e-01 1.7459891948090374e+00 + 1.7177687279724723e+00 -1.0595825460680106e+00 2.7764516911801529e+00 + 1.7259348925975622e+00 -9.0426019267970270e-01 3.8680154302686356e+00 + 2.1130890289259310e+00 -2.5330492671179528e-01 4.5927289303950980e+00 + 2.6340579528577530e+00 6.0071874138649406e-01 4.8873028320688814e+00 + 3.1116114330128024e+00 1.4357425265479493e+00 5.0135738947200723e+00 + id 11338 + loc 9.6535325050354004e-01 9.4052362442016602e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5712945555386386e-01:3.0630712692744372e-01:8.5412142056116247e-01:4.5712488425930836e-01:1.4979136408907934e+00:4.2627268615738007e-01:1.9643278610942390e+00:2.6599237106600909e-01:2.2899387968287219e+00:2.5628154097127387e-01:2.9831367011209142e+00:2.4769223076163144e-01:3.7653095024946879e+00 + CVs 20 + 1.8443459022359646e-01 3.3495869350341234e-01 -3.8095466260970029e-01 + 3.5584589777817666e-01 6.6916646940424140e-01 -7.4723500965759893e-01 + 4.9390039185127688e-01 9.8613419051652151e-01 -1.1308040550584619e+00 + 5.8809748431860487e-01 1.2714257988731310e+00 -1.5376930571206098e+00 + 6.4788915940008440e-01 1.5057223498704169e+00 -1.9610988072636857e+00 + 7.0923582164835652e-01 1.6867839745080653e+00 -2.4040776939070194e+00 + 8.0885570526488926e-01 1.8342128583002080e+00 -2.8791296469740533e+00 + 9.6863779866509858e-01 1.9629279756335274e+00 -3.3878239822796634e+00 + 1.2005480342005139e+00 2.0673086256878492e+00 -3.9148826108884727e+00 + 1.5031077807438180e+00 2.1232234631221409e+00 -4.4435187281977049e+00 + 1.8503863971862211e+00 2.0894573613955720e+00 -4.9640575772637003e+00 + 2.1842841999262350e+00 1.9039230234732396e+00 -5.4702399715461372e+00 + 2.4294290874249840e+00 1.5202827203714584e+00 -5.9374768737561840e+00 + 2.5460863493708081e+00 9.9057083560528070e-01 -6.3261995111136802e+00 + 2.5380087117240042e+00 4.2292430273983850e-01 -6.6287418124343711e+00 + 2.3611858970329460e+00 -5.8603550297375628e-02 -6.8645626044234307e+00 + 1.9986774789349107e+00 -2.4455067336818148e-01 -7.0657734413538016e+00 + 1.6935070905729104e+00 -1.9827202309761560e-01 -7.2422092272270753e+00 + 1.4345976955774320e+00 -3.2046006854497322e-01 -7.3873704024455700e+00 + id 11339 + loc 4.3267992138862610e-01 8.9851343631744385e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7111146842182361e-01:2.7143486427678210e-01:3.3906929998632984e-02:4.1240480387195250e-01:1.0000006706330287e+00:2.7242938409625228e-01:1.8385178331660106e+00:4.7110675730713941e-01:2.3922389178629131e+00:4.5571373613521798e-01:3.0002449527770088e+00:4.7023622801887865e-01:3.3327864592255469e+00 + CVs 20 + 2.1989955913192541e-01 3.3336842322587362e-01 -2.9417096800440751e-01 + 4.4839642640268423e-01 6.4393502110870715e-01 -5.6688219019902297e-01 + 6.9302303667433574e-01 9.2423826986212865e-01 -8.2384994886718210e-01 + 9.5441994301911592e-01 1.1715576529443426e+00 -1.0673952580209889e+00 + 1.2253826379056805e+00 1.3844889822306536e+00 -1.2946151723593389e+00 + 1.4926666925116663e+00 1.5647423767279569e+00 -1.5014139883517894e+00 + 1.7412792224406168e+00 1.7254186582623066e+00 -1.6793272908146806e+00 + 1.9684811322217646e+00 1.8994555691779953e+00 -1.8225483857032965e+00 + 2.1870655976764151e+00 2.0954832565978516e+00 -1.9874394938870490e+00 + 2.3760413531872118e+00 2.2423822696015945e+00 -2.2423378869009563e+00 + 2.4857913425513218e+00 2.2820741974005458e+00 -2.5661321266371133e+00 + 2.4762098543094995e+00 2.1909936009311211e+00 -2.8922458003983382e+00 + 2.3701936227018581e+00 1.9376923316839050e+00 -3.1582501566229322e+00 + 2.2672182858928642e+00 1.4814930672479045e+00 -3.3356218166554843e+00 + 2.2680952564399735e+00 8.3162253684296372e-01 -3.4894288994078599e+00 + 2.4196982192864365e+00 6.5008221487438705e-02 -3.7755151377413911e+00 + 2.7366017855489271e+00 -6.3819164991431154e-01 -4.3543753040830229e+00 + 3.0815142059766787e+00 -8.2414299047649697e-01 -5.0652829218385236e+00 + 3.2162024470189081e+00 -4.2704115917694918e-01 -5.4079177346637453e+00 + id 11340 + loc 6.5369480848312378e-01 3.1501564383506775e-01 410 + blend 0.0000000000000000e+00 + interp 4.7478210530003201e-01:2.8288462482486471e-01:9.6360634451196880e-01:3.1017934731252200e-01:1.9730890535209440e+00:4.7477735747897903e-01:2.3921217096631771e+00:3.9411149340287244e-01:3.0033027152013365e+00:2.8011087362544329e-01:3.9965395366058303e+00 + CVs 20 + -4.0195560186806623e-01 3.2104686895818013e-01 9.9842297464021984e-02 + -7.6376362250011687e-01 5.9017462934738896e-01 2.0036073847775282e-01 + -1.1345146464008260e+00 8.3361591302464866e-01 2.9415328550959130e-01 + -1.5263171813168710e+00 1.0446421065196954e+00 3.9460378534594176e-01 + -1.9173419219897556e+00 1.1953698899309932e+00 5.1940001201973374e-01 + -2.2810097057001832e+00 1.2646481711883348e+00 6.7676334819968931e-01 + -2.5938680870969288e+00 1.2500362097365034e+00 8.6466159249839203e-01 + -2.8357744615739104e+00 1.1684925214629107e+00 1.0715588988095262e+00 + -2.9992443355640299e+00 1.0518799179982510e+00 1.2824326119839111e+00 + -3.0985165149450329e+00 9.3047450108878171e-01 1.4934822383894322e+00 + -3.1730095163741208e+00 7.8134551318845191e-01 1.7159042759156156e+00 + -3.2582954242791882e+00 5.1111628150287380e-01 1.9416407211594326e+00 + -3.3538662387987719e+00 7.7871434104429760e-02 2.1719715154702461e+00 + -3.4502947022922239e+00 -4.7262427559043729e-01 2.4697691756762921e+00 + -3.5502782994967044e+00 -1.0567473793926772e+00 2.9106116464232077e+00 + -3.6736602217058074e+00 -1.5951630492677986e+00 3.5321627575517329e+00 + -3.8697714557006830e+00 -2.0643930607999361e+00 4.3070119964235332e+00 + -4.1839396763009242e+00 -2.4607703485245422e+00 5.1476824426335632e+00 + -4.5485014848516929e+00 -2.7406577171752784e+00 5.9313269795183903e+00 + id 11341 + loc 3.7929630279541016e-01 6.9381093978881836e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3348958057862880e-01:2.7398948164229525e-01:4.4335576301691715e-03:2.6648262073727347e-01:9.7653396927076064e-01:4.3348524568282304e-01:1.2691050692649988e+00:3.7211600864422023e-01:1.9984097484080863e+00:3.9324201040410789e-01:2.7534998046645125e+00:3.2266600734595435e-01:3.1314440295559702e+00 + CVs 20 + -3.1024627123647253e-01 3.6079174126798275e-01 2.6082757022318293e-01 + -5.6627357519986998e-01 6.3912863259368224e-01 4.7637428658419784e-01 + -7.7581984544174198e-01 8.8154443638867397e-01 7.0786590460667476e-01 + -9.6579747285842543e-01 1.1086240757689136e+00 9.4327329990617426e-01 + -1.1675100356038397e+00 1.3216587428914370e+00 1.1279760227948590e+00 + -1.3956988468752956e+00 1.5167049547143840e+00 1.2325260425623514e+00 + -1.6426877465438543e+00 1.6835519316087901e+00 1.2583544365298132e+00 + -1.8991824946188598e+00 1.8154159019452174e+00 1.2179337900180804e+00 + -2.1566368722988876e+00 1.9109340202290368e+00 1.1083405462553813e+00 + -2.3695741146930995e+00 1.9652772125034044e+00 9.1452346806068152e-01 + -2.4876753664836340e+00 1.9874594122230467e+00 6.5939486894116972e-01 + -2.5125840663941776e+00 1.9928909771705545e+00 3.6078821249807480e-01 + -2.4358715697379054e+00 1.9684535569788979e+00 5.1865030015232572e-02 + -2.2662789755433543e+00 1.9133556404163972e+00 -1.5244112688551792e-01 + -2.0489506910821027e+00 1.8606239636676780e+00 -1.7326653328616670e-01 + -1.7975799094480887e+00 1.7833889661806488e+00 -2.0267501063667037e-02 + -1.4787475488220867e+00 1.5401884426292742e+00 2.9434597712575072e-01 + -1.0713015146612075e+00 9.9123193036428958e-01 4.9665372418546594e-01 + -1.0426483433574700e+00 1.1011772997044704e+00 3.5754152620674984e-01 + id 11342 + loc 4.2364722490310669e-01 7.3234051465988159e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3345736667363077e-01:3.5563484003958318e-01:2.6175781762930050e-01:3.8233265518854803e-01:9.9668252649435862e-01:3.4568784882454950e-01:1.7095697703960973e+00:3.3460188418047893e-01:2.2632195977159397e+00:3.7245934251654783e-01:3.0257666123291669e+00:4.3345303209996405e-01:3.8067431831417449e+00 + CVs 20 + 1.6095770389994773e-01 2.7980917944083938e-01 -5.9959389665233925e-02 + 3.3622184397376331e-01 5.4626411558841492e-01 -1.3599150769244772e-01 + 5.1231469922470707e-01 7.9481870998605664e-01 -2.3398054624784156e-01 + 6.8013677937268124e-01 1.0212244076852435e+00 -3.5733936679376599e-01 + 8.3557756368330571e-01 1.2201831708292659e+00 -5.0635085418641035e-01 + 9.7442966020528776e-01 1.3876714666136880e+00 -6.7815666065904823e-01 + 1.0943166829197024e+00 1.5204490314087964e+00 -8.6664665540159236e-01 + 1.1934219097150642e+00 1.6177987655501227e+00 -1.0637857193664346e+00 + 1.2687967395537671e+00 1.6840834448538180e+00 -1.2629927747523733e+00 + 1.3182739007075279e+00 1.7260914523818152e+00 -1.4634053515754237e+00 + 1.3433860958922228e+00 1.7505552957689283e+00 -1.6654788591600260e+00 + 1.3505841595869865e+00 1.7654520856759270e+00 -1.8655974062113190e+00 + 1.3502281232672995e+00 1.7753881752305962e+00 -2.0571736464855732e+00 + 1.3579237868883958e+00 1.7765115562296789e+00 -2.2228219442690555e+00 + 1.3991243914963327e+00 1.7731141955075524e+00 -2.3355375040900732e+00 + 1.4929917439223330e+00 1.7699424618773532e+00 -2.3991382477021652e+00 + 1.6350062937074572e+00 1.7530668230568112e+00 -2.4470546223839085e+00 + 1.7727130663968862e+00 1.7045089909709301e+00 -2.5158633209439056e+00 + 1.4843430609125754e+00 1.6831453897004922e+00 -2.6786334704996562e+00 + id 11343 + loc 2.5593778491020203e-01 2.8302201628684998e-01 1047 + blend 0.0000000000000000e+00 + interp 5.0546381660677120e-01:4.0133518436257060e-01:3.5137495476314351e-01:2.6474761564900301e-01:9.7935926711707533e-01:3.6059088200964290e-01:1.8931585421286414e+00:2.7026955479058984e-01:2.7761635478544697e+00:3.0438247232088966e-01:3.2584342545419336e+00:5.0545876196860517e-01:3.9987097209108589e+00 + CVs 20 + -6.5093563886112882e-01 6.2109181485405540e-01 -9.6072392545977048e-02 + -1.1938145765956536e+00 1.1938561903982634e+00 -2.3666531339628818e-01 + -1.6378146137006715e+00 1.7412169215583582e+00 -4.4749361540135280e-01 + -1.9647016094796914e+00 2.2669550508513585e+00 -7.6347382802508867e-01 + -2.1386463186558937e+00 2.7452473879200281e+00 -1.2162321464907313e+00 + -2.1526649763754238e+00 3.1177167506822041e+00 -1.8015543295386920e+00 + -2.0345227912671477e+00 3.3004038023650408e+00 -2.4731599992164739e+00 + -1.8425301329312631e+00 3.2194127768866130e+00 -3.1489775159970526e+00 + -1.6391842448096035e+00 2.8589329971894575e+00 -3.7210972857039417e+00 + -1.4434375672215833e+00 2.2852322409632899e+00 -4.0945989468316277e+00 + -1.2342699488652664e+00 1.6260738774993255e+00 -4.2192357893535464e+00 + -9.9585379232704163e-01 1.0341653503436519e+00 -4.1096598875453809e+00 + -7.4059666289937320e-01 6.2013609511771861e-01 -3.8487440294497035e+00 + -4.9877942014304966e-01 3.9477803723692401e-01 -3.5406904807480268e+00 + -2.7514754503573297e-01 2.8508363590164759e-01 -3.2476410863267535e+00 + -5.4690573054890834e-02 2.3081197278058210e-01 -2.9896462266976331e+00 + 1.8203515095241110e-01 1.8598807909605497e-01 -2.7922104231382288e+00 + 5.5736229415442240e-01 1.4943416638084966e-01 -2.5598952050638988e+00 + 5.5581470041967629e-01 4.0416424749945934e-01 -2.4222197624477286e+00 + id 11344 + loc 7.1689319610595703e-01 8.4097254276275635e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1005500224869182e-01:5.1004990169866937e-01:3.7488750979052099e-01:4.0186074494850288e-01:9.5847302619955577e-01:4.2976623628290406e-01:1.3960326826239291e+00:3.0903253062898822e-01:2.0384527722237045e+00:4.2036493051788404e-01:2.9981138541102368e+00:4.5476415482494847e-01:3.4114768623370209e+00:4.3491961972780058e-01:3.9994016741114837e+00 + CVs 20 + 1.5098930416769241e-02 3.5041778445571348e-01 -1.1817442751279518e-01 + 6.2744755643571903e-02 6.9297830094961443e-01 -2.5365646744064629e-01 + 1.3243738016832590e-01 1.0242418320625390e+00 -4.1807862856784894e-01 + 2.1290714950921352e-01 1.3395821704602633e+00 -6.2461877920159981e-01 + 2.9325895767038951e-01 1.6292381364576751e+00 -8.8641387504018554e-01 + 3.6903781819234882e-01 1.8819772635659791e+00 -1.2089247415745434e+00 + 4.5675340373566553e-01 2.0868932535815539e+00 -1.5813912375476096e+00 + 5.8157560692574584e-01 2.2359893430154680e+00 -1.9811690914712845e+00 + 7.5883111708079387e-01 2.3246344661444969e+00 -2.3832437575990273e+00 + 9.9070680219273655e-01 2.3470625728595249e+00 -2.7629063024792790e+00 + 1.2635462114781448e+00 2.2937361337508548e+00 -3.0936162383546124e+00 + 1.5406881632297715e+00 2.1598194607051351e+00 -3.3512314713813374e+00 + 1.7663295226857101e+00 1.9527557546105889e+00 -3.5231037267417600e+00 + 1.8927490110224763e+00 1.6768196111209357e+00 -3.6117245633883623e+00 + 1.9043240152676786e+00 1.3418022086826535e+00 -3.6201105745957598e+00 + 1.8189208759425328e+00 1.0101187403639624e+00 -3.5522238029496238e+00 + 1.6787546005305181e+00 7.9614538383690625e-01 -3.4366178982141009e+00 + 1.5382804553597487e+00 7.4871060879944884e-01 -3.3169382251936677e+00 + 1.1548559877858504e+00 7.1366866024067221e-01 -3.1923901185415930e+00 + id 11345 + loc 4.3200597167015076e-01 7.9786229133605957e-01 1047 + blend 0.0000000000000000e+00 + interp 4.3596238490966532e-01:3.3294350065661493e-01:9.7174657317426194e-01:3.3549451987892176e-01:1.6829196657161125e+00:2.8486855845145242e-01:2.1690603626576732e+00:4.0903476121695576e-01:2.8686862114726903e+00:4.3595802528581623e-01:3.2945825344602433e+00:2.8266641290013422e-01:3.9152254533574120e+00 + CVs 20 + 1.4300528218787845e-01 7.3085205679105236e-01 -3.3037161772906426e-01 + 2.9719017132661835e-01 1.4547054363963632e+00 -6.2905502823577752e-01 + 4.8107423479141731e-01 2.1543611186141391e+00 -8.8561181531722577e-01 + 7.1758402992751968e-01 2.7831657186260346e+00 -1.0300593226974284e+00 + 1.0291474355091310e+00 3.2971163245130546e+00 -9.7070914404742470e-01 + 1.3935031650498984e+00 3.6440814088762110e+00 -6.8511547160325637e-01 + 1.7424361229650793e+00 3.7727220996352786e+00 -2.3850191866867632e-01 + 2.0195384768683962e+00 3.6695303585052494e+00 2.7760443825088643e-01 + 2.2080945514893817e+00 3.3740445101025101e+00 7.7896419020971486e-01 + 2.3350109525085521e+00 2.9332291035215827e+00 1.2264170579458875e+00 + 2.4294536194417531e+00 2.3392317183979663e+00 1.6201647302665145e+00 + 2.4787913728463278e+00 1.5650122143278313e+00 1.9771681248669748e+00 + 2.4260531017874389e+00 6.6308837032555357e-01 2.3715791302370843e+00 + 2.2763024665802201e+00 -1.8304521109877347e-01 2.8798805878259199e+00 + 2.1973433452856734e+00 -7.2648222697176945e-01 3.4856286978634285e+00 + 2.3506111809713435e+00 -8.7269938336469477e-01 4.0841404761426459e+00 + 2.7263710282024922e+00 -6.8572664178723364e-01 4.6147650781462781e+00 + 3.2154464260147742e+00 -2.5507324807804022e-01 5.0269332606321466e+00 + 3.6894492657176001e+00 2.9310496452316759e-01 5.4265245400002016e+00 + id 11346 + loc 5.2216970920562744e-01 9.6924370527267456e-01 1075 + blend 0.0000000000000000e+00 + interp 4.0809832717152383e-01:3.2077600672229956e-01:9.9780322144376143e-01:3.8362362180668269e-01:1.1369625817817770e+00:4.0809424618825213e-01:1.8338674478677524e+00:3.5930407968975492e-01:2.5941728120910250e+00:3.0456732186685170e-01:3.0393905414135851e+00:3.2528145579936663e-01:3.9821646993136128e+00 + CVs 20 + 1.0394897705981357e-01 2.2896125862194636e-01 -1.9954326869016323e-01 + 1.7007193149552732e-01 4.5619048782955968e-01 -3.9932801830320358e-01 + 2.1388871846816099e-01 6.7013408865895263e-01 -6.0377347845589147e-01 + 2.4131787194351553e-01 8.6191869294331880e-01 -8.0740171064807564e-01 + 2.5439244859321658e-01 1.0368004774010986e+00 -1.0033152632219340e+00 + 2.5749765210722969e-01 1.2032353887074800e+00 -1.1937332750373846e+00 + 2.5217557659611906e-01 1.3648210065879018e+00 -1.3973659834232059e+00 + 2.3964419745779131e-01 1.5235839613140927e+00 -1.6334234135244727e+00 + 2.2800381166454170e-01 1.6821189719010090e+00 -1.9030796236103806e+00 + 2.3013003728649750e-01 1.8428280863743194e+00 -2.1933172171209430e+00 + 2.5673497896804431e-01 2.0033155611226841e+00 -2.4928770265874718e+00 + 3.1534355175517137e-01 2.1495505500141752e+00 -2.7966876805356140e+00 + 4.0641365315569900e-01 2.2576295706047493e+00 -3.1049123784300527e+00 + 5.2044679193520671e-01 2.2925748454370352e+00 -3.4160906203167398e+00 + 6.5527095660100665e-01 2.2385598666060833e+00 -3.7039408671383689e+00 + 8.3385517789081853e-01 2.1289722762211722e+00 -3.9268832059493861e+00 + 1.0693315650965425e+00 1.9924860033896752e+00 -4.0803043185841599e+00 + 1.2802238811443742e+00 1.7776612162097614e+00 -4.1989886392215583e+00 + 1.2265685475262824e+00 1.3656298186693534e+00 -4.2823310542007453e+00 + id 11347 + loc 4.1206067800521851e-01 3.7357074022293091e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0361480360621558e-01:2.6154632031703212e-01:3.9903965325901047e-01:4.4421113564852183e-01:9.3916911515988344e-01:5.0360976745817954e-01:1.2438567533287701e+00:4.1002422709075959e-01:1.9665923925403903e+00:3.9222092357350613e-01:2.7308224701861699e+00:4.1057615370168005e-01:3.2567585047385315e+00:4.6031755791632351e-01:3.8661513029072028e+00 + CVs 20 + -2.9362703900825055e-01 3.1331129971788862e-01 -1.0678899613211837e-01 + -5.6403219443365560e-01 6.0956884086320728e-01 -1.9113930929112699e-01 + -8.3076308541026789e-01 8.9077773766821233e-01 -2.5985383948144936e-01 + -1.1011285739050285e+00 1.1611697546714732e+00 -3.1297634482561421e-01 + -1.3475456860121926e+00 1.4215709067344677e+00 -3.3952348648091846e-01 + -1.5076671777810446e+00 1.6383385876447771e+00 -3.2327449043410450e-01 + -1.5553799652394793e+00 1.8025117617399609e+00 -2.6396937261121423e-01 + -1.6059860491422671e+00 1.9548859115723989e+00 -1.7367382361735417e-01 + -1.7729563240714925e+00 2.0680853972395252e+00 -5.2586909155711514e-02 + -2.0768784017171176e+00 2.0811106996851789e+00 7.8587071005693176e-02 + -2.4951239577581834e+00 1.9386475262149876e+00 1.6220200832181214e-01 + -2.9479547741422825e+00 1.6439255826504786e+00 1.2921413210079052e-01 + -3.3272561724548795e+00 1.2722689366124385e+00 -3.9272461775643142e-02 + -3.5853044921009158e+00 9.3618272095274979e-01 -2.7738529626340303e-01 + -3.7408581196867270e+00 7.4152158787227984e-01 -4.8258518819469215e-01 + -3.8508089854997540e+00 6.9485554027944307e-01 -6.2920003781956879e-01 + -3.9982758935250455e+00 7.4669524804036091e-01 -7.5878222318979816e-01 + -4.2635800318469341e+00 8.6235525426736903e-01 -9.4111583475239835e-01 + -3.8827339473542337e+00 6.0642492629148981e-01 -8.7610849889361719e-01 + id 11348 + loc 5.7881563901901245e-01 5.5535066127777100e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8491164115814983e-01:4.7972263697887579e-01:5.3792438872896020e-01:4.1808103674640323e-01:1.0461315245483067e+00:3.2053556882313639e-01:1.8859434164096454e+00:4.8490679204173825e-01:2.2060913252656098e+00:2.9701527942517419e-01:3.0446643284046924e+00:4.1028982439234224e-01:3.9238206901919832e+00 + CVs 20 + 2.0076656172995888e-01 2.7161915978112072e-01 -2.8257481508252602e-01 + 3.5963518645733966e-01 5.6720134551979495e-01 -5.6662983354623186e-01 + 5.0945792919260913e-01 8.3426764005559217e-01 -8.7161348541020989e-01 + 6.6457954832722177e-01 1.0486540481094742e+00 -1.2027674201057594e+00 + 8.3336303873978201e-01 1.2018262977374579e+00 -1.5522019143244898e+00 + 1.0287059937174750e+00 1.2928688184483921e+00 -1.9063513290007259e+00 + 1.2602538738387752e+00 1.3262970547723767e+00 -2.2499885636552417e+00 + 1.5315516214895961e+00 1.3093589964637782e+00 -2.5691374621688885e+00 + 1.8388000812614145e+00 1.2505512021003053e+00 -2.8529782594148814e+00 + 2.1711358998692574e+00 1.1591051123563969e+00 -3.0990816999017321e+00 + 2.5138268952761207e+00 1.0401733365491932e+00 -3.3130518998992056e+00 + 2.8518479687270730e+00 8.9027566183981632e-01 -3.5053281141492865e+00 + 3.1709843057272566e+00 6.9748513578259019e-01 -3.6893932157002434e+00 + 3.4535867364031674e+00 4.4583350312442893e-01 -3.8828284399553108e+00 + 3.6656063979431810e+00 1.2206032381048093e-01 -4.1079393313083532e+00 + 3.7587258991178993e+00 -2.4751766863126745e-01 -4.3788364805030371e+00 + 3.7250791712027933e+00 -5.8192405545160586e-01 -4.6795988173356484e+00 + 3.6141917898681517e+00 -8.2802866456056567e-01 -4.9818378234693164e+00 + 3.5108232605417187e+00 -9.5043909516110503e-01 -5.2150250983763859e+00 + id 11349 + loc 9.6766775846481323e-01 7.9555529356002808e-01 1086 + blend 0.0000000000000000e+00 + interp 2.4785214797816715e+00:9.7340625260104885e-01:5.3917367193968557e-03:2.4785114797816714e+00:1.9481373682454954e+00:2.1118995733388748e+00:1.9625525405990913e+00:1.0176002314473342e+00:2.0006280796797418e+00:7.4672792056279114e-01:2.0095753819656079e+00:2.9113335604958174e-01:2.7351012596077622e+00:4.3042898292833981e-01:3.5923300838516190e+00:1.2713892803377571e+00:3.9994924183896781e+00 + CVs 20 + -2.0575362554664728e-01 4.3173711053978270e-01 5.4104417025403106e-01 + -4.0510133286090771e-01 7.7942316474709283e-01 9.5955483414646692e-01 + -5.9482272388465041e-01 1.0950078626470618e+00 1.3506063667070565e+00 + -7.8726492448543273e-01 1.4025491904393026e+00 1.7394621945662410e+00 + -9.9930083462981600e-01 1.6982564554137840e+00 2.0963820902631096e+00 + -1.2402979666247003e+00 1.9758595616728207e+00 2.3929124188775064e+00 + -1.5094035648116113e+00 2.2269992258126248e+00 2.6045143275496532e+00 + -1.7975527475466451e+00 2.4415006144273876e+00 2.7063303195439592e+00 + -2.0849292908167163e+00 2.6020472351978774e+00 2.6685940463927729e+00 + -2.3274507993934428e+00 2.6836415118921528e+00 2.4896177073718770e+00 + -2.4977838877489704e+00 2.6771549358529576e+00 2.2178148871881787e+00 + -2.6054761415488783e+00 2.5738988058530383e+00 1.8972806880898632e+00 + -2.6688534687501311e+00 2.3673640090028383e+00 1.5791344231393578e+00 + -2.7117489185204979e+00 2.0880005260791754e+00 1.3077274623409574e+00 + -2.7484420956674604e+00 1.7866724129490650e+00 1.0863827065525138e+00 + -2.7782750248091137e+00 1.5142762296397363e+00 9.0254345406597281e-01 + -2.8055081151628425e+00 1.3048649798728844e+00 7.6325461951330753e-01 + -2.8304759362268408e+00 1.1473055099583913e+00 6.6194874475349041e-01 + -2.7667243030134285e+00 1.0986882907189837e+00 3.5077161583881483e-01 + id 11350 + loc 8.0060923099517822e-01 3.4492272138595581e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9901827574621362e-01:3.7329364796007353e-01:4.2650625582598689e-03:3.9901428556345619e-01:7.9801144134480273e-01:2.4372372301526130e-01:1.1139610941284899e+00:3.4185283687656481e-01:2.0101085850553675e+00:3.9580443966430534e-01:2.6069539137299844e+00:3.4759000422711722e-01:3.0094117831190661e+00:3.2266595172310125e-01:3.6194775694192298e+00 + CVs 20 + -2.3625964225561630e-01 2.7672550457488443e-01 2.0662738979296200e-01 + -4.4097262430260475e-01 5.5967882794637036e-01 4.1616872629736962e-01 + -6.2499613834198819e-01 8.3591644470320370e-01 6.3842589634484825e-01 + -7.8723318492906769e-01 1.0992330135754051e+00 8.7210986515016675e-01 + -9.1762847495618116e-01 1.3506240777817737e+00 1.1132343828901197e+00 + -1.0263949954316791e+00 1.5986097182622512e+00 1.3857801473216158e+00 + -1.1481144848825087e+00 1.8491254427616792e+00 1.7325120081796335e+00 + -1.3214210059616245e+00 2.1003459773303188e+00 2.1719710082969348e+00 + -1.5836249643383591e+00 2.3399473727196467e+00 2.6982419913781759e+00 + -1.9701126874884061e+00 2.5304394039107794e+00 3.2919108343568726e+00 + -2.4935874167224643e+00 2.6025901039054724e+00 3.9212016490262362e+00 + -3.1102423763293490e+00 2.4552896063843912e+00 4.5546922521711561e+00 + -3.6846969653029662e+00 1.9736986335497941e+00 5.1543614038002401e+00 + -4.0215630248877803e+00 1.1715756359303982e+00 5.6296716723174995e+00 + -4.0354040220343688e+00 2.4590745233791078e-01 5.9113856553390116e+00 + -3.6717754145119725e+00 -5.9881234236623881e-01 6.0335259329069126e+00 + -2.7560811118464259e+00 -9.6840022234673784e-01 6.0934665176222724e+00 + -1.8667348445147116e+00 -5.3322193809787333e-01 6.1407830111313029e+00 + -1.4034673369341191e+00 -5.2051155809819327e-01 6.1275337252251934e+00 + id 11351 + loc 1.0068932175636292e-01 7.2460007667541504e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2661754908710623e-01:4.6742694797350587e-01:6.6212028998404060e-01:5.2661228291161544e-01:1.0000073579648776e+00:3.6770037976952930e-01:1.4303279150630099e+00:2.9556244091253586e-01:2.1379216943576855e+00:3.2548073093733454e-01:2.9643039326137437e+00:4.7883569222364220e-01:3.1598441567883926e+00:4.5751943800377504e-01:3.9987036606224784e+00 + CVs 20 + 8.6614267116901345e-02 5.8109510036576340e-01 -3.4086693608619539e-01 + 2.1431036402698458e-01 1.1721245737635082e+00 -6.1914695237918049e-01 + 3.8418487154987641e-01 1.7366117717220519e+00 -7.9203791353231878e-01 + 5.7401872394876763e-01 2.2106943318022818e+00 -8.3857906531817383e-01 + 7.6498638035942113e-01 2.5653060107085777e+00 -7.6796662539285199e-01 + 9.6315199386714689e-01 2.8096681426588970e+00 -5.8992204539204285e-01 + 1.1712005594800690e+00 2.9219240902143566e+00 -3.0002943491570555e-01 + 1.3775242533094281e+00 2.8461785156993686e+00 1.0231992680434288e-01 + 1.5679313998294451e+00 2.5508610755739132e+00 5.8632712965840561e-01 + 1.7272084845820919e+00 2.0276418400019045e+00 1.1096056957696827e+00 + 1.8262613818370044e+00 1.2828300855821448e+00 1.6218602696381041e+00 + 1.8169131301574215e+00 3.5861227997600709e-01 2.1099849302832427e+00 + 1.6622535953757773e+00 -6.3317866422213576e-01 2.6744664225338237e+00 + 1.4534602272324533e+00 -1.5044445522482310e+00 3.4796532095778252e+00 + 1.4935069379098631e+00 -1.9862862870555424e+00 4.5908790004279423e+00 + 1.9817651702652410e+00 -1.9534023676894132e+00 5.6934894466955654e+00 + 2.7889483737134642e+00 -1.5774987573457566e+00 6.5374574870624151e+00 + 3.7193182186001974e+00 -1.0518332822145573e+00 7.1012052880653922e+00 + 4.5089911985309596e+00 -6.1060962077411096e-01 7.6022645418165480e+00 + id 11352 + loc 7.3987245559692383e-01 6.3496589660644531e-01 410 + blend 0.0000000000000000e+00 + interp 4.5890157615427518e-01:3.0868135768681565e-01:6.4625877377452212e-01:3.0102203730016946e-01:1.4189078755476414e+00:2.7124668500864163e-01:2.5560482891317280e+00:3.4303418872146985e-01:3.3932403964352043e+00:4.5889698713851368e-01:3.9945620971461260e+00 + CVs 20 + 5.5634101063849906e-01 2.2588130009784568e-01 -2.0776647148616800e-01 + 1.0261753790092707e+00 3.9467648125290172e-01 -4.1819365114096718e-01 + 1.4830868995357966e+00 5.5215827635086634e-01 -6.2139535027325432e-01 + 1.9287509263745479e+00 6.9186505873108561e-01 -8.2476305546503825e-01 + 2.3276117002825800e+00 7.8421668171762049e-01 -1.0391016224151182e+00 + 2.6541016787995018e+00 8.1441259979091485e-01 -1.2654432790291175e+00 + 2.9140005741442279e+00 7.9195960602756854e-01 -1.4956503573741871e+00 + 3.1436219547187685e+00 7.3009177650050616e-01 -1.7308979184702746e+00 + 3.3784242034356899e+00 6.2673478046253317e-01 -1.9736088544019366e+00 + 3.6359729965085537e+00 4.6901070537772926e-01 -2.2109545224380693e+00 + 3.9238414699134867e+00 2.3320418291144529e-01 -2.4230155500539285e+00 + 4.2472162451950579e+00 -1.1073346168022913e-01 -2.5963774373282384e+00 + 4.6129447691641019e+00 -5.6370646856827911e-01 -2.7558746954722895e+00 + 5.0274572227948147e+00 -1.0820222799951307e+00 -2.9774806748747604e+00 + 5.4875939434395313e+00 -1.5853766521129191e+00 -3.3310839171472586e+00 + 5.9849611647288956e+00 -1.9966555737334717e+00 -3.8256808946902181e+00 + 6.5162318821254130e+00 -2.3064677284141544e+00 -4.4138923293589460e+00 + 7.0719371204081227e+00 -2.5644625819773266e+00 -5.0488781619391174e+00 + 7.6002966942946646e+00 -2.8535945900948150e+00 -5.7596134373733872e+00 + id 11353 + loc 5.8429414033889771e-01 1.1523962765932083e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4292534635319886e-01:3.1434566557740939e-01:7.0609620673412588e-02:2.7973723414638207e-01:8.0255321508403432e-01:2.7820053615795876e-01:1.5958848477273349e+00:4.4292091709973536e-01:2.0004223340264153e+00:3.4866312335470440e-01:2.8619439813350880e+00:4.0742731749071504e-01:3.1590343516499697e+00 + CVs 20 + -6.9273793102145972e-02 2.2273374055967343e-01 2.7810926638790623e-01 + -1.1713824471874032e-01 4.8098407296935497e-01 5.2661038340925970e-01 + -1.4878099773965181e-01 7.6485071913896130e-01 7.4596363857759995e-01 + -1.7869476339785434e-01 1.0637036457056483e+00 9.4623560081517633e-01 + -2.2805111598548189e-01 1.3709202625062575e+00 1.1485381086930437e+00 + -3.1402642462459118e-01 1.6730496204939285e+00 1.3708485656738905e+00 + -4.4230528175101991e-01 1.9421008351763331e+00 1.6144150335600957e+00 + -6.1159571917856725e-01 2.1434492074664186e+00 1.8608639187058467e+00 + -8.2423610637454980e-01 2.2521640694265379e+00 2.0881464215176835e+00 + -1.0919034862988866e+00 2.2528731509049589e+00 2.2887069122854697e+00 + -1.4108027431719457e+00 2.1309124110403328e+00 2.4605195666670605e+00 + -1.7372530225740210e+00 1.8688920135352975e+00 2.6054138184700268e+00 + -1.9831782880443445e+00 1.4772686458651816e+00 2.7263350512295070e+00 + -2.1071306821861766e+00 1.0366721914854942e+00 2.8138955615826204e+00 + -2.1863106470392970e+00 6.1440466763839496e-01 2.8546922568646544e+00 + -2.3283678901325642e+00 2.3028517965072282e-01 2.8447649715534435e+00 + -2.5961558062092975e+00 -9.2532887202187331e-02 2.7968526432448497e+00 + -2.9568542186169653e+00 -3.5376675124722168e-01 2.7361411379397063e+00 + -3.2425058998939296e+00 -6.8701034656130555e-01 2.7089727070791811e+00 + id 11354 + loc 8.0503547191619873e-01 8.1260210275650024e-01 410 + blend 0.0000000000000000e+00 + interp 4.8693070857008280e-01:4.7650406359637376e-01:7.0324510131916551e-01:4.4545565426920286e-01:1.0088853622472589e+00:4.8692583926299715e-01:1.8850021473032401e+00:2.8055266272444468e-01:2.1614701928807643e+00:3.6642508165648308e-01:3.0014270323583689e+00:2.8180223357139933e-01:3.9871609976101618e+00 + CVs 20 + 6.3907921353229458e-01 2.2317094435574514e-01 -2.4311813485413564e-01 + 1.1693071806649478e+00 3.8343161509289359e-01 -4.9697496321280255e-01 + 1.6896134857227429e+00 5.3499644661570867e-01 -7.5168664233521254e-01 + 2.2042828131748142e+00 6.6602459158180016e-01 -1.0166074933554947e+00 + 2.6726748738936315e+00 7.3696657573554258e-01 -1.3024728843252906e+00 + 3.0633704141229030e+00 7.2493025634868580e-01 -1.6115326686018974e+00 + 3.3756753503688937e+00 6.3177184092502658e-01 -1.9381527236070268e+00 + 3.6414952881727980e+00 4.6222547482103749e-01 -2.2768670703470284e+00 + 3.8838932706010820e+00 2.0711800305540873e-01 -2.6132800799508726e+00 + 4.0989593886157998e+00 -1.4157766559592044e-01 -2.9128307613826476e+00 + 4.2756501401723437e+00 -5.6545962776161507e-01 -3.1531019358442354e+00 + 4.4192562034263716e+00 -1.0261062933690843e+00 -3.3610016843424524e+00 + 4.5407710482522319e+00 -1.4965622832513303e+00 -3.5778627891490515e+00 + 4.6468848437807289e+00 -1.9662862877918028e+00 -3.8290551284550061e+00 + 4.7472711126760077e+00 -2.4410855100919742e+00 -4.1325801266760003e+00 + 4.8608359994062162e+00 -2.9430320277869235e+00 -4.5026060137687338e+00 + 5.0081110469606838e+00 -3.4841833387128069e+00 -4.9336563995193981e+00 + 5.1908328230893197e+00 -4.0477009752004385e+00 -5.3920495684464678e+00 + 5.3632220898957881e+00 -4.5896501443777078e+00 -5.8386462419633789e+00 + id 11355 + loc 9.1822499036788940e-01 2.5951540470123291e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5823000152790133e-01:2.7637744045354123e-01:9.3954790390946297e-01:3.1516880221523558e-01:1.1797512095534128e+00:4.3958156003407839e-01:2.0005751218128758e+00:4.5822541922788607e-01:2.6283740141235619e+00:4.0918961406502607e-01:3.0057595454691004e+00:2.5201471583554780e-01:3.6467355955235328e+00 + CVs 20 + -5.3974772603979204e-02 3.0643782195417674e-01 3.3530348190441628e-01 + -7.8334727961215572e-02 6.4208841347984547e-01 6.3038028073645425e-01 + -1.0027922092414332e-01 9.7624495033638636e-01 9.4507731229422687e-01 + -1.4217494801462865e-01 1.2837279612015142e+00 1.3133666046637906e+00 + -2.2098705006451358e-01 1.5418877031058165e+00 1.7476460233381774e+00 + -3.4931771108528908e-01 1.7269050625663365e+00 2.2450304108089463e+00 + -5.3676307629844455e-01 1.8160733670708633e+00 2.7894899496769816e+00 + -7.8736776030063571e-01 1.7914124266926770e+00 3.3539875268277948e+00 + -1.0896076350163000e+00 1.6456933940072564e+00 3.9043901311168860e+00 + -1.4098459463723503e+00 1.3880097143990702e+00 4.4118068649264037e+00 + -1.7050353451359610e+00 1.0379630029791025e+00 4.8629756827447128e+00 + -1.9350249331062819e+00 6.1684404873321297e-01 5.2535107252118456e+00 + -2.0647762860227257e+00 1.5335261893431662e-01 5.5813928773092245e+00 + -2.0552540809160535e+00 -2.9551608389157757e-01 5.8535830965917226e+00 + -1.8690429567153388e+00 -6.3758997696679387e-01 6.0817849456383097e+00 + -1.5497263191838582e+00 -7.8092778814531805e-01 6.2895224429945253e+00 + -1.2172945439282072e+00 -7.1724042206248440e-01 6.5207021411996582e+00 + -9.2859636363295528e-01 -6.1892859102915931e-01 6.8042510879952509e+00 + -6.5763341025421906e-01 -9.1890468836702999e-01 7.1973133919937071e+00 + id 11356 + loc 2.4736027419567108e-01 7.1759688854217529e-01 1074 + blend 0.0000000000000000e+00 + interp 4.8634030591327254e-01:3.9860680825121070e-01:1.3309273673736510e-01:4.3536198492790718e-01:9.7151124940014522e-01:2.6572602545746188e-01:1.2196746919255006e+00:3.6885506857803185e-01:1.9982547315716845e+00:3.5751736495790398e-01:2.3971149153455924e+00:4.7035907700397234e-01:2.9001485690100290e+00:4.8633544251021343e-01:3.0789616585376591e+00:4.2960222434188949e-01:3.6708848852491252e+00 + CVs 20 + 1.3256705795802753e-01 3.5524196295649607e-01 -1.9265972389320093e-01 + 2.7537130027869777e-01 6.8226633993154862e-01 -3.8643295564252006e-01 + 4.1913775011029009e-01 9.8106604667504360e-01 -5.7542818680603447e-01 + 5.6050645911840791e-01 1.2561880105393097e+00 -7.5303982355963761e-01 + 7.0256751105910209e-01 1.5168661671027539e+00 -9.0526023400578970e-01 + 8.4966907234128775e-01 1.7752122438071178e+00 -1.0274297430560999e+00 + 1.0031930081626532e+00 2.0468738566228577e+00 -1.1517148087048232e+00 + 1.1608011019711708e+00 2.3422409397141499e+00 -1.3247846716275140e+00 + 1.3125627067799426e+00 2.6197549946246617e+00 -1.6049869851619853e+00 + 1.4231700669941620e+00 2.7724588630271456e+00 -2.0114882002010885e+00 + 1.4564685316432009e+00 2.7384436797435923e+00 -2.4820706378128596e+00 + 1.4047626930037009e+00 2.5197850236015689e+00 -2.9354654477235411e+00 + 1.3110279175895063e+00 2.1392894509500731e+00 -3.3247986355070029e+00 + 1.2518595350034882e+00 1.6497147716537639e+00 -3.6416597451952537e+00 + 1.2682909249642245e+00 1.1383314259711459e+00 -3.9281488137294254e+00 + 1.3467002758427671e+00 7.0565226004938220e-01 -4.2599427634322646e+00 + 1.4482340423698408e+00 4.5843795339836468e-01 -4.6555758040724280e+00 + 1.5224158542869419e+00 5.3768930718730945e-01 -5.0688871327981131e+00 + 1.5575814942766391e+00 1.0036198172157036e+00 -5.5237509300731977e+00 + id 11357 + loc 3.3049839735031128e-01 1.7370851337909698e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4459850908633025e-01:2.9835099828947859e-01:6.5420786826047128e-02:4.4459406310123939e-01:7.5923359084855480e-01:3.7078472900881071e-01:1.1594720527386659e+00:4.3500636532985537e-01:1.9489105862639726e+00:3.0153339328158479e-01:2.5911969671457733e+00:3.4556625600593310e-01:3.5585880785589543e+00 + CVs 20 + -3.4518573360428184e-02 3.8007360539352208e-01 -1.9540378246174298e-01 + -1.1288983523489876e-01 7.7431747409233431e-01 -3.8682880763402228e-01 + -2.2847347504754983e-01 1.1837901508234030e+00 -5.7655632144921531e-01 + -3.9144476037542258e-01 1.6043574879954683e+00 -7.5904332195327784e-01 + -6.1749580749687594e-01 2.0244489919894639e+00 -9.2830124264116964e-01 + -9.1126242011055614e-01 2.4311846712075242e+00 -1.0962552959816894e+00 + -1.2685336069457875e+00 2.8109664662016391e+00 -1.2894647865471143e+00 + -1.6796536053854856e+00 3.1467498650706318e+00 -1.5317313908186658e+00 + -2.1363013798822328e+00 3.4125211902135715e+00 -1.8466705041122262e+00 + -2.6299336528103261e+00 3.5588637939707626e+00 -2.2661197603824883e+00 + -3.1376802108940374e+00 3.5065100666923428e+00 -2.7971718035462185e+00 + -3.6340100951470391e+00 3.1686466391230428e+00 -3.3646341458402844e+00 + -4.0894593108438571e+00 2.4952075861955256e+00 -3.8107192393926796e+00 + -4.4290022652904462e+00 1.6067426602031731e+00 -3.9925558544983013e+00 + -4.6211335420969979e+00 7.0161285304448318e-01 -3.9335655387901189e+00 + -4.6898768052037116e+00 -1.9569953509782256e-01 -3.6146894098520281e+00 + -4.6218314933076483e+00 -1.0055256253836351e+00 -2.7182343663602273e+00 + -4.4534691079573605e+00 -1.0817630915495129e+00 -1.2369039543562987e+00 + -4.4938190875315245e+00 -1.2313338305518751e+00 -8.6188482280198042e-01 + id 11358 + loc 9.9566847085952759e-01 5.0151622295379639e-01 1070 + blend 0.0000000000000000e+00 + interp 4.5388335707420635e-01:3.8545882023061162e-01:3.0727311199729290e-01:4.3775799888515060e-01:9.8851948434276493e-01:4.2998785706503634e-01:1.3532307040346441e+00:2.8979344374663835e-01:2.0233996954243443e+00:3.2625795107558453e-01:2.9347936739210017e+00:3.4069742918668494e-01:3.3189990120342090e+00:4.5387881824063564e-01:3.8828827221423592e+00 + CVs 20 + -1.8132719600447472e-01 3.2769915046490500e-01 4.3265793598336849e-02 + -3.7487094640907043e-01 6.3443501923184109e-01 2.7740619586018256e-02 + -5.5114404979707010e-01 9.2405214949162495e-01 -3.2721138652429760e-02 + -6.9491314918842251e-01 1.1764229825826718e+00 -1.6172348241642831e-01 + -8.0855826831517841e-01 1.4010936445182618e+00 -3.5328099307916727e-01 + -9.0898987635993023e-01 1.6776007119078613e+00 -5.5235021479792812e-01 + -1.0002183719702371e+00 2.0664441594962484e+00 -6.7456982860436332e-01 + -1.0870464236764281e+00 2.5314130864639104e+00 -6.6277438484981532e-01 + -1.2083948714975024e+00 3.0111616457863777e+00 -5.1609458583272061e-01 + -1.4335616631524803e+00 3.4420539933590404e+00 -2.0984616787094934e-01 + -1.8237824345452425e+00 3.6745221453897861e+00 2.9334510203233077e-01 + -2.3130220573653655e+00 3.5253100539638811e+00 9.0143770372931242e-01 + -2.7440270817049113e+00 3.0342822664478586e+00 1.4158289185485848e+00 + -3.0872807936929396e+00 2.3938929349189495e+00 1.7336076304874268e+00 + -3.3943040104587072e+00 1.7308448809934602e+00 1.8610680685064700e+00 + -3.6527287108649906e+00 1.0152523510213554e+00 1.8292759514990975e+00 + -3.7480916964501643e+00 1.5660980972835592e-01 1.6031737875583580e+00 + -3.5823918137239477e+00 -7.4898667079231218e-01 1.1346948675831607e+00 + -3.7332945597753122e+00 -1.1963157284599357e+00 1.0767483654302907e+00 + id 11359 + loc 5.5300253629684448e-01 2.1961784362792969e-01 1047 + blend 0.0000000000000000e+00 + interp 4.9217640887623565e-01:4.1377669555682034e-01:4.2670970965257793e-01:4.9217148711214692e-01:2.2195902018915774e+00:4.8296025202319798e-01:2.8739137985694034e+00:2.9680483416162939e-01:3.0977636574348479e+00:3.0205848664216528e-01:3.9747263885709980e+00 + CVs 20 + -4.1023968720954568e-02 7.3577803003907438e-01 4.6833844517265544e-01 + -6.9928921479337214e-02 1.4641821462725100e+00 8.8856406336069460e-01 + -1.0839375792658124e-01 2.2157617844344109e+00 1.2594069955426472e+00 + -2.3513615770521062e-01 2.9950862149107698e+00 1.4744509606078664e+00 + -5.0446021823677167e-01 3.7105692150997323e+00 1.3597400766215979e+00 + -8.4224281272649226e-01 4.1960439971631782e+00 8.8489198727504137e-01 + -1.1284555352256085e+00 4.3353422939963782e+00 1.8012543458761332e-01 + -1.2865349941450896e+00 4.1118086986413296e+00 -5.7492366160830000e-01 + -1.2990230354796148e+00 3.5907636344941478e+00 -1.2240883888015150e+00 + -1.1826015320179435e+00 2.8915552651289893e+00 -1.6616745904087207e+00 + -9.7114527178886678e-01 2.1626547871157586e+00 -1.8727427779294761e+00 + -6.9447267088372400e-01 1.5060401496945823e+00 -1.9407386094721055e+00 + -3.7004661200077393e-01 9.0671636258609523e-01 -1.9698159126911872e+00 + 2.8999377497209183e-02 2.8597740866841437e-01 -2.1051392028089380e+00 + 5.3821196392432835e-01 -3.6098202404735025e-01 -2.6498258722568759e+00 + 9.2862293523237738e-01 -6.8905250590175315e-01 -3.7664061844704890e+00 + 9.8474222118255161e-01 -4.7121947401184139e-01 -4.9391605556399725e+00 + 8.3041476488254728e-01 8.5519796126524383e-02 -5.7838707571687289e+00 + 6.8945383844451658e-01 6.2222160250346903e-01 -6.0458092477689949e+00 + id 11360 + loc 7.4497342109680176e-01 7.8840643167495728e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8007651930275902e-01:3.1358374433970670e-01:6.5168529336108949e-02:3.8318982589425954e-01:7.8133597428851720e-01:4.8007171853756603e-01:1.1034390874954130e+00:3.4370223252529919e-01:2.0049835864278340e+00:3.7075790381822743e-01:2.9039002763947694e+00:3.4959007995151242e-01:3.4921542342494298e+00 + CVs 20 + 1.3998810362863756e-01 2.4720894644674068e-01 -2.5919765903503539e-01 + 2.8077252942257230e-01 4.9672481838508742e-01 -4.9871932006068376e-01 + 4.2812198386627398e-01 7.4523371136195415e-01 -7.4437581901920946e-01 + 5.8090006756125856e-01 9.8888055811092745e-01 -1.0083141013376073e+00 + 7.3216989450218994e-01 1.2260656211183241e+00 -1.2927365001902618e+00 + 8.7109532115542443e-01 1.4587599780848832e+00 -1.5980612259943967e+00 + 9.8757169536694445e-01 1.6902062101605806e+00 -1.9271326564900053e+00 + 1.0795033593707377e+00 1.9164739572767893e+00 -2.2864436635029901e+00 + 1.1541553760005927e+00 2.1230700664762669e+00 -2.6830382118373972e+00 + 1.2213968271058131e+00 2.2875072448626672e+00 -3.1224022086751404e+00 + 1.2881049532750546e+00 2.3828473187743331e+00 -3.6037089589362070e+00 + 1.3564144912274239e+00 2.3845204036694398e+00 -4.1166697709635907e+00 + 1.4234548978261135e+00 2.2760171621048850e+00 -4.6436643794731856e+00 + 1.4838751526373879e+00 2.0530076115739853e+00 -5.1603921187053050e+00 + 1.5300101674779043e+00 1.7240992243487985e+00 -5.6445828362991755e+00 + 1.5377012448058636e+00 1.3096166173602670e+00 -6.0755137689534857e+00 + 1.4610837129153704e+00 8.4923478803162367e-01 -6.4293628472988775e+00 + 1.2840983363115588e+00 3.9639623788977979e-01 -6.6969457554784082e+00 + 1.1533394715788921e+00 -4.1400104917432290e-03 -6.9464711934932835e+00 + id 11361 + loc 9.4262920320034027e-03 7.1392339468002319e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7395629533900907e-01:3.3510558058687373e-01:6.4154763471964138e-03:2.6257911763375819e-01:7.6654824863203608e-01:4.7395155577605569e-01:1.1058427566252376e+00:3.7857655381771754e-01:1.8255894683079656e+00:3.3187853995239253e-01:2.0113547152366031e+00:4.2194292967184627e-01:2.9218851898704652e+00:4.6779453244405866e-01:3.2293894268588224e+00 + CVs 20 + 3.0363378983805733e-01 3.7890309488131713e-01 -9.3219956437258972e-02 + 6.0623125571970005e-01 7.1257526396310866e-01 -2.3854564319062654e-01 + 8.9490522507606762e-01 1.0213960546632510e+00 -4.0368820101334613e-01 + 1.1568545600509306e+00 1.2888094123120466e+00 -5.8857510901078380e-01 + 1.3853830277957522e+00 1.4976509965693301e+00 -7.9921976423003205e-01 + 1.5700500116157041e+00 1.6297026783808226e+00 -1.0345979446980205e+00 + 1.6946702142048133e+00 1.6704318577381430e+00 -1.2841414875135146e+00 + 1.7384280781383232e+00 1.6127244829664962e+00 -1.5235411819581510e+00 + 1.6868392623474902e+00 1.4617059799285466e+00 -1.7107367359013903e+00 + 1.5544005511209991e+00 1.2505208952388931e+00 -1.8047959053829490e+00 + 1.3792727052538074e+00 1.0306401364525026e+00 -1.8025287267837720e+00 + 1.1932244774487204e+00 8.4072384408983103e-01 -1.7448804411345249e+00 + 1.0009129771256651e+00 6.9509111168178406e-01 -1.6856906331969352e+00 + 7.7772785340364892e-01 6.0855036267036855e-01 -1.6540504814316948e+00 + 4.9711903171897376e-01 6.3068742284235346e-01 -1.6156702468746966e+00 + 1.9992133445819102e-01 8.2992169834412677e-01 -1.4882743745833842e+00 + 1.8744634513854934e-02 1.2209988918993742e+00 -1.2278981052961475e+00 + 2.0993320582920832e-02 1.6437623346507020e+00 -9.5052950655275903e-01 + -2.6442614572339090e-01 1.7098881228565306e+00 -9.9142680343471468e-01 + id 11362 + loc 2.4834305047988892e-01 3.5022780299186707e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4553969664794585e-01:2.6111847367670465e-01:2.0918137099579126e-02:2.6786708557718719e-01:9.4699849460444008e-01:2.9374784437577861e-01:1.9404785104585485e+00:3.8013349040582456e-01:2.3438915437787715e+00:4.0301871138646539e-01:3.0044591843612900e+00:4.4553524125097937e-01:3.6895990168621222e+00 + CVs 20 + -7.6314412078725399e-02 3.7929460384577063e-01 -1.4802130313624812e-01 + -1.7134375347790431e-01 7.6878628734301002e-01 -2.8902484604950313e-01 + -2.9839523498608700e-01 1.1517888395661415e+00 -4.4377596828046439e-01 + -4.7091179972539621e-01 1.5148106902864835e+00 -6.2358453635221678e-01 + -6.9617379547046854e-01 1.8406185204813887e+00 -8.3551937634147078e-01 + -9.7187379865200341e-01 2.1090846379060340e+00 -1.0867764248210361e+00 + -1.2871405167771446e+00 2.3030398634502998e+00 -1.3815720044715332e+00 + -1.6273540621974383e+00 2.4109219572385490e+00 -1.7180552327602812e+00 + -1.9806582012611087e+00 2.4259830509452343e+00 -2.0880574392066018e+00 + -2.3451767544115421e+00 2.3454149409373373e+00 -2.4751872385288554e+00 + -2.7270980112263721e+00 2.1677672082587689e+00 -2.8535963553241763e+00 + -3.1293320534152125e+00 1.8885950530103450e+00 -3.1906422138627231e+00 + -3.5503083087936087e+00 1.5032977878048457e+00 -3.4447559687970424e+00 + -3.9902344053343546e+00 1.0265306360892481e+00 -3.5560860163278667e+00 + -4.4497517231027492e+00 5.1816470262226444e-01 -3.4460639859276774e+00 + -4.9032956614833640e+00 1.3461856224371616e-01 -3.0783260837104027e+00 + -5.3028918459893655e+00 1.0049278004820117e-01 -2.6109394660594054e+00 + -5.5898654215106873e+00 4.4923568416183057e-01 -2.3137803742623144e+00 + -5.8687546076261912e+00 5.0513966839513880e-01 -2.1082820043547832e+00 + id 11363 + loc 1.8432857096195221e-01 1.0355645790696144e-02 1074 + blend 0.0000000000000000e+00 + interp 3.7462071864468371e-01:2.8707977657755207e-01:3.1641469638526987e-03:8.8418615951885479e-02:1.0000000601937331e+00:3.7461697243749731e-01:2.0788319847978034e+00:3.2705506054742806e-01:3.0410688516291393e+00 + CVs 20 + -1.8894731055468372e-01 4.6435704999480426e-01 -1.5707692112999616e-01 + -3.7236152873594958e-01 9.3336586315132897e-01 -3.1052499925994226e-01 + -5.4177249553889717e-01 1.4194639675117229e+00 -4.1915456964234965e-01 + -6.7164751298587788e-01 1.9171365003748451e+00 -4.5915408538555419e-01 + -7.7797861833439785e-01 2.4221847150129503e+00 -4.3221712201077334e-01 + -9.5746727972808543e-01 2.9331675176451215e+00 -3.6687288634900972e-01 + -1.3203831128096255e+00 3.3835089930081814e+00 -3.2424592783704520e-01 + -1.8375972617533969e+00 3.6520854298599068e+00 -3.7479336853231826e-01 + -2.3650577812652585e+00 3.6981180638074074e+00 -5.5192324018502337e-01 + -2.7563579101878397e+00 3.5924543472075006e+00 -8.3799533893978873e-01 + -2.9684156389754444e+00 3.4557226609611211e+00 -1.1721927124850755e+00 + -3.0664899036322137e+00 3.3326371501448504e+00 -1.5129650187392474e+00 + -3.1173321687998250e+00 3.1877149085368783e+00 -1.8670129466028342e+00 + -3.1301575308740284e+00 2.9451363982413223e+00 -2.2642185791483840e+00 + -3.0679860497654783e+00 2.5325013677190942e+00 -2.6878377859952627e+00 + -2.8791849305018804e+00 1.9576181538065209e+00 -3.0349995696388690e+00 + -2.4693716878536458e+00 1.2664988483681134e+00 -3.1791183680371917e+00 + -1.8716696676750582e+00 6.7019899958444551e-01 -3.0033154392768306e+00 + -1.7447827098111841e+00 4.3413267062151017e-01 -2.9342728809481993e+00 + id 11364 + loc 6.6654686816036701e-03 1.5748393535614014e-01 1047 + blend 0.0000000000000000e+00 + interp 5.1950462501986916e-01:5.1949942997361898e-01:1.7159383138876416e-01:4.5363931442490496e-01:1.0015160400125960e+00:2.2612106214892161e-01:1.5761815268178943e+00:3.1161624416676964e-01:1.9999786348163060e+00:2.6337478857992075e-01:2.9482413560918750e+00:3.7244631348775237e-01:3.9246962227870781e+00 + CVs 20 + -7.1103737246773191e-01 5.4889383817608095e-01 1.3979475704111566e-02 + -1.3038841128145060e+00 1.0886766951300200e+00 -1.1612496633133190e-01 + -1.7407558706709025e+00 1.6116756940748787e+00 -4.0113591936564008e-01 + -2.0022936803104754e+00 2.0859934414587249e+00 -8.2562143091697737e-01 + -2.0966292291291828e+00 2.4742767137161890e+00 -1.3523450422710870e+00 + -2.0686428102883418e+00 2.7490815262322639e+00 -1.9362085926855228e+00 + -1.9736671405600621e+00 2.8882206917644009e+00 -2.5420173597536726e+00 + -1.8576457225700287e+00 2.8756621699626126e+00 -3.1418936613416606e+00 + -1.7386342468002272e+00 2.7138371375318151e+00 -3.7054673383978054e+00 + -1.6011864630399624e+00 2.4197200192405846e+00 -4.2044896653394312e+00 + -1.4261537659408918e+00 2.0003126001456613e+00 -4.6056602015047101e+00 + -1.1892758036290938e+00 1.4624510559067412e+00 -4.8647201173236949e+00 + -8.5793519101852089e-01 8.4564435447267383e-01 -4.9302889644859027e+00 + -4.0020857292173417e-01 2.3809091858719950e-01 -4.7571772592013968e+00 + 1.7840483322967027e-01 -2.3327485816661009e-01 -4.3359665816246462e+00 + 8.1799878175341045e-01 -4.5416555871352171e-01 -3.7210813726468652e+00 + 1.4519081034501831e+00 -3.5044036316812210e-01 -2.9864828958880123e+00 + 1.9232093426255907e+00 2.5288285150562029e-01 -2.1620009890407239e+00 + 1.8922971961310293e+00 6.9288200533359212e-01 -1.8685257977601983e+00 + id 11365 + loc 2.5529208779335022e-01 4.7546723484992981e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5200638871394155e-01:4.1458036349473881e-01:7.7882858192395810e-01:4.5200186865005443e-01:1.1891855792210555e+00:3.6710687710586315e-01:1.9992010437392369e+00:4.0156956561902657e-01:2.8356016094192782e+00:4.5050252449689793e-01:3.2583425371870756e+00:3.9958281790388472e-01:3.9883804965857754e+00 + CVs 20 + -2.7383799637356415e-01 3.0930974201100070e-01 -6.3005715002135115e-02 + -5.5645134158858534e-01 6.3296021624334275e-01 -1.0029702608981098e-01 + -8.5130869012942634e-01 9.7317559317179092e-01 -1.2789783471948502e-01 + -1.1387558238481084e+00 1.3325081971180537e+00 -1.4930736439573403e-01 + -1.3679002037001637e+00 1.6833632126052014e+00 -1.4668542777313107e-01 + -1.5048516967634469e+00 1.9575666007912043e+00 -1.0052415814873011e-01 + -1.5872167175061964e+00 2.1708147464014695e+00 -1.4318280129791749e-02 + -1.7349853954178525e+00 2.3651990637682423e+00 5.7280623722897828e-02 + -2.0291045712889288e+00 2.4991900331475851e+00 7.2327837408739881e-02 + -2.5051022073676781e+00 2.5043984292698314e+00 3.4813283917100035e-03 + -3.0739114627031334e+00 2.3448408470625597e+00 -2.0499906775903787e-01 + -3.5703994352512298e+00 2.0902304103818046e+00 -5.5310244437147227e-01 + -3.9283529832743533e+00 1.8341388563485568e+00 -9.6616161206080753e-01 + -4.1830985632246769e+00 1.6281169180799717e+00 -1.3874540888027524e+00 + -4.3833805929718537e+00 1.4636297757176906e+00 -1.8112606079724916e+00 + -4.5478398196949765e+00 1.2402779655308909e+00 -2.2774615850165683e+00 + -4.6076213007661790e+00 7.4446454157565090e-01 -2.8193822513009312e+00 + -4.2942854894733777e+00 -1.0557839564161370e-01 -3.2169364091937043e+00 + -4.1168646202434438e+00 -3.4574439901915044e-01 -3.2635703781040979e+00 + id 11366 + loc 9.5019258558750153e-02 9.2955148220062256e-01 1077 + blend 0.0000000000000000e+00 + interp 4.2569472334486574e-01:2.7992852970078241e-01:7.4423843972927139e-01:3.7645025395487453e-01:1.5936405897551031e+00:4.0459224263384586e-01:2.0617703672542902e+00:3.1764130445848421e-01:2.7903655706240587e+00:2.7507363461807127e-01:3.2471920389826399e+00:4.2569046639763231e-01:3.9321983530124482e+00 + CVs 20 + 8.2415134348670982e-02 2.7485028853982102e-01 -1.2668116188414513e-01 + 1.7103272898835148e-01 5.7412955873720395e-01 -2.2300339516230813e-01 + 2.7740420480962297e-01 8.8638020002098061e-01 -3.2737115051220589e-01 + 4.0650293243764279e-01 1.1994864069114186e+00 -4.6197956192898199e-01 + 5.6147455667215307e-01 1.5114948718275345e+00 -6.3632660725274759e-01 + 7.4839323310804073e-01 1.8149883899361545e+00 -8.6028241435821373e-01 + 9.7510546185580838e-01 2.0899873475788162e+00 -1.1400024825450963e+00 + 1.2432389012467753e+00 2.3127981501874553e+00 -1.4730728412581655e+00 + 1.5452924394943208e+00 2.4669689869837912e+00 -1.8522258327137202e+00 + 1.8679507212794100e+00 2.5418914645171937e+00 -2.2694354286780740e+00 + 2.1943225649577331e+00 2.5300768624862537e+00 -2.7161921396548139e+00 + 2.5045710954516216e+00 2.4270344483982207e+00 -3.1813777816411157e+00 + 2.7783602369656357e+00 2.2340291798025169e+00 -3.6475937579422255e+00 + 3.0016822815363144e+00 1.9610062414576968e+00 -4.0914534918637981e+00 + 3.1755876664089393e+00 1.6141281735159336e+00 -4.4975769117265356e+00 + 3.3152794095257971e+00 1.1500002321197660e+00 -4.8663251891341588e+00 + 3.4278518320344049e+00 4.5283321780969121e-01 -5.1131505331305975e+00 + 3.4757738834448229e+00 -2.7674594826354948e-01 -5.0202570463730680e+00 + 3.4664927289757994e+00 -5.1244159941554202e-01 -4.8981254828653631e+00 + id 11367 + loc 3.4399449825286865e-01 7.6202327013015747e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7839426323316292e-01:3.1437886700537615e-01:6.9063859047189258e-03:3.8327963281312111e-01:9.8727781449445995e-01:4.3554152637203486e-01:1.7654930222230347e+00:3.9289740085778191e-01:2.1251519324175021e+00:4.7698308976094206e-01:2.8420372974747767e+00:4.7838947929053061e-01:3.0409523406256529e+00:4.4382180279246924e-01:3.5972431109618586e+00 + CVs 20 + 7.4182078971043022e-02 2.5026438280189856e-01 -1.4480862985940607e-01 + 1.5978844863684158e-01 5.0240648918078046e-01 -3.2006923917709568e-01 + 2.5569708498653143e-01 7.4647395277203077e-01 -5.1656410620410675e-01 + 3.5812663797486011e-01 9.7823519797234437e-01 -7.2674990565251030e-01 + 4.6171057589610703e-01 1.1995848316666595e+00 -9.4912185301224472e-01 + 5.6567669648559149e-01 1.4143362265025496e+00 -1.1856611208063095e+00 + 6.7421623793782914e-01 1.6250788604698487e+00 -1.4407141684608891e+00 + 7.9132887493545356e-01 1.8300757370003367e+00 -1.7164665171840556e+00 + 9.1827302902283170e-01 2.0191916107835435e+00 -2.0136494603425477e+00 + 1.0534764273000343e+00 2.1707707401036602e+00 -2.3345073791715243e+00 + 1.1908366471203076e+00 2.2536318610501294e+00 -2.6783399189861163e+00 + 1.3183124469731908e+00 2.2390973762593007e+00 -3.0310056264375462e+00 + 1.4201395800922387e+00 2.1171133074626258e+00 -3.3649586056173559e+00 + 1.4847721626282759e+00 1.9028987415617373e+00 -3.6501087260699960e+00 + 1.5083207143009953e+00 1.6284599625381511e+00 -3.8740425251903812e+00 + 1.4799478937648882e+00 1.3240550247960055e+00 -4.0448961292678245e+00 + 1.3804409218864286e+00 1.0213677854697294e+00 -4.1770627746516844e+00 + 1.2141226940230179e+00 7.5300863245998872e-01 -4.2833715297531700e+00 + 1.0599263223836541e+00 5.0954541965909605e-01 -4.4153903765696167e+00 + id 11368 + loc 7.6076225377619267e-04 8.6332476139068604e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0297947466646731e-01:5.0297444487172072e-01:2.5258693375910246e-03:3.5538193009151908e-01:7.8263553924797913e-01:4.1519096391155796e-01:1.0558407878611153e+00:2.4769223076163144e-01:1.7621783230023591e+00:2.8365445147257778e-01:2.2205914880738273e+00:3.3139454199870405e-01:2.9753578570318564e+00:4.2591669279160355e-01:3.4268213113981503e+00 + CVs 20 + 2.0087673452107935e-02 3.7148824349483645e-01 -1.4964372656163125e-01 + 8.0097055191070299e-02 7.2550802563236461e-01 -3.0335374016699762e-01 + 1.4748235726721898e-01 1.0733759055303511e+00 -4.5277782675895101e-01 + 2.0365532471167141e-01 1.4225884306250567e+00 -5.9053093033019421e-01 + 2.3554462849966346e-01 1.7811501329144115e+00 -6.9911668386210912e-01 + 2.3436284627021275e-01 2.1553140251923946e+00 -7.6026004624196308e-01 + 2.0526356962964898e-01 2.5504289058936758e+00 -7.9913189560084164e-01 + 1.6110474254658602e-01 2.9614747338050900e+00 -8.8846010143702447e-01 + 1.1909981787171642e-01 3.3496245609838433e+00 -1.0881359369617876e+00 + 1.1123604494506323e-01 3.6268695024914956e+00 -1.3784814122347868e+00 + 1.5901165137237872e-01 3.7679554741550763e+00 -1.6717501650716200e+00 + 2.9641649171275897e-01 3.8159069007852033e+00 -1.9184119888038986e+00 + 5.6305907979458847e-01 3.8056218133933331e+00 -2.0963307972313392e+00 + 1.0051117334754518e+00 3.7284752277074444e+00 -2.1992995237107027e+00 + 1.6046267097952129e+00 3.5079240415622692e+00 -2.1946618878879427e+00 + 2.2277079062211604e+00 3.0790783022071357e+00 -2.0603401931779239e+00 + 2.7337589248354117e+00 2.4287540453921208e+00 -1.7372572907706150e+00 + 2.9035062944162435e+00 1.7758939908713698e+00 -1.1777734863201892e+00 + 2.8081210603997979e+00 1.4689875108706771e+00 -7.1646686204796484e-01 + id 11369 + loc 5.7015877962112427e-01 5.0369465351104736e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4900357538567653e-01:3.1136652973881440e-01:4.1957719093777046e-01:4.2567672019544545e-01:9.8497205638868657e-01:3.5220221520115425e-01:1.7311968124983979e+00:3.0873692209480841e-01:2.0758630718369151e+00:4.4899908534992272e-01:2.6057913945570350e+00:3.6726723600215799e-01:3.1627286963407459e+00:3.3289360695227399e-01:3.9565788750505879e+00 + CVs 20 + 8.1632898446070551e-02 2.9595472726569555e-01 -2.1796805462266799e-01 + 1.7579757038774479e-01 5.9698055577350806e-01 -4.6484034620760906e-01 + 2.9705804401186892e-01 8.9866064201076645e-01 -7.1999034996162348e-01 + 4.5877012391393202e-01 1.1901768516487510e+00 -9.6810119960028784e-01 + 6.6485628846215072e-01 1.4462252932068393e+00 -1.2088445720875587e+00 + 9.0242761158142371e-01 1.6334218315725071e+00 -1.4605942553933018e+00 + 1.1500406015829423e+00 1.7352460466687352e+00 -1.7402289586892379e+00 + 1.3848282717105755e+00 1.7521710396001327e+00 -2.0494837202405027e+00 + 1.5801337704491967e+00 1.6862971739281643e+00 -2.3798429086457014e+00 + 1.7090256602756289e+00 1.5364527952474207e+00 -2.7130746856204238e+00 + 1.7490432325234919e+00 1.3030091972931275e+00 -3.0186194073113408e+00 + 1.6931540263265736e+00 9.9879787096057493e-01 -3.2597474887068252e+00 + 1.5519730853976474e+00 6.4678450738076276e-01 -3.4025986853374324e+00 + 1.3442560719422005e+00 2.7552809315508997e-01 -3.4147620340148750e+00 + 1.0962570614099920e+00 -7.4567240013897668e-02 -3.2774043260179146e+00 + 8.3581995046036028e-01 -3.5777399798631859e-01 -3.0054316786257278e+00 + 5.9043439354278393e-01 -5.5605942467335157e-01 -2.6558274389796437e+00 + 3.7173810018179193e-01 -7.2772158183501967e-01 -2.3254114727625783e+00 + 1.4162480463260912e-01 -1.0710555782736166e+00 -2.2007336853336064e+00 + id 11370 + loc 8.8321614265441895e-01 8.9335340261459351e-01 1047 + blend 0.0000000000000000e+00 + interp 3.7327538845454264e+00:3.7327438845454264e+00:2.7198851422866743e-01:1.7958349828893798e+00:3.3231833332524996e-01:9.0299165714021945e-01:4.0529751155466753e-01:2.5048835202899994e-01:4.1594929538955749e-01:5.3284014127083079e-01:4.5412611881176179e-01:3.6182808138288247e-01:9.8461005357666143e-01:1.7760292423224050e-01:1.9019853579188493e+00:8.4457222646007879e-01:2.0606972141752795e+00:1.3731460938938691e+00:2.0902846988044606e+00:2.1239602038152885e+00:2.0969670751356659e+00 + CVs 20 + 1.9405082932300272e-01 7.2805404545517094e-01 -5.7589706549956843e-01 + 4.2401892169137306e-01 1.3804903884434849e+00 -1.0967691230906986e+00 + 7.0644059279733040e-01 1.9985400742360240e+00 -1.5880337948202623e+00 + 1.0707442216548346e+00 2.5963898804691978e+00 -1.9639177227756468e+00 + 1.5394536309112263e+00 3.1463996932321066e+00 -2.0703054794727667e+00 + 2.0601217695910901e+00 3.5625800757523169e+00 -1.8385197120336816e+00 + 2.5218021596852416e+00 3.7459480742205358e+00 -1.3259649495334627e+00 + 2.8336303728854539e+00 3.6531317358333180e+00 -6.6338952783678740e-01 + 2.9659324165969734e+00 3.3114448396973488e+00 1.3747305803281984e-02 + 2.9294084978188644e+00 2.7824683655345499e+00 6.0474252555652619e-01 + 2.7510003149674951e+00 2.1465717098992600e+00 1.0759566870582242e+00 + 2.4534832767100587e+00 1.4911892485430047e+00 1.4699907970431876e+00 + 2.0662023599077961e+00 9.1695313599677142e-01 1.8650854944848563e+00 + 1.6665948830373438e+00 5.2982807161631362e-01 2.3180744485004170e+00 + 1.4129922021059260e+00 4.3274452454781165e-01 2.8146992250717608e+00 + 1.3888193946649590e+00 6.1628664662570865e-01 3.2123756308992313e+00 + 1.4974482597823018e+00 9.6302622397910187e-01 3.5011002999829706e+00 + 1.7142876284088762e+00 1.4601201586351018e+00 3.7190044423651063e+00 + 2.0590046584773236e+00 2.1176025593228722e+00 3.9740468937201685e+00 + id 11371 + loc 4.8208630084991455e-01 4.4587051868438721e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7972743425321829e-01:4.6993468160966295e-01:2.3806610792597604e-02:2.6690595046343280e-01:4.5463555740862815e-01:4.1470845798984562e-01:9.9672664335949912e-01:4.3590194738513260e-01:1.4206689430227091e+00:4.4690782449821392e-01:1.9756026822884967e+00:2.5252886480337194e-01:2.2882703696292053e+00:4.1961167212748607e-01:2.9840702053710029e+00:4.7972263697887579e-01:3.5467032387545236e+00 + CVs 20 + -2.1895621051904993e-01 2.0637361229879070e-01 -2.8395957706767568e-02 + -4.0828732396679723e-01 4.1212289124135121e-01 -3.8786487010574938e-02 + -5.7322600153951131e-01 6.0542933573881585e-01 -4.2768052621092068e-02 + -7.2161613314249984e-01 7.8639014929214923e-01 -4.7078444980058393e-02 + -8.6805512501280757e-01 9.6911672352504075e-01 -5.0052442477690195e-02 + -1.0350846910561715e+00 1.1629689238711274e+00 -5.5651650160328081e-02 + -1.2419976450073036e+00 1.3658249134067306e+00 -7.7771750885398727e-02 + -1.4980875504948794e+00 1.5639360289059427e+00 -1.3713614743464320e-01 + -1.7965687158732826e+00 1.7380890738293986e+00 -2.5460967826410558e-01 + -2.1124867048784068e+00 1.8691067970921085e+00 -4.4646255809674262e-01 + -2.4209577126713882e+00 1.9494101896706437e+00 -7.1537914034171957e-01 + -2.7147224318264414e+00 1.9815848036948787e+00 -1.0521132142568232e+00 + -2.9968654601875544e+00 1.9637459418752414e+00 -1.4418414447912342e+00 + -3.2598993848516655e+00 1.8828202795054598e+00 -1.8657806084844124e+00 + -3.4814509382541434e+00 1.7326267953954648e+00 -2.3039577658022066e+00 + -3.6395326084983379e+00 1.5023330351108479e+00 -2.6984399301936310e+00 + -3.7272359641425155e+00 1.2049182103377527e+00 -2.9628292417899740e+00 + -3.8460244108255601e+00 9.2730924471049558e-01 -3.0415851502370534e+00 + -4.2909599692160203e+00 9.1240739795144110e-01 -2.7922738207729934e+00 + id 11372 + loc 6.7472583055496216e-01 2.1320864558219910e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4242371023994342e-01:3.7265715516891085e-01:6.1295999328009487e-01:2.8492635079767675e-01:1.0616917537670640e+00:3.8461156584635203e-01:1.9972497751205203e+00:2.9936205731633464e-01:2.5872837434505431e+00:4.4241928600284103e-01:3.0133283194219826e+00:4.0644893538153759e-01:3.8230804652130219e+00 + CVs 20 + 2.9591744711401557e-01 3.2327821040516952e-01 -1.8571007056073977e-01 + 5.4133489184044947e-01 5.8250934718797109e-01 -2.5371231599463079e-01 + 7.4360318149153892e-01 8.0614076370841004e-01 -2.6059189391073639e-01 + 9.0314096152144696e-01 1.0017204927933343e+00 -2.3234322779490946e-01 + 1.0263922960547136e+00 1.1726112387505381e+00 -1.6505560910826511e-01 + 1.1298098005124975e+00 1.3488281545186203e+00 -5.1591611028336426e-02 + 1.2223386602751836e+00 1.5756359386174603e+00 7.7329742776975241e-02 + 1.2999737408810499e+00 1.8662522308160105e+00 1.6040673141573780e-01 + 1.3602812503601518e+00 2.2105488563426872e+00 1.6716380884189319e-01 + 1.4139891054432951e+00 2.6115873034870525e+00 7.9485484049970800e-02 + 1.5085244564508067e+00 3.0453080118340967e+00 -1.3893430245147531e-01 + 1.7052439486690070e+00 3.4055015862552809e+00 -4.8453515752605836e-01 + 2.0020411289041404e+00 3.6087340272227557e+00 -8.9612622448568846e-01 + 2.3449496149649791e+00 3.6410800472805782e+00 -1.3245953382828950e+00 + 2.6887575074474523e+00 3.5196396813838664e+00 -1.7349064426242813e+00 + 3.0581385796976832e+00 3.2600503062011028e+00 -2.1200026240767120e+00 + 3.4985377053156297e+00 2.8225798260140218e+00 -2.4668040518715637e+00 + 3.9204665620721535e+00 2.1848239067732238e+00 -2.6845757613681700e+00 + 3.9800667805968022e+00 1.8885941431232243e+00 -2.6134830120706853e+00 + id 11373 + loc 9.0066212415695190e-01 4.9458593130111694e-01 410 + blend 0.0000000000000000e+00 + interp 4.6921232061045298e-01:2.5750818145944648e-01:2.2740841627554043e-01:3.2883385783229019e-01:1.0336126474827765e+00:4.6920762848724690e-01:1.6593347182453386e+00:4.4535200616343873e-01:2.2211915898752057e+00:2.6267468426037915e-01:2.9041189212750380e+00:3.4073185313047172e-01:3.3290351011816006e+00 + CVs 20 + -4.4598735526097838e-01 2.5884451869038128e-01 1.7555763529924301e-01 + -8.1629155546938470e-01 4.6903003644502972e-01 3.2916877138554596e-01 + -1.1819646219895512e+00 6.6900409428370455e-01 4.6867578905910312e-01 + -1.5652220338913032e+00 8.6149305985413016e-01 6.0741095279359536e-01 + -1.9585484764388528e+00 1.0270679390227828e+00 7.6888578845665012e-01 + -2.3490336441904129e+00 1.1449263723627277e+00 9.7940654466126498e-01 + -2.7158071010427745e+00 1.1973759607663252e+00 1.2574098872224262e+00 + -3.0393334998024399e+00 1.1713990177910816e+00 1.6044598656263362e+00 + -3.3185542703012452e+00 1.0572457762118503e+00 2.0034957577732544e+00 + -3.5639782132308109e+00 8.4365218366577088e-01 2.4232264848673504e+00 + -3.7817990610632179e+00 5.1104677665768272e-01 2.8211218470551924e+00 + -3.9738314859248209e+00 5.9108496755305495e-02 3.1709046743793294e+00 + -4.1503870943921823e+00 -4.5996000417550653e-01 3.5059365017372510e+00 + -4.3307291500810727e+00 -9.6927246335739436e-01 3.8835846967508627e+00 + -4.5383339142775911e+00 -1.3952675388736004e+00 4.3483473359821714e+00 + -4.8005951949421926e+00 -1.7070951007056745e+00 4.9090942564686504e+00 + -5.1455738622718421e+00 -1.9260802511213067e+00 5.5341155027295423e+00 + -5.5734958870650182e+00 -2.0876218854481401e+00 6.1630562813145566e+00 + -6.0375911606926209e+00 -2.2267765477129080e+00 6.7558583575868871e+00 + id 11374 + loc 7.6810640096664429e-01 7.0552605390548706e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4248736300840924e-01:4.2336038931635439e-01:4.0935159117618358e-02:3.5291907593111949e-01:7.7405375102746632e-01:4.2593360456698792e-01:1.2831608899147016e+00:4.4248293813477918e-01:1.9454507723637136e+00:3.5082399475514969e-01:2.5752804851615383e+00:3.4811468636090931e-01:3.5724183056640664e+00 + CVs 20 + 1.7289236523717000e-01 2.9084584616755610e-01 -2.3051050047905919e-01 + 3.6601474397816497e-01 5.8384884667140935e-01 -4.4335828364585467e-01 + 5.6322014509877094e-01 8.6180055598152328e-01 -6.6847890335777227e-01 + 7.5485690915991122e-01 1.1122726858410430e+00 -9.1422006247961785e-01 + 9.3283972502999446e-01 1.3156811738448575e+00 -1.1772558192342322e+00 + 1.0884128700259392e+00 1.4484297638815853e+00 -1.4611108643588253e+00 + 1.2232186541669661e+00 1.5080006653700539e+00 -1.7753552432593160e+00 + 1.3456599458541341e+00 1.5059352131742403e+00 -2.1286257013456629e+00 + 1.4590974916676713e+00 1.4512319163683771e+00 -2.5158267780640360e+00 + 1.5653837850508856e+00 1.3531659727512264e+00 -2.9233191970076970e+00 + 1.6657754005095680e+00 1.2199803470115840e+00 -3.3357427541593632e+00 + 1.7552337532242348e+00 1.0553471562662804e+00 -3.7380050880050200e+00 + 1.8192319304464275e+00 8.6090965822325294e-01 -4.1214513027252222e+00 + 1.8299546031854288e+00 6.5215765360829558e-01 -4.4853289435277430e+00 + 1.7515099832086918e+00 4.7185254286949702e-01 -4.8281858515303258e+00 + 1.5741148101780518e+00 3.6870923059708316e-01 -5.1384064316008438e+00 + 1.3284756713101129e+00 3.6941988368441792e-01 -5.4007061397583405e+00 + 1.0646787838064919e+00 4.5151703764891016e-01 -5.6247480019489258e+00 + 8.2075201779128282e-01 3.9286062203234395e-01 -5.9728769766509098e+00 + id 11375 + loc 2.5218394398689270e-01 7.6882332563400269e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4777395524509389e-01:3.2440232860098372e-01:5.4910544342771750e-01:4.1075126450218624e-01:1.0044091165798752e+00:4.1836169609396012e-01:1.5280665623020768e+00:4.1826199181535278e-01:1.9957533235570240e+00:2.9488246258104889e-01:2.3009349223339575e+00:4.4776947750554147e-01:3.2133883795657603e+00:4.1666665862223068e-01:3.9873539060074181e+00 + CVs 20 + 1.6682135519864433e-01 2.8645889682012904e-01 -7.5515240388565497e-02 + 2.8846519792116054e-01 6.2090821202131119e-01 -1.6465633256592802e-01 + 4.1193207486808520e-01 9.8214723256759695e-01 -2.9176045208714141e-01 + 5.6110496860970460e-01 1.3435301571346756e+00 -4.7464010629002340e-01 + 7.4358055541110368e-01 1.6860597707995393e+00 -7.2824144769622323e-01 + 9.6932711741629141e-01 1.9834230718325123e+00 -1.0588971125648201e+00 + 1.2440933964696648e+00 2.2056341080847739e+00 -1.4585084293743531e+00 + 1.5637662480534766e+00 2.3283662589690204e+00 -1.9063418946320083e+00 + 1.9141007518848403e+00 2.3392421755414139e+00 -2.3753652117985484e+00 + 2.2696581837323855e+00 2.2404196084248884e+00 -2.8380424294335334e+00 + 2.5986189197680081e+00 2.0475515833334428e+00 -3.2747466108972239e+00 + 2.8693068379272431e+00 1.7811566376721675e+00 -3.6757393829732474e+00 + 3.0463263600716903e+00 1.4677922482912846e+00 -4.0321892837408573e+00 + 3.0931864946957668e+00 1.1627685826003558e+00 -4.3259950192325780e+00 + 2.9989608784893687e+00 9.7083367633556383e-01 -4.5230641763803678e+00 + 2.8475872659055428e+00 1.0254090908279128e+00 -4.5640928700983308e+00 + 2.8333360614401997e+00 1.3154974272085209e+00 -4.3969872826442709e+00 + 2.9405532561106664e+00 1.5730587728545924e+00 -4.1276281350995436e+00 + 2.5737352843534880e+00 1.6287777376746790e+00 -4.3097806167705004e+00 + id 11376 + loc 3.8074609637260437e-01 9.4155952334403992e-02 1074 + blend 0.0000000000000000e+00 + interp 5.9122182727111916e-01:2.6184946113415952e-01:5.5840515823540704e-01:5.9121591505284643e-01:1.0054577900729689e+00:5.5178201627744761e-01:1.7224108494304176e+00:4.1396402359211598e-01:1.9918293307463653e+00:3.1405672275934893e-01:2.3292419152722634e+00:4.0455551852368782e-01:2.9390050763189719e+00:4.7649512904051716e-01:3.2938886566114114e+00:3.6780607502556195e-01:3.9918970316710269e+00 + CVs 20 + -2.6495970675786046e-01 4.0673611105464941e-01 -1.2388794738204745e-01 + -4.8478847677876297e-01 8.2317379980461014e-01 -2.5666351072735871e-01 + -6.7804557247373987e-01 1.2547924350378294e+00 -3.7846847164109204e-01 + -8.4184088934539203e-01 1.6991067272673543e+00 -4.7730704566765619e-01 + -1.0036789588251875e+00 2.1642100550978984e+00 -5.5119372011936307e-01 + -1.2483973474623395e+00 2.6368552384624606e+00 -6.0909098511862159e-01 + -1.6442563677289630e+00 3.0126353542550675e+00 -6.8146297165169034e-01 + -2.1244867970398760e+00 3.1760111069444075e+00 -8.0785197279314447e-01 + -2.5536731380236879e+00 3.1287345745840542e+00 -1.0047790911360970e+00 + -2.8315304890187680e+00 2.9522620537598856e+00 -1.2608455058793331e+00 + -2.9286495143502909e+00 2.7397713323119284e+00 -1.5449009071421409e+00 + -2.8840807240348814e+00 2.5335905918419579e+00 -1.8270948773301581e+00 + -2.7589901307053224e+00 2.3097165964966484e+00 -2.1040660841269925e+00 + -2.5676173791330408e+00 2.0121901044155428e+00 -2.3627999689508159e+00 + -2.2684416197424491e+00 1.6473282794567496e+00 -2.5005968920128758e+00 + -1.8632073454584805e+00 1.3510938771239835e+00 -2.4004923627355015e+00 + -1.4544568018978137e+00 1.3997009142250034e+00 -1.9675199942884369e+00 + -1.3840636876990446e+00 2.0004976184576018e+00 -1.4455122749144860e+00 + -1.0185306001519596e+00 1.9418889091762157e+00 -1.1863588542172783e+00 + id 11377 + loc 4.2412492632865906e-01 2.6860132813453674e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9397275148413655e-01:4.1095474307200963e-01:3.6374718709768628e-01:3.7454664834655826e-01:9.8171191286997761e-01:3.0742555952983547e-01:1.8311213280589360e+00:3.4362100108284349e-01:2.1840753109825264e+00:4.9396781175662174e-01:2.8685642914683767e+00:3.5864098969375430e-01:3.2226889604764963e+00:4.1151410566419760e-01:3.9975333678528377e+00 + CVs 20 + 3.1578820447067935e-01 4.1258018201677532e-01 1.7268339605829214e-01 + 5.8714994574299939e-01 7.9836087801752731e-01 3.6890541212037975e-01 + 8.4816006982087822e-01 1.1759432337399356e+00 5.8745686255618712e-01 + 1.1119355407538287e+00 1.5495483477108538e+00 8.4002556571813458e-01 + 1.3712934609116201e+00 1.9025598088687405e+00 1.1446082605248979e+00 + 1.6170004889667147e+00 2.2105855132194652e+00 1.5174757269418699e+00 + 1.8349353451067205e+00 2.4441470210714691e+00 1.9682320055952038e+00 + 2.0020109398204728e+00 2.5736778275570611e+00 2.4935090442604562e+00 + 2.0909916824647037e+00 2.5700582906478346e+00 3.0738893422250113e+00 + 2.0786063132497370e+00 2.3948964393379351e+00 3.6743763823674289e+00 + 1.9441407746322077e+00 2.0029368833933359e+00 4.2242347740513377e+00 + 1.6951385507798102e+00 1.4110524563085423e+00 4.6127260214264645e+00 + 1.3748304730031828e+00 7.2417167560794193e-01 4.7806668140283444e+00 + 1.0147050864222553e+00 9.2905592563989892e-02 4.7868990057506187e+00 + 6.1829560855128629e-01 -3.6674537866794743e-01 4.7700478953125840e+00 + 1.8439335559550507e-01 -6.2119874274859654e-01 4.8102599993235318e+00 + -2.7517666217615044e-01 -6.5655170118254302e-01 4.9129859168809586e+00 + -6.9144716930677053e-01 -4.9430427301071211e-01 5.0794063799307203e+00 + -1.1113899673897765e+00 -4.6281737524906696e-01 5.2068963613352448e+00 + id 11378 + loc 3.5911679267883301e-01 2.1889215707778931e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4668145839759360e-01:4.3562433619436330e-01:2.5184560932330569e-02:2.5066310845329459e-01:4.1278738846770924e-01:2.8138105650208284e-01:1.0504236957422852e+00:2.4418653097207438e-01:1.9993795003626165e+00:3.4182911215635131e-01:2.9817722439422436e+00:4.4667699158300966e-01:3.4554116964124644e+00 + CVs 20 + -2.1339985216136087e-01 2.9162774473231812e-01 -6.8937026180126856e-02 + -4.3901992570205423e-01 6.2138095309923347e-01 -9.7028370451490598e-02 + -6.7934630864769185e-01 9.7193036247063858e-01 -1.0319452029634973e-01 + -9.5068266941659052e-01 1.3227544197655583e+00 -1.0923302496519760e-01 + -1.2706909806910407e+00 1.6516491315565245e+00 -1.3672289336100529e-01 + -1.6381945996109015e+00 1.9334738602787140e+00 -2.1297989824394958e-01 + -2.0285355274670347e+00 2.1329200828070931e+00 -3.7756521002069587e-01 + -2.3943317081795015e+00 2.1951507717740260e+00 -6.5274311229999959e-01 + -2.6825394884024520e+00 2.0892705139215546e+00 -1.0007714431499188e+00 + -2.8691227094263247e+00 1.8420649883553817e+00 -1.3593597973725244e+00 + -2.9569282235693404e+00 1.4931363646905482e+00 -1.6702444458603212e+00 + -2.9663711671846928e+00 1.0782577967832911e+00 -1.8562313808534734e+00 + -2.9258673728518665e+00 6.5592384518590907e-01 -1.8727707525540165e+00 + -2.8343666787521649e+00 2.6493998418707998e-01 -1.8377001702855558e+00 + -2.6571612738022852e+00 -1.2869895212167870e-01 -1.9377688770387380e+00 + -2.3812205556155019e+00 -4.8396655320011961e-01 -2.2546945446720570e+00 + -2.0579018510012395e+00 -6.6860042607318670e-01 -2.7761660105396362e+00 + -1.7680538370131205e+00 -6.1646632623501008e-01 -3.3497323836928583e+00 + -1.5517411033596851e+00 -6.6439535747956247e-01 -3.7038818260437525e+00 + id 11379 + loc 1.3814340531826019e-01 7.7239662408828735e-01 410 + blend 0.0000000000000000e+00 + interp 4.3250581428991663e-01:2.4061433476892008e-01:7.6693595462641007e-01:3.9261299580781733e-01:1.0710762434660461e+00:4.3250148923177373e-01:1.7962286379920847e+00:3.7015565771251041e-01:2.3765751939459854e+00:2.9896725780441774e-01:3.0002319947960925e+00:3.0696686768988241e-01:3.9924785358204371e+00 + CVs 20 + 3.9094779180899308e-01 1.2232493720703494e-01 -1.2069467251541156e-01 + 7.2103011695566499e-01 1.9038149021752909e-01 -2.4618520304842550e-01 + 1.0575466420901862e+00 2.4691278257164107e-01 -3.5921949442793621e-01 + 1.4247956097814507e+00 3.0395826982366569e-01 -4.4991998853231596e-01 + 1.8171037750759274e+00 3.5672971609052040e-01 -5.0869958080111966e-01 + 2.2258980718266299e+00 4.0240747370253915e-01 -5.2454221565611658e-01 + 2.6394865266319036e+00 4.3924466429628461e-01 -4.9041757261233743e-01 + 3.0458629603265370e+00 4.6614467863030629e-01 -4.0730588918107402e-01 + 3.4351122252581954e+00 4.8465235722991085e-01 -2.7933761306495253e-01 + 3.7992710503806428e+00 4.9627576875462220e-01 -1.1464188363048733e-01 + 4.1395244686909569e+00 4.8597255571343601e-01 5.0195911523750025e-02 + 4.4727973995260708e+00 4.1792998291084982e-01 1.4033826182996378e-01 + 4.7985473499473112e+00 2.8105231045292278e-01 1.0957704140662816e-01 + 5.1034752888806736e+00 1.0828991306560898e-01 -2.2781594862936183e-03 + 5.3921485249872738e+00 -7.9817693107277599e-02 -1.5336368211669993e-01 + 5.6577422003617519e+00 -2.7509009283381802e-01 -3.5201200291671786e-01 + 5.8880129737920406e+00 -4.6117983891105219e-01 -6.0727906771459750e-01 + 6.0959249308705221e+00 -6.2314245919328570e-01 -8.9074867386737810e-01 + 6.4070262878190700e+00 -7.5308224541731361e-01 -1.0539589252064263e+00 + id 11380 + loc 4.1206067800521851e-01 4.7534066438674927e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2504051178688460e-01:3.2222021229866260e-01:5.6628341445163377e-02:2.9131906991098538e-01:9.2855609569206854e-01:2.8643211275767505e-01:1.9686153642671371e+00:4.6867703732154253e-01:2.1724218405006961e+00:5.2503526138176670e-01:2.7522167610509927e+00:2.7071160011825995e-01:3.2794778297012401e+00 + CVs 20 + -4.5037408743206725e-01 7.1362860865263900e-01 -1.2573757159922633e-01 + -8.3975419231656268e-01 1.4311959491219910e+00 -3.2280613982941186e-01 + -1.1305664005464178e+00 2.1244139812176699e+00 -5.8281663878394574e-01 + -1.2249510306241000e+00 2.7190591594933755e+00 -9.0304544705657008e-01 + -1.0643316906992921e+00 3.1419483134118815e+00 -1.2581631918932210e+00 + -6.9337807608779434e-01 3.3651080603011021e+00 -1.5965859639207183e+00 + -2.0247548020978501e-01 3.3882124184702378e+00 -1.8666726901170638e+00 + 3.4293442742115432e-01 3.2559250114032952e+00 -2.0457301081891028e+00 + 9.1419552430698325e-01 3.0196224256575643e+00 -2.1323258719833071e+00 + 1.5021151606220184e+00 2.7068225753241504e+00 -2.1280941245757781e+00 + 2.0845619209133659e+00 2.3309350728100404e+00 -2.0319664980298762e+00 + 2.6008196381374655e+00 1.9405582315393195e+00 -1.8569475257258803e+00 + 2.9897989811219370e+00 1.6019687130354141e+00 -1.6292610987515834e+00 + 3.2010460071644333e+00 1.3391131131561962e+00 -1.3609846825693872e+00 + 3.1975866309737624e+00 1.0996021910946350e+00 -1.0507516531291687e+00 + 3.2814052416863952e+00 8.2621399231804604e-01 -7.0840467107404270e-01 + 3.7013574694077440e+00 7.3981905582974905e-01 -5.1324809092782175e-01 + 4.3083328688679812e+00 1.0313087630141686e+00 -5.7923692214698275e-01 + 4.9877428852887311e+00 1.6926310753022280e+00 -8.8222070806202635e-01 + id 11381 + loc 1.0647183656692505e-01 3.5688081383705139e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3949065830697742e-01:3.8269421923830355e-01:8.0339821317156890e-03:3.0811700644122197e-01:7.0924396795683953e-01:4.0002065920080243e-01:1.3723436058557217e+00:4.3948626340039437e-01:1.9968192606063326e+00:3.5122865895338284e-01:2.7454253543636664e+00:4.2028386870368428e-01:3.2545562514069823e+00 + CVs 20 + -1.6498776240477081e-01 4.0054937571456800e-01 -1.3648552306578030e-01 + -3.4111542200878231e-01 8.1093817744331709e-01 -2.6314546590716098e-01 + -5.1389023204322926e-01 1.2367361922249620e+00 -3.6958080483206524e-01 + -6.5108882289722192e-01 1.6814028163120769e+00 -4.3838312084023640e-01 + -7.4211781325096682e-01 2.1291194371350635e+00 -4.6060674707508453e-01 + -8.6033168022179496e-01 2.5343019516155629e+00 -4.5869604978140088e-01 + -1.0994958694308563e+00 2.8236467557960503e+00 -4.7557536689218227e-01 + -1.4564619101293075e+00 2.9731161064426477e+00 -5.3902778921317851e-01 + -1.8867963605018356e+00 2.9899910823875002e+00 -6.7552385432355111e-01 + -2.3207645208165295e+00 2.8847416791681502e+00 -9.1621143159497931e-01 + -2.6977910537869993e+00 2.6995763450549370e+00 -1.2714304856314045e+00 + -3.0015843422180155e+00 2.4804265951903934e+00 -1.7114641865187330e+00 + -3.2582567789058734e+00 2.2355892633984134e+00 -2.1900200801407550e+00 + -3.4820268980837628e+00 1.9146741115385129e+00 -2.6722740240314793e+00 + -3.6430677926490387e+00 1.4419595885303789e+00 -3.1172260676404568e+00 + -3.6485145571758864e+00 7.5686767892432627e-01 -3.4746286308559187e+00 + -3.2332113249102474e+00 -2.1760476211215607e-01 -3.5951855909591006e+00 + -2.3924680016498208e+00 -1.0833503728643605e+00 -3.2167422341014342e+00 + -2.2709010964199159e+00 -1.4701495980606349e+00 -3.1640008465621436e+00 + id 11382 + loc 2.1298903226852417e-01 9.9443674087524414e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5108253742569654e-01:3.3470478163679623e-01:9.8436226024154583e-02:3.0697658137748229e-01:1.3377040869517098e+00:2.8290968585124160e-01:2.0411150512955718e+00:3.4510925730594239e-01:2.9376263135385621e+00:3.6071843723989022e-01:3.1963930143314090e+00:4.5107802660032231e-01:3.7798173557351853e+00 + CVs 20 + 3.6079183077543736e-01 2.9457768991084948e-01 -9.0434076651869311e-02 + 6.9820858939105879e-01 5.8244618640813306e-01 -2.0136597021093330e-01 + 1.0147434700764264e+00 8.6177582274744557e-01 -3.1940155502763384e-01 + 1.3066266119286674e+00 1.1189982909546787e+00 -4.4790530469091561e-01 + 1.5676433733611530e+00 1.3413662705000957e+00 -5.9619472826469311e-01 + 1.7893292853078249e+00 1.5207164306878025e+00 -7.7023322207778910e-01 + 1.9680744323310722e+00 1.6559990171632344e+00 -9.6795674423024503e-01 + 2.1089824712789498e+00 1.7525366857231828e+00 -1.1823638286710034e+00 + 2.2232045637735984e+00 1.8161785511642816e+00 -1.4078966878123045e+00 + 2.3258554880938127e+00 1.8495449897762541e+00 -1.6440030821062548e+00 + 2.4280099647022584e+00 1.8485628521505191e+00 -1.8923423362721468e+00 + 2.5301565786897324e+00 1.8046881627967948e+00 -2.1503612542753392e+00 + 2.6211394353013460e+00 1.7149973629929502e+00 -2.4084951108203079e+00 + 2.6800541740942356e+00 1.5958009299528655e+00 -2.6502142464276255e+00 + 2.6899380838912870e+00 1.4791618179285380e+00 -2.8559045542061403e+00 + 2.6557661143649982e+00 1.3887747167949149e+00 -3.0122524813423044e+00 + 2.5990113574755176e+00 1.3270106251578935e+00 -3.1176648615482332e+00 + 2.5275003605318735e+00 1.2688339658819667e+00 -3.1922278901658103e+00 + 2.3452483006309603e+00 1.1751493269228093e+00 -3.2858792961180079e+00 + id 11383 + loc 2.4736027419567108e-01 9.1308808326721191e-01 1047 + blend 0.0000000000000000e+00 + interp 5.3741738043937048e-01:2.7483972331597573e-01:1.3695311824099354e-01:3.2227091018038373e-01:9.7648290353716682e-01:5.3741200626556607e-01:1.6429524580256984e+00:3.1554476383097851e-01:2.0211570877411877e+00:3.3392363112343643e-01:2.9174378841509467e+00:3.0024407363698441e-01:3.6293210736025250e+00 + CVs 20 + 1.7965233845897025e-01 6.7519986891544248e-01 -3.2730413804556013e-01 + 3.4945060460283994e-01 1.3420600688209479e+00 -6.4005818882879484e-01 + 5.3329325688213991e-01 2.0003807638750315e+00 -9.2681343727935872e-01 + 7.9016978332944865e-01 2.6577635762906047e+00 -1.1246474191817082e+00 + 1.1878967736182922e+00 3.2840309862115085e+00 -1.1019246660189133e+00 + 1.7083011124574428e+00 3.7721865215507231e+00 -7.8154873315804863e-01 + 2.2692130490312108e+00 4.0090373867803972e+00 -1.9487757746544121e-01 + 2.7777520846676818e+00 3.9233718624432274e+00 5.6378593010324640e-01 + 3.1682125507349679e+00 3.5072882463462016e+00 1.3964185823684332e+00 + 3.3909805492339848e+00 2.7722277140119242e+00 2.1933445886577965e+00 + 3.4105399214994803e+00 1.7791141704137616e+00 2.8402321965429911e+00 + 3.2069309776238462e+00 6.6458238410046211e-01 3.3181739310084142e+00 + 2.7899949385816476e+00 -3.8574487801187241e-01 3.7672573027215890e+00 + 2.3217157620026310e+00 -1.1516157550054211e+00 4.3781302047140080e+00 + 2.1788268229473866e+00 -1.3747449500449973e+00 5.2226938151307980e+00 + 2.5007418521538245e+00 -1.0379757813255530e+00 6.0223870077629202e+00 + 3.0067471159397199e+00 -4.3375593679034496e-01 6.6424659648354947e+00 + 3.5430928361347727e+00 2.4510124756016394e-01 7.1742819280839232e+00 + 3.9117129951824730e+00 6.2378680259517649e-01 7.9501560771363389e+00 + id 11384 + loc 6.7633688449859619e-01 4.3167829513549805e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7022714816496536e-01:3.3361291274984556e-01:1.6981716770946598e-01:3.4599522415038336e-01:9.0727066981339566e-01:2.5198955224948999e-01:1.8031006130040070e+00:3.1251733381446251e-01:2.3715573624731014e+00:3.8458096890881360e-01:3.0655128324130168e+00:4.7022244589348372e-01:3.9642067168118902e+00 + CVs 20 + -3.9218119369779786e-02 2.1529876672216164e-01 2.7655470402869214e-01 + -8.9798058948239334e-02 3.9872108811720741e-01 5.2737473369206722e-01 + -1.3676370266972845e-01 5.6451670235533880e-01 7.6906197293330303e-01 + -1.7622111794487322e-01 7.2036742306731261e-01 1.0155955060578921e+00 + -2.1800731446637633e-01 8.6887030587963399e-01 1.2833139921561472e+00 + -2.6303407141776430e-01 1.0120223549459793e+00 1.5823015084005241e+00 + -2.9946996404450177e-01 1.1529997552019879e+00 1.9101419567765845e+00 + -3.1731154831517028e-01 1.2923484774306249e+00 2.2558844241160916e+00 + -3.2012458405768807e-01 1.4206147513313718e+00 2.6054650687579799e+00 + -3.1793553538689234e-01 1.5147377696139692e+00 2.9473317167788027e+00 + -3.1770413500358741e-01 1.5436834648308850e+00 3.2787797901475080e+00 + -3.2314187409298611e-01 1.4789388375641970e+00 3.6045478669099253e+00 + -3.3810556546768478e-01 1.3007787766601562e+00 3.9283341288880522e+00 + -3.7334226401008441e-01 1.0011291473546782e+00 4.2480670836631145e+00 + -4.3477153474117286e-01 5.9050109590285071e-01 4.5479152818925215e+00 + -4.8517684831848173e-01 9.8743506920664359e-02 4.8028149324630451e+00 + -4.4324082764803330e-01 -4.3462899252163201e-01 4.9934370133565151e+00 + -2.7507053031917705e-01 -9.6608608449357614e-01 5.1178207817604617e+00 + -2.0874890117980921e-01 -1.5212368053193996e+00 5.3878262052349157e+00 + id 11385 + loc 9.2374372482299805e-01 9.5204979181289673e-02 1077 + blend 0.0000000000000000e+00 + interp 4.3958595589363730e-01:4.3958156003407839e-01:4.9752340387620997e-04:4.2551147451137339e-01:4.8220158020843806e-01:3.3397114229119285e-01:1.1218434671426016e+00:4.2116395996276579e-01:1.9946857850078423e+00:4.3839270802113750e-01:2.9334877216247817e+00:3.8724359025198796e-01:3.1691935575695158e+00 + CVs 20 + 5.2798430040130212e-02 3.6436057526144272e-01 3.2231788678609419e-01 + 1.0676296123739565e-01 7.2835622663811661e-01 6.0799547183576552e-01 + 1.4103553445131234e-01 1.0768456433687912e+00 9.2162594846687440e-01 + 1.3025545749741552e-01 1.3888803077217071e+00 1.2960719194323183e+00 + 5.4282811114709562e-02 1.6384780727019392e+00 1.7349728805537801e+00 + -9.5440404611828011e-02 1.7996320900525700e+00 2.2231175463615815e+00 + -3.1776443843608226e-01 1.8520609762376017e+00 2.7322101175449354e+00 + -6.0192394376890113e-01 1.7858763732934655e+00 3.2271054665026244e+00 + -9.2320536842765355e-01 1.6051474554404139e+00 3.6761484286596415e+00 + -1.2420540234087629e+00 1.3275112696828102e+00 4.0646353139906841e+00 + -1.5155933588821282e+00 9.7654844889451908e-01 4.3978395037181581e+00 + -1.7074135397780708e+00 5.7458894422757889e-01 4.6857795268703084e+00 + -1.7881181889653099e+00 1.4750969500958089e-01 4.9319369074880646e+00 + -1.7346113753687695e+00 -2.6487685822003160e-01 5.1388243313249129e+00 + -1.5252921314438410e+00 -5.9747043949976675e-01 5.3073111231036387e+00 + -1.1839629219604515e+00 -7.7412852367352580e-01 5.4296377453475175e+00 + -8.0248275421676474e-01 -7.7902749904189517e-01 5.5305978773445608e+00 + -4.4230918969753646e-01 -6.7360933956935809e-01 5.6420907155651596e+00 + -1.0293622254557644e-01 -8.1956779880631558e-01 5.8480838763418115e+00 + id 11386 + loc 6.7712819576263428e-01 8.4819100797176361e-02 410 + blend 0.0000000000000000e+00 + interp 4.1940273983987042e-01:4.0139613466626273e-01:5.4532396535038929e-01:4.1939854581247205e-01:1.0152818334779683e+00:4.1346919756212508e-01:1.9837246334788401e+00:2.9062879989832041e-01:2.9085149075814121e+00:3.1126502796150191e-01:3.9436536843583165e+00 + CVs 20 + -3.2036011204046755e-01 3.1220757958580880e-01 1.2764355888501316e-01 + -6.1829452287561582e-01 6.2274282335662690e-01 2.5443263208768219e-01 + -9.2266710440504918e-01 9.4696542280633089e-01 3.6420632312017148e-01 + -1.2486866431567043e+00 1.2713040187084663e+00 4.7096623633701806e-01 + -1.6005417792764134e+00 1.5631113721128802e+00 6.1528234291471273e-01 + -1.9617654427715929e+00 1.7908317039987665e+00 8.3634287968628385e-01 + -2.3027266669431254e+00 1.9366526102811088e+00 1.1376568618926091e+00 + -2.6094792608965527e+00 1.9910056705024555e+00 1.4921577077618080e+00 + -2.8844298498971881e+00 1.9453515676570114e+00 1.8674292996738739e+00 + -3.1295428189990497e+00 1.7922512553105658e+00 2.2338012303082908e+00 + -3.3244640475607303e+00 1.5394560128280403e+00 2.5475821576728728e+00 + -3.4303766882021796e+00 1.2232241168125717e+00 2.7621940929112689e+00 + -3.4317158156446679e+00 8.6750610835150210e-01 2.8708201520163072e+00 + -3.3492900461134134e+00 4.4974568271332505e-01 2.9098721287132339e+00 + -3.2248421676167025e+00 -6.7687697993512597e-02 2.9643173912587288e+00 + -3.0973754700493714e+00 -6.6888855536178027e-01 3.1552352031116655e+00 + -3.0077989041186433e+00 -1.2973194050177201e+00 3.5278792106163737e+00 + -3.0164624172397403e+00 -1.9131448495777374e+00 3.9996008882905931e+00 + -3.1508143710970433e+00 -2.4613411821487139e+00 4.4029156604516739e+00 + id 11387 + loc 6.8209391832351685e-01 9.6181458234786987e-01 1053 + blend 0.0000000000000000e+00 + interp 5.1313212906507422e-01:5.1312699774378356e-01:2.5348546929933302e-01:3.3920139605421717e-01:8.9343974358882683e-01:2.0852979249363077e-01:2.4725518245885518e+00:3.0679041487599090e-01:3.0441155898181966e+00:3.5759313707479157e-01:3.8039935123387316e+00 + CVs 20 + 1.1717233770443689e-01 5.0045027016891219e-01 2.8028150439308130e-01 + 1.5530344238318494e-01 9.3399617127369683e-01 5.4143353684301698e-01 + 1.6756173853660483e-01 1.3300091580674942e+00 8.1401877122367128e-01 + 1.6232355479193805e-01 1.7033333935317023e+00 1.1161852748237859e+00 + 1.1861728991804799e-01 2.0474075943713910e+00 1.4495748284267829e+00 + 7.5155085906897234e-03 2.3477487860967670e+00 1.8122721484657167e+00 + -2.0618116068554548e-01 2.5764409814456530e+00 2.1935319904374708e+00 + -5.5176851450309838e-01 2.6886749181364604e+00 2.5612598149219563e+00 + -1.0171080953082505e+00 2.6259835119951549e+00 2.8546266646509757e+00 + -1.5184330625044022e+00 2.3433334609095651e+00 3.0067466996559444e+00 + -1.9191711591057028e+00 1.8662402904144584e+00 2.9923219438744288e+00 + -2.1393742570412808e+00 1.2928036265502665e+00 2.8540200346661022e+00 + -2.1983797582613791e+00 6.9388104540689111e-01 2.6240774345796369e+00 + -2.1548338356327230e+00 1.1485638512998764e-01 2.2840895493701407e+00 + -2.0739191997818653e+00 -3.9105759805792567e-01 1.7892704520095537e+00 + -1.9997390079457873e+00 -7.3929129563567542e-01 1.1093099562882254e+00 + -1.9576634871025145e+00 -8.0604380550071997e-01 2.8681982432076492e-01 + -1.9773875378996286e+00 -5.4993162846275756e-01 -4.5183239198697078e-01 + -2.0382249710159126e+00 -3.3143764521818697e-01 -8.1391332673665495e-01 + id 11388 + loc 9.2964977025985718e-01 9.9653601646423340e-01 1070 + blend 0.0000000000000000e+00 + interp 4.8215059350983736e-01:2.7921271628338307e-01:7.9091238136956954e-02:3.7931139998420355e-01:9.3059691548073753e-01:4.8214577200390230e-01:1.5045459464665685e+00:2.5193834884853833e-01:2.2446464961635986e+00:3.0428713505707966e-01:3.1193948407002532e+00 + CVs 20 + -2.3170425794483224e-01 2.3701291410612985e-01 5.7821733675847253e-02 + -4.4250820620032938e-01 4.6157476964587901e-01 1.2547604437396651e-01 + -6.1640112549854731e-01 6.8253847301840642e-01 2.2120278845833635e-01 + -7.5114855786274404e-01 8.8525956889354807e-01 3.3126089241596174e-01 + -8.7227721495608823e-01 1.0635988491828130e+00 4.2101733152184517e-01 + -1.0126735747128770e+00 1.2207389144207548e+00 4.6188751944633849e-01 + -1.1883998730563279e+00 1.3478909002067789e+00 4.5558914606983447e-01 + -1.4146075834055396e+00 1.4349821249107801e+00 4.0843097043087506e-01 + -1.6705277470631841e+00 1.4699551834665436e+00 3.0005635204223946e-01 + -1.8765958187546095e+00 1.4509498701246994e+00 1.2953995166754717e-01 + -2.0091530856150599e+00 1.4168355491077653e+00 -6.8391414628447444e-02 + -2.1080542494588577e+00 1.4137634479622139e+00 -2.9442683331973973e-01 + -2.1458776237332331e+00 1.4307892121347621e+00 -5.3102551530480469e-01 + -2.0273172434545965e+00 1.4118298250155867e+00 -6.2698580190734465e-01 + -1.7163100432201157e+00 1.2833180641513857e+00 -4.8242496549405489e-01 + -1.2307723827533152e+00 8.8029916802440011e-01 -2.2271272177684809e-01 + -6.1199841931824717e-01 3.5436463811947684e-02 -1.8985977700623788e-01 + -1.5076530430110585e-01 -7.3456155505529575e-01 -6.8259788181853609e-01 + -1.6073624150279289e-01 -6.3865072882680407e-01 -8.7447380291591958e-01 + id 11389 + loc 5.7412284612655640e-01 7.0266157388687134e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2538742834083004e-01:3.6547447839151459e-01:3.2750428883167382e-01:3.4606259407813195e-01:9.4076032806306487e-01:4.2538317446654667e-01:1.1467019642868581e+00:3.6337437532832789e-01:1.7843858304194087e+00:3.2375321005473917e-01:2.1055547860603698e+00:2.5665021305085756e-01:3.0683639997652152e+00:3.1043450935458206e-01:3.9645248001404978e+00 + CVs 20 + 1.4496800311642818e-01 3.1940220942790210e-01 -3.6765001487425431e-01 + 3.2522009300881105e-01 6.1809797864654570e-01 -6.8416681841674798e-01 + 5.3063456272281062e-01 8.9602950166589090e-01 -9.7017042561089262e-01 + 7.5271935281231317e-01 1.1554254530121075e+00 -1.2331251185548835e+00 + 9.8290653360127411e-01 1.3977146537551395e+00 -1.4768656071182709e+00 + 1.2116049447888140e+00 1.6232684802203587e+00 -1.7113969447343382e+00 + 1.4295817131746884e+00 1.8316571221035509e+00 -1.9490823656732759e+00 + 1.6321839204390336e+00 2.0214287383498291e+00 -2.2040126933543465e+00 + 1.8191266347328234e+00 2.1697843119079794e+00 -2.5126708426975921e+00 + 1.9735772440835855e+00 2.2190788762053053e+00 -2.8976312219856166e+00 + 2.0697276292533191e+00 2.1350447135185551e+00 -3.3206171312982864e+00 + 2.0953881133597276e+00 1.9231799808095869e+00 -3.7174558193824105e+00 + 2.0739551144818864e+00 1.5998751036026262e+00 -4.0413639184403651e+00 + 2.0702142506049821e+00 1.1725411445665457e+00 -4.2804460440827299e+00 + 2.1454641535498311e+00 6.6420284102801663e-01 -4.4867896902049305e+00 + 2.3262323555072864e+00 1.3524211449146259e-01 -4.7694314339925308e+00 + 2.6071285308852330e+00 -2.9280435933674831e-01 -5.2235973037378756e+00 + 2.9082978246982050e+00 -3.7862920559769553e-01 -5.7717660154354906e+00 + 3.1148668756889419e+00 -8.9376373492212308e-02 -6.1134667329798154e+00 + id 11390 + loc 8.3987301588058472e-01 3.1822785735130310e-02 1070 + blend 0.0000000000000000e+00 + interp 4.1917839223228459e-01:4.1917420044836229e-01:3.1604768793535576e-02:4.0246709220670956e-01:9.2332574199927597e-01:3.9819247299959654e-01:1.6484719675348796e+00:2.1886739107923361e-01:2.0222464249911196e+00:3.8114993321353569e-01:2.8896231933941317e+00:3.0490079980054730e-01:3.7412916904661175e+00 + CVs 20 + 3.6430901363025031e-01 3.1851231970283089e-01 -1.2618044118261523e-01 + 7.1043135732958862e-01 5.7863780519510444e-01 -1.5395900683132185e-01 + 1.0502325344616998e+00 8.2194182232177926e-01 -1.1748399529027953e-01 + 1.3759586670429615e+00 1.0756931673839965e+00 -2.7581055444333313e-02 + 1.6676238795042497e+00 1.3558357752418568e+00 8.4001531469781399e-02 + 1.9215103149033208e+00 1.6672654471742070e+00 1.2432615322506968e-01 + 2.1473531419027232e+00 1.9604870482048127e+00 2.3213382322082365e-02 + 2.3689246272770919e+00 2.1729103012767732e+00 -1.9249867495968176e-01 + 2.6022551343814602e+00 2.2502622608342491e+00 -4.6511446488988839e-01 + 2.8237836571055288e+00 2.1279007174858364e+00 -7.1312694667704801e-01 + 2.9698539852400989e+00 1.8271389240106801e+00 -8.5684390303626379e-01 + 3.0152989024543682e+00 1.4631956824747241e+00 -9.1156928239340740e-01 + 2.9749012294372772e+00 1.1030472928908011e+00 -9.1572754343264096e-01 + 2.8758282074986958e+00 7.8037179537566959e-01 -8.7875371180247408e-01 + 2.7530951665334928e+00 5.0921074857787274e-01 -8.1083671869530305e-01 + 2.5807285755842910e+00 3.2400918132753309e-01 -7.0170302124182127e-01 + 2.3183485858306150e+00 3.1160668868493502e-01 -5.6320001314958124e-01 + 2.0568656208902243e+00 4.3900742329546960e-01 -4.6823166899760349e-01 + 2.0170897836492778e+00 1.2470644344808535e-01 -4.1485654527931703e-01 + id 11391 + loc 3.5519459843635559e-01 9.7188293933868408e-01 410 + blend 0.0000000000000000e+00 + interp 4.5754890457718045e-01:3.3938625718240545e-01:2.0268410482658594e-02:3.7375857108107513e-01:8.3265086002137523e-01:4.4207390472103714e-01:1.1710431823849985e+00:3.6449679476763458e-01:1.7701520705132796e+00:3.5850888916119328e-01:2.1687832804914322e+00:4.5667115669947200e-01:2.8484302792655218e+00:4.3583163688499532e-01:3.0349310380323180e+00:4.5754432908813469e-01:3.6639961995491150e+00 + CVs 20 + 4.3607046716206821e-01 1.0941677213495364e-01 -1.4986508156384148e-01 + 7.7685851434830677e-01 1.6031348914822174e-01 -2.7022855810872404e-01 + 1.0960237207584320e+00 1.8818772918018684e-01 -3.6477265414950188e-01 + 1.4334572805855226e+00 2.1214195984736106e-01 -4.3201396074429155e-01 + 1.7862545177168967e+00 2.2919484432175297e-01 -4.6626687347410090e-01 + 2.1482999461041197e+00 2.3609003303748588e-01 -4.5976783725363496e-01 + 2.5097199377619628e+00 2.3045621575261310e-01 -4.0386358534826938e-01 + 2.8587643583381812e+00 2.1059468943499215e-01 -2.9315852018049754e-01 + 3.1834424461772577e+00 1.7579022411954393e-01 -1.2774151133299538e-01 + 3.4714652182795982e+00 1.2771461726369426e-01 8.7789430929162915e-02 + 3.7176381963429463e+00 6.7924592842803388e-02 3.4316070102076834e-01 + 3.9532652969252391e+00 -1.6680489034773816e-02 6.1811332693538912e-01 + 4.2514595852684653e+00 -1.6596389232172082e-01 8.8205653032445697e-01 + 4.6353689232510504e+00 -4.1589340370382377e-01 1.0977232563141750e+00 + 5.0478054241358068e+00 -7.5597536803598508e-01 1.2474915359249170e+00 + 5.4447887668362105e+00 -1.1597745867629206e+00 1.3317867329791273e+00 + 5.8180525443686761e+00 -1.6171121261538923e+00 1.3354409683625175e+00 + 6.1586302777993538e+00 -2.1139971052316757e+00 1.2399084547705663e+00 + 6.4031168169879003e+00 -2.4300046647913218e+00 1.2679450881306826e+00 + id 11392 + loc 7.5013421475887299e-02 3.3269676566123962e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5499960186694460e-01:2.9567674673970712e-01:9.8083435940332830e-01:3.0970401415856069e-01:2.0124836215575943e+00:4.5499505187092598e-01:2.6107515258136011e+00:3.8039918613788581e-01:2.9926031417937331e+00:4.1875228098485784e-01:3.4383974561523010e+00:2.9418815784837726e-01:3.9959256488313524e+00 + CVs 20 + -4.9313402260697872e-02 3.4341296751782024e-01 -7.1970827434634510e-02 + -1.4717805015238775e-01 6.9254887258753572e-01 -1.4717044219465775e-01 + -2.8798482236653034e-01 1.0329302204990385e+00 -2.4268012600697220e-01 + -4.7227571505275240e-01 1.3442595969321183e+00 -3.6819380031881804e-01 + -7.0191879358653719e-01 1.6020973928979576e+00 -5.2562904249085829e-01 + -9.7018879816213666e-01 1.7820776128316278e+00 -7.1100287950775087e-01 + -1.2621539995849411e+00 1.8685143598830882e+00 -9.1461843708163792e-01 + -1.5601929654357038e+00 1.8601776945668780e+00 -1.1242898494577478e+00 + -1.8506780749971148e+00 1.7663345701309354e+00 -1.3257579074006240e+00 + -2.1290030840498924e+00 1.6033212014665643e+00 -1.5001430280738359e+00 + -2.3972829969859277e+00 1.3909491927426074e+00 -1.6262755376158124e+00 + -2.6549803993762882e+00 1.1484044009253156e+00 -1.6840994939358163e+00 + -2.8916172558472240e+00 9.0366193837891307e-01 -1.6484889455104597e+00 + -3.0881204028790679e+00 7.1158328761652567e-01 -1.4936990167022097e+00 + -3.2118543907030577e+00 6.6598521436796942e-01 -1.2203838452975428e+00 + -3.2333309766376361e+00 8.5375272623899590e-01 -9.2278389421611040e-01 + -3.1702382138077034e+00 1.2374466618085151e+00 -7.5729411076169750e-01 + -3.0411145882339512e+00 1.6713820799755075e+00 -7.8448547650862699e-01 + -3.1877100945520294e+00 1.7722623198343659e+00 -5.2750536501294998e-01 + id 11393 + loc 8.0028069019317627e-01 1.7280179262161255e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3030951999147909e-01:3.9607963797050921e-01:7.1983900439914894e-01:2.4897263801519526e-01:1.4661973451133139e+00:3.1242736069266730e-01:2.0562228002784120e+00:4.3030521689627921e-01:2.7082398532620418e+00:2.5478443388648769e-01:3.6735071013941676e+00 + CVs 20 + -1.3148720020082383e-02 3.0074754335071185e-01 1.8625933065121267e-01 + 3.2265272649091847e-03 6.2115481462872746e-01 3.7947785010135032e-01 + 2.2748988878756871e-02 9.5701328622107940e-01 5.7083510349798583e-01 + -4.0080227000371949e-04 1.2960062103344594e+00 7.8315894729554669e-01 + -1.1759701563059910e-01 1.5964658814118027e+00 1.0408301198530323e+00 + -3.4849350865846740e-01 1.7904734943869856e+00 1.3309932172977859e+00 + -6.7303249689648004e-01 1.8196952936306272e+00 1.6005299881004911e+00 + -1.0415348057224449e+00 1.6747901445271018e+00 1.7706116927969915e+00 + -1.3912677654810004e+00 1.4081518369413728e+00 1.7895233057650923e+00 + -1.6733869977580982e+00 1.0883112725264312e+00 1.6754000098563970e+00 + -1.8675642714664686e+00 7.5214256723462114e-01 1.4709807691021541e+00 + -1.9484467553978964e+00 4.2112220730052685e-01 1.2025413491076282e+00 + -1.9011910456533276e+00 1.2904376511907178e-01 9.1923759449288533e-01 + -1.8002129497730246e+00 -1.1381946655077002e-01 6.7762607443292366e-01 + -1.7570642235510183e+00 -3.4866284421552074e-01 4.5590325413159227e-01 + -1.8414653244459300e+00 -6.0411935824916707e-01 1.9232363453706444e-01 + -2.1579854124192979e+00 -8.5545034039913670e-01 -1.4812380727890681e-01 + -2.7675926313758499e+00 -9.4941523164920305e-01 -4.6718241266558347e-01 + -2.9205107421458969e+00 -9.7146564961028159e-01 -5.8875663214176521e-01 + id 11394 + loc 1.8432857096195221e-01 1.3176781125366688e-02 1047 + blend 0.0000000000000000e+00 + interp 5.4509209691682503e-01:9.0035513752998036e-02:3.0057969201604995e-01:4.4771488320036845e-01:1.1442082806356353e+00:5.4508664599585588e-01:1.7768487310985486e+00:5.1949942997361898e-01:2.1429869945619444e+00:3.3739430994768421e-01:2.8582649022733158e+00:2.8883262652120822e-01:3.7214304413506465e+00 + CVs 20 + -7.6933010379883360e-01 4.5275857381271511e-01 8.5740176467407753e-02 + -1.4109309110619728e+00 9.2057513078761866e-01 7.1579156440100628e-02 + -1.9363598201390353e+00 1.4231566030144267e+00 -6.1149518740136466e-02 + -2.3506089577197278e+00 1.9560685744898185e+00 -3.3712242153775918e-01 + -2.6346308987428295e+00 2.4772559026001857e+00 -7.7893717558971165e-01 + -2.7887439980947120e+00 2.9209013540725333e+00 -1.3818343782538698e+00 + -2.8268883254558705e+00 3.2086029718674594e+00 -2.1130629153833520e+00 + -2.7761635428678288e+00 3.2648385875523176e+00 -2.9085435442105756e+00 + -2.6900709048269071e+00 3.0250753029989648e+00 -3.6786260662899815e+00 + -2.5789471052427073e+00 2.4791332913909572e+00 -4.3173388051044679e+00 + -2.3890628500150317e+00 1.6851567564031309e+00 -4.7057624546238497e+00 + -2.0615577678992758e+00 7.7421501717416075e-01 -4.7445418516609710e+00 + -1.5670016131862234e+00 -7.8366959629397659e-02 -4.4038761961531092e+00 + -9.3583708476566230e-01 -6.7270217729618764e-01 -3.7274119796944092e+00 + -2.7484919382911488e-01 -8.6232545675827366e-01 -2.8380844351669201e+00 + 2.8626848510869018e-01 -6.1618355188645091e-01 -1.9072990469966005e+00 + 5.6857532045355352e-01 3.6148885560436272e-02 -1.0977737951109683e+00 + 1.5957433607363797e-01 9.5190369647711137e-01 -7.3266114099015689e-01 + -3.7483627320374913e-03 1.5731598176128880e+00 -4.8968920839814190e-01 + id 11395 + loc 9.0012633800506592e-01 1.1235635727643967e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0712741752317347e-01:3.2476179603185179e-01:4.8920770147585924e-01:4.1054215062404126e-01:9.9756151345198041e-01:2.7366119213568718e-01:1.5642442887448111e+00:5.0712234624899821e-01:2.0983064733154304e+00:4.1385120638111633e-01:2.9322498373140333e+00:2.9071406462278260e-01:3.5007390875966786e+00 + CVs 20 + -1.4497866735925649e-01 2.1459378299033499e-01 2.0486737679459649e-01 + -2.9915133703544178e-01 4.2786054100612525e-01 4.1900695308086755e-01 + -4.5242523271940782e-01 6.4487996776447987e-01 6.4224366499123620e-01 + -5.9611185944035949e-01 8.6695535832777149e-01 8.7429807569069207e-01 + -7.2418374645351458e-01 1.0921811405619903e+00 1.1157344735168553e+00 + -8.2977084452582173e-01 1.3160249719846064e+00 1.3681463317526454e+00 + -9.0644559124247559e-01 1.5320126997494008e+00 1.6352542059784498e+00 + -9.4958987486259905e-01 1.7314883268836971e+00 1.9224823475513502e+00 + -9.5649007873684289e-01 1.9030415502125824e+00 2.2367338688682996e+00 + -9.2575504736867487e-01 2.0319045479247873e+00 2.5834517910071613e+00 + -8.5883548531468756e-01 2.0994964819555690e+00 2.9635006995592348e+00 + -7.6320729112411800e-01 2.0861278077448375e+00 3.3739285582461873e+00 + -6.5494685031025657e-01 1.9761923950576481e+00 3.8069039464611536e+00 + -5.5707533655160368e-01 1.7589244508268038e+00 4.2467303843121735e+00 + -4.9360632034389240e-01 1.4273542962194412e+00 4.6690605692395435e+00 + -4.7990899796573944e-01 9.7922269985244303e-01 5.0370748407157846e+00 + -5.1223341436998338e-01 4.2775164423068501e-01 5.3049954195328617e+00 + -5.7066135312089383e-01 -1.8236952214667812e-01 5.4599009280595894e+00 + -5.7955054981611065e-01 -6.9370550337203940e-01 5.6720854827533378e+00 + id 11396 + loc 6.1884063482284546e-01 5.8925259113311768e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4336191535582153e-01:3.2378163844260760e-01:4.1180368685075286e-01:4.0781639180751206e-01:1.0001306069055804e+00:4.4335748173666800e-01:1.3744038585990304e+00:3.6090544437750333e-01:1.9668374212598398e+00:3.8849210512615678e-01:2.4361237489256751e+00:3.4868634171354718e-01:3.0276930086924914e+00:4.2307225427340261e-01:3.6982361413081897e+00 + CVs 20 + -3.3100278275196315e-01 2.0883361440753329e-01 1.8936875382545296e-01 + -6.1201248841354472e-01 3.9367806680512740e-01 3.3511832342798326e-01 + -8.5280450044423484e-01 5.8586273384138299e-01 4.8693908408541237e-01 + -1.0661109546348209e+00 8.0012671122184009e-01 6.5512581488910404e-01 + -1.2758260746597090e+00 1.0272373949159599e+00 7.8782651785656421e-01 + -1.5012689520268963e+00 1.2478103380054413e+00 8.3850353020297863e-01 + -1.7394896327034997e+00 1.4362661637417322e+00 8.0351024623674405e-01 + -1.9778357565214377e+00 1.5711377659402013e+00 7.0282838807288406e-01 + -2.1905512696456615e+00 1.6439507287433821e+00 5.5523786599084768e-01 + -2.3373612006085347e+00 1.6586866623319969e+00 3.7098219413656941e-01 + -2.3903864414219345e+00 1.6281143398983124e+00 1.6633458156635439e-01 + -2.3630610348268859e+00 1.5733787045008598e+00 -3.0899118080288224e-02 + -2.2715998286484949e+00 1.4969054668226258e+00 -1.9875873142511868e-01 + -2.0976806693830636e+00 1.3549742956315509e+00 -3.1548770104361867e-01 + -1.8324067880141452e+00 1.1027481241549384e+00 -3.9467605584477805e-01 + -1.5264698921396560e+00 7.4733507012322664e-01 -5.4768217791119578e-01 + -1.2725962713024865e+00 3.8845549395435319e-01 -9.1998211773732497e-01 + -1.1885748924622968e+00 2.6891342483384384e-01 -1.5265039104962215e+00 + -1.1546060281569737e+00 2.5450010281381252e-01 -1.9000900651965815e+00 + id 11397 + loc 5.2726262807846069e-01 4.1726639866828918e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0293294379105027e-01:3.7607464687125913e-01:3.3993274048511113e-01:3.3263956820341917e-01:1.0862410738602877e+00:3.4018324807108147e-01:1.9382996862488273e+00:4.0292891446161239e-01:2.7044344087996173e+00:3.2666002605841776e-01:3.5732631969261033e+00 + CVs 20 + -2.8878168162736689e-01 3.5280910076850003e-01 1.0095242688045609e-01 + -5.7011643295871506e-01 7.1698192756014956e-01 2.4047108173071413e-01 + -8.6192706388348872e-01 1.0732893602314804e+00 4.2349023805709585e-01 + -1.1601559096955272e+00 1.4038945027896426e+00 6.5943822573667754e-01 + -1.4564416350263536e+00 1.6913051740925635e+00 9.4995578742319142e-01 + -1.7588481243860792e+00 1.9178154519970583e+00 1.2773717448489279e+00 + -2.0813852003560491e+00 2.0713633857527762e+00 1.6132732451343155e+00 + -2.4269151508017233e+00 2.1493106605117638e+00 1.9326115479522601e+00 + -2.7873892011982511e+00 2.1551886053561962e+00 2.2203929332505390e+00 + -3.1515712895275283e+00 2.0923679160010993e+00 2.4726397450925348e+00 + -3.5070240985899468e+00 1.9599043244157013e+00 2.6993444416245072e+00 + -3.8332902854085118e+00 1.7365441325167559e+00 2.9218793491725212e+00 + -4.0822193310870274e+00 1.3910525488479335e+00 3.1445847582419528e+00 + -4.2123317370740754e+00 9.4451038404451271e-01 3.3484195285599774e+00 + -4.2222506730202589e+00 4.3704043167212481e-01 3.5335587324775859e+00 + -4.0373231827543972e+00 -1.3362214164638364e-01 3.7033557134350552e+00 + -3.3932518781395591e+00 -6.3791269935066008e-01 3.8180106867791648e+00 + -2.5420931218025413e+00 -6.5932004532818111e-01 3.9037044312957438e+00 + -2.1817343911417648e+00 -7.1983461798974835e-01 4.0923841999563288e+00 + id 11398 + loc 8.5806578397750854e-01 4.1075959801673889e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3139559369774358e-01:2.8238450896406142e-01:1.3263259017450113e-01:4.5655188585387629e-01:7.6362585739742017e-01:4.6994470259944476e-01:9.8122287259025165e-01:5.3139027974180664e-01:1.2525479350253939e+00:3.2872479183017794e-01:1.9186618515779927e+00:4.3125496732277319e-01:2.2465397730032053e+00:3.1764178842859292e-01:2.9208811100052321e+00:4.2587166438378998e-01:3.2531765891834805e+00:4.6904208676666431e-01:3.8848648402007910e+00 + CVs 20 + 1.2557808356009736e-01 3.4537661042223361e-01 -1.8778478301593832e-01 + 2.6827621552342462e-01 6.5855192118563899e-01 -3.7835926044589741e-01 + 4.1577831130495774e-01 9.4774798482904754e-01 -5.7389035663238541e-01 + 5.6186081167654578e-01 1.2162909212271718e+00 -7.7164936501889358e-01 + 7.0609693075749613e-01 1.4653570547879546e+00 -9.6559116903349151e-01 + 8.4841566013602920e-01 1.7020732416946545e+00 -1.1540170989274612e+00 + 9.9977796292255283e-01 1.9405526551169432e+00 -1.3481575227675711e+00 + 1.1996678587467158e+00 2.1836315189952766e+00 -1.5685008701932639e+00 + 1.5004320099666593e+00 2.3934576170192985e+00 -1.8137950731311014e+00 + 1.9241982783190299e+00 2.5089717112308954e+00 -2.0540359724661839e+00 + 2.4460595409822710e+00 2.4679620984573472e+00 -2.2494988613554661e+00 + 2.9877047230811464e+00 2.2255007616252644e+00 -2.3669678765879181e+00 + 3.4281236183077057e+00 1.7718110370352558e+00 -2.4105150724374527e+00 + 3.6224750065103022e+00 1.1513917752680873e+00 -2.4172405189341952e+00 + 3.5317095754312113e+00 4.1357776748906949e-01 -2.3778768186883630e+00 + 3.2369002142885748e+00 -4.3754438975956339e-01 -2.1591114009782091e+00 + 2.8582727932429139e+00 -1.2791738818022833e+00 -1.5843489547159231e+00 + 2.5424342343733004e+00 -1.7787327339944641e+00 -7.6528090607903099e-01 + 2.4269052495866483e+00 -1.7229539787718973e+00 -3.3550736606097520e-01 + id 11399 + loc 1.3273607194423676e-01 1.6105522215366364e-01 410 + blend 0.0000000000000000e+00 + interp 5.2142660264123741e-01:5.2142138837521101e-01:2.1279544820963747e-01:4.4923032595062889e-01:8.0626870619594104e-01:2.9669158934003048e-01:1.1551384527205479e+00:3.8664260558465674e-01:1.9649416531259569e+00:3.6350705843441639e-01:2.3660797108127003e+00:4.5930873427312263e-01:2.9249447040246173e+00:4.2433607503491350e-01:3.1883454035756493e+00:3.8154738410073824e-01:3.9473500167423432e+00 + CVs 20 + -9.1987894161353931e-02 1.1640105726969244e-01 -2.3610142532372441e-01 + -1.8030766903247847e-01 2.2873926115099066e-01 -4.6742372142033617e-01 + -2.6309680652365530e-01 3.4208843568428671e-01 -7.0206480776644975e-01 + -3.4114819366562565e-01 4.5937238188032237e-01 -9.4481430502668173e-01 + -4.1232594031690201e-01 5.7934790327492214e-01 -1.1943776716279162e+00 + -4.6824163154479548e-01 7.0110055516030756e-01 -1.4498263772531668e+00 + -4.9490508345814715e-01 8.2404596659417950e-01 -1.7106597602776210e+00 + -4.7972990236612278e-01 9.4642875445247876e-01 -1.9755182202684087e+00 + -4.1567197448751891e-01 1.0667159308136656e+00 -2.2412587380341731e+00 + -2.9912255360424522e-01 1.1870384327628289e+00 -2.5022655995164884e+00 + -1.3616933759173355e-01 1.3092351290797772e+00 -2.7532767782871459e+00 + 3.0110473515467473e-02 1.4197029261901166e+00 -3.0086592298414199e+00 + 1.1297379656566930e-01 1.4862903886968013e+00 -3.3071625933256401e+00 + 3.5529540512651780e-02 1.4847252468976455e+00 -3.6446213718044924e+00 + -1.8543227593394129e-01 1.4337463730347488e+00 -3.9574374863300816e+00 + -4.7819046321604541e-01 1.3691778135578225e+00 -4.2159389896338135e+00 + -8.2281191284325017e-01 1.3096092762007285e+00 -4.4103023209660677e+00 + -1.2147616460429294e+00 1.2758076470113304e+00 -4.5177102567067511e+00 + -1.4115248982651973e+00 1.3044058964183256e+00 -4.7952174920947890e+00 + id 11400 + loc 3.7055066227912903e-01 6.8968904018402100e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1076912109395189e-01:3.7029748957473158e-01:2.7002580596472425e-02:4.0683855683171527e-01:7.2808447246867403e-01:4.4776947750554147e-01:1.2020060551998553e+00:5.1076401340274102e-01:1.7764104051047802e+00:4.2215490376567183e-01:2.0031578917708384e+00:2.8877199425728761e-01:2.9546400802129744e+00:3.8071745766169951e-01:3.4131815564286843e+00 + CVs 20 + 2.2453680581563726e-01 2.7483829140255428e-01 -1.7252152309112812e-01 + 4.4240169268683766e-01 5.8124097180726364e-01 -3.4818862638895426e-01 + 6.9126245162361388e-01 8.7268560802068618e-01 -5.4460984261021816e-01 + 9.8164815767756008e-01 1.1200690284993928e+00 -7.6885804676059277e-01 + 1.3074983055549176e+00 1.3017705394649348e+00 -1.0125966030783229e+00 + 1.6619696391671821e+00 1.4007266584600417e+00 -1.2550699202060427e+00 + 2.0377373473936693e+00 1.4138559768562218e+00 -1.4768606973040377e+00 + 2.4268963875829646e+00 1.3488897632052312e+00 -1.6705112151214399e+00 + 2.8200188066201224e+00 1.2152862994827187e+00 -1.8396518300533160e+00 + 3.2096570669901201e+00 1.0181820619784334e+00 -2.0027858737976478e+00 + 3.5825222045991580e+00 7.5413267746264434e-01 -2.1835357536087869e+00 + 3.9091027393440405e+00 4.1494505548833382e-01 -2.3967828191927958e+00 + 4.1445646561651213e+00 -7.2806171796504504e-03 -2.6519336781126404e+00 + 4.2290628527981182e+00 -5.1116327857335619e-01 -2.9684020447265640e+00 + 4.0702552556958391e+00 -1.0548978574285675e+00 -3.3718165773637896e+00 + 3.6149180761302020e+00 -1.4812113978577279e+00 -3.8804719850340219e+00 + 2.9990113439503610e+00 -1.5665370645769814e+00 -4.4861227989753010e+00 + 2.5055203292008890e+00 -1.3188899469785107e+00 -5.0289989659750933e+00 + 2.2869423488440765e+00 -1.2428814568990889e+00 -5.2781468001741905e+00 + id 11401 + loc 2.5529208779335022e-01 6.0499626398086548e-01 1047 + blend 0.0000000000000000e+00 + interp 4.9893614259459501e-01:3.1168632673766128e-01:1.9760720414931632e-01:4.9893115323316911e-01:7.1749919489653058e-01:4.7883569222364220e-01:1.1612679596393998e+00:2.7960109205708472e-01:1.8195156798149994e+00:3.0842983787746975e-01:2.2902265805309994e+00:4.6867703732154253e-01:3.1765363150478731e+00:2.8470341845662284e-01:3.7472374847912424e+00 + CVs 20 + 1.7785191970523834e-01 6.6523310966364668e-01 -5.0702827567102349e-01 + 4.0231311250549778e-01 1.3780000492396909e+00 -9.2869823753313940e-01 + 6.8748471559115543e-01 2.1246476232932605e+00 -1.2019282294975751e+00 + 1.0639036972763882e+00 2.8153550632932687e+00 -1.1980064951989555e+00 + 1.4863851419464940e+00 3.3035306599942968e+00 -8.4537912955869965e-01 + 1.8467428480929620e+00 3.5104274547474672e+00 -2.2917363242884026e-01 + 2.0572662567500788e+00 3.4261701229678447e+00 5.0225098703736637e-01 + 2.0925540002353822e+00 3.1026720694204220e+00 1.2059136826200689e+00 + 1.9804206804449123e+00 2.6151917618153688e+00 1.7770535455357050e+00 + 1.7820730183119748e+00 2.0373647280555254e+00 2.1594586892798993e+00 + 1.5646330142233780e+00 1.4276776538190443e+00 2.3658443068998136e+00 + 1.3624780259892837e+00 8.0134438380809503e-01 2.4859474705913085e+00 + 1.1491565376800963e+00 1.1072954898613796e-01 2.6552988257167485e+00 + 8.8195561744528750e-01 -6.7036481754927690e-01 3.0162380838507996e+00 + 6.2348193381488159e-01 -1.3862640135837871e+00 3.7960685763866566e+00 + 6.0177701169595876e-01 -1.7171938065084567e+00 4.9900827585316154e+00 + 8.8376745090779818e-01 -1.5906875160992202e+00 6.2160672721828263e+00 + 1.3047589506689234e+00 -1.2227357544901833e+00 7.2102103701719749e+00 + 1.5522411381183960e+00 -1.0589311049628032e+00 7.7415001209184116e+00 + id 11402 + loc 2.7954545617103577e-01 4.4866651296615601e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6389626827879538e-01:4.6389162931611261e-01:4.0095237390935790e-03:3.3884638790938876e-01:6.2391176354276079e-01:3.3299074690082664e-01:1.6278407541432545e+00:3.5328393619719745e-01:2.0335577186909628e+00:4.2315845351841047e-01:2.5967619204847443e+00:2.6964932910954603e-01:3.1004180215888066e+00:3.9682369114047661e-01:3.7217657415633143e+00 + CVs 20 + -1.6219728142138340e-01 3.3375125885030954e-01 -4.8100494435698277e-02 + -3.5107464969406577e-01 6.4348328822430667e-01 -1.2435225587346255e-01 + -5.5434746493368103e-01 9.3214514028229134e-01 -2.1081022115192383e-01 + -7.7668391445467577e-01 1.1980914496434760e+00 -3.0511906013418894e-01 + -1.0254144966018359e+00 1.4429906012908313e+00 -4.0577190041061484e-01 + -1.2990400281299543e+00 1.6739549292051081e+00 -5.0275065579443023e-01 + -1.5911333792893754e+00 1.8948043008381106e+00 -5.8748413672238375e-01 + -1.8976960692100360e+00 2.0983840358812835e+00 -6.6302247005553794e-01 + -2.2227527101879887e+00 2.2648440657940281e+00 -7.3959648654902432e-01 + -2.5750737125923648e+00 2.3593253497392501e+00 -8.2050849828041350e-01 + -2.9505028575724106e+00 2.3296997837650069e+00 -8.9321845236195652e-01 + -3.3056915557663173e+00 2.1287313069342155e+00 -9.2959962388683115e-01 + -3.5657520351379439e+00 1.7749811071490724e+00 -9.1541858670251841e-01 + -3.7152174856784739e+00 1.3550539484252107e+00 -8.7839539896051910e-01 + -3.8098729221115750e+00 9.0910249090497486e-01 -8.3119704844040276e-01 + -3.8846628223776198e+00 4.2498152372733511e-01 -7.3253605864748805e-01 + -3.9320577270924741e+00 -9.5336026987076064e-02 -5.1817470576604774e-01 + -3.9259481231914397e+00 -6.1305490784581429e-01 -1.8378490570017136e-01 + -4.0282135975797901e+00 -1.1357199924478452e+00 5.8866763307946768e-02 + id 11403 + loc 9.9539268016815186e-01 7.3166146874427795e-02 1070 + blend 0.0000000000000000e+00 + interp 4.5752443220319317e-01:4.4627299514879337e-01:1.5295499670864221e-01:2.8986619673507602e-01:1.0008790990605683e+00:3.4402509777199797e-01:1.7072244322120542e+00:4.5751985695887115e-01:2.1000600716635942e+00:4.0246709220670956e-01:2.9161478418570694e+00:4.3364462451785263e-01:3.4690302702062885e+00 + CVs 20 + 3.1319970749641812e-01 3.0810588325157395e-01 -4.9666373188121088e-02 + 5.8485991122888747e-01 5.8156920913907650e-01 -1.4113194393908568e-02 + 8.2082909657061887e-01 8.3958566214256458e-01 8.4398223233418945e-02 + 1.0088314043940554e+00 1.0867726205208570e+00 2.3199678612248209e-01 + 1.1398102324309420e+00 1.3280617780265116e+00 4.0954706995508328e-01 + 1.2323757670749385e+00 1.5945347373076513e+00 5.7705773212386702e-01 + 1.3169985455465709e+00 1.9161006631603956e+00 6.8524916032030470e-01 + 1.4230580871668739e+00 2.2890159324133683e+00 7.0444833115386674e-01 + 1.5865323170022021e+00 2.6868428019990174e+00 6.2544826065292036e-01 + 1.8526360104438200e+00 3.0584969193279927e+00 4.4186111003546502e-01 + 2.2394542622110598e+00 3.3162917987232872e+00 1.7496064922482124e-01 + 2.6996364185282369e+00 3.3990387184514632e+00 -1.0735031848698040e-01 + 3.1752551254158097e+00 3.3150222508127700e+00 -3.5048262066170421e-01 + 3.6182906409016562e+00 3.1038296853463794e+00 -5.2188104438107974e-01 + 3.9954639249624542e+00 2.8216403158136147e+00 -6.0494373257497180e-01 + 4.3143882885633751e+00 2.4899978511910161e+00 -6.1090483789718841e-01 + 4.5865175455139626e+00 2.0876549298915661e+00 -5.4565680596555222e-01 + 4.7684849094235080e+00 1.6542776251898592e+00 -3.9346091352177504e-01 + 4.7789165592390122e+00 1.4999306252789513e+00 -1.8742167285302291e-01 + id 11404 + loc 6.5369480848312378e-01 3.3687436580657959e-01 1074 + blend 0.0000000000000000e+00 + interp 3.6596245633357932e-01:3.4223791986579322e-01:2.7035085580736640e-03:3.6472188512797304e-01:9.2460377754460465e-01:3.0993789029850333e-01:1.3396953445057236e+00:3.6595879670901599e-01:1.9969584552625572e+00:3.2316129769000673e-01:2.5532669430381847e+00:2.9692343615603783e-01:3.3018818037245561e+00 + CVs 20 + -4.3574714007316911e-02 2.5926261116236937e-01 2.0481588114515406e-01 + -1.0395381202156634e-01 5.3171898046750699e-01 4.1617155275121609e-01 + -1.7469592976925177e-01 8.1583793180949715e-01 6.2660544094244941e-01 + -2.5553552092673004e-01 1.1060372795918070e+00 8.3118401792270258e-01 + -3.5219211607168260e-01 1.3932692957447745e+00 1.0326478587015626e+00 + -4.7002398353286345e-01 1.6652459746425681e+00 1.2452279220559193e+00 + -6.0791108746648448e-01 1.9068501988746882e+00 1.4887559684617189e+00 + -7.5130816004701328e-01 2.1034965885095263e+00 1.7767301643666589e+00 + -8.7640384124188042e-01 2.2447758851425657e+00 2.1121886260565224e+00 + -9.6072388734535452e-01 2.3222361048175291e+00 2.4895177810793658e+00 + -9.8539421024602258e-01 2.3256499780894697e+00 2.8940058209368735e+00 + -9.3568571922120336e-01 2.2496788092930902e+00 3.3003501977330680e+00 + -8.0396378231519694e-01 2.0961681596596065e+00 3.6786828745796543e+00 + -5.8920159133531058e-01 1.8712746200342119e+00 3.9966999971058423e+00 + -2.9650885355273321e-01 1.5917899435671492e+00 4.2180363815599238e+00 + 5.9654400328621127e-02 1.2998779376098373e+00 4.3084014691528445e+00 + 4.4958775339345536e-01 1.0539760072790298e+00 4.2591217625886726e+00 + 8.3750137224007704e-01 8.7429242678139418e-01 4.1080897314045988e+00 + 1.2135876282677798e+00 6.4175399299417513e-01 4.0060143827494521e+00 + id 11405 + loc 5.7015877962112427e-01 6.4091354608535767e-01 1047 + blend 0.0000000000000000e+00 + interp 4.3599122807478963e-01:3.5123561678582260e-01:9.1944134742893535e-02:2.8585001279917349e-01:9.8701046621444866e-01:4.3595802528581623e-01:1.2986553459510801e+00:3.8497793560986726e-01:2.0019442149577054e+00:2.8837640104536649e-01:2.6269370248993296e+00:4.3598686816250892e-01:3.0013310184576611e+00:3.7762886057217615e-01:3.6865132365540747e+00 + CVs 20 + 1.1372620111181569e-01 7.1323701514223803e-01 -3.9883402326517758e-01 + 2.5169740570641097e-01 1.3728271587638448e+00 -7.5951970213212394e-01 + 4.0838694640559364e-01 1.9998879154017768e+00 -1.1011499134278382e+00 + 5.9895864074746985e-01 2.6041138567260074e+00 -1.3795610770088893e+00 + 8.7986066678620400e-01 3.1911925848294667e+00 -1.4682708504584232e+00 + 1.2481129888870837e+00 3.6923899169295837e+00 -1.2619283354875037e+00 + 1.6093729143159059e+00 3.9985470513717321e+00 -7.8163347018227025e-01 + 1.8631624024299269e+00 4.0438573786667789e+00 -1.3370006592658457e-01 + 1.9647107103822321e+00 3.8444066970422242e+00 5.5155408727370570e-01 + 1.9186335411148661e+00 3.4498621834090630e+00 1.1701850612770985e+00 + 1.7654781266951605e+00 2.9048965616533948e+00 1.6591592466432417e+00 + 1.5657144621359609e+00 2.2542338723593400e+00 2.0208569504721856e+00 + 1.3424765140131105e+00 1.5317339250815241e+00 2.3425168858268854e+00 + 1.1076202758591069e+00 8.0963320472382660e-01 2.7643802706266016e+00 + 1.0048356575524500e+00 3.0615994105771271e-01 3.3748056137230455e+00 + 1.2331977754785415e+00 2.2622015708227905e-01 4.0346361925223242e+00 + 1.7724380493093648e+00 4.8006302709619275e-01 4.5678190427335039e+00 + 2.5187554426964964e+00 9.4047900462205414e-01 4.9528873838466527e+00 + 3.3206852556155022e+00 1.4583370900091617e+00 5.4377690824879377e+00 + id 11406 + loc 8.2857871055603027e-01 3.3846738934516907e-01 410 + blend 0.0000000000000000e+00 + interp 4.8325297742800122e-01:4.4535200616343873e-01:2.1019610689197343e-01:4.8324814489822698e-01:9.9858563240382914e-01:3.8551029767937933e-01:1.4771382664991353e+00:3.9065376607778340e-01:2.1562090768249900e+00:2.8966272294788348e-01:3.0164086406148711e+00:3.1430643333263614e-01:3.9799221760641430e+00 + CVs 20 + -4.0962352205638469e-01 3.6382469130856260e-01 1.5031131448355303e-01 + -7.6821904523024209e-01 7.1264063022972779e-01 3.0596328753497970e-01 + -1.1328398139252045e+00 1.0698139186502900e+00 4.6765083670004171e-01 + -1.5292169856113782e+00 1.4228809756714449e+00 6.6212527536179600e-01 + -1.9514085618175563e+00 1.7308757475250180e+00 9.2182887929195423e-01 + -2.3809742329449759e+00 1.9539722485398618e+00 1.2635999487351388e+00 + -2.8059150070140841e+00 2.0647614659524214e+00 1.6769343309437201e+00 + -3.2323837287010324e+00 2.0434712611833135e+00 2.1293714167389717e+00 + -3.6696882254104009e+00 1.8726692281942825e+00 2.5755892258817537e+00 + -4.1109213519558239e+00 1.5431556301428395e+00 2.9627521667730479e+00 + -4.5220910461623109e+00 1.0917974036018829e+00 3.2370949047442550e+00 + -4.8731163926261791e+00 6.1044225175497147e-01 3.3955324567317997e+00 + -5.1730763293277136e+00 1.4850613936257817e-01 3.5013228031671999e+00 + -5.4418319581312957e+00 -2.9977254322400171e-01 3.6285147210205926e+00 + -5.6898999907027399e+00 -7.4070045614430713e-01 3.8320301078187096e+00 + -5.9257880731884276e+00 -1.1823009676808311e+00 4.1301515913159719e+00 + -6.1645063134279514e+00 -1.6578116252821247e+00 4.4935332584165595e+00 + -6.4205782397932651e+00 -2.2044487746918326e+00 4.8781873332786656e+00 + -6.6798055554017521e+00 -2.8609347989209679e+00 5.3013245372039854e+00 + id 11407 + loc 9.1667371988296509e-01 8.1079274415969849e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4370846699732830e-01:3.4044519928531475e-01:1.3775354617583391e-03:4.3667763166693091e-01:6.9784770836883259e-01:3.0750613076744887e-01:1.0534754149753529e+00:2.7839105763855138e-01:1.9012178907787294e+00:3.5538193009151908e-01:2.7876126380944264e+00:4.4370402991265834e-01:3.5819070934306829e+00 + CVs 20 + 8.9494224966751565e-02 3.3122684581281581e-01 -2.9085804730171966e-01 + 1.9640358394285659e-01 6.3013293747894339e-01 -5.6278765173330125e-01 + 2.9584609764331377e-01 8.9113431528664955e-01 -8.3737257083971484e-01 + 3.7321117832066425e-01 1.1075565454395480e+00 -1.1203270211710636e+00 + 4.2138936482318207e-01 1.2763341309113909e+00 -1.4069501037718910e+00 + 4.3672006531574892e-01 1.4025866007547116e+00 -1.6962722779447961e+00 + 4.2470614225788822e-01 1.4975840729150938e+00 -1.9967747732378682e+00 + 3.9925166068950807e-01 1.5730968915182986e+00 -2.3184859382503533e+00 + 3.7671212288866618e-01 1.6413078806588484e+00 -2.6638840941714244e+00 + 3.7902144672243793e-01 1.7137950368071575e+00 -3.0238661349850267e+00 + 4.3043999332896249e-01 1.8027852945556151e+00 -3.3702321758312070e+00 + 5.5043019102778490e-01 1.9362558212982321e+00 -3.6648096456367689e+00 + 7.6923825107108801e-01 2.1211966305130723e+00 -3.9183551767628328e+00 + 1.0859702414024448e+00 2.2294471227771222e+00 -4.1891832616481626e+00 + 1.4254412345871161e+00 2.1409928828040456e+00 -4.4540521541626390e+00 + 1.8159778071664090e+00 1.9043120912396916e+00 -4.6389930054339477e+00 + 2.3940171995832014e+00 1.4754971863360118e+00 -4.7062725573741533e+00 + 2.7882635285415169e+00 6.9111922356040401e-01 -4.6993019108533192e+00 + 2.5262957864881930e+00 4.5341774557147818e-01 -4.7220140526871219e+00 + id 11408 + loc 4.6674731373786926e-01 6.5585929155349731e-01 1053 + blend 0.0000000000000000e+00 + interp 4.3625841150361988e-01:3.4450238911482706e-01:9.7881667282661500e-01:3.4020786333426239e-01:1.5950229123431019e+00:2.9105124007835842e-01:2.1411325335588423e+00:4.3625404891950487e-01:3.0672847152640554e+00:2.8313157380692094e-01:3.9483366377835916e+00 + CVs 20 + -1.1239327879530339e-01 2.9647291433683853e-01 3.3812045748296193e-01 + -2.6928254049162953e-01 5.2347466064379722e-01 6.1641011074257257e-01 + -4.4842078545246883e-01 7.2304075138843626e-01 8.6873069346698595e-01 + -6.2696057440893538e-01 9.0300192642865840e-01 1.1001124763841985e+00 + -7.9912042354729207e-01 1.0542832962362649e+00 1.2964470640651808e+00 + -9.5145388557283572e-01 1.1698552309867560e+00 1.4438911743369109e+00 + -1.0665407325181189e+00 1.2515030665371687e+00 1.5388575398156066e+00 + -1.1289620443824151e+00 1.3142907132470805e+00 1.5893138896750454e+00 + -1.1301190960274652e+00 1.3906741953967747e+00 1.6066722643501192e+00 + -1.0720623415737347e+00 1.5339655700956711e+00 1.6122131539935092e+00 + -1.0191150288224327e+00 1.7624416892029380e+00 1.6350507443741265e+00 + -1.0541073532630403e+00 1.9677618273733446e+00 1.6468963922118600e+00 + -1.1307444099730377e+00 2.0391309462097738e+00 1.5992924853318891e+00 + -1.1516243255576493e+00 1.9612460284882289e+00 1.4870579640886712e+00 + -1.0992814164617926e+00 1.8110617024053381e+00 1.3315311977625859e+00 + -1.0406233272473493e+00 1.7041782379619992e+00 1.1926536591534576e+00 + -1.0250564886430635e+00 1.6857957435327624e+00 1.1685613575712219e+00 + -1.0190120196426631e+00 1.6894770186263761e+00 1.1771282038251707e+00 + -9.4322459183487706e-01 1.7942344535052765e+00 7.3128911035603528e-01 + id 11409 + loc 2.1361242234706879e-01 4.7234117984771729e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5131829521944045e-01:3.2921394971788370e-01:1.3722126833067616e-02:3.6236899433792241e-01:9.3036747034492207e-01:3.3755127708865101e-01:1.2135743895610827e+00:3.6357823982555382e-01:1.9953247173599094e+00:3.0840979948589931e-01:2.4747227990797942e+00:4.5131378203648825e-01:3.2105857439200767e+00 + CVs 20 + -1.2293748213999831e-01 2.8790256488081728e-01 8.7534425929612983e-03 + -2.5402665141841185e-01 5.5872767938749401e-01 -1.7869956735680960e-02 + -3.8054930341330989e-01 8.0791902570955687e-01 -5.5605293333219175e-02 + -4.9652846818119184e-01 1.0414119732655100e+00 -8.9454227698721772e-02 + -6.0725352763146268e-01 1.2649472185569470e+00 -1.1816234775849292e-01 + -7.1880000350490070e-01 1.4844976033291015e+00 -1.4362517357892185e-01 + -8.3217574989203680e-01 1.6965900920562884e+00 -1.7250038359051684e-01 + -9.4327212143695582e-01 1.8947937279412534e+00 -2.0984815737585030e-01 + -1.0570889354615205e+00 2.0801379916991278e+00 -2.5657820989975511e-01 + -1.1940960219763697e+00 2.2493699562543696e+00 -3.1235490364990376e-01 + -1.3682833390537055e+00 2.3867207316228720e+00 -3.7577623864043741e-01 + -1.5741621833220885e+00 2.4717494033056973e+00 -4.4544787511728978e-01 + -1.7857181329496674e+00 2.4882813823385810e+00 -5.2095979360322797e-01 + -1.9603352208545006e+00 2.4432188333311178e+00 -6.1295644156430995e-01 + -2.0879435404235198e+00 2.3587037144656335e+00 -7.3570277875660717e-01 + -2.2035479413119639e+00 2.2320465356206940e+00 -8.7106073971174647e-01 + -2.3347650130744939e+00 2.0508898190128519e+00 -9.6756701313641835e-01 + -2.4965532037537388e+00 1.8182386458637689e+00 -9.2358962470477945e-01 + -2.7092696002604471e+00 1.5700113557258282e+00 -5.8163755598005273e-01 + id 11410 + loc 5.5238622426986694e-01 7.1814554929733276e-01 1075 + blend 0.0000000000000000e+00 + interp 4.9423965367291284e-01:3.8053885920913538e-01:1.5697896861590965e-01:3.1508469583541099e-01:9.9835019371627054e-01:4.4437834458385234e-01:1.3772922123963864e+00:3.8349558493725533e-01:1.9897952608309271e+00:4.9423471127637614e-01:2.3767518736456115e+00:4.1772294296314205e-01:2.9827483825242500e+00:2.5809698626060340e-01:3.8754522089676628e+00 + CVs 20 + 1.9887805304980885e-01 1.8681750004081499e-01 -3.2508746636456548e-01 + 4.0134629103788255e-01 3.7458478648866855e-01 -6.4168573438252929e-01 + 6.0230126999772704e-01 5.6413023974927889e-01 -9.5737519375075286e-01 + 7.9484479272436426e-01 7.6045265537199558e-01 -1.2778689031586565e+00 + 9.6976408272797077e-01 9.7052244638263063e-01 -1.6061924280825424e+00 + 1.1172926054813848e+00 1.1978279584195159e+00 -1.9421155054281161e+00 + 1.2348660364147814e+00 1.4333394854893091e+00 -2.2802671633798086e+00 + 1.3338140882826486e+00 1.6550812327521003e+00 -2.6158754680329674e+00 + 1.4308795205176246e+00 1.8384780569019334e+00 -2.9515838127027147e+00 + 1.5367334173462428e+00 1.9604827574609898e+00 -3.2940191878731908e+00 + 1.6542875289216119e+00 2.0025579772902109e+00 -3.6464236537142938e+00 + 1.7798066831555506e+00 1.9557006761552875e+00 -4.0076257415725944e+00 + 1.9076421581427836e+00 1.8180064161681238e+00 -4.3686577138726648e+00 + 2.0355658977465136e+00 1.5998275695661630e+00 -4.7147985845941109e+00 + 2.1551086240592432e+00 1.3123963343803899e+00 -5.0437421061104759e+00 + 2.2308933510097027e+00 9.4426336622415352e-01 -5.3676032901095709e+00 + 2.2016579372994149e+00 4.8642745188610942e-01 -5.6870029699779572e+00 + 2.0528953998379391e+00 6.7503278222705299e-03 -5.9754709974068332e+00 + 2.0084410564655353e+00 -2.5646652478814225e-01 -6.2340378270546424e+00 + id 11411 + loc 3.5444274544715881e-01 5.0438344478607178e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6742849762017580e-01:4.5483726282469245e-01:6.9864815013883974e-02:3.6880936599767611e-01:7.9630005008105209e-01:4.0067617940295458e-01:1.6297093192472127e+00:3.5572456311744322e-01:2.0014905172864017e+00:3.7035772719321225e-01:2.5290813535325700e+00:4.6742382333519961e-01:3.0000007676487273e+00:3.9184657832074016e-01:3.5362078019221257e+00 + CVs 20 + -3.5424633173045095e-01 1.9122315414162266e-01 2.9905637183373551e-01 + -6.5445808726825705e-01 3.1630410826130506e-01 5.3561909663773899e-01 + -9.1219825748746941e-01 4.2265888947774666e-01 7.8951712004455521e-01 + -1.1449876891061581e+00 5.4280912468521236e-01 1.0969151828797798e+00 + -1.3953015554635102e+00 6.8729453505396210e-01 1.3992354625745265e+00 + -1.6956222439686641e+00 8.4408948429058617e-01 1.6202916983366116e+00 + -2.0404090962932373e+00 9.8329004414880827e-01 1.7297634358132730e+00 + -2.4215481091072544e+00 1.0809027927934816e+00 1.7251904201685120e+00 + -2.8131030273089284e+00 1.1187634781618192e+00 1.5942404207843606e+00 + -3.1256480682771710e+00 1.0855127046940418e+00 1.3515948336272725e+00 + -3.2878020563068091e+00 1.0075813625922967e+00 1.0947844079172171e+00 + -3.3453416319461260e+00 9.4189467778068181e-01 9.0083094833940758e-01 + -3.3569494468011887e+00 9.2115245737515417e-01 7.7380493870091027e-01 + -3.2934778411973276e+00 8.8362339759012509e-01 6.9975135453277104e-01 + -3.1068748686817624e+00 7.4538347933659876e-01 6.9619036603273066e-01 + -2.8145641182359715e+00 4.7087819606541520e-01 7.0076174179657647e-01 + -2.4709215118139576e+00 4.1897819914894829e-02 5.5219200121146872e-01 + -2.1997141480565885e+00 -4.3753075232414135e-01 2.0886382763791567e-02 + -2.1213065076764503e+00 -4.5270318736520132e-01 -1.5365715992578008e-01 + id 11412 + loc 7.3987245559692383e-01 6.7902576923370361e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2384165564326326e-01:2.8985301039221795e-01:3.3741563799398411e-02:4.2383741722670687e-01:6.2887236147255166e-01:4.1188752074440610e-01:9.9984734186078927e-01:3.4341827949585729e-01:1.3776152976381035e+00:4.0683844812546749e-01:1.9993911731196858e+00:3.6867631402741680e-01:2.5724514029537757e+00:3.8922538764499859e-01:3.3622011257402713e+00 + CVs 20 + 1.6746717879039896e-01 2.6577424615926776e-01 -3.0046262287409997e-01 + 3.3683223868188239e-01 5.3402400090331192e-01 -5.9278929839384331e-01 + 5.3117690087971048e-01 7.9413063838650644e-01 -8.7094288601241243e-01 + 7.5574713554598771e-01 1.0371658163749635e+00 -1.1356038870067631e+00 + 1.0023253985067027e+00 1.2532378639616188e+00 -1.3930308974331076e+00 + 1.2546730752258417e+00 1.4327945309436056e+00 -1.6553731992871601e+00 + 1.4909065145899341e+00 1.5678728395064461e+00 -1.9369539041195296e+00 + 1.6851129952960524e+00 1.6536214579090307e+00 -2.2468916972430337e+00 + 1.8157612252118438e+00 1.6900398769925271e+00 -2.5810006099844176e+00 + 1.8733978366604711e+00 1.6793321605302238e+00 -2.9220624117551282e+00 + 1.8576267200710135e+00 1.6249433255487136e+00 -3.2468745496710429e+00 + 1.7761613270158498e+00 1.5347474797640015e+00 -3.5341171571388070e+00 + 1.6415255082163538e+00 1.4183718924901099e+00 -3.7676308793403970e+00 + 1.4664606761203869e+00 1.2872811374418833e+00 -3.9322377171656511e+00 + 1.2668353110840735e+00 1.1614635181297679e+00 -4.0168121614218819e+00 + 1.0643351430520676e+00 1.0590381811738021e+00 -4.0282946747956139e+00 + 8.8424573782663651e-01 1.0119115020969036e+00 -3.9737164690605313e+00 + 7.5531199377846225e-01 1.0368402236549232e+00 -3.8864836666974494e+00 + 5.3496888689931643e-01 9.1002910350532717e-01 -3.7834476910941990e+00 + id 11413 + loc 7.1913039684295654e-01 1.0003576427698135e-01 1077 + blend 0.0000000000000000e+00 + interp 4.6398149606193534e-01:2.7057432707838364e-01:7.4980467241018367e-02:2.8252309210478066e-01:1.0698058839398723e+00:3.4016361974545933e-01:1.7657910476110008e+00:4.6397685624697477e-01:2.0929052295677022e+00:4.0501142502221021e-01:2.7862311535279880e+00:3.8132958110980397e-01:3.1342852096534686e+00 + CVs 20 + 3.8156197699857744e-02 3.7224121693462886e-01 2.6706135379117052e-01 + 7.1731022902943753e-02 7.6058235247977013e-01 5.2301118871850583e-01 + 7.6781380006331501e-02 1.1429740217284616e+00 8.1700544108078255e-01 + 2.4208698350901670e-02 1.4922515056190517e+00 1.1744785899128867e+00 + -1.0964663506274130e-01 1.7769655335617913e+00 1.5961125475247442e+00 + -3.3710299577100900e-01 1.9668544626312936e+00 2.0628815177708968e+00 + -6.5894796970834657e-01 2.0370673640467678e+00 2.5404037996185371e+00 + -1.0605712935341143e+00 1.9751035241033994e+00 2.9866925656531382e+00 + -1.5084411243906148e+00 1.7853482305726005e+00 3.3722686202472199e+00 + -1.9556106931429820e+00 1.4840011994651825e+00 3.6992520979530266e+00 + -2.3563330046675470e+00 1.0840898899766860e+00 3.9906605306844045e+00 + -2.6669925888368402e+00 5.9256176951299988e-01 4.2629980492276562e+00 + -2.8440295749410058e+00 2.7428981705098998e-02 4.5219232930477435e+00 + -2.8400358281055205e+00 -5.7062840794186043e-01 4.7887641069556128e+00 + -2.5956144345406873e+00 -1.1296904364386808e+00 5.0963069218227801e+00 + -2.1314406337894893e+00 -1.5194757476830847e+00 5.4700851211414472e+00 + -1.5868597987837656e+00 -1.6332018404461093e+00 5.9301888206885032e+00 + -1.1187843945625775e+00 -1.5538648418359378e+00 6.3901311042499422e+00 + -9.0732775488357298e-01 -1.7554599492294409e+00 6.6408313246947452e+00 + id 11414 + loc 3.8074609637260437e-01 1.1980636417865753e-01 1047 + blend 0.0000000000000000e+00 + interp 4.8296508167401470e-01:3.4354473952858738e-01:6.1952893196570979e-01:2.0344055706532357e-01:1.1316464047203274e+00:2.8620056949693257e-01:1.9900611580614691e+00:4.0133518436257060e-01:2.3367705252071529e+00:3.1395603297403035e-01:3.3217000620542612e+00:4.8296025202319798e-01:3.8947416974885853e+00 + CVs 20 + -7.1681002694478579e-01 6.6296998876215674e-01 -1.1269865057145248e-01 + -1.2994326276860899e+00 1.2781437891162923e+00 -3.0185443169059567e-01 + -1.7557161423830383e+00 1.8542012587920276e+00 -5.9638984730022293e-01 + -2.0426038196603549e+00 2.3594876977037242e+00 -1.0174645112019327e+00 + -2.1371441494140733e+00 2.7422711643340953e+00 -1.5529974713929537e+00 + -2.0780197422055471e+00 2.9513334742647608e+00 -2.1550552582917377e+00 + -1.9329248791996425e+00 2.9459211692405307e+00 -2.7435348098600638e+00 + -1.7758331312433899e+00 2.7478686897996720e+00 -3.2424178333211917e+00 + -1.6263608356642583e+00 2.4361172202412051e+00 -3.6335387566267991e+00 + -1.4442517880834467e+00 2.0744983156701324e+00 -3.9473777099940568e+00 + -1.1842057369062362e+00 1.6856582900040258e+00 -4.1999678663880511e+00 + -8.2385834053018459e-01 1.2831595269209903e+00 -4.3717790373625833e+00 + -3.5354497278307750e-01 9.2258239537660169e-01 -4.4140702384202672e+00 + 2.0338921875278274e-01 6.8959893626037838e-01 -4.2955805485594807e+00 + 7.9402398736191593e-01 6.5474632817134182e-01 -4.0220034561489770e+00 + 1.3401101877248847e+00 8.6851724732154734e-01 -3.6069604420750703e+00 + 1.6767249618925448e+00 1.4088406992063529e+00 -3.0592246493091175e+00 + 1.3977845406840348e+00 2.2826583776877207e+00 -2.6198801289306837e+00 + 1.1411914747157945e+00 2.8249326335907314e+00 -2.4558409205750218e+00 + id 11415 + loc 5.3354641422629356e-03 6.3407808542251587e-01 410 + blend 0.0000000000000000e+00 + interp 4.1365294493128330e-01:3.1920663917747466e-01:1.2195931352262179e-01:2.6280387724653326e-01:9.9844759141198536e-01:3.9875388962551550e-01:1.9839818099965787e+00:2.2150797417870163e-01:2.3253795004330780e+00:3.7106784069217991e-01:2.9999731081928411e+00:4.1364880840183399e-01:3.4625413875766178e+00 + CVs 20 + 2.9898343808308375e-01 1.5775854404587059e-01 -4.5547620802196889e-02 + 5.4491859016525768e-01 2.5911664773990134e-01 -1.0815101340599884e-01 + 7.8513710448903584e-01 3.3748320728377534e-01 -1.7182746007609265e-01 + 1.0461388607383095e+00 4.0956615380568073e-01 -2.2559463709293071e-01 + 1.3266947000603619e+00 4.7260679389168569e-01 -2.6365190655498683e-01 + 1.6232277649845090e+00 5.2433619705099632e-01 -2.7862712319083421e-01 + 1.9300799065477645e+00 5.6386692093968649e-01 -2.6198737600625172e-01 + 2.2395843136083942e+00 5.9063251627066626e-01 -2.0831836138153281e-01 + 2.5432719129455261e+00 6.0434149793983316e-01 -1.1712018670627800e-01 + 2.8324089465073667e+00 6.0570447153718332e-01 9.2341638087301003e-03 + 3.0981699368419475e+00 5.9414562980846886e-01 1.6189383019161907e-01 + 3.3381477880145614e+00 5.6242191168263034e-01 3.1612434698621261e-01 + 3.5609632044572401e+00 4.9917587934984842e-01 4.4011224183154718e-01 + 3.7792712897920122e+00 4.0053878919048724e-01 5.2277480117158259e-01 + 3.9994762852457306e+00 2.6949191238286985e-01 5.7149776373457217e-01 + 4.2144417356682693e+00 1.1303506810840669e-01 5.8978365514121034e-01 + 4.4158748124644687e+00 -5.9458640816721697e-02 5.7616905061232038e-01 + 4.6035537376515538e+00 -2.4008226687437473e-01 5.3248733636733747e-01 + 4.8069406130174528e+00 -4.2019020029633802e-01 5.0232085323777875e-01 + id 11416 + loc 8.0503547191619873e-01 8.6898803710937500e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6686668481357102e-01:3.2460471294523185e-01:7.3007317038651698e-01:3.2103160021170674e-01:1.4296747830843684e+00:3.6001923859153651e-01:2.2266547660779437e+00:4.6686201614672290e-01:2.9992084938408849e+00:3.0142707466928370e-01:3.3362977009390731e+00:3.3498465628813673e-01:3.9988563042867074e+00 + CVs 20 + 2.4305325235486608e-01 2.5609689166619587e-01 -2.8991339606711991e-01 + 4.7764720164363172e-01 5.0114760677942305e-01 -5.4641401250203392e-01 + 7.2290895135162658e-01 7.2256401871249221e-01 -7.7017326773142347e-01 + 9.7905483682494598e-01 9.1708213199824651e-01 -9.7009745278452220e-01 + 1.2357818985249256e+00 1.0834421104526957e+00 -1.1561456045150267e+00 + 1.4846953775232674e+00 1.2229775917643453e+00 -1.3394818406580169e+00 + 1.7204864005161458e+00 1.3387448643293811e+00 -1.5327013583393714e+00 + 1.9389418997976291e+00 1.4330804388716596e+00 -1.7491832502639888e+00 + 2.1330850592692459e+00 1.5059252209712366e+00 -1.9993337919309107e+00 + 2.2922443379389108e+00 1.5553531721979479e+00 -2.2856368883662270e+00 + 2.4062841867280964e+00 1.5784522881109886e+00 -2.6012135530864580e+00 + 2.4685415348544346e+00 1.5722399153596460e+00 -2.9331573695057100e+00 + 2.4758815031113346e+00 1.5355918019932717e+00 -3.2668842546661763e+00 + 2.4288448823566777e+00 1.4699641342294618e+00 -3.5877578876157541e+00 + 2.3306816739350791e+00 1.3786131163566175e+00 -3.8812073416927118e+00 + 2.1860448034371411e+00 1.2689405539307350e+00 -4.1310578319841929e+00 + 1.9977142515938704e+00 1.1523918414328866e+00 -4.3230303084458015e+00 + 1.7659662701532126e+00 1.0429489402205179e+00 -4.4471998356161073e+00 + 1.4152845198365038e+00 8.7855336870563350e-01 -4.4918282343642719e+00 + id 11417 + loc 1.7375759780406952e-01 8.5099244117736816e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4774558431815759e-01:4.2288355951413942e-01:7.1160928955820157e-03:4.1510681203992739e-01:5.6811434949678330e-01:3.1786451275149041e-01:1.0327417280125823e+00:3.7646423364199005e-01:2.0251065322772179e+00:4.4774110686231444e-01:2.8742106818794735e+00:3.5794468754709902e-01:3.5401084144738846e+00 + CVs 20 + 1.1979704198645970e-01 2.6527830167928984e-01 -1.2042968819868539e-01 + 2.4108335638402872e-01 5.3007615289429422e-01 -2.8848593117222765e-01 + 3.6798887989640866e-01 7.7959035324530945e-01 -4.8062110587804685e-01 + 4.9709574787677058e-01 1.0105820971095898e+00 -6.8135797240831175e-01 + 6.2303997882882922e-01 1.2280196127306708e+00 -8.8607713033542557e-01 + 7.5168256945443424e-01 1.4357385958989859e+00 -1.0977198454588886e+00 + 8.9744729265376133e-01 1.6345834155406704e+00 -1.3222656041341820e+00 + 1.0702709272662840e+00 1.8228266154449022e+00 -1.5587049715169119e+00 + 1.2708540689496437e+00 1.9909979816276109e+00 -1.8016308109177028e+00 + 1.4931590977957425e+00 2.1180683246121159e+00 -2.0533821052182333e+00 + 1.7237716917558417e+00 2.1705366937632173e+00 -2.3227765547892827e+00 + 1.9395005488489849e+00 2.1118170020379687e+00 -2.6090777834446803e+00 + 2.1154993666609161e+00 1.9276393597127432e+00 -2.8851508753204449e+00 + 2.2510581434945736e+00 1.6465272997539802e+00 -3.1196141745602075e+00 + 2.3560722632324316e+00 1.2951425650065884e+00 -3.3188225040711767e+00 + 2.4037569393312981e+00 8.6496175809683029e-01 -3.5081963495112434e+00 + 2.3454379469169542e+00 3.6218670782900514e-01 -3.6937983766924893e+00 + 2.2135158194600377e+00 -1.3988539462689598e-01 -3.8697430283953689e+00 + 2.1937332923516224e+00 -5.3290243571394025e-01 -4.0486232994109548e+00 + id 11418 + loc 1.2358006834983826e-01 1.0801254957914352e-01 1077 + blend 0.0000000000000000e+00 + interp 3.9735465637880962e-01:3.1978996528853204e-01:6.4752456913169421e-01:3.9735068283224584e-01:1.6631802011789978e+00:3.4153836515856817e-01:2.0937671448414208e+00:3.0215454312871576e-01:2.9476691503128611e+00:3.8453124065250649e-01:3.2992646518511890e+00:2.4319398112615026e-01:3.9993043090687248e+00 + CVs 20 + -1.0025780244305667e-01 3.1285675662668327e-01 5.3987416345603723e-02 + -2.4087614460643947e-01 6.0681335128856329e-01 9.6519891759256821e-02 + -4.1355879757651137e-01 8.8199485170206604e-01 1.2597283019212493e-01 + -6.1116317824901845e-01 1.1308077773870180e+00 1.4004648897761451e-01 + -8.3067557971443695e-01 1.3429063429216965e+00 1.3557448776851755e-01 + -1.0667937285789078e+00 1.5108365214408694e+00 1.1173788539685914e-01 + -1.3152189654781292e+00 1.6309924410614323e+00 6.7767204460091213e-02 + -1.5725463681937215e+00 1.7018446099981328e+00 1.8458483067697595e-03 + -1.8288177353557469e+00 1.7232024215304778e+00 -8.3565517360670249e-02 + -2.0662769493795667e+00 1.7013462651391542e+00 -1.7708433517489724e-01 + -2.2716474788563974e+00 1.6545629325938487e+00 -2.6271577173301347e-01 + -2.4419924183035162e+00 1.6088869147337721e+00 -3.2994842755235776e-01 + -2.5742210121508755e+00 1.5941603042912469e+00 -3.7864508166514371e-01 + -2.6569333654024079e+00 1.6436436806159007e+00 -4.2669260592405989e-01 + -2.6740069291478048e+00 1.7826050054478642e+00 -5.2492388159007841e-01 + -2.6249161737421285e+00 1.9572824060235900e+00 -7.2802713337149128e-01 + -2.5022409605677329e+00 2.0514099161903534e+00 -1.0166314450474874e+00 + -2.3255899464627019e+00 1.9938648097394802e+00 -1.3050467004966484e+00 + -2.4749817775107914e+00 2.0104251958843560e+00 -1.1628955548245128e+00 + id 11419 + loc 2.0606911182403564e-01 4.2316094040870667e-01 1053 + blend 0.0000000000000000e+00 + interp 1.7773241623964151e+00:3.3608668195318259e-01:2.3422776665375111e-01:3.7675456910188571e-01:9.9725488349872515e-01:7.7619650948587904e-01:1.0350874822375571e+00:1.3800721191897463e+00:1.1699508583923588e+00:1.7773141623964150e+00:1.2516260225742089e+00:8.9842703223054343e-01:3.2738288479002482e+00:2.4815917154105202e-01:3.4834598583432541e+00 + CVs 20 + 3.9731907402737515e-01 4.1385266998437287e-01 9.6033716691615034e-02 + 7.2413881590379714e-01 7.4190896877301404e-01 2.2951405453926704e-01 + 1.0294252536393613e+00 1.0196768025123015e+00 3.8515769033004571e-01 + 1.3319535497007688e+00 1.2600664503600756e+00 5.5766503387715294e-01 + 1.6216916244311137e+00 1.4559572883223275e+00 7.5030064234755101e-01 + 1.8892324760256292e+00 1.5995843964063861e+00 9.5989584830455932e-01 + 2.1280936792230030e+00 1.6852214529636598e+00 1.1787629976234220e+00 + 2.3318306792859138e+00 1.7151896261475785e+00 1.3979510595107087e+00 + 2.4906256325189280e+00 1.7016283262218408e+00 1.6040946375815683e+00 + 2.5971789089190374e+00 1.6751324483443706e+00 1.7744464386019088e+00 + 2.6595819967863377e+00 1.6741961338300870e+00 1.9014240039233230e+00 + 2.6759702399514689e+00 1.6837069852280417e+00 2.0142138148124564e+00 + 2.6239050002805899e+00 1.6380282554395771e+00 2.1096038720553736e+00 + 2.4958002013403755e+00 1.4935605141774251e+00 2.1288358674033048e+00 + 2.2924899329899855e+00 1.2859957122436971e+00 2.0455005139026130e+00 + 2.0425896595391078e+00 1.1286913254062947e+00 1.9319436215484860e+00 + 1.8627339011081574e+00 1.1120440330742827e+00 1.8850865006437285e+00 + 1.8287964550762918e+00 1.1868956809569062e+00 1.9207025993549220e+00 + 1.4719324277273402e+00 1.4433429371771551e+00 1.9393620276501329e+00 + id 11420 + loc 7.6868796348571777e-01 3.9447265863418579e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0348319310217970e-01:3.1980362097294196e-01:1.7985958310926398e-01:3.5709673233342487e-01:9.9814310463288436e-01:4.1574967585937217e-01:1.4213999966702897e+00:3.7589171491736600e-01:1.9508103174094304e+00:4.3533091168113164e-01:2.7464547381185760e+00:5.0347815827024867e-01:3.0762856334899777e+00:3.9163457221332088e-01:3.7463871418928831e+00 + CVs 20 + 3.8403079088010372e-01 2.8271240459009983e-01 -2.9546426131423414e-01 + 7.4335945625621602e-01 5.3408008308162291e-01 -5.0625327766386641e-01 + 1.0732079841065274e+00 7.9491751859512949e-01 -6.6606805951896608e-01 + 1.3948985517370323e+00 1.0963536512510612e+00 -7.3301114739340634e-01 + 1.6819761700570139e+00 1.4091938486107782e+00 -7.1403509752707151e-01 + 1.8983372150406883e+00 1.6918949224394899e+00 -7.2651164817875613e-01 + 2.0438594829917776e+00 1.9055876947567203e+00 -8.4019997598419738e-01 + 2.1478414040003257e+00 2.0267302501435407e+00 -1.0112336843275607e+00 + 2.2379211426641215e+00 2.0435337546115209e+00 -1.1765171527427198e+00 + 2.3121635087563326e+00 1.9022499482600619e+00 -1.2634662812963884e+00 + 2.3159169965586961e+00 1.5996363165742127e+00 -1.1479822413421843e+00 + 2.2118780436174825e+00 1.3437275094393399e+00 -8.2119393042264655e-01 + 2.0935535233803688e+00 1.2743016299493579e+00 -4.9499086514239921e-01 + 2.0338043725793606e+00 1.3043745384002525e+00 -2.7919177823716823e-01 + 2.0294779799934730e+00 1.3490680648338049e+00 -1.5448932354461109e-01 + 2.0499357878001652e+00 1.3954524828747144e+00 -7.2859381542197399e-02 + 2.0733303684691102e+00 1.4723674483808220e+00 -9.9626913411077211e-03 + 2.1090723398001034e+00 1.5694982543125324e+00 2.7163179511649149e-02 + 2.1631372666994224e+00 1.2692266340998517e+00 1.2594696830793550e-01 + id 11421 + loc 6.2129441648721695e-02 1.5312789380550385e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7108773534227300e-01:3.3232804534032268e-01:6.7252468907941321e-01:4.0095667544512309e-01:1.1422598203886853e+00:2.4937785854410202e-01:1.7240378859696217e+00:4.7108302446491962e-01:2.1197716330696501e+00:3.6160078605750090e-01:3.0262199066026745e+00:3.0947601821867338e-01:3.7541416141709205e+00 + CVs 20 + -1.4913597669583009e-01 3.1728878931705784e-01 -2.9829858743157373e-01 + -2.9864969082943166e-01 6.4811209829576577e-01 -5.8606454993739021e-01 + -4.9362302196089913e-01 9.4785805770328158e-01 -8.8044289713384205e-01 + -7.4195865254873161e-01 1.1920024687363160e+00 -1.1774052129317738e+00 + -1.0323304022778772e+00 1.3670996601830647e+00 -1.4638036897419342e+00 + -1.3471222321100944e+00 1.4638303654149718e+00 -1.7250046827201277e+00 + -1.6695986574858686e+00 1.4853530572132174e+00 -1.9461409585687830e+00 + -1.9879217199572012e+00 1.4469493787183927e+00 -2.1139136872496915e+00 + -2.2919098875089277e+00 1.3684273589813043e+00 -2.2184786573646491e+00 + -2.5724956438107691e+00 1.2746783158171386e+00 -2.2598831416625123e+00 + -2.8276047541057778e+00 1.1900198594692737e+00 -2.2483656172604434e+00 + -3.0640772568183969e+00 1.1317126913504492e+00 -2.2008201884903693e+00 + -3.2976841153736505e+00 1.1053091132053035e+00 -2.1364326147440038e+00 + -3.5510793385054464e+00 1.1020529519736217e+00 -2.0711881706227246e+00 + -3.8525374600035356e+00 1.1035227313878004e+00 -2.0161350865636485e+00 + -4.2541639683769832e+00 1.0762971894442757e+00 -1.9882241190219669e+00 + -4.8267930261661007e+00 8.7248867811017550e-01 -2.0233667969766644e+00 + -5.3192807963328681e+00 3.1048573083122766e-01 -2.1048957461802353e+00 + -5.4189460586306577e+00 6.7946250121089236e-02 -2.1016398522094444e+00 + id 11422 + loc 1.0647183656692505e-01 4.5410397648811340e-01 1047 + blend 0.0000000000000000e+00 + interp 4.9893614259459501e-01:2.8443497214197722e-01:7.7073616082957708e-03:3.8518741034177895e-01:9.6923443401785347e-01:4.4159864117105840e-01:1.6662757024246724e+00:3.2053628239409920e-01:1.9813686424329180e+00:4.3792419571506946e-01:2.2099418856430901e+00:4.5751943800377504e-01:3.0000098211289856e+00:4.9893115323316911e-01:3.7514462636733321e+00 + CVs 20 + -5.7586372811303899e-01 6.0731839808297472e-01 -6.2835828493536097e-02 + -1.0729659476684525e+00 1.2193277413017707e+00 -1.6029901282160744e-01 + -1.4851328504791137e+00 1.8477740724936489e+00 -3.4742285256508754e-01 + -1.7682290046708402e+00 2.4790220370702825e+00 -6.8553758177311086e-01 + -1.8753969141908158e+00 3.0486419746520936e+00 -1.2050217495649569e+00 + -1.8180627118903869e+00 3.4678595941165029e+00 -1.8833374796305491e+00 + -1.6535135825006091e+00 3.6452029157475874e+00 -2.6564193211773479e+00 + -1.4601732585242440e+00 3.5263255381063283e+00 -3.4216513314496173e+00 + -1.3012504075359990e+00 3.1425174144103005e+00 -4.0557085871409670e+00 + -1.1911306633223986e+00 2.5975390095424240e+00 -4.4866803537495166e+00 + -1.1089503286896916e+00 1.9971164537340123e+00 -4.7217814740697994e+00 + -1.0213494072445155e+00 1.4019439766796025e+00 -4.8039985415605582e+00 + -9.0415183064522409e-01 8.4814323262108826e-01 -4.7851081533745603e+00 + -7.3599344074347517e-01 3.3879997665383876e-01 -4.7121352435643891e+00 + -4.7951687021490674e-01 -1.3019924854776105e-01 -4.5955263277748131e+00 + -9.9743688849274648e-02 -5.3279647082052561e-01 -4.4500326961829364e+00 + 5.3321641248214535e-01 -9.0926521010281469e-01 -4.2729381386490433e+00 + 1.8349144728365854e+00 -1.1347847553449997e+00 -3.6839706984662941e+00 + 1.9551594710437874e+00 -9.0787097308237219e-01 -3.7039000139142741e+00 + id 11423 + loc 9.0066212415695190e-01 5.2890491485595703e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9639962864082939e-01:3.2542590282362693e-01:3.3407965339959933e-03:3.4507846388385099e-01:8.6009586087534584e-01:3.8676477062997189e-01:1.2766228742840633e+00:3.3666563265649752e-01:2.2816184961356929e+00:3.9639566464454301e-01:3.0109092741767602e+00 + CVs 20 + 8.6916850636922491e-02 2.7803508057813758e-01 -2.6935091522344368e-01 + 1.7508103417449958e-01 5.5643686194746977e-01 -5.3600322727169725e-01 + 2.6885125246519326e-01 8.3875971412818917e-01 -8.1411305159610481e-01 + 3.7408254160291099e-01 1.1220649963063813e+00 -1.1101314217592513e+00 + 4.9561735345179925e-01 1.3973547928692276e+00 -1.4256795681434031e+00 + 6.3328498702945613e-01 1.6525080228247548e+00 -1.7633721340871802e+00 + 7.7761729115791456e-01 1.8732884990296508e+00 -2.1262009444675747e+00 + 9.0684370260656133e-01 2.0451283050732081e+00 -2.5152772853155416e+00 + 9.9786960628923560e-01 2.1592613742977442e+00 -2.9303301941227242e+00 + 1.0403614268301558e+00 2.2116700732083334e+00 -3.3703304853525102e+00 + 1.0327376748735901e+00 2.1988594362437790e+00 -3.8275417575323578e+00 + 9.7771534448803465e-01 2.1201350367161558e+00 -4.2884487668465319e+00 + 8.7868341844076148e-01 1.9716672097326018e+00 -4.7395140002030605e+00 + 7.3454173204560347e-01 1.7421357885275817e+00 -5.1643739977655869e+00 + 5.3549426298512870e-01 1.4275685887848275e+00 -5.5322989291673430e+00 + 2.6653093295454400e-01 1.0628220330486164e+00 -5.7978761333272679e+00 + -7.6240701285963428e-02 6.9600819054398988e-01 -5.9384049161528010e+00 + -4.6346454735194875e-01 3.2120434860247904e-01 -5.9949950872817155e+00 + -7.5903396087985109e-01 -8.8128009086328674e-02 -6.1784613221690927e+00 + id 11424 + loc 1.1743482947349548e-01 3.7153199315071106e-01 1075 + blend 0.0000000000000000e+00 + interp 4.1245289791911272e-01:2.3803699255674182e-01:5.2515825935900740e-01:3.8299031747854811e-01:1.0089971638038926e+00:3.2761783573335101e-01:1.5966432405216948e+00:2.5122861822844561e-01:2.0755757458195578e+00:4.1244877339013353e-01:2.7929286014509729e+00:4.0223608454903376e-01:3.4060875934872397e+00:3.3749165300080758e-01:3.9854587363585425e+00 + CVs 20 + -1.2857876203139432e-01 3.2033686624008811e-01 -1.8918976363776357e-01 + -2.6427808736771813e-01 6.7742731740359652e-01 -3.2258395301278198e-01 + -3.9620357291254849e-01 1.0350898020346921e+00 -4.3150879384717095e-01 + -5.3776896800106022e-01 1.3762300825516036e+00 -5.3400866483620502e-01 + -7.0287885528223892e-01 1.6864577062328405e+00 -6.3996742300716758e-01 + -8.9123587516817915e-01 1.9477073457475536e+00 -7.5589046464924114e-01 + -1.0888923104085937e+00 2.1427862493973091e+00 -8.8272615935392651e-01 + -1.2772922878068449e+00 2.2646152560448622e+00 -1.0152234789138537e+00 + -1.4553606705166817e+00 2.3216722099761711e+00 -1.1584133738622882e+00 + -1.6349336471018157e+00 2.3107747010619635e+00 -1.3381130584263614e+00 + -1.8107721453620627e+00 2.2178666856363516e+00 -1.5598107236065584e+00 + -1.9684628343292645e+00 2.0463977432613705e+00 -1.7954345856173319e+00 + -2.1048526293431533e+00 1.8095962789909750e+00 -1.9957430208899025e+00 + -2.2334496744847545e+00 1.4952265601877062e+00 -2.1161262215103265e+00 + -2.3468579440420099e+00 1.0641548816197322e+00 -2.1635168309408499e+00 + -2.3917310042891913e+00 5.0664530498661242e-01 -2.2292638995859480e+00 + -2.3261945268640547e+00 -1.0639598474588674e-01 -2.4421818441678176e+00 + -2.1847950419250139e+00 -6.3410912688003451e-01 -2.8505517446363133e+00 + -2.0718322645989904e+00 -9.9531972118201084e-01 -3.2617960713561569e+00 + id 11425 + loc 5.9606790542602539e-01 8.4802582859992981e-02 1076 + blend 0.0000000000000000e+00 + interp 5.7091589694338918e-01:3.4973155118344046e-01:3.4320543540669035e-01:2.9422833067895915e-01:1.0473032453955500e+00:4.2807020525498701e-01:1.9731129111559302e+00:5.7091018778441982e-01:2.2473327797239229e+00:3.8614720272609060e-01:3.0134637834026439e+00:3.3206372377018789e-01:3.9611842339084400e+00 + CVs 20 + -1.7475837724570295e-01 3.9597296026358875e-01 1.5083571489411701e-01 + -3.4830366870695084e-01 7.9451984372968254e-01 3.2543164634518740e-01 + -5.2085194695091075e-01 1.1846228307790134e+00 5.3471771668780321e-01 + -6.8751219488735615e-01 1.5534367129045075e+00 7.9066143738458816e-01 + -8.5040597370276827e-01 1.8886892668463300e+00 1.1010124805453056e+00 + -1.0318045999224181e+00 2.1768439194390017e+00 1.4600522395064259e+00 + -1.2598788606625342e+00 2.3996712394878701e+00 1.8435102296622841e+00 + -1.5429140100174015e+00 2.5403756259599253e+00 2.2192266851212246e+00 + -1.8667480623324655e+00 2.5885955799890956e+00 2.5652499578446197e+00 + -2.1961269777724559e+00 2.5373758977314722e+00 2.8437043929996637e+00 + -2.4839590830308631e+00 2.4068453662600184e+00 3.0121601361252677e+00 + -2.7583869520968287e+00 2.1969202741873777e+00 3.1220924544797759e+00 + -2.9910416079645148e+00 1.9112987075299031e+00 3.1910403470804281e+00 + -3.1287014091068222e+00 1.6035408969837859e+00 3.2074657114434548e+00 + -3.1850916209159039e+00 1.2942594186430938e+00 3.1832912090692376e+00 + -3.2087013651030638e+00 9.3153739265616720e-01 3.1406957415542784e+00 + -3.1438151258947373e+00 4.2118855707849046e-01 3.0730569415423727e+00 + -2.8497831291745483e+00 5.4475231180597161e-02 2.9808895681831284e+00 + -2.5742146169751945e+00 1.2956484726994377e-01 2.9414166784755138e+00 + id 11426 + loc 5.7412284612655640e-01 8.9408403635025024e-01 1047 + blend 0.0000000000000000e+00 + interp 4.3360811549908901e-01:3.8497793560986726e-01:6.8200568324860988e-04:4.0903476121695576e-01:8.6017602298564488e-01:2.8662964082818315e-01:1.1424983223621161e+00:4.3360377941793404e-01:1.9451529399819183e+00:4.1880393305278912e-01:2.2648287520036949e+00:4.3062595716556828e-01:3.0103018914848034e+00:2.9682178213379223e-01:3.4749372846749687e+00 + CVs 20 + 2.9128818227131004e-01 7.3273531524048308e-01 -5.5222984387620477e-01 + 5.8201760446791317e-01 1.4313267365030857e+00 -1.0473846105207540e+00 + 9.0302597466074908e-01 2.1175828893104174e+00 -1.4422558286772489e+00 + 1.2951135471523232e+00 2.7699755632930652e+00 -1.6296185694359746e+00 + 1.7447572398641782e+00 3.3080391696556011e+00 -1.5080890012878037e+00 + 2.1639162353079797e+00 3.6594253842183955e+00 -1.1010830454670406e+00 + 2.4646838416034687e+00 3.7995591812638150e+00 -5.0933179243139248e-01 + 2.6039590494410652e+00 3.7438278884907481e+00 1.6896321233430411e-01 + 2.5829858979891331e+00 3.5162586889674792e+00 8.6898110735597700e-01 + 2.4227083755179506e+00 3.1235430453106723e+00 1.5345506377046965e+00 + 2.1586122948495627e+00 2.5868073745611060e+00 2.0973154398798530e+00 + 1.8426007409891023e+00 1.9852471187059064e+00 2.5158562260986255e+00 + 1.5143779502895505e+00 1.4031095800470048e+00 2.8438588342030915e+00 + 1.2163344404137271e+00 9.1261903072726347e-01 3.1916621273603432e+00 + 1.0824031358022688e+00 6.5364440257006295e-01 3.6085729519752343e+00 + 1.1900411319204478e+00 6.7295852714169424e-01 4.0300842698352639e+00 + 1.4904733337992766e+00 8.9585362446925698e-01 4.4392825368209561e+00 + 1.9514830040820250e+00 1.2923628706458439e+00 4.8260453985699012e+00 + 2.5175927961703235e+00 1.7932929136262834e+00 5.3187660914128099e+00 + id 11427 + loc 2.4829535186290741e-01 4.9636715650558472e-01 1077 + blend 0.0000000000000000e+00 + interp 4.6443138634133396e-01:3.7591434660704226e-01:1.7076092768901108e-01:4.0301871138646539e-01:1.0051320629909368e+00:3.7963839276517763e-01:1.7816934396374644e+00:4.6442674202747058e-01:2.4333199472660945e+00:3.7327057348823739e-01:3.0808396222978658e+00:4.4030723760713092e-01:3.7889528221151472e+00 + CVs 20 + -5.6838518015378356e-02 3.9351268523668242e-01 -2.6863767576531128e-01 + -1.4642788272673701e-01 7.9635090868861558e-01 -5.2873848090981279e-01 + -2.7967720842831945e-01 1.1691356176780858e+00 -8.0925044606614116e-01 + -4.6210666597081462e-01 1.4884793747017175e+00 -1.1157972855870653e+00 + -6.8348433964162836e-01 1.7298311334859360e+00 -1.4429902136922046e+00 + -9.1972960444146579e-01 1.8754464493719087e+00 -1.7816226234445247e+00 + -1.1458818334613228e+00 1.9269309252792235e+00 -2.1184679038559362e+00 + -1.3479285193964234e+00 1.9033637713244020e+00 -2.4405928895903748e+00 + -1.5275228036381492e+00 1.8284179941226177e+00 -2.7408309854397168e+00 + -1.7034436061163143e+00 1.7195454157771874e+00 -3.0208556907835313e+00 + -1.8981965164104024e+00 1.5805360855040289e+00 -3.2861752226864880e+00 + -2.1214681228338894e+00 1.4039017489738044e+00 -3.5362749084559657e+00 + -2.3766596650149667e+00 1.1752428056925033e+00 -3.7642583077522382e+00 + -2.6733115314907927e+00 8.7398524421297075e-01 -3.9552840420132389e+00 + -3.0279840626902943e+00 4.7837707910411087e-01 -4.0718528664170943e+00 + -3.4445989170365898e+00 1.3268050678100884e-02 -4.0449756431048653e+00 + -3.8875807662446942e+00 -3.8204122592840006e-01 -3.8535167806994446e+00 + -4.2958134824746095e+00 -5.8339490688213180e-01 -3.6009642858699333e+00 + -4.5038478776305313e+00 -5.5707587988167173e-01 -3.5215026594911745e+00 + id 11428 + loc 8.5650071501731873e-02 9.1866981983184814e-01 410 + blend 0.0000000000000000e+00 + interp 5.1908744656975159e-01:3.3559131587819568e-01:3.1352666167406273e-01:4.6934433206508347e-01:8.6324914138697262e-01:5.1908225569528588e-01:1.7002500960096061e+00:3.8010101408990615e-01:2.0099382296165471e+00:4.1802650158333621e-01:2.6896167038409340e+00:4.3245234961166840e-01:3.0539146093276832e+00:4.3250148923177373e-01:3.8093607287533793e+00 + CVs 20 + 4.2155125885198408e-01 1.2215517883484092e-01 -1.1660647841765789e-01 + 7.4891284623190646e-01 1.6504754532269655e-01 -2.4670744510292372e-01 + 1.0621921358776532e+00 1.7981622410832848e-01 -3.7364721796509870e-01 + 1.3937610714319411e+00 1.8663765023747481e-01 -4.8943334497742008e-01 + 1.7393854230638550e+00 1.8454698833208949e-01 -5.9011598692985423e-01 + 2.0958934723768259e+00 1.7458436640799346e-01 -6.7176179586549145e-01 + 2.4596790597116276e+00 1.5954485998739554e-01 -7.2901761071922300e-01 + 2.8261436929048687e+00 1.4244355176436319e-01 -7.5845033564366049e-01 + 3.1911138312621521e+00 1.2625493595179660e-01 -7.5881145604525702e-01 + 3.5489607357868462e+00 1.1390567602333479e-01 -7.3025597148507870e-01 + 3.8819425619985930e+00 1.0640578137282941e-01 -6.8315341027113075e-01 + 4.1532334181859616e+00 1.0280593803396432e-01 -6.5185630394357486e-01 + 4.3387780993957215e+00 1.0944428762024616e-01 -6.6589632696487389e-01 + 4.4757868666722667e+00 1.3397749384556756e-01 -7.0511250271096981e-01 + 4.6228736405424531e+00 1.6688614308815053e-01 -7.4386873704168144e-01 + 4.7881402387635568e+00 2.0318612185256302e-01 -7.7934382924477585e-01 + 4.9555760956186568e+00 2.4811671909837485e-01 -8.0895177187646483e-01 + 5.1232929448946694e+00 2.9928054936393145e-01 -8.2997859985690703e-01 + 5.3456260882338134e+00 2.8620191136079942e-01 -8.9662012768412569e-01 + id 11429 + loc 6.3188987970352173e-01 1.0606260597705841e-01 1053 + blend 0.0000000000000000e+00 + interp 5.2167073469891778e-01:3.0857473727667778e-01:6.7420172476475537e-01:4.1480661529392387e-01:1.0220941585934462e+00:5.2166551799157079e-01:1.2769999148339279e+00:4.5053078181041800e-01:2.0474994845226111e+00:2.7540084406293108e-01:3.1160829414741795e+00:4.2317599982434478e-01:3.7630814044241983e+00 + CVs 20 + 1.4025746120115484e-01 4.0586521583443025e-01 -1.1677002808566017e-01 + 2.7924683773785286e-01 7.9915841919161990e-01 -2.0473599981907584e-01 + 4.4337161749171311e-01 1.2076042914618299e+00 -2.8639422521774599e-01 + 6.7091011793369337e-01 1.6386127531404118e+00 -3.8196276800363393e-01 + 1.0023452842559930e+00 2.0599224617416643e+00 -5.0643126751618073e-01 + 1.4545517103797732e+00 2.4171777262319210e+00 -6.6429679979222800e-01 + 2.0144385365091382e+00 2.6554491544296384e+00 -8.4085282833450092e-01 + 2.6495020729532137e+00 2.7325932902233769e+00 -1.0002226974861070e+00 + 3.3189747919280839e+00 2.6226098271710567e+00 -1.0935771320138392e+00 + 3.9631699684554320e+00 2.3035697758333229e+00 -1.0785834517336170e+00 + 4.4811024426902852e+00 1.7692155382520494e+00 -9.3592478422653280e-01 + 4.7550132910016378e+00 1.0726418474515742e+00 -6.9478782116203330e-01 + 4.7356544895490904e+00 3.5228780632775603e-01 -4.0919257244182106e-01 + 4.5287284069999227e+00 -2.2485997579117090e-01 -7.9791306180528210e-02 + 4.2945310846464331e+00 -5.8411957920749635e-01 3.4524638982981215e-01 + 4.1090675279139486e+00 -6.7650984658564917e-01 8.7972075143118333e-01 + 4.0203858970097759e+00 -4.5633694777363287e-01 1.4237519323501056e+00 + 4.0235431853745318e+00 -9.6943484085211029e-02 1.8705461580203009e+00 + 3.9668960709639109e+00 1.2554363105750910e-01 2.3703734445765026e+00 + id 11430 + loc 3.8169831037521362e-01 8.0384427309036255e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0367101508401591e-01:3.8491509362178528e-01:8.6521643820543248e-01:5.0366597837386506e-01:1.1121234488409391e+00:3.8395357663479190e-01:1.8310553164758749e+00:3.0207117823718049e-01:2.7778327302718444e+00:3.9756440926643627e-01:3.2099865922853437e+00:3.7211600864422023e-01:3.9994185757167378e+00 + CVs 20 + -2.8888678973605819e-01 3.2867754054389520e-01 2.7456850897264512e-01 + -5.1739265199514795e-01 6.0956873642609621e-01 5.1380040326044729e-01 + -6.9199907429460339e-01 8.8648159810820248e-01 7.8445750305819362e-01 + -8.6518454014858071e-01 1.1899279724772469e+00 1.0665672481130928e+00 + -1.1071792381369359e+00 1.5157895785204532e+00 1.2685558478484378e+00 + -1.4327185229605848e+00 1.8225926758634343e+00 1.3220557617476962e+00 + -1.7978414713537700e+00 2.0612814340792682e+00 1.2055314455419137e+00 + -2.1168937496461728e+00 2.1981709571406838e+00 9.1074968136449663e-01 + -2.2684125722236033e+00 2.2168962089442115e+00 4.7774885045898419e-01 + -2.2155262276650314e+00 2.1472357252603143e+00 3.4745763120155981e-02 + -2.0169853839658698e+00 2.0151104288691171e+00 -3.6116266239860684e-01 + -1.6981527430996626e+00 1.8037134603879756e+00 -6.9006645298263147e-01 + -1.3316206320902058e+00 1.5478209848350148e+00 -9.2542154042432589e-01 + -1.0469323610848997e+00 1.3570433429069357e+00 -1.1342132727750169e+00 + -9.3084843826455810e-01 1.3431936465392615e+00 -1.3679074714744184e+00 + -1.0172481052337636e+00 1.6165115054779118e+00 -1.4868080375384707e+00 + -1.2321455303020279e+00 2.1486954315586577e+00 -1.0315869888904530e+00 + -1.2257312997478720e+00 2.3201382571511977e+00 -2.5623612683150498e-01 + -1.2614938333755876e+00 2.5417358363018141e+00 -3.5424616329179370e-01 + id 11431 + loc 9.6834301948547363e-01 9.3258279561996460e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7415521169423841e-01:3.7449905402886657e-01:2.6298306685319217e-01:2.9182424851455696e-01:9.7871959230813754e-01:2.8027757089901367e-01:1.5929942830864934e+00:2.8083941867359735e-01:2.1423565921227796e+00:4.7415047014212147e-01:2.8918764371945538e+00:4.4698239858243094e-01:3.1351437337024994e+00:2.9099233803925956e-01:3.7602307361343428e+00:2.5369498799269602e-01:3.9405742033028317e+00 + CVs 20 + 1.9569504631226403e-01 3.4730217812685660e-01 -3.9040288629250186e-02 + 4.1110373073964401e-01 6.9859815526280744e-01 -1.3085210029859023e-01 + 6.5402743103630345e-01 1.0504445460961209e+00 -2.4990761617877832e-01 + 9.3184917115923971e-01 1.3988434059648545e+00 -3.8112524295221945e-01 + 1.2460533006983323e+00 1.7379921273266821e+00 -5.2737855624745933e-01 + 1.5856360828252465e+00 2.0567078322120871e+00 -7.1188478140700062e-01 + 1.9258846608458136e+00 2.3282925081567623e+00 -9.7194362761502506e-01 + 2.2308750446026755e+00 2.4917608129541633e+00 -1.3258263727554480e+00 + 2.4571411198852133e+00 2.4701017434235406e+00 -1.7340737149413545e+00 + 2.5929638615374793e+00 2.2614963724333306e+00 -2.1115797357779220e+00 + 2.6777551372913919e+00 1.9351728429958994e+00 -2.4168250934118793e+00 + 2.7680029018039396e+00 1.5651535651795043e+00 -2.6598306529370661e+00 + 2.9059425380523605e+00 1.2211613699617736e+00 -2.8757268147368529e+00 + 3.0920412512434763e+00 9.6717478361139053e-01 -3.1031218058606731e+00 + 3.2895612699162005e+00 8.6586942257191257e-01 -3.3475208500839662e+00 + 3.4357651655794337e+00 9.5575304204234235e-01 -3.5270048712305511e+00 + 3.4631976511103093e+00 1.1380162891228658e+00 -3.5029644943225486e+00 + 3.4280769935368931e+00 1.2132258902492161e+00 -3.3790382124970075e+00 + 3.4604688586700623e+00 1.4799104841464339e+00 -3.4592408233995928e+00 + id 11432 + loc 9.0737766027450562e-01 7.5313347578048706e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2055322903092673e-01:4.1104217803968290e-01:1.1055351280550307e-01:4.2054902349863643e-01:8.1331234189623347e-01:3.3377082804604025e-01:1.2906200836874520e+00:3.6553103117994429e-01:2.1201793066940220e+00:3.8289835904014546e-01:2.9826531071981606e+00:3.6653733091788460e-01:3.7593629568767710e+00 + CVs 20 + 1.6389646115004441e-01 2.4022732980243083e-01 -3.3457970145618809e-01 + 3.2232016635502952e-01 4.5842409687376351e-01 -6.3365600315585402e-01 + 4.7615239070057935e-01 6.5379084603205895e-01 -9.3632678649137502e-01 + 6.2410585155992149e-01 8.2501274064915686e-01 -1.2602557299870949e+00 + 7.6211937151720743e-01 9.7146502475101237e-01 -1.6077099075520613e+00 + 8.8260000106149561e-01 1.0945599160351409e+00 -1.9772583113459601e+00 + 9.7780572002571275e-01 1.1938313060255628e+00 -2.3625544657433699e+00 + 1.0479119496188372e+00 1.2623841841593393e+00 -2.7484301616752380e+00 + 1.1029318769944783e+00 1.2900803134240890e+00 -3.1132182540811755e+00 + 1.1546152389145976e+00 1.2728543910656422e+00 -3.4331750448896186e+00 + 1.2108232470769842e+00 1.2192446822644976e+00 -3.6910724910266191e+00 + 1.2768105762869926e+00 1.1482977763689273e+00 -3.8840435834170712e+00 + 1.3554831785801118e+00 1.0815364292389664e+00 -4.0226116024666725e+00 + 1.4481782955861426e+00 1.0311355299776039e+00 -4.1290937074726362e+00 + 1.5688452551457444e+00 9.9648714137709227e-01 -4.2257774421744356e+00 + 1.7560983274001509e+00 9.6588202291008540e-01 -4.3320301085754096e+00 + 2.0472772393586909e+00 8.9937912285231236e-01 -4.4735532660211064e+00 + 2.3866277242801375e+00 7.3541818975766715e-01 -4.6614843118980964e+00 + 2.4932529387679465e+00 4.7775554975823908e-01 -4.7543409323300230e+00 + id 11433 + loc 1.3814340531826019e-01 8.2599270343780518e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0492815458152825e-01:4.0269931492816724e-01:9.0402525524280186e-04:3.6226450066231064e-01:7.1362127903228534e-01:2.8322627772574421e-01:1.3322800943498452e+00:3.3464270825682824e-01:2.0488391198339442e+00:4.0492410529998246e-01:2.9911648442815215e+00:2.7499541714523046e-01:3.5569764475045504e+00 + CVs 20 + 2.1824663588653931e-01 3.6291573128567722e-01 -1.7436107549827123e-01 + 4.4848918740815213e-01 7.1563978660000116e-01 -3.6967100182468693e-01 + 6.8827063418891454e-01 1.0565837383935579e+00 -5.6646070894130851e-01 + 9.3538670997678641e-01 1.3848926636455092e+00 -7.5295087642414105e-01 + 1.1851854095680641e+00 1.6982893597630542e+00 -9.3119571595251915e-01 + 1.4280886281923608e+00 1.9906327575632494e+00 -1.1243236277706949e+00 + 1.6528162879981765e+00 2.2498241198378852e+00 -1.3684478808916385e+00 + 1.8466081354517658e+00 2.4440803767006036e+00 -1.6874769145101951e+00 + 1.9960882396333808e+00 2.5211513612043328e+00 -2.0838748936856186e+00 + 2.0912907662185418e+00 2.4403971451225117e+00 -2.5348810130180279e+00 + 2.1390027928778759e+00 2.2022003376647041e+00 -2.9987663030832783e+00 + 2.1784278524439138e+00 1.8476531785137831e+00 -3.4440015925481338e+00 + 2.2667050091703151e+00 1.4569378842191967e+00 -3.8695859512730069e+00 + 2.4264796308792027e+00 1.1621004371388355e+00 -4.2950978493300713e+00 + 2.6040774660457124e+00 1.1305055385202758e+00 -4.6993105693788717e+00 + 2.6821045100696113e+00 1.4585471889588899e+00 -4.9160940147637939e+00 + 2.5448786423347012e+00 1.9571946298430403e+00 -4.6717939149822607e+00 + 2.3586305121286575e+00 2.2783809454731609e+00 -4.2954675283642851e+00 + 2.4213499125743017e+00 2.8306334192527944e+00 -4.5307080199218248e+00 + id 11434 + loc 2.7364995330572128e-02 3.0623033642768860e-02 1077 + blend 0.0000000000000000e+00 + interp 5.1401969974184913e-01:5.1401455954485176e-01:4.0613678573272471e-03:2.2829024852596355e-01:9.9999886330649113e-01:3.9442576306726468e-01:1.5451121571410087e+00:3.1059463688922850e-01:2.0192098030361350e+00:3.3512728696871719e-01:3.0000430196771282e+00:3.9735068283224584e-01:3.6739692956274568e+00 + CVs 20 + -2.4337256019820702e-02 4.0344304821338511e-01 2.1389517941267033e-02 + -1.1019421969730109e-01 7.7069361051327290e-01 3.5084593498432848e-03 + -2.4070162018973018e-01 1.0992887616599503e+00 -4.6208821715437387e-02 + -4.0567558885348282e-01 1.3727694515995357e+00 -1.2487061675622640e-01 + -5.9288558565594651e-01 1.5681818353156056e+00 -2.2762073768440555e-01 + -7.7953860201375402e-01 1.6710679744177006e+00 -3.3991321474265657e-01 + -9.4132293100141529e-01 1.6862339446498595e+00 -4.4072075705085773e-01 + -1.0664667368194942e+00 1.6384544544230422e+00 -5.1252147626670408e-01 + -1.1590165759113014e+00 1.5577615270413356e+00 -5.4951931709104407e-01 + -1.2311009677591276e+00 1.4653133038125172e+00 -5.5937776193667077e-01 + -1.2890768405626487e+00 1.3742449171287243e+00 -5.5073855598961863e-01 + -1.3312288476139695e+00 1.3033144053032397e+00 -5.2621747787648432e-01 + -1.3536548768642520e+00 1.2774084210963246e+00 -4.9595382483855416e-01 + -1.3519992597113539e+00 1.3144686917899191e+00 -4.9142251955806748e-01 + -1.3232212934220964e+00 1.4103033460754961e+00 -5.6591315112848806e-01 + -1.2839576923987286e+00 1.4723767729938855e+00 -7.3791261198647262e-01 + -1.2495461542647222e+00 1.3752810512977212e+00 -9.1148711995720610e-01 + -1.2490601629301183e+00 1.1398716372980551e+00 -9.6969750215300543e-01 + -1.4308707729273336e+00 1.1499945262223408e+00 -7.9550742830730903e-01 + id 11435 + loc 9.2636746168136597e-01 8.4371960163116455e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0254884815102282e-01:4.0254482266254132e-01:5.9655344535696209e-01:3.9012068165832919e-01:1.1154587559191618e+00:3.0289342488555721e-01:1.8851124391062859e+00:2.9347026589623099e-01:2.7505506101449679e+00:2.5394568370071763e-01:3.3028035964789693e+00:3.9446383340912561e-01:3.9836026369315425e+00 + CVs 20 + -2.7930105431636304e-01 2.4507703239724538e-01 5.9042993224397919e-02 + -5.3048893730577684e-01 4.7979985896229749e-01 1.3832627723946073e-01 + -7.5026207815409596e-01 7.1740210972722451e-01 2.5210885773751246e-01 + -9.5660039417625065e-01 9.5736999189334249e-01 3.7486730056999190e-01 + -1.1802992836966690e+00 1.1854831680783988e+00 4.5373261374173279e-01 + -1.4360528570966828e+00 1.3813735489778010e+00 4.6080738906652541e-01 + -1.7260521784786613e+00 1.5314295394830564e+00 3.9478112058059622e-01 + -2.0509898380653881e+00 1.6211020460225043e+00 2.3735513227883986e-01 + -2.3642173976242988e+00 1.6240956275083471e+00 -3.4204452918807027e-02 + -2.5825416599699551e+00 1.5403793208041980e+00 -3.7630190554062826e-01 + -2.6923002891516647e+00 1.4078489737661097e+00 -7.3084029522522731e-01 + -2.7185502178578478e+00 1.2510870139641961e+00 -1.0867013511520469e+00 + -2.6715485559545686e+00 1.0837020699957192e+00 -1.4015886979160923e+00 + -2.5834465581002464e+00 9.5482183695526079e-01 -1.5683479394732247e+00 + -2.4846067774458773e+00 8.8991975025410630e-01 -1.5239211694605466e+00 + -2.3420455473660344e+00 7.7115274880408879e-01 -1.2793010597350074e+00 + -2.0944857102330663e+00 3.7362159230180425e-01 -9.6359634460603127e-01 + -1.8471847212227108e+00 -1.3548234190439756e-01 -9.5517656767517045e-01 + -1.8876680299277431e+00 -5.2195481985419151e-02 -1.1117492724214222e+00 + id 11436 + loc 7.4074518680572510e-01 6.6888356208801270e-01 1053 + blend 0.0000000000000000e+00 + interp 4.7665970455441625e-01:4.2295723116351164e-01:4.0124924012606700e-03:4.3860668135172681e-01:8.6671439004281836e-01:4.7665493795737074e-01:1.2508966375039701e+00:3.8784093435016254e-01:1.9998617519305857e+00:3.5786996069132410e-01:2.7549450722247801e+00:2.8305631301704659e-01:3.5319779777454356e+00 + CVs 20 + -3.7728462033685933e-02 4.2041665820068397e-01 2.4358029052506111e-01 + -1.3768129762111608e-01 7.8854863126553254e-01 4.6301838653316707e-01 + -2.7502890474845576e-01 1.1191115249484513e+00 6.7604716267635867e-01 + -4.4172883537296848e-01 1.4099658950406617e+00 8.8638748877854978e-01 + -6.3585815238809240e-01 1.6458673313440948e+00 1.0849890141912091e+00 + -8.4359212999136080e-01 1.8130074250794601e+00 1.2593406698736116e+00 + -1.0376438757152906e+00 1.9054232416037049e+00 1.3964811961237451e+00 + -1.1862779145194984e+00 1.9364788323207840e+00 1.4909981296820143e+00 + -1.2785706893390674e+00 1.9392263470698703e+00 1.5526743088534158e+00 + -1.3326556800108538e+00 1.9459053771255457e+00 1.5985027072328433e+00 + -1.3839812923892312e+00 1.9602187794362844e+00 1.6368379125446579e+00 + -1.4537762843847242e+00 1.9436245628011890e+00 1.6513621414003827e+00 + -1.5197775002710256e+00 1.8602196114656790e+00 1.6235982207565036e+00 + -1.5314069040531866e+00 1.6855363168241813e+00 1.5444741053364348e+00 + -1.4648618324503950e+00 1.4336143787922395e+00 1.4040702451443989e+00 + -1.3744844102722660e+00 1.1705000112786250e+00 1.2100274404727807e+00 + -1.3244464131943889e+00 9.5745514796233389e-01 1.0026088473636250e+00 + -1.3319187446293677e+00 8.3926412934930061e-01 7.7249654139516366e-01 + -1.4258689634792401e+00 1.0077149478990306e+00 3.5224045607809706e-01 + id 11437 + loc 5.3091555833816528e-01 3.0945378541946411e-01 410 + blend 0.0000000000000000e+00 + interp 4.7369714143406411e-01:4.1770979549792780e-01:4.1630844665188182e-02:4.5615770532856026e-01:6.6464117968339720e-01:3.9411149340287244e-01:1.0014684849043638e+00:4.0435506289442613e-01:1.9345145837959679e+00:3.4138971333679979e-01:2.5721827805262842e+00:4.0903881183642277e-01:3.1170738011818822e+00:4.7369240446264976e-01:3.7254715852981937e+00 + CVs 20 + -3.6811229622560765e-01 1.8083834990350683e-01 1.2527511498623939e-01 + -6.9689345019072768e-01 3.4956303691966406e-01 2.6993115119006206e-01 + -1.0301567249209898e+00 5.4678276691983851e-01 4.1479049560074621e-01 + -1.3697236018847674e+00 7.7418421764300471e-01 5.5211094270718652e-01 + -1.6935855951275562e+00 1.0052396522559848e+00 6.9491549576384726e-01 + -1.9915889549550743e+00 1.2037411230863568e+00 8.5472049969038399e-01 + -2.2777433574585189e+00 1.3371265607917964e+00 1.0568527406345756e+00 + -2.5711925035187937e+00 1.3846945123530605e+00 1.3431304835334061e+00 + -2.8758217093177048e+00 1.3288677466315968e+00 1.7244011736245921e+00 + -3.1876798103559354e+00 1.1414968674593622e+00 2.1629777381793271e+00 + -3.4918633506929284e+00 8.0495691301098016e-01 2.6033624987287265e+00 + -3.7629929655269807e+00 3.8096169275810454e-01 3.0352367195472110e+00 + -3.9839902013735520e+00 -1.0439516963853812e-03 3.5044676898183651e+00 + -4.1425636195940569e+00 -2.2839910813631792e-01 4.0242748487205908e+00 + -4.2336906191301038e+00 -2.7447967054281097e-01 4.5458497462390888e+00 + -4.2904875661119783e+00 -2.3960648680310626e-01 5.0454834659234589e+00 + -4.3841953706188628e+00 -2.5619535241626301e-01 5.5710562330858373e+00 + -4.5556187206873275e+00 -3.5983651905563963e-01 6.1148140646661373e+00 + -4.7419135649367430e+00 -5.0587734998333445e-01 6.5734962517195887e+00 + id 11438 + loc 6.7932689189910889e-01 9.3387842178344727e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8395423924188880e-01:4.8394939969949641e-01:5.4107588931930906e-03:3.1023821485003805e-01:9.1028171245767209e-01:3.7919168650436741e-01:1.2900325057992834e+00:3.8723145729261993e-01:1.9565456017882672e+00:3.0626292980275988e-01:3.0002781301690269e+00:3.5858411230047688e-01:3.6131582676319565e+00 + CVs 20 + 3.0982909293846606e-01 2.6883807792063324e-01 -2.2624376808694835e-01 + 6.1278716357061802e-01 5.5006050295202447e-01 -4.0468455595300667e-01 + 9.0908640488876602e-01 8.2430304572111979e-01 -5.6824233406190972e-01 + 1.2007931787710329e+00 1.0824366712643252e+00 -7.3439369342820904e-01 + 1.4867855705266393e+00 1.3144228157487989e+00 -9.1931828295567586e-01 + 1.7640389996344903e+00 1.5103727839805514e+00 -1.1443364826009692e+00 + 2.0294155615629430e+00 1.6640674896992793e+00 -1.4230713520887899e+00 + 2.2806206790976189e+00 1.7739636022448870e+00 -1.7545737338396521e+00 + 2.5182009634395248e+00 1.8428348873485687e+00 -2.1261150176710739e+00 + 2.7467436902341684e+00 1.8756323612770596e+00 -2.5205527218275199e+00 + 2.9711529148141946e+00 1.8740553581769543e+00 -2.9247895995815369e+00 + 3.1930218079031825e+00 1.8329046784883158e+00 -3.3355072843100264e+00 + 3.4070949430188380e+00 1.7411525413750149e+00 -3.7575548650046002e+00 + 3.5970219690824372e+00 1.5908297892410252e+00 -4.1950881203683972e+00 + 3.7357897954382651e+00 1.3838339424872483e+00 -4.6460862143456891e+00 + 3.7918910235736707e+00 1.1365829481700287e+00 -5.1026246475460928e+00 + 3.7399782189451982e+00 8.7632116643101754e-01 -5.5538852072883635e+00 + 3.5880085513393261e+00 6.5955366121165682e-01 -5.9586080683300509e+00 + 3.4635421440916621e+00 6.3703826973471589e-01 -6.1602847502278211e+00 + id 11439 + loc 6.5369480848312378e-01 4.2864727973937988e-01 1047 + blend 0.0000000000000000e+00 + interp 2.8575656819183370e+00:3.7202225635186587e-01:3.6773539159934643e-01:6.5278085569593891e-01:4.3266890867502539e-01:9.0299165714021945e-01:4.3661018454716494e-01:2.8575556819183370e+00:2.2653809750538993e+00:9.0007242836140400e-01:2.2931668507829635e+00:4.1377669555682034e-01:2.4093517128931730e+00:3.1862101587725433e-01:2.9958201970234475e+00:3.7762886057217615e-01:3.6903834890172162e+00 + CVs 20 + -1.8167157282670748e-01 6.7064201395171841e-01 5.5715415221240572e-01 + -4.1466924424080509e-01 1.3307737705036238e+00 1.0855782530782954e+00 + -7.0709579873389916e-01 2.0026375395827030e+00 1.5629575144034575e+00 + -1.0982075631431409e+00 2.6611736963358172e+00 1.8535826691238664e+00 + -1.5910771215026140e+00 3.2083797835645775e+00 1.8066825332473477e+00 + -2.0968860271712124e+00 3.5297870223911518e+00 1.4335612964572904e+00 + -2.5069356065818846e+00 3.5679817786243837e+00 8.6737473058640280e-01 + -2.7641971569672488e+00 3.3462252704153981e+00 2.4780353491126816e-01 + -2.8581193236156417e+00 2.9378241287469420e+00 -3.1602441779170598e-01 + -2.8071383153051639e+00 2.4308010765688457e+00 -7.6706153253806786e-01 + -2.6351077451228107e+00 1.8768550904230390e+00 -1.1202877120627233e+00 + -2.3526712455855670e+00 1.2889990017895929e+00 -1.4216215717697758e+00 + -1.9731602858960633e+00 7.0660193249255887e-01 -1.7171762150680310e+00 + -1.5210606182837947e+00 1.7489127036317786e-01 -2.0597302161154896e+00 + -1.0467165666711422e+00 -2.8022914138960697e-01 -2.5548799695364921e+00 + -7.4589200984581594e-01 -4.6002759262739712e-01 -3.2923946281226755e+00 + -7.5984479779908942e-01 -2.2220348927109113e-01 -4.0452825272989186e+00 + -1.0175267069013010e+00 3.3725509661097064e-01 -4.5893362705539644e+00 + -1.4074466117046804e+00 1.0714620097716034e+00 -4.9090158768770138e+00 + id 11440 + loc 6.7712819576263428e-01 9.0704642236232758e-02 1074 + blend 0.0000000000000000e+00 + interp 5.6454889497288507e-01:2.7350926856575036e-01:8.6677074649078756e-01:5.6454324948393542e-01:1.8036179116089186e+00:5.4033034637643462e-01:2.3503175218213217e+00:3.7329999485963439e-01:2.8462480745023475e+00:2.6860465705305969e-01:3.2573798524323418e+00:3.5532587941917848e-01:3.9821588704145898e+00 + CVs 20 + -2.1096835990397442e-01 1.2310067282586840e-01 2.6886516990786441e-01 + -3.8683404058566756e-01 2.7060725473364616e-01 5.2355205607203747e-01 + -5.5154873913667091e-01 4.3158190646123090e-01 7.7965420531819618e-01 + -7.1544557887930593e-01 6.0209054206324208e-01 1.0452223198529440e+00 + -8.7227790295707830e-01 7.8157470020229503e-01 1.3172679858474747e+00 + -1.0148269421486791e+00 9.6861352903362263e-01 1.5965079998970959e+00 + -1.1363667587268078e+00 1.1621655501776800e+00 1.8882075500140783e+00 + -1.2325109811835184e+00 1.3607145375507324e+00 2.1961161351382890e+00 + -1.3040032648356259e+00 1.5603098817851215e+00 2.5214193131148162e+00 + -1.3607633702787707e+00 1.7523699674330366e+00 2.8643985063938509e+00 + -1.4166443209802089e+00 1.9242485753689031e+00 3.2273331651358079e+00 + -1.4842389559522200e+00 2.0584428466933571e+00 3.6120133061967148e+00 + -1.5704079947874907e+00 2.1352742641884030e+00 4.0144155432860931e+00 + -1.6744717314759803e+00 2.1361637799177382e+00 4.4218742156791517e+00 + -1.7972024507876481e+00 2.0557690181410027e+00 4.8088534149504349e+00 + -1.9527693136458313e+00 1.9119024997314100e+00 5.1443406164876517e+00 + -2.1517042322423858e+00 1.7200116900348572e+00 5.4188281825893503e+00 + -2.3410683862664921e+00 1.4629360187671463e+00 5.6442154882578937e+00 + -2.3393628897926484e+00 1.1625313830904416e+00 5.7609975831078586e+00 + id 11441 + loc 2.6500526070594788e-01 1.5099683403968811e-01 1077 + blend 0.0000000000000000e+00 + interp 3.7072862426706221e-01:3.1057695468009378e-01:4.8029544316753803e-01:3.1351328113353744e-01:1.0053276931278028e+00:2.6731965041221600e-01:1.7040228970095728e+00:3.1294112139320718e-01:2.2928757778323430e+00:2.7581196285844023e-01:3.0303346994190465e+00:3.7072491698081955e-01:3.6503333758747525e+00 + CVs 20 + -1.3772841966121716e-01 2.6894164635557782e-01 4.8926626510218250e-02 + -2.6916779191110413e-01 5.3277522440841030e-01 8.8619220752220479e-02 + -3.9594077217759893e-01 7.9376141273683287e-01 1.1420446083295221e-01 + -5.2162132701233943e-01 1.0545976524741780e+00 1.2219355646249924e-01 + -6.5565279321689962e-01 1.3177574524326277e+00 1.0796880246496648e-01 + -8.1080848767238001e-01 1.5833023671263149e+00 6.3976520718349472e-02 + -1.0000150149595022e+00 1.8427247390299035e+00 -2.0436549777253177e-02 + -1.2298866362903289e+00 2.0770418740873264e+00 -1.5642494824232789e-01 + -1.4937174245996943e+00 2.2627944890306591e+00 -3.5210203635160808e-01 + -1.7720911388096903e+00 2.3777440305215509e+00 -6.0959023083356390e-01 + -2.0486233263698335e+00 2.4069779686989499e+00 -9.1906881542369590e-01 + -2.3241120178520687e+00 2.3437948972770641e+00 -1.2595673921659691e+00 + -2.6060619633062085e+00 2.1825417880719682e+00 -1.6051283516002921e+00 + -2.8966971301588385e+00 1.9170599260104750e+00 -1.9216692133390161e+00 + -3.1973428745264960e+00 1.5536889274611965e+00 -2.1584251616874743e+00 + -3.5008880339192801e+00 1.1445143245175631e+00 -2.2394602699794501e+00 + -3.7887555939715076e+00 8.0198498057040157e-01 -2.1386030743624054e+00 + -4.0673496208893773e+00 6.2335161360495417e-01 -1.9258317847601965e+00 + -4.4485428332617509e+00 5.0064671619506229e-01 -1.5770496670500378e+00 + id 11442 + loc 2.7349737938493490e-03 2.0335884392261505e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2551572966867007e-01:2.8321461800772602e-01:4.1621427567305891e-01:4.2305888260104474e-01:9.9733601662631888e-01:4.2551147451137339e-01:1.4721794496998930e+00:3.1516880221523558e-01:2.1713887711573459e+00:2.0232787691713139e-01:2.9904911176475988e+00:3.2783224852498205e-01:3.3107891323366156e+00:4.0849509996913957e-01:3.9448209076733622e+00 + CVs 20 + -1.3167359741918513e-01 2.7286194498796901e-01 -2.2244290189227203e-02 + -2.9476321846768205e-01 5.9620451559077847e-01 -3.7428192956905360e-03 + -4.6379761103406369e-01 9.5724625689610221e-01 3.9361225474840111e-02 + -6.4446171320251933e-01 1.3428280356892224e+00 8.6234705504510845e-02 + -8.6270088465478389e-01 1.7418423277721233e+00 1.1161660366306425e-01 + -1.1370149627465456e+00 2.1348335217226664e+00 8.2331030159434881e-02 + -1.4749603833098770e+00 2.4888474733815427e+00 -5.2668767721683940e-02 + -1.8569973147558885e+00 2.7341207809566463e+00 -3.6591348786655775e-01 + -2.1968082999699923e+00 2.7704645821852312e+00 -8.5690009938286948e-01 + -2.4245941652130947e+00 2.5979984703236698e+00 -1.3994734902251995e+00 + -2.5625454453239715e+00 2.2628411143883662e+00 -1.9081049739097289e+00 + -2.6479294201444499e+00 1.7641597218718479e+00 -2.3072076799618895e+00 + -2.6944880037383703e+00 1.1459431990655558e+00 -2.5298647543563932e+00 + -2.6678245393540490e+00 5.1932889584153830e-01 -2.6813932893837507e+00 + -2.5326274358103009e+00 -2.7954714924044666e-02 -2.9524897111079653e+00 + -2.3345516784581060e+00 -3.6371838053183159e-01 -3.4233146022268617e+00 + -2.1927301507051209e+00 -3.7879119768671554e-01 -4.0073744562415978e+00 + -2.1612317975643944e+00 -2.2793698520492733e-01 -4.5262749926283155e+00 + -2.1264532698882230e+00 -3.3895550121228801e-01 -4.9717927891527554e+00 + id 11443 + loc 8.0322653055191040e-01 7.6707571744918823e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0254884815102282e-01:3.6054172612427066e-01:2.8920851161286143e-01:2.5894685977040788e-01:9.7961807742113161e-01:3.9214085400705956e-01:1.9782975970162056e+00:4.0254482266254132e-01:2.5921719159148884e+00:3.8600289255393838e-01:3.1205939228725885e+00:3.9846499112934125e-01:3.8588610071731817e+00 + CVs 20 + -2.8799941305236398e-01 2.0897705844275935e-01 1.1369117963494155e-01 + -5.4455164224674657e-01 3.9288084253559397e-01 2.1255341055385241e-01 + -7.7106264735141405e-01 5.7738429577068051e-01 3.3222379083835241e-01 + -9.7251280174795818e-01 7.6983521936610333e-01 4.7723790767982976e-01 + -1.1744288794036368e+00 9.6370168689874813e-01 6.0136877675070644e-01 + -1.4034305068934037e+00 1.1426680667147358e+00 6.5818765818901059e-01 + -1.6659130593878542e+00 1.2832439385555887e+00 6.3751009252837265e-01 + -1.9588641561153031e+00 1.3624506535303860e+00 5.3497868005789617e-01 + -2.2404464404933093e+00 1.3551316727651785e+00 3.3478330148623048e-01 + -2.4215336672141303e+00 1.2521928316295605e+00 6.0033130580885663e-02 + -2.4626766599247127e+00 1.0828279001390533e+00 -2.1996583980035345e-01 + -2.3931189781649458e+00 8.8572505876897378e-01 -4.4810871582889955e-01 + -2.2499382946800854e+00 6.8496560256837591e-01 -5.8595107830080451e-01 + -2.0401613432098529e+00 4.5945427171040470e-01 -6.5011950882389968e-01 + -1.7545111905059805e+00 1.5671593743302614e-01 -7.3393567443533458e-01 + -1.4359271944286531e+00 -2.1933419409515792e-01 -9.9249088643819672e-01 + -1.1857107676030623e+00 -5.2156945450730308e-01 -1.5935055913770690e+00 + -1.1564159409790662e+00 -4.2374285659247291e-01 -2.4332374838804443e+00 + -1.0778439071622681e+00 -3.7497824080541919e-01 -2.8051660338594027e+00 + id 11444 + loc 3.6167910695075989e-01 7.1477693319320679e-01 410 + blend 0.0000000000000000e+00 + interp 4.3063273414973374e-01:3.9127881791741492e-01:8.2060294868939843e-02:3.3745558119819868e-01:9.5279353713177406e-01:4.2817046021760247e-01:1.2521756867443838e+00:3.6473685791450700e-01:1.8580298921211613e+00:3.5529153930448720e-01:2.2478877060753839e+00:3.4555129793214551e-01:3.0182435927780431e+00:4.3062842782239225e-01:3.6730007728389769e+00 + CVs 20 + 3.4386448624072330e-01 1.3806776319788627e-01 -1.5146737177872394e-01 + 6.2573600034611965e-01 2.4443691824158181e-01 -2.9065580925397094e-01 + 8.9562526123267205e-01 3.4100231548618321e-01 -4.2331821039386242e-01 + 1.1803933339272890e+00 4.4162031348338443e-01 -5.5277046245948602e-01 + 1.4773869102625308e+00 5.4540150586170277e-01 -6.7749483554376710e-01 + 1.7834554346132179e+00 6.5129899629938404e-01 -7.9319190518482496e-01 + 2.0959512850535251e+00 7.5851177776907386e-01 -8.9094636846846698e-01 + 2.4123945385916006e+00 8.6580893531787728e-01 -9.6019011020592870e-01 + 2.7292423830471408e+00 9.7162797529763945e-01 -9.9223583948089944e-01 + 3.0403962695589746e+00 1.0755219180153532e+00 -9.8153046925631182e-01 + 3.3411126100146791e+00 1.1771988670014548e+00 -9.2879327081059848e-01 + 3.6448172978746545e+00 1.2685499829201272e+00 -8.4732197129667319e-01 + 3.9854065122862137e+00 1.3277815825531347e+00 -7.6466629438319822e-01 + 4.3745485269349720e+00 1.3342596987278221e+00 -7.1582445105016035e-01 + 4.7880411724181702e+00 1.2883556351207590e+00 -7.2403250009525599e-01 + 5.1997951759096601e+00 1.2024790017863258e+00 -7.9601051602996642e-01 + 5.5878581253885784e+00 1.0923271822262373e+00 -9.3456664591827443e-01 + 5.9310778630233045e+00 9.8035432582010262e-01 -1.1333492057559371e+00 + 6.2084359230387562e+00 9.5976578245421651e-01 -1.2696685688551759e+00 + id 11445 + loc 1.3273607194423676e-01 1.7223073542118073e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0484358516066377e-01:2.8483763951890140e-01:2.7013132435204557e-01:4.0483953672481215e-01:1.2057752760623406e+00:2.5464735907413466e-01:1.9852440731762619e+00:3.9976980857111005e-01:2.3339426035812991e+00:3.0206145412538726e-01:3.0768261448869243e+00 + CVs 20 + -1.5377707658665879e-01 4.7329187671874640e-01 -1.6292936749863252e-01 + -3.1324069596346399e-01 9.6151871886651086e-01 -3.0104303608220101e-01 + -4.5638150934378624e-01 1.4615364003598132e+00 -3.8570810441939596e-01 + -5.5004653783616242e-01 1.9581451809850359e+00 -3.9954668925738152e-01 + -6.2596177968323929e-01 2.4480537572435916e+00 -3.5498465909263666e-01 + -8.1829989435303740e-01 2.9279721763281228e+00 -2.9921773539264818e-01 + -1.2251955553696317e+00 3.2817937895742966e+00 -3.0853183742416490e-01 + -1.7185957310094864e+00 3.4016260852604301e+00 -4.1344576345524819e-01 + -2.1612815446714007e+00 3.3288968465032247e+00 -5.9615954150239603e-01 + -2.4914659916076536e+00 3.1465687243792635e+00 -8.3123319754546920e-01 + -2.7192007336562161e+00 2.9241041029676613e+00 -1.0929782230762615e+00 + -2.8906561740135888e+00 2.6764966221984907e+00 -1.3671576819546711e+00 + -3.0358488472818856e+00 2.3882614074040442e+00 -1.6453231506596699e+00 + -3.1524099629511060e+00 2.0359806462633494e+00 -1.9101571534947921e+00 + -3.2220043288652169e+00 1.6130713302542405e+00 -2.1211649852753482e+00 + -3.2121195861171756e+00 1.1239937813596894e+00 -2.2481823329703410e+00 + -3.0206702619620547e+00 5.5143532634192882e-01 -2.2389711575444622e+00 + -2.6411556608846505e+00 5.3747126782642096e-02 -1.9924428096075482e+00 + -2.4572059063386908e+00 -2.5062672887417159e-01 -1.7989570007199032e+00 + id 11446 + loc 7.3987245559692383e-01 8.6400920152664185e-01 1047 + blend 0.0000000000000000e+00 + interp 4.5542874005172751e-01:3.4869896273873430e-01:2.3042617215418559e-05:2.6713506815264121e-01:6.3630252914657159e-01:4.3062595716556828e-01:1.0100625370424638e+00:4.5542418576432703e-01:1.7812273666250797e+00:3.7101848033132517e-01:2.6721784905621146e+00:3.6182808138288247e-01:2.9855414485131853e+00:2.4589171059688655e-01:3.3589006961854087e+00 + CVs 20 + 2.4999051454355953e-01 7.2868745868561968e-01 -5.8925351036523110e-01 + 5.1460091675707154e-01 1.4149627098483863e+00 -1.1265033759141643e+00 + 8.1576916371702735e-01 2.0963775576638786e+00 -1.5966211360657894e+00 + 1.1990492764047358e+00 2.7718381731667456e+00 -1.8817811474135031e+00 + 1.6706398503342339e+00 3.3677118570579871e+00 -1.8428704964823321e+00 + 2.1516787688471455e+00 3.7892864727286275e+00 -1.4788266898336904e+00 + 2.5518565365062225e+00 3.9820157056553969e+00 -8.9176562302510320e-01 + 2.8264755842051232e+00 3.9517161363202526e+00 -2.0429297741157870e-01 + 2.9829589588354755e+00 3.7375437918670649e+00 5.0061567871192847e-01 + 3.0463562195398461e+00 3.3726551616387801e+00 1.1741424743101545e+00 + 3.0461736746954653e+00 2.8904850791613725e+00 1.7740114232172672e+00 + 3.0186116796918196e+00 2.3463210924999229e+00 2.2582470654411351e+00 + 2.9812511662765284e+00 1.8123241928187492e+00 2.6124305877718466e+00 + 2.9230900757128846e+00 1.3911121053283289e+00 2.7897248887580322e+00 + 2.8322168159516257e+00 1.1056571465092153e+00 2.5821778916452174e+00 + 2.5607567623253651e+00 7.0999632796003376e-01 2.1960911688623059e+00 + 2.2740298225050961e+00 4.0686273756814995e-01 2.2361884538452248e+00 + 2.2082750348322033e+00 5.2840036003493185e-01 2.5386274019900359e+00 + 2.4819029052008452e+00 1.2970126076149739e+00 2.8734397808014807e+00 + id 11447 + loc 2.1360166370868683e-01 7.3328673839569092e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5862369312014406e-01:2.9334840018752645e-01:2.9295296566567597e-02:3.3969141171471579e-01:1.0207861354109813e+00:2.6349352763814149e-01:1.8229786084833315e+00:2.5228946537373381e-01:2.6268936468638500e+00:3.8460397170420368e-01:3.0019032913045254e+00:4.5861910688321289e-01:3.8208258468362137e+00 + CVs 20 + 2.0599073838057591e-01 3.2621646277005389e-01 -3.5553546975051198e-02 + 4.3726611280332617e-01 6.4716877316013122e-01 -8.7585783035504072e-02 + 6.8030772521282157e-01 9.6343621900930643e-01 -1.5106907020625476e-01 + 9.2907727008499064e-01 1.2687740890773214e+00 -2.3375156025438593e-01 + 1.1816727152944240e+00 1.5517667422299182e+00 -3.4845934736427009e-01 + 1.4354583313739315e+00 1.7984814453870521e+00 -5.0427035937513054e-01 + 1.6845080681814246e+00 1.9951001875959360e+00 -7.0568930222525461e-01 + 1.9180371583101825e+00 2.1303139383746972e+00 -9.5121894752928782e-01 + 2.1242275604283285e+00 2.1958355250353980e+00 -1.2302009252916495e+00 + 2.2967037928323784e+00 2.1900032117702164e+00 -1.5231905228617375e+00 + 2.4352467668774214e+00 2.1185383125790338e+00 -1.8126665411782454e+00 + 2.5400222742629492e+00 1.9902465921153076e+00 -2.0907807760644568e+00 + 2.6060913977113001e+00 1.8172216514619017e+00 -2.3582085077589792e+00 + 2.6209346506985183e+00 1.6163725027903035e+00 -2.6215397151086961e+00 + 2.5692514671768176e+00 1.4079839662094553e+00 -2.8807398122596610e+00 + 2.4450694998754590e+00 1.2172774529893666e+00 -3.1239542251239238e+00 + 2.2612872449607648e+00 1.0694114316170462e+00 -3.3348509569606377e+00 + 2.0513837290106203e+00 9.8098514901648781e-01 -3.4990595474039292e+00 + 1.8386557755161466e+00 9.7177983065310003e-01 -3.6024516372231981e+00 + id 11448 + loc 3.5135617852210999e-01 9.5858365297317505e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4765271495378423e-01:3.8605554071727960e-01:3.0202807126101827e-01:4.2974631816294451e-01:8.7427712008012382e-01:3.5705275616042015e-01:1.6939704812820060e+00:3.0374963448756764e-01:2.3095347667166184e+00:3.6690336154946052e-01:2.8652735011374570e+00:4.4764823842663470e-01:3.3947066993454502e+00:3.5733241780717923e-01:3.9781692875398837e+00 + CVs 20 + 1.0166958576205325e-01 3.8769674679642413e-01 -4.0031623512488318e-02 + 2.3015052824294185e-01 7.7238817317256514e-01 -1.1664571044017602e-01 + 3.7562416164040185e-01 1.1599650816563019e+00 -2.2250059979802345e-01 + 5.2902609339170914e-01 1.5501381915122034e+00 -3.6787326639232387e-01 + 6.8442934543350065e-01 1.9321406527111542e+00 -5.6991685082612187e-01 + 8.4856403235521149e-01 2.2886918422854006e+00 -8.3277585091352291e-01 + 1.0405750820108000e+00 2.6002447007902547e+00 -1.1471695944025875e+00 + 1.2759271697735755e+00 2.8485214867477611e+00 -1.4983650331414027e+00 + 1.5607396677888963e+00 3.0133659546619493e+00 -1.8747727022796785e+00 + 1.8913014263372578e+00 3.0634328894038698e+00 -2.2668582978448524e+00 + 2.2426628034997540e+00 2.9509521957529978e+00 -2.6568162638779134e+00 + 2.5466191362821129e+00 2.6236167558597616e+00 -3.0059565840563409e+00 + 2.6888761058624815e+00 2.1157233475874424e+00 -3.2454434606657996e+00 + 2.6358809842013828e+00 1.5839536979963071e+00 -3.3518223634509057e+00 + 2.4361565133310861e+00 1.1153606260665829e+00 -3.3650754011233897e+00 + 2.0995960996460052e+00 7.6706623834276044e-01 -3.3162677614851326e+00 + 1.6818918270720427e+00 6.9555313573678312e-01 -3.2419967383717676e+00 + 1.4145082552374733e+00 8.6873762905319041e-01 -3.1995845348719607e+00 + 1.1306150865921660e+00 1.0107617474074777e+00 -3.1506123008014546e+00 + id 11449 + loc 9.7340470552444458e-01 4.0270528197288513e-01 1086 + blend 0.0000000000000000e+00 + interp 2.2424138191231902e+00:3.1615607158476838e-01:7.5760451486663549e-02:3.5385768129703932e-01:9.5462403845004362e-01:5.2748084395264072e-01:1.1185206475771667e+00:5.8352546622479329e-01:1.5635214294283810e+00:1.0504819667567740e+00:1.8621786847573405e+00:1.9303151886814580e+00:1.9788973950197541e+00:2.2424038191231901e+00:1.9844667531385483e+00:3.1657375994553233e-01:3.8623270320999548e+00:1.2713892803377571e+00:3.9934282626183961e+00 + CVs 20 + 3.3232606349797505e-01 4.0289452529179881e-01 -5.7530689959404702e-01 + 6.1254974500081794e-01 7.1225311451431450e-01 -1.0425920716020127e+00 + 8.6539442354192908e-01 9.8908349263900719e-01 -1.4946226764754500e+00 + 1.1257247665196835e+00 1.2686159282679639e+00 -1.9610474052692364e+00 + 1.4320213912373967e+00 1.5519842116461176e+00 -2.4112924481344704e+00 + 1.8177965182527105e+00 1.8310871363336148e+00 -2.8033566578185360e+00 + 2.2984139526129233e+00 2.0893811358886434e+00 -3.0858351340041339e+00 + 2.8686292678895873e+00 2.3019558780665701e+00 -3.1943324437496412e+00 + 3.4775285708727544e+00 2.4217518541187744e+00 -3.0544895603250595e+00 + 3.9848562445201186e+00 2.3861266799769152e+00 -2.6775197064097371e+00 + 4.2813011775301151e+00 2.1854147606672845e+00 -2.2401264632384974e+00 + 4.3977471916198407e+00 1.8787761772151441e+00 -1.9356416642036551e+00 + 4.4191022679705130e+00 1.5638742930665686e+00 -1.8075771498351736e+00 + 4.3838116556199225e+00 1.2456607370919572e+00 -1.7228837777530392e+00 + 4.2716275075076853e+00 8.6505120214688958e-01 -1.5914482176345066e+00 + 4.0695740017439128e+00 4.6413610846812803e-01 -1.3974499160078384e+00 + 3.8005515291030170e+00 1.2418812890871878e-01 -1.1329946699261817e+00 + 3.5048474914794681e+00 -9.9275512149608724e-02 -8.1095292601251245e-01 + 3.2996928331242010e+00 -1.4082337173572473e-01 -6.7225024881422013e-01 + id 11450 + loc 8.6573582887649536e-01 9.4597667455673218e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0712741752317347e-01:3.8059733070507185e-01:1.4469573840124961e-01:4.9079917989231997e-01:9.3408008887903449e-01:4.4452718241345424e-01:1.7045745408174684e+00:5.0712234624899821e-01:2.0968379667685011e+00:4.3760324958491875e-01:2.5999042905514962e+00:3.4533495361886896e-01:2.9120401281635475e+00:3.2665928639165903e-01:3.3456463013071560e+00 + CVs 20 + 7.8328491102722261e-02 2.6377387584623996e-01 -1.6664260930726435e-01 + 1.8424913077245059e-01 5.1129660789843201e-01 -3.2857869033474291e-01 + 3.0050971641690416e-01 7.4665462024647200e-01 -4.8483838692588110e-01 + 4.2188362728439782e-01 9.7347953777146845e-01 -6.3841722685886559e-01 + 5.5157880044529117e-01 1.1950168957034832e+00 -7.9440199167796544e-01 + 6.9028306718263766e-01 1.4174631395220403e+00 -9.6016360536952239e-01 + 8.3341239404904921e-01 1.6476543848627414e+00 -1.1463411753814805e+00 + 9.7396638862878726e-01 1.8858585711386258e+00 -1.3668400453923308e+00 + 1.1061616898766267e+00 2.1196023063342286e+00 -1.6385579628900000e+00 + 1.2240013801208987e+00 2.3244085233300655e+00 -1.9732796363358025e+00 + 1.3220586298635388e+00 2.4682107005204039e+00 -2.3653578450327126e+00 + 1.4023603853302071e+00 2.5248224498321750e+00 -2.7888183624915923e+00 + 1.4769118651478430e+00 2.4906804557351121e+00 -3.2111523613760244e+00 + 1.5612922332511052e+00 2.3793021068616502e+00 -3.6068766545897377e+00 + 1.6705166545151120e+00 2.2045913939204560e+00 -3.9641465218287228e+00 + 1.8187460450999882e+00 1.9638322912785902e+00 -4.2795482716793831e+00 + 2.0112875587185077e+00 1.6448822057513697e+00 -4.5319292710188321e+00 + 2.2363526957629709e+00 1.2574862282573751e+00 -4.6934280195005309e+00 + 2.4786612407702746e+00 8.0029019606945262e-01 -4.7964130206256685e+00 + id 11451 + loc 5.8535295724868774e-01 4.2902949452400208e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0348319310217970e-01:3.4919703091841509e-01:6.9522390466106188e-01:5.0347815827024867e-01:1.0889360951370879e+00:3.7392378005353183e-01:1.9292638684528183e+00:4.4321910912575357e-01:2.4076283317268854e+00:3.4274539512835184e-01:2.9997852042900091e+00:3.2511593769350983e-01:3.7833151894543198e+00 + CVs 20 + 4.1015705392914448e-01 3.1937673644213904e-01 -2.0175978276788470e-01 + 7.3577847294447551e-01 5.9647713230185229e-01 -3.7021350041859613e-01 + 1.0113519365034800e+00 8.5745669701024774e-01 -5.4342958022740151e-01 + 1.2809911217018024e+00 1.1171848531985087e+00 -7.0844447520350762e-01 + 1.5690562029626247e+00 1.3609896117228881e+00 -8.2111399161673493e-01 + 1.8754572386945210e+00 1.5628798118150504e+00 -8.6302744152469335e-01 + 2.1853224242878864e+00 1.7043054969427187e+00 -8.4369253924424492e-01 + 2.4899442384304775e+00 1.7818019064176531e+00 -7.7515642804089957e-01 + 2.7839630456443931e+00 1.7961513157123703e+00 -6.5625256380583719e-01 + 3.0381706367273975e+00 1.7461265187924295e+00 -4.8844377746361545e-01 + 3.2192194817867774e+00 1.6466195651357762e+00 -3.0109898909816524e-01 + 3.3375795571418494e+00 1.5272637767654680e+00 -1.1684633561521429e-01 + 3.4086773777542003e+00 1.4048128466144383e+00 5.5094487677235238e-02 + 3.4126953212758231e+00 1.2529381750600721e+00 1.6608327255169786e-01 + 3.3245972249345086e+00 1.0350599788994592e+00 1.5451378080445299e-01 + 3.1413628359687729e+00 7.0454394908294293e-01 7.5140301496355422e-02 + 2.8752698902034499e+00 1.9308917181782786e-01 1.0189959663355852e-01 + 2.6205933907883794e+00 -3.8548663608482026e-01 4.8569173563645907e-01 + 2.6391022105658619e+00 -4.1610851406459665e-01 7.1580074900072233e-01 + id 11452 + loc 6.1344081163406372e-01 4.3702763319015503e-01 1053 + blend 0.0000000000000000e+00 + interp 4.8775253636911958e-01:4.3040308772680796e-01:8.3273118363107879e-01:4.8774765884375593e-01:1.0645254424833404e+00:2.5106631451392830e-01:1.9327625111215485e+00:4.2194051466246618e-01:2.1710995704283365e+00:3.9291857735674890e-01:2.9710840848294202e+00:4.1939563128236446e-01:3.2579487673783127e+00:3.9640346048678321e-01:3.9986865334611186e+00 + CVs 20 + 6.0263935511254807e-02 4.0933068338613410e-01 -1.7771882439386094e-01 + 1.6068105975351518e-01 7.9146967612655550e-01 -3.3335893125731247e-01 + 2.9763582887126949e-01 1.1643187688858689e+00 -4.9148216052417026e-01 + 4.7323396486671937e-01 1.5316238006689531e+00 -6.6387331238315639e-01 + 6.9783469876915294e-01 1.8804523228563077e+00 -8.4670349868741546e-01 + 9.7997595613551969e-01 2.1919964817201683e+00 -1.0329151567403803e+00 + 1.3215745690078453e+00 2.4396928707179848e+00 -1.2108066334327461e+00 + 1.7121028310641782e+00 2.5985747183356067e+00 -1.3614700719958874e+00 + 2.1349032442444047e+00 2.6551673528144404e+00 -1.4611005686651337e+00 + 2.5700272182415174e+00 2.6016438408453073e+00 -1.4890918509609805e+00 + 2.9756376703090472e+00 2.4244638282821152e+00 -1.4269150163987703e+00 + 3.2799292677625078e+00 2.1301843818531201e+00 -1.2657310392745469e+00 + 3.4271273973120948e+00 1.7859904336530503e+00 -1.0399640696805290e+00 + 3.4336690074124085e+00 1.4969129186887316e+00 -8.1799347166397873e-01 + 3.3826257336557788e+00 1.3225847655951979e+00 -6.5982770639035704e-01 + 3.3523726199664443e+00 1.2451377443970899e+00 -6.2127360401447795e-01 + 3.3617393091204670e+00 1.1747274810050339e+00 -7.3711932300427530e-01 + 3.3665133067113109e+00 1.0682362475069722e+00 -8.3729188431710322e-01 + 3.3713307031974260e+00 1.2491872489399718e+00 -5.0906214265516714e-01 + id 11453 + loc 9.2057019472122192e-01 8.1589728593826294e-01 410 + blend 0.0000000000000000e+00 + interp 4.3518195518663932e-01:4.3020093391751135e-01:4.5493516614787177e-02:4.2719947793997137e-01:6.2925080046677029e-01:3.6642508165648308e-01:1.0030980695598046e+00:3.7080698335008122e-01:1.5509728758796100e+00:4.3517760336708750e-01:1.9937973846592052e+00:3.6556356999999257e-01:2.3860212806447687e+00:3.0864957857267106e-01:3.0402479591143399e+00:3.1415071987200233e-01:3.8292027759722647e+00 + CVs 20 + 5.7316517253469457e-01 2.4064378882955206e-01 -1.8311738972387992e-01 + 1.0375179469691105e+00 3.8077124116503891e-01 -3.4995560981383267e-01 + 1.4914844791685302e+00 4.7945347917967396e-01 -5.0928080968698886e-01 + 1.9506412804147857e+00 5.4460644417977100e-01 -6.6885916177104932e-01 + 2.3820239406725117e+00 5.6261758535302464e-01 -8.3641274114197128e-01 + 2.7599002059642221e+00 5.2953096762387997e-01 -1.0157713265784556e+00 + 3.0730228896934655e+00 4.5058524003938927e-01 -1.2098337537288333e+00 + 3.3203698835458066e+00 3.3215458341770998e-01 -1.4221958275050028e+00 + 3.5072356391045458e+00 1.7978542467823866e-01 -1.6438435938546119e+00 + 3.6440922998214882e+00 1.1301170946083516e-02 -1.8563261493434344e+00 + 3.7569824685494524e+00 -1.8998037699204162e-01 -2.0547633857497405e+00 + 3.8791431133092389e+00 -5.2624770628089723e-01 -2.2402365906026080e+00 + 4.0258835114615508e+00 -1.0550924832441768e+00 -2.4370294821552534e+00 + 4.2102211064417636e+00 -1.7259902553155222e+00 -2.7317288098039456e+00 + 4.4462400610543167e+00 -2.4167257760578558e+00 -3.2112504879812134e+00 + 4.7455259276566739e+00 -2.9970484207843411e+00 -3.8887353842527528e+00 + 5.1269281881728972e+00 -3.4360265297913140e+00 -4.6981234053511001e+00 + 5.6127014119085175e+00 -3.7770483362150911e+00 -5.5431275190327653e+00 + 6.1610469593639685e+00 -4.0537527768201009e+00 -6.3588818104476861e+00 + id 11454 + loc 9.9044507741928101e-01 3.5294759273529053e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3949065830697742e-01:4.1950072336713806e-01:3.9291139422151733e-01:4.3948626340039437e-01:9.9730458312720993e-01:3.5101808865311679e-01:1.6967506941600088e+00:3.1375285154851373e-01:2.0046856452176307e+00:4.3562890801388643e-01:2.5402760691522142e+00:3.7960661505733934e-01:3.1282425816144186e+00:3.5476540700077880e-01:3.9984974567196110e+00 + CVs 20 + -1.5946287801675449e-01 3.7288122527585715e-01 1.1658052263862828e-01 + -3.0736614668901352e-01 7.6071570861324855e-01 2.2319751058849546e-01 + -4.4206314478274800e-01 1.1619390314987068e+00 3.0618183775818314e-01 + -5.5413479116551123e-01 1.5681409206148347e+00 3.4490533905669613e-01 + -6.3670447643355810e-01 1.9858495518811869e+00 3.2950664451975392e-01 + -7.0300604920806453e-01 2.4531486064305970e+00 3.1201305344953278e-01 + -7.9501651275743601e-01 2.9574617543146315e+00 4.3227564880640490e-01 + -9.5285452968205731e-01 3.3548011588799245e+00 7.4167057882759091e-01 + -1.1773304759920751e+00 3.5646240478694904e+00 1.1254085493476711e+00 + -1.4414693087853858e+00 3.6158366573154401e+00 1.4560549208946498e+00 + -1.7115345405503624e+00 3.5814456702781960e+00 1.6803461768629813e+00 + -1.9907104474105672e+00 3.5005783378994506e+00 1.8211934184417253e+00 + -2.3109439200059900e+00 3.3659744127931361e+00 1.9073224223568208e+00 + -2.6991394843898338e+00 3.1481842244828240e+00 1.9484047653436956e+00 + -3.1365296882644995e+00 2.8077228714097666e+00 1.9316851867130431e+00 + -3.5264543556715635e+00 2.3448217259287620e+00 1.8357423433490616e+00 + -3.7773939533421661e+00 1.8025684921379148e+00 1.6259025962534799e+00 + -3.8095230739781143e+00 1.3005437724862672e+00 1.2724860445035442e+00 + -3.7193551996514995e+00 1.0551501572179391e+00 1.0160420937250842e+00 + id 11455 + loc 7.1815854310989380e-01 4.3788969516754150e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8009906107565237e-01:4.0635782816610094e-01:9.8085976250038232e-02:4.5748696659321880e-01:7.1488960854736761e-01:3.4737880534329896e-01:1.0327105084075385e+00:4.8009426008504164e-01:1.7194765608705485e+00:4.3624118254073779e-01:2.0353693256992509e+00:3.6215322102802627e-01:2.9213630000706146e+00:2.9253763488418077e-01:3.6354206928164041e+00 + CVs 20 + -8.0492473049260424e-02 4.0690040237081315e-01 2.6067035494658769e-01 + -1.4808616591233886e-01 8.4201293193151550e-01 5.0440014291160640e-01 + -2.5279625270714712e-01 1.2741475911167066e+00 7.9483184783614691e-01 + -4.2137403805143192e-01 1.6650175083081908e+00 1.1577975872932138e+00 + -6.7189492406332141e-01 1.9769080426087229e+00 1.5930823434076105e+00 + -1.0139990425968743e+00 2.1720511277236323e+00 2.0717295699332241e+00 + -1.4397693097814281e+00 2.2246690543914456e+00 2.5455851526929267e+00 + -1.9207822184619827e+00 2.1308871912188270e+00 2.9654796836632160e+00 + -2.4143888710217749e+00 1.9079038277638489e+00 3.3023715625345020e+00 + -2.8746995115447089e+00 1.5827590568833418e+00 3.5608086467552322e+00 + -3.2645840589841333e+00 1.1761161769337252e+00 3.7672255898861859e+00 + -3.5563635501874007e+00 6.9790316465578006e-01 3.9401650151056100e+00 + -3.7271923200103645e+00 1.6270793085788648e-01 4.0798596096154043e+00 + -3.7630646107644417e+00 -3.9783874507616357e-01 4.1898515298060639e+00 + -3.6511326007372666e+00 -9.5395088547897977e-01 4.3035300238454752e+00 + -3.3783048002256493e+00 -1.4678211669438412e+00 4.4700819360933970e+00 + -2.9771690886516353e+00 -1.8860542129327516e+00 4.7419797452970487e+00 + -2.5080257828318739e+00 -2.1818845635557702e+00 5.1194084438273180e+00 + -2.3139047072761034e+00 -2.4988561693989766e+00 5.1698180272131022e+00 + id 11456 + loc 8.2857871055603027e-01 3.6195343732833862e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1972478835842686e-01:3.3460363439738666e-01:7.2173133391394551e-01:4.1972059111054327e-01:1.4706874662673584e+00:2.6574940907895866e-01:2.0110189820049627e+00:3.5014303221551862e-01:3.0002776018155366e+00:3.7234262690757103e-01:3.9978650860517768e+00 + CVs 20 + -1.4864388313789312e-01 1.9591071856753650e-01 1.9127564131136729e-01 + -2.9193779326397368e-01 4.0670549382489540e-01 3.7906547990507233e-01 + -4.4075643730312714e-01 6.2786252776216500e-01 5.5590825225543761e-01 + -6.0064981401800910e-01 8.5584489917451778e-01 7.1915634756474911e-01 + -7.7176893786714840e-01 1.0876024399767132e+00 8.7135326691267356e-01 + -9.5213938338325566e-01 1.3201881715539217e+00 1.0183745323430178e+00 + -1.1381216704305213e+00 1.5521989327355832e+00 1.1704196246062888e+00 + -1.3236985652908047e+00 1.7829500710036648e+00 1.3421405582248798e+00 + -1.4976286104464627e+00 2.0077407828254383e+00 1.5516397623492426e+00 + -1.6465862304508077e+00 2.2128368010398343e+00 1.8121531395263843e+00 + -1.7591340381850005e+00 2.3778066357462615e+00 2.1247506399049514e+00 + -1.8296056801547957e+00 2.4797637467641840e+00 2.4753805029534024e+00 + -1.8618991437682146e+00 2.5045346092140650e+00 2.8398800379321010e+00 + -1.8682355173350236e+00 2.4512278296942993e+00 3.1944907617382823e+00 + -1.8644939426048268e+00 2.3269378151388507e+00 3.5221175991833427e+00 + -1.8722589608770051e+00 2.1411019767363544e+00 3.8125014972870828e+00 + -1.9159537941584694e+00 1.9009910183552354e+00 4.0490558240843901e+00 + -2.0038443480885437e+00 1.6129882787046692e+00 4.1959415848925188e+00 + -2.1482875611987291e+00 1.2505271236422280e+00 4.1515086921546791e+00 + id 11457 + loc 1.3273607194423676e-01 2.1915066242218018e-01 1047 + blend 0.0000000000000000e+00 + interp 4.4556557862697893e-01:4.0525947859976852e-01:1.5059009029182868e-01:3.3739430994768421e-01:8.5308852227546039e-01:3.7244631348775237e-01:1.8987274075480116e+00:4.4556112297119266e-01:2.0918555517714532e+00:3.8518741034177895e-01:2.9776182995250218e+00:4.1471802764530336e-01:3.2943279645667167e+00:3.6059088200964290e-01:3.9135980908988173e+00 + CVs 20 + -6.8481624352064641e-01 5.1161966270686399e-01 3.8266113841558258e-02 + -1.2943500353446387e+00 1.0256848933741973e+00 1.2059194369075127e-02 + -1.8378020090921439e+00 1.5740350237429741e+00 -1.4390534654940690e-01 + -2.2748484933577364e+00 2.1491278138798742e+00 -5.0080702274816691e-01 + -2.5285124227399463e+00 2.6683226076810347e+00 -1.0837331070465432e+00 + -2.5836983160712119e+00 3.0174551137926300e+00 -1.8303031734546160e+00 + -2.4940889666723276e+00 3.1058445592766306e+00 -2.6225760414454093e+00 + -2.3468963343231484e+00 2.9098295441917648e+00 -3.3308416612938201e+00 + -2.1999200608656961e+00 2.4878419792098416e+00 -3.8744805233135300e+00 + -2.0440373691635729e+00 1.9316652599156936e+00 -4.2387098142511288e+00 + -1.8370967547181096e+00 1.3229340560309755e+00 -4.4354312061631793e+00 + -1.5350057825127266e+00 7.1437937389392048e-01 -4.4891092190787294e+00 + -1.1019271090873306e+00 1.4895328811336805e-01 -4.4082508037124253e+00 + -5.3202137189131704e-01 -3.0981169697364108e-01 -4.1894917192862868e+00 + 1.4494297602742801e-01 -5.9683640205904775e-01 -3.8425642069086057e+00 + 8.7184226457971370e-01 -6.6288640077640570e-01 -3.3852581686940670e+00 + 1.6134203233099229e+00 -4.1911238233283499e-01 -2.7482302995396015e+00 + 2.0839655774511501e+00 4.3569414746284618e-01 -1.8739814207216003e+00 + 2.0646786500530361e+00 8.0219885050413464e-01 -1.6955321245900368e+00 + id 11458 + loc 1.4152386784553528e-01 5.3686124086380005e-01 1070 + blend 0.0000000000000000e+00 + interp 1.6881172001052274e+00:6.6271434995844281e-01:1.9176707478593347e+00:4.0885750095051343e-01:2.0230587348788647e+00:3.7306382144333750e-01:2.7589499513789986e+00:3.7702242566891880e-01:3.6301486704337904e+00:1.6881072001052273e+00:3.7707997702918603e+00 + CVs 20 + -3.5160006860564064e-01 4.2833741409731252e-01 3.8718098741032170e-01 + -6.2027717219156764e-01 7.4777848662406654e-01 6.9678148065799528e-01 + -8.3690785781492605e-01 1.0205216760524174e+00 1.0204325275765223e+00 + -1.0658185350258180e+00 1.2862105643436352e+00 1.3496145068198748e+00 + -1.3652891057323675e+00 1.5485068731452403e+00 1.6049338315113588e+00 + -1.7419524662631449e+00 1.7792360746231728e+00 1.7282117228788589e+00 + -2.1515667256408886e+00 1.9398641726668895e+00 1.7018712785921708e+00 + -2.5255171252999715e+00 2.0083550539061346e+00 1.5240336300342605e+00 + -2.7711350961871872e+00 1.9731652596265956e+00 1.2092584998603146e+00 + -2.8190116677841770e+00 1.8416623409251704e+00 8.5892820256797120e-01 + -2.7185036084393843e+00 1.6444699914202567e+00 5.8371977694807398e-01 + -2.5386749457160134e+00 1.3970402836717266e+00 4.2446613191514149e-01 + -2.3430514923140469e+00 1.1321508670269971e+00 3.7627606427171933e-01 + -2.1658056399177714e+00 8.7010979256838361e-01 3.5389069552975472e-01 + -2.0182286533699507e+00 6.1124579749093344e-01 2.6362080065727289e-01 + -1.9395933473545708e+00 4.0328418573875380e-01 4.1761208031724006e-02 + -2.0075694255972594e+00 4.0372926637866513e-01 -3.0961555329604684e-01 + -2.1833825001434595e+00 6.5382014013668188e-01 -5.6612815786080450e-01 + -2.2559572624291664e+00 6.9916033227947394e-01 -8.2952598474328776e-01 + id 11459 + loc 5.4819786548614502e-01 8.3739846944808960e-01 410 + blend 0.0000000000000000e+00 + interp 5.3681456063568145e-01:3.7303580029323580e-01:2.7906043430506167e-01:3.5294266169275190e-01:1.0152137375825436e+00:3.7991921770082565e-01:1.7668720879654067e+00:5.3680919249007508e-01:2.0662224579315240e+00:4.1799152977067761e-01:2.7175185754531110e+00:3.7276445339550751e-01:3.0620886901154725e+00:3.0306317550593365e-01:3.6484963021962957e+00 + CVs 20 + 4.0055822537152719e-01 1.0033118931133100e-01 -2.2562991054143369e-01 + 6.9393943155983062e-01 1.6167272484255241e-01 -4.2594776221541192e-01 + 9.5103123357001951e-01 2.1021604632666763e-01 -6.2304116539227028e-01 + 1.2004209625375259e+00 2.5855858424532041e-01 -8.2728875167832516e-01 + 1.4413306587441286e+00 3.0491859399409310e-01 -1.0384371677385169e+00 + 1.6768575477884122e+00 3.4742862152655107e-01 -1.2559953930703049e+00 + 1.9141887067481322e+00 3.8434652900708566e-01 -1.4777012973779131e+00 + 2.1623509027724310e+00 4.1385964472362080e-01 -1.6988295233704445e+00 + 2.4310101580614214e+00 4.3404983958840393e-01 -1.9126786761491941e+00 + 2.7283284435612609e+00 4.4338014545683180e-01 -2.1100698382158476e+00 + 3.0486672001549824e+00 4.4371578134918155e-01 -2.2770376992657719e+00 + 3.3521992147018240e+00 4.4315891504318383e-01 -2.4025183630806173e+00 + 3.5896393319179021e+00 4.5160797724876867e-01 -2.4947850682173680e+00 + 3.7673244650234814e+00 4.6603318168164276e-01 -2.5722770590388238e+00 + 3.9217170797825842e+00 4.6904061866578983e-01 -2.6481353887469812e+00 + 4.0578651189552168e+00 4.5526114252832728e-01 -2.7239587237652731e+00 + 4.1655999329994629e+00 4.2962603287667367e-01 -2.7941202712740285e+00 + 4.2511564641240236e+00 3.8473574932954202e-01 -2.8634312144537444e+00 + 4.4130016125763945e+00 1.8816610450813420e-01 -3.0407045996516620e+00 + id 11460 + loc 7.7347195148468018e-01 5.8686840534210205e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2133272763255469e-01:3.4480322542258779e-01:3.4307397881000457e-02:2.9466305401471460e-01:7.6686253153423167e-01:2.9623385242602618e-01:1.7085619218298653e+00:3.5192990764903082e-01:2.2306309480755848e+00:4.2132851430527840e-01:2.9436342271030758e+00:2.7149838250066832e-01:3.3853899686678282e+00 + CVs 20 + 4.6653889606456722e-02 2.6994580430679838e-01 -2.5188520469854847e-01 + 1.0984781920555833e-01 5.3265184943394905e-01 -4.6792264585220084e-01 + 1.8310168383349124e-01 7.9195164058680423e-01 -6.7289969667218807e-01 + 2.6456496325320766e-01 1.0484823807593397e+00 -8.8559401173818431e-01 + 3.5641728265070322e-01 1.2959925164785786e+00 -1.1132424637925744e+00 + 4.5455683168117988e-01 1.5283928877940558e+00 -1.3578468955347851e+00 + 5.4849698804266134e-01 1.7452756812883083e+00 -1.6213054101626936e+00 + 6.2831744269860557e-01 1.9499994683892918e+00 -1.9085528189138892e+00 + 6.9270341790560463e-01 2.1434964532632694e+00 -2.2264389701760332e+00 + 7.4858543617295503e-01 2.3190508361339246e+00 -2.5838890439683242e+00 + 8.0392120440226544e-01 2.4548605388440836e+00 -2.9876767856682478e+00 + 8.6411756244432592e-01 2.5145154656558426e+00 -3.4305225597665872e+00 + 9.2996774447599251e-01 2.4660998919636707e+00 -3.8868694501668783e+00 + 9.9755761247191488e-01 2.2978635920827823e+00 -4.3215791595049344e+00 + 1.0690312872301901e+00 2.0177858584907025e+00 -4.7048617867927973e+00 + 1.1503659133976685e+00 1.6424472059107682e+00 -5.0165266610828096e+00 + 1.2308531685292121e+00 1.1932993399364111e+00 -5.2447894869828122e+00 + 1.2686418945205959e+00 6.9724043914268807e-01 -5.3844645404307192e+00 + 1.2268467396857792e+00 1.7740938210410800e-01 -5.4377726938460471e+00 + id 11461 + loc 6.4212507009506226e-01 6.5895754098892212e-01 1054 + blend 0.0000000000000000e+00 + interp 3.4182539565339259e-01:3.4182197739943609e-01:3.3506794643646864e-01:2.3580416741715182e-01:9.9163003809202732e-01:2.8697127547716100e-01:1.7462568305238952e+00:2.3774234256945112e-01:2.0619612235882365e+00:2.9548275040555366e-01:2.7443005532604543e+00:2.1987928995154901e-01:3.7555491042147473e+00 + CVs 20 + 2.5135354132449916e-01 4.1843637925256105e-01 -1.2854231378359768e-01 + 4.8102464109159859e-01 8.1503725572004826e-01 -2.1916915760541944e-01 + 6.8330160530152928e-01 1.2273299580505626e+00 -2.6780529673210840e-01 + 8.9242920328750452e-01 1.6448581871989667e+00 -2.8126606772679807e-01 + 1.1661903062737282e+00 2.0004858420449523e+00 -2.8511061692666329e-01 + 1.5171316175581442e+00 2.2283214708322863e+00 -3.1189783405676175e-01 + 1.9023273668620293e+00 2.3019438193528714e+00 -3.7885130077323015e-01 + 2.2774437036516009e+00 2.2226232390234664e+00 -4.8372194633771026e-01 + 2.6136122478022661e+00 1.9999238719045662e+00 -6.0355688677474761e-01 + 2.8964983751407614e+00 1.6370068117281322e+00 -6.9855374739709886e-01 + 3.1350474269131543e+00 1.1512543535175135e+00 -7.0683805979678060e-01 + 3.3457283047745277e+00 6.3762244345255481e-01 -5.6821391451363468e-01 + 3.5560157048312857e+00 2.0108885343767657e-01 -3.0756186683399278e-01 + 3.8472992494962339e+00 -1.1878304195577138e-01 -3.3343046802708720e-02 + 4.2499530565087946e+00 -3.0684163534056730e-01 1.2445170064790456e-01 + 4.6823712783239912e+00 -3.9576188933600753e-01 1.4689814325182093e-01 + 5.0147712978143151e+00 -4.3618208700042016e-01 1.0639005907534016e-01 + 5.2120521530049011e+00 -4.8327819359636348e-01 9.7816168966412098e-02 + 5.6664372263510749e+00 -8.2020617037358501e-01 2.4236382241804894e-01 + id 11462 + loc 6.1549419164657593e-01 4.0295187383890152e-02 1077 + blend 0.0000000000000000e+00 + interp 4.0501547517696196e-01:3.2696953032635689e-01:6.9495941810548967e-04:4.0501142502221021e-01:7.9715246346937185e-01:3.3497231203974359e-01:1.5913914325517953e+00:3.8262786020559814e-01:2.0946232520218890e+00:3.7851541255755305e-01:2.7813886287185001e+00:2.4390219988503162e-01:3.1743557857446487e+00 + CVs 20 + -4.5581247526904303e-02 2.1938011357129167e-01 2.5484710173921826e-01 + -8.4523238868930317e-02 4.3329839620677840e-01 4.8654403916297279e-01 + -1.1572022227256720e-01 6.3160624686512779e-01 7.0593839376979295e-01 + -1.3922014658144402e-01 8.0726572330926616e-01 9.2292136137824565e-01 + -1.5859855209854584e-01 9.5796220756294836e-01 1.1432693382879247e+00 + -1.8033423760082790e-01 1.0825795855847209e+00 1.3759773347600013e+00 + -2.1539113882175875e-01 1.1769887262090479e+00 1.6297999783715396e+00 + -2.7732165734462061e-01 1.2317067476494072e+00 1.9091963160356573e+00 + -3.7792170343277914e-01 1.2337699609763235e+00 2.2076014164547435e+00 + -5.1966040754103016e-01 1.1719757632277099e+00 2.5076231050572639e+00 + -6.8637004547599356e-01 1.0439180046329435e+00 2.7901339429134557e+00 + -8.4595187832869190e-01 8.5882062408332638e-01 3.0419405817642429e+00 + -9.6492718507189601e-01 6.3240799953646376e-01 3.2551878182850986e+00 + -1.0170714656581596e+00 3.7987271205017781e-01 3.4256503619095047e+00 + -9.8008083174851257e-01 1.2974441200947828e-01 3.5500546779282969e+00 + -8.4381285545993456e-01 -8.4328868077673036e-02 3.6380324561436486e+00 + -6.0974384381609770e-01 -2.7206578543390070e-01 3.7493248070197445e+00 + -2.7057418870016486e-01 -4.1991446324036652e-01 3.9528515500984986e+00 + 9.7564395091708223e-02 -6.9789485296927767e-01 4.2136047868638578e+00 + id 11463 + loc 8.8938313722610474e-01 5.3818929195404053e-01 1076 + blend 0.0000000000000000e+00 + interp 4.1946350396368637e-01:3.9220180318979331e-01:6.6808135046989880e-01:3.2989246205877892e-01:1.5612857293844700e+00:3.1932430517014271e-01:2.3359857242744360e+00:4.0778973212246011e-01:3.2481189829379664e+00:4.1945930932864672e-01:3.9992622732229135e+00 + CVs 20 + 1.6645881129507051e-01 3.6435665255010952e-01 -2.0289869301767058e-02 + 3.1740686054666845e-01 7.3617977942651558e-01 -6.3145219134854699e-02 + 4.6038024603186556e-01 1.1135759313330427e+00 -1.1202391052902320e-01 + 5.9035489156905319e-01 1.4970126440312779e+00 -1.4603838226981344e-01 + 7.0269691105186116e-01 1.9163285395279546e+00 -1.4570332469252856e-01 + 8.1829280226944912e-01 2.4176520655446718e+00 -1.4832946966892985e-01 + 9.8480442058568196e-01 2.9697491778368557e+00 -3.0007575606225334e-01 + 1.2338658553557491e+00 3.3941982653822365e+00 -6.7679536965707143e-01 + 1.5634185007691421e+00 3.5619601333661572e+00 -1.1459854108715959e+00 + 1.9439531417487499e+00 3.5052282903842000e+00 -1.5168039333183501e+00 + 2.3422154440013636e+00 3.3452616755280973e+00 -1.7048217301855337e+00 + 2.7509335620074893e+00 3.1551703866948917e+00 -1.7332621954628058e+00 + 3.1816976207855330e+00 2.9319135289726099e+00 -1.6448778370943897e+00 + 3.6296194715291787e+00 2.6257717448215532e+00 -1.4546625360917358e+00 + 4.0163099922504930e+00 2.2065754853178534e+00 -1.1527520887333513e+00 + 4.2008454000227058e+00 1.7816843100949074e+00 -7.3234981461801874e-01 + 4.0987613629935762e+00 1.6021188331364868e+00 -2.5956126585384803e-01 + 3.9008222712533005e+00 1.7120413645896515e+00 7.6220920236337406e-02 + 3.7577941270361830e+00 1.6929241636721950e+00 4.5460341593108711e-01 + id 11464 + loc 5.3354641422629356e-03 6.7807632684707642e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0579114474232625e-01:3.1526301947571256e-01:6.8036318325403078e-01:4.0578708683087883e-01:1.0481233220983015e+00:3.1028317496431074e-01:1.6196268962587124e+00:3.3898046224571760e-01:2.3710534906784781e+00:2.5917545179695461e-01:3.0215529252072262e+00:2.7864470777029088e-01:3.8493280497544697e+00 + CVs 20 + 1.9770803226935221e-01 3.7023918815849477e-01 -6.5468407884273994e-02 + 3.5571915274713167e-01 7.5404804703771866e-01 -1.4522289686827811e-01 + 4.9321360452839874e-01 1.1374429869120715e+00 -2.3576390893856347e-01 + 6.1342740662236517e-01 1.5099078112184541e+00 -3.2616391296115343e-01 + 7.1641951314004060e-01 1.8949424829752035e+00 -4.0121010374165655e-01 + 8.1242085482839976e-01 2.3236372724311805e+00 -4.7543774158764418e-01 + 9.1935408753884729e-01 2.7720050350658028e+00 -6.4061643146053693e-01 + 1.0445542139231454e+00 3.1299830609823140e+00 -9.8389757599326844e-01 + 1.1897359407234247e+00 3.2922875535638414e+00 -1.4739529957900293e+00 + 1.3687468284457389e+00 3.2205465520860619e+00 -2.0051178732668338e+00 + 1.6086800279329361e+00 2.9475518220800678e+00 -2.4774058556919991e+00 + 1.9194933978459410e+00 2.5473064859125016e+00 -2.8216499581326859e+00 + 2.2703802538468678e+00 2.0840956761504636e+00 -3.0284616871653416e+00 + 2.6054091821848653e+00 1.5878079467510715e+00 -3.1293534654346380e+00 + 2.8451471357850671e+00 1.0743788561760763e+00 -3.1515540828525279e+00 + 2.9476378810713944e+00 5.4184069716534577e-01 -3.0964689183243048e+00 + 2.8794921977179246e+00 7.0911018220317090e-03 -2.8976009998740646e+00 + 2.5790275088370738e+00 -3.7562835065838995e-01 -2.5526568699590904e+00 + 2.2417488279418438e+00 -6.6815828489825990e-01 -2.2379975534617600e+00 + id 11465 + loc 5.2234047651290894e-01 9.2041289806365967e-01 1077 + blend 0.0000000000000000e+00 + interp 5.7091589694338918e-01:4.1566131861988687e-01:2.9557922815177218e-02:3.1724026042715259e-01:6.2103528714166134e-01:3.4325624921425918e-01:1.4124292648571712e+00:5.4910228305277042e-01:1.9677156052153402e+00:5.7091018778441982e-01:2.2491026340870173e+00:3.6149101805564876e-01:2.9600746985815771e+00:4.0142247838709427e-01:3.4831197292152964e+00 + CVs 20 + 1.3975464577455876e-01 3.9425192747856491e-01 -1.5673302003108114e-01 + 2.8043448223030354e-01 7.8588907714621037e-01 -3.3901502175054504e-01 + 4.0931605526963266e-01 1.1757586513019527e+00 -5.5344467893712745e-01 + 5.1712563512796561e-01 1.5544536290049975e+00 -8.1262485000626317e-01 + 6.0776215085405361e-01 1.9101066512959384e+00 -1.1270900220102968e+00 + 7.0841342564753362e-01 2.2326492448300561e+00 -1.4987485296571992e+00 + 8.5541013922280373e-01 2.5086968561660332e+00 -1.9197548565847042e+00 + 1.0702257852693617e+00 2.7192507756439883e+00 -2.3742275198008875e+00 + 1.3575108363349913e+00 2.8378377651494424e+00 -2.8468620187966849e+00 + 1.7052459881747022e+00 2.8212010659351705e+00 -3.3181417734980925e+00 + 2.0532835284741733e+00 2.6163614559296420e+00 -3.7580838836517101e+00 + 2.2713805937196643e+00 2.1847936957574321e+00 -4.1164811710584770e+00 + 2.2283800713709123e+00 1.6188413330148765e+00 -4.3080119202153320e+00 + 2.0036641761919718e+00 1.1113641611691683e+00 -4.3305512524965515e+00 + 1.7083179141166895e+00 7.1092528561035284e-01 -4.2483259120792596e+00 + 1.3344029208135377e+00 5.2884940687007842e-01 -4.0969423719509477e+00 + 1.0110947280755289e+00 7.7897297188152170e-01 -3.9490545764352771e+00 + 9.4289240028458887e-01 1.1298378499696005e+00 -3.8409674920026857e+00 + 6.7737423893326676e-01 1.1832334652915615e+00 -3.6647239539185095e+00 + id 11466 + loc 4.4383221864700317e-01 2.1283523738384247e-01 410 + blend 0.0000000000000000e+00 + interp 3.9850583918858795e-01:3.9850185413019606e-01:1.6347818793437985e-01:3.4128069118347432e-01:8.5892074795296991e-01:3.5147979889337277e-01:1.2513630839075307e+00:2.9591186700710870e-01:2.0116176155985519e+00:3.8444984471391919e-01:2.8804691391985893e+00:3.4138971333679979e-01:3.5541015124131361e+00 + CVs 20 + -1.5378974550779453e-01 1.0375089321577433e-01 -2.6926814324253867e-01 + -2.6609320513369705e-01 1.8624080579638336e-01 -5.3318304266617567e-01 + -3.6132927122682262e-01 2.4582269043822511e-01 -7.9887679841342929e-01 + -4.4744414422522216e-01 2.8294402670572028e-01 -1.0671598670804103e+00 + -5.2343084713928612e-01 2.9917272163191433e-01 -1.3333888450915237e+00 + -5.8498331223119271e-01 2.9610457091846454e-01 -1.5901967688023229e+00 + -6.2398856901881705e-01 2.7520665692622726e-01 -1.8275382276452614e+00 + -6.3316611571718484e-01 2.3736734847678809e-01 -2.0335519761487726e+00 + -6.1105776730149675e-01 1.8281709932494827e-01 -2.1958194339060322e+00 + -5.6554302026215364e-01 1.1200849174786809e-01 -2.3047272818518407e+00 + -5.1402774241692373e-01 2.6772795462796761e-02 -2.3590724262051053e+00 + -4.7413049215314590e-01 -6.6281806493443396e-02 -2.3709064871025034e+00 + -4.4565429814693702e-01 -1.5280162739703218e-01 -2.3592302396568519e+00 + -4.1406023918093449e-01 -2.1970804203231009e-01 -2.3435421196569330e+00 + -3.7291761344668312e-01 -2.6632528671472477e-01 -2.3422139062094658e+00 + -3.2449779676544632e-01 -2.9790327901977798e-01 -2.3628490249432117e+00 + -2.6946924542644823e-01 -3.2160365768050492e-01 -2.4136447167911887e+00 + -2.1636208353815317e-01 -3.4870192619508134e-01 -2.4995453506590883e+00 + -2.5299143579706784e-01 -4.0874071041915960e-01 -2.5669137753732745e+00 + id 11467 + loc 2.9854202270507813e-01 7.4522204697132111e-02 1053 + blend 0.0000000000000000e+00 + interp 4.2465088352429703e-01:2.3037617141783398e-01:9.7060360629498854e-01:3.4698478996411186e-01:1.8849644920540167e+00:2.3400370078129346e-01:2.0997055386612828e+00:2.7956206634136477e-01:3.0658081666770229e+00:4.2464663701546179e-01:3.9844236311970072e+00 + CVs 20 + 4.3387652861786907e-01 4.6972105442101675e-01 1.6655915465206522e-01 + 7.3942593643631283e-01 8.9158070588703020e-01 3.7333433915555891e-01 + 9.6233571832272524e-01 1.2694172917991984e+00 6.2656013121802256e-01 + 1.1300953130490052e+00 1.5867924969607030e+00 9.4235046634867048e-01 + 1.2498641932053500e+00 1.8136106791158404e+00 1.3208985194273184e+00 + 1.3201377228192541e+00 1.9316604543368427e+00 1.7414794137844840e+00 + 1.3328568458978776e+00 1.9367912260012805e+00 2.1618629168239938e+00 + 1.2803147173647733e+00 1.8454030181192120e+00 2.5247507337595012e+00 + 1.1672912710665924e+00 1.6997030017972623e+00 2.7749604081734818e+00 + 1.0216178973958865e+00 1.5622080749467950e+00 2.8803946130008833e+00 + 8.8721131349552418e-01 1.4921457207958100e+00 2.8614485384403321e+00 + 7.8848960211839092e-01 1.5033693761139189e+00 2.7933441590124866e+00 + 7.3152169016804558e-01 1.5812102715226102e+00 2.7361944874284823e+00 + 7.3874221305867127e-01 1.6975797308744531e+00 2.7083730103294532e+00 + 8.4606017531427902e-01 1.8061624526500566e+00 2.6982855088811704e+00 + 1.0947173708401652e+00 1.8735332389996358e+00 2.7144260619035929e+00 + 1.4976517645162044e+00 1.8174919177613722e+00 2.7606088491336811e+00 + 1.7856264110601856e+00 1.6095046959642336e+00 2.7303480673789253e+00 + 1.4500243701593876e+00 1.6848730234366887e+00 2.5281590776055207e+00 + id 11468 + loc 4.6868318319320679e-01 3.2089996337890625e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7377327113598933e-01:3.8291967032135965e-01:1.9105322080704701e-03:3.3890123430884328e-01:9.1034027951244223e-01:4.7376853340327801e-01:2.1265748609228048e+00:3.4127262072720443e-01:2.9668931535639542e+00:4.4321910912575357e-01:3.4006477771443566e+00 + CVs 20 + 1.5054399676992075e-01 2.9801475650942261e-01 4.4499539705657087e-01 + 2.5150347756218955e-01 5.4591421312740296e-01 8.2316013745106154e-01 + 3.7458877708343541e-01 7.8237135716014050e-01 1.1649283210928294e+00 + 5.0567917191342471e-01 9.9933019521975142e-01 1.4770058604611329e+00 + 5.8763748524106274e-01 1.1855306742790357e+00 1.7830794078071583e+00 + 5.9369219983705923e-01 1.3272697270965623e+00 2.1000552841131315e+00 + 5.2900341911786697e-01 1.3971521822655313e+00 2.4057040969005481e+00 + 4.1042358464063033e-01 1.3812958631036625e+00 2.6503795958277947e+00 + 2.6770525354698593e-01 1.2917553505842250e+00 2.7789222273336969e+00 + 1.3677984535304355e-01 1.1575358564207803e+00 2.7945032923347379e+00 + 4.4069345924299785e-02 9.9796404499931290e-01 2.7373360059074314e+00 + 2.9780171970631875e-02 8.3231084542012967e-01 2.6364135224410790e+00 + 4.3100605855378449e-02 6.4948143452501683e-01 2.5173019092424349e+00 + -7.1444744005162875e-02 3.7026350933664087e-01 2.3614140466720102e+00 + -4.3477696826652590e-01 2.5852096493198196e-02 2.1976857955396261e+00 + -1.0904890254377149e+00 -1.6355734178356726e-01 2.1441166083168435e+00 + -1.8483639062690334e+00 1.2636500903533782e-01 2.3304441390855049e+00 + -2.2197102674771281e+00 6.8745023221505164e-01 2.5791704709229517e+00 + -2.4718745954347856e+00 9.4819155411957712e-01 2.6386502476752693e+00 + id 11469 + loc 5.3354641422629356e-03 8.6280113458633423e-01 1047 + blend 0.0000000000000000e+00 + interp 3.8865868873441073e-01:3.4567096557988991e-01:5.0259626954592240e-01:1.8585286735180512e-01:9.6981516289384706e-01:2.5759952852652634e-01:1.9338333060549440e+00:3.8865480214752340e-01:2.9894204592316411e+00:3.6770037976952930e-01:3.4133847259289829e+00 + CVs 20 + 1.3916383456969678e-01 6.2557004188790599e-01 -3.7529672176262541e-01 + 3.6477706350027223e-01 1.2767961872546676e+00 -7.2005710888014929e-01 + 6.9957044089098508e-01 1.9098175654137821e+00 -9.3636059102218239e-01 + 1.1319685050086370e+00 2.4242351297715965e+00 -9.2654132097841146e-01 + 1.5866639097092041e+00 2.7007878611045490e+00 -6.8074426133516752e-01 + 1.9732237352328739e+00 2.7091522693164598e+00 -2.9522121440790605e-01 + 2.2457409724630084e+00 2.4938603907053540e+00 1.3399555542117536e-01 + 2.4076424765730455e+00 2.1144203737836493e+00 5.5885477565504194e-01 + 2.4828720278372010e+00 1.6239465873209777e+00 9.4738705678341750e-01 + 2.5078794833051683e+00 1.0613785876229804e+00 1.2800243873720025e+00 + 2.5113886198029309e+00 4.2281308783566118e-01 1.5731875518614420e+00 + 2.4768379777950322e+00 -3.4221590225508947e-01 1.9001298956993513e+00 + 2.3548415761993953e+00 -1.2212921314301011e+00 2.3863535519816237e+00 + 2.1743289711590785e+00 -2.0438397725498212e+00 3.1576484788355774e+00 + 2.1372915322089026e+00 -2.5160963549801627e+00 4.1923278240362372e+00 + 2.4010869862289974e+00 -2.4824737706338027e+00 5.1912118998855643e+00 + 2.8643564641715131e+00 -2.0446635152639412e+00 5.9530827878037700e+00 + 3.3536710438501700e+00 -1.3772226074752880e+00 6.4315785401521897e+00 + 3.7960831243266995e+00 -6.6456239241143367e-01 6.7632204686747457e+00 + id 11470 + loc 5.4934227466583252e-01 3.1067615747451782e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4946646802230183e-01:3.2028826875536642e-01:8.8898333354299552e-01:2.8177225325756083e-01:1.5840033203027741e+00:4.4946197335762161e-01:2.3762568049089858e+00:4.1572945628698199e-01:3.0095525211348231e+00:2.6512365254886017e-01:3.7264106246179471e+00 + CVs 20 + -1.1649574827573840e-01 2.0910801502134105e-01 2.8031564098668521e-01 + -1.9060494589499016e-01 4.5311928685392222e-01 5.6382177418478008e-01 + -2.3978322458716123e-01 7.1147989521294197e-01 8.4985812993404664e-01 + -2.7994576976433150e-01 9.6790633879713994e-01 1.1421138311569037e+00 + -3.2342969487763640e-01 1.2119945632026221e+00 1.4467890986244558e+00 + -3.7846044087493302e-01 1.4329510756273449e+00 1.7635737236457207e+00 + -4.5197702436345721e-01 1.6195694763283144e+00 2.0864042828231106e+00 + -5.6077733997759704e-01 1.7609592788665873e+00 2.4110769616476806e+00 + -7.3353223916554711e-01 1.8406924657972086e+00 2.7321884941455301e+00 + -9.8520699356283770e-01 1.8413609619324396e+00 3.0300408456756363e+00 + -1.2880132291738806e+00 1.7676980574505139e+00 3.2746556200503329e+00 + -1.5917800677820475e+00 1.6438692791325775e+00 3.4513108116396385e+00 + -1.8768462882100840e+00 1.4679584417234457e+00 3.5750992438955591e+00 + -2.1479076760291362e+00 1.1999064001106761e+00 3.6629179866783170e+00 + -2.4008405425033179e+00 8.6957746135008063e-01 3.6972754585303531e+00 + -2.6270628492050476e+00 5.8009251951889484e-01 3.6620395449110386e+00 + -2.8022718473707435e+00 3.9057559095619143e-01 3.5753332791970540e+00 + -2.9566825678544388e+00 2.9315964342261358e-01 3.4506759960768383e+00 + -3.2060121636570775e+00 3.2823824571793891e-01 3.2621574005073448e+00 + id 11471 + loc 5.4374647140502930e-01 2.2135458886623383e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5128141277478334e-01:2.7257273218707612e-01:8.1788442804339156e-01:2.7462316110864976e-01:1.4374735946490032e+00:2.7958111330925789e-01:2.0386903203420461e+00:3.6550530556197036e-01:2.8212567656792724e+00:4.5127689996065562e-01:3.2557482982357864e+00:3.4251385114122851e-01:3.9122844788784539e+00 + CVs 20 + 1.5129121228744585e-01 3.1606661001972103e-01 -1.7008809820184689e-01 + 3.0230182363258457e-01 5.8959869714286528e-01 -2.8852270266100227e-01 + 4.3069079813383249e-01 8.4171860891614192e-01 -4.0648304515615252e-01 + 5.1668661457933629e-01 1.0592826908387400e+00 -5.3153476721482706e-01 + 5.5329458668350839e-01 1.2241235557294001e+00 -6.5270306201826722e-01 + 5.4803398257906877e-01 1.3578887867933418e+00 -7.9429783583639046e-01 + 5.5787899086347803e-01 1.5106197903347796e+00 -9.8737185238569103e-01 + 6.8304424957796650e-01 1.6915586789786685e+00 -1.1892122093175264e+00 + 9.3248367796523379e-01 1.8484084337578808e+00 -1.2856711741372040e+00 + 1.1872879459376244e+00 1.9405579622603062e+00 -1.2200615880167793e+00 + 1.3732584999136903e+00 1.9915611013545735e+00 -1.0304005606669215e+00 + 1.4866479512255100e+00 2.0390148231769132e+00 -7.4255833376991076e-01 + 1.4718923629803879e+00 2.0661660405002937e+00 -4.0797277166522250e-01 + 1.2643809333785256e+00 2.0247026047741157e+00 -1.9250427379966562e-01 + 9.0800105289160227e-01 1.8870651010635473e+00 -1.9114149961150251e-01 + 4.8554096338783270e-01 1.5915001886491205e+00 -3.5372092116828369e-01 + -3.2649513763244736e-02 9.6393612516012306e-01 -5.7385146139166965e-01 + -6.1814033129703505e-01 2.9427569162422057e-01 -4.1075708749989726e-01 + -6.4962963587348410e-01 4.7196791899757828e-01 -2.4478674703714726e-01 + id 11472 + loc 8.5650071501731873e-02 9.8241567611694336e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7415521169423841e-01:3.2178606082502181e-01:1.0080796611421472e-02:4.7415047014212147e-01:8.9239281090217393e-01:3.5732788914792168e-01:1.0854803871698693e+00:4.7299365942621102e-01:1.7537496415652056e+00:2.4177690207170202e-01:2.2216104893339894e+00:3.1606829027685424e-01:3.2503360619294428e+00 + CVs 20 + 2.7169393244426737e-01 3.3765298354386014e-01 -1.4634963509227011e-01 + 5.5575159372006455e-01 6.4913307238946982e-01 -3.2886610438747366e-01 + 8.5983798952116974e-01 9.2863386161569916e-01 -5.2611182883441998e-01 + 1.1831978452118410e+00 1.1731830011014315e+00 -7.2631768440602318e-01 + 1.5166866191808248e+00 1.3822930812965002e+00 -9.2675449805799381e-01 + 1.8402428837774489e+00 1.5533608310581426e+00 -1.1296631852426067e+00 + 2.1225441488647778e+00 1.6778183009716849e+00 -1.3314471799486023e+00 + 2.3321329112205280e+00 1.7476159107170499e+00 -1.4977754304947581e+00 + 2.4762129853484769e+00 1.7859106071551536e+00 -1.6070742260790905e+00 + 2.5909406917630786e+00 1.8025033553924705e+00 -1.7238496108016350e+00 + 2.6789478179900317e+00 1.7559890633675512e+00 -1.8962037354647281e+00 + 2.7297120377341981e+00 1.6109486591234110e+00 -2.1108143512832895e+00 + 2.7634374622526825e+00 1.3577139730581160e+00 -2.3425269522197216e+00 + 2.8285720630274387e+00 1.0095446793581269e+00 -2.5927392057994565e+00 + 2.9622382882504175e+00 6.2067746601975082e-01 -2.8936573707146227e+00 + 3.1582497784442682e+00 2.9968658934839992e-01 -3.2740126665228058e+00 + 3.3742293057210846e+00 1.5919900490390754e-01 -3.7026351631655965e+00 + 3.5240076793753041e+00 2.8715687877813234e-01 -4.0422225569081993e+00 + 3.5402742405493992e+00 7.3515911699444847e-01 -4.1827634731056822e+00 + id 11473 + loc 3.1247171759605408e-01 5.6249397993087769e-01 410 + blend 0.0000000000000000e+00 + interp 3.9128273074472236e-01:3.1596880843769437e-01:2.1205658456311349e-01:3.0324714439104267e-01:1.0061237645890300e+00:3.7161376893024994e-01:1.6379654631990870e+00:3.9127881791741492e-01:2.0709960609134010e+00:3.5885287435108715e-01:2.9935405931785164e+00:3.3166266044787235e-01:3.7528060070683136e+00 + CVs 20 + 2.1628847218568770e-01 2.2273068501416760e-01 -5.0801416133655332e-02 + 3.8171935031326382e-01 4.2224472846107819e-01 -8.8960347085238312e-02 + 5.3530148743014772e-01 6.1092809610265564e-01 -1.2479480983438218e-01 + 7.0007734234813124e-01 7.9745632710933234e-01 -1.5961209576221344e-01 + 8.7272922292154931e-01 9.7773367551292600e-01 -1.9404692500840715e-01 + 1.0424919788227047e+00 1.1460484406180935e+00 -2.3152613951191814e-01 + 1.1994721046689594e+00 1.2991822431834945e+00 -2.7444005666671334e-01 + 1.3407001503925748e+00 1.4372531122691434e+00 -3.2259128343686000e-01 + 1.4660950620564621e+00 1.5592083539248263e+00 -3.7570819129539063e-01 + 1.5772318723046941e+00 1.6625936739543878e+00 -4.3259144393713844e-01 + 1.6978031942137879e+00 1.7603943657984207e+00 -4.6575275859550769e-01 + 1.8793871194592433e+00 1.8835030248893494e+00 -3.9224653210879290e-01 + 2.1663851533375809e+00 2.0247022583471765e+00 -1.5926403621621732e-01 + 2.5603772726344611e+00 2.1188500952407812e+00 1.5571041686206444e-01 + 3.0170041444327205e+00 2.1218094899314801e+00 4.4505322788803359e-01 + 3.4990773419538410e+00 2.0325760706157388e+00 6.7188969473633531e-01 + 3.9799216361924401e+00 1.8624864064033115e+00 8.3046330763908793e-01 + 4.4050469152029903e+00 1.6412414951712795e+00 9.0898054910753412e-01 + 4.5240737463656568e+00 1.4889424550394130e+00 8.6727800820377576e-01 + id 11474 + loc 8.7246984243392944e-01 8.5940456390380859e-01 1053 + blend 0.0000000000000000e+00 + interp 5.7712714685597588e-01:3.4641438875158576e-01:1.3214241859691445e-01:4.3325552419688451e-01:9.5851866727873802e-01:3.2408163297813353e-01:1.2613914085296589e+00:5.7712137558450738e-01:2.1329144002022069e+00:4.3583833358227736e-01:2.7510206339779741e+00:3.3711419058217879e-01:3.6902556430406892e+00 + CVs 20 + 2.2117909020957671e-02 4.0879917122377624e-01 3.4787069379468660e-01 + -4.1803827208825806e-02 7.6212834446737787e-01 6.5165005706123869e-01 + -1.7351916215889318e-01 1.0772786917469450e+00 9.3098728093421856e-01 + -3.6431002466312057e-01 1.3610662070458097e+00 1.1790870450821336e+00 + -5.8587188581365990e-01 1.6168140121593948e+00 1.3775815427160638e+00 + -7.8713038542673919e-01 1.8683612892754302e+00 1.5337489548079128e+00 + -9.3058355465841203e-01 2.1429988585702815e+00 1.6755706950395419e+00 + -1.0083916032718589e+00 2.4519891930792208e+00 1.8381558609591955e+00 + -1.0152600510976348e+00 2.7862328565940633e+00 2.0632268796123805e+00 + -9.2936590783294970e-01 3.0995651682331742e+00 2.4002819862474096e+00 + -7.4339302189166934e-01 3.2945091883206437e+00 2.8612267150548254e+00 + -5.1035615667385947e-01 3.3066329840368973e+00 3.3731550043710179e+00 + -2.8953376894274774e-01 3.1629000897254795e+00 3.8716869972754813e+00 + -1.1498801733406827e-01 2.9127994712755902e+00 4.3323967275748023e+00 + -3.4382903248060259e-03 2.6030596800987702e+00 4.7448856510146618e+00 + 4.9772105370388564e-02 2.2340449420778321e+00 5.1149411392842961e+00 + 3.7770242318583502e-02 1.7529947995867854e+00 5.4375765149718784e+00 + -7.2116403116845307e-02 1.1658869138083057e+00 5.6585364530367404e+00 + -1.4515326655062588e-01 9.2222866027530448e-01 5.7861038286773399e+00 + id 11475 + loc 5.5837059020996094e-01 3.2424494624137878e-02 1070 + blend 0.0000000000000000e+00 + interp 3.7474123277470678e-01:3.7226083890935724e-01:7.5917438704367068e-03:3.3975636670369264e-01:7.0695478316429550e-01:3.7473748536237905e-01:1.1867733236775579e+00:1.4729359813540135e-01:1.9399349068641374e+00:3.4455155657682734e-01:3.3911256237517304e+00 + CVs 20 + 4.1504433971933696e-01 3.3242021147886891e-01 -2.8353720150561501e-01 + 8.1083968644306936e-01 6.0428499265874125e-01 -4.3918808634905937e-01 + 1.1965053499326364e+00 8.6967062191115807e-01 -5.2129741693834797e-01 + 1.5657869853721433e+00 1.1655723502890885e+00 -5.4666516031599888e-01 + 1.8819041252409874e+00 1.4876571737241255e+00 -5.5512543128953973e-01 + 2.1237490226612867e+00 1.7942703865880323e+00 -6.4953673647208032e-01 + 2.3106178720016639e+00 2.0192083179122351e+00 -8.6518349824256924e-01 + 2.4923211785742518e+00 2.1466317230167595e+00 -1.1407134143080429e+00 + 2.7017121917515645e+00 2.1655820004714501e+00 -1.4233265662664669e+00 + 2.9342064159168544e+00 2.0293700689772027e+00 -1.6484363255714158e+00 + 3.1466153124312983e+00 1.7433433872581805e+00 -1.7500635930818209e+00 + 3.3089163524276728e+00 1.3927236373131848e+00 -1.7517391149474517e+00 + 3.4249865249347771e+00 1.0182360502565584e+00 -1.7041038828542434e+00 + 3.4976701413233919e+00 6.3079752814910206e-01 -1.6022363594115625e+00 + 3.5381059824887693e+00 2.5137860416414637e-01 -1.4347376866448607e+00 + 3.5081001734203419e+00 -9.1732283856282404e-02 -1.1761010513673547e+00 + 3.3079879264665073e+00 -3.2024295465213382e-01 -7.9885236017463024e-01 + 2.9374045190412792e+00 -3.3551807045398163e-01 -3.6047406799503123e-01 + 2.9158462349417711e+00 -7.4905765243962308e-01 -1.6287510227621993e-01 + id 11476 + loc 5.3091555833816528e-01 4.2107918858528137e-01 1047 + blend 0.0000000000000000e+00 + interp 3.5123912917711436e-01:3.5123561678582260e-01:1.0111930351022869e-01:3.1862101587725433e-01:9.9723854232474507e-01:3.0205848664216528e-01:1.9732070633478753e+00:3.1124161197120503e-01:2.5601025930012482e+00:3.2222021229866260e-01:3.0520624585356959e+00:3.5033484440608931e-01:3.7566791374773585e+00 + CVs 20 + -1.1656627813314273e-01 7.6929527144830523e-01 4.6612276930909607e-01 + -3.2059217983928634e-01 1.5065300640110719e+00 9.1797589524672052e-01 + -6.2455349017279105e-01 2.2306692004924793e+00 1.3151922406511436e+00 + -1.0554226741015875e+00 2.9033975141677901e+00 1.4897812958790801e+00 + -1.5788181719377234e+00 3.3949825371960838e+00 1.2920626717659178e+00 + -2.0803510847668965e+00 3.5906211777804038e+00 7.7784217809357070e-01 + -2.4499470699029602e+00 3.4479659414361210e+00 1.1590963356704154e-01 + -2.6472982765037045e+00 3.0279619006050140e+00 -5.2551934387506649e-01 + -2.6908244176478826e+00 2.4353360577811718e+00 -1.0531648670089717e+00 + -2.6103440808980753e+00 1.7548746878561206e+00 -1.4551086847631978e+00 + -2.4062721765273825e+00 1.0403792112816010e+00 -1.7958230888858029e+00 + -2.0556508995193452e+00 3.5663919334721572e-01 -2.1844439807366083e+00 + -1.5893835722540173e+00 -1.7512528681335815e-01 -2.6957179851013091e+00 + -1.1582495989706891e+00 -4.1231061428368188e-01 -3.3289385543200520e+00 + -9.6362864561872397e-01 -2.5192744920048460e-01 -3.9640664280463662e+00 + -9.6748278062255300e-01 1.6411958118218095e-01 -4.3361068047377298e+00 + -9.5693947585158856e-01 6.0348081481423410e-01 -4.5206592295802803e+00 + -9.1656778655091764e-01 1.0579447156744308e+00 -4.6871414578761055e+00 + -9.1786292468174313e-01 1.5957312770627001e+00 -4.9086398856964086e+00 + id 11477 + loc 3.5923695564270020e-01 5.6100285053253174e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4031164072353812e-01:3.6084441677216816e-01:1.5282250436245204e-02:4.4030723760713092e-01:7.7963391741965848e-01:3.2461004573920504e-01:1.2204022106779022e+00:3.7029748957473158e-01:2.0263524593082098e+00:3.7244906037262482e-01:2.8942776600166651e+00:2.4444984428027475e-01:3.4117921952558339e+00 + CVs 20 + 1.8767353303053702e-01 2.8692109282727074e-01 -1.8519393262160774e-01 + 3.4990077661498503e-01 5.8687863271293783e-01 -3.6646383985250108e-01 + 5.1484075206811863e-01 8.6184183863688202e-01 -5.5989632464376593e-01 + 6.9151067811665434e-01 1.0907347855696661e+00 -7.7295985240551057e-01 + 8.7556442988418914e-01 1.2604823010068242e+00 -1.0022723712973904e+00 + 1.0616653382629260e+00 1.3619146167449916e+00 -1.2380541875570275e+00 + 1.2440727841249206e+00 1.3924975120392444e+00 -1.4697352724808146e+00 + 1.4157794494173792e+00 1.3552138086907175e+00 -1.6890852116162030e+00 + 1.5685511360386650e+00 1.2573304992863823e+00 -1.8891030317712971e+00 + 1.6958431525654596e+00 1.1101208539698919e+00 -2.0633478064062620e+00 + 1.7917548631237079e+00 9.3079933888164945e-01 -2.2048961014951955e+00 + 1.8454969567212856e+00 7.4220084362900440e-01 -2.3072406235682670e+00 + 1.8499522054313213e+00 5.7706823998075663e-01 -2.3605465644133519e+00 + 1.8201072461026500e+00 4.6874219171677889e-01 -2.3505309953407725e+00 + 1.8042197846774135e+00 4.3959100197858270e-01 -2.2565425237276533e+00 + 1.8585840409199890e+00 4.2885822896972481e-01 -2.0796265122895359e+00 + 1.8922963669535928e+00 2.5187121554366443e-01 -1.8938194706630282e+00 + 1.7084896073925706e+00 -7.4542293490867717e-02 -1.8138741654198713e+00 + 1.3676072152148280e+00 -9.5473057494166680e-02 -1.8363006441814109e+00 + id 11478 + loc 5.9231269359588623e-01 6.2891536951065063e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5653073901152382e-01:3.5545589194304966e-01:8.2555715292188525e-03:2.6278374548231048e-01:5.4951714921228123e-01:3.5652717370413373e-01:1.5132642255374114e+00:2.9645558903624614e-01:2.0299487193290600e+00:3.5425221695705733e-01:2.9498457039719286e+00:3.4412352928931489e-01:3.4189192364536369e+00 + CVs 20 + 2.1030741838723011e-01 2.9931907476022923e-01 -1.8762432721846170e-01 + 4.5560380712938714e-01 5.9571127886446251e-01 -3.4428162399584350e-01 + 7.1370554035493727e-01 8.7862670809814292e-01 -4.9704617224485015e-01 + 9.7569612182703114e-01 1.1359327266645560e+00 -6.5770346121699430e-01 + 1.2400363886948378e+00 1.3489088464775587e+00 -8.3283266542632151e-01 + 1.5083378677876744e+00 1.4984188697080927e+00 -1.0296910146981260e+00 + 1.7860260061061290e+00 1.5803463962493201e+00 -1.2544172394020441e+00 + 2.0754355281283137e+00 1.5972167907398525e+00 -1.5114800377720727e+00 + 2.3675860466373768e+00 1.5457217165310273e+00 -1.7965080066194159e+00 + 2.6456578772487198e+00 1.4221626961281044e+00 -2.0931286647043632e+00 + 2.8921893304017336e+00 1.2271673520639945e+00 -2.3802478446734936e+00 + 3.0911055674509567e+00 9.6211230985171670e-01 -2.6454646866807097e+00 + 3.2251455645310290e+00 6.2460213050218261e-01 -2.8948001577610625e+00 + 3.2650341449469122e+00 2.0057483545363008e-01 -3.1668001720394474e+00 + 3.1490781319810113e+00 -3.1291928606249231e-01 -3.4956467478680588e+00 + 2.8124656834411379e+00 -8.5257016677323549e-01 -3.8576044159131033e+00 + 2.2445007200855946e+00 -1.3139436594747724e+00 -4.1893979011779274e+00 + 1.5628496696343608e+00 -1.6168548242186800e+00 -4.4125033249977310e+00 + 1.1419268048631277e+00 -1.8173710111015784e+00 -4.4761928584574919e+00 + id 11479 + loc 2.8324779868125916e-01 4.9701396375894547e-02 1075 + blend 0.0000000000000000e+00 + interp 4.5211835281945201e-01:2.8945063816120237e-01:8.5995631949589080e-01:3.4428922825862779e-01:1.8131490986428491e+00:3.0773529663570814e-01:2.7713103635040435e+00:3.0489394073838150e-01:3.5947884148782494e+00:4.5211383163592384e-01:3.9854355299913342e+00 + CVs 20 + -2.0639453951184397e-01 2.5631256236591693e-01 5.8297711167401234e-02 + -4.1913572502743646e-01 5.4477262202101684e-01 1.4371116396472106e-01 + -6.3265604620877136e-01 8.6613133824591759e-01 2.4812027569679079e-01 + -8.6663660479500504e-01 1.2189933326914810e+00 3.4690801506298491e-01 + -1.1541977400143257e+00 1.5935725679683381e+00 4.0182678965958640e-01 + -1.5111416855707804e+00 1.9636132542068205e+00 3.7540888074981282e-01 + -1.9301745673281370e+00 2.2844144742381065e+00 2.3349615487006792e-01 + -2.3737030448516854e+00 2.4815300578359381e+00 -5.5277246621268317e-02 + -2.7499778862766528e+00 2.4523471957991050e+00 -4.9319542999172561e-01 + -2.8919840587820764e+00 2.2064954076780481e+00 -1.0317889529948294e+00 + -2.9073825213507010e+00 1.9039379559567946e+00 -1.4862488238081561e+00 + -2.9356391008551674e+00 1.4591275128369203e+00 -1.8370943549949998e+00 + -2.9306754901239138e+00 8.5491901173922846e-01 -2.0077859092868269e+00 + -2.8349633290949234e+00 2.3835671459456409e-01 -2.1188722133790954e+00 + -2.5953328068952697e+00 -3.0292094041312445e-01 -2.3893056055409421e+00 + -2.2455483358463804e+00 -6.2713530055034772e-01 -2.9130024351730257e+00 + -1.9100515155447197e+00 -5.9296586708837262e-01 -3.6143824093239347e+00 + -1.6598113610792142e+00 -3.6282517101302392e-01 -4.2567306395165385e+00 + -1.4254673925223256e+00 -5.1559223902839402e-01 -4.7266620452335495e+00 + id 11480 + loc 5.3091555833816528e-01 3.3092659711837769e-01 1074 + blend 0.0000000000000000e+00 + interp 3.0745821788096778e-01:3.0745514329878898e-01:5.9706289540776447e-01:3.0544761431941037e-01:1.3628765406923686e+00:2.6028611927633211e-01:2.0734352580572120e+00:2.6285669168571157e-01:2.9616684481356623e+00:2.8514727382279814e-01:3.9861130182282691e+00 + CVs 20 + 2.1403126579435418e-02 3.6147463721106660e-01 1.5650533135565725e-01 + 3.1199945292692571e-02 7.0457340330488927e-01 3.3170318081424216e-01 + 4.0603015707778967e-02 1.0257384093627311e+00 5.0474030921202273e-01 + 4.6673457595714701e-02 1.3287286565280643e+00 6.7133162050802409e-01 + 3.6923910118584230e-02 1.6204164180004397e+00 8.4257249168134563e-01 + -1.4627755725246661e-03 1.8979521726939093e+00 1.0379221110333370e+00 + -6.4549953755200451e-02 2.1360145987865753e+00 1.2655500732222684e+00 + -1.3102943112872889e-01 2.3130224395719803e+00 1.5130137230889253e+00 + -1.8172674103079312e-01 2.4295510934078508e+00 1.7590031204515957e+00 + -2.0817294490226751e-01 2.4999828354937881e+00 1.9830788596041813e+00 + -2.1248575782698359e-01 2.5447634105881094e+00 2.1691503592403967e+00 + -2.0651084367535549e-01 2.5853370327938339e+00 2.3108823019366440e+00 + -2.0711561045430654e-01 2.6354534838917845e+00 2.4215266612094695e+00 + -2.2570816895850254e-01 2.6948469358555869e+00 2.5300879053710803e+00 + -2.6342363864052992e-01 2.7503593091772882e+00 2.6624106355086101e+00 + -3.2037533676513430e-01 2.7835410511429828e+00 2.8247771990047847e+00 + -3.9577200101019205e-01 2.7729179714648624e+00 3.0087045355084170e+00 + -4.5482865277445861e-01 2.6899953462719259e+00 3.1807086816453252e+00 + -3.5516271267512189e-01 2.5069600886955925e+00 3.1151375622726740e+00 + id 11481 + loc 4.9757245182991028e-01 9.5618605613708496e-01 410 + blend 0.0000000000000000e+00 + interp 4.3583599524494776e-01:3.3379518376121187e-01:2.5086161920772598e-01:4.3583163688499532e-01:1.0406688244401745e+00:2.5933404806922888e-01:1.9998138296838253e+00:3.7145159054372417e-01:2.7495781930816818e+00:3.7991921770082565e-01:3.7677102890915846e+00 + CVs 20 + 4.3771744293622739e-01 1.1498748993580271e-01 -1.9492888766639138e-01 + 7.6334272712522078e-01 1.8292379543744708e-01 -3.6190221316302529e-01 + 1.0589320330699801e+00 2.3729502006759967e-01 -5.1744672599333585e-01 + 1.3618380357242108e+00 2.9503861107209545e-01 -6.6927563618728481e-01 + 1.6713127067488478e+00 3.5368959908783865e-01 -8.1783014876153415e-01 + 1.9870335853125278e+00 4.0979175547406632e-01 -9.6195269285274354e-01 + 2.3093189867138428e+00 4.5963948854403835e-01 -1.0968399560025168e+00 + 2.6383592511956784e+00 4.9922030856162447e-01 -1.2150905427196368e+00 + 2.9729345410919179e+00 5.2443951946954681e-01 -1.3089325982701647e+00 + 3.3091561038740993e+00 5.3248614971551689e-01 -1.3713543499822831e+00 + 3.6407298783840556e+00 5.2197934816881841e-01 -1.3985892381250224e+00 + 3.9628540688433329e+00 4.8731810625449601e-01 -1.3976830502113540e+00 + 4.2714698314343096e+00 4.1408086186379811e-01 -1.3923304851099130e+00 + 4.5608732600271846e+00 2.8840003738683118e-01 -1.4102992571665611e+00 + 4.8253604295519192e+00 1.0551666071470223e-01 -1.4657260431080541e+00 + 5.0522804231094103e+00 -1.2962800173116040e-01 -1.5626158126181526e+00 + 5.2228137558352197e+00 -4.0117038858555709e-01 -1.7011948158536501e+00 + 5.3278324290891312e+00 -6.8982858350912313e-01 -1.8759338394326592e+00 + 5.4582437241709876e+00 -1.0161792805118650e+00 -2.0491725459972066e+00 + id 11482 + loc 3.6167910695075989e-01 9.7260946035385132e-01 1047 + blend 0.0000000000000000e+00 + interp 3.6107380311300274e-01:3.6107019237497162e-01:1.3776855083052841e-01:3.3392363112343643e-01:9.1263151903740836e-01:3.4894088135284584e-01:1.3758990209691651e+00:8.5387742905902023e-02:2.4205235524007200e+00:3.0650537749166218e-01:3.0016846347371580e+00:3.3549451987892176e-01:3.6679052986372698e+00 + CVs 20 + 1.1871831255793104e-01 6.9569048997211214e-01 -2.4104690730192938e-01 + 2.4508657329114439e-01 1.3658556823003063e+00 -4.8402502965484734e-01 + 4.0785271942094092e-01 2.0008320198113561e+00 -7.5012736108479006e-01 + 6.4911223274745145e-01 2.6047853152287934e+00 -9.9252576849981933e-01 + 1.0464674634816835e+00 3.1713168789949386e+00 -1.0450158422809614e+00 + 1.5933747368157216e+00 3.5774622902120896e+00 -7.7931165898028554e-01 + 2.1687379477180375e+00 3.6788011084483552e+00 -2.3109283650565504e-01 + 2.6363257592602380e+00 3.4160928000967283e+00 4.6394012742321000e-01 + 2.9139539072983056e+00 2.8333975302197318e+00 1.1320212480179661e+00 + 2.9739954378919542e+00 2.0525304559701714e+00 1.6314099452622592e+00 + 2.8304939991986666e+00 1.2177463428741009e+00 1.9420665761247458e+00 + 2.5086283165334446e+00 4.2381326709933997e-01 2.1786876417522372e+00 + 2.0662825048321323e+00 -2.6371481150804277e-01 2.5014461514709732e+00 + 1.6077746773413089e+00 -7.8211344449246001e-01 3.0452978141844405e+00 + 1.3291856609542279e+00 -9.9565233595933145e-01 3.8335347065011582e+00 + 1.3467860199904824e+00 -8.2594507157211883e-01 4.5976525734447993e+00 + 1.5682321292882260e+00 -4.0989433946953646e-01 5.1460789389022077e+00 + 1.9078215489683141e+00 9.2266250559184471e-02 5.4705958586694328e+00 + 2.3524520643975402e+00 5.8833460769547319e-01 5.6767680457782639e+00 + id 11483 + loc 9.3565475940704346e-01 4.9241682887077332e-01 1086 + blend 0.0000000000000000e+00 + interp 3.4166353116333217e+00:9.7340625260104885e-01:8.5968447537909665e-04:7.2720263739639823e-01:1.9093359664145182e-01:4.8080314452781209e-01:6.5610090251672393e-01:2.0472085074354476e-01:9.9884678764019852e-01:3.1657375994553233e-01:1.8723758596462703e+00:2.2392715223459523e+00:1.9734989021134410e+00:2.5497646308182644e+00:1.9802060600305329e+00:3.4166253116333216e+00:3.9641450548909143e+00:3.0589385713320607e+00:3.9758893136472762e+00 + CVs 20 + 2.4682243215967664e-01 4.5244175916672230e-01 -4.7841803769629088e-01 + 5.0833769851657318e-01 7.9589877298523981e-01 -8.3574294552570638e-01 + 7.9318719175595787e-01 1.0952766990716050e+00 -1.1754102978891492e+00 + 1.1076672330099149e+00 1.3745228091214239e+00 -1.5266333800795178e+00 + 1.4545668795192181e+00 1.6254535058261514e+00 -1.8535221643821536e+00 + 1.8285881175515686e+00 1.8387136789392164e+00 -2.1194010286784626e+00 + 2.2116073138022623e+00 2.0038195763327709e+00 -2.2934261389802644e+00 + 2.5669757229546066e+00 2.1068757951834267e+00 -2.3490774757784303e+00 + 2.8384027149020139e+00 2.1300326592336960e+00 -2.2762626366850225e+00 + 2.9965328822413051e+00 2.0690656690911595e+00 -2.1158586837298805e+00 + 3.0781530180522005e+00 1.9252890011058230e+00 -1.9300457440903962e+00 + 3.1332900369029986e+00 1.6799277086146538e+00 -1.7761263680849355e+00 + 3.1989455799705953e+00 1.3343565089647305e+00 -1.6811257851213655e+00 + 3.2729673556962080e+00 8.9422129396782724e-01 -1.5713970378186051e+00 + 3.3012766417155310e+00 3.6304852975624363e-01 -1.3387078318049310e+00 + 3.2245312508235218e+00 -1.5888674219743304e-01 -8.9728888671792095e-01 + 3.0566226425743115e+00 -4.7244792666441210e-01 -2.1125845314177952e-01 + 2.9024187775527563e+00 -4.3272962192227660e-01 5.9100098229348119e-01 + 2.8504202881209708e+00 -6.4908973271380743e-01 1.0719103344694634e+00 + id 11484 + loc 4.4813653826713562e-01 9.8189854621887207e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7636575057212932e-01:3.9162491316665426e-01:6.0576358701468580e-01:3.3728993604477658e-01:1.6859150372594218e+00:1.9216579791496530e-01:2.2102414390417877e+00:3.6274458290221684e-01:3.3684499619644850e+00:4.7636098691462364e-01:3.9417012098983668e+00 + CVs 20 + -2.4683294429855585e-01 3.2410945029794286e-01 2.3444913304716258e-01 + -4.4645288699643226e-01 5.9315244624971175e-01 4.4416906960791075e-01 + -5.9618453132188431e-01 8.4258022678919053e-01 6.8416133415126046e-01 + -7.3135019938217871e-01 1.0964403003555239e+00 9.4357919228314646e-01 + -9.1121308401346579e-01 1.3603885003075054e+00 1.1555302133598917e+00 + -1.1651574107275575e+00 1.6127774561396275e+00 1.2628040290015221e+00 + -1.4801091885364410e+00 1.8180334029566718e+00 1.2405727232582220e+00 + -1.8174328051679738e+00 1.9461241271336993e+00 1.0604914214534689e+00 + -2.0761133852821976e+00 1.9652273513119303e+00 7.1009662858468281e-01 + -2.1622088162318165e+00 1.8809756585624857e+00 2.9319449236215767e-01 + -2.1011820845393179e+00 1.7274955641359484e+00 -1.0619008130301077e-01 + -1.9260353931113143e+00 1.5080730923953825e+00 -4.6472795049752358e-01 + -1.6840174015177973e+00 1.2376441030546521e+00 -7.3745231846580506e-01 + -1.4769062209768362e+00 9.8445450349548635e-01 -9.1838810450572961e-01 + -1.3857275565928817e+00 8.2596473991499619e-01 -1.0541569941348841e+00 + -1.4303329522142212e+00 8.1016143976437394e-01 -1.1317752504692191e+00 + -1.5886803020264175e+00 9.3431403768657328e-01 -9.8695514660220263e-01 + -1.7011392650205235e+00 9.6428892236060482e-01 -6.4552656068741010e-01 + -1.8289095507329751e+00 1.0975978531288155e+00 -8.4905854163455574e-01 + id 11485 + loc 6.7143164575099945e-02 6.9415533542633057e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1224562371135703e-01:3.9088399325325296e-01:2.5971252263985023e-01:4.1224150125511994e-01:9.9968654937452872e-01:3.4545664075551563e-01:1.6368739543950630e+00:3.6884525654436368e-01:2.4324085190371481e+00:4.0888736182075558e-01:2.9946515656404462e+00:3.1583021650121496e-01:3.4490115011885027e+00 + CVs 20 + 7.7507452638744756e-02 2.7009030502089937e-01 4.8862360105188546e-02 + 1.3404488251362934e-01 5.8603094264436617e-01 8.2700091551836483e-02 + 2.0693197777606112e-01 9.5063650410740030e-01 9.0427715396635605e-02 + 3.2817926151889826e-01 1.3499044920249648e+00 5.8713927558992074e-02 + 5.1342370167091955e-01 1.7688629968690623e+00 -3.5545374714244682e-02 + 7.7717571865740553e-01 2.1758287789671975e+00 -2.1034617308147574e-01 + 1.1243277883621341e+00 2.5232675413241452e+00 -4.6653974125835618e-01 + 1.5433681616495034e+00 2.7656256129602244e+00 -7.8335944913800060e-01 + 2.0117703538709124e+00 2.8761052410768846e+00 -1.1283396771612824e+00 + 2.5027129648641013e+00 2.8479497614395646e+00 -1.4710436499541837e+00 + 2.9909091518523327e+00 2.6886614040840207e+00 -1.7959325844891152e+00 + 3.4559782670468397e+00 2.4084081173551688e+00 -2.1046958419747543e+00 + 3.8664500654749152e+00 2.0121932458080565e+00 -2.4066561209661059e+00 + 4.1719210883077826e+00 1.5073458514151552e+00 -2.7131994245699182e+00 + 4.3067110179922938e+00 9.1916936269386729e-01 -3.0382882090629360e+00 + 4.1986048283474808e+00 3.3718086386039259e-01 -3.3825355076501653e+00 + 3.8744469748837318e+00 -4.8254473762742833e-02 -3.7036136249961347e+00 + 3.5089158676428491e+00 -1.4557237567292702e-01 -3.9483117333152800e+00 + 3.2384318062954560e+00 -1.6309172082022050e-01 -4.0570642841332774e+00 + id 11486 + loc 3.6167910695075989e-01 7.6437485218048096e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7036378064177875e-01:4.7035907700397234e-01:8.9974731402398289e-01:2.5582587521524214e-01:1.2535460855061809e+00:4.3372968556384561e-01:1.9081615646487915e+00:2.7421571681815787e-01:2.7128655610125323e+00:4.4117575164436068e-01:3.0011835131273514e+00:2.8598728975303750e-01:3.9947497996226877e+00 + CVs 20 + 1.6719527529101721e-01 3.5360872665643561e-01 -2.6969444926750163e-01 + 3.7098659552760804e-01 6.9142147335570225e-01 -5.4095233658558251e-01 + 6.0660929412639852e-01 1.0128376470701885e+00 -8.1596454472978763e-01 + 8.6894376227761816e-01 1.3192111253388521e+00 -1.0925543745901249e+00 + 1.1463622292260454e+00 1.6072061247638603e+00 -1.3749494910438085e+00 + 1.4129886988105818e+00 1.8600543269834948e+00 -1.6859164228617269e+00 + 1.6351757372961100e+00 2.0454200202099524e+00 -2.0465701110777719e+00 + 1.7824551244592894e+00 2.1176770488195444e+00 -2.4409280630747356e+00 + 1.8475388075029551e+00 2.0548426497666696e+00 -2.8332677627237186e+00 + 1.8513516041992852e+00 1.8708031719083322e+00 -3.2171921667816274e+00 + 1.8260987681638621e+00 1.5842041835290284e+00 -3.5946311229565135e+00 + 1.8126603949941456e+00 1.2259493978299394e+00 -3.9792457299369777e+00 + 1.8517343600126899e+00 8.5453385081806676e-01 -4.4041145558595680e+00 + 1.9462974604396619e+00 5.8628339119035666e-01 -4.8956783041230594e+00 + 2.0369230058029615e+00 5.7519706524701009e-01 -5.4016897490308589e+00 + 2.0200441661545465e+00 8.8447429034581793e-01 -5.7265881921721729e+00 + 1.8117451802791360e+00 1.3070070604467670e+00 -5.6136691696767738e+00 + 1.5530322590170509e+00 1.5283378011876183e+00 -5.3265127256745783e+00 + 1.4290056858146465e+00 1.9673601977524620e+00 -5.4315773066244546e+00 + id 11487 + loc 1.9984354078769684e-01 1.1972626671195030e-02 1076 + blend 0.0000000000000000e+00 + interp 4.0853754488859334e-01:3.1125722690793428e-01:8.4282744523825659e-01:1.4893448934789119e-01:1.4172958044369239e+00:3.0897954017564083e-01:2.1814805674567719e+00:4.0853345951314446e-01:3.0210006454768381e+00:3.7062635052443438e-01:3.8106736368152117e+00 + CVs 20 + -2.0064672750333945e-01 2.6009609586822097e-01 -2.0165841419638258e-01 + -3.7901651380952162e-01 5.3381607070441806e-01 -3.9697408249895755e-01 + -5.7503378125379900e-01 7.8419007010274400e-01 -5.9555172079151242e-01 + -7.9903385289146933e-01 9.8951929882928025e-01 -7.9923724466503721e-01 + -1.0414142854509709e+00 1.1422507184730541e+00 -1.0063820530257717e+00 + -1.2876696002075743e+00 1.2361908018816501e+00 -1.2152003965974627e+00 + -1.5202103538601563e+00 1.2689579347836624e+00 -1.4229242663257731e+00 + -1.7257751694527179e+00 1.2467109970174095e+00 -1.6281338451344165e+00 + -1.8965158082857605e+00 1.1825311162708723e+00 -1.8302370585782681e+00 + -2.0290655927975028e+00 1.0934844594942004e+00 -2.0286562629803591e+00 + -2.1266712887904591e+00 9.9712600025554121e-01 -2.2249220331713966e+00 + -2.1994257807990838e+00 9.0803086210217177e-01 -2.4231655217522725e+00 + -2.2619142464538986e+00 8.3566316900620685e-01 -2.6263604562775598e+00 + -2.3287793676847413e+00 7.8675311318739838e-01 -2.8304727952343551e+00 + -2.4111853925171167e+00 7.7385342829955239e-01 -3.0219336937381773e+00 + -2.5242838860631536e+00 8.4220992639998182e-01 -3.1869036868111280e+00 + -2.7464779947995361e+00 1.1209048858449149e+00 -3.3264865899870251e+00 + -3.3481477815851846e+00 1.6355619831354755e+00 -3.4859801045217491e+00 + -3.3036125583272202e+00 1.4723033574329156e+00 -3.5825121092830474e+00 + id 11488 + loc 6.8014174699783325e-01 2.4829074740409851e-01 1075 + blend 0.0000000000000000e+00 + interp 4.1279819101975423e-01:2.9765818861037280e-01:1.8045827577269935e-01:2.9187039816055294e-01:9.8858358792928103e-01:4.1279406303784405e-01:1.9732966627681483e+00:2.8010476784507304e-01:2.1888473459088509e+00:3.0104899359077014e-01:2.9364145602499141e+00:3.0396573097461310e-01:3.6650991767069105e+00 + CVs 20 + -8.6561637065530023e-02 1.9541326240578216e-01 1.5913782290837977e-01 + -1.3571108965152631e-01 4.2786346905928174e-01 3.1509352478104674e-01 + -1.6190313908661791e-01 6.7469508939169254e-01 4.3707371726901767e-01 + -1.8058506599102381e-01 9.2407027597393876e-01 5.1955846226608970e-01 + -2.1123161634838888e-01 1.1764834062920830e+00 5.8216976933980447e-01 + -2.7651990683558536e-01 1.4296252817195734e+00 6.4721888572877495e-01 + -3.8965399327273409e-01 1.6702238791359902e+00 7.3011300540952195e-01 + -5.5061798430209341e-01 1.8695938262621330e+00 8.3302978064253042e-01 + -7.4886391535156527e-01 2.0026986489150049e+00 9.3201441005656060e-01 + -9.7146035982510537e-01 2.0687185343490402e+00 9.8577394684957576e-01 + -1.2027124107870129e+00 2.0924126567500392e+00 9.7538394852303401e-01 + -1.4359184300394068e+00 2.1045703392966182e+00 9.1710158730596036e-01 + -1.6596719591478206e+00 2.1142190658088067e+00 8.0833253489130275e-01 + -1.7983541375559882e+00 2.1076170763272080e+00 5.8819463899548163e-01 + -1.7647770699405192e+00 2.0595271526181391e+00 2.2033847921348831e-01 + -1.5708368093057901e+00 1.9115376495846732e+00 -2.3345327456225839e-01 + -1.2492462201732530e+00 1.5658023640605372e+00 -6.9274593935605921e-01 + -1.0244659727886019e+00 9.9671348338916843e-01 -1.2305875663774490e+00 + -1.1848507329599816e+00 1.0281898135925389e+00 -1.4036661529476295e+00 + id 11489 + loc 4.4383221864700317e-01 2.8960862755775452e-01 1047 + blend 0.0000000000000000e+00 + interp 5.0546381660677120e-01:2.9680483416162939e-01:1.0576232017976461e-01:3.1395603297403035e-01:1.3043144333396148e+00:5.0545876196860517e-01:1.9952220689549207e+00:4.2692493124748887e-01:2.2960399202647945e+00:2.9131906991098538e-01:2.9320052774373924e+00:3.1124161197120503e-01:3.5773518861651188e+00 + CVs 20 + -4.7629246692228838e-01 7.1855373156777291e-01 -8.3770941355698750e-02 + -8.6943943516875444e-01 1.4022216053074736e+00 -2.0389206520750328e-01 + -1.1750297869117028e+00 2.0271667713069035e+00 -3.5657795313746399e-01 + -1.3633639674500855e+00 2.5544731593145560e+00 -5.4758444125267025e-01 + -1.4082138697523980e+00 2.9891349248380390e+00 -7.9782935156208690e-01 + -1.2790016935020998e+00 3.3383893268791818e+00 -1.1269635852184114e+00 + -9.6208389174203046e-01 3.5513044006178873e+00 -1.5038722926674783e+00 + -4.7733884483401079e-01 3.5635659100876196e+00 -1.8584909225144737e+00 + 1.1982397266396205e-01 3.3465429122725006e+00 -2.1139844650460562e+00 + 7.5585102394930559e-01 2.9039145122565699e+00 -2.1982176552563422e+00 + 1.3500732082702349e+00 2.2686981811868563e+00 -2.0598702661643640e+00 + 1.8642058180914780e+00 1.5283919374425459e+00 -1.6837445050383175e+00 + 2.3647592779519266e+00 8.2353131072719465e-01 -1.1086946230557733e+00 + 2.9712875264691969e+00 2.9721167990007458e-01 -4.7373249092983605e-01 + 3.7510644539623517e+00 1.1056738675532807e-01 -3.9121721622008887e-02 + 4.4940357710608803e+00 3.4549490024524543e-01 2.0905053951053576e-02 + 4.9799490978151955e+00 7.6384872993543107e-01 -1.3651524459653466e-01 + 5.3148919538968737e+00 1.1325392381017751e+00 -3.7559022960971677e-01 + 5.6211210233097137e+00 1.3215071928348281e+00 -6.6010163079974182e-01 + id 11490 + loc 9.0675252676010132e-01 2.4375994503498077e-01 410 + blend 0.0000000000000000e+00 + interp 4.4282119676851578e-01:3.5008131127393349e-01:3.5073930882152171e-01:4.2816703649878929e-01:1.0115925212703116e+00:4.4035335362060851e-01:1.4205418836680566e+00:3.6408897954962166e-01:1.9999343764874085e+00:4.4281676855654811e-01:2.9604935424933920e+00:3.8551029767937933e-01:3.4879368210945851e+00 + CVs 20 + -3.7688179746111822e-01 3.0622085973033936e-01 1.6393781125701276e-01 + -7.0917928809772035e-01 5.7355149102255676e-01 2.9368601369248648e-01 + -1.0441719288812747e+00 8.2889379134680397e-01 4.0217827756719593e-01 + -1.4030454098816549e+00 1.0771644253414405e+00 5.1266595161875661e-01 + -1.7861803042424578e+00 1.3067192682415381e+00 6.5805666724320100e-01 + -2.1823868204580585e+00 1.4994823278447014e+00 8.7005166986187110e-01 + -2.5684105933177510e+00 1.6347202305238673e+00 1.1631354202963224e+00 + -2.9233170931210148e+00 1.6930256281013334e+00 1.5280332621128616e+00 + -3.2487266460304109e+00 1.6578298530388835e+00 1.9424372791623270e+00 + -3.5570450322572396e+00 1.5104341980640921e+00 2.3751505115601339e+00 + -3.8442505728734813e+00 1.2336738019008977e+00 2.7695962968519363e+00 + -4.0943852067350797e+00 8.4015816699576518e-01 3.0733403805164183e+00 + -4.3049731803432136e+00 3.7914496283626842e-01 3.3001492903882728e+00 + -4.4909616858238977e+00 -1.0251738879181671e-01 3.5073320859802877e+00 + -4.6716274670226525e+00 -5.7553735210644152e-01 3.7475428179494070e+00 + -4.8613129478467911e+00 -1.0216948959036354e+00 4.0538123557812469e+00 + -5.0673980031763746e+00 -1.4447703671522250e+00 4.4151720422566871e+00 + -5.2996884842872687e+00 -1.8726207155538650e+00 4.7971575230864820e+00 + -5.5734042396665897e+00 -2.3328989030432679e+00 5.1849504881178330e+00 + id 11491 + loc 9.2057019472122192e-01 8.7251186370849609e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6686668481357102e-01:2.9017868644520256e-01:5.8042297449564773e-01:4.6686201614672290e-01:9.9920128512674777e-01:4.2338354212021645e-01:1.5136434393123772e+00:2.6320004745072140e-01:2.0691245120570612e+00:3.7484777234844296e-01:3.0110650613624959e+00:3.5739161659515423e-01:3.8524519285817731e+00 + CVs 20 + 7.5258337374772569e-02 3.0401955339229825e-01 -1.7469577024553337e-01 + 1.8031364614921266e-01 6.4639588821174199e-01 -3.7199758228491486e-01 + 2.9843772446208205e-01 1.0263797074860990e+00 -5.6633446072878435e-01 + 4.1735709285229261e-01 1.4362812109218326e+00 -7.6245058869817872e-01 + 5.2614454317267567e-01 1.8637821585313872e+00 -9.8505343186106686e-01 + 6.1127595813630753e-01 2.2866220133945601e+00 -1.2587359657412596e+00 + 6.6055444645622508e-01 2.6693043397574510e+00 -1.6036429583252341e+00 + 6.7007220154307567e-01 2.9616699682101233e+00 -2.0281886083012579e+00 + 6.5777638354080026e-01 3.1269921998181243e+00 -2.5145133623444225e+00 + 6.6595557672890471e-01 3.1776198516288083e+00 -3.0329057942865112e+00 + 7.3508228885373950e-01 3.1279811563040467e+00 -3.5563856995119334e+00 + 8.6950143845684280e-01 2.9533111216608399e+00 -4.0362350005785412e+00 + 1.0469414260334486e+00 2.6427289487391228e+00 -4.4086360340371469e+00 + 1.2600700434878076e+00 2.2465108853829809e+00 -4.6368639171426258e+00 + 1.4857548462181258e+00 1.8348516345710375e+00 -4.7359614532709564e+00 + 1.6493225450676654e+00 1.4481160990878976e+00 -4.7854734185552816e+00 + 1.7131717064193386e+00 1.0861334945787458e+00 -4.8766572811576321e+00 + 1.7606829595731013e+00 7.3183055699404909e-01 -5.0227568663035358e+00 + 1.9523822873443029e+00 3.7420167622015466e-01 -5.1330790085307072e+00 + id 11492 + loc 3.0078372359275818e-01 3.6744678020477295e-01 1070 + blend 0.0000000000000000e+00 + interp 9.8120735308056384e-01:4.7376853340327801e-01:1.4235987604258937e-01:7.3351095738524386e-01:4.7304277010952833e-01:9.8119754100703305e-01:8.2296420962990735e-01:3.4309432322788602e-01:2.6126455198923573e+00:4.5483726282469245e-01:3.0613644714554731e+00:4.1572079043833315e-01:3.8550069124669051e+00 + CVs 20 + 3.6374456232231300e-01 3.6457081301606142e-01 3.9373619005985633e-01 + 6.6450147466331810e-01 6.3273502152879990e-01 7.0989699769190895e-01 + 9.7424850408233732e-01 8.5372413100158884e-01 9.8482325570074036e-01 + 1.2869740555572389e+00 1.0671675603296260e+00 1.2886271134713323e+00 + 1.5228902908980890e+00 1.2671358720314996e+00 1.6610820066414185e+00 + 1.6305714413606771e+00 1.4172535943916040e+00 2.0867827932534393e+00 + 1.6130970466878247e+00 1.4876549151069554e+00 2.5190135472017552e+00 + 1.4872476406105406e+00 1.4752728296563666e+00 2.9186387359446870e+00 + 1.2612109409602470e+00 1.3861251511937971e+00 3.2476973496820936e+00 + 9.8119156617901315e-01 1.2268155896999351e+00 3.4510896787889020e+00 + 7.5462574720031950e-01 1.0287476003733020e+00 3.5238341705023370e+00 + 6.4859632366069198e-01 8.4137835120414139e-01 3.5365567110561362e+00 + 6.5194256102007131e-01 7.1299062586387674e-01 3.5644914466319428e+00 + 6.8266254877609100e-01 6.0253530363715990e-01 3.5987289069535926e+00 + 7.1231661291993664e-01 4.0956312046219123e-01 3.5792953544718329e+00 + 7.0420807595638002e-01 1.0149857078521418e-01 3.5068184758032954e+00 + 5.4806163370935601e-01 -3.1164794136731755e-01 3.4222345537810535e+00 + 9.5126975529008118e-02 -7.1445894119930675e-01 3.4256509420709707e+00 + -4.2531491991170012e-02 -7.8428781455702334e-01 3.5417374337028327e+00 + id 11493 + loc 7.9935614485293627e-04 6.8614035844802856e-01 1075 + blend 0.0000000000000000e+00 + interp 5.2545623236637762e-01:5.2545097780405403e-01:9.7183317576468031e-03:4.9861095776045095e-01:4.8798067246136467e-01:2.9947991902746590e-01:9.9978430815556973e-01:4.4370402991265834e-01:1.5732123916606586e+00:5.0297444487172072e-01:2.0023283999975758e+00:4.1355263572483253e-01:2.7050028767598402e+00:2.6284426104695774e-01:3.4414670373717273e+00 + CVs 20 + 7.3373721794639524e-04 3.4753920346005690e-01 -2.7036801795954052e-01 + 4.0324301032317850e-02 7.0300560329274653e-01 -5.2941512082943420e-01 + 9.4434987060169617e-02 1.0643474091563281e+00 -8.1454773909674183e-01 + 1.5338574998496241e-01 1.4185835474689836e+00 -1.1584213408190491e+00 + 2.2263116237690206e-01 1.7423298631213910e+00 -1.5800740000024931e+00 + 3.2098042015709505e-01 2.0100628965594227e+00 -2.0805095309465971e+00 + 4.7819217087473931e-01 2.1994745117932339e+00 -2.6379647287573502e+00 + 7.1724017632948767e-01 2.2931012313959429e+00 -3.2129093947794827e+00 + 1.0423961059515270e+00 2.2743275181640192e+00 -3.7583988597166149e+00 + 1.4308843256537793e+00 2.1228509583161310e+00 -4.2306435220995393e+00 + 1.8214718163481707e+00 1.8173450979132431e+00 -4.5991960234664431e+00 + 2.1109696204783508e+00 1.3418556203123124e+00 -4.8443309419091110e+00 + 2.1915736019593481e+00 7.4281307052118573e-01 -4.9295674234807931e+00 + 2.0769314929463434e+00 1.7076570915897837e-01 -4.8499186109743651e+00 + 1.8650410144577765e+00 -2.9080849903547379e-01 -4.6814114007215553e+00 + 1.5221558771084749e+00 -6.3458800606566912e-01 -4.5032957418049424e+00 + 9.1562965876775793e-01 -7.3152065773582209e-01 -4.3796459199597129e+00 + 2.9818165473193503e-01 -4.5344767591772017e-01 -4.3018608346349456e+00 + -4.4655355936686347e-03 -5.2418588417595857e-01 -4.1880684533506667e+00 + id 11494 + loc 7.9994201660156250e-01 2.8219729661941528e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8009906107565237e-01:3.5526486696719556e-01:5.5000163439943517e-02:3.1001204885712708e-01:7.0736301995589357e-01:4.0918961406502607e-01:1.0082611576775982e+00:3.1355297747629290e-01:1.9837621401844721e+00:3.4366573856770727e-01:2.4761506810377267e+00:3.3684929360761706e-01:2.9943358951681383e+00:4.8009426008504164e-01:3.7086416850645461e+00 + CVs 20 + -8.6163884158348858e-02 2.7369074109562352e-01 3.0541023852693577e-01 + -1.6053350438144831e-01 5.6702482141698940e-01 5.8993020165933918e-01 + -2.4592632821888244e-01 8.4524167279687989e-01 8.8919195230395032e-01 + -3.6044628739988305e-01 1.0809983704050192e+00 1.2216115387282320e+00 + -5.1577696464097811e-01 1.2531418675108825e+00 1.5862535590233324e+00 + -7.1805570876890301e-01 1.3448828611691086e+00 1.9676953341419632e+00 + -9.6582685785329270e-01 1.3476280758768153e+00 2.3390142351730017e+00 + -1.2501674789442363e+00 1.2653267979688985e+00 2.6728738529024283e+00 + -1.5543317021289513e+00 1.1142833914920749e+00 2.9550790795792965e+00 + -1.8585806983228690e+00 9.1578737450136960e-01 3.1925664233323512e+00 + -2.1430525254861927e+00 6.8831770063305242e-01 3.4030089371809744e+00 + -2.3892021182972347e+00 4.4610254438190222e-01 3.6016048521667856e+00 + -2.5860405646791147e+00 1.9969187039478498e-01 3.8008555219500439e+00 + -2.7308866026736927e+00 -4.8045286426216860e-02 4.0201332109561321e+00 + -2.8136992625121415e+00 -2.9585469385157759e-01 4.2759297201261592e+00 + -2.8251414828145238e+00 -5.2839527147971377e-01 4.5726056030380198e+00 + -2.7750469120616637e+00 -7.1060755232758477e-01 4.8965132024764086e+00 + -2.7029900856127602e+00 -8.0866349089527101e-01 5.2116992894046934e+00 + -2.6496026376178907e+00 -7.8115489930044735e-01 5.4832138232695158e+00 + id 11495 + loc 8.5263782739639282e-01 1.3707655668258667e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8937648341579976e-01:4.2600615059371583e-01:2.5193560041828322e-01:3.4399546029935446e-01:8.4803060814861708e-01:3.4489188716170827e-01:1.1716619486429702e+00:2.4643343692595715e-01:1.9203014226838770e+00:3.5139735281801476e-01:2.6299556609475743e+00:4.8937158965096561e-01:3.0018802192672949e+00:3.4677854113361478e-01:3.6427575905192335e+00 + CVs 20 + -1.6828368146970962e-01 3.5658164900526412e-01 2.2618063314599440e-01 + -3.2936228218635422e-01 7.2085235211259335e-01 4.4255699767460455e-01 + -4.8492727279925396e-01 1.0789810269189510e+00 6.7185964118804298e-01 + -6.2888080030898497e-01 1.4187766021261963e+00 9.2426233429488769e-01 + -7.5750914543654435e-01 1.7310334437936226e+00 1.2076286688460427e+00 + -8.8353440421343665e-01 2.0048683603100836e+00 1.5343617846996263e+00 + -1.0303123708917024e+00 2.2279013935958383e+00 1.9064094527115294e+00 + -1.2124170733907675e+00 2.3926547159690474e+00 2.3096189511772169e+00 + -1.4302248245452975e+00 2.4966489966202658e+00 2.7239273823749297e+00 + -1.6794719080368505e+00 2.5382378506143435e+00 3.1350808379753516e+00 + -1.9573240485602708e+00 2.5137972389954819e+00 3.5336804194076712e+00 + -2.2547869881468494e+00 2.4245667705463996e+00 3.9045614272979412e+00 + -2.5551242051734246e+00 2.2783280470084994e+00 4.2372671953148915e+00 + -2.8192616394540031e+00 2.0723436013330634e+00 4.5266553881253779e+00 + -3.0057099895936208e+00 1.8178705387911667e+00 4.7565349367557763e+00 + -3.1883739748285764e+00 1.5440571016060576e+00 4.9101507515805611e+00 + -3.5724405600927147e+00 1.1387631708876755e+00 4.9705294873181360e+00 + -3.9096444435860427e+00 3.9609606750783655e-01 4.9602616941051627e+00 + -3.7642536606139281e+00 4.1301833856164716e-01 4.9675287746390318e+00 + id 11496 + loc 3.1247171759605408e-01 7.6539540290832520e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2504051178688460e-01:3.0842983787746975e-01:2.7045441390902714e-01:2.8498946538304465e-01:9.9793967669137273e-01:3.0024407363698441e-01:1.6437787641360353e+00:3.6107019237497162e-01:2.1549705865209612e+00:3.3294350065661493e-01:2.9746729898416771e+00:4.6306699343138713e-01:3.2222144037689402e+00:5.2503526138176670e-01:3.7368617816531495e+00 + CVs 20 + 2.0231856811286780e-01 7.0012901813770712e-01 -4.3176385358996183e-01 + 4.0381920850017877e-01 1.3954539730049080e+00 -8.3302659910314936e-01 + 6.2711190378971793e-01 2.0919592045098914e+00 -1.1606828174522548e+00 + 9.1680967879297959e-01 2.7893835781945828e+00 -1.3105658934254061e+00 + 1.2916118843197006e+00 3.4219102481731829e+00 -1.1621236963689627e+00 + 1.6839485516121537e+00 3.8861748470236677e+00 -6.9384161826120794e-01 + 1.9953168655394711e+00 4.1004551744155453e+00 1.5895852805981825e-02 + 2.1529589942772205e+00 4.0255356174835466e+00 8.4270712776184231e-01 + 2.1392314669131900e+00 3.6667581534577449e+00 1.6613801088057312e+00 + 1.9749827955554531e+00 3.0593787907966101e+00 2.3556443038438708e+00 + 1.7106501343537033e+00 2.2914208628211017e+00 2.8412574112454112e+00 + 1.4080494867316826e+00 1.4896433980052255e+00 3.1486688711714295e+00 + 1.0989396796467885e+00 7.3048357311409839e-01 3.4588471458709122e+00 + 8.5005248239740328e-01 1.1017408547353313e-01 3.9938793256712541e+00 + 9.1838639719125437e-01 -8.2986527519065767e-02 4.7769388837157818e+00 + 1.3966901300202499e+00 2.2212002568813594e-01 5.3980612002899129e+00 + 2.0564297984604378e+00 7.0987585420351662e-01 5.7046396921786870e+00 + 2.7975588576813468e+00 1.2126387487860852e+00 5.8413716536044600e+00 + 3.5696157835357929e+00 1.6479295239706007e+00 6.1412396352518011e+00 + id 11497 + loc 4.7416725754737854e-01 7.0874476432800293e-01 410 + blend 0.0000000000000000e+00 + interp 4.2857810442555361e-01:3.2128925706775824e-01:9.8282081027493917e-02:3.4555129793214551e-01:1.0225921975870624e+00:3.9143407808753655e-01:1.8331341100921934e+00:3.7303580029323580e-01:2.2628058522922516e+00:3.8360803615439948e-01:2.9571086666861146e+00:3.5999394843251609e-01:3.2027642613054850e+00:4.2857381864450939e-01:3.8169739505208491e+00 + CVs 20 + 3.8500982847132570e-01 8.1190411760663148e-02 -2.0772952690311616e-01 + 7.0931216027657562e-01 1.2319208814963473e-01 -3.7158250776438806e-01 + 1.0248024610813573e+00 1.4827898184517085e-01 -5.0842586578936155e-01 + 1.3556170389459949e+00 1.6738931347736608e-01 -6.2576845727829622e-01 + 1.6983828149685265e+00 1.8017557775483217e-01 -7.2304508251052213e-01 + 2.0479916887578198e+00 1.8648842215794337e-01 -7.9562378800917033e-01 + 2.3961229996273654e+00 1.8635609289047128e-01 -8.3234483477426680e-01 + 2.7302861183638134e+00 1.7910276860818630e-01 -8.2004677965317030e-01 + 3.0344451798479022e+00 1.6323553058750617e-01 -7.5088861819520147e-01 + 3.2918013747476524e+00 1.4004308359978834e-01 -6.2516807200704783e-01 + 3.4933996415863193e+00 1.0979417910155886e-01 -4.5649683423572457e-01 + 3.6613634073616850e+00 6.1561662165860787e-02 -2.7719326100069136e-01 + 3.8504416606208220e+00 -2.6345510679240292e-02 -1.2269659074726186e-01 + 4.0875473331509804e+00 -1.6588311126433775e-01 -1.1098565320225573e-02 + 4.3550708540376455e+00 -3.5000925776208858e-01 5.2557077519393980e-02 + 4.6343337864453797e+00 -5.7028008289070664e-01 5.9034634275261233e-02 + 4.9123011372032197e+00 -8.1945660243291929e-01 -6.3094040078885416e-03 + 5.1690187476000862e+00 -1.0784201288155217e+00 -1.4385095048769764e-01 + 5.3642706641693012e+00 -1.2203927009750726e+00 -1.9582127470368865e-01 + id 11498 + loc 1.7373165488243103e-01 6.6220092773437500e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0886158956640906e-01:4.0885750095051343e-01:2.8192707985426502e-02:3.4184429347398915e-01:1.4719890502314228e+00:3.4895738320241698e-01:2.2388842137314366e+00:2.7790119055452994e-01:2.9815374344535730e+00:3.4343329585956534e-01:3.4299288211840295e+00 + CVs 20 + -3.0274898508155401e-01 4.5453670751372122e-01 3.5296642028590153e-01 + -5.1325881517822836e-01 8.1804760817945965e-01 6.2218850699147699e-01 + -6.5945758537568389e-01 1.1442233942272977e+00 8.8546250380837299e-01 + -7.9491375905777106e-01 1.4640135708519573e+00 1.1373067123557021e+00 + -9.6693456008310918e-01 1.7759298756944493e+00 1.3243315967498550e+00 + -1.1907726311341096e+00 2.0646291813077600e+00 1.4147440517561440e+00 + -1.4380878192515154e+00 2.3009949700911299e+00 1.4082539450616114e+00 + -1.6573215370543066e+00 2.4671161772387804e+00 1.3425500130157553e+00 + -1.8358664564800420e+00 2.5832960693382994e+00 1.2650375719016571e+00 + -1.9840427830772016e+00 2.6647675990447603e+00 1.1395745648530751e+00 + -2.0503576221993791e+00 2.6924524235766674e+00 9.2853441310950280e-01 + -2.0083200737329143e+00 2.6557711467609932e+00 6.6525576959780586e-01 + -1.8662627876778066e+00 2.5497493201264558e+00 4.4210944003072972e-01 + -1.6757927993421180e+00 2.3986224582067148e+00 3.8035215610574347e-01 + -1.4651486338623840e+00 2.2075362655607633e+00 5.0705778052448180e-01 + -1.2105506455118817e+00 1.9117426038255916e+00 7.5009679037051902e-01 + -8.5540229880254326e-01 1.3559613036590088e+00 9.7840710230501038e-01 + -5.0382754220375947e-01 6.2534304409217856e-01 7.8585367046830690e-01 + -5.3885758572739784e-01 5.8487733108938855e-01 6.3231663556511086e-01 + id 11499 + loc 5.4819786548614502e-01 8.9550501108169556e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6353071563594439e-01:2.7362670435264558e-01:6.8029658428557016e-02:4.5571373613521798e-01:1.0002289182598256e+00:4.0735056264266506e-01:1.8443484810603432e+00:3.0559079645326109e-01:2.2304088679385026e+00:4.6352608032878806e-01:3.0268788130748279e+00:3.4605453299679251e-01:3.6576125686329806e+00 + CVs 20 + 1.5041138888545263e-01 3.4403343535599656e-01 -2.8422810546287997e-01 + 3.2083576636516159e-01 7.0360335285259756e-01 -5.6097058436857805e-01 + 5.3131894409422176e-01 1.0696358933012950e+00 -8.4966995831317027e-01 + 7.8921235181936533e-01 1.4276871391519081e+00 -1.1583558333625394e+00 + 1.0866574973750349e+00 1.7569870908600511e+00 -1.4928187073696118e+00 + 1.4001160463131115e+00 2.0260763696099477e+00 -1.8661713571198675e+00 + 1.6973170566198428e+00 2.1899985409318838e+00 -2.2852047674860767e+00 + 1.9412195991501855e+00 2.1959600274640203e+00 -2.7179069804471405e+00 + 2.1137095220912894e+00 2.0358127058307360e+00 -3.0934531141268597e+00 + 2.2396243689045119e+00 1.7607080609795036e+00 -3.3724209737663351e+00 + 2.3518824604554562e+00 1.4279320310967423e+00 -3.5541103957819247e+00 + 2.4662658512253648e+00 1.0811722791669494e+00 -3.6575111746237554e+00 + 2.5806186047264479e+00 7.2107829517456201e-01 -3.7219192651699275e+00 + 2.7042945851963420e+00 2.8437195042515689e-01 -3.8089858531874947e+00 + 2.8798806695961487e+00 -2.7562088327580558e-01 -4.0180829910323119e+00 + 3.1532833750201998e+00 -8.8305479000461851e-01 -4.4900476033830321e+00 + 3.5328392159490778e+00 -1.2912770880767492e+00 -5.3209764994152877e+00 + 3.8515451655946049e+00 -1.2221033546653697e+00 -6.1777676948148983e+00 + 3.9002603265472504e+00 -9.3451615991767856e-01 -6.5212319118843469e+00 + id 11500 + loc 9.7282612323760986e-01 3.1265643239021301e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7077992849708505e-01:3.0060689411165858e-01:1.1478230006107926e-02:4.5156750711934240e-01:7.9665256621909508e-01:4.7077522069780009e-01:1.0803122703270955e+00:3.7283282954133473e-01:1.8325724178546201e+00:3.4507646148073257e-01:2.1008500393507115e+00:3.9265411280606966e-01:2.7247336915742442e+00:3.0058539166921311e-01:3.0646645282249501e+00 + CVs 20 + -1.0919103701645480e-01 2.5330887811689107e-01 2.1256496460802360e-01 + -1.8934078568065787e-01 5.2716464468465740e-01 4.0234378281594801e-01 + -2.6526307437044688e-01 8.0666858151185006e-01 5.6580490940736361e-01 + -3.5939646394429237e-01 1.0794035572148637e+00 7.0978517482813297e-01 + -4.9028638650006051e-01 1.3298068930499354e+00 8.4532023844425885e-01 + -6.6412114123499000e-01 1.5369051342501203e+00 9.7497471004964287e-01 + -8.6407025726565301e-01 1.6832331637049567e+00 1.0879595687074346e+00 + -1.0517913022133634e+00 1.7665577949383797e+00 1.1657058233020496e+00 + -1.2025392173632934e+00 1.8019058049445147e+00 1.2013051188209807e+00 + -1.3269593643237743e+00 1.7970614242576186e+00 1.1940403475388148e+00 + -1.4315796322656720e+00 1.7703027428267442e+00 1.1493186826104014e+00 + -1.5168634468788478e+00 1.7559168604707178e+00 1.0961498784740202e+00 + -1.5941105676431786e+00 1.7574289289864851e+00 1.0394530776693238e+00 + -1.6433419336864015e+00 1.7143792607911261e+00 8.7927484030910252e-01 + -1.6234126467017631e+00 1.5579443657447980e+00 5.2711971114138390e-01 + -1.5899993026813668e+00 1.2550327297626385e+00 4.7712184236626043e-02 + -1.6563554711447785e+00 8.2621868254103825e-01 -4.5885483983277792e-01 + -1.9706903537035316e+00 4.5303192241818391e-01 -9.1282233056768169e-01 + -2.3023040598030575e+00 4.7975580296564557e-01 -1.0366321621930097e+00 + id 11501 + loc 5.4293662309646606e-01 6.6554063558578491e-01 1077 + blend 0.0000000000000000e+00 + interp 3.6727766638408793e-01:3.6727399360742413e-01:6.7328191829185635e-01:3.3081089493887861e-01:1.0843402554022117e+00:3.3570713465109092e-01:1.8980668794950613e+00:3.5324612869455663e-01:2.8675767458918195e+00:3.2053556882313639e-01:3.8897155290488357e+00 + CVs 20 + 2.2146447618155574e-01 2.5405995700051703e-01 -2.2340849467502952e-01 + 4.1766730945377950e-01 5.5271439047892756e-01 -4.2897408430170619e-01 + 6.2508952054222200e-01 8.5017619835393199e-01 -6.4267500014441159e-01 + 8.5943846490430131e-01 1.1215131719893097e+00 -8.7795301445417140e-01 + 1.1228245784964683e+00 1.3523643331890296e+00 -1.1326970016596141e+00 + 1.4188798030231216e+00 1.5301019414277877e+00 -1.3932543461758267e+00 + 1.7499093654270961e+00 1.6493524701394873e+00 -1.6417282005303651e+00 + 2.1147146348555212e+00 1.7119359198880519e+00 -1.8667338346153026e+00 + 2.5085838687638637e+00 1.7209855204350712e+00 -2.0655588656080890e+00 + 2.9198902779946736e+00 1.6794121266286748e+00 -2.2390665073853775e+00 + 3.3362942709877430e+00 1.5881446968595951e+00 -2.3963510963256289e+00 + 3.7472908613756997e+00 1.4424523679944365e+00 -2.5515748714744513e+00 + 4.1465398663296424e+00 1.2286884801138944e+00 -2.7211377802602605e+00 + 4.5291232281890572e+00 9.2025595727976750e-01 -2.9228987329227847e+00 + 4.8797557249043386e+00 4.6985091471074436e-01 -3.1826159920474333e+00 + 5.1309353627449079e+00 -1.5818383365807342e-01 -3.5311114842916900e+00 + 5.1684374612830775e+00 -8.7156705243679333e-01 -3.9510201104103975e+00 + 5.0021733287683201e+00 -1.4638459081251733e+00 -4.3620617819934875e+00 + 4.9413233394147076e+00 -1.5224100624106285e+00 -4.4526725236898210e+00 + id 11502 + loc 3.7907305359840393e-01 5.2416306734085083e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5759761135201998e-01:3.4684095318631353e-01:6.2909224034770039e-01:4.5759303537590651e-01:1.2478160720478322e+00:3.4600455284578996e-01:1.9992358742152883e+00:4.4880119971131616e-01:2.6551202753697765e+00:3.2838876303823605e-01:3.0478221080206502e+00:3.0849443178277636e-01:3.9975601561607466e+00 + CVs 20 + 1.0990873206127093e-01 3.1664355541531858e-01 -8.4235220424699192e-02 + 2.5421612402887045e-01 6.3142053807852438e-01 -1.8967508837941033e-01 + 4.0304559102891874e-01 9.3844878603828263e-01 -3.2060039755758096e-01 + 5.3975192271531891e-01 1.2319850943400170e+00 -4.8146143537149749e-01 + 6.6142019069690627e-01 1.5038153475979841e+00 -6.7558536604514519e-01 + 7.7111690094147989e-01 1.7450541385350866e+00 -9.0360124474798265e-01 + 8.7294910970937456e-01 1.9449760812787964e+00 -1.1623609006815956e+00 + 9.6407753634867277e-01 2.0936518605083876e+00 -1.4439277489507329e+00 + 1.0361948093878386e+00 2.1863766872024053e+00 -1.7380661369987822e+00 + 1.0827217577814794e+00 2.2243245888783321e+00 -2.0355508086606675e+00 + 1.1009272124880574e+00 2.2133125880513900e+00 -2.3271664392820277e+00 + 1.0893675645788188e+00 2.1626698558388058e+00 -2.6027861961119880e+00 + 1.0473113680873751e+00 2.0877552682845026e+00 -2.8503281205188240e+00 + 9.7899733624646745e-01 2.0199447430928532e+00 -3.0479989887988732e+00 + 9.0905877995751427e-01 2.0019820006153095e+00 -3.1716773398609566e+00 + 8.8047004868020418e-01 2.0432407993773225e+00 -3.2246392472523508e+00 + 9.2346189035695259e-01 2.1099013851541213e+00 -3.2365141997784654e+00 + 1.0003346782565115e+00 2.1495997710301928e+00 -3.2528719247843916e+00 + 7.7956792135147868e-01 2.1477274468706087e+00 -3.3548746470459823e+00 + id 11503 + loc 4.7416725754737854e-01 9.6440136432647705e-01 1047 + blend 0.0000000000000000e+00 + interp 3.7730718181948580e-01:2.8486855845145242e-01:1.5684222649044255e-01:3.0650537749166218e-01:1.0016935339230182e+00:2.6260093399437423e-01:1.0873638130286936e+00:3.7730340874766760e-01:1.8254211049552320e+00:3.5354249008067840e-01:2.2104169247029946e+00:2.8662964082818315e-01:3.1392077036248871e+00 + CVs 20 + 3.2708010691181200e-01 7.1284749593443186e-01 -4.9840723867928605e-01 + 6.8784426746874905e-01 1.4040108220605922e+00 -9.1114288608762262e-01 + 1.0966213628944368e+00 2.0628755448310385e+00 -1.1915039773200502e+00 + 1.5405411268834250e+00 2.5991988988306467e+00 -1.2234172986550593e+00 + 1.9416278163060063e+00 2.8935824804605881e+00 -9.7597284217940827e-01 + 2.2239412682683644e+00 2.9378229456152125e+00 -5.6084142813407500e-01 + 2.3569454086138544e+00 2.7836084113796042e+00 -8.5293321356449292e-02 + 2.3519609866766595e+00 2.4856800523852587e+00 4.0563442080576995e-01 + 2.2269038628612456e+00 2.0762486162471667e+00 8.7561820426254966e-01 + 2.0142689121552046e+00 1.5797510491051070e+00 1.2919444204325692e+00 + 1.7482187220869660e+00 1.0131589164821002e+00 1.6805537871777689e+00 + 1.4446239725180230e+00 4.1656964719938161e-01 2.1368918061578652e+00 + 1.1497588901061142e+00 -1.1928310039984935e-01 2.7600273597745639e+00 + 1.0111883792303857e+00 -4.5525598785308730e-01 3.5929318546049398e+00 + 1.2978715806046230e+00 -3.8541619507383795e-01 4.4654428007549987e+00 + 1.8830484607840186e+00 7.1099649155662803e-02 4.8552523399019858e+00 + 2.4193144511193490e+00 4.6198652687526698e-01 4.8849547796417632e+00 + 2.8997757781213460e+00 7.1678189113397073e-01 4.8649933556413067e+00 + 3.3628964187961961e+00 9.6908864449697507e-01 5.0710815242290401e+00 + id 11504 + loc 3.2732424139976501e-01 8.4093713760375977e-01 410 + blend 0.0000000000000000e+00 + interp 3.6474050531956015e-01:2.6321921974950274e-01:7.8867769889611583e-01:3.4514573078606270e-01:1.2660822509677712e+00:3.3938625718240545e-01:2.0159049778207576e+00:3.1561168551235541e-01:3.0102376453226620e+00:3.6473685791450700e-01:3.8631210662179361e+00 + CVs 20 + 4.4975270123527994e-01 7.5138770587441284e-02 -2.0889031835708954e-01 + 8.0343092011007822e-01 8.7227992374750374e-02 -4.0640321530136692e-01 + 1.1427526681480771e+00 8.2380392867361596e-02 -5.9258358999456884e-01 + 1.4901129125011434e+00 7.5690114473923154e-02 -7.6809796950753972e-01 + 1.8425381139777208e+00 6.8217214446309904e-02 -9.3083934806675095e-01 + 2.2014710976143235e+00 6.1826907444458734e-02 -1.0741473972753433e+00 + 2.5681747100369101e+00 5.7882179608976569e-02 -1.1865275039498693e+00 + 2.9400551171875451e+00 5.6072977753652387e-02 -1.2574968836551552e+00 + 3.3128640573612169e+00 5.6742016887169733e-02 -1.2795927554925639e+00 + 3.6793529814493429e+00 6.1503894120320313e-02 -1.2491298437271066e+00 + 4.0154065368550880e+00 6.4864863779052095e-02 -1.1825592486749272e+00 + 4.2867255632160326e+00 5.0332560802655912e-02 -1.1340831695379356e+00 + 4.4886136699516532e+00 1.5173387615389222e-02 -1.1432670382683643e+00 + 4.6627427707426472e+00 -2.5922823145497098e-02 -1.1850505233603914e+00 + 4.8497804194748326e+00 -7.1275789867203176e-02 -1.2303484097833099e+00 + 5.0494407059344226e+00 -1.2292602029661559e-01 -1.2794271803970583e+00 + 5.2506975601706927e+00 -1.7821468217663616e-01 -1.3369789433331907e+00 + 5.4593678538348742e+00 -2.3928572984946772e-01 -1.3982080351786101e+00 + 5.7217823054045960e+00 -3.1530473212814814e-01 -1.4264994995766296e+00 + id 11505 + loc 2.6256731152534485e-01 6.2244904041290283e-01 1075 + blend 0.0000000000000000e+00 + interp 3.8928261439595868e-01:2.7526178331723472e-01:7.1311993072574920e-01:3.8927872156981475e-01:1.2707665373742465e+00:3.6779042408386892e-01:1.9771809807750684e+00:3.1117867013521228e-01:2.9138624612745767e+00:2.5084982493854235e-01:3.7653753412927591e+00 + CVs 20 + 5.7019078306919213e-02 2.6287664616607875e-01 -1.4193820448495600e-01 + 1.2782594081009133e-01 5.0735666596333517e-01 -2.8990757259479605e-01 + 2.0477706188524827e-01 7.3350605063262220e-01 -4.2471618788522053e-01 + 2.8701117213177885e-01 9.4615905338494777e-01 -5.4410716698392181e-01 + 3.7749155922279787e-01 1.1442847296077867e+00 -6.5358675960726897e-01 + 4.7751809702834419e-01 1.3259785062612979e+00 -7.5330021172906658e-01 + 5.8385770511049007e-01 1.4988367324307179e+00 -8.4103289062248920e-01 + 6.8816714188413219e-01 1.6827661381285091e+00 -9.1609326459961471e-01 + 7.8746270641923666e-01 1.9044413122769632e+00 -9.8383359409986659e-01 + 8.9350384422514506e-01 2.1904412150559374e+00 -1.0662035572286108e+00 + 1.0325851964482526e+00 2.5506282358165344e+00 -1.2120447289272285e+00 + 1.2354978804817542e+00 2.9483858967594596e+00 -1.4912420034256679e+00 + 1.4881473377226118e+00 3.2764702631437186e+00 -1.9361243499431791e+00 + 1.7278835728403568e+00 3.4242761697824760e+00 -2.4652243809812440e+00 + 1.9433047969142145e+00 3.3681202047839083e+00 -2.9776299122419534e+00 + 2.1672405819991361e+00 3.1091233149052644e+00 -3.4373914031193937e+00 + 2.3696439283570281e+00 2.6599053386845544e+00 -3.8395095720692609e+00 + 2.4500445096269226e+00 2.1080788591706838e+00 -4.1571630896347216e+00 + 2.3456536938013945e+00 1.6673087998230085e+00 -4.2624198476044155e+00 + id 11506 + loc 8.5306948423385620e-01 6.6605895757675171e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9846897581909940e-01:3.8714998343613505e-01:4.3633538893772528e-01:3.4972619620357315e-01:1.0281163948922056e+00:3.9846499112934125e-01:1.8451406615797175e+00:3.1687000779327318e-01:2.4297307329484426e+00:3.3237860617957915e-01:3.1920533749473732e+00:3.5621575420136309e-01:3.9649728117519238e+00 + CVs 20 + -3.0886668467864109e-01 4.0691633622112755e-01 5.9096425193737312e-03 + -5.3159882203958719e-01 8.1049549472806071e-01 2.3617786331259827e-02 + -6.9450316433597603e-01 1.2154902865109922e+00 5.6349110634466459e-02 + -8.4860748325460889e-01 1.6161018503213769e+00 5.2440271442751540e-02 + -1.0418685347662624e+00 1.9957097214070421e+00 -4.0107252661723214e-02 + -1.2920386321476820e+00 2.3253604532004668e+00 -2.3861514382521243e-01 + -1.5668776985473205e+00 2.5574851717822975e+00 -5.4254529798951268e-01 + -1.7733607389210662e+00 2.6535728614040366e+00 -9.2762285492722052e-01 + -1.8221752787105170e+00 2.6269338009973415e+00 -1.3323221668483973e+00 + -1.7295561084926243e+00 2.5280833573098116e+00 -1.7023918834792764e+00 + -1.5559317872677201e+00 2.3700991094602610e+00 -2.0439608636254278e+00 + -1.2980588554827519e+00 2.1230377989114895e+00 -2.3517402084612478e+00 + -9.5759038670159735e-01 1.7858466473143013e+00 -2.5825884927955016e+00 + -6.4620443093264379e-01 1.4632650774661233e+00 -2.7667966574268297e+00 + -5.0548169039992907e-01 1.2907541394520461e+00 -3.0303079318831800e+00 + -6.0203660107730572e-01 1.4111686984686624e+00 -3.3475881940457382e+00 + -9.3684813139004153e-01 1.9892131225427985e+00 -3.3895785624005814e+00 + -1.2655320268985129e+00 2.6840124370103116e+00 -2.7935808319714521e+00 + -1.3379648286713837e+00 2.8307785517041530e+00 -3.0597763723937366e+00 + id 11507 + loc 6.3985794782638550e-01 2.8151312470436096e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6430164868534998e-01:3.5032310383492299e-01:5.1896464489826089e-01:2.9087907775661581e-01:1.0180768873877413e+00:3.1387924503197390e-01:1.9931693920426190e+00:3.6429800566886317e-01:2.4496875497242900e+00:3.2356159856680283e-01:3.0511395069331213e+00:3.1806532400965326e-01:3.9309313028244897e+00 + CVs 20 + -2.4838911641540551e-01 2.8626996375076191e-01 1.6484146702745295e-01 + -4.8935195196556486e-01 5.7514061301980768e-01 3.5127930805531654e-01 + -7.2613626413950993e-01 8.5413002547277261e-01 5.7167628812896609e-01 + -9.4961278982196751e-01 1.1107094811810132e+00 8.3622351785562321e-01 + -1.1437014084795227e+00 1.3303026771591189e+00 1.1488758043727194e+00 + -1.3128180819598123e+00 1.4995123459215052e+00 1.5073772560668484e+00 + -1.4848273577072737e+00 1.6121215751821087e+00 1.9090839241018025e+00 + -1.6857816900642393e+00 1.6626714322204563e+00 2.3456401973733998e+00 + -1.9234168053145235e+00 1.6405717687673842e+00 2.7948590136026765e+00 + -2.1850342134749243e+00 1.5314818434277959e+00 3.2242443549021353e+00 + -2.4266745223861408e+00 1.3255233705673071e+00 3.5958097997989129e+00 + -2.5557924288440983e+00 1.0382852229060149e+00 3.8641088971389830e+00 + -2.4784314358129209e+00 7.5035705226980343e-01 3.9863981741627890e+00 + -2.2567176098939092e+00 5.5448525972435847e-01 3.9952299468991255e+00 + -2.0216347027013799e+00 4.1509668520552256e-01 3.9781232726850422e+00 + -1.7793313392801475e+00 3.9147837024222221e-01 3.9542378732228554e+00 + -1.6295230538639065e+00 7.9548789175271895e-01 3.9418599078300356e+00 + -1.9316525047309927e+00 1.4402030013787430e+00 3.9920995406386095e+00 + -1.6297851603016118e+00 1.3925572238439672e+00 4.0292671213217401e+00 + id 11508 + loc 5.7301420718431473e-02 4.7253221273422241e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1648396482861958e-01:3.1668415061825456e-01:4.5459529294520462e-02:3.8039918613788581e-01:9.9392527948277232e-01:4.4064396834133718e-01:1.3976806287117494e+00:2.5217176322369961e-01:1.9929061634528962e+00:3.1490286254660643e-01:2.8387936943644725e+00:5.1647879998897128e-01:3.3520362995691926e+00 + CVs 20 + -2.0548329413755645e-02 3.5038523699879237e-01 -1.5343033416727780e-01 + -8.3482167910697236e-02 7.1417739932634150e-01 -2.9315645177353888e-01 + -1.8578667336465654e-01 1.0708120328070074e+00 -4.4577237036051531e-01 + -3.3237304762012354e-01 1.4017075288095695e+00 -6.2514017517112896e-01 + -5.2767595616780794e-01 1.6841884103710465e+00 -8.3529587806010719e-01 + -7.6636107400675213e-01 1.8938025671347352e+00 -1.0764497323358504e+00 + -1.0325206807434624e+00 2.0129373334131064e+00 -1.3427853398542728e+00 + -1.3045797579583949e+00 2.0374687734561170e+00 -1.6237750231429429e+00 + -1.5643548343627871e+00 1.9737974158534366e+00 -1.9060229081771956e+00 + -1.8036909552224785e+00 1.8350180632196806e+00 -2.1735852389228336e+00 + -2.0222877786463846e+00 1.6360725884524783e+00 -2.4095991759231157e+00 + -2.2189762513349698e+00 1.3901243273786852e+00 -2.5972863189408093e+00 + -2.3907227650682374e+00 1.1108795224652721e+00 -2.7198754857506415e+00 + -2.5369366816830863e+00 8.1740765023789397e-01 -2.7616228449844424e+00 + -2.6581638901852358e+00 5.3736433241747861e-01 -2.7090958680965858e+00 + -2.7559634404551785e+00 3.0999757908562908e-01 -2.5675568841512657e+00 + -2.8508934969799578e+00 1.5320304512846361e-01 -2.3717968222091068e+00 + -2.9674067929421661e+00 5.5051354129108665e-02 -2.1410295444687191e+00 + -3.0495923480911236e+00 -6.2348310625970793e-02 -1.9415996912184830e+00 + id 11509 + loc 4.4383221864700317e-01 2.2760373353958130e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7649989403945753e-01:3.8280926487239031e-01:9.1968637367183448e-01:4.7649512904051716e-01:1.2928332630407275e+00:3.5825286322233191e-01:1.9994050466876647e+00:4.4421113564852183e-01:2.9375662869028973e+00:2.8116502800510679e-01:3.1078017296746183e+00:2.8691624019236778e-01:3.9468444703697063e+00 + CVs 20 + -2.9110022321106033e-01 3.7547843147495674e-01 -1.2208972202832635e-01 + -5.3444407236876135e-01 7.5977416529507358e-01 -2.2348630480586612e-01 + -7.4546712645865543e-01 1.1550251198929065e+00 -2.9621076437408550e-01 + -9.1311394629342857e-01 1.5552840457128572e+00 -3.3268171920229500e-01 + -1.0446154668382976e+00 1.9683126408048175e+00 -3.3566164777641949e-01 + -1.2083087721177763e+00 2.4150440102726209e+00 -3.2064376223320473e-01 + -1.5059672376527613e+00 2.8544385004011863e+00 -3.0803658305800630e-01 + -1.9646715197344939e+00 3.1867441519804709e+00 -3.1595296579782195e-01 + -2.5344449492789747e+00 3.3593001123108790e+00 -3.6909392234917260e-01 + -3.1418094742913780e+00 3.3676149967250781e+00 -5.0078827946364046e-01 + -3.7130634505725104e+00 3.2424602313421924e+00 -7.3951463648534677e-01 + -4.1929788648158830e+00 3.0309874048882333e+00 -1.0966008978869493e+00 + -4.5540035657396620e+00 2.7682695932079602e+00 -1.5549988941302668e+00 + -4.7950413799264169e+00 2.4376599130696004e+00 -2.0976548447002368e+00 + -4.8926273583321187e+00 1.9667595565144294e+00 -2.7021011774158366e+00 + -4.7673125151357398e+00 1.2884363640830183e+00 -3.2805279275498447e+00 + -4.2254734926863895e+00 3.7153534556371304e-01 -3.6482536704647042e+00 + -3.1559275614222932e+00 -4.3277428067163004e-01 -3.4431592584705686e+00 + -2.7427174097321969e+00 -6.7814069099610619e-01 -3.4432850970298476e+00 + id 11510 + loc 3.0847480893135071e-01 4.4855675101280212e-01 1047 + blend 0.0000000000000000e+00 + interp 4.2692920053949424e-01:4.2692493124748887e-01:3.0430644855321876e-01:3.0438247232088966e-01:1.2382382016987241e+00:2.8359386180573465e-01:1.9883923954175273e+00:2.8470341845662284e-01:2.7552590953483569e+00:2.8643211275767505e-01:3.9736984447662578e+00 + CVs 20 + -4.5870945686219078e-01 6.8982553231369892e-01 -1.2521088673457542e-01 + -8.4285692134085066e-01 1.3383081457775767e+00 -3.0115958849993762e-01 + -1.1312457958529021e+00 1.9274420061910962e+00 -5.2494468271898798e-01 + -1.2831168394248003e+00 2.4142123584585633e+00 -7.8937365954067618e-01 + -1.2831180672190148e+00 2.7850647895468312e+00 -1.0858815020658634e+00 + -1.1448673338897302e+00 3.0544362731491512e+00 -1.4067548555210232e+00 + -8.9232873136811297e-01 3.2199330180730543e+00 -1.7250985544509785e+00 + -5.4715093124872971e-01 3.2688491171636507e+00 -2.0072710552386015e+00 + -1.3457812568457084e-01 3.1939000333085019e+00 -2.2231416800558286e+00 + 3.2328949750708857e-01 2.9825978537047293e+00 -2.3484373177041586e+00 + 7.9400289217992126e-01 2.5945828716859918e+00 -2.3731133089695766e+00 + 1.2377895955618667e+00 1.9777360638098578e+00 -2.2931197341672176e+00 + 1.6945289147746680e+00 1.1577897835940518e+00 -2.0738195624663813e+00 + 2.2759625105525831e+00 2.7907803038464096e-01 -1.7111754697628132e+00 + 3.0501601386371764e+00 -4.2511705194819460e-01 -1.3609021372703318e+00 + 3.9390242972688223e+00 -7.0409731964199418e-01 -1.3065117689022148e+00 + 4.7195509100491790e+00 -5.2826388799552770e-01 -1.6267312713247053e+00 + 5.3072851629450657e+00 -2.4435577899340366e-02 -2.1883800459100700e+00 + 5.9396131885101227e+00 6.8549845204189985e-01 -2.8430491488864273e+00 + id 11511 + loc 3.0847480893135071e-01 3.2964721322059631e-01 410 + blend 0.0000000000000000e+00 + interp 3.6315111098878960e-01:3.4826966554648953e-01:7.8452530863946546e-01:3.2373856069993673e-01:1.1780111408209526e+00:3.1107219817810944e-01:2.0008255621626283e+00:3.6314747947767972e-01:2.7198808338620202e+00:3.2898916223044805e-01:3.1292805011809710e+00:3.1892247691991749e-01:3.9949298823821788e+00 + CVs 20 + -1.4169519550110091e-01 1.1843479674942547e-01 -2.4706484409517337e-01 + -2.5301025627062546e-01 2.2480662902120468e-01 -4.8440146765505865e-01 + -3.4325246629912509e-01 3.2423337855294870e-01 -7.3272061712956060e-01 + -4.1679268833688243e-01 4.1913212366525909e-01 -1.0025351805109217e+00 + -4.7310292883302918e-01 5.0696404597037825e-01 -1.2910313948547825e+00 + -5.0710699078209187e-01 5.8443935715817330e-01 -1.5911977550398038e+00 + -5.0648669658497347e-01 6.4789647454932808e-01 -1.8913177894522823e+00 + -4.5750920379791443e-01 6.9316251225137737e-01 -2.1758755728853076e+00 + -3.5227740552489828e-01 7.1657610026426444e-01 -2.4271224162335532e+00 + -1.9298636849987394e-01 7.1767272645607838e-01 -2.6288166779832052e+00 + 2.3985266533276262e-03 6.9784612366587573e-01 -2.7819452851387179e+00 + 1.9921299760752464e-01 6.5165907205505191e-01 -2.9334008728884449e+00 + 3.5797435198094352e-01 5.6039158868441863e-01 -3.1541216970036299e+00 + 4.4318428304779733e-01 4.0716162682639134e-01 -3.4521544717134587e+00 + 4.4120836617098924e-01 1.9961146544143671e-01 -3.7738736935538366e+00 + 3.5035935684961322e-01 -4.4033802867776028e-02 -4.0784875825212987e+00 + 1.6677599758544071e-01 -3.0395664509459097e-01 -4.3442770522601268e+00 + -9.0804895625673621e-02 -5.5231665153199749e-01 -4.5517898374948143e+00 + -1.8832050860211003e-01 -6.9380211520213209e-01 -4.7421121337519025e+00 + id 11512 + loc 6.0757821798324585e-01 8.1965851783752441e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0186476359613882e-01:3.8287757581920423e-01:8.7779410187747342e-01:4.0142247838709427e-01:1.4739774502452740e+00:3.5725795778658548e-01:2.0305804173790740e+00:4.0186074494850288e-01:2.9619902558924678e+00:3.3140467557543640e-01:3.9444924516777400e+00 + CVs 20 + 1.3587376913263283e-01 3.8276054655056618e-01 -2.2330415305423393e-01 + 2.9527945376173748e-01 7.1513262079337925e-01 -4.8071599520836544e-01 + 4.5063737124647735e-01 9.9702691165105706e-01 -7.7343541974801511e-01 + 5.8502026400607088e-01 1.2196251713780262e+00 -1.0976102025054972e+00 + 6.9500747192486212e-01 1.3776335128555586e+00 -1.4436617802393106e+00 + 7.9223600191010268e-01 1.4740728893908241e+00 -1.7963856164311238e+00 + 8.9677371895080971e-01 1.5183978064487254e+00 -2.1417270708416440e+00 + 1.0231973558517127e+00 1.5189328310245231e+00 -2.4659266761548841e+00 + 1.1718588526283353e+00 1.4779469543678618e+00 -2.7491093388170289e+00 + 1.3251169109725225e+00 1.3953448847562711e+00 -2.9677959010784134e+00 + 1.4410112395713106e+00 1.2783546279212454e+00 -3.0988283268443375e+00 + 1.4575423623919701e+00 1.1632354020706712e+00 -3.1205126894993875e+00 + 1.3953983957260363e+00 1.0913980558313090e+00 -3.0709306225716313e+00 + 1.3514309668699016e+00 9.7157223132693782e-01 -3.0461193819466117e+00 + 1.3002660984279653e+00 7.4134754153923232e-01 -3.0481494863501282e+00 + 1.1406868052917587e+00 5.3836808281297333e-01 -3.0426120134332102e+00 + 8.4863471296567761e-01 6.0710404307058785e-01 -3.0424555179773165e+00 + 5.4270834915148636e-01 7.7544521869163840e-01 -3.0710480595677554e+00 + 6.9060439824622802e-02 6.5419946962321085e-01 -3.1057624516209157e+00 + id 11513 + loc 3.7865009903907776e-01 9.3829810619354248e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8987677642230143e-01:3.5508256795941173e-01:5.3406217712564930e-03:2.8164849783365875e-01:1.0033152357368369e+00:3.7699012623031058e-01:1.4839811318209692e+00:2.6103719855033880e-01:2.1503976236189635e+00:3.6599914748519702e-01:2.7305712957265218e+00:4.2516444077659948e-01:3.0075076304954695e+00:4.8987187765453721e-01:3.5407382811736468e+00 + CVs 20 + 4.0081370145068906e-01 2.5531478359805848e-01 -1.5150154265491350e-01 + 7.8064232513251353e-01 5.0239833671462952e-01 -3.1277488689131661e-01 + 1.1309867365481001e+00 7.2797755563367594e-01 -4.9110326877373595e-01 + 1.4407385056368738e+00 9.1344284232624628e-01 -6.9271818202005653e-01 + 1.6980512018818283e+00 1.0438899455774648e+00 -9.1749862679568839e-01 + 1.8920056360097333e+00 1.1133081214112488e+00 -1.1561604300642143e+00 + 2.0188243772804833e+00 1.1285310685895567e+00 -1.3924828397919551e+00 + 2.0859986407787852e+00 1.1073291200726652e+00 -1.6112315847887073e+00 + 2.1089627849352048e+00 1.0687411692761422e+00 -1.8029030251919846e+00 + 2.1082485109868592e+00 1.0279595516605053e+00 -1.9667972467564794e+00 + 2.0999515266177040e+00 9.9299135003238659e-01 -2.1080128782467811e+00 + 2.0894252268342015e+00 9.6824083251917570e-01 -2.2273670417510245e+00 + 2.0789398615434616e+00 9.6130105306420610e-01 -2.3246050724185783e+00 + 2.0764122727057317e+00 9.7983216572213039e-01 -2.4053632755918137e+00 + 2.0988903583775436e+00 1.0249509945119597e+00 -2.4707192130580133e+00 + 2.1678700527167161e+00 1.0839025384922054e+00 -2.5246051285891355e+00 + 2.2913323704294144e+00 1.1313790629970781e+00 -2.5852366573241254e+00 + 2.4415495715315982e+00 1.1446843981488442e+00 -2.6802933871574059e+00 + 2.2979258058886334e+00 1.1949145466099220e+00 -2.8505385991384795e+00 + id 11514 + loc 6.5679788589477539e-01 7.5720673799514771e-01 1047 + blend 0.0000000000000000e+00 + interp 2.9682475038129602e-01:2.8837640104536649e-01:6.1572202949601262e-01:2.9682178213379223e-01:1.4819932873306585e+00:2.6713506815264121e-01:2.6447972320574662e+00:2.8260263595529411e-01:3.4496868563070491e+00 + CVs 20 + 2.0377520403420649e-01 7.4905606680160208e-01 -4.9869698385863065e-01 + 4.5394374257705655e-01 1.4717447264232009e+00 -9.2505300041410532e-01 + 7.6185513893907664e-01 2.1533865899165736e+00 -1.2667425440613780e+00 + 1.1200561579597612e+00 2.7212481261897556e+00 -1.4352990429088650e+00 + 1.4992030916245853e+00 3.1196534109896632e+00 -1.3834245636801885e+00 + 1.8771334198365586e+00 3.3578960837879830e+00 -1.1547882741814059e+00 + 2.2328595474435642e+00 3.4477546587142047e+00 -8.0625777210293958e-01 + 2.5558655366688603e+00 3.3951256391538127e+00 -3.7336185525634424e-01 + 2.8388971809585604e+00 3.2048572543780072e+00 1.0494098279600017e-01 + 3.0722680838580598e+00 2.8757941408060854e+00 5.7830834077284377e-01 + 3.2420264675009389e+00 2.3979610712425554e+00 9.8588132795172978e-01 + 3.3254216702072781e+00 1.7636338521725337e+00 1.2627857099630915e+00 + 3.2645347310752530e+00 9.9507729641867815e-01 1.3990507097756391e+00 + 2.9669008136564448e+00 1.3372876489135765e-01 1.4525635015783029e+00 + 2.3506460337771307e+00 -8.6518149959634538e-01 1.6467034442543143e+00 + 1.7071439720414747e+00 -1.7024576686023236e+00 2.4854816045962238e+00 + 1.5237805097588755e+00 -1.8774239652675342e+00 3.7116451621419362e+00 + 1.7393775200021180e+00 -1.4521669908648940e+00 4.7253671139394662e+00 + 2.0740047696392825e+00 -7.5197117770751243e-01 5.1546982733080640e+00 + id 11515 + loc 3.1247171759605408e-01 6.0152506828308105e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5050702956719357e-01:4.5050252449689793e-01:2.5890367126028990e-01:3.9229869455341504e-01:9.9725082614386962e-01:4.2960222434188949e-01:1.6678966336169543e+00:3.0792245667082585e-01:2.5086915544291299e+00:2.6688888658813947e-01:3.0802096313997973e+00:3.8371787314190275e-01:3.8080812341295158e+00 + CVs 20 + -2.9594266625227530e-03 3.6371484196514348e-01 -1.4109018980460067e-01 + 2.1526155378215811e-02 7.2671908325253654e-01 -3.0031105159821975e-01 + 6.5912033788176005e-02 1.0825763401790016e+00 -4.7817529737256237e-01 + 1.3062745577778745e-01 1.4335918658284517e+00 -6.6945007123481504e-01 + 2.2653664030334425e-01 1.7894207266447857e+00 -8.6368522826228833e-01 + 3.5735963419643446e-01 2.1447114458776153e+00 -1.0777577222182284e+00 + 5.0874640869392962e-01 2.4662049751324671e+00 -1.3643591927194139e+00 + 6.5417708271430275e-01 2.7014925562280045e+00 -1.7524768566531193e+00 + 7.6335168048434676e-01 2.7812928860771562e+00 -2.2122043363139063e+00 + 8.1462335727629909e-01 2.6614975142612471e+00 -2.6769975262851315e+00 + 8.1065498559477045e-01 2.3528925384310586e+00 -3.0901863352000545e+00 + 7.8293870152882750e-01 1.8873877274218316e+00 -3.4289550977269410e+00 + 7.9324207173333916e-01 1.3093040933411881e+00 -3.7119683624143183e+00 + 8.9981551164124218e-01 6.9425450638190322e-01 -4.0042500009444089e+00 + 1.1160815185675892e+00 1.5289182426862202e-01 -4.4071447008743236e+00 + 1.4089900578066534e+00 -1.5973103449280995e-01 -4.9867449946585989e+00 + 1.6989424795078754e+00 -6.1348881993014664e-02 -5.6647563736213185e+00 + 1.9046841195811532e+00 3.7422822182342746e-01 -6.1868991359791448e+00 + 2.1081769587525256e+00 6.9050591554523755e-01 -6.5499598019920686e+00 + id 11516 + loc 8.7447381019592285e-01 7.9263228178024292e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5393678076743527e-01:2.9968034374430297e-01:5.7249561874515131e-02:3.7240121367374274e-01:9.1172374904831988e-01:3.2969183780644379e-01:1.2708804162346863e+00:3.2664914581608423e-01:2.0386154349823502e+00:3.3561556947827292e-01:2.9979608896875400e+00:4.5393224139962762e-01:3.7848499792124497e+00 + CVs 20 + -1.8415753661480153e-01 2.8569799752950586e-01 1.4198305455160731e-01 + -3.8082514592619332e-01 5.6793412777707530e-01 2.6746918196946895e-01 + -5.7569360010030246e-01 8.5128225998591622e-01 3.8501999334479675e-01 + -7.6527104470621932e-01 1.1328001779260541e+00 4.9075860402956833e-01 + -9.5885237067478446e-01 1.4050202477609568e+00 5.6987754299280835e-01 + -1.1621559236767618e+00 1.6575690809601695e+00 6.0885628951338844e-01 + -1.3729565222009696e+00 1.8774429320545010e+00 6.0075143199532233e-01 + -1.5784782967534348e+00 2.0520310172801137e+00 5.4723430489654246e-01 + -1.7609462138831411e+00 2.1703437681205626e+00 4.4268367822903931e-01 + -1.8964221635714333e+00 2.2174837575271598e+00 2.6914269217392750e-01 + -1.9543822911657218e+00 2.1943181789980906e+00 3.9685658562883974e-02 + -1.9275268182940559e+00 2.1197769110833131e+00 -2.0624110946270324e-01 + -1.8426547736232000e+00 1.9800191142208017e+00 -4.3265238683021590e-01 + -1.7278099096350144e+00 1.7303432115787349e+00 -6.0200324930307036e-01 + -1.5745804468675706e+00 1.3862540696403178e+00 -7.1920810174968675e-01 + -1.3566442177869849e+00 1.0060849238395888e+00 -8.6095996833788957e-01 + -1.0691828020316412e+00 6.5575331433716721e-01 -1.1195173511142285e+00 + -7.4992583324129536e-01 4.1322352925744871e-01 -1.5219963162826837e+00 + -4.4616122153864168e-01 2.0491023124816299e-01 -1.9348747431494893e+00 + id 11517 + loc 2.0670068264007568e-01 8.4877055883407593e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0367101508401591e-01:4.8316839740533468e-01:4.0974019720697497e-01:3.4150413271214208e-01:9.7198851857822344e-01:3.3835165797797506e-01:1.4330357638041369e+00:2.8502654741602745e-01:2.0145615292850594e+00:3.6508388857282420e-01:2.7676136770111981e+00:5.0366597837386506e-01:3.1232482426758219e+00:3.3104090821974635e-01:3.8871657862066011e+00 + CVs 20 + -2.6411328455757105e-01 3.8470885106922359e-01 3.1860911718871687e-01 + -4.6775767518527367e-01 6.9755566856291107e-01 5.8013425920431316e-01 + -6.1482276669240687e-01 9.8024691016900678e-01 8.4786328457517823e-01 + -7.4741490393103649e-01 1.2688271794436436e+00 1.1236080527532559e+00 + -9.1941703790301588e-01 1.5665992750518425e+00 1.3441218316245405e+00 + -1.1556178926092346e+00 1.8532780122370802e+00 1.4549539622528174e+00 + -1.4321364942410590e+00 2.0916091236515868e+00 1.4345184560567663e+00 + -1.6849184651149862e+00 2.2480909929811235e+00 1.2866542105619378e+00 + -1.8247562910288979e+00 2.3105081583402449e+00 1.0480940603570783e+00 + -1.8100580850060124e+00 2.3008994717134810e+00 8.0274715376258943e-01 + -1.6909136796823154e+00 2.2496838417882739e+00 5.9010544003904686e-01 + -1.4915115619549801e+00 2.1541615940725216e+00 4.0974839950660091e-01 + -1.2226957146808659e+00 2.0080409855802417e+00 2.8932723042670916e-01 + -9.1999339797909840e-01 1.8270868125750739e+00 2.4218433302057529e-01 + -6.1065727234868694e-01 1.6232072508077420e+00 2.2650042468837073e-01 + -3.1106850358112431e-01 1.3994495344158646e+00 1.7335360840539304e-01 + -6.0018279491243290e-02 1.2002086801610810e+00 1.8589924298597960e-02 + 7.3945839547199160e-02 1.1553651294851770e+00 -2.4132353597395900e-01 + 2.0686341912968689e-01 1.0969915853555090e+00 -4.1570900762574881e-01 + id 11518 + loc 2.3567959666252136e-01 2.8098335862159729e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3936435492401105e-01:2.4061555235290344e-01:3.7152614911345783e-01:3.4000434509385069e-01:1.0017927415309491e+00:2.5023326261609397e-01:2.0350741772029566e+00:2.7362433197608821e-01:2.9193492087861661e+00:4.3935996128046184e-01:3.8024595628510114e+00 + CVs 20 + -1.9856235491387231e-01 2.2889007499420000e-01 -3.7545444443903092e-02 + -4.0696707793693943e-01 4.9534507228068952e-01 -2.8870492989157226e-02 + -6.1251212677178313e-01 7.8357677309745188e-01 8.7506558808345125e-03 + -8.1751935065564163e-01 1.0812396734255394e+00 5.8128332286085771e-02 + -1.0390640117089003e+00 1.3838491277157368e+00 1.0439130245482608e-01 + -1.2935045182867935e+00 1.6858349670849373e+00 1.3105655218693135e-01 + -1.5972401631112569e+00 1.9826194890789353e+00 1.1671204613614439e-01 + -1.9669617555761836e+00 2.2607316086780713e+00 1.9229374267384913e-02 + -2.3765845380636268e+00 2.4654509618285263e+00 -2.1075817083988091e-01 + -2.7470538449976747e+00 2.5393067924874808e+00 -5.5183269675034108e-01 + -3.0373606772447190e+00 2.4931761862283155e+00 -9.3853519360816029e-01 + -3.2488708954208212e+00 2.3678816005895840e+00 -1.3221532269910075e+00 + -3.4043624675154507e+00 2.1766895137448770e+00 -1.6744647240658985e+00 + -3.5391845484761295e+00 1.8680908539408967e+00 -1.9639410526284420e+00 + -3.6561060541173029e+00 1.4182459044044324e+00 -2.1664853558309196e+00 + -3.7169338268393419e+00 8.9674497955511623e-01 -2.3320950803014098e+00 + -3.7036733619900772e+00 4.1083998957072698e-01 -2.5296237560678305e+00 + -3.6424362492140800e+00 4.9642966430902824e-02 -2.8071586314400774e+00 + -3.5672819141216094e+00 -8.4608622918861176e-02 -3.2213016701413677e+00 + id 11519 + loc 6.5679788589477539e-01 5.5647605657577515e-01 410 + blend 0.0000000000000000e+00 + interp 4.2844610530777372e-01:3.2393496513539577e-01:6.2775631391949371e-01:4.2844182084672067e-01:1.0230229355713059e+00:4.0225624604057630e-01:1.5114379073561444e+00:3.7883401488195639e-01:2.0011416861073048e+00:3.0868135768681565e-01:2.6316818981914736e+00:3.9312529834466109e-01:3.4711792052427248e+00:3.5162784834212640e-01:3.9947154716969271e+00 + CVs 20 + 4.8403250844309154e-01 2.6747366770214498e-01 -1.2796776997787862e-01 + 9.0945866224173944e-01 4.7774288454827729e-01 -2.5918325684620791e-01 + 1.3488790528550796e+00 6.7217934810935653e-01 -3.7790158362585446e-01 + 1.8161216761495576e+00 8.4625853722385669e-01 -4.8816840119546467e-01 + 2.2847822809885030e+00 9.7045539531955682e-01 -6.0672493670367100e-01 + 2.7307466789238659e+00 1.0208668761948012e+00 -7.4837660359781122e-01 + 3.1429300168947414e+00 9.9043832304916757e-01 -9.2242933429441243e-01 + 3.5199347443783848e+00 8.8803659772749044e-01 -1.1253687989310155e+00 + 3.8643238329705576e+00 7.3240465655427500e-01 -1.3379083696467511e+00 + 4.1840636243266891e+00 5.4079824758099382e-01 -1.5413558382226349e+00 + 4.5061146191444763e+00 3.0031741460594952e-01 -1.7446973672042396e+00 + 4.8642382543643565e+00 -2.9404630513589769e-02 -1.9795232379847887e+00 + 5.2537169723022759e+00 -4.2641961821497887e-01 -2.2838661620751743e+00 + 5.6382112537213196e+00 -7.9335495371188092e-01 -2.6852063515925177e+00 + 5.9768499987605761e+00 -1.0364324682013275e+00 -3.1629728778437132e+00 + 6.2461114322240103e+00 -1.1410255798853326e+00 -3.6709445718083358e+00 + 6.4544252552218708e+00 -1.1798072538779105e+00 -4.1920649420399672e+00 + 6.6275547719817327e+00 -1.2385374568854233e+00 -4.7182553259077036e+00 + 6.7952475235609731e+00 -1.3710036551128733e+00 -5.2340629575466888e+00 + id 11520 + loc 9.1801381111145020e-01 6.9060498476028442e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0523684082229416e-01:3.5573784465957520e-01:2.1119488938934894e-02:4.0523278845388594e-01:7.5204223738077869e-01:3.6606496387656695e-01:1.0738116704805647e+00:3.4044519928531475e-01:2.0012619796015114e+00:2.9947991902746590e-01:2.9999510137688086e+00 + CVs 20 + 1.7292419858389127e-02 3.4977080151672785e-01 -2.6562606764302338e-01 + 5.9422237063939315e-02 6.8220498434382293e-01 -5.1665479176175599e-01 + 1.0205181274942177e-01 9.9404376362075231e-01 -7.7684477449068845e-01 + 1.3735102378899028e-01 1.2771004508046520e+00 -1.0619441063924917e+00 + 1.6971613080595405e-01 1.5227700380047722e+00 -1.3796756149147278e+00 + 2.0909757577239002e-01 1.7264148345561974e+00 -1.7306989530996373e+00 + 2.7338280328524778e-01 1.8865862283852752e+00 -2.1070063990464161e+00 + 3.8131759563470413e-01 2.0034623566372813e+00 -2.4936018616508804e+00 + 5.4506074300261231e-01 2.0786169427275203e+00 -2.8722828540426888e+00 + 7.6986481161726972e-01 2.1122389679405535e+00 -3.2254637570399090e+00 + 1.0533899056553122e+00 2.0990205529405768e+00 -3.5408133704197917e+00 + 1.3811116616976591e+00 2.0212120971001655e+00 -3.8221768653508761e+00 + 1.7133837904976099e+00 1.8283879995243435e+00 -4.0866556179660130e+00 + 1.9800695693114230e+00 1.4693844220059160e+00 -4.3285877538888711e+00 + 2.1293870470229428e+00 9.5620025697862476e-01 -4.5279049054383682e+00 + 2.1006683428333570e+00 3.2614809906068698e-01 -4.6869400786411708e+00 + 1.7080508993466348e+00 -2.9298039738074166e-01 -4.8316891909046191e+00 + 1.0180489652274298e+00 -5.5261632927333459e-01 -4.9907712697358404e+00 + 5.2495732323226874e-01 -6.8403552833758841e-01 -5.1732311588746525e+00 + id 11521 + loc 9.0675252676010132e-01 2.6067429780960083e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6491125136279615e-01:4.6173400693025879e-01:3.9069352196302798e-01:3.1518652212868953e-01:9.6649289001686134e-01:2.7203515357914404e-01:1.5381464404946241e+00:3.3440006745441869e-01:2.5489721456084009e+00:3.3407141423051190e-01:3.0044673533139981e+00:4.1972059111054327e-01:3.4666752865694037e+00:4.6490660225028252e-01:3.9975785659640675e+00 + CVs 20 + -1.6641771744401038e-01 2.8730475511100845e-01 1.9672947113972067e-01 + -3.3954219295403415e-01 5.6403663411129035e-01 4.0244551575409904e-01 + -5.1778678193982486e-01 8.2969237386408279e-01 6.2265665845022045e-01 + -6.9735819010479838e-01 1.0830023093734136e+00 8.6364066115600757e-01 + -8.7169337121981527e-01 1.3209551634448109e+00 1.1320644604018721e+00 + -1.0305636520238748e+00 1.5371973404519883e+00 1.4339336855369791e+00 + -1.1612565491406008e+00 1.7208989353639539e+00 1.7728550076554463e+00 + -1.2508662243077699e+00 1.8556056265798953e+00 2.1463507482912290e+00 + -1.2907272001782473e+00 1.9218985451267687e+00 2.5435886702959847e+00 + -1.2816817352149517e+00 1.9029287735063056e+00 2.9461652258410789e+00 + -1.2352913568453996e+00 1.7888538506525853e+00 3.3313518052048408e+00 + -1.1717028376683472e+00 1.5804863948151666e+00 3.6801192831106970e+00 + -1.1149303552310528e+00 1.2877739173761549e+00 3.9788589348311172e+00 + -1.0860800525798731e+00 9.2642643762272026e-01 4.2116651033351493e+00 + -1.0970454272416728e+00 5.1812446835328518e-01 4.3586939505666384e+00 + -1.1422866637791700e+00 9.2927799243410492e-02 4.3958664698265206e+00 + -1.1985532066840896e+00 -3.1040959396192846e-01 4.3146744002124136e+00 + -1.2517183546884278e+00 -6.7476608767165192e-01 4.1671341309490240e+00 + -1.3131529415349139e+00 -1.1028348527839351e+00 4.1878058419723194e+00 + id 11522 + loc 1.9162522256374359e-01 2.7563071250915527e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5215883608640917e-01:3.0175272296362171e-01:4.3025050730813086e-02:3.9480349270303011e-01:9.7649395232118497e-01:3.1025526748904392e-01:1.4329161498570506e+00:4.1637886734926105e-01:1.9943947455521722e+00:4.5215431449804833e-01:2.4908690227758918e+00:3.1406282475305575e-01:2.9614021396874683e+00:3.2114037234729159e-01:3.3504900230602956e+00 + CVs 20 + -1.4792351952685232e-02 3.6995446187561609e-01 -1.9247185466807928e-01 + -1.0067078525302076e-01 7.1347534718195282e-01 -3.7656850964183919e-01 + -2.2959884732868591e-01 1.0293856515748616e+00 -5.6644536601648132e-01 + -3.9136412083217298e-01 1.3074989630474638e+00 -7.6105584499177026e-01 + -5.8895049478882844e-01 1.5393643519943803e+00 -9.5253584607232311e-01 + -8.2189723593814601e-01 1.7197783775958237e+00 -1.1385466092901380e+00 + -1.0836351853602366e+00 1.8414239921966975e+00 -1.3251309247399072e+00 + -1.3589612766859411e+00 1.8953817370757533e+00 -1.5150466227257178e+00 + -1.6225845464665241e+00 1.8758390543614087e+00 -1.6963529354921620e+00 + -1.8377831892820198e+00 1.7840353026195546e+00 -1.8419418139965911e+00 + -1.9615920061038032e+00 1.6434083884787287e+00 -1.9107756694610938e+00 + -1.9629787638454221e+00 1.5292012562497594e+00 -1.8575306748014024e+00 + -1.8692062314811826e+00 1.5239953104898554e+00 -1.7070537396967189e+00 + -1.7572658246269985e+00 1.5659384923449307e+00 -1.5416548116118898e+00 + -1.6436905497448304e+00 1.6391322510810027e+00 -1.3724848802068230e+00 + -1.5377834239135595e+00 2.0354168376566917e+00 -1.3374115627520122e+00 + -1.6093166249877600e+00 2.8962505015435243e+00 -2.0634340520900798e+00 + -1.7618337905849080e+00 3.2030265341934103e+00 -2.9741507779247440e+00 + -1.6466879035136244e+00 3.4391377783493757e+00 -2.6338598311126362e+00 + id 11523 + loc 2.7318766713142395e-01 8.1532850861549377e-02 410 + blend 0.0000000000000000e+00 + interp 5.2142660264123741e-01:3.4291957412793478e-01:9.5711897170247529e-04:4.1320090346063237e-01:6.1171784519260497e-01:3.1992110050198491e-01:1.2231096897733820e+00:3.1086027959027157e-01:1.7414229600875624e+00:5.2142138837521101e-01:2.2277809425713437e+00:3.4045358855122021e-01:2.9373498243415783e+00:3.8555621192524486e-01:3.3060910377183959e+00 + CVs 20 + -8.6653133643331826e-02 1.1584661589872229e-01 -2.7267055790292355e-01 + -1.2757977308031354e-01 2.1620433099026082e-01 -5.3811767060159021e-01 + -1.3950653639065635e-01 2.9923798992010270e-01 -7.9808399888870207e-01 + -1.2812424632886871e-01 3.6463722523889036e-01 -1.0497739204574053e+00 + -9.4952282191470117e-02 4.1330741158670720e-01 -1.2893177729868937e+00 + -3.6863589426436860e-02 4.4289092518509349e-01 -1.5065685013740362e+00 + 5.1641570311386165e-02 4.4710160954540312e-01 -1.6837081483659126e+00 + 1.6930678402868193e-01 4.1821831952840682e-01 -1.8001642003625977e+00 + 3.0167626142765236e-01 3.5037746255558144e-01 -1.8389443310022733e+00 + 4.2279830655561179e-01 2.4787769243777313e-01 -1.8056615465479489e+00 + 5.2834801382271801e-01 1.4268316112819679e-01 -1.7667567837291671e+00 + 6.2664496458846286e-01 4.7970875286033610e-02 -1.6911575074648968e+00 + 6.6254697129479900e-01 -6.3848387237910309e-02 -1.5263324249774666e+00 + 7.4762904075958525e-01 -1.4021276866246557e-01 -1.4457702520350471e+00 + 1.0042299289834591e+00 -1.6683823942891007e-01 -1.5656037515657186e+00 + 1.2616594535557664e+00 -2.0775050017187302e-01 -1.7527331107881201e+00 + 1.4958103086626882e+00 -2.7823207439143460e-01 -2.0064522761822028e+00 + 1.6887698201407124e+00 -3.9124863877116289e-01 -2.3326386697991035e+00 + 1.8004232086780956e+00 -4.9781815638438975e-01 -2.4357747855746332e+00 + id 11524 + loc 6.0238850116729736e-01 6.9157111644744873e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3917579203728485e-01:2.9697629580713503e-01:9.2983226661802643e-01:3.4298200178131100e-01:1.4659688362391499e+00:4.3917140027936452e-01:2.0469806481061861e+00:3.2652262316936859e-01:2.6305201256464050e+00:3.2841934110992127e-01:3.0437237242011488e+00:3.6090544437750333e-01:3.9727166360910076e+00 + CVs 20 + -3.0396503320835894e-01 2.9720930716482197e-01 1.8093174832850489e-01 + -5.3957647616933535e-01 5.5901858872774524e-01 3.3262981709917927e-01 + -7.1915662119949675e-01 8.1939403360025664e-01 5.0673779708344346e-01 + -8.7568360066362971e-01 1.0975854469665380e+00 6.9678553548276501e-01 + -1.0654108121877306e+00 1.3947611297434372e+00 8.3825294642382586e-01 + -1.3195793609381121e+00 1.6864103389376406e+00 8.7188761029633621e-01 + -1.6188636860683183e+00 1.9284965285846514e+00 7.8152554936436769e-01 + -1.9107808452030657e+00 2.0867303797303309e+00 5.8073062987977808e-01 + -2.1277736307286470e+00 2.1531274579451933e+00 2.9500946289723129e-01 + -2.2170258143215049e+00 2.1389791223459387e+00 -3.6963913716928642e-02 + -2.1732737072545323e+00 2.0586542246622601e+00 -3.7502516389321761e-01 + -2.0125593169834728e+00 1.9111751958413348e+00 -6.8169697488236924e-01 + -1.7656238507025994e+00 1.7023428072794822e+00 -8.9890412460895752e-01 + -1.4990800227904946e+00 1.4717361304300309e+00 -1.0118709328124842e+00 + -1.2665795433854468e+00 1.2511697899660290e+00 -1.0902549912501294e+00 + -1.1008667390082718e+00 1.0746316844248518e+00 -1.2021938851896221e+00 + -1.0251853315198780e+00 1.0111859594447783e+00 -1.3314312269258441e+00 + -1.0027453185412771e+00 1.0382789318974353e+00 -1.4566511130547117e+00 + -1.0035149065261280e+00 1.0804198075517373e+00 -1.7587905553081911e+00 + id 11525 + loc 2.7318766713142395e-01 1.1094318330287933e-01 1047 + blend 0.0000000000000000e+00 + interp 4.0526353123508085e-01:2.6538941988771070e-01:3.9305859590758818e-01:2.6388057356006062e-01:1.3822556741953047e+00:2.8883262652120822e-01:1.6908262322733525e+00:4.0525947859976852e-01:2.1326923921191452e+00:2.6474761564900301e-01:2.9819947944317642e+00:2.8620056949693257e-01:3.9944698961339631e+00 + CVs 20 + -7.5461891233575151e-01 5.7854894823599279e-01 -6.5827362850103377e-02 + -1.3963147361733639e+00 1.0784868767441267e+00 -2.3476478504359150e-01 + -1.9186044215965499e+00 1.5319016751314409e+00 -5.1032333484840486e-01 + -2.2951392504212373e+00 1.9436754941391883e+00 -8.8054345576986193e-01 + -2.5088125657490159e+00 2.3073362548038348e+00 -1.3165620910374094e+00 + -2.5796259615726282e+00 2.6213312645686737e+00 -1.7800970035728620e+00 + -2.5391414558647400e+00 2.8857157471481245e+00 -2.2572434192606394e+00 + -2.4168334536552840e+00 3.0780647781490318e+00 -2.7836810042242455e+00 + -2.2442722417736611e+00 3.1208029658891570e+00 -3.4010799849415645e+00 + -2.0425796544173793e+00 2.9346950473771960e+00 -4.0836912424157958e+00 + -1.7852749840354276e+00 2.4846496139394025e+00 -4.7483666490464254e+00 + -1.4035406724485959e+00 1.7922494035079217e+00 -5.2682509736542471e+00 + -8.2689964532871207e-01 9.6288965911014757e-01 -5.5165754949064656e+00 + -2.6964140704317352e-02 1.9925245143768361e-01 -5.3982094815346322e+00 + 9.2476351107281385e-01 -2.8046330034283484e-01 -4.9149322473462105e+00 + 1.8933316802314002e+00 -3.3527822908230975e-01 -4.1333183143219614e+00 + 2.7324443298733820e+00 2.4491867451339377e-01 -2.9788551616693133e+00 + 2.7043354806788078e+00 1.7802389312300104e+00 -1.6931202338110307e+00 + 2.4482273977998630e+00 2.3728540069114357e+00 -1.4053614098982985e+00 + id 11526 + loc 8.0546841025352478e-02 5.8335316181182861e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8080795260733816e-01:3.3136068540253444e-01:3.1809571688327309e-01:4.8080314452781209e-01:6.6295575110339899e-01:3.7891085722137396e-01:1.9671271709305729e+00:3.7530141829958702e-01:2.7578092775764174e+00:4.7946081359684939e-01:3.0118484091238287e+00:3.2778759605275037e-01:3.6340649380442005e+00 + CVs 20 + -2.5554146561967750e-01 5.2032570181435012e-01 4.8169098041830521e-01 + -5.0851827955905038e-01 9.5401841385435615e-01 8.5861568848094028e-01 + -7.6275186939804918e-01 1.3500744579080777e+00 1.2143392938455411e+00 + -1.0409434875878003e+00 1.7296188502545835e+00 1.5601479612436571e+00 + -1.3590887120659718e+00 2.0858113358101651e+00 1.8585980920872842e+00 + -1.7184137939562569e+00 2.4065387938907623e+00 2.0697446930244254e+00 + -2.1009709962114633e+00 2.6753382511291020e+00 2.1555730722362485e+00 + -2.4645356544680483e+00 2.8675449624946063e+00 2.0784735204066598e+00 + -2.7395500845431084e+00 2.9517882135686779e+00 1.8330108158278018e+00 + -2.8926849693178860e+00 2.9262292416962437e+00 1.4971090308674646e+00 + -2.9811975463968796e+00 2.7953677821223986e+00 1.1345461229889207e+00 + -3.0524183125009996e+00 2.5205796385361250e+00 7.6913889588770368e-01 + -3.1060979297376434e+00 2.1377844537977939e+00 4.6262793332531249e-01 + -3.1311293440194152e+00 1.7954648790400096e+00 2.2113517847528952e-01 + -3.1339579440242988e+00 1.5918286905883363e+00 1.0222841712357988e-02 + -3.1514274544516039e+00 1.5599709669382635e+00 -1.3754906945851886e-01 + -3.2321379942949746e+00 1.6613473547165987e+00 -1.2969546116715347e-01 + -3.3512877334662252e+00 1.7408069292848092e+00 3.1246346435191974e-02 + -3.2984312230127144e+00 1.7954844812221245e+00 -1.5066079397928511e-01 + id 11527 + loc 9.1017264127731323e-01 4.3338733911514282e-01 1077 + blend 0.0000000000000000e+00 + interp 3.6837966145627743e-01:3.6385139879026152e-01:2.2070574691929190e-03:3.6837597765966290e-01:7.1907894934492189e-01:3.2160562551969679e-01:1.1460386700632930e+00:3.0763827845177205e-01:2.2420627396922828e+00:3.4341152419971954e-01:2.9278979189586130e+00:3.6332809845741953e-01:3.3527577814673304e+00 + CVs 20 + -9.7970686712856261e-02 3.4487741832677582e-01 3.3124947649778774e-01 + -1.6499739137999611e-01 7.1665537991483608e-01 6.1998838215128071e-01 + -2.4757619448537632e-01 1.0801459131196771e+00 9.3088812742892135e-01 + -3.7184308729268212e-01 1.4043020784534197e+00 1.2882029370089181e+00 + -5.5176466246948619e-01 1.6663718657619073e+00 1.6908581640118554e+00 + -7.9212834854546754e-01 1.8476853142860128e+00 2.1199762811991136e+00 + -1.0880504022129047e+00 1.9383464356601947e+00 2.5460520257518309e+00 + -1.4249935316946436e+00 1.9403864425345645e+00 2.9397114046367290e+00 + -1.7817231914522176e+00 1.8662079247898276e+00 3.2828313157641111e+00 + -2.1368916237638107e+00 1.7318405913547086e+00 3.5738985031745010e+00 + -2.4752428407829612e+00 1.5495323337658067e+00 3.8237394455333926e+00 + -2.7872063866836010e+00 1.3261717654353222e+00 4.0460750447734721e+00 + -3.0643469037235658e+00 1.0675837891477851e+00 4.2503434871630708e+00 + -3.2994418720907199e+00 7.8105397374498309e-01 4.4383202768726573e+00 + -3.4957684119040922e+00 4.6798957456823742e-01 4.6095171993105835e+00 + -3.6513453288694566e+00 1.2224330381081217e-01 4.7650385824257517e+00 + -3.7342703114501354e+00 -2.5426282569943082e-01 4.8981809928074931e+00 + -3.7086000304549613e+00 -6.2919030205598947e-01 5.0319941022953865e+00 + -3.5499248627847217e+00 -7.5088457578233170e-01 5.1978841822629622e+00 + id 11528 + loc 6.4612042903900146e-01 6.0272687673568726e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7022714816496536e-01:4.6033083474881065e-01:3.8061259403550185e-01:2.5588189367358638e-01:1.0524022772898283e+00:3.6484684864903982e-01:2.0381480000936798e+00:4.0252376464748746e-01:2.6680757339025698e+00:2.7596149120918384e-01:3.3296975106191860e+00:4.7022244589348372e-01:3.9653430390626561e+00 + CVs 20 + 1.5557712190958628e-01 2.3083664598687448e-01 -3.5932721722637467e-01 + 3.2441931241020339e-01 4.5852385551365871e-01 -7.0210291724094520e-01 + 4.9699150785052659e-01 6.8470302555441942e-01 -1.0426737626904385e+00 + 6.7049575712648357e-01 9.1163568767319703e-01 -1.3925690695335273e+00 + 8.3891389061038779e-01 1.1477599183339970e+00 -1.7631849372498301e+00 + 9.8837634837380495e-01 1.4028116451809007e+00 -2.1609086447119989e+00 + 1.1096422056090645e+00 1.6727400926978784e+00 -2.5810115584843989e+00 + 1.2118744312786860e+00 1.9331101529709374e+00 -3.0158198380845902e+00 + 1.3133414513066941e+00 2.1431840445800403e+00 -3.4683342678317235e+00 + 1.4232812496878555e+00 2.2498983207685579e+00 -3.9496237386425617e+00 + 1.5393399411476953e+00 2.2026448415792066e+00 -4.4555783697638702e+00 + 1.6519623040115692e+00 1.9850008528868419e+00 -4.9543998587827298e+00 + 1.7577379804610076e+00 1.6244365567525232e+00 -5.4053607279115177e+00 + 1.8729203568212798e+00 1.1777585776834512e+00 -5.7836958573926118e+00 + 1.9982051095878135e+00 6.8755613924487635e-01 -6.0946392075938034e+00 + 2.0736558764012689e+00 1.5079346741080080e-01 -6.3586915576582435e+00 + 1.9957368969646758e+00 -4.5153219019490004e-01 -6.5864422554629627e+00 + 1.7394030484164280e+00 -1.0782345017612689e+00 -6.7513260006606695e+00 + 1.7749698039635375e+00 -1.4450218138243178e+00 -6.9628699132951670e+00 + id 11529 + loc 4.7416725754737854e-01 7.5792407989501953e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9946130692927465e-01:4.3623542062388854e-01:1.5470115253262673e-01:4.9945631231620541e-01:7.0637315986733151e-01:4.4117575164436068e-01:1.0010937488434000e+00:2.6480723255907662e-01:1.3735075748142802e+00:2.7478213354688424e-01:2.6674368094830596e+00:4.2538317446654667e-01:3.1480766378750595e+00:2.5369676228208421e-01:3.9498940878343149e+00 + CVs 20 + 1.2369197143932965e-02 3.6326895009555232e-01 -1.5819115853257038e-01 + 5.4179323702759338e-02 7.3441096805991535e-01 -3.0839791352436591e-01 + 1.3376153173756800e-01 1.1150184699339061e+00 -4.6869723987835743e-01 + 2.6140053378339395e-01 1.5036778585461978e+00 -6.4772988549767752e-01 + 4.6069537656678738e-01 1.9031249599344684e+00 -8.4869365287983378e-01 + 7.4623237806395026e-01 2.3076777984045003e+00 -1.1026487716651672e+00 + 1.1046325850104792e+00 2.6853408087575956e+00 -1.4786796850670623e+00 + 1.4895926692226662e+00 2.9456182428213995e+00 -2.0319076734144970e+00 + 1.8195542063153853e+00 2.9415223489211555e+00 -2.7040980971794095e+00 + 2.0447101471860880e+00 2.6205830042345881e+00 -3.3270982438924150e+00 + 2.1873404438887585e+00 2.0705447646193855e+00 -3.7694781024076214e+00 + 2.3089214342942204e+00 1.4223023080854704e+00 -3.9961982256684543e+00 + 2.4731488367896364e+00 7.5544300833750322e-01 -4.0869727656169585e+00 + 2.7229310193020759e+00 8.0206175639678107e-02 -4.2152338111211440e+00 + 3.0836444865340655e+00 -5.4304113877554983e-01 -4.5856160562443309e+00 + 3.5414755337900283e+00 -8.9408511390742129e-01 -5.3156389924034908e+00 + 3.9871450745862496e+00 -6.6275791741271184e-01 -6.2572361122398581e+00 + 4.2596511745527152e+00 -8.0609344181857431e-02 -6.9293189970064102e+00 + 4.4008456882697171e+00 1.5923063491210526e-01 -7.2585631416519938e+00 + id 11530 + loc 7.4928909540176392e-01 5.7875353097915649e-01 1070 + blend 0.0000000000000000e+00 + interp 4.2061660347901536e-01:3.1578979826729803e-01:1.1657655910321596e-01:3.4868634171354718e-01:1.0239195444898455e+00:3.6038180880552972e-01:1.9357751998018751e+00:3.8714998343613505e-01:2.4298767210874783e+00:3.2780863412470762e-01:3.0304965754939999e+00:4.2061239731298061e-01:3.7182876997246357e+00 + CVs 20 + -3.3962653222899419e-01 3.2207933332652117e-01 9.2261930191322145e-02 + -6.0755499738877616e-01 6.3483454751209933e-01 1.5921389949187525e-01 + -8.2236110867136025e-01 9.5638407957669125e-01 2.2676275572126392e-01 + -1.0110349644422751e+00 1.2863295457163715e+00 2.7112368187705993e-01 + -1.2018712249018622e+00 1.6094250470956151e+00 2.4798364146625151e-01 + -1.4145125108221599e+00 1.9080843716262996e+00 1.3662799244667423e-01 + -1.6396227913608119e+00 2.1516624085912022e+00 -6.0635838010236087e-02 + -1.8285083544057605e+00 2.3094798840770228e+00 -3.2094388901601012e-01 + -1.9258332693435762e+00 2.3830789942057651e+00 -6.0323524595428024e-01 + -1.9279372694500849e+00 2.3973958266035158e+00 -8.8519628670618711e-01 + -1.8542483952289466e+00 2.3559358418712764e+00 -1.1798599616972121e+00 + -1.7003182689487488e+00 2.2410180338670878e+00 -1.4813224252465873e+00 + -1.4611518512451407e+00 2.0443470992963246e+00 -1.7488904471761477e+00 + -1.1933547725891758e+00 1.8277742673409958e+00 -1.9539512773454504e+00 + -9.9174356061995350e-01 1.6860192154708908e+00 -2.1403337694973152e+00 + -9.1530626711166652e-01 1.7001886530930013e+00 -2.3104434947366537e+00 + -9.8128408923853050e-01 1.9523986052056936e+00 -2.2858285318658638e+00 + -1.0484813126112704e+00 2.2306657496488351e+00 -1.9113816190002502e+00 + -1.0550008333502243e+00 2.3344765329804158e+00 -2.1903524147770064e+00 + id 11531 + loc 4.6306023001670837e-01 4.5791816711425781e-01 410 + blend 0.0000000000000000e+00 + interp 4.7369714143406411e-01:4.7369240446264976e-01:7.2296941469318243e-01:2.9657759218598068e-01:1.2088020144737914e+00:3.2686825808059722e-01:2.0068020200799994e+00:3.6378638476363262e-01:2.8761154812697338e+00:3.0667650438333760e-01:3.2634823673043645e+00:3.3331283357040775e-01:3.9996218102476120e+00 + CVs 20 + -1.5066721328840771e-01 1.0772524562443871e-01 -3.4328601649950852e-01 + -2.6511036326133841e-01 1.8778575011477677e-01 -6.4909863088478348e-01 + -3.6324664523323325e-01 2.5172983806862376e-01 -9.4416132660940488e-01 + -4.5525309797743085e-01 3.0787922530194145e-01 -1.2417376021351991e+00 + -5.4095403526058772e-01 3.5901811953846607e-01 -1.5386443277962583e+00 + -6.1543504287775130e-01 4.0728467451497397e-01 -1.8283201672142915e+00 + -6.6843394053844052e-01 4.5430752009043984e-01 -2.1018665765750235e+00 + -6.8920357233781449e-01 5.0076414521517709e-01 -2.3496071268061822e+00 + -6.7090570726863041e-01 5.4655881991884581e-01 -2.5613425368347658e+00 + -6.1350877033754614e-01 5.9177560862845924e-01 -2.7273055797593537e+00 + -5.2831709110556779e-01 6.3600584256192350e-01 -2.8473965288545666e+00 + -4.3719407995522869e-01 6.7675274458687773e-01 -2.9556881404873647e+00 + -3.5546504880996355e-01 7.0781850960668558e-01 -3.1130664249796580e+00 + -2.9132560441598337e-01 7.2008974972070461e-01 -3.3405592885831261e+00 + -2.5367581778843584e-01 7.1114317014496020e-01 -3.6147433896652106e+00 + -2.5115959493104456e-01 6.8071534193690653e-01 -3.9197071546910935e+00 + -2.9395799176326431e-01 6.2639200513469628e-01 -4.2476481218166100e+00 + -3.8459364360123993e-01 5.5468246031112955e-01 -4.5787781094733768e+00 + -4.2114879397584914e-01 5.7096032276418796e-01 -4.7912081946619622e+00 + id 11532 + loc 4.6306023001670837e-01 6.2309724092483521e-01 1047 + blend 0.0000000000000000e+00 + interp 4.6307162414762859e-01:2.7071160011825995e-01:2.6559771860441750e-01:4.6306699343138713e-01:1.2246190838146487e+00:2.8266641290013422e-01:1.9221321143389027e+00:2.8585001279917349e-01:2.9889180741413495e+00:3.5033484440608931e-01:3.7514139848137171e+00 + CVs 20 + 1.8061723802798099e-01 7.2077071420000549e-01 -4.4309357090905899e-01 + 3.6749267829345522e-01 1.4013168912901530e+00 -8.2919645978727308e-01 + 5.7268405362069474e-01 2.0483533503272628e+00 -1.1380418659622353e+00 + 8.1582953080369225e-01 2.6369875138484526e+00 -1.3113760843726121e+00 + 1.1109654633721575e+00 3.1263772128313190e+00 -1.2821739868015434e+00 + 1.4346173339182726e+00 3.4677317331915107e+00 -1.0330110630793150e+00 + 1.7262365688368191e+00 3.6108215500815790e+00 -6.1873250577557459e-01 + 1.9411008348555971e+00 3.5287768051553421e+00 -1.1602995259348003e-01 + 2.0705069558613229e+00 3.2312015548024995e+00 4.0140307685638699e-01 + 2.1266753837780237e+00 2.7411147223020378e+00 8.7195027757528820e-01 + 2.1247695617637405e+00 2.0717671623683280e+00 1.2562461747583860e+00 + 2.0569155174609475e+00 1.2375732357129934e+00 1.5715913523489784e+00 + 1.8789226581451026e+00 3.1372917782194876e-01 1.9325123768338783e+00 + 1.5942180822547858e+00 -5.4162857475328252e-01 2.4840528444651033e+00 + 1.3474481294540543e+00 -1.1132878446568604e+00 3.3388502760447221e+00 + 1.3803725170361782e+00 -1.1657517749425712e+00 4.3478501288706282e+00 + 1.6789447484431856e+00 -7.4636592030924787e-01 5.1803919040146118e+00 + 2.0563217603973580e+00 -3.8745392245560950e-02 5.7502509118047449e+00 + 2.2966438185603781e+00 6.8917860108643492e-01 6.1974605774155691e+00 + id 11533 + loc 5.9561587870121002e-02 5.3139734268188477e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3720940824622584e-01:3.3375208953678503e-01:4.9548469661148009e-02:3.7594181558711298e-01:5.6746436114764853e-01:4.3720503615214340e-01:9.9931994110994671e-01:3.0754626035053823e-01:1.5811556784842442e+00:4.2088148240930712e-01:2.3190211081127607e+00:3.3166649762366773e-01:2.9858066916912342e+00:2.7235396646967724e-01:3.5219787757165193e+00 + CVs 20 + 1.7206941718334026e-01 3.7718734218653172e-01 -4.2198174243426048e-02 + 3.6885667521975712e-01 7.0062415213032903e-01 -1.3769902565252456e-01 + 5.6057357611967373e-01 9.8264026395723603e-01 -2.5913673975775298e-01 + 7.3086098988308468e-01 1.2179531232394003e+00 -3.9558338226983508e-01 + 8.7367407902422356e-01 1.3989997752726575e+00 -5.4192343103352414e-01 + 9.8277138997842117e-01 1.5210194361660947e+00 -6.8648470135025064e-01 + 1.0526183513016822e+00 1.5858987147025605e+00 -8.1204479584596223e-01 + 1.0791539762302254e+00 1.6052690445593514e+00 -8.9613753464509771e-01 + 1.0637894425586163e+00 1.6056010336991120e+00 -9.1756570503186052e-01 + 1.0207364911989876e+00 1.6245102373144920e+00 -8.7949456314798069e-01 + 9.7108270212469050e-01 1.6840743777333091e+00 -8.1626647231552396e-01 + 9.3061794020284361e-01 1.7713367519359879e+00 -7.6713509193046781e-01 + 9.0906132020133168e-01 1.8509283463738480e+00 -7.4383953116007850e-01 + 9.2419143387959624e-01 1.8994791143565397e+00 -7.2312364785784966e-01 + 1.0067941697665468e+00 1.9267797998115670e+00 -6.8189807912120270e-01 + 1.1788004320134400e+00 1.9357389598962547e+00 -6.3322229720674617e-01 + 1.4173000410404617e+00 1.8878896856766583e+00 -6.0586018559130417e-01 + 1.5680585943595415e+00 1.7799953309833363e+00 -6.0434306512368208e-01 + 1.3270395094104042e+00 1.8228918563039580e+00 -5.8506341119958027e-01 + id 11534 + loc 5.9388244152069092e-01 2.8606709837913513e-01 1077 + blend 0.0000000000000000e+00 + interp 3.8433204443871094e-01:3.5974680254230335e-01:9.3455414538813009e-02:3.7156075894765395e-01:9.9891243315760914e-01:3.2722945418161015e-01:1.9899665477803699e+00:3.8432820111826654e-01:2.4219007094507341e+00:3.2457830147804062e-01:2.9995908234367992e+00:2.7811272360553224e-01:3.6876551239408597e+00 + CVs 20 + -6.5350893910017291e-02 3.0113027730092812e-01 2.2947023124489579e-01 + -1.2057243492673836e-01 6.0021920199582879e-01 4.4745708774406856e-01 + -1.8237315864510939e-01 8.7323881068593157e-01 6.7756641555326513e-01 + -2.6035925177242542e-01 1.1019955607711311e+00 9.2998509837140109e-01 + -3.5739408931018601e-01 1.2755869767309775e+00 1.2032866793364705e+00 + -4.7380809344950880e-01 1.3853446658449800e+00 1.4904287545317836e+00 + -6.0752698468313460e-01 1.4265115728710147e+00 1.7801163303268290e+00 + -7.5485866132640078e-01 1.3987988662251500e+00 2.0613138550126378e+00 + -9.1111629477916445e-01 1.3059497433837917e+00 2.3243808548075302e+00 + -1.0699184907432377e+00 1.1551385984312030e+00 2.5615861301533505e+00 + -1.2183890788224945e+00 9.5965297079817935e-01 2.7680111502663980e+00 + -1.3365744004668236e+00 7.4193769525147024e-01 2.9410167163774990e+00 + -1.4073082123935698e+00 5.2913717788455161e-01 3.0789877745885637e+00 + -1.4280364092637692e+00 3.4249840549161648e-01 3.1809166928985499e+00 + -1.4107551569236119e+00 2.0518711641360921e-01 3.2380148028885900e+00 + -1.3769259657899915e+00 1.1294877284793980e-01 3.2515857698046515e+00 + -1.3040809835618179e+00 -4.0944128288125103e-03 3.2736457214828683e+00 + -1.1314941505782068e+00 -1.4114567798709854e-01 3.3689768754032303e+00 + -8.2807610394801623e-01 -1.9219006622399859e-01 3.5930106144083229e+00 + id 11535 + loc 3.2732424139976501e-01 8.9928925037384033e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5020942899348881e-01:2.9828131819035603e-01:9.1795069982179567e-02:3.8283301427267469e-01:7.4673189562932596e-01:4.1592167631505156e-01:1.1967886953271363e+00:3.0222310344052067e-01:1.8358845959828796e+00:3.2953472148958607e-01:2.0934888326343462e+00:3.9218988554148859e-01:2.5969528003015321e+00:4.1240480387195250e-01:3.0000017447658580e+00:4.5020492689919889e-01:3.3525966386644588e+00:4.3372968556384561e-01:3.9097367248797763e+00 + CVs 20 + 2.1709067423754330e-01 3.7897750497242549e-01 -2.3600431075525022e-01 + 4.6662211193948977e-01 7.6700087794458727e-01 -4.8148530050404570e-01 + 7.5605320669219200e-01 1.1557684716620313e+00 -7.3337032638410549e-01 + 1.0857678319440593e+00 1.5393731375685569e+00 -9.8941457823018475e-01 + 1.4442477575735408e+00 1.9131958381219838e+00 -1.2646882662443975e+00 + 1.8013250117037385e+00 2.2602380883993347e+00 -1.6032486284825767e+00 + 2.1146973443081039e+00 2.5318946357355152e+00 -2.0519739640472050e+00 + 2.3363431217281687e+00 2.6368428905463550e+00 -2.6110998852588470e+00 + 2.4316049471963073e+00 2.5106745177446053e+00 -3.1876139583223964e+00 + 2.4233218867688882e+00 2.2022962615979158e+00 -3.6744170284037780e+00 + 2.3703917168961013e+00 1.7995906351215860e+00 -4.0358631923197086e+00 + 2.3334096901523655e+00 1.3812581004674258e+00 -4.2887401519682875e+00 + 2.3395501020269407e+00 1.0011886564307939e+00 -4.4817529977076402e+00 + 2.3792944277022992e+00 6.8600079190216690e-01 -4.6632213775751996e+00 + 2.4387861475299610e+00 4.4281239323141997e-01 -4.8587085365797593e+00 + 2.5150547269902028e+00 2.7645813115337797e-01 -5.0784580726700010e+00 + 2.6098464496668337e+00 2.0714593920395452e-01 -5.3321789852635835e+00 + 2.7246136894387902e+00 2.8238382848625648e-01 -5.6370931212931685e+00 + 2.8353910683916212e+00 4.9976066279086157e-01 -5.9411195365452247e+00 + id 11536 + loc 8.1824862957000732e-01 5.6049382686614990e-01 410 + blend 0.0000000000000000e+00 + interp 4.0303542241990414e-01:3.3656738264634023e-01:4.9078011428919732e-01:3.4303418872146985e-01:1.4034171234315431e+00:4.0108246664236324e-01:1.9770472221827404e+00:3.0672584484093340e-01:2.3815246925707863e+00:4.0303139206567995e-01:2.9921197153281311e+00:3.4073185313047172e-01:3.3178039629166012e+00:2.7831277915758756e-01:3.9862634577762033e+00 + CVs 20 + 3.9138699392265786e-01 3.1618365231904755e-01 -8.8727868082089073e-02 + 7.2254549346398245e-01 5.9631764585509051e-01 -1.8304322796261563e-01 + 1.0748796188430554e+00 8.8591872009804729e-01 -2.8532927375081241e-01 + 1.4920631970729683e+00 1.1940993791347645e+00 -4.0997928392682986e-01 + 1.9741997752441864e+00 1.4857646445629475e+00 -5.9235937946131190e-01 + 2.5011936428827015e+00 1.7077364249587013e+00 -8.7298361948450365e-01 + 3.0314871133715728e+00 1.8076193406111341e+00 -1.2713164056102677e+00 + 3.5260492282677682e+00 1.7498712044229459e+00 -1.7665232223346516e+00 + 3.9720289919956135e+00 1.5129807721734914e+00 -2.3053067749587446e+00 + 4.3628077876713531e+00 1.0851789320231267e+00 -2.8144319803576958e+00 + 4.6732005555298137e+00 5.0252196574670327e-01 -3.2172070335898213e+00 + 4.8893211311181632e+00 -1.2799715916893639e-01 -3.5095532557709883e+00 + 5.0369201091052096e+00 -7.1485407941516987e-01 -3.7685592876810259e+00 + 5.1503392918409432e+00 -1.2169409054822702e+00 -4.0571185008796071e+00 + 5.2520283277312210e+00 -1.6266921253442845e+00 -4.3920400786195994e+00 + 5.3638939336914859e+00 -1.9774926177262475e+00 -4.7654876661380250e+00 + 5.5094248267569181e+00 -2.3093925398086887e+00 -5.1728950592375558e+00 + 5.6927951294609613e+00 -2.6312064632410119e+00 -5.6105535517109510e+00 + 5.8805237059584679e+00 -2.9367114366525224e+00 -6.0752499514003446e+00 + id 11537 + loc 5.8006286621093750e-01 1.5007610619068146e-01 1070 + blend 0.0000000000000000e+00 + interp 3.7226456155497278e-01:2.9936205731633464e-01:5.8666998332766818e-01:3.1473573403506094e-01:1.3708580644433785e+00:3.7226083890935724e-01:2.0112455829814948e+00:3.3896386141348556e-01:2.8053009380809790e+00:3.2143244272916854e-01:3.5720894936329404e+00 + CVs 20 + 2.8515769634640942e-01 3.4735651787396477e-01 -2.0641486531705219e-01 + 5.3481786532598641e-01 6.2766633215217560e-01 -3.1240957073742409e-01 + 7.6387852381563914e-01 8.8439339570702358e-01 -3.6894204030608679e-01 + 9.6828238526125443e-01 1.1381798943237378e+00 -3.9848915914353333e-01 + 1.1300231112729486e+00 1.3857848975976492e+00 -4.0479802051183977e-01 + 1.2407810925317859e+00 1.6197840343767869e+00 -4.2141219833657395e-01 + 1.3148795148081316e+00 1.8438559519327329e+00 -4.9348919648738221e-01 + 1.3776646407030007e+00 2.0646828483202575e+00 -6.5394201540702934e-01 + 1.4517635061351934e+00 2.2579313825003204e+00 -9.0794688020644787e-01 + 1.5562331841988515e+00 2.3737568648610279e+00 -1.2266177072668785e+00 + 1.6958177551039337e+00 2.3648536319008113e+00 -1.5565105966886101e+00 + 1.8520049149704767e+00 2.2224581055275827e+00 -1.8478376296248988e+00 + 1.9979556639545923e+00 1.9718691399987431e+00 -2.0727525617686648e+00 + 2.1193521346227762e+00 1.6457819948173658e+00 -2.2181331994822626e+00 + 2.2165827571035281e+00 1.2731558789934190e+00 -2.2770944469034888e+00 + 2.2681094055752471e+00 9.0465898646214349e-01 -2.2333824269632405e+00 + 2.2278904536470812e+00 6.2446236738823613e-01 -2.0835161466747105e+00 + 2.1078858149778381e+00 4.6488986469906046e-01 -1.8710236666291165e+00 + 2.0789862798041483e+00 9.7523534533834111e-02 -1.6738791025152924e+00 + id 11538 + loc 8.1824862957000732e-01 7.6267379522323608e-01 1047 + blend 0.0000000000000000e+00 + interp 3.4908759077586771e+00:3.4908659077586770e+00:2.7063616681241853e-01:1.5475168832927018e+00:3.2709526394311628e-01:6.5278085569593891e-01:4.0917097643877232e-01:2.8277144485165867e-01:4.9615774827941417e-01:2.4589171059688655e-01:1.3623633651141847e+00:2.5048835202899994e-01:2.4237687321200094e+00 + CVs 20 + 3.1599968535440726e-01 7.2854220448247498e-01 -7.2664050908477962e-01 + 6.6720381927188577e-01 1.3844849098480079e+00 -1.3532193282360143e+00 + 1.0816579253399572e+00 2.0184209722122439e+00 -1.8497471082257233e+00 + 1.5783780634877307e+00 2.6084430372270249e+00 -2.0816190013700160e+00 + 2.0934129032597979e+00 3.0368667155167341e+00 -1.9567625689762962e+00 + 2.5153532805084038e+00 3.2292683208275470e+00 -1.5713293232573011e+00 + 2.7788342826136461e+00 3.2009833509643002e+00 -1.0856608883722938e+00 + 2.8949467885969451e+00 3.0252423971479963e+00 -6.0034862316771975e-01 + 2.9018371132522605e+00 2.7646935145050420e+00 -1.4421503595697205e-01 + 2.8213220358643065e+00 2.4470941516982130e+00 2.8550824129270902e-01 + 2.6411415993419221e+00 2.0692134096166326e+00 6.9722830278212000e-01 + 2.3489919949228679e+00 1.6475651263044162e+00 1.0765221701484955e+00 + 1.9628640500094359e+00 1.2597727348717858e+00 1.4024820779890552e+00 + 1.5086060086121580e+00 9.4942401108784269e-01 1.6556435847646043e+00 + 9.6462886129105119e-01 6.2296161326465005e-01 1.8624748557684145e+00 + 4.1970858335966421e-01 3.3788665122584582e-01 2.2787434208263901e+00 + 9.8855447803346999e-02 3.2820846274953452e-01 2.8596216791139155e+00 + 2.3580496606422183e-02 5.8329354617623319e-01 3.3475453983255834e+00 + 1.7904618617780749e-01 1.0481211315885826e+00 3.4960289887027054e+00 + id 11539 + loc 4.0840736031532288e-01 6.1748959124088287e-02 1075 + blend 0.0000000000000000e+00 + interp 4.6925499329700582e-01:3.1749092023477504e-01:8.4061068498662272e-01:4.6925030074707286e-01:1.5097693178834737e+00:4.5211383163592384e-01:1.9812157882059531e+00:2.5517350383583148e-01:2.2839671925791141e+00:2.5326072463791488e-01:3.0235062577526199e+00:3.2352510945771762e-01:3.9761879196378507e+00 + CVs 20 + -2.2203192505929267e-01 2.7303421926818494e-01 2.5008243502061545e-02 + -4.3237783838653204e-01 5.5881992077958642e-01 6.4931967880100971e-02 + -6.2805053451141335e-01 8.5485279176378259e-01 1.1683538012761774e-01 + -8.1594080303133265e-01 1.1575993216556106e+00 1.6737076084959529e-01 + -1.0105205971557527e+00 1.4634510034138146e+00 1.9048056694984261e-01 + -1.2259350649307219e+00 1.7606741539411579e+00 1.6146690471175074e-01 + -1.4691230645579823e+00 2.0259690466621647e+00 7.7555682590591424e-02 + -1.7306289802274946e+00 2.2323880910679463e+00 -5.5203989300445677e-02 + -1.9860607270542832e+00 2.3573703638494630e+00 -2.4049133169158421e-01 + -2.2062838481455835e+00 2.3900557425505111e+00 -4.8296547722672023e-01 + -2.3682653308479340e+00 2.3391652914554379e+00 -7.7013418444511950e-01 + -2.4652808875795404e+00 2.2227643412367453e+00 -1.0775708869708676e+00 + -2.5097225786904347e+00 2.0446426115543579e+00 -1.3765839654624517e+00 + -2.5216126856773502e+00 1.8063250303807510e+00 -1.6225538235856511e+00 + -2.5109510864087965e+00 1.5511635824303993e+00 -1.7844907943121080e+00 + -2.4798361377400635e+00 1.3276953546060790e+00 -1.8730416234342122e+00 + -2.4264864393790271e+00 1.1392504880412919e+00 -1.9099842557139939e+00 + -2.3436823093492207e+00 9.7562158759178963e-01 -1.9581282144891159e+00 + -2.1906978536201271e+00 9.3865486495691397e-01 -2.2496008002589378e+00 + id 11540 + loc 6.7741817235946655e-01 4.5988312363624573e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3972218570477073e-01:4.3971778848291371e-01:3.6162712515166662e-01:2.6342328929402475e-01:1.1077347857340245e+00:3.2164879452869577e-01:1.9027466354512681e+00:3.3694484046824830e-01:2.4885461485258396e+00:3.7301912852612562e-01:3.1881160368364694e+00:2.9800166422313296e-01:3.9797918303982889e+00 + CVs 20 + -2.7390824672851322e-01 4.0723986134359041e-01 1.2920803080254462e-01 + -5.2247037540175534e-01 8.1729663045560652e-01 3.0025286429077414e-01 + -7.6728412877590213e-01 1.2086407629980809e+00 5.2989483955837158e-01 + -1.0029757422295091e+00 1.5598174106657439e+00 8.2561245258213067e-01 + -1.2250907544188130e+00 1.8481647063886262e+00 1.1916492259529257e+00 + -1.4531322846674237e+00 2.0518957657038435e+00 1.6259999108825636e+00 + -1.7202173017221625e+00 2.1628252799820102e+00 2.1145467671054821e+00 + -2.0545262724422284e+00 2.1800642406791702e+00 2.6300194424589702e+00 + -2.4693831870108900e+00 2.0970396425343063e+00 3.1309263725885503e+00 + -2.9516266891487355e+00 1.8998772844612239e+00 3.5708708449035034e+00 + -3.4423752065970703e+00 1.5708986010775110e+00 3.9161056247395725e+00 + -3.8245823090389757e+00 1.0877692763820270e+00 4.1547461475277920e+00 + -3.9638525832950848e+00 4.7137887614220553e-01 4.2683928644433502e+00 + -3.8497657258293336e+00 -1.5135055574524725e-01 4.2421547996428863e+00 + -3.5688904140745814e+00 -6.7819175840347690e-01 4.1222099806546302e+00 + -3.0405747228395894e+00 -1.0036462407089140e+00 3.9707529085250730e+00 + -2.1546536900696118e+00 -6.6656843708087354e-01 3.8371864934866999e+00 + -1.6671486098197670e+00 1.8825241657834568e-01 3.7696482531841213e+00 + -1.3002621353479724e+00 2.5220877051004065e-01 3.7122927740345490e+00 + id 11541 + loc 3.0847480893135071e-01 3.5252121090888977e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5618921368702264e-01:3.9442092171154708e-01:8.4929362154773291e-01:4.4857869482479956e-01:1.2270531530675750e+00:3.9366267712593023e-01:1.9882572973666535e+00:4.1458036349473881e-01:2.7757916656456159e+00:4.5618465179488582e-01:3.1938830902023057e+00:4.1002422709075959e-01:3.9677602897891573e+00 + CVs 20 + -2.4607545934451130e-01 3.4220906753808844e-01 -1.0597258981909438e-01 + -4.5677577588127005e-01 6.8062584610830434e-01 -1.9731056246792489e-01 + -6.4415483218920422e-01 1.0133180647665538e+00 -2.7709935123559598e-01 + -8.0401705890740105e-01 1.3371348090048305e+00 -3.4184817974347520e-01 + -9.0937018250049928e-01 1.6639006884034504e+00 -3.8095040465925506e-01 + -9.4137648025513376e-01 2.0212150584800850e+00 -3.9722196094754364e-01 + -9.9504257776803828e-01 2.4201908477193004e+00 -4.2225311606468957e-01 + -1.2018125038069307e+00 2.7827949003457393e+00 -4.5595459525769633e-01 + -1.5567884926160664e+00 3.0285744798102958e+00 -4.8729260202456703e-01 + -1.9913224710918722e+00 3.1214630734423583e+00 -5.3388072347388515e-01 + -2.4346132400572551e+00 3.0632306888127401e+00 -6.2287142536085360e-01 + -2.8229514969545679e+00 2.8893055750954533e+00 -7.8113983784009988e-01 + -3.1345236462818860e+00 2.6515865215934942e+00 -1.0207360897074018e+00 + -3.3735148927198160e+00 2.4071822818607824e+00 -1.3447129503324482e+00 + -3.5353582238318739e+00 2.1809488050769206e+00 -1.7211813392051427e+00 + -3.6505981500465192e+00 1.9277748925808147e+00 -2.0965326359960850e+00 + -3.7548405106736311e+00 1.5872254211570214e+00 -2.4673439267131347e+00 + -3.7390172867979907e+00 1.1221001266941180e+00 -2.7659313078031733e+00 + -3.4867376176722416e+00 9.7067565812030909e-01 -2.6170670485544623e+00 + id 11542 + loc 4.0491628646850586e-01 3.3164814114570618e-01 1077 + blend 0.0000000000000000e+00 + interp 4.3590630644819706e-01:3.1721205879668984e-01:7.0768244894606203e-02:3.5069411638306014e-01:9.5401612330066188e-01:3.6345283878021095e-01:1.3111357671118733e+00:2.6384637066121613e-01:1.9907632918341216e+00:3.0622832795483701e-01:2.7371137463583777e+00:4.3590194738513260e-01:3.4273204137998374e+00 + CVs 20 + -1.5832253663285306e-01 3.4595476386969626e-01 -1.0909133986986588e-01 + -3.1964621107001456e-01 6.8907851962931521e-01 -2.0821904295884597e-01 + -4.9638318190518105e-01 1.0049138641123154e+00 -3.2037872080361951e-01 + -6.9060471626718167e-01 1.2785167925847061e+00 -4.5509971273161509e-01 + -8.9625441660497851e-01 1.5009418302253932e+00 -6.1315538810158543e-01 + -1.1033564648428749e+00 1.6660216076048737e+00 -7.9139597184876231e-01 + -1.3006921201900337e+00 1.7714357904598659e+00 -9.8280944211721577e-01 + -1.4777968910812684e+00 1.8197705933765707e+00 -1.1763809889916845e+00 + -1.6288937496533262e+00 1.8185060792406234e+00 -1.3631473274798718e+00 + -1.7524024351848002e+00 1.7746100191363445e+00 -1.5431762789784922e+00 + -1.8475681602273131e+00 1.6965678193183686e+00 -1.7192640655585116e+00 + -1.9156999686843954e+00 1.5989096238533722e+00 -1.8952670323473484e+00 + -1.9594106359514478e+00 1.4921172120600423e+00 -2.0873420257922377e+00 + -1.9789012218467059e+00 1.3563772871507405e+00 -2.3315279512772205e+00 + -1.9791328749734893e+00 1.1248815005925428e+00 -2.6539077323347726e+00 + -1.9726635879450143e+00 6.8232029738223909e-01 -2.9533635336402426e+00 + -1.9914885819982924e+00 5.0958091366961611e-03 -3.0192593273639199e+00 + -2.0971611601218223e+00 -6.1961590878496797e-01 -2.7880771352924398e+00 + -2.1789716401969925e+00 -6.2853614531568880e-01 -2.5315388306323325e+00 + id 11543 + loc 1.3623484969139099e-01 8.8512384891510010e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2036467840741207e-01:2.9556244091253586e-01:1.2063612207869923e-01:3.8865480214752340e-01:9.8773883990405054e-01:4.9865042202508658e-01:1.1698268007879202e+00:5.2035947476062805e-01:1.6262344214103623e+00:4.8021405635926567e-01:2.0000000381572831e+00:5.1323942335136652e-01:2.5099536694491151e+00:3.2227091018038373e-01:2.9784458076338378e+00:2.9891658662776505e-01:3.4812285611765055e+00 + CVs 20 + 1.5986932962945116e-01 6.2391327065048130e-01 -3.9952841164037933e-01 + 3.7881525509364156e-01 1.2689147754541248e+00 -7.7888076039802034e-01 + 6.8694604851550878e-01 1.9047510464810262e+00 -1.0652277384818740e+00 + 1.0964099457184739e+00 2.4634367318144932e+00 -1.1533912773224564e+00 + 1.5629858789255473e+00 2.8473538829271279e+00 -9.8817624814220673e-01 + 2.0047388669308890e+00 3.0068338329907589e+00 -6.2149531854358986e-01 + 2.3544442854942718e+00 2.9506395656862598e+00 -1.3751238364211082e-01 + 2.5804316317946978e+00 2.7161048098262874e+00 4.0724150363953338e-01 + 2.6733689294710370e+00 2.3386285654576922e+00 9.8396525721637973e-01 + 2.6342328962875290e+00 1.8370191407715317e+00 1.5720269533455478e+00 + 2.4689786701988616e+00 1.2215959938109866e+00 2.1521777058753724e+00 + 2.1892444041004340e+00 5.5012287180948016e-01 2.7263149492563770e+00 + 1.8409991271991040e+00 -4.3160857638470107e-02 3.3405752275651848e+00 + 1.5371201630373135e+00 -4.4176013684945925e-01 4.0315470861515026e+00 + 1.4754487457757648e+00 -5.1626009302335030e-01 4.7501194821296728e+00 + 1.7370975630692194e+00 -3.1100652799223472e-01 5.3571059658419227e+00 + 2.2297886984683073e+00 1.2598112065672851e-02 5.8554739303535808e+00 + 2.9012715764020371e+00 3.6081265372850035e-01 6.3243967802144532e+00 + 3.6421776665997485e+00 6.0327742915168114e-01 6.9918771330177343e+00 + id 11544 + loc 9.6342766284942627e-01 6.3108849525451660e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9832291421752464e-01:3.0917760786594695e-01:5.4970251542744064e-01:3.3237860617957915e-01:1.1814059331310371e+00:3.9550192944990148e-01:1.9408030061946415e+00:3.9831893098838250e-01:2.1789594877802942e+00:2.9297465521146693e-01:2.9143974185522619e+00:2.4669752892713748e-01:3.5710395990183819e+00 + CVs 20 + -3.2820834297704271e-01 3.6366872983095189e-01 -5.4753330491068675e-02 + -5.9335818819844621e-01 7.2226393781448350e-01 -9.2821078768608400e-02 + -8.2149984158988754e-01 1.0781311685897645e+00 -1.1787537017182470e-01 + -1.0417076634712887e+00 1.4112482043557266e+00 -1.7317595398741614e-01 + -1.2763971828313432e+00 1.6935565759319022e+00 -2.9519264583104410e-01 + -1.5255030022761098e+00 1.8975132727839168e+00 -4.8668224058854148e-01 + -1.7481645762429070e+00 1.9947861700079366e+00 -7.2807267519155561e-01 + -1.8744158377817262e+00 1.9857801334257055e+00 -9.7699612356247900e-01 + -1.8754116563853058e+00 1.9188733405231782e+00 -1.1783127812976382e+00 + -1.8043253908623522e+00 1.8412373857936237e+00 -1.3259122565120871e+00 + -1.7001415845740513e+00 1.7550974609061050e+00 -1.4480571126046817e+00 + -1.5680555333075801e+00 1.6609857339415970e+00 -1.5442789439483340e+00 + -1.4122079696842116e+00 1.5619905587726144e+00 -1.6149979196469060e+00 + -1.2231664527648358e+00 1.4411293635789428e+00 -1.6702515359770005e+00 + -9.9680150374770071e-01 1.2872339750116883e+00 -1.7182197401568970e+00 + -7.6201787363187612e-01 1.1212942899770189e+00 -1.7740131923241664e+00 + -5.4162254724551939e-01 9.5704820359574505e-01 -1.8404813057511846e+00 + -3.4541282670810580e-01 8.3352385363669135e-01 -1.9928309145538674e+00 + -2.2791788338970612e-01 9.2261611706384994e-01 -2.2220187288564164e+00 + id 11545 + loc 1.3623484969139099e-01 6.5048319101333618e-01 410 + blend 0.0000000000000000e+00 + interp 4.0602310339607539e-01:2.9119689676374216e-01:6.4642321068067443e-02:3.7106784069217991e-01:1.0003034118934666e+00:3.0373904277558800e-01:1.3729175475536080e+00:3.0696686768988241e-01:1.9892367784744502e+00:4.0601904316504145e-01:2.4331992122249675e+00:3.2026828331929025e-01:2.9963873439442033e+00:3.5420267057912680e-01:3.5189401627484833e+00 + CVs 20 + 2.9679661919042905e-01 1.5489381887231518e-01 -6.7175437818018185e-02 + 5.2789171743770602e-01 2.6913346343874678e-01 -1.3058760982994874e-01 + 7.3896864804904849e-01 3.7200013958615408e-01 -1.8637087799220312e-01 + 9.5459362359779765e-01 4.8089544143962121e-01 -2.3106997221035430e-01 + 1.1732592635271206e+00 5.9518675458604009e-01 -2.6467679450497816e-01 + 1.3926689552429807e+00 7.1367573833757714e-01 -2.8650661483555079e-01 + 1.6123350349914540e+00 8.3634460422938939e-01 -2.9272819568144148e-01 + 1.8329305080435219e+00 9.6315439845176343e-01 -2.7801261554258710e-01 + 2.0526186995762181e+00 1.0920071020366944e+00 -2.3985649775770579e-01 + 2.2675892398622390e+00 1.2208550974062931e+00 -1.7717569230176777e-01 + 2.4847735147065966e+00 1.3548152364622259e+00 -7.4713527409490332e-02 + 2.7380571728271379e+00 1.5003174075039087e+00 1.0295821867406585e-01 + 3.0790287557893925e+00 1.6333349316333416e+00 3.5436100667633535e-01 + 3.5157616265421652e+00 1.7058724612019800e+00 5.9919297057443610e-01 + 4.0067862774123215e+00 1.7018864626910235e+00 7.7562408196523402e-01 + 4.5271084210012518e+00 1.6250743049413436e+00 8.7901048372948010e-01 + 5.0586932246809777e+00 1.4793236477924250e+00 9.0770693146811332e-01 + 5.5647753545446061e+00 1.2848045629822780e+00 8.5810087698576865e-01 + 5.8900120907981144e+00 1.1662601584361005e+00 8.1268220583655415e-01 + id 11546 + loc 7.8662782907485962e-01 3.4514135122299194e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0521512889414821e-01:5.0521007674285934e-01:6.2366144675239588e-01:4.1079089414331610e-01:9.9459003632157794e-01:4.3865263518582909e-01:1.3277933347456119e+00:2.8029560546184529e-01:2.1894818848135729e+00:2.8958630814979752e-01:2.9967900798287603e+00:3.2620245249004043e-01:3.9466026085615655e+00 + CVs 20 + -1.3061855372360401e-01 1.7116771753225740e-01 1.9268780154935122e-01 + -2.2400736966402468e-01 3.8405066002526750e-01 3.9797308298877682e-01 + -2.9582920104260568e-01 6.1404160493744830e-01 5.9160771249217914e-01 + -3.5929164412974895e-01 8.3742524631046489e-01 7.6433452362470522e-01 + -4.2621751599530094e-01 1.0361043330082567e+00 9.2446555221358129e-01 + -5.0519694387293645e-01 1.1984828139683745e+00 1.0808555821427133e+00 + -5.9913310064200354e-01 1.3205839274422662e+00 1.2414214007608737e+00 + -7.2741061468209556e-01 1.3920628837409168e+00 1.4200524163163266e+00 + -9.1834105502303853e-01 1.3819686040628751e+00 1.6014190505133277e+00 + -1.1677750612787499e+00 1.2771973748096264e+00 1.7328669361891207e+00 + -1.4480590436865999e+00 1.1035962824346168e+00 1.7837447479583481e+00 + -1.7351958589214025e+00 8.9407312879725831e-01 1.7534753299666461e+00 + -1.9948725643995497e+00 6.7220972560144843e-01 1.6404378875416483e+00 + -2.1708767144983239e+00 4.5936214315680296e-01 1.4436444345260455e+00 + -2.2407316601420320e+00 2.5470974297360260e-01 1.1810343662574256e+00 + -2.2530321659374661e+00 3.4688065992889427e-03 8.6967721549831900e-01 + -2.3159091198050743e+00 -3.5047569206650275e-01 5.0563363034149322e-01 + -2.5707027174323818e+00 -6.7565364964272090e-01 1.3415396873602181e-01 + -2.8350642801147119e+00 -6.4934425109177996e-01 1.5042026599271063e-02 + id 11547 + loc 7.7793073654174805e-01 3.7814387679100037e-01 1090 + blend 0.0000000000000000e+00 + interp 5.0313253732718055e-01:2.9191268380678687e-01:3.3903259633514471e-01:5.0312750600180733e-01:9.4442611438400070e-01:3.6590672156701709e-01:1.7980930751341972e+00:4.2825228003840077e-01:2.0532795124082406e+00:3.1027459723673068e-01:3.0237496204494434e+00:4.9758844541731334e-01:3.9928501471015951e+00 + CVs 20 + -1.3817881161005255e-01 4.5991375306311250e-01 -1.4356178298778155e-01 + -1.9782656214283700e-01 8.4201443083497618e-01 -2.1207850955217056e-01 + -2.2829341761578509e-01 1.1858620292472595e+00 -2.4290754838727896e-01 + -2.4660175815341812e-01 1.5022514595737846e+00 -2.4926314612695155e-01 + -2.4947942691567959e-01 1.7835287650118035e+00 -2.3085602385056303e-01 + -2.3948534207131589e-01 2.0251285927160922e+00 -1.9235495027307603e-01 + -2.2029250671908307e-01 2.2301745711251471e+00 -1.4118373803111650e-01 + -1.8856333265678238e-01 2.4070718231243777e+00 -7.7568537006852178e-02 + -1.3650957108301642e-01 2.5523211765459650e+00 1.6743573907357256e-02 + -6.8440923228100914e-02 2.6405430365114393e+00 1.6377155067828320e-01 + 2.4767855418869056e-03 2.6539208109640393e+00 3.6016756202135203e-01 + 7.1700663492841987e-02 2.5924905455365788e+00 5.8924665611202531e-01 + 1.4155256762226187e-01 2.4525303868620170e+00 8.4050155010919991e-01 + 2.2074282597944711e-01 2.2155888378724859e+00 1.1073005299304906e+00 + 3.1838469767027322e-01 1.8548486623278004e+00 1.3533346945542770e+00 + 4.2012333155744519e-01 1.3587191485512424e+00 1.4832686741207828e+00 + 5.1861643722748785e-01 7.4634144675363301e-01 1.4015992264600068e+00 + 6.4973576309715286e-01 1.8538584553685444e-01 1.0887465053438488e+00 + 7.5134278928613218e-01 8.8115440425090674e-02 8.4797575804145087e-01 + id 11548 + loc 6.5679788589477539e-01 5.9508955478668213e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4900357538567653e-01:4.3023422853900323e-01:9.4299432937372529e-04:4.4899908534992272e-01:6.0549732024195690e-01:2.6483289389175452e-01:1.0031258117850650e+00:2.6418542931461370e-01:1.9176846870996842e+00:4.2383741722670687e-01:2.6287829102640656e+00:2.8410774604859718e-01:3.0088298073713209e+00:4.4021417766850701e-01:3.4604203581405759e+00 + CVs 20 + 9.4414385286848201e-02 2.6863870389249400e-01 -2.3285355612273581e-01 + 2.2501041346006334e-01 5.1802340861109908e-01 -4.6354931496867879e-01 + 4.0144547877466102e-01 7.3522508238380269e-01 -6.7685006132775516e-01 + 6.2038614206048626e-01 9.0886220982804544e-01 -8.6183288774372513e-01 + 8.6962257685236732e-01 1.0318850070337393e+00 -1.0155577682862698e+00 + 1.1356359721415168e+00 1.1040548260229104e+00 -1.1446989026375876e+00 + 1.4086506041673039e+00 1.1312170685438618e+00 -1.2626925299932892e+00 + 1.6818523212385126e+00 1.1214316724707936e+00 -1.3842407244106794e+00 + 1.9457821355160292e+00 1.0809311726828670e+00 -1.5212509060404957e+00 + 2.1849444773233366e+00 1.0138122954673365e+00 -1.6753857704338126e+00 + 2.3857846925738948e+00 9.2628157400025057e-01 -1.8365281631347814e+00 + 2.5447843430299422e+00 8.2778375616748501e-01 -1.9935004020475864e+00 + 2.6663841888290833e+00 7.2987514389952690e-01 -2.1401630347683183e+00 + 2.7597903266089618e+00 6.4557671437865338e-01 -2.2760046284681237e+00 + 2.8355194422677013e+00 5.8118226667120487e-01 -2.4123575809784055e+00 + 2.8957789848836457e+00 5.1861057382396081e-01 -2.5736158490145216e+00 + 2.9242983343907634e+00 4.1916810360140117e-01 -2.7711532571015804e+00 + 2.8933636140394943e+00 2.6226663845033282e-01 -2.9803998771751044e+00 + 2.7558220496615076e+00 7.3447797088720512e-02 -3.0932377664628516e+00 + id 11549 + loc 9.9158406257629395e-02 8.6086273193359375e-01 1076 + blend 0.0000000000000000e+00 + interp 4.2885985006711991e-01:3.2350112450918711e-01:8.2445751396652311e-01:3.9421489361657136e-01:1.1114871771483517e+00:4.2885556146861925e-01:1.8547330944435401e+00:3.2799744926564922e-01:2.8967706416302326e+00:3.4149970159201459e-01:3.2190574696575460e+00:3.5669680453211555e-01:3.9552789702755304e+00 + CVs 20 + 1.9115796020443768e-01 2.9440589012973090e-01 5.4259620389851410e-03 + 3.7976111061564716e-01 5.5968236572650987e-01 -3.0386862639627088e-02 + 5.6416771430155255e-01 8.0253275536782176e-01 -9.0346361205111136e-02 + 7.4197142882790890e-01 1.0218802039418213e+00 -1.6548362011757217e-01 + 9.1157630658772260e-01 1.2106686376155176e+00 -2.5632587385848771e-01 + 1.0685598168188550e+00 1.3619314313614415e+00 -3.6126347454883045e-01 + 1.2056753546041208e+00 1.4701247946897338e+00 -4.7455742268846296e-01 + 1.3150106744244667e+00 1.5339467976583168e+00 -5.8614667318475999e-01 + 1.3894655979438313e+00 1.5595373091803257e+00 -6.8431720204705038e-01 + 1.4249685247466672e+00 1.5588070682246467e+00 -7.6488792444689868e-01 + 1.4218054006488177e+00 1.5410281133687955e+00 -8.3302853737763449e-01 + 1.3853658140016745e+00 1.5071504440207877e+00 -8.9237265717293424e-01 + 1.3264488427776149e+00 1.4482932356932821e+00 -9.3772538812070738e-01 + 1.2601686903519509e+00 1.3517083295239525e+00 -9.4960371329151050e-01 + 1.2023459925747109e+00 1.2260740203056752e+00 -8.9962746648737346e-01 + 1.1701605110129298e+00 1.1167568250233175e+00 -7.7101583341569413e-01 + 1.1989863080271375e+00 1.0596301681545164e+00 -5.6576898041915369e-01 + 1.3009180908368401e+00 1.0194245591483373e+00 -3.2621630892461262e-01 + 9.0551761590118007e-01 8.2059682474412343e-01 -3.0807027733323722e-01 + id 11550 + loc 7.2626298666000366e-01 6.8780821561813354e-01 1077 + blend 0.0000000000000000e+00 + interp 4.3492396896749025e-01:3.2437918956351602e-01:1.0087169204606101e+00:4.3491961972780058e-01:1.9992293982959977e+00:3.6713669227925000e-01:2.8461397995408539e+00:3.6833085688913492e-01:3.1821445661217300e+00:3.1722804040898128e-01:3.9665696085565001e+00 + CVs 20 + 3.1975822797513098e-03 3.7776169777796165e-01 -1.7668045329955462e-01 + 4.1601452214413026e-02 7.6509184123637619e-01 -3.6770370975898792e-01 + 8.9636386146970171e-02 1.1608343745312888e+00 -5.9103561453893050e-01 + 1.3248831152759427e-01 1.5542217759183012e+00 -8.7026685147079930e-01 + 1.7024762679478600e-01 1.9256969222341822e+00 -1.2226238788138768e+00 + 2.2065116700930532e-01 2.2577053943704266e+00 -1.6485564921188962e+00 + 3.1559543549997982e-01 2.5350992895465740e+00 -2.1314325969751780e+00 + 4.8114761485171154e-01 2.7424631298843329e+00 -2.6437944465100913e+00 + 7.2796825609463334e-01 2.8608466342089987e+00 -3.1580228833404744e+00 + 1.0468194056944027e+00 2.8625086914647282e+00 -3.6516916839585960e+00 + 1.3952942222812776e+00 2.7116380614611719e+00 -4.1069804931855085e+00 + 1.6881532911833677e+00 2.3708354579258604e+00 -4.5069993087875302e+00 + 1.8202900023706783e+00 1.8527884269221868e+00 -4.8096579864116613e+00 + 1.7770977620085695e+00 1.2841456592468925e+00 -4.9781406938922679e+00 + 1.6318812464918004e+00 7.5709173748900593e-01 -5.0447537644315616e+00 + 1.3718447218908056e+00 3.1384062890956310e-01 -5.0491271191736518e+00 + 9.3092751285708475e-01 1.1589995831671018e-01 -5.0303959747496103e+00 + 4.9536667494781916e-01 2.8125324422133668e-01 -5.0291806279504057e+00 + 1.6061054047549889e-01 1.8807312664763354e-01 -5.0201353210859869e+00 + id 11551 + loc 8.2817900180816650e-01 4.8086774349212646e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3776237650891570e-01:3.1533062769536829e-01:8.6272631633673158e-02:4.3775799888515060e-01:9.9070716423942540e-01:3.5224001892451462e-01:1.6151280575068450e+00:3.1980362097294196e-01:2.1872796219443948e+00:3.3638331997431359e-01:3.0238961290170581e+00:4.2061239731298061e-01:3.6973395737716679e+00 + CVs 20 + 4.6813120120164997e-01 2.7459156939443896e-01 -1.2809957767622304e-01 + 8.6986062603845604e-01 5.2364260751013059e-01 -2.3821111470544543e-01 + 1.2354447790647562e+00 7.6769458878219754e-01 -3.4274584432611654e-01 + 1.5946403828257989e+00 1.0055621446550194e+00 -4.1003155252600354e-01 + 1.9480732848836344e+00 1.2004413564333398e+00 -4.0760490749709244e-01 + 2.2798396288488050e+00 1.3187822947368277e+00 -3.4331943790321984e-01 + 2.5714944897729568e+00 1.3511297895107528e+00 -2.3975776759856837e-01 + 2.8128376384628639e+00 1.3064220436078267e+00 -1.0470594374589992e-01 + 2.9896168297784409e+00 1.1934900311103132e+00 5.8718746913347220e-02 + 3.0852272576020456e+00 1.0315413801806992e+00 2.2008526839798426e-01 + 3.1132202335097388e+00 8.5489197436496922e-01 3.4603567516078704e-01 + 3.0994672178931841e+00 6.9254896062462912e-01 4.2041485538642498e-01 + 3.0703240334943400e+00 5.6404551790271062e-01 4.4500003131539789e-01 + 3.0122088415471922e+00 4.1678664219496014e-01 4.6450262509858309e-01 + 2.8741059348051134e+00 1.6341572847348046e-01 5.1586326810406724e-01 + 2.6593368408408233e+00 -2.1124540605590589e-01 6.7227808216836704e-01 + 2.4255683563725881e+00 -6.5478967088344353e-01 1.0949849974024350e+00 + 2.3091207791296764e+00 -9.1210544886405254e-01 1.8240184943339868e+00 + 2.2919517790416046e+00 -8.8572109045911329e-01 2.0586502698282065e+00 + id 11552 + loc 2.0682123303413391e-01 4.3544912338256836e-01 1047 + blend 0.0000000000000000e+00 + interp 4.1472217486705198e-01:2.7026955479058984e-01:7.7063658948242431e-01:4.1471802764530336e-01:1.2580073117121002e+00:2.8443497214197722e-01:2.0054718481281135e+00:3.1168632673766128e-01:3.2179824034433646e+00:2.8359386180573465e-01:3.9916287666827523e+00 + CVs 20 + -6.2072345144206309e-01 5.0544443341182055e-01 7.5010202478493770e-03 + -1.1894626323252473e+00 1.0184506029504741e+00 -3.4739015724780387e-03 + -1.7224224181604193e+00 1.5955051666789910e+00 -9.9819094538058262e-02 + -2.1767017863476275e+00 2.2570059828403339e+00 -3.7445685058358141e-01 + -2.4341062169642997e+00 2.9241575024802562e+00 -8.8083685076638507e-01 + -2.4404549665556785e+00 3.4821643414489833e+00 -1.5754753637637045e+00 + -2.2287446838285021e+00 3.8367829988085842e+00 -2.3831282800042253e+00 + -1.8788919297659399e+00 3.9097577593448607e+00 -3.2363281575010596e+00 + -1.4878504640210442e+00 3.6575274688265660e+00 -4.0446027408416345e+00 + -1.1140041370312703e+00 3.1338500254366166e+00 -4.6974359767401914e+00 + -7.6475586067096757e-01 2.4690092352067721e+00 -5.1162095670458427e+00 + -4.3966981712484565e-01 1.8024989842434542e+00 -5.2923171520514849e+00 + -1.3359360592767350e-01 1.2133344220276474e+00 -5.2892444120517670e+00 + 1.9648947919819509e-01 7.1550831720457442e-01 -5.1457651115197427e+00 + 6.0325162074447469e-01 3.3837274154743235e-01 -4.8531600436996820e+00 + 1.0980675383216538e+00 1.5094582854993865e-01 -4.4069249520992155e+00 + 1.6517955439263405e+00 2.4347337229977550e-01 -3.7944121024856203e+00 + 2.0051541568813636e+00 8.5231176200426639e-01 -3.0169525021150454e+00 + 1.8728091874291839e+00 1.2919465676010358e+00 -2.7134435569688575e+00 + id 11553 + loc 9.2027163505554199e-01 8.9110255241394043e-02 1075 + blend 0.0000000000000000e+00 + interp 4.2114145449511431e-01:3.1126230477702016e-01:1.5888544558668749e-01:4.0490488981766826e-01:1.0931544740821320e+00:2.8938256609175511e-01:1.9559968833430377e+00:2.4976985843146246e-01:3.0122427894250072e+00:4.2113724308056938e-01:3.9445078575369070e+00 + CVs 20 + -5.8752854895834178e-02 1.9759613901324136e-01 2.2623634004019488e-01 + -9.3481471432100810e-02 4.1400348295565392e-01 4.4435581625818987e-01 + -9.9424804452773963e-02 6.3830875310573632e-01 6.2839833543432477e-01 + -7.8554597353966638e-02 8.5304225713089843e-01 7.6562997025455493e-01 + -4.8563290347965693e-02 1.0601196213938628e+00 8.7857503162496331e-01 + -3.5261621070355131e-02 1.2695656600266656e+00 1.0018092362636095e+00 + -5.9638659101942326e-02 1.4751127188587660e+00 1.1650274500807409e+00 + -1.4877720413440343e-01 1.6445786542244791e+00 1.3903991726673532e+00 + -3.3569970082772282e-01 1.7300462022727507e+00 1.6500136452516603e+00 + -6.1947390059481311e-01 1.7074483693013389e+00 1.8621589800428722e+00 + -9.6362643046457297e-01 1.5956877409988666e+00 1.9810178283932318e+00 + -1.3351438975241074e+00 1.4140505580479428e+00 2.0000011249948773e+00 + -1.6632020390872633e+00 1.1723468655377443e+00 1.9059187889195011e+00 + -1.8400842335394574e+00 9.0211322630989355e-01 1.7212271656343707e+00 + -1.8535990792192849e+00 6.1325268612438266e-01 1.5010664838676941e+00 + -1.8037628359576814e+00 2.4391359503106719e-01 1.2557277192384264e+00 + -1.8873648622868759e+00 -2.4884435783028869e-01 9.5034001945265223e-01 + -2.2888186861956754e+00 -6.2355562549809240e-01 6.7781061801353615e-01 + -2.6822106675237016e+00 -6.9646830654542946e-01 6.1676610992381697e-01 + id 11554 + loc 2.0682123303413391e-01 3.2001435756683350e-01 410 + blend 0.0000000000000000e+00 + interp 4.2434031843809783e-01:3.1107219817810944e-01:1.2371766983287902e-04:3.4903908543069762e-01:7.3545294274220097e-01:4.2433607503491350e-01:1.2091886568080141e+00:3.1543996937596180e-01:2.0460448293195235e+00:3.7035873593757829e-01:2.7765407926070127e+00:3.2183227072267923e-01:3.1239711374352339e+00 + CVs 20 + -1.1366219959231202e-01 1.1376248679922821e-01 -2.5830632956183480e-01 + -2.2653505778328492e-01 2.0168006879632039e-01 -4.8706867151017796e-01 + -3.3909432704937870e-01 2.7255602357635733e-01 -7.0465415101824158e-01 + -4.5430462252774068e-01 3.3154954961690564e-01 -9.2127085005341636e-01 + -5.7244910108066982e-01 3.7828291480158710e-01 -1.1354763711094622e+00 + -6.9252046986949256e-01 4.1374252495670105e-01 -1.3481739911249431e+00 + -8.1070594375434546e-01 4.4088920396701242e-01 -1.5640256170765259e+00 + -9.2043848156848496e-01 4.6321410961439669e-01 -1.7893076600281530e+00 + -1.0137328254349285e+00 4.8338585711336590e-01 -2.0297509245930776e+00 + -1.0817232551385914e+00 5.0338170845767982e-01 -2.2905792935950244e+00 + -1.1158006490214614e+00 5.2347813498178708e-01 -2.5692862170967103e+00 + -1.1239840861189689e+00 5.3740153413618497e-01 -2.8318562341018243e+00 + -1.1478676091713451e+00 5.3554116888004921e-01 -3.0138776467988979e+00 + -1.2156489828227715e+00 5.2559241985029903e-01 -3.0743115356564115e+00 + -1.2994500244605454e+00 5.2843440015707488e-01 -3.0429888796960594e+00 + -1.3678426639357806e+00 5.4809669967335584e-01 -2.9849895751869537e+00 + -1.4125776817807383e+00 5.8011248954406913e-01 -2.9239622917427566e+00 + -1.4280986857744535e+00 6.2234440638424071e-01 -2.8605348031751010e+00 + -1.5301947371819917e+00 5.3997717884023499e-01 -3.0216159382248247e+00 + id 11555 + loc 2.7318766713142395e-01 8.7190367281436920e-02 1074 + blend 0.0000000000000000e+00 + interp 4.1396816327374869e-01:2.5955668713299690e-01:1.0503910032524151e+00:2.9192995398755289e-01:2.0799749363039171e+00:3.9941185164497456e-01:2.9829832979245516e+00:2.6719115709498120e-01:3.3421815197993321e+00:4.1396402359211598e-01:3.9928460078979739e+00 + CVs 20 + -2.5711675913328086e-01 2.8011642821033850e-01 1.1484166280389847e-02 + -4.8422869970897459e-01 5.4502234213077461e-01 2.7485861398840183e-03 + -6.9646666699035042e-01 8.0056425132714071e-01 -2.0445807707117736e-02 + -8.9273005342044387e-01 1.0551946730517596e+00 -5.1899629819158521e-02 + -1.0129589935926198e+00 1.3155099515669268e+00 -7.4841197495666367e-02 + -9.7821548836293093e-01 1.5904681493679955e+00 -6.2290509724833742e-02 + -8.4152939865980259e-01 1.9452739315255752e+00 1.2687969602609706e-02 + -8.1373084375977334e-01 2.3785332421714842e+00 1.3701267845214404e-01 + -9.8054878596026085e-01 2.7898802049959111e+00 2.8072827117611965e-01 + -1.3072246124826881e+00 3.0845660781560480e+00 4.1939511066193053e-01 + -1.7161420153254354e+00 3.2283313307642505e+00 5.1758781935428111e-01 + -2.1133098433999038e+00 3.2723302468787612e+00 5.1777179251115557e-01 + -2.4324867618306110e+00 3.3158909052566776e+00 3.8293334182754629e-01 + -2.7025276848137390e+00 3.4664216531116159e+00 7.9977198671569383e-02 + -2.9787888082638156e+00 3.7102822546328715e+00 -4.5869290083252101e-01 + -3.3234690658765178e+00 3.8682740081696965e+00 -1.2563515969054100e+00 + -3.8355776029970459e+00 3.6494452236431023e+00 -2.4195404407570895e+00 + -4.0211129932762883e+00 2.8898273453463705e+00 -3.5261796751069872e+00 + -3.7145387235345226e+00 2.8846817854105602e+00 -3.5404375690472367e+00 + id 11556 + loc 3.2754331827163696e-01 3.5454601049423218e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0890306394371845e-01:3.9069903924344418e-01:5.0301953851472625e-04:4.0889897491307903e-01:6.1933579181325926e-01:3.7457503097549055e-01:1.2816311446558313e+00:3.0551002497569951e-01:2.0001231370264989e+00:3.2538738519037569e-01:2.9444248461347176e+00:3.0680700714716258e-01:3.4858330628158081e+00 + CVs 20 + 2.8632717398700422e-02 3.8984460097867379e-01 -3.8006832982549776e-01 + -1.5378874110742680e-02 7.7445661302251712e-01 -7.4227667718048962e-01 + -1.1708541783926368e-01 1.1437418975018228e+00 -1.0941875028270267e+00 + -2.8576109824243789e-01 1.4949349262818687e+00 -1.4308512445401853e+00 + -5.2091226794944057e-01 1.8095959382170963e+00 -1.7397220829462268e+00 + -7.9939383711339962e-01 2.0649424648648669e+00 -2.0210569848395634e+00 + -1.0943433317447120e+00 2.2517491709313298e+00 -2.2866098055958166e+00 + -1.3842335857880101e+00 2.3693693388770227e+00 -2.5447476933049433e+00 + -1.6474508669827070e+00 2.4151756356288194e+00 -2.7957764435177017e+00 + -1.8691451623805295e+00 2.3896707248942644e+00 -3.0327757431226887e+00 + -2.0584416116995943e+00 2.3022154482921708e+00 -3.2469810728568667e+00 + -2.2377199883248431e+00 2.1568216583794264e+00 -3.4336590364654533e+00 + -2.4090838958312588e+00 1.9592420323045063e+00 -3.5826336609527711e+00 + -2.5637125815784700e+00 1.7391319935918175e+00 -3.6872085402150638e+00 + -2.7053696656771247e+00 1.5161011362735612e+00 -3.7550603997716023e+00 + -2.8414763137825854e+00 1.2621359099433298e+00 -3.8212124593169681e+00 + -2.9644587548629939e+00 8.2690837198336853e-01 -3.9273252400842216e+00 + -3.0031150161554843e+00 2.1697106077439243e-01 -3.8386934094236809e+00 + -3.0165313808535599e+00 2.2248082885267495e-01 -3.7424946618937911e+00 + id 11557 + loc 1.1161391437053680e-01 1.1304917931556702e-01 1084 + blend 0.0000000000000000e+00 + interp 1.0504919667567740e+00:4.4741740426753590e-01:2.5576199174971448e-02:2.5786109823243586e-01:9.8364583169006270e-01:9.4085986218306450e-01:1.0046868293263476e+00:1.0504819667567740e+00:2.8280621674019741e+00:5.3736104408631624e-01:2.9968967449301607e+00:3.0477402358108513e-01:3.1984962017213241e+00 + CVs 20 + 4.7807320174403267e-01 4.0359034800125887e-01 1.9305609316145600e-01 + 8.5795142930976287e-01 7.1153068448378154e-01 3.2682986933778591e-01 + 1.2341184236217866e+00 9.8980945251568719e-01 4.2056123998040940e-01 + 1.6095167199131968e+00 1.3042706199284171e+00 5.6114342565880937e-01 + 1.8853185682173201e+00 1.6497364583101082e+00 8.2206068842695545e-01 + 1.9700933339363538e+00 1.9578964864840787e+00 1.1979625191357006e+00 + 1.8159646883780363e+00 2.1566068960501465e+00 1.6070758484079855e+00 + 1.3833618580062836e+00 2.1928154656255181e+00 1.8794259819995829e+00 + 8.5620820293185629e-01 2.0403632738009629e+00 1.7794330804226504e+00 + 5.4292447326872728e-01 1.8201987815821130e+00 1.4847602200636754e+00 + 3.7318748638123278e-01 1.5605522634637723e+00 1.1680644337232102e+00 + 3.2561853457911771e-01 1.2381335166637022e+00 8.3572780718494266e-01 + 3.8250242570969945e-01 8.7967465044898663e-01 5.3891999628353338e-01 + 4.2882583889831810e-01 5.1360726011320246e-01 3.1199391586006675e-01 + 3.4620166248234813e-01 1.5007115936284907e-01 1.4912473131568993e-01 + 5.3128910132976048e-02 -1.4455688618628737e-01 4.6959580102119099e-02 + -5.5847621154120042e-01 -1.2700106199431418e-01 5.6776981304822408e-02 + -1.1306778286708716e+00 4.6012932617084579e-01 3.4090415693273313e-01 + -1.4145103362278624e+00 4.5828207017999534e-01 3.4287207776794104e-01 + id 11558 + loc 6.6347211599349976e-01 5.2687638998031616e-01 1077 + blend 0.0000000000000000e+00 + interp 4.9970836602039559e-01:3.7583548213779044e-01:2.1343474012016328e-01:2.9701527942517419e-01:1.0406843422927676e+00:4.9970336893673539e-01:1.9776056946633103e+00:3.4005090171820035e-01:2.8041128004822040e+00:2.9253763488418077e-01:3.6427387839954868e+00 + CVs 20 + 3.2152220712432109e-02 2.8260128284581093e-01 -1.1260603512920486e-01 + 3.0859999669140076e-02 6.0546811545572277e-01 -2.0210171198187071e-01 + 3.0444237075019531e-02 9.7927480123230826e-01 -3.1522796208606862e-01 + 5.7950511543474026e-02 1.3824510082251358e+00 -4.8886016464072146e-01 + 1.2701028477094578e-01 1.7935205679005626e+00 -7.5357201440524202e-01 + 2.5253229562237767e-01 2.1739082563751886e+00 -1.1228578951066639e+00 + 4.4928294146321601e-01 2.4786190625016471e+00 -1.5820016248519837e+00 + 7.2288020736522074e-01 2.6686170620884431e+00 -2.0949376983084096e+00 + 1.0647913943115268e+00 2.7204090186109147e+00 -2.6164765229969102e+00 + 1.4520923877379295e+00 2.6298069890627209e+00 -3.1027122803028759e+00 + 1.8524361770189208e+00 2.4112411228368145e+00 -3.5291427995515781e+00 + 2.2307471071789395e+00 2.0890605912144076e+00 -3.8973139119067897e+00 + 2.5488624519235272e+00 1.6899532672193918e+00 -4.2198186447305934e+00 + 2.7654194390786673e+00 1.2482175807237463e+00 -4.5004649765621618e+00 + 2.8499685992545603e+00 8.2409332167080840e-01 -4.7282333038949194e+00 + 2.8002836267290694e+00 5.0428507018434399e-01 -4.8841708248891607e+00 + 2.6633104533061234e+00 3.3666967923064539e-01 -4.9616946719176109e+00 + 2.4816285016859752e+00 2.7156997990364462e-01 -5.0189064614992525e+00 + 2.1082487074491585e+00 1.0854988261211695e-01 -5.3213265217820229e+00 + id 11559 + loc 5.3414577245712280e-01 5.1264178752899170e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6742849762017580e-01:3.4975629905060679e-01:3.1610895484954560e-01:4.6742382333519961e-01:9.9984148649208571e-01:3.2244418463895719e-01:1.6098221470180836e+00:3.2378163844260760e-01:2.4064775368874716e+00:4.5253927200632144e-01:3.0517730398021623e+00:3.2511593769350983e-01:3.7980292335001500e+00 + CVs 20 + -3.5597654776576160e-01 2.9987251756301636e-01 1.9736464423007868e-01 + -6.3285157417555060e-01 5.4654864683740834e-01 3.2659143515267269e-01 + -8.5535266201469728e-01 7.7628727992103852e-01 4.5284852950401477e-01 + -1.0315119900738274e+00 9.9273639054477925e-01 5.8668130798603868e-01 + -1.1815569933607761e+00 1.1955434768593922e+00 6.9790625655423966e-01 + -1.3339884712557577e+00 1.3913991563669308e+00 7.6191418841297653e-01 + -1.4946835905594789e+00 1.5703699002187816e+00 7.8714673275889191e-01 + -1.6640560304954815e+00 1.7248683603938426e+00 8.1336866103132066e-01 + -1.8609031673308782e+00 1.8718191519961553e+00 8.6087451720885433e-01 + -2.0785138133451602e+00 2.0138823785373439e+00 8.6591101759618982e-01 + -2.2611583473024823e+00 2.1487303725786919e+00 7.8165314283248000e-01 + -2.3947213540650503e+00 2.3001480658643834e+00 6.0482860337407085e-01 + -2.4214836886704179e+00 2.4142011788911377e+00 3.7492192396516844e-01 + -2.2425130306550050e+00 2.3809560709890807e+00 2.8635093424920499e-01 + -1.8437108897558754e+00 2.1321174570359807e+00 4.2370856555594427e-01 + -1.2691804794055992e+00 1.5814338728192190e+00 5.8473581231177074e-01 + -6.0763907930479522e-01 6.8179916284298892e-01 3.8206097069695727e-01 + -1.7206984493058031e-01 -1.5465735111402007e-02 -3.8229097177026056e-01 + -4.7506287689007221e-02 4.5274883405258259e-02 -6.9833855568825698e-01 + id 11560 + loc 6.2600213289260864e-01 8.5243022441864014e-01 1075 + blend 0.0000000000000000e+00 + interp 5.1449502508789957e-01:4.9423471127637614e-01:3.7225782093992343e-01:3.4213160817607946e-01:9.9910977168167026e-01:2.6920282450742239e-01:1.8900538174921460e+00:5.1448988013764874e-01:2.8726316443738877e+00:4.8007171853756603e-01:3.1097159967348635e+00:3.5310403348133990e-01:3.8987092209855367e+00 + CVs 20 + 2.0864954089384646e-01 2.0276637632800831e-01 -3.0658810342858372e-01 + 4.2186212000033652e-01 4.1447711459569259e-01 -6.2101349618718771e-01 + 6.4655970010197372e-01 6.3002208328202991e-01 -9.5849963742143884e-01 + 8.7572627684789439e-01 8.5338906578648188e-01 -1.3260832687880042e+00 + 1.0913783546123230e+00 1.0888905930021455e+00 -1.7253927458121012e+00 + 1.2757065412235895e+00 1.3336567969057858e+00 -2.1579319894822877e+00 + 1.4261932819821443e+00 1.5679291876648742e+00 -2.6223506715510516e+00 + 1.5616234231388193e+00 1.7532309428044957e+00 -3.1136581106113890e+00 + 1.7051491471002467e+00 1.8446027055254044e+00 -3.6204458800152750e+00 + 1.8673233884016081e+00 1.8016194224788116e+00 -4.1170343899889614e+00 + 2.0440593546710955e+00 1.6060748192546559e+00 -4.5612441503345904e+00 + 2.2177139354971125e+00 1.2764317937081822e+00 -4.9108303929864965e+00 + 2.3691717584424414e+00 8.5776218015275885e-01 -5.1381956672936582e+00 + 2.4905154187234055e+00 4.1056770393406811e-01 -5.2443529044655763e+00 + 2.5642746853358203e+00 -2.4010657528280577e-02 -5.2643087371984612e+00 + 2.5373561257295503e+00 -4.4556339214765273e-01 -5.2470421482913077e+00 + 2.3650414860813429e+00 -8.5364383779655040e-01 -5.2173172559615075e+00 + 2.1196369290272434e+00 -1.2019609563276108e+00 -5.1800000139769704e+00 + 2.0779944321928818e+00 -1.4476879838236707e+00 -5.2240723401124880e+00 + id 11561 + loc 1.7534536123275757e-01 1.9952504336833954e-01 1054 + blend 0.0000000000000000e+00 + interp 7.7719930244597690e-01:5.4059576944438903e-01:9.8042049621992144e-02:5.3597469475119874e-01:9.7944200165971873e-01:7.7719153045295253e-01:1.4899011910413384e+00:5.1626601541873773e-01:2.0386701092383013e+00:3.2036843767024742e-01:2.9083749558323317e+00:5.3158691119598755e-01:3.3189597640275506e+00:6.1879659948248877e-01:3.7929561593095578e+00 + CVs 20 + -1.3130406818400606e-01 4.2723309464603981e-01 -2.3970156066235798e-01 + -2.0449953752705080e-01 8.5334725098419151e-01 -4.3411302255659190e-01 + -1.9268332599803600e-01 1.2960570878833038e+00 -6.1370063657162943e-01 + -6.9248639856023919e-02 1.7524991504253302e+00 -8.1862073720878703e-01 + 1.7659742465489670e-01 2.1759006187848389e+00 -1.1028040642657779e+00 + 5.1504222076767125e-01 2.4929125019462210e+00 -1.5006745196923976e+00 + 8.9266930206584005e-01 2.6452013255489648e+00 -1.9907342843815827e+00 + 1.2634724377702584e+00 2.6172013667670440e+00 -2.5063004540304568e+00 + 1.6043362643212171e+00 2.4401816502120415e+00 -2.9796197885851869e+00 + 1.9028710452362882e+00 2.1725800219421498e+00 -3.3685883587975693e+00 + 2.1537898019945731e+00 1.8692933012676944e+00 -3.6613711574878991e+00 + 2.3646753405828318e+00 1.5461591886996806e+00 -3.8675219547608228e+00 + 2.5197876985753487e+00 1.2249723624423847e+00 -3.9907301767386416e+00 + 2.5627930802899632e+00 9.8950444211846245e-01 -4.0605501662383316e+00 + 2.4378553794431252e+00 8.7199221755637968e-01 -4.1584136973252512e+00 + 2.1153355736867141e+00 7.4733504998631650e-01 -4.3213052942776571e+00 + 1.7065122889943007e+00 4.3941816880959672e-01 -4.4251831504362755e+00 + 1.4875891172866387e+00 6.6944501228186612e-02 -4.3008028332741732e+00 + 1.6701205937398953e+00 6.7261587082057261e-02 -4.0607797321342831e+00 + id 11562 + loc 8.0110329389572144e-01 7.5555205345153809e-02 410 + blend 0.0000000000000000e+00 + interp 5.1019517909928680e-01:3.3273467809923318e-01:9.7126956936710762e-01:3.5640057087843885e-01:1.9968071465080952e+00:5.1019007714749587e-01:2.5248472875842545e+00:4.1939854581247205e-01:3.0200112057388329e+00:3.4396314299858499e-01:3.8904932563737313e+00 + CVs 20 + -2.9402740383079784e-01 1.1549719461778921e-01 1.9287317228399581e-01 + -5.7976695638021303e-01 2.2516769264632089e-01 3.8242757924717968e-01 + -8.7135144079855509e-01 3.4532703763345124e-01 5.5101329113241426e-01 + -1.1592554413102030e+00 4.6791677310167679e-01 6.8381002613728681e-01 + -1.4328224464971355e+00 5.8077828184581848e-01 7.9283555660732274e-01 + -1.6873492117482527e+00 6.8058809536804765e-01 9.0877380900338545e-01 + -1.9084658820973768e+00 7.6842228402389667e-01 1.0523930764037643e+00 + -2.0845709248860960e+00 8.4584976978366833e-01 1.2287372348461485e+00 + -2.2245129250262514e+00 9.1436821895370279e-01 1.4338711880133670e+00 + -2.3494627125189087e+00 9.7562199143208195e-01 1.6608237001333541e+00 + -2.4909543278282884e+00 9.9064540063483464e-01 1.9057000435439249e+00 + -2.6744307560971157e+00 8.6363791511820831e-01 2.1308745306796735e+00 + -2.8860105421766509e+00 5.6810261254064010e-01 2.2971959663611772e+00 + -3.0993994080841105e+00 1.6342746384044737e-01 2.4359183495977916e+00 + -3.2947083491994889e+00 -2.8074898596298814e-01 2.6072026196251277e+00 + -3.4502690425973621e+00 -6.9161756867763791e-01 2.8616510725262465e+00 + -3.5514563337712639e+00 -1.0177197383539112e+00 3.2120681457154165e+00 + -3.6308098596341831e+00 -1.2747362995974540e+00 3.6187579592230814e+00 + -3.8003845591318095e+00 -1.4615400540744290e+00 3.9585366287259185e+00 + id 11563 + loc 2.1123677492141724e-01 7.5990128517150879e-01 1047 + blend 0.0000000000000000e+00 + interp 3.2548398577719229e-01:3.2548073093733454e-01:9.5954110756645117e-01:2.9891658662776505e-01:1.4951116498625225e+00:2.7483972331597573e-01:2.1517415260987556e+00:2.8498946538304465e-01:2.9984892435881010e+00:2.7960109205708472e-01:3.8078467268768263e+00 + CVs 20 + 6.3240821787802853e-02 6.3949037370847861e-01 -2.9723902129905749e-01 + 1.6511165008626066e-01 1.2699872155019030e+00 -5.6305791272590655e-01 + 2.9885882510094774e-01 1.8681468130967067e+00 -7.9535683705937599e-01 + 4.7799264022324561e-01 2.4167927822933581e+00 -9.7227809712939928e-01 + 7.6061368813227115e-01 2.9173700474454503e+00 -1.0092067322173506e+00 + 1.1638244311572139e+00 3.3071455115970405e+00 -8.2291816475030721e-01 + 1.6164672083656331e+00 3.4819189817806775e+00 -4.2694556737629030e-01 + 2.0184662641296001e+00 3.3763536064805049e+00 9.2465871345215334e-02 + 2.2931420064933210e+00 3.0129466572804500e+00 6.2315199566669821e-01 + 2.4005742166636446e+00 2.4707306849897921e+00 1.0750489105956200e+00 + 2.3501460817437021e+00 1.8293013973775647e+00 1.4038422286848951e+00 + 2.1539334172820070e+00 1.1266955192038137e+00 1.6252249509379324e+00 + 1.7663579680328076e+00 4.0036460047133082e-01 1.8155781618876969e+00 + 1.1577307460630213e+00 -3.2337954661949442e-01 2.1164147406368725e+00 + 3.8670527163207302e-01 -1.0272838210120971e+00 2.8075269029676333e+00 + -1.7211547897019236e-01 -1.3885573445248580e+00 4.0370221519593246e+00 + -2.4738837023115495e-01 -1.1690746200055999e+00 5.3614394165228667e+00 + 6.4945619166697333e-02 -5.0111730074695471e-01 6.3744009642744697e+00 + 5.5930683376254486e-01 3.1050399401569218e-01 6.9068498394007634e+00 + id 11564 + loc 4.6306023001670837e-01 4.8969280719757080e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2878951621849282e-01:2.8804672602981074e-01:4.1491847479611832e-01:4.1057615370168005e-01:1.2569776648121149e+00:4.1190286962813943e-01:1.9979874884560047e+00:4.1091906195189704e-01:2.3741689957286480e+00:4.2878522832333066e-01:2.9293064031841087e+00:4.2703382024182812e-01:3.3174585988645102e+00:4.2567672019544545e-01:3.9855262295320708e+00 + CVs 20 + -2.5516913404161240e-01 4.3010044054094171e-01 -9.8192402313706434e-02 + -4.9615091810415940e-01 8.4956195509968657e-01 -2.5421261545089968e-01 + -7.3202257853235431e-01 1.2565198327370717e+00 -4.4115380487856803e-01 + -9.6004845176170361e-01 1.6421484378232083e+00 -6.4813607719623034e-01 + -1.2053791110556584e+00 2.0008656209941007e+00 -8.7197811289156346e-01 + -1.5183075843318783e+00 2.3150193003373793e+00 -1.1047197005283416e+00 + -1.9243266310301308e+00 2.5432511608849002e+00 -1.3276037138914627e+00 + -2.4015653858280297e+00 2.6360822658936582e+00 -1.5172606890930160e+00 + -2.8861693145495471e+00 2.5764580889450821e+00 -1.6567683494270362e+00 + -3.3249795063344916e+00 2.4058341883183201e+00 -1.7454842351524551e+00 + -3.7071595870343210e+00 2.1855948483311214e+00 -1.7890475473488856e+00 + -4.0434523740300126e+00 1.9685917163156246e+00 -1.7903144754946416e+00 + -4.3500336537484250e+00 1.7804274941040570e+00 -1.7476919715131936e+00 + -4.6125529940264016e+00 1.6317990559278481e+00 -1.6664908040738564e+00 + -4.7651595697439246e+00 1.5392157065229353e+00 -1.5472505867521873e+00 + -4.7164319385482392e+00 1.4529885910946796e+00 -1.3782602170275196e+00 + -4.4496829404476976e+00 1.1808085867295366e+00 -1.1866528337075450e+00 + -4.2938465243341453e+00 8.4843074667116181e-01 -1.0345020283646433e+00 + -4.3963504515665317e+00 1.2665386678832864e+00 -8.0858442465686264e-01 + id 11565 + loc 1.5962314605712891e-01 1.6266095638275146e-01 1090 + blend 0.0000000000000000e+00 + interp 2.5156975084031892e+00:3.1550105743466267e-01:4.1238390857632590e-02:4.6948273748018926e-01:8.4863791317976478e-01:6.0680031542869550e-01:1.0047917158371151e+00:9.3134444084555157e-01:1.1419962932209122e+00:2.5156875084031891e+00:3.1196580847923272e+00:2.2491340705641596e+00:3.2160432171048594e+00:1.8721937176890051e+00:3.3655839405820616e+00:4.6382926931997953e-01:3.8711027098829343e+00 + CVs 20 + 4.1697402944533390e-01 4.6990769961373424e-01 2.3763912585176655e-02 + 7.0718663790038694e-01 8.3505813752066682e-01 1.1407559320683092e-01 + 9.5348137957931456e-01 1.1586656734177585e+00 2.4560763510586553e-01 + 1.1772543450991444e+00 1.4586989509948980e+00 4.1167726224204126e-01 + 1.3548546248515245e+00 1.7208974152794252e+00 6.1525512481884570e-01 + 1.4648312652817275e+00 1.9242233731232949e+00 8.4800466540313135e-01 + 1.4927058141999827e+00 2.0408086912993362e+00 1.0855828937950305e+00 + 1.4458504598740514e+00 2.0443895602659188e+00 1.2825486423960717e+00 + 1.3751870495333294e+00 1.9406425897086255e+00 1.3904297400853782e+00 + 1.3368243667293220e+00 1.7837950851631499e+00 1.4239071988848764e+00 + 1.3332510243975022e+00 1.6044871966583338e+00 1.4314808712404243e+00 + 1.3614619136797699e+00 1.4027962547495845e+00 1.4267896995516582e+00 + 1.4337838736647415e+00 1.1857341510090875e+00 1.4075776055638625e+00 + 1.5699414524184925e+00 9.8031877033189341e-01 1.3674742907067314e+00 + 1.7716266441810777e+00 8.2531763477980236e-01 1.3012826274875913e+00 + 2.0090740838193204e+00 7.0760415022038925e-01 1.2306468425985058e+00 + 2.2780221087553705e+00 5.9944399692755357e-01 1.1950729322995133e+00 + 2.5820892655417476e+00 5.0052575837657454e-01 1.2138406617040434e+00 + 2.9022368194251467e+00 2.4654235680379122e-01 1.2639608234794633e+00 + id 11566 + loc 4.0163674950599670e-01 8.3043706417083740e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2097480081709115e-01:4.1602607993814722e-01:4.0077512094844603e-01:3.6788596813630425e-01:9.9406373777319224e-01:4.2097059106908302e-01:1.3791606690060980e+00:4.1826960903097987e-01:2.0018084627079427e+00:3.2430767734220167e-01:2.7607473460774754e+00:3.4881058324288577e-01:3.1557375780184787e+00:3.6839437124938262e-01:3.9465105366539706e+00 + CVs 20 + -2.0124654346030577e-01 3.0240994144052458e-01 3.3190669862841099e-01 + -3.9667612879215658e-01 5.8230347386683401e-01 5.9826707423267189e-01 + -5.7893244481860429e-01 8.6802346484115944e-01 8.4960454662797713e-01 + -7.5225089085584340e-01 1.1652403129978017e+00 1.1004396515576778e+00 + -9.3642809821851958e-01 1.4627855740741573e+00 1.3349189125054710e+00 + -1.1467327700544507e+00 1.7480210994822569e+00 1.5371665688337701e+00 + -1.3912526062880934e+00 2.0111564617715718e+00 1.6943942790762749e+00 + -1.6781323443696692e+00 2.2506232613179384e+00 1.7908961050909229e+00 + -2.0109722164576946e+00 2.4544160557483301e+00 1.7788340730665291e+00 + -2.3362212788225412e+00 2.5765352436760320e+00 1.6173225779853118e+00 + -2.5909831621358466e+00 2.6053202083678131e+00 1.3539536459171271e+00 + -2.7706521061332205e+00 2.5662711466364412e+00 1.0543707094225572e+00 + -2.9090582644140364e+00 2.4407044125076527e+00 7.6072549076628526e-01 + -3.0466821891381222e+00 2.1697085073173064e+00 5.2441012864556824e-01 + -3.1860605560804802e+00 1.7565939965514337e+00 3.6097198188838220e-01 + -3.2864016509943212e+00 1.2600181998480200e+00 2.2584301703306831e-01 + -3.3146425842127614e+00 7.4840812661285383e-01 6.6609937262938679e-02 + -3.2823277640030843e+00 3.2504304345338608e-01 -1.6491709101522994e-01 + -3.2835130640081931e+00 2.2717740717386176e-01 -4.6147101909234728e-01 + id 11567 + loc 2.1123677492141724e-01 5.5845630168914795e-01 410 + blend 0.0000000000000000e+00 + interp 3.5420621264125318e-01:2.9756520443954165e-01:1.7960978099771019e-01:3.2073156432023403e-01:9.9323206282129795e-01:3.5420267057912680e-01:1.5194026688722690e+00:2.8417687915079082e-01:2.0682063303368552e+00:3.0324714439104267e-01:3.0038734078756133e+00:3.4219033213984629e-01:3.7770435571811705e+00 + CVs 20 + 3.0781985439402204e-01 1.3432435972319498e-01 -1.2290078855780018e-01 + 5.7066429738368640e-01 2.2714813915735965e-01 -2.4461829198951845e-01 + 8.3006730038835608e-01 2.9889234351730481e-01 -3.6135500669893517e-01 + 1.1032944578767392e+00 3.5709259451143782e-01 -4.7094826308544235e-01 + 1.3864187028922017e+00 3.9829015172683724e-01 -5.7058480164263714e-01 + 1.6756673403397824e+00 4.2045176872874068e-01 -6.5456125599007886e-01 + 1.9668886403223440e+00 4.2301840367325705e-01 -7.1411540135735185e-01 + 2.2544765440612977e+00 4.0578204315041766e-01 -7.4186004433902042e-01 + 2.5331728952447339e+00 3.6919797861456427e-01 -7.3475853884484110e-01 + 2.7991127752314622e+00 3.1534505543142211e-01 -6.9299933844507655e-01 + 3.0412445943349398e+00 2.4538238475158058e-01 -6.2403563898375425e-01 + 3.2329702084400056e+00 1.5608215451476926e-01 -5.5591625150452972e-01 + 3.3485726353194281e+00 4.8756585415967724e-02 -5.2211672272886789e-01 + 3.3982981587925067e+00 -6.4724725520620474e-02 -5.1854527744578205e-01 + 3.4205441899613707e+00 -1.8031702883185208e-01 -5.2448337542549461e-01 + 3.4277723049246926e+00 -2.9557030941061435e-01 -5.3322068431651160e-01 + 3.4178125712573162e+00 -4.0319404832454664e-01 -5.3901974364396577e-01 + 3.4037022201801017e+00 -5.0643114589995197e-01 -5.4207931703749668e-01 + 3.4793670686791764e+00 -6.8647415989668947e-01 -6.2020145940316551e-01 + id 11568 + loc 7.9816117882728577e-02 8.2720053195953369e-01 1070 + blend 0.0000000000000000e+00 + interp 2.2392815223459523e+00:2.2392715223459523e+00:1.9325045216721626e+00:1.9303151886814580e+00:1.9480204672298469e+00:9.4085986218306450e-01:2.0010469711607191e+00:6.8983730642980923e-01:2.0111035108516835e+00:2.9153018073329329e-01:2.0816508592048359e+00:3.4150413271214208e-01:2.9736312503813007e+00:3.1518192307960935e-01:3.9933459235682425e+00 + CVs 20 + -2.7356556084577910e-01 4.6758258263434421e-01 3.6806365229403826e-01 + -4.9184545177555050e-01 8.5430203415417938e-01 6.5179554659759642e-01 + -6.6266582110645733e-01 1.2062842605922945e+00 9.2774339032105912e-01 + -8.3655871318763486e-01 1.5523240555479703e+00 1.1804031224128639e+00 + -1.0532214770899089e+00 1.8749678680564918e+00 1.3309177285706184e+00 + -1.3103251848965598e+00 2.1424022317137936e+00 1.3412745540532294e+00 + -1.5605707836969220e+00 2.3203333416093979e+00 1.2154762076253569e+00 + -1.6978975422342690e+00 2.3797943527680778e+00 9.8251120356015820e-01 + -1.5785434306018262e+00 2.3259432144174310e+00 7.5759104160085688e-01 + -1.2667291089380284e+00 2.2466235893308997e+00 7.2140137151331252e-01 + -9.9362504261127393e-01 2.1830239669150324e+00 7.6605741190610421e-01 + -7.3879453355341596e-01 2.0757459897661956e+00 8.0048801539902292e-01 + -4.6916919374226407e-01 1.8986993905838849e+00 8.6212783562948214e-01 + -1.8633587530001977e-01 1.6467101005858935e+00 9.1717948734273702e-01 + 1.1696813577921783e-01 1.2980894614183964e+00 8.6174242887881058e-01 + 3.9901064991372104e-01 8.8782248283105580e-01 5.8672864687060788e-01 + 5.5325294946952275e-01 5.9666111723202053e-01 1.7952424677486839e-02 + 3.9951136581478031e-01 8.3763382997017444e-01 -7.9000929552974086e-01 + 4.6075867800216141e-01 7.8223791025113454e-01 -1.0679228037787205e+00 + id 11569 + loc 8.4877383708953857e-01 1.7615799605846405e-01 1053 + blend 0.0000000000000000e+00 + interp 4.5523877656730377e-01:3.9255589192170698e-01:1.5929498727480751e-01:3.2555105338718004e-01:9.5366554066532161e-01:3.6818646379944375e-01:1.6552576991189230e+00:4.3479925552408288e-01:2.5534624931967058e+00:4.5523422417953813e-01:2.9933255575141224e+00:2.9224026370171619e-01:3.7724188124475782e+00 + CVs 20 + 2.1628704261980108e-01 3.5394042278943405e-01 -1.2702101438142904e-01 + 4.4636858501431931e-01 7.1520732485982763e-01 -2.4770164052679355e-01 + 6.9986202959996069e-01 1.0820217875779174e+00 -3.7127612773183660e-01 + 9.9329192068971839e-01 1.4431387631172772e+00 -5.0781058973222626e-01 + 1.3468615134404187e+00 1.7744083606760510e+00 -6.6412944881119851e-01 + 1.7758853308675022e+00 2.0401245272175430e+00 -8.3981036866488856e-01 + 2.2824965720694386e+00 2.1972336219991000e+00 -1.0216839245438232e+00 + 2.8512208029536610e+00 2.2053539935292403e+00 -1.1814407554639459e+00 + 3.4458097598120658e+00 2.0303165113159150e+00 -1.2815635609061311e+00 + 3.9957740964175166e+00 1.6422308566937476e+00 -1.2833155984007689e+00 + 4.3871119819247992e+00 1.0433912028278223e+00 -1.1733944335028048e+00 + 4.5149185707627559e+00 3.0816445915535468e-01 -9.9256919116312781e-01 + 4.3699889129885818e+00 -4.4041059293737006e-01 -7.8575391653587612e-01 + 4.0718302462306424e+00 -1.1068330076483925e+00 -5.2695366556772683e-01 + 3.7665908276406674e+00 -1.6699924145313616e+00 -1.1163737746167013e-01 + 3.5076401620845967e+00 -2.0857661788730764e+00 5.5666888377363533e-01 + 3.3126295776248615e+00 -2.2156041275820915e+00 1.4979712958850468e+00 + 3.2317847468989598e+00 -2.0039907692217085e+00 2.4985471065678304e+00 + 3.1224786340407733e+00 -2.1868155545241903e+00 2.9242350019971708e+00 + id 11570 + loc 4.2411595582962036e-01 6.3392364978790283e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4382624105487978e-01:3.9965641426325371e-01:3.2208126186175590e-01:3.0916285345863870e-01:1.0077903128570842e+00:4.4382180279246924e-01:1.5895513351822426e+00:3.0899552376419265e-01:2.3582694795244050e+00:3.5698459541782929e-01:3.0648308801413773e+00:4.2617909704345713e-01:3.8821040897667656e+00 + CVs 20 + 5.8506578504311776e-02 2.3316616953611352e-01 -1.9072098104304303e-01 + 1.2299444588541819e-01 4.4435434439572924e-01 -3.8593391585802767e-01 + 1.8919142437219383e-01 6.3627287758439954e-01 -5.8056936687034955e-01 + 2.5730841870295046e-01 8.1301071583685647e-01 -7.7513246042380157e-01 + 3.3076581263738897e-01 9.7574785003581677e-01 -9.7135465558332790e-01 + 4.0853492881494835e-01 1.1281059745335105e+00 -1.1673859966594260e+00 + 4.8146243640816033e-01 1.2806598264757278e+00 -1.3619188319220048e+00 + 5.3907578375832665e-01 1.4464735300223757e+00 -1.5565885853622676e+00 + 5.8501029788925218e-01 1.6321484414610519e+00 -1.7548835348693510e+00 + 6.3719664652501862e-01 1.8374105825181566e+00 -1.9612385718303891e+00 + 7.1265842225427334e-01 2.0566757513783402e+00 -2.1857402545799380e+00 + 8.1828627512228724e-01 2.2674278731600745e+00 -2.4524658536261548e+00 + 9.4269926468332288e-01 2.4172210840891366e+00 -2.7850552781266891e+00 + 1.0558524237765265e+00 2.4446596845117563e+00 -3.1699970165455027e+00 + 1.1475082358445738e+00 2.3313964365272906e+00 -3.5683273205700159e+00 + 1.2359875457031566e+00 2.0938622530156703e+00 -3.9602675883261989e+00 + 1.3224640634526326e+00 1.7456797140145954e+00 -4.3397706995893097e+00 + 1.3592997078410163e+00 1.3025623419751633e+00 -4.6940594290899149e+00 + 1.3336086360782045e+00 8.8504815232794409e-01 -4.9683105020933436e+00 + id 11571 + loc 8.2396399974822998e-01 5.1901149749755859e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5749154150863386e-01:3.1036510647559634e-01:1.8130527525887286e-02:4.5748696659321880e-01:7.0511440806532022e-01:2.9561606460628270e-01:1.2206515842913355e+00:2.9712923236188377e-01:2.0016893422682469e+00:3.4273614064444990e-01:2.8222967999053052e+00:3.6332809845741953e-01:3.3627491472809576e+00 + CVs 20 + 1.5174408981311527e-01 2.5367982903220176e-01 -2.8582007046611829e-01 + 2.6247771393697406e-01 5.5164073765176291e-01 -5.1941334398955619e-01 + 3.6433099034199212e-01 8.6439981961029722e-01 -7.4284254969667163e-01 + 4.7815970080336739e-01 1.1734086106641870e+00 -9.8580258850432301e-01 + 6.1416721570808996e-01 1.4692051487704019e+00 -1.2640479022935525e+00 + 7.8243505948883263e-01 1.7375391999905583e+00 -1.5838350348573633e+00 + 9.9154682996681287e-01 1.9615078399812778e+00 -1.9409500235363017e+00 + 1.2446355541833884e+00 2.1241796509287729e+00 -2.3216473614720945e+00 + 1.5373275243083206e+00 2.2133565818300518e+00 -2.7053983173942946e+00 + 1.8607740168415823e+00 2.2237603762150981e+00 -3.0712512959523512e+00 + 2.2043919822287834e+00 2.1568847117071872e+00 -3.4050513981359041e+00 + 2.5589078581676534e+00 2.0181357440171981e+00 -3.7049025342042472e+00 + 2.9142833358343614e+00 1.8120458801675055e+00 -3.9770615765401098e+00 + 3.2555650962579556e+00 1.5405578485884257e+00 -4.2226846826769044e+00 + 3.5769499764235793e+00 1.2037349054744022e+00 -4.4347245729484914e+00 + 3.8610094594923234e+00 8.0061275696470946e-01 -4.6110024882861884e+00 + 4.0437057821868310e+00 3.4952406150031723e-01 -4.7423628328332015e+00 + 4.0710822077462634e+00 -9.8577320490219167e-02 -4.8675588203028042e+00 + 3.8591929552068911e+00 -2.5300336128002154e-01 -5.1425222440179814e+00 + id 11572 + loc 5.5867779254913330e-01 8.1886947154998779e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3107440942074782e-01:3.6022083964300822e-01:1.3314608516559057e-01:3.2759080352366837e-01:1.0012578134092027e+00:4.1086907994338140e-01:1.6663781295639952e+00:3.1001606324179154e-01:2.2438826783715169e+00:4.3107009867665363e-01:3.0771449913410174e+00:3.4462035963318050e-01:3.7600915175028855e+00 + CVs 20 + 8.5655446601729038e-02 2.9556700600792724e-01 -2.1741451598566344e-02 + 1.7443008057952233e-01 5.8908986302827571e-01 -3.6997479084448018e-02 + 2.7025783538185855e-01 8.7700297714937292e-01 -5.9177400346163644e-02 + 3.7823707508759707e-01 1.1598258059359028e+00 -9.4116911161673728e-02 + 5.1313847591724726e-01 1.4495486527440071e+00 -1.3927641765183557e-01 + 6.9106380133936729e-01 1.7490987023069351e+00 -2.0964200060715116e-01 + 9.1240340053207569e-01 2.0264574726741609e+00 -3.3710740476063172e-01 + 1.1626405479272690e+00 2.2376874689597068e+00 -5.3264176285445286e-01 + 1.4244094054162719e+00 2.3566446151213327e+00 -7.8111325471661841e-01 + 1.6822991353020316e+00 2.3749608145339125e+00 -1.0586595532355823e+00 + 1.9313794399028448e+00 2.3015985175728852e+00 -1.3411327413374092e+00 + 2.1767550723602520e+00 2.1547957952597097e+00 -1.6073497171988684e+00 + 2.4272567218503682e+00 1.9420358488315395e+00 -1.8376905749749786e+00 + 2.6985363110836778e+00 1.6355812262788021e+00 -2.0186151327655493e+00 + 2.9819289962835462e+00 1.1910337940692945e+00 -2.1730611905957771e+00 + 3.1948903178044739e+00 5.9808459766009059e-01 -2.3541196882733790e+00 + 3.2251001271492439e+00 -9.2790528435990893e-02 -2.5894721470932938e+00 + 2.9946907495432531e+00 -7.4509444479735654e-01 -2.8257343983144629e+00 + 2.6023795854244050e+00 -1.0996810946829085e+00 -2.8702603474950195e+00 + id 11573 + loc 8.1824862957000732e-01 5.9938615560531616e-01 1074 + blend 0.0000000000000000e+00 + interp 5.1414238253283751e-01:4.5683280348863303e-01:4.9930532688637452e-01:3.6756816720854535e-01:9.8049706339290521e-01:3.8922538764499859e-01:1.3605219944683244e+00:4.7634617092258452e-01:1.9953021454831354e+00:4.1016072654071778e-01:2.4232318950865213e+00:5.1413724110901216e-01:2.9751343044198153e+00:3.8676477062997189e-01:3.2782452969248901e+00:3.3259252464107808e-01:3.9993810725900714e+00 + CVs 20 + 1.1512248835264062e-01 2.5259967624862167e-01 -2.5952362751721481e-01 + 2.4245422035655340e-01 4.9040270027472782e-01 -5.1011133190693370e-01 + 3.8957359171577860e-01 7.1167811882340315e-01 -7.5267840469179015e-01 + 5.5855674408337097e-01 9.1268119099761802e-01 -9.8665590650562951e-01 + 7.4625987793824433e-01 1.0883879325643131e+00 -1.2110668155681057e+00 + 9.4685351466724343e-01 1.2344695054807266e+00 -1.4290572142950355e+00 + 1.1525170542278440e+00 1.3482511902237864e+00 -1.6466941278062297e+00 + 1.3524886613922091e+00 1.4279056306619096e+00 -1.8717628830514983e+00 + 1.5333852071299063e+00 1.4712042720400165e+00 -2.1142310710040633e+00 + 1.6829251333853832e+00 1.4758379680619709e+00 -2.3816129386684275e+00 + 1.7918913109885575e+00 1.4392304689834767e+00 -2.6716021709580060e+00 + 1.8533642639028374e+00 1.3591103391655581e+00 -2.9724747538076111e+00 + 1.8626096376498653e+00 1.2351599723289191e+00 -3.2677047133221726e+00 + 1.8177050196289752e+00 1.0707741104946440e+00 -3.5350403340766814e+00 + 1.7213914711553795e+00 8.7372077756036870e-01 -3.7477963531282001e+00 + 1.5818750398612638e+00 6.5569803615903000e-01 -3.8838559151479104e+00 + 1.4088548769953437e+00 4.2948609333945359e-01 -3.9383761067625485e+00 + 1.2024038825247336e+00 2.4053511904733416e-01 -3.9077462583429767e+00 + 9.3677373260203345e-01 -9.2318113200394014e-02 -3.9127219613811026e+00 + id 11574 + loc 5.1828449964523315e-01 2.2135458886623383e-01 1085 + blend 0.0000000000000000e+00 + interp 5.2521967833742822e-01:3.9288885668457479e-01:1.6535228966980231e-01:4.5102067337989604e-01:1.0025255499888883e+00:5.2521442614064484e-01:1.4092508636144190e+00:4.9213633054452577e-01:1.9392414860511940e+00:3.3468889931820500e-01:2.8423590948876205e+00:4.3447994389397382e-01:3.2705974559290318e+00:3.2354953170733652e-01:3.8945267728926249e+00 + CVs 20 + 2.4185417213332328e-01 3.7007205422133332e-01 -2.2422899709840244e-01 + 4.5893025133277376e-01 7.0815158424745928e-01 -3.8525511643100685e-01 + 6.8562066050981252e-01 1.0296235745345608e+00 -5.2171250909782818e-01 + 9.4273315281578196e-01 1.3363636698134373e+00 -6.4253163060585283e-01 + 1.2416996996510026e+00 1.6192772538869624e+00 -7.3170837870404193e-01 + 1.5865905048632531e+00 1.8664109450710740e+00 -7.7404466258472304e-01 + 1.9706401321026614e+00 2.0637037166787944e+00 -7.5814403670311070e-01 + 2.3772170883885675e+00 2.1984639862762672e+00 -6.7885671024389904e-01 + 2.7836743441647149e+00 2.2626206734527035e+00 -5.3854384664005694e-01 + 3.1658477101486180e+00 2.2536414950660029e+00 -3.4904594545161471e-01 + 3.5056132491593859e+00 2.1754418159013560e+00 -1.3213750285661041e-01 + 3.7954208174111428e+00 2.0362504127570178e+00 8.7979429814333154e-02 + 4.0318468905839868e+00 1.8463370210877452e+00 2.9016489961033765e-01 + 4.2059892458424910e+00 1.6208733715243815e+00 4.6153742336928688e-01 + 4.3056155700493060e+00 1.3795236323520093e+00 6.0588927618978516e-01 + 4.3227146639040610e+00 1.1256817256394351e+00 7.2453163702474466e-01 + 4.2571724726752294e+00 8.2914361662843095e-01 7.9835766462682600e-01 + 4.1595484962653018e+00 4.6367138535965863e-01 7.8766287488311593e-01 + 4.1792186385129391e+00 2.3343800550246285e-01 5.6736834856255169e-01 + id 11575 + loc 1.3623484969139099e-01 6.9561976194381714e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3536633859129309e-01:4.1494676376948331e-01:1.1808742712958697e-01:2.6329800395165504e-01:8.5879237382063445e-01:3.6041524895459365e-01:1.3325693967584753e+00:4.0269931492816724e-01:2.0007590527968793e+00:2.7748075569326591e-01:2.4920705096442259e+00:4.3536198492790718e-01:2.9719677169056098e+00:4.1114623952324053e-01:3.5255504952230723e+00 + CVs 20 + 2.0604240822852057e-01 3.7973088112983538e-01 -2.1422106583381806e-01 + 4.2900657377746199e-01 7.5662670455486658e-01 -4.5152600293247547e-01 + 6.6345933481632469e-01 1.1381986521669307e+00 -6.8668798980421564e-01 + 9.0710776863223264e-01 1.5213361728041064e+00 -9.0261727018646820e-01 + 1.1510648251926370e+00 1.8855010532777567e+00 -1.1134685537106039e+00 + 1.3767670774821095e+00 2.1954178996653027e+00 -1.3717277895420859e+00 + 1.5685107581438662e+00 2.4134909739813839e+00 -1.7216488256310745e+00 + 1.7098748935050265e+00 2.4804748375423324e+00 -2.1609825875313842e+00 + 1.7806398161403070e+00 2.3430146475346687e+00 -2.6302431682265195e+00 + 1.7896531294343385e+00 2.0304444607117800e+00 -3.0662154006796611e+00 + 1.7770315550873999e+00 1.6003077783505311e+00 -3.4527327619259696e+00 + 1.8025042894157211e+00 1.1098569101971698e+00 -3.8049204088296578e+00 + 1.9149653123922137e+00 6.4064378258113097e-01 -4.1750609265896648e+00 + 2.1010352779901020e+00 3.1556968846195604e-01 -4.6343263402893990e+00 + 2.2852463739988607e+00 3.1002469844992014e-01 -5.2031284988595594e+00 + 2.3620469021060271e+00 7.7681940611249989e-01 -5.7168022912089667e+00 + 2.2092532300756016e+00 1.6547618245577860e+00 -5.8075579075523800e+00 + 1.9011634049310269e+00 2.3535933720497590e+00 -5.4975463386823806e+00 + 1.8668653805975552e+00 2.6352358549232631e+00 -5.8501564457382500e+00 + id 11576 + loc 4.5703992247581482e-01 8.2252311706542969e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7698785963953844e-01:4.7698308976094206e-01:8.3577223068720419e-01:3.4762239451152449e-01:1.2545447784918047e+00:4.1724029365318654e-01:1.9854909664168872e+00:3.3019813058351549e-01:2.8972000080160334e+00:4.4437834458385234e-01:3.3857620339409662e+00:2.8799862490919842e-01:3.9866271626330878e+00 + CVs 20 + 1.4419691473937246e-01 1.9901185907828389e-01 -2.6333563141119515e-01 + 2.6303246527269564e-01 4.0340121359318298e-01 -5.4296923765135074e-01 + 3.6353530931533046e-01 6.0677600017636280e-01 -8.3502813940004361e-01 + 4.4606651282096327e-01 8.0762396265782510e-01 -1.1320083917162063e+00 + 5.0707624681645047e-01 1.0050381783041877e+00 -1.4272680800984074e+00 + 5.4613550472481931e-01 1.1948590727773576e+00 -1.7229535494852055e+00 + 5.6871978061831785e-01 1.3735918778288676e+00 -2.0306572861457877e+00 + 5.8462735230544560e-01 1.5365728474662113e+00 -2.3612056780131256e+00 + 6.0150676300184236e-01 1.6700548378192484e+00 -2.7149108964820243e+00 + 6.2127883097867209e-01 1.7489660451091666e+00 -3.0797070618219924e+00 + 6.3959710033554495e-01 1.7465128456576680e+00 -3.4339872583073228e+00 + 6.4695802135642866e-01 1.6528435944831417e+00 -3.7500531216332265e+00 + 6.3545360789712779e-01 1.4817330065411016e+00 -4.0036436992400022e+00 + 6.0917003792627988e-01 1.2589522000987881e+00 -4.1921511185965583e+00 + 5.7852961455169249e-01 1.0055485068858003e+00 -4.3299101232226720e+00 + 5.3706378117427567e-01 7.4923402871933065e-01 -4.4159532187622466e+00 + 4.6650918583320944e-01 5.3413340635508055e-01 -4.4447659967602196e+00 + 3.7674356871386783e-01 3.6003058837546964e-01 -4.4465968500898425e+00 + 3.5510332698170877e-01 -4.5967340412848834e-03 -4.5957183514278688e+00 + id 11577 + loc 5.9839016199111938e-01 5.4049426317214966e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4674259003733091e-01:2.6653670900510074e-01:3.6026097608278307e-01:4.0822569279501336e-01:9.8613489189035897e-01:4.4673812261143053e-01:1.6168742688326918e+00:3.4854765707946006e-01:2.1047814684357506e+00:3.0000532948457087e-01:2.9607200710953849e+00:3.6863911044771586e-01:3.9268813915601406e+00 + CVs 20 + -2.4388310189547455e-01 3.7626904731179456e-01 2.3658062046103168e-01 + -4.6731415669225596e-01 7.3144591309860396e-01 4.4187965947515423e-01 + -6.7398008797406339e-01 1.0817662456494870e+00 6.3942611775762137e-01 + -8.7809225784141542e-01 1.4316161315642693e+00 8.2456857192819200e-01 + -1.0956651290409278e+00 1.7730342706927640e+00 9.7416305208032972e-01 + -1.3347829217548064e+00 2.0967217658426520e+00 1.0704407213751344e+00 + -1.5938980273737597e+00 2.3930427619147885e+00 1.1031217559402493e+00 + -1.8633581040173195e+00 2.6526200065993644e+00 1.0674906197227176e+00 + -2.1272585720061628e+00 2.8670539053463688e+00 9.6035562578479583e-01 + -2.3683942049440794e+00 3.0293258043869176e+00 7.7269449197845042e-01 + -2.5685624856674960e+00 3.1367044761892231e+00 4.9351533767940858e-01 + -2.7159088931971098e+00 3.1803554960496712e+00 1.0129204991265905e-01 + -2.8045875829240510e+00 3.1175944651576799e+00 -3.8376531226186716e-01 + -2.8558474548145472e+00 2.9631208222450449e+00 -7.9792558995103691e-01 + -2.9212222373445513e+00 2.8427940229626536e+00 -9.8668104076939733e-01 + -3.0383220835175906e+00 2.7940090305285095e+00 -9.0836138759681018e-01 + -3.1847967946812057e+00 2.7092860901295488e+00 -5.5800659060098345e-01 + -3.2783287993804717e+00 2.4573625328464654e+00 -8.4129070145982920e-02 + -3.1561349512800168e+00 2.4833322170205392e+00 -2.3666392946515868e-01 + id 11578 + loc 8.3352488279342651e-01 7.9263228178024292e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3176252822998540e-01:2.6581488313392077e-01:4.6518345561845753e-02:3.3236060407896068e-01:9.3461599130644391e-01:3.0878732419599125e-01:1.2834264532013460e+00:2.9014087143248080e-01:2.0280770365961192e+00:4.3175821060470310e-01:2.9987552059201286e+00:3.3749390827456671e-01:3.1049870652242624e+00 + CVs 20 + -1.3131819692706170e-01 3.5122382995333379e-01 1.3184727544709074e-01 + -2.9840090162715194e-01 6.7554901006934531e-01 2.1010129302814065e-01 + -4.9622190074147332e-01 9.7786790731643991e-01 2.4952713779667174e-01 + -7.2086759868372918e-01 1.2455152987934091e+00 2.5253666146151366e-01 + -9.6613053380841252e-01 1.4557253417327427e+00 2.1502245571358536e-01 + -1.2159282144936370e+00 1.5892606616755325e+00 1.3989081211222054e-01 + -1.4479646651146689e+00 1.6365215885359596e+00 3.7642008514431113e-02 + -1.6418477081669460e+00 1.6016579549534868e+00 -7.6276236425517230e-02 + -1.7845710874166980e+00 1.4997092764608726e+00 -1.8378706391838517e-01 + -1.8756009149205854e+00 1.3502980917379257e+00 -2.7020125236392523e-01 + -1.9198977086982227e+00 1.1725380988945084e+00 -3.2469053800967351e-01 + -1.9182300255532923e+00 9.8948441801849440e-01 -3.3668247153225261e-01 + -1.8692805594810535e+00 8.2955580075711743e-01 -3.0369504742926684e-01 + -1.7748313293995417e+00 7.1674225827715499e-01 -2.4142724027241930e-01 + -1.6443033186297227e+00 6.5325724618273040e-01 -1.8218254343645934e-01 + -1.5204625264935840e+00 5.5572423438570007e-01 -1.3163770155139171e-01 + -1.4647247903616212e+00 3.3123644981053407e-01 -2.4539907622321000e-03 + -1.5154701873877747e+00 4.8039454306360141e-02 2.7518381681628784e-01 + -1.5867320032525365e+00 -8.5128556063716915e-02 5.6639118238815200e-01 + id 11579 + loc 3.3358338475227356e-01 3.1463620066642761e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0282621273436953e-01:3.2039067317344294e-01:3.2917640167631601e-01:3.8877366157031112e-01:1.0145004172490690e+00:3.2034661150898980e-01:1.8254858330850268e+00:3.7194119971194584e-01:2.5265496397280813e+00:4.0282218447224222e-01:3.0076006661749606e+00:3.2769803489205723e-01:3.5637874363070265e+00 + CVs 20 + -3.0928368403509349e-01 6.1105892856289401e-01 -1.0080793084044867e-01 + -5.5370058588176074e-01 1.2276139487885027e+00 -2.5162281260332792e-01 + -7.0666322218837041e-01 1.8349288413592266e+00 -4.6169778612255058e-01 + -7.8111776077171835e-01 2.3924551724012404e+00 -7.4027117971837586e-01 + -8.2553112373828541e-01 2.8591067818831015e+00 -1.0812252636267838e+00 + -8.9378313676315724e-01 3.2075440204374317e+00 -1.4285911922418317e+00 + -1.0103063130432142e+00 3.4683732950211086e+00 -1.7108413000767226e+00 + -1.0631044843483068e+00 3.6611505050245956e+00 -2.0364014107451851e+00 + -1.0991722219328648e+00 3.7448079033190584e+00 -2.4722018465784235e+00 + -1.2389274152812471e+00 3.6822742133273998e+00 -3.0106048535931911e+00 + -1.4837267667427949e+00 3.3844051706147700e+00 -3.6031418061707701e+00 + -1.7032989556407174e+00 2.7832812004449359e+00 -4.1487395314342299e+00 + -1.7260187584591766e+00 1.9669111733787865e+00 -4.5189054446907786e+00 + -1.5010725969944083e+00 1.1411130329832901e+00 -4.6690487079970895e+00 + -1.1492419722695706e+00 4.9228671656786849e-01 -4.6426960042447689e+00 + -8.4476272732594460e-01 2.9516098467875623e-01 -4.4864460129303874e+00 + -6.4445146422772814e-01 -8.9326631124143852e-01 -1.9639339726824037e+00 + -8.7348954779238275e-01 -1.1980197598455815e+00 -2.2512004535152492e+00 + -7.7851634487623000e-01 -6.8412741213678629e-01 -2.2058461405127323e+00 + id 11580 + loc 7.6775088906288147e-02 5.8335316181182861e-01 1085 + blend 0.0000000000000000e+00 + interp 5.3641712421070875e-01:2.8699109695299174e-01:3.0483071033919729e-01:5.3641176003946667e-01:1.0093837589975361e+00:3.4988483243847951e-01:1.9440202357711853e+00:3.2462093654356028e-01:2.7855633049277113e+00:3.1701094375764660e-01:3.6111488552757738e+00 + CVs 20 + -1.8256504897573994e-01 4.6580937188594895e-01 4.1739669105568783e-01 + -3.9368675370559802e-01 8.5394117211820930e-01 6.7634615155285005e-01 + -6.3347671806993633e-01 1.2104982068787320e+00 8.6941563424590407e-01 + -9.0143750020554836e-01 1.5444636932017999e+00 1.0194751454324387e+00 + -1.1919855888253703e+00 1.8395438780444198e+00 1.1129945934874454e+00 + -1.4936122834817525e+00 2.0798163049642602e+00 1.1404985072126259e+00 + -1.7894448887712679e+00 2.2517404228216802e+00 1.0978528027485195e+00 + -2.0613597415926317e+00 2.3478066337736792e+00 9.8946517438361303e-01 + -2.3009690734919048e+00 2.3671707845112824e+00 8.2903596167436522e-01 + -2.5215784768500380e+00 2.3108720679226527e+00 6.3447344745307244e-01 + -2.7404062020693747e+00 2.1752039789593214e+00 4.2435341746856492e-01 + -2.9625314489917587e+00 1.9559728952588276e+00 2.2217793745601760e-01 + -3.1889847463848864e+00 1.6535808592861010e+00 5.6621355952062025e-02 + -3.4252214004417407e+00 1.2722338171861023e+00 -3.6531247065093780e-02 + -3.6680527158192189e+00 8.4807888624068573e-01 -1.7616042112379625e-02 + -3.9095728874404334e+00 4.5924214628277304e-01 1.1815050380455377e-01 + -4.1483595203315753e+00 1.6929671377376959e-01 3.3236703615950691e-01 + -4.3778078314677877e+00 -1.8395432663883937e-02 5.7692698131161391e-01 + -4.6037805121937136e+00 -2.0740740284654169e-01 8.3371455511901449e-01 + id 11581 + loc 2.0682123303413391e-01 3.4221994876861572e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5200638871394155e-01:3.9397019026026803e-01:7.9994964246664302e-01:3.1131898906250516e-01:1.4727154436653942e+00:3.8269421923830355e-01:2.0073197587914620e+00:4.3162243535477529e-01:2.8437505390036293e+00:4.5200186865005443e-01:3.1888094734138344e+00:3.9366267712593023e-01:3.9890267871329281e+00 + CVs 20 + -1.7298724610540131e-01 4.4966584473846971e-01 -1.8636250611394442e-01 + -3.2480344947076684e-01 8.9425133320426509e-01 -3.4897423585535453e-01 + -4.4145479626250084e-01 1.3249039721778295e+00 -4.8078669683470077e-01 + -4.9895360801376237e-01 1.7275092665253058e+00 -5.7307324871389231e-01 + -5.0338318764065448e-01 2.1109320172701111e+00 -6.2966843251437532e-01 + -5.1589785568007018e-01 2.5306880684073780e+00 -6.7629515743572266e-01 + -6.8595295157591618e-01 3.0036060248960936e+00 -7.7936507427231483e-01 + -9.9642740134028751e-01 3.3641557394991821e+00 -8.9562569752811971e-01 + -1.3475160755470550e+00 3.6025830784569153e+00 -9.9786060191337123e-01 + -1.7191496689177348e+00 3.7436625079531707e+00 -1.1305932906009692e+00 + -2.0401876250678757e+00 3.8198095302646160e+00 -1.1674452945142684e+00 + -2.3665437690052875e+00 3.8339126257398046e+00 -1.2311597963581158e+00 + -2.6732143509971169e+00 3.7977582136525436e+00 -1.4613967911130348e+00 + -2.9451258314680744e+00 3.7246025835228580e+00 -1.8472676369205447e+00 + -3.1995984263909580e+00 3.5788758268571068e+00 -2.4352504388675689e+00 + -3.4299040349668433e+00 3.2486790112844708e+00 -3.1740991260497218e+00 + -3.5933498232226064e+00 2.5118801793568291e+00 -4.0388422126906063e+00 + -3.3645199867042423e+00 1.4025383947151067e+00 -4.6575217349076059e+00 + -3.1857395390646199e+00 1.2426287337225097e+00 -4.5862961933442872e+00 + id 11582 + loc 9.0233540534973145e-01 8.9399319887161255e-01 1090 + blend 0.0000000000000000e+00 + interp 2.2491440705641597e+00:5.0658241792799141e-01:4.1870055131964845e-02:2.2491340705641596e+00:5.4281342853070313e-01:4.0213544495916620e-01:1.9963571138642111e+00:3.7628386832995403e-01:2.3979390471304836e+00:3.0666842252115062e-01:3.0399016947875381e+00:4.8955260249117105e-01:3.5148078999906596e+00 + CVs 20 + 3.6473091480118552e-01 4.8623829270453667e-01 6.7405695102382895e-02 + 5.6681558331783966e-01 9.0389938198210640e-01 1.0364739569971976e-01 + 7.0501645143635794e-01 1.3002950759032839e+00 1.3129223233219800e-01 + 8.1906717320718936e-01 1.6916234902680700e+00 1.5747841663220263e-01 + 8.9665697351339313e-01 2.0641015728359640e+00 1.7168106776693404e-01 + 9.2279735556381159e-01 2.4034953126974470e+00 1.6156622030928836e-01 + 8.7932939777314756e-01 2.6985427509449638e+00 1.0816636254949508e-01 + 7.4294699209597637e-01 2.9282987298157686e+00 -1.9132433008919647e-02 + 5.1293637213511512e-01 3.0310927264764618e+00 -2.1672474168073985e-01 + 2.5511571798373200e-01 2.9955559466525288e+00 -4.0651681683254171e-01 + 7.1468832546777161e-03 2.8839601342077561e+00 -5.5505902567328769e-01 + -2.3202904063400065e-01 2.7279116763028064e+00 -6.6704316973795652e-01 + -4.6108414769408279e-01 2.5415256420201406e+00 -7.3977192018026283e-01 + -6.7283485979241586e-01 2.3411581957280214e+00 -7.6438771518580906e-01 + -8.5862057883824372e-01 2.1428913404070822e+00 -7.3386403875032957e-01 + -1.0047539716135265e+00 1.9829841280510194e+00 -6.5899429951607957e-01 + -1.0982054405015285e+00 1.9080813530558380e+00 -6.0434244195081444e-01 + -1.1357815645993932e+00 1.8897474808412424e+00 -6.5118485332660803e-01 + -1.2301358255813915e+00 1.8117237485961060e+00 -4.4982180962730833e-01 + id 11583 + loc 4.3623864650726318e-01 3.3557412028312683e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4668145839759360e-01:4.1572945628698199e-01:1.2238462863477184e-02:4.1894783311967215e-01:8.9955517114731698e-01:4.4667699158300966e-01:1.4454713365899179e+00:3.4763255370477902e-01:2.0002622823098339e+00:2.6630182192506308e-01:2.8686210061008452e+00:3.3164626501144340e-01:3.6996670231684137e+00 + CVs 20 + -2.3802103501971267e-01 2.6097432570854084e-01 -1.1020654972129214e-01 + -4.7653209098480348e-01 5.7233193541525684e-01 -1.7745567060200765e-01 + -7.2098471059958025e-01 9.0794902758261165e-01 -2.2751112682281499e-01 + -9.8796788658203205e-01 1.2444692576860981e+00 -2.8088816429460084e-01 + -1.2955896703376224e+00 1.5604734941609610e+00 -3.5205998779032777e-01 + -1.6492904080157500e+00 1.8297601679896704e+00 -4.5426102499790866e-01 + -2.0371354872970011e+00 2.0200503166570662e+00 -6.0490479345609582e-01 + -2.4282210663296615e+00 2.0958080462637163e+00 -8.2140072598282299e-01 + -2.7817714600401127e+00 2.0363629053233079e+00 -1.0982073241168189e+00 + -3.0758830736185927e+00 1.8559894521899838e+00 -1.4011621895935527e+00 + -3.3114903654573440e+00 1.5861107575401419e+00 -1.6811529046206952e+00 + -3.4981393191981063e+00 1.2687765404131310e+00 -1.8697830651086074e+00 + -3.6496716586580251e+00 9.5661644650523192e-01 -1.9454564605451046e+00 + -3.7719924165024583e+00 6.2928643642047011e-01 -2.0138434459157195e+00 + -3.8463630829410991e+00 2.1860769584830375e-01 -2.1833456007966161e+00 + -3.8479313085824449e+00 -2.1840213079924364e-01 -2.4932202696908825e+00 + -3.7977723845054356e+00 -5.4143639135523514e-01 -2.9112970173044403e+00 + -3.7486607446982099e+00 -6.8757261627179422e-01 -3.3175937715337303e+00 + -3.7375862941855393e+00 -6.8329901499458390e-01 -3.5920462908542290e+00 + id 11584 + loc 9.5471644401550293e-01 3.1017971038818359e-01 1054 + blend 0.0000000000000000e+00 + interp 1.3800821191897463e+00:4.2867817829031057e-01:3.4341854256532711e-01:1.3800721191897463e+00:2.0388623417042866e+00:6.5169205976282252e-01:2.2142321469158892e+00:4.5001173197631622e-01:2.4465366487794427e+00:2.7877574857438220e-01:3.1656517346448485e+00:3.3021059256878504e-01:3.8201750023904038e+00 + CVs 20 + -1.0185983053106426e-01 4.6527969154511128e-01 3.6783835807044113e-01 + -2.1854399098544330e-01 9.2169114315529455e-01 6.4253828294988113e-01 + -3.2925655978106394e-01 1.3979870358689779e+00 8.4075239033322191e-01 + -4.7837659109568897e-01 1.8628430331781018e+00 1.0127734416205121e+00 + -7.2406470275025936e-01 2.2285567921501341e+00 1.2205394384603006e+00 + -1.0510212342334828e+00 2.4153632552057140e+00 1.4884260618329628e+00 + -1.3930369775598259e+00 2.3981775054649859e+00 1.7926350421589137e+00 + -1.7076975053334016e+00 2.2011505128930722e+00 2.0908934734943685e+00 + -1.9928418876702971e+00 1.8646854721656418e+00 2.3423526270227306e+00 + -2.2851826012260479e+00 1.4404474292661522e+00 2.5157905438587513e+00 + -2.6402798269072618e+00 1.0036346653442103e+00 2.5977590948049549e+00 + -3.0239934774102899e+00 6.8793037149564529e-01 2.6598373346680271e+00 + -3.2297196179099918e+00 5.8290440791390097e-01 2.8324273923916570e+00 + -3.1334382654428152e+00 5.6888738452994747e-01 3.0037554883036575e+00 + -3.0128840897029039e+00 5.1963651263386024e-01 3.1115213026450377e+00 + -2.9942712955908415e+00 4.5940378041514829e-01 3.3021485330778986e+00 + -3.1191285844026746e+00 3.8982163839103690e-01 3.6885079994602998e+00 + -3.4576065844579800e+00 2.0289805856393239e-01 4.1884944984471844e+00 + -3.6195875933934616e+00 1.5220127830932739e-02 4.3113056713676379e+00 + id 11585 + loc 2.6418948173522949e-01 3.4872731566429138e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4993028712912775e-01:4.4992578782625647e-01:2.8312020478491284e-01:3.4045872801576571e-01:8.3157745785312831e-01:2.8473612524730829e-01:1.1942609126603549e+00:3.0725159093895538e-01:2.0089108801922575e+00:3.0532019848757030e-01:2.7292425753604759e+00:3.1595248930942404e-01:3.4467194334311242e+00 + CVs 20 + 3.8809454291958567e-01 4.1388275838214583e-01 3.0078363527120161e-01 + 7.0510851699755062e-01 7.6851452128726894e-01 5.7311837455029524e-01 + 1.0154206709058797e+00 1.1052430868504890e+00 8.3338354735279874e-01 + 1.3208247776351758e+00 1.4413979775029315e+00 1.1124065399785883e+00 + 1.5791983446095788e+00 1.7691905320225518e+00 1.4372447920200164e+00 + 1.7514198616902794e+00 2.0739809311775770e+00 1.8147024498614268e+00 + 1.8072615342997524e+00 2.3355028028095770e+00 2.2258108528886269e+00 + 1.7248083021502252e+00 2.5301345521984784e+00 2.6277809799686991e+00 + 1.5054118770672698e+00 2.6327321145911684e+00 2.9583290633190131e+00 + 1.1962878871136002e+00 2.6371247292154072e+00 3.1732929072130291e+00 + 8.4957465318982828e-01 2.5500013160597383e+00 3.2862319885476778e+00 + 4.9396517479094348e-01 2.3523336474997665e+00 3.3331360319770260e+00 + 1.6742478473073752e-01 2.0370392135080539e+00 3.3299760638518903e+00 + -1.1266178609492039e-01 1.6810639105555945e+00 3.2646303516884703e+00 + -3.7152081117331104e-01 1.4004625529562653e+00 3.1251418077339030e+00 + -6.0809334828121120e-01 1.2985315249793579e+00 2.9369443443698562e+00 + -7.6402280332684991e-01 1.4168699625308494e+00 2.7644648655578603e+00 + -8.0828529580105213e-01 1.6520908850174276e+00 2.6408087904237307e+00 + -1.1785925780187996e+00 1.6925747597211727e+00 2.4038022993624049e+00 + id 11586 + loc 4.8986062407493591e-01 2.3606947064399719e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0508060459809614e-01:3.2569418100099334e-01:1.2776308670869063e-01:3.9437106546389272e-01:1.0017896215843805e+00:4.0507655379205015e-01:1.5108641436483055e+00:3.2289529355541285e-01:2.0047914947729795e+00:3.8544498873500410e-01:2.7638893604498027e+00:3.2754492981108047e-01:3.5176614618942801e+00 + CVs 20 + -7.1399908407744753e-02 3.7556531251803560e-01 -2.9835061515190314e-01 + -1.9543258854333045e-01 7.3367718255462033e-01 -5.8239442019827803e-01 + -3.6755688294556321e-01 1.0646696917329430e+00 -8.5429095612082862e-01 + -5.8766417718435915e-01 1.3623251283538922e+00 -1.1064370621487523e+00 + -8.4656120378324795e-01 1.6168781506277994e+00 -1.3291887743874002e+00 + -1.1230258418811145e+00 1.8220659290899623e+00 -1.5248818112286004e+00 + -1.3988423723046490e+00 1.9824793082623697e+00 -1.7059236982492747e+00 + -1.6639712918371186e+00 2.1081290872654606e+00 -1.8844761516589104e+00 + -1.9117986784561225e+00 2.2077877308183433e+00 -2.0674928168152684e+00 + -2.1427549691385948e+00 2.2879927174568309e+00 -2.2637938303221654e+00 + -2.3663759690446620e+00 2.3469744145977938e+00 -2.4941303606742942e+00 + -2.5948046395570064e+00 2.3657206599021046e+00 -2.7838737014916219e+00 + -2.8416477980813006e+00 2.2944280716397221e+00 -3.1357596602795659e+00 + -3.1012273422819354e+00 2.0667768074138486e+00 -3.4866867394575096e+00 + -3.3398231719605214e+00 1.6813426582756794e+00 -3.7554198431893266e+00 + -3.5356594114258444e+00 1.1262708719557051e+00 -3.9253097008101485e+00 + -3.6538406879901495e+00 2.9388301143096807e-01 -3.8701108729593474e+00 + -3.6481029395944700e+00 -4.8963641243664680e-01 -3.2845400953301103e+00 + -3.6626660765936725e+00 -6.2414444513744205e-01 -2.9420562844589004e+00 + id 11587 + loc 7.7141779661178589e-01 3.9377185702323914e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6817694511349253e-01:2.5404487008470361e-01:9.6476221670852569e-03:2.6101082059866398e-01:6.8604092216646362e-01:3.6817326334404143e-01:1.0471445593427520e+00:2.7211149162260073e-01:1.8261364375914946e+00:2.3994822318309422e-01:2.3286460636739661e+00:2.9819400282568864e-01:3.2253229825234153e+00 + CVs 20 + -7.5029114016197190e-02 5.3065631744072761e-01 3.7833988174263566e-01 + -1.8547093340130816e-01 1.1111836052942752e+00 7.5460565113724709e-01 + -3.9324317817935539e-01 1.7296265140390712e+00 1.0758119376561528e+00 + -7.4784740332085042e-01 2.3374525091917500e+00 1.2802304624612786e+00 + -1.2613432190764051e+00 2.8416176431141298e+00 1.3251623888989243e+00 + -1.8830449871596320e+00 3.1516661452097803e+00 1.2287630821637445e+00 + -2.5334347073558581e+00 3.2287023913524209e+00 1.0508643215950613e+00 + -3.1587961503169582e+00 3.0979665293196712e+00 8.4588332972727098e-01 + -3.7405916362486931e+00 2.8144013825853289e+00 6.2218283198891788e-01 + -4.2640871127928337e+00 2.4273621771973426e+00 3.6069454014134206e-01 + -4.7047611779479137e+00 1.9735648667761945e+00 5.4712390339910932e-02 + -5.0297241106085604e+00 1.5046593066476104e+00 -2.7505635026353775e-01 + -5.2296037311917765e+00 1.0797024328633762e+00 -5.8132181266396799e-01 + -5.3285261466999136e+00 6.8910457285267801e-01 -8.3028856611968205e-01 + -5.3148555491696960e+00 2.7659407101295663e-01 -1.0707193589464907e+00 + -5.1220120270371492e+00 -1.2455629521212952e-01 -1.4122070130330269e+00 + -4.7077468075219864e+00 -4.2666704745348283e-01 -1.9404789028504659e+00 + -3.9721654292398929e+00 -4.3369948726171703e-01 -2.7944105834044315e+00 + -3.5619036620255979e+00 -1.2500051034334558e-01 -2.8170985373835427e+00 + id 11588 + loc 1.0638738423585892e-01 1.1304917931556702e-01 1085 + blend 0.0000000000000000e+00 + interp 4.5478741875403872e-01:4.3127826633462413e-01:3.3187647991942293e-02:4.5478287087985120e-01:5.4805712486807723e-01:3.4116074526329671e-01:1.4988882258730531e+00:2.7679910036821254e-01:2.0158214989985552e+00:3.1297994075324592e-01:2.6712940378394778e+00:2.8120916187354200e-01:3.1826600879320304e+00 + CVs 20 + 4.0653719726608090e-01 3.6376311065426503e-01 3.0713766476621818e-01 + 6.7468837436380324e-01 6.4944795919581089e-01 5.8189459698980850e-01 + 8.8147712452801597e-01 8.9643124173740663e-01 8.5400638421369690e-01 + 1.0565294448916731e+00 1.1216053349663859e+00 1.1340206576375855e+00 + 1.1917761384229215e+00 1.3240727248033703e+00 1.4198797831583807e+00 + 1.2842486629122287e+00 1.5039256873728533e+00 1.7087178824217180e+00 + 1.3341975502047649e+00 1.6615295866598203e+00 1.9979458503522090e+00 + 1.3421002563950124e+00 1.7973208771911628e+00 2.2860098291401676e+00 + 1.3049926906919840e+00 1.9125964273611489e+00 2.5715421468386168e+00 + 1.2111889127315434e+00 2.0062538097129496e+00 2.8521510353783270e+00 + 1.0484089266578591e+00 2.0700451894230483e+00 3.1242851504952562e+00 + 8.1681810665911114e-01 2.0884065626051820e+00 3.3881416966388218e+00 + 5.2665957376182482e-01 2.0395506120398141e+00 3.6461557239309639e+00 + 1.8908195516841142e-01 1.8950084815679937e+00 3.8949638753813254e+00 + -1.7644143104617271e-01 1.6228911896288865e+00 4.1299569571673347e+00 + -4.9975983126726259e-01 1.2094117747069402e+00 4.3443942947130161e+00 + -7.0493793474684474e-01 6.8440208217424225e-01 4.5298044472472210e+00 + -7.6572967411753956e-01 1.0713401996034738e-01 4.7238922019113048e+00 + -6.5113177426511759e-01 -2.6430574854545630e-01 4.9865237339220565e+00 + id 11589 + loc 8.0110329389572144e-01 8.0797933042049408e-02 1074 + blend 0.0000000000000000e+00 + interp 5.5066415398102242e-01:3.6868686613166834e-01:2.8088559388788226e-01:4.1385120638111633e-01:9.3425901118278909e-01:4.4452718241345424e-01:1.7109753867509712e+00:5.5065864733948267e-01:2.1843589043976879e+00:2.5988131797754976e-01:3.1747000322457324e+00:3.8205367508809640e-01:3.9386525068287108e+00 + CVs 20 + -9.4945394642635586e-02 2.8627201509252675e-01 1.7625084109495176e-01 + -2.0770789783150898e-01 5.6768608351595362e-01 3.6835805174972269e-01 + -3.2491295252196434e-01 8.4528207667961053e-01 5.6765179234165397e-01 + -4.3823592408992457e-01 1.1177273171413964e+00 7.7236186765321779e-01 + -5.4274334088474618e-01 1.3808685202249185e+00 9.8506735001660473e-01 + -6.3312425952291396e-01 1.6284632041880993e+00 1.2088937026431774e+00 + -7.0515361565163448e-01 1.8531303830965347e+00 1.4474268702330402e+00 + -7.5665698035962581e-01 2.0468514784709515e+00 1.7037736488282826e+00 + -7.8755476312770745e-01 2.2014343343239360e+00 1.9795861880162486e+00 + -7.9960563537428120e-01 2.3091669721981183e+00 2.2745031750405067e+00 + -7.9629423564638935e-01 2.3622368393006679e+00 2.5851918424075770e+00 + -7.8354404186606275e-01 2.3533417076064720e+00 2.9038058661022803e+00 + -7.7072643741121538e-01 2.2802985035410295e+00 3.2172076635988316e+00 + -7.6908365005431234e-01 2.1490738287453084e+00 3.5093774673676688e+00 + -7.8812303406130102e-01 1.9724882703734812e+00 3.7654510889647992e+00 + -8.3362352535864348e-01 1.7671622709516837e+00 3.9755341825401116e+00 + -9.0753417358379318e-01 1.5500411968486199e+00 4.1343639230884976e+00 + -1.0066077387273149e+00 1.3337639786215583e+00 4.2348518770677535e+00 + -1.1434589050750739e+00 1.1074705980086603e+00 4.2161935818392138e+00 + id 11590 + loc 9.9456197023391724e-01 4.9845236539840698e-01 1077 + blend 0.0000000000000000e+00 + interp 5.2545623236637762e-01:5.2545097780405403e-01:9.5277905613527780e-03:4.2762977857596612e-01:3.3602966422283664e-01:2.4011010495958901e-01:9.6361639806146315e-01:3.0804193584319484e-01:1.6673393504900260e+00:3.1847222869119834e-01:2.0014987363714947e+00:3.6837597765966290e-01:2.7111621181046548e+00:3.3978065548211506e-01:3.2376806271220189e+00 + CVs 20 + -1.5020090046658183e-01 2.7357467993319828e-01 1.2326210933327600e-01 + -2.3860614473910907e-01 6.0154667990901622e-01 2.6979686856638307e-01 + -2.9796616740008025e-01 9.5261019390237012e-01 4.1581033633727132e-01 + -3.4755558512277246e-01 1.3064617054200061e+00 5.6157070645415863e-01 + -4.0085897160599659e-01 1.6562750763935115e+00 7.2104933382285885e-01 + -4.7703103089956811e-01 1.9952809708389943e+00 9.0359331508883045e-01 + -6.0220667805743422e-01 2.3159108827369832e+00 1.1159290321775388e+00 + -8.1167275559686847e-01 2.6011678854085449e+00 1.3621494171621429e+00 + -1.1294151895281024e+00 2.8105681479374098e+00 1.6235880697254159e+00 + -1.5340131222826678e+00 2.9093113628957266e+00 1.8560269261024041e+00 + -1.9961601026583535e+00 2.8962896880098050e+00 2.0322799919079557e+00 + -2.5093262345870766e+00 2.7641408054283976e+00 2.1453907496059492e+00 + -3.0373831890456731e+00 2.4798602177628535e+00 2.1982449198490110e+00 + -3.4542074665842915e+00 2.0751959621442637e+00 2.2066092228105605e+00 + -3.6779046858300188e+00 1.6923012901544761e+00 2.1882761847751566e+00 + -3.7482258104580977e+00 1.4078203510616085e+00 2.1478982364473289e+00 + -3.7262558669591255e+00 1.1976720029464509e+00 2.0792789960760731e+00 + -3.7340224860122571e+00 9.8776880577656778e-01 1.9527489988124651e+00 + -4.0958921551476193e+00 6.9840528331751006e-01 1.6770947931146065e+00 + id 11591 + loc 8.5031136870384216e-02 6.4721846580505371e-01 1054 + blend 0.0000000000000000e+00 + interp 4.9822143831952875e-01:4.9821645610514559e-01:1.1583248899396037e-01:2.8230605123452396e-01:1.0017342448546680e+00:4.8749897423377941e-01:1.4244644264067159e+00:3.3010652655612283e-01:2.4000390913738485e+00:3.5576563956657875e-01:3.3534491187575499e+00 + CVs 20 + 2.9279873809015688e-01 3.8452590986022883e-01 6.6402352590919339e-02 + 5.5921245601219649e-01 7.4712075847010206e-01 1.6130816841464618e-01 + 7.8269760500704066e-01 1.0994879501333990e+00 3.0421843466374637e-01 + 9.7437179532747142e-01 1.4183150172868249e+00 4.9322380679227318e-01 + 1.1649022440110346e+00 1.6551987507066590e+00 7.0308397631182362e-01 + 1.3717131210425435e+00 1.7857237598840174e+00 8.9103855818612254e-01 + 1.5805849368992844e+00 1.8259631440044379e+00 1.0224891307403960e+00 + 1.7969710563770667e+00 1.7944966177195785e+00 1.0954129067445033e+00 + 2.0402581107059485e+00 1.6767679644576048e+00 1.1230175949354133e+00 + 2.3108287906462746e+00 1.4313115290963534e+00 1.1291579703620778e+00 + 2.5899658718665970e+00 1.0341774535727444e+00 1.1680407373771131e+00 + 2.8528996383004697e+00 5.5529894710162897e-01 1.3181106568767280e+00 + 3.0934086205101954e+00 1.3529445098547277e-01 1.5802348659166414e+00 + 3.3338436032310934e+00 -1.3167256389958037e-01 1.8490950510789492e+00 + 3.6081891883305541e+00 -2.2062689957168491e-01 2.0202915725703847e+00 + 3.9200433698007533e+00 -1.5831039073316489e-01 2.0590969580252576e+00 + 4.2867032900656641e+00 8.0619141704997288e-03 1.9641007173893263e+00 + 4.7918684226457700e+00 1.4995295405693465e-01 1.7835793897911871e+00 + 5.1410683868343448e+00 -7.2828156428839108e-04 1.7321134913763512e+00 + id 11592 + loc 4.8491016030311584e-01 8.4937846660614014e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7636575057212932e-01:3.0207117823718049e-01:7.7789566970038204e-01:4.7228715488216322e-01:1.1935901831989320e+00:4.7636098691462364e-01:1.9318005590040781e+00:2.9769596423061456e-01:2.3196186534750507e+00:4.6058853556772839e-01:3.0932333634132676e+00:3.3594123020758776e-01:3.9329492123179119e+00 + CVs 20 + -2.6972383092491947e-01 2.6870976231136434e-01 2.1915494795970958e-01 + -4.9700398117165201e-01 4.9913254606376334e-01 3.9944757157776112e-01 + -6.7414741931265465e-01 7.2476131071337802e-01 5.9345223053393492e-01 + -8.1178477492771184e-01 9.5997712690304349e-01 8.0203785537617800e-01 + -9.4641555457592896e-01 1.2021050239999165e+00 9.7604881340403504e-01 + -1.1102894136797032e+00 1.4445659949350811e+00 1.0743859639304760e+00 + -1.3060113574110246e+00 1.6683254192754471e+00 1.0872185425279013e+00 + -1.5211951608445720e+00 1.8535040652364776e+00 1.0288689910672235e+00 + -1.7371140564902037e+00 1.9923810343253756e+00 9.0909380653379590e-01 + -1.9043010516352243e+00 2.0838118429846189e+00 7.1918862746609957e-01 + -1.9699037547301343e+00 2.1385538943280240e+00 4.7538274676627057e-01 + -1.9385764042502329e+00 2.1740754686250798e+00 1.9672149403149386e-01 + -1.8103504803276349e+00 2.1816970328052334e+00 -9.6741888712854163e-02 + -1.5813722757268125e+00 2.1444033773522020e+00 -3.1440578418651155e-01 + -1.2898772345665466e+00 2.0779079407255505e+00 -3.7776319597028774e-01 + -9.7676029458159330e-01 1.9792783518879959e+00 -3.0211865902201129e-01 + -6.6080749072079104e-01 1.7890344249591497e+00 -1.0037250691808430e-01 + -2.8642013865614002e-01 1.3511846137629036e+00 1.4253215735146185e-01 + -2.3398459352099776e-01 1.4292074332564337e+00 9.6872578790174746e-03 + id 11593 + loc 8.1011003255844116e-01 8.7406285107135773e-02 1084 + blend 0.0000000000000000e+00 + interp 4.8215059350983736e-01:3.5117010757923706e-01:1.0416716328730535e-03:3.1337899570745020e-01:7.0645401510787342e-01:4.8011428830972047e-01:1.0752689950388101e+00:4.8214577200390230e-01:1.5222919011914287e+00:4.4309876122320097e-01:2.0060363490957869e+00:2.5817039163884747e-01:2.7288816071121844e+00:3.4916612001200481e-01:3.2066167722120298e+00 + CVs 20 + 1.3973934451989983e-01 2.7022470422859041e-01 -3.8780943242357396e-02 + 2.6351914540422899e-01 5.0667469583102576e-01 -7.4993286291380079e-02 + 3.5333786437079584e-01 7.1835313640088050e-01 -1.3535240751946820e-01 + 3.8958727408118549e-01 9.0468230805432803e-01 -2.4012668389227998e-01 + 3.8662575237540375e-01 1.0877590782898521e+00 -3.8889583835265495e-01 + 4.0326272271042451e-01 1.3078136426126208e+00 -5.4901991825610152e-01 + 4.9107703403500497e-01 1.5589870897589955e+00 -6.8499642935681249e-01 + 6.8338346987158682e-01 1.8067849170210477e+00 -7.9140272337347894e-01 + 9.9314107413427988e-01 2.0176891740535572e+00 -8.3605882064959602e-01 + 1.3342595054053166e+00 2.1565699383125008e+00 -7.5159726544369909e-01 + 1.5872799273864380e+00 2.2237722750433635e+00 -5.4801794792344038e-01 + 1.7438890112206260e+00 2.2631926946180503e+00 -2.6195086797008194e-01 + 1.8062756171541838e+00 2.2936770103139521e+00 8.9180444950550886e-02 + 1.7039743620807555e+00 2.2748258341941545e+00 3.7266138295837070e-01 + 1.3996253909965972e+00 2.1659185957716587e+00 3.9557852662747117e-01 + 9.2216548323967418e-01 1.8942377359049085e+00 1.7466563870075436e-01 + 3.1469030511413976e-01 1.3220066792510528e+00 -8.9715061416989372e-02 + -4.0021077314273679e-01 3.9314161152770821e-01 -1.5328883474289512e-02 + -5.3140934223191028e-01 3.0562955569720524e-01 2.1024625677391934e-01 + id 11594 + loc 3.5768839716911316e-01 4.5527860522270203e-01 410 + blend 0.0000000000000000e+00 + interp 3.7062729380074988e-01:3.2686825808059722e-01:4.3424380501216886e-03:3.4740892549006924e-01:6.8511426356932537e-01:3.2898916223044805e-01:1.1411264035480768e+00:3.1039962185531900e-01:2.0004580062163191e+00:3.3166266044787235e-01:2.7512590186583212e+00:3.7062358752781188e-01:3.2693407855836685e+00 + CVs 20 + -1.6467418713139026e-01 1.2048731493008047e-01 -2.5400748192168154e-01 + -3.1878380352854591e-01 2.2558066899914311e-01 -4.6490615787913020e-01 + -4.7421490220874785e-01 3.2560054438808983e-01 -6.6563331069243825e-01 + -6.3794926656106032e-01 4.2566957519724657e-01 -8.7417179255842759e-01 + -8.1028896772962655e-01 5.2257073147245836e-01 -1.0923484175923814e+00 + -9.9053389115669788e-01 6.1311462588335797e-01 -1.3240023957869145e+00 + -1.1728144166395138e+00 6.9547159869485753e-01 -1.5766413076582273e+00 + -1.3445217371861677e+00 7.6854903367202676e-01 -1.8590315299856639e+00 + -1.4882681216915934e+00 8.3113158670060983e-01 -2.1778095895898639e+00 + -1.5843593126271416e+00 8.8212905719682388e-01 -2.5340882625374359e+00 + -1.6182844726660370e+00 9.1830286353437551e-01 -2.9150222836435797e+00 + -1.6070440589722290e+00 9.2456403812441490e-01 -3.2830866453707874e+00 + -1.6133655302905039e+00 8.7646981400458257e-01 -3.5912123721693696e+00 + -1.6851586207600513e+00 7.7058102524276650e-01 -3.8170903591294083e+00 + -1.8161348676454803e+00 6.2532027918909239e-01 -3.9686921491751308e+00 + -1.9883453393864388e+00 4.5909234907320706e-01 -4.0486359665528324e+00 + -2.1875427609311133e+00 2.9422756713662590e-01 -4.0422002056036073e+00 + -2.3910356943737812e+00 1.4969765268737811e-01 -3.9540512840490853e+00 + -2.5714898534654864e+00 -8.6685165289087651e-02 -4.0918156823367138e+00 + id 11595 + loc 3.6708745360374451e-01 4.8902988433837891e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9397275148413655e-01:3.7698454118344388e-01:2.1567317824646393e-01:4.9396781175662174e-01:9.2357634778475939e-01:3.3926856782380033e-01:1.2199357026878963e+00:2.7513136653494430e-01:2.0261527641870720e+00:3.0944308789339481e-01:2.9612539220584138e+00:3.7325965905136288e-01:3.9210210485580661e+00 + CVs 20 + 2.8108410466321193e-01 4.2297980793118950e-01 1.2774867319252012e-01 + 4.9080282888802640e-01 7.9745957189978434e-01 2.8994454823768018e-01 + 6.8260745158436376e-01 1.1636925869221411e+00 4.6847791891927887e-01 + 8.7538604718278279e-01 1.5290825569269120e+00 6.5732767832942107e-01 + 1.0686569519971592e+00 1.8835894287745960e+00 8.6901578829381332e-01 + 1.2617948492809186e+00 2.2142493433987598e+00 1.1178469107714843e+00 + 1.4533297198516331e+00 2.5030321315629811e+00 1.4153301850936513e+00 + 1.6358979410342214e+00 2.7297372318391506e+00 1.7697684739197548e+00 + 1.7961609530164586e+00 2.8718154605570581e+00 2.1973828865035734e+00 + 1.9093273140788498e+00 2.8808649233413428e+00 2.7181477530083811e+00 + 1.9243290939093107e+00 2.6747956371643182e+00 3.2939771438484340e+00 + 1.8070182856518120e+00 2.2306251139073545e+00 3.7896743764591920e+00 + 1.6132666799626487e+00 1.6677379446965992e+00 4.0917889850980380e+00 + 1.4493399834554508e+00 1.1623223535947909e+00 4.2284068696777179e+00 + 1.3786870326854443e+00 7.6729789632390166e-01 4.2981220873877799e+00 + 1.3783635333836974e+00 3.9348465878172539e-01 4.3388663958937039e+00 + 1.3142783997659599e+00 -4.3509463042837204e-02 4.3301930100729544e+00 + 1.0500819945233562e+00 -4.1168189589781701e-01 4.2764392482609388e+00 + 7.4522120244337808e-01 -4.8954151605216101e-01 4.2625829915545328e+00 + id 11596 + loc 2.1123677492141724e-01 5.9720724821090698e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3548403006787306e-01:4.2907695165806636e-01:2.2912598703927789e-01:4.3547967522757242e-01:9.5430627680805524e-01:4.1114623952324053e-01:1.5222905320206070e+00:3.9860680825121070e-01:2.1320986905233665e+00:3.9229869455341504e-01:2.9974666073247951e+00:4.0156956561902657e-01:3.8379426787215016e+00 + CVs 20 + 1.4530649277810648e-01 3.8923104525543506e-01 -2.2452773997633280e-01 + 3.2443103341982110e-01 7.7845469413002710e-01 -4.4804838920433898e-01 + 5.1494751715673703e-01 1.1683178322814072e+00 -6.5498543516065155e-01 + 7.0432858341341797e-01 1.5503425748033139e+00 -8.3308649850845451e-01 + 8.8512608030225726e-01 1.9096091189347788e+00 -9.9853503144770883e-01 + 1.0493452719283436e+00 2.2294289996838383e+00 -1.2005278185463080e+00 + 1.1883139313383126e+00 2.4924238072778162e+00 -1.4790535718771782e+00 + 1.2913860492775358e+00 2.6712518227485207e+00 -1.8408441878894066e+00 + 1.3470969004990720e+00 2.7354099916287931e+00 -2.2633023456957373e+00 + 1.3492582141015621e+00 2.6798009741797246e+00 -2.7101152022774166e+00 + 1.3011390048078018e+00 2.5226593565876119e+00 -3.1515849862238077e+00 + 1.2165480588834319e+00 2.2934169840276208e+00 -3.5677404266921022e+00 + 1.1166135713821013e+00 2.0357677391487137e+00 -3.9426855733973549e+00 + 1.0132290333815444e+00 1.8159923907041038e+00 -4.2348232234645229e+00 + 8.8833979559463372e-01 1.6795477451078018e+00 -4.3596996632719494e+00 + 7.2162719997740965e-01 1.5328201730552222e+00 -4.2487358212602526e+00 + 5.5931457541455343e-01 1.1388296891638572e+00 -3.9810513488830956e+00 + 5.1230251620328593e-01 6.1347162629537366e-01 -3.9505958347691723e+00 + 4.6017528162863264e-01 7.5126767818594375e-01 -4.1447417711176069e+00 + id 11597 + loc 3.8282936811447144e-01 8.3043706417083740e-01 1085 + blend 0.0000000000000000e+00 + interp 3.9172051604421476e-01:3.4942995762446261e-01:4.0060566648502283e-01:3.2500740848884702e-01:9.9990733096596562e-01:3.9171659883905435e-01:1.3958960934352409e+00:3.6503803836322457e-01:1.9998749259900075e+00:2.7522561745240132e-01:2.7831464272525785e+00:3.2318027106196517e-01:3.1742440817661128e+00:3.3546402306571782e-01:3.9216875482969877e+00 + CVs 20 + -1.2309231864837256e-01 3.6397650427996625e-01 3.1994411093030689e-01 + -2.6729017461005811e-01 6.5186848272235332e-01 5.5281909814033525e-01 + -4.2579152161268896e-01 9.1020970967665304e-01 7.4913595349024686e-01 + -5.9408681125143603e-01 1.1565840181058824e+00 9.2617167517441512e-01 + -7.7454473775665811e-01 1.3880026609317127e+00 1.0734751801390128e+00 + -9.6781374739147452e-01 1.6015508749032370e+00 1.1843965278381767e+00 + -1.1756396482558007e+00 1.7946319250397607e+00 1.2538911047379371e+00 + -1.3998267998972347e+00 1.9619848061443093e+00 1.2738565633142327e+00 + -1.6301432422789137e+00 2.0931017597776602e+00 1.2336905039494246e+00 + -1.8407723396870004e+00 2.1773359664482790e+00 1.1296332115887071e+00 + -2.0174124263853752e+00 2.2135905696863296e+00 9.7041569494900792e-01 + -2.1671656265649757e+00 2.2030314206573007e+00 7.6602589056854975e-01 + -2.3001182325821419e+00 2.1391475412772953e+00 5.2254367021077885e-01 + -2.4238327921570431e+00 2.0055300120481805e+00 2.4331681949103517e-01 + -2.5502772576751207e+00 1.7716651342791736e+00 -4.6760935389156433e-02 + -2.6829280690066950e+00 1.4193360750179305e+00 -2.8036196450885864e-01 + -2.8228478128455490e+00 9.7662938116204057e-01 -4.0670061278852615e-01 + -3.0128084620103017e+00 5.1521927661752587e-01 -4.0219884823994972e-01 + -3.2859743312502916e+00 2.4100727922882348e-01 -2.8937223584584748e-01 + id 11598 + loc 4.0303736925125122e-01 7.6700896024703979e-01 1048 + blend 0.0000000000000000e+00 + interp 4.1687474604788938e-01:3.0396118532413891e-01:1.6208020738954698e-01:3.5528264298811391e-01:9.6627003073513673e-01:4.0243666026451719e-01:1.7902125994886173e+00:3.5948058931264854e-01:2.6447891713481386e+00:4.1687057730042892e-01:3.1915657955025649e+00 + CVs 20 + 1.3989430443167400e-01 6.4837562037170060e-01 -3.1989914947059295e-01 + 2.6369055778102368e-01 1.2901317571743072e+00 -5.7295260057754660e-01 + 4.2136108512238368e-01 1.9490650841269013e+00 -7.5765408303360826e-01 + 6.7153732492864626e-01 2.6367012581241278e+00 -8.5993599546973465e-01 + 1.0821161771684942e+00 3.3122463728129734e+00 -8.5357638004903846e-01 + 1.6894993777337417e+00 3.8716658089634128e+00 -7.5319139102656341e-01 + 2.4614935165764478e+00 4.1902442402084592e+00 -6.2030267395816963e-01 + 3.2913538745669344e+00 4.1818976702393620e+00 -5.2545900483338825e-01 + 4.0491166277471216e+00 3.8437599916658716e+00 -5.0757940262539891e-01 + 4.6457459176867539e+00 3.2262861129727485e+00 -5.4466998402154476e-01 + 5.0166096240565539e+00 2.4090410019975663e+00 -5.5532077786880729e-01 + 5.1244003809705543e+00 1.5380281393777278e+00 -4.4896175824434453e-01 + 5.0105387894101954e+00 7.7557839390149130e-01 -2.0809912141783452e-01 + 4.7603700811559024e+00 1.7999301118747180e-01 1.0711879945240212e-01 + 4.4446412392867778e+00 -3.1419044517870298e-01 4.1726884710101453e-01 + 4.1658612053098256e+00 -8.2177197814851521e-01 5.9294014714852616e-01 + 4.5196329319512225e+00 -1.1954770641051000e+00 1.7593431047975472e-01 + 4.8480475380109471e+00 -8.0473376622243742e-01 3.4353197042016170e-02 + 5.1383762986779322e+00 -4.6255501585613856e-01 -5.7337117622030254e-02 + id 11599 + loc 5.8789628744125366e-01 1.6999666392803192e-01 1054 + blend 0.0000000000000000e+00 + interp 4.6393578744934566e-01:4.3538633623744544e-01:7.5009961609371745e-01:3.1095279792322122e-01:1.4869465257131753e+00:3.1059429413742873e-01:2.3985691060260099e+00:4.6393114809147118e-01:3.1498950245146475e+00:2.8047319312656627e-01:3.9723853726641458e+00 + CVs 20 + -1.1876054351626790e-01 4.4004122286926650e-01 1.7435238352314944e-01 + -2.3919176106234535e-01 8.4693062930617524e-01 2.8401829947169888e-01 + -3.3730669253723405e-01 1.2353225144261590e+00 3.3729564739922624e-01 + -4.2588129725739343e-01 1.6167822815375863e+00 3.5401005758005810e-01 + -5.4398927780295614e-01 1.9904465481452565e+00 3.6181340604997247e-01 + -7.2811165116686050e-01 2.3441022445134472e+00 3.8931418362927639e-01 + -9.9677639842404298e-01 2.6553246352399040e+00 4.6174895875903188e-01 + -1.3409252296608145e+00 2.8774512138183921e+00 6.0375767018017634e-01 + -1.7120628264796327e+00 2.9630577458243734e+00 8.1705681553170673e-01 + -2.0243222039893825e+00 2.8918193466806330e+00 1.0769005815878760e+00 + -2.2006830527245764e+00 2.6735431245330536e+00 1.3516754268375806e+00 + -2.1863650835284445e+00 2.3401476386544089e+00 1.5315651024461303e+00 + -1.9041276831086857e+00 1.9017055211224749e+00 1.3929685861645200e+00 + -1.6822564429344242e+00 1.3516020716442354e+00 8.3485087838079275e-01 + -1.8419617676018136e+00 1.0455472959184502e+00 4.0377519151571162e-01 + -2.0775572213038691e+00 1.1126392663226985e+00 3.6753654542641101e-01 + -2.2629013616902878e+00 1.5108397347027713e+00 8.1912551271526612e-01 + -2.6219618595901162e+00 1.9035208341535270e+00 1.7208961266291869e+00 + -2.9692075919293068e+00 1.6771005378883155e+00 1.9027137786799735e+00 + id 11600 + loc 8.2355254888534546e-01 8.8025224208831787e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8848293234650766e-01:3.3577038984983715e-01:8.8201654200118151e-01:2.8277399760677530e-01:1.3222956159705046e+00:2.6634866234589183e-01:2.0135043532639196e+00:2.8661262058018311e-01:2.8166570753814288e+00:3.8847904751718421e-01:3.1616731278433368e+00:3.2264410985075942e-01:3.9726108751138605e+00 + CVs 20 + 2.0620510750236890e-01 2.6239150932461286e-01 -2.2241879383577401e-01 + 4.1866099797481010e-01 5.2267521525973271e-01 -3.9976876314827919e-01 + 6.3703443467403342e-01 7.6834468185856486e-01 -5.6580469791598731e-01 + 8.6068139045428993e-01 9.9296245161250063e-01 -7.3721666121771290e-01 + 1.0892539550311382e+00 1.1935749270374429e+00 -9.1741665445869724e-01 + 1.3219968184955853e+00 1.3645962055876155e+00 -1.1184562031744603e+00 + 1.5557707096332698e+00 1.4958406572568608e+00 -1.3614165658051114e+00 + 1.7828611909019962e+00 1.5738822673473645e+00 -1.6632168432566530e+00 + 1.9920412640232079e+00 1.5871747093614430e+00 -2.0252973089026027e+00 + 2.1730308208575901e+00 1.5297269906726805e+00 -2.4354488715080187e+00 + 2.3213663307912737e+00 1.4014560081875223e+00 -2.8739953071542979e+00 + 2.4373261467932741e+00 1.2044408779712628e+00 -3.3174502483452248e+00 + 2.5172582117315376e+00 9.4131197773272468e-01 -3.7423074875018139e+00 + 2.5412582621898014e+00 6.2542465571966444e-01 -4.1345290305076450e+00 + 2.4712669798997893e+00 2.9295396025420944e-01 -4.4893708456207735e+00 + 2.2680314706004783e+00 7.8497213252103348e-03 -4.7916459750493532e+00 + 1.9342853748575679e+00 -1.6080253126528199e-01 -5.0063389200756809e+00 + 1.5335116849536106e+00 -1.8174379314369260e-01 -5.1034013791383774e+00 + 1.1287438925386466e+00 -3.0762325059150109e-01 -5.2896940848680591e+00 + id 11601 + loc 2.8340515494346619e-01 9.0055394172668457e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5699880807323778e-01:4.5699423808515705e-01:1.4263958126543286e-01:4.4774110686231444e-01:8.6915777796198246e-01:4.1730987147927784e-01:1.2537878247896066e+00:2.9437585316866155e-01:1.9361279098190924e+00:3.5008349043595155e-01:3.0019867751503981e+00:4.3554152637203486e-01:3.7705713250405903e+00 + CVs 20 + 1.1611110634316352e-01 2.4098862569939486e-01 -1.3489929352957225e-01 + 2.3378367997926847e-01 4.7932923801663141e-01 -2.9236618019529320e-01 + 3.5590943342092263e-01 7.0135416471096734e-01 -4.6018734124011212e-01 + 4.7991894647944827e-01 9.0086874213114032e-01 -6.2623080430566380e-01 + 5.9775771297878899e-01 1.0852622657251136e+00 -7.8696333340477187e-01 + 7.0868122797972477e-01 1.2631880175930745e+00 -9.4870372971352590e-01 + 8.2336649034710085e-01 1.4281908546183346e+00 -1.1267480099349623e+00 + 9.5415470076550546e-01 1.5664397840489477e+00 -1.3295987397706233e+00 + 1.1040470500392447e+00 1.6713411915004110e+00 -1.5482859188217624e+00 + 1.2688292266645331e+00 1.7427103827624961e+00 -1.7640864351570567e+00 + 1.4395037730531897e+00 1.7806344556306839e+00 -1.9598365728195417e+00 + 1.6046346656215262e+00 1.7845123642684209e+00 -2.1236212592404811e+00 + 1.7558353761685364e+00 1.7551949062356864e+00 -2.2504396783309550e+00 + 1.8837706628329409e+00 1.6900150297112257e+00 -2.3417057068189759e+00 + 1.9809773613555428e+00 1.5789175840990928e+00 -2.4015371629594124e+00 + 2.0539960824263677e+00 1.4170242618461377e+00 -2.4322725028170513e+00 + 2.1185345993091169e+00 1.2070799085528385e+00 -2.4378317658284456e+00 + 2.1636103434987222e+00 9.5271333530508495e-01 -2.4210340106628379e+00 + 2.0443729827762476e+00 6.2280009953717774e-01 -2.3588746072969546e+00 + id 11602 + loc 5.2569133043289185e-01 1.8410436809062958e-01 1077 + blend 0.0000000000000000e+00 + interp 3.8433204443871094e-01:3.8432820111826654e-01:4.2856432714898862e-01:2.8432123993418407e-01:1.0154279719698600e+00:2.6113722681640855e-01:1.9657530756490869e+00:3.0982356967644509e-01:2.4383983063681649e+00:2.9914855619055358e-01:3.0060596047455634e+00:2.9526094379995477e-01:3.9388564044978698e+00 + CVs 20 + 2.0760459047381136e-02 3.8089738439905618e-01 1.9198177027664509e-01 + 3.8570685721562303e-02 7.5198562042580130e-01 3.7847899948283154e-01 + 3.3603129875709847e-02 1.1021941182192172e+00 5.8525398884509272e-01 + -9.7291008644674326e-03 1.4199438838604992e+00 8.2363043464230745e-01 + -1.0250294929046022e-01 1.6943401802438713e+00 1.0928109014285503e+00 + -2.5062939173595533e-01 1.9140091625552831e+00 1.3811040645507004e+00 + -4.5356843193657537e-01 2.0708141690115331e+00 1.6691357715684427e+00 + -7.0440551372163385e-01 2.1626249624143314e+00 1.9352147584092274e+00 + -9.9328238833429605e-01 2.1937692382800122e+00 2.1617525605941141e+00 + -1.3137451898680210e+00 2.1700180845893122e+00 2.3408706891990696e+00 + -1.6651227184157580e+00 2.0924554771316419e+00 2.4778772216314588e+00 + -2.0474842454880720e+00 1.9548761781378878e+00 2.5897496986826454e+00 + -2.4546182954250502e+00 1.7406699498151901e+00 2.6982513316816203e+00 + -2.8711752918067472e+00 1.4168992072052595e+00 2.8250875568057103e+00 + -3.2626280364905282e+00 9.3259152127021050e-01 3.0024208602197975e+00 + -3.5280053657574397e+00 2.6868575004769046e-01 3.2625797315340086e+00 + -3.5454304594847148e+00 -4.9136858610700651e-01 3.6111631974181870e+00 + -3.3050465976795893e+00 -1.1746169520140541e+00 4.0464389776664742e+00 + -3.1251723046313300e+00 -1.4368268363006169e+00 4.2890709172396679e+00 + id 11603 + loc 9.4966727495193481e-01 5.5122756958007813e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6321774790710274e-01:2.8456728711746881e-01:2.8261118658219542e-01:3.0560812698273609e-01:1.0717541866813247e+00:4.6321311572962370e-01:1.9928311093863753e+00:3.1749092023477504e-01:2.8381242811659497e+00:3.9175777473663242e-01:3.2397817722198177e+00 + CVs 20 + -2.5198976165390569e-01 2.1941588451693048e-01 1.4380770593486680e-01 + -4.9064881390770521e-01 4.5788897293453334e-01 2.8957643292482826e-01 + -7.1380920541954240e-01 7.2133136828055322e-01 4.4374052881391968e-01 + -9.3337912401808831e-01 1.0114512090813930e+00 5.9934299762158139e-01 + -1.1769037084767262e+00 1.3229669903231362e+00 7.3195077273732023e-01 + -1.4697635422352477e+00 1.6402115109457325e+00 8.1156218744957087e-01 + -1.8231336951446397e+00 1.9368585370974625e+00 8.0935291843227619e-01 + -2.2255774021178647e+00 2.1767538479988762e+00 6.9611416860399355e-01 + -2.6290540637631836e+00 2.3136865926866181e+00 4.5088303250917272e-01 + -2.9647232951514479e+00 2.3171908897530678e+00 9.5701905091834405e-02 + -3.1953665201403170e+00 2.1967722234809566e+00 -3.0208476656380534e-01 + -3.3292493645787138e+00 1.9810203518642475e+00 -6.5884603801389552e-01 + -3.4034211195084914e+00 1.6919665560246133e+00 -9.1627842590857111e-01 + -3.4456400148063175e+00 1.3115176526698487e+00 -1.0917838497175025e+00 + -3.4369969939672744e+00 8.1940503462251202e-01 -1.2561342826008302e+00 + -3.3388817708163261e+00 2.7954280664159153e-01 -1.5002294900800417e+00 + -3.1583946605308038e+00 -1.8777068415065201e-01 -1.8948164805671521e+00 + -2.9509016418568548e+00 -4.9554407919269738e-01 -2.4102343134225226e+00 + -2.7960848756816272e+00 -7.8645882771951758e-01 -2.7620892239331374e+00 + id 11604 + loc 3.5768839716911316e-01 4.8687008023262024e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5618921368702264e-01:3.9222092357350613e-01:7.3378211990863229e-01:4.5618465179488582e-01:1.1942826602775245e+00:3.9958281790388472e-01:1.9877985910386340e+00:3.8371787314190275e-01:2.8057812299831353e+00:2.8330613746345307e-01:3.0944968679831968e+00:4.1190286962813943e-01:3.9982207521151611e+00 + CVs 20 + -2.4929533731692050e-01 4.4041897674508412e-01 -2.8104964982227870e-01 + -4.7822632033937362e-01 8.6702863777755756e-01 -5.2826231446118033e-01 + -6.9637068478262298e-01 1.2751348934090307e+00 -7.5284302300654027e-01 + -8.9314507153998290e-01 1.6695431147193751e+00 -9.5041004358153292e-01 + -1.0787795793107158e+00 2.0485063995780974e+00 -1.1216994642880738e+00 + -1.2995011240292325e+00 2.3668788368665883e+00 -1.2793013480597848e+00 + -1.5724167050041795e+00 2.5505627195614275e+00 -1.4258643459639724e+00 + -1.8573155662061145e+00 2.5955966329324029e+00 -1.5522955687536046e+00 + -2.1095618247955574e+00 2.5445110875852581e+00 -1.6539129978802039e+00 + -2.3107646309319896e+00 2.4445117376656005e+00 -1.7355294102690668e+00 + -2.4738804357320654e+00 2.3253772724988209e+00 -1.8109817629072205e+00 + -2.6215102434921018e+00 2.1933849263189229e+00 -1.9083800494685992e+00 + -2.7602189705734612e+00 2.0467481679807875e+00 -2.0672990594537310e+00 + -2.8778289445573626e+00 1.9008192354029703e+00 -2.2930851459833352e+00 + -2.9662650894487887e+00 1.7534808770737329e+00 -2.5614358204216430e+00 + -3.0213149418739533e+00 1.5828126751482383e+00 -2.8239514248278885e+00 + -3.0643440522028018e+00 1.4221946263664855e+00 -3.0331525600280007e+00 + -3.0044007881747743e+00 1.2424440340472231e+00 -3.1532602773669387e+00 + -2.5991758057767353e+00 1.0401872961130141e+00 -3.0141952980761864e+00 + id 11605 + loc 5.7036942243576050e-01 5.4049426317214966e-01 1085 + blend 0.0000000000000000e+00 + interp 4.8925917188075396e-01:4.8925427928903520e-01:3.3426756690304404e-01:3.7144492937475876e-01:9.9585251693901156e-01:4.2335788431792121e-01:1.6040309049548844e+00:3.0674967087991489e-01:2.0861367602264274e+00:2.7157492743510209e-01:2.9741851936483332e+00:3.4306644963696747e-01:3.9061327282474148e+00 + CVs 20 + -2.1195527596557251e-01 2.5892392881769549e-01 2.2913283806656462e-01 + -4.1773275511725766e-01 4.6869002762592060e-01 3.7393216273779029e-01 + -6.1858586246474889e-01 6.5659316571213244e-01 4.6715835810267559e-01 + -8.0661645599239518e-01 8.3285595010033853e-01 5.2703804647264774e-01 + -9.7321986484686396e-01 9.9655495525538251e-01 5.5556503969413418e-01 + -1.1102503227832228e+00 1.1504178251761350e+00 5.6065414251306445e-01 + -1.2178938988731989e+00 1.3029565813542885e+00 5.5200816656403506e-01 + -1.3066376445281174e+00 1.4640913234419135e+00 5.3213446750775362e-01 + -1.3890205000944560e+00 1.6404202679762887e+00 4.8696702353297378e-01 + -1.4737357815036112e+00 1.8238124082013227e+00 3.7859095947101518e-01 + -1.5666954678803111e+00 1.9908071665313782e+00 1.7517368025516966e-01 + -1.6795967511604402e+00 2.1144288758205398e+00 -1.2950099246392144e-01 + -1.8270336790527775e+00 2.1551203306744009e+00 -5.3360126174181000e-01 + -2.0213686566962328e+00 2.0410909858423096e+00 -1.0324410080972948e+00 + -2.2744886213496756e+00 1.6900883746299877e+00 -1.5557624735849001e+00 + -2.5713085913930942e+00 1.0931891397683291e+00 -1.9350216868113181e+00 + -2.8984873286569086e+00 3.4445452143854771e-01 -2.0536844727030124e+00 + -3.3000152224750998e+00 -3.5439328725002150e-01 -1.9203838076823365e+00 + -3.6965959191743174e+00 -5.7449218493543308e-01 -1.7388229834083928e+00 + id 11606 + loc 6.0328727960586548e-01 7.7289748191833496e-01 1053 + blend 0.0000000000000000e+00 + interp 5.1313212906507422e-01:2.8837980078703335e-01:1.0000049179535437e+00:3.3842020530051065e-01:1.9413648867250961e+00:5.1312699774378356e-01:2.2038179258502444e+00:4.3419260896270423e-01:2.8853017692834992e+00:4.7665493795737074e-01:3.2552392030108415e+00:3.9887613207391065e-01:3.9999743931280030e+00 + CVs 20 + -7.0715768581392724e-02 3.3776289372159057e-01 3.0984575057736985e-01 + -1.8734342859780456e-01 6.2898003790997048e-01 5.5775188468687809e-01 + -3.1674737901703492e-01 9.0848224846814274e-01 7.7704954596590592e-01 + -4.3775168043496382e-01 1.1777246685872622e+00 9.7454339180688532e-01 + -5.4848179257246499e-01 1.4277388699727611e+00 1.1458356494632362e+00 + -6.4494076379920751e-01 1.6564546014837029e+00 1.2902476796552196e+00 + -7.2781655706616033e-01 1.8685826695383243e+00 1.4201873613015432e+00 + -8.1265821089144596e-01 2.0722530590571311e+00 1.5560646124429296e+00 + -9.3793898277654097e-01 2.2704707654586862e+00 1.7083367980703270e+00 + -1.1516607903885252e+00 2.4436205742839499e+00 1.8673519082792180e+00 + -1.4732798176888895e+00 2.5093667219376581e+00 1.9845491665461936e+00 + -1.8191360452041487e+00 2.3822405097080859e+00 1.9941915009009885e+00 + -2.0516861013361289e+00 2.0776148432255868e+00 1.9037850020134777e+00 + -2.0993812874458024e+00 1.6793460956946937e+00 1.7652622393891095e+00 + -2.0064034388184364e+00 1.2677410633466399e+00 1.5971181718954619e+00 + -1.8588543602481786e+00 8.9877488365416647e-01 1.3856015349623185e+00 + -1.7056601867227956e+00 6.2901299414294432e-01 1.1098006687105484e+00 + -1.5606377358235162e+00 5.4995949455573423e-01 7.4083689461333424e-01 + -1.4291470653048528e+00 7.0638498238936509e-01 2.8891387721785672e-01 + id 11607 + loc 4.4272679835557938e-02 2.3732298612594604e-01 410 + blend 0.0000000000000000e+00 + interp 3.6351069354135179e-01:3.6350705843441639e-01:3.5756592446074387e-01:3.0593111777888155e-01:1.0825459109727409e+00:2.3777481930561134e-01:2.1351419550897961e+00:2.7559501304288692e-01:3.3434310380571337e+00 + CVs 20 + -1.2190144170617381e-01 1.2152583437188057e-01 -1.5920719768547176e-01 + -2.5680532501126696e-01 2.3280252748867442e-01 -3.1298767673683348e-01 + -3.9710055904353425e-01 3.5011469665802730e-01 -4.8420527157873638e-01 + -5.3349482812305249e-01 4.8078284251993114e-01 -6.8447280232371210e-01 + -6.5862551483496412e-01 6.2428328107407971e-01 -9.1932121568289282e-01 + -7.6028432465684415e-01 7.8081092429401555e-01 -1.1937792673808261e+00 + -8.2150256363854846e-01 9.4851243080256542e-01 -1.5049490556126872e+00 + -8.2983613053019067e-01 1.1222436055665930e+00 -1.8411418602784702e+00 + -7.8085413322136377e-01 1.2973880489129666e+00 -2.1889853400009223e+00 + -6.7598769657178714e-01 1.4711874029066676e+00 -2.5339833446023938e+00 + -5.4086943363361240e-01 1.6337003025809680e+00 -2.8527463340809573e+00 + -4.4863573762573816e-01 1.7621938235964132e+00 -3.1197467009340838e+00 + -4.6731556473039704e-01 1.8452482343641301e+00 -3.3143851177696679e+00 + -5.6410979033831121e-01 1.9072655338604434e+00 -3.4453531128912593e+00 + -6.7222371590557128e-01 1.9688304573681328e+00 -3.5649106847428946e+00 + -7.8071830929010178e-01 2.0329208543678767e+00 -3.6783070956829542e+00 + -8.8584900200337957e-01 2.1080812412929371e+00 -3.7585599440049386e+00 + -9.7320994040121178e-01 2.1956474432402655e+00 -3.8178863471372431e+00 + -1.0553045471033180e+00 2.2432082558970725e+00 -4.0140614029633426e+00 + id 11608 + loc 3.7068712711334229e-01 9.1698497533798218e-01 1054 + blend 0.0000000000000000e+00 + interp 5.0642073375515462e-01:2.6982162087613271e-01:1.0132899870094814e-01:3.8123105099135457e-01:8.8773912022494161e-01:4.0000723804189164e-01:1.3328427612336644e+00:5.0641566954781714e-01:1.9595973101354258e+00:4.2238917105330998e-01:2.1347729983016612e+00:2.7046792950781368e-01:2.7185731299988860e+00:3.2784328924268463e-01:3.5961041791847439e+00 + CVs 20 + 4.5661396977411178e-01 4.8640509612697641e-01 -1.0148952192414992e-01 + 8.5740981548391271e-01 9.8420031624798354e-01 -8.9043844758921908e-02 + 1.1808125343031679e+00 1.4886452588013213e+00 2.8482378033325984e-02 + 1.4324070629722594e+00 1.9700091006732410e+00 2.4217918905700908e-01 + 1.6269385329311132e+00 2.3831126099674553e+00 5.3783101971661695e-01 + 1.7809357394131271e+00 2.7001656768195965e+00 8.8914499869513330e-01 + 1.9070843964285453e+00 2.9061607243532777e+00 1.2523326009258204e+00 + 2.0152798991329481e+00 3.0082198233458586e+00 1.5177290002631150e+00 + 2.0747387690797159e+00 2.9979545505784841e+00 1.8320270315894176e+00 + 2.0769952879305311e+00 2.8686403061096195e+00 2.2317463405575859e+00 + 2.0733984475472704e+00 2.6483595117531529e+00 2.6660846898228625e+00 + 2.0534032284156396e+00 2.3153155138322878e+00 3.1228707744578226e+00 + 1.9601663459487724e+00 1.8292793925256783e+00 3.5786516161584538e+00 + 1.6666800781121585e+00 1.1943204246170582e+00 3.9411502934260563e+00 + 1.0601654059717869e+00 5.6148192857730839e-01 4.0785519383951350e+00 + 1.7820210696700944e-01 1.3700922676448646e-01 3.9441546437849220e+00 + -8.8987898377272956e-01 2.8480685582647380e-02 3.5584296893136260e+00 + -2.0093143385353383e+00 4.6996096681632538e-01 2.8535027407766433e+00 + -2.1984078741951669e+00 1.0627771490121458e+00 2.4542897478741161e+00 + id 11609 + loc 1.0775756835937500e-01 6.2651735544204712e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5682778565892296e-01:4.5682321738106640e-01:9.2170892024678319e-02:4.5120069143752273e-01:9.3641677149930225e-01:4.5499787836174005e-01:1.2980864773809493e+00:3.0793856772788636e-01:1.9485603397682736e+00:4.0233709142646751e-01:2.8462943750401415e+00:3.7472912560943122e-01:3.4431122522947719e+00 + CVs 20 + 1.5286959105734022e-01 5.3034821601347082e-01 -1.6331484633101204e-01 + 2.9919478768134339e-01 1.0596278132951162e+00 -2.5604560855305886e-01 + 4.4483492155826698e-01 1.5890444980050948e+00 -2.6293389349418173e-01 + 6.1521821816466482e-01 2.1359295122836164e+00 -1.8859394016336628e-01 + 8.6983326558698115e-01 2.7130470425372515e+00 -5.5090543248350277e-02 + 1.2730322955084072e+00 3.2875776574269655e+00 8.4398070434847483e-02 + 1.8544484665632726e+00 3.7836003054560625e+00 1.6758028740137609e-01 + 2.6046363352866431e+00 4.1029006581410004e+00 1.6503869232254065e-01 + 3.4517716292041838e+00 4.1410220268060325e+00 6.2953572534562019e-02 + 4.2656803746931757e+00 3.8400375390392498e+00 -1.4577152597184884e-01 + 4.8994288995919604e+00 3.1886378389980408e+00 -3.9809065481064987e-01 + 5.2048515021947912e+00 2.2585269426933845e+00 -5.5422634322640163e-01 + 5.1161244451528951e+00 1.2373549908910428e+00 -5.2197109439912881e-01 + 4.7136140348787343e+00 3.2615395397257341e-01 -3.1394850740732455e-01 + 4.1731857582302734e+00 -3.8342570432435619e-01 -3.8007393490134100e-02 + 3.7068910616452593e+00 -9.5448391931809595e-01 2.6219452030893720e-01 + 3.9454777914419741e+00 -9.6913552606452469e-01 1.3762097757648255e+00 + 3.9390663620314514e+00 -5.7696334288201379e-01 1.5430105037341511e+00 + 3.8704259703900421e+00 -4.6133576428801781e-03 1.7799853820620675e+00 + id 11610 + loc 7.8645753860473633e-01 3.6015486717224121e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8291097062145250e-01:4.8290614151174632e-01:2.5834915393748425e-01:4.5344218075186987e-01:8.7404997609204715e-01:2.8668051662196531e-01:1.0507914279538042e+00:3.1668485557101589e-01:1.9007756961486471e+00:2.5421011027974244e-01:2.4362422204070855e+00:2.9506028863747596e-01:3.6525542653591843e+00 + CVs 20 + 2.3683794714132170e-01 3.6413145188384777e-01 -1.1003833707712704e-01 + 4.2727666339608539e-01 7.3023061578758663e-01 -2.2262967015248347e-01 + 5.8720130283974448e-01 1.1101939567480272e+00 -3.6288211747393456e-01 + 7.5334241454735429e-01 1.5108842464274310e+00 -5.2045792364567345e-01 + 9.7305481711133446e-01 1.9300627479005747e+00 -6.5747636083240701e-01 + 1.2728081923002184e+00 2.3501122322365928e+00 -7.3940707330211308e-01 + 1.6522701066429832e+00 2.7438614725678558e+00 -7.4124754812802518e-01 + 2.0982798743239206e+00 3.0843572815362310e+00 -6.3245652513188300e-01 + 2.5787877504457146e+00 3.3357174883502934e+00 -3.7275281702792351e-01 + 3.0356468559814269e+00 3.4571574071746123e+00 4.1678669209086472e-02 + 3.4395797269533643e+00 3.4202963922092415e+00 5.7830856641970163e-01 + 3.7946453693492428e+00 3.1812090711391940e+00 1.1842026753619175e+00 + 4.1000581245688794e+00 2.7470703174999027e+00 1.7158980307966658e+00 + 4.3453391681114431e+00 2.2736515071113383e+00 2.0532840806919519e+00 + 4.5304613149051844e+00 1.8922149477210564e+00 2.2248805006445478e+00 + 4.6674404460774319e+00 1.6426235057777132e+00 2.2657333305765568e+00 + 4.7766053227969216e+00 1.4686332288948161e+00 2.1828376012930670e+00 + 4.8349347373479388e+00 1.2440453895807277e+00 2.1313589908518704e+00 + 4.7747801166785457e+00 1.0359057582058240e+00 2.3464730466920871e+00 + id 11611 + loc 4.7912627458572388e-01 1.8488523364067078e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7820369089402665e-01:4.0742731749071504e-01:1.6802867837046687e-01:2.9625236700526286e-01:9.7556763096586219e-01:2.5513851979978253e-01:1.8604270480217899e+00:4.3562433619436330e-01:2.0208674930839794e+00:4.1894783311967215e-01:2.8972937299276786e+00:4.4946197335762161e-01:3.3858349524330738e+00:4.7819890885711774e-01:3.9202367838949113e+00 + CVs 20 + -2.3904889954967212e-01 2.9653813740727397e-01 -5.2536080086582476e-02 + -4.6133997899358459e-01 6.3934081740392235e-01 -6.7719860142620214e-02 + -6.7292468545462714e-01 1.0174851837025913e+00 -6.1085558158164244e-02 + -8.9462202587456763e-01 1.4208959889571635e+00 -5.5634731367905976e-02 + -1.1539202206318593e+00 1.8383508122925520e+00 -7.7717403213007574e-02 + -1.4741721160975274e+00 2.2473002080743187e+00 -1.5458727431674735e-01 + -1.8688822929430899e+00 2.6075016071880759e+00 -3.1948050947855444e-01 + -2.3233014491119257e+00 2.8567462988521388e+00 -6.1486352181142778e-01 + -2.7756689761613234e+00 2.9295311024679536e+00 -1.0552378785585252e+00 + -3.1583402650012924e+00 2.8113705449025996e+00 -1.5852506635341261e+00 + -3.4634848243201519e+00 2.5201620064998136e+00 -2.1284147453973912e+00 + -3.7224816746119811e+00 2.0462235439782055e+00 -2.6057158841028412e+00 + -3.9516110214968956e+00 1.4128450570502900e+00 -2.9293456030359630e+00 + -4.1168324831649858e+00 7.4739298790729669e-01 -3.1295613605412704e+00 + -4.1716081572516890e+00 1.6366471350603962e-01 -3.3778343381878795e+00 + -4.1229566286709671e+00 -2.3618135114108640e-01 -3.7838058190882013e+00 + -4.0598703890858010e+00 -3.3203564562258858e-01 -4.3123772098405677e+00 + -4.0522029491216864e+00 -2.2011644578233991e-01 -4.8240034763043873e+00 + -4.0441555842739971e+00 -5.0657747594112279e-01 -5.2711832797633091e+00 + id 11612 + loc 2.5181829929351807e-01 3.4872731566429138e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4284773141663281e-01:4.3535390047290240e-01:2.9175966390755137e-01:2.5600899226234669e-01:1.1777368037294158e+00:2.9056952880960368e-01:2.0206110489293367e+00:4.4284330293931867e-01:2.9888211074812210e+00:2.7880726733692446e-01:3.4449216616275820e+00 + CVs 20 + 3.1730775802378458e-01 3.7783593995818521e-01 2.3749434830563224e-01 + 5.0249281207691410e-01 6.8172996524487317e-01 4.5520370113555431e-01 + 6.2606416184990521e-01 9.4948271465449530e-01 6.6860259192071569e-01 + 7.1928417940534572e-01 1.1948579883088000e+00 8.7730546834537759e-01 + 7.8681868779132036e-01 1.4184197058147843e+00 1.0777012487059088e+00 + 8.3693502677284215e-01 1.6246941949507616e+00 1.2701661128153476e+00 + 8.7618315022407089e-01 1.8200152894474106e+00 1.4623481615053591e+00 + 9.0224103370503983e-01 2.0085076320210753e+00 1.6695425455207065e+00 + 8.9737639013803538e-01 2.1881770048619824e+00 1.9083302087100866e+00 + 8.2661177364254046e-01 2.3416884378525560e+00 2.1850604530266113e+00 + 6.6844833819675897e-01 2.4378941641265035e+00 2.4909470796198190e+00 + 4.3411645592151837e-01 2.4477553138129307e+00 2.8182502368566946e+00 + 1.5001618712671860e-01 2.3450506829293705e+00 3.1628052334220169e+00 + -1.5064756685554459e-01 2.1021816564651545e+00 3.5155781444843028e+00 + -4.0021156863176344e-01 1.7097023404121001e+00 3.8679408151330241e+00 + -4.9467831091470105e-01 1.2185361955360792e+00 4.2056912406624107e+00 + -3.9509543097196476e-01 7.3582274858205821e-01 4.5263449665902504e+00 + -1.3506365899924030e-01 3.6167218441290305e-01 4.8725717576865142e+00 + 2.8613359738441146e-01 5.4501366191445383e-02 5.3405551277288668e+00 + id 11613 + loc 8.7367311120033264e-02 4.8508264124393463e-02 410 + blend 0.0000000000000000e+00 + interp 3.4054552267215127e-01:3.4054211721692457e-01:1.3631642138663669e-01:2.7730461425303859e-01:7.5804193149563570e-01:2.5795501271987975e-01:1.4815814088720740e+00:2.6813652504073421e-01:1.9506283931905375e+00:3.3044649961738354e-01:2.3510164094680750e+00:2.9669158934003048e-01:3.1435254260569296e+00 + CVs 20 + -1.2507232987411007e-01 9.9635822494831397e-02 -9.4208748030627398e-02 + -2.4941599782368293e-01 2.0381358775852626e-01 -1.8633379887347751e-01 + -3.7064064359218701e-01 3.1440212646064436e-01 -2.8326583098333524e-01 + -4.8610210493545691e-01 4.3209591868991348e-01 -3.9016880272827814e-01 + -5.9340272272877270e-01 5.5603440487851319e-01 -5.1046032239872097e-01 + -6.9087195452387107e-01 6.8567075500862629e-01 -6.4905424874795059e-01 + -7.7246596150907876e-01 8.2088867799125564e-01 -8.0989771062217264e-01 + -8.2658647181492662e-01 9.5966501886557420e-01 -9.9153594899915609e-01 + -8.4285157097943153e-01 1.0969398981809182e+00 -1.1878845372474665e+00 + -8.1684868633489882e-01 1.2257278010289117e+00 -1.3934914303925239e+00 + -7.4717935434597682e-01 1.3360497690994122e+00 -1.5974814144167342e+00 + -6.3488674463290462e-01 1.4212560952444717e+00 -1.7686365830050848e+00 + -4.8933873282387630e-01 1.4835530514883797e+00 -1.8757705442583403e+00 + -3.1732815018026961e-01 1.5320499179048848e+00 -1.9254793009757332e+00 + -1.2576063339181442e-01 1.5690268159311482e+00 -1.9751475377077563e+00 + 5.9831945237682760e-02 1.5823916461623351e+00 -2.0756418575042046e+00 + 2.2487956195520953e-01 1.5651827494221875e+00 -2.2239026178613939e+00 + 3.6897153029801988e-01 1.5186692953804348e+00 -2.4047785715269523e+00 + 4.1744694657014003e-01 1.4249342794793056e+00 -2.5815890139208859e+00 + id 11614 + loc 8.9828723669052124e-01 6.1656528711318970e-01 1053 + blend 0.0000000000000000e+00 + interp 4.1967714201929224e-01:2.9106708854849245e-01:3.7590799914827611e-02:3.1852361026215026e-01:9.2056430892727281e-01:3.4366103610289628e-01:1.7206178513785253e+00:3.7546794902727204e-01:2.1177677073227787e+00:4.1967294524787208e-01:2.7451357412659743e+00:3.5997629573580026e-01:3.0842900513957137e+00:4.1938490919355220e-01:3.6826453422024379e+00 + CVs 20 + -7.4471118662558677e-02 2.9843386081066259e-01 2.2243249335063767e-01 + -1.8181779587086683e-01 5.7624704397824777e-01 4.3463055563755637e-01 + -3.0318817751105165e-01 8.5157280900629684e-01 6.4143388832730697e-01 + -4.3263420084516774e-01 1.1282333994349310e+00 8.4183170499067139e-01 + -5.7715701438565159e-01 1.3997466733388553e+00 1.0310388299434494e+00 + -7.3573070861394696e-01 1.6545299837657537e+00 1.2051517179544518e+00 + -9.0317409317244945e-01 1.8806466758647788e+00 1.3657466732300048e+00 + -1.0952878443834499e+00 2.0645420871981006e+00 1.5198172989026351e+00 + -1.3503595726804574e+00 2.1607582778686529e+00 1.6624582221495947e+00 + -1.6633713183547307e+00 2.1091431176220716e+00 1.7658117880557522e+00 + -1.9878646653984449e+00 1.8893285525658701e+00 1.8065715831049882e+00 + -2.2557453104939915e+00 1.5002079182435708e+00 1.7685778546694482e+00 + -2.3731690355841248e+00 9.7593165333763343e-01 1.6281841636452028e+00 + -2.3043628354585479e+00 4.0569743924686125e-01 1.3486958791910693e+00 + -2.1187491425057594e+00 -1.0842550556954444e-01 8.8054090445785527e-01 + -1.9177118161650535e+00 -4.4036172357905284e-01 1.9791179738224512e-01 + -1.7757713805979842e+00 -4.5153499883670634e-01 -6.1310321034991433e-01 + -1.7042966459762201e+00 -1.7987925671597382e-01 -1.3641935059066468e+00 + -1.6062833781247630e+00 7.3586137643588678e-04 -1.9725264625571497e+00 + id 11615 + loc 7.8480988740921021e-01 1.1120109260082245e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3952318621588854e-01:2.7423845415462023e-01:7.2158517989922666e-01:3.0490079980054730e-01:1.7612110596505732e+00:4.3951879098402641e-01:2.2356784290118230e+00:2.7343799107682804e-01:2.9794524185976363e+00:2.8334135147576894e-01:3.9921821673741436e+00 + CVs 20 + 3.4827870656511184e-01 3.0667751066602728e-01 -1.6828710874525130e-01 + 6.6059270248684610e-01 5.5275108482612889e-01 -2.4517666081299316e-01 + 9.4767366296624467e-01 7.7588006463909820e-01 -2.6743920501342355e-01 + 1.2090679942170204e+00 9.9733973551307220e-01 -2.5052756015342559e-01 + 1.4261341137372483e+00 1.2088974657308178e+00 -2.0663880901478437e-01 + 1.5870240101405251e+00 1.3882057055741077e+00 -1.6636800657808437e-01 + 1.7011891278768130e+00 1.5285518814853165e+00 -1.4374699261892787e-01 + 1.7854462795065711e+00 1.6546445697880614e+00 -1.3906217706806490e-01 + 1.8412110535520299e+00 1.7780853322659134e+00 -1.4476802899179853e-01 + 1.8555241282145225e+00 1.9088514585239500e+00 -1.3794782386775251e-01 + 1.8375326057282533e+00 2.0813329125510038e+00 -1.2487257843243316e-01 + 1.8537759576430100e+00 2.2898262482994136e+00 -1.5307678099002797e-01 + 1.9470029148518728e+00 2.4803783653071725e+00 -2.3270798979317919e-01 + 2.0983051334285525e+00 2.6178936869350569e+00 -3.4825152366440659e-01 + 2.2705880533438862e+00 2.6828004456668362e+00 -4.8278523341273449e-01 + 2.4556483255153534e+00 2.7052928401782794e+00 -6.2681012632248345e-01 + 2.6939496501242575e+00 2.7333046205537612e+00 -7.9886485903987259e-01 + 2.9944113426263117e+00 2.7278776249118719e+00 -9.9144140131474146e-01 + 2.9471802618678411e+00 2.5186014315390071e+00 -7.9072610436318569e-01 + id 11616 + loc 6.0542255640029907e-01 1.1864195764064789e-01 1090 + blend 0.0000000000000000e+00 + interp 4.1833316791404257e-01:3.8269052900628370e-01:3.9263438142940932e-01:3.9556726908075396e-01:9.9893513225363095e-01:4.1832898458236345e-01:1.7965358828907600e+00:4.1656035549404374e-01:2.0188886189302995e+00:3.4136113606273044e-01:2.5175626236375739e+00:3.7402849143482370e-01:3.4394551383261769e+00 + CVs 20 + 4.4342809065812089e-02 4.6961706250715285e-01 -2.7834255771981636e-01 + 1.4710617642588891e-01 8.6962810397792523e-01 -4.5447933037926436e-01 + 2.7885321357097220e-01 1.2357131433575801e+00 -5.7411616691070588e-01 + 4.3634909507555797e-01 1.5713006218042938e+00 -6.4276977338194130e-01 + 6.2219296417592063e-01 1.8553033357173208e+00 -6.4902894864569072e-01 + 8.2546733459175725e-01 2.0605833008744141e+00 -5.8754909321623583e-01 + 1.0186331957215236e+00 2.1617371621900796e+00 -4.6581182821115802e-01 + 1.1662433105313526e+00 2.1540863736436298e+00 -3.1007421900450099e-01 + 1.2508091531966212e+00 2.0631313708280130e+00 -1.5573829700030606e-01 + 1.2910836932264675e+00 1.9238484088183399e+00 -2.0014039771273029e-02 + 1.3125291287939387e+00 1.7497853676345339e+00 9.9282201609207810e-02 + 1.3250155077001213e+00 1.5417655132191375e+00 1.9940969090973326e-01 + 1.3354391386744298e+00 1.3003702315594972e+00 2.7024461850183296e-01 + 1.3560716718059906e+00 1.0248025056173173e+00 2.9425414006978662e-01 + 1.4026184869058338e+00 7.1996946902945003e-01 2.4394365706486501e-01 + 1.5099460332478434e+00 3.8986084629667728e-01 9.5074540550647818e-02 + 1.7341563562075288e+00 6.6987231560455440e-02 -1.8738642217994728e-01 + 2.0850233628493542e+00 -1.5260933775719110e-01 -5.7870010206838329e-01 + 2.3877084767587955e+00 -3.5745769760006801e-01 -8.2157002697781012e-01 + id 11617 + loc 7.1917158365249634e-01 1.5060803294181824e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8937648341579976e-01:3.4674924950629521e-01:7.7273934705401892e-04:3.8108512075480372e-01:5.5382941535783070e-01:4.8937158965096561e-01:1.0026338630333178e+00:3.1511932789040537e-01:1.5639702282550267e+00:3.2201201529115403e-01:2.2666889224188420e+00:2.6068160697109699e-01:3.0744729487790980e+00 + CVs 20 + -1.9546129410042512e-01 3.7811308149082956e-01 1.8964613318303264e-01 + -3.8231347320470399e-01 7.3980519385707921e-01 4.1037910010330736e-01 + -5.5499534335695899e-01 1.0709393681880204e+00 6.7699058731809603e-01 + -6.9823241936889002e-01 1.3576198765636438e+00 9.9346181619669727e-01 + -8.0224394849239733e-01 1.5894554707643231e+00 1.3583180127833880e+00 + -8.8234675851082667e-01 1.7602069291219058e+00 1.7746099548240308e+00 + -9.6979627501908960e-01 1.8642776220688382e+00 2.2464976055183965e+00 + -1.0888349292134598e+00 1.8938674454701623e+00 2.7665214598265515e+00 + -1.2477415647835031e+00 1.8386460476432136e+00 3.3126414225359442e+00 + -1.4341656745166231e+00 1.6862611440422586e+00 3.8489129740866446e+00 + -1.5945536523291493e+00 1.4339531853862135e+00 4.3217064802479443e+00 + -1.6142284863990566e+00 1.1248096539596637e+00 4.6585606520776919e+00 + -1.3986331330226940e+00 8.9472405962774859e-01 4.8059224176931812e+00 + -1.0639772837589809e+00 8.3517101947636907e-01 4.8389186945011531e+00 + -7.5639279493101597e-01 8.3518041238618568e-01 4.8751566075728023e+00 + -4.9529174875086374e-01 9.9995503543774233e-01 4.9166711878167400e+00 + -5.7063559802833774e-01 1.7675374312051813e+00 4.9809713791740933e+00 + -1.4420924044606971e+00 2.6836501772195600e+00 5.1046607338345344e+00 + -1.0268455481968572e+00 2.6872496371948644e+00 5.2071842625358231e+00 + id 11618 + loc 5.9381645917892456e-01 9.7329556941986084e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6211743473432459e-01:3.5121288147441349e-01:3.3187089433364014e-01:4.6211281355997730e-01:9.9774663971080546e-01:3.7619909529175627e-01:1.8744919516352416e+00:2.8602586422389048e-01:2.9510175824920335e+00:4.1322325098508672e-01:3.8175468319207098e+00 + CVs 20 + -9.4702433742031217e-02 4.7965209677260567e-01 1.9929665361794152e-01 + -2.3303426378246897e-01 9.3830816522634308e-01 3.4104851395579233e-01 + -3.9151585436243846e-01 1.3903930787888350e+00 4.5839704785355034e-01 + -5.7819465197549769e-01 1.8327037697936599e+00 5.4515039966814005e-01 + -8.0440974250465647e-01 2.2421355196350961e+00 5.7344952770444424e-01 + -1.0622738984356064e+00 2.5835764271301107e+00 5.1439413028263581e-01 + -1.3107679007606556e+00 2.8072264237900058e+00 3.4313048785655331e-01 + -1.4547695735160073e+00 2.8457536775257264e+00 6.2062922989303271e-02 + -1.3827214406149917e+00 2.6781156095904621e+00 -2.2208303512108540e-01 + -1.1643087976399893e+00 2.4359594904511930e+00 -3.8186213167050775e-01 + -9.5652326438617286e-01 2.1900545039431112e+00 -4.7452858833351552e-01 + -7.9769232807122470e-01 1.8749576023694869e+00 -5.4184525688648411e-01 + -6.7834598306465621e-01 1.4748822445328595e+00 -5.4313492870579783e-01 + -5.6247914499084428e-01 1.0951047623096342e+00 -5.2290439946139100e-01 + -4.0541535162063164e-01 8.0994652082363827e-01 -6.1823232233305525e-01 + -2.0828609299033354e-01 6.5766839790148890e-01 -8.8961171653776328e-01 + -2.6408832729994461e-02 7.0870422030852365e-01 -1.3125479380557987e+00 + 6.9913353848386983e-02 9.7044672031351675e-01 -1.7637506073942326e+00 + 2.0379706881142945e-01 9.1563919197216359e-01 -2.1806344720423811e+00 + id 11619 + loc 4.4272679835557938e-02 2.5379067659378052e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1419570529171823e-01:3.9976980857111005e-01:3.3922845661303169e-01:2.7206112525556952e-01:9.2993401760543049e-01:2.1568427055721465e-01:1.9906197060417297e+00:3.5101808865311679e-01:2.6930722996223091e+00:4.0002065920080243e-01:3.3732638278386400e+00:4.1419156333466534e-01:3.9810796340793893e+00 + CVs 20 + -1.7526276144853481e-01 3.1690002085455699e-01 -1.7558570238583399e-02 + -3.5265288092184494e-01 6.1472219969926856e-01 -2.3020433838214602e-02 + -5.3354148358942455e-01 8.9432548865482708e-01 -2.2031378632534709e-02 + -7.0940434985521039e-01 1.1628003288673765e+00 -1.7847837871480282e-02 + -8.2010316097366143e-01 1.4201768150714329e+00 4.0794525497608314e-03 + -7.7181735223247272e-01 1.6490859213136975e+00 6.7052652936378521e-02 + -5.8099116549785823e-01 1.9329748148562964e+00 1.9141402374121652e-01 + -5.1679057200936618e-01 2.3288131842336890e+00 3.3454021525447925e-01 + -7.0527908344118917e-01 2.7024085973136387e+00 4.3054823429594635e-01 + -1.0740544038955937e+00 2.9417215516948998e+00 4.4281988803810179e-01 + -1.4938673850969793e+00 3.0011222636439627e+00 3.4421120861163235e-01 + -1.8370796703601668e+00 2.9373375994739530e+00 1.2891964216401963e-01 + -2.0381704685002515e+00 2.8462723515826904e+00 -1.8447772748456404e-01 + -2.1249402709150291e+00 2.8019135702204987e+00 -5.7331481719898125e-01 + -2.1583286882648873e+00 2.8192915984867795e+00 -1.0400796383747879e+00 + -2.1819960836055725e+00 2.8109793566130383e+00 -1.5748273922624181e+00 + -2.2672133127858363e+00 2.6916349470192054e+00 -2.1491254090112548e+00 + -2.3674702129899763e+00 2.3751897412267824e+00 -2.7334052275287068e+00 + -2.0133084921449118e+00 2.2062201107766746e+00 -2.6972771930514572e+00 + id 11620 + loc 4.3550559878349304e-01 2.0207504928112030e-01 1077 + blend 0.0000000000000000e+00 + interp 3.5069762335929372e-01:2.9914855619055358e-01:8.2463321341177398e-03:2.7187330284002370e-01:8.9116712503464235e-01:2.8086590374772819e-01:2.0188291150331121e+00:3.5069411638306014e-01:2.9505969159485366e+00:3.4605810995639896e-01:3.4361009510261509e+00 + CVs 20 + -2.1469766387697814e-01 2.2657444750017972e-01 4.9955352313374987e-02 + -4.4362411456872103e-01 4.5479631187622971e-01 1.1226707017266091e-01 + -6.9116039544599062e-01 6.7241437809395221e-01 1.7892649585937842e-01 + -9.6108476231880546e-01 8.6936591541662256e-01 2.4167381997561693e-01 + -1.2560870607544230e+00 1.0409901324934663e+00 2.9350543130775902e-01 + -1.5789612811384188e+00 1.1845112398474655e+00 3.2505017987198759e-01 + -1.9289323988112514e+00 1.2955840057150514e+00 3.2459598959150171e-01 + -2.2992365966779262e+00 1.3677012765050112e+00 2.8096642150556805e-01 + -2.6711808278737506e+00 1.3962757695372967e+00 1.9103046869346876e-01 + -3.0139374816527833e+00 1.3873025732758317e+00 6.7484890597064640e-02 + -3.3016905360308177e+00 1.3631392655234522e+00 -6.6864691052967773e-02 + -3.5275540316840504e+00 1.3536287730453589e+00 -1.9721174487464085e-01 + -3.6957484161742182e+00 1.3833357424408608e+00 -3.2545104950490966e-01 + -3.8089323992512054e+00 1.4659027550732597e+00 -4.6906036974682763e-01 + -3.8534911068488245e+00 1.6135019756803648e+00 -6.6291093728605954e-01 + -3.8194108653829804e+00 1.7962699652008927e+00 -9.5535134920080400e-01 + -3.7117532263153614e+00 1.9052724211250396e+00 -1.3382243252233190e+00 + -3.5533056989037934e+00 1.8553943036543115e+00 -1.7381070404586332e+00 + -3.8175036601552490e+00 1.7783030098810195e+00 -1.6899233754656942e+00 + id 11621 + loc 1.7085453495383263e-02 4.4143732637166977e-02 1075 + blend 0.0000000000000000e+00 + interp 4.2306311323217705e-01:3.6562483975619692e-01:3.0657614686896206e-02:1.5574611911613681e-01:8.9791964395615720e-01:4.1434782197238412e-01:1.4505183891213058e+00:3.3397114229119285e-01:2.1135107082633722e+00:4.2305888260104474e-01:2.9971093606421717e+00:3.0873528234434333e-01:3.3949174823957171e+00 + CVs 20 + -1.5802275816329650e-01 1.9019954006021131e-01 9.2809558408684364e-02 + -3.4512461894874602e-01 4.0100470162211210e-01 1.9649058978768583e-01 + -5.3145772354460408e-01 6.3463501455656779e-01 3.1372429911083655e-01 + -6.9824183358067993e-01 8.8572695425965975e-01 4.3905529567847157e-01 + -8.5866368174331364e-01 1.1545178304951651e+00 5.5934285033790598e-01 + -1.0302416822067717e+00 1.4417089512945092e+00 6.6082318010559815e-01 + -1.2340497136734292e+00 1.7520893858624249e+00 7.3248408527890252e-01 + -1.5052272757080913e+00 2.0930507824944948e+00 7.4529539890746510e-01 + -1.8579691934609994e+00 2.4233768480074556e+00 6.2269341696461822e-01 + -2.2021019460142162e+00 2.6351778155799699e+00 3.3413136820362854e-01 + -2.4414298798615626e+00 2.7114481137566138e+00 -3.8504470942757552e-02 + -2.5665820722385790e+00 2.7170194443016316e+00 -4.3418386404126319e-01 + -2.6111259361257941e+00 2.6680377100705259e+00 -8.3871038522627439e-01 + -2.6257978928526646e+00 2.4977338145075008e+00 -1.1915024082256926e+00 + -2.6418006185900151e+00 2.2045556106475970e+00 -1.3933058222814569e+00 + -2.6481503928054142e+00 1.8627436860352025e+00 -1.4381959858125239e+00 + -2.6181576550552563e+00 1.5107654844068061e+00 -1.3697378994014320e+00 + -2.5310252755161051e+00 1.1797524622341398e+00 -1.2865232605863353e+00 + -2.3846863036318364e+00 1.2371716039149534e+00 -1.5080765170369324e+00 + id 11622 + loc 3.7316390872001648e-01 4.5017051696777344e-01 1054 + blend 0.0000000000000000e+00 + interp 5.0345980757528452e-01:4.1145888713269951e-01:2.9547794522989768e-01:4.3533736461991024e-01:9.9902532173136527e-01:3.8411227572307599e-01:1.4127592033299063e+00:5.0345477297720875e-01:1.9499435781878742e+00:3.1516023297402967e-01:2.6418926824166280e+00:2.9131819436323964e-01:3.1358649618846410e+00:3.9392414174441254e-01:3.6990483162390659e+00 + CVs 20 + -1.2011352966826960e-01 3.8228804818852774e-01 -1.6989807900050841e-01 + -2.0063473092013168e-01 7.8108003164641959e-01 -3.2996927488392214e-01 + -2.1879324340242801e-01 1.2177885079654129e+00 -4.5761629062765036e-01 + -1.6601499259389407e-01 1.6963552013570191e+00 -5.8706390393299335e-01 + -6.5411058390724919e-02 2.1717654831646058e+00 -8.1834546647637607e-01 + 3.4068720004704289e-02 2.5524853292581420e+00 -1.2246467905784439e+00 + 8.5885023835919450e-02 2.7380833546506613e+00 -1.7880289559141227e+00 + 7.8264907638841308e-02 2.6590464703052787e+00 -2.4158144290194876e+00 + 5.7315537452041099e-02 2.3194208283757423e+00 -2.9944297717783361e+00 + 1.0193644980688465e-01 1.8162822159336138e+00 -3.4518203352766603e+00 + 2.7360693049166429e-01 1.3110314963397780e+00 -3.8130562996607802e+00 + 5.1418043379920197e-01 9.7671289229702674e-01 -4.1579938120705711e+00 + 5.8975036598991937e-01 9.3179301152725724e-01 -4.5254497274640499e+00 + 3.7507758731248375e-01 1.0966864978507207e+00 -4.7975184663531190e+00 + 7.3806484631795843e-02 1.2293160328600399e+00 -5.0497769657533897e+00 + -2.3202579940542067e-01 1.2337966660749040e+00 -5.4818920354006249e+00 + -4.1702867384961473e-01 9.4229259583311098e-01 -6.1615664783234765e+00 + -2.6708425347174236e-01 3.0451226095973749e-01 -6.8406855095970620e+00 + -3.2678473407118036e-01 1.0152568475629686e-01 -7.3000838165266115e+00 + id 11623 + loc 4.3294202536344528e-02 1.9523522257804871e-01 1048 + blend 0.0000000000000000e+00 + interp 5.6955389943048162e-01:5.1024471710000252e-01:6.0416625288185033e-01:5.6954820389148730e-01:1.0710842456733944e+00:5.4929001025019020e-01:1.4506593265345924e+00:3.5925397203232201e-01:2.0008920118024198e+00:4.9685653198302798e-01:2.4189983012180001e+00:5.0206020375667848e-01:2.8938552984166459e+00:3.7030022295530607e-01:3.1216158107581191e+00:5.0581169591128061e-01:3.9988269602626065e+00 + CVs 20 + -2.4615819992558402e-01 4.2428716680724021e-01 -8.6553735167878967e-02 + -4.7869075329390487e-01 8.4862737918518294e-01 -2.0745953100360603e-01 + -6.9209595543337232e-01 1.2691329880181605e+00 -3.7527605563333594e-01 + -8.8331992945075910e-01 1.6608194034145951e+00 -6.0705855801244124e-01 + -1.0547665027356516e+00 1.9763976413123623e+00 -9.1373411325039033e-01 + -1.2224917289653499e+00 2.1756531013386762e+00 -1.2759954030104579e+00 + -1.4083831761462200e+00 2.2468968337070012e+00 -1.6459747651368026e+00 + -1.6256290059509069e+00 2.2082647985076291e+00 -1.9683813256472336e+00 + -1.8710180249371837e+00 2.0906138734345951e+00 -2.1920676074259147e+00 + -2.1000115968504094e+00 1.9056724491355803e+00 -2.2513147816298131e+00 + -2.2088416324953815e+00 1.6881860200137857e+00 -2.1149949768298524e+00 + -2.1932691619312257e+00 1.5162268702703554e+00 -1.9018423309542460e+00 + -2.1512635082751004e+00 1.3817679713852877e+00 -1.6910300532812039e+00 + -2.1004821964511655e+00 1.2682624142093442e+00 -1.4780546831623287e+00 + -2.0458009229497129e+00 1.1489604585240110e+00 -1.2678054903873270e+00 + -1.9978234192698925e+00 9.7663287096074458e-01 -1.0501855636084394e+00 + -1.9614693260882079e+00 7.3932648515910215e-01 -8.2745264501818827e-01 + -1.9829482678769792e+00 4.1112846369359324e-01 -6.0459307080474378e-01 + -1.9672718709289629e+00 2.6442614444796370e-01 -4.8523762966543404e-01 + id 11624 + loc 6.7757374048233032e-01 8.9868181943893433e-01 1070 + blend 0.0000000000000000e+00 + interp 3.5621034066957297e-01:2.9244384941875967e-01:4.6405181739999635e-02:3.4937434294254149e-01:1.0809866553957175e+00:3.2539160129037442e-01:2.0000236285459940e+00:3.5620677856616628e-01:2.6397364955745379e+00:3.2119964589892303e-01:3.0982676319845543e+00 + CVs 20 + -2.4330366226092509e-01 3.6227197118116683e-01 1.3259749738478763e-01 + -4.2539513511573351e-01 6.8797760005979713e-01 2.8416563797668642e-01 + -5.5097396398233311e-01 9.9878317140792849e-01 4.7857773961636840e-01 + -6.8102278201040722e-01 1.3245310066204283e+00 6.8134720506200563e-01 + -8.9058416050874201e-01 1.6717022695687933e+00 8.1262242138424612e-01 + -1.1988743221289317e+00 1.9991981723875236e+00 8.1041299250401366e-01 + -1.5664351825036127e+00 2.2554779392247082e+00 6.5329600967699086e-01 + -1.9176946327494717e+00 2.4058619012772695e+00 3.3015353072629128e-01 + -2.1492608943462126e+00 2.4338515983840523e+00 -1.4034521869654126e-01 + -2.2019144228669734e+00 2.3577094249685846e+00 -6.6522749751600219e-01 + -2.0963418950467778e+00 2.1988627087805637e+00 -1.1797648952040354e+00 + -1.8358791045015961e+00 1.9362658028982871e+00 -1.6579296698618937e+00 + -1.4665083897706959e+00 1.5860061580687788e+00 -2.0240853837964270e+00 + -1.1702657515186436e+00 1.2863830533657530e+00 -2.2635586570378461e+00 + -1.0904551931530639e+00 1.1850668634888128e+00 -2.4507809120050488e+00 + -1.2369634755023671e+00 1.3663335379075949e+00 -2.5267495932199604e+00 + -1.5414680292255436e+00 1.8323082094004099e+00 -2.1726636010225913e+00 + -1.7076824550761611e+00 2.1063159784501329e+00 -1.3669080899435828e+00 + -1.7997678156048924e+00 2.2460882303095460e+00 -1.6065695279882011e+00 + id 11625 + loc 7.7217513322830200e-01 8.7406285107135773e-02 1085 + blend 0.0000000000000000e+00 + interp 4.9874974968232466e-01:3.2635777882864964e-01:1.5367633683138759e-04:2.8960819964552553e-01:7.1581306209368678e-01:4.5604797453010243e-01:1.0784704973998247e+00:4.9874476218482788e-01:1.6514195487215964e+00:3.3325862122129635e-01:2.2554589802063982e+00:3.3348765409587916e-01:3.2157653114417668e+00 + CVs 20 + 2.5376889594398194e-01 3.4139770449734946e-01 -1.0168811149511320e-01 + 4.7222056799009943e-01 6.7128613010573257e-01 -1.7891051945990474e-01 + 7.0387372401897186e-01 9.9982024583355689e-01 -2.4228899118546599e-01 + 9.8065758254514035e-01 1.3203663754109434e+00 -2.8286973434940937e-01 + 1.3170023816547345e+00 1.6163751189919815e+00 -2.7261675089911008e-01 + 1.7128199232036743e+00 1.8637889096060367e+00 -1.8475288379011634e-01 + 2.1488414928203960e+00 2.0373422609661107e+00 -2.3383764783855288e-03 + 2.5919677082311874e+00 2.1186609411419033e+00 2.7708646556495153e-01 + 3.0086736141879427e+00 2.1001156849832565e+00 6.4069702068223511e-01 + 3.3820576689491086e+00 1.9811112328446918e+00 1.0626497388569129e+00 + 3.7167190481966661e+00 1.7573039496742813e+00 1.5076410953767945e+00 + 4.0260253468632934e+00 1.4175445411337295e+00 1.9330671809968796e+00 + 4.3190621892350913e+00 9.5624555783081833e-01 2.2925182084477687e+00 + 4.6070068153313022e+00 3.8193850113324612e-01 2.5407004396600561e+00 + 4.9201192058492316e+00 -2.8210457850965898e-01 2.6174216563459680e+00 + 5.2915566341508500e+00 -9.5499207080495041e-01 2.4625255772352177e+00 + 5.7540190679007504e+00 -1.4948412609646424e+00 2.1007107456140366e+00 + 6.2980038160598051e+00 -1.8117224945532318e+00 1.6315959011177643e+00 + 6.6062635353063817e+00 -2.1331610620404526e+00 1.3890244730468120e+00 + id 11626 + loc 6.6187715530395508e-01 1.9867996871471405e-01 410 + blend 0.0000000000000000e+00 + interp 4.3989619172204258e-01:4.2537196946071704e-01:2.8254377316576407e-01:3.7154647363767385e-01:1.0072954267677370e+00:3.1126502796150191e-01:1.9439333559608281e+00:4.3989179276012541e-01:2.2139608277700349e+00:3.5395802157777145e-01:2.9660573657402756e+00:3.1017934731252200e-01:3.9723609104107771e+00 + CVs 20 + -3.5274810543203772e-01 2.5859805121021184e-01 1.4952569926129966e-01 + -6.7874945520317398e-01 5.1329076298679088e-01 3.3006256630393271e-01 + -1.0145845145937644e+00 7.8993522733307764e-01 5.2361564185678933e-01 + -1.3604873980565704e+00 1.0709836307396046e+00 7.3204530572275905e-01 + -1.6955879205067332e+00 1.3097802803093901e+00 9.7292154412096199e-01 + -1.9978415266913183e+00 1.4709024565691273e+00 1.2652257501008699e+00 + -2.2671251254672145e+00 1.5523108916473372e+00 1.6194936462330722e+00 + -2.5365578542956890e+00 1.5506099757089107e+00 2.0339570041258059e+00 + -2.8409453261300768e+00 1.4344078769959485e+00 2.4823338031320952e+00 + -3.1866247415098741e+00 1.1644989379999175e+00 2.9078661692949166e+00 + -3.5441158171207494e+00 7.5990873725798447e-01 3.2543322331055675e+00 + -3.8851608354607485e+00 3.2768727814243781e-01 3.5362281609320552e+00 + -4.2128132825774527e+00 -4.2182952683174735e-02 3.8119477540485427e+00 + -4.5388822673590212e+00 -3.2126774515631773e-01 4.1078179852573689e+00 + -4.8857409972793704e+00 -5.3286367861367401e-01 4.4210018155631392e+00 + -5.2963072348082356e+00 -7.4482118251280238e-01 4.7471991390744419e+00 + -5.7832192681617336e+00 -9.9463366033355882e-01 5.0642689472599693e+00 + -6.2949776742662289e+00 -1.2775375835370875e+00 5.3449348965721812e+00 + -6.7549780442821241e+00 -1.6062488734710203e+00 5.6290064039790826e+00 + id 11627 + loc 9.0043884515762329e-01 7.0867860317230225e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0579114474232625e-01:3.8742894723670307e-01:4.8028943426285198e-01:3.1424157686934140e-01:1.4585730109628261e+00:3.8269909951956521e-01:2.0337644597984776e+00:2.5675088632012150e-01:2.6369470236030441e+00:4.0578708683087883e-01:3.0492242320493639e+00:2.9978294330529698e-01:3.7967820449494183e+00 + CVs 20 + 2.7266461896587380e-01 3.5088185901354912e-01 -1.0159133051665015e-01 + 4.7765342140006101e-01 7.1013906971015484e-01 -2.4320477386654188e-01 + 6.4019846530127655e-01 1.0733666213736810e+00 -4.0749561537971124e-01 + 7.6824023118610851e-01 1.4343100109567928e+00 -5.7679773605001494e-01 + 8.5421459172159675e-01 1.7774737778511360e+00 -7.3073186816158309e-01 + 8.8656196866255310e-01 2.0633846421676787e+00 -8.4721271218531347e-01 + 8.6356537218531904e-01 2.2812311459547443e+00 -9.1148884866036717e-01 + 8.1500847755077777e-01 2.4959333423972394e+00 -9.8080147410621876e-01 + 7.8385137964704743e-01 2.7129684399256910e+00 -1.1751969000632803e+00 + 8.0809522448326909e-01 2.8313796295352689e+00 -1.5354663765452194e+00 + 9.1798769978165717e-01 2.7703644864322357e+00 -1.9803853908888813e+00 + 1.1178903080899678e+00 2.5682680414307812e+00 -2.3720250426078291e+00 + 1.3754108664794449e+00 2.3370907231737785e+00 -2.6234947566891749e+00 + 1.6693157581024796e+00 2.1765461545599045e+00 -2.7472361624185266e+00 + 2.0209809987241880e+00 2.1266717749528543e+00 -2.8005249140806470e+00 + 2.4710651553482847e+00 2.0938584683141794e+00 -2.8444729618271345e+00 + 3.0450179809470805e+00 1.8960195027274951e+00 -2.9472551680007038e+00 + 3.6438146006623180e+00 1.4192121391072428e+00 -2.9785571046242456e+00 + 3.5593272872915227e+00 1.3594025512464165e+00 -2.5586892640585917e+00 + id 11628 + loc 9.4953663647174835e-02 2.2207500040531158e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7824594122214636e-01:3.0215454312871576e-01:9.5210040735368451e-01:3.1846435421605057e-01:1.6559642789607292e+00:4.7824115876273415e-01:2.4602666023693192e+00:2.9567674673970712e-01:2.9785915255004736e+00:4.0109956103085137e-01:3.3891997466244108e+00:2.8079357648953185e-01:3.9920511616378054e+00 + CVs 20 + -4.6843633185533931e-02 3.5264159471714496e-01 -3.9147160796927552e-02 + -1.2083418596165391e-01 6.7666781154169020e-01 -9.3466953933234537e-02 + -2.0925285053016524e-01 9.7120534595565311e-01 -1.6634485912081765e-01 + -3.0584187441518995e-01 1.2348413257321460e+00 -2.5738842242415966e-01 + -4.0929273112468351e-01 1.4670151209328923e+00 -3.6434168664332051e-01 + -5.1864656993855696e-01 1.6697697376564462e+00 -4.8549923275574941e-01 + -6.3525906914050323e-01 1.8447018491736966e+00 -6.2209303578932207e-01 + -7.5981918951441885e-01 1.9903289474048667e+00 -7.7817913316715959e-01 + -8.8812132651818332e-01 2.1033657894810149e+00 -9.6126928164193570e-01 + -1.0118425209214079e+00 2.1773622646833033e+00 -1.1834088817731536e+00 + -1.1253536523268808e+00 2.2067888450616175e+00 -1.4524928659824830e+00 + -1.2318958249588001e+00 2.1883072869269444e+00 -1.7717035202865157e+00 + -1.3422799534482903e+00 2.1050303132214392e+00 -2.1509315800241824e+00 + -1.4755718111396268e+00 1.9032921430010916e+00 -2.6021612135147598e+00 + -1.6628934838378764e+00 1.4936231388950967e+00 -3.0879952185145818e+00 + -1.9076102787839968e+00 8.2762074723549017e-01 -3.4460608312380243e+00 + -2.1908075232022184e+00 -2.0072105701551823e-02 -3.5047962678738869e+00 + -2.5326167361146910e+00 -7.9284834073207255e-01 -3.2658725604397674e+00 + -2.7447069139947189e+00 -9.8027044802146857e-01 -3.1726127241152957e+00 + id 11629 + loc 3.4244266152381897e-01 6.0759651660919189e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3463883206072446e-01:2.5450285161960401e-01:8.4200744014480156e-01:4.0747416393335983e-01:1.1098194874089797e+00:4.3114030350429344e-01:1.8909118075250297e+00:4.3463448567240387e-01:2.2272391356661712e+00:4.3366328223081452e-01:2.9580430206658841e+00:4.2256212106462548e-01:3.5313618949539824e+00:2.9257956694758969e-01:3.9865190189554021e+00 + CVs 20 + -2.3307175716271006e-01 4.3328759036122738e-01 3.5164018855300716e-01 + -4.5394223850747811e-01 7.8837483988372603e-01 6.5227229191672542e-01 + -6.6575165600847086e-01 1.1053999075356491e+00 9.5278516463351481e-01 + -8.8577848601108111e-01 1.4068364581608037e+00 1.2650605356807065e+00 + -1.1369369821181425e+00 1.6981235589032806e+00 1.5670238580332316e+00 + -1.4411174910276525e+00 1.9818541061338790e+00 1.8308306598576016e+00 + -1.8150624379195111e+00 2.2543516093607967e+00 2.0199839992292961e+00 + -2.2660027450476834e+00 2.5005260610883280e+00 2.0799493428337525e+00 + -2.7623607016706440e+00 2.6772270738849220e+00 1.9410473559513788e+00 + -3.2042162062282040e+00 2.7263069213040940e+00 1.6016753103330337e+00 + -3.5215994858214819e+00 2.6318576071910389e+00 1.1633002139833266e+00 + -3.7253074293141024e+00 2.4009504480361210e+00 7.3881079791088777e-01 + -3.8548739277338919e+00 2.0552625445245116e+00 4.0650630744888283e-01 + -3.9291650664128119e+00 1.6256718317518053e+00 1.4567102683650757e-01 + -3.9232175424707152e+00 1.1398951338018830e+00 -1.2585217446053742e-01 + -3.8125383764228844e+00 6.9970009427383351e-01 -4.6563553272517183e-01 + -3.6396102424930343e+00 4.5049354565648020e-01 -8.6941797269385501e-01 + -3.4844567366129522e+00 4.3636659033636876e-01 -1.2602851953968255e+00 + -3.3151528112829496e+00 3.5963860908846612e-01 -1.6112850333842395e+00 + id 11630 + loc 9.7960793972015381e-01 5.3314083814620972e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4539122347196414e-01:3.0389487879802546e-01:1.0801337762773033e-02:4.4538676955972945e-01:6.9566970744605605e-01:4.3208418662376141e-01:1.2153348176123877e+00:2.8011259399393951e-01:1.9427432447011173e+00:3.9359427167850874e-01:2.1604591032426175e+00:3.0563332897901041e-01:2.9873531405654181e+00 + CVs 20 + 1.8927198050608490e-01 1.9265694365479191e-01 -1.8671345980445608e-01 + 3.4108188485384078e-01 4.3615970452134334e-01 -3.7060289107782540e-01 + 4.8437386612429739e-01 7.0735005568029941e-01 -5.4763733137300152e-01 + 6.4055806869575282e-01 9.8578921211708026e-01 -7.2233254339007580e-01 + 8.2843361578646146e-01 1.2450146357249126e+00 -9.0737703162923056e-01 + 1.0556528892748427e+00 1.4470502328938593e+00 -1.1057648245455511e+00 + 1.3077645440870496e+00 1.5567776911787536e+00 -1.2996563311044007e+00 + 1.5578379088357766e+00 1.5633859149309468e+00 -1.4550810022351621e+00 + 1.7918859914393328e+00 1.4886456061214859e+00 -1.5508716625416457e+00 + 2.0165455448726597e+00 1.3591698814041187e+00 -1.5879135313474242e+00 + 2.2353655531539989e+00 1.2013886898314117e+00 -1.5765233118817130e+00 + 2.4450718690625353e+00 1.0392753857469399e+00 -1.5315234100224060e+00 + 2.6432789714709477e+00 8.7961636409304655e-01 -1.4547263783470366e+00 + 2.8157595161342241e+00 7.1765118987680254e-01 -1.3267383882246602e+00 + 2.9385481642683211e+00 5.6145734547142290e-01 -1.1667441932900400e+00 + 2.9827537804339270e+00 4.0899578613697796e-01 -1.0357121102103559e+00 + 2.9185338407232875e+00 2.0914610883767826e-01 -9.3630407507806268e-01 + 2.8974457103346221e+00 -5.0419172746107854e-04 -8.3337095155407359e-01 + 3.1001914523121563e+00 9.5388792101242292e-02 -9.2002297574133651e-01 + id 11631 + loc 9.7734558582305908e-01 6.9639521837234497e-01 1054 + blend 0.0000000000000000e+00 + interp 3.6619369404648100e-01:3.6619003210954054e-01:3.2472468084039752e-01:2.7067952878468360e-01:1.0065099655794554e+00:2.0446314437470872e-01:1.9424460532858523e+00:1.0113799330841389e-01:2.3694982543927892e+00:2.2408772120476719e-01:3.5007793642876122e+00 + CVs 20 + 2.1843724165795356e-01 4.2267814103718176e-01 -2.8708266029026208e-01 + 4.1730973091103740e-01 8.1525604629945614e-01 -4.8643648785617544e-01 + 5.8666579191952506e-01 1.2314187490880180e+00 -6.1869368669265545e-01 + 7.6664280276392383e-01 1.6883634845294406e+00 -7.0998949682794743e-01 + 1.0511308321848527e+00 2.1370118131455507e+00 -7.9869351721910642e-01 + 1.4974473296363662e+00 2.4788485360995294e+00 -9.2509426729146582e-01 + 2.0710752364496061e+00 2.6226139275146578e+00 -1.1028877580845911e+00 + 2.6885960319653268e+00 2.5265577406380375e+00 -1.3072160555587684e+00 + 3.2764660170089908e+00 2.2146664948935850e+00 -1.4780463305427514e+00 + 3.7930156705435727e+00 1.7876732666196662e+00 -1.5459130286124059e+00 + 4.2483214103976161e+00 1.4131488056279302e+00 -1.4881061187478986e+00 + 4.6560860624678417e+00 1.2379847851079289e+00 -1.4050655450886678e+00 + 4.9567107886077206e+00 1.2911444075475924e+00 -1.4912357329625399e+00 + 5.0832849186838409e+00 1.4493712964207555e+00 -1.7514702479887432e+00 + 5.2400188405543666e+00 1.5520467074907780e+00 -2.0505538329404804e+00 + 5.6155217757152345e+00 1.5320967545226873e+00 -2.4095021599744468e+00 + 6.2965100468741539e+00 1.2597351246529638e+00 -2.7510464512480466e+00 + 7.1228447836192554e+00 6.8492115459423775e-01 -2.7660763995009603e+00 + 7.4612420772474843e+00 4.8135349178139264e-01 -2.7658319974581493e+00 + id 11632 + loc 8.2126581668853760e-01 8.0544054508209229e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3764509248379202e-01:2.9981036883257389e-01:1.4292236927654978e-01:3.6220305916882500e-01:9.1480920608212501e-01:2.3620354041518235e-01:1.1732751046696488e+00:2.6452128380687712e-01:1.9866640350627542e+00:3.7342400442128360e-01:2.4856200243634357e+00:3.9138701219301614e-01:2.9599600329630880e+00:3.4396658215208342e-01:3.1474178399792940e+00:4.3764071603286719e-01:3.8733223172486104e+00 + CVs 20 + 1.3981543827207685e-01 8.2944118662273902e-01 -5.0716712413613474e-01 + 2.5906239832180766e-01 1.6446130402649666e+00 -9.2041409695397691e-01 + 3.7868492811998078e-01 2.4357612534938085e+00 -1.2391623225363906e+00 + 5.9833483413218047e-01 3.2230847557970059e+00 -1.4441058078679139e+00 + 1.0022984051525448e+00 3.9779190173660184e+00 -1.3942005900590564e+00 + 1.5265744522390270e+00 4.5804251537340379e+00 -1.0033656256372767e+00 + 2.0665753897422601e+00 4.8859163896922535e+00 -3.1520848684690628e-01 + 2.5397772345031879e+00 4.8131232703746099e+00 5.4059632095894683e-01 + 2.9031976311136765e+00 4.3628263570588341e+00 1.4475177238908721e+00 + 3.0771735970775467e+00 3.5828630073681618e+00 2.3278904914212313e+00 + 2.9229360108343578e+00 2.6077890757131983e+00 3.1034926161950285e+00 + 2.3994548239614439e+00 1.6525794056199086e+00 3.6530285236971598e+00 + 1.6663569327342651e+00 8.6997836024324449e-01 3.9145603791453905e+00 + 9.3601395164474654e-01 2.8657273101103509e-01 3.9517761757488854e+00 + 3.0425645117200673e-01 -1.8523740469851591e-01 3.8967890835017887e+00 + -2.5138199333338973e-01 -8.0273521449073448e-01 3.9499413681065718e+00 + -4.6893862685857285e-01 -1.6537227905926009e+00 4.3610249595321635e+00 + -1.7700868773104544e-01 -2.3652831337156162e+00 5.0392016398116759e+00 + 2.4123123318029305e-01 -2.5844890888403693e+00 5.6275294708053298e+00 + id 11633 + loc 9.9799734354019165e-01 3.0255588889122009e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3139559369774358e-01:3.3154389086801156e-01:1.7126506316401668e-03:3.6016679464949980e-01:7.8958803012458678e-01:1.4776050321498921e-01:1.2761094558036905e+00:4.3520486760854610e-01:2.3450965960004897e+00:3.6873164480910214e-01:2.9884628825147010e+00:5.3139027974180664e-01:3.2726312699975102e+00 + CVs 20 + 1.7685225148005029e-01 3.2945279795966170e-01 -1.3745325121585325e-01 + 3.9644736549533094e-01 6.6656640111672716e-01 -2.7122640256987030e-01 + 6.5805726940057740e-01 9.9788875973451563e-01 -3.9135070941051875e-01 + 9.6092198414568308e-01 1.3032937077205768e+00 -4.9089082233042952e-01 + 1.3012265709231243e+00 1.5606216223067291e+00 -5.6514619326387716e-01 + 1.6675253387624234e+00 1.7467395621283710e+00 -6.0967721908759054e-01 + 2.0382295391885061e+00 1.8351048851292957e+00 -6.1645210470971468e-01 + 2.3842972962168103e+00 1.8076545209212473e+00 -5.7666400480428259e-01 + 2.6835299170802487e+00 1.6666990843770186e+00 -4.8782577931052973e-01 + 2.8990010517332023e+00 1.4280662176692658e+00 -3.4427930064949841e-01 + 2.9895841272809562e+00 1.1353842095758058e+00 -1.3825245979260695e-01 + 2.9633902606210274e+00 8.3132266589233506e-01 1.3057874086598364e-01 + 2.8572954675286963e+00 5.6171707868033682e-01 4.6601562021115139e-01 + 2.7646690284313937e+00 3.8343139865495179e-01 8.8209258704880078e-01 + 2.7897445311369036e+00 3.6950089860841950e-01 1.3615300464299702e+00 + 2.9698356727934270e+00 6.0438518295623245e-01 1.7867217780839411e+00 + 3.2563443976590518e+00 1.0264012262333508e+00 2.0198284572452252e+00 + 3.5437980117116195e+00 1.3803258431859797e+00 2.2038958875565426e+00 + 3.7348210545720022e+00 1.4541535728037709e+00 2.7413390841889962e+00 + id 11634 + loc 8.7367311120033264e-02 5.1874220371246338e-02 1074 + blend 0.0000000000000000e+00 + interp 5.0724854994961477e-01:3.7461697243749731e-01:8.2430967041845382e-02:4.0832918942986651e-01:2.3034640625439617e-01:5.0724347746411524e-01:1.0010946000206948e+00:3.7477592256748016e-01:1.3187858042027496e+00:3.4497022221346085e-01:1.8806375360040248e+00:3.5533935769615566e-01:2.3142967365271878e+00:3.3700412814146491e-01:2.9581989801457462e+00:4.0483953672481215e-01:3.2063890737976353e+00:4.7700474649738966e-01:3.8018587943953621e+00 + CVs 20 + -1.7191361060903071e-01 3.8797088106699507e-01 -9.4784785222343085e-02 + -3.4173878079487258e-01 7.6947634072820459e-01 -1.9758314232243587e-01 + -5.0626929671560728e-01 1.1495098964076351e+00 -2.8308691794546992e-01 + -6.5473081057576743e-01 1.5272749975364512e+00 -3.3360247592926623e-01 + -7.7756340757125597e-01 1.9019783429653452e+00 -3.3986318756404582e-01 + -8.8500322871139414e-01 2.2617060510323101e+00 -3.0626735569327690e-01 + -1.0128016254197716e+00 2.5759865358884695e+00 -2.5574739396009283e-01 + -1.1909123629868696e+00 2.8122192808236921e+00 -2.1286932744904774e-01 + -1.4085412361340759e+00 2.9541473556402340e+00 -1.8414989371662727e-01 + -1.6413074667217764e+00 2.9983168704392789e+00 -1.6827626390746564e-01 + -1.8737574310172429e+00 2.9419771896229490e+00 -1.7780362690208218e-01 + -2.0830382292345466e+00 2.7990835262206182e+00 -2.3723462436071474e-01 + -2.2428117359047621e+00 2.6041028081019473e+00 -3.5271342252160920e-01 + -2.3546937400998718e+00 2.4088858250154832e+00 -4.9732766636043957e-01 + -2.4458938175429910e+00 2.2592855523352497e+00 -6.4075757820732515e-01 + -2.5571252798333575e+00 2.1481521752961905e+00 -7.7873134570161473e-01 + -2.7617477501751408e+00 2.0373120260631179e+00 -9.5715768425903669e-01 + -2.9981780836880234e+00 1.8102428045578183e+00 -1.2034482369949968e+00 + -2.8286506836395020e+00 1.6016497366591094e+00 -1.0028770023610134e+00 + id 11635 + loc 9.9745559692382813e-01 6.0660064220428467e-01 1090 + blend 0.0000000000000000e+00 + interp 5.7026536438836006e-01:4.6948327542910823e-01:4.0309322822050120e-01:5.1249654750976714e-01:9.6327166901977168e-01:5.7025966173471621e-01:1.3959586974819540e+00:3.0099435680838671e-01:2.1145451464428242e+00:5.0063859191231866e-02:2.6124315902150741e+00:2.7502631326399479e-01:3.5430320344543422e+00:4.8937591748843928e-01:3.9986144613506625e+00 + CVs 20 + 1.5881322911099838e-01 4.0996157096192165e-01 9.9272949760371487e-02 + 2.0778318510948657e-01 7.5147978914134705e-01 1.4434546817615224e-01 + 2.1211749486609394e-01 1.0682905004097811e+00 1.5596257208569597e-01 + 2.0463309936281759e-01 1.3610467340686729e+00 1.4877181734483808e-01 + 1.8520653680083154e-01 1.6100704824145629e+00 1.3014671998609317e-01 + 1.6363420204529378e-01 1.7964376653469580e+00 1.1930563061971378e-01 + 1.5606769063370751e-01 1.9291232093874109e+00 1.3954117073221106e-01 + 1.5653380570608333e-01 2.0526053381333149e+00 1.8617161217705169e-01 + 1.2756727896234898e-01 2.1778590541478797e+00 2.1566175392921494e-01 + 6.0866034475010711e-02 2.2565351464865211e+00 2.0307897500761818e-01 + -1.2323096054861260e-02 2.2649709213229450e+00 1.6428166803199462e-01 + -6.3397233659428842e-02 2.2231716821720631e+00 1.2071231132110027e-01 + -7.0935377592057036e-02 2.1681398344341165e+00 8.1584281243842427e-02 + -1.7613898776221437e-02 2.1465292127437485e+00 3.3572244825486042e-02 + 1.0257933996520630e-01 2.2002137942659914e+00 -7.3776015201310274e-02 + 2.6886389297613222e-01 2.2656121681334707e+00 -2.7954295140833529e-01 + 4.6443018663159297e-01 2.2033567511788803e+00 -5.1553515742491740e-01 + 6.4404761110891928e-01 1.9872314253030965e+00 -6.1303734277325717e-01 + 6.1998389819505995e-01 1.9426116596538128e+00 -2.9927092491810925e-01 + id 11636 + loc 2.2475700080394745e-01 9.3404030799865723e-01 1070 + blend 0.0000000000000000e+00 + interp 3.0486623740334490e-01:2.8502654741602745e-01:1.7176279385687221e-02:2.9537760109964972e-01:9.6243911383161407e-01:2.6945474723051310e-01:1.9949315633865563e+00:3.0486318874097090e-01:3.1300467635909071e+00 + CVs 20 + -2.4972452274972784e-01 4.6270177478038466e-01 2.9317821097130037e-01 + -4.4703162015867898e-01 8.4809267070104200e-01 5.1028434605749839e-01 + -5.9603086494690283e-01 1.1991352405530100e+00 7.1884675982821045e-01 + -7.3057023817168232e-01 1.5255656230346135e+00 8.9253837193111563e-01 + -8.7189541482601363e-01 1.8040615525888253e+00 9.7334673582301501e-01 + -1.0151008924712690e+00 2.0194654956819065e+00 9.5569715624497920e-01 + -1.1241317073077319e+00 2.1575902441144543e+00 8.6724526504431898e-01 + -1.1219640655277274e+00 2.2092344562595301e+00 7.8036005720749591e-01 + -9.9780749357138054e-01 2.2255999134002753e+00 8.3092594551433474e-01 + -9.1201132431718657e-01 2.2767499458038776e+00 9.6778238638010050e-01 + -8.6520676877928648e-01 2.3186975354245352e+00 1.0094087711011910e+00 + -7.9033651349909118e-01 2.3199617040482261e+00 9.7542037080436295e-01 + -6.6613616700262746e-01 2.2671743644857223e+00 9.0992529702770353e-01 + -4.6260925242616496e-01 2.1229197924233194e+00 8.3794789448792151e-01 + -1.8145446727963838e-01 1.8673312267078601e+00 7.6272022831412134e-01 + 1.2027061176252790e-01 1.5423356066750815e+00 6.3283158729335998e-01 + 3.7020802339310627e-01 1.2422722924699907e+00 3.9973874697893214e-01 + 5.2283825732960798e-01 1.0757723841766449e+00 6.9748926749916729e-02 + 5.4666369992252639e-01 1.1057575029716795e+00 -1.0225494993268242e-01 + id 11637 + loc 9.0519732236862183e-01 5.5122756958007813e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2202199001339652e-01:2.5330241600939774e-01:2.8361889977861166e-01:2.8780587972222121e-01:1.0855769682872514e+00:4.2201776979349642e-01:1.9864192484742418e+00:2.9649725278891981e-01:2.9307829922146826e+00:3.3022362143100120e-01:3.5417050174762594e+00 + CVs 20 + -2.1954731920072398e-01 2.3705445411579545e-01 1.5322631371717721e-01 + -4.4725308714465628e-01 4.5960455535776523e-01 2.8540690646177791e-01 + -6.8651869410409894e-01 6.7092216152596162e-01 4.0238882640868623e-01 + -9.4140522413326999e-01 8.7244221903396801e-01 5.0270806867765716e-01 + -1.2165738793266208e+00 1.0609264777822069e+00 5.7476895219365520e-01 + -1.5159342943853800e+00 1.2308979224949095e+00 6.0592355807718223e-01 + -1.8395368768865072e+00 1.3723642692879854e+00 5.8282628425713900e-01 + -2.1781174140628741e+00 1.4718064180547019e+00 4.9489866538866945e-01 + -2.5062971029845142e+00 1.5183161488058203e+00 3.4325147647117871e-01 + -2.7942051340005563e+00 1.5119541951209894e+00 1.4557230002646937e-01 + -3.0318714380692624e+00 1.4635216594476514e+00 -7.3783124605267036e-02 + -3.2276334697729427e+00 1.3828180229037101e+00 -2.9618312698298477e-01 + -3.3916598149184352e+00 1.2740182557405044e+00 -5.0838440711106847e-01 + -3.5300689617586860e+00 1.1412580204007461e+00 -6.9919705202321725e-01 + -3.6538649493876321e+00 9.8620023704471416e-01 -8.5455496076822723e-01 + -3.7882126034190255e+00 7.9752727992548555e-01 -9.5226100346076425e-01 + -3.9597556289818456e+00 5.9363401102951607e-01 -9.7689955241923321e-01 + -4.2058445113074372e+00 4.0239622518525631e-01 -9.2178444702609519e-01 + -4.5758750858170281e+00 1.9649768119946320e-01 -7.6140401313684358e-01 + id 11638 + loc 3.9604330062866211e-01 4.1774019598960876e-02 1076 + blend 0.0000000000000000e+00 + interp 4.4459850908633025e-01:2.0865915269737745e-01:3.1667472574101285e-01:3.0374963448756764e-01:1.3081540416051578e+00:3.6922700676051590e-01:2.0145818016439825e+00:4.4459406310123939e-01:2.7527445635664267e+00:3.1888289028831229e-01:3.0453922497214840e+00:3.9515536798930184e-01:3.7428581494218038e+00 + CVs 20 + -3.7308004812330584e-02 4.1808430063079388e-01 -2.2339252727755016e-01 + -1.2780886887221785e-01 8.1260415404421249e-01 -4.6368269877439983e-01 + -2.6809014733760639e-01 1.1860406578415092e+00 -7.1233853664439351e-01 + -4.6892540698503432e-01 1.5333747748567661e+00 -9.5928869375470061e-01 + -7.3137253558671000e-01 1.8351762189488801e+00 -1.1943107881787298e+00 + -1.0343804786302879e+00 2.0684405535473154e+00 -1.4186955786832016e+00 + -1.3545358181537659e+00 2.2239377424612128e+00 -1.6427841196777586e+00 + -1.6786688476038705e+00 2.3029223615947196e+00 -1.8729546081452595e+00 + -1.9950638421964126e+00 2.3023452577935091e+00 -2.1062886266849032e+00 + -2.2811450420291983e+00 2.2098199147422077e+00 -2.3272719445189676e+00 + -2.4997069899600723e+00 2.0144320264591284e+00 -2.4995129480030891e+00 + -2.6294792986602205e+00 1.7307024127760933e+00 -2.5675629720661535e+00 + -2.6891361008888097e+00 1.4113925167758468e+00 -2.4983967133403677e+00 + -2.7136430369870315e+00 1.1006461655318827e+00 -2.3204012626129118e+00 + -2.7176253765951355e+00 8.2167500000316585e-01 -2.0468665941870512e+00 + -2.6993995447066923e+00 7.1740900959822884e-01 -1.6562724719932134e+00 + -2.7030347727446138e+00 1.0853315473290868e+00 -1.3295486115253483e+00 + -2.7790492743932522e+00 1.5692682489334939e+00 -1.3002502089610197e+00 + -2.8194954274340800e+00 1.7643719890077212e+00 -9.0872942727330130e-01 + id 11639 + loc 5.9092384576797485e-01 4.2106144130229950e-02 410 + blend 0.0000000000000000e+00 + interp 4.6093188095191318e-01:4.3989179276012541e-01:2.0174478974390320e-01:2.9062879989832041e-01:9.0039175740713295e-01:4.6092727163310365e-01:1.4750569967130311e+00:2.2787633613647010e-01:2.0349078842170667e+00:4.2090647643192924e-01:2.4240690428904434e+00:4.2413991162240078e-01:3.1626799324662866e+00:3.5539110736760504e-01:3.8233163471156977e+00 + CVs 20 + -2.9748339550826586e-01 2.6702829810925760e-01 1.0893830619658898e-01 + -5.6921002859785108e-01 5.2346116481609106e-01 2.3053240555601678e-01 + -8.3487701003744186e-01 7.8446167113132448e-01 3.5011189015674227e-01 + -1.0946369014338329e+00 1.0433633520014494e+00 4.6529118805713443e-01 + -1.3385746980841366e+00 1.2807177114911192e+00 5.7502589720916486e-01 + -1.5841886567703427e+00 1.4711698460539848e+00 6.7863509263313171e-01 + -1.8423433098706239e+00 1.5937900409589691e+00 8.2298099561972382e-01 + -2.0776434456410930e+00 1.6520928804311141e+00 1.0418370827051480e+00 + -2.2688445772858894e+00 1.6551996654888379e+00 1.3170462869644335e+00 + -2.4292061361293076e+00 1.5974283857995888e+00 1.6162523696833659e+00 + -2.5738804174389887e+00 1.4463739310235546e+00 1.8992396283385751e+00 + -2.7002942142126267e+00 1.1502527849144295e+00 2.1059582623105944e+00 + -2.8061578599079278e+00 6.8995798298854882e-01 2.2257173358325519e+00 + -2.9177234036150321e+00 7.9708423387894412e-02 2.3423660940850821e+00 + -3.0743419916844439e+00 -6.3534703668622938e-01 2.5762272584007619e+00 + -3.3050425781752217e+00 -1.3714175125403638e+00 3.0013334466578923e+00 + -3.6323672947628176e+00 -2.0633342804978452e+00 3.5791032892321395e+00 + -4.0718092059188749e+00 -2.7125336188900078e+00 4.1854457311091640e+00 + -4.5303430424017224e+00 -3.3221451886959463e+00 4.6853519473196963e+00 + id 11640 + loc 7.2356933355331421e-01 8.9485359191894531e-01 1054 + blend 0.0000000000000000e+00 + interp 2.7333231759722260e-01:2.3649555021584481e-01:2.1251465848556828e-01:2.6128364690700967e-01:1.3575616396692292e+00:2.4187922432654743e-01:2.4704636911468345e+00:2.3691564720858430e-01:3.0014043337974630e+00:2.7332958427404663e-01:3.8718059511135889e+00 + CVs 20 + 4.8206868915184387e-01 4.0997881436209527e-01 -2.1437468708473123e-01 + 9.0002062308998632e-01 8.4113483838355274e-01 -3.5722649098471093e-01 + 1.2562471648118201e+00 1.2921416614873549e+00 -4.2879519322117621e-01 + 1.5995457710735996e+00 1.6803077694525652e+00 -4.4427317974541847e-01 + 1.9697660878736436e+00 1.9228957880439344e+00 -4.3255427505531319e-01 + 2.3642039350084545e+00 2.0051225982885383e+00 -4.1310980938800457e-01 + 2.7663445697094025e+00 1.9363737324337995e+00 -3.8284118670561340e-01 + 3.1633812581447693e+00 1.7184419091151197e+00 -3.1636337128028291e-01 + 3.5231478851174822e+00 1.3636598370954327e+00 -1.7288553810164142e-01 + 3.8188771221808775e+00 9.4558244074236564e-01 9.5707769686310673e-02 + 4.0605709904207306e+00 6.0523845248202834e-01 5.0243369079156475e-01 + 4.2961793828852723e+00 4.5516367685931602e-01 9.4566359227611707e-01 + 4.5986558634689372e+00 4.6601948818662797e-01 1.2930436759908492e+00 + 4.9831617075741086e+00 5.5533767229196784e-01 1.5105924992987805e+00 + 5.4287387258522415e+00 6.6201111416210456e-01 1.6628553696590724e+00 + 5.9181811324325100e+00 7.4568205317271152e-01 1.7906740150981260e+00 + 6.3539990553274839e+00 7.6744717844225452e-01 1.9164347347668056e+00 + 6.6260077841810272e+00 7.6348067239472717e-01 2.0270461733908416e+00 + 6.8479362032336599e+00 6.5594688989347083e-01 2.1561629431928537e+00 + id 11641 + loc 1.6374287009239197e-01 3.3213704824447632e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0110357206657204e-01:3.9467767083464800e-01:2.3870686941806618e-01:2.8990592057323150e-01:9.8856368607464407e-01:4.0109956103085137e-01:1.3840861872337218e+00:2.9418815784837726e-01:1.9941643063511227e+00:2.9544940253400498e-01:2.9954597173636044e+00:2.9374784437577861e-01:3.9455542579453207e+00 + CVs 20 + -4.1885003063345375e-02 3.8312958007822440e-01 -1.4759244492672122e-01 + -1.2295385735904221e-01 7.4254609469625454e-01 -3.0024523291638372e-01 + -2.3839914090219722e-01 1.0570563827789332e+00 -4.7306435149797826e-01 + -3.8388550383937670e-01 1.3107343893485937e+00 -6.6902370743678841e-01 + -5.4865193540242840e-01 1.4879394205157999e+00 -8.8199142151933341e-01 + -7.1399879184729631e-01 1.5792882048677903e+00 -1.0998815046768233e+00 + -8.6074334792622209e-01 1.5886091142980443e+00 -1.3065781359691391e+00 + -9.7773656210105819e-01 1.5318148337256892e+00 -1.4888110646976598e+00 + -1.0655378782078020e+00 1.4285980687190101e+00 -1.6415924444770849e+00 + -1.1360170452786147e+00 1.2922761551063502e+00 -1.7722847364724272e+00 + -1.2011806538248719e+00 1.1262651531783709e+00 -1.8898986328905194e+00 + -1.2633224278567128e+00 9.3574792884969837e-01 -1.9894048830925977e+00 + -1.3197439560325688e+00 7.3241369548323243e-01 -2.0587629524412114e+00 + -1.3699494833315748e+00 5.2445283528832498e-01 -2.0915417727307712e+00 + -1.4147314929787675e+00 3.1583111174245637e-01 -2.0867465039133459e+00 + -1.4644201601345657e+00 9.0715126363871468e-02 -2.0346363753438830e+00 + -1.5633946770588756e+00 -2.0059483956496726e-01 -1.8644814656974504e+00 + -1.7555530765110037e+00 -4.9468201941719081e-01 -1.4958058648433354e+00 + -1.8478587526007071e+00 -5.1121176946157754e-01 -1.1978637224795552e+00 + id 11642 + loc 1.5483318269252777e-01 7.8100138902664185e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8134093068649891e-01:3.5543654895932902e-01:4.6715626802572385e-01:3.5033451171826657e-01:1.3996899330862949e+00:2.6207922801677397e-01:2.0416833275448525e+00:3.0944777432983128e-01:2.8968962190252885e+00:4.4223944611179106e-01:3.1923846324942549e+00:4.8133611727719205e-01:3.9065884751699942e+00 + CVs 20 + -2.4258341558449653e-01 2.4665751038507303e-01 4.4429160884317959e-01 + -4.8094672093624141e-01 4.0939211033661904e-01 8.0047156268840103e-01 + -7.1065924037636685e-01 5.4739727735329657e-01 1.1385735127912395e+00 + -9.2428273835723485e-01 6.8912298441507902e-01 1.4835611809432105e+00 + -1.1307262629264265e+00 8.4151641966601831e-01 1.8143821371585589e+00 + -1.3405920296982794e+00 1.0062505224171163e+00 2.1118104748050901e+00 + -1.5631820116831954e+00 1.1797436730379349e+00 2.3665825417548643e+00 + -1.8094700032948858e+00 1.3594985234814190e+00 2.5813296342309213e+00 + -2.0971778635814733e+00 1.5440832917243530e+00 2.7341898729026832e+00 + -2.3907521476053724e+00 1.7021612952575731e+00 2.7515190263485456e+00 + -2.5885240393458742e+00 1.8244974327835402e+00 2.6522498479799057e+00 + -2.6654493244844679e+00 1.9637179235856466e+00 2.5079248070243110e+00 + -2.6638457484024656e+00 2.0670347451270481e+00 2.2944899270303285e+00 + -2.6179632107271855e+00 1.9507517226178184e+00 2.0188582400473174e+00 + -2.5236955332959612e+00 1.6038935065509057e+00 1.7418735925843578e+00 + -2.3582266360661150e+00 1.1823509894012592e+00 1.4563674514448985e+00 + -2.1258283153220914e+00 8.2746050068074706e-01 1.1405273846634940e+00 + -1.8686425384049270e+00 6.3166007021859549e-01 8.0621887790629110e-01 + -1.6488507214772961e+00 6.9666756557960485e-01 4.9369435840163234e-01 + id 11643 + loc 7.0489722490310669e-01 9.4605892896652222e-02 1075 + blend 0.0000000000000000e+00 + interp 4.9172787177697541e-01:4.9172295449825765e-01:2.0525702045528349e-01:4.3030521689627921e-01:7.2103632733702727e-01:2.9667041789083237e-01:1.0642013727088018e+00:3.1521231485793411e-01:2.0687182125187231e+00:3.1743607205352092e-01:2.6596299040023021e+00:2.4455173421758164e-01:3.4013924407391336e+00:4.1279406303784405e-01:3.9732269337020831e+00 + CVs 20 + -2.0384567064626338e-02 2.5295984261507365e-01 1.7658121920427355e-01 + -1.9754772447725000e-02 5.2582015728342901e-01 3.7716003440975421e-01 + -1.1630376369953621e-02 8.0931481473998623e-01 5.7262109577507259e-01 + -2.8538513844013957e-02 1.0751393146221995e+00 7.6258744606630113e-01 + -1.0423368970958435e-01 1.2791935007712216e+00 9.5752328070518078e-01 + -2.3954866795252305e-01 1.3826027155551299e+00 1.1456797203216733e+00 + -4.0816901632989200e-01 1.3733235833142383e+00 1.2991129312384433e+00 + -5.9586812843231463e-01 1.2688091216236708e+00 1.3968109594650586e+00 + -8.0049532859146222e-01 1.0873846841748436e+00 1.4214463600475524e+00 + -1.0033519005528493e+00 8.4635951262050568e-01 1.3615612725060793e+00 + -1.1648902686070712e+00 5.7406701485262779e-01 1.2233109271661138e+00 + -1.2447594782712004e+00 3.0907820214252590e-01 1.0369786004241075e+00 + -1.2571318076123643e+00 6.9879743212229395e-02 8.3396338396769532e-01 + -1.2744854183148449e+00 -1.7488784604373880e-01 5.9532648309948444e-01 + -1.3748456846431956e+00 -4.5843288671703897e-01 2.9034597459954814e-01 + -1.6673233348270533e+00 -7.7371776503885792e-01 -8.9201433101691124e-02 + -2.2880711570171504e+00 -9.8567257204430014e-01 -4.7807945730088491e-01 + -2.9477396395369437e+00 -9.0583945134977562e-01 -6.4990730810173636e-01 + -3.1624916271677406e+00 -7.8670769299409837e-01 -6.4038287057141030e-01 + id 11644 + loc 7.8958028554916382e-01 9.6317869424819946e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4310319225512351e-01:3.5620677856616628e-01:6.4287967464782936e-01:3.0452164598649795e-01:1.1366696092596758e+00:3.5921411711099588e-01:1.7174859564512051e+00:4.4309876122320097e-01:2.0037907051662818e+00:3.7931139998420355e-01:2.9316094345401620e+00:3.3290329453977829e-01:3.2566051891591452e+00:3.1506085929094702e-01:3.9963302662163489e+00 + CVs 20 + -2.2071287651818794e-01 4.2295133734181500e-01 4.2899429645669590e-02 + -3.9214883741653495e-01 8.3282341419492678e-01 1.1151154786325129e-01 + -5.1984085449951312e-01 1.2339767589053738e+00 2.0520118623236205e-01 + -6.6687065422030722e-01 1.6092013345565674e+00 2.4002051526073509e-01 + -8.6749006999779932e-01 1.9059340424319404e+00 1.3718673783459612e-01 + -1.0882343680980735e+00 2.0814094559726728e+00 -9.2025272026479366e-02 + -1.2578107480968352e+00 2.1217747842222980e+00 -3.9776671843413469e-01 + -1.2812176227416399e+00 2.0437718846354294e+00 -7.0968154371414294e-01 + -1.1309056918677116e+00 1.9070895555418084e+00 -9.3959873808406846e-01 + -9.0719864848289822e-01 1.7586165505493758e+00 -1.0791770517327846e+00 + -6.7293242689610855e-01 1.5785098856901574e+00 -1.1770831396839792e+00 + -4.2252261329863294e-01 1.3443635762364405e+00 -1.2006577624535928e+00 + -1.8167044087580941e-01 1.0654950152235119e+00 -1.1264312228595463e+00 + 2.2217855208414003e-02 7.3617678845084988e-01 -1.0761650061825334e+00 + 1.9015128319799315e-01 3.3265356890143349e-01 -1.2102810994673117e+00 + 2.7821281486314747e-01 -5.3465010208869290e-02 -1.6148557595061392e+00 + 2.0876097896537968e-01 -1.6082850849386321e-01 -2.3196024540464562e+00 + -7.7691881011142161e-02 2.3875792520931882e-01 -3.0248800114230239e+00 + -9.0319192679549243e-02 1.5331362937542847e-01 -3.3482518395574985e+00 + id 11645 + loc 9.9444830417633057e-01 2.4822390079498291e-01 1087 + blend 0.0000000000000000e+00 + interp 7.3763085316947230e-01:3.0185866162017022e-01:9.6076316390207206e-01:2.4769340904277895e-01:1.5820867584050013e+00:4.1333397701121738e-01:1.9782494802252730e+00:7.3762347686094065e-01:3.8374163018184477e+00:3.7242214744263363e-01:3.8981287506417592e+00 + CVs 20 + 3.7015895783263342e-01 3.6183848778317218e-01 -5.3728978604799216e-01 + 7.2971413999960921e-01 6.4227219544512093e-01 -8.9001909414053204e-01 + 1.0957302092594985e+00 8.8309068818158631e-01 -1.1592129319248434e+00 + 1.4784656310680835e+00 1.0999530433685800e+00 -1.3700038156090331e+00 + 1.8724371204927466e+00 1.2825919273098947e+00 -1.5098452580684076e+00 + 2.2661458641293319e+00 1.4200196916171413e+00 -1.5705136706644651e+00 + 2.6417743001621088e+00 1.5023519376177723e+00 -1.5484159043316668e+00 + 2.9765589756224111e+00 1.5239999432448683e+00 -1.4482178969164659e+00 + 3.2478792334300626e+00 1.4850509185886387e+00 -1.2891882700716717e+00 + 3.4510527522036227e+00 1.3961074107536087e+00 -1.1049732845192495e+00 + 3.6079243159410899e+00 1.2729419113056082e+00 -9.2056853865652777e-01 + 3.7424025970505808e+00 1.1237603634704372e+00 -7.4221582008209541e-01 + 3.8705942135972591e+00 9.4899710866111664e-01 -5.7090667742474499e-01 + 4.0099308612415587e+00 7.4212494709351129e-01 -4.1133968092477241e-01 + 4.1746564716147407e+00 4.9410604091893917e-01 -2.7187139947317773e-01 + 4.3713625488553589e+00 2.0931243763315360e-01 -1.6112466725394070e-01 + 4.5956625887101579e+00 -8.8896002126709769e-02 -8.9433207192595759e-02 + 4.8316033835550218e+00 -3.7027260951574448e-01 -5.9084608419532114e-02 + 5.0515510137240645e+00 -5.3413029619486874e-01 -6.1123434355743800e-02 + id 11646 + loc 5.6852674484252930e-01 1.7024780809879303e-01 1048 + blend 0.0000000000000000e+00 + interp 3.1383858731963793e-01:2.2508909056305271e-01:8.4544655004295310e-02:2.9635290497483219e-01:9.1374054154624917e-01:3.1383544893376475e-01:1.3448297188410865e+00:2.7119502538580442e-01:2.5332462719319011e+00:2.6600504112132356e-01:3.0293417519377419e+00 + CVs 20 + -1.1952852082042936e-01 3.7221746536900163e-01 3.3815607959900496e-01 + -2.3996101268530740e-01 7.4487881234026243e-01 6.5331024501773838e-01 + -3.9264950292549433e-01 1.1126602392730034e+00 9.1939134259817601e-01 + -6.0063188304604731e-01 1.4573748697536153e+00 1.1242878743317055e+00 + -8.6020424179672239e-01 1.7470462241412175e+00 1.2644806208120953e+00 + -1.1021126104550276e+00 1.9469838282135901e+00 1.3072754574155203e+00 + -1.3259706019475122e+00 2.0788270918086438e+00 1.3516264122755290e+00 + -1.5269171449535563e+00 2.1279308287542795e+00 1.4799484733391290e+00 + -1.7084089814486929e+00 2.0142406069276295e+00 1.7097255909300970e+00 + -1.8592498591362845e+00 1.7120312666608644e+00 1.9897578305757357e+00 + -1.9996993028405237e+00 1.2691843643991514e+00 2.2718425970643601e+00 + -2.1663855594635555e+00 8.2133518947651019e-01 2.5197546693099220e+00 + -2.3297162013671278e+00 5.2331194390405744e-01 2.7136017522328717e+00 + -2.4624745249227034e+00 3.7626760836689488e-01 2.8872041986657146e+00 + -2.6022690683283334e+00 3.2561152930728832e-01 3.1691393250463302e+00 + -2.7511655194338038e+00 3.3677403286961283e-01 3.5973494633606071e+00 + -2.9092940377346199e+00 3.2021069827044557e-01 4.1354192283197904e+00 + -3.0970598836180434e+00 1.6482564095846852e-01 4.6574981223867997e+00 + -3.3301941467017895e+00 -1.6325885027727360e-01 5.0221439653404110e+00 + id 11647 + loc 7.4963021278381348e-01 3.6015486717224121e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0011167764302433e-01:4.3108612991181450e-01:2.5066312748928643e-01:4.1433131232539355e-01:8.9003783672143610e-01:2.9661716096715562e-01:1.8843808084289093e+00:4.4669789151445100e-01:2.0788456524049184e+00:4.0751767060159133e-01:2.9906834010435963e+00:5.0010667652624796e-01:3.3281265936284932e+00:4.4668554288468137e-01:3.9857629364003082e+00 + CVs 20 + 1.7434317325520776e-01 3.3105554973046136e-01 -1.0474137698047577e-01 + 3.3029444615410386e-01 6.1256571808945359e-01 -1.7682956403266220e-01 + 4.8277467540948804e-01 8.6180003574514807e-01 -2.3651958457712999e-01 + 6.3652032958174787e-01 1.0880402250374326e+00 -2.9638324453310649e-01 + 7.9527870027359049e-01 1.3003845948551451e+00 -3.5467033100355494e-01 + 9.6767054956744492e-01 1.5080952648458683e+00 -4.0709149728173671e-01 + 1.1642591525243002e+00 1.7161982881605731e+00 -4.4522775200767190e-01 + 1.3930427366216354e+00 1.9238868147490695e+00 -4.5571149354848584e-01 + 1.6533571353126588e+00 2.1275220092925951e+00 -4.1842605386116671e-01 + 1.9323004596919542e+00 2.3200654944125909e+00 -3.0630852262227959e-01 + 2.2156339578715207e+00 2.4929007653630464e+00 -9.9990079546572352e-02 + 2.5063113097181522e+00 2.6356252126114774e+00 2.0404139927290110e-01 + 2.8201386016751631e+00 2.7254984164429810e+00 5.9930318637019975e-01 + 3.1626844079123986e+00 2.7229314511253575e+00 1.0733012959326353e+00 + 3.5227892127449580e+00 2.5841248822794283e+00 1.6115022338058897e+00 + 3.8701223307084476e+00 2.2881069686579441e+00 2.1357535069711875e+00 + 4.1305131311104137e+00 1.8900433575504558e+00 2.5399160956589255e+00 + 4.2950083850423582e+00 1.4752048089834129e+00 2.8062573611701049e+00 + 4.6929000780534000e+00 1.4567483177684801e+00 2.7018623478675377e+00 + id 11648 + loc 6.6187715530395508e-01 2.1246625483036041e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9358354859124917e-01:2.9629539034564417e-01:6.0913658090982259e-01:3.9357961275576325e-01:1.4134905563793940e+00:3.5532587941917848e-01:1.9828869028510721e+00:2.8363618984478861e-01:2.4236405230446603e+00:3.0032987995866584e-01:3.2453991249748233e+00:3.6595879670901599e-01:3.9967059321148111e+00 + CVs 20 + -8.4558104449695845e-02 3.1094128568701956e-01 1.5226006651171989e-01 + -2.0185643377409768e-01 6.3688535654860834e-01 3.2497845770099792e-01 + -3.5184428138655216e-01 9.6959961820206553e-01 4.8988218998563404e-01 + -5.3033061431372186e-01 1.3018444185734264e+00 6.3992095763934786e-01 + -7.3261764945928642e-01 1.6282721107013967e+00 7.8960006807304706e-01 + -9.5285232968319322e-01 1.9415551573596859e+00 9.6827925474289800e-01 + -1.1800213206864052e+00 2.2290640954384879e+00 1.2037859218510161e+00 + -1.3977119117623837e+00 2.4730444265434781e+00 1.5110082618727729e+00 + -1.5891127824068534e+00 2.6505644196686506e+00 1.8915924232627770e+00 + -1.7430041702662580e+00 2.7345032820785100e+00 2.3314087202301406e+00 + -1.8590282068679533e+00 2.7043601599212939e+00 2.7954812288585407e+00 + -1.9529278204372535e+00 2.5667739461001555e+00 3.2331574514899888e+00 + -2.0505033590192765e+00 2.3571686492857515e+00 3.6059990916664928e+00 + -2.1712172370550493e+00 2.1168677321555784e+00 3.9019964281034460e+00 + -2.3195022115982691e+00 1.8743579039905383e+00 4.1293481771982341e+00 + -2.4871409601933276e+00 1.6322222017549850e+00 4.3093243324022703e+00 + -2.6646989515774666e+00 1.3809860461551751e+00 4.4612075144164818e+00 + -2.8424511914590127e+00 1.1384332303477580e+00 4.5967784123603508e+00 + -2.9995405666385833e+00 9.3953391114954088e-01 4.7393017648040816e+00 + id 11649 + loc 8.9000052213668823e-01 1.6077151894569397e-01 1090 + blend 0.0000000000000000e+00 + interp 4.5359968047763621e-01:3.9836287352137562e-01:9.5960576443156365e-02:4.2224249024485139e-01:9.9514659086137192e-01:3.5518716548497953e-01:1.8347945969357904e+00:4.5359514448083144e-01:2.4291094063259981e+00:2.9116832686196248e-01:2.9763261671878012e+00:3.8655410844511934e-01:3.8054184132430948e+00 + CVs 20 + -4.7104413810814733e-02 4.0655414267259571e-01 -7.6314675673792978e-02 + -3.5624842262299422e-02 7.6511251383689971e-01 -8.3350182712127824e-02 + 4.7910612818950482e-03 1.0937094273225907e+00 -4.2996438315227925e-02 + 5.7453792548740223e-02 1.3912365129268358e+00 3.4159771323805543e-02 + 1.1857611255980649e-01 1.6407115527829501e+00 1.4565343103047523e-01 + 1.7689927868107908e-01 1.8264299945101958e+00 2.8239800539057824e-01 + 2.1580936246319904e-01 1.9424483214119674e+00 4.2867968892815789e-01 + 2.2315248318526149e-01 2.0006534064866397e+00 5.6911151731721887e-01 + 2.0315762985178598e-01 2.0235544683635003e+00 7.0341235101062127e-01 + 1.7761689058886976e-01 2.0193371312504720e+00 8.5672830598683403e-01 + 1.6509900407698985e-01 1.9706448062268098e+00 1.0543817633466397e+00 + 1.7076830920615327e-01 1.8577784539295275e+00 1.2930213368796251e+00 + 1.9915398933845962e-01 1.6644688140931745e+00 1.5543777499786930e+00 + 2.6398922730146845e-01 1.3605655022278487e+00 1.8163826757460675e+00 + 3.8576783287446170e-01 9.0477775602142918e-01 2.0290685937716026e+00 + 5.7614716406582012e-01 2.8958025646100050e-01 2.0898493906271565e+00 + 8.5256701510941735e-01 -4.3271271615462514e-01 1.8855203964482656e+00 + 1.2585919220246395e+00 -1.1295094984942067e+00 1.3562254568348222e+00 + 1.4053238770573848e+00 -1.3895043342011728e+00 1.1873924682630852e+00 + id 11650 + loc 9.9429346621036530e-02 3.8210308551788330e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5215883608640917e-01:2.6106846237994386e-01:1.7279916959237474e-03:4.5215431449804833e-01:4.9864393767799686e-01:3.5997750597807909e-01:1.0701575807081911e+00:4.5053252129686233e-01:1.9075453756632130e+00:2.4655357804323133e-01:2.2951205208541783e+00:2.6976008754198111e-01:3.0412814325106003e+00 + CVs 20 + -2.0880569473708005e-02 3.6798073985541191e-01 -7.9715827344993481e-02 + -8.7839085018036528e-02 6.9321058404412117e-01 -2.1065551979183750e-01 + -1.8106002709995300e-01 9.7971702023376406e-01 -3.5660828198551914e-01 + -2.9174166298670778e-01 1.2242846301482704e+00 -4.9976005286425440e-01 + -4.1612086764405387e-01 1.4183697142840588e+00 -6.3490029623190436e-01 + -5.4284808538982776e-01 1.5551621609576629e+00 -7.5568522220397738e-01 + -6.5467529689016501e-01 1.6338820279734492e+00 -8.5708945674408088e-01 + -7.3161623279074894e-01 1.6638694715737810e+00 -9.3586494019936795e-01 + -7.5577628221751625e-01 1.6672281724249984e+00 -9.9112296430374425e-01 + -7.2707016831513482e-01 1.6730295700980882e+00 -1.0286226365173918e+00 + -6.6752625579041802e-01 1.6973296617117550e+00 -1.0601277534470537e+00 + -6.0450982454113933e-01 1.7273665185318772e+00 -1.0975328402852618e+00 + -5.5187431108580265e-01 1.7211014122187402e+00 -1.1513887693584184e+00 + -5.0675081470226147e-01 1.6227100991769117e+00 -1.2359976283604124e+00 + -4.6812057096586124e-01 1.4072861811557169e+00 -1.3526907201001979e+00 + -4.4868935535636378e-01 1.0874905428432211e+00 -1.4678330478217536e+00 + -4.5700117773986115e-01 6.7547919886402141e-01 -1.5155740295153273e+00 + -4.6662779172660562e-01 2.2582807995909371e-01 -1.3983661285887299e+00 + -3.8675096965027411e-01 -4.0567195086133490e-02 -1.1118663450149731e+00 + id 11651 + loc 6.6215109825134277e-01 4.1597354412078857e-01 1054 + blend 0.0000000000000000e+00 + interp 3.5123911762540017e-01:2.5986416384054806e-01:2.3869472863377095e-01:3.3180786713279292e-01:9.9999991015431333e-01:2.9063099911861995e-01:1.6801119338566148e+00:3.5123560523422392e-01:2.5622960972059001e+00:2.7764497698866186e-01:3.5272624540032478e+00 + CVs 20 + -2.1834192822442258e-01 3.7884350167857117e-01 2.3544230564588753e-01 + -4.4163792905744065e-01 7.6834244575096267e-01 4.0794243888960069e-01 + -6.4522904862195229e-01 1.1792068509099800e+00 5.0539292685990622e-01 + -8.4151948356606221e-01 1.5559765233161960e+00 5.4385216466212516e-01 + -1.0681491506728849e+00 1.8248462803404613e+00 5.6730268202819933e-01 + -1.3321937418351331e+00 1.9495820065458220e+00 6.1015758469096693e-01 + -1.6002078590497970e+00 1.9214059180073697e+00 6.7937611373507978e-01 + -1.8419706225512580e+00 1.7464840156571346e+00 7.5803126085827666e-01 + -2.0429621134554434e+00 1.4397664559594086e+00 8.0569796141148153e-01 + -2.2322963185212252e+00 1.0200598924560935e+00 7.6804051170239884e-01 + -2.4872324149700571e+00 5.2973893266043459e-01 5.8178974975707642e-01 + -2.9119214617697775e+00 6.1558390908645400e-02 2.5633096655917853e-01 + -3.6415148681358676e+00 -2.8170325950902914e-01 -2.3698952306706045e-02 + -4.5446001955742972e+00 -3.9194121965428524e-01 1.5624088502546894e-02 + -5.2415439156444830e+00 -3.8520141330866620e-01 2.5342883521328741e-01 + -5.7006419837116482e+00 -4.4362865847406663e-01 3.8576987108981581e-01 + -5.8348543885249002e+00 -6.1074570100639858e-01 1.7088779727845771e-01 + -5.5181780221715186e+00 -6.5807396742275770e-01 -3.1915792432974549e-01 + -5.8830976562367576e+00 -8.4738525243097773e-01 -4.8540257153419752e-01 + id 11652 + loc 8.2265788316726685e-01 6.2580847740173340e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0523684082229416e-01:2.9712923236188377e-01:1.8107837477626676e-03:3.1554519283304483e-01:7.5074753465015387e-01:3.6833085688913492e-01:1.1742365467705536e+00:3.0120036317977100e-01:2.0000277736230854e+00:4.0523278845388594e-01:2.7592544626132400e+00:3.3518644596568814e-01:3.2076034168308185e+00 + CVs 20 + -6.7653249485649741e-02 3.5657237943860348e-01 -1.4131508190617043e-01 + -7.4964234774984734e-02 7.0460887014739937e-01 -2.7535514685211365e-01 + -4.4761443836048131e-02 1.0512230830694547e+00 -4.1616563425816133e-01 + 1.0646396569310435e-02 1.4006292024281095e+00 -5.8379480974021924e-01 + 8.6797665013511160e-02 1.7415901508665383e+00 -7.9373716069539224e-01 + 1.7652598055259228e-01 2.0558684920955863e+00 -1.0446125599166820e+00 + 2.7862429462014304e-01 2.3293000719103825e+00 -1.3179527627913141e+00 + 3.9353725016405294e-01 2.5596598449328267e+00 -1.5939648994887143e+00 + 5.2262037696684416e-01 2.7591346486291082e+00 -1.8660235211789840e+00 + 6.8686711497036990e-01 2.9450775597637291e+00 -2.1424280959539543e+00 + 9.4411917042419424e-01 3.1234840386222840e+00 -2.4364170989489295e+00 + 1.3744745349127503e+00 3.2659018644751181e+00 -2.7744605287287238e+00 + 1.9493143992270694e+00 3.2510184536902367e+00 -3.1664051248425844e+00 + 2.4626615448181370e+00 2.9975306959192256e+00 -3.5161765593902214e+00 + 2.8414050885986057e+00 2.5531183260044248e+00 -3.7424486141392856e+00 + 3.2121257330201161e+00 1.8109277397176859e+00 -3.8315979080906084e+00 + 3.4136078020011058e+00 5.0123186285749921e-01 -3.7865662762893191e+00 + 2.9880220049678536e+00 -5.8999029259050517e-01 -3.6694009882190084e+00 + 2.6170339013051782e+00 -5.1873847904109049e-01 -3.5348307600202959e+00 + id 11653 + loc 4.7539860010147095e-01 9.4424903392791748e-02 410 + blend 0.0000000000000000e+00 + interp 5.0344426518217400e-01:4.2413991162240078e-01:1.5132278404682253e-01:5.0343923073952224e-01:9.4182161726189051e-01:4.9812126353071062e-01:1.6428269471069625e+00:3.0455045158326549e-01:2.0015359761239231e+00:3.4128069118347432e-01:2.8586301963005991e+00:2.8263876370366331e-01:3.6987444930265299e+00 + CVs 20 + -4.7415514100044076e-02 2.8018816005728636e-01 -3.7649117393333886e-01 + -1.3623026901941582e-01 5.6879455176862148e-01 -7.2538651724978020e-01 + -2.4073197013821909e-01 8.8607737990024993e-01 -1.0747884417532672e+00 + -3.6638217965762221e-01 1.2249669616514776e+00 -1.4285541454778881e+00 + -5.1838043178876347e-01 1.5422672868386134e+00 -1.7797339791716211e+00 + -7.0368411912876216e-01 1.7565362990064075e+00 -2.1459956740712780e+00 + -9.6969811271793815e-01 1.8174269666570564e+00 -2.5056617373609180e+00 + -1.3149292294287713e+00 1.7700085124537550e+00 -2.8282835927189014e+00 + -1.6844817471931828e+00 1.6212052416247220e+00 -3.1368062530504637e+00 + -2.0050231217585353e+00 1.3448521474336090e+00 -3.4380612170881726e+00 + -2.2363490460117226e+00 9.6951843256927450e-01 -3.7132767841623551e+00 + -2.4224909977890179e+00 5.8207156119640735e-01 -3.9624659972593852e+00 + -2.6225422541981187e+00 2.4737062105630248e-01 -4.2083610058423453e+00 + -2.8397478691327147e+00 -1.0784913377991812e-02 -4.4670597486246084e+00 + -3.0453324082508697e+00 -2.0091390190366165e-01 -4.7496278481871954e+00 + -3.2058206278712755e+00 -3.5634509881632281e-01 -5.0671404323720362e+00 + -3.3018671678890770e+00 -5.0683823214004597e-01 -5.4220076524688432e+00 + -3.3259616154523792e+00 -6.5248025862296766e-01 -5.7904092424130980e+00 + -3.3251409136424845e+00 -8.0919186088047734e-01 -6.1986491117334488e+00 + id 11654 + loc 7.1631664037704468e-01 2.8313028812408447e-01 1053 + blend 0.0000000000000000e+00 + interp 3.0882236547949898e-01:3.0881927725584418e-01:2.7178562234492742e-01:2.8309315700407101e-01:1.0011405876625545e+00:2.9558046142873123e-01:2.0194134267510107e+00:2.6658489426622212e-01:3.2047544430170172e+00 + CVs 20 + 2.1158787304541421e-01 3.8998129469090936e-01 -2.0256903497107484e-01 + 4.5417563430374946e-01 7.7011674722250134e-01 -3.6907482797365576e-01 + 7.3111118008903564e-01 1.1466419480128098e+00 -5.1479137263780705e-01 + 1.0536089269078213e+00 1.5092885407186438e+00 -6.4171477277741606e-01 + 1.4346443480763780e+00 1.8324348324489548e+00 -7.4390397415914622e-01 + 1.8780387940258501e+00 2.0811058379590452e+00 -8.1164056354346703e-01 + 2.3671533408598320e+00 2.2182377433900626e+00 -8.2588679464244574e-01 + 2.8586320230853781e+00 2.2211277961606459e+00 -7.5879132542809313e-01 + 3.2947363346939995e+00 2.0879003456566507e+00 -5.9221509026863617e-01 + 3.6065088108808911e+00 1.8279748610214370e+00 -3.2805379560977682e-01 + 3.7292109123917454e+00 1.4806137662496699e+00 5.5102000798604306e-03 + 3.6590711890350498e+00 1.1168507134639214e+00 3.5992376658195147e-01 + 3.4617156629652626e+00 8.4019996163965494e-01 6.9800812560792869e-01 + 3.2862814957737099e+00 7.4977163517056578e-01 1.0025180660189965e+00 + 3.2477759961938832e+00 8.7942131777544408e-01 1.2266821617892874e+00 + 3.3564424983075263e+00 1.2056260646140895e+00 1.2425801852596114e+00 + 3.5336825010760808e+00 1.5490234094925521e+00 9.6061138243588562e-01 + 3.6203824959018434e+00 1.6777526955550897e+00 6.9535059345605266e-01 + 3.5370005374075726e+00 1.7015063745779013e+00 9.6676829570592859e-01 + id 11655 + loc 3.8274374604225159e-01 6.1413817107677460e-02 1084 + blend 0.0000000000000000e+00 + interp 5.3780020082156865e-01:2.9764137678844071e-01:1.4268059500615571e-01:3.3728993604477658e-01:6.9879876355696979e-01:5.3779482281956048e-01:1.0524503511010126e+00:4.4689538145652158e-01:1.8985655460030753e+00:3.2570076528393926e-01:2.1684837503103189e+00:3.8324156859953734e-01:3.0371231317499205e+00:4.3767837777026730e-01:3.6458713615193803e+00 + CVs 20 + 2.5580111391196186e-01 3.2597033663119207e-01 2.2006278954684899e-01 + 4.7584587458218497e-01 5.8293641046405487e-01 4.0041659208925007e-01 + 7.0995678668539475e-01 8.0358361207659601e-01 5.3490417785266531e-01 + 9.6563355595417821e-01 1.0135587177876950e+00 6.4504823580412274e-01 + 1.2032521778667888e+00 1.2244304283183447e+00 7.6991831855112192e-01 + 1.3832233631884581e+00 1.4384125780615487e+00 9.4227091782597472e-01 + 1.4834563535049985e+00 1.6432995626674254e+00 1.1742847530883911e+00 + 1.4800542781523269e+00 1.8239751191618949e+00 1.4773878091196362e+00 + 1.3108151651863584e+00 1.9474260308432210e+00 1.8290755626061230e+00 + 9.8182265875542929e-01 1.9713231894948788e+00 2.0935523927349817e+00 + 6.1433172135293901e-01 1.9183768742141383e+00 2.1997942463280560e+00 + 2.4788886525296960e-01 1.8240077354092059e+00 2.1863278339306733e+00 + -1.0540806348152021e-01 1.6953397183079231e+00 2.0748685948895931e+00 + -3.6737692509416942e-01 1.5463985266293174e+00 1.8979295709169102e+00 + -4.6437597598881009e-01 1.4237060736167635e+00 1.7222554333623517e+00 + -3.9105993214345913e-01 1.3392146429595000e+00 1.5770207608938152e+00 + -1.6215879146639067e-01 1.2164500629873998e+00 1.4438319098954708e+00 + 2.0019478022792103e-01 8.6726078606183410e-01 1.2506033808168913e+00 + 3.2730619750454881e-02 8.5220957862119617e-01 1.2294106295007130e+00 + id 11656 + loc 5.4908597469329834e-01 5.0244277715682983e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5377542566130974e-01:2.6693156437300197e-01:8.8561489820695527e-01:2.5590086132744011e-01:1.3665451969926330e+00:3.1576310825041359e-01:2.3202120594686018e+00:4.5377088790705317e-01:3.0168544196065121e+00:4.1991122870514797e-01:3.4857783976380627e+00:2.5956788750897919e-01:3.9898288505546482e+00 + CVs 20 + 6.2259184008596244e-02 7.4174940394236721e-01 -3.3096771275384196e-01 + 2.1855384662553370e-01 1.5050937659934449e+00 -6.3166422839896919e-01 + 4.6881243628575575e-01 2.2630559724310055e+00 -8.5819661345346065e-01 + 7.9563087932503995e-01 2.9756197051951077e+00 -9.7211730129783813e-01 + 1.1881742459878950e+00 3.6205955963206149e+00 -9.3018549791029681e-01 + 1.6497058364933288e+00 4.1654344119115816e+00 -6.7026446624048375e-01 + 2.1513262387160430e+00 4.4878221875005293e+00 -1.3295127878671043e-01 + 2.5926153198161832e+00 4.4607772835521482e+00 6.4732420895159448e-01 + 2.8618239863413812e+00 4.0571158324716752e+00 1.5750471187035679e+00 + 2.8448463307065532e+00 3.3462993702487394e+00 2.5226090012352369e+00 + 2.4538004558781696e+00 2.5083503853473879e+00 3.3409018196244964e+00 + 1.6417729846576286e+00 1.6893204109605180e+00 3.8912580366384555e+00 + 5.2507255740763092e-01 9.5373039445106134e-01 4.1336038091611789e+00 + -6.6424815762306499e-01 2.2387038934980308e-01 4.2799487894164505e+00 + -1.6139098307781614e+00 -8.2170863110410330e-01 4.7598965947830560e+00 + -1.7004406322467658e+00 -2.0489518803265061e+00 5.8738239802396173e+00 + -1.0427368366018088e+00 -2.4268421982461064e+00 6.9818127055367638e+00 + -5.4844946517825965e-01 -2.2216984894403575e+00 7.4632003225070616e+00 + 2.1125143603977214e-03 -1.9313981884168716e+00 7.6288102395013748e+00 + id 11657 + loc 7.8198510408401489e-01 1.9700953364372253e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0446620885016793e-01:3.0294924091416775e-01:1.3717637506409641e-03:3.0438092549403134e-01:8.0817024894998424e-01:2.9236560389228139e-01:1.2352291963673760e+00:2.8334135147576894e-01:1.9948453292206536e+00:4.0446216418807945e-01:2.3846911732867908e+00:2.8492635079767675e-01:3.0545321072942695e+00 + CVs 20 + 2.5436495284745719e-01 3.2508170351751864e-01 -1.1951100717430549e-01 + 4.7017075686544285e-01 6.1081825194400463e-01 -1.5398503574054717e-01 + 6.5180085849140934e-01 8.7781276956004128e-01 -1.3483931208035149e-01 + 7.9096371546007371e-01 1.1302451027550493e+00 -7.7358538815829325e-02 + 8.8120287107391326e-01 1.3664456109382492e+00 1.6441543133876912e-02 + 9.3488124075041079e-01 1.6125364276526810e+00 1.2502227102549268e-01 + 9.7320110017955463e-01 1.9101619293406564e+00 2.0121184587947016e-01 + 1.0168684183116623e+00 2.2748882256626066e+00 1.9188156546805768e-01 + 1.0961057790928599e+00 2.6903831627430321e+00 6.2598929249534141e-02 + 1.2618211074320755e+00 3.1122258396600162e+00 -2.1625259723839707e-01 + 1.5651384673499156e+00 3.4357170656160925e+00 -6.4756529848270872e-01 + 1.9830668048390665e+00 3.5415506784198549e+00 -1.1407886604919306e+00 + 2.4390436343424637e+00 3.4143806779951276e+00 -1.5904840726326510e+00 + 2.8768617803764451e+00 3.0989248301232193e+00 -1.9427386349447013e+00 + 3.2616809304182941e+00 2.6603778015208133e+00 -2.1637267058861136e+00 + 3.5844294054127772e+00 2.1399126426233313e+00 -2.2459628745799236e+00 + 3.8241862040554526e+00 1.5360979767449805e+00 -2.1803307516058230e+00 + 3.9210986022109360e+00 9.0012727313017837e-01 -1.9464422308711282e+00 + 3.9639754834468599e+00 6.2096506073117697e-01 -1.7520087102064683e+00 + id 11658 + loc 5.7595348358154297e-01 4.7643333673477173e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6033543810319166e-01:4.2228545184480154e-01:8.0331442205308079e-03:4.6033083474881065e-01:3.8755060127718255e-01:3.8458096890881360e-01:1.0709643035139862e+00:3.9073475980514866e-01:1.7937280839843401e+00:3.5034538360287509e-01:2.5666036846581939e+00:3.9775804504001278e-01:2.9999983159593149e+00:3.7254676894355171e-01:3.7009827957531982e+00 + CVs 20 + 1.6821717223961169e-02 3.4615017288218813e-01 2.6054092473581125e-01 + -1.1380398124477165e-02 6.6475181236521164e-01 5.2065482151530784e-01 + -6.8964650401756811e-02 9.5861779759900723e-01 7.8701868274211850e-01 + -1.5408984224091427e-01 1.2262160630655046e+00 1.0710309941424483e+00 + -2.6142129475806952e-01 1.4631702986300361e+00 1.3758568694141324e+00 + -3.7742741951827152e-01 1.6718443206570617e+00 1.6989642333488886e+00 + -4.9373825450604969e-01 1.8558189005394659e+00 2.0360597167614931e+00 + -6.1380159616841445e-01 2.0108216947128312e+00 2.3835541279902919e+00 + -7.4429804707687119e-01 2.1193255181453798e+00 2.7399163698311670e+00 + -8.8463994927745582e-01 2.1505451122707719e+00 3.1021044993484517e+00 + -1.0281775062973189e+00 2.0723491464567596e+00 3.4510100371065962e+00 + -1.1702814649893125e+00 1.8799109934868277e+00 3.7493835047511124e+00 + -1.3159003310528745e+00 1.6051066984081064e+00 3.9692685566352499e+00 + -1.4790227006965959e+00 1.2921789986669605e+00 4.1078802048905274e+00 + -1.6627431641981154e+00 9.6799389569019800e-01 4.1870897001343739e+00 + -1.8454288175402958e+00 6.2503215894034936e-01 4.2461015025313804e+00 + -1.9861004440229606e+00 2.2489414217867087e-01 4.3291515101411315e+00 + -2.0448733641153791e+00 -2.4285189112757732e-01 4.4407407196127773e+00 + -2.1194495379743370e+00 -6.0858875524448930e-01 4.5558711248114454e+00 + id 11659 + loc 5.6600987911224365e-01 9.7329556941986084e-01 1085 + blend 0.0000000000000000e+00 + interp 4.1656452113925513e-01:2.9615615549639523e-01:3.2485037766408464e-01:2.5733707169160230e-01:1.4316553303050621e+00:4.1656035549404374e-01:2.0109224005325652e+00:2.4901241576773958e-01:2.9639921609474316e+00:3.7843865014608596e-01:3.7930621986591246e+00 + CVs 20 + -1.6295393598933644e-02 5.3302919917057534e-01 2.0766374418359992e-01 + -1.1291150878871903e-01 1.0117346907137852e+00 3.2795538341551345e-01 + -2.7077099418602690e-01 1.4571997396623249e+00 4.0305265101039744e-01 + -4.9166894660675015e-01 1.8583663770540266e+00 4.2960655444506080e-01 + -7.6991457719019507e-01 2.1789949207780590e+00 3.8680303404018634e-01 + -1.0789422017080628e+00 2.3785615635045274e+00 2.6188430081484571e-01 + -1.3690837358710881e+00 2.4237627183344248e+00 6.2037958899063272e-02 + -1.5840780189915495e+00 2.3132735351677960e+00 -1.7353025707519065e-01 + -1.7058461091117048e+00 2.0881011220301779e+00 -3.8500254463076078e-01 + -1.7773446200224414e+00 1.8034089646765794e+00 -5.2997302238874566e-01 + -1.8416007096415845e+00 1.4886354244127078e+00 -5.9572339097741223e-01 + -1.9046067678068483e+00 1.1620403022063328e+00 -5.7221944502872824e-01 + -1.9634967785100204e+00 8.5256053880562122e-01 -4.4833522279650478e-01 + -2.0184850749166090e+00 6.0220772151789648e-01 -2.1732745940859574e-01 + -2.0656591264877249e+00 4.6537255071293560e-01 9.2123696272571942e-02 + -2.1247203505530017e+00 4.4715151404847775e-01 4.0171100264719078e-01 + -2.2142661207433858e+00 5.1231824237346368e-01 6.6768879037959827e-01 + -2.3065397699551360e+00 6.1790501117329100e-01 8.6542497589724821e-01 + -2.4223102832129051e+00 6.5566299202567946e-01 1.0492165377544294e+00 + id 11660 + loc 9.8551690578460693e-01 8.2311427593231201e-01 1087 + blend 0.0000000000000000e+00 + interp 9.3135375438309531e-01:3.0725105903910832e-01:1.8830697518653072e-02:7.0057259843731134e-01:9.9585819186275737e-02:9.3134444084555157e-01:2.0970346710853738e+00:4.0258252092602292e-01:2.5223330583943726e+00:1.8446659868124873e-01:2.9435680802849920e+00 + CVs 20 + -1.2948442210156752e-01 4.4915509253483110e-01 4.9532963439530714e-01 + -2.8775693564655286e-01 7.9336052079069685e-01 8.3926795455767311e-01 + -4.6637982322394206e-01 1.0938617627806360e+00 1.1355020359540444e+00 + -6.6648498376215448e-01 1.3710413487605444e+00 1.4141511969692957e+00 + -8.9367432466637475e-01 1.6179389014060634e+00 1.6580810384746303e+00 + -1.1508140666516478e+00 1.8275920800182663e+00 1.8517724613715514e+00 + -1.4382352234333842e+00 1.9915768266605176e+00 1.9803584332045023e+00 + -1.7496871398088303e+00 2.0965659823572960e+00 2.0296424499653609e+00 + -2.0577941906365069e+00 2.1235211307367470e+00 1.9975419928154170e+00 + -2.3173539178974982e+00 2.0704773079387953e+00 1.9194938719685211e+00 + -2.5168843063272082e+00 1.9642430904042134e+00 1.8414824316193086e+00 + -2.6718086306218161e+00 1.8280862436615739e+00 1.7820218186292660e+00 + -2.7909036328490910e+00 1.6788611211541069e+00 1.7463076266531226e+00 + -2.8723772939696177e+00 1.5418426032102275e+00 1.7336839309766421e+00 + -2.9183350962349293e+00 1.4279159948285101e+00 1.7300418409911467e+00 + -2.9356977895445659e+00 1.3123015241663938e+00 1.7262322619327941e+00 + -2.9243136160735070e+00 1.1816000409237764e+00 1.7192159054461875e+00 + -2.9279030737590106e+00 1.0097099046103706e+00 1.7358616289770423e+00 + -3.1075117339240794e+00 7.7870157324026623e-01 1.9171922059482855e+00 + id 11661 + loc 3.4824651479721069e-01 6.8425607681274414e-01 1054 + blend 0.0000000000000000e+00 + interp 3.8900972064369016e-01:3.8900583054648374e-01:2.4774260764394795e-01:2.5488336085763202e-01:1.2832418141295601e+00:3.0152059511826751e-01:1.9945764843688609e+00:3.6835554973174839e-01:2.5297208297230593e+00:2.3631870866320256e-01:3.0156067468805086e+00:2.7932804577905773e-01:3.8879210411010625e+00 + CVs 20 + 3.3878070020241902e-01 4.0965417281855648e-01 -3.2019844174603629e-02 + 6.1097301012233496e-01 7.9539742830540827e-01 5.3072290523423771e-03 + 8.0700587047417560e-01 1.1614386395411496e+00 1.1123005278928266e-01 + 9.4966812183355276e-01 1.4968176955986896e+00 2.7642687907639529e-01 + 1.0935371280140478e+00 1.7885384474541912e+00 4.8991441169769856e-01 + 1.2958602427329124e+00 2.0198711025931915e+00 7.3798066760758263e-01 + 1.5727665425413635e+00 2.1617258005563680e+00 9.9089718216312628e-01 + 1.8900531882469145e+00 2.1877921277687626e+00 1.2061891901678132e+00 + 2.1864438044253092e+00 2.1065986361737377e+00 1.3589776961412046e+00 + 2.4052906646338288e+00 1.9401659887761338e+00 1.4389503172268874e+00 + 2.5270345790713549e+00 1.6957461833851910e+00 1.4685157023663464e+00 + 2.5870512354185742e+00 1.3283540450087239e+00 1.5962242144895740e+00 + 2.7269680368342071e+00 8.4467733334799089e-01 1.9922471884271138e+00 + 3.1699022759510393e+00 4.5570225622942517e-01 2.4933880056792632e+00 + 3.7841935596961922e+00 3.3401156946985139e-01 2.7533523707293748e+00 + 4.3381679327427882e+00 4.1191709399199572e-01 2.7238003972561602e+00 + 4.7570281080837820e+00 6.0968315249258165e-01 2.4690791256567408e+00 + 5.1864318224654840e+00 7.3671126125044872e-01 2.1404920456717740e+00 + 5.5847410754154607e+00 4.8124905983505539e-01 2.0310401636011175e+00 + id 11662 + loc 5.9092384576797485e-01 4.5027863234281540e-02 1074 + blend 0.0000000000000000e+00 + interp 4.6596645778408952e-01:3.0398709679298591e-01:1.3815925942322405e-01:3.7329999485963439e-01:8.4900389060461912e-01:2.9012406363407428e-01:1.9940223065993596e+00:3.5930407968975492e-01:2.5912884828122884e+00:4.6596179811951172e-01:3.0935879876033616e+00:3.8882065840709285e-01:3.8800922335063914e+00 + CVs 20 + -1.6895570793061201e-01 2.7548283053152545e-01 2.6569325811591954e-01 + -3.1848397412754742e-01 5.3661419069747041e-01 5.2452511831791293e-01 + -4.7327327523575735e-01 7.7268241581580399e-01 7.8481092451347567e-01 + -6.3764712244431299e-01 9.8113986455402524e-01 1.0439368950858441e+00 + -8.0906190639049913e-01 1.1657448951635985e+00 1.3016933202367351e+00 + -9.8804293339416760e-01 1.3291737443916423e+00 1.5654783121174536e+00 + -1.1782265295445389e+00 1.4728219379735905e+00 1.8450020879294742e+00 + -1.3837877862566466e+00 1.5960624643834773e+00 2.1431322490675240e+00 + -1.6057926639711841e+00 1.6948439468681193e+00 2.4511865723599380e+00 + -1.8406772236055260e+00 1.7636561897471446e+00 2.7536467958880588e+00 + -2.0818570693394340e+00 1.7997406198103914e+00 3.0374825803158259e+00 + -2.3236280044289570e+00 1.8052049468305507e+00 3.2990601286079748e+00 + -2.5634097861954275e+00 1.7843445878968163e+00 3.5455968140606089e+00 + -2.7992940873010332e+00 1.7387173471637751e+00 3.7883345174294818e+00 + -3.0309551098065786e+00 1.6636057758054292e+00 4.0399207880349479e+00 + -3.2648907734716994e+00 1.5363732557485767e+00 4.3213665218474162e+00 + -3.5015249119076484e+00 1.3071594313812067e+00 4.6538294496594439e+00 + -3.6951199444096021e+00 9.6239207931421134e-01 5.0188824512761654e+00 + -3.7571088093303961e+00 8.0899919617474114e-01 5.2137363585245824e+00 + id 11663 + loc 1.5975388884544373e-01 4.4416093826293945e-01 410 + blend 0.0000000000000000e+00 + interp 3.7036243956197390e-01:2.8938929666170926e-01:8.2406691115802788e-03:3.7035873593757829e-01:7.8000888983743510e-01:2.9083784476222951e-01:1.2128430272379405e+00:2.9891460560235500e-01:1.9998773906337315e+00:3.1069153489925855e-01:2.5914469719042290e+00:2.9756520443954165e-01:3.1639735612327446e+00 + CVs 20 + -6.0330771982798015e-02 1.1274382698596962e-01 -3.5901648253162310e-01 + -1.0923219263797393e-01 1.8859003596741947e-01 -6.7283852696222990e-01 + -1.4064321621471332e-01 2.4547894119664748e-01 -9.6444070160513462e-01 + -1.5951121712605421e-01 2.9298880900150526e-01 -1.2484575963893265e+00 + -1.6741750276623141e-01 3.3045262356772620e-01 -1.5205536800112234e+00 + -1.6186620325418105e-01 3.5697839389995212e-01 -1.7740045630051255e+00 + -1.3965449021922299e-01 3.7247920097932308e-01 -2.0033787762230704e+00 + -1.0096909882871863e-01 3.7804629718984895e-01 -2.2082354466205221e+00 + -4.8256579212409889e-02 3.7612607311241097e-01 -2.3929092301834789e+00 + 1.7362359329028965e-02 3.7039681914266986e-01 -2.5636727720245380e+00 + 9.5235668299386234e-02 3.6336532814878164e-01 -2.7281505757278435e+00 + 1.7638360371681261e-01 3.5053796716672991e-01 -2.8995354277591465e+00 + 2.3570076287901937e-01 3.1840671500396645e-01 -3.0914985776688022e+00 + 2.4450260521543093e-01 2.5676618432313814e-01 -3.2965955181287758e+00 + 1.9970310424403986e-01 1.7087430560333039e-01 -3.4941970277835588e+00 + 1.1386371444695265e-01 6.8551251461744567e-02 -3.6756621677486709e+00 + -8.1371682757245267e-03 -4.6284093829288553e-02 -3.8338634330313477e+00 + -1.6289139421471888e-01 -1.6742466431788872e-01 -3.9592682321714845e+00 + -2.9507938730487493e-01 -3.0580470857414443e-01 -4.1490530975706221e+00 + id 11664 + loc 3.6569789052009583e-01 6.6408485174179077e-02 1090 + blend 0.0000000000000000e+00 + interp 4.6634316147389260e-01:3.5811953809219998e-01:1.7946799306649608e-01:3.3910864615305697e-01:8.8335399163692663e-01:4.6633849804227789e-01:1.1634004224488641e+00:3.6824893425932614e-01:1.9144199746415718e+00:3.3503942664030956e-01:2.5876950593259740e+00:4.2433364924448064e-01:3.3913606715412090e+00 + CVs 20 + 2.5656275534687395e-01 4.3747170046503892e-01 7.3082654548897785e-02 + 4.0262975262142014e-01 7.8252662109333315e-01 2.0358914058079755e-01 + 5.0388327978696434e-01 1.0886296438548029e+00 3.6577857280654646e-01 + 5.7794016678329863e-01 1.3576489050418232e+00 5.3965075220217318e-01 + 6.1421864367895718e-01 1.5708278103582689e+00 7.1487454792697269e-01 + 6.1035453972361065e-01 1.7081478761070326e+00 8.6926870366130449e-01 + 5.8031107386054126e-01 1.7576497318469881e+00 9.6917268853878225e-01 + 5.5611554669308871e-01 1.7361389715312483e+00 9.8900444241125973e-01 + 5.5668299691763445e-01 1.6896090118304250e+00 9.4715388472270656e-01 + 5.4669528852733151e-01 1.6388926957571948e+00 9.0464911684397298e-01 + 4.9157633060869016e-01 1.5545064852561659e+00 8.9262047582897464e-01 + 4.0402584213562331e-01 1.4093806817623209e+00 9.0654990029651605e-01 + 3.1400972059412768e-01 1.1905485723163920e+00 9.4136973617552844e-01 + 2.6035783337364177e-01 8.8999489519241159e-01 9.9951445368229230e-01 + 2.9594777879366330e-01 5.1406499537848604e-01 1.0868071795467025e+00 + 4.6363948889948631e-01 7.3457285637282210e-02 1.2329288372853906e+00 + 8.0713960774176863e-01 -3.8855848495364959e-01 1.5030440403294474e+00 + 1.2983831965673323e+00 -7.5363723396035853e-01 1.9095101031596724e+00 + 1.5672423385649665e+00 -1.1030519076819045e+00 2.1677413729740427e+00 + id 11665 + loc 8.3325779438018799e-01 8.4110099077224731e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5846466126961988e-01:3.1795715164726107e-01:4.5717710850176729e-02:4.2036493051788404e-01:9.9718446672343841e-01:4.5846007662300720e-01:1.3765716079615198e+00:3.0438084623197820e-01:1.9683801115676156e+00:2.8653676950656409e-01:2.5527270891800060e+00:3.0750613076744887e-01:3.0568077695968947e+00 + CVs 20 + 1.1500016271873939e-01 3.4212017742615047e-01 -2.6722304007300629e-01 + 2.5765086045768093e-01 6.5996821925380567e-01 -5.2435620699065233e-01 + 4.0312658615892005e-01 9.4735663904064826e-01 -7.9234409944102524e-01 + 5.3397510364846634e-01 1.1943547383619806e+00 -1.0817194978437834e+00 + 6.4053765802578544e-01 1.3897819389398447e+00 -1.3906799714360019e+00 + 7.1995145582363018e-01 1.5270486396491583e+00 -1.7095009694302288e+00 + 7.7674512787579919e-01 1.6093297417830188e+00 -2.0310721842857218e+00 + 8.1809242927733317e-01 1.6461184336207140e+00 -2.3545112504416270e+00 + 8.4978900879580865e-01 1.6486484330282181e+00 -2.6789722807954721e+00 + 8.7701313362768896e-01 1.6287895918406681e+00 -2.9992890095224922e+00 + 9.0304353029063100e-01 1.6011048136743113e+00 -3.2982368700577496e+00 + 9.2150004099126714e-01 1.5991453940276419e+00 -3.5411701983025412e+00 + 9.3855464049243964e-01 1.6703249917695366e+00 -3.7181978155183599e+00 + 9.8878712374464195e-01 1.7558331697821679e+00 -3.8915004374842628e+00 + 1.0532957441070538e+00 1.7302675136926076e+00 -4.0856165879079116e+00 + 1.1492516670934401e+00 1.6478647530407726e+00 -4.2470508935659605e+00 + 1.4606161047759034e+00 1.6473018265069026e+00 -4.3393970432349294e+00 + 1.9793650429705310e+00 1.5134761633561458e+00 -4.3779860028615767e+00 + 1.6477682883989588e+00 1.3923036783253886e+00 -4.4402574583689924e+00 + id 11666 + loc 2.6887810230255127e-01 5.9994304180145264e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7002501697965260e-01:4.5131378203648825e-01:2.1185016353283159e-01:4.7002031672948280e-01:8.4047754734412294e-01:2.7513115170877850e-01:1.2071607190624434e+00:4.5861910688321289e-01:1.8169151810247572e+00:4.4165086939199133e-01:2.1814640954801021e+00:4.0485335082550217e-01:2.9178923539435013e+00:4.5759303537590651e-01:3.2526069301732576e+00:4.5553025412323805e-01:3.9315014522184941e+00 + CVs 20 + 1.2002012081822994e-01 3.3305949222548192e-01 -2.7698248195307806e-02 + 2.6971553774565027e-01 6.7197714777423789e-01 -7.4700934826321563e-02 + 4.3098969267879089e-01 1.0135225245479107e+00 -1.4040978065849874e-01 + 5.9792871163627104e-01 1.3547784433177734e+00 -2.3359455961446035e-01 + 7.7394356022853783e-01 1.6858533396833231e+00 -3.6841370134593260e-01 + 9.6442290059264812e-01 1.9910950796542775e+00 -5.5621852510978442e-01 + 1.1707165253042167e+00 2.2480441406440046e+00 -8.0229979180111066e-01 + 1.3833699457868032e+00 2.4330502343697438e+00 -1.1041605327380486e+00 + 1.5858048414842842e+00 2.5268477006119197e+00 -1.4511550298672022e+00 + 1.7628866620098038e+00 2.5175277608252982e+00 -1.8224280184526276e+00 + 1.9044642042507800e+00 2.4033291920369173e+00 -2.1910754205491645e+00 + 2.0018327184359661e+00 2.1926010357613368e+00 -2.5318125419985651e+00 + 2.0437854173113523e+00 1.9079962967930015e+00 -2.8254580503097060e+00 + 2.0132625660685060e+00 1.5882460777430050e+00 -3.0690495240459286e+00 + 1.8880553722721742e+00 1.2708569334764310e+00 -3.2722398983633267e+00 + 1.6571419735828432e+00 9.8739279054613749e-01 -3.4343050218409021e+00 + 1.3330058152134066e+00 7.6770566919595318e-01 -3.5456960895669734e+00 + 9.5779380680810888e-01 6.0829852024663500e-01 -3.6149402484901185e+00 + 6.2478848524197250e-01 3.8002444568813620e-01 -3.7051305419894547e+00 + id 11667 + loc 3.2640713453292847e-01 6.0759651660919189e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0402273289606566e-01:3.7226370871863995e-01:2.0131883468489598e-01:3.8418560534945650e-01:1.1410590506886749e+00:4.0025362120057117e-01:1.8624714726912261e+00:3.7262452561732601e-01:2.2041795341042820e+00:3.8718867422949127e-01:2.9738341461760198e+00:4.0401869266873675e-01:3.5188891948650070e+00 + CVs 20 + -1.3506429422200922e-01 5.4705255492174887e-01 2.8845151491768162e-01 + -3.1196223273862383e-01 1.0475808788653156e+00 4.6259936000824398e-01 + -5.3366290494495960e-01 1.5256163907055229e+00 5.7575643919983122e-01 + -8.0908439265494425e-01 1.9783245434683627e+00 6.2777069627929938e-01 + -1.1339876182787356e+00 2.3765869802070423e+00 5.9533992413291037e-01 + -1.4887150883659759e+00 2.6886193530051665e+00 4.6250007517273928e-01 + -1.8371664478490710e+00 2.8861500417220478e+00 2.2616334466819255e-01 + -2.1347816278604199e+00 2.9557660647233868e+00 -9.5513879027581128e-02 + -2.3561259831407328e+00 2.9046856083457602e+00 -4.6349772331043826e-01 + -2.5238162692582469e+00 2.7526260809764587e+00 -8.3433427750903333e-01 + -2.6824065518083415e+00 2.5097630565264910e+00 -1.1816549134667089e+00 + -2.8495419232082884e+00 2.1737235786988514e+00 -1.4868239316869512e+00 + -3.0275612467838084e+00 1.7417555262679030e+00 -1.7248072358681945e+00 + -3.2291524604988724e+00 1.2113345845651162e+00 -1.8606101765269716e+00 + -3.4676846477471615e+00 5.9344148856002987e-01 -1.8436566375535015e+00 + -3.7316224501688020e+00 -1.1735501074054966e-02 -1.6498942162690347e+00 + -4.0201814362519457e+00 -4.8953044961394376e-01 -1.3251808109615606e+00 + -4.3313085749420424e+00 -7.9887876145972891e-01 -9.3326111201271666e-01 + -4.4639578425312871e+00 -8.9876573187168007e-01 -7.0322212368580184e-01 + id 11668 + loc 9.9721574783325195e-01 4.3528237938880920e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2053948778897706e-01:3.2053628239409920e-01:9.8692169375172978e-01:2.1562822636684686e-01:2.0489866602547053e+00:2.5578540083305212e-01:3.0628611074335117e+00:2.5465716887351875e-01:3.9320634983634131e+00 + CVs 20 + -7.0212441376329912e-02 5.6719141775299275e-01 4.9721903152658564e-01 + -1.9933818916669649e-01 1.1244217604822511e+00 9.6522738837170219e-01 + -4.3845495432990794e-01 1.6854030373988160e+00 1.3793544941853444e+00 + -8.3530161534959801e-01 2.2270074774825837e+00 1.7000352602111719e+00 + -1.4015824276581927e+00 2.6762463815592965e+00 1.8960691424636682e+00 + -2.0901295990296953e+00 2.9489432865366747e+00 1.9839938700705166e+00 + -2.8117175679251094e+00 2.9844894454188280e+00 2.0156020695896451e+00 + -3.4810921433998296e+00 2.7847184383063097e+00 2.0468568422835411e+00 + -4.0783411999892856e+00 2.3951908637161803e+00 2.0795478696923104e+00 + -4.6117050984233039e+00 1.8362553598092093e+00 2.0487854743637430e+00 + -5.0390155832049475e+00 1.1277522002106288e+00 1.8655826432782314e+00 + -5.2826069734534382e+00 3.4368706808172589e-01 1.4584408026508204e+00 + -5.2694062273806228e+00 -3.8497921057341922e-01 7.9855933152532743e-01 + -4.9884649640713379e+00 -8.6614250894289013e-01 -4.3595745575102263e-02 + -4.5583639593222571e+00 -9.6597560905579494e-01 -8.8806205707415353e-01 + -4.1155195770971851e+00 -7.2596352906005124e-01 -1.6018365811070898e+00 + -3.6662390086780658e+00 -2.0646874166234563e-01 -2.1884333173039385e+00 + -3.2084874818370248e+00 6.7221322208989553e-01 -2.5291958157036007e+00 + -3.1849334226885375e+00 1.2373356188161275e+00 -2.4423801409814896e+00 + id 11669 + loc 8.9194607734680176e-01 2.4190187454223633e-01 1070 + blend 0.0000000000000000e+00 + interp 5.1277793465871413e-01:2.7664121808204695e-01:8.2904667404787857e-01:5.1277280687936755e-01:1.1293556390408239e+00:2.7564566074774077e-01:2.0036963716300762e+00:3.0438092549403134e-01:2.8048247599968636e+00:3.1234688954951290e-01:3.2905758119133934e+00:2.7657483487227758e-01:3.9845955324905753e+00 + CVs 20 + 2.3302370168032582e-01 3.0492351442921645e-01 -5.9052521374055700e-02 + 4.4311790004584528e-01 5.4329335205968854e-01 -3.6835130023992690e-02 + 6.3031327159572403e-01 7.3808560952952962e-01 3.0920363968533426e-02 + 7.8928428678878770e-01 8.9523090021124185e-01 1.3193623891672512e-01 + 9.3285590326109746e-01 1.0426774592431669e+00 2.9318546714758331e-01 + 1.0812353264647392e+00 1.2554425125752240e+00 5.2940586514807697e-01 + 1.2370941697222786e+00 1.6015256602862560e+00 7.6122585942623477e-01 + 1.3963940769273955e+00 2.0589134890257443e+00 8.8746224106689686e-01 + 1.5777082924607460e+00 2.5765509322626481e+00 8.7101984049299763e-01 + 1.8314707739173657e+00 3.0988727214449225e+00 6.8654206245521676e-01 + 2.2166574376463259e+00 3.5029774348431468e+00 3.3023966331353694e-01 + 2.7182076171336336e+00 3.6608922035415885e+00 -1.1952335984893603e-01 + 3.2590920783019834e+00 3.5542412182249263e+00 -5.6659776916971705e-01 + 3.7654131575271839e+00 3.2456742466767095e+00 -9.3292107520678136e-01 + 4.2195302672236563e+00 2.7990871072163390e+00 -1.1845403042885159e+00 + 4.6306327442993744e+00 2.1812337987056081e+00 -1.3101170370994901e+00 + 4.9279416771170688e+00 1.3502831037101659e+00 -1.2417623252692049e+00 + 5.0198639799888545e+00 5.2045565328742849e-01 -9.7118177650732096e-01 + 5.1213338936570665e+00 1.4263527776499640e-01 -8.3329958592702780e-01 + id 11670 + loc 2.1825484931468964e-01 2.3095023632049561e-01 1053 + blend 0.0000000000000000e+00 + interp 4.2010166300000568e-01:2.9290618387231271e-01:2.0767972281442892e-02:2.1506286038831263e-01:1.0076019571985944e+00:4.2009746198337572e-01:1.1084871512308647e+00:3.7675456910188571e-01:2.9856613618735786e+00:3.4761037344682977e-01:3.5564265777191317e+00 + CVs 20 + 3.1727749090054325e-01 4.0350653207166853e-01 1.8729917925593498e-01 + 5.7168533167597313e-01 7.6597193266783270e-01 3.8447493333074750e-01 + 8.1871659477287884e-01 1.1220227611634424e+00 5.9744947501035617e-01 + 1.0775061049995929e+00 1.4777402208186903e+00 8.3394928323402673e-01 + 1.3423515328800983e+00 1.8219838346308586e+00 1.1135833500468104e+00 + 1.6058284598184924e+00 2.1355595909997218e+00 1.4586085506394886e+00 + 1.8514292420284426e+00 2.3851848310097878e+00 1.8886589053408063e+00 + 2.0482180230939830e+00 2.5313053760067561e+00 2.4057209605454792e+00 + 2.1560513654124400e+00 2.5345406892386260e+00 2.9887451629022159e+00 + 2.1357756587041385e+00 2.3485535663172956e+00 3.5864008852676283e+00 + 1.9565216270841650e+00 1.9373799675209675e+00 4.0922211806717623e+00 + 1.6330281715048169e+00 1.3473604936403234e+00 4.3719804559907285e+00 + 1.2223858764245692e+00 7.2698966431307843e-01 4.3765504383959897e+00 + 7.6082540616941063e-01 2.7241131059587959e-01 4.2145043482013138e+00 + 2.6617331732402549e-01 1.2260721295939248e-01 4.0712942179184122e+00 + -1.6541774901162309e-01 3.4967100044497246e-01 4.0619205041042035e+00 + -3.0257386066722536e-01 9.2381035798308808e-01 4.2264866756897401e+00 + -1.0613824372330088e-01 1.4975455067172148e+00 4.4662544076790951e+00 + -4.5439114573067374e-01 1.7878082663716242e+00 4.4469689265467238e+00 + id 11671 + loc 9.2510499060153961e-02 7.6026558876037598e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5786791849914971e-01:4.2674125564027920e-01:1.1994202153633049e-01:4.1355263572483253e-01:6.9827066762685508e-01:4.2591669279160355e-01:1.4183201059989963e+00:3.3028624293269598e-01:2.0000389372999594e+00:4.1510681203992739e-01:2.5736638103797302e+00:3.1446236430966334e-01:3.2280564166186929e+00:4.5786333981996474e-01:3.9292401957760137e+00 + CVs 20 + 9.2369789723474233e-02 2.7336022715050046e-01 -7.8137064109791710e-02 + 1.9163278106623194e-01 5.5142220024327127e-01 -1.7323999691035166e-01 + 2.9686281351103039e-01 8.2461315109649735e-01 -2.6396150570681076e-01 + 4.0773359593041814e-01 1.0920349670137126e+00 -3.4538053045287564e-01 + 5.2127561663874311e-01 1.3526599178669518e+00 -4.2364348776283856e-01 + 6.3626201212133981e-01 1.6046138775327607e+00 -5.0111528606931566e-01 + 7.5501674532219154e-01 1.8477897054702384e+00 -5.7852194910716392e-01 + 8.8139832381569427e-01 2.0886480655678525e+00 -6.5927694424703509e-01 + 1.0234636254501073e+00 2.3422451337858603e+00 -7.5556340474807759e-01 + 1.1984967676046474e+00 2.6261501423261486e+00 -8.9709283196945067e-01 + 1.4284316584990582e+00 2.9370635134440612e+00 -1.1382903104576156e+00 + 1.7189707954662334e+00 3.2124177187953218e+00 -1.5412840917222004e+00 + 2.0249827083391985e+00 3.3329221126746194e+00 -2.0983863053349028e+00 + 2.2707216408128681e+00 3.2416557716374808e+00 -2.6732270322116736e+00 + 2.4433504287058030e+00 2.9950528088752852e+00 -3.1590687511694093e+00 + 2.5744969448802686e+00 2.6236775381461941e+00 -3.5701795652333495e+00 + 2.6611905389963302e+00 2.1174763774127716e+00 -3.9341529755745608e+00 + 2.6621155828735028e+00 1.5425258893493408e+00 -4.2298117236016477e+00 + 2.6370001655777400e+00 1.1996773787573167e+00 -4.3653368823605776e+00 + id 11672 + loc 9.8719924688339233e-01 9.6561902761459351e-01 1084 + blend 0.0000000000000000e+00 + interp 3.6462206616059656e-01:3.2505763788380521e-01:3.6680261800768887e-01:3.0320733662090454e-01:1.0274575902472578e+00:3.6461841993993499e-01:1.8063834918956387e+00:1.5574611911613681e-01:2.8964723739811369e+00:3.2125618134124556e-01:3.9312766990322738e+00 + CVs 20 + -9.5790282648969050e-02 3.9855287994415500e-01 5.4956981112621039e-03 + -2.1261800370637715e-01 8.1272945941250874e-01 2.1362852870194182e-02 + -3.2941599654965170e-01 1.2373760285315027e+00 4.7317858869222906e-02 + -4.5891796242175925e-01 1.6684355686308840e+00 7.2969202195244831e-02 + -6.2629107610444867e-01 2.0953490544582558e+00 7.5933318929623628e-02 + -8.4757259832641851e-01 2.4942594694224614e+00 2.2303792747269346e-02 + -1.1171550957544343e+00 2.8206806326826785e+00 -1.2983380355624807e-01 + -1.3876762792713788e+00 3.0035263586943306e+00 -4.1881241630563548e-01 + -1.5754437345484726e+00 2.9873202884778602e+00 -8.1478486025978536e-01 + -1.6647978338692910e+00 2.8110784094193431e+00 -1.2282823995236942e+00 + -1.7114852669897316e+00 2.5011439013152228e+00 -1.6256906301460510e+00 + -1.7512635506562642e+00 2.0152139451363351e+00 -1.9559373354877962e+00 + -1.7889509768084400e+00 1.3836462188225462e+00 -2.1119546633436292e+00 + -1.7926539236915124e+00 7.8271138760774173e-01 -2.1304943399002889e+00 + -1.7267427848975532e+00 3.0586373049946480e-01 -2.2095323238046789e+00 + -1.6042081379998421e+00 -3.3820016494124250e-02 -2.4575516404259345e+00 + -1.4860872684774946e+00 -1.9641239771352281e-01 -2.8681266686248374e+00 + -1.4221440144072226e+00 -2.3282647219442953e-01 -3.3242655142234505e+00 + -1.3556937345317153e+00 -5.5422773555631388e-01 -3.6112260218885748e+00 + id 11673 + loc 4.7539860010147095e-01 1.0097698867321014e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6596645778408952e-01:4.6596179811951172e-01:9.7784723998335044e-02:4.0809424618825213e-01:8.3733771088838505e-01:2.9884817234223748e-01:1.4090900572899416e+00:3.6780607502556195e-01:1.9909849616362902e+00:3.8280926487239031e-01:2.9178620275607345e+00:4.6564051723341088e-01:3.1322387822839013e+00:3.8053004451950290e-01:3.6656980832493811e+00 + CVs 20 + -2.5106202471395828e-01 1.5957109395464858e-01 -7.4043434787576620e-02 + -5.1385010399309672e-01 3.3822647973345721e-01 -1.2607790729986290e-01 + -7.9082088489424507e-01 5.2779526648319863e-01 -1.7898175830602886e-01 + -1.0713790946048292e+00 7.2109068817508404e-01 -2.4221170060067465e-01 + -1.3402489911591926e+00 9.1810161830963311e-01 -3.0899804556663202e-01 + -1.5998174325865413e+00 1.1151284657417544e+00 -3.7648732840214189e-01 + -1.8824796216690454e+00 1.3134202782391209e+00 -4.5353660922981698e-01 + -2.2161875792682832e+00 1.5166787707085678e+00 -5.5191765531811110e-01 + -2.5972950471769107e+00 1.7196628855207818e+00 -6.7607975630464834e-01 + -3.0054860481090317e+00 1.9049074488253854e+00 -8.2176929359277462e-01 + -3.4262657475300071e+00 2.0450868031770488e+00 -9.8117904407279388e-01 + -3.8536872304022167e+00 2.1089950812232052e+00 -1.1441500628928640e+00 + -4.2803104017492153e+00 2.0692640780389180e+00 -1.2974526136021609e+00 + -4.6916445939122200e+00 1.9117059035705215e+00 -1.4294127377433881e+00 + -5.0661217141019321e+00 1.6440646836295629e+00 -1.5331810933112267e+00 + -5.3750532393594579e+00 1.3025773519383197e+00 -1.5927479139141132e+00 + -5.5980571126219951e+00 9.4520142113378358e-01 -1.5786888215858046e+00 + -5.7496702035122773e+00 6.0272866904911182e-01 -1.4908864281569756e+00 + -5.9569707485430730e+00 1.9604615670091649e-01 -1.5013161584986239e+00 + id 11674 + loc 8.2881516218185425e-01 1.1884504556655884e-01 1054 + blend 0.0000000000000000e+00 + interp 4.5044459682611349e-01:4.5044009238014526e-01:1.5474486781793195e-02:4.5001173197631622e-01:4.6911567994851089e-01:2.4288529840235049e-01:2.0007586799930919e+00:4.0727974907254705e-01:2.8600572964575535e+00:3.0728686243113895e-01:3.7045735093296877e+00 + CVs 20 + -7.2490904042548154e-02 4.3907522490799444e-01 3.2330110775850412e-01 + -1.7295903614432764e-01 8.7125166587154146e-01 5.6127228555802045e-01 + -2.6754191655881149e-01 1.3146407747032840e+00 7.1441324044693399e-01 + -3.7507169244189342e-01 1.7356648221301265e+00 8.1548243588045510e-01 + -5.3851232378286595e-01 2.0766958759400134e+00 9.1762293632405378e-01 + -7.6590542626625058e-01 2.2996684103784903e+00 1.0556234525202119e+00 + -1.0296342368172280e+00 2.3890750195331067e+00 1.2315406763548631e+00 + -1.3014572242276601e+00 2.3459521275054209e+00 1.4296913727991314e+00 + -1.5653391110405381e+00 2.1835063462343864e+00 1.6219537819961589e+00 + -1.8198672949542805e+00 1.9256073857810312e+00 1.7756516906682904e+00 + -2.0784922286075345e+00 1.6160061656923776e+00 1.8644687391470882e+00 + -2.3503231732995991e+00 1.3281536559203464e+00 1.8860677474073164e+00 + -2.5942162380809028e+00 1.1287602528146381e+00 1.8749975949622453e+00 + -2.7733715088701048e+00 1.0172631163793591e+00 1.8629466202733536e+00 + -2.9336010257720280e+00 9.8032105466956776e-01 1.9236687669155061e+00 + -3.0606134801890681e+00 1.0224956469269100e+00 2.1202107170018336e+00 + -3.1514382124466822e+00 1.1353286929322417e+00 2.5009453133617976e+00 + -3.3359569247540377e+00 1.1985487683187548e+00 3.0734527316064386e+00 + -3.5251367691818709e+00 1.0568456739958469e+00 3.2806616071834482e+00 + id 11675 + loc 4.5273903012275696e-01 9.4220302999019623e-02 1053 + blend 0.0000000000000000e+00 + interp 5.6794111127305125e-01:5.6793543186193851e-01:4.6048591516181780e-01:3.3393452598957851e-01:9.8496763486745964e-01:4.7341170395352683e-01:1.6315461915064000e+00:4.2464663701546179e-01:1.9792273760146133e+00:4.1155902548825923e-01:2.2614164493491478e+00:3.7454664834655826e-01:2.9455353518286977e+00:3.0324625185121651e-01:3.7547742335246714e+00 + CVs 20 + 3.9744618994596836e-01 4.7577818822939855e-01 1.7309810889379640e-01 + 7.3116953710180610e-01 9.2695071970442910e-01 3.6337396842509739e-01 + 1.0366623398446464e+00 1.3499039762511611e+00 5.9102794347284804e-01 + 1.3390264448654685e+00 1.7186359279821479e+00 8.8702307211502951e-01 + 1.6427448355671326e+00 1.9884258865139919e+00 1.2604867179436750e+00 + 1.9370263632644400e+00 2.1281387657652195e+00 1.6952312834622358e+00 + 2.1993275348477805e+00 2.1260582518019771e+00 2.1634418261779618e+00 + 2.4022161500723658e+00 1.9867699232332869e+00 2.6379568293461664e+00 + 2.5208338546325475e+00 1.7238218284108859e+00 3.0802387889443690e+00 + 2.5458136525982629e+00 1.3649937993426973e+00 3.4298552221732090e+00 + 2.4967570291855807e+00 9.6615232025366815e-01 3.6202108390186494e+00 + 2.4242848448736369e+00 6.1623156279874958e-01 3.6213418208519719e+00 + 2.3653466677098933e+00 3.7252274289560006e-01 3.4856210905821441e+00 + 2.2883605628647321e+00 1.6014498634442498e-01 3.2753120624152392e+00 + 2.1211713509952306e+00 -1.1687304345030203e-01 2.9574945357175455e+00 + 1.8028514500238693e+00 -4.0556757294913659e-01 2.5193327498801645e+00 + 1.3343099903747657e+00 -5.6302212122351003e-01 2.0324981652928873e+00 + 8.6232519119737561e-01 -4.8206110131594831e-01 1.6026383291223449e+00 + 6.9326625692109056e-01 -2.2410868038234596e-01 1.3293070196447045e+00 + id 11676 + loc 2.7160179615020752e-01 8.6805289983749390e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5108253742569654e-01:2.7231526056669825e-01:3.0356162252191954e-03:3.7477109028520111e-01:7.5366884278935298e-01:3.2672805721163922e-01:1.0587979844691935e+00:4.5107802660032231e-01:1.7765276392671590e+00:2.6330518816458909e-01:2.1769331493871467e+00:3.8916348582708732e-01:3.1136591458757259e+00 + CVs 20 + 1.7389852260010574e-01 2.8356743605821066e-01 2.4568894970805680e-02 + 3.6328630168207721e-01 5.7035774721966870e-01 5.2709942073599539e-02 + 5.6901601029493398e-01 8.6401426915332247e-01 8.6368386348718851e-02 + 7.9810873473975064e-01 1.1701393847123838e+00 1.1788091162109052e-01 + 1.0607213294983662e+00 1.4894563977201254e+00 1.2800084990632293e-01 + 1.3663706888076121e+00 1.8171781642742015e+00 9.1301296321937675e-02 + 1.7181654082363174e+00 2.1378405631827904e+00 -2.0560276982117598e-02 + 2.1072111675573755e+00 2.4252582719157476e+00 -2.3079026327554175e-01 + 2.5122218319835632e+00 2.6482744430706529e+00 -5.4836950911422722e-01 + 2.9056649154953802e+00 2.7777781909834851e+00 -9.5970254490596119e-01 + 3.2679719527695270e+00 2.7943748438027116e+00 -1.4362559198237839e+00 + 3.5902652755029276e+00 2.6837127436344046e+00 -1.9544542323082634e+00 + 3.8579965553040600e+00 2.4320405267782084e+00 -2.4974868740503204e+00 + 4.0333749241190304e+00 2.0426793312076796e+00 -3.0552632188783218e+00 + 4.0453622163440492e+00 1.5496727338801188e+00 -3.6366520067788879e+00 + 3.8051909845418717e+00 1.0314433226977615e+00 -4.2326780197933154e+00 + 3.2628646561224066e+00 6.0871576795097515e-01 -4.7837182181022078e+00 + 2.5010433905252203e+00 4.0799506239192374e-01 -5.1921699527899623e+00 + 2.0816245461425966e+00 2.9384617462421891e-01 -5.4422382703937942e+00 + id 11677 + loc 3.5127013921737671e-01 2.1409505605697632e-01 410 + blend 0.0000000000000000e+00 + interp 3.8556006752592009e-01:2.9591186700710870e-01:8.6880750655139449e-03:3.5606207843751964e-01:8.8113933880599593e-01:3.8555621192524486e-01:1.3251325164247345e+00:2.9853847392786897e-01:2.0024015737653453e+00:3.4826966554648953e-01:2.7838624216581085e+00:3.6621388703647151e-01:3.1821360232012745e+00 + CVs 20 + -1.5903465459962948e-01 9.6101537635669698e-02 -1.8222222236870833e-01 + -2.8856751777037193e-01 1.7701371733028912e-01 -3.6229259256516128e-01 + -3.9967719658034506e-01 2.4483455708864693e-01 -5.4933159640508955e-01 + -4.9931507288361260e-01 3.0111290706703070e-01 -7.4894645769316204e-01 + -5.8705021151123560e-01 3.4646186853313621e-01 -9.5916359777428917e-01 + -6.6327642154614441e-01 3.8131148921849234e-01 -1.1765837112505286e+00 + -7.2495955787745425e-01 4.0672502939097210e-01 -1.3962167050944185e+00 + -7.6577085841030279e-01 4.2364797952751626e-01 -1.6111885296716886e+00 + -7.7968166088076996e-01 4.3226298410477226e-01 -1.8135970422259908e+00 + -7.6376153290426152e-01 4.3250787175017003e-01 -1.9966308581553749e+00 + -7.1813264106062569e-01 4.2509933985824155e-01 -2.1555425973164981e+00 + -6.4623332817974277e-01 4.1113292159718784e-01 -2.2879388164484724e+00 + -5.5618902537222747e-01 3.9121522689544752e-01 -2.4021677368821659e+00 + -4.5894362612292749e-01 3.6414366785430641e-01 -2.5211544323198982e+00 + -3.6916222522648062e-01 3.2544785379200936e-01 -2.6645307437262229e+00 + -3.0165781509990158e-01 2.7108120341100417e-01 -2.8382824077011928e+00 + -2.7081306255061605e-01 1.9873373403766648e-01 -3.0417158162974083e+00 + -2.9182425964262709e-01 1.0863210983596128e-01 -3.2693643830389343e+00 + -3.1739596942785903e-01 3.1932574303518813e-02 -3.5132719149518348e+00 + id 11678 + loc 4.5413380861282349e-01 8.5729551315307617e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4765271495378423e-01:4.3571907478185229e-01:6.3365697705337620e-03:3.0410765117452759e-01:9.3848287391337648e-01:4.4764823842663470e-01:1.3840568676803746e+00:4.1588687000966612e-01:1.9992505087228427e+00:3.1724026042715259e-01:2.6253045302376394e+00:2.7880770494061025e-01:3.5946362941434105e+00 + CVs 20 + 2.7229279095884851e-02 3.6146120214432376e-01 -3.7591700417052232e-02 + 9.4634697322546674e-02 7.0802063439950746e-01 -1.1825651396678682e-01 + 1.8981186200047728e-01 1.0386770669015608e+00 -2.3131670028225926e-01 + 3.0185720598261612e-01 1.3554256143278809e+00 -3.7329681484307498e-01 + 4.2061557107843323e-01 1.6556470314428893e+00 -5.4941982852472737e-01 + 5.3915770089876047e-01 1.9362516106809953e+00 -7.5959894631475067e-01 + 6.6548692692554623e-01 2.1935754844170607e+00 -9.9412404073847738e-01 + 8.1513398276652738e-01 2.4274729932430268e+00 -1.2388743652202321e+00 + 1.0010493451919800e+00 2.6441360509645579e+00 -1.4842767228849232e+00 + 1.2408254443636353e+00 2.8493557956208413e+00 -1.7300167810138343e+00 + 1.5674643290664014e+00 3.0349982609413502e+00 -1.9866626384066057e+00 + 2.0310349052780579e+00 3.1544683436112151e+00 -2.2884397732640238e+00 + 2.6214810675579874e+00 3.0641811338269873e+00 -2.6707675556928350e+00 + 3.1468511374709367e+00 2.6665603214568936e+00 -3.0430759389298725e+00 + 3.4989543604258544e+00 2.0693510144128560e+00 -3.3085403466504157e+00 + 3.7025281273991557e+00 1.2560683026617863e+00 -3.4739982073122064e+00 + 3.5464104388709434e+00 4.1966305807419335e-02 -3.5179249194998441e+00 + 2.6720112848327320e+00 -1.1131823503090388e+00 -3.4138937172476727e+00 + 2.3520692237298948e+00 -1.3866296785536383e+00 -3.3776311992451022e+00 + id 11679 + loc 1.4758282899856567e-01 7.8100138902664185e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4637119657755087e-01:2.9740100841537404e-01:4.7346855595488591e-01:3.3047123886641522e-01:1.4155380863237503e+00:2.2497030327614312e-01:2.0218175052957985e+00:2.6569562445015227e-01:2.9242613688784846e+00:4.1489357056929205e-01:3.2105946607724918e+00:4.4636673286558509e-01:3.8717656257530995e+00 + CVs 20 + -6.7447640995951602e-02 5.8304061105840610e-01 3.9349264398472361e-01 + -1.7655731653506934e-01 1.0689445711461709e+00 6.5315203955570622e-01 + -3.2095240932678831e-01 1.5053023975518371e+00 8.6753191327239532e-01 + -5.1144650376288214e-01 1.9095507572075698e+00 1.0566335056099092e+00 + -7.5579791715636890e-01 2.2734552911457198e+00 1.2025358263103838e+00 + -1.0577717489655736e+00 2.5859279659495478e+00 1.2844457937084728e+00 + -1.4151693574340212e+00 2.8263075722189921e+00 1.2767596604393963e+00 + -1.8074427926702852e+00 2.9644109457340888e+00 1.1585624184593752e+00 + -2.1949099001193271e+00 2.9693751001882838e+00 9.3565012489896171e-01 + -2.5389803558887563e+00 2.8331211468970432e+00 6.6232600459294755e-01 + -2.8289731703486609e+00 2.5767823035220752e+00 4.0791349304635860e-01 + -3.0695406899173912e+00 2.2239701252059785e+00 2.1712035966233539e-01 + -3.2627207382096652e+00 1.7966937740827507e+00 1.2338557935545991e-01 + -3.4084961142726864e+00 1.3250329410762192e+00 1.6437772868049294e-01 + -3.4988764269115298e+00 8.6840746592489992e-01 3.6654444308051282e-01 + -3.5345051668742506e+00 5.0449407535222934e-01 7.0161715521797108e-01 + -3.5441211905998351e+00 2.6585842489789169e-01 1.1125800250648417e+00 + -3.5554720784798302e+00 1.1752937064330399e-01 1.5619300239304450e+00 + -3.5635824055027499e+00 -1.9648961702031426e-01 2.0253143758209489e+00 + id 11680 + loc 2.3140700161457062e-01 3.5170234739780426e-02 1048 + blend 0.0000000000000000e+00 + interp 6.5748711357528011e-01:4.5701475563473931e-01:5.6047465041925082e-01:5.1626601541873773e-01:9.9582268842142618e-01:6.5748053870414436e-01:1.9590056482509699e+00:4.7045547776976959e-01:2.0290189230216527e+00:4.8242171839256920e-01:2.8421209958395268e+00:3.8870450245757099e-01:3.6094911984451321e+00 + CVs 20 + -3.1452584070672629e-01 4.6692813830086893e-01 1.3981958851028581e-01 + -6.3318367625568939e-01 9.7564950223915048e-01 2.3721282469518420e-01 + -9.2375166390849306e-01 1.5537032098048100e+00 2.8230576528191054e-01 + -1.1710641948825797e+00 2.1874579545092812e+00 2.5096131238159669e-01 + -1.3869992605176822e+00 2.8254236988825325e+00 1.0589491677441998e-01 + -1.6051666732362695e+00 3.4116535348726478e+00 -1.7627022855720154e-01 + -1.8683895025005923e+00 3.8870699627470353e+00 -6.3022545470036917e-01 + -2.1854653925007437e+00 4.1172819046585776e+00 -1.2710006304809585e+00 + -2.4901860105123390e+00 3.9704804544048287e+00 -1.9793848599679433e+00 + -2.7017372048797119e+00 3.4419954521450800e+00 -2.6317860518815150e+00 + -2.7212800235009840e+00 2.5755817848648004e+00 -3.1405795650881165e+00 + -2.4588383339632820e+00 1.5110030174187847e+00 -3.3918715382577389e+00 + -1.9623488668971989e+00 4.6297858877330622e-01 -3.3328699438325340e+00 + -1.4170115474391169e+00 -4.5579468236036114e-01 -3.0419746122213747e+00 + -1.0291990285593677e+00 -1.2332720986408048e+00 -2.6961537965896922e+00 + -9.0474260126885320e-01 -1.8316185335792723e+00 -2.6761379734102175e+00 + -3.0819391414103675e-01 1.0654123363391110e+00 -3.8085940263764089e+00 + 3.8810054375742850e-02 1.5885159923379590e+00 -3.4357062310264403e+00 + 2.3211097922992929e-01 2.2376061787439898e+00 -3.4257507850931104e+00 + id 11681 + loc 9.1022682189941406e-01 4.6413293480873108e-01 1087 + blend 0.0000000000000000e+00 + interp 3.0589485713320608e+00:7.2454156136076764e-01:3.1984209693166621e-03:2.7083179065324525e-01:9.2482684942017235e-01:3.6829986313462049e-01:1.7843924212040072e+00:7.3762347686094065e-01:1.8543457521163229e+00:1.1413539245734374e+00:1.9150822677157862e+00:2.1118995733388748e+00:1.9899666552998174e+00:3.0589385713320607e+00:1.9997482693776707e+00:3.7607747170888106e-01:3.8940077002941509e+00 + CVs 20 + 2.5710865102131647e-01 4.0731683732834706e-01 -5.4113965990360346e-01 + 5.3092480475085901e-01 7.0044535555560572e-01 -9.1605877338363340e-01 + 8.2482530728790016e-01 9.3560106164179979e-01 -1.2286430521078167e+00 + 1.1409587563616610e+00 1.1329030938008797e+00 -1.5089129332323450e+00 + 1.4729711705671134e+00 1.2864617138135648e+00 -1.7409628207184744e+00 + 1.8100633971667339e+00 1.3912899010432462e+00 -1.9144889393618829e+00 + 2.1384092633243070e+00 1.4435280411918117e+00 -2.0253429212257501e+00 + 2.4420216074872236e+00 1.4415202881662594e+00 -2.0771603427589267e+00 + 2.7011610367591588e+00 1.3877417811861394e+00 -2.0850992704383113e+00 + 2.9009248606034830e+00 1.2960595979395406e+00 -2.0790431383762322e+00 + 3.0510662344968646e+00 1.1890552595234616e+00 -2.0853148037485219e+00 + 3.1737723808526304e+00 1.0822484184575802e+00 -2.1119497528652986e+00 + 3.2824407779173637e+00 9.8702382690756474e-01 -2.1578149355484078e+00 + 3.3764400652540307e+00 9.2680674587141187e-01 -2.2196515638129233e+00 + 3.4553006342853338e+00 9.1726603910757754e-01 -2.2783792942890568e+00 + 3.5306995288696514e+00 9.1256757817126555e-01 -2.3140289216669157e+00 + 3.6012330916704207e+00 8.7512116500862069e-01 -2.3329493229781204e+00 + 3.6818925285141040e+00 7.9464932657782172e-01 -2.3537719354711752e+00 + 3.9670457725804220e+00 5.7169647468052232e-01 -2.5358000347596299e+00 + id 11682 + loc 4.9169635772705078e-01 6.6430860757827759e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4336191535582153e-01:2.7262746855376718e-01:5.2986869834038774e-02:3.5522846947590991e-01:7.9612747429404995e-01:3.2266600734595435e-01:1.1231988821754282e+00:3.1478906443189958e-01:2.0136960513965088e+00:2.9697629580713503e-01:2.9317153569529153e+00:4.4335748173666800e-01:3.3949884196454203e+00 + CVs 20 + -3.1105495541528938e-01 4.5367803161942238e-01 1.9881086718830238e-01 + -5.5475723764173690e-01 8.4520905117936262e-01 3.8501691616515454e-01 + -7.5293842405025202e-01 1.2030093770431125e+00 5.9765329341337603e-01 + -9.7201161051956231e-01 1.5404781885725045e+00 7.8654400684021542e-01 + -1.2592254547426371e+00 1.8395451506974365e+00 8.7245078555237709e-01 + -1.6075959867757219e+00 2.0656436347658191e+00 8.2872409986614781e-01 + -1.9681519113276646e+00 2.1887385605455609e+00 6.6440039798517181e-01 + -2.2627308127075576e+00 2.1986036794241959e+00 3.9340090146603846e-01 + -2.4089310208576662e+00 2.1041781840384930e+00 4.6921473517693713e-02 + -2.3903216152745097e+00 1.9292423088009785e+00 -2.9887211331951735e-01 + -2.2718620324416712e+00 1.6897326177528047e+00 -5.8724297688365723e-01 + -2.0883333070137402e+00 1.3742207842127672e+00 -7.8611159201867709e-01 + -1.8852787154002859e+00 1.0019607964166479e+00 -8.5898621508477357e-01 + -1.7525945850216345e+00 6.4423320318633648e-01 -8.8096455940661023e-01 + -1.7340309479667273e+00 3.4749556161801398e-01 -9.8787472328856751e-01 + -1.8370541113921945e+00 1.6759037814950392e-01 -1.2125480565895721e+00 + -2.0677072134029761e+00 2.1540527102188028e-01 -1.4950358341651264e+00 + -2.3914113206708754e+00 5.4168775901350774e-01 -1.6277171497875886e+00 + -2.5225462656341788e+00 4.9351113594309926e-01 -1.8690439385547457e+00 + id 11683 + loc 8.7794613838195801e-01 6.1556744575500488e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4630397611097633e-01:3.3272772698920156e-01:3.3852418646261173e-01:4.2132851430527840e-01:9.3870834215972032e-01:3.1820928299388523e-01:1.4196719113672487e+00:4.1104217803968290e-01:2.1112539260919818e+00:3.2366779278469948e-01:2.9560590501150186e+00:4.3208418662376141e-01:3.2248019274334316e+00:4.4629951307121524e-01:3.9998182135508715e+00 + CVs 20 + 1.1093280027371499e-01 2.6732567730072043e-01 -3.3622556941547554e-01 + 2.2552524138504690e-01 5.3644827124949901e-01 -6.2447294909987860e-01 + 3.3565993305277281e-01 8.1350834055165322e-01 -9.0295343958606133e-01 + 4.3931464140989473e-01 1.1018936324440134e+00 -1.1940470106449348e+00 + 5.3333539662711882e-01 1.4004430964947374e+00 -1.5046448605539684e+00 + 6.0734986264369550e-01 1.7064322487818533e+00 -1.8328348490564357e+00 + 6.5381175832375427e-01 2.0150554691435767e+00 -2.1757937651487551e+00 + 6.7798330194395329e-01 2.3181973163448144e+00 -2.5416454153961521e+00 + 6.9468860410408850e-01 2.6010089356749928e+00 -2.9505311348122247e+00 + 7.2005693616263966e-01 2.8375490781442996e+00 -3.4262868561684243e+00 + 7.6708267579946354e-01 2.9893433494445505e+00 -3.9777334662295458e+00 + 8.4376027165504164e-01 3.0172531688931348e+00 -4.5817688876920037e+00 + 9.5322408457396368e-01 2.9015033057575712e+00 -5.1889652043340453e+00 + 1.0962064612475142e+00 2.6540997070320218e+00 -5.7410030918982056e+00 + 1.2705776054625237e+00 2.3105570475231860e+00 -6.1976747037812521e+00 + 1.4656126208593103e+00 1.9056096073564150e+00 -6.5526526199036876e+00 + 1.6595811415562158e+00 1.4544227749933141e+00 -6.8296505159142207e+00 + 1.8227939213930462e+00 9.6713190449051478e-01 -7.0506220637449752e+00 + 1.9670536437395365e+00 6.4695442976969264e-01 -7.1228576527261325e+00 + id 11684 + loc 6.0555869340896606e-01 7.3531579971313477e-01 1084 + blend 0.0000000000000000e+00 + interp 4.7379466603998888e-01:4.0379256482808940e-01:4.1628892834755438e-01:4.7378992809332848e-01:9.9934072068420687e-01:3.2233286857186499e-01:1.4351775798550754e+00:4.4630206034030312e-01:2.0473157976630145e+00:3.5055981953988458e-01:2.9831759950847601e+00:3.6389453866873256e-01:3.8761678578578804e+00 + CVs 20 + -2.2306425491886928e-01 2.8164599607131591e-01 2.5770192193948166e-01 + -4.4570318136820242e-01 5.4950634157970379e-01 4.7636888339403277e-01 + -6.5945027440413795e-01 8.2554792381611464e-01 6.8250103157086217e-01 + -8.6618565193545460e-01 1.1132426637558208e+00 8.7884534863255614e-01 + -1.0811548719702169e+00 1.4025744409190786e+00 1.0465118961483428e+00 + -1.3146091654044754e+00 1.6788132508382489e+00 1.1653707150502108e+00 + -1.5654608551892188e+00 1.9236794140312732e+00 1.2224422326485445e+00 + -1.8195818008310212e+00 2.1203208079374352e+00 1.2149365988451271e+00 + -2.0553426407939499e+00 2.2552047969844908e+00 1.1375821909740140e+00 + -2.2427482047919245e+00 2.3160848072610145e+00 9.8444899455180479e-01 + -2.3521107817238178e+00 2.3138401172720249e+00 7.8602672584688427e-01 + -2.3821731937290322e+00 2.2806577827802625e+00 5.8592259338181640e-01 + -2.3651049149111820e+00 2.1998249436928456e+00 4.0849412448213385e-01 + -2.3392943720431250e+00 1.9986230722791536e+00 3.0355212679819776e-01 + -2.3104881554632719e+00 1.6565422295113730e+00 2.9912887269334265e-01 + -2.2387360393649720e+00 1.1751196197297038e+00 3.2755815943454492e-01 + -2.0690538244532668e+00 5.8142895833537322e-01 2.5536558166768275e-01 + -1.8232736183500799e+00 3.7286645848941320e-02 4.0299790395229851e-03 + -1.6824690613886280e+00 -1.9048761503101136e-01 -2.0638131774292634e-01 + id 11685 + loc 6.7077177762985229e-01 7.7967125177383423e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8395423924188880e-01:3.0466351505058670e-01:6.4573966460877463e-01:4.3107009867665363e-01:1.0758367252218137e+00:4.6865525331540708e-01:1.6877810015881987e+00:4.8394939969949641e-01:2.0048798495773466e+00:3.2803950325913916e-01:2.6179388771726835e+00:4.2593360456698792e-01:3.2861729659408683e+00:3.9752989107155390e-01:3.9849716392280965e+00 + CVs 20 + 1.8859376063157507e-01 2.8385066488131128e-01 -1.5758926992336278e-01 + 3.9755229836177175e-01 5.6565581828151679e-01 -2.7468306487212013e-01 + 6.1909607158690194e-01 8.3778136057318009e-01 -3.7695086625526031e-01 + 8.4757151679242770e-01 1.0968357873254448e+00 -4.7905807933613415e-01 + 1.0844026051437916e+00 1.3443104083994770e+00 -5.9186365039540834e-01 + 1.3354140722036589e+00 1.5775719190910569e+00 -7.4138894080203233e-01 + 1.6010848377364959e+00 1.7803862859883826e+00 -9.5776998870362529e-01 + 1.8716792740481167e+00 1.9323095247141659e+00 -1.2527026484108894e+00 + 2.1325056628507477e+00 2.0203939957598278e+00 -1.6182762580727128e+00 + 2.3691911673787920e+00 2.0393892488238077e+00 -2.0362795942248826e+00 + 2.5729819074625047e+00 1.9887033813486665e+00 -2.4880528013311780e+00 + 2.7390617505900856e+00 1.8651556723370071e+00 -2.9596643150687920e+00 + 2.8573691825797716e+00 1.6612575881851712e+00 -3.4382324710502434e+00 + 2.9038124520320379e+00 1.3790051996662067e+00 -3.9070599077359849e+00 + 2.8394048076625835e+00 1.0515752197387767e+00 -4.3472215992288579e+00 + 2.6340186455586836e+00 7.4709574856896532e-01 -4.7321460833869704e+00 + 2.3025326728955693e+00 5.3521220271294490e-01 -5.0304105365032923e+00 + 1.9058819731927452e+00 4.4612946798939623e-01 -5.2238758005096111e+00 + 1.5414112937785238e+00 3.4910140050006999e-01 -5.3971174542343290e+00 + id 11686 + loc 3.6482104659080505e-01 6.1413817107677460e-02 1085 + blend 0.0000000000000000e+00 + interp 5.3079360366116490e-01:3.8593724330376300e-01:8.2045799605554293e-01:5.3078829572512831e-01:1.1303893294206251e+00:4.2060322827877789e-01:1.9128749561127349e+00:3.1553650802769539e-01:2.1824050002787558e+00:3.5719872041289519e-01:3.0275267071906780e+00:4.9718632240001487e-01:3.9984233711853294e+00 + CVs 20 + 4.3936724326167798e-01 4.1284287739388292e-01 3.0235213622943852e-01 + 7.8089373890736102e-01 7.7854788039177480e-01 5.9441825710859464e-01 + 1.0698554248416206e+00 1.1046464353092080e+00 9.2674115145465985e-01 + 1.3001892876677632e+00 1.3906058166579858e+00 1.3357294291256354e+00 + 1.4370095408805010e+00 1.6127811703611306e+00 1.8181740915077245e+00 + 1.4592319828147446e+00 1.7474834934984580e+00 2.3433641960995431e+00 + 1.3673199144225323e+00 1.7812664164113250e+00 2.8646226748407488e+00 + 1.1821853855415159e+00 1.7154226472831655e+00 3.3351306112828265e+00 + 9.4236868903585447e-01 1.5639437330030195e+00 3.7186969599731428e+00 + 6.9790816686287727e-01 1.3511358782078891e+00 3.9989802254848712e+00 + 4.9132012009442461e-01 1.1068869524882159e+00 4.1825775537743608e+00 + 3.4171031561579501e-01 8.6046010034803899e-01 4.2890572683069195e+00 + 2.4199069975038090e-01 6.3359586004828206e-01 4.3433284909329632e+00 + 1.7194545650027204e-01 4.3536385625381679e-01 4.3712189983079677e+00 + 1.1303962551589750e-01 2.6509415039562972e-01 4.3937893852089580e+00 + 5.2613206869597105e-02 9.2982261719421158e-02 4.4370816307556495e+00 + 8.8544158433271902e-03 -1.3090327334212215e-01 4.5339077947557982e+00 + 1.5798974797737564e-02 -3.9958595653363060e-01 4.7092884742444765e+00 + 8.9536725182850274e-02 -6.2567381666401634e-01 4.9737132090578386e+00 + id 11687 + loc 5.6474059820175171e-01 2.7273714542388916e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9840486200710815e-01:4.2194051466246618e-01:1.0831803346080682e-01:2.7835898217094723e-01:6.5763099383725132e-01:4.9839987795848811e-01:1.2405517544756541e+00:4.2317599982434478e-01:1.8525434643251975e+00:2.8082720689577934e-01:2.0894739888372023e+00:4.1151410566419760e-01:2.9978461074958167e+00:3.8196240879045867e-01:3.6029305911605620e+00 + CVs 20 + 2.4813787742641585e-01 4.0798981833510639e-01 -3.0033514248801907e-01 + 5.2338566525967756e-01 7.9891831260593960e-01 -5.4758953199227145e-01 + 8.2436758091111617e-01 1.1804646907043308e+00 -7.7035099101379356e-01 + 1.1635563646702893e+00 1.5388884385341934e+00 -9.7838657444403188e-01 + 1.5570260868173806e+00 1.8456358148434382e+00 -1.1712972028117195e+00 + 2.0126963596083609e+00 2.0657336630764012e+00 -1.3423718815044032e+00 + 2.5228454153053628e+00 2.1640973317554022e+00 -1.4716902409841792e+00 + 3.0588875074246817e+00 2.1149302527706331e+00 -1.5259092944874078e+00 + 3.5685867719290179e+00 1.9001169175523918e+00 -1.4753102923242787e+00 + 3.9660729224494529e+00 1.5038957470816245e+00 -1.3038535130446165e+00 + 4.1441457899885386e+00 9.5680448666786677e-01 -1.0265966941299580e+00 + 4.0663077088877859e+00 3.6023932015069099e-01 -7.0294883123374285e-01 + 3.8107111375595930e+00 -1.6318640444281152e-01 -3.5380549792405036e-01 + 3.5567365538572417e+00 -5.1123807005839184e-01 7.9272806338745450e-02 + 3.4454983249069442e+00 -6.0800124742726103e-01 6.3209199890610823e-01 + 3.5122294126654796e+00 -3.5939553868684015e-01 1.2084886227085143e+00 + 3.7435742112595265e+00 2.0671225496686385e-01 1.5871714338557479e+00 + 4.0158735930242235e+00 7.1584416791757843e-01 1.7417483538088991e+00 + 4.1089385661966453e+00 8.0257378177747096e-01 2.1088431255854583e+00 + id 11688 + loc 1.5975388884544373e-01 4.7498098015785217e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3162675162229147e-01:4.3162243535477529e-01:8.4647454741605432e-01:4.2028386870368428e-01:1.2546725351171206e+00:3.9375246315610024e-01:1.9771629359784186e+00:3.5892944313052572e-01:2.6233784177872397e+00:4.2907695165806636e-01:3.2285022454456103e+00:3.6710687710586315e-01:3.9993527725037441e+00 + CVs 20 + -2.2562813873782078e-01 3.5105500616702812e-01 -1.2068612184869151e-01 + -4.6994620092180045e-01 7.2005434652570410e-01 -2.3253854817250877e-01 + -7.2876160880876439e-01 1.1130852594965144e+00 -3.4613285918091191e-01 + -9.7471213214374752e-01 1.5382894509869955e+00 -4.5616134934400354e-01 + -1.1816955065338679e+00 1.9584470295358805e+00 -5.4363619220581594e-01 + -1.3824908655581782e+00 2.2584502386053114e+00 -6.0608250207139447e-01 + -1.5988790339767687e+00 2.3580838590591613e+00 -6.5701373817663966e-01 + -1.8417852488450819e+00 2.3157031394281309e+00 -7.2425445572357194e-01 + -2.1089161725509684e+00 2.1553383878331149e+00 -8.4313551182211377e-01 + -2.3504402168701328e+00 1.8836264150219379e+00 -1.0467772573045593e+00 + -2.5125466185587255e+00 1.5389398843950763e+00 -1.3585886843355972e+00 + -2.5667079235115220e+00 1.1762665802012113e+00 -1.7477989444334172e+00 + -2.5326325668193834e+00 8.2443626755026678e-01 -2.1372179990570110e+00 + -2.4283710382795181e+00 4.8632365596924404e-01 -2.4109897890458982e+00 + -2.2654366245160293e+00 1.8998741661536450e-01 -2.4567205209114711e+00 + -2.0536254600268635e+00 3.1603801682778210e-02 -2.2577864999776924e+00 + -1.8472225754623834e+00 2.3074029823570241e-01 -1.8191291066974040e+00 + -1.8555600489033457e+00 7.2316240887263195e-01 -1.4443555905666126e+00 + -1.5719027646422115e+00 5.5726722241026017e-01 -1.3351730906399961e+00 + id 11689 + loc 5.6147783994674683e-01 3.0502748489379883e-01 1090 + blend 0.0000000000000000e+00 + interp 4.7519862233032661e-01:2.6247465955662219e-01:4.2078030045341863e-01:4.7519387034410332e-01:1.2837427461457305e+00:3.0945627926376418e-01:2.1480434523907261e+00:4.6482465209093105e-01:2.9512012354510038e+00 + CVs 20 + -6.6202666065725252e-02 4.8270287815933316e-01 -2.6761998426735473e-01 + -5.6838861770310223e-02 8.9472578552306947e-01 -4.3040354066475489e-01 + -1.2766524647795485e-02 1.2756020875760414e+00 -5.3485671079837438e-01 + 5.5522070316478045e-02 1.6332169279780802e+00 -5.9164128253668036e-01 + 1.5303972666963050e-01 1.9460707986697243e+00 -5.9028388719310265e-01 + 2.7224664073036708e-01 2.1859924763903331e+00 -5.2675561957132011e-01 + 3.8738395334655595e-01 2.3224984753628841e+00 -4.1010756639961055e-01 + 4.5806130895687913e-01 2.3452883436352288e+00 -2.7256852801282916e-01 + 4.6695361070694275e-01 2.2903153207189293e+00 -1.5172350215171460e-01 + 4.4501022840173499e-01 2.1989137572335729e+00 -4.2891115198857577e-02 + 4.1778314773015895e-01 2.0686951733072139e+00 7.3673221571512904e-02 + 3.8476843924254150e-01 1.8892675026207795e+00 1.8921940456147124e-01 + 3.4255713016502143e-01 1.6607527925771168e+00 2.8363472978515336e-01 + 2.9288863128632853e-01 1.3851889659747907e+00 3.3731067819486993e-01 + 2.3808005178888453e-01 1.0737104991547479e+00 3.2683883540803221e-01 + 1.9002643389453633e-01 7.3003258200863430e-01 2.2817417523200975e-01 + 1.8089747990166671e-01 3.3774564251568295e-01 -7.2981641669678937e-03 + 2.3964219850857532e-01 -4.5985724315813784e-02 -4.2090275925199128e-01 + 2.0138194040611940e-01 -1.7226237671185496e-01 -7.0913615944104191e-01 + id 11690 + loc 4.7062194347381592e-01 4.0300995111465454e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8129244304304408e-01:4.8128763011861370e-01:2.6984918844660954e-01:3.3286085963078282e-01:8.6367422030716789e-01:4.3390680579636898e-01:1.1493016612875404e+00:3.4561250719886494e-01:2.0460462935002224e+00:4.1434685417465317e-01:2.9544958369386158e+00:2.9138822015123644e-01:3.3003367115603446e+00:4.3462331139989990e-01:3.9404674528496750e+00 + CVs 20 + 3.4145441098850082e-01 4.0047638312554473e-01 2.7149767177108747e-01 + 6.4874532845772015e-01 7.4323879751742516e-01 5.3314726876588225e-01 + 9.5619013419021726e-01 1.0635257948012315e+00 8.0360896844066632e-01 + 1.2458619417461454e+00 1.3789214043899749e+00 1.1228926331848386e+00 + 1.4634194325738765e+00 1.6745626055432212e+00 1.5135381833357471e+00 + 1.5662557248622471e+00 1.9224839995686422e+00 1.9637965740417316e+00 + 1.5308734077687178e+00 2.0948197093320715e+00 2.4333119641365206e+00 + 1.3486676677400304e+00 2.1650917428888388e+00 2.8583432713402313e+00 + 1.0523938972130464e+00 2.1120999990726488e+00 3.1537981492656715e+00 + 7.3870042463869279e-01 1.9565618047924265e+00 3.2760869024448707e+00 + 4.9690427363821321e-01 1.7477003687489379e+00 3.2644891459295198e+00 + 3.7326757833412383e-01 1.5259164637500231e+00 3.1793334212997957e+00 + 3.3005132035909757e-01 1.3202044308633374e+00 3.0680910620596205e+00 + 2.4975549309611367e-01 1.0985457386276547e+00 2.9405599500444537e+00 + 7.8453033798102645e-02 8.4456095861792768e-01 2.7731098063258353e+00 + -1.7560294883086441e-01 6.3281527753729883e-01 2.5568549615300129e+00 + -4.8169694672605379e-01 5.4008001943948880e-01 2.3171181461524948e+00 + -7.7325604311754714e-01 5.9009614877203620e-01 2.0894332482725559e+00 + -1.0654990178194328e+00 6.4622314365540245e-01 1.8616310519425510e+00 + id 11691 + loc 6.0716462135314941e-01 7.9631483554840088e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3912737361310239e-01:3.5833646313156309e-01:3.3887551202298472e-03:4.0660355486829797e-01:6.0929491320943141e-01:4.3161181287427303e-01:1.1077076293398835e+00:3.8311484211162894e-01:1.9075519103715917e+00:4.3912298233936625e-01:2.5144086549872866e+00:3.5317510023226717e-01:3.0506833914222864e+00 + CVs 20 + 1.2811058822579041e-01 9.3839798475017677e-01 -3.8008196017227219e-01 + 3.1791733220447743e-01 1.9227946651721550e+00 -6.2384359625078301e-01 + 6.2289445305935931e-01 2.9046162149004342e+00 -6.3328335417515558e-01 + 1.0451979330228258e+00 3.7405104121056514e+00 -3.4060211005762819e-01 + 1.5378692693002383e+00 4.2553553183890127e+00 2.1262540493259574e-01 + 2.0123437586958137e+00 4.3585604823756690e+00 8.6219946844589090e-01 + 2.4151612125855926e+00 4.1251412443986828e+00 1.4569400208984833e+00 + 2.7477272371294066e+00 3.6906803784212334e+00 1.9649462179405535e+00 + 2.9870887864232700e+00 3.1459129284147966e+00 2.4298823997078385e+00 + 3.0572419831784297e+00 2.5232921748770911e+00 2.9098403550359522e+00 + 2.8736114706573170e+00 1.8940567323294455e+00 3.3881110472830929e+00 + 2.4563464982137098e+00 1.3724367411675806e+00 3.8208126151996686e+00 + 1.8469809179200531e+00 9.5099570656858701e-01 4.1905575018247632e+00 + 1.0415105764151127e+00 5.7130648592887168e-01 4.4244691414670347e+00 + 3.1271701441505956e-02 1.1549117382639906e-01 4.5355930318963695e+00 + -9.2231272105803896e-01 -7.5843966403478302e-01 4.8668564199939954e+00 + -1.1611126394284506e+00 -1.7156623261170691e+00 5.6507375725169915e+00 + -8.8896736174223845e-01 -2.1828956315745920e+00 6.6070430134071767e+00 + -4.3131733107485776e-01 -2.1865899698597189e+00 7.6778893283471774e+00 + id 11692 + loc 1.1374016106128693e-01 2.3089180886745453e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6293806222163697e-01:4.6293343284101479e-01:1.5345410865970510e-01:3.5290240853148064e-01:9.3196707562505243e-01:3.3207792729327568e-01:1.2831734050471384e+00:4.0849509996913957e-01:1.9382692806769202e+00:2.7741205497309279e-01:2.3898219895502737e+00:3.8299031747854811e-01:3.0090627395845186e+00:2.8932061956807570e-01:3.4798020220506398e+00 + CVs 20 + -1.5974065780498098e-01 2.5538143336603886e-01 -4.3035557254941695e-02 + -3.3468606226602904e-01 5.4826833653657947e-01 -6.5224511791027590e-02 + -5.0405778514497790e-01 8.6297351978405912e-01 -8.3046961045673495e-02 + -6.6643326362253952e-01 1.1839021791572040e+00 -1.1103186372658164e-01 + -8.3409425603403486e-01 1.4990933826882920e+00 -1.6043949644629696e-01 + -1.0113073963085208e+00 1.7931377672932558e+00 -2.3909391525250179e-01 + -1.1907375438876211e+00 2.0487438750163687e+00 -3.4811660496469166e-01 + -1.3587095348692604e+00 2.2528200594956229e+00 -4.8371034579129102e-01 + -1.5068226976207353e+00 2.4009601247879200e+00 -6.5208151367036749e-01 + -1.6283685592731243e+00 2.4856300686810253e+00 -8.7502771826351367e-01 + -1.7123237426600078e+00 2.5057061475636901e+00 -1.1564850106463109e+00 + -1.7579729823165149e+00 2.4662418797971624e+00 -1.4909717807194416e+00 + -1.7780479479832341e+00 2.3478793919395424e+00 -1.8536031818118790e+00 + -1.7974255577724074e+00 2.1489030549075183e+00 -2.1492002345140273e+00 + -1.8338156637013014e+00 1.9280684988629777e+00 -2.2993519676207503e+00 + -1.8737018912216077e+00 1.7053292645080149e+00 -2.3119359857611004e+00 + -1.8754412077740739e+00 1.4480790645918520e+00 -2.2528996312672143e+00 + -1.7952378728081853e+00 1.1650463514654972e+00 -2.2874690697984685e+00 + -1.6030909614856417e+00 9.9135621185195721e-01 -2.6767802341113422e+00 + id 11693 + loc 2.4253176152706146e-01 7.8304010629653931e-01 410 + blend 0.0000000000000000e+00 + interp 4.2817474196502209e-01:4.0601904316504145e-01:4.6464088133266335e-01:2.9896725780441774e-01:1.0009255314694541e+00:3.0535149778952364e-01:1.9516037804934778e+00:2.6321921974950274e-01:2.7744515728004604e+00:4.2817046021760247e-01:3.2442009235633291e+00:2.9117735744304751e-01:3.9777075411820908e+00 + CVs 20 + 3.3224450176523601e-01 1.7925305507459877e-01 -8.0048616910654263e-02 + 5.9252981581699959e-01 3.1265484164674440e-01 -1.5778714427326318e-01 + 8.3926562067530175e-01 4.2981781941030350e-01 -2.3538158153591260e-01 + 1.1053158486186703e+00 5.4816593876414832e-01 -3.1338753055858554e-01 + 1.3891154150252303e+00 6.6499458538644562e-01 -3.9221278532312398e-01 + 1.6877747794764075e+00 7.7724748162318580e-01 -4.6905850137759780e-01 + 2.0004801923526769e+00 8.8305802996539240e-01 -5.3616344615109535e-01 + 2.3272025451746856e+00 9.8046756605758978e-01 -5.8426085572816766e-01 + 2.6643243123162348e+00 1.0667368242158097e+00 -6.0646061280915387e-01 + 3.0049230284776978e+00 1.1406038126376867e+00 -5.9840327378305036e-01 + 3.3494281065176463e+00 1.2016502753540850e+00 -5.5760112404789486e-01 + 3.7114508365716419e+00 1.2395436223833656e+00 -4.9442903941837835e-01 + 4.0949483783390965e+00 1.2307951723839121e+00 -4.4901725002660353e-01 + 4.4754448523906580e+00 1.1645425782802625e+00 -4.6386076781326335e-01 + 4.8274483126663945e+00 1.0512638595714845e+00 -5.4511345785543797e-01 + 5.1308753668344593e+00 9.0880160759758932e-01 -6.7996429199470598e-01 + 5.3659770855204059e+00 7.6076883972537690e-01 -8.5146507158449425e-01 + 5.5300064934544331e+00 6.2691862813131749e-01 -1.0368689484668954e+00 + 5.6657721554075238e+00 5.0394327426562846e-01 -1.2041402388991509e+00 + id 11694 + loc 3.5127013921737671e-01 2.2895097732543945e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0361480360621558e-01:4.0455551852368782e-01:9.4060427422187376e-01:2.6381272456960764e-01:1.3587306200619564e+00:3.6810210807819671e-01:1.9923080612291564e+00:3.9442092171154708e-01:2.8467544635663042e+00:5.0360976745817954e-01:3.2440609513212522e+00:3.5825286322233191e-01:3.9995861582759327e+00 + CVs 20 + -2.9877085204590503e-01 2.7302178940031696e-01 -1.4452521190637127e-02 + -6.0067161900531363e-01 5.6995909037657388e-01 -4.6211005541950470e-02 + -9.1574322536081543e-01 9.0455740470290324e-01 -9.1740032426512741e-02 + -1.2262972077168508e+00 1.2931379360395705e+00 -1.4105419193954696e-01 + -1.4932990828680228e+00 1.7016847565456135e+00 -1.8393400115998387e-01 + -1.7281858144429723e+00 2.0161253340915808e+00 -2.2487751332578959e-01 + -1.9566029099701874e+00 2.1553259920609236e+00 -2.7131256325071285e-01 + -2.1930503530083594e+00 2.1604439665602717e+00 -3.3660664831001752e-01 + -2.4392533575568387e+00 2.0725216625069511e+00 -4.4334254056859357e-01 + -2.6677091072427452e+00 1.9132489943938740e+00 -6.1207788769771443e-01 + -2.8470814922585705e+00 1.7153267660556708e+00 -8.5508567586553930e-01 + -2.9495242589906443e+00 1.5166261967412324e+00 -1.1526115772895578e+00 + -2.9800981298283462e+00 1.3382007538338947e+00 -1.4531116288742676e+00 + -2.9566076346847394e+00 1.1827706222524674e+00 -1.7005245620445613e+00 + -2.8911698051925545e+00 1.0579952709320706e+00 -1.8475042769431913e+00 + -2.8083332263527501e+00 9.9259704049090258e-01 -1.8825550303323801e+00 + -2.7531883971010589e+00 1.0522315016328223e+00 -1.8263250356005887e+00 + -2.8043831097491889e+00 1.2142608034166984e+00 -1.7902690104853651e+00 + -2.6048039842024999e+00 1.0450554822077009e+00 -1.7676787841399937e+00 + id 11695 + loc 4.7732022404670715e-01 6.0699170827865601e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4880568776819380e-01:3.3805330761364244e-01:1.5777718644188865e-02:4.4880119971131616e-01:6.5422546363389467e-01:3.8175902737256123e-01:1.0461593428365956e+00:4.3345303209996405e-01:1.8032196869239188e+00:3.7404322008739294e-01:2.2205084908709325e+00:2.5018760884278413e-01:3.1651856488981855e+00 + CVs 20 + 1.4302368196361886e-01 2.8175964129701547e-01 -1.0824237632237851e-01 + 2.9936733793220299e-01 5.4535733710572842e-01 -2.1156957229486312e-01 + 4.5160168455786381e-01 7.8675731992405629e-01 -3.2057935923956227e-01 + 5.9073664314626373e-01 1.0050698951978361e+00 -4.4136219506147184e-01 + 7.1696840291261010e-01 1.1999382063566131e+00 -5.7573516552174198e-01 + 8.3219813522731689e-01 1.3708483059687313e+00 -7.2453162173304198e-01 + 9.4256243635418802e-01 1.5143682350149277e+00 -8.8696508995076229e-01 + 1.0552324153229873e+00 1.6244763102896780e+00 -1.0598836952056110e+00 + 1.1721258848247982e+00 1.6967865892038971e+00 -1.2390482184604736e+00 + 1.2898382841475400e+00 1.7288861883776780e+00 -1.4218483397326116e+00 + 1.4055085881842515e+00 1.7206189198466033e+00 -1.6042154797164214e+00 + 1.5209151239011420e+00 1.6753715941008513e+00 -1.7791613304110201e+00 + 1.6402832294411647e+00 1.5909101806458257e+00 -1.9422308499048790e+00 + 1.7675564149579186e+00 1.4430588667585653e+00 -2.0937345206649205e+00 + 1.8979438954480967e+00 1.1986834911390529e+00 -2.2423016508044382e+00 + 1.9908569487562195e+00 8.5491724046838968e-01 -2.4119227752481587e+00 + 1.9828962266502892e+00 4.4772595588743003e-01 -2.6217788712450472e+00 + 1.8234413901540107e+00 3.9664420881588947e-02 -2.8635621096736892e+00 + 1.5184461993967733e+00 -2.4380364842173552e-01 -3.0635683003904943e+00 + id 11696 + loc 9.4097179174423218e-01 9.6561902761459351e-01 1085 + blend 0.0000000000000000e+00 + interp 5.4864453789397916e-01:2.8576582135522272e-01:3.7027769114858355e-01:2.7832664422502928e-01:1.0384156087279159e+00:2.9385322530747987e-01:1.9814888036029847e+00:2.2829024852596355e-01:2.9999308541003820e+00:5.4863905144860026e-01:3.8686599270072386e+00 + CVs 20 + 5.2404041623481945e-03 4.6630127324284026e-01 2.8242088589875258e-02 + -4.4460540107998020e-02 9.1248465489541297e-01 6.8875350508826316e-03 + -1.3466768855440403e-01 1.3403082082213726e+00 -5.5606813002234246e-02 + -2.6701662414813215e-01 1.7368625007049927e+00 -1.6638714639229291e-01 + -4.4238975986660856e-01 2.0732895299500891e+00 -3.3686415844058903e-01 + -6.4788920015777385e-01 2.3172028714864279e+00 -5.7069993958202803e-01 + -8.5357109757192218e-01 2.4434361075433300e+00 -8.5776661276459243e-01 + -1.0220048952472434e+00 2.4507326930070299e+00 -1.1731741058740437e+00 + -1.1357956328583558e+00 2.3638204867155972e+00 -1.4883199922533490e+00 + -1.2165529635834298e+00 2.2126873312213595e+00 -1.7884149951976167e+00 + -1.3002993199525024e+00 2.0068900414116233e+00 -2.0721559666510680e+00 + -1.4049542359678866e+00 1.7388175333196934e+00 -2.3307708295885012e+00 + -1.5397115288791021e+00 1.3963442606762548e+00 -2.5432531733568942e+00 + -1.7216334223217724e+00 9.6317955374760711e-01 -2.6764415177585246e+00 + -1.9682040342229601e+00 4.3024703256678709e-01 -2.6694378714046194e+00 + -2.2728751523771851e+00 -1.3439070790479413e-01 -2.4596029159958936e+00 + -2.6311736620656028e+00 -6.0254748708199246e-01 -2.0571875090282545e+00 + -3.0352805709976720e+00 -8.7099431439477693e-01 -1.5371605400407971e+00 + -3.1693420068896812e+00 -8.8147507637925204e-01 -1.3499513973648229e+00 + id 11697 + loc 7.2994083166122437e-01 9.4491326808929443e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5846466126961988e-01:3.0903253062898822e-01:3.8734344796978126e-02:3.9587324654258443e-01:9.9341088589201221e-01:3.7582803666834746e-01:1.7654792214877051e+00:4.1657841373890253e-01:2.2129267658958907e+00:3.0836052413171505e-01:2.9975731072050129e+00:4.5846007662300720e-01:3.3860774389388526e+00 + CVs 20 + 2.3204524872874910e-01 3.4890713566567044e-01 -3.1356348164285663e-01 + 4.7090942324704160e-01 6.7035283341900587e-01 -6.3286013997910451e-01 + 6.9160530944406606e-01 9.5569021000551768e-01 -9.6907280461201506e-01 + 8.7612031854468730e-01 1.1969283432977305e+00 -1.3222430180120233e+00 + 1.0243283903096077e+00 1.3904299769898867e+00 -1.6776283026899990e+00 + 1.1548097238764767e+00 1.5407781592097896e+00 -2.0113704796841203e+00 + 1.2858732659625427e+00 1.6606885941556377e+00 -2.3075509917006416e+00 + 1.4244631783727240e+00 1.7640911176233309e+00 -2.5642440565197728e+00 + 1.5713586036463705e+00 1.8604024191840476e+00 -2.7875709730241818e+00 + 1.7291427368838996e+00 1.9540117683235847e+00 -2.9899936500460944e+00 + 1.9088095330178709e+00 2.0407323071952455e+00 -3.1887968804114424e+00 + 2.1296451867004214e+00 2.1010585523014744e+00 -3.3998728700695957e+00 + 2.4056585724803163e+00 2.0876230934015800e+00 -3.6382808483069562e+00 + 2.6978174081730275e+00 1.9363863194844066e+00 -3.8961283556051325e+00 + 2.9404574320716859e+00 1.6393128841122666e+00 -4.1303076875058826e+00 + 3.1285953641731017e+00 1.1857807316104789e+00 -4.3018804029042172e+00 + 3.2043974518031093e+00 4.5881153641842976e-01 -4.3767367261059240e+00 + 2.8673547394738939e+00 -3.6686291809924776e-01 -4.3532524213700441e+00 + 2.5873564102828461e+00 -5.3065774596361615e-01 -4.3242615284639072e+00 + id 11698 + loc 7.4037760496139526e-01 4.9938169121742249e-01 1053 + blend 0.0000000000000000e+00 + interp 4.7331248888253225e-01:4.2295723116351164e-01:1.0885389677361967e-04:3.0832064223615413e-01:4.5803303776186655e-01:4.7330775575764344e-01:9.8932430674090466e-01:4.2587166438378998e-01:1.2529694741741251e+00:3.1015096904353473e-01:1.9584442159798359e+00:4.3040308772680796e-01:2.8699694292894606e+00:4.6276068920084634e-01:3.2716136226372257e+00 + CVs 20 + 1.1477278610922537e-01 3.8891791898817196e-01 -2.2789359027958334e-01 + 2.5665621810482625e-01 7.3407195745599341e-01 -4.2975267107198678e-01 + 4.1069616263647224e-01 1.0488887901475494e+00 -6.2497052436529210e-01 + 5.7116795667927212e-01 1.3339035652565685e+00 -8.2003390874060877e-01 + 7.4178367217884500e-01 1.5842634965226445e+00 -1.0134471618861833e+00 + 9.2621981784264751e-01 1.7967316552287080e+00 -1.2031474213152518e+00 + 1.1297215355478705e+00 1.9673112454750084e+00 -1.3895997553763504e+00 + 1.3624993304845971e+00 2.0874944523073200e+00 -1.5717021716255040e+00 + 1.6338790615067085e+00 2.1429827133428034e+00 -1.7348024046172830e+00 + 1.9373173363644742e+00 2.1197033820295568e+00 -1.8545160707322523e+00 + 2.2414826110754253e+00 1.9947034194907771e+00 -1.9024440248627217e+00 + 2.4817384649116496e+00 1.7472415727211354e+00 -1.8523770885524600e+00 + 2.5855877787600572e+00 1.3926457268690382e+00 -1.7040518556621542e+00 + 2.5212652176303134e+00 9.7596609940997570e-01 -1.4576962955517621e+00 + 2.3496266271022286e+00 5.7466574761455314e-01 -1.0841293894452155e+00 + 2.1894305892394197e+00 3.1125095091900767e-01 -5.7817479663227045e-01 + 2.1268346601702022e+00 3.0721088908051503e-01 -3.3074538423688793e-02 + 2.1718128772470515e+00 5.3965171226456654e-01 4.4471698999434617e-01 + 2.2491714738191337e+00 8.0371894315631454e-01 9.9355452084055595e-01 + id 11699 + loc 3.7436714768409729e-01 8.1133238971233368e-02 1054 + blend 0.0000000000000000e+00 + interp 5.6794111127305125e-01:5.6793543186193851e-01:2.8574055830502165e-01:5.5713318483700158e-01:8.0219506202337176e-01:4.5053078181041800e-01:1.0026437724824691e+00:5.6620835250803769e-01:1.7999957495233994e+00:5.4059576944438903e-01:2.2702939448114421e+00:4.5221146699780618e-01:3.0944575726505597e+00:3.8011734625226917e-01:3.9984481993527421e+00 + CVs 20 + -2.3578503789490396e-01 3.5527434913297362e-01 -1.7242002556530511e-01 + -4.1403269154138933e-01 6.9333434171717712e-01 -3.2364273019147882e-01 + -5.3650229718526743e-01 1.0431258374125965e+00 -4.6850413241456790e-01 + -6.0703791790455885e-01 1.4235774177458791e+00 -6.3158877544816738e-01 + -6.4146946424884810e-01 1.8229083410692046e+00 -8.6044468741195312e-01 + -6.6432100583798892e-01 2.2049832927008439e+00 -1.1926339309043270e+00 + -6.9603013122151891e-01 2.5287138226017514e+00 -1.6304318066116330e+00 + -7.4498045208144892e-01 2.7616354287012754e+00 -2.1518210156474193e+00 + -7.9082834300463289e-01 2.8904376501357065e+00 -2.7406747331019594e+00 + -7.8783250054585952e-01 2.9052768216682807e+00 -3.3918923304484867e+00 + -6.7683985924652146e-01 2.7790856670994115e+00 -4.0842618291938164e+00 + -4.1832612135166558e-01 2.4724132749022631e+00 -4.7468230713269985e+00 + -8.7678645040870862e-02 1.9809232087370048e+00 -5.2625907387307134e+00 + 1.2931987652807475e-01 1.4396571260137496e+00 -5.5149109465282091e+00 + 1.7605891845165056e-01 9.9500589585159682e-01 -5.5438496834168660e+00 + 1.8424802599537154e-01 5.3428539407938280e-01 -5.5243394837262860e+00 + 1.9493311542260192e-01 -2.7799048950449129e-02 -5.4591885036785248e+00 + 3.4118874007277250e-01 -3.6235015596757680e-01 -5.2510307037644797e+00 + 7.1156072879260690e-01 -1.7789859729976465e-01 -5.0545844561834343e+00 + id 11700 + loc 8.8600069284439087e-01 3.2224339246749878e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4645569696152509e-01:2.8808070499282545e-01:1.3493127283515705e-02:4.4645123240455548e-01:8.2148273123877125e-01:3.2791442572090135e-01:1.2517523227927876e+00:2.7657483487227758e-01:1.9882345168390869e+00:2.5214805262929818e-01:2.8349556188327267e+00:4.1574967585937217e-01:3.3970644431746049e+00 + CVs 20 + 1.9249463227032426e-01 3.0488732603532498e-01 -7.1922984476864266e-02 + 3.6316690182396277e-01 5.6380771569132460e-01 -8.6385930105491116e-02 + 5.0874293372820834e-01 7.9155777972416719e-01 -7.3945393396057546e-02 + 6.2678182934017079e-01 9.9132206276822465e-01 -4.1913160550824502e-02 + 7.2655471543118966e-01 1.1723377909049497e+00 3.5962378166891296e-02 + 8.1908381164632216e-01 1.3657926841737820e+00 1.6975667825939178e-01 + 9.1068323026551834e-01 1.6192628407882075e+00 3.1305994761707778e-01 + 1.0054200366774810e+00 1.9519859470786836e+00 3.9243924980871170e-01 + 1.1171227598592481e+00 2.3446454032257664e+00 3.6532213870464658e-01 + 1.2797205947500889e+00 2.7557543723549225e+00 2.0713226322226519e-01 + 1.5387076097005727e+00 3.0880301028005688e+00 -9.3532804200428421e-02 + 1.8891361580479531e+00 3.2160097446602216e+00 -4.7426472111516849e-01 + 2.2707926035894612e+00 3.1147928529866591e+00 -8.3789079342381867e-01 + 2.6342168901150966e+00 2.8398384102280527e+00 -1.1238739816034229e+00 + 2.9611203822647965e+00 2.4580880876435334e+00 -1.3069399239029824e+00 + 3.2456875304077615e+00 1.9910724003276361e+00 -1.3867292089857441e+00 + 3.4463897191558837e+00 1.4251620431246796e+00 -1.3448526838863311e+00 + 3.4992827139192739e+00 8.2827598366445743e-01 -1.1630310293931243e+00 + 3.5482877270963602e+00 4.6034416937080302e-01 -1.0577896197449372e+00 + id 11701 + loc 6.7153406143188477e-01 9.3083000183105469e-01 410 + blend 0.0000000000000000e+00 + interp 4.1799570972777489e-01:4.1799152977067761e-01:7.3627132879351365e-01:3.6675349282548647e-01:1.6740403989926025e+00:2.9183089413501173e-01:2.8697523795751554e+00:3.1509471249651144e-01:3.9999982365113387e+00 + CVs 20 + 4.1553084686784875e-01 1.1663566186695927e-01 -2.1471863571564245e-01 + 7.3680285223265507e-01 1.8281487790057677e-01 -3.8303017978271892e-01 + 1.0314217980529907e+00 2.2079296941023313e-01 -5.3184383267061752e-01 + 1.3339734360356796e+00 2.4258363818777884e-01 -6.7200287579607487e-01 + 1.6389786322731679e+00 2.4586731757659919e-01 -7.9976278541325607e-01 + 1.9395975154590417e+00 2.2991453228804770e-01 -9.1044458690278074e-01 + 2.2273647385152242e+00 1.9522762836706575e-01 -9.9935511781209518e-01 + 2.4930810305870867e+00 1.4342139480926419e-01 -1.0631426965948179e+00 + 2.7278625063307675e+00 7.6820248368537625e-02 -1.1014918292116844e+00 + 2.9244526173792948e+00 -1.9316299459344322e-03 -1.1179458779143832e+00 + 3.0807672220081326e+00 -8.8392691506752996e-02 -1.1173868774032023e+00 + 3.2056723864830543e+00 -1.7342213304168830e-01 -1.0975408458578735e+00 + 3.3177737878556761e+00 -2.5002113201652443e-01 -1.0470754800191062e+00 + 3.4321292973010129e+00 -3.3155023972725561e-01 -9.6829498812566295e-01 + 3.5486723927859329e+00 -4.4032330826095900e-01 -8.8108175600116279e-01 + 3.6612183856841716e+00 -5.8500712523092036e-01 -7.9711647472457781e-01 + 3.7661173136855077e+00 -7.6685078730659484e-01 -7.1948090439906653e-01 + 3.8545686179374030e+00 -9.8394942831472543e-01 -6.5705986320836984e-01 + 3.8443672173064023e+00 -1.2532227891162815e+00 -7.0225932191080997e-01 + id 11702 + loc 6.0992670059204102e-01 6.0355240106582642e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9382884255569176e-01:3.9640346048678321e-01:6.5056166152110961e-04:3.9215646790476266e-01:8.3103026244606237e-01:4.3625404891950487e-01:1.0691875179443071e+00:4.9382390426726624e-01:1.6049345352568110e+00:3.9887613207391065e-01:1.9968865558852587e+00:4.3860668135172681e-01:2.8346787535443196e+00:4.6276068920084634e-01:3.2793670653204812e+00 + CVs 20 + -8.3445415810001922e-02 3.8624371281127090e-01 2.8349433711915017e-01 + -1.9470498511341028e-01 7.2077026265423549e-01 5.2532993072043266e-01 + -3.1493282309473858e-01 1.0375724056742150e+00 7.5819541287401959e-01 + -4.4260400787316490e-01 1.3465065651720827e+00 9.9599413563684558e-01 + -5.9323826906841959e-01 1.6396669182092889e+00 1.2400740035830227e+00 + -7.8350577418363054e-01 1.9012746105978069e+00 1.4891151389142703e+00 + -1.0286868604308337e+00 2.1065992766646664e+00 1.7376198761298993e+00 + -1.3353586238010360e+00 2.2264499284787553e+00 1.9681656826725842e+00 + -1.6914071525591461e+00 2.2353829196997288e+00 2.1489114929897881e+00 + -2.0556636962144648e+00 2.1171696804167963e+00 2.2473990776638431e+00 + -2.3601245627455714e+00 1.8698696914451882e+00 2.2438443531945924e+00 + -2.5385841341103221e+00 1.5195889065619357e+00 2.1433636172994150e+00 + -2.5603464877103996e+00 1.1141491631656859e+00 1.9698437798576687e+00 + -2.4448386618614322e+00 7.0199993959845153e-01 1.7305918205284025e+00 + -2.2552029698733103e+00 3.3442852612323382e-01 1.4074021275078357e+00 + -2.0603784914696046e+00 7.9189783623799526e-02 9.9390569606863211e-01 + -1.9032457649979602e+00 -7.0609456117975977e-04 5.3366452239489748e-01 + -1.7916582033399180e+00 7.4702384603972050e-02 1.0784593214824006e-01 + -1.7011576500730001e+00 1.8663719921225824e-01 -2.3117051723592327e-01 + id 11703 + loc 2.3347002267837524e-01 8.4425967931747437e-01 1048 + blend 0.0000000000000000e+00 + interp 4.4901188727055580e-01:3.9957358206028032e-01:5.0178296333963757e-02:4.2902989448457057e-01:1.0052742201523985e+00:3.4704277954272766e-01:1.9756124618930748e+00:4.4900739715168314e-01:2.8392400786614216e+00:3.5416094995549879e-01:3.4828279894317253e+00 + CVs 20 + 2.0752008722889770e-01 6.0361781595002129e-01 -2.8361293818052979e-01 + 4.0353185657233737e-01 1.2227318354733467e+00 -4.9281319051394917e-01 + 6.3604290442376188e-01 1.8661048064250727e+00 -5.9449598179660590e-01 + 9.5871561557640417e-01 2.5212793426148616e+00 -5.7423552216217189e-01 + 1.4284265879066425e+00 3.1280999356523247e+00 -4.5202290590524596e-01 + 2.0675738506164874e+00 3.5896364554294977e+00 -3.0011907587043396e-01 + 2.8316685719857193e+00 3.8145810494551067e+00 -1.9053231159323469e-01 + 3.6272713176878209e+00 3.7570494859477694e+00 -1.5908748416817065e-01 + 4.3439183748779824e+00 3.4129118231881050e+00 -2.1294059874045168e-01 + 4.8745288976639571e+00 2.8209058766980220e+00 -3.2496502874915389e-01 + 5.1288618912516952e+00 2.0630801964770651e+00 -4.2321160929410440e-01 + 5.0723295653665721e+00 1.2668607231155673e+00 -4.3206319314414954e-01 + 4.7633916621113270e+00 5.4616735935567495e-01 -3.2770827274655645e-01 + 4.3131914397352480e+00 -5.4268739547193495e-02 -1.3782462813666457e-01 + 3.8370561674281518e+00 -5.7867146848152407e-01 8.7924383486525426e-02 + 3.5479501840269281e+00 -1.3200738594204706e+00 4.5677947256351570e-01 + 4.5644743550882154e+00 -1.0689124625751365e+00 1.6337969304990274e+00 + 4.5263468042920065e+00 -7.0726670543960646e-01 1.8266308966129419e+00 + 4.5271334806268868e+00 -1.5031100696189503e-01 2.1214632973297785e+00 + id 11704 + loc 1.8320348858833313e-01 4.8029834032058716e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4758300129382361e-01:3.5328393619719745e-01:3.7368135452486739e-02:2.8053346782521110e-01:9.1738784637077719e-01:4.0223608454903376e-01:1.3992372073659258e+00:4.4757852546381072e-01:2.0147327884659005e+00:3.6071992782454981e-01:2.7832440109345802e+00:2.7368826642274047e-01:3.0880818139468209e+00 + CVs 20 + -1.6242065628982497e-01 2.0808016939742144e-01 6.5590734179841695e-02 + -3.4558621153755886e-01 4.0869740550660716e-01 1.2995090741232002e-01 + -5.3179095951590316e-01 6.0129917599535221e-01 2.0232239320022477e-01 + -7.1538794867999189e-01 7.8927180992091883e-01 2.8553576290533328e-01 + -9.0828416105870224e-01 9.6875050776009652e-01 3.7068442179500710e-01 + -1.1124196906320485e+00 1.1335634550714424e+00 4.5326432845726333e-01 + -1.3210256079281109e+00 1.2849762584598952e+00 5.3548109788579923e-01 + -1.5294215437778564e+00 1.4335762640327467e+00 6.2140971499070863e-01 + -1.7335466200228153e+00 1.5861120683388406e+00 7.1025802885885814e-01 + -1.9218687098835341e+00 1.7344116213411180e+00 7.9589423095714507e-01 + -2.0741195366881140e+00 1.8631891924738992e+00 8.7325620776860091e-01 + -2.1689956096008012e+00 1.9682022664442134e+00 9.3966848574700979e-01 + -2.2246533733002334e+00 2.0576506153203260e+00 9.9135140521137288e-01 + -2.3162018917694591e+00 2.0943339238588550e+00 1.0310186834922916e+00 + -2.4498034083910398e+00 2.0252512123708351e+00 1.0593330101818303e+00 + -2.5602094833559970e+00 1.8828609872246653e+00 1.0593073841081022e+00 + -2.6144969248860201e+00 1.7271035137715671e+00 1.0186287647852872e+00 + -2.6417769292338242e+00 1.5434441882437961e+00 9.5409546877506723e-01 + -2.7381788159293663e+00 1.1200024528277026e+00 9.6512942677083247e-01 + id 11705 + loc 9.8719507455825806e-01 4.3089714646339417e-01 1090 + blend 0.0000000000000000e+00 + interp 5.5098749853726703e-01:3.3189167797347402e-01:2.6466019672821983e-01:1.9242977590604010e-01:9.9257603622616308e-01:2.5449627350137588e-01:1.8053065937537314e+00:4.2500371893871131e-01:2.0104043212186613e+00:5.5098198866228165e-01:2.3779328701747806e+00:5.0312750600180733e-01:2.9587475497337969e+00:3.4027796920530928e-01:3.1442486155562515e+00:4.8937591748843928e-01:3.9992763626929970e+00 + CVs 20 + -9.1606496988686337e-02 5.1022537311878779e-01 -1.2917809715841591e-01 + -5.9580039315515587e-02 9.4176197247448712e-01 -2.0787936678404831e-01 + 2.4295681632663158e-02 1.3279491742573315e+00 -2.5641673915950669e-01 + 1.3969163825738573e-01 1.6661790980382309e+00 -2.7666509653675458e-01 + 2.8447143328994229e-01 1.9372442316526679e+00 -2.6643454917263870e-01 + 4.4981870655163714e-01 2.1212766169492436e+00 -2.3142266350183305e-01 + 6.1893360140993325e-01 2.2138400031465073e+00 -1.8417659298815697e-01 + 7.7819780694047425e-01 2.2355240451357967e+00 -1.3250549741883616e-01 + 9.2255484712270852e-01 2.2093405551537062e+00 -7.6506928433200005e-02 + 1.0443687090053400e+00 2.1503428022635798e+00 -2.0343265480529282e-02 + 1.1354410157200769e+00 2.0736424899693446e+00 3.1525887209817027e-02 + 1.1917619525832288e+00 1.9936465289135863e+00 7.9733110869815493e-02 + 1.2096638069921188e+00 1.9260808821674773e+00 1.2754988155852592e-01 + 1.1854457086598256e+00 1.8880776883521737e+00 1.8677523922285666e-01 + 1.1221846823856969e+00 1.8856678320573770e+00 2.8388497957242381e-01 + 1.0409770665702196e+00 1.8654455091072712e+00 4.3098627403394230e-01 + 9.5701966628843693e-01 1.7516094891776448e+00 5.7896441836706769e-01 + 9.0146755390917610e-01 1.5260601767358333e+00 6.2191161348765223e-01 + 9.8729573571983043e-01 1.3157652838863969e+00 3.7067534320817525e-01 + id 11706 + loc 7.7344030141830444e-01 6.3694548606872559e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6934258321648326e-01:2.9575231155308701e-01:2.7802671862723960e-01:3.3501349900810479e-01:1.0038941545810258e+00:4.2811207321781625e-01:1.9197856140182141e+00:2.8898952602654870e-01:2.3314307882640257e+00:4.6933788979065111e-01:2.9223618308114228e+00:3.1028263881451706e-01:3.6245555220957422e+00 + CVs 20 + -2.2736308118323173e-01 2.9440688690511024e-01 1.9863776760927510e-01 + -4.3867198031996080e-01 5.9182347997628326e-01 3.9241118227515392e-01 + -6.3633776473207526e-01 9.0507811745334099e-01 5.9292671703609556e-01 + -8.3811731336184614e-01 1.2410507484474207e+00 7.9256332988235045e-01 + -1.0738212001961336e+00 1.5959847212063358e+00 9.6267975472309475e-01 + -1.3659182743381730e+00 1.9561371569006301e+00 1.0676224623552386e+00 + -1.7190870246075818e+00 2.2968351599707511e+00 1.0689633813790658e+00 + -2.1117356532049354e+00 2.5805388161577834e+00 9.2741561900756464e-01 + -2.4813963252227804e+00 2.7589296686198730e+00 6.2375801267685049e-01 + -2.7556673180111786e+00 2.8084991614626551e+00 1.9600862462979340e-01 + -2.9154062287125218e+00 2.7357013323048260e+00 -2.9439175529958872e-01 + -2.9866951510318041e+00 2.5245964432127654e+00 -7.9581287151299684e-01 + -3.0005953302959822e+00 2.1566262649595243e+00 -1.2395493834415281e+00 + -2.9608158263445130e+00 1.7224145714349515e+00 -1.5796594424460773e+00 + -2.8627976970444160e+00 1.3748221007106700e+00 -1.8609941510787018e+00 + -2.7420166865976947e+00 1.2192135352098599e+00 -2.1157704678053304e+00 + -2.6641982133434565e+00 1.2669139954161686e+00 -2.3066026625233507e+00 + -2.6329633621161559e+00 1.3861974447275835e+00 -2.4378613153691129e+00 + -2.4901964359269502e+00 1.3168008826561375e+00 -2.8246828456577373e+00 + id 11707 + loc 2.4253176152706146e-01 8.3737474679946899e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3754906695856066e-01:3.2805532153551353e-01:4.4927510514090163e-01:4.0492410529998246e-01:9.9102882818062588e-01:4.3754469146789110e-01:1.4335256362776736e+00:3.7945915120960172e-01:1.9876091452760427e+00:3.8283301427267469e-01:2.7461864350221390e+00:2.5728745708105938e-01:3.1263483726724126e+00:3.6885506857803185e-01:3.9984412024211693e+00 + CVs 20 + 2.6959751064387261e-01 3.6092559129900403e-01 -2.8852684621497449e-01 + 5.4275156869009733e-01 7.0605127909452958e-01 -6.0402937268738166e-01 + 8.2121277721892572e-01 1.0320002661598715e+00 -9.3506866980257641e-01 + 1.1025306189438309e+00 1.3323100790174585e+00 -1.2733737956650226e+00 + 1.3630681271011911e+00 1.5803335861918437e+00 -1.6196398346154857e+00 + 1.5572004378128246e+00 1.7301075247750273e+00 -1.9751911714120305e+00 + 1.6482382217593692e+00 1.7434497846866193e+00 -2.3077857427740969e+00 + 1.6241958660413063e+00 1.6128848369944202e+00 -2.5259909341371336e+00 + 1.5276242200015457e+00 1.4179156078442132e+00 -2.5806578491132006e+00 + 1.4212113848282111e+00 1.2232303197534595e+00 -2.5700248622040487e+00 + 1.3282599290883712e+00 9.8902985717977676e-01 -2.5864131100057102e+00 + 1.2648477038419441e+00 6.3685288149983676e-01 -2.6747186517796240e+00 + 1.2704127573849160e+00 1.1385356237581853e-01 -2.8695415243090214e+00 + 1.4018453051397362e+00 -5.5722607533426738e-01 -3.2496429114702292e+00 + 1.7033750491281747e+00 -1.2280257005961919e+00 -3.9447934958432622e+00 + 2.1782388456460366e+00 -1.5813262776041239e+00 -5.0596408955064307e+00 + 2.6844663905781112e+00 -1.1822269614614189e+00 -6.3881122978829055e+00 + 2.9350210903705189e+00 -4.2451077634668305e-01 -7.2332694541525226e+00 + 3.0002297168069965e+00 -1.9236143534052008e-01 -7.6023429692767559e+00 + id 11708 + loc 4.5075935125350952e-01 7.0627093315124512e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4308282416350986e-01:2.8877199425728761e-01:9.5134232356976900e-01:4.4307839333526822e-01:1.6528750545904050e+00:4.3571907478185229e-01:2.0058733177041033e+00:3.0514946638851365e-01:2.4805274494407534e+00:3.3081089493887861e-01:3.0900857522922962e+00:3.0633597295697484e-01:3.9984715439444662e+00 + CVs 20 + 2.4118251701080121e-01 2.4411569953335843e-01 -2.2467868832315813e-01 + 4.4818654615363074e-01 5.1353837989252082e-01 -4.6222892041355768e-01 + 6.5549443277457442e-01 7.5600576657575880e-01 -7.2794948799410830e-01 + 8.7583741636849799e-01 9.4561604789446885e-01 -1.0259737051449560e+00 + 1.1082137925585951e+00 1.0683405656302367e+00 -1.3456246054177639e+00 + 1.3565225446093001e+00 1.1151091703509894e+00 -1.6685130653640110e+00 + 1.6263313651971765e+00 1.0853838931901356e+00 -1.9750461913018329e+00 + 1.9196390644094787e+00 9.8686245481822299e-01 -2.2506547457960178e+00 + 2.2330106475312070e+00 8.3178088998805966e-01 -2.4872254389637325e+00 + 2.5592981092471909e+00 6.3400068123864584e-01 -2.6871587228085287e+00 + 2.8872779954210182e+00 4.0433710904130060e-01 -2.8633205066430700e+00 + 3.1972908350439728e+00 1.4670559650702675e-01 -3.0307316382689597e+00 + 3.4602967834210738e+00 -1.4184774226756969e-01 -3.2040304917605971e+00 + 3.6405244203903302e+00 -4.6682220316026179e-01 -3.4053663668449197e+00 + 3.6842311094494535e+00 -8.2313918592736046e-01 -3.6685582207505685e+00 + 3.5238989479277389e+00 -1.1543799577605489e+00 -4.0264772997549763e+00 + 3.1862573780089161e+00 -1.3212464456109441e+00 -4.5030251359205566e+00 + 2.8411024756146066e+00 -1.2281533451095292e+00 -5.0372916885440162e+00 + 2.7560745341370980e+00 -1.2961408753732964e+00 -5.3683963036700160e+00 + id 11709 + loc 8.6952173709869385e-01 5.1481044292449951e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9395361497715820e-01:2.1803397548115719e-01:1.1051994470552273e-01:2.7256751022546649e-01:1.0092516520907227e+00:3.2822351021600610e-01:1.9759725172256153e+00:3.6619003210954054e-01:2.3553785523744826e+00:3.9394967544100845e-01:2.8899968742023661e+00:3.3021059256878504e-01:3.6314657087506657e+00 + CVs 20 + 2.2246792641502428e-01 4.4197640691826906e-01 -3.1726590036649754e-01 + 4.2662551111034464e-01 8.9252528872064474e-01 -5.5189301823313119e-01 + 6.0054313126334602e-01 1.3683586157976639e+00 -7.0586729942924009e-01 + 7.9731370280119518e-01 1.8306064159007807e+00 -8.1028437957867527e-01 + 1.0851791529173334e+00 2.2050519371212101e+00 -9.1181673740486491e-01 + 1.4686413323488439e+00 2.4338232664442017e+00 -1.0395001494689535e+00 + 1.9045292765109643e+00 2.4966802342450398e+00 -1.1899029389326616e+00 + 2.3517682034245229e+00 2.4057345559830257e+00 -1.3356075776080449e+00 + 2.7810069275553202e+00 2.1977209674155969e+00 -1.4388826643722414e+00 + 3.1653226691550143e+00 1.9456117476636741e+00 -1.4713330171614576e+00 + 3.4752707114152681e+00 1.7460913794655719e+00 -1.4450917702942863e+00 + 3.6617082446313223e+00 1.6592695900776238e+00 -1.4063885094753019e+00 + 3.6531474402771011e+00 1.6619739770374524e+00 -1.3398059716137087e+00 + 3.5646751535084973e+00 1.6606104602782767e+00 -1.1501080432702526e+00 + 3.6423987515862613e+00 1.6841462864225138e+00 -9.6829862481861251e-01 + 3.8502597681526565e+00 1.8151668829247050e+00 -9.8864276873538925e-01 + 4.1313912363378602e+00 2.0820835978402341e+00 -1.3747830856460310e+00 + 4.5764616737319725e+00 2.3021710143517646e+00 -2.1114727954784493e+00 + 4.6748410283520370e+00 2.2453624589215284e+00 -2.2086286593827729e+00 + id 11710 + loc 5.7720226049423218e-01 7.3531579971313477e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2751295205640727e-01:3.4661357440953133e-01:4.2074825497743906e-01:4.2750867692688671e-01:1.0011635192564303e+00:3.0283411809002236e-01:1.4397469000366658e+00:3.9013267898485837e-01:2.0314261436236531e+00:3.1491574973060732e-01:2.9916459863980078e+00:3.3708814586224123e-01:3.8506207046475156e+00 + CVs 20 + -1.0863271263934829e-01 4.4746960800149216e-01 1.8602903220087380e-01 + -2.5456750718850596e-01 8.4466673798061154e-01 2.8873702677944113e-01 + -4.3719332778495634e-01 1.2083796275873318e+00 3.4323776459783084e-01 + -6.5664631443074617e-01 1.5344385487960515e+00 3.5675276495172553e-01 + -9.0692586773627037e-01 1.8014213629441629e+00 3.2033578694499565e-01 + -1.1706453271237702e+00 1.9887150603822505e+00 2.3059068510597569e-01 + -1.4207331160355996e+00 2.0817252282974881e+00 9.2811474781589576e-02 + -1.6289680549146661e+00 2.0793486425575076e+00 -7.7273393785495692e-02 + -1.7801909388781962e+00 1.9940429754239224e+00 -2.5818074808718494e-01 + -1.8841554845761930e+00 1.8410892940224566e+00 -4.3288585717526701e-01 + -1.9622144372089669e+00 1.6260335034944882e+00 -5.9121563952846334e-01 + -2.0205982942543455e+00 1.3488113044929271e+00 -7.1717560111967382e-01 + -2.0547983583813609e+00 1.0148627577509435e+00 -7.8671174295680402e-01 + -2.0658474210063362e+00 6.3313292885239303e-01 -7.7415164279011250e-01 + -2.0592733895192863e+00 2.1970191648500625e-01 -6.4683130579173431e-01 + -2.0492507689501993e+00 -1.9577203715171748e-01 -3.8744572277176093e-01 + -2.0949630013969873e+00 -6.1396649312725993e-01 1.1016217561819253e-02 + -2.2686919107355039e+00 -1.0024178044553775e+00 5.7687113100225829e-01 + -2.2895173677296308e+00 -1.3313445379992062e+00 9.6624310441177141e-01 + id 11711 + loc 9.0704536437988281e-01 2.5811207294464111e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3563326434652988e-01:4.3562890801388643e-01:5.4225158685296027e-01:2.9921842273678317e-01:1.0037245710675007e+00:2.5594849427793348e-01:1.8376137300808320e+00:4.2600615059371583e-01:2.2512997545276323e+00:4.3063242167713267e-01:2.9556940185848846e+00:2.3198076379693541e-01:3.5305371661911606e+00:4.3260855746067334e-01:3.9940157411125954e+00 + CVs 20 + -1.0122326495835685e-01 4.6663943496589921e-01 6.6115985013464620e-02 + -1.7264497471754653e-01 9.3627435667523473e-01 1.5120165963529716e-01 + -2.0161529361629857e-01 1.3923766676461882e+00 2.2192814435026900e-01 + -1.8155940669485576e-01 1.8165570814479295e+00 2.5052497835748111e-01 + -1.2584270373440531e-01 2.2300184280025870e+00 2.4823877720412496e-01 + -6.6469131799444081e-02 2.7021210625454199e+00 2.9349437450713445e-01 + -6.1173683396707368e-02 3.2283138264610107e+00 5.2473027794722016e-01 + -1.7620166665305215e-01 3.6532701699893262e+00 9.8369351361255009e-01 + -4.4127404943356296e-01 3.8572135140072170e+00 1.5521101083968927e+00 + -8.2663719149344539e-01 3.8451646735492049e+00 2.0539620080577321e+00 + -1.2594656477021626e+00 3.7221069914212137e+00 2.3899156314791528e+00 + -1.6951547951664063e+00 3.5700676154560571e+00 2.5791940613828861e+00 + -2.1359407160757100e+00 3.4025425148029527e+00 2.6677489172413500e+00 + -2.6244389264088035e+00 3.1740362123554999e+00 2.6751983481256922e+00 + -3.1721211846112363e+00 2.8089541654436108e+00 2.5813591390278514e+00 + -3.6941180728250185e+00 2.2595263997880535e+00 2.3431081218709529e+00 + -4.0605779842182939e+00 1.5109937870717594e+00 1.8662399478767953e+00 + -4.0846219553469707e+00 8.1475082488853434e-01 1.1338882833361714e+00 + -4.0373672303668116e+00 6.6851043911126784e-01 7.5115407689504421e-01 + id 11712 + loc 8.9470070600509644e-01 9.2113333940505981e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9878613076842168e-01:3.0506737365974607e-01:7.6171766784631645e-01:3.3290329453977829e-01:1.2468148407780264e+00:2.7921271628338307e-01:2.0742762921416373e+00:3.9878214290711400e-01:2.8265436383808842e+00:3.8278375096991346e-01:3.1397348444321014e+00:3.0289342488555721e-01:3.8933826102504492e+00 + CVs 20 + -2.3702641679429476e-01 2.5939892042797164e-01 6.5574986903219640e-02 + -4.2330887771469838e-01 5.0265736365626223e-01 1.4347957397097233e-01 + -5.5637124550148265e-01 7.3990447904145207e-01 2.5109557511724445e-01 + -6.5554062250876743e-01 9.8413731817034833e-01 3.8200111877578735e-01 + -7.6694068125896386e-01 1.2464724227644284e+00 4.9282939120192726e-01 + -9.2680732627340412e-01 1.5115173450683910e+00 5.3475360645218395e-01 + -1.1399177141778654e+00 1.7457375261601800e+00 5.0099343083092662e-01 + -1.4043176730460001e+00 1.9223439785034382e+00 4.0579832749195299e-01 + -1.6950818331859465e+00 2.0237914335197873e+00 2.4309283786987068e-01 + -1.9321277245568149e+00 2.0418763826617239e+00 1.3101910952448392e-02 + -2.0727207550874374e+00 2.0020302870251721e+00 -2.4793649922816607e-01 + -2.1443333448455522e+00 1.9421650543872329e+00 -5.2738198913169698e-01 + -2.1444460338480198e+00 1.8717416835246645e+00 -7.8996080988352835e-01 + -2.0284120204542253e+00 1.7769142920304781e+00 -8.8247162854983463e-01 + -1.7684089465950095e+00 1.6125044509347766e+00 -6.9521293791186223e-01 + -1.3445549727302455e+00 1.2213248427890782e+00 -3.3970775415676424e-01 + -7.5295649049697877e-01 3.8823146120700680e-01 -1.4243516450248708e-01 + -2.0218888384580497e-01 -5.6752789948900384e-01 -5.6696891727786869e-01 + -1.2720518620687365e-01 -6.5570000576921339e-01 -7.7329387666294702e-01 + id 11713 + loc 2.4262498319149017e-01 7.5395870208740234e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5699880807323778e-01:3.2020631876568745e-01:7.4981597778939291e-01:3.5794468754709902e-01:1.5336791556848004e+00:4.5699423808515705e-01:2.1438571185878330e+00:3.8327963281312111e-01:2.9890860776191168e+00:4.4576190572754731e-01:3.3751781136709331e+00:3.6779042408386892e-01:3.9779633973244115e+00 + CVs 20 + 6.3698322330992402e-02 2.5911886332911926e-01 -9.8892079157665680e-02 + 1.3341734715578607e-01 5.1072187764711463e-01 -2.0976022933713193e-01 + 2.0836006539145582e-01 7.4603828989167953e-01 -3.1836717143348020e-01 + 2.8788820241668039e-01 9.6446722732809453e-01 -4.2026559395253621e-01 + 3.6752022708495868e-01 1.1682449063594837e+00 -5.2050443486256326e-01 + 4.4408779878194554e-01 1.3602839872075514e+00 -6.2448525919080444e-01 + 5.1947831768561947e-01 1.5444376612106936e+00 -7.3673831085628450e-01 + 5.9659227004979365e-01 1.7321777448138440e+00 -8.5965393865455653e-01 + 6.7953278633726211e-01 1.9439656632741678e+00 -9.9553733305053793e-01 + 7.7897031342503609e-01 2.1998569070112803e+00 -1.1556510968828921e+00 + 9.1009713433859429e-01 2.4991975037984338e+00 -1.3698403447407570e+00 + 1.0840431507737689e+00 2.7996454116862743e+00 -1.6769216493626671e+00 + 1.2876043294318427e+00 3.0222542951570146e+00 -2.0910474383619970e+00 + 1.4729024433772011e+00 3.0906871841929635e+00 -2.5659195907996262e+00 + 1.6123986397110146e+00 2.9864203240804854e+00 -3.0266610964986724e+00 + 1.7264251918559488e+00 2.7301958279919591e+00 -3.4337432418267024e+00 + 1.8119842091607123e+00 2.3483729122059493e+00 -3.7689796292494910e+00 + 1.7989518480547844e+00 1.8984026282621649e+00 -4.0179079705421019e+00 + 1.6126453414759498e+00 1.4972306026108790e+00 -4.1465395934404983e+00 + id 11714 + loc 8.3697342872619629e-01 7.1778959035873413e-01 1090 + blend 0.0000000000000000e+00 + interp 1.8722037176890052e+00:4.6072571240672927e-01:3.0658505323573726e-02:1.5027767010072439e+00:4.7298904479367898e-01:1.8721937176890051e+00:6.3408849047324667e-01:5.0658241792799141e-01:2.0198090759660485e+00:4.6824869884928855e-01:2.8627495476996545e+00:5.5027208490817525e-01:3.0330394235477138e+00:5.7025966173471621e-01:3.4405008560026995e+00 + CVs 20 + 2.7251398250654235e-01 4.6191987300039289e-01 1.2697842468048307e-01 + 4.1065037356262690e-01 8.2906698721166716e-01 2.1721060270353645e-01 + 4.9788823988469105e-01 1.1579104703831251e+00 2.9945842131402289e-01 + 5.6931269593652822e-01 1.4659737098555845e+00 3.8447904293802876e-01 + 6.2555897293335239e-01 1.7502671034256752e+00 4.6695126747068283e-01 + 6.7352029160885019e-01 2.0194339493154887e+00 5.4640030777835391e-01 + 7.1056688344578556e-01 2.3148338716170205e+00 6.1547873456055791e-01 + 6.8041169327926132e-01 2.6807281665375022e+00 6.2485771840038540e-01 + 5.1513952658424333e-01 3.0251142835151672e+00 5.2006476488200581e-01 + 2.7745641194610271e-01 3.2232974406007071e+00 3.5189846847935669e-01 + 4.5297640290608010e-02 3.2928042746249782e+00 1.7636983001422268e-01 + -1.5915935659575875e-01 3.2818781235353778e+00 1.3686492055858812e-03 + -3.2604238139122610e-01 3.2212462588400772e+00 -1.8290539613231604e-01 + -4.5302813908209305e-01 3.1257889153053702e+00 -4.0325747867646833e-01 + -5.4778074980286484e-01 2.9819143499753027e+00 -6.8386318017939063e-01 + -5.8696279151195374e-01 2.7506415664048860e+00 -9.8933433594213960e-01 + -5.1587014312174895e-01 2.3908084490946018e+00 -1.2739887234943443e+00 + -3.8343136025710062e-01 1.9227365272518941e+00 -1.3844275295245625e+00 + -3.8752510534304735e-01 1.7821738708434913e+00 -1.0863431144427065e+00 + id 11715 + loc 4.4858416914939880e-01 4.0300995111465454e-01 1085 + blend 0.0000000000000000e+00 + interp 4.8925917188075396e-01:3.1518415876293732e-01:8.4088708316719474e-01:3.8900494565263372e-01:1.1337892259672120e+00:3.2654363613486664e-01:2.0656249998300575e+00:3.8521544225755655e-01:2.9352182314311248e+00:4.8925427928903520e-01:3.3087021557080578e+00:3.9469314714360110e-01:3.9557441845699941e+00 + CVs 20 + 2.9904139447578471e-01 4.0527128894207853e-01 1.9917764270580629e-01 + 5.0569722396031003e-01 7.7799145581612050e-01 3.8952651804247612e-01 + 6.6389389128193588e-01 1.1399546053155745e+00 5.9317174328213784e-01 + 7.8225312662894364e-01 1.4993692074663194e+00 8.2836975120595069e-01 + 8.4552071280378738e-01 1.8443281380630137e+00 1.1034809411547069e+00 + 8.4095179468025127e-01 2.1589114553716202e+00 1.4182671796904680e+00 + 7.6071236327447289e-01 2.4254629639701859e+00 1.7623840619198825e+00 + 6.0460744260954002e-01 2.6289094099467567e+00 2.1174348215319903e+00 + 3.7999428323127726e-01 2.7598996461332419e+00 2.4654199142467590e+00 + 9.9088243300091472e-02 2.8125875320943701e+00 2.7953761527418033e+00 + -2.2157114727364713e-01 2.7813412768360584e+00 3.1047009964656862e+00 + -5.6129669445393626e-01 2.6592977924804404e+00 3.3967920422206164e+00 + -8.9568800747720134e-01 2.4394427740776328e+00 3.6745801249000554e+00 + -1.1975966321953808e+00 2.1168061926716244e+00 3.9370203173703335e+00 + -1.4331266389255857e+00 1.6952020637603429e+00 4.1818473519832473e+00 + -1.5543382631430815e+00 1.2281197393795140e+00 4.3891351769967182e+00 + -1.5535164442493050e+00 7.9181417555999822e-01 4.5305432789911171e+00 + -1.4534146222372788e+00 4.1123907140434113e-01 4.6263959747411745e+00 + -1.2119115164794176e+00 2.3053358288099524e-01 4.7737927776724858e+00 + id 11716 + loc 6.5591180324554443e-01 4.2240482568740845e-01 410 + blend 0.0000000000000000e+00 + interp 4.5616226695122974e-01:2.7253223215495348e-01:9.0945519218335413e-01:3.7069481629687906e-01:1.3739643014755252e+00:2.8011087362544329e-01:1.9969836936759835e+00:4.5615770532856026e-01:2.6869465698080672e+00:3.2095402132545608e-01:3.2229575724658051e+00:3.5162784834212640e-01:3.9939774260718157e+00 + CVs 20 + -4.5396253881856796e-01 4.1009794785014214e-01 7.6864363843496861e-02 + -8.3954004400594984e-01 7.6690159076869402e-01 1.5915009601217575e-01 + -1.2264546396774516e+00 1.1032584080077574e+00 2.3925733095025006e-01 + -1.6508244425025573e+00 1.4164345787622112e+00 3.4348722967370471e-01 + -2.1162310879507666e+00 1.6725192206583859e+00 5.0616336827791009e-01 + -2.6044829818262434e+00 1.8260234073905299e+00 7.5433404155282302e-01 + -3.0687216648713038e+00 1.8420969076360072e+00 1.0828650115272158e+00 + -3.4701895366577862e+00 1.7169164789762463e+00 1.4492556728322898e+00 + -3.7994653311411106e+00 1.4624376228273450e+00 1.8035119397730630e+00 + -4.0511331554064514e+00 1.0959890279322964e+00 2.0967471305303347e+00 + -4.2145833204718173e+00 6.5265530998216414e-01 2.2912198130812582e+00 + -4.2997775169067571e+00 1.5918957516665566e-01 2.3964301639815648e+00 + -4.3415173182089948e+00 -4.0129773906597399e-01 2.4581805919156747e+00 + -4.3847272031152134e+00 -1.0519756823762381e+00 2.5459589929315150e+00 + -4.4718265163550965e+00 -1.7809587884441427e+00 2.7387109620295531e+00 + -4.6238624491653262e+00 -2.5270296823627247e+00 3.0662933059885971e+00 + -4.8399738428734089e+00 -3.2329558533726188e+00 3.4850098404780332e+00 + -5.1071186082755595e+00 -3.8812138117380512e+00 3.9462230820304298e+00 + -5.3733619218012523e+00 -4.4605677279981641e+00 4.4241725702677677e+00 + id 11717 + loc 9.8856520652770996e-01 9.3562316894531250e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3254268218808531e-01:5.3253735676126346e-01:1.5517064270412839e-01:4.3583833358227736e-01:7.8476067756835988e-01:3.6110742302161586e-01:1.8173409272201888e+00:3.4402509777199797e-01:2.6805370382481550e+00:2.9919857272235206e-01:3.1017519546826700e+00:4.1781878825763813e-01:3.8341595303156808e+00 + CVs 20 + -4.8905453780661412e-02 1.8417384670354231e-01 3.0964920674923169e-01 + -1.3326322383090891e-01 3.2679215200243017e-01 5.6604557898891639e-01 + -2.3997973030958281e-01 4.5945912171155839e-01 7.9855550847609158e-01 + -3.6406890553601967e-01 5.9818557699380481e-01 1.0148416609993467e+00 + -5.3727744233229724e-01 7.5996784915774185e-01 1.2148391190301988e+00 + -7.6864155027961956e-01 9.8049839864300625e-01 1.3973962826223438e+00 + -9.8126662902101702e-01 1.2909367311227418e+00 1.5589359866290073e+00 + -1.0811005689156201e+00 1.6655859085536648e+00 1.6944463898204287e+00 + -1.0493850274212604e+00 2.0600007355133014e+00 1.8140399254024420e+00 + -9.0009485228702890e-01 2.4434860250775250e+00 1.9522995063930559e+00 + -6.4466566389441016e-01 2.7622977805646221e+00 2.1598461443095780e+00 + -3.1416165329866552e-01 2.9378155863963178e+00 2.4522601100666792e+00 + 4.0025905943660511e-02 2.9379366547841288e+00 2.7876012107032038e+00 + 3.6940706051970218e-01 2.7817264581824448e+00 3.1111824770446788e+00 + 6.3809960180088465e-01 2.5099327087276588e+00 3.3896798928966145e+00 + 8.2759756501149329e-01 2.1630642543679306e+00 3.6210101578622700e+00 + 9.2645978221264458e-01 1.7686726996993090e+00 3.8054026785147155e+00 + 9.2712967929574064e-01 1.3663353932147175e+00 3.9158836431618465e+00 + 8.4497552821707056e-01 1.1440560955842156e+00 3.8809328303794977e+00 + id 11718 + loc 7.4685651063919067e-01 1.3958963751792908e-01 1048 + blend 0.0000000000000000e+00 + interp 5.8179394879211299e-01:2.8389903028149849e-01:4.7795112599941014e-01:2.4023642612292515e-01:1.1282687195678116e+00:5.8178813085262515e-01:1.9985478663701572e+00:4.8749897423377941e-01:2.2868475964811656e+00:3.1820080241557930e-01:2.8309436314057863e+00:3.0698362672578827e-01:3.2124972882595664e+00:2.8169221858541738e-01:3.9691988685197281e+00 + CVs 20 + -2.7089554251298331e-03 5.8805433236626914e-01 3.9228372758069141e-01 + -8.1873282764898747e-02 1.1824774906336359e+00 7.0217285422307774e-01 + -3.0523795904962464e-01 1.7575013599407863e+00 9.0414712313949153e-01 + -7.1287240865543611e-01 2.2504147075549703e+00 1.0040684271742810e+00 + -1.3012829038518268e+00 2.5807694219173802e+00 1.0814218188123239e+00 + -1.9953737176202926e+00 2.6589461644203238e+00 1.2627520868670850e+00 + -2.6030785610827754e+00 2.3997306652606558e+00 1.5785632310684798e+00 + -2.9522928370770374e+00 1.8861951744375243e+00 1.8962063276339669e+00 + -3.1007390592465596e+00 1.3134222922407692e+00 2.1076304171328757e+00 + -3.1942452941564206e+00 7.8154521183530967e-01 2.2343046706663277e+00 + -3.3393843102943155e+00 3.3383792284957436e-01 2.3433002141318529e+00 + -3.5727160110549709e+00 3.5464607577984086e-04 2.5426559744035462e+00 + -3.8392478570305291e+00 -1.7186580070112895e-01 2.9520213959517068e+00 + -4.0210378137800191e+00 -1.6271296963128690e-01 3.4772070864309454e+00 + -4.1348838930882623e+00 -1.1033498206280257e-01 3.9421135673895642e+00 + -4.2639241061985373e+00 -9.0465554022533201e-02 4.3451029577413784e+00 + -4.4486239931359908e+00 -1.0896982410471567e-01 4.6626029016222557e+00 + -4.6780387275421962e+00 -1.2359016492229591e-01 4.8891802335183359e+00 + -4.9748600274496564e+00 -1.6183195876331413e-01 5.1712716681063720e+00 + id 11719 + loc 7.4692428112030029e-01 5.7217967510223389e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3972218570477073e-01:4.3803082140017424e-01:1.2747481447472619e-03:4.3971778848291371e-01:3.6183849498688081e-01:3.1189975387709257e-01:9.6746909364564460e-01:3.3386240691117480e-01:1.5439729613542001e+00:4.2336038931635439e-01:2.0399708174221129e+00:3.4784002898130667e-01:2.8092155640058727e+00:3.8253827130625268e-01:3.7027552935172423e+00 + CVs 20 + 3.7106240580146677e-01 3.0605832978155945e-01 -2.3206651791835031e-01 + 6.9857869334062861e-01 6.0935790533011414e-01 -4.6372294733728436e-01 + 1.0074904736361092e+00 8.8672390683807323e-01 -7.0322009794708729e-01 + 1.2998503569410238e+00 1.1292584712186673e+00 -9.5296701466807932e-01 + 1.5654274258665268e+00 1.3216596631506659e+00 -1.2107505819741753e+00 + 1.8110782151238576e+00 1.4598466142378161e+00 -1.4775400966163916e+00 + 2.0639757769828377e+00 1.5641881923458882e+00 -1.7633628846562852e+00 + 2.3433660636344524e+00 1.6508413730616343e+00 -2.0689049800169332e+00 + 2.6491090415578249e+00 1.7241300608491552e+00 -2.3774375429427397e+00 + 2.9774748648990927e+00 1.7834720680066427e+00 -2.6770945907754999e+00 + 3.3338570078042076e+00 1.8166768786101282e+00 -2.9735090437233369e+00 + 3.7303053535007029e+00 1.7869168323644156e+00 -3.2832960153175210e+00 + 4.1551033687743448e+00 1.6259791800208840e+00 -3.6173977645732727e+00 + 4.5312672008273989e+00 1.2756706011106498e+00 -3.9526820940974021e+00 + 4.7674848951628350e+00 7.5434959897590137e-01 -4.2386494450235652e+00 + 4.8063082097750707e+00 8.7207659096434353e-02 -4.4481190674609206e+00 + 4.4291027622435442e+00 -7.0255168919954181e-01 -4.5872942352315995e+00 + 3.6293526966768090e+00 -1.0517733094648198e+00 -4.6643181425348148e+00 + 3.2377953794445822e+00 -1.0341111573372199e+00 -4.7023689660399661e+00 + id 11720 + loc 6.7153406143188477e-01 9.9541968107223511e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8343530223831823e-01:3.8343146788529586e-01:7.9726262458994501e-03:3.4646446534607195e-01:9.8829591270527928e-01:3.5469520145870309e-01:1.6788173713996923e+00:2.0372001077132601e-01:2.1326431918949074e+00:3.3814191521667442e-01:3.2559829123808997e+00 + CVs 20 + -2.2385003341004333e-02 2.8592252702148563e-01 -9.0462693048201870e-02 + 4.1730980655151724e-03 5.7424972145447784e-01 -1.9954128126361981e-01 + 7.4142206425227050e-02 8.4978578853721820e-01 -3.1060645320416247e-01 + 1.8569480498628502e-01 1.1063980090908028e+00 -4.1391336146845092e-01 + 3.3667910492592679e-01 1.3433261349311656e+00 -5.0811839020868477e-01 + 5.1803149643398239e-01 1.5655002475741497e+00 -6.0002947372118709e-01 + 7.1964564886232707e-01 1.7788165316919218e+00 -7.0007254057428248e-01 + 9.3359999453331444e-01 1.9877718081530031e+00 -8.1930293260164122e-01 + 1.1542862875469491e+00 2.1866317252955332e+00 -9.7161213654475820e-01 + 1.3797652028890719e+00 2.3539740962670077e+00 -1.1695794116107945e+00 + 1.6020731748096735e+00 2.4389088261580025e+00 -1.4077635739560344e+00 + 1.7915843314433237e+00 2.3807772134040195e+00 -1.6454157702123604e+00 + 1.9261212538645647e+00 2.1751299412047320e+00 -1.8465957314175081e+00 + 2.0129376394743361e+00 1.8489607805777104e+00 -2.0168575735208369e+00 + 2.1022162521825947e+00 1.4346636813782963e+00 -2.1967650494510274e+00 + 2.2897440659993444e+00 9.9584729566354668e-01 -2.4192442961409171e+00 + 2.6656427985886877e+00 6.4250110806951510e-01 -2.6219761749081245e+00 + 3.1893268012455351e+00 4.6840380261115333e-01 -2.6667921037603097e+00 + 3.7251172447228456e+00 3.7708473742642268e-01 -2.6087156477709081e+00 + id 11721 + loc 9.1834878921508789e-01 2.3332792520523071e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2146826524437808e-01:3.2012185379032948e-01:2.3021079655194887e-01:3.9367972981391125e-01:1.0500990638023222e+00:3.4194375198189242e-01:1.9999809091944916e+00:2.9315719810515373e-01:2.7139072969890541e+00:3.2260284549145374e-01:3.2769604416200058e+00:4.2146405056172564e-01:3.9439321802801062e+00 + CVs 20 + 1.8301221264928336e-01 2.6385100644841353e-01 -7.8224954666314961e-02 + 3.7459986313993932e-01 5.2828396633716102e-01 -1.6352445044649633e-01 + 5.5160990816512456e-01 7.9896466552435486e-01 -2.6244046513769037e-01 + 7.1913580239318986e-01 1.0557748195739294e+00 -3.4258607245878381e-01 + 8.9151434725689027e-01 1.2530340526903574e+00 -3.5638296140131975e-01 + 1.0581045819404511e+00 1.3538538968028688e+00 -2.9774823836620434e-01 + 1.2028918632798169e+00 1.3615648229994195e+00 -1.9292279865428463e-01 + 1.3198264210865964e+00 1.2927653896900897e+00 -5.2979638259101014e-02 + 1.3901744719338229e+00 1.1519555720017303e+00 1.2082616782219713e-01 + 1.3846143413125613e+00 9.4400921795129000e-01 3.0928038560508370e-01 + 1.2938039566724080e+00 6.8291660528834941e-01 4.7324546612280816e-01 + 1.1428619948097751e+00 3.9509395743457065e-01 5.5743143977443677e-01 + 9.8488098905612664e-01 1.1452151275122002e-01 5.2000944000702409e-01 + 8.2961261690931254e-01 -1.6929431405055420e-01 4.0243109803292365e-01 + 5.8790813194518388e-01 -5.4798668771279102e-01 3.1046236019448858e-01 + 1.8620854401573572e-01 -1.0989894070117547e+00 4.0759759536219609e-01 + -3.9708394279270864e-01 -1.7667409854922249e+00 1.0321306339615284e+00 + -9.1199417102097435e-01 -2.0484758879358189e+00 2.5241129763287402e+00 + -1.0471464906435539e+00 -2.2064797255157571e+00 2.8696107081119262e+00 + id 11722 + loc 2.7862310409545898e-01 6.7789143323898315e-01 1070 + blend 0.0000000000000000e+00 + interp 3.3786061947687207e-01:2.6340931230607462e-01:3.0941235157094793e-03:2.7790119055452994e-01:9.8014530825122737e-01:2.8648918184150668e-01:1.8629058353516146e+00:2.6648262073727347e-01:2.9779393194165493e+00:3.3785724087067731e-01:3.4786010440506114e+00 + CVs 20 + -3.1776426753857190e-01 2.9697389681475667e-01 3.2895501082931144e-01 + -5.6448550068098013e-01 5.3998930249028143e-01 6.0698626660836807e-01 + -7.5053436495420611e-01 7.8219856407782606e-01 9.1857972632177742e-01 + -9.3157169344036683e-01 1.0680337007309149e+00 1.2677167808697798e+00 + -1.1969170680523105e+00 1.4050212791373236e+00 1.5629454497230433e+00 + -1.5825871443807662e+00 1.7497621859838883e+00 1.7101762567803647e+00 + -2.0543338688771042e+00 2.0378134403513437e+00 1.6602141856186996e+00 + -2.5304418467825007e+00 2.2168598921309743e+00 1.3714674411479411e+00 + -2.8512569412876863e+00 2.2381773835561045e+00 8.3147440407498863e-01 + -2.8779844553522445e+00 2.1022511547133140e+00 2.1335134559983215e-01 + -2.6754396591489296e+00 1.8561778516187131e+00 -3.1208045231704973e-01 + -2.3187457816327637e+00 1.4959615815557012e+00 -6.9360349931342469e-01 + -1.9226162229607822e+00 1.0829135053279735e+00 -8.9977900950240086e-01 + -1.6470342096799420e+00 7.6457195645738685e-01 -1.0592264148932788e+00 + -1.5675411216289388e+00 6.5654818503783008e-01 -1.3132648605607424e+00 + -1.7083962240400106e+00 8.8301813307478372e-01 -1.5924500511074278e+00 + -2.0616123654789060e+00 1.6003908477773698e+00 -1.4859771621948457e+00 + -2.2543848505269164e+00 2.2324225193503819e+00 -7.5814554866405104e-01 + -2.2863359764611304e+00 2.4510946268649612e+00 -9.7437006618728250e-01 + id 11723 + loc 1.3756205141544342e-01 4.1726109385490417e-01 1054 + blend 0.0000000000000000e+00 + interp 5.0345980757528452e-01:3.0414888577702504e-01:2.3471512140083794e-01:3.6872353289886695e-01:1.0699657859016538e+00:5.0140946963626820e-01:2.0023659191867509e+00:3.3105813915583332e-01:2.4644130459955624e+00:4.7368211261839493e-01:3.2785891944725587e+00:5.0345477297720875e-01:3.8755487643423225e+00 + CVs 20 + -4.8900038107037719e-02 4.4348429236961084e-01 -2.2751412442570207e-01 + -7.3263704412679043e-02 9.0996426906199990e-01 -4.3673626047422059e-01 + -3.1259173305519972e-02 1.4055520448713121e+00 -6.0302151638891099e-01 + 1.1209037227242735e-01 1.9172261477945498e+00 -7.5113490619596512e-01 + 3.6649776168117620e-01 2.3916264758323948e+00 -9.5259481161139581e-01 + 7.0016401301244624e-01 2.7506208415265387e+00 -1.2674280678891634e+00 + 1.0474046490595430e+00 2.9101556011838934e+00 -1.7078012644287284e+00 + 1.3137534518898142e+00 2.8124236556535509e+00 -2.1979243855795829e+00 + 1.4723116653045598e+00 2.5082798730708511e+00 -2.6190662995772311e+00 + 1.5618488784788913e+00 2.0997079638916474e+00 -2.9067852575640329e+00 + 1.6194573766709583e+00 1.6886937871723502e+00 -3.0543621497222873e+00 + 1.6642542257501269e+00 1.3395166112621275e+00 -3.0927402441000060e+00 + 1.7188389462080171e+00 1.0386616642793514e+00 -3.0600652433048201e+00 + 1.8380017692859689e+00 7.3424168610057516e-01 -3.0917705963231770e+00 + 1.9412512989587221e+00 4.9603712318117604e-01 -3.3065084222284060e+00 + 1.9393631471804860e+00 3.3434904963325957e-01 -3.5825488001859069e+00 + 1.8189327788750989e+00 2.6817002278215413e-01 -3.7640452055794467e+00 + 1.5923425852601580e+00 2.9289539894359773e-01 -3.8746755664723773e+00 + 1.5857335337337313e+00 -6.8794866639591501e-02 -4.0528992511278767e+00 + id 11724 + loc 1.7380362749099731e-01 9.7494715452194214e-01 1077 + blend 0.0000000000000000e+00 + interp 3.1764448090329322e-01:2.8552870398057723e-01:2.1767473821570404e-02:3.1764130445848421e-01:7.8587749322098666e-01:3.0624098933747201e-01:1.6425911047541599e+00:1.4893448934789119e-01:2.4184122883477488e+00:2.7897856490173245e-01:3.3816148316418895e+00 + CVs 20 + 7.7569952032557149e-02 2.6043227603458952e-01 -1.3211389639066320e-01 + 1.6537514566582093e-01 5.6323335164795418e-01 -2.3961908983357189e-01 + 2.8269702336657837e-01 8.9360069198735115e-01 -3.6700148066345406e-01 + 4.3793812676518012e-01 1.2229984820813404e+00 -5.4209390639326072e-01 + 6.3536813279564264e-01 1.5368718110282358e+00 -7.7441031490924850e-01 + 8.7937423139457360e-01 1.8145166537955038e+00 -1.0694160186719377e+00 + 1.1716399157658317e+00 2.0259969064837771e+00 -1.4234329569454118e+00 + 1.5048509708332942e+00 2.1430349383411245e+00 -1.8219826744021461e+00 + 1.8618597046980967e+00 2.1505769201831493e+00 -2.2463412589177807e+00 + 2.2200193013654581e+00 2.0462964661768202e+00 -2.6782264120865187e+00 + 2.5558679856250905e+00 1.8367529472429316e+00 -3.1010128576065132e+00 + 2.8478051947198231e+00 1.5349443984555768e+00 -3.4997947911599141e+00 + 3.0792356853916574e+00 1.1596589473040413e+00 -3.8587825872482893e+00 + 3.2443911054835066e+00 7.3586051247487205e-01 -4.1587245365319827e+00 + 3.3516027889782229e+00 2.9235015399946218e-01 -4.3767250801289146e+00 + 3.4120613164315778e+00 -1.4915809134409308e-01 -4.4762523927862334e+00 + 3.4180490574367353e+00 -5.5443681607609796e-01 -4.3547606531006275e+00 + 3.3525125704744418e+00 -7.5002471571830220e-01 -3.9168405690545001e+00 + 3.3443577703024445e+00 -1.0179845153612903e+00 -3.8366506224831287e+00 + id 11725 + loc 7.3722249269485474e-01 6.3694548606872559e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2430529332371808e-01:2.5920036882298753e-01:2.7289469082266526e-01:3.0874541850328219e-01:1.0114737890013685e+00:3.9385997103163212e-01:1.8992354689379312e+00:2.5297798778362818e-01:2.3262697751589796e+00:4.2430105027078485e-01:2.9377012793107484e+00:2.9266794076574321e-01:3.6072395480035793e+00 + CVs 20 + -1.3837153458692575e-01 4.4995326253841750e-01 1.1488687002305617e-01 + -3.1503767006228012e-01 8.7604127798465792e-01 1.7559236016428897e-01 + -5.3884064982073354e-01 1.2837865510150150e+00 1.9786768749128991e-01 + -8.1687865803081983e-01 1.6602827970805789e+00 1.7454996192183447e-01 + -1.1462316596147566e+00 1.9779414750988493e+00 8.9295768686953325e-02 + -1.5104932937162843e+00 2.2073930462990510e+00 -6.7877869158364801e-02 + -1.8802121133048539e+00 2.3241875516380603e+00 -2.9609448934152427e-01 + -2.2209034595247177e+00 2.3185095187901510e+00 -5.7967020615592280e-01 + -2.5106231230020661e+00 2.1965860192762614e+00 -8.8872793030030506e-01 + -2.7570892789530879e+00 1.9755136487539262e+00 -1.1835908664329482e+00 + -2.9860610391381526e+00 1.6726794806264944e+00 -1.4271735869001851e+00 + -3.2092605310303659e+00 1.3004005096179800e+00 -1.5893027869864031e+00 + -3.4250630320101934e+00 8.7463354084778799e-01 -1.6382256408920672e+00 + -3.6363050202795595e+00 4.2918711030671353e-01 -1.5356535683986303e+00 + -3.8448401538594217e+00 2.8881761927941341e-02 -1.2448970928080814e+00 + -4.0459613653491751e+00 -2.2403162167171020e-01 -8.0464979446332485e-01 + -4.2637933387534259e+00 -2.6442528314873170e-01 -3.3279854079875520e-01 + -4.4933578148589355e+00 -9.8816881077205210e-02 7.8920153441908725e-02 + -4.6624522536755597e+00 -1.5499500205710126e-01 3.6734944065704767e-01 + id 11726 + loc 8.7867331504821777e-01 5.8101850748062134e-01 1087 + blend 0.0000000000000000e+00 + interp 3.4166353116333217e+00:7.0057259843731134e-01:2.0804602235252565e+00:4.0251746433797470e-01:2.1720537875361234e+00:5.3512525825747526e-01:2.6949823454214643e+00:5.3641176003946667e-01:3.0064970053782485e+00:4.7507751527256947e-01:3.3600339850271443e+00:7.4219210572099348e-01:3.8508582863555745e+00:3.7607747170888106e-01:3.9000584185223528e+00:2.4785114797816714e+00:3.9845149834294968e+00:3.4166253116333216e+00:3.9984500204394657e+00 + CVs 20 + -2.0493575974926148e-01 3.7811005091148298e-01 5.1837597826932214e-01 + -4.1533742580191846e-01 6.4565000567311470e-01 8.5909136797902952e-01 + -6.4406672689441558e-01 8.7753325307110563e-01 1.1414804414817776e+00 + -8.9506825205819363e-01 1.0989285545039822e+00 1.4032812489455013e+00 + -1.1713614933413532e+00 1.3031120849160620e+00 1.6271054129730136e+00 + -1.4686514187486515e+00 1.4782498779721054e+00 1.7953877867444981e+00 + -1.7737959998413273e+00 1.6089582401288320e+00 1.8932391458073725e+00 + -2.0645913038104498e+00 1.6803932383309814e+00 1.9131672739601833e+00 + -2.3124814340698205e+00 1.6836015868477203e+00 1.8619280456122602e+00 + -2.5042361833542270e+00 1.6200593783222925e+00 1.7612062481631481e+00 + -2.6551153729355530e+00 1.4933442815229865e+00 1.6327898509136953e+00 + -2.7828921909616184e+00 1.3006693068155899e+00 1.4938970338935476e+00 + -2.8978693599929874e+00 1.0382882447193880e+00 1.3658816960565070e+00 + -3.0103204272895878e+00 7.0887421260471217e-01 1.2836849400838506e+00 + -3.1344724127819039e+00 3.2924744402954498e-01 1.2848867750855173e+00 + -3.2993986980705321e+00 -7.0864992498388790e-02 1.3823906979028953e+00 + -3.5367354552847714e+00 -4.3385943048112602e-01 1.5730227565367532e+00 + -3.8214300418761389e+00 -7.1159225754318900e-01 1.8133015244522301e+00 + -4.0367044447069453e+00 -9.7760134940040766e-01 1.9899091513439799e+00 + id 11727 + loc 6.5591180324554443e-01 4.5171523094177246e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3023853092431247e-01:4.3023422853900323e-01:8.2468499337329249e-04:3.6123262346580504e-01:8.6664946899620798e-01:4.1132185819911599e-01:1.3464064724956872e+00:3.4223791986579322e-01:2.0028762267270945e+00:3.2029280545957628e-01:2.6906093424769839e+00:3.6726723600215799e-01:3.1607576250218448e+00 + CVs 20 + -4.0908568994399500e-03 3.7521016321123452e-01 2.0315051162255632e-01 + -2.8198564966540482e-02 7.3923377301046234e-01 4.1411629559397722e-01 + -7.5302290558484752e-02 1.0869232146678471e+00 6.2217030544367669e-01 + -1.4983422707419872e-01 1.4135400730836536e+00 8.2514556698446473e-01 + -2.5448636781792000e-01 1.7133801411304699e+00 1.0302064282856644e+00 + -3.8516900103597868e-01 1.9772785502611356e+00 1.2489794656667803e+00 + -5.2572515804287767e-01 2.1930864529387208e+00 1.4856950423632185e+00 + -6.5379519370071359e-01 2.3544837669966103e+00 1.7335647609679685e+00 + -7.5468584644248193e-01 2.4660398250186035e+00 1.9827851962482850e+00 + -8.2552600089779471e-01 2.5381859837391971e+00 2.2285131798096680e+00 + -8.7043303216519918e-01 2.5792388609799164e+00 2.4678228638777511e+00 + -8.9612993249095640e-01 2.5924297872049027e+00 2.6990417763105512e+00 + -9.0898447753296718e-01 2.5773156515321332e+00 2.9249230694280457e+00 + -9.1402829426866916e-01 2.5306620185391102e+00 3.1497820362627582e+00 + -9.1581697550157171e-01 2.4465095295941883e+00 3.3694145830574667e+00 + -9.2440399035267640e-01 2.3208863857702386e+00 3.5661572350854462e+00 + -9.4304184197220930e-01 2.1494885698771968e+00 3.7166048862270187e+00 + -9.4523360815516155e-01 1.9274322212557797e+00 3.7745794754007633e+00 + -8.5530381451712001e-01 1.6547796376197847e+00 3.6073446721493023e+00 + id 11728 + loc 3.5784560441970825e-01 2.4240434169769287e-01 1090 + blend 0.0000000000000000e+00 + interp 1.5027867010072440e+00:3.8091362469224882e-01:1.8266351485176613e-01:2.6182402758450524e-01:1.2788860618158195e+00:4.6382926931997953e-01:1.9103275203253540e+00:1.5027767010072439e+00:3.2796573890367924e+00:1.1496309434844012e+00:3.4978011100593749e+00:6.9258605695079156e-01:3.7605110814832416e+00:4.6482465209093105e-01:3.9224906832076956e+00 + CVs 20 + 3.2899012786061005e-01 4.7102312815493924e-01 -2.5928209163701560e-02 + 5.4101615828211014e-01 8.5788394614533692e-01 3.1671103688060642e-02 + 6.9636769001500809e-01 1.2047380345685670e+00 1.3138646976545720e-01 + 8.1481284975656920e-01 1.5226084363941417e+00 2.5392895002618943e-01 + 8.8453084141376581e-01 1.7937692151193998e+00 3.9474844663959763e-01 + 9.0041972755682176e-01 1.9984444319164609e+00 5.4057428769815674e-01 + 8.6887035948941738e-01 2.1173256934443403e+00 6.6618793649169317e-01 + 8.1644705471542656e-01 2.1475360679091233e+00 7.3860191357781935e-01 + 7.7797959513041648e-01 2.1247729780567948e+00 7.4844441546793095e-01 + 7.4575203091139142e-01 2.0912538718532270e+00 7.3560750970557576e-01 + 6.8647849528857974e-01 2.0416318326395100e+00 7.3228800094530710e-01 + 5.9744035692618791e-01 1.9583659701712677e+00 7.3849262503080348e-01 + 4.9159400319876317e-01 1.8353221618835538e+00 7.5053847070440249e-01 + 3.8049921775964696e-01 1.6670099343225955e+00 7.7059278320504265e-01 + 2.7948102632006211e-01 1.4485606510452904e+00 8.0371806476518259e-01 + 2.1575317033939673e-01 1.1681073676409568e+00 8.5856705095840691e-01 + 2.3173703356130354e-01 8.1534650610469983e-01 9.4731613073584586e-01 + 3.6458381590326006e-01 4.1988880863441036e-01 1.0867897481697324e+00 + 4.9435899755085833e-01 2.2086696217157953e-01 1.2106652226312247e+00 + id 11729 + loc 2.8066661953926086e-01 5.7309222221374512e-01 1048 + blend 0.0000000000000000e+00 + interp 4.1598871729310344e-01:3.7406883465690366e-01:3.6751280543056986e-02:3.7569397030979368e-01:8.9978444981767847e-01:3.8423227099290075e-01:1.5542731862444239e+00:4.1598455740593054e-01:2.0543863728127847e+00:3.6030771879154694e-01:2.7510613321359143e+00:2.9032889258889244e-01:3.5053322029610596e+00 + CVs 20 + 1.5423779616621219e-01 6.4885475287720507e-01 -2.4733649949968001e-01 + 3.3557747655498960e-01 1.2821067326539748e+00 -4.2304178276429938e-01 + 5.6807435692991293e-01 1.8977235549038722e+00 -5.0678934693793687e-01 + 8.7944454798534588e-01 2.4776613814107868e+00 -4.8695937991763161e-01 + 1.2946314331585065e+00 2.9712868355965081e+00 -3.7600220337697998e-01 + 1.8094717350542258e+00 3.3259574679902886e+00 -2.2786024028714813e-01 + 2.3921277436649291e+00 3.5073555154358713e+00 -9.9178194710843215e-02 + 3.0053819545807019e+00 3.4876748458097189e+00 -1.7309186510195085e-02 + 3.6072763377968897e+00 3.2400311362908996e+00 1.1087681417906170e-02 + 4.1272540072285233e+00 2.7612713968054763e+00 1.2682401546949218e-02 + 4.4739580047995275e+00 2.0881590993399124e+00 7.8248957719603607e-02 + 4.5798570841307447e+00 1.3047225369929856e+00 3.0617092797947554e-01 + 4.4512155058315788e+00 4.9699961524059311e-01 6.9914849337863894e-01 + 4.1472817856040098e+00 -3.1547931330578771e-01 1.1445592292388000e+00 + 3.7823290240289054e+00 -1.1466131051121435e+00 1.4629769873255363e+00 + 3.7015156681200638e+00 -2.0309346304819496e+00 1.4284258601358577e+00 + 5.6808319128602669e+00 1.4556379263258190e-01 7.9467322378698091e-01 + 5.1655223908909056e+00 8.9523106825823340e-01 1.3127782416780065e+00 + 5.3287614825995639e+00 1.3925124880725754e+00 1.3947422301446166e+00 + id 11730 + loc 9.9931299686431885e-02 4.2969009280204773e-01 1084 + blend 0.0000000000000000e+00 + interp 3.5386121990923841e-01:3.0262349019916751e-01:8.2813231600832315e-03:2.9723389483695428e-01:7.4487150586860373e-01:3.5385768129703932e-01:1.9537769101885449e+00:3.4520328893921520e-01:2.4365087797688139e+00:2.7945894389967502e-01:3.2021386552988251e+00 + CVs 20 + 3.0202454380620519e-01 3.6272932920102063e-01 3.5343296529301010e-01 + 5.1974154024667818e-01 6.2834503319018908e-01 6.8386273858518620e-01 + 7.3810269516274962e-01 8.5464047491634254e-01 1.0028865446909780e+00 + 9.7932511363232999e-01 1.0525839138712783e+00 1.3000410896652250e+00 + 1.2182366066671624e+00 1.2142011866018521e+00 1.5800269735353338e+00 + 1.4323366525969035e+00 1.3365175455556018e+00 1.8458147965754623e+00 + 1.6088395795477506e+00 1.4183354618148016e+00 2.0870730366920895e+00 + 1.7536927193123126e+00 1.4597423782626369e+00 2.2756410314974564e+00 + 1.8965744660757764e+00 1.4766643750193806e+00 2.3914358024485201e+00 + 2.0396756171084638e+00 1.5017351812219191e+00 2.4756696603967643e+00 + 2.1404734867804374e+00 1.5507173062839514e+00 2.5591284556644611e+00 + 2.1856925901804258e+00 1.6334106418972452e+00 2.6253024683906445e+00 + 2.1548032364801442e+00 1.7039891568547194e+00 2.6820997997286184e+00 + 2.0530308906395041e+00 1.6195686947705206e+00 2.7557306120181324e+00 + 1.9235766938983951e+00 1.3173874094493139e+00 2.8404120119159972e+00 + 1.7418600515978588e+00 8.5785721361541389e-01 2.8852153580578865e+00 + 1.4318394897883686e+00 3.3786901097240107e-01 2.8375729499462654e+00 + 9.5612601301394462e-01 -9.5452933004299911e-02 2.7060513882198931e+00 + 6.4479901456826338e-01 -2.5890371042430643e-01 2.6780960992166616e+00 + id 11731 + loc 3.6778295040130615e-01 5.1898318529129028e-01 1075 + blend 0.0000000000000000e+00 + interp 3.9966041086736237e-01:3.9682369114047661e-01:7.1348388465106849e-01:2.5590756334263393e-01:1.0297278476637179e+00:3.6544089129617069e-01:1.9528521812315678e+00:3.9965641426325371e-01:2.3269739373083409e+00:3.7979076380369420e-01:3.0372034025188190e+00:2.6980038726063232e-01:3.7746416396545688e+00 + CVs 20 + 3.3613222145546823e-02 2.6994530735264166e-01 -2.0222137609839191e-01 + 7.5184630191645868e-02 5.3583654884932741e-01 -4.1676031136246316e-01 + 1.1499391309771384e-01 8.0030054424099872e-01 -6.3751318684904845e-01 + 1.5330757283844415e-01 1.0644245453537824e+00 -8.6993869897075915e-01 + 1.9097983840990718e-01 1.3274988733869799e+00 -1.1200373823173702e+00 + 2.1967879515506716e-01 1.5902779135188085e+00 -1.3827078985766177e+00 + 2.3321585656644106e-01 1.8550169809698991e+00 -1.6507700733265771e+00 + 2.3918739723327498e-01 2.1225614468792298e+00 -1.9274876150616091e+00 + 2.5353153870782286e-01 2.3850236036830745e+00 -2.2267210837526221e+00 + 2.8569285005343126e-01 2.6177900321724810e+00 -2.5676178379455017e+00 + 3.2987307480066974e-01 2.7747896992280170e+00 -2.9695291228832619e+00 + 3.6355035676568148e-01 2.7953030694615530e+00 -3.4292704839616341e+00 + 3.6477481520980981e-01 2.6496704313322805e+00 -3.8963386495228058e+00 + 3.4870968979580053e-01 2.3843725090099457e+00 -4.3183540942759233e+00 + 3.4387058831981765e-01 2.0633399924380251e+00 -4.6937946463522433e+00 + 3.4450428714062453e-01 1.7177298421739879e+00 -5.0324671537026964e+00 + 3.1404089127661172e-01 1.3644472600815720e+00 -5.3327244563813512e+00 + 2.3452810459543899e-01 1.0081572231956772e+00 -5.5934529400493380e+00 + 2.5530701341825507e-01 7.3740851862731427e-01 -5.8582397367999279e+00 + id 11732 + loc 1.2384966760873795e-01 6.4120745658874512e-01 1076 + blend 0.0000000000000000e+00 + interp 4.6779921043616302e-01:4.2088148240930712e-01:3.2006209730845037e-01:4.5105633867343559e-01:9.3803200053917069e-01:4.6779453244405866e-01:1.2251758756785449e+00:3.4192896258983752e-01:1.9995602267423125e+00:2.7899777862408504e-01:2.9997907266356325e+00:3.2109296422737882e-01:3.9192193107180020e+00 + CVs 20 + 1.2031448827486949e-01 3.3924145639190384e-01 1.3676545677347260e-02 + 2.5677533917464096e-01 6.6878268360991211e-01 -6.9863975247920207e-03 + 3.9361713146845095e-01 9.9358386452374692e-01 -4.6813683015440255e-02 + 5.2627169985578237e-01 1.3191396469683718e+00 -1.0331866693460090e-01 + 6.5847674595983174e-01 1.6432127196936770e+00 -1.8559951230207172e-01 + 7.9621857070082447e-01 1.9609020179185479e+00 -3.0331303611825233e-01 + 9.4449437103499012e-01 2.2609611106984078e+00 -4.6555426212130846e-01 + 1.1020277599911816e+00 2.5274782171192993e+00 -6.7930869488212509e-01 + 1.2624663362790607e+00 2.7438459301682956e+00 -9.5144667384558324e-01 + 1.4176676566534427e+00 2.8902906937966373e+00 -1.2855631633002524e+00 + 1.5590378967127454e+00 2.9464289016693872e+00 -1.6710244641138499e+00 + 1.6774023904835071e+00 2.9031487930853679e+00 -2.0799699989853662e+00 + 1.7625509830056985e+00 2.7770921504668626e+00 -2.4736667410962703e+00 + 1.8076442260834400e+00 2.6168057408242000e+00 -2.8159393549377292e+00 + 1.8170093760696608e+00 2.4696337373265838e+00 -3.0978907278255132e+00 + 1.7983849606630906e+00 2.3479821355464665e+00 -3.3351438438921339e+00 + 1.7576184933844561e+00 2.2481302499434408e+00 -3.5403044520638467e+00 + 1.6864713077127371e+00 2.1577396832736611e+00 -3.7253304317118476e+00 + 1.4811814121413736e+00 2.0598722928527446e+00 -3.9233588624905416e+00 + id 11733 + loc 8.7534540891647339e-01 2.3332792520523071e-01 1085 + blend 0.0000000000000000e+00 + interp 3.1666111760915827e-01:2.9044238459655880e-01:2.2704337237758432e-01:2.9010360893113085e-01:1.0285910070755853e+00:3.1665795099798222e-01:1.9995058823056322e+00:2.6870967360189502e-01:2.7319956631060300e+00:3.0742769296835926e-01:3.2824361100187840e+00 + CVs 20 + 3.2931843302737734e-01 3.3380466948778231e-01 -1.3762500500315750e-01 + 6.5689704853312381e-01 6.4527118853937093e-01 -2.4168973238851754e-01 + 1.0136460132194871e+00 9.1914506558194597e-01 -3.1148571134409497e-01 + 1.4099603002774681e+00 1.1384626604863479e+00 -3.3197035817327747e-01 + 1.8368932805587419e+00 1.2852162545167991e+00 -2.8696308071303150e-01 + 2.2767525265210478e+00 1.3483957838217930e+00 -1.7045694946671708e-01 + 2.7075499277974284e+00 1.3259774586249211e+00 1.4730210838395319e-02 + 3.1071273475812653e+00 1.2237947873540684e+00 2.5755245096899965e-01 + 3.4583245638752436e+00 1.0531597107564479e+00 5.3339857481110697e-01 + 3.7592643293594312e+00 8.2990815867302237e-01 8.0323034971423046e-01 + 4.0193336279930056e+00 5.7004249375683458e-01 1.0250249988669908e+00 + 4.2469936315677064e+00 2.8942586340233212e-01 1.1661299393497517e+00 + 4.4492809660077111e+00 8.7198340801112328e-03 1.2116552221261525e+00 + 4.6404989466033069e+00 -2.3857015230042733e-01 1.1507479102717431e+00 + 4.8343024561981194e+00 -3.9684672446092129e-01 9.8456264808062444e-01 + 5.0578748004348792e+00 -4.2512473151957741e-01 7.7656422264311253e-01 + 5.3259538007952312e+00 -3.1946700514415238e-01 6.0623985071108821e-01 + 5.6100541647834445e+00 -1.5960920411411705e-01 5.1814169667119603e-01 + 5.9681903378730423e+00 -1.5517785746886514e-01 4.5891743824042730e-01 + id 11734 + loc 1.7345614731311798e-01 1.7171530053019524e-02 1053 + blend 0.0000000000000000e+00 + interp 7.7620427152859428e-01:3.8184796368452356e-01:8.5263753621668714e-02:2.4288529840235049e-01:1.0072245400820032e+00:6.5169205976282252e-01:1.2840186731818319e+00:7.7619650948587904e-01:3.0020123882574801e+00:4.2009746198337572e-01:3.0661560824773155e+00:2.1814084351430479e-01:3.2339548703888275e+00:3.4698478996411186e-01:3.8887082267553210e+00 + CVs 20 + 3.1576296003614696e-01 4.4045300097556295e-01 3.1188285255730239e-02 + 5.4397960470898887e-01 8.4165754591782216e-01 1.0793453681668783e-01 + 6.9215660001293611e-01 1.2257158215454200e+00 1.9082879870480324e-01 + 7.7562993838420513e-01 1.5719848587634133e+00 2.7211238140150934e-01 + 8.1637712612542335e-01 1.8553641645320247e+00 3.6238619463465610e-01 + 8.4024351998556956e-01 2.0892128475951730e+00 4.7585654664898225e-01 + 8.7588716768366870e-01 2.2874637772935893e+00 6.2558087503353854e-01 + 9.5168427083819940e-01 2.4281505877513609e+00 8.0757186083282406e-01 + 1.0671650465539557e+00 2.4821133740011865e+00 9.9074078343675098e-01 + 1.1974971531871481e+00 2.4176303011454126e+00 1.1272022855733868e+00 + 1.3001017787275073e+00 2.2045082338896065e+00 1.1847423295467419e+00 + 1.2488398945584192e+00 1.8145223539994759e+00 1.2475616483815812e+00 + 9.0502961345284794e-01 1.2683216614360908e+00 1.5660590369367222e+00 + 5.8291293010242351e-01 7.9633138872209575e-01 2.3464033598219505e+00 + 6.3821725217938419e-01 6.1782568563495766e-01 3.1144336715275198e+00 + 8.6614548851905870e-01 6.0374540848864200e-01 3.5694113576686526e+00 + 1.0491844611700756e+00 7.0105896926937383e-01 3.6094470001606478e+00 + 1.2321706225917084e+00 9.2416175891365904e-01 3.2775593449394766e+00 + 1.3188217084563654e+00 5.7701781282070685e-01 3.5762484393858092e+00 + id 11735 + loc 1.3086505234241486e-01 8.6272203922271729e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9884498404591012e-01:3.7117876326525073e-01:9.3487492367236735e-01:3.9884099559606967e-01:1.3887767350625908e+00:3.5980834233006537e-01:2.0011974120228171e+00:3.8123105099135457e-01:2.8507888465156181e+00:3.0171660470153089e-01:3.1399704924859657e+00:3.4171216838594848e-01:3.8599910297250442e+00 + CVs 20 + 5.7232199037664966e-01 4.7925984996004917e-01 -1.4175160621087918e-01 + 1.1162530041750949e+00 9.8372627395040801e-01 -1.9050288104015572e-01 + 1.6024818240628813e+00 1.5260477844299085e+00 -1.1220345906347240e-01 + 2.0141780414497124e+00 2.0697456912560428e+00 1.1965653524142683e-01 + 2.3337766719505249e+00 2.5421519248546822e+00 4.9814455890577969e-01 + 2.5593191757685116e+00 2.8901095315617509e+00 9.8483971748112620e-01 + 2.6984995020475031e+00 3.0841509567611718e+00 1.5663506800812188e+00 + 2.6913435330369846e+00 3.1024242327614640e+00 2.1523833053005861e+00 + 2.5286623407996012e+00 2.9660560848998805e+00 2.7452168974219293e+00 + 2.2320819730048354e+00 2.6853149178356484e+00 3.3216909859823152e+00 + 1.8199269350032492e+00 2.3254512048694482e+00 3.7998045157234848e+00 + 1.3375786598387662e+00 1.9680594186484792e+00 4.1371050561171048e+00 + 8.6400280927496431e-01 1.6642187518382581e+00 4.3412677387062528e+00 + 4.1935940924528692e-01 1.4114501420332941e+00 4.4308294221009117e+00 + -7.2004113515202944e-02 1.2082175249827984e+00 4.3815880361412827e+00 + -6.4778367921218138e-01 1.1276306810883812e+00 4.1752797675769369e+00 + -1.2044001226966123e+00 1.2099009654623032e+00 3.9100448077384851e+00 + -1.5853638416775235e+00 1.3927371356595946e+00 3.6936353536121627e+00 + -1.6077931020911476e+00 2.0235421685720691e+00 3.4166868152308512e+00 + id 11736 + loc 8.4732890129089355e-01 9.7369736433029175e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2721601885488975e-01:3.6001923859153651e-01:2.2731172565769719e-01:4.2721174669470119e-01:9.3868505149326154e-01:4.1038973743663409e-01:1.3425486847762824e+00:2.2301579670921390e-01:1.9034700674957059e+00:2.3726601441484088e-01:2.8379241274954765e+00:3.6778696608788120e-01:3.0182565824253471e+00:4.2338354212021645e-01:3.5142411640415041e+00 + CVs 20 + 1.6736335676920766e-01 2.7427869275104272e-01 -3.5382110392375088e-01 + 3.9230306519160274e-01 5.1668288469447532e-01 -6.5722011995083518e-01 + 6.4538056764751739e-01 7.2019470399266028e-01 -9.1754888581014049e-01 + 9.0682292867025083e-01 8.8000553402838977e-01 -1.1457214372652293e+00 + 1.1640808211372853e+00 9.9734705174327454e-01 -1.3535717653120640e+00 + 1.4064194608426916e+00 1.0676344233384849e+00 -1.5424165606851743e+00 + 1.6209224326539167e+00 1.0794472368079595e+00 -1.7002982842214549e+00 + 1.7890759382230108e+00 1.0239458426353443e+00 -1.8007915297209438e+00 + 1.8919537374459676e+00 9.1601920853158647e-01 -1.8099975170012488e+00 + 1.9197426363117300e+00 8.0608458958320450e-01 -1.7047030586394920e+00 + 1.9011071785780180e+00 7.5881673517165282e-01 -1.5176393691224312e+00 + 1.9074539419194700e+00 7.6468698173495486e-01 -1.3487490791553141e+00 + 1.9697515956920455e+00 7.3936098852937859e-01 -1.2574303892032479e+00 + 2.0689871767189021e+00 6.1116120517781269e-01 -1.2473884459103521e+00 + 2.1876788666502680e+00 3.5201623460315856e-01 -1.3113127946002681e+00 + 2.3170244434955714e+00 2.3023413839217105e-02 -1.4265386559338575e+00 + 2.4205970409872948e+00 -2.8728397377836623e-01 -1.5615640358243494e+00 + 2.5456042338884446e+00 -5.2787704527089074e-01 -1.6828460510512169e+00 + 2.8616638184551348e+00 -5.4372457148306375e-01 -1.6220070715489805e+00 + id 11737 + loc 8.4732890129089355e-01 9.1051715612411499e-01 410 + blend 0.0000000000000000e+00 + interp 4.8846850164485167e-01:2.8055266272444468e-01:1.6739568888584289e-01:3.4297615159984540e-01:1.3521050935091825e+00:4.8846361695983526e-01:1.8739717878579516e+00:2.6649626805222676e-01:2.6356877178306211e+00:3.7080698335008122e-01:3.5406179680082421e+00 + CVs 20 + 6.1780025600488697e-01 2.3740476446828757e-01 -2.1098423841681152e-01 + 1.0955816975888655e+00 3.8860162246646290e-01 -4.3396772552311719e-01 + 1.5460178874663615e+00 5.1537549255051118e-01 -6.6375074457834493e-01 + 1.9873887289477172e+00 6.2562486502985815e-01 -8.9825539915486641e-01 + 2.3897203870554677e+00 7.0373737474554199e-01 -1.1326447201118304e+00 + 2.7397847969252669e+00 7.4640452563952098e-01 -1.3623027235348590e+00 + 3.0555930395781239e+00 7.5803966483921992e-01 -1.5953008164138027e+00 + 3.3758699150201039e+00 7.3140077986423813e-01 -1.8601462340390671e+00 + 3.7309600260991131e+00 6.4012193655386995e-01 -2.1804873368602564e+00 + 4.1296430434787688e+00 4.4516094527514061e-01 -2.5500521632538682e+00 + 4.5552519019285640e+00 1.0352426960693117e-01 -2.9301018016134046e+00 + 4.9768478419690414e+00 -3.8434598742985315e-01 -3.2785727432719884e+00 + 5.3811648711768658e+00 -9.5287070663921147e-01 -3.6161228646848276e+00 + 5.7728158133747680e+00 -1.5176704609598635e+00 -4.0020256410880437e+00 + 6.1680107952054239e+00 -2.0214587785974039e+00 -4.4506278229579763e+00 + 6.6004231983275012e+00 -2.4793652787911227e+00 -4.9375736132279258e+00 + 7.0964218362768481e+00 -2.9608322379128089e+00 -5.4221644107463067e+00 + 7.6416487259422388e+00 -3.5047957076110250e+00 -5.8581203437933196e+00 + 8.1534746626421324e+00 -4.1449202955136490e+00 -6.2875410351112553e+00 + id 11738 + loc 7.8455001115798950e-01 5.5263686180114746e-01 1090 + blend 0.0000000000000000e+00 + interp 1.1496409434844013e+00:5.2006417799691051e-01:2.8907952188484465e-01:1.1496309434844012e+00:6.4923399142765370e-01:4.6072571240672927e-01:2.0178713712502949e+00:5.1249654750976714e-01:2.9653341286543498e+00:3.3424227028236791e-01:3.6307881305819087e+00:4.9758844541731334e-01:3.9974248017883420e+00 + CVs 20 + 1.8105701373169297e-01 4.3999436504365441e-01 1.3929964702284764e-01 + 2.4983073373431425e-01 7.9340007850104532e-01 2.2644566665671159e-01 + 2.7530276250694657e-01 1.1075987606854949e+00 2.9204339323563111e-01 + 2.9368226788940227e-01 1.3956748195681510e+00 3.5097479907986706e-01 + 3.0898786819429563e-01 1.6498072050552905e+00 4.0134966298642721e-01 + 3.2936622151811490e-01 1.8685511571269422e+00 4.4847398881238887e-01 + 3.5867536636403108e-01 2.0746667184141874e+00 5.0036998517240261e-01 + 3.6875622925729723e-01 2.3096164082549624e+00 5.4437817447128722e-01 + 3.0589360079130390e-01 2.5578699416567541e+00 5.3714497019739538e-01 + 1.7767430137344142e-01 2.7404759514020478e+00 4.6059609260203915e-01 + 3.8098623852963698e-02 2.8301635748489140e+00 3.3406903621129991e-01 + -8.2707972094241855e-02 2.8473471327860413e+00 1.7165158737353037e-01 + -1.7455164367901088e-01 2.8125192971754780e+00 -2.7077442051062106e-02 + -2.3511850197528172e-01 2.7315324293784879e+00 -2.7588921742095351e-01 + -2.7675117727204213e-01 2.5850371823167961e+00 -5.9287493107218714e-01 + -3.0850073727883576e-01 2.3123015114241690e+00 -9.3587216270986340e-01 + -3.0273563389229574e-01 1.8606365799133364e+00 -1.1913904359516163e+00 + -2.6177374712805801e-01 1.2561386987959846e+00 -1.2330780621920905e+00 + -2.7243057280276872e-01 1.0175496302625118e+00 -1.0351517977196023e+00 + id 11739 + loc 8.8691473007202148e-01 2.4442943930625916e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8159162748464562e-01:2.8577418726979187e-01:2.7024984357822857e-02:3.9265411280606966e-01:7.3554372643984445e-01:2.5528367341281505e-01:1.2357229934839324e+00:4.2113724308056938e-01:1.9447571254541587e+00:4.0971188340934050e-01:2.1328262381808223e+00:3.9607963797050921e-01:2.7084172915409903e+00:4.8158681156837080e-01:2.9998127627672506e+00:4.3865263518582909e-01:3.3174115215940834e+00 + CVs 20 + -1.1747342052684755e-01 1.4933662683709209e-01 2.1741018382081603e-01 + -1.9822765299658640e-01 3.3876856141632594e-01 4.4662354584868158e-01 + -2.4528715886378025e-01 5.4753465045613470e-01 6.6241247634053346e-01 + -2.6518022156097376e-01 7.5269965366192515e-01 8.4983269012711005e-01 + -2.7171858837828022e-01 9.4287558501548108e-01 1.0188816881615339e+00 + -2.8279608056588090e-01 1.1164964827058268e+00 1.1883115872481502e+00 + -3.1336235418650760e-01 1.2719031001944936e+00 1.3784986969696842e+00 + -4.0192240282391001e-01 1.3866947483923280e+00 1.6198783104143717e+00 + -5.9770348797965178e-01 1.4000135084163980e+00 1.8924098502809767e+00 + -8.9138003214176431e-01 1.2824432553391893e+00 2.1101459553438140e+00 + -1.2364020855774751e+00 1.0671125687967729e+00 2.2231721743000619e+00 + -1.5931186868653606e+00 7.9124797418907711e-01 2.2225843834709935e+00 + -1.9003009964098532e+00 4.8689957526037386e-01 2.1073934891468298e+00 + -2.0828852087476730e+00 1.9891772529663410e-01 1.9106367725826778e+00 + -2.1404576993565492e+00 -6.5065019653515854e-02 1.6764262129313934e+00 + -2.1643203790235330e+00 -3.7504863571706670e-01 1.3953791976172472e+00 + -2.3323247818010189e+00 -7.7521800246715089e-01 1.0387220703355688e+00 + -2.7596577904012669e+00 -1.0649987940650949e+00 7.0946962509930001e-01 + -3.0799122971063770e+00 -1.0803520662158657e+00 5.9874949625900498e-01 + id 11740 + loc 1.8572178483009338e-01 6.9742214679718018e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0889145073526290e-01:2.9724775326039443e-01:3.2776851995561385e-01:4.0888736182075558e-01:9.9261918246220571e-01:2.9794376613931056e-01:1.6808573762592545e+00:3.2440232860098372e-01:2.5539782669025666e+00:3.4780187087076614e-01:3.3230310341283782e+00 + CVs 20 + 1.3781357368261932e-01 2.7050230676967463e-01 -5.2348892271036271e-02 + 2.3128382716584339e-01 5.5151045293921985e-01 -1.1691065780462229e-01 + 3.0957908565201708e-01 8.3826905690230613e-01 -1.9706236671331323e-01 + 3.9302130890169873e-01 1.1247296995887099e+00 -2.9504379386346768e-01 + 4.8752244054486660e-01 1.4164359527897585e+00 -4.2079239150688924e-01 + 6.0379461385979871e-01 1.7124856740071865e+00 -5.9048985506202700e-01 + 7.5685399814466514e-01 1.9966674273367893e+00 -8.1897862505084751e-01 + 9.5863272884133077e-01 2.2403188840346169e+00 -1.1105053222896060e+00 + 1.2129139488446361e+00 2.4132040660238516e+00 -1.4557590486100165e+00 + 1.5141239321361160e+00 2.4902567865431093e+00 -1.8319210166226696e+00 + 1.8455738227621123e+00 2.4592190445267517e+00 -2.2121263912868434e+00 + 2.1824662756704409e+00 2.3239585474418165e+00 -2.5800543966497029e+00 + 2.4952209778636676e+00 2.0982971280515157e+00 -2.9265822749061305e+00 + 2.7472398525033443e+00 1.8072939297051502e+00 -3.2363477067403759e+00 + 2.9034639487614564e+00 1.5013844213931244e+00 -3.4870988301196819e+00 + 2.9552512524293846e+00 1.2668963855949966e+00 -3.6477667238953453e+00 + 2.9471663665755909e+00 1.1727912512868310e+00 -3.6821088551120473e+00 + 2.9480247624075155e+00 1.1853997247406562e+00 -3.6000003087159560e+00 + 2.5795569433928409e+00 1.1537673605717911e+00 -3.8289356610029741e+00 + id 11741 + loc 9.5251828432083130e-02 4.2969009280204773e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2392762822453850e-01:2.8839882549266688e-01:7.1813880866385260e-01:3.8609519031556289e-01:1.7945413160561781e+00:3.3804707784063187e-01:2.4427603775360640e+00:2.4582921385668532e-01:3.1785556207393864e+00:4.2392338894825626e-01:3.8690001394371172e+00 + CVs 20 + 4.5968375864146560e-01 4.2235266860864962e-01 1.8040906087634723e-01 + 7.8261162419656494e-01 7.7401404124235673e-01 3.5217913525608557e-01 + 1.0507710106484336e+00 1.0973967927616788e+00 5.3366961867508189e-01 + 1.2976752846043313e+00 1.4169706371269422e+00 7.4478237330659802e-01 + 1.5132565199249026e+00 1.7287672294595082e+00 9.9979982725200400e-01 + 1.6848253188838964e+00 2.0254660369133393e+00 1.3109105584831697e+00 + 1.7951363990207367e+00 2.2943978208677818e+00 1.6861877724604106e+00 + 1.8231001183050799e+00 2.5156587540483812e+00 2.1237788284534984e+00 + 1.7511953494623389e+00 2.6636721766936038e+00 2.6049992963126125e+00 + 1.5834639946313054e+00 2.7150153831317718e+00 3.0873132361132396e+00 + 1.3554507899221364e+00 2.6650876191540616e+00 3.5290864544782345e+00 + 1.1069709575169964e+00 2.5231935290725858e+00 3.9205917252030047e+00 + 8.6751734609605036e-01 2.2994037746961067e+00 4.2669690263810907e+00 + 6.6486188145708902e-01 2.0117645745098147e+00 4.5689062995163061e+00 + 5.2529590477620403e-01 1.6900427891832317e+00 4.8285050968750962e+00 + 4.6719969659994159e-01 1.3806701749931820e+00 5.0471635557945902e+00 + 4.7301658240288985e-01 1.1401377036964759e+00 5.2232764971015548e+00 + 5.0858280249267762e-01 9.7842664014284075e-01 5.3787530565522861e+00 + 7.0945999888393219e-01 6.6390860685159880e-01 5.7269168426309580e+00 + id 11742 + loc 4.8438122868537903e-01 4.0890079736709595e-01 1053 + blend 0.0000000000000000e+00 + interp 3.9292250658181471e-01:3.8196240879045867e-01:6.6384336082364503e-01:3.5864098969375430e-01:1.2807975040357440e+00:3.7698454118344388e-01:2.1968610176217647e+00:2.8099781480568836e-01:3.0040620078428883e+00:3.9291857735674890e-01:3.9608206881497514e+00 + CVs 20 + 3.6970915946787875e-01 4.3199400690328743e-01 9.8580625068508870e-02 + 7.2168802585758529e-01 8.2243318332222004e-01 2.1854835634273378e-01 + 1.0823182276369254e+00 1.1870935308017063e+00 3.4981920006160611e-01 + 1.4606303945975276e+00 1.5317941942449138e+00 5.0556796087375011e-01 + 1.8469829411673915e+00 1.8434489257110325e+00 7.0740983256342793e-01 + 2.2308622364351889e+00 2.1045853560228167e+00 9.7509855041075810e-01 + 2.6005436869449454e+00 2.2956334960456810e+00 1.3256992411238997e+00 + 2.9387577436294690e+00 2.3939295359824087e+00 1.7727163594233173e+00 + 3.2157475329392637e+00 2.3656612067500280e+00 2.3118772141382080e+00 + 3.3943741975883399e+00 2.1657269278429725e+00 2.9081885111801147e+00 + 3.4403233432907525e+00 1.7568000648606144e+00 3.4797864381683032e+00 + 3.3545708397882006e+00 1.1776899331410522e+00 3.9077442780186535e+00 + 3.1700660213952174e+00 5.1302006185203275e-01 4.1419516831792969e+00 + 2.8957558464929543e+00 -1.8133718219799394e-01 4.2008955540595494e+00 + 2.5010042656831755e+00 -8.6155126043626651e-01 4.1282090355735512e+00 + 1.9055125010672742e+00 -1.4830257134159490e+00 3.9687438355755362e+00 + 1.0060402069093701e+00 -1.9258186132101076e+00 3.7694958800730016e+00 + -4.5794689624336415e-02 -1.9720006771917886e+00 3.6402834344785209e+00 + -4.5009409848908932e-01 -1.8707122926154716e+00 3.7049095040597027e+00 + id 11743 + loc 1.2089736014604568e-01 9.3468528985977173e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6593990690815856e-01:3.1498476410581344e-01:2.3621948311823104e-01:4.5194083241330463e-01:1.5060214368226879e+00:3.3497271567539727e-01:2.4778922028653132e+00:4.6593524750908949e-01:3.0714584336751165e+00:3.0245837073708970e-01:3.6742018210392571e+00 + CVs 20 + -1.6800840075356147e-01 3.6102873587414680e-01 4.6652854548069977e-01 + -3.3075798084921532e-01 6.5321508096002479e-01 8.3616748873571922e-01 + -4.7609675334475582e-01 9.2668161410376637e-01 1.1901345237037788e+00 + -6.0990757054291389e-01 1.2066620446366776e+00 1.5533088555534780e+00 + -7.5881885876068089e-01 1.4994215569664955e+00 1.9055290003232532e+00 + -9.5079043889540704e-01 1.8059758477190559e+00 2.2216726167785033e+00 + -1.2095426405895431e+00 2.1199411551058147e+00 2.4691455570177920e+00 + -1.5562274813666048e+00 2.4286981905871627e+00 2.5941062587699277e+00 + -1.9724312424310029e+00 2.6798104026331080e+00 2.4919391501715942e+00 + -2.3036937457652007e+00 2.7674207028403615e+00 2.1520836038181064e+00 + -2.4681310169936594e+00 2.6826315648887311e+00 1.7342280201498328e+00 + -2.5118289480755438e+00 2.4469280197110668e+00 1.3432035508105906e+00 + -2.4812005199451925e+00 2.0747439576712421e+00 1.0382315660286081e+00 + -2.3801389178064749e+00 1.6084845672728396e+00 8.0554206612504009e-01 + -2.1738504174494340e+00 1.1245768256668238e+00 5.7013370285503640e-01 + -1.8565222099737029e+00 7.5431811542957550e-01 2.6159065915265184e-01 + -1.4953193979031643e+00 6.2967289765812418e-01 -1.3105627640841563e-01 + -1.1706130853483536e+00 7.3934485569323394e-01 -5.3699233198578644e-01 + -7.9125009155844594e-01 6.8101702146278265e-01 -9.3192428243639469e-01 + id 11744 + loc 5.7882308959960938e-02 4.5852756500244141e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2092990077308501e-01:3.5122865895338284e-01:7.4842691372292758e-01:4.1950072336713806e-01:1.3923412165378712e+00:2.7805014800894901e-01:2.0097848518774208e+00:4.2092569147407732e-01:2.9644126451779869e+00:3.8221966220173398e-01:3.1975378869534845e+00:3.9375246315610024e-01:3.9780229680387884e+00 + CVs 20 + -8.6418060898394308e-02 4.5324601984137025e-01 -2.8469633382812476e-01 + -1.5826244609221179e-01 9.2246897119309579e-01 -5.2941244843511737e-01 + -1.9647280725612251e-01 1.3930846906075038e+00 -7.2705723976979808e-01 + -1.8331414454686423e-01 1.8498993905666177e+00 -8.6403728501738275e-01 + -1.5186783339289270e-01 2.3179697812187987e+00 -9.5104912547055864e-01 + -2.2692973067475397e-01 2.8660834454297639e+00 -1.0335932389220819e+00 + -5.6859940913564799e-01 3.4137794300054551e+00 -1.1673806921088474e+00 + -1.1060570607917914e+00 3.7477023794522024e+00 -1.3583592019602020e+00 + -1.6628493523914472e+00 3.8405882721929756e+00 -1.5934828613429572e+00 + -2.1282870094974511e+00 3.7690510637071468e+00 -1.8647329661908116e+00 + -2.4719803359610037e+00 3.6183117589750626e+00 -2.1623905825979723e+00 + -2.7263797241325687e+00 3.4194545156908891e+00 -2.4942611299816089e+00 + -2.9193971667451759e+00 3.1524233866354749e+00 -2.8835257059992241e+00 + -3.0408321059091157e+00 2.7609574131838102e+00 -3.3515453776955777e+00 + -3.0393274189805379e+00 2.1829554377534448e+00 -3.8497327995618269e+00 + -2.8271102318796042e+00 1.4126486861750751e+00 -4.2390275373819444e+00 + -2.2302795241091133e+00 5.2782063400292045e-01 -4.3156750575247314e+00 + -1.3765024678064819e+00 -3.3234989067416509e-02 -3.9201310361182164e+00 + -1.0052856100010923e+00 -2.3445002101699874e-01 -3.6968928135954426e+00 + id 11745 + loc 9.6260952949523926e-01 3.6093911528587341e-01 1087 + blend 0.0000000000000000e+00 + interp 1.0574203015251937e+00:4.1026165307732831e-01:4.3545686411045836e-02:3.8609519031556289e-01:7.8217554970936565e-01:5.0200380502197395e-01:1.0152818650504496e+00:5.0781830810116291e-01:1.3460304973045192e+00:3.7242214744263363e-01:1.9062613262988082e+00:3.6829986313462049e-01:3.7764007368799430e+00:7.4219210572099348e-01:3.8367038255785486e+00:1.0574103015251937e+00:3.9825290952281107e+00 + CVs 20 + 1.7137138108958141e-01 4.3131277411960689e-01 -4.0899034451869343e-01 + 3.1762929693546504e-01 7.8473706960776757e-01 -6.6643126925093865e-01 + 4.6487181619921003e-01 1.1130919196395415e+00 -8.6940196663715574e-01 + 6.2300726286338248e-01 1.4395303232983847e+00 -1.0636681422526992e+00 + 8.0290507969722358e-01 1.7623271505653233e+00 -1.2438820373100032e+00 + 1.0167871468670600e+00 2.0797102874401454e+00 -1.4039057937299928e+00 + 1.2778051966601793e+00 2.3879005319597573e+00 -1.5339092896097664e+00 + 1.5983251323798255e+00 2.6783519362235948e+00 -1.6160744591937171e+00 + 1.9850479479029131e+00 2.9354072869780010e+00 -1.6211409698163568e+00 + 2.4216573722567598e+00 3.1282041981127886e+00 -1.5105812932244167e+00 + 2.8638569968659504e+00 3.2192073852655509e+00 -1.2724805520356051e+00 + 3.2776522575733629e+00 3.1852492910846779e+00 -9.3452471642534674e-01 + 3.6488316161033629e+00 3.0125180906167799e+00 -5.3244567293140266e-01 + 3.9677808404187238e+00 2.6832682874352534e+00 -9.4761726179302563e-02 + 4.2348138322671680e+00 2.1765028893165779e+00 3.3284341279016227e-01 + 4.4446466814114336e+00 1.5226765825107944e+00 6.5593448530877763e-01 + 4.6027830349790806e+00 7.9781401590822554e-01 8.2066882012673426e-01 + 4.7778652707302705e+00 5.6187726955934658e-02 8.2307092614882482e-01 + 4.9887956312528532e+00 -4.9129926048386885e-01 7.0463696021525446e-01 + id 11746 + loc 1.8962908536195755e-02 6.0001313686370850e-02 1054 + blend 0.0000000000000000e+00 + interp 7.7719930244597690e-01:4.8435095170634035e-01:6.6460251206031251e-01:3.5699567440567759e-01:1.4069362736872995e+00:2.7931389161549020e-01:2.6138389318455548e+00:6.5748053870414436e-01:2.9999735001552148e+00:7.7719153045295253e-01:3.4277803727523635e+00:6.2113843362715238e-01:3.9896707115744632e+00 + CVs 20 + 6.7772605799546054e-02 3.9964386520309958e-01 -3.9118648760802349e-01 + 1.7316847602588537e-01 7.6909030073788665e-01 -7.5048365417444551e-01 + 3.3658970480171380e-01 1.0693155244899484e+00 -1.0801785696990076e+00 + 5.4797348838451831e-01 1.2681944510499639e+00 -1.3882054437313618e+00 + 7.7961388701638468e-01 1.3647427388637787e+00 -1.6929388340295541e+00 + 1.0020063575792240e+00 1.3696782830608276e+00 -2.0060009498170421e+00 + 1.1923928225373990e+00 1.2894447526565975e+00 -2.3158107896720708e+00 + 1.3450300201133736e+00 1.1368176358464390e+00 -2.6077589137489614e+00 + 1.4669065687285630e+00 9.2210548777557733e-01 -2.8717014679935779e+00 + 1.5616204246157941e+00 6.4817843578851320e-01 -3.0867219185707291e+00 + 1.6278888914678837e+00 3.1690090036909685e-01 -3.2242069650421183e+00 + 1.6620194188278006e+00 -6.6213304476383739e-02 -3.2647974624285450e+00 + 1.6815574818706900e+00 -4.8950635238001605e-01 -3.1926090314045039e+00 + 1.7806969972593567e+00 -9.5542786909110711e-01 -3.0001377491502614e+00 + 2.1076207572922669e+00 -1.4166912359892123e+00 -2.6823863010447035e+00 + 2.7562951999424006e+00 -1.6775377283772048e+00 -2.2798506032369303e+00 + 3.5944403753529004e+00 -1.5520953662216042e+00 -1.9410382719874844e+00 + 4.3388733212999071e+00 -1.2548857331316476e+00 -1.7450257785429861e+00 + 4.9055098827500760e+00 -1.2630713099918784e+00 -1.5666567569144372e+00 + id 11747 + loc 1.5684138238430023e-01 3.8548383116722107e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9735760591285938e-01:4.7224538284715090e-01:4.1588928027117456e-01:4.9735263233680027e-01:9.7048237345036514e-01:3.5744619347802647e-01:1.7434520495930430e+00:3.8725812809308346e-01:2.2962984452679756e+00:3.7918307558676606e-01:3.0788901328398239e+00:3.9016064676747397e-01:3.9338049096584422e+00 + CVs 20 + -1.9942899156844426e-01 6.2048626664099693e-01 -2.2012416984144340e-01 + -3.1384601999872186e-01 1.2147084559570762e+00 -4.9224867123414190e-01 + -3.0997562573518112e-01 1.7462968880738781e+00 -7.9941589454259510e-01 + -2.0214106030694573e-01 2.1787186578723716e+00 -1.1228851980439436e+00 + -3.3418016546104545e-02 2.5148337652451622e+00 -1.4591477147866281e+00 + 1.4950417430126395e-01 2.7681072351453997e+00 -1.8031566672422406e+00 + 3.1340079237049434e-01 2.9480410075456258e+00 -2.1358335424284087e+00 + 4.4714590289154410e-01 3.0695069071065317e+00 -2.4721033668380930e+00 + 5.3871414401949758e-01 3.1188782986286125e+00 -2.8428993750721445e+00 + 5.6510206876174363e-01 3.0887503661039570e+00 -3.2277352858632247e+00 + 5.2174165196204447e-01 2.9574350069799951e+00 -3.6078594338114316e+00 + 4.7487627633839968e-01 2.6509897707800079e+00 -3.9448771562085163e+00 + 5.3957378468498063e-01 2.1571628002355605e+00 -4.1691203297729729e+00 + 7.7192301108310613e-01 1.5612563187348141e+00 -4.2444919211242009e+00 + 1.0880721474786770e+00 1.0108581119716078e+00 -4.1800364019106526e+00 + 1.1598120101630385e+00 8.7081618701828223e-01 -3.8724854840146974e+00 + -5.9331537881593199e-01 -8.6971959818290334e-01 -2.1494638122192389e+00 + -7.8368299034175004e-01 -1.0722199356788169e+00 -2.4874988775105322e+00 + -8.2059166320416643e-01 -6.6269026220613936e-01 -2.5621701261154022e+00 + id 11748 + loc 2.1238605678081512e-01 1.4639571309089661e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3501071543700970e-01:3.6651531885377653e-01:4.4157448325383175e-01:4.0853345951314446e-01:1.0217464537033019e+00:4.3473878908868308e-01:1.6096747685937736e+00:3.0744233872707810e-01:2.2548253733299912e+00:3.9480349270303011e-01:2.9750511541551932e+00:4.0287535480198067e-01:3.3349081466031905e+00:4.3500636532985537e-01:3.9519202431418305e+00 + CVs 20 + 4.2849138238946025e-02 4.3274774551952866e-01 -2.4972887260130328e-01 + 5.3615108317897897e-03 8.7175130144894486e-01 -5.0384806538758853e-01 + -9.2649957139475880e-02 1.3170911572701929e+00 -7.6006351440336073e-01 + -2.6424065438289418e-01 1.7613297112130106e+00 -1.0096553224360749e+00 + -5.1963600585069725e-01 2.1793614333951208e+00 -1.2445443919342307e+00 + -8.4586850558136173e-01 2.5411631923383862e+00 -1.4767438350897484e+00 + -1.2178953509845223e+00 2.8268912991414643e+00 -1.7287275365809593e+00 + -1.6115555228713612e+00 3.0234417371097320e+00 -2.0154746557531396e+00 + -2.0037881230156911e+00 3.1059034145706637e+00 -2.3497122140662672e+00 + -2.3635977774327195e+00 3.0288320472082120e+00 -2.7357811083017971e+00 + -2.6589236701969723e+00 2.7447662628311447e+00 -3.1294142112712651e+00 + -2.8812761140788314e+00 2.2352761326344441e+00 -3.4179135940250633e+00 + -3.0113874511464669e+00 1.5807285349412672e+00 -3.4901240392817843e+00 + -3.0316202166466453e+00 9.4990842146285670e-01 -3.3852731022687692e+00 + -2.9561580640383567e+00 3.9018938558647753e-01 -3.1823955530804233e+00 + -2.7828097863265238e+00 -1.0118093540847872e-01 -2.7751931647113435e+00 + -2.5001574236406046e+00 -2.8217078553575559e-01 -1.9536775281897605e+00 + -2.2515967147619427e+00 -9.3729660069674647e-04 -1.2078988526474019e+00 + -2.0666388591567735e+00 -7.0009223520990926e-02 -9.1896807482451304e-01 + id 11749 + loc 5.7882308959960938e-02 4.2877513170242310e-01 410 + blend 0.0000000000000000e+00 + interp 4.3559660638816788e-01:3.0328596100910882e-01:6.8772504149375591e-01:4.3559225042210403e-01:1.2467518105740256e+00:3.5369379492965380e-01:1.9575635281076640e+00:3.8596124278970018e-01:2.3181887684992653e+00:2.6216028477569869e-01:3.1328133145448360e+00:2.9891460560235500e-01:3.9990830634482579e+00 + CVs 20 + -7.7604320818838973e-02 1.3168620263900693e-01 -2.7052801799391196e-01 + -1.5579161613349402e-01 2.5507296700786447e-01 -4.9724677949243240e-01 + -2.2163008415818963e-01 3.9087992131829785e-01 -7.1100802593242340e-01 + -2.6837433363997076e-01 5.4866390158938672e-01 -9.2785510985094488e-01 + -2.9182419272233662e-01 7.2447075475172962e-01 -1.1484046251534399e+00 + -2.8646153050029233e-01 9.1345783007772474e-01 -1.3710780458573675e+00 + -2.4670521439571969e-01 1.1108976919142504e+00 -1.5929755947096131e+00 + -1.6979469745924969e-01 1.3120990485632711e+00 -1.8110074900168469e+00 + -5.6789317055266353e-02 1.5120350512836969e+00 -2.0200867072264614e+00 + 8.8613838734586170e-02 1.7062877103644036e+00 -2.2140052303705913e+00 + 2.6651614992433714e-01 1.8927415301860930e+00 -2.4040459463098935e+00 + 4.8689359719489506e-01 2.0661876301645812e+00 -2.6436808134040461e+00 + 7.3450990161324703e-01 2.2008967398187713e+00 -3.0014593978165784e+00 + 9.3971905187509230e-01 2.2628363655442412e+00 -3.4697849701237358e+00 + 1.0611232247976996e+00 2.2494100364824456e+00 -3.9792995892440799e+00 + 1.0983078283804344e+00 2.1686137904780569e+00 -4.4972743060933000e+00 + 1.0461907797935486e+00 2.0279908941971492e+00 -5.0061595473267015e+00 + 9.1059077288466717e-01 1.8489451745613790e+00 -5.4741420244929131e+00 + 8.6484941158960360e-01 1.7548709420932007e+00 -5.7749165272933300e+00 + id 11750 + loc 3.6771318316459656e-01 6.1187750101089478e-01 1070 + blend 0.0000000000000000e+00 + interp 3.5572812039864721e-01:3.5572456311744322e-01:2.9223583898154715e-03:2.6026216291938808e-01:9.8344109338990815e-01:3.3785724087067731e-01:1.4623730626340734e+00:2.7398948164229525e-01:2.0030482866632329e+00:3.5522846947590991e-01:2.7970650649404538e+00:2.7501558491905514e-01:3.1464611345069269e+00 + CVs 20 + -3.2071824163765711e-01 2.4044017213848587e-01 2.8263021393210519e-01 + -5.7478398745603143e-01 4.0632032017963682e-01 5.0277202271032617e-01 + -7.7297374177171863e-01 5.4685278350542210e-01 7.4181362216740809e-01 + -9.2998746579207825e-01 6.9797588817039546e-01 1.0443527031419790e+00 + -1.1035395935016905e+00 8.8845663553550858e-01 1.3718840528791509e+00 + -1.3561220522026809e+00 1.1229910270757184e+00 1.6481767506278786e+00 + -1.7107478805271192e+00 1.3704485416575660e+00 1.8227668177056928e+00 + -2.1803226524146391e+00 1.5921704606395006e+00 1.8591452762416094e+00 + -2.7350608767830900e+00 1.7442798796642796e+00 1.6836397304540696e+00 + -3.2080918907392468e+00 1.7781480238021550e+00 1.2699524582822164e+00 + -3.4604983853827407e+00 1.7068161449235024e+00 7.5469163317779997e-01 + -3.5182777009193118e+00 1.5631785547309227e+00 2.3254048599933097e-01 + -3.4228915792877457e+00 1.3495899177731245e+00 -2.2418608494835945e-01 + -3.2588931978859810e+00 1.1163534783815723e+00 -5.1107923451037751e-01 + -3.1298091989122150e+00 9.5631083318874699e-01 -6.3200033381274501e-01 + -3.0692546488998049e+00 9.0331781690389346e-01 -6.4097230629870927e-01 + -3.0602256979770033e+00 9.3653864696159494e-01 -4.9652602114547162e-01 + -3.0187647509501301e+00 9.1984033712267632e-01 -1.6006668992935913e-01 + -3.1070214792875683e+00 1.0247139962877858e+00 -4.3529563302072738e-01 + id 11751 + loc 1.1523611098527908e-01 9.3468528985977173e-01 1085 + blend 0.0000000000000000e+00 + interp 6.0680638349253035e-01:2.5971474888608759e-01:2.1093743318243630e-01:4.0258252092602292e-01:5.5431166440222068e-01:6.0680031542869550e-01:2.0010906470128971e+00:2.8345844852745439e-01:2.5931642744713912e+00:2.8006594478410035e-01:3.6457048084261481e+00 + CVs 20 + -3.7390072660355156e-03 6.3765464085873025e-01 4.1639964549513292e-01 + -6.4941330982483170e-02 1.1703808357999965e+00 6.8179065534506811e-01 + -1.5734678613528991e-01 1.6463136300463890e+00 8.9629200978462964e-01 + -2.8685518038780089e-01 2.0857743204427091e+00 1.0846278196054668e+00 + -4.6260986005092175e-01 2.4840249499506042e+00 1.2328684703121233e+00 + -6.9502491932469779e-01 2.8373085863947280e+00 1.3236062852707822e+00 + -9.9519220207943693e-01 3.1357483594117554e+00 1.3304935873306902e+00 + -1.3632728830178888e+00 3.3523903858085253e+00 1.2201314331893369e+00 + -1.7720118417425283e+00 3.4426534921534726e+00 9.7833833820687288e-01 + -2.1711636527266993e+00 3.3819956911133140e+00 6.5696270624804565e-01 + -2.5372099276544779e+00 3.1938796783627135e+00 3.3816678632549335e-01 + -2.8779803714377410e+00 2.9087557006412958e+00 6.8622984527450748e-02 + -3.2034555346624951e+00 2.5475692447030447e+00 -1.2676086978722795e-01 + -3.5209851634205833e+00 2.1266105150938452e+00 -2.2457161937351600e-01 + -3.8253405897795179e+00 1.6869891768390397e+00 -1.9924681958276225e-01 + -4.0925468217431709e+00 1.3354247620415967e+00 -5.4913738892536784e-02 + -4.2942760487823612e+00 1.1698370214551266e+00 1.4246254572465780e-01 + -4.4208775228603487e+00 1.1661541592014091e+00 3.2742000655751596e-01 + -4.6607778255841126e+00 1.0638864475427394e+00 6.8306571654830950e-01 + id 11752 + loc 5.9478715062141418e-02 5.1047354936599731e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4758300129382361e-01:3.0303020822582510e-01:3.4103457585517138e-02:2.4011010495958901e-01:9.6102975312045791e-01:3.0289589851340576e-01:2.0011346000391748e+00:3.8272723237653539e-01:2.5340156349102072e+00:4.4757852546381072e-01:3.0180689822459885e+00:4.1244877339013353e-01:3.7985076704292475e+00 + CVs 20 + 1.4807455082346591e-01 2.3546999508959113e-01 -1.4158821052954743e-01 + 2.2860403050277450e-01 5.0096333171135332e-01 -3.1374551375783433e-01 + 2.7235087836268845e-01 7.6737928179742276e-01 -4.9830321572757813e-01 + 2.9361508221227789e-01 1.0206760156511629e+00 -6.9043417098287652e-01 + 2.9343073115172663e-01 1.2614279556891463e+00 -8.9833513354539540e-01 + 2.7591613132166487e-01 1.4972436657359616e+00 -1.1315842289424953e+00 + 2.5687252578390896e-01 1.7445793953262143e+00 -1.4079904060814283e+00 + 2.8480355741717933e-01 2.0103200811630257e+00 -1.7583700257884849e+00 + 4.3346805543436362e-01 2.2370375347075515e+00 -2.1825099248978095e+00 + 7.0995299634383213e-01 2.3451769096966375e+00 -2.6179478108166427e+00 + 1.0528497894084312e+00 2.3442764114653754e+00 -3.0069163217576738e+00 + 1.4056831246234016e+00 2.3056659450366839e+00 -3.3287725940618547e+00 + 1.7555640995634345e+00 2.2309019373326131e+00 -3.6058354588174777e+00 + 2.0338873246446334e+00 1.9584296554017229e+00 -3.8827290037679192e+00 + 2.1559373678431215e+00 1.4183267964164630e+00 -4.1335201604431759e+00 + 2.1803646118300830e+00 7.1102565210058466e-01 -4.2687650813102653e+00 + 2.2248973073971365e+00 -1.2435425692286173e-02 -4.2473477249402425e+00 + 2.3862733373019562e+00 -5.3143622181698247e-01 -4.1244214549796077e+00 + 2.7033462423127479e+00 -5.6327496193625648e-01 -4.0137042613165539e+00 + id 11753 + loc 9.9799007177352905e-01 5.1227658987045288e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0092571390561047e-01:4.0182419356688287e-01:6.3725778130189537e-02:5.0092070464847138e-01:6.7850105058305465e-01:3.9639566464454301e-01:1.0106461352265734e+00:3.9142829165753201e-01:1.6956616599721817e+00:4.4370040531734256e-01:2.4874306754616198e+00:2.0174709891187931e-01:3.0544449639214570e+00 + CVs 20 + 1.3650679486718117e-01 2.8604880182036196e-01 -1.8647343844027070e-01 + 2.7741061028355912e-01 5.8510991190074824e-01 -3.6697218536501847e-01 + 4.4317094329294249e-01 8.9529194603179429e-01 -5.5522115277213480e-01 + 6.4004910131903892e-01 1.2112089275277278e+00 -7.6283198315121803e-01 + 8.6166026550285846e-01 1.5284361262372459e+00 -1.0018058999559647e+00 + 1.0962311902883628e+00 1.8412278778661884e+00 -1.2865074569240393e+00 + 1.3263785113025988e+00 2.1369911129323431e+00 -1.6369582660084880e+00 + 1.5297512961444246e+00 2.3937133876682593e+00 -2.0707536338605670e+00 + 1.6812884089000000e+00 2.5798426869676296e+00 -2.5917032445577406e+00 + 1.7618981050977482e+00 2.6600005230294950e+00 -3.1839762692369526e+00 + 1.7654792892736240e+00 2.6020529684012192e+00 -3.8119420929395678e+00 + 1.7031460209604208e+00 2.3896551788448486e+00 -4.4264754793805112e+00 + 1.6033599664365212e+00 2.0283489090776614e+00 -4.9829328823820793e+00 + 1.5009349237149194e+00 1.5359554893913656e+00 -5.4480930620756247e+00 + 1.4242385439582184e+00 9.3599240542466877e-01 -5.7924724899720070e+00 + 1.3820978912992232e+00 2.6096849186964510e-01 -5.9805047821445694e+00 + 1.3595243686729406e+00 -4.2993016326376110e-01 -5.9820624719795950e+00 + 1.3380697358426445e+00 -1.0529403941794415e+00 -5.8336303371896232e+00 + 1.2861880356590953e+00 -1.4974226382677545e+00 -5.8123693901951397e+00 + id 11754 + loc 7.3812282085418701e-01 8.2687026262283325e-01 1053 + blend 0.0000000000000000e+00 + interp 5.2282997555314226e-01:3.8784093435016254e-01:9.7885025618571486e-04:4.3419260896270423e-01:9.0886094612764312e-01:5.2282474725338679e-01:1.1466587949346778e+00:3.5759313707479157e-01:1.7882342164600582e+00:2.9271551821845326e-01:2.2178849245749506e+00:4.3325552419688451e-01:2.9434355074246232e+00:3.7934069723277508e-01:3.3483733046506159e+00 + CVs 20 + 9.0714582375556185e-05 3.8490680000764621e-01 2.7839440778692409e-01 + -8.1791432134028175e-02 7.2238464833486837e-01 5.3262255689893556e-01 + -2.0754733613498455e-01 1.0420978729764365e+00 7.7902501200683805e-01 + -3.6523053213587620e-01 1.3450165890270072e+00 1.0158712403064574e+00 + -5.5830979780668721e-01 1.6123831579664638e+00 1.2306661758705855e+00 + -7.7774659230060139e-01 1.8167374414209332e+00 1.4092110912374449e+00 + -9.9527438864169948e-01 1.9243593884908750e+00 1.5301286802871887e+00 + -1.1582703724639172e+00 1.9223453647720281e+00 1.5661604900324926e+00 + -1.2256912791935590e+00 1.8578153167931202e+00 1.5206610292602987e+00 + -1.2230976041473469e+00 1.7887420698508456e+00 1.4329362189677519e+00 + -1.2006348834633627e+00 1.7159911533227317e+00 1.3222286660485145e+00 + -1.1709826451442975e+00 1.6144858217581222e+00 1.1783619856839840e+00 + -1.1161030196842614e+00 1.4907836712112044e+00 9.9497299174825415e-01 + -1.0377205938550531e+00 1.3685181896793361e+00 7.7310957890010190e-01 + -9.6141587787808480e-01 1.2928499966143443e+00 5.3156512063367711e-01 + -9.1705350051983769e-01 1.3223075630519536e+00 3.4962324595410899e-01 + -9.0508994043048907e-01 1.4256798270985058e+00 3.2466231804512352e-01 + -8.9151154820102163e-01 1.4874688839035251e+00 3.5373594600991903e-01 + -8.5794069475472301e-01 1.5947583522582320e+00 5.8879580851903868e-02 + id 11755 + loc 8.0149954557418823e-01 6.5008252859115601e-02 1077 + blend 0.0000000000000000e+00 + interp 5.4813044462263438e-01:2.8130450818495695e-01:7.1129774132205004e-02:4.3839270802113750e-01:9.4149565664178381e-01:5.4812496331818816e-01:1.3292649244823389e+00:5.2812532727243644e-01:1.9044838194543596e+00:2.4771655571686368e-01:2.1801222000320939e+00:2.8252309210478066e-01:3.0638687343800228e+00:3.8918359058686935e-01:3.7298665041894843e+00 + CVs 20 + 3.1633324892657425e-02 3.4527262629840977e-01 2.9418463707438175e-01 + 5.2543084315894606e-02 7.0253868465849822e-01 5.6275414122669765e-01 + 4.7017954983792964e-02 1.0512220395609533e+00 8.5587692945803406e-01 + -9.0871957215703514e-03 1.3662350512773598e+00 1.2015203005681077e+00 + -1.3679547669505321e-01 1.6197463441962796e+00 1.6038763864060366e+00 + -3.4523571925453467e-01 1.7848248674540446e+00 2.0460553107576347e+00 + -6.3050246190203074e-01 1.8411631913732134e+00 2.4909242905652671e+00 + -9.7461799153577933e-01 1.7852897566977735e+00 2.8954876602982673e+00 + -1.3453060129383858e+00 1.6323682691834513e+00 3.2316187321687817e+00 + -1.7045262536248926e+00 1.4081435226540175e+00 3.5009768683204152e+00 + -2.0220889809674407e+00 1.1355348583499021e+00 3.7225149640692337e+00 + -2.2786341594805668e+00 8.3126456446277641e-01 3.9124413167627901e+00 + -2.4651671862726765e+00 5.1127937639737087e-01 4.0830580316383029e+00 + -2.5788371314365053e+00 1.8656704605512031e-01 4.2557042248846235e+00 + -2.6165102577513304e+00 -1.3569542738432316e-01 4.4536468921480097e+00 + -2.5875720188136491e+00 -4.3470105005746662e-01 4.6894375101405377e+00 + -2.5125621256926687e+00 -6.8701220450180189e-01 4.9593117103603790e+00 + -2.4235732196738344e+00 -8.7490025613222500e-01 5.2344742056263973e+00 + -2.3839100718339932e+00 -9.3152277521121074e-01 5.4428012348093970e+00 + id 11756 + loc 9.1934326337650418e-04 8.8845711946487427e-01 1048 + blend 0.0000000000000000e+00 + interp 5.5111533578376348e-01:2.1021367289659060e-01:5.4850545377405924e-01:3.2309390855857556e-01:1.2155783707877899e+00:3.8682281818754954e-01:1.9362759435352808e+00:5.5110982463040570e-01:2.0177984830554734e+00:4.4177277555616207e-01:3.0317210280598492e+00:5.0279041441228922e-01:3.5682120031302951e+00:4.4877888734354171e-01:3.9975002755467717e+00 + CVs 20 + 1.4039491535632945e-01 4.7369669233635825e-01 -3.2247382333717434e-01 + 2.9474346364541149e-01 9.6478267869873258e-01 -6.0372842284501582e-01 + 4.5098892520957329e-01 1.4679341167468132e+00 -8.1632278627614396e-01 + 6.2155430639260156e-01 1.9675999404066742e+00 -9.6977555805593174e-01 + 8.2874435697665194e-01 2.4399374376045779e+00 -1.0925271190531678e+00 + 1.0859562509641807e+00 2.8645872448043943e+00 -1.2136541562480545e+00 + 1.3939493984039257e+00 3.2277762921215056e+00 -1.3499901817014490e+00 + 1.7397380590649683e+00 3.5188893975488176e+00 -1.5076035920102355e+00 + 2.1019532224977926e+00 3.7357331220675554e+00 -1.6872343156112879e+00 + 2.4599664116072071e+00 3.8882127866434155e+00 -1.8909310893141267e+00 + 2.8051436780153658e+00 3.9915041971049603e+00 -2.1273184253678759e+00 + 3.1425907531857509e+00 4.0518489076430493e+00 -2.4171467323709139e+00 + 3.4728429797996316e+00 4.0580711321370968e+00 -2.7735537742962668e+00 + 3.7785017598156441e+00 3.9947267409894365e+00 -3.1811536115109296e+00 + 4.0344024022048313e+00 3.8615941727120218e+00 -3.6234402081746464e+00 + 4.2286416477775361e+00 3.6601664264648335e+00 -4.1238978774253532e+00 + 4.3489267642474561e+00 3.3438687934347282e+00 -4.7401827267945542e+00 + 4.3164742627045802e+00 2.8255964891212844e+00 -5.4087979880046140e+00 + 4.1857273106104724e+00 2.4567269968981913e+00 -5.6606637887642695e+00 + id 11757 + loc 3.9306053519248962e-01 2.6407280564308167e-01 1054 + blend 0.0000000000000000e+00 + interp 6.1880278751036388e-01:4.6393114809147118e-01:5.3415961490326902e-02:4.8001385960274068e-01:6.1716415047317974e-01:4.5221146699780618e-01:1.0289734591261868e+00:6.1879659948248877e-01:1.8595558774983210e+00:2.9594475931952224e-01:2.3647827189775996e+00:4.3533736461991024e-01:3.0148403219850475e+00:3.9318697082579562e-01:3.8385639294627523e+00 + CVs 20 + -9.2901714881480413e-02 3.9410236580438107e-01 -1.9976551493042560e-01 + -1.6055830580941399e-01 7.8073542156953879e-01 -3.9357559064310538e-01 + -1.9310976896665033e-01 1.1624753197689450e+00 -5.5845119642611651e-01 + -1.9765123803367735e-01 1.5243498003373370e+00 -7.0530185750390273e-01 + -1.9368610786165852e-01 1.8445624943057324e+00 -8.6758860106725100e-01 + -1.9966564626347394e-01 2.1086322499142467e+00 -1.0716857467277268e+00 + -2.2924963104722873e-01 2.3040970393191094e+00 -1.3289008817057149e+00 + -2.9628099415262699e-01 2.3994516190247515e+00 -1.6477758987300222e+00 + -3.9585846731455732e-01 2.3450807171775137e+00 -2.0109004776367452e+00 + -4.8993788312048547e-01 2.1134318298507244e+00 -2.3687598602727857e+00 + -5.1936797508946320e-01 1.7435193801579016e+00 -2.6879217267774509e+00 + -4.3739665177575993e-01 1.3609316048595197e+00 -2.9617091581464585e+00 + -2.9384596480809833e-01 1.1059765868340978e+00 -3.1635069709333816e+00 + -1.7778797977253824e-01 1.0029458850193973e+00 -3.3007722007038676e+00 + -1.6585387090888060e-01 1.0478399929553894e+00 -3.5247063372437717e+00 + -3.3053311936424157e-01 1.2356096725594261e+00 -3.8875498991646826e+00 + -6.7022153438177923e-01 1.4231437623484047e+00 -4.4663298443959691e+00 + -9.5857106458305386e-01 1.3272081117248642e+00 -5.3151223005190564e+00 + -1.1319573068545357e+00 1.2646011229164293e+00 -5.9767900603219193e+00 + id 11758 + loc 2.7981212735176086e-01 1.9032630324363708e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8043044818775296e-01:3.8042664388327108e-01:4.2873761581190717e-02:3.1285261084827160e-01:1.0001590776532832e+00:3.1090539890187568e-01:2.0106365254067802e+00:3.3530164235927346e-01:2.6815460144308103e+00:2.4062584706939197e-01:3.1028495475616520e+00 + CVs 20 + 3.2435356246320157e-01 3.2973520385322308e-01 1.9429718459652806e-01 + 6.0466807730357064e-01 6.0669695520931977e-01 3.5915739198860175e-01 + 8.9559171642539048e-01 8.6067497220135425e-01 4.7930428743262748e-01 + 1.2108975835184712e+00 1.1237271840884486e+00 5.7800876112843980e-01 + 1.5030344559755957e+00 1.4107299424179494e+00 7.0891453907600566e-01 + 1.7054956566247585e+00 1.7168646781979582e+00 9.2432796857738841e-01 + 1.7408533299005930e+00 2.0037023948606150e+00 1.2407783276648394e+00 + 1.5263729318235431e+00 2.2014232691199029e+00 1.5924116605834882e+00 + 1.0872278454755193e+00 2.2508845335752303e+00 1.7947699593134072e+00 + 6.2317504911095534e-01 2.1957872990385972e+00 1.7636435827541777e+00 + 2.2314810054101875e-01 2.0996473339133264e+00 1.5897930127418221e+00 + -1.2465809318292642e-01 1.9584176158675106e+00 1.3098115406733599e+00 + -3.9536542171556188e-01 1.7528058825403723e+00 9.3000323831687559e-01 + -5.5907682418231375e-01 1.5073454072131867e+00 5.2166846603210171e-01 + -6.6322888113660761e-01 1.2865448348159505e+00 1.8973738175498828e-01 + -7.6989489859878069e-01 1.1448010525072250e+00 -1.4738977306857083e-02 + -8.7013693708362827e-01 1.1377408284736559e+00 -6.9644024044191483e-02 + -8.1388008678228352e-01 1.3286107521226480e+00 8.1030753742806994e-02 + -9.7116005682659046e-01 1.2940852608899014e+00 -2.3787535744212281e-02 + id 11759 + loc 7.0518290996551514e-01 7.5261503458023071e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6890479663028573e-01:3.2652262316936859e-01:6.3282780032594887e-01:2.8273265749167609e-01:1.6656419629975940e+00:4.6890010758231943e-01:2.1821452254947347e+00:2.5894685977040788e-01:2.9807473695499080e+00:2.7415892130968605e-01:3.9500730509787725e+00 + CVs 20 + -2.8485356576130749e-01 2.3843182478414066e-01 1.5054203988977452e-01 + -5.1580772794379459e-01 4.4804984831003358e-01 2.8623332608644059e-01 + -6.9460042588251047e-01 6.5494632238289674e-01 4.4831271951953339e-01 + -8.4140517596476461e-01 8.8317730596309663e-01 6.4708853151869672e-01 + -1.0079028992316941e+00 1.1470274854977673e+00 8.3286187398661360e-01 + -1.2379166236164929e+00 1.4310666648995691e+00 9.3967429223804755e-01 + -1.5398145485808268e+00 1.6960577085423709e+00 9.3747151246540494e-01 + -1.9031934126773880e+00 1.9005572604607412e+00 8.1162127764376613e-01 + -2.2724262589017310e+00 2.0062424937320937e+00 5.4040656846265223e-01 + -2.5315766459136926e+00 1.9960774627135736e+00 1.5042230657530298e-01 + -2.6215558372549292e+00 1.8972627454021713e+00 -2.7652673365935287e-01 + -2.5613345048045080e+00 1.7327846189649567e+00 -6.9420536575330627e-01 + -2.3724847469899282e+00 1.5086014366356451e+00 -1.0438345887375753e+00 + -2.1145401654901419e+00 1.2659198633365969e+00 -1.2479833076684319e+00 + -1.8648072129488951e+00 1.0543661562492677e+00 -1.3352253874696873e+00 + -1.6613113118185137e+00 8.8202518401040864e-01 -1.4038985264561545e+00 + -1.5343512304191804e+00 7.8263002928121161e-01 -1.4978516844326866e+00 + -1.4844370498444095e+00 7.9440911724504337e-01 -1.5895219475082407e+00 + -1.4532376153337505e+00 8.4382853634461863e-01 -1.9458165949730126e+00 + id 11760 + loc 4.9401050806045532e-01 9.2626291513442993e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3298621507433749e-01:3.3603573754815264e-01:7.3627404145313435e-02:4.2516444077659948e-01:1.0073600252759449e+00:2.5236626793194522e-01:1.8069200122051703e+00:2.6159423810734272e-01:2.0174151480361013e+00:4.3298188521218678e-01:2.7175863506522018e+00:3.9589392277724550e-01:3.0287026442758296e+00:4.1086907994338140e-01:3.6695449645991562e+00 + CVs 20 + 2.0589929619845479e-01 2.7752781364247775e-01 -5.2574844123279889e-02 + 4.2487874735425163e-01 5.6865856565976147e-01 -1.0396170212730804e-01 + 6.6173435838112549e-01 8.6823666376177888e-01 -1.6718180944362840e-01 + 9.2079518616382705e-01 1.1680239951453788e+00 -2.5561383553572131e-01 + 1.2042464204819892e+00 1.4554084504840874e+00 -3.8413405250602423e-01 + 1.5078796612443366e+00 1.7118688230647525e+00 -5.7145689552002499e-01 + 1.8191123958386910e+00 1.9161457511262130e+00 -8.2901219999704656e-01 + 2.1212953714120601e+00 2.0521017509289239e+00 -1.1513565318709347e+00 + 2.3996709767660587e+00 2.1146386719305235e+00 -1.5191683028200083e+00 + 2.6464014845327606e+00 2.1089309144225385e+00 -1.9071621975163202e+00 + 2.8604285559968923e+00 2.0451939756831026e+00 -2.2935198821497362e+00 + 3.0413008948503535e+00 1.9320446715992639e+00 -2.6664490150410156e+00 + 3.1841319633306835e+00 1.7754412686121102e+00 -3.0225446956602591e+00 + 3.2782466425350192e+00 1.5859375313416284e+00 -3.3611392420050472e+00 + 3.3121081133804511e+00 1.3827398418911621e+00 -3.6792957438770562e+00 + 3.2848498167378497e+00 1.1889010764768324e+00 -3.9673825925461879e+00 + 3.2098538796412392e+00 1.0193551521773192e+00 -4.2172313771258638e+00 + 3.1043283358405032e+00 8.7801462708765843e-01 -4.4253162026076946e+00 + 2.9542772126565415e+00 8.6228647138701919e-01 -4.5160550335433571e+00 + id 11761 + loc 2.6670938730239868e-01 1.9032630324363708e-01 1085 + blend 0.0000000000000000e+00 + interp 3.9624633868387527e-01:3.6369556945468873e-01:5.3507808051824202e-02:2.9508266198612459e-01:9.9968876946247232e-01:2.9698515154589494e-01:2.0199340009352982e+00:3.2596037162134922e-01:2.6669525415404030e+00:3.9624237622048847e-01:3.5215343866803890e+00 + CVs 20 + 3.3912053813219334e-01 3.7282613948683052e-01 2.8310298924639282e-01 + 5.6896273719346269e-01 6.9851398190300484e-01 5.3834442954193218e-01 + 7.4845563216657340e-01 1.0053743826772872e+00 7.9701458733101571e-01 + 8.9304791733725664e-01 1.3014487301459827e+00 1.0743544827306537e+00 + 9.8713026243419844e-01 1.5776615544059847e+00 1.3730270763051444e+00 + 1.0186756568771165e+00 1.8258413847666495e+00 1.6885593038081141e+00 + 9.8160297881112790e-01 2.0393483440568256e+00 2.0087891329564105e+00 + 8.7748608817612206e-01 2.2148379913938152e+00 2.3176013223517815e+00 + 7.1208362626382637e-01 2.3535222826051774e+00 2.6030769457707374e+00 + 4.8592651321894431e-01 2.4566866921336379e+00 2.8641278192138899e+00 + 1.9375344490492719e-01 2.5189262438153328e+00 3.1070519013842333e+00 + -1.6595585401148727e-01 2.5265033197067401e+00 3.3408087166636218e+00 + -5.8607105475669108e-01 2.4588655984282402e+00 3.5734166305010886e+00 + -1.0596537286954590e+00 2.2854342568461701e+00 3.8108095177699619e+00 + -1.5754475599748006e+00 1.9562879262223827e+00 4.0609369501103494e+00 + -2.0590105479684979e+00 1.4522702560958307e+00 4.3061064394938908e+00 + -2.4254952430096326e+00 8.2125442629799972e-01 4.5033565631276664e+00 + -2.6415034366995869e+00 1.2943010019862156e-01 4.6709383350065803e+00 + -2.6837942077044126e+00 -1.3207401348182946e-01 4.8158416641532371e+00 + id 11762 + loc 3.1406819820404053e-01 3.4402158856391907e-01 1053 + blend 0.0000000000000000e+00 + interp 3.6199817814967339e-01:3.4362100108284349e-01:2.1248264857029819e-01:2.7539382815849639e-01:9.9457182110906861e-01:3.4761037344682977e-01:1.5935299439138322e+00:3.3608668195318259e-01:2.2097188185968943e+00:3.6199455816789189e-01:2.8681231990320812e+00:3.3926856782380033e-01:3.1755238484453545e+00 + CVs 20 + 3.2738292010231979e-01 4.2017018029545750e-01 1.5416589438596445e-01 + 5.9960282270425602e-01 7.8905571631000970e-01 3.3553011976191899e-01 + 8.7120568501887008e-01 1.1314469203616651e+00 5.4008724271262043e-01 + 1.1590842263759549e+00 1.4425203556832267e+00 7.7306931373036614e-01 + 1.4519542767993787e+00 1.6977445002834568e+00 1.0450705100939448e+00 + 1.7314857964851598e+00 1.8707374777053154e+00 1.3560476635658918e+00 + 1.9753036385262166e+00 1.9408542228918930e+00 1.6914048509784405e+00 + 2.1609371207430268e+00 1.9031379117151468e+00 2.0222026197871887e+00 + 2.2719032713457685e+00 1.7738117216017093e+00 2.3054189826119802e+00 + 2.3100745441939834e+00 1.5976731279363665e+00 2.4861702112767565e+00 + 2.3039342693024545e+00 1.4414856256771462e+00 2.5389621580385326e+00 + 2.2823194368653397e+00 1.3341345586685385e+00 2.5063572600312369e+00 + 2.2464672737215743e+00 1.2397195261004175e+00 2.4285159597089150e+00 + 2.1792213082984593e+00 1.1000065741877068e+00 2.2918822452720118e+00 + 2.0650489898291826e+00 9.1556215740039093e-01 2.0866437364603030e+00 + 1.9195415773462368e+00 7.4251968926397516e-01 1.8609163588125890e+00 + 1.7815150342390054e+00 6.0711651182779502e-01 1.6580994462140330e+00 + 1.6138281266314101e+00 5.3777213313539318e-01 1.4755982745079419e+00 + 1.3929026833396214e+00 6.6456593173113887e-01 1.3357830323533633e+00 + id 11763 + loc 9.9799007177352905e-01 4.7903653979301453e-01 410 + blend 0.0000000000000000e+00 + interp 4.0160440488621035e-01:4.0160038884216148e-01:3.7961606109404711e-01:2.6623969729966634e-01:1.1552305587196721e+00:3.2448449367045834e-01:2.0279392765637150e+00:3.2883385783229019e-01:3.0393987255975232e+00:3.4973680743158603e-01:3.6860565831240946e+00 + CVs 20 + -4.3155612724258330e-01 1.7139532731263030e-01 2.1855067440508760e-01 + -8.1751811376285011e-01 3.1745059536247439e-01 4.1315620191969915e-01 + -1.2178265965760060e+00 4.7361807571160214e-01 5.8843868229793084e-01 + -1.6467528306213537e+00 6.3782364040706940e-01 7.5379888117544014e-01 + -2.0919054239137016e+00 7.8372194193026790e-01 9.3286867036648269e-01 + -2.5432797820040602e+00 8.8733887886383123e-01 1.1493042561087854e+00 + -2.9892426804934837e+00 9.2900430168012260e-01 1.4113082939653594e+00 + -3.4189698898877925e+00 8.9548689600601694e-01 1.7007765313034797e+00 + -3.8279028064744240e+00 7.8466831349659860e-01 1.9817257378210409e+00 + -4.2097375646549740e+00 6.0468113586171990e-01 2.2205590377174542e+00 + -4.5567461923738897e+00 3.5768391343165984e-01 2.4046678045859609e+00 + -4.8695665423593688e+00 1.4550741227886466e-02 2.5466784462464678e+00 + -5.1406379354426637e+00 -4.4643335887650837e-01 2.6747393171334717e+00 + -5.3511849984388737e+00 -9.9879276514464754e-01 2.8368808161978629e+00 + -5.4855701715828449e+00 -1.5869211761874444e+00 3.0790534475980977e+00 + -5.5354580282381693e+00 -2.1453802533547179e+00 3.4166767641915650e+00 + -5.5162484310250077e+00 -2.6493653229027068e+00 3.8388910904788802e+00 + -5.4904989007583476e+00 -3.1351806108873741e+00 4.3329233859560334e+00 + -5.5381802822569171e+00 -3.6397906046727853e+00 4.8758813577339044e+00 + id 11764 + loc 6.7147839069366455e-01 7.5013923645019531e-01 1074 + blend 0.0000000000000000e+00 + interp 3.6388986579576788e-01:2.5799357830899960e-01:2.9983572946644932e-01:3.2459478625618354e-01:1.2351003475148874e+00:3.6388622689710992e-01:1.9933599579547812e+00:3.2609173321021723e-01:2.6412282226655446e+00:3.4341827949585729e-01:3.3790474485732580e+00 + CVs 20 + 9.9592476645641276e-02 2.8009039855642742e-01 -1.7795124627626074e-01 + 1.8666140995183000e-01 5.5915473833801232e-01 -3.5589042736959431e-01 + 2.8852776760122822e-01 8.3472191836328069e-01 -5.3125433188409643e-01 + 4.2227979691030870e-01 1.1027132458515991e+00 -7.0300574054313547e-01 + 5.9439764589318822e-01 1.3570170208600598e+00 -8.7214122398305671e-01 + 8.0615799074353911e-01 1.5883005486319117e+00 -1.0416239732026784e+00 + 1.0541602287257295e+00 1.7854854234485900e+00 -1.2174336703162236e+00 + 1.3303509519539147e+00 1.9369311886302212e+00 -1.4063683234257853e+00 + 1.6205155622522025e+00 2.0324606169167385e+00 -1.6187962154038875e+00 + 1.9052115421000564e+00 2.0649642794277701e+00 -1.8659343247135973e+00 + 2.1626575482230121e+00 2.0283242893902100e+00 -2.1492355607061602e+00 + 2.3713506517773797e+00 1.9162756494266497e+00 -2.4574627436062233e+00 + 2.5164565245309878e+00 1.7277067260184125e+00 -2.7687582576125709e+00 + 2.5930467720435519e+00 1.4709340918189109e+00 -3.0523681965978935e+00 + 2.6055850856643410e+00 1.1638206402039226e+00 -3.2729432564299494e+00 + 2.5654930466940593e+00 8.3208292288916252e-01 -3.4013783146648207e+00 + 2.4832080343945204e+00 5.0275810930427667e-01 -3.4272497932449539e+00 + 2.3658044202032671e+00 1.9071496049634476e-01 -3.3623038344256737e+00 + 2.1931716322356127e+00 -1.4453538454625256e-01 -3.2400094367027932e+00 + id 11765 + loc 5.4369497299194336e-01 3.7546929717063904e-01 1077 + blend 0.0000000000000000e+00 + interp 2.9124679706063705e-01:2.8797530080046957e-01:8.5471450347362687e-01:2.7811272360553224e-01:1.6953337279338461e+00:2.9124388459266648e-01:2.3451057725145770e+00:2.6690595046343280e-01:3.4454999920948604e+00 + CVs 20 + -4.4684432882920871e-02 4.0174826490189830e-01 1.9386499741505489e-01 + -6.8113395672744714e-02 8.1589978850965283e-01 3.8277781084228291e-01 + -1.0670760676806929e-01 1.2232271998547612e+00 6.1144914086392832e-01 + -1.8182115832438350e-01 1.6004121428348208e+00 9.0236165316409622e-01 + -3.1045096111982895e-01 1.9250373199593962e+00 1.2624204078932064e+00 + -5.0775191868356073e-01 2.1707463690122486e+00 1.6796654270316349e+00 + -7.7981889607795152e-01 2.3138944628245683e+00 2.1243143578850074e+00 + -1.1193902756569205e+00 2.3423738711692481e+00 2.5580865146254212e+00 + -1.5064461875636705e+00 2.2591142444326553e+00 2.9464681106143651e+00 + -1.9123813439122614e+00 2.0799482789210959e+00 3.2706215819857727e+00 + -2.3114191063580884e+00 1.8230603800430394e+00 3.5336938349447009e+00 + -2.6846613759348918e+00 1.4972132027643399e+00 3.7534203822677301e+00 + -3.0115863245581185e+00 1.1019181264121207e+00 3.9513934646364111e+00 + -3.2607623162613191e+00 6.3796448560138885e-01 4.1520331622606150e+00 + -3.3776651103477273e+00 1.1660865021828881e-01 4.3916506152923347e+00 + -3.2991177376861724e+00 -3.9637756452911188e-01 4.7050118935114043e+00 + -3.0486188348529071e+00 -7.6915135344018104e-01 5.1037002382578418e+00 + -2.7383248581140034e+00 -9.4978443694456560e-01 5.5612358786589944e+00 + -2.5599151170576135e+00 -1.2187755614990419e+00 5.9033070355598705e+00 + id 11766 + loc 6.5967768430709839e-01 7.3081672191619873e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3833662356432529e-01:3.6484684864903982e-01:3.7967346361050702e-02:4.3833224019808964e-01:5.3370704766072863e-01:4.1772294296314205e-01:9.8026766893023343e-01:3.5310403348133990e-01:1.8962491765223093e+00:3.8318982589425954e-01:2.7867508142850155e+00:2.8683012892513415e-01:3.1921116566049190e+00 + CVs 20 + 1.1390675844703166e-01 2.3498633170684047e-01 -2.5187614146512288e-01 + 2.1464917319294335e-01 4.6022938592751073e-01 -4.8168602231114144e-01 + 3.0688122879299506e-01 6.7786348487115777e-01 -7.0463060088938190e-01 + 3.9378508713401889e-01 8.8864979711994596e-01 -9.2787669348460278e-01 + 4.7759071528272107e-01 1.0924677570128372e+00 -1.1520688124169203e+00 + 5.5755182137408310e-01 1.2913262893821451e+00 -1.3772469632274693e+00 + 6.2850762637763347e-01 1.4943432542213639e+00 -1.6078337671538945e+00 + 6.8613274756532650e-01 1.7120997051011113e+00 -1.8531468644768783e+00 + 7.3540704499567655e-01 1.9463982377199960e+00 -2.1242386380217622e+00 + 7.8841852933522227e-01 2.1881470519012458e+00 -2.4347439756007967e+00 + 8.5704588524840397e-01 2.4137426292439086e+00 -2.7987584426335705e+00 + 9.5102804646430417e-01 2.5871501494302471e+00 -3.2220633399259908e+00 + 1.0712165617722245e+00 2.6725630597642014e+00 -3.6948328562557946e+00 + 1.2099344680401547e+00 2.6454214702496901e+00 -4.1896571523354424e+00 + 1.3677440298782066e+00 2.5026391058314124e+00 -4.6762148626940956e+00 + 1.5535459056407790e+00 2.2513111161869492e+00 -5.1373647279561867e+00 + 1.7438928158402227e+00 1.8921598007522524e+00 -5.5673599514624241e+00 + 1.8552972833611023e+00 1.4501992417003771e+00 -5.9461860198454035e+00 + 1.8130084132311062e+00 1.0919317232133996e+00 -6.1755082736353630e+00 + id 11767 + loc 7.5775331258773804e-01 3.4948080778121948e-02 1090 + blend 0.0000000000000000e+00 + interp 4.5359968047763621e-01:4.5359514448083144e-01:3.9091906362793494e-01:4.4177510191501962e-01:9.9373280546425624e-01:2.9068820396563072e-01:1.4855592886829290e+00:3.4586859635541362e-01:1.9986877989035059e+00:2.2747602725899238e-01:2.8517318135906526e+00:2.9799799167121521e-01:3.9999504872980993e+00 + CVs 20 + -4.5066879493914552e-02 4.0540455679273479e-01 -9.2668023728035287e-02 + -5.0283763340053994e-02 7.8061034986011424e-01 -1.2753076219616638e-01 + -2.8010749876711039e-02 1.1463582983272995e+00 -1.2981578231540236e-01 + 1.8534622953051638e-02 1.5072954717268252e+00 -1.0825540145596602e-01 + 9.6993456250670795e-02 1.8498235159639136e+00 -5.3725415885306771e-02 + 2.0940741363100135e-01 2.1564554159681588e+00 4.2524481873690956e-02 + 3.5085957000989121e-01 2.4052873139713675e+00 1.8702396695900203e-01 + 5.0773265603716777e-01 2.5767905697557589e+00 3.8035205265730498e-01 + 6.6942295772910265e-01 2.6610274181479157e+00 6.2070009885670174e-01 + 8.4036070311190358e-01 2.6477464435093125e+00 9.0953383394954967e-01 + 1.0282934236949397e+00 2.5197844288007145e+00 1.2344506696416346e+00 + 1.2349907129406144e+00 2.2633154451640425e+00 1.5597957481836604e+00 + 1.4615797368978705e+00 1.8682901602520001e+00 1.8375107243170918e+00 + 1.7145430268605102e+00 1.3265676800914155e+00 2.0036706413939487e+00 + 1.9936491802800891e+00 6.6701168353013640e-01 1.9652819111539912e+00 + 2.2866341653607503e+00 1.5134261532174342e-02 1.6627566702906722e+00 + 2.6195380092354315e+00 -4.8730889174395275e-01 1.1285612987827374e+00 + 2.9980664388267293e+00 -7.3976823063052155e-01 4.7152813598112775e-01 + 3.1533027469942922e+00 -8.9437050692557707e-01 8.7280535915515212e-02 + id 11768 + loc 8.7063121795654297e-01 5.8873331546783447e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3764509248379202e-01:2.3327635846850014e-01:1.6502493986991029e-01:3.1679115635209437e-01:8.5563167353494030e-01:2.9945569599955585e-01:1.2204488531336630e+00:4.3764071603286719e-01:1.8954176078247560e+00:3.2067599794417462e-01:2.2854438465975835e+00:3.0718823809652568e-01:3.0005649642484182e+00:2.3238603194840710e-01:3.6882468649639852e+00 + CVs 20 + 1.3665483247975355e-01 5.9722801017594185e-01 -4.1676014200599898e-01 + 3.1110921165211736e-01 1.1534195016107429e+00 -7.8914331471859378e-01 + 5.5637647677236290e-01 1.6504493262164424e+00 -1.0816664592817096e+00 + 8.7284929024473579e-01 2.0637205843698414e+00 -1.2675460585094522e+00 + 1.2344242263895429e+00 2.3701461478950345e+00 -1.3362698650093414e+00 + 1.5982773956386667e+00 2.5667086085624682e+00 -1.3062343673834331e+00 + 1.9401325225208028e+00 2.6693432659343288e+00 -1.2035057342048825e+00 + 2.2885271301441636e+00 2.6802035730416303e+00 -1.0489610841194876e+00 + 2.6870307229369974e+00 2.5579548967528400e+00 -8.7105999063392769e-01 + 3.1239998240944433e+00 2.2721855868397589e+00 -6.8990749730705780e-01 + 3.5378480469203186e+00 1.8398445728224118e+00 -4.9094790374776409e-01 + 3.8570377663475379e+00 1.3199222251795888e+00 -2.4793446548377090e-01 + 4.0441242702469555e+00 8.1827962313885205e-01 4.0503906464409017e-02 + 4.1057881806540193e+00 4.1669744302563194e-01 3.6784309487245626e-01 + 4.0603047758827557e+00 1.4002639252285232e-01 7.6040930838972876e-01 + 3.9270376599543124e+00 1.4399943737650078e-02 1.2394350701400298e+00 + 3.7160076256453651e+00 4.3427013863094555e-02 1.7726174692284107e+00 + 3.3969215795408978e+00 3.4338098952012031e-01 2.2665494384308489e+00 + 3.2519577132392516e+00 8.7765834043427249e-01 2.3064053860191072e+00 + id 11769 + loc 5.1281982660293579e-01 7.8885829448699951e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9698154362903387e-01:2.8404300295281365e-01:1.5894203095454307e-02:3.6835554973174839e-01:5.3777123621909229e-01:2.9414845297477266e-01:1.0296002935945527e+00:3.2784328924268463e-01:1.7650294751101820e+00:3.9697757381359761e-01:2.0547323197332261e+00:2.0443607663691341e-01:2.9876092425849263e+00:2.8697127547716100e-01:3.5599306309746135e+00 + CVs 20 + 4.1738233877777808e-01 4.1811802774570395e-01 -1.3085458627984292e-01 + 7.7337886333057160e-01 8.4584024974022765e-01 -1.9940427342797068e-01 + 1.0674964922683172e+00 1.2905729184957802e+00 -2.0047464621172362e-01 + 1.3457919434939509e+00 1.7091116272959410e+00 -1.4781291712394895e-01 + 1.6671108241036561e+00 2.0386246276154201e+00 -6.9507123221973055e-02 + 2.0526768628393519e+00 2.2370059379816420e+00 3.3023577481749999e-03 + 2.4853836352482226e+00 2.2829412342298356e+00 5.1150478477585803e-02 + 2.9417274332815442e+00 2.1632855875615382e+00 7.7425884399472178e-02 + 3.3877785611212321e+00 1.8726206441340534e+00 1.0949101421581231e-01 + 3.7807498204187509e+00 1.4461028095984811e+00 1.9655751363205010e-01 + 4.0990696796946304e+00 9.8472722620593456e-01 3.8630092170003838e-01 + 4.3471496972451638e+00 6.4632445061665245e-01 6.4165268042152646e-01 + 4.5223795267135642e+00 5.1694001498118980e-01 8.2268756357818662e-01 + 4.6218434350781319e+00 4.9843034423288812e-01 9.0841731557413619e-01 + 4.8032658022359085e+00 4.6340947295059731e-01 1.0122006753351738e+00 + 5.1603212090137340e+00 3.9604076879927308e-01 1.1320200315158204e+00 + 5.6029848797906512e+00 2.6575915707368281e-01 1.2668672520309712e+00 + 5.9286609085909845e+00 7.7547580839828711e-02 1.4500343973398149e+00 + 6.1530683617385682e+00 -1.7975784199738620e-01 1.7082741380058122e+00 + id 11770 + loc 7.4111986160278320e-01 3.6742806434631348e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9478965611118059e-01:3.7399300678665193e-01:4.6767357056443082e-05:4.9478470821461951e-01:4.5476552738562259e-01:3.5014303221551862e-01:1.0003605912814870e+00:4.2042022738577639e-01:1.4150998066366389e+00:2.9766328220517324e-01:2.1089437662763717e+00:3.6472188512797304e-01:2.9235236144632761e+00:4.1132185819911599e-01:3.3432083836357203e+00 + CVs 20 + -5.9961447934282763e-03 3.8477238804474101e-01 2.2874904881954156e-01 + -5.4676972507313792e-02 7.5696292514761465e-01 4.5198514039375054e-01 + -1.4077087149800901e-01 1.1130138217432288e+00 6.6775853570592214e-01 + -2.6553605342653980e-01 1.4468909457600783e+00 8.7605367130279133e-01 + -4.2765732494844394e-01 1.7507489499304629e+00 1.0800262883343521e+00 + -6.2129526912785493e-01 2.0187073996543328e+00 1.2894762011964014e+00 + -8.3730633071790905e-01 2.2468275904906330e+00 1.5201312285178379e+00 + -1.0629708558086675e+00 2.4307017146971694e+00 1.7900606673536159e+00 + -1.2829466926893476e+00 2.5633536208443153e+00 2.1110277334318219e+00 + -1.4823626459252579e+00 2.6362255254514797e+00 2.4849754570812905e+00 + -1.6477007492967644e+00 2.6402287660436343e+00 2.9055405059964143e+00 + -1.7675334362203265e+00 2.5663016697058674e+00 3.3599125582452554e+00 + -1.8329586797594608e+00 2.4019388679447018e+00 3.8337161839220748e+00 + -1.8329650650324867e+00 2.1297298879983950e+00 4.3067140567021296e+00 + -1.7510748385949739e+00 1.7386371540537116e+00 4.7420960547720190e+00 + -1.5736782210816589e+00 1.2413380379170464e+00 5.0861186283750808e+00 + -1.3046238912954575e+00 6.9227600855608473e-01 5.2882254108570752e+00 + -9.9028700695525684e-01 1.8293658315683392e-01 5.3416961723169001e+00 + -7.4386108202279821e-01 -1.7196740018106288e-01 5.3215272034644778e+00 + id 11771 + loc 6.7147839069366455e-01 7.0146501064300537e-01 410 + blend 0.0000000000000000e+00 + interp 4.7650882868466060e-01:3.7883401488195639e-01:1.7099650814985656e-03:3.0764334640711882e-01:9.1709963867477429e-01:2.7865741476441469e-01:1.2950018512311234e+00:3.0472181656721092e-01:1.9720592122145719e+00:4.7650406359637376e-01:2.6819958967926225e+00:4.3190988915591882e-01:3.0005903700841867e+00:3.0102203730016946e-01:3.4108755260275716e+00 + CVs 20 + 6.7643911627588982e-01 1.9205314434858001e-01 -2.6474329549200715e-01 + 1.2706404636805386e+00 3.2961976318928987e-01 -5.2279648923334276e-01 + 1.8635592213428784e+00 4.5889003370342440e-01 -7.5318388563823868e-01 + 2.4455046608538549e+00 5.5571116080903205e-01 -9.7219813329448623e-01 + 2.9694943518314258e+00 5.6819530441116251e-01 -1.2029872020228507e+00 + 3.3942249364975199e+00 4.6075937187538929e-01 -1.4568129350526844e+00 + 3.7045381560966675e+00 2.3986357089219834e-01 -1.7216158462468982e+00 + 3.9347803603182756e+00 -6.2397409584596719e-02 -1.9673617336654734e+00 + 4.1200445221205975e+00 -4.2952778876552000e-01 -2.1547762804735444e+00 + 4.2574152414695297e+00 -8.4413335965183611e-01 -2.2381052039876463e+00 + 4.3554343683782930e+00 -1.2693624373059014e+00 -2.2436085256539249e+00 + 4.4690933365902712e+00 -1.7148665247410875e+00 -2.2951143617567240e+00 + 4.6233829481217885e+00 -2.2128613570422955e+00 -2.4780940042328163e+00 + 4.8024896112096407e+00 -2.7396014092697270e+00 -2.8044072078524316e+00 + 4.9893895394651473e+00 -3.2488813832105414e+00 -3.2448664812820573e+00 + 5.1750913150964530e+00 -3.7239118214097560e+00 -3.7292752656316996e+00 + 5.3587381179957347e+00 -4.1854210352301484e+00 -4.2052029749181736e+00 + 5.5368462765343640e+00 -4.6485427799257213e+00 -4.6754226760637883e+00 + 5.6613405307184994e+00 -5.0973216401357391e+00 -5.1496394586583598e+00 + id 11772 + loc 2.7319943904876709e-01 2.5174328684806824e-01 1077 + blend 0.0000000000000000e+00 + interp 3.9468161765082449e-01:2.5630139945730285e-01:4.2735979036816807e-02:2.7581196285844023e-01:1.0313114927760472e+00:3.2749159388305887e-01:1.9044376390931748e+00:3.9467767083464800e-01:2.2230691255785504e+00:2.6786708557718719e-01:2.9437932907061897e+00:2.9724575479616977e-01:3.4310319806675107e+00 + CVs 20 + -1.1331707523233159e-01 3.1597983858789047e-01 -4.8757971477920783e-02 + -2.3664960346423203e-01 6.1555662997646143e-01 -9.1270943149455969e-02 + -3.7177286559292255e-01 8.9376286735160282e-01 -1.3907442054412111e-01 + -5.1842289175606071e-01 1.1472443417024567e+00 -1.9855251211152097e-01 + -6.7480246004793032e-01 1.3741456549074345e+00 -2.7122774289134927e-01 + -8.3742416120113705e-01 1.5744883062863604e+00 -3.5700270451102478e-01 + -1.0032874983518183e+00 1.7503592755935573e+00 -4.5560745902181349e-01 + -1.1705422475659941e+00 1.9044944546824505e+00 -5.6751692789852204e-01 + -1.3360461961541785e+00 2.0400246600093430e+00 -6.9563914314622322e-01 + -1.4918850320826467e+00 2.1583054472924386e+00 -8.4881952403218008e-01 + -1.6281280174440287e+00 2.2598443353405422e+00 -1.0384890538831599e+00 + -1.7441142811263357e+00 2.3480049237369198e+00 -1.2757132310177310e+00 + -1.8479338094503868e+00 2.4205698402348306e+00 -1.5805201139864788e+00 + -1.9447233511564324e+00 2.4487844136814516e+00 -1.9870084391833425e+00 + -2.0396120433024683e+00 2.3594570991242145e+00 -2.5310257741316584e+00 + -2.1391343246840782e+00 2.0406817591211839e+00 -3.1582942770449245e+00 + -2.1995832790596439e+00 1.4312752751221998e+00 -3.6704095215597081e+00 + -2.2243393501372113e+00 5.9724618458730938e-01 -3.9034092847202189e+00 + -2.3380562441349859e+00 4.9681902923326859e-01 -3.8163376755538896e+00 + id 11773 + loc 2.8684651851654053e-01 8.8130861520767212e-01 1068 + blend 0.0000000000000000e+00 + interp 3.5303074407712082e-01:3.2503766970169468e-01:9.9008547642351119e-02:3.5302721376968005e-01:1.0282416221717805e+00:3.3334743784915460e-01:2.1502611758944781e+00:3.4486259279943204e-01:2.9814819712273861e+00:3.4232813265951412e-01:3.5635141992319825e+00 + CVs 20 + -2.0349451832931752e-02 3.4590523940499829e-01 -1.9586301782539159e-01 + -3.4737461261104510e-02 6.8307310299066692e-01 -3.9908766099487741e-01 + -5.5070206369944127e-02 1.0163193638767059e+00 -6.2279342953155625e-01 + -8.7713486493604442e-02 1.3473354762865046e+00 -8.7930747945727772e-01 + -1.3325885592060874e-01 1.6657830631536652e+00 -1.1775079201612528e+00 + -1.9324265151407360e-01 1.9534343910062484e+00 -1.5226099608336723e+00 + -2.6769330848123896e-01 2.1904448534088816e+00 -1.9132339254478157e+00 + -3.5322397239548847e-01 2.3582884333174308e+00 -2.3426448631893644e+00 + -4.4086161939965712e-01 2.4404588314063060e+00 -2.8148918884551613e+00 + -5.0917075778473131e-01 2.4309017074645589e+00 -3.3496309556721959e+00 + -5.2147854795526061e-01 2.3424833503204097e+00 -3.9275815631842406e+00 + -4.5950613337964252e-01 2.1988117505535136e+00 -4.4660714842438720e+00 + -3.4070359681432139e-01 2.0140548215625902e+00 -4.9119001920242056e+00 + -1.7412990760258212e-01 1.7786215963845649e+00 -5.2947263400444369e+00 + 4.0949067371675710e-02 1.4856466162560260e+00 -5.6337733810159731e+00 + 2.6079201684068776e-01 1.1783132360228663e+00 -5.9114278816700230e+00 + 4.1434415569296368e-01 9.0028373594349032e-01 -6.1622082855125635e+00 + 4.9128568612207502e-01 6.1859061392184911e-01 -6.4665180182090136e+00 + 6.0094005813578566e-01 1.9932835309462082e-01 -6.9223745506619174e+00 + id 11774 + loc 5.8043092489242554e-01 7.7647037804126740e-02 1084 + blend 0.0000000000000000e+00 + interp 5.3900728273881049e-01:3.3734573265736079e-01:6.0822601543981336e-02:3.4170292313954548e-01:7.7355175871347648e-01:4.1014860061955716e-01:1.1025849774124850e+00:4.3343367457696474e-01:1.5472403877113901e+00:5.3900189266598308e-01:2.0090980476294336e+00:2.8805829385260939e-01:2.7486970268530801e+00:2.8865926808867975e-01:3.6292363552607694e+00 + CVs 20 + 2.5131390454593350e-01 3.0013473609528052e-01 -2.0800648400151561e-01 + 4.6609019547301656e-01 5.5716067148795512e-01 -3.8944236508685881e-01 + 6.3722361428580099e-01 7.9628462247590637e-01 -5.7622122417814037e-01 + 7.8192933622913274e-01 1.0234774069455916e+00 -7.5115067232127641e-01 + 9.2151165097172627e-01 1.2253377173156892e+00 -8.7385128247325661e-01 + 1.0654745114179616e+00 1.3940819640351578e+00 -9.3014276079616565e-01 + 1.2170748746291027e+00 1.5297118892786747e+00 -9.2802494225293708e-01 + 1.3825377567104264e+00 1.6301225295127653e+00 -8.7310959956146761e-01 + 1.5488500318701783e+00 1.6853488485867638e+00 -7.5459443453645914e-01 + 1.6584131048717861e+00 1.6890989496530164e+00 -5.7343261245481525e-01 + 1.6734804703750181e+00 1.6586485832772861e+00 -3.6505772217626520e-01 + 1.6125661758645269e+00 1.6189030486930673e+00 -1.5535017950093288e-01 + 1.4897111729131491e+00 1.5738292483731127e+00 4.1263937823443286e-02 + 1.2831770981835617e+00 1.4945173878467291e+00 1.7685141053762621e-01 + 9.8508630779568052e-01 1.3493148015062881e+00 2.1131711700724398e-01 + 6.2796370475550112e-01 1.1135933861378420e+00 2.0404874722597099e-01 + 2.6102871872388922e-01 7.7545506519019880e-01 2.6674477411401043e-01 + -7.1447885628107138e-02 4.0743645890397862e-01 5.3744992420373172e-01 + -1.2385896125515083e-01 4.2882222008801174e-01 7.7009986782625783e-01 + id 11775 + loc 5.5325114727020264e-01 7.7647037804126740e-02 1085 + blend 0.0000000000000000e+00 + interp 5.4941399370155330e-01:3.1555806139710124e-01:7.8298149685646823e-01:5.0305954137529041e-01:1.3441998905536743e+00:3.7619909529175627e-01:1.8851679992496315e+00:4.9737526381326863e-01:2.4522192052063758e+00:4.9718632240001487e-01:2.9987271197443626e+00:5.4940849956161630e-01:3.3704521571768362e+00:4.9213633054452577e-01:3.9283038809388371e+00 + CVs 20 + 4.1089922717610766e-01 3.4298612514586779e-01 -3.0983264645653608e-01 + 7.9834239588100486e-01 6.5841562473156312e-01 -5.2933958179410801e-01 + 1.2041891273544947e+00 9.3841008753854960e-01 -6.8126291845802900e-01 + 1.6432973767518588e+00 1.1676517866365430e+00 -7.4899200757598550e-01 + 2.0968145644839020e+00 1.3213609339505499e+00 -7.1030589744626083e-01 + 2.5305464877242372e+00 1.3850972649096345e+00 -5.6603629998990723e-01 + 2.9086357452124676e+00 1.3590002419492215e+00 -3.3777026239520791e-01 + 3.2052822408708841e+00 1.2548236881646830e+00 -6.0660356614700039e-02 + 3.4144676763218254e+00 1.0898243147789008e+00 2.2260810075335863e-01 + 3.5554520060963544e+00 8.8059154405295181e-01 4.7347545712879635e-01 + 3.6547311890042877e+00 6.3834054995477052e-01 6.6648148873744606e-01 + 3.7278412399612257e+00 3.7187110909799881e-01 7.8744004022722225e-01 + 3.7819292018580537e+00 9.1941809618607040e-02 8.3424941984371226e-01 + 3.8303877236729318e+00 -1.9741806496685915e-01 8.1001105654686179e-01 + 3.8846684183395173e+00 -4.9311457886015309e-01 7.1133839656799802e-01 + 3.9722466290845482e+00 -8.0881201474479880e-01 5.4004486668595375e-01 + 4.1409639970714158e+00 -1.1608212068520682e+00 2.7686840232612464e-01 + 4.3765036350594588e+00 -1.4896002499068484e+00 -7.2006438369823011e-02 + 4.5179311403526743e+00 -1.7284656482947280e+00 -3.6995990592314354e-01 + id 11776 + loc 7.4394953250885010e-01 2.6698666810989380e-01 1054 + blend 0.0000000000000000e+00 + interp 4.6108718561998008e-01:2.9229409749555524e-01:4.6621160270690087e-01:3.0728686243113895e-01:1.5948023015563204e+00:4.6108257474812392e-01:2.1239196074756661e+00:4.3538633623744544e-01:2.7662579485083767e+00:4.2766856384168656e-01:3.0245788559993261e+00:2.9063099911861995e-01:3.8030122454355659e+00 + CVs 20 + -1.7375816816247361e-01 3.2421244668794602e-01 3.1129773538831473e-01 + -3.4434725867100735e-01 6.8113539055638528e-01 5.7048515929336019e-01 + -4.6622954424428731e-01 1.0787848561283129e+00 7.4451910124228249e-01 + -5.2869194140298503e-01 1.4711124206718214e+00 8.3076997709988132e-01 + -5.9353838886949872e-01 1.8423185593176608e+00 8.7273132716380908e-01 + -7.5610831368117204e-01 2.1926508816654509e+00 9.3406165911268524e-01 + -1.0712645549643454e+00 2.4654027212320813e+00 1.0671980830085712e+00 + -1.5292394350089320e+00 2.5665123148189650e+00 1.2835504799992221e+00 + -2.0710910623273553e+00 2.4397825691089841e+00 1.5240478240950428e+00 + -2.6299060724283678e+00 2.1299600022340992e+00 1.6872296540864833e+00 + -3.1678592190634522e+00 1.8084015830686662e+00 1.7077219669826762e+00 + -3.6307128054067617e+00 1.6847840304875166e+00 1.6597284774202370e+00 + -3.8726378177868179e+00 1.8375737656802784e+00 1.7306648599099885e+00 + -3.8223520803561870e+00 2.1071661612061208e+00 1.8984104538078861e+00 + -3.8394721749242300e+00 2.3422369222199722e+00 2.0789588786722684e+00 + -4.1569717186881503e+00 2.5535917625913593e+00 2.4104606914988640e+00 + -4.9092063519575717e+00 2.5951087417099457e+00 2.9088631241117278e+00 + -6.0113749154772798e+00 2.2542998720893275e+00 3.1972927197518475e+00 + -6.5126835418812146e+00 2.2344585902792287e+00 3.2893503651336884e+00 + id 11777 + loc 2.3219443857669830e-02 3.1316671520471573e-02 1076 + blend 0.0000000000000000e+00 + interp 4.4867876478411622e-01:3.7645025395487453e-01:6.0238190783182333e-01:4.3155998270849316e-01:1.0001602241198699e+00:4.4867427799646842e-01:1.6987688909448480e+00:3.3763693711788861e-01:2.0339315778101903e+00:2.4793876579621368e-01:2.9392621258177378e+00:4.0095667544512309e-01:3.1418679810499892e+00:3.5536892172628176e-01:3.9225200035360546e+00 + CVs 20 + -1.0986261789202414e-01 3.4191519353251465e-01 -2.5912916463339619e-01 + -2.0104669149660956e-01 7.0455677140430617e-01 -5.1991027454228245e-01 + -3.2037417319865963e-01 1.0593695111576804e+00 -7.9652292439772365e-01 + -4.8353107198747391e-01 1.3867487512593752e+00 -1.0893225778176223e+00 + -6.9133551907615987e-01 1.6732709300493269e+00 -1.3958310319325693e+00 + -9.4001444268189571e-01 1.9039976802865883e+00 -1.7143749094909082e+00 + -1.2220738323772746e+00 2.0691851331501998e+00 -2.0416154756841753e+00 + -1.5285952294569527e+00 2.1678318392143918e+00 -2.3717414544222710e+00 + -1.8528452503039521e+00 2.1998249642022731e+00 -2.6963190484648516e+00 + -2.1887500846952155e+00 2.1644516882714915e+00 -3.0059955796331668e+00 + -2.5302332263595035e+00 2.0615491174711353e+00 -3.2913149409423852e+00 + -2.8676086010764208e+00 1.8926043068369574e+00 -3.5436661398503224e+00 + -3.1846884160948132e+00 1.6648238067523733e+00 -3.7563314690274976e+00 + -3.4609447034947443e+00 1.3942031899752045e+00 -3.9266937665456623e+00 + -3.6778379581143708e+00 1.0994272520466777e+00 -4.0581551612122277e+00 + -3.8182183624838841e+00 7.8988036579139664e-01 -4.1572319973127660e+00 + -3.8436471718103054e+00 4.8336080930871073e-01 -4.2265013017138351e+00 + -3.7290589401290251e+00 2.5332664470680988e-01 -4.2642300847200501e+00 + -3.5878412335906349e+00 2.9146590849133514e-02 -4.2897153555985863e+00 + id 11778 + loc 7.2196501493453979e-01 2.2977578639984131e-01 1090 + blend 0.0000000000000000e+00 + interp 5.2206904288274691e-01:4.2825228003840077e-01:3.5443503976691826e-02:2.7812825976690891e-01:8.6804922711555155e-01:3.2476541253429914e-01:1.8040592772982338e+00:3.8269052900628370e-01:2.4332006022064276e+00:5.2206382219231806e-01:2.9970666957855583e+00:4.7519387034410332e-01:3.2913632250603913e+00:5.0863688465179679e-01:3.7993047522860679e+00 + CVs 20 + -1.9560261353956832e-02 4.6120147341801981e-01 -2.2813626224043787e-01 + 2.5458851671291804e-02 8.5616215640979543e-01 -3.8900386666447884e-01 + 9.7640712481438741e-02 1.2193592756569402e+00 -5.1203564820029812e-01 + 1.8651809519083973e-01 1.5647288618214077e+00 -6.0168819809857932e-01 + 2.9953569986227091e-01 1.8857745523477498e+00 -6.4520141602437686e-01 + 4.4278306648428611e-01 2.1723037797296993e+00 -6.3045994188056853e-01 + 6.1809746110314789e-01 2.4075552831279392e+00 -5.4601407764636911e-01 + 8.1487452067709187e-01 2.5690618074404612e+00 -3.8694965868748143e-01 + 1.0077198181924207e+00 2.6406780674569168e+00 -1.6578232777438706e-01 + 1.1750311591323039e+00 2.6284400884324306e+00 9.0189744154553164e-02 + 1.3169658760213423e+00 2.5491274540162321e+00 3.6273539099416785e-01 + 1.4451009655008951e+00 2.4057425277997435e+00 6.4676186597601293e-01 + 1.5710510662840191e+00 2.1859702942572037e+00 9.3420205222103159e-01 + 1.7081290762312804e+00 1.8679102076280001e+00 1.2035209701327949e+00 + 1.8734977493643679e+00 1.4208601820040068e+00 1.4066754626035294e+00 + 2.0746539028803483e+00 8.5923170352052158e-01 1.4660334839507818e+00 + 2.3207856869930041e+00 2.6957927598546338e-01 1.3355162527116642e+00 + 2.6452454062155835e+00 -2.4892608894640533e-01 1.0079320488233274e+00 + 2.8360335547598283e+00 -6.0465057068017103e-01 8.7509823098173001e-01 + id 11779 + loc 6.9369578361511230e-01 6.0122209787368774e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2020627063887352e-01:2.6149599265221735e-01:6.3363109041656429e-03:3.0882753063368668e-01:1.0230329070030819e+00:3.1717516707647719e-01:2.0506691579021945e+00:3.2020306857616715e-01:2.8479630549258523e+00:2.9387787189607451e-01:3.2124450907571127e+00 + CVs 20 + 4.7795824183371804e-02 7.9583752268687469e-01 -4.1479512706287103e-01 + 1.2670650217691981e-01 1.6161711529601375e+00 -7.7498572647504727e-01 + 2.7513849626404135e-01 2.4786067186423160e+00 -1.0542953660676722e+00 + 5.5602671096631107e-01 3.3697853504204218e+00 -1.1752592704381368e+00 + 1.0348584804950789e+00 4.1973447963312172e+00 -1.0053673505415066e+00 + 1.6888396218520381e+00 4.7561949897019318e+00 -4.7671981887616410e-01 + 2.3835276058229495e+00 4.8412381655366952e+00 3.0172269718306488e-01 + 2.9863599680106763e+00 4.4220461850430679e+00 1.1310199332829380e+00 + 3.3998695257360803e+00 3.5658862937536533e+00 1.9230456991612466e+00 + 3.4631030092330679e+00 2.3847064902105313e+00 2.6635973014966208e+00 + 3.0266003277144389e+00 1.1194226739200235e+00 3.2841662661374986e+00 + 2.2377947167815542e+00 2.7390759092270178e-02 3.6328721355493627e+00 + 1.4430332704672395e+00 -8.2498084901823820e-01 3.7302696982040713e+00 + 8.7712641600563379e-01 -1.4709005046852304e+00 3.8439535211231437e+00 + 7.3077144265730931e-01 -1.8833285912342026e+00 4.1745792494191258e+00 + 9.2124321100586037e-01 -1.8690493399931705e+00 4.5509219801999290e+00 + 1.0182580457319450e+00 -1.6388273078557545e+00 4.8515097000172549e+00 + 1.0535962786990942e+00 -1.3630589968863216e+00 5.2222306037703081e+00 + 1.1365903103434023e+00 -8.1542232141593107e-01 5.7515115575557161e+00 + id 11780 + loc 1.8531019985675812e-01 9.7979742288589478e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8707585029203693e-01:3.7646423364199005e-01:2.5337001369950873e-02:4.8707097953353401e-01:5.8497357848502207e-01:4.0832918942986651e-01:1.2242951605259735e+00:8.8418615951885479e-02:1.9999999448800443e+00:2.9561300830335374e-01:2.9400432162750372e+00:4.1730987147927784e-01:3.2605248933603468e+00 + CVs 20 + 5.6618674160856933e-02 3.6763044756944940e-01 -2.1990840778216442e-01 + 1.3258554525299221e-01 7.6730214995630475e-01 -4.2699895905670515e-01 + 1.9142142365744869e-01 1.2049400050807373e+00 -6.2118375605555931e-01 + 2.0341255051430873e-01 1.6751617727537511e+00 -7.8511737234061962e-01 + 1.5732870075843153e-01 2.1678679947541353e+00 -9.2091389699109372e-01 + 7.0975127782124225e-02 2.6671956551108349e+00 -1.1049489480868393e+00 + -4.0306080974295000e-04 3.1032089509408234e+00 -1.4489601822083116e+00 + 1.5614177498588067e-02 3.3562604166610481e+00 -1.9533316480147134e+00 + 1.6398832212737058e-01 3.3699804753551375e+00 -2.4892482284822264e+00 + 4.4369831187287856e-01 3.1986227457497707e+00 -2.9039576967678782e+00 + 8.0411527498156654e-01 2.9688108496077592e+00 -3.1305595058273648e+00 + 1.1855677355753138e+00 2.7505588576226665e+00 -3.2091605938025256e+00 + 1.5521483418693656e+00 2.5287880238325702e+00 -3.2088869755170100e+00 + 1.8908932585573748e+00 2.2426526245420835e+00 -3.1550952032737780e+00 + 2.1612757538255152e+00 1.8374540206765975e+00 -3.0276311842911552e+00 + 2.2871996126020111e+00 1.3439176154866410e+00 -2.7995450929256087e+00 + 2.1849769778641290e+00 8.6509239641777891e-01 -2.4193833099838460e+00 + 1.8024277055074287e+00 5.9716115583408258e-01 -1.9430993754517927e+00 + 1.6325878776179039e+00 3.9822873712007023e-01 -1.7503205465602569e+00 + id 11781 + loc 9.7563242912292480e-01 4.7805947065353394e-01 1053 + blend 0.0000000000000000e+00 + interp 4.5655645141839046e-01:2.6508734907554027e-01:1.6477239297176216e-01:4.1666247061394301e-01:9.2275102003493381e-01:1.7103762931814481e-01:1.8920931887705803e+00:4.5655188585387629e-01:2.8164595075247010e+00:2.9893322265418310e-01:3.0405185843468656e+00:4.1938490919355220e-01:3.6802108515001208e+00 + CVs 20 + 9.3119877947843335e-02 3.2591875443891249e-01 -1.7905139153423005e-01 + 2.1577808395313750e-01 6.4043791039057807e-01 -3.6610179404450416e-01 + 3.5829774434081313e-01 9.4865009332721095e-01 -5.5444016307885469e-01 + 5.2117116941022812e-01 1.2484372382782842e+00 -7.3748918975865430e-01 + 7.0904079617882287e-01 1.5310953107638750e+00 -9.0811713261077243e-01 + 9.1975194262166948e-01 1.7864696011151613e+00 -1.0613247910292967e+00 + 1.1526652841545466e+00 2.0056976938081332e+00 -1.1971942867109044e+00 + 1.4224582506257257e+00 2.1725300971178472e+00 -1.3165926627671005e+00 + 1.7404561912358527e+00 2.2479180840008306e+00 -1.4088803807995094e+00 + 2.0926701956410252e+00 2.1998190556086579e+00 -1.4620735151878135e+00 + 2.4547788154760135e+00 2.0082658941967120e+00 -1.4737203236988472e+00 + 2.7591212613612979e+00 1.6729084555760592e+00 -1.4227407238091585e+00 + 2.9376436743751393e+00 1.2593913908364256e+00 -1.2872737300784762e+00 + 2.9819053837539067e+00 8.5892176577695079e-01 -1.0790847136553783e+00 + 2.9381981699598114e+00 5.2417173982041176e-01 -8.2575868618301440e-01 + 2.8690629109165786e+00 2.6842551466765219e-01 -5.4319479162907447e-01 + 2.8165006877204708e+00 1.0605030798269066e-01 -2.3950323500049048e-01 + 2.8040710209741291e+00 9.1413648603599240e-02 9.1348848637239688e-02 + 2.8628590229990856e+00 3.2847220153313605e-01 4.8729981899586522e-01 + id 11782 + loc 1.6547732055187225e-01 8.7938249111175537e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1836587975275763e-01:3.0253330240372889e-01:1.7232146785842950e-01:2.7507363461807127e-01:1.2405812698168552e+00:2.8552870398057723e-01:2.0212404394901884e+00:2.8369731603844461e-01:2.8483287739901755e+00:4.1836169609396012e-01:3.5392590127188983e+00 + CVs 20 + 1.3973219768003217e-01 2.4592194119380972e-01 -2.2655651272608873e-01 + 2.6964773097037908e-01 4.9970808752067064e-01 -4.1970712083054873e-01 + 3.9059480310775635e-01 7.3194371693266180e-01 -6.1200748689061901e-01 + 5.0380571129103058e-01 9.3300800840664766e-01 -8.1793317850050651e-01 + 6.0864555299073408e-01 1.1031413640856997e+00 -1.0347421311693692e+00 + 7.0525814643099305e-01 1.2430785464227168e+00 -1.2588808102080982e+00 + 7.9716054510849421e-01 1.3532644999659977e+00 -1.4897274653593897e+00 + 8.9068912589672300e-01 1.4318449679930119e+00 -1.7296868586404710e+00 + 9.9023858655853414e-01 1.4751333144175902e+00 -1.9791126226196012e+00 + 1.0961328292895574e+00 1.4799547912540940e+00 -2.2346621350955762e+00 + 1.2059701966460543e+00 1.4442094118838811e+00 -2.4908085204274122e+00 + 1.3148361078922461e+00 1.3679305619154820e+00 -2.7403364583732448e+00 + 1.4150443829205832e+00 1.2539410640488504e+00 -2.9755082168499531e+00 + 1.4958501379282156e+00 1.1069935761655509e+00 -3.1884279910600926e+00 + 1.5457724114784124e+00 9.3599720251833640e-01 -3.3704735934728709e+00 + 1.5607090817106504e+00 7.7519014504927497e-01 -3.5124521382737917e+00 + 1.5465434940280509e+00 7.3010259941916278e-01 -3.6270834879172282e+00 + 1.5284693016190156e+00 9.0085039757066110e-01 -3.8429832950922811e+00 + 1.4635584314036436e+00 7.2002122251321099e-01 -3.6944453768086172e+00 + id 11783 + loc 7.4111986160278320e-01 3.4358680248260498e-01 410 + blend 0.0000000000000000e+00 + interp 4.2537622322294927e-01:3.6603863240366197e-01:4.2627410010633204e-01:2.8966272294788348e-01:1.0131887687768255e+00:4.1759984292855562e-01:1.8907495664730725e+00:4.2537196946071704e-01:2.2969675003204792e+00:2.8288462482486471e-01:2.9687467923297426e+00:3.7069481629687906e-01:3.3844745339896432e+00:3.1046619940156961e-01:3.9906607811500407e+00 + CVs 20 + -4.0443572248368576e-01 3.0861242481516798e-01 1.2841757242881555e-01 + -7.5566016563482830e-01 5.6702073484856086e-01 2.5376173853233885e-01 + -1.1051884738577118e+00 8.0656170109399716e-01 3.7478097186203041e-01 + -1.4670268090770664e+00 1.0258442201667215e+00 5.0481524909942244e-01 + -1.8274186420758782e+00 1.2038270143160124e+00 6.6148805982275893e-01 + -2.1701910940154416e+00 1.3219128198372434e+00 8.5767369100859414e-01 + -2.4793403321590088e+00 1.3710827759611137e+00 1.1000924961147207e+00 + -2.7436246510156947e+00 1.3510406094806269e+00 1.3872475679634597e+00 + -2.9659437248616314e+00 1.2634007840960075e+00 1.7059233365121023e+00 + -3.1578945286954108e+00 1.1048439575485918e+00 2.0316239766569328e+00 + -3.3260699360934582e+00 8.5314827978797370e-01 2.3282705183528214e+00 + -3.4671503901856995e+00 4.8087666361677450e-01 2.5627042547915888e+00 + -3.5888108647200845e+00 5.2306731301170473e-03 2.7540297458245959e+00 + -3.7157663163588626e+00 -5.2079470019369700e-01 2.9712759914136457e+00 + -3.8761805667042335e+00 -1.0336271631496381e+00 3.2796261053700215e+00 + -4.0932461429910267e+00 -1.4693401098440562e+00 3.7056956537796952e+00 + -4.3914983845655806e+00 -1.7984549081175287e+00 4.2180181094596767e+00 + -4.7866135963442051e+00 -2.0289704296262814e+00 4.7410810741142528e+00 + -5.2644902559598323e+00 -2.1754118598283378e+00 5.2063907279954442e+00 + id 11784 + loc 5.2244842052459717e-01 6.0485321283340454e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2703809062273435e-01:4.2703382024182812e-01:3.1789908590567795e-01:3.5969251743085423e-01:1.0285492570087027e+00:2.4985464017226355e-01:1.7429858957689111e+00:3.6547447839151459e-01:2.3268457737510158e+00:2.6765109136558612e-01:3.0003486258314611e+00:3.5220221520115425e-01:3.7333315368106854e+00 + CVs 20 + -9.2474134575452303e-03 3.5296217296681603e-01 -2.3435290079201374e-01 + 1.8108046440448791e-02 7.1542605323022612e-01 -4.5592177383193405e-01 + 8.0085883783674441e-02 1.0829559774884856e+00 -6.8063028301109918e-01 + 1.7974704830907945e-01 1.4491286406050705e+00 -9.1105657763399372e-01 + 3.2635048850408760e-01 1.8117542511638398e+00 -1.1469565382857485e+00 + 5.2256754921530879e-01 2.1634038576387389e+00 -1.4125736497866836e+00 + 7.5641756127293369e-01 2.4792343860229797e+00 -1.7565190651736096e+00 + 9.9775154061977278e-01 2.7031723564364003e+00 -2.2142976689928089e+00 + 1.2011826244238835e+00 2.7449275410704441e+00 -2.7596853987014351e+00 + 1.3405480687118703e+00 2.5532923105913357e+00 -3.3038637507371966e+00 + 1.4264660435084657e+00 2.1587240878210814e+00 -3.7612261165128706e+00 + 1.5011335320435277e+00 1.6341918500300752e+00 -4.0887220566440572e+00 + 1.6227807462520629e+00 1.0567632650620802e+00 -4.3094818052434292e+00 + 1.8300415735632802e+00 4.8232748168616335e-01 -4.5163555477652482e+00 + 2.1279184602563674e+00 -2.5617422896224498e-02 -4.8395635505976262e+00 + 2.4875491335118398e+00 -3.3707174518818028e-01 -5.3606469426663717e+00 + 2.8315021827917164e+00 -2.8548830277499782e-01 -6.0044272320742973e+00 + 3.0733128203965858e+00 4.5643964059548209e-02 -6.5101064702653630e+00 + 3.2228877546275077e+00 3.3208211705497342e-01 -6.8084261360822085e+00 + id 11785 + loc 3.9182651042938232e-01 7.7652698755264282e-01 1053 + blend 0.0000000000000000e+00 + interp 2.6715293022916344e+00:3.3634034013193242e-01:1.5453388437808324e-01:6.5845673208793232e-01:3.0862829503069988e-01:2.6715193022916344e+00:3.7169945563339590e-01:8.9842703223054343e-01:3.8648505103413855e-01:2.0694729822996161e+00:2.4231299156443291e+00:6.1908958738000874e-01:2.7101652751444392e+00:3.2587329545780108e-01:3.0000061121741948e+00:3.4020786333426239e-01:3.6195200890197521e+00 + CVs 20 + 7.4926311491811004e-02 5.7356833313175826e-01 3.5395616861857410e-01 + 5.3967896586729180e-02 1.0688916089277811e+00 6.6048404144528228e-01 + -1.8789759967898667e-02 1.5120428538019413e+00 9.6415959270404106e-01 + -1.4390801028433486e-01 1.9103105887143608e+00 1.2838272457618545e+00 + -3.3382802945070855e-01 2.2454156304899104e+00 1.6106884156457872e+00 + -5.9366645338672419e-01 2.4963148858368704e+00 1.9291658452461897e+00 + -9.1684177800762479e-01 2.6424863372202512e+00 2.2141974810124951e+00 + -1.2816561524001202e+00 2.6716179754284215e+00 2.4336496394355880e+00 + -1.6519043273929337e+00 2.5832050918449680e+00 2.5597721150339545e+00 + -1.9791008555589396e+00 2.3867606029242472e+00 2.5768918222031720e+00 + -2.2069157317493806e+00 2.1139044928763604e+00 2.4877134667220244e+00 + -2.3091319738064771e+00 1.8136535574383812e+00 2.3170321395701494e+00 + -2.2948306964977156e+00 1.5239087501539386e+00 2.0865034680509140e+00 + -2.1906069069397525e+00 1.2833676854203124e+00 1.8119294025756787e+00 + -2.0444249219229476e+00 1.1333705771852116e+00 1.5127219650819701e+00 + -1.9149846101605712e+00 1.1185875051846905e+00 1.2405341578016436e+00 + -1.8467094927273728e+00 1.2521339975956980e+00 1.1048722969265774e+00 + -1.8243563113640602e+00 1.4398301895540493e+00 1.1173102265647747e+00 + -1.7347935941775370e+00 1.6962425257016025e+00 7.4343223008439807e-01 + id 11786 + loc 7.8722560405731201e-01 9.2029982805252075e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8095803407527323e-01:2.8007351130238556e-01:7.5699858283553301e-03:3.8095422449493249e-01:8.1663101051900533e-01:3.6845529746574557e-01:1.5558095735439248e+00:2.7893752854642889e-01:2.6224526444325837e+00:3.5180508811050332e-01:3.1513946220536266e+00 + CVs 20 + -9.8696859607187062e-02 4.3178823326630955e-01 1.3414137284479402e-01 + -2.0875490213839798e-01 8.4668839528698914e-01 2.6724170146955206e-01 + -3.1156967647605149e-01 1.2506403061431695e+00 4.1023022135841802e-01 + -4.2148329746284763e-01 1.6511035428022194e+00 5.5522997983607847e-01 + -5.6501460548787175e-01 2.0497293864391857e+00 6.8098041414298494e-01 + -7.6259216641323913e-01 2.4411447344984425e+00 7.6044334697335414e-01 + -1.0234554114249110e+00 2.8096334907123124e+00 7.5836954270807810e-01 + -1.3397162368759246e+00 3.1245747855938242e+00 6.2807372333910583e-01 + -1.6662772207485161e+00 3.3328099484254969e+00 3.3668868688348241e-01 + -1.9340979288656865e+00 3.3964530105510709e+00 -7.3857774658973252e-02 + -2.1260228679168245e+00 3.3167335808761607e+00 -5.4466217586468235e-01 + -2.2556186502369773e+00 3.0722530033741400e+00 -1.0463224705034662e+00 + -2.3329616966456679e+00 2.6514645723480923e+00 -1.4996520213976043e+00 + -2.3715239745301817e+00 2.1767567076261525e+00 -1.8053677626186979e+00 + -2.3890825819768908e+00 1.8018176098956893e+00 -1.9842970047458293e+00 + -2.4082469107041438e+00 1.5702711298825003e+00 -2.0926758617709353e+00 + -2.4547184937046529e+00 1.4636745249114378e+00 -2.1341915144876467e+00 + -2.5143640773030222e+00 1.3907835998142697e+00 -2.1343692808631052e+00 + -2.4382224059153503e+00 1.2187314689305784e+00 -2.4363662151256511e+00 + id 11787 + loc 3.4098890423774719e-01 3.4579542279243469e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7598058230361595e-01:3.4763255370477902e-01:7.3227302151246398e-04:3.4182911215635131e-01:9.8214090577609814e-01:3.9753827168470973e-01:1.2493138518371194e+00:4.3935996128046184e-01:1.7924026305671295e+00:4.7597582249779291e-01:2.0165505798197949e+00:3.3884638790938876e-01:2.6174728893287442e+00:3.4906620177579240e-01:3.5279709223498994e+00 + CVs 20 + -2.3326016115713175e-01 2.2797983595273041e-01 -7.8923414971218825e-02 + -4.8169668693232859e-01 5.1583479847254432e-01 -1.3068802360525325e-01 + -7.3779907621632224e-01 8.4319052120654825e-01 -1.8000213113435276e-01 + -1.0088273507881345e+00 1.1872979537080002e+00 -2.4879763921652115e-01 + -1.3101355441939169e+00 1.5255117187120850e+00 -3.5697746070094971e-01 + -1.6432166719998691e+00 1.8259731831893145e+00 -5.2580873640852432e-01 + -1.9833835689265646e+00 2.0414459045198603e+00 -7.8027109705540554e-01 + -2.2744438883447780e+00 2.1130384543951122e+00 -1.1306225986108260e+00 + -2.4618741797315464e+00 2.0178734948915626e+00 -1.5370008868570295e+00 + -2.5445742729358760e+00 1.7890317603175143e+00 -1.9446063195844090e+00 + -2.5491479198617633e+00 1.4491475982216664e+00 -2.3044851855962447e+00 + -2.5077827405060473e+00 1.0025951701833007e+00 -2.5417258116375492e+00 + -2.4309498992347454e+00 5.0253548550781801e-01 -2.6170507152600817e+00 + -2.2811579149501933e+00 3.9831725737178303e-02 -2.6571504979417346e+00 + -2.0308185144611071e+00 -3.3723014070032753e-01 -2.8285714091557033e+00 + -1.7187423361365215e+00 -5.6812301006989840e-01 -3.1942736887758389e+00 + -1.4232963566716892e+00 -6.0865314760708356e-01 -3.7012405796523451e+00 + -1.1790804816001619e+00 -5.7854989456663453e-01 -4.2032677923100517e+00 + -9.5987862840526317e-01 -7.8446778070934320e-01 -4.6014837121003822e+00 + id 11788 + loc 7.5036227703094482e-01 9.2029982805252075e-01 1085 + blend 0.0000000000000000e+00 + interp 3.4587205507596436e-01:2.4886019882988625e-01:2.8405679436118714e-03:3.3133148610127339e-01:8.4497567463407997e-01:3.4064208069571078e-01:1.5517498998985826e+00:3.4586859635541362e-01:1.9966230083128202e+00:2.4261345949149074e-01:2.6314885834926045e+00:3.2625869147886410e-01:3.1626585858250187e+00 + CVs 20 + -4.0489245547548375e-02 4.6187206588490259e-01 1.3783023924067295e-01 + -1.3246303508453150e-01 8.7213448072461097e-01 2.2441072428033695e-01 + -2.6017194238078850e-01 1.2478505361241785e+00 2.8243689486844836e-01 + -4.2066283051555708e-01 1.5881891555868843e+00 3.1153531601788698e-01 + -6.1154894334272902e-01 1.8794269771928409e+00 3.0125433629663156e-01 + -8.2313591692890764e-01 2.1095287149846689e+00 2.4667563157602446e-01 + -1.0404543625382492e+00 2.2713182676809636e+00 1.4968845453501944e-01 + -1.2484195345448794e+00 2.3662208627634760e+00 1.8597917799330954e-02 + -1.4386397555148969e+00 2.4031057733141208e+00 -1.3628053144766350e-01 + -1.6107914582591465e+00 2.3920044864948036e+00 -3.0782447954591086e-01 + -1.7670815823779229e+00 2.3400265436581460e+00 -4.9162531888152194e-01 + -1.9107226921938081e+00 2.2516653962324069e+00 -6.8485941945641582e-01 + -2.0462495529514309e+00 2.1251591825117004e+00 -8.8895596979994973e-01 + -2.1795658567002407e+00 1.9448440767695754e+00 -1.1091231029144266e+00 + -2.3183316723899212e+00 1.6810484143100475e+00 -1.3360134423678067e+00 + -2.4568338852937397e+00 1.3172393615826479e+00 -1.5170177053332405e+00 + -2.5820555610870928e+00 8.6312228843079342e-01 -1.5963630946221319e+00 + -2.7280875843729437e+00 3.7373708928820371e-01 -1.5378565546146987e+00 + -2.9033685675190211e+00 1.7131954412457495e-01 -1.4156734354969607e+00 + id 11789 + loc 9.5693922042846680e-01 2.8958436846733093e-01 1090 + blend 0.0000000000000000e+00 + interp 4.5882951604215794e-01:4.2500371893871131e-01:4.6999336419700777e-03:2.4905595534746283e-01:3.5830743713497948e-01:3.7524156824380311e-01:1.0813792796522141e+00:4.5882492774699751e-01:1.6109039411615276e+00:3.9836287352137562e-01:2.1163331256969728e+00:2.9558119574941771e-01:2.9944897678101885e+00 + CVs 20 + -9.6392766017171005e-02 4.3350235983650687e-01 -7.8140918999089343e-02 + -1.2039228944150901e-01 8.3501545557145018e-01 -1.1674123377284812e-01 + -1.0799577054368564e-01 1.2246155572891164e+00 -1.3092599018405876e-01 + -6.6833909454920071e-02 1.6060693702064839e+00 -1.2018680777547497e-01 + 1.7275275952573277e-02 1.9632328412611404e+00 -7.1115054630829677e-02 + 1.5541852575362236e-01 2.2722242538498731e+00 3.0324930073317158e-02 + 3.4729093874659678e-01 2.5009771584668550e+00 1.9341274011572129e-01 + 5.7211579352017594e-01 2.6213454890104382e+00 4.1285713148179071e-01 + 7.9971980079133098e-01 2.6279660671711844e+00 6.6654875397469071e-01 + 1.0156034916744809e+00 2.5404683443939997e+00 9.2618250964831450e-01 + 1.2251591019626589e+00 2.3818905005005160e+00 1.1706269217527945e+00 + 1.4360611887058283e+00 2.1628810198849928e+00 1.3839025571958112e+00 + 1.6521402129209217e+00 1.8874943178362176e+00 1.5456277994723977e+00 + 1.8755796075049076e+00 1.5630516273032464e+00 1.6262247769188605e+00 + 2.1028938198485791e+00 1.2078951431941354e+00 1.5854908295987462e+00 + 2.3199419464860993e+00 8.8615580541278927e-01 1.4060889996476735e+00 + 2.5227891607918496e+00 6.8612027285790866e-01 1.1444053028098555e+00 + 2.7102510563174693e+00 6.3500773500629959e-01 8.8583044406653988e-01 + 2.8457854167111667e+00 5.2664975039823714e-01 6.9229130540574535e-01 + id 11790 + loc 2.1096757054328918e-01 8.7109291926026344e-03 1054 + blend 0.0000000000000000e+00 + interp 6.2114464507360312e-01:5.2166551799157079e-01:1.5968317785498976e-01:2.1551162925632586e-01:9.1343636315083832e-01:5.6848056831893390e-01:1.6584077214821393e+00:6.2113843362715238e-01:2.0434777722094832e+00:5.3597469475119874e-01:3.0114405732992457e+00:5.6620835250803769e-01:3.8190346370586141e+00 + CVs 20 + -9.6032546079971220e-02 3.8928695810216585e-01 -3.0764129017104203e-01 + -1.4347443831249818e-01 7.5754576977227406e-01 -6.0651432692117258e-01 + -1.4311159573236404e-01 1.0924228227832109e+00 -9.1164832340593682e-01 + -1.0624875384653465e-01 1.3689019738475248e+00 -1.2375791321231071e+00 + -4.8589596256692902e-02 1.5586314235288170e+00 -1.5914973239799819e+00 + 1.9354957165451325e-02 1.6428756155567419e+00 -1.9609169060911902e+00 + 9.5378853923492435e-02 1.6197665759675459e+00 -2.3089109929790834e+00 + 1.8057183443315084e-01 1.5110813012303055e+00 -2.5896388248490188e+00 + 2.7243114878905744e-01 1.3617259433575553e+00 -2.7686128211183503e+00 + 3.5585821694354092e-01 1.2388126042580720e+00 -2.8279760993546854e+00 + 4.0737856612110224e-01 1.2173984698366478e+00 -2.7931466253713517e+00 + 4.2873489524838965e-01 1.3149532266503088e+00 -2.7492304113800938e+00 + 4.3671485855991860e-01 1.4727267769106280e+00 -2.7606778827432339e+00 + 4.1995081940245327e-01 1.5813081313441466e+00 -2.7931532441883147e+00 + 3.7049345082053908e-01 1.5753351859223930e+00 -2.7454011374422258e+00 + 1.9557804053513961e-01 1.5538805273292775e+00 -2.7397904298349980e+00 + -2.1516680292534629e-01 1.4167976696338025e+00 -2.8604255676785928e+00 + -4.4357931443122400e-01 1.1686504197502925e+00 -2.7734048525955970e+00 + -2.0370457216816784e-01 1.3272231446890004e+00 -2.6169001008382167e+00 + id 11791 + loc 3.2684367895126343e-01 3.2982084155082703e-01 1077 + blend 0.0000000000000000e+00 + interp 3.0697359116450373e-01:2.8269060852355188e-01:9.5942058785617601e-01:2.9724575479616977e-01:1.4264261072906037e+00:2.6111847367670465e-01:2.0178153124602920e+00:3.0697052142859210e-01:3.1249228226357122e+00:2.6384637066121613e-01:3.9926308187752548e+00 + CVs 20 + -1.3670385313150990e-01 3.2061517941934448e-01 -7.8240229663595770e-02 + -2.8217346158293982e-01 6.5392189731499695e-01 -1.4846234160665381e-01 + -4.5166016656919772e-01 9.8402428600037406e-01 -2.3026542962321112e-01 + -6.5642243502655329e-01 1.2956819003420132e+00 -3.3606463050681779e-01 + -9.0184719644141953e-01 1.5737400358626852e+00 -4.7244737846714246e-01 + -1.1858549552923381e+00 1.8007073497656507e+00 -6.4543312229786443e-01 + -1.4987556538272946e+00 1.9598963557172859e+00 -8.5794185388167543e-01 + -1.8256612395098191e+00 2.0395863868620809e+00 -1.1066404179613338e+00 + -2.1509084299981294e+00 2.0352837023525505e+00 -1.3811653088577331e+00 + -2.4638141258610124e+00 1.9501098402639192e+00 -1.6641402215606644e+00 + -2.7615111528887986e+00 1.7936065458424260e+00 -1.9329749257115403e+00 + -3.0446758945885111e+00 1.5783283217709325e+00 -2.1642747886434988e+00 + -3.3130402814913995e+00 1.3191168994374816e+00 -2.3357929522049536e+00 + -3.5651995892181865e+00 1.0394531581294355e+00 -2.4247895710137710e+00 + -3.7975477524859262e+00 7.8061874627805627e-01 -2.4113784158228841e+00 + -3.9976873916949365e+00 6.0611789282523132e-01 -2.3036659185795036e+00 + -4.1528076334138548e+00 5.6746100216077999e-01 -2.1697468314209805e+00 + -4.2515488696641643e+00 6.4691710988838369e-01 -2.0915979709559953e+00 + -4.4658544352751584e+00 6.3471138657917869e-01 -1.9124682484431497e+00 + id 11792 + loc 4.8907402157783508e-01 1.0509593784809113e-01 1076 + blend 0.0000000000000000e+00 + interp 5.4910777413051171e-01:3.8614720272609060e-01:1.5231993063044014e-02:5.4910228305277042e-01:9.6991785648722262e-01:3.5949410647413560e-01:1.2144252123258839e+00:3.9515536798930184e-01:1.7384778751516898e+00:2.9440635153935835e-01:2.1392128084731281e+00:3.9437106546389272e-01:3.0015558334943249e+00:4.2422355308641924e-01:3.5692874127945262e+00 + CVs 20 + -7.5535524686129854e-02 3.9125406774085736e-01 -2.5023186759324034e-01 + -1.8925878501469159e-01 7.6457542173672399e-01 -5.2254645329345051e-01 + -3.4440335609671069e-01 1.1156261771360532e+00 -8.1108436735088096e-01 + -5.5130196504504347e-01 1.4396185751289381e+00 -1.1038811927912067e+00 + -8.0751307330466604e-01 1.7204510164715214e+00 -1.3877903568191721e+00 + -1.0849541922223964e+00 1.9371749450042755e+00 -1.6601660199476449e+00 + -1.3533002956542468e+00 2.0834289217474788e+00 -1.9276587687311788e+00 + -1.5988349248670353e+00 2.1666534210710013e+00 -2.1961810268880178e+00 + -1.8088254332179634e+00 2.1912488374380166e+00 -2.4642859969085147e+00 + -1.9497536926485901e+00 2.1595906660108226e+00 -2.7096832990788022e+00 + -2.0063235338651886e+00 2.0904615175300529e+00 -2.9099380942686106e+00 + -2.0415994369064880e+00 1.9817207863480277e+00 -3.1077295496931461e+00 + -2.0987101478415111e+00 1.7754356244548166e+00 -3.3309081216753880e+00 + -2.1477643455289557e+00 1.4691028303161466e+00 -3.5140909627091390e+00 + -2.1674249874441514e+00 1.1081657921446233e+00 -3.6215042641199098e+00 + -2.1612152813131154e+00 6.5958493431379528e-01 -3.6370378818533058e+00 + -2.1053422801507744e+00 2.9389064382959518e-02 -3.3981095969121293e+00 + -1.9728742712312695e+00 -4.8356816821511539e-01 -2.7104339289406023e+00 + -1.8990653798058861e+00 -5.9356866302973676e-01 -2.4375170013252347e+00 + id 11793 + loc 5.2244842052459717e-01 5.6560617685317993e-01 410 + blend 0.0000000000000000e+00 + interp 4.2857810442555361e-01:3.0667650438333760e-01:2.7707216190863349e-01:2.9564996449930675e-01:1.0764923481756092e+00:4.2857381864450939e-01:1.8156755630189592e+00:2.6422147930183854e-01:2.2719020764281228e+00:4.2844182084672067e-01:3.0174316013988083e+00:3.1110574723155687e-01:3.6944901064126783e+00 + CVs 20 + 3.3010589427481052e-01 7.6314376739817641e-02 -2.2666641176392419e-01 + 5.9696649915055966e-01 1.2752095736947300e-01 -4.0753621004099100e-01 + 8.4184452554140932e-01 1.6881266975592779e-01 -5.6843941155726885e-01 + 1.0813134835050664e+00 2.0893069624167104e-01 -7.2010088940941763e-01 + 1.3139313390915808e+00 2.4936231928279134e-01 -8.6341959834724857e-01 + 1.5393007227515896e+00 2.9144972492917376e-01 -9.9944776370055743e-01 + 1.7579526755770312e+00 3.3633349420121605e-01 -1.1272773835857577e+00 + 1.9711435703205780e+00 3.8458318049284912e-01 -1.2441810151321591e+00 + 2.1812508276916645e+00 4.3599136001822358e-01 -1.3469697977501915e+00 + 2.3911527077416341e+00 4.9005326298190133e-01 -1.4317125718384212e+00 + 2.6001953900665322e+00 5.4813007493263566e-01 -1.4908264376168723e+00 + 2.8014537100953589e+00 6.1412627743936965e-01 -1.5142869825501704e+00 + 2.9957836558685877e+00 6.8672103351844005e-01 -1.5022843714125229e+00 + 3.2028370236791148e+00 7.5158911299068265e-01 -1.4725777165933815e+00 + 3.4362699767456704e+00 7.9259165852896762e-01 -1.4464575154548038e+00 + 3.6899684855646240e+00 8.0414144810556332e-01 -1.4340759478589074e+00 + 3.9505707732300532e+00 7.8689700409180574e-01 -1.4418676040157603e+00 + 4.2065303156777398e+00 7.4331908133204472e-01 -1.4804820986818783e+00 + 4.4282679766911333e+00 6.7618078531894366e-01 -1.5784233685135713e+00 + id 11794 + loc 9.5683151483535767e-01 7.1361953020095825e-01 1087 + blend 0.0000000000000000e+00 + interp 1.0574203015251937e+00:7.2454156136076764e-01:7.2916760176270357e-03:4.0251746433797470e-01:1.8702608988462521e-01:3.0725105903910832e-01:2.0152761172952842e+00:4.1252779373198417e-01:2.2754814487526516e+00:2.8798439001019677e-01:3.0696857383826290e+00:1.0574103015251937e+00:3.9910532570669703e+00 + CVs 20 + -1.4008569371045576e-01 4.2521810209414374e-01 4.9027774820326925e-01 + -2.7466488913816478e-01 7.5904277309144363e-01 8.2218687562471870e-01 + -4.1496691789702744e-01 1.0640550712200465e+00 1.0961093387338143e+00 + -5.6964947454197024e-01 1.3646640091655979e+00 1.3479428365063384e+00 + -7.4993356711887427e-01 1.6536493487505139e+00 1.5647226988200174e+00 + -9.6226333955933663e-01 1.9228157379914657e+00 1.7365001416374901e+00 + -1.2100116608994076e+00 2.1642606559351729e+00 1.8552002750070196e+00 + -1.4947817723481789e+00 2.3690916689234882e+00 1.9104719142495550e+00 + -1.8087384791436190e+00 2.5224896192089954e+00 1.8856011236648489e+00 + -2.1149383099738133e+00 2.6019686969171469e+00 1.7690627982396780e+00 + -2.3711095146625971e+00 2.5981868896965912e+00 1.5798288236561593e+00 + -2.5666158699166592e+00 2.5167540088145870e+00 1.3454529291237214e+00 + -2.7040574367603778e+00 2.3604303151336925e+00 1.0806433653814329e+00 + -2.7873623718636029e+00 2.1186525500218201e+00 7.8498284575302635e-01 + -2.8289427579192212e+00 1.7636857768746508e+00 4.7313189722490867e-01 + -2.8380421810621463e+00 1.2746637212724161e+00 2.0185572043889716e-01 + -2.8382135202484600e+00 6.4310617514146418e-01 2.6567057675640771e-02 + -2.9056933304676775e+00 -8.8936629439602455e-02 -1.6417004491001141e-03 + -3.0070489242121665e+00 -5.7317876135507095e-01 4.4427746437756155e-02 + id 11795 + loc 1.4619548618793488e-01 1.8353952467441559e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4183020884791102e-01:2.5871883984865818e-01:7.6879420009602772e-01:4.0952854628423424e-01:1.1199406260718463e+00:3.2296451051825042e-01:1.8501065926862352e+00:4.4182579054582255e-01:2.1392990392395861e+00:3.2391161057718354e-01:2.8949772741728235e+00:2.6473324439142726e-01:3.5502764967382427e+00 + CVs 20 + -2.2853623199279149e-01 3.3315817645458312e-01 -2.5410585667669555e-01 + -4.3891288768725750e-01 6.6400484534792903e-01 -5.1432920715720964e-01 + -6.6921822575586176e-01 1.0033879262191980e+00 -7.6733991933596779e-01 + -9.3903568086775513e-01 1.3522659724627379e+00 -1.0008013940126244e+00 + -1.2616114306787001e+00 1.7040521245550584e+00 -1.2033241376143948e+00 + -1.6482543055460837e+00 2.0449262522690330e+00 -1.3636006690849523e+00 + -2.1043790621242500e+00 2.3547421207921917e+00 -1.4726565496376547e+00 + -2.6283938349651139e+00 2.6090963068567468e+00 -1.5257311233391784e+00 + -3.2105390657448218e+00 2.7816354744985370e+00 -1.5219091824974886e+00 + -3.8313441149425449e+00 2.8468734951100321e+00 -1.4664300340101732e+00 + -4.4604653229387914e+00 2.7872454866534819e+00 -1.3759130550535770e+00 + -5.0642225811418822e+00 2.6032814279039815e+00 -1.2787147443105296e+00 + -5.6179723257378846e+00 2.3077901928602076e+00 -1.2036480226177999e+00 + -6.1035127491365140e+00 1.9153367436398643e+00 -1.1711207537079615e+00 + -6.5034949524177250e+00 1.4367065136666763e+00 -1.1908585848173507e+00 + -6.7954798942975536e+00 8.8018144307513313e-01 -1.2567049860426422e+00 + -6.9595514663502582e+00 2.8075003361488315e-01 -1.3427691936702613e+00 + -7.0261012918298125e+00 -2.7531735352327413e-01 -1.4090326166251552e+00 + -7.1357354055469102e+00 -6.0924431112869548e-01 -1.3984906851480716e+00 + id 11796 + loc 3.4771755337715149e-01 6.3200235366821289e-01 1053 + blend 0.0000000000000000e+00 + interp 4.6368829716090115e-01:3.3367919547584796e-01:4.4300962750123307e-01:3.3634034013193242e-01:2.1223332204762198e+00:3.4450238911482706e-01:2.9723315125730552e+00:4.6368366027792957e-01:3.2190326111627900e+00:3.0944308789339481e-01:3.9767947709290756e+00 + CVs 20 + -8.4197811898496761e-02 3.5372764177965094e-01 3.8545128090420877e-01 + -2.0700943009972472e-01 6.3803992778357577e-01 7.1876150039744457e-01 + -3.4428927984988233e-01 8.9547310706506433e-01 1.0423049387402545e+00 + -4.8519398592102159e-01 1.1327659850644907e+00 1.3632721318009997e+00 + -6.3522309431158208e-01 1.3371799256054824e+00 1.6662027344814763e+00 + -7.9308525851702616e-01 1.4969838443372994e+00 1.9369266768489346e+00 + -9.5357624172952604e-01 1.6070759988005081e+00 2.1703054682898570e+00 + -1.1101536366685063e+00 1.6709855373814122e+00 2.3681549564008892e+00 + -1.2517653326838243e+00 1.7056103174012587e+00 2.5295846242961249e+00 + -1.3702780357645628e+00 1.7467368871087472e+00 2.6606370718371135e+00 + -1.4999409000159099e+00 1.8026635457799918e+00 2.7726452567791773e+00 + -1.6722874362750426e+00 1.8059185478265185e+00 2.8396447581370881e+00 + -1.8343330532895523e+00 1.6806760143731763e+00 2.8328698354505040e+00 + -1.8951823494627202e+00 1.4081860190357987e+00 2.7510605831137394e+00 + -1.8432303999112776e+00 1.0484396444754291e+00 2.6005089569244335e+00 + -1.7460987279228122e+00 6.7538031181294800e-01 2.3907410850511694e+00 + -1.6531032508479133e+00 3.4176366599064389e-01 2.1202764651810164e+00 + -1.5954777702237664e+00 1.8394699124383324e-01 1.7856144833342720e+00 + -1.6372926957605989e+00 3.8096502303124036e-01 1.4816829306760071e+00 + id 11797 + loc 2.1408559381961823e-01 9.4336206093430519e-03 1090 + blend 0.0000000000000000e+00 + interp 4.6948743235451279e-01:3.5813160803661293e-01:7.6173300002029409e-01:4.0905104547744175e-01:1.0232430886229633e+00:2.8345844852745439e-01:1.6195171929253558e+00:4.6948273748018926e-01:2.8427042482667857e+00:3.8937801817337364e-01:3.1002616474246949e+00:3.6824893425932614e-01:3.8928005823590190e+00 + CVs 20 + 3.8875039342520290e-01 4.6443153039903567e-01 3.7266087255009267e-02 + 6.5209330064910576e-01 8.6352085259130307e-01 1.1018846398941162e-01 + 8.5927164843014403e-01 1.2423001141799979e+00 2.0681776954986292e-01 + 1.0340230674732607e+00 1.6204042107588732e+00 3.2859510893441107e-01 + 1.1581467467679754e+00 1.9854860191766059e+00 4.8520826527648242e-01 + 1.2125232680858216e+00 2.3214882268440409e+00 6.8063648272223265e-01 + 1.1774204443999974e+00 2.6053194548271472e+00 9.1229146413798123e-01 + 1.0376374980276524e+00 2.8066216451720205e+00 1.1628656773985653e+00 + 7.9942629111260843e-01 2.8988177697470912e+00 1.3994152354752138e+00 + 4.9898748285019812e-01 2.8806062316917131e+00 1.6011009683524509e+00 + 1.7079747791435318e-01 2.7667420299387717e+00 1.7781523907162229e+00 + -1.6629879567378358e-01 2.5612358600528995e+00 1.9448266920544037e+00 + -4.9421787146136076e-01 2.2571162511979104e+00 2.1100742798427823e+00 + -7.8608561648183672e-01 1.8382603988149304e+00 2.2866697612536200e+00 + -9.9281690310565140e-01 1.2830535561410441e+00 2.4906368113939252e+00 + -1.0550188525321231e+00 6.4416666727575045e-01 2.7234327146763100e+00 + -9.6242081037187566e-01 2.6559889226453692e-02 2.9918704565716512e+00 + -7.3551626675637594e-01 -4.9871543030176713e-01 3.3132314703206922e+00 + -6.6134349587628338e-01 -7.5771682002986140e-01 3.4708885312577213e+00 + id 11798 + loc 6.9011807441711426e-01 2.2476291656494141e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7953976326164660e-01:4.4669789151445100e-01:6.7281477381840205e-02:2.7137222260635502e-01:6.7486687176990068e-01:2.9454769742105918e-01:1.2511243854090943e+00:3.1667321007108579e-01:2.0228114819627510e+00:4.5102067337989604e-01:3.0029563452448111e+00:4.7953496786401401e-01:3.6372068805393676e+00 + CVs 20 + 2.0439496879854252e-01 3.6311430464286470e-01 -1.2621600051821952e-01 + 3.7769704721685587e-01 7.1783071029776846e-01 -2.1422881247382164e-01 + 5.6082934372913085e-01 1.0747000824534125e+00 -2.8551695247049408e-01 + 7.7969131171838790e-01 1.4279584836385073e+00 -3.4104248494078027e-01 + 1.0481680158275977e+00 1.7625710268637873e+00 -3.6288951998600394e-01 + 1.3688508524656033e+00 2.0589615645318293e+00 -3.3574755588345750e-01 + 1.7306417722978009e+00 2.2970655203657042e+00 -2.5230815484128843e-01 + 2.1139271262415078e+00 2.4625260479138635e+00 -1.1484277355647410e-01 + 2.4993395357458970e+00 2.5498599543611347e+00 6.8861737098900866e-02 + 2.8718982341198163e+00 2.5595752296449419e+00 2.8908940629523694e-01 + 3.2222430438509577e+00 2.4967910096400727e+00 5.3119594402842107e-01 + 3.5476853690396717e+00 2.3708527992179826e+00 7.7576536838800259e-01 + 3.8480479879245153e+00 2.1930397612505739e+00 1.0025410304316158e+00 + 4.1169540187423026e+00 1.9755442268948826e+00 1.1988729428290990e+00 + 4.3397641253105137e+00 1.7342346683019800e+00 1.3695672262700527e+00 + 4.4913680860883805e+00 1.4870181778403648e+00 1.5089046857927286e+00 + 4.5392704634915564e+00 1.2401083637794001e+00 1.5980268087097085e+00 + 4.5246748337190752e+00 9.8776911595058825e-01 1.6131159643600497e+00 + 4.7300559634630748e+00 9.1887300122097426e-01 1.3419330071194344e+00 + id 11799 + loc 9.0919238328933716e-01 8.4974861145019531e-01 1054 + blend 0.0000000000000000e+00 + interp 2.8260955695052037e-01:2.8260673085495086e-01:4.1422616476949037e-01:2.3691564720858430e-01:1.0496472163890984e+00:1.9788942507728377e-01:1.9686527611091369e+00:2.0642416851611070e-01:2.0075366573195668e+00:1.6235653536247760e-01:3.3413264401099587e+00:2.0446314437470872e-01:3.8186721237535677e+00 + CVs 20 + 3.8737698417833744e-01 4.0914787656694207e-01 -2.8584176880338941e-01 + 7.4195225070061688e-01 8.0910327328353493e-01 -4.8288763242824506e-01 + 1.0609496133521261e+00 1.2251463663635509e+00 -6.0633995952318664e-01 + 1.3776377069613133e+00 1.5965269772572850e+00 -6.7683023407886289e-01 + 1.7277910142457111e+00 1.8433040008925434e+00 -7.2555345198149657e-01 + 2.1123832267158233e+00 1.9401685367188590e+00 -7.7840159153656974e-01 + 2.5086714941017831e+00 1.8919294929188444e+00 -8.4173320150824715e-01 + 2.9023334562129186e+00 1.7094988336997954e+00 -8.9894775002688077e-01 + 3.2814552077243029e+00 1.4096051907236935e+00 -9.1186764146022004e-01 + 3.6455599261835157e+00 1.0394416463823914e+00 -8.3221755345172366e-01 + 4.0073407889777668e+00 7.0244300443612673e-01 -6.4201879555095365e-01 + 4.3671152835366129e+00 5.1196576092882862e-01 -4.3526338597567071e-01 + 4.6781663091094092e+00 4.8797698509511989e-01 -3.5127344677791306e-01 + 4.9033509877548020e+00 5.4248385128441101e-01 -3.6448314026738182e-01 + 5.1538436146041793e+00 6.0324675000840466e-01 -4.0192223235619950e-01 + 5.5009231181182416e+00 6.5332744408609433e-01 -4.8903693978633389e-01 + 5.9462349690282323e+00 6.5196841148186913e-01 -6.4232395107737350e-01 + 6.4043094302414083e+00 5.4802263352495340e-01 -7.7349743919352831e-01 + 6.6243719367428344e+00 4.0747267685996258e-01 -7.1632884257129481e-01 + id 11800 + loc 7.2402179241180420e-01 2.2476291656494141e-01 1084 + blend 0.0000000000000000e+00 + interp 3.4326811900398552e-01:2.9874478707948321e-01:6.6230938723401489e-01:3.0858508307504584e-01:1.2462064376210500e+00:3.4326468632279550e-01:2.0291451867972623e+00:3.2259631575298303e-01:2.7194241191990489e+00:2.6731320407236370e-01:3.2269779517623220e+00:2.8014783656949444e-01:3.9912022538981509e+00 + CVs 20 + 1.1253552945373727e-01 2.9074494285125396e-01 -8.5067414845872102e-02 + 2.1893271435387818e-01 5.6196787278750748e-01 -1.4845707015783471e-01 + 2.9224973152758582e-01 8.2182823433117158e-01 -2.2402661910228333e-01 + 3.1542883155151247e-01 1.0662834016434570e+00 -3.2602695292679940e-01 + 3.0457714138715430e-01 1.3015849345052124e+00 -4.4658271846799080e-01 + 3.0604051810377153e-01 1.5600296301471304e+00 -5.6782994554870814e-01 + 3.7112355150547743e-01 1.8446999336380916e+00 -6.5156024753538244e-01 + 5.1313126694119948e-01 2.1097363900146582e+00 -6.7378087351766180e-01 + 7.1039219637177298e-01 2.3235864301692013e+00 -6.2062892808850700e-01 + 8.9922960645142858e-01 2.4733948964043848e+00 -4.5601905670114595e-01 + 1.0079743859243804e+00 2.5634097249008310e+00 -1.7686311444828928e-01 + 1.0087659164933498e+00 2.6056822713192718e+00 1.9582225864351765e-01 + 8.6612714241361177e-01 2.5849012995687217e+00 6.1427558088824785e-01 + 5.6155329849409197e-01 2.4829247087748847e+00 9.4808309869840179e-01 + 1.8315222338486928e-01 2.3267498577240628e+00 1.1080250494369548e+00 + -1.3846312412688647e-01 2.1599057843387275e+00 1.1193548226291017e+00 + -3.0778984496250666e-01 1.9942425324493338e+00 9.1981322724007442e-01 + -4.5610461308937228e-01 1.6784992798196616e+00 5.2581886717517434e-01 + -5.0716281166414567e-01 1.7766620360067922e+00 7.7732284228578208e-01 + id 11801 + loc 5.1738160848617554e-01 5.9477144479751587e-01 1075 + blend 0.0000000000000000e+00 + interp 3.8054266463578174e-01:3.6774736618017539e-01:2.8404603289644870e-01:3.5698459541782929e-01:1.0604711725231550e+00:3.7442176321787196e-01:1.8099187532244576e+00:3.8053885920913538e-01:2.1588977427735694e+00:2.6480321733482853e-01:2.8359203177551162e+00:3.7254676894355171e-01:3.7064658355932152e+00 + CVs 20 + 3.2526285165942054e-03 2.6145846993160066e-01 -1.6382902809704128e-01 + 3.0249252771509749e-02 5.1937397708268696e-01 -3.2868043576114631e-01 + 7.6155466793838056e-02 7.7232462211735642e-01 -4.9725360244919953e-01 + 1.3955974611414795e-01 1.0193400730949156e+00 -6.7608248397208714e-01 + 2.2119293751742702e-01 1.2515588524739569e+00 -8.6877028616766905e-01 + 3.1490282251643198e-01 1.4615643904589675e+00 -1.0746062046141114e+00 + 4.0787030665565172e-01 1.6524704831503723e+00 -1.2929768450914227e+00 + 4.9001863191222006e-01 1.8352378826789275e+00 -1.5244953710923936e+00 + 5.6341135265271935e-01 2.0193511698172024e+00 -1.7698731583366258e+00 + 6.3723231017846627e-01 2.2072121782320551e+00 -2.0337238089324252e+00 + 7.1579209529661258e-01 2.3858335951994092e+00 -2.3262030185801263e+00 + 7.9552787008289017e-01 2.5214768633413258e+00 -2.6515600155404808e+00 + 8.6445342383812973e-01 2.5776686580143329e+00 -2.9937537277731860e+00 + 9.0575789413179064e-01 2.5376166140137233e+00 -3.3203611581467660e+00 + 9.1861936137529243e-01 2.4093913421656250e+00 -3.6043457529640124e+00 + 9.2697659867000570e-01 2.2155795640976303e+00 -3.8309441815111738e+00 + 9.5882964336636800e-01 1.9842722201365279e+00 -3.9907557997275531e+00 + 9.9643305596310194e-01 1.7368918473892991e+00 -4.0802182408362997e+00 + 8.3749049179494439e-01 1.4241410046463470e+00 -4.0239494426297231e+00 + id 11802 + loc 5.8732483536005020e-02 7.1461522579193115e-01 410 + blend 0.0000000000000000e+00 + interp 3.0374208019638993e-01:2.2150797417870163e-01:3.4530064060878818e-01:2.7725364723190454e-01:1.6147351778452648e+00:2.4061433476892008e-01:2.7500578905385940e+00:3.0373904277558800e-01:3.3709002491572377e+00 + CVs 20 + 2.9510329333841023e-01 1.7691309162464913e-01 -2.5648611967263812e-02 + 5.3485966601519286e-01 3.0726136048816488e-01 -5.1527856032570180e-02 + 7.5539929655782356e-01 4.1605253410854071e-01 -6.9541620444844299e-02 + 9.8689446778463397e-01 5.2305353673094523e-01 -7.2644470515153214e-02 + 1.2237490235828048e+00 6.2438148870565202e-01 -6.0996824762577839e-02 + 1.4578417767573681e+00 7.1616897733123208e-01 -3.6110707468310355e-02 + 1.6835929346044745e+00 7.9722382293444627e-01 4.2948206969689595e-04 + 1.8997073230445158e+00 8.6833275726822379e-01 4.6552004184906848e-02 + 2.1052737208758785e+00 9.3017277797403930e-01 9.7471899530630401e-02 + 2.2994195480162989e+00 9.8364363008310995e-01 1.4691607126044404e-01 + 2.4890887622220883e+00 1.0337502692212008e+00 1.9880708046935380e-01 + 2.6928346894968924e+00 1.0913089536309335e+00 2.8062393323608403e-01 + 2.9293367793369689e+00 1.1573188644989112e+00 4.1352920609046950e-01 + 3.2008281497509019e+00 1.2093064028604914e+00 5.5694666398175596e-01 + 3.4871385867257443e+00 1.2307705272487861e+00 6.4933028735229892e-01 + 3.7703871724771720e+00 1.2254850450299000e+00 6.7856938345357332e-01 + 4.0413401493115817e+00 1.2000702659464204e+00 6.6374932669671149e-01 + 4.2882358992938983e+00 1.1595268226449906e+00 6.1651917585986338e-01 + 4.4167154946463549e+00 1.0991563342055968e+00 4.2967713622166914e-01 + id 11803 + loc 8.7168258428573608e-01 3.3842769265174866e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7132573098949176e-01:3.0763827845177205e-01:2.4520793219506498e-01:4.7132101773218188e-01:9.0776601545659508e-01:4.3882664034578545e-01:1.0978118848552472e+00:2.5201471583554780e-01:1.6527949049143049e+00:3.1001204885712708e-01:2.6998230339658349e+00:2.5105301465512042e-01:3.4926231096435227e+00 + CVs 20 + -8.5804451896123513e-02 2.8633574795972472e-01 3.1980808383191628e-01 + -1.5258519355635550e-01 5.8273749076925108e-01 6.1418069903040495e-01 + -2.3124643939212775e-01 8.5732108547977770e-01 9.2566462772217462e-01 + -3.4353536213250235e-01 1.0820476482612025e+00 1.2717376199637727e+00 + -5.0181334231216934e-01 1.2364716764901831e+00 1.6474120196474653e+00 + -7.1224611823519046e-01 1.3047389383380845e+00 2.0340439590554964e+00 + -9.7216038066196886e-01 1.2793763347046829e+00 2.4025333645569118e+00 + -1.2701215089908084e+00 1.1645725971711458e+00 2.7239729769503196e+00 + -1.5877419042832523e+00 9.7454532187113507e-01 2.9814054670092576e+00 + -1.9032765577703825e+00 7.2570013767171282e-01 3.1784504568344336e+00 + -2.1943473975216743e+00 4.3184547013212182e-01 3.3331459012707763e+00 + -2.4442170184548742e+00 1.1544029640097553e-01 3.4644888302245751e+00 + -2.6428160909912561e+00 -2.0243606166096817e-01 3.5898074079527396e+00 + -2.7913788795371119e+00 -5.1438857709971808e-01 3.7348844277406443e+00 + -2.8850937464630002e+00 -8.2979563070236750e-01 3.9364185787954473e+00 + -2.8982368130831406e+00 -1.1517828947939717e+00 4.2267950461938062e+00 + -2.8083905281970920e+00 -1.4510681766699214e+00 4.6311119378305117e+00 + -2.6428313439979627e+00 -1.6467337032821225e+00 5.1166090682443555e+00 + -2.6012622999601867e+00 -1.6862975865250089e+00 5.4408907713750168e+00 + id 11804 + loc 5.3967660665512085e-01 5.2719789743423462e-01 1054 + blend 0.0000000000000000e+00 + interp 4.3982306707344976e-01:4.3981866884277904e-01:5.8510053030591536e-05:3.9392414174441254e-01:7.3945167168911219e-01:2.2859070968413264e-01:1.0800990702149440e+00:2.5970342131957536e-01:1.9892719597896107e+00:3.4182197739943609e-01:2.3725958202264685e+00:3.1873560162273007e-01:2.9440967721783684e+00:2.7764497698866186e-01:3.3698320544554177e+00 + CVs 20 + 2.9105321787637212e-01 4.3589352940233467e-01 -1.5437495615435171e-01 + 5.6491837286880475e-01 8.9380928489325195e-01 -2.2032711950318312e-01 + 8.0988298182205187e-01 1.3630813880379014e+00 -1.8968438116456665e-01 + 1.0846850027464519e+00 1.7769894514339963e+00 -9.8470177627505873e-02 + 1.4472105480775910e+00 2.0406825254564041e+00 -1.1485857649655706e-02 + 1.8654732710653161e+00 2.0984507799867367e+00 2.4964385096392316e-02 + 2.2519572667376040e+00 1.9564409124041311e+00 8.4699012807394336e-03 + 2.5438427893171074e+00 1.6723398344565474e+00 -2.4081475426394716e-02 + 2.7375649102447399e+00 1.3171233401627027e+00 -2.7594730379392418e-02 + 2.8918604011829760e+00 9.4611385636388490e-01 3.3438107420103336e-02 + 3.0950142180377220e+00 5.9227982521133782e-01 1.8614414626973663e-01 + 3.4249054064866740e+00 2.9223817342270342e-01 3.9845881558213847e-01 + 3.9335322934006562e+00 1.0567855159085443e-01 5.3959953003179284e-01 + 4.4800215843342528e+00 8.9766884289877114e-02 4.5939150804012291e-01 + 4.8470717363954536e+00 1.4746828460858352e-01 2.4669375881566802e-01 + 5.0759137065050268e+00 1.9556723631717887e-01 4.0067409373479190e-02 + 5.2410294428285500e+00 2.3095285295529222e-01 -1.2138157352715062e-01 + 5.4251126568738615e+00 2.5598227820987729e-01 -2.5394010378364684e-01 + 5.7183869585815179e+00 2.1748193072077848e-01 -3.5400424289241672e-01 + id 11805 + loc 3.1923905014991760e-01 7.2675329446792603e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4165528594485076e-01:4.4165086939199133e-01:1.8317055339263943e-01:3.8460397170420368e-01:1.0017099948719714e+00:2.5145642360703963e-01:1.4595475419458339e+00:3.6912174276885534e-01:2.2816579463113094e+00:3.8233265518854803e-01:2.9968934988930425e+00:3.4679403020825711e-01:3.6702739954869044e+00 + CVs 20 + 1.6160758528773755e-01 2.9046062367737258e-01 -2.5827459481392867e-02 + 3.3160868082987344e-01 5.5552936833150901e-01 -4.8299326163719070e-02 + 4.9871853419198919e-01 7.9798677086209857e-01 -6.4991318391138003e-02 + 6.5870304245555267e-01 1.0264895923406641e+00 -7.6182117715489106e-02 + 8.1320202596921320e-01 1.2506407382961999e+00 -8.6630813852434152e-02 + 9.6614724072046176e-01 1.4807604696785197e+00 -1.0337158995482254e-01 + 1.1266795722313472e+00 1.7224170186912167e+00 -1.3635470762495172e-01 + 1.3051447180019111e+00 1.9738264458392856e+00 -1.9834089283519252e-01 + 1.5031779520307302e+00 2.2283752972226312e+00 -3.0478797452654705e-01 + 1.7099604546073190e+00 2.4734246945466030e+00 -4.7062416741857716e-01 + 1.9155204818297047e+00 2.6936368438816323e+00 -7.0343318927545673e-01 + 2.1229010743517476e+00 2.8719431749089983e+00 -1.0044613109951990e+00 + 2.3416989116039000e+00 2.9783945011322017e+00 -1.3619616806433168e+00 + 2.5854125849837368e+00 2.9702451182605696e+00 -1.7338046500038340e+00 + 2.8672438843671810e+00 2.8219517708241613e+00 -2.0857516914251075e+00 + 3.1478996892101132e+00 2.5382252107383509e+00 -2.4349469020638042e+00 + 3.3446212770301100e+00 2.1487983830457136e+00 -2.8017159366110049e+00 + 3.3607333947468643e+00 1.7388045293478975e+00 -3.1506904246828622e+00 + 3.0070456263044409e+00 1.6579017608723841e+00 -3.3084288178111136e+00 + id 11806 + loc 1.0495513677597046e-01 2.7491888403892517e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0782338633502622e-01:2.7204461000133251e-01:1.5497993292604484e-02:3.0403448084116624e-01:7.1572288871321321e-01:2.8337837290574025e-01:1.2350364055759293e+00:3.0185866162017022e-01:1.9633487838324677e+00:5.0781830810116291e-01:2.3399720620100366e+00:2.5224653773677513e-01:3.1162846679204974e+00 + CVs 20 + 3.2838875107113830e-01 3.5865158291542532e-01 2.8739852004325905e-01 + 5.2383162590776833e-01 6.3054564979522354e-01 5.5491536256568297e-01 + 6.7457977341931108e-01 8.6695520203822984e-01 8.2673920639831688e-01 + 8.1624455650798255e-01 1.0841558013459052e+00 1.1052451967525128e+00 + 9.4266807823679422e-01 1.2817896935177000e+00 1.3919485307573203e+00 + 1.0457343386788662e+00 1.4584610601607368e+00 1.6900937823730173e+00 + 1.1142031912407642e+00 1.6095862148938784e+00 2.0032541144409635e+00 + 1.1342004434590125e+00 1.7266318822770255e+00 2.3332922204087940e+00 + 1.0928020868979804e+00 1.7969459520970350e+00 2.6763042620267505e+00 + 9.8510426453304190e-01 1.8039590267834014e+00 3.0247847749727925e+00 + 8.2452212688189919e-01 1.7319349075992116e+00 3.3725089552043990e+00 + 6.3904822745584799e-01 1.5712184383143564e+00 3.7159751865501125e+00 + 4.6199350212074686e-01 1.3186750565960050e+00 4.0512118124269385e+00 + 3.3472083872355712e-01 9.8262869581199186e-01 4.3758060364565168e+00 + 3.0415650705942321e-01 5.9518455826662908e-01 4.6891732353407827e+00 + 3.8306815796127963e-01 2.1811958231089623e-01 4.9952154000637572e+00 + 5.3334233842523948e-01 -7.7488697710212662e-02 5.3074757483848964e+00 + 7.0072857251384801e-01 -2.7204613434061314e-01 5.6250111894854662e+00 + 8.2845817909346076e-01 -6.1337950742766056e-01 5.9276606327102357e+00 + id 11807 + loc 7.6558077335357666e-01 7.1197301149368286e-02 1053 + blend 0.0000000000000000e+00 + interp 5.3963980479606033e-01:4.3479925552408288e-01:4.1093518244669192e-01:5.3963440839801236e-01:9.8342230329188751e-01:2.1551162925632586e-01:1.9639103481773765e+00:4.1480661529392387e-01:3.0129212357935353e+00:2.8486099069040460e-01:3.6641731679116241e+00 + CVs 20 + 3.0158792393550193e-01 3.7354289332329865e-01 -1.5455147710958567e-01 + 6.1702695983883094e-01 7.3344902095523046e-01 -2.6199708380880216e-01 + 9.5612165401871629e-01 1.0688300863795699e+00 -3.2956722602060318e-01 + 1.3288098086790605e+00 1.3540560423707890e+00 -3.6970249396201549e-01 + 1.7385319359414166e+00 1.5601881502277144e+00 -3.9367721702239056e-01 + 2.1731032916075068e+00 1.6667702308323764e+00 -4.0314799041862970e-01 + 2.6029559364464938e+00 1.6655750464581276e+00 -3.8660212723597298e-01 + 2.9898497254651613e+00 1.5645379318208172e+00 -3.2813886513223989e-01 + 3.2963158897138385e+00 1.3853277155014192e+00 -2.1997307957940671e-01 + 3.4840208749184916e+00 1.1572185449401937e+00 -7.1160368225576809e-02 + 3.5272161150826591e+00 9.1861227792962130e-01 9.0947970961436697e-02 + 3.4425972255654362e+00 7.0360636589517433e-01 2.3368760239018949e-01 + 3.2726958943373909e+00 5.3908436214258226e-01 3.4582607406314281e-01 + 3.0776697036376834e+00 4.2034018628638459e-01 4.5963304158742002e-01 + 2.8857259210755082e+00 3.2814146182163656e-01 6.1156870085726300e-01 + 2.7119910914627168e+00 3.3372731177519993e-01 7.7282953126452525e-01 + 2.5852852139526510e+00 4.7019684391266131e-01 8.7417244170360120e-01 + 2.4487432866522467e+00 6.1142060911199658e-01 9.9253650235479207e-01 + 2.1728932165296602e+00 6.6411092639742808e-01 1.2944599926366833e+00 + id 11808 + loc 1.1011131107807159e-01 2.7491888403892517e-01 1084 + blend 0.0000000000000000e+00 + interp 5.8353130153780863e-01:2.8578608235637826e-01:7.6069367821522960e-03:3.1142152666412370e-01:7.3648520812567164e-01:5.3736104408631624e-01:9.9886611535365144e-01:5.8352546622479329e-01:2.5389373616355910e+00:2.7891262813363260e-01:3.1373397677536881e+00 + CVs 20 + 5.1615422400376199e-01 4.4453506317838226e-01 2.9927349399258685e-01 + 9.1893012876766211e-01 8.2119385789426957e-01 5.4848343572838587e-01 + 1.2897757417496574e+00 1.1777116897172557e+00 7.7928511698770109e-01 + 1.6522261553276887e+00 1.5390797098061613e+00 1.0308934616777117e+00 + 1.9799166838936599e+00 1.8989846229215330e+00 1.3324391389208934e+00 + 2.2428982470183021e+00 2.2476472793223556e+00 1.6991750101220662e+00 + 2.4134105524880924e+00 2.5733279894602754e+00 2.1302058283363601e+00 + 2.4583390043862972e+00 2.8589303091123695e+00 2.6177613460561289e+00 + 2.3340229340851901e+00 3.0734684814982831e+00 3.1346861699564714e+00 + 2.0243772785497161e+00 3.1766063198424250e+00 3.6130439641791039e+00 + 1.5698378133029631e+00 3.1355542296054617e+00 3.9964849140141099e+00 + 1.0446933158250999e+00 2.9120889414771778e+00 4.2732624932994936e+00 + 5.7718734061408394e-01 2.5066070977356425e+00 4.4461987181260554e+00 + 2.5159704839201469e-01 2.0191722916006585e+00 4.5273595250405290e+00 + 2.4540238067532583e-02 1.5484308819311761e+00 4.5265704820113370e+00 + -1.7363788023043558e-01 1.1758933053644944e+00 4.4539571437303751e+00 + -3.6305352484393572e-01 9.7409789285114423e-01 4.3514434839769409e+00 + -5.4377966299774361e-01 9.1797358807070428e-01 4.2582088175385984e+00 + -9.0160867139155865e-01 7.9166869774882076e-01 4.0932227418292113e+00 + id 11809 + loc 5.8732483536005020e-02 7.6420187950134277e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9858472138864731e-01:3.3898046224571760e-01:3.7188190069469917e-01:3.9858073554143342e-01:9.9631634132524582e-01:3.3233338531253381e-01:1.6435838884481839e+00:3.6480854914334909e-01:2.0416294953324998e+00:3.6226450066231064e-01:2.7133281545802617e+00:3.6041524895459365e-01:3.3349609950111474e+00:3.1089115774791648e-01:3.9745055844216610e+00 + CVs 20 + 2.0817955357592546e-01 3.7521456898382433e-01 -1.5063762468985731e-01 + 4.2249515441319557e-01 7.5609290079818336e-01 -3.3190577198358490e-01 + 6.3359890982031664e-01 1.1437753886334365e+00 -5.2051543348708207e-01 + 8.3649371702259256e-01 1.5321067888972442e+00 -7.0563730614207065e-01 + 1.0240378051050634e+00 1.9046674164971278e+00 -8.9953325658035133e-01 + 1.1787411400817276e+00 2.2314055628483107e+00 -1.1348482475070878e+00 + 1.2832716050904698e+00 2.4803890686862515e+00 -1.4342341600733348e+00 + 1.3273645393715612e+00 2.6158160112945792e+00 -1.7870325126946458e+00 + 1.3074119736703222e+00 2.6149022572248977e+00 -2.1518832413362636e+00 + 1.2372932166299133e+00 2.4957422251954196e+00 -2.5039020507208316e+00 + 1.1414562651404119e+00 2.2716227945302627e+00 -2.8499579104226789e+00 + 1.0539959970210577e+00 1.9419455430759283e+00 -3.1965326236895106e+00 + 1.0190070818389554e+00 1.5406927883720625e+00 -3.5385127096621098e+00 + 1.0631444073167775e+00 1.1680381429426514e+00 -3.8660370718670616e+00 + 1.1642856821937220e+00 9.3702778417443755e-01 -4.1589155952304049e+00 + 1.2705565721618404e+00 8.8329644062836654e-01 -4.3699645090955466e+00 + 1.3428607347010884e+00 9.3702476716928451e-01 -4.4455848377477380e+00 + 1.4271222094613276e+00 1.0375094020992996e+00 -4.4812052151511956e+00 + 1.6107754320303460e+00 1.3932664439623099e+00 -4.6435603532897787e+00 + id 11810 + loc 7.5766551494598389e-01 5.7492130994796753e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6578083017870486e-01:4.6577617237040309e-01:4.8053502032701090e-01:4.0838947679489246e-01:9.7144390730663555e-01:2.7085621220993933e-01:1.1936420062151274e+00:3.9745397837545143e-01:1.8067684908869750e+00:4.2454437824983343e-01:2.2131344896975960e+00:2.7400642264432690e-01:2.8868023437468038e+00:3.5619374196507625e-01:3.3227401270350723e+00:2.4397741092102190e-01:3.9689219085933374e+00 + CVs 20 + 1.0738794409475695e-01 3.7843094079381007e-01 -2.7717701654011506e-01 + 2.3569935462985789e-01 7.0253558060355803e-01 -5.2018143579084364e-01 + 3.7688043198509225e-01 9.7205334527545117e-01 -7.4040741848380454e-01 + 5.2599163231123758e-01 1.1876353821586274e+00 -9.4232848016876625e-01 + 6.8150520097417189e-01 1.3531325176470601e+00 -1.1223952072368251e+00 + 8.4096815575088002e-01 1.4759637717580150e+00 -1.2796018390813573e+00 + 1.0024220011714362e+00 1.5607395769615948e+00 -1.4247701724940742e+00 + 1.1585109309045483e+00 1.6121111472510155e+00 -1.5614222972374003e+00 + 1.2988380944017706e+00 1.6472687228253238e+00 -1.6745462079954372e+00 + 1.4224656425272955e+00 1.6787548436681679e+00 -1.7606958462525384e+00 + 1.5349039091965564e+00 1.6797837625951826e+00 -1.8404814596927417e+00 + 1.6399759488834329e+00 1.5997916805118033e+00 -1.9309512290406854e+00 + 1.7561967151526461e+00 1.4311906147959672e+00 -2.0288163055438488e+00 + 1.9251962086480596e+00 1.2199570665508659e+00 -2.1248551631807233e+00 + 2.1816726370641684e+00 9.7600957990806436e-01 -2.2325143216028267e+00 + 2.5312475183018455e+00 6.2585763566493424e-01 -2.4043216464485746e+00 + 2.9291071385560392e+00 1.1455677642970075e-01 -2.7111073044078955e+00 + 3.2420074214243448e+00 -4.2298752438719095e-01 -3.1529992326802545e+00 + 3.2004916357483641e+00 -5.3600588799624749e-01 -3.4134491681686900e+00 + id 11811 + loc 9.9842399358749390e-01 9.2594093084335327e-01 410 + blend 0.0000000000000000e+00 + interp 3.6556722567224925e-01:3.6556356999999257e-01:3.9839867985471300e-01:2.9998279505852776e-01:1.2525214960439097e+00:2.5967820226015970e-01:1.9996468851849680e+00:1.4669186264161704e-01:2.9996761196095978e+00:3.5637107363430909e-01:3.9603838886945817e+00 + CVs 20 + 6.6130627981219581e-01 2.0240999201938875e-01 -2.6254598214623881e-01 + 1.1901676226596789e+00 3.0177644143670884e-01 -5.2111974394299254e-01 + 1.7007238976950911e+00 3.6563349327070449e-01 -7.7656563004250700e-01 + 2.1987479191282726e+00 3.9862869599186679e-01 -1.0287898029296263e+00 + 2.6422467912257344e+00 3.8701637574298420e-01 -1.2747608792803720e+00 + 3.0100621305995325e+00 3.3379869061509981e-01 -1.5124564557639131e+00 + 3.3097904165200456e+00 2.5166131021292348e-01 -1.7479857211881171e+00 + 3.5624864547708963e+00 1.4738996939452842e-01 -1.9976278770558256e+00 + 3.7831287176740283e+00 1.8544428915825639e-02 -2.2722952544801678e+00 + 3.9745531074905420e+00 -1.4555994252305315e-01 -2.5714804562016038e+00 + 4.1358356111118288e+00 -3.7911071660628237e-01 -2.8878469528531965e+00 + 4.2570629777449334e+00 -7.2558715667560558e-01 -3.1997105697761832e+00 + 4.3233642794662401e+00 -1.1738205535770012e+00 -3.4994112268679762e+00 + 4.3356143014888060e+00 -1.6652619568295333e+00 -3.8238703263989167e+00 + 4.3111590696153179e+00 -2.1263352594574445e+00 -4.2221443588078627e+00 + 4.2743933507326659e+00 -2.5098746369164919e+00 -4.7262632122914221e+00 + 4.2574579477733812e+00 -2.8176608896975335e+00 -5.3325825984001591e+00 + 4.2909122945314913e+00 -3.0653656024240008e+00 -5.9704570056732642e+00 + 4.3851271928566025e+00 -3.2298866014633898e+00 -6.5136850072331001e+00 + id 11812 + loc 4.7556835412979126e-01 3.2296255230903625e-01 416 + blend 0.0000000000000000e+00 + interp 4.4194334362252879e-01:3.4740403914118267e-01:1.5319025996336444e-01:2.9994175097934384e-01:8.1484514210617143e-01:2.4811014885913268e-01:1.3922106244791874e+00:4.4193892418909259e-01:1.9825386507336589e+00:4.1163642784642723e-01:2.3967850673077873e+00:3.9491907827845119e-01:3.0437177620130003e+00:2.7511729204996671e-01:3.7702626434223747e+00 + CVs 20 + -4.2696041270546936e-02 1.8100650723677775e-01 -6.4294278082282619e-01 + -1.2194869157574240e-01 2.4129423946390016e-01 -1.0924029144984948e+00 + -2.0008922202357021e-01 2.5590052090056281e-01 -1.4899453458835490e+00 + -2.6848981006731970e-01 2.5533984743834548e-01 -1.9074696652573169e+00 + -3.2035380037616801e-01 2.3476220708925666e-01 -2.3445176642683769e+00 + -3.4510043799788509e-01 1.9229841616800303e-01 -2.7994008040596112e+00 + -3.3140541192113193e-01 1.2934147369288818e-01 -3.2679849895092117e+00 + -2.7204450349962084e-01 4.9198737712279339e-02 -3.7424706955871461e+00 + -1.6447808761049720e-01 -4.3103532681771028e-02 -4.2137243472242414e+00 + -1.0638847746833990e-02 -1.4144392031623854e-01 -4.6728887691942607e+00 + 1.7147647892043250e-01 -2.4296694091319049e-01 -5.1110511092484101e+00 + 3.3258080675482860e-01 -3.5496448893706556e-01 -5.5227677442150025e+00 + 4.1833715640661345e-01 -4.8692382128100142e-01 -5.9058423603431818e+00 + 4.2197961769766990e-01 -6.3396042815030329e-01 -6.2614443665069093e+00 + 3.7898767213357321e-01 -7.8667577386296017e-01 -6.5972474351531059e+00 + 3.0790226659494913e-01 -9.3976694951672179e-01 -6.9134549311671298e+00 + 2.0597063801695670e-01 -1.0831338825951584e+00 -7.1994167800328785e+00 + 7.5528583711520270e-02 -1.2036683274884239e+00 -7.4486534109853579e+00 + 3.5705618702102537e-02 -1.2888080642721604e+00 -7.7287622968398058e+00 + id 11813 + loc 3.7606012821197510e-01 8.8987630605697632e-01 1075 + blend 0.0000000000000000e+00 + interp 5.9122182727111916e-01:3.9289740085778191e-01:1.2431742092711173e-01:3.5008349043595155e-01:1.0014309152779597e+00:5.1969785269645519e-01:1.3278265745024203e+00:5.9121591505284643e-01:2.0051117143238688e+00:4.5007365968975399e-01:2.2319049396776904e+00:3.4559434177115866e-01:2.5290763051722909e+00:3.4762239451152449e-01:3.2604416403581644e+00 + CVs 20 + 1.4854355793655380e-01 2.2070565040477225e-01 -2.2449174105930586e-01 + 2.8358416058907782e-01 4.5457126613871796e-01 -4.7483031944742576e-01 + 4.1030690425580940e-01 6.9118798719229746e-01 -7.4324094807733543e-01 + 5.2504797767721045e-01 9.2793244810214326e-01 -1.0187347534800841e+00 + 6.2114560688254317e-01 1.1617779720883328e+00 -1.2971125315999159e+00 + 7.0185659811461276e-01 1.3804850026153774e+00 -1.5925428118485228e+00 + 7.7796246472804764e-01 1.5758772252548230e+00 -1.9268222254083323e+00 + 8.6078013003605047e-01 1.7462175667861317e+00 -2.3092811099228343e+00 + 9.5538852772216032e-01 1.8775670418177246e+00 -2.7320310135504249e+00 + 1.0523028191947574e+00 1.9360030381985420e+00 -3.1757388773208888e+00 + 1.1268615558000792e+00 1.8806538379643301e+00 -3.6120832795803426e+00 + 1.1467776090953585e+00 1.6913174229036299e+00 -3.9995691646048370e+00 + 1.0851327057598861e+00 1.3905852486557124e+00 -4.2919616120883894e+00 + 9.4637684849471482e-01 1.0390568308249590e+00 -4.4704327428523207e+00 + 7.5789041066097818e-01 6.9481121040010319e-01 -4.5596253588882769e+00 + 5.1772871103740603e-01 4.0497939659411347e-01 -4.5787787538255529e+00 + 2.0662660650428455e-01 2.4173664776818321e-01 -4.5224134189379068e+00 + -1.1696594690509818e-01 2.2521536082597723e-01 -4.4213786814415057e+00 + -2.9210458686851482e-01 -4.4036860453312565e-03 -4.5399977240943254e+00 + id 11814 + loc 4.3569347262382507e-01 3.4869366884231567e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8273353604607760e-01:4.3682279221844583e-01:6.5228144337853955e-02:3.8544498873500410e-01:7.6844400597345386e-01:3.4216401004421920e-01:1.1592658599823416e+00:3.9069903924344418e-01:2.0002942806801873e+00:2.8905921925803874e-01:2.6211876404171663e+00:4.8272870871071716e-01:3.0679015281868915e+00:4.0292891446161239e-01:3.7066194578510565e+00 + CVs 20 + -1.0819025561430816e-01 3.1050944592185648e-01 -1.9710371557061881e-01 + -2.5223728078394869e-01 5.9445889786270700e-01 -3.7060727069869315e-01 + -4.1702671113727957e-01 8.4956102552337653e-01 -5.3120593643424263e-01 + -5.8845756959435946e-01 1.0724836846325179e+00 -6.7813493056224150e-01 + -7.6670628305429311e-01 1.2716147500094956e+00 -8.0377329211160220e-01 + -9.6173328946497150e-01 1.4626047722772118e+00 -9.0511362216209623e-01 + -1.1836448581723782e+00 1.6555691073674579e+00 -9.9060262990374837e-01 + -1.4347420695414268e+00 1.8535977944764896e+00 -1.0757564894050518e+00 + -1.7164881686587317e+00 2.0620236596635246e+00 -1.1737882745364780e+00 + -2.0316657147283941e+00 2.2846584906548437e+00 -1.3023800016227594e+00 + -2.3663233926932614e+00 2.5163414994761721e+00 -1.4898207471264504e+00 + -2.6914552381339019e+00 2.7631134845656407e+00 -1.7759814406515602e+00 + -3.0226706990170609e+00 2.9984321867771841e+00 -2.2114756596114575e+00 + -3.4008686057976032e+00 3.0716555913351309e+00 -2.7583885216369666e+00 + -3.7923011730322114e+00 2.8941468593777566e+00 -3.2739754814659419e+00 + -4.1502691431311520e+00 2.5011937862572955e+00 -3.7888326286403555e+00 + -4.4589422650008768e+00 1.6924797869805457e+00 -4.4540763767212779e+00 + -4.6108008457734462e+00 3.2803858025623756e-01 -4.7048674550811134e+00 + -4.6448915050045620e+00 1.5370766628145560e-01 -4.4943105177383762e+00 + id 11815 + loc 4.2050588130950928e-01 1.0389082133769989e-01 1048 + blend 0.0000000000000000e+00 + interp 5.5398489343795110e-01:2.7923533483247359e-01:4.5585048627054037e-02:3.2752532943976498e-01:4.3853846703381949e-01:5.0140946963626820e-01:9.8134551888144572e-01:5.5397935358901673e-01:1.2915434132104051e+00:3.8390785420448659e-01:2.0895802711163758e+00:2.8073029056289039e-01:2.9843685550434236e+00:2.8744967073486555e-01:3.6266805944146601e+00 + CVs 20 + -2.3496746437906113e-01 4.7445102025937680e-01 -1.4456181739654994e-01 + -4.2991958157625348e-01 9.0773077565953297e-01 -3.1539976651592405e-01 + -5.6266653004572098e-01 1.2763173241049082e+00 -5.2935764875207125e-01 + -6.5074304853734388e-01 1.5712214526336623e+00 -7.9157497356497508e-01 + -7.3049200972448070e-01 1.7848473646132121e+00 -1.0983315758447005e+00 + -8.3290654176961043e-01 1.8966373419059979e+00 -1.4145828666573541e+00 + -9.6297087391235670e-01 1.9042770018826791e+00 -1.6946360731275005e+00 + -9.9736882005423011e-01 1.8665919662814825e+00 -1.9215671229411293e+00 + -1.0825180068747713e+00 1.7075640981981444e+00 -2.0658519168690068e+00 + -1.2281222814650190e+00 1.4382423195673493e+00 -2.1395222918512005e+00 + -1.3826895178424223e+00 1.0499495957637714e+00 -2.2210409451421933e+00 + -1.5654456702960964e+00 5.6002474025558113e-01 -2.3839052044502980e+00 + -1.8931833231054742e+00 3.4980255673296476e-02 -2.7081958472227963e+00 + -2.4524102549706175e+00 -2.7406261127102066e-01 -3.0783630349030005e+00 + -2.9986937833971674e+00 -2.8685636444167140e-01 -3.3070376639245000e+00 + -3.4669463399791565e+00 -1.5907928127989290e-01 -3.4631374952268401e+00 + -3.8669012860064660e+00 3.5789461970829328e-03 -3.6218032184625772e+00 + -4.2429504267144580e+00 1.0431883618102716e-01 -3.8378352949315260e+00 + -4.8245060210555719e+00 5.1866765169389872e-02 -4.1815174400315458e+00 + id 11816 + loc 5.3816783428192139e-01 9.7712808847427368e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9698154362903387e-01:3.9697757381359761e-01:5.3332157931221813e-03:2.7046792950781368e-01:7.3771024377331829e-01:2.6014287589261453e-01:1.9307357708089685e+00:3.7564127895901950e-01:2.9410299509807221e+00:2.6128364690700967e-01:3.1886462140956113e+00:3.7943866795206049e-01:3.8042169290782648e+00 + CVs 20 + 5.9217401066168684e-01 4.4972235230993185e-01 -2.3622776567290665e-01 + 1.1407397989064223e+00 9.3593400048136055e-01 -3.5773871920895772e-01 + 1.6272504923138404e+00 1.4676779238911728e+00 -3.6099303009222905e-01 + 2.0606255613712126e+00 1.9984763912996681e+00 -2.3106236058487262e-01 + 2.4474776825986919e+00 2.4478618761091293e+00 3.1379422505536381e-02 + 2.7832141782969839e+00 2.7444241689709012e+00 3.8025327333123871e-01 + 3.0565736449840584e+00 2.8613857088562531e+00 7.2950145435892688e-01 + 3.3245927484056779e+00 2.7956682677245137e+00 1.1496088101494366e+00 + 3.4463391527565213e+00 2.5603843639947264e+00 1.5798007670234988e+00 + 3.3961574620112689e+00 2.2907173666377734e+00 2.0101129694177233e+00 + 3.2092715537527843e+00 1.9592878991500795e+00 2.4886328462336782e+00 + 2.8646753859460445e+00 1.5547326005881072e+00 2.9427048995518592e+00 + 2.3566610455774577e+00 1.1182165774748833e+00 3.2797040569537437e+00 + 1.7124322550474771e+00 7.4644877411684196e-01 3.4179310630394402e+00 + 9.8338787279417972e-01 5.5472026504832972e-01 3.3300356940113098e+00 + 2.3780546840070199e-01 5.7793690942350839e-01 3.0431454325818463e+00 + -4.4738994178587699e-01 7.5034669949449806e-01 2.6177256344159345e+00 + -9.4377973682950900e-01 1.0500955718184879e+00 2.1200973728157275e+00 + -9.3566333695105308e-01 1.5477897538564327e+00 1.6244524157428106e+00 + id 11817 + loc 9.4919604063034058e-01 4.1154092550277710e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5344671521902202e-01:4.4395155411776543e-01:5.0070456727485935e-01:4.4292091709973536e-01:1.0005640435785028e+00:2.9424969306778520e-01:1.4023363140707297e+00:3.7457825869901890e-01:1.9211991495559562e+00:2.6790709503544446e-01:2.2938542926760888e+00:4.5344218075186987e-01:2.8757366540894562e+00:3.1113146620792032e-01:3.6738011260890433e+00 + CVs 20 + 2.8456619522958426e-01 3.1791314740662868e-01 -9.2179604687156316e-02 + 5.4824144691163479e-01 6.4032851367603683e-01 -2.1476819884152298e-01 + 8.0549515035222063e-01 9.7137137785739236e-01 -3.6534430201787155e-01 + 1.0875893722707910e+00 1.3106114686432699e+00 -5.1573085559839016e-01 + 1.4249529470501345e+00 1.6472637193069266e+00 -6.2387011113321389e-01 + 1.8287414105877426e+00 1.9599269810423143e+00 -6.5422621896631783e-01 + 2.2876107997283577e+00 2.2200417800985650e+00 -5.7637751490308597e-01 + 2.7655293244547963e+00 2.3897346291037178e+00 -3.5732763457730488e-01 + 3.1931488381065942e+00 2.4258109082101291e+00 1.1953058928762195e-02 + 3.5028837467387328e+00 2.3186735288789384e+00 4.7428405374758875e-01 + 3.6868932457472368e+00 2.0931881494321454e+00 9.4271756996091549e-01 + 3.7810853193644571e+00 1.7611801939209735e+00 1.3344401473937766e+00 + 3.8253044027708576e+00 1.3420099279245616e+00 1.5905604218991187e+00 + 3.8181928456425855e+00 8.9365802073482781e-01 1.7705623940281920e+00 + 3.7224402778145356e+00 4.7504384261839278e-01 2.0117675800134345e+00 + 3.5318921885391847e+00 1.8492483362936907e-01 2.3672262382588904e+00 + 3.3106215316607956e+00 1.3631094127553389e-01 2.7865166160191017e+00 + 3.1256407529169161e+00 3.0706584691180661e-01 3.1485921863374591e+00 + 2.9390295034544631e+00 2.6822029038316120e-01 3.4681408111582370e+00 + id 11818 + loc 4.9808913469314575e-01 1.9573166966438293e-01 1090 + blend 0.0000000000000000e+00 + interp 5.2206904288274691e-01:3.7402849143482370e-01:4.3747136177466683e-01:4.8610861372348790e-01:9.9476351275981123e-01:4.2433364924448064e-01:1.4403316352113114e+00:4.8614644601918000e-01:1.9895283764521228e+00:3.8091362469224882e-01:2.1987028275512146e+00:3.0945627926376418e-01:3.1223038990643639e+00:5.2206382219231806e-01:3.9902690058211832e+00 + CVs 20 + 3.1766604545838711e-01 4.6977146925764129e-01 -7.7388660429693640e-02 + 5.3495074970510414e-01 8.7130615569351433e-01 -9.7535784984530194e-02 + 7.0150948471110963e-01 1.2401057898099332e+00 -9.1348675964180948e-02 + 8.3741378423393809e-01 1.6015367905417404e+00 -6.3046495765457178e-02 + 9.3446126374968452e-01 1.9516922290283587e+00 -1.1637802455373158e-03 + 9.8422408840440934e-01 2.2864477853749037e+00 1.0382944391874682e-01 + 9.7419642588616573e-01 2.5992534016692055e+00 2.6133031656403061e-01 + 8.8651543395350452e-01 2.8709928194645173e+00 4.7419304603545054e-01 + 7.1227740342964818e-01 3.0679678433504138e+00 7.2264752438831770e-01 + 4.7166098920878008e-01 3.1667570756311942e+00 9.6573047913171428e-01 + 1.9763413482927272e-01 3.1744187124020078e+00 1.1783750189289557e+00 + -9.0901819056250832e-02 3.1060343222090641e+00 1.3642316264596999e+00 + -3.8606438174583901e-01 2.9658759920653455e+00 1.5354996385653759e+00 + -6.8228780201343153e-01 2.7456057097413140e+00 1.7022397543152299e+00 + -9.6863022483911299e-01 2.4219621367110427e+00 1.8783830797351848e+00 + -1.1930267757322905e+00 2.0022133551936623e+00 2.0571366907202520e+00 + -1.3132104900476551e+00 1.5391845345447139e+00 2.2024713683720289e+00 + -1.3302604557588622e+00 1.0599706390224113e+00 2.3062940398341736e+00 + -1.1935005832090009e+00 9.4415713599333362e-01 2.4520957468147189e+00 + id 11819 + loc 4.8248606920242310e-01 2.5887882709503174e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7752031197351597e-01:4.2992431502994150e-01:7.7165449598969316e-02:4.1154304077725845e-01:8.1801473428558480e-01:4.7751553677039626e-01:1.1285131459700974e+00:4.2782337947297588e-01:1.9520739056806973e+00:3.8018170381331834e-01:2.3883126932923382e+00:3.5517474940236282e-01:3.0104480620604166e+00:3.8403897248546109e-01:3.7815950473142532e+00 + CVs 20 + -1.6333909296832899e-01 3.4525248855719742e-01 -4.7713120640285170e-02 + -3.5509730263003214e-01 7.0231611988258302e-01 -1.0334126976769212e-01 + -5.6433854249602278e-01 1.0684007523360284e+00 -1.3108515189082320e-01 + -7.8992189936215285e-01 1.4338388768912698e+00 -1.1848587044577463e-01 + -1.0380880711418188e+00 1.7854610378213402e+00 -6.8194776069666729e-02 + -1.3190314519206172e+00 2.1065624795594577e+00 1.0226425116042659e-02 + -1.6444149259127094e+00 2.3784159917041778e+00 1.0024794737058595e-01 + -2.0228800112331125e+00 2.5819426752142070e+00 1.8066707744607063e-01 + -2.4555431266643652e+00 2.6918539797246530e+00 2.2806595440549671e-01 + -2.9190277873195529e+00 2.6830873941418778e+00 2.2528247647208749e-01 + -3.3704166094445847e+00 2.5656938513271261e+00 1.7125123251599317e-01 + -3.7850090237242551e+00 2.3865150257834018e+00 7.7001007804374577e-02 + -4.1536834262217903e+00 2.1960663243849416e+00 -3.1139904570447241e-02 + -4.4612335644287979e+00 2.0324521007265863e+00 -1.1076678218961566e-01 + -4.6904286218914928e+00 1.9221168117001008e+00 -1.3036977836690178e-01 + -4.8195038445947471e+00 1.8881087792711231e+00 -9.3381317528853702e-02 + -4.8383498268415721e+00 1.9242983366374016e+00 -4.4019025019682023e-02 + -4.8629719625744530e+00 1.9440815627437731e+00 -1.7104849718402537e-02 + -5.2116214342086469e+00 1.8172335963149515e+00 8.1026363647773270e-02 + id 11820 + loc 9.0474814176559448e-01 4.1154092550277710e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0730742896330983e-01:2.8639976743183065e-01:4.2668971698505742e-01:3.8262786020559814e-01:1.0948930600336664e+00:3.4837475268724793e-01:1.9070694790789327e+00:5.0730235588902017e-01:2.3380498965120098e+00:4.1433131232539355e-01:2.8977689299066380e+00:2.9351979473204476e-01:3.6570279831789256e+00 + CVs 20 + 1.2136861585515923e-01 3.1765817487498937e-01 -2.4124943450260700e-02 + 2.2189473452073460e-01 6.0920979087138305e-01 -4.4571944304636152e-02 + 3.2270040822270196e-01 8.9160741381738906e-01 -7.0805724530916547e-02 + 4.4025461126483306e-01 1.1734221673197638e+00 -1.0651060315940947e-01 + 5.9143671641724826e-01 1.4593979715490037e+00 -1.4131128013029026e-01 + 7.9332479625909846e-01 1.7458156603630326e+00 -1.5958169608269646e-01 + 1.0564968940521569e+00 2.0186470980576119e+00 -1.4341274563338169e-01 + 1.3807356154570234e+00 2.2571515948889043e+00 -7.6049989391340334e-02 + 1.7519459105840958e+00 2.4407426910923053e+00 5.9580510550040655e-02 + 2.1419691290735656e+00 2.5507478199325408e+00 2.7778027769751212e-01 + 2.5247372585613377e+00 2.5753308228670795e+00 5.7462743099932945e-01 + 2.8924646769842868e+00 2.5088930817220625e+00 9.2795195365592142e-01 + 3.2479174469677461e+00 2.3434080851167902e+00 1.3074534481499416e+00 + 3.5888332006130446e+00 2.0678624591438277e+00 1.6784589200130939e+00 + 3.9112415563826857e+00 1.6802311076380547e+00 2.0010014829709633e+00 + 4.2096905682820367e+00 1.2125703575187492e+00 2.2077314465464730e+00 + 4.4722622054364116e+00 7.4512177356569143e-01 2.2571445106162700e+00 + 4.7336583542295969e+00 3.4490447784553169e-01 2.1731183324480341e+00 + 5.0914144990527319e+00 8.5978529693267580e-02 1.9506537889038551e+00 + id 11821 + loc 9.9347311258316040e-01 2.7886429429054260e-01 1077 + blend 0.0000000000000000e+00 + interp 4.3883102865607199e-01:2.8218042797717602e-01:9.9039819794538575e-03:2.1449400814440520e-01:8.9179574313362764e-01:2.0232787691713139e-01:1.9907664616630742e+00:2.7637744045354123e-01:2.9350635582447895e+00:4.3882664034578545e-01:3.0889441282484671e+00 + CVs 20 + -1.1329411033904421e-01 2.2372117334518488e-01 1.3185899642033999e-01 + -1.9980159734976383e-01 4.7604096587595357e-01 2.8884894372765058e-01 + -2.7225257599614838e-01 7.3504960668041686e-01 4.4234412236553422e-01 + -3.3881235990199648e-01 9.8544303851114146e-01 5.8067548685547743e-01 + -4.0082188442145011e-01 1.2198483363279280e+00 7.1065260704070998e-01 + -4.5663495438610091e-01 1.4310581767754558e+00 8.3588415061745824e-01 + -4.9484897440281705e-01 1.6131150231765350e+00 9.5199188382260536e-01 + -5.0006923769974643e-01 1.7736662114520190e+00 1.0573106809694317e+00 + -5.0873726936092856e-01 1.9255561461089847e+00 1.1737373023049158e+00 + -6.0767797764674614e-01 2.0274168682368883e+00 1.3069684070097203e+00 + -8.0477607090341829e-01 2.0399036102141745e+00 1.4185561900480816e+00 + -1.0442307332996044e+00 1.9803126271116676e+00 1.4834518893230040e+00 + -1.2710398210217642e+00 1.8551458752481580e+00 1.5122465495682706e+00 + -1.4392236819273614e+00 1.6034240426577138e+00 1.5287906161716551e+00 + -1.5420981535118832e+00 1.1811265216047389e+00 1.5177538491740847e+00 + -1.6744271311500580e+00 6.2209481687771817e-01 1.4214532484399143e+00 + -1.9741570745997890e+00 3.0496198438871525e-02 1.2083492017184956e+00 + -2.4792981987001137e+00 -4.4189714428350002e-01 9.2809169017020232e-01 + -2.9457285920070095e+00 -7.8841374987172941e-01 6.8530286997520984e-01 + id 11822 + loc 8.9715236425399780e-01 1.6528950631618500e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6033038066964124e-01:3.6032677736583457e-01:5.2193306821030849e-01:3.1161624416676964e-01:1.0008849298091149e+00:2.0208327660250766e-01:1.5545970995682765e+00:2.5265647035976480e-01:2.7007427654334188e+00:2.9750022203905158e-01:3.2570536858842272e+00:3.1102998986814773e-01:3.9996622099244670e+00 + CVs 20 + 8.7265453696469444e-02 5.4553262919345713e-01 5.6277437019168275e-01 + 1.1013669723971647e-01 1.0880907652124647e+00 1.0585310945681887e+00 + 3.1591931162160525e-02 1.6295207160712761e+00 1.4857370860998866e+00 + -1.8177754518362355e-01 2.1698396710399153e+00 1.8502954398041522e+00 + -5.5044636786660894e-01 2.6803785485257334e+00 2.1405820771127999e+00 + -1.0666039633841193e+00 3.1109363824618264e+00 2.3517784649093998e+00 + -1.7007080073020540e+00 3.3987912146395334e+00 2.4778004563669680e+00 + -2.3959873378943870e+00 3.4954133722488931e+00 2.5214966045322607e+00 + -3.1010461307041219e+00 3.3625782026628892e+00 2.4998108912099477e+00 + -3.7595291980068355e+00 2.9774929410853117e+00 2.4095073059552288e+00 + -4.2746605945708858e+00 2.3797538014768942e+00 2.2087332083207922e+00 + -4.5492496962586486e+00 1.6901877947742279e+00 1.8678442404083320e+00 + -4.5713662595516009e+00 1.0492057964054355e+00 1.4193544563048084e+00 + -4.4035780690806847e+00 5.6412137971823928e-01 9.2531007072748350e-01 + -4.1374580361986313e+00 2.9341231014036045e-01 4.3053050898656553e-01 + -3.8657806878214305e+00 2.2122248895300289e-01 -4.1256666958202126e-02 + -3.6688859883296296e+00 2.0437196566041982e-01 -4.9808918277646280e-01 + -3.5109635107010542e+00 -6.9021864792380150e-03 -1.1267153481422145e+00 + -3.3822411286615641e+00 3.7064651813461091e-01 -1.2279005305466137e+00 + id 11823 + loc 8.0132418870925903e-01 9.2133820056915283e-01 416 + blend 0.0000000000000000e+00 + interp 6.6942243859944934e+00:2.9975344468498749e-01:5.1758303341194933e-01:5.9005148059166492e+00:9.2284620864871425e-01:6.6942143859944938e+00:9.5545889536100659e-01:6.5539710150153863e-01:2.8528440036420362e+00:1.0519252411812130e+00:2.9344741953844489e+00:4.2021272051374914e-01:2.9743195101238036e+00:5.2262442207783655e-01:3.8794332600887853e+00 + CVs 20 + 8.6725577776905016e-01 2.1765665366076181e-01 -1.3640566004181998e-01 + 1.4187465907153378e+00 2.5929039579388924e-01 -2.7395660754840490e-01 + 1.8992329972939641e+00 2.3232931367606113e-01 -3.9937684708839716e-01 + 2.4000337625681971e+00 1.7317879376494366e-01 -5.0424170923552580e-01 + 2.9036953037937572e+00 7.3600358683474032e-02 -5.7750729324589678e-01 + 3.3914487085480198e+00 -7.0998295865704497e-02 -6.0779510299046735e-01 + 3.8444509592895959e+00 -2.5906663136984653e-01 -5.8706981349096932e-01 + 4.2462752329624651e+00 -4.8311955552175878e-01 -5.1443193263879827e-01 + 4.5866555262385926e+00 -7.3138465991643264e-01 -3.9540615458419009e-01 + 4.8621172638791661e+00 -9.8942557287918664e-01 -2.3847863824866383e-01 + 5.0735411036029987e+00 -1.2406131661999440e+00 -5.1509504014293384e-02 + 5.2322846312032105e+00 -1.4740395884361730e+00 1.6124389229373715e-01 + 5.3682055353013887e+00 -1.7026885533171088e+00 3.9312565902612551e-01 + 5.5100634613298940e+00 -1.9559333767978719e+00 6.2415035993040013e-01 + 5.6663777541382228e+00 -2.2465516595568458e+00 8.3515345468443702e-01 + 5.8365500760321378e+00 -2.5758646467298152e+00 1.0157586978350448e+00 + 6.0149412761707115e+00 -2.9477616960914315e+00 1.1507774263413699e+00 + 6.1873765195486401e+00 -3.3582036487939506e+00 1.2188885927274633e+00 + 6.3231875995348696e+00 -3.7542222294683816e+00 1.2124106345728145e+00 + id 11824 + loc 8.2203459739685059e-01 4.5615318417549133e-01 410 + blend 0.0000000000000000e+00 + interp 3.6604229282659023e-01:2.6267468426037915e-01:8.9640261634605034e-01:3.1430643333263614e-01:1.9801934250024031e+00:3.6603863240366197e-01:2.4410154559144988e+00:2.7076987405761810e-01:3.0174557389029650e+00:2.7831277915758756e-01:3.9859597591595373e+00 + CVs 20 + -4.2453602448680566e-01 2.7230858565006566e-01 1.6228572261851187e-01 + -7.7435294484237760e-01 4.9290183139986343e-01 3.2872555900033523e-01 + -1.1110850553636284e+00 6.9362718348188368e-01 4.9804914541799450e-01 + -1.4488836834894701e+00 8.7189245704858342e-01 6.7264618004503129e-01 + -1.7703562923725085e+00 1.0073269817306816e+00 8.5448283144262327e-01 + -2.0627202748792492e+00 1.0887643845621329e+00 1.0440799022058036e+00 + -2.3232191036350520e+00 1.1158940598654514e+00 1.2485749763161667e+00 + -2.5531827000575960e+00 1.0900415183131502e+00 1.4818249652915643e+00 + -2.7572576199535259e+00 1.0103259223120356e+00 1.7440175163667520e+00 + -2.9442837700964306e+00 8.7701735509256529e-01 2.0131080636369578e+00 + -3.1231684502665518e+00 6.6799216621385682e-01 2.2501787027263096e+00 + -3.2988350046343768e+00 3.2226312065606266e-01 2.4007056792910086e+00 + -3.4768063225634660e+00 -1.9927589603085072e-01 2.4549779686918449e+00 + -3.6718571323803149e+00 -8.8557501889050427e-01 2.4937644796780347e+00 + -3.8982848796599816e+00 -1.6784314359890136e+00 2.6270934375294774e+00 + -4.1555003809011577e+00 -2.4680733688837639e+00 2.9045591925701073e+00 + -4.4346976043832473e+00 -3.1587560194554154e+00 3.2759275817193658e+00 + -4.7371716819328986e+00 -3.7311088078135390e+00 3.6671633615901205e+00 + -5.0493149264948922e+00 -4.1826659929727965e+00 4.0226072653476654e+00 + id 11825 + loc 8.3889722824096680e-01 7.3244673013687134e-01 1053 + blend 0.0000000000000000e+00 + interp 4.0110810810478476e-01:4.0110409702370370e-01:1.0849378601829474e-01:3.5786996069132410e-01:7.8765939691294162e-01:3.7934069723277508e-01:1.3450250104287418e+00:3.4641438875158576e-01:2.1075187168387117e+00:3.1634586809264886e-01:2.9704039737962429e+00:3.4366103610289628e-01:3.7393970467510749e+00 + CVs 20 + -3.9247389379249709e-03 3.8596485030665256e-01 2.5010870842500910e-01 + -7.7164761366276313e-02 7.5324434121401929e-01 5.0713449439995550e-01 + -1.9328880242378976e-01 1.1168842601912703e+00 7.7287319755165429e-01 + -3.5055271665100096e-01 1.4774769316871685e+00 1.0425112793286826e+00 + -5.5810801357622075e-01 1.8189529650026346e+00 1.3068347035577859e+00 + -8.1880042377281115e-01 2.1100804378403790e+00 1.5604741343122288e+00 + -1.1406591527323402e+00 2.2915579669396333e+00 1.7942435439615476e+00 + -1.5199103595008765e+00 2.2670078503885556e+00 1.9700515611845661e+00 + -1.8647700689506030e+00 1.9919265750290154e+00 2.0262983574182831e+00 + -2.0856956318439690e+00 1.5768253964223820e+00 1.9687180770471695e+00 + -2.1968356405576923e+00 1.1006408974244373e+00 1.8402238673551934e+00 + -2.1866123939314366e+00 5.7303630284400564e-01 1.6514917883698650e+00 + -2.0226637233856160e+00 3.8491661315754988e-02 1.3821721623091743e+00 + -1.7762537134026299e+00 -4.2938030650959769e-01 9.7481143690348926e-01 + -1.5836506019654553e+00 -7.6759848297137601e-01 3.5364299008597377e-01 + -1.5154449273406851e+00 -8.4071480584382430e-01 -4.7898685230986882e-01 + -1.5837398818923458e+00 -4.9629024769703745e-01 -1.3524833216338743e+00 + -1.7604981003751772e+00 1.4967173875236162e-01 -1.9983943116893745e+00 + -1.8685663521296842e+00 3.2862101675429600e-01 -2.4765669409643225e+00 + id 11826 + loc 2.3734554648399353e-01 1.5455850958824158e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6293806222163697e-01:3.8977281109778089e-01:4.0059738864391070e-02:3.0773529663570814e-01:7.7554409106810507e-01:4.4972525434350080e-01:1.1355365768913319e+00:3.6985793521506533e-01:1.8023956223025235e+00:4.6293343284101479e-01:2.1426234956963706e+00:4.5047933550918401e-01:2.7362647772998989e+00:3.4000434509385069e-01:3.0018260242675243e+00:2.8165590434543414e-01:3.5308277382841640e+00 + CVs 20 + -1.6861861070543493e-01 3.3820593947070876e-01 -6.3104028470488960e-02 + -3.4438881407705602e-01 7.0646136085219713e-01 -7.8638693301349205e-02 + -5.2576874337259971e-01 1.0913630330426569e+00 -6.3194074173958226e-02 + -7.3570090047849468e-01 1.4832957839696526e+00 -3.8945437509805170e-02 + -1.0027585817714280e+00 1.8706225516981432e+00 -3.0573078231879602e-02 + -1.3403212409532665e+00 2.2320083604806378e+00 -6.4905498797413586e-02 + -1.7430098971490799e+00 2.5337338268855101e+00 -1.8078755494824605e-01 + -2.1752248869267974e+00 2.7182530608246775e+00 -4.4149368058219540e-01 + -2.5460484562053303e+00 2.7114103683124702e+00 -8.7082706214146244e-01 + -2.8001174433321148e+00 2.5228653658845555e+00 -1.3484372314061690e+00 + -2.9917039393773637e+00 2.2004909631376908e+00 -1.7716262649518055e+00 + -3.1534929755645136e+00 1.7486819796049984e+00 -2.0674510654856992e+00 + -3.2833347290124784e+00 1.2346046798841381e+00 -2.1741064065734843e+00 + -3.3573600148835006e+00 7.5589525984749995e-01 -2.1913567978337753e+00 + -3.3537768492729674e+00 3.1964543709881754e-01 -2.2761060349104025e+00 + -3.2893652647643234e+00 -4.7781017042340057e-02 -2.4781309193940184e+00 + -3.2159794483649091e+00 -2.9267123322287869e-01 -2.7547361831264245e+00 + -3.1633099153969586e+00 -4.4230949510643058e-01 -2.9991350996427557e+00 + -3.1421915525917057e+00 -5.5016752339647645e-01 -3.0886519518069990e+00 + id 11827 + loc 2.4628339707851410e-01 5.5571579933166504e-01 1054 + blend 0.0000000000000000e+00 + interp 5.2293322644749141e-01:4.7368211261839493e-01:2.6160865830035651e-01:5.2292799711522697e-01:8.7363172740306327e-01:3.5576563956657875e-01:1.5022727673269083e+00:4.7342969007106911e-01:1.9998491709193975e+00:3.8900583054648374e-01:2.2784450370246523e+00:2.9647744525416192e-01:2.9533483908129430e+00:3.1516023297402967e-01:3.4884045964218373e+00 + CVs 20 + 2.2407481033176224e-01 3.7847603799775126e-01 4.1926005312378195e-02 + 4.2973649453382662e-01 7.4378100265854108e-01 1.0969841096397059e-01 + 5.9816708277941710e-01 1.1170186684012262e+00 2.1839803963706778e-01 + 7.5715045978266393e-01 1.4963789960649210e+00 3.7132867281343918e-01 + 9.7923860038898725e-01 1.8366009726525441e+00 5.4761076564112254e-01 + 1.3083109052698005e+00 2.0755271369540829e+00 7.0790955387252530e-01 + 1.7176787917252243e+00 2.1680249148125350e+00 8.1390159974049114e-01 + 2.1512710356042426e+00 2.0988112819896103e+00 8.5032634746346047e-01 + 2.5631153067354076e+00 1.8765482664935971e+00 8.4139757364662304e-01 + 2.9303903010713364e+00 1.5262940798710978e+00 8.4360555323347175e-01 + 3.2630799100345000e+00 1.1140824795296123e+00 9.3055034237870149e-01 + 3.5905556097777493e+00 7.6684560189010131e-01 1.1188209315515250e+00 + 3.9184545871484326e+00 6.1091594412448691e-01 1.2822063248344460e+00 + 4.1808811680016857e+00 6.4003257218813103e-01 1.3046126748054552e+00 + 4.4251586458034637e+00 7.4977104957215701e-01 1.2497764030380698e+00 + 4.7817652979568575e+00 9.0238948346363157e-01 1.1548481179325427e+00 + 5.3648750331686017e+00 9.9994642686159885e-01 1.0529970458088351e+00 + 6.0958447866516705e+00 8.6510255656624246e-01 1.0693882617592243e+00 + 6.5059093021490844e+00 8.0453481537465299e-01 1.1307125399647682e+00 + id 11828 + loc 7.8195232152938843e-01 4.9738806486129761e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3422307788785069e-01:2.8535175425248627e-01:2.4536202839914112e-01:2.9528735554870417e-01:1.0635613791687639e+00:2.7982954118019898e-01:2.2394327178863800e+00:4.3421873565707186e-01:2.8254778781021512e+00:3.1155590026222391e-01:3.5690239901799785e+00 + CVs 20 + 2.4194379315466116e-01 3.4292594687129307e-01 -1.3806224419728030e-01 + 4.7125110772078682e-01 6.5602809737207324e-01 -2.4427633036667135e-01 + 6.9044814949498612e-01 9.4428691018173061e-01 -3.3845857310483496e-01 + 9.0011275612923836e-01 1.1974274034668928e+00 -4.2249618619383245e-01 + 1.1011084365712251e+00 1.4042180736837819e+00 -4.9174175251058466e-01 + 1.2933141669345192e+00 1.5646220583153707e+00 -5.5294433665797227e-01 + 1.4769297369549153e+00 1.6880291120803350e+00 -6.2553969362881978e-01 + 1.6621588894964121e+00 1.7968375504672087e+00 -7.3439935892298869e-01 + 1.8838810617881552e+00 1.9188120592866389e+00 -8.6718187800596291e-01 + 2.1623390386315697e+00 2.0440708745755232e+00 -9.4487590118476561e-01 + 2.4509670642943293e+00 2.1546320935604450e+00 -9.1640758506913989e-01 + 2.6903030452262575e+00 2.2836951739104974e+00 -7.8965195022024459e-01 + 2.8786572250260338e+00 2.4150626479302990e+00 -5.7607112894410828e-01 + 3.0877761069550731e+00 2.3717094233934168e+00 -3.5626214568052128e-01 + 3.3503400937067953e+00 2.0210399671028032e+00 -2.3983061866570821e-01 + 3.5773127879217022e+00 1.3826857513613118e+00 -1.6259314214265064e-01 + 3.6526237992527824e+00 5.8088226458568237e-01 3.9464681947127378e-02 + 3.5757565513541634e+00 -1.3140076106699272e-01 4.7038872272262972e-01 + 3.5167307836009356e+00 -3.0905704350512941e-01 8.9977424381341553e-01 + id 11829 + loc 9.9842399358749390e-01 9.9019140005111694e-01 1074 + blend 0.0000000000000000e+00 + interp 5.4750552195584257e-01:2.6707265180877560e-01:8.6070647296117608e-01:8.2797707966089221e-02:1.1942821815913895e+00:3.4942025086393919e-01:2.0373161427428719e+00:5.4750004690062304e-01:2.4303942869905604e+00:4.9907736813313169e-01:3.3013348434787000e+00:3.9700244458477768e-01:3.9802599352211860e+00 + CVs 20 + -1.9318352228463006e-02 3.0501326046693983e-01 -6.1644733960145082e-02 + -2.5613240987655800e-02 6.2539026413905141e-01 -1.3931038461230646e-01 + -1.9659622183484306e-02 9.6409864183162441e-01 -2.1369032042868391e-01 + 3.4811940311182928e-03 1.3352009228133772e+00 -2.8095151833905679e-01 + 4.6280693981624751e-02 1.7439246934502359e+00 -3.5779988165405707e-01 + 1.0549103857577355e-01 2.1891197687587187e+00 -4.6861079556751517e-01 + 1.7472801628085508e-01 2.6699328656146761e+00 -6.4401683464705917e-01 + 2.4383855291479969e-01 3.1747529519863944e+00 -9.2701278606522486e-01 + 2.9983904292319513e-01 3.6474536770103652e+00 -1.3542298255962018e+00 + 3.4794468822235725e-01 4.0144789188702985e+00 -1.9098647807343632e+00 + 4.3062656655583315e-01 4.2576846048685617e+00 -2.5501253069227561e+00 + 6.0281446831207142e-01 4.3842761543293660e+00 -3.2551554851104330e+00 + 8.8579687461858758e-01 4.3579125380627426e+00 -4.0028834725539149e+00 + 1.2583546938700085e+00 4.1272268281979061e+00 -4.7245723375234743e+00 + 1.6892621666387826e+00 3.7042477441953476e+00 -5.3278722471351765e+00 + 2.1174184225644637e+00 3.1573546167978863e+00 -5.7800484478508842e+00 + 2.4291803209993432e+00 2.5463972731838842e+00 -6.1627128276389902e+00 + 2.5637860476314427e+00 1.9076361908090484e+00 -6.5743738531057954e+00 + 2.7238434713720601e+00 1.2208617726543638e+00 -6.9892890994371548e+00 + id 11830 + loc 7.4533593654632568e-01 4.9738806486129761e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4669000978477919e-01:2.5234625389285242e-01:2.3635872759681331e-01:2.7811993111567146e-01:1.0744322944102809e+00:4.4668554288468137e-01:1.9903128000593069e+00:3.8958576958275704e-01:2.8532220480959207e+00:2.9527090976273501e-01:3.5584062948375257e+00 + CVs 20 + 2.9851229248850480e-01 3.5741694494448056e-01 -2.3267271069103912e-01 + 6.0692720193236205e-01 6.6927854817625576e-01 -3.9552845920783131e-01 + 9.3100445875477267e-01 9.3211387421002445e-01 -5.0147042673029452e-01 + 1.2683468065370445e+00 1.1371092181280864e+00 -5.4567849461865392e-01 + 1.6018534703206784e+00 1.2696398895973577e+00 -5.2266623981438842e-01 + 1.9067063434383611e+00 1.3230810495813905e+00 -4.3926401522440972e-01 + 2.1580237932219983e+00 1.3023373566966079e+00 -3.1279759520900496e-01 + 2.3389797230894884e+00 1.2234438716144804e+00 -1.6645125840556446e-01 + 2.4428533766706284e+00 1.1085953724773769e+00 -2.5316573850558466e-02 + 2.4763485677330124e+00 9.8212596653990036e-01 9.2316633275748516e-02 + 2.4549772177317895e+00 8.6364226034525193e-01 1.8354167210412814e-01 + 2.3920053104623884e+00 7.6730328574346063e-01 2.5446378508669232e-01 + 2.2983436442855858e+00 7.0303811674897543e-01 3.1761393328064547e-01 + 2.1877214665568694e+00 6.6236954236549828e-01 3.9939753483548063e-01 + 2.0744620525065272e+00 6.0718059222543430e-01 5.2906795856621414e-01 + 1.9855640661403828e+00 4.4496060873644305e-01 6.8875821241819146e-01 + 1.9582063433629568e+00 7.4708489964379510e-02 7.6225824984979940e-01 + 2.0314703853095493e+00 -4.4373031650034955e-01 6.3575707046617824e-01 + 2.0888848057688247e+00 -6.0520078499993102e-01 4.3024139119431604e-01 + id 11831 + loc 7.3546230792999268e-01 1.9585900008678436e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4542217445170779e-01:3.4366573856770727e-01:4.8334203335807846e-01:2.8395975697548242e-01:1.0512671830045681e+00:3.8918359058686935e-01:1.7392897132745109e+00:2.7057432707838364e-01:2.0745835287796655e+00:4.4541772022996329e-01:2.9266687308088399e+00:2.4421160956806826e-01:3.8416363628325092e+00 + CVs 20 + -2.4290589849243510e-02 2.9833118468920394e-01 2.6745684281211890e-01 + -2.1911570509338008e-02 5.9862196415980851e-01 5.0592413720332441e-01 + -1.0469848377367530e-02 8.8555197946816877e-01 7.5095528861255190e-01 + -6.3503136980095909e-03 1.1482746749280635e+00 1.0262655752874783e+00 + -2.4011045705220280e-02 1.3781164031260240e+00 1.3433824849131728e+00 + -7.6654107027902874e-02 1.5628790141497406e+00 1.7056215136121078e+00 + -1.7515227937285494e-01 1.6877895846664184e+00 2.1062479327491936e+00 + -3.2616528403083411e-01 1.7373485670529982e+00 2.5293671834637048e+00 + -5.2576791646535770e-01 1.6978471027226991e+00 2.9505442296527922e+00 + -7.5297050960125067e-01 1.5651008786024501e+00 3.3427019695106019e+00 + -9.7319356901981569e-01 1.3490254791541856e+00 3.6907356061726966e+00 + -1.1516031403347793e+00 1.0673349250403485e+00 3.9889571039709728e+00 + -1.2615617821540723e+00 7.4228828594045249e-01 4.2261860632032304e+00 + -1.2834172815375580e+00 4.0729638488177988e-01 4.3904431665111758e+00 + -1.2066532260034730e+00 1.1829298222282958e-01 4.4706144960391718e+00 + -1.0500446921895281e+00 -7.8154588228623423e-02 4.4763572891737011e+00 + -8.4802674211787843e-01 -2.1446431488124151e-01 4.4787900268416667e+00 + -5.9145858958204334e-01 -3.4305094575006445e-01 4.5724972881074333e+00 + -2.6605426782016728e-01 -6.6920582550040719e-01 4.8306782201460763e+00 + id 11832 + loc 4.9343892931938171e-01 2.4663029238581657e-02 1090 + blend 0.0000000000000000e+00 + interp 4.8611347485823647e-01:2.5733707169160230e-01:4.3063406317872910e-01:4.1311250994695098e-01:9.9619114628926531e-01:2.6716755110000273e-01:1.6225349690521944e+00:3.5811953809219998e-01:2.1903403485542059e+00:4.8610861372348790e-01:2.9886653571467301e+00:3.4136113606273044e-01:3.4825262960717938e+00 + CVs 20 + 3.4870246549527834e-01 4.8851957620152808e-01 -6.1502117614793406e-03 + 6.2309213843484801e-01 9.4207082667465503e-01 5.7028401685874308e-02 + 8.6650324643936139e-01 1.3891456223729177e+00 1.6738014189279005e-01 + 1.0784062057521260e+00 1.8479255409512834e+00 3.4073309232943538e-01 + 1.2240366323921716e+00 2.3024448745479402e+00 6.0216818008444317e-01 + 1.2583455370887970e+00 2.7212771057649565e+00 9.7214770662408156e-01 + 1.1300829750787345e+00 3.0471212980653624e+00 1.4506706059620724e+00 + 8.1331778701773982e-01 3.2013790121586263e+00 1.9879201762070220e+00 + 3.6344663203075966e-01 3.1303689955270331e+00 2.4916855468918517e+00 + -8.2528415371475483e-02 2.8678902124197161e+00 2.9053172636779983e+00 + -4.2714886052421808e-01 2.4933630785043479e+00 3.2494427416524565e+00 + -6.4641004234208310e-01 2.0523175676366470e+00 3.5543700327568475e+00 + -7.2518704296258818e-01 1.5740451770595527e+00 3.8313043413154939e+00 + -6.3323724228818656e-01 1.1029973532918425e+00 4.0848977199617531e+00 + -3.6046257666406539e-01 7.1384765536409323e-01 4.3085765319970726e+00 + -3.3375404464438541e-03 5.2221136198361828e-01 4.5007774243714840e+00 + 2.8238641370642448e-01 5.9921203100230325e-01 4.6678235472921559e+00 + 4.0108970419579260e-01 8.3174409543267558e-01 4.7713865994504649e+00 + 5.1277127026062042e-01 6.6703497799105937e-01 4.8597980249560262e+00 + id 11833 + loc 5.9761238098144531e-01 9.5491558313369751e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1685978356263653e-01:3.1576989462895860e-01:6.0626366854074654e-01:3.2141899922108508e-01:1.5579521628044644e+00:4.0038459839406232e-01:2.3877190702649149e+00:3.9466829957009431e-01:3.0122177579075520e+00:4.1685561496480095e-01:3.8616495348533793e+00 + CVs 20 + 2.0303241606030223e-01 3.5156601852160213e-01 -3.3658561834874801e-01 + 4.0564072220071651e-01 7.0519248468947682e-01 -6.6185125125393995e-01 + 6.1956202348870104e-01 1.0391915722128220e+00 -9.7172749271194570e-01 + 8.4707787698289894e-01 1.3322149563824288e+00 -1.2692505550700421e+00 + 1.0832279893961525e+00 1.5653187910954984e+00 -1.5568165124072499e+00 + 1.3184662310053294e+00 1.7225940378687727e+00 -1.8293887594841243e+00 + 1.5426751456620895e+00 1.8014972394377817e+00 -2.0758094041836626e+00 + 1.7526689204057189e+00 1.8191882036285458e+00 -2.2897599898247458e+00 + 1.9570186868849790e+00 1.8020900145573939e+00 -2.4792634762253734e+00 + 2.1736009366835414e+00 1.7692085303722098e+00 -2.6633602334274031e+00 + 2.4213864598103449e+00 1.7264253333315194e+00 -2.8594070471122270e+00 + 2.7129827850883799e+00 1.6733214687472109e+00 -3.0765824771320505e+00 + 3.0476476411935316e+00 1.6105670842355697e+00 -3.3151580627994139e+00 + 3.4154258411397374e+00 1.5333895812991369e+00 -3.5773019831781587e+00 + 3.8047413539850785e+00 1.4166378600326341e+00 -3.8847470546076117e+00 + 4.1817483042990045e+00 1.2323826888920801e+00 -4.2726226756490933e+00 + 4.4816927853437738e+00 9.9568195207738408e-01 -4.7622674321523668e+00 + 4.6524514752855879e+00 7.7201116059758257e-01 -5.3323098935454531e+00 + 4.7629710414927819e+00 6.4799270445923263e-01 -5.7743180248391681e+00 + id 11834 + loc 1.5625925734639168e-03 1.4706868678331375e-02 410 + blend 0.0000000000000000e+00 + interp 4.9969340271861773e-01:1.5066349323234637e-01:6.8494564468596453e-01:2.2189547141116020e-01:1.4844406767921579e+00:4.1798746745907500e-01:1.9620336569503467e+00:4.9968840578459056e-01:2.3893816987270671e+00:2.5536860410779760e-01:2.9986731144186667e+00:2.6813652504073421e-01:3.9428441962976613e+00 + CVs 20 + -4.1678696680904334e-02 9.3823636260577117e-02 -2.1636337910573517e-01 + -7.1584721738853427e-02 1.7135058870250136e-01 -4.3585022468895657e-01 + -8.1248631633420637e-02 2.3582295241394011e-01 -6.5735911877852238e-01 + -6.8112290941132719e-02 2.8602209039954485e-01 -8.7926624042601054e-01 + -3.2523001656203976e-02 3.1822561321182968e-01 -1.0972476379698679e+00 + 2.4362401288944402e-02 3.3055852304283451e-01 -1.3063096956043085e+00 + 9.9885699621525381e-02 3.2420409829657232e-01 -1.5032385101802723e+00 + 1.8964465601317787e-01 3.0361051227416336e-01 -1.6891536552872597e+00 + 2.9010974204277717e-01 2.7493107402263361e-01 -1.8672557513334707e+00 + 4.0100592673169116e-01 2.4496995934621069e-01 -2.0402187874144175e+00 + 5.2026856540046951e-01 2.1796833646121072e-01 -2.2090537696193300e+00 + 6.2307733537599375e-01 1.8702656492990921e-01 -2.3715136484399886e+00 + 6.5398388789357298e-01 1.3502817136554612e-01 -2.5171284786255779e+00 + 5.7468161157751152e-01 5.5616923780439809e-02 -2.6115862864242847e+00 + 4.3095136681552698e-01 -2.6739467331299727e-02 -2.6340612221667143e+00 + 2.8480251937245971e-01 -8.9122519313811432e-02 -2.6199122827566645e+00 + 1.4363623584439367e-01 -1.3007022664087364e-01 -2.5856104718398796e+00 + 6.5609171004356037e-03 -1.5126555742015979e-01 -2.5257755709062044e+00 + -1.2960439739862423e-01 -1.9278714831040666e-01 -2.6780286365994312e+00 + id 11835 + loc 8.9505028724670410e-01 4.0105339884757996e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3261288358950922e-01:4.0471000844339799e-01:7.1240534362770846e-01:3.7960661505733934e-01:1.1313200904202114e+00:4.3260855746067334e-01:1.9944864933548518e+00:2.9080172356647749e-01:2.1886235652458232e+00:3.9901428556345619e-01:2.7958204081967817e+00:3.8411560824808749e-01:3.2506476154720660e+00:4.1945930932864672e-01:3.9991001848224608e+00 + CVs 20 + -2.0217306694225629e-01 3.1129867057137334e-01 1.2163968166762722e-01 + -3.8642551407773507e-01 6.3438589463038408e-01 2.7015994945400712e-01 + -5.5701558320077194e-01 9.7790746897949676e-01 4.2676414835530030e-01 + -7.0802092815217277e-01 1.3479737356167187e+00 5.6663964800557187e-01 + -8.2116820744099273e-01 1.7269515326879445e+00 6.5711456371974308e-01 + -8.9096045205491814e-01 2.0690944617464728e+00 6.9032934142747537e-01 + -9.3398899701066462e-01 2.3540449025467796e+00 7.0885165857441601e-01 + -9.7762162767036354e-01 2.5930338235476071e+00 7.8475455228120627e-01 + -1.0459318862391118e+00 2.7678658994204675e+00 9.4527012357893647e-01 + -1.1617734659844812e+00 2.8478929189076716e+00 1.1606423410697120e+00 + -1.3468853117296340e+00 2.8285367514360096e+00 1.3792472137708862e+00 + -1.6134360098459262e+00 2.7367675504511833e+00 1.5557367985024237e+00 + -1.9580036967093426e+00 2.5976799461241633e+00 1.6726364969925107e+00 + -2.3593697663433115e+00 2.4087717525732177e+00 1.7328052910682401e+00 + -2.7770867837627184e+00 2.1293326646755961e+00 1.7317529931486833e+00 + -3.1348766244848072e+00 1.7255562606314052e+00 1.6434049796887293e+00 + -3.3242615589352420e+00 1.2355714490225398e+00 1.4029684992680773e+00 + -3.2446276616396896e+00 8.0985466165180098e-01 9.7955371217125942e-01 + -3.1645500012611647e+00 4.4940200208130299e-01 6.5576246049201747e-01 + id 11836 + loc 9.1933083534240723e-01 7.3748126626014709e-02 1053 + blend 0.0000000000000000e+00 + interp 7.0205389698025922e-01:3.8188229821757314e-01:3.6898555421099877e-02:7.0204687644128949e-01:9.3609257410407676e-01:5.2212935848813802e-01:1.4298499426644304e+00:4.8435095170634035e-01:1.9821823047172100e+00:5.6848056831893390e-01:2.8099165893990419e+00:5.3963440839801236e-01:2.9960253764430265e+00:3.6818646379944375e-01:3.5809475417306125e+00 + CVs 20 + 2.1719487577854266e-01 3.7733967214016506e-01 -1.4610762506846192e-01 + 4.4184160689194796e-01 7.3912330769319035e-01 -2.4400292085887915e-01 + 6.8275936613585753e-01 1.0711469472526671e+00 -2.8238123377515956e-01 + 9.4429289857339183e-01 1.3598818123941254e+00 -2.5931688651015966e-01 + 1.2320490235114527e+00 1.5958962096349882e+00 -1.8064651778655005e-01 + 1.5465336256035651e+00 1.7708708222399401e+00 -6.5864431239268328e-02 + 1.8722608477386207e+00 1.8762501859851834e+00 5.8428004241943832e-02 + 2.1854725675799247e+00 1.9100385613950155e+00 1.7350421713709829e-01 + 2.4672233119127034e+00 1.8809310028613540e+00 2.7352959816425171e-01 + 2.7052473302924813e+00 1.8091692649333919e+00 3.5923907120950860e-01 + 2.8981997209547745e+00 1.7163958417547354e+00 4.3291579874772851e-01 + 3.0534473069627017e+00 1.6018068189870363e+00 5.0150910141499438e-01 + 3.1639221816633047e+00 1.4624770778931233e+00 5.6587564890969966e-01 + 3.2080570128728905e+00 1.3149350924289169e+00 6.0366361063127971e-01 + 3.1734502619700078e+00 1.1768056972227030e+00 5.8421468888239469e-01 + 3.0854916508708841e+00 1.0470253653831916e+00 4.8224032526959920e-01 + 2.9719668348135646e+00 8.7790236311019332e-01 3.1270746722471732e-01 + 2.8386380921687171e+00 6.8405016103563665e-01 2.5402788391880704e-01 + 2.7430614664208579e+00 7.8812543669845170e-01 6.0433993645234740e-01 + id 11837 + loc 8.3352190256118774e-01 8.2343971729278564e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3912035531182148e-01:3.7469514646514857e-01:7.2554902700575741e-02:3.7075790381822743e-01:8.9995716089823752e-01:3.9956303400153353e-01:1.3192078037903654e+00:3.8059733070507185e-01:2.1445153604626870e+00:4.3911596410826836e-01:2.8673040454516077e+00:3.3377082804604025e-01:3.2973897450961580e+00 + CVs 20 + 1.9158622815462173e-01 2.2126744290547182e-01 -2.9988621556654360e-01 + 3.7934023783556070e-01 4.3410997941552842e-01 -5.5174192154662571e-01 + 5.6737178948033640e-01 6.3777378709904187e-01 -7.8589876297120542e-01 + 7.5623939728963485e-01 8.3279544855615217e-01 -1.0179141163199943e+00 + 9.4433126209853646e-01 1.0193644080279325e+00 -1.2526006922045778e+00 + 1.1299423284265115e+00 1.1974404570663997e+00 -1.4950149340742276e+00 + 1.3078118738157185e+00 1.3679264106533824e+00 -1.7491106991026801e+00 + 1.4711846845379752e+00 1.5306066780959804e+00 -2.0156596815499763e+00 + 1.6189036869659805e+00 1.6814436202326684e+00 -2.2938808097692966e+00 + 1.7559362015928912e+00 1.8134812861404415e+00 -2.5844383885916908e+00 + 1.8877407249641989e+00 1.9155610615874252e+00 -2.8883752917803305e+00 + 2.0196708625667559e+00 1.9707642893534167e+00 -3.2047311464591095e+00 + 2.1548563064444739e+00 1.9631486246422796e+00 -3.5258583764518154e+00 + 2.2883968788262155e+00 1.8843343220057878e+00 -3.8337394671398561e+00 + 2.4177728056490047e+00 1.7363453094506780e+00 -4.1111035861501248e+00 + 2.5601377494961248e+00 1.5218547948143364e+00 -4.3610492284267774e+00 + 2.7353545860387136e+00 1.2271705409319209e+00 -4.5993826778569220e+00 + 2.9013720842824418e+00 8.5136816423199169e-01 -4.8206409495061937e+00 + 2.8347723187194607e+00 5.2338870871273580e-01 -4.8613054911268181e+00 + id 11838 + loc 2.5073707103729248e-01 4.9137151241302490e-01 1085 + blend 0.0000000000000000e+00 + interp 5.1292494872135208e-01:3.2907449464351268e-01:5.1985483323004522e-01:4.4284330293931867e-01:9.9268061063178392e-01:4.6562519333957531e-01:1.2854599795999015e+00:4.2392338894825626e-01:1.8805275276327200e+00:2.9946470765870098e-01:2.0618368182747120e+00:5.1291981947186494e-01:2.8486187975827524e+00:3.7226370871863995e-01:3.1840838173505626e+00:4.4910478937791026e-01:3.9870221422308241e+00 + CVs 20 + 5.0879754555161505e-01 4.6781481758852200e-01 1.3984500661852567e-01 + 9.1328231493844081e-01 8.8941470962261127e-01 3.2078911192934800e-01 + 1.2682058223514094e+00 1.2866128471527907e+00 5.4986152780871977e-01 + 1.5826444434903344e+00 1.6802595822385087e+00 8.5789802488071443e-01 + 1.8293135453494260e+00 2.0561070426164143e+00 1.2598877507908111e+00 + 1.9783800664104798e+00 2.3912112446180434e+00 1.7617624240263077e+00 + 1.9992371655285499e+00 2.6529252784545601e+00 2.3545865285917187e+00 + 1.8712557645601116e+00 2.8018474228480823e+00 3.0049511778724289e+00 + 1.6056128054111323e+00 2.8014539179706848e+00 3.6548524251492376e+00 + 1.2745207339720648e+00 2.6440087270661454e+00 4.2358925050321208e+00 + 9.7571955192480386e-01 2.3682533055482584e+00 4.7180191801016642e+00 + 7.6150037422730166e-01 2.0205441332867977e+00 5.1169244669989009e+00 + 6.5381797687284582e-01 1.6372674738397923e+00 5.4523711152336602e+00 + 6.8002300162284102e-01 1.2750855107107766e+00 5.7335017230246388e+00 + 8.4782043175695843e-01 1.0147852374768309e+00 5.9635397015262877e+00 + 1.0850600317602896e+00 9.3005888893458688e-01 6.1501545523897674e+00 + 1.2761762835193906e+00 1.0681882588563658e+00 6.2963147187172472e+00 + 1.3448488112248489e+00 1.3668856417092026e+00 6.3811199208848253e+00 + 1.5381008271411911e+00 1.1115308570996310e+00 6.6754360306972123e+00 + id 11839 + loc 2.6632341742515564e-01 3.2279450446367264e-02 1077 + blend 0.0000000000000000e+00 + interp 3.5251015114238726e-01:3.5250662604087585e-01:8.5183957250173237e-01:2.4535068975795959e-01:1.2564935474532379e+00:2.6756515830885108e-01:1.8630813010752940e+00:2.6177400386551486e-01:2.4024339640330612e+00:3.1351328113353744e-01:3.0045557125739260e+00:2.6524851822444617e-01:3.8615288378810915e+00 + CVs 20 + -1.2997626074105229e-01 3.4419276806958266e-01 4.1933443519688460e-02 + -2.8600641025125195e-01 6.7785098229994245e-01 5.3379353175670885e-02 + -4.6831078831741058e-01 9.9514166958376726e-01 3.3236443054596665e-02 + -6.7506052738400069e-01 1.2835929769079852e+00 -2.1724169560314477e-02 + -9.0150354085189288e-01 1.5273814029759953e+00 -1.1466389778762082e-01 + -1.1375805273055264e+00 1.7139714135503108e+00 -2.4366304885752760e-01 + -1.3706070512662363e+00 1.8369019860313431e+00 -4.0219602475451666e-01 + -1.5896839814152393e+00 1.8972901336105128e+00 -5.8092624458106923e-01 + -1.7889962711606608e+00 1.9015437637014156e+00 -7.6971965075067705e-01 + -1.9702551872539522e+00 1.8572314904457630e+00 -9.6008053544821381e-01 + -2.1386408010844171e+00 1.7694568079581152e+00 -1.1441928160751267e+00 + -2.2958113813254144e+00 1.6421022387993716e+00 -1.3120085700584023e+00 + -2.4397880792355680e+00 1.4789271512286641e+00 -1.4539624740253696e+00 + -2.5671449222674920e+00 1.2820439974496920e+00 -1.5626798309535439e+00 + -2.6734698922421467e+00 1.0533775260573828e+00 -1.6298027615994959e+00 + -2.7559403181575393e+00 7.9574024358101381e-01 -1.6369609113057617e+00 + -2.8223900576506571e+00 5.0517051355899423e-01 -1.5495404964626882e+00 + -2.9025711904031382e+00 2.0095019136866332e-01 -1.3328447520143465e+00 + -2.9898027104137910e+00 1.9877150881650651e-02 -1.0257313823628658e+00 + id 11840 + loc 9.4348776340484619e-01 5.8329701423645020e-01 410 + blend 0.0000000000000000e+00 + interp 4.4408110099104736e-01:2.5750818145944648e-01:2.3380740808077261e-01:4.0303139206567995e-01:9.9527569541644934e-01:2.9515817286157514e-01:1.5045452525883150e+00:3.4377737531816183e-01:2.0016757426901002e+00:3.2056333218340655e-01:2.3704765199974744e+00:4.4407666018003750e-01:2.9952835842839107e+00:3.4973680743158603e-01:3.6783229901390539e+00 + CVs 20 + 6.1576108989613820e-01 1.6879836459714351e-01 -3.0664842645459756e-01 + 1.1633616182957360e+00 2.9521068548992924e-01 -5.8221360217524332e-01 + 1.7076185023008330e+00 4.2410895506941593e-01 -8.3062252123622704e-01 + 2.2422973478955708e+00 5.4494487967489214e-01 -1.0727736644648171e+00 + 2.7418950220149561e+00 6.3065755061149320e-01 -1.3359731052062023e+00 + 3.2009278407753978e+00 6.6492197365270611e-01 -1.6397749029854465e+00 + 3.6344563746985967e+00 6.3616100315948421e-01 -1.9831293347917740e+00 + 4.0708511144091011e+00 5.2943867329162364e-01 -2.3421273229649398e+00 + 4.5269794107630101e+00 3.2267036444201969e-01 -2.6817681979635992e+00 + 4.9901277196139695e+00 -6.1027323007372125e-03 -2.9653481020110228e+00 + 5.4389843844706007e+00 -4.3876481867437045e-01 -3.1959594033810701e+00 + 5.8726041380358511e+00 -9.1743625364547920e-01 -3.4539365016051673e+00 + 6.2830518929452088e+00 -1.3851206583852580e+00 -3.7968954315539900e+00 + 6.6474004138376479e+00 -1.7876081168111040e+00 -4.2110174205697382e+00 + 6.9541393462223056e+00 -2.1157798079913657e+00 -4.6363707171266721e+00 + 7.2173230006593005e+00 -2.4343938862367449e+00 -5.0050129853579355e+00 + 7.4573605047142255e+00 -2.8096932844272797e+00 -5.2835132456871552e+00 + 7.6700702974562658e+00 -3.2440877681571387e+00 -5.4765747573224957e+00 + 7.8427355569673116e+00 -3.7412728486027005e+00 -5.6603102522103308e+00 + id 11841 + loc 7.9968917369842529e-01 7.2425603866577148e-01 1054 + blend 0.0000000000000000e+00 + interp 3.7042919214261671e-01:3.7042548785069529e-01:1.9522547507592170e-01:2.9548275040555366e-01:7.8903798570759687e-01:2.1171641345401063e-01:1.1855243690738391e+00:2.7332958427404663e-01:1.9816286644061480e+00:2.8260673085495086e-01:2.4590682995966824e+00:2.7067952878468360e-01:2.9951123875831565e+00:3.2822351021600610e-01:3.8913960745468739e+00 + CVs 20 + 4.0203123807858865e-01 4.2789876398053472e-01 -3.0699298383938700e-01 + 7.7802150817977234e-01 8.7368365596421826e-01 -5.1541560061315805e-01 + 1.1246764073422544e+00 1.3213840940020498e+00 -6.2935104208149695e-01 + 1.4787113285236355e+00 1.6555050133744220e+00 -6.8283406024620041e-01 + 1.8345199974148592e+00 1.7772926949635017e+00 -7.2203844562113806e-01 + 2.1376568616350529e+00 1.7051803054852344e+00 -7.6442041529159455e-01 + 2.3531895704219972e+00 1.5056637169629228e+00 -7.9842104558420357e-01 + 2.4961021007682520e+00 1.2311182101996554e+00 -8.0243420061076820e-01 + 2.5926752821162240e+00 9.0451004409840396e-01 -7.5499720349902455e-01 + 2.6991668854185518e+00 5.2346949366024864e-01 -6.2981226986658490e-01 + 2.8865212129241353e+00 8.8994314377516814e-02 -3.9010079954182197e-01 + 3.2415015976703669e+00 -3.5870281231410922e-01 -5.4998980825872290e-02 + 3.8575207895536772e+00 -7.4982663270107663e-01 2.4156384194805974e-01 + 4.5531015340901995e+00 -9.9161333578862565e-01 3.2196714025519824e-01 + 5.0421679534175388e+00 -1.1339016718058592e+00 2.7741438707642646e-01 + 5.2239921102247813e+00 -1.2236703587215183e+00 2.8119525362034115e-01 + 4.9740117866949713e+00 -1.1308995199775143e+00 3.5495096657832936e-01 + 4.6146974359609363e+00 -8.4215535192897695e-01 2.6825037809665303e-01 + 4.7645628470172658e+00 -1.0256388003889769e+00 3.5299060349383526e-01 + id 11842 + loc 4.1419118642807007e-01 2.1792010962963104e-01 384 + blend 0.0000000000000000e+00 + interp 5.0561151865229348e-01:4.6097610166633657e-01:6.9704472946800866e-01:3.0507294136789564e-01:1.0219531628928797e+00:4.9177467927666613e-01:1.8312697911105231e+00:2.9293155986127217e-01:2.5156657958062896e+00:5.0560646253710695e-01:2.9225241988236599e+00:3.8113551130510293e-01:3.9988918474491091e+00 + CVs 20 + -5.0710653348107915e-01 1.7980953878378372e-01 -1.1977462503213772e+00 + -9.0435766630600112e-01 1.9569170757793503e-01 -1.9071885002405706e+00 + -1.2866047686822446e+00 1.6685757037449045e-01 -2.4897173632551342e+00 + -1.6790791028244658e+00 1.4004428564102775e-01 -3.0793273028297627e+00 + -2.0646436080445740e+00 1.0657279945898412e-01 -3.6771284324164299e+00 + -2.4298841922996619e+00 5.4425879958700629e-02 -4.2831172519151366e+00 + -2.7711746783821378e+00 -2.7652611811845418e-02 -4.8948689118335214e+00 + -3.0926853621225208e+00 -1.4707975687362373e-01 -5.5051716318357444e+00 + -3.3981487522882823e+00 -3.0269162363997992e-01 -6.1032922406786820e+00 + -3.6882001076781714e+00 -4.9775121175825376e-01 -6.6881137949900333e+00 + -3.9613173915782496e+00 -7.4507434119727656e-01 -7.2608841927046868e+00 + -4.2253669973230412e+00 -1.0545616866105427e+00 -7.8108622971007771e+00 + -4.4913719351309833e+00 -1.4292627973257592e+00 -8.3195922615106781e+00 + -4.7670596299423051e+00 -1.8681015061398929e+00 -8.7692708895183706e+00 + -5.0614486845415172e+00 -2.3645689000781118e+00 -9.1426314382757781e+00 + -5.3898234226770319e+00 -2.9007831442615015e+00 -9.4220485398389808e+00 + -5.7566544518254297e+00 -3.4477219412571216e+00 -9.5910843837178366e+00 + -6.1294812559328236e+00 -3.9629909143325301e+00 -9.6361101220365555e+00 + -6.3206342007912708e+00 -4.3063404562573524e+00 -9.5063217102167599e+00 + id 11843 + loc 2.6305511593818665e-01 4.9137151241302490e-01 1084 + blend 0.0000000000000000e+00 + interp 3.4083017567319884e-01:3.4082676737144213e-01:5.3078641034416973e-01:2.5446802505892763e-01:1.2855747065568681e+00:3.1720456292121446e-01:2.0388721369783966e+00:2.7926823420469210e-01:2.9826398415259363e+00:2.5067683469205826e-01:3.8672726724586242e+00 + CVs 20 + 4.4629991543824565e-01 4.4087990570237157e-01 2.5901883347955518e-01 + 8.0368310598716697e-01 8.2827582316764459e-01 5.0713642412627402e-01 + 1.1327878766256954e+00 1.2062013921932733e+00 7.6079164588278680e-01 + 1.4360647207559407e+00 1.5915431019840356e+00 1.0516329999873466e+00 + 1.6744781032470311e+00 1.9671961025742712e+00 1.4004347569304307e+00 + 1.8081908114630847e+00 2.3057433575164845e+00 1.8061890431479211e+00 + 1.8035433673923555e+00 2.5750117017530449e+00 2.2400609906067852e+00 + 1.6372985613471429e+00 2.7402835563626047e+00 2.6421913667945525e+00 + 1.3304319643125697e+00 2.7743681328465568e+00 2.9300577114428425e+00 + 9.7034149594299346e-01 2.6890420691852785e+00 3.0753176654093490e+00 + 6.2283741967404604e-01 2.4958509705803760e+00 3.1346604358818486e+00 + 3.2991255679846909e-01 2.1700995168636181e+00 3.1643260246208573e+00 + 1.4009512738318675e-01 1.7495379942912623e+00 3.1808894603091709e+00 + 1.2269186017693556e-02 1.3427754753254764e+00 3.1735082878011385e+00 + -1.3734477078919993e-01 1.0076132777838231e+00 3.1319803714418750e+00 + -3.4404447679646849e-01 7.8399093957830623e-01 3.0676061263555785e+00 + -5.8540743716051968e-01 7.0012014213421825e-01 3.0210801147619861e+00 + -8.1803570335519249e-01 6.9564123586827231e-01 3.0130073416212912e+00 + -1.0997897129216474e+00 5.7585319413338920e-01 2.9845166531462777e+00 + id 11844 + loc 4.7562196850776672e-01 3.2152980566024780e-01 1048 + blend 0.0000000000000000e+00 + interp 3.7558816730245431e-01:3.7558441142078131e-01:4.9172489629181970e-02:2.7478665312567307e-01:9.6905565771640023e-01:3.0389868926144759e-01:1.5514814561601382e+00:3.1564744742378176e-01:2.3875192574485578e+00:3.0881969191053327e-01:3.0011090469715209e+00:2.9898105047083012e-01:3.8393786490262083e+00 + CVs 20 + -4.2523214725332475e-01 4.9799989398575262e-01 6.4198779514419477e-02 + -8.1550840838956307e-01 1.0298888036013623e+00 8.5824039768934490e-02 + -1.1519096348886066e+00 1.6482661698258390e+00 3.8332438074795083e-02 + -1.3951689517780708e+00 2.3544000526758033e+00 -1.2849306957256879e-01 + -1.5149703286785698e+00 3.0621274943776480e+00 -4.6741090105350869e-01 + -1.5480593968181700e+00 3.6623881412076233e+00 -9.8036853001968649e-01 + -1.5771489942926871e+00 4.0544105489660813e+00 -1.6368190633701256e+00 + -1.6712100434028336e+00 4.1352375704442315e+00 -2.3619975249597456e+00 + -1.8452090168506530e+00 3.8634367551355941e+00 -3.0388892630492741e+00 + -2.0577569634682296e+00 3.2600803961414879e+00 -3.5723483343135030e+00 + -2.2138181797303824e+00 2.3859807679181633e+00 -3.8720960031202454e+00 + -2.2101498625643439e+00 1.3791120981982126e+00 -3.8713470623851158e+00 + -2.0326155460912401e+00 4.2737460382490911e-01 -3.5903892818600753e+00 + -1.7881414227771057e+00 -3.4680234616188577e-01 -3.1513756110768854e+00 + -1.6278281760649724e+00 -9.4032217070816349e-01 -2.7300134951675705e+00 + -1.7344721215674519e+00 -1.3731541388346713e+00 -2.6021383713941444e+00 + -2.1161329168435077e+00 4.7838854174287970e-01 -3.1965762342322321e+00 + -1.6283691786369123e+00 9.6185662427979834e-01 -2.5169976448236722e+00 + -1.7513699800795652e+00 1.3801849221615834e+00 -2.6471402834016571e+00 + id 11845 + loc 5.9326750040054321e-01 9.9924504756927490e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3298621507433749e-01:4.3298188521218678e-01:7.1911840480007361e-01:3.3352960868450615e-01:1.0079848189327199e+00:2.8213422438356628e-01:1.9263463489022619e+00:2.9572505366544322e-01:2.6534477937272873e+00:3.7919168650436741e-01:3.2917350610058316e+00:2.9803641667997594e-01:3.9940841713817594e+00 + CVs 20 + 2.5193415722777701e-01 2.7526752290315304e-01 -1.1484314967362652e-01 + 5.1061571876083989e-01 5.6158271274372040e-01 -2.0429608169609439e-01 + 7.8672392972839567e-01 8.5131904915184375e-01 -2.9495837539091296e-01 + 1.0873385580124630e+00 1.1370629581634470e+00 -4.0628727095529943e-01 + 1.4164306271910256e+00 1.4094469402185721e+00 -5.5699410625554102e-01 + 1.7712460062465170e+00 1.6529622371133448e+00 -7.7133097315006971e-01 + 2.1385091805186853e+00 1.8455767062746826e+00 -1.0699520203392288e+00 + 2.4974026046818953e+00 1.9646976811616255e+00 -1.4576869305733082e+00 + 2.8275828697496745e+00 1.9946206531339525e+00 -1.9197580827402916e+00 + 3.1168710902242132e+00 1.9326088631174287e+00 -2.4287397798381893e+00 + 3.3624051394778198e+00 1.7819014253966774e+00 -2.9583114610723062e+00 + 3.5590206164502596e+00 1.5413781085520237e+00 -3.4904267652321885e+00 + 3.6844072293369190e+00 1.2124840665329040e+00 -4.0150879933467936e+00 + 3.6855665903628938e+00 8.2609407500298104e-01 -4.5357242005283416e+00 + 3.4900718413504919e+00 4.5461396216526906e-01 -5.0520000840516950e+00 + 3.0672042253300180e+00 1.9959148114183534e-01 -5.5233334115026658e+00 + 2.4687414886162182e+00 1.4582088102413526e-01 -5.8821424721107638e+00 + 1.8613277426746979e+00 2.5715282176041054e-01 -6.1149935499573242e+00 + 1.5143689545705024e+00 2.1635167520314091e-01 -6.4214003845388508e+00 + id 11846 + loc 9.3482571840286255e-01 8.7351304292678833e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3912035531182148e-01:3.6553103117994429e-01:1.2035296955260388e-01:4.3911596410826836e-01:8.6266713285014562e-01:3.2665928639165903e-01:1.3393140805357830e+00:3.0166139357001248e-01:2.0445085651403407e+00:2.9503422934207946e-01:2.8689719922734191e+00:3.8655914552108950e-01:3.5722110942136895e+00 + CVs 20 + 7.1767188008942759e-02 2.7484699879389868e-01 -1.9019553014741059e-01 + 1.6548188727742572e-01 5.4514123594612518e-01 -3.7461671873671609e-01 + 2.5633752604520865e-01 8.1779178761066151e-01 -5.5611211283590389e-01 + 3.3283196124747527e-01 1.0955528749212966e+00 -7.3886576785866453e-01 + 3.9436903822422376e-01 1.3757383841585029e+00 -9.2639632383093506e-01 + 4.3878503468150964e-01 1.6565390556125505e+00 -1.1232399581190926e+00 + 4.6257561056567786e-01 1.9379213790083589e+00 -1.3388933809333863e+00 + 4.6337847923255160e-01 2.2170662695553309e+00 -1.5887632377522056e+00 + 4.4129606184618653e-01 2.4821016605003283e+00 -1.8901401227453307e+00 + 3.9784061946902660e-01 2.7119517641851005e+00 -2.2556776223199004e+00 + 3.3669488336121356e-01 2.8809530638189549e+00 -2.6863668853534506e+00 + 2.6759505315278109e-01 2.9678764766756642e+00 -3.1673749431441047e+00 + 2.0621936922658879e-01 2.9652607948857996e+00 -3.6751248628658892e+00 + 1.6891077744623906e-01 2.8771201846251331e+00 -4.1869532366637179e+00 + 1.6918492118598993e-01 2.7104815532465989e+00 -4.6862253898825497e+00 + 2.2118972232395095e-01 2.4667906702258211e+00 -5.1643511228318300e+00 + 3.3715617655737296e-01 2.1455903066078799e+00 -5.6040582314693008e+00 + 5.0833222246631260e-01 1.7811754579047507e+00 -5.9576662427872531e+00 + 6.7543299456203343e-01 1.5951232215949414e+00 -6.0741360357842797e+00 + id 11847 + loc 8.0857580900192261e-01 7.0873034000396729e-01 410 + blend 0.0000000000000000e+00 + interp 4.3191420829800181e-01:2.7124668500864163e-01:5.6820694845420538e-01:4.3190988915591882e-01:1.0020384306091481e+00:2.8180223357139933e-01:1.9868203954247798e+00:4.2719947793997137e-01:2.6109393747172311e+00:2.9437957444639329e-01:3.2790727566334898e+00:4.0108246664236324e-01:3.9774450106705497e+00 + CVs 20 + 4.5876889536586096e-01 3.0116188263932581e-01 -9.1765740995141371e-02 + 8.2042045440003530e-01 5.3211854183523410e-01 -1.7162027665762702e-01 + 1.1736560135997620e+00 7.4459269669526562e-01 -2.4540881445281465e-01 + 1.5571720965312079e+00 9.5616534143768672e-01 -3.2063946784630748e-01 + 1.9681210467566483e+00 1.1536051914292154e+00 -4.1614307381313576e-01 + 2.3991397494899598e+00 1.3151850018911835e+00 -5.5602369003955898e-01 + 2.8284644523746789e+00 1.4131237035805562e+00 -7.6609872494102149e-01 + 3.2200237234819040e+00 1.4252837587189791e+00 -1.0630795989256570e+00 + 3.5536724360329739e+00 1.3422738940286443e+00 -1.4430058344127425e+00 + 3.8240497453425206e+00 1.1526711697452061e+00 -1.8854599454278218e+00 + 4.0207306598559516e+00 8.2502922969036807e-01 -2.3335888152057422e+00 + 4.1232729778005508e+00 3.3773200084801069e-01 -2.7105326808304731e+00 + 4.1357243173913121e+00 -2.7224482064384259e-01 -3.0188604069676765e+00 + 4.1009850778848600e+00 -9.3898245403074365e-01 -3.3397678256613310e+00 + 4.0796874178258555e+00 -1.6009180072423861e+00 -3.7494783829405258e+00 + 4.1383365281216191e+00 -2.2239571192635879e+00 -4.2842565590423796e+00 + 4.3403861981157146e+00 -2.8100862231445527e+00 -4.9065746884230119e+00 + 4.6939043268132146e+00 -3.3409014937868298e+00 -5.4859955283095356e+00 + 5.1154234878352458e+00 -3.7647869687238562e+00 -5.8996388914330629e+00 + id 11848 + loc 9.0341162681579590e-01 3.0825379490852356e-01 416 + blend 0.0000000000000000e+00 + interp 5.4556240185746085e-01:5.4555694623344231e-01:4.8560683784285052e-01:5.0783490882699400e-01:9.4856094501461674e-01:3.2792726588640936e-01:1.4489741230876338e+00:4.6319913300560833e-01:2.0045980159405952e+00:3.4910508991992339e-01:2.9957975735624860e+00:3.4190947615384049e-01:3.4242422523034941e+00:4.1590964183805940e-01:3.9640430469384031e+00 + CVs 20 + -4.9038291082940755e-01 1.0541657925438215e-01 1.2739865854410901e-01 + -7.9427377982261627e-01 1.1450537146152318e-01 2.6539859032110907e-01 + -1.0528076128034241e+00 8.5566076783025025e-02 4.1218055190517267e-01 + -1.3195760376917782e+00 6.0609168956534842e-02 5.5141194306831287e-01 + -1.5915885705443829e+00 4.2384033072565885e-02 6.7930734769141754e-01 + -1.8680292254971280e+00 3.3458021923678194e-02 7.9325912708416635e-01 + -2.1470514261399867e+00 3.7211717510745923e-02 8.8853155153447227e-01 + -2.4243162953538193e+00 5.7322794503708918e-02 9.5957475848573459e-01 + -2.6984758728175433e+00 9.5093221967508801e-02 1.0048061145292102e+00 + -2.9719906074416547e+00 1.4863615382458950e-01 1.0252937185519844e+00 + -3.2381212810705629e+00 2.2344841016320094e-01 1.0125021710628845e+00 + -3.4733121351445346e+00 3.4701941779759871e-01 9.3217363575093226e-01 + -3.6767333730815270e+00 5.3896289060731495e-01 7.4074590470227908e-01 + -3.9100890670900785e+00 7.4932354654347955e-01 4.5189556065078140e-01 + -4.2240931474830443e+00 9.0133799779503687e-01 1.4232682078478531e-01 + -4.6110909420892954e+00 9.6771785165417423e-01 -1.4347323107116583e-01 + -5.0447049021594115e+00 9.4849526085205649e-01 -4.0974503729159301e-01 + -5.4993439893230240e+00 8.4246871098827936e-01 -6.5396573874510666e-01 + -5.7824000269755835e+00 6.6921607632383684e-01 -6.6540072733925593e-01 + id 11849 + loc 2.1196497976779938e-01 1.4151073060929775e-02 1085 + blend 0.0000000000000000e+00 + interp 5.5482005493995812e-01:4.2610099904369231e-01:7.5033507008151834e-01:3.3497271567539727e-01:1.4905031572285403e+00:5.5481450673940880e-01:2.0243998716106271e+00:4.5478287087985120e-01:2.5327681907539961e+00:2.8388758275435966e-01:3.1623590052286779e+00:4.2060322827877789e-01:3.9081850828404976e+00 + CVs 20 + 3.3430422182317837e-01 3.7333384228332767e-01 1.6554664611811915e-01 + 5.7157185832444912e-01 6.5746660294623194e-01 3.4673151049770434e-01 + 7.8590613873040704e-01 8.9868172998547091e-01 5.2596962817285187e-01 + 9.9655369668086458e-01 1.1031518479578892e+00 6.8560397099232329e-01 + 1.1941905618266437e+00 1.2659125346328342e+00 8.2331557638195974e-01 + 1.3834018504818373e+00 1.3831644725026426e+00 9.3065925120233728e-01 + 1.5999888352414926e+00 1.4560347557310525e+00 9.9155983501745848e-01 + 1.9486689677532012e+00 1.5245778262071825e+00 1.0012879616070405e+00 + 2.5036069446169171e+00 1.7456734290631797e+00 1.1014970234255685e+00 + 2.9131344542556770e+00 2.1277894433015661e+00 1.4427298435103530e+00 + 3.0068734004062341e+00 2.4934781385143570e+00 1.7911477969159324e+00 + 2.8944819068696419e+00 2.8550300393001615e+00 2.0186244834620863e+00 + 2.6714697798835720e+00 3.0767785990016190e+00 2.1566898109891746e+00 + 2.5457670249434576e+00 2.9294305592949819e+00 2.2904413117969167e+00 + 2.5919777893923710e+00 2.3604003250027388e+00 2.4158136869936029e+00 + 2.6538521338474323e+00 1.4113064734117078e+00 2.3972149787552857e+00 + 2.4628487456897123e+00 2.4695335246169559e-01 2.0975027259069572e+00 + 1.9143586630223055e+00 -6.5947791474584549e-01 1.6062659378357882e+00 + 1.4953825374787741e+00 -8.4131522171121509e-01 1.3587500998998014e+00 + id 11850 + loc 3.2551038265228271e-01 2.0895895361900330e-01 1053 + blend 0.0000000000000000e+00 + interp 4.1156314111967041e-01:4.1155902548825923e-01:3.3313025685296671e-01:2.7956206634136477e-01:1.0983700701258565e+00:3.5328036041177069e-01:1.7449199361856154e+00:2.9290618387231271e-01:2.0152658771705196e+00:2.7539382815849639e-01:2.9827797170942159e+00:3.0742555952983547e-01:3.8144455586507138e+00 + CVs 20 + 4.7190052438396718e-01 4.6561314381134478e-01 1.4296534023267793e-01 + 8.8915028744089419e-01 8.9053414352122140e-01 3.2625109299202443e-01 + 1.2929874382217301e+00 1.2795756385741923e+00 5.4663236671950899e-01 + 1.6937012499678112e+00 1.6296413858578549e+00 8.2561996747569488e-01 + 2.0759683911894529e+00 1.9153472650505523e+00 1.1791827521153297e+00 + 2.4211096112648587e+00 2.1081283695497519e+00 1.6133195735027370e+00 + 2.7050029469224386e+00 2.1822292976905446e+00 2.1204813158293532e+00 + 2.8973739663733435e+00 2.1190089389049112e+00 2.6762774186632119e+00 + 2.9702579430535154e+00 1.9045369726039518e+00 3.2294118106859671e+00 + 2.9089999635940238e+00 1.5299364937285882e+00 3.6959375411616469e+00 + 2.7270713580256380e+00 1.0248597422161692e+00 3.9670595580412269e+00 + 2.4846354713921732e+00 4.9324681383661784e-01 3.9878752438331171e+00 + 2.2191561520361343e+00 2.0484365619830192e-02 3.8230429521146201e+00 + 1.8847046528422784e+00 -3.8019473265441500e-01 3.5799909377277772e+00 + 1.4103820077330349e+00 -6.8936994219148251e-01 3.3328703201504490e+00 + 7.8134511048026223e-01 -8.0982340256683738e-01 3.1257452495060356e+00 + 9.4700957387874096e-02 -6.0513451097252491e-01 3.0064001696903193e+00 + -4.1925270528139791e-01 -1.5353985626457378e-01 3.0075763308975256e+00 + -7.6102731729889128e-01 5.0868869799459704e-03 2.9831169819118113e+00 + id 11851 + loc 1.2397557497024536e-02 8.5868650674819946e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2214588010634874e-01:4.1973595740081415e-01:3.2525811807817551e-03:3.7396747636453614e-01:3.9634308525120765e-01:3.7484777234844296e-01:1.0110581545352282e+00:4.2214165864754771e-01:1.4829450339228050e+00:3.9700244458477768e-01:1.9802798969286766e+00:3.8045724283875948e-01:2.9022018310930058e+00:3.4891931581167057e-01:3.4627275410738116e+00 + CVs 20 + -4.6748666050913046e-02 2.9713491364571726e-01 -6.6440823780287206e-02 + -4.8908946904992229e-02 6.0743238913199882e-01 -1.6380921029457191e-01 + -1.5245344998944928e-02 9.2517538039736591e-01 -2.7580015589027446e-01 + 4.8244428426603522e-02 1.2574401323737008e+00 -4.0119479692166793e-01 + 1.3700831887784681e-01 1.6029292382656501e+00 -5.5323798742739316e-01 + 2.3928453549729300e-01 1.9542339991624982e+00 -7.4687022841932005e-01 + 3.3961015475134759e-01 2.3010288565138306e+00 -9.9387229078118799e-01 + 4.2306095605971628e-01 2.6246221178949010e+00 -1.3022520106396516e+00 + 4.8104726455609825e-01 2.8868074904703240e+00 -1.6752377369769342e+00 + 5.2163765231258230e-01 3.0498777805763604e+00 -2.1018266681258875e+00 + 5.7743955721212947e-01 3.1176060909424295e+00 -2.5519808093565231e+00 + 6.8598676892799304e-01 3.1226214306942310e+00 -2.9846157325760618e+00 + 8.5687419520459918e-01 3.0821700491688384e+00 -3.3668265255995662e+00 + 1.0752069192980018e+00 2.9922956218647734e+00 -3.6854310572620448e+00 + 1.3364841379719437e+00 2.8554901033992479e+00 -3.9359984059686086e+00 + 1.6670730939556142e+00 2.6689821707755907e+00 -4.1360549612398625e+00 + 2.0835739413651830e+00 2.3873970129636861e+00 -4.3469210228159172e+00 + 2.5060056703489422e+00 1.9977058350932466e+00 -4.6320882218820634e+00 + 2.8090552100982134e+00 1.6946790092147181e+00 -4.8939713497957680e+00 + id 11852 + loc 5.9979903697967529e-01 7.5091320276260376e-01 410 + blend 0.0000000000000000e+00 + interp 3.8361187227312221e-01:2.4745525162235110e-01:5.6233672098000342e-02:3.8360803615439948e-01:9.6495125626256151e-01:3.0306317550593365e-01:1.6510053580943360e+00:2.3605690957175166e-01:2.5928382175585174e+00:2.7865741476441469e-01:3.2874197358256909e+00 + CVs 20 + 3.7458436845177767e-01 8.7593887201195347e-02 -2.3443853555106342e-01 + 6.6028105380992463e-01 1.2971986868507834e-01 -4.3052262342705916e-01 + 9.1962478106802914e-01 1.5073703075721245e-01 -6.1713930234795933e-01 + 1.1772240040300939e+00 1.6197737754741720e-01 -8.0586465354122983e-01 + 1.4320607324178718e+00 1.6471755337818328e-01 -9.9649897073669402e-01 + 1.6853039971370403e+00 1.6083651675099020e-01 -1.1883716257433468e+00 + 1.9404639121482830e+00 1.5282019603918784e-01 -1.3776952227642563e+00 + 2.2018429246414470e+00 1.4279458790706046e-01 -1.5574566284833178e+00 + 2.4739848944630261e+00 1.3185244627733528e-01 -1.7191504643626738e+00 + 2.7597107253470630e+00 1.2050070390843670e-01 -1.8529743043745193e+00 + 3.0481551197720016e+00 1.0948452438647971e-01 -1.9479231548983424e+00 + 3.3047421581959000e+00 9.8652269694927464e-02 -2.0033026428278875e+00 + 3.5071235720534801e+00 8.6581825751445685e-02 -2.0364547712494137e+00 + 3.6799422333049163e+00 6.8106929044686515e-02 -2.0643257182030639e+00 + 3.8508118188091238e+00 3.5714760232062659e-02 -2.0958904473846012e+00 + 4.0184241906942955e+00 -9.2155110622385017e-03 -2.1340991477464808e+00 + 4.1775007706337766e+00 -6.2489281069122882e-02 -2.1805745991034566e+00 + 4.3357110239536363e+00 -1.2923854640587495e-01 -2.2429639018884209e+00 + 4.5427757790613974e+00 -2.5831998465989425e-01 -2.3590432054828168e+00 + id 11853 + loc 5.9191823005676270e-01 3.3697551488876343e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7953976326164660e-01:4.0751767060159133e-01:9.8895407517316947e-01:4.7953496786401401e-01:1.6512967306815924e+00:3.9288885668457479e-01:2.1803779761758997e+00:2.7006376107993607e-01:2.9689621312033427e+00:3.2569979190552334e-01:3.9994909740802158e+00 + CVs 20 + 2.7886613167252289e-01 3.6461836261859287e-01 -2.5746061577883039e-01 + 5.3477676211890346e-01 7.0027908199414202e-01 -4.4429226183395421e-01 + 7.9877295055877906e-01 1.0215126038775206e+00 -5.9011580350415116e-01 + 1.0938007725850236e+00 1.3314821920785020e+00 -6.9399024362144202e-01 + 1.4326330463059784e+00 1.6163300882691263e+00 -7.3692203724218719e-01 + 1.8157191498330780e+00 1.8551626321144117e+00 -7.0153788015753737e-01 + 2.2270854905631232e+00 2.0239615001378528e+00 -5.7735095483196708e-01 + 2.6381861631655008e+00 2.1024878178312871e+00 -3.6605487754760924e-01 + 3.0183671439061182e+00 2.0782370504087799e+00 -8.5942730474545037e-02 + 3.3486120409605649e+00 1.9478822447671482e+00 2.2708058641376672e-01 + 3.6262935291435943e+00 1.7141513776000288e+00 5.3025969084630531e-01 + 3.8532562244069535e+00 1.3837062166013359e+00 7.8311458517667532e-01 + 4.0284288022131838e+00 9.7318664426135271e-01 9.4952499307276872e-01 + 4.1566278837681594e+00 5.1225238812580054e-01 9.9523864948855523e-01 + 4.2505158550394979e+00 4.9221002951710280e-02 8.9187814718203007e-01 + 4.3433532640943930e+00 -3.6179901132729553e-01 6.5568349132767556e-01 + 4.4942580586240028e+00 -6.9962144890111544e-01 3.2397515318803760e-01 + 4.7087914705006018e+00 -9.7531273995065904e-01 -6.3641632968839845e-02 + 4.8317665029051904e+00 -1.3198305561555688e+00 -3.5496699769693307e-01 + id 11854 + loc 5.4014205932617188e-02 9.8665022850036621e-01 1076 + blend 0.0000000000000000e+00 + interp 5.5623411304547210e-01:3.3680124894067209e-01:3.8592880805611596e-01:2.4771280563846257e-01:1.0963280809274187e+00:3.5241895033547210e-01:1.9812872175740361e+00:3.8600065462975686e-01:2.7224289617948272e+00:5.5622855070434163e-01:3.2773185048464439e+00:4.2885556146861925e-01:3.8575951361141856e+00 + CVs 20 + 2.3115734973057625e-01 2.9920034972798937e-01 4.3336337708965861e-02 + 4.6832586462517595e-01 5.7657028673902266e-01 6.8419034655987504e-02 + 7.1528399642796614e-01 8.4251702068370404e-01 9.4636346868285037e-02 + 9.7667481860031391e-01 1.1018728968740024e+00 1.2350924753842901e-01 + 1.2561827453137966e+00 1.3521393886456465e+00 1.3883319899909152e-01 + 1.5552918031900098e+00 1.5890181719054393e+00 1.1968687532552486e-01 + 1.8688704929206914e+00 1.8024014613084143e+00 4.3981307451698481e-02 + 2.1835274705150738e+00 1.9754025091063878e+00 -1.0262621248565196e-01 + 2.4800474419400453e+00 2.0885887964989949e+00 -3.1921202017384831e-01 + 2.7396229927075764e+00 2.1266027315255269e+00 -5.8667597703067598e-01 + 2.9532257439229723e+00 2.0840770213118152e+00 -8.7550163421598726e-01 + 3.1219755525951465e+00 1.9630673867833663e+00 -1.1618561367228133e+00 + 3.2464446299296386e+00 1.7669445347504902e+00 -1.4363520471446054e+00 + 3.3142581481225166e+00 1.5001231582630787e+00 -1.7047512917438683e+00 + 3.2899753863244046e+00 1.1783211512117386e+00 -1.9772485390239678e+00 + 3.1256425933825160e+00 8.4935355751884722e-01 -2.2412458595136928e+00 + 2.8008484873798225e+00 5.8780118343512511e-01 -2.4532282433296237e+00 + 2.3660267482007353e+00 4.5596463707421164e-01 -2.5603479302661976e+00 + 2.0513081236405410e+00 3.0836572620401592e-01 -2.6260552175006060e+00 + id 11855 + loc 5.4636424779891968e-01 8.5920415818691254e-02 1077 + blend 0.0000000000000000e+00 + interp 3.2188654497498365e-01:3.2188332610953391e-01:5.2219653545239164e-01:2.4390219988503162e-01:1.1828109739208457e+00:3.0081068376395154e-01:2.1490592298822557e+00:2.5460612467830013e-01:3.0081434228434238e+00:2.6113722681640855e-01:3.9637274513752914e+00 + CVs 20 + 5.0896226774594100e-02 3.7124222510213872e-01 1.9094923132815378e-01 + 9.0946870527877643e-02 7.4463042160156578e-01 3.5804589684699523e-01 + 1.1212885481590806e-01 1.1196039020720707e+00 5.3208284497531033e-01 + 1.0318715103872467e-01 1.4941916741502432e+00 7.3605224475579822e-01 + 5.0024714588873032e-02 1.8615356620651533e+00 9.8553905593469016e-01 + -6.1907490664655840e-02 2.2070077784886357e+00 1.2881707332587979e+00 + -2.4427429203391915e-01 2.5095607971936218e+00 1.6401830923024114e+00 + -5.0074314620009686e-01 2.7467574974355093e+00 2.0256886424658456e+00 + -8.2546489839808379e-01 2.9012433255382897e+00 2.4237807182290716e+00 + -1.2030087592351730e+00 2.9622809504895331e+00 2.8156915370291480e+00 + -1.6118185575254493e+00 2.9233701036487103e+00 3.1933131752589716e+00 + -2.0288440065870956e+00 2.7759067475450543e+00 3.5610182059092055e+00 + -2.4247057787619908e+00 2.5093287839240017e+00 3.9240925341574164e+00 + -2.7562681083873506e+00 2.1254517385883780e+00 4.2768045523664693e+00 + -2.9762944415995856e+00 1.6475011855304289e+00 4.6105385353099662e+00 + -3.0406390522004232e+00 1.1478975575484256e+00 4.9072129136434359e+00 + -2.9661994348427765e+00 7.4665847192107404e-01 5.1213492111101715e+00 + -2.8227204356638600e+00 4.6961559037812051e-01 5.2507666817108589e+00 + -2.5459773011939690e+00 2.6285415834525239e-01 5.4357114054862130e+00 + id 11856 + loc 6.7947947978973389e-01 4.3583475053310394e-02 1054 + blend 0.0000000000000000e+00 + interp 4.7341643811790801e-01:4.6108257474812392e-01:1.9363744956342588e-01:4.0727974907254705e-01:8.4704372943189576e-01:3.8184796368452356e-01:1.0480143375720610e+00:2.3037617141783398e-01:1.9428782632801502e+00:4.7341170395352683e-01:2.5836301167140343e+00:4.1942899180852905e-01:3.0031648827501423e+00:3.1095279792322122e-01:3.5999905831860155e+00 + CVs 20 + -9.2737918261894328e-02 4.1081349016433955e-01 2.3070542846418701e-01 + -2.1753708646798489e-01 7.9676008051952185e-01 3.8736399013543410e-01 + -3.4622382871767243e-01 1.1708553656145004e+00 4.8052281843434186e-01 + -4.8267976537571000e-01 1.5270310824690398e+00 5.2877290961917101e-01 + -6.5487455192007415e-01 1.8395680227062914e+00 5.5994750113397473e-01 + -8.7489557046620936e-01 2.0759445402600498e+00 5.9868636606329828e-01 + -1.1166328685676394e+00 2.2083357167747435e+00 6.5050081924542269e-01 + -1.3340258491767463e+00 2.2264164802426483e+00 7.0795409083264227e-01 + -1.4945216339966918e+00 2.1373196459152970e+00 7.5804776062520962e-01 + -1.5922793362988021e+00 1.9363090254993383e+00 7.8578495227230238e-01 + -1.6606251557626639e+00 1.6085908169474665e+00 7.6328489678397049e-01 + -1.8269012595784786e+00 1.1397864747516346e+00 6.3227657442159180e-01 + -2.3745365365758442e+00 5.7552134955756951e-01 4.1273295277396910e-01 + -3.3513002239525478e+00 2.3083409301640251e-01 4.8133383304371802e-01 + -4.0938503347936930e+00 1.5830039845961585e-01 8.7887001751940219e-01 + -4.5144690911795395e+00 7.1004105372722420e-02 1.2798575701178543e+00 + -4.6570320096244000e+00 -1.3257810548299431e-01 1.4253196025587442e+00 + -4.5250321500635184e+00 -3.3160378824040221e-01 1.2493816621147493e+00 + -4.9303655128645918e+00 -6.5530577840620641e-01 1.5237874565981420e+00 + id 11857 + loc 7.6180648803710938e-01 4.6406745910644531e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7433703706374358e-01:3.4480322542258779e-01:3.4738641656867353e-02:3.2487331579460094e-01:7.2642635018762103e-01:4.7433229369337299e-01:1.0003025787281072e+00:3.2620245249004043e-01:1.9475490844439727e+00:3.9632585869960529e-01:2.2929538376122758e+00:3.4599522415038336e-01:2.9015907301685626e+00:2.7629075801353414e-01:3.5071233741599848e+00 + CVs 20 + 1.9084786683080390e-03 3.1506603017542956e-01 3.0073821083672320e-01 + -1.6349272780428969e-02 5.8779044683684467e-01 5.6605692887652470e-01 + -3.9142316976357561e-02 8.2775695122041859e-01 8.1789521690002842e-01 + -6.3758753144909142e-02 1.0405631064992460e+00 1.0708889534259514e+00 + -9.2347089369509416e-02 1.2241111959103084e+00 1.3273463295990575e+00 + -1.2193383135137981e-01 1.3772014992857233e+00 1.5845385984665865e+00 + -1.4525968510586162e-01 1.5044090154927621e+00 1.8411857129349483e+00 + -1.5447307273244004e-01 1.6152797165172070e+00 2.0988816089926541e+00 + -1.4724629735845951e-01 1.7197183059122039e+00 2.3567166327532596e+00 + -1.2759572158490584e-01 1.8243231119587349e+00 2.6130079313552237e+00 + -1.0099936032363521e-01 1.9239694003300096e+00 2.8746906380565020e+00 + -7.3368236446148760e-02 1.9939688177986514e+00 3.1550433433869927e+00 + -4.5803994851010277e-02 1.9979391259734984e+00 3.4611855548205646e+00 + -1.6474683582331950e-02 1.9018695939360961e+00 3.7868127734656354e+00 + 1.4844846714097137e-03 1.6973015581973259e+00 4.1064231336524335e+00 + -1.5126361488737694e-02 1.4166046473197322e+00 4.3797125440347848e+00 + -6.7463308491828577e-02 1.1112968219723820e+00 4.5746156950193795e+00 + -1.1503212192510237e-01 7.9504726760734123e-01 4.6963678451075266e+00 + -3.5072538338693560e-02 2.9361196873722217e-01 4.8100181757468556e+00 + id 11858 + loc 8.6131370067596436e-01 4.6469748020172119e-01 1090 + blend 0.0000000000000000e+00 + interp 4.6948797030881129e-01:4.6948327542910823e-01:4.0908454272543093e-01:3.4027796920530928e-01:1.1424935029908589e+00:2.9191268380678687e-01:2.3695171772801311e+00:3.3424227028236791e-01:3.6297578356804006e+00 + CVs 20 + -1.5319838610397843e-01 4.6501483612331163e-01 -1.3174668086214641e-01 + -1.9024990012031887e-01 8.5394500227055403e-01 -2.2857736009588225e-01 + -1.7050498185794222e-01 1.2031093020030987e+00 -3.1831679625736159e-01 + -1.1719165880269866e-01 1.5224567150330754e+00 -4.1078429331035460e-01 + -3.0667413936903198e-02 1.8044508589130437e+00 -5.0074373820799845e-01 + 8.4684191239579820e-02 2.0474647711650831e+00 -5.8444837584289022e-01 + 2.2928994447818263e-01 2.2631629038421091e+00 -6.5536912732503727e-01 + 4.2071063095922767e-01 2.4641856172940511e+00 -6.9402979547679911e-01 + 6.7152692306867146e-01 2.6281897182220075e+00 -6.8169489526732541e-01 + 9.5191026455807626e-01 2.7238113655237361e+00 -6.3781010558239781e-01 + 1.2247106157331740e+00 2.7643774858298036e+00 -5.9725160843093361e-01 + 1.4763319741825625e+00 2.7840896540415301e+00 -5.7214023011307824e-01 + 1.6971120714114722e+00 2.8174396239874935e+00 -5.5668023026994273e-01 + 1.8698377842810419e+00 2.9041674392359864e+00 -5.2605107827806474e-01 + 1.9818485635717296e+00 3.0739888900721848e+00 -4.1854927994750346e-01 + 2.0250713235826163e+00 3.2911457179566304e+00 -1.7244620052729887e-01 + 1.9547406503664044e+00 3.4796568618185200e+00 2.4713447469509531e-01 + 1.7535656944734717e+00 3.5126279083652587e+00 8.0839994600452547e-01 + 1.9108538478103960e+00 3.4550552257701597e+00 5.7643902868473484e-01 + id 11859 + loc 2.2237826883792877e-01 1.4151073060929775e-02 1084 + blend 0.0000000000000000e+00 + interp 4.8532253021298094e-01:4.8531767698767886e-01:6.1925804284275587e-01:2.6945474723051310e-01:9.9633698892366584e-01:4.2366519271997843e-01:1.4183822896413627e+00:2.9019938364436709e-01:2.0831943323059980e+00:3.0364058445933323e-01:3.1756651868152863e+00:4.4689538145652158e-01:3.8999326877106308e+00 + CVs 20 + 2.2825337541860080e-01 3.1224831267717740e-01 2.6388581899240732e-01 + 3.9277028927881352e-01 5.4955522741452456e-01 4.9765910650857914e-01 + 5.6447743843604004e-01 7.4741183392429100e-01 6.9127942903672457e-01 + 7.5632613725446318e-01 8.9598480206577114e-01 8.2042466359069310e-01 + 9.4665466254569097e-01 9.8838511511207339e-01 8.8517643298971693e-01 + 1.1383759422747206e+00 1.0585934128050956e+00 9.1621363236309883e-01 + 1.3457970821536391e+00 1.1363079957616258e+00 9.5312384965192298e-01 + 1.5980460663924569e+00 1.2349066845609735e+00 1.0530208783031314e+00 + 1.8574072088738962e+00 1.3693434006737546e+00 1.3251701788868169e+00 + 1.9167743485151778e+00 1.4899598906777571e+00 1.7260764567406994e+00 + 1.7623527816852405e+00 1.5322034664272428e+00 2.0177466090172036e+00 + 1.5145046457630900e+00 1.5283426779539357e+00 2.1765838528112300e+00 + 1.2203302943570979e+00 1.4963972674287176e+00 2.2336385709130608e+00 + 9.5814635846783258e-01 1.3999242552369711e+00 2.1678650191648821e+00 + 8.1794455193746129e-01 1.2188451447370987e+00 1.9879262470673238e+00 + 7.8330966454452944e-01 9.6317281208376770e-01 1.7437872070555387e+00 + 7.5816388992765393e-01 6.2513910488218238e-01 1.4787607279901702e+00 + 6.1176781812702608e-01 1.6773272126528338e-01 1.1971874448837556e+00 + 3.5320129393793265e-01 1.1955429965488165e-01 1.1991795850774605e+00 + id 11860 + loc 7.0079416036605835e-01 9.4542855024337769e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3912737361310239e-01:4.3912298233936625e-01:4.7928966695199848e-01:4.3536061510058893e-01:1.0101791792220869e+00:3.2389457904782187e-01:1.9598516871469258e+00:4.1145952765507793e-01:2.3892729056595483e+00:3.4889477218872811e-01:3.0004564566944993e+00:2.4463134936280242e-01:3.5222265775219253e+00:3.8654322219858989e-01:3.9877564528107121e+00 + CVs 20 + 1.6488584371237991e-01 9.8091015683291860e-01 -4.5116538225847014e-01 + 3.6050117731564318e-01 1.9622575426146320e+00 -8.0988718877369892e-01 + 6.4321299079227467e-01 2.9421556243012930e+00 -9.9267888669755977e-01 + 1.0369732126136586e+00 3.8719470365645456e+00 -9.1360594589573685e-01 + 1.5406842801292564e+00 4.6394397142628634e+00 -5.1617844607624641e-01 + 2.0798348727611140e+00 5.0790293786942460e+00 1.7416314141232192e-01 + 2.5236576751549005e+00 5.0802390750605886e+00 9.8580399110838957e-01 + 2.7957411446277844e+00 4.7005699348970778e+00 1.7200338826491561e+00 + 2.9116217513637053e+00 4.0806759368035266e+00 2.2974599400489462e+00 + 2.9057954972723197e+00 3.3407703917483227e+00 2.7347479785869124e+00 + 2.7604744830991788e+00 2.5781168019843448e+00 3.0948661724408120e+00 + 2.4130886609776332e+00 1.8574607331962487e+00 3.4222548470860685e+00 + 1.8504630697479467e+00 1.1720024101622746e+00 3.7228136394241407e+00 + 1.1534747793654794e+00 4.7695416519315614e-01 3.9739133728085552e+00 + 4.8793875647478080e-01 -1.9490134056330710e-01 4.1939254407469830e+00 + 3.2242647711592638e-02 -7.6615557485155805e-01 4.4724633241275775e+00 + -1.2203537980665738e-01 -1.2161580058959507e+00 4.8384101996986955e+00 + 1.7319867763437968e-02 -1.4526617587610857e+00 5.2618108047552381e+00 + 3.4575068700430134e-01 -1.2013451800787491e+00 5.8677327624513040e+00 + id 11861 + loc 8.2203459739685059e-01 4.8780533671379089e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9478965611118059e-01:3.4507846388385099e-01:8.6048882734121412e-01:3.5924785961696443e-01:1.2976505591235497e+00:3.7234262690757103e-01:1.9980494088527190e+00:4.9478470821461951e-01:2.4548131068596604e+00:3.3117541671375339e-01:3.0006844908214152e+00:3.3259252464107808e-01:3.9993042272502750e+00 + CVs 20 + -1.0739156952449641e-01 1.9342968766618249e-01 2.5007531701131558e-01 + -2.1703149540043598e-01 3.8895084647243638e-01 4.9073398849630256e-01 + -3.3313157213182276e-01 5.8759279795134856e-01 7.2587738990314032e-01 + -4.6082367997991625e-01 7.8603532371090590e-01 9.5573252551512711e-01 + -6.0582667128636702e-01 9.7767150339944331e-01 1.1781855979723990e+00 + -7.7111400832308219e-01 1.1551312126271256e+00 1.3938135060742740e+00 + -9.5658303808329437e-01 1.3113518040604797e+00 1.6072073110416958e+00 + -1.1579780890274092e+00 1.4390603456812794e+00 1.8285863056254443e+00 + -1.3644997631498037e+00 1.5298992073253683e+00 2.0739749615573251e+00 + -1.5602999175688910e+00 1.5738153245113591e+00 2.3545109924529086e+00 + -1.7300619805659745e+00 1.5599361271037846e+00 2.6691293729551786e+00 + -1.8634984898130373e+00 1.4795171897945698e+00 3.0072169768228463e+00 + -1.9549414316047777e+00 1.3278894247416755e+00 3.3484676816559431e+00 + -1.9998082797247501e+00 1.1057097939189635e+00 3.6651780173965669e+00 + -1.9889672109969605e+00 8.1698934189327477e-01 3.9305063596458458e+00 + -1.9061670077070505e+00 4.7426987374256807e-01 4.1162586017823788e+00 + -1.7460543764836098e+00 1.1059812387543899e-01 4.1928757564435628e+00 + -1.5279160873447311e+00 -2.4053538568501232e-01 4.1645103416597431e+00 + -1.2834458799915172e+00 -5.9723914993741789e-01 4.1186197561697693e+00 + id 11862 + loc 2.1663044393062592e-01 5.3501391410827637e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2744748878124184e-01:3.4129965394904999e-01:2.5660964713697476e-01:3.6297564812924843e-01:9.8302768409442665e-01:2.6722156541053221e-01:1.5198575514447574e+00:3.0104503584904746e-01:2.5302977164176395e+00:4.2744321430635407e-01:3.0000687660510716e+00:3.4619230241723636e-01:3.6145119036771534e+00 + CVs 20 + 3.6413692163024466e-03 2.8349735558392264e-01 3.4854329053947419e-03 + 2.8097472138331581e-02 5.8486045478288173e-01 -3.4831591289513894e-02 + 6.1447567459416388e-02 8.8657105128437341e-01 -8.2840073241194370e-02 + 1.0230007999840560e-01 1.1929236295313330e+00 -1.3163477690796871e-01 + 1.5049275500486539e-01 1.5135027635588616e+00 -1.9035294024895033e-01 + 2.0311165635010853e-01 1.8618496968259097e+00 -2.7218415083839054e-01 + 2.5893170800020515e-01 2.2420435887970775e+00 -4.0137596793536917e-01 + 3.2705840836751987e-01 2.6367240346623455e+00 -6.1163585055891634e-01 + 4.3483265775631724e-01 2.9880832806977651e+00 -9.1870333773834889e-01 + 6.0413175853947088e-01 3.2141844765968677e+00 -1.2771432519547319e+00 + 8.2019475103832085e-01 3.2747280979890219e+00 -1.6034004173493150e+00 + 1.0574109498737045e+00 3.1867399603929281e+00 -1.8475472130386172e+00 + 1.3319226535992734e+00 2.9984565903789480e+00 -2.0196138787620268e+00 + 1.6845519145275785e+00 2.7492317411523404e+00 -2.1603280719776912e+00 + 2.1045714774970157e+00 2.4280734796842536e+00 -2.3206152698121953e+00 + 2.5114353343427402e+00 2.0036006829836648e+00 -2.5651070160408320e+00 + 2.7758173265558317e+00 1.5234840301468100e+00 -2.9682266305552303e+00 + 2.7917618703756739e+00 1.1370564915099373e+00 -3.5019835055299602e+00 + 2.6402568852954351e+00 9.0775467656454134e-01 -4.0199477482802006e+00 + id 11863 + loc 5.7539188861846924e-01 9.1526454687118530e-01 1053 + blend 0.0000000000000000e+00 + interp 1.4895547812138490e+00:3.8725321034874205e-01:3.1250648829765182e-01:6.1908958738000874e-01:7.6558167975796909e-01:1.4895447812138489e+00:2.3670407922638570e+00:5.3289265921169238e-01:2.7326792422424364e+00:3.3920139605421717e-01:2.8748839998092719e+00:5.2282474725338679e-01:3.1404914617615187e+00:3.3842020530051065e-01:3.9549887790175502e+00 + CVs 20 + 5.8967175071689054e-02 4.6028421348774234e-01 3.0556859136737879e-01 + 3.3075171290919192e-02 8.3659979619347835e-01 5.5348184819495172e-01 + -2.5851176108152019e-02 1.1642261346901432e+00 7.8184588711700120e-01 + -9.4082455520302810e-02 1.4539089607892326e+00 1.0058781198344604e+00 + -1.6817668577707523e-01 1.7006729970559105e+00 1.2234958453422931e+00 + -2.4141428250831021e-01 1.9046841799175567e+00 1.4315769015953623e+00 + -3.0790052448297334e-01 2.0723953053278423e+00 1.6327701095053451e+00 + -3.7127310126240332e-01 2.2152709205075274e+00 1.8395517958159133e+00 + -4.5519512750152180e-01 2.3449340057207815e+00 2.0641675547405214e+00 + -5.9846814128711601e-01 2.4609575211627641e+00 2.3047451210768672e+00 + -8.2744983121044258e-01 2.5156539483009035e+00 2.5298341256334771e+00 + -1.0928536339567549e+00 2.4341885111340353e+00 2.6827259827152936e+00 + -1.2929271892103527e+00 2.1908592836257688e+00 2.7551819868010572e+00 + -1.3359620538531953e+00 1.7849769712876480e+00 2.7712140788118269e+00 + -1.2070427451402228e+00 1.2318447045435326e+00 2.7156009414672413e+00 + -9.8010249749034550e-01 5.7585633190898489e-01 2.5122097355090891e+00 + -7.2872214353251530e-01 -7.9584248140036618e-02 2.0627437988022135e+00 + -4.9806629621371701e-01 -5.0950011585355925e-01 1.3790091292688822e+00 + -3.8388056118906388e-01 -5.3800523048911464e-01 9.6211998904177765e-01 + id 11864 + loc 9.5504641532897949e-01 7.1259766817092896e-01 410 + blend 0.0000000000000000e+00 + interp 3.4378081312629305e-01:3.4377737531816183e-01:1.8934131017964706e-03:2.5905176627239418e-01:7.3558188816692660e-01:3.1415071987200233e-01:1.8329336572214454e+00:2.8284665984254115e-01:2.3771597313403667e+00:2.0174171460266524e-01:3.1971129195382018e+00 + CVs 20 + 4.6230996819776538e-01 3.0880268449486065e-01 -1.3322972682996287e-01 + 8.2905315113409550e-01 5.6748099112699735e-01 -2.5805230506543786e-01 + 1.2068226251725962e+00 8.3100360044928334e-01 -3.8447384051841804e-01 + 1.6485386749086341e+00 1.1114968850019760e+00 -5.2713862779271647e-01 + 2.1618042347309765e+00 1.3764162735811309e+00 -7.1772299912813176e-01 + 2.7360563139260692e+00 1.5762467308877850e+00 -9.9505518372591217e-01 + 3.3381231878116004e+00 1.6578129127736490e+00 -1.3814362623487559e+00 + 3.9307232502756744e+00 1.5786644365711830e+00 -1.8567928260332609e+00 + 4.4944966487943239e+00 1.3123477775414076e+00 -2.3611773537767937e+00 + 5.0102114506256852e+00 8.5214617994155684e-01 -2.8134705423293895e+00 + 5.4425437534607930e+00 2.4284713050766626e-01 -3.1367030755270267e+00 + 5.7780362442279003e+00 -4.2374569851203603e-01 -3.3351962705332090e+00 + 6.0368111985102662e+00 -1.0879039674775046e+00 -3.4966998464808468e+00 + 6.2362847724431099e+00 -1.7220623152906351e+00 -3.6954309073755063e+00 + 6.3846070570319622e+00 -2.3115797221999803e+00 -3.9508355469597154e+00 + 6.4878186055711691e+00 -2.8620867088741027e+00 -4.2373958457078817e+00 + 6.5549218470965371e+00 -3.3974781866854231e+00 -4.5273796121414112e+00 + 6.6067472556702569e+00 -3.9503024607614043e+00 -4.8313601044103107e+00 + 6.6632708436129606e+00 -4.5531130050421496e+00 -5.1890895940494453e+00 + id 11865 + loc 9.0099520981311798e-02 1.3496644794940948e-01 416 + blend 0.0000000000000000e+00 + interp 3.2181012268549886e-01:2.2606852864298488e-01:3.0630051179797113e-02:3.1547490457278671e-01:6.8722757021119452e-01:1.5590867418602500e-01:1.1749306419744834e+00:2.3631871981235539e-01:1.9486708208679182e+00:2.6003026335527119e-01:2.3013166496046544e+00:2.9268198345896662e-01:2.9763407503013779e+00:3.2180690458427202e-01:3.5975684295227222e+00 + CVs 20 + -1.8629530228215208e-01 1.1568066582370219e-01 -2.9957962030530499e-01 + -3.4625013689191242e-01 1.9516906525719410e-01 -4.4679989837869433e-01 + -5.0928958770688726e-01 2.6214598390734767e-01 -5.4446159843944253e-01 + -6.8313263177028327e-01 3.3184428504455460e-01 -6.4091191821863991e-01 + -8.6563804814705259e-01 4.0367398983872227e-01 -7.3921010033500112e-01 + -1.0546565792413682e+00 4.7706218511970805e-01 -8.4463908567118273e-01 + -1.2473548899837086e+00 5.5082491850304471e-01 -9.6334396627598573e-01 + -1.4400954445295351e+00 6.2286373596504507e-01 -1.1010956562999601e+00 + -1.6296036712490229e+00 6.9127430011132185e-01 -1.2641366514711267e+00 + -1.8121786028931006e+00 7.5468129747901969e-01 -1.4602953071231166e+00 + -1.9803083850006304e+00 8.0796214491021767e-01 -1.6946871627958844e+00 + -2.1232749620267217e+00 8.3942553314644341e-01 -1.9632185399826438e+00 + -2.2314924561381115e+00 8.3855983923409094e-01 -2.2532017620581311e+00 + -2.2982204476247339e+00 8.0454505903784979e-01 -2.5468394452997694e+00 + -2.3212449814242513e+00 7.4394373456252061e-01 -2.8237523360223218e+00 + -2.3047749029797373e+00 6.6224863286821645e-01 -3.0729009886082590e+00 + -2.2554385288092798e+00 5.5963214895438007e-01 -3.2973269288343827e+00 + -2.1787747571810154e+00 4.3494942078214616e-01 -3.4992208744665723e+00 + -2.0855809749516139e+00 3.1528586147972204e-01 -3.6051090995122950e+00 + id 11866 + loc 9.0199273824691772e-01 6.8142455816268921e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7818081534463069e-01:4.0401312489683538e-01:3.3207433963858601e-01:4.2430105027078485e-01:9.4551796528696486e-01:2.8512266805631287e-01:1.1386162005532836e+00:2.8373080071115969e-01:2.1499313648823692e+00:3.5250662604087585e-01:2.8411491597073106e+00:4.3813942740521339e-01:3.0567612169620357e+00:4.7817603353647725e-01:3.5287393351929222e+00:4.2201776979349642e-01:3.9907162124687385e+00 + CVs 20 + -1.8249672806750367e-01 1.9973519698088193e-01 1.6312154946294000e-01 + -3.5205955793266630e-01 3.7975949539787979e-01 3.0123527143472817e-01 + -5.0789222431964598e-01 5.5488891496770543e-01 4.2485091987873846e-01 + -6.5095029446155073e-01 7.4009067814379859e-01 5.4488815345610864e-01 + -7.9250702326964240e-01 9.4471319727892156e-01 6.5985442850490161e-01 + -9.5032121592222574e-01 1.1756785315959046e+00 7.6362537140826969e-01 + -1.1455171702464626e+00 1.4312035032008383e+00 8.4271312343412308e-01 + -1.3936648970866379e+00 1.6952702710496097e+00 8.7663652252812518e-01 + -1.6877756331616298e+00 1.9425195444839365e+00 8.4554303259666252e-01 + -1.9910740079564901e+00 2.1495772701615179e+00 7.4019123455532299e-01 + -2.2640284709664074e+00 2.3086317185935625e+00 5.6898640520024535e-01 + -2.4965336029579688e+00 2.4264084455699706e+00 3.4694611945671694e-01 + -2.6918449765881243e+00 2.5107647527898593e+00 8.0801013305813130e-02 + -2.8408069875568218e+00 2.5625556518970880e+00 -2.3499258803429801e-01 + -2.9269822358784485e+00 2.5706155393644652e+00 -6.2029651675497888e-01 + -2.9430611854764033e+00 2.4828011056474626e+00 -1.0511462528023021e+00 + -2.8585912997799463e+00 2.2399373010928243e+00 -1.4301345286404969e+00 + -2.6826184512072415e+00 1.8246873213212376e+00 -1.6763668512225569e+00 + -2.7886796668330187e+00 1.6361592322510310e+00 -1.4353774630626523e+00 + id 11867 + loc 5.4740071296691895e-01 3.1065782904624939e-01 1054 + blend 0.0000000000000000e+00 + interp 4.3982306707344976e-01:4.3981866884277904e-01:2.8339945258368138e-02:3.5123560523422392e-01:5.6638526594061678e-01:4.2766856384168656e-01:1.0004648652654953e+00:2.8047319312656627e-01:1.9222185783580554e+00:3.9318697082579562e-01:2.8732839455653796e+00:4.1145888713269951e-01:3.4938035289057154e+00 + CVs 20 + -1.8783107179308522e-01 3.8475403146181719e-01 1.8671334433300557e-01 + -3.7098219136058092e-01 7.8095549531872255e-01 3.4116973806556011e-01 + -5.2762692405584632e-01 1.2045643211045687e+00 4.4959688060280162e-01 + -6.8009222369763955e-01 1.6335602157265365e+00 5.2126678823925410e-01 + -8.9060635477363947e-01 2.0197356149280559e+00 5.9237329978438991e-01 + -1.1966308010032858e+00 2.3062945308706748e+00 7.0294233863399824e-01 + -1.5835897355463724e+00 2.4370358319311531e+00 8.7279940187807681e-01 + -2.0199436684562495e+00 2.3675543076436667e+00 1.0915724724317533e+00 + -2.4737396168034600e+00 2.0729016640703479e+00 1.3105452765704295e+00 + -2.9313085442530280e+00 1.5807319038270515e+00 1.4475297433692007e+00 + -3.4287923412122576e+00 1.0083325108229841e+00 1.4198566273790048e+00 + -3.9832132612882791e+00 6.0009523149750521e-01 1.2915850975275927e+00 + -4.4567802543203463e+00 5.9847189882711538e-01 1.3978899320784601e+00 + -4.5003201143762412e+00 8.8590375734480931e-01 1.8527340629777629e+00 + -4.3671720133133203e+00 1.0687169069740163e+00 2.2781944740495845e+00 + -4.5029864780666893e+00 1.1136637215208562e+00 2.6724528392178928e+00 + -5.1076744724284850e+00 9.0977574885679680e-01 3.0377932808538040e+00 + -6.0919432186942419e+00 2.6327368649403571e-01 3.0534434196447391e+00 + -6.6516388304897465e+00 1.3497928492476197e-01 3.1889696293629752e+00 + id 11868 + loc 1.3379634916782379e-01 4.3393203616142273e-01 384 + blend 0.0000000000000000e+00 + interp 4.8539270582153199e-01:4.8538785189447381e-01:4.0815364532606035e-02:2.8465109558153062e-01:4.4132483439228742e-01:3.2738489454125580e-01:1.0969514338248532e+00:3.4169449173078509e-01:2.3004370509186720e+00 + CVs 20 + -4.2426645644570316e-01 2.7606220776057155e-01 -1.2133009551135183e+00 + -7.5871984717713215e-01 3.6730529105879117e-01 -1.9259009785219106e+00 + -1.0760446661365435e+00 3.8227431251853738e-01 -2.5325818962495923e+00 + -1.3913853712064754e+00 3.6233913460178668e-01 -3.1925880641733784e+00 + -1.6945176350569078e+00 2.8022722975831216e-01 -3.8974881540765560e+00 + -1.9812136368718676e+00 1.1702438196237414e-01 -4.6249854639545491e+00 + -2.2597049772245539e+00 -1.3287368316353676e-01 -5.3475571417079735e+00 + -2.5420162453977562e+00 -4.6576724170321543e-01 -6.0332345459186500e+00 + -2.8248944635663280e+00 -8.6348037369269415e-01 -6.6361493048326388e+00 + -3.1026314286599677e+00 -1.2968582675278584e+00 -7.1254142648648644e+00 + -3.3779474283837443e+00 -1.7318041261453896e+00 -7.4958184169667224e+00 + -3.6594695081675210e+00 -2.1411211595845256e+00 -7.7668357917583410e+00 + -3.9543868755938281e+00 -2.5159075874812746e+00 -7.9736495303132999e+00 + -4.2630480507644180e+00 -2.8678066353587162e+00 -8.1514566779007520e+00 + -4.5801786136225804e+00 -3.2214925621371240e+00 -8.3179261935985398e+00 + -4.8989582997751970e+00 -3.6049788567484500e+00 -8.4679803068342352e+00 + -5.2134697127680507e+00 -4.0389252832762983e+00 -8.5798799553375122e+00 + -5.5041617958852989e+00 -4.5237258474973441e+00 -8.6231962937844280e+00 + -5.6920299652856183e+00 -4.9884756393817247e+00 -8.5487114487820293e+00 + id 11869 + loc 1.9719980657100677e-01 1.4140279963612556e-03 1075 + blend 0.0000000000000000e+00 + interp 4.4972975164101719e-01:4.3547237583763726e-01:8.1916992932627219e-02:3.3561556947827292e-01:9.9799155668395523e-01:4.0808676612645567e-01:1.5595030508307945e+00:2.6056640892978622e-01:2.0018892126914967e+00:3.0306021779356601e-01:2.7064897627853139e+00:4.4972525434350080e-01:3.1399516963531600e+00:3.4428922825862779e-01:3.8223795990920078e+00 + CVs 20 + -1.6620450252772359e-01 3.2086088386258560e-01 4.2869847000919115e-02 + -3.4705509947282026e-01 6.5455390875866304e-01 1.1558814831589290e-01 + -5.3009159372779435e-01 9.9795112495932092e-01 2.1605803311677019e-01 + -7.3148992011481428e-01 1.3472984852351404e+00 3.2509287809654380e-01 + -9.8016982331864611e-01 1.6951934037021219e+00 4.1636602194231864e-01 + -1.2938012390635365e+00 2.0272016787136646e+00 4.6728879812454671e-01 + -1.6810440113678335e+00 2.3246804342933873e+00 4.4775363071890573e-01 + -2.1389860655837434e+00 2.5520844225922872e+00 3.0024171608724370e-01 + -2.6159998763533263e+00 2.6352430711993828e+00 -2.8626329834884556e-02 + -3.0203630898218172e+00 2.5205141760442653e+00 -4.8781485702546923e-01 + -3.3247356989437136e+00 2.2262199704370591e+00 -9.5668701283171365e-01 + -3.5663208229217047e+00 1.7897772897210387e+00 -1.3104818702971872e+00 + -3.7820547139182756e+00 1.2644236646527278e+00 -1.4833686957516634e+00 + -3.9513812118714031e+00 6.5675039633063947e-01 -1.5912057537673217e+00 + -4.0038962152337190e+00 -6.1280905177970135e-02 -1.8180419177640430e+00 + -3.8988941828007575e+00 -7.5878573910214664e-01 -2.2971831268644181e+00 + -3.6958331179370472e+00 -1.2044145063832232e+00 -3.0380994212842243e+00 + -3.4918005260143077e+00 -1.3643224093465982e+00 -3.8204750075558453e+00 + -3.3244677060504069e+00 -1.6583369061875997e+00 -4.2512642576033564e+00 + id 11870 + loc 8.0483841896057129e-01 4.6679833531379700e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8394750346382231e-01:4.8394266398878771e-01:4.4898842008668560e-02:3.9220180318979331e-01:6.6923221924591081e-01:3.8411560824808749e-01:1.2545838701227194e+00:3.7329364796007353e-01:2.0045635852265664e+00:2.5289082388918543e-01:2.7822876647649601e+00:3.8253827130625268e-01:3.6990948735645803e+00 + CVs 20 + -2.7055745148591803e-01 2.5331425382424300e-01 1.9225838546066265e-01 + -5.1608844516978081e-01 5.0151469562727680e-01 3.6162641295364850e-01 + -7.5027251234650172e-01 7.3553673134910158e-01 5.1727936840597644e-01 + -9.7745963674940151e-01 9.5587845147772832e-01 6.6065609172544359e-01 + -1.1886403983387099e+00 1.1727188240505164e+00 7.8745556374851811e-01 + -1.3855071476510261e+00 1.3966144817709500e+00 9.2010414898840320e-01 + -1.5855479107969572e+00 1.6204011713422894e+00 1.1026802837654159e+00 + -1.8016988401306868e+00 1.8373053643079649e+00 1.3523607936281588e+00 + -2.0393368891459884e+00 2.0554803163301774e+00 1.6611498335880164e+00 + -2.3142499435658248e+00 2.2817258317911970e+00 2.0242433039437984e+00 + -2.6656715632551329e+00 2.5005978413488852e+00 2.4443414699513020e+00 + -3.1475243318750787e+00 2.6635237450536358e+00 2.9270036979002452e+00 + -3.7703121078342510e+00 2.6662555702029618e+00 3.4805882741565326e+00 + -4.4037581307051497e+00 2.3893482110059283e+00 4.0690697041274602e+00 + -4.8730295374935073e+00 1.8494580336654995e+00 4.5961449731971653e+00 + -5.1733017515458393e+00 1.0894221042027061e+00 4.9970783682724207e+00 + -5.2561088719393849e+00 -7.8260080016304245e-02 5.2631354274212798e+00 + -4.6805667559471624e+00 -1.1976811699983461e+00 5.4269533799812288e+00 + -4.4115505739616196e+00 -1.1653510182569506e+00 5.5008973655127651e+00 + id 11871 + loc 6.2099760770797729e-01 3.3697551488876343e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8129244304304408e-01:3.5607649370604488e-01:2.1786112773691801e-04:3.9810180578359744e-01:4.3957211049635259e-01:2.9950167831866409e-01:1.1920544505760418e+00:2.8473402842126422e-01:1.9590230254922765e+00:2.9444123637001457e-01:2.9535354603429327e+00:4.8128763011861370e-01:3.2574180820161978e+00 + CVs 20 + 2.4815161874557226e-01 3.8202244557055270e-01 -1.7615134036455263e-01 + 4.4174018848745739e-01 7.4566892600395107e-01 -3.1200858479415550e-01 + 5.9921218361848405e-01 1.1170032187254118e+00 -4.4599697918697323e-01 + 7.4744376706765248e-01 1.5033766490558975e+00 -5.7531450015234509e-01 + 9.2252377052382450e-01 1.8985583483820698e+00 -6.6777783620816999e-01 + 1.1429827287023433e+00 2.2838504732713418e+00 -6.9852135157101902e-01 + 1.3966610925491125e+00 2.6294969125749916e+00 -6.6359823356215930e-01 + 1.6544047572467866e+00 2.9142276421856996e+00 -5.7693567224442988e-01 + 1.9004323059319954e+00 3.1335274075463690e+00 -4.3870129976639327e-01 + 2.1312193525094294e+00 3.2723556180882145e+00 -2.0828195682247630e-01 + 2.3363593321849341e+00 3.2954290706807225e+00 1.6272171303201244e-01 + 2.5034970184110645e+00 3.1343549048668038e+00 6.7592989608213494e-01 + 2.6179990203342607e+00 2.7708456372420889e+00 1.1520324251198388e+00 + 2.6787731903323762e+00 2.3795585135984969e+00 1.3881652027863662e+00 + 2.7108590904473644e+00 2.0927211802737280e+00 1.3967061675122392e+00 + 2.7324652920375030e+00 1.8801316930368059e+00 1.2638445514235048e+00 + 2.7359311074144816e+00 1.6502985213986552e+00 1.0978091126602645e+00 + 2.6904030189498940e+00 1.3820145663396028e+00 1.0959108527928567e+00 + 2.5443462896832822e+00 1.1682877489008441e+00 1.4613646031046366e+00 + id 11872 + loc 1.5625925734639168e-03 1.5727369114756584e-02 1074 + blend 0.0000000000000000e+00 + interp 3.4497367195018036e-01:2.2071899225352862e-01:7.4636840332125853e-01:2.6599237106600909e-01:1.2887129806435049e+00:2.9642291442193375e-01:2.4292542512968995e+00:3.1972389539418244e-01:3.0093794410045089e+00:3.4497022221346085e-01:3.8837676090783297e+00 + CVs 20 + -1.6043143591723710e-01 3.9710494196202162e-01 -9.9042255306064808e-02 + -3.5572562756532078e-01 7.8216102934973364e-01 -1.9785846392997716e-01 + -5.7496961163356897e-01 1.1651782987869188e+00 -2.6271564301253719e-01 + -8.0080702919445446e-01 1.5506950669661570e+00 -2.7021490890208566e-01 + -1.0177212951514074e+00 1.9250376287627180e+00 -2.1293982190477639e-01 + -1.2309110856997469e+00 2.2337045390093713e+00 -1.1452590208442504e-01 + -1.4451309729867505e+00 2.4072966932260633e+00 -1.9710436621712790e-02 + -1.6344556135103920e+00 2.4384431633568595e+00 5.2664175904450938e-02 + -1.7809864119140300e+00 2.3766575872947553e+00 1.1121688860358048e-01 + -1.9265348216034395e+00 2.2571126094789520e+00 1.4308219890411272e-01 + -2.0959138077494432e+00 2.0603512643792019e+00 1.0032780131228430e-01 + -2.2378499313876548e+00 1.7942747237960313e+00 -2.1255162267104721e-02 + -2.3191208700877630e+00 1.5075254564281064e+00 -1.6587018183773311e-01 + -2.3509701520134292e+00 1.2630630267987915e+00 -2.4667525675934959e-01 + -2.3737702996273140e+00 1.1171544814571814e+00 -2.1988076603424611e-01 + -2.4155861455881347e+00 1.0641969424048625e+00 -1.4800091931593493e-01 + -2.5040001334505209e+00 1.0913003944585520e+00 -9.5379924458386889e-02 + -2.5903070506498604e+00 1.1044707066630750e+00 -1.0230078349281990e-01 + -2.3011655824774664e+00 9.5085534003914529e-01 4.7453795000101273e-02 + id 11873 + loc 4.1266456246376038e-01 5.4408389329910278e-01 1048 + blend 0.0000000000000000e+00 + interp 3.0963388420257831e-01:3.0963078786373632e-01:1.2585609293622846e-02:2.9888402836945688e-01:7.6934344731511106e-01:2.8443713692125638e-01:1.7209618024832676e+00:2.6783752274115785e-01:2.9298509293779964e+00:2.7493934959134431e-01:3.4032128723251178e+00 + CVs 20 + 1.0173832612179284e-01 6.6417350588955704e-01 -3.1191764936990457e-01 + 1.9061050764974771e-01 1.2794165394940846e+00 -5.3321918318167849e-01 + 2.7636243453410297e-01 1.8754552272192970e+00 -6.8575086555470510e-01 + 3.9202835683909382e-01 2.4987314797378390e+00 -7.7443930458550936e-01 + 6.0462440584947708e-01 3.1618690837603136e+00 -7.7663094568833457e-01 + 9.7663811649568832e-01 3.8353126731176568e+00 -6.9918819599893023e-01 + 1.5688434706001408e+00 4.4607337084220147e+00 -5.8134438602887806e-01 + 2.4138123473827422e+00 4.9094450224921333e+00 -4.8963730618012269e-01 + 3.4361702652974273e+00 5.0327291051555196e+00 -5.2540311172623144e-01 + 4.4991294216850379e+00 4.7510516390122017e+00 -7.6466407577980111e-01 + 5.4358406435535400e+00 4.0309939411492932e+00 -1.1535076329586067e+00 + 6.0514565688229123e+00 2.9698063419141505e+00 -1.5015190091070569e+00 + 6.2604345603082985e+00 1.8558231710053541e+00 -1.6565407415152926e+00 + 6.1598309845005295e+00 1.0043215272958874e+00 -1.6068484309284927e+00 + 5.9000008032094859e+00 6.5405990550272253e-01 -1.4165942450625075e+00 + 5.2486488878214459e+00 1.3346496182210597e+00 -8.1736157221052652e-01 + 1.6735195098174895e+00 -7.1845510211170172e-01 1.4255917505023132e+00 + 2.0626708973492924e+00 -2.1183902360893412e+00 9.7802059245406037e-01 + 2.1669790270647664e+00 -1.7748928303261133e+00 8.2360209436640708e-01 + id 11874 + loc 4.7501921653747559e-01 6.2900501489639282e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3751054408469314e-01:2.7610057514304903e-01:1.3653773959835735e-01:3.5748438303840668e-01:9.5579110623199315e-01:3.8762774901765534e-01:1.5544100599335213e+00:2.8546719409869925e-01:2.0059223132830266e+00:2.9130048850711404e-01:2.7768535361640234e+00:3.8945928344947933e-01:3.0891824234247247e+00:4.3750616897925232e-01:3.8308068432962648e+00 + CVs 20 + 1.0245153710989049e-01 3.3050536525712970e-01 -1.8625590954711418e-01 + 2.1692941973178848e-01 6.7291719337458178e-01 -3.7756793047294057e-01 + 3.3663340476114439e-01 1.0228944320451197e+00 -5.6560218140564422e-01 + 4.5887483339106250e-01 1.3757314374108074e+00 -7.5458925598736959e-01 + 5.8475420845059323e-01 1.7262488977027919e+00 -9.5866181403917450e-01 + 7.1795169517963942e-01 2.0615700272200304e+00 -1.1957897589976494e+00 + 8.6602386028310652e-01 2.3572001442312844e+00 -1.4815971114501094e+00 + 1.0381180433946635e+00 2.5823806041265773e+00 -1.8178889805322944e+00 + 1.2414497623858700e+00 2.7093773472409186e+00 -2.1906570622358350e+00 + 1.4743326595420392e+00 2.7219086160308730e+00 -2.5773797720733200e+00 + 1.7229054758879174e+00 2.6248113783006644e+00 -2.9581922127606703e+00 + 1.9707915896283361e+00 2.4443385611650825e+00 -3.3280972889208442e+00 + 2.2061564756533696e+00 2.2090870093993296e+00 -3.7011527974763223e+00 + 2.4039805725451231e+00 1.9314940136674243e+00 -4.0996821281021596e+00 + 2.5042249928968658e+00 1.6269076337354609e+00 -4.5352398214360710e+00 + 2.4304599954906982e+00 1.3564519636641943e+00 -4.9911020873488399e+00 + 2.1538885361579756e+00 1.2195842699648691e+00 -5.4107718160433427e+00 + 1.7529924014875946e+00 1.2180784801337836e+00 -5.7462779044861918e+00 + 1.4278661779753048e+00 1.0530945289167921e+00 -6.2060341448465230e+00 + id 11875 + loc 8.9383697509765625e-01 2.9480475187301636e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3117180300190947e-01:5.3116649128387949e-01:4.5137367276718932e-01:3.6873164480910214e-01:9.7178487816208803e-01:3.3166819454568985e-01:1.8469401724677064e+00:3.9255589192170698e-01:2.2437694803041750e+00:3.1349368435832442e-01:2.9483937774896960e+00:3.2872479183017794e-01:3.8962588609533730e+00 + CVs 20 + 1.9824278463599992e-01 3.5099094147315957e-01 -1.7525034201345269e-01 + 4.0447052909856740e-01 7.0276487086158235e-01 -3.4486762068547688e-01 + 6.1808983254822203e-01 1.0550489825504363e+00 -5.1595259661791459e-01 + 8.4537626600698745e-01 1.4006642777168676e+00 -6.9335938148169440e-01 + 1.0986372896314274e+00 1.7271811947842952e+00 -8.7969913889497042e-01 + 1.3942275281292642e+00 2.0181484748048417e+00 -1.0759870260136644e+00 + 1.7538311969946530e+00 2.2493958686340751e+00 -1.2790150395731896e+00 + 2.1956272764770626e+00 2.3845987942427662e+00 -1.4749351864633851e+00 + 2.7144575440173444e+00 2.3792771595029869e+00 -1.6386211552169569e+00 + 3.2762660045579750e+00 2.1875118459791443e+00 -1.7414759645542262e+00 + 3.8038528502975768e+00 1.7746361530782147e+00 -1.7562341538911528e+00 + 4.1861612302123969e+00 1.1645861433507716e+00 -1.6756266025741640e+00 + 4.3510947570778189e+00 4.4943313882104396e-01 -1.5178509048606883e+00 + 4.3185331780871206e+00 -2.5827644272547279e-01 -1.3021520283986756e+00 + 4.1652644084920558e+00 -9.1554632538451908e-01 -9.9284137248442594e-01 + 3.9540696013431660e+00 -1.5100248459291423e+00 -4.7604123036166346e-01 + 3.7596636967259753e+00 -1.9256314284993987e+00 3.2231832077017808e-01 + 3.6518291157924421e+00 -2.0540281789696890e+00 1.1873047593975641e+00 + 3.5962612133753025e+00 -2.1073602818943642e+00 1.6694633537306915e+00 + id 11876 + loc 8.3392262458801270e-01 9.9230200052261353e-01 1054 + blend 0.0000000000000000e+00 + interp 4.6112167224180617e-01:2.4187922432654743e-01:4.1652447534666293e-01:3.7564127895901950e-01:9.8876902604429073e-01:4.6111706102508376e-01:1.2252141848590341e+00:5.4317612279370570e-02:2.8166616145233396e+00:1.9788942507728377e-01:3.8331174516509341e+00 + CVs 20 + 4.9813119781819803e-01 3.9617262650676577e-01 -1.9827408408409125e-01 + 9.3089140990341757e-01 7.8914598642369516e-01 -3.0094081382194743e-01 + 1.2972873127170703e+00 1.1820829110091586e+00 -3.2444273374585053e-01 + 1.6232033258198544e+00 1.5031734938618422e+00 -2.9144042007051452e-01 + 1.9248731472895035e+00 1.6926486059863466e+00 -2.3285119169079338e-01 + 2.2070652916618476e+00 1.7674170671811895e+00 -1.6891877731759330e-01 + 2.4772301592964876e+00 1.7608864647938540e+00 -1.0340063294430668e-01 + 2.7495006352850693e+00 1.6836468209414859e+00 -3.1909679421499693e-02 + 3.0224018266308907e+00 1.5284562919944307e+00 5.4323458238538125e-02 + 3.2752532420046299e+00 1.2875513375668577e+00 1.7165276735500412e-01 + 3.4836381053810772e+00 9.8238723700981356e-01 3.4809731034225355e-01 + 3.6521411049165868e+00 6.6902103165440119e-01 6.2629895468919505e-01 + 3.8548014086324249e+00 3.8817004562973878e-01 1.0324350387892489e+00 + 4.2317651853613585e+00 1.7718260664005814e-01 1.4748206197302038e+00 + 4.7925821789150849e+00 7.1992824927798460e-02 1.7877542706818152e+00 + 5.4297200583191660e+00 2.5143359372716612e-02 1.9557422968211529e+00 + 5.9812831381217659e+00 -4.9216384352067877e-02 2.0775889673230958e+00 + 6.2491116653540111e+00 -1.6187557952319498e-01 2.2664211219133366e+00 + 6.6580961495862505e+00 -5.0399842290719932e-01 2.5757906677015217e+00 + id 11877 + loc 5.5697351694107056e-01 6.7745864391326904e-01 416 + blend 0.0000000000000000e+00 + interp 5.4896479744712645e-01:2.6637070377811345e-01:3.8812198158101863e-01:4.8182232976200495e-01:8.4266769242097239e-01:5.4895930779915203e-01:2.4152825469845656e+00:4.1766457219826597e-01:2.9307531885106046e+00:4.5477331015260952e-01:3.5300279559614638e+00 + CVs 20 + 8.1536276818731201e-01 1.5703364787717555e-01 -1.8706935982219608e-01 + 1.3532523115011279e+00 1.7124460754522969e-01 -3.5757896574963666e-01 + 1.8388074933422878e+00 1.4178288581894277e-01 -4.9534919894424984e-01 + 2.3415083922587154e+00 9.7616766985537562e-02 -5.9670109792202952e-01 + 2.8498783521681506e+00 3.3565515152099046e-02 -6.5730135424838720e-01 + 3.3532421059768458e+00 -5.2780788907228704e-02 -6.6920649754662087e-01 + 3.8397706116558341e+00 -1.6193578408057152e-01 -6.2578628090833788e-01 + 4.2976395014565787e+00 -2.9362905202724132e-01 -5.2522899229383258e-01 + 4.7179244379690131e+00 -4.4732670233774363e-01 -3.6831660969907848e-01 + 5.0937324325432156e+00 -6.2306195779937257e-01 -1.5882540937026263e-01 + 5.4186701158824393e+00 -8.2516738514530874e-01 8.6823968453121014e-02 + 5.6971571589994685e+00 -1.0690878125373897e+00 3.3767445474279817e-01 + 5.9425674223162410e+00 -1.3752719918763583e+00 5.6541149901542498e-01 + 6.1575867319354689e+00 -1.7504430422958139e+00 7.5887162745626069e-01 + 6.3307562782222551e+00 -2.1833092501746023e+00 9.1624387874453750e-01 + 6.4514190387232286e+00 -2.6560796581067478e+00 1.0283031664966562e+00 + 6.5174560548474352e+00 -3.1508609646563990e+00 1.0797049971746158e+00 + 6.5363995699910484e+00 -3.6469748894106138e+00 1.0669056876278797e+00 + 6.5575735979566749e+00 -4.0839341350148359e+00 1.1102652583838166e+00 + id 11878 + loc 5.3755909204483032e-02 1.3522182404994965e-01 384 + blend 0.0000000000000000e+00 + interp 5.1168491228278468e-01:3.4444512367034047e-01:6.1178340340805903e-01:3.3866304037955364e-01:1.1243013277519001e+00:3.5595416370808519e-01:1.6933957566497972e+00:1.8756631212281294e-01:2.3149206898902790e+00:4.0108724799146067e-01:2.8594499820829498e+00:5.1167979543366182e-01:3.0180043204786142e+00:4.7694282664280602e-01:3.4506498084985253e+00:3.8140322252938602e-01:3.9999935383771419e+00 + CVs 20 + -4.2016103514506753e-01 2.2752345629701973e-01 -1.0950674935251208e+00 + -7.5469067042567939e-01 2.8197782582377817e-01 -1.8062358191367511e+00 + -1.0707634613679780e+00 2.7297037771431643e-01 -2.4323693483612687e+00 + -1.3876901150586567e+00 2.4717579878386639e-01 -3.0998256186973117e+00 + -1.6939531337734524e+00 1.9517480078176119e-01 -3.7930072298451654e+00 + -1.9830447573338819e+00 1.1078109305310346e-01 -4.4920443278328532e+00 + -2.2564404062695380e+00 -9.5328264274207042e-03 -5.1788698159804145e+00 + -2.5205097697343350e+00 -1.7276366863033410e-01 -5.8428183087071268e+00 + -2.7839311836239569e+00 -3.9253735601463868e-01 -6.4815753273159977e+00 + -3.0482238732451599e+00 -6.7180644302023718e-01 -7.0797013446008910e+00 + -3.3105049268975160e+00 -9.9802827800325722e-01 -7.6167416700297670e+00 + -3.5684947471904325e+00 -1.3515091239677433e+00 -8.0845279600686411e+00 + -3.8189788769020345e+00 -1.7136720488887311e+00 -8.4886222964676605e+00 + -4.0589818005842826e+00 -2.0785186361053949e+00 -8.8451979902402194e+00 + -4.2908403361376992e+00 -2.4535561442586848e+00 -9.1646177805677347e+00 + -4.5274139857496216e+00 -2.8485272192807347e+00 -9.4407146114789526e+00 + -4.7830693395933235e+00 -3.2645244357714782e+00 -9.6589129709454102e+00 + -5.0521529335822795e+00 -3.6842774596684791e+00 -9.7978462799987174e+00 + -5.1716845298029765e+00 -3.9358752695373096e+00 -9.7623510153698270e+00 + id 11879 + loc 8.1263649463653564e-01 6.9564849138259888e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2055322903092673e-01:3.5192990764903082e-01:2.2808881593138608e-01:3.3418781092649402e-01:9.6746027076667629e-01:3.4959007995151242e-01:1.4851341545484262e+00:3.7469514646514857e-01:2.0725520131370998e+00:4.2054902349863643e-01:2.8193543581614997e+00:3.1820928299388523e-01:3.4266763764245454e+00 + CVs 20 + 2.0745506538560182e-01 2.1508724917394026e-01 -3.8787420351515051e-01 + 4.0877974420907398e-01 4.1141697833730673e-01 -7.2251964620579023e-01 + 5.9884787779984361e-01 5.8904013275991418e-01 -1.0328673001301689e+00 + 7.7659166421729531e-01 7.5353714017847528e-01 -1.3337289330785849e+00 + 9.4014239744491590e-01 9.1247400281129376e-01 -1.6339974603990424e+00 + 1.0844374591078236e+00 1.0711530932383266e+00 -1.9387274306405804e+00 + 1.2034851628764087e+00 1.2275295653495033e+00 -2.2430511544431528e+00 + 1.2961306873102991e+00 1.3755124129913787e+00 -2.5374920775181495e+00 + 1.3676621072886816e+00 1.5116411552217999e+00 -2.8184133324714651e+00 + 1.4263748674385073e+00 1.6370462155166852e+00 -3.0920738213370935e+00 + 1.4807962356954927e+00 1.7503783903331642e+00 -3.3762787217392543e+00 + 1.5397380705285739e+00 1.8371113714715663e+00 -3.6950943931610554e+00 + 1.6088789658125724e+00 1.8711810171553560e+00 -4.0608586247745846e+00 + 1.6901328069221262e+00 1.8254203332268295e+00 -4.4669427384757743e+00 + 1.7891442822675914e+00 1.6815961019950709e+00 -4.8975301821833179e+00 + 1.9081532929208724e+00 1.4275694279967492e+00 -5.3372214438911731e+00 + 2.0146132194985986e+00 1.0597429418701587e+00 -5.7671899044782720e+00 + 2.0425386390232396e+00 6.1329304249671901e-01 -6.1547967205065124e+00 + 1.9943649340464260e+00 2.5558314232085311e-01 -6.4282957466754089e+00 + id 11880 + loc 9.1819691658020020e-01 8.2953262329101563e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8848293234650766e-01:3.8269909951956521e-01:3.4623721975622579e-02:3.4293463033019705e-01:7.7513073859446457e-01:3.8847904751718421e-01:1.1602069505320354e+00:2.9518522730538987e-01:1.8915452777016544e+00:3.7449905402886657e-01:2.2612681503861052e+00:2.6486125233824809e-01:2.9177842471855175e+00:2.5915628963905851e-01:3.7323757362634158e+00 + CVs 20 + 1.4661304603414668e-01 3.5726187140771160e-01 -4.5734532484053014e-03 + 3.0750835577259755e-01 7.1471661115817609e-01 -6.2846493430134751e-02 + 4.8372770789856667e-01 1.0666208303989724e+00 -1.4702867327113017e-01 + 6.8030719874528367e-01 1.4126100106743937e+00 -2.4331208292728851e-01 + 9.0140123803278671e-01 1.7527132769670364e+00 -3.5225355086696813e-01 + 1.1432007559402015e+00 2.0767750001632415e+00 -4.9483872326205092e-01 + 1.3862987861955536e+00 2.3583372969515204e+00 -7.0953475302943469e-01 + 1.5992058149313280e+00 2.5486687986634151e+00 -1.0058366222318365e+00 + 1.7477308841577734e+00 2.5865073747896234e+00 -1.3409063961453032e+00 + 1.8166120246608763e+00 2.4461848461788009e+00 -1.6524810007547510e+00 + 1.8179710731658802e+00 2.1443334388423616e+00 -1.8992406621487938e+00 + 1.7888296705322770e+00 1.7023140574767779e+00 -2.0769818833497955e+00 + 1.7921798312612627e+00 1.1385090571446048e+00 -2.2278497553728038e+00 + 1.8967463440225689e+00 4.8842124085818417e-01 -2.4586834708029297e+00 + 2.1582199023224131e+00 -1.3059105067464882e-01 -2.9421798907769521e+00 + 2.5911389838200214e+00 -4.0441260420894998e-01 -3.7998723042702407e+00 + 3.0404260457529557e+00 5.3601993618602295e-02 -4.7573558404634326e+00 + 3.2959081687500307e+00 8.3515427299517442e-01 -5.3188867525770016e+00 + 3.4666916910255234e+00 1.2242913703001603e+00 -5.6754884491891175e+00 + id 11881 + loc 9.4348776340484619e-01 6.2377160787582397e-01 1074 + blend 0.0000000000000000e+00 + interp 5.2572903476958222e-01:3.3666563265649752e-01:2.8225436617942101e-01:5.1413724110901216e-01:9.7488548090034344e-01:3.3330851583238963e-01:1.4771353006287173e+00:4.1650431264344911e-01:2.0155760541629997e+00:3.8823245178491728e-01:2.4611063164874842e+00:5.2572377747923449e-01:3.0003328191673977e+00:3.9142829165753201e-01:3.6972294973755977e+00 + CVs 20 + 1.6993132395535698e-01 2.5444566873856328e-01 -3.3052360972559891e-01 + 3.4473944792285854e-01 4.8557250783727685e-01 -6.2156050911320870e-01 + 5.3027694568828398e-01 6.8872612727416871e-01 -8.8745268782881592e-01 + 7.2641320573753931e-01 8.5803028668166181e-01 -1.1318991614470963e+00 + 9.2795556479865182e-01 9.8845513630033277e-01 -1.3530007509718349e+00 + 1.1296553054440510e+00 1.0804573753288496e+00 -1.5515847955167645e+00 + 1.3295568845493639e+00 1.1392985213675477e+00 -1.7322140354002693e+00 + 1.5300857644890320e+00 1.1712504626910929e+00 -1.9044538381075204e+00 + 1.7320097213611694e+00 1.1783863699069737e+00 -2.0826842557395864e+00 + 1.9284747695712294e+00 1.1579867712978511e+00 -2.2781133152425372e+00 + 2.1102630534226323e+00 1.1063231260537485e+00 -2.4923278296116882e+00 + 2.2701114443517798e+00 1.0199499956674651e+00 -2.7199873796425704e+00 + 2.4017783950748108e+00 8.9890689863905449e-01 -2.9496900548538152e+00 + 2.5018709071010394e+00 7.5075966470033628e-01 -3.1643063441836801e+00 + 2.5718489000829106e+00 5.8391588951490969e-01 -3.3495331300768747e+00 + 2.6127364375944082e+00 3.9369745565478309e-01 -3.5001901517161471e+00 + 2.6127843223755152e+00 1.6340677801835130e-01 -3.6089847295274597e+00 + 2.5386859930258465e+00 -1.1005032819243130e-01 -3.6532849091305195e+00 + 2.2994931284962270e+00 -4.6727421602492691e-01 -3.5901632877201517e+00 + id 11882 + loc 9.4630527496337891e-01 6.8142455816268921e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6934258321648326e-01:4.5744296649843358e-01:3.2767297636424841e-01:4.6933788979065111e-01:9.2427797915166110e-01:3.0334256815604965e-01:1.1234025598632906e+00:4.5393224139962762e-01:1.7714089407270452e+00:4.3547237583763726e-01:2.0734255831337918e+00:2.8945063816120237e-01:2.8575530198397532e+00:4.6925030074707286e-01:3.5233811205844203e+00:4.6321311572962370e-01:3.9954928797944360e+00 + CVs 20 + -2.0222145711148734e-01 3.8752741495122983e-01 7.8238809757809974e-02 + -4.1482237585682313e-01 7.7449112153425148e-01 1.5519657725128444e-01 + -6.3545831327042157e-01 1.1570534383155602e+00 2.2807513595043782e-01 + -8.7523377882082509e-01 1.5214853246039672e+00 2.7916984809024281e-01 + -1.1445695719636273e+00 1.8464624380928254e+00 2.8510862046502794e-01 + -1.4372835873993868e+00 2.1070183845404045e+00 2.2833806403043955e-01 + -1.7269755193229688e+00 2.2793031683693670e+00 1.0257054488321105e-01 + -1.9715219923924461e+00 2.3478478318701339e+00 -8.1594130977767021e-02 + -2.1459348491764132e+00 2.3218012829404553e+00 -2.9853442598310154e-01 + -2.2665905156628940e+00 2.2235629640629098e+00 -5.3526422905615223e-01 + -2.3517967582515671e+00 2.0575226783956779e+00 -7.7794169230485244e-01 + -2.4134633343557077e+00 1.8229441116918139e+00 -9.8191386997140240e-01 + -2.4624386501702351e+00 1.5400583627196305e+00 -1.1083811044557215e+00 + -2.4975765333601210e+00 1.2209621553850689e+00 -1.1929951089988418e+00 + -2.5018032813823257e+00 8.5670797551291278e-01 -1.3042512997747338e+00 + -2.4570560584730310e+00 4.7951935125472683e-01 -1.5081309675961025e+00 + -2.3757817970079183e+00 1.6745990949262024e-01 -1.8379484066598364e+00 + -2.3059795483039909e+00 -2.6769931319085449e-02 -2.2456995437266150e+00 + -2.2841193867065352e+00 -1.6520794166976516e-01 -2.6304804548994403e+00 + id 11883 + loc 6.4071124792098999e-01 3.5407099127769470e-01 1048 + blend 0.0000000000000000e+00 + interp 4.1991542785942654e-01:2.7705873816775745e-01:3.2578001570382875e-01:2.9446966820646658e-01:1.1520176969992919e+00:2.6749621264411827e-01:1.9572178584632325e+00:2.3195143546457533e-01:2.5589788970804346e+00:2.7707198587989990e-01:3.0268999117800170e+00:4.1991122870514797e-01:3.5260217158071550e+00 + CVs 20 + -8.5045139964292082e-02 4.7528482751444251e-01 2.6127610055652850e-01 + -1.7562460295798529e-01 9.7329840096332154e-01 4.7447585265076586e-01 + -3.2274908679734454e-01 1.4803463110053148e+00 6.2033945822069958e-01 + -5.6630195696602836e-01 1.9769603295497353e+00 7.0496226468301770e-01 + -9.4731413621342275e-01 2.4179278225275191e+00 7.5664865492025046e-01 + -1.4867504589898113e+00 2.7168465794186574e+00 8.2059271824286828e-01 + -2.1352926483582175e+00 2.7547235406034227e+00 9.4806583942486400e-01 + -2.7343742918543357e+00 2.4748530664418098e+00 1.1476377527911690e+00 + -3.1623358123944740e+00 1.9865914636230813e+00 1.3705848501241684e+00 + -3.4559980698525106e+00 1.4328267575467140e+00 1.6000255557751162e+00 + -3.7021652510786573e+00 8.9103067913024336e-01 1.8722031672257997e+00 + -3.9366190648436374e+00 4.3015020675395532e-01 2.2739274066253139e+00 + -4.0914336376452649e+00 1.5794574232983927e-01 2.8677309383669871e+00 + -4.0808411008639833e+00 6.7463622427539893e-02 3.5501799826432312e+00 + -3.9568504207471507e+00 -4.8318398413829122e-03 4.2255118357283541e+00 + -3.8559308554749609e+00 -2.2169641194614131e-01 4.8852952982701749e+00 + -3.9493146766128473e+00 -7.0715522486274618e-01 5.4605406201314279e+00 + -4.2329188578252666e+00 -1.3184061210855251e+00 5.8666506242078853e+00 + -4.5250666051842003e+00 -1.7111961853185025e+00 6.3800054217177760e+00 + id 11884 + loc 9.3683546781539917e-01 5.9023279696702957e-02 1090 + blend 0.0000000000000000e+00 + interp 4.4924728294880606e-01:4.4924279047597659e-01:3.6472840943903118e-01:3.0944983009156657e-01:9.9803521687950825e-01:3.9442576306726468e-01:1.5539389098613143e+00:2.9385322530747987e-01:1.9857164396840874e+00:3.3195643187785978e-01:2.5092256976571266e+00:4.4177510191501962e-01:2.9966834082282610e+00:3.5518716548497953e-01:3.8228496197692379e+00 + CVs 20 + -3.1042594677516078e-02 3.7592262289580247e-01 -5.7539485607521951e-02 + -2.7742861135428398e-02 7.0332240025609249e-01 -8.4035898411239818e-02 + -1.1463601991733796e-02 1.0029269879117582e+00 -9.6916436241900661e-02 + 6.6285746872840612e-03 1.2889762177723192e+00 -1.0615265197590551e-01 + 3.1678829056938751e-02 1.5695011659155620e+00 -1.1065907521554996e-01 + 7.4208601782641548e-02 1.8558386446186677e+00 -1.0619252182654892e-01 + 1.5293875911765342e-01 2.1531242696753994e+00 -8.0537518042155365e-02 + 2.8631737796731405e-01 2.4483120640672507e+00 -1.4147556438956932e-02 + 4.7646622876360412e-01 2.7125461037275498e+00 1.1421794560260767e-01 + 7.0322406655488734e-01 2.9111286038885855e+00 3.1952989448621982e-01 + 9.4261604447647751e-01 3.0207304170750264e+00 5.9845562435260258e-01 + 1.1883232934859702e+00 3.0313655731371703e+00 9.3546547178317041e-01 + 1.4434473947395190e+00 2.9285027822179934e+00 1.3146918154999980e+00 + 1.7095636440761470e+00 2.6824931345797314e+00 1.7143364808784212e+00 + 1.9915654449740323e+00 2.2586247112298081e+00 2.0820075880010984e+00 + 2.2692671391465500e+00 1.6794072849385264e+00 2.2976109243296952e+00 + 2.5032387521330297e+00 1.0513400103907302e+00 2.2760708359030373e+00 + 2.7247298669663151e+00 4.9294438218533920e-01 2.0220959392373365e+00 + 2.9560323285456311e+00 2.6850868051370025e-01 1.6564412945518079e+00 + id 11885 + loc 4.9164029955863953e-01 5.3326666355133057e-01 1053 + blend 0.0000000000000000e+00 + interp 4.6368829716090115e-01:2.8099781480568836e-01:1.2872697668469768e-02:3.7325965905136288e-01:9.3503324455918613e-01:4.6368366027792957e-01:1.2047408023626911e+00:2.8313157380692094e-01:1.9302174518696789e+00:3.9215646790476266e-01:2.7989882939485824e+00:4.1939563128236446e-01:3.2766110085342701e+00 + CVs 20 + -6.6885267353076594e-02 4.9029056081849298e-01 3.1045552828249795e-01 + -1.7937948580716495e-01 9.2339589579375392e-01 5.9612116436096041e-01 + -3.2044416744017890e-01 1.3253104085200840e+00 9.0213281274654245e-01 + -5.0234843030947451e-01 1.6970024568823914e+00 1.2456925611442444e+00 + -7.5012620047692224e-01 2.0145041722716237e+00 1.6201384744744713e+00 + -1.0841705462063684e+00 2.2405621125541262e+00 2.0068699852031213e+00 + -1.5096060000209832e+00 2.3300999519679051e+00 2.3708751276849505e+00 + -2.0045155069898528e+00 2.2420686311485643e+00 2.6600255896921516e+00 + -2.4986003670635366e+00 1.9465385036852205e+00 2.8177928532102419e+00 + -2.8559104068045924e+00 1.4437543448049801e+00 2.8071850183787728e+00 + -2.9195711739232029e+00 8.2875233857938924e-01 2.6567487376049739e+00 + -2.6692368319155122e+00 2.6272509384109693e-01 2.4678232460249623e+00 + -2.2267019924035871e+00 -1.8861117906737590e-01 2.2729844640346788e+00 + -1.7159386280295919e+00 -5.7297848973643561e-01 1.9700450585579294e+00 + -1.1911657468247292e+00 -8.8737261654723865e-01 1.4161853403085094e+00 + -6.9770898971842232e-01 -9.4290199281896658e-01 5.6001799388589280e-01 + -3.1669932779385712e-01 -4.9487711618730434e-01 -4.1017573748387337e-01 + -6.5340256669848884e-02 2.3912435614458399e-01 -1.1078201325235071e+00 + 2.5335676728757506e-01 4.8951205865078418e-01 -1.5205703333607155e+00 + id 11886 + loc 7.0590680837631226e-01 1.1791530251502991e-01 384 + blend 0.0000000000000000e+00 + interp 4.6222194703233849e-01:4.6221732481286820e-01:1.0100144675456759e+00:2.7544023973475601e-01:1.3884997064808771e+00:3.6826643413289178e-01:1.9951707463318467e+00:4.1149172368091569e-01:2.9315376259666008e+00:3.6999243561568468e-01:3.5720762004305096e+00 + CVs 20 + -1.1680666453150415e+00 1.7799280110504540e-01 6.2328152738521325e-01 + -1.8365422677605523e+00 1.4244739387785435e-01 1.0710318025599859e+00 + -2.3449719840900078e+00 9.3702497185580713e-03 1.4616189683536733e+00 + -2.8232298802733400e+00 -1.7732883170030372e-01 1.8340801435319669e+00 + -3.2709711391040690e+00 -4.0643430688025262e-01 2.1849677977669346e+00 + -3.6870325026701729e+00 -6.6646263121366922e-01 2.5266445183972004e+00 + -4.0742909985606248e+00 -9.3756819218747922e-01 2.8714597832850979e+00 + -4.4336652473915708e+00 -1.1968520440078412e+00 3.2269840767709197e+00 + -4.7691111190501871e+00 -1.4316197657167349e+00 3.5901830245438715e+00 + -5.0908193551899412e+00 -1.6489822979627760e+00 3.9486729293395104e+00 + -5.4041171114590778e+00 -1.8731342898267642e+00 4.2923996052810693e+00 + -5.7031448479541957e+00 -2.1280028953782626e+00 4.6253761513532181e+00 + -5.9787890475323158e+00 -2.4220240265968331e+00 4.9608837387700468e+00 + -6.2223364722766856e+00 -2.7524575444183830e+00 5.2981585384733707e+00 + -6.4259634316384888e+00 -3.1066442158595806e+00 5.6294094599661726e+00 + -6.5823460654682924e+00 -3.4629604933025693e+00 5.9489865821254089e+00 + -6.6852091222036218e+00 -3.8005825642401727e+00 6.2522765545732364e+00 + -6.7246902657324910e+00 -4.1095505136155897e+00 6.5274610843729430e+00 + -6.6186598391548692e+00 -4.4218288236782559e+00 6.6717547286607868e+00 + id 11887 + loc 2.7033734321594238e-01 3.4531745314598083e-01 1054 + blend 0.0000000000000000e+00 + interp 5.3159222711825871e-01:2.9594475931952224e-01:2.3685250196031538e-01:5.3158691119598755e-01:1.2726724443959405e+00:4.1892470635347645e-01:1.8661696302898152e+00:3.0414888577702504e-01:2.3680766284425143e+00:3.8411227572307599e-01:3.4247527338344854e+00 + CVs 20 + 4.4369243093242694e-03 4.2680357834838817e-01 -2.4953412485699952e-01 + 5.9746791499931173e-02 8.7192627083677765e-01 -4.6270511100109291e-01 + 1.8178133887481773e-01 1.3191144037430087e+00 -6.1102912667803821e-01 + 3.6042582583183957e-01 1.7511272299086944e+00 -7.4583801885215195e-01 + 5.6959964076297054e-01 2.1417050083976688e+00 -9.6693092284643867e-01 + 7.7323741905934684e-01 2.4305633280645607e+00 -1.3361591999960942e+00 + 9.3886717449537405e-01 2.5428536586814783e+00 -1.8282480977800202e+00 + 1.0627025439113544e+00 2.4451797682857550e+00 -2.3469536553258585e+00 + 1.1749668717819151e+00 2.1770646791757517e+00 -2.7998990066872169e+00 + 1.3156503112324676e+00 1.8362819587713199e+00 -3.1439727773257453e+00 + 1.5068034627907829e+00 1.5448561742870064e+00 -3.3950415840664157e+00 + 1.7119307625057965e+00 1.3832724943427426e+00 -3.6290439643035239e+00 + 1.8093539343826106e+00 1.4080926278638133e+00 -3.9421431905574029e+00 + 1.6974677096000672e+00 1.6014645246285704e+00 -4.2914333774874782e+00 + 1.4852813612950895e+00 1.7747439594617127e+00 -4.6991152603158399e+00 + 1.2054188212362489e+00 1.8284063838179332e+00 -5.2840613316903067e+00 + 1.0093113380756060e+00 1.5726575364576658e+00 -6.0328732243679948e+00 + 1.1587251842135415e+00 9.5844526990790557e-01 -6.6566566968552801e+00 + 1.1543599852910975e+00 6.3021287230030509e-01 -7.1567744974032328e+00 + id 11888 + loc 8.0857580900192261e-01 7.5790870189666748e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7635093443192883e-01:3.6867631402741680e-01:5.7285317014269255e-01:3.3306069967520407e-01:1.2477861118220797e+00:3.3498465628813673e-01:1.9987823241344835e+00:2.8364570857177240e-01:2.6809506716330649e+00:3.4127861980827595e-01:3.2315445496051347e+00:4.7634617092258452e-01:3.9955479481533880e+00 + CVs 20 + 1.2006937859110244e-01 2.8095391255158875e-01 -2.1465909564977392e-01 + 2.2275885658136957e-01 5.6378459388468727e-01 -4.0885217756089887e-01 + 3.3060461710718519e-01 8.4931067023951301e-01 -5.9283081862790798e-01 + 4.5573453107639311e-01 1.1361428782308751e+00 -7.7571608400098335e-01 + 6.0183910296928544e-01 1.4213469438051414e+00 -9.6658075570549040e-01 + 7.7134345407550198e-01 1.6994704058546959e+00 -1.1746941350808444e+00 + 9.6435489950556375e-01 1.9622067915595813e+00 -1.4088312348105381e+00 + 1.1738411242867537e+00 2.1974486034785614e+00 -1.6780296457972521e+00 + 1.3831709456297567e+00 2.3920909998129014e+00 -1.9938653095245518e+00 + 1.5735187657815879e+00 2.5354496052872455e+00 -2.3643893437033459e+00 + 1.7295043529715155e+00 2.6177638392902840e+00 -2.7833347792206049e+00 + 1.8387500204599614e+00 2.6309296971858580e+00 -3.2322261777364854e+00 + 1.8942194333933027e+00 2.5702066601206277e+00 -3.6923263341093833e+00 + 1.8928849555903968e+00 2.4313861529432508e+00 -4.1467810131015819e+00 + 1.8316776704721587e+00 2.2118920463767022e+00 -4.5698235516624415e+00 + 1.7100159670898938e+00 1.9236193330615952e+00 -4.9211326685288910e+00 + 1.5369419391547383e+00 1.6053544367293986e+00 -5.1562560508730613e+00 + 1.3529041182549695e+00 1.3177009755070797e+00 -5.2577461298619497e+00 + 1.1162872205840522e+00 1.0622219886018036e+00 -5.2089605342886154e+00 + id 11889 + loc 7.6264518499374390e-01 2.0541729032993317e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7572800804890997e-01:3.4120282941880348e-01:7.8786783230089030e-02:4.0026331307789526e-01:8.9464831104337850e-01:3.7744248546856424e-01:1.1543741871100888e+00:3.8933512241823265e-01:1.8212567933561821e+00:3.9712011984039286e-01:2.3769595494961493e+00:4.7572325076882949e-01:2.9414145021960190e+00:2.9407867365036378e-01:3.6585661231643347e+00 + CVs 20 + -8.1685934370037960e-02 4.1183923972938652e-01 1.2658230501424084e-01 + -1.9115770995250128e-01 8.2308216531121725e-01 2.6145393442187065e-01 + -3.4305388327058883e-01 1.2249946853777240e+00 3.8828339371305443e-01 + -5.5261064239565316e-01 1.6010692598096050e+00 4.9877077884074683e-01 + -8.2956366586473829e-01 1.9253724101023177e+00 5.9318747045773723e-01 + -1.1667244843124021e+00 2.1682317926187871e+00 6.7910817217805974e-01 + -1.5368679691308995e+00 2.3075239317076237e+00 7.7328774442067894e-01 + -1.8972704656649926e+00 2.3391726503936736e+00 8.9108924554266866e-01 + -2.2079046933435333e+00 2.2789641498557427e+00 1.0394981711793774e+00 + -2.4221402425154630e+00 2.1206838685453522e+00 1.2158658956600559e+00 + -2.4476229596661550e+00 1.8511322817370057e+00 1.3571536041032730e+00 + -2.3099038068758975e+00 1.5869397784635917e+00 1.3801181370651825e+00 + -2.1241843052652456e+00 1.3584187393930931e+00 1.3419652352692908e+00 + -1.8860845027242406e+00 1.1552275095518703e+00 1.2529814905721715e+00 + -1.6219536515344832e+00 1.0092551517203971e+00 1.1052775113460798e+00 + -1.3741801548400645e+00 8.9123278702083841e-01 9.2289976649026062e-01 + -1.1618731634580890e+00 7.5942727695644952e-01 7.2295861181261445e-01 + -1.0027320600986183e+00 5.8463008139097350e-01 5.2309212325081744e-01 + -8.4979610991525301e-01 4.6432209128416224e-01 3.7768210889272469e-01 + id 11890 + loc 2.9236048460006714e-01 6.2076508998870850e-02 1076 + blend 0.0000000000000000e+00 + interp 4.9395014142041177e-01:3.6922700676051590e-01:1.6561934766768815e-02:3.5705275616042015e-01:7.0040104103672252e-01:4.9394520191899760e-01:1.1766354270745998e+00:3.7062635052443438e-01:1.8061669309224908e+00:3.6651531885377653e-01:2.4339245972159045e+00:3.7078472900881071e-01:3.1593510939199971e+00 + CVs 20 + -5.4557381432273025e-02 3.6410832059410236e-01 -1.1832658023198099e-01 + -1.6425350901072025e-01 6.8926697888201560e-01 -2.3901150972679197e-01 + -3.0396367894500470e-01 9.7629953623841703e-01 -3.5983164701017734e-01 + -4.5904216656095259e-01 1.2205959407933342e+00 -4.7576578263825053e-01 + -6.2955030604500850e-01 1.4210729062994052e+00 -5.8002630979839576e-01 + -8.1902632405277243e-01 1.5822044869603455e+00 -6.6645853832843860e-01 + -1.0285185091561542e+00 1.7059380177818579e+00 -7.3842637333592642e-01 + -1.2500318263315622e+00 1.7928132449106591e+00 -8.0383571600244630e-01 + -1.4675555551714456e+00 1.8529217822117183e+00 -8.6019741741494349e-01 + -1.6614623171331295e+00 1.9123818113438420e+00 -8.9420622970700436e-01 + -1.8067084375033762e+00 2.0177542522237930e+00 -8.9886840480081220e-01 + -1.8804947370986396e+00 2.2341588598934488e+00 -9.0948886550875108e-01 + -1.9209246176500119e+00 2.5364171326733338e+00 -1.0135630504613808e+00 + -1.9863143988725187e+00 2.7332652389168048e+00 -1.2062066563053260e+00 + -2.0606409294250678e+00 2.7708005809051359e+00 -1.4190373781224832e+00 + -2.1347851278229384e+00 2.7885603512542207e+00 -1.7871821123132525e+00 + -2.2605249135529109e+00 2.7030345407836220e+00 -2.6200229965949609e+00 + -2.3135406010409976e+00 2.2053584503454777e+00 -3.2472518809951576e+00 + -2.2047089962762767e+00 2.1574486048900758e+00 -2.8687064260646005e+00 + id 11891 + loc 8.8938289880752563e-01 9.0455043315887451e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4140146616613246e-01:2.8653676950656409e-01:5.4925974540827471e-01:2.8809093786225526e-01:1.1379469761346044e+00:4.4139705215147079e-01:1.9922994143063519e+00:3.0630712692744372e-01:2.8576795584132935e+00:4.1519096391155796e-01:3.0600888675328539e+00:2.7839105763855138e-01:3.9032814527973194e+00 + CVs 20 + 1.3099260791054390e-01 3.3195423063729756e-01 -3.0013409336493813e-01 + 2.8095545363599750e-01 6.3885895985151397e-01 -6.1477128037148376e-01 + 4.3158668725983473e-01 9.0502659923265349e-01 -9.6642772072935013e-01 + 5.6826256269807751e-01 1.1122960412253515e+00 -1.3589007298244018e+00 + 6.8657250352153176e-01 1.2407164952515628e+00 -1.7767942690761123e+00 + 7.9992506916987094e-01 1.2806671270402765e+00 -2.1985072120797344e+00 + 9.2990006301371131e-01 1.2423131817305266e+00 -2.6095671460051393e+00 + 1.0891832310449099e+00 1.1449862455418063e+00 -2.9969513040107247e+00 + 1.2742228417133288e+00 1.0063614750016392e+00 -3.3358899004059226e+00 + 1.4629331568241191e+00 8.4379315946710032e-01 -3.5982375554984398e+00 + 1.6158830875535819e+00 6.7912397431091831e-01 -3.7681784803898046e+00 + 1.6804893135064820e+00 5.4522966727034117e-01 -3.8402897566316914e+00 + 1.6398854872974233e+00 4.9247008878879672e-01 -3.8323526552241565e+00 + 1.5873379852791616e+00 5.0518641366224681e-01 -3.8325840532351862e+00 + 1.5860083964569878e+00 4.6314719505156832e-01 -3.9151003085767355e+00 + 1.5753808006469237e+00 3.5785126567095182e-01 -4.0577085304604816e+00 + 1.5035567737333746e+00 3.3635937933242738e-01 -4.2202992443117964e+00 + 1.4358791235153343e+00 4.2117190802401794e-01 -4.3855336063186314e+00 + 1.1467034886905203e+00 2.8269890225601568e-01 -4.5900768809137453e+00 + id 11892 + loc 3.8379418849945068e-01 2.8350847959518433e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7811550842540779e-01:4.3447994389397382e-01:2.7605922086938095e-01:3.6441982267090772e-01:9.7141364745528269e-01:3.9624237622048847e-01:1.5386152926647250e+00:4.7425415290859363e-01:2.0000009667559975e+00:4.3535390047290240e-01:2.2870836561837806e+00:4.7811072727032355e-01:2.8541932359866999e+00:3.8900494565263372e-01:3.1201247184875704e+00:2.7776279881717353e-01:3.9202505750036232e+00 + CVs 20 + 2.9997306364155552e-01 3.7727629790155154e-01 2.4631043331326274e-01 + 4.9924630437880324e-01 7.0498802846293485e-01 4.6667779602612941e-01 + 6.5020645645106612e-01 1.0083351572793842e+00 6.8842113437436125e-01 + 7.6952236934054208e-01 1.2960358025767045e+00 9.2684437737994108e-01 + 8.4794346158482437e-01 1.5620194124645557e+00 1.1888180531344201e+00 + 8.7775718838224481e-01 1.7985707194149956e+00 1.4769448611680907e+00 + 8.5258722969599099e-01 1.9959253353460893e+00 1.7882218787574762e+00 + 7.6766698537767719e-01 2.1437444781612318e+00 2.1140079788521247e+00 + 6.1938252723372933e-01 2.2330334796770170e+00 2.4422498496828542e+00 + 4.0570296861534216e-01 2.2534496510172870e+00 2.7614204117207706e+00 + 1.3567061787170209e-01 2.1913553737166724e+00 3.0651286580396713e+00 + -1.6561335577632685e-01 2.0315752743886470e+00 3.3538915958776898e+00 + -4.6139245993202593e-01 1.7604902836569283e+00 3.6293966192724558e+00 + -7.0892852171951459e-01 1.3697935178341736e+00 3.8934176111082497e+00 + -8.5080243468732597e-01 8.7040519287911722e-01 4.1526060185336373e+00 + -8.2480612842006140e-01 3.2411520465088761e-01 4.4163824814302020e+00 + -6.2250344579850114e-01 -1.7309310807819811e-01 4.7124295781022756e+00 + -2.9269807106654022e-01 -5.4253383130269817e-01 5.0673416964366886e+00 + 2.6556054252769190e-02 -8.6305724220924018e-01 5.4001549339916135e+00 + id 11893 + loc 1.7301966249942780e-01 4.4820398092269897e-01 416 + blend 0.0000000000000000e+00 + interp 2.3542879426242429e+00:3.8469521269797347e-01:1.0991975669158127e-01:4.5847167354795787e-01:8.3158186755586039e-01:3.3176344500380628e-01:1.0912862349517833e+00:5.5003994939248380e-01:1.6852280507444963e+00:2.3542779426242428e+00:1.9103458097482131e+00:4.4572274035164183e-01:3.6504554606576067e+00:2.1622235216466201e-01:3.7870927968203834e+00 + CVs 20 + -1.7742909227580125e-01 9.4665907603597152e-02 -4.2467844150385120e-01 + -3.3241047193532547e-01 1.3976140547067878e-01 -6.7691582338782641e-01 + -4.8082684115412122e-01 1.6103004886488506e-01 -8.5650404552867521e-01 + -6.3807028899191831e-01 1.7863461057574098e-01 -1.0330617400802218e+00 + -8.0067615856272223e-01 1.9295720694879587e-01 -1.2068480549878904e+00 + -9.6472965049403181e-01 2.0391735138310274e-01 -1.3781682879792627e+00 + -1.1263263461450777e+00 2.1113310263141505e-01 -1.5477794824505200e+00 + -1.2816555909579648e+00 2.1404288996778625e-01 -1.7164539643713019e+00 + -1.4274092588225513e+00 2.1216927195643076e-01 -1.8848949079857147e+00 + -1.5611584830027445e+00 2.0544772895901631e-01 -2.0541907637419317e+00 + -1.6810490586476996e+00 1.9365857252461760e-01 -2.2260294874293067e+00 + -1.7850515608102853e+00 1.7511816329656982e-01 -2.4019504825769977e+00 + -1.8706117736877528e+00 1.4704431818880459e-01 -2.5818682918947560e+00 + -1.9350669402893419e+00 1.0828609607630513e-01 -2.7629091948881781e+00 + -1.9761876858545115e+00 6.1596167408777824e-02 -2.9390837292729022e+00 + -1.9929562117483273e+00 1.2102848430013302e-02 -3.1034524078029690e+00 + -1.9867962227859894e+00 -3.6996120167235635e-02 -3.2533238570742111e+00 + -1.9613708569834212e+00 -8.5995103680549523e-02 -3.3909388808425884e+00 + -1.9038245735115995e+00 -1.3292163047431016e-01 -3.4713001460326911e+00 + id 11894 + loc 2.8732466697692871e-01 2.4359248578548431e-02 384 + blend 0.0000000000000000e+00 + interp 5.5056006465501039e-01:5.5055455905436390e-01:1.2690645667652001e-01:3.8662256921849714e-01:9.3680840695732670e-01:3.2841952764472804e-01:1.2363587012974215e+00:3.5749071218499034e-01:2.0191981698463133e+00:3.5422290036313703e-01:2.7647206408469769e+00:3.1076363539474128e-01:3.5518240879885332e+00 + CVs 20 + -4.4153972919411150e-01 1.5325204490465386e-01 -1.1256476831243754e+00 + -7.8277689170236286e-01 1.4646545394428995e-01 -1.8440343285022356e+00 + -1.1158880211831619e+00 8.5736701215497313e-02 -2.4379909821080172e+00 + -1.4832353709914659e+00 1.5126976973952710e-02 -3.0302949738540423e+00 + -1.8789276493910563e+00 -6.7760698346684523e-02 -3.6181327345471623e+00 + -2.2953471506900507e+00 -1.6506474015791628e-01 -4.1995747187176127e+00 + -2.7279647127134519e+00 -2.8143653680458447e-01 -4.7687607520008273e+00 + -3.1809160857642977e+00 -4.3293468886114705e-01 -5.3141855390663704e+00 + -3.6607265848913881e+00 -6.4717095092297128e-01 -5.8172066924408208e+00 + -4.1618960657611899e+00 -9.4626690683856651e-01 -6.2520086031807311e+00 + -4.6686722705657111e+00 -1.3310576380450043e+00 -6.5866838423176715e+00 + -5.1620585005352027e+00 -1.7782419093786395e+00 -6.7984234169184017e+00 + -5.6271255440375541e+00 -2.2538198326104526e+00 -6.8880796374836919e+00 + -6.0567756200419325e+00 -2.7241675813698683e+00 -6.8763643956953207e+00 + -6.4473680018388020e+00 -3.1640327876307994e+00 -6.7922733160538460e+00 + -6.7957938621622898e+00 -3.5659629492147387e+00 -6.6651980519111147e+00 + -7.1017080640548427e+00 -3.9416797108956865e+00 -6.5188142264989839e+00 + -7.3649572472825486e+00 -4.3078348636091510e+00 -6.3674857984684090e+00 + -7.5818126905406880e+00 -4.6317639960224692e+00 -6.2409578084296946e+00 + id 11895 + loc 9.3538796901702881e-01 7.4661946296691895e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3254268218808531e-01:3.7546794902727204e-01:1.4917027472137911e-01:3.1634586809264886e-01:9.7843442531696856e-01:3.3711419058217879e-01:1.6791021580989678e+00:5.3253735676126346e-01:2.1198826543858709e+00:3.9473776388474330e-01:2.8962237991916817e+00:2.7259604411583443e-01:3.3084374725144339e+00 + CVs 20 + -4.7830078049055091e-02 3.7788156623336222e-01 3.3037519834809798e-01 + -1.6192075970597913e-01 7.0313646408351527e-01 6.3298396417474634e-01 + -3.3369691377988153e-01 9.8476009487519711e-01 9.2581116639142402e-01 + -5.5706678856544756e-01 1.2254686850014131e+00 1.2008170264234195e+00 + -8.0580317866778506e-01 1.4354445917561205e+00 1.4447236372355077e+00 + -1.0294527816297361e+00 1.6463417832699516e+00 1.6663404700532476e+00 + -1.1815678366900968e+00 1.8786013528081207e+00 1.8822791741701712e+00 + -1.2474311145341188e+00 2.1150161870939019e+00 2.1046856162643528e+00 + -1.2348431909589344e+00 2.3102868277737532e+00 2.3404059107763366e+00 + -1.1650671825680528e+00 2.4005872515258631e+00 2.5727552169313337e+00 + -1.0874527809937147e+00 2.3653174643784927e+00 2.7512451262565749e+00 + -1.0337388798927711e+00 2.2725953405800183e+00 2.8672194023777058e+00 + -9.9276395305708887e-01 2.1665778429436591e+00 2.9542935613829191e+00 + -9.5266376010103171e-01 2.0566760692964903e+00 3.0242185836166580e+00 + -9.0554952342240758e-01 1.9528909134620078e+00 3.0779057486501098e+00 + -8.4492960803358774e-01 1.8834674121698778e+00 3.1232615786111548e+00 + -7.5431369442291074e-01 1.8748380550679278e+00 3.1935377927209601e+00 + -6.3956213328183042e-01 1.8649533926842987e+00 3.3117095797721472e+00 + -6.8522196795664647e-01 1.6735746955989588e+00 3.2862786304356675e+00 + id 11896 + loc 7.4688929319381714e-01 9.1001135110855103e-01 1075 + blend 0.0000000000000000e+00 + interp 6.0588706177850982e-01:3.4370223252529919e-01:5.2359060093271070e-03:5.1448988013764874e-01:8.6734789289107572e-01:5.7414217350001306e-01:1.0131874060844890e+00:5.6454324948393542e-01:1.7974965280775161e+00:6.0588100290789204e-01:2.0000000000025748e+00:5.5065864733948267e-01:2.1840590680867522e+00:4.9079917989231997e-01:2.9376464815556727e+00:3.9956303400153353e-01:3.3267058997927306e+00 + CVs 20 + 2.8801063563515661e-01 1.5769728930577720e-01 -3.7812747677458275e-01 + 5.5807526745618508e-01 3.0620869102084453e-01 -7.2227363088333940e-01 + 8.2031610185483661e-01 4.3926070443101045e-01 -1.0502194251809960e+00 + 1.0764625160622143e+00 5.6688694893000147e-01 -1.3712218514210988e+00 + 1.3211688129503660e+00 6.9871509898211825e-01 -1.6869201980737563e+00 + 1.5497231315904401e+00 8.4047355570322690e-01 -1.9987616998550555e+00 + 1.7594803010524660e+00 9.8849060364406349e-01 -2.3011602459562717e+00 + 1.9529859964108218e+00 1.1324935536747935e+00 -2.5830584050285585e+00 + 2.1369431367639664e+00 1.2660656658341818e+00 -2.8403934820360321e+00 + 2.3174454531897011e+00 1.3880279547266112e+00 -3.0803138709165112e+00 + 2.4990394528811501e+00 1.4964965101903454e+00 -3.3192500533725964e+00 + 2.6874002591508654e+00 1.5815788667407218e+00 -3.5815258117588109e+00 + 2.8879446594871125e+00 1.6215525897345804e+00 -3.8861642990728575e+00 + 3.1029708502396671e+00 1.5892333439278497e+00 -4.2367657374315657e+00 + 3.3356021741230411e+00 1.4550725491575038e+00 -4.6347856640575191e+00 + 3.5814832733639390e+00 1.1643558716614093e+00 -5.0955715176093790e+00 + 3.7825972179783549e+00 6.4722011285665193e-01 -5.6211742758620247e+00 + 3.8331721041138178e+00 -4.7064011739403389e-02 -6.1449535452475930e+00 + 3.8834290050428772e+00 -4.5754868968386997e-01 -6.5111263155314099e+00 + id 11897 + loc 3.6189978709444404e-04 4.9258846044540405e-01 1054 + blend 0.0000000000000000e+00 + interp 5.2293322644749141e-01:3.3105813915583332e-01:3.2788741648632147e-01:3.2752532943976498e-01:1.4845927528242655e+00:1.5963063545844658e-01:2.0470367386261579e+00:4.9316899682504983e-01:2.9595374592091144e+00:4.9821645610514559e-01:3.1342015171171047e+00:5.2292799711522697e-01:3.7823429289466719e+00 + CVs 20 + -5.3893453235953431e-02 4.3057307114613996e-01 -1.9389182559283372e-01 + -6.6029939963464207e-02 8.6510422820860000e-01 -3.6728224358344352e-01 + -4.2455011945113919e-03 1.3135423091764196e+00 -5.0305150148927891e-01 + 1.7841530090957569e-01 1.7852239578130376e+00 -6.0217999535195110e-01 + 5.1554795615453863e-01 2.2332911083660418e+00 -7.0936316814695877e-01 + 9.6095876163945659e-01 2.5614802075713241e+00 -8.7433027473431102e-01 + 1.6488097482430002e+00 2.7894918157043360e+00 -1.0893928737114618e+00 + 2.2018823337933933e+00 2.6978927269995352e+00 -1.4679414849487500e+00 + 2.4843665961852128e+00 2.3691458597195130e+00 -1.8353544026804585e+00 + 2.6288132869277643e+00 1.9081136336125208e+00 -2.1180014349042713e+00 + 2.7065479480010448e+00 1.4125312974821345e+00 -2.3099188871814089e+00 + 2.8139957039481693e+00 9.4327945066175389e-01 -2.4879145508370897e+00 + 2.9840425336114262e+00 5.7777257378762359e-01 -2.8050329781780312e+00 + 3.0919261168999288e+00 4.3701688407486555e-01 -3.3073254095033153e+00 + 3.0741466159683100e+00 4.2879832529100448e-01 -3.8666899148688834e+00 + 2.9943773296954648e+00 4.0392597623975424e-01 -4.4583590834788218e+00 + 2.9696401317374179e+00 2.3886761443981686e-01 -5.0051588360194250e+00 + 3.0628452794045855e+00 -5.8906307595271934e-02 -5.4457564791214903e+00 + 3.1727968581025237e+00 -3.0721964705743099e-01 -5.9830508388162125e+00 + id 11898 + loc 1.7325323820114136e-01 1.9800195097923279e-01 1048 + blend 0.0000000000000000e+00 + interp 5.3382138723153538e-01:5.3381604901766311e-01:4.3366600154929213e-02:4.8242171839256920e-01:6.9773743965253976e-01:4.5311472356701299e-01:1.2053675310265914e+00:5.0581169591128061e-01:2.0002922890155928e+00:5.0031155327720722e-01:2.4855470597684572e+00:4.9735263233680027e-01:2.9955319724768463e+00:3.3200851538413945e-01:3.7815091900775877e+00 + CVs 20 + -2.6987958129987749e-01 5.2827053513975153e-01 -4.5560895952597630e-02 + -5.3149163859700987e-01 1.0747872794292326e+00 -1.7098028009485666e-01 + -7.4161981538540245e-01 1.6382871337562341e+00 -3.8196077851275212e-01 + -8.7770645701313976e-01 2.1698737406105679e+00 -6.9332250123197603e-01 + -9.5609527209837653e-01 2.5904162141239295e+00 -1.1093347505852491e+00 + -1.0095127889256958e+00 2.8239906069064569e+00 -1.5853809868782931e+00 + -1.0484942117502698e+00 2.8188078850409788e+00 -2.0168574122887284e+00 + -1.0589007327322468e+00 2.6027538519504256e+00 -2.2909510149950276e+00 + -1.0296465624672240e+00 2.2707994406600283e+00 -2.4049560785773720e+00 + -9.3885304860280827e-01 1.8739930401338738e+00 -2.4094823543878339e+00 + -7.4940916426301163e-01 1.4498952558475571e+00 -2.3194023184059627e+00 + -4.5527668326630233e-01 1.0415319135751901e+00 -2.1551871402682155e+00 + -9.6566223361314790e-02 6.3733115416632891e-01 -1.9589992624156634e+00 + 2.6165898607896110e-01 1.7727252775838331e-01 -1.7553416456330888e+00 + 5.5585413193438149e-01 -3.8239325483614200e-01 -1.5674272322865219e+00 + 8.4338527165916588e-01 -1.1056695071910287e+00 -1.5771804135872833e+00 + 1.2503268113664765e+00 1.1535977706449703e+00 -2.7204701554455606e+00 + 1.2626130593332170e+00 1.0892747537788967e+00 -2.0779173909540813e+00 + 1.3612545334130082e+00 1.5286046175228654e+00 -2.1382230651677179e+00 + id 11899 + loc 4.0264898538589478e-01 2.8350847959518433e-01 1084 + blend 0.0000000000000000e+00 + interp 5.0379896883030428e-01:4.5127689996065562e-01:2.6817758386502522e-01:3.8702048751308882e-01:9.8150338945426807e-01:2.5151442249345740e-01:1.9119090527088352e+00:4.4992578782625647e-01:2.2700213127094910e+00:5.0379393084061597e-01:2.8770706471078373e+00:4.3390680579636898e-01:3.1393617297909051e+00:3.0443150738344171e-01:3.9027695795474360e+00 + CVs 20 + 2.2454335628477273e-01 3.4057112748374391e-01 3.2908137536074866e-01 + 3.9479180505436984e-01 6.2489455252986137e-01 6.3151064658545553e-01 + 5.7097802633550099e-01 8.8644990026348824e-01 9.1072903024433338e-01 + 7.5805784462754422e-01 1.1255221815702510e+00 1.1686241126837205e+00 + 9.2840206649182466e-01 1.3391066910655485e+00 1.4284795465453732e+00 + 1.0631661737726796e+00 1.5279059164265894e+00 1.7115537774817009e+00 + 1.1555827590785763e+00 1.6859881455770909e+00 2.0102556664057429e+00 + 1.2086285006931052e+00 1.8067679158893082e+00 2.2959879462195771e+00 + 1.2274070448246488e+00 1.8938317154772326e+00 2.5449760735513025e+00 + 1.1981287417507818e+00 1.9552557207777017e+00 2.7651517486030732e+00 + 1.1015794105667043e+00 1.9902102883890933e+00 2.9637621162018379e+00 + 9.4823446218053908e-01 1.9994949939460929e+00 3.1345684149608544e+00 + 7.4883684961535790e-01 1.9583355687429678e+00 3.2927647079415712e+00 + 5.1856576336184346e-01 1.8043098682477834e+00 3.4692144782808918e+00 + 2.7434516590990765e-01 1.5350998056100056e+00 3.6648690945424400e+00 + 6.4612228609166600e-03 1.2287561797054245e+00 3.8422918716999748e+00 + -2.7441158854097403e-01 9.8108046487425615e-01 3.9753067524121337e+00 + -5.3410199940750203e-01 8.4705099580335497e-01 4.0805322738534331e+00 + -9.0439146052474517e-01 8.9045370258597056e-01 4.1497020317539111e+00 + id 11900 + loc 3.9934566617012024e-01 9.5766067504882813e-01 1085 + blend 0.0000000000000000e+00 + interp 3.6504168878011234e-01:3.6503803836322457e-01:1.2084184944849419e-04:3.2286312712158083e-01:8.8032800160265523e-01:3.3910864615305697e-01:1.8753617438310808e+00:2.6716755110000273e-01:2.5976532893720408e+00:3.4260319772957520e-01:3.4996961403519466e+00 + CVs 20 + 9.5510330000596610e-03 5.7687346026595421e-01 2.6425230827851770e-01 + -4.8483545501490755e-02 1.0672497074455642e+00 4.1830648111259927e-01 + -1.5069555778983185e-01 1.5047372924692546e+00 5.1703003728200148e-01 + -2.9609848031393887e-01 1.8982338183926271e+00 5.6903762710877326e-01 + -4.7967196433585030e-01 2.2301112769352649e+00 5.6038066945268139e-01 + -6.8368223577412834e-01 2.4804550306880904e+00 4.8421175786789405e-01 + -8.7696306875346564e-01 2.6316709845483910e+00 3.4541929492143497e-01 + -1.0222871265831399e+00 2.6811313265711139e+00 1.6740907495524271e-01 + -1.1051442989048497e+00 2.6522400111684701e+00 -1.5422874682010201e-02 + -1.1561035895125049e+00 2.5743705050962897e+00 -1.9035246532123029e-01 + -1.2095390776580870e+00 2.4477427282805597e+00 -3.6804343308884979e-01 + -1.2693332037258125e+00 2.2610391488127353e+00 -5.4382542246369026e-01 + -1.3315173029644745e+00 2.0110093212754871e+00 -7.0040566323489095e-01 + -1.3991134347797416e+00 1.6927806711478457e+00 -8.2159946636213210e-01 + -1.4777241792097848e+00 1.3027274297138982e+00 -8.8549439512955685e-01 + -1.5654234199979535e+00 8.6511434304351098e-01 -8.5968434168732211e-01 + -1.6675685225945553e+00 3.9894847459173172e-01 -7.1521158191087086e-01 + -1.8114084538120891e+00 -7.1946850875348689e-02 -4.3153011759735244e-01 + -1.8933297189203955e+00 -1.9826187851009180e-01 -1.8376073339835264e-01 + id 11901 + loc 7.5497493147850037e-02 2.6987892389297485e-01 1076 + blend 0.0000000000000000e+00 + interp 5.3664081440273126e-01:2.9245193389112972e-01:4.8580838428134276e-01:3.6160078605750090e-01:1.0270076176243528e+00:5.3663544799458729e-01:1.8715313523677426e+00:3.9442521930920310e-01:2.2817504843338634e+00:3.5997750597807909e-01:3.0691942274626078e+00:4.1637886734926105e-01:3.9953226733542211e+00 + CVs 20 + -1.5599500229570867e-01 2.7907653874531246e-01 -3.0400240573332254e-01 + -2.8617308623284199e-01 5.8017732414118628e-01 -6.0260986403117578e-01 + -4.3460825872609321e-01 8.6546120357834710e-01 -9.1855086406632713e-01 + -6.1826968191450149e-01 1.1167565717698671e+00 -1.2549274819621614e+00 + -8.3685035437389355e-01 1.3253142363278954e+00 -1.6040961712250090e+00 + -1.0858013543888825e+00 1.4810183629670515e+00 -1.9574727104080223e+00 + -1.3602990410618288e+00 1.5776466314218121e+00 -2.3064324872837152e+00 + -1.6567015752170149e+00 1.6160349275584789e+00 -2.6420913409084790e+00 + -1.9691129484667045e+00 1.6013886653728173e+00 -2.9553021922974851e+00 + -2.2899305766595401e+00 1.5383678743834386e+00 -3.2372170902141923e+00 + -2.6133762525834041e+00 1.4273465205117881e+00 -3.4786032681409074e+00 + -2.9333025949894456e+00 1.2694740150016646e+00 -3.6727761190724149e+00 + -3.2410611262177298e+00 1.0695891491100846e+00 -3.8154481241548686e+00 + -3.5249311946984858e+00 8.3751725901889174e-01 -3.9057410133170527e+00 + -3.7692395712970974e+00 5.8616139971188019e-01 -3.9473129434956844e+00 + -3.9469560307019975e+00 3.3000912000022731e-01 -3.9471883048586367e+00 + -4.0123583879302736e+00 1.0159123042057239e-01 -3.9128346668688052e+00 + -3.9669741474341889e+00 -5.4483915240976399e-02 -3.8544161957129104e+00 + -3.8805805442869064e+00 -2.9604524187107861e-01 -3.7954800861736322e+00 + id 11902 + loc 2.7380509302020073e-02 8.8532269001007080e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4349794525485220e-01:2.8707738319745113e-01:1.2093064239116513e-01:2.4073718881219539e-01:8.3618161528965207e-01:4.1334389605503330e-01:1.1968398738917663e+00:4.3155998270849316e-01:2.0000655338411573e+00:2.7992852970078241e-01:2.7484898921762371e+00:4.4349351027539968e-01:3.3740978649431033e+00 + CVs 20 + -9.7888520583567576e-03 2.7622166326403241e-01 -3.7959550909214074e-02 + -1.4424199598245091e-02 5.8034820876072124e-01 -6.4807589427906404e-02 + -2.6411289192826148e-03 9.1509546202946979e-01 -1.1478790215032741e-01 + 3.0461772475005200e-02 1.2679928291510409e+00 -2.1490431662690807e-01 + 9.1090026049904516e-02 1.6354890421683375e+00 -3.8167214246339398e-01 + 1.8999615107326889e-01 2.0037835835549984e+00 -6.3124788738852633e-01 + 3.3602537849264064e-01 2.3350980639700598e+00 -9.6904793882271401e-01 + 5.2532190601928752e-01 2.5857022005748824e+00 -1.3815825137597053e+00 + 7.4250920262206810e-01 2.7280430394481696e+00 -1.8441649602121668e+00 + 9.6677124768625555e-01 2.7500113790359046e+00 -2.3292347573111898e+00 + 1.1759834868915142e+00 2.6502592989359903e+00 -2.8102559025670453e+00 + 1.3507456685841523e+00 2.4346728956384904e+00 -3.2631547234384666e+00 + 1.4790387534536016e+00 2.1128075711944945e+00 -3.6666208050559135e+00 + 1.5614681989797510e+00 1.6952035180315737e+00 -4.0018624460022290e+00 + 1.6112979084340360e+00 1.1924306844611126e+00 -4.2472172221860909e+00 + 1.6388802518482382e+00 6.2652390778508127e-01 -4.3487614519794704e+00 + 1.6283836663378148e+00 1.1185657171400853e-01 -4.1820076800426031e+00 + 1.5764774408329849e+00 -1.4836540294737333e-01 -3.7803993203967301e+00 + 1.5325853205800117e+00 -3.9072346837424643e-01 -3.3709246324331139e+00 + id 11903 + loc 5.9979903697967529e-01 8.0301856994628906e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9956689547550434e-01:3.2375321005473917e-01:1.0630353736830467e-01:2.7433669701529717e-01:1.0034020836824427e+00:3.4605453299679251e-01:1.6560356613260028e+00:3.2674632864321695e-01:2.6064114679156472e+00:3.2459478625618354e-01:3.2361573218276685e+00:3.9956289980654958e-01:3.8734959472677741e+00 + CVs 20 + 1.5695438519954291e-01 3.1383986764200850e-01 -3.6135396614058612e-01 + 3.3469911647949918e-01 6.2115408783308768e-01 -7.0530600745693683e-01 + 5.3896929153992801e-01 9.2183354501795634e-01 -1.0529448552737373e+00 + 7.6976360155522983e-01 1.2189475057669132e+00 -1.4142529359967071e+00 + 1.0158768617790503e+00 1.5085757405356590e+00 -1.7938935495313784e+00 + 1.2517108476180812e+00 1.7722163526789672e+00 -2.2015676722155808e+00 + 1.4460282853304365e+00 1.9707271805534359e+00 -2.6452997034574111e+00 + 1.5711886288139574e+00 2.0443046821847526e+00 -3.1138632095496823e+00 + 1.6219324435489570e+00 1.9587605135118611e+00 -3.5807275855366223e+00 + 1.6265941092450418e+00 1.7276481686381779e+00 -4.0410074904039952e+00 + 1.6271825348751856e+00 1.3660544697627610e+00 -4.4934983785325198e+00 + 1.6831335231772673e+00 9.0222826070280304e-01 -4.9273849818081263e+00 + 1.8521273320752496e+00 4.1715211836327820e-01 -5.3433611894224935e+00 + 2.1345721228170773e+00 4.7524439240649252e-02 -5.7641914990800549e+00 + 2.4633736274239584e+00 -8.0840651798340546e-02 -6.1952696447114040e+00 + 2.7520565267235684e+00 8.1812957516521179e-02 -6.5643204295094710e+00 + 2.9239817992788177e+00 4.9295611401111844e-01 -6.7231444372902551e+00 + 3.0002415706997914e+00 8.9514436758149851e-01 -6.6574379453390513e+00 + 3.1755208971591777e+00 1.1853225927686402e+00 -6.8205910570436874e+00 + id 11904 + loc 9.9629479646682739e-01 4.5885759592056274e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7723528056483507e-01:2.7960876908868243e-01:9.9795194200375681e-01:2.8077498763031039e-01:1.9984837570955847e+00:3.7723150821202944e-01:2.6592219632401584e+00:3.1889083805864993e-01:3.0049643133774797e+00:3.4221419283243432e-01:3.9991860947819871e+00 + CVs 20 + -1.3373942552994084e-01 4.4515105872876759e-01 1.8575631531768316e-01 + -2.7359271597038720e-01 8.8019978682359934e-01 3.3787191071617523e-01 + -4.4923532561196422e-01 1.2989492055174430e+00 4.5138003173346875e-01 + -6.8140673209430869e-01 1.6855589981276637e+00 5.2485856970507683e-01 + -9.8090870512738793e-01 2.0146154629825004e+00 5.6025425715481525e-01 + -1.3474847538158621e+00 2.2602532234666430e+00 5.6874566690511763e-01 + -1.7676572151321703e+00 2.4043682090041876e+00 5.7116481346004777e-01 + -2.2178094895697567e+00 2.4422888415487627e+00 5.9241685193468696e-01 + -2.6709542305081402e+00 2.3799070444306554e+00 6.5518847370080968e-01 + -3.0834450458452234e+00 2.2140577899611751e+00 7.6791605927756235e-01 + -3.3854472696815558e+00 1.9392525537411660e+00 8.9995788655622255e-01 + -3.5518395378874428e+00 1.5675866542976773e+00 1.0195835586729876e+00 + -3.5808091063981982e+00 1.0948001095212940e+00 1.1420690121805335e+00 + -3.4436398862922220e+00 5.9181977995565616e-01 1.2494898645162531e+00 + -3.1993040893898455e+00 1.6296744270549085e-01 1.2907602132818703e+00 + -2.9382823261870317e+00 -2.0257348331429742e-01 1.2806250980512348e+00 + -2.6948464764351954e+00 -5.7276933919276130e-01 1.2949310074332234e+00 + -2.5210929317809874e+00 -1.0378883414020015e+00 1.5394675975509535e+00 + -2.4519082984965896e+00 -1.2670116174962960e+00 1.6181009586919335e+00 + id 11905 + loc 5.0536066293716431e-01 7.7406960725784302e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9382884255569176e-01:2.9105124007835842e-01:1.7021948194392700e-01:3.2587329545780108e-01:1.0003242221411253e+00:3.8725321034874205e-01:2.2698981391728976e+00:2.8837980078703335e-01:2.9998209016268311e+00:4.9382390426726624e-01:3.6395728445935061e+00 + CVs 20 + 2.2933110031223169e-02 4.9566926700393454e-01 3.2816018327580426e-01 + -2.3411861439390225e-02 9.4332526832035668e-01 6.1825642459026542e-01 + -1.1092146605338582e-01 1.3679096642369744e+00 9.1448467914635456e-01 + -2.4864590552742361e-01 1.7671226348439637e+00 1.2342726262026067e+00 + -4.6113305981343555e-01 2.1110680354999927e+00 1.5690798670111850e+00 + -7.6297514535369415e-01 2.3602237620740194e+00 1.8965648975190885e+00 + -1.1472951209374407e+00 2.4708771687747584e+00 2.1775692453381055e+00 + -1.5739644674807478e+00 2.4132011451963269e+00 2.3580957300984284e+00 + -1.9634473137786017e+00 2.1851376903039372e+00 2.3928869235690033e+00 + -2.2037751595037185e+00 1.8220997695015388e+00 2.2708380291812542e+00 + -2.2109726132161698e+00 1.4209920159654865e+00 2.0417904458343985e+00 + -2.0230569166457562e+00 1.0719159399675404e+00 1.7887282906275850e+00 + -1.7330533134203343e+00 7.9803868476726758e-01 1.5330651588708120e+00 + -1.4328821546865989e+00 5.8988285698150400e-01 1.2321450759524704e+00 + -1.1844973732204123e+00 4.6818710997080726e-01 8.4321434587563593e-01 + -1.0231219611628830e+00 5.3204086999197364e-01 4.0416218818662819e-01 + -9.6322154323848097e-01 8.4761477109492001e-01 5.6901815637919975e-02 + -9.6745758733554887e-01 1.2273613305108702e+00 -1.5453576045361478e-01 + -9.1420857511807707e-01 1.3290404845370600e+00 -5.7031898653751234e-01 + id 11906 + loc 9.0293729305267334e-01 9.4755536317825317e-01 1048 + blend 0.0000000000000000e+00 + interp 3.7342773869867057e-01:3.7342400442128360e-01:4.5567238826551426e-01:2.9078934589631888e-01:9.9776667670127706e-01:2.4666589561017013e-01:1.7792935623040294e+00:2.6069575393475458e-01:2.8612541726378620e+00:2.2600509109889827e-01:3.6747078915029814e+00 + CVs 20 + 1.6686063321868311e-01 8.0446329120668347e-01 -5.4853152330575927e-01 + 4.0044742185165694e-01 1.6367353410273413e+00 -1.0237569759849907e+00 + 7.0590343288690960e-01 2.5105887285802480e+00 -1.3396058819459709e+00 + 1.0722618466874250e+00 3.3534807044954911e+00 -1.3377270815805624e+00 + 1.4554464569559553e+00 3.9481172291938833e+00 -9.3633836804705983e-01 + 1.7723973115888383e+00 4.1569291249517661e+00 -2.8787000624342429e-01 + 1.9569966874756162e+00 4.0268582903292733e+00 4.1232822133044866e-01 + 1.9902124704750850e+00 3.6570564329595001e+00 1.0663550834236284e+00 + 1.8487223113165099e+00 3.1064634141450345e+00 1.6078193488979240e+00 + 1.5316664756674376e+00 2.4385153547070506e+00 1.9729975940790387e+00 + 1.0939793824875201e+00 1.7212371338059218e+00 2.1411899958414073e+00 + 6.2181405679560953e-01 9.6514404386116248e-01 2.1878144314870394e+00 + 1.6907126521298738e-01 1.1036800903404642e-01 2.2786101507827503e+00 + -2.4297341272822215e-01 -8.8096165750023880e-01 2.6514878832875235e+00 + -4.7135486598763138e-01 -1.8941614160869309e+00 3.6544918117915950e+00 + -6.3284474014866379e-02 -2.3771190643575215e+00 5.1250708228118302e+00 + 9.5073741084874375e-01 -2.2650786303701640e+00 6.0874721695569205e+00 + 1.9760534911352468e+00 -2.0010332407621605e+00 6.2775508497368975e+00 + 2.6098076143917446e+00 -1.7542817739117362e+00 6.2212713539652098e+00 + id 11907 + loc 2.0441569387912750e-01 7.3865729570388794e-01 1054 + blend 0.0000000000000000e+00 + interp 5.8179394879211299e-01:3.3010652655612283e-01:4.0296130432784871e-01:5.8178813085262515e-01:1.0121042531280848e+00:5.3492895887293079e-01:1.2608303396191811e+00:3.4171216838594848e-01:1.9262219098990336e+00:2.5431880435510495e-01:2.4635406998159084e+00:2.5488336085763202e-01:3.1859385673470486e+00:4.7342969007106911e-01:3.9741671691637848e+00 + CVs 20 + 3.5120398150985266e-01 4.1023838693739217e-01 1.3955206248410734e-02 + 6.3899130450552877e-01 7.8743205938401639e-01 8.0283590444577224e-02 + 8.5610859940111683e-01 1.1491098140121661e+00 2.1298982467798511e-01 + 1.0221528051946314e+00 1.4947970899160323e+00 4.1913642613520563e-01 + 1.1843800715583188e+00 1.7927418408748181e+00 6.9284848019817391e-01 + 1.3845658473233329e+00 2.0059191884567724e+00 1.0044002981776516e+00 + 1.6303969340552968e+00 2.1091637492288187e+00 1.3161847365922292e+00 + 1.9047219317702719e+00 2.0844681169185906e+00 1.5932238453028706e+00 + 2.1690892274376212e+00 1.9375506373227536e+00 1.8188651462042100e+00 + 2.3797712185404758e+00 1.6986328903014636e+00 2.0000029567310680e+00 + 2.5100602647638910e+00 1.4130812315682979e+00 2.1610642713739701e+00 + 2.5700772995133931e+00 1.0830003898042269e+00 2.3777844353416424e+00 + 2.6696990914419430e+00 6.6467151257168922e-01 2.7807608694700874e+00 + 3.0582845882280836e+00 2.8362254230482292e-01 3.3266751273139903e+00 + 3.6649984788938750e+00 1.3364006359532399e-01 3.7329350347224639e+00 + 4.2628668109866048e+00 1.2971666488738365e-01 3.9550923469072563e+00 + 4.6744307949143913e+00 1.6259112708900736e-01 4.0500878135443648e+00 + 4.8476217297763338e+00 1.9849498521608033e-01 4.0594388778735091e+00 + 5.1962893601501143e+00 -1.5942925052844970e-01 4.2111692446757232e+00 + id 11908 + loc 6.4706778526306152e-01 3.8302716612815857e-01 1090 + blend 0.0000000000000000e+00 + interp 6.9259298288062032e-01:5.2006417799691051e-01:2.4141580321075340e-01:3.1027459723673068e-01:1.0184566219248734e+00:5.0863688465179679e-01:1.8200362072673348e+00:2.6247465955662219e-01:2.4566704032616191e+00:6.9258605695079156e-01:2.8375360308310551e+00 + CVs 20 + -5.0084081901448974e-02 5.1123379687106918e-01 -2.9613642279793712e-01 + 1.1471054825591354e-02 9.4198116821483957e-01 -5.1259368497088942e-01 + 1.2254604595723395e-01 1.3318165530350035e+00 -6.9293402637697743e-01 + 2.6965734713383538e-01 1.6870746241915970e+00 -8.4187795694471901e-01 + 4.5761884775695727e-01 1.9921256192691494e+00 -9.4429974910603898e-01 + 6.8632346133579014e-01 2.2296042103551486e+00 -9.8588037940707540e-01 + 9.4863265153645004e-01 2.3778310442480857e+00 -9.5480907880538424e-01 + 1.2228971412478309e+00 2.4150978984936606e+00 -8.5360240450128611e-01 + 1.4723318314915022e+00 2.3398533553440339e+00 -7.2409352301643526e-01 + 1.6769153830900960e+00 2.2000755808720962e+00 -6.3416705450148869e-01 + 1.8497066472595054e+00 2.0553858571579204e+00 -6.1174513884408743e-01 + 2.0051234717757005e+00 1.9355447844829925e+00 -6.4661843488410065e-01 + 2.1462753619108055e+00 1.8605167891789236e+00 -7.2631840502341494e-01 + 2.2681448193136742e+00 1.8608462517320818e+00 -8.3759279535404085e-01 + 2.3623182369525439e+00 1.9683188603302773e+00 -9.4507870921503878e-01 + 2.4322141157140962e+00 2.1762795739331855e+00 -9.8079349325692267e-01 + 2.4648903348873294e+00 2.4627260997436604e+00 -8.6627617035789917e-01 + 2.4309273768980408e+00 2.7414206031932653e+00 -5.5150537950984113e-01 + 2.6670509910547340e+00 2.6867178453618865e+00 -6.7887080002751321e-01 + id 11909 + loc 4.1896447539329529e-01 9.5766067504882813e-01 1084 + blend 0.0000000000000000e+00 + interp 4.9738023761564476e-01:4.1826960903097987e-01:3.9222237425775575e-03:3.8376842347259310e-01:8.4417897213024329e-01:3.8593724330376300e-01:1.8073982915895670e+00:4.9737526381326863e-01:2.4325314291351248e+00:4.6211281355997730e-01:2.9975061845463218e+00:3.7073640095900212e-01:3.5088914528629518e+00 + CVs 20 + -1.4401811167904277e-01 3.7209099264216783e-01 3.0438489268567198e-01 + -3.0851867384139603e-01 6.9115174279009928e-01 5.3354093961059224e-01 + -4.6744293602718084e-01 9.8513234082306644e-01 7.3490527523249194e-01 + -6.0900532540969232e-01 1.2617721057019737e+00 9.2192094830736304e-01 + -7.3309239881613120e-01 1.5175107137846395e+00 1.0877873601052555e+00 + -8.3806420875510323e-01 1.7521853143948549e+00 1.2355098372374231e+00 + -9.2500993656870889e-01 1.9725141773798467e+00 1.3830031279890251e+00 + -1.0142368736166152e+00 2.2064556503004589e+00 1.5667512579124403e+00 + -1.1834324124702831e+00 2.5091046039360729e+00 1.7707563575157457e+00 + -1.4598580976251325e+00 2.8438757604319584e+00 1.8288264168306867e+00 + -1.7216936085108423e+00 3.1283423409053532e+00 1.6640825727454081e+00 + -1.8887274923755681e+00 3.3516341678106594e+00 1.2939941352144257e+00 + -1.9601552963060147e+00 3.4415821737544681e+00 7.9064194216667438e-01 + -2.0105733619659034e+00 3.3534111004484126e+00 3.7811207920357170e-01 + -2.1148377931973301e+00 3.1768529532719167e+00 2.1091043685559074e-01 + -2.2736358616387493e+00 2.9524103321845701e+00 3.0047637192073973e-01 + -2.4295139933285959e+00 2.6176822127049491e+00 6.1021687289105797e-01 + -2.4857927866261376e+00 2.1707792808754220e+00 9.3140195409732940e-01 + -2.4109555703611285e+00 2.2306719972907492e+00 6.9260725227358055e-01 + id 11910 + loc 8.8845409452915192e-02 8.7662595510482788e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0724854994961477e-01:3.3028624293269598e-01:6.0946042756637731e-05:3.3139454199870405e-01:9.7328664154249667e-01:2.7750649401989730e-01:1.5046250071608824e+00:5.0724347746411524e-01:2.0009370304302627e+00:4.8707097953353401e-01:2.5903760318671019e+00:3.1786451275149041e-01:3.0351784410217832e+00 + CVs 20 + 4.5971021333871279e-02 3.7973673022867532e-01 -2.1831032612017812e-01 + 1.2609743202584592e-01 7.7364024877152793e-01 -4.6121342013650318e-01 + 1.9294514916161198e-01 1.1952361381844292e+00 -7.2324446107091855e-01 + 2.1188751249955051e-01 1.6472208779286417e+00 -9.8788760930514474e-01 + 1.7239438775877702e-01 2.1050697561385618e+00 -1.2461238922428577e+00 + 1.0599761780599215e-01 2.4979395769496624e+00 -1.5292599556248718e+00 + 7.3936814441075693e-02 2.7254024193374469e+00 -1.8663814079649896e+00 + 1.1925891576341041e-01 2.7251620379531687e+00 -2.1995166528071231e+00 + 2.4290366698226196e-01 2.5226130659062953e+00 -2.4015221673623617e+00 + 4.0316771689168895e-01 2.2483510858957692e+00 -2.4130314063450364e+00 + 5.6949236742175302e-01 2.0018528247506313e+00 -2.3141043393903531e+00 + 7.2888209440212304e-01 1.7766489889416246e+00 -2.1786417611619417e+00 + 8.5555683675764571e-01 1.5377846414767802e+00 -2.0345839290559704e+00 + 8.7305199967312264e-01 1.2747634687393257e+00 -1.8765815724509107e+00 + 7.0809443728078081e-01 1.0355428635776271e+00 -1.7228011643812784e+00 + 3.7829653746470837e-01 9.2571237506559678e-01 -1.6068393534407677e+00 + -6.2041127141223812e-02 1.1003331929502225e+00 -1.6133461171963515e+00 + -3.6854522554317226e-01 1.4105110028205157e+00 -1.8223113002648097e+00 + -5.9181709050969289e-01 1.2523874833518198e+00 -1.7130957401735385e+00 + id 11911 + loc 1.6969923675060272e-01 1.2690742313861847e-01 397 + blend 0.0000000000000000e+00 + interp 4.5360099386868097e-01:3.9171620081433783e-01:7.1208944647240879e-01:2.8013101442176630e-01:1.1102220422273934e+00:3.5119781072093353e-01:2.1477973095592793e+00:4.5359645785874231e-01:2.8504117503394255e+00:3.3886876234925933e-01:3.2037651607831421e+00:3.3974924435281856e-01:3.9838656260030012e+00 + CVs 20 + -2.6235124543272709e-01 2.5409641934921534e-01 -1.0632554339972400e+00 + -4.9146330896842888e-01 3.0253919046576416e-01 -1.7422386515421193e+00 + -7.1903631707791382e-01 2.7973216548211072e-01 -2.3176383572063637e+00 + -9.5485714320536552e-01 2.4593321474594210e-01 -2.9056531277861377e+00 + -1.1843231268983507e+00 1.9867280304707446e-01 -3.5034767127885877e+00 + -1.3957124332311239e+00 1.3233203847305830e-01 -4.1039374438905396e+00 + -1.5879514066774227e+00 3.8135323218498551e-02 -4.6960881977188942e+00 + -1.7690708261514838e+00 -9.6802050801570783e-02 -5.2669348553560296e+00 + -1.9372502340561533e+00 -2.8333284247107715e-01 -5.8021468635703144e+00 + -2.0861444392187432e+00 -5.2471605237968089e-01 -6.2829470503932328e+00 + -2.2136836704013891e+00 -8.1728530416113565e-01 -6.6930236689418683e+00 + -2.3240244026819643e+00 -1.1563831594886054e+00 -7.0240592051473225e+00 + -2.4197113549525393e+00 -1.5358091259010962e+00 -7.2744012369724258e+00 + -2.4943904914749804e+00 -1.9396568174789965e+00 -7.4461512263773564e+00 + -2.5408006501422520e+00 -2.3454975118589072e+00 -7.5471178476049374e+00 + -2.5624228879980557e+00 -2.7361395416662013e+00 -7.5907861777673302e+00 + -2.5694097155247184e+00 -3.1011683911042764e+00 -7.5913977259833025e+00 + -2.5651915170915465e+00 -3.4354190677040171e+00 -7.5592308332937268e+00 + -2.5410131388867554e+00 -3.8031582447481309e+00 -7.4156884229866247e+00 + id 11912 + loc 2.8808298707008362e-01 7.7951598167419434e-01 411 + blend 0.0000000000000000e+00 + interp 5.1838135069085467e-01:5.1837616687734778e-01:4.0214306850507520e-01:3.8769811336795923e-01:9.5190521613765977e-01:4.1087682888759597e-01:1.7790345689888651e+00:2.8662368373223784e-01:2.5483223978824219e+00:3.3608755899337572e-01:3.2023699311787013e+00:3.2460029410380442e-01:3.8909494581846813e+00 + CVs 20 + 8.2712471274480315e-01 1.9875826716538592e-01 -1.2861484705248595e-02 + 1.3801644459661659e+00 2.7241901555435910e-01 -3.4796534793698396e-02 + 1.8607216493439138e+00 2.8524009296382374e-01 -5.2923717509119735e-02 + 2.3739555666222594e+00 2.7066349217742974e-01 -5.7049467692512637e-02 + 2.9180581717124019e+00 2.2281729036904507e-01 -4.2458061017386563e-02 + 3.4819247879857431e+00 1.3926155476801771e-01 -7.5669883067416566e-03 + 4.0523903926548961e+00 2.1295097469647972e-02 4.4956273569909555e-02 + 4.6169157031841994e+00 -1.3006484169230004e-01 1.1174934205330397e-01 + 5.1611667779237473e+00 -3.1638391570555502e-01 1.8995781082086086e-01 + 5.6689274163391739e+00 -5.3889757409597583e-01 2.7392234360899737e-01 + 6.1235106876393024e+00 -7.9509659315275849e-01 3.5396041824700170e-01 + 6.5149648498951391e+00 -1.0795955159619190e+00 4.2285385985261004e-01 + 6.8441815038730187e+00 -1.3855089051222191e+00 4.8111273703967983e-01 + 7.1173060142222093e+00 -1.7033872857909320e+00 5.3329772601948300e-01 + 7.3402057408450316e+00 -2.0216626915662972e+00 5.8238173579465646e-01 + 7.5182808048877625e+00 -2.3294427734547494e+00 6.2827218449788591e-01 + 7.6571427733160853e+00 -2.6198821229231335e+00 6.6929639331861324e-01 + 7.7594634067282051e+00 -2.8913715578488972e+00 7.0717166999932779e-01 + 7.7635509382391135e+00 -3.1474356615030974e+00 7.3444229708597519e-01 + id 11913 + loc 8.3221632242202759e-01 6.0623818635940552e-01 416 + blend 0.0000000000000000e+00 + interp 5.1804338785915194e-01:2.9604437752314483e-01:2.1769002583113539e-01:4.0658270598679291e-01:9.8182344886647654e-01:5.1368583466759676e-01:1.5769447701568842e+00:4.2671562704308774e-01:2.0002711821714989e+00:4.4660671777040095e-01:2.9506390210263023e+00:5.1803820742527340e-01:3.1621296899041389e+00:4.7003939331840749e-01:3.8081600986745361e+00 + CVs 20 + 6.4058609494616281e-01 2.4846102644355397e-01 -4.4497949915134380e-02 + 1.0424108317596015e+00 3.6710429656295107e-01 -7.0220749342921218e-02 + 1.3670001522414419e+00 4.2504395942359346e-01 -8.1513522303144487e-02 + 1.6972591166275413e+00 4.6142863001641554e-01 -7.4516242306134212e-02 + 2.0246624563940072e+00 4.7139588946518329e-01 -5.3695740259725927e-02 + 2.3410776550212193e+00 4.5281250918977911e-01 -2.2254413399685924e-02 + 2.6431288138101601e+00 4.0733058489597518e-01 2.3174757280699121e-02 + 2.9299554618151267e+00 3.3711045588359112e-01 8.3415293909481159e-02 + 3.1998503529878697e+00 2.4225634320244094e-01 1.4992069701082700e-01 + 3.4525861517737813e+00 1.2326963037414829e-01 2.1633694260317562e-01 + 3.6969339018494609e+00 -1.2502162504511860e-02 3.0064165104236124e-01 + 3.9481485010067994e+00 -1.5152510999223101e-01 4.4183179288358576e-01 + 4.2125512916321446e+00 -3.0091827380572145e-01 6.3599329226250489e-01 + 4.4761679573846109e+00 -4.8221818854678022e-01 8.1076086562635963e-01 + 4.7188965160329497e+00 -6.8889884943268020e-01 9.1450555975317083e-01 + 4.9375290115802386e+00 -8.9725762519675878e-01 9.6345438174802744e-01 + 5.1369188743818581e+00 -1.0937508381613295e+00 9.8998503456859366e-01 + 5.3144276695117911e+00 -1.2762589489519294e+00 9.9991837690390994e-01 + 5.3734728294174356e+00 -1.4642588208909957e+00 8.3346629383767357e-01 + id 11914 + loc 9.8457789421081543e-01 4.6972322463989258e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9297925139115573e-01:4.3333613563182638e-01:2.0913275414797916e-01:2.7805014800894901e-01:1.0102968047330876e+00:3.5476540700077880e-01:1.9986706542756290e+00:4.0471000844339799e-01:2.7107271541206668e+00:4.0778973212246011e-01:3.2444900663144196e+00:4.9297432159864185e-01:3.8805917487125607e+00 + CVs 20 + -1.6134478097649080e-01 4.7507819795144057e-01 7.8474564759006660e-02 + -2.8366307968490939e-01 9.6369948498733804e-01 1.6068374219793491e-01 + -3.6827368528036630e-01 1.4440626803391434e+00 2.2321233103695756e-01 + -4.0948085755355051e-01 1.8931208303346205e+00 2.4434058191135299e-01 + -4.2317302361225395e-01 2.3281843239557474e+00 2.4485541982991674e-01 + -4.5245704840678991e-01 2.8127324994751413e+00 3.1375224070072671e-01 + -5.4816352512422561e-01 3.3275483180386902e+00 5.8703535079756830e-01 + -7.3468949636223457e-01 3.7015937233956420e+00 1.0793726566132680e+00 + -1.0101182655366809e+00 3.8369742093790187e+00 1.6495374731723935e+00 + -1.3555355587837297e+00 3.7621111163033358e+00 2.1473773543761103e+00 + -1.7273087386972814e+00 3.5706738997351417e+00 2.4852070233725012e+00 + -2.0882551903234203e+00 3.3344215563390622e+00 2.6703684767131177e+00 + -2.4297024365671738e+00 3.0650610191689021e+00 2.7462179763810473e+00 + -2.7683359342765770e+00 2.7343568523000861e+00 2.7423869070868090e+00 + -3.0928161382171786e+00 2.3138329285824089e+00 2.6634667238541034e+00 + -3.3270399200827967e+00 1.8120095363384574e+00 2.5040426919467627e+00 + -3.3941377666258910e+00 1.2797058820775664e+00 2.2521323188322340e+00 + -3.2354845710135858e+00 8.6018023277578459e-01 1.9159942951642193e+00 + -2.9237890363976469e+00 6.7083372172695532e-01 1.6319651040320520e+00 + id 11915 + loc 3.3038738369941711e-01 1.0209311544895172e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3798443876284332e-01:3.4645988770782288e-01:4.0239385404224159e-01:4.3798005891845571e-01:8.8702956516150278e-01:4.1100417162508890e-01:1.1610636275729227e+00:3.6494747703406255e-01:1.3981937192657734e+00:2.9615446228173142e-01:1.9996352424110433e+00:4.2246566455890128e-01:2.4610887470024307e+00:3.7596461798744552e-01:2.9880447834493298e+00:2.7121454656140870e-01:3.8146385792838933e+00 + CVs 20 + -1.9038400479929840e-01 2.1552868341582215e-01 -2.2977068584917062e-01 + -3.8860535025868098e-01 4.3832900451690193e-01 -4.4014738404709458e-01 + -6.0130529098441754e-01 6.5668817848715832e-01 -6.5460353757264822e-01 + -8.3492985748237636e-01 8.6269195477949945e-01 -8.7723169589088157e-01 + -1.0967245212389694e+00 1.0534464668456891e+00 -1.0951996132684927e+00 + -1.3912971921933268e+00 1.2190694309605554e+00 -1.2909684933376344e+00 + -1.7175211479044030e+00 1.3400518438954789e+00 -1.4457317635319922e+00 + -2.0606973290236721e+00 1.3907078560427226e+00 -1.5468010462485677e+00 + -2.3889501226473526e+00 1.3476902884637307e+00 -1.5933831854720251e+00 + -2.6661470641069656e+00 1.2053413149992260e+00 -1.5948099327218352e+00 + -2.8759612090764120e+00 9.7958327392362632e-01 -1.5660708216190180e+00 + -3.0363368657139920e+00 6.8955738380277465e-01 -1.5253697778766211e+00 + -3.1812395735365389e+00 3.4367455172384798e-01 -1.4922626902409926e+00 + -3.3347524619037618e+00 -4.9458288326531763e-02 -1.4901790341670045e+00 + -3.5109951639630750e+00 -4.7247211003866296e-01 -1.5541558858806674e+00 + -3.6963277515357555e+00 -8.8850838352660677e-01 -1.7477718678014653e+00 + -3.8125982487686754e+00 -1.2101885967459927e+00 -2.1471518072209319e+00 + -3.7840704569281725e+00 -1.3487349111419169e+00 -2.6707141390981857e+00 + -3.9064460044106797e+00 -1.5905514837208590e+00 -2.9694790006975120e+00 + id 11916 + loc 9.5504641532897949e-01 7.6204437017440796e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1650847772822636e-01:4.1650431264344911e-01:1.5839205498010656e-02:3.4542455086724699e-01:7.2036171934775750e-01:3.8544407986125895e-01:1.1352367699512536e+00:3.5739161659515423e-01:1.8520111114633275e+00:3.7396747636453614e-01:2.3960151052326224e+00:2.4744994537294590e-01:3.2694316669286714e+00 + CVs 20 + 1.0521846908929969e-01 2.9236844310979893e-01 -2.5655941585839542e-01 + 1.9566238257107388e-01 5.8736033460399406e-01 -5.2020328539301541e-01 + 3.0070862863421260e-01 8.8669958646031577e-01 -8.1115854694788558e-01 + 4.3927513683354052e-01 1.1794826725042333e+00 -1.1374157097624085e+00 + 6.1897355922077624e-01 1.4457115350230521e+00 -1.4979314364919702e+00 + 8.3761478068453765e-01 1.6613330821772874e+00 -1.8885334933108353e+00 + 1.0786287826130756e+00 1.8031444334781641e+00 -2.3029336166189167e+00 + 1.3103429929881547e+00 1.8538312923405404e+00 -2.7347086411417285e+00 + 1.4997686374941894e+00 1.8083049614356637e+00 -3.1773807158538179e+00 + 1.6251831579485405e+00 1.6716397248114905e+00 -3.6181281391328892e+00 + 1.6709725456172748e+00 1.4541741039123874e+00 -4.0298064778504870e+00 + 1.6262825929872975e+00 1.1767025354191629e+00 -4.3756087341018786e+00 + 1.4917455930250740e+00 8.7062927653587585e-01 -4.6189073729036494e+00 + 1.2821171409688517e+00 5.7606727606002039e-01 -4.7279858004624877e+00 + 1.0264851188917878e+00 3.4634792049823471e-01 -4.6850451876712667e+00 + 7.6846834133058428e-01 2.4694779478998152e-01 -4.5035112747677690e+00 + 5.6254142824204389e-01 3.1435946827581251e-01 -4.2485734792685586e+00 + 4.2380358783317540e-01 4.7034387895444785e-01 -4.0214003734683885e+00 + 1.5456771517104045e-01 3.2011624962410856e-01 -3.9175184916950716e+00 + id 11917 + loc 8.2841533422470093e-01 3.8429361581802368e-01 1054 + blend 0.0000000000000000e+00 + interp 4.5044459682611349e-01:2.1803397548115719e-01:1.8202242218712306e-01:2.7877574857438220e-01:1.0917940738717651e+00:4.5044009238014526e-01:1.9999400358568451e+00:2.9229409749555524e-01:2.4502329493687283e+00:3.3180786713279292e-01:3.0158466615603787e+00:3.0539808449452505e-01:3.6739526189065632e+00 + CVs 20 + -1.0696520711817797e-01 5.4734731033721551e-01 2.7055269445392865e-01 + -1.9267373597030615e-01 1.0725927377631872e+00 4.3332232512942981e-01 + -2.6443175941899000e-01 1.6061110895481210e+00 5.1874319633209676e-01 + -4.1977751043575928e-01 2.1687696680353330e+00 5.9681294662791884e-01 + -7.7094108542137241e-01 2.6816246224874587e+00 7.4592042441610118e-01 + -1.3055355949767709e+00 2.9944107633687902e+00 1.0051502141673025e+00 + -1.9042641006618739e+00 3.0220825091774839e+00 1.3458357509389456e+00 + -2.4584144133626906e+00 2.7883594840437356e+00 1.6933368880868440e+00 + -2.9346246852112809e+00 2.3750737099812245e+00 1.9750330172573736e+00 + -3.3554010931611393e+00 1.8989214080540640e+00 2.1393308951677112e+00 + -3.7693159757887438e+00 1.5039362143364687e+00 2.1821031966842042e+00 + -4.1464068877121418e+00 1.3350753770136228e+00 2.2177142997400772e+00 + -4.2734934441497607e+00 1.4578316004053311e+00 2.4455504624263051e+00 + -3.9424363497987840e+00 1.6946401726290690e+00 2.7544263497609949e+00 + -3.5750810445506422e+00 1.8113677362964240e+00 2.9206379426377662e+00 + -3.5046716052495404e+00 1.8594609149284755e+00 3.1599654922290434e+00 + -3.8378751018278541e+00 1.8287912369838413e+00 3.6763015583304663e+00 + -4.7043619296605064e+00 1.4919128026411728e+00 4.3551851896745433e+00 + -4.9029704467241313e+00 1.3710747111111881e+00 4.6197904648803396e+00 + id 11918 + loc 8.9024358987808228e-01 3.4591194987297058e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6817694511349253e-01:2.4467772283708861e-01:1.0575883733773639e-01:2.7310399719428052e-01:1.0346098517106703e+00:3.1102998986814773e-01:1.9964736031362755e+00:2.9746449293255089e-01:2.6724684238597378e+00:3.6817326334404143e-01:3.0423727574688653e+00:2.6768304880193439e-01:3.7034513434895056e+00 + CVs 20 + -8.4117363999919259e-02 4.9834033828553137e-01 4.3640056615463896e-01 + -2.0406280605836108e-01 1.0008774487054615e+00 8.3984685361811762e-01 + -3.8665186985539179e-01 1.5123398709059359e+00 1.1925047753712381e+00 + -6.6467075330362546e-01 2.0220165394056235e+00 1.4721729469988314e+00 + -1.0676676851676439e+00 2.4872367086729406e+00 1.6541291908475579e+00 + -1.5875215106393537e+00 2.8431291442644238e+00 1.7426240539754634e+00 + -2.1829191491828404e+00 3.0266927050748715e+00 1.7677371604198677e+00 + -2.8056660658201733e+00 3.0055446448063621e+00 1.7687212134762516e+00 + -3.4177124309618829e+00 2.7757934604301093e+00 1.7656869076415855e+00 + -3.9701651021606903e+00 2.3524658534162395e+00 1.7428717528538262e+00 + -4.3982785199561887e+00 1.7791072701057484e+00 1.6654872200984772e+00 + -4.6538068086695459e+00 1.1119448665400165e+00 1.5052291069262740e+00 + -4.7134328200323843e+00 3.9370717283725565e-01 1.2376513039841823e+00 + -4.5545599315890861e+00 -2.8937913299841267e-01 8.4522108914049510e-01 + -4.1837727734201691e+00 -7.9621633763298050e-01 3.5236541476178551e-01 + -3.6821680555713652e+00 -1.0323313615718104e+00 -1.6926450701882867e-01 + -3.1049572529134988e+00 -1.0894422980170253e+00 -7.6650063283608516e-01 + -2.3686861466673466e+00 -9.2248990910518280e-01 -1.5181804283827476e+00 + -2.1498190616980599e+00 -4.4791192634493338e-01 -1.1449672458433500e+00 + id 11919 + loc 2.8425100445747375e-01 7.2841411828994751e-01 1085 + blend 0.0000000000000000e+00 + interp 4.1489771954648752e-01:3.0790466074163464e-01:4.6807071226327357e-01:4.1489357056929205e-01:1.2179748574430833e+00:2.8673357748338252e-01:1.8506556999509454e+00:3.4942995762446261e-01:2.3751093438947315e+00:3.1919242677086052e-01:3.0184984506623529e+00:4.0025362120057117e-01:3.8714788668586566e+00 + CVs 20 + -1.6434719946842022e-01 3.7410253804642835e-01 3.4838531127187272e-01 + -3.6529206772874606e-01 6.7082818592765037e-01 5.9188952038025877e-01 + -5.9945233857593694e-01 9.3020983190762585e-01 7.9605515434806295e-01 + -8.6252801055443451e-01 1.1583398248052807e+00 9.7885254720503123e-01 + -1.1488693251655395e+00 1.3406538683243436e+00 1.1261340682840442e+00 + -1.4447548461523203e+00 1.4637285171755434e+00 1.2277318809580400e+00 + -1.7306273550830731e+00 1.5184202192531000e+00 1.2807293709757921e+00 + -1.9859550768930923e+00 1.5037715370276636e+00 1.2922138845670208e+00 + -2.1910849374585788e+00 1.4284279213264996e+00 1.2818666195761579e+00 + -2.3388084699818954e+00 1.3132935397665315e+00 1.2783854851416401e+00 + -2.4411736805343791e+00 1.1844698692604030e+00 1.3019698695254576e+00 + -2.5116221803675005e+00 1.0656136377938565e+00 1.3595760457186388e+00 + -2.5563956534752266e+00 9.8244141308277433e-01 1.4495418631425903e+00 + -2.5732714278680371e+00 9.7266558469412268e-01 1.5595642821390094e+00 + -2.5665448456954043e+00 1.0477808389942014e+00 1.6475954072388495e+00 + -2.5593276393274231e+00 1.1308480317729697e+00 1.6798112772529237e+00 + -2.5565676517810019e+00 1.1602497613781693e+00 1.6698908196489015e+00 + -2.5840732994569451e+00 1.1109177667847154e+00 1.6617679029623948e+00 + -2.8030750045312054e+00 9.7169475008230566e-01 1.8197149979057157e+00 + id 11920 + loc 9.2732852697372437e-01 9.6681147813796997e-02 384 + blend 0.0000000000000000e+00 + interp 1.4680955635465107e+00:1.0601658855424050e+00:1.5629463910855714e+00:1.4680855635465107e+00:1.5766423412541686e+00:6.3493984908272227e-01:1.6191399058645879e+00:5.3501941042517009e-01:1.9979070644121359e+00:2.8538500875193651e-01:2.2737986030044959e+00:2.7479771572561834e-01:2.8287548150010227e+00:4.6221732481286820e-01:3.0216207263264425e+00:7.7395701579864329e-01:3.2151049915883454e+00:1.4523357074244414e+00:3.3757117779065284e+00 + CVs 20 + -1.3430530399495821e+00 3.1255372717623831e-01 6.2368023281627671e-01 + -2.1945503403599407e+00 4.0672058141372164e-01 1.0706416766563764e+00 + -2.9101907652725529e+00 4.2111887376148038e-01 1.4582025052304826e+00 + -3.6315616124451333e+00 3.8095108799875110e-01 1.8261984936313513e+00 + -4.3442283338177674e+00 2.7661564564812835e-01 2.1429805547077705e+00 + -5.0275081753810102e+00 1.1280772033762171e-01 2.3829379486174012e+00 + -5.6659330740051335e+00 -8.8822127118768690e-02 2.5378399749177256e+00 + -6.2590158774106417e+00 -2.9715072578557411e-01 2.6210494660287327e+00 + -6.8307822404222112e+00 -4.9476465650806090e-01 2.6650528278702317e+00 + -7.4194243632282353e+00 -6.9737623679969318e-01 2.7094383650994538e+00 + -8.0480508312216088e+00 -9.4862884891205601e-01 2.7883918179613927e+00 + -8.7066294147480807e+00 -1.3065716885605387e+00 2.9150345447633699e+00 + -9.3408818039143000e+00 -1.8261082882588413e+00 3.0601674792056102e+00 + -9.8487177001201811e+00 -2.4981900130069086e+00 3.1746140891263450e+00 + -1.0151636740846163e+01 -3.2257665170047991e+00 3.2678387619440712e+00 + -1.0287073035458743e+01 -3.9280330907493521e+00 3.3737800586500994e+00 + -1.0347101306637120e+01 -4.5887454364787574e+00 3.5167182007271585e+00 + -1.0391541756371765e+01 -5.2021665051851684e+00 3.7376645317503576e+00 + -1.0402573469082061e+01 -5.7007780576040084e+00 4.1581764618435866e+00 + id 11921 + loc 6.7743104696273804e-01 1.5931004285812378e-01 416 + blend 0.0000000000000000e+00 + interp 4.2598964017852747e-01:3.1464622649905366e-01:2.7659205282358779e-01:3.4439773415442693e-01:1.4928894753086728e+00:2.8819105208689932e-01:2.0154743879425863e+00:3.5328561782584478e-01:2.9357463615504189e+00:4.2598538028212568e-01:3.1683491355956295e+00:3.8820636884191739e-01:3.7055364707169041e+00 + CVs 20 + -5.5995094917561405e-01 2.4222294897252672e-01 2.4536429746376709e-02 + -9.9669305915873097e-01 3.7238159929886722e-01 7.5346758051139939e-02 + -1.4064229941766848e+00 4.5855767936547559e-01 1.0930049181421314e-01 + -1.8469076665744870e+00 5.2518709258189222e-01 1.1388975914760124e-01 + -2.3092791805844306e+00 5.6566532270600800e-01 8.1787370480409904e-02 + -2.7805388925762391e+00 5.7648286643259972e-01 4.3301710420429185e-03 + -3.2467185274723578e+00 5.5723363548470228e-01 -1.2345890720893216e-01 + -3.6951461541423738e+00 5.0957144729672210e-01 -2.9922600898561780e-01 + -4.1139403107125236e+00 4.3778411327873679e-01 -5.1695339708148813e-01 + -4.4932047916270994e+00 3.4780433811624611e-01 -7.6874564222380748e-01 + -4.8364049811371590e+00 2.3621441235527696e-01 -1.0333322679611801e+00 + -5.1719862000572547e+00 7.7014320402064573e-02 -1.2642218724303431e+00 + -5.5234876214394291e+00 -1.5772362243623705e-01 -1.4080962375526342e+00 + -5.8675536159089532e+00 -4.5439264473561902e-01 -1.4542204363283473e+00 + -6.1724409896179049e+00 -7.7878432205631620e-01 -1.4368835906457091e+00 + -6.4317313086848102e+00 -1.1160988914968262e+00 -1.3704795615208041e+00 + -6.6425308964052858e+00 -1.4538291481660610e+00 -1.2441193182514569e+00 + -6.8013528539394086e+00 -1.7692769331470872e+00 -1.0611125430630177e+00 + -6.9643310921048762e+00 -1.9863226321914693e+00 -1.0246539493957716e+00 + id 11922 + loc 9.0094625949859619e-01 7.8257727622985840e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2154516009981341e-01:2.7562656311641726e-01:1.5321893158082034e-01:4.2154094464821246e-01:7.6706192192994427e-01:4.0203288289667616e-01:1.0199997860634911e+00:2.5690605042074427e-01:1.9511474791295171e+00:2.6954623116596454e-01:2.7142335313718871e+00:3.1365369621898676e-01:3.7566824504513470e+00 + CVs 20 + 1.3471821288756719e-01 4.4078734846134809e-01 -2.9677845363294331e-01 + 2.8258485327028526e-01 8.7488175900297549e-01 -5.2327572351806884e-01 + 4.4526518444592800e-01 1.2998107327819466e+00 -7.0265034078780853e-01 + 6.2910839648156947e-01 1.7119232509937363e+00 -8.6553223759098108e-01 + 8.4660058076054689e-01 2.1022198793906215e+00 -1.0489737158147279e+00 + 1.1048873500992076e+00 2.4474882220462129e+00 -1.2925261984818848e+00 + 1.3929695172834067e+00 2.7113624167649593e+00 -1.6129400339018942e+00 + 1.6861914564144567e+00 2.8681616453669370e+00 -1.9964300118956106e+00 + 1.9606377864642717e+00 2.9136209752684348e+00 -2.4153757068743236e+00 + 2.1990529710808717e+00 2.8580484912562540e+00 -2.8432304927221792e+00 + 2.3895467929366125e+00 2.7193861519910403e+00 -3.2583771570677529e+00 + 2.5266906068535908e+00 2.5184692216454265e+00 -3.6454296115649734e+00 + 2.6166965381983034e+00 2.2744538920202069e+00 -4.0013421868437700e+00 + 2.6712348292893293e+00 1.9992815182195458e+00 -4.3331550446099625e+00 + 2.6950034903831517e+00 1.6982101437927197e+00 -4.6410077937446124e+00 + 2.6758228891383284e+00 1.3669650858043207e+00 -4.9102517891403785e+00 + 2.6044318035606526e+00 1.0065203403875096e+00 -5.1351785338820299e+00 + 2.4744873503918403e+00 6.4478952083013619e-01 -5.3409381482670009e+00 + 2.1713542411395594e+00 3.5473292388931399e-01 -5.6157797834561531e+00 + id 11923 + loc 4.1720896959304810e-01 5.0048428773880005e-01 1077 + blend 0.0000000000000000e+00 + interp 3.2307969734123354e-01:3.0712426246778413e-01:5.6231831592041659e-01:2.4444984428027475e-01:1.4036136709754945e+00:3.2307646654426014e-01:2.2529606111459120e+00:2.5252886480337194e-01:3.2965479627014291e+00 + CVs 20 + 1.5681194648352356e-01 2.8389134300357666e-01 -2.0412803572146071e-01 + 2.7512059348897067e-01 5.7770024895141459e-01 -4.1129866019757277e-01 + 3.7801478103355923e-01 8.5048070071112614e-01 -6.3607812051275270e-01 + 4.7477860247535542e-01 1.0891021154261677e+00 -8.8477169029204228e-01 + 5.6769778645867641e-01 1.2919588471480281e+00 -1.1580423255892645e+00 + 6.6557810660611572e-01 1.4604632295094384e+00 -1.4574850507345460e+00 + 7.8256881424520031e-01 1.5944160991586991e+00 -1.7845674676140608e+00 + 9.3236045252442468e-01 1.6895549087716872e+00 -2.1364315314904592e+00 + 1.1225244339817371e+00 1.7398967849346663e+00 -2.5023857699850089e+00 + 1.3500667109822975e+00 1.7431372359823127e+00 -2.8638265441182966e+00 + 1.6015331604199001e+00 1.7062109623415662e+00 -3.2011485531088755e+00 + 1.8625234753524142e+00 1.6420886305478279e+00 -3.5031385731168414e+00 + 2.1252253584010901e+00 1.5619398521092172e+00 -3.7665967087756060e+00 + 2.3879955108274125e+00 1.4742641759333768e+00 -3.9882786601523539e+00 + 2.6590788608017992e+00 1.3865722019873896e+00 -4.1603130916203916e+00 + 2.9509106970668997e+00 1.2908136217731985e+00 -4.2718301713174478e+00 + 3.2596906967657908e+00 1.1595067565870263e+00 -4.2957259158062051e+00 + 3.5491171272786586e+00 9.4186399508974672e-01 -4.2588867653505025e+00 + 3.5576168216354063e+00 8.3706412813084019e-01 -4.5075414481605529e+00 + id 11924 + loc 2.9821550846099854e-01 7.2841411828994751e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4224386855047654e-01:3.6401954075885556e-01:4.6135718105851620e-01:4.4223944611179106e-01:1.1837651238476559e+00:3.1127640296978842e-01:1.8805333094196870e+00:4.1602607993814722e-01:2.3868848887345058e+00:3.5044636641710819e-01:3.0080896702701638e+00:4.3114030350429344e-01:3.9026026638145348e+00 + CVs 20 + -2.3655596658928224e-01 3.4394086550790259e-01 3.8304501717319356e-01 + -4.8020312962833628e-01 6.1062964769893135e-01 6.8117098267223541e-01 + -7.2562852645759202e-01 8.4290008681518436e-01 9.4835864465277275e-01 + -9.6749622337269803e-01 1.0507966849541344e+00 1.1899181341975393e+00 + -1.1986556216683617e+00 1.2256033071644470e+00 1.3846257824498438e+00 + -1.4006306703009976e+00 1.3597011303884139e+00 1.5282739880253930e+00 + -1.5494637233015840e+00 1.4521601576335921e+00 1.6456218579543691e+00 + -1.6305503403171957e+00 1.5217725117822509e+00 1.8000022969873684e+00 + -1.6954997677320072e+00 1.6234882884482567e+00 2.0297963323406769e+00 + -1.8099639199424282e+00 1.7802271887799062e+00 2.2273967524409444e+00 + -1.9170318168207832e+00 1.9908126576293903e+00 2.3080219425516684e+00 + -1.9612059774399353e+00 2.2764041404765334e+00 2.2481383658008052e+00 + -1.9626907815338401e+00 2.4919657027468252e+00 2.0347803806480842e+00 + -1.9759133239672522e+00 2.4293983041839260e+00 1.8109921418727057e+00 + -2.0064430430201345e+00 2.0980744004841809e+00 1.6737251555401345e+00 + -1.9878250708129179e+00 1.5859426699496768e+00 1.5545683185919743e+00 + -1.8598195074930368e+00 1.0081260310025995e+00 1.3293214251288230e+00 + -1.6639306302518877e+00 5.8163153376652610e-01 9.2740891034319195e-01 + -1.5482769783080472e+00 5.2489422583583900e-01 4.5192228091600661e-01 + id 11925 + loc 5.1218688488006592e-01 6.8217664957046509e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0627824314678815e-01:2.5221447794853502e-01:1.0940766171111171e-01:5.0627318036435676e-01:9.7151312296400416e-01:4.1687057730042892e-01:1.2083025320961358e+00:4.0589897231397204e-01:1.9633181366870331e+00:4.0660355486829797e-01:2.6402738893279327e+00:3.1404306546741528e-01:3.1295779801228325e+00 + CVs 20 + 8.4753749119135302e-02 8.1579898149619645e-01 -2.9803434047460037e-01 + 2.4328902112221665e-01 1.7069957743780459e+00 -5.2175536990480276e-01 + 5.1131553260657459e-01 2.6356147883352383e+00 -5.6578043449622417e-01 + 8.9945599836581325e-01 3.4709571884364476e+00 -3.4158193517664248e-01 + 1.3605445769026525e+00 4.0332217714653558e+00 1.5756445006574471e-01 + 1.7839178730837175e+00 4.1945192008031107e+00 8.2399998928618978e-01 + 2.0752612853268628e+00 3.9702143583326661e+00 1.5220445765585191e+00 + 2.1922951409449669e+00 3.4764060420283176e+00 2.1714808100933625e+00 + 2.1063565924070669e+00 2.8775176568245859e+00 2.7145635936924251e+00 + 1.8494209950882234e+00 2.3743288077907261e+00 3.1097355618038898e+00 + 1.5660899318916244e+00 2.0668871455782507e+00 3.3661633426754918e+00 + 1.3608545379668395e+00 1.8464438557913454e+00 3.5884272859133475e+00 + 1.1381552229968328e+00 1.5771060114753594e+00 3.8589572418202045e+00 + 7.2794254046842854e-01 1.1741175293643278e+00 4.0619341015358312e+00 + -5.5310372139103198e-02 5.4397761866249605e-01 4.0415057658177957e+00 + -1.0480506879369975e+00 -6.4236080600745082e-01 4.0651003747567263e+00 + -1.3237680667329550e+00 -2.2050655597604125e+00 4.5171611943566878e+00 + -7.0488876134746448e-01 -3.3452175732179548e+00 5.2108703321964409e+00 + 8.1983626193968540e-02 -3.6406268170784046e+00 5.8657485326394099e+00 + id 11926 + loc 7.1361422538757324e-01 5.4016453027725220e-01 1054 + blend 0.0000000000000000e+00 + interp 3.7042919214261671e-01:2.5986416384054806e-01:1.8533509319674091e-01:3.1873560162273007e-01:9.7950010885817695e-01:2.1987928995154901e-01:1.8615420694796825e+00:3.7042548785069529e-01:2.2665677892008049e+00:2.7256751022546649e-01:3.0000125929357293e+00:3.0539808449452505e-01:3.4843050059296021e+00 + CVs 20 + 2.1111623362544024e-01 4.2569681456987191e-01 -2.0503154463998374e-01 + 3.8602274964651007e-01 8.1790439204755661e-01 -3.5059937113714512e-01 + 5.1471424712872471e-01 1.2124286998445009e+00 -4.4141845511107769e-01 + 6.1920904444813929e-01 1.6208266253526866e+00 -4.8616357747127448e-01 + 7.6534679890147550e-01 2.0244242388852101e+00 -5.0631042791015823e-01 + 1.0128764213271331e+00 2.3795214387848098e+00 -5.3538599270338094e-01 + 1.3626253013977496e+00 2.6335791755967453e+00 -6.0594127354907967e-01 + 1.7699052447697081e+00 2.7380889237560013e+00 -7.4038884608341204e-01 + 2.1680148928422471e+00 2.6695461563293845e+00 -9.3101273210785851e-01 + 2.4772389883469272e+00 2.4163734932772347e+00 -1.1464686429135404e+00 + 2.6543299299583309e+00 1.9891965138486456e+00 -1.3228109038699429e+00 + 2.6879052788677655e+00 1.4675535083661337e+00 -1.3057813275607084e+00 + 2.6221958052909695e+00 9.2601926079220476e-01 -9.5458567104855319e-01 + 2.7557479989671916e+00 4.4645770249124228e-01 -4.0404928394226025e-01 + 3.1395789609830991e+00 1.8297925853605679e-01 -4.4264765638688419e-02 + 3.5216670682243434e+00 1.5943675406668129e-01 2.2824093110985655e-02 + 3.7089572316580646e+00 3.8822559295877590e-01 -2.1224514669472638e-01 + 3.8535509843197810e+00 6.3058875742018550e-01 -6.1510229731561417e-01 + 4.1230828584298207e+00 2.8178348185474800e-01 -4.4353313057686616e-01 + id 11927 + loc 4.7881552577018738e-01 6.3993662595748901e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2336211793910056e-01:3.6794364596912704e-01:8.5526558262409846e-02:3.8718867422949127e-01:9.7896602751323525e-01:3.4404367832447025e-01:1.6311992983634234e+00:3.4661357440953133e-01:2.3978798294927968e+00:3.5816942606465807e-01:3.0118576740127376e+00:4.2335788431792121e-01:3.6130500109000998e+00 + CVs 20 + -1.3520851968895581e-01 4.7149521915790960e-01 2.2724879615154492e-01 + -2.9718677612461886e-01 8.7407097579718318e-01 3.6385571213550949e-01 + -4.8761172371196193e-01 1.2320358196926269e+00 4.5833638284051575e-01 + -7.0717921777476944e-01 1.5470619214624033e+00 5.2262199811038546e-01 + -9.5111563241420094e-01 1.8081937993087229e+00 5.5133074518227732e-01 + -1.2093571514018691e+00 2.0084107412564602e+00 5.4315120440516140e-01 + -1.4703483520076726e+00 2.1447587501930419e+00 5.0010314498975572e-01 + -1.7250195571240787e+00 2.2186859697733343e+00 4.2652683019474658e-01 + -1.9695467327462821e+00 2.2335929255469420e+00 3.2659567350925900e-01 + -2.2041312260813979e+00 2.1899254270484683e+00 2.0408307983910379e-01 + -2.4285167047927336e+00 2.0862784510198633e+00 6.9650733456236402e-02 + -2.6425655238051515e+00 1.9247320749359349e+00 -5.8965318898242303e-02 + -2.8462144560003186e+00 1.7104197604226570e+00 -1.6362635683023158e-01 + -3.0392549130353146e+00 1.4513754972770294e+00 -2.2592189082212105e-01 + -3.2224026610467900e+00 1.1658295075339797e+00 -2.2244866023911600e-01 + -3.4039353430749686e+00 8.7827527469559807e-01 -1.3230880692944186e-01 + -3.6068713610934653e+00 6.2388549573372953e-01 4.3930078237591014e-02 + -3.8658002174848445e+00 4.3983830171661398e-01 2.8490121261374535e-01 + -4.2367838823973285e+00 2.0760390088945610e-01 6.0086253513445587e-01 + id 11928 + loc 5.4322886466979980e-01 1.5541422367095947e-01 1053 + blend 0.0000000000000000e+00 + interp 5.5713875622456377e-01:2.8082720689577934e-01:5.2071182923070003e-02:2.7540084406293108e-01:1.1435953804703198e+00:5.5713318483700158e-01:1.9382486227967681e+00:5.3045312817290291e-01:2.1981686350142606e+00:3.0324625185121651e-01:2.7790504577312385e+00:4.1095474307200963e-01:3.2972678353987770e+00 + CVs 20 + 2.5796855553134712e-01 3.8283954265654790e-01 -3.0096276709963699e-01 + 5.1080881175137649e-01 7.1372013970710246e-01 -5.6372772711986208e-01 + 7.5895480794611381e-01 9.9859987473653300e-01 -8.0703433685907866e-01 + 1.0021568467325097e+00 1.2284565706804567e+00 -1.0376670788342999e+00 + 1.2387489566903336e+00 1.3958664453755680e+00 -1.2543805324152353e+00 + 1.4666024951897625e+00 1.5064611197911080e+00 -1.4580654784177460e+00 + 1.6870675667870834e+00 1.5706324271747278e+00 -1.6540094143829092e+00 + 1.9096340382681591e+00 1.5948952261068059e+00 -1.8522636834764263e+00 + 2.1416100891079277e+00 1.5837692614147629e+00 -2.0512032571474035e+00 + 2.3789304326576022e+00 1.5528486434553874e+00 -2.2401709658022435e+00 + 2.6223705904607262e+00 1.5267905121323360e+00 -2.4110662716325590e+00 + 2.8866587736617713e+00 1.5134803493489679e+00 -2.5507568366485165e+00 + 3.1813541084143955e+00 1.4602180546885581e+00 -2.6496626354778350e+00 + 3.4172955224962864e+00 1.2306082966102205e+00 -2.7188780293092147e+00 + 3.4512875021475247e+00 7.6202509895990400e-01 -2.7652966976413262e+00 + 3.2739598478642731e+00 9.0003417898227078e-02 -2.7208557426039923e+00 + 2.9533946835100449e+00 -7.0687740008564037e-01 -2.4479414689374552e+00 + 2.6193659135143510e+00 -1.3271189815760835e+00 -1.9330165989369472e+00 + 2.6582515802194262e+00 -1.2159753014222920e+00 -1.7623702369928804e+00 + id 11929 + loc 4.3291869759559631e-01 1.6614224016666412e-01 411 + blend 0.0000000000000000e+00 + interp 4.6091872054717520e-01:3.5669108143211414e-01:4.0803499234612484e-01:3.4439723124691862e-01:1.0515391823217135e+00:3.3672280627267848e-01:1.9345231001603886e+00:3.6930548130119140e-01:2.2803585196022857e+00:2.6789725933420466e-01:2.9981238850825558e+00:4.6091411135996974e-01:3.9905537175058523e+00 + CVs 20 + -1.2540290863295059e-01 1.9154577550507224e-01 -5.4207601084651547e-01 + -2.5829454565849663e-01 3.1948303640595666e-01 -9.6155386877805871e-01 + -3.7909864966827539e-01 4.2240438540908304e-01 -1.3795838531026601e+00 + -4.7044512578567232e-01 5.1352671355134338e-01 -1.8469480806490173e+00 + -5.2630993143437399e-01 5.7891812154342948e-01 -2.3584154870508174e+00 + -5.4458519980218423e-01 6.0564469645352348e-01 -2.9038602372029958e+00 + -5.2690185733461736e-01 5.8225618540606794e-01 -3.4710637143016290e+00 + -4.7694442626653305e-01 4.9527701595265317e-01 -4.0441175645039475e+00 + -4.0247988542463614e-01 3.3123788187043535e-01 -4.6004585401217559e+00 + -3.1869707359042904e-01 8.1633154031041766e-02 -5.1102555960897886e+00 + -2.4290491752025947e-01 -2.5006925721805029e-01 -5.5395793557762385e+00 + -1.8298032241471340e-01 -6.4111633857934569e-01 -5.8654345446897755e+00 + -1.3636340464274388e-01 -1.0585306652723374e+00 -6.0884502126799127e+00 + -9.9109021880865122e-02 -1.4730742137824944e+00 -6.2238937106189720e+00 + -6.7522886467615284e-02 -1.8617864118671013e+00 -6.2890162492701887e+00 + -3.4414917543411860e-02 -2.2073429369579194e+00 -6.3011654319678971e+00 + 6.2030744343518629e-03 -2.5022021282497553e+00 -6.2822438397922165e+00 + 4.9690489831700324e-02 -2.7586295970941679e+00 -6.2605451347342402e+00 + 9.1905121697227421e-02 -3.0302955022502127e+00 -6.2939222917584345e+00 + id 11930 + loc 8.7947481870651245e-01 3.9752626419067383e-01 397 + blend 0.0000000000000000e+00 + interp 5.3507263556244744e-01:2.8824799317968425e-01:1.9715599883727919e-01:4.0094862282732197e-01:5.1766440937512848e-01:5.3506728483609189e-01:1.1579606469891579e+00:4.5818337703647544e-01:1.6234018742599008e+00:3.3411532573453301e-01:2.0255251145213391e+00:2.7795619661100435e-01:2.9783347795301101e+00:4.2859693478377253e-01:3.2349453331463649e+00 + CVs 20 + -1.2609632365509666e+00 2.3490527677034467e-01 3.1620355816545564e-01 + -2.0599975373286097e+00 2.5435734806320121e-01 5.4263414838186430e-01 + -2.7603230581627942e+00 1.9937147087828497e-01 7.6512409342140653e-01 + -3.4859360723469752e+00 1.1780572856401716e-01 1.0165514602331067e+00 + -4.2108392579784528e+00 -4.3575906116469776e-03 1.3060003575603474e+00 + -4.9090015546612378e+00 -1.6367611879813565e-01 1.6388654560113078e+00 + -5.5590511752795040e+00 -3.5010442156026922e-01 2.0089449317535952e+00 + -6.1511444598985303e+00 -5.5844228031559973e-01 2.3941534505268169e+00 + -6.6891715564822780e+00 -7.9359553263732585e-01 2.7666204936561454e+00 + -7.1835005845092539e+00 -1.0671679859983114e+00 3.1027120263572749e+00 + -7.6430896625203895e+00 -1.3948301593298171e+00 3.3884144688741449e+00 + -8.0680491383637083e+00 -1.7902068811753145e+00 3.6172977733688190e+00 + -8.4522534049409277e+00 -2.2610780397889965e+00 3.7872030041643345e+00 + -8.7852943392654748e+00 -2.8055435295902731e+00 3.8983265276777468e+00 + -9.0545567744600408e+00 -3.4124081640451340e+00 3.9581112969347414e+00 + -9.2464430547283047e+00 -4.0606251049563262e+00 3.9823065674508618e+00 + -9.3504155387520864e+00 -4.7136744014831224e+00 3.9828396236848054e+00 + -9.3675279050404381e+00 -5.3236603779702936e+00 3.9599718459107032e+00 + -9.3063096297332013e+00 -5.8168253734070694e+00 3.8932589744164887e+00 + id 11931 + loc 1.1668191850185394e-01 8.5709416866302490e-01 1048 + blend 0.0000000000000000e+00 + interp 7.3939304608105583e-01:3.1789757977871341e-01:1.1239636522283758e-01:4.4177277555616207e-01:1.0345039494520614e+00:7.2160712107440605e-01:1.7565232210287016e+00:7.3938565215059504e-01:1.9906410588274093e+00:6.6226161436874287e-01:2.1746325160897366e+00:4.8652390832470116e-01:2.5854306800454943e+00:4.2902989448457057e-01:3.0046682719917399e+00:5.3973137938210525e-01:3.6030273954966212e+00 + CVs 20 + 8.3411545595772962e-02 5.0581447337573049e-01 -2.9941432392205658e-01 + 1.8910935701475273e-01 1.0064325371747092e+00 -5.4082671085401679e-01 + 3.0653691724968041e-01 1.5097590797046918e+00 -7.1478456801742374e-01 + 4.5510438626133976e-01 2.0273066732555964e+00 -8.3892443925375848e-01 + 6.7313928321071126e-01 2.5414003161481400e+00 -9.4538964616768018e-01 + 9.8261609551032070e-01 3.0086194331049980e+00 -1.0748897040614656e+00 + 1.3763033371859810e+00 3.3841667111201996e+00 -1.2511058662651195e+00 + 1.8240247988298544e+00 3.6374364805915422e+00 -1.4766192499388069e+00 + 2.2836152232620415e+00 3.7546212079380825e+00 -1.7500359156018928e+00 + 2.7142563037858327e+00 3.7486723006012310e+00 -2.0714410826485175e+00 + 3.0833548629082324e+00 3.6462954332729627e+00 -2.4364819767780892e+00 + 3.3584548034339181e+00 3.4611058112622022e+00 -2.8261239865662811e+00 + 3.5104600090562821e+00 3.1937512046428269e+00 -3.2097652163644392e+00 + 3.5783075209272281e+00 2.8473984279151958e+00 -3.6044022640903801e+00 + 3.6407591558069567e+00 2.4069207731998890e+00 -4.0635256146810086e+00 + 3.7086905860993560e+00 1.8875326399999679e+00 -4.5568681893991165e+00 + 3.6867196769284418e+00 1.3313634443889981e+00 -4.9335084628849000e+00 + 3.5067027314511452e+00 8.0291340110203469e-01 -5.0420364845709527e+00 + 3.3757864710755254e+00 3.0371942640487837e-01 -5.3696038304714886e+00 + id 11932 + loc 5.3740161657333374e-01 8.5506343841552734e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7624626499822287e-01:3.3019813058351549e-01:8.9367413052877431e-01:4.7624150253557290e-01:1.4135847534073589e+00:3.2528145579936663e-01:1.9814847624565282e+00:3.6556439828616388e-01:2.4843895928476494e+00:3.4213160817607946e-01:2.9994623762224641e+00:3.8349558493725533e-01:3.9902892203863720e+00 + CVs 20 + 2.1871731730943489e-01 1.7690704915758138e-01 -3.2433514919434187e-01 + 4.2686259563380152e-01 3.4723935003356265e-01 -6.4059308798155246e-01 + 6.2792752012314512e-01 5.0349574732432134e-01 -9.5302740603117353e-01 + 8.1563537668411046e-01 6.4834899841489924e-01 -1.2641408799164315e+00 + 9.7821697626516357e-01 7.8153493608253688e-01 -1.5726197782015343e+00 + 1.1065251444341189e+00 8.9721382281009054e-01 -1.8771193001704998e+00 + 1.1967847870041677e+00 9.8611134461314487e-01 -2.1725034372929644e+00 + 1.2490765438903597e+00 1.0383263367918154e+00 -2.4458786720131243e+00 + 1.2643292558203276e+00 1.0496929097848386e+00 -2.6785459047444866e+00 + 1.2425026037788263e+00 1.0282955036957513e+00 -2.8486918405851949e+00 + 1.1850191479160328e+00 9.9950288696779654e-01 -2.9423048697149388e+00 + 1.1006298310301494e+00 9.9865527993801217e-01 -2.9678985044507180e+00 + 1.0049603241603975e+00 1.0519536072359770e+00 -2.9557788310068425e+00 + 9.1402807314138601e-01 1.1544914215512871e+00 -2.9510183770660152e+00 + 8.4625672875512081e-01 1.2819387583288866e+00 -2.9776593414931032e+00 + 8.4344309421022845e-01 1.4323078790288370e+00 -3.0229813855057301e+00 + 9.5466459628298805e-01 1.6036040428640230e+00 -3.0791823889633974e+00 + 1.1200623520410211e+00 1.7192067374081974e+00 -3.1641784930506622e+00 + 9.7723303446855314e-01 1.5944504655410323e+00 -3.2349198707267610e+00 + id 11933 + loc 8.9791721105575562e-01 4.1926571726799011e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0092571390561047e-01:3.2542590282362693e-01:3.1666957005017649e-03:5.0092070464847138e-01:6.7854836490552017e-01:3.2830931101754840e-01:1.1019152507713375e+00:4.6490660225028252e-01:1.9978729509021873e+00:3.3460363439738666e-01:2.7212168494381110e+00:3.5924785961696443e-01:3.2955072630302191e+00 + CVs 20 + -1.4184478112718402e-01 3.2377036923687291e-01 1.9694632033832010e-01 + -2.8117453434503564e-01 6.4097030635253716e-01 3.7708775466966643e-01 + -4.3204070221275814e-01 9.4649194772801704e-01 5.4163873562833320e-01 + -5.9740322499807608e-01 1.2362445069592747e+00 6.9458358887187333e-01 + -7.7572266719070881e-01 1.5087111321515330e+00 8.4262985276817348e-01 + -9.6619531248436186e-01 1.7642987760348028e+00 9.9459808908261660e-01 + -1.1693142684617661e+00 2.0057823380310129e+00 1.1630514800683351e+00 + -1.3845697052369290e+00 2.2359336526212283e+00 1.3654657694929888e+00 + -1.6048231438297846e+00 2.4514812373795358e+00 1.6220744842697570e+00 + -1.8145123067135742e+00 2.6394709039142108e+00 1.9479827132857026e+00 + -1.9959307301946336e+00 2.7791192167795638e+00 2.3440609685255418e+00 + -2.1356187291706870e+00 2.8464587399087944e+00 2.7911946087839472e+00 + -2.2304141360359098e+00 2.8265718785036453e+00 3.2575421061024810e+00 + -2.2900386397705295e+00 2.7191346900221567e+00 3.7160852722305466e+00 + -2.3315690269573608e+00 2.5297829975185246e+00 4.1508204757418810e+00 + -2.3757270114504876e+00 2.2605907080877365e+00 4.5553110087597419e+00 + -2.4403414134817361e+00 1.9095019322044631e+00 4.9174313856035710e+00 + -2.5244930806866868e+00 1.4912951326923738e+00 5.2038387718575594e+00 + -2.6014297715208134e+00 1.1103802755004570e+00 5.3323808300319593e+00 + id 11934 + loc 2.8760433197021484e-01 1.5144883096218109e-01 1090 + blend 0.0000000000000000e+00 + interp 4.8615130753225533e-01:3.3503942664030956e-01:5.8611326038916500e-01:3.8937801817337364e-01:1.1229596708266341e+00:3.1550105743466267e-01:2.0535409923666128e+00:2.6182402758450524e-01:3.2495812141210045e+00:4.8614644601918000e-01:3.9761048641578181e+00 + CVs 20 + 4.3642328676983316e-01 5.0692286629625072e-01 -5.0973581714614663e-02 + 7.3310202458989548e-01 9.5783882477165705e-01 -2.9829176652437395e-02 + 9.6189859812020018e-01 1.3872927618130446e+00 2.7993366306550527e-02 + 1.1424282011901137e+00 1.8170036159371274e+00 1.2503723747204787e-01 + 1.2567858449738687e+00 2.2320891549809394e+00 2.7454525146683095e-01 + 1.2827133248852323e+00 2.6116472723436219e+00 4.8712977351847020e-01 + 1.1892381800182261e+00 2.9209706767465731e+00 7.6529891652180737e-01 + 9.5018973011893781e-01 3.1036525335507745e+00 1.0808629464457811e+00 + 5.9585141813079301e-01 3.1116061474074810e+00 1.3660999408886774e+00 + 2.2152353627169197e-01 2.9702368338264620e+00 1.5841686322123096e+00 + -1.1686122105201235e-01 2.7325600373675933e+00 1.7657213747195333e+00 + -4.0867212059334040e-01 2.4134283322537122e+00 1.9398841264686257e+00 + -6.3855441396005586e-01 2.0098348255666574e+00 2.1209513035613634e+00 + -7.7115408022818488e-01 1.5154084153252314e+00 2.3228648111565708e+00 + -7.5234518253070504e-01 9.4974939593827834e-01 2.5508279885850245e+00 + -5.6999112744867264e-01 4.1616837971292442e-01 2.8002228312529525e+00 + -2.7953255663978316e-01 2.2050365174906994e-02 3.0803902434543877e+00 + 3.8245944207614402e-02 -1.9935369566028432e-01 3.3762329892482748e+00 + 1.7595090482176079e-01 -3.7646149237266679e-01 3.5277096841154059e+00 + id 11935 + loc 1.9918054342269897e-01 1.0311085730791092e-01 1077 + blend 0.0000000000000000e+00 + interp 3.1714498410580805e-01:2.6177400386551486e-01:4.1608707859942107e-01:2.6903925534976803e-01:1.0344862289261065e+00:2.4319398112615026e-01:1.9985162527020295e+00:3.1714181265596703e-01:2.9867892187176119e+00:2.6731965041221600e-01:3.7111814543208288e+00 + CVs 20 + -1.1608717637971964e-01 3.0621092036466568e-01 5.5978405190188624e-02 + -2.4589159845870370e-01 6.1718757659032397e-01 9.5799192177622533e-02 + -3.9450242973525962e-01 9.3399830724941380e-01 1.1313136373084381e-01 + -5.6853248139144164e-01 1.2508301832496258e+00 9.8608731858132570e-02 + -7.7673705402901017e-01 1.5542513942374852e+00 3.9784361345910124e-02 + -1.0224707159392867e+00 1.8255943575723732e+00 -7.4500756229843201e-02 + -1.3006634358554079e+00 2.0428607448788858e+00 -2.5150427249988538e-01 + -1.5969514685870216e+00 2.1873095336899615e+00 -4.9037950067650571e-01 + -1.8921904163106724e+00 2.2492632859234876e+00 -7.8011571937754676e-01 + -2.1735999564129367e+00 2.2303041287568344e+00 -1.0995525035972633e+00 + -2.4429260549421277e+00 2.1393567949481662e+00 -1.4234715605740023e+00 + -2.7101559675613451e+00 1.9834432328653637e+00 -1.7286279644591598e+00 + -2.9846864086405027e+00 1.7654596046033317e+00 -1.9912479061383319e+00 + -3.2735049395864273e+00 1.4927183087238738e+00 -2.1815474634595859e+00 + -3.5775269027877461e+00 1.1904969808892814e+00 -2.2646335044590526e+00 + -3.8759595853462501e+00 9.3190419515380185e-01 -2.2316492899711564e+00 + -4.1264147191606790e+00 8.1023916538513285e-01 -2.1564755673508467e+00 + -4.2924868122006021e+00 8.1586062817306360e-01 -2.1380804147475461e+00 + -4.5141683190347761e+00 8.4832198888766341e-01 -2.0364567306665102e+00 + id 11936 + loc 7.9407465457916260e-01 2.3263546824455261e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3063672804441311e-01:3.4185283687656481e-01:9.7449497813153485e-03:3.6884589935606366e-01:5.0967413515146109e-01:4.3063242167713267e-01:9.5777018298511019e-01:3.4677854113361478e-01:1.6474486566873603e+00:3.8108512075480372e-01:2.5513041081240129e+00:2.8898328599032169e-01:3.1000366851743255e+00 + CVs 20 + -2.0392122802168886e-01 3.7838068131803093e-01 1.8598740490589577e-01 + -4.0747430866106732e-01 7.5751924409471316e-01 3.7537960643816287e-01 + -6.0818503658704204e-01 1.1207050980964350e+00 5.9340060938699002e-01 + -7.9234455814551485e-01 1.4525940115989848e+00 8.5210594882977309e-01 + -9.5007806241068105e-01 1.7366816268605598e+00 1.1571963744952640e+00 + -1.0912518459751401e+00 1.9552114116596218e+00 1.5125832725316204e+00 + -1.2343794778404042e+00 2.0989786123595344e+00 1.9192809699024052e+00 + -1.3906639923826887e+00 2.1651979882088739e+00 2.3736798961054597e+00 + -1.5633459442007021e+00 2.1506470069282093e+00 2.8632220908911399e+00 + -1.7499073457598102e+00 2.0500900122182957e+00 3.3672602111028258e+00 + -1.9291515930046570e+00 1.8614618157775102e+00 3.8516586356101690e+00 + -2.0403731099877760e+00 1.6095364085163855e+00 4.2623079439443616e+00 + -2.0165936442745127e+00 1.3730617626073651e+00 4.5518022202274899e+00 + -1.8798064654130355e+00 1.2136410764312808e+00 4.7433749411884776e+00 + -1.6881140463424715e+00 1.0991893389707397e+00 4.8936996585150414e+00 + -1.4991529927743570e+00 1.1433026144044032e+00 4.9974796850564358e+00 + -1.6692590220878942e+00 1.6821224448804803e+00 5.0385704532765017e+00 + -2.5023481604139692e+00 2.2229326518148405e+00 5.0503650126776360e+00 + -2.0887017777144297e+00 2.3649348548679687e+00 5.1444212013820136e+00 + id 11937 + loc 5.6005501747131348e-01 1.7900037765502930e-01 397 + blend 0.0000000000000000e+00 + interp 5.0743461133044310e-01:4.6448102911042471e-01:4.8753294235320044e-02:5.0510503175475951e-01:5.8760026652655706e-01:5.0498283105859054e-01:9.9971744433312182e-01:5.0742953698432980e-01:1.4019580055766545e+00:3.1783830187068618e-01:2.1074130607807011e+00:3.0449474855595793e-01:2.9747889948379167e+00:4.5865426215262656e-01:3.7911565189764769e+00 + CVs 20 + -1.0258659712083038e+00 1.7550219266935274e-01 2.9664412874752488e-01 + -1.6435722730120013e+00 1.8079273929160000e-01 4.8442605404246064e-01 + -2.1654586000934337e+00 1.3345032926285705e-01 6.3255399693989067e-01 + -2.7090065632709908e+00 1.0123546238479936e-01 7.5462079992988440e-01 + -3.2752652519155010e+00 7.2540499219038823e-02 8.5947651963481686e-01 + -3.8660404399665027e+00 3.0318546946309255e-02 9.6218243368118506e-01 + -4.4791613272419966e+00 -3.5824241011475522e-02 1.0847976017178573e+00 + -5.1107647434457260e+00 -1.2626313057436789e-01 1.2501864087114822e+00 + -5.7602641844408673e+00 -2.5273844187434791e-01 1.4636563814484500e+00 + -6.4252181804006812e+00 -4.4113295228899441e-01 1.7128889939909482e+00 + -7.0723250363012156e+00 -7.2203359513588417e-01 2.0048087437000439e+00 + -7.6467258921810535e+00 -1.1052221441330963e+00 2.3475902770539139e+00 + -8.1038145206107224e+00 -1.5741349603848405e+00 2.7311787015044229e+00 + -8.4232171547916934e+00 -2.0983382395767216e+00 3.1288780451846199e+00 + -8.6032058953363411e+00 -2.6411193169458134e+00 3.5108283973385914e+00 + -8.6567275560321342e+00 -3.1700235433748705e+00 3.8550760860431010e+00 + -8.6066053984194255e+00 -3.6658721731374388e+00 4.1472698040730434e+00 + -8.4786180021319417e+00 -4.1135572654333128e+00 4.3749302310813025e+00 + -8.2729663377535161e+00 -4.4571343772700489e+00 4.5087766549256187e+00 + id 11938 + loc 1.1139305680990219e-01 5.3607959300279617e-02 1048 + blend 0.0000000000000000e+00 + interp 5.1024981959819848e-01:4.7045547776976959e-01:2.3206488304032158e-02:2.7931389161549020e-01:1.3990855010726182e+00:4.9666783404367887e-01:1.9886178050323271e+00:5.1024471710000252e-01:2.7906172549309556e+00:4.5311472356701299e-01:3.3422335550542748e+00 + CVs 20 + -2.8020497464891869e-01 4.5326976614473624e-01 2.7454306420848368e-02 + -5.4216623954468468e-01 8.5735636800985748e-01 2.3945151460058045e-02 + -7.8805738847385975e-01 1.2247736059032475e+00 -4.0387300523404557e-03 + -1.0175315174446014e+00 1.5539076008229851e+00 -5.2798937491327802e-02 + -1.2249981104527246e+00 1.8346111234656084e+00 -1.2376282823452778e-01 + -1.4041707568057009e+00 2.0621169993087269e+00 -2.1226981597044947e-01 + -1.5469380998829450e+00 2.2389248764248628e+00 -3.0759861865368110e-01 + -1.6411938566224125e+00 2.3744632332977185e+00 -4.0161109110166826e-01 + -1.6650343789031137e+00 2.5121318094907830e+00 -4.9899011215292677e-01 + -1.6417930582941502e+00 2.7509528047995504e+00 -6.4919197289840436e-01 + -1.7277973017050083e+00 3.0643706631743077e+00 -8.8300480405606940e-01 + -1.9612718737349901e+00 3.2665523661294991e+00 -1.1030729970918689e+00 + -2.2595089716188825e+00 3.3290284349851849e+00 -1.2738403230980861e+00 + -2.5814852246378392e+00 3.2898085416876457e+00 -1.3432479386354561e+00 + -2.8464998066423881e+00 3.2061661248303190e+00 -1.2007705956174997e+00 + -2.9820014763000717e+00 3.1292547408316569e+00 -8.5399362373016086e-01 + -2.8454511587255329e+00 3.0654218382516758e+00 -4.0560398032742140e-01 + -2.0491888066718831e+00 2.8279472160711601e+00 2.1758300162866862e-01 + -2.1566328749663866e+00 2.8836378920062318e+00 2.9549455366550736e-01 + id 11939 + loc 7.8502249717712402e-01 9.5346283912658691e-01 411 + blend 0.0000000000000000e+00 + interp 5.3404335313593854e-01:4.2042743720064557e-01:5.0609539547969984e-03:4.7229720895100680e-01:7.8124584478864612e-01:2.9133249797451827e-01:1.1032447553175915e+00:3.8829327626010668e-01:1.4149680773828464e+00:5.3403801270240725e-01:2.0127223220694006e+00:3.1259040326264709e-01:2.8282541075220098e+00:3.4515544694480454e-01:3.3465555121060451e+00 + CVs 20 + 9.8718079703294226e-01 2.1936603719079437e-01 -2.0167020090518317e-01 + 1.6554296260806096e+00 2.6097251610111505e-01 -3.6093158662369818e-01 + 2.2380764410896234e+00 2.2801252664015309e-01 -5.0296548315408096e-01 + 2.8291233142303835e+00 1.5963338598407467e-01 -6.3955821768273102e-01 + 3.4186409231053529e+00 4.9442853176056789e-02 -7.6979544957524715e-01 + 3.9970915234849422e+00 -1.0563657496220102e-01 -8.9539089139848682e-01 + 4.5539908663472284e+00 -3.0569362146839285e-01 -1.0202534840333908e+00 + 5.0756495109311626e+00 -5.5017804360833966e-01 -1.1496156548381311e+00 + 5.5440140614111062e+00 -8.3748830693007825e-01 -1.2906081505554043e+00 + 5.9414447422692680e+00 -1.1609825041691282e+00 -1.4470768839512980e+00 + 6.2556519764696894e+00 -1.5095267615632562e+00 -1.6197734263442345e+00 + 6.4937879391911322e+00 -1.8815263968220846e+00 -1.8041932468597741e+00 + 6.6730916112727829e+00 -2.2873352054908089e+00 -1.9885579368417692e+00 + 6.7993903788880292e+00 -2.7269893093923283e+00 -2.1562706314822910e+00 + 6.8696191826671544e+00 -3.1853131482231491e+00 -2.2934876851141253e+00 + 6.8816434376924693e+00 -3.6502313625864824e+00 -2.3913357947580756e+00 + 6.8341423420194758e+00 -4.1158505654870705e+00 -2.4429272634409642e+00 + 6.7320869131285264e+00 -4.5708691876609713e+00 -2.4498838667657288e+00 + 6.6589712141947022e+00 -5.1365715527632902e+00 -2.4307260509410091e+00 + id 11940 + loc 4.1755533218383789e-01 1.7912652343511581e-02 1077 + blend 0.0000000000000000e+00 + interp 4.7818081534463069e-01:3.2702153934066602e-01:3.9885709056653118e-02:2.9649725278891981e-01:9.3538020370708286e-01:4.7817603353647725e-01:1.5185476946314780e+00:2.6196705556277594e-01:2.1310011117841454e+00:3.0290606984427965e-01:3.3855683355342183e+00 + CVs 20 + -1.7516038657118765e-01 2.8547036975631684e-01 8.0564051428524006e-02 + -3.3551498613417707e-01 5.6442206833881770e-01 1.4916719133897838e-01 + -4.9185777743423426e-01 8.4339312222725227e-01 2.0602096339237691e-01 + -6.5690485442323210e-01 1.1290857462533619e+00 2.4777785041750261e-01 + -8.4518508417187166e-01 1.4235507053521008e+00 2.6420331676510123e-01 + -1.0710784098155637e+00 1.7225335061140972e+00 2.4241826870761451e-01 + -1.3440839005445990e+00 2.0128544674944688e+00 1.6821785199258543e-01 + -1.6636882486214160e+00 2.2740871143703076e+00 2.9637658984798643e-02 + -2.0164118644981510e+00 2.4853759481252311e+00 -1.7904118367587951e-01 + -2.3794147672332748e+00 2.6308551041088970e+00 -4.5359315042040627e-01 + -2.7367341495336905e+00 2.7031712099405865e+00 -7.7839534599905813e-01 + -3.0904307156761144e+00 2.6987440244057184e+00 -1.1332933073381044e+00 + -3.4483583726935256e+00 2.6107614179853313e+00 -1.4979476948477652e+00 + -3.8070890911268411e+00 2.4346152687195373e+00 -1.8464138599405509e+00 + -4.1517801996368027e+00 2.1818222760121326e+00 -2.1481769115529534e+00 + -4.4455365502751425e+00 1.9059110743149621e+00 -2.3637804453138185e+00 + -4.6129817398927537e+00 1.6972185338589569e+00 -2.5047849460457745e+00 + -4.6330584361854656e+00 1.5577800231565746e+00 -2.6315292944206559e+00 + -4.8798943755605508e+00 1.5597314521307479e+00 -2.4406180401886939e+00 + id 11941 + loc 6.2256187200546265e-01 8.6544340848922729e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3102797197053638e-01:3.9013267898485837e-01:4.1154713643198559e-02:3.4787523002013176e-01:7.4627227771419569e-01:3.5351860495864762e-01:1.0639193947022885e+00:3.7843865014608596e-01:1.7829955750887185e+00:3.9094776968475775e-01:2.0299419473589473e+00:3.3133148610127339e-01:2.8283989849414519e+00:3.1426953437800870e-01:3.1260090538898124e+00:4.3102366169081668e-01:3.7023640895823533e+00 + CVs 20 + -1.6096482544260390e-01 2.1479889544062841e-01 2.5677027690787702e-01 + -3.2167713697210176e-01 3.7022246475701942e-01 4.4684333142939564e-01 + -4.7164598297534233e-01 5.0060094301883162e-01 6.0194614718598594e-01 + -5.9153072137282414e-01 6.2485939372505583e-01 7.5186969107784440e-01 + -6.8090780978984711e-01 7.5431806268058077e-01 9.0637897906122200e-01 + -7.4947779818247973e-01 9.0804468867874633e-01 1.0755745694158858e+00 + -8.2366689579569696e-01 1.1075202126760264e+00 1.2596036773831027e+00 + -9.4230464654130075e-01 1.3596666941451316e+00 1.4341857169304137e+00 + -1.1201941080872597e+00 1.6436204619915786e+00 1.5521839601962908e+00 + -1.3214364874038367e+00 1.9201293929269523e+00 1.5684095166004286e+00 + -1.5022264754185839e+00 2.1639305559777582e+00 1.4704939414538041e+00 + -1.6581935662976441e+00 2.3681866038480637e+00 1.2669191520989560e+00 + -1.8009609714160157e+00 2.5217415165664967e+00 9.6304690468843202e-01 + -1.9331921511878758e+00 2.5970027049798254e+00 5.5712827116921049e-01 + -2.0624660712577469e+00 2.5455756397889493e+00 6.1995516448004273e-02 + -2.1955649699542445e+00 2.2972073774801571e+00 -4.2082558683485405e-01 + -2.3137352368354684e+00 1.8535562038870803e+00 -7.6319780906660284e-01 + -2.4513636632129185e+00 1.3036559758408064e+00 -9.0897640350726561e-01 + -2.7864240104887190e+00 9.9319197429874984e-01 -7.4791287081326885e-01 + id 11942 + loc 3.4848749637603760e-01 3.9692929387092590e-01 384 + blend 0.0000000000000000e+00 + interp 1.4523457074244415e+00:1.4523357074244414e+00:2.2995339339762866e-01:7.0409407109238653e-01:4.1083741507333316e-01:5.0560646253710695e-01:8.9945383182275540e-01:2.8242853080602787e-01:1.0337911193279739e+00:2.7794772527948591e-01:1.9167365434044332e+00:4.8538785189447381e-01:2.0585539888465689e+00:9.6134166305659452e-01:2.1031703428444706e+00:8.1288661756966774e-01:2.1513957105088406e+00 + CVs 20 + -4.4230520315008048e-01 1.9537996981065020e-01 -1.2932277780442494e+00 + -7.8751843976130642e-01 1.9727407179180306e-01 -2.0669142484651779e+00 + -1.1262902650807627e+00 1.3298717875903199e-01 -2.7194751097702392e+00 + -1.4899952035626085e+00 4.5935230507733432e-02 -3.3979926192842851e+00 + -1.8699462163248419e+00 -7.7594886011945446e-02 -4.0925806385252086e+00 + -2.2590510320896735e+00 -2.4430156542638876e-01 -4.7878859256343720e+00 + -2.6546291969815003e+00 -4.5899546766917348e-01 -5.4683414777397488e+00 + -3.0485032819172755e+00 -7.3128454299144152e-01 -6.1132773133675622e+00 + -3.4244367628336323e+00 -1.0709043836645340e+00 -6.6984360505397058e+00 + -3.7650281644836374e+00 -1.4774175906989271e+00 -7.1983002355669701e+00 + -4.0595423433923212e+00 -1.9336925298067236e+00 -7.5936155177114264e+00 + -4.3039062898921516e+00 -2.4121984289445115e+00 -7.8813298486829773e+00 + -4.4988944239120716e+00 -2.8870084152686486e+00 -8.0743528740883708e+00 + -4.6501080072517329e+00 -3.3411325879447347e+00 -8.1931706796588006e+00 + -4.7678888481596768e+00 -3.7671742205218428e+00 -8.2587812189864938e+00 + -4.8669981622509262e+00 -4.1619098378825985e+00 -8.2890025514246197e+00 + -4.9623144179485088e+00 -4.5227724665653177e+00 -8.2961147248130054e+00 + -5.0567085387152320e+00 -4.8530279668893854e+00 -8.2835267389844720e+00 + -5.0888147481783390e+00 -5.1792737215086424e+00 -8.1868011117472186e+00 + id 11943 + loc 7.4449586868286133e-01 9.3894320726394653e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2721601885488975e-01:3.8066594192848485e-01:8.5784619882357527e-03:3.8811857992105347e-01:7.0421188086328801e-01:3.3814191521667442e-01:1.2553472686830671e+00:4.2126716447654045e-01:1.7329153023070172e+00:3.5534008453816457e-01:2.0519812447325183e+00:4.2721174669470119e-01:2.9385700675088149e+00:3.2103160021170674e-01:3.4304617439574110e+00 + CVs 20 + 1.4687314942243786e-02 2.7678081514743685e-01 -1.6942721718341255e-01 + 8.0990133385710483e-02 5.4252886406167988e-01 -3.2466505415646674e-01 + 1.8279071146037351e-01 7.8881614638510378e-01 -4.6046245948472264e-01 + 3.1057614418402929e-01 1.0142590219366905e+00 -5.7805871388715679e-01 + 4.6149958358934473e-01 1.2213630221466241e+00 -6.8266469897250004e-01 + 6.2811262294964432e-01 1.4138582596363256e+00 -7.8165242783395117e-01 + 8.0211110041347644e-01 1.5947903982708203e+00 -8.8059110626025783e-01 + 9.7536359436737829e-01 1.7665504686368778e+00 -9.8183475925314145e-01 + 1.1412028720349159e+00 1.9304215079718698e+00 -1.0883496079572132e+00 + 1.2985607859523456e+00 2.0873137838258788e+00 -1.2060932938786133e+00 + 1.4550579005775122e+00 2.2244638116621611e+00 -1.3447937545856794e+00 + 1.6110766784847510e+00 2.2909510479084028e+00 -1.5039374210379313e+00 + 1.7441712172062056e+00 2.2470090881934017e+00 -1.6572557062647828e+00 + 1.8248039270268810e+00 2.0963959005246786e+00 -1.7820909499714066e+00 + 1.8310019168300264e+00 1.8482753534576424e+00 -1.8824557088439089e+00 + 1.7672826309679717e+00 1.5160301788525441e+00 -2.0081494882887525e+00 + 1.6697561234997236e+00 1.1117245593492309e+00 -2.2486829058060076e+00 + 1.7013483907143174e+00 7.1167771717332895e-01 -2.5826766681613780e+00 + 1.9205233736303131e+00 6.9454786214510855e-01 -2.5534135164243685e+00 + id 11944 + loc 4.3904951214790344e-01 9.6918433904647827e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7624626499822287e-01:3.4559434177115866e-01:5.2576751000338429e-01:1.6107263995241780e-01:1.9523978309448833e+00:3.2077600672229956e-01:2.9982742567936809e+00:4.7624150253557290e-01:3.4217352502308955e+00:4.1724029365318654e-01:3.9861972847384428e+00 + CVs 20 + 1.1165746040568013e-01 2.1545143633986627e-01 -1.7562537287604404e-01 + 2.1049133386872002e-01 4.2046227455559543e-01 -3.4439238750729545e-01 + 3.0836654095573773e-01 6.0523268731148749e-01 -5.0683260150295495e-01 + 4.1063088258513702e-01 7.6396539743779290e-01 -6.5951895883309519e-01 + 5.1629920971240351e-01 9.0906051385992981e-01 -7.9986986194384802e-01 + 6.2846891569497676e-01 1.0578191062395541e+00 -9.3373970102223391e-01 + 7.4912662523511442e-01 1.2087544193493682e+00 -1.0844347698270969e+00 + 8.7548557066630783e-01 1.3476200365619755e+00 -1.2732354447213436e+00 + 1.0059833447200217e+00 1.4682308830228363e+00 -1.4986838982363446e+00 + 1.1431478414088381e+00 1.5731200117421054e+00 -1.7428621854341704e+00 + 1.2865575008613030e+00 1.6641953166189571e+00 -1.9867247801491983e+00 + 1.4307467120904962e+00 1.7368281892568622e+00 -2.2183421856880590e+00 + 1.5693296014899552e+00 1.7815400532448911e+00 -2.4330248852186638e+00 + 1.6911160446105356e+00 1.7842954587891744e+00 -2.6311424471290525e+00 + 1.7858664166717737e+00 1.7288765664337025e+00 -2.8100536595072891e+00 + 1.8630570660404460e+00 1.6155328034304688e+00 -2.9593892450020167e+00 + 1.9462202632828731e+00 1.4586423389506262e+00 -3.0695029064856736e+00 + 2.0233947452282512e+00 1.2680341449539192e+00 -3.1402749247011661e+00 + 1.8700071329101799e+00 9.5608572474741893e-01 -3.1483018932893461e+00 + id 11945 + loc 5.0233846902847290e-01 6.3993662595748901e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4674259003733091e-01:4.1916624313839174e-01:1.0448349086178710e-01:4.3366328223081452e-01:9.5849066403636130e-01:3.6488155143065887e-01:1.6469208990417505e+00:4.0379256482808940e-01:2.4041148037963938e+00:3.8987684076205203e-01:3.0049568476399133e+00:4.4673812261143053e-01:3.6328485008212437e+00 + CVs 20 + -2.6564464947663874e-01 3.1093052880209071e-01 3.0227521490273712e-01 + -5.5077475023558020e-01 5.8288035754239720e-01 5.6196804204267869e-01 + -8.5164565627825273e-01 8.4723926789782933e-01 8.1706102319759610e-01 + -1.1707868307970311e+00 1.1063246553329760e+00 1.0615344100934958e+00 + -1.5143317002424639e+00 1.3437616546643658e+00 1.2608206072377772e+00 + -1.8766741777755460e+00 1.5397940947882234e+00 1.3839157680943379e+00 + -2.2362552531013327e+00 1.6749821035170285e+00 1.4098186343626848e+00 + -2.5502385087149051e+00 1.7292797076384872e+00 1.3308179432789669e+00 + -2.7726536969294955e+00 1.6954535056673536e+00 1.1698975835560663e+00 + -2.9009911863243198e+00 1.5961939375750895e+00 9.7740065164729217e-01 + -2.9565743013919330e+00 1.4638887706561046e+00 8.2580522683594459e-01 + -2.9800591190731378e+00 1.3460469281206802e+00 7.7962458012520219e-01 + -3.0126323775405610e+00 1.2354807801461778e+00 7.5466684177385968e-01 + -3.0458200789982945e+00 1.0005609184685840e+00 6.1601269135613901e-01 + -3.0371828844418514e+00 6.2632724558881048e-01 3.4296895648271786e-01 + -2.9698015460621372e+00 2.4467999142106800e-01 -5.5073291006711322e-02 + -2.8818385715180179e+00 -1.2352038645563251e-02 -5.2721426885975231e-01 + -2.8419189728232426e+00 -1.0769607652266966e-01 -9.4869860217197444e-01 + -2.8939634181008467e+00 -7.9757701195438679e-02 -1.2188398058965546e+00 + id 11946 + loc 3.5104086995124817e-01 9.8290756344795227e-02 416 + blend 0.0000000000000000e+00 + interp 3.6887309091197434e-01:3.6346610110735428e-01:3.5230727038685350e-02:3.3149908589754723e-01:8.9527008391170027e-01:3.5720845143245722e-01:1.3591642730505886e+00:2.6377011581077403e-01:1.8210385868800096e+00:2.6935975923122601e-01:2.1824852894914657e+00:2.5031686901873429e-01:3.0078261333456613e+00:3.6886940218106523e-01:3.7162514876841248e+00 + CVs 20 + -5.8022626464448529e-02 2.3760259456844007e-01 -4.7649537121590974e-01 + -1.7167767763885716e-01 3.4919950369899255e-01 -7.9940137846735104e-01 + -3.0228040692391023e-01 4.0967026043825339e-01 -1.1083489096870001e+00 + -4.2588226037860238e-01 4.4938831543695618e-01 -1.4534695446125523e+00 + -5.3706564048489613e-01 4.6649920266638539e-01 -1.8334895529208466e+00 + -6.2763093512257828e-01 4.6060408789025775e-01 -2.2470361588935628e+00 + -6.8660037098815596e-01 4.3272072101685977e-01 -2.6872578135169078e+00 + -7.0662984226808401e-01 3.8486332376273924e-01 -3.1426017440069645e+00 + -6.8606370282266094e-01 3.1842513748583046e-01 -3.6040524656501001e+00 + -6.2743425769191918e-01 2.3422010822968642e-01 -4.0589574239271169e+00 + -5.4929236986660113e-01 1.4169468927435958e-01 -4.4641451972275528e+00 + -4.9429459677017218e-01 7.2278885658783931e-02 -4.7534556869319564e+00 + -4.8003146312908451e-01 5.4268324111854449e-02 -4.9074435599041291e+00 + -4.8036781671704731e-01 7.1925607880993336e-02 -4.9932732568002933e+00 + -4.7911051741734689e-01 9.6447950982725628e-02 -5.0718041603460042e+00 + -4.6340045488363590e-01 1.3739090853859559e-01 -5.1329302277697595e+00 + -4.1002832298860703e-01 2.1259959806342588e-01 -5.1579074379934298e+00 + -3.1709104321530557e-01 2.9988716874711763e-01 -5.1653169087506061e+00 + -4.1350479181111877e-01 1.8407991273326085e-01 -5.2947372906147407e+00 + id 11947 + loc 6.1718314886093140e-01 4.2752549052238464e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8964871490391834e-01:2.6602399385009495e-01:8.9646723427873765e-01:2.8950024293347348e-01:1.4503318366969005e+00:3.8964481841676929e-01:2.3479927224946548e+00:2.8256663805370286e-01:2.9585785990094373e+00:2.5551846318592797e-01:3.9478413760236108e+00 + CVs 20 + -1.2811688595453799e-01 2.0291932645933911e-01 2.4118952477224409e-01 + -2.7508044312946994e-01 3.9400542740921651e-01 4.8118522730087032e-01 + -4.2697424649363058e-01 5.8386900863781421e-01 7.1748622530144857e-01 + -5.7195476840709591e-01 7.7610676687934776e-01 9.4516537192320249e-01 + -7.0307661402582822e-01 9.7118081472908147e-01 1.1584050186080312e+00 + -8.1163260052759489e-01 1.1653334732635132e+00 1.3553561991481677e+00 + -8.9551531473783230e-01 1.3512054358296770e+00 1.5528270605070373e+00 + -9.5582269684409094e-01 1.5170973804647370e+00 1.7621975979332198e+00 + -9.9611684727808925e-01 1.6536360886308044e+00 1.9738652768807459e+00 + -1.0335610480385278e+00 1.7438953329898932e+00 2.1972494160211067e+00 + -1.0974730837776900e+00 1.7448216112851103e+00 2.4656999540241893e+00 + -1.2118495014191868e+00 1.6258151810874439e+00 2.7890933292156737e+00 + -1.3842758976175125e+00 1.4128014649911929e+00 3.1485003650551793e+00 + -1.5946259499746425e+00 1.1502530884973197e+00 3.5265513668674027e+00 + -1.7985733918286442e+00 8.4977885945439879e-01 3.9364736459323395e+00 + -1.9414024819461160e+00 5.1647111368617626e-01 4.4207099935084218e+00 + -1.9620244507813476e+00 2.0413618537297429e-01 4.9979530339101688e+00 + -1.8617928425319530e+00 -2.0813395973368065e-02 5.6012646014504686e+00 + -1.8344068023691253e+00 -1.9548330751861465e-01 6.0950371624390600e+00 + id 11948 + loc 7.1195262670516968e-01 1.6808150708675385e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9840486200710815e-01:2.9558046142873123e-01:2.9069254870234262e-03:4.3033270820848024e-01:4.8167621828135032e-01:4.5523422417953813e-01:9.8232340817349306e-01:2.8486099069040460e-01:1.7477838703073494e+00:3.0857473727667778e-01:2.7263949313071780e+00:4.9839987795848811e-01:3.1938061781242992e+00:4.5762680988862203e-01:3.7446447899372055e+00 + CVs 20 + 2.2748892824269468e-01 3.7497166735132226e-01 -1.9981232482570216e-01 + 4.5091174456000610e-01 7.4028402876325949e-01 -3.8866322227378169e-01 + 6.8200793146045691e-01 1.0993180903748847e+00 -5.8007922629829611e-01 + 9.3854584375183503e-01 1.4432096634496423e+00 -7.8416920012198765e-01 + 1.2396020943761330e+00 1.7533189642808671e+00 -1.0026502330368685e+00 + 1.6006698815997862e+00 2.0064760083613735e+00 -1.2295544540282952e+00 + 2.0301732541773516e+00 2.1747303524210770e+00 -1.4477920922436489e+00 + 2.5247768441138505e+00 2.2295242556786556e+00 -1.6285785031200972e+00 + 3.0576960365140731e+00 2.1456506066683181e+00 -1.7350411054621047e+00 + 3.5717073144187261e+00 1.9074581881744486e+00 -1.7358828257829371e+00 + 3.9827393839828167e+00 1.5221410505037132e+00 -1.6207894991543297e+00 + 4.2078549629845732e+00 1.0443229773932408e+00 -1.4133336030799810e+00 + 4.2208834967600657e+00 5.5870710660765843e-01 -1.1535125655645286e+00 + 4.0657444131332792e+00 1.4163320975142804e-01 -8.5940621626940950e-01 + 3.8220934216391318e+00 -1.6154105712475164e-01 -5.1824654163894868e-01 + 3.5607303767244805e+00 -3.2056339087613561e-01 -1.2212478401850074e-01 + 3.3377855859028922e+00 -3.0128374010713965e-01 2.8903614857423021e-01 + 3.1812978526481466e+00 -1.2289959947235696e-01 6.3529463695317345e-01 + 3.0279296060195460e+00 8.3446859981977428e-02 9.6882101786063535e-01 + id 11949 + loc 3.4790346026420593e-01 9.1941046714782715e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9420158350563304e-01:4.5394359811932233e-01:1.0883972432056810e-01:4.4900739715168314e-01:8.2743088694167777e-01:4.9309001310366168e-01:1.0993670147435386e+00:3.8100085666288053e-01:1.7267843225449164e+00:2.3182062824667354e-01:2.3201256647386463e+00:4.9419664148979803e-01:3.0653291562646765e+00:4.0243666026451719e-01:3.7603306666773353e+00 + CVs 20 + 2.6298556627894482e-01 6.6536872802341751e-01 -3.5036303079324271e-01 + 5.2119382690311777e-01 1.2892563424745762e+00 -5.6465587118566196e-01 + 7.8795369353310851e-01 1.8538228700471888e+00 -6.4323837965819441e-01 + 1.0672191826709221e+00 2.3485917274030084e+00 -6.0847521834458340e-01 + 1.3698466859595042e+00 2.7685462239198046e+00 -4.7180043056210186e-01 + 1.7042971178310626e+00 3.0997979923543388e+00 -2.5014894415306366e-01 + 2.0785633665669661e+00 3.3193627967649668e+00 1.7925731126955835e-02 + 2.4956695042417767e+00 3.3879106745915988e+00 2.8785595553473198e-01 + 2.9226308473719564e+00 3.2722172316854534e+00 5.0185229650798391e-01 + 3.2893353264105309e+00 3.0104399154366650e+00 6.0406579096787127e-01 + 3.5486901919487530e+00 2.6916560312562257e+00 5.9004913153986993e-01 + 3.6985656799162889e+00 2.3597152893144284e+00 5.1608179561548573e-01 + 3.7208159096909244e+00 1.9799736271778154e+00 4.6672705228355793e-01 + 3.5555172484300175e+00 1.5014236293278893e+00 5.2049649113098218e-01 + 3.1397878182960044e+00 8.5932759118985647e-01 6.6981651161254885e-01 + 2.4272216345091411e+00 -6.3895769441830552e-01 7.1873277750891584e-01 + 4.7984437507751121e+00 -2.7629310114984049e+00 -7.0885553746606411e-01 + 6.0148739725172877e+00 -1.7977864166892636e+00 -1.0201224962202797e+00 + 6.2339102046675894e+00 -1.2376778489148521e+00 -1.0263619907478065e+00 + id 11950 + loc 4.9657356739044189e-01 6.5570145845413208e-01 1054 + blend 0.0000000000000000e+00 + interp 2.8404584341124772e-01:2.7281781488082135e-01:3.6988022434932399e-01:2.3631870866320256e-01:1.0550799768784498e+00:2.8404300295281365e-01:2.0525662922548427e+00:2.3580416741715182e-01:2.9670391997491965e+00:2.5970342131957536e-01:3.9468823646992464e+00 + CVs 20 + 4.8609779634450440e-01 4.4149347510207182e-01 -2.1360651164422778e-01 + 9.3975465606823583e-01 9.3085513728225933e-01 -3.2553518366125300e-01 + 1.3451854690951617e+00 1.4132057112988858e+00 -3.2961128876251378e-01 + 1.7397307316049082e+00 1.7276798586836617e+00 -2.8563657016544752e-01 + 2.1003622779350004e+00 1.7773902598758085e+00 -2.7077307816672547e-01 + 2.3530320644904532e+00 1.6328473355362396e+00 -2.9648687982659117e-01 + 2.4863432820215863e+00 1.4070326959120600e+00 -3.2136882194664040e-01 + 2.5672821816625877e+00 1.1577692421390824e+00 -2.9588177182626851e-01 + 2.6531303124129186e+00 8.7777583118942282e-01 -1.8945894186818490e-01 + 2.7834594166034234e+00 5.4640923286381859e-01 2.9095196881757990e-02 + 2.9779299564852173e+00 1.9150275713024045e-01 3.9291855199790460e-01 + 3.2757234810769900e+00 -1.0691016892493455e-01 8.6108725622673099e-01 + 3.7926394952916973e+00 -3.0473438213261006e-01 1.3188982214107585e+00 + 4.5030741674753267e+00 -3.3834310264232675e-01 1.5876702291921740e+00 + 5.1602132293465033e+00 -2.5046406480322636e-01 1.6574345150180239e+00 + 5.6757633054668846e+00 -1.6705242533696563e-01 1.6734270183829603e+00 + 5.9556102587377548e+00 -1.7967377361013714e-01 1.7633921579611305e+00 + 5.9665951503245314e+00 -2.2915722943282901e-01 1.9316263268529388e+00 + 6.3739910850482353e+00 -4.5095292287985544e-01 2.0318644193906623e+00 + id 11951 + loc 2.9504176974296570e-01 8.5149639844894409e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1076912109395189e-01:2.9488246258104889e-01:2.9912559642258474e-01:2.5475658459452272e-01:1.4478846641706056e+00:3.8605554071727960e-01:2.3041081701104091e+00:2.6671255178044384e-01:3.0139737317736204e+00:5.1076401340274102e-01:3.7857802643910561e+00 + CVs 20 + 2.4509536781015342e-01 2.5065500948503189e-01 -1.3467960139860199e-01 + 4.3083381455546021e-01 5.2176394228276268e-01 -2.5452201983115430e-01 + 5.9925908546535656e-01 7.8837695768935490e-01 -3.7228294119779104e-01 + 7.7133875539166352e-01 1.0421984472711152e+00 -4.9738419339611495e-01 + 9.4869165708546943e-01 1.2890676178728810e+00 -6.3967716315285350e-01 + 1.1380021618710869e+00 1.5312706767609598e+00 -8.1203494971046575e-01 + 1.3547409559839139e+00 1.7620170011586089e+00 -1.0260552591529311e+00 + 1.6169356322760131e+00 1.9654376317003674e+00 -1.2867016447820239e+00 + 1.9359886690063624e+00 2.1182994372871118e+00 -1.5916968160923761e+00 + 2.3134639423081693e+00 2.1935742412046100e+00 -1.9301555927989718e+00 + 2.7384589121970548e+00 2.1697232182920656e+00 -2.2874509229100228e+00 + 3.1869763877637012e+00 2.0342400850141313e+00 -2.6538589209126040e+00 + 3.6237506826062229e+00 1.7801089754810266e+00 -3.0224377894917862e+00 + 3.9982579097420183e+00 1.4102130657867296e+00 -3.3827618358421461e+00 + 4.2497303275634586e+00 9.5575435046526236e-01 -3.7256529320148162e+00 + 4.3194425649838930e+00 5.0472712611946235e-01 -4.0374436759380066e+00 + 4.2265843549251008e+00 2.0517644239198374e-01 -4.2770146053264106e+00 + 4.0753914481882365e+00 9.4730992771532740e-02 -4.4439188381116939e+00 + 3.7623914287751585e+00 6.3229648103996450e-02 -4.7364780299759506e+00 + id 11952 + loc 5.8532649278640747e-01 5.1489615440368652e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3651105627003589e-01:3.7607464687125913e-01:3.4004269168060297e-01:4.3650669115947321e-01:9.8230108140653649e-01:2.4071959724731401e-01:1.5418161929434759e+00:3.5545589194304966e-01:2.0078156328842947e+00:3.2250049589488561e-01:2.8326748084343976e+00:3.7301912852612562e-01:3.1915736781025092e+00:4.1508135339383206e-01:3.9434302630837617e+00 + CVs 20 + 4.2339822725261982e-02 2.8519947156208508e-01 -8.0943279090631551e-02 + 1.0704667977595647e-01 5.6606658279089239e-01 -1.4321117074031120e-01 + 1.7882605836061383e-01 8.3572970915059575e-01 -1.9920797708455315e-01 + 2.4823218029282246e-01 1.0962903458135962e+00 -2.5947574409147434e-01 + 3.1750711016232669e-01 1.3599567575161000e+00 -3.2882450539943026e-01 + 3.9087067042831303e-01 1.6408328195822794e+00 -4.2159241139222453e-01 + 4.7878279179855632e-01 1.9311089414844831e+00 -5.5761156958484492e-01 + 5.9213291672371937e-01 2.2028999435957792e+00 -7.4498546661075427e-01 + 7.3468082041352556e-01 2.4351934398938191e+00 -9.7803837895807422e-01 + 9.0556826460802242e-01 2.6160192375258267e+00 -1.2467077497161683e+00 + 1.1033509833154360e+00 2.7388455256924749e+00 -1.5412346906326289e+00 + 1.3339507146502299e+00 2.8015883688193890e+00 -1.8545389509735890e+00 + 1.6071196529076088e+00 2.7938357679809052e+00 -2.1795346353300800e+00 + 1.9271159220954035e+00 2.6823068627108642e+00 -2.4942639469878425e+00 + 2.2913506914740984e+00 2.4197816205360341e+00 -2.7739125023059543e+00 + 2.6515555216714306e+00 1.9763176336002972e+00 -3.0398109136547440e+00 + 2.9105133194752959e+00 1.3622890652941158e+00 -3.3392587413329551e+00 + 2.9646874800148395e+00 6.4925729746834238e-01 -3.6850522573509532e+00 + 2.7588072108887944e+00 2.3558463223692550e-01 -3.8279541900494074e+00 + id 11953 + loc 1.9474087655544281e-01 2.6698985695838928e-01 384 + blend 0.0000000000000000e+00 + interp 4.7694759611876719e-01:3.5780550733015987e-01:9.7307120894715105e-01:4.7694282664280602e-01:1.4578260524158768e+00:2.9464345934931430e-01:2.2780526087527302e+00:2.7504937689485059e-01:3.0618098960885320e+00:2.9238342892932651e-01:3.9421549066876977e+00 + CVs 20 + -4.0139785027650693e-01 2.2665484707188749e-01 -1.1860903424587812e+00 + -6.8499143527669859e-01 2.9464117598643380e-01 -1.8972081104204968e+00 + -9.3982598161961106e-01 3.0918302582800605e-01 -2.4772099675225605e+00 + -1.1969637314761674e+00 3.1907341758548180e-01 -3.0734117954389326e+00 + -1.4529739438750622e+00 3.1348409528833576e-01 -3.6905011597401089e+00 + -1.7020330465382203e+00 2.8484355352080448e-01 -4.3222936413345190e+00 + -1.9463644575616772e+00 2.3174403817659833e-01 -4.9588080870395634e+00 + -2.2018272890573805e+00 1.5063449496341785e-01 -5.5988515214278243e+00 + -2.4824399704155198e+00 2.1782120483680778e-02 -6.2442102365338528e+00 + -2.7870404805433666e+00 -1.9693042235416613e-01 -6.8899419966437501e+00 + -3.1056447269785883e+00 -5.4619949380714827e-01 -7.5086178067023059e+00 + -3.4256655684331090e+00 -1.0420934841200835e+00 -8.0498458918647948e+00 + -3.7310095708364375e+00 -1.6718304408692406e+00 -8.4674773954352460e+00 + -4.0023699041744933e+00 -2.4070998054358026e+00 -8.7386124196339203e+00 + -4.2248661095392031e+00 -3.2111785570949136e+00 -8.8603140571071375e+00 + -4.3907124564249589e+00 -4.0375186946973480e+00 -8.8428414165052054e+00 + -4.4890681595643942e+00 -4.8325067352442197e+00 -8.7084104554305721e+00 + -4.5066654982706416e+00 -5.5500465197628701e+00 -8.4920717802038350e+00 + -4.4586513242483914e+00 -6.1962266945018225e+00 -8.2339804474900351e+00 + id 11954 + loc 6.5314674377441406e-01 8.6544340848922729e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6355722091824891e-01:4.4630206034030312e-01:5.5746896075384966e-02:4.0598746641526634e-01:7.1594089114282200e-01:3.8854098849582364e-01:1.0424687892380116e+00:4.1322325098508672e-01:1.8043398811410154e+00:4.4870930308956264e-01:2.0449150507445699e+00:3.8095422449493249e-01:2.8105798122642196e+00:3.4021424853040055e-01:3.1112421784826445e+00:4.6355258534603977e-01:3.7250577680602501e+00 + CVs 20 + -2.0203000153605227e-01 2.2101284874965743e-01 2.5188040577385229e-01 + -4.2634154806051378e-01 4.2509164528755705e-01 4.7959733217327999e-01 + -6.5254207281299415e-01 6.3679661457824965e-01 7.0728535284391614e-01 + -8.6819660947688260e-01 8.6622442859614068e-01 9.3830895769267053e-01 + -1.0832883073677604e+00 1.1155988670269785e+00 1.1532694965387853e+00 + -1.3125224710009591e+00 1.3845607079258810e+00 1.3309392633638224e+00 + -1.5741649736164465e+00 1.6693876488192740e+00 1.4488616421035452e+00 + -1.8844841293293340e+00 1.9565008733947640e+00 1.4708016221156426e+00 + -2.2182164328546721e+00 2.1949893152577578e+00 1.3364085740021892e+00 + -2.4809068270297994e+00 2.3246166363710219e+00 1.0405863822127441e+00 + -2.6094967818831716e+00 2.3561504894505259e+00 6.5945622286551364e-01 + -2.6174298111967937e+00 2.3109825356591260e+00 2.5151270711142759e-01 + -2.5467966911531543e+00 2.1305740715520338e+00 -1.6712047398533336e-01 + -2.4085090571593639e+00 1.7764459421882257e+00 -5.7355431749394559e-01 + -2.1834110009283094e+00 1.3830773155735652e+00 -9.8912584130402703e-01 + -1.8997727605420223e+00 1.1661424662477686e+00 -1.4511249219751776e+00 + -1.6610491593715593e+00 1.2646323422154178e+00 -1.9096371935585639e+00 + -1.5094505241146621e+00 1.5716099978242952e+00 -2.3182395666263051e+00 + -1.2396543319881503e+00 1.6822461610537927e+00 -2.9651482440590056e+00 + id 11955 + loc 1.9860538840293884e-01 1.1921715736389160e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7700951659255558e-01:2.9192995398755289e-01:8.2472936238758954e-02:4.0212119292016790e-01:7.0024911151386138e-01:3.2705506054742806e-01:1.0413440276410484e+00:4.7700474649738966e-01:1.7975039106635933e+00:2.8483763951890140e-01:2.2663580024542473e+00:4.6639062031502360e-01:2.8802307084715362e+00:3.8750474711157906e-01:3.3499912220906580e+00 + CVs 20 + -2.0418736244920985e-01 3.9366421672986823e-01 -8.8227302730372326e-02 + -3.9563529335285497e-01 7.9182063297167482e-01 -1.8120636833471099e-01 + -5.7252839184805826e-01 1.1979378676212686e+00 -2.5988619857508893e-01 + -7.1754468463040266e-01 1.6107854570940003e+00 -3.1066176236450121e-01 + -8.2557470716285375e-01 2.0306155785578652e+00 -3.2967695689644694e-01 + -9.4151078340116345e-01 2.4459817730875510e+00 -3.3090473774196882e-01 + -1.1375850530819656e+00 2.8047059993410235e+00 -3.5038063993443236e-01 + -1.4171303536363622e+00 3.0420368488858958e+00 -4.2264490755902762e-01 + -1.7081602046252393e+00 3.1459802326632307e+00 -5.5266299589289514e-01 + -1.9342486970008952e+00 3.1504475229503273e+00 -7.1938100567434171e-01 + -2.0698823878457349e+00 3.1052682933414828e+00 -8.9763621106931102e-01 + -2.1338666588555997e+00 3.0366736907322682e+00 -1.0917620265453718e+00 + -2.1425055526330206e+00 2.9471597811126449e+00 -1.3275695538238619e+00 + -2.1057755255595856e+00 2.8360441613985339e+00 -1.6141337711246051e+00 + -2.0333354515564701e+00 2.6924287058294309e+00 -1.9302881399881091e+00 + -1.9440571239319238e+00 2.5256840321149547e+00 -2.2102163388470895e+00 + -1.9163064664456773e+00 2.4052923283836272e+00 -2.4280926179356674e+00 + -1.9356121991167230e+00 2.2752677148460352e+00 -2.6256959879436677e+00 + -1.6886929925105965e+00 2.1295925525914292e+00 -2.5086283931699640e+00 + id 11956 + loc 6.9800049066543579e-01 4.0591442584991455e-01 416 + blend 0.0000000000000000e+00 + interp 4.4909006098689186e-01:2.6823970511022011e-01:2.6819394631783555e-01:3.1673970417623870e-01:1.1045987912178674e+00:3.9920741709089458e-01:1.7441462363377322e+00:3.1095112459058799e-01:2.2968162233038987e+00:2.5284893231944378e-01:3.0004723273504634e+00:4.4908557008628203e-01:3.9147105770677721e+00 + CVs 20 + -6.1830534030309336e-01 1.7137714472256821e-01 9.7521586574043695e-02 + -1.0537826937133943e+00 2.0629615849525468e-01 2.1142325674815035e-01 + -1.4600681784989511e+00 1.8527192459365144e-01 3.1976143070642959e-01 + -1.9006008204766927e+00 1.4084522711946945e-01 4.0882902814284972e-01 + -2.3658927269010919e+00 7.2356650642034670e-02 4.6897291642234767e-01 + -2.8444970284945565e+00 -1.6870733532731386e-02 4.8805490579392174e-01 + -3.3221734676157486e+00 -1.1996668576418901e-01 4.5556060895915373e-01 + -3.7833728971018363e+00 -2.2807934618259873e-01 3.6786241348556403e-01 + -4.2150505101351126e+00 -3.3136385108410238e-01 2.2692461919062434e-01 + -4.6067363020489065e+00 -4.2056297233451989e-01 3.9009378388669358e-02 + -4.9498259017857684e+00 -4.9279731591744302e-01 -1.7582095870509351e-01 + -5.2490975995985236e+00 -5.5810678539998881e-01 -3.8278420167902560e-01 + -5.5290428917428533e+00 -6.3310496444300912e-01 -5.6237276860553020e-01 + -5.8153744735273003e+00 -7.2849869008725743e-01 -7.2589455543890447e-01 + -6.1168350025365967e+00 -8.4905065019502790e-01 -8.8587292794142802e-01 + -6.4301922407977541e+00 -1.0004953374754653e+00 -1.0368488121502781e+00 + -6.7517243344225406e+00 -1.1912597998194334e+00 -1.1644636104544377e+00 + -7.0733445911419226e+00 -1.4200559962608126e+00 -1.2565586559985178e+00 + -7.3133735542947873e+00 -1.5500310599675085e+00 -1.3654859507238677e+00 + id 11957 + loc 6.5549236536026001e-01 7.8515273332595825e-01 1054 + blend 0.0000000000000000e+00 + interp 3.7944246237668422e-01:2.3774234256945112e-01:2.1420649611604503e-02:2.0443607663691341e-01:9.9969384602403943e-01:3.7943866795206049e-01:1.9608612841127795e+00:2.3649555021584481e-01:2.2718940626067408e+00:2.1171641345401063e-01:3.0796286866404206e+00 + CVs 20 + 3.7584310542428079e-01 4.2897610210286696e-01 -1.7065137980564590e-01 + 6.9286111904795455e-01 8.8036138787132223e-01 -2.8196412940153764e-01 + 9.6079354766339709e-01 1.3674191166215552e+00 -3.2848055556815414e-01 + 1.2566551403925323e+00 1.8446578048516133e+00 -3.2216481712192779e-01 + 1.6702855398276268e+00 2.2172500465683096e+00 -2.9594936328522659e-01 + 2.2097300917160085e+00 2.3967942894315919e+00 -2.9054853200417585e-01 + 2.8095685838663442e+00 2.3355948831970421e+00 -3.2339403931472721e-01 + 3.3917262177076566e+00 2.0300540046465390e+00 -3.6540017867353480e-01 + 3.8924613838744166e+00 1.5192964119830830e+00 -3.4806692340401657e-01 + 4.2960862323430815e+00 9.1837369497000143e-01 -1.8448216842279952e-01 + 4.6592660185389256e+00 4.0928972793598550e-01 1.6778355734473371e-01 + 5.0669107781658900e+00 1.6358091821988574e-01 5.4093162191734023e-01 + 5.5491199585217510e+00 2.1926620332792712e-01 6.0995772021443528e-01 + 5.9397383038415974e+00 4.2412491294913734e-01 3.1954477907652956e-01 + 6.2639593388011958e+00 5.2300674139821979e-01 -1.0917472536323247e-02 + 6.7166221768643428e+00 3.9693568769751453e-01 -2.2797677418012219e-01 + 7.2956534845703347e+00 -8.9759710120086655e-02 -1.6424611231493058e-01 + 7.6681647327115856e+00 -8.2322134507730649e-01 3.1313772778864579e-01 + 8.0112971016760692e+00 -1.0984012520508497e+00 4.5425620080364082e-01 + id 11958 + loc 2.5145795941352844e-01 3.6993253231048584e-01 397 + blend 0.0000000000000000e+00 + interp 4.9293012931429581e-01:3.1182497767523609e-01:8.0038510851354605e-04:4.9292520001300266e-01:6.3837486337721461e-01:4.0716507723601858e-01:1.0177561678090474e+00:4.8254736176601037e-01:1.6338210425630764e+00:4.7084190676450050e-01:2.1449505606825783e+00:3.0045550908204166e-01:2.9999963924027817e+00:4.1462520046483076e-01:3.4994974539712023e+00 + CVs 20 + -3.3157490877607243e-01 3.4486863068243423e-01 -1.1261818916139084e+00 + -5.6542806310146210e-01 4.4309381267208647e-01 -1.8611600517146598e+00 + -7.4773650498632849e-01 4.2029964817178167e-01 -2.5375519966093627e+00 + -8.8357712675770661e-01 3.2262458167094121e-01 -3.2812546722645397e+00 + -9.7157263799098015e-01 1.3782658122787117e-01 -4.0644694748093393e+00 + -1.0227508743887279e+00 -1.3260968597178502e-01 -4.8536707382117017e+00 + -1.0545467722811084e+00 -4.7821045194585576e-01 -5.6149778152888645e+00 + -1.0721615513903395e+00 -8.9058744580432392e-01 -6.3137073559472858e+00 + -1.0610299066226005e+00 -1.3705482350753391e+00 -6.9162429103368934e+00 + -1.0276173019770258e+00 -1.9256500271876664e+00 -7.3822815073530501e+00 + -9.9460621025799312e-01 -2.5398179957755671e+00 -7.6814058068084368e+00 + -9.8019182871171073e-01 -3.1773055350330326e+00 -7.8088623065682166e+00 + -9.9542978480459365e-01 -3.8040025718346997e+00 -7.7857504795390167e+00 + -1.0480560132675483e+00 -4.3903705255625427e+00 -7.6425279527146808e+00 + -1.1383050171465765e+00 -4.8966082109130538e+00 -7.4097407719837767e+00 + -1.2523451133815509e+00 -5.2868646587013846e+00 -7.1251134802764406e+00 + -1.3729237280643543e+00 -5.5544095832368008e+00 -6.8343121968702807e+00 + -1.5003833923982381e+00 -5.7496307846934984e+00 -6.5799602150250935e+00 + -1.6637256690125795e+00 -6.0992685103857944e+00 -6.4084519396553539e+00 + id 11959 + loc 1.6980069875717163e-01 7.0210081338882446e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2288778839202334e-01:3.2960755617462162e-01:2.1341567365614023e-01:3.1446236430966334e-01:1.2220368024769370e+00:4.2288355951413942e-01:2.0069396973821299e+00:3.2020631876568745e-01:2.7548762245791734e+00:3.8927872156981475e-01:3.2787918365945088e+00:3.6396884758532516e-01:3.9293394709268332e+00 + CVs 20 + -3.6478771281724942e-03 2.6863577135614819e-01 -3.8383960884022753e-02 + -1.9030253248294077e-02 5.3358719104641994e-01 -1.0475541472598467e-01 + -4.4307276256560196e-02 7.8589433490068239e-01 -1.7879914121158502e-01 + -7.3251802218469275e-02 1.0284552981692485e+00 -2.5308071887208694e-01 + -1.0343093502749717e-01 1.2573384903363056e+00 -3.3350087533134087e-01 + -1.3282390323936999e-01 1.4666205674205326e+00 -4.2228992391012937e-01 + -1.5741203849921981e-01 1.6576226502404801e+00 -5.1712444454573614e-01 + -1.7403974156518004e-01 1.8494067656422131e+00 -6.1555828623429265e-01 + -1.7692596190135834e-01 2.0766573929724244e+00 -7.1741021877129241e-01 + -1.5096493065881944e-01 2.3763488659193035e+00 -8.3069075849063878e-01 + -7.2009641660771950e-02 2.7679812367210470e+00 -9.8751997724832963e-01 + 8.5258100135981785e-02 3.2224128174742863e+00 -1.2444896655811066e+00 + 3.1212991194529471e-01 3.6419367731666856e+00 -1.6471982852469234e+00 + 5.3734114489435369e-01 3.8986986401783379e+00 -2.1532243880839070e+00 + 7.2650916566989765e-01 3.9607409764175165e+00 -2.6461222898373062e+00 + 9.4769698841120453e-01 3.8833241753943248e+00 -3.0551932814968650e+00 + 1.2593656454052244e+00 3.6989412767518544e+00 -3.3625185003553435e+00 + 1.5650615677472306e+00 3.4093206084877488e+00 -3.5646959108780765e+00 + 1.5484686425869387e+00 3.1175048894091288e+00 -3.5547753495991770e+00 + id 11960 + loc 2.7073460817337036e-01 9.0445381402969360e-01 1085 + blend 0.0000000000000000e+00 + interp 4.6634316147389260e-01:2.5038125257203159e-01:6.0736370303337006e-03:2.5425756143651673e-01:8.6633232771396551e-01:3.5813160803661293e-01:1.7574876344279489e+00:4.6633849804227789e-01:2.1345885398076314e+00:3.2286312712158083e-01:2.8620459336989330e+00:3.9171659883905435e-01:3.3917828191959347e+00 + CVs 20 + -1.6757262303880122e-01 2.5537269721760564e-01 3.7210214736827196e-01 + -3.4770096596966305e-01 4.2903218103029872e-01 6.2468685558494186e-01 + -5.2746383447118772e-01 5.7653366474092571e-01 8.2481163087454035e-01 + -6.8534014051643788e-01 7.1494074726224488e-01 1.0084053467630019e+00 + -8.1605926425647368e-01 8.4190624497029332e-01 1.1781813536141281e+00 + -9.1541428911691336e-01 9.6063001951163984e-01 1.3446630426650437e+00 + -9.8837493187786818e-01 1.0853012738152585e+00 1.5237544202367348e+00 + -1.0609118920937550e+00 1.2383940948621710e+00 1.7195062203749867e+00 + -1.1609775764349342e+00 1.4282896780480634e+00 1.8995293767067682e+00 + -1.2786492220189039e+00 1.6283253360013381e+00 2.0048258812717066e+00 + -1.3855158301243897e+00 1.8070081975421266e+00 2.0115249787853187e+00 + -1.4766680227878410e+00 1.9519477164046242e+00 1.9315310150566094e+00 + -1.5551171329304059e+00 2.0557361258613609e+00 1.7785154805259911e+00 + -1.6172002563296517e+00 2.1143934323777884e+00 1.5551787547101805e+00 + -1.6684614920173584e+00 2.1039787103389971e+00 1.2743567443770982e+00 + -1.7132316871109401e+00 1.9628247853133294e+00 1.0076260582966756e+00 + -1.7371067114383836e+00 1.6838635703344011e+00 8.2978103871880537e-01 + -1.7800874754365299e+00 1.3388872693963267e+00 7.8739288921120476e-01 + -2.0197843557012667e+00 1.1625648484255509e+00 1.0206677776535609e+00 + id 11961 + loc 7.6696175336837769e-01 4.6908414363861084e-01 411 + blend 0.0000000000000000e+00 + interp 4.2823185943645486e-01:3.6561375255551931e-01:2.1762494803400378e-01:2.5619813465625557e-01:8.8440210943500419e-01:3.7856445941240952e-01:1.1544418897456412e+00:4.2822757711786053e-01:1.9059658868209368e+00:3.2371923326816071e-01:2.5729036831932270e+00:2.9292774033516294e-01:3.0316406271056904e+00:3.1357302932050590e-01:3.8895411555467234e+00 + CVs 20 + -6.8683255711776903e-01 1.4782298373019032e-01 2.0212180272302283e-01 + -1.1524760977655901e+00 2.0797652847853060e-01 3.4941043702287350e-01 + -1.5752180042556796e+00 2.5382819632112302e-01 4.6402810859639243e-01 + -2.0167966962907271e+00 3.2112568505008010e-01 5.4539757780562947e-01 + -2.4793372565726721e+00 4.0202480353068376e-01 5.9059351931252291e-01 + -2.9654389362012070e+00 4.8479711847160700e-01 6.0242235092787189e-01 + -3.4777330632410299e+00 5.5546787396576947e-01 5.9039143381795900e-01 + -4.0184968890789428e+00 5.9420647857045872e-01 5.6432802367654589e-01 + -4.5867882488564842e+00 5.7311857723237181e-01 5.2981234993308357e-01 + -5.1695114287676427e+00 4.6261449988633352e-01 4.9639471419443720e-01 + -5.7301136770542147e+00 2.4321159215768207e-01 4.8275145876480230e-01 + -6.2204576072396209e+00 -8.2648325406271095e-02 4.9938290794964640e-01 + -6.6113727351860483e+00 -4.9489773184742702e-01 5.3714845944657252e-01 + -6.8963331416635363e+00 -9.6769849014585541e-01 5.8119590302862445e-01 + -7.0790029033284299e+00 -1.4702610129723084e+00 6.2278068243730222e-01 + -7.1698229394722430e+00 -1.9688768957027185e+00 6.5430113162371584e-01 + -7.1851821978822965e+00 -2.4389411939312318e+00 6.6481405497030499e-01 + -7.1440210426112465e+00 -2.8762439652097718e+00 6.4566765856019082e-01 + -7.0554704771485630e+00 -3.2933763492820338e+00 6.0082990545326043e-01 + id 11962 + loc 7.8124082088470459e-01 9.3059772253036499e-01 1053 + blend 0.0000000000000000e+00 + interp 6.1401000312798049e-01:2.9271551821845326e-01:2.4449596062633017e-01:3.0679041487599090e-01:1.0493688822020846e+00:2.6668628664943356e-01:1.6670942374852999e+00:5.6604706977208352e-01:2.1412947845835988e+00:6.1400386302794918e-01:2.6291885315481016e+00:3.2408163297813353e-01:3.2579431730204425e+00 + CVs 20 + 1.4441014135780042e-01 4.5596110613229601e-01 2.7480237404835489e-01 + 1.8307003286119750e-01 8.7036975959162843e-01 5.1481165911428528e-01 + 1.7054316654894530e-01 1.2619639923385575e+00 7.2609201160128767e-01 + 1.2246628198675302e-01 1.6348341031440623e+00 9.1218854783178815e-01 + 4.7676770842275396e-02 1.9764313232211825e+00 1.0720687985331712e+00 + -4.3243857447870848e-02 2.2819456960648008e+00 1.2154240889697667e+00 + -1.6374862129206358e-01 2.5662099455588394e+00 1.3678507127821957e+00 + -4.0580308490670758e-01 2.8388732789831677e+00 1.5877250564306729e+00 + -8.2499607749626191e-01 2.9313642032903227e+00 1.8454960575581183e+00 + -1.1796563079782976e+00 2.8210740325732311e+00 1.9979385669719860e+00 + -1.4572338320201053e+00 2.6299893642435195e+00 2.0830966417438410e+00 + -1.7401041511365516e+00 2.3564385176202594e+00 2.1215634105033652e+00 + -2.0340160911724734e+00 1.9739744076155525e+00 2.1309054082982755e+00 + -2.2305017772281706e+00 1.5006856604261603e+00 2.1507670887139643e+00 + -2.2729400434699558e+00 9.6583238219548673e-01 2.1757324773630651e+00 + -2.2110009245476263e+00 3.3822365435706159e-01 2.1023488004144189e+00 + -2.1148616003380951e+00 -3.2113014037090037e-01 1.7885939163375977e+00 + -2.0403417377273714e+00 -7.5729410941610376e-01 1.2777132455377294e+00 + -2.0498088074182106e+00 -6.9091486892728149e-01 9.3804097233252104e-01 + id 11963 + loc 3.7498953938484192e-01 6.3533014059066772e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0485739939949617e-01:4.0485335082550217e-01:9.1678427165760756e-01:3.4679403020825711e-01:1.6667648966905055e+00:3.5563484003958318e-01:2.2604845670266633e+00:3.8175902737256123e-01:3.0476249788904290e+00:3.4600455284578996e-01:3.9993925921792024e+00 + CVs 20 + 1.0306634744165985e-01 3.1040507809270773e-01 -2.3996424643409148e-02 + 2.4803781462735788e-01 6.1919521575778147e-01 -5.9419217234395666e-02 + 4.2007220483981628e-01 9.2330356979239947e-01 -1.1372111406794402e-01 + 6.1210484554697131e-01 1.2235306712657537e+00 -1.9938385789297358e-01 + 8.2265428930709261e-01 1.5138594638256198e+00 -3.3090647629767345e-01 + 1.0512013966089999e+00 1.7798942859884805e+00 -5.1903613488438394e-01 + 1.2964968494987654e+00 1.9993203414573553e+00 -7.6784372599588280e-01 + 1.5489723149666554e+00 2.1493237637447500e+00 -1.0750105861056962e+00 + 1.7896417277877099e+00 2.2117167607624770e+00 -1.4308902148157379e+00 + 1.9989858095932709e+00 2.1750173314215573e+00 -1.8164107707874317e+00 + 2.1635675009184077e+00 2.0359804160122539e+00 -2.2083194083804965e+00 + 2.2709741783572293e+00 1.7966424872011313e+00 -2.5855989192628019e+00 + 2.3027748308277167e+00 1.4693820327699034e+00 -2.9330932037664490e+00 + 2.2261895502376907e+00 1.0870291439224387e+00 -3.2554181752367493e+00 + 1.9947940161165634e+00 7.0582748128067041e-01 -3.5584482284054051e+00 + 1.5916743204587678e+00 3.9744217191230768e-01 -3.8174031892299949e+00 + 1.0561898744199627e+00 2.2013461106822751e-01 -3.9979186826386366e+00 + 4.8362499637216416e-01 1.4444042569521676e-01 -4.1110497863383415e+00 + 2.3126938599366029e-02 -7.2308847683283828e-02 -4.2785242646976549e+00 + id 11964 + loc 8.3504110574722290e-01 2.7220633625984192e-01 1090 + blend 0.0000000000000000e+00 + interp 5.5098749853726703e-01:5.5098198866228165e-01:3.2972680829905110e-01:2.9558119574941771e-01:9.9192779079227633e-01:3.8655410844511934e-01:1.8197776754912898e+00:4.0877502775157282e-01:2.0926791753155536e+00:2.7812825976690891e-01:2.8838140348535641e+00:3.6590672156701709e-01:3.7829494636733028e+00 + CVs 20 + -1.1925383212235693e-01 4.1693357290766286e-01 -8.3837757204186972e-02 + -1.7060853408801407e-01 7.9056212914878476e-01 -1.1557611711381394e-01 + -1.8648494770286556e-01 1.1463713619859826e+00 -1.2157818706946966e-01 + -1.7974492962761390e-01 1.4926271749701301e+00 -1.1193267746276969e-01 + -1.4180847283129860e-01 1.8178394699634728e+00 -7.9118460300924731e-02 + -6.7345642623396262e-02 2.1078021627876180e+00 -1.4847682114789817e-02 + 4.3987224917625301e-02 2.3449892047779182e+00 8.8595170147936386e-02 + 1.8448134577483832e-01 2.5121218562681702e+00 2.3439594066653158e-01 + 3.4308551278197796e-01 2.6000302787483829e+00 4.2088608682315232e-01 + 5.1630118441420891e-01 2.6055333260764395e+00 6.4494990165426491e-01 + 7.0641958827080076e-01 2.5257771761719594e+00 8.9586410193935317e-01 + 9.1573754535957352e-01 2.3591650588921853e+00 1.1525552106427628e+00 + 1.1471185747407373e+00 2.1023700306310804e+00 1.3888395864062009e+00 + 1.4072217700889789e+00 1.7487421447120577e+00 1.5693109447930536e+00 + 1.7009201881725255e+00 1.3014129534418593e+00 1.6365932063204292e+00 + 2.0179801931198966e+00 8.2551356604057757e-01 1.5351292081127299e+00 + 2.3563951973314010e+00 4.3376070215145490e-01 1.2797379022432214e+00 + 2.7191703582911382e+00 2.0679335540935706e-01 9.5219640157255270e-01 + 3.0044277803838297e+00 7.7704921435911789e-02 7.7575198425076308e-01 + id 11965 + loc 5.4522776044905186e-03 7.1944642066955566e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5500242838602389e-01:3.6636520462397604e-01:1.5677126121869889e-02:2.6860509538897703e-01:8.5116885357069860e-01:3.5490468297061684e-01:1.7739087524191777e+00:4.4877888734354171e-01:1.9996116906952168e+00:3.1555785066008757e-01:2.9641541332310926e+00:4.5499787836174005e-01:3.2741065622351200e+00 + CVs 20 + 2.1504205394108022e-01 4.8261967114080850e-01 -2.0188362575074961e-01 + 4.4365916481431134e-01 9.8042742424678642e-01 -3.9985670667012346e-01 + 7.0149840941249197e-01 1.4857835144672800e+00 -5.4463488216607825e-01 + 9.9331577611805066e-01 1.9764436874562936e+00 -6.1718014637602447e-01 + 1.3202708018072833e+00 2.4234368275673117e+00 -6.2893309064020508e-01 + 1.6872931739488544e+00 2.8058302208069130e+00 -6.1274960428653835e-01 + 2.1073554227172928e+00 3.1110288946261582e+00 -6.0410705256768715e-01 + 2.5953572849817732e+00 3.3198719001771240e+00 -6.1570460280064621e-01 + 3.1597389773735585e+00 3.3817334150696490e+00 -6.5558144570480581e-01 + 3.7757732687862009e+00 3.2207428987770350e+00 -7.4251957785240263e-01 + 4.3498303512827654e+00 2.7667610368902542e+00 -8.5238301439136532e-01 + 4.7320799275625651e+00 2.0542345992798858e+00 -8.8411059027034467e-01 + 4.8320392069914302e+00 1.2573463336055337e+00 -7.5576425755938503e-01 + 4.6663498439563433e+00 5.2878780547367743e-01 -4.7113460697041509e-01 + 4.3002702492728897e+00 -7.5642544417905688e-02 -1.2085565841136212e-01 + 3.7991971014830375e+00 -6.6637960538845942e-01 2.0717301773788999e-01 + 3.5626723634423536e+00 -1.5094561766544616e+00 1.2893286888804754e+00 + 3.7385995112576098e+00 -1.3696636639432489e+00 1.7345513515286783e+00 + 3.6875929333744391e+00 -8.2741418267270395e-01 2.0662788920014470e+00 + id 11966 + loc 7.3629206418991089e-01 8.1380850076675415e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0684251655063297e-01:3.2609173321021723e-01:6.4160319514170006e-01:3.3547310874275810e-01:1.2492719440021078e+00:3.8066594192848485e-01:2.0083286334700281e+00:3.2460471294523185e-01:2.7297616426512770e+00:3.3306069967520407e-01:3.2486005523241173e+00:4.0683844812546749e-01:3.9994680992659779e+00 + CVs 20 + 2.2417078893697390e-01 2.5412001917366089e-01 -2.7748993568211361e-01 + 4.4746474880476816e-01 4.9610399873810240e-01 -5.3133821653672542e-01 + 6.8942947018756551e-01 7.1243797313854740e-01 -7.5523638320405395e-01 + 9.5142180793787290e-01 8.9947091458259232e-01 -9.5192976373478622e-01 + 1.2233396371056602e+00 1.0563899737036488e+00 -1.1267147960413171e+00 + 1.4948683174011714e+00 1.1852615328787972e+00 -1.2876786282847332e+00 + 1.7588998689266941e+00 1.2911613979554537e+00 -1.4459851102035204e+00 + 2.0122562304657423e+00 1.3803577365305459e+00 -1.6154446914588627e+00 + 2.2529912908931786e+00 1.4574985167124817e+00 -1.8093178780751136e+00 + 2.4761568008321500e+00 1.5237311402228662e+00 -2.0346370712513515e+00 + 2.6751790104015294e+00 1.5768217739785786e+00 -2.2921806881611015e+00 + 2.8448610880979008e+00 1.6114934934868064e+00 -2.5808796844084916e+00 + 2.9805430323103437e+00 1.6206480805914822e+00 -2.8990472139475565e+00 + 3.0777084524547611e+00 1.5949020566758871e+00 -3.2450532232225249e+00 + 3.1300526910608730e+00 1.5196511377710309e+00 -3.6169594747561624e+00 + 3.1260506645250574e+00 1.3772875745761954e+00 -4.0012767320753326e+00 + 3.0510925543948599e+00 1.1718698443752524e+00 -4.3581345480128633e+00 + 2.8963360497157238e+00 8.9205214336223737e-01 -4.6930361998564853e+00 + 2.7209000677822650e+00 7.7081227810945885e-01 -4.7674882318552294e+00 + id 11967 + loc 2.8403508663177490e-01 9.0445381402969360e-01 1084 + blend 0.0000000000000000e+00 + interp 5.3079360366116490e-01:2.8962206614324981e-01:1.7964454590065237e-02:3.0283502358443748e-01:8.2798416757541871e-01:4.6593524750908949e-01:1.0682662525920259e+00:4.2610099904369231e-01:1.7344027865171481e+00:5.3078829572512831e-01:2.1136889490538620e+00:3.8376842347259310e-01:2.8383507804254693e+00:4.2097059106908302e-01:3.3916760096491028e+00 + CVs 20 + -1.9274318663016488e-01 3.0480576212886373e-01 3.8163489421856989e-01 + -3.9575081884186131e-01 5.5172383075587261e-01 6.8093091343554968e-01 + -5.9447534374645561e-01 7.8460495895013249e-01 9.6226257392015158e-01 + -7.8263059167089255e-01 1.0185369454326740e+00 1.2442925724897436e+00 + -9.6998886813880858e-01 1.2517897369523723e+00 1.5109501872603268e+00 + -1.1652758194054194e+00 1.4803527328423376e+00 1.7488105126034368e+00 + -1.3763615496482124e+00 1.7005423895365754e+00 1.9520538456986387e+00 + -1.6191179213194482e+00 1.9173902370877938e+00 2.1193464134146360e+00 + -1.9206611518337833e+00 2.1317272512859660e+00 2.2027068033027888e+00 + -2.2281910830133449e+00 2.2858431482275305e+00 2.1198968722774967e+00 + -2.4457179531501994e+00 2.3585312648167549e+00 1.9186736088204266e+00 + -2.5662378468193623e+00 2.3845596667522204e+00 1.6732021746542420e+00 + -2.6314820478433396e+00 2.3065802200748369e+00 1.4052952803523950e+00 + -2.6758443650298949e+00 2.0186466640244118e+00 1.1609406337358146e+00 + -2.6904370751580080e+00 1.5467787051544784e+00 9.4741682060815591e-01 + -2.6412714303825688e+00 1.0062097583358669e+00 7.0077893225046939e-01 + -2.5270461318645947e+00 5.2412855002407444e-01 3.6408550654880639e-01 + -2.4047941283932874e+00 2.1857427501256643e-01 -5.2095193679921006e-02 + -2.3629877977036120e+00 1.4663615630161866e-01 -4.5557864564630945e-01 + id 11968 + loc 5.5138772726058960e-01 4.3492218852043152e-01 397 + blend 0.0000000000000000e+00 + interp 4.8692333100212343e-01:4.2160866360909266e-01:9.5660705196311901e-01:3.0836097222407338e-01:1.8056537240575334e+00:3.7450273943693024e-01:2.2176009509209540e+00:4.8691846176881343e-01:2.8570092093047794e+00:2.7528848695471575e-01:3.5516847126485200e+00 + CVs 20 + -1.2468272532930111e+00 3.1572620693364883e-01 2.6633941894612179e-01 + -2.0392825118375013e+00 4.1905870926649580e-01 4.7030545314494010e-01 + -2.7014980976111000e+00 4.4753098042862149e-01 6.6614590825237885e-01 + -3.3772716805820084e+00 4.6070329319876402e-01 8.8063815674724555e-01 + -4.0533935235652097e+00 4.4475102789751270e-01 1.1160681598698972e+00 + -4.7102066919403001e+00 3.9053878264491232e-01 1.3681977311928308e+00 + -5.3319221044710519e+00 2.9696572854065301e-01 1.6297113612556919e+00 + -5.9116910826108384e+00 1.6634212865069220e-01 1.8998516761855639e+00 + -6.4510253415399799e+00 5.0914045592481694e-04 2.1826670685890468e+00 + -6.9482366482337694e+00 -2.1131079105824990e-01 2.4702735715914388e+00 + -7.3896034011761644e+00 -4.7986978962260851e-01 2.7463038155812098e+00 + -7.7568407545129272e+00 -8.0437762562416604e-01 2.9996797142946408e+00 + -8.0367164186028095e+00 -1.1779635886939883e+00 3.2270862924150698e+00 + -8.2260200019396841e+00 -1.5886121620952545e+00 3.4253209396231901e+00 + -8.3316276288236253e+00 -2.0192233483637994e+00 3.5910846799478175e+00 + -8.3684419141810196e+00 -2.4540459368837730e+00 3.7330088874601652e+00 + -8.3503473452693076e+00 -2.8830357308455108e+00 3.8708586595643757e+00 + -8.2803105909922774e+00 -3.2963265680394409e+00 4.0112528778269416e+00 + -8.0283888760482451e+00 -3.7026010704672689e+00 4.1014138563188709e+00 + id 11969 + loc 4.2491400241851807e-01 5.2083373069763184e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4910928047071497e-01:3.6161179213834377e-01:3.7815649672821738e-01:4.4910478937791026e-01:9.9021842898067836e-01:4.0401869266873675e-01:1.5130391217087233e+00:3.6794364596912704e-01:2.0736836511381527e+00:3.7144492937475876e-01:2.9942024773523066e+00:3.8521544225755655e-01:3.9431227510501019e+00 + CVs 20 + -1.9340753018864748e-01 4.0443499447850040e-01 2.6102880009303742e-01 + -4.1059083737716295e-01 7.6604403238858620e-01 4.2931549873955749e-01 + -6.6559504307712092e-01 1.1086342223387182e+00 5.4818180993800691e-01 + -9.6569254463854304e-01 1.4293852130149416e+00 6.2219026884202711e-01 + -1.3067144865985945e+00 1.7037232923543719e+00 6.3238033443934316e-01 + -1.6709672483936335e+00 1.9045202021615268e+00 5.6534157509873040e-01 + -2.0273248055321389e+00 2.0081145978324852e+00 4.1843949172234784e-01 + -2.3390373518260583e+00 2.0033092405282327e+00 2.0522890043130748e-01 + -2.5798846419154109e+00 1.8943518066197684e+00 -4.3707219556593957e-02 + -2.7547087914849362e+00 1.6972143340085308e+00 -2.8884449222047320e-01 + -2.8887092661076292e+00 1.4274686146405686e+00 -4.9815242332375120e-01 + -2.9954534751637385e+00 1.0968042439119445e+00 -6.4688276258454358e-01 + -3.0786797962470231e+00 7.2111567248547237e-01 -7.0972026080657580e-01 + -3.1499538327490901e+00 3.2292037787097588e-01 -6.5891044650360198e-01 + -3.2191062680778830e+00 -5.7901775881234685e-02 -4.7358564839357087e-01 + -3.3035098255969215e+00 -3.7382958345133488e-01 -1.8432221304276564e-01 + -3.4469788403574886e+00 -6.1254941381702244e-01 1.6380124778687355e-01 + -3.6470690727473705e+00 -7.6208114937720151e-01 5.3494407671253696e-01 + -3.7336231323130353e+00 -8.7502596799586163e-01 7.6342836947970394e-01 + id 11970 + loc 6.0803240537643433e-01 9.5120280981063843e-02 1068 + blend 0.0000000000000000e+00 + interp 5.1986734536172496e-01:2.9361654470236831e-01:4.9307598440033029e-01:2.9318323020919673e-01:1.4805662679026346e+00:4.5922922075601974e-01:2.0050537974892122e+00:5.1986214668827135e-01:2.9179114158362749e+00:3.5150060999254445e-01:3.0543258350486004e+00:3.5610077873185259e-01:3.9062564041285288e+00 + CVs 20 + -9.6070400736697370e-02 3.1663961724643330e-01 7.4609319079496195e-02 + -2.2340540492457617e-01 6.5458216710453609e-01 1.6699197663376580e-01 + -3.8437707823516476e-01 1.0041873250052622e+00 2.4786585052861768e-01 + -5.8097783701936423e-01 1.3449618757394899e+00 2.9481791617679787e-01 + -8.1530606622071711e-01 1.6506781171339231e+00 3.0355949058976039e-01 + -1.0816379575286610e+00 1.8960017299467182e+00 2.7824845793260672e-01 + -1.3693075588537942e+00 2.0672616868505447e+00 2.3415776256470591e-01 + -1.6647860994128725e+00 2.1623455098918734e+00 1.9050235545199395e-01 + -1.9568878374699288e+00 2.1892729522347203e+00 1.6397205365708167e-01 + -2.2368887682914655e+00 2.1381519586000541e+00 1.7284624350507682e-01 + -2.4468220380373316e+00 1.9437293151005077e+00 2.2139125327458054e-01 + -2.4829280518382051e+00 1.6729698855119066e+00 2.1762044517377724e-01 + -2.4646161101799686e+00 1.4440882746736985e+00 1.5457275871661780e-01 + -2.4243012541383688e+00 1.2057982159908121e+00 6.2603013123049028e-02 + -2.3554207598621528e+00 9.7750623854465168e-01 -6.4604597741971401e-02 + -2.2867802698407123e+00 7.9567468515721584e-01 -2.1842962973484381e-01 + -2.2508028127544910e+00 6.7588202346005100e-01 -3.7690361245505188e-01 + -2.2657253210099428e+00 6.3307792883452518e-01 -5.1556327591882312e-01 + -2.1889308445239384e+00 4.6560691647150765e-01 -6.9463151189749150e-01 + id 11971 + loc 3.5643786191940308e-01 5.8480817079544067e-01 416 + blend 0.0000000000000000e+00 + interp 4.9057421726949588e+00:2.3448635380653157e-01:4.4841847429457071e-01:4.4572274035164183e-01:5.8857538244449104e-01:2.7555773483961343e+00:8.3685916550087369e-01:4.9057321726949592e+00:9.7909587369562900e-01:1.0026363722349960e+00:2.6699055271311654e+00:4.8182232976200495e-01:2.8729368070522545e+00:2.7692331348365307e-01:3.0111279194597755e+00:3.9068485995196045e-01:3.9945907053269982e+00 + CVs 20 + 6.7316897424812105e-01 2.3946987767872369e-01 -7.9159767597975050e-02 + 1.1121128094435759e+00 3.4857694820972879e-01 -1.4276798766908944e-01 + 1.4919461431153886e+00 3.9942841944756269e-01 -1.8520448835315578e-01 + 1.9051801666045316e+00 4.2828105520863430e-01 -1.9550283401364377e-01 + 2.3452216868883351e+00 4.2715403254754053e-01 -1.6780389563691861e-01 + 2.8002689999349579e+00 3.8855453119539490e-01 -9.5967512569263363e-02 + 3.2570086401654086e+00 3.0819166099387929e-01 2.4695203193917936e-02 + 3.7022589250881928e+00 1.8550304500785775e-01 1.9267907502044468e-01 + 4.1219348764185781e+00 2.4616728515520325e-02 3.9862172471643614e-01 + 4.5053058932622436e+00 -1.6589174654871375e-01 6.2858284303701728e-01 + 4.8602375008978784e+00 -3.8245332184654734e-01 8.6653855687491566e-01 + 5.2173784381196331e+00 -6.3973560561373577e-01 1.0888801942178183e+00 + 5.5918517246897341e+00 -9.5504652872037554e-01 1.2542467421881520e+00 + 5.9501590421713821e+00 -1.3074711281705680e+00 1.3238417350961162e+00 + 6.2542273257728898e+00 -1.6493958523743364e+00 1.2982788977715014e+00 + 6.5007108936004938e+00 -1.9539413601872317e+00 1.1992269298204876e+00 + 6.7000596742301788e+00 -2.2135465709600872e+00 1.0461192579150911e+00 + 6.8598556138853191e+00 -2.4220075092460505e+00 8.5970359936280039e-01 + 6.9754706433207883e+00 -2.5294603814670742e+00 6.9830435426244997e-01 + id 11972 + loc 3.1172555685043335e-01 8.1077343225479126e-01 1054 + blend 0.0000000000000000e+00 + interp 3.0171962189774987e-01:2.5431880435510495e-01:4.6342253947989798e-01:3.0171660470153089e-01:1.2236245647720070e+00:2.6982162087613271e-01:2.1370228846417332e+00:2.9414845297477266e-01:3.0022034214151043e+00:3.0152059511826751e-01:3.9643120971347479e+00 + CVs 20 + 4.4692369646009888e-01 4.2875396713244368e-01 -7.1636129551878230e-02 + 8.0816742099721073e-01 8.4244176815381866e-01 -7.6896699900582455e-02 + 1.0892704503681001e+00 1.2601293946713754e+00 -3.3029956014564155e-03 + 1.3226918312727702e+00 1.6708089921474110e+00 1.5288986734238352e-01 + 1.5600055105370685e+00 2.0320995624875389e+00 3.8313908765509042e-01 + 1.8449981984776893e+00 2.2978955878978153e+00 6.5954850423437283e-01 + 2.1930237138111819e+00 2.4278219684636819e+00 9.4815095043513808e-01 + 2.5878774978485861e+00 2.3838969028214039e+00 1.2116660648057105e+00 + 2.9763027471404362e+00 2.1614799482824769e+00 1.4270158183137145e+00 + 3.2914355667315522e+00 1.8083589315636068e+00 1.6000362943947635e+00 + 3.4963244860003093e+00 1.4140803749441360e+00 1.7587365300301507e+00 + 3.5917407511881403e+00 1.0626466907507561e+00 1.9332551343852029e+00 + 3.6285319904037112e+00 7.7137419066830393e-01 2.1445235935289437e+00 + 3.7779630490204954e+00 5.2357871960460345e-01 2.3938147615373317e+00 + 4.1437267246080065e+00 3.4957082595889133e-01 2.5899466152228845e+00 + 4.6295245707477530e+00 2.0432171687498435e-01 2.6856918703364023e+00 + 5.0495209054974657e+00 2.5263507121536133e-02 2.7091503403915116e+00 + 5.2796108888899393e+00 -1.9660589024912123e-01 2.7119912322011208e+00 + 5.4789050659717455e+00 -6.5956604056487211e-01 2.8335828185440213e+00 + id 11973 + loc 5.2211785316467285e-01 7.1955800056457520e-02 384 + blend 0.0000000000000000e+00 + interp 4.9612910639521091e-01:4.1739431162175983e-01:1.1949281547751411e-01:4.1149172368091569e-01:9.1687083756199417e-01:4.9612414510414699e-01:1.2496761783930870e+00:3.1970043268392839e-01:2.0070666654682316e+00:3.1026534622566682e-01:3.0957202014428420e+00:4.6097610166633657e-01:3.7359680155914714e+00 + CVs 20 + -1.1649088849759013e+00 2.0239052628106602e-01 5.5362825919873970e-01 + -1.8834738774996538e+00 2.0254042011419693e-01 9.5060871399766611e-01 + -2.4653252910807719e+00 1.1657027470071757e-01 1.2991872797112438e+00 + -3.0261660339941332e+00 -1.8153839369191960e-02 1.6368998297435859e+00 + -3.5604035620564058e+00 -1.9641221095351497e-01 1.9585676270628232e+00 + -4.0739501663987161e+00 -4.0708144771076243e-01 2.2696749388615336e+00 + -4.5777412459375419e+00 -6.3626360795765835e-01 2.5850271191883682e+00 + -5.0791613239148736e+00 -8.7419108934437728e-01 2.9214891435450849e+00 + -5.5823291947577118e+00 -1.1273037965797348e+00 3.2897918277992355e+00 + -6.0856695351146044e+00 -1.4233527381128965e+00 3.6934294579277767e+00 + -6.5680561757466016e+00 -1.7966956249282604e+00 4.1317452044769096e+00 + -6.9913513539527035e+00 -2.2650766310102219e+00 4.5959764057445742e+00 + -7.3361186102158298e+00 -2.8224277997239966e+00 5.0613202957481187e+00 + -7.6106268804673558e+00 -3.4552573480541864e+00 5.4979653753466406e+00 + -7.8174695202032938e+00 -4.1546802613833673e+00 5.8883016837659001e+00 + -7.9470677929349218e+00 -4.9124509753361334e+00 6.2218644138516010e+00 + -7.9898188777378474e+00 -5.6973048515220297e+00 6.4817203982782576e+00 + -7.9612837990375906e+00 -6.4566587827280522e+00 6.6623053843018107e+00 + -7.9652478904602608e+00 -7.0961622359376104e+00 6.8384335119894564e+00 + id 11974 + loc 1.7726247012615204e-01 4.0407299995422363e-01 411 + blend 0.0000000000000000e+00 + interp 4.4807199487264304e-01:3.4396457012808390e-01:6.1977555892958236e-01:4.4806751415269436e-01:1.2211329966799973e+00:3.3373924698113094e-01:1.9714863122846322e+00:3.1406867518098441e-01:2.3309574115085079e+00:2.9172608434178615e-01:3.1909570439390973e+00:4.1937704489472621e-01:3.9010131149232072e+00 + CVs 20 + -7.7796296755329817e-03 1.3614029589561288e-01 -6.9428689749379136e-01 + -4.8505192124656510e-02 1.7778230485843988e-01 -1.1998908689641905e+00 + -8.3972183477286369e-02 1.8232198041029929e-01 -1.6632112083584936e+00 + -9.5684321347290338e-02 1.7470984123101474e-01 -2.1482206864311242e+00 + -8.4025132242482786e-02 1.5425931232884249e-01 -2.6485683088028615e+00 + -5.2972180204982497e-02 1.2150126992209476e-01 -3.1574838616170795e+00 + -8.1275628944141726e-03 7.7074548529988185e-02 -3.6681725959210314e+00 + 4.6064406868843943e-02 1.8106351837066548e-02 -4.1744460613731125e+00 + 1.0672930970080424e-01 -6.3548587093760878e-02 -4.6701373782349771e+00 + 1.6974237142396842e-01 -1.7914804892504899e-01 -5.1455671694701444e+00 + 2.2932031006626877e-01 -3.3570769746575779e-01 -5.5897418166954340e+00 + 2.8318796779341149e-01 -5.3206032952282456e-01 -6.0021656827036107e+00 + 3.3453204335056830e-01 -7.6991193162140847e-01 -6.3911519603123388e+00 + 3.8855659749642468e-01 -1.0503354578687669e+00 -6.7639697305334376e+00 + 4.4864612947552707e-01 -1.3725233529322960e+00 -7.1212360398996992e+00 + 5.1569270441605408e-01 -1.7372149808453750e+00 -7.4572018325962039e+00 + 5.8997965231584959e-01 -2.1452115912368743e+00 -7.7609579253069061e+00 + 6.7147914159234723e-01 -2.5854219400204790e+00 -8.0197239541816163e+00 + 7.6533996537501980e-01 -2.9381833736144234e+00 -8.2345670454610786e+00 + id 11975 + loc 2.2947789728641510e-01 1.7543345689773560e-01 406 + blend 0.0000000000000000e+00 + interp 4.6642869429336353e-01:2.4639364212576118e-01:8.3849881151945649e-01:4.6642403000642063e-01:1.3587109426910198e+00:4.1408637650616936e-01:1.9815181662429624e+00:4.4434176951783921e-01:2.4318356658495639e+00:2.7573046383575112e-01:2.9510756119023416e+00:3.8695688471805789e-01:3.3196863365317739e+00:4.4045804337474626e-01:3.9609834921025593e+00 + CVs 20 + 5.3434947454843229e-02 1.2207153621031541e-01 -4.8169901044790409e-02 + 1.0297007796402445e-01 2.1607666748689403e-01 -5.8575998837665191e-02 + 1.5725428766673369e-01 2.9921118091454191e-01 -5.4936888995219382e-02 + 2.2041116161837848e-01 3.8079587127604747e-01 -5.6527233761957923e-02 + 2.9259702550718764e-01 4.6004094317048255e-01 -6.3867571368971837e-02 + 3.7328439637875815e-01 5.3568070795538036e-01 -7.6860862295355353e-02 + 4.6148183418439742e-01 6.0557395592416963e-01 -9.4783136784051453e-02 + 5.5531777542557104e-01 6.6658105054652128e-01 -1.1603216537688177e-01 + 6.5330522980454209e-01 7.1542391674774153e-01 -1.3787471966094195e-01 + 7.5836702841740489e-01 7.5000588844035976e-01 -1.5710918868313500e-01 + 8.7693253243738800e-01 7.6895557795562175e-01 -1.7177499656186432e-01 + 1.0114296822572997e+00 7.6982779630364195e-01 -1.8206216004715051e-01 + 1.1554191964977762e+00 7.4863279572312502e-01 -1.8863702879903438e-01 + 1.3006796366821227e+00 7.0195045777791609e-01 -1.9077965444139833e-01 + 1.4494194952002497e+00 6.2888419320836075e-01 -1.8879681156667799e-01 + 1.6116523810707200e+00 5.3036462193449319e-01 -1.8672498428723178e-01 + 1.7899541151574931e+00 4.0904675207374136e-01 -1.8975481404052577e-01 + 1.9743379038397424e+00 2.6916632097887438e-01 -1.9961410508251892e-01 + 2.0547226846750273e+00 5.3239458156266836e-02 -1.9694163932777572e-01 + id 11976 + loc 7.3793864250183105e-01 8.2942241430282593e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1193227128050097e-01:3.7548547021944889e-01:6.5273365780567860e-02:4.0866082539197057e-01:9.9413880351553652e-01:3.5056104352508888e-01:1.7763881228029237e+00:4.1192815195778820e-01:2.1086203376963937e+00:3.7952631308444246e-01:2.8265103444302291e+00:2.5299882546564856e-01:3.0848052377949764e+00 + CVs 20 + 8.4626408541552803e-02 4.0871373830095986e-01 -2.4874457706849723e-01 + 1.8822463915278195e-01 8.1137601161395456e-01 -4.8892092200263315e-01 + 3.2327194119275093e-01 1.2049960117295140e+00 -7.3807866211078232e-01 + 5.0147173617311225e-01 1.5761234341790318e+00 -1.0134325127502688e+00 + 7.3044425552012948e-01 1.8948100130406638e+00 -1.3305522488978410e+00 + 1.0052579247642019e+00 2.1160859363764000e+00 -1.6974309789234805e+00 + 1.3064457250840706e+00 2.2011254206773270e+00 -2.1016790723959513e+00 + 1.6077469992316713e+00 2.1388080861139680e+00 -2.5133988670362335e+00 + 1.8834804172237427e+00 1.9459011989740076e+00 -2.9021790872143991e+00 + 2.1144920021213265e+00 1.6583727339227421e+00 -3.2516591909447965e+00 + 2.3001773742782667e+00 1.3215896827352025e+00 -3.5670288907674466e+00 + 2.4603980965496173e+00 9.7681070075714460e-01 -3.8757066643879288e+00 + 2.5975618715463580e+00 6.5416927026928806e-01 -4.1966957629221140e+00 + 2.6802142463730965e+00 3.7612850785035024e-01 -4.5245974018678599e+00 + 2.6935299505333421e+00 1.5541756092525305e-01 -4.8701381451295447e+00 + 2.6436684638520309e+00 9.6396519188757246e-03 -5.2594948897934382e+00 + 2.5407596595705928e+00 -3.5813042602658163e-02 -5.6711865595058750e+00 + 2.4304545488939393e+00 -2.4897686504361527e-03 -6.0662917537488585e+00 + 2.3605385290928713e+00 4.0011249965002049e-02 -6.4729515660106847e+00 + id 11977 + loc 8.4378093481063843e-01 3.8336271047592163e-01 403 + blend 0.0000000000000000e+00 + interp 3.7920845122421371e-01:3.7920465913970147e-01:3.9180850020831814e-01:2.5246853846904860e-01:1.0937609324657449e+00:3.0773905133389229e-01:1.9433925370285188e+00:3.2598561080611244e-01:2.4215436302570774e+00:3.7592573315364497e-01:2.9991344253280898e+00:3.7535902342144811e-01:3.6154293528809647e+00 + CVs 20 + -7.1672966273146427e-02 -2.8921361816776233e-02 6.1888168972557306e-02 + -1.4410580418337737e-01 -6.3785211044541767e-02 1.2612674172945101e-01 + -2.1819258950005033e-01 -1.0237287848679019e-01 1.9315965131071836e-01 + -2.9725632155464998e-01 -1.4150658346541684e-01 2.5264124241851005e-01 + -3.8765942258485014e-01 -1.7387815081516861e-01 3.0411756430580122e-01 + -4.9517967230416471e-01 -1.9056116759032593e-01 3.5060162838312303e-01 + -6.2401186516067830e-01 -1.8024771255425445e-01 4.0028558293817207e-01 + -7.7481500643899803e-01 -1.2837128070027437e-01 4.6574805134373709e-01 + -9.3730954864439797e-01 -2.1152060071493284e-02 5.6059575801532791e-01 + -1.0848274420974531e+00 1.4250011655093864e-01 6.9134460197374281e-01 + -1.1877678034057952e+00 3.4831494035772481e-01 8.5229728693591467e-01 + -1.2287623010615751e+00 5.7897630344278628e-01 1.0294225992512720e+00 + -1.2017295071567395e+00 8.2175367822959233e-01 1.2079351784906300e+00 + -1.1058663376915077e+00 1.0649616103299164e+00 1.3756056144899251e+00 + -9.4438061398734541e-01 1.2960340706573452e+00 1.5225771493233062e+00 + -7.2353598651707041e-01 1.5075088548480595e+00 1.6399631450996730e+00 + -4.4802035499784187e-01 1.7014599946707325e+00 1.7175996407529495e+00 + -1.2595842399642265e-01 1.8787267839187360e+00 1.7390242394559301e+00 + 9.7857792833968560e-03 1.9707488151294990e+00 1.6046061647138914e+00 + id 11978 + loc 9.3554663658142090e-01 5.8673758059740067e-02 1085 + blend 0.0000000000000000e+00 + interp 5.4813044462263438e-01:5.4812496331818816e-01:3.0986191077102321e-01:4.2116395996276579e-01:9.9421709715774764e-01:4.1434782197238412e-01:1.4609993169013800e+00:3.6461841993993499e-01:1.8167278406462342e+00:3.0985472364706884e-01:2.2107757444225782e+00:4.5604797453010243e-01:3.0767380912821887e+00:3.4161701810009382e-01:3.6787053795417695e+00 + CVs 20 + 1.8267763728294589e-01 3.5744838190908379e-01 -1.5401114884957606e-01 + 4.0559683938634439e-01 7.0388600964867953e-01 -3.0910792961649003e-01 + 6.3646338061470398e-01 1.0411946959383511e+00 -4.6080291017316954e-01 + 8.7517284940038265e-01 1.3560079691518496e+00 -5.9147269028829752e-01 + 1.1315323797709702e+00 1.6357426905694652e+00 -6.8184080405690395e-01 + 1.4058477743099864e+00 1.8665515597857369e+00 -7.1624296409889410e-01 + 1.6902299785255122e+00 2.0369836959567196e+00 -6.8291560346854308e-01 + 1.9704716571555374e+00 2.1351740469840315e+00 -5.7154927627361074e-01 + 2.2168987013098311e+00 2.1430286519208925e+00 -3.9092859380085077e-01 + 2.4000031745942305e+00 2.0636777287286368e+00 -1.8586047545988760e-01 + 2.5125576459344048e+00 1.9372940175495663e+00 -1.6056020126670956e-02 + 2.5687802551523928e+00 1.8410644715090332e+00 6.9763025671688350e-02 + 2.5963765408149131e+00 1.7984248126379467e+00 1.1657348980790472e-01 + 2.6063444423722433e+00 1.6345095882870200e+00 1.9435695122282104e-01 + 2.5672294684440935e+00 1.2168521654838149e+00 2.8564813398394684e-01 + 2.4202166467673640e+00 6.1481346046822283e-01 4.3602915882718341e-01 + 2.1438426582737575e+00 -8.9472062642260708e-03 7.3892936377090312e-01 + 1.8179415743273857e+00 -4.4166532913872592e-01 1.1903122116530696e+00 + 1.6062931130273257e+00 -5.1044108814750733e-01 1.5744672967154663e+00 + id 11979 + loc 4.4578889012336731e-01 5.2083373069763184e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2256634672809273e-01:4.1399816554216778e-01:3.7916247178602980e-01:2.5590509094271241e-01:1.0027621400900364e+00:4.2256212106462548e-01:1.5159416802375087e+00:4.1916624313839174e-01:2.0949058020958686e+00:4.0822569279501336e-01:2.9863846541943841e+00:2.9577178094803658e-01:3.3126359869414719e+00:4.1434685417465317e-01:3.9615111322909184e+00 + CVs 20 + -2.8946637740130093e-01 2.0517509717602364e-01 3.2556637690427287e-01 + -5.5668314930265428e-01 3.4755884178645796e-01 5.9666889005078394e-01 + -7.9996017888379256e-01 4.7043385008175181e-01 8.6663653437839483e-01 + -1.0124279459296950e+00 5.9442017099373867e-01 1.1631052985831238e+00 + -1.2086905765844127e+00 7.3160752823439279e-01 1.4851039653396478e+00 + -1.4208269830936948e+00 8.9777517980120769e-01 1.8271840022066281e+00 + -1.6979638034331650e+00 1.1075161042772694e+00 2.1764831603194339e+00 + -2.1026772335849269e+00 1.3699268604285246e+00 2.4961276715818062e+00 + -2.6559628418206609e+00 1.6518005431224445e+00 2.6780826549666155e+00 + -3.2342785921537307e+00 1.8750276981663319e+00 2.6356314108815138e+00 + -3.6779910345322246e+00 2.0544874732158096e+00 2.4475823788172200e+00 + -3.9427736361714634e+00 2.2890427087953467e+00 2.2108827107039293e+00 + -4.1076575949860281e+00 2.4742751162080197e+00 1.9048583903118130e+00 + -4.2538166291326984e+00 2.3073545774513375e+00 1.6060674075301393e+00 + -4.3445612533941826e+00 1.7484733395506560e+00 1.3993735208679956e+00 + -4.2739628570384216e+00 9.5879675929307528e-01 1.2041897591718278e+00 + -3.9931235918586983e+00 1.4207040167863560e-01 8.8353192593519037e-01 + -3.5934619064130198e+00 -4.0551935987845306e-01 4.0962911304235627e-01 + -3.2741118243358311e+00 -3.9860002874704137e-01 4.3229526660024761e-02 + id 11980 + loc 5.6937700510025024e-01 9.6655142307281494e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5856306694052346e-01:3.6692356481002425e-01:5.9270835086841278e-01:2.4573897029745331e-01:1.1378943037470586e+00:4.0795348001742543e-01:1.9998929734792730e+00:4.5855848130985405e-01:2.6406254287448778e+00:4.3536061510058893e-01:3.0094057356195409e+00:3.8311484211162894e-01:3.8841885503972775e+00 + CVs 20 + 1.5805508626705550e-01 9.2617967394867906e-01 -3.4053007091128529e-01 + 4.0773152267878943e-01 1.8761384771608671e+00 -6.0127791324714375e-01 + 7.6883263111583922e-01 2.8135682174413494e+00 -6.7352521370812479e-01 + 1.2246666343369030e+00 3.6488738665865386e+00 -4.6954940774510678e-01 + 1.7372861845055856e+00 4.2551569356057257e+00 2.9544145217522688e-02 + 2.2160964122107232e+00 4.5297969444544366e+00 7.5654606810563729e-01 + 2.5726821261946369e+00 4.4410227903475281e+00 1.6098441832102752e+00 + 2.7639067143213625e+00 4.0331910123625541e+00 2.4997877299548090e+00 + 2.7663048052001389e+00 3.3797172293648741e+00 3.3596775173427966e+00 + 2.5318121995787393e+00 2.5903108212574582e+00 4.1108481479558421e+00 + 2.0338359670042436e+00 1.8077085046059642e+00 4.6643830876769021e+00 + 1.3686275435704180e+00 1.0827192066700813e+00 4.9958881907173662e+00 + 6.8445963867405613e-01 3.4795765412695823e-01 5.1714767712243557e+00 + 1.4201020411086177e-01 -4.4140787795137815e-01 5.3297355874145769e+00 + 4.4601964748700457e-03 -1.1727681667575225e+00 5.6615729948805367e+00 + 3.9496763773913413e-01 -1.4095814274386766e+00 6.0546945767908644e+00 + 7.9353418985848112e-01 -1.1630345340955435e+00 6.2037148639400730e+00 + 1.1562870296567656e+00 -8.8946983986503492e-01 6.3539753851506031e+00 + 1.8764777197281342e+00 -6.3616407134536823e-01 6.9335694705153816e+00 + id 11981 + loc 1.0650997608900070e-01 3.0368733406066895e-01 1054 + blend 0.0000000000000000e+00 + interp 5.8494170550660418e-01:3.2036843767024742e-01:8.0893550064309694e-01:4.5701475563473931e-01:1.6753742584410058e+00:5.8493585608954912e-01:2.0142280165012374e+00:5.5397935358901673e-01:2.5202417555194083e+00:3.6872353289886695e-01:3.0978393726746161e+00:4.1892470635347645e-01:3.7953473573183132e+00 + CVs 20 + -6.4410857368828220e-02 4.0108498601241888e-01 -1.7292076806200496e-01 + -6.6099872475430699e-02 7.9382459974201836e-01 -3.6533385359972737e-01 + 1.6455881927382232e-02 1.1690769112856971e+00 -5.3657426026077704e-01 + 1.9234801349431119e-01 1.5101347952193664e+00 -6.6662617064900598e-01 + 4.5090120605717798e-01 1.7881811334984437e+00 -7.7048461687057834e-01 + 7.4908760394354690e-01 1.9798902430374223e+00 -8.7504904527345095e-01 + 1.0281355319599088e+00 2.0864743510875909e+00 -9.7730644841023229e-01 + 1.2496506673791572e+00 2.1230634124757808e+00 -1.0671399079444908e+00 + 1.3826124743892700e+00 2.0542964349799235e+00 -1.1570777545109259e+00 + 1.4039670690608737e+00 1.8421250456386331e+00 -1.2293800099233727e+00 + 1.3366811559365959e+00 1.4671859190424947e+00 -1.2734768622930868e+00 + 1.2935501380700221e+00 8.5907225876712201e-01 -1.3326448233570867e+00 + 1.4603658274296756e+00 -4.3165886541826487e-02 -1.6242953663884245e+00 + 1.7310022714347246e+00 -8.0322841326978678e-01 -2.3814874077642321e+00 + 1.7520572632949729e+00 -1.0919993245911557e+00 -3.0159495141795238e+00 + 1.5938843206812059e+00 -1.1962427087856713e+00 -3.2926272829097929e+00 + 1.3394094572169559e+00 -1.1624311906314015e+00 -3.2284350350804289e+00 + 9.8165905551669708e-01 -9.7138122299087359e-01 -3.0743605748516019e+00 + 8.0349365478915213e-01 -1.1890365628165289e+00 -3.3743196424880706e+00 + id 11982 + loc 3.1436389684677124e-01 1.5061360597610474e-01 1048 + blend 0.0000000000000000e+00 + interp 5.8494170550660418e-01:3.8390785420448659e-01:8.1900308348156647e-02:5.8493585608954912e-01:9.8362083736573569e-01:3.8870450245757099e-01:1.4817638722616135e+00:5.3381604901766311e-01:2.0638111472661382e+00:3.5097945978966888e-01:2.6205530064144411e+00:3.8877366157031112e-01:3.0505330938229434e+00:3.6939114167154385e-01:3.7927127299722425e+00 + CVs 20 + -3.4886389423377789e-01 4.8920103782580032e-01 7.1411288039581688e-02 + -6.7549759818944843e-01 1.0279069222834392e+00 6.3893957859319894e-02 + -9.5191542011125407e-01 1.6249880126078005e+00 -5.4235331727428227e-02 + -1.1644778301253280e+00 2.2203323497451919e+00 -3.1889027731434538e-01 + -1.3315923971736423e+00 2.7044620561635266e+00 -7.3268273534249595e-01 + -1.4791033305764718e+00 2.9857510825288829e+00 -1.2224485653297756e+00 + -1.5930314268152896e+00 3.0206211323959411e+00 -1.6566367514342488e+00 + -1.6248296551632300e+00 2.8532101649311805e+00 -1.9174816724603907e+00 + -1.5739423684467408e+00 2.5650897985784127e+00 -2.0650640884336262e+00 + -1.4390995425431967e+00 2.1691466692227972e+00 -2.1594281895052294e+00 + -1.1970740840382559e+00 1.7440669494827796e+00 -2.1633322291101118e+00 + -8.5891126077871616e-01 1.3832990527596096e+00 -2.0783937835763826e+00 + -4.7959906699016330e-01 1.0814452430947323e+00 -1.9528410314930260e+00 + -1.1241156723160195e-01 7.3554559655980023e-01 -1.8133620576519527e+00 + 1.9519318447462036e-01 2.8366918659726970e-01 -1.6515262625991973e+00 + 4.3910300723941920e-01 -4.8042226953374123e-01 -1.5490954838959006e+00 + 1.0400353236805489e+00 3.6835997656305441e-01 -2.4956251454248544e+00 + 1.1510453073914160e+00 5.5450754714806982e-02 -2.2834722456367640e+00 + 1.1854622131171872e+00 3.3678574840434661e-01 -2.2820661497930250e+00 + id 11983 + loc 2.0681378245353699e-01 7.7198743820190430e-01 406 + blend 0.0000000000000000e+00 + interp 4.1501612291777901e-01:3.9464760479930028e-01:5.3177731602301848e-01:3.9891348645128333e-01:1.1117269670826422e+00:3.9890137427451167e-01:2.0518585235583910e+00:4.1501197275654983e-01:2.8446150700673769e+00:3.8426747070198763e-01:3.3435818512884339e+00:3.5224064606192812e-01:3.9987573111629557e+00 + CVs 20 + 2.9974299476437488e-01 2.6560942003358123e-01 -2.0789431843101402e-01 + 4.6192661168101612e-01 4.7725065711463843e-01 -4.0042032653343651e-01 + 5.9071750828642366e-01 6.0898253386379597e-01 -5.5130896291221931e-01 + 7.2596452611144358e-01 7.2415986400859278e-01 -6.8130068693155843e-01 + 8.6162806548225790e-01 8.2636230261537369e-01 -7.9014947533772273e-01 + 9.9428316807497885e-01 9.1448943333976096e-01 -8.7694403526305820e-01 + 1.1233707954749272e+00 9.8520272028859723e-01 -9.4038295020320672e-01 + 1.2517461859679575e+00 1.0279684140215499e+00 -9.7456158102642099e-01 + 1.3844129292292318e+00 1.0111543943834309e+00 -9.5735708473212422e-01 + 1.4936824450592951e+00 8.1107883390614044e-01 -8.0446140760237106e-01 + 1.0670276628027702e+00 1.2113284087605036e-01 -4.3452188991403740e-01 + 2.4003572380324242e-01 -1.5785135662154598e-01 -5.1242539249409280e-01 + -7.7250065388539971e-02 -1.8353124014087230e-01 -6.2679835418483754e-01 + -2.4487636229446905e-01 -2.0898424199595197e-01 -6.7336675944581015e-01 + -3.4825688647944697e-01 -2.4877935512816796e-01 -6.5465349071986900e-01 + -3.8849176405604974e-01 -3.1891093611379528e-01 -5.5344545950209945e-01 + -3.5521819954119715e-01 -4.2226085354581000e-01 -3.6326967842900804e-01 + -2.5844596892478255e-01 -5.2990255016944809e-01 -1.1063343805956322e-01 + -3.4310730458520594e-01 -5.1244253181836763e-01 -1.0652443842311801e-02 + id 11984 + loc 4.9660342931747437e-01 7.4321269989013672e-02 1075 + blend 0.0000000000000000e+00 + interp 4.9523557507777327e-01:4.4395155411776543e-01:5.1005641249407885e-01:4.9523062272202251e-01:9.8831727437333683e-01:3.9175777473663242e-01:1.2324430143876073e+00:3.2352510945771762e-01:1.9725165620108691e+00:3.4493765855399378e-01:2.3263965207672004e+00:2.9625236700526286e-01:2.9753994506958485e+00:3.4866312335470440e-01:3.8701225842492271e+00 + CVs 20 + -2.4674919873815249e-01 3.4976108860551514e-01 -2.7853434478967043e-02 + -4.7535373520753010e-01 7.0134178296257110e-01 -1.8865059710470367e-02 + -6.9471770702275037e-01 1.0470591900316597e+00 1.4883353834537760e-02 + -9.2268137485745028e-01 1.3787699657342514e+00 5.2489716782178397e-02 + -1.1774016449270168e+00 1.6889039071971674e+00 7.3966533754723729e-02 + -1.4669655989523291e+00 1.9661034423103987e+00 6.6775531729366455e-02 + -1.7889464032329796e+00 2.1954393881723941e+00 2.2042131640806151e-02 + -2.1354730865738847e+00 2.3620229251328730e+00 -7.4236652155498239e-02 + -2.4905416298808074e+00 2.4481346778864204e+00 -2.3906869394405028e-01 + -2.8252372215919026e+00 2.4396430458753340e+00 -4.7071660500399237e-01 + -3.1113557036157813e+00 2.3438294268983046e+00 -7.4056232401959443e-01 + -3.3333243981190854e+00 2.1884831061320913e+00 -1.0066952564975034e+00 + -3.5015894694601690e+00 1.9879268013114735e+00 -1.2385028426187656e+00 + -3.6469811263448348e+00 1.7015558085774511e+00 -1.4172832822609065e+00 + -3.7739369753788310e+00 1.3000395504695383e+00 -1.5401175628181059e+00 + -3.8492477204064017e+00 8.1602917555392018e-01 -1.6559637676204286e+00 + -3.8406646776587849e+00 3.2364030959513573e-01 -1.8348052283303220e+00 + -3.7620430020013482e+00 -6.7827209523165899e-02 -2.1175098210816330e+00 + -3.6617780216047882e+00 -2.1533293753037575e-01 -2.4394078323455068e+00 + id 11985 + loc 9.8150759935379028e-01 5.8673758059740067e-02 1084 + blend 0.0000000000000000e+00 + interp 4.8011908950061544e-01:4.3803302353898138e-01:5.0351282835970901e-01:2.8938256609175511e-01:9.5645638465407290e-01:3.6182630213178063e-01:1.8071201582186733e+00:2.5193834884853833e-01:2.2501142339714444e+00:4.8011428830972047e-01:3.0695127069144967e+00:3.6079189211964391e-01:3.6876721938550689e+00 + CVs 20 + 1.8154215918918210e-01 2.6401039634388479e-01 -1.0953268527478827e-02 + 3.3554404046057024e-01 5.3754377931128838e-01 -5.5960824995053893e-02 + 4.4889681964714251e-01 8.1923550684108126e-01 -1.4482171066213312e-01 + 5.5178556409352097e-01 1.1172276164922197e+00 -2.5076393246054524e-01 + 7.0377407100576383e-01 1.4307300390353492e+00 -3.0810326070307392e-01 + 9.3544904672069396e-01 1.7215226289032866e+00 -2.5919403002396235e-01 + 1.2274766225000127e+00 1.9378016229267618e+00 -8.8361632436338544e-02 + 1.5264335992619000e+00 2.0421443913838910e+00 2.0242023934897335e-01 + 1.7563370049206861e+00 2.0192074836783398e+00 6.0006944013808983e-01 + 1.8576751667422851e+00 1.8797427270129523e+00 1.0554344487052947e+00 + 1.8273182156640453e+00 1.6454327591650990e+00 1.5111622812714096e+00 + 1.6724733014069153e+00 1.3190761532888988e+00 1.9271141761805908e+00 + 1.4088381946139528e+00 9.0909935414017862e-01 2.2412917585047771e+00 + 1.1454787254774721e+00 4.8757079300714645e-01 2.4208808084251987e+00 + 1.0237306010036529e+00 1.4973798097372482e-01 2.5513938781404053e+00 + 1.0764599585552612e+00 -4.2904465769727285e-02 2.7026658152010552e+00 + 1.2552570129826792e+00 -4.5746345747809780e-02 2.8508284936355106e+00 + 1.5010771206786475e+00 1.3252568996300673e-01 2.8948620819032591e+00 + 1.5354266760039057e+00 3.7421381871979520e-02 3.1623606942034890e+00 + id 11986 + loc 5.2399259805679321e-01 7.1205508708953857e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3512544852855145e-01:3.7404322008739294e-01:2.2177307458079187e-01:3.7245934251654783e-01:1.0249950491239506e+00:3.9846107677972364e-01:1.7562569216762838e+00:3.6022083964300822e-01:2.1316940563581177e+00:3.0223646479014904e-01:2.9861829353986034e+00:3.5652717370413373e-01:3.5168188897320469e+00:4.3512109727406617e-01:3.9855326488881762e+00 + CVs 20 + 1.7148672613513585e-01 2.8745389403213972e-01 -1.1612436417947566e-01 + 3.4579175884855701e-01 5.5757501864599834e-01 -2.2846351171294016e-01 + 5.1015949324472221e-01 8.0324650817479892e-01 -3.5335535175866117e-01 + 6.5724648739233327e-01 1.0201181610680405e+00 -4.9657955224516293e-01 + 7.8359645809045719e-01 1.2051532248239369e+00 -6.5410924704212592e-01 + 8.8775317047674940e-01 1.3557728498009907e+00 -8.2350181241955656e-01 + 9.7266601754854343e-01 1.4675994124465044e+00 -1.0117361420125381e+00 + 1.0387616025279633e+00 1.5346400337206021e+00 -1.2227887407894962e+00 + 1.0797347322168629e+00 1.5569964695705101e+00 -1.4457366619164880e+00 + 1.0899314334607193e+00 1.5427803489909362e+00 -1.6664070354487848e+00 + 1.0716495539891608e+00 1.5051226543053093e+00 -1.8775145568735589e+00 + 1.0330919867574138e+00 1.4597776749791578e+00 -2.0709375988794929e+00 + 9.8665981755510268e-01 1.4171132825614121e+00 -2.2379006809545818e+00 + 9.4988196781716638e-01 1.3761446314398917e+00 -2.3632579138334058e+00 + 9.4171398432884401e-01 1.3429871836520597e+00 -2.4311673051961851e+00 + 9.6539500618145191e-01 1.3234320764874130e+00 -2.4563554336716615e+00 + 1.0071189282306983e+00 1.3160375790893373e+00 -2.4688042804628538e+00 + 9.8167583535493330e-01 1.3077123077315189e+00 -2.5186813360791556e+00 + 5.0254864364874441e-01 1.2481037378494317e+00 -2.7619455287174692e+00 + id 11987 + loc 9.7476083040237427e-01 8.0102568864822388e-01 416 + blend 0.0000000000000000e+00 + interp 4.8407558761506808e-01:3.3317742268953821e-01:9.2822218097697762e-01:4.8407074685919194e-01:1.9565927184491962e+00:4.7670285174299892e-01:2.4300896715993736e+00:2.5398981198530513e-01:2.9967954163021231e+00:4.3064519977339971e-01:3.9382762479451401e+00 + CVs 20 + 8.2464167166597202e-01 1.6748508302711135e-01 -1.5938465315515268e-01 + 1.3617101905466522e+00 1.9016882666613247e-01 -2.9255206239986287e-01 + 1.8296123904017039e+00 1.6974433559652152e-01 -3.9404764350485533e-01 + 2.3084858465299485e+00 1.4625241681154105e-01 -4.6284342263329692e-01 + 2.7864764928847898e+00 1.1938883686186119e-01 -5.0299706066128946e-01 + 3.2550306573832408e+00 9.0602942623922655e-02 -5.2059570156454715e-01 + 3.7106325445667085e+00 6.1635649548144600e-02 -5.2350625166581932e-01 + 4.1547064773898716e+00 3.2642654896999135e-02 -5.2077063540496216e-01 + 4.5910793803587922e+00 1.8486589334663073e-03 -5.2011009786549467e-01 + 5.0234771296520018e+00 -3.3666897459497802e-02 -5.2561729552409997e-01 + 5.4538318234252898e+00 -7.6618476337287689e-02 -5.3717219694612983e-01 + 5.8778127171598511e+00 -1.2688894722333277e-01 -5.5469745922067271e-01 + 6.2865190155038828e+00 -1.8351288484090511e-01 -5.8647589141116352e-01 + 6.6778392547532945e+00 -2.5242865419473515e-01 -6.4919676948308269e-01 + 7.0531500429170908e+00 -3.4030673028079228e-01 -7.5159296684490695e-01 + 7.4057108777559151e+00 -4.4022833594339006e-01 -8.7940354073307270e-01 + 7.7258304288885826e+00 -5.3762969596459054e-01 -1.0084968517957895e+00 + 8.0086420389700219e+00 -6.2589497926182069e-01 -1.1281349549453217e+00 + 8.2035851270017233e+00 -7.3845304228265807e-01 -1.3364815129245682e+00 + id 11988 + loc 1.9342826306819916e-01 6.4360088109970093e-01 1085 + blend 0.0000000000000000e+00 + interp 5.1292494872135208e-01:4.0813551020944233e-01:5.6454679321272572e-02:3.2462093654356028e-01:8.0003658366882879e-01:4.1614739553544999e-01:1.2226503495216290e+00:4.4636673286558509e-01:1.8633938901898883e+00:3.0790466074163464e-01:2.4476234294934627e+00:3.8418560534945650e-01:3.1365519209914647e+00:5.1291981947186494e-01:3.8600717357313981e+00 + CVs 20 + -1.1867448460303738e-01 5.5301565693976640e-01 3.6749488418976561e-01 + -2.6065917559163854e-01 1.0234556372938823e+00 6.0242564238871688e-01 + -4.2992455581655403e-01 1.4541725216781347e+00 7.8243240360230271e-01 + -6.3591077742082547e-01 1.8547573029930939e+00 9.2043302645368630e-01 + -8.7994274172587805e-01 2.2112329382930516e+00 1.0009539534094625e+00 + -1.1544712513114228e+00 2.5099349995810885e+00 1.0136392416044528e+00 + -1.4441334776316945e+00 2.7394032468127687e+00 9.5444391432901310e-01 + -1.7303661227807570e+00 2.8935015271239659e+00 8.2778170277450891e-01 + -2.0028024229630379e+00 2.9719435979595192e+00 6.4392196370447219e-01 + -2.2599579776946368e+00 2.9737460474946715e+00 4.1365572796821715e-01 + -2.4974120294356683e+00 2.8965572372477544e+00 1.5261470070379235e-01 + -2.7119907669085075e+00 2.7416916401453202e+00 -1.2024713799787223e-01 + -2.9041329114405623e+00 2.5098073842361655e+00 -3.9104900288526068e-01 + -3.0785966367978812e+00 2.1878152665862052e+00 -6.5602291342445362e-01 + -3.2331197004383259e+00 1.7733130200012572e+00 -8.9012548268938008e-01 + -3.3426037231809032e+00 1.3061132382558291e+00 -1.0477026696746286e+00 + -3.3926205389604855e+00 8.0268122813759646e-01 -1.1174347415280412e+00 + -3.4343349769561979e+00 3.0587739554186288e-01 -1.0833728087113856e+00 + -3.5239224700441780e+00 1.4358575839276166e-01 -9.4098807668485440e-01 + id 11989 + loc 8.2353442907333374e-02 6.8623781204223633e-02 411 + blend 0.0000000000000000e+00 + interp 3.9220317187631748e-01:3.4796524941106560e-01:3.1849084430896379e-01:3.9219924984459875e-01:1.0641726393810902e+00:2.7563335458826366e-01:1.8084696378410756e+00:3.3945981399895575e-01:2.7563500372945233e+00:3.2988009361847487e-01:3.2267947811513351e+00:3.5230448765996975e-01:3.9606835632929971e+00 + CVs 20 + -2.0591610198282059e-01 2.4767576323965096e-01 -6.4189226372731278e-01 + -3.5875355519906338e-01 3.9047058108622751e-01 -1.1326163498117130e+00 + -4.8833654880297933e-01 4.8897148348115649e-01 -1.6184189970618961e+00 + -6.1418635252772336e-01 5.4855572407742259e-01 -2.1532407351041649e+00 + -7.6468871221931600e-01 5.3605542992791277e-01 -2.7196482797171853e+00 + -9.7034740929956687e-01 4.1851165999667628e-01 -3.2785903449393583e+00 + -1.2426110257980307e+00 1.7603762858851879e-01 -3.7714074668782134e+00 + -1.5579990506182040e+00 -1.8773371711126940e-01 -4.1416214381768546e+00 + -1.8660891839307456e+00 -6.4449891807280557e-01 -4.3615469518657726e+00 + -2.1116079265971197e+00 -1.1457003918925091e+00 -4.4293744066195702e+00 + -2.2841670146892903e+00 -1.6620884054658214e+00 -4.3768215748876491e+00 + -2.4584091851039753e+00 -2.2584039829359863e+00 -4.2765828311834939e+00 + -2.7305970365169321e+00 -3.0018731169918009e+00 -4.1894607837949627e+00 + -3.1674776162300629e+00 -3.8442961754829916e+00 -4.1582459346011493e+00 + -3.7686223843671645e+00 -4.6706064889457233e+00 -4.2201738975245098e+00 + -4.4268579166329172e+00 -5.3872001088807338e+00 -4.3948224767304227e+00 + -5.0043508981215066e+00 -5.9775105583202555e+00 -4.6724227854597835e+00 + -5.4450291527729133e+00 -6.4578058466598138e+00 -5.0001494921631995e+00 + -5.7746321715824447e+00 -6.8303736869705158e+00 -5.2729406254872391e+00 + id 11990 + loc 8.8525509834289551e-01 1.4203469455242157e-01 397 + blend 0.0000000000000000e+00 + interp 4.2507608685039444e-01:4.2507183608952598e-01:3.4715005402341192e-01:2.6525218546899770e-01:9.1604555739337690e-01:2.6019457136472551e-01:1.7795805317747084e+00:2.5323712553301519e-01:2.3626479295172254e+00:3.4447832733879435e-01:3.1389474187121227e+00:3.9528313861442421e-01:3.9560383346143437e+00 + CVs 20 + -1.2501229759299488e+00 3.4225101978868239e-01 3.4964816661278630e-01 + -2.0905233253041433e+00 4.0659441842857685e-01 6.4808383149338877e-01 + -2.8106368921288456e+00 3.4895137743815552e-01 9.2818668440898211e-01 + -3.5214007587487894e+00 2.0661096470386356e-01 1.2115209578831601e+00 + -4.2055413453449937e+00 -9.4629634634576520e-03 1.4905997343275692e+00 + -4.8511526883274758e+00 -2.8139514280350253e-01 1.7637740612082404e+00 + -5.4490254869884360e+00 -6.0329532845087253e-01 2.0269538994235150e+00 + -5.9892161379305344e+00 -9.8459387448255342e-01 2.2687622518150685e+00 + -6.4641358054217450e+00 -1.4181328166328901e+00 2.4874439649030911e+00 + -6.8708392094629183e+00 -1.8940296348570544e+00 2.6946609292661652e+00 + -7.2100532200804821e+00 -2.4049085307696045e+00 2.9115079701928996e+00 + -7.4863662225162013e+00 -2.9455359490617243e+00 3.1567857962653942e+00 + -7.7119900449510226e+00 -3.5133670820073646e+00 3.4375988169099889e+00 + -7.8967237217194359e+00 -4.1093941887673138e+00 3.7564053009340879e+00 + -8.0366822104918114e+00 -4.7316646554508441e+00 4.1096188967377536e+00 + -8.1187375147820084e+00 -5.3735919851232392e+00 4.4745995433897860e+00 + -8.1337268188584737e+00 -6.0275134653907338e+00 4.8154824608036400e+00 + -8.0978976419691087e+00 -6.6768306330029095e+00 5.1117107768251717e+00 + -8.1627487808858206e+00 -7.2492659944113420e+00 5.4329712900678651e+00 + id 11991 + loc 5.9055227041244507e-01 2.2269469499588013e-01 384 + blend 0.0000000000000000e+00 + interp 7.7396475544619769e-01:7.7395701579864329e-01:1.1478264487776559e+00:3.6999243561568468e-01:1.5321357398279236e+00:4.1739431162175983e-01:2.1116472726960085e+00:3.8113551130510293e-01:2.9999951908886944e+00:7.0409407109238653e-01:3.4822351603886905e+00 + CVs 20 + -1.2295453699544543e+00 1.5995527452200520e-01 5.4173930617690846e-01 + -1.9949771702425187e+00 1.3293892977719982e-01 9.1007368844386649e-01 + -2.6499519800485141e+00 4.2451956058883966e-02 1.2284932572382128e+00 + -3.3249013902953952e+00 -5.6632623755177802e-02 1.5419912692797046e+00 + -4.0156360784462271e+00 -1.5177002540061013e-01 1.8602975275556737e+00 + -4.7211687738074923e+00 -2.3700745555975211e-01 2.2051557948395262e+00 + -5.4321516692800289e+00 -3.1864954358675923e-01 2.6046564874132319e+00 + -6.1262729251811567e+00 -4.1845495399105370e-01 3.0786971302996493e+00 + -6.7857966300242234e+00 -5.8178684234695899e-01 3.6399550803915299e+00 + -7.3853991991268941e+00 -8.6558574599919313e-01 4.2871995750753271e+00 + -7.8719140669382623e+00 -1.2995350471804978e+00 4.9920417476090382e+00 + -8.1904816220794689e+00 -1.8659325432374576e+00 5.7044640990223634e+00 + -8.3199031917511945e+00 -2.5176143215862705e+00 6.3709397235050762e+00 + -8.2758823529621335e+00 -3.1993699362168173e+00 6.9502292147815510e+00 + -8.0999393899737200e+00 -3.8616456227075515e+00 7.4244672277688757e+00 + -7.8460625081812090e+00 -4.4751042807012551e+00 7.8038524573828996e+00 + -7.5603998754230499e+00 -5.0343337859982951e+00 8.1021720948702658e+00 + -7.2761497055041042e+00 -5.5357864025563321e+00 8.3242451069108760e+00 + -7.0680470692400892e+00 -5.8816762336068047e+00 8.4901784690575468e+00 + id 11992 + loc 8.0504286289215088e-01 5.8522099256515503e-01 1053 + blend 0.0000000000000000e+00 + interp 4.6904677723443666e-01:3.0832064223615413e-01:4.9602589814281672e-01:2.8305631301704659e-01:1.5174644708000273e+00:4.0110409702370370e-01:2.0777434673878794e+00:3.1852361026215026e-01:2.9027184796897343e+00:3.1686497403792618e-01:3.3514218742550117e+00:4.6904208676666431e-01:3.9075872255556634e+00 + CVs 20 + -1.0880428174994003e-01 2.9191245429296764e-01 2.4542397546966177e-01 + -2.4464452397254854e-01 5.6158109071015594e-01 4.6954957022996580e-01 + -3.9393755468241082e-01 8.3146156075956590e-01 6.8561574182410756e-01 + -5.5265889389788625e-01 1.1039400930333010e+00 8.9516120107891517e-01 + -7.2853993921539795e-01 1.3681752324825180e+00 1.0929717026169921e+00 + -9.2223294731959460e-01 1.6063006780457054e+00 1.2741323894482535e+00 + -1.1298265936326526e+00 1.7959254007878960e+00 1.4364295590495133e+00 + -1.3547530182218033e+00 1.9142267457391200e+00 1.5763750274250339e+00 + -1.6064579834492532e+00 1.9350934380014337e+00 1.6804577065687099e+00 + -1.8707756781825962e+00 1.8336442646440538e+00 1.7259515574618223e+00 + -2.1027228118165677e+00 1.5980287075975743e+00 1.6920327254902698e+00 + -2.2430303640006661e+00 1.2433593073560167e+00 1.5705370758435835e+00 + -2.2480775518594731e+00 8.1973929845161142e-01 1.3653420838030572e+00 + -2.1378891432303950e+00 3.8814724672567436e-01 1.0607667402916205e+00 + -1.9856299827072568e+00 2.5128114997614082e-02 6.2386300516707915e-01 + -1.8613639300425999e+00 -1.5778951055518892e-01 6.6511067464331330e-02 + -1.8003414579655144e+00 -9.0024316303358942e-02 -5.0994424648405068e-01 + -1.7847274245147928e+00 1.0954084138438913e-01 -9.9679846198374755e-01 + -1.7444732128389404e+00 1.7700134560478853e-01 -1.3997133508292561e+00 + id 11993 + loc 9.8286741971969604e-01 2.7714034914970398e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1518967402542974e-01:3.0691376743669196e-01:6.9799668634060030e-01:2.6150174905551848e-01:1.0998673694976080e+00:2.8599874979532353e-01:2.1894613694465224e+00:3.1518652212868953e-01:2.9658188959758238e+00:3.0347098667483313e-01:3.9948519484227996e+00 + CVs 20 + -1.8437716452352293e-01 1.7707265009486278e-01 2.0854144725622703e-01 + -3.5794891847927007e-01 3.4575555292117499e-01 4.0143117399360678e-01 + -5.2404378515502159e-01 5.0641689900780384e-01 5.8542044936358251e-01 + -6.8573803012406598e-01 6.5919031406841544e-01 7.6507153319278443e-01 + -8.4594394131212935e-01 8.0464111275078931e-01 9.4131314897041651e-01 + -1.0068269921133599e+00 9.4488653374310050e-01 1.1153199236852589e+00 + -1.1674452295080817e+00 1.0833492978494319e+00 1.2911449356609097e+00 + -1.3242785059582782e+00 1.2225846053756373e+00 1.4747027093901541e+00 + -1.4743044303643822e+00 1.3608363514987836e+00 1.6732378009662965e+00 + -1.6117484274994152e+00 1.4918965418162213e+00 1.8934296431341093e+00 + -1.7294912182611348e+00 1.6055114142613851e+00 2.1369358705971093e+00 + -1.8217977785580191e+00 1.6859170371479768e+00 2.4004580916685034e+00 + -1.8897196303734880e+00 1.7200118346187034e+00 2.6739565692937415e+00 + -1.9450634195105083e+00 1.7088448979427475e+00 2.9430131292854842e+00 + -2.0025759203015761e+00 1.6645112236672983e+00 3.1961945037971917e+00 + -2.0760609005111412e+00 1.6052171927519576e+00 3.4303153290907584e+00 + -2.1786673622081651e+00 1.5396952786259508e+00 3.6498918312194193e+00 + -2.3178626108211970e+00 1.4422559925737801e+00 3.8490197322140047e+00 + -2.5415235526485933e+00 1.1108530572215556e+00 3.9303763019930100e+00 + id 11994 + loc 5.1681381464004517e-01 6.3608758151531219e-02 1054 + blend 0.0000000000000000e+00 + interp 5.3045843275723048e-01:3.1059429413742873e-01:4.4245464706170989e-01:4.1942899180852905e-01:9.9984691025137440e-01:3.3393452598957851e-01:1.9435196912942621e+00:5.3045312817290291e-01:2.0965782361414380e+00:3.8011734625226917e-01:3.0006708077093824e+00:4.8001385960274068e-01:3.8033881919839021e+00 + CVs 20 + -9.8094731109479708e-02 4.7233232306185324e-01 1.4088849775036855e-01 + -2.2857583340053689e-01 9.4241798555763601e-01 2.2873402485090444e-01 + -3.6524364700913292e-01 1.4144292504527520e+00 2.6534234905901000e-01 + -5.4800355494436537e-01 1.8813496105560410e+00 2.8286029940778801e-01 + -8.3651932462416045e-01 2.2959731247248731e+00 3.2837491226967708e-01 + -1.2413686107548749e+00 2.5755088831632538e+00 4.3371418193903821e-01 + -1.7050576406053977e+00 2.6377638356077258e+00 5.9145775358228991e-01 + -2.1232181338515712e+00 2.4691208728831748e+00 7.4442797082156242e-01 + -2.4327827703861411e+00 2.1585036166895391e+00 8.3420268338504633e-01 + -2.6566751672746745e+00 1.8199936176642746e+00 8.4892666011916607e-01 + -2.8548169099112299e+00 1.5295907671664657e+00 8.0770889062829954e-01 + -3.0651013426072939e+00 1.3383438701934323e+00 7.6853081973735438e-01 + -3.2475588822100021e+00 1.3027538079094261e+00 8.3749001991521599e-01 + -3.2479518869388997e+00 1.3681829643515935e+00 1.0046515808575642e+00 + -3.2089722436378390e+00 1.3727331545939818e+00 1.1355122962531534e+00 + -3.2351197176307296e+00 1.3652750283009034e+00 1.3012364913637444e+00 + -3.3135095072270935e+00 1.3974551195559008e+00 1.5770679204185964e+00 + -3.5127221429550488e+00 1.4212639133276825e+00 2.0268728195271430e+00 + -3.5984908085780121e+00 1.3309067099667820e+00 2.2670404854796331e+00 + id 11995 + loc 9.3915581703186035e-01 8.5185475647449493e-02 1076 + blend 0.0000000000000000e+00 + interp 4.2627694892686929e-01:2.7698221537598816e-01:2.1490614337316138e-05:2.8343711755373879e-01:8.1238511667453994e-01:2.9642291442193375e-01:1.4341963213397060e+00:4.2627268615738007e-01:1.9657829716275570e+00:2.6158962826371140e-01:2.8681809309849378e+00:3.4489188716170827e-01:3.1671899463918725e+00 + CVs 20 + -6.0600612802332615e-02 4.6618692278449947e-01 1.1526631084120795e-01 + -1.2658053235201777e-01 9.2404738630471150e-01 2.5713431594598718e-01 + -1.7243704747052591e-01 1.3722933169376659e+00 4.0017372307970323e-01 + -1.8340815590774628e-01 1.8125702397113095e+00 5.2471606033348550e-01 + -1.6260007697269357e-01 2.2587323029196171e+00 6.4367100938333432e-01 + -1.3933145530166480e-01 2.7068278676762505e+00 8.2928847084014778e-01 + -1.7227922323096478e-01 3.0647422870997563e+00 1.1611170267396540e+00 + -3.1545913683865856e-01 3.1982047429389895e+00 1.5895280496359867e+00 + -5.7234821621170084e-01 3.0690025311140054e+00 1.9404233730196609e+00 + -8.8109459407585256e-01 2.7930363098423152e+00 2.0762062453773034e+00 + -1.1860163352345405e+00 2.5021494899126089e+00 2.0267405528474773e+00 + -1.4659913640458302e+00 2.2166458507009046e+00 1.8733416181808273e+00 + -1.7029333199643575e+00 1.9049496585088426e+00 1.6625916139825423e+00 + -1.8313534483321989e+00 1.5375011836605910e+00 1.4033730364314738e+00 + -1.7555990326547921e+00 1.1444708072613956e+00 1.1074346370891732e+00 + -1.4273346078215381e+00 8.7002890354985851e-01 7.8659489530972271e-01 + -8.4252934838071281e-01 9.8166688959475445e-01 5.2109790097355213e-01 + -2.9995686535622279e-01 1.4133316849781585e+00 4.8941558712395516e-01 + 4.7186375311196571e-02 1.3025414525696093e+00 1.9857888396168472e-01 + id 11996 + loc 3.2390230894088745e-01 7.9214864969253540e-01 1050 + blend 0.0000000000000000e+00 + interp 4.2952567448327023e-01:3.4551642565930896e-01:4.0977964371054387e-01:3.6979836095379670e-01:1.4540786236265619e+00:3.0512824610351080e-01:2.1006260666569578e+00:4.2952137922652539e-01:2.7828336367083981e+00 + CVs 20 + -4.9370984697856196e-02 4.6990666709033196e-01 -8.7806467667079546e-01 + 3.1613203445820637e-02 9.3697919121660234e-01 -1.5679527667772584e+00 + 2.2870282324307667e-01 1.4066290151521978e+00 -2.0702111834242021e+00 + 5.1022762006000233e-01 1.8527416423276513e+00 -2.3998736825050506e+00 + 8.5137147293662851e-01 2.2455208862133405e+00 -2.5874666967947992e+00 + 1.2365829309333831e+00 2.5754633688971595e+00 -2.6849495387036426e+00 + 1.6718091981001102e+00 2.8541978078286143e+00 -2.7415383507577027e+00 + 2.1929290471427834e+00 3.0690491237810429e+00 -2.7894010480203453e+00 + 2.8375551377868238e+00 3.1404871665438074e+00 -2.8666180799225183e+00 + 3.6139979875666572e+00 2.9449562188297795e+00 -2.9656418755126115e+00 + 4.4190881978936751e+00 2.3514386545328123e+00 -2.9533606752440820e+00 + 4.9994440300276297e+00 1.3626524780652098e+00 -2.6582377621930720e+00 + 5.1222578022774821e+00 1.9752298538596580e-01 -1.9958973063977743e+00 + 4.6927916283079805e+00 -7.8369903325062273e-01 -1.0253860760740521e+00 + 3.7855393412191738e+00 -1.2843999244733977e+00 7.5794353327712338e-02 + 2.5792224876382019e+00 -1.1668252262326293e+00 1.0736128381542680e+00 + 1.1343907801302768e+00 -3.2541180792641144e-01 1.6915666280980508e+00 + -8.8444787734696106e-02 1.2701309483144616e+00 1.1351057417526855e+00 + -4.6698224551859469e-01 1.9646113198346937e+00 6.4653542154016108e-01 + id 11997 + loc 7.1257334947586060e-01 7.5524586439132690e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5885623681654536e-01:3.1717516707647719e-01:3.5366281003920363e-02:4.5885164825417724e-01:6.3786920414741233e-01:3.5317510023226717e-01:1.0533152538956672e+00:3.8654322219858989e-01:1.9952232012261231e+00:2.4281600550114377e-01:2.3084581449393435e+00:3.6220305916882500e-01:2.9234320690729394e+00:2.8954887345034408e-01:3.3674807316958617e+00 + CVs 20 + 7.0780081186958846e-02 8.9913570948922528e-01 -3.0565143961324726e-01 + 2.3296939441167466e-01 1.8015730326043968e+00 -5.0867055290856578e-01 + 4.8726131918023774e-01 2.6330806139922616e+00 -6.2504949458180370e-01 + 8.1235090984026326e-01 3.3693762309747819e+00 -5.7278800637844385e-01 + 1.2309605139902340e+00 3.9789905191357260e+00 -3.2518557383816971e-01 + 1.7219348158805612e+00 4.3967357640816935e+00 1.4261123231850958e-01 + 2.2268096710757170e+00 4.5070935513747461e+00 8.3891288800860475e-01 + 2.6711178135418772e+00 4.2251976324086655e+00 1.6721659023782582e+00 + 2.9949332222261660e+00 3.5657550402691047e+00 2.5048482891293489e+00 + 3.0725917920745491e+00 2.6000295387460355e+00 3.2284582354919245e+00 + 2.7621871655203210e+00 1.4975944514776058e+00 3.7316022548995642e+00 + 2.1152474910819365e+00 4.8592699811910522e-01 3.9244579388654888e+00 + 1.3263672614928652e+00 -3.5538644794292229e-01 3.8601677066873528e+00 + 5.6212609628813959e-01 -1.1102915143904071e+00 3.7491602910484731e+00 + 9.9889363516089680e-02 -1.9249500580397036e+00 3.9305067106399481e+00 + 3.6830978585989615e-01 -2.5989442836247116e+00 4.5748702141467543e+00 + 1.0790256626574120e+00 -2.6491103771740248e+00 5.3475887009036178e+00 + 1.6372738555572797e+00 -2.2811164757105340e+00 6.0544502100650854e+00 + 1.9712894562063215e+00 -2.0110179991642676e+00 6.5255320216750734e+00 + id 11998 + loc 2.0293089747428894e-01 6.4360088109970093e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8134093068649891e-01:4.6378167649311236e-01:7.9283286253444829e-02:3.7530141829958702e-01:7.6215898556592143e-01:4.3776501938238149e-01:1.1885360368163813e+00:4.8133611727719205e-01:1.8932596786100961e+00:3.6401954075885556e-01:2.4507945305497221e+00:4.0747416393335983e-01:3.1155875526573134e+00:2.8025135431121906e-01:3.7182286085389933e+00 + CVs 20 + -2.5476572498230565e-01 2.6755241651696393e-01 3.8949429305919858e-01 + -4.8160963326288614e-01 4.7427509525824224e-01 6.7124812810364787e-01 + -6.8623961626499119e-01 6.7005956746465312e-01 9.1772805857916251e-01 + -8.6224507049285404e-01 8.7694127933968602e-01 1.1650739856358840e+00 + -1.0166062276033652e+00 1.0937799175657634e+00 1.4093364304918983e+00 + -1.1626992288986031e+00 1.3189010883514491e+00 1.6468753231380475e+00 + -1.3155218623628637e+00 1.5495208225094064e+00 1.8788608635458253e+00 + -1.4926500765832413e+00 1.7873543038037556e+00 2.1151707880766999e+00 + -1.7328291832127671e+00 2.0460548141525932e+00 2.3435543528906519e+00 + -2.0572996062509108e+00 2.3106316286105075e+00 2.4569705201449774e+00 + -2.3798345220044475e+00 2.5357077809452577e+00 2.3675782747463439e+00 + -2.6156961823809035e+00 2.7090646313445301e+00 2.0938784981897367e+00 + -2.7558540677056480e+00 2.7708161129789146e+00 1.6928438817506173e+00 + -2.8512841380268559e+00 2.6182904707313677e+00 1.3070192635720279e+00 + -2.9433320446763998e+00 2.2741917043116162e+00 1.0474349629645234e+00 + -3.0120263604363053e+00 1.8364136113815377e+00 8.7478534446930789e-01 + -3.0196555263073579e+00 1.3909008092674777e+00 7.1668110269727203e-01 + -2.9630796539468021e+00 1.0100590236189035e+00 5.1655615025497648e-01 + -2.8559859546100057e+00 8.8351651792828045e-01 1.4039229462175651e-01 + id 11999 + loc 5.9540811926126480e-02 6.9722980260848999e-01 1085 + blend 0.0000000000000000e+00 + interp 5.3513060956357084e-01:5.3512525825747526e-01:7.2114363707760987e-01:2.8798439001019677e-01:1.0748110510941671e+00:4.3142630652398345e-01:1.9826731494181715e+00:2.9740100841537404e-01:2.4533535303473877e+00:4.1614739553544999e-01:3.2168089300243619e+00:3.4988483243847951e-01:3.9491748800733872e+00 + CVs 20 + -1.4247110867720139e-01 4.0573837954734421e-01 4.3391030308534290e-01 + -2.8538227326773047e-01 7.2083825951144176e-01 7.4187271931488841e-01 + -4.3304185437641696e-01 1.0022983760565409e+00 1.0086386501447147e+00 + -5.9122576087084799e-01 1.2814773851313530e+00 1.2727986749687741e+00 + -7.7515151231463708e-01 1.5619400020996788e+00 1.5235781868332343e+00 + -1.0038056824431609e+00 1.8441993829836987e+00 1.7464601885544948e+00 + -1.2989149539150955e+00 2.1216105711147266e+00 1.9195055634313547e+00 + -1.6768982332504341e+00 2.3735390159727983e+00 2.0096638828684812e+00 + -2.1281132978614097e+00 2.5607409777965930e+00 1.9807300608599645e+00 + -2.5959370235056656e+00 2.6407342985562656e+00 1.8293148893908109e+00 + -3.0207914031196963e+00 2.6074414086299083e+00 1.6052241762369437e+00 + -3.3939204526983953e+00 2.4796290551839419e+00 1.3580501598870156e+00 + -3.7269773795561063e+00 2.2698940328352419e+00 1.1153802815207265e+00 + -4.0254117039770145e+00 1.9911295694487297e+00 9.0175407681731734e-01 + -4.2934540649309900e+00 1.6599430829307409e+00 7.4396258903091839e-01 + -4.5329145383299618e+00 1.3111255409601341e+00 6.6415572830216574e-01 + -4.7434248652401774e+00 1.0122199485470984e+00 6.4823913044943282e-01 + -4.9335558199752558e+00 7.9662888031535928e-01 6.5763623732461685e-01 + -5.2136031406920367e+00 3.8344669953423244e-01 7.5981147769335378e-01 + id 12000 + loc 3.1024920940399170e-01 3.3924424648284912e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2662954241216272e-01:4.2662527611673862e-01:5.2201012509782285e-01:3.0569312177837638e-01:9.9476170927573915e-01:2.6079974481317508e-01:1.7409213960352081e+00:3.3103007826145736e-01:2.7670001838883280e+00:3.0672743824216725e-01:3.1447807008901405e+00:4.1570432918684291e-01:3.9971194985591518e+00 + CVs 20 + -2.2828949730300185e-01 1.7358804432390657e-01 -1.6613242744097373e-01 + -4.5828632020777293e-01 3.5690429901133347e-01 -3.2299120023952466e-01 + -6.9280258613747836e-01 5.3998331122911114e-01 -5.0830837473921830e-01 + -9.2855180832912987e-01 7.0944821538800107e-01 -7.3618375228097377e-01 + -1.1696375313374909e+00 8.6958081047339586e-01 -9.9642731018311681e-01 + -1.4240215208361706e+00 1.0216304632076731e+00 -1.2722174864303550e+00 + -1.7017560346302212e+00 1.1570540121079080e+00 -1.5428801213640781e+00 + -2.0065258788219373e+00 1.2546223271405745e+00 -1.7894151692275588e+00 + -2.3274939989628374e+00 1.2825524522740579e+00 -2.0013286446064225e+00 + -2.6433325963906160e+00 1.2140863589364350e+00 -2.1764970891578637e+00 + -2.9331678577552243e+00 1.0419051151934466e+00 -2.3201111591342940e+00 + -3.1882199373976774e+00 7.7758743904395011e-01 -2.4515417962858015e+00 + -3.4106863555275035e+00 4.4439813577174986e-01 -2.6038336036045107e+00 + -3.5969859175061218e+00 7.6647034754926124e-02 -2.8104229830227445e+00 + -3.7283615618338710e+00 -2.7395808878789574e-01 -3.1005760816005248e+00 + -3.7427559965303496e+00 -5.1580481798063726e-01 -3.4969097845456174e+00 + -3.5193121558465372e+00 -4.9648623331972624e-01 -3.9405148831296199e+00 + -3.0827673047377941e+00 -2.1013921317047810e-01 -4.2083912904596277e+00 + -2.9883457383332050e+00 -3.2918065381101347e-01 -4.5969197744472838e+00 + id 12001 + loc 1.2087194621562958e-01 7.5009590387344360e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4267928579481947e-01:4.2194292967184627e-01:9.2122034541106168e-01:4.2621089081488850e-01:1.2466546030657155e+00:3.5669680453211555e-01:1.9537755178295400e+00:2.9472493904453534e-01:2.5863278755151162e+00:3.3969141171471579e-01:3.0214448853457587e+00:4.4267485900196152e-01:3.5853339767030046e+00:3.4192896258983752e-01:3.9996856407056338e+00 + CVs 20 + 2.2112878617702689e-01 3.2423637394407789e-01 -2.8538086694848336e-02 + 4.6052423884692900e-01 6.2345598893582355e-01 -7.5815871956839170e-02 + 7.0768538231569200e-01 9.0471343979486973e-01 -1.2793724317048738e-01 + 9.5625711002997593e-01 1.1655916261039381e+00 -1.8720172096269405e-01 + 1.2040708535459501e+00 1.3989867279591364e+00 -2.6481796738436536e-01 + 1.4474797307373051e+00 1.5963021830055590e+00 -3.6924753691858464e-01 + 1.6807505429001264e+00 1.7488864457875808e+00 -5.0551618827896372e-01 + 1.8951245401606673e+00 1.8492600557883634e+00 -6.7396966746331644e-01 + 2.0791310183986278e+00 1.8910060390335270e+00 -8.6656228781451605e-01 + 2.2237358006967360e+00 1.8725716262480923e+00 -1.0653886752266362e+00 + 2.3275403718015681e+00 1.8009176479946629e+00 -1.2519773059970525e+00 + 2.3942868648483939e+00 1.6865227088202310e+00 -1.4196215112616668e+00 + 2.4260289684494114e+00 1.5345918642548400e+00 -1.5768408173809860e+00 + 2.4152146230855411e+00 1.3420975318263997e+00 -1.7421205098279220e+00 + 2.3368172459344456e+00 1.1153405547245101e+00 -1.9238500293822069e+00 + 2.1622634951770432e+00 8.9662265563348575e-01 -2.1002124856004643e+00 + 1.8931623448163548e+00 7.4808743910873354e-01 -2.2302408049428215e+00 + 1.5726728586599585e+00 7.0560915294854498e-01 -2.2896177001055364e+00 + 1.2073610832744366e+00 6.7527223012924620e-01 -2.3522150576425331e+00 + id 12002 + loc 7.7048689126968384e-01 1.3548448681831360e-01 1090 + blend 0.0000000000000000e+00 + interp 4.3794935086956777e-01:4.0877502775157282e-01:7.2136439956918763e-02:2.9116832686196248e-01:9.7054306973603699e-01:2.9799799167121521e-01:2.0002113674894879e+00:4.3794497137605909e-01:2.2434619947957182e+00:3.9556726908075396e-01:2.9999520179807959e+00:3.2476541253429914e-01:3.7925369770681403e+00 + CVs 20 + -3.1370430320575515e-02 4.3561739838680202e-01 -1.4942693998302714e-01 + -3.5344531031028525e-03 8.3366827429918811e-01 -2.4474975663797272e-01 + 6.1310426543614793e-02 1.2178577140736011e+00 -3.1026463866046916e-01 + 1.6182222980882199e-01 1.5908206166730343e+00 -3.4709279325625131e-01 + 3.0870354734763494e-01 1.9325292329897572e+00 -3.3913698304258560e-01 + 5.0362717633742471e-01 2.2156163013862740e+00 -2.7208477496046823e-01 + 7.3334051721175053e-01 2.4085411876172422e+00 -1.3901599644382867e-01 + 9.6851263880409189e-01 2.4892404603103997e+00 5.1017819605374437e-02 + 1.1806896058669385e+00 2.4588270823692042e+00 2.7178955351491330e-01 + 1.3644875336162627e+00 2.3379755457884839e+00 4.9164458714784942e-01 + 1.5309912322385257e+00 2.1468606826286938e+00 6.8633920510799284e-01 + 1.6863271272040752e+00 1.8978889627561255e+00 8.3504478337986443e-01 + 1.8304356213826003e+00 1.6051904331062110e+00 9.1419013187450782e-01 + 1.9628518266444281e+00 1.2925167867308964e+00 8.9757622302393192e-01 + 2.0778499097528016e+00 1.0028734613113484e+00 7.6466035834990842e-01 + 2.1738909279985386e+00 7.9366312914170167e-01 5.3836639395409858e-01 + 2.2666928416152179e+00 6.9534117685826824e-01 2.7256115805537851e-01 + 2.3558094084268371e+00 7.0142941674984471e-01 1.4929905087527506e-02 + 2.4396154797316374e+00 6.6288546771490253e-01 -2.4422768839682008e-01 + id 12003 + loc 6.2465894967317581e-02 6.9722980260848999e-01 1084 + blend 0.0000000000000000e+00 + interp 7.2720990949549313e-01:7.2720263739639823e-01:2.1133665213725572e-01:4.3042898292833981e-01:1.5747956860179293e+00:4.8170563705323188e-01:1.9951063300456968e+00:3.5543654895932902e-01:2.4565972465080881e+00:4.3776501938238149e-01:3.1981506008592406e+00:3.7891085722137396e-01:3.9731515290666568e+00 + CVs 20 + -2.6000368047364014e-01 3.1677602789330628e-01 4.8673671192433837e-01 + -4.9720528742122777e-01 5.5682644343474896e-01 8.6986365071394767e-01 + -7.1282722768964035e-01 7.7589795761016001e-01 1.2490724797407404e+00 + -9.1574711629538874e-01 9.9508546436495959e-01 1.6584279077788389e+00 + -1.1360031844882676e+00 1.2156521275581438e+00 2.0808954754807991e+00 + -1.4101016796123311e+00 1.4394705778270316e+00 2.4904812807393126e+00 + -1.7773402459919321e+00 1.6659539357519886e+00 2.8471532254964185e+00 + -2.2789068676639679e+00 1.8873012038433259e+00 3.0753910780596532e+00 + -2.8938017445758843e+00 2.0459166765218368e+00 3.0387511013352868e+00 + -3.4310656017946672e+00 2.0351035436728551e+00 2.7253728658548271e+00 + -3.7685171149971550e+00 1.8544345587171329e+00 2.3705453813117270e+00 + -3.9718635188619955e+00 1.5986789781416724e+00 2.1764568533118376e+00 + -4.1345794216321314e+00 1.2937615536726854e+00 2.1012080188712510e+00 + -4.2531785715070525e+00 7.7776314553477466e-01 1.9825105151456874e+00 + -4.2343590321894000e+00 -8.6123180082737782e-03 1.7120562784575299e+00 + -3.9954885718013067e+00 -8.8166698849110614e-01 1.1656595767043851e+00 + -3.5706983694087420e+00 -1.5376713408606208e+00 2.6838850355028587e-01 + -3.1538833909908948e+00 -1.7800318785410925e+00 -7.3941394120327653e-01 + -2.9639217428407596e+00 -1.9995507463399456e+00 -1.1820272583241072e+00 + id 12004 + loc 4.4584321975708008e-01 8.5959506034851074e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6587161203696642e-01:4.0571532974374036e-01:1.2467492074302344e-01:4.6586695332084604e-01:8.2414623902503337e-01:3.2529458970998992e-01:1.1107978157609453e+00:4.4319956003377081e-01:2.0441151896049639e+00:3.8681111427445769e-01:2.2192681709609685e+00:3.7627207381205924e-01:2.9580574936332829e+00:4.4439651780184980e-01:3.2965461388501938e+00:4.0527099296764307e-01:3.8848747545931208e+00 + CVs 20 + 1.2832680695900472e-01 3.2318837337025746e-01 -2.0437693221481079e-01 + 2.4911784997503367e-01 6.2951643879646191e-01 -4.3543521849321687e-01 + 3.6702153917347324e-01 9.0539092800075138e-01 -6.7862874694051478e-01 + 4.8044162433594861e-01 1.1385495010077218e+00 -9.2443673507575608e-01 + 5.8123405722495636e-01 1.3209437071458345e+00 -1.1632869219124635e+00 + 6.5705096916833095e-01 1.4505374801069881e+00 -1.3773154343543357e+00 + 6.9758273178482411e-01 1.5403498089809013e+00 -1.5547900494364297e+00 + 7.0382393502890206e-01 1.6153665652018858e+00 -1.7062946634478582e+00 + 6.9434502171202750e-01 1.6917330753430107e+00 -1.8586080869085992e+00 + 7.0078237227202966e-01 1.7626219707881166e+00 -2.0322343346705503e+00 + 7.5228444992098031e-01 1.8049506043156005e+00 -2.2292211996319762e+00 + 8.6626730113243766e-01 1.7926596911266874e+00 -2.4386109109978338e+00 + 1.0472421965668088e+00 1.7293615780808693e+00 -2.6385140295245231e+00 + 1.2951786795581062e+00 1.6703409037749946e+00 -2.7980987553084740e+00 + 1.6200448604487798e+00 1.6538346909378721e+00 -2.8978785351166598e+00 + 2.0302611515156337e+00 1.6208672579957759e+00 -2.9583404913876827e+00 + 2.4873298899470750e+00 1.4810562319827361e+00 -3.0424002058200745e+00 + 2.8685983486560129e+00 1.2655596901124793e+00 -3.2569359315039437e+00 + 2.8681860024585504e+00 1.2333650206145343e+00 -3.7251237566282351e+00 + id 12005 + loc 3.7217912077903748e-01 8.2576388120651245e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4974596519641674e-01:3.6912174276885534e-01:2.8332713262085241e-01:4.0647966023885257e-01:8.7860267182310525e-01:3.8916348582708732e-01:1.1122152680939219e+00:4.4974146773676482e-01:1.6750151411165530e+00:3.5508256795941173e-01:2.0049047335463825e+00:3.5795373458468149e-01:3.0002031576002093e+00:3.4568784882454950e-01:3.7125649006387098e+00 + CVs 20 + 1.3376893983343918e-01 2.7724527830371876e-01 2.3878366428348535e-02 + 2.7313926726192533e-01 5.5644299479086423e-01 5.2631176116636536e-02 + 4.2067019033942649e-01 8.4333336472780429e-01 8.1787008822382046e-02 + 5.8432856211528239e-01 1.1465991980022248e+00 1.0151552385417059e-01 + 7.7532034665173100e-01 1.4698720582102558e+00 9.4340713528887510e-02 + 1.0034828068197197e+00 1.8078908526687902e+00 3.8160160460906201e-02 + 1.2731648813724334e+00 2.1415798567188573e+00 -8.8522774799891790e-02 + 1.5780123433873772e+00 2.4416208022045609e+00 -2.9970679215749796e-01 + 1.9001503002454305e+00 2.6786666674703450e+00 -5.9821531002869965e-01 + 2.2149635095437241e+00 2.8280530297031166e+00 -9.7297282486079062e-01 + 2.5043128948815636e+00 2.8740582389828848e+00 -1.4016193038178248e+00 + 2.7617043458247759e+00 2.8077395963854532e+00 -1.8606384452043403e+00 + 2.9801218873844415e+00 2.6211947564352327e+00 -2.3224588255265881e+00 + 3.1437749766539502e+00 2.3155295687218400e+00 -2.7490791804212633e+00 + 3.2282405787932849e+00 1.9119957753255297e+00 -3.1195748061175506e+00 + 3.1929744758518335e+00 1.4545044007833290e+00 -3.4397951863978053e+00 + 3.0030647556278587e+00 1.0008712197761209e+00 -3.7109872239004082e+00 + 2.6588293346210485e+00 6.1288258146303154e-01 -3.9120725341562492e+00 + 2.2758306953629761e+00 3.4765066782543397e-01 -3.9826505280794362e+00 + id 12006 + loc 7.2539836168289185e-02 6.1785203218460083e-01 1068 + blend 0.0000000000000000e+00 + interp 5.2572903476958222e-01:3.8201345728405189e-01:8.8843479938929937e-02:4.4370040531734256e-01:4.8822431979892345e-01:5.2572377747923449e-01:1.0003139732394288e+00:3.9421831207020902e-01:1.5579077461093205e+00:4.7672956040731557e-01:2.0013363974006770e+00:3.3147421220779077e-01:2.6440205987362368e+00:4.0398283330802109e-01:3.0105750680587993e+00:3.6169241477647879e-01:3.6057277507299506e+00 + CVs 20 + 1.0610795480644018e-01 2.9744302062243005e-01 -1.7365030832023420e-01 + 1.7897390147331030e-01 5.8140393216914810e-01 -3.4483828347893575e-01 + 2.4884253799458886e-01 8.5825742579424902e-01 -5.2818423835128570e-01 + 3.3089859442624103e-01 1.1232459167640445e+00 -7.2462681401780538e-01 + 4.2872957354429647e-01 1.3740642203813445e+00 -9.2995509110136787e-01 + 5.4546035801377801e-01 1.6093362314362742e+00 -1.1411810050922269e+00 + 6.8443940913566792e-01 1.8306575096476814e+00 -1.3603662428554113e+00 + 8.4813370933690169e-01 2.0399639076964271e+00 -1.5963174160383145e+00 + 1.0331073469946634e+00 2.2324238925170716e+00 -1.8659198856942971e+00 + 1.2259506269974114e+00 2.3932832492565739e+00 -2.1881279100410271e+00 + 1.4069823540808792e+00 2.4989513949657649e+00 -2.5695432024573677e+00 + 1.5540278838602066e+00 2.5178930362866954e+00 -2.9984147803910473e+00 + 1.6512797477068835e+00 2.4240807523626025e+00 -3.4464328322034739e+00 + 1.6995061631269284e+00 2.2113518552831919e+00 -3.8777015477490808e+00 + 1.7136757094281956e+00 1.8931378796651266e+00 -4.2589703947394364e+00 + 1.7145155447550078e+00 1.4997975811210704e+00 -4.5607080626616874e+00 + 1.7132942207257233e+00 1.0704304933428852e+00 -4.7542494026369297e+00 + 1.7084818831020239e+00 6.2466441948641704e-01 -4.8172005928181987e+00 + 1.7204515771710618e+00 7.4453323002381500e-02 -4.7220956578626003e+00 + id 12007 + loc 5.7499271631240845e-01 1.9454570114612579e-01 1076 + blend 0.0000000000000000e+00 + interp 4.2422779536437288e-01:3.6429800566886317e-01:4.5129755634205415e-01:2.7353758316342086e-01:1.0247423312043373e+00:3.3206372377018789e-01:1.9625500666009901e+00:4.2422355308641924e-01:2.5659842068444094e+00:3.2569418100099334e-01:3.1239974050207815e+00:3.5061657050788364e-01:3.9597031408947450e+00 + CVs 20 + -2.0463398039847391e-01 3.7906870473972670e-01 1.3552023407614169e-01 + -3.9196314021137385e-01 7.5583858957439887e-01 3.0127568734381338e-01 + -5.6406007622193988e-01 1.1157568559042346e+00 4.9971274061736537e-01 + -7.1503814678496391e-01 1.4449044584504809e+00 7.3132034762530262e-01 + -8.4285187855986687e-01 1.7358319388726899e+00 9.9549346296024599e-01 + -9.5950364803795096e-01 1.9865304906969614e+00 1.2898419250307278e+00 + -1.0844576916287259e+00 2.1929531986568263e+00 1.6058526581166273e+00 + -1.2327234613087112e+00 2.3496438105760813e+00 1.9287944753420494e+00 + -1.4112103858259846e+00 2.4553297382119017e+00 2.2453184825291319e+00 + -1.6234691137536326e+00 2.5108492275567782e+00 2.5411301998345817e+00 + -1.8715096380138063e+00 2.5205888761159434e+00 2.7941627536172913e+00 + -2.1610361760845267e+00 2.5041065055597898e+00 2.9870795480927796e+00 + -2.4951103841878730e+00 2.4596309183572922e+00 3.1330318872876166e+00 + -2.8082109633605690e+00 2.3147226780070849e+00 3.2446308251209204e+00 + -3.0238076694184546e+00 2.0507532537631650e+00 3.2920927584494892e+00 + -3.2171119775391848e+00 1.7109690545634761e+00 3.2628403554439878e+00 + -3.5080137268928993e+00 1.2226578573527980e+00 3.1766487216702077e+00 + -3.5430308130733401e+00 6.5148251759339637e-01 3.0245642577911580e+00 + -3.1475527967184291e+00 7.1711207904151930e-01 2.8349904926543248e+00 + id 12008 + loc 1.6919715562835336e-03 1.1402048170566559e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3080591202695817e-01:3.1019743703253766e-01:9.8786469977614377e-01:3.2188881319579521e-01:1.5032426699360317e+00:4.1054215062404126e-01:1.9970951113522133e+00:2.7984740012545700e-01:2.5685171200512671e+00:4.3080160396783790e-01:3.1903233700728104e+00:3.1464358249597524e-01:3.9042146471327714e+00 + CVs 20 + -2.0985076441649189e-01 2.7345168653627139e-01 -1.9652628776970174e-01 + -4.0660418561787431e-01 5.3398655951087037e-01 -4.1499601444896306e-01 + -6.0640319668071641e-01 7.9086266681803963e-01 -6.4044416850798092e-01 + -8.2210693941968993e-01 1.0466117229346645e+00 -8.6179690890946503e-01 + -1.0646474024481556e+00 1.2986928231522730e+00 -1.0698777445053897e+00 + -1.3430203546109536e+00 1.5394498799898917e+00 -1.2539721701295332e+00 + -1.6608680618840066e+00 1.7558501779647901e+00 -1.4032549115187727e+00 + -2.0142126116023062e+00 1.9315189880607788e+00 -1.5095804101450874e+00 + -2.3919483946247659e+00 2.0504231532514621e+00 -1.5687413510266810e+00 + -2.7756370338723317e+00 2.1008279053431629e+00 -1.5802200046882962e+00 + -3.1413701551662707e+00 2.0787546337133800e+00 -1.5477381613208205e+00 + -3.4694994008452387e+00 1.9896257192484994e+00 -1.4789753821453173e+00 + -3.7531048659721797e+00 1.8453159979663072e+00 -1.3843663556179813e+00 + -3.9949928682110407e+00 1.6580686522598966e+00 -1.2760938421438741e+00 + -4.2009562443872479e+00 1.4372906654705004e+00 -1.1669909909491047e+00 + -4.3731647084904557e+00 1.1922576822427073e+00 -1.0697387076286293e+00 + -4.5081519673285637e+00 9.3130909939238582e-01 -9.9366101643510851e-01 + -4.6013477341339613e+00 6.4512988231895552e-01 -9.4561687518669046e-01 + -4.6430461090245698e+00 2.7207220894889683e-01 -9.4656240560771965e-01 + id 12009 + loc 1.2054771929979324e-01 5.1752430200576782e-01 403 + blend 0.0000000000000000e+00 + interp 3.9128072889818860e-01:3.7476241939418814e-01:8.0640630659144885e-01:3.9127681609089965e-01:1.2652302094308001e+00:3.8195735332586417e-01:2.0001300531319219e+00:3.8647667857316736e-01:2.6013327859687729e+00:2.8589313570902802e-01:3.0158646920149024e+00:2.6056403190379596e-01:3.9577640772075693e+00 + CVs 20 + -5.8810792347394170e-02 1.3391153679078158e-01 -6.8084204460195807e-02 + -1.1127505731189835e-01 2.6488483378068406e-01 -1.4468958907692026e-01 + -1.6810060266929952e-01 3.8494561932675242e-01 -2.2338168240738859e-01 + -2.3460597120375493e-01 4.8705515986857606e-01 -2.9985974198531995e-01 + -3.0928234202394561e-01 5.6866521931237657e-01 -3.7420146467003007e-01 + -3.8929607927743343e-01 6.2818401183933203e-01 -4.4750880677873200e-01 + -4.7189315740770077e-01 6.6521597394041998e-01 -5.2197812821385914e-01 + -5.5596625753281159e-01 6.8040584511423652e-01 -6.0069402946391615e-01 + -6.4220934535076701e-01 6.7514497324572087e-01 -6.8693793219336741e-01 + -7.3044015368640047e-01 6.5208642673233863e-01 -7.8324831500403891e-01 + -8.1946222253614598e-01 6.1521696199463560e-01 -8.9140680467501432e-01 + -9.1054335508853934e-01 5.6826573928178159e-01 -1.0122639857213602e+00 + -1.0085335408004645e+00 5.1371354774986921e-01 -1.1452609530923790e+00 + -1.1206701973944437e+00 4.5280264853817309e-01 -1.2879835125494157e+00 + -1.2567571680995329e+00 3.8394390151130620e-01 -1.4349081785453868e+00 + -1.4233957795526502e+00 3.0362302913644962e-01 -1.5755445806692692e+00 + -1.6117263999022708e+00 2.1313159954504124e-01 -1.6964980561599592e+00 + -1.8008733449860208e+00 1.1773596085391624e-01 -1.7873820714844622e+00 + -1.9619516734432432e+00 -5.4637434946096408e-02 -1.7873729862838383e+00 + id 12010 + loc 6.2187612056732178e-01 6.7430382966995239e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4398922835372251e-01:3.3851810220852618e-01:4.5185084685963395e-01:3.4120377134472268e-01:1.0001287951734841e+00:4.4398478846143902e-01:1.4206773200911573e+00:4.1472158947651844e-01:2.0206822092879642e+00:3.7646119285373419e-01:2.9589007412786499e+00:3.4518969659551613e-01:3.2221570769023198e+00:3.8358815251713613e-01:3.8501580739195127e+00 + CVs 20 + 1.6248451637785843e-01 3.7118453908054549e-01 -3.1379134039899625e-01 + 3.4900516768778256e-01 7.4335940397450417e-01 -6.3914869847112266e-01 + 5.5074382245433640e-01 1.1037722857433956e+00 -9.7533657278976860e-01 + 7.5884178227282928e-01 1.4381761012965431e+00 -1.3219207677906506e+00 + 9.6633525035057533e-01 1.7239871226207406e+00 -1.6791877586778454e+00 + 1.1704711630212699e+00 1.9320387118004563e+00 -2.0451566007794804e+00 + 1.3735722181471377e+00 2.0486055814082027e+00 -2.4130186810783258e+00 + 1.5809987330822806e+00 2.0755755245204703e+00 -2.7696433488439722e+00 + 1.7928676977692979e+00 2.0183045723589550e+00 -3.0986136074621449e+00 + 2.0063658200136678e+00 1.8953710429070947e+00 -3.4004476117061020e+00 + 2.2288117773053915e+00 1.7406874148013742e+00 -3.6978754873374799e+00 + 2.4719452442921224e+00 1.5876058373851665e+00 -4.0178343521124598e+00 + 2.7217921021631448e+00 1.4476506033410887e+00 -4.3736515933997708e+00 + 2.9336925768975219e+00 1.3046484989378826e+00 -4.7742761387229109e+00 + 3.0610886831983506e+00 1.1557725769598246e+00 -5.2331899433820910e+00 + 3.0695490470266091e+00 1.0573066473087251e+00 -5.7488171351169761e+00 + 2.9584046690391519e+00 1.0819898198007960e+00 -6.2702216311841497e+00 + 2.8138733011046639e+00 1.1950308699716667e+00 -6.7405131415954802e+00 + 2.8008411575014156e+00 1.2099804489262029e+00 -7.2121045974644886e+00 + id 12011 + loc 6.8530207872390747e-01 6.5290504693984985e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9753386641021798e-01:3.1320639801929379e-01:6.9170141999789325e-02:3.5425221695705733e-01:9.4912024694053232e-01:3.6277305163881096e-01:1.3421128727461007e+00:3.9752989107155390e-01:1.9841725816475995e+00:3.5291907593111949e-01:2.7744878465747052e+00:3.3386240691117480e-01:3.5473090399734821e+00 + CVs 20 + 8.5259110763460932e-02 3.0708440657298502e-01 -1.2850215588239650e-01 + 1.9228499824205694e-01 6.2946707882367581e-01 -2.4192026624763149e-01 + 3.1180378397986308e-01 9.5510365042646261e-01 -3.6304135437978124e-01 + 4.3874506738828117e-01 1.2749826283033012e+00 -5.0379121810726102e-01 + 5.8042829069396729e-01 1.5873688498083016e+00 -6.7148532589773047e-01 + 7.4770417919580989e-01 1.8797455786682655e+00 -8.9176127573984920e-01 + 9.4232059949025671e-01 2.1162201082364818e+00 -1.1871773243598982e+00 + 1.1566386148816361e+00 2.2664437320013571e+00 -1.5504755324489530e+00 + 1.3807442148889912e+00 2.3220230484346072e+00 -1.9550583947483298e+00 + 1.6038037271131464e+00 2.2886310178656393e+00 -2.3706379221272043e+00 + 1.8173462102461388e+00 2.1794325579086760e+00 -2.7730288036585029e+00 + 2.0150535782178514e+00 2.0081792512389969e+00 -3.1463073063359870e+00 + 2.1908091349479801e+00 1.7856632037270099e+00 -3.4800024560012575e+00 + 2.3391929967133254e+00 1.5214012906474894e+00 -3.7681669521941528e+00 + 2.4550564603542679e+00 1.2214279728859325e+00 -4.0183462359443318e+00 + 2.5249390146216504e+00 8.8593338399866894e-01 -4.2521255456537972e+00 + 2.5237951152657705e+00 5.1752697092072553e-01 -4.4898874745887731e+00 + 2.4277930241621735e+00 1.3861089521911152e-01 -4.7309124610172519e+00 + 2.3007585526758794e+00 -1.0031247781623009e-01 -4.8481904138523824e+00 + id 12012 + loc 7.4218648672103882e-01 4.3607962131500244e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8783109378500280e-01:3.8254725092647707e-01:4.0208844554414769e-01:2.6420752091973848e-01:1.0954024470968007e+00:3.1018261136791170e-01:1.9375083772625872e+00:3.2786086333763875e-01:2.4370770000288307e+00:3.8782721547406496e-01:2.9993402843058696e+00:3.8601118776802429e-01:3.5906547088429273e+00 + CVs 20 + -1.4520432676149475e-01 2.6496327272468195e-01 1.1424425365437761e-01 + -3.1212493216244241e-01 5.2643194119462711e-01 2.1939667556376322e-01 + -4.9859131479650542e-01 7.7675770452185489e-01 3.2833437456967807e-01 + -7.0245502988914277e-01 1.0101471641034123e+00 4.5297435888996090e-01 + -9.2471733141714429e-01 1.2231895332961393e+00 6.0162193160438482e-01 + -1.1656147088888884e+00 1.4113366232765454e+00 7.8415250568862815e-01 + -1.4233824056620386e+00 1.5669898450958066e+00 1.0122455880213892e+00 + -1.6923769153465749e+00 1.6775849557369071e+00 1.2989106583227263e+00 + -1.9589070170877318e+00 1.7237688531913762e+00 1.6537774891732477e+00 + -2.1998571433306302e+00 1.6814485768932110e+00 2.0720378131765869e+00 + -2.3900237853737782e+00 1.5317340507635180e+00 2.5301078310900555e+00 + -2.5126177297129919e+00 1.2722781607894917e+00 2.9855413124819212e+00 + -2.5753724574353334e+00 9.3049651433598024e-01 3.3888631062746146e+00 + -2.6099059659363619e+00 5.5666778100721959e-01 3.7174452877443223e+00 + -2.6452392251524821e+00 2.0350778255801472e-01 3.9902479256993386e+00 + -2.6991627819234507e+00 -5.9087074989058408e-02 4.2410152338674107e+00 + -2.7922840392407613e+00 -1.5601443580360774e-01 4.4599378756657142e+00 + -2.9316744981453264e+00 -1.1181530684039132e-01 4.5884341110872642e+00 + -3.0271827865132566e+00 -9.6460019401762853e-02 4.8225488167991344e+00 + id 12013 + loc 8.5926872491836548e-01 9.6390587091445923e-01 403 + blend 0.0000000000000000e+00 + interp 3.8697211766714157e-01:2.7900666199591745e-01:1.0511904373962888e-01:3.6586115753511778e-01:9.9858718435584060e-01:3.0111878951611992e-01:1.9564889415177436e+00:3.0918259387338815e-01:2.8804876564050765e+00:3.8696824794596490e-01:3.3305888782417146e+00 + CVs 20 + -1.0737447443348216e-01 2.8899614448406698e-02 -3.0630830279990952e-02 + -2.1066350530297873e-01 6.7667499464528685e-02 -5.6299342531853452e-02 + -3.1934817337413263e-01 1.1019391165331383e-01 -8.2648299060807340e-02 + -4.3993975705365440e-01 1.5165742617351116e-01 -1.1304706441704483e-01 + -5.7273300521453518e-01 1.9027917133007205e-01 -1.4582239355915003e-01 + -7.1751973589424767e-01 2.2435494904996070e-01 -1.7844128580042920e-01 + -8.7345775907486067e-01 2.5233408254706380e-01 -2.0772731578959480e-01 + -1.0389280984532336e+00 2.7288657550188244e-01 -2.3044109843470409e-01 + -1.2116660064514837e+00 2.8507350363118072e-01 -2.4359622514788384e-01 + -1.3891254409022082e+00 2.8847514253246864e-01 -2.4451847950387368e-01 + -1.5688067460777773e+00 2.8301945484627467e-01 -2.3094274394691153e-01 + -1.7479352450413312e+00 2.6836545908900156e-01 -2.0153660578858706e-01 + -1.9235059167111528e+00 2.4382249576305326e-01 -1.5660893751338142e-01 + -2.0951393731668775e+00 2.0935699390948737e-01 -9.5873961611619901e-02 + -2.2683881886257407e+00 1.6574445602212595e-01 -1.1772303837959186e-02 + -2.4496249999686337e+00 1.1622892700297949e-01 1.1291778599905383e-01 + -2.6321705178868173e+00 7.3199084804034253e-02 2.9083656077791187e-01 + -2.7988622188902790e+00 5.2239033792082390e-02 5.1349669201611747e-01 + -2.8927921547715991e+00 2.0573673270491311e-02 5.8346479234400195e-01 + id 12014 + loc 1.3279782608151436e-02 3.0836619436740875e-02 1085 + blend 0.0000000000000000e+00 + interp 7.4673538791667027e-01:5.5481450673940880e-01:2.5299754248231721e-02:4.5194083241330463e-01:5.2224630997050125e-01:6.1895117518585208e-01:9.3754986396533868e-01:7.4672792056279114e-01:1.0180260855861281e+00:2.7830621799501010e-01:2.9820479252648791e+00:3.4116074526329671e-01:3.4856974736417570e+00 + CVs 20 + 5.0036292416962158e-01 3.9371556472163544e-01 3.3656827543181062e-01 + 8.3310729497532354e-01 7.1630929988205239e-01 6.7022177932853300e-01 + 1.0906590755691794e+00 9.9809956038672654e-01 1.0329974649524378e+00 + 1.2997759994027633e+00 1.2487366965599804e+00 1.4396427071460656e+00 + 1.4459946009135951e+00 1.4544054856249680e+00 1.8781124307944468e+00 + 1.5212701984979264e+00 1.6023869411859526e+00 2.3300554897331862e+00 + 1.5246039028489575e+00 1.6824532374744829e+00 2.7733330309959388e+00 + 1.4639166193067581e+00 1.6897579006875474e+00 3.1847799208678600e+00 + 1.3578281699666759e+00 1.6269047568867414e+00 3.5439698798351857e+00 + 1.2350011171335524e+00 1.5039224422019462e+00 3.8393124888238996e+00 + 1.1241898051216930e+00 1.3371992805715882e+00 4.0731207874251805e+00 + 1.0434643596335083e+00 1.1445397874906114e+00 4.2551396840757816e+00 + 1.0012737272642820e+00 9.4452025631374781e-01 4.3938122923662162e+00 + 9.9766244400727433e-01 7.5834755952546273e-01 4.4939303500735361e+00 + 1.0191442513329609e+00 5.9979190590934317e-01 4.5603630606514018e+00 + 1.0527306262755012e+00 4.4301150775596693e-01 4.6076973109159090e+00 + 1.1098961055379026e+00 2.4552406755152756e-01 4.6528116747729600e+00 + 1.2116771274829197e+00 3.6625383493499308e-03 4.7288725711189814e+00 + 1.4409170940306506e+00 -2.5140949939151447e-01 4.9676950770248833e+00 + id 12015 + loc 6.4923834800720215e-01 7.2504423558712006e-02 1048 + blend 0.0000000000000000e+00 + interp 4.9317392856433545e-01:2.7287285282434631e-01:1.6239191554687449e-02:3.1820080241557930e-01:8.7561280091687044e-01:2.8230605123452396e-01:1.9984807251402212e+00:4.9316899682504983e-01:2.9067456212804448e+00:4.5201864141837184e-01:3.0003203276625081e+00:3.1383544893376475e-01:3.3641823464141809e+00 + CVs 20 + 4.0535209779173631e-03 5.4276447075113377e-01 3.5955425767891025e-01 + -5.3358569199329742e-02 1.0871047212599469e+00 6.6883871092993075e-01 + -2.3254059643116304e-01 1.6156130164022262e+00 9.0072949512375045e-01 + -5.6281864446216801e-01 2.0785140740879018e+00 1.0457330317031912e+00 + -1.0362423939338128e+00 2.4074875252134342e+00 1.1434203810109635e+00 + -1.5941283833070652e+00 2.5431797621638879e+00 1.3225508482354029e+00 + -2.0684104911654297e+00 2.4316610669506318e+00 1.6050656545546071e+00 + -2.3706024280132194e+00 2.1424686208308898e+00 1.8725790565926794e+00 + -2.5579640172317477e+00 1.7922449350246696e+00 2.0666070334493689e+00 + -2.7025309819080108e+00 1.4462490264570182e+00 2.1986739628982561e+00 + -2.8367536276700975e+00 1.1484740219762408e+00 2.2887264211144087e+00 + -2.9685146558272586e+00 9.0270374351705596e-01 2.3549277116023695e+00 + -3.1336915661578004e+00 6.5619679775788720e-01 2.4172164931824036e+00 + -3.3628279181806553e+00 4.2882233137837406e-01 2.5572498740254437e+00 + -3.5849530691773608e+00 3.3748007074437325e-01 2.7978901925593895e+00 + -3.7348503970212414e+00 4.3476352908985538e-01 3.0942003692814373e+00 + -3.7524120907850564e+00 7.3724692228517175e-01 3.4621083701394237e+00 + -3.7103914304870766e+00 1.0488261966185113e+00 3.9646454945160454e+00 + -3.8337964012712238e+00 9.8345418411142760e-01 4.2748921342033368e+00 + id 12016 + loc 7.8470814228057861e-01 6.0803074389696121e-02 1075 + blend 0.0000000000000000e+00 + interp 4.5877783963576207e-01:3.1242736069266730e-01:5.8495319158525017e-02:2.8867881169988302e-01:7.9014397056606178e-01:4.5877325185736573e-01:1.6871016633527909e+00:3.9367972981391125e-01:2.0470898704563183e+00:4.3477729530010029e-01:2.7138245840347617e+00:2.9667041789083237e-01:3.0595791228111269e+00 + CVs 20 + 3.7078911679803400e-02 3.0658431617182069e-01 1.6613279579334195e-01 + 1.0242609875350936e-01 6.1230275765832121e-01 2.9751438520549295e-01 + 1.8529110641853186e-01 9.1848626800873112e-01 3.8405508314412717e-01 + 2.6161190037913523e-01 1.2530204440087229e+00 4.5913771645518675e-01 + 2.8331761295329871e-01 1.6301481712708055e+00 5.7127374980708356e-01 + 1.9538673143199303e-01 2.0213692098683795e+00 7.4880119383566424e-01 + -3.2670693468884737e-02 2.3660945080095512e+00 9.8004836417412666e-01 + -3.7982823161951296e-01 2.6062262866851738e+00 1.2062216078553045e+00 + -7.8985701435086120e-01 2.7348147785581309e+00 1.3599437775880654e+00 + -1.2218468319704507e+00 2.7804855113156979e+00 1.4055967706231698e+00 + -1.6715792197812467e+00 2.7634655391577390e+00 1.3365455189432205e+00 + -2.1376065581430055e+00 2.6808119264404677e+00 1.1407838678943980e+00 + -2.5428538153398010e+00 2.5461240332880428e+00 8.1671792767088125e-01 + -2.7757096094216043e+00 2.4328089050123300e+00 4.4739857001965810e-01 + -2.8126372852995973e+00 2.4063334434028043e+00 1.5154695823407627e-01 + -2.6008646121495724e+00 2.4854258853846369e+00 3.9044734796211879e-02 + -1.8956985402187230e+00 2.5220324453287146e+00 1.1205834972630555e-01 + -1.1282077815304423e+00 2.2533193401918310e+00 1.8182381077488513e-02 + -1.3500811893794473e+00 2.4502487256932675e+00 -5.4758665368656340e-02 + id 12017 + loc 5.8529067039489746e-01 7.2587686777114868e-01 411 + blend 0.0000000000000000e+00 + interp 3.5943236668164102e-01:2.5317252143036756e-01:1.6141048782307188e-01:2.8565324367547529e-01:9.9179440389288720e-01:3.5942877235797421e-01:1.8541906073186465e+00:2.9502699735896698e-01:2.7656964498723275e+00:3.4133024978185383e-01:3.3325484323492476e+00 + CVs 20 + 7.8259209353763459e-01 2.9094619699540641e-01 -4.7914478953502010e-02 + 1.2953709705985776e+00 4.5587196282588777e-01 -6.6000999528260954e-02 + 1.7292197625005852e+00 5.5970995070374785e-01 -7.2979338143967162e-02 + 2.1783500162815863e+00 6.3883794549755646e-01 -7.4280362346777609e-02 + 2.6470881744240753e+00 6.8713263918782352e-01 -6.7880340339124656e-02 + 3.1381508284572042e+00 6.9693708069963300e-01 -5.0969294448371449e-02 + 3.6478941338950888e+00 6.5378443548922571e-01 -2.2201106371418977e-02 + 4.1649065449051754e+00 5.4461800681570760e-01 2.0494672998880081e-02 + 4.6701786719069620e+00 3.5834769292107094e-01 8.3355511111443570e-02 + 5.1354666196251095e+00 9.3364619280995376e-02 1.6608709413537581e-01 + 5.5221140493558405e+00 -2.3551079611507086e-01 2.4960122687653702e-01 + 5.7973042303301821e+00 -6.0025469197773074e-01 3.1618002138428591e-01 + 5.9571151523306654e+00 -9.7204852985599044e-01 3.6886395712448256e-01 + 6.0225894012901762e+00 -1.3287771403976785e+00 4.2132417605207717e-01 + 6.0222708499499529e+00 -1.6517091733596767e+00 4.7864501729701192e-01 + 5.9835923119433136e+00 -1.9247625455382880e+00 5.3371910645854204e-01 + 5.9265418076198415e+00 -2.1485875633193716e+00 5.8235652155717843e-01 + 5.8505947430568082e+00 -2.3659467824086846e+00 6.3595218079125237e-01 + 5.6456362007487506e+00 -2.7612553944240554e+00 6.7868738112569837e-01 + id 12018 + loc 7.6618027687072754e-01 3.8027906417846680e-01 1053 + blend 0.0000000000000000e+00 + interp 4.8775253636911958e-01:3.1764178842859292e-01:8.9579116666901859e-01:2.9906233135945981e-01:1.8814874070627008e+00:3.0881927725584418e-01:2.3347512735489548e+00:4.2353003761079633e-01:2.9260238796035223e+00:4.8774765884375593e-01:3.0686381165393928e+00:3.1015096904353473e-01:3.9392811165550490e+00 + CVs 20 + 1.5299802099011256e-01 3.9152580732741948e-01 -2.0133767764047944e-01 + 3.2377289263914655e-01 7.8004751114364623e-01 -3.9715924570303751e-01 + 5.0906804541592909e-01 1.1684380210596108e+00 -6.0476606596356342e-01 + 7.1824479774884220e-01 1.5476384403075274e+00 -8.3258671424110042e-01 + 9.6915023661050614e-01 1.8978245089579020e+00 -1.0806263361668313e+00 + 1.2809379301808876e+00 2.1938567836962699e+00 -1.3444559854923113e+00 + 1.6708273253174779e+00 2.4030886123786868e+00 -1.6103732598281173e+00 + 2.1436590658492531e+00 2.4887610830715770e+00 -1.8509515830870231e+00 + 2.6787678958381620e+00 2.4128419858782850e+00 -2.0284325586169412e+00 + 3.2202806402584105e+00 2.1374781993350735e+00 -2.1037285530722682e+00 + 3.6591237624815833e+00 1.6559128979727731e+00 -2.0515590541512827e+00 + 3.8815104147150636e+00 1.0467407969348332e+00 -1.8928819142638433e+00 + 3.8641813558095599e+00 4.2731109824177294e-01 -1.6700653681210875e+00 + 3.6709724629323786e+00 -1.1524566804930492e-01 -1.3951284210593322e+00 + 3.3820425578476732e+00 -5.5202252331391732e-01 -1.0343912635973569e+00 + 3.0497485211292492e+00 -8.5845806499979771e-01 -5.3158314080128188e-01 + 2.7270232369433662e+00 -9.4872655719003218e-01 1.1972718313532804e-01 + 2.4577268240558183e+00 -7.8404727912189931e-01 7.5548101946451873e-01 + 2.1894298558144896e+00 -6.2042381305809224e-01 1.1043174815371366e+00 + id 12019 + loc 3.8350352644920349e-01 7.0591740310192108e-02 397 + blend 0.0000000000000000e+00 + interp 4.1423482384898702e-01:3.5914428005723331e-01:7.7760196370846302e-07:3.9736487592190878e-01:3.6902141223798968e-01:3.4102495728285664e-01:9.5990829494228780e-01:3.6238607470536560e-01:1.2601383563302444e+00:4.1423068150074854e-01:1.8643991288478290e+00:3.2584679916996273e-01:2.4394111398001757e+00:2.9483655677917175e-01:3.2897763008450083e+00 + CVs 20 + -2.5918405001649258e-01 2.2392527467986917e-01 -1.1300274616051174e+00 + -4.6839815976221943e-01 2.0712826885831848e-01 -1.8875269146404894e+00 + -6.5722704618714534e-01 1.0812851340460122e-01 -2.5544638209771802e+00 + -8.3133516120771955e-01 -2.3590614172986024e-02 -3.2231779434979861e+00 + -9.8149738445149359e-01 -1.8887096217211452e-01 -3.8803931870889143e+00 + -1.1071460912946145e+00 -3.8977415479448152e-01 -4.5166444516105866e+00 + -1.2128856347168928e+00 -6.3161856595515453e-01 -5.1223437378617689e+00 + -1.3035298342363286e+00 -9.2300009041411990e-01 -5.6857258732628058e+00 + -1.3874638275941169e+00 -1.2685761592084464e+00 -6.1979511420722622e+00 + -1.4830790889121563e+00 -1.6607752965883347e+00 -6.6580382717106232e+00 + -1.6053300825026084e+00 -2.0911681048436215e+00 -7.0653658013314828e+00 + -1.7563186766306105e+00 -2.5452842989190381e+00 -7.4176405927139815e+00 + -1.9290867740403623e+00 -3.0035645129108430e+00 -7.7177792617931358e+00 + -2.1200647654366902e+00 -3.4519135274540691e+00 -7.9726413373016189e+00 + -2.3260965332278536e+00 -3.8787995927055174e+00 -8.1836237721940677e+00 + -2.5360572515497690e+00 -4.2740374902084621e+00 -8.3493458276555277e+00 + -2.7388309347883588e+00 -4.6340391133194476e+00 -8.4724556142230067e+00 + -2.9308690441712693e+00 -4.9559864420248632e+00 -8.5616507057398454e+00 + -3.1045745582480198e+00 -5.1872687869878789e+00 -8.6416703183104726e+00 + id 12020 + loc 4.1731834411621094e-01 1.7220325767993927e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4299338179130582e-01:3.0102790687195219e-01:1.5698237739025800e-01:3.8324156859953734e-01:1.0422811720828167e+00:4.4298895185748793e-01:1.7126850057263641e+00:3.8042664388327108e-01:2.0393925981204948e+00:4.2551853351113739e-01:2.5107038272182103e+00:3.8702048751308882e-01:2.9770023739850870e+00:3.6550530556197036e-01:3.8202313223105882e+00 + CVs 20 + 4.3287192944725067e-01 4.0637518155334462e-01 1.4183201424980774e-01 + 8.0969203942684864e-01 7.4728615698697820e-01 2.2938229145545580e-01 + 1.1843915420423812e+00 1.0713211644161247e+00 2.7441189455327408e-01 + 1.5558041803456986e+00 1.4684513668422099e+00 3.8286559705381673e-01 + 1.8233602950241377e+00 1.9629572959858539e+00 6.6774953380521229e-01 + 1.8233500481571148e+00 2.4685701892796179e+00 1.1723843565601761e+00 + 1.4043990467512772e+00 2.8159113177088697e+00 1.7755675521623520e+00 + 5.9404252979261218e-01 2.8706880557455250e+00 2.1359623635052847e+00 + -2.4792793137531022e-01 2.7004852433890241e+00 2.0213338863281440e+00 + -8.6000487936003434e-01 2.4662346532411075e+00 1.6269191704023294e+00 + -1.2869342137256221e+00 2.1783528397355703e+00 1.1083824900281356e+00 + -1.5340577446287336e+00 1.7897324047184902e+00 4.7621349523178236e-01 + -1.5858258526018851e+00 1.3432705489602068e+00 -1.5410492936607934e-01 + -1.6220884436265508e+00 9.6274792554107169e-01 -5.9463967747307134e-01 + -1.8386616038981862e+00 7.5407008414369925e-01 -7.8050078692749381e-01 + -2.2111945093879766e+00 8.9465499535669812e-01 -6.7486084575383387e-01 + -2.3305736156293508e+00 1.6670948313911107e+00 -1.1024200625815843e-01 + -1.7008787659698643e+00 2.3994199364311917e+00 5.7682892213017500e-01 + -1.9252135547109666e+00 2.5284878781043201e+00 5.9490554793612160e-01 + id 12021 + loc 4.0926057100296021e-01 5.6438410282135010e-01 1054 + blend 0.0000000000000000e+00 + interp 2.9648041005826248e-01:2.9131819436323964e-01:9.5731104893601926e-02:2.9647744525416192e-01:9.8463861491877547e-01:2.7932804577905773e-01:1.9557678936145484e+00:2.7281781488082135e-01:2.3881500665015194e+00:2.2859070968413264e-01:3.0313500613231446e+00 + CVs 20 + 2.0186848158862647e-01 4.1373720128258712e-01 -6.6176520943098116e-03 + 3.5555717191854774e-01 8.1904429447350524e-01 4.7335526138372885e-02 + 4.5278046612279876e-01 1.2411842744342105e+00 1.7079734635682597e-01 + 5.6348609535114269e-01 1.7130558138374918e+00 3.7031144461775956e-01 + 8.2898988484338487e-01 2.1920489786808135e+00 6.2565278598964802e-01 + 1.3227693602050481e+00 2.5494695736268063e+00 8.7556098568794227e-01 + 1.9730702984349322e+00 2.6710961451927133e+00 1.0636279388407668e+00 + 2.6247028800247865e+00 2.5329903864950234e+00 1.1867386041980772e+00 + 3.1526289409006871e+00 2.2158251902078430e+00 1.2973271440852878e+00 + 3.5046367904169413e+00 1.8784129150042819e+00 1.4538466740858393e+00 + 3.7230267465207807e+00 1.6750389498513520e+00 1.6634811908073246e+00 + 3.9316218374298648e+00 1.6102697669728490e+00 1.8808642590175810e+00 + 4.2661906411752026e+00 1.6486705428598731e+00 2.0290526332751315e+00 + 4.7281537515786924e+00 1.7923975224180735e+00 2.0062835733799980e+00 + 5.2561240716048054e+00 1.9584149257952292e+00 1.8427257172304190e+00 + 5.8844656785414591e+00 2.0355163502924385e+00 1.6137151858270251e+00 + 6.6175640826372444e+00 1.8534102443111262e+00 1.4772700324874055e+00 + 7.2190226458460360e+00 1.4322823310636419e+00 1.5740534926383216e+00 + 7.5687899482141434e+00 1.2902921715049100e+00 1.5296101750653865e+00 + id 12022 + loc 4.6746248006820679e-01 4.9914652109146118e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8273353604607760e-01:3.2666002605841776e-01:5.7743345838564508e-01:4.8272870871071716e-01:1.0690741721133077e+00:3.8595347690987297e-01:1.6214262651457760e+00:3.2838876303823605e-01:2.0462539449963355e+00:3.3805330761364244e-01:3.0151987929043242e+00:3.5786088499598478e-01:3.5714039253030121e+00:4.3650669115947321e-01:3.9832512080429603e+00 + CVs 20 + -1.2743823225119685e-01 3.0259014163227743e-01 -1.2820196573470988e-01 + -2.6441395785543231e-01 5.9700460630900731e-01 -2.7897282457520284e-01 + -4.2110048920475202e-01 8.7588085159385121e-01 -4.2607556617931430e-01 + -6.0207281847292127e-01 1.1312636276738606e+00 -5.5798394106032578e-01 + -8.0769184762995627e-01 1.3552596153600578e+00 -6.7610506475034615e-01 + -1.0356651296785175e+00 1.5400620709493720e+00 -7.8562570150169064e-01 + -1.2803110121263719e+00 1.6773436231813248e+00 -8.9275739882852290e-01 + -1.5327848310181911e+00 1.7603852883474718e+00 -9.9877243225796652e-01 + -1.7833718022723977e+00 1.7872993171514371e+00 -1.0988517171908900e+00 + -2.0245888529977254e+00 1.7610203445290615e+00 -1.1867996191580681e+00 + -2.2496410512240619e+00 1.6874257442382432e+00 -1.2575903726412467e+00 + -2.4501274509772748e+00 1.5747751081479344e+00 -1.3067369479659192e+00 + -2.6208158034877411e+00 1.4314625893850774e+00 -1.3308164131942297e+00 + -2.7652415883329136e+00 1.2620105650873703e+00 -1.3270133702740039e+00 + -2.8917423382010026e+00 1.0733194885215736e+00 -1.2903553347299590e+00 + -3.0076535940523597e+00 8.8177113901365167e-01 -1.2124905580374079e+00 + -3.1161908523021999e+00 7.0793117158161512e-01 -1.0888816470626812e+00 + -3.2214119701623676e+00 5.6374122402743221e-01 -9.1583364329288763e-01 + -3.3633912517294116e+00 4.2468020171748355e-01 -6.2698459765582437e-01 + id 12023 + loc 3.9777663350105286e-01 1.7220325767993927e-01 1085 + blend 0.0000000000000000e+00 + interp 5.4941399370155330e-01:5.4940849956161630e-01:3.8300363779748425e-01:3.5719872041289519e-01:1.0337084389297031e+00:4.0741188383410309e-01:1.7313485731608242e+00:3.6369556945468873e-01:2.0533173331645127e+00:3.6441982267090772e-01:2.9655327938897247e+00:3.3468889931820500e-01:3.8349852730108522e+00 + CVs 20 + 3.8643137426855145e-01 4.0804013157847935e-01 2.7363976541670576e-01 + 6.6442820792900115e-01 7.6844632863855411e-01 5.4287348783257805e-01 + 8.7896665860856160e-01 1.0964482357395788e+00 8.4286573623000471e-01 + 1.0290005640744915e+00 1.3954648064728583e+00 1.1952583538413386e+00 + 1.0903157725830608e+00 1.6495961574009650e+00 1.5939059449157740e+00 + 1.0494498474255198e+00 1.8437017650702412e+00 2.0165976367726008e+00 + 9.0685548059951393e-01 1.9688976600392769e+00 2.4323539752819330e+00 + 6.7556247611310016e-01 2.0242930777290740e+00 2.8109100147527952e+00 + 3.7793316340182859e-01 2.0139883616213154e+00 3.1327159590937907e+00 + 3.8917767797528757e-02 1.9409003456249381e+00 3.3988597466732986e+00 + -3.2094502909933231e-01 1.7985379533548440e+00 3.6272174094047624e+00 + -6.8125398700514461e-01 1.5695386631776402e+00 3.8350059445822771e+00 + -1.0143991921043585e+00 1.2375350519107380e+00 4.0294185900155988e+00 + -1.2851325354623322e+00 7.9130227860710600e-01 4.2197210974408588e+00 + -1.4396711282562409e+00 2.2869849057175295e-01 4.4255742360227295e+00 + -1.4228220931328828e+00 -3.9906138759578591e-01 4.6696188698999652e+00 + -1.2259308535660258e+00 -1.0035811711892486e+00 4.9891615012659676e+00 + -8.9375320349871601e-01 -1.5112630298740053e+00 5.3867283013664187e+00 + -6.7400735986588578e-01 -1.9269759629714103e+00 5.6098917033448199e+00 + id 12024 + loc 2.7008208632469177e-01 5.1066398620605469e-01 1053 + blend 0.0000000000000000e+00 + interp 6.5846331672109948e-01:2.4815917154105202e-01:5.1274488125427287e-01:6.5845673208793232e-01:2.2285598448518877e+00:3.3367919547584796e-01:2.3999688266660479e+00:2.7513136653494430e-01:3.0268108769929922e+00:3.6199455816789189e-01:3.9050055082989297e+00 + CVs 20 + -7.5699975921144663e-02 4.7278511164258680e-01 3.8032848310622325e-01 + -2.1640931907713989e-01 8.6738305924879955e-01 6.9114038585154902e-01 + -3.9492242628301660e-01 1.2180663442193318e+00 9.9754955756882535e-01 + -6.0730866348494905e-01 1.5264481679533213e+00 1.3222652240423618e+00 + -8.5957351879744837e-01 1.7715565489587100e+00 1.6578020760029686e+00 + -1.1514802032702480e+00 1.9290880189913850e+00 1.9880295659887590e+00 + -1.4737244696711913e+00 1.9773711286608879e+00 2.2895439390639583e+00 + -1.8053872423352186e+00 1.9048672738670427e+00 2.5334027409200117e+00 + -2.1030285322437612e+00 1.7128033073324958e+00 2.6894031638251841e+00 + -2.2873935874007834e+00 1.4293112934180372e+00 2.7430921443297258e+00 + -2.2938532959708473e+00 1.1257273041831350e+00 2.7246454591483902e+00 + -2.1552013108954502e+00 8.5712773704589384e-01 2.6923162703848473e+00 + -1.9440050300541669e+00 5.9675999905442878e-01 2.6487278922890378e+00 + -1.6937132095358260e+00 2.7344808800076059e-01 2.5143169299347505e+00 + -1.4163830986642432e+00 -9.2027398196424137e-02 2.1873931317555817e+00 + -1.1506181973410432e+00 -3.3192606895529159e-01 1.6263604637163003e+00 + -9.5205623964408848e-01 -2.4949920750134166e-01 9.3384963435185764e-01 + -8.5345470804799639e-01 5.5135475354598673e-02 3.5856510532460961e-01 + -7.8677333472431443e-01 1.1892049452027789e-01 -4.3602043644758726e-03 + id 12025 + loc 1.5698434412479401e-01 9.3128985166549683e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3754906695856066e-01:3.3464270825682824e-01:4.9724820595939523e-02:3.4619608383652989e-01:7.7984039383062131e-01:3.1606829027685424e-01:1.2492253568184977e+00:4.0436370636493058e-01:1.8428872390287760e+00:3.0052612555542052e-01:2.9136063826052059e+00:4.3754469146789110e-01:3.4359350179014578e+00 + CVs 20 + 2.7736950804825511e-01 3.5735985409833765e-01 -2.1120125096611383e-01 + 5.6130397290925560e-01 7.2567733009407931e-01 -4.5333509436833586e-01 + 8.6159815232309334e-01 1.0941552888037789e+00 -7.0958904089646779e-01 + 1.1798117591484583e+00 1.4494108977429208e+00 -9.7169994408325699e-01 + 1.5018838055497044e+00 1.7716360215344034e+00 -1.2489936349055093e+00 + 1.7952346118464284e+00 2.0286419857043931e+00 -1.5647862307257825e+00 + 2.0243625839188422e+00 2.1756384439176730e+00 -1.9257178975394238e+00 + 2.1581571658841190e+00 2.1604131409703955e+00 -2.2872867824385326e+00 + 2.1906559009501891e+00 1.9885199299969369e+00 -2.5619961908077737e+00 + 2.1732365122132351e+00 1.7472364733792882e+00 -2.7298208082727133e+00 + 2.1566376773994724e+00 1.4837210196484869e+00 -2.8479601601185340e+00 + 2.1696414881238550e+00 1.1925440042443598e+00 -2.9684320668810775e+00 + 2.2279997841697576e+00 8.7374660020053463e-01 -3.1169833000042644e+00 + 2.3317322995315379e+00 5.5045101253914686e-01 -3.3102396661437297e+00 + 2.4740883731683647e+00 2.5259887943584003e-01 -3.5646193518832745e+00 + 2.6448738448409066e+00 1.5236475729057952e-02 -3.8816747257788546e+00 + 2.8360619649619574e+00 -1.3418113918537217e-01 -4.2660141046651390e+00 + 3.0123491283793160e+00 -1.4412277817631336e-01 -4.6554944347153091e+00 + 3.0098063368918999e+00 1.5288492718310565e-03 -4.7291425768473498e+00 + id 12026 + loc 2.1511852741241455e-01 1.3713808357715607e-01 384 + blend 0.0000000000000000e+00 + interp 4.9177959707263685e-01:4.1529391810036614e-01:4.6872019624765948e-02:3.5422290036313703e-01:7.3956138403731631e-01:3.1767823157309699e-01:1.3020194896355466e+00:3.8140322252938602e-01:2.0007084999519336e+00:3.5780550733015987e-01:2.9797671909239076e+00:4.7938615666454365e-01:3.2391245367953347e+00:4.9177467927666613e-01:3.8127475745167727e+00 + CVs 20 + -4.8172180685989907e-01 1.9575148806190573e-01 -1.0970223245303763e+00 + -8.4946359687136985e-01 1.9729157521633323e-01 -1.7661778198290723e+00 + -1.1903384925440972e+00 1.2811990718260360e-01 -2.3321025053711324e+00 + -1.5227137215573792e+00 4.6011713698078716e-02 -2.9064749679312114e+00 + -1.8354686271691867e+00 -3.7714442086964173e-02 -3.4726812854945219e+00 + -2.1237964684596662e+00 -1.1360892471638012e-01 -4.0192256202975862e+00 + -2.3902830227231804e+00 -1.8063584197277494e-01 -4.5426813906719685e+00 + -2.6494519032694832e+00 -2.3791949540600399e-01 -5.0484258731888447e+00 + -2.9168506829245828e+00 -2.8382439735621501e-01 -5.5458304597735726e+00 + -3.2005745205326024e+00 -3.3709515944538482e-01 -6.0557087860416230e+00 + -3.5061243392079202e+00 -4.3758483262269521e-01 -6.5932356797158942e+00 + -3.8494857425381137e+00 -6.3307674280159798e-01 -7.1342599619997857e+00 + -4.2409308351137476e+00 -9.5666874730502149e-01 -7.6304091407342147e+00 + -4.6730457281962732e+00 -1.4201571725295472e+00 -8.0350452128436167e+00 + -5.1325692902706717e+00 -2.0133549987640311e+00 -8.3097643337773857e+00 + -5.6101696486408414e+00 -2.7070742614496570e+00 -8.4257458669724095e+00 + -6.0817442949989893e+00 -3.4600628167015897e+00 -8.3668519249919751e+00 + -6.4972608919082111e+00 -4.2190454703931337e+00 -8.1398522860252900e+00 + -6.7778172305297737e+00 -4.8682137934902157e+00 -7.7898687192456988e+00 + id 12027 + loc 9.2415177822113037e-01 7.3308360576629639e-01 1048 + blend 0.0000000000000000e+00 + interp 5.2661754908710623e-01:3.2067599794417462e-01:2.6004453712955677e-01:3.4396658215208342e-01:1.1521860795516756e+00:2.2040378432756882e-01:2.0933111752391214e+00:3.4567096557988991e-01:2.5276836608685289e+00:5.2661228291161544e-01:3.0001325212154897e+00:3.0967428301831534e-01:3.7846825581380279e+00 + CVs 20 + 9.7940658351668736e-02 6.3249405043888063e-01 -3.6355214009814313e-01 + 2.4671097702320277e-01 1.2678040820627077e+00 -7.1029334161362234e-01 + 5.0955595575064261e-01 1.8736916001028758e+00 -9.9223201418192541e-01 + 9.1837851094435174e-01 2.3923334010174906e+00 -1.1503787998232651e+00 + 1.4507977517482644e+00 2.7470876780540210e+00 -1.1592909600378771e+00 + 2.0337430457263537e+00 2.8792907799305794e+00 -1.0598925001554651e+00 + 2.5783699628087193e+00 2.7759365938962235e+00 -9.2610017819868240e-01 + 3.0187229344826476e+00 2.4763456195500093e+00 -8.2387821877929757e-01 + 3.3302454540540904e+00 2.0472617591609303e+00 -7.7731171862194159e-01 + 3.5109619450191767e+00 1.5539209745300024e+00 -7.6989705998857216e-01 + 3.5564114805772715e+00 1.0609654673644702e+00 -7.7980467927378971e-01 + 3.5100639736010257e+00 6.1731797863737159e-01 -7.9369905724471468e-01 + 3.4506594771068135e+00 2.1881976286338864e-01 -7.9191803994289245e-01 + 3.4016910943404608e+00 -2.0370647905294387e-01 -7.2302124598604278e-01 + 3.2931377873607994e+00 -6.7059263065578334e-01 -4.8233260834649822e-01 + 3.1085888914721052e+00 -1.0599666997235653e+00 -3.7745402599101641e-02 + 2.8635149302829377e+00 -1.3350627424559249e+00 6.5570016316647539e-01 + 2.2836215696741373e+00 -1.2001908906785044e+00 1.7793439747217765e+00 + 2.2815527994150004e+00 -8.6421078219029790e-01 2.0834479226131899e+00 + id 12028 + loc 8.5488057136535645e-01 3.8777419924736023e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0453145632288412e-01:3.2374914268682431e-01:5.3918460802241763e-01:2.5432560573936075e-01:1.0079619179864381e+00:4.0452741100832090e-01:2.0000481463002115e+00:3.4365637134160648e-01:2.6640737091018005e+00:2.4586115642453008e-01:3.0894884752763225e+00:3.3790210835821072e-01:3.9222138917259195e+00 + CVs 20 + -1.6118647317131080e-01 3.3950718748686115e-01 1.8652620933225431e-01 + -3.3060206143634324e-01 7.0033903892629312e-01 3.6047376456487823e-01 + -5.2570104083285518e-01 1.0711313512519549e+00 4.9777221281256223e-01 + -7.6033039097614397e-01 1.4307692900864639e+00 5.8468690884969454e-01 + -1.0441774950417018e+00 1.7528956228212955e+00 6.2292550241921019e-01 + -1.3828053734371726e+00 2.0142935031156339e+00 6.2860567607294837e-01 + -1.7727016838874845e+00 2.1988099768666554e+00 6.2986212313645740e-01 + -2.1972854038512799e+00 2.2982102556869881e+00 6.5903070380148032e-01 + -2.6310469972850683e+00 2.3125066857955230e+00 7.4473015503472462e-01 + -3.0437616288369451e+00 2.2239882243939375e+00 9.1700326187520576e-01 + -3.3628920862073826e+00 2.0032382517031735e+00 1.1598390421173190e+00 + -3.5587387846829932e+00 1.7059846523574649e+00 1.3742328165744810e+00 + -3.6680601069780310e+00 1.3207422873025192e+00 1.5469992956572571e+00 + -3.6039332204233858e+00 7.9317828127409240e-01 1.6503032552649564e+00 + -3.3881190547909812e+00 3.2098746659660726e-01 1.6320935674153663e+00 + -3.1770577154573796e+00 -2.7775664400455383e-02 1.5594031071592271e+00 + -3.0339559973370092e+00 -2.8266557833709721e-01 1.4792685978038387e+00 + -3.0261338004329281e+00 -4.1150544790859522e-01 1.4377516986677199e+00 + -2.9758854037262621e+00 -6.0012669475315950e-01 1.3905880119025167e+00 + id 12029 + loc 7.2650426626205444e-01 2.3186263442039490e-01 406 + blend 0.0000000000000000e+00 + interp 4.1302161107354179e-01:3.9995780787316321e-01:5.9855471872466426e-02:2.5287838555499065e-01:9.9198321870871287e-01:3.1628962791472559e-01:1.9849400124684153e+00:4.1301748085743106e-01:2.3653179084367726e+00:4.0599529252404071e-01:3.0000164988367986e+00:2.6578276138552875e-01:3.5832596768040803e+00 + CVs 20 + -1.4453903966453310e-01 1.2978264219736482e-01 3.0805848623007663e-02 + -2.4261769950194906e-01 2.1846682984058102e-01 5.7106199163978723e-02 + -3.0502483710339168e-01 2.7696991506634966e-01 8.0684593183525416e-02 + -3.6228206978495042e-01 3.3318525168681490e-01 1.1236859577818489e-01 + -4.1544065769402827e-01 3.9035529255527912e-01 1.5216986078214897e-01 + -4.6661415382578258e-01 4.5146433252540863e-01 2.0003360966615741e-01 + -5.2001099948701168e-01 5.1920393021007538e-01 2.5644267710550561e-01 + -5.8256153941248512e-01 5.9518711095986310e-01 3.2264501239386423e-01 + -6.5943237310738678e-01 6.7943751581484757e-01 3.9838106479165258e-01 + -7.4739917416900192e-01 7.7098341695604711e-01 4.7865560987944977e-01 + -8.3864163725748786e-01 8.6888580227115475e-01 5.5701606549778115e-01 + -9.3355401624728995e-01 9.7166016660501398e-01 6.3259062421756851e-01 + -1.0452942720042353e+00 1.0752077029827432e+00 7.1200134384567670e-01 + -1.1848290340085881e+00 1.1742018069059812e+00 8.0053958579495577e-01 + -1.3471755140876225e+00 1.2668095690613486e+00 8.9364746911923287e-01 + -1.5198357072802304e+00 1.3544418960718285e+00 9.8359412843657146e-01 + -1.6989170833728773e+00 1.4374381514124150e+00 1.0689669690302868e+00 + -1.8923728633141050e+00 1.5119942917383420e+00 1.1545066385639680e+00 + -2.1050925689530700e+00 1.5620262872857102e+00 1.2498148305580576e+00 + id 12030 + loc 4.2389890551567078e-01 1.1802761256694794e-01 403 + blend 0.0000000000000000e+00 + interp 5.0500270111735945e-01:4.0482101090278777e-01:2.7187506444139398e-01:3.6852801024120224e-01:9.5711709647379883e-01:3.2834401256821105e-01:1.4531904503744348e+00:5.0499765109034833e-01:2.0923368094544204e+00:2.8523168208858868e-01:2.7942651259921041e+00:3.2562719995148931e-01:3.2524663597877348e+00 + CVs 20 + -2.0993712212167770e-01 1.8509791216385163e-01 5.2370062504704065e-02 + -4.2716784149070719e-01 3.5836973127433080e-01 1.3426520097660374e-01 + -6.4504633958948931e-01 5.4101861468097046e-01 2.2770811975385699e-01 + -8.4408139458333864e-01 7.2714366903036065e-01 3.1670006950323754e-01 + -1.0175761176699551e+00 8.9994656632366454e-01 3.8550943224888462e-01 + -1.1612172750983416e+00 1.0432361345273058e+00 4.1347686070276712e-01 + -1.2708034058552218e+00 1.1617385166827217e+00 3.9392851285859892e-01 + -1.3485244269100920e+00 1.2780998304213165e+00 3.3032233807736433e-01 + -1.4172636541754888e+00 1.4138574664173282e+00 2.3863289813460964e-01 + -1.5122379497435143e+00 1.5702051736249676e+00 1.7020104046534867e-01 + -1.6375861767946605e+00 1.7261301838777354e+00 1.8903928299280492e-01 + -1.7701206309498967e+00 1.8501373561601453e+00 3.3692408682463604e-01 + -1.9027886679696222e+00 1.9002137458996049e+00 6.0778489687657256e-01 + -2.0467789258260498e+00 1.8422016498038669e+00 9.4817385518674979e-01 + -2.1883261883731624e+00 1.6527701113580346e+00 1.3327437491187906e+00 + -2.3104889278668783e+00 1.2908094314348892e+00 1.8152445129254702e+00 + -2.5082620529408164e+00 7.5500324245784300e-01 2.4480263319907358e+00 + -2.9141135730717940e+00 1.9382694474604167e-01 3.1247302182804542e+00 + -3.2606600470193623e+00 -1.9999866737923555e-01 3.6044361222088028e+00 + id 12031 + loc 7.0313411951065063e-01 7.5427037477493286e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3102797197053638e-01:3.8591894635169161e-01:2.3652332521071040e-01:3.1491574973060732e-01:9.9393552839344423e-01:4.3102366169081668e-01:1.6917513863762066e+00:2.5642623670412479e-01:2.0473229448835539e+00:3.3236060407896068e-01:2.9263638477700513e+00:3.1642184117449396e-01:3.2896765314171637e+00:3.9385997103163212e-01:3.9091415785056176e+00 + CVs 20 + -1.5435364352569919e-01 2.9968528839831321e-01 2.0378807735989118e-01 + -3.2504714119921707e-01 5.6704778187121474e-01 3.5746010061206523e-01 + -5.1014265425535221e-01 8.1954304778460230e-01 4.7546455784031422e-01 + -7.0710458408198329e-01 1.0608196906386214e+00 5.6106418107355105e-01 + -9.1724968648918104e-01 1.2812407931750338e+00 6.0341163816840393e-01 + -1.1374928409788208e+00 1.4691476781959358e+00 5.9518617863162870e-01 + -1.3592129980472070e+00 1.6109395946927632e+00 5.3254334558910366e-01 + -1.5680941221943301e+00 1.6937346937105278e+00 4.1529380196174392e-01 + -1.7433805608274817e+00 1.7092612064858335e+00 2.4871802851609698e-01 + -1.8693742811538971e+00 1.6548711720836184e+00 4.1301077217739790e-02 + -1.9476163649978122e+00 1.5284807702148355e+00 -1.9593642594637029e-01 + -1.9886537539892031e+00 1.3248395562738071e+00 -4.4425355204927774e-01 + -2.0030652618246454e+00 1.0351180091762435e+00 -6.7598586675347883e-01 + -2.0083473985640397e+00 6.4270199560924413e-01 -8.5189062284735062e-01 + -2.0312612968426480e+00 1.3792226638903604e-01 -9.0243188675944341e-01 + -2.1181603177554238e+00 -4.5876322123530311e-01 -7.4886235196363948e-01 + -2.3634990370448450e+00 -1.0856868428228392e+00 -3.2769727645883273e-01 + -2.8161687718238819e+00 -1.5847072380789975e+00 3.4896935318016231e-01 + -3.0247868912246645e+00 -2.0175198143750732e+00 7.4409800066354914e-01 + id 12032 + loc 2.0762620866298676e-01 6.8816471099853516e-01 1048 + blend 0.0000000000000000e+00 + interp 5.3973677674987275e-01:4.1707279866012492e-01:4.2505880262522999e-02:4.0233709142646751e-01:8.3841634089834982e-01:4.6232223066485750e-01:1.0884060505426503e+00:5.3973137938210525e-01:1.6420701355700356e+00:3.9957358206028032e-01:2.0673208070127433e+00:3.7279664679759011e-01:2.8773272203353164e+00:3.8423227099290075e-01:3.5200804076251280e+00 + CVs 20 + 1.6960103733386817e-01 5.8707731899801496e-01 -2.5203741320252937e-01 + 3.3110990608469743e-01 1.1618614245025227e+00 -4.5047911382690864e-01 + 5.1217938658101847e-01 1.7393881147139398e+00 -5.5907761310779636e-01 + 7.4193192064107893e-01 2.3249539865501778e+00 -5.5788597998052225e-01 + 1.0625339023840379e+00 2.8981247222535718e+00 -4.5129172290151298e-01 + 1.5131893585183418e+00 3.4155258170558627e+00 -2.8032723312072205e-01 + 2.1104775933423325e+00 3.8184258907510111e+00 -1.0314029071789932e-01 + 2.8348636611552243e+00 4.0397200239180258e+00 4.2783040966848596e-02 + 3.6282731315909484e+00 4.0230789599185028e+00 1.3177008592756367e-01 + 4.4060444589925032e+00 3.7525569424515441e+00 1.4131461602030448e-01 + 5.0757052927223789e+00 3.2434926918640805e+00 9.5797555280091040e-02 + 5.5482299639742543e+00 2.5319947884588103e+00 8.9924071915028603e-02 + 5.7627702050645651e+00 1.7025258462981105e+00 2.1784357941482768e-01 + 5.7283351551322310e+00 8.5792464482567055e-01 4.9179870481039573e-01 + 5.5149137090496163e+00 1.0130851194868362e-01 8.1361391294214380e-01 + 5.2844525576114956e+00 -3.5431684201646374e-01 1.0012161586069328e+00 + 3.8933107696535143e+00 -4.4097539144026582e-01 -6.2883374222229471e-01 + 3.9587323809393702e+00 -8.1526884318955128e-01 -7.1347406531922331e-01 + 4.1207707795791721e+00 -3.4286457303460194e-01 -6.3025817041031185e-01 + id 12033 + loc 8.3005720376968384e-01 6.1969071626663208e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9346864041470734e-01:4.8394266398878771e-01:4.5909503880093960e-02:3.4784002898130667e-01:8.0833329426473188e-01:3.4811468636090931e-01:1.5692598320554563e+00:4.9346370572830323e-01:2.0056172110115673e+00:3.8742894723670307e-01:2.4798706672108906e+00:4.0377705187648960e-01:2.9991432150257515e+00:3.2989246205877892e-01:3.5644895229361726e+00 + CVs 20 + 2.7474559074773364e-01 3.5731307206592983e-01 -7.4032784548258609e-02 + 5.1057434813901692e-01 7.2277258957086743e-01 -1.6815663906283612e-01 + 7.2534229134056905e-01 1.0996916646644053e+00 -2.5875957918748804e-01 + 9.1933827777950716e-01 1.4912372126230262e+00 -3.2714131776918276e-01 + 1.0849900679954534e+00 1.8966299362305286e+00 -3.6586487274316420e-01 + 1.2312758189835098e+00 2.3041273735714700e+00 -4.0736207132654678e-01 + 1.3851125149452024e+00 2.6733190215489504e+00 -5.3119392784847896e-01 + 1.5705917072007183e+00 2.9268512363146542e+00 -7.7728113109375552e-01 + 1.7997664500079977e+00 3.0089317225394039e+00 -1.0834939326085722e+00 + 2.0775964641124465e+00 2.9358014527770147e+00 -1.3505407870060684e+00 + 2.4063637350977807e+00 2.7737346088748822e+00 -1.5214559239187861e+00 + 2.7833961861692247e+00 2.5715108692488471e+00 -1.5954256064818781e+00 + 3.1991014265962470e+00 2.3311823686564264e+00 -1.5973345963820023e+00 + 3.6213825169955491e+00 2.0143010113318862e+00 -1.5368401952201300e+00 + 3.9737666121162123e+00 1.5781917202446285e+00 -1.3992785015374061e+00 + 4.1536275252160042e+00 1.0644008345068636e+00 -1.1486350319636394e+00 + 4.0567476456880120e+00 6.3360610393021755e-01 -7.2229592813985655e-01 + 3.6994154168646944e+00 4.9382726702970114e-01 -2.3080320114616698e-01 + 3.5930601142930758e+00 2.5728618221862071e-01 2.4990983420708233e-02 + id 12034 + loc 7.3767721652984619e-01 7.5427037477493286e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6355722091824891e-01:4.4409155301549674e-01:2.4501298245260306e-01:3.5055981953988458e-01:9.8347925392162783e-01:4.6355258534603977e-01:1.7095599371435815e+00:2.9173565053455996e-01:2.0623187339139832e+00:3.7240121367374274e-01:2.9093412920127841e+00:3.3628295098285055e-01:3.2839389935641119e+00:4.2811207321781625e-01:3.9289076282659510e+00 + CVs 20 + -2.1542715468333731e-01 2.5190231693054344e-01 1.9915159470782723e-01 + -4.5119072898770674e-01 4.8664956559615064e-01 3.6286631680189857e-01 + -6.9517405009387445e-01 7.1819096850602326e-01 5.0913769472109760e-01 + -9.3718814002396877e-01 9.4449922049126533e-01 6.4109673816403268e-01 + -1.1776480150929673e+00 1.1538463759441633e+00 7.4692405125068007e-01 + -1.4152488518599395e+00 1.3343080266558549e+00 8.1877257949369309e-01 + -1.6446835628436374e+00 1.4762746544643366e+00 8.5768666122057746e-01 + -1.8556725900907187e+00 1.5749445709310022e+00 8.7340702253601532e-01 + -2.0432979309018848e+00 1.6317981066446108e+00 8.6317051323754579e-01 + -2.2054955698217054e+00 1.6392510781720218e+00 7.9278200094783036e-01 + -2.3148883292654880e+00 1.5928131097511891e+00 6.6905694999486576e-01 + -2.3580271811269822e+00 1.5251770820687691e+00 5.6368584307455716e-01 + -2.3645073335704829e+00 1.4486150140769505e+00 5.0673075192304329e-01 + -2.3590058655375681e+00 1.2409068961299230e+00 4.4089659800771464e-01 + -2.2983312081608451e+00 7.8512661758171498e-01 3.1208911761260982e-01 + -2.1014247689074104e+00 1.6301162610367192e-01 2.8453098610558614e-02 + -1.7506233411337901e+00 -4.1892519968909214e-01 -5.1883696284752578e-01 + -1.3434719325579330e+00 -7.3810509627952547e-01 -1.2761812051638466e+00 + -1.0688318107298878e+00 -9.1020852615685799e-01 -1.6939492408887455e+00 + id 12035 + loc 5.8503854274749756e-01 9.8315912485122681e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7224369173131603e-01:3.0559079645326109e-01:2.3149815003678409e-01:3.2520977453489625e-01:1.1075725667235299e+00:4.7223896929439874e-01:1.8462257023446540e+00:3.5953480100645185e-01:2.1589029717333013e+00:3.4646446534607195e-01:2.9882644926521698e+00:4.6347874102875541e-01:3.5521294744706240e+00 + CVs 20 + 1.8624119548378701e-01 3.3827325158407728e-01 -2.8268619228150466e-01 + 4.0311809136490784e-01 6.8798651307245717e-01 -5.4279538215009204e-01 + 6.6947975976854568e-01 1.0480290192966457e+00 -8.0026785966791025e-01 + 9.8861418662095057e-01 1.4174193897350589e+00 -1.0673906063094627e+00 + 1.3531363411772075e+00 1.7933475610022183e+00 -1.3625599506807931e+00 + 1.7507097786999946e+00 2.1585821983573075e+00 -1.7253471740179611e+00 + 2.1600667230548254e+00 2.4583618281187269e+00 -2.2053093423494206e+00 + 2.5399894919079036e+00 2.5866848240773743e+00 -2.8229441881047470e+00 + 2.8380752303650199e+00 2.4579264400120282e+00 -3.5047705944379897e+00 + 3.0519545686330023e+00 2.1080398461211862e+00 -4.1248408238033187e+00 + 3.2329773855578856e+00 1.6454083339073966e+00 -4.6017644655586674e+00 + 3.4405437269679884e+00 1.2075896712165997e+00 -4.9054871706038163e+00 + 3.6796254823269421e+00 9.0843023154741309e-01 -5.0552192522161912e+00 + 3.8932026005787792e+00 7.5601375163115814e-01 -5.0848044390804565e+00 + 4.0392771886481684e+00 6.3825599094713503e-01 -5.0167708119780654e+00 + 4.1341218788459608e+00 4.1008876877858685e-01 -4.9067710748468025e+00 + 4.2496863181969138e+00 -4.0532963980849379e-04 -4.9133196039243296e+00 + 4.4219707347529038e+00 -3.2849149683194717e-01 -5.1820744198890942e+00 + 4.4943822130580333e+00 -2.5845920439600922e-01 -5.4406140043651181e+00 + id 12036 + loc 4.9613043665885925e-01 5.3668153285980225e-01 406 + blend 0.0000000000000000e+00 + interp 3.9430537246135200e-01:3.9105098996235332e-01:5.2645406270872774e-02:3.0110412926540303e-01:1.0000875385260386e+00:3.6512722425235972e-01:1.6037328437180218e+00:3.9430142940762741e-01:2.9869330895400203e+00:3.3409146969502596e-01:3.4674292532830360e+00 + CVs 20 + 1.8738888580680296e-01 2.2217468820114178e-01 5.4086230234916918e-02 + 2.7513881430549098e-01 3.6181964400844957e-01 1.0611899382600373e-01 + 3.3304013383714587e-01 4.7619329643173647e-01 1.6677754218506380e-01 + 4.0416462819766102e-01 5.9389940592757751e-01 2.2403999217620257e-01 + 4.9156001350969641e-01 7.1375694388713784e-01 2.7775265000596694e-01 + 5.9809132888052730e-01 8.3302399866621224e-01 3.2737243093652857e-01 + 7.2592718303734260e-01 9.4731669606013602e-01 3.7128100311141210e-01 + 8.7579265417603103e-01 1.0510930149087905e+00 4.0742474136970674e-01 + 1.0472026616334817e+00 1.1399348564616838e+00 4.3693372225836530e-01 + 1.2393459857322302e+00 1.2111879681340600e+00 4.6688064789858896e-01 + 1.4508925661177994e+00 1.2607583052980320e+00 5.0197871212623013e-01 + 1.6793313919684965e+00 1.2819949367382619e+00 5.3565282670522052e-01 + 1.9206674351724924e+00 1.2697119825477956e+00 5.5754658160678960e-01 + 2.1698859905042203e+00 1.2234789035228619e+00 5.6581385249874194e-01 + 2.4212044262486407e+00 1.1466763474197306e+00 5.6585737107307832e-01 + 2.6688494532450577e+00 1.0442149334977822e+00 5.5987432094466083e-01 + 2.9086929111176034e+00 9.2116099730506651e-01 5.4357056011469551e-01 + 3.1383419858604751e+00 7.8177852260619018e-01 5.1315703775078414e-01 + 3.3546668709780350e+00 6.2450691071972486e-01 4.6631650020674420e-01 + id 12037 + loc 2.5379613041877747e-01 2.7032399177551270e-01 416 + blend 0.0000000000000000e+00 + interp 4.5847625831054095e-01:3.1318713419903738e-01:2.4310377385318216e-01:2.4501025500120416e-01:1.0020860659633726e+00:3.2180690458427202e-01:1.5371213281759153e+00:3.0568107058975985e-01:2.0483808043709089e+00:4.5847167354795787e-01:2.7356442647055754e+00:3.3883475743326846e-01:3.1702537947485894e+00:4.4193892418909259e-01:3.9960929408263137e+00 + CVs 20 + -1.2079383327467848e-01 2.4644222323111581e-01 -5.0328388152671655e-01 + -2.6801840569740099e-01 3.9682792289263263e-01 -8.1792424982770351e-01 + -4.2558228791298869e-01 5.1011101498815714e-01 -1.0885534004128621e+00 + -5.7264339434537714e-01 6.2666274944103117e-01 -1.3873191929848194e+00 + -7.0212742243860493e-01 7.4555466613800547e-01 -1.7172532796445348e+00 + -8.0558560216796748e-01 8.6534997673718328e-01 -2.0828655007481847e+00 + -8.7026142152921504e-01 9.8379759279141799e-01 -2.4863762168821926e+00 + -8.8206694318025658e-01 1.0975797630229376e+00 -2.9252554553379131e+00 + -8.3139374623755402e-01 1.2016762227177633e+00 -3.3947166895494498e+00 + -7.1299358882392327e-01 1.2898496500298502e+00 -3.8880389772488106e+00 + -5.2040669801516359e-01 1.3585623474548907e+00 -4.3929030916889644e+00 + -2.4717265990746451e-01 1.4052341716770334e+00 -4.8987214052822363e+00 + 9.0677764802804761e-02 1.4083005946263738e+00 -5.4203065565435615e+00 + 4.3369141856260068e-01 1.3217275662402124e+00 -5.9902734005839751e+00 + 7.1498609830972448e-01 1.1140719045912655e+00 -6.6106014803680448e+00 + 9.0925245944773703e-01 7.8595548762608480e-01 -7.2498542675548139e+00 + 1.0073906182777947e+00 3.5148752821085427e-01 -7.8728304549850909e+00 + 9.8955354915734950e-01 -1.6368960693333046e-01 -8.4478180666353158e+00 + 1.0352139290220281e+00 -5.2112858477955593e-01 -8.8720839794954820e+00 + id 12038 + loc 1.3831031322479248e-01 3.7129398435354233e-02 384 + blend 0.0000000000000000e+00 + interp 3.8861909739264450e-01:3.5749071218499034e-01:1.1921524559042052e-02:3.8861521120167059e-01:7.2382114153770105e-01:2.2687257443926886e-01:1.2945503359491459e+00:3.3735507740767362e-01:1.9873014797570148e+00:3.4444512367034047e-01:2.6392827933652629e+00:3.1767823157309699e-01:3.3014663836835911e+00 + CVs 20 + -3.7493869804820629e-01 1.6076485912369221e-01 -1.2008232462187414e+00 + -7.0022975338517657e-01 1.6672433455830266e-01 -1.9901600550664416e+00 + -1.0365331465857619e+00 1.2909232280991378e-01 -2.6507044318527266e+00 + -1.4186876978443581e+00 7.7269622005093630e-02 -3.3061778854452508e+00 + -1.8321493628976677e+00 -9.8586698830408492e-03 -3.9559530479606408e+00 + -2.2634400098164735e+00 -1.5384176765496116e-01 -4.5938715008219573e+00 + -2.7062212670094143e+00 -3.7689755356264920e-01 -5.2011958034164909e+00 + -3.1492359467867361e+00 -6.9777913999529328e-01 -5.7533335699476238e+00 + -3.5739183414833322e+00 -1.1232745480017621e+00 -6.2234307111831333e+00 + -3.9662582293679409e+00 -1.6366970547937112e+00 -6.5828712776417149e+00 + -4.3148220749589807e+00 -2.2075993878540809e+00 -6.8087769001322940e+00 + -4.6081095325992800e+00 -2.8006565422849303e+00 -6.8991957258325023e+00 + -4.8438584419199611e+00 -3.3821677035159161e+00 -6.8772557660867761e+00 + -5.0310461828783462e+00 -3.9280023801432615e+00 -6.7742068484966884e+00 + -5.1859130222614365e+00 -4.4222106831139207e+00 -6.6180607809614589e+00 + -5.3212256923702350e+00 -4.8568074751244756e+00 -6.4310695487924114e+00 + -5.4418555387071921e+00 -5.2324072939210815e+00 -6.2311028818920278e+00 + -5.5531916714243330e+00 -5.5522144435903735e+00 -6.0365939331126466e+00 + -5.7587001683702450e+00 -5.9096161685848578e+00 -5.9158534278157022e+00 + id 12039 + loc 2.1399641036987305e-01 1.1840227991342545e-01 1053 + blend 0.0000000000000000e+00 + interp 3.5328389325070320e-01:2.3400370078129346e-01:1.2324661731265951e-01:2.1814084351430479e-01:1.2614122459498138e+00:2.1506286038831263e-01:3.0019120754204440e+00:3.5328036041177069e-01:3.7250717703883396e+00 + CVs 20 + 4.1861907729929726e-01 4.5170800347602424e-01 2.9479102263923057e-02 + 7.9504595011374513e-01 8.8664304495570800e-01 1.2884113732638736e-01 + 1.1462083066472397e+00 1.3174845899615022e+00 2.5173722423138578e-01 + 1.4800550858079577e+00 1.7350908327991226e+00 4.1385448560643573e-01 + 1.8027619855611134e+00 2.0917744574113950e+00 6.4582923287690419e-01 + 2.1177534782085332e+00 2.3119892731229985e+00 9.5638987117111229e-01 + 2.4036329360660429e+00 2.3012818804632760e+00 1.3092141992047752e+00 + 2.5952615173137552e+00 2.0236941978051672e+00 1.6102071198545858e+00 + 2.6551193298870555e+00 1.6018728881248343e+00 1.8015741613917537e+00 + 2.6181749337872677e+00 1.1494471298209901e+00 1.9762883822252171e+00 + 2.5041869410422297e+00 7.0281148314861797e-01 2.2382792575695456e+00 + 2.4409216889901173e+00 4.0733230270338561e-01 2.6472171579764812e+00 + 2.7799748792393810e+00 5.8628361794594519e-01 3.0290899622712351e+00 + 3.2342466541494899e+00 9.2048042799773655e-01 2.6984357085780415e+00 + 3.4287211523010797e+00 8.6848553527995975e-01 2.4132536084047969e+00 + 3.7354172114395991e+00 7.0823369624580024e-01 2.5119984542231464e+00 + 4.1136106091149269e+00 3.8864955778722265e-01 2.9364718089303641e+00 + 4.3736831487343135e+00 -5.5834086992446075e-02 3.5051149726681796e+00 + 4.7459473736344684e+00 -3.3618030830225409e-01 3.8869025023053521e+00 + id 12040 + loc 3.4133762121200562e-01 6.5011113882064819e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4576636339118120e-01:3.5711760671961817e-01:2.3654686067819308e-01:3.1117867013521228e-01:9.0978357348325323e-01:4.4576190572754731e-01:1.3661348004165097e+00:3.1437886700537615e-01:2.0068262795127425e+00:3.0916285345863870e-01:3.0092085878541881e+00:3.6544089129617069e-01:3.9540975052944187e+00 + CVs 20 + 1.0738020750204731e-01 2.4229160809901884e-01 -2.0864119998894493e-01 + 2.1983994355619577e-01 4.7214903078245102e-01 -4.1062496088341544e-01 + 3.3099617135826492e-01 6.9077263861473492e-01 -5.9790754748318886e-01 + 4.3893804195973296e-01 9.0124238251187483e-01 -7.7302500668138785e-01 + 5.4416676730052049e-01 1.1065104150463294e+00 -9.4295152858119990e-01 + 6.4523803250928413e-01 1.3088181291787102e+00 -1.1092463146892280e+00 + 7.3790266648975145e-01 1.5121834575395101e+00 -1.2701013957974028e+00 + 8.1696226813342632e-01 1.7227972657852972e+00 -1.4257409481624272e+00 + 8.8246873584007146e-01 1.9464408340110040e+00 -1.5834563915614106e+00 + 9.4323149969190923e-01 2.1854565830071753e+00 -1.7598507167618700e+00 + 1.0149406763635775e+00 2.4348709661116876e+00 -1.9813944539590709e+00 + 1.1154603509415326e+00 2.6729036344507819e+00 -2.2810579415777381e+00 + 1.2449066146603314e+00 2.8475560026340698e+00 -2.6772441524730382e+00 + 1.3680957215803322e+00 2.8960180574941736e+00 -3.1308067326599933e+00 + 1.4568941448958834e+00 2.8059793469903664e+00 -3.5705341102642842e+00 + 1.5204907485115191e+00 2.5999325840835459e+00 -3.9685261066217077e+00 + 1.5675152805807897e+00 2.2926352093138140e+00 -4.3339691320531584e+00 + 1.5638021531726065e+00 1.9075031678722176e+00 -4.6661432637547202e+00 + 1.4498553554373372e+00 1.5817284354830126e+00 -4.8637086358308901e+00 + id 12041 + loc 4.8542326688766479e-01 8.6195462942123413e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9420158350563304e-01:3.5948058931264854e-01:6.2194802605754140e-01:4.9419664148979803e-01:1.0717441884009684e+00:4.6999448921944098e-01:1.4689596230155200e+00:3.2989723456813613e-01:2.0353408544125857e+00:3.6692356481002425e-01:2.6160334397114209e+00:4.3161181287427303e-01:3.0992771933425987e+00:4.0589897231397204e-01:3.9444674763005185e+00 + CVs 20 + 1.1873645794743866e-01 8.3311020848271078e-01 -2.8875187611308595e-01 + 3.0433376773929244e-01 1.7100342059144014e+00 -5.3949687045244632e-01 + 5.7651073148117427e-01 2.6291068234820387e+00 -6.5260080608241167e-01 + 9.4140151403797911e-01 3.5248010482565721e+00 -5.2500111610425826e-01 + 1.3801352602561694e+00 4.2687235697695289e+00 -1.0395717397240034e-01 + 1.8300873866355922e+00 4.7199636332835606e+00 5.6489869618622235e-01 + 2.2072278666218157e+00 4.8010733475303278e+00 1.3545911969043618e+00 + 2.4648101481416402e+00 4.5435366847924019e+00 2.1240818462019471e+00 + 2.6187054587155716e+00 4.0531741755006445e+00 2.7534588377721847e+00 + 2.7371742599007862e+00 3.4405559826622669e+00 3.1912176414410718e+00 + 2.8424256948961490e+00 2.7275450659134988e+00 3.5159715056585643e+00 + 2.7981548843012094e+00 1.8976372094162468e+00 3.7979404300714510e+00 + 2.5128495584622086e+00 9.8460489792809824e-01 3.9520111949614849e+00 + 2.0311044131995177e+00 5.1822415113174980e-02 3.9292942053550055e+00 + 1.4325707799673788e+00 -7.9473132121328471e-01 3.7961758647606363e+00 + 8.9566290078148025e-01 -1.6134602198441435e+00 3.7934452396862910e+00 + 8.4194045772512771e-01 -2.4799388007585015e+00 4.2667008199266840e+00 + 1.3330488980325590e+00 -2.8919274533545871e+00 5.2309998067708676e+00 + 1.7115805105545097e+00 -2.7157166935148855e+00 6.3193157553184287e+00 + id 12042 + loc 1.0603331774473190e-01 5.8868998289108276e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8853111130224777e-01:3.7710346639075082e-01:7.9903115339514597e-01:3.8515749627146845e-01:1.2541031373540221e+00:3.7938382407182847e-01:2.0003644564263765e+00:3.8852722599113476e-01:2.6042170346824376e+00:2.8466056197112366e-01:3.0138490702647420e+00:2.5627275153573831e-01:3.9626817580424216e+00 + CVs 20 + 1.2310511418365885e-01 3.4126896553237884e-01 1.1565119150590231e-01 + 2.3362273982250842e-01 6.3367220186614825e-01 1.6353780284641289e-01 + 3.3459813098673319e-01 9.1278123574478021e-01 1.8762961228527081e-01 + 4.2802633723129468e-01 1.1925891651628147e+00 2.0780957586286397e-01 + 5.1951935655524673e-01 1.4687493238153921e+00 2.1517060999972115e-01 + 6.1755221016000084e-01 1.7385127607710373e+00 1.9683727636462411e-01 + 7.3324278154071432e-01 1.9984579461050953e+00 1.3284780920533046e-01 + 8.7472062291961150e-01 2.2353206840417164e+00 -3.1070144629063989e-03 + 1.0348255898434817e+00 2.4192229480999989e+00 -2.3005234253978957e-01 + 1.1890785967389617e+00 2.5175142531044905e+00 -5.4237406921163245e-01 + 1.3125960324358064e+00 2.5111111298934783e+00 -9.1696864573226855e-01 + 1.3878566832875376e+00 2.3949723007434240e+00 -1.3196141272879254e+00 + 1.4106268775978905e+00 2.1946201534995611e+00 -1.7026421537261971e+00 + 1.3984945767567873e+00 1.9801867993588083e+00 -2.0216553952010545e+00 + 1.3841349904167202e+00 1.8667180494055606e+00 -2.2276235699883511e+00 + 1.4071885947125768e+00 1.9817091442221315e+00 -2.1845497374628855e+00 + 1.4594545057142374e+00 2.1930373429687728e+00 -1.6204425200692718e+00 + 1.3183512114264444e+00 1.8223178872355410e+00 -5.8691052510287578e-01 + 1.3377734817004980e+00 1.9548301551930005e+00 -6.1381755340044608e-01 + id 12043 + loc 7.8501230478286743e-01 1.7910695075988770e-01 411 + blend 0.0000000000000000e+00 + interp 4.4878253309558769e-01:4.1064137439485998e-01:1.4185183401491885e-02:3.8120888864628794e-01:8.7791021496951060e-01:4.4877804527025678e-01:1.2432080619739727e+00:3.1864754613447410e-01:1.9989225266243231e+00:3.3398914663782392e-01:2.9938206312760349e+00:3.4312550008218301e-01:3.5289022750815846e+00 + CVs 20 + -6.4135255140758674e-01 2.4194010958553602e-01 1.5530944666006904e-01 + -1.1584672082721672e+00 3.7826637934613550e-01 2.7981725558922865e-01 + -1.6427040697566799e+00 4.6613098806396014e-01 3.6878227229606775e-01 + -2.1407467216293505e+00 5.2266029034809303e-01 4.2311158544217387e-01 + -2.6440682066197367e+00 5.3981374215238986e-01 4.4249658204640030e-01 + -3.1447751682406699e+00 5.1317346859591950e-01 4.3377002519404040e-01 + -3.6353133409457463e+00 4.4007504708067446e-01 4.0703722935020314e-01 + -4.1068471095630494e+00 3.1735763978850406e-01 3.7203810858823660e-01 + -4.5515931190878227e+00 1.4182922770679007e-01 3.3940245239387212e-01 + -4.9612775634749440e+00 -8.7939059896447125e-02 3.2215618718165728e-01 + -5.3189597870792422e+00 -3.6565983382896139e-01 3.2998933053914015e-01 + -5.6084523663639638e+00 -6.7241930917693660e-01 3.6231264638446836e-01 + -5.8333803641264517e+00 -9.8814425255333838e-01 4.1438001550757403e-01 + -6.0114085080545365e+00 -1.3045411862870284e+00 4.8652240188783691e-01 + -6.1561140589192727e+00 -1.6188545416225342e+00 5.8067796890560819e-01 + -6.2722177923793243e+00 -1.9248766489872993e+00 6.9394530578110680e-01 + -6.3624279940181694e+00 -2.2178149652388099e+00 8.1953427792346112e-01 + -6.4321181305353221e+00 -2.5058366437141353e+00 9.5339652347637194e-01 + -6.5044092336023827e+00 -2.8186690646179131e+00 1.1006026994550404e+00 + id 12044 + loc 5.1434516906738281e-01 7.1128737926483154e-01 403 + blend 0.0000000000000000e+00 + interp 5.1700038393198178e-01:4.4015406660392759e-01:5.4165682433397278e-01:3.6661901278697290e-01:1.0928468968293032e+00:5.1699521392814252e-01:1.6738633592928100e+00:4.5601156998378733e-01:2.0012022604683155e+00:3.1569424031794774e-01:2.4740512233532437e+00:2.8284168347805089e-01:3.0075830246224262e+00:2.8940647285871335e-01:3.7595616541946999e+00 + CVs 20 + -6.9192954529735798e-02 3.1964888228149066e-02 -6.2672199223470837e-02 + -1.2042243234828293e-01 7.7889443418743876e-02 -1.2013686098535738e-01 + -1.7680220761589252e-01 1.2517763181659108e-01 -1.7533922422859549e-01 + -2.4058324774894810e-01 1.6583859440942589e-01 -2.2657830629643949e-01 + -3.0860094506217700e-01 2.0057311970508787e-01 -2.7433659299652541e-01 + -3.7797555553840634e-01 2.3124157904250353e-01 -3.1951935953864086e-01 + -4.4659127247658881e-01 2.6032104896728409e-01 -3.6310455454071605e-01 + -5.1295177962521943e-01 2.9025678773606156e-01 -4.0606195884376828e-01 + -5.7598416012553300e-01 3.2323597231681789e-01 -4.4919905039088792e-01 + -6.3499330842272994e-01 3.6111879095854033e-01 -4.9315724567661318e-01 + -6.8978332577284129e-01 4.0508985593029917e-01 -5.3898507267791651e-01 + -7.4107633669601092e-01 4.5547087854248658e-01 -5.8826778528443857e-01 + -7.9073797943170598e-01 5.1155674821384922e-01 -6.4313931925143086e-01 + -8.4226389064168450e-01 5.7178599822626563e-01 -7.0613870165852877e-01 + -9.0129972548478698e-01 6.3480876617340176e-01 -7.7930175772740562e-01 + -9.7455415066309625e-01 7.0084818907348423e-01 -8.6217341644239831e-01 + -1.0660606607241381e+00 7.7113755522104055e-01 -9.5160509049998165e-01 + -1.1797178873593437e+00 8.4562697123959329e-01 -1.0445971293580150e+00 + -1.1407048018569155e+00 8.9321053949960749e-01 -1.1018473067098582e+00 + id 12045 + loc 9.0870082378387451e-02 3.8786929845809937e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5232806052446678e-01:4.5232353724386154e-01:9.9411169601775540e-02:2.9784067178685841e-01:8.7814659923998539e-01:2.5579950015874370e-01:1.5730758568878012e+00:3.5585494628638858e-01:2.7574871284299527e+00:4.2728656898073158e-01:3.1499803467849103e+00:3.8262385220797523e-01:3.8515352257963547e+00 + CVs 20 + -2.5057525499570832e-01 3.1347331602932893e-01 -2.4009847678564106e-01 + -5.0764747728988269e-01 6.2767186004428355e-01 -4.5945038534228055e-01 + -7.9389156202992117e-01 9.3939631982851479e-01 -6.6233032619646448e-01 + -1.1200782407366994e+00 1.2420268606152323e+00 -8.4208459157356064e-01 + -1.4873444794028727e+00 1.5234777866202158e+00 -9.8629114794715189e-01 + -1.8907696073061429e+00 1.7685317367278908e+00 -1.0825414943374481e+00 + -2.3186941362134386e+00 1.9626663882181130e+00 -1.1226154420540828e+00 + -2.7538156803860221e+00 2.0945322249795986e+00 -1.1050146466125133e+00 + -3.1767651870757492e+00 2.1581701153089314e+00 -1.0357208709294048e+00 + -3.5717807223866824e+00 2.1525030341913149e+00 -9.2765599589683290e-01 + -3.9306838365678676e+00 2.0827455213909412e+00 -7.9921284366886280e-01 + -4.2606858708027335e+00 1.9637691015560668e+00 -6.7377593903731103e-01 + -4.5787467649983657e+00 1.8048227311822731e+00 -5.7120519814471060e-01 + -4.8960505224091087e+00 1.6081238952897476e+00 -5.0606939766789161e-01 + -5.2151671927637011e+00 1.3731686884842595e+00 -4.8877033379916413e-01 + -5.5297116693826087e+00 1.1015842394751276e+00 -5.2469937424851465e-01 + -5.8290366553549813e+00 7.9625138487223024e-01 -6.1245210412051343e-01 + -6.0984303792437187e+00 4.6356184334348649e-01 -7.4435932803344629e-01 + -6.2940580543648341e+00 2.0659338944952665e-01 -8.9553493958310415e-01 + id 12046 + loc 6.3030409812927246e-01 4.3946552276611328e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5765039005537961e-01:4.5764581355147910e-01:1.6897500273642552e-01:4.3421873565707186e-01:8.2226533018120518e-01:2.6512862902159429e-01:1.0539677595893906e+00:3.5607649370604488e-01:2.0008224943656097e+00:4.3462331139989990e-01:2.9406002285163626e+00:2.9580622083034691e-01:3.2169515069908581e+00:3.6863911044771586e-01:3.9188507796217111e+00 + CVs 20 + 1.6103470265557601e-01 3.8735454997666352e-01 -1.0915083158774014e-01 + 3.1489160664338345e-01 7.3502250681954351e-01 -1.9277369678320233e-01 + 4.6730989106628351e-01 1.0664151210294985e+00 -2.9454587065963900e-01 + 6.2432566245172660e-01 1.3870724452612635e+00 -4.2641348457124539e-01 + 8.1030910308080428e-01 1.6978258962540642e+00 -5.6494258324899460e-01 + 1.0465522394410245e+00 1.9949740063125021e+00 -6.8283278839848249e-01 + 1.3329140267586832e+00 2.2653577225505459e+00 -7.6154087811002391e-01 + 1.6527332200702998e+00 2.4976628515199177e+00 -7.8819587429428428e-01 + 1.9884008865312093e+00 2.6792319474783084e+00 -7.2679609243068843e-01 + 2.3092930040983983e+00 2.7766866031101678e+00 -5.2527357445908951e-01 + 2.5752139198322528e+00 2.7565874435656816e+00 -1.7573486766414437e-01 + 2.7724414246080484e+00 2.5760391616853351e+00 2.7225438621886044e-01 + 2.9176641754028889e+00 2.2043282070584649e+00 6.8736161404040552e-01 + 3.0255456576811310e+00 1.7257009305139657e+00 9.7952577806898733e-01 + 3.0867389987878653e+00 1.2597920658837105e+00 1.2238701660060225e+00 + 3.0956471625616744e+00 9.1001603379245921e-01 1.5225842187146332e+00 + 3.0914015297887323e+00 7.6181507039686913e-01 1.8955274056076656e+00 + 3.1087012498810083e+00 7.5644206689519489e-01 2.3140324040087576e+00 + 3.1112843532118011e+00 5.7820254915238822e-01 2.8591981515980116e+00 + id 12047 + loc 4.0037351846694946e-01 2.4698771536350250e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5102386395332505e-01:3.2289529355541285e-01:5.5353844914375339e-03:3.0734714553558373e-01:9.8988304811224681e-01:3.4556625600593310e-01:1.5562586058045302e+00:4.5101935371468554e-01:2.0000081660579769e+00:4.0889897491307903e-01:2.6130995157384218e+00:3.4216401004421920e-01:3.1588124467761580e+00 + CVs 20 + -6.0555993936306840e-02 3.7313640520383839e-01 -2.6944243016719538e-01 + -1.8281047088214306e-01 7.3295943360539595e-01 -5.5380416771396324e-01 + -3.6056168099547214e-01 1.0720541848099077e+00 -8.5452538787871857e-01 + -6.0213173781235318e-01 1.3817345989958199e+00 -1.1578655786390877e+00 + -9.0912042533387116e-01 1.6456495180831441e+00 -1.4465125342422804e+00 + -1.2621790777827124e+00 1.8456134620013782e+00 -1.7202350825612445e+00 + -1.6340058724750615e+00 1.9729196121071417e+00 -1.9907291832450982e+00 + -1.9987696490509002e+00 2.0258806949297310e+00 -2.2644702618172241e+00 + -2.3244959754648917e+00 1.9963769437761476e+00 -2.5382669751692934e+00 + -2.5820301719714740e+00 1.8748607261965837e+00 -2.7951545161625631e+00 + -2.7749360267478349e+00 1.6647675204403900e+00 -2.9949691670176386e+00 + -2.9214850561249155e+00 1.3805478480773152e+00 -3.0721438515798098e+00 + -3.0194525470162166e+00 1.0845957654269347e+00 -2.9889166195910541e+00 + -3.0949277067002514e+00 8.4269923914573996e-01 -2.8275710734004678e+00 + -3.1805484369467734e+00 6.4918326796827719e-01 -2.6451912237142294e+00 + -3.2696015908092146e+00 5.7701240558088762e-01 -2.4110687053046429e+00 + -3.3736424564142640e+00 7.8969438452971974e-01 -2.2399394089431595e+00 + -3.5285842057670793e+00 9.8214997958142736e-01 -2.2568822251841558e+00 + -3.7061886538455040e+00 1.0350629855559568e+00 -2.0481339024153034e+00 + id 12048 + loc 1.0603331774473190e-01 6.2546497583389282e-01 1055 + blend 0.0000000000000000e+00 + interp 2.0694829822996161e+00:7.9118663662153399e-01:6.5009470362240451e-01:3.2737177784030536e-01:7.8794874470012966e-01:3.2018232824867104e-01:1.2241899155777709e+00:5.1478178158114396e-01:1.8624127590557111e+00:5.9624132544254282e-01:2.0849366969384571e+00:1.0140674052803116e+00:2.3144473093697728e+00:1.4895447812138489e+00:2.5060524534394002e+00:2.0694729822996161e+00:2.6274753594417044e+00 + CVs 20 + -2.0150089123321802e-01 3.5191862043270594e-01 -3.7939442684483471e-01 + -2.8895469304266114e-01 6.2583043543458161e-01 -7.0331645144385679e-01 + -3.1800164793152030e-01 8.7125975751521656e-01 -1.0019154426519024e+00 + -3.1226481525519689e-01 1.1112632287700881e+00 -1.2783377090607457e+00 + -2.8250556601393007e-01 1.3462413754396274e+00 -1.5183003008609743e+00 + -2.6648098643814833e-01 1.5743348603836547e+00 -1.7187941509745612e+00 + -3.0295549136068001e-01 1.7924980472469063e+00 -1.8932515591384078e+00 + -4.0513396892898590e-01 1.9957105254824690e+00 -2.0630166612194878e+00 + -5.5874975358157974e-01 2.1642544322597290e+00 -2.2408796891760563e+00 + -7.2837988188027913e-01 2.2730614181750739e+00 -2.4258535952928724e+00 + -8.8208118428340687e-01 2.3140806399928948e+00 -2.6137128814313804e+00 + -1.0094682457758744e+00 2.2938268250453739e+00 -2.8093104012307930e+00 + -1.1051313751676477e+00 2.2283402787667175e+00 -3.0070330797032350e+00 + -1.1706262380748784e+00 2.1449611981907468e+00 -3.1902286391044354e+00 + -1.2200903468037116e+00 2.0679673156610430e+00 -3.3517757331457867e+00 + -1.2803126975339973e+00 2.0279881415193075e+00 -3.5061822099339466e+00 + -1.3939446382808893e+00 2.0347708049511910e+00 -3.7031268463374962e+00 + -1.5552611780441021e+00 2.0108960637118751e+00 -3.9649440935551321e+00 + -1.4669362069394545e+00 1.9115532046171546e+00 -3.9801436883892007e+00 + id 12049 + loc 7.8326493501663208e-02 4.7137963771820068e-01 406 + blend 0.0000000000000000e+00 + interp 4.5697756032675219e-01:3.4169949347866285e-01:9.3204242233788470e-01:2.9511362509562744e-01:1.7863541329094335e+00:3.8813246800297763e-01:2.0926844012486168e+00:3.4847890467645365e-01:2.6405254991996179e+00:4.5697299055114893e-01:3.0977333489467926e+00:3.9504568187837202e-01:3.9834881536467259e+00 + CVs 20 + -2.8429058668497893e-02 2.8093057795704934e-01 -1.5254851741127845e-01 + -5.4506173911594388e-02 5.4205208392786064e-01 -1.8177492875028309e-01 + -7.1279742811508243e-02 7.5223277360156904e-01 -1.9074578002151926e-01 + -9.4685299202986781e-02 9.4911799676487107e-01 -1.8368011104276610e-01 + -1.2235995634236849e-01 1.1307234301586295e+00 -1.5428179973170691e-01 + -1.4815973383118275e-01 1.2935624372089274e+00 -9.8291248636702799e-02 + -1.6046315233405084e-01 1.4329167995594183e+00 -1.2375212550795212e-02 + -1.3958174090751987e-01 1.5399704733436410e+00 1.0296680425864857e-01 + -5.6679917923922948e-02 1.5969230480857772e+00 2.3515777837991514e-01 + 1.1028431844735676e-01 1.5764614085498132e+00 3.3994568379733298e-01 + 3.2577118393575083e-01 1.4717078059898041e+00 3.4212411618551253e-01 + 4.9569248985885628e-01 1.3349561650527275e+00 2.3267446207288789e-01 + 5.8613644667604858e-01 1.2146633720146354e+00 9.7843767116067626e-02 + 6.2274986063346516e-01 1.1141049553961002e+00 -8.4930845397279131e-03 + 6.1395422230474272e-01 1.0447753485175049e+00 -9.0389185585965592e-02 + 5.5580570812203356e-01 1.0200111239575631e+00 -1.5557105832472151e-01 + 4.5730418162428316e-01 1.0148367856862091e+00 -1.9567729544983603e-01 + 3.5706713341644108e-01 9.7136821803737861e-01 -2.0232630375338623e-01 + 3.7403306358016147e-01 7.7985860784031924e-01 -1.5537302924106711e-01 + id 12050 + loc 4.5191520452499390e-01 4.7346633672714233e-01 411 + blend 0.0000000000000000e+00 + interp 4.2065226179575527e-01:4.2064805527313731e-01:8.5859931262542544e-02:4.1408514823434861e-01:9.1026448468934362e-01:2.5334412458814198e-01:1.5687787712621293e+00:3.3043885758827557e-01:2.4616087307422685e+00:3.1487819589486238e-01:3.2483038890210714e+00 + CVs 20 + -7.0863166452641388e-02 1.4914738571301869e-01 -7.8522273175334623e-01 + -1.4795029997976927e-01 2.0293790277955931e-01 -1.3393549597357768e+00 + -2.1610014872345076e-01 2.2975866148349799e-01 -1.8356455502573936e+00 + -2.7088500100246071e-01 2.5139578312806665e-01 -2.3413050324045712e+00 + -3.0877998441258414e-01 2.5955082040406219e-01 -2.8570296814721878e+00 + -3.2967543422208379e-01 2.4612824210925244e-01 -3.3816024072413282e+00 + -3.3927413668561801e-01 2.0257573709554610e-01 -3.9117400469299706e+00 + -3.5023441337136346e-01 1.1715443366232869e-01 -4.4425951631328893e+00 + -3.7611526485499369e-01 -2.3627170308878398e-02 -4.9651503823650724e+00 + -4.3053120845350379e-01 -2.2902426871035697e-01 -5.4607788524212406e+00 + -5.2399277225598406e-01 -4.9896224186645211e-01 -5.9051085860607921e+00 + -6.5675923161222993e-01 -8.2536733791285521e-01 -6.2838665592705034e+00 + -8.2022650525706431e-01 -1.1954067057756079e+00 -6.5967926076097285e+00 + -1.0033057051679171e+00 -1.5905673280811072e+00 -6.8477323540291408e+00 + -1.1936452762727874e+00 -1.9916536460480918e+00 -7.0421848003218654e+00 + -1.3765712101227170e+00 -2.3902219853643154e+00 -7.1890620505865082e+00 + -1.5384139040284326e+00 -2.7831728607759740e+00 -7.2971230081576346e+00 + -1.6722310687503545e+00 -3.1512974210124645e+00 -7.3766358000038457e+00 + -1.7724998791714657e+00 -3.4910171850174132e+00 -7.4650007482646323e+00 + id 12051 + loc 6.0078889131546021e-01 4.3946552276611328e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0011167764302433e-01:4.0441292063852141e-01:1.5210489380557868e-01:3.8958576958275704e-01:8.4207692583649707e-01:5.0010667652624796e-01:1.3344091065603567e+00:3.2569979190552334e-01:1.9999589839045928e+00:4.5390335134754289e-01:2.3395070971165319e+00:3.9469314714360110e-01:2.9606845556179939e+00:3.4306644963696747e-01:3.8977314075778531e+00 + CVs 20 + 9.7001328272645279e-02 3.7464831367623447e-01 -1.1608702046985371e-01 + 1.6364224726206239e-01 7.1066082538516140e-01 -1.7864879042728127e-01 + 2.2387120273119482e-01 1.0426086039231497e+00 -2.2324172221376953e-01 + 2.9224883513511724e-01 1.3852631499131027e+00 -2.6753662358260089e-01 + 3.8814947108610287e-01 1.7421262547465548e+00 -3.0510899904555233e-01 + 5.3083719009837338e-01 2.1085510483817553e+00 -3.2385606691566138e-01 + 7.3234639781025213e-01 2.4685696483474349e+00 -3.0652882098912304e-01 + 9.9235128153278818e-01 2.7989259205806953e+00 -2.3260223019282145e-01 + 1.2997694290864408e+00 3.0762716419052860e+00 -7.3370840652279501e-02 + 1.6329147656539496e+00 3.2702016533775069e+00 2.0564040520381544e-01 + 1.9720038204967227e+00 3.3475411958192041e+00 6.1015897880217196e-01 + 2.3137450048210004e+00 3.2787867271813540e+00 1.1110402207903594e+00 + 2.6592240797761169e+00 3.0324452445419321e+00 1.6611170033556690e+00 + 3.0082636394143005e+00 2.5662687808836511e+00 2.2108006106289166e+00 + 3.3607437917155072e+00 1.8655863463785551e+00 2.6627899230680763e+00 + 3.6823584129085463e+00 1.0305887407986896e+00 2.8782375682945229e+00 + 3.9657990432672872e+00 1.9986605607312291e-01 2.8247099493242658e+00 + 4.2672660586711766e+00 -4.6974111921863404e-01 2.5576877145787846e+00 + 4.5130699114844166e+00 -6.8206476863490662e-01 2.2519206622723589e+00 + id 12052 + loc 7.1640723943710327e-01 2.9561021924018860e-01 397 + blend 0.0000000000000000e+00 + interp 5.0511008285558801e-01:2.6266102898891985e-01:1.8304271585569376e-01:3.4156245596914814e-01:1.0199288297900850e+00:3.3710792117084815e-01:1.8858167772110850e+00:5.0510503175475951e-01:2.5995224275771336e+00:3.1231658668867418e-01:3.1788625065165115e+00 + CVs 20 + -1.2092484757294526e+00 2.5720076497278582e-01 3.1692454461320485e-01 + -1.9738200289208849e+00 2.8313108679132626e-01 5.6317385089193184e-01 + -2.6135840174903739e+00 2.2727106379492781e-01 7.9153982157836744e-01 + -3.2471401258839898e+00 1.4247910707097960e-01 1.0254504846696415e+00 + -3.8699370342111110e+00 1.8872138765032964e-02 1.2734106022086948e+00 + -4.4822749902030949e+00 -1.5681727788682631e-01 1.5452630956297417e+00 + -5.0810359987948566e+00 -3.9885292975826786e-01 1.8473501465444970e+00 + -5.6548261861093359e+00 -7.2288224978358984e-01 2.1747215502139206e+00 + -6.1794467100974222e+00 -1.1465832333809951e+00 2.5119496189268569e+00 + -6.6143083446841962e+00 -1.6782693048431572e+00 2.8404566085073739e+00 + -6.9158001880334519e+00 -2.3020567346758494e+00 3.1430842180685863e+00 + -7.0615908606383231e+00 -2.9830663760343938e+00 3.4076457485531235e+00 + -7.0584821274010849e+00 -3.6817832386919456e+00 3.6224684173905572e+00 + -6.9286312682280009e+00 -4.3585029981848908e+00 3.7774076908564513e+00 + -6.6982394703998551e+00 -4.9748873630891621e+00 3.8648049040517787e+00 + -6.3954901154490971e+00 -5.5009644387483769e+00 3.8721753682782714e+00 + -6.0591609597623926e+00 -5.9219710871132900e+00 3.7935073602471006e+00 + -5.7374502608113422e+00 -6.2598414468399834e+00 3.6560896274909189e+00 + -5.5259854166442324e+00 -6.7539439690859773e+00 3.6057876784891532e+00 + id 12053 + loc 1.5235534310340881e-01 2.6890236139297485e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6639528426786625e-01:4.1014537347450258e-01:9.5587761821972150e-02:4.6639062031502360e-01:8.8314140813698339e-01:3.0206145412538726e-01:1.0771144056264528e+00:4.1419156333466534e-01:1.9797936816637893e+00:3.0811700644122197e-01:2.7062434866595071e+00:3.1131898906250516e-01:3.4738167944872109e+00 + CVs 20 + -1.8913706907643063e-01 3.9097683935215805e-01 -5.1334312653507796e-02 + -3.9427196879393939e-01 7.9214929245984089e-01 -7.2781427844395979e-02 + -6.0578970564632184e-01 1.2039283984938134e+00 -5.1911745095900685e-02 + -7.8984960425858775e-01 1.6284879116096336e+00 2.2477353590647342e-02 + -9.2793289267232482e-01 2.0450269323185388e+00 1.4541063621755754e-01 + -1.0742951271386822e+00 2.3637832044068752e+00 2.7646721691179915e-01 + -1.2774964148631518e+00 2.5281648466656308e+00 3.8275721145518726e-01 + -1.5744810176692408e+00 2.5930890496975416e+00 4.4125917915836504e-01 + -1.9719160332279440e+00 2.5602483704867622e+00 4.1636349590836480e-01 + -2.4080866586633776e+00 2.4158705539393135e+00 2.7191468991681361e-01 + -2.8039232298928245e+00 2.1843854037285979e+00 -6.0785257774411128e-03 + -3.0897274325084640e+00 1.9288964306968037e+00 -3.7468497859665673e-01 + -3.2459062913875116e+00 1.7217639168947856e+00 -7.4280557339579478e-01 + -3.3053920912823620e+00 1.6042598391002316e+00 -1.0542896297146125e+00 + -3.3165455432638753e+00 1.5891005618752778e+00 -1.3209654415885554e+00 + -3.3246589729149116e+00 1.6217039465594667e+00 -1.6267657074167823e+00 + -3.3629374924557451e+00 1.5503394664926027e+00 -2.0578308728171777e+00 + -3.3236069697083623e+00 1.2103470117571646e+00 -2.5472307699168670e+00 + -3.0953729932810137e+00 1.1823326918951667e+00 -2.6408446539158077e+00 + id 12054 + loc 3.1679368019104004e-01 6.8135386705398560e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3772302127258805e-01:3.0152741649304288e-01:4.3103930247423972e-01:4.0947259027599853e-01:1.0000120550563059e+00:3.5472081791040483e-01:1.6109402700703743e+00:3.4475446487012301e-01:2.0970088652139740e+00:4.1219350971706764e-01:2.8799555657308202e+00:3.7127628474168806e-01:3.3558682319214914e+00:4.3771864404237537e-01:3.9994853117090208e+00 + CVs 20 + 1.2419711173461905e-01 3.1536826521078348e-01 -1.5628760078892898e-01 + 2.5688386521491885e-01 6.4513162835167703e-01 -3.4467736741991950e-01 + 3.8713693936938143e-01 9.8178440751906004e-01 -5.3782030901664180e-01 + 5.0682733836655014e-01 1.3175791052887342e+00 -7.3050992175440843e-01 + 6.1208979780667350e-01 1.6449891410403186e+00 -9.3044938352032114e-01 + 7.0598387103155613e-01 1.9512452075779358e+00 -1.1468236667465863e+00 + 8.0133540080587407e-01 2.2204083565115291e+00 -1.3917881975713680e+00 + 9.1853738167324950e-01 2.4350963618062336e+00 -1.6760248179045869e+00 + 1.0779714071212263e+00 2.5762128253752103e+00 -2.0002487520599939e+00 + 1.2880915455995472e+00 2.6304460390418374e+00 -2.3506141188091578e+00 + 1.5404179484939617e+00 2.6022887890674680e+00 -2.7070143402202462e+00 + 1.8161636950854692e+00 2.5159943657202692e+00 -3.0549084547066077e+00 + 2.0944074928703285e+00 2.3992726597488048e+00 -3.3920056768220253e+00 + 2.3467833286540603e+00 2.2637244463483381e+00 -3.7252583346997001e+00 + 2.5234391253095438e+00 2.1221752718913209e+00 -4.0539768910582215e+00 + 2.5740075906064712e+00 2.0272256375462359e+00 -4.3427183606811246e+00 + 2.5192665981151365e+00 2.0189614797358191e+00 -4.5454926139539227e+00 + 2.4176932318219251e+00 2.0243361269432874e+00 -4.7382753973655642e+00 + 2.2594953928540598e+00 1.9240807197818699e+00 -5.1207709690051360e+00 + id 12055 + loc 7.1746982634067535e-02 7.4796460568904877e-02 403 + blend 0.0000000000000000e+00 + interp 4.8624282785833373e-01:3.0198586603825206e-01:4.2682130632902116e-01:3.0169590965791226e-01:1.4074531483772850e+00:4.8623796543005515e-01:2.0026668914866912e+00:3.8075018889211359e-01:2.6837303642784303e+00:4.7840355591075234e-01:3.0587704792624186e+00:3.5885603155572149e-01:3.9183143415690367e+00 + CVs 20 + -2.0285641875406601e-01 2.0784401084375650e-01 1.2811201515946941e-01 + -3.9894985500630881e-01 4.2096843439577475e-01 2.6011684032203763e-01 + -5.8871255828299773e-01 6.2048548487021815e-01 4.1425958432296850e-01 + -7.7073741101510818e-01 7.9064935464032593e-01 5.9797126172305670e-01 + -9.3977088291762301e-01 9.1969541547229450e-01 8.0741888981153298e-01 + -1.0881375680822412e+00 9.9787435751174569e-01 1.0350549081522114e+00 + -1.2098654840908361e+00 1.0210518614276500e+00 1.2710647823675363e+00 + -1.3037403471919167e+00 9.9044685862642257e-01 1.5034585808619434e+00 + -1.3734744745927037e+00 9.1149857530787126e-01 1.7198539268536008e+00 + -1.4265668925774171e+00 7.9269943158273193e-01 1.9151655235877763e+00 + -1.4700164765822343e+00 6.4282844992576971e-01 2.0911907285913451e+00 + -1.5072630968481302e+00 4.6872289961944347e-01 2.2534906004080977e+00 + -1.5399714789817929e+00 2.7343675513888732e-01 2.4096223547158448e+00 + -1.5759413597649363e+00 6.4052692561914704e-02 2.5567886348009217e+00 + -1.6237042457582684e+00 -1.4954467333395360e-01 2.6894766999617898e+00 + -1.6730522314015392e+00 -3.8238168588815968e-01 2.8263444786922123e+00 + -1.6969584657790600e+00 -6.8908764165769809e-01 3.0210600769305018e+00 + -1.7075305644886472e+00 -1.0741736135818716e+00 3.3228542475174354e+00 + -1.7807816753289216e+00 -1.3502509485328822e+00 3.5694419974826461e+00 + id 12056 + loc 6.7697777412831783e-03 4.9829560518264771e-01 384 + blend 0.0000000000000000e+00 + interp 1.8221649633901098e+00:8.1288661756966774e-01:1.0419331133101473e-01:3.4169449173078509e-01:2.7334563401476164e-01:5.3121524657712427e-01:8.6010461744809297e-01:4.0094862282732197e-01:1.5255436702909964e+00:1.6175098488169287e-01:1.9863096867158534e+00:1.5301258460914522e+00:2.0002161829254774e+00:1.8221549633901097e+00:2.0010969465267552e+00:1.2548213021246355e+00:2.0051700877770529e+00 + CVs 20 + -3.8830571213378617e-01 3.0566493858847432e-01 -1.2536979736460125e+00 + -6.8231360072221281e-01 3.8447809594883886e-01 -2.0069375318570195e+00 + -9.5681293568794779e-01 3.6554116624466454e-01 -2.6505896664407418e+00 + -1.2314693299226234e+00 3.0517111016898102e-01 -3.3249445390998402e+00 + -1.5085178962201500e+00 1.9621389404940948e-01 -4.0137463781774096e+00 + -1.7888636881741229e+00 2.8800006608490081e-02 -4.6980869698643337e+00 + -2.0683157430477350e+00 -2.1537340861171478e-01 -5.3530865145405881e+00 + -2.3386035793741460e+00 -5.4444622529665532e-01 -5.9490641778696354e+00 + -2.5850546026929893e+00 -9.4853405149434011e-01 -6.4571383915268292e+00 + -2.7926861524506013e+00 -1.4007124723121878e+00 -6.8573975232105573e+00 + -2.9603294602038330e+00 -1.8663566373068186e+00 -7.1469811114480821e+00 + -3.1022009876170129e+00 -2.3183889304552991e+00 -7.3432406434949442e+00 + -3.2372420754399558e+00 -2.7441104731191790e+00 -7.4759291064586808e+00 + -3.3805192936198312e+00 -3.1427678879878300e+00 -7.5751211232900761e+00 + -3.5424886457724858e+00 -3.5178830439618309e+00 -7.6625082199932564e+00 + -3.7311247694476091e+00 -3.8712141528971125e+00 -7.7478186540671006e+00 + -3.9476174739431773e+00 -4.2079170353576281e+00 -7.8274499062366489e+00 + -4.1786919793212380e+00 -4.5425088946730376e+00 -7.8813906312621498e+00 + -4.3768760293380291e+00 -4.9300932091644940e+00 -7.8232284340615834e+00 + id 12057 + loc 1.8263366818428040e-01 5.2732473611831665e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5768340381925526e-01:3.7918307558676606e-01:5.6025769476832132e-02:4.5767882698521711e-01:8.5784588056472610e-01:3.7472912560943122e-01:1.4746906428953641e+00:4.1707279866012492e-01:2.0614931529276248e+00:3.7569397030979368e-01:2.9051769953751529e+00:3.7762132750196808e-01:3.4410887551015943e+00 + CVs 20 + 2.1071016983376267e-01 5.9743667820683133e-01 -2.7560880902239077e-01 + 4.3848262785442349e-01 1.2020178032106290e+00 -5.1258618708396309e-01 + 6.9820061012303425e-01 1.8305645065406249e+00 -6.7747380241749011e-01 + 1.0239911865319997e+00 2.4718771584563157e+00 -7.5949275524282100e-01 + 1.4661459456011454e+00 3.0773772859566826e+00 -7.8954283341056097e-01 + 2.0572841614807977e+00 3.5700838963653960e+00 -8.3652186216622126e-01 + 2.7882039466997535e+00 3.8549811411925656e+00 -9.5343857610219018e-01 + 3.5906553043764418e+00 3.8401998853792136e+00 -1.1529033641483584e+00 + 4.3576563672268831e+00 3.4757540196596963e+00 -1.4123956535737998e+00 + 4.9884448658521663e+00 2.7380729250865534e+00 -1.6528443421755616e+00 + 5.3591080944892013e+00 1.6688274201658966e+00 -1.7308982789687131e+00 + 5.3928474637745545e+00 4.9780114901794659e-01 -1.5478555904410749e+00 + 5.1645178409394834e+00 -4.9423454049375287e-01 -1.1786588000976328e+00 + 4.8216988932412850e+00 -1.1791022246561367e+00 -7.9773325686241547e-01 + 4.5004896186397012e+00 -1.5751778720360818e+00 -5.2562686604423525e-01 + 4.3641184570544969e+00 -1.7447405854595555e+00 -3.9443301038527800e-01 + 5.2785802392804371e+00 -1.0010623125204900e+00 3.0261302011137142e-01 + 5.3408017234897276e+00 -1.6849868482815045e-01 4.6617042082909987e-01 + 5.2503024533168450e+00 1.3478409323535223e-01 6.3277565872495944e-01 + id 12058 + loc 8.0437231063842773e-01 2.7299460768699646e-01 1053 + blend 0.0000000000000000e+00 + interp 4.3125927991557234e-01:4.3125496732277319e-01:1.7243146044721824e-01:3.1349368435832442e-01:9.2283564685339359e-01:2.9224026370171619e-01:1.8158663410241911e+00:4.3033270820848024e-01:2.5869745497845598e+00:2.8309315700407101e-01:3.0029091020420875e+00:2.9906233135945981e-01:3.8486561398922432e+00 + CVs 20 + 1.5435054404250825e-01 3.6753196985654013e-01 -1.2932005815644362e-01 + 3.2003231684472733e-01 7.2395521723602663e-01 -2.4530036207384021e-01 + 5.0255873755061886e-01 1.0702034259965734e+00 -3.5859655376637312e-01 + 7.0838926381267009e-01 1.4002635957765508e+00 -4.7565139561799208e-01 + 9.4413363817685347e-01 1.7015740493914104e+00 -5.9773757389476934e-01 + 1.2115616720509428e+00 1.9608112921703389e+00 -7.2530777900487453e-01 + 1.5064814112784877e+00 2.1638421079254693e+00 -8.5915355373184288e-01 + 1.8221609785666373e+00 2.2999446242061246e+00 -9.9855825758132999e-01 + 2.1578802053341173e+00 2.3653525887677516e+00 -1.1362228404289088e+00 + 2.5195395704856360e+00 2.3613329527913320e+00 -1.2615345453148792e+00 + 2.9049600568183478e+00 2.2727667494933463e+00 -1.3593373115090834e+00 + 3.2680830634253821e+00 2.0642387992657234e+00 -1.4104807331624412e+00 + 3.5286370992482943e+00 1.7273132305553525e+00 -1.4289937757250317e+00 + 3.6100773325287356e+00 1.2787215392313014e+00 -1.4553711663940641e+00 + 3.4967113820116915e+00 7.2277946048694841e-01 -1.4791657786848671e+00 + 3.2465204462345683e+00 5.0179250216572505e-02 -1.3883315888301677e+00 + 2.9361268786342527e+00 -6.6776829114411063e-01 -1.0159948719676823e+00 + 2.6726119395301087e+00 -1.1831063963324335e+00 -3.4383446009469643e-01 + 2.6185461226163333e+00 -1.3012343678549625e+00 1.2661296383951681e-01 + id 12059 + loc 4.9353206157684326e-01 9.9686361849308014e-02 406 + blend 0.0000000000000000e+00 + interp 4.2657775062920528e-01:3.0330070913203944e-01:2.0111226029998319e-01:2.8902832877777451e-01:1.1148106152333725e+00:3.7775046836307818e-01:1.9693175298986838e+00:4.2657348485169899e-01:2.4926318474700784e+00:3.1086799617457828e-01:2.9995831652235143e+00:4.2228969052812154e-01:3.9006268329817222e+00 + CVs 20 + 6.9728985627573820e-02 1.3389131664385007e-01 -8.9431808657604597e-02 + 1.4285417221792907e-01 2.4333459903340379e-01 -1.4658463265908189e-01 + 2.1077572859969076e-01 3.4264054178146952e-01 -1.9853186152278951e-01 + 2.7115771123460319e-01 4.4388932854838153e-01 -2.5958665499822198e-01 + 3.2311151728889914e-01 5.4685707426746410e-01 -3.3217697264065071e-01 + 3.6576298421310766e-01 6.5054669494525386e-01 -4.1760727636763273e-01 + 3.9874914404149486e-01 7.5358168631866773e-01 -5.1584833051901047e-01 + 4.2295031754835549e-01 8.5475955905735101e-01 -6.2529181321820637e-01 + 4.3974641823217958e-01 9.5295861765989520e-01 -7.4371291476398682e-01 + 4.4819630014803219e-01 1.0461756625612799e+00 -8.6935667416245754e-01 + 4.4466412825055368e-01 1.1316227686224283e+00 -9.9949773206721571e-01 + 4.2674977893660582e-01 1.2075416482976347e+00 -1.1287895850289003e+00 + 3.9656076754552116e-01 1.2742296740062500e+00 -1.2514515994652371e+00 + 3.5823321655364943e-01 1.3322977326768961e+00 -1.3635526288419488e+00 + 3.1512865792989841e-01 1.3816251424493184e+00 -1.4601789828036402e+00 + 2.7163980500722024e-01 1.4226560185717831e+00 -1.5346416416585058e+00 + 2.3384678508745388e-01 1.4564523825934246e+00 -1.5841525845688056e+00 + 2.0603810441314624e-01 1.4835608015729980e+00 -1.6129302209792011e+00 + 1.6980716909707366e-01 1.4873931201797150e+00 -1.6146558297211671e+00 + id 12060 + loc 7.7865928411483765e-01 6.8470537662506104e-02 1076 + blend 0.0000000000000000e+00 + interp 4.1658257956469819e-01:3.5139735281801476e-01:6.3311588987556711e-01:3.4918058587921952e-01:1.0046568888197909e+00:3.7277155762307856e-01:1.9027665066389745e+00:4.1657841373890253e-01:2.2119451421131107e+00:3.7636971180623613e-01:2.9880705868033264e+00:3.1511932789040537e-01:3.5588560844543893e+00 + CVs 20 + -1.8386853359485145e-01 3.2634659196381932e-01 2.1977595741519484e-01 + -3.8869433567193679e-01 6.3846970980877749e-01 4.4339242594304368e-01 + -6.0498200484378573e-01 9.3053809264554510e-01 6.8578654884390600e-01 + -8.1807102864093284e-01 1.1977212449658603e+00 9.5660695857774058e-01 + -1.0124068235371095e+00 1.4299049562089656e+00 1.2546250483563515e+00 + -1.1878773088980794e+00 1.6162980849181896e+00 1.5659129465464359e+00 + -1.3619127649595177e+00 1.7578808870664040e+00 1.8782087303447617e+00 + -1.5519206084663932e+00 1.8651097011026747e+00 2.1849446886352690e+00 + -1.7649145609044243e+00 1.9490670225165025e+00 2.4779484235006439e+00 + -2.0049000466918661e+00 2.0170256253799108e+00 2.7533140668945140e+00 + -2.2831957878763682e+00 2.0653198048580874e+00 3.0173377722721861e+00 + -2.6163719700338448e+00 2.0673124511419934e+00 3.2840772826329880e+00 + -2.9994762583860903e+00 1.9579067070510601e+00 3.5717318976528563e+00 + -3.3601244495375542e+00 1.6673619543897618e+00 3.8751361492741938e+00 + -3.6155156173854492e+00 1.2095988692072672e+00 4.1609912182530611e+00 + -3.7325668280479167e+00 5.9099444427862768e-01 4.4192791165148719e+00 + -3.5536188093404140e+00 -2.5701159798278117e-01 4.6372031961827451e+00 + -2.8282652718186814e+00 -1.0140656715657281e+00 4.8154376355110360e+00 + -2.5284444041061906e+00 -1.1970243388697552e+00 5.0266241978295652e+00 + id 12061 + loc 5.1140743494033813e-01 8.8279795646667480e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8854487394456305e-01:3.2430767734220167e-01:7.6694213301578107e-01:3.7073640095900212e-01:1.4966239360625266e+00:3.5121288147441349e-01:2.3186991410628144e+00:3.8854098849582364e-01:3.0438803670051970e+00:2.9858600363910115e-01:3.9858307160465674e+00 + CVs 20 + -1.7411210605845423e-01 3.1455692297380994e-01 2.8293409882237991e-01 + -3.4865942994674071e-01 6.1878298992781799e-01 5.1536557756545631e-01 + -5.0856890344640915e-01 9.3963886869786750e-01 7.3935750006525358e-01 + -6.5741930581170649e-01 1.2878267573608313e+00 9.6442551107279284e-01 + -8.2061962447528825e-01 1.6603625260123083e+00 1.1707134436326634e+00 + -1.0242491136779599e+00 2.0474325651719045e+00 1.3309864283943886e+00 + -1.2866163580440870e+00 2.4292737879767250e+00 1.4078943597813416e+00 + -1.6070899682237894e+00 2.7696890451773060e+00 1.3450304579196020e+00 + -1.9318908113945361e+00 3.0006506531001671e+00 1.0865305274102870e+00 + -2.1674869007065651e+00 3.0696699294194008e+00 6.7006501683079445e-01 + -2.2941860414553914e+00 2.9725419970752585e+00 1.7525716355962961e-01 + -2.3410615532408694e+00 2.6757259805768343e+00 -3.3035718136530678e-01 + -2.3349990199335844e+00 2.1966226718364830e+00 -7.3914637937195604e-01 + -2.2834218080120148e+00 1.7000596186168253e+00 -1.0274087371009397e+00 + -2.1874364513359450e+00 1.3359865526770829e+00 -1.2812789885077245e+00 + -2.0879731680406137e+00 1.1908797045921653e+00 -1.5328756979763556e+00 + -2.0556053778459087e+00 1.2691731992415543e+00 -1.7224081126230963e+00 + -2.0759182048131444e+00 1.3995898006116061e+00 -1.8329938265794568e+00 + -1.9598133886665634e+00 1.3237766874451504e+00 -2.1406520272903404e+00 + id 12062 + loc 9.7628754377365112e-01 4.2265143990516663e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7507292425256342e-01:3.0389487879802546e-01:1.0878028131819262e-02:4.7506817352332092e-01:4.9860335571243342e-01:3.8284630435679423e-01:1.0610666480402466e+00:3.0060689411165858e-01:2.0111781893010590e+00:3.9207705656969366e-01:2.6770070929343008e+00:3.4453644957810481e-01:3.0269599362948494e+00 + CVs 20 + -1.8237505883480346e-01 1.3544862884783032e-01 2.2715760881837027e-01 + -3.3543805015484218e-01 3.2625483851746678e-01 4.7244514374583546e-01 + -4.7388663059853575e-01 5.4626074773082589e-01 7.1787611516474770e-01 + -6.1247165693058259e-01 7.6187945856740091e-01 9.5398625337339216e-01 + -7.6213812048269147e-01 9.3604310680080927e-01 1.1818499053217564e+00 + -9.2181355538037801e-01 1.0340719804307272e+00 1.3972888875328455e+00 + -1.0701058845250646e+00 1.0343697137954977e+00 1.5786008057886751e+00 + -1.1966466701617038e+00 9.4635796992242871e-01 1.7087233886489608e+00 + -1.3340815796100323e+00 7.8718737695422525e-01 1.7948069827882069e+00 + -1.5193965536314191e+00 5.5580113231934403e-01 1.8367321797219676e+00 + -1.7414277650065102e+00 2.6426353037993838e-01 1.8145694149236349e+00 + -1.9503867301891336e+00 -5.7929708791511159e-02 1.7113080631982223e+00 + -2.1073179894894603e+00 -3.8895231216254628e-01 1.5323518961088940e+00 + -2.2561967536927758e+00 -7.3926459595314908e-01 1.3136363004472553e+00 + -2.5106207525100865e+00 -1.1266772244205951e+00 1.0949332730690791e+00 + -2.9851830145423515e+00 -1.4980042295486879e+00 9.0062927423000261e-01 + -3.7615432472179604e+00 -1.6707105379856508e+00 7.8919173067557213e-01 + -4.5836948248742289e+00 -1.5039073448060385e+00 9.0429790325892623e-01 + -5.0298471713986519e+00 -1.5227719084001126e+00 9.8429287073875027e-01 + id 12063 + loc 4.2412492632865906e-01 2.4839623272418976e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3810811267657729e-01:2.6012339907152859e-01:4.0679894235387426e-01:2.9144987942037576e-01:1.0698815329278584e+00:3.9926488719775610e-01:1.7896695665609590e+00:4.3810373159545052e-01:2.2228590735678049e+00:3.3630165146464219e-01:2.9445849737550844e+00:2.9828048315162931e-01:3.7930609442485386e+00 + CVs 20 + 5.7897898320997077e-01 4.3773277793288778e-01 -1.4427277970904795e-01 + 9.3927021545325751e-01 7.5087230389197113e-01 -2.7606990334702058e-01 + 1.2555857024991046e+00 1.0196628705341408e+00 -4.0056382800092466e-01 + 1.5835400456678710e+00 1.2839038228116491e+00 -5.2756605601404616e-01 + 1.9100933805525551e+00 1.5380298589024544e+00 -6.6725798313514173e-01 + 2.2187092449612886e+00 1.7734525744586589e+00 -8.3398795050033558e-01 + 2.4886444030276467e+00 1.9733386016260543e+00 -1.0446098902128356e+00 + 2.6965106569749882e+00 2.1087554716365817e+00 -1.3143676316895712e+00 + 2.8161764113249164e+00 2.1416107765452117e+00 -1.6419498493971521e+00 + 2.8343702760021889e+00 2.0508780127232309e+00 -1.9850399741816649e+00 + 2.7771795278692863e+00 1.8697362907883568e+00 -2.2938497164035336e+00 + 2.6796769173719190e+00 1.6453004551742134e+00 -2.5700248509022332e+00 + 2.5562703468440393e+00 1.3947595587973369e+00 -2.8341728841765099e+00 + 2.4187300541136367e+00 1.1207734605644502e+00 -3.0933051849044384e+00 + 2.3128997302066829e+00 8.2927493947947450e-01 -3.3345174828302753e+00 + 2.3420295726651910e+00 5.4513669051882552e-01 -3.5216847638152555e+00 + 2.5461808833213455e+00 3.1068281632308270e-01 -3.6299908259931875e+00 + 2.7723530307388526e+00 4.1841057721987096e-02 -3.7229477519513159e+00 + 2.8137596945009320e+00 -4.4385590239328643e-01 -3.9506414929030593e+00 + id 12064 + loc 3.7285986542701721e-01 1.3425779342651367e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9120866780687724e-01:3.9120475572019919e-01:2.5789741561222479e-01:3.4958678909390317e-01:9.6366100350037420e-01:3.2517864723944051e-01:1.4674158355703479e+00:2.6233432892675412e-01:2.0009705697413298e+00:2.7261281198229037e-01:2.7897007680093120e+00:3.2117072115439493e-01:3.2690608880488186e+00:2.5730239730536852e-01:3.9719198217310319e+00 + CVs 20 + -1.0342797911018053e-02 3.1258174342258904e-01 -2.4742404078710013e-02 + -5.8328362294187752e-02 6.0479913085113890e-01 -4.3841834088667070e-02 + -1.2724103023780842e-01 9.0158656827287653e-01 -7.7053227223375861e-02 + -2.0371053616383133e-01 1.2033582906038949e+00 -1.3233071431932891e-01 + -2.9053252556828502e-01 1.4989790834744134e+00 -2.1288658482616507e-01 + -3.8869333764311853e-01 1.7731082898123809e+00 -3.1554604909961897e-01 + -5.0269662194613163e-01 2.0105024595217449e+00 -4.3451135612239278e-01 + -6.3815068260213426e-01 2.1998053207921742e+00 -5.6399741318657137e-01 + -7.9783539868411890e-01 2.3350103860394960e+00 -6.9871575796833540e-01 + -9.8324703575700967e-01 2.4104883717010370e+00 -8.3559541395201575e-01 + -1.1901542881221701e+00 2.4157055760684178e+00 -9.7182993837680176e-01 + -1.4048950521767212e+00 2.3407606556545955e+00 -1.1035096248500609e+00 + -1.6124579870165379e+00 2.1830584895551737e+00 -1.2290162732305658e+00 + -1.8040229067765559e+00 1.9454148209840150e+00 -1.3502210547970550e+00 + -1.9756866070957950e+00 1.6294477824348594e+00 -1.4704469282756936e+00 + -2.1037794611355523e+00 1.2367001919981113e+00 -1.5872156671078825e+00 + -2.0974056319596475e+00 8.0007464931770178e-01 -1.6752826224194242e+00 + -1.8756986748936373e+00 4.3721301710554827e-01 -1.6957007239935979e+00 + -1.6193708556209045e+00 2.7079298959920006e-02 -1.7251630613642408e+00 + id 12065 + loc 8.6989980936050415e-01 1.2247485667467117e-01 416 + blend 0.0000000000000000e+00 + interp 5.4169534803409847e-01:4.6319913300560833e-01:8.3761174789231951e-04:3.6642073694591132e-01:5.2415386814886722e-01:3.9923024911473554e-01:1.1555598243400931e+00:4.3269548332797025e-01:2.0255179556107863e+00:2.6115922711194461e-01:2.9017792125802777e+00:5.4168993108061814e-01:3.6198656335712851e+00 + CVs 20 + -5.4026306251902290e-01 2.3190971846028238e-01 5.3553392811613962e-02 + -9.5812684403285009e-01 3.5680768085502423e-01 1.2926124223239602e-01 + -1.3581900577288211e+00 4.4040416166458857e-01 1.9067449763325173e-01 + -1.7910000151147658e+00 4.9821509134047570e-01 2.2782979765991118e-01 + -2.2496854674819668e+00 5.1845387909175045e-01 2.3197183044377523e-01 + -2.7224934280687876e+00 4.9251372044935104e-01 1.9259446013904857e-01 + -3.1950803924504307e+00 4.1522792468435699e-01 1.0350142013153962e-01 + -3.6521811555328747e+00 2.8476790925922368e-01 -3.3470608499353127e-02 + -4.0788297198228589e+00 1.0459170928144279e-01 -2.1261005655765675e-01 + -4.4631704296535455e+00 -1.1877903752097385e-01 -4.2311162414024572e-01 + -4.8015642323319820e+00 -3.9075189216545825e-01 -6.2537082179780934e-01 + -5.0937976943643468e+00 -7.3135664549616330e-01 -7.3873001124200166e-01 + -5.3192208379038171e+00 -1.1326934636995856e+00 -7.0815439574062800e-01 + -5.4569118920290229e+00 -1.5485408738003297e+00 -5.7451351575496257e-01 + -5.5123261666903201e+00 -1.9465407423258403e+00 -3.9951769168255619e-01 + -5.4901251858995153e+00 -2.3060833011035622e+00 -1.9699131192999364e-01 + -5.3987979152498351e+00 -2.6073997486625400e+00 2.7005211031054799e-02 + -5.2761664405244426e+00 -2.8535632989625555e+00 2.4393144310056136e-01 + -5.3187414507290640e+00 -3.1595885454277601e+00 3.4706359001856213e-01 + id 12066 + loc 7.0578533411026001e-01 6.5770410001277924e-02 397 + blend 0.0000000000000000e+00 + interp 5.4814982232541565e-01:3.4882962464122702e-01:1.2800154799165986e-01:2.9911762134960646e-01:1.0000138983656639e+00:3.2762307635836330e-01:1.6088726448270587e+00:4.2784082097783205e-01:2.0091370650799045e+00:5.4814434082719243e-01:2.4119693190350384e+00:4.9701598672307684e-01:3.0064662793194112e+00:5.0742953698432980e-01:3.4388771506446769e+00 + CVs 20 + -1.1187882382208352e+00 3.1999072882575058e-01 3.0708362367876796e-01 + -1.8781372459717856e+00 4.2501385297662775e-01 5.6075053612617731e-01 + -2.5176948831749746e+00 4.4332366440544835e-01 7.9029327190588849e-01 + -3.1543631706677147e+00 4.1827913471352329e-01 1.0174054097355263e+00 + -3.7770458960464879e+00 3.4416384410089507e-01 1.2394670563154224e+00 + -4.3766654742230200e+00 2.2010349466425250e-01 1.4584155700181449e+00 + -4.9423169747865829e+00 4.9883518177811781e-02 1.6774178468482168e+00 + -5.4543721032752437e+00 -1.5640490722560174e-01 1.8939209010624616e+00 + -5.8992355074830565e+00 -3.8449380066153094e-01 2.1028112192745874e+00 + -6.2787241956598709e+00 -6.2048731560415993e-01 2.3010195612389168e+00 + -6.6053117870222158e+00 -8.5548770714579392e-01 2.4887021056502387e+00 + -6.8928292253376071e+00 -1.0909109172704325e+00 2.6720280971334516e+00 + -7.1496349236338066e+00 -1.3394652376611307e+00 2.8611891364045379e+00 + -7.3785272697984023e+00 -1.6198431689590997e+00 3.0594337629665587e+00 + -7.5786138088651587e+00 -1.9472742696784731e+00 3.2632911140859751e+00 + -7.7443560457674439e+00 -2.3263922307197502e+00 3.4758097565623323e+00 + -7.8641498309939317e+00 -2.7518381882428979e+00 3.7061551601433962e+00 + -7.9217661316351569e+00 -3.2135376130615998e+00 3.9471178450292168e+00 + -7.8196233544269207e+00 -3.6891550172507088e+00 4.1244407610954426e+00 + id 12067 + loc 6.7338384687900543e-02 6.5232354402542114e-01 411 + blend 0.0000000000000000e+00 + interp 5.5183284032517654e-01:2.5753926065873456e-01:2.7407973725428769e-01:5.5182732199677331e-01:1.1035127220532819e+00:5.5021576210952705e-01:1.6724985414792892e+00:3.9582958329932405e-01:1.9999398087167117e+00:3.8338493312258320e-01:2.4978033261287971e+00:3.2963877368693406e-01:3.0170037511717553e+00:4.1144896533045006e-01:3.7088377966836057e+00 + CVs 20 + 9.6267939635281385e-01 2.5856192270639311e-01 -2.3617941040117091e-01 + 1.6398914923522154e+00 3.9038996455126573e-01 -4.8446413409160488e-01 + 2.2719465457329107e+00 4.9086810827681826e-01 -7.5633485729557293e-01 + 2.9290446997197996e+00 5.7924952467482194e-01 -1.0622848463482499e+00 + 3.5720427211404222e+00 6.2443481133536227e-01 -1.4012886653571253e+00 + 4.1599080851547168e+00 6.0180834301282049e-01 -1.7696518711733653e+00 + 4.6761868323640474e+00 4.9833990040666909e-01 -2.1594784345634301e+00 + 5.1426790750627234e+00 2.9640702729621426e-01 -2.5628175570495726e+00 + 5.5876389404991480e+00 -3.9360386633557676e-02 -2.9676993432180332e+00 + 6.0059100616066736e+00 -5.4382395569940978e-01 -3.3414304801713364e+00 + 6.3590849201337791e+00 -1.2055093864519271e+00 -3.6306284884370847e+00 + 6.6213748167132955e+00 -1.9487085272636691e+00 -3.8077327712439097e+00 + 6.8067149427049936e+00 -2.7139377311558546e+00 -3.9186913425340020e+00 + 6.9463674583454917e+00 -3.4909439226521144e+00 -4.0499308567231926e+00 + 7.0951929029697087e+00 -4.2732616307429332e+00 -4.2637652293578006e+00 + 7.3311349706508677e+00 -5.0488614756795949e+00 -4.5477943748442362e+00 + 7.6829978352298678e+00 -5.7898530023446213e+00 -4.8194766115172740e+00 + 8.0957127320627809e+00 -6.4759037869792326e+00 -5.0004357802162396e+00 + 8.4688588635377720e+00 -7.1432218893894284e+00 -5.1272937196348183e+00 + id 12068 + loc 4.8745983839035034e-01 8.8279795646667480e-01 1085 + blend 0.0000000000000000e+00 + interp 4.1311664111336210e-01:2.7522561745240132e-01:8.0026812971413896e-01:3.4260319772957520e-01:1.4993286577212577e+00:4.1311250994695098e-01:1.9924814920941383e+00:2.9615615549639523e-01:2.3012596124869047e+00:3.5351860495864762e-01:3.0580503946506519e+00:2.6772703274884835e-01:3.9721860489207228e+00 + CVs 20 + -1.1039129535246756e-01 3.7359873329091003e-01 2.8053121339211973e-01 + -2.5841124382554137e-01 6.7441795200563992e-01 4.9132426624992409e-01 + -4.2855269880569868e-01 9.4276945860173555e-01 6.7969614872326989e-01 + -6.1416319455292645e-01 1.1947157879203552e+00 8.6220196832948459e-01 + -8.2066213185829096e-01 1.4309341370238466e+00 1.0287070166440242e+00 + -1.0568843271060133e+00 1.6520662366359793e+00 1.1667215107187623e+00 + -1.3350892074038101e+00 1.8535963464899496e+00 1.2578180674645847e+00 + -1.6618572434597383e+00 2.0183793840812689e+00 1.2779074343035481e+00 + -2.0172238120415309e+00 2.1175549979167103e+00 1.2146161622645320e+00 + -2.3592211192270423e+00 2.1361412642364819e+00 1.0926403143696877e+00 + -2.6699240952288483e+00 2.0880268141393952e+00 9.5295929357771825e-01 + -2.9580307124141099e+00 1.9895155105561613e+00 8.2049301152621279e-01 + -3.2292976573639729e+00 1.8534193904025602e+00 7.1467474927195473e-01 + -3.4794396794954077e+00 1.7070058501647243e+00 6.5894089332790462e-01 + -3.7025854763691903e+00 1.5867254003088687e+00 6.6669358610682550e-01 + -3.8984038169600717e+00 1.5262590049271101e+00 7.2211750222084625e-01 + -4.0554035292239154e+00 1.5790086662668164e+00 7.6967355010970517e-01 + -4.1836268787141861e+00 1.6868172483712027e+00 7.8785590003493255e-01 + -4.5117193412323218e+00 1.4776339763310362e+00 1.0734669589900334e+00 + id 12069 + loc 7.5159478187561035e-01 4.6518689393997192e-01 406 + blend 0.0000000000000000e+00 + interp 4.1342081673181114e-01:3.9254329048589082e-01:3.9946686274013654e-02:4.1341668252364383e-01:8.8482595239824013e-01:3.2035561897259296e-01:1.2765553535191241e+00:3.5527251212144700e-01:2.0007585322593893e+00:2.5931047701418264e-01:2.7247423344742070e+00:3.7765016179223437e-01:3.4171271309551692e+00 + CVs 20 + -2.4061600517845241e-01 1.8699707640385055e-01 3.9657586530915570e-02 + -3.8634596644254815e-01 2.9774266810458705e-01 6.3554473898502439e-02 + -4.9297482473563486e-01 3.7406805889613959e-01 8.0204182581736977e-02 + -6.0452244488305296e-01 4.4827461931533286e-01 1.0012702355909495e-01 + -7.2314222139067119e-01 5.1972910961963481e-01 1.2304267339102890e-01 + -8.5131390149890485e-01 5.8719759398888793e-01 1.4909110435418788e-01 + -9.9231172657221023e-01 6.4880909393279351e-01 1.7904368247929101e-01 + -1.1484054934142971e+00 7.0219210583125879e-01 2.1329330472840846e-01 + -1.3161903005423603e+00 7.4541842652148427e-01 2.4984745054361543e-01 + -1.4868679620618455e+00 7.7776200298575082e-01 2.8553300417890681e-01 + -1.6563483322851158e+00 7.9853977059948955e-01 3.2109916313344244e-01 + -1.8307982418324267e+00 8.0524099808541660e-01 3.6219051065640379e-01 + -2.0152942640308811e+00 7.9570031725666945e-01 4.1256662592451249e-01 + -2.2040956073260403e+00 7.7213873545335754e-01 4.6956353989491106e-01 + -2.3872083543834361e+00 7.3975618444888780e-01 5.2893451457577212e-01 + -2.5614253781083351e+00 7.0193979668791817e-01 5.9023891322499156e-01 + -2.7308370832050781e+00 6.5829013775686784e-01 6.5525357978882415e-01 + -2.8988661951933068e+00 6.0695395763689797e-01 7.2376940204476103e-01 + -3.0675514049636732e+00 5.4301645597523773e-01 7.9431992783058525e-01 + id 12070 + loc 1.5204529464244843e-01 8.3017259836196899e-01 403 + blend 0.0000000000000000e+00 + interp 4.3582347922906028e-01:3.3416470604412396e-01:5.7403434319791646e-01:3.3204959603300377e-01:1.2073941312513754e+00:3.1225488214830971e-01:2.0507729980597773e+00:2.7337056732253817e-01:2.8613081157518243e+00:2.9042694679251613e-01:3.4077670340772186e+00:4.3581912099426801e-01:3.9800006847415648e+00 + CVs 20 + 3.4451335569373687e-02 1.9444109531089906e-01 -8.2286619337666123e-02 + 4.8097919116633775e-02 3.6339938901631375e-01 -1.7347182687089724e-01 + 5.9074144889944086e-02 5.2211762133169648e-01 -2.6929900898194092e-01 + 7.5112262317590051e-02 6.8134245628499501e-01 -3.6877019721927146e-01 + 9.2635645704960579e-02 8.4404146330050711e-01 -4.7173828139569662e-01 + 1.0632783514981414e-01 1.0149067679596395e+00 -5.7715558635678865e-01 + 1.0895888817877553e-01 1.1986317374210409e+00 -6.8225243734779073e-01 + 9.2751349974011799e-02 1.3980418866622000e+00 -7.8217780569838469e-01 + 5.0325418791162257e-02 1.6142932736002242e+00 -8.7028073035669795e-01 + -2.7676587335971781e-02 1.8485649446928094e+00 -9.3839166823998144e-01 + -1.5499105056149898e-01 2.0990672972150284e+00 -9.7597667870019544e-01 + -3.4306343229798553e-01 2.3520142621854290e+00 -9.7102288704244311e-01 + -5.9035627188544981e-01 2.5818865506124773e+00 -9.1639251656504916e-01 + -8.8114743221672309e-01 2.7645739314957938e+00 -8.1362737222654713e-01 + -1.1893798223126963e+00 2.8880104334776653e+00 -6.7042921540267941e-01 + -1.4907830145403707e+00 2.9543081277986012e+00 -4.9432607554654617e-01 + -1.7631557800437072e+00 2.9741128247652360e+00 -2.9660434319517853e-01 + -1.9807174045592042e+00 2.9690823122278225e+00 -1.0130815266711722e-01 + -2.0919535554021333e+00 2.9861051194235273e+00 4.0123827771976150e-02 + id 12071 + loc 1.1908535659313202e-01 6.0297515243291855e-02 1076 + blend 0.0000000000000000e+00 + interp 4.3474313652004826e-01:3.0897954017564083e-01:1.8731634389223395e-01:3.0624098933747201e-01:6.4891890645876660e-01:4.0459224263384586e-01:1.0625463076409725e+00:3.5536892172628176e-01:1.9189151935940298e+00:3.3232804534032268e-01:2.6662280066718589e+00:4.3311576172806793e-01:3.0306421710288607e+00:4.3473878908868308e-01:3.6139153622997160e+00 + CVs 20 + -1.6777697072427469e-01 2.8040031776991081e-01 -2.2209190339655821e-01 + -3.1670998134736206e-01 5.7596559775466072e-01 -4.2885321268490462e-01 + -4.8520552967278707e-01 8.5994558114406794e-01 -6.3205023318475406e-01 + -6.8621131360935894e-01 1.1184657000046299e+00 -8.3343102134668023e-01 + -9.1645222391641190e-01 1.3492313526350623e+00 -1.0309924235191255e+00 + -1.1709019972205186e+00 1.5494792008615033e+00 -1.2253668453758986e+00 + -1.4455664938806678e+00 1.7169396715626317e+00 -1.4200707272625057e+00 + -1.7380281897379581e+00 1.8517516134948582e+00 -1.6178209292237848e+00 + -2.0463210798496960e+00 1.9562948814259764e+00 -1.8181849096743703e+00 + -2.3689930732922502e+00 2.0328151542507906e+00 -2.0191886474936349e+00 + -2.7061171830309805e+00 2.0812694963679719e+00 -2.2186734850760090e+00 + -3.0583413275303308e+00 2.0982127199995801e+00 -2.4134951621075120e+00 + -3.4251830388557765e+00 2.0785002133398702e+00 -2.5985644074856928e+00 + -3.8045522238917924e+00 2.0176715812332513e+00 -2.7670471867526429e+00 + -4.1950268817862888e+00 1.9115465689793798e+00 -2.9123318046854640e+00 + -4.6117375253358848e+00 1.7437308246462808e+00 -3.0370066421003252e+00 + -5.1083735247141338e+00 1.4312133841972490e+00 -3.1639493271051231e+00 + -5.6399943107454176e+00 7.5437849042783345e-01 -3.3167659504252862e+00 + -5.7229271978103222e+00 5.8191459944354706e-01 -3.3367742832577520e+00 + id 12072 + loc 4.2754530906677246e-01 7.2433918714523315e-01 1084 + blend 0.0000000000000000e+00 + interp 4.7379466603998888e-01:4.3463448567240387e-01:2.4050996992798179e-01:3.5044636641710819e-01:1.0075610189009965e+00:3.6839437124938262e-01:1.9387491912828285e+00:3.2261984692924234e-01:2.5153045693011618e+00:4.7378992809332848e-01:2.9993927039628412e+00:3.6488155143065887e-01:3.6602475090680477e+00 + CVs 20 + -2.4419081575937532e-01 2.6095080052235919e-01 3.1839211941571821e-01 + -5.0385468521174148e-01 4.6415406367809436e-01 5.7499983953403100e-01 + -7.6779401364267019e-01 6.4595254847482575e-01 8.1193508418293481e-01 + -1.0213413727498379e+00 8.1849720399930437e-01 1.0399417724108040e+00 + -1.2585560071167443e+00 9.7908304190410256e-01 1.2414729467454655e+00 + -1.4737439163528716e+00 1.1260049029826127e+00 1.4065307601296135e+00 + -1.6619286162799509e+00 1.2596741586639657e+00 1.5399974235198157e+00 + -1.8215203892164087e+00 1.3860019799719159e+00 1.6634171984453370e+00 + -1.9702156915204478e+00 1.5211710442757311e+00 1.7841152378878529e+00 + -2.1245269879906497e+00 1.6648299014503356e+00 1.8399689825097660e+00 + -2.2367549433978260e+00 1.8096364373689249e+00 1.7932638188461496e+00 + -2.2687298224144858e+00 1.9837078056221196e+00 1.6656549572418817e+00 + -2.2384048146029683e+00 2.1364570170545658e+00 1.4367971219609676e+00 + -2.1803542307670458e+00 2.0935029338940678e+00 1.1335036964069434e+00 + -2.0967580030656943e+00 1.8332480535623419e+00 8.4425812964006486e-01 + -1.9632672159494053e+00 1.5005964652510553e+00 5.7270489427904514e-01 + -1.7787826638388555e+00 1.2239932799225866e+00 2.9093200158286003e-01 + -1.5814637477514530e+00 1.0810617410395646e+00 -8.8930632758791317e-03 + -1.3796872687681108e+00 1.1091342391181074e+00 -4.1481379987913752e-01 + id 12073 + loc 8.4703838825225830e-01 1.8641239404678345e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3333882116114314e-01:3.3440006745441869e-01:5.4950538801592275e-01:4.3333448777293154e-01:9.9674010781857725e-01:2.9071406462278260e-01:1.5046902991571338e+00:3.6868686613166834e-01:2.2810832997031945e+00:2.9562834350980977e-01:3.0379638099639941e+00:2.6129859404861883e-01:3.8930526213293883e+00 + CVs 20 + -1.3740835330042067e-01 2.1460373339333011e-01 1.8676901120659559e-01 + -2.8919203389933212e-01 4.2369804670301131e-01 3.6941028186616059e-01 + -4.5326174847892509e-01 6.2991220734526010e-01 5.4508398208490183e-01 + -6.2743005871129887e-01 8.3583027899484330e-01 7.1459288137318755e-01 + -8.1034470149972759e-01 1.0445600303058995e+00 8.8312403393749994e-01 + -9.9860546526063465e-01 1.2590895791907917e+00 1.0592771917094799e+00 + -1.1856972039508844e+00 1.4806646525965863e+00 1.2562400737458241e+00 + -1.3616743158173623e+00 1.7051600471938528e+00 1.4904691272830415e+00 + -1.5130362361362084e+00 1.9187905976077613e+00 1.7780608544645131e+00 + -1.6254872063872401e+00 2.0985406280329322e+00 2.1259840254464146e+00 + -1.6901378485916638e+00 2.2171364873233461e+00 2.5261735340570088e+00 + -1.7088257153336874e+00 2.2509979690194095e+00 2.9575103394197026e+00 + -1.6967712367236527e+00 2.1898212020744903e+00 3.3946489983996986e+00 + -1.6784453528718213e+00 2.0346528808615973e+00 3.8154892246606891e+00 + -1.6796577699459729e+00 1.7897864427765495e+00 4.2014933219698651e+00 + -1.7160388505911552e+00 1.4572914351266215e+00 4.5350336136893601e+00 + -1.7867712947297074e+00 1.0415901920372477e+00 4.7936903286188173e+00 + -1.8764014224719392e+00 5.7176668841212597e-01 4.9672460493845216e+00 + -1.9403802437978404e+00 1.3295477968942848e-01 5.1426250859865563e+00 + id 12074 + loc 4.9615859985351563e-02 3.0061644315719604e-01 1075 + blend 0.0000000000000000e+00 + interp 3.2783552688025086e-01:2.7741205497309279e-01:3.9756136982885149e-01:3.2783224852498205e-01:1.3056432590028351e+00:2.1449400814440520e-01:1.8875541788973966e+00:2.7318107342349540e-01:2.5855922102004700e+00:2.7735621627228763e-01:3.0024188656021980e+00:3.2761783573335101e-01:3.6042863463025574e+00 + CVs 20 + -1.2647717936601624e-01 2.7601811845871405e-01 -9.3821198822987797e-02 + -2.5637914848137555e-01 6.0091793854864606e-01 -1.6049750033039953e-01 + -3.7125357662760727e-01 9.5381619698853748e-01 -2.2130399183765437e-01 + -4.8026105032628963e-01 1.3219067072787742e+00 -2.9249027903988034e-01 + -6.0671672524528475e-01 1.6943796027080273e+00 -3.8736340377588385e-01 + -7.6417327440009364e-01 2.0492412911686841e+00 -5.2064110243777340e-01 + -9.4868462473134152e-01 2.3521231680582821e+00 -7.0720346687270486e-01 + -1.1343509319533822e+00 2.5593395532027796e+00 -9.5803560229253382e-01 + -1.2855953442992036e+00 2.6404797917545539e+00 -1.2668979884712936e+00 + -1.3936017618825167e+00 2.5988434930119615e+00 -1.6201034025325309e+00 + -1.4712675873229526e+00 2.4327814132238075e+00 -2.0099425420801680e+00 + -1.5301239307181018e+00 2.1136237476894317e+00 -2.4029803272344075e+00 + -1.5721746798481109e+00 1.6401406170891835e+00 -2.7156189895135556e+00 + -1.5792771249460942e+00 1.1254389421295841e+00 -2.9100860604141321e+00 + -1.5289469182352886e+00 6.9376105173412439e-01 -3.0887786546799374e+00 + -1.4334583014034812e+00 4.0415240730954261e-01 -3.3545756530709721e+00 + -1.3462262790770736e+00 3.0030243381931587e-01 -3.7229101491147358e+00 + -1.3004505886430331e+00 3.1887352526074175e-01 -4.1427350248965222e+00 + -1.1918816368615850e+00 7.3128351365585598e-02 -4.6451882235553672e+00 + id 12075 + loc 9.7199231386184692e-01 5.8459186553955078e-01 1048 + blend 0.0000000000000000e+00 + interp 4.6743162228972873e-01:2.5662103049883445e-01:4.6004026211836357e-01:3.0718823809652568e-01:1.0000388290924764e+00:3.0967428301831534e-01:1.7940528141983794e+00:4.6742694797350587e-01:2.6820504884825320e+00:4.3792419571506946e-01:3.1963484199868772e+00:2.5465716887351875e-01:3.9112736651450946e+00 + CVs 20 + 1.9316702398707611e-01 5.9020065427270729e-01 -5.5982882574031545e-01 + 3.9418828725267874e-01 1.1763075810639723e+00 -1.0671033360766837e+00 + 6.6955236292551135e-01 1.7644850323883818e+00 -1.4823093518766446e+00 + 1.0762094093706975e+00 2.3284816282718563e+00 -1.7631627065705309e+00 + 1.6165396072119580e+00 2.7964350950514292e+00 -1.8934443529192000e+00 + 2.2394270082396908e+00 3.1068212314054011e+00 -1.9114108145884912e+00 + 2.8821122382775601e+00 3.2249074333059822e+00 -1.8778677300643953e+00 + 3.4966773273306972e+00 3.1543606573589278e+00 -1.8417494662121565e+00 + 4.0746309255210829e+00 2.9070544442406461e+00 -1.8137089719067276e+00 + 4.6050123336851563e+00 2.4647894399732455e+00 -1.7785099358638687e+00 + 5.0325215050992052e+00 1.8188289436842453e+00 -1.7065339446706476e+00 + 5.2841415649947017e+00 9.9804017433194314e-01 -1.5507246037101292e+00 + 5.2966195905132016e+00 5.5198404915124566e-02 -1.2360703009775007e+00 + 4.9998235815666678e+00 -8.5693934532896077e-01 -6.8191951924381566e-01 + 4.4065572604497110e+00 -1.4613645925336551e+00 6.5820009874864804e-02 + 3.6821919587385601e+00 -1.6122736885143478e+00 8.3536627148967879e-01 + 2.8949113835044225e+00 -1.3469884825316845e+00 1.6059973227072031e+00 + 1.9937248541298578e+00 -4.4095573538881871e-01 2.2680900523752494e+00 + 1.8728793691659640e+00 8.0207448137287862e-02 2.1724467671846428e+00 + id 12076 + loc 4.5241606235504150e-01 8.0909776687622070e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5933754082989137e-01:4.4104767987046944e-01:5.4872818007726165e-01:3.7382609410970130e-01:1.0934736958018103e+00:4.5933294745448311e-01:2.0002514173024819e+00:3.1584649096336198e-01:2.4779763294127815e+00:2.8953412048415533e-01:3.0100776297184328e+00:2.9469511594919828e-01:3.7533045530462328e+00 + CVs 20 + 4.8301329708039603e-02 2.3424369598630601e-01 9.1829630505103538e-02 + 9.4550954010345786e-02 4.7015641994332519e-01 1.5215901025971873e-01 + 1.5429616863294493e-01 7.2300124485241224e-01 1.8357381380715962e-01 + 2.4622547370168951e-01 1.0019480306341051e+00 1.8888844236969876e-01 + 3.8021448902979094e-01 1.2990949614064193e+00 1.5538769659292173e-01 + 5.6188649863416051e-01 1.5954468397348851e+00 6.9363041325371411e-02 + 7.8799630003022969e-01 1.8641979707487888e+00 -8.1136578887651134e-02 + 1.0453457742059045e+00 2.0779486805879435e+00 -3.0266429059840516e-01 + 1.3101900505421527e+00 2.2140698696993564e+00 -5.9460671682938271e-01 + 1.5497779398257459e+00 2.2556143900765453e+00 -9.4740078445432985e-01 + 1.7309539298044689e+00 2.1930474198693677e+00 -1.3371622782699104e+00 + 1.8247735680806665e+00 2.0239789379548165e+00 -1.7189996393986424e+00 + 1.8212568523171184e+00 1.7589654927888014e+00 -2.0323884744948866e+00 + 1.7481475626001364e+00 1.4251664188521620e+00 -2.2333002743859227e+00 + 1.6444406350985858e+00 1.0564609355949588e+00 -2.3285206909631069e+00 + 1.5314167043625000e+00 6.8225173218462820e-01 -2.4133255925192323e+00 + 1.4321407928184344e+00 3.8220382083820370e-01 -2.6476346585670116e+00 + 1.4196539340686005e+00 3.1148344739101419e-01 -3.0447217377811810e+00 + 1.4970919034139185e+00 4.6525577375594929e-01 -3.2231796130884351e+00 + id 12077 + loc 1.1940239369869232e-01 7.3423916101455688e-01 1050 + blend 0.0000000000000000e+00 + interp 5.0642073375515462e-01:2.7658308931520420e-01:4.3865158388131542e-02:5.0641566954781714e-01:8.6715267287951947e-01:3.4767013278212783e-01:1.2583420018078204e+00:4.4771488320036845e-01:2.1939305701822933e+00:4.3961559572786135e-01:2.3744908786666068e+00:3.1845073368926508e-01:3.2836141218602815e+00 + CVs 20 + -1.8979060346723853e-01 4.8336855176216192e-01 -7.3278636682361209e-01 + -2.7980181848992602e-01 9.6293337451057459e-01 -1.3686952708400160e+00 + -2.3027131196630368e-01 1.4863422560455930e+00 -1.9392704327041761e+00 + 2.9442762908913123e-02 2.0646919216799144e+00 -2.4321083783448558e+00 + 5.4940872678454244e-01 2.6241461261792254e+00 -2.7773230038922310e+00 + 1.2912566723369818e+00 3.0345052419149887e+00 -2.9385647621312381e+00 + 2.1373438149621435e+00 3.1676446844785575e+00 -2.9411042252193367e+00 + 2.9228617234976983e+00 2.9658213287966633e+00 -2.8499141282669225e+00 + 3.5074948851294065e+00 2.4873812206521029e+00 -2.6969449115649411e+00 + 3.8186441960361392e+00 1.8658240315237471e+00 -2.4516409721756247e+00 + 3.8388687511906805e+00 1.2693438973749693e+00 -2.0948481851678054e+00 + 3.6400179641110042e+00 8.3769031026701857e-01 -1.6587418223326533e+00 + 3.3354120951362805e+00 6.3492794322610835e-01 -1.1979233164773038e+00 + 3.0334382991696072e+00 6.4645515592398883e-01 -7.6948620319729033e-01 + 2.7995419913889283e+00 8.0061406068635788e-01 -3.9898665975543146e-01 + 2.6483798325649093e+00 1.0172194091781961e+00 -1.0069698016177892e-01 + 2.6259942507612375e+00 1.1700453339810473e+00 9.1299421803079955e-02 + 2.7903367329777815e+00 9.8156317015950367e-01 3.4169500963726690e-01 + 2.6463139958188013e+00 1.3752465110127055e+00 2.4201061755672695e-01 + id 12078 + loc 3.6012774705886841e-01 2.3456862568855286e-01 397 + blend 0.0000000000000000e+00 + interp 4.9293012931429581e-01:3.1876864097206292e-01:4.7637633610639796e-01:3.1235420722624552e-01:1.3004513691310522e+00:3.5079032853386327e-01:2.0000094898328826e+00:4.9292520001300266e-01:2.6676251194997738e+00:3.8532279462269597e-01:3.0049536115011239e+00:3.8723338323086837e-01:3.6177342795817076e+00 + CVs 20 + -2.2827119185322872e-01 2.3110943401220557e-01 -1.2476023451611093e+00 + -4.1972192982720258e-01 2.2787254805015406e-01 -2.0938959775586858e+00 + -5.9430199943844875e-01 1.5177716670371050e-01 -2.8198160881769394e+00 + -7.6276370216611378e-01 5.6747005900405434e-02 -3.5287273802900074e+00 + -9.1789839902479753e-01 -5.6694629289153142e-02 -4.2010656767175885e+00 + -1.0607308260561512e+00 -1.8747452687726562e-01 -4.8280541944525881e+00 + -1.1959728643392658e+00 -3.3875136037592624e-01 -5.4098775327528301e+00 + -1.3277626657639883e+00 -5.2053976691166015e-01 -5.9515612346331768e+00 + -1.4598280342322538e+00 -7.4781537282409583e-01 -6.4574308289386781e+00 + -1.5957239198201663e+00 -1.0328803819047923e+00 -6.9207936880359835e+00 + -1.7375966097483446e+00 -1.3719307094011639e+00 -7.3194124108922374e+00 + -1.8901285097185863e+00 -1.7569889342493132e+00 -7.6428009605968317e+00 + -2.0590350221418570e+00 -2.1827376232211639e+00 -7.8929114990155576e+00 + -2.2428759504655105e+00 -2.6479361151063951e+00 -8.0692024858220748e+00 + -2.4298849115024894e+00 -3.1496265270597883e+00 -8.1597145101852142e+00 + -2.6088915564959381e+00 -3.6715513973197522e+00 -8.1569813653414780e+00 + -2.7688598451193114e+00 -4.1916728850407825e+00 -8.0625849514808934e+00 + -2.8997258341178913e+00 -4.6901863438466496e+00 -7.8875413339033686e+00 + -3.0133521919337274e+00 -5.2070704902193752e+00 -7.6634519907644947e+00 + id 12079 + loc 5.4040962457656860e-01 4.9079671502113342e-01 416 + blend 0.0000000000000000e+00 + interp 4.2158932784855674e-01:3.3268058397731298e-01:7.7410344275114162e-01:2.9976060292192463e-01:1.7488282906912818e+00:3.9491907827845119e-01:2.0585097810102182e+00:4.2158511195527826e-01:2.9284711655101874e+00:3.2602210059541598e-01:3.6652716938198200e+00 + CVs 20 + -6.3011922507411144e-01 1.6038064758070675e-01 1.0908768411288822e-01 + -1.0320446341223151e+00 1.9385130804540490e-01 2.1233361431788256e-01 + -1.3841955179125791e+00 1.7695499943532328e-01 3.0329914326434582e-01 + -1.7569329598947139e+00 1.4721842472927660e-01 3.7020408191126108e-01 + -2.1447692061349062e+00 1.0229598386565342e-01 4.1267527593556413e-01 + -2.5430511847809347e+00 4.0624518907418250e-02 4.3003091507350932e-01 + -2.9476246185827328e+00 -3.8275549201393422e-02 4.1982283832354250e-01 + -3.3541106427469529e+00 -1.3484194234312585e-01 3.8090133848545499e-01 + -3.7580391692946735e+00 -2.5048009358333867e-01 3.1531772172018058e-01 + -4.1537250575359312e+00 -3.8685384098568498e-01 2.2566403269313012e-01 + -4.5292371536637255e+00 -5.4325926910992672e-01 1.1550826024957173e-01 + -4.8665190241244893e+00 -7.1677202882165214e-01 4.5512391789981343e-04 + -5.1555437153089443e+00 -9.0937647992908466e-01 -8.9438544187777191e-02 + -5.4051855587416950e+00 -1.1317891510972331e+00 -1.2971265531129733e-01 + -5.6234918506761273e+00 -1.3904033681877228e+00 -1.1315071179095837e-01 + -5.7999130527281348e+00 -1.6715836551728249e+00 -4.4595495688927622e-02 + -5.9195854830908221e+00 -1.9497054318426923e+00 6.8845208710294314e-02 + -5.9822489901410227e+00 -2.2069628131802821e+00 2.2058653439264220e-01 + -6.1006277534164601e+00 -2.5631840956233312e+00 4.0547210711204573e-01 + id 12080 + loc 9.0440857410430908e-01 1.3136936724185944e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1919839304708278e-01:2.8181492953457038e-01:5.4379798846145511e-01:3.2889342999004567e-01:1.4743785966635217e+00:2.7523017147906015e-01:2.3850042725307272e+00:2.7792005672596160e-01:3.0800565343358262e+00:4.1919420106315231e-01:3.7177719851394091e+00 + CVs 20 + -1.2378269128711339e-01 3.1518674067597940e-01 2.3999679007750790e-01 + -2.6878669432659080e-01 6.0954914465928722e-01 4.6798119141417460e-01 + -4.2478511655339973e-01 8.8533640528526691e-01 6.7872867351132737e-01 + -5.7945345638942802e-01 1.1319671886448985e+00 8.6608676846714938e-01 + -7.3391735394464419e-01 1.3361619012436632e+00 1.0223717263052852e+00 + -8.8112626400319649e-01 1.4886507780312108e+00 1.1388964237609409e+00 + -1.0027005314564943e+00 1.5892655009951753e+00 1.2120401157671332e+00 + -1.0865618200902700e+00 1.6476333475169631e+00 1.2361849307813948e+00 + -1.0935603102216973e+00 1.7331332043305190e+00 1.1573910411522044e+00 + -1.0625603563376251e+00 2.0721487266402123e+00 8.7095008649950678e-01 + -1.2430986534090960e+00 2.5714330345234484e+00 6.5044246599694500e-01 + -1.4389194997678385e+00 2.8035960693905548e+00 6.6918933117112633e-01 + -1.5480202560254981e+00 2.8409171113068661e+00 7.7442214883757476e-01 + -1.5447461958639725e+00 2.7669890791543974e+00 9.0128404690771924e-01 + -1.3523275195224782e+00 2.6023260631014695e+00 9.9259157937632858e-01 + -9.9333746464921302e-01 2.3539135336100001e+00 1.0042273033662663e+00 + -4.8323626508151640e-01 1.9322765292668409e+00 8.8258169210569948e-01 + 2.8958714629740268e-01 7.3946811978891414e-01 7.6435932599429135e-01 + 3.2899606848923102e-01 6.3347159680274823e-01 7.8808537103972620e-01 + id 12081 + loc 4.3114525079727173e-01 3.1069543957710266e-01 406 + blend 0.0000000000000000e+00 + interp 4.3754446970878391e-01:4.3754009426408685e-01:2.2955025834446685e-01:3.9611199742762393e-01:8.9164875823882317e-01:4.2788171686785287e-01:1.1517438964904696e+00:4.1730744275160891e-01:1.8432714717295711e+00:2.9002466144980105e-01:2.4204785250279630e+00:3.9951477652977196e-01:3.1053025444652045e+00:2.7234441297905954e-01:3.9012093259607110e+00 + CVs 20 + -4.7646414934204365e-02 1.6714569162734758e-01 -3.8885987781398929e-02 + -9.0624545724675015e-02 2.9351971733266674e-01 -2.6957166026861351e-02 + -1.1123568010321364e-01 4.2164981526165801e-01 1.2080405837839314e-02 + -1.1673320990402533e-01 5.7127955854764356e-01 3.9538240835191057e-02 + -1.0501684962888015e-01 7.4224399883637782e-01 4.8050481510255538e-02 + -7.4631847010746696e-02 9.3194493940833278e-01 3.0048369329410296e-02 + -2.5776664186302312e-02 1.1351380259101829e+00 -2.1820098088014439e-02 + 3.9933873989544760e-02 1.3441204425418676e+00 -1.1293539550652099e-01 + 1.2412177270880154e-01 1.5514856007745328e+00 -2.4473353124051234e-01 + 2.3558325752923592e-01 1.7517915352589166e+00 -4.1622744948000145e-01 + 3.7967335559395593e-01 1.9380627685931358e+00 -6.2921782874838850e-01 + 5.4595693529924960e-01 2.0993417674196770e+00 -8.8690392300941345e-01 + 7.1657263247320890e-01 2.2257748859853157e+00 -1.1858557533981995e+00 + 8.8297111800128658e-01 2.3137493537960467e+00 -1.5166830088336249e+00 + 1.0460040412739497e+00 2.3635704068609718e+00 -1.8721095065411080e+00 + 1.2031475013739539e+00 2.3755555653449072e+00 -2.2491987866857479e+00 + 1.3441995431594094e+00 2.3502787590269345e+00 -2.6441053160586763e+00 + 1.4603109425654082e+00 2.2906899138825714e+00 -3.0465018923118214e+00 + 1.5515088494076030e+00 2.2502140702053253e+00 -3.3448701129836240e+00 + id 12082 + loc 6.8209391832351685e-01 8.8946366310119629e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4450122851568924e-01:3.2088768841131532e-01:8.7164264170838002e-02:4.0956133093512259e-01:8.8289576023645389e-01:3.2921153020616950e-01:1.2406975503732534e+00:3.4994691847421122e-01:2.0688151498072092e+00:3.6777752751306114e-01:3.0607294578033497e+00:4.4449678350340410e-01:3.8016016735329119e+00 + CVs 20 + -1.0669954493855768e-01 7.4501231100372420e-02 1.4599359052124705e-01 + -1.6911869051641543e-01 1.0926586154954361e-01 2.2971028541623165e-01 + -2.0534741858742647e-01 1.2118676075529913e-01 2.7743620769251504e-01 + -2.3962592705533389e-01 1.3379337166671373e-01 3.2717897006323154e-01 + -2.7372375980766933e-01 1.4838138346082613e-01 3.7838253697238816e-01 + -3.1067216039619217e-01 1.6589274625596684e-01 4.3049042817252753e-01 + -3.5508987602753461e-01 1.8686491996819510e-01 4.8246070162981208e-01 + -4.1178559686826544e-01 2.1108198530579625e-01 5.3193125864584290e-01 + -4.8478132584108780e-01 2.3750462148588872e-01 5.7518949382106344e-01 + -5.7683413404097816e-01 2.6492501025957121e-01 6.0796895002511742e-01 + -6.8953002031854449e-01 2.9308056240829178e-01 6.2686215524817168e-01 + -8.2410367760541481e-01 3.2305181533430966e-01 6.3045661037337042e-01 + -9.8214140077005230e-01 3.5691778496799192e-01 6.1999946158741315e-01 + -1.1657254312314749e+00 3.9687508409324063e-01 5.9923179710797414e-01 + -1.3736906502763226e+00 4.4455861689564996e-01 5.7235086927420076e-01 + -1.5986742449074498e+00 5.0137392815934778e-01 5.4244652370203505e-01 + -1.8315489349881677e+00 5.6830159649405887e-01 5.1297548009059424e-01 + -2.0630855339123491e+00 6.4587828613889109e-01 4.8793754905985409e-01 + -2.2751720259382733e+00 7.3586948737574387e-01 4.6847966240503630e-01 + id 12083 + loc 4.0752470493316650e-01 7.2433918714523315e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2751295205640727e-01:3.7262452561732601e-01:2.2423779881878314e-01:3.1919242677086052e-01:1.0218625243529182e+00:3.3546402306571782e-01:1.9142932275824420e+00:2.7373500832475262e-01:2.5193908342315998e+00:4.2750867692688671e-01:3.0002791691374275e+00:3.4404367832447025e-01:3.6376651719527016e+00 + CVs 20 + -1.3586286345967527e-01 3.9783672237423484e-01 2.8006175365164804e-01 + -2.8922502432762665e-01 7.1459313886101616e-01 4.5931662687658814e-01 + -4.5196478886453229e-01 9.8900337659373128e-01 5.9072548155621307e-01 + -6.1582441806983168e-01 1.2343753414214778e+00 6.9544418788516327e-01 + -7.7595949852850465e-01 1.4495035279958053e+00 7.7367854542661663e-01 + -9.2797375462382692e-01 1.6377017874281208e+00 8.3103912446431061e-01 + -1.0729813300199953e+00 1.8068888765154492e+00 8.7467738240715542e-01 + -1.2208911385425312e+00 1.9660647316047413e+00 9.0496603806302056e-01 + -1.3824277522663924e+00 2.1192760389642036e+00 9.0609020075787305e-01 + -1.5554107279342080e+00 2.2543640837445209e+00 8.4607732514319822e-01 + -1.7288979155978326e+00 2.3511266643521767e+00 7.0803427874430980e-01 + -1.9032826885625767e+00 2.3950032731831725e+00 4.9778062548822810e-01 + -2.0855527426473781e+00 2.3678421729488064e+00 2.2405100114597121e-01 + -2.2810915574444897e+00 2.2373337132918039e+00 -1.0712056114355639e-01 + -2.4986200442111541e+00 1.9625500362091184e+00 -4.5468252836129380e-01 + -2.7328707914976369e+00 1.5349392384003857e+00 -7.1457232332783127e-01 + -2.9779572045621268e+00 1.0100882273214571e+00 -8.1805983864734855e-01 + -3.2847618796064659e+00 4.9889381971293090e-01 -7.5702278732148476e-01 + -3.7063409940250320e+00 2.2597108094097962e-01 -5.6540812632575421e-01 + id 12084 + loc 3.9032745361328125e-01 1.0431646555662155e-01 384 + blend 0.0000000000000000e+00 + interp 4.9372210704702857e-01:3.1026534622566682e-01:7.8840720243275375e-02:4.9371716982595815e-01:6.7736944116830744e-01:3.1076363539474128e-01:1.5597036880124464e+00:4.1529391810036614e-01:2.0638478029704661e+00:3.0507294136789564e-01:3.0259732880048511e+00 + CVs 20 + -5.6040390877636093e-01 2.1428067104023163e-01 -1.0580170771134787e+00 + -1.0262566607309822e+00 2.8503344699280753e-01 -1.7149274839183617e+00 + -1.4856577383170957e+00 2.8999781230724031e-01 -2.2776030646718497e+00 + -1.9633927371894266e+00 2.5841098872065155e-01 -2.8724381236084930e+00 + -2.4345729581712954e+00 1.7121454563900040e-01 -3.4784033902612630e+00 + -2.8780918286482731e+00 2.2636367229979082e-02 -4.0673702790287320e+00 + -3.2845577874392475e+00 -1.7871638957328240e-01 -4.6143328074215813e+00 + -3.6552653288290116e+00 -4.1716953541892143e-01 -5.1044241260280385e+00 + -3.9956539420599402e+00 -6.7551809958224140e-01 -5.5313666753399309e+00 + -4.3109425306152289e+00 -9.3955295832267405e-01 -5.8953468906350119e+00 + -4.6034582810821201e+00 -1.2070892956845591e+00 -6.2016500877374483e+00 + -4.8641714808982739e+00 -1.4905335567899969e+00 -6.4518913427356921e+00 + -5.0788773169449026e+00 -1.8029177826779541e+00 -6.6476906109085068e+00 + -5.2379627707487604e+00 -2.1501962209505079e+00 -6.7997786778087441e+00 + -5.3434962961764665e+00 -2.5352912763466069e+00 -6.9194800258678386e+00 + -5.4154013166589019e+00 -2.9557354565639216e+00 -7.0107482578449991e+00 + -5.4804234320701317e+00 -3.3989212616389612e+00 -7.0674592155028444e+00 + -5.5491220009303337e+00 -3.8487943059427474e+00 -7.0733632982297721e+00 + -5.5498146315152184e+00 -4.3459651398653554e+00 -6.9251022804763256e+00 + id 12085 + loc 4.6458232402801514e-01 4.1847473382949829e-01 403 + blend 0.0000000000000000e+00 + interp 4.4200737168881010e-01:4.2984307538291971e-01:1.3282959084858215e-03:4.0599704833836825e-01:7.8218226512550171e-01:2.8342463675248070e-01:1.3242504492104779e+00:2.7692085766360225e-01:2.0867873130572705e+00:3.6020288825141095e-01:2.8923182714281594e+00:4.4200295161509323e-01:3.5928988934109789e+00 + CVs 20 + -1.3029299511800199e-01 2.4513986298305972e-02 9.9698911224736161e-02 + -2.4781292596201090e-01 7.3586189746024683e-02 1.8728686677651843e-01 + -3.4363984251715285e-01 1.3264766108061665e-01 2.6418836314097710e-01 + -4.2604331040386662e-01 1.9582340965890677e-01 3.4422120580240217e-01 + -4.9499293954947826e-01 2.6299959368283266e-01 4.2814487397041601e-01 + -5.5248626378856125e-01 3.3432546999433244e-01 5.1768647220577746e-01 + -5.9995433101068818e-01 4.1022520065490709e-01 6.1691938599430696e-01 + -6.3566813514999454e-01 4.9183277750344678e-01 7.3239709271632392e-01 + -6.5478718790802382e-01 5.8050007760705402e-01 8.6924336637305610e-01 + -6.5136506304389985e-01 6.7687237005097822e-01 1.0264172726014069e+00 + -6.2075579118146262e-01 7.8024331154259341e-01 1.1989882926252782e+00 + -5.6065109893767651e-01 8.8820868129103103e-01 1.3815623163338877e+00 + -4.7079503139043838e-01 9.9730214138953055e-01 1.5682627020268751e+00 + -3.5265623708137500e-01 1.1039668106513423e+00 1.7515410208259501e+00 + -2.0938236545655925e-01 1.2054017681139073e+00 1.9216056711913099e+00 + -4.6005769198468924e-02 1.3008790574307225e+00 2.0665384916527123e+00 + 1.3109382636080227e-01 1.3917652782678100e+00 2.1788367005113205e+00 + 3.1774910682984836e-01 1.4776939308860897e+00 2.2658091398763829e+00 + 5.4845745551950775e-01 1.5359089362281888e+00 2.4519797915125388e+00 + id 12086 + loc 9.3928617238998413e-01 1.8778951466083527e-01 1053 + blend 0.0000000000000000e+00 + interp 6.3714298273578207e-01:4.3520486760854610e-01:2.5909727540498140e-01:4.6994516433768430e-01:5.6724962211904928e-01:5.3113501763857496e-01:9.4357491499151835e-01:6.3713661130595478e-01:1.1993705980728613e+00:3.8188229821757314e-01:2.1124142597300883e+00:3.2555105338718004e-01:2.9792539375578659e+00:3.3166819454568985e-01:3.8223746451150098e+00 + CVs 20 + 2.3244162248457473e-01 3.5080389738953621e-01 -1.8415033266818681e-01 + 4.7133030057319281e-01 6.9735799777608731e-01 -3.4628614482927778e-01 + 7.2564323927939967e-01 1.0245315292482955e+00 -4.7809590164035493e-01 + 9.9839739017567974e-01 1.3143114817521566e+00 -5.7393939874309052e-01 + 1.2852063707574448e+00 1.5499516751378675e+00 -6.3319851358933099e-01 + 1.5745298507078844e+00 1.7216498984347410e+00 -6.6171955173841146e-01 + 1.8512627585783912e+00 1.8289002219548720e+00 -6.6757231084404578e-01 + 2.1023137206213947e+00 1.8811601511271860e+00 -6.5728913647673837e-01 + 2.3224881532993509e+00 1.8955332626611017e+00 -6.3499294587659394e-01 + 2.5161049980322203e+00 1.8941125726001000e+00 -6.0488788135555438e-01 + 2.6979791765935057e+00 1.8848202848122038e+00 -5.7069111383205029e-01 + 2.8701259081785002e+00 1.8471492845226520e+00 -5.3028940970653837e-01 + 3.0054235959305480e+00 1.7713462196287582e+00 -5.0052416418037726e-01 + 3.0484629867815518e+00 1.6570090984314176e+00 -5.2842759284947638e-01 + 2.9583495051232496e+00 1.4912101010446126e+00 -6.5215607431719547e-01 + 2.7581051369332994e+00 1.2236597231747437e+00 -8.5651627305311306e-01 + 2.4905113420668665e+00 8.1408440843371666e-01 -1.0403839005800746e+00 + 2.2222373294076077e+00 4.3587233159941263e-01 -1.0407271359181562e+00 + 2.1176763039313471e+00 6.2469623536933905e-01 -8.3545339442140620e-01 + id 12087 + loc 7.0674800872802734e-01 3.5926443338394165e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5032660710099400e-01:2.6471187061231349e-01:3.1179123728096125e-01:3.4759000422711722e-01:1.0102603739568419e+00:2.8432611265990942e-01:1.9836906570491091e+00:3.5032310383492299e-01:2.5174970319034573e+00:3.4195105337101528e-01:3.0344494844467520e+00:3.2164879452869577e-01:3.9007951815311914e+00 + CVs 20 + -2.6299372573351720e-01 3.2314736593832410e-01 1.7632616128551165e-01 + -5.1146443585998702e-01 6.4662407561149027e-01 3.8523983163807196e-01 + -7.4741067436581476e-01 9.4903776759964797e-01 6.3841081781327247e-01 + -9.5751214703669252e-01 1.2114976373821353e+00 9.3503324953372591e-01 + -1.1299442015653731e+00 1.4164952262766621e+00 1.2643315129856707e+00 + -1.2792086167576076e+00 1.5578033130639426e+00 1.6197067128561440e+00 + -1.4356228864695444e+00 1.6453643006224576e+00 2.0038144503698012e+00 + -1.6222053860678993e+00 1.6905542256663464e+00 2.4078813930691161e+00 + -1.8462792320472845e+00 1.7019191293056353e+00 2.8058541253698381e+00 + -2.1037723127823771e+00 1.6857604711293157e+00 3.1708596807570317e+00 + -2.3795944974901948e+00 1.6463660895245220e+00 3.4828116887788254e+00 + -2.6506472593661372e+00 1.5883854050140851e+00 3.7324897752603214e+00 + -2.9097141247871501e+00 1.4953133387992228e+00 3.9391958273178038e+00 + -3.1503251749135726e+00 1.2969297129803148e+00 4.1344563747618404e+00 + -3.3317139740249626e+00 9.6007768410484529e-01 4.3046463703111604e+00 + -3.4196423501989441e+00 5.4254641687616023e-01 4.4203776879159147e+00 + -3.3376611142149799e+00 1.2983289077789761e-01 4.4838580116466193e+00 + -2.9962955083270439e+00 -1.2235114244932954e-01 4.5237039336614178e+00 + -2.5410878322426016e+00 -2.3481804555239205e-01 4.5641169375606152e+00 + id 12088 + loc 3.0401709675788879e-01 7.4111849069595337e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5394813760069830e-01:4.1598455740593054e-01:3.5269217372295381e-02:3.7279664679759011e-01:8.6954445393213575e-01:3.5416094995549879e-01:1.5080981271145439e+00:4.5394359811932233e-01:2.1361155786452732e+00:3.5528264298811391e-01:2.9685368964183714e+00:3.1114899024536752e-01:3.4749805647568754e+00 + CVs 20 + 1.1861880827163129e-01 6.5993310502706393e-01 -2.3811945983112962e-01 + 2.3669372373429304e-01 1.3418429312061420e+00 -4.0116013237515058e-01 + 4.0147832890765234e-01 2.0624606092643090e+00 -4.4847379764991380e-01 + 6.7711741881317289e-01 2.8207979440521775e+00 -3.5122758536808574e-01 + 1.1529909900557000e+00 3.5637883235447858e+00 -1.1658676451153771e-01 + 1.8973849172560673e+00 4.1709880646327218e+00 1.8480270501056717e-01 + 2.8947500683622240e+00 4.4844894061150624e+00 4.5508901671690150e-01 + 4.0151768514579249e+00 4.3754205591169253e+00 6.1550308617750815e-01 + 5.0507634853561978e+00 3.8152162144249502e+00 6.3995894604072023e-01 + 5.7944289549657650e+00 2.8801347594676048e+00 5.9062240910011166e-01 + 6.0919317523519956e+00 1.7398807708764097e+00 6.0174072497251097e-01 + 5.9335124094938978e+00 6.3924067245865412e-01 7.6013088637776738e-01 + 5.4808855641247867e+00 -2.6173194956191248e-01 1.0152148242788013e+00 + 4.9306435773482837e+00 -9.7649958570653139e-01 1.2536499578470957e+00 + 4.4702416116816091e+00 -1.5873350413909666e+00 1.3830865568700172e+00 + 4.4477397937667158e+00 -2.1397163003335966e+00 1.3203800222513655e+00 + 5.6591179292227700e+00 -3.5380446755334694e-02 1.1281716176448553e+00 + 4.5348210152348409e+00 6.5874281739660212e-01 1.6002537548829809e+00 + 4.7125866256480533e+00 9.6916912315401105e-01 1.6871915352347762e+00 + id 12089 + loc 6.3108369708061218e-02 8.5081852972507477e-02 1078 + blend 0.0000000000000000e+00 + interp 5.0957687748589342e-01:2.8097588005007629e-01:4.1461056832032206e-01:2.9970074968997451e-01:1.4215726934271435e+00:5.0957178171711859e-01:1.9795317887654051e+00:3.5571477951715846e-01:2.6824453910741690e+00:4.6682352606992245e-01:3.0736702752207661e+00:3.5551038641667310e-01:3.9097950732857933e+00 + CVs 20 + 2.8471397458467729e-01 3.8356017782113899e-01 -1.5763451691415789e-01 + 4.8117336173196001e-01 7.0475519405170561e-01 -3.1741290716463233e-01 + 6.5636455194375942e-01 1.0063161069577808e+00 -4.8198462115812030e-01 + 8.2703709662074487e-01 1.3091731081410303e+00 -6.6020700850268443e-01 + 9.7834589790743065e-01 1.6132519827728085e+00 -8.6251368210992596e-01 + 1.0863275756916144e+00 1.9153381674714167e+00 -1.1033569018045419e+00 + 1.1199607672240619e+00 2.1979638430564123e+00 -1.3939493154866684e+00 + 1.0555701676713971e+00 2.4267827441877361e+00 -1.7307593804815531e+00 + 8.8976833114652498e-01 2.5618953451192938e+00 -2.0913458005962675e+00 + 6.4633300366382629e-01 2.5771884025918954e+00 -2.4386970726373414e+00 + 3.6436804437736858e-01 2.4767532622273025e+00 -2.7405362830087574e+00 + 7.4480326286672338e-02 2.2839815027651311e+00 -2.9834739237851204e+00 + -2.0562670279101536e-01 2.0212209080981958e+00 -3.1670993306299584e+00 + -4.6004444949717238e-01 1.7027352449649811e+00 -3.2956094226220602e+00 + -6.5360978447291829e-01 1.3287806119674095e+00 -3.3730399260458204e+00 + -6.9031707782930796e-01 8.9493984855454012e-01 -3.3937330769618517e+00 + -4.7078934373570752e-01 4.7383985386795979e-01 -3.3381169434411007e+00 + -1.4902583671848635e-01 1.2416649213505632e-01 -3.2185238727363159e+00 + -2.2925025780347830e-02 -3.2817234720378935e-01 -3.1181770000816829e+00 + id 12090 + loc 9.4600850716233253e-03 4.9695843458175659e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8535516972968303e-01:3.4520328893921520e-01:4.5006484635743516e-01:3.1615607158476838e-01:1.0821662951600828e+00:2.0472085074354476e-01:1.9986506723720372e+00:3.3136068540253444e-01:3.3089535094569271e+00:3.8535131617798574e-01:3.9982023571395073e+00 + CVs 20 + 5.2908668417373250e-01 4.2031148793377970e-01 2.7960593197441352e-01 + 9.8573982214424838e-01 7.3820709285858821e-01 5.2599468312830999e-01 + 1.4506664754873637e+00 1.0160732362829745e+00 7.5755732437106649e-01 + 1.9422940347210140e+00 1.2894344882861173e+00 1.0093205510107834e+00 + 2.4186273503783489e+00 1.5648854241205952e+00 1.3205095949699057e+00 + 2.8288463127079750e+00 1.8400970183308449e+00 1.7205174561560708e+00 + 3.1166496915856339e+00 2.1022746801244852e+00 2.2221599867592370e+00 + 3.2100168517482519e+00 2.3261711215364045e+00 2.8247810442448502e+00 + 3.0200784191299914e+00 2.4506278769523377e+00 3.4739121576356800e+00 + 2.5778641681467112e+00 2.3959694875033475e+00 4.0036041478030358e+00 + 2.1062008139741946e+00 2.1605821160710796e+00 4.3141094614417783e+00 + 1.8084456695510489e+00 1.8218426565153776e+00 4.4708127556267181e+00 + 1.6853816026929649e+00 1.4820649935109438e+00 4.5719280951885750e+00 + 1.5646623544785894e+00 1.1097859526173877e+00 4.6457183815819709e+00 + 1.3493131903709239e+00 6.3286354517573373e-01 4.6583626282507238e+00 + 1.0128033051091980e+00 1.2031757297724932e-01 4.5780641925405652e+00 + 5.5863243627736214e-01 -2.9360142506530973e-01 4.4180707768926677e+00 + 6.1146163425753325e-02 -5.2229916926456954e-01 4.2392229622623070e+00 + -1.6421286846359640e-01 -6.1438982575013257e-01 4.1727014814528678e+00 + id 12091 + loc 5.8984947204589844e-01 3.9431190490722656e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7919444167151939e-01:3.2029280545957628e-01:6.9140365509933766e-01:2.9692343615603783e-01:1.3043994466844209e+00:3.7919064972710270e-01:1.9996950155145017e+00:3.0745514329878898e-01:2.5961823342775796e+00:2.8507376269022472e-01:3.0947929409376789e+00:3.3289360695227399e-01:3.9557268525644211e+00 + CVs 20 + -3.9640005610287347e-02 3.0227969315895298e-01 1.8327239772209050e-01 + -1.0711293157622157e-01 6.0914615520217930e-01 3.7615584654508993e-01 + -1.9861316857297964e-01 9.1390154436350401e-01 5.6098974193864570e-01 + -3.1478482655060108e-01 1.2073565288723074e+00 7.2695529781526946e-01 + -4.5951095160826783e-01 1.4789056117829409e+00 8.7694000748204504e-01 + -6.3567851168164313e-01 1.7172711576265232e+00 1.0289546513627912e+00 + -8.3921936417269638e-01 1.9104012486954189e+00 1.2026042915866424e+00 + -1.0568084199998016e+00 2.0499588504040283e+00 1.4061043700892339e+00 + -1.2717925945118302e+00 2.1325621964454582e+00 1.6387763198232066e+00 + -1.4687516599069368e+00 2.1563235897773430e+00 1.8949160917478203e+00 + -1.6348067484427817e+00 2.1200532329661073e+00 2.1641775615511976e+00 + -1.7603156404137823e+00 2.0257107762425353e+00 2.4312509348819646e+00 + -1.8408518183706497e+00 1.8805397608432539e+00 2.6784254399927159e+00 + -1.8780759056673495e+00 1.6968489136512854e+00 2.8895955203156074e+00 + -1.8789655755476298e+00 1.4902322324261936e+00 3.0529645386124487e+00 + -1.8542875266149790e+00 1.2743603411468649e+00 3.1633597900593529e+00 + -1.8149353942641502e+00 1.0587296386699734e+00 3.2192526501459255e+00 + -1.7644205561992059e+00 8.5492676819046354e-01 3.2128445078749381e+00 + -1.6566166146327082e+00 6.7270493038387036e-01 3.0539226420733083e+00 + id 12092 + loc 6.2826938927173615e-02 6.5461808443069458e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8750044397884862e-01:3.7550240795540368e-01:2.9842352422378915e-01:3.8732429500062165e-01:1.0015718672597798e+00:2.8108759640692793e-01:1.4915758796200427e+00:4.1340358601485616e-01:1.9876498707287207e+00:4.1153668034602320e-01:2.7073485136188173e+00:4.8749556897440888e-01:3.0028832570313990e+00:3.3187224400907750e-01:3.6764188718929125e+00 + CVs 20 + -1.8548732663789844e-01 2.0894785715492228e-01 3.0379387664842938e-01 + -2.9138825988155959e-01 3.2259354529637740e-01 4.4571784154765959e-01 + -3.6589515132394257e-01 3.9671782791754662e-01 5.2063897250525315e-01 + -4.4053482656928028e-01 4.6911302071161909e-01 6.0676389700612321e-01 + -5.2067868407005369e-01 5.4397404794163962e-01 7.0409611588093690e-01 + -6.1378493204120987e-01 6.2339374063739073e-01 8.1200907686020318e-01 + -7.2759317717094518e-01 7.0677309054697690e-01 9.2881845296564336e-01 + -8.6815996779788573e-01 7.9161507361253558e-01 1.0520090860641576e+00 + -1.0395503136181912e+00 8.7460787317907840e-01 1.1793036052769641e+00 + -1.2442619516162581e+00 9.5238896360575309e-01 1.3088082968576757e+00 + -1.4843192662526354e+00 1.0220568876507661e+00 1.4394006721873098e+00 + -1.7621877781887474e+00 1.0795746058874334e+00 1.5706678726911694e+00 + -2.0757705124294947e+00 1.1156370010032148e+00 1.6988404791320368e+00 + -2.4090613786977984e+00 1.1164380893859729e+00 1.8137177340141410e+00 + -2.7382386047075391e+00 1.0770821397390538e+00 1.9060058586348387e+00 + -3.0534652784986931e+00 1.0095048722452034e+00 1.9775655806898915e+00 + -3.3581655445979313e+00 9.2947726690730859e-01 2.0387312083703337e+00 + -3.6546440720934426e+00 8.4516915662473224e-01 2.1022253123246819e+00 + -4.0130858567293535e+00 7.6171120387889624e-01 2.2361813609122967e+00 + id 12093 + loc 3.1638105865567923e-03 7.9222694039344788e-02 406 + blend 0.0000000000000000e+00 + interp 4.1012760957580957e-01:4.0536248040065886e-01:1.2768938479300607e-03:2.6587803008909866e-01:9.6497066354953709e-01:3.4912112029382825e-01:1.2104495882796260e+00:2.5958228846848591e-01:1.9930146623620264e+00:3.5633833959649619e-01:2.8478658592563022e+00:4.1012350829971383e-01:3.4526183860330137e+00 + CVs 20 + -2.2597830057816272e-02 1.5826669038369867e-01 5.5010690031478481e-02 + -2.3777122484083327e-02 3.1082289811117075e-01 1.3912686541230823e-01 + -3.3520223972017066e-02 4.6100241831113226e-01 2.4744407733298571e-01 + -5.0020060141079736e-02 6.0354551245967403e-01 3.8074800730077918e-01 + -6.5375387261738999e-02 7.3187613201784474e-01 5.3938834525022039e-01 + -7.0526739346343056e-02 8.3992234507332475e-01 7.2032201735514045e-01 + -5.6466392795851889e-02 9.2340841654300720e-01 9.1634703708703036e-01 + -1.6355970404172256e-02 9.8082582886160263e-01 1.1170846484037351e+00 + 5.2387666155283973e-02 1.0130737323153427e+00 1.3117793071290156e+00 + 1.4863040540318911e-01 1.0220637211065526e+00 1.4917764465147265e+00 + 2.7132692878538789e-01 1.0080491028525049e+00 1.6514322155149208e+00 + 4.2009621716416518e-01 9.6784818419224539e-01 1.7877189081017435e+00 + 5.9066634745180946e-01 9.0585345529539762e-01 1.8937197698593495e+00 + 7.7350382117795846e-01 8.6034730441034657e-01 1.9494095465621011e+00 + 9.5442759468922334e-01 8.9489620270790016e-01 1.9299071035686755e+00 + 1.1072903193625494e+00 1.0257922674703306e+00 1.8318191855449166e+00 + 1.2243892958983813e+00 1.1950013258862142e+00 1.6970379817235561e+00 + 1.3480314756151752e+00 1.3492079869776188e+00 1.5753156126984358e+00 + 1.5845311032254037e+00 1.3963571913162089e+00 1.6636560023114224e+00 + id 12094 + loc 1.5385052561759949e-01 7.9684954881668091e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4676803630491563e-01:3.4353457954940225e-01:4.4450169873870071e-02:3.2578696209889091e-01:9.6943947778119477e-01:3.6847057002570655e-01:1.6598034825793277e+00:3.6857580739655488e-01:2.2869846523511823e+00:4.4676356862455258e-01:3.0160791095275448e+00:4.1988074348914994e-01:3.6290727988053977e+00 + CVs 20 + 3.4959353929214197e-03 3.2566679810410049e-01 -1.7303098816250054e-01 + 4.2254096267847679e-02 6.5855308161659309e-01 -3.3819533442329541e-01 + 9.5421078567830886e-02 1.0040091273352136e+00 -4.9664222594347607e-01 + 1.5122816480541346e-01 1.3709054220194139e+00 -6.6062997662599565e-01 + 2.0444029479241155e-01 1.7608481982158832e+00 -8.5141449235766853e-01 + 2.4586031196369151e-01 2.1660219931689513e+00 -1.0928131074047591e+00 + 2.6540698133647667e-01 2.5696588267948681e+00 -1.4061393894993954e+00 + 2.5701883121374569e-01 2.9436955054844982e+00 -1.8053870719813057e+00 + 2.2462430953917473e-01 3.2480285888133889e+00 -2.2905925567892824e+00 + 1.9163941876655199e-01 3.4581879517364866e+00 -2.8491829028641282e+00 + 2.0241857508566927e-01 3.5825317463933271e+00 -3.4633956720284185e+00 + 2.9850800077964001e-01 3.6245113864994263e+00 -4.1162692218796781e+00 + 4.9216635950473825e-01 3.5513739769379953e+00 -4.7821248349642973e+00 + 7.7741233468068582e-01 3.3332309714535415e+00 -5.4148809094908339e+00 + 1.1385712106387780e+00 2.9901157031028243e+00 -5.9624135552385820e+00 + 1.5081306141188271e+00 2.5775100075233501e+00 -6.4226052186356970e+00 + 1.7838955399091994e+00 2.1410745064554959e+00 -6.8651659398482705e+00 + 1.9540674580463833e+00 1.7064678246877889e+00 -7.3341936610854503e+00 + 2.2096118061950705e+00 1.2805342543574871e+00 -7.7765613291779569e+00 + id 12095 + loc 6.0221332311630249e-01 2.2681358456611633e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7820369089402665e-01:3.4374350659280656e-01:1.1901285562473451e-01:3.0104899359077014e-01:9.4115521212418851e-01:2.4466925330632039e-01:1.5294805587364264e+00:3.1434566557740939e-01:2.0685363854304040e+00:4.7819890885711774e-01:2.9115003537519861e+00:2.8177225325756083e-01:3.5786684530262409e+00 + CVs 20 + -1.2307561899917317e-01 1.7580711093809534e-01 2.9869801758862657e-01 + -2.2843419493643227e-01 3.7274863229330013e-01 6.0120543400057769e-01 + -3.2605573897906315e-01 5.7025793502362854e-01 9.0116070499656742e-01 + -4.2626719665885132e-01 7.4596738640005966e-01 1.1914219374072517e+00 + -5.3586851486661358e-01 8.8627210858116434e-01 1.4675352152623835e+00 + -6.4931254322448728e-01 9.8247391284004659e-01 1.7172750236284364e+00 + -7.4070293495506800e-01 1.0296247131353353e+00 1.9137630880092251e+00 + -7.7760651094430344e-01 1.0426774107793078e+00 2.0364682621870727e+00 + -7.7326613550989554e-01 1.0552119168377665e+00 2.1161266157807272e+00 + -8.0468066360922297e-01 1.0673503336464421e+00 2.2098815596905186e+00 + -9.1041358652100635e-01 1.0593930799177094e+00 2.3202661276334844e+00 + -1.0659749056306913e+00 1.0280788274902659e+00 2.4314201509588615e+00 + -1.2470069069366370e+00 9.3457793932296451e-01 2.5598829842891373e+00 + -1.4589158934868984e+00 6.9388241996593025e-01 2.7222474362183626e+00 + -1.7466178888579877e+00 2.9406573182296530e-01 2.8743904084327507e+00 + -2.1928282140214908e+00 -1.5614915486981396e-01 2.9510261079358462e+00 + -2.8131971348412406e+00 -4.6612501371704596e-01 2.9589466144546650e+00 + -3.4744252661756443e+00 -5.6297002048482714e-01 2.9685027974931582e+00 + -4.0695085330244414e+00 -6.5059013502506602e-01 3.0161978184166980e+00 + id 12096 + loc 4.9334818124771118e-01 9.4640845060348511e-01 411 + blend 0.0000000000000000e+00 + interp 6.2184430300294413e-01:4.6635818468450152e-01:9.4388009326715427e-02:4.8227263635695561e-01:6.3207719817402619e-01:4.6741747176327897e-01:9.9823620036325733e-01:6.2183808455991418e-01:1.5008764026106789e+00:4.7225948455588068e-01:1.9712425316980160e+00:3.7283919056390563e-01:2.2852499167819440e+00:3.0152986217384831e-01:2.9606425456698293e+00:3.6177605619047737e-01:3.8283116166563431e+00 + CVs 20 + 9.9890568136942703e-01 1.6759878785267349e-01 -1.6060856008541041e-01 + 1.6605546275852496e+00 1.5649163580449180e-01 -3.2773307146912717e-01 + 2.2380561901326876e+00 6.8379298525556131e-02 -4.8694001509821727e-01 + 2.8218617790996388e+00 -5.5691859024986634e-02 -6.2656559524907851e-01 + 3.3965587545865494e+00 -2.0916453882673747e-01 -7.2918973374029949e-01 + 3.9458876161261647e+00 -3.8194940144431699e-01 -7.8666376757079537e-01 + 4.4575650866037542e+00 -5.6333481748880743e-01 -8.0499338952717536e-01 + 4.9249354612944662e+00 -7.4558820785163160e-01 -7.9892630062403569e-01 + 5.3442663737661373e+00 -9.2157035745241545e-01 -7.6007550094289200e-01 + 5.7150468380077459e+00 -1.0863783249958414e+00 -6.7513438188840769e-01 + 6.0466975422778670e+00 -1.2453308689233265e+00 -5.4155211566665074e-01 + 6.3546812316367269e+00 -1.4195466967074675e+00 -3.6824609478537290e-01 + 6.6449087348734661e+00 -1.6267546350967852e+00 -1.6617983586026075e-01 + 6.9176805986161423e+00 -1.8654352197124693e+00 5.9054191320418226e-02 + 7.1749274084794274e+00 -2.1278558453955760e+00 2.9949264373909157e-01 + 7.4206973579755289e+00 -2.4133635477651580e+00 5.3777530642440996e-01 + 7.6523974152365879e+00 -2.7259759773558487e+00 7.5782810289740843e-01 + 7.8540233213383797e+00 -3.0789587655647477e+00 9.5946663088255479e-01 + 7.9360078144597512e+00 -3.4702438172780745e+00 1.1258383825241540e+00 + id 12097 + loc 7.2195893526077271e-01 7.3640143871307373e-01 416 + blend 0.0000000000000000e+00 + interp 5.1369097157731247e-01:4.5012422611912373e-01:3.1926303619401297e-02:4.1766457219826597e-01:9.1840645612732075e-01:3.1361358767167835e-01:1.9680059378380235e+00:3.4294837296086461e-01:2.9934456387286472e+00:5.1368583466759676e-01:3.6023419260735197e+00 + CVs 20 + 7.7601233060807695e-01 2.2541088365896783e-01 -1.2897617075723783e-01 + 1.2874073016200480e+00 3.2633565596330183e-01 -2.5676898805830750e-01 + 1.7392192737347809e+00 3.8691010455858243e-01 -3.7146886257289125e-01 + 2.2187529488596085e+00 4.4152995957802554e-01 -4.7020613015311841e-01 + 2.7176830066037909e+00 4.8054784044905569e-01 -5.5009077853830357e-01 + 3.2282820902517497e+00 4.9623643542281848e-01 -6.0639457674128794e-01 + 3.7448744374909593e+00 4.8372453872884846e-01 -6.3399354523161855e-01 + 4.2641234261020813e+00 4.4106510945743072e-01 -6.2980391284672332e-01 + 4.7841118310383486e+00 3.6944170427320988e-01 -5.9439491277483958e-01 + 5.3026843944353299e+00 2.6476388754633162e-01 -5.3252498862611686e-01 + 5.8151079607936680e+00 1.1686235500845776e-01 -4.5199665798272770e-01 + 6.3106485499817238e+00 -8.8289073526327977e-02 -3.7759022733386627e-01 + 6.7699485364226888e+00 -3.6259849117639753e-01 -3.5263878759990963e-01 + 7.1758429942025295e+00 -7.0778279412600131e-01 -4.0684984965032778e-01 + 7.5162175319157107e+00 -1.1159839772184712e+00 -5.4128840859299432e-01 + 7.7701586923730579e+00 -1.5596185455619374e+00 -7.4834628846821216e-01 + 7.9175865489191750e+00 -1.9921324015524502e+00 -1.0200700767452162e+00 + 7.9632424656760570e+00 -2.3741211801812443e+00 -1.3384378231324723e+00 + 8.0495060633377449e+00 -2.8035743375497768e+00 -1.6179602546322998e+00 + id 12098 + loc 1.3373845815658569e-01 9.4433104991912842e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3591646053082589e-01:3.3458191295709283e-01:5.7400377499750166e-01:3.3260432134566958e-01:1.2066215019359308e+00:3.6529050828070775e-01:1.9965312492922622e+00:2.7330117279353688e-01:2.8640138937881936e+00:2.9175947507842270e-01:3.4097524028357591e+00:4.3591210136622061e-01:3.9807924888683242e+00 + CVs 20 + -2.2825783029554673e-02 1.6929353519904994e-01 7.7801043862992664e-02 + -2.6615619858465878e-02 3.1945502008341653e-01 1.1746267203366605e-01 + -2.2795777749486341e-02 4.4714124929343579e-01 1.3073216139521993e-01 + -2.0641574107453195e-02 5.6517532694956385e-01 1.3388881210681641e-01 + -1.8507556392926835e-02 6.6953264817849356e-01 1.2849103835577519e-01 + -1.2971748015704295e-02 7.5637054328827569e-01 1.1885842223421389e-01 + 4.5713169519901679e-04 8.2373939923770612e-01 1.0924126772084591e-01 + 2.6639692742452387e-02 8.7251213688206974e-01 1.0107783060358572e-01 + 6.8512589390840470e-02 9.0808490746028969e-01 9.4626180854308850e-02 + 1.2516255585939068e-01 9.4094946038558724e-01 9.2877275462556474e-02 + 1.9396237466792257e-01 9.8411951216657823e-01 1.0150752831557125e-01 + 2.6836633457065712e-01 1.0481416738946456e+00 1.2212327742353551e-01 + 3.4102002524397840e-01 1.1337641976101476e+00 1.4666086340615653e-01 + 4.1146880486737530e-01 1.2272717502443591e+00 1.5806713221650270e-01 + 4.8413049397852498e-01 1.3022641611792123e+00 1.3897178863507609e-01 + 5.6004886961325950e-01 1.3464254583957214e+00 8.7595368376407134e-02 + 6.3102805596161260e-01 1.3703000210209237e+00 1.8832248111066874e-02 + 6.8283160567429346e-01 1.3736153600489662e+00 -4.3461165707160743e-02 + 7.1740617616827351e-01 1.2751543696792305e+00 -9.9792061897687190e-02 + id 12099 + loc 8.9249521493911743e-01 5.9105950593948364e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8218888639406201e-01:3.4805879350345653e-01:5.0967250999335301e-01:2.8415159884258012e-01:1.0325690848601199e+00:2.8946349572715235e-01:1.9279667686316619e+00:3.1207852847033235e-01:2.3485122863875132e+00:3.8218506450519807e-01:3.0008497217108516e+00:3.5230015464075004e-01:3.9410708381772803e+00 + CVs 20 + 2.0145538611907460e-01 3.3264176476547391e-01 -1.8730854205331743e-01 + 3.9044447541591970e-01 6.8131680992574761e-01 -3.4674950577794028e-01 + 5.8400419290049044e-01 1.0341714339810975e+00 -4.6383722558935669e-01 + 7.9414697305538584e-01 1.3776709252989923e+00 -5.3596936373719373e-01 + 1.0297261698518549e+00 1.7019687306973545e+00 -5.7227245815824157e-01 + 1.3076086452353195e+00 1.9994167132183702e+00 -5.8985300655300577e-01 + 1.6421008402013491e+00 2.2578420556939767e+00 -6.1266119368293115e-01 + 2.0259408499590252e+00 2.4590766502379644e+00 -6.6715956623431261e-01 + 2.4308353956972231e+00 2.5948193075658432e+00 -7.7304154629991695e-01 + 2.8461599683107583e+00 2.6676023880030297e+00 -9.4682841387982120e-01 + 3.2836980741882806e+00 2.6396790394096392e+00 -1.2231255485495423e+00 + 3.6517492276338492e+00 2.4319632743577628e+00 -1.6085994929700813e+00 + 3.7959445586944636e+00 2.1478374988031361e+00 -1.9777481100703649e+00 + 3.7023189169148312e+00 1.9786556625759735e+00 -2.2896427504292509e+00 + 3.6089279340087583e+00 1.6287654662852107e+00 -2.7464635157114854e+00 + 3.6747502889413544e+00 6.9637208635960723e-01 -3.1127212485158315e+00 + 3.4029645633372025e+00 4.1781543743915617e-01 -3.2190513310342497e+00 + 3.1209250860153293e+00 3.3562428206835315e-01 -3.3133368923312991e+00 + 2.8876797891596944e+00 2.1831311552974730e-01 -3.4133003475705506e+00 + id 12100 + loc 6.3872313499450684e-01 3.3621326088905334e-01 1053 + blend 0.0000000000000000e+00 + interp 4.5763138620248406e-01:4.2353003761079633e-01:8.9567534038359231e-01:2.6658489426622212e-01:1.2173469176779812e+00:4.5762680988862203e-01:1.8275650704688498e+00:2.7835898217094723e-01:2.6998760218229498e+00:2.5106631451392830e-01:3.9081737231325167e+00 + CVs 20 + 3.0925370520419981e-01 3.6810098851939110e-01 -3.5886858916614855e-01 + 6.4093110365433403e-01 6.7283982440850054e-01 -6.7317464899736179e-01 + 9.7920337964473259e-01 9.2323184061361496e-01 -9.5969857026584426e-01 + 1.3161277871740720e+00 1.1105459511960372e+00 -1.2111264954251220e+00 + 1.6405400510736867e+00 1.2222547736410956e+00 -1.4115115644804441e+00 + 1.9339874341278724e+00 1.2549781394615005e+00 -1.5475565308207582e+00 + 2.1795111659446116e+00 1.2228278239677151e+00 -1.6131877761099287e+00 + 2.3668247510829414e+00 1.1526875345784853e+00 -1.6099287390732329e+00 + 2.4825998194679881e+00 1.0751949636651041e+00 -1.5462520259429895e+00 + 2.5085733009469666e+00 1.0298424828441481e+00 -1.4417829424416653e+00 + 2.4720287982438092e+00 1.0558078825396406e+00 -1.3282438585604104e+00 + 2.4628746235876764e+00 1.1228370535402230e+00 -1.2093814325352672e+00 + 2.5131261848185251e+00 1.1465928594352572e+00 -1.0473081402751878e+00 + 2.5845224629038470e+00 1.0889150119433588e+00 -8.1662912775692664e-01 + 2.6631570775567650e+00 1.0117034016273001e+00 -5.4707266863324611e-01 + 2.7900458694699419e+00 1.0025443057540921e+00 -3.3790365620026719e-01 + 2.9822084985579322e+00 1.0418035540340205e+00 -3.0484835347760808e-01 + 3.1865973017553828e+00 1.0259237287882808e+00 -3.6079183630496919e-01 + 3.3679219234852429e+00 1.1340742478812953e+00 -4.1182989733826975e-02 + id 12101 + loc 5.9449654817581177e-01 2.6628756523132324e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7919444167151939e-01:3.2316129769000673e-01:5.5420156281508248e-01:3.0032987995866584e-01:1.2483795055177642e+00:3.7198963902737786e-01:1.9593821765838642e+00:3.2961232284484421e-01:2.2734867484567727e+00:3.2128708046766752e-01:2.9557536754931104e+00:3.0544761431941037e-01:3.3597821070478018e+00:3.7919064972710270e-01:3.9996189070504453e+00 + CVs 20 + 4.7912991184458686e-02 4.0371041630376969e-01 1.7656732693833585e-01 + 6.6590236577773881e-02 8.1022242557308288e-01 3.5680635613334355e-01 + 7.3222341618752157e-02 1.2138969125069867e+00 5.1862448845810594e-01 + 6.3398744086976155e-02 1.6133236155324671e+00 6.6142903545074216e-01 + 1.9598533675802388e-02 2.0109153602175862e+00 8.1154187350801488e-01 + -8.0381353834559466e-02 2.4034895369292228e+00 1.0162002327837900e+00 + -2.3599709699157800e-01 2.7600980024139035e+00 1.3006114538970295e+00 + -4.1514503556339910e-01 3.0460671101361347e+00 1.6555734711809003e+00 + -5.8358592116391084e-01 3.2457639955423359e+00 2.0669052517576256e+00 + -7.1830476543541788e-01 3.3500232760375352e+00 2.5259571456053269e+00 + -7.9863063600465456e-01 3.3486160414188961e+00 3.0170663515621721e+00 + -8.0502583510458392e-01 3.2387335469336032e+00 3.5084157283883011e+00 + -7.2788692052084802e-01 3.0273112241370894e+00 3.9648478858888629e+00 + -5.6672562219695455e-01 2.7246221864501297e+00 4.3556944645888267e+00 + -3.2820676439104080e-01 2.3545917690175151e+00 4.6450550727452633e+00 + -3.3477368754578407e-02 1.9675954701154064e+00 4.7998372771684652e+00 + 2.8192795246983904e-01 1.6199427466957252e+00 4.8162999424107076e+00 + 5.8288532450750830e-01 1.3422199321595554e+00 4.7225170097106988e+00 + 8.3313719966953537e-01 1.1538342314613852e+00 4.5602994991524133e+00 + id 12102 + loc 8.3404695987701416e-01 6.7223888635635376e-01 403 + blend 0.0000000000000000e+00 + interp 4.9671136867620841e-01:3.6456878045911922e-01:4.5543771507441067e-01:2.7915917786298278e-01:1.0018757943562147e+00:3.0659828028895603e-01:1.7722299791175393e+00:4.4205921685471750e-01:2.5566777562939240e+00:2.7096721757348480e-01:2.9783517077672883e+00:3.5248439110067126e-01:3.4247984840624888e+00:4.9670640156252166e-01:3.9993092616450054e+00 + CVs 20 + 3.1707785403949973e-02 1.0891215593829781e-01 3.3218713010730629e-02 + 4.2251852712885951e-02 2.1257237360355122e-01 6.0507409005040376e-02 + 4.8319469390284725e-02 3.2885850728995325e-01 7.8151101764005235e-02 + 6.8606482144968228e-02 4.6512198745869249e-01 8.8989321681163469e-02 + 1.0056216540886015e-01 6.1855779910851427e-01 8.9894855847903285e-02 + 1.3999312745512671e-01 7.8418619299734371e-01 7.8055091633186066e-02 + 1.8331460675987210e-01 9.5498375203240349e-01 5.1686433826163697e-02 + 2.2668557648424953e-01 1.1227420425165029e+00 9.3961842342935586e-03 + 2.6452363347135999e-01 1.2787435551424062e+00 -5.0012553643266788e-02 + 2.8936806427612993e-01 1.4149763252008718e+00 -1.2655919721539624e-01 + 2.9303764158156864e-01 1.5250031377013276e+00 -2.1779041410687999e-01 + 2.6695806411199619e-01 1.6030739374625784e+00 -3.1783740284844947e-01 + 2.0387883087323988e-01 1.6424191187864592e+00 -4.1363808693808701e-01 + 1.0834957469084117e-01 1.6392996701536986e+00 -4.7872071262667443e-01 + 1.0216528720205620e-02 1.6066009918108868e+00 -4.8601531600501385e-01 + -5.3348945222340682e-02 1.5701855414668735e+00 -4.4154144806922130e-01 + -7.1458326788529147e-02 1.5420230320619592e+00 -3.8037393747786952e-01 + -5.4972596294325604e-02 1.5193553292700481e+00 -3.3465529084802315e-01 + -5.7361971332790085e-02 1.5081246238965340e+00 -3.9047199794576276e-01 + id 12103 + loc 6.4789414405822754e-01 6.3791143894195557e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4409599397543648e-01:3.4854765707946006e-01:1.1283616330966084e-01:3.8987684076205203e-01:1.0045364679884810e+00:3.6389453866873256e-01:1.8661838387423773e+00:4.4409155301549674e-01:2.2317639827839795e+00:3.3501349900810479e-01:3.0041841206223823e+00:3.2541105870880410e-01:3.7017039157951332e+00 + CVs 20 + -1.9422212124325161e-01 5.3705302690805590e-01 1.9253295315197189e-01 + -3.7865906722907083e-01 1.0391734147408707e+00 3.6230728269678159e-01 + -5.6819368217270272e-01 1.5212059270107468e+00 5.3027321926113757e-01 + -7.9905112782067578e-01 1.9823056538256618e+00 6.7771753144510838e-01 + -1.0986196343796197e+00 2.4019680172384219e+00 7.6488341509665281e-01 + -1.4648406327668151e+00 2.7460799333071670e+00 7.5086926368166518e-01 + -1.8546784767330562e+00 2.9714330842517498e+00 6.0316365476872313e-01 + -2.1824859859876513e+00 3.0353896787280208e+00 3.1577287412346111e-01 + -2.3628099989269580e+00 2.9303057231628880e+00 -4.8433568472000754e-02 + -2.4081134161202251e+00 2.7041033619392127e+00 -3.9509784602592046e-01 + -2.3898824555487015e+00 2.3744495040492883e+00 -6.8594507662991744e-01 + -2.3526052715102459e+00 1.9196709871442024e+00 -8.7489221935209482e-01 + -2.3037673939022736e+00 1.4068190427492338e+00 -8.9770615894706918e-01 + -2.2161074663289164e+00 9.7593414256715261e-01 -8.3835061087203533e-01 + -2.0638387839698247e+00 6.4865096459156313e-01 -8.4845210184988762e-01 + -1.8541375628087804e+00 4.1219276023064505e-01 -9.9555158985141812e-01 + -1.6201182007269073e+00 2.9225778694210169e-01 -1.2860239916869882e+00 + -1.3964250252279891e+00 2.8533147055849140e-01 -1.6413285160359075e+00 + -1.1724009869656671e+00 1.6450326239433744e-01 -1.9049221514146111e+00 + id 12104 + loc 6.1489325761795044e-01 3.8310918211936951e-01 1076 + blend 0.0000000000000000e+00 + interp 4.1508550424887453e-01:3.3694484046824830e-01:4.8931905040211598e-01:3.4195105337101528e-01:1.0360759900507683e+00:3.1806532400965326e-01:1.9326024319340327e+00:3.2898748264555544e-01:2.4989219001033316e+00:3.3263956820341917e-01:3.0837867484103132e+00:4.1508135339383206e-01:3.9415351472768525e+00 + CVs 20 + -2.6922235645403325e-01 2.5417602727503685e-01 1.5771180876079993e-01 + -5.1518464762724958e-01 5.0882270168636645e-01 3.4883744184611254e-01 + -7.4425963564574915e-01 7.4765344792083688e-01 5.7733329160569824e-01 + -9.5161012523567790e-01 9.5517243144107833e-01 8.4241554633496263e-01 + -1.1231322140470283e+00 1.1197368048525582e+00 1.1390269666071362e+00 + -1.2619436705907157e+00 1.2370176920133935e+00 1.4634385392325862e+00 + -1.3925647412453421e+00 1.3086812875561211e+00 1.8161093705050662e+00 + -1.5397776082357344e+00 1.3359155693407976e+00 2.1876423043371442e+00 + -1.7098909928760104e+00 1.3211754095042902e+00 2.5512878540782578e+00 + -1.8926548612937200e+00 1.2695653755157723e+00 2.8703858050567068e+00 + -2.0624411514493568e+00 1.1952798004818548e+00 3.1039823218726301e+00 + -2.1786199834965592e+00 1.1459349988931780e+00 3.2130680851829005e+00 + -2.2380361602702097e+00 1.2090801485641647e+00 3.1932616581310969e+00 + -2.3362142429511983e+00 1.3849143947021756e+00 3.1305659161532384e+00 + -2.5200800181526342e+00 1.5251341550047643e+00 3.1057034323785540e+00 + -2.7915204575760462e+00 1.6058140639033534e+00 3.0980466174868826e+00 + -3.3445601247569123e+00 1.6360678511241940e+00 3.0878793114589524e+00 + -4.1286475962783395e+00 1.2158306885950791e+00 3.0665866713213212e+00 + -4.0095747372890402e+00 1.1312577970062281e+00 2.9867999256592039e+00 + id 12105 + loc 6.2903046607971191e-01 3.4436696767807007e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5647902506452320e-01:3.1251733381446251e-01:3.7735712051576709e-01:3.0307114708703525e-01:9.9560785031096155e-01:3.0396573097461310e-01:1.6698445437340039e+00:3.4374350659280656e-01:2.1160848378839257e+00:3.2028826875536642e-01:2.8828625121151994e+00:4.5647446027427258e-01:3.0635003582709368e+00:3.9073475980514866e-01:3.7894731671874058e+00 + CVs 20 + 4.7541732229495731e-02 3.0550431892099383e-01 2.6681526517315945e-01 + 5.3538363214217594e-02 5.6321909632289613e-01 5.1549277332370591e-01 + 3.8972475087721947e-02 7.8741604498039264e-01 7.5502432371371453e-01 + 7.5965290770542704e-03 9.8484155931708739e-01 9.9476450980705522e-01 + -4.6858622049915311e-02 1.1559586613185120e+00 1.2408721939147827e+00 + -1.2468442243142408e-01 1.3048062634711475e+00 1.4962375120079978e+00 + -2.1877623067723329e-01 1.4385330439647395e+00 1.7589262520055007e+00 + -3.2126205534171237e-01 1.5638093498406871e+00 2.0218565494007756e+00 + -4.3025935624024902e-01 1.6842684610617746e+00 2.2743559187924163e+00 + -5.4821793788309625e-01 1.8010386666508058e+00 2.5108081105952529e+00 + -6.7701921408240606e-01 1.9084735457742705e+00 2.7422692846738865e+00 + -8.1778838652878993e-01 1.9848008665033920e+00 2.9946559654220843e+00 + -9.6813305694517260e-01 1.9954297812098900e+00 3.2807313145262640e+00 + -1.1258605002336386e+00 1.9175474309299954e+00 3.5867819804348535e+00 + -1.2981902205496902e+00 1.7458352433735782e+00 3.9029279590668149e+00 + -1.4892544218526833e+00 1.4625346152783845e+00 4.2421801173048763e+00 + -1.6653587381279711e+00 1.0312322600819721e+00 4.6156937260316147e+00 + -1.7484589098918530e+00 4.6926808626180833e-01 4.9838984580186709e+00 + -1.7503823748923553e+00 3.8407389277016757e-03 5.2365270218638216e+00 + id 12106 + loc 9.5176553726196289e-01 7.9732507467269897e-01 411 + blend 0.0000000000000000e+00 + interp 4.6568811074636701e-01:3.4555656380380240e-01:1.2302925972157330e-01:2.7764904603536900e-01:9.7429855079690297e-01:3.3777460079069582e-01:1.5957958664431522e+00:4.5474742534311258e-01:2.0317703509321574e+00:4.6568345386525956e-01:2.8293227410019921e+00:3.7379564211893135e-01:3.2204292736083016e+00 + CVs 20 + 9.0380618812129210e-01 2.3441822049973277e-01 -2.0322895577960443e-01 + 1.5582662805805241e+00 2.9035069486369230e-01 -3.4168516872873200e-01 + 2.1544411447811300e+00 2.7080801058792558e-01 -4.4572998221328175e-01 + 2.7776428092675673e+00 2.1897476760797213e-01 -5.2090229436637236e-01 + 3.4155080403767775e+00 1.3339961195942074e-01 -5.6225318090947818e-01 + 4.0525379955394314e+00 1.5495619378290915e-02 -5.7385261895620421e-01 + 4.6714082237379140e+00 -1.3258202242066819e-01 -5.6709522133350432e-01 + 5.2540257708000535e+00 -3.1083969398437294e-01 -5.5467189473395861e-01 + 5.7876195606737975e+00 -5.2133406790243630e-01 -5.5004994775343241e-01 + 6.2657670338653215e+00 -7.6645563968755615e-01 -5.6938526808755929e-01 + 6.6807271185957342e+00 -1.0433730695654821e+00 -6.2509371116620682e-01 + 7.0241021426366377e+00 -1.3379534480884305e+00 -7.1766877958562347e-01 + 7.2965318008722262e+00 -1.6334719668094382e+00 -8.4052660985754746e-01 + 7.5069161497729207e+00 -1.9237540924847785e+00 -9.8824067714131469e-01 + 7.6636872522238617e+00 -2.2090633883560518e+00 -1.1545481051043229e+00 + 7.7737191121408191e+00 -2.4875903268738524e+00 -1.3318915101561632e+00 + 7.8459746994133548e+00 -2.7589342734496816e+00 -1.5152408045601018e+00 + 7.8877923665520466e+00 -3.0271330811985626e+00 -1.6974758889279693e+00 + 7.8398719070192264e+00 -3.2796091904907421e+00 -1.8587424463786020e+00 + id 12107 + loc 6.0491519980132580e-04 2.5952117517590523e-02 1048 + blend 0.0000000000000000e+00 + interp 5.9271097362573022e-01:3.5699567440567759e-01:1.0073353023945442e-01:5.2212935848813802e-01:9.8137794357699459e-01:5.9270504651599398e-01:1.8825810211118124e+00:2.5903693657684135e-01:2.3475575928962695e+00:5.6954820389148730e-01:3.0998387603840412e+00:4.9666783404367887e-01:3.9340644964113247e+00 + CVs 20 + -2.4357055564703861e-01 3.5202501252552032e-01 -8.9629069711448586e-02 + -4.5101558390428742e-01 7.0944041297763571e-01 -1.6946706662501954e-01 + -6.2313124763240890e-01 1.0679566718738207e+00 -2.6769828768532616e-01 + -7.6683488726533677e-01 1.4284116379310878e+00 -4.1456568332424026e-01 + -8.9292624075805138e-01 1.7818352566060365e+00 -6.4218191225877586e-01 + -1.0258626150807557e+00 2.1104622593977922e+00 -9.6469592797412673e-01 + -1.2043756103471825e+00 2.3894647984293318e+00 -1.3787640410802218e+00 + -1.4583957820442732e+00 2.5780819074655867e+00 -1.8723406727292011e+00 + -1.7866672537654495e+00 2.6247203164654449e+00 -2.4298099828349988e+00 + -2.1551435162784327e+00 2.4732564074982086e+00 -3.0293667938616844e+00 + -2.4918410915839568e+00 2.0764827041077307e+00 -3.6241855745640326e+00 + -2.6928388667314112e+00 1.4452380046933322e+00 -4.1348881724512045e+00 + -2.6824088731431743e+00 7.0016259607996378e-01 -4.4834762754238566e+00 + -2.4833472063897766e+00 6.7182507545309078e-02 -4.6697825147054157e+00 + -2.2215068789689161e+00 -2.8648950854997635e-01 -4.7928324020473996e+00 + -2.0177822150240128e+00 -3.5714631551971510e-01 -4.9147295405572917e+00 + -1.9003421306178052e+00 -2.4161757378701498e-01 -5.0214670739604736e+00 + -1.7352115805223216e+00 -4.9750704942939539e-02 -5.1483362809106277e+00 + -1.2522752529918662e+00 1.4113503355978274e-01 -5.4391127552194565e+00 + id 12108 + loc 9.0170986950397491e-03 4.9695843458175659e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7508226609523041e-01:3.5619587545503079e-01:8.0301657404246995e-05:3.3804707784063187e-01:4.4584602586426769e-01:4.1026165307732831e-01:1.0515658852020897e+00:2.7083179065324525e-01:1.9298575245759848e+00:4.7507751527256947e-01:2.3602729761434831e+00:2.8699109695299174e-01:3.2907996596433375e+00 + CVs 20 + 5.1269610699401558e-01 4.4303140500820637e-01 1.7308171364911312e-01 + 8.6334731173292112e-01 8.1236183957932462e-01 3.5906284038416819e-01 + 1.1414387486309139e+00 1.1573136122034393e+00 5.6512087359867880e-01 + 1.3748543768157715e+00 1.5016826144547970e+00 8.0384970272242728e-01 + 1.5473161302237077e+00 1.8346307104915600e+00 1.0810442177108697e+00 + 1.6447434027585173e+00 2.1406018120391170e+00 1.3972854603637805e+00 + 1.6555911491281163e+00 2.4014015669032163e+00 1.7455031254572757e+00 + 1.5734729261903939e+00 2.5984438330802710e+00 2.1099111067571883e+00 + 1.4010880999098609e+00 2.7155829443887569e+00 2.4695084040405533e+00 + 1.1543358015597975e+00 2.7425136910042287e+00 2.8023332075962464e+00 + 8.6040127385016762e-01 2.6778117788960385e+00 3.0953477934860141e+00 + 5.4581773703125014e-01 2.5224533257059250e+00 3.3490980460075574e+00 + 2.3436540969224828e-01 2.2740678766389566e+00 3.5684453125206934e+00 + -4.9352394984926884e-02 1.9241215834533503e+00 3.7600754004888155e+00 + -2.6540532929539573e-01 1.4730201433718184e+00 3.9293119832692005e+00 + -3.6394383451424273e-01 9.7509659048371233e-01 4.0680440557650730e+00 + -3.3506539527199519e-01 4.9622919686140560e-01 4.1730689135586605e+00 + -1.9232355148790370e-01 7.0922610931237529e-02 4.2699387115915375e+00 + 5.3238177098076378e-02 -1.6874805665280965e-01 4.3854224009433098e+00 + id 12109 + loc 8.4202006459236145e-02 4.2721047997474670e-01 397 + blend 0.0000000000000000e+00 + interp 1.0201695091563103e+00:4.7084190676450050e-01:1.2466038885277886e-01:4.7403239674332742e-01:9.8108738013611652e-01:4.9283796943940716e-01:1.3830134455975025e+00:3.2536550690636029e-01:1.9721812346526888e+00:4.5137962485566269e-01:3.9117823086036605e+00:1.0201595091563103e+00:3.9445835233248125e+00:7.3727783461955021e-01:3.9661291115043968e+00 + CVs 20 + -3.1491956156078982e-01 3.2504567168456067e-01 -1.1805328630544205e+00 + -5.8928727064733655e-01 4.4312035697518393e-01 -1.9667671262113435e+00 + -8.5178774562150994e-01 4.7881533025920298e-01 -2.6574929986054343e+00 + -1.1109382550712170e+00 4.8581816974378406e-01 -3.4022698443243562e+00 + -1.3364203407146937e+00 4.4365857822078941e-01 -4.1848005710710563e+00 + -1.4969141951197100e+00 3.3540222076590320e-01 -4.9740885856586576e+00 + -1.5723746661896030e+00 1.4989072886011601e-01 -5.7355270287590558e+00 + -1.5550964194253467e+00 -1.1890348708234300e-01 -6.4365523313409829e+00 + -1.4486710456072616e+00 -4.6619232553065693e-01 -7.0457937159813699e+00 + -1.2691778542090075e+00 -8.7182194180942130e-01 -7.5393391312873694e+00 + -1.0426166236107195e+00 -1.3073527473656137e+00 -7.9118984945633741e+00 + -7.9715109010511664e-01 -1.7485284236548102e+00 -8.1767810703295307e+00 + -5.5704004621502079e-01 -2.1838277019398129e+00 -8.3545162577114755e+00 + -3.4033424477132285e-01 -2.6162186217725498e+00 -8.4610737748952314e+00 + -1.5750791971536249e-01 -3.0559656979687539e+00 -8.4984070131274247e+00 + -1.8681685488800559e-02 -3.4979261143852800e+00 -8.4703249037721218e+00 + 6.5917518307471501e-02 -3.9204528280213324e+00 -8.3967593177699946e+00 + 1.0177507901829097e-01 -4.3186484515767969e+00 -8.2938336823963041e+00 + 1.0764548096115756e-01 -4.7972509697440548e+00 -8.1095040151668396e+00 + id 12110 + loc 5.2042108774185181e-01 4.2621308565139771e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6032216113793484e-01:3.1136652973881440e-01:4.1967814438579265e-01:2.8507376269022472e-01:1.0962081898880673e+00:2.8514727382279814e-01:1.9865119996095535e+00:4.0274829086160124e-01:2.3114707102390017e+00:4.6031755791632351e-01:2.8644318380958858e+00:2.8804672602981074e-01:3.4125120441965553e+00 + CVs 20 + -5.3592911759078765e-02 2.9889153491546244e-01 1.7073039001444992e-01 + -1.2479933160403300e-01 5.9982385915986136e-01 3.5608991553974900e-01 + -2.1310984204431355e-01 8.9716325614628045e-01 5.3272144636149710e-01 + -3.2179598303520840e-01 1.1847365915000572e+00 6.8582161278028220e-01 + -4.5788084856282718e-01 1.4561302891904255e+00 8.1639293219226516e-01 + -6.3006991012561553e-01 1.7026138774549553e+00 9.4673556922000979e-01 + -8.4095075188918678e-01 1.9106781264451378e+00 1.1050169609256717e+00 + -1.0821341819829635e+00 2.0696557381970075e+00 1.3032316644380653e+00 + -1.3400053214510272e+00 2.1747182618695602e+00 1.5434451514963541e+00 + -1.5983390660929837e+00 2.2188456980899387e+00 1.8294097868460790e+00 + -1.8358000631269662e+00 2.1871334169512022e+00 2.1648015257487678e+00 + -2.0244836355398999e+00 2.0608028493813610e+00 2.5426722619905999e+00 + -2.1362792090524692e+00 1.8263433046229491e+00 2.9390966773796521e+00 + -2.1496135915344512e+00 1.4788789853199344e+00 3.3153494055933472e+00 + -2.0520893254267554e+00 1.0270255949880904e+00 3.6228669391961663e+00 + -1.8402608581779782e+00 4.9892259875772771e-01 3.8153525077597163e+00 + -1.5287696194284115e+00 -5.3943356159895053e-02 3.8645474334112717e+00 + -1.1713074486745949e+00 -5.7172153721977670e-01 3.7956966597880832e+00 + -8.8932530259703890e-01 -1.0103815465405925e+00 3.7748105902194675e+00 + id 12111 + loc 4.1313010454177856e-01 4.6128219366073608e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4914526582046221e-01:3.8786025796174406e-01:3.3908662445803073e-01:3.4099867121662608e-01:1.0030858346513911e+00:3.2508899295947136e-01:1.9434103036020751e+00:4.2705910234441508e-01:2.2142293033285565e+00:4.2245516882287021e-01:2.9548402982702031e+00:2.8050467901618975e-01:3.3171735073035884e+00:4.4914077436780403e-01:3.9600153011051140e+00 + CVs 20 + -1.5386218414363761e-01 3.0859768253089953e-01 -6.9451167929482360e-02 + -3.3120208090087011e-01 6.2848023500154215e-01 -1.7556125072947121e-01 + -5.2126839680273740e-01 9.5585475201185721e-01 -2.9726712678459261e-01 + -7.2759721898125496e-01 1.2846072105604516e+00 -4.2146038211704651e-01 + -9.6179660387699406e-01 1.6033650158500228e+00 -5.4095397757462949e-01 + -1.2313414727347751e+00 1.8878225051992545e+00 -6.5080511440207678e-01 + -1.5337643012884907e+00 2.1049260315041196e+00 -7.5153802116618651e-01 + -1.8512190114206728e+00 2.2276191972461414e+00 -8.4814321403033754e-01 + -2.1580079413238602e+00 2.2443721205170863e+00 -9.4648156963310082e-01 + -2.4400548968519722e+00 2.1607501164926997e+00 -1.0498554468209462e+00 + -2.7104520670112455e+00 1.9917805571432372e+00 -1.1637400593300600e+00 + -2.9975893398239837e+00 1.7523598500634872e+00 -1.2982401569503874e+00 + -3.3190924762338128e+00 1.4609111283486149e+00 -1.4467086118344885e+00 + -3.6737574951894678e+00 1.1376190812609051e+00 -1.5580094203557759e+00 + -4.0558986582746872e+00 8.0834645740194844e-01 -1.5559550844810217e+00 + -4.4647050769476042e+00 5.3240717644682367e-01 -1.3865032410383584e+00 + -4.8703542198483643e+00 3.9052802319436097e-01 -1.0434038245832904e+00 + -5.2408933934558979e+00 3.5294266732775648e-01 -6.2471678179527212e-01 + -5.7427918832694029e+00 1.4705838538879301e-01 -3.5942047804674671e-01 + id 12112 + loc 2.7178797125816345e-01 5.8949196338653564e-01 406 + blend 0.0000000000000000e+00 + interp 4.6767366482496975e-01:4.2545385476235448e-01:2.1145354171119479e-01:4.4796369441454437e-01:1.0000537599477726e+00:3.0812854504036313e-01:1.7533283091448273e+00:4.1681484650596756e-01:2.1256176976015988e+00:4.2391811231264376e-01:2.8983006281784456e+00:3.6206804328518694e-01:3.1624020661308130e+00:4.6766898808832152e-01:3.8296390269011380e+00 + CVs 20 + 2.1843002444112922e-01 2.4106726373622511e-01 -3.9306514828875427e-02 + 3.2685403082802289e-01 3.9498664814518769e-01 -7.1592179997564426e-02 + 4.1470287684675122e-01 5.1466365414403514e-01 -9.6521698242371362e-02 + 5.2025773607593162e-01 6.3003423270875625e-01 -1.1626763942302917e-01 + 6.4230484153044409e-01 7.4081208306381063e-01 -1.3082912742959452e-01 + 7.7964771301155256e-01 8.4644656706560195e-01 -1.4046500746444196e-01 + 9.3151972848019060e-01 9.4641688924708700e-01 -1.4531065941895971e-01 + 1.0973716824394599e+00 1.0399964658878618e+00 -1.4493857227767587e-01 + 1.2741937192061645e+00 1.1257603188566101e+00 -1.3824686225850585e-01 + 1.4552293140272810e+00 1.2024727008843783e+00 -1.2378413223541956e-01 + 1.6351672602104419e+00 1.2699401133821659e+00 -1.0011972941715463e-01 + 1.8150834510271603e+00 1.3271373880645241e+00 -6.6254920513961535e-02 + 1.9970754679827829e+00 1.3713690720843175e+00 -2.1097618538774399e-02 + 2.1770208955397683e+00 1.4013055669997858e+00 3.8575282303660030e-02 + 2.3493384763723961e+00 1.4177297820814605e+00 1.1689731636871475e-01 + 2.5159495484992718e+00 1.4202309080701967e+00 2.1349358864445050e-01 + 2.6827791552638711e+00 1.4057416896812627e+00 3.2159504415301876e-01 + 2.8472062306364130e+00 1.3702241619908864e+00 4.3299257513906175e-01 + 3.0105956406920309e+00 1.2659869629056564e+00 4.7274645865769677e-01 + id 12113 + loc 8.5806578397750854e-01 3.7986087799072266e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4999435640509949e-01:3.1422722518702345e-01:1.1669449444665569e-01:3.0385024329592764e-01:1.0666583924839339e+00:3.5153214269291777e-01:1.8885189845360861e+00:4.4998985646153544e-01:2.1998085784575867e+00:3.4282144427763023e-01:2.9197358067902566e+00:2.5575829620252188e-01:3.6749925870082976e+00 + CVs 20 + -2.5402571869546399e-02 3.6342456146176294e-01 -2.6670801483491313e-01 + -7.8023457546228470e-02 6.6576612743043984e-01 -4.1935121910147261e-01 + -1.4830458888441278e-01 9.4796046297689252e-01 -5.2795063778069740e-01 + -2.3697225811311745e-01 1.2392114794439333e+00 -6.3067387590524737e-01 + -3.4829746552044422e-01 1.5312162997047460e+00 -7.1648974277756805e-01 + -4.8535165465156571e-01 1.8148665756302358e+00 -7.6755146795031470e-01 + -6.5155220170295469e-01 2.0780793723678483e+00 -7.5421526120682436e-01 + -8.4862741067553404e-01 2.2894946034021872e+00 -6.3173780505447985e-01 + -1.0534233942347060e+00 2.3713540988308601e+00 -3.7630922743053641e-01 + -1.2122652015449504e+00 2.2715205539268606e+00 -7.2379375613490726e-02 + -1.3155993715010939e+00 2.0420433048345030e+00 1.9362583637191255e-01 + -1.3845782120735008e+00 1.7316903086693629e+00 4.0998217292197126e-01 + -1.4455808883843024e+00 1.3760845724537862e+00 5.8688959211605374e-01 + -1.5178930039474443e+00 1.0064191935336213e+00 7.5545038319956503e-01 + -1.5956648170964443e+00 6.6481274377219912e-01 9.6852551387641350e-01 + -1.6588960717865187e+00 4.5569559151798045e-01 1.2915440086189887e+00 + -1.7396803771544700e+00 5.9774901758720966e-01 1.6852533016583986e+00 + -2.0009143780135874e+00 1.1802017913680598e+00 1.6623026176276889e+00 + -2.1126019662169400e+00 1.2576559608709492e+00 1.7891566573612128e+00 + id 12114 + loc 3.6711864173412323e-02 8.2309466600418091e-01 1055 + blend 0.0000000000000000e+00 + interp 5.1478692945043847e-01:3.3896929257909147e-01:6.4362674574346856e-02:2.1886739107923361e-01:1.0189886839796893e+00:2.8823534242679272e-01:2.1232850953992548e+00:3.7588819639406118e-01:2.9317109135587822e+00:5.1478178158114396e-01:3.8514234526607742e+00 + CVs 20 + -7.5635591800177149e-02 3.2413129504011423e-01 -3.8996758804792675e-01 + -6.5948435489976476e-02 5.8483992725475098e-01 -7.1401546390477622e-01 + -9.0156915656871561e-03 8.2519056511284106e-01 -9.9906198736823770e-01 + 7.8905650117467085e-02 1.0672497837546076e+00 -1.2461759716553207e+00 + 1.8335926981111739e-01 1.3233007921657600e+00 -1.4512689320159344e+00 + 2.5694415184177766e-01 1.6092416082898695e+00 -1.6229347272226047e+00 + 2.4422688071193654e-01 1.9141647609484314e+00 -1.7719611067552903e+00 + 1.3402498046898925e-01 2.2066746372993054e+00 -1.9139143941838159e+00 + -5.7511065626622671e-02 2.4622958932205856e+00 -2.0733110370885957e+00 + -3.0927058816294251e-01 2.6446291787841947e+00 -2.2738400372471927e+00 + -5.8680324241639936e-01 2.7086437379849344e+00 -2.5210413444686663e+00 + -8.5111412196695002e-01 2.6384703482196992e+00 -2.7913234400343869e+00 + -1.0763609737363784e+00 2.4475425377820330e+00 -3.0524705374413199e+00 + -1.2379321805775065e+00 2.1628117924275565e+00 -3.2757605060679422e+00 + -1.3189971483216911e+00 1.8240385096718774e+00 -3.4471880063011655e+00 + -1.3130635174694869e+00 1.4699068329132150e+00 -3.5591120149130733e+00 + -1.2203006658262106e+00 1.1470435516229831e+00 -3.5911276512811359e+00 + -1.0640253005305134e+00 9.1329780942474947e-01 -3.5342699782413871e+00 + -9.1088099079422680e-01 6.5808633278918738e-01 -3.5013337933707471e+00 + id 12115 + loc 9.5606172084808350e-01 3.3773326873779297e-01 411 + blend 0.0000000000000000e+00 + interp 4.7620465580814919e-01:2.3613899667064717e-01:2.9671035665774115e-02:3.8617403016810781e-01:9.9951056533630767e-01:2.6902464152544270e-01:1.8131275717922035e+00:3.3795671376073966e-01:2.2558762093954816e+00:4.7619989376159111e-01:2.9991998419817998e+00:3.4446450636098924e-01:3.4741279734286912e+00 + CVs 20 + -6.8920120397854800e-01 1.9303183442329822e-01 2.3468188485224706e-01 + -1.2235107822193021e+00 2.5418663729599605e-01 4.4425487337722758e-01 + -1.7460769417415676e+00 2.6937515225854280e-01 6.4734267651240851e-01 + -2.3113629158855473e+00 2.6251495172230432e-01 8.4631561156375423e-01 + -2.9126230354049896e+00 2.2558200925643235e-01 1.0353620476167642e+00 + -3.5362629332185431e+00 1.5543154389679370e-01 1.2159135688759126e+00 + -4.1642133664655265e+00 4.6908809002762064e-02 1.3914687729848709e+00 + -4.7757322027780864e+00 -1.1103294219934678e-01 1.5628944610501347e+00 + -5.3460452771779199e+00 -3.2958336843606850e-01 1.7352919991509335e+00 + -5.8459370012952219e+00 -6.1228533888406345e-01 1.9195012523002180e+00 + -6.2587298060172811e+00 -9.5049614975318830e-01 2.1123535170634211e+00 + -6.5951818146748726e+00 -1.3264401573003362e+00 2.2917135995751510e+00 + -6.8721040068892805e+00 -1.7212468103602454e+00 2.4424949820142485e+00 + -7.0944244310164928e+00 -2.1180154263359432e+00 2.5665027085081085e+00 + -7.2625407063323406e+00 -2.5088085739063715e+00 2.6654056078864405e+00 + -7.3781497684446578e+00 -2.8966435548544114e+00 2.7317677348098308e+00 + -7.4460290380288754e+00 -3.2795779424992575e+00 2.7621081463841515e+00 + -7.4824084977723544e+00 -3.6379086042654705e+00 2.7667948928115536e+00 + -7.5585703317776289e+00 -3.9103964975636161e+00 2.7563198660933388e+00 + id 12116 + loc 8.8634157180786133e-01 5.1163572072982788e-01 1053 + blend 0.0000000000000000e+00 + interp 4.7331248888253225e-01:2.8238450896406142e-01:1.5189157994392122e-01:4.7330775575764344e-01:9.9435864348195502e-01:3.1686497403792618e-01:1.3425177335744944e+00:2.9106708854849245e-01:2.0237104698379365e+00:2.9893322265418310e-01:3.0270047961994409e+00:4.1345747020627449e-01:3.2541200712933311e+00 + CVs 20 + -9.4754800395188243e-02 3.7506630519459183e-01 1.9891992273918518e-01 + -2.2093275939907842e-01 7.2921182662783812e-01 3.8614706801672544e-01 + -3.5897087962211288e-01 1.0697984832982579e+00 5.6377424026142631e-01 + -5.0345677857894344e-01 1.3970971160754224e+00 7.3126967902539497e-01 + -6.5802232778209824e-01 1.7077404364738875e+00 8.8677685165929432e-01 + -8.2897921047164047e-01 2.0029593908719798e+00 1.0327453515670211e+00 + -1.0360955723738774e+00 2.2903527927860092e+00 1.1806595809715934e+00 + -1.3289500153923621e+00 2.5588386187264867e+00 1.3429953587131473e+00 + -1.7474680708644166e+00 2.7438596525510048e+00 1.5036633531281669e+00 + -2.2707560418364139e+00 2.7749067645158170e+00 1.6224360635131005e+00 + -2.8565506245073573e+00 2.6116733962702861e+00 1.6667326267689468e+00 + -3.4409304399325391e+00 2.2192375847058470e+00 1.6119674161324757e+00 + -3.8952351645991712e+00 1.6319847753020640e+00 1.4565208764175614e+00 + -4.1344892958654773e+00 1.0160068914359695e+00 1.2471610581316828e+00 + -4.2171205115751516e+00 4.8743379479949156e-01 1.0265876019416273e+00 + -4.2272358070577507e+00 4.1984911800800773e-02 7.6929178482744864e-01 + -4.2165748812274542e+00 -2.9203040915009326e-01 4.1757419936812423e-01 + -4.2239813462812474e+00 -3.9123125047769669e-01 -2.7657588696449298e-02 + -4.2679142584773881e+00 -1.5496095225323114e-01 -5.4514901846144548e-01 + id 12117 + loc 1.9639886450022459e-03 7.8838855028152466e-02 397 + blend 0.0000000000000000e+00 + interp 3.9904702616074439e-01:3.9475869356867671e-01:1.0712779513016557e-01:3.6771025067469626e-01:6.9359880719883615e-01:3.7038905399097632e-01:1.0161154119388291e+00:3.9904303569048277e-01:1.6728545724142845e+00:2.9931850042571934e-01:1.9978576791591220e+00:3.2528416386885189e-01:2.8813592738976159e+00:2.9762456709906493e-01:3.2036028574489022e+00 + CVs 20 + -2.2302776603312510e-01 2.7608531963811489e-01 -1.0449337102526444e+00 + -3.9158941327014729e-01 3.8842717941963678e-01 -1.7562155523030185e+00 + -5.4118774672699710e-01 4.3700194474791221e-01 -2.3828992424303554e+00 + -6.8867925236386185e-01 4.6168357058274007e-01 -3.0377056107367171e+00 + -8.3238168119367428e-01 4.4358383825466324e-01 -3.7081554329748103e+00 + -9.7301519233384337e-01 3.6931882274666750e-01 -4.3767957342362243e+00 + -1.1135716287368791e+00 2.3298414591930894e-01 -5.0247798759856659e+00 + -1.2561923968767950e+00 3.4477289768779396e-02 -5.6350940033820418e+00 + -1.4027808295883883e+00 -2.2055651231058127e-01 -6.1930783775590026e+00 + -1.5565842818468403e+00 -5.1830247904853954e-01 -6.6867311066279651e+00 + -1.7181898689098922e+00 -8.3861291107285885e-01 -7.1126468643549980e+00 + -1.8865907692893089e+00 -1.1678516337631246e+00 -7.4827803953260021e+00 + -2.0584665241795665e+00 -1.5066576537402079e+00 -7.8175566041975060e+00 + -2.2251938203999839e+00 -1.8599891853946124e+00 -8.1291100497060000e+00 + -2.3735407873899343e+00 -2.2293416286937728e+00 -8.4140108639750650e+00 + -2.4929903810692684e+00 -2.6179774276785679e+00 -8.6571511260914331e+00 + -2.5809708602851744e+00 -3.0320819817375764e+00 -8.8436777522099490e+00 + -2.6312781461019030e+00 -3.4566242768286353e+00 -8.9575461937051628e+00 + -2.6225596988673061e+00 -3.7850773474153829e+00 -8.9262713858832790e+00 + id 12118 + loc 7.1862953901290894e-01 2.7306368947029114e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4387688927221625e-01:2.9766328220517324e-01:1.0842784494336466e-01:4.1986049822891519e-01:9.9939034055158404e-01:2.7821086990256078e-01:1.4079793834153151e+00:4.4387245050332352e-01:1.9746113184894547e+00:2.9629539034564417e-01:2.6080479017016698e+00:3.0993789029850333e-01:3.3367484482018526e+00 + CVs 20 + -9.1639375171433973e-02 3.1518228382511132e-01 1.6084777040908815e-01 + -1.9667002219838653e-01 6.5019265445433749e-01 3.3167119676872214e-01 + -3.2193865381418574e-01 1.0000223217465674e+00 4.9205957162979502e-01 + -4.6751773070256497e-01 1.3591889699383235e+00 6.3809192393678493e-01 + -6.3051650627500766e-01 1.7234487581535129e+00 7.8146276754084032e-01 + -8.0666895218686241e-01 2.0875668472175040e+00 9.4539216792076131e-01 + -9.8884427528477059e-01 2.4422956624112682e+00 1.1587712713967835e+00 + -1.1656363678069623e+00 2.7707346242643918e+00 1.4492127965613166e+00 + -1.3228292484187039e+00 3.0455503114471476e+00 1.8356807786665605e+00 + -1.4483199711634673e+00 3.2295624393148921e+00 2.3199533940205490e+00 + -1.5372522755462117e+00 3.2829585865516457e+00 2.8775215918134203e+00 + -1.5995725454862320e+00 3.1836486966940023e+00 3.4523911736241484e+00 + -1.6613625307923185e+00 2.9415448211373856e+00 3.9816247789493731e+00 + -1.7508389637935462e+00 2.5867386357091657e+00 4.4194230042606604e+00 + -1.8855346969450788e+00 2.1553004464729484e+00 4.7370711613581529e+00 + -2.0658777114150007e+00 1.6780215046583691e+00 4.9191269209006094e+00 + -2.2770376096182741e+00 1.1901377424955975e+00 4.9578328634422792e+00 + -2.4956500714746941e+00 7.5370635415146570e-01 4.8680393473674934e+00 + -2.6793303517319718e+00 4.3281657672153234e-01 4.7463043982771804e+00 + id 12119 + loc 2.0855458080768585e-01 1.8976995721459389e-02 1068 + blend 0.0000000000000000e+00 + interp 4.8330995598714799e-01:2.8463142817454706e-01:7.6073483270462372e-03:4.2147191115523802e-01:8.6371919365219796e-01:4.8330512288758815e-01:1.4515156003797827e+00:3.8396285538802544e-01:2.0358849107912342e+00:2.5877208084927988e-01:2.8108285507018418e+00:3.3363526940230109e-01:3.4264722690648695e+00 + CVs 20 + -1.6523334182386398e-01 1.9492403829728464e-01 -1.8313920179388382e-01 + -3.3547504304573739e-01 3.9539351671001477e-01 -3.4063984909339973e-01 + -5.0639792546362272e-01 5.9169386596333529e-01 -4.8920823385094625e-01 + -6.7208440849837914e-01 7.7375007582624444e-01 -6.3387170860729447e-01 + -8.3167824994385642e-01 9.4263512108739622e-01 -7.7091841596532484e-01 + -9.8346398450551331e-01 1.1007400350994581e+00 -8.9674208414504353e-01 + -1.1303583184842692e+00 1.2523543223935556e+00 -1.0066291920174884e+00 + -1.2823962231288815e+00 1.4015378941551992e+00 -1.0942000769984745e+00 + -1.4519640000303133e+00 1.5408653500734242e+00 -1.1585931685259345e+00 + -1.6495607475376204e+00 1.6480995137479846e+00 -1.2049487001817991e+00 + -1.8802657199659929e+00 1.6934580133623978e+00 -1.2317531492165585e+00 + -2.1391861196710247e+00 1.6454215982263043e+00 -1.2320485283951399e+00 + -2.4099430768041077e+00 1.4905941963649889e+00 -1.2154998389204688e+00 + -2.6772196416410639e+00 1.2454096919804301e+00 -1.2093832479888578e+00 + -2.9349022796462423e+00 9.4055372213302668e-01 -1.2383059850976890e+00 + -3.1755201953111540e+00 6.1702281840320672e-01 -1.3201884422203749e+00 + -3.3679142667625830e+00 3.3517344829900891e-01 -1.4734547235107676e+00 + -3.4730808411827954e+00 1.5128316793733765e-01 -1.7163102467972879e+00 + -3.5208854437735693e+00 3.0436829535258419e-02 -2.1202884012283816e+00 + id 12120 + loc 1.6459600999951363e-02 1.0558213293552399e-01 1050 + blend 0.0000000000000000e+00 + interp 1.4143128926139485e+00:5.7496549099723371e-01:1.4827751733972132e+00:3.2127969638390314e-01:1.5808037525968197e+00:2.0642416851611070e-01:1.9366547509681289e+00:5.4317612279370570e-02:2.7348199072907207e+00:4.9534446479015748e-01:3.0911882868660499e+00:6.9553230784640874e-01:3.5004387054761166e+00:1.4143028926139485e+00:3.7385708368089743e+00 + CVs 20 + -4.4751740512749666e-01 3.4675425819180888e-01 1.4152842340321736e-01 + -8.4050341466932021e-01 6.9095450052973129e-01 2.2506384230126691e-01 + -1.1690547256220141e+00 1.0638631261517961e+00 2.5893488338447057e-01 + -1.4480514358102017e+00 1.4338719679513374e+00 2.5120727466922488e-01 + -1.7282726733205434e+00 1.7482661046191696e+00 2.0725041466565253e-01 + -2.0623763948057787e+00 1.9752854714322738e+00 1.3535555563099910e-01 + -2.4667767613105194e+00 2.0881745027995944e+00 4.9237620339293020e-02 + -2.9300416905952540e+00 2.0564884709582119e+00 -4.0593021881147884e-02 + -3.4114515597270012e+00 1.8627465802371210e+00 -1.4054882126783208e-01 + -3.8516058953480075e+00 1.5298577872715042e+00 -2.7491322134973095e-01 + -4.2085338574433537e+00 1.1498197586719332e+00 -4.7050339431640165e-01 + -4.4712140006430356e+00 8.6674308577944448e-01 -7.0703945072376295e-01 + -4.6291512427841024e+00 7.6352893777685515e-01 -8.9386791401836962e-01 + -4.7055165338704565e+00 7.7505554991273262e-01 -1.0175873603766521e+00 + -4.8868107317262792e+00 8.1387396444120252e-01 -1.1320278800936132e+00 + -5.2977753845511248e+00 8.5724351537030152e-01 -1.1882630898370239e+00 + -5.9623408310948625e+00 8.2230840908736313e-01 -1.1690465649257049e+00 + -6.7672144262768974e+00 5.4847306784797256e-01 -1.2064035887103852e+00 + -7.1182514678699516e+00 3.0368370891313501e-01 -1.3068145204808248e+00 + id 12121 + loc 6.1755532026290894e-01 6.3791143894195557e-01 1085 + blend 0.0000000000000000e+00 + interp 3.8592280557974740e-01:3.0674967087991489e-01:9.6725401487777640e-02:3.5816942606465807e-01:1.0141000596357521e+00:3.3708814586224123e-01:1.8415583108138531e+00:3.8591894635169161e-01:2.2153236879915394e+00:3.0874541850328219e-01:3.0098982808759738e+00:3.0652290545760869e-01:3.6799101547902819e+00 + CVs 20 + -1.7258278073119382e-01 3.2272258017271921e-01 2.1350656853260253e-01 + -3.5296770904554553e-01 6.1428442640166392e-01 3.6655955288838954e-01 + -5.4653287194704769e-01 8.9792162553270605e-01 4.8441950320468052e-01 + -7.5760868523824154e-01 1.1811552762237916e+00 5.7232424980678154e-01 + -9.9146658982905000e-01 1.4554590758038748e+00 6.1609359987937107e-01 + -1.2489608633592622e+00 1.7082745566365927e+00 6.0238573890158498e-01 + -1.5244975164833101e+00 1.9234052602818270e+00 5.1990156872039683e-01 + -1.8047999976523188e+00 2.0842982870468938e+00 3.6196778441332900e-01 + -2.0715551929154303e+00 2.1784320974185651e+00 1.2999235966521872e-01 + -2.3141380442499528e+00 2.1985379510677494e+00 -1.6674763002047122e-01 + -2.5386978388201262e+00 2.1375043383654160e+00 -5.1455028052355178e-01 + -2.7590679300135830e+00 1.9813073946989077e+00 -8.9543318926283888e-01 + -2.9890705104152668e+00 1.7073479974618513e+00 -1.2825179679804175e+00 + -3.2495441789037538e+00 1.2848001222279559e+00 -1.6309200360346208e+00 + -3.5649323040104393e+00 6.9934577021800859e-01 -1.8588143800376948e+00 + -3.9463260098625290e+00 3.1347020236640155e-02 -1.8897420484549108e+00 + -4.4159392270233369e+00 -5.7561961521838856e-01 -1.7328441234586474e+00 + -4.9703561433682850e+00 -1.0204976227060316e+00 -1.4686864896290914e+00 + -5.3370998732251982e+00 -1.3761242664961282e+00 -1.4153320652012908e+00 + id 12122 + loc 7.0873689651489258e-01 1.0875094681978226e-01 403 + blend 0.0000000000000000e+00 + interp 4.6080544997303702e-01:3.2514201839596985e-01:7.3123014227492367e-01:3.9395620871324055e-01:1.0447425991293353e+00:3.1402883544972887e-01:1.9719453021313673e+00:3.0503692033146701e-01:2.5810327623013016e+00:4.6080084191853732e-01:3.2544938913482340e+00:3.5616680203675460e-01:3.9899409494440379e+00 + CVs 20 + -5.4954476519066209e-02 3.2799325271168667e-01 2.3136545983926016e-01 + -8.5669697312124204e-02 6.3957749220896476e-01 4.5864775180988326e-01 + -1.2001682155758414e-01 9.4781388109301790e-01 7.0674486469781383e-01 + -1.6603326575166899e-01 1.2410456572527413e+00 9.9344486824975764e-01 + -2.1355497673234403e-01 1.4952817790706827e+00 1.3223870500143653e+00 + -2.4093127686284854e-01 1.6960901366032659e+00 1.6831582720398082e+00 + -2.2505455561265986e-01 1.8407831648056956e+00 2.0579236543399473e+00 + -1.5332741374282655e-01 1.9289175596464254e+00 2.4256418255953607e+00 + -2.7112700153369085e-02 1.9620432967258572e+00 2.7673309535613599e+00 + 1.4514577189468314e-01 1.9486837285628480e+00 3.0764704009397210e+00 + 3.5499354414154527e-01 1.9008087665937059e+00 3.3569454098606428e+00 + 5.9391218292098602e-01 1.8292959309875103e+00 3.6170402539122666e+00 + 8.5623389157658303e-01 1.7418999980447718e+00 3.8708640591644885e+00 + 1.1443560022961363e+00 1.6407335121868778e+00 4.1357564922857097e+00 + 1.4654765530367526e+00 1.5227425119564755e+00 4.4206400995888009e+00 + 1.8062332896583979e+00 1.3958841938346964e+00 4.7181432541381536e+00 + 2.1092093451238823e+00 1.3000243217600183e+00 5.0172424987788009e+00 + 2.3439296355730419e+00 1.2819908548150898e+00 5.3342439435982500e+00 + 2.6125916407870320e+00 1.2994654472403464e+00 5.8152126191008247e+00 + id 12123 + loc 6.9644278287887573e-01 1.2807700037956238e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7532125304829511e-01:3.4326468632279550e-01:2.5223529129240196e-02:3.7531749983576462e-01:7.4635589077618636e-01:3.4916612001200481e-01:1.2150370015838370e+00:3.0677407113739158e-01:1.9185405810278955e+00:3.4170292313954548e-01:2.7749916880326562e+00:2.7246876369199857e-01:3.3655200764875213e+00 + CVs 20 + 2.0285666363690291e-01 2.9538264834628214e-01 -1.4728130882388185e-01 + 3.9056075046435346e-01 5.6790201755559055e-01 -2.9939544606530427e-01 + 5.4809054000646307e-01 8.3355603642911313e-01 -4.8289741773877426e-01 + 6.9962389200529962e-01 1.1002026605163333e+00 -6.7399352709298110e-01 + 8.8933228521239760e-01 1.3571763839291231e+00 -8.0686064743563746e-01 + 1.1325893990840386e+00 1.5717995551771993e+00 -8.3111155873587705e-01 + 1.4058890291865940e+00 1.7091429880675770e+00 -7.3350820081663215e-01 + 1.6641134966498370e+00 1.7499051191029806e+00 -5.1149851635313448e-01 + 1.8392401529349727e+00 1.6866768728471240e+00 -1.8145835140332012e-01 + 1.8852827034574506e+00 1.5364204765035461e+00 1.8671692084857194e-01 + 1.8190696991615805e+00 1.3269109665587431e+00 5.2809176447920803e-01 + 1.6716339425044990e+00 1.0721186106050524e+00 8.0721241338180194e-01 + 1.4846905070155600e+00 7.8949894910331953e-01 9.9184915844286792e-01 + 1.3250784169879481e+00 5.1540613323718620e-01 1.0820489025792759e+00 + 1.2344055647500936e+00 2.7727909791188027e-01 1.1160416773823523e+00 + 1.1925097353731393e+00 6.3559192129492736e-02 1.1231900345616843e+00 + 1.1289279777293380e+00 -1.9378259528106673e-01 1.1611234171530609e+00 + 1.0183892462243458e+00 -4.8906043731555027e-01 1.3921060291027896e+00 + 1.0511914927232191e+00 -5.9095232238910489e-01 1.5474259061101594e+00 + id 12124 + loc 5.2073043584823608e-01 9.5125325024127960e-02 416 + blend 0.0000000000000000e+00 + interp 3.6346973580471231e-01:3.5328561782584478e-01:9.2762193094644585e-01:3.6337093622742994e-01:1.2777717584345054e+00:3.3107485642100598e-01:1.9999516624646179e+00:3.4999910543976614e-01:2.4829118944939639e+00:3.6346610110735428e-01:3.0266033052121966e+00:2.6834687595675966e-01:3.9635747513501398e+00 + CVs 20 + -5.0989694713057943e-01 2.4221987609971810e-01 2.2486418814492426e-03 + -8.7426589194598303e-01 4.0008289165015554e-01 3.7948532210379721e-02 + -1.1964404491201206e+00 5.3189872248230818e-01 7.0764790347140893e-02 + -1.5371893519604904e+00 6.6866834373882322e-01 8.4331660448615842e-02 + -1.8978225903309225e+00 8.0323995948002247e-01 7.3345493835145548e-02 + -2.2763519916248471e+00 9.2715258161571679e-01 2.9683826843096672e-02 + -2.6675479501894142e+00 1.0317901893843273e+00 -5.5966370673754540e-02 + -3.0629228398955362e+00 1.1086891532933190e+00 -1.9000020659588868e-01 + -3.4505146862916818e+00 1.1505101538387768e+00 -3.7335130940094818e-01 + -3.8167587714891855e+00 1.1526572758391640e+00 -6.0231346870917279e-01 + -4.1564033166438765e+00 1.1113604151381813e+00 -8.7058145827493416e-01 + -4.4866882477766596e+00 1.0147201699045705e+00 -1.1677230483020202e+00 + -4.8366206915315804e+00 8.3958292096950338e-01 -1.4658254367830990e+00 + -5.2047385527553427e+00 5.7405829322793944e-01 -1.7169015941775423e+00 + -5.5566566204558532e+00 2.3419254416045154e-01 -1.8920944426691346e+00 + -5.8681120293909004e+00 -1.5640534276852947e-01 -1.9897885105674060e+00 + -6.1321066980912047e+00 -5.7689147127267137e-01 -2.0089419547733200e+00 + -6.3444542011054406e+00 -1.0023789882217007e+00 -1.9489263612542422e+00 + -6.4642739897288504e+00 -1.3179335173220852e+00 -1.9315545307368449e+00 + id 12125 + loc 3.1327867507934570e-01 9.3188679218292236e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7216827162101777e-01:4.7216354993830156e-01:3.8512759167596811e-01:3.8840603484560299e-01:9.8038683723050546e-01:4.0471287822359231e-01:1.8826075323840967e+00:3.5335054005937083e-01:2.4157259801983244e+00:3.6221867405765146e-01:2.7240858349062798e+00:3.5299059634393909e-01:3.1306382784094842e+00:3.8926824866138016e-01:3.9680401054195178e+00 + CVs 20 + -1.0591774115852078e-01 2.9431166227713657e-01 1.1009814821225131e-01 + -1.7861043888428346e-01 5.1173229706905377e-01 7.3172637555254327e-02 + -2.8796358966929836e-01 7.1269365175060762e-01 7.0569396841207999e-03 + -4.4748740263884385e-01 8.9662142887025087e-01 -6.2717629550449738e-02 + -6.5566035910869958e-01 1.0514578817726767e+00 -1.3999022669721445e-01 + -9.0811493546953770e-01 1.1682173599166814e+00 -2.2600389054739423e-01 + -1.1995696722317997e+00 1.2418298367719229e+00 -3.1931624648237500e-01 + -1.5259005526842691e+00 1.2703311735200145e+00 -4.1599853905218642e-01 + -1.8837279264166753e+00 1.2531612806632924e+00 -5.1059709144559684e-01 + -2.2692302049460675e+00 1.1904004729658284e+00 -5.9675743539705151e-01 + -2.6768821355012351e+00 1.0816131692984692e+00 -6.6786580053859435e-01 + -3.0967983296130650e+00 9.2510525601912552e-01 -7.1928337033783551e-01 + -3.5162496705352591e+00 7.2305348901440092e-01 -7.4648146262935577e-01 + -3.9287915406163765e+00 4.9499017256711253e-01 -7.3743456128112872e-01 + -4.3394240983897623e+00 2.7719553481256642e-01 -6.7183146743048816e-01 + -4.7500326165117617e+00 9.8138737316347813e-02 -5.3310773237981246e-01 + -5.1462134162332296e+00 -3.6332236361116169e-02 -3.1894802142524875e-01 + -5.5055821165379859e+00 -1.3206977596001043e-01 -4.3058172510794392e-02 + -5.7684686582178255e+00 -2.9210577533245313e-01 1.1856407822587026e-01 + id 12126 + loc 6.8246304988861084e-02 1.3006657361984253e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4646637684647108e-01:2.7522292866337150e-01:4.9389338504699287e-02:3.4646291218270264e-01:7.6447560855762808e-01:3.0873528234434333e-01:1.3881640478738198e+00:2.8321461800772602e-01:2.4077566178439440e+00:3.3207792729327568e-01:3.2884902555128828e+00 + CVs 20 + -1.3263075738482163e-01 2.9524068866192460e-01 -1.2437498203324820e-02 + -2.8581102632663735e-01 6.1707612523223621e-01 1.5719544275262398e-02 + -4.3706540234242841e-01 9.5642089742764136e-01 6.8588129614146232e-02 + -5.9098809836623123e-01 1.3083021866013573e+00 1.2596053669969692e-01 + -7.6824669165483406e-01 1.6690331191808505e+00 1.6611183504635119e-01 + -9.8355541974875860e-01 2.0287469062640988e+00 1.6675761651975884e-01 + -1.2461472960217559e+00 2.3718437859463553e+00 1.0002000607157024e-01 + -1.5583759625969840e+00 2.6665756691228926e+00 -8.1675360231189043e-02 + -1.8800954462742629e+00 2.8428485365412057e+00 -4.1785508399455629e-01 + -2.1365965519727532e+00 2.8560549306546896e+00 -8.5623244348462468e-01 + -2.3143120604000398e+00 2.7270533348675672e+00 -1.3278477440013445e+00 + -2.4367003427093126e+00 2.4562376781321373e+00 -1.7930753029034401e+00 + -2.5206754470210950e+00 2.0400731229543130e+00 -2.1907637709967522e+00 + -2.5602533221933457e+00 1.5539199816866607e+00 -2.4876274220221375e+00 + -2.5366350180176340e+00 1.1135512165247810e+00 -2.7424988217934447e+00 + -2.4586207805846718e+00 8.2337734706596666e-01 -3.0150022249573474e+00 + -2.3766484793571099e+00 7.4268962180410647e-01 -3.2912071405146786e+00 + -2.3038139060195499e+00 7.8130650162689674e-01 -3.5618156630040470e+00 + -2.1202962659378746e+00 6.7082380831392152e-01 -4.0247497206317702e+00 + id 12127 + loc 4.0864485502243042e-01 4.7601994872093201e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4412444984824812e-01:4.3522742627068328e-01:1.5858427618200555e-03:4.0105977493567507e-01:7.8165799609076259e-01:2.8282712808032751e-01:1.3345634734874707e+00:2.7760030142170383e-01:2.0798543873938442e+00:3.5757645270648064e-01:2.8867418876417972e+00:4.4412000860374967e-01:3.6024698857512205e+00 + CVs 20 + -3.8449700539574472e-02 2.7788743789266646e-01 -2.7543511486768122e-02 + -1.0192999157295335e-01 5.2877494596490782e-01 -5.3006048836157102e-02 + -1.7774447920549508e-01 7.6779276684775466e-01 -7.8354892663452538e-02 + -2.5085967586036118e-01 1.0006764378379482e+00 -1.0176472115512553e-01 + -3.1737452674449190e-01 1.2257086291408674e+00 -1.2635369409288216e-01 + -3.7291905523613900e-01 1.4455361957067949e+00 -1.5698018590684684e-01 + -4.2072698586732005e-01 1.6688716092943647e+00 -2.0223218839559481e-01 + -4.7819812620499802e-01 1.9052702680140774e+00 -2.7339674859458774e-01 + -5.7926940721862974e-01 2.1524520986174922e+00 -3.7702864453699814e-01 + -7.5675165801632593e-01 2.3874145951281167e+00 -5.0951937823963522e-01 + -1.0204231403183393e+00 2.5727138090551507e+00 -6.5930063888891166e-01 + -1.3409790373405586e+00 2.6502174284129012e+00 -7.7729269407683810e-01 + -1.6383851245821135e+00 2.5958164442758882e+00 -8.0379708507682535e-01 + -1.8138139367639576e+00 2.4476486250929064e+00 -7.7825165367947391e-01 + -1.7260395097896735e+00 2.2124762469655423e+00 -7.7865912246576363e-01 + -1.3232787989470616e+00 1.7316229658261988e+00 -7.8598382155425472e-01 + -9.9046384683167987e-01 7.8173946983970388e-01 -6.4266818706294837e-01 + -1.5208689192909985e+00 -5.5726259956896551e-01 -1.8713939298235582e-01 + -1.5247918145416501e+00 -5.0012900979130848e-01 -2.2527022778018285e-01 + id 12128 + loc 6.9190800189971924e-02 4.6288475394248962e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5768340381925526e-01:3.8725812809308346e-01:2.6173886147711245e-01:3.9216388092110210e-01:9.9347537737303160e-01:3.9747970078710854e-01:1.4662470710628537e+00:2.7960876908868243e-01:1.9987896922758450e+00:4.3825070981404879e-01:2.5754240717678636e+00:4.5682321738106640e-01:3.1152972071846685e+00:4.5767882698521711e-01:3.8625405925414116e+00 + CVs 20 + -2.3565643888565641e-01 5.3975541002086302e-01 -1.5496998392362318e-01 + -4.4754537455756210e-01 1.1202825523411903e+00 -3.5969362162800045e-01 + -5.7870526413389412e-01 1.7317228474214548e+00 -6.2917604060870613e-01 + -6.0788338032135991e-01 2.3303267436095991e+00 -9.8386240988393159e-01 + -5.6657746487262250e-01 2.8533280210819294e+00 -1.4482567564607423e+00 + -5.1761486933074030e-01 3.2303774990299909e+00 -2.0234176647453910e+00 + -5.0589270157854205e-01 3.3895173780938479e+00 -2.6679829665294656e+00 + -5.3890137012230277e-01 3.2838450415103213e+00 -3.2995817881185112e+00 + -5.9660348912017014e-01 2.9222585900074662e+00 -3.8286118823037918e+00 + -6.2271329560914546e-01 2.3556828905802716e+00 -4.1924393902940107e+00 + -5.4507811206462975e-01 1.6694024815739188e+00 -4.3546017339078249e+00 + -3.4525356924577927e-01 9.8764307773633497e-01 -4.3176624893247926e+00 + -8.2287923757121045e-02 4.0968132034886529e-01 -4.1368952524954139e+00 + 1.6880108890269380e-01 -3.4681737392239564e-02 -3.8809781668830654e+00 + 3.7694064609564470e-01 -3.5871725216773309e-01 -3.6105600036696779e+00 + 5.6570681164169234e-01 -6.2452805305859271e-01 -3.3889085836618467e+00 + 1.0635468063659201e+00 -7.1343716167903115e-01 -3.4781334556325914e+00 + 1.1467555593270795e+00 -6.3526796771186544e-01 -3.4874248455451093e+00 + 1.2847044194409420e+00 -3.7497476435851507e-01 -3.3911139198868101e+00 + id 12129 + loc 6.1174660921096802e-01 3.0575439333915710e-01 411 + blend 0.0000000000000000e+00 + interp 4.6557650788161647e-01:3.2805335461902085e-01:4.7300991414144289e-01:3.4692652036077171e-01:1.1241346197992670e+00:4.6557185211653768e-01:1.7421089173761630e+00:3.4869842719337962e-01:2.0791633400198353e+00:4.0912368675939864e-01:3.0676515777341775e+00:3.8365792312713159e-01:3.9214574558680484e+00 + CVs 20 + -7.2965283149503357e-01 2.5301122432626383e-01 1.0245511631198553e-01 + -1.3032879935502903e+00 3.9113932328960310e-01 1.8491523926818126e-01 + -1.8349306366844325e+00 4.8149610071355409e-01 2.3690572416400171e-01 + -2.3757108977418016e+00 5.4227543245639942e-01 2.6290583659304578e-01 + -2.9160348212449922e+00 5.6980350342912978e-01 2.7014837823793819e-01 + -3.4489725792407393e+00 5.6437594225645993e-01 2.7130631931235627e-01 + -3.9708465326039804e+00 5.2628723408422284e-01 2.7885737571260794e-01 + -4.4811025929793855e+00 4.5186328611997228e-01 3.0188442755128420e-01 + -4.9797153215167658e+00 3.3279849986486054e-01 3.4830697797391486e-01 + -5.4594654285576247e+00 1.5741794753016825e-01 4.2575101805546633e-01 + -5.9012763927636946e+00 -8.1640583817398582e-02 5.3634979179973019e-01 + -6.2906541439730832e+00 -3.7548167369050223e-01 6.7467664255767301e-01 + -6.6273556196943826e+00 -7.1160629415401555e-01 8.3221766023643329e-01 + -6.9156490244908060e+00 -1.0807630029675601e+00 1.0021876963056171e+00 + -7.1568552667249321e+00 -1.4757366884113456e+00 1.1776893015194490e+00 + -7.3503117141948433e+00 -1.8937431389087473e+00 1.3491554020710947e+00 + -7.4939966847811039e+00 -2.3318687004814813e+00 1.5060368035931693e+00 + -7.5885719777780078e+00 -2.7696010834870322e+00 1.6423101748882289e+00 + -7.6717543083846609e+00 -3.1265354306265145e+00 1.7518192599790479e+00 + id 12130 + loc 8.0612170696258545e-01 5.0217274576425552e-02 384 + blend 0.0000000000000000e+00 + interp 2.7544299416469764e-01:2.7479771572561834e-01:8.1677103793477124e-01:1.6411117021285379e-01:1.6072359455297893e+00:2.7261349135688939e-01:2.5162132691885519e+00:2.7544023973475601e-01:3.4194727818350752e+00 + CVs 20 + -1.1935222044115843e+00 2.0285917008292562e-01 6.9164022703895101e-01 + -1.9939442902439632e+00 2.1587788736444030e-01 1.2304964699611960e+00 + -2.6961681263795882e+00 1.4246283299341389e-01 1.7336396637635505e+00 + -3.4147636380500419e+00 4.3686904379802716e-03 2.2511593588236045e+00 + -4.1152332349210967e+00 -2.0124076254015871e-01 2.7635811212263270e+00 + -4.7630560118286303e+00 -4.6846993252232305e-01 3.2554305665963410e+00 + -5.3314530328832133e+00 -7.7996468557332610e-01 3.7202692987178514e+00 + -5.8063225063606234e+00 -1.1075550080794538e+00 4.1618435439795736e+00 + -6.1908492343249639e+00 -1.4337632504371736e+00 4.5890483467525724e+00 + -6.5007538369545337e+00 -1.7565894332020335e+00 5.0213183730936981e+00 + -6.7525433815539735e+00 -2.0891082014378757e+00 5.4777877323166759e+00 + -6.9522645812226607e+00 -2.4512971207248451e+00 5.9640876409108872e+00 + -7.0928784929921651e+00 -2.8576941554652087e+00 6.4687635632923506e+00 + -7.1624836543924300e+00 -3.3008810952355909e+00 6.9611326146586103e+00 + -7.1599168057942322e+00 -3.7565048466823567e+00 7.4033073736543065e+00 + -7.0940713831314284e+00 -4.2109907003962217e+00 7.7690113684611370e+00 + -6.9771605778689851e+00 -4.6585743458044817e+00 8.0423797394858791e+00 + -6.8241216601262948e+00 -5.0877203057857709e+00 8.2155062927570981e+00 + -6.6665474224709911e+00 -5.4264390304203047e+00 8.2613423455980417e+00 + id 12131 + loc 7.7567055821418762e-02 8.7925744056701660e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4698686845111540e-01:3.6480854914334909e-01:4.2508692006132942e-02:2.8743883567845985e-01:9.0220383918149327e-01:4.4698239858243094e-01:1.1339369820502934e+00:3.2178606082502181e-01:2.0096435929922394e+00:3.4619608383652989e-01:2.7792756784179442e+00:2.8322627772574421e-01:3.3337928053624806e+00 + CVs 20 + 2.8612146099530583e-01 3.5637509546649437e-01 -2.0129117468968358e-01 + 5.6338954239785644e-01 7.0719205924283823e-01 -4.2827730393323649e-01 + 8.3912565806078632e-01 1.0518632554075078e+00 -6.5207868950810921e-01 + 1.1162017309061854e+00 1.3846468531035261e+00 -8.5906030577769232e-01 + 1.3884005082779818e+00 1.6932324766034574e+00 -1.0546761953384691e+00 + 1.6407923472949533e+00 1.9584490865072370e+00 -1.2596408999076758e+00 + 1.8634041413744111e+00 2.1594914638574081e+00 -1.4928344839595018e+00 + 2.0493564554457047e+00 2.2659722675197704e+00 -1.7515440079863580e+00 + 2.1979363200671651e+00 2.2604480271739824e+00 -2.0147744145294784e+00 + 2.3264722981105264e+00 2.1552246139684024e+00 -2.2779131566031170e+00 + 2.4546293261299477e+00 1.9621362948689438e+00 -2.5384922509241483e+00 + 2.6035460334328100e+00 1.7098834366577438e+00 -2.7769152464218680e+00 + 2.7922375884313162e+00 1.4506435771266988e+00 -2.9793749894813257e+00 + 3.0189389950430336e+00 1.2252938934919153e+00 -3.1462628653565257e+00 + 3.2648230386524704e+00 1.0538165039056639e+00 -3.2807425057836945e+00 + 3.4956417368350565e+00 9.4802867194951046e-01 -3.3702644541082809e+00 + 3.6785413291562805e+00 8.7046526129596768e-01 -3.3870679135102000e+00 + 3.8587687838252629e+00 8.3487708033383345e-01 -3.4321589201709530e+00 + 4.0534017435637537e+00 1.1385423028323967e+00 -3.5685229126670550e+00 + id 12132 + loc 1.8447770178318024e-01 8.9375370740890503e-01 1076 + blend 0.0000000000000000e+00 + interp 5.5623411304547210e-01:2.6532447640347018e-01:1.1071732758685116e-03:3.2799744926564922e-01:8.9689504175716983e-01:5.5622855070434163e-01:1.2743241444720117e+00:5.1684943310299780e-01:1.9198850390756386e+00:3.3470478163679623e-01:2.0967368264517523e+00:3.2672805721163922e-01:3.0595038684178406e+00 + CVs 20 + 3.3724390814432031e-01 2.9823527925491944e-01 -8.5599466197346596e-02 + 6.8802908509548444e-01 5.6534655980011650e-01 -1.9029998915428539e-01 + 1.0470805336575015e+00 8.0477511943965685e-01 -3.0436242772838562e-01 + 1.4037337671673786e+00 1.0030926085740273e+00 -4.3618915407249342e-01 + 1.7453377552519040e+00 1.1453684444862353e+00 -5.9845945181358218e-01 + 2.0540223030227640e+00 1.2175907919131959e+00 -7.9764416699290641e-01 + 2.3105223988029522e+00 1.2105790752068522e+00 -1.0286895790001112e+00 + 2.4995678810546198e+00 1.1233839117079925e+00 -1.2738623066890284e+00 + 2.6149754627121098e+00 9.6254797643539702e-01 -1.5041744568459721e+00 + 2.6673587391256386e+00 7.4436910189160455e-01 -1.6890141590724266e+00 + 2.6738600867127640e+00 4.8894325385987070e-01 -1.8099170753274927e+00 + 2.6429582206919733e+00 2.1496197779662340e-01 -1.8681765734340798e+00 + 2.5692002660729001e+00 -6.3532864087860852e-02 -1.9005009252596041e+00 + 2.4212087230150199e+00 -3.4366698795357342e-01 -1.9768100511303499e+00 + 2.1349410882035191e+00 -6.0273091127687639e-01 -2.1151104630849091e+00 + 1.6736797165388908e+00 -7.6523091033140012e-01 -2.2454009795089469e+00 + 1.0831952368832438e+00 -7.4483660762609760e-01 -2.2757124016062664e+00 + 5.1998181361170459e-01 -5.9941477828034018e-01 -2.2241337312682892e+00 + 1.2172127429065827e-01 -7.1876588290711152e-01 -2.3695609797056365e+00 + id 12133 + loc 4.6674731373786926e-01 6.0652333498001099e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4102073882072429e-01:2.9602360622563739e-01:3.7698601679378840e-01:4.3518699800629945e-01:9.6781103365259413e-01:4.4101632861333612e-01:1.6399079019277685e+00:3.7967460211467458e-01:2.1424190040703674e+00:3.2424587895980178e-01:2.9365727067923078e+00:3.6868113994609369e-01:3.9504609225691425e+00 + CVs 20 + -1.5847663568947656e-01 1.9887020061435731e-01 2.2863710213291616e-01 + -2.5751214091270014e-01 3.2094443922056648e-01 3.1869625096723297e-01 + -3.5032068211489126e-01 4.1540656769044193e-01 3.6863945670081721e-01 + -4.5664022395697468e-01 5.0176756792266197e-01 4.1579842402630163e-01 + -5.7242985851969030e-01 5.7914917837685209e-01 4.5714280218878334e-01 + -6.9364015149060365e-01 6.4752790680840022e-01 4.9103528754703657e-01 + -8.1698820020972207e-01 7.0793377743238861e-01 5.1730963209697756e-01 + -9.4033270575026351e-01 7.6213836083760111e-01 5.3714349296075203e-01 + -1.0628474852919310e+00 8.1195325886143244e-01 5.5276422900481881e-01 + -1.1850347064305322e+00 8.5867425139998466e-01 5.6707099301697106e-01 + -1.3080693732355828e+00 9.0287869588649095e-01 5.8334157755369731e-01 + -1.4326124617192182e+00 9.4459378066353883e-01 6.0514219375056211e-01 + -1.5572604842939897e+00 9.8386590221591597e-01 6.3689033516423144e-01 + -1.6778380057901994e+00 1.0210709301745706e+00 6.8438936085223889e-01 + -1.7892702569350698e+00 1.0561330945079670e+00 7.5238032411884492e-01 + -1.8873996090746827e+00 1.0876670747776718e+00 8.4028874180837276e-01 + -1.9673962705170887e+00 1.1131735998901360e+00 9.4311130229745321e-01 + -2.0211527020356721e+00 1.1285660433593081e+00 1.0595745400320520e+00 + -2.0272178676348225e+00 1.1135975783642273e+00 1.2122314977981143e+00 + id 12134 + loc 1.4082757115829736e-04 6.6141468286514282e-01 406 + blend 0.0000000000000000e+00 + interp 4.6431759392404692e-01:2.7092677814296723e-01:3.5011114506705354e-01:3.0763059597118603e-01:1.4566638748487080e+00:4.6431295074810769e-01:1.9398837210354543e+00:3.7162332615895854e-01:2.8638125657591957e+00:4.1155645794623291e-01:3.2681356461254523e+00:3.7358953243540416e-01:3.9999486327867926e+00 + CVs 20 + 1.8373112546402687e-01 2.7076349002489020e-01 -1.4559375818235934e-01 + 2.4543389230044008e-01 4.5713110129088919e-01 -2.8031462035935656e-01 + 2.8304691059672293e-01 5.8921986787047742e-01 -3.9892195909010886e-01 + 3.2317759280759950e-01 7.1168440035878122e-01 -5.1031376211464563e-01 + 3.6290817069884418e-01 8.3123257467278622e-01 -6.1224855488269259e-01 + 3.9997012040031438e-01 9.5811447736913113e-01 -7.0186804469414932e-01 + 4.3072579903582953e-01 1.1119031032843032e+00 -7.7053459857915541e-01 + 4.4887114670598360e-01 1.3312131382855168e+00 -7.8021500916424669e-01 + 4.5998759267054312e-01 1.6186703268088345e+00 -5.9819691730592950e-01 + 5.1891661762651264e-01 1.7422395130313295e+00 -2.5102987797115028e-01 + 6.1197506043078931e-01 1.7243539164756863e+00 -2.2648463045235434e-02 + 7.1143705431047632e-01 1.6867109347056017e+00 1.2747131281124335e-01 + 8.1970849761056730e-01 1.6405608487216270e+00 2.4985108497697731e-01 + 9.3837251411705713e-01 1.6052650305766347e+00 3.3728531236612502e-01 + 1.0629922772781235e+00 1.6123939391920081e+00 3.6878610377993154e-01 + 1.1862214334367944e+00 1.6694578965584250e+00 3.3909698423722900e-01 + 1.3087400061478491e+00 1.7551265775334073e+00 2.6609739304256885e-01 + 1.4447539613216260e+00 1.8489287228047626e+00 1.8034853017782532e-01 + 1.7218624645571097e+00 1.8618533617800312e+00 2.6775452896238749e-01 + id 12135 + loc 3.4856483340263367e-01 4.2247107625007629e-01 416 + blend 0.0000000000000000e+00 + interp 4.3657873933225572e-01:4.1163642784642723e-01:4.7650726300060653e-01:3.3883475743326846e-01:1.1800448125539746e+00:3.8469521269797347e-01:2.0547551936582567e+00:2.8442407644907702e-01:2.5383544923764623e+00:3.9068485995196045e-01:2.9881602334950412e+00:4.3657437354486239e-01:3.2869448870142910e+00:4.2158511195527826e-01:3.9497502111682361e+00 + CVs 20 + -1.1075438163856613e-01 2.1703457308523313e-01 -6.4095166460755904e-01 + -2.4449140011108644e-01 3.0916507882105815e-01 -1.0653947788316216e+00 + -3.7691512534794258e-01 3.5355715175451652e-01 -1.4475801178789665e+00 + -4.9674141759549417e-01 3.8174811154249916e-01 -1.8623748013310628e+00 + -5.9540230702744279e-01 3.8760880912527462e-01 -2.3075886430540846e+00 + -6.6097477461485132e-01 3.6614928562962945e-01 -2.7792770802694347e+00 + -6.8043657027858295e-01 3.1442550966692762e-01 -3.2692587563452098e+00 + -6.4502866002145320e-01 2.3187357200812586e-01 -3.7647781631868331e+00 + -5.5165390206557485e-01 1.2043480010960250e-01 -4.2519809700787237e+00 + -4.0259043400031458e-01 -1.5222247618730922e-02 -4.7168984558709930e+00 + -2.1460301077940525e-01 -1.6885736439279486e-01 -5.1439441005634867e+00 + -2.8344986963473540e-02 -3.3959765730733604e-01 -5.5237887374177248e+00 + 1.1266420552580214e-01 -5.3319634597108401e-01 -5.8629120860840329e+00 + 1.9653733855919264e-01 -7.5395092699386401e-01 -6.1768221924887383e+00 + 2.3103581174374477e-01 -1.0005915342243021e+00 -6.4744803219226084e+00 + 2.1654995402459443e-01 -1.2624204754957233e+00 -6.7490423624900258e+00 + 1.4667260752393496e-01 -1.5227727646922533e+00 -6.9892516885428577e+00 + 2.2426382882922646e-02 -1.7642959358211652e+00 -7.1910809321521318e+00 + -6.9479970705586758e-02 -1.9832942181691520e+00 -7.4120429428240797e+00 + id 12136 + loc 7.2185474634170532e-01 4.6624380350112915e-01 397 + blend 0.0000000000000000e+00 + interp 6.0797624346405454e-01:5.0539207629973082e-01:9.8203950720445221e-01:4.2859693478377253e-01:1.2065453793925416e+00:2.6799421540643442e-01:1.8363668506390858e+00:4.5753238391260864e-01:2.3876726697405921e+00:4.2160866360909266e-01:2.9656475972420617e+00:6.0797016370161994e-01:3.0461467395384032e+00 + CVs 20 + -1.2442703145222991e+00 1.8173884390466932e-01 3.3624760857557512e-01 + -2.0584423640888065e+00 1.3258698407831143e-01 6.0483672658664156e-01 + -2.7987430980375523e+00 -1.0564995259382537e-03 8.6405873190879889e-01 + -3.5908058586380673e+00 -1.5298728877235609e-01 1.1215499352345395e+00 + -4.4007222005418702e+00 -3.2674734945179912e-01 1.3636360034326445e+00 + -5.1922074383465588e+00 -5.2464163861349211e-01 1.5832105622616168e+00 + -5.9308209025340259e+00 -7.5087076664770580e-01 1.7809163453515664e+00 + -6.5897787711331555e+00 -1.0145963469025592e+00 1.9579989395406683e+00 + -7.1567839796861241e+00 -1.3249623228851943e+00 2.1175106113506184e+00 + -7.6370402994969986e+00 -1.6861637395927256e+00 2.2728717636290656e+00 + -8.0416523511070537e+00 -2.0937172019971149e+00 2.4431290225882458e+00 + -8.3782431891306768e+00 -2.5444710997611582e+00 2.6392104232529805e+00 + -8.6501124158048857e+00 -3.0412108282002634e+00 2.8615916349265751e+00 + -8.8536869927943389e+00 -3.5885246568083673e+00 3.1031824278077256e+00 + -8.9782778218950892e+00 -4.1861052357480890e+00 3.3508570627187266e+00 + -9.0098128816793341e+00 -4.8247443697782089e+00 3.5844126008447805e+00 + -8.9379491804942806e+00 -5.4865791449304027e+00 3.7766567885096429e+00 + -8.7675571315091094e+00 -6.1440456709541387e+00 3.9040645969294907e+00 + -8.6117880949847123e+00 -6.7633556273420181e+00 4.0026347004259106e+00 + id 12137 + loc 7.3362451791763306e-01 7.6467961072921753e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0642304086281054e-01:3.6748745219096329e-01:4.6675764131492947e-01:2.9102222568477881e-01:1.0036104722643235e+00:3.2092826284315534e-01:1.7492731936869230e+00:4.4769673950909961e-01:2.5688068028591227e+00:2.8246230922929738e-01:2.9858360409090157e+00:3.7447327309772810e-01:3.4213873545305238e+00:5.0641797663240196e-01:3.9984385870231218e+00 + CVs 20 + 2.2331392539667477e-01 3.0146340505121921e-01 -1.1406861716061507e-01 + 4.3499918248105818e-01 6.0240643811422179e-01 -2.3412173563033220e-01 + 6.5114631501547937e-01 8.9080756328059263e-01 -3.7651053123235911e-01 + 8.7874989402159476e-01 1.1558492531965170e+00 -5.5166129966364197e-01 + 1.1177771155450582e+00 1.3894659361104320e+00 -7.6605689948248012e-01 + 1.3658294401478648e+00 1.5835721751257381e+00 -1.0258556306969804e+00 + 1.6170570418740537e+00 1.7293135952139860e+00 -1.3373807183831858e+00 + 1.8600659862753066e+00 1.8156155219206758e+00 -1.7062364931058434e+00 + 2.0760655868059068e+00 1.8275710698581393e+00 -2.1336311704868454e+00 + 2.2431982096420700e+00 1.7483069374094913e+00 -2.6095358508130486e+00 + 2.3448742477987641e+00 1.5653920557298258e+00 -3.1065585991355280e+00 + 2.3841853861717808e+00 1.2897183321095687e+00 -3.5803459730052949e+00 + 2.3963174622879730e+00 9.8034550820313338e-01 -3.9928326693492333e+00 + 2.4318189297981414e+00 7.6450137185941336e-01 -4.3216214607623860e+00 + 2.5275324890334465e+00 8.3218012269637187e-01 -4.4726274362685094e+00 + 2.6451829047480993e+00 1.1642006022967115e+00 -4.1819539431564507e+00 + 2.5904504469002352e+00 1.2529580200439365e+00 -3.2839210002862562e+00 + 2.1527472212177812e+00 5.4086230843516259e-01 -2.3779883948948246e+00 + 2.2496641528408308e+00 7.4767051651480743e-01 -2.2552849804116120e+00 + id 12138 + loc 8.0904340744018555e-01 2.5606378912925720e-01 1048 + blend 0.0000000000000000e+00 + interp 2.9750319707102230e-01:2.9746449293255089e-01:7.1185092591124000e-01:2.9750022203905158e-01:1.2588356107999519e+00:2.9248112791685621e-01:1.9770648814813354e+00:2.8389903028149849e-01:2.4223244760015818e+00:2.5607578652619695e-01:3.0519799856257652e+00:2.7211149162260073e-01:3.8488085631465276e+00 + CVs 20 + -1.5650689880651159e-02 5.3359905593601298e-01 3.9842645422979089e-01 + -5.1001421158464788e-02 1.0911560681475232e+00 7.8772954285640384e-01 + -1.5035108898284205e-01 1.6756546180614766e+00 1.1471302616591499e+00 + -3.6653845397157070e-01 2.2797338591067859e+00 1.4524204798182625e+00 + -7.4333800188781318e-01 2.8559132342750204e+00 1.6773330387071630e+00 + -1.2858152545029813e+00 3.3272555761569826e+00 1.8149120542795034e+00 + -1.9556901721816797e+00 3.6143196445431363e+00 1.8765379466574890e+00 + -2.6828663811721043e+00 3.6679388084227855e+00 1.8845091832676415e+00 + -3.4019655714150518e+00 3.4740218163228134e+00 1.8515789190919696e+00 + -4.0528534547901138e+00 3.0327633765670394e+00 1.7608681703198557e+00 + -4.5517842244703814e+00 2.3820908585154466e+00 1.5712744695347589e+00 + -4.8177254169383339e+00 1.6257321771537447e+00 1.2495283548088583e+00 + -4.8283084026547636e+00 8.9941027435742527e-01 7.9585588514513372e-01 + -4.6173285510780708e+00 3.4842055061319371e-01 2.4600542327579633e-01 + -4.2583376240524915e+00 9.5027312439099232e-02 -3.3715304370331067e-01 + -3.8438858331619494e+00 1.8493007415853080e-01 -8.8782728455368909e-01 + -3.4641784562927849e+00 5.5729802017966856e-01 -1.3029372964637207e+00 + -3.3029125692133539e+00 9.4226887032449169e-01 -1.3550396487187850e+00 + -3.0721958692474605e+00 1.6568182619091780e+00 -1.2737685445117293e+00 + id 12139 + loc 2.6429602503776550e-01 5.8130437135696411e-01 411 + blend 0.0000000000000000e+00 + interp 4.0789196836131231e-01:2.7550610442554047e-01:1.8835087659108996e-01:4.0703602555919627e-01:9.2938792074335663e-01:3.3745348173914519e-01:1.3226507987556420e+00:3.2293365069715302e-01:2.2432080617207313e+00:3.5906335354957941e-01:3.0921205251410706e+00:4.0788788944162874e-01:3.8631316919973600e+00 + CVs 20 + 8.3981202077116568e-01 1.3224677833395634e-01 -6.8039462871994000e-02 + 1.4430190707830870e+00 1.5707244160824785e-01 -1.3223315374778843e-01 + 2.0005729748683061e+00 1.5027671943789211e-01 -1.6136003682874583e-01 + 2.5718531220938683e+00 1.3561054350119550e-01 -1.4356967450411490e-01 + 3.1414427381989007e+00 1.0966714222221341e-01 -8.1699693283447714e-02 + 3.6954127522268445e+00 7.0533145401354025e-02 1.4819342466951185e-02 + 4.2222843330317561e+00 1.6096958934135319e-02 1.3380664065429215e-01 + 4.7145198720556367e+00 -5.7497841632570879e-02 2.6435915817189304e-01 + 5.1701995294834102e+00 -1.5480936608035711e-01 3.9851519871991348e-01 + 5.5898661993552823e+00 -2.7983462383451063e-01 5.3134502807945627e-01 + 5.9750895060573983e+00 -4.3591252433187200e-01 6.5159388352801073e-01 + 6.3287303270137496e+00 -6.2581149129603308e-01 7.4034330592161457e-01 + 6.6528407542313328e+00 -8.5091538651908727e-01 7.8499981857931400e-01 + 6.9479798437726767e+00 -1.1098463134984629e+00 7.7836826421545302e-01 + 7.2130045149167152e+00 -1.3964367197263576e+00 7.1624357320828136e-01 + 7.4465888084513665e+00 -1.7027907344080093e+00 5.9692370205567169e-01 + 7.6441009578589831e+00 -2.0232785068172263e+00 4.2725636758622282e-01 + 7.7907665089097522e+00 -2.3429756535493351e+00 2.2718859564917931e-01 + 7.8160963100385548e+00 -2.6267509957390995e+00 -1.5547828926562979e-02 + id 12140 + loc 6.6383051872253418e-01 1.2807700037956238e-01 1085 + blend 0.0000000000000000e+00 + interp 5.2521967833742822e-01:3.1667321007108579e-01:1.8464640419767142e-02:3.4493635951828688e-01:7.5718472211636456e-01:3.3348765409587916e-01:1.2200164650658556e+00:4.6020613621556783e-01:1.9268881935379443e+00:3.1555806139710124e-01:2.7903899962032317e+00:5.2521442614064484e-01:3.3974119982294062e+00 + CVs 20 + 3.1788243588870180e-01 3.3472698307265969e-01 -2.1333241988317775e-01 + 5.8540829967885033e-01 6.3987496018007439e-01 -3.7181114847484292e-01 + 8.4327746184120833e-01 9.2412188394577033e-01 -4.9722093822818653e-01 + 1.1168523646267050e+00 1.1924220114750725e+00 -5.9106583302568105e-01 + 1.4170996785165260e+00 1.4416307014579923e+00 -6.3909936845319537e-01 + 1.7491990735386853e+00 1.6652083376579392e+00 -6.2868981252781175e-01 + 2.1105934250709635e+00 1.8532714605620035e+00 -5.5083156598742411e-01 + 2.4925743610054742e+00 1.9949218423488766e+00 -4.0266312564458007e-01 + 2.8834978500509023e+00 2.0808407881235871e+00 -1.8667000038850445e-01 + 3.2739250857057174e+00 2.1032869386773037e+00 8.9668964695440723e-02 + 3.6629087408380689e+00 2.0538949542585896e+00 4.1022360369414801e-01 + 4.0576080139047317e+00 1.9204970532285477e+00 7.4816829083024783e-01 + 4.4644379102782858e+00 1.6903947884080284e+00 1.0661321907658055e+00 + 4.8818754004230458e+00 1.3644222011399481e+00 1.3190144921530109e+00 + 5.3024536528478183e+00 9.7566663062001413e-01 1.4552163214291038e+00 + 5.7090029818855710e+00 6.1354334478701777e-01 1.4325413550336688e+00 + 6.0792880905967381e+00 4.0123377224804868e-01 1.2825331313163559e+00 + 6.4115615725125101e+00 3.6872854019946144e-01 1.0887821455394504e+00 + 6.8726205411345065e+00 2.0397250338487427e-01 8.0741404645340409e-01 + id 12141 + loc 1.0082649439573288e-01 6.4721846580505371e-01 261 + blend 0.0000000000000000e+00 + interp 5.1054679493160400e+00:1.2512264773174162e+00:9.9997208594897047e-01:2.4240573120503731e-01:1.0023571369251010e+00:7.1598527957890079e-01:1.0051011842502970e+00:4.5750211600393859e-01:1.8843506897168485e+00:3.0703717649632245e-01:2.5295109590132059e+00:8.5153450735504765e-01:2.8560686787078584e+00:4.0531828925445668e+00:2.9460473656610189e+00:4.7154563690387370e+00:2.9580282701570453e+00:5.1054579493160404e+00:2.9624194169881495e+00 + CVs 20 + -8.5444784437651700e-01 3.8735577417786299e-01 -2.5859957218858182e-01 + -1.4318847533983843e+00 6.1077640449811255e-01 -3.6600342866588453e-01 + -1.9534590572372228e+00 7.1449606538260435e-01 -3.8413970438236061e-01 + -2.4986444596777053e+00 7.3540701598758684e-01 -3.5469164788687624e-01 + -3.0556467491038863e+00 7.2916549033023104e-01 -3.1972867469198019e-01 + -3.6134227188966102e+00 7.2805361221207765e-01 -3.2367629258286856e-01 + -4.1579045260309506e+00 7.1156772467343610e-01 -4.0471222871945245e-01 + -4.6703104816622165e+00 6.5503236959914890e-01 -5.7533547832227860e-01 + -5.1370483449661233e+00 5.7824322148313123e-01 -8.3011447195386590e-01 + -5.5564020233857088e+00 5.2146468123528611e-01 -1.1618913209343027e+00 + -5.9449268520122587e+00 4.9651628909216949e-01 -1.5345892181678016e+00 + -6.3327483347197022e+00 5.0169233991980255e-01 -1.9024376802695735e+00 + -6.7481308166340108e+00 5.0525303611062711e-01 -2.2613207438173046e+00 + -7.1947722191923518e+00 4.4600255242131137e-01 -2.6403305846293410e+00 + -7.6072313422216071e+00 2.8450511993354111e-01 -3.0873815570091692e+00 + -7.8076632651689293e+00 4.9894342545040438e-03 -3.6369017597540778e+00 + -7.7375415690913387e+00 -3.9877536905705302e-01 -4.1923694688769686e+00 + -7.6486149653329445e+00 -9.4100638739134679e-01 -4.4918407630649826e+00 + -7.7983628766672419e+00 -1.4885527147461302e+00 -4.3168648548762762e+00 + id 12142 + loc 9.1275393962860107e-01 1.3851612806320190e-01 1084 + blend 0.0000000000000000e+00 + interp 5.1248862616148971e-01:4.5877325185736573e-01:6.8224753743252453e-01:5.1248350127522813e-01:9.9997599274244353e-01:3.6079189211964391e-01:1.7002312481977753e+00:3.1337899570745020e-01:2.7090379510910774e+00:3.1043112772152637e-01:3.3435952179125454e+00:3.4194375198189242e-01:3.9997116076228192e+00 + CVs 20 + 1.8394327917293268e-01 2.7750952473363122e-01 -6.1339751571942033e-02 + 3.3474202507500800e-01 5.6480187582880614e-01 -1.2930446801852452e-01 + 4.3397812526118379e-01 8.6074085612355777e-01 -2.1229396247430227e-01 + 5.0129008919946971e-01 1.1591816655061313e+00 -2.8395344284315582e-01 + 5.7684632700720706e-01 1.4459303849445118e+00 -2.9852086806904665e-01 + 6.7950974152849297e-01 1.6986150234553024e+00 -2.2766698781308292e-01 + 7.9087575230893903e-01 1.8902169070396959e+00 -8.0609489757602404e-02 + 8.7444827871461639e-01 2.0107819858426788e+00 9.5576194877320608e-02 + 9.1780933773335249e-01 2.0817247811061983e+00 2.5525189425314843e-01 + 9.2934008660894718e-01 2.1215302541098717e+00 4.0884650204399275e-01 + 9.0533657247775767e-01 2.1322384639074690e+00 5.8024869387222311e-01 + 8.5580037568984468e-01 2.1207612248255963e+00 7.7101999511067509e-01 + 7.7925271548346919e-01 2.0815295620841336e+00 9.8111215809220698e-01 + 6.3655055640024349e-01 1.9856204654770222e+00 1.1619280939055692e+00 + 4.3139506335399652e-01 1.8238503846392520e+00 1.2351215408374774e+00 + 2.2432854652031842e-01 1.6014712568854472e+00 1.1894907819542371e+00 + 4.3583239411380890e-02 1.2639275966920722e+00 1.0188225172504157e+00 + -1.8263805047334236e-01 7.1794674376806844e-01 8.7746842484783250e-01 + -6.8085110049434280e-02 6.9884805960084295e-01 1.0295790911090197e+00 + id 12143 + loc 9.5433092117309570e-01 1.8983225524425507e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3333882116114314e-01:2.8599874979532353e-01:1.8856477918936643e-01:4.1155279765167396e-01:8.1872147182482657e-01:2.7984740012545700e-01:1.5724631388401313e+00:3.2476179603185179e-01:2.4889160529120220e+00:4.3333448777293154e-01:2.9962706975685744e+00:2.7203515357914404e-01:3.5349542395102813e+00 + CVs 20 + -1.7907868110214495e-01 1.9890470566145096e-01 2.1298012591135909e-01 + -3.5788899681328346e-01 3.9128988970354167e-01 4.2798744042700876e-01 + -5.3054980138597418e-01 5.7944332546171462e-01 6.4765755854448581e-01 + -6.9249036779194229e-01 7.6292935433649778e-01 8.7213593585105720e-01 + -8.4167164836467312e-01 9.3950499263648801e-01 1.0992600229180118e+00 + -9.7667240040744618e-01 1.1065001027412324e+00 1.3266593689263655e+00 + -1.0966637990238857e+00 1.2621207932853731e+00 1.5530180089075318e+00 + -1.2018619815040064e+00 1.4056165311541031e+00 1.7779387981718031e+00 + -1.2928652139000896e+00 1.5365380539825395e+00 2.0037330559505055e+00 + -1.3683450273009521e+00 1.6539065038548333e+00 2.2342741372078021e+00 + -1.4224131053415501e+00 1.7553028185295445e+00 2.4725868398335837e+00 + -1.4447197219604315e+00 1.8343009897914411e+00 2.7215810794531672e+00 + -1.4280636605552348e+00 1.8837202791999728e+00 2.9815683094920282e+00 + -1.3722823121071661e+00 1.9002750695453656e+00 3.2519853690757259e+00 + -1.2830786811316546e+00 1.8804101322441444e+00 3.5362005465905186e+00 + -1.1735309810459815e+00 1.8181018987036888e+00 3.8405124325133677e+00 + -1.0621150229907035e+00 1.7000506628252854e+00 4.1615142696631731e+00 + -9.5918436625304504e-01 1.5024983012940292e+00 4.4612036785003575e+00 + -8.7870924829849906e-01 1.1864821295623764e+00 4.5740889990053679e+00 + id 12144 + loc 2.0606911182403564e-01 3.9132934808731079e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5216084553619875e-01:3.3980491819796399e-01:8.6449676444101664e-01:3.1515277648261830e-01:1.2134703505252689e+00:3.1319227588176318e-01:2.0012837613398231e+00:3.0560216912749344e-01:2.7733559612545919e+00:3.5215732392774340e-01:3.4456844338048662e+00:2.7673685849601759e-01:3.9994336332794740e+00 + CVs 20 + 4.3412324239386996e-01 2.3901215150781693e-01 1.8054460754380483e-01 + 6.9083423000222755e-01 3.9675819021238778e-01 3.2005406749496890e-01 + 8.8362401664397583e-01 5.0464190806263431e-01 4.4632397186808631e-01 + 1.0807604406251490e+00 6.0360256916906496e-01 6.0135234947185301e-01 + 1.2770107595623224e+00 6.9159019553308732e-01 7.8565323247320662e-01 + 1.4668167745070928e+00 7.6602601929735137e-01 9.9910848697098675e-01 + 1.6450111146527628e+00 8.2489323343023824e-01 1.2410951612536867e+00 + 1.8068977327717113e+00 8.6662079304084938e-01 1.5101271116921688e+00 + 1.9481791643538158e+00 8.9088361140951478e-01 1.8035914636930821e+00 + 2.0659725308517718e+00 8.9916103963544913e-01 2.1175301099593340e+00 + 2.1599491392339081e+00 8.9478778753013133e-01 2.4472547366569843e+00 + 2.2327696062691325e+00 8.8256299685174089e-01 2.7880985149026660e+00 + 2.2895868807947197e+00 8.6759504524038422e-01 3.1359687059805728e+00 + 2.3359136131730351e+00 8.5383173732673368e-01 3.4878097926801863e+00 + 2.3759395159698737e+00 8.4353594797827858e-01 3.8406763896102118e+00 + 2.4135808185370844e+00 8.3774589042132730e-01 4.1900500136957941e+00 + 2.4542106706289450e+00 8.3687979265221313e-01 4.5295878382143879e+00 + 2.5026170948825266e+00 8.4146938497550572e-01 4.8525364081314404e+00 + 2.5425322135782431e+00 8.8693986208622833e-01 5.1369133746786781e+00 + id 12145 + loc 6.2340229749679565e-01 1.2370547652244568e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5617736442140472e-01:3.2793488999453418e-01:7.4617282256108275e-01:3.9817847613541490e-01:1.0413842701349889e+00:3.0209733245903675e-01:1.9737700366105257e+00:3.0446463838264071e-01:2.5964687300363032e+00:4.5617280264776050e-01:3.2282969604020320e+00:3.4680978681972963e-01:3.9889035668996846e+00 + CVs 20 + -1.4593337699831363e-01 3.9279723063219568e-01 -4.5647459726443435e-02 + -2.9483729546909221e-01 7.7783237749083012e-01 -6.8104578288123663e-02 + -4.6514953407796855e-01 1.1536176824614566e+00 -6.8054413020340598e-02 + -6.6487826986944898e-01 1.5158626162460842e+00 -4.1775446160667862e-02 + -8.9804132465487796e-01 1.8592831077548051e+00 1.8995197519685370e-02 + -1.1684228271126949e+00 2.1764790190229037e+00 1.2764116669175729e-01 + -1.4728580402560625e+00 2.4527876660912771e+00 2.9430280001211861e-01 + -1.8012303883249112e+00 2.6724257380413681e+00 5.1798975821352355e-01 + -2.1433117291905104e+00 2.8243116930185366e+00 7.9005764060051675e-01 + -2.4907189940420800e+00 2.9015221909480666e+00 1.0963252793893175e+00 + -2.8368616963479574e+00 2.9025680531244928e+00 1.4180787904667609e+00 + -3.1776757905477062e+00 2.8331075062089273e+00 1.7361319616916919e+00 + -3.5134326713051238e+00 2.7026488787152214e+00 2.0380614201628506e+00 + -3.8475802679518680e+00 2.5178043934599263e+00 2.3209787994094464e+00 + -4.1863087270101920e+00 2.2712540766682592e+00 2.5924961801018487e+00 + -4.5376726013461006e+00 1.9187191039495002e+00 2.8584983282368643e+00 + -4.8921044523824788e+00 1.3877244505659188e+00 3.0363551260230843e+00 + -5.1906143539798126e+00 8.1786547325055636e-01 2.9525923643275727e+00 + -5.4144752112647394e+00 5.7777942043438690e-01 2.7752195219464051e+00 + id 12146 + loc 1.0998366773128510e-01 8.7259286642074585e-01 411 + blend 0.0000000000000000e+00 + interp 4.9975023706752503e-01:2.8687506849573718e-01:1.3263068095053943e-01:4.6884199665406917e-01:7.9017576888465246e-01:4.9974523956515438e-01:1.2359857692780873e+00:3.2736116338121690e-01:1.9467119019306325e+00:3.4685767216685953e-01:2.9647802408856903e+00:4.2413314501529153e-01:3.8386553284026506e+00 + CVs 20 + 9.0220818974425876e-01 1.6273242688965558e-01 1.0881230454550462e-02 + 1.4769685358155453e+00 2.0995275592296103e-01 1.4683763209187241e-02 + 1.9515560897035977e+00 2.0651473323137209e-01 3.9480983960742594e-02 + 2.4248997444139868e+00 1.8404019539471511e-01 1.0247541679305844e-01 + 2.8921336551537364e+00 1.3816920217989892e-01 2.0487450582066230e-01 + 3.3502748693212046e+00 6.6706499016946141e-02 3.4569523544059799e-01 + 3.7970185352681498e+00 -2.8788157439776474e-02 5.2140831283209066e-01 + 4.2309045761350736e+00 -1.4529338933683045e-01 7.2183151129465017e-01 + 4.6518980628006732e+00 -2.8338513064161375e-01 9.3504932692146758e-01 + 5.0578923455429274e+00 -4.4808707066511522e-01 1.1489247409741006e+00 + 5.4423324182111656e+00 -6.4144456704920061e-01 1.3459725714306958e+00 + 5.8032232467889866e+00 -8.5986388473090547e-01 1.5082555610317914e+00 + 6.1448556742206684e+00 -1.1078505736973039e+00 1.6267362387989752e+00 + 6.4756443353780995e+00 -1.3888826072410057e+00 1.7027305929916583e+00 + 6.8031651784686220e+00 -1.6984025250144579e+00 1.7415584216130007e+00 + 7.1312444403147506e+00 -2.0273263224222706e+00 1.7479173262128058e+00 + 7.4581652026225562e+00 -2.3730609329629493e+00 1.7280207080566643e+00 + 7.7711920446987941e+00 -2.7444499097385249e+00 1.6973482903629038e+00 + 7.9687515452297859e+00 -3.1314585253205540e+00 1.6419510227853149e+00 + id 12147 + loc 7.2068983316421509e-01 3.4924149513244629e-02 406 + blend 0.0000000000000000e+00 + interp 3.6089678476221382e-01:3.2133925346860109e-01:8.3852558201913285e-02:2.7755163966012292e-01:9.2300462567003771e-01:3.4355771091620729e-01:1.2320473241013463e+00:2.1375254927008666e-01:2.0132484899423759e+00:3.3066449845130730e-01:3.0116182052627161e+00:3.6089317579436619e-01:3.7057476200015667e+00 + CVs 20 + -1.2269565396011561e-01 5.7122864342177733e-02 6.6430567969623489e-02 + -2.3503776498822998e-01 9.7978541323111290e-02 1.1571699491221346e-01 + -3.1972961397005906e-01 1.0237699381093324e-01 1.5227070475453003e-01 + -3.9585168751963823e-01 9.2708392667301465e-02 1.8475451256021969e-01 + -4.6244346625329624e-01 7.1944542981383308e-02 2.1192459315806578e-01 + -5.2173632505163592e-01 4.4501274810670732e-02 2.3252678810049054e-01 + -5.8055714307897666e-01 1.5688467642294812e-02 2.4640718021504626e-01 + -6.4967460231843155e-01 -1.0007253630122448e-02 2.5445580361693076e-01 + -7.3265875878388087e-01 -3.2387327805785959e-02 2.5556893221369925e-01 + -8.1677731557222866e-01 -5.5464104841212725e-02 2.4515080882017140e-01 + -8.9179304866218267e-01 -8.0864035064815099e-02 2.2161110221913066e-01 + -9.7165234932408007e-01 -1.0573990678953282e-01 1.9007954015745498e-01 + -1.0798648124837293e+00 -1.2844247704179340e-01 1.5750590883532486e-01 + -1.2227206224845499e+00 -1.4968542368955318e-01 1.2630167423711819e-01 + -1.3893402639102566e+00 -1.7001506551197165e-01 9.7022588951726496e-02 + -1.5691527154971849e+00 -1.8981937511781333e-01 7.4179205536319570e-02 + -1.7584836686496406e+00 -2.1026209924650408e-01 6.1510624895429689e-02 + -1.9550448972938510e+00 -2.3313446950535455e-01 5.5770428227896351e-02 + -2.2055795540203134e+00 -2.3991345297016953e-01 5.2673216281989454e-02 + id 12148 + loc 2.2143541276454926e-01 2.8618922829627991e-01 403 + blend 0.0000000000000000e+00 + interp 4.1266134498695445e-01:3.3792241878004819e-01:2.1476284448768590e-01:2.8871581765457943e-01:1.0727121586466990e+00:4.1265721837350461e-01:2.0051443544962710e+00:2.7646989020278012e-01:2.8927063116703060e+00:2.6187169320013631e-01:3.8591945206412177e+00 + CVs 20 + -2.1657201722143882e-01 1.9282304422386720e-01 7.6674059206474507e-02 + -4.2022430680404099e-01 3.9078459218722261e-01 1.5350043178109357e-01 + -6.2493875107810093e-01 5.9314976934726871e-01 2.3274740718188683e-01 + -8.3853282668201956e-01 7.9616049633537900e-01 3.1754492951565882e-01 + -1.0632663297049809e+00 9.9535116884347452e-01 4.1526996580315750e-01 + -1.2981255275271084e+00 1.1875613176694508e+00 5.4060053131109731e-01 + -1.5363367235841703e+00 1.3678145365779479e+00 7.1291351786166324e-01 + -1.7656271533205441e+00 1.5251584722049407e+00 9.4730999105807356e-01 + -1.9693807290799972e+00 1.6431873968615207e+00 1.2495632098886942e+00 + -2.1297918116388477e+00 1.7055910291855638e+00 1.6126827953196723e+00 + -2.2343832962493968e+00 1.7024138711928993e+00 2.0138321739621485e+00 + -2.2868794352678963e+00 1.6355931304330040e+00 2.4192520742563368e+00 + -2.3069477582843896e+00 1.5168185252934085e+00 2.8052889182234266e+00 + -2.3104351010709805e+00 1.3538352243827996e+00 3.1677320316193049e+00 + -2.3063175293071803e+00 1.1566474412827250e+00 3.5020178632614898e+00 + -2.3142818654447108e+00 9.7022630464977866e-01 3.7913199823840742e+00 + -2.3566962943379135e+00 8.6151384158486488e-01 4.0226789263247884e+00 + -2.4216943733142622e+00 8.1512054951620083e-01 4.2308617790682543e+00 + -2.4722293587177662e+00 6.8200355126814860e-01 4.5701785706299223e+00 + id 12149 + loc 2.2676566243171692e-01 3.6523026227951050e-01 384 + blend 0.0000000000000000e+00 + interp 3.3751896261971770e-01:2.9129722234924560e-01:4.4414988493305763e-01:2.7504937689485059e-01:1.0575500496078118e+00:3.3751558743009152e-01:1.8861357168677340e+00:2.8465109558153062e-01:2.4669208809363439e+00:2.7794772527948591e-01:3.9081389744514348e+00 + CVs 20 + -3.9717008805654197e-01 1.5890285987568620e-01 -1.2485974131245376e+00 + -6.9537917624205570e-01 8.2538389154646383e-02 -1.9651756013392931e+00 + -9.6816833342788566e-01 -8.4588590238163813e-02 -2.5210011455912618e+00 + -1.2380506023170095e+00 -2.7089681217093831e-01 -3.0722327565498149e+00 + -1.5021667815825810e+00 -4.6026577470181229e-01 -3.6355139627664155e+00 + -1.7654399352334178e+00 -6.4557796585047911e-01 -4.2295056548751182e+00 + -2.0398291076151973e+00 -8.3043099627806560e-01 -4.8611340897701849e+00 + -2.3381083243891667e+00 -1.0308900256192706e+00 -5.5177703245268335e+00 + -2.6653028956981171e+00 -1.2770856070460856e+00 -6.1720619049546555e+00 + -3.0206914629185162e+00 -1.6041031464099262e+00 -6.7884168506691678e+00 + -3.4099835730422048e+00 -2.0331988281559399e+00 -7.3262609836862778e+00 + -3.8508508137102302e+00 -2.5525394681656079e+00 -7.7514681540643098e+00 + -4.3452093566461221e+00 -3.1092989725429274e+00 -8.0380654568391279e+00 + -4.8782706433143339e+00 -3.6480356808617760e+00 -8.1846016853609669e+00 + -5.4248556439411040e+00 -4.1271357580213834e+00 -8.2109238606867017e+00 + -5.9515177861932163e+00 -4.5279790209376243e+00 -8.1478914212912485e+00 + -6.4348955291905963e+00 -4.8563351737938065e+00 -8.0108473777604647e+00 + -6.8594388754406914e+00 -5.1303977043014664e+00 -7.8169956402977769e+00 + -7.2107295999492189e+00 -5.2997065007157476e+00 -7.6252685831182898e+00 + id 12150 + loc 4.6979391574859619e-01 8.2339876890182495e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8987677642230143e-01:3.3460188418047893e-01:2.6469914885409362e-01:3.5795373458468149e-01:1.0001688509259690e+00:4.8987187765453721e-01:1.5368780162179725e+00:3.3603573754815264e-01:2.0723141110441365e+00:3.2759080352366837e-01:3.0013442910730017e+00:3.9846107677972364e-01:3.7594489361651666e+00 + CVs 20 + 1.8891361373458482e-01 2.8636194483780880e-01 -5.8297837578533199e-02 + 3.9320215653235641e-01 5.6720708215720250e-01 -1.1282247556227314e-01 + 6.1041266280976758e-01 8.3699137812017099e-01 -1.7404804098360668e-01 + 8.4030980538897770e-01 1.0904743179962562e+00 -2.4909013925651444e-01 + 1.0853711219292108e+00 1.3218866572259600e+00 -3.4418276058540148e-01 + 1.3477264063108800e+00 1.5219397184654124e+00 -4.7079669950924308e-01 + 1.6259553807888174e+00 1.6756923199273581e+00 -6.4165959981034604e-01 + 1.9131199124185734e+00 1.7687861435105730e+00 -8.5923884585865928e-01 + 2.1965778358171399e+00 1.7942814227882369e+00 -1.1135473780326270e+00 + 2.4604998933646316e+00 1.7537877945167764e+00 -1.3855793097245361e+00 + 2.6948492281306264e+00 1.6567985212634906e+00 -1.6532690814541477e+00 + 2.9002341918030252e+00 1.5136210171179982e+00 -1.9036791343901016e+00 + 3.0837092317949657e+00 1.3233657092470934e+00 -2.1401355257422181e+00 + 3.2503665248493370e+00 1.0593194443942922e+00 -2.3857854937883625e+00 + 3.3741320672063884e+00 6.9254732038423028e-01 -2.6681646999174315e+00 + 3.3906608323954393e+00 2.3766357536155602e-01 -2.9936356702857920e+00 + 3.2442779867316442e+00 -2.5116807324823365e-01 -3.3434945628422104e+00 + 2.9515797163576938e+00 -6.7364379040011202e-01 -3.6473670964697984e+00 + 2.7337322341558079e+00 -8.7370654132816650e-01 -3.7358366243725531e+00 + id 12151 + loc 4.3954586982727051e-01 9.1698497533798218e-01 261 + blend 0.0000000000000000e+00 + interp 5.1097253328760206e-01:5.1096742356226921e-01:3.6688899113005846e-01:4.5720612450163245e-01:9.0241786984286176e-01:2.1704540699646635e-01:1.6921097587970655e+00:3.2530507435205486e-01:2.0892268334123534e+00:3.4123789926437609e-01:2.8456761054912030e+00:3.6947765354680046e-01:3.5402910166132080e+00 + CVs 20 + -7.9823362269948850e-01 4.4779361929737616e-01 -4.5034900583478937e-01 + -1.4212642319481372e+00 7.2672598795307852e-01 -6.7358539867380884e-01 + -2.0080860121961752e+00 8.7646842699410310e-01 -7.4099902560869413e-01 + -2.5841182243803593e+00 9.6304150485476447e-01 -7.1222111554616263e-01 + -3.1429779524796384e+00 1.0462480098848468e+00 -6.3837206668840052e-01 + -3.7171078294446693e+00 1.1503207167990162e+00 -5.7106823881762547e-01 + -4.3345667837662676e+00 1.2588936881157544e+00 -5.6748289949052455e-01 + -4.9849135542821106e+00 1.3454307150773928e+00 -6.7697466881613133e-01 + -5.6273418859755786e+00 1.3967779245734078e+00 -9.2838172354541726e-01 + -6.2162116366789020e+00 1.4054560347080725e+00 -1.3285251426870346e+00 + -6.7255242002653501e+00 1.3575586160401720e+00 -1.8577593041078049e+00 + -7.1498018911689751e+00 1.2304319601206508e+00 -2.4807343218110240e+00 + -7.4813399774440930e+00 9.7378765480775309e-01 -3.1403875995491073e+00 + -7.7013594677182295e+00 5.5146723204399617e-01 -3.7570877247584447e+00 + -7.7833778675637451e+00 -3.6595325054697980e-03 -4.2626201464392466e+00 + -7.7059829489126042e+00 -6.0165581993937112e-01 -4.6000683519194645e+00 + -7.5537840286600533e+00 -1.1368051016835232e+00 -4.7240418676124909e+00 + -7.4746419115330109e+00 -1.6059759123063344e+00 -4.6117018828828291e+00 + -7.5344349996024720e+00 -2.2300499344523299e+00 -4.2369845139916933e+00 + id 12152 + loc 7.2779279947280884e-01 5.8451479673385620e-01 1074 + blend 0.0000000000000000e+00 + interp 3.6757184292697459e-01:2.8410774604859718e-01:1.0086129660121379e+00:2.8985301039221795e-01:2.0333606584568704e+00:3.6756816720854535e-01:2.9807529337567309e+00:2.7500849698105062e-01:3.9779186349919264e+00 + CVs 20 + 4.3575103401227847e-02 2.6186189883363870e-01 -2.3539846215753107e-01 + 1.0738194861510927e-01 5.1832735094499982e-01 -4.6944380166670263e-01 + 2.0882536144973168e-01 7.6212957431290440e-01 -6.9487460617406249e-01 + 3.5364617207592547e-01 9.8420619617727423e-01 -9.0523532067275714e-01 + 5.3729673435346093e-01 1.1756914179152020e+00 -1.0963501418997890e+00 + 7.4907124018384508e-01 1.3307420290711272e+00 -1.2681670194981749e+00 + 9.7644405091696274e-01 1.4476636169092589e+00 -1.4234758759885251e+00 + 1.2085077990026749e+00 1.5285999401210546e+00 -1.5661811289307035e+00 + 1.4377299914702903e+00 1.5785596594629174e+00 -1.7037448073035324e+00 + 1.6583937850827635e+00 1.6030317865904697e+00 -1.8454414219357396e+00 + 1.8666691829226905e+00 1.6064113807630997e+00 -1.9960716162235497e+00 + 2.0608783464533849e+00 1.5909369174509798e+00 -2.1572572407748489e+00 + 2.2410045256200566e+00 1.5590737365061917e+00 -2.3290988458747086e+00 + 2.4115061557485351e+00 1.5154746949746702e+00 -2.5123456072652015e+00 + 2.5782240493995960e+00 1.4587642499270252e+00 -2.7134367901754586e+00 + 2.7440674084027488e+00 1.3673545704513468e+00 -2.9399270390228516e+00 + 2.8980163578512861e+00 1.2048190549916427e+00 -3.1813465693735177e+00 + 3.0029260734487764e+00 9.5829944066641604e-01 -3.3811190645129994e+00 + 2.9582559748233668e+00 6.8341666477043983e-01 -3.3114088781429447e+00 + id 12153 + loc 2.3780207335948944e-01 2.0414896309375763e-01 411 + blend 0.0000000000000000e+00 + interp 4.6898440879071668e-01:3.7353031531733333e-01:3.4244307395099138e-01:3.2011825522977888e-01:1.1648801927518453e+00:3.2128626946527467e-01:1.9542812756393277e+00:4.6897971894662877e-01:2.1730297112203547e+00:3.1195624949524636e-01:2.9999772790053427e+00:3.1291725607646609e-01:3.9589975881314787e+00 + CVs 20 + 2.2874433563246088e-03 1.3428498120555984e-01 -6.3300760070526307e-01 + -6.0543050146282182e-03 2.0202196050506216e-01 -1.1263523176441075e+00 + 1.4714001807739241e-02 2.5116155420528014e-01 -1.5840101438337881e+00 + 8.0203185210050765e-02 3.0371659988473199e-01 -2.0553820891712111e+00 + 1.8539769601485895e-01 3.5842665635650939e-01 -2.5328588019823162e+00 + 3.2110690586368063e-01 4.1381456270523687e-01 -3.0109721391158142e+00 + 4.7614795748895711e-01 4.6621609854522794e-01 -3.4874141835426120e+00 + 6.3975524765942493e-01 5.0646615418368812e-01 -3.9641631340010801e+00 + 8.0223467443558760e-01 5.1914158961572099e-01 -4.4482092747500941e+00 + 9.5349952874839528e-01 4.8322141596767776e-01 -4.9463635687299590e+00 + 1.0825288621742559e+00 3.7520711155197173e-01 -5.4549692302682002e+00 + 1.1796021859783201e+00 1.8054225119805789e-01 -5.9547921002269506e+00 + 1.2398493166091602e+00 -9.7034490793787231e-02 -6.4210215958626513e+00 + 1.2649935213947536e+00 -4.4392170966295108e-01 -6.8363032868019253e+00 + 1.2621653405626676e+00 -8.4627012261709567e-01 -7.1895403614391604e+00 + 1.2419721769290639e+00 -1.2896379832564255e+00 -7.4718307727853279e+00 + 1.2175183042371129e+00 -1.7572958249029664e+00 -7.6785678316541954e+00 + 1.1993107991131033e+00 -2.2323325538461001e+00 -7.8152081316484310e+00 + 1.2032823683533262e+00 -2.5818112902936385e+00 -7.9101886975577624e+00 + id 12154 + loc 1.9477374851703644e-01 3.2554361224174500e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0705789587166907e-01:3.2889083246063244e-01:2.0441975079017960e-01:2.8386537640447140e-01:1.0848681560297893e+00:4.0705382529271039e-01:2.0019724420627245e+00:2.6778866524866107e-01:2.8963410375325633e+00:2.6230631995435272e-01:3.8566897206375454e+00 + CVs 20 + 1.6920817157613904e-01 3.7310130181343071e-01 -1.2921388619075047e-01 + 2.5473886474807694e-01 6.9933219512100764e-01 -2.7588315062730073e-01 + 2.9628230987625076e-01 1.0069245296465130e+00 -4.2406160824269451e-01 + 3.0259918676828179e-01 1.3077334671304839e+00 -5.7045297416312446e-01 + 2.6183924221416255e-01 1.5941154262663457e+00 -7.1652284885883610e-01 + 1.6014755156058158e-01 1.8559964846225516e+00 -8.6197929520693239e-01 + -1.6582941624665337e-02 2.0765964815050655e+00 -1.0011673059401902e+00 + -2.7439695713414680e-01 2.2299655359795776e+00 -1.1181082561795066e+00 + -5.9501029659861893e-01 2.2874779896548718e+00 -1.1858146830640737e+00 + -9.3173679313893010e-01 2.2408201245817589e+00 -1.1816137521301635e+00 + -1.2418819926485296e+00 2.1083987372260511e+00 -1.1032816268145818e+00 + -1.5053326706975860e+00 1.9143655339539138e+00 -9.6365574447610025e-01 + -1.7195756491739391e+00 1.6778036240315948e+00 -7.8213443317881193e-01 + -1.8898367396641618e+00 1.4294477494432407e+00 -5.8498635472447824e-01 + -2.0211736797008810e+00 1.2450360824715017e+00 -4.0832846433760683e-01 + -2.0827096029659180e+00 1.2172106744877711e+00 -2.9739722370679372e-01 + -1.9645496273181129e+00 1.2996016851897094e+00 -2.8466595376370624e-01 + -1.5872840194951767e+00 1.1482480285070316e+00 -3.3736366108428439e-01 + -1.6008555516135159e+00 1.3120079547971206e+00 -3.0615792075605253e-01 + id 12155 + loc 7.2845011949539185e-01 6.8080556392669678e-01 1075 + blend 0.0000000000000000e+00 + interp 4.0371033428416092e-01:4.0370629718081807e-01:6.1527192526889651e-02:4.0252376464748746e-01:6.6108186177487926e-01:2.8683012892513415e-01:1.1869541959473098e+00:3.1358374433970670e-01:2.0653211983418807e+00:3.3418781092649402e-01:2.9701189907116508e+00:2.9623385242602618e-01:3.7130413166139000e+00 + CVs 20 + 8.3158088649248965e-02 2.5591749151020893e-01 -2.3896828339476334e-01 + 1.7576488719295136e-01 5.0972523015480520e-01 -4.4490015861126497e-01 + 2.7979148179657887e-01 7.6273481400061649e-01 -6.4086425068080088e-01 + 3.9674469291984954e-01 1.0132390798019300e+00 -8.4224776267349633e-01 + 5.2759863499467063e-01 1.2562243751513951e+00 -1.0547883301173622e+00 + 6.6784398191844241e-01 1.4882626318991101e+00 -1.2815573989004019e+00 + 8.0694068829203081e-01 1.7116203557613789e+00 -1.5263673039890684e+00 + 9.3396736201958674e-01 1.9307313058834819e+00 -1.7941274455016611e+00 + 1.0456699389146795e+00 2.1461530405807663e+00 -2.0899466487230205e+00 + 1.1466712545904278e+00 2.3527486252940779e+00 -2.4220588922466160e+00 + 1.2429414343303167e+00 2.5349538851558502e+00 -2.8001573150641703e+00 + 1.3387186948841450e+00 2.6650424253017344e+00 -3.2260600918437246e+00 + 1.4324894427737926e+00 2.7136789232171927e+00 -3.6876233957942941e+00 + 1.5127119744184299e+00 2.6607524872324757e+00 -4.1568362782919968e+00 + 1.5721934392397889e+00 2.5033108923910703e+00 -4.6049749000010696e+00 + 1.6191513051645756e+00 2.2480909101097053e+00 -5.0179393012697018e+00 + 1.6582349079554104e+00 1.9069308291603186e+00 -5.3843056946744250e+00 + 1.6525903945572500e+00 1.5117261571655529e+00 -5.6837405723783032e+00 + 1.4707485114256551e+00 1.1648988947659424e+00 -5.8094195905929116e+00 + id 12156 + loc 2.7110281586647034e-01 9.7672951221466064e-01 1055 + blend 0.0000000000000000e+00 + interp 1.0140774052803117e+00:1.0140674052803116e+00:2.3501682890017006e-01:4.7792157737945840e-01:5.9529856761185107e-01:2.6668628664943356e-01:1.6745700228584015e+00:2.0852979249363077e-01:2.4932394134456666e+00:5.3289265921169238e-01:2.7756179414541169e+00 + CVs 20 + -1.8154251321180800e-01 3.3127677399404232e-01 -2.3469250377394274e-01 + -2.6986452260439348e-01 6.3964917042108671e-01 -4.4390996984931985e-01 + -3.0324616662957438e-01 9.5093842060262490e-01 -6.3638716196434542e-01 + -3.0285883027799243e-01 1.2778092272477752e+00 -8.0929025654496556e-01 + -2.6828222781094457e-01 1.6088295500488954e+00 -9.4282729511618180e-01 + -2.1598784455182107e-01 1.9337300079741186e+00 -1.0317463216458058e+00 + -1.6779904540509549e-01 2.2745041170432030e+00 -1.0980651502067276e+00 + -6.5796933216704989e-02 2.7696096811918753e+00 -1.2848917105926938e+00 + 3.8127461647401550e-01 3.1178049413304980e+00 -1.8598490646235903e+00 + 7.2952742036093388e-01 3.0136901346536944e+00 -2.1709102852623356e+00 + 1.0298200628589527e+00 2.8070766000925897e+00 -2.3110340820712905e+00 + 1.4073555303711249e+00 2.5247365941554420e+00 -2.2831343590652891e+00 + 1.8590788709185984e+00 1.8558299898536044e+00 -2.3289580939853098e+00 + 1.9877392198331092e+00 9.2593378138968596e-01 -2.2974416341762254e+00 + 1.8883166650778800e+00 2.6694749026164777e-01 -2.0067745193376330e+00 + 1.7881451142672922e+00 -2.0618372321777961e-01 -1.4767046831416293e+00 + 1.6825088626164308e+00 -4.6541020300649810e-01 -7.7340295379322310e-01 + 1.5747180057425880e+00 -4.6877846258716260e-01 -2.8020790012017738e-02 + 1.4539147954163254e+00 -3.8590067103690939e-01 5.2218820368012242e-01 + id 12157 + loc 9.9231910705566406e-01 2.6812440156936646e-01 397 + blend 0.0000000000000000e+00 + interp 4.5818795891606456e-01:2.5739326706078053e-01:6.9815990688739094e-01:4.0108724799146067e-01:1.8391185661192184e+00:2.6662778144468030e-01:1.9998982049391345e+00:4.2507183608952598e-01:2.3498095471165148e+00:3.3606148687256526e-01:3.0171314080841753e+00:4.5818337703647544e-01:3.6580307501917688e+00 + CVs 20 + -1.1490223646721531e+00 2.0586864855376177e-01 4.0033555257905717e-01 + -1.8088775611227987e+00 2.2603633181775440e-01 7.1979235361400140e-01 + -2.3514505283545599e+00 1.7936953966218250e-01 1.0207317279490957e+00 + -2.9104181705252370e+00 1.1325893687046609e-01 1.3117847854971161e+00 + -3.4891437879527958e+00 1.2294657651020446e-02 1.5819381266593071e+00 + -4.0852526171557120e+00 -1.3764309064880187e-01 1.8289042830094748e+00 + -4.6868821104526859e+00 -3.4420156186969292e-01 2.0630420670974212e+00 + -5.2704587256242172e+00 -6.1100675124414883e-01 2.3000352714177721e+00 + -5.8048840975902003e+00 -9.4136367006204402e-01 2.5457088096471621e+00 + -6.2645619948166100e+00 -1.3280162622867433e+00 2.7981613404552377e+00 + -6.6396920032164726e+00 -1.7568688748585337e+00 3.0567402447739407e+00 + -6.9418418816284442e+00 -2.2195347342758120e+00 3.3241926642127635e+00 + -7.1897718649079909e+00 -2.7159703527677164e+00 3.6055609716907804e+00 + -7.3982072663655698e+00 -3.2427196589679310e+00 3.8989119914134212e+00 + -7.5754486826340344e+00 -3.7879785255010958e+00 4.1968658698615338e+00 + -7.7240877357273687e+00 -4.3359253865264815e+00 4.4868837117650973e+00 + -7.8443057248879251e+00 -4.8750251987722644e+00 4.7503008518417928e+00 + -7.9406093935233306e+00 -5.3951059848001606e+00 4.9702605120219054e+00 + -8.0442481415619511e+00 -5.8608742326281220e+00 5.1452394983859069e+00 + id 12158 + loc 2.0881573855876923e-01 1.3039981946349144e-02 416 + blend 0.0000000000000000e+00 + interp 3.1547805935338025e-01:1.7609806319403751e-01:9.5933894985179768e-01:1.5893693549811450e-01:1.8382201453444709e+00:2.6970623369271401e-01:2.0293731150961842e+00:3.1547490457278671e-01:2.4042897073939145e+00:2.2663107146898198e-01:2.9931384844415758e+00:2.6377011581077403e-01:3.7710132024371861e+00 + CVs 20 + 2.6938868441355734e-02 2.4343167060275692e-01 -4.8276734158758505e-01 + -2.8927413182526229e-03 3.8567379340652885e-01 -8.3341482961353364e-01 + -3.5218485560280233e-02 4.9065863518606845e-01 -1.1583967645100370e+00 + -3.7259825532858115e-02 5.9202271592317635e-01 -1.5098206334540187e+00 + -1.8032557589242604e-03 6.8629756449963153e-01 -1.8816184670741101e+00 + 7.8333834045377637e-02 7.7037878604470889e-01 -2.2642189841444123e+00 + 2.0883197153539779e-01 8.4269914150705416e-01 -2.6446954930916071e+00 + 3.9010686365420866e-01 9.0345406022433006e-01 -3.0090369343233023e+00 + 6.1652311980415786e-01 9.5427287634288183e-01 -3.3451589588759281e+00 + 8.7867795856675102e-01 9.9768633316103450e-01 -3.6438222793557169e+00 + 1.1674885005916527e+00 1.0357294814448543e+00 -3.9021562139010513e+00 + 1.4824472338985037e+00 1.0649588781923744e+00 -4.1340323696803267e+00 + 1.8284729170512430e+00 1.0698468665608192e+00 -4.3729853726603860e+00 + 2.1867822124946565e+00 1.0288223113704913e+00 -4.6492577234921111e+00 + 2.5184858583324665e+00 9.3448072720240360e-01 -4.9627516758979491e+00 + 2.8052348109863683e+00 7.9004578499963563e-01 -5.3000228801319889e+00 + 3.0460783800846247e+00 5.9328588553497719e-01 -5.6563398638757310e+00 + 3.2343246943143593e+00 3.4315688691753765e-01 -6.0259875210732563e+00 + 3.3267456907731545e+00 2.1637212855167709e-01 -6.1904378708949608e+00 + id 12159 + loc 8.7001252174377441e-01 1.3851612806320190e-01 1085 + blend 0.0000000000000000e+00 + interp 5.2813060857852223e-01:3.8640481058601900e-01:5.0684704228107735e-01:5.2812532727243644e-01:8.9812183757707009e-01:3.4161701810009382e-01:1.6891199123435761e+00:2.8960819964552553e-01:2.7235089332862334e+00:2.9599786643517123e-01:3.3457921065559586e+00:3.1665795099798222e-01:3.9986811586562365e+00 + CVs 20 + 3.5254793567903747e-01 3.2961558095532090e-01 -1.5205681692180661e-01 + 6.7727428045012539e-01 6.5504958498796639e-01 -2.8536969462386341e-01 + 1.0200275850017828e+00 9.5896014191902124e-01 -3.9861697803858331e-01 + 1.4074782991707924e+00 1.2260368178526742e+00 -4.7510440209712890e-01 + 1.8424282430578962e+00 1.4367162103176476e+00 -4.9371059686753782e-01 + 2.3128442130258966e+00 1.5751641352612711e+00 -4.4277800249313060e-01 + 2.7956224446366971e+00 1.6363871950915130e+00 -3.2068221056182983e-01 + 3.2647029681255861e+00 1.6272597482618414e+00 -1.3382407312921785e-01 + 3.6965339390270255e+00 1.5621346201616757e+00 1.0116280337318451e-01 + 4.0767125376173734e+00 1.4606382895213184e+00 3.5658241338264812e-01 + 4.4047674889460771e+00 1.3417205088642483e+00 6.0589400042998598e-01 + 4.6910211192511984e+00 1.2153087723434728e+00 8.3698632546749929e-01 + 4.9509841004746873e+00 1.0789416076482710e+00 1.0523993299948446e+00 + 5.1970296758976255e+00 9.2820282806254606e-01 1.2523277739253729e+00 + 5.4325778987327498e+00 7.6993954651551810e-01 1.4242059026379783e+00 + 5.6574058470491302e+00 6.2080459324194959e-01 1.5578780785352531e+00 + 5.8660401675816551e+00 5.0464375342567491e-01 1.6637379794066323e+00 + 6.0859743087945244e+00 3.9516240435868022e-01 1.7447446693036390e+00 + 6.4894049446436153e+00 1.5649654055509665e-01 1.6874622667194665e+00 + id 12160 + loc 4.0097817778587341e-01 9.1571557521820068e-01 403 + blend 0.0000000000000000e+00 + interp 4.9140629559748789e-01:4.9140138153453194e-01:3.6725033944469476e-01:4.2231410476734682e-01:1.0077676587955178e+00:2.8236051961757347e-01:1.9267728379818081e+00:4.1201949456607956e-01:2.7842867147171964e+00:4.4882589205879614e-01:3.3607408440759965e+00:3.0853452354537164e-01:3.9755394558600723e+00 + CVs 20 + -2.5510545344778604e-02 7.7904168734186957e-02 -4.0613538335558218e-02 + -5.9244862114579924e-02 1.5108027243262667e-01 -9.5813692916067478e-02 + -1.0060301638194594e-01 2.2291586535923097e-01 -1.5771567792901717e-01 + -1.4828921930378963e-01 2.9180344442838824e-01 -2.2203351784355396e-01 + -2.0205676827017033e-01 3.5582374541093303e-01 -2.8789315577805785e-01 + -2.6107685899174782e-01 4.1466687309519179e-01 -3.5481057212092676e-01 + -3.2518540864569501e-01 4.7016919885607356e-01 -4.2184635277633276e-01 + -3.9534087872677404e-01 5.2511863483184595e-01 -4.8722981281230326e-01 + -4.7314050443778422e-01 5.8210066006488370e-01 -5.4906477743544613e-01 + -5.6029529505476539e-01 6.4331189772192432e-01 -6.0533551452711465e-01 + -6.5847192187420844e-01 7.1066536706307737e-01 -6.5374577898122332e-01 + -7.6884742430730491e-01 7.8539733877915130e-01 -6.9182612300783020e-01 + -8.9080313204453920e-01 8.6756488173388324e-01 -7.1763281598528150e-01 + -1.0220236676296393e+00 9.5623514224005013e-01 -7.3029188428410119e-01 + -1.1585489862291607e+00 1.0499452690920930e+00 -7.3028462130749039e-01 + -1.2939491796662339e+00 1.1472018045375147e+00 -7.1982062406432890e-01 + -1.4205095029197203e+00 1.2464734614809732e+00 -7.0227052411050961e-01 + -1.5362514715214570e+00 1.3457480572898060e+00 -6.7692158742728947e-01 + -1.5188689191671600e+00 1.4091535602962781e+00 -7.4551165371361328e-01 + id 12161 + loc 9.8037946224212646e-01 3.4158492088317871e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5053702666712897e-01:3.4781713000081721e-01:1.7214769790211415e-03:3.5037193302974173e-01:4.0692835936034999e-01:4.5053252129686233e-01:9.1037493469424480e-01:3.9442521930920310e-01:1.2884422992675244e+00:4.3481356343040867e-01:2.1526012087461606e+00:2.7333448697274010e-01:3.0364737883336193e+00 + CVs 20 + -2.6620098636906164e-01 1.7484075515175179e-01 1.9321903760965942e-01 + -5.0476562114370149e-01 3.7822331176492996e-01 3.6247062018260645e-01 + -7.2889880934650975e-01 5.8277173080688405e-01 5.2928607109970804e-01 + -9.5083895264494922e-01 7.8389212265498642e-01 7.1197210253488352e-01 + -1.1693364951687024e+00 9.8568441566284437e-01 9.1524811803053741e-01 + -1.3856652693835712e+00 1.1891051510846875e+00 1.1436665548596490e+00 + -1.6059224001343677e+00 1.3892198623498664e+00 1.4062916873986091e+00 + -1.8340118724289112e+00 1.5759350781295844e+00 1.7117166993182780e+00 + -2.0675591105111804e+00 1.7370820042975883e+00 2.0625813993976427e+00 + -2.3030295212347309e+00 1.8590595569830661e+00 2.4570332553416026e+00 + -2.5385078154234573e+00 1.9272876453071772e+00 2.8895273101257102e+00 + -2.7743353066389025e+00 1.9307676889069318e+00 3.3514304169788849e+00 + -3.0111487629711000e+00 1.8632993682499770e+00 3.8334714253058708e+00 + -3.2517410283309274e+00 1.7198057117350847e+00 4.3277783381021377e+00 + -3.5096483459346475e+00 1.4682486640861971e+00 4.8355792749251894e+00 + -3.8146004367042647e+00 9.6663702249456418e-01 5.3468757868385293e+00 + -4.1712683611075505e+00 -4.4421273759120528e-02 5.6336518490267027e+00 + -4.4486753060450015e+00 -1.1647919254854080e+00 5.3401745013540083e+00 + -4.6471656385640561e+00 -1.5253231499593713e+00 5.2854588370635707e+00 + id 12162 + loc 7.8461855649948120e-01 6.6555356979370117e-01 411 + blend 0.0000000000000000e+00 + interp 4.7470553443320268e-01:3.0354283513373786e-01:2.2175810482552716e-01:3.2764394116360235e-01:9.9970983962998128e-01:4.7470078737785837e-01:1.4966997837991503e+00:4.2421666948030445e-01:1.9875985173631951e+00:3.8613292629917301e-01:2.3008084414766774e+00:3.7030564984332304e-01:2.9849781467835150e+00:2.7003187126327755e-01:3.7633421458855261e+00 + CVs 20 + 7.8778998787869114e-01 2.8311178460125130e-01 -1.2529463418942308e-01 + 1.3520357754352847e+00 4.1917318884095128e-01 -2.2327503724925868e-01 + 1.8642155208441846e+00 4.8624754886358312e-01 -3.1896107391354783e-01 + 2.4028443409800020e+00 5.1962253218545196e-01 -4.2369561919079923e-01 + 2.9574961853976869e+00 5.1393652098826870e-01 -5.3516598528236359e-01 + 3.5151463514206647e+00 4.6920511971107703e-01 -6.5147950002664368e-01 + 4.0625262718065702e+00 3.9083819434608613e-01 -7.7181548995162008e-01 + 4.5897209050559686e+00 2.8516152646921999e-01 -8.9363660057241034e-01 + 5.0908283024387462e+00 1.5627128667538748e-01 -1.0129997088402787e+00 + 5.5608588930263334e+00 7.1785155071384388e-03 -1.1311021591300046e+00 + 5.9950999591208998e+00 -1.6226239000571763e-01 -1.2629359218782286e+00 + 6.3906341608527129e+00 -3.5816598373470798e-01 -1.4313308496524795e+00 + 6.7462225081780449e+00 -5.8609175217417220e-01 -1.6468740592828075e+00 + 7.0605712250855568e+00 -8.4270953192209141e-01 -1.9026245032347964e+00 + 7.3346826399914731e+00 -1.1184294106285970e+00 -2.1857586768806829e+00 + 7.5748725027368726e+00 -1.4102681659408316e+00 -2.4891147544673204e+00 + 7.7844615437497922e+00 -1.7172944101458167e+00 -2.8031993908422694e+00 + 7.9548847637985487e+00 -2.0129294267134328e+00 -3.1008540263676223e+00 + 7.9752664521235452e+00 -2.2253767876801955e+00 -3.3561050058634470e+00 + id 12163 + loc 2.3425799608230591e-01 3.5388472676277161e-01 406 + blend 0.0000000000000000e+00 + interp 5.0429600429614496e-01:3.3331538996443982e-01:7.2150809495272505e-01:3.5404853426394400e-01:1.0844149959014941e+00:3.6111645054106239e-01:2.0228446860323963e+00:4.3426896835018425e-01:2.9869829579742300e+00:5.0429096133610207e-01:3.4490275811406033e+00:3.4392956036173011e-01:3.9574188826653169e+00 + CVs 20 + 4.4421215640186709e-02 1.7866952366300609e-01 -1.2047262982851478e-01 + 9.7566655151764270e-02 3.0379373105634944e-01 -1.8082166191618812e-01 + 1.6092024277366729e-01 4.0215941270909950e-01 -2.3314020753473497e-01 + 2.3637617619928919e-01 4.8833142969765919e-01 -3.0415824232892053e-01 + 3.2296558458123265e-01 5.5887856194436392e-01 -3.9300277413043772e-01 + 4.1892094623255116e-01 6.1070243103498190e-01 -4.9809047859543021e-01 + 5.2192794253337405e-01 6.4138796626291983e-01 -6.1710827906962884e-01 + 6.2965827030789367e-01 6.4979066765293059e-01 -7.4719423005408403e-01 + 7.4032145088520829e-01 6.3651490723149218e-01 -8.8601363106986220e-01 + 8.5203220812822145e-01 6.0356138051264507e-01 -1.0330477860654816e+00 + 9.6135831360935342e-01 5.5355921999317204e-01 -1.1898223104239189e+00 + 1.0639667191635138e+00 4.8953638202711292e-01 -1.3590446989992215e+00 + 1.1572773221195021e+00 4.1510654831001109e-01 -1.5435502186154137e+00 + 1.2404624900702999e+00 3.3424208089793150e-01 -1.7456703489230885e+00 + 1.3112266621690984e+00 2.5061040346211860e-01 -1.9667655013305430e+00 + 1.3646327447431266e+00 1.6720292828743044e-01 -2.2061112636867239e+00 + 1.3965320342438998e+00 8.6112059279014330e-02 -2.4606858134408460e+00 + 1.4066281286362528e+00 8.7659725188908855e-03 -2.7277105751807480e+00 + 1.4275892990304830e+00 -5.4592799200075648e-02 -3.0232376706675890e+00 + id 12164 + loc 7.5108819874003530e-04 1.7974689602851868e-02 384 + blend 0.0000000000000000e+00 + interp 3.3866642704382405e-01:2.6122907130157852e-01:3.1947628529187422e-01:2.4888797348725947e-01:1.0397267163082695e+00:3.1013176419368832e-01:1.8710127681894406e+00:2.1373096872775268e-01:2.3192181766859368e+00:3.3866304037955364e-01:3.1279001850252368e+00:3.3735507740767362e-01:3.9816792395432472e+00 + CVs 20 + -4.5080972389535723e-01 2.3885495498366019e-01 -9.6614968580759109e-01 + -8.0022679767671834e-01 3.0738567758651986e-01 -1.5261120897146185e+00 + -1.1282399108422583e+00 3.1273788415195264e-01 -1.9910416037193550e+00 + -1.4580040173247792e+00 3.0647882151799299e-01 -2.4848737733796571e+00 + -1.7917300746182998e+00 2.7840580026364292e-01 -3.0179612231505288e+00 + -2.1319062148101375e+00 2.0082082939330670e-01 -3.5950594985597055e+00 + -2.4840735122856903e+00 3.7934136139290864e-02 -4.2091428602458976e+00 + -2.8522630555654080e+00 -2.4065672484304990e-01 -4.8381986003173036e+00 + -3.2219775041436103e+00 -6.5577137104764205e-01 -5.4443894038442098e+00 + -3.5713831575610619e+00 -1.2084120835577239e+00 -5.9724186272198452e+00 + -3.8983321583487172e+00 -1.8733387056818049e+00 -6.3561713538962907e+00 + -4.2035072461908705e+00 -2.5994401750293217e+00 -6.5602251180645128e+00 + -4.4827393031120746e+00 -3.3265879807019401e+00 -6.5916659414698326e+00 + -4.7354904616991575e+00 -3.9989859330053119e+00 -6.4834300966486431e+00 + -4.9659583484989591e+00 -4.5760427140786675e+00 -6.2784158712735767e+00 + -5.1718920637469985e+00 -5.0459455895811178e+00 -6.0217181544649634e+00 + -5.3515506910721129e+00 -5.4349528131145455e+00 -5.7536282165992532e+00 + -5.5207430944878624e+00 -5.7948507540852576e+00 -5.5070304204960232e+00 + -5.7871676155824918e+00 -6.2193110931169286e+00 -5.3695193194007249e+00 + id 12165 + loc 1.0547919571399689e-01 2.6819017529487610e-01 397 + blend 0.0000000000000000e+00 + interp 4.8255218728788324e-01:3.4823122851529759e-01:9.6083620953670401e-02:4.5359645785874231e-01:8.3276299849467372e-01:3.1998324680145546e-01:1.1966731633425420e+00:3.7922090403900433e-01:2.0554713899818049e+00:4.7403239674332742e-01:2.9858600293221924e+00:4.8254736176601037e-01:3.6233418132754158e+00 + CVs 20 + -2.5101145370215971e-01 3.0549812009248423e-01 -1.1260377239045813e+00 + -4.0943310673748956e-01 4.2087175747902972e-01 -1.8765562143093100e+00 + -5.1845520626769770e-01 4.7220553367947526e-01 -2.5297071689548618e+00 + -5.9632943144165362e-01 5.1875301284034614e-01 -3.2071991533266120e+00 + -6.5459822442020976e-01 5.5055338755104954e-01 -3.8968333824022823e+00 + -7.1310889753960949e-01 5.5449939216701161e-01 -4.5927773043238096e+00 + -7.9349197712333164e-01 5.1587378718108612e-01 -5.2901819764169487e+00 + -9.0977281921786868e-01 4.1759484667004887e-01 -5.9847703092911209e+00 + -1.0602693837159443e+00 2.4125336579849055e-01 -6.6713246434075320e+00 + -1.2269711232621379e+00 -2.6700655467438827e-02 -7.3398569207088000e+00 + -1.3909945147797469e+00 -3.8955911675817168e-01 -7.9710678894836695e+00 + -1.5425049886459394e+00 -8.3912586848358717e-01 -8.5417107144074844e+00 + -1.6729862928672119e+00 -1.3601274171971791e+00 -9.0385771517575719e+00 + -1.7717294322865309e+00 -1.9363882986829659e+00 -9.4611935282489394e+00 + -1.8336171238537036e+00 -2.5538254173140609e+00 -9.8140154357920721e+00 + -1.8645420212101946e+00 -3.2029122002354500e+00 -1.0099551835652207e+01 + -1.8690204645708763e+00 -3.8724146406812281e+00 -1.0305079649815276e+01 + -1.8430839812919997e+00 -4.5294743181499557e+00 -1.0413830373003840e+01 + -1.7716394297025424e+00 -4.9709113306311190e+00 -1.0425836293751358e+01 + id 12166 + loc 8.5797935724258423e-01 8.9485359191894531e-01 261 + blend 0.0000000000000000e+00 + interp 2.8106885227460010e+00:4.5945723365294294e-01:7.3013645693845053e-01:3.8958551936062530e-01:1.1898839179533018e+00:3.1229529973197101e-01:2.0104951197907606e+00:2.9424658614158161e-01:2.5301333335791965e+00:2.4434854948824123e+00:2.9089552941329604e+00:2.8106785227460009e+00:2.9384390346862306e+00 + CVs 20 + -7.7077739534462786e-01 3.8611379669165447e-01 -5.2459177743085772e-01 + -1.3006988632091094e+00 6.2388269730219248e-01 -8.4956771033777889e-01 + -1.7842313199879734e+00 7.5556621590700379e-01 -1.0622736683683693e+00 + -2.2713227169355474e+00 8.1348610345748296e-01 -1.2048714693042692e+00 + -2.7383357509218800e+00 8.4368550244830054e-01 -1.2939360581522588e+00 + -3.2009524646205540e+00 8.8206959478838476e-01 -1.3572504873572977e+00 + -3.7000099648339804e+00 9.1265409475206893e-01 -1.4416277046205206e+00 + -4.2600138146654469e+00 8.9698210936285694e-01 -1.6052212796545122e+00 + -4.8681332073358501e+00 8.1635809313726126e-01 -1.9058875221177547e+00 + -5.4776026822728161e+00 6.6055864263232489e-01 -2.3767881260881247e+00 + -6.0314317842851315e+00 4.0691734044684358e-01 -2.9788129684751996e+00 + -6.4767726521447297e+00 2.5246528988578376e-02 -3.6133955617041957e+00 + -6.7694874929794517e+00 -5.2276903095305460e-01 -4.1680643872111016e+00 + -6.8732537542305838e+00 -1.2329219027065861e+00 -4.5590822125665600e+00 + -6.7724215471034483e+00 -2.0132799816304319e+00 -4.7126277953881575e+00 + -6.5740138327465667e+00 -2.7291184752318784e+00 -4.5670246991445378e+00 + -6.5536556640722958e+00 -3.2366266124239562e+00 -4.0933565385651738e+00 + -6.8210152687691066e+00 -3.4218260804708649e+00 -3.4576841717232218e+00 + -6.9321399535288677e+00 -4.1354841934579429e+00 -3.1410147511883983e+00 + id 12167 + loc 4.6843352913856506e-01 9.2769098281860352e-01 1050 + blend 0.0000000000000000e+00 + interp 1.9679181232879532e+00:1.9679081232879532e+00:2.8700398930491122e-01:1.4143028926139485e+00:3.5783290374809973e-01:7.6026870872861241e-01:5.8079838794889693e-01:4.2952137922652539e-01:7.4469033772724225e-01:2.9692339038999715e-01:1.0662941988967702e+00:3.4354473952858738e-01:1.6048324717494140e+00:4.9217148711214692e-01:2.2352629869844316e+00:9.0007242836140400e-01:2.3270781459437253e+00:1.5475168832927018e+00:2.3856314984463074e+00:1.7958349828893798e+00:2.3990523275443620e+00 + CVs 20 + -8.3690671338672515e-02 4.7787277689364338e-01 -8.2738620324217682e-01 + -5.5629274139020107e-02 9.3514690233321895e-01 -1.4880820039342035e+00 + 1.1221408665687832e-01 1.3947127184936057e+00 -2.0178786870201453e+00 + 4.2728229491693476e-01 1.8418136679590424e+00 -2.4116085959359594e+00 + 8.6824178014821762e-01 2.2336201104839986e+00 -2.6353703472782777e+00 + 1.3738001012073369e+00 2.5319023761354877e+00 -2.6949552624530533e+00 + 1.8800663929441246e+00 2.7272984237408298e+00 -2.6263968593568014e+00 + 2.3546643944500096e+00 2.8345832740579930e+00 -2.4792311206381381e+00 + 2.7920422572867780e+00 2.8658241785361147e+00 -2.3155766198124894e+00 + 3.2036815658206210e+00 2.8466254299062137e+00 -2.1899135981926423e+00 + 3.6223962447049742e+00 2.7639693195347537e+00 -2.1090450228149349e+00 + 4.0308563205169721e+00 2.5383585100954731e+00 -2.0277797320840589e+00 + 4.3598824660806397e+00 2.1350755737057749e+00 -1.9044316233037604e+00 + 4.5105271152058410e+00 1.5915730656668834e+00 -1.6822972208196494e+00 + 4.3962505596326995e+00 1.0242833027951970e+00 -1.3416214311662529e+00 + 4.0347289828072448e+00 5.6089105685705176e-01 -9.2641656771216241e-01 + 3.5652626689156208e+00 1.6924483222174053e-01 -4.0149028175542090e-01 + 2.8665156480765313e+00 -9.3008892904130613e-02 3.9721036284769284e-01 + 2.5463466430943451e+00 2.0750320003382758e-01 3.5777639851830717e-02 + id 12168 + loc 6.0430150479078293e-02 8.4595417976379395e-01 1084 + blend 0.0000000000000000e+00 + interp 6.1895736475949970e-01:2.9113335604958174e-01:7.4018383651598685e-01:6.1895117518585208e-01:1.9221616448164007e+00:3.1498476410581344e-01:2.2249794564705767e+00:3.2681435191500369e-01:2.9908822836753872e+00:3.5033451171826657e-01:3.4115160846907893e+00:4.8170563705323188e-01:3.9978013321117740e+00 + CVs 20 + -2.1792937961491621e-01 2.9727099751533803e-01 4.7148554076757904e-01 + -4.2959792369173733e-01 5.0204837563933069e-01 8.0971598162026304e-01 + -6.2788281518778999e-01 6.7109231802190805e-01 1.1132839200878597e+00 + -7.9881788906425988e-01 8.2420743988959067e-01 1.4223577124024265e+00 + -9.4430926575487051e-01 9.6303714770268312e-01 1.7317269662108177e+00 + -1.0710214862263352e+00 1.0929294906309288e+00 2.0414050986852628e+00 + -1.1925060925266746e+00 1.2235254358938590e+00 2.3647419968044279e+00 + -1.3444403665878371e+00 1.3814365190238411e+00 2.7365168104285029e+00 + -1.6298602793364367e+00 1.6198036799115525e+00 3.1348649705975791e+00 + -2.0708282652150198e+00 1.8998348679151138e+00 3.3441263459514712e+00 + -2.4668167668480896e+00 2.1434278875080408e+00 3.3021537135571779e+00 + -2.7262904340477983e+00 2.3891422146972934e+00 3.1130544856062543e+00 + -2.8868918701659636e+00 2.5536500880821329e+00 2.8106724299586165e+00 + -3.0162169102663157e+00 2.4216956309803708e+00 2.4923878601196892e+00 + -3.1252335308504735e+00 1.9655077639953404e+00 2.2375491773754907e+00 + -3.1484470507389086e+00 1.3238275863111995e+00 1.9872877306201022e+00 + -3.0402162434500979e+00 6.6717316644281610e-01 1.6585974035309710e+00 + -2.8464781078614063e+00 1.8658919124120410e-01 1.2216949156517001e+00 + -2.7458648103765899e+00 1.9241498642295229e-01 7.9257034681691696e-01 + id 12169 + loc 7.3957329988479614e-01 8.4389907121658325e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4248736300840924e-01:3.2803950325913916e-01:6.1862153501187622e-01:3.5858411230047688e-01:1.6105879596148216e+00:2.8793253374597799e-01:2.0820682770959196e+00:3.3577038984983715e-01:2.8819320165553552e+00:4.2082229315523562e-01:3.2323795532450257e+00:4.4248293813477918e-01:3.9470802180412483e+00 + CVs 20 + 2.5589061733646312e-01 2.7142811118929244e-01 -2.4538325802412697e-01 + 5.0929613581220279e-01 5.4869189036080790e-01 -4.5235168054328034e-01 + 7.5348329881781073e-01 8.1876035705019856e-01 -6.5128905662685443e-01 + 9.8678176400876105e-01 1.0767771289590529e+00 -8.5546055231520424e-01 + 1.2066288801079617e+00 1.3132348256551380e+00 -1.0741915086603548e+00 + 1.4110321897012748e+00 1.5167907421671178e+00 -1.3279081624545899e+00 + 1.6025248542890158e+00 1.6834559646871792e+00 -1.6389711073007258e+00 + 1.7844999398778254e+00 1.8126615972858744e+00 -2.0200902059240171e+00 + 1.9571337419981762e+00 1.9005072814273465e+00 -2.4692450421263938e+00 + 2.1217313482163322e+00 1.9422381735240775e+00 -2.9724844836285516e+00 + 2.2813375900150072e+00 1.9315017164905699e+00 -3.5109039231401824e+00 + 2.4292281691555502e+00 1.8539222927331069e+00 -4.0657516283359483e+00 + 2.5418093772964632e+00 1.6986432545017740e+00 -4.6167568142626187e+00 + 2.5743534468314033e+00 1.4895635251637089e+00 -5.1353786156048171e+00 + 2.4801149207713684e+00 1.3004182315391035e+00 -5.5828351072412268e+00 + 2.2657768055110230e+00 1.2106153343687120e+00 -5.9181175197326956e+00 + 2.0044415205661319e+00 1.2536884919109894e+00 -6.1157013040206039e+00 + 1.7837967348129093e+00 1.3843562290182230e+00 -6.1983308512496516e+00 + 1.5394476049022030e+00 1.3784173536763706e+00 -6.3599475898655164e+00 + id 12170 + loc 6.3188987970352173e-01 9.8084218800067902e-02 1080 + blend 0.0000000000000000e+00 + interp 3.4483846057731060e-01:3.4483501219270485e-01:1.6311499183565559e-02:3.4232772435468850e-01:7.0659253246758191e-01:2.3982940192912730e-01:1.4336041336052130e+00:2.8204980959251491e-01:2.7173105945585236e+00:3.3341560510034068e-01:3.1495280439356748e+00 + CVs 20 + -5.9849296856365891e-02 4.5920781279110684e-01 -4.7750709814618458e-01 + -1.2027193159603072e-01 8.2119649897360980e-01 -7.7713033729698500e-01 + -1.7882940990611920e-01 1.1456431332183434e+00 -1.0130608908991561e+00 + -2.4139243425319806e-01 1.4714332915954917e+00 -1.2367351003902498e+00 + -3.1503629405362532e-01 1.7958451762459067e+00 -1.4421814076929662e+00 + -4.0962535838139269e-01 2.1168341922482705e+00 -1.6248174871202181e+00 + -5.3938723299523506e-01 2.4333123076088796e+00 -1.7794301898762670e+00 + -7.2628757003748712e-01 2.7451579609344519e+00 -1.8979880909258691e+00 + -1.0042260515235399e+00 3.0456055243094355e+00 -1.9622223099605549e+00 + -1.3945562559957247e+00 3.2938346187606262e+00 -1.9352981272949861e+00 + -1.8395403207278807e+00 3.4214449224404837e+00 -1.7987065733638141e+00 + -2.2404640208409168e+00 3.4180418182704178e+00 -1.5948412582798355e+00 + -2.5606455629769038e+00 3.3272125011242233e+00 -1.3737064402379544e+00 + -2.8091921296165907e+00 3.1827296868905384e+00 -1.1565829592846568e+00 + -3.0016000713004400e+00 2.9960580836323309e+00 -9.4463166026404211e-01 + -3.1556652258156568e+00 2.7552158546456749e+00 -7.1765310628662338e-01 + -3.2875380939546881e+00 2.4249549413192271e+00 -4.6480503791953209e-01 + -3.3845042068200746e+00 2.0114493747644593e+00 -2.8475076618277323e-01 + -3.3540510123015808e+00 1.7517072244146648e+00 -3.9527618016328026e-01 + id 12171 + loc 5.7600397616624832e-02 8.4595417976379395e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3143062083019174e-01:4.1252779373198417e-01:2.9930813568459291e-01:1.8446659868124873e-01:9.4938311148218513e-01:2.5971474888608759e-01:2.1957292486132074e+00:2.8601092101900016e-01:2.9985300159906476e+00:3.3047123886641522e-01:3.4105340024313575e+00:4.3142630652398345e-01:3.9865379567318504e+00 + CVs 20 + -1.2380084307463399e-01 4.3506169819305229e-01 4.5491200855692993e-01 + -2.8705354054348486e-01 8.0115040916360658e-01 7.7583624474842849e-01 + -4.8521754664271322e-01 1.1468935081166647e+00 1.0425277152351304e+00 + -7.2223591039198975e-01 1.4884887407319340e+00 1.2758951610331746e+00 + -1.0031643112850368e+00 1.8063539345167139e+00 1.4479912519526026e+00 + -1.3231227176437499e+00 2.0742419876903724e+00 1.5314161932473562e+00 + -1.6622163865387773e+00 2.2590364260957316e+00 1.5018769819480764e+00 + -1.9782784199533969e+00 2.3257651161410644e+00 1.3498420647121876e+00 + -2.2145376551850049e+00 2.2551782009031460e+00 1.1057202167197784e+00 + -2.3546072003333971e+00 2.0736112179838369e+00 8.4595474726658049e-01 + -2.4461651079764706e+00 1.8260858721133255e+00 6.2244942523753088e-01 + -2.5273307598741446e+00 1.5279826938255412e+00 4.4238310161413524e-01 + -2.6116896282304873e+00 1.1800854779877132e+00 3.1256638150973953e-01 + -2.7149316871110312e+00 7.8310103573629719e-01 2.5647751265608004e-01 + -2.8523688215198320e+00 3.5045591803285797e-01 3.0986901619188806e-01 + -3.0451620845549465e+00 -6.8430575981529074e-02 4.7198518850828397e-01 + -3.3352443439184607e+00 -4.1591212234490893e-01 7.1537369871993106e-01 + -3.7308428486965997e+00 -6.3687210767072844e-01 1.0074449413235729e+00 + -4.0347306668215301e+00 -9.0006768155980044e-01 1.1317577768466640e+00 + id 12172 + loc 6.2761414051055908e-01 6.8191811442375183e-02 411 + blend 0.0000000000000000e+00 + interp 5.6095675202334949e-01:3.0980031387165408e-01:2.7454202830260022e-01:5.1060594606184884e-01:1.0020586890091658e+00:4.5867660355818440e-01:1.2447451131765119e+00:2.9345529799385550e-01:1.7834979790082053e+00:4.8928481525284212e-01:2.0153902443857823e+00:5.6095114245582933e-01:2.7589752301266128e+00:3.7096533229932321e-01:3.0354611253290309e+00:3.7714119030229942e-01:3.7944304967539844e+00 + CVs 20 + -5.1916847872663974e-01 8.9492283427368258e-02 1.7288128548104326e-01 + -9.2959686287215249e-01 1.0612307562890716e-01 3.5564923618062133e-01 + -1.3388822749132039e+00 9.6135000233554369e-02 5.3707582109974850e-01 + -1.7861881642237596e+00 7.9870771589821477e-02 7.0222602260761635e-01 + -2.2646762094278610e+00 5.2471491558262806e-02 8.4084986063763278e-01 + -2.7641485068392377e+00 9.6044732205486927e-03 9.4707618683694372e-01 + -3.2712503305247203e+00 -5.3485738946299488e-02 1.0190518182267343e+00 + -3.7701063077261638e+00 -1.4552585118982053e-01 1.0572773193959988e+00 + -4.2435225260248099e+00 -2.7772153843957814e-01 1.0662482000081133e+00 + -4.6721026332170439e+00 -4.5854850393125246e-01 1.0575874671904204e+00 + -5.0383215491875797e+00 -6.9035202109066129e-01 1.0450908956329206e+00 + -5.3390706585675920e+00 -9.6787318204062389e-01 1.0343330720637134e+00 + -5.5863288602963124e+00 -1.2811883952585501e+00 1.0215745548646307e+00 + -5.7911559475838841e+00 -1.6202879066009919e+00 1.0034675832075695e+00 + -5.9562941467075952e+00 -1.9763127649205661e+00 9.7896698685326766e-01 + -6.0788953677711905e+00 -2.3411408113148786e+00 9.4227246184603297e-01 + -6.1579775179928316e+00 -2.7067525351701227e+00 8.8434484332580698e-01 + -6.2049401188128757e+00 -3.0689405424895635e+00 8.0950890838805112e-01 + -6.3369430060976786e+00 -3.4468902096366931e+00 7.4043670740590328e-01 + id 12173 + loc 9.1868990659713745e-01 9.1826999187469482e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0187865874786619e-01:5.0187363996127876e-01:6.2328768574841042e-02:3.8960634909862218e-01:7.4701800236290539e-01:3.9697459229317533e-01:1.4624775075229510e+00:4.8623796543005515e-01:2.0021890935826998e+00:3.8994245130198169e-01:2.4307510899784273e+00:2.8657556763759962e-01:3.0264051988974554e+00:3.4177885338510477e-01:3.7632192153356008e+00 + CVs 20 + 9.1204874307926398e-02 2.4460624626209790e-01 -6.0240363958514204e-02 + 1.9793892917069392e-01 5.0769237985271709e-01 -1.2083509613596136e-01 + 3.2299670571894828e-01 7.8229508311417184e-01 -2.0503936310306958e-01 + 4.6404766385053609e-01 1.0529082996576982e+00 -3.3274166521379556e-01 + 6.1889811201265266e-01 1.3068706434575539e+00 -5.1365598472788987e-01 + 7.8009198600511176e-01 1.5274838833299444e+00 -7.5347915898967988e-01 + 9.3496973369904890e-01 1.6963569829599017e+00 -1.0518130460146016e+00 + 1.0683595992598021e+00 1.7961878534889855e+00 -1.3994333059335704e+00 + 1.1656470687048424e+00 1.8135909431123629e+00 -1.7771619068108095e+00 + 1.2173311507158560e+00 1.7425827399301230e+00 -2.1592923851193091e+00 + 1.2231154235512720e+00 1.5877791428084997e+00 -2.5202844147438421e+00 + 1.1924489633364848e+00 1.3622280347443010e+00 -2.8413366031282581e+00 + 1.1446664442719892e+00 1.0824057653598613e+00 -3.1153462830443517e+00 + 1.1018597145433768e+00 7.6705349665801981e-01 -3.3411440335690221e+00 + 1.0755193935980301e+00 4.3418979289078274e-01 -3.5167039032605709e+00 + 1.0645829053804943e+00 9.4851989151497840e-02 -3.6474457332710459e+00 + 1.0638513887469094e+00 -2.4918843340241925e-01 -3.7769058945298504e+00 + 1.0772639829166022e+00 -5.9429038189133809e-01 -3.9721259296429210e+00 + 1.0895652811265024e+00 -8.8883947269629049e-01 -4.1349998326493020e+00 + id 12174 + loc 8.9474213123321533e-01 3.4822189807891846e-01 1075 + blend 0.0000000000000000e+00 + interp 4.1079500209333702e-01:3.9207705656969366e-01:6.8684966222405741e-01:3.0058539166921311e-01:1.0693793969178387e+00:2.8577418726979187e-01:2.0262255904016060e+00:4.1079089414331610e-01:2.9924797553842417e+00:2.7991687185377634e-01:3.9973753780330168e+00 + CVs 20 + -1.3532088270937140e-01 1.7096767302606336e-01 2.0207499665977055e-01 + -2.4315314374697375e-01 3.7333793412048677e-01 4.0724998581299959e-01 + -3.3874447261765894e-01 5.8679963690920256e-01 6.0228272000511585e-01 + -4.3483857712233082e-01 7.8877887239011435e-01 7.7975006695094318e-01 + -5.3833603013660358e-01 9.5670281264493129e-01 9.4066595999842240e-01 + -6.4831553187934310e-01 1.0717530790561467e+00 1.0840889436592271e+00 + -7.4488997066336160e-01 1.1272867816584164e+00 1.2026967265705661e+00 + -8.1062978209080205e-01 1.1319749357536883e+00 1.3018777479200818e+00 + -8.6783773394543440e-01 1.0829867744252997e+00 1.3980830598920262e+00 + -9.5268013521857930e-01 9.5534700315043330e-01 1.4746473721609099e+00 + -1.0583938562470925e+00 7.5246549365042248e-01 1.5003815229645321e+00 + -1.1460695241331851e+00 5.1646239761298940e-01 1.4784329619700889e+00 + -1.1871606042880354e+00 2.8417339489243987e-01 1.4293889691158168e+00 + -1.1894141169797277e+00 3.2286408134738598e-02 1.3231525584940493e+00 + -1.1860697519557744e+00 -3.1231166614257361e-01 1.0815903416565684e+00 + -1.2815664635858246e+00 -8.0698938777492679e-01 6.7670614289521791e-01 + -1.7107523491297882e+00 -1.4353515811676114e+00 1.1548161025616960e-01 + -2.6625492375125184e+00 -1.9098919314462739e+00 -4.3829131164790563e-01 + -2.9452415607872586e+00 -2.0489907305628647e+00 -5.2978768777799812e-01 + id 12175 + loc 2.1377135813236237e-01 9.7787284851074219e-01 1050 + blend 0.0000000000000000e+00 + interp 5.1712012286278741e-01:4.3961559572786135e-01:3.0485317593712380e-01:9.0035513752998036e-02:1.2943395200997889e+00:2.6388057356006062e-01:2.4085874711708843e+00:3.7212775290544792e-01:2.9930642754637669e+00:3.6979836095379670e-01:3.4792582083971166e+00:5.1711495166155885e-01:3.9943976764780458e+00 + CVs 20 + 5.4828616040669131e-02 4.5623901932731870e-01 -9.3500451459698963e-01 + 2.4573888817392558e-01 9.2045308625499866e-01 -1.6912272441852010e+00 + 5.8455198665125863e-01 1.4006506708004465e+00 -2.2478293370243705e+00 + 1.0569930570622714e+00 1.8538995222848751e+00 -2.5828854240953882e+00 + 1.6106705402939738e+00 2.2127910868975600e+00 -2.7068719284667853e+00 + 2.1801022170182645e+00 2.4245975815237317e+00 -2.6867256672911166e+00 + 2.7080710153336107e+00 2.4670063323587192e+00 -2.6080001732505287e+00 + 3.1559293005792624e+00 2.3620148678869826e+00 -2.5435525719284815e+00 + 3.5302586957807223e+00 2.1543971170937191e+00 -2.5166061019413251e+00 + 3.8653040905216680e+00 1.8519718671317720e+00 -2.5068607335078736e+00 + 4.1676052917004318e+00 1.4121438952174923e+00 -2.4607757694029111e+00 + 4.3730781166815564e+00 7.9569496148433816e-01 -2.2923130558742320e+00 + 4.3630379099215029e+00 5.6668194171438813e-02 -1.9209913793419562e+00 + 4.0484177951738216e+00 -6.2967765481205262e-01 -1.3296690820610548e+00 + 3.4483793872008954e+00 -1.0587681354038048e+00 -5.9880582236581670e-01 + 2.6881991779031331e+00 -1.1148737217055973e+00 1.3030280604718925e-01 + 1.8700528837848296e+00 -7.8255996871730626e-01 7.4694288983114610e-01 + 1.0266411670105453e+00 2.2630243488089841e-02 1.0315489822013126e+00 + 8.2986426455161011e-01 5.0000525006007179e-01 8.9163520558879039e-01 + id 12176 + loc 3.6798921227455139e-01 6.7107272148132324e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9946130692927465e-01:3.0792245667082585e-01:5.0882433622980572e-01:4.8633544251021343e-01:1.0775164494654763e+00:2.8598728975303750e-01:1.9945052693119831e+00:4.9945631231620541e-01:2.7063530852813669e+00:2.8034269633797260e-01:3.2164738811818578e+00:2.9366283681783112e-01:3.9846967891763949e+00 + CVs 20 + 3.8070923594493128e-02 3.7099096420607913e-01 -1.7877412193250189e-01 + 1.0043779902943190e-01 7.5902735727891246e-01 -3.4564314256239087e-01 + 1.9006175438737594e-01 1.1640131180847757e+00 -5.0369006110415704e-01 + 3.1673388561439614e-01 1.5864497060088634e+00 -6.5181353358770011e-01 + 5.0201094161862403e-01 2.0377155771242479e+00 -8.0150835831329903e-01 + 7.6440667761570258e-01 2.5216514326331136e+00 -1.0151345015288669e+00 + 1.0962014416031698e+00 2.9940100074521725e+00 -1.3976265326761221e+00 + 1.4561600664268037e+00 3.3352033049718925e+00 -2.0284046207607513e+00 + 1.7642294169162076e+00 3.3740335723815695e+00 -2.8441140721761440e+00 + 1.9659753064921452e+00 3.0622279553580976e+00 -3.6379048577494921e+00 + 2.0834213400433894e+00 2.5114224266804470e+00 -4.2480945820742413e+00 + 2.1805182942987789e+00 1.8981739688074997e+00 -4.6193535895583882e+00 + 2.2989548829888644e+00 1.3724406404753045e+00 -4.8058510270262857e+00 + 2.4202220002605128e+00 9.9883419624799552e-01 -4.9150482143573617e+00 + 2.5088365551240694e+00 7.7076126891095031e-01 -5.0292554556409170e+00 + 2.5479748190273743e+00 6.6342328355740909e-01 -5.1644514785414888e+00 + 2.5402184840769944e+00 6.3634810464222191e-01 -5.3084175060515335e+00 + 2.5198703065141186e+00 6.4795848122050070e-01 -5.5496866859223770e+00 + 2.4568538665621587e+00 7.1381983225661616e-01 -5.8900302654965655e+00 + id 12177 + loc 4.4711515307426453e-01 3.9815816283226013e-01 372 + blend 0.0000000000000000e+00 + interp 4.5428211829449744e-01:3.6889029648732341e-01:3.9854416606187582e-01:3.1084985753756017e-01:1.0072413924542214e+00:2.5275842255738229e-01:1.7838962529020552e+00:4.5427757547331449e-01:2.1405836244767773e+00:4.1768364326205587e-01:2.8680008085686608e+00:2.6986963591120150e-01:3.2405955137730604e+00:4.2122276570726924e-01:3.8443943972002250e+00 + CVs 20 + -1.5888417143975406e-01 5.6639349690434626e-01 4.7238699492733882e-01 + -2.8306722924609862e-01 1.0637749858322649e+00 8.8851190016232628e-01 + -3.9025268692870380e-01 1.4980765105302793e+00 1.2771407450476682e+00 + -4.8760439429957875e-01 1.8732224153016694e+00 1.6337563666385377e+00 + -6.2318904144580478e-01 2.2390957696764957e+00 1.9397969213749273e+00 + -8.9190236825068059e-01 2.6378060955408693e+00 2.0802562027403892e+00 + -1.2599578037141255e+00 2.9768412497394858e+00 1.9466194094150904e+00 + -1.6242571388610554e+00 3.1638707291705996e+00 1.5603150880512076e+00 + -1.9251953118202922e+00 3.1763934440852744e+00 9.8752427355248473e-01 + -2.1398930514825247e+00 3.0056064475544915e+00 2.9912561835487894e-01 + -2.2650828584469149e+00 2.6474345509300012e+00 -3.9707410543989741e-01 + -2.3155837518786799e+00 2.1541109242814143e+00 -9.7398522943191090e-01 + -2.2991558826237903e+00 1.6341867754634580e+00 -1.3724723609795688e+00 + -2.2050764245555050e+00 1.1796916645364823e+00 -1.5619354519927717e+00 + -2.0136590071370590e+00 7.7051124363016443e-01 -1.5982719648748633e+00 + -1.8434188712499338e+00 5.0215795269192398e-01 -1.8104285485540288e+00 + -1.8247122662514035e+00 5.0004331499794097e-01 -2.1863293944889972e+00 + -1.9824477625466579e+00 7.7633129921659805e-01 -2.5972391658659890e+00 + -2.4719972094390155e+00 1.4781105072929017e+00 -3.0346464685676056e+00 + id 12178 + loc 3.6772435903549194e-01 4.7111847996711731e-01 397 + blend 0.0000000000000000e+00 + interp 1.5301358460914523e+00:3.0273435842543245e-01:9.9699535058029976e-01:4.1462520046483076e-01:1.5063866843538054e+00:7.3727783461955021e-01:1.9781440671270345e+00:1.0625938805807260e+00:1.9796976058560691e+00:2.9368095760536711e-01:2.0009687707379347e+00:2.8654943172046066e-01:3.8909063857325257e+00:1.5301258460914522e+00:3.9931130666782879e+00 + CVs 20 + -3.2888003365225649e-01 3.4655714286567646e-01 -1.1846447116247936e+00 + -6.1925809922219921e-01 4.7561186362305852e-01 -1.9353560198419077e+00 + -9.1437997895360279e-01 5.1745444727129830e-01 -2.5920181869463361e+00 + -1.2275680599549936e+00 5.3717400147433347e-01 -3.3061585971472573e+00 + -1.5434115498426269e+00 5.2027489760754997e-01 -4.0626457847603072e+00 + -1.8442011947749810e+00 4.5186233679134336e-01 -4.8382902516217188e+00 + -2.1177284387231161e+00 3.1487191768448264e-01 -5.6158742547680482e+00 + -2.3571303666901531e+00 8.1062755194121316e-02 -6.3924257948508085e+00 + -2.5532442197889038e+00 -2.8105992750539166e-01 -7.1508071991675202e+00 + -2.6981267815595102e+00 -7.8608613491888768e-01 -7.8465185630713838e+00 + -2.7945236596739362e+00 -1.4188263134647676e+00 -8.4240477536593694e+00 + -2.8539120033592926e+00 -2.1376072452928998e+00 -8.8446833168481636e+00 + -2.8879878822118421e+00 -2.8899971053235984e+00 -9.1012034463223408e+00 + -2.9083385273533668e+00 -3.6264667382962061e+00 -9.2098910528229005e+00 + -2.9272902538211163e+00 -4.3080111900743034e+00 -9.1977646957788668e+00 + -2.9485237274217937e+00 -4.9122061566553779e+00 -9.0941244338180116e+00 + -2.9608081148129468e+00 -5.4314805466971947e+00 -8.9258592372424541e+00 + -2.9491116190293436e+00 -5.8656374299004712e+00 -8.7205422969905495e+00 + -2.9320298674701410e+00 -6.2438709659330964e+00 -8.5857785691442974e+00 + id 12179 + loc 7.4074518680572510e-01 6.1856788396835327e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6546440695443558e-01:3.0905656211538557e-01:3.2554374761227933e-01:3.1067460770982464e-01:1.0399125258079687e+00:4.6545975231036607e-01:1.9999116229162242e+00:4.0357394394649387e-01:2.7745091936867849e+00:3.3102112551915513e-01:3.5343535802061248e+00 + CVs 20 + -2.6827498217469326e-03 3.5595945801183759e-01 1.7229704690384220e-01 + 4.4088541355793875e-02 6.3048290528153883e-01 2.0760515942116234e-01 + 9.0806791328343933e-02 8.9689900311479231e-01 2.1889987275929085e-01 + 1.2560650033928161e-01 1.1639042331792973e+00 2.2895953915149347e-01 + 1.4563802873554663e-01 1.4278407601642709e+00 2.3512509047767027e-01 + 1.4548019063564344e-01 1.6859968248211303e+00 2.3485821820436348e-01 + 1.1753828401561683e-01 1.9377744316054351e+00 2.2694402321662399e-01 + 5.2159924281480363e-02 2.1837263477308708e+00 2.1180825031685158e-01 + -6.0313430152435801e-02 2.4202749118061542e+00 1.8817930187014653e-01 + -2.2665763199480982e-01 2.6368267261587279e+00 1.5092698057027643e-01 + -4.4535347646570567e-01 2.8166491827828959e+00 9.2684543871339953e-02 + -6.9972063758774672e-01 2.9436985414928225e+00 9.9689480734552749e-03 + -9.6482296918439492e-01 3.0138753699732934e+00 -9.1013514822557262e-02 + -1.2209049780339436e+00 3.0363360726489361e+00 -1.9611545564348698e-01 + -1.4608789721742930e+00 3.0240832933508419e+00 -2.9058137450856591e-01 + -1.6861620130532797e+00 2.9844968666997320e+00 -3.6573062838550263e-01 + -1.8897219775880847e+00 2.9251488925715736e+00 -4.1551547711410608e-01 + -2.0515391870123314e+00 2.8627393092803697e+00 -4.3130805947889228e-01 + -2.2074749950935306e+00 2.7843049391696799e+00 -4.3051209707399907e-01 + id 12180 + loc 9.4945991039276123e-01 1.3126407563686371e-01 403 + blend 0.0000000000000000e+00 + interp 4.8514924121795006e-01:4.8514438972553792e-01:1.0662396660234053e-02:2.1860773343298689e-01:9.9999972924022995e-01:2.9473440304022586e-01:2.0530316080742619e+00:3.9632057816008892e-01:2.7761698947364195e+00:2.8014025025168787e-01:3.6437614394276370e+00 + CVs 20 + 1.7504108755043432e-01 1.0259974152082060e-01 6.2960457362946823e-02 + 3.2136581911076967e-01 2.4167191074617789e-01 1.3376223391110706e-01 + 4.7558743498399375e-01 3.6669654005685587e-01 1.8645289303657561e-01 + 6.3842335189035737e-01 4.7714980711760296e-01 2.2321839819717620e-01 + 8.0866489645465689e-01 5.6736549866824515e-01 2.4134848393612970e-01 + 9.8387837566066594e-01 6.3135420051548652e-01 2.3861599371923314e-01 + 1.1594227178503769e+00 6.6376227182833081e-01 2.1262781776759587e-01 + 1.3276898353767985e+00 6.5902425096356776e-01 1.5913823366776572e-01 + 1.4768701803724631e+00 6.1472854438108826e-01 7.3772115779299402e-02 + 1.5931674238855464e+00 5.3599393307513243e-01 -4.3466428427629641e-02 + 1.6672514554118636e+00 4.3305116397744020e-01 -1.8440501877102741e-01 + 1.6959224848729162e+00 3.1347804873235374e-01 -3.3667392286088876e-01 + 1.6789907277455549e+00 1.7970959499361316e-01 -4.8787148505883138e-01 + 1.6180020938705673e+00 3.1602901705557795e-02 -6.2582263044303743e-01 + 1.5168057286725689e+00 -1.3190744415069378e-01 -7.3792643050356421e-01 + 1.3809866854219157e+00 -3.1255428521615425e-01 -8.1096812352109482e-01 + 1.2134404807887709e+00 -5.1053403736877234e-01 -8.3135082832451102e-01 + 1.0145171661902286e+00 -7.2044224171914839e-01 -7.8411904793051102e-01 + 1.0601987629300873e+00 -9.3962893048922280e-01 -7.4740345640185324e-01 + id 12181 + loc 8.6448627710342407e-01 8.8648861646652222e-01 1085 + blend 0.0000000000000000e+00 + interp 4.6884385079299012e-01:2.9014087143248080e-01:3.4462464445239815e-02:3.3296756319000476e-01:8.7905558327026911e-01:3.2625869147886410e-01:1.1655007771345269e+00:2.9817320593184066e-01:1.8769094520916050e+00:2.8576582135522272e-01:2.3513719602303000e+00:4.6883916235448220e-01:3.3502871524944342e+00 + CVs 20 + -1.1606989199409778e-01 3.0544639912884669e-01 1.6207584407645004e-01 + -2.6141079428896208e-01 5.8864991019960466e-01 2.9804589805473419e-01 + -4.3249683712584208e-01 8.6556161689701883e-01 4.1802152987165209e-01 + -6.2972063939127798e-01 1.1381673818584344e+00 5.2244261396565694e-01 + -8.6174590443081200e-01 1.3949832168151830e+00 5.9839846076876413e-01 + -1.1336630818131854e+00 1.6202587152220100e+00 6.3298369075979954e-01 + -1.4448169654770453e+00 1.7938318429697375e+00 6.1424354300087192e-01 + -1.7846481898013253e+00 1.8934599263863592e+00 5.3523752501060140e-01 + -2.1266601932921594e+00 1.9012895504469638e+00 4.0513915938638589e-01 + -2.4375526842444839e+00 1.8178392740354492e+00 2.5786062896482542e-01 + -2.7016116822868250e+00 1.6656818163420797e+00 1.3479913793774251e-01 + -2.9194676457186319e+00 1.4725671267295761e+00 6.4974749900029327e-02 + -3.0891256263496287e+00 1.2696204329829250e+00 7.1056874860678326e-02 + -3.2003758322354621e+00 1.1079902785688893e+00 1.7328887085651043e-01 + -3.2389565177805073e+00 1.0614729404668850e+00 3.6652456107603670e-01 + -3.2207628374000281e+00 1.1556121554079615e+00 5.8596725679260675e-01 + -3.1899270403572584e+00 1.3575597358676528e+00 7.6462965096927782e-01 + -3.1732973060982319e+00 1.6039819594433466e+00 8.8788126136713319e-01 + -3.3850607097744012e+00 1.4438310417304163e+00 1.2685036524619953e+00 + id 12182 + loc 9.0695619583129883e-01 8.8648861646652222e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0809084703492599e-01:3.2664914581608423e-01:4.3821491565012471e-02:3.7628337964935027e-01:8.5342881631484335e-01:3.5180508811050332e-01:1.1476152883119177e+00:3.2528146363695470e-01:1.8946448028393819e+00:3.2505763788380521e-01:2.3562240463553659e+00:2.8571761872345991e-01:3.0286262487636368e+00:4.0808676612645567e-01:3.5716226156674935e+00 + CVs 20 + -1.5804944750869859e-01 2.9232223633318138e-01 1.1742311522189086e-01 + -3.3603155822191655e-01 5.8875605465406744e-01 2.2583497048357090e-01 + -5.1778683174218143e-01 8.9362373104309489e-01 3.3222396736023896e-01 + -7.0474975433414078e-01 1.2035974824946623e+00 4.3231393664867634e-01 + -9.1415172884836760e-01 1.5082671953212556e+00 5.1001533426834378e-01 + -1.1571999570921059e+00 1.7889718798497511e+00 5.4507774350207427e-01 + -1.4311819560971029e+00 2.0190146404640745e+00 5.1827884962838300e-01 + -1.7121756815178630e+00 2.1660710568627688e+00 4.1514050849192308e-01 + -1.9585106950528997e+00 2.1994174399719943e+00 2.3201293827258895e-01 + -2.1365084856135819e+00 2.1069279240305203e+00 -1.1329329492856033e-02 + -2.2332846596757769e+00 1.9022075668187384e+00 -2.5462395447902419e-01 + -2.2645825139457880e+00 1.6286316596869437e+00 -4.0161670300400010e-01 + -2.2657757793324222e+00 1.3312396940235616e+00 -4.1752741396833015e-01 + -2.2392639126826772e+00 9.4781768876468742e-01 -4.0349184604998439e-01 + -2.1358408025928797e+00 4.0208872164967568e-01 -4.8083326123981651e-01 + -1.9130669260906630e+00 -2.3169985163068840e-01 -7.7439403793593631e-01 + -1.6062081077977175e+00 -7.6556881395436571e-01 -1.3544550620782536e+00 + -1.3404197413037255e+00 -1.0591857839879002e+00 -2.0503007432915750e+00 + -1.2363099773174042e+00 -1.2624736308194080e+00 -2.4301923481458578e+00 + id 12183 + loc 6.5283381938934326e-01 2.6539912819862366e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0421544439875123e-01:2.8087133421611798e-01:5.9913176945656343e-02:2.9779136532227846e-01:9.4797695990250341e-01:2.8965894244433504e-01:1.9997213254771919e+00:3.4071184141134975e-01:2.8069540372605308e+00:4.0421140224430724e-01:3.1381210474725911e+00 + CVs 20 + -1.4056977869139509e-01 3.2436379370844115e-01 1.0808699532946313e-01 + -3.0559041065696946e-01 6.7713018660919500e-01 2.3424087152201500e-01 + -5.0750791542165907e-01 1.0438688286388125e+00 3.4738456527631784e-01 + -7.5440506256744533e-01 1.3994144752066200e+00 4.2763597874212622e-01 + -1.0491816083460119e+00 1.7123000933333206e+00 4.7155658923520144e-01 + -1.3872880199836759e+00 1.9520695135098522e+00 4.8923728563065511e-01 + -1.7547610381570848e+00 2.1001929346636588e+00 5.0307050834891764e-01 + -2.1277558838271737e+00 2.1562580951159003e+00 5.3272353779961024e-01 + -2.4813860778400558e+00 2.1253765990546576e+00 5.8984121754687968e-01 + -2.7740363169181634e+00 1.9648003909814649e+00 6.7965003082299758e-01 + -2.8998219408254018e+00 1.6541878462614674e+00 7.4274051875539482e-01 + -2.8924614368823933e+00 1.3403388546447550e+00 7.2428916586220338e-01 + -2.8319524691927804e+00 1.0356987703520948e+00 6.5393240275454168e-01 + -2.7270778015468111e+00 7.5850153397808917e-01 5.2757914067193157e-01 + -2.6321440793410775e+00 5.4305646000803187e-01 3.6239724585101152e-01 + -2.6019999738659463e+00 3.8803477031661970e-01 1.9504399492749222e-01 + -2.6627141108566286e+00 3.0692071687244593e-01 6.3462033274563776e-02 + -2.8468399723732185e+00 3.8951714341193255e-01 4.3390661095684249e-02 + -2.8933981976881373e+00 2.6745546379223145e-01 -8.0718954453588787e-02 + id 12184 + loc 8.9541840553283691e-01 4.6134608983993530e-01 416 + blend 0.0000000000000000e+00 + interp 4.7004409375934508e-01:3.4305906092074140e-01:5.8106720160788461e-01:4.5911675009234798e-01:1.0038479066957982e+00:4.1590964183805940e-01:1.9730466268958402e+00:2.5896059657470688e-01:2.5122005687812448e+00:3.7960488415786642e-01:3.1555298511601650e+00:4.7003939331840749e-01:3.7827617303019214e+00 + CVs 20 + -5.6006613319035736e-01 1.0324350066200830e-01 1.4801523875393813e-01 + -9.0512995157306031e-01 1.0151041799723984e-01 3.0244656929626657e-01 + -1.2249140451423095e+00 6.3408427185246807e-02 4.6614749727119370e-01 + -1.5845794460445684e+00 2.6214026371649934e-02 6.2408036450915438e-01 + -1.9867194075138936e+00 -1.7352986937938741e-02 7.6997648957527864e-01 + -2.4321747814216481e+00 -7.6026909411702759e-02 8.9347096639638779e-01 + -2.9140941272943159e+00 -1.5743109931776256e-01 9.7981091967496581e-01 + -3.4174993538240548e+00 -2.6724225075071106e-01 1.0176762018890915e+00 + -3.9256634604494827e+00 -4.0856408559984625e-01 1.0032032705777993e+00 + -4.4190719045651363e+00 -5.7887467954964600e-01 9.3842403231396032e-01 + -4.8603142306723992e+00 -7.6633218955684335e-01 8.4273260338160649e-01 + -5.1996375212111872e+00 -9.5570683527982592e-01 7.6630538522950675e-01 + -5.4241796036005816e+00 -1.1372368026877975e+00 7.4813722891791079e-01 + -5.5779891909644075e+00 -1.3166144603374497e+00 7.7512593740532776e-01 + -5.6957171909429860e+00 -1.5007380421861900e+00 8.2527156064550855e-01 + -5.7695584072468939e+00 -1.6684795028451460e+00 8.9055545378883660e-01 + -5.7930458513332868e+00 -1.7929978107301026e+00 9.6147754244066119e-01 + -5.7870094963674763e+00 -1.8777292945662643e+00 1.0273063280531436e+00 + -5.8665561182198047e+00 -2.0811978853411746e+00 1.1270366023707907e+00 + id 12185 + loc 1.1474786698818207e-01 9.2993885278701782e-01 406 + blend 0.0000000000000000e+00 + interp 4.9745885981692578e-01:4.2527077049741918e-01:8.1130619053123576e-02:4.9745388522832762e-01:1.0911509115670939e+00:4.5213397769670455e-01:1.5802628221081354e+00:3.7280151716463295e-01:2.0024470340549558e+00:4.6263974666093227e-01:2.9474917961519713e+00:3.7364351058832340e-01:3.1567603471456547e+00 + CVs 20 + 2.5987162487534365e-01 3.1397280354369250e-01 -9.6103962781278029e-02 + 3.7489949231631958e-01 5.1893867673690863e-01 -1.7380429011076409e-01 + 4.2745566425301817e-01 6.6637225814606693e-01 -2.4081608210829530e-01 + 4.8696220517507016e-01 8.0166429168525766e-01 -3.0375984241835796e-01 + 5.5020009498855083e-01 9.2167945497470027e-01 -3.5939053826738265e-01 + 6.1303656081734248e-01 1.0228556486209832e+00 -4.0502872330758721e-01 + 6.7162863405224027e-01 1.1021757082471151e+00 -4.3793481518887634e-01 + 7.2068709017943600e-01 1.1564367924273364e+00 -4.5620008589294814e-01 + 7.4936151833133624e-01 1.1831422024470766e+00 -4.6112010774485113e-01 + 7.4338035467758568e-01 1.1921342537547635e+00 -4.6450234496658271e-01 + 7.2564191261832178e-01 1.2068215148600883e+00 -4.7478751562365112e-01 + 7.2582026685834866e-01 1.2165459094912940e+00 -4.7257981907864566e-01 + 7.3510749491376171e-01 1.2101687280862217e+00 -4.5143834623823209e-01 + 7.4410033060056868e-01 1.1890772833046872e+00 -4.1494135994472808e-01 + 7.4730262639738998e-01 1.1528318410152065e+00 -3.6602829119694974e-01 + 7.4015000840887146e-01 1.0989318375531414e+00 -3.0688508111450347e-01 + 7.2124026095433280e-01 1.0279949170248230e+00 -2.3806469160648497e-01 + 6.9353140324526386e-01 9.4521534310914290e-01 -1.5799269145005163e-01 + 6.7185487560493129e-01 9.3264484074011289e-01 -9.3870335168423732e-02 + id 12186 + loc 2.7961289882659912e-01 3.2156806439161301e-02 411 + blend 0.0000000000000000e+00 + interp 5.0680105190003155e-01:5.0679598388951252e-01:6.6554650457008413e-01:1.3753599752595305e-01:1.1769701711886280e+00:3.5670039644231233e-01:1.9687332945624758e+00:3.4859285868308998e-01:2.3331150024635514e+00:3.0803815606569440e-01:3.2343759674607138e+00:4.0137737784517891e-01:3.9962734169493221e+00 + CVs 20 + -3.6530643494005748e-02 1.3553088289348700e-01 -5.5757965574646473e-01 + -9.6323363255970809e-02 1.8946852896764516e-01 -1.0166317638315452e+00 + -1.3259197767240188e-01 2.0225317502598461e-01 -1.4688876031167324e+00 + -1.2588298992882924e-01 1.8646797362214507e-01 -1.9446712344718864e+00 + -7.7401118887846912e-02 1.3996560698221960e-01 -2.4286028438406637e+00 + 8.7571316782278641e-03 6.3977156052747786e-02 -2.9052633024422727e+00 + 1.2622285763817448e-01 -3.9550787083858285e-02 -3.3584863034977608e+00 + 2.6606618122163994e-01 -1.7059152794841559e-01 -3.7721049461296814e+00 + 4.1645459614807995e-01 -3.2905499395846993e-01 -4.1355640997492955e+00 + 5.6264401653317708e-01 -5.1297573268448327e-01 -4.4417635799923634e+00 + 6.9022908199007016e-01 -7.1785227714746358e-01 -4.6838137921359078e+00 + 7.9161417120148081e-01 -9.3788532853112816e-01 -4.8636318333115707e+00 + 8.6651464879211915e-01 -1.1684858781434260e+00 -4.9932863514891626e+00 + 9.1655654810854836e-01 -1.4046517589097032e+00 -5.0829357448837911e+00 + 9.4405425980086854e-01 -1.6367498522956263e+00 -5.1338688639677379e+00 + 9.5469526958851214e-01 -1.8486954463009353e+00 -5.1443566713141369e+00 + 9.5651953264503198e-01 -2.0323005324229384e+00 -5.1207809301226490e+00 + 9.5352524397495297e-01 -2.2108525918052000e+00 -5.0784094451370878e+00 + 9.3807594006531825e-01 -2.5116156729899455e+00 -5.0408641815801207e+00 + id 12187 + loc 8.5910215973854065e-02 3.2059851288795471e-01 384 + blend 0.0000000000000000e+00 + interp 5.3507263556244744e-01:2.9464345934931430e-01:2.5455476507264130e-01:5.1167979543366182e-01:1.0132515769383754e+00:2.5739326706078053e-01:1.7066916350878716e+00:5.3506728483609189e-01:2.1925529757564828e+00:5.3121524657712427e-01:2.8852899346493199e+00:3.2738489454125580e-01:3.1017133444115172e+00:3.3751558743009152e-01:3.8746723718542206e+00 + CVs 20 + -4.3657929912022264e-01 2.7112826007904733e-01 -1.1655997493102117e+00 + -7.7298275559081397e-01 3.3974413879097104e-01 -1.8738067723626466e+00 + -1.0829310334619942e+00 3.1115937292679596e-01 -2.4922250901517038e+00 + -1.3853128842115248e+00 2.2196746644475424e-01 -3.1569454576489600e+00 + -1.6803310264765401e+00 5.6681982421137700e-02 -3.8504848646073837e+00 + -1.9777143847273548e+00 -1.8623458917539770e-01 -4.5469182368096028e+00 + -2.2937990616440018e+00 -4.9346022073340634e-01 -5.2169562701394678e+00 + -2.6364514379809116e+00 -8.4460177170264739e-01 -5.8339972467135084e+00 + -2.9966935384421429e+00 -1.2207202002822071e+00 -6.3844129638641816e+00 + -3.3730381387240529e+00 -1.6119455338759046e+00 -6.8596604669545549e+00 + -3.7714654604838098e+00 -2.0144557541321597e+00 -7.2559859094696506e+00 + -4.1924497440846604e+00 -2.4316830057220491e+00 -7.5766542900362523e+00 + -4.6238647872608283e+00 -2.8771013922416260e+00 -7.8246921453965070e+00 + -5.0492005171930092e+00 -3.3655983242974443e+00 -7.9991814799948733e+00 + -5.4478052460452693e+00 -3.9048285715157247e+00 -8.0907637295094528e+00 + -5.7932410479987286e+00 -4.4925129602033529e+00 -8.0858842891388765e+00 + -6.0551264326802858e+00 -5.1133887913937457e+00 -7.9777071349000552e+00 + -6.2106819957214601e+00 -5.7307164897393505e+00 -7.7838113042822350e+00 + -6.2917954826559441e+00 -6.2771620567695905e+00 -7.5987307666607684e+00 + id 12188 + loc 8.3514130115509033e-01 1.4931443333625793e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8116615341969665e-01:4.8116134175816250e-01:8.2860040700788451e-03:4.1741165209619724e-01:7.6289561449276200e-01:4.1410637039816767e-01:1.4181715359418892e+00:2.8906978578851311e-01:2.0589865890592849e+00:4.0330605687255688e-01:2.7897658311480069e+00:2.8263696667596677e-01:3.6118091234128080e+00 + CVs 20 + -1.9953700841631733e-01 9.7773271262283745e-02 1.6812626700022823e-01 + -3.7599532202324759e-01 2.0311441351248219e-01 3.2066446988145975e-01 + -5.2880166757745406e-01 3.0384698868281501e-01 4.5815172261205239e-01 + -6.6827901994711947e-01 4.0267510722904115e-01 5.8804541030416613e-01 + -7.9591429259865754e-01 5.0489883959510196e-01 7.0671073577870291e-01 + -9.1334070087062180e-01 6.1503096234587951e-01 8.0765583160071175e-01 + -1.0286064092634146e+00 7.3807174216196769e-01 8.9547332478011432e-01 + -1.1549374598807169e+00 8.7461946648335787e-01 9.8643389083960942e-01 + -1.3001934117208820e+00 1.0203703473256502e+00 1.0956993520553391e+00 + -1.4667567658591532e+00 1.1679688353908897e+00 1.2347607578255591e+00 + -1.6560148385930298e+00 1.3059929118450768e+00 1.4137491447263966e+00 + -1.8682760754504415e+00 1.4190709143292937e+00 1.6406830574347790e+00 + -2.1013203353596821e+00 1.4911115903840428e+00 1.9195671236615706e+00 + -2.3501103779408492e+00 1.5103776795946988e+00 2.2491185510904841e+00 + -2.6084321319526884e+00 1.4730331704699733e+00 2.6248130428730789e+00 + -2.8742900630092141e+00 1.3736723059662179e+00 3.0427339531723776e+00 + -3.1530172746218206e+00 1.1547853911674668e+00 3.4850116884474533e+00 + -3.4394630469943293e+00 7.0025844501873435e-01 3.7958823676187077e+00 + -3.6613621880628253e+00 3.3901939368384459e-01 3.8364032671531163e+00 + id 12189 + loc 4.6964827179908752e-01 7.1978914737701416e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7839426323316292e-01:3.0899552376419265e-01:3.5479049891736048e-01:4.7838947929053061e-01:1.0367341566244115e+00:2.8799862490919842e-01:1.9861918968388972e+00:3.1508469583541099e-01:2.9988812119916295e+00:3.7442176321787196e-01:3.8138007457350516e+00 + CVs 20 + 1.1162828062037786e-01 2.2147239788370293e-01 -2.2607690661213845e-01 + 2.2182826854951601e-01 4.5765357878555812e-01 -4.5355911743862115e-01 + 3.2685881641404768e-01 7.0610398201786839e-01 -6.8347572613349616e-01 + 4.2051359461336424e-01 9.6516618637093199e-01 -9.1515916581872481e-01 + 4.9576350643933270e-01 1.2347993368834711e+00 -1.1479436277455544e+00 + 5.4794844622045691e-01 1.5162981736143641e+00 -1.3844772363908546e+00 + 5.7730443492450023e-01 1.8123313409509101e+00 -1.6354610555919364e+00 + 5.9124088766949501e-01 2.1221321117088578e+00 -1.9221982840926155e+00 + 6.0395753058854007e-01 2.4310225686433009e+00 -2.2738678702445960e+00 + 6.3090758054672458e-01 2.7015809259639392e+00 -2.7193958919797518e+00 + 6.8214702412045392e-01 2.8739448317355261e+00 -3.2685843257160889e+00 + 7.5472352834536505e-01 2.8862817115953425e+00 -3.8910475931422419e+00 + 8.2536671625525870e-01 2.6985275132501076e+00 -4.5247465753530705e+00 + 8.6102477380503672e-01 2.3167300421540178e+00 -5.0905485510783839e+00 + 8.4868609747740420e-01 1.8060685029847907e+00 -5.5366097108558003e+00 + 7.6863270572282960e-01 1.2327246691050546e+00 -5.8548400482836236e+00 + 5.6389838863302244e-01 6.6705814665870500e-01 -6.0397481515868492e+00 + 2.2781706448341277e-01 1.7967563398820574e-01 -6.1030090831992636e+00 + 6.6491425244400965e-02 -2.7723649393465583e-01 -6.2537336482869721e+00 + id 12190 + loc 2.5937148928642273e-01 4.2437246441841125e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0520969586957623e-01:3.7194119971194584e-01:4.7299658950139112e-01:4.0520564377261753e-01:1.0011138408604765e+00:3.9016064676747397e-01:1.9307548320729251e+00:3.7762132750196808e-01:2.4810373367832472e+00:3.7406883465690366e-01:3.0576488889060061e+00:3.1929134185378905e-01:3.7885266257655115e+00 + CVs 20 + -2.8603795599019111e-01 6.0703408188593677e-01 -1.7593371149659368e-01 + -5.2758682040420990e-01 1.1939633797063687e+00 -4.0354798610719345e-01 + -7.0007469323532456e-01 1.7599740847444580e+00 -6.9260098401759707e-01 + -7.9566173155811770e-01 2.2713185066152000e+00 -1.0490020735297105e+00 + -8.3584058408905171e-01 2.6693554994304582e+00 -1.4741759315377623e+00 + -8.7375131207940893e-01 2.9018846321670528e+00 -1.9357675860449453e+00 + -9.4847316146416583e-01 2.9608117592918761e+00 -2.3625275039579421e+00 + -1.0626305339459428e+00 2.8803257389259125e+00 -2.7118881556006116e+00 + -1.2101300318634740e+00 2.6882332841846734e+00 -3.0108661125716321e+00 + -1.3712286493020662e+00 2.3638090345919549e+00 -3.3008077958998481e+00 + -1.4783668528557796e+00 1.8598542416184605e+00 -3.5812580061281682e+00 + -1.4428681644423145e+00 1.1903698594706358e+00 -3.8107975482546057e+00 + -1.2461005558484863e+00 4.6156393710182814e-01 -3.9811891895516021e+00 + -9.6075692968426907e-01 -2.0574455339064951e-01 -4.1392469266006149e+00 + -6.9033170481197448e-01 -7.0745124505949097e-01 -4.3260653515034395e+00 + -5.5772265166086532e-01 -7.9332666928440720e-01 -4.5764617436749981e+00 + -1.1823723999782936e+00 -6.3416103185468209e-01 -3.4315241899762419e+00 + -1.3085378561375032e+00 -3.7335476435947129e-01 -3.4730005963536494e+00 + -1.4193914002341188e+00 -9.6347651079114083e-02 -3.2284376328564397e+00 + id 12191 + loc 8.6624550819396973e-01 8.1042397022247314e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8544793434060232e-01:2.8364570857177240e-01:6.8119846636849068e-01:3.0142707466928370e-01:1.3356981532163459e+00:2.9017868644520256e-01:2.5801070535275277e+00:3.8544407986125895e-01:3.1355914587954072e+00:3.3088944510808976e-01:3.9613478505041679e+00 + CVs 20 + 2.5626677588522373e-01 2.4691763686410492e-01 -3.5444835723706375e-01 + 5.1201942302651404e-01 4.8850986774271143e-01 -6.8978891587311975e-01 + 7.8648979045013179e-01 7.0262490167193459e-01 -1.0063485875122107e+00 + 1.0808878450436386e+00 8.7371103819862306e-01 -1.3085945547467519e+00 + 1.3836988838385547e+00 9.8576513110978325e-01 -1.5966259814478481e+00 + 1.6799400637956274e+00 1.0288279192668879e+00 -1.8696952079724340e+00 + 1.9519608307909138e+00 1.0006908640400622e+00 -2.1282389886448381e+00 + 2.1833505456473983e+00 9.0752407562096726e-01 -2.3744397151334176e+00 + 2.3677396131563526e+00 7.6242295695089657e-01 -2.6076387759909108e+00 + 2.5083777543613297e+00 5.7853770769063084e-01 -2.8195057106208874e+00 + 2.6079511572210281e+00 3.6695976686808118e-01 -2.9964099897534280e+00 + 2.6687213995598671e+00 1.4085690843868354e-01 -3.1272273923270753e+00 + 2.6959656612717477e+00 -8.4473785197536982e-02 -3.2039320948452636e+00 + 2.6964395288661533e+00 -2.8995844053849529e-01 -3.2152823209005952e+00 + 2.6817715828180213e+00 -4.4953825540051912e-01 -3.1522079336225577e+00 + 2.6695142239423895e+00 -5.4151802968366758e-01 -3.0293653544883341e+00 + 2.6716647380968275e+00 -5.7239061357500032e-01 -2.8889409531732326e+00 + 2.6730055343952968e+00 -5.9703980140846225e-01 -2.7781073688437044e+00 + 2.5456782387562247e+00 -8.6457993875499695e-01 -2.7740374839398569e+00 + id 12192 + loc 1.5128922462463379e-01 8.5906916856765747e-01 1055 + blend 0.0000000000000000e+00 + interp 5.9624728791542192e-01:5.9624132544254282e-01:6.1682820938417149e-02:3.7588819639406118e-01:9.1681329264273626e-01:3.1288967391469313e-01:1.2754754486276090e+00:5.6604706977208352e-01:2.1785421479075673e+00:4.7792157737945840e-01:2.6376680450924814e+00 + CVs 20 + -6.4830930144167298e-02 3.2409566570148551e-01 -4.0692249200732977e-01 + -1.7329216998196451e-02 5.8348283205558071e-01 -7.4820706695166983e-01 + 1.0025274911036075e-01 8.1883335216227171e-01 -1.0500139041078531e+00 + 2.6690068162057123e-01 1.0501231523921954e+00 -1.3104904850024850e+00 + 4.6279863136777954e-01 1.3008251848425374e+00 -1.5324555969258578e+00 + 6.3426984115175666e-01 1.6210887257015849e+00 -1.7485125505929289e+00 + 6.9958481627952396e-01 2.0200325527342518e+00 -1.9809934741812421e+00 + 6.2510231564817209e-01 2.4315266240223972e+00 -2.2324931031911239e+00 + 4.3224865776971466e-01 2.7888485801151881e+00 -2.5184575123184363e+00 + 1.5105954872156224e-01 3.0304576354947530e+00 -2.8599063992859524e+00 + -1.7288952058567153e-01 3.0999571125639824e+00 -3.2468707937663028e+00 + -4.9259002854827028e-01 2.9975576708151244e+00 -3.6286030700727299e+00 + -7.8757644306704311e-01 2.7621208883238269e+00 -3.9626865022811790e+00 + -1.0403395308398449e+00 2.4357625487488201e+00 -4.2263723384456453e+00 + -1.2398030759078691e+00 2.0643926429196178e+00 -4.4185471608127651e+00 + -1.3851942078870385e+00 1.6606702262865551e+00 -4.5536465210668933e+00 + -1.4626079017192857e+00 1.2099054975584480e+00 -4.6321031946291473e+00 + -1.4512468849663827e+00 7.2758095128306932e-01 -4.6308354273916539e+00 + -1.4930604713847999e+00 4.6283584887265938e-01 -4.6109111939028855e+00 + id 12193 + loc 6.7093068361282349e-01 5.6852984428405762e-01 416 + blend 0.0000000000000000e+00 + interp 4.9310272436444591e-01:4.4102974861179395e-01:9.8271542789393207e-02:3.3268058397731298e-01:7.6616113217201265e-01:4.9309779333720227e-01:1.0440743458794164e+00:4.5477331015260952e-01:1.4904788322342757e+00:4.5012422611912373e-01:2.0269838715450206e+00:4.0658270598679291e-01:2.9850401512465963e+00:3.3600646490600355e-01:3.3919958608803484e+00:4.4908557008628203e-01:3.9352743116269031e+00 + CVs 20 + 6.6496690949550086e-01 2.3244233297704509e-01 -7.0906683026003295e-02 + 1.0929607264904049e+00 3.2165028451992811e-01 -1.4834812064739161e-01 + 1.4630787380000718e+00 3.4525761202195315e-01 -2.2483745694148721e-01 + 1.8523526108214019e+00 3.3258098656411922e-01 -2.9621961493993976e-01 + 2.2536519450184040e+00 2.7439604149206559e-01 -3.6262411430579750e-01 + 2.6607040352686391e+00 1.6570717317190098e-01 -4.2127792413269161e-01 + 3.0688575343352524e+00 6.9063337105745859e-03 -4.6530765337006458e-01 + 3.4728379729043981e+00 -1.9698899663710412e-01 -4.8759480845511605e-01 + 3.8674600179114380e+00 -4.3750417111162254e-01 -4.8311819933325645e-01 + 4.2463699439410814e+00 -7.0200734338539261e-01 -4.4654084861946980e-01 + 4.5889506950628931e+00 -9.6921406400274446e-01 -3.7741651183462782e-01 + 4.8635998555507092e+00 -1.2139247318094049e+00 -2.9487308275910196e-01 + 5.0716906521638663e+00 -1.4301662779621973e+00 -2.2320147043909655e-01 + 5.2565051835961301e+00 -1.6413931504503176e+00 -1.6886269162367207e-01 + 5.4455803979531758e+00 -1.8655459779189694e+00 -1.2974905597299813e-01 + 5.6336300576511622e+00 -2.0960583552551220e+00 -1.0493718927834694e-01 + 5.8121020005695776e+00 -2.3254918308781374e+00 -1.0097797592891600e-01 + 5.9850325792448356e+00 -2.5618677251796864e+00 -1.3022994318777958e-01 + 6.2175045013556831e+00 -2.8837262203692751e+00 -1.9159886487366529e-01 + id 12194 + loc 9.5468330383300781e-01 7.6690638065338135e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0539785934133737e-01:2.8373080071115969e-01:1.6204042688146281e-01:4.0539380536274400e-01:8.6487877605573560e-01:3.3749390827456671e-01:1.1070785626401425e+00:1.6768382302204488e-01:2.4515961876966448e+00:2.4535068975795959e-01:3.2576622142351077e+00 + CVs 20 + -1.1714445019789185e-01 3.6353752115551496e-01 6.5531868612111896e-02 + -2.7241340547375015e-01 6.9956113516973883e-01 1.0042245208233530e-01 + -4.6281287103586388e-01 1.0090083326843144e+00 1.0927748273348531e-01 + -6.8435845903301429e-01 1.2834070000990427e+00 9.0695607374858156e-02 + -9.3104162941830271e-01 1.5085303446544693e+00 3.9804544305201195e-02 + -1.1916713413367086e+00 1.6733075447962289e+00 -4.4046054956132341e-02 + -1.4528687597199261e+00 1.7726865594791623e+00 -1.5785337126998467e-01 + -1.7035977960768516e+00 1.8092321351917717e+00 -2.9685256929578341e-01 + -1.9370978975721505e+00 1.7903245379528219e+00 -4.5491482478513623e-01 + -2.1533627548434606e+00 1.7255626531860273e+00 -6.2322940946463157e-01 + -2.3593873315235974e+00 1.6250730554328285e+00 -7.9061638700776338e-01 + -2.5630478029933257e+00 1.4973489566155884e+00 -9.4496131320557653e-01 + -2.7697780810000618e+00 1.3487954317637589e+00 -1.0735422923377302e+00 + -2.9839478422212502e+00 1.1870592322795981e+00 -1.1614977148866412e+00 + -3.2064810950020561e+00 1.0289632118718792e+00 -1.1907133562921022e+00 + -3.4320193582694372e+00 9.0336195498731986e-01 -1.1550202022165157e+00 + -3.6531456127495199e+00 8.4680393176945223e-01 -1.0800322164190301e+00 + -3.8477993576502665e+00 8.8483987667075592e-01 -1.0178001686474023e+00 + -4.1338504705208443e+00 8.4917259897045017e-01 -8.4656959082359151e-01 + id 12195 + loc 1.5517449378967285e-01 8.6272203922271729e-01 261 + blend 0.0000000000000000e+00 + interp 4.5721069660859853e-01:2.6856790742744352e-01:9.6460549616910685e-01:4.4084220072398966e-01:1.5977111604806555e+00:4.0245198202298410e-01:1.9987636296738627e+00:4.5061942610295713e-01:2.5136670115603810e+00:4.5720612450163245e-01:2.9188484139699176e+00:2.9164011422186692e-01:3.8392968182017846e+00 + CVs 20 + -8.5338048989181758e-01 4.4088645303357293e-01 -3.8053550918934559e-01 + -1.5667579126211242e+00 6.5621110107798541e-01 -5.6440659614351374e-01 + -2.2496044818618577e+00 6.9342009987750908e-01 -6.0292994865451544e-01 + -2.9332343918428880e+00 6.5464865566032193e-01 -5.7227045863406079e-01 + -3.5879667151624743e+00 6.1453967872174187e-01 -5.4492603825438235e-01 + -4.1873473427369454e+00 5.9228142257218142e-01 -5.6739285531825079e-01 + -4.7283824139146073e+00 5.8365322061378366e-01 -6.4364382388645935e-01 + -5.2274972061758795e+00 5.9127974295350838e-01 -7.5751538799220153e-01 + -5.7085439280825341e+00 6.2565891414804531e-01 -9.0073519778748423e-01 + -6.1936687698307011e+00 7.0038346033924204e-01 -1.0886405030493822e+00 + -6.7026768854491321e+00 8.1840148098280330e-01 -1.3526402715861425e+00 + -7.2595498990803389e+00 9.5014079393208983e-01 -1.7394473897057143e+00 + -7.8706560755286761e+00 1.0035569460413836e+00 -2.2981249058265361e+00 + -8.4787940342373069e+00 8.4905938980703999e-01 -3.0312695823136862e+00 + -8.9513612390220949e+00 4.3606676553576840e-01 -3.8595037680485742e+00 + -9.1672055497341027e+00 -1.2431355190873905e-01 -4.6138287992719125e+00 + -9.1876577898982497e+00 -6.7362957328329021e-01 -5.1535499841358181e+00 + -9.2118971927209774e+00 -1.2393078160131092e+00 -5.3930110073341453e+00 + -9.3796617161826177e+00 -1.9208478117671790e+00 -5.2598887504250760e+00 + id 12196 + loc 2.3464994132518768e-01 6.0764253139495850e-01 1050 + blend 0.0000000000000000e+00 + interp 7.6027631149172725e-01:6.9553230784640874e-01:2.2945002881558263e-01:3.4254359833678222e-01:8.8661355778599893e-01:3.1845073368926508e-01:1.2446720052450397e+00:5.1711495166155885e-01:1.9980545621178036e+00:3.4551642565930896e-01:2.4664224357684179e+00:7.6026870872861241e-01:2.6796286388355606e+00 + CVs 20 + -2.0046412933171132e-01 4.6622546994294167e-01 -7.2746697561544360e-01 + -2.4486237444524123e-01 8.9376668831132400e-01 -1.3431362561039419e+00 + -1.4993761720353627e-01 1.3093056548216584e+00 -1.8598056467365658e+00 + 6.8441625505591963e-02 1.7167782201819364e+00 -2.2781704226533286e+00 + 4.0008542824306714e-01 2.0982587891474598e+00 -2.5707050559186140e+00 + 8.1112419089268906e-01 2.4177133608777961e+00 -2.7259494543870169e+00 + 1.2458135444529601e+00 2.6470160588800664e+00 -2.7573190072265104e+00 + 1.6618179324600897e+00 2.7890730616970214e+00 -2.7106817711127786e+00 + 2.0595862192041028e+00 2.8406257008599081e+00 -2.6583313183372299e+00 + 2.4599970519765426e+00 2.7956062677734836e+00 -2.6589057750077201e+00 + 2.8815864613539386e+00 2.6197484067448453e+00 -2.6952427870640165e+00 + 3.2799738858852465e+00 2.2461747129503595e+00 -2.6764744670058014e+00 + 3.5687468180204545e+00 1.6807730251580817e+00 -2.5201427868843593e+00 + 3.6530732156850227e+00 1.0313623732339310e+00 -2.1618696787486824e+00 + 3.4823676417039366e+00 4.7549875053368235e-01 -1.6062401670409143e+00 + 3.1095641404613708e+00 1.5792246816478858e-01 -9.4749311455010476e-01 + 2.6826977317812171e+00 4.0611878077779384e-02 -2.5522479993668296e-01 + 2.1948606587963657e+00 4.0164657132698234e-02 5.2974194885665971e-01 + 1.9760161103454563e+00 5.8350261069771037e-01 3.0446893273499992e-01 + id 12197 + loc 5.5292576551437378e-01 3.0882784724235535e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3682716049005071e-01:3.2898748264555544e-01:5.0009426455443640e-01:3.2356159856680283e-01:1.0532939484358368e+00:3.5061657050788364e-01:1.9611229240011974e+00:3.2754492981108047e-01:2.5160295206885914e+00:4.3682279221844583e-01:3.0620469575902303e+00:3.4018324807108147e-01:3.9365559570285984e+00 + CVs 20 + -2.6202725601334903e-01 2.2435593366294415e-01 1.5326254053101909e-01 + -5.0747644085786647e-01 4.4360293720841532e-01 3.0831829601582467e-01 + -7.5255220329002970e-01 6.5611950187615564e-01 4.6647980166633829e-01 + -1.0044613556192543e+00 8.6263300807552334e-01 6.3782782745087607e-01 + -1.2508242204877573e+00 1.0611212008112438e+00 8.4001033489725241e-01 + -1.4816037319226316e+00 1.2417294255233728e+00 1.0791658537349982e+00 + -1.7098911511049000e+00 1.3930013282628704e+00 1.3465333930166314e+00 + -1.9541349693441195e+00 1.5047970619090045e+00 1.6256008578568300e+00 + -2.2148685120192400e+00 1.5675631726302361e+00 1.8960645525042112e+00 + -2.4824620309167593e+00 1.5730541729897261e+00 2.1401894932572341e+00 + -2.7404897313178647e+00 1.5140069566706198e+00 2.3453695354144211e+00 + -2.9495965461716573e+00 1.3954265744537597e+00 2.4985399452219870e+00 + -3.0617605847366902e+00 1.2417892319553705e+00 2.5937365252265749e+00 + -3.0713945206736142e+00 1.0591236622700122e+00 2.6524700536213275e+00 + -2.9849787531382885e+00 8.5189226434849452e-01 2.6899667050493652e+00 + -2.8255396730638660e+00 7.2477395804134115e-01 2.7003973319259864e+00 + -2.7561050016680162e+00 8.4883752800023615e-01 2.7003588482357626e+00 + -2.8094117081585215e+00 1.0185134279669972e+00 2.7153148510508647e+00 + -2.4820708401032192e+00 1.2047191609338919e+00 2.7227758141331875e+00 + id 12198 + loc 5.9206372499465942e-01 5.8715856075286865e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9105556177616333e-01:4.4237725758701979e-01:2.7234854982426215e-01:3.3216915621485132e-01:9.4137727999040199e-01:2.8797364905067713e-01:1.5750275579069988e+00:4.0058048946352615e-01:2.4480137680435892e+00:3.2941714219080087e-01:3.2522768083960543e+00:4.9105065122054559e-01:3.9179080645930995e+00 + CVs 20 + 1.3293023400428022e-01 2.7942683632061460e-01 -4.7581750526977523e-02 + 2.7574803014326488e-01 5.5125278789250998e-01 -9.8750217208075974e-02 + 4.3526446794154050e-01 8.1625919130299307e-01 -1.5550598328436710e-01 + 6.1898581684527054e-01 1.0722523136044073e+00 -2.2358455409380534e-01 + 8.3355625882422357e-01 1.3154672934170060e+00 -3.1517265802583355e-01 + 1.0822081600171611e+00 1.5409201100227641e+00 -4.4610106841298480e-01 + 1.3622744797013471e+00 1.7396320065675628e+00 -6.3412561466967576e-01 + 1.6635087852210393e+00 1.8972529530853568e+00 -8.9681397631581194e-01 + 1.9639127204058568e+00 1.9928852919894768e+00 -1.2451963498997864e+00 + 2.2314637916487281e+00 2.0039212368369541e+00 -1.6727377584092815e+00 + 2.4344779794776148e+00 1.9168347544597517e+00 -2.1487210867406228e+00 + 2.5536355812431486e+00 1.7454963499291565e+00 -2.6113464725407929e+00 + 2.5999552007557627e+00 1.5419053770100621e+00 -2.9880062960634697e+00 + 2.6128866731687741e+00 1.3732610569525927e+00 -3.2073429080077167e+00 + 2.6330642045007662e+00 1.2812311895041708e+00 -3.1467168501995917e+00 + 2.6337914622991865e+00 1.1183560400185373e+00 -2.7273165044949073e+00 + 2.4846067398038585e+00 5.9352413901997170e-01 -2.1741340303967585e+00 + 2.0566355853852514e+00 -4.7390582553936111e-01 -2.0123613589867406e+00 + 2.1016630899728921e+00 -3.6468743433103468e-01 -1.9760373715509780e+00 + id 12199 + loc 6.0620540380477905e-01 3.7124863266944885e-01 406 + blend 0.0000000000000000e+00 + interp 3.9753429815552310e-01:2.6160200788776472e-01:4.8879709611647537e-01:3.9105296112237842e-01:1.0086110397784536e+00:2.5837343046512290e-01:1.7700736591209583e+00:2.7327487051639471e-01:2.7418603633161505e+00:3.9753032281254158e-01:3.1464201953675444e+00:2.9942430520958557e-01:3.9893794670264997e+00 + CVs 20 + -2.0559850139044450e-01 1.2824396624845452e-01 5.3760624062411631e-02 + -3.5388406337853523e-01 2.0281464140540692e-01 1.0063157103214407e-01 + -4.5896617667903111e-01 2.3768956860606172e-01 1.4158609234328531e-01 + -5.6069219652833935e-01 2.6503784171548633e-01 1.8465415347602615e-01 + -6.5810555273132554e-01 2.8488402086978959e-01 2.2846227279913489e-01 + -7.5095032009638896e-01 2.9764060058882497e-01 2.7152849122415967e-01 + -8.4140154727800620e-01 3.0421912639906412e-01 3.1284999998940155e-01 + -9.3359013237659805e-01 3.0516034486784682e-01 3.5199419371635943e-01 + -1.0255059629586605e+00 3.0030226798038245e-01 3.8739624287636287e-01 + -1.1025272138654700e+00 2.9082160472673074e-01 4.1433383505553023e-01 + -1.1528391234613826e+00 2.8019941801324805e-01 4.2823750891528323e-01 + -1.1860339197580207e+00 2.6932548120110811e-01 4.3094876300687301e-01 + -1.2199188504784131e+00 2.5414272704869006e-01 4.2993200063646037e-01 + -1.2576266435728245e+00 2.3231282466325465e-01 4.2835479775952173e-01 + -1.2888384530768118e+00 2.0705256824835433e-01 4.2088797050865079e-01 + -1.3063560284700368e+00 1.8255308836169049e-01 4.0193827584323349e-01 + -1.3141662298409456e+00 1.5958027738927083e-01 3.7518898873440476e-01 + -1.3199943907549621e+00 1.3563412180540058e-01 3.5093448588923137e-01 + -1.3612793862245067e+00 4.3198999050059195e-02 3.6596879076462552e-01 + id 12200 + loc 9.8227614164352417e-01 3.1338831782341003e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3478164311653145e-01:2.1177315153342174e-01:3.2062675217852599e-01:3.1521231485793411e-01:1.0714836933409850e+00:4.3477729530010029e-01:1.7275681220762578e+00:3.2012185379032948e-01:2.2375916376538090e+00:2.8415211234704524e-01:3.2121272140781487e+00:3.7457825869901890e-01:3.9135291890907737e+00 + CVs 20 + 3.0380278312541420e-01 2.8652062892147917e-01 -1.5803256926984011e-01 + 5.9500020379443841e-01 5.8112566216854644e-01 -3.4105764540943967e-01 + 8.5593979106478857e-01 8.9065643851692577e-01 -5.3035008179959986e-01 + 1.1271706747077401e+00 1.2001774590896477e+00 -6.6013964763657262e-01 + 1.4445255308396945e+00 1.4712565767925390e+00 -6.6497112143217785e-01 + 1.7934194183909375e+00 1.6512126514023340e+00 -5.2281558613547963e-01 + 2.1326568850438061e+00 1.7158189233371210e+00 -2.2791631589558070e-01 + 2.3983593687131330e+00 1.6535208751554200e+00 2.3584003590379576e-01 + 2.4996841483475389e+00 1.4600291634580320e+00 8.0767542576320428e-01 + 2.4182224466304771e+00 1.1861981244292084e+00 1.3457085349981202e+00 + 2.2039176509239011e+00 8.7945750952517543e-01 1.7821489443417513e+00 + 1.8834068807895610e+00 5.4767841416093277e-01 2.1062739668492441e+00 + 1.5055331021111398e+00 2.1697155892352316e-01 2.2907389480466862e+00 + 1.1887547709876252e+00 -4.0649560302291721e-02 2.3393947666746704e+00 + 9.9800296680651113e-01 -1.8527978322304728e-01 2.3090252637568063e+00 + 8.7137122403340561e-01 -2.6501732323947058e-01 2.2337620808075416e+00 + 7.1096548257646730e-01 -3.8603596140936303e-01 2.1658673504967272e+00 + 4.8104356208087390e-01 -5.7959575314864642e-01 2.2307778171775743e+00 + 3.5010992421521414e-01 -6.1628906456391974e-01 2.3318639978955158e+00 + id 12201 + loc 3.2204657793045044e-01 2.9392454028129578e-01 384 + blend 0.0000000000000000e+00 + interp 4.7939095057404935e-01:2.9293155986127217e-01:4.8730464809227603e-01:4.7938615666454365e-01:1.2357291749870214e+00:2.9238342892932651e-01:1.9503790181218195e+00:2.9129722234924560e-01:2.4713608222798271e+00:2.8242853080602787e-01:3.0383233095876183e+00 + CVs 20 + -3.9843207164552247e-01 1.7318212859456045e-01 -1.2966747100112839e+00 + -6.7147526570601479e-01 1.5831728085383093e-01 -2.1283296266120950e+00 + -9.1937865233159011e-01 8.2647123902269470e-02 -2.8429741114944584e+00 + -1.1847925590280575e+00 -1.4847488181315815e-02 -3.5760151163743461e+00 + -1.4730731592133355e+00 -1.5134337279773497e-01 -4.3139151941543972e+00 + -1.7880816589159543e+00 -3.3984821045776359e-01 -5.0413036077269098e+00 + -2.1345511900297049e+00 -5.9158056295723094e-01 -5.7491652289491064e+00 + -2.5087390948737913e+00 -9.2026783595371930e-01 -6.4264650097582123e+00 + -2.8972803967361975e+00 -1.3436731172240024e+00 -7.0559396535047743e+00 + -3.2906442100782956e+00 -1.8784247451658422e+00 -7.6113666515587539e+00 + -3.6851052589545774e+00 -2.5242271296367007e+00 -8.0569788150146096e+00 + -4.0723573187939479e+00 -3.2547520209661198e+00 -8.3646160996626158e+00 + -4.4413209008064234e+00 -4.0311971725700593e+00 -8.5273258100323535e+00 + -4.7866688769061678e+00 -4.8174336295630464e+00 -8.5534954689192197e+00 + -5.1052633523066824e+00 -5.5821081125051295e+00 -8.4557977318224999e+00 + -5.3806474452118858e+00 -6.2979253770420280e+00 -8.2500685619524816e+00 + -5.5853344935357825e+00 -6.9448568106820714e+00 -7.9627851265984129e+00 + -5.7108793732415979e+00 -7.5155081291380652e+00 -7.6406749046853086e+00 + -5.9047514811762447e+00 -8.0361560514869250e+00 -7.4515883129251019e+00 + id 12202 + loc 4.2892172932624817e-01 6.4553362131118774e-01 411 + blend 0.0000000000000000e+00 + interp 3.6550747765391189e-01:3.2466483031527588e-01:2.3194827533631801e-01:3.4932215653516607e-01:1.0968219806579560e+00:2.9067173313538613e-01:1.7866271355611303e+00:2.6692810554625279e-01:2.4527501567367551e+00:3.6550382257913538e-01:3.0002451104985273e+00:3.3346843545450922e-01:3.4728046684734615e+00 + CVs 20 + 8.7971981811928335e-01 1.3979670850948278e-01 -1.3971968496185658e-01 + 1.5015086447611501e+00 1.6924617432700373e-01 -2.6205812687188312e-01 + 2.0674819965971203e+00 1.7337811537150327e-01 -3.5879079745595088e-01 + 2.6415915180009089e+00 1.7846446488142442e-01 -4.3011859142903763e-01 + 3.2115898382072454e+00 1.7611968548078760e-01 -4.8121301248229514e-01 + 3.7661304002258196e+00 1.5628219589070114e-01 -5.1955901800815840e-01 + 4.2953135452762172e+00 1.0760130754061970e-01 -5.4940821864831291e-01 + 4.7893850357715513e+00 1.8435001013517027e-02 -5.6845887540890094e-01 + 5.2350621812337357e+00 -1.1931492271820976e-01 -5.7190734984024405e-01 + 5.6156563662729200e+00 -3.0481829896314427e-01 -5.5662432229150383e-01 + 5.9205039472271981e+00 -5.2938369869527402e-01 -5.2341510344179243e-01 + 6.1502717700319316e+00 -7.8447751610012917e-01 -4.7517131749963559e-01 + 6.3127007500447085e+00 -1.0611664410612751e+00 -4.1095435028220373e-01 + 6.4155632332351837e+00 -1.3497577270143866e+00 -3.2623045615603469e-01 + 6.4621680084391171e+00 -1.6409732242322699e+00 -2.2165249451877914e-01 + 6.4593163455661875e+00 -1.9208534825343997e+00 -1.0649817005887313e-01 + 6.4130039352906936e+00 -2.1777916118325127e+00 1.3307698850230143e-02 + 6.3199242016547803e+00 -2.4211542030047370e+00 1.4449388015921344e-01 + 6.1038834669481687e+00 -2.7681259996806240e+00 2.6043914203773322e-01 + id 12203 + loc 6.1344081163406372e-01 4.0415292978286743e-01 1080 + blend 0.0000000000000000e+00 + interp 3.0201098458671033e-01:2.6391370975397832e-01:3.9955217660401166e-01:2.9051530040608631e-01:1.0215901608743632e+00:3.0200796447686445e-01:1.9260592798376144e+00:2.7892577697167642e-01:2.4623695693375716e+00:2.8058962576690299e-01:3.6613274825694058e+00 + CVs 20 + 4.8665730568434235e-02 4.4549522750253234e-01 -4.9243547037476271e-01 + 6.6222854826833211e-02 8.0996452798216678e-01 -8.1908481463681349e-01 + 7.3831263036677822e-02 1.1286034570800589e+00 -1.0936066556963904e+00 + 6.1766511042161937e-02 1.4511540675918115e+00 -1.3617889662777556e+00 + 1.9630580047823976e-02 1.7785350107906959e+00 -1.6101148483841818e+00 + -6.9161595220818717e-02 2.1267817533208380e+00 -1.8203281263427886e+00 + -2.4687897002675646e-01 2.5400528835113789e+00 -1.9487778616903872e+00 + -6.4079448864224453e-01 3.0766579606404694e+00 -1.8182735838770547e+00 + -1.3151753106186481e+00 3.3793963810675853e+00 -1.0276700112953447e+00 + -1.7036712552445417e+00 2.9985481242245937e+00 -1.8957163938170662e-01 + -1.8424493680704586e+00 2.5069583038754781e+00 2.6289174573015905e-01 + -1.9297929191659631e+00 2.0688660778648487e+00 5.1417060552740601e-01 + -2.0263141676503982e+00 1.7084070275860752e+00 6.5221060761767402e-01 + -2.1431617786081794e+00 1.4381501278923063e+00 7.1875833142369083e-01 + -2.2783767682256828e+00 1.2921558829950628e+00 7.2950381238588369e-01 + -2.4586748877904654e+00 1.3426106966544320e+00 5.9260421219571280e-01 + -2.7022272149769946e+00 1.2135136939196958e+00 -3.3130290666828555e-01 + -2.4641819028763874e+00 -8.1677394625800953e-02 -6.9457629562117340e-01 + -2.6275610522526480e+00 -3.9019569220957978e-02 -6.8262239352767518e-01 + id 12204 + loc 4.2818215489387512e-01 2.4373186752200127e-02 1074 + blend 0.0000000000000000e+00 + interp 4.5007816047135868e-01:3.8362362180668269e-01:1.4153391750395505e-01:1.6107263995241780e-01:9.5301297686333408e-01:4.5007365968975399e-01:1.2304778232186644e+00:2.6184946113415952e-01:2.5547461030141929e+00:2.9884817234223748e-01:3.4106065410883466e+00 + CVs 20 + -2.2708333125744257e-01 2.1444999235592438e-01 -1.7216760314462887e-01 + -4.6909952770191288e-01 4.1675454127254929e-01 -3.2118918143432940e-01 + -7.1766868035921394e-01 5.9651266527842284e-01 -4.6327723872445092e-01 + -9.6372886253541834e-01 7.5620333893536806e-01 -6.0252963521819192e-01 + -1.1984705338730168e+00 8.9997081305722493e-01 -7.3382679208119694e-01 + -1.4256141223395440e+00 1.0256578016055418e+00 -8.5598678744205159e-01 + -1.6684790076691094e+00 1.1358992246935329e+00 -9.7621559486045140e-01 + -1.9456946014548455e+00 1.2373921850005531e+00 -1.1032688336936689e+00 + -2.2500396608789641e+00 1.3325691162539575e+00 -1.2405108621780587e+00 + -2.5604650686624915e+00 1.4162931079256258e+00 -1.3846221469476074e+00 + -2.8614496207778908e+00 1.4764156442087579e+00 -1.5265680454096338e+00 + -3.1499545055697848e+00 1.4976103045670712e+00 -1.6566492988815185e+00 + -3.4311557918790685e+00 1.4645635801637473e+00 -1.7671453177553553e+00 + -3.7134048649586009e+00 1.3630103124004003e+00 -1.8533492681421322e+00 + -4.0008117350714940e+00 1.1828336574365088e+00 -1.9100893011660296e+00 + -4.2826077810129073e+00 9.2923997198159625e-01 -1.9169440168026353e+00 + -4.5393142890321192e+00 6.3246884216222621e-01 -1.8361623598185932e+00 + -4.7639646480534807e+00 3.3014053476801591e-01 -1.6538193583812262e+00 + -5.0475688256524576e+00 -2.2426637765293828e-02 -1.4995913058372634e+00 + id 12205 + loc 7.8506624698638916e-01 6.6395413875579834e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2020627063887352e-01:2.6249167547804581e-01:1.1343046969266912e-02:3.2020306857616715e-01:8.3090005321052574e-01:2.8954887345034408e-01:1.3820315435780568e+00:2.9981036883257389e-01:2.1655042015505419e+00:2.9945569599955585e-01:3.2181272497093159e+00 + CVs 20 + 2.4762268649684338e-02 7.5295045150871931e-01 -3.2417934156467720e-01 + 1.5626977256387434e-01 1.5034741726889955e+00 -6.1632437884004054e-01 + 4.3331267238905891e-01 2.2104692990942905e+00 -9.1629121313235296e-01 + 5.9792321415437510e-01 2.8521380664698075e+00 -1.2761814711187054e+00 + 9.0520179599314510e-01 3.5212307211151344e+00 -1.3421877915458769e+00 + 1.3818634832708225e+00 4.1066544457485508e+00 -1.0960533150955534e+00 + 1.9292254390016399e+00 4.4541568278690722e+00 -5.5720442168726758e-01 + 2.4457899779005339e+00 4.4570661135066700e+00 1.9757559229369615e-01 + 2.8594647713644541e+00 4.1149235457855777e+00 1.0484261343152050e+00 + 3.1010694509330987e+00 3.4728354933700292e+00 1.8928579369558869e+00 + 3.0782791174453643e+00 2.6314421556473304e+00 2.6460089627415964e+00 + 2.7540104256177420e+00 1.7661912387240468e+00 3.2142194528552794e+00 + 2.2423381234673601e+00 9.7955119270223889e-01 3.5200785970761745e+00 + 1.6822901898178066e+00 2.7339452010740795e-01 3.5666443711342244e+00 + 1.1537922977560822e+00 -3.6190909107587599e-01 3.4407079641494880e+00 + 7.3295049007577528e-01 -1.0431780627614331e+00 3.3627253908816712e+00 + 7.7160853125924223e-01 -1.8550096244306746e+00 3.6866493841531769e+00 + 1.5010402167076333e+00 -2.3031442695895974e+00 4.5233908727732466e+00 + 2.3677091950171980e+00 -2.2440404264876719e+00 5.5084236146109191e+00 + id 12206 + loc 2.0988522469997406e-01 3.7988916039466858e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7598058230361595e-01:4.7597582249779291e-01:2.0538995381037206e-02:2.7362433197608821e-01:9.2088652890923628e-01:2.7328219149930111e-01:1.3812026411338896e+00:3.3749165300080758e-01:1.9828425585326459e+00:2.8053346782521110e-01:2.9156997018962469e+00:3.3299074690082664e-01:3.6352307078552579e+00 + CVs 20 + -1.8535174583431757e-01 2.5752844233756261e-01 -1.3035237896033275e-01 + -3.8659932474181546e-01 5.5028735993857403e-01 -2.1565323766976854e-01 + -5.9356663241458918e-01 8.4904608166053608e-01 -2.8372842218046473e-01 + -8.0864720753904384e-01 1.1306613152494540e+00 -3.5141135454628691e-01 + -1.0373501228845581e+00 1.3763265667286970e+00 -4.2634430441512272e-01 + -1.2725567129363968e+00 1.5679403045440772e+00 -5.0957351083172930e-01 + -1.4949501638650080e+00 1.6959663394838245e+00 -5.9007100360105103e-01 + -1.6878329989391452e+00 1.7714430125617915e+00 -6.4730350031465145e-01 + -1.8583828145149741e+00 1.8196988203977096e+00 -6.8480448804688243e-01 + -2.0155822773211272e+00 1.8426538624355933e+00 -7.3859065902946108e-01 + -2.1404615522380275e+00 1.8529460673661311e+00 -8.1456250048141032e-01 + -2.2115586706800183e+00 1.9124555189605614e+00 -9.0820897549667889e-01 + -2.2448279427315518e+00 2.0291759675703753e+00 -1.0513785398163438e+00 + -2.3009848060296965e+00 2.0411903660364290e+00 -1.2027956212801034e+00 + -2.3949395014047208e+00 1.8197889055563512e+00 -1.2390117225266239e+00 + -2.4438957790963731e+00 1.3581657853060185e+00 -1.1683007714220806e+00 + -2.3502610969259434e+00 7.3382445092282544e-01 -1.1296598123284132e+00 + -2.1324891582108125e+00 2.0600223918313576e-01 -1.2689434376740429e+00 + -1.9328606732708935e+00 2.0912789008505506e-01 -1.6079452187223704e+00 + id 12207 + loc 5.1911956071853638e-01 8.1723439693450928e-01 372 + blend 0.0000000000000000e+00 + interp 4.7436380436623077e-01:3.4937026944435789e-01:6.0866326779656865e-02:3.2608006311511911e-01:9.0487274034685206e-01:3.5195684365554175e-01:1.5916046364956342e+00:4.7435906072818712e-01:2.3283311172653196e+00:4.1429463194965205e-01:2.9534873249972482e+00:3.2803417999655227e-01:3.6142478051247826e+00 + CVs 20 + -3.1829689202415068e-01 4.8611010726289855e-01 -1.0242268190749690e-01 + -6.3113515832774059e-01 9.5124525493983281e-01 -1.9511393243350061e-01 + -9.6369525909460263e-01 1.4017499464011369e+00 -3.0383559353716522e-01 + -1.3142770035907656e+00 1.8762071550955266e+00 -4.6683933679821887e-01 + -1.5456666877213225e+00 2.4181081385615304e+00 -7.7361903500106566e-01 + -1.4489622354027962e+00 2.9000339242796827e+00 -1.2342599410441979e+00 + -1.0262654026104356e+00 3.1324149340688372e+00 -1.7228116533412767e+00 + -4.1082517596344803e-01 3.0407335958774682e+00 -2.1257351261886126e+00 + 2.6042993106950951e-01 2.6482697212675985e+00 -2.3917629092921988e+00 + 8.6003640690587002e-01 2.0207432442261060e+00 -2.5080443747994230e+00 + 1.3011316228292742e+00 1.2367020848018899e+00 -2.4881212839078963e+00 + 1.6006190267666940e+00 3.5060835879858676e-01 -2.3452178955748795e+00 + 1.8876335297335896e+00 -5.7389148735129225e-01 -2.0816784087299172e+00 + 2.3858441928961249e+00 -1.4711489714690824e+00 -1.7393061146123416e+00 + 3.2828678651241145e+00 -2.1950969328661190e+00 -1.4664653474192935e+00 + 4.4399829279094511e+00 -2.5926856904533544e+00 -1.4426515060501601e+00 + 5.6476224536686033e+00 -2.7049539672316172e+00 -1.7104511115775312e+00 + 6.7221255770250172e+00 -2.6013715818317582e+00 -2.2213721860413371e+00 + 7.3386034983222554e+00 -2.4496841293609970e+00 -2.7753532728737582e+00 + id 12208 + loc 9.8376959562301636e-01 4.8228111863136292e-01 1085 + blend 0.0000000000000000e+00 + interp 3.7851919774953052e-01:3.2702153934066602e-01:3.3797454495248846e-02:3.3036357229165580e-01:8.2773220438385353e-01:3.0081068376395154e-01:1.1499454231556197e+00:3.7851541255755305e-01:1.7918528200460977e+00:2.8639976743183065e-01:2.4395826932348967e+00:3.5954726920277214e-01:3.0051761186664847e+00:3.3022362143100120e-01:3.5341294539217398e+00 + CVs 20 + 8.2761347670590416e-02 3.0773604558628431e-01 3.7912179224087239e-02 + 1.4562128911490063e-01 5.9639835176073541e-01 1.0389078144430475e-01 + 2.0028081153420185e-01 8.7597590120550084e-01 1.8346605799294324e-01 + 2.5372082724890910e-01 1.1499932752280593e+00 2.6384716685609938e-01 + 3.1558873668068305e-01 1.4236570281967373e+00 3.4084627666806111e-01 + 4.0031361653886244e-01 1.6999939734822127e+00 4.1487599634423078e-01 + 5.2343707947503160e-01 1.9759017433248109e+00 4.9195555651734646e-01 + 6.9702630572833935e-01 2.2411296646193430e+00 5.8439778115468766e-01 + 9.2582320945175789e-01 2.4815476549345616e+00 7.1517930792505280e-01 + 1.2030667062292473e+00 2.6758579462722434e+00 9.1716307348292259e-01 + 1.5148904855946752e+00 2.8016065472959792e+00 1.2080623265097759e+00 + 1.8556437401064376e+00 2.8434573301739854e+00 1.5797849975015616e+00 + 2.2266286181676196e+00 2.7838447068933743e+00 2.0136139426067272e+00 + 2.6233820033403719e+00 2.5896297417975056e+00 2.4889454899900838e+00 + 3.0366325230258036e+00 2.2209227723966745e+00 2.9726590349320534e+00 + 3.4308559671404635e+00 1.6915187940117677e+00 3.3627799674565262e+00 + 3.7286244921278175e+00 1.1026417381413034e+00 3.5684673187893168e+00 + 3.9333063319363357e+00 5.6287319138182079e-01 3.6020026341605820e+00 + 4.2038513909468156e+00 5.8154352559472233e-01 3.4262200357986030e+00 + id 12209 + loc 6.7310857772827148e-01 5.1617801189422607e-01 403 + blend 0.0000000000000000e+00 + interp 4.8760157967468554e-01:4.4228661974472278e-01:2.6397965062338058e-01:3.2640261190074943e-01:9.3741765572134672e-01:2.8164903984547507e-01:1.5914488850215482e+00:3.9829533349411972e-01:2.4405244247009561e+00:3.1895696273077778e-01:3.2530318376173715e+00:4.8759670365888880e-01:3.9210097839002684e+00 + CVs 20 + 1.1111307902023146e-01 1.4598698199950064e-01 -9.6572425226904540e-02 + 2.1225213550152922e-01 2.9411932727267120e-01 -2.1839207537836061e-01 + 3.3016036275979260e-01 4.5529770127231656e-01 -3.2498202744162774e-01 + 4.6022307065666451e-01 6.2141472977258638e-01 -4.1500527939998177e-01 + 5.9256012353521659e-01 7.9215053347935382e-01 -4.9344413941506193e-01 + 7.1519253120213799e-01 9.7268618657327910e-01 -5.6450103986531053e-01 + 8.1313535542487680e-01 1.1726129226260396e+00 -6.3049514968182196e-01 + 8.6521516233882967e-01 1.4020748308155397e+00 -6.9390860553460065e-01 + 8.4365377541173281e-01 1.6647414147723683e+00 -7.5649765576767702e-01 + 7.1915138342496332e-01 1.9500656809367796e+00 -8.1389514398298790e-01 + 4.7662878879482851e-01 2.2274891075060528e+00 -8.5175491300052364e-01 + 1.2674769812342035e-01 2.4555462974583353e+00 -8.5173812859843923e-01 + -2.9147139160057534e-01 2.6004991678954701e+00 -8.0002294482266523e-01 + -7.1392979156877656e-01 2.6575102225589289e+00 -6.9223591278963004e-01 + -1.0778297348272747e+00 2.6584963710056471e+00 -5.3423502163781755e-01 + -1.3576180746504425e+00 2.6415126466084082e+00 -3.3527389387807116e-01 + -1.5624668168177638e+00 2.6174006348413168e+00 -1.0329901108366463e-01 + -1.7046545654057257e+00 2.5826245489588611e+00 1.4027580086960553e-01 + -1.7330086617782023e+00 2.6522245397966167e+00 1.5775101076089915e-01 + id 12210 + loc 3.1412515090778470e-04 8.6678999662399292e-01 1050 + blend 0.0000000000000000e+00 + interp 5.4509209691682503e-01:4.0000723804189164e-01:2.1528892760227836e-01:3.5980834233006537e-01:9.9827696514814301e-01:3.4261775850976067e-01:1.8446640714454041e+00:4.5363931442490496e-01:2.0099669173546317e+00:5.4508664599585588e-01:2.8552385563728437e+00:3.4767013278212783e-01:3.2909517032946547e+00 + CVs 20 + -7.9744436787763467e-02 4.7608737274883567e-01 -6.9516828881331016e-01 + -6.3737346403731521e-02 9.4468142564412894e-01 -1.3062841474749765e+00 + 7.1096150417651716e-02 1.4303420355359349e+00 -1.8218428083732463e+00 + 3.4323243334630427e-01 1.9205059942487637e+00 -2.2353022138024023e+00 + 7.5210985727730661e-01 2.3671226770892577e+00 -2.5355972809449026e+00 + 1.2669698321563216e+00 2.7198703749770239e+00 -2.7345058629819197e+00 + 1.8502560055442689e+00 2.9336530010905024e+00 -2.8601476509621664e+00 + 2.4706627196912163e+00 2.9689219795197261e+00 -2.9442207351478045e+00 + 3.1119312071416498e+00 2.7775123740470917e+00 -2.9990250499993465e+00 + 3.7255498521159285e+00 2.3122294488666277e+00 -2.9822023652751195e+00 + 4.1988741940545751e+00 1.5963395458987026e+00 -2.8085625325414139e+00 + 4.4073295708759472e+00 7.4350363106742234e-01 -2.4164234531625821e+00 + 4.2730732551839905e+00 -6.9070204363024204e-02 -1.7969098923948525e+00 + 3.8152076166142748e+00 -6.1585025315440556e-01 -1.0410275515360494e+00 + 3.1788685892927191e+00 -7.7207539581967610e-01 -3.2165265810985066e-01 + 2.5449479834967947e+00 -5.8714592491315343e-01 2.2483608366027152e-01 + 2.0441838280832094e+00 -2.1283546923666607e-01 5.5796510579640313e-01 + 1.7560907670829240e+00 1.1389936733658845e-01 7.3704994272412505e-01 + 1.7112379272944731e+00 4.9414915524210196e-01 5.3603571830650798e-01 + id 12211 + loc 2.6112499833106995e-01 7.5453704595565796e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4784173287045209e-01:3.9048096734063548e-01:4.5809672168570370e-01:4.2992260223718304e-01:1.1514681464107557e+00:2.6329630874780063e-01:2.0001008731301821e+00:4.4783725445312339e-01:2.5713361289384986e+00:3.8528761840671732e-01:3.0928791053915026e+00:3.0630836462152511e-01:3.8437709021844961e+00 + CVs 20 + 7.4833705438005854e-02 2.6461751218271523e-01 1.2386227740205455e-01 + 1.4529924957702084e-01 5.1383015829259093e-01 2.0601270817664660e-01 + 2.2227497604880564e-01 7.6908017847852184e-01 2.6690347273572301e-01 + 3.2022047404628562e-01 1.0506100144825754e+00 3.2037082112512477e-01 + 4.5308847634000726e-01 1.3599968989143962e+00 3.5243942833836434e-01 + 6.3942684903359259e-01 1.6919447614862126e+00 3.3928240453857639e-01 + 8.9261387087122357e-01 2.0240760900322678e+00 2.4640506643332738e-01 + 1.2059626283747567e+00 2.3153705990052726e+00 4.0288576015951483e-02 + 1.5471101221441141e+00 2.5184506002441585e+00 -2.9728268075366104e-01 + 1.8665709919287539e+00 2.5907810355894698e+00 -7.5914076453760460e-01 + 2.1160212415876143e+00 2.5013806057329959e+00 -1.3077924099912872e+00 + 2.2627380119306175e+00 2.2490031580734371e+00 -1.8670546533083994e+00 + 2.3152967509161999e+00 1.8987206125385432e+00 -2.3499744278395025e+00 + 2.3220599544104306e+00 1.5810056604223770e+00 -2.7188967158482829e+00 + 2.3354140890053556e+00 1.4952316935954109e+00 -2.9413397255188083e+00 + 2.3817168681580863e+00 1.7959994619177901e+00 -2.8122585116695653e+00 + 2.3578949893911458e+00 2.1271883074874038e+00 -2.0394230369157387e+00 + 1.9650911767494050e+00 1.7231307350058311e+00 -8.6772323401325635e-01 + 2.0465261250266171e+00 1.9626143368235969e+00 -8.6028091927257733e-01 + id 12212 + loc 2.6098051667213440e-01 2.4175388738512993e-02 406 + blend 0.0000000000000000e+00 + interp 5.2888999922611202e-01:3.8114485102389445e-01:1.2831630033399499e-01:3.7184931200578164e-01:1.0071127208850366e+00:5.2888471032611983e-01:1.8201598532043932e+00:3.7461895441856369e-01:2.1382745355066302e+00:2.8239269462250949e-01:3.0138226097256933e+00:3.7408581417729081e-01:3.6491973332656320e+00 + CVs 20 + 1.5635693565961846e-02 9.2449266754007567e-02 1.7736530119025616e-02 + 3.0295639337835037e-02 1.8498349829167871e-01 4.8133299824314794e-02 + 6.0221241957459884e-02 2.9384829853201738e-01 7.7811989683331390e-02 + 1.0854563237107873e-01 4.1867168559766355e-01 8.9580877416051807e-02 + 1.7465144052754777e-01 5.5692022954913867e-01 7.6194595980502461e-02 + 2.5703806247480815e-01 7.0443444932930765e-01 3.0867140622479972e-02 + 3.5345325669014149e-01 8.5489135955452222e-01 -5.1374482901577812e-02 + 4.6239856496914489e-01 1.0006607747462648e+00 -1.7194191852920199e-01 + 5.8320086270086358e-01 1.1341042025241856e+00 -3.2841822454058456e-01 + 7.1149063233925280e-01 1.2483480778842577e+00 -5.1751912410825363e-01 + 8.3684311694642677e-01 1.3377630208818352e+00 -7.3639933234894572e-01 + 9.4990170801050788e-01 1.3994225939809677e+00 -9.7902452336793511e-01 + 1.0486871792742634e+00 1.4345197710537718e+00 -1.2352225744080312e+00 + 1.1323691761173709e+00 1.4469924729510306e+00 -1.4950086442293198e+00 + 1.1953985569072254e+00 1.4409729164485574e+00 -1.7511210817541409e+00 + 1.2339691474367600e+00 1.4190125528499922e+00 -1.9985794798215299e+00 + 1.2522156386582717e+00 1.3826693977189435e+00 -2.2330458276300273e+00 + 1.2574447960654771e+00 1.3381404009476898e+00 -2.4478555252779106e+00 + 1.2983582579608592e+00 1.3298964135999085e+00 -2.6144045367910760e+00 + id 12213 + loc 7.3535984754562378e-01 4.0444222092628479e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4173402752480248e-01:2.7770453495729153e-01:2.3461033999296999e-01:2.5168756222229338e-01:9.9084088419637828e-01:3.2708079434650789e-01:1.5824027763611166e+00:3.4173061018452722e-01:2.0275534330557834e+00:3.0255057028218424e-01:2.8199429810712404e+00:2.7695631448763153e-01:3.2967134538821519e+00 + CVs 20 + -1.4703217171386501e-01 3.3767046677676960e-01 1.3196658569235911e-01 + -3.1668943173951625e-01 6.9877259230472677e-01 2.6849022121548616e-01 + -5.2780114594568772e-01 1.0678664628050116e+00 3.8833313774007439e-01 + -7.9097007592365809e-01 1.4177447812273452e+00 4.7748002861285760e-01 + -1.1064949118685752e+00 1.7161800192440106e+00 5.3569438128997793e-01 + -1.4642983119006043e+00 1.9333029093403507e+00 5.7383147565847537e-01 + -1.8433319595840039e+00 2.0534490518418989e+00 6.1163317325063393e-01 + -2.2141228855442163e+00 2.0804131368248955e+00 6.6403335661622553e-01 + -2.5501582983185007e+00 2.0327354470155292e+00 7.3509378311500462e-01 + -2.8256232780900801e+00 1.9160953613733400e+00 8.2109022384643915e-01 + -2.9921402174378189e+00 1.7291378745605710e+00 8.9542175731152629e-01 + -3.0352791816205400e+00 1.5336687965472815e+00 9.1523619893482722e-01 + -3.0183319751221349e+00 1.3693718856692261e+00 8.9502379983667824e-01 + -2.9713773462723472e+00 1.2440657376981654e+00 8.5368866824742184e-01 + -2.9227021208735509e+00 1.1819207848927771e+00 8.0885417345035704e-01 + -2.8676807898685661e+00 1.1727077319945991e+00 7.7814474918275467e-01 + -2.7796717823892290e+00 1.2062584085065593e+00 7.6595609478762960e-01 + -2.6424534893411913e+00 1.2730304014717968e+00 7.6885454786848606e-01 + -2.5427375375778296e+00 1.2501873089621915e+00 6.8326043909823453e-01 + id 12214 + loc 4.7954875230789185e-01 3.1895112991333008e-01 397 + blend 0.0000000000000000e+00 + interp 4.6529403454848539e-01:4.5865426215262656e-01:7.6741287755849408e-01:4.6528938160813993e-01:1.0280691695606810e+00:3.8723338323086837e-01:1.6268129619243838e+00:3.1281770359407957e-01:2.2224560667918487e+00:3.7450273943693024e-01:3.2188896164025409e+00:3.1536734266184863e-01:3.9706904956334985e+00 + CVs 20 + -2.7728348799939140e-01 2.2867804576727102e-01 -1.2450331555275949e+00 + -5.4283223746622999e-01 1.9532926733064238e-01 -2.0208087122228164e+00 + -8.2032542965315214e-01 6.2323027899302552e-02 -2.6542285541986339e+00 + -1.1136285292128347e+00 -1.1411452728554072e-01 -3.2602341021278098e+00 + -1.3973459679615146e+00 -3.3097352802378199e-01 -3.8290876877754503e+00 + -1.6514554311901462e+00 -5.8365337455331823e-01 -4.3549651001684202e+00 + -1.8744680992316760e+00 -8.6625700141602602e-01 -4.8297660553541180e+00 + -2.0796236680075988e+00 -1.1710429542929122e+00 -5.2437707492549768e+00 + -2.2622673979244379e+00 -1.4848739531327739e+00 -5.5990689334480104e+00 + -2.4153827980990301e+00 -1.7964912855869759e+00 -5.9038391555786172e+00 + -2.5392431681819891e+00 -2.1029404434250933e+00 -6.1709804575644336e+00 + -2.6444996359371244e+00 -2.4172082413035971e+00 -6.4175452245663109e+00 + -2.7438198871023118e+00 -2.7592456920325539e+00 -6.6545375180032611e+00 + -2.8430629799515907e+00 -3.1369262877702742e+00 -6.8803345665491609e+00 + -2.9455638440477490e+00 -3.5501321682092000e+00 -7.0860591404677411e+00 + -3.0539940517601480e+00 -3.9933276323581977e+00 -7.2560978557715003e+00 + -3.1652533601389861e+00 -4.4567822100398011e+00 -7.3720308876625102e+00 + -3.2713986857633204e+00 -4.9311111393936109e+00 -7.4210389160144121e+00 + -3.3886180124669751e+00 -5.4757847425577841e+00 -7.4158081621719045e+00 + id 12215 + loc 9.4738429784774780e-01 3.8088299334049225e-02 1074 + blend 0.0000000000000000e+00 + interp 4.3760762566117534e-01:3.2188881319579521e-01:5.0359830441672770e-01:2.7483680782241504e-01:1.0880437505392537e+00:1.7462358210409354e-01:2.0025002171152457e+00:4.3760324958491875e-01:2.5976667029294358e+00:2.7366119213568718e-01:3.5598626037604992e+00 + CVs 20 + -1.7344211746835131e-01 1.0867920802934450e-01 2.0868747066239746e-01 + -3.5949804231086446e-01 2.1164580551077616e-01 4.0064682946644681e-01 + -5.5173600308190840e-01 3.2090224954778385e-01 5.8077352947942906e-01 + -7.4226131121782990e-01 4.4372853765390841e-01 7.5112888646133202e-01 + -9.2865855617832971e-01 5.8555139109318299e-01 9.1355844046944434e-01 + -1.1061249233101860e+00 7.5091351845646859e-01 1.0717466695430795e+00 + -1.2667663835114076e+00 9.4317834967403369e-01 1.2321947151242558e+00 + -1.4035829784111467e+00 1.1639920052426849e+00 1.4047513008102548e+00 + -1.5134006682384187e+00 1.4092953168524447e+00 1.6074464879893267e+00 + -1.5923902425739831e+00 1.6655780420582758e+00 1.8605211022231032e+00 + -1.6330766575063924e+00 1.9070129380585137e+00 2.1762265925047442e+00 + -1.6302545942526772e+00 2.0970736420236871e+00 2.5539650638930480e+00 + -1.5922070558073491e+00 2.2066429784213684e+00 2.9799408682968096e+00 + -1.5408541005715350e+00 2.2226038668478569e+00 3.4351819732155722e+00 + -1.5038117756075540e+00 2.1395036185516521e+00 3.9022684325780426e+00 + -1.5094386511408209e+00 1.9489566562326033e+00 4.3640439931773845e+00 + -1.5765408451721272e+00 1.6373567378853293e+00 4.7853392372650028e+00 + -1.6999557797447946e+00 1.2151256292701200e+00 5.1120338917538968e+00 + -1.8498611327487320e+00 7.5448240302370040e-01 5.3242007789301820e+00 + id 12216 + loc 3.0437532067298889e-01 4.5783570408821106e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5553480947133274e-01:3.0604796702393355e-01:1.0093692952123146e-01:3.2538738519037569e-01:9.4609769280730793e-01:3.8751791467661950e-01:1.3521469485487247e+00:3.2921394971788370e-01:2.0128007612810004e+00:4.5553025412323805e-01:2.9289402365365111e+00:3.4684095318631353e-01:3.6301229309561793e+00 + CVs 20 + -1.4499621382300346e-01 2.5564862267019167e-01 1.1061429168568507e-02 + -2.8283635112636418e-01 4.8262757123567357e-01 -1.1315391137683761e-02 + -3.9887002504299013e-01 6.7247324685088861e-01 -4.4535657025438623e-02 + -4.8318028877047292e-01 8.3661680503281755e-01 -7.2124284558225671e-02 + -5.3488238645976638e-01 9.9099849572448884e-01 -9.0422235219994471e-02 + -5.5781671083152129e-01 1.1569806715035265e+00 -9.6499494943996511e-02 + -5.5510284455709513e-01 1.3501687428738283e+00 -9.8592713069716204e-02 + -5.2967077484157710e-01 1.5801085850029153e+00 -1.1581357138383661e-01 + -4.9672146625745567e-01 1.8571957982692222e+00 -1.6575214145196596e-01 + -4.9129910448021319e-01 2.1824215423063480e+00 -2.5728647574078001e-01 + -5.4781576292894318e-01 2.5382929162967955e+00 -3.9440544104914416e-01 + -6.8338126687196399e-01 2.8951554949769029e+00 -5.8314680259258722e-01 + -8.9054130953483412e-01 3.2075189343636263e+00 -8.2938098694854567e-01 + -1.1148049901949941e+00 3.4157891146595785e+00 -1.1511222960486187e+00 + -1.3002049653280714e+00 3.4765894353386413e+00 -1.6025007168526346e+00 + -1.4838297275606576e+00 3.3555070360243580e+00 -2.1888512162104732e+00 + -1.7390611133185057e+00 3.0228061466436724e+00 -2.8193509568050592e+00 + -2.0702342133043685e+00 2.5042945178530616e+00 -3.3373257908341918e+00 + -2.2177815234769329e+00 2.3698455485592582e+00 -3.3035663868784142e+00 + id 12217 + loc 3.5371917486190796e-01 3.2997569441795349e-01 411 + blend 0.0000000000000000e+00 + interp 4.1651321794464741e-01:3.2781057930180224e-01:3.9439021136663033e-01:2.8779058810482433e-01:1.0244633709493320e+00:3.5175112890708166e-01:1.9915230947617650e+00:3.9503308125031728e-01:2.8515679522291242e+00:2.5836028145921774e-01:3.1507636483324486e+00:4.1650905281246797e-01:3.9993387976412729e+00 + CVs 20 + 2.4013104568126421e-02 1.0700959643588923e-01 -7.8647908094724439e-01 + 5.0939864312793862e-02 1.4093040121877348e-01 -1.3913025055145534e+00 + 1.1583361259503808e-01 1.6539310779878025e-01 -1.9417112294315002e+00 + 2.2187663626388510e-01 1.9888161087862777e-01 -2.4863010045314984e+00 + 3.5913605809633320e-01 2.3671845306275707e-01 -3.0178955536219885e+00 + 5.1249414626712675e-01 2.7397231039274161e-01 -3.5345487647954608e+00 + 6.6735571657453829e-01 3.0161048159746140e-01 -4.0365002471342626e+00 + 8.1246872323644692e-01 3.0507021283575853e-01 -4.5277526904280521e+00 + 9.3847463236493556e-01 2.6575591884559624e-01 -5.0184477794416633e+00 + 1.0365957825911376e+00 1.6226622561169046e-01 -5.5147063984314082e+00 + 1.1007503561085064e+00 -1.9698585267506896e-02 -6.0034672458886602e+00 + 1.1306405951248930e+00 -2.7154512600328973e-01 -6.4583063399023972e+00 + 1.1308871107873326e+00 -5.7006253487058967e-01 -6.8666270627925226e+00 + 1.1070517561145887e+00 -8.9800894413094978e-01 -7.2348843373717413e+00 + 1.0650877413798934e+00 -1.2480422507246218e+00 -7.5710945326774963e+00 + 1.0110094150263891e+00 -1.6173800528587390e+00 -7.8769763428168869e+00 + 9.4811064406209855e-01 -2.0056156663173170e+00 -8.1511736935473529e+00 + 8.7636796576280407e-01 -2.4070733313368988e+00 -8.3895000609308923e+00 + 8.0368913455836577e-01 -2.6709670123457836e+00 -8.5705017297560708e+00 + id 12218 + loc 5.9999257326126099e-01 6.2659060955047607e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5885623681654536e-01:3.1576310825041359e-01:2.8302316788190784e-01:3.9658609231017811e-01:9.0729336240191238e-01:3.1404306546741528e-01:1.1372717612972447e+00:3.5833646313156309e-01:2.0103732272205317e+00:4.5885164825417724e-01:2.6743842868888068e+00:3.0882753063368668e-01:3.0233457661932093e+00:4.1886845804293482e-01:3.5401735081697976e+00 + CVs 20 + 6.3405403520154044e-02 7.9361169220549355e-01 -3.4980085007310269e-01 + 1.8134987351923498e-01 1.5985327953826356e+00 -6.3618845418271097e-01 + 3.7134405282290117e-01 2.3962990288262178e+00 -8.1476798058521416e-01 + 6.3787823399934607e-01 3.1429512284520156e+00 -8.4594381733233326e-01 + 9.7510597813406952e-01 3.7896718660855360e+00 -6.9722361040108605e-01 + 1.3590808411070445e+00 4.2822965101188872e+00 -3.5383791551402277e-01 + 1.7399204170312745e+00 4.5313946793961559e+00 1.8485330350653162e-01 + 2.0445879611213607e+00 4.4762177648220938e+00 8.5709991737903990e-01 + 2.1905871408689399e+00 4.1587418438577339e+00 1.5506912778715589e+00 + 2.1351715253580017e+00 3.7045147055843715e+00 2.1637178115979863e+00 + 1.8959377701096152e+00 3.2617109330513054e+00 2.6706580879344122e+00 + 1.4711431562337056e+00 2.8637154444561919e+00 3.1375028229412436e+00 + 8.1974591344339487e-01 2.4109453947350086e+00 3.6174454355270980e+00 + -5.5230029299847813e-02 1.7519838265563754e+00 4.0774062370304947e+00 + -1.0256224003124428e+00 7.4659229351848788e-01 4.5523181155822536e+00 + -1.5551748828158625e+00 -4.9572543616768794e-01 5.2441799125722737e+00 + -1.3181726712434252e+00 -1.2640554702585645e+00 5.8873232898330352e+00 + -7.0623428217274387e-01 -1.4748723342636376e+00 6.2370149834265263e+00 + 2.8260873213854609e-01 -1.2191596815024961e+00 6.6946134747089516e+00 + id 12219 + loc 6.0808110237121582e-01 7.8885829448699951e-01 261 + blend 0.0000000000000000e+00 + interp 4.3163445966840657e+00:8.5153450735504765e-01:8.1596304223610239e-01:5.7585460594837823e-01:9.3844089414752263e-01:3.6947765354680046e-01:1.5269804509757052e+00:4.1043026596326088e-01:2.0199880230729903e+00:4.5945723365294294e-01:2.7648620266718784e+00:3.2428039238457189e+00:2.9385214868664211e+00:4.3163345966840660e+00:2.9542473815866535e+00 + CVs 20 + -8.7535113106618201e-01 4.5473047528146471e-01 -5.5076870284058743e-01 + -1.6023537547075011e+00 6.9793473148835794e-01 -8.3798919349559164e-01 + -2.2952658675235265e+00 7.7246405043254363e-01 -9.3202816448855841e-01 + -2.9792421903210533e+00 7.6633510938262905e-01 -9.1696283443995719e-01 + -3.6496208460145292e+00 7.4231959762912436e-01 -8.7035513377366680e-01 + -4.3241243184038041e+00 7.1524777586600030e-01 -8.6084858606837578e-01 + -5.0165644324167546e+00 6.7784713954621933e-01 -9.4088391910003843e-01 + -5.7173831292656736e+00 6.3252537966274214e-01 -1.1455481543106598e+00 + -6.4047749751733987e+00 5.9289503468891502e-01 -1.4882401908207195e+00 + -7.0633810299414943e+00 5.6556446371598423e-01 -1.9613731636717531e+00 + -7.6854241142862811e+00 5.2919556868308071e-01 -2.5548050941833460e+00 + -8.2564063209535821e+00 4.2212829064807966e-01 -3.2692376657712723e+00 + -8.7308134463905436e+00 1.5356260549164880e-01 -4.0958860650935236e+00 + -9.0274034770290843e+00 -3.4392458803353643e-01 -4.9814171206438473e+00 + -9.0704929175454545e+00 -1.0640294640807380e+00 -5.8057239596441166e+00 + -8.9246944183919759e+00 -1.9013698727660224e+00 -6.3840879268147619e+00 + -8.8262926164087254e+00 -2.7248909500308054e+00 -6.5986024313786675e+00 + -8.8803345123205819e+00 -3.4452630035311707e+00 -6.5494368149056470e+00 + -8.8249047639788305e+00 -4.0592884064396504e+00 -6.6730314030648419e+00 + id 12220 + loc 5.6483244895935059e-01 3.3963593840599060e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3026483652767461e-01:3.9786342834125293e-01:4.1195132185505812e-01:4.3026053387930935e-01:9.7501521888163767e-01:3.4590767977545606e-01:1.8092774318373945e+00:2.7326001739755190e-01:2.6233972348433334e+00:3.6447104144519710e-01:3.0233486981072488e+00:4.1272909553170434e-01:3.9199637034748180e+00 + CVs 20 + -5.3204018255166248e-02 3.6430912127259601e-01 -8.8746579820475069e-03 + -1.2937355315764867e-01 7.1501224973648136e-01 2.5101654596274392e-02 + -2.1674802801502796e-01 1.0500796588989743e+00 1.0258405825666378e-01 + -3.1168920407901057e-01 1.3651587081399095e+00 2.2893649584139031e-01 + -4.1068437149569148e-01 1.6464083774048885e+00 4.0999784580334875e-01 + -5.0449875969311098e-01 1.8773776936187891e+00 6.4629501279200985e-01 + -5.7963336461669235e-01 2.0431626703920669e+00 9.2941576947491011e-01 + -6.2262693358194288e-01 2.1360984571567747e+00 1.2423803737202583e+00 + -6.2401239242479467e-01 2.1567566038507113e+00 1.5651089631868609e+00 + -5.7956875755275261e-01 2.1106596815997927e+00 1.8786932441631354e+00 + -4.9076174209146323e-01 2.0056453369519232e+00 2.1649139939571289e+00 + -3.6557597453494306e-01 1.8493003317996402e+00 2.4094178416279894e+00 + -2.1553215493031483e-01 1.6473195457840810e+00 2.6046402385521596e+00 + -6.1713535134284785e-02 1.4206553628150649e+00 2.7380826456714615e+00 + 6.6057135679348331e-02 1.2117870931921400e+00 2.7943147904404775e+00 + 1.5375827258426766e-01 1.0329851502755873e+00 2.7669744155408567e+00 + 2.2733275272374981e-01 8.2816163295775458e-01 2.7039502335191603e+00 + 3.2898346496837266e-01 5.3829229515959309e-01 2.7063720913104330e+00 + 3.9336624032111978e-01 5.6659200957290679e-01 2.8056966171213347e+00 + id 12221 + loc 1.2876478955149651e-02 6.9260579347610474e-01 1055 + blend 0.0000000000000000e+00 + interp 4.3952318621588854e-01:3.0245848591820068e-01:1.3575758312632802e-03:3.7473748536237905e-01:1.6665300494804436e-01:3.4970190850228006e-01:9.6927265373763272e-01:4.3951879098402641e-01:1.2256853090786366e+00:3.8114993321353569e-01:1.8968227613356379e+00:3.3896929257909147e-01:2.0763429269434628e+00:3.2018232824867104e-01:3.2310817988417435e+00 + CVs 20 + -1.7535555990619817e-01 3.3934583682906666e-01 -3.3792934243394857e-01 + -2.6083976525791031e-01 6.2172540835036239e-01 -6.3045254897090930e-01 + -2.9794781263804904e-01 8.8964506401873500e-01 -8.9961655969508980e-01 + -3.0454984015210307e-01 1.1665411276417872e+00 -1.1449494919709235e+00 + -2.9205321520148608e-01 1.4457917791475399e+00 -1.3424167861597929e+00 + -3.0934317733381278e-01 1.7085857524367398e+00 -1.4768982304512690e+00 + -3.9644824466376560e-01 1.9421954698914150e+00 -1.5626717921851723e+00 + -5.6132123911575049e-01 2.1608336034847069e+00 -1.6365542675158722e+00 + -8.0450376984356042e-01 2.3609189313620229e+00 -1.7313076899086091e+00 + -1.1100625449230412e+00 2.5014953193772405e+00 -1.8715458876452038e+00 + -1.4403635764454079e+00 2.5349100145410048e+00 -2.0638362483334625e+00 + -1.7514791338585443e+00 2.4514391250689842e+00 -2.2839027609830538e+00 + -2.0179795670284086e+00 2.2771138879502582e+00 -2.5035900004756333e+00 + -2.2303440390696014e+00 2.0389649036575666e+00 -2.7132281743325035e+00 + -2.3864445257577072e+00 1.7556516021102520e+00 -2.9153507076535252e+00 + -2.4821706674026003e+00 1.4440284068925375e+00 -3.1035672845050746e+00 + -2.5147004786098774e+00 1.1189871281331354e+00 -3.2611612454556389e+00 + -2.4849498631593914e+00 7.8518566704508830e-01 -3.3734291568298711e+00 + -2.4421828506148269e+00 5.7434154618279765e-01 -3.4379919167420621e+00 + id 12222 + loc 8.8658100366592407e-01 3.0205124616622925e-01 406 + blend 0.0000000000000000e+00 + interp 4.9362806533776726e-01:2.5008777714719660e-01:3.6564221557194510e-01:4.9362312905711392e-01:1.0219829895486594e+00:2.8530116984037690e-01:1.9585488833889859e+00:2.7788152472283950e-01:2.3707220503435065e+00:3.5923011892222589e-01:3.1557489025041514e+00:3.2451295507008571e-01:3.9821231555996852e+00 + CVs 20 + -1.6406808641517567e-01 2.7428202972882121e-01 -4.4997379452935124e-02 + -2.5153484967847800e-01 4.7495577669971933e-01 -1.2166235659672982e-01 + -3.4348923670702380e-01 6.5261364550815593e-01 -2.0026779625330710e-01 + -4.6247040255197219e-01 8.1837202519372143e-01 -2.7434928896660910e-01 + -6.0677095367594691e-01 9.6610649362110834e-01 -3.4503778070215563e-01 + -7.7147234506281015e-01 1.0906015675541072e+00 -4.1374152792925173e-01 + -9.4767302623383498e-01 1.1885342394766227e+00 -4.8262076069700549e-01 + -1.1241098890238927e+00 1.2600727108123384e+00 -5.5469661064225240e-01 + -1.2951768164980171e+00 1.3088172368905251e+00 -6.3224494800423603e-01 + -1.4675351128634551e+00 1.3387371808811772e+00 -7.1473620130917581e-01 + -1.6491563904076214e+00 1.3512114942020692e+00 -8.0108501096233731e-01 + -1.8321705908050041e+00 1.3460794920329593e+00 -8.9213494011760497e-01 + -2.0018844332318766e+00 1.3261661280871566e+00 -9.9002447138113092e-01 + -2.1571671460772186e+00 1.2953158287492550e+00 -1.0956864307400542e+00 + -2.3103743131802141e+00 1.2540782693705717e+00 -1.2083485772599234e+00 + -2.4697563253628756e+00 1.2019334472672458e+00 -1.3260441757283201e+00 + -2.6279069123457468e+00 1.1432813257076457e+00 -1.4459166942543884e+00 + -2.7690316121278915e+00 1.0867667046315856e+00 -1.5659324047343730e+00 + -2.8589269634561028e+00 1.0245557722076688e+00 -1.6901965438842872e+00 + id 12223 + loc 9.3627923727035522e-01 3.1338831782341003e-01 1085 + blend 0.0000000000000000e+00 + interp 4.6398149606193534e-01:3.3497231203974359e-01:5.7897623136263243e-01:4.6397685624697477e-01:1.0939095151699942e+00:3.3820780872473455e-01:1.8196563807534942e+00:2.9044238459655880e-01:2.2379922613535070e+00:4.0921451093573175e-01:2.9551647226604989e+00:3.4837475268724793e-01:3.8989214522197919e+00 + CVs 20 + 2.1781080848240664e-01 3.3237721019384847e-01 -6.1423063570016700e-02 + 4.0927054853331984e-01 6.6669661158573579e-01 -1.1967130189741432e-01 + 6.0933249982221971e-01 1.0033593999548527e+00 -1.7514506281803610e-01 + 8.4404076587806043e-01 1.3381016323007506e+00 -2.1855784840199938e-01 + 1.1293065824458803e+00 1.6615658845780501e+00 -2.3161139850399692e-01 + 1.4720110515667568e+00 1.9584564528872721e+00 -1.9630923981180992e-01 + 1.8663373017038816e+00 2.2100035886078944e+00 -9.9142880438399361e-02 + 2.2953072403262444e+00 2.3993160464791075e+00 6.4917794129204176e-02 + 2.7365636168067540e+00 2.5163026115377782e+00 2.9035820826679193e-01 + 3.1697852187280833e+00 2.5595128288203783e+00 5.5989605293708433e-01 + 3.5857157953365233e+00 2.5350843032939014e+00 8.4875084233841613e-01 + 3.9867403317331713e+00 2.4509251412728967e+00 1.1343688083895320e+00 + 4.3764328608061156e+00 2.3141441675700021e+00 1.3979950895908482e+00 + 4.7446221492880287e+00 2.1412558041751093e+00 1.6221569058125822e+00 + 5.0642584292428738e+00 1.9696787120543782e+00 1.8038018238588081e+00 + 5.2918657981031503e+00 1.8492593678677498e+00 1.9564319668086492e+00 + 5.3626341743359323e+00 1.8101644424164989e+00 2.1179815851331392e+00 + 5.2997203800326211e+00 1.7885118971744702e+00 2.3036203440482996e+00 + 5.5912803144753180e+00 1.7858481689417254e+00 2.1371770938773023e+00 + id 12224 + loc 3.4625688195228577e-01 4.2083868384361267e-01 1084 + blend 0.0000000000000000e+00 + interp 5.0379896883030428e-01:3.4561250719886494e-01:4.8911516465127480e-02:5.0379393084061597e-01:8.9071303683907566e-01:3.1595248930942404e-01:1.4537242382076838e+00:3.7091555300704532e-01:2.0058621301307391e+00:3.4082676737144213e-01:2.5178140792558144e+00:3.3960077672672800e-01:2.9998318320968078e+00:4.1399816554216778e-01:3.3683533513112924e+00 + CVs 20 + 4.0460539097766551e-01 4.2496034553150364e-01 2.6301908431270515e-01 + 7.5654418727101480e-01 7.9785990185070976e-01 4.9376189274325527e-01 + 1.1060818065587406e+00 1.1633148833887412e+00 7.1529603176321910e-01 + 1.4513406876676491e+00 1.5484918765760876e+00 9.7480320836647150e-01 + 1.7458069438945143e+00 1.9464316764098324e+00 1.3135666131102242e+00 + 1.9381259572748677e+00 2.3313713758470453e+00 1.7473281074801494e+00 + 1.9794751026888109e+00 2.6660680431718591e+00 2.2606374914122283e+00 + 1.8216054796692893e+00 2.9047797008164977e+00 2.8070745501871439e+00 + 1.4488372275376966e+00 2.9919610174933347e+00 3.2934726313071585e+00 + 9.5177802045739290e-01 2.9034581740399559e+00 3.6244587642152020e+00 + 4.6282452759157122e-01 2.6511976046685906e+00 3.8066032891361168e+00 + 8.6118033742074163e-02 2.2408951282105085e+00 3.9021980788274919e+00 + -1.1902545793960284e-01 1.7479311751868660e+00 3.9489925628768683e+00 + -2.3225355583887686e-01 1.2832850510788467e+00 3.9465222325330336e+00 + -3.6291208452588930e-01 8.7789539300582975e-01 3.8872294147225275e+00 + -5.5694971695997997e-01 5.6241971816018133e-01 3.7866595794800708e+00 + -8.1406313915673501e-01 3.7527894286005198e-01 3.6823149848851675e+00 + -1.0948899506724425e+00 2.8618384043870115e-01 3.5983673911358056e+00 + -1.3405449050424991e+00 1.2802090268173971e-01 3.5320049558454025e+00 + id 12225 + loc 6.3655000925064087e-01 3.1110422685742378e-02 1075 + blend 0.0000000000000000e+00 + interp 3.4696442870335853e-01:3.4696095905907154e-01:4.3243796989402172e-02:3.1743607205352092e-01:6.6952703329308083e-01:2.1177315153342174e-01:1.3255708143429712e+00:2.9424969306778520e-01:2.3940816772169731e+00:2.7820053615795876e-01:3.5910257756845523e+00 + CVs 20 + -1.5829335809623007e-02 2.6214212658269692e-01 2.8555850687697126e-01 + -2.5805092637612548e-02 5.3621871078912098e-01 5.2719037940243751e-01 + -2.6134861482822735e-02 8.1514952282977704e-01 7.3124194463716619e-01 + -2.1141911472133512e-02 1.0891205143052962e+00 9.0787803124679300e-01 + -1.9825975949179675e-02 1.3559088973823012e+00 1.0757194650663613e+00 + -2.6696570651105644e-02 1.6147118376636700e+00 1.2536657284258874e+00 + -3.4321006555028122e-02 1.8608687003631244e+00 1.4513749176273136e+00 + -3.3367060036131546e-02 2.0928474014336977e+00 1.6785265019355742e+00 + -4.7092430711516586e-02 2.3053590242513557e+00 1.9546756539674774e+00 + -1.3634128834878889e-01 2.4612726833728300e+00 2.2804233925638338e+00 + -3.3248353915371487e-01 2.5236510653921949e+00 2.6145019603613204e+00 + -6.1896204596769588e-01 2.4913712781139283e+00 2.9110533175423794e+00 + -9.3258111793431375e-01 2.3569389706821822e+00 3.1574195113827126e+00 + -1.1566975743521042e+00 2.0816797382987700e+00 3.3862758766064442e+00 + -1.2342864934150808e+00 1.6382079303496191e+00 3.6138847721135012e+00 + -1.2626758423902456e+00 1.0250261508923457e+00 3.7856708498308511e+00 + -1.4141608044680778e+00 3.0056608430828002e-01 3.8270246648219848e+00 + -1.8031110819537455e+00 -3.6500531970162164e-01 3.7339224990351072e+00 + -2.1878813029048025e+00 -7.4728168958577124e-01 3.6250768209318247e+00 + id 12226 + loc 1.9637279212474823e-01 3.3508488535881042e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5232806052446678e-01:2.6940636141853341e-01:1.6218194874035241e-01:2.6845714665138054e-01:1.0081072879639521e+00:3.5273134942387324e-01:1.8487558618303557e+00:4.5232353724386154e-01:2.0981500763113070e+00:2.9986492697987022e-01:2.9344936021085886e+00:4.4209055506195671e-01:3.4948709116060854e+00 + CVs 20 + -2.8909098298485852e-01 2.8534137295169398e-01 -1.7972989164774344e-01 + -5.6370263888869276e-01 5.6956234390043647e-01 -3.6378216776789141e-01 + -8.5486746978215256e-01 8.5595428443449517e-01 -5.5250555836687676e-01 + -1.1785541478496402e+00 1.1430345549224536e+00 -7.4026854039212364e-01 + -1.5401037378237041e+00 1.4227440169593166e+00 -9.1748447491732121e-01 + -1.9429700416135089e+00 1.6823389678653888e+00 -1.0746068500684867e+00 + -2.3867210533951768e+00 1.9068257600453336e+00 -1.2048573031369374e+00 + -2.8641314990910014e+00 2.0791552329986676e+00 -1.3077795927500730e+00 + -3.3614777388935826e+00 2.1829847099423891e+00 -1.3875814792890950e+00 + -3.8601645652716643e+00 2.2057199619388479e+00 -1.4532587993221748e+00 + -4.3384706537824549e+00 2.1429888108057646e+00 -1.5202597450002622e+00 + -4.7744652582449625e+00 2.0014641884746101e+00 -1.6080536568789452e+00 + -5.1453939160364763e+00 1.7956770621168705e+00 -1.7312084352264279e+00 + -5.4299874507354797e+00 1.5478455012545589e+00 -1.8945415015890419e+00 + -5.6141023621144734e+00 1.2848466680459913e+00 -2.0926770954294440e+00 + -5.6965235846232130e+00 1.0353595699732971e+00 -2.3118464915250838e+00 + -5.6926217810586852e+00 8.2627529475254879e-01 -2.5367620330709428e+00 + -5.6223869851432866e+00 6.6118377076310464e-01 -2.7608250085348072e+00 + -5.4605663983611219e+00 4.5912856203974317e-01 -3.0009524684516431e+00 + id 12227 + loc 2.9686918854713440e-01 6.6332238912582397e-01 403 + blend 0.0000000000000000e+00 + interp 4.4727662767327342e-01:3.8956223557126479e-01:4.5402712617429297e-01:4.2873762456516357e-01:1.1563372709294530e+00:2.6337000954271339e-01:2.0002080575538939e+00:4.4727215490699673e-01:2.5671693913087159e+00:3.8182963765286121e-01:3.0912178927302736e+00:3.0673417566548639e-01:3.8436464897768428e+00 + CVs 20 + 7.9974665562209127e-02 2.1316252388595108e-01 -2.1951762476980510e-01 + 1.2692039922025308e-01 4.2649977135816097e-01 -4.4408713843933567e-01 + 1.4201512744586675e-01 6.3577686100834585e-01 -6.7233861745481094e-01 + 1.2133695179449955e-01 8.4001601522162472e-01 -9.0350064472608482e-01 + 6.3161019428202736e-02 1.0341484442932136e+00 -1.1333969140436202e+00 + -3.4627547562285699e-02 1.2147521427027219e+00 -1.3566155202423327e+00 + -1.7290556839935323e-01 1.3783470347078839e+00 -1.5667106916469828e+00 + -3.4873348684872585e-01 1.5212503808753852e+00 -1.7568036587046896e+00 + -5.5755769842921976e-01 1.6403811417968228e+00 -1.9206852394854474e+00 + -7.9716665339415282e-01 1.7304554352238104e+00 -2.0535632874512375e+00 + -1.0653961945250443e+00 1.7835159063343269e+00 -2.1508653846513024e+00 + -1.3549505361388650e+00 1.7929663097086559e+00 -2.2074248023852454e+00 + -1.6535371009013331e+00 1.7575439821621808e+00 -2.2180649873048837e+00 + -1.9490084867031048e+00 1.6806839796859963e+00 -2.1781968569224914e+00 + -2.2310852452939169e+00 1.5682334753676548e+00 -2.0841704011488997e+00 + -2.4880094225918139e+00 1.4273066120203759e+00 -1.9352128624758020e+00 + -2.7015128064395655e+00 1.2633201736594417e+00 -1.7405752031418060e+00 + -2.8531839607575211e+00 1.0855863909687176e+00 -1.5223180641645306e+00 + -2.9234096971572026e+00 9.7728822484529410e-01 -1.3681325175067589e+00 + id 12228 + loc 9.5788963139057159e-02 2.9304137825965881e-01 416 + blend 0.0000000000000000e+00 + interp 3.5526574116778770e-01:3.0568107058975985e-01:1.2715004185760448e-01:2.9268198345896662e-01:9.9501482380766570e-01:2.2608079116753804e-01:1.6623455268960234e+00:3.5526218851037605e-01:2.0018421056890787e+00:3.3176344500380628e-01:3.1052012632783477e+00 + CVs 20 + -1.5311230681035165e-01 9.9796397243130566e-02 -4.3864791418111004e-01 + -2.7662139665582158e-01 1.6042960870965350e-01 -7.2832154429138829e-01 + -3.8045017745871634e-01 2.0615497470159558e-01 -9.5287645411609234e-01 + -4.8313397099582578e-01 2.5631618323463989e-01 -1.1686370067061622e+00 + -5.8317666707245286e-01 3.1108725052044295e-01 -1.3717575007552902e+00 + -6.8009200301446271e-01 3.7006004657853742e-01 -1.5596765237442902e+00 + -7.7436589085115881e-01 4.3258054690888287e-01 -1.7317851384402083e+00 + -8.6698363062646555e-01 4.9800218772456789e-01 -1.8892990465859165e+00 + -9.5888216513459645e-01 5.6563200274360503e-01 -2.0350200196010531e+00 + -1.0511343560381827e+00 6.3460239425072751e-01 -2.1743864253681169e+00 + -1.1450582173060435e+00 7.0370869105831224e-01 -2.3160970502675364e+00 + -1.2409735213584867e+00 7.7072863790960655e-01 -2.4681449681566852e+00 + -1.3375153369716717e+00 8.3253324105316040e-01 -2.6335932927159620e+00 + -1.4320022814766697e+00 8.8653035504071831e-01 -2.8119110207204812e+00 + -1.5204343323896323e+00 9.3168199272008101e-01 -3.0008972736884929e+00 + -1.5990180623540324e+00 9.6836465919470549e-01 -3.1965716356358684e+00 + -1.6669738703448136e+00 9.9662953979903512e-01 -3.3955526911218463e+00 + -1.7261280023005201e+00 1.0147883954051236e+00 -3.5962171469292716e+00 + -1.7712216710838986e+00 1.0394767160189387e+00 -3.7203218775921068e+00 + id 12229 + loc 9.2449523508548737e-02 5.3438752889633179e-01 1050 + blend 0.0000000000000000e+00 + interp 4.9534941828434031e-01:4.9534446479015748e-01:1.7991100716618025e-02:4.6111706102508376e-01:4.8872393723942920e-02:2.6014287589261453e-01:8.5131445152667240e-01:4.2238917105330998e-01:1.0707368460429851e+00:2.7658308931520420e-01:2.0746729245357960e+00:3.4254359833678222e-01:2.9469513293744223e+00 + CVs 20 + -2.3584227856015594e-01 4.7618641140360701e-01 -6.7245358043503389e-01 + -3.3731597295127491e-01 9.4270437851318400e-01 -1.2178713479565590e+00 + -3.1184877000842071e-01 1.4175703958194770e+00 -1.6531763882840140e+00 + -1.5932685284460590e-01 1.9036249767584559e+00 -1.9851556257748550e+00 + 1.3362910240074066e-01 2.3782722664142546e+00 -2.1977794989469470e+00 + 5.6296052254296969e-01 2.8022792174034001e+00 -2.2863166319186981e+00 + 1.1173768410035301e+00 3.1217766898929757e+00 -2.2603923384352047e+00 + 1.7716321573740565e+00 3.2638335611527758e+00 -2.1471401145742748e+00 + 2.4405989160254062e+00 3.1708525203466635e+00 -1.9836337689834775e+00 + 3.0086751516998960e+00 2.8809794969690716e+00 -1.7747361822613517e+00 + 3.4086787464208852e+00 2.4952824912249598e+00 -1.4930843770368996e+00 + 3.6348452748704454e+00 2.1088445628277310e+00 -1.1237301199805281e+00 + 3.7124813331997912e+00 1.8055311868053934e+00 -6.9166256934508186e-01 + 3.6793065952006847e+00 1.6296370775088163e+00 -2.4018641122363002e-01 + 3.5631767513674566e+00 1.5837070524165249e+00 1.9763279488877306e-01 + 3.3832263505694224e+00 1.6634599522340612e+00 5.8779316456453978e-01 + 3.1947105072534590e+00 1.8381758413212974e+00 8.8201936577441098e-01 + 3.1232770185182668e+00 1.9528512730730407e+00 1.0794778528810502e+00 + 2.8896643326153115e+00 2.4072275165789425e+00 1.0379081315026091e+00 + id 12230 + loc 2.4208375811576843e-01 1.3121542520821095e-02 397 + blend 0.0000000000000000e+00 + interp 4.1423482384898702e-01:2.5583253223504016e-01:3.7229939430213999e-01:2.8544961754358966e-01:1.0092928816746300e+00:3.1033533451290612e-01:2.0558539833334883e+00:3.9171620081433783e-01:2.7329142118803951e+00:3.9463197342275208e-01:3.1178976265910765e+00:4.1423068150074854e-01:3.8537889937719347e+00 + CVs 20 + -3.0609626886919072e-01 2.8495859295445147e-01 -9.4049567339007856e-01 + -5.5313581841407877e-01 3.6914448906992031e-01 -1.5475583483427160e+00 + -7.8350582997418017e-01 3.6970171982684541e-01 -2.0820389186413166e+00 + -1.0058029588028106e+00 3.3866446169752723e-01 -2.6444871980080178e+00 + -1.2126776025614809e+00 2.6694018523822061e-01 -3.2254302625062783e+00 + -1.4017080290186730e+00 1.4790397729625038e-01 -3.8160212596146268e+00 + -1.5758632176612868e+00 -2.1051214336673452e-02 -4.4081100132307105e+00 + -1.7394324398416914e+00 -2.4310261665805610e-01 -4.9932046343024812e+00 + -1.8944427153914765e+00 -5.2493327683610391e-01 -5.5587100983051627e+00 + -2.0447854783269008e+00 -8.7218668274237832e-01 -6.0849988852204211e+00 + -2.2018116828292600e+00 -1.2870119287634953e+00 -6.5500944394314944e+00 + -2.3758504797359725e+00 -1.7701387312928090e+00 -6.9404081083705140e+00 + -2.5644949683555058e+00 -2.3177000665583902e+00 -7.2518046970996943e+00 + -2.7580670297049776e+00 -2.9146815921680234e+00 -7.4808039661056736e+00 + -2.9501089218811769e+00 -3.5376089022084489e+00 -7.6214396622443559e+00 + -3.1325268334056435e+00 -4.1650906347690384e+00 -7.6681495981047192e+00 + -3.2917118864094057e+00 -4.7798265885221527e+00 -7.6203270443691355e+00 + -3.4251498788400738e+00 -5.3626572539979342e+00 -7.4942476630217953e+00 + -3.5762724682683373e+00 -5.9290290358782816e+00 -7.4275715602018000e+00 + id 12231 + loc 1.3843622058629990e-02 4.9252393841743469e-01 411 + blend 0.0000000000000000e+00 + interp 3.9174302010635348e-01:2.7672201531073948e-01:1.3781184600506713e-01:3.9173910267615242e-01:7.6077044185537701e-01:2.8005400414092868e-01:1.1544966876907061e+00:2.3925695178200590e-01:2.0033999019207691e+00:2.4922444064819196e-01:3.0004322760104469e+00:3.8171813285219197e-01:3.8984697820528948e+00 + CVs 20 + -1.5131260220269485e-01 2.5194666306385627e-01 -8.9007185462222882e-01 + -3.0236837487883717e-01 3.8620266467610970e-01 -1.5198191455636001e+00 + -4.6320599213923508e-01 4.9337028420528672e-01 -2.1108772326834959e+00 + -6.4047052778871671e-01 5.9208367097651393e-01 -2.7457625534885555e+00 + -8.3818080098761483e-01 6.4128934684660288e-01 -3.4152616398894189e+00 + -1.0725878281238828e+00 5.9184520035532928e-01 -4.0957549320390703e+00 + -1.3614899921089223e+00 4.0441111578330746e-01 -4.7508421513955676e+00 + -1.6985505150388309e+00 5.9396256100602729e-02 -5.3432776636979016e+00 + -2.0405627899565979e+00 -4.4262635332933087e-01 -5.8440558577648805e+00 + -2.3197082442702346e+00 -1.0741594021399035e+00 -6.2246622622347365e+00 + -2.4889076290479082e+00 -1.7671304153375711e+00 -6.4710581585155911e+00 + -2.5900226777133168e+00 -2.4555917091562041e+00 -6.6138728111506691e+00 + -2.7207630629516721e+00 -3.1220512159412594e+00 -6.6952319643782507e+00 + -2.9525610062112753e+00 -3.7505814471956054e+00 -6.7358650140514502e+00 + -3.3072886377012343e+00 -4.3024154107910162e+00 -6.7465086397310543e+00 + -3.7363869693973220e+00 -4.7080148001363940e+00 -6.7332614202046397e+00 + -4.1866132969501173e+00 -4.9544370962337716e+00 -6.7047400073439007e+00 + -4.6407653712364336e+00 -5.1049513226946654e+00 -6.6907065520501643e+00 + -5.0653630094642166e+00 -5.2456534421863790e+00 -6.7372859301468235e+00 + id 12232 + loc 2.9577979445457458e-01 9.8909503221511841e-01 1074 + blend 0.0000000000000000e+00 + interp 3.0222612570177765e-01:2.6661147581158140e-01:8.8274948169699652e-01:1.5017615668210843e-01:1.9836344636530820e+00:2.2629554903544968e-01:2.9732030619061409e+00:3.0222310344052067e-01:3.8372617863774039e+00 + CVs 20 + 2.5471503793669298e-01 3.6037160600180906e-01 -2.2627038517380968e-01 + 4.9055541261510105e-01 7.3089985641710076e-01 -4.3909284576318264e-01 + 7.2261349359517391e-01 1.1133071262603629e+00 -6.4072758584007550e-01 + 9.6134072035966545e-01 1.5098745909176527e+00 -8.3702182648039103e-01 + 1.2126362027062496e+00 1.9207969175145807e+00 -1.0407910461565553e+00 + 1.4750681590048629e+00 2.3395303841421380e+00 -1.2834142494236143e+00 + 1.7419167532251292e+00 2.7481450284569520e+00 -1.6250946543811045e+00 + 1.9954927834953209e+00 3.0817938710901052e+00 -2.1428485695049999e+00 + 2.1733591597893471e+00 3.2049759193052374e+00 -2.8390950113827658e+00 + 2.2156766480258976e+00 3.0483292259387196e+00 -3.5861125675113272e+00 + 2.1386329840759104e+00 2.6561171544250044e+00 -4.2714838852231800e+00 + 2.0200153820601949e+00 2.1163007687520610e+00 -4.8495741232201111e+00 + 1.9554695774258481e+00 1.5590870530180474e+00 -5.3336223425108580e+00 + 1.9754841855683134e+00 1.1628628230258620e+00 -5.7638222934773280e+00 + 2.0186140187202382e+00 1.0768065129132638e+00 -6.1401108848832395e+00 + 1.9800566015959977e+00 1.3539377974033546e+00 -6.3365547814446552e+00 + 1.7472197120794042e+00 1.8328030945083054e+00 -6.1139064239156546e+00 + 1.5260503803386576e+00 2.1946238075963320e+00 -5.8607510191588563e+00 + 1.6514527966610983e+00 2.7393142196294158e+00 -6.2837217346285001e+00 + id 12233 + loc 2.6710698008537292e-01 6.8182313442230225e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8870676602059587e-01:2.7789344693694407e-01:7.9953495744994074e-01:4.0880597775312849e-01:1.0922579397453660e+00:4.5065946074809476e-01:1.9292663820449520e+00:4.8870187895293571e-01:2.2469150736637236e+00:4.6603363003422205e-01:2.9312767686533436e+00:4.1886015659859505e-01:3.5401666750908714e+00:3.0974646253906502e-01:3.9964264766694284e+00 + CVs 20 + -1.4381101198068869e-01 1.6411984134020730e-01 2.9480069815560633e-01 + -2.1514459759125770e-01 2.3371178834740122e-01 4.1049103635517553e-01 + -2.6592112524274808e-01 2.8049168178533990e-01 4.6254106562780084e-01 + -3.1057188712482264e-01 3.3655203164641412e-01 5.1205595025472972e-01 + -3.4826743000173915e-01 4.0505252983439982e-01 5.5987277193725082e-01 + -3.7979445687605390e-01 4.8883027286519937e-01 6.0924806759061190e-01 + -4.0834737430207807e-01 5.9006178143028176e-01 6.6511461298546648e-01 + -4.3996758317999585e-01 7.0974276107900747e-01 7.3247754829943867e-01 + -4.8348980291469768e-01 8.4620165170073236e-01 8.1468374720258896e-01 + -5.4914837786389770e-01 9.9412487204590527e-01 9.1162390886777578e-01 + -6.4604402261588489e-01 1.1456119727043725e+00 1.0189502969477648e+00 + -7.8001038233621500e-01 1.2926088324698943e+00 1.1295129033354061e+00 + -9.5273605369763659e-01 1.4290703931948303e+00 1.2377309748722889e+00 + -1.1623732208977224e+00 1.5509794169348790e+00 1.3430151830339350e+00 + -1.4048565001450233e+00 1.6546223561156992e+00 1.4462023918584541e+00 + -1.6741414658945164e+00 1.7360159038325145e+00 1.5445340351444217e+00 + -1.9605389639586490e+00 1.7920982663705014e+00 1.6351077468332078e+00 + -2.2469179960845436e+00 1.8219954083614467e+00 1.7221836545519680e+00 + -2.4958817633429722e+00 1.8248708189222391e+00 1.8099974895575284e+00 + id 12234 + loc 8.3847630023956299e-01 7.7807295322418213e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9346864041470734e-01:4.9346370572830323e-01:6.1186199333327362e-03:3.5082399475514969e-01:5.7575965404486640e-01:4.2082229315523562e-01:1.2301043444481721e+00:3.2264410985075942e-01:1.9717900897140948e+00:3.4293463033019705e-01:2.7749734939783015e+00:3.1424157686934140e-01:3.4610530479623334e+00 + CVs 20 + 1.6686489284767464e-01 2.8878708456636409e-01 -2.2449660052815251e-01 + 3.3323771296972565e-01 5.7573498631364106e-01 -3.9341281577045289e-01 + 4.9271578802800281e-01 8.5049892206008382e-01 -5.4899070064249578e-01 + 6.4306366493035860e-01 1.1099847502555189e+00 -7.0904659073593090e-01 + 7.9008422428021363e-01 1.3592588962656476e+00 -8.7768105023500276e-01 + 9.4220356445042097e-01 1.5964998170404343e+00 -1.0757548376244754e+00 + 1.0983217329602386e+00 1.7982308254544406e+00 -1.3397775775103353e+00 + 1.2460144606640060e+00 1.9338429187305066e+00 -1.6888200791029520e+00 + 1.3695499121228563e+00 1.9847941369195159e+00 -2.1158841825845554e+00 + 1.4573263601030653e+00 1.9466540395610596e+00 -2.6030508768117198e+00 + 1.5082391482816548e+00 1.8258293173323870e+00 -3.1280962711885718e+00 + 1.5247472129416013e+00 1.6327768059935774e+00 -3.6616850816376378e+00 + 1.4981037360156182e+00 1.3853582434184859e+00 -4.1627976820795425e+00 + 1.4034283394763882e+00 1.1313189242618991e+00 -4.5808704232706594e+00 + 1.2210197866526173e+00 9.5474132363287390e-01 -4.8759617375298649e+00 + 9.7477866939634294e-01 9.2542453844442663e-01 -5.0329494400636134e+00 + 7.2970996841703195e-01 1.0551902232802226e+00 -5.0624277940368883e+00 + 4.7021455540245510e-01 1.2409779902825533e+00 -5.0741685415548439e+00 + -8.3082699030774365e-02 1.2230930618436355e+00 -5.3638588516114849e+00 + id 12235 + loc 1.3431132771074772e-02 6.1825078725814819e-01 372 + blend 0.0000000000000000e+00 + interp 3.6299002815245174e-01:2.6260093399437423e-01:8.4655602345489966e-02:8.5387742905902023e-02:1.4160243003429203e+00:3.6298639825217022e-01:2.1650699571553846e+00:2.8103522184678770e-01:3.1067132325439917e+00 + CVs 20 + -3.3319167553601592e-01 7.6168309453681871e-01 -3.1589131024161249e-01 + -6.4939905086045613e-01 1.4876054396467659e+00 -6.4508489744600750e-01 + -8.8371885973293041e-01 2.1373488525368813e+00 -9.8140786723918549e-01 + -9.2752400033569504e-01 2.6238668671377638e+00 -1.3047067257613187e+00 + -7.8088537956693127e-01 2.9184664635161637e+00 -1.5772665490975080e+00 + -5.1023374174820879e-01 3.0928201011380940e+00 -1.7973312855961820e+00 + -1.5535409857871407e-01 3.1836049953490244e+00 -1.9602831129009137e+00 + 2.6184442194694180e-01 3.1990207899570029e+00 -2.0598880262612154e+00 + 7.2149198553368854e-01 3.1428103014731241e+00 -2.0918458436224299e+00 + 1.2173645448386354e+00 3.0133160649316491e+00 -2.0544473850295186e+00 + 1.7289190667073859e+00 2.7970042358607241e+00 -1.9483100801375186e+00 + 2.1683587504171378e+00 2.5033783631138973e+00 -1.7939176700695714e+00 + 2.4557948585514220e+00 2.1849089476701979e+00 -1.5992116625092068e+00 + 2.5091507943492140e+00 1.8601714135989311e+00 -1.3140693434125119e+00 + 2.3484447407857667e+00 1.4036553490542190e+00 -8.3524376872822492e-01 + 2.5041412237110170e+00 8.7701993459136207e-01 -2.9877602882756310e-01 + 3.0594111854819599e+00 5.8437143781956546e-01 -9.5404207824410253e-02 + 3.7234446436427842e+00 6.3929888322866035e-01 -4.0743448664819443e-01 + 4.2953485731021424e+00 1.0843278448036942e+00 -1.2934923991843763e+00 + id 12236 + loc 3.3004274964332581e-01 4.2083868384361267e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7811550842540779e-01:3.2654363613486664e-01:6.4218323245379128e-02:4.7811072727032355e-01:8.6696774360086692e-01:2.7880726733692446e-01:1.4588537281780631e+00:3.2907449464351268e-01:2.5141226819046931e+00:3.6161179213834377e-01:3.3587706595989495e+00 + CVs 20 + 3.0921899789003693e-01 4.0011346050418850e-01 2.2290194590264678e-01 + 5.3192718451067234e-01 7.5749370467300814e-01 4.4622647675567051e-01 + 7.2458751552998757e-01 1.1032502033493055e+00 6.9395387863422786e-01 + 8.9719969914853226e-01 1.4446645586174460e+00 9.8370090707271463e-01 + 1.0288906415916432e+00 1.7683720257433273e+00 1.3271376379821700e+00 + 1.0969141062670336e+00 2.0554267891670897e+00 1.7295269741224226e+00 + 1.0789384907640827e+00 2.2810908145445188e+00 2.1851464101513907e+00 + 9.6072729162412396e-01 2.4183584253615589e+00 2.6737196938564947e+00 + 7.4891865524709744e-01 2.4431456604630251e+00 3.1636871798323121e+00 + 4.8519752261685767e-01 2.3459686090894882e+00 3.6248624563282541e+00 + 2.2591712460763846e-01 2.1365953794406685e+00 4.0464968516669266e+00 + 1.4897904377100535e-02 1.8295800560959528e+00 4.4302959250152973e+00 + -1.0691087160186144e-01 1.4470711537546088e+00 4.7757872787942413e+00 + -8.8663880033723566e-02 1.0392302017063952e+00 5.0815548977156482e+00 + 8.9745233185845152e-02 6.9227610981387944e-01 5.3439213670717338e+00 + 3.6490108495899792e-01 5.0343268039862621e-01 5.5691298817971564e+00 + 6.3831174469492669e-01 5.2733651109485102e-01 5.7628253414781518e+00 + 8.6820986116033527e-01 6.5523447521592804e-01 5.9275945826185339e+00 + 1.1968293243512744e+00 4.6425477942829585e-01 6.2107693019470265e+00 + id 12237 + loc 6.5734529495239258e-01 2.1799936890602112e-01 1048 + blend 0.0000000000000000e+00 + interp 3.0698669659275418e-01:2.6106501432716650e-01:7.2692696721864647e-01:3.0698362672578827e-01:1.2103329990843421e+00:2.7287285282434631e-01:2.0038660558983326e+00:2.9635290497483219e-01:2.8868241093673959e+00:2.5280587320943620e-01:3.2193684642472902e+00:2.6749621264411827e-01:3.9743798203221230e+00 + CVs 20 + -6.9521548764582136e-02 4.7074109712726103e-01 3.3946951536701064e-01 + -1.4669293180837339e-01 9.4877744493465765e-01 6.3852608301551195e-01 + -2.8390405567206295e-01 1.4398222499877782e+00 8.7282830716834237e-01 + -5.2925379783118864e-01 1.9274614826489951e+00 1.0323010637065708e+00 + -9.1429956585077732e-01 2.3576205317983865e+00 1.1346456679032537e+00 + -1.4288999118763899e+00 2.6528339621353481e+00 1.2468310456290235e+00 + -2.0050999301106502e+00 2.7243440960043159e+00 1.4493674952063531e+00 + -2.5234682651944444e+00 2.5267107875204675e+00 1.7413070940208435e+00 + -2.9245670257228182e+00 2.1319847968391112e+00 2.0421831501640928e+00 + -3.2473274211295893e+00 1.6588589140390995e+00 2.2941039093147584e+00 + -3.5538928779134071e+00 1.2288912260430582e+00 2.4802577371056214e+00 + -3.8601212395742173e+00 9.5353068642492822e-01 2.6308919137340210e+00 + -4.1303407739471520e+00 8.5899831061434395e-01 2.8097022456845999e+00 + -4.3893281989515929e+00 8.3135152324800576e-01 3.0790802523418597e+00 + -4.6981485050417167e+00 7.7747481951733344e-01 3.4889012832092150e+00 + -5.0656571498110363e+00 6.4226781178679548e-01 3.9737636920880335e+00 + -5.4592302263474091e+00 3.9701402176222123e-01 4.3017019748678127e+00 + -5.8179390743721582e+00 1.2990155781201862e-01 4.4030971485234662e+00 + -6.2266207961758910e+00 -2.5844922537833842e-01 4.5782912544523953e+00 + id 12238 + loc 8.8026523590087891e-01 5.9744650125503540e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0151535085868693e-01:4.5772135672073966e-01:1.2192260434491509e-03:3.4248250012787385e-01:5.9550643291382555e-01:5.0151033570517833e-01:1.0005076634863945e+00:3.6576575987602344e-01:1.5726650626611289e+00:3.4482357139092373e-01:2.4932903576276044e+00:4.4680257450042904e-01:2.9926851196166426e+00:2.9049850313489822e-01:3.5012961365542301e+00 + CVs 20 + 1.5470714365549998e-01 2.8166422460519902e-01 -1.1085038621685675e-01 + 3.0525778769672518e-01 5.7816916666798246e-01 -2.1388796433082355e-01 + 4.6046988596151628e-01 8.7774779671463521e-01 -3.3951117499302663e-01 + 6.2414993304526156e-01 1.1670675308279104e+00 -5.0894334236053007e-01 + 7.9684150258024711e-01 1.4355533558541600e+00 -7.3438510394359935e-01 + 9.7565303701988304e-01 1.6669437152939470e+00 -1.0243931696811923e+00 + 1.1530492066145821e+00 1.8411580013062894e+00 -1.3798151168836839e+00 + 1.3152627853429337e+00 1.9393531079831026e+00 -1.7914870160918570e+00 + 1.4416044716377983e+00 1.9480043076383740e+00 -2.2417184171472178e+00 + 1.5105458541150070e+00 1.8612163508458150e+00 -2.7059360444392930e+00 + 1.5079730379085627e+00 1.6816499359826642e+00 -3.1534601903686985e+00 + 1.4303824184318064e+00 1.4195456757012348e+00 -3.5499001055374837e+00 + 1.2933691816918158e+00 1.1046936100910094e+00 -3.8613219514607642e+00 + 1.1369844324362932e+00 8.0982370016739069e-01 -4.0687053314259831e+00 + 1.0066767056798072e+00 6.2465539434184159e-01 -4.1764908248990071e+00 + 9.1652201618187745e-01 5.5342894804032827e-01 -4.2097050791155546e+00 + 8.5961493634456287e-01 5.3314904305228539e-01 -4.1655034628195651e+00 + 8.0422538924738718e-01 4.1836384582881836e-01 -3.9889338197624875e+00 + 7.9908970528714185e-01 6.3328595511331631e-01 -4.0856755897064332e+00 + id 12239 + loc 9.5371317863464355e-01 9.5616680383682251e-01 416 + blend 0.0000000000000000e+00 + interp 6.3539068956753730e-01:6.0410715700034168e-01:1.3729392297289522e-01:4.2021272051374914e-01:9.6898324317916817e-01:2.6493825848128083e-01:2.5014636003848061e+00:6.3538433566064167e-01:2.8891230986445291e+00:4.2864587564802814e-01:3.0731340379226575e+00:4.8407074685919194e-01:3.9591117502404414e+00 + CVs 20 + 9.1961319003032360e-01 1.6504641054720567e-01 -1.8628255631337942e-01 + 1.5138741145383128e+00 1.7440911458262065e-01 -3.5386709312488751e-01 + 2.0350632901531998e+00 1.3893875158251290e-01 -4.8904325357968559e-01 + 2.5785630167882916e+00 9.9829780334117268e-02 -5.8504490401090492e-01 + 3.1336527374572114e+00 5.2765811015819730e-02 -6.3515792663423443e-01 + 3.6898297552402655e+00 -6.7013600400924744e-03 -6.3286063674937398e-01 + 4.2361551794203560e+00 -8.3545853936031644e-02 -5.7472009567981719e-01 + 4.7622519489273545e+00 -1.8378379170415438e-01 -4.6270808281632209e-01 + 5.2585455647666830e+00 -3.1303957384819348e-01 -3.0196157493626463e-01 + 5.7158042604090360e+00 -4.7519041347861157e-01 -9.9610629495716085e-02 + 6.1306467602548196e+00 -6.7919495906954119e-01 1.2881750761082827e-01 + 6.5122541774915002e+00 -9.4969597682321960e-01 3.5245984011972337e-01 + 6.8655495156393380e+00 -1.3100869492176104e+00 5.3328491319322546e-01 + 7.1731690958540977e+00 -1.7461183225052495e+00 6.5255396734351834e-01 + 7.4194909799592059e+00 -2.2195236789980921e+00 7.1827800149505405e-01 + 7.6024233925259805e+00 -2.7037342155076560e+00 7.3840694759352865e-01 + 7.7258381149121576e+00 -3.1828791818078450e+00 7.1211913042724972e-01 + 7.7973426121999836e+00 -3.6370896592646735e+00 6.3599123000434721e-01 + 7.8598849391840853e+00 -3.9790820376314926e+00 6.1206663928308858e-01 + id 12240 + loc 2.7435263991355896e-01 9.7575426101684570e-02 1084 + blend 0.0000000000000000e+00 + interp 4.6058527661927329e-01:3.2570076528393926e-01:1.7627358514531799e-01:3.0364058445933323e-01:1.1819764906138670e+00:4.4827739961216334e-01:1.8229138026254925e+00:4.4741740426753590e-01:2.0223202465830612e+00:4.6058067076650711e-01:2.5485116435625166e+00:3.1285261084827160e-01:3.0000001837929946e+00:4.4298895185748793e-01:3.7098187922928294e+00 + CVs 20 + 3.8395026791888692e-01 4.0220947835564896e-01 2.0050075145631263e-01 + 7.0374733567585690e-01 7.4711460742899427e-01 3.3342945439224680e-01 + 1.0292815176401926e+00 1.0831817150567984e+00 4.0770297521065080e-01 + 1.3441131087811788e+00 1.4649490242296412e+00 5.0778416485291678e-01 + 1.5528057501169008e+00 1.8863379926156112e+00 7.1865058273510107e-01 + 1.5697272104850306e+00 2.2792694044335273e+00 1.0486286849173905e+00 + 1.3476623500346201e+00 2.5610733076508465e+00 1.4122060370822556e+00 + 8.9655929506528720e-01 2.6722990207885369e+00 1.6203335656404414e+00 + 4.2002264036293524e-01 2.6360632918914240e+00 1.5227491440164584e+00 + 8.0670188080856020e-02 2.5575115938272859e+00 1.2767032031432892e+00 + -1.8960128056482839e-01 2.4411866445415331e+00 9.8063774417668503e-01 + -4.0687324521824098e-01 2.2539271612615401e+00 6.2593607542113927e-01 + -5.6307559555363451e-01 2.0201849833460876e+00 2.7016158902585369e-01 + -7.0758102885479834e-01 1.8198572070102776e+00 2.1036207046164518e-02 + -8.5661354759413499e-01 1.7389898029122763e+00 -5.1578150763231807e-02 + -8.8214526107832891e-01 1.8560020932854129e+00 8.1858448828998204e-02 + -3.8877933505695006e-01 2.1086876205263292e+00 4.0169147528174143e-01 + 4.4706347556032022e-01 1.9402944247903320e+00 5.2161780844837347e-01 + 3.7897771453005102e-01 2.0232558961659590e+00 6.1972506070642530e-01 + id 12241 + loc 6.1182463169097900e-01 5.5967384576797485e-01 411 + blend 0.0000000000000000e+00 + interp 3.7614138309154616e-01:3.7161463676957673e-01:5.3815196078583760e-02:3.2748048357065856e-01:1.0138942758989276e+00:3.2304103863327299e-01:1.6375467796115113e+00:3.4139381493485549e-01:2.2990522930907060e+00:3.7613762167771525e-01:2.9950783663554938e+00:2.9825943441597857e-01:3.5571177685328248e+00 + CVs 20 + 8.0524212747609059e-01 1.8798774440593830e-01 -1.4950776363020413e-01 + 1.4071602654157365e+00 2.6058697507741163e-01 -2.6198823437028473e-01 + 1.9710579912567556e+00 2.9797623625893632e-01 -3.3533402946664320e-01 + 2.5592384855926325e+00 3.2779060499226476e-01 -3.6487507246484663e-01 + 3.1565065832138770e+00 3.4083409700739575e-01 -3.4866689813609275e-01 + 3.7487249429288951e+00 3.2864377875360118e-01 -2.9372002898126343e-01 + 4.3249162472227498e+00 2.8194681657071330e-01 -2.1141023054940589e-01 + 4.8788921366870515e+00 1.8846200213155817e-01 -1.1293381778351502e-01 + 5.4106130466998623e+00 3.2833738836357762e-02 -1.0068085673213267e-02 + 5.9112525386775889e+00 -1.9781854078361927e-01 8.3162432305289524e-02 + 6.3569859419683237e+00 -5.0276683076468220e-01 1.5601956882331436e-01 + 6.7244555211393600e+00 -8.6267118405229737e-01 2.0865875636322462e-01 + 7.0092567880462102e+00 -1.2542851567305067e+00 2.4825288594593709e-01 + 7.2217121095914667e+00 -1.6647629866117564e+00 2.8128978418957395e-01 + 7.3702217752302639e+00 -2.0854398180704234e+00 3.0635214394480326e-01 + 7.4575223517790015e+00 -2.5027500904591879e+00 3.1690924731313830e-01 + 7.4882056957455001e+00 -2.9050222807890318e+00 3.0947969822702159e-01 + 7.4710837374114440e+00 -3.2966515748844385e+00 2.8089247319567900e-01 + 7.4254297183130920e+00 -3.6758419786525742e+00 2.2802539127684396e-01 + id 12242 + loc 1.2077065557241440e-01 8.7641185522079468e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4392382019037152e-01:4.0239839268594757e-01:4.2436744847926711e-01:4.4391938095216965e-01:9.8291165223541366e-01:3.5235885980514980e-01:1.4399815181078159e+00:2.9831047863811205e-01:2.0564879100394453e+00:3.3398666664735227e-01:2.8528553602437996e+00:2.6159115176327880e-01:3.7100123027962995e+00 + CVs 20 + -1.6839467055880586e-01 1.6407545939121793e-01 2.7325320617301141e-01 + -2.8077169920465256e-01 2.2971401395419133e-01 3.8926217758270654e-01 + -3.6032720895465592e-01 2.4581828093200786e-01 4.2944135796766025e-01 + -4.2848968236264684e-01 2.5033547085905022e-01 4.6490866729568603e-01 + -4.8777967729053723e-01 2.4768176063696751e-01 4.9492385750863588e-01 + -5.4626754705232250e-01 2.4047868194451022e-01 5.1836518255254693e-01 + -6.1572498736889336e-01 2.2712255371216797e-01 5.3297103327606166e-01 + -7.0713186819392226e-01 2.0195176594331193e-01 5.3638263512199080e-01 + -8.2795404068246470e-01 1.5736558180876800e-01 5.2799976369433632e-01 + -9.8044266584315487e-01 8.6709938866117664e-02 5.0949617156594951e-01 + -1.1601127031059624e+00 -1.3138214515925811e-02 4.8512848903965278e-01 + -1.3585731491455948e+00 -1.4342924167171378e-01 4.5960125234807209e-01 + -1.5762705364156979e+00 -3.1292365410540479e-01 4.3543599222378537e-01 + -1.8301137096046398e+00 -5.3914405618389738e-01 4.1655980420275895e-01 + -2.1358052947150261e+00 -8.2344701253433616e-01 4.1412002867213360e-01 + -2.4862776432223201e+00 -1.1360309764589376e+00 4.4193936097561853e-01 + -2.8588903154005521e+00 -1.4427073442161138e+00 5.0656025337582400e-01 + -3.2299968478851104e+00 -1.7234167130983495e+00 6.0730793509326197e-01 + -3.4674526367040612e+00 -1.9282676865798867e+00 6.9295337657018985e-01 + id 12243 + loc 8.5304397344589233e-01 1.3297057151794434e-01 406 + blend 0.0000000000000000e+00 + interp 4.0204431734416346e-01:2.9838179506737322e-01:3.3989355008369382e-01:4.0204029690099002e-01:8.6103190171521737e-01:2.7705242440239902e-01:1.3755557752654870e+00:2.6583359802734147e-01:2.1177806011810301e+00:2.7074766060223288e-01:2.9928223735624213e+00:3.1403571937421043e-01:3.9736922402478889e+00 + CVs 20 + -1.0282947450125474e-01 1.7596286454046917e-01 3.4238621950458889e-03 + -1.6203878513720102e-01 3.0902423393458300e-01 2.4242306556256921e-03 + -2.1031081922988859e-01 4.2213017362273897e-01 8.7467615678639005e-03 + -2.6662847940208578e-01 5.2931228189420376e-01 3.2431077465931435e-02 + -3.3051835734536994e-01 6.2976932389707929e-01 7.1479731237681615e-02 + -4.0128056561330028e-01 7.2309013103833075e-01 1.2352529085373319e-01 + -4.7879569625904728e-01 8.0952107078085356e-01 1.8602672993714181e-01 + -5.6413664274018016e-01 8.8981891652270195e-01 2.5635241901105854e-01 + -6.5839679580548727e-01 9.6465064547770363e-01 3.3136805917475470e-01 + -7.5925317284210281e-01 1.0337383213008695e+00 4.0706142097943787e-01 + -8.6185028582250744e-01 1.0962845294552759e+00 4.8061702184010535e-01 + -9.6574864406247607e-01 1.1518054364639567e+00 5.5338263737661275e-01 + -1.0774150294093054e+00 1.1993889486048583e+00 6.3103646700698257e-01 + -1.2018122185632649e+00 1.2376807744182796e+00 7.1866039554790517e-01 + -1.3358394532293882e+00 1.2670308609271845e+00 8.1288661322718592e-01 + -1.4731096525561302e+00 1.2892589813785704e+00 9.0771480462265375e-01 + -1.6140922228682333e+00 1.3049157193436265e+00 1.0017157645665633e+00 + -1.7669359350669886e+00 1.3115784214759771e+00 1.0967945553943090e+00 + -1.9302891172799250e+00 1.3090977784664530e+00 1.1894836164250577e+00 + id 12244 + loc 6.4214968681335449e-01 2.9857796430587769e-01 403 + blend 0.0000000000000000e+00 + interp 4.2172346893373891e-01:3.9732834125422917e-01:4.0001264116518354e-01:4.2171925169904961e-01:9.7159590508334248e-01:3.5041018977026811e-01:1.8136124572222307e+00:2.7212631365757622e-01:2.6122059005065443e+00:3.6099635407458164e-01:3.0276153691705705e+00:4.1588270739838495e-01:3.9276122795288755e+00 + CVs 20 + -5.5792659107234362e-02 -3.3830732158553131e-03 4.4523704810467551e-02 + -1.1857345163362719e-01 1.9324930816272401e-05 1.0851363928742276e-01 + -1.8985510116663812e-01 3.6855150414882909e-02 2.0709736948988494e-01 + -2.6100534114305990e-01 9.3577280242963468e-02 3.1377507996910597e-01 + -3.3099320657661224e-01 1.7301285685605183e-01 4.2547345469273540e-01 + -3.9618396272058259e-01 2.7718505271541910e-01 5.4070680526027937e-01 + -4.4969902567769066e-01 4.0787762603031136e-01 6.5988788983336299e-01 + -4.7972857303949973e-01 5.6853527523791891e-01 7.8560991000949665e-01 + -4.6651810721929954e-01 7.6052452876092613e-01 9.2127635915255190e-01 + -3.8778203257705390e-01 9.7192419246641859e-01 1.0659876897187432e+00 + -2.3410304262540144e-01 1.1778318881564855e+00 1.2112799736280702e+00 + -1.2379150924211935e-02 1.3565002864291529e+00 1.3453713486130296e+00 + 2.6512334671560789e-01 1.4964679817138051e+00 1.4583713841809689e+00 + 5.8779829675665685e-01 1.5923490144692298e+00 1.5429847655887492e+00 + 9.4755548180964033e-01 1.6419979609195141e+00 1.5908469393824023e+00 + 1.3398713522484766e+00 1.6450411034273422e+00 1.5896892901673030e+00 + 1.7642333217549890e+00 1.5981007999943571e+00 1.5225453742545074e+00 + 2.2063746267222912e+00 1.4910694304693712e+00 1.3730665975193073e+00 + 2.4884846591543472e+00 1.3608405636538108e+00 1.3170131800795268e+00 + id 12245 + loc 6.3813769817352295e-01 9.7712808847427368e-01 261 + blend 0.0000000000000000e+00 + interp 4.1043437030696395e-01:4.1043026596326088e-01:1.6185065780041419e-02:3.4123789926437609e-01:8.2589875749407282e-01:2.7931140368183877e-01:1.3730352395651135e+00:3.3801008109616715e-01:2.1897044107088193e+00:4.0768347379523434e-01:2.8958063511711081e+00:3.8958551936062530e-01:3.2094887247054018e+00 + CVs 20 + -8.1084408368350758e-01 4.8997593498888170e-01 -6.5605616721066029e-01 + -1.5442459225917144e+00 7.8791733290960553e-01 -1.0581123378303405e+00 + -2.2861212266802484e+00 9.3043793475071990e-01 -1.2619046141537900e+00 + -2.9977546988343273e+00 1.0149306474186743e+00 -1.3576915226866135e+00 + -3.6449920284296278e+00 1.0933782433457142e+00 -1.4281383931204781e+00 + -4.2558517214125455e+00 1.1502023553866372e+00 -1.5328830569762157e+00 + -4.8687678470272866e+00 1.1545548569591391e+00 -1.7140679115231479e+00 + -5.4927475963117871e+00 1.0885054833406769e+00 -2.0070866498311029e+00 + -6.1174515605137225e+00 9.4199656998249837e-01 -2.4304223726698271e+00 + -6.7403280959134912e+00 7.0784969648321061e-01 -2.9600909678758720e+00 + -7.3508832471239298e+00 3.7461825688350991e-01 -3.5447641715972491e+00 + -7.9074418173955614e+00 -7.7978752715769595e-02 -4.1369836080872400e+00 + -8.3498030845531854e+00 -6.6167270325650485e-01 -4.7087046943783761e+00 + -8.6123813903419730e+00 -1.3698574868479123e+00 -5.2492750658280487e+00 + -8.6637270678402185e+00 -2.1706214670058355e+00 -5.6756012921628791e+00 + -8.6792785698714265e+00 -2.9206894638807950e+00 -5.7835055934484902e+00 + -8.9306267923413571e+00 -3.3538724288391091e+00 -5.4819086152991812e+00 + -9.2766887222721977e+00 -3.4840861295401715e+00 -5.1192146960873117e+00 + -9.3530704827646112e+00 -4.0594910120862746e+00 -5.0449842252973038e+00 + id 12246 + loc 5.0845336914062500e-01 3.9738589525222778e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5647902506452320e-01:3.5034538360287509e-01:5.7418182879145196e-01:4.5647446027427258e-01:1.0701901832357503e+00:2.6512365254886017e-01:1.7300497432691797e+00:3.3164626501144340e-01:2.6918256048833999e+00:3.7975267627086307e-01:3.0277762827641146e+00:2.6629844760776467e-01:3.7530985728710373e+00 + CVs 20 + 1.2826309705634004e-03 2.5068513625111322e-01 2.2932489432291628e-01 + -3.3398190859954546e-03 4.8319576432761746e-01 4.3997514189783871e-01 + 1.0498665972707988e-04 7.0708102643825532e-01 6.3544311129814401e-01 + 1.2042220575386731e-02 9.2989786909094641e-01 8.2629366190895803e-01 + 2.1762751583685347e-02 1.1510765881144100e+00 1.0247409764367075e+00 + 2.8644863696341671e-02 1.3657229619492561e+00 1.2308954516058117e+00 + 4.0782194994668952e-02 1.5727744356042690e+00 1.4375273709915253e+00 + 6.3591573500517140e-02 1.7785589337741419e+00 1.6408344844850595e+00 + 9.2783438315580669e-02 1.9932392281583229e+00 1.8425025312674106e+00 + 1.1876085443271256e-01 2.2264359827181459e+00 2.0540534838344886e+00 + 1.3671699238197954e-01 2.4738786827534507e+00 2.3063347723979364e+00 + 1.5170694167659038e-01 2.6955269908989536e+00 2.6337979518697656e+00 + 1.7915900742188096e-01 2.8294645832586842e+00 3.0383826191352834e+00 + 2.2827206543357925e-01 2.8362782873731343e+00 3.4888037328300383e+00 + 2.7895546534739024e-01 2.7205836429840393e+00 3.9483600958062106e+00 + 2.9313993003974093e-01 2.5195056875207098e+00 4.3866343418413383e+00 + 2.5085967607944459e-01 2.2742971783635135e+00 4.7876126356244209e+00 + 1.8360172887983173e-01 1.9867755407536378e+00 5.1642738022649715e+00 + 1.9044651239721133e-01 1.6543907668611251e+00 5.4743016228632797e+00 + id 12247 + loc 9.4645875692367554e-01 2.9791033267974854e-01 1068 + blend 0.0000000000000000e+00 + interp 4.9686150059803397e-01:2.6400519077397755e-01:5.8818634338111009e-01:4.9685653198302798e-01:1.3430702486450334e+00:3.1149281816045143e-01:1.9801912927068575e+00:4.0657619908663067e-01:2.8892615264183439e+00:2.6250114085721654e-01:3.8136483781467390e+00 + CVs 20 + -9.1373282658375021e-02 4.5029744183145232e-01 1.8576203926042628e-01 + -2.0550919451485694e-01 8.8651618265639398e-01 3.2820939904603219e-01 + -3.5773203255557223e-01 1.3041527301725884e+00 4.2543008073671618e-01 + -5.6179067483239364e-01 1.6928982065873956e+00 4.8383346486945517e-01 + -8.2864662190957084e-01 2.0339909031631729e+00 5.1381294541592537e-01 + -1.1594943176539410e+00 2.3061773901044584e+00 5.3152717107811354e-01 + -1.5392511483818594e+00 2.4927724948417502e+00 5.5931692777418096e-01 + -1.9338288512920458e+00 2.5857256471868197e+00 6.1782275685166432e-01 + -2.3075400383090492e+00 2.5951115556325419e+00 7.1720501626332744e-01 + -2.6475055905520883e+00 2.5459766079119124e+00 8.6377080123105876e-01 + -2.9397048182923871e+00 2.4473738370597640e+00 1.0638067382304341e+00 + -3.1253486927004950e+00 2.2842034229999779e+00 1.2848687399957972e+00 + -3.1735601332926837e+00 2.0680607924634069e+00 1.4775531261171668e+00 + -3.1049644397640961e+00 1.8429921994738774e+00 1.6278496294044924e+00 + -2.9422272906525380e+00 1.6709582279420589e+00 1.7296381873994255e+00 + -2.6879391465846121e+00 1.5872833114409173e+00 1.7730163199489335e+00 + -2.3455666298601088e+00 1.5642382675935780e+00 1.7521606145880375e+00 + -1.9086070428383970e+00 1.5221716826155387e+00 1.6293965003192110e+00 + -1.7079818443866035e+00 1.4665227218676851e+00 1.5650342709831162e+00 + id 12248 + loc 1.8623629212379456e-01 7.5902831554412842e-01 1074 + blend 0.0000000000000000e+00 + interp 3.2805860212153476e-01:2.7748075569326591e-01:4.9251691157648270e-01:2.7499541714523046e-01:1.5551258436521120e+00:3.2805532153551353e-01:2.4483839882580889e+00:2.6572602545746188e-01:3.2210259372381076e+00 + CVs 20 + 5.4701804191241724e-02 3.7298435076165126e-01 -5.5548084223070525e-02 + 1.3091374426393718e-01 7.5882142019392274e-01 -1.2604786748731051e-01 + 2.2611964629087672e-01 1.1440624830468646e+00 -2.0243807879169703e-01 + 3.4566966939805149e-01 1.5286359057089804e+00 -2.7640631738217480e-01 + 5.1229047057843302e-01 1.9347762336727790e+00 -3.4525880574865309e-01 + 7.5291209774824619e-01 2.3893588087371542e+00 -4.4582389998048938e-01 + 1.0672910617644848e+00 2.8795673973152787e+00 -6.7449314705762775e-01 + 1.4258034722797324e+00 3.3316151025390361e+00 -1.1311884342284404e+00 + 1.7663812657830882e+00 3.5906301560390324e+00 -1.8272843056136276e+00 + 2.0159872907521192e+00 3.5314916126904836e+00 -2.6067057345851326e+00 + 2.1656725521321838e+00 3.1972475022861180e+00 -3.2916386965396227e+00 + 2.2612870899832775e+00 2.7231334088612225e+00 -3.7896906965525785e+00 + 2.3641306390273655e+00 2.2547236462624789e+00 -4.0906800275467097e+00 + 2.4995216946122443e+00 1.8965990783054900e+00 -4.2425031286223893e+00 + 2.6394443777125778e+00 1.6958605494954875e+00 -4.2869216012520450e+00 + 2.7307334559178011e+00 1.6301950689780897e+00 -4.2125641936296683e+00 + 2.7356684933235962e+00 1.5656596913316938e+00 -3.9591798750200273e+00 + 2.7492241378100211e+00 1.4143849531673467e+00 -3.7439402248136981e+00 + 2.8683203375327411e+00 1.7427695406679955e+00 -3.9346887373629977e+00 + id 12249 + loc 1.5064124763011932e-01 5.4227370023727417e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7002501697965260e-01:2.7512916189253317e-01:2.5988898987793740e-01:3.3166649762366773e-01:9.8509524520699454e-01:3.2109296422737882e-01:1.9172089566546215e+00:3.6398284563651545e-01:2.2627858006129573e+00:4.7002031672948280e-01:2.8421048047660049e+00:3.0840979948589931e-01:3.4790290832443924e+00 + CVs 20 + 1.4946677791835408e-01 3.4118468763105803e-01 -3.5886736702706409e-02 + 3.2671057816020554e-01 6.4250052935343294e-01 -8.8340463047563655e-02 + 5.0624338212237607e-01 9.1266118755269532e-01 -1.4017307683927110e-01 + 6.7484939660440812e-01 1.1569776142411252e+00 -1.8388698192709635e-01 + 8.3161707937615015e-01 1.3794235558584507e+00 -2.2076741082959617e-01 + 9.7826490582970760e-01 1.5868236288282445e+00 -2.5212808112954871e-01 + 1.1223672900479824e+00 1.7884845144708514e+00 -2.8208783046384156e-01 + 1.2765930946162849e+00 1.9933414946532384e+00 -3.2062698307743609e-01 + 1.4510142121497467e+00 2.2059242284527856e+00 -3.8501590941988051e-01 + 1.6456340763227553e+00 2.4198727929354655e+00 -4.9662431330848822e-01 + 1.8537597597051705e+00 2.6163568480600867e+00 -6.7028051638256880e-01 + 2.0708144049357320e+00 2.7688257714965041e+00 -9.0759061006006492e-01 + 2.2961152925362396e+00 2.8465985442872443e+00 -1.1944238325673042e+00 + 2.5362803958170934e+00 2.8170604514310047e+00 -1.5026681625259526e+00 + 2.8021143592156950e+00 2.6492282415323016e+00 -1.8229351101287250e+00 + 3.0570587783419771e+00 2.3311573797200791e+00 -2.1823112021845961e+00 + 3.2147898506343555e+00 1.8826120209429034e+00 -2.5952198377990516e+00 + 3.1966267947938944e+00 1.3788882340838928e+00 -3.0041935889185623e+00 + 3.0103961295040720e+00 1.2548334286954688e+00 -3.1433877191031536e+00 + id 12250 + loc 9.1050499677658081e-01 5.6368011236190796e-01 372 + blend 0.0000000000000000e+00 + interp 4.2348970291024612e-01:2.7477146903910471e-01:6.3324533493344104e-03:4.2348546801321701e-01:5.4835999117402900e-01:2.8133606771431202e-01:1.2595643953337659e+00:2.9645820516197374e-01:2.2415420928322591e+00:4.0137520914323221e-01:2.9400694723459990e+00:3.6177694834250829e-01:3.3689545941855421e+00 + CVs 20 + -4.8251794056080494e-01 5.2643544788827301e-01 -8.4586556950136324e-02 + -9.8242537952678055e-01 9.3495436942065580e-01 -1.1874713044790096e-01 + -1.5399777717793042e+00 1.1838141751179365e+00 -8.0062526556505698e-02 + -2.0923783584549289e+00 1.3389301360480095e+00 2.3303388382742929e-02 + -2.5888911683093729e+00 1.4881912267445698e+00 1.5333247429419206e-01 + -3.0424541895445305e+00 1.6638546509842240e+00 2.6286889699574678e-01 + -3.4829461511742754e+00 1.8650501115821059e+00 3.2029818411365940e-01 + -3.9214577535796091e+00 2.0869187198308392e+00 3.0951366585737172e-01 + -4.3659534323495830e+00 2.3223294928917033e+00 2.1610582840175696e-01 + -4.8224278486223620e+00 2.5482139680287696e+00 2.4198847754897668e-02 + -5.2755738265190564e+00 2.7180212294530630e+00 -2.7597583049285745e-01 + -5.6792541760982873e+00 2.7688362315698667e+00 -6.7654391557299831e-01 + -5.9689524691209517e+00 2.6499861526206345e+00 -1.1212002389806790e+00 + -6.1070597047727473e+00 2.3779697758659202e+00 -1.5073098214390526e+00 + -6.1278053066237126e+00 2.0304753002543237e+00 -1.7457118117042487e+00 + -6.1241109216798950e+00 1.7151345922415335e+00 -1.7880305578993161e+00 + -6.1263435798082835e+00 1.5381250610670478e+00 -1.6774346388755816e+00 + -6.1076404036173892e+00 1.4103205220808870e+00 -1.5352866844304640e+00 + -6.1975476144048125e+00 1.0967853171560598e+00 -1.3168505749526482e+00 + id 12251 + loc 2.6150554418563843e-01 9.7575426101684570e-02 1085 + blend 0.0000000000000000e+00 + interp 4.5059152261973578e-01:3.1553650802769539e-01:1.8628766500669003e-01:2.8388758275435966e-01:1.1725828651814774e+00:4.3127826633462413e-01:2.0328164636050543e+00:4.5058701670450962e-01:2.5444960253884004e+00:2.9508266198612459e-01:2.9989638895518036e+00:4.0741188383410309e-01:3.7192440405866147e+00 + CVs 20 + 5.4200361714947420e-01 4.2534661842398741e-01 2.6285820938828880e-01 + 9.7466120349567009e-01 7.9397278319895803e-01 5.1938401224170028e-01 + 1.3517501439121471e+00 1.1320205910015173e+00 8.1527894404572354e-01 + 1.6730043280400235e+00 1.4604389352510567e+00 1.2010291527322974e+00 + 1.8954399535019388e+00 1.7630938834834147e+00 1.6881417437280559e+00 + 1.9812986620869444e+00 2.0117398668546520e+00 2.2531704985669569e+00 + 1.9142057427970456e+00 2.1806338285653277e+00 2.8450031915836673e+00 + 1.7064063080857763e+00 2.2564940148661385e+00 3.4024184498380974e+00 + 1.3989942532768509e+00 2.2400854404786044e+00 3.8725467294151850e+00 + 1.0534826040091736e+00 2.1460816948891388e+00 4.2261826649745409e+00 + 7.2195763261015411e-01 1.9975560981866050e+00 4.4669382825108972e+00 + 4.2492149936125223e-01 1.8144878312310069e+00 4.6172357224203040e+00 + 1.5923554409969731e-01 1.6086493150016519e+00 4.6988637557377979e+00 + -8.6353812738402813e-02 1.3836173539259013e+00 4.7251835106251949e+00 + -3.2986042018940664e-01 1.1282376709178390e+00 4.7064774369180880e+00 + -5.7888049649339812e-01 8.0666072682222401e-01 4.6568163920808407e+00 + -8.0040374528766622e-01 3.6533973934773595e-01 4.5958167807928429e+00 + -9.3151440751182957e-01 -2.1939339995169710e-01 4.5812834782110103e+00 + -9.3341837578651599e-01 -6.5967740551491871e-01 4.6163260946439166e+00 + id 12252 + loc 4.0180790424346924e-01 4.0974664688110352e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0055568414733861e-01:3.1564744742378176e-01:3.5502162227339362e-01:4.0055167859049717e-01:9.9248467991349310e-01:3.2769803489205723e-01:1.5182018861934092e+00:2.8043684906853616e-01:2.3896031779487346e+00:3.0963078786373632e-01:3.0258535355160117e+00:2.8067040998234777e-01:3.8148528795603194e+00 + CVs 20 + -3.3046398148643918e-01 6.1369004325611809e-01 -1.0198623421906758e-01 + -5.6634389321519862e-01 1.2000084588039071e+00 -2.6699351275920713e-01 + -6.9688815150111050e-01 1.7563985652871343e+00 -4.9992102712514330e-01 + -7.1734279465060746e-01 2.2588683293425449e+00 -8.0174861410583764e-01 + -6.4415860557736415e-01 2.6736661273172042e+00 -1.1787835286382276e+00 + -5.2730523895693837e-01 2.9680246773720311e+00 -1.6177339306225753e+00 + -4.2567257234693678e-01 3.1127963504322427e+00 -2.0755251047377081e+00 + -3.7377641402221617e-01 3.0950594009990313e+00 -2.5148395964489789e+00 + -3.8357688388940625e-01 2.9126534413989607e+00 -2.9206102690213971e+00 + -4.4103619238089731e-01 2.5823088756927532e+00 -3.2636084336910747e+00 + -4.9738272836448127e-01 2.1392853128344593e+00 -3.5119429949832073e+00 + -4.9838470866972939e-01 1.6196925779438818e+00 -3.6490017599287956e+00 + -4.2483548597131565e-01 1.0643572522423932e+00 -3.6749765893357318e+00 + -3.0355860882678060e-01 5.2105341693905094e-01 -3.6141971673141726e+00 + -1.8104045776055000e-01 3.7544240720821909e-02 -3.5174352022609692e+00 + -9.5112550790279471e-02 -3.5242831324243762e-01 -3.4454314285225141e+00 + -1.8406291252656115e-01 -7.1996072102792508e-01 -3.5766643059981496e+00 + -2.6555131539728050e-01 -6.3142087534280344e-01 -3.7373881548833672e+00 + -2.1421676633890957e-01 -4.4792582013692173e-01 -3.7868345380896047e+00 + id 12253 + loc 3.5523381829261780e-01 9.9312621355056763e-01 1050 + blend 0.0000000000000000e+00 + interp 3.7213147422019011e-01:3.0512824610351080e-01:8.9862379668086745e-02:3.7212775290544792e-01:9.8417490039463629e-01:2.6538941988771070e-01:1.3780988119442663e+00:2.0344055706532357e-01:2.1387709190772428e+00:2.9692339038999715e-01:3.0797684051054315e+00 + CVs 20 + -1.0822839035084869e-01 4.9059694477353749e-01 -7.3884304566799330e-01 + -1.2893400530461721e-01 9.5703365237388649e-01 -1.3809676760183043e+00 + -1.4113909546157988e-02 1.4528703320242076e+00 -1.9490311702239305e+00 + 2.8299139176185983e-01 1.9857453222087316e+00 -2.4129379466032237e+00 + 7.7005588132902747e-01 2.4969605195400688e+00 -2.6977621835812391e+00 + 1.3889448880388549e+00 2.9037059695625365e+00 -2.7891277775959757e+00 + 2.0593841224555036e+00 3.1467282052510486e+00 -2.7350964359655450e+00 + 2.7195893616101197e+00 3.2072275444793390e+00 -2.6075888687968258e+00 + 3.3380910818874314e+00 3.0884402626095744e+00 -2.4710995344012665e+00 + 3.9043040132557700e+00 2.8009292726054671e+00 -2.3515807462294425e+00 + 4.4005349831543628e+00 2.3446890443777786e+00 -2.2126303003223899e+00 + 4.7649620250735500e+00 1.7210384001308610e+00 -1.9762696617016102e+00 + 4.9145144962190095e+00 9.9015663572099388e-01 -1.5768914525566595e+00 + 4.7837730023392506e+00 2.8738661891478362e-01 -9.8934346951446339e-01 + 4.3734704575243981e+00 -2.2907307825121170e-01 -2.5759983433667982e-01 + 3.7558239917918881e+00 -4.6196293312417736e-01 5.3300399170660850e-01 + 2.9405543034315182e+00 -3.5069410558525071e-01 1.3287000562554174e+00 + 1.7496650458464409e+00 4.2792457171036302e-01 1.9133892743434280e+00 + 1.4320086931850016e+00 7.9098731529510402e-01 1.9488183702130264e+00 + id 12254 + loc 6.4068377017974854e-01 8.7506532669067383e-01 411 + blend 0.0000000000000000e+00 + interp 4.7230193197032649e-01:3.1088131337689839e-01:8.8463954840765013e-01:3.1057440874488978e-01:1.8084783721284392e+00:3.4490566426593017e-01:2.1592009613917766e+00:4.7229720895100680e-01:2.7708415064595426e+00:4.3536312509415032e-01:3.1977984514315114e+00:3.1042661757213219e-01:3.8872825567129587e+00 + CVs 20 + 9.0858209976569038e-01 2.3434842390135011e-01 -1.0601831170186710e-01 + 1.5289944682358987e+00 2.9604683551824551e-01 -1.5797415262153261e-01 + 2.0680381318081600e+00 2.7564778261518691e-01 -1.7249074667448194e-01 + 2.6136765519091560e+00 2.1775355922994027e-01 -1.5451237891342018e-01 + 3.1514828385033851e+00 1.2669790905151768e-01 -1.0774567459971629e-01 + 3.6719911889986037e+00 8.2025867127363261e-03 -4.2583730886076365e-02 + 4.1674935175720353e+00 -1.3524393625506204e-01 2.6776410436700870e-02 + 4.6292749854758348e+00 -3.0564070976676505e-01 8.8255550508767100e-02 + 5.0600925403881334e+00 -4.8992081032884283e-01 1.3367741995389487e-01 + 5.4741151192188653e+00 -6.7699445979094008e-01 1.6230477347099626e-01 + 5.8842895098977719e+00 -8.6689496024162072e-01 1.7455273094351115e-01 + 6.2957232073655032e+00 -1.0719663439381999e+00 1.6001323906020082e-01 + 6.7095358670797793e+00 -1.3099615751623701e+00 1.1244156204733746e-01 + 7.1251880583116538e+00 -1.5975995838283192e+00 3.9840604828765502e-02 + 7.5342485708361533e+00 -1.9451592603484729e+00 -4.5455126786187017e-02 + 7.9191016869191806e+00 -2.3530318109142279e+00 -1.3727023288970980e-01 + 8.2572810047083500e+00 -2.8167143872183429e+00 -2.3002264918729942e-01 + 8.5244942235448189e+00 -3.3248120332556876e+00 -3.1087590944415222e-01 + 8.6784567185941377e+00 -3.7845659853900724e+00 -3.7286034056467343e-01 + id 12255 + loc 7.6394444704055786e-01 2.8027021884918213e-01 416 + blend 0.0000000000000000e+00 + interp 5.4169534803409847e-01:2.6090798447497859e-01:1.1602588846685835e-01:3.4910508991992339e-01:9.9581954067786516e-01:5.4168993108061814e-01:1.6586916974295605e+00:5.1545247179736275e-01:1.9840046752130900e+00:3.1464622649905366e-01:2.3031900553663407e+00:3.8050161934764037e-01:3.0335770005133424e+00:3.9920741709089458e-01:3.7113600305647756e+00 + CVs 20 + -5.2418636025066823e-01 1.4245338303647373e-01 9.0105968666318537e-02 + -8.7743222113453401e-01 1.8655175929837625e-01 1.7927004893939408e-01 + -1.1986171185181091e+00 1.9517532759088430e-01 2.5788531263235986e-01 + -1.5423228500214288e+00 2.0106052468781183e-01 3.1019889272068962e-01 + -1.9030038764599668e+00 1.9822700748863586e-01 3.3388082702166166e-01 + -2.2737396527195783e+00 1.8116882813088497e-01 3.2651909323856820e-01 + -2.6462366832600255e+00 1.4644114868976077e-01 2.8487872728748559e-01 + -3.0119064577562882e+00 9.2306521945275888e-02 2.0825744972881310e-01 + -3.3633327412094327e+00 1.8202301734423498e-02 1.0035639782015815e-01 + -3.6945711871731719e+00 -7.4459795525765538e-02 -3.3785020504462637e-02 + -4.0004266789774183e+00 -1.8149777328420313e-01 -1.9081107028941313e-01 + -4.2778731637883372e+00 -3.0012612111055970e-01 -3.6347038101823320e-01 + -4.5329814346929549e+00 -4.3703553476311896e-01 -5.3267075524735663e-01 + -4.7780335481218561e+00 -6.0540441614609897e-01 -6.7299804416083353e-01 + -5.0155716913842330e+00 -8.0798262928539621e-01 -7.6526790261983602e-01 + -5.2364628590607571e+00 -1.0328447758198314e+00 -8.0504280430845865e-01 + -5.4313784840774124e+00 -1.2653812386544039e+00 -7.9373048806765978e-01 + -5.5950137175562435e+00 -1.4934799814794630e+00 -7.3249409032891788e-01 + -5.7434130918403872e+00 -1.7319808014924800e+00 -6.1448566610106869e-01 + id 12256 + loc 3.6711864173412323e-02 7.7469980716705322e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5738344622159310e-01:4.0120836707947721e-01:5.1250689354545687e-02:4.5737887238713093e-01:6.4719035478649722e-01:2.8274392902158380e-01:1.0090248237178674e+00:3.3439746368772627e-01:1.7350850943478728e+00:3.3839845343759511e-01:2.0878329393822579e+00:4.2942255166057763e-01:2.9333492405497643e+00:3.2543291939817504e-01:3.4083740174827915e+00 + CVs 20 + -2.5534165312728948e-03 2.3165454439946190e-01 7.6722737046345649e-02 + 2.0864196652905301e-02 4.1673612454409703e-01 1.0104510248937484e-01 + 4.6002065359140830e-02 5.8222088635967506e-01 1.0982676259403829e-01 + 6.1290194019522327e-02 7.3946028107095774e-01 1.2104011944723553e-01 + 6.8268498475291164e-02 8.8950557717713630e-01 1.3297933805985168e-01 + 6.7141363728695544e-02 1.0346018720373158e+00 1.4351511822892915e-01 + 5.5867668841915033e-02 1.1773269882696547e+00 1.4913312805930079e-01 + 3.0336418455744800e-02 1.3186069883798162e+00 1.4622451375496837e-01 + -1.4785545273356709e-02 1.4576055947094448e+00 1.3352400496453565e-01 + -8.5199936413345168e-02 1.5930776811939924e+00 1.1138017237787978e-01 + -1.8662281418410920e-01 1.7220055182298273e+00 7.8783339254937412e-02 + -3.2330523174520981e-01 1.8368987230721396e+00 3.2481408014337076e-02 + -4.9407615491140572e-01 1.9274653209403438e+00 -3.1022427944036646e-02 + -6.9172193917890235e-01 1.9861663849549203e+00 -1.1198484006115017e-01 + -9.0943534749205179e-01 2.0130180634583792e+00 -2.0767123202834381e-01 + -1.1498256844700729e+00 2.0114497389184880e+00 -3.1789776432565242e-01 + -1.4169057979836710e+00 1.9787106561327250e+00 -4.4589199935127888e-01 + -1.7012913401906269e+00 1.9135087060972082e+00 -5.9785575898222798e-01 + -1.9698027394962530e+00 1.8462652971538072e+00 -7.5165321532396656e-01 + id 12257 + loc 7.5778943300247192e-01 1.8350879848003387e-01 397 + blend 0.0000000000000000e+00 + interp 5.0498788093739988e-01:3.5024159120776788e-01:4.3003496231654892e-01:3.4447832733879435e-01:1.1207356558798824e+00:3.7042506262087022e-01:1.7741413669831934e+00:3.4882962464122702e-01:2.1245271192280013e+00:5.0498283105859054e-01:3.0002414907161783e+00:3.3710792117084815e-01:3.8984419973249844e+00 + CVs 20 + -1.2318820633199863e+00 3.1800367549676567e-01 3.1281438536980150e-01 + -2.0778784444137628e+00 3.7598566967414349e-01 5.6704989766862723e-01 + -2.8279090410165639e+00 3.3147501407984931e-01 7.9407086239449931e-01 + -3.5951489775936945e+00 2.2500198651336589e-01 1.0063855376372997e+00 + -4.3554837776342819e+00 5.0015638324776401e-02 1.1920680187109134e+00 + -5.0848798597616192e+00 -1.9487970546026401e-01 1.3495594046886141e+00 + -5.7624028000312206e+00 -5.0165115513347303e-01 1.4840740482428960e+00 + -6.3687349362953567e+00 -8.5729718305026237e-01 1.6027624058132006e+00 + -6.8923626245873990e+00 -1.2465077582057722e+00 1.7189622871903434e+00 + -7.3351340392767934e+00 -1.6571360807770574e+00 1.8576848595651003e+00 + -7.7034899043136891e+00 -2.0804246878347299e+00 2.0452742311331260e+00 + -8.0032118380276192e+00 -2.5084524311461389e+00 2.2973347325294249e+00 + -8.2405942538925316e+00 -2.9398667734351949e+00 2.6202429608157094e+00 + -8.4186459871957009e+00 -3.3841182402230432e+00 3.0145555888890563e+00 + -8.5310884586687248e+00 -3.8504311065946837e+00 3.4688337987180820e+00 + -8.5662300140040841e+00 -4.3410364998829074e+00 3.9553394817356864e+00 + -8.5154390681345227e+00 -4.8571805957441585e+00 4.4359167552935670e+00 + -8.3835514721152702e+00 -5.3896476108156159e+00 4.8747287925050546e+00 + -8.2521714933865642e+00 -5.8601523094305286e+00 5.2681142300916246e+00 + id 12258 + loc 3.4440049529075623e-01 4.6068355441093445e-01 406 + blend 0.0000000000000000e+00 + interp 5.0429600429614496e-01:3.6519339117570054e-01:8.6509605385269417e-02:3.0334886053771981e-01:9.9995700338968529e-01:5.0429096133610207e-01:1.4380432486284562e+00:3.9156201550421998e-01:2.0182460290579840e+00:4.6766898808832152e-01:2.8388700064742656e+00:3.1234026276055388e-01:3.2061964090895954e+00 + CVs 20 + -2.4261124851069949e-02 1.9710838742564823e-01 -1.2242306766331583e-01 + -4.6353678911920645e-02 3.2963864481066796e-01 -1.7999070184920835e-01 + -5.8628066046183439e-02 4.4485995311853388e-01 -2.1587088272502913e-01 + -6.4648289261233893e-02 5.6248527038721119e-01 -2.7414891605432046e-01 + -6.2533504756265429e-02 6.7827922987051803e-01 -3.5734957972538267e-01 + -5.0743842666943192e-02 7.8696120056405039e-01 -4.6693864595867940e-01 + -2.8286653817366558e-02 8.8261020939787760e-01 -6.0377263461118214e-01 + 5.6775323361685781e-03 9.5903135825784247e-01 -7.6772660535742743e-01 + 5.2726581758669927e-02 1.0103153485762368e+00 -9.5543847836899587e-01 + 1.1451775917210932e-01 1.0316890017730596e+00 -1.1579565645423671e+00 + 1.8940296755043456e-01 1.0204339006987471e+00 -1.3652195291145628e+00 + 2.7235150218354576e-01 9.7571093181855206e-01 -1.5727146132715437e+00 + 3.6022632029776092e-01 8.9785471827338115e-01 -1.7821787129010676e+00 + 4.5332604386236297e-01 7.8894551929606338e-01 -1.9941075420631846e+00 + 5.5252938131738250e-01 6.5350684980023954e-01 -2.2054949221980222e+00 + 6.5586806485320437e-01 4.9660638566240523e-01 -2.4147884240330111e+00 + 7.5854052572285491e-01 3.2160332124842284e-01 -2.6242239968035879e+00 + 8.5609662005920828e-01 1.3056612321009498e-01 -2.8364556247924222e+00 + 9.6461230148258936e-01 -7.7214759470262351e-02 -3.0822290189440653e+00 + id 12259 + loc 2.1816702187061310e-01 7.1572703123092651e-01 409 + blend 0.0000000000000000e+00 + interp 5.1321490339176412e-01:3.8304003315924212e-01:5.0616826958566730e-02:2.6462684397211972e-01:7.4389899842204099e-01:3.7077492080303581e-01:1.0959468763995361e+00:5.1320977124273026e-01:1.8266697408605166e+00:3.9298633477079609e-01:2.0910513482461832e+00:3.4960066179782523e-01:2.9357925988526441e+00:4.1276489549012557e-01:3.1988790738097741e+00 + CVs 20 + 4.8670499738895290e-01 2.9689038165991022e-01 -2.0441395616818819e-01 + 8.8469185636227421e-01 5.5922641692040342e-01 -3.7704013189313745e-01 + 1.2934804076677437e+00 8.3313632836580431e-01 -5.5018812141113915e-01 + 1.7606043385692445e+00 1.1256563308522058e+00 -7.5230890442732201e-01 + 2.2816182977840223e+00 1.3992885754673305e+00 -1.0173937297263107e+00 + 2.8335252894791028e+00 1.6045199258494005e+00 -1.3756165837769836e+00 + 3.3823392453806829e+00 1.6944249367204565e+00 -1.8302722412117269e+00 + 3.8984627593315722e+00 1.6344548060580308e+00 -2.3467700374713840e+00 + 4.3705348766972643e+00 1.4084444383824373e+00 -2.8650629521784015e+00 + 4.7967538177171667e+00 1.0188977165363378e+00 -3.3223189120158234e+00 + 5.1661708202096008e+00 4.9468471919258583e-01 -3.6541881227236770e+00 + 5.4727008393796588e+00 -1.1603334092661699e-01 -3.8234941166665299e+00 + 5.7409828403442154e+00 -8.0088626891131787e-01 -3.8798719007020415e+00 + 6.0086967334470973e+00 -1.5682417897781606e+00 -3.9391590591937873e+00 + 6.3060805192819611e+00 -2.3818687599207502e+00 -4.1060954736457322e+00 + 6.6490768530425672e+00 -3.1616740801580745e+00 -4.3865664558776558e+00 + 7.0371390683067219e+00 -3.8718202151737851e+00 -4.6706286947371680e+00 + 7.4539708819580106e+00 -4.5493022335982083e+00 -4.8729252757760433e+00 + 7.8852250555940149e+00 -5.3055258487841375e+00 -5.0800374982748631e+00 + id 12260 + loc 4.4564431905746460e-01 1.0457164049148560e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7752031197351597e-01:2.4172992489459427e-01:3.9268860787490822e-01:3.5864605184273241e-01:9.9782162480839687e-01:3.2527721803655690e-01:1.4311422582636513e+00:2.5467958756927589e-01:2.1280295722590883e+00:4.2966643155991141e-01:2.6568733223608412e+00:4.7751553677039626e-01:3.1184815299651989e+00:3.5438136259015424e-01:3.9505606683712076e+00 + CVs 20 + -2.0239777432255907e-01 2.7104492119198875e-01 -3.3944401125889767e-01 + -3.9425169532672111e-01 5.4028402712861157e-01 -6.6875926663983820e-01 + -5.9623386429578018e-01 7.9593873547921090e-01 -1.0087686344229490e+00 + -8.3021772064959687e-01 1.0412659497494792e+00 -1.3524614864226674e+00 + -1.1147790263188218e+00 1.2762963834033836e+00 -1.6743587091745655e+00 + -1.4597950552954984e+00 1.4875657645181759e+00 -1.9434033859189486e+00 + -1.8535166454490324e+00 1.6482825159959673e+00 -2.1328153666273724e+00 + -2.2614696391080180e+00 1.7299948402597158e+00 -2.2335123039762665e+00 + -2.6416955653246297e+00 1.7200533856273457e+00 -2.2552103074792877e+00 + -2.9637285821690527e+00 1.6315575395569495e+00 -2.2171645327822289e+00 + -3.2212349019529767e+00 1.4931802910891823e+00 -2.1388085619084074e+00 + -3.4307447796828856e+00 1.3271055967396350e+00 -2.0326709311325075e+00 + -3.6149831264510803e+00 1.1408651400797534e+00 -1.9053067240382315e+00 + -3.7953711852613288e+00 9.3248105287872651e-01 -1.7634987351822518e+00 + -3.9934197530372293e+00 6.9477273967437170e-01 -1.6166899996226738e+00 + -4.2359373524174675e+00 4.1385392648856412e-01 -1.4825638149911931e+00 + -4.5500706548232976e+00 6.8792287775572669e-02 -1.4227281252670212e+00 + -4.8877373151966186e+00 -2.8635599968928960e-01 -1.5364180549391533e+00 + -5.1040435857858890e+00 -4.7948772484463886e-01 -1.7266579748664053e+00 + id 12261 + loc 6.1695617437362671e-01 1.4097051322460175e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7199335896096747e-01:2.8363618984478861e-01:4.2442744217166317e-01:2.6860465705305969e-01:1.2607136636445306e+00:3.0398709679298591e-01:2.1383138791942295e+00:2.6100152911222779e-01:3.1002926419100056e+00:3.7198963902737786e-01:3.9582255773399204e+00 + CVs 20 + -1.8866170204424743e-01 2.7776265041528714e-01 2.7738206264391108e-01 + -3.6008089656516779e-01 5.6858786886086032e-01 5.5691421891060577e-01 + -5.4641712882510673e-01 8.5547626244402797e-01 8.4892519934621757e-01 + -7.4875748644745088e-01 1.1324228543494828e+00 1.1503298517955085e+00 + -9.5580932502244809e-01 1.3980348351464280e+00 1.4624969531613745e+00 + -1.1580241256433339e+00 1.6480120204397859e+00 1.7967851617335351e+00 + -1.3521359287462258e+00 1.8775588582311717e+00 2.1631187674294563e+00 + -1.5423687170783662e+00 2.0786147774689332e+00 2.5638042456381371e+00 + -1.7347973629247411e+00 2.2352012236991037e+00 2.9957803570256734e+00 + -1.9319379052459940e+00 2.3239668354706815e+00 3.4527837142774529e+00 + -2.1303999058747465e+00 2.3188963131487310e+00 3.9232393038755435e+00 + -2.3196321419465851e+00 2.2015135117821734e+00 4.3855213174493208e+00 + -2.4856218086267705e+00 1.9705006463105952e+00 4.8099904738860682e+00 + -2.6201930835236258e+00 1.6467315141061776e+00 5.1676815892125720e+00 + -2.7211389566830282e+00 1.2653832297795202e+00 5.4451646397030649e+00 + -2.7748626858033592e+00 8.5570866657238065e-01 5.6494272900550309e+00 + -2.7525243307155938e+00 4.3840014595124838e-01 5.7963457308336812e+00 + -2.6524708662136747e+00 3.7539904207428990e-02 5.8978904640434466e+00 + -2.6586032700933462e+00 -2.7617804956424319e-01 5.9952009183961863e+00 + id 12262 + loc 5.7656969875097275e-02 6.1992400884628296e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2763405491651529e-01:3.0289589851340576e-01:1.1984405626740413e-03:4.2762977857596612e-01:3.3083840151275579e-01:2.6284426104695774e-01:1.4355709506534577e+00:4.2674125564027920e-01:2.1211916876709029e+00:2.7261437837695646e-01:3.0233178191161629e+00 + CVs 20 + 9.3599823404088262e-02 2.7929930487813276e-01 -1.5066316177731534e-01 + 1.8235037774962926e-01 5.2533473178711931e-01 -3.6102444341138029e-01 + 2.5891874898235429e-01 7.3455008714722714e-01 -5.9847181836829388e-01 + 3.1964554262302336e-01 9.0018823835021067e-01 -8.4711563292693626e-01 + 3.6689139472514276e-01 1.0286564629947264e+00 -1.1087859565434448e+00 + 4.0452267203755793e-01 1.1346620852499494e+00 -1.3843115794905552e+00 + 4.3430924341099936e-01 1.2287637645357012e+00 -1.6678356788589177e+00 + 4.5368522552771257e-01 1.3067546226949658e+00 -1.9437271886238880e+00 + 4.5558246071892639e-01 1.3467142529655232e+00 -2.1865958185631795e+00 + 4.2688299248775119e-01 1.3179042371526859e+00 -2.3559303792628885e+00 + 3.4996247294274618e-01 1.2093539490533658e+00 -2.3852928000515283e+00 + 2.2327158613868664e-01 1.0822207329202647e+00 -2.2048125221564492e+00 + 8.9672398429707256e-02 1.0633633815784802e+00 -1.8568436776362001e+00 + -1.2007898677294015e-02 1.1665184705595140e+00 -1.5434934800288436e+00 + -1.0064154331630154e-01 1.2792749736387665e+00 -1.3663975536488060e+00 + -1.8335857094339242e-01 1.3757009223391674e+00 -1.2705918975650765e+00 + -2.3604289636245640e-01 1.4896020553318243e+00 -1.2038815127696469e+00 + -2.6082445180113073e-01 1.5899490664947111e+00 -1.1654023495628514e+00 + -4.6316383199873618e-01 1.4054554570435358e+00 -1.2042836080106853e+00 + id 12263 + loc 8.0980950593948364e-01 9.4104897975921631e-01 1048 + blend 0.0000000000000000e+00 + interp 3.4889826117133982e-01:2.4690676859759522e-01:5.2960100115158815e-01:3.4889477218872811e-01:1.0004537895807113e+00:3.4158560966465218e-01:1.9275125384547902e+00:2.8991074368786984e-01:2.3646031267485785e+00:2.9078934589631888e-01:2.9979800939558676e+00:2.6452128380687712e-01:3.9797022109888647e+00 + CVs 20 + 1.1633571400437950e-01 8.8031590392856451e-01 -4.0985716109478770e-01 + 3.1683765672510028e-01 1.8109195911205460e+00 -7.1344833822404086e-01 + 6.2192398570503471e-01 2.7409275993131770e+00 -7.9538208385011222e-01 + 1.0148061297223872e+00 3.5248748016848870e+00 -5.8018670181022247e-01 + 1.4262640807924944e+00 4.0248942361786639e+00 -1.1679155673791364e-01 + 1.7725959369547721e+00 4.1985110350811823e+00 4.5819489353469800e-01 + 2.0383976300594866e+00 4.1050317970542531e+00 1.0617583333283176e+00 + 2.2458841854015805e+00 3.7973944153817945e+00 1.6857724563396412e+00 + 2.3689841180493953e+00 3.3087491461917331e+00 2.3337340433807761e+00 + 2.3665820052948696e+00 2.6773577686880166e+00 3.0342969832013447e+00 + 2.2070949403901343e+00 1.9167593309467330e+00 3.7882731065822721e+00 + 1.8798570430220460e+00 1.0716057080141357e+00 4.5341021587032433e+00 + 1.4558260184303700e+00 2.8491339545843397e-01 5.2129806032187576e+00 + 1.0883295293047015e+00 -2.6163368315935687e-01 5.8061536094576081e+00 + 1.0549926690692832e+00 -2.5547183617421121e-01 6.1832974393556031e+00 + 1.2444305535336124e+00 1.6046096820929368e-01 6.0625708323741927e+00 + 1.4886037065930759e+00 3.1490623390557548e-01 6.0441937622954320e+00 + 2.1492044319556789e+00 3.0270048975913921e-01 6.2303404117994106e+00 + 3.0048564522115790e+00 2.0531339936954218e-01 6.6020692951513809e+00 + id 12264 + loc 2.6459965109825134e-01 8.1583261489868164e-01 1084 + blend 0.0000000000000000e+00 + interp 3.6788964703277455e-01:3.0944777432983128e-01:8.9902483609863948e-01:2.8651074182721392e-01:1.3043770139936188e+00:2.8962206614324981e-01:2.0144658660584014e+00:3.6788596813630425e-01:2.9939809247960274e+00:3.1127640296978842e-01:3.8895606562083960e+00 + CVs 20 + -1.5010062503020946e-01 5.2181323728460172e-01 3.9670238723637258e-01 + -2.9838123158460061e-01 9.8654110628771985e-01 7.2886829120887398e-01 + -4.4112473032283461e-01 1.4259867634972154e+00 1.0557607412585570e+00 + -6.0608839905567025e-01 1.8611954123034091e+00 1.3830205441964671e+00 + -8.2425557167001695e-01 2.2918903181660077e+00 1.6753147113348295e+00 + -1.1165806524075903e+00 2.7095984682117655e+00 1.8890568776988408e+00 + -1.4858437852059765e+00 3.0939605183055541e+00 1.9682805796501599e+00 + -1.9045156820681053e+00 3.4029730113569263e+00 1.8338381659571787e+00 + -2.2733200278292425e+00 3.5562632324876127e+00 1.4267324367676670e+00 + -2.4689487480141712e+00 3.5106813359853697e+00 8.6368121644871798e-01 + -2.5353171582876479e+00 3.2944489160361958e+00 2.9300789292440244e-01 + -2.5600073386576461e+00 2.8606993992916747e+00 -2.4446539658119626e-01 + -2.5727049079247357e+00 2.2183686181555959e+00 -6.5063911900325555e-01 + -2.5655282825098609e+00 1.6003553508322337e+00 -8.9915116325846822e-01 + -2.5246988580013530e+00 1.1846434962568018e+00 -1.1208165809847066e+00 + -2.4764812626353474e+00 1.0034267179692125e+00 -1.3776694452980012e+00 + -2.4885139325538783e+00 1.0619408677232189e+00 -1.6300987547097538e+00 + -2.5962015944710162e+00 1.2580655931338105e+00 -1.8062975426735999e+00 + -2.5534996917848751e+00 1.0227841528158566e+00 -2.1513008080849918e+00 + id 12265 + loc 7.7677577733993530e-01 1.5603269636631012e-01 372 + blend 0.0000000000000000e+00 + interp 4.0869994700151729e-01:2.6018815168562759e-01:8.3892856512768454e-02:3.6232340502594101e-01:1.2353811835609141e+00:2.9578892466779050e-01:1.4993737627624024e+00:3.1954432701943436e-01:2.2126316718430576e+00:4.0407701587714240e-01:3.0033165458584730e+00:4.0869586000204727e-01:3.8053634641903917e+00 + CVs 20 + 6.7294482880936268e-01 4.3029622836361897e-01 2.0589033452683703e-04 + 1.2999139983712626e+00 7.1876555859253810e-01 -8.9121667403968818e-03 + 1.9509035498627390e+00 8.9029019208088689e-01 1.9773551507978937e-02 + 2.5902981249793040e+00 1.0085425701352677e+00 1.6547426827942513e-01 + 3.0395742264511676e+00 1.1132226303725459e+00 4.7907701965092431e-01 + 3.1429586664569902e+00 1.1282675742089001e+00 8.2785328817556603e-01 + 3.0428889075276211e+00 1.0187774005716093e+00 1.0604851182034658e+00 + 2.8270208607617722e+00 8.1588451904946857e-01 1.2207253653171224e+00 + 2.5266836680356928e+00 5.3169075895620765e-01 1.2853701748185957e+00 + 2.1941974895242580e+00 2.1437091942769815e-01 1.2425018605377283e+00 + 1.8116344624270466e+00 -1.1674055434127928e-01 1.1318465296568254e+00 + 1.2909278723266588e+00 -5.1242010527925663e-01 9.8808104334652880e-01 + 5.2074677885782406e-01 -9.9568106709659965e-01 8.1927628961388110e-01 + -6.0221502209926114e-01 -1.4070831391073977e+00 6.7841346464627506e-01 + -1.9353698756203632e+00 -1.3985333264495776e+00 7.0342547888991691e-01 + -3.1605783363954112e+00 -8.9015774716271490e-01 9.6138332214976518e-01 + -4.1294022279910187e+00 -2.4059200262136038e-02 1.4462699402539467e+00 + -4.6834606345771075e+00 9.7078357275416871e-01 2.1151571441338137e+00 + -4.8913827752346251e+00 1.8244413781314206e+00 2.8318552361837925e+00 + id 12266 + loc 9.0013521909713745e-01 5.0462681055068970e-01 406 + blend 0.0000000000000000e+00 + interp 4.3378628806541120e-01:3.2992992595241327e-01:1.1402089236933577e-01:4.1341668252364383e-01:8.7452885013404646e-01:3.9494227731072301e-01:1.3675752408776995e+00:2.4052392721789528e-01:3.0153767757627232e+00:4.3378195020253058e-01:3.9586968499261763e+00 + CVs 20 + 3.3530374235561178e-01 2.5540567886148319e-01 -5.3607748555571606e-02 + 5.6234573290102663e-01 4.1885061464934992e-01 -6.8467275828368354e-02 + 7.5934293121716190e-01 5.2846851904024406e-01 -7.9844509779181505e-02 + 9.6898395104369761e-01 6.1617189516415904e-01 -9.1454179973642663e-02 + 1.1899583923074262e+00 6.7915177689836814e-01 -1.0170301547925895e-01 + 1.4197045198389702e+00 7.1592765798842939e-01 -1.0918684741630597e-01 + 1.6547034141266606e+00 7.2730568646792793e-01 -1.1175424237944820e-01 + 1.8903138158940369e+00 7.1581995874616045e-01 -1.0690883205829682e-01 + 2.1191626146823710e+00 6.8323439120140506e-01 -9.5641546774906883e-02 + 2.3339635814907718e+00 6.3117700746489402e-01 -8.4719857738727145e-02 + 2.5336008859855674e+00 5.6476833437205176e-01 -7.9927863692818790e-02 + 2.7222198311180716e+00 4.9230382656607796e-01 -7.9557850727021484e-02 + 2.9016975579008593e+00 4.2102077348083455e-01 -8.0741974483794166e-02 + 3.0697425531520928e+00 3.5539539171275858e-01 -8.6959526908964579e-02 + 3.2244490756367532e+00 2.9820397927041808e-01 -1.0428901942314395e-01 + 3.3652769244308711e+00 2.5141879828812552e-01 -1.3380738037579509e-01 + 3.4917684076385465e+00 2.1652215239696160e-01 -1.7227518726338209e-01 + 3.6045786192669671e+00 1.9515213705330803e-01 -2.1750137867001229e-01 + 3.7079455294883861e+00 1.9377298949449417e-01 -2.7048014899889322e-01 + id 12267 + loc 5.3770929574966431e-01 7.7488446235656738e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4440096181146788e-01:2.8411013083469944e-01:6.5900131356322333e-06:2.7330394274476605e-01:7.4556662299453902e-01:4.4439651780184980e-01:1.3018876046888916e+00:3.1907676859632422e-01:1.9999372850844512e+00:4.1593616150861218e-01:2.9081599592760625e+00:4.4398478846143902e-01:3.4118279534081055e+00 + CVs 20 + 4.4732385827907957e-02 3.5725589408272085e-01 -1.5359307414762610e-01 + 9.6391455627685974e-02 7.3236509396153937e-01 -3.1767770998425721e-01 + 1.5889193283560565e-01 1.1176746966560924e+00 -4.9420559959167332e-01 + 2.3531824677718416e-01 1.5063924171701164e+00 -6.9137674100367841e-01 + 3.2969705795649207e-01 1.8930935223863852e+00 -9.2367750305791974e-01 + 4.5155035359172202e-01 2.2632920833335959e+00 -1.2090551037488730e+00 + 6.1256201744297878e-01 2.5839871360915549e+00 -1.5582544138268184e+00 + 8.1789831650764755e-01 2.8177372689856885e+00 -1.9616051470965923e+00 + 1.0621196102229673e+00 2.9403900251945032e+00 -2.3904401001291529e+00 + 1.3276837132699872e+00 2.9487906908035710e+00 -2.8108829634643109e+00 + 1.5889334292787729e+00 2.8601746371389711e+00 -3.1968045639303382e+00 + 1.8250474788751030e+00 2.7061779332268991e+00 -3.5359763299743459e+00 + 2.0355310431136435e+00 2.5258804316628023e+00 -3.8317915911394413e+00 + 2.2293723138961798e+00 2.3561367324059828e+00 -4.0887818011955774e+00 + 2.4025736515473262e+00 2.2169119495872462e+00 -4.2972172637216239e+00 + 2.5498961029478195e+00 2.1079928955357521e+00 -4.4320401206640554e+00 + 2.6798267073776851e+00 2.0101465280560875e+00 -4.5078431091991469e+00 + 2.7400754136068830e+00 1.9182209002728039e+00 -4.6385080355563026e+00 + 2.5853166638900440e+00 1.8847843494630072e+00 -4.9607005432779543e+00 + id 12268 + loc 8.7246984243392944e-01 7.9475724697113037e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9471509841613198e-01:3.9541347467588200e-01:1.0025555024532962e-01:4.9471015126514783e-01:9.5852860888905478e-01:3.8750110010753214e-01:1.2863272827578638e+00:3.2540857152451175e-01:2.1266283812623148e+00:3.1173755383189283e-01:3.0104372934686614e+00:3.9802182075053161e-01:3.6876227616107582e+00 + CVs 20 + -2.3752467597202051e-02 2.2096706043270081e-01 1.3369029909803809e-01 + -2.9675150303037863e-02 3.8509299936649000e-01 2.0191071493391102e-01 + -3.0795785096658920e-02 5.1884884267842513e-01 2.4288048428928208e-01 + -3.7334910140405138e-02 6.4031552964853433e-01 2.8725122818945614e-01 + -4.5035769371342668e-02 7.4753121936905398e-01 3.3254277606157645e-01 + -4.8732391858753596e-02 8.3988539609476631e-01 3.7781117343995568e-01 + -4.3287594362430862e-02 9.1917954501696175e-01 4.2378239168898568e-01 + -2.4261991480307860e-02 9.9020543005961925e-01 4.7126796974951890e-01 + 1.1461485757435216e-02 1.0611022999753663e+00 5.2145266388311140e-01 + 6.4509187087942427e-02 1.1445868301273805e+00 5.7754965001604264e-01 + 1.2958916277623525e-01 1.2592955151699219e+00 6.4331713523864065e-01 + 1.8875017260918028e-01 1.4235078506633054e+00 7.1611630712106500e-01 + 2.1499248444511004e-01 1.6366353344517091e+00 7.8051332359134962e-01 + 1.9344981053406451e-01 1.8715705169889507e+00 8.1555264049622989e-01 + 1.3354722448973863e-01 2.0941815961567389e+00 8.0931420812509214e-01 + 5.4741440543371864e-02 2.2855455438919887e+00 7.6181044379366625e-01 + -3.7873061615151395e-02 2.4475602232533875e+00 6.8068986948326449e-01 + -1.5353843479290233e-01 2.5844182855039595e+00 5.7912306898248755e-01 + -2.4045591471534519e-01 2.6550543198135261e+00 4.6576835780502668e-01 + id 12269 + loc 5.3066504001617432e-01 8.0910521745681763e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7024093042818293e-01:2.7478213354688424e-01:6.6772926953507616e-01:4.3408129377339910e-01:1.0000667048781633e+00:4.7023622801887865e-01:1.3308382128120002e+00:2.7362670435264558e-01:2.0673995893517496e+00:2.7433669701529717e-01:3.0034700155751666e+00:3.6337437532832789e-01:3.7860324216596761e+00 + CVs 20 + 2.4805620600056583e-01 3.1444944569073935e-01 -4.0552673320075239e-01 + 5.3679684320887378e-01 6.1163784589994175e-01 -7.8463971817981648e-01 + 8.5966699072986685e-01 8.8709539366508505e-01 -1.1527986905410259e+00 + 1.2023716813738234e+00 1.1406104947543076e+00 -1.5184020616950595e+00 + 1.5348998501021367e+00 1.3623461833632757e+00 -1.8934285432893139e+00 + 1.8122456275434511e+00 1.5232866237774305e+00 -2.2891940640935480e+00 + 1.9872321293323478e+00 1.5731314076781238e+00 -2.6822754686369059e+00 + 2.0312337170849646e+00 1.4795594158833847e+00 -2.9909049096150619e+00 + 1.9787623623847796e+00 1.3109180570716383e+00 -3.1605115418008332e+00 + 1.8930056057278370e+00 1.1506328082375334e+00 -3.2605783708159577e+00 + 1.7960672233354302e+00 9.9866624587112296e-01 -3.3684372828501088e+00 + 1.6904420264899267e+00 8.0998685058668118e-01 -3.5327666980000818e+00 + 1.5912878013402958e+00 5.2440810935266313e-01 -3.7867945941933203e+00 + 1.5483862414053584e+00 1.1953265009557168e-01 -4.1481020790137970e+00 + 1.6134420765574626e+00 -3.2552670940324913e-01 -4.6325941895590956e+00 + 1.7894782765582302e+00 -6.6222310668060458e-01 -5.2489427760330374e+00 + 2.0230593756158357e+00 -7.3414259732600895e-01 -5.9375995621203348e+00 + 2.1969311628242756e+00 -4.7132425576977677e-01 -6.4596323451402844e+00 + 2.2735909282093405e+00 1.3933570084431468e-02 -6.6868183774587058e+00 + id 12270 + loc 2.2248829901218414e-01 3.0085485428571701e-02 1078 + blend 0.0000000000000000e+00 + interp 4.7549499905964504e-01:2.7029573135053808e-01:6.5243027089459504e-01:3.5311330795049151e-01:1.7934822855657577e+00:3.3638408639435308e-01:1.9883484952493160e+00:3.3197559349316136e-01:2.5818904344028590e+00:4.7549024410965446e-01:3.0208576812686707e+00:4.4210000072514033e-01:3.3969725649295195e+00:3.3083397428604661e-01:3.9132157507016188e+00 + CVs 20 + 1.6784849702870686e-01 3.6599408600425054e-01 -1.1758074443685704e-01 + 2.6914073388879733e-01 6.8683135423236119e-01 -2.4169380498830834e-01 + 3.4551745628113273e-01 9.9070747533036330e-01 -3.7413852216425986e-01 + 4.1477277614640051e-01 1.2894429185384486e+00 -5.1759414065341691e-01 + 4.7177296516285971e-01 1.5788523048563303e+00 -6.7560306503099676e-01 + 5.0744574772972406e-01 1.8549798142378839e+00 -8.5258274316827487e-01 + 5.0767019609139397e-01 2.1118713640389388e+00 -1.0532435978786949e+00 + 4.5932787233961070e-01 2.3396134913079596e+00 -1.2792217599397344e+00 + 3.5611308673462294e-01 2.5257231804754037e+00 -1.5272940875937548e+00 + 2.0010737434600556e-01 2.6574599817602342e+00 -1.7898646297315592e+00 + 2.0853699476177656e-03 2.7258255505123952e+00 -2.0568078320766148e+00 + -2.2226843452247091e-01 2.7294941850757022e+00 -2.3196273266850369e+00 + -4.5779351918244682e-01 2.6741806176626213e+00 -2.5737162562574012e+00 + -6.9284569466162660e-01 2.5697014180679694e+00 -2.8180823695923634e+00 + -9.2178351281546489e-01 2.4262162437810062e+00 -3.0548440565714046e+00 + -1.1533052907149053e+00 2.2433060488185892e+00 -3.2912199482137203e+00 + -1.3979165380081435e+00 1.9885094821514484e+00 -3.5358946747641453e+00 + -1.5769409021659997e+00 1.6317734411727665e+00 -3.7806392765886003e+00 + -1.5257861748147654e+00 1.4213134877013989e+00 -3.9707334493811817e+00 + id 12271 + loc 1.2890697456896305e-02 5.7058393955230713e-01 1055 + blend 0.0000000000000000e+00 + interp 4.7048269288145772e-01:4.7047798805452895e-01:5.6988191285011436e-01:1.4729359813540135e-01:9.3504501139207508e-01:3.0245848591820068e-01:2.0028389505368822e+00:3.2737177784030536e-01:2.8080399536319298e+00 + CVs 20 + -3.0066790718842185e-01 3.2513973080192637e-01 -2.0837546280491670e-01 + -5.1644392964813546e-01 5.9651245013498544e-01 -3.7780640678172628e-01 + -6.8432640094717723e-01 8.3811232944910552e-01 -5.3245363337657092e-01 + -8.3245260823839917e-01 1.0649373886268922e+00 -6.8292942359923103e-01 + -9.2783479134294811e-01 1.2328361936965166e+00 -7.9001278571189870e-01 + -9.2729301835541178e-01 1.2960975823829815e+00 -8.1555361132348048e-01 + -8.3516793489698093e-01 1.3344424890316871e+00 -7.8902557236283377e-01 + -7.5937061598893152e-01 1.4753440895145795e+00 -7.5736612660066782e-01 + -7.8506137419777855e-01 1.7398659179250160e+00 -7.3886278477258716e-01 + -9.4002925042933039e-01 2.0991967990959925e+00 -7.5803132864712353e-01 + -1.2304845527732624e+00 2.4769591809116847e+00 -8.6868464751066354e-01 + -1.5996100529339463e+00 2.7513003550538215e+00 -1.1081463431311462e+00 + -1.9696821425405064e+00 2.8688206201113213e+00 -1.4516816964850963e+00 + -2.3128643525209762e+00 2.8277625631876724e+00 -1.8507128255123186e+00 + -2.6102890381005270e+00 2.6348390180879164e+00 -2.2583953387298892e+00 + -2.8481532359847805e+00 2.3326317416935018e+00 -2.6591927332954839e+00 + -3.0251007645414845e+00 1.9531932586194500e+00 -3.0603766180365861e+00 + -3.1079843766306863e+00 1.4865634684372964e+00 -3.4186080422233682e+00 + -2.9627978429624657e+00 1.1781269870227704e+00 -3.4938151271372417e+00 + id 12272 + loc 7.2530907392501831e-01 4.6880605816841125e-01 409 + blend 0.0000000000000000e+00 + interp 4.5896425705308008e-01:3.7185175728233905e-01:1.9228782363500485e-01:3.3120179059179339e-01:1.0000059495304512e+00:3.1512993770640807e-01:1.8414200267990906e+00:4.5895966741050959e-01:2.0410648233527167e+00:3.4302951489907391e-01:3.0052961362595876e+00:3.5524145220427028e-01:3.7073727838633284e+00 + CVs 20 + -3.6604397063657235e-01 1.6136594850641961e-01 1.4053427705201349e-01 + -7.1668252885306893e-01 3.0721055526634244e-01 2.8170557039237354e-01 + -1.0772881107189969e+00 4.4807156822469679e-01 4.0161075601151364e-01 + -1.4540204112559538e+00 5.8372866779639843e-01 4.9295599055818395e-01 + -1.8375619194778277e+00 7.0792505921743620e-01 5.5537671614393347e-01 + -2.2187395451040413e+00 8.1766802896684354e-01 5.8984498307479183e-01 + -2.5915345434313415e+00 9.1043628148108813e-01 5.9810614047469501e-01 + -2.9540633955419873e+00 9.8148656275362545e-01 5.8307684774385482e-01 + -3.3099811416717850e+00 1.0264336053924252e+00 5.5181893271402371e-01 + -3.6675999848579508e+00 1.0406327438948149e+00 5.1602415705153981e-01 + -4.0315085979686618e+00 1.0174151932311142e+00 4.8714309075368439e-01 + -4.3966090694344340e+00 9.5368002849085864e-01 4.7186547781056326e-01 + -4.7558309698505221e+00 8.5281535327754798e-01 4.7307193078837417e-01 + -5.1077423260191122e+00 7.1794612403026203e-01 4.9364548044081658e-01 + -5.4507004327143243e+00 5.5025530442954906e-01 5.3677766064113741e-01 + -5.7776467303117887e+00 3.5434511309322492e-01 6.0441856866961718e-01 + -6.0795885021818190e+00 1.3634108701033387e-01 6.9539836249711695e-01 + -6.3452779215174271e+00 -9.8775661038302154e-02 8.0009063715836337e-01 + -6.5096575652572728e+00 -2.6601279239250530e-01 8.7971616564721467e-01 + id 12273 + loc 6.3310110569000244e-01 9.2615705728530884e-01 403 + blend 0.0000000000000000e+00 + interp 4.9073315316124599e-01:4.9072824582971442e-01:5.7321942156234029e-01:3.8910835049201409e-01:1.1300127801979987e+00:2.6027924596401475e-01:1.8769556306836681e+00:3.6351972621584344e-01:2.8533663512298864e+00:3.7872513331411295e-01:3.2477052385350484e+00:2.9933926203239769e-01:3.9991136168184065e+00 + CVs 20 + -5.0367703479906906e-02 2.8853243906340267e-02 -7.3896763649687908e-03 + -1.1305872202990037e-01 4.7400278632072780e-02 -2.5752504803352713e-02 + -1.9363051020943203e-01 6.0632501141910378e-02 -6.0390521107345808e-02 + -2.8252476325837039e-01 6.7969092180198226e-02 -1.1776393153717904e-01 + -3.7543989431384805e-01 6.5973616018156850e-02 -1.9811144559994442e-01 + -4.6917702202093275e-01 5.1786178470254435e-02 -3.0012542765723260e-01 + -5.6247252571884387e-01 2.5324187242584062e-02 -4.2116142480586138e-01 + -6.5703192706153313e-01 -1.0120424189075383e-02 -5.5739314191657785e-01 + -7.5595007774772327e-01 -5.0571918134653393e-02 -7.0363891087994201e-01 + -8.6225447692157753e-01 -9.3245511893193800e-02 -8.5379082837258657e-01 + -9.8005026289310582e-01 -1.3533091604797304e-01 -1.0013685547615339e+00 + -1.1162791015139220e+00 -1.7257051172101873e-01 -1.1390386144828069e+00 + -1.2818034684740383e+00 -1.9889178191753215e-01 -1.2566982311354831e+00 + -1.4888435646899991e+00 -2.0806883014250277e-01 -1.3388347349490846e+00 + -1.7464418985344956e+00 -1.9524055460540723e-01 -1.3618713230010357e+00 + -2.0506716588394127e+00 -1.6020548620331510e-01 -1.2953126232109855e+00 + -2.3710827256104876e+00 -1.1309841050450808e-01 -1.1184578117045862e+00 + -2.6590055627231322e+00 -7.1288438521287301e-02 -8.4816944755077184e-01 + -2.7904892284732576e+00 -8.1612104886324310e-02 -8.9292202602270421e-01 + id 12274 + loc 4.7894690185785294e-02 1.9127058982849121e-01 1085 + blend 0.0000000000000000e+00 + interp 3.1298307058395175e-01:2.9960941509856354e-01:3.2980931037795980e-04:3.1297994075324592e-01:6.8154385497208836e-01:2.4116179629265710e-01:1.1637736517671646e+00:2.4769340904277895e-01:2.5752807517132617e+00:2.8337837290574025e-01:3.2238205973782570e+00 + CVs 20 + 3.9465993806906507e-01 3.6564475275197300e-01 3.0590235394148119e-01 + 6.4677370765427322e-01 6.3717818242303381e-01 6.0059590255695605e-01 + 8.4397858762551137e-01 8.5864722074529320e-01 9.1308565793203345e-01 + 1.0149973395589658e+00 1.0405374465537536e+00 1.2483845537776681e+00 + 1.1466277079452718e+00 1.1746217946242132e+00 1.5972153892434564e+00 + 1.2306504036578645e+00 1.2540702974292435e+00 1.9435704275379435e+00 + 1.2661619339682981e+00 1.2750306558725231e+00 2.2668314206976707e+00 + 1.2610247802676180e+00 1.2389585832956500e+00 2.5466423758859928e+00 + 1.2317319361115882e+00 1.1534685326257170e+00 2.7660505212275446e+00 + 1.1966363796373867e+00 1.0309657241736274e+00 2.9206429064034962e+00 + 1.1693509089437872e+00 8.8223283364973515e-01 3.0207269579811946e+00 + 1.1617536660581429e+00 7.1669568602224742e-01 3.0778003882041776e+00 + 1.1832372996254485e+00 5.4689486048237002e-01 3.0991349058297080e+00 + 1.2342060007109230e+00 3.8503283438241492e-01 3.0911485087457313e+00 + 1.3086494213379902e+00 2.3635440639411648e-01 3.0637715416425335e+00 + 1.4076571393044506e+00 5.7133463384122174e-02 3.0475784724246351e+00 + 1.5623179847701119e+00 -2.0618112749016337e-01 3.0843620934456490e+00 + 1.7937409819473551e+00 -5.0568443885294356e-01 3.2043672869648701e+00 + 2.0839887942223045e+00 -6.7588611580279456e-01 3.4103355082289091e+00 + id 12275 + loc 1.8462140113115311e-02 8.1851041316986084e-01 1076 + blend 0.0000000000000000e+00 + interp 4.2621515296641815e-01:3.3187853995239253e-01:1.2001568592535983e-02:1.9396029960594696e-01:1.0056698937697863e+00:2.7823636965581716e-01:1.9214364063945939e+00:3.2350112450918711e-01:2.8242325070771499e+00:4.2621089081488850e-01:3.2498940050849825e+00 + CVs 20 + 1.3188723941292410e-01 3.0486186625677858e-01 6.3409731135082914e-02 + 2.7615851954861298e-01 5.7378417017684769e-01 8.3985337764451634e-02 + 4.2769582885649521e-01 8.1582285128986598e-01 8.5644093445238184e-02 + 5.8466475475351376e-01 1.0417753342442222e+00 8.3495297174241367e-02 + 7.4518777812536430e-01 1.2520857821226112e+00 7.7568144656318894e-02 + 9.0633745471633465e-01 1.4482585815427109e+00 6.9990392572882254e-02 + 1.0680753359319417e+00 1.6351235154870938e+00 6.2486121966914832e-02 + 1.2336239071915014e+00 1.8201974882809351e+00 5.3275036335831749e-02 + 1.4050072161135561e+00 2.0135454568187261e+00 3.2270122595439044e-02 + 1.5758032928382952e+00 2.2185629388975969e+00 -2.2881220120626100e-02 + 1.7343870201936240e+00 2.4223892274210641e+00 -1.3362303780113360e-01 + 1.8775913310676333e+00 2.5949056902810916e+00 -3.0269087107766335e-01 + 2.0186048648682839e+00 2.6970759541925764e+00 -5.0437222017413752e-01 + 2.1877717546889404e+00 2.6980174033262840e+00 -6.9176818331157253e-01 + 2.4217097442485795e+00 2.5904051232520278e+00 -8.4212507251175772e-01 + 2.7288097192337895e+00 2.3771190032713898e+00 -9.9336556056738501e-01 + 3.0613516504983296e+00 2.0435084787337532e+00 -1.2084437033090190e+00 + 3.2596583137431585e+00 1.6177386769760953e+00 -1.4834283838886166e+00 + 3.0039319456109497e+00 1.5259884587065935e+00 -1.5600775802049536e+00 + id 12276 + loc 6.1144101619720459e-01 2.8803077340126038e-01 416 + blend 0.0000000000000000e+00 + interp 3.8821025094442679e-01:3.1095112459058799e-01:2.7906194566510856e-01:3.8050161934764037e-01:1.0405200329871727e+00:3.8820636884191739e-01:1.7490898794917875e+00:2.3339782193618616e-01:2.6285917706088378e+00:3.4740403914118267e-01:3.1258079674597643e+00:2.7894524681670602e-01:3.8989829131121794e+00 + CVs 20 + -5.8293731936592141e-01 2.2563194078455373e-01 6.9054694853790358e-02 + -9.8235864022031327e-01 3.4359559003873719e-01 1.7208810341472033e-01 + -1.3458937494292627e+00 4.2882938001192383e-01 2.7879333409242352e-01 + -1.7399896465265132e+00 5.1328578265461411e-01 3.7961713355767146e-01 + -2.1683132455237866e+00 5.9263608126780853e-01 4.7196518413249899e-01 + -2.6349191075549330e+00 6.6179437800337393e-01 5.5076770560581734e-01 + -3.1416103605734711e+00 7.1486920176430313e-01 6.0780006378867490e-01 + -3.6852094119918020e+00 7.4492447316646393e-01 6.3535248508698339e-01 + -4.2582364502757120e+00 7.4498895605730064e-01 6.2669004613587964e-01 + -4.8474476668924051e+00 7.0969210897438217e-01 5.7644509694641355e-01 + -5.4252091135291982e+00 6.3462470230122481e-01 4.9838398279148888e-01 + -5.9490605842394979e+00 5.1550307628388947e-01 4.4771704311832550e-01 + -6.3861647807244877e+00 3.5568133822262205e-01 4.8078084280768940e-01 + -6.7433748175435850e+00 1.6045932204174207e-01 5.8874270895940484e-01 + -7.0401764809026730e+00 -7.2732796343366157e-02 7.3520395301617136e-01 + -7.2603952129029317e+00 -3.2443224341984278e-01 9.0777358865467872e-01 + -7.3812720628037303e+00 -5.5395456760643524e-01 1.0997835544276899e+00 + -7.4172179246643735e+00 -7.3968756622040166e-01 1.2900798748504141e+00 + -7.5562087869770007e+00 -1.0241139561688395e+00 1.4110396848651130e+00 + id 12277 + loc 2.1683807671070099e-01 9.8280274868011475e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9309494405310217e-01:4.8652390832470116e-01:5.6210725752066448e-01:3.0381562771782766e-01:1.8869312000354417e+00:3.1766596014208759e-01:2.7038102187491591e+00:4.9309001310366168e-01:3.0916625471654982e+00:3.4704277954272766e-01:3.9660919257397285e+00 + CVs 20 + 1.0832069372179474e-01 5.6224053903410542e-01 -3.1873285140797974e-01 + 2.5352816404216305e-01 1.0796659188502273e+00 -5.2462556875887634e-01 + 4.1409594440397363e-01 1.5535279974313991e+00 -6.1912855422701707e-01 + 5.8048390056202392e-01 1.9990097162729870e+00 -6.2159722820298791e-01 + 7.6466555840123862e-01 2.4313884296955051e+00 -5.5233730159730454e-01 + 9.9241026783677766e-01 2.8592003877370158e+00 -4.4760057157121935e-01 + 1.2967375487894033e+00 3.2751533247498115e+00 -3.5111242748789540e-01 + 1.7028888373991560e+00 3.6547766495368155e+00 -3.0175573004692957e-01 + 2.2119674620686389e+00 3.9560498231907517e+00 -3.3209628698961557e-01 + 2.7976603398384894e+00 4.1541744927347937e+00 -4.6384711629566167e-01 + 3.4299545520541934e+00 4.2631492083629299e+00 -7.2159891979679203e-01 + 4.0311898475806673e+00 4.3005100675804648e+00 -1.1409871714040256e+00 + 4.4875175187483967e+00 4.2509617618702595e+00 -1.6995483496716253e+00 + 4.7695570318218889e+00 4.0851220576825220e+00 -2.3314538286548316e+00 + 4.9120040938508289e+00 3.8010533587464299e+00 -3.0012073384042139e+00 + 4.9703054925935977e+00 3.4251737754852405e+00 -3.7062373069660213e+00 + 5.0045531795590446e+00 2.9890210603840064e+00 -4.4650507047536525e+00 + 4.9643087188478789e+00 2.4830785649332507e+00 -5.2270214401447834e+00 + 4.6186058882684566e+00 2.0573699112760764e+00 -5.5008766744564586e+00 + id 12278 + loc 5.1919907331466675e-01 7.9475444555282593e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0599152633052965e-01:3.2261984692924234e-01:5.2472448793918169e-01:3.4881058324288577e-01:1.1508290562822836e+00:2.9858600363910115e-01:1.9824163036076659e+00:4.0598746641526634e-01:2.7071758788281550e+00:3.2233286857186499e-01:3.4451144425781726e+00 + CVs 20 + -2.0922886026179263e-01 2.9686051139269881e-01 2.9100695802798582e-01 + -4.3501909242641296e-01 5.3844152233018094e-01 5.4802721339082927e-01 + -6.7047146150966241e-01 7.5630029169633062e-01 8.0852029858886942e-01 + -9.1625140901613289e-01 9.6202034001263215e-01 1.0796388093237850e+00 + -1.1840641104655221e+00 1.1538406731035502e+00 1.3418443151628836e+00 + -1.4829757793335610e+00 1.3272452793569574e+00 1.5767574559696422e+00 + -1.8223269014259929e+00 1.4800473881515939e+00 1.7685741844095684e+00 + -2.2144138733345713e+00 1.6120383363964741e+00 1.8877074393682847e+00 + -2.6430701618083137e+00 1.6938418530807140e+00 1.8772140697138178e+00 + -3.0219303681186007e+00 1.6732934499269083e+00 1.7347254376413228e+00 + -3.2786842309716975e+00 1.5772721114149575e+00 1.5839589640422453e+00 + -3.4267719827402474e+00 1.5225158936622831e+00 1.5517196445182360e+00 + -3.5286069834957026e+00 1.5101588936060442e+00 1.5697632288217451e+00 + -3.5991996271767195e+00 1.2542333573245170e+00 1.5111351378050826e+00 + -3.5634941769824806e+00 6.1160309447024463e-01 1.3480496913237494e+00 + -3.3255325807299161e+00 -2.5220844332462089e-01 9.8032823623714038e-01 + -2.8884487613576502e+00 -1.0387587118018964e+00 3.0795823328583521e-01 + -2.4216606743444089e+00 -1.4595372662256483e+00 -5.0177339826050971e-01 + -2.1843396908107411e+00 -1.5181075711141905e+00 -8.5105154871605304e-01 + id 12279 + loc 9.8883181810379028e-01 9.9230200052261353e-01 261 + blend 0.0000000000000000e+00 + interp 2.1854899484606545e+00:2.9424658614158161e-01:5.0358263198019859e-01:2.1230436256014779e-01:1.2404638907798677e+00:1.3365171357357880e-01:2.0376279945620257e+00:4.4158350087986803e-01:2.3679100700846818e+00:1.4807930952352950e+00:2.8038638245897829e+00:2.1854799484606544e+00:2.9258851379523980e+00 + CVs 20 + -8.8030095224049376e-01 3.7857526433677385e-01 -4.2494116621513400e-01 + -1.5373991123601736e+00 5.7629827443148929e-01 -6.3412082839092132e-01 + -2.1823114216261783e+00 6.8284596405575870e-01 -7.2746547122735383e-01 + -2.9049569075202588e+00 7.6214758899599910e-01 -7.6739664597073953e-01 + -3.6963540090818654e+00 8.4707726372404513e-01 -8.0675944613908745e-01 + -4.5279090162708799e+00 9.3076414343153502e-01 -9.0773812241834584e-01 + -5.3637505148064424e+00 9.5837228836177235e-01 -1.1142629681038776e+00 + -6.1510077058150801e+00 8.6877831260984184e-01 -1.4360458945694412e+00 + -6.8277034415353519e+00 6.3095935099910117e-01 -1.8412088203450232e+00 + -7.3493310761991424e+00 2.4930469378005249e-01 -2.2683686110778165e+00 + -7.7043408881887734e+00 -2.4325346455980412e-01 -2.6544017804465021e+00 + -7.9136464676905458e+00 -7.9013860798232871e-01 -2.9648121932481692e+00 + -8.0117970725448266e+00 -1.3518516366299327e+00 -3.1919839771949459e+00 + -8.0264503062164483e+00 -1.9505485592933685e+00 -3.3473438435257465e+00 + -7.9925887624953145e+00 -2.6274382980304600e+00 -3.4541017038609461e+00 + -7.9836541418385263e+00 -3.3938794650102548e+00 -3.5377705603563796e+00 + -8.0770471320693815e+00 -4.2034190039888344e+00 -3.6101870831403216e+00 + -8.3029302212032938e+00 -4.9774022438083687e+00 -3.6527053107552345e+00 + -8.5904784745437919e+00 -5.6709602980946023e+00 -3.6846393026738697e+00 + id 12280 + loc 9.5822507143020630e-01 6.3397890329360962e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2030867779187903e-01:3.2366779278469948e-01:9.5270932025410837e-01:3.6653733091788460e-01:1.7537287666701453e+00:4.2030447470510113e-01:2.2206485182335904e+00:2.4151194988369692e-01:2.8671860402273648e+00:2.8011259399393951e-01:3.9441801257518003e+00 + CVs 20 + 1.7570998839541296e-01 2.3215867642020283e-01 -1.7465433338761699e-01 + 3.7431372976896404e-01 4.6560091472683018e-01 -3.8096528045564926e-01 + 5.8750292471094923e-01 7.0259724377687383e-01 -5.8371539126618266e-01 + 8.0329656984439601e-01 9.3975072098359913e-01 -7.8126627234113677e-01 + 1.0074673846375202e+00 1.1821721483913321e+00 -9.9013119562925189e-01 + 1.1754452218711859e+00 1.4251759982617227e+00 -1.2243267160197244e+00 + 1.2819747844250111e+00 1.6353132819919363e+00 -1.4873303498449226e+00 + 1.3204805841352873e+00 1.7510446000450919e+00 -1.7631126289878523e+00 + 1.3081623761782843e+00 1.7189058154878218e+00 -2.0081761634703095e+00 + 1.2796025077966693e+00 1.5650619332819968e+00 -2.1767396208645295e+00 + 1.2587573978129241e+00 1.3767183678266490e+00 -2.2988099604985162e+00 + 1.2466094562092485e+00 1.1870813205961912e+00 -2.4346360686748985e+00 + 1.2516809041159498e+00 9.9824375493000472e-01 -2.5997661916418795e+00 + 1.2936053820246691e+00 8.2885004701863463e-01 -2.7800826567821830e+00 + 1.3962615990949225e+00 7.1843909758266933e-01 -2.9395438889028402e+00 + 1.5738064287718192e+00 7.4829584398290727e-01 -2.9944432393031799e+00 + 1.7226107244378981e+00 9.8957217363027994e-01 -2.8611299645732657e+00 + 1.7649043440890286e+00 1.2040507879636531e+00 -2.7231119543408284e+00 + 2.0457184033272915e+00 1.0783073075542198e+00 -2.8447396188241196e+00 + id 12281 + loc 9.1680151224136353e-01 5.4804790019989014e-01 411 + blend 0.0000000000000000e+00 + interp 4.0266782344246294e-01:3.7742996515270943e-01:8.2738190046210747e-02:2.4611210325382207e-01:7.4545588664925799e-01:3.0158547474652708e-01:1.1406072417338970e+00:3.8888933531351294e-01:1.9917929332930688e+00:3.3078062229039490e-01:2.6645835583266528e+00:3.2222787623920329e-01:3.1239070225117906e+00:4.0266379676422853e-01:3.7957809115659704e+00 + CVs 20 + 8.1426310500428667e-01 1.8209019752830433e-01 -2.6744290169368512e-01 + 1.4160946361346487e+00 2.2133073499392852e-01 -5.0256046370317753e-01 + 1.9753098939914813e+00 2.1155559209429020e-01 -7.1927933598489591e-01 + 2.5532958401890649e+00 1.8237215849199595e-01 -9.2155211001196058e-01 + 3.1383254559691593e+00 1.2485195361328760e-01 -1.1052710403068680e+00 + 3.7180704500039301e+00 3.1813505327228375e-02 -1.2698869932660708e+00 + 4.2826947964154352e+00 -1.0296902009280440e-01 -1.4094384130745907e+00 + 4.8234827836178971e+00 -2.8921002227274384e-01 -1.5155205528654236e+00 + 5.3289738650885123e+00 -5.3809877539487716e-01 -1.5829592065802145e+00 + 5.7826250889905122e+00 -8.5828954203285912e-01 -1.6154153309746837e+00 + 6.1702040821932691e+00 -1.2542556200796051e+00 -1.6196644452301814e+00 + 6.4882311405294457e+00 -1.7247427963910789e+00 -1.5930961935364443e+00 + 6.7366767170503472e+00 -2.2594584226332404e+00 -1.5259937614998833e+00 + 6.9091498184497508e+00 -2.8379316137524269e+00 -1.4178942984728935e+00 + 6.9965806652116882e+00 -3.4355717181726853e+00 -1.2792102040356164e+00 + 6.9908121778042176e+00 -4.0234746880444128e+00 -1.1138453998084126e+00 + 6.8936953025011425e+00 -4.5678494301572634e+00 -9.1882092117738001e-01 + 6.7339985581854647e+00 -5.0533997177409367e+00 -7.1282709536746003e-01 + 6.7034937935816385e+00 -5.5619584098920898e+00 -5.5998824861079766e-01 + id 12282 + loc 9.4582247734069824e-01 9.1078263521194458e-01 372 + blend 0.0000000000000000e+00 + interp 5.1980634273194548e-01:5.1487392567050239e-01:8.6967702287443549e-02:3.3921646946168649e-01:6.8515195807278628e-01:4.4687333527105172e-01:1.0481444281075925e+00:5.1980114466851823e-01:1.5781614995268716e+00:3.8239850451313462e-01:2.0005573190379904e+00:3.4411067905371107e-01:2.9743211729720640e+00:3.4678816126388395e-01:3.4901286959149078e+00 + CVs 20 + -3.2088308270915988e-01 3.3962817880045010e-01 4.3639766786734369e-02 + -6.1302574362141127e-01 6.1246652183894668e-01 1.1686788373039594e-01 + -9.4929214169735965e-01 7.9621111407249079e-01 2.2998654133945726e-01 + -1.3521276963555939e+00 9.1114850353234300e-01 3.9769589157796759e-01 + -1.7905403503573445e+00 1.0378301438180704e+00 6.1963663333642782e-01 + -2.2555611807353646e+00 1.2508931248387900e+00 8.6245179079875189e-01 + -2.7371187389834470e+00 1.5828518582142266e+00 1.0528984774376777e+00 + -3.1878539079734027e+00 2.0237013581997876e+00 1.1260758519473435e+00 + -3.5582165410266056e+00 2.5446294966129446e+00 1.0579125311003212e+00 + -3.8367479697827296e+00 3.1164966334903408e+00 8.3510105299957826e-01 + -4.0453452536144967e+00 3.7005867853820487e+00 4.2813259616784993e-01 + -4.2039756795436478e+00 4.2256576801533727e+00 -2.0959868696362371e-01 + -4.2889628910260473e+00 4.5569497584095862e+00 -1.0868896385373581e+00 + -4.2343475672650115e+00 4.5484447911028623e+00 -2.0763666877577953e+00 + -4.0043477771060747e+00 4.1593247114090239e+00 -2.9823655759588270e+00 + -3.6921257765369289e+00 3.3974268056594550e+00 -3.6976674729948327e+00 + -3.5996713966144598e+00 2.2106062035031790e+00 -4.1651707817581469e+00 + -3.9750817528006914e+00 9.2440907113372939e-01 -4.2072152751811860e+00 + -4.0450418658309886e+00 2.0817458877115858e-01 -4.2241594905489048e+00 + id 12283 + loc 7.2823017835617065e-02 6.6462701559066772e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1089426669058340e-01:2.6421189494443942e-01:3.1308136092673811e-01:2.5917545179695461e-01:1.0211020470972418e+00:3.1089115774791648e-01:1.9738096888005483e+00:2.6329800395165504e-01:2.8591886108455040e+00:3.0790189872788964e-01:3.8919966364498375e+00 + CVs 20 + 2.1463999972760830e-01 4.0366988612490912e-01 -1.9498182967376970e-01 + 4.6629463703175550e-01 8.1667370708872367e-01 -4.2498276985845573e-01 + 7.4108956171839824e-01 1.2432422066567079e+00 -6.5338026280236938e-01 + 1.0310334075140049e+00 1.6687850228616801e+00 -8.6032044710980782e-01 + 1.3204895563086392e+00 2.0542400069412943e+00 -1.0782149245761548e+00 + 1.5814765858751507e+00 2.3433295268237559e+00 -1.3790732698878843e+00 + 1.7910822821613983e+00 2.4842208913964825e+00 -1.7819234079205317e+00 + 1.9299275464906787e+00 2.4194831137932269e+00 -2.2319212105471942e+00 + 1.9876537349317154e+00 2.1518498105516888e+00 -2.6316661068710649e+00 + 2.0015755651700902e+00 1.7887920955454284e+00 -2.9476919988996233e+00 + 2.0274824642945193e+00 1.4103269458439205e+00 -3.2180821359666520e+00 + 2.1100740907372986e+00 1.0699017649354663e+00 -3.4947959557172497e+00 + 2.2484009309897730e+00 8.2599687869027150e-01 -3.8286853826276261e+00 + 2.3890859160815761e+00 7.6584794054763516e-01 -4.2381898883493605e+00 + 2.4529039334986895e+00 1.0000579613360485e+00 -4.6268497986410502e+00 + 2.3490543225130431e+00 1.5219709047012204e+00 -4.7342991788500246e+00 + 2.0604678569254480e+00 1.9766508811608210e+00 -4.3838569032955776e+00 + 1.8044585086342226e+00 2.1492665268234283e+00 -4.1173464453351274e+00 + 1.6611035507871437e+00 2.4808911940741423e+00 -4.3281371741558425e+00 + id 12284 + loc 6.0329145193099976e-01 8.7576597929000854e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0284857563499860e-01:3.5680330241755004e-01:5.3286701020360561e-01:3.3040145165720963e-01:1.0016505481506894e+00:3.0048431016973548e-01:1.7431589324271495e+00:4.0284454714924228e-01:2.1886102014344786e+00:3.1787332795452788e-01:3.0493783031354464e+00:3.7549983663211112e-01:3.7734806819594917e+00 + CVs 20 + 1.5912107934017275e-01 2.9447205192593040e-01 -6.7912601860070906e-02 + 3.2341152351257701e-01 5.7535615262661999e-01 -1.6331861731052696e-01 + 4.8557740010737777e-01 8.4824754434798133e-01 -2.8308672719025707e-01 + 6.3999903123697843e-01 1.1109958248035501e+00 -4.2919983032964476e-01 + 7.8204143678663252e-01 1.3569176229339042e+00 -6.0802196507703865e-01 + 9.0283894399856435e-01 1.5762547796002453e+00 -8.2421532043454104e-01 + 9.8897738653797473e-01 1.7556039522310998e+00 -1.0785322799196539e+00 + 1.0233998645172304e+00 1.8781399987319407e+00 -1.3634848302969718e+00 + 9.9049181405589937e-01 1.9275837920015897e+00 -1.6586202294041263e+00 + 8.8645893686620314e-01 1.8997545513831438e+00 -1.9342940790023724e+00 + 7.2398978212751719e-01 1.8067166565699726e+00 -2.1680751438916115e+00 + 5.2838552323854471e-01 1.6666883678096522e+00 -2.3644927618561886e+00 + 3.2138550757196610e-01 1.4901753124634012e+00 -2.5519077465833342e+00 + 1.0945344737700018e-01 1.2809533127237718e+00 -2.7435474243145812e+00 + -1.0753243119734955e-01 1.0443285557933926e+00 -2.9321734604646341e+00 + -3.2077877634102098e-01 7.8241487200910476e-01 -3.1243800996275173e+00 + -5.0495057665528587e-01 5.1061284312052635e-01 -3.3821754645511213e+00 + -6.2281336518826924e-01 2.8027862973670126e-01 -3.7788623145919216e+00 + -8.0493175749447310e-01 8.1898581031352169e-02 -4.0026996764625942e+00 + id 12285 + loc 8.5358309745788574e-01 2.7964940667152405e-01 397 + blend 0.0000000000000000e+00 + interp 3.9528709148533903e-01:3.3411532573453301e-01:2.8918391419046174e-02:3.3606148687256526e-01:1.0111318286648190e+00:3.9528313861442421e-01:1.9462980537895147e+00:3.5024159120776788e-01:2.4345917157979162e+00:3.4156245596914814e-01:3.0275321716982546e+00:3.6407216217672184e-01:3.6397091699726323e+00 + CVs 20 + -1.0882084393122453e+00 1.1792962540354379e-01 3.8227661301234989e-01 + -1.7395443298591255e+00 5.0619800145436572e-02 6.8432712229311587e-01 + -2.3275970592045501e+00 -9.0190454540049952e-02 9.7395820858405546e-01 + -2.9749104271351463e+00 -2.4705874254980442e-01 1.2403410535091608e+00 + -3.6669746268006418e+00 -4.2497856199338846e-01 1.4547137115441731e+00 + -4.3873608723842130e+00 -6.1220965364130375e-01 1.6039792258898604e+00 + -5.1295306441009609e+00 -7.9297306436388115e-01 1.6985359478906299e+00 + -5.8989530332154496e+00 -9.7295780773930707e-01 1.7638274534733771e+00 + -6.6923365456499457e+00 -1.1815636204169107e+00 1.8231299876832838e+00 + -7.4980272189299768e+00 -1.4668510930562775e+00 1.9002388459189672e+00 + -8.2864280245945885e+00 -1.8769167793895394e+00 2.0192140105250731e+00 + -9.0069987926125634e+00 -2.4287841002220882e+00 2.1894556878615128e+00 + -9.6109102395818979e+00 -3.1017748443362012e+00 2.4004258768509206e+00 + -1.0069218756949478e+01 -3.8604707719264786e+00 2.6326192540230000e+00 + -1.0373315025960890e+01 -4.6687959039607847e+00 2.8604080069461153e+00 + -1.0534690552450634e+01 -5.4899112516982678e+00 3.0439312407440537e+00 + -1.0567733935153848e+01 -6.2795497281247616e+00 3.1522705725178657e+00 + -1.0500613030214973e+01 -6.9839402749160682e+00 3.1817898016540145e+00 + -1.0465465909512291e+01 -7.4795575103382728e+00 3.1742071121922022e+00 + id 12286 + loc 9.2583113908767700e-01 9.4430726766586304e-01 1068 + blend 0.0000000000000000e+00 + interp 3.2309713952997082e-01:2.4498384353911229e-01:3.9484646715519445e-01:2.3735526040470176e-01:1.4637560117942341e+00:2.9296188694538683e-01:2.4046250201208208e+00:3.2309390855857556e-01:3.2079225826461770e+00:3.1913773372783394e-01:3.8258714673526373e+00 + CVs 20 + 1.2552836481074628e-01 3.9781140882743471e-01 -3.5100143592871069e-01 + 2.2261061297488999e-01 7.6004499104889922e-01 -6.5599924530731724e-01 + 3.0495409290040493e-01 1.1039741367952738e+00 -9.3995734899454542e-01 + 3.8411484865408335e-01 1.4357780063972581e+00 -1.2180541143794827e+00 + 4.7370226069290478e-01 1.7509111459290720e+00 -1.4936113249661227e+00 + 5.8833036332870803e-01 2.0376580122524217e+00 -1.7729492287214885e+00 + 7.4272765902645532e-01 2.2780338998368901e+00 -2.0691296248927409e+00 + 9.4808453818187532e-01 2.4464771161561352e+00 -2.3921825279924338e+00 + 1.2049995497872108e+00 2.5117939432223739e+00 -2.7363757211251252e+00 + 1.5070835171124914e+00 2.4508521586487881e+00 -3.0811548182556332e+00 + 1.8472949447686680e+00 2.2551278274344466e+00 -3.4094106800889770e+00 + 2.2200656956450073e+00 1.9292443441629494e+00 -3.7191583019737475e+00 + 2.6214580546881616e+00 1.5010980097953561e+00 -4.0225805233868952e+00 + 3.0367109924090645e+00 1.0072869126104473e+00 -4.3412034564313933e+00 + 3.4286072550666122e+00 4.5608631568598468e-01 -4.7199787239258777e+00 + 3.7337252691614760e+00 -1.4843680990833907e-01 -5.2412523634001023e+00 + 3.8701772718594261e+00 -7.3200726272896266e-01 -5.9604943037288427e+00 + 3.8237204666377025e+00 -1.1845495421725376e+00 -6.7936153464913254e+00 + 3.8075958190150576e+00 -1.5091194642673746e+00 -7.4990038189388937e+00 + id 12287 + loc 4.1737180203199387e-02 6.8104773759841919e-01 403 + blend 0.0000000000000000e+00 + interp 4.6698111786766971e-01:4.0099323825602667e-01:4.6324824788231411e-02:3.5387140385548121e-01:7.5708398598032767e-01:4.2653985942205547e-01:1.1677485524886697e+00:4.6697644805649108e-01:1.7990299489726462e+00:3.3766070731917996e-01:2.0856550723926834e+00:4.2824370219792973e-01:2.9341141398852963e+00:3.2857576850563153e-01:3.4081825188166359e+00 + CVs 20 + -6.8026366166045321e-02 1.2990803823911401e-01 3.1370129440466694e-02 + -1.3960534808283584e-01 2.7302242613748562e-01 5.9582122980811975e-02 + -2.1353899779016006e-01 4.2430644668144379e-01 8.9907216289081188e-02 + -2.8900983023170657e-01 5.8539560346562514e-01 1.2915517863719794e-01 + -3.6902987807158699e-01 7.5209350999367308e-01 1.7645531835755840e-01 + -4.5450444541333213e-01 9.1802173552270872e-01 2.3253391645187207e-01 + -5.4465014316798999e-01 1.0768556643003575e+00 2.9985193890695300e-01 + -6.3720464364348661e-01 1.2241545442060009e+00 3.8126254498932927e-01 + -7.2871329458137124e-01 1.3577731504603432e+00 4.7878372413978687e-01 + -8.1858632196869374e-01 1.4773932281224407e+00 5.9277000605694030e-01 + -9.1059806518563335e-01 1.5808367365843414e+00 7.2275618237507988e-01 + -1.0111950815274307e+00 1.6629837414094624e+00 8.6859853204893289e-01 + -1.1228934094417469e+00 1.7171312278656368e+00 1.0307365017736556e+00 + -1.2348386115958596e+00 1.7396451519978753e+00 1.2097395605271124e+00 + -1.3298301793381579e+00 1.7418064783366720e+00 1.4041581732470496e+00 + -1.4144506111405672e+00 1.7470500921537055e+00 1.6133108559380589e+00 + -1.5210808708043004e+00 1.7546118924061807e+00 1.8417234845812338e+00 + -1.6710140843226449e+00 1.7422089691437417e+00 2.0885287945692714e+00 + -1.9064245221321294e+00 1.7769733196334414e+00 2.3275573607530218e+00 + id 12288 + loc 5.7400298118591309e-01 2.3983910679817200e-01 406 + blend 0.0000000000000000e+00 + interp 4.3754446970878391e-01:3.0897361585683958e-01:5.7643486740689664e-01:4.0599529252404071e-01:1.0000262081360205e+00:3.6571390506034757e-01:1.8183701335333102e+00:3.0222187556556479e-01:2.7121632020531901e+00:4.3754009426408685e-01:3.2371344004595866e+00:3.2078645726625510e-01:3.8534165537136928e+00 + CVs 20 + -1.7474566573882047e-01 7.1731596547575660e-02 8.3911342214748108e-02 + -3.0827435669939096e-01 9.5607433856749177e-02 1.7179574733655836e-01 + -3.9107131647497306e-01 7.4057967069960678e-02 2.6062573118565568e-01 + -4.5377747757900289e-01 3.8183525181811784e-02 3.5760606851751453e-01 + -4.9501753942516641e-01 -7.6159788519437055e-03 4.6097172101838468e-01 + -5.1744889518232040e-01 -5.8328007179303309e-02 5.6931721431331350e-01 + -5.3140214539670050e-01 -1.0922812817386646e-01 6.8326843586545860e-01 + -5.5136979726464586e-01 -1.5830887076613220e-01 8.0493635594079971e-01 + -5.7526488914700735e-01 -2.0664934903611676e-01 9.3099535266897460e-01 + -5.7375918352691746e-01 -2.5376239048551569e-01 1.0485504363888585e+00 + -5.2767143138643058e-01 -2.9542024006229323e-01 1.1466851538590963e+00 + -4.6646568469426736e-01 -3.3285205999021394e-01 1.2315945202855503e+00 + -4.2911525525930005e-01 -3.7512483293937982e-01 1.3182335331395301e+00 + -4.1229030910264641e-01 -4.2389549299678775e-01 1.4057385572200427e+00 + -3.8736798470805839e-01 -4.7001075920616076e-01 1.4800661133088169e+00 + -3.4407827927637064e-01 -5.0543543584315176e-01 1.5356737011870332e+00 + -2.9979917781213344e-01 -5.3126269700121609e-01 1.5824860586708027e+00 + -2.7682485531076806e-01 -5.5864627241787901e-01 1.6338409049687588e+00 + -3.7532255172610041e-01 -6.8634253373942222e-01 1.7355704772915184e+00 + id 12289 + loc 7.7622824907302856e-01 5.2985018491744995e-01 1048 + blend 0.0000000000000000e+00 + interp 3.1679432429533733e-01:2.5404487008470361e-01:2.9331792819942137e-03:3.0817171141788363e-01:8.3860551519453286e-01:2.9387787189607451e-01:1.2166571986413013e+00:2.6249167547804581e-01:2.0182290757078332e+00:3.1679115635209437e-01:2.8736216039458906e+00:2.1890747598859797e-01:3.2003594212133843e+00 + CVs 20 + 8.2472191806304607e-02 7.4433323298337983e-01 -4.6659985562380046e-01 + 2.4772815867431780e-01 1.5197227907415303e+00 -9.0001499063266788e-01 + 4.7539339111893009e-01 2.3274469950326675e+00 -1.2691672637734437e+00 + 7.2134579105610441e-01 3.1241721900305603e+00 -1.4379914539267620e+00 + 1.0021852994462903e+00 3.7862701320596672e+00 -1.2700858068660796e+00 + 1.2903408080607974e+00 4.2025875195314759e+00 -8.2913405409656615e-01 + 1.5168629707803123e+00 4.3416660234296813e+00 -2.5427828398394259e-01 + 1.6294119441046211e+00 4.2283926759535504e+00 3.4649226163494795e-01 + 1.6100867120164502e+00 3.9105822532894585e+00 8.8027655883749922e-01 + 1.4983148330693228e+00 3.4612738637276879e+00 1.2727052352293622e+00 + 1.3625949701153099e+00 2.9517604591893010e+00 1.5338793474590140e+00 + 1.1986476882139023e+00 2.3945953839037704e+00 1.7602867411221312e+00 + 9.4665999454063676e-01 1.7546659127944739e+00 2.0096640122133360e+00 + 5.5999675666037330e-01 9.4366744420831283e-01 2.2582081955464339e+00 + 5.8394983737946854e-02 -9.9680294154865789e-02 2.4870962653634310e+00 + -2.8366028032263679e-01 -1.3209101710673790e+00 2.8613196541335695e+00 + -4.7906977741762891e-04 -2.4528719355552018e+00 3.5520975188554189e+00 + 9.7051560720705232e-01 -2.9828924895332669e+00 4.4415185647722177e+00 + 1.9713346714983133e+00 -2.7929943015518193e+00 5.0806608912078604e+00 + id 12290 + loc 2.0515289902687073e-01 1.3621869683265686e-01 409 + blend 0.0000000000000000e+00 + interp 4.9607476435000958e-01:4.2937032228881339e-01:7.4918446787437021e-01:3.2797281755119406e-01:1.0644063939640469e+00:4.0794257321826116e-01:1.7772010791309383e+00:4.1246423414728051e-01:2.0409059318309275e+00:4.9606980360236608e-01:2.4930382165512790e+00:4.0306613869433139e-01:3.0010460939504973e+00:3.2223111482918343e-01:3.9222671836196192e+00 + CVs 20 + -8.8303537819940520e-02 1.8165428900231603e-01 -3.9989336178464574e-01 + -1.7629787585354620e-01 3.2425374924117351e-01 -7.6603408315892052e-01 + -2.4362139653194168e-01 4.4137372677281522e-01 -1.1282621358819811e+00 + -2.9368509601540371e-01 5.3640207659893946e-01 -1.4972429948524668e+00 + -3.3495075348132608e-01 6.0712525256587446e-01 -1.8683794055953067e+00 + -3.7050720033574108e-01 6.5526253703475845e-01 -2.2391179564548471e+00 + -4.0037288257932024e-01 6.8182435702555710e-01 -2.6084270103377722e+00 + -4.2530835155173230e-01 6.8266158623264195e-01 -2.9751472134694295e+00 + -4.4786246255121276e-01 6.5197326797336697e-01 -3.3395630564925494e+00 + -4.7040353353142433e-01 5.8691860458019063e-01 -3.7023511900494230e+00 + -4.9369535742820481e-01 4.8762060812533292e-01 -4.0602103739518256e+00 + -5.1877488183992548e-01 3.5554210814123000e-01 -4.4068256576705442e+00 + -5.4522252381501546e-01 1.9214696353998706e-01 -4.7394769112432380e+00 + -5.6587125857795462e-01 -3.1072288495237466e-03 -5.0615526461254383e+00 + -5.6849652168333276e-01 -2.3317965873147672e-01 -5.3739147013719206e+00 + -5.4331454184993822e-01 -5.0025447337149753e-01 -5.6673942601585328e+00 + -4.8731852066380099e-01 -8.0468605356450906e-01 -5.9295279479269105e+00 + -4.0173652402781102e-01 -1.1457401564155116e+00 -6.1611871453678013e+00 + -2.8528579060927189e-01 -1.5101217811073457e+00 -6.4251693792608737e+00 + id 12291 + loc 2.5220927596092224e-01 8.1583261489868164e-01 1085 + blend 0.0000000000000000e+00 + interp 3.2501065859543293e-01:2.6569562445015227e-01:9.3345100289023353e-01:2.6772251860311264e-01:1.3281204904232220e+00:2.5038125257203159e-01:2.0039821616284277e+00:3.2500740848884702e-01:2.9992113105748062e+00:2.8673357748338252e-01:3.8565613236008502e+00 + CVs 20 + -1.0331177243691286e-01 4.7497877326817040e-01 3.6806581963548701e-01 + -2.6300409649656487e-01 8.7765527278598821e-01 6.4771522153972083e-01 + -4.7000775067403822e-01 1.2468778408538586e+00 8.9533676197518897e-01 + -7.3172580352465633e-01 1.5951160913997415e+00 1.1181398892946552e+00 + -1.0546019121259036e+00 1.9045438309972107e+00 1.2853321960115653e+00 + -1.4353930671396133e+00 2.1493886484639910e+00 1.3657729480890657e+00 + -1.8544406854028501e+00 2.2945210596145680e+00 1.3319158914299578e+00 + -2.2666949720175325e+00 2.3025131007924724e+00 1.1751146911192170e+00 + -2.6100649581320914e+00 2.1517972218237378e+00 9.3190411892604552e-01 + -2.8511256528429447e+00 1.8658038657279445e+00 6.9344930754743461e-01 + -3.0155480219338595e+00 1.4982626527374729e+00 5.3824039835101001e-01 + -3.1351591339017268e+00 1.0845490938249107e+00 4.9314117755747000e-01 + -3.2209462853551307e+00 6.4884173054332828e-01 5.7486945607630258e-01 + -3.2789847335355704e+00 2.3155431465262699e-01 8.1575266375270272e-01 + -3.3083352838262323e+00 -9.4109681172541051e-02 1.2452368841902488e+00 + -3.3314637791962594e+00 -2.5996303994274689e-01 1.8061203530589331e+00 + -3.4139650596002147e+00 -2.4386978476345111e-01 2.4125768502780880e+00 + -3.5716791565244064e+00 -3.1998475627144529e-02 3.0077924315740838e+00 + -3.7208076147729638e+00 -2.9480579303965149e-01 3.5154367245361828e+00 + id 12292 + loc 8.4877383708953857e-01 1.6290681064128876e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8356024032196870e-01:3.8363013271884583e-01:1.9548419597870637e-01:3.2249371772055507e-01:9.8255299688908304e-01:3.6783792776163943e-01:1.5880117114374048e+00:2.7306188945916254e-01:2.0139407658438397e+00:4.3125222254975865e-01:2.4888078469487200e+00:4.8355540471956548e-01:2.9927253399137452e+00:3.0957647726294640e-01:3.7696030448056277e+00 + CVs 20 + -1.3812800513187615e-01 3.6726833665949954e-01 -2.4660154083071173e-01 + -2.7898343773030132e-01 6.5678341978344057e-01 -3.6359906171982015e-01 + -4.3407263438298160e-01 9.3000099672822367e-01 -4.3918263688037312e-01 + -6.0270629449752899e-01 1.2003914936831479e+00 -5.1371064729428806e-01 + -7.8306195828458558e-01 1.4540377529008284e+00 -5.8107082023652890e-01 + -9.6721161932033195e-01 1.6710573401380218e+00 -6.3167275506221610e-01 + -1.1409637750557187e+00 1.8310581829327186e+00 -6.5542267725502856e-01 + -1.2865914094403539e+00 1.9223921087232356e+00 -6.5112615758720882e-01 + -1.3876955982813302e+00 1.9485662829751123e+00 -6.3113747705981438e-01 + -1.4435552442093518e+00 1.9300543223195552e+00 -6.1287067438047049e-01 + -1.4793241360095410e+00 1.8887121798468414e+00 -6.0055218443586178e-01 + -1.5227924766132948e+00 1.8258237371838417e+00 -5.8460593319566168e-01 + -1.5828122836506604e+00 1.7296507386213613e+00 -5.5936315971079875e-01 + -1.6543860343917607e+00 1.5925221951191952e+00 -5.3002182591752911e-01 + -1.7271850112116445e+00 1.4185932018894105e+00 -5.1108441013094463e-01 + -1.7825119042339954e+00 1.2405741168077129e+00 -5.3105080194140664e-01 + -1.7927110015584578e+00 1.1455312513947935e+00 -6.1493162257985556e-01 + -1.7628260705435435e+00 1.1754258368773556e+00 -7.1556041308002871e-01 + -1.7710038523398957e+00 9.3359160877807668e-01 -9.1459048488768857e-01 + id 12293 + loc 2.7470114827156067e-01 2.5245732069015503e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5102386395332505e-01:4.5101935371468554e-01:1.0092910518422205e-04:3.0153339328158479e-01:5.9640430020069424e-01:4.0287535480198067e-01:1.3338626217279221e+00:3.0175272296362171e-01:2.0408984204222711e+00:3.3810516054900702e-01:2.9004271825242380e+00:3.7457503097549055e-01:3.2817822291427348e+00 + CVs 20 + -7.1574435243406523e-02 3.5453129424953100e-01 -1.3672540484580417e-01 + -1.8647633549275341e-01 7.1460550748376184e-01 -2.7590628397891709e-01 + -3.2853111291556036e-01 1.0789303483844208e+00 -4.2821349496176531e-01 + -4.9676183615226710e-01 1.4363543577242215e+00 -5.8921547466070057e-01 + -7.0786711712939443e-01 1.7810497594872139e+00 -7.5303591153381755e-01 + -9.7769607718418428e-01 2.1087881998885774e+00 -9.2892499534009498e-01 + -1.3109652454079064e+00 2.4057405524878188e+00 -1.1387634133282007e+00 + -1.6969439727331186e+00 2.6482946303030239e+00 -1.4006942840916918e+00 + -2.1176064483963604e+00 2.8051098383550785e+00 -1.7285122872628955e+00 + -2.5430662418667058e+00 2.8282720308627218e+00 -2.1274065681513514e+00 + -2.9268394509924835e+00 2.6668918040343925e+00 -2.5516795714030533e+00 + -3.2369455537500404e+00 2.3033379480555585e+00 -2.8888280853555366e+00 + -3.4489909212332885e+00 1.7944643997243583e+00 -3.0247806680498672e+00 + -3.5473596192961745e+00 1.2602959965423952e+00 -2.9590486042369637e+00 + -3.5331560937538580e+00 7.8180066710947327e-01 -2.7351593242059629e+00 + -3.4051872082751204e+00 5.1508108317323764e-01 -2.3307166206317791e+00 + -3.2358800380734833e+00 7.8430294001889855e-01 -1.9149492609886136e+00 + -3.1373421372930510e+00 1.2208930549877131e+00 -1.8369361225297198e+00 + -2.9479607742246534e+00 1.4451079437105592e+00 -1.5944913732346528e+00 + id 12294 + loc 4.2045867443084717e-01 8.1157881021499634e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5020942899348881e-01:2.7421571681815787e-01:7.1307930273117226e-01:4.5020492689919889e-01:1.3504821731571051e+00:2.7143486427678210e-01:2.0333891631465311e+00:4.3408129377339910e-01:3.0000824564305599e+00:2.6480723255907662e-01:3.3748579738274271e+00 + CVs 20 + 2.0971248508508919e-01 3.5695092569240028e-01 -3.1571674094127516e-01 + 4.5483297001771200e-01 7.2755682820341072e-01 -6.1628265676942340e-01 + 7.4480367372765321e-01 1.1041843696940665e+00 -9.0729827039131639e-01 + 1.0818209594710395e+00 1.4792755453862754e+00 -1.1908372408336159e+00 + 1.4539167949683387e+00 1.8404620374273328e+00 -1.4893179557928744e+00 + 1.8314441398345025e+00 2.1591021776088923e+00 -1.8573033729121604e+00 + 2.1719722823471312e+00 2.3698048924504778e+00 -2.3413829346811497e+00 + 2.4210259088611692e+00 2.3664475919412427e+00 -2.9226283641974677e+00 + 2.5408742780256186e+00 2.1048326134759474e+00 -3.4829715620172408e+00 + 2.5599545392300058e+00 1.6750457890264314e+00 -3.9157946597944395e+00 + 2.5405190359061351e+00 1.1886029314181457e+00 -4.1988126388889038e+00 + 2.5428849929003641e+00 7.3474031084617164e-01 -4.3714080140122649e+00 + 2.5803215244855511e+00 3.5336323486721849e-01 -4.5238425855920994e+00 + 2.6272726683323091e+00 3.8045379206912325e-02 -4.7578528989512723e+00 + 2.6718476174345325e+00 -1.9436077940700283e-01 -5.1305486455614862e+00 + 2.7103613981472447e+00 -2.6057735405003457e-01 -5.6293054910393572e+00 + 2.7110788718569019e+00 -6.3037450953196225e-02 -6.1535457628319428e+00 + 2.6319066220522327e+00 2.4849309170897224e-01 -6.5707433262398034e+00 + 2.4927392767681007e+00 4.0484576226959756e-01 -6.9280883563891944e+00 + id 12295 + loc 9.4722062349319458e-01 9.7689938545227051e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4533840700293900e-01:3.0166139357001248e-01:4.5352910670544699e-02:3.4533495361886896e-01:9.0955593698940496e-01:1.7462358210409354e-01:2.0023132039336793e+00:2.8663624481218980e-01:2.8939545530518620e+00:2.8293164629050277e-01:3.4437274150671140e+00 + CVs 20 + 1.3817620234333033e-01 2.5796410955601623e-01 -2.1189431604907030e-01 + 2.8564506898521269e-01 5.1208032100259437e-01 -4.1951258427846422e-01 + 4.2097273759377873e-01 7.6949984236190394e-01 -6.2968458503230085e-01 + 5.3198496707740928e-01 1.0311118544254563e+00 -8.4760174906826524e-01 + 6.1522618192411960e-01 1.2929705038435033e+00 -1.0777234383912724e+00 + 6.6869441609876790e-01 1.5488739198033890e+00 -1.3252770644432412e+00 + 6.9225095769238076e-01 1.7908198761258893e+00 -1.5966343459055921e+00 + 6.8812369792447758e-01 2.0085780806847486e+00 -1.8980901066429690e+00 + 6.6053938401031909e-01 2.1888318681818362e+00 -2.2332894380966835e+00 + 6.1421680409911472e-01 2.3166496470111566e+00 -2.6008508120626881e+00 + 5.5358613659033729e-01 2.3757055631233004e+00 -2.9969994042069543e+00 + 4.8533467005557163e-01 2.3473912426391514e+00 -3.4131575035290731e+00 + 4.2197661786702489e-01 2.2181718940680488e+00 -3.8331859902946177e+00 + 3.8064403021116333e-01 1.9831409906617317e+00 -4.2341025705728121e+00 + 3.7886246662871670e-01 1.6455171933315258e+00 -4.5872281898042377e+00 + 4.3217208774935201e-01 1.2161768688994119e+00 -4.8561210443282317e+00 + 5.4107416360282623e-01 7.2121304883991100e-01 -4.9959269124318268e+00 + 6.8748622222536226e-01 2.0609301457688389e-01 -4.9837247317777900e+00 + 8.3308450371269616e-01 -2.9948952826343811e-01 -4.9680295048653234e+00 + id 12296 + loc 8.1887060403823853e-01 2.7707365155220032e-01 1084 + blend 0.0000000000000000e+00 + interp 3.2761168134525237e-01:2.9649305466229886e-01:3.5495717897877777e-01:3.2260284549145374e-01:1.2852177623104082e+00:3.2760840522843893e-01:1.9948199388727987e+00:2.9874478707948321e-01:2.6659267511565972e+00:2.8925306670851991e-01:3.1352839643760300e+00:3.1668485557101589e-01:3.8933152829777642e+00 + CVs 20 + 6.7938522084413228e-02 2.6918836204980384e-01 -3.1173806581175953e-02 + 1.5309059260219110e-01 5.2174422695501776e-01 -5.5161364008531805e-02 + 2.2689374830094486e-01 7.5670790445247960e-01 -9.7202838673675018e-02 + 2.6213530519040873e-01 9.6239626075992257e-01 -1.7540406510195306e-01 + 2.5693926738508555e-01 1.1368464517880115e+00 -2.9491513547667048e-01 + 2.4381765593694432e-01 1.3228047167986798e+00 -4.5740867519671458e-01 + 2.9419244228440494e-01 1.5511324624444776e+00 -6.2969724947625494e-01 + 4.6849639566371959e-01 1.7816931716247439e+00 -7.6647632187154846e-01 + 7.7873813623251875e-01 1.9600112525208910e+00 -8.2234550126339778e-01 + 1.1559315641004599e+00 2.0465275731604837e+00 -7.3841301561622430e-01 + 1.5059699187391411e+00 2.0422141883553673e+00 -5.1117294393185264e-01 + 1.8026585378721549e+00 1.9828187905155570e+00 -1.5663546974845510e-01 + 2.0118020107170267e+00 1.8832940741870861e+00 3.0318050078259318e-01 + 2.0692814964529394e+00 1.7421294989145863e+00 7.0133481130641162e-01 + 2.0100188924188873e+00 1.5739605425759102e+00 8.0918074089510073e-01 + 1.8882383670907439e+00 1.3035140826831082e+00 5.6649169104943486e-01 + 1.6225308638795282e+00 6.2987491426279874e-01 4.6999132070486505e-02 + 9.7540154974783078e-01 -6.3233209975052551e-01 -2.0798997477799128e-01 + 1.0594100391401837e+00 -7.0713338452695806e-01 -3.6534104708685344e-02 + id 12297 + loc 1.6603429615497589e-01 8.6697173118591309e-01 372 + blend 0.0000000000000000e+00 + interp 5.3741738043937048e-01:3.8571376399921914e-01:7.4450409466834566e-02:5.3741200626556607e-01:6.0784720031291450e-01:4.8021405635926567e-01:9.9827432332941979e-01:3.2538334586729889e-01:1.9373771338109074e+00:3.9549718055393601e-01:2.8849343222764312e+00:3.5743396804443484e-01:3.4254536693551305e+00 + CVs 20 + -3.3674271560901436e-01 6.1137987961784401e-01 -1.5309483618968744e-01 + -6.2717020597246453e-01 1.2392339720613594e+00 -3.2933606890358497e-01 + -8.2512744862924459e-01 1.8523676876389596e+00 -5.5477977370426057e-01 + -8.6629444620094931e-01 2.3886273822872321e+00 -8.3082758377941313e-01 + -7.0906096990038847e-01 2.7872717053128122e+00 -1.1392796112511940e+00 + -3.6301113405361085e-01 3.0124225279896049e+00 -1.4559881818878753e+00 + 1.2991272588742642e-01 3.0313124238044686e+00 -1.7488534239968798e+00 + 7.1252323352303093e-01 2.8263388980625823e+00 -1.9929801434703109e+00 + 1.3197347722731492e+00 2.4048677381597408e+00 -2.1769821507002911e+00 + 1.8854907956179121e+00 1.7938848696667753e+00 -2.2919361826931808e+00 + 2.3622957909241724e+00 1.0507876472384821e+00 -2.3279111352385482e+00 + 2.7695623946529322e+00 2.6636859110827005e-01 -2.2813017766587431e+00 + 3.2018971272025620e+00 -4.6295562427523573e-01 -2.1768088515205957e+00 + 3.7414417592461429e+00 -1.0244083744452919e+00 -2.1016982159171458e+00 + 4.3274589739230542e+00 -1.2989343663314854e+00 -2.1863006577478923e+00 + 4.8362066701207338e+00 -1.3463421895077061e+00 -2.4149196750081052e+00 + 5.3220646853255555e+00 -1.2499570037881340e+00 -2.6940878423415220e+00 + 5.8399198896550146e+00 -9.9204995979576793e-01 -2.9710818125836140e+00 + 6.4498720645621468e+00 -5.8923732812692853e-01 -3.1906335058203754e+00 + id 12298 + loc 2.7781876921653748e-01 5.7438945770263672e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4800414385615955e-01:4.0592815233357377e-01:5.7615900180689605e-01:3.3470187339916407e-01:1.0000173176262970e+00:4.2265577957414535e-01:1.4371390754167452e+00:2.9575080418344624e-01:2.0532058887739320e+00:3.4775864481003455e-01:2.9894348221944607e+00:2.9692257017496004e-01:3.5557622836066223e+00:4.4799966381472101e-01:3.9936969422681949e+00 + CVs 20 + 4.5420980007203016e-02 2.8463391567947410e-01 1.2595998010128118e-01 + 1.1049305433020454e-01 5.5145838653072454e-01 1.9739922941955071e-01 + 1.9683943960487044e-01 8.1752889396956885e-01 2.3244486127404540e-01 + 3.0886571864250545e-01 1.0971433493210643e+00 2.4296691064305614e-01 + 4.5009701996142476e-01 1.3828836085403093e+00 2.1949466207644208e-01 + 6.2340822396779116e-01 1.6633980476272909e+00 1.4963205734150220e-01 + 8.2915457932073244e-01 1.9177993244326084e+00 1.6240247689325971e-02 + 1.0591740979465349e+00 2.1115361440844147e+00 -1.9468086878604729e-01 + 1.2894203694290496e+00 2.2056305776884817e+00 -4.8055094290651945e-01 + 1.4871977982641311e+00 2.1752386872139691e+00 -8.1609740155156529e-01 + 1.6271265299444493e+00 2.0173316956988940e+00 -1.1582751735258465e+00 + 1.7003146260548272e+00 1.7498528394959059e+00 -1.4530083208224440e+00 + 1.7238432197978673e+00 1.4075582993378910e+00 -1.6658050252011987e+00 + 1.7262369809697018e+00 1.0244067173481091e+00 -1.8155392675885054e+00 + 1.7218181131406813e+00 6.4655829701878009e-01 -1.9789124355567349e+00 + 1.7240316407980381e+00 3.9067055218273417e-01 -2.2468551755516799e+00 + 1.7854800411745828e+00 4.0318459582704969e-01 -2.5328032386278991e+00 + 1.9263813025774499e+00 5.8690279821732894e-01 -2.5702911978933316e+00 + 2.0630535611133558e+00 7.6154813859950021e-01 -2.6431229537741974e+00 + id 12299 + loc 5.2797484397888184e-01 1.4863504469394684e-01 409 + blend 0.0000000000000000e+00 + interp 4.8903066351345825e-01:2.9821622932453379e-01:7.8660613243006772e-02:3.6785019049720097e-01:9.2887952676045404e-01:4.8902577320682317e-01:1.3163200475373680e+00:4.0597093299333153e-01:2.0347174041697360e+00:3.0268956310889972e-01:2.4229303012371890e+00:3.5271455004669072e-01:3.0309577272027903e+00:4.2940726475315372e-01:3.7594619051278504e+00 + CVs 20 + -3.6281051856307217e-01 2.4558486394289680e-01 1.8657977131848061e-01 + -7.0770800405461476e-01 4.6055529052971106e-01 3.4833662553657746e-01 + -1.0618334936029250e+00 6.5954565533243814e-01 4.8526049827376638e-01 + -1.4367312936036987e+00 8.4704200874013602e-01 6.0396676971714824e-01 + -1.8259219672432005e+00 1.0190319054567145e+00 7.0812755622822521e-01 + -2.2229862720426232e+00 1.1753864101113476e+00 7.9856376635500914e-01 + -2.6286516875047794e+00 1.3155602560190314e+00 8.7575201518294055e-01 + -3.0516951457574040e+00 1.4320232495490228e+00 9.4154627052469597e-01 + -3.4994414284810982e+00 1.5113824024638061e+00 9.9774601379544148e-01 + -3.9708254423292075e+00 1.5407262688231638e+00 1.0451800399489675e+00 + -4.4597715337383184e+00 1.5091676559249911e+00 1.0833348964427130e+00 + -4.9585682969822678e+00 1.4053152407349581e+00 1.1092983123270421e+00 + -5.4552457180628480e+00 1.2185420040058537e+00 1.1158266385961995e+00 + -5.9315250630615362e+00 9.4398322677496393e-01 1.0898520215189507e+00 + -6.3656057759099181e+00 5.8250407351256284e-01 1.0151524736295672e+00 + -6.7318757528342896e+00 1.3540204839158454e-01 8.8017130707963021e-01 + -6.9988593643490757e+00 -3.9207088159502890e-01 6.8748975220584163e-01 + -7.1489277210643198e+00 -9.7202940498829227e-01 4.5660986901019357e-01 + -7.3830847402503199e+00 -1.4046332673927053e+00 3.0481482546725430e-01 + id 12300 + loc 7.5072363018989563e-02 3.1880247592926025e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0031655644277162e-01:5.0031155327720722e-01:3.9230652273393474e-01:3.7030022295530607e-01:1.0954106188255710e+00:3.1925649842847337e-01:2.1302935989910563e+00:3.9216388092110210e-01:2.9990055331875540e+00:3.5744619347802647e-01:3.7531449985703542e+00 + CVs 20 + -2.1787427821237609e-01 4.3839870903267841e-01 -1.4296724940046102e-01 + -4.0199113374383866e-01 8.8598292567578629e-01 -2.8523774833938365e-01 + -5.5529823297472758e-01 1.3364406031310703e+00 -4.4492554564855230e-01 + -6.8269268041301212e-01 1.7705867327231628e+00 -6.4791872044209153e-01 + -7.9041362581769969e-01 2.1565736499865631e+00 -9.2243561683119724e-01 + -8.9471106313526283e-01 2.4627447279084009e+00 -1.2779319833819034e+00 + -1.0197425972179133e+00 2.6683406446783433e+00 -1.6910828259571207e+00 + -1.1879022467584439e+00 2.7713206677952082e+00 -2.1132886489902591e+00 + -1.4124199834111866e+00 2.7777933766903034e+00 -2.5001843443466401e+00 + -1.7006544897227562e+00 2.6686673324989343e+00 -2.8247602239674636e+00 + -2.0265071620333792e+00 2.4223565528613378e+00 -3.0381071067468293e+00 + -2.3184780380180152e+00 2.0964600541746865e+00 -3.0978430292005905e+00 + -2.5415771339200903e+00 1.7571657925762372e+00 -3.0219374140366293e+00 + -2.6825655227643779e+00 1.4471199553763827e+00 -2.8443386727522983e+00 + -2.7336172973011630e+00 1.2050630703403140e+00 -2.6034419603137691e+00 + -2.7012989717451124e+00 1.0379435357050277e+00 -2.3266284779511421e+00 + -2.5916605042994623e+00 9.2323988988119632e-01 -2.0341419759727679e+00 + -2.3870165700140715e+00 7.8027456609829882e-01 -1.6864910105868334e+00 + -2.3676766652163264e+00 6.8867024465304927e-01 -1.5354526380109284e+00 + id 12301 + loc 5.1955980062484741e-01 4.9002921581268311e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4914526582046221e-01:3.4137752489720691e-01:3.2023651461236380e-01:3.4910345765689144e-01:9.5623390135484942e-01:2.6673710635051234e-01:1.7774361163943784e+00:3.3940280864258443e-01:2.1390604238292221e+00:4.4914077436780403e-01:2.9622834113389183e+00:3.1579675078119479e-01:3.2068736369140067e+00:4.3750616897925232e-01:3.8345717812823534e+00 + CVs 20 + -1.5537510693308870e-01 1.4555544057616590e-01 2.2476333825146755e-01 + -3.1849051049838506e-01 2.9290046406834064e-01 4.6239111872665661e-01 + -4.7331571513773996e-01 4.4374466884274205e-01 7.0053431014431355e-01 + -6.0552547444739480e-01 5.9222606927460619e-01 9.2359715136445897e-01 + -7.0405360813432127e-01 7.3097721003257399e-01 1.1124071412482506e+00 + -7.5693546882695650e-01 8.5619429227436294e-01 1.2457497759430947e+00 + -7.5960052966673874e-01 9.7606401773218510e-01 1.3272869223645998e+00 + -7.1041579892350837e-01 1.1077607522259973e+00 1.3723627298702878e+00 + -6.1606845304042579e-01 1.2735427792679779e+00 1.4008121487199630e+00 + -5.1261543813666322e-01 1.4588413726595562e+00 1.4683434934392707e+00 + -4.5098704930431460e-01 1.5740617111808755e+00 1.6315981487805162e+00 + -4.6119296786790548e-01 1.5395275627016409e+00 1.8865429374907281e+00 + -5.5583078471087244e-01 1.3875022139743094e+00 2.1813823541756787e+00 + -7.3182428301756774e-01 1.2059858814510553e+00 2.4642938729784882e+00 + -9.6786783891304329e-01 1.0049773510577082e+00 2.7358761202042357e+00 + -1.2176806515640652e+00 7.2510439203112376e-01 3.0517865687018717e+00 + -1.3854620409063296e+00 3.8205281324880769e-01 3.4724415444255299e+00 + -1.3780748348780414e+00 8.7829815936277811e-02 3.9959893706877474e+00 + -1.2054372019392923e+00 -1.1870337379413332e-01 4.5825855894683283e+00 + id 12302 + loc 9.8227196931838989e-01 9.5278185606002808e-01 411 + blend 0.0000000000000000e+00 + interp 4.5475197286284119e-01:4.5474742534311258e-01:2.7675059017927772e-02:3.4980883091267811e-01:7.0408121402328805e-01:3.1292618639982445e-01:1.2063750504852471e+00:3.7038905399097632e-01:2.0189576133671543e+00:2.5789916688318393e-01:2.9486784953635028e+00:4.2744991327314419e-01:3.3444727801283003e+00 + CVs 20 + 1.0435252871944973e+00 2.1255104017212781e-01 -2.9376455095403514e-01 + 1.7714852870714439e+00 2.4267854157670130e-01 -5.4356935575938059e-01 + 2.4409847758680026e+00 2.1716837412456386e-01 -7.7212841590571013e-01 + 3.1388933843785578e+00 1.7266220430854484e-01 -9.8351283673238521e-01 + 3.8524517675932328e+00 1.0097520277811256e-01 -1.1691566920065108e+00 + 4.5683824916269389e+00 -4.6875349601401828e-03 -1.3292095726266973e+00 + 5.2754472943945219e+00 -1.5683102414997419e-01 -1.4689805872831743e+00 + 5.9621485230486204e+00 -3.7715141831505949e-01 -1.5945860233433804e+00 + 6.6074873417217006e+00 -6.8745228060517705e-01 -1.7120418137796156e+00 + 7.1720571951494660e+00 -1.0945837760763548e+00 -1.8318927128566593e+00 + 7.6210687113764601e+00 -1.5859449539937784e+00 -1.9599695171213773e+00 + 7.9458199121317286e+00 -2.1354494989071031e+00 -2.0837487418986607e+00 + 8.1552597335209356e+00 -2.7150822748930681e+00 -2.1865467680657216e+00 + 8.2579493964989759e+00 -3.2970953283521158e+00 -2.2663087072109107e+00 + 8.2624847976458042e+00 -3.8593835609612777e+00 -2.3281477036522027e+00 + 8.1809421001212232e+00 -4.3911464832100577e+00 -2.3701439455797502e+00 + 8.0308546997097459e+00 -4.8839599444877351e+00 -2.3909388835562124e+00 + 7.8446808868877618e+00 -5.3281406359188050e+00 -2.4054657370521610e+00 + 7.7434161161122779e+00 -5.7488814186836175e+00 -2.4351095835784524e+00 + id 12303 + loc 2.2794349491596222e-01 2.3169265687465668e-01 397 + blend 0.0000000000000000e+00 + interp 4.0716914892750783e-01:3.1790652953866000e-01:6.6241260645140321e-01:3.3886876234925933e-01:1.2016955003831928e+00:3.4823122851529759e-01:2.1092412603728157e+00:4.0716507723601858e-01:3.0207567065801504e+00:3.5079032853386327e-01:3.9997232434789973e+00 + CVs 20 + -2.4668337848348848e-01 2.7744712879292577e-01 -1.1321558335290685e+00 + -4.3911899848432823e-01 3.6346748628352016e-01 -1.8500000566339323e+00 + -6.0315352458350846e-01 3.8183449377468998e-01 -2.4510539868968002e+00 + -7.4298936057931142e-01 3.8482897618870193e-01 -3.0659680672384093e+00 + -8.4311072766170558e-01 3.5708152969086471e-01 -3.6943423991320348e+00 + -8.9371523234333949e-01 2.8549066865895556e-01 -4.3290645737654936e+00 + -8.9479738258234476e-01 1.6491307426773472e-01 -4.9544192163746024e+00 + -8.5591138311205883e-01 -1.7965710353911035e-03 -5.5553390189565910e+00 + -7.9054487555869779e-01 -2.0917345725422942e-01 -6.1221236811262560e+00 + -7.1199335172571410e-01 -4.5796524229613012e-01 -6.6506967174420160e+00 + -6.3638857288647044e-01 -7.4941178093144012e-01 -7.1368700438157182e+00 + -5.8120882748306091e-01 -1.0761473157056443e+00 -7.5675040721215652e+00 + -5.5604795912640737e-01 -1.4205415316033774e+00 -7.9310172425565915e+00 + -5.5388709552520565e-01 -1.7702908672919540e+00 -8.2347561334072026e+00 + -5.5795993249268250e-01 -2.1244494566700860e+00 -8.4977444249000840e+00 + -5.7354495620402679e-01 -2.4770443487041138e+00 -8.7278125931839394e+00 + -6.1579451679497643e-01 -2.8142496883356731e+00 -8.9254968335693867e+00 + -6.8360119845071388e-01 -3.1339738086393090e+00 -9.0815456324596617e+00 + -7.2124512513513728e-01 -3.4113008643972398e+00 -9.0219057814624062e+00 + id 12304 + loc 4.7233879566192627e-01 8.2514512538909912e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0155718668327520e-01:4.5365144611738939e-01:4.1774184771634792e-01:5.0155217111140837e-01:9.9233680872343111e-01:3.2138217667041402e-01:1.4372229779267918e+00:4.8894959533639332e-01:2.0762317016391694e+00:3.7791391698319537e-01:2.9647862044494597e+00:3.6782757307215802e-01:3.9027498671802898e+00 + CVs 20 + -1.1576599363857228e-01 1.9701984187416699e-01 2.0934257058347194e-01 + -2.1936344628873750e-01 3.2394812087992558e-01 3.1078924311572304e-01 + -3.2881051293890423e-01 4.0893093707473982e-01 3.7817355019750182e-01 + -4.6381587098841054e-01 4.7282450150629474e-01 4.4943541754917871e-01 + -6.2081859883570578e-01 5.0993101580105171e-01 5.1754837364953654e-01 + -7.9459623276657176e-01 5.1570064184350384e-01 5.7504993703627649e-01 + -9.7927496707878159e-01 4.8770804611813517e-01 6.1503636586860666e-01 + -1.1683901890278656e+00 4.2531900698858000e-01 6.3187137552613892e-01 + -1.3549240284179738e+00 3.2963857399007396e-01 6.2206721015649391e-01 + -1.5336823512788020e+00 2.0419805837587640e-01 5.8608833553765194e-01 + -1.7035767592503845e+00 5.4053710494470886e-02 5.2870043811471612e-01 + -1.8680194922416815e+00 -1.1587185508261946e-01 4.5780843861645870e-01 + -2.0323339083604046e+00 -3.0186335959627697e-01 3.8230037361550373e-01 + -2.1989498624096897e+00 -5.0090289046006531e-01 3.0893151416563719e-01 + -2.3648745886745308e+00 -7.0914295440002029e-01 2.4095723719456785e-01 + -2.5246843022605612e+00 -9.2154762883402863e-01 1.8060446630073018e-01 + -2.6755939689586774e+00 -1.1334460517640812e+00 1.3228007950054571e-01 + -2.8173799135071698e+00 -1.3415505217060470e+00 9.9717563070438275e-02 + -2.9639778043904936e+00 -1.5268783036146041e+00 6.1689863698442871e-02 + id 12305 + loc 9.8295021057128906e-01 2.2497509419918060e-01 1085 + blend 0.0000000000000000e+00 + interp 3.8640867467276568e-01:3.4016361974545933e-01:7.5762226626109530e-01:2.4771655571686368e-01:1.1822324968235480e+00:3.8640481058601900e-01:2.5207941245095253e+00:2.9010360893113085e-01:3.0287296074826546e+00:3.3820780872473455e-01:3.8103145584046576e+00 + CVs 20 + 3.4919799316984884e-01 3.2191458220803709e-01 -1.0062536447125042e-01 + 6.7210616838027715e-01 6.3548785806134644e-01 -1.8803147531226438e-01 + 1.0035974803594905e+00 9.2036165717779772e-01 -2.5774862487525269e-01 + 1.3598073423293102e+00 1.1642952354445764e+00 -2.9951246197387876e-01 + 1.7397551287415933e+00 1.3573667948132071e+00 -3.0221332140840951e-01 + 2.1359543721374319e+00 1.4945689582516772e+00 -2.5890000954451492e-01 + 2.5361605575965469e+00 1.5756356466195172e+00 -1.6758269292304628e-01 + 2.9259441158069182e+00 1.6049683956907108e+00 -3.1759736763091628e-02 + 3.2892025295800082e+00 1.5915992486273955e+00 1.3770912150035675e-01 + 3.6104874878846109e+00 1.5506924795870889e+00 3.2284764745005734e-01 + 3.8811059690269922e+00 1.5017771916607106e+00 5.0813229369794977e-01 + 4.1028196795314331e+00 1.4611742611976908e+00 6.9191504747651544e-01 + 4.2856759509480042e+00 1.4330486507234343e+00 8.8711002468615152e-01 + 4.4340306583241249e+00 1.4097699415836853e+00 1.1117095746401713e+00 + 4.5395948559619104e+00 1.3773369674070919e+00 1.3876652432220116e+00 + 4.5962052370190793e+00 1.2914882197630608e+00 1.7147548659678467e+00 + 4.5945601710248889e+00 1.0976326225231370e+00 2.0416543160759377e+00 + 4.5896027284090479e+00 7.8730523636668959e-01 2.2912020589988846e+00 + 4.8177156873950855e+00 6.2166695869499367e-01 2.2774440469448605e+00 + id 12306 + loc 3.8732370734214783e-01 2.2309830784797668e-01 416 + blend 0.0000000000000000e+00 + interp 3.1319026610169837e-01:2.9467815281101056e-01:6.0311759102543050e-02:2.5031686901873429e-01:1.0246253527482236e+00:2.9760282321334530e-01:1.8496663200896521e+00:3.1318713419903738e-01:2.1709226954387226e+00:2.4811014885913268e-01:3.3746824389394474e+00 + CVs 20 + 6.5430759877969730e-02 1.3476450899718900e-01 -7.2155302440732039e-01 + 1.0311408791894799e-01 1.3427985586258778e-01 -1.2560921919005668e+00 + 1.6903138881819207e-01 8.2001203089952956e-02 -1.7072510207084297e+00 + 2.6185792880933539e-01 6.6885170476003175e-03 -2.1338979444202972e+00 + 3.7732325112389592e-01 -9.0212540217169734e-02 -2.5235539234276079e+00 + 5.1124095178073015e-01 -2.0242485603845783e-01 -2.8659719040264129e+00 + 6.5658959162474329e-01 -3.2070481588109079e-01 -3.1591326195567651e+00 + 8.0464564579187436e-01 -4.3581000402939596e-01 -3.4101240894600382e+00 + 9.4949279771720974e-01 -5.4003520254521020e-01 -3.6289714598749088e+00 + 1.0880487952859121e+00 -6.2833933194847380e-01 -3.8263425029535152e+00 + 1.2154346599829795e+00 -7.0254448612409859e-01 -4.0197285437041739e+00 + 1.3252788030926741e+00 -7.7538766641147161e-01 -4.2356219922531970e+00 + 1.4070136128464497e+00 -8.6357950509662018e-01 -4.4918161484475689e+00 + 1.4443645587809288e+00 -9.7126890311076330e-01 -4.7765551566907609e+00 + 1.4286888352078551e+00 -1.0887688188911266e+00 -5.0647394079723682e+00 + 1.3627322849530530e+00 -1.2077923053740731e+00 -5.3398780404927404e+00 + 1.2530816815083807e+00 -1.3228651671518645e+00 -5.5893030996915405e+00 + 1.1092405538375465e+00 -1.4267511850294685e+00 -5.8021559480422571e+00 + 9.5601034937301554e-01 -1.5305667464754835e+00 -6.0008905509616106e+00 + id 12307 + loc 2.4238789081573486e-01 7.3865729570388794e-01 261 + blend 0.0000000000000000e+00 + interp 9.5059434737677873e-01:3.0703717649632245e-01:5.1658779698237822e-01:5.0614203072762254e-01:8.3638532163418278e-01:9.5058484143330502e-01:9.6770848133592102e-01:4.3794730073530996e-01:1.2408448904329705e+00:2.9164011422186692e-01:1.8362046724893282e+00:5.1096742356226921e-01:2.3918343133963988e+00:5.7585460594837823e-01:2.9564682133205791e+00 + CVs 20 + -8.3728359762240800e-01 3.7356938272449836e-01 -2.4883161435375739e-01 + -1.4033419986646123e+00 5.6362852082392967e-01 -2.9265001899266385e-01 + -1.8943872250558378e+00 6.1266733301367071e-01 -2.0949750965392611e-01 + -2.4219079701298973e+00 5.5933916518702520e-01 -4.0366391025333015e-02 + -3.0158101337823542e+00 4.6741157919180704e-01 1.6705763247132399e-01 + -3.6859048333551199e+00 3.8583231067202051e-01 3.4244601081604276e-01 + -4.4165941461554130e+00 3.1119352548437851e-01 4.1305508334527974e-01 + -5.1720825328438016e+00 2.2922297804330971e-01 3.3447374415416586e-01 + -5.9001982446981378e+00 1.4879828050084720e-01 9.8793672159367407e-02 + -6.5481977575805423e+00 8.4365647825106471e-02 -2.7420492209103986e-01 + -7.0974415714340111e+00 2.7368908535398973e-02 -7.5211356026384246e-01 + -7.5507169169223811e+00 -4.2219650445426637e-02 -1.3067640841784498e+00 + -7.9034278944456107e+00 -1.5036489096671346e-01 -1.9309319998687702e+00 + -8.1294585422751897e+00 -3.4597110200880099e-01 -2.6142549689075549e+00 + -8.1758533442404122e+00 -6.2409821010396138e-01 -3.3032402031253953e+00 + -8.0120538117309490e+00 -9.4909229942075024e-01 -3.9254249207167633e+00 + -7.7322699008219908e+00 -1.3891765980558564e+00 -4.4099084915298263e+00 + -7.5122795037185011e+00 -2.0509749104965156e+00 -4.6446417441649217e+00 + -7.3817201853805390e+00 -2.7968260343839391e+00 -4.6923584165443364e+00 + id 12308 + loc 2.4265234172344208e-01 3.5843756794929504e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8752178989451841e-01:3.0551002497569951e-01:2.3408327504859106e-04:3.3810516054900702e-01:9.0307627416521852e-01:3.2114037234729159e-01:1.3500398896066557e+00:2.5654868248025203e-01:2.0365457485392158e+00:3.6236899433792241e-01:2.9281379289108145e+00:3.8751791467661950e-01:3.3522715626960959e+00 + CVs 20 + -8.5785779569148984e-02 3.2582195547425685e-01 -3.2475287536154342e-02 + -1.8733542762548777e-01 6.3639296330487993e-01 -9.9083925859463337e-02 + -2.9537716682887399e-01 9.2680471567782330e-01 -1.7175621107998831e-01 + -4.0545095287709604e-01 1.1979930804588772e+00 -2.3747750707718812e-01 + -5.1944820031305017e-01 1.4496658010942269e+00 -3.0008863596996516e-01 + -6.3972196103724666e-01 1.6834859746858970e+00 -3.6534447655970542e-01 + -7.6707149737450875e-01 1.8976858996932009e+00 -4.4089371369501323e-01 + -9.0068027276065388e-01 2.0885733949962209e+00 -5.3249205200197425e-01 + -1.0442956491230615e+00 2.2553625696189625e+00 -6.4179436320582806e-01 + -1.2089750377755832e+00 2.3950807533091441e+00 -7.6740995425266845e-01 + -1.4031714359779413e+00 2.4976188903251328e+00 -9.0665059183822494e-01 + -1.6259664373210607e+00 2.5494179736073224e+00 -1.0574874715569664e+00 + -1.8666742664426348e+00 2.5363921998853685e+00 -1.2189157156359309e+00 + -2.1056106531628256e+00 2.4464896009214545e+00 -1.3945354956000859e+00 + -2.3391723972904734e+00 2.2682338541150324e+00 -1.5910378554505031e+00 + -2.5960606384043556e+00 1.9898565891604143e+00 -1.7802150839744311e+00 + -2.8988620824362425e+00 1.6165771911384708e+00 -1.8960624457405051e+00 + -3.2251621507094677e+00 1.1931098089817838e+00 -1.8768392547514710e+00 + -3.4306810396185163e+00 9.6108642054936300e-01 -1.7386840726445876e+00 + id 12309 + loc 5.5296158790588379e-01 6.0042464733123779e-01 372 + blend 0.0000000000000000e+00 + interp 4.2425308331592260e-01:3.0438599551660522e-01:1.6011076843173266e-02:3.6151580922167886e-01:8.1556657508375685e-01:2.8926874761726162e-01:1.8101100126469314e+00:3.7304885989935999e-01:2.1978350219725571e+00:3.0136237738871202e-01:2.9561946457847412e+00:4.2424884078508945e-01:3.7359685567010743e+00 + CVs 20 + -3.7172721899176447e-01 6.2461763806403470e-01 -2.7962278809715690e-01 + -7.6031533983401078e-01 1.1933440718981077e+00 -5.2418816313148697e-01 + -1.1417262532340440e+00 1.6847554563471596e+00 -7.5719836315853617e-01 + -1.4070981727083822e+00 2.0914786363682838e+00 -1.0066021356988621e+00 + -1.4619633383298885e+00 2.3983390995660145e+00 -1.2852210357232150e+00 + -1.3229062416216373e+00 2.6124273014689421e+00 -1.5965515719838861e+00 + -1.0146482138438373e+00 2.7377016651458117e+00 -1.9451642677473269e+00 + -5.6141641120549490e-01 2.7552436218763137e+00 -2.3117999889133776e+00 + -1.2154179866183501e-02 2.6496806613988362e+00 -2.6753832392869916e+00 + 5.6831525740817179e-01 2.4093548766732522e+00 -3.0360221373812322e+00 + 1.1010528018363659e+00 2.0309076324667124e+00 -3.3976137941500819e+00 + 1.4884363952609230e+00 1.5275955720644638e+00 -3.7501368535796078e+00 + 1.6422316883149402e+00 9.2449549784445118e-01 -4.0403262440634986e+00 + 1.4928953910456904e+00 2.2547867769257157e-01 -4.1382827118052461e+00 + 1.2273815279611908e+00 -6.6882084732338143e-01 -3.8847518227830302e+00 + 1.4363056150859541e+00 -1.5651520902505491e+00 -3.4129354820636006e+00 + 2.1772171063201782e+00 -2.0806334341642900e+00 -2.9858460155674305e+00 + 3.0768146534455862e+00 -2.0377864381468789e+00 -2.7220817664084462e+00 + 3.6265016866761082e+00 -1.3154658439945135e+00 -2.8054001065923968e+00 + id 12310 + loc 3.4590893983840942e-01 1.1776760965585709e-01 1075 + blend 0.0000000000000000e+00 + interp 3.8977670886486954e-01:2.5517350383583148e-01:2.9059839244400687e-01:3.0489394073838150e-01:1.5860742860017181e+00:3.8977281109778089e-01:2.0349360146312563e+00:3.2342795605266150e-01:2.6893336335936540e+00:2.8138105650208284e-01:3.0515758854867494e+00:2.7918325612961026e-01:3.8378018792697377e+00 + CVs 20 + -2.1139046150348559e-01 2.7434832808795723e-01 -9.2844034779758222e-03 + -4.3212836134257199e-01 5.5330013113994325e-01 6.5615978108365391e-03 + -6.5917614544101599e-01 8.2385035654605621e-01 3.9795841289195388e-02 + -8.9658282665986022e-01 1.0686809782455120e+00 7.9193885697465494e-02 + -1.1538986469781067e+00 1.2739052518544924e+00 1.1319976869094173e-01 + -1.4407301093967406e+00 1.4346535312645494e+00 1.3347302746681278e-01 + -1.7562563771260948e+00 1.5655605450733419e+00 1.5629333773457088e-01 + -1.9859972290429990e+00 1.6619576376461094e+00 1.7928532612468784e-01 + -2.1461614103912900e+00 1.7246283343948634e+00 1.8247679793496452e-01 + -2.3479220467012687e+00 1.7438297276286605e+00 1.3805918032420639e-01 + -2.5365783463089064e+00 1.7217099236558315e+00 6.6850503074114886e-02 + -2.6462911392284973e+00 1.7313501128406283e+00 9.7084743539379570e-03 + -2.6752698360533937e+00 1.8280683732963143e+00 -4.4271238219895537e-02 + -2.6903489179395419e+00 1.8598961114402197e+00 -1.2543400568862029e-01 + -2.7287818294989692e+00 1.6142483007155199e+00 -1.6130679402377157e-01 + -2.7245543234742899e+00 1.0559124951055003e+00 -1.5570521967628892e-01 + -2.5723207094586367e+00 2.6102654075563703e-01 -2.5523580911176325e-01 + -2.2619599900331182e+00 -5.1151168764408950e-01 -5.9388838436207414e-01 + -1.9976619463195258e+00 -6.7561889994456548e-01 -8.8021402990383835e-01 + id 12311 + loc 8.0406844615936279e-01 3.2575005292892456e-01 411 + blend 0.0000000000000000e+00 + interp 4.7620465580814919e-01:3.3763487956106480e-01:4.2915906936810577e-01:4.7619989376159111e-01:9.9768381660413752e-01:4.1275987597963615e-01:1.4340980845231648e+00:4.1064137439485998e-01:2.0123292738246268e+00:3.2542536895811047e-01:2.7568906526108314e+00:4.2428974268904218e-01:3.2274232396135143e+00:4.2822757711786053e-01:3.9156025186297301e+00 + CVs 20 + -7.1749337111081291e-01 2.7089623371785404e-01 1.6729779058067679e-01 + -1.2775928902132920e+00 4.2930493482593168e-01 3.0670972498780424e-01 + -1.7911832119842352e+00 5.4417032595300441e-01 4.2267679883062870e-01 + -2.3136917849507008e+00 6.3540487314869587e-01 5.2454260320537505e-01 + -2.8378595762406795e+00 6.9219466915984118e-01 6.1511965042035821e-01 + -3.3571303246751270e+00 7.0613902846458743e-01 6.9986686249364982e-01 + -3.8668784039689976e+00 6.7016258910981186e-01 7.8244597813996952e-01 + -4.3626448217545528e+00 5.7503460923675154e-01 8.6818890702510743e-01 + -4.8364834644170438e+00 4.1046932882569465e-01 9.6583927213608445e-01 + -5.2727365944355959e+00 1.7017838662034168e-01 1.0843577447226869e+00 + -5.6485110000025127e+00 -1.4334507253550433e-01 1.2291640160673747e+00 + -5.9471633694626842e+00 -5.1991224847703554e-01 1.3975133122431342e+00 + -6.1670537633158462e+00 -9.4938830424683740e-01 1.5811078891541954e+00 + -6.3114880168617429e+00 -1.4218506839953000e+00 1.7722488272376560e+00 + -6.3811392679870913e+00 -1.9241762948620682e+00 1.9649688183162790e+00 + -6.3749296683943761e+00 -2.4429720043056400e+00 2.1498775310760814e+00 + -6.2920475024384865e+00 -2.9655526020793261e+00 2.3117258242969632e+00 + -6.1406854399039492e+00 -3.4752234574835192e+00 2.4422562357353361e+00 + -6.0482398346770623e+00 -4.0278867176154689e+00 2.5731685494923235e+00 + id 12312 + loc 2.5294369459152222e-01 2.6448504999279976e-02 403 + blend 0.0000000000000000e+00 + interp 4.9408531177123910e-01:4.1431941185632060e-01:7.9559621873751463e-01:3.5132590071560527e-01:1.1559049422364822e+00:3.4418042133322269e-01:1.9947226354389689e+00:3.5530606695221367e-01:2.5951466552238092e+00:4.9408037091812140e-01:3.0143164674141900e+00:3.3431044411031452e-01:3.9190222837853921e+00 + CVs 20 + -1.8320986451738747e-01 2.5149457455322261e-01 3.6175980364189467e-02 + -3.9998088003830690e-01 4.9831862684099781e-01 9.7742714572277845e-02 + -6.3534446912974196e-01 7.4928541866642528e-01 1.7033118381045892e-01 + -8.7735628395052145e-01 9.9426582957940401e-01 2.4445223758291251e-01 + -1.1238349895406441e+00 1.2141531943163753e+00 3.1605882148635561e-01 + -1.3666194257938469e+00 1.3918151152677236e+00 3.8498597184825190e-01 + -1.5921638240672076e+00 1.5197694469139811e+00 4.5797818061409512e-01 + -1.7853757267267321e+00 1.5976268493565624e+00 5.3747412572954256e-01 + -1.9381207612712934e+00 1.6314930376103831e+00 6.1889992327906407e-01 + -2.0578438189227217e+00 1.6320066462286542e+00 7.0855978595724012e-01 + -2.1496745610736427e+00 1.6052508946570101e+00 8.1920716886903067e-01 + -2.2116923827923500e+00 1.5523382487085498e+00 9.5556814224143605e-01 + -2.2522133595409661e+00 1.4672716102324219e+00 1.1194120294445602e+00 + -2.2884824515941169e+00 1.3376641573606798e+00 1.3100244140418373e+00 + -2.3245721297456274e+00 1.1495113795200904e+00 1.5344498060826055e+00 + -2.3585777764132252e+00 8.7360218923340316e-01 1.8296321405630640e+00 + -2.4369000995005314e+00 4.8537538255311025e-01 2.2374624326110601e+00 + -2.6345901313122724e+00 6.0886550108154469e-02 2.7061209052944650e+00 + -2.7817787480204559e+00 -1.9353507361261379e-01 3.0111317148318646e+00 + id 12313 + loc 1.1053745448589325e-01 2.6514989137649536e-01 406 + blend 0.0000000000000000e+00 + interp 4.9252608794372982e-01:2.7489278100211273e-01:5.3298607222421746e-03:4.4434176951783921e-01:4.2089208271430267e-01:3.5629479618730570e-01:1.0403068935440274e+00:4.9252116268285040e-01:2.0035156561762499e+00:3.7577743601580110e-01:3.0037055721854355e+00 + CVs 20 + -9.7859982536819504e-02 9.3935691264300757e-03 4.2577342973647826e-02 + -1.5967405641733518e-01 -2.0495146619088016e-02 7.2831694178883660e-02 + -1.9631709085353230e-01 -5.3390176462586286e-02 1.2233785125221319e-01 + -2.2479722250881215e-01 -8.1032426984589331e-02 1.5216212935981144e-01 + -2.4852914926672506e-01 -1.0002950406742700e-01 1.6088654423658952e-01 + -2.7320524088741888e-01 -1.0666402601389183e-01 1.5070578103654009e-01 + -3.0665573409921787e-01 -9.7973621729003674e-02 1.2750592252408255e-01 + -3.5633875214606520e-01 -7.3047851543616843e-02 1.0175600980810640e-01 + -4.2486259212682109e-01 -3.3567886632413078e-02 8.6228005158905940e-02 + -5.0688305518223853e-01 1.7133657984949889e-02 9.1412255845663357e-02 + -5.9452708533979282e-01 7.6065242564454322e-02 1.2201530329326363e-01 + -6.8235879225820240e-01 1.4332997208989495e-01 1.7759542129940281e-01 + -7.6249455883400019e-01 2.1906395125399866e-01 2.5774136462566377e-01 + -8.1949748948622958e-01 2.8945144189018746e-01 3.6642110018153595e-01 + -8.3709169742939737e-01 3.1946722208296441e-01 5.1013261056791337e-01 + -7.9861528178476238e-01 2.8063147732908700e-01 6.8743260277323592e-01 + -6.8630054432978393e-01 2.0240386572529551e-01 8.6671753134608087e-01 + -5.2038958922150580e-01 1.5412142007931950e-01 9.9553110693876845e-01 + -4.3412730705071367e-01 2.3197560305242348e-01 9.6330842310561238e-01 + id 12314 + loc 6.3941232860088348e-02 9.3072670698165894e-01 1055 + blend 0.0000000000000000e+00 + interp 6.1401000312798049e-01:2.8823534242679272e-01:1.0916618429863667e-01:3.9819247299959654e-01:6.1643696795934966e-01:4.5751985695887115e-01:1.0887464550779740e+00:3.6110742302161586e-01:1.8251319147702898e+00:5.7712137558450738e-01:2.1693233895558350e+00:6.1400386302794918e-01:2.6821270601501799e+00:3.1288967391469313e-01:3.2806170860335166e+00 + CVs 20 + -7.1458801403328859e-02 3.0442935383679903e-01 -3.5702270721495760e-01 + -5.9750565312873316e-02 5.3444017946416944e-01 -6.7729067541863730e-01 + 8.6024790001985041e-03 7.2407765758703235e-01 -9.7950576390793298e-01 + 1.2163165037944645e-01 8.9221856900252727e-01 -1.2648695652194517e+00 + 2.7659500287917071e-01 1.0530665534298926e+00 -1.5280754440237350e+00 + 4.5130657869622359e-01 1.2360123269979144e+00 -1.7787783044750731e+00 + 5.9650902172414988e-01 1.4583895860936789e+00 -2.0276933028677391e+00 + 6.7895083893362496e-01 1.6910698371700374e+00 -2.2745423776058189e+00 + 7.1825736740602220e-01 1.8897895388376773e+00 -2.5092326187816218e+00 + 7.6142260516693727e-01 2.0331618018697881e+00 -2.7059762666618585e+00 + 8.3331384703033429e-01 2.1466991645092204e+00 -2.8549564333592223e+00 + 9.0848160879927375e-01 2.2526037887028916e+00 -3.0076446839955953e+00 + 9.7587279760795553e-01 2.3335256332197107e+00 -3.1945847827261229e+00 + 1.0409693884480276e+00 2.3953640051339087e+00 -3.3855298179693638e+00 + 1.0937621032939455e+00 2.4607606382273999e+00 -3.5527618147307987e+00 + 1.1061645511188554e+00 2.5667024826964426e+00 -3.7085788556752948e+00 + 1.0326636104823963e+00 2.7336936899565574e+00 -3.9157075660595080e+00 + 8.7493485574843688e-01 2.8722816680592951e+00 -4.2164999138219006e+00 + 1.0124780289549720e+00 2.7046384007464011e+00 -4.2430628128066896e+00 + id 12315 + loc 2.6051703095436096e-01 9.1767520643770695e-04 1074 + blend 0.0000000000000000e+00 + interp 5.5178753415278914e-01:5.1969785269645519e-01:3.3646882655603716e-01:2.9437585316866155e-01:9.3748797462744482e-01:2.9561300830335374e-01:1.9378585022799890e+00:2.8707977657755207e-01:2.0026331136763820e+00:4.0212119292016790e-01:2.6953904908236530e+00:2.5955668713299690e-01:3.0502027597943759e+00:5.5178201627744761e-01:3.7275677040897337e+00 + CVs 20 + -3.0077624772502670e-01 1.9134699448417417e-01 9.6754961982294885e-02 + -6.0596580370354403e-01 3.7240038180272655e-01 1.6960579241030743e-01 + -9.2748632636605810e-01 5.5436245000565343e-01 2.3050306460373232e-01 + -1.2574433170388897e+00 7.5597568974253948e-01 2.9517939013814026e-01 + -1.5097776539522183e+00 9.5883305710573008e-01 3.8184732965990387e-01 + -1.5737233765201324e+00 1.1086667110284514e+00 4.9633062242729986e-01 + -1.4488813694245681e+00 1.2495161715358161e+00 6.5166765882980338e-01 + -1.3279653469863204e+00 1.4756144182685125e+00 8.6355274729558662e-01 + -1.3899247290670103e+00 1.7501327898178338e+00 1.1083876864126818e+00 + -1.6992703054728495e+00 1.9328257682762393e+00 1.3096378445750911e+00 + -2.1599170869824524e+00 1.9319133357256304e+00 1.3707029416230476e+00 + -2.5899693348196484e+00 1.8167605798603890e+00 1.2655287553532424e+00 + -2.8943427385247271e+00 1.7273829675114878e+00 1.0629631486004221e+00 + -3.1135691741025577e+00 1.7934990979771204e+00 8.4191584410617915e-01 + -3.3356828026666814e+00 2.0290294582947825e+00 5.7178195798704212e-01 + -3.6436074190596535e+00 2.2759339250438484e+00 1.4759633052471444e-01 + -4.1159799651392115e+00 2.3110662766808501e+00 -5.5420426260241284e-01 + -4.3343345253671055e+00 1.9369798633460207e+00 -1.2501867304182999e+00 + -3.9617909671541010e+00 1.8054840453349688e+00 -1.1728273346179809e+00 + id 12316 + loc 2.5332927703857422e-01 2.0683889091014862e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4447212928991481e-01:4.2246566455890128e-01:4.6949490229324586e-01:2.9286715352762988e-01:9.9844888522976449e-01:4.4446768456862190e-01:1.5152930059985648e+00:2.6537145082953573e-01:2.1282982416011498e+00:2.5632988498281450e-01:3.0074650590344230e+00:2.8264515907293941e-01:3.9104630324886291e+00 + CVs 20 + -1.5931798867074279e-01 1.9449569804453087e-01 -2.7217472150631855e-01 + -3.2347940042776885e-01 3.9202740735339436e-01 -5.2108285331135507e-01 + -4.9254857986499789e-01 5.7957865517174811e-01 -7.7013617053179662e-01 + -6.7170449244696973e-01 7.5434338858333738e-01 -1.0248884247029988e+00 + -8.6917414006348714e-01 9.2106125368122560e-01 -1.2730126293130595e+00 + -1.0897044656928558e+00 1.0787320297077017e+00 -1.4976327139254502e+00 + -1.3310339081602742e+00 1.2190073396944474e+00 -1.6794923371614021e+00 + -1.5807373438133974e+00 1.3302616990409408e+00 -1.8030179192694571e+00 + -1.8214937386086916e+00 1.4040455147480879e+00 -1.8646746720918530e+00 + -2.0427269277437823e+00 1.4376334500873702e+00 -1.8710484736558839e+00 + -2.2445889542272530e+00 1.4295301310140216e+00 -1.8266321127800651e+00 + -2.4379674213255100e+00 1.3694884128202551e+00 -1.7274710133214515e+00 + -2.6368679896584966e+00 1.2385405310917574e+00 -1.5713303311200826e+00 + -2.8515558409973960e+00 1.0234044994014047e+00 -1.3725435843085396e+00 + -3.0988432309217626e+00 7.1450056164934717e-01 -1.1573238454922665e+00 + -3.4156713998222958e+00 2.8553211737137452e-01 -9.7227232900738891e-01 + -3.8382458302951075e+00 -3.0531025316483557e-01 -9.4847731114169009e-01 + -4.2707110306590081e+00 -9.5628073934775781e-01 -1.2472279055637687e+00 + -4.4730821824935791e+00 -1.3042607838732252e+00 -1.4087786118545487e+00 + id 12317 + loc 3.6405616998672485e-01 3.0927959084510803e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9706278486820545e-01:3.1925626603916907e-01:6.7784685228489616e-01:3.1366245172525109e-01:1.1243013882453725e+00:3.2728170692310027e-01:1.8776318710968583e+00:3.8361844058797445e-01:2.1201448480426990e+00:2.9190559201319488e-01:3.0007815756543872e+00:3.9705881424035677e-01:3.8194553922555254e+00 + CVs 20 + 1.4985735239954057e-03 2.8558419455120354e-01 -2.4689674989639671e-02 + -3.5063689380119750e-02 5.3864905698686549e-01 -8.0884113116752171e-02 + -1.0250087745926117e-01 7.6930754763404119e-01 -1.6262087576341300e-01 + -1.8620598591931631e-01 9.7868116898701962e-01 -2.5645218938138697e-01 + -2.8492284180459543e-01 1.1529574397049509e+00 -3.5534330873737119e-01 + -3.8950297229614289e-01 1.2787687744448690e+00 -4.4961066103493497e-01 + -4.8367471641738030e-01 1.3501848498367532e+00 -5.3041405067594538e-01 + -5.5133428407050622e-01 1.3737414059547548e+00 -5.9628257249107797e-01 + -5.8631720662237974e-01 1.3646804056997637e+00 -6.5372393020503428e-01 + -6.0232560695145154e-01 1.3330243964160700e+00 -7.0814781533340021e-01 + -6.1242486779198257e-01 1.2761586565813894e+00 -7.5652349822362219e-01 + -6.1232979732364312e-01 1.1919389682077384e+00 -7.9278799089662577e-01 + -5.9604751632183595e-01 1.0737960668139190e+00 -8.1051046854595399e-01 + -5.6613876965988796e-01 8.8964769484687445e-01 -7.9965175344789818e-01 + -5.4326647005167095e-01 5.6502290899459606e-01 -7.4336817987771775e-01 + -6.2383696199218308e-01 -1.7259133447409092e-02 -5.9463378277512680e-01 + -1.0808495513374434e+00 -8.4405196223583590e-01 -2.7237503715880607e-01 + -2.2002433702649991e+00 -1.4619790366005425e+00 2.2766912875035095e-01 + -2.3589050153699045e+00 -1.6060406187013667e+00 3.1865135608705925e-01 + id 12318 + loc 5.1729023456573486e-01 7.2305500507354736e-02 397 + blend 0.0000000000000000e+00 + interp 4.9702095693264614e-01:3.1783830187068618e-01:1.1071255607702668e-01:4.9701598672307684e-01:1.0023542473826983e+00:4.8217884882192702e-01:1.8923557795619017e+00:2.4496304609649039e-01:2.0392983313653787e+00:3.5914428005723331e-01:3.0004819116995352e+00:3.1947963143475705e-01:3.6269185293568693e+00 + CVs 20 + -1.1679410359389097e+00 3.9476372182782382e-01 2.5886043237187600e-01 + -1.9657845670641005e+00 5.5150338218324846e-01 4.7961819622140744e-01 + -2.6451684434024507e+00 6.1458168939606561e-01 6.9563481684996720e-01 + -3.3103581919478389e+00 6.1787395679515500e-01 9.2931395440373377e-01 + -3.9444629954952397e+00 5.5401020828309111e-01 1.1711137197989878e+00 + -4.5329708555236801e+00 4.2539118530991377e-01 1.4094143982311311e+00 + -5.0658838305601002e+00 2.4078872995194700e-01 1.6356253152026943e+00 + -5.5349648684152539e+00 1.0105583658301498e-02 1.8514525849447718e+00 + -5.9298515024053362e+00 -2.5646174497151175e-01 2.0695826990056476e+00 + -6.2435878537343950e+00 -5.4234496574708357e-01 2.2954529708489173e+00 + -6.4769725656158412e+00 -8.2707795372744797e-01 2.5269663936022244e+00 + -6.6414418779181323e+00 -1.0996139903567554e+00 2.7644415441656465e+00 + -6.7554837372057817e+00 -1.3624522624183628e+00 3.0054743808850919e+00 + -6.8375980656503961e+00 -1.6197062675128266e+00 3.2311501640118330e+00 + -6.9121031484487894e+00 -1.8654031891859191e+00 3.4228740912542204e+00 + -7.0179903689937451e+00 -2.0902803986047367e+00 3.5934685580688370e+00 + -7.1771475605574775e+00 -2.3092666347065700e+00 3.7632720496323948e+00 + -7.3720325574135162e+00 -2.5489237828925813e+00 3.9275003101595578e+00 + -7.4410438962426557e+00 -2.8281228257341446e+00 4.0164364604285243e+00 + id 12319 + loc 5.5340188741683960e-01 7.7368217706680298e-01 409 + blend 0.0000000000000000e+00 + interp 3.6874485537288698e-01:2.9294113138435735e-01:3.4617167016125916e-01:3.6874116792433326e-01:1.0573486179944840e+00:3.0104781643465417e-01:1.8430517005676550e+00:3.4986038514441081e-01:2.1915470900223313e+00:3.3854390555570274e-01:2.9821780775656390e+00:3.2961877456053035e-01:3.6359642890759933e+00 + CVs 20 + 3.7208870090125618e-01 2.1492869460897712e-01 -2.1423954244877266e-02 + 6.7409143831008311e-01 3.7855341327667669e-01 -6.1255896016502116e-02 + 9.5947937302093822e-01 5.0938388129755707e-01 -1.0334326634453875e-01 + 1.2615682799592416e+00 6.1650533455229584e-01 -1.3652986188513438e-01 + 1.5776705990732258e+00 6.9255798559319293e-01 -1.6152269256585508e-01 + 1.9038050515783618e+00 7.3318729279838601e-01 -1.7971164731013015e-01 + 2.2372554128724471e+00 7.4034405378343227e-01 -1.9224760083389947e-01 + 2.5751916091108176e+00 7.1702630885635943e-01 -1.9849861676173730e-01 + 2.9142096934852399e+00 6.6115189381198081e-01 -1.9387302925804750e-01 + 3.2471630452584686e+00 5.7016989162625209e-01 -1.7391878965086777e-01 + 3.5598155034057868e+00 4.4467356442566852e-01 -1.4167537232147565e-01 + 3.8374871750830928e+00 2.8265156076018849e-01 -1.0715552218629820e-01 + 4.0732990985525950e+00 7.9940856139753214e-02 -8.0185594530614135e-02 + 4.2664945414667175e+00 -1.6109210641519001e-01 -6.6531136405264590e-02 + 4.4156981806296915e+00 -4.2750925424467123e-01 -6.9608942234898774e-02 + 4.5174764794255093e+00 -6.9888230665678464e-01 -8.8253160168809575e-02 + 4.5696466142921963e+00 -9.6393650889446580e-01 -1.1455783344878528e-01 + 4.5718373119692899e+00 -1.2416683648463835e+00 -1.3413635960352299e-01 + 4.5185944913656018e+00 -1.6576563884569584e+00 -1.5598524193061283e-01 + id 12320 + loc 2.5193077325820923e-01 2.6098191738128662e-01 1048 + blend 0.0000000000000000e+00 + interp 4.7225010534820433e-01:3.5097945978966888e-01:5.4402689706021812e-01:3.3200851538413945e-01:1.7547759720659228e+00:4.7224538284715090e-01:2.4900875108373164e+00:4.0520564377261753e-01:3.0130615768978886e+00:3.2034661150898980e-01:3.8462045756986236e+00 + CVs 20 + -2.9183528202855435e-01 5.7612669467720579e-01 -8.7733009868613238e-02 + -5.5532228932794148e-01 1.1758094196160085e+00 -2.5643846726221198e-01 + -7.5405365076869546e-01 1.7905955468111061e+00 -5.2298523470288905e-01 + -8.7483355484317094e-01 2.3548913171679002e+00 -9.0496550765332862e-01 + -9.3890587575790652e-01 2.7747666856775601e+00 -1.3930676490933194e+00 + -9.8169404145097816e-01 2.9720469916247541e+00 -1.9216680242093183e+00 + -1.0114444298453751e+00 2.9123867807913228e+00 -2.3719572335306562e+00 + -1.0152910187050697e+00 2.6631465010002060e+00 -2.6446006980583574e+00 + -9.9020744115752413e-01 2.3442376956382240e+00 -2.7729091072631196e+00 + -9.2513445856813958e-01 2.0122033329482356e+00 -2.8257292301035823e+00 + -8.1179561879253459e-01 1.6972418907698421e+00 -2.8404913697768941e+00 + -6.6759724865776549e-01 1.3862498546914250e+00 -2.8588670443882469e+00 + -5.0271997577691252e-01 1.0052254553076252e+00 -2.8955525034948129e+00 + -3.2200138153461560e-01 5.1258302563291425e-01 -2.9166888228185806e+00 + -1.6767824185795743e-01 -4.1237263019434311e-02 -2.8985793856755926e+00 + -8.8355078835723522e-02 -5.4749809835094376e-01 -2.9069030737296826e+00 + 1.2502615974057907e-01 -2.2024160341772236e-01 -3.3418941543983842e+00 + 1.3165927870017868e-01 -7.6039117109269028e-02 -3.3387297679207601e+00 + 8.7710410496430469e-02 3.0021196725560373e-01 -3.4984031289429862e+00 + id 12321 + loc 1.4975798130035400e-01 5.0670343637466431e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6378631435625589e-01:2.7945894389967502e-01:2.0950762432651504e-01:3.8535131617798574e-01:9.9782257655458750e-01:3.2778759605275037e-01:1.6207039905867773e+00:4.6378167649311236e-01:2.0695673314520047e+00:3.4797862934937890e-01:2.6266574564766128e+00:3.1720456292121446e-01:3.0413372735052726e+00:3.2814236262159424e-01:3.7213759042607508e+00 + CVs 20 + -2.8448472013103038e-01 2.7971436848831310e-01 4.2067185671972629e-01 + -5.3609762053323162e-01 4.9206065721533437e-01 7.3484263485462986e-01 + -7.6864187402544837e-01 6.9114910849157940e-01 1.0104591588065359e+00 + -9.8233438356590286e-01 9.0197499698720751e-01 1.2755418806674479e+00 + -1.1822929655349861e+00 1.1219303281229966e+00 1.5174091374568650e+00 + -1.3727294516418127e+00 1.3460119020200025e+00 1.7280060705554972e+00 + -1.5537625027522453e+00 1.5682142200387850e+00 1.9101858574818671e+00 + -1.7233684179767477e+00 1.7880066692522236e+00 2.0842078176710688e+00 + -1.9010045754437752e+00 2.0223519531174583e+00 2.2682201295008522e+00 + -2.1247099544852674e+00 2.2836213910195022e+00 2.3982597871915416e+00 + -2.3590422203607266e+00 2.5590059853765577e+00 2.3676555257387513e+00 + -2.5330776642414419e+00 2.8339209877725633e+00 2.1204272137086768e+00 + -2.6188393440813393e+00 3.0094444687522355e+00 1.6648131469316663e+00 + -2.6479201732334148e+00 2.9806076371449501e+00 1.1867798761545896e+00 + -2.6727756138433616e+00 2.8446473411354454e+00 8.7128120259437458e-01 + -2.7203864819573953e+00 2.7316882452048570e+00 7.5925213739329878e-01 + -2.7952829632066463e+00 2.6513005458554355e+00 8.7564428567490604e-01 + -2.8745265507963134e+00 2.5156396319462084e+00 1.1776741970923230e+00 + -2.7423798150699268e+00 2.6622002279524986e+00 8.9955251428560201e-01 + id 12322 + loc 8.9709001779556274e-01 3.5243198275566101e-01 372 + blend 0.0000000000000000e+00 + interp 4.5327927462561246e-01:2.6847582847266493e-01:4.8452720543881167e-03:4.5327474183286620e-01:5.2880412399972343e-01:4.2152293877213126e-01:1.2228191330882785e+00:2.7085598246410603e-01:2.1741465687075867e+00:3.9401266629582837e-01:2.8858130582677717e+00:3.8186086069211544e-01:3.4879657832132480e+00 + CVs 20 + 5.9921694459783159e-01 4.4982036542656756e-01 3.3873703893200796e-02 + 1.1868249004401901e+00 8.2071028981884009e-01 3.7457878489153051e-02 + 1.8161644946840656e+00 1.1356046402741546e+00 6.4127950127020245e-02 + 2.4148846346140878e+00 1.4606828833002532e+00 1.9695560071915622e-01 + 2.7784567562753790e+00 1.8085652145455533e+00 5.2281644737245758e-01 + 2.7353304755500623e+00 2.0508565345519645e+00 9.7219762263208742e-01 + 2.4167491441851676e+00 2.1272406171639986e+00 1.3629635933634099e+00 + 1.9479434259657498e+00 2.0930294870067319e+00 1.7014628797599127e+00 + 1.3688382871222577e+00 1.9500822677913388e+00 2.0101230682317786e+00 + 7.3694218581743332e-01 1.6871224375955480e+00 2.2945024506294218e+00 + 1.1445935099836890e-01 1.3181854640550745e+00 2.5494877126606283e+00 + -4.4505147132645384e-01 9.0324594484723342e-01 2.7564708897842509e+00 + -8.5251729978093971e-01 4.8831290245480913e-01 2.9258222389650919e+00 + -1.0564624071098121e+00 5.6628010503190052e-02 3.0584183013299739e+00 + -1.2772733624720283e+00 -4.5613175650765309e-01 3.1492422193006369e+00 + -1.8032028364427810e+00 -9.3850897399916267e-01 3.2743941016226144e+00 + -2.5866487929087465e+00 -1.2200243081001956e+00 3.4705101843683965e+00 + -3.4321570818408871e+00 -1.1174348593322820e+00 3.7631901671812340e+00 + -4.1251850775877896e+00 -5.1625446510874995e-01 4.2087882471154137e+00 + id 12323 + loc 3.6708745360374451e-01 4.5224338769912720e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7063147964959534e-01:4.7062677333479885e-01:2.3021148639421773e-01:3.2857578416694461e-01:8.9204606486826155e-01:3.6354681279433337e-01:1.6974456492926526e+00:3.5044216474341822e-01:2.0250879901957459e+00:4.2418551227933615e-01:2.9787643429137445e+00:3.2246763262351935e-01:3.3281221638671825e+00:4.6947004463351899e-01:3.9128478656278163e+00 + CVs 20 + 3.7562781223422514e-01 3.3068908103208972e-01 9.9781640568685603e-02 + 5.8316355974101630e-01 5.5735202561985187e-01 1.5287194897930159e-01 + 7.3722603089060468e-01 7.2714974196998661e-01 1.8984710583054820e-01 + 9.0758363598609137e-01 8.8286660053702659e-01 2.3148089905921396e-01 + 1.0896943276700803e+00 1.0221281079472226e+00 2.7571888247980847e-01 + 1.2796592266176845e+00 1.1433512755436777e+00 3.2067416025744905e-01 + 1.4744900143842319e+00 1.2461313357727268e+00 3.6504814203823988e-01 + 1.6716534662037970e+00 1.3309887264619329e+00 4.0798454438473802e-01 + 1.8698408032680631e+00 1.3995951114371958e+00 4.4932339655432946e-01 + 2.0700967383901117e+00 1.4552207076737258e+00 4.9043994096870669e-01 + 2.2758378435289135e+00 1.5018326172056646e+00 5.3557182214327181e-01 + 2.4916888907439541e+00 1.5406753110066134e+00 5.9358661190220707e-01 + 2.7198082685223102e+00 1.5656790987072053e+00 6.7692188253211549e-01 + 2.9542612472216683e+00 1.5605432578392771e+00 7.9451361436526158e-01 + 3.1782155950053745e+00 1.5065294821979047e+00 9.3859034409405973e-01 + 3.3778150407001721e+00 1.3998985760683254e+00 1.0892789029185783e+00 + 3.5539072173579083e+00 1.2482167445977195e+00 1.2385293728678530e+00 + 3.7124421873949305e+00 1.0491864067823464e+00 1.3966149924019984e+00 + 3.8176091347313044e+00 8.8474218842474417e-01 1.4392134099380796e+00 + id 12324 + loc 2.3052716255187988e-01 1.4339105784893036e-01 416 + blend 0.0000000000000000e+00 + interp 2.9760579927133801e-01:2.6935975923122601e-01:2.5191172030171172e-01:2.2663107146898198e-01:1.0042043522687576e+00:2.2606852864298488e-01:2.0013559776789833e+00:2.4501025500120416e-01:2.9990411660239609e+00:2.9760282321334530e-01:3.8596476722707971e+00 + CVs 20 + -5.2206912018205223e-02 2.5149158649387165e-01 -4.9806902317874990e-01 + -1.2534156884649381e-01 3.9835637125601087e-01 -8.1458327844937639e-01 + -1.9021099726815016e-01 5.0974213686743963e-01 -1.0947894025184142e+00 + -2.2137157206122293e-01 6.1946200122626538e-01 -1.3972591127155156e+00 + -2.1341908061500287e-01 7.2363387897861065e-01 -1.7205697622421821e+00 + -1.6083084085180327e-01 8.1825601145112481e-01 -2.0600006042662917e+00 + -5.6844371463143140e-02 9.0028907419561066e-01 -2.4064219305908288e+00 + 1.0052988898199411e-01 9.6809760856117211e-01 -2.7467986880635609e+00 + 3.0462361096169144e-01 1.0209961795270575e+00 -3.0701891587112540e+00 + 5.4750712881253349e-01 1.0591753813983356e+00 -3.3713047657401827e+00 + 8.3932788995562313e-01 1.0829829171773950e+00 -3.6589583008649562e+00 + 1.2089138976526015e+00 1.0805659307275088e+00 -3.9693760957919872e+00 + 1.6435407552153740e+00 1.0158477931002881e+00 -4.3504613864507711e+00 + 2.0553173034128509e+00 8.5899365815880779e-01 -4.8063608772671849e+00 + 2.3737347009811112e+00 6.1774585439939522e-01 -5.2947239760976617e+00 + 2.5931731935362254e+00 3.0306821563530617e-01 -5.7888873758826040e+00 + 2.7172953010973364e+00 -8.3303700483499554e-02 -6.2771017473038517e+00 + 2.7392546977919503e+00 -5.1773819359970119e-01 -6.7289137396407916e+00 + 2.7176108529159508e+00 -7.6348625850023666e-01 -6.9308508854988560e+00 + id 12325 + loc 3.3399617671966553e-01 9.3468880653381348e-01 411 + blend 0.0000000000000000e+00 + interp 6.2041801807846242e-01:3.3379275920746038e-01:9.0295434963442245e-01:3.8316042264681677e-01:1.5427100676083809e+00:4.6053909500959994e-01:2.0014728892854392e+00:6.2041181389828171e-01:2.3678857667840596e+00:4.6741747176327897e-01:2.9959653719316561e+00:2.8540840917914889e-01:3.9018470636079470e+00 + CVs 20 + 1.0448447039591655e+00 9.8015824250179406e-02 -1.2312836333123187e-01 + 1.7183752021114251e+00 1.6771156636412043e-02 -2.2657402638359747e-01 + 2.2852602022122510e+00 -1.3507747826930200e-01 -3.0590933502797835e-01 + 2.8300903960819879e+00 -3.1465273231454149e-01 -3.6342177384844360e-01 + 3.3492411360139691e+00 -5.0792159482203358e-01 -4.0340041858475861e-01 + 3.8460927328655865e+00 -7.0109611380931913e-01 -4.2854434040390921e-01 + 4.3264692764316433e+00 -8.8469736503742313e-01 -4.3949987733420803e-01 + 4.7950493610019604e+00 -1.0582476145476398e+00 -4.3356267355542188e-01 + 5.2518500921974614e+00 -1.2325161501100552e+00 -4.0446086652175106e-01 + 5.6867551944284189e+00 -1.4245667059622111e+00 -3.4934905741405875e-01 + 6.0848844445261658e+00 -1.6542709280799510e+00 -2.7526291915761342e-01 + 6.4346767859453129e+00 -1.9389232210066072e+00 -1.9151442367822608e-01 + 6.7263764676200362e+00 -2.2747814674351581e+00 -9.9180527030838211e-02 + 6.9557973091915386e+00 -2.6358511814387935e+00 4.8175153498175027e-03 + 7.1168199953143336e+00 -2.9957963170898352e+00 1.1812435049678194e-01 + 7.2086028073438069e+00 -3.3328517782549154e+00 2.3545420882965656e-01 + 7.2382138059977690e+00 -3.6321599811443246e+00 3.5386933614413829e-01 + 7.2174160599311037e+00 -3.8945805292316695e+00 4.7323356351504986e-01 + 7.1404327972578772e+00 -4.2072866377268392e+00 5.9190236342301461e-01 + id 12326 + loc 7.0792418718338013e-01 5.4055762290954590e-01 1075 + blend 0.0000000000000000e+00 + interp 4.0371033428416092e-01:3.3361291274984556e-01:1.6710297732765489e-01:2.7596149120918384e-01:1.3237143023855931e+00:4.0370629718081807e-01:2.0622042992671465e+00:2.9466305401471460e-01:2.7724546343957615e+00:2.7629075801353414e-01:3.5128589816004059e+00 + CVs 20 + 7.6368122356450643e-02 2.4953383811551974e-01 -3.1332524699317787e-01 + 1.5632835926926972e-01 4.7435386927106626e-01 -5.9697294558565517e-01 + 2.3082750407637892e-01 6.7967211160988006e-01 -8.7096106156067177e-01 + 2.9952931823865964e-01 8.6794921344216314e-01 -1.1498029996075454e+00 + 3.6600300202115899e-01 1.0395173733499876e+00 -1.4426289318897947e+00 + 4.2824295233397908e-01 1.1952218620622395e+00 -1.7533786139977003e+00 + 4.8082003182374644e-01 1.3355577661277829e+00 -2.0798808756453324e+00 + 5.2220052418945628e-01 1.4579515611327665e+00 -2.4164715771734766e+00 + 5.5769168680598191e-01 1.5527527405253740e+00 -2.7537702676729547e+00 + 5.9404570611109719e-01 1.6033353624991160e+00 -3.0776125383290354e+00 + 6.3404300761982491e-01 1.5939953759990961e+00 -3.3727944145777431e+00 + 6.7703322138479782e-01 1.5190989306522049e+00 -3.6330892756664444e+00 + 7.2089157031235895e-01 1.3802165871402701e+00 -3.8612417177128795e+00 + 7.6578334212438504e-01 1.1795049356487883e+00 -4.0632366424036910e+00 + 8.1230215591287513e-01 9.2167679201969088e-01 -4.2409591124169284e+00 + 8.5241199147043889e-01 6.2161510927255414e-01 -4.3883884644852751e+00 + 8.6144850997658151e-01 3.0186964995310067e-01 -4.5000831119957141e+00 + 8.1290919329169065e-01 -1.3317186982290424e-02 -4.5755806008832982e+00 + 7.2967504683688866e-01 -4.0539626488510988e-01 -4.7087219826615012e+00 + id 12327 + loc 3.7827295064926147e-01 1.9493657350540161e-01 406 + blend 0.0000000000000000e+00 + interp 4.5654406576200923e-01:4.2657348485169899e-01:4.7871231669613845e-01:3.7179837561485979e-01:1.0287669850156471e+00:4.5653950032135165e-01:1.5301676229694021e+00:4.4045804337474626e-01:1.9606364096016080e+00:3.1502067724807381e-01:2.5422701894927222e+00:4.2788171686785287e-01:3.1625799673373280e+00:2.9767188820333296e-01:3.9972677883478824e+00 + CVs 20 + 2.7656352141706992e-02 1.4558074691291129e-01 -7.6224816444969756e-02 + 5.4997579351712525e-02 2.5208371708803790e-01 -1.1886300878360481e-01 + 8.3770399268360662e-02 3.4221240464642477e-01 -1.5620139787928031e-01 + 1.1211516202710280e-01 4.2683996607332259e-01 -2.0693087679325808e-01 + 1.4003190471632887e-01 5.0408667389479367e-01 -2.7052690661077683e-01 + 1.6750479304941615e-01 5.7227715754697994e-01 -3.4628399608217852e-01 + 1.9454892167611557e-01 6.3003082696528001e-01 -4.3412341339862964e-01 + 2.2176938004669269e-01 6.7606330768905654e-01 -5.3414809575171052e-01 + 2.5158909986434030e-01 7.0898974251176339e-01 -6.4305449148231086e-01 + 2.8755237567355307e-01 7.2787781525195827e-01 -7.5320626068268159e-01 + 3.3072227606982152e-01 7.3249042352385141e-01 -8.6069803424434665e-01 + 3.7770155461041482e-01 7.2163349807349908e-01 -9.7167200221422512e-01 + 4.2452040562416937e-01 6.9313602465908442e-01 -1.0934875628746248e+00 + 4.7160084088667570e-01 6.4697347717219189e-01 -1.2247436786909618e+00 + 5.2029338173399531e-01 5.8549605494558221e-01 -1.3600295315323438e+00 + 5.6660016253495082e-01 5.1091066066993784e-01 -1.4982632156967439e+00 + 6.0256833954140521e-01 4.2381069631036816e-01 -1.6417376298501423e+00 + 6.2258273877898240e-01 3.2280267189079026e-01 -1.7918112737861032e+00 + 6.1669980825599957e-01 1.8877762695957789e-01 -1.9788185503679636e+00 + id 12328 + loc 4.9488660693168640e-01 7.9475444555282593e-01 1085 + blend 0.0000000000000000e+00 + interp 3.4787870880721983e-01:2.7373500832475262e-01:5.3919235591213099e-01:3.2318027106196517e-01:1.1795714061736642e+00:2.6772703274884835e-01:1.9675644674108301e+00:3.4787523002013176e-01:2.7241274162778470e+00:3.0283411809002236e-01:3.4415337899628917e+00 + CVs 20 + -7.3584882806743648e-02 4.7893138800909052e-01 2.3055668802563761e-01 + -1.7139213344781110e-01 9.0027675906542903e-01 3.7571813008916138e-01 + -2.9239541990837103e-01 1.2946676297441966e+00 4.7848905298666156e-01 + -4.4457728345410169e-01 1.6714192753646802e+00 5.4798530712589133e-01 + -6.3668324874089688e-01 2.0185494083281195e+00 5.7143960914951974e-01 + -8.6982530492435051e-01 2.3193781696637434e+00 5.3670887392508659e-01 + -1.1343455242982290e+00 2.5529931351537805e+00 4.3412346153415882e-01 + -1.4093032301002411e+00 2.6994326608988182e+00 2.6204948502921532e-01 + -1.6732929497704503e+00 2.7466533498343146e+00 3.0593747417873907e-02 + -1.9193561082605222e+00 2.6898287162620687e+00 -2.4073309141964949e-01 + -2.1521709789808314e+00 2.5248481669994098e+00 -5.2574844118415853e-01 + -2.3747106016575934e+00 2.2480590797074940e+00 -7.9122068098023723e-01 + -2.5870283651209283e+00 1.8599571055175770e+00 -9.9730540843344184e-01 + -2.7926564632404705e+00 1.3690121785128579e+00 -1.0939973633610778e+00 + -2.9942602405215704e+00 8.1128535415380154e-01 -1.0172327952584863e+00 + -3.1894811164840005e+00 2.8871692829466555e-01 -7.3621158166878597e-01 + -3.4045346249528783e+00 -9.3863341108022635e-02 -2.9236966873000148e-01 + -3.6607392384096826e+00 -2.7595695391147906e-01 2.4321013269361558e-01 + -3.8239370812106666e+00 -4.6592918732953614e-01 6.8152590085614784e-01 + id 12329 + loc 9.3735069036483765e-01 6.2160259485244751e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9297925139115573e-01:3.1932430517014271e-01:3.3639083557997829e-01:4.0377705187648960e-01:9.9899255074747839e-01:2.9978294330529698e-01:1.7947291133270640e+00:3.1526301947571256e-01:2.6806392713597820e+00:3.7646443051218165e-01:3.0437078915648650e+00:4.9297432159864185e-01:3.8833167118143406e+00 + CVs 20 + 2.3282213437404176e-01 3.7314860024937690e-01 -8.8150214272042005e-02 + 4.1131989672587427e-01 7.6203317751541988e-01 -1.8739891315978491e-01 + 5.5268579964785869e-01 1.1539091593984441e+00 -2.8279331286631854e-01 + 6.5831872335825836e-01 1.5363203258541014e+00 -3.5949378770202578e-01 + 7.2871270773745467e-01 1.9169392553964006e+00 -4.0628719127528923e-01 + 7.7945120601369078e-01 2.3214530643496456e+00 -4.3817667718399023e-01 + 8.4068271689374630e-01 2.7569663512124034e+00 -5.3822272883627964e-01 + 9.3579314762157739e-01 3.1523071805470257e+00 -8.0588914720972327e-01 + 1.0727318755402193e+00 3.4065959623911204e+00 -1.2351658390365954e+00 + 1.2534027684014251e+00 3.4669480963180597e+00 -1.7282529308144268e+00 + 1.4805724415281825e+00 3.3608770980176139e+00 -2.1853469431027688e+00 + 1.7569629546872687e+00 3.1614674767461368e+00 -2.5436617411048998e+00 + 2.0814039443953329e+00 2.9339249432967480e+00 -2.7930769313807082e+00 + 2.4727242976271557e+00 2.7089724127800259e+00 -2.9571398737683054e+00 + 2.9392091627145716e+00 2.4599970832013458e+00 -3.0542667533343022e+00 + 3.4577467144308196e+00 2.0777368002094416e+00 -3.0999695513691403e+00 + 3.9952662788401239e+00 1.4102009348145534e+00 -3.0411315929216003e+00 + 4.2536652347824049e+00 6.9381633205877169e-01 -2.7191737365899611e+00 + 4.0502750303325135e+00 6.6328047360379716e-01 -2.4393824700640341e+00 + id 12330 + loc 7.4057179689407349e-01 1.2188393622636795e-01 1074 + blend 0.0000000000000000e+00 + interp 6.0588706177850982e-01:2.9732449267896482e-01:2.2941261968626692e-01:2.5988131797754976e-01:1.1775894505389941e+00:6.0588100290789204e-01:2.0000214082425334e+00:2.7350926856575036e-01:2.8650466685443212e+00:3.9357961275576325e-01:3.4085432324411800e+00:4.4387245050332352e-01:3.9734746761460591e+00 + CVs 20 + -6.0260971536159266e-02 4.1040929276788163e-01 1.6098708383360888e-01 + -1.4299112493555885e-01 8.2153655068492060e-01 3.5127792500780675e-01 + -2.3373478691384220e-01 1.2296683103989121e+00 5.5643849160893710e-01 + -3.2305429055291451e-01 1.6300982959582437e+00 7.8243145685194759e-01 + -3.9999684544265518e-01 2.0134662652984403e+00 1.0444592285105141e+00 + -4.4991249623436358e-01 2.3625406073588899e+00 1.3597725429794760e+00 + -4.5668359802245850e-01 2.6511845868678012e+00 1.7393331574729365e+00 + -4.0592237833709133e-01 2.8460075984520854e+00 2.1792553587508912e+00 + -2.9134731031451011e-01 2.9156776083752378e+00 2.6549958482369176e+00 + -1.2127330374207013e-01 2.8418591385417038e+00 3.1290011001026783e+00 + 8.1313320342774276e-02 2.6261035123575081e+00 3.5635150284525707e+00 + 2.8347102790471801e-01 2.2925404052045590e+00 3.9378624985320441e+00 + 4.5564909513321183e-01 1.8641858755268406e+00 4.2510007931449545e+00 + 5.7760048428484367e-01 1.3508896888195596e+00 4.4974224660447266e+00 + 6.4180726012735012e-01 7.6387136102259234e-01 4.6501294254887044e+00 + 6.6555641659312459e-01 1.3988166126430712e-01 4.6621797671925949e+00 + 6.8679634221334518e-01 -4.5129856324346701e-01 4.5185646680664853e+00 + 7.3447742983921449e-01 -9.5818631041570546e-01 4.2950596082312194e+00 + 8.6419399242942474e-01 -1.3464541630916123e+00 4.1710912368872943e+00 + id 12331 + loc 6.8708026409149170e-01 4.6983841061592102e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5377542566130974e-01:2.6149599265221735e-01:1.4085217787459969e-02:3.0817171141788363e-01:8.6315942176277227e-01:2.9819400282568864e-01:1.2175291199641218e+00:3.6045035472910314e-01:1.8738783982112661e+00:2.7705873816775745e-01:2.2853059846502521e+00:4.5377088790705317e-01:3.0160366181095908e+00:4.1886845804293482e-01:3.5777829041553275e+00 + CVs 20 + -3.0597081890204686e-02 7.2863090807359221e-01 4.1998851462054315e-01 + -1.0653489059763221e-01 1.5226033885610195e+00 8.0130827730325571e-01 + -2.4384510258461994e-01 2.4009592471132857e+00 1.0790836286513454e+00 + -4.6372193119403304e-01 3.3072538501586721e+00 1.1424295495115755e+00 + -7.8172224015015868e-01 4.1018866412569048e+00 8.8586795107052407e-01 + -1.1480266002677744e+00 4.6139766912792552e+00 3.2072943966010858e-01 + -1.4662605917176044e+00 4.7577048313231298e+00 -4.1060131540335587e-01 + -1.6843176631297481e+00 4.5864592439706549e+00 -1.1435789219926236e+00 + -1.8195247187678905e+00 4.2197016116860642e+00 -1.7710859573550333e+00 + -1.9275497179586405e+00 3.7600660932726768e+00 -2.2764457065346306e+00 + -2.0168729791049458e+00 3.2287929558754471e+00 -2.7523791111479108e+00 + -1.9518687198419522e+00 2.5932678152802509e+00 -3.2988380147745984e+00 + -1.5976411373552359e+00 1.8526892316180825e+00 -3.8484601773538580e+00 + -1.0079051007624742e+00 1.0369754348975775e+00 -4.2113693703166115e+00 + -3.6402811307577748e-01 2.2120753676533567e-01 -4.3552599997934003e+00 + 8.3935379970819901e-02 -5.9206364115842858e-01 -4.4799509206125556e+00 + 5.8504699202074129e-02 -1.3413256177584436e+00 -4.7719806864760139e+00 + -4.7100113916275532e-01 -1.7801046732815813e+00 -5.3050772911518465e+00 + -1.1480247325782171e+00 -1.7716782104668316e+00 -5.9915098340428949e+00 + id 12332 + loc 6.0308903455734253e-01 3.3882808685302734e-01 397 + blend 0.0000000000000000e+00 + interp 4.6448567396716439e-01:4.5753238391260864e-01:3.8350529380973475e-01:4.0916685406898007e-01:9.2153247869977795e-01:3.1231658668867418e-01:1.1611614074778100e+00:4.6448102911042471e-01:2.0439977227152095e+00:3.1536734266184863e-01:2.9762848646012099e+00:3.0836097222407338e-01:3.8205092492549642e+00 + CVs 20 + -1.1756280760771274e+00 2.4154255207115180e-01 2.8118561719075047e-01 + -1.9492088596956840e+00 2.8722270420498203e-01 4.6469184081532433e-01 + -2.6308627441672607e+00 2.7072188768252498e-01 6.1016804426619065e-01 + -3.3558682612023518e+00 2.5620086606494263e-01 7.3860934561625347e-01 + -4.1100773888222175e+00 2.2990249338156163e-01 8.6112046047776891e-01 + -4.8656499661402055e+00 1.7619030122713203e-01 9.8986037067471355e-01 + -5.5883544260140061e+00 8.2003680534850631e-02 1.1359872560791746e+00 + -6.2496913008015680e+00 -6.4168829566766394e-02 1.3046263524893906e+00 + -6.8323889006717584e+00 -2.7048175983555711e-01 1.4921072428612492e+00 + -7.3320056119957986e+00 -5.3879597057914685e-01 1.6898615374453159e+00 + -7.7515135712612855e+00 -8.6234113815747671e-01 1.8882729429766010e+00 + -8.0974195380226668e+00 -1.2263249646558034e+00 2.0831944869431336e+00 + -8.3796666943531903e+00 -1.6189306373212091e+00 2.2832017172276835e+00 + -8.6084506997005086e+00 -2.0424279042243501e+00 2.4964076128317845e+00 + -8.7901598894227142e+00 -2.5056805032748262e+00 2.7260145284535251e+00 + -8.9237290945374355e+00 -3.0137462799240589e+00 2.9752484848086795e+00 + -8.9994608766205371e+00 -3.5647494554376102e+00 3.2459712040499396e+00 + -9.0010662532032608e+00 -4.1490929900777207e+00 3.5238312742275815e+00 + -8.8774601590069828e+00 -4.6989380633144764e+00 3.7516433174763852e+00 + id 12333 + loc 6.0328727960586548e-01 7.1475750207901001e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3151111836795703e-01:3.2595542061124733e-01:3.0914986940444977e-01:3.5182031947240278e-01:9.9999140497730377e-01:4.3150680325677337e-01:1.9493776922468999e+00:3.2018518356219883e-01:2.3655705677872692e+00:3.0076275187742496e-01:3.6235705183047453e+00 + CVs 20 + -7.5329585950651090e-02 2.2322985382070418e-01 2.7086958640977854e-01 + -1.1012394446702889e-01 3.7456577934822355e-01 4.4107248932893822e-01 + -1.2364146770190051e-01 4.9066968905762426e-01 5.6449234080355037e-01 + -1.3063729185213530e-01 6.0928740220739408e-01 7.0016833548286062e-01 + -1.3177215964059405e-01 7.2968658915536833e-01 8.4440430969275593e-01 + -1.2895658785652697e-01 8.5124919332711202e-01 9.9375487608115232e-01 + -1.2629334984176482e-01 9.7440791403034965e-01 1.1453137943418992e+00 + -1.2930819979807259e-01 1.0991225948278631e+00 1.2962033757126303e+00 + -1.4453965069756700e-01 1.2251084071075402e+00 1.4453576540177397e+00 + -1.8127225489716070e-01 1.3529550933129106e+00 1.5941998982391417e+00 + -2.5484658694480289e-01 1.4814851040889778e+00 1.7436307295377871e+00 + -3.8565256527067693e-01 1.5995199078457731e+00 1.8878801324113486e+00 + -5.8118318789491308e-01 1.6815537454781058e+00 2.0104983770828317e+00 + -8.2025611525677933e-01 1.7057291751316277e+00 2.0958546784792627e+00 + -1.0727419571879020e+00 1.6741074876236428e+00 2.1434086871585483e+00 + -1.3306800634937719e+00 1.6008827042373190e+00 2.1614635068122001e+00 + -1.6049404578369011e+00 1.4918443310813843e+00 2.1515236726826168e+00 + -1.9072345106922222e+00 1.3456145063175673e+00 2.1014442449878046e+00 + -2.1720326264139209e+00 1.2260791692028064e+00 2.0550761580693657e+00 + id 12334 + loc 4.2496579885482788e-01 4.6857646107673645e-01 409 + blend 0.0000000000000000e+00 + interp 3.3681009319663313e-01:3.2115213591102476e-01:6.6234623718954833e-03:2.9631736469711967e-01:1.0576613057338913e+00:2.9884825342567706e-01:2.0080704832204899e+00:3.3680672509570120e-01:2.7262409220537078e+00:3.0568451737957286e-01:3.1212895260262239e+00 + CVs 20 + -1.1974497781017715e-01 1.6506002930188907e-01 -2.3415197560001849e-01 + -2.8200110758620645e-01 3.3028876139933500e-01 -4.4305750874393685e-01 + -4.5560064277997048e-01 5.0958342501023335e-01 -6.7040718394675980e-01 + -6.1274138093767450e-01 7.0234514409186377e-01 -9.2602597577939838e-01 + -7.5095479555005817e-01 9.0083900413949503e-01 -1.2102029201699827e+00 + -8.6770636354455855e-01 1.0980163090202535e+00 -1.5258220659436945e+00 + -9.5765005779762524e-01 1.2893474233354369e+00 -1.8809566321241364e+00 + -1.0125973332350049e+00 1.4647726517414636e+00 -2.2861397986667784e+00 + -1.0234791068087874e+00 1.6018493668801261e+00 -2.7423273305656051e+00 + -9.8793806939985163e-01 1.6732746369182241e+00 -3.2372044041603067e+00 + -9.1593648145239659e-01 1.6540137688087391e+00 -3.7489377733985036e+00 + -8.2606560113566885e-01 1.5266139329429576e+00 -4.2467441290278138e+00 + -7.3485607263419339e-01 1.2887156931336619e+00 -4.7011840456670742e+00 + -6.5093245862131166e-01 9.4852541733840257e-01 -5.0949369942759715e+00 + -5.7769544667430350e-01 5.1658163539234581e-01 -5.4173123795483411e+00 + -5.1221371013277472e-01 6.6784626045621742e-03 -5.6554898880604672e+00 + -4.4177871328306523e-01 -5.5691220748647119e-01 -5.7955038593608421e+00 + -3.5896567377237026e-01 -1.1402198207505703e+00 -5.8401210096421270e+00 + -2.6208852719460146e-01 -1.6816220003104299e+00 -5.8732093364538551e+00 + id 12335 + loc 6.8587315082550049e-01 7.6989620923995972e-01 403 + blend 0.0000000000000000e+00 + interp 4.0198339227118995e-01:3.5570457383761572e-01:5.2308557377249199e-01:3.2131101457689509e-01:1.0006280206101947e+00:2.8968651581913574e-01:1.7613110554655482e+00:4.0197937243726728e-01:2.1989741477048836e+00:3.0436001978565302e-01:3.0414050438557343e+00:3.6225718593919998e-01:3.7840198855944371e+00 + CVs 20 + -8.6563347253513556e-02 -9.5442944756225084e-03 5.8552857241416359e-02 + -1.7229554072146885e-01 -2.7771745169327802e-02 1.2492677306913626e-01 + -2.4877903563436599e-01 -4.3583288435765893e-02 2.0440949109852297e-01 + -3.2601719425795317e-01 -6.8103015594462024e-02 2.8828670492502728e-01 + -4.0433830350896915e-01 -1.0451213605650556e-01 3.7516483889915664e-01 + -4.8113068696966821e-01 -1.5692165944320760e-01 4.6329674854452896e-01 + -5.5184086915732244e-01 -2.2859391991532954e-01 5.5072499963118271e-01 + -6.1170112631747087e-01 -3.1967956711166173e-01 6.3561204064640142e-01 + -6.5633869982548831e-01 -4.2729324480555153e-01 7.1614231726582045e-01 + -6.8131947210821142e-01 -5.4718065378083935e-01 7.8992716377343275e-01 + -6.8229086239715298e-01 -6.7523422683142453e-01 8.5317153110411248e-01 + -6.5526505483981934e-01 -8.0752117203633478e-01 9.0066398213277543e-01 + -5.9853810897870940e-01 -9.4062778393584645e-01 9.2588288524484441e-01 + -5.1416526899558401e-01 -1.0724243155624693e+00 9.2124174126010372e-01 + -4.0738966676311739e-01 -1.2026448091381006e+00 8.7800517824697444e-01 + -2.8421218087723643e-01 -1.3316869432241236e+00 7.8581690617714128e-01 + -1.5693245502660735e-01 -1.4582763941772821e+00 6.3740131540710820e-01 + -4.3462058479104448e-02 -1.5794064421838585e+00 4.3123766519422435e-01 + -3.0565441132386462e-02 -1.6326109905331765e+00 4.7702126528140532e-01 + id 12336 + loc 5.1218199729919434e-01 3.1485441327095032e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0681865789698185e-01:2.9444123637001457e-01:9.5382664156645391e-01:4.0681458971040291e-01:1.2810783649768847e+00:3.4251385114122851e-01:1.9200522130573650e+00:3.0443150738344171e-01:2.9028649917352176e+00:3.3286085963078282e-01:3.8541373597090849e+00 + CVs 20 + 4.1085731107929635e-01 3.4120288795397935e-01 -3.7615188226517560e-01 + 7.7193327589332306e-01 6.4803315276060314e-01 -7.2640283845907305e-01 + 1.1061888736392507e+00 9.4787934024418719e-01 -1.0752798433603805e+00 + 1.4668438921835545e+00 1.2571812849834481e+00 -1.3862237771044323e+00 + 1.8818374619542995e+00 1.5611832770358693e+00 -1.6049394039288407e+00 + 2.3412090087253654e+00 1.8338414058467993e+00 -1.7047583771725818e+00 + 2.8182119679895314e+00 2.0534195791493639e+00 -1.6735187515221750e+00 + 3.2773174359416575e+00 2.1976155272006381e+00 -1.4944167859925985e+00 + 3.6610669448460280e+00 2.2331407982279927e+00 -1.1718044053464693e+00 + 3.9173225137999874e+00 2.1566263614362011e+00 -7.8642561735561411e-01 + 4.0623316049809075e+00 2.0056556319799226e+00 -4.4543961093522433e-01 + 4.1491025894288249e+00 1.8148663943562411e+00 -2.1262401840256251e-01 + 4.2186355075533060e+00 1.6192464011243020e+00 -6.5496777952425589e-02 + 4.2820016412610027e+00 1.4024168287531489e+00 1.0579460767689786e-01 + 4.3229808056307419e+00 1.1334700964165287e+00 3.4141226823769733e-01 + 4.3242316213960201e+00 8.6431531806777595e-01 6.0626680001473754e-01 + 4.2916939240126890e+00 6.6064552828848511e-01 8.5466186360893581e-01 + 4.2390247001415160e+00 5.1891376476826923e-01 1.0655536944321649e+00 + 4.1571431929302038e+00 4.4316099385218544e-01 1.2863925925851754e+00 + id 12337 + loc 2.4028986692428589e-01 2.4233266711235046e-01 372 + blend 0.0000000000000000e+00 + interp 4.2599481055788119e-01:2.8643923446334713e-01:8.3103949279176870e-01:4.2599055060977564e-01:1.6240818395253505e+00:3.0454857794483636e-01:2.7298843378905913e+00:3.0086054037817639e-01:3.0892263994188327e+00:2.9777112230488284e-01:3.9063233228831695e+00 + CVs 20 + -1.9351889379763695e-01 4.8784188236828918e-01 5.3545554409394103e-01 + -3.2843274190957572e-01 9.1475102988721058e-01 9.8275435476791284e-01 + -3.9887980824991737e-01 1.3107446971613839e+00 1.4112426088150150e+00 + -4.1406246067810265e-01 1.7018131935294851e+00 1.8713259384604788e+00 + -5.3118055473225956e-01 2.1775496139596080e+00 2.3430981211368040e+00 + -9.1933268165717996e-01 2.7241683054328241e+00 2.5486648732619321e+00 + -1.4369819352835178e+00 3.1534762241796983e+00 2.3216513037102557e+00 + -1.8925755927132701e+00 3.3383170403477131e+00 1.7431273449673341e+00 + -2.1854259324487479e+00 3.2389113647480556e+00 9.6905756408530741e-01 + -2.2761455420384062e+00 2.8582503013870473e+00 1.7896582535192951e-01 + -2.1754286780797978e+00 2.2592706854177229e+00 -4.5582378122601686e-01 + -1.9244319873111269e+00 1.5473728051785325e+00 -8.8055962633697393e-01 + -1.5509844401574109e+00 8.0674392785264604e-01 -1.2282552472114276e+00 + -1.1155632910899760e+00 1.4307186620335544e-01 -1.7517163899571933e+00 + -8.2560195883607868e-01 -1.8296124572889205e-01 -2.6478090431312196e+00 + -8.6587238803607069e-01 2.7906206542495537e-02 -3.6922388083476845e+00 + -1.1891346404511745e+00 6.7133388227623425e-01 -4.5393000212085894e+00 + -1.6137930497912774e+00 1.4892382803016808e+00 -5.0022318248989306e+00 + -1.9417150721116034e+00 2.2312693885734589e+00 -5.1766613373439316e+00 + id 12338 + loc 3.2051709294319153e-01 5.3126978874206543e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3772302127258805e-01:3.4186766907576160e-01:3.8799602734801275e-01:4.2744321430635407e-01:1.0001027382344598e+00:2.9560948845138663e-01:1.5058646400997411e+00:4.3771864404237537e-01:1.9995066919109656e+00:3.6007491638206091e-01:2.6403766712364458e+00:4.2705910234441508e-01:3.2120318127271519e+00:2.8207258722070033e-01:3.9492943477352460e+00 + CVs 20 + 1.1777780929202136e-01 3.1718584615362588e-01 -1.5944041073580878e-01 + 2.5183839158172722e-01 6.5757310694930349e-01 -3.4910091106379315e-01 + 3.8478613068986661e-01 1.0120870965135449e+00 -5.4776921257536160e-01 + 5.0971501116934270e-01 1.3670515993448029e+00 -7.5516515300811626e-01 + 6.2814555225940227e-01 1.7073117732109098e+00 -9.8045719179717317e-01 + 7.4704084871524867e-01 2.0061380762349255e+00 -1.2310204733869885e+00 + 8.7791444301562971e-01 2.2289179258811429e+00 -1.5057040884958690e+00 + 1.0310472039838134e+00 2.3466453962138392e+00 -1.7851915513282952e+00 + 1.2075250490511567e+00 2.3528722320772819e+00 -2.0402434405914511e+00 + 1.4010447351079489e+00 2.2681538808396247e+00 -2.2583194632374308e+00 + 1.6104400819124447e+00 2.1197603254553203e+00 -2.4529746788543556e+00 + 1.8407160783632925e+00 1.9266640917900042e+00 -2.6481716310761869e+00 + 2.0847904345835966e+00 1.6952897717194162e+00 -2.8653083373687389e+00 + 2.3062741858087987e+00 1.4184692981156761e+00 -3.1256216277365110e+00 + 2.4446459618758345e+00 1.0979181321396612e+00 -3.4535460293138076e+00 + 2.4351164138865631e+00 7.8097556264399592e-01 -3.8703622295241531e+00 + 2.2416848441598747e+00 5.5465241592458225e-01 -4.3441584000208024e+00 + 1.9459259475284942e+00 4.3122583876314502e-01 -4.7788128328596695e+00 + 1.7476301192549961e+00 2.6456042247751099e-01 -5.1509924151975124e+00 + id 12339 + loc 7.7303552627563477e-01 5.8494645357131958e-01 406 + blend 0.0000000000000000e+00 + interp 1.8058518270069450e+00:3.9254329048589082e-01:3.2358739975679174e-02:3.9276609232245913e-01:8.5802445657441473e-01:1.3773390519139410e+00:1.2739043350504642e+00:1.8058418270069450e+00:1.4412911321278026e+00:6.1475159129260248e-01:3.1875285495369967e+00:3.9494227731072301e-01:3.3624225207061142e+00 + CVs 20 + 2.4037246164763201e-01 2.6273052468228381e-01 2.8648297862693795e-02 + 3.5099829553553935e-01 4.2814187458501241e-01 7.9590273468499007e-02 + 4.2926401918249368e-01 5.6608316449532348e-01 1.4418339008506514e-01 + 5.2058988409138429e-01 7.0584666907477756e-01 2.0995192015629713e-01 + 6.2707165666719911e-01 8.4465585827098044e-01 2.7636385495734139e-01 + 7.4950909152314793e-01 9.7857905721939120e-01 3.4232353525645753e-01 + 8.8601202386598255e-01 1.1023563665328711e+00 4.0560331656888154e-01 + 1.0318643601296249e+00 1.2111610351273745e+00 4.6392295735755484e-01 + 1.1839851439202995e+00 1.3038356238752307e+00 5.1910502605495457e-01 + 1.3447071603914813e+00 1.3812568660521776e+00 5.7852876144950138e-01 + 1.5151441475485226e+00 1.4403504545605188e+00 6.4560310751278704e-01 + 1.6863755301832830e+00 1.4751340763400420e+00 7.1153022578084335e-01 + 1.8459829173336579e+00 1.4842014149914409e+00 7.6720120767485944e-01 + 1.9903400533981079e+00 1.4708805337369792e+00 8.1711047757906996e-01 + 2.1222965598010681e+00 1.4383108610080761e+00 8.7245211759385199e-01 + 2.2417153163087948e+00 1.3905287897118426e+00 9.3501521485273431e-01 + 2.3433206677313425e+00 1.3350009950443569e+00 9.9555316526089932e-01 + 2.4191473036593094e+00 1.2764895119863269e+00 1.0459561298149420e+00 + 2.4294235494005760e+00 1.1785688681180018e+00 1.0768944898399486e+00 + id 12340 + loc 1.0373686999082565e-01 2.6382964849472046e-01 411 + blend 0.0000000000000000e+00 + interp 4.6898440879071668e-01:4.6897971894662877e-01:1.5622484242737511e-01:2.8680433517589260e-01:8.2913983461856255e-01:3.2920324748049451e-01:1.3919557406008396e+00:3.8892293182454740e-01:2.0719358491796229e+00:3.5909837186886501e-01:2.8885884015562624e+00:4.4806751415269436e-01:3.2173437624061823e+00:4.4072498523436832e-01:3.9176149037401222e+00 + CVs 20 + -2.1761283319180577e-01 2.4848863925848899e-01 -7.3560367598536813e-01 + -4.1854994989822325e-01 3.8201356541871251e-01 -1.2799573729459996e+00 + -6.2097214861769978e-01 4.8364327876741137e-01 -1.8042249752906863e+00 + -8.3467919437588045e-01 5.7203324748451934e-01 -2.3584116157814523e+00 + -1.0710726874054128e+00 6.2515570028426937e-01 -2.9120715083674349e+00 + -1.3402652363829395e+00 6.2815860495743969e-01 -3.4349856682360707e+00 + -1.6473011086335170e+00 5.7778439818621941e-01 -3.9130431750676520e+00 + -1.9950425891946635e+00 4.7327970626220850e-01 -4.3521789551118228e+00 + -2.3796204536203276e+00 3.0931301244467835e-01 -4.7675521203095288e+00 + -2.7891845350060982e+00 7.4053662450223046e-02 -5.1687531869088081e+00 + -3.2021613590624480e+00 -2.4995917181717697e-01 -5.5486901958328279e+00 + -3.5826272822116909e+00 -6.6336549888638530e-01 -5.8852428055865555e+00 + -3.9148540424118932e+00 -1.1322082427291513e+00 -6.1610255957594902e+00 + -4.2124812172771584e+00 -1.6254091101402510e+00 -6.3589828189800226e+00 + -4.5102663148616386e+00 -2.1340622216854355e+00 -6.4638284911435164e+00 + -4.8655235567226347e+00 -2.6752442851968068e+00 -6.4766061779495319e+00 + -5.3027790543771127e+00 -3.2779375355958216e+00 -6.4192244775472140e+00 + -5.7689139363944868e+00 -3.9553270079697169e+00 -6.3244271223508886e+00 + -6.1863737798087950e+00 -4.6746303866075900e+00 -6.2117248315941413e+00 + id 12341 + loc 8.5315042734146118e-01 7.5982880592346191e-01 416 + blend 0.0000000000000000e+00 + interp 6.0411319813232300e-01:4.2671562704308774e-01:7.1752987420847791e-04:3.4294837296086461e-01:9.9091544022606037e-01:4.8691934968152806e-01:1.3192420661532491e+00:5.2262442207783655e-01:1.8684201937173217e+00:6.0410715700034168e-01:2.1378594979527756e+00:3.3317742268953821e-01:2.9323074548823875e+00:5.3903277557600315e-01:3.3780664688042963e+00 + CVs 20 + 7.5717661067802156e-01 2.1063218773828141e-01 -1.2665481917059146e-01 + 1.2426843970247103e+00 2.7984954228245623e-01 -2.5816121636800049e-01 + 1.6602776503635486e+00 2.9117156881226519e-01 -3.8416350511272401e-01 + 2.0999596194621075e+00 2.7862760793225350e-01 -4.9816056877886500e-01 + 2.5518074103286081e+00 2.3100764508170646e-01 -5.9322778050747904e-01 + 3.0031532616061769e+00 1.4049065602056643e-01 -6.6115244232000148e-01 + 3.4390024042959606e+00 5.1686629676095386e-03 -6.9432401984766878e-01 + 3.8432886993182942e+00 -1.7072716571169066e-01 -6.8984267636408525e-01 + 4.2027848003347925e+00 -3.7798663238768082e-01 -6.5094237740101590e-01 + 4.5092342623362613e+00 -6.0342477090545454e-01 -5.8425455032355367e-01 + 4.7538959799349065e+00 -8.2712385552024359e-01 -4.9596251593191609e-01 + 4.9260746375464857e+00 -1.0211903408456311e+00 -3.8863558880740362e-01 + 5.0368484222942254e+00 -1.1706128983669228e+00 -2.5976714259676814e-01 + 5.1305713955897208e+00 -1.3008346391977983e+00 -1.1564181184725730e-01 + 5.2409431867936673e+00 -1.4446147696743137e+00 2.3420633298160576e-02 + 5.3751779439241458e+00 -1.6081967834520066e+00 1.5043945234830625e-01 + 5.5314548936539456e+00 -1.7926809696831933e+00 2.6655742833457952e-01 + 5.7024409948567483e+00 -2.0065815778669647e+00 3.5858582000034595e-01 + 5.8421498755484214e+00 -2.3093303906342442e+00 3.0875211072213499e-01 + id 12342 + loc 7.8052544593811035e-01 2.7707365155220032e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0730742896330983e-01:5.0730235588902017e-01:3.1594423861471510e-01:4.0921451093573175e-01:9.5143108575372315e-01:3.0742769296835926e-01:1.2866719079832563e+00:3.0396980363760179e-01:1.9908727881044788e+00:2.7137222260635502e-01:2.6841121018935050e+00:2.9661716096715562e-01:3.8767102461807350e+00 + CVs 20 + 3.3247650754998426e-01 3.4429608902053110e-01 -2.0669881804801502e-01 + 6.3942046411939768e-01 6.7994183479448245e-01 -3.6357545699246874e-01 + 9.5341572465364344e-01 9.9977226517635975e-01 -4.7939495283396671e-01 + 1.2954682187733195e+00 1.2982293747085842e+00 -5.4353522590022374e-01 + 1.6697846292843970e+00 1.5624670972993155e+00 -5.3910885752438498e-01 + 2.0705029928588661e+00 1.7808063272235128e+00 -4.5692517965923618e-01 + 2.4840185238544956e+00 1.9445823921187124e+00 -2.9571831804628645e-01 + 2.8932340865143820e+00 2.0489829841318996e+00 -6.2035783594398097e-02 + 3.2829232790764848e+00 2.0920639963644128e+00 2.2778217767798714e-01 + 3.6467812378513398e+00 2.0750991969687549e+00 5.4770600021462346e-01 + 3.9888463289962597e+00 1.9995466356179823e+00 8.7211694660155903e-01 + 4.3171270535668977e+00 1.8626729612359934e+00 1.1832438770359923e+00 + 4.6377198170118374e+00 1.6605054957490026e+00 1.4675592314290691e+00 + 4.9541329349844654e+00 1.3981494704912105e+00 1.7072271036817643e+00 + 5.2699374664227951e+00 1.0950221085699670e+00 1.8785638079259903e+00 + 5.5789983313908431e+00 8.0674461305864142e-01 1.9703294493350101e+00 + 5.8567205935531925e+00 6.1136917086843701e-01 2.0225335527564838e+00 + 6.1012329921549462e+00 4.9192439799260645e-01 2.0810952934885036e+00 + 6.4585481949387500e+00 3.0463801396054579e-01 2.0503627244242684e+00 + id 12343 + loc 9.4882947206497192e-01 1.9336642324924469e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8545161463591180e-01:3.4507646148073257e-01:1.0411799530342758e-01:2.6239213721146698e-01:1.0030279217107583e+00:4.8544676011976545e-01:1.7033424493882463e+00:3.1126230477702016e-01:2.1539725439210970e+00:2.5528367341281505e-01:3.2297552945903356e+00 + CVs 20 + -3.3678526808597287e-02 3.2373662763640187e-01 2.1305161305700943e-01 + -5.2092055604296694e-02 6.6404170331245749e-01 3.9832722388538827e-01 + -8.5302393872514426e-02 1.0130466936633657e+00 5.5932361270665165e-01 + -1.7292883852529228e-01 1.3592413570565109e+00 7.2182765980690733e-01 + -3.5099113451942676e-01 1.6647016058712647e+00 9.0630638290606491e-01 + -6.2527730387687597e-01 1.8731148091673462e+00 1.1012016429341855e+00 + -9.5963474033554441e-01 1.9375197975851508e+00 1.2546374923257233e+00 + -1.2681179375585954e+00 1.8679113367066211e+00 1.2840365370709925e+00 + -1.4731333668610298e+00 1.7508807332194223e+00 1.1741426032898179e+00 + -1.5840399132979335e+00 1.6409096276373414e+00 9.8636776731137765e-01 + -1.6172462153833813e+00 1.5486977781627935e+00 7.6038783269749655e-01 + -1.5632217465498799e+00 1.4981387994663482e+00 5.3700279633348535e-01 + -1.4630367265263147e+00 1.4773814801113152e+00 3.3449503129738650e-01 + -1.3897837481799136e+00 1.3846836165754006e+00 5.5028735821445358e-02 + -1.3938769645933162e+00 1.1485479552414462e+00 -3.6680420338520930e-01 + -1.5581443021382746e+00 8.2561523521171709e-01 -8.4660651331795700e-01 + -1.9473299024308675e+00 5.6187506688794908e-01 -1.2730175896935148e+00 + -2.4444781245798337e+00 4.9346052435465126e-01 -1.5416394014972612e+00 + -2.7022096835029528e+00 5.2078515506278489e-01 -1.6280893809537256e+00 + id 12344 + loc 4.5360985398292542e-01 6.4017766714096069e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0170863506125010e-01:3.4267445441262023e-01:7.2079109569394717e-01:4.0170461797489948e-01:1.3451770572479036e+00:3.1576263950736028e-01:2.2190917342094454e+00:3.1584538752462321e-01:2.9654279812441926e+00:2.9578207446977922e-01:3.6541780185606418e+00 + CVs 20 + 1.8918463146140763e-01 2.9760850899286251e-01 -6.2613181157350623e-02 + 3.6360808443647530e-01 5.5423937012883129e-01 -1.7330178297323701e-01 + 5.2681351101283247e-01 7.7352688239084710e-01 -3.1308801154928223e-01 + 6.7466007620001822e-01 9.4090472915052548e-01 -4.6840309830749394e-01 + 7.9878722278305603e-01 1.0432954797660243e+00 -6.2457692767484663e-01 + 8.9107567512580699e-01 1.0826368251534864e+00 -7.6126228686372188e-01 + 9.5318438911076575e-01 1.0784980832516078e+00 -8.6170913225461254e-01 + 9.9808761872137786e-01 1.0567836237509718e+00 -9.1820659912408686e-01 + 1.0436927775988396e+00 1.0409093745017883e+00 -9.3315282041618386e-01 + 1.1063991281150525e+00 1.0482200332923610e+00 -9.2150173886987763e-01 + 1.1940606936936757e+00 1.0844729031791984e+00 -9.0935150504827311e-01 + 1.2938150894708453e+00 1.1195306149589013e+00 -9.3096275594679445e-01 + 1.3726375879352442e+00 1.0695891721762385e+00 -9.9228893872359070e-01 + 1.4062715454535843e+00 8.1818284632119953e-01 -1.0594449642537846e+00 + 1.3691295215116890e+00 2.3647239624960542e-01 -1.1733142613549672e+00 + 1.2420844424057795e+00 -6.1727655393542613e-01 -1.6400038359444467e+00 + 1.1364981301504329e+00 -1.2054939070890160e+00 -2.7465666857245283e+00 + 1.3306784782430137e+00 -8.8752269680672491e-01 -4.1237027813249076e+00 + 1.4611905362144380e+00 -8.0532460880020662e-01 -4.2238988164918476e+00 + id 12345 + loc 2.9405683279037476e-01 1.4301764965057373e-01 397 + blend 0.0000000000000000e+00 + interp 4.0398040409029218e-01:3.2584679916996273e-01:4.1779648161663874e-01:3.9463197342275208e-01:1.1137444949164412e+00:3.3974924435281856e-01:1.9878406692702097e+00:3.1790652953866000e-01:2.6807376564729024e+00:3.1235420722624552e-01:3.3003259293171738e+00:4.0397636428625128e-01:3.9895608606575248e+00 + CVs 20 + -2.6156837255742438e-01 2.6842088387038271e-01 -1.1045079624146279e+00 + -4.5346859988528382e-01 3.1451063072808899e-01 -1.8624964926163792e+00 + -6.1008441525402568e-01 2.7378420128787695e-01 -2.5268042955880987e+00 + -7.4417565854269419e-01 2.0039615782381154e-01 -3.1968462119467427e+00 + -8.5690988316843919e-01 9.4800948274355645e-02 -3.8485598291500231e+00 + -9.5718127264310171e-01 -3.8454920432106521e-02 -4.4660152341355026e+00 + -1.0551230746247140e+00 -1.9499118455717901e-01 -5.0428233280699128e+00 + -1.1530217805695122e+00 -3.7521111296881637e-01 -5.5790493347444423e+00 + -1.2427923331244561e+00 -5.8164613275385224e-01 -6.0737781464568448e+00 + -1.3181030178759454e+00 -8.1505527422104562e-01 -6.5321663193668069e+00 + -1.3778554299756032e+00 -1.0800103107449490e+00 -6.9605833885248662e+00 + -1.4262326418777429e+00 -1.3840901101046950e+00 -7.3596698152116868e+00 + -1.4670952408642441e+00 -1.7337544369041651e+00 -7.7250260866253724e+00 + -1.4982993734195791e+00 -2.1340824088380890e+00 -8.0521978129224152e+00 + -1.5162744545283382e+00 -2.5874421240928962e+00 -8.3353184877132360e+00 + -1.5231892603320787e+00 -3.0852319761283455e+00 -8.5643762486435726e+00 + -1.5220989717072264e+00 -3.6070447550547726e+00 -8.7281779674652089e+00 + -1.5079377152192668e+00 -4.1328992345875646e+00 -8.8177650506464786e+00 + -1.4610257753891567e+00 -4.6237087274948170e+00 -8.7943043416302817e+00 + id 12346 + loc 5.9016406536102295e-01 6.0165226459503174e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1043761373071938e-01:3.0873692209480841e-01:7.6408334318932347e-02:2.6765109136558612e-01:1.0003061691511395e+00:3.1043450935458206e-01:1.9639040919765751e+00:3.0388176890512941e-01:2.3862757315475784e+00:2.6483289389175452e-01:3.0032528696454888e+00 + CVs 20 + 1.3237318511996152e-01 2.9325652564529703e-01 -2.5648328728088177e-01 + 2.7905172884785961e-01 5.8617532111283976e-01 -5.2558484605371181e-01 + 4.5816684618368775e-01 8.6964884651288554e-01 -7.8338089167703628e-01 + 6.7647333105114482e-01 1.1326816973512790e+00 -1.0161711177503356e+00 + 9.2852175515248370e-01 1.3599513781189765e+00 -1.2279995160802994e+00 + 1.2001152958460226e+00 1.5372005277609699e+00 -1.4406183219528204e+00 + 1.4754639386956354e+00 1.6595833241757569e+00 -1.6767951519413808e+00 + 1.7358709219678263e+00 1.7271497084479186e+00 -1.9497422251159930e+00 + 1.9575329089711380e+00 1.7380754781276258e+00 -2.2627526218420697e+00 + 2.1183283727201330e+00 1.6869429744980842e+00 -2.6066612329421672e+00 + 2.2020753742903287e+00 1.5668431643999201e+00 -2.9606007200269717e+00 + 2.2036233957753368e+00 1.3777827469150066e+00 -3.2976653902332478e+00 + 2.1269390529347212e+00 1.1254940340936002e+00 -3.5915739572073511e+00 + 1.9743015682113978e+00 8.1615827569982458e-01 -3.8126805680685720e+00 + 1.7493260398162771e+00 4.6754795182427555e-01 -3.9281984930289444e+00 + 1.4645613267510640e+00 1.1862764600970466e-01 -3.9204656997115248e+00 + 1.1510425897865781e+00 -1.8924617348870856e-01 -3.8104791357210641e+00 + 8.5526717421365317e-01 -4.5523504666670789e-01 -3.6710968495942842e+00 + 6.5583209847043378e-01 -7.4870576373483511e-01 -3.6980403799421144e+00 + id 12347 + loc 4.4081130623817444e-01 7.9714202880859375e-01 411 + blend 0.0000000000000000e+00 + interp 4.6636284831298463e-01:2.4924769223896806e-01:4.0240187344797196e-01:2.8378106817951704e-01:1.2900572261318497e+00:4.6635818468450152e-01:2.0983702292250395e+00:3.1472881062432506e-01:2.8721108364724017e+00:2.9438678294280535e-01:3.7176071821082752e+00 + CVs 20 + 9.9745810637310950e-01 1.2987510928861182e-01 -1.5723209931581875e-01 + 1.7074259095656472e+00 1.3684421404714159e-01 -2.6196146277145593e-01 + 2.3581599119380834e+00 1.1840284321397665e-01 -3.1088603460533126e-01 + 3.0223378189901839e+00 1.0936123266315467e-01 -3.0234218444441624e-01 + 3.6863531084999570e+00 1.0999294343562127e-01 -2.3921227070427487e-01 + 4.3412697002708081e+00 1.1704471548004258e-01 -1.3319480061455347e-01 + 4.9839057645258098e+00 1.1859400934493802e-01 -3.9844937288501803e-03 + 5.6166853698395212e+00 9.2933949223811263e-02 1.3037641659461496e-01 + 6.2453172904687539e+00 1.1560137178323382e-02 2.5263584680052525e-01 + 6.8685260945945643e+00 -1.5603032257676630e-01 3.4572850315374642e-01 + 7.4662300562041874e+00 -4.2889851411731006e-01 3.9857219827995782e-01 + 8.0076687431253433e+00 -8.0169956299357303e-01 4.1069554705039574e-01 + 8.4723028978251538e+00 -1.2563152431109552e+00 3.8748998490160752e-01 + 8.8514083269528996e+00 -1.7770058801430122e+00 3.3416771857879118e-01 + 9.1395567031328451e+00 -2.3498961389468200e+00 2.5715374562934806e-01 + 9.3326793690460548e+00 -2.9610616724094729e+00 1.6747129811927819e-01 + 9.4299313739108417e+00 -3.5906935977089276e+00 7.7942154002961117e-02 + 9.4431137567221253e+00 -4.1994121907826329e+00 -5.7725899651066004e-03 + 9.4483879613034425e+00 -4.6397071805976839e+00 -7.0465530159515233e-02 + id 12348 + loc 3.1584808230400085e-01 5.0495254993438721e-01 403 + blend 0.0000000000000000e+00 + interp 4.5413159635389133e-01:4.0436739640445507e-01:5.7289513930317337e-01:3.3425180962145651e-01:1.0002262731289711e+00:4.2569776736226078e-01:1.4480562916341440e+00:2.9700219739602773e-01:2.0517146632744421e+00:3.4541104727404670e-01:2.9891349844885715e+00:2.9961209522247945e-01:3.5581348640274060e+00:4.5412705503792783e-01:3.9919278085104466e+00 + CVs 20 + -9.0170796729053371e-02 1.0598563112188984e-01 -2.2825873544695046e-02 + -1.6078374631689421e-01 2.2448253196210707e-01 -3.9787794098243436e-02 + -2.1693604180544190e-01 3.4930386896297627e-01 -5.0688866831590726e-02 + -2.6828441865717728e-01 4.7600189967939210e-01 -5.9409887291936705e-02 + -3.1730168571166040e-01 6.0381800366900928e-01 -6.8305033616337343e-02 + -3.6535141648907599e-01 7.3048662918820673e-01 -7.9997977417713542e-02 + -4.1441073625119751e-01 8.5380988803752356e-01 -9.6638418505844287e-02 + -4.6814650103983196e-01 9.7286958500278697e-01 -1.1943334782406716e-01 + -5.2927642249328721e-01 1.0879142988336015e+00 -1.4879776569659273e-01 + -5.9870129290875129e-01 1.1998220552042911e+00 -1.8445015841627213e-01 + -6.7720108356924258e-01 1.3093021452223796e+00 -2.2576705186711502e-01 + -7.6583959851633887e-01 1.4148643762965840e+00 -2.7195123733090898e-01 + -8.6487762880492136e-01 1.5134482480340536e+00 -3.2228498935921801e-01 + -9.7335071984442223e-01 1.6018599909050506e+00 -3.7664914479335609e-01 + -1.0888514963620994e+00 1.6764196026489540e+00 -4.3667329056618159e-01 + -1.2101156567830880e+00 1.7352846260166905e+00 -5.0348124609814682e-01 + -1.3374287000166696e+00 1.7800112686787752e+00 -5.7093741940449572e-01 + -1.4678484427488079e+00 1.8110032892450478e+00 -6.2544386551282838e-01 + -1.5532748602997177e+00 1.7610158846418025e+00 -5.9664157953673591e-01 + id 12349 + loc 3.8332721590995789e-01 2.2966738045215607e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2967072826719405e-01:4.2966643155991141e-01:6.6780470473270559e-01:2.5750178358165154e-01:9.9821707145632332e-01:2.7281944829569948e-01:2.0000600676842852e+00:4.2662527611673862e-01:2.5174662702073132e+00:3.5169069107594908e-01:3.1139314532510407e+00:4.2782337947297588e-01:3.9503040990980338e+00 + CVs 20 + -1.4143590564179226e-01 2.6680208287392743e-01 -4.3824613534306123e-01 + -2.7275411252727233e-01 5.3365306414476033e-01 -8.5570227610736593e-01 + -4.1212789678825124e-01 7.8652212157512147e-01 -1.2774456887550436e+00 + -5.9148891176004970e-01 1.0408566645045929e+00 -1.7040370832700811e+00 + -8.4204340395269606e-01 1.3043769864793315e+00 -2.1149634803818338e+00 + -1.1894968026125827e+00 1.5655924762202467e+00 -2.4808470969065368e+00 + -1.6378156041554961e+00 1.7914145430439012e+00 -2.7675704126685425e+00 + -2.1610618297781237e+00 1.9349128900014199e+00 -2.9502603750052416e+00 + -2.7132356897535508e+00 1.9535615995357711e+00 -3.0209757653801628e+00 + -3.2355564043888769e+00 1.8313036964892098e+00 -2.9843485694895002e+00 + -3.6686349002384895e+00 1.5948552021274320e+00 -2.8605415256371098e+00 + -3.9858615033413516e+00 1.3019467063949450e+00 -2.6871245720992896e+00 + -4.2084537379448044e+00 9.9706268928152297e-01 -2.4998969680715604e+00 + -4.3766821180966069e+00 6.9059414920350792e-01 -2.3209420254124518e+00 + -4.5262686400543979e+00 3.7263902817391004e-01 -2.1707355532118258e+00 + -4.6800785349957632e+00 2.6476735726324918e-02 -2.0926144444006627e+00 + -4.8409594133833256e+00 -3.5002927072738932e-01 -2.1707962347971375e+00 + -4.9811595719372219e+00 -7.2269359159834190e-01 -2.4394953840710127e+00 + -5.1503542682275620e+00 -1.1033290899186836e+00 -2.5422387556627535e+00 + id 12350 + loc 8.9828723669052124e-01 5.7018518447875977e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9285430889666521e-01:3.1094544478639813e-01:2.4629270739424780e-02:3.4957333822771619e-01:9.2132983791461864e-01:3.9590971897990351e-01:1.7217042218645129e+00:4.0768758932891624e-01:2.1154519745138431e+00:4.9284938035357628e-01:2.7117053094744969e+00:4.2054743747794848e-01:3.0549313887908309e+00:4.8065327887636911e-01:3.6897147929452352e+00 + CVs 20 + 2.8732161564695977e-02 3.2040719329448081e-01 2.3960053748141358e-01 + 5.8404288189948243e-02 5.8315969340937546e-01 3.7161664183402299e-01 + 9.3410940502743733e-02 8.4063423623893385e-01 4.6240969506310031e-01 + 1.3877151739583868e-01 1.1181047475028385e+00 5.4350720901433780e-01 + 2.0194968149471942e-01 1.4070116221715456e+00 6.0310811976532674e-01 + 2.9067678826443283e-01 1.6965702358059627e+00 6.2788740931548193e-01 + 4.1532568834110795e-01 1.9723233150190889e+00 5.9745913708099774e-01 + 5.8091909021712840e-01 2.1967219353520582e+00 4.8181664316439565e-01 + 7.5289278897797318e-01 2.3031709770229964e+00 2.7876751992707094e-01 + 8.7882286897712636e-01 2.2665462311502367e+00 3.7385253939696383e-02 + 9.3583718852771913e-01 2.1063814475207430e+00 -1.9240418486916777e-01 + 9.2008484895532183e-01 1.8515800397659610e+00 -3.6915540499992427e-01 + 8.4354783270406508e-01 1.5346350715945229e+00 -4.7330335368264842e-01 + 7.2718270440339139e-01 1.1888876362514753e+00 -5.2923517147743249e-01 + 5.9376971253418476e-01 8.5601920671945975e-01 -6.2809121274798141e-01 + 4.8225498853174198e-01 6.3559081410605567e-01 -9.3614753015494268e-01 + 5.4779707283073809e-01 8.5950789813540207e-01 -1.4730642497305435e+00 + 8.2179572782684951e-01 1.4412658640320761e+00 -1.6048138607749938e+00 + 8.9148297732902282e-01 1.6382442912806616e+00 -1.7124932794982322e+00 + id 12351 + loc 1.6591082513332367e-01 1.9657792150974274e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6058527661927329e-01:3.1090539890187568e-01:1.1987005868631551e-02:4.6058067076650711e-01:5.6716098741960774e-01:3.0477402358108513e-01:1.2052291067302885e+00:3.1142152666412370e-01:2.7245076362420417e+00:2.7258905123650545e-01:3.1988652327968428e+00 + CVs 20 + 3.0231919457427808e-01 3.4157766489027652e-01 2.3265235469788678e-01 + 5.1935656127207108e-01 6.2900076643428959e-01 4.2946842544848857e-01 + 7.3331538394798745e-01 9.0058161004461745e-01 5.7794459916326590e-01 + 9.4868047404072042e-01 1.1536704732079477e+00 6.6779392413748406e-01 + 1.1295416533993801e+00 1.3741854262685802e+00 7.1274338429334572e-01 + 1.2723970445930872e+00 1.5626226469795479e+00 7.2456424785860074e-01 + 1.4201867577349936e+00 1.7274301944248518e+00 7.0826924814258885e-01 + 1.6436173020361362e+00 1.8944654309346112e+00 7.2007594644733419e-01 + 1.8460361200975701e+00 2.0805918166844291e+00 8.7106260879909247e-01 + 1.8472756449324994e+00 2.2282872751942118e+00 1.0411502293625059e+00 + 1.6962438217860796e+00 2.3376931512954897e+00 1.1053525794851109e+00 + 1.4554552576001483e+00 2.4298294291845828e+00 1.0581120756693154e+00 + 1.1802734456500410e+00 2.4800301889172807e+00 8.7669442796905206e-01 + 9.7475270243326317e-01 2.4452285866314316e+00 5.4708619668215452e-01 + 8.8736293129475463e-01 2.3257473769852011e+00 1.4011029532913283e-01 + 8.9367343721077364e-01 2.1578435722375926e+00 -2.2397321861566655e-01 + 1.0880642685442623e+00 1.9154410203741472e+00 -4.5147198451505072e-01 + 1.3685630084125628e+00 1.4426854894770691e+00 -7.0616952763601759e-01 + 1.2361714661983016e+00 1.6020957476929572e+00 -7.3153911304271058e-01 + id 12352 + loc 1.6886264085769653e-01 4.6593025326728821e-01 372 + blend 0.0000000000000000e+00 + interp 4.5428211829449744e-01:4.5427757547331449e-01:1.5088067317981435e-01:3.4896239372349208e-01:6.9390878085244290e-01:3.2306756170268286e-01:1.0290049514854647e+00:4.3360377941793404e-01:1.9342690438701937e+00:3.5354249008067840e-01:2.1964335704063602e+00:3.2103129747599890e-01:3.0052286526020913e+00:3.4692562877650851e-01:3.6163229883684616e+00 + CVs 20 + -1.5222056329542705e-01 7.3365947492449746e-01 4.3376493686748518e-01 + -3.0734904560141463e-01 1.4211507461351371e+00 8.3892444466835681e-01 + -4.9555994939915782e-01 2.0462724585936289e+00 1.1998228043738748e+00 + -7.5204619798351724e-01 2.5856434960134331e+00 1.4253856051552529e+00 + -1.0786341305785561e+00 3.0047211606606790e+00 1.4248879284203673e+00 + -1.4422873109379319e+00 3.2828312601123208e+00 1.2019000801358464e+00 + -1.8020678056775041e+00 3.4007438829513372e+00 8.0264176824987854e-01 + -2.1200109881540961e+00 3.3434122416738710e+00 2.8149976555403411e-01 + -2.3752456654307039e+00 3.1092739342546079e+00 -3.1167183384492070e-01 + -2.5549087363983962e+00 2.6965106422378851e+00 -9.2870168302427114e-01 + -2.6487264491741143e+00 2.1132701308339281e+00 -1.5124573191619963e+00 + -2.6497749366179395e+00 1.4132876179302247e+00 -2.0299209062574510e+00 + -2.5598787358362105e+00 7.1931808517846874e-01 -2.5207833030533093e+00 + -2.4654715090357602e+00 2.3652739166828263e-01 -3.0099011415165715e+00 + -2.5239528814711951e+00 1.1105279407457536e-01 -3.3863879224586011e+00 + -2.7385722641954819e+00 2.2425550119908078e-01 -3.6850338526395472e+00 + -3.1018052244590200e+00 5.2461564632193425e-01 -3.9802484601596415e+00 + -3.5988661220315370e+00 9.8680454735146483e-01 -4.2496325113746707e+00 + -4.2527383834454344e+00 1.6321505470020001e+00 -4.7335680565432092e+00 + id 12353 + loc 9.8949080705642700e-01 3.9130276441574097e-01 409 + blend 0.0000000000000000e+00 + interp 5.1569317378146906e-01:5.1568801684973131e-01:3.0559864673003900e-01:4.6950108065397805e-01:8.7906146640662397e-01:3.5971747326942743e-01:1.0860464601683515e+00:4.3519405927934685e-01:1.7932408295537203e+00:3.7759054420617416e-01:2.2189977127993301e+00:3.2942425169105038e-01:3.2162981886799709e+00:3.5097792825034241e-01:3.9728243938455687e+00 + CVs 20 + -3.3671926863325308e-01 2.2493621701225544e-01 1.9641738352817426e-01 + -6.5166911371942704e-01 4.2152160516522197e-01 3.7369681947295608e-01 + -9.5805334362633277e-01 6.0547651518870171e-01 5.3023890053293066e-01 + -1.2627007408349598e+00 7.8257714739036977e-01 6.6913719397742344e-01 + -1.5618350613313403e+00 9.5108969100088370e-01 7.9205337417882005e-01 + -1.8528635996919047e+00 1.1109536306884089e+00 9.0196276793397623e-01 + -2.1380345160738221e+00 1.2633654521268110e+00 1.0031344750293005e+00 + -2.4259597181940884e+00 1.4090153377066903e+00 1.1009255166696668e+00 + -2.7300571610674487e+00 1.5460131692002719e+00 1.2012262256822379e+00 + -3.0658581077266036e+00 1.6675854754481541e+00 1.3105603570648845e+00 + -3.4428366324051316e+00 1.7601082138208732e+00 1.4369165090653078e+00 + -3.8507398870577294e+00 1.8063733466796410e+00 1.5869501916186008e+00 + -4.2653226587750739e+00 1.7959803547833391e+00 1.7609308416511276e+00 + -4.6702111247024476e+00 1.7274339230738280e+00 1.9544007091172821e+00 + -5.0566299615442256e+00 1.6025317176887446e+00 2.1640520441113651e+00 + -5.4159643667894333e+00 1.4252576452311128e+00 2.3919529249591616e+00 + -5.7370918718853963e+00 1.2021488924813610e+00 2.6413568570407953e+00 + -6.0043633335011748e+00 9.4472876257444716e-01 2.9016779349778843e+00 + -6.0901007012191846e+00 7.9623628536760505e-01 3.0545868826534912e+00 + id 12354 + loc 1.3635186851024628e-01 2.0097930729389191e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3312009292899722e-01:3.0744233872707810e-01:2.6042502340805418e-01:4.3311576172806793e-01:1.0315559382266137e+00:3.0947601821867338e-01:1.7510623565539893e+00:2.9245193389112972e-01:2.4801903557967000e+00:3.1025526748904392e-01:3.4341856921629583e+00 + CVs 20 + -1.9850978734468044e-01 2.2327308794515732e-01 -1.8878062303125270e-01 + -3.6294918713127533e-01 4.6219040205096229e-01 -3.5661469083076558e-01 + -5.1915825320073139e-01 6.9178289077411792e-01 -5.1799404382699443e-01 + -6.8285357616369913e-01 8.9931600513986909e-01 -6.8239820030983389e-01 + -8.5393251314175878e-01 1.0886755113459667e+00 -8.5017349021629007e-01 + -1.0333123501612453e+00 1.2639175415066992e+00 -1.0227929651767149e+00 + -1.2238029631824281e+00 1.4231636796565543e+00 -1.2069002565142359e+00 + -1.4280205050579309e+00 1.5558136747144939e+00 -1.4123248470190715e+00 + -1.6455789663324913e+00 1.6486538356701090e+00 -1.6440042402323138e+00 + -1.8733599812553838e+00 1.6908681197765763e+00 -1.8989160793603881e+00 + -2.1060420374833364e+00 1.6744880664688955e+00 -2.1689757131465108e+00 + -2.3360176439435145e+00 1.5946030282668462e+00 -2.4438885363569280e+00 + -2.5548365619914986e+00 1.4495886930855579e+00 -2.7103558551398979e+00 + -2.7532733917959420e+00 1.2433849584171768e+00 -2.9513641725944826e+00 + -2.9198275735731913e+00 9.9065076967537891e-01 -3.1486705308852909e+00 + -3.0414304464264914e+00 7.3407169057966393e-01 -3.2878660530585759e+00 + -3.1126300468241679e+00 5.9266696678035946e-01 -3.3571471546867002e+00 + -3.2228103018670513e+00 7.6104421938669442e-01 -3.3594761456220272e+00 + -3.0364294328123309e+00 4.7121473739175990e-01 -3.3612920181134420e+00 + id 12355 + loc 1.4274528622627258e-01 5.0670343637466431e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0813959160535834e-01:2.4582921385668532e-01:1.8855412643475489e-01:3.5619587545503079e-01:1.0003688820041297e+00:3.1701094375764660e-01:1.6066375849376309e+00:4.0813551020944233e-01:2.0467853814795678e+00:2.9946470765870098e-01:3.0594947241107793e+00 + CVs 20 + -1.7619093920317239e-01 4.7474253785562442e-01 3.7580859255307947e-01 + -3.4889864828428041e-01 8.7341543747254868e-01 6.0296256091011924e-01 + -5.2951397004664136e-01 1.2439838393725693e+00 7.7100066749768059e-01 + -7.2627099609444801e-01 1.6031898897655175e+00 9.0946787193174838e-01 + -9.4705520704585655e-01 1.9455741136273637e+00 1.0134929267024722e+00 + -1.1999240488571516e+00 2.2646914639644633e+00 1.0771972907474647e+00 + -1.4921714285057299e+00 2.5511153039542811e+00 1.0905893346397340e+00 + -1.8277975541398166e+00 2.7905605554357402e+00 1.0385866218122057e+00 + -2.2056181401280055e+00 2.9620359684744022e+00 9.0307190469440057e-01 + -2.6128141398121127e+00 3.0363166706389615e+00 6.7471583173423644e-01 + -3.0279601818596618e+00 2.9884907268337599e+00 3.7442708111007250e-01 + -3.4389525193058170e+00 2.8065665317673885e+00 4.3851194396747784e-02 + -3.8409169210043221e+00 2.4875559967586538e+00 -2.7070634593769327e-01 + -4.2342811465149666e+00 2.0379098512239642e+00 -5.1783952638416253e-01 + -4.6181484356706672e+00 1.5010739869644654e+00 -6.3340597522302788e-01 + -4.9778704969760659e+00 9.9960110405239400e-01 -5.8367213601123347e-01 + -5.3043324527128251e+00 6.5656291325341176e-01 -4.2082496132952846e-01 + -5.6121692347887562e+00 4.8178984592760415e-01 -2.1117991747044157e-01 + -6.0026169731146837e+00 2.6664979330306054e-01 9.4447251739048443e-02 + id 12356 + loc 4.0621078014373779e-01 4.2933806777000427e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6389626827879538e-01:3.7975267627086307e-01:3.1553460546876133e-02:2.6630182192506308e-01:8.7062189864847539e-01:3.4906620177579240e-01:1.5204451303008744e+00:4.6389162931611261e-01:2.0024694171097828e+00:2.6980038726063232e-01:2.7712976639072062e+00:2.9455944312581067e-01:3.6858457355716494e+00 + CVs 20 + -2.1137749733360575e-01 2.6038788848849276e-01 2.6903639173599753e-02 + -4.2422852844921793e-01 5.0863326614447013e-01 3.4260233823753761e-02 + -6.3414981481916610e-01 7.5195960140225426e-01 3.7579456288643009e-02 + -8.4957292925620098e-01 9.9537914272383754e-01 3.7746709685090973e-02 + -1.0797326042689062e+00 1.2368068910984589e+00 3.0557635604834821e-02 + -1.3224396259498361e+00 1.4751851499153137e+00 2.4037804090498494e-02 + -1.5714332940916658e+00 1.7144629553975490e+00 2.9461777102669173e-02 + -1.8260130524544580e+00 1.9594817183792270e+00 4.8454377884667554e-02 + -2.0922964233837185e+00 2.2068184841039087e+00 7.3574876314020599e-02 + -2.3848363744426599e+00 2.4388095175576128e+00 9.8960153609329526e-02 + -2.7243454454586318e+00 2.6210383487074194e+00 1.2753997065932277e-01 + -3.1144959847475002e+00 2.7089508430572304e+00 1.7093219093346113e-01 + -3.5323588687012708e+00 2.6791892464362830e+00 2.3806524058779621e-01 + -3.9549174135312701e+00 2.5430457362549514e+00 3.2436383411313485e-01 + -4.3611830970784986e+00 2.3306875541072904e+00 4.2172353139005825e-01 + -4.7172619949765977e+00 2.0910415476550908e+00 5.3336399527753098e-01 + -4.9928703303422983e+00 1.8794840957344185e+00 6.6650378651732856e-01 + -5.1947787255884172e+00 1.7056325082447890e+00 8.1112059609677323e-01 + -5.3542861775787864e+00 1.5098773121183668e+00 9.7203593295511992e-01 + id 12357 + loc 1.1967377364635468e-01 5.9582918882369995e-01 406 + blend 0.0000000000000000e+00 + interp 4.5698183247983937e-01:4.5697299055114893e-01:9.2257347511504162e-02:3.8444917757430236e-01:8.3027410369132648e-01:4.1155645794623291e-01:1.2735165524436016e+00:3.5028879881401537e-01:1.9998338174248915e+00:3.9588637538142113e-01:2.5538213614229912e+00:4.4796369441454437e-01:3.0000409300133950e+00:4.5697726266151462e-01:3.6945858700857666e+00 + CVs 20 + 7.9460378908908572e-02 2.1308263981990672e-01 -4.8115658195391417e-02 + 8.6877413870695558e-02 3.5424536637745774e-01 -5.8631049191179049e-02 + 4.3026524024601526e-02 4.6358669300804101e-01 -5.8725899030870492e-02 + -8.5605651905878988e-05 5.6145226741695486e-01 -5.6588654722161458e-02 + -4.0616817191729104e-02 6.4226949864464888e-01 -5.1898966149572838e-02 + -7.6777479371846591e-02 7.0037061841133741e-01 -4.3899470684204654e-02 + -1.0393208292266873e-01 7.2886520633266416e-01 -3.2373737964332017e-02 + -1.1307646516588801e-01 7.1720920785265141e-01 -2.0923615227836014e-02 + -8.2987015895810395e-02 6.4262572596628786e-01 -3.0522054870663722e-02 + 3.6896764985305919e-02 4.6905146140236620e-01 -1.7053580712296779e-01 + 1.8445963322883258e-01 3.8759344497792531e-01 -6.9491225264997458e-01 + 1.1255149292681044e-01 5.8394824995087979e-01 -1.0990914962264264e+00 + 1.1981548672362341e-02 7.2195870926018513e-01 -1.2418140158567716e+00 + -7.0893051249489802e-02 7.9284003122428914e-01 -1.2983692344675666e+00 + -1.5442857657405940e-01 7.9997676102306703e-01 -1.3114851044228113e+00 + -2.5155278191625152e-01 7.2414746439386324e-01 -1.2861250002118558e+00 + -3.5588499411652608e-01 5.5922945032696403e-01 -1.2116749202872283e+00 + -4.4301704542318510e-01 3.3549687251319577e-01 -1.0768848001336986e+00 + -4.8309277489157665e-01 2.6456539739505369e-01 -1.0124645170152560e+00 + id 12358 + loc 7.1028482913970947e-01 2.6721873879432678e-01 1078 + blend 0.0000000000000000e+00 + interp 3.7347259251502002e-01:3.0476044038062849e-01:4.5374343121803584e-01:2.8469782204167599e-01:1.1928981403946159e+00:2.8541951203830862e-01:2.0184481530648286e+00:3.7346885778909489e-01:2.9230971284144820e+00:2.9249649417134926e-01:3.9070124357174922e+00 + CVs 20 + -1.6320367543850925e-01 3.3621680140048210e-01 3.5275203489598339e-02 + -3.1450948862867806e-01 6.7206809014964852e-01 8.8672917694694403e-02 + -4.8514968348005266e-01 1.0007429372193131e+00 1.7164281012870142e-01 + -6.8420666189666535e-01 1.3116567688918872e+00 2.9111266610099645e-01 + -9.1230665745645623e-01 1.5941723628490805e+00 4.5256212077232438e-01 + -1.1672587437743094e+00 1.8326767081669100e+00 6.6137072417030507e-01 + -1.4402746025220305e+00 2.0070211581310673e+00 9.1797355049800011e-01 + -1.7167788806328472e+00 2.1003587447101255e+00 1.2138013123891751e+00 + -1.9814933349715353e+00 2.1036990373014204e+00 1.5332328805782611e+00 + -2.2217547029526923e+00 2.0160090933723245e+00 1.8569336036590243e+00 + -2.4287550702326874e+00 1.8444313285290370e+00 2.1656889514822599e+00 + -2.5982599454238704e+00 1.6030645582913088e+00 2.4443682073612618e+00 + -2.7307725231571705e+00 1.3084317168135953e+00 2.6839954345614405e+00 + -2.8305773815943844e+00 9.7454748347691023e-01 2.8768868090176243e+00 + -2.9038805264524954e+00 6.1094607486781571e-01 3.0010030148968521e+00 + -2.9465377556804904e+00 2.4074908722501931e-01 2.9896541854057608e+00 + -2.9191585152447797e+00 -1.8776766355860675e-02 2.7432103070886109e+00 + -2.8097851932084210e+00 -2.5028580104262899e-02 2.4014333034283997e+00 + -2.7927810746426811e+00 -2.2284858378292483e-01 2.1890518204991847e+00 + id 12359 + loc 2.0166849717497826e-02 2.5921169668436050e-02 416 + blend 0.0000000000000000e+00 + interp 2.6970893078202185e-01:2.6970623369271401e-01:1.8394764299185895e-01:1.6301641854503471e-01:7.1956487476573039e-01:1.1453163919457514e-01:1.4563630823371037e+00:1.8696059273551729e-01:2.2061835652057940e+00:1.5590867418602500e-01:3.1612038638472955e+00 + CVs 20 + -1.6592864029429247e-01 1.0784696884463356e-01 -3.2010654524721588e-01 + -3.1061399366810799e-01 1.6812163953396125e-01 -5.2165598205024488e-01 + -4.5614662557010927e-01 2.1145516476197532e-01 -6.9385321120907573e-01 + -6.1002467501138402e-01 2.5399812136556998e-01 -8.8144905837137477e-01 + -7.6873355724287928e-01 2.9724916733247286e-01 -1.0828939195380294e+00 + -9.2812838104348583e-01 3.4134417733636102e-01 -1.2969752996451234e+00 + -1.0837594327725173e+00 3.8480928338953907e-01 -1.5227823985933391e+00 + -1.2310317510456033e+00 4.2504387814786382e-01 -1.7596311791053922e+00 + -1.3648319010784293e+00 4.5832319396819021e-01 -2.0079851426770068e+00 + -1.4791182400443721e+00 4.7860663871542553e-01 -2.2699753831648248e+00 + -1.5685173912186132e+00 4.7867262458354964e-01 -2.5471008286685843e+00 + -1.6296210197803731e+00 4.5543852443458333e-01 -2.8385109030090021e+00 + -1.6605517649052606e+00 4.1110295988114931e-01 -3.1410749576784340e+00 + -1.6633105180169825e+00 3.4921297483201741e-01 -3.4475706790661342e+00 + -1.6466816840916074e+00 2.7386323990062644e-01 -3.7487876931342976e+00 + -1.6179884955443611e+00 1.8845125265138307e-01 -4.0429042871047978e+00 + -1.5740604666511144e+00 9.3393550519725643e-02 -4.3357989382491331e+00 + -1.5083209712391212e+00 -7.5121883260480526e-03 -4.6307330730320340e+00 + -1.4888817119940874e+00 -5.6379059676637366e-02 -4.8930862022825874e+00 + id 12360 + loc 4.0790584683418274e-01 2.3135331273078918e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0055568414733861e-01:2.8206121456663813e-01:8.4248853524470313e-02:2.8073029056289039e-01:9.5891939826160488e-01:3.6939114167154385e-01:1.7380010936747996e+00:3.2039067317344294e-01:2.3690149235849578e+00:4.0055167859049717e-01:3.0000012531556406e+00:3.0389868926144759e-01:3.6054249152587663e+00 + CVs 20 + -3.3464548572054043e-01 6.1919847764335589e-01 -4.8688972101418315e-02 + -5.8279982403198249e-01 1.2583447183191894e+00 -1.7433315810509192e-01 + -7.2199789294163452e-01 1.9088133673521455e+00 -3.9532403860962562e-01 + -7.5438317308129821e-01 2.5182602764303565e+00 -7.4517487573991315e-01 + -7.0945654452977480e-01 3.0180408183323983e+00 -1.2388843769863807e+00 + -6.0159863879879039e-01 3.3490311473867864e+00 -1.8088149115563081e+00 + -6.5900100927405703e-01 3.3629100135683982e+00 -2.4269386412646501e+00 + -7.0739935351506966e-01 3.1028000528797488e+00 -2.7389585245275869e+00 + -7.1793261446381307e-01 2.7043744934775842e+00 -3.0856745001149326e+00 + -6.6723162338765329e-01 2.1381867960081369e+00 -3.3207941391020417e+00 + -5.0223669903587531e-01 1.5532095902747876e+00 -3.3415316558817851e+00 + -2.5039787788121509e-01 1.0295306478795319e+00 -3.1879066595024690e+00 + 2.2657959104485537e-02 5.1659236241614370e-01 -2.9302692618578283e+00 + 2.4899449145165786e-01 -8.4543789665444846e-02 -2.6089598452179961e+00 + 3.3055596873872584e-01 -7.8772628137014034e-01 -2.3212500445052635e+00 + 6.9141811249796903e-02 -1.7152937543104185e+00 -2.4743313787027863e+00 + -7.7663477468876851e-01 5.9690237930164436e-01 -4.4738970877191377e+00 + -4.9903620393514320e-01 1.2263258025615338e+00 -4.0770978769079003e+00 + -5.4436076675907452e-01 1.6310157228121076e+00 -3.9559101075240539e+00 + id 12361 + loc 1.3420416973531246e-02 3.0836619436740875e-02 408 + blend 0.0000000000000000e+00 + interp 4.5213849908169534e-01:4.5213397769670455e-01:5.7465076026002371e-01:2.6567401725728162e-01:1.4601939025461599e+00:3.4631129715000025e-01:2.1517948107243026e+00:3.0127216383901467e-01:2.8468924215966567e+00:3.0733618428014658e-01:2.9992134612613510e+00:3.1257989190220331e-01:3.9909581422087612e+00 + CVs 20 + -9.5145880827587209e-02 3.6755230723635068e-01 -2.9345270067485058e-01 + -1.6476353962960974e-01 6.0042535827236643e-01 -4.0211410613644738e-01 + -2.2988575511144346e-01 7.8810961522193956e-01 -4.5866982868695627e-01 + -2.9375793786050886e-01 9.6924538955157113e-01 -5.3235369776212293e-01 + -3.5283561966305937e-01 1.1368696584408378e+00 -6.2180644368848781e-01 + -4.0133100017976087e-01 1.2844383724084192e+00 -7.2695144045110349e-01 + -4.2921582659965007e-01 1.4040983037363708e+00 -8.5094187869992544e-01 + -4.1924344816094528e-01 1.4795930846281027e+00 -9.9854789162727431e-01 + -3.5587707189723000e-01 1.4811711430075487e+00 -1.1547650583637208e+00 + -2.6184559762624121e-01 1.4076239256002201e+00 -1.2771189390643625e+00 + -1.7092770784959566e-01 1.2954389532343478e+00 -1.3649925635403910e+00 + -8.7505187747647178e-02 1.1533833932502342e+00 -1.4410427592648769e+00 + -1.1389303633201481e-02 9.7654343576569680e-01 -1.5145905317906145e+00 + 5.7956790335796066e-02 7.6937428809361230e-01 -1.5963557373920017e+00 + 1.2713572913455909e-01 5.4337155063473053e-01 -1.7067833044726322e+00 + 2.0082950218924120e-01 3.1097686062914409e-01 -1.8636969884822265e+00 + 2.7493757635392468e-01 8.2217677271580247e-02 -2.0698475237178697e+00 + 3.5022661020084001e-01 -1.3750037508759139e-01 -2.3147224979291203e+00 + 3.9483521052563531e-01 -4.1479108955537192e-01 -2.4822524772584851e+00 + id 12362 + loc 8.2367640733718872e-01 2.7221065759658813e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2042443163009269e-01:2.6574940907895866e-01:1.0724122107826140e-02:3.3407141423051190e-01:1.0048523848867270e+00:2.6129859404861883e-01:1.8945989852671343e+00:2.7867919546261499e-01:2.5411079161912800e+00:4.1986049822891519e-01:2.9992062278633416e+00:4.2042022738577639e-01:3.4111600295049982e+00 + CVs 20 + -1.2237279611536168e-01 2.8660858466723027e-01 1.8695916638566448e-01 + -2.6109946742521078e-01 5.7921720083961281e-01 3.7008372537267831e-01 + -4.1862781303175706e-01 8.7401325203740654e-01 5.3845098629251642e-01 + -5.9165467929411819e-01 1.1685775172438910e+00 6.9031141772134763e-01 + -7.7469141737680469e-01 1.4630340100330332e+00 8.3189076332827094e-01 + -9.6272744846062941e-01 1.7594767693440230e+00 9.7563766583816647e-01 + -1.1527003297779159e+00 2.0609856723448350e+00 1.1409329527961010e+00 + -1.3418825531284717e+00 2.3673022194628404e+00 1.3534458081035601e+00 + -1.5235929778802704e+00 2.6674469405683090e+00 1.6389958698462599e+00 + -1.6873364442690448e+00 2.9382297565612565e+00 2.0140651554359081e+00 + -1.8235697419769534e+00 3.1479044532850398e+00 2.4770699117854584e+00 + -1.9289548065250213e+00 3.2663248437495787e+00 2.9990012125088508e+00 + -2.0125119366238380e+00 3.2816915954779056e+00 3.5385121961652115e+00 + -2.0929219452965122e+00 3.1990795675253478e+00 4.0651877281801800e+00 + -2.1934089107702608e+00 3.0261396118200050e+00 4.5665036620249531e+00 + -2.3406189401803270e+00 2.7562122105299247e+00 5.0403586782671033e+00 + -2.5502207298402864e+00 2.3838632434117315e+00 5.4507703432007277e+00 + -2.8073280974898607e+00 1.9731563894855397e+00 5.7216458766364857e+00 + -3.0785715411720038e+00 1.6836986045414681e+00 5.7626229933561044e+00 + id 12363 + loc 9.9799734354019165e-01 2.7979660034179688e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9867488738819862e-01:3.4734364067664264e-01:7.3254474845150641e-01:3.6761487637752671e-01:1.1530594597615851e+00:2.9633753030083693e-01:1.9989239869399711e+00:3.9867090063932475e-01:2.2966245053836127e+00:3.7099549639309864e-01:2.9916125639028373e+00:2.9523687170121521e-01:3.5593620192029385e+00 + CVs 20 + -1.3522407566803085e-01 3.6743559529168957e-01 -2.6043229554362368e-01 + -2.7542949019817431e-01 6.6603472633771021e-01 -4.0369235207671039e-01 + -4.3262012933544935e-01 9.3760831592932459e-01 -5.1219849315632260e-01 + -6.1371613907738765e-01 1.1948599984154291e+00 -6.1307501164770017e-01 + -8.1689349366796782e-01 1.4283448363216986e+00 -7.0187676150139144e-01 + -1.0364075168137554e+00 1.6269432283232867e+00 -7.7255255684816682e-01 + -1.2624167641610546e+00 1.7795033882542777e+00 -8.1859476124164687e-01 + -1.4832155674723064e+00 1.8797070546232728e+00 -8.3870206531958447e-01 + -1.6891696119842023e+00 1.9288893679994450e+00 -8.3810909645627207e-01 + -1.8772619641923760e+00 1.9333988550058747e+00 -8.2299570847559600e-01 + -2.0513272272991863e+00 1.8981652691529294e+00 -7.9543755194783117e-01 + -2.2149303373422446e+00 1.8239186643842760e+00 -7.5450252412382912e-01 + -2.3656421646622774e+00 1.7123217473321073e+00 -7.0010462340194790e-01 + -2.4944635678442730e+00 1.5730565430950247e+00 -6.3506216084639733e-01 + -2.5825014029037008e+00 1.4404951100106542e+00 -5.6831907094760092e-01 + -2.6026750126992217e+00 1.3999294361427341e+00 -5.0373316456935713e-01 + -2.5686257745811267e+00 1.4972479677745665e+00 -3.8492991460402237e-01 + -2.5505010008947662e+00 1.5087266257593652e+00 -2.4300949650836406e-01 + -2.5253295991750138e+00 1.1851506630128839e+00 -3.5653559696380677e-01 + id 12364 + loc 7.7096778154373169e-01 8.1032145023345947e-01 411 + blend 0.0000000000000000e+00 + interp 4.3536747876893800e-01:3.0230155799466363e-01:9.0813089930078705e-01:4.3536312509415032e-01:1.2180422239000364e+00:4.2042743720064557e-01:2.0070216223122710e+00:3.7703608625288448e-01:2.6832240581156728e+00:2.7714184741043152e-01:3.1162741102135900e+00:4.2421666948030445e-01:3.9837850578577134e+00 + CVs 20 + 8.8011286914743825e-01 2.2490406763042958e-01 -1.7001116943952740e-01 + 1.4587217464489970e+00 2.9033173993438677e-01 -2.8268857410030013e-01 + 1.9499651468590902e+00 2.9178447086891734e-01 -3.6312362989050567e-01 + 2.4413194976264605e+00 2.7551526869695286e-01 -4.1900286919565255e-01 + 2.9304239444059328e+00 2.4329758672041119e-01 -4.5119913290251507e-01 + 3.4179184992160820e+00 1.9793826503335055e-01 -4.6458046864768804e-01 + 3.9056805348512067e+00 1.4371407203996511e-01 -4.6824735731429434e-01 + 4.3962557913850651e+00 8.2858669447210320e-02 -4.7149248059391635e-01 + 4.8940259392829866e+00 1.0045387651764770e-02 -4.7733338497049999e-01 + 5.4007755397549166e+00 -8.7122396246406941e-02 -4.8408200047521216e-01 + 5.9094876161799270e+00 -2.2627952827962505e-01 -4.9641143659421122e-01 + 6.4070575878005211e+00 -4.2121818769689656e-01 -5.2943697423390457e-01 + 6.8906188232701835e+00 -6.6972047147834801e-01 -5.9435937969937669e-01 + 7.3656654016478225e+00 -9.6901100630366743e-01 -6.8380639697457413e-01 + 7.8363717932541919e+00 -1.3179079521922836e+00 -7.8549905636711592e-01 + 8.2992885311349607e+00 -1.7165527545525054e+00 -8.9646939993608488e-01 + 8.7409041930992455e+00 -2.1661773549115826e+00 -1.0142886224350878e+00 + 9.1358076381893607e+00 -2.6532745314933348e+00 -1.1213108386529447e+00 + 9.3835296610851788e+00 -3.0051430344603665e+00 -1.1939234748434790e+00 + id 12365 + loc 4.1389012336730957e-01 2.7189132571220398e-01 403 + blend 0.0000000000000000e+00 + interp 3.9501928535171388e-01:3.2913088198574653e-01:6.8000694395505124e-01:3.1885430372568757e-01:1.1118636832496842e+00:3.2674312976760261e-01:1.8825779629850579e+00:3.8932045136514432e-01:2.1354330449345600e+00:2.9774748654032102e-01:3.0004377848880588e+00:3.9501533515886039e-01:3.8146863145958712e+00 + CVs 20 + -1.2550188450767780e-01 4.0490631338251698e-01 -2.1034709012374214e-01 + -2.8244701097985947e-01 7.9282713926561577e-01 -3.7760014228999939e-01 + -4.6489535710865632e-01 1.1684122813726436e+00 -5.4822543195657480e-01 + -6.9386349563879035e-01 1.5293027855077725e+00 -7.3340989886987773e-01 + -9.8640412581695958e-01 1.8619181726868226e+00 -9.2018026544148901e-01 + -1.3563285449604439e+00 2.1689632524011513e+00 -1.0755874004798593e+00 + -1.8085371936289805e+00 2.4484958816343858e+00 -1.1545832958723430e+00 + -2.3311457811468315e+00 2.6748147654966941e+00 -1.1129188925306717e+00 + -2.8845444434035485e+00 2.8052382259370021e+00 -9.2361250060266042e-01 + -3.4017655193615823e+00 2.8073983441302710e+00 -6.0976638422989127e-01 + -3.8331139754577683e+00 2.6837798363775822e+00 -2.4754600753803158e-01 + -4.1747705519328635e+00 2.4672338610617786e+00 7.5863518216820358e-02 + -4.4549897806423306e+00 2.2018101798506882e+00 3.3046220306117124e-01 + -4.7028956907061188e+00 1.9079752160027801e+00 5.6454914864819516e-01 + -4.9272285377260641e+00 1.6026698024307404e+00 8.0865911851607930e-01 + -5.1297555732451929e+00 1.3610828566410644e+00 1.0005193019957903e+00 + -5.3017286546416393e+00 1.2540707499567152e+00 1.0679036761060101e+00 + -5.4407064015231184e+00 1.1950683238350002e+00 1.0968260939223480e+00 + -5.7029144169981132e+00 9.6238207239485452e-01 1.3480978922547930e+00 + id 12366 + loc 8.4748351573944092e-01 7.6988923549652100e-01 409 + blend 0.0000000000000000e+00 + interp 4.3966758592481087e-01:3.0945562129881138e-01:1.0313455417993842e+00:4.3966318924895165e-01:1.9554471591076625e+00:3.2447877337509901e-01:2.7439058667671494e+00:3.8628205994529724e-01:3.4172872897685949e+00:3.1705061885229174e-01:3.9925711802967725e+00 + CVs 20 + 5.1668072678597188e-01 9.1466739819428627e-02 -2.5908145857759929e-01 + 9.5989123037853052e-01 1.2649013743565746e-01 -4.9558011647969191e-01 + 1.3979781420590580e+00 1.5422524268022675e-01 -7.0992307571146263e-01 + 1.8466724562641366e+00 1.8619631464981812e-01 -9.0374708847778407e-01 + 2.3007168740627311e+00 2.1798847590181047e-01 -1.0800257344645559e+00 + 2.7563307843991307e+00 2.4367355763131737e-01 -1.2435378145860072e+00 + 3.2100907299899104e+00 2.5124756485702360e-01 -1.3974481766219766e+00 + 3.6581285259150871e+00 2.2252306860716686e-01 -1.5438692898595407e+00 + 4.0919931413919244e+00 1.3829272657787861e-01 -1.6897650124793016e+00 + 4.4929057760686169e+00 -1.7938010967748053e-02 -1.8467629167692978e+00 + 4.8408753993545135e+00 -2.5336507348483694e-01 -2.0191643913147543e+00 + 5.1312442534445175e+00 -5.6174432964742316e-01 -2.2007470632242434e+00 + 5.3672853995184262e+00 -9.3146605506235591e-01 -2.3866556115632682e+00 + 5.5444317670031804e+00 -1.3509081577061379e+00 -2.5766170427884836e+00 + 5.6519342032798612e+00 -1.8104886623807950e+00 -2.7639372419513610e+00 + 5.6810126867261825e+00 -2.3019684173059702e+00 -2.9260250493753812e+00 + 5.6351164104372486e+00 -2.8085853838835861e+00 -3.0428962431753632e+00 + 5.5481970092632773e+00 -3.2987499346311617e+00 -3.1283827118390763e+00 + 5.5861249228450163e+00 -3.7546551844408009e+00 -3.2366738692726185e+00 + id 12367 + loc 3.7204638123512268e-01 3.6734366416931152e-01 397 + blend 0.0000000000000000e+00 + interp 4.8692333100212343e-01:3.1281770359407957e-01:2.0452504969445540e-01:3.8532279462269597e-01:1.0033597449709200e+00:3.1182497767523609e-01:2.0021756378100020e+00:3.0273435842543245e-01:2.9981250545443565e+00:4.7115951576347687e-01:3.3008948980070292e+00:4.8691846176881343e-01:3.8424340075402927e+00 + CVs 20 + -3.2774043199693959e-01 3.2626272619514973e-01 -1.1599390506630700e+00 + -6.0277336695574180e-01 4.3894835534849908e-01 -1.8999986427243232e+00 + -8.6047491754532401e-01 4.7421785042715109e-01 -2.5525192858657952e+00 + -1.1107473918948250e+00 4.9028203366946166e-01 -3.2560672866651812e+00 + -1.3457906087266576e+00 4.6815414572781966e-01 -4.0017712002009231e+00 + -1.5592052926687350e+00 3.7759997827596686e-01 -4.7722482384338241e+00 + -1.7462321538643408e+00 1.9216382227665008e-01 -5.5460711795511273e+00 + -1.8864817522248958e+00 -1.0571638936240069e-01 -6.3031390947381913e+00 + -1.9508675563529250e+00 -5.2298728323849675e-01 -7.0182572635633802e+00 + -1.9277672725837824e+00 -1.0531297882035786e+00 -7.6586030804560989e+00 + -1.8293881969545831e+00 -1.6767958193930761e+00 -8.1970972332502292e+00 + -1.6818869352937855e+00 -2.3687200860544846e+00 -8.6237340327123757e+00 + -1.5134613907865466e+00 -3.1056389638923765e+00 -8.9446754489577991e+00 + -1.3524418495286861e+00 -3.8619014333012105e+00 -9.1688633926396683e+00 + -1.2256466680774054e+00 -4.6055679024315310e+00 -9.3033094288388174e+00 + -1.1461520863827785e+00 -5.3031697239874358e+00 -9.3559054578006933e+00 + -1.1090229134464442e+00 -5.9230564272448607e+00 -9.3415596910146892e+00 + -1.1120785808208562e+00 -6.4571061641920355e+00 -9.2892370417062775e+00 + -1.1809078934229063e+00 -6.8997732225101576e+00 -9.3202815744245182e+00 + id 12368 + loc 8.4818452596664429e-01 7.3265391588211060e-01 372 + blend 0.0000000000000000e+00 + interp 5.1487907446124692e-01:3.4706144583371112e-01:2.2486261096579363e-01:3.0786262139387294e-01:9.8271507159018534e-01:3.2806851224526612e-01:1.8877484691529069e+00:5.1487392567050239e-01:2.1254001620920837e+00:4.7064235975415619e-01:2.7744145851632172e+00:2.8194567473218268e-01:3.3963039398420660e+00 + CVs 20 + -4.0321985808062283e-01 4.2467779668662597e-01 -2.9778800284107912e-02 + -7.6831178110697318e-01 6.9809458488179643e-01 -1.7305498544236492e-02 + -1.1184549918701185e+00 8.1357164042024954e-01 3.6106483958990659e-02 + -1.4798994087498778e+00 8.0629857193341015e-01 1.3155272088440872e-01 + -1.8630561921642932e+00 7.4639300478687243e-01 2.7605111443270580e-01 + -2.2857522571755520e+00 7.0583326695385762e-01 4.6315593393432669e-01 + -2.7721718883865258e+00 7.2936833772202492e-01 6.4966709889616392e-01 + -3.3218060411265879e+00 8.4541213224517664e-01 7.7757223344843662e-01 + -3.8829919058667617e+00 1.0720339123909723e+00 8.0470661511785413e-01 + -4.3795651959394775e+00 1.3955419829797306e+00 7.1629045650225065e-01 + -4.7808018958198613e+00 1.7772978900687106e+00 5.2053934216612407e-01 + -5.0990056897606735e+00 2.1730591187145283e+00 2.2794699118704553e-01 + -5.3439196868209979e+00 2.5164406316789432e+00 -1.6584696424995926e-01 + -5.4970109370586266e+00 2.7158008503130597e+00 -6.5940061359578173e-01 + -5.4981942626981386e+00 2.7229204019743660e+00 -1.1812070646844353e+00 + -5.3275128829829379e+00 2.5592782577882613e+00 -1.6438916481529249e+00 + -5.1294617930099644e+00 2.1840517857833115e+00 -2.0272325451826685e+00 + -5.0940790531619982e+00 1.5664317144583670e+00 -2.2871639439799072e+00 + -5.1628070122823209e+00 8.6067208454493516e-01 -2.4730706553163886e+00 + id 12369 + loc 6.7619460821151733e-01 5.9801630675792694e-02 1076 + blend 0.0000000000000000e+00 + interp 4.1882076588072253e-01:3.2201201529115403e-01:2.6752488216214687e-01:3.7636971180623613e-01:9.8944235695757110e-01:3.7582803666834746e-01:1.7704594839874810e+00:4.1881657767306374e-01:2.2629722755995934e+00:2.9422833067895915e-01:3.0448839862807908e+00:3.5700217810929014e-01:3.9443616651511513e+00 + CVs 20 + -2.0090058217883902e-01 3.1161388316627980e-01 2.0524935186135010e-01 + -4.0336307180707653e-01 5.9138992799638346e-01 4.2639079941704999e-01 + -5.9714584930702519e-01 8.3701507023896438e-01 6.6464419763830218e-01 + -7.6879767950057754e-01 1.0496029973166998e+00 9.1942690533999527e-01 + -8.9920162079069743e-01 1.2317177659017435e+00 1.1915195975803727e+00 + -9.7791872647351274e-01 1.3856865430815191e+00 1.4798707723694000e+00 + -1.0193979255310706e+00 1.5170121879412903e+00 1.7827428726223982e+00 + -1.0512099215984039e+00 1.6381470744318325e+00 2.0960186822904223e+00 + -1.0937266420716245e+00 1.7638715086882346e+00 2.4145638042055975e+00 + -1.1666532495237316e+00 1.9080283782090344e+00 2.7334350712879294e+00 + -1.2953247021958667e+00 2.0828468682004235e+00 3.0366366723678930e+00 + -1.5158695978676133e+00 2.3075959739447289e+00 3.3139723288419844e+00 + -1.8687885290893089e+00 2.5077044039224887e+00 3.6180950191494512e+00 + -2.2584385072192350e+00 2.4786780821999033e+00 3.9755842169441502e+00 + -2.5732108958476765e+00 2.1991587228601737e+00 4.3141599500534094e+00 + -2.8952567884820390e+00 1.7523881328496755e+00 4.5792237974585710e+00 + -3.2447174875476046e+00 1.0627507261921789e+00 4.7503295359433109e+00 + -3.1633921686327220e+00 3.6920277859706530e-01 4.8489072283875840e+00 + -2.7291074174403187e+00 2.8215944790247560e-01 5.0004858941854096e+00 + id 12370 + loc 8.0656605958938599e-01 7.0916068553924561e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2454862373607077e-01:4.2454437824983343e-01:2.0494737671739405e-01:3.7116422149503286e-01:9.9606860601532521e-01:2.6187780709203684e-01:1.9888127285588262e+00:4.2154094464821246e-01:2.7707289371612509e+00:2.6606392869830725e-01:3.0371973769293743e+00:2.9109616449367376e-01:3.9502603758438504e+00 + CVs 20 + 4.5952497379836484e-02 4.2204603000704577e-01 -2.1284954211918827e-01 + 9.1523495662406182e-02 8.2046432777303091e-01 -4.1133929786365730e-01 + 1.4728728178269951e-01 1.2003475784558546e+00 -6.0159529725879102e-01 + 2.2452221768257616e-01 1.5666069222352204e+00 -7.9323349706032742e-01 + 3.3661749735402169e-01 1.9140849148569232e+00 -9.9833458632964189e-01 + 4.9031267746793278e-01 2.2224492592161709e+00 -1.2349662862000121e+00 + 6.8199155836335046e-01 2.4638857798780660e+00 -1.5122486391356931e+00 + 9.0152422925310893e-01 2.6251424675149551e+00 -1.8196048281413040e+00 + 1.1399556027721716e+00 2.7118968835372486e+00 -2.1348006200405845e+00 + 1.3885403682489099e+00 2.7364976010920019e+00 -2.4362416142535408e+00 + 1.6352561384545821e+00 2.7060397561070997e+00 -2.7113062394119165e+00 + 1.8668385230508930e+00 2.6192696291698128e+00 -2.9483844994670001e+00 + 2.0919070281515828e+00 2.4842032789729704e+00 -3.1369017866831759e+00 + 2.3591804004231318e+00 2.3261876310991276e+00 -3.2851183374752502e+00 + 2.7169088478440919e+00 2.1458428695303038e+00 -3.4239122017898671e+00 + 3.1716192732137483e+00 1.8833803203437420e+00 -3.5881606097366330e+00 + 3.6958435579108757e+00 1.4689667324383480e+00 -3.8294855594789841e+00 + 4.1794509215851274e+00 9.4970604703687223e-01 -4.2127539386234867e+00 + 4.3021259079346255e+00 7.4396895285054276e-01 -4.5146272383659545e+00 + id 12371 + loc 7.0132565498352051e-01 9.9756634235382080e-01 1084 + blend 0.0000000000000000e+00 + interp 5.0306457202101063e-01:4.4870930308956264e-01:5.3670703174035106e-02:2.8602586422389048e-01:9.5273344206768196e-01:5.0305954137529041e-01:1.3330310888042392e+00:4.6020613621556783e-01:1.9161396927659098e+00:3.3325862122129635e-01:2.2431844270592136e+00:4.7688037166354807e-01:3.0519604532831237e+00:3.6845529746574557e-01:3.5674667281564210e+00 + CVs 20 + -1.3919303193373506e-01 3.0310688687917070e-01 2.0080645631572142e-01 + -3.1861479180109165e-01 5.9096839355135067e-01 3.6610476157081856e-01 + -5.0944706188587496e-01 8.7888258440154021e-01 5.1825931321405205e-01 + -6.9843088608897985e-01 1.1655132225874247e+00 6.5896265674962307e-01 + -8.8981883065751410e-01 1.4418973195174594e+00 7.7284577775181607e-01 + -1.0838404189008382e+00 1.6969453394938918e+00 8.4660069923756209e-01 + -1.2745584278552793e+00 1.9183856525955687e+00 8.7414506896606770e-01 + -1.4498212121907887e+00 2.0959042198521511e+00 8.5826019990400571e-01 + -1.6008041140781657e+00 2.2249803601231060e+00 7.9152672142595459e-01 + -1.7131969062560779e+00 2.2944064036109011e+00 6.4463291493947628e-01 + -1.7559588857237738e+00 2.3016024050984676e+00 4.2731840793545794e-01 + -1.7222889644959172e+00 2.2561433356682676e+00 1.7506293262809547e-01 + -1.6311339968851510e+00 2.1225739439017883e+00 -9.2063767638122851e-02 + -1.4913508602569676e+00 1.8615346139740170e+00 -3.5012521026258603e-01 + -1.2910590480426298e+00 1.5483393581107991e+00 -6.0725325104577665e-01 + -1.0396130425776260e+00 1.3228423723985172e+00 -8.9943945360797917e-01 + -7.9295207285457692e-01 1.2882016579566486e+00 -1.2142788081893603e+00 + -5.8732781401644962e-01 1.4223920867138347e+00 -1.5240355547461868e+00 + -3.1233816411714332e-01 1.5287275931543185e+00 -2.0048366072882553e+00 + id 12372 + loc 6.8777555227279663e-01 2.3186263442039490e-01 413 + blend 0.0000000000000000e+00 + interp 5.0357522108053931e-01:4.6524627912818445e-01:7.9549729165145555e-01:5.0357018532832853e-01:1.0168920984151251e+00:4.5220302882371410e-01:1.4262933430925504e+00:3.0871595292412435e-01:1.9599651215646805e+00:3.7358925476206145e-01:2.3871675377002539e+00:4.0532632615510822e-01:3.0064808023895360e+00 + CVs 20 + -1.2754898201814238e+00 3.2917291749996530e-01 1.4176306773251190e-01 + -2.1744482449456046e+00 4.1702270134687014e-01 2.5819743300256970e-01 + -2.9671981693501150e+00 3.9544489091105106e-01 3.6038571682915010e-01 + -3.7631915329751373e+00 2.8949095297397209e-01 4.6161523641156599e-01 + -4.5466872460674237e+00 9.4700541490021273e-02 5.5979900244055425e-01 + -5.2893661999403285e+00 -1.8019062180660039e-01 6.5440715697147622e-01 + -5.9554429930865371e+00 -5.1993129829033180e-01 7.4327455062833492e-01 + -6.5114458211491852e+00 -9.1223655676704440e-01 8.2110592400952975e-01 + -6.9313826741978577e+00 -1.3366317418919809e+00 8.8933365441215906e-01 + -7.2112076391969380e+00 -1.7481738493828880e+00 9.6257809843300490e-01 + -7.3775004405790154e+00 -2.1038050968403752e+00 1.0568925232383493e+00 + -7.4874938461628364e+00 -2.3880350333103415e+00 1.1727114473894398e+00 + -7.5986329785432396e+00 -2.6178773240438211e+00 1.3031466028667471e+00 + -7.7443446070326134e+00 -2.8191696340845764e+00 1.4395325188266326e+00 + -7.9384875815208149e+00 -3.0177782554336448e+00 1.5684828649196596e+00 + -8.1812446891128285e+00 -3.2472540413172881e+00 1.6791328419706431e+00 + -8.4541745811038336e+00 -3.5366581618787172e+00 1.7623771514881708e+00 + -8.7206591389121275e+00 -3.8821085832810933e+00 1.8020081334905029e+00 + -8.8861230487800782e+00 -4.2550997513609516e+00 1.8042757935418705e+00 + id 12373 + loc 8.3279532194137573e-01 9.9308669567108154e-01 1081 + blend 0.0000000000000000e+00 + interp 3.9206118890336089e-01:3.6073266249903857e-01:2.1678715829106521e-01:3.0962983873122479e-01:1.4649077896240075e+00:2.5265833916763292e-01:2.0285427840411767e+00:3.9205726829147186e-01:2.6294190126769355e+00:2.9010458752625978e-01:3.5006343083148503e+00 + CVs 20 + 1.0323652435147569e-01 4.4859992018956119e-01 3.6157751879673783e-01 + 2.3033987547517779e-01 8.1186067863739453e-01 5.8899405931391036e-01 + 3.7392986655545357e-01 1.1472304354268188e+00 7.7160881869864850e-01 + 5.3310583431688863e-01 1.4753615606375270e+00 9.3893893869367195e-01 + 7.0858546727443084e-01 1.7859665315723610e+00 1.0769175453221227e+00 + 8.9914549907135177e-01 2.0662692199916655e+00 1.1690959864970250e+00 + 1.0993092918883378e+00 2.3004823589176739e+00 1.2004752170153199e+00 + 1.2985692218242346e+00 2.4724420033650603e+00 1.1664676274636645e+00 + 1.4818722830726179e+00 2.5702367301816640e+00 1.0759363711355538e+00 + 1.6332301691368072e+00 2.5940552094363261e+00 9.4986237152998321e-01 + 1.7468650994330241e+00 2.5610949369408909e+00 8.1046932632416124e-01 + 1.8287754802176064e+00 2.4906831606419564e+00 6.6672586016957747e-01 + 1.8850997135609671e+00 2.3930078481600217e+00 5.1871299226086998e-01 + 1.9183514725610715e+00 2.2729507163578671e+00 3.6575779384057439e-01 + 1.9302574457397621e+00 2.1326777040984393e+00 2.0551763818572810e-01 + 1.9258750343894213e+00 1.9672876326410917e+00 2.6990394138489249e-02 + 1.9131560799242913e+00 1.7497605407965171e+00 -1.7167298866450842e-01 + 1.8853660356620321e+00 1.4717154706400066e+00 -3.2084884304971761e-01 + 1.8095305444394820e+00 1.2519563257685815e+00 -3.1114613385160328e-01 + id 12374 + loc 4.4495445489883423e-01 1.5880228579044342e-01 397 + blend 0.0000000000000000e+00 + interp 4.6529403454848539e-01:3.1947963143475705e-01:6.0612033094203888e-01:2.9483655677917175e-01:1.2895617300075186e+00:4.0397636428625128e-01:1.9935073802069232e+00:3.1876864097206292e-01:2.4979918335757656e+00:4.6528938160813993e-01:3.0322940201887993e+00:3.0449474855595793e-01:3.9694692998837788e+00 + CVs 20 + -3.2937242019401330e-01 3.0856401418178109e-01 -1.0096124233866970e+00 + -5.6841840833957091e-01 3.9877055046917642e-01 -1.6591292813084624e+00 + -7.6622590199617047e-01 3.9042852702253483e-01 -2.2364933897348571e+00 + -9.2773409413281127e-01 3.3965055976989778e-01 -2.8601083188303704e+00 + -1.0445148784869107e+00 2.3676149716859149e-01 -3.5161134032535659e+00 + -1.1155937923779122e+00 7.4474518164905523e-02 -4.1859962952455225e+00 + -1.1501326709874973e+00 -1.4718594066015744e-01 -4.8486626032555336e+00 + -1.1602522648312488e+00 -4.2359169249794026e-01 -5.4810565790447923e+00 + -1.1549242837830338e+00 -7.4987399476379979e-01 -6.0653330219706207e+00 + -1.1430424978516989e+00 -1.1249028912988253e+00 -6.5967546153905019e+00 + -1.1342702874466291e+00 -1.5502992248482754e+00 -7.0757551184425971e+00 + -1.1327072600788504e+00 -2.0065059224639636e+00 -7.4844190952996090e+00 + -1.1489004527161817e+00 -2.4603495396193495e+00 -7.8038208815210170e+00 + -1.1896409276468511e+00 -2.8855445331510090e+00 -8.0344983386846316e+00 + -1.2587343399860720e+00 -3.2655738199575413e+00 -8.1852016852009815e+00 + -1.3547484269446708e+00 -3.5806461577968438e+00 -8.2660735480973297e+00 + -1.4733800785856475e+00 -3.8168426719653485e+00 -8.2919511507808341e+00 + -1.6053683155466303e+00 -3.9879524925571510e+00 -8.2729097222532886e+00 + -1.7097744762133160e+00 -4.1534078509103614e+00 -8.1147908997988587e+00 + id 12375 + loc 7.6822990179061890e-01 1.7264769971370697e-01 409 + blend 0.0000000000000000e+00 + interp 5.1200546689420601e-01:3.0996249242497526e-01:8.3684694200319276e-01:2.8597013196693166e-01:1.5405786126844734e+00:2.9771515689956429e-01:2.0506816274409374e+00:2.6515988064583201e-01:2.9299776982498540e+00:4.5146234693071885e-01:3.6057255598753359e+00:5.1200034683953710e-01:3.9851320086764441e+00 + CVs 20 + -2.1339338970587418e-01 -4.2115517489261511e-03 1.4929942123424128e-01 + -4.3707482732423303e-01 -2.5729713799189369e-03 2.9934789354577507e-01 + -6.6795257596840707e-01 4.4381627577864124e-03 4.3437236868945189e-01 + -9.0047154706778088e-01 1.4753870543072423e-02 5.4396329003673172e-01 + -1.1295078886098566e+00 2.6006566819527399e-02 6.2872259719508083e-01 + -1.3499429156290961e+00 3.7471885647639258e-02 6.9149936340255225e-01 + -1.5501422461465297e+00 5.2695271092777496e-02 7.3390319404787685e-01 + -1.7169409876496136e+00 7.8186706622472624e-02 7.5542868680328312e-01 + -1.8506925119428614e+00 1.2092146438549212e-01 7.5066205693208465e-01 + -1.9630621292633788e+00 1.8881599193045995e-01 7.1121210837430671e-01 + -2.0720575706259092e+00 2.8509109104139885e-01 6.3851555064678944e-01 + -2.2026927964330265e+00 3.9165847600159021e-01 5.4958553711883418e-01 + -2.3706595086842750e+00 4.7553182298878871e-01 4.6229980047375940e-01 + -2.5750067550719891e+00 5.1548781458567605e-01 3.8315647371498845e-01 + -2.8026903080463992e+00 5.1076114539101214e-01 3.1676200118886122e-01 + -3.0329481467141597e+00 4.7846136059434619e-01 2.7359061709058208e-01 + -3.2485458463207206e+00 4.2880419122071078e-01 2.5953578327273041e-01 + -3.4368557735045187e+00 3.3185545698183172e-01 2.6381256936659259e-01 + -3.5426739095967354e+00 7.0865078040948992e-02 2.6248831502706516e-01 + id 12376 + loc 2.8498807549476624e-01 6.7320495843887329e-01 372 + blend 0.0000000000000000e+00 + interp 3.5540032911303393e-01:2.9446816743558130e-01:3.1066265326270714e-01:3.4323099313366046e-01:1.2605093137248757e+00:3.2478839149267441e-01:2.0613101476115463e+00:3.0213995885745287e-01:2.9498098522097709e+00:3.5539677510974282e-01:3.9398512749596586e+00 + CVs 20 + -3.7133984084825333e-01 5.2540050829615481e-01 -1.1271566242865994e-01 + -7.2115015557466078e-01 1.0400416888222330e+00 -2.6529698621915609e-01 + -1.0587188052708127e+00 1.5330521104462038e+00 -4.8000038984015986e-01 + -1.3456507675743550e+00 1.9897900522746375e+00 -7.6376676640833052e-01 + -1.4718163837368243e+00 2.3842002535701452e+00 -1.1234416864062449e+00 + -1.3561344437021581e+00 2.6447393877065384e+00 -1.5256267667346992e+00 + -1.0412316536449020e+00 2.7058822007267538e+00 -1.8901873186935214e+00 + -6.0884955452881107e-01 2.5607960037086475e+00 -2.1592964774471319e+00 + -1.2279190624230241e-01 2.2592283947183578e+00 -2.3224301522530344e+00 + 3.8515626713797935e-01 1.8484003898205188e+00 -2.3993820906967644e+00 + 9.0521207944133386e-01 1.3252772393301584e+00 -2.4115539021357715e+00 + 1.4300619141912496e+00 6.7752284936625118e-01 -2.3579077163555668e+00 + 2.0023282913597193e+00 -4.0171824864044803e-03 -2.2268087769651834e+00 + 2.6724434179686525e+00 -5.1593124747195052e-01 -2.0655093078444926e+00 + 3.3297664647501568e+00 -6.7867794132627290e-01 -2.0017995098628907e+00 + 3.8533683052609931e+00 -5.1651936631441830e-01 -2.0753727777767574e+00 + 4.2638087550482950e+00 -1.3139144177653561e-01 -2.2273125843783688e+00 + 4.6111290503016154e+00 3.9011435624805557e-01 -2.3909632958897542e+00 + 5.0805079493895988e+00 1.0606081066301469e+00 -2.6072205492253002e+00 + id 12377 + loc 8.4158796072006226e-01 7.0743459463119507e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3628631384598900e-01:2.8898952602654870e-01:3.3985369942741850e-01:3.3628295098285055e-01:1.2768303485029762e+00:2.9968034374430297e-01:2.0519627372037625e+00:3.0334256815604965e-01:3.1266802037043129e+00 + CVs 20 + -2.0707111410180815e-01 3.0518260987203105e-01 1.5375040243549437e-01 + -4.2323119664881542e-01 6.1879343315469804e-01 2.9327743382835059e-01 + -6.4292311935615420e-01 9.4385303922466068e-01 4.2849986035509635e-01 + -8.7293356152575585e-01 1.2727124964334318e+00 5.5328752502520817e-01 + -1.1295650486896438e+00 1.5893566809059667e+00 6.4749601142010449e-01 + -1.4224443164704696e+00 1.8743717433246236e+00 6.8994303397892009e-01 + -1.7485145210486575e+00 2.1063287344947201e+00 6.6055975578371506e-01 + -2.0867724325052532e+00 2.2600891452515581e+00 5.3934947441542991e-01 + -2.3978736995592254e+00 2.3094825582830580e+00 3.1691709288757708e-01 + -2.6487749732159229e+00 2.2449247930692344e+00 1.3812589538537701e-02 + -2.8320285082482917e+00 2.0710987591460155e+00 -3.2003671355666818e-01 + -2.9611290383217597e+00 1.7948765914520239e+00 -6.0228831250236003e-01 + -3.0631500820686051e+00 1.4433528078059998e+00 -7.5988091657519619e-01 + -3.1427722075637030e+00 1.0333909245797253e+00 -8.5015965030484675e-01 + -3.1592842599873650e+00 5.3374389178014747e-01 -1.0125448598833209e+00 + -3.0701199218486619e+00 6.0106326512208152e-03 -1.3448552032080554e+00 + -2.9035932379420424e+00 -3.8356355802469511e-01 -1.8813058646156613e+00 + -2.7482168387104977e+00 -5.2130547903385804e-01 -2.5197484898128817e+00 + -2.6609995903679944e+00 -6.9490159651943584e-01 -2.9234388556919590e+00 + id 12378 + loc 7.5781494379043579e-01 2.5412985682487488e-01 1075 + blend 0.0000000000000000e+00 + interp 4.9172787177697541e-01:2.8029560546184529e-01:1.9317931290364754e-01:4.8158681156837080e-01:1.0000063245054513e+00:2.5478443388648769e-01:1.6771532308415005e+00:4.9172295449825765e-01:2.1973053040788217e+00:2.9187039816055294e-01:2.9864292956633234e+00:2.8911421749951216e-01:3.6701757328627647e+00 + CVs 20 + -1.4932057746918126e-01 9.2294070185241175e-02 2.0576665269563757e-01 + -2.7572443012479997e-01 2.4916394688803106e-01 4.4579120458726085e-01 + -3.7892674036093649e-01 4.3905426355134569e-01 6.7604460700006674e-01 + -4.6292389393278527e-01 6.1155874328002002e-01 8.6275943443747516e-01 + -5.3318185694941866e-01 7.3009005039876507e-01 1.0044518020727742e+00 + -5.8625411259165983e-01 7.8523612385843544e-01 1.1071724278935655e+00 + -6.0421499134739731e-01 7.8792037324316166e-01 1.1770306484749637e+00 + -6.0591549573379855e-01 7.5643750392659204e-01 1.2425986080576290e+00 + -6.5407686349752758e-01 6.7127710083100078e-01 1.3094697294322506e+00 + -7.7152476900916234e-01 5.0223429049806723e-01 1.3269115796198467e+00 + -9.0954235624835555e-01 2.6424256891529496e-01 1.2565121938897890e+00 + -9.9351581060810157e-01 2.5924081961611889e-03 1.1085182912415164e+00 + -9.9269976751217748e-01 -2.6254888709453073e-01 9.0550098192464135e-01 + -9.7036465903018754e-01 -5.9025281852192801e-01 6.1304070856869664e-01 + -1.0602911973757039e+00 -1.0629348802490572e+00 1.7485945895836405e-01 + -1.4887184643156421e+00 -1.6642344346292883e+00 -4.2057743193291586e-01 + -2.5913623295795207e+00 -2.1194616988674619e+00 -1.0942816288303969e+00 + -4.0682993933378846e+00 -1.9742570170699172e+00 -1.4365532691118164e+00 + -4.5292221231677976e+00 -2.0256402279891468e+00 -1.5845519154689218e+00 + id 12379 + loc 4.1189220547676086e-01 1.4533185958862305e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0508060459809614e-01:2.9440635153935835e-01:1.4331412107532215e-01:3.1888289028831229e-01:1.0459393586910473e+00:2.9835099828947859e-01:2.0625807076593929e+00:3.0734714553558373e-01:2.9892583412417171e+00:4.0507655379205015e-01:3.5134027435800932e+00 + CVs 20 + -4.2707750237949718e-02 3.8971180515989529e-01 -2.5503813852884583e-01 + -1.2814300876408444e-01 7.6545419335979503e-01 -5.2972079793835969e-01 + -2.5362206264607057e-01 1.1287375236353470e+00 -8.2066748919716648e-01 + -4.3192787917491154e-01 1.4802247642388133e+00 -1.1179987375443459e+00 + -6.6925280693429734e-01 1.8065747158001393e+00 -1.4089728468323606e+00 + -9.4714024006993935e-01 2.0862461145335955e+00 -1.6925872214214552e+00 + -1.2400632928690574e+00 2.3078943386693718e+00 -1.9795123245951691e+00 + -1.5325878678083806e+00 2.4696490743922173e+00 -2.2780372722153572e+00 + -1.8088432692323049e+00 2.5628548525978441e+00 -2.5886318484242716e+00 + -2.0423185267490762e+00 2.5680355676245359e+00 -2.9038330267381189e+00 + -2.2271412669852091e+00 2.4672316552108682e+00 -3.2124804998521337e+00 + -2.4065249203908534e+00 2.2259621148544739e+00 -3.5060421333172114e+00 + -2.5894367162565839e+00 1.8019849262278347e+00 -3.7272373045343108e+00 + -2.7183232162206221e+00 1.2754779769329279e+00 -3.7931947732721811e+00 + -2.7755000493726554e+00 7.6256842888981391e-01 -3.7088236071987537e+00 + -2.7775439137576474e+00 2.6752710461365337e-01 -3.4520479352257789e+00 + -2.7136063952217340e+00 -1.5193305336529561e-01 -2.8780164293392603e+00 + -2.6170589716627410e+00 -1.7391981021742953e-01 -2.1370129379526128e+00 + -2.5928027486633249e+00 -8.4377010921402040e-02 -1.8609492622269890e+00 + id 12380 + loc 5.1570242643356323e-01 5.6278777122497559e-01 403 + blend 0.0000000000000000e+00 + interp 3.9656842077594584e-01:3.4051933594696432e-01:7.1470981027581204e-01:3.9656445509173810e-01:1.3555331826043873e+00:3.1576768094330737e-01:2.2190771217512166e+00:3.1079356036630523e-01:2.9610090001208738e+00:2.9292170499312731e-01:3.6595826384210381e+00 + CVs 20 + 2.8876436128099148e-02 1.3537087034198181e-01 -2.3520894144419477e-01 + 3.9340597354483253e-02 2.8886874049314037e-01 -4.5435946747612038e-01 + 2.0454014114528574e-02 4.4213239299377982e-01 -6.7168651969502713e-01 + -3.7323055000881011e-02 5.9253937234330412e-01 -8.9282417994431018e-01 + -1.3965442056356747e-01 7.3408026982392149e-01 -1.1129978892211021e+00 + -2.9068537902765962e-01 8.6228337827211443e-01 -1.3243928891725467e+00 + -4.8986842267927799e-01 9.7234367533009181e-01 -1.5170497198590582e+00 + -7.2930821819533964e-01 1.0596307401658178e+00 -1.6820323837979325e+00 + -9.9726533534604234e-01 1.1216728049533842e+00 -1.8135381841530671e+00 + -1.2824596034201889e+00 1.1554656024861136e+00 -1.9084720345810309e+00 + -1.5741789725309123e+00 1.1569045042045978e+00 -1.9652726205428714e+00 + -1.8612445154680943e+00 1.1244400015525529e+00 -1.9840567372752171e+00 + -2.1334607250953641e+00 1.0620092006883100e+00 -1.9664472093301724e+00 + -2.3840028967664288e+00 9.7775843104352012e-01 -1.9136289759085994e+00 + -2.6096888660444071e+00 8.8156146467680507e-01 -1.8258002546456220e+00 + -2.8093251160552963e+00 7.8422900350808344e-01 -1.7043889698352772e+00 + -2.9794368008822874e+00 6.9155229465656698e-01 -1.5576614770953974e+00 + -3.1185991426573709e+00 6.0715459635128077e-01 -1.4028189156295685e+00 + -3.2805959417716499e+00 6.1043215162069631e-01 -1.3408590451600841e+00 + id 12381 + loc 7.1631664037704468e-01 2.6183226704597473e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0012729185502588e-01:3.3977681270852222e-01:2.9531856519547894e-01:3.1130482288407402e-01:1.0044914295068090e+00:3.3108834086290251e-01:2.0061406888490025e+00:3.2122424274159311e-01:2.7065076750778441e+00:3.0738985374805922e-01:3.2218757319686255e+00:4.0012329058210733e-01:3.9712468149803009e+00 + CVs 20 + -1.3177915506242299e-01 3.7355096596976589e-01 -3.2652793254377077e-01 + -2.4886060066200055e-01 6.4730592586313729e-01 -5.1606713969248674e-01 + -3.6820888510400296e-01 8.9771878191065668e-01 -6.7730553296272578e-01 + -4.9305335146116325e-01 1.1465750364312957e+00 -8.5344135190204784e-01 + -6.2598647711544342e-01 1.3876822645221898e+00 -1.0345563861115323e+00 + -7.6886234806660436e-01 1.6132387898603926e+00 -1.2105039772337451e+00 + -9.2401104070170170e-01 1.8157939986844003e+00 -1.3709158159697821e+00 + -1.0959247614242333e+00 1.9907055873452673e+00 -1.5078610350052470e+00 + -1.2922978455614291e+00 2.1344429731849401e+00 -1.6155966577615839e+00 + -1.5198194702476922e+00 2.2366563527683834e+00 -1.6865273644131640e+00 + -1.7727750137504095e+00 2.2800251169016388e+00 -1.7156500524504268e+00 + -2.0350024009817838e+00 2.2541584845059650e+00 -1.7090406856205538e+00 + -2.2911273031041621e+00 2.1613354214339551e+00 -1.6806824656984269e+00 + -2.5281901318208879e+00 2.0140361726424798e+00 -1.6471526696381154e+00 + -2.7284079874990823e+00 1.8454146457824163e+00 -1.6273752627350071e+00 + -2.8626438890794761e+00 1.7403916249045115e+00 -1.6359792061134224e+00 + -2.9222635918313680e+00 1.7937059113267266e+00 -1.6378820545148627e+00 + -2.9658480272990801e+00 1.8785200511255558e+00 -1.6262543171084911e+00 + -2.9994384013020792e+00 1.6572209687935739e+00 -1.8928458847921874e+00 + id 12382 + loc 4.8819813132286072e-01 3.1485441327095032e-01 1085 + blend 0.0000000000000000e+00 + interp 4.5390789042644714e-01:3.2354953170733652e-01:9.0275078949056531e-01:2.7776279881717353e-01:1.9245569735353785e+00:3.1518415876293732e-01:2.8320471059183556e+00:4.5390335134754289e-01:3.3174248338531580e+00:2.7006376107993607e-01:3.9665645184279805e+00 + CVs 20 + 3.8619602778328643e-01 4.3813373625351815e-01 2.1738571317301386e-01 + 6.9520002240462686e-01 8.3269277607153458e-01 4.4345309574612352e-01 + 9.6546267097943483e-01 1.1995654221900205e+00 7.1283506261622331e-01 + 1.1909554445031920e+00 1.5457473498531733e+00 1.0586382765620765e+00 + 1.3414666393899000e+00 1.8540262285938638e+00 1.4912941039147014e+00 + 1.3899506823981060e+00 2.0996472466844818e+00 2.0010010355424979e+00 + 1.3193654114028850e+00 2.2571490037005635e+00 2.5578103157941934e+00 + 1.1294408753027623e+00 2.3075578196446078e+00 3.1178122086657858e+00 + 8.4588037003199334e-01 2.2423534871371347e+00 3.6324804773397772e+00 + 5.2433445351007457e-01 2.0694192856211089e+00 4.0656687706669237e+00 + 2.2107131301417376e-01 1.8076877866178287e+00 4.4131007831843547e+00 + -2.8413632954989054e-02 1.4730379856518911e+00 4.6893808935170815e+00 + -2.0000388997184737e-01 1.0810394469974374e+00 4.9096159303905660e+00 + -2.5973209534653663e-01 6.6357637248249124e-01 5.0886575795946900e+00 + -1.7724180088375416e-01 2.7723352734066081e-01 5.2470480230193148e+00 + 1.9303371308409534e-02 -1.0538162221424785e-02 5.4256873276943400e+00 + 2.7065042952130702e-01 -1.5870181073764805e-01 5.6748027201207885e+00 + 5.4250131941868962e-01 -2.4318983070092237e-01 6.0042028076339262e+00 + 8.1779212971473947e-01 -6.2596915367447692e-01 6.4055578052163842e+00 + id 12383 + loc 9.1347289085388184e-01 4.7603818774223328e-01 1048 + blend 0.0000000000000000e+00 + interp 3.3947399761505370e-01:2.5662103049883445e-01:5.0510250489529929e-01:2.5578540083305212e-01:1.0661415057423862e+00:3.3947060287507758e-01:1.6598396346616431e+00:2.4467772283708861e-01:2.0863511872992269e+00:2.2543169580007230e-01:2.9959985151010109e+00:2.3238603194840710e-01:3.7132652915557292e+00 + CVs 20 + -1.2024876133640117e-01 4.8845956273561847e-01 4.2797366566369566e-01 + -2.4873910639636154e-01 1.0091344862002238e+00 8.3797786019195697e-01 + -4.3153911531448186e-01 1.5594572507106115e+00 1.1983510489039584e+00 + -7.1575796785727885e-01 2.1198146650657810e+00 1.4701359766901074e+00 + -1.1300296606838729e+00 2.6431583115072943e+00 1.6207765579866400e+00 + -1.6684866377620071e+00 3.0709112451044343e+00 1.6534529851627080e+00 + -2.3041778708356229e+00 3.3470786155305121e+00 1.5934036933168179e+00 + -3.0068054338962802e+00 3.4311919589927129e+00 1.4729204342131119e+00 + -3.7424682516199597e+00 3.3009615348671559e+00 1.3115668675757952e+00 + -4.4542529787111720e+00 2.9492718446016064e+00 1.1057519830783831e+00 + -5.0526543008136375e+00 2.3977153744740907e+00 8.4240383513575690e-01 + -5.4442651515166354e+00 1.7347494812597168e+00 5.2870764122623259e-01 + -5.6081739935010093e+00 1.0647617141891301e+00 1.9777852410744190e-01 + -5.5808423863476264e+00 4.3575084237721290e-01 -1.3616931090821177e-01 + -5.3777591159779989e+00 -1.2048818854526910e-01 -5.0671606174330597e-01 + -4.9993267173140588e+00 -5.3727113283492567e-01 -9.5362929875370683e-01 + -4.4487377386463516e+00 -7.8921096253191092e-01 -1.5414182481320369e+00 + -3.5788297649588245e+00 -7.1713627534603930e-01 -2.4457852829662432e+00 + -3.2045240783195208e+00 -4.3897123566119833e-01 -2.4248889451813413e+00 + id 12384 + loc 9.0335297584533691e-01 1.0226732492446899e-01 411 + blend 0.0000000000000000e+00 + interp 5.2973292308968090e-01:3.3830835178225832e-01:9.2573836625021966e-01:4.5809816801006142e-01:1.2557506328216057e+00:3.8138518717836278e-01:1.8983057787426776e+00:5.2972762576045007e-01:2.2098293596408278e+00:3.9215188116657002e-01:2.9484190408822819e+00:4.4877804527025678e-01:3.2616867327930170e+00:3.5605793708919575e-01:3.9948079328774728e+00 + CVs 20 + -4.8062742353491267e-01 3.4573980583774006e-02 2.3746735833064919e-01 + -8.3237004348742127e-01 -1.7461684321321280e-02 4.4446373837162134e-01 + -1.1828585901367610e+00 -9.8900685778284869e-02 6.3841804787031109e-01 + -1.5714596044618578e+00 -1.8158641518212038e-01 8.0549702833003467e-01 + -1.9965054713871595e+00 -2.7179093212671346e-01 9.2969877164379877e-01 + -2.4511546212195507e+00 -3.7598597865946004e-01 1.0037180714057392e+00 + -2.9210271461424639e+00 -4.9895464660197186e-01 1.0311803546545890e+00 + -3.3860669600439679e+00 -6.4755670438141344e-01 1.0204338228113854e+00 + -3.8278429460966614e+00 -8.3204518586030263e-01 9.8202485009103668e-01 + -4.2290025380463945e+00 -1.0617722414100568e+00 9.3345736618366859e-01 + -4.5729392531455559e+00 -1.3406237601128406e+00 8.9326282249348921e-01 + -4.8564040533788244e+00 -1.6638866104585703e+00 8.6479128411242712e-01 + -5.0928544921259631e+00 -2.0208016609594219e+00 8.3878626221941155e-01 + -5.2957313217887769e+00 -2.4006852865969019e+00 8.1261063312528892e-01 + -5.4642054751793072e+00 -2.7904048185438137e+00 7.9110452634178463e-01 + -5.5897811290239225e+00 -3.1684570353564987e+00 7.6770063411871603e-01 + -5.6739403931684453e+00 -3.5183186720545261e+00 7.3348367234446310e-01 + -5.7411128744639850e+00 -3.8536275878728765e+00 7.0382175424582383e-01 + -5.9181396202653254e+00 -4.2589925402546065e+00 7.3717567498433367e-01 + id 12385 + loc 3.3994612749665976e-03 6.0764050483703613e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5106084928192841e-01:3.4215766981199253e-01:4.8828267179603813e-01:4.4680257450042904e-01:9.9205442993059234e-01:2.9005810719521780e-01:1.5068777243354217e+00:3.3510558058687373e-01:2.0059397987951368e+00:4.5105633867343559e-01:2.9392565607379311e+00:3.0754626035053823e-01:3.5852688210051786e+00 + CVs 20 + 1.6169824304711974e-01 2.5652938893024529e-01 -1.4667789307436757e-01 + 3.0205235213214610e-01 5.3258787429930254e-01 -2.7187446751645605e-01 + 4.3285841050027141e-01 8.1278887752597084e-01 -4.0380223265700776e-01 + 5.6239455841004471e-01 1.0840682289553238e+00 -5.5892154713239850e-01 + 6.9867205021945866e-01 1.3466094889913141e+00 -7.4215343119296429e-01 + 8.5085624163713813e-01 1.5981919637055233e+00 -9.6032802362280290e-01 + 1.0293653131070313e+00 1.8320990041451430e+00 -1.2195688257865958e+00 + 1.2440636314412505e+00 2.0385706869984022e+00 -1.5258135438087579e+00 + 1.4964815908121401e+00 2.2039792599650272e+00 -1.8903833834484129e+00 + 1.7727160002313083e+00 2.3079630473891672e+00 -2.3276557795849726e+00 + 2.0462208736676257e+00 2.3260362232801213e+00 -2.8436106418126115e+00 + 2.2773073223393703e+00 2.2344743303850176e+00 -3.4137369516019529e+00 + 2.4347726986024512e+00 2.0356737738488153e+00 -3.9516892279898554e+00 + 2.5478526203115526e+00 1.7874286214833206e+00 -4.3051701419921118e+00 + 2.6866857369821564e+00 1.5549169086020171e+00 -4.2912077359240817e+00 + 2.8350917283612995e+00 1.2456299887186080e+00 -3.8816993216350260e+00 + 2.8890326409579763e+00 6.7404268144157864e-01 -3.3305806285354342e+00 + 2.6947356539837157e+00 -5.2461509524547512e-01 -2.8639066646234284e+00 + 2.8250888193144230e+00 -3.9290077644347954e-01 -2.9256599201590525e+00 + id 12386 + loc 1.5814173221588135e-01 1.9657792150974274e-01 1085 + blend 0.0000000000000000e+00 + interp 4.5059152261973578e-01:2.9698515154589494e-01:1.9613876189194412e-02:4.5058701670450962e-01:5.5828317171222219e-01:2.8120916187354200e-01:1.1931424705111642e+00:2.9960941509856354e-01:2.0004411505840825e+00:3.0403448084116624e-01:2.7065504973316501e+00:2.4799240812951193e-01:3.1812337129118924e+00 + CVs 20 + 3.9761584187243110e-01 3.9889730900486764e-01 2.6305452352782638e-01 + 6.5974390282405670e-01 7.6021686087689100e-01 4.9790899160203950e-01 + 8.6101242266540057e-01 1.1136752796089417e+00 7.4330144981706503e-01 + 1.0253097075912869e+00 1.4702904458639479e+00 1.0247918112750727e+00 + 1.1356712489405842e+00 1.8145277249710956e+00 1.3526233287622866e+00 + 1.1752282845001738e+00 2.1264369621043504e+00 1.7271972712082100e+00 + 1.1302245723751754e+00 2.3841651886730979e+00 2.1364672285185802e+00 + 9.9447957281360422e-01 2.5685235012641741e+00 2.5575095686365330e+00 + 7.7239597987262520e-01 2.6661124783405219e+00 2.9657519882887211e+00 + 4.7903507913121723e-01 2.6675210305135924e+00 3.3454448226470967e+00 + 1.3896665827093047e-01 2.5650404706315615e+00 3.6916272646624848e+00 + -2.1773970763099171e-01 2.3530754147319799e+00 4.0037906901524076e+00 + -5.5936995447836879e-01 2.0298635237975438e+00 4.2813746580988887e+00 + -8.5284742277069059e-01 1.5975901373005614e+00 4.5276766259303418e+00 + -1.0598180147624683e+00 1.0637905870675244e+00 4.7537400793112754e+00 + -1.1433555026454463e+00 4.8529826696571210e-01 4.9608367443399697e+00 + -1.1119229769064267e+00 -5.8311729650108779e-02 5.1524451671000753e+00 + -1.0025168671542122e+00 -5.4382275511183842e-01 5.3493349123065910e+00 + -9.2407814324058268e-01 -8.8835594625613823e-01 5.4636886682267809e+00 + id 12387 + loc 5.0390630960464478e-01 7.9066105186939240e-02 1048 + blend 0.0000000000000000e+00 + interp 4.5202316164998829e-01:2.7119502538580442e-01:6.0302160924314641e-01:4.5201864141837184e-01:1.0046918518425791e+00:1.5963063545844658e-01:2.0259664537148474e+00:2.7923533483247359e-01:3.0413592792959578e+00:2.3953954312161499e-01:3.9604391956538683e+00 + CVs 20 + -5.4295850773445814e-02 4.1459689893359392e-01 2.9361791604964904e-01 + -1.1357062810416790e-01 8.1054272148262374e-01 5.5656750047034820e-01 + -1.9715289913197648e-01 1.1964867564555679e+00 7.7694838362599128e-01 + -3.2461412310511217e-01 1.5780191608956970e+00 9.5175959657721909e-01 + -5.0617562218111445e-01 1.9419498739193877e+00 1.1004321950481382e+00 + -7.6355839877749176e-01 2.2834713496150147e+00 1.3209557962026843e+00 + -1.1345980056293086e+00 2.6303946563222071e+00 1.3204224341578255e+00 + -1.6041766878714292e+00 2.8585861935728549e+00 1.4629229145629628e+00 + -1.9622564809066785e+00 2.7965930978319351e+00 1.8942133938412804e+00 + -2.2448750800354191e+00 2.5451992847990552e+00 2.3100302491120011e+00 + -2.4492502899568875e+00 2.2059497501028114e+00 2.6330022536012399e+00 + -2.5939916325462677e+00 1.9205828358891814e+00 2.7904043385548229e+00 + -2.6814332318258063e+00 1.7651585141103725e+00 2.6905698813123919e+00 + -2.8200194676596366e+00 1.6059112852905553e+00 2.4611858497896244e+00 + -3.0747721269970962e+00 1.4944056322488943e+00 2.5484206962772991e+00 + -3.3281731610939431e+00 1.5249706927847102e+00 2.9953395259728643e+00 + -3.5322761000922407e+00 1.5907090015608385e+00 3.6780045219632509e+00 + -3.7120879324396339e+00 1.5267673875105383e+00 4.3778664012804054e+00 + -3.9337486934411863e+00 1.2362818409750451e+00 4.6981403693740758e+00 + id 12388 + loc 1.7517688870429993e-01 4.2778322100639343e-01 409 + blend 0.0000000000000000e+00 + interp 4.7925660696109873e-01:4.3309306958989446e-01:8.2730571066498171e-02:4.0929116345374383e-01:8.4561466404233676e-01:4.7925181439502912e-01:1.1832137576414774e+00:4.3605783280164617e-01:1.7637669180490196e+00:3.6229027925861418e-01:2.0359056555944277e+00:2.9389483993668514e-01:2.6506459661891508e+00:3.9111132976704011e-01:3.0015399550641835e+00:2.4839555685852605e-01:3.8065985963436466e+00 + CVs 20 + -2.4398321596579614e-01 2.3916167863529761e-01 -4.9354155030851460e-01 + -4.7174735216789243e-01 4.6022820728410851e-01 -9.2989921335115455e-01 + -7.1617493591945625e-01 6.8751474952824299e-01 -1.3656794678363746e+00 + -1.0138963554242895e+00 9.1045343668105239e-01 -1.8104519108403776e+00 + -1.3916402514175215e+00 1.0936434078585366e+00 -2.2335443767702126e+00 + -1.8548115956054521e+00 1.2053551521592678e+00 -2.6024536364615845e+00 + -2.3861653484510015e+00 1.2246782833817655e+00 -2.9044688218327344e+00 + -2.9555509107790376e+00 1.1381481048174933e+00 -3.1527859528733679e+00 + -3.5246109594435922e+00 9.3744766606635266e-01 -3.3695097598999340e+00 + -4.0515362273301170e+00 6.2051263863455031e-01 -3.5679837367066605e+00 + -4.5003594673320766e+00 2.1816193430488728e-01 -3.7465474035348403e+00 + -4.8729593490916967e+00 -1.7854130996179607e-01 -3.8969129147749486e+00 + -5.1923764215067152e+00 -4.7863927763967107e-01 -4.0147089095499506e+00 + -5.4526813084303569e+00 -6.5815953409852179e-01 -4.1088210039628148e+00 + -5.6437780366840089e+00 -7.6036139176356188e-01 -4.2054730118008443e+00 + -5.8175312672703594e+00 -8.6217113802207357e-01 -4.3296198046535093e+00 + -6.0669519712886020e+00 -1.0013938145910992e+00 -4.4991038285527596e+00 + -6.4181602821646075e+00 -1.1715151182684642e+00 -4.7281104034798886e+00 + -6.8213497167947557e+00 -1.3629591343248908e+00 -5.0642591316964864e+00 + id 12389 + loc 7.7946908771991730e-02 4.8218289017677307e-01 1080 + blend 0.0000000000000000e+00 + interp 3.4274683032627928e-01:3.0791700106382214e-01:1.0474891305376488e-03:3.0075831574315987e-01:7.8630531314835350e-01:3.4274340285797605e-01:2.4731761599692854e+00:3.1458286934745860e-01:3.2122632039113737e+00 + CVs 20 + 2.5052917292337262e-01 2.3873132590642809e-01 2.4616698530775563e-01 + 3.1045819922921436e-01 3.6454905289341066e-01 3.8874791191393410e-01 + 3.1051699989640547e-01 4.5738661809326003e-01 5.1935629576954212e-01 + 3.1557055704551074e-01 5.3361168053904728e-01 6.6138299398206113e-01 + 3.2430340982493622e-01 5.9154873493469928e-01 8.1457424783597876e-01 + 3.3655623502569154e-01 6.2945841176498085e-01 9.8063794013455940e-01 + 3.5296179646398429e-01 6.4471166174256456e-01 1.1626669414021873e+00 + 3.7522581180756631e-01 6.3392240833982361e-01 1.3636005453141571e+00 + 4.0665191414747137e-01 5.9373466931501562e-01 1.5851205327949514e+00 + 4.5191114860619158e-01 5.2234560417730802e-01 1.8272284210476375e+00 + 5.1682151067602899e-01 4.2120701467523736e-01 2.0875533352878302e+00 + 6.0637063324152041e-01 2.9384602301025564e-01 2.3625166597438310e+00 + 7.2095730975689098e-01 1.3927913095284117e-01 2.6517446307497718e+00 + 8.5737591202737073e-01 -4.8451797196525426e-02 2.9596439307180145e+00 + 1.0152272695579294e+00 -2.6308569143845034e-01 3.2888633323101129e+00 + 1.1972177267711128e+00 -4.7753997017938232e-01 3.6322840639191054e+00 + 1.4023190431499857e+00 -6.6473594508445843e-01 3.9742488531878792e+00 + 1.6256251172509013e+00 -8.1368170896371383e-01 4.3004309715840376e+00 + 1.8689337802237458e+00 -9.1172768785572522e-01 4.5990489698405392e+00 + id 12390 + loc 4.9579057097434998e-01 1.6963320970535278e-01 372 + blend 0.0000000000000000e+00 + interp 4.0946583459454250e-01:4.0407701587714240e-01:4.0655068201870259e-03:3.9954058207880405e-01:5.9586145057831286e-01:3.3523357206752502e-01:1.0201139404537145e+00:2.6518213039236682e-01:1.8994307354659488e+00:2.8363857204294385e-01:2.9025280686019723e+00:4.0946173993619656e-01:3.3018655450228325e+00 + CVs 20 + -4.8372325997340419e-02 3.8527491019777316e-01 5.7659412961185130e-01 + -8.6907450155968291e-02 6.8046383677251188e-01 1.1125200931821264e+00 + -1.2467008638395029e-01 8.8460801649596188e-01 1.6788888729635281e+00 + -1.9276640942733198e-01 1.0216821324642078e+00 2.2298240410242096e+00 + -2.8761095713194518e-01 1.1140700785588855e+00 2.6208299240630129e+00 + -3.4241255607526860e-01 1.1636076732963829e+00 2.8360611531397897e+00 + -4.7292461929700091e-01 1.2337578397408961e+00 2.9338910471856465e+00 + -7.6156217902239864e-01 1.2782297635195856e+00 2.7984268954140727e+00 + -1.1427721272706255e+00 1.2137025801498733e+00 2.4173314035699005e+00 + -1.5676737894025239e+00 9.8284008920318078e-01 1.8559018144338399e+00 + -1.9953261286210624e+00 5.5423093092474196e-01 1.1847451411258718e+00 + -2.3708946841344227e+00 -1.3993533974803463e-02 4.2547361531525169e-01 + -2.6531944940227370e+00 -5.1865212089057955e-01 -4.3625593784014977e-01 + -2.8636861822540283e+00 -6.5897755386980639e-01 -1.3007192108876338e+00 + -3.0219755298544939e+00 -3.7516855140510996e-01 -1.9136517948590237e+00 + -3.0547879284199642e+00 1.0121418574355767e-01 -2.3091313342987165e+00 + -2.9354592219936468e+00 7.0120228921369776e-01 -2.6536630429674437e+00 + -2.8047655408109877e+00 1.4351548153745504e+00 -3.0116032443836325e+00 + -2.8237680985854903e+00 2.3294665470420184e+00 -3.5220221589186105e+00 + id 12391 + loc 9.1891449689865112e-01 9.0416342020034790e-01 1082 + blend 0.0000000000000000e+00 + interp 4.7460784073926721e-01:4.7460309466085981e-01:1.6271628489050727e-10:4.3570325749585193e-01:1.5252700413619791e+00:3.9160069121545465e-01:1.5867233968451271e+00:3.0023951074228955e-01:2.0046252939965994e+00:2.6000541130097610e-01:2.7276187193803030e+00:3.1833386614872911e-01:3.2015637810753619e+00 + CVs 20 + -1.0551810403188409e-01 2.9989287816935783e-01 3.7015086086715876e-01 + -1.7293296083451096e-01 4.8470714949635274e-01 5.4619286017084179e-01 + -2.3701754844395082e-01 6.1905562139555426e-01 6.6105450738063698e-01 + -3.1722475552737250e-01 7.4230853072542802e-01 7.9281883884941151e-01 + -4.1962690183552237e-01 8.5226215178822229e-01 9.3928406770062733e-01 + -5.5062569141468531e-01 9.4494930613778094e-01 1.0986627316449245e+00 + -7.1468410875259458e-01 1.0146824289012628e+00 1.2695124802080775e+00 + -9.1258469652819552e-01 1.0555592370862676e+00 1.4513240616114809e+00 + -1.1420677064344500e+00 1.0630531978613456e+00 1.6452113093186502e+00 + -1.3990586020080200e+00 1.0343183183455655e+00 1.8533580585459242e+00 + -1.6788813829535585e+00 9.6717974902375436e-01 2.0778373300775246e+00 + -1.9766470261140807e+00 8.5854691353449020e-01 2.3190303067572455e+00 + -2.2835533526298204e+00 7.0690518118726642e-01 2.5750360199824964e+00 + -2.5850039366777176e+00 5.2251351577161276e-01 2.8442499047306189e+00 + -2.8679750948226217e+00 3.3113045078561154e-01 3.1277851787942303e+00 + -3.1249317828254535e+00 1.5745239378506870e-01 3.4273412652355422e+00 + -3.3507338275512186e+00 1.4022054719726285e-02 3.7407212032405694e+00 + -3.5493115865045324e+00 -9.5491030635653784e-02 4.0626227107755266e+00 + -3.8277447059532950e+00 -2.5465604537212339e-01 4.3794960180910270e+00 + id 12392 + loc 8.7517148256301880e-01 9.7464197874069214e-01 1084 + blend 0.0000000000000000e+00 + interp 4.9874974968232466e-01:2.7893752854642889e-01:6.3017588379790046e-01:4.7688037166354807e-01:1.0505531757303501e+00:4.9874476218482788e-01:1.6356342739419789e+00:3.0985472364706884e-01:2.2007289173110207e+00:3.0320733662090454e-01:3.0278915302013161e+00:3.2528146363695470e-01:3.9023787725278765e+00 + CVs 20 + -1.6021489741580805e-01 2.1077216236960522e-01 1.6966297091977345e-01 + -3.4408864907852699e-01 4.1914973620977453e-01 3.3515513819861542e-01 + -5.2486127250526782e-01 6.3457332088127438e-01 5.0755697619362761e-01 + -6.8753089599586892e-01 8.6043534379996234e-01 6.9127307507861246e-01 + -8.4497841352015357e-01 1.1020904184161757e+00 8.8147248947244294e-01 + -1.0198989800934284e+00 1.3689563359690153e+00 1.0714439230519450e+00 + -1.2520321204871618e+00 1.6774308805400995e+00 1.2476179137770520e+00 + -1.6010956611185208e+00 2.0390839057381904e+00 1.3572863265052191e+00 + -2.0679177172398551e+00 2.3796385941851601e+00 1.2819020743782255e+00 + -2.5178860139712729e+00 2.5718258394006965e+00 1.0002940315280906e+00 + -2.8496092774920201e+00 2.6253294476897180e+00 6.2501579396884377e-01 + -3.0577947893200177e+00 2.6229445072921456e+00 2.4289572827163486e-01 + -3.1906305831677524e+00 2.5317456979021866e+00 -1.1510258104339055e-01 + -3.2931935397487795e+00 2.1925030683185067e+00 -3.6780737654679185e-01 + -3.3288296585145529e+00 1.5855420573106636e+00 -4.8610466942154518e-01 + -3.2139733154664598e+00 8.3201301218777468e-01 -5.9489981491927224e-01 + -2.9284862024903995e+00 1.0660199979104401e-01 -8.4424462524972177e-01 + -2.5583177115851727e+00 -3.7691148679550146e-01 -1.2553519832737978e+00 + -2.2346349794862821e+00 -4.9327864375815655e-01 -1.6474779004953470e+00 + id 12393 + loc 5.9999543428421021e-01 9.4366759061813354e-01 1075 + blend 0.0000000000000000e+00 + interp 5.7414791497916284e-01:3.6556439828616388e-01:4.8116830100877084e-01:3.0456732186685170e-01:1.0373026274670407e+00:2.9012406363407428e-01:1.9936770350052777e+00:5.4033034637643462e-01:2.3522008655558628e+00:5.7414217350001306e-01:3.0156917673594426e+00:2.6920282450742239e-01:3.8919987369175884e+00 + CVs 20 + 1.5850013657512302e-01 2.0985350025076391e-01 -2.4813956951030169e-01 + 2.9019496712118520e-01 4.1598215400796085e-01 -4.8505882927769139e-01 + 4.1305885719369662e-01 6.1147538137141222e-01 -7.2002080155643577e-01 + 5.3307832683903911e-01 7.9371612042437611e-01 -9.5339141422588636e-01 + 6.4889799063334697e-01 9.6583159768922178e-01 -1.1821301870631169e+00 + 7.5953108449216988e-01 1.1321777548089564e+00 -1.4095502819252492e+00 + 8.6264019508967671e-01 1.2972200130757541e+00 -1.6464295365414132e+00 + 9.5613199162155293e-01 1.4639104589454881e+00 -1.9013056858369350e+00 + 1.0425333657457327e+00 1.6312592665421140e+00 -2.1744622299540612e+00 + 1.1280338425017860e+00 1.7957403325261381e+00 -2.4623347381495808e+00 + 1.2202990852782705e+00 1.9518045671931921e+00 -2.7691868410321376e+00 + 1.3272753730061106e+00 2.0852941981546183e+00 -3.1054524056893440e+00 + 1.4522694247985677e+00 2.1733703752022926e+00 -3.4793424459161666e+00 + 1.5898133817457671e+00 2.1876108212127336e+00 -3.8895081508111229e+00 + 1.7350483846388389e+00 2.1085290990025380e+00 -4.3213068291031718e+00 + 1.8899947549218998e+00 1.9342661216678012e+00 -4.7551544629005607e+00 + 2.0358852039069317e+00 1.6692818583397999e+00 -5.1772595507345791e+00 + 2.1033156187480557e+00 1.3304552882045355e+00 -5.5738890428416692e+00 + 2.0118666180570224e+00 1.0171042978162728e+00 -5.8893838370088885e+00 + id 12394 + loc 7.6661658287048340e-01 5.0151622295379639e-01 416 + blend 0.0000000000000000e+00 + interp 3.7960868024466887e-01:2.6823970511022011e-01:2.8392786320586860e-01:3.3600646490600355e-01:1.3719316746937567e+00:2.9604437752314483e-01:2.2117826718204983e+00:3.7960488415786642e-01:3.1741717053779528e+00:3.6873542348856336e-01:3.8231777602658958e+00 + CVs 20 + 6.0174928290202245e-01 2.2430595526789779e-01 -6.8700757864356504e-02 + 9.9050407561617859e-01 3.4711576777289604e-01 -1.3091178502003861e-01 + 1.3049022664354319e+00 4.2740905862403317e-01 -1.8431428206104217e-01 + 1.6274393099072573e+00 5.0698349519208774e-01 -2.2394637163170120e-01 + 1.9558716911558143e+00 5.8134830085891387e-01 -2.5263465841763733e-01 + 2.2883247358579899e+00 6.4591430658718663e-01 -2.7231591674280209e-01 + 2.6252682715170135e+00 6.9748792289514516e-01 -2.8012165478140433e-01 + 2.9681170937582393e+00 7.3347237287521161e-01 -2.7091766561708258e-01 + 3.3172509149362357e+00 7.4976917018830236e-01 -2.4777323591412836e-01 + 3.6725152070879008e+00 7.4253953979725873e-01 -2.1615676767460312e-01 + 4.0370293418530281e+00 7.1268201263418907e-01 -1.7052200908759707e-01 + 4.4177320235196751e+00 6.6712838820003972e-01 -8.6383772804729309e-02 + 4.8179580360848941e+00 6.0311385106849491e-01 4.4901702659339904e-02 + 5.2305892415621749e+00 4.9734476440819853e-01 1.7187384553586960e-01 + 5.6370761538846477e+00 3.3644239214858351e-01 2.2925967335473785e-01 + 6.0172806862252335e+00 1.3385172010735213e-01 2.0343313696903897e-01 + 6.3521422344622493e+00 -8.5494667600548580e-02 1.1652887428461955e-01 + 6.6240585209460727e+00 -2.9665413100415394e-01 -9.8484484944479922e-03 + 6.7772224264517069e+00 -5.1701644903351873e-01 -2.6414123035812154e-01 + id 12395 + loc 9.8198616504669189e-01 3.1319552659988403e-01 1048 + blend 0.0000000000000000e+00 + interp 4.4556557862697893e-01:2.1562822636684686e-01:6.0719407262115777e-02:4.4159864117105840e-01:7.1114671411365105e-01:4.4556112297119266e-01:1.1057363339699691e+00:2.6337478857992075e-01:1.9380298805576883e+00:3.6032677736583457e-01:2.4659792679917745e+00:2.7310399719428052e-01:3.0295006131424858e+00:3.3947060287507758e-01:3.6775593903381081e+00 + CVs 20 + 4.9498711847447169e-02 5.7870960575340391e-01 5.7721966865240137e-01 + 5.6400735795270246e-02 1.1447478550592272e+00 1.0774646623666819e+00 + -4.1160025515972753e-02 1.7177750606580051e+00 1.5150573349127197e+00 + -3.0413262894689103e-01 2.2965069971820222e+00 1.8839005114509504e+00 + -7.5793215005455594e-01 2.8273421115622890e+00 2.1471811769404114e+00 + -1.3711250868148475e+00 3.2480712473936673e+00 2.2947510510400995e+00 + -2.0935541379062172e+00 3.4961415643164919e+00 2.3335651627584220e+00 + -2.8567649085244549e+00 3.5102758768164719e+00 2.2862116604434473e+00 + -3.5867870971948372e+00 3.2493189471736903e+00 2.1893404921714490e+00 + -4.2056151676142477e+00 2.7120527753391195e+00 2.0460383307976207e+00 + -4.6160428482113529e+00 1.9659057610560886e+00 1.8113389675855551e+00 + -4.7413758413883924e+00 1.1449984046810566e+00 1.4455805025985624e+00 + -4.5784090193371112e+00 4.1552890314897006e-01 9.3681877104664035e-01 + -4.1910798840673298e+00 -5.2536032731791527e-02 3.1412374250583958e-01 + -3.6995790848133887e+00 -1.8228949592169441e-01 -3.3774108902174138e-01 + -3.2272312574496596e+00 -1.7533201706060431e-02 -9.3276108020735515e-01 + -2.8506702806749931e+00 3.5946272063077411e-01 -1.3853743424335814e+00 + -2.6351892170701738e+00 8.7882419360078168e-01 -1.5492413871408555e+00 + -2.5213113652942170e+00 1.3332220496534486e+00 -1.6367680170345116e+00 + id 12396 + loc 6.6848474740982056e-01 9.9756634235382080e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3794935086956777e-01:3.9094776968475775e-01:4.0482309637981717e-02:2.4901241576773958e-01:9.7011170700222105e-01:4.1832898458236345e-01:1.7842443787459010e+00:4.3794497137605909e-01:2.2104564443129724e+00:2.2747602725899238e-01:2.8392622541963695e+00:3.4064208069571078e-01:3.5570472879104291e+00 + CVs 20 + -3.6497479534111643e-03 4.8514502239079449e-01 1.7473203949086044e-01 + -6.1717499912790685e-02 9.0602346879229256e-01 2.8543755540842841e-01 + -1.5285361858604535e-01 1.2887968242921763e+00 3.6475661305054541e-01 + -2.7416234789440563e-01 1.6398145850643238e+00 4.1711530219833359e-01 + -4.2791558756693165e-01 1.9486108284793184e+00 4.3234517553840701e-01 + -6.1021491552101670e-01 2.2045391599164508e+00 4.0403310292537675e-01 + -8.1138030395032334e-01 2.3982501930205595e+00 3.3054536428107806e-01 + -1.0185722505974191e+00 2.5247915227574294e+00 2.1632403046980553e-01 + -1.2219137854384174e+00 2.5849563880523121e+00 6.9712938508864730e-02 + -1.4165737343813445e+00 2.5812261417531457e+00 -9.9831772081551917e-02 + -1.6002250112825793e+00 2.5168497276657997e+00 -2.7938764173210184e-01 + -1.7732800792985710e+00 2.3975501792772307e+00 -4.5431273231941283e-01 + -1.9365164030568303e+00 2.2288110662144232e+00 -6.1302428185395275e-01 + -2.0895166450573508e+00 2.0132287349721474e+00 -7.4777986608344693e-01 + -2.2299003869041720e+00 1.7558152462762679e+00 -8.4596242496296015e-01 + -2.3448013616690648e+00 1.4734919635175123e+00 -8.8003311342686574e-01 + -2.4192950126171189e+00 1.1857273849725027e+00 -8.3880208850229221e-01 + -2.4801610106017438e+00 9.1883895020417494e-01 -7.1778366586090980e-01 + -2.6263233003963578e+00 8.4202539273264154e-01 -4.5905257387744697e-01 + id 12397 + loc 8.0751240253448486e-01 2.3491515219211578e-01 403 + blend 0.0000000000000000e+00 + interp 3.6678112565854831e-01:3.0329791994111488e-01:4.3695274177203092e-01:2.7767342126347538e-01:1.2010022610519830e+00:2.9007104842691722e-01:2.0165083265605741e+00:3.6677745784729177e-01:2.9205675943703642e+00:2.9350156202950001e-01:3.9183235673069383e+00 + CVs 20 + 1.2841458769508152e-01 1.2745778509373110e-01 2.7825176887932835e-02 + 2.2683896227376271e-01 2.8790993174719071e-01 7.2747800348127764e-02 + 3.2277105001099848e-01 4.4958182440972755e-01 1.0889797570990017e-01 + 4.1956452191628130e-01 6.0892058333842858e-01 1.3746077766314060e-01 + 5.2174301344496687e-01 7.6041413022255788e-01 1.6012246762832083e-01 + 6.3457993145705771e-01 8.9769401429530360e-01 1.7878366970259579e-01 + 7.6276846968018130e-01 1.0132780385055526e+00 1.9390303579259133e-01 + 9.0969674100921982e-01 1.0971741460105422e+00 2.0229675140103331e-01 + 1.0728578514776907e+00 1.1400806407281867e+00 1.9576803368380286e-01 + 1.2397696937077940e+00 1.1436941537274343e+00 1.6787569944619571e-01 + 1.3953753201364669e+00 1.1218824977129862e+00 1.1978089532209651e-01 + 1.5315682927737460e+00 1.0894655470655292e+00 5.9126080752068232e-02 + 1.6462364295920782e+00 1.0546993562224352e+00 -6.3498780072450984e-03 + 1.7376129737934336e+00 1.0221284551970053e+00 -7.2671132174631434e-02 + 1.8020958351195928e+00 9.9653024549251024e-01 -1.3901737329823491e-01 + 1.8355149588665065e+00 9.8082889251080774e-01 -2.0518772401013799e-01 + 1.8349231425401147e+00 9.7215158539172719e-01 -2.6933801136755198e-01 + 1.8004350599834382e+00 9.6620908910043446e-01 -3.2628623985222782e-01 + 1.8529522221293637e+00 1.0035335030632520e+00 -2.9609924516621206e-01 + id 12398 + loc 6.6445320844650269e-01 5.5585086345672607e-01 1076 + blend 0.0000000000000000e+00 + interp 3.4412697055902047e-01:3.2250049589488561e-01:8.3152534993486871e-01:3.4412352928931489e-01:1.4153176809772714e+00:3.1320639801929379e-01:2.0683322806895368e+00:3.1189975387709257e-01:2.9681722636769452e+00:2.9800166422313296e-01:3.9804995305689457e+00 + CVs 20 + 1.8832492405495527e-01 2.9895573305881246e-01 -2.3899260612498224e-01 + 3.9789897660643903e-01 5.8896710955256060e-01 -4.4812198618911553e-01 + 5.9739537844591495e-01 8.5783712505848497e-01 -6.5743151506624686e-01 + 7.7466963140428680e-01 1.0943859679900003e+00 -8.7365060489317337e-01 + 9.2657080805274028e-01 1.2806331224264564e+00 -1.0923399765769135e+00 + 1.0544838965882199e+00 1.4037344325622680e+00 -1.3107609527557029e+00 + 1.1678641407379446e+00 1.4744109871934397e+00 -1.5376205886055609e+00 + 1.2761784305589385e+00 1.5066619109421733e+00 -1.7862678538217303e+00 + 1.3801703230492752e+00 1.5039078938600952e+00 -2.0554461033178142e+00 + 1.4768361746712682e+00 1.4681315368872769e+00 -2.3337235076477638e+00 + 1.5636577015281448e+00 1.4042319603725186e+00 -2.6078875744889887e+00 + 1.6393842800510690e+00 1.3192717399655898e+00 -2.8684583599730917e+00 + 1.7040562014228871e+00 1.2175220482357885e+00 -3.1162464282098568e+00 + 1.7598619823754262e+00 1.0934246391996010e+00 -3.3591663681420920e+00 + 1.8053179472901930e+00 9.4083942299787859e-01 -3.6014805020834055e+00 + 1.8282778548152245e+00 7.6174192322774470e-01 -3.8494789115449675e+00 + 1.8105742744004347e+00 5.6314578474540278e-01 -4.1125337401997104e+00 + 1.7233656278444511e+00 3.6610918180168617e-01 -4.3933741062477285e+00 + 1.5481219820328114e+00 2.5544252463784223e-01 -4.6430207283385654e+00 + id 12399 + loc 4.6539273858070374e-01 3.1629040837287903e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0275231838478509e-01:2.7328486999704216e-01:5.3278766873848293e-01:2.8116502800510679e-01:1.1080733231045612e+00:2.6154632031703212e-01:2.3964121006383827e+00:4.0274829086160124e-01:3.3116034310226583e+00:2.6285669168571157e-01:3.9624612736927696e+00 + CVs 20 + -3.1620297038211725e-01 2.8436560026023155e-01 -4.4637793099073966e-02 + -5.8555335930158880e-01 5.9704927381140993e-01 -7.9641845883010431e-02 + -8.2760021318336741e-01 9.4034190752311397e-01 -1.0870956423037323e-01 + -1.0355210956025060e+00 1.3106921229924720e+00 -1.2751843990303113e-01 + -1.1874698678796598e+00 1.7139347607741067e+00 -1.2997703716945086e-01 + -1.3148776512247593e+00 2.1662135693882303e+00 -1.2812179467575746e-01 + -1.5433923131718383e+00 2.6404258642188805e+00 -1.4959975309710927e-01 + -1.9683106406931528e+00 3.0307376675918749e+00 -2.1276009523162054e-01 + -2.5530033804983310e+00 3.2456891544399356e+00 -3.3910651313637963e-01 + -3.1848599375691569e+00 3.2572467351019281e+00 -5.5735960272017426e-01 + -3.7494150712511587e+00 3.1058701362060175e+00 -8.8509357710254932e-01 + -4.1709609357923663e+00 2.8670025025337482e+00 -1.3131467492964748e+00 + -4.4302700052297936e+00 2.6004887791447975e+00 -1.8021647220389796e+00 + -4.5517321927792436e+00 2.3031369367270589e+00 -2.3265635392003809e+00 + -4.5372142205217170e+00 1.9206946397686051e+00 -2.8525755035395930e+00 + -4.3555958121045029e+00 1.4261519285529525e+00 -3.2940610036426432e+00 + -3.9377554187077077e+00 8.4291500839951827e-01 -3.5372168995216433e+00 + -3.3317933921949998e+00 4.1407946789602379e-01 -3.4472231784548084e+00 + -3.0799212453992384e+00 3.8966748506364235e-01 -3.3426657699308318e+00 + id 12400 + loc 7.4744164943695068e-01 9.2788785696029663e-01 1078 + blend 0.0000000000000000e+00 + interp 5.3990207240117283e-01:3.2007147208860626e-01:4.4704885025904495e-01:3.9975696496574697e-01:1.2394402925632775e+00:5.3989667338044889e-01:1.9183075164189924e+00:4.0952474387242116e-01:2.6518885977539122e+00:3.6218228903909933e-01:3.3833384754006133e+00 + CVs 20 + 2.0904346220205672e-01 2.6559895394983546e-01 -1.3743326486826629e-01 + 4.2281589342561010e-01 5.3592669019540184e-01 -2.6589026128934012e-01 + 6.3458759743313164e-01 8.0513535842804274e-01 -3.9560828116303814e-01 + 8.4070574823375566e-01 1.0681101899516987e+00 -5.3627338994263329e-01 + 1.0392280420416906e+00 1.3208690874249507e+00 -6.9803355046917703e-01 + 1.2264853392116604e+00 1.5587072408440537e+00 -8.9186921820926202e-01 + 1.3963753831507248e+00 1.7750730888675363e+00 -1.1287649385968948e+00 + 1.5395664844679686e+00 1.9601215627828841e+00 -1.4178958083840061e+00 + 1.6436190135629225e+00 2.1001156079251704e+00 -1.7619000223111270e+00 + 1.6970550327035729e+00 2.1816469951258579e+00 -2.1505504881814810e+00 + 1.6968459350884970e+00 2.1979439742259639e+00 -2.5601687288362549e+00 + 1.6571240032570533e+00 2.1555032993106220e+00 -2.9572997831343031e+00 + 1.6042011234453288e+00 2.0734199257298958e+00 -3.3163801675358271e+00 + 1.5537370327162088e+00 1.9644046955589720e+00 -3.6369534147044327e+00 + 1.5091292776352319e+00 1.8304679141282933e+00 -3.9270485996092277e+00 + 1.4800754131421083e+00 1.6930959101744696e+00 -4.1678792089183476e+00 + 1.4851477073409860e+00 1.6163282994301551e+00 -4.2956624979599969e+00 + 1.5109374402191214e+00 1.6221439951777776e+00 -4.2622149537426743e+00 + 1.5502748323361166e+00 1.5150042092958775e+00 -4.4170998103783390e+00 + id 12401 + loc 4.5273903012275696e-01 8.7132729589939117e-02 1080 + blend 0.0000000000000000e+00 + interp 4.0192327251815041e-01:4.0191925328542527e-01:5.6113713622835570e-02:3.8946968563724849e-01:5.4984211538414329e-01:3.1874878634734810e-01:1.1397888750459568e+00:3.1532705241318004e-01:1.7268877327088732e+00:2.6962988382269693e-01:2.6377698193270316e+00:3.5088389889078836e-01:3.1067514874910711e+00:3.7369794799594191e-01:3.7563819553486528e+00 + CVs 20 + 3.8811469695159129e-01 4.8922596859629902e-01 2.1165954046155483e-02 + 5.7648508300568957e-01 8.4390388875941758e-01 4.0015194662975748e-02 + 6.9997927336526899e-01 1.1651622719404462e+00 4.0090050269783573e-02 + 8.3193546759822934e-01 1.4868983700014851e+00 2.8501012247311691e-02 + 9.6937756687073562e-01 1.8043446649865711e+00 7.9903505148777587e-03 + 1.1116724945578120e+00 2.1125206400456351e+00 -1.3106133638025819e-02 + 1.2613761593674420e+00 2.4176425693038492e+00 -2.7614954452728768e-02 + 1.4282468598987472e+00 2.7480881741033096e+00 -4.4820984255967422e-02 + 1.6266043766599223e+00 3.1536498588910540e+00 -1.1655295685521261e-01 + 1.8268212325057438e+00 3.6500153825912456e+00 -3.6454322462353389e-01 + 1.9078162790968041e+00 4.0982121179173294e+00 -8.4759810850709283e-01 + 1.8149833025056661e+00 4.3440450979395990e+00 -1.3982990947305305e+00 + 1.6128625781874435e+00 4.4047153562529520e+00 -1.8714643196696497e+00 + 1.3527424507447883e+00 4.3414461894702718e+00 -2.2486201725133950e+00 + 1.0322935996910438e+00 4.1796361311403851e+00 -2.5554225340272252e+00 + 5.8891217595282042e-01 3.8830911970766953e+00 -2.8369058856851419e+00 + 1.3167826391838888e-02 3.3434940174394505e+00 -3.1314968234482521e+00 + -4.3457608075229359e-01 2.6050191745685658e+00 -3.4031075999535383e+00 + -4.0546017880523039e-01 2.3153417563693344e+00 -3.4818681782954393e+00 + id 12402 + loc 7.1006762981414795e-01 5.6199401617050171e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5765039005537961e-01:4.5764581355147910e-01:1.8054883497441587e-01:3.0000532948457087e-01:9.6094523487727912e-01:3.2541105870880410e-01:1.6906575250773552e+00:2.9575231155308701e-01:2.2696654491437127e+00:3.4609134644665523e-01:2.9992858769938846e+00:3.1155590026222391e-01:3.5794664886413967e+00 + CVs 20 + -2.3505110858576528e-01 4.4547097358580073e-01 1.7911279642810154e-01 + -4.6557998087742281e-01 8.5731748476074743e-01 3.4141677271292475e-01 + -7.0549612746780366e-01 1.2520897444844699e+00 4.9929419041452472e-01 + -9.7893576914612046e-01 1.6260642210090599e+00 6.3016131031913458e-01 + -1.2991792166993581e+00 1.9562171870724305e+00 6.9530325729818143e-01 + -1.6507482321604132e+00 2.2101024832391274e+00 6.6518372026674033e-01 + -1.9859984410722964e+00 2.3551063993838914e+00 5.3068817120907741e-01 + -2.2319214089079278e+00 2.3701319419126077e+00 3.1636702328113908e-01 + -2.3414365952540814e+00 2.2735831033157545e+00 8.8241620127187170e-02 + -2.3495577449978886e+00 2.1136596115528326e+00 -1.0528760119384084e-01 + -2.3066882107642317e+00 1.9132366142864319e+00 -2.5070833854679930e-01 + -2.2419757795174671e+00 1.6852880779881314e+00 -3.2496170233803379e-01 + -2.1729505825963220e+00 1.4564477900338169e+00 -3.2807764338546619e-01 + -2.1055319306779121e+00 1.2164319804273254e+00 -3.1529923837167573e-01 + -2.0335560080163546e+00 9.2682354160943792e-01 -3.3835479470896501e-01 + -1.9336542308142717e+00 5.7355373563345724e-01 -4.6371675560808601e-01 + -1.7859682072903036e+00 2.1211772853598743e-01 -7.6548038726214929e-01 + -1.6296870897650875e+00 -4.8522133690318214e-02 -1.2025242929311539e+00 + -1.5422974035870800e+00 -2.2813742718506469e-01 -1.5721722528697450e+00 + id 12403 + loc 8.0217897891998291e-01 7.0743459463119507e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0539785934133737e-01:2.5297798778362818e-01:3.4092827800707792e-01:3.1642184117449396e-01:1.2890610049338620e+00:2.6581488313392077e-01:2.0399045372872071e+00:4.0539380536274400e-01:2.8516359600690473e+00:2.8512266805631287e-01:3.1374734353018821e+00 + CVs 20 + -1.1726296706024977e-01 4.0962169895205480e-01 1.2043170860583417e-01 + -2.4631497773446701e-01 7.9347002032612435e-01 2.0658932183436179e-01 + -4.0080268492944660e-01 1.1691353682989072e+00 2.7327334270495618e-01 + -5.9878384048656830e-01 1.5380839085544631e+00 3.1550530901079238e-01 + -8.5648655853537403e-01 1.8850320387565958e+00 3.1485149033137250e-01 + -1.1798531120488918e+00 2.1848968676811773e+00 2.5174309532540595e-01 + -1.5586649816942848e+00 2.4049370419645655e+00 1.1068942545579807e-01 + -1.9656059228644034e+00 2.5138384089909254e+00 -1.1102647429973256e-01 + -2.3666190073366220e+00 2.4914064605675552e+00 -3.9505376419451232e-01 + -2.7379575507135914e+00 2.3355774628164152e+00 -6.9799916331283396e-01 + -3.0734986534616358e+00 2.0584599733289624e+00 -9.6861740766746718e-01 + -3.3708673458019862e+00 1.6761210453924438e+00 -1.1612943264841786e+00 + -3.6233261734325861e+00 1.2162290678769869e+00 -1.2277363134725001e+00 + -3.8254109475062248e+00 7.3582174303408598e-01 -1.1128066117450128e+00 + -3.9708411685995979e+00 3.3493135632188864e-01 -7.9181343227542900e-01 + -4.0834493125579518e+00 1.1095301751112718e-01 -3.4096846734920555e-01 + -4.2217919476557686e+00 9.6097863284056118e-02 1.3731121267396451e-01 + -4.3914948170543786e+00 2.0142399447541498e-01 5.9113916879447048e-01 + -4.5651946378479735e+00 -3.1265196047048416e-02 1.0515115140043088e+00 + id 12404 + loc 6.3820940256118774e-01 5.4505777359008789e-01 406 + blend 0.0000000000000000e+00 + interp 1.1877208435502067e+00:3.1088191411616151e-01:2.2164951352406959e-01:3.9430142940762741e-01:9.8568151081840749e-01:6.6570533262876208e-01:1.1250455202281737e+00:1.1877108435502066e+00:1.5457594850901062e+00:3.9276609232245913e-01:2.8666011295739455e+00:3.7765016179223437e-01:3.4100266431592168e+00:3.8587109481154819e-01:3.9668756860232675e+00 + CVs 20 + 3.1341656366109732e-01 2.4578564694214627e-01 -1.2441289958430857e-02 + 5.1032094285930907e-01 3.8158838147594243e-01 -4.6151140730729401e-03 + 6.6474348566631170e-01 4.6355527075808484e-01 2.6646490102216758e-03 + 8.1248088693144738e-01 5.2598218783062611e-01 7.1576605752992073e-03 + 9.4957654721446505e-01 5.7245405373271563e-01 1.1045180623723894e-02 + 1.0739820450547308e+00 6.0754226069708417e-01 1.6398552986310627e-02 + 1.1864425931410190e+00 6.3547430311810083e-01 2.4551167154791331e-02 + 1.2882893130732298e+00 6.5910868272647372e-01 3.5814611570404331e-02 + 1.3771681444885582e+00 6.8190252102069804e-01 5.2067611377034362e-02 + 1.4498042709046706e+00 7.0852931264540220e-01 7.9022704793052900e-02 + 1.5100800931451797e+00 7.4091237573402280e-01 1.2042173837503350e-01 + 1.5670831934515146e+00 7.7501480879331541e-01 1.7033928437301560e-01 + 1.6242926379921319e+00 8.0636317454585305e-01 2.2116252350357329e-01 + 1.6791005388214510e+00 8.3478790716961249e-01 2.7703684063823447e-01 + 1.7300232351819675e+00 8.6097934754313066e-01 3.4795995049954831e-01 + 1.7785439090329891e+00 8.8461110615651328e-01 4.3277347369778546e-01 + 1.8247975588554379e+00 9.0542454103149383e-01 5.1902581633814360e-01 + 1.8634461622254690e+00 9.1676062826291527e-01 5.9739616950501651e-01 + 1.8694585862721793e+00 8.7110278895398896e-01 6.4573113634431845e-01 + id 12405 + loc 8.3164459466934204e-01 5.2096402645111084e-01 1075 + blend 0.0000000000000000e+00 + interp 3.3273105429974453e-01:3.2487331579460094e-01:7.1948527831511511e-01:2.7149838250066832e-01:1.3792708693217741e+00:3.3272772698920156e-01:2.3427684910877100e+00:2.6588535413129222e-01:3.4410866908815918e+00 + CVs 20 + 7.6119527377239135e-02 2.5986219998675958e-01 -3.4404909795355954e-01 + 1.7429868863072170e-01 4.7942168986602784e-01 -6.6020358226624243e-01 + 2.7737780515198890e-01 6.6622070775786479e-01 -9.7396140804567488e-01 + 3.7955710792820624e-01 8.2332473265958139e-01 -1.2990690232283300e+00 + 4.7826858023732954e-01 9.5481691511939548e-01 -1.6429445286304341e+00 + 5.6309622411263915e-01 1.0675552742644090e+00 -2.0085122158777460e+00 + 6.2009630005862926e-01 1.1644863003409220e+00 -2.3878091045206884e+00 + 6.4281433444957159e-01 1.2400739497221682e+00 -2.7650945295098901e+00 + 6.3522248951773819e-01 1.2815785571717164e+00 -3.1217525567743603e+00 + 6.0514911612813471e-01 1.2774444967622132e+00 -3.4382820209947962e+00 + 5.5869324580819402e-01 1.2249780555055292e+00 -3.7042940821010677e+00 + 4.9849446304569667e-01 1.1305460952693727e+00 -3.9286196362909482e+00 + 4.2586222411430064e-01 9.9693733771292203e-01 -4.1343528906248750e+00 + 3.4437459532401771e-01 8.1554592839544948e-01 -4.3452876354340644e+00 + 2.5938667012258682e-01 5.8027146981880950e-01 -4.5643660778140562e+00 + 1.6684329097260031e-01 3.1321337170276553e-01 -4.7638681583860620e+00 + 4.6962226208265456e-02 6.3117604437085029e-02 -4.9091495792504549e+00 + -1.1111885882751640e-01 -1.5376921431851609e-01 -5.0051498841399313e+00 + -2.9518880651919466e-01 -5.7720926823737151e-01 -5.2297152183974109e+00 + id 12406 + loc 6.7225003242492676e-01 9.5332324504852295e-01 372 + blend 0.0000000000000000e+00 + interp 6.1033254578055818e-01:4.7435906072818712e-01:2.8544845526338869e-01:5.1041457473228247e-01:9.2388944961496933e-01:6.1032644245510037e-01:1.0884278380599819e+00:3.5789955862285844e-01:1.9244730232228355e+00:3.1301190807704021e-01:2.1166219955853425e+00:4.4687333527105172e-01:3.0614502656773155e+00:3.2746512220144897e-01:3.7995570555231044e+00 + CVs 20 + -3.3698762427630946e-01 5.1059374680695402e-01 -4.9784839795229213e-02 + -6.7266781891915484e-01 9.1829975616031323e-01 -8.9507740901895658e-02 + -1.0144699548024203e+00 1.1875554276916045e+00 -1.1461778824527045e-01 + -1.3446484959667364e+00 1.3473672440673288e+00 -1.1806163363182179e-01 + -1.6526096594947655e+00 1.4607253131701541e+00 -9.5569564317453642e-02 + -1.9573620778208793e+00 1.5742992950218113e+00 -5.8925528548118444e-02 + -2.2863250565966080e+00 1.7105983043570236e+00 -4.0885711353635890e-02 + -2.6474672101141867e+00 1.8829717519449867e+00 -7.6796070741082911e-02 + -3.0214264161736502e+00 2.0933796211734799e+00 -1.8813010454325030e-01 + -3.3813903527749876e+00 2.3197924855222296e+00 -3.7609425244008610e-01 + -3.7125476551763392e+00 2.5203395644483755e+00 -6.2329069754686928e-01 + -3.9933875059395438e+00 2.6354838908898368e+00 -8.9293966327743657e-01 + -4.1897508930091183e+00 2.6103160152600982e+00 -1.1169117752859978e+00 + -4.3006510606961390e+00 2.4611508104885105e+00 -1.2296661147946981e+00 + -4.3848338491462124e+00 2.2448957911207339e+00 -1.2595478376702327e+00 + -4.5362960290155865e+00 1.9861462524285234e+00 -1.2250619420806090e+00 + -4.8265990739934566e+00 1.7665705003415553e+00 -1.0802625355892981e+00 + -5.2682602269217762e+00 1.5018845296158774e+00 -9.2352500273803728e-01 + -5.9049807596460955e+00 9.0350078680868906e-01 -9.3299748389198589e-01 + id 12407 + loc 3.6761048436164856e-01 6.4848744869232178e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0627824314678815e-01:4.0095768099122991e-01:6.1869807620975492e-02:3.6030771879154694e-01:7.3240179937820893e-01:3.1114899024536752e-01:1.5005081310394890e+00:3.0396118532413891e-01:2.1865410717825169e+00:5.0627318036435676e-01:2.9753215100417147e+00:4.4267340801427452e-01:3.1265982812604638e+00:2.8443713692125638e-01:3.6921748464010609e+00 + CVs 20 + 2.8572579007172294e-01 6.9706939804266344e-01 -4.4651161724227417e-01 + 6.2001591606210782e-01 1.3824754337089606e+00 -7.7689046462950517e-01 + 1.0161518235078775e+00 2.0256286365802749e+00 -9.4104616727276447e-01 + 1.4609864592798516e+00 2.5501409946995790e+00 -9.4162117665240208e-01 + 1.9201568293948523e+00 2.8948916997648269e+00 -8.3810805184150639e-01 + 2.3474674781298370e+00 3.0621734334777928e+00 -7.0485138983991336e-01 + 2.7160594044254189e+00 3.0958134330103184e+00 -5.8357581260298608e-01 + 3.0516840412534942e+00 3.0344751833475816e+00 -4.7687997211875199e-01 + 3.4098268602811856e+00 2.8606210918679604e+00 -3.8530262106716606e-01 + 3.7877702729151950e+00 2.5247003106714172e+00 -3.1145765026449379e-01 + 4.1097456815798248e+00 2.0053658660022657e+00 -2.1990345733366157e-01 + 4.2788263614195428e+00 1.3352883197821477e+00 -4.5488901799283776e-02 + 4.2472042618846952e+00 5.8013327763187117e-01 2.3389403126819952e-01 + 4.0420484714429463e+00 -2.2039645117713602e-01 5.4632724099309882e-01 + 3.7837371052269835e+00 -1.0519165902074012e+00 7.3071144731902549e-01 + 3.9749972004107463e+00 -1.8854390383238646e+00 4.2121314399406029e-01 + 5.2186810173338918e+00 -9.1100152020826886e-02 4.6247300336805797e-03 + 5.0057548980881394e+00 6.4225440630948571e-01 3.4337100164596412e-01 + 5.1984220799692924e+00 1.2378934403866007e+00 4.4251544599319592e-01 + id 12408 + loc 9.6260321140289307e-01 4.0754392743110657e-01 413 + blend 0.0000000000000000e+00 + interp 5.5526729947501074e+00:7.7504012384774668e-01:9.3375213293514847e-01:1.0625938805807260e+00:9.6261463073925313e-01:3.2536550690636029e-01:9.6707514828056151e-01:3.3323747296431921e-01:1.9961209077046056e+00:4.5507976960699359e-01:2.5305783944621307e+00:1.2465711141269358e+00:2.8573633986624665e+00:1.7776008241399375e+00:2.8970642433170610e+00:4.0786384446979120e+00:2.9807646179411065e+00:4.7391253771189579e+00:2.9867576941303926e+00:5.1515097131977212e+00:2.9931668056244138e+00:5.5526629947501078e+00:2.9950956076376922e+00 + CVs 20 + -1.1402384787475834e+00 2.1091720508346734e-01 2.7678447699244835e-01 + -1.8260684298655898e+00 2.5094906926840194e-01 4.9745821137591423e-01 + -2.4009192759371074e+00 2.3209193414996598e-01 6.9497587702202912e-01 + -3.0085283086987245e+00 2.2157954163445126e-01 8.7048941761526355e-01 + -3.6487915079266839e+00 2.0570457247042173e-01 1.0062344533714302e+00 + -4.3146095416329953e+00 1.6543665910343497e-01 1.0886817902956190e+00 + -4.9922636946439454e+00 8.1783009536131046e-02 1.1148204961836621e+00 + -5.6623689885971125e+00 -6.3017428074797488e-02 1.0911591445558240e+00 + -6.2986449111458844e+00 -2.8364663575702886e-01 1.0270035548968319e+00 + -6.8710822859490870e+00 -5.8433462053912200e-01 9.3125685757375698e-01 + -7.3547956620691171e+00 -9.5339133942079646e-01 8.1257825371748327e-01 + -7.7394431156134980e+00 -1.3673482033563085e+00 6.7482353635566827e-01 + -8.0312834421386388e+00 -1.8055521346127379e+00 5.2754870927987563e-01 + -8.2424056795347340e+00 -2.2495799170775204e+00 3.9368021350349347e-01 + -8.3886227366042725e+00 -2.6706939927095728e+00 2.8923317687347017e-01 + -8.4920064787103833e+00 -3.0460955941278147e+00 2.2591843344628271e-01 + -8.5703924391301260e+00 -3.3627779519464944e+00 2.1040577986966202e-01 + -8.6245964804899344e+00 -3.6280809639001843e+00 2.3350804242122208e-01 + -8.5170073150967376e+00 -3.8934417450854628e+00 2.7144904891387528e-01 + id 12409 + loc 4.4574059545993805e-02 2.4599547684192657e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4183020884791102e-01:4.4182579054582255e-01:1.4272742879139277e-01:3.1085536501677641e-01:8.7327204582838591e-01:4.3080160396783790e-01:1.1920329579921392e+00:4.1155279765167396e-01:1.8175534817742387e+00:2.6150174905551848e-01:2.0983913524418765e+00:2.5143232140803373e-01:3.0009420767144426e+00:3.3613885588997255e-01:3.8264657747496869e+00 + CVs 20 + -2.1058528574508911e-01 2.7581646490499839e-01 -1.9587660053866002e-01 + -4.0671221105816097e-01 5.4409757128383629e-01 -3.8266151336614995e-01 + -6.0498817724997400e-01 8.1073967371891886e-01 -5.5555174084807524e-01 + -8.1521215767851674e-01 1.0789941655348587e+00 -7.0954076338887084e-01 + -1.0426969315123511e+00 1.3495632466785314e+00 -8.4032884804456087e-01 + -1.2936230997466278e+00 1.6209259969305869e+00 -9.4386460040587894e-01 + -1.5757369334942957e+00 1.8892259957285253e+00 -1.0162696310370709e+00 + -1.8977443616210459e+00 2.1475857898102051e+00 -1.0542311006765135e+00 + -2.2682566993677811e+00 2.3845388376260117e+00 -1.0544380467752195e+00 + -2.6944636641116335e+00 2.5833837806552542e+00 -1.0136167235519582e+00 + -3.1798729438019961e+00 2.7214557663252661e+00 -9.3164133147525285e-01 + -3.7208014704890782e+00 2.7723535793282332e+00 -8.1563770293376592e-01 + -4.3057066328878113e+00 2.7132544418851530e+00 -6.8394640181412392e-01 + -4.9150140155412432e+00 2.5283165505722520e+00 -5.6417006249478385e-01 + -5.5213128349979446e+00 2.2074874467483903e+00 -4.8552448635476797e-01 + -6.0877159907121632e+00 1.7444582689546377e+00 -4.7181344850085549e-01 + -6.5589522268430267e+00 1.1495703382832485e+00 -5.3070144308519962e-01 + -6.8810033164703359e+00 4.8726108929699574e-01 -6.4170167054879013e-01 + -7.0815696128661108e+00 9.8150123051634619e-02 -7.0606293644241358e-01 + id 12410 + loc 8.2138365507125854e-01 9.4981825351715088e-01 262 + blend 0.0000000000000000e+00 + interp 1.3731560938938692e+00:1.3731460938938691e+00:1.0725161694029766e+00:5.3308866141118716e-01:1.1256244521881649e+00:2.8955532289774732e-01:1.5370256464130039e+00:3.2560807832108551e-01:2.2423110023835560e+00:4.5635861792253052e-01:3.0059524081295743e+00:1.1327975303363851e+00:3.0794995720264109e+00:7.5510081245470995e-01:3.0907757971593099e+00 + CVs 20 + -6.7084086194534920e-01 4.1204786166466967e-01 2.3022212370663722e-02 + -1.2788865731846886e+00 7.4680677288494812e-01 8.5118621794459060e-02 + -1.9450583771117862e+00 1.0141446398707565e+00 1.6134042884611338e-01 + -2.6668380885308078e+00 1.2554113903378079e+00 1.6446930579814484e-01 + -3.2939777574704650e+00 1.5266893516823008e+00 -4.6820324572324268e-02 + -3.5804108661053666e+00 1.8089403298343008e+00 -5.4003697238002402e-01 + -3.4044772662424196e+00 1.9691136015617297e+00 -1.1227924186104981e+00 + -2.8904809475670667e+00 1.9418621040818078e+00 -1.6284067623714664e+00 + -2.1463372366777982e+00 1.6833282526956979e+00 -2.0016658997023264e+00 + -1.3063008914287351e+00 1.1567190972968064e+00 -2.1803728322031888e+00 + -5.2500056674081930e-01 4.2241063799904643e-01 -2.1296241584586526e+00 + 1.6288846999658674e-01 -3.3222816148957801e-01 -1.8882899370119599e+00 + 8.9895596381816034e-01 -8.7247660616898093e-01 -1.5780810029349024e+00 + 1.8139915210076740e+00 -9.5272634639039311e-01 -1.3848773555959646e+00 + 2.7157926957152911e+00 -4.9045278073900500e-01 -1.4124927786857455e+00 + 3.4091861297002732e+00 2.1302883062564337e-01 -1.5413548794185812e+00 + 3.9585154893337187e+00 1.0341822854939680e+00 -1.7189078003585487e+00 + 4.3306381481469041e+00 1.8980777093225729e+00 -2.0393299305509340e+00 + 4.5291027810556113e+00 2.5445881143331155e+00 -2.4470890682479149e+00 + id 12411 + loc 1.3847558759152889e-02 7.9929214715957642e-01 409 + blend 0.0000000000000000e+00 + interp 3.5993345094348811e-01:2.8284665984254115e-01:3.8659969444901732e-01:3.0864957857267106e-01:1.0463915677522424e+00:3.5637107363430909e-01:1.9615152327052514e+00:3.5992985160897867e-01:2.0455423739966601e+00:2.5866596692835830e-01:2.8484400009580977e+00:3.5874857217996348e-01:3.1722599229608770e+00:3.1285275623487840e-01:3.9998297723091971e+00 + CVs 20 + 5.2983967916200925e-01 2.6658897089879419e-01 -1.8961867321190121e-01 + 9.5574876159628508e-01 4.5664613986983571e-01 -3.8125036275710855e-01 + 1.3756878174301299e+00 6.2075674732278363e-01 -5.8168024394872275e-01 + 1.8167705681201789e+00 7.6580567586868842e-01 -7.9446179630418978e-01 + 2.2543668573972635e+00 8.7082017971232717e-01 -1.0216748848255917e+00 + 2.6680272188475818e+00 9.2330100547211558e-01 -1.2655708189032122e+00 + 3.0513369043042955e+00 9.2241155781686690e-01 -1.5291642875627844e+00 + 3.4102484625686960e+00 8.7150426271254866e-01 -1.8164492417873350e+00 + 3.7581235300135640e+00 7.7381985226504346e-01 -2.1242634920009325e+00 + 4.1099604718489635e+00 6.3022070419956444e-01 -2.4419375499075828e+00 + 4.4717390425410990e+00 4.2224160813463940e-01 -2.7490644461640659e+00 + 4.8318644627280039e+00 1.1736146083267762e-01 -2.9997524674359646e+00 + 5.1748846476469854e+00 -2.7834845786143880e-01 -3.1777959837329526e+00 + 5.4886587952307213e+00 -7.2454616056266730e-01 -3.3346930472477609e+00 + 5.7553717279634053e+00 -1.1671945446571299e+00 -3.5374780367980763e+00 + 5.9585825395829266e+00 -1.5475803757401057e+00 -3.8393448079436312e+00 + 6.1030841386496011e+00 -1.8418316157797823e+00 -4.2562178913223558e+00 + 6.2414186945521308e+00 -2.0865515556145300e+00 -4.7382575430804206e+00 + 6.4872531028515006e+00 -2.3456344571318231e+00 -5.2100465120883381e+00 + id 12412 + loc 5.9971743822097778e-01 9.0453404188156128e-01 1076 + blend 0.0000000000000000e+00 + interp 4.6865993991480620e-01:3.1001606324179154e-01:2.4543795976449523e-01:3.9589392277724550e-01:1.0283141137752736e+00:2.9803641667997594e-01:1.9936963474932998e+00:3.1023821485003805e-01:2.9100951449147443e+00:4.6865525331540708e-01:3.6913356492996221e+00 + CVs 20 + 1.8930305955107782e-01 2.8277495875556391e-01 -1.0738847506898015e-01 + 3.7536255066954133e-01 5.5947469245805503e-01 -2.1120477006868560e-01 + 5.5827790964862345e-01 8.2305975008183496e-01 -3.2705906834766030e-01 + 7.3677543901036890e-01 1.0694265126834748e+00 -4.5976015584909802e-01 + 9.1074347261945554e-01 1.2975984522394897e+00 -6.0634407629230958e-01 + 1.0806584621772033e+00 1.5056467894453656e+00 -7.7163005459102951e-01 + 1.2457013989284096e+00 1.6875236164758736e+00 -9.7291952506329960e-01 + 1.3994928358777972e+00 1.8317703002408137e+00 -1.2265896973998363e+00 + 1.5295567623371702e+00 1.9256753908470652e+00 -1.5377227619123730e+00 + 1.6237502586667598e+00 1.9596283807673873e+00 -1.9021276081579193e+00 + 1.6774718111716400e+00 1.9302804498682176e+00 -2.3059500453398960e+00 + 1.6914948050237064e+00 1.8403195204266973e+00 -2.7248020775449948e+00 + 1.6630301576180535e+00 1.6999635400734403e+00 -3.1202521122644020e+00 + 1.5844922741600374e+00 1.5431918382762175e+00 -3.4329225781012345e+00 + 1.4613117927942878e+00 1.4389338355617318e+00 -3.6079979789319201e+00 + 1.3321133975912443e+00 1.4401052006760615e+00 -3.6340902067993905e+00 + 1.2574304763613771e+00 1.5455012844676697e+00 -3.5355380443360485e+00 + 1.1879931085251458e+00 1.6753568049565417e+00 -3.4136149601815755e+00 + 6.6890708604779325e-01 1.6683766692193511e+00 -3.5400995495999075e+00 + id 12413 + loc 8.4975540637969971e-01 8.1571710109710693e-01 403 + blend 0.0000000000000000e+00 + interp 4.6737242717763322e-01:3.1834622516562572e-01:4.3845110227725970e-01:3.7642189371043921e-01:1.2372685433893802e+00:2.6149744907919109e-01:1.9711928846164521e+00:4.6736775345336146e-01:2.6037616595169819e+00:3.3718495974177243e-01:3.3821542408522314e+00 + CVs 20 + -3.1252028225810663e-02 8.8056312130133541e-02 6.3678211475710941e-02 + -5.1007626714036795e-02 1.8844593210851782e-01 1.0031561922556853e-01 + -6.2134523115751003e-02 2.9517451483920676e-01 1.4770328858636567e-01 + -6.2256462982575256e-02 4.0596304427771446e-01 2.0657351998012788e-01 + -4.9555211430715534e-02 5.2068638266291212e-01 2.7078886059616158e-01 + -2.3545322637834876e-02 6.3877493080502235e-01 3.3570319900670598e-01 + 1.5242790023803132e-02 7.5883929975125963e-01 3.9721116453746846e-01 + 6.5323807648010823e-02 8.7855376601365398e-01 4.5169011312910201e-01 + 1.2434333842437645e-01 9.9445131101784767e-01 4.9597255796659523e-01 + 1.8911433411979550e-01 1.1020350261953964e+00 5.2706229565632590e-01 + 2.5543792601246429e-01 1.1963119389205268e+00 5.4250291897301284e-01 + 3.1804158003856758e-01 1.2725380932686412e+00 5.4098560879462521e-01 + 3.7085313154413618e-01 1.3269945260578406e+00 5.2300331452733795e-01 + 4.0759416967512796e-01 1.3575918509705933e+00 4.9099255088962557e-01 + 4.2213202226703589e-01 1.3643968925134653e+00 4.4920634811900761e-01 + 4.0855745298367574e-01 1.3498322587241840e+00 4.0333992440588051e-01 + 3.6093905868093740e-01 1.3176476797107335e+00 3.5955587397814132e-01 + 2.7653011843580677e-01 1.2704638360506950e+00 3.2519182261639967e-01 + 1.9680815947107927e-01 1.2170873919065981e+00 3.1231937231143531e-01 + id 12414 + loc 5.6474059820175171e-01 2.5222092866897583e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5442979457900664e-01:3.2857028580142461e-01:6.6428658312915290e-01:2.9571312999575344e-01:1.1886371371488118e+00:3.4999479049809795e-01:2.0612192805515837e+00:3.5442625028106084e-01:2.7044611906375637e+00:2.5855238158521937e-01:3.1789288419466732e+00:2.7638323239231150e-01:3.9997874600352721e+00 + CVs 20 + -1.0960025330768167e-01 4.1105644428069121e-01 -3.9173192001533247e-01 + -2.0352572517397471e-01 7.1015271888651932e-01 -5.9022000383807516e-01 + -2.9326101113324782e-01 9.8134053252812437e-01 -7.2713317006697320e-01 + -3.7608178220807897e-01 1.2553595457085183e+00 -8.6148749718608109e-01 + -4.4931285191061276e-01 1.5270453432393087e+00 -9.8917047797518132e-01 + -5.1048270147771124e-01 1.7913036652655474e+00 -1.1085303069569359e+00 + -5.5944158604060523e-01 2.0487844376766260e+00 -1.2210605451510166e+00 + -6.0584432842649449e-01 2.3125732446077283e+00 -1.3334425328194597e+00 + -6.8145981091436991e-01 2.6029016941066390e+00 -1.4527750653601479e+00 + -8.4076289867956921e-01 2.9189319091639021e+00 -1.5662348653165936e+00 + -1.1115800459865757e+00 3.2104173616556588e+00 -1.6311472048742044e+00 + -1.4554426854268665e+00 3.4227754123705383e+00 -1.6179920338393277e+00 + -1.8222985087759709e+00 3.5451201340772442e+00 -1.5306197220275055e+00 + -2.1887919089838799e+00 3.5890597747748290e+00 -1.3796412915966272e+00 + -2.5510603871908830e+00 3.5625692544796621e+00 -1.1590236604304964e+00 + -2.9267825170490700e+00 3.4486584165626208e+00 -8.2101095478016672e-01 + -3.3515758072970212e+00 3.1609716806388706e+00 -3.2103546320294796e-01 + -3.8022411984004809e+00 2.6321581773623355e+00 1.5587918404631484e-01 + -3.9906805824925482e+00 2.3814761309281516e+00 1.7001602232963364e-01 + id 12415 + loc 9.3623709678649902e-01 4.9034535884857178e-01 397 + blend 0.0000000000000000e+00 + interp 1.6624468921936408e+00:1.6175098488169287e-01:9.8375974579900327e-01:9.6134166305659452e-01:1.0590985024391535e+00:2.8824799317968425e-01:2.1950968883371038e+00:5.0539207629973082e-01:2.9894951033128576e+00:1.6624368921936408e+00:3.0013794142171020e+00:1.0963926019144663e+00:3.0079315306711654e+00 + CVs 20 + -1.2141614474018747e+00 1.7882022371405928e-01 3.6065610730613262e-01 + -1.9546073902622707e+00 1.8488210072454070e-01 6.4741454684323529e-01 + -2.6009635049738913e+00 1.3711828310765795e-01 9.3734943592238062e-01 + -3.3065265428016053e+00 1.0095698357458632e-01 1.2512166890696845e+00 + -4.0534990861474158e+00 4.9776313495689173e-02 1.5856228171879854e+00 + -4.8108562627406330e+00 -4.7853193728166321e-02 1.9291735251149795e+00 + -5.5422554930256780e+00 -2.1583630121617992e-01 2.2605069527008750e+00 + -6.2156566716376407e+00 -4.6988019131331410e-01 2.5542302089495044e+00 + -6.8063881974760294e+00 -8.1787361775984957e-01 2.7913038050633161e+00 + -7.3000115244022785e+00 -1.2585378962874612e+00 2.9665288297495715e+00 + -7.6815023819647514e+00 -1.7750524618779111e+00 3.0858034170371429e+00 + -7.9375356939324000e+00 -2.3326355862342041e+00 3.1593919338433203e+00 + -8.0709011509001627e+00 -2.8976164643583622e+00 3.2004858819376629e+00 + -8.0909531051795458e+00 -3.4439671208387996e+00 3.2182536733599827e+00 + -8.0153522348028439e+00 -3.9472888734597125e+00 3.2236097585657468e+00 + -7.8859349548966433e+00 -4.3774244165882932e+00 3.2450617656664429e+00 + -7.7443575302986112e+00 -4.7163853490244163e+00 3.3060866579533927e+00 + -7.6196346152472527e+00 -4.9751821145613135e+00 3.4213337072581411e+00 + -7.4609664731704033e+00 -5.3031202723761606e+00 3.6063805885080820e+00 + id 12416 + loc 5.1950627565383911e-01 2.1320864558219910e-01 416 + blend 0.0000000000000000e+00 + interp 4.2598964017852747e-01:2.3339782193618616e-01:6.1596081963596594e-01:4.2598538028212568e-01:1.1969714182314621e+00:2.6834687595675966e-01:1.9812043814673617e+00:3.6886940218106523e-01:2.7438024500983400e+00:2.9467815281101056e-01:3.0440622645653064e+00:2.9994175097934384e-01:3.7715049944809191e+00 + CVs 20 + -5.1926580089052987e-01 1.5314828412508402e-01 7.2102830361115200e-02 + -8.6650799010070956e-01 1.9423677104206899e-01 1.6912912560119078e-01 + -1.1827773956106251e+00 1.9227195392664026e-01 2.7148594450992969e-01 + -1.5250985711505365e+00 1.8324368950535719e-01 3.6076147469991804e-01 + -1.8934302250551620e+00 1.6700154323080285e-01 4.3320102785888204e-01 + -2.2884875625018095e+00 1.4400299029973840e-01 4.8217362292467864e-01 + -2.7082561521898603e+00 1.1566231853250797e-01 4.9729223182896859e-01 + -3.1466160091934414e+00 8.3819875892556128e-02 4.6931684598198631e-01 + -3.5964064500672612e+00 5.0093573854284035e-02 3.9341384997864570e-01 + -4.0487699859424913e+00 1.6322637973327891e-02 2.6811430506241540e-01 + -4.4854950650025067e+00 -1.4049329098373198e-02 1.0172139005401692e-01 + -4.8841356519544501e+00 -3.9263925342681638e-02 -7.4048929090203885e-02 + -5.2431923746107714e+00 -6.6100972714707051e-02 -2.1701078611231850e-01 + -5.5882026018971924e+00 -1.0961764289049958e-01 -3.1429340194116473e-01 + -5.9405688817308899e+00 -1.8399589417196616e-01 -3.7994321889994620e-01 + -6.2921929644918411e+00 -2.8976240218604987e-01 -4.2202053770336057e-01 + -6.6235995472998681e+00 -4.1671871973435737e-01 -4.4036164724731885e-01 + -6.9267021936890343e+00 -5.5510600437203417e-01 -4.3515026609660290e-01 + -7.2297341235482051e+00 -6.9306887636267378e-01 -4.6331004119242225e-01 + id 12417 + loc 6.5834105014801025e-02 1.6489504277706146e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7480968007060145e-01:3.3700412814146491e-01:9.5936181480719074e-01:2.6045411273952029e-01:1.7510467712169646e+00:3.7480593197380074e-01:2.4124555310403717e+00:2.7206112525556952e-01:2.9286636912766277e+00:2.5464735907413466e-01:3.9860429975057166e+00 + CVs 20 + -1.8258205007811545e-01 3.6587832682793825e-01 -5.7849959228015918e-02 + -3.7829598619656657e-01 7.4451700038326174e-01 -1.0117966341074008e-01 + -5.7720726453326798e-01 1.1373751855463223e+00 -1.1462469950680990e-01 + -7.5430870304791053e-01 1.5441745965924105e+00 -8.4301884493736101e-02 + -8.9262115606171899e-01 1.9577002716171354e+00 -6.6777536836741258e-03 + -1.0389247400241126e+00 2.3478853664771200e+00 9.1050781227637989e-02 + -1.2805217250831658e+00 2.6507397949664311e+00 1.5407710985530099e-01 + -1.6346323393256048e+00 2.8100395081956324e+00 1.3615452561897601e-01 + -2.0408747921967705e+00 2.8034715731972226e+00 6.4665550442201125e-03 + -2.4051451194121545e+00 2.6436977452690651e+00 -2.5076324464029498e-01 + -2.6529306574874192e+00 2.3896050307006123e+00 -6.2240019454082374e-01 + -2.7588101358812720e+00 2.1055036209089626e+00 -1.0553392483847306e+00 + -2.7471294513985161e+00 1.8168164440458661e+00 -1.4856742028666023e+00 + -2.6410232337831747e+00 1.5021460761537375e+00 -1.8516735786673642e+00 + -2.4452845098213234e+00 1.1363508125368615e+00 -2.0840666638380347e+00 + -2.1395684314333367e+00 7.5001487120228205e-01 -2.1350397972182638e+00 + -1.6759575054515783e+00 4.9115408653515980e-01 -1.9113363073177025e+00 + -1.2031165768334766e+00 5.4885020135670959e-01 -1.4736679347118213e+00 + -7.8581835430934421e-01 3.2998427607654657e-01 -1.3268541451072169e+00 + id 12418 + loc 9.5922118052840233e-03 1.3956414163112640e-01 372 + blend 0.0000000000000000e+00 + interp 7.0144338566827413e-01:4.5416697664917383e-01:2.1287293307625799e-04:7.0143637123441749e-01:1.3670513075164881e-01:1.7760292423224050e-01:1.8982602619289439e+00:3.7101848033132517e-01:2.6631710880079242e+00:5.5086060999363040e-01:3.1133803708720094e+00:4.2599055060977564e-01:3.6379793385938317e+00 + CVs 20 + -2.3025502036909579e-01 8.3442932511150913e-01 6.0207706812263140e-01 + -5.1242830922412952e-01 1.5620075775977740e+00 1.1046470963549517e+00 + -8.6098457369241099e-01 2.1820059761969648e+00 1.5119588834576041e+00 + -1.2587982181183934e+00 2.6645149088002791e+00 1.7633321024594459e+00 + -1.6820223465152786e+00 3.0089508135059333e+00 1.8294702468097668e+00 + -2.1294425548579548e+00 3.2422359881976890e+00 1.7218030483841282e+00 + -2.5751417675936632e+00 3.3541620148341558e+00 1.4482109306760917e+00 + -2.9705551991319070e+00 3.3098243690564395e+00 1.0235123735907226e+00 + -3.2695638347343432e+00 3.0999797486217102e+00 5.0267197785694195e-01 + -3.4468868848475105e+00 2.7482928480336635e+00 -4.2738261657504051e-02 + -3.5000971246022834e+00 2.2739367909002781e+00 -5.5876102763144186e-01 + -3.4391165446816578e+00 1.6965224466623245e+00 -9.9845122046025769e-01 + -3.2836629374029225e+00 1.0940731421378569e+00 -1.3465011682864958e+00 + -3.0282000992597142e+00 5.4767478357510724e-01 -1.5584039384711812e+00 + -2.5666574327142082e+00 -2.7724215836627653e-02 -1.6060984972670991e+00 + -1.9819509217038107e+00 -5.7098017755955421e-01 -1.9530810635807829e+00 + -1.6543533046409251e+00 -6.7690610913543792e-01 -2.6525174878082995e+00 + -1.6283138370244046e+00 -2.7328584652607768e-01 -3.2936988309648800e+00 + -1.8174838745314637e+00 5.5184268046232043e-01 -3.6032034565485991e+00 + id 12419 + loc 5.5659317970275879e-01 3.7888899445533752e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2425142944192448e-01:2.7707198587989990e-01:1.0279096672030772e+00:2.2308133295251262e-01:1.8020126275388626e+00:2.9898105047083012e-01:2.8133971473784900e+00:3.2424818692763008e-01:3.3071361331322007e+00:2.5956788750897919e-01:3.9966421751958254e+00 + CVs 20 + -1.1175342972983170e-01 4.1834855083784528e-01 2.3296841214423541e-01 + -2.1531272600831328e-01 8.4849453685062626e-01 4.3583442701399339e-01 + -3.4813381311120778e-01 1.2780785457865753e+00 5.8528018983943775e-01 + -5.3146790478198447e-01 1.6972246554396739e+00 6.8013115687114523e-01 + -7.8343716351669179e-01 2.0887763233304537e+00 7.3681118765865050e-01 + -1.1238284554785061e+00 2.4207327184097327e+00 7.8122026207798845e-01 + -1.5615145861402657e+00 2.6411785387891458e+00 8.4411677640801186e-01 + -2.0615342529861387e+00 2.6850788254434863e+00 9.5969870946426772e-01 + -2.5397919636489044e+00 2.5309067992521692e+00 1.1408262568964078e+00 + -2.9353017239243995e+00 2.2282147729345096e+00 1.3677430134489601e+00 + -3.2508441345533714e+00 1.8564503838000850e+00 1.6207630502725698e+00 + -3.5162229381868677e+00 1.5030175259111906e+00 1.8920966273266360e+00 + -3.7288787060838473e+00 1.2581684724991837e+00 2.1905035501836432e+00 + -3.8773688091963434e+00 1.1481912892137847e+00 2.5663951702471723e+00 + -3.9632941834664015e+00 1.1389343907639471e+00 3.1136527663851554e+00 + -3.9983502203429229e+00 1.1401111963958277e+00 3.9125664420364443e+00 + -4.0959228878592970e+00 9.1019799691708458e-01 4.9656762638397955e+00 + -4.3669284101580912e+00 2.9549525760208883e-01 5.9789358632970551e+00 + -4.4859184482969710e+00 -9.6482941379490317e-02 6.7602314967239954e+00 + id 12420 + loc 4.6722272038459778e-01 9.9686361849308014e-02 413 + blend 0.0000000000000000e+00 + interp 6.2041801807846242e-01:3.1701395765048906e-01:2.0872414088940605e-01:4.7225948455588068e-01:9.6451687449685108e-01:6.2041181389828171e-01:1.3706156029820769e+00:3.6007174213654203e-01:1.9920667296835965e+00:4.3418088692082102e-01:2.4779933674228740e+00:2.9137260033908546e-01:2.9904045931528129e+00:4.0163334968424391e-01:3.9372357742783097e+00 + CVs 20 + -1.3555796538282155e-01 2.0638429614859510e-01 -1.0731225154093194e+00 + -2.8277735287395606e-01 2.8189395839794518e-01 -1.7865911763819307e+00 + -4.2556548785397286e-01 3.1170645446300094e-01 -2.4015505133185191e+00 + -5.5486111648367709e-01 3.4135226312735806e-01 -3.0384346956091894e+00 + -6.5059153431196759e-01 3.6551787836853533e-01 -3.6894715497496517e+00 + -6.9723484955526394e-01 3.7578426236658841e-01 -4.3428341759673197e+00 + -6.8688246038739953e-01 3.6022086146254817e-01 -4.9881240623838714e+00 + -6.1805419642289594e-01 3.0258955884149097e-01 -5.6184123224996450e+00 + -4.9462873717398426e-01 1.8478334453776968e-01 -6.2248558961332110e+00 + -3.2751154534765842e-01 -8.0197568138584696e-03 -6.7939240265834160e+00 + -1.3256864256508866e-01 -2.8305209946746168e-01 -7.3094054858316415e+00 + 7.4080595576946601e-02 -6.3535904218005168e-01 -7.7519050543332950e+00 + 2.7700423079037556e-01 -1.0453159551190023e+00 -8.1043898602082862e+00 + 4.6965840570590422e-01 -1.4864370061671361e+00 -8.3643091187672738e+00 + 6.4781001697076523e-01 -1.9372607745570609e+00 -8.5442879510330485e+00 + 8.0019109848521897e-01 -2.3814777131793781e+00 -8.6635922974262751e+00 + 9.1352050262885309e-01 -2.8046397740163256e+00 -8.7401550049753745e+00 + 9.8751775809893272e-01 -3.2004351101544160e+00 -8.7830818953905041e+00 + 1.0151012215528559e+00 -3.5269732977943042e+00 -8.7000595965884884e+00 + id 12421 + loc 8.8649797439575195e-01 3.9298442006111145e-01 1081 + blend 0.0000000000000000e+00 + interp 4.6263553328226248e-01:3.7939244384700055e-01:6.9714272147890632e-01:2.9056517039183805e-01:1.0330097071439839e+00:2.3994593229574490e-01:1.9977147559045547e+00:4.3033433669132759e-01:2.6030271825901057e+00:4.0334088499778470e-01:3.0000020171753867e+00:4.6263090692692965e-01:3.4149265157708211e+00:3.9035596817823953e-01:3.9998283250607183e+00 + CVs 20 + 3.7553531475092716e-03 4.9959794074903063e-01 -3.5319225371831137e-01 + -3.4103414926925535e-02 8.8611574308357255e-01 -5.7227227986404539e-01 + -7.7501273372021506e-02 1.2388070468751295e+00 -7.5787636397174896e-01 + -1.1268510444527374e-01 1.5828629743158151e+00 -9.4502924940244704e-01 + -1.4623363232886183e-01 1.9170722864841709e+00 -1.1220363555941959e+00 + -1.8641208634092543e-01 2.2434972296124975e+00 -1.2686613836228349e+00 + -2.4369709866896883e-01 2.5677056938071594e+00 -1.3508638320307249e+00 + -3.2724382047484024e-01 2.8870837756788186e+00 -1.3162168698325287e+00 + -4.2952420008350467e-01 3.1493906071406323e+00 -1.1047857861775046e+00 + -5.0907549200086943e-01 3.2577516834336597e+00 -7.5835460776277586e-01 + -5.4620685984315898e-01 3.2224440747066772e+00 -3.9293261871261520e-01 + -5.5547725668227821e-01 3.0993724586343570e+00 -3.5076708394980782e-02 + -5.5052010080604008e-01 2.9054614504179734e+00 3.2591562241150762e-01 + -5.4189313345216572e-01 2.6326231608219417e+00 6.9211813223170793e-01 + -5.3546326227751573e-01 2.2337026940664360e+00 1.0486680783148836e+00 + -5.2727524621554356e-01 1.6044396676748480e+00 1.3160973547714157e+00 + -5.1640937008461252e-01 7.7695394250535132e-01 1.3236636621526330e+00 + -5.2266883553296128e-01 4.0241496161616652e-02 1.1193440084889723e+00 + -5.5446032989908522e-01 -4.1306633906890089e-01 1.0307859408208315e+00 + id 12422 + loc 3.0812528729438782e-01 4.5360836386680603e-01 411 + blend 0.0000000000000000e+00 + interp 4.4357012217048414e-01:2.8237410217706838e-01:1.8908425227683334e-01:3.9503308125031728e-01:8.4115159002618090e-01:4.4356568646926248e-01:1.1881332788174412e+00:4.1937704489472621e-01:1.9104326670707510e+00:3.0037981414781745e-01:2.2013762821508314e+00:4.0788788944162874e-01:2.8733311617556492e+00:3.3082367166679172e-01:3.3485634697216224e+00 + CVs 20 + -7.0605473080784187e-02 1.5439730020878528e-01 -7.0967567516244945e-01 + -1.5750034433378252e-01 1.9528060374669484e-01 -1.2211149959279282e+00 + -2.3512218953841374e-01 1.8471986201600499e-01 -1.6908779099359525e+00 + -2.8916011889736326e-01 1.4773456393135775e-01 -2.1793449505592735e+00 + -3.1605773201691578e-01 8.4839245563746335e-02 -2.6756224858978910e+00 + -3.1568614937734885e-01 1.1934049833430826e-03 -3.1695626484670769e+00 + -2.9059406363313878e-01 -9.4533605576698765e-02 -3.6531820028427591e+00 + -2.4345116570498021e-01 -1.9486310514878746e-01 -4.1216225245591618e+00 + -1.7583188598849112e-01 -2.9769311622388273e-01 -4.5747405440359810e+00 + -9.1006273957058792e-02 -4.0771799386054108e-01 -5.0158354159319298e+00 + 3.6898582879485442e-03 -5.3943789670321585e-01 -5.4508062519725717e+00 + 1.0059087516849413e-01 -7.1832638100446533e-01 -5.8871180532651293e+00 + 1.9601306743845021e-01 -9.6960258132518451e-01 -6.3267891790201674e+00 + 2.8780702299946437e-01 -1.3065768019627404e+00 -6.7614082708984071e+00 + 3.7016532887740805e-01 -1.7313386227251342e+00 -7.1725346776171550e+00 + 4.2998155567209095e-01 -2.2379660164661126e+00 -7.5343597095673864e+00 + 4.5903428657927398e-01 -2.8119101052705116e+00 -7.8197365882856893e+00 + 4.5190234914352168e-01 -3.4260963614127333e+00 -8.0144182730034501e+00 + 4.2055473034599433e-01 -3.9670703627282382e+00 -8.2014197555753263e+00 + id 12423 + loc 8.2213944196701050e-01 1.8583215773105621e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7532125304829511e-01:2.9315719810515373e-01:7.1115622270431911e-01:3.1043112772152637e-01:1.3529586050631814e+00:3.5117010757923706e-01:2.0020415996547851e+00:3.7531749983576462e-01:2.7488739574055105e+00:3.0858508307504584e-01:3.2385823945269063e+00:3.2760840522843893e-01:3.9928745133970684e+00 + CVs 20 + 2.0718796670909523e-01 2.8511489510246285e-01 -1.2879968037976869e-01 + 3.9177481850307405e-01 5.7077684320939248e-01 -2.5767914094572930e-01 + 5.3649670087834356e-01 8.6671658461132217e-01 -3.9868927120123421e-01 + 6.6696124982565164e-01 1.1710685512509105e+00 -5.1520167376944226e-01 + 8.2285837068007894e-01 1.4554745411180134e+00 -5.4170945656227654e-01 + 1.0050734513311976e+00 1.6713133111354024e+00 -4.4276819354249908e-01 + 1.1708705725022646e+00 1.7841009613421213e+00 -2.3146725181177663e-01 + 1.2571473060041332e+00 1.7914480434255746e+00 5.2055495223798931e-02 + 1.2128796809718680e+00 1.7210063188398395e+00 3.4751460202828766e-01 + 1.0396829029033501e+00 1.6107720950895135e+00 6.0620896227525212e-01 + 7.6106114454751905e-01 1.4779657166364624e+00 8.0603230261924741e-01 + 4.0186356051002348e-01 1.3302243417558699e+00 9.0345959917082652e-01 + 5.7422037806269116e-03 1.1762271772248731e+00 8.7106860269323083e-01 + -4.2181663031709321e-01 9.8463889876722943e-01 7.9747519644460496e-01 + -9.2327023216487802e-01 6.9077733298664801e-01 8.4600770729702168e-01 + -1.4555790410450560e+00 3.4864243466114553e-01 1.1949436714573076e+00 + -1.8505795834564336e+00 2.8441383299521661e-01 1.9862670241711244e+00 + -1.8682056128750513e+00 8.4193253330411122e-01 2.8520700076783561e+00 + -2.0806004379024721e+00 9.4907217128694876e-01 3.2153789041887704e+00 + id 12424 + loc 1.2648067786358297e-04 1.4280132949352264e-01 409 + blend 0.0000000000000000e+00 + interp 4.4035775719818049e-01:3.1957761495209053e-01:9.6552661342047419e-01:3.4132808715228047e-01:1.9529027638954712e+00:4.4035335362060851e-01:2.4338857242696230e+00:2.5595020630252308e-01:3.1341818414802205e+00:3.0110485963695333e-01:3.9954548322676202e+00 + CVs 20 + -2.3442182987762039e-01 2.2547783508798444e-01 -3.1597823672962344e-01 + -4.4664598586493076e-01 4.2869242269786900e-01 -6.2509279045162069e-01 + -6.4241435110149947e-01 6.2643789027422647e-01 -9.5254145197473861e-01 + -8.2790919957659226e-01 8.1213816111643278e-01 -1.2922646666656152e+00 + -1.0164184712435853e+00 9.7395541870215752e-01 -1.6250278364446171e+00 + -1.2206771205579499e+00 1.1100921985875247e+00 -1.9384548297172453e+00 + -1.4469508095565637e+00 1.2267051892107852e+00 -2.2250249125422181e+00 + -1.6993998949609774e+00 1.3325248393677933e+00 -2.4828824045074587e+00 + -1.9864126718332518e+00 1.4355040668989090e+00 -2.7248081167858769e+00 + -2.3249189372076438e+00 1.5294505996242860e+00 -2.9777247046724491e+00 + -2.7014830794485323e+00 1.5569240176411645e+00 -3.2666942680196769e+00 + -3.0184305712328570e+00 1.4563693122581207e+00 -3.5847539917589635e+00 + -3.2155166732160931e+00 1.2549398983886280e+00 -3.9056134636501745e+00 + -3.3328692064600767e+00 1.0051484626714668e+00 -4.2121882849566692e+00 + -3.4578228601310297e+00 7.5250469466152414e-01 -4.4857986873057598e+00 + -3.6952187191060326e+00 5.5318487521902115e-01 -4.6991073257516884e+00 + -4.0815747757274377e+00 4.2115429165213669e-01 -4.8474778742610010e+00 + -4.5599283596131697e+00 3.0401617273251347e-01 -4.9821106288289556e+00 + -5.0403946796809382e+00 1.4482442264223705e-01 -5.2123526039250541e+00 + id 12425 + loc 9.4248950481414795e-02 9.6596407890319824e-01 403 + blend 0.0000000000000000e+00 + interp 3.6712560349137152e-01:3.5798975362790814e-01:1.0027831878152127e-01:3.3208178566556634e-01:9.6278826472560941e-01:3.2370573205539843e-01:1.3583836863139764e+00:2.7975720523151393e-01:2.0323799325170060e+00:3.6712193223533662e-01:2.7972161045451007e+00:3.1290097575936554e-01:3.3508407838278425e+00 + CVs 20 + 6.3220332694553447e-02 2.0026196761177578e-01 -3.0925341041638989e-02 + 8.8929464511167899e-02 3.8445850466727638e-01 -4.8874826078644906e-02 + 1.0017741297733218e-01 5.6292045330956442e-01 -5.0650512184643406e-02 + 1.1577706275083677e-01 7.4995738599371697e-01 -3.3565910721081241e-02 + 1.3319816591886940e-01 9.4129201996167544e-01 6.3493802431704646e-04 + 1.4916381080184432e-01 1.1306698960809063e+00 5.0800593332609209e-02 + 1.6040968460691751e-01 1.3107075353380473e+00 1.1688354046216715e-01 + 1.6575560502793663e-01 1.4735529759701724e+00 1.9927065348406425e-01 + 1.6695493003960082e-01 1.6118053074970269e+00 2.9779995596613973e-01 + 1.6664365334264042e-01 1.7209070391031256e+00 4.1080485598245636e-01 + 1.6608934199284175e-01 1.7986691264068004e+00 5.3539915130077043e-01 + 1.6456048390531863e-01 1.8446330971682263e+00 6.6836472629182875e-01 + 1.6015197734018927e-01 1.8614219952073456e+00 8.0688462824023965e-01 + 1.5348128684866880e-01 1.8540072405516423e+00 9.4858878959927873e-01 + 1.5304392602598560e-01 1.8292852272734721e+00 1.0897520947336237e+00 + 1.7015138119413931e-01 1.7996852572195627e+00 1.2265435826938942e+00 + 2.0567661131021076e-01 1.7767423049402855e+00 1.3592488870496420e+00 + 2.4734685089988429e-01 1.7626598153822659e+00 1.4929458038430650e+00 + 2.5547463855322816e-01 1.7601802946808371e+00 1.6488614753721327e+00 + id 12426 + loc 9.6231174468994141e-01 1.8168401718139648e-01 413 + blend 0.0000000000000000e+00 + interp 3.6994944178390538e-01:3.3815143145274085e-01:2.2498827151798961e-03:2.4951116582760205e-01:1.0205272387454154e+00:3.2528416386885189e-01:1.8706114027169058e+00:3.6994574228948757e-01:2.2413577335011796e+00:2.7757467103864197e-01:3.0982498587216911e+00 + CVs 20 + -1.0850257170303641e+00 2.5450570969229797e-01 2.4160710582434994e-01 + -1.7893670917191662e+00 3.2367074983663957e-01 4.3705112684969705e-01 + -2.3960796460531726e+00 3.2093468797046698e-01 6.2246815632945673e-01 + -3.0209302554465043e+00 2.9493041949348486e-01 8.1121122087540476e-01 + -3.6530128452247204e+00 2.3561580915428137e-01 9.9293445302751060e-01 + -4.2782175202899095e+00 1.3758967282029699e-01 1.1551291765005209e+00 + -4.8831775973135354e+00 1.0080313455598233e-03 1.2866184351369954e+00 + -5.4590997014547105e+00 -1.7174974211516758e-01 1.3775508219027537e+00 + -6.0018052084552131e+00 -3.7892014848201416e-01 1.4192393768165084e+00 + -6.5167499162365434e+00 -6.2466342011124965e-01 1.4080933075760917e+00 + -7.0157248025527164e+00 -9.2739563343319209e-01 1.3523512239097433e+00 + -7.4979830295694843e+00 -1.3128043047106126e+00 1.2706343976498855e+00 + -7.9477498146999395e+00 -1.7959533918151993e+00 1.1765262602545556e+00 + -8.3433504924429549e+00 -2.3721613061687106e+00 1.0712130974837661e+00 + -8.6641359461096492e+00 -3.0237263707077737e+00 9.5488570589099320e-01 + -8.9021699254198410e+00 -3.7215086753311404e+00 8.3254641486769287e-01 + -9.0591648847738071e+00 -4.4322427056505322e+00 6.9982371428439327e-01 + -9.1480888986436995e+00 -5.1292574891572205e+00 5.4620066970802239e-01 + -9.2640218918284454e+00 -5.7331537214760218e+00 3.7518179687990316e-01 + id 12427 + loc 8.2375317811965942e-01 8.8997602462768555e-02 1048 + blend 0.0000000000000000e+00 + interp 5.3493430821601295e-01:2.5265647035976480e-01:7.4321351155810766e-01:3.4655578757092942e-01:1.0068723821398791e+00:3.7117876326525073e-01:1.9064042499329434e+00:5.3492895887293079e-01:2.1346044040453798e+00:2.4023642612292515e-01:3.1208690630058067e+00:2.9248112791685621e-01:3.9885976958576799e+00 + CVs 20 + 7.5039622558849273e-03 4.3481304723357411e-01 4.6585698079385868e-01 + -3.4636325659764433e-02 8.4198329044096487e-01 8.8684496954036507e-01 + -1.3470322959261954e-01 1.2385240527369790e+00 1.2580292197250131e+00 + -3.0991093601632691e-01 1.6336096044143098e+00 1.5754709719748476e+00 + -5.7472554763177675e-01 2.0012631248271409e+00 1.8130399040216783e+00 + -8.5481010638070221e-01 2.2955882685215681e+00 1.9577243675327183e+00 + -1.2038729748001575e+00 2.4804054969290656e+00 2.0619791166690549e+00 + -1.6120782301902339e+00 2.5223663559612959e+00 2.1127909186474216e+00 + -2.0365045402416326e+00 2.3873933342772808e+00 2.1259927331120911e+00 + -2.4390983578200798e+00 2.0376342972035464e+00 2.1205932050934400e+00 + -2.7397286603791406e+00 1.4992178179081086e+00 2.0618854225344370e+00 + -2.8655470513561503e+00 8.5225567870683605e-01 1.8999466594235104e+00 + -2.7878543621741425e+00 2.0847936522851584e-01 1.6056697709092056e+00 + -2.5181776628938390e+00 -3.1243411945945510e-01 1.1641928404344710e+00 + -2.1120588733409411e+00 -6.0284027808665142e-01 6.1166559109872543e-01 + -1.6754355849469915e+00 -6.4287507465213656e-01 6.0741134254655937e-02 + -1.2993922958611945e+00 -5.0586959373563722e-01 -3.9340613310027833e-01 + -1.0193875341204757e+00 -2.9522139241284651e-01 -7.1973109476966368e-01 + -8.6466849988388383e-01 5.6440958123893381e-04 -7.9491572678297051e-01 + id 12428 + loc 8.4351003170013428e-01 3.0576601624488831e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8116615341969665e-01:2.8514310780161656e-01:6.1895474304653075e-01:4.2303938166551502e-01:1.4291470638723889e+00:4.8116134175816250e-01:2.0090723817273068e+00:3.3903891099275563e-01:2.4248499164195936e+00:2.8917238192647354e-01:3.1030162570587687e+00:3.2940500884714630e-01:3.9037937883548750e+00 + CVs 20 + -2.3099741496703069e-01 1.7970795059879527e-01 1.5326400508101765e-01 + -4.1447522560608691e-01 3.5840616773599465e-01 2.8297666815377726e-01 + -5.6231815435125099e-01 5.2591689442486000e-01 3.9698658659362590e-01 + -6.9136121487521818e-01 6.8634249217812782e-01 5.0710743651613444e-01 + -8.0586534617311945e-01 8.5036257931536996e-01 6.1732261813548472e-01 + -9.1177644329751417e-01 1.0273322261452598e+00 7.3019890454333125e-01 + -1.0201424315745629e+00 1.2195758845714806e+00 8.5327330897796250e-01 + -1.1422543965898393e+00 1.4190579848056775e+00 9.9843042838284723e-01 + -1.2816424090220806e+00 1.6134621404404612e+00 1.1751592828950910e+00 + -1.4353070650511874e+00 1.7895142211140809e+00 1.3904251536882759e+00 + -1.5989043559932898e+00 1.9295465249106214e+00 1.6479013481371423e+00 + -1.7671303816343225e+00 2.0100880754033095e+00 1.9445578795985621e+00 + -1.9329106075641267e+00 2.0089769929477450e+00 2.2697621240882802e+00 + -2.0899380921503781e+00 1.9162654802664605e+00 2.6098883210831474e+00 + -2.2347487013578538e+00 1.7372609936123253e+00 2.9625292301221773e+00 + -2.3721883062107474e+00 1.4842563241100597e+00 3.3416713010626728e+00 + -2.5148606372079509e+00 1.1417133630687690e+00 3.7466043508759035e+00 + -2.6595683712525573e+00 6.5968742877915965e-01 4.0415623459804193e+00 + -2.7052656646058733e+00 2.9805546571509112e-01 3.9241509417873668e+00 + id 12429 + loc 7.0271700620651245e-01 4.5993289351463318e-01 372 + blend 0.0000000000000000e+00 + interp 4.3379603287971358e-01:4.3379169491938480e-01:3.4996397989531691e-02:4.2348546801321701e-01:5.7105056668179000e-01:2.9188446273422047e-01:9.9981163742661205e-01:3.8186086069211544e-01:1.4780515384659187e+00:4.1151492921637550e-01:2.0519893934738977e+00:4.2122276570726924e-01:2.8315583205399664e+00:2.6384907379073397e-01:3.0598987709059577e+00:4.2424884078508945e-01:3.7448015530323295e+00 + CVs 20 + 4.2325030980513367e-01 5.1371515988943661e-01 1.9712291645077509e-01 + 8.3869330839205625e-01 9.5787489755751876e-01 3.7128733888339871e-01 + 1.2589358884726480e+00 1.3042565676891442e+00 5.4135483829634423e-01 + 1.6395266127533756e+00 1.5434479952315920e+00 7.0438187282902653e-01 + 1.9574145829395135e+00 1.7141056468563043e+00 8.5463274601955119e-01 + 2.1892290707512068e+00 1.8966706901917445e+00 1.0700842312643728e+00 + 2.2376059553140100e+00 2.0537661982127799e+00 1.3938787943216369e+00 + 2.0853750035409844e+00 2.1036268900926363e+00 1.7508905141978224e+00 + 1.7797123615609061e+00 2.0430506547144125e+00 2.0588632719070472e+00 + 1.3579152710358378e+00 1.8941739468200907e+00 2.2647546307519999e+00 + 8.5452803192663296e-01 1.6290461440923529e+00 2.3371866483797961e+00 + 3.3401122131250094e-01 1.1877509214870052e+00 2.2566939191313082e+00 + -1.7161407375004384e-01 5.7826303948881863e-01 1.9949788099783150e+00 + -7.6134992686433955e-01 -9.4711060232937239e-02 1.5016342131561069e+00 + -1.6501966656994209e+00 -5.9448490266915799e-01 9.0553136870515205e-01 + -2.8491277751550195e+00 -5.7557512326600280e-01 4.9118879557111556e-01 + -4.1285176803479340e+00 -2.5020612818617893e-02 4.0502641532670514e-01 + -5.2278574488590568e+00 8.1705751827057238e-01 6.9068132351477218e-01 + -5.9895895839137729e+00 1.5477715566478949e+00 1.2037750140681189e+00 + id 12430 + loc 4.8714287579059601e-02 4.0265482664108276e-01 1075 + blend 0.0000000000000000e+00 + interp 3.0804501629335773e-01:2.5122861822844561e-01:7.9814393228083147e-02:2.7735621627228763e-01:1.0024644380559538e+00:2.0128608538275164e-01:1.8863843224355561e+00:3.0804193584319484e-01:2.6611811361219129e+00:3.0303020822582510e-01:3.0343302761016746e+00 + CVs 20 + -1.5587988337139999e-01 2.2140169918324010e-01 -7.1958513428958412e-02 + -3.2024011862799850e-01 5.0747229154955997e-01 -1.0718283040961385e-01 + -4.7137035539383715e-01 8.4042580015862389e-01 -1.2849412148376804e-01 + -6.1009394963674835e-01 1.2039963884467464e+00 -1.5564315653024519e-01 + -7.5989605031734309e-01 1.5922586257204232e+00 -2.0583236656361625e-01 + -9.4186524741108901e-01 1.9902920074073491e+00 -3.0373709765575108e-01 + -1.1677306293746867e+00 2.3696553144678294e+00 -4.8279530676901405e-01 + -1.4298417570923596e+00 2.6788821877813236e+00 -7.8383399508904406e-01 + -1.6801215363068962e+00 2.8478271080905881e+00 -1.2167563573872835e+00 + -1.8620785572000500e+00 2.8492147191055111e+00 -1.7300477400169358e+00 + -1.9675764683228538e+00 2.6944900900809952e+00 -2.2739124546297877e+00 + -2.0180529274242174e+00 2.3671180330411206e+00 -2.8071490753173651e+00 + -2.0324154426038503e+00 1.8584004557930691e+00 -3.2458195786295434e+00 + -2.0064081572975749e+00 1.3000175032287968e+00 -3.5214835568577256e+00 + -1.9371264930729000e+00 8.7545213568505797e-01 -3.7065816201454926e+00 + -1.8613840463368683e+00 6.4754198888305980e-01 -3.8839408800072204e+00 + -1.8323250650451370e+00 5.8998083660812450e-01 -4.0519536172992421e+00 + -1.8471909483376820e+00 5.7247349331505526e-01 -4.2075703828200002e+00 + -1.7818132282317973e+00 3.1766516838571057e-01 -4.5263693295495973e+00 + id 12431 + loc 6.4666157960891724e-01 3.1822785735130310e-02 416 + blend 0.0000000000000000e+00 + interp 3.9341326405726224e-01:2.8819105208689932e-01:6.1653091629551016e-03:2.8447994595394632e-01:9.6001634096262434e-01:3.9340932992462169e-01:1.8916933853397810e+00:3.3666920730946714e-01:2.8037501374230200e+00:3.6337093622742994e-01:3.2502619573635352e+00 + CVs 20 + -4.5124264648819784e-01 1.8507958841918593e-01 2.7774611060084636e-02 + -7.6739847814405504e-01 3.0421621353146622e-01 6.5781752405338262e-02 + -1.0447274206404433e+00 4.1018540030092437e-01 9.1934958123584709e-02 + -1.3283570685043395e+00 5.3677430887392341e-01 8.8905907336942314e-02 + -1.6146374895445745e+00 6.8065617389425137e-01 5.7358460346153883e-02 + -1.8990086009648186e+00 8.3709032008377471e-01 -1.9590019514353907e-03 + -2.1769901085072756e+00 1.0012028279534837e+00 -9.0685803343871441e-02 + -2.4444193653575272e+00 1.1676325450801115e+00 -2.1158618159910791e-01 + -2.6957225684375987e+00 1.3298090500690938e+00 -3.6337988639056562e-01 + -2.9245273001738998e+00 1.4812251366542064e+00 -5.4113201084118367e-01 + -3.1347556479539005e+00 1.6185479080379288e+00 -7.5297226876968437e-01 + -3.3565665716313342e+00 1.7383663662429953e+00 -1.0430073688337433e+00 + -3.6414832993239119e+00 1.8171360473034199e+00 -1.4520918084922565e+00 + -4.0148592616415018e+00 1.8105802766772665e+00 -1.9247182074274443e+00 + -4.4424898118752250e+00 1.7030063880845561e+00 -2.3586600684574326e+00 + -4.8907838600809654e+00 1.5043191397720699e+00 -2.7192782402614641e+00 + -5.3527322960482833e+00 1.2171542236691892e+00 -3.0106392812223266e+00 + -5.8123223159362061e+00 8.5086368916035138e-01 -3.2225575594982439e+00 + -5.9449237386360618e+00 6.4798379025864383e-01 -3.2714983165000699e+00 + id 12432 + loc 5.8014243841171265e-01 4.3347063660621643e-01 411 + blend 0.0000000000000000e+00 + interp 4.6600703176199698e-01:3.7161463676957673e-01:5.6477221364312546e-02:3.1673609826865740e-01:8.1244431000363226e-01:3.5760925935441074e-01:1.1229926233477436e+00:3.8365792312713159e-01:1.9137451036974662e+00:3.8888932784484870e-01:2.5328219752206920e+00:4.2064805527313731e-01:3.0982319008290173e+00:4.6600237169167941e-01:3.7419529499220974e+00 + CVs 20 + -7.6160740078373457e-01 2.4367482110305883e-01 1.0039754186919848e-01 + -1.3411298049791749e+00 3.8029395997812165e-01 1.7549546020936610e-01 + -1.8752215597773643e+00 4.7250120880806279e-01 2.2038595355926799e-01 + -2.4318075555100869e+00 5.4006255263651970e-01 2.3694365919041277e-01 + -3.0062001651711991e+00 5.7609299052448326e-01 2.2708817703655571e-01 + -3.5932605904805377e+00 5.7528834440238164e-01 1.9653546840381134e-01 + -4.1873430310514124e+00 5.3111439736789889e-01 1.5177131105261060e-01 + -4.7817939622719496e+00 4.3284652733826490e-01 9.7904482336817700e-02 + -5.3691696436647609e+00 2.6605474827649678e-01 4.2554078505595561e-02 + -5.9372783274579346e+00 1.6062360985874324e-02 -2.0291935689221718e-03 + -6.4627541627051661e+00 -3.2298584919018847e-01 -2.8546882371124016e-02 + -6.9205803526703518e+00 -7.3768293468959545e-01 -4.1998181042273042e-02 + -7.3032166240741159e+00 -1.2039400465444641e+00 -5.3458137801222883e-02 + -7.6170992217067717e+00 -1.7052487116907651e+00 -6.6838096599509234e-02 + -7.8664763217087188e+00 -2.2322109235590903e+00 -8.1419475338830316e-02 + -8.0484989053390326e+00 -2.7745770013454072e+00 -1.0166872195322174e-01 + -8.1608608189028384e+00 -3.3186693394669873e+00 -1.3568797113108677e-01 + -8.2150517548533308e+00 -3.8510003705435296e+00 -1.7916414478882048e-01 + -8.3298275068120642e+00 -4.2617051649215920e+00 -2.3074857045240216e-01 + id 12433 + loc 6.3587641716003418e-01 8.1850326061248779e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5504987553678861e-01:4.1472158947651844e-01:1.8122384338782438e-02:4.1593616150861218e-01:9.0819758851520305e-01:4.4311348695969022e-01:1.1898335242362157e+00:4.1685561496480095e-01:1.8690286830206801e+00:4.1726276535713841e-01:2.3334554475557741e+00:4.0866082539197057e-01:2.9938258435658387e+00:4.5504532503803324e-01:3.5294758261299375e+00 + CVs 20 + -4.9101314266517884e-03 3.5887575410389960e-01 -1.5796933528606541e-01 + -1.7644341704790036e-02 7.2484942555435050e-01 -3.4137189662995437e-01 + -2.0764511698764129e-02 1.0983799426581140e+00 -5.6143331392760620e-01 + 3.1422071690076075e-03 1.4753346170942254e+00 -8.2612872306181029e-01 + 7.1559100654638746e-02 1.8484015711783779e+00 -1.1421153484655164e+00 + 2.0386739372536394e-01 2.1950858039117449e+00 -1.5167376998987763e+00 + 4.1491508815088785e-01 2.4699182062153660e+00 -1.9477584599629836e+00 + 7.0448357108445814e-01 2.6258709219308711e+00 -2.4106101801561426e+00 + 1.0537366856765205e+00 2.6378419329986453e+00 -2.8624176989616177e+00 + 1.4288907884890847e+00 2.5097689272149064e+00 -3.2620970483515301e+00 + 1.7955996749454386e+00 2.2702384997922307e+00 -3.5893906267213267e+00 + 2.1352010480655084e+00 1.9602556000692832e+00 -3.8488783675353755e+00 + 2.4415226129000986e+00 1.6162684250089248e+00 -4.0606435008265400e+00 + 2.6981531551463065e+00 1.2586260548935613e+00 -4.2419617831079535e+00 + 2.8827250366948656e+00 8.9422489938554650e-01 -4.4009954350107519e+00 + 2.9976045386513275e+00 5.2070592930301185e-01 -4.5589623726185255e+00 + 3.0535607164754706e+00 1.2668899874931960e-01 -4.7654131202564844e+00 + 3.0470557749610361e+00 -2.8574236728995628e-01 -5.0434487194038775e+00 + 3.0583763631546352e+00 -6.7362923825553878e-01 -5.2218592937635888e+00 + id 12434 + loc 7.2714334726333618e-01 2.9144579172134399e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6045395926869583e-01:2.3994822318309422e-01:3.6646846215692919e-01:2.5607578652619695e-01:1.0561652280249143e+00:2.8169221858541738e-01:1.9511808398118216e+00:2.6106501432716650e-01:2.6874374548336686e+00:2.9446966820646658e-01:3.1552423778378169e+00:3.6045035472910314e-01:3.9044400109956827e+00 + CVs 20 + -8.4779968275119813e-02 4.7105710196012640e-01 3.4485531213013615e-01 + -2.0361324927214969e-01 9.4622667866989418e-01 6.4194329165438146e-01 + -3.5002335616612934e-01 1.3961885607037763e+00 8.6989610813324303e-01 + -5.0991264548663229e-01 1.8108586272485874e+00 1.0241980618854472e+00 + -6.8849415832496830e-01 2.1978657337894147e+00 1.1255820289644802e+00 + -9.1938790407446902e-01 2.5721020219995343e+00 1.1854042429644776e+00 + -1.2469537754887852e+00 2.9191492591618213e+00 1.2021215268463747e+00 + -1.7089895579804517e+00 3.1736319407920619e+00 1.1863441048724939e+00 + -2.2985583492179442e+00 3.2447806962134318e+00 1.1860822065533037e+00 + -2.9677449268986300e+00 3.0766881066014209e+00 1.2368160192148796e+00 + -3.6570186005496201e+00 2.6472845613924090e+00 1.3007597395631723e+00 + -4.2851530586704625e+00 1.9648899251057137e+00 1.2730940001154365e+00 + -4.7605620469550587e+00 1.0909978428984914e+00 1.0487547710139593e+00 + -4.9833747516381868e+00 1.8276561378838962e-01 5.4315155429647533e-01 + -4.9283876908772672e+00 -4.9809970558257399e-01 -2.3492844455304640e-01 + -4.6898622319120635e+00 -7.6882634746140099e-01 -1.1627748752035758e+00 + -4.3060066215972768e+00 -6.5770011299512809e-01 -2.1849365474936184e+00 + -3.7329081020642851e+00 -2.5267649442887175e-02 -3.1617868636202617e+00 + -3.6277642679242113e+00 6.6016434521555345e-01 -3.1158718675805468e+00 + id 12435 + loc 4.0466198325157166e-01 9.7990196943283081e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2130808282330201e-01:3.9218988554148859e-01:5.9824471603643059e-01:2.1235929206109613e-01:1.0937924547792253e+00:1.5798296319243374e-01:2.2137623415653458e+00:4.2130386974247380e-01:2.9225511517475891e+00:2.7242938409625228e-01:3.8396682567793152e+00 + CVs 20 + 2.1818000979382629e-01 3.3628223895006848e-01 -2.3642309169216336e-01 + 4.4270537635431129e-01 6.5056599245995284e-01 -4.5390556175435615e-01 + 6.8074922222241208e-01 9.3744432344429196e-01 -6.6273182696510891e-01 + 9.3396043465746126e-01 1.1959843007395108e+00 -8.7049730602781117e-01 + 1.2024671591464453e+00 1.4293446920221393e+00 -1.0801234133697677e+00 + 1.4818747645929107e+00 1.6394357872342917e+00 -1.2943990345907319e+00 + 1.7524002900371842e+00 1.8308722103035375e+00 -1.5171185145569530e+00 + 1.9894115077781356e+00 2.0128428875372983e+00 -1.7418944948057129e+00 + 2.1800353414357097e+00 2.1747056716407078e+00 -1.9817556510678664e+00 + 2.3007583459294567e+00 2.2564891087809538e+00 -2.2712138093404244e+00 + 2.3119713940503503e+00 2.2094278879259819e+00 -2.5941116373847701e+00 + 2.1884667282807451e+00 2.0062703954450698e+00 -2.9127414898104016e+00 + 1.9650693580281122e+00 1.6028790184819701e+00 -3.2098902651758534e+00 + 1.7568859330526556e+00 9.7296186666540374e-01 -3.5123983998979131e+00 + 1.6828244839868720e+00 1.8735607117128183e-01 -3.9205685938744637e+00 + 1.7876608985018598e+00 -5.5707234110887538e-01 -4.5765253102008607e+00 + 2.0427617035994579e+00 -9.6751838844888616e-01 -5.5361878156511546e+00 + 2.2689668285472453e+00 -7.7003740468683968e-01 -6.5005810540942566e+00 + 2.2649366196692440e+00 -3.7777460961030784e-01 -7.0192212093677817e+00 + id 12436 + loc 8.4056591987609863e-01 5.7000380754470825e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5744754097384327e-01:2.8535175425248627e-01:2.5295169554929353e-01:3.4609134644665523e-01:9.9920540577071926e-01:3.1028263881451706e-01:1.6143619348526945e+00:4.5744296649843358e-01:2.3150353836991107e+00:3.0560812698273609e-01:3.0741526041866702e+00:3.5315207341289850e-01:3.8392209322273336e+00 + CVs 20 + -2.1677447747184939e-01 5.2252098532412861e-01 9.5893267203388949e-02 + -4.3069751320997796e-01 1.0325765802130675e+00 2.0076791962727364e-01 + -6.5952474870330846e-01 1.5295513649669834e+00 3.1311239771646693e-01 + -9.4111223982401393e-01 2.0002710130276933e+00 3.9660649546337123e-01 + -1.2999557197823735e+00 2.4166865412305114e+00 4.0615136055780088e-01 + -1.7247225224104916e+00 2.7386320077192394e+00 3.0737209699842394e-01 + -2.1637304306269938e+00 2.9228279889479181e+00 7.8993048632120422e-02 + -2.5326116458076844e+00 2.9325605128148324e+00 -2.7752152497412430e-01 + -2.7617692293581220e+00 2.7697925465552382e+00 -6.9967991963141030e-01 + -2.8769825956014459e+00 2.4856280729738587e+00 -1.0978548002706632e+00 + -2.9536907721178927e+00 2.0917257298196175e+00 -1.4186451068954700e+00 + -3.0418860550333342e+00 1.5693134402455224e+00 -1.5832814940075308e+00 + -3.1379870389120779e+00 1.0164028990107874e+00 -1.5326939782441404e+00 + -3.1990248832060497e+00 5.6572961044135783e-01 -1.4183788390458176e+00 + -3.2022798609971286e+00 1.7602167617352654e-01 -1.4054167401968678e+00 + -3.1556144938724011e+00 -2.0499663130511137e-01 -1.5382700316222777e+00 + -3.0758110235737575e+00 -5.7097650277962297e-01 -1.8225286545136363e+00 + -2.9845160314091164e+00 -9.1827452101477824e-01 -2.1726468796494220e+00 + -2.9691959644481121e+00 -1.3006597581937267e+00 -2.2480359731540482e+00 + id 12437 + loc 6.3814663887023926e-01 1.3383752107620239e-01 406 + blend 0.0000000000000000e+00 + interp 4.4412892072777915e-01:4.1301748085743106e-01:3.8344424427870205e-01:2.8879397358285291e-01:9.9887245166636462e-01:3.6089317579436619e-01:1.6890469414891558e+00:2.9871292757724427e-01:2.1839976421264935e+00:4.2228969052812154e-01:2.8973019576294012e+00:4.4412447943857192e-01:3.1561452475060330e+00:3.6571390506034757e-01:3.8312508897873765e+00 + CVs 20 + -8.7321476619125565e-02 1.8311966709538874e-01 -5.7477725798927404e-02 + -1.4412452465895270e-01 3.2212067768622454e-01 -1.1442669758184247e-01 + -2.0978499297724332e-01 4.4552791449521334e-01 -1.5979343182164107e-01 + -2.9726775623069535e-01 5.5937801779671203e-01 -1.8751042152171654e-01 + -4.0429041301455865e-01 6.5847213917788427e-01 -1.9685875564433691e-01 + -5.2661788005698140e-01 7.3851681072221864e-01 -1.8807300308896024e-01 + -6.5934454304541779e-01 7.9719952745973099e-01 -1.6309042636700266e-01 + -7.9872712350905795e-01 8.3444971711120686e-01 -1.2562194659585085e-01 + -9.4079960746442026e-01 8.5033751265467661e-01 -7.9248382946582097e-02 + -1.0768737233329260e+00 8.4356268142286162e-01 -2.5071708864574827e-02 + -1.1975216652823246e+00 8.1410347226514401e-01 3.6673658505938511e-02 + -1.3046778251393691e+00 7.6458449315228783e-01 1.0303733172969914e-01 + -1.4075009996223227e+00 6.9696423016502762e-01 1.6963187220802359e-01 + -1.5058749307957005e+00 6.1298298002543072e-01 2.3223834446138739e-01 + -1.5919104739304717e+00 5.1629187405898769e-01 2.8740858866407315e-01 + -1.6645044228729895e+00 4.1015842801834601e-01 3.3332617349015486e-01 + -1.7320920762132856e+00 2.9521195001661737e-01 3.6969761524297973e-01 + -1.8043413568250619e+00 1.7097448165801887e-01 3.9693542479354788e-01 + -1.9215195282968192e+00 3.0269835460350225e-02 4.2146240527583240e-01 + id 12438 + loc 3.6354568600654602e-01 8.8615685701370239e-01 409 + blend 0.0000000000000000e+00 + interp 5.0680105190003155e-01:3.7601359535128720e-01:1.0229222270340066e-01:3.4113086212371174e-01:9.6228302533089449e-01:4.5441243594491837e-01:1.4207023761280368e+00:5.0679598388951252e-01:1.6818152451418262e+00:4.5093325487231517e-01:2.0653442533487998e+00:4.0408044597258552e-01:2.7697915834878382e+00:3.7635711329636423e-01:3.4267155274833527e+00 + CVs 20 + 4.9880976305951530e-01 1.2053358575122078e-01 -6.7605025915477276e-02 + 9.0276534725279345e-01 1.7630377154857768e-01 -1.6615033237031923e-01 + 1.2873163834718973e+00 1.9998725829606445e-01 -2.6086966728990468e-01 + 1.6796434729980991e+00 2.0372752663378202e-01 -3.3879932232350041e-01 + 2.0728944937756739e+00 1.8686807162961550e-01 -4.0245696985760226e-01 + 2.4618399164696427e+00 1.5156349217563170e-01 -4.5327554300375472e-01 + 2.8411020516910366e+00 1.0185411490141805e-01 -4.9112944467025232e-01 + 3.2044118580653471e+00 4.1089474008927818e-02 -5.1515371323102899e-01 + 3.5471827995805736e+00 -2.9147273097330562e-02 -5.2425043218334577e-01 + 3.8647585033662613e+00 -1.0717093866343630e-01 -5.1850127438810822e-01 + 4.1522925092870402e+00 -1.9053448214266844e-01 -5.0059822619537253e-01 + 4.4143792593030771e+00 -2.8128977510940700e-01 -4.7404050074032883e-01 + 4.6659837884031266e+00 -3.8958504816462103e-01 -4.4116357685908481e-01 + 4.9186745815253126e+00 -5.2675290191797686e-01 -4.0390558325358328e-01 + 5.1736640654627317e+00 -6.9903970369911894e-01 -3.6473615044448199e-01 + 5.4248420445490968e+00 -9.0880513091651594e-01 -3.2650651794835372e-01 + 5.6623154509313967e+00 -1.1563657090138086e+00 -2.8971976619251838e-01 + 5.8756406274616815e+00 -1.4376397346117358e+00 -2.5093126825195811e-01 + 6.0623558661433670e+00 -1.7520882532660189e+00 -2.0939530093500497e-01 + id 12439 + loc 8.3536547422409058e-01 9.4843780994415283e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8365695385191426e-01:3.4324596017111564e-01:3.2777682759931348e-01:4.8365211728237578e-01:1.0926094569865423e+00:2.8991277930396964e-01:1.9435404526797420e+00:2.5370836157775611e-01:2.5738501397931963e+00:3.0954670210694685e-01:3.3630920821867916e+00 + CVs 20 + -7.4698709081211664e-02 1.2951220567180394e-01 5.1261191631891745e-02 + -1.1367236839964198e-01 2.3156631760199098e-01 4.7392722270433396e-02 + -1.5677645430674567e-01 3.2575414415183740e-01 2.6619404713848938e-02 + -2.1676487415265899e-01 4.1590595493692828e-01 1.2088321939490443e-03 + -2.9217200196462695e-01 4.9857864301714550e-01 -3.1105703110783228e-02 + -3.8116485498044900e-01 5.7120522509727101e-01 -7.1678505559050643e-02 + -4.8215684257062602e-01 6.3273939053879547e-01 -1.2084868072677640e-01 + -5.9457082157553598e-01 6.8339764900255717e-01 -1.7816075788528424e-01 + -7.1905048871675215e-01 7.2400640817093143e-01 -2.4232478568609669e-01 + -8.5755217804200734e-01 7.5589730054456028e-01 -3.1074382565686759e-01 + -1.0131111724076332e+00 7.8052568555422219e-01 -3.7934689606370942e-01 + -1.1887032045143484e+00 7.9915618932253030e-01 -4.4260968143836515e-01 + -1.3857704481480575e+00 8.1276482500761338e-01 -4.9379192825048307e-01 + -1.6024785467936320e+00 8.2187505491043300e-01 -5.2641319704363498e-01 + -1.8335080121074965e+00 8.2674255473820191e-01 -5.3616650512331543e-01 + -2.0726401558942782e+00 8.2769095967791029e-01 -5.2067165156736273e-01 + -2.3150006518720283e+00 8.2515556688137826e-01 -4.7750355565848079e-01 + -2.5554144320593735e+00 8.1994542972356310e-01 -4.0593439665490100e-01 + -2.7634584619654192e+00 8.3522214286672780e-01 -3.5798425103147374e-01 + id 12440 + loc 8.8531845808029175e-01 7.6464784145355225e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0187865874786619e-01:3.6235739788056609e-01:5.3093595960842954e-01:2.7083212159669945e-01:1.0110835538126584e+00:3.5885917925943228e-01:1.6486154909759640e+00:5.0187363996127876e-01:2.0602177705948552e+00:3.4659880809951515e-01:2.7038170053261172e+00:4.7395155577605569e-01:3.1083933386874105e+00:3.5584285184058012e-01:3.6278064038089246e+00 + CVs 20 + 1.5956245052432191e-01 2.4917377974670424e-01 -1.5913670327887242e-01 + 3.2527778680607367e-01 5.0440255090181774e-01 -3.0730243937516111e-01 + 4.8100608634261421e-01 7.5278199142121038e-01 -4.6501970631225131e-01 + 6.2053118310333766e-01 9.8912246705446072e-01 -6.4137377751399571e-01 + 7.4343587135718814e-01 1.2125448826285745e+00 -8.3888954462867127e-01 + 8.4848333138398024e-01 1.4215850382616040e+00 -1.0600762198627851e+00 + 9.3321263738574067e-01 1.6136254334548632e+00 -1.3080144651892189e+00 + 9.9345343220779081e-01 1.7843473740149709e+00 -1.5861927459249787e+00 + 1.0227178407791253e+00 1.9272105133206134e+00 -1.8973022753308941e+00 + 1.0132330085250738e+00 2.0345960556399363e+00 -2.2408024852329884e+00 + 9.5909043061249022e-01 2.1001856282173121e+00 -2.6111196446779474e+00 + 8.6041494304585409e-01 2.1203840978878112e+00 -2.9982530535106959e+00 + 7.2827259208112394e-01 2.0964214834144932e+00 -3.3903796089080829e+00 + 5.8152616762031695e-01 2.0334885168248378e+00 -3.7793313711850556e+00 + 4.3772934675054004e-01 1.9401394485816237e+00 -4.1555447289001890e+00 + 3.1497945356642809e-01 1.8438016087622973e+00 -4.4875353119651633e+00 + 2.3404377085761013e-01 1.7994604433643966e+00 -4.7120767956806819e+00 + 1.8549037690010042e-01 1.8229181480400427e+00 -4.7991911738206978e+00 + 1.8642197603918614e-01 1.8052940114359770e+00 -5.0488966066510912e+00 + id 12441 + loc 6.4392608404159546e-01 3.0497097969055176e-01 372 + blend 0.0000000000000000e+00 + interp 4.1151904440681958e-01:4.1151492921637550e-01:6.0387656956909397e-02:3.9401266629582837e-01:8.9170521845814132e-01:2.8144723531414767e-01:1.1682134680070426e+00:4.0869586000204727e-01:1.7982962784076353e+00:4.0946173993619656e-01:2.2891464188341537e+00:3.2176709578074703e-01:2.9427914098081240e+00:3.6889029648732341e-01:3.3983714344704228e+00 + CVs 20 + 4.8979382919247122e-01 4.9447158734734065e-01 1.4964600969196207e-01 + 9.4456839077186838e-01 8.9129621186481534e-01 2.7827200867927138e-01 + 1.4031626164480180e+00 1.1917263896947257e+00 3.9197340148348969e-01 + 1.8381301575886493e+00 1.4020899327296432e+00 4.8659408394057613e-01 + 2.2200441862772720e+00 1.5678208126032505e+00 5.6851992989556788e-01 + 2.5093445871064284e+00 1.7792697472317267e+00 7.4618110698995332e-01 + 2.5461615746218889e+00 1.9881560060212555e+00 1.0883335470051609e+00 + 2.2746258535777617e+00 2.0771392742056367e+00 1.4984775949070028e+00 + 1.7449642648892980e+00 1.9986915623858235e+00 1.8797301339043062e+00 + 1.0378123145193305e+00 1.7226635011400502e+00 2.1704800739339367e+00 + 2.5380849173719100e-01 1.2304885790018256e+00 2.3317122973466975e+00 + -5.4007695985697302e-01 5.8281981959519003e-01 2.3513947706900034e+00 + -1.3870784712430109e+00 -4.9352904839499390e-02 2.2758206767953082e+00 + -2.3295872834440297e+00 -3.5818282557772896e-01 2.2781263964807454e+00 + -3.1895544996907743e+00 -1.3751108987659233e-01 2.5521082216044699e+00 + -3.8422930811919018e+00 4.1976894614661675e-01 3.0807854636144900e+00 + -4.2326105205388265e+00 1.1202817650672903e+00 3.7602457572464205e+00 + -4.4123733738891140e+00 1.7798434809579509e+00 4.4138902968643414e+00 + -4.8024069567632246e+00 2.3713512341390794e+00 4.9189305233256437e+00 + id 12442 + loc 4.7647735476493835e-01 5.8925259113311768e-01 416 + blend 0.0000000000000000e+00 + interp 4.9310272436444591e-01:4.3657437354486239e-01:2.8260222025968618e-01:2.7692331348365307e-01:1.0044813839244717e+00:2.6637070377811345e-01:2.3934280247530868e+00:4.9309779333720227e-01:3.0649973141382767e+00:3.2602210059541598e-01:3.7006465034737515e+00 + CVs 20 + 6.7843556080782064e-01 2.5318763257778171e-01 -8.1509526825525674e-02 + 1.1270771370652912e+00 3.9632772101805713e-01 -1.5769182140923407e-01 + 1.5193738120183800e+00 4.9506108194046644e-01 -2.1470763334212792e-01 + 1.9445195890451203e+00 5.8301030505832963e-01 -2.3972169855182748e-01 + 2.3944105862282394e+00 6.4855609166612704e-01 -2.2434773319032864e-01 + 2.8558324348519588e+00 6.8158760474329960e-01 -1.6040423705912465e-01 + 3.3141332488266553e+00 6.7532094884202321e-01 -4.1911602424402061e-02 + 3.7552611963501441e+00 6.2628159801472216e-01 1.3085755441899960e-01 + 4.1649371592724220e+00 5.3501287808774434e-01 3.5002106834399693e-01 + 4.5333050835681181e+00 4.0602798197090051e-01 6.0366094644250456e-01 + 4.8736531646201957e+00 2.3859243658049434e-01 8.8352383561729275e-01 + 5.2292547059630827e+00 1.1393088178256239e-02 1.1836121672347470e+00 + 5.6287743690660310e+00 -3.0698394537928064e-01 1.4716396053396101e+00 + 6.0400470823065886e+00 -7.1190199923541297e-01 1.6883954950512203e+00 + 6.4152828895280560e+00 -1.1614991433848174e+00 1.8060316686293185e+00 + 6.7445384437990183e+00 -1.6293660225982838e+00 1.8303302316110983e+00 + 7.0323133425753612e+00 -2.1065384802891498e+00 1.7657465621920720e+00 + 7.2735319748158291e+00 -2.5727141150655077e+00 1.6168513358725869e+00 + 7.4264163092698947e+00 -2.8599931689196096e+00 1.5061605550187305e+00 + id 12443 + loc 8.3418995141983032e-01 9.7464197874069214e-01 1085 + blend 0.0000000000000000e+00 + interp 3.3195975147537454e-01:2.4261345949149074e-01:6.4842565778776362e-01:2.9068820396563072e-01:1.4818954003538218e+00:3.3195643187785978e-01:2.4847766047054396e+00:2.7832664422502928e-01:3.0357389132085872e+00:2.9817320593184066e-01:3.8854483546143914e+00 + CVs 20 + -7.4299792546902124e-02 3.4688805670560230e-01 1.5508153456899187e-01 + -1.9665821874149614e-01 6.4584867226914144e-01 2.7646366350047880e-01 + -3.5028981513272678e-01 9.1616721557418135e-01 3.7907124848189749e-01 + -5.2355245786031268e-01 1.1607209169952051e+00 4.6818818843884069e-01 + -7.1402575220013653e-01 1.3714846535651324e+00 5.3798072017258636e-01 + -9.1717589966812629e-01 1.5428050617577023e+00 5.8616420959629822e-01 + -1.1301371093916974e+00 1.6723516532571361e+00 6.1157294180515875e-01 + -1.3521289626889135e+00 1.7577116895116907e+00 6.1111599780384696e-01 + -1.5726747748640253e+00 1.7932918348479983e+00 5.8459604181813363e-01 + -1.7674951655610955e+00 1.7786759744403029e+00 5.4330743829087158e-01 + -1.9177329683785649e+00 1.7295618119209979e+00 5.0655510674525139e-01 + -2.0199264373707972e+00 1.6728594819348737e+00 4.8876816569579468e-01 + -2.0702667145201583e+00 1.6402498175014433e+00 4.9262502633841265e-01 + -2.0560916407132090e+00 1.6675466696732939e+00 5.0152767335336312e-01 + -1.9642601213096877e+00 1.7828024884110292e+00 4.6721891508238184e-01 + -1.8063379312397365e+00 1.9220361984437289e+00 3.4471348135835322e-01 + -1.5955452562951895e+00 1.9558256470555579e+00 1.7391978730551949e-01 + -1.3617442062988685e+00 1.8248497730894395e+00 5.1711198912866685e-02 + -1.3713603166828356e+00 1.7064401743006461e+00 3.0837250221584561e-01 + id 12444 + loc 9.5897418260574341e-01 2.6880249381065369e-01 403 + blend 0.0000000000000000e+00 + interp 5.2989265484371739e-01:4.7100736859298908e-01:8.7405140541445436e-02:5.2713454285450856e-01:4.1977595208982499e-01:3.8573091439199059e-01:9.9865215322363576e-01:5.2988735591716896e-01:1.3005467567568703e+00:5.1097672949051409e-01:1.8841553134312048e+00:4.8514438972553792e-01:2.0085129523332297e+00:3.3712721103653143e-01:2.4045607158255629e+00:2.7704647768053542e-01:3.1103818683250357e+00:3.2457864264112840e-01:3.9208259889717620e+00 + CVs 20 + -2.8027328232379807e-02 7.1569570319603149e-03 6.5096252751262962e-02 + -6.3921427392006791e-02 3.0772486203866904e-02 1.4051529434642523e-01 + -1.0614857980875946e-01 7.0096574039917481e-02 2.2571485930903121e-01 + -1.4793850189683794e-01 1.1954800007005355e-01 3.1929384200712996e-01 + -1.8751429945998038e-01 1.7952102856706781e-01 4.2292314672459957e-01 + -2.2077610436138931e-01 2.5001675962950642e-01 5.3893564456589438e-01 + -2.4134933832705369e-01 3.3021272623680475e-01 6.6989753208764746e-01 + -2.4061174283976708e-01 4.1786736938958535e-01 8.1777577137569701e-01 + -2.0830557475414574e-01 5.0798010604254973e-01 9.8196362107612434e-01 + -1.3581645741389031e-01 5.9310529631776010e-01 1.1578292781338848e+00 + -2.0515906312421228e-02 6.6613817528883235e-01 1.3375563207771468e+00 + 1.3440508422635927e-01 7.2299585221013807e-01 1.5135244641666405e+00 + 3.2349513716982481e-01 7.6228879604234256e-01 1.6798590530854205e+00 + 5.4095755185819205e-01 7.8470382043762132e-01 1.8315243223916111e+00 + 7.8101306235283019e-01 7.9365485813753356e-01 1.9637307034681144e+00 + 1.0391553819808950e+00 7.9379287585799152e-01 2.0723529777227205e+00 + 1.3129477027818068e+00 7.8788410932303976e-01 2.1524457199268681e+00 + 1.6005432804409629e+00 7.7495851812594174e-01 2.1977627797210144e+00 + 1.7338747716410183e+00 7.6972708755643549e-01 2.3074596190214853e+00 + id 12445 + loc 5.2216970920562744e-01 8.4287863969802856e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4637587559495870e-01:2.8765698037231768e-01:9.9786930611652536e-01:5.4637041183620283e-01:1.6280402122454520e+00:4.4538184495147382e-01:2.0112386435407390e+00:3.5445804453188234e-01:2.6276246360815798e+00:4.4509073574333863e-01:3.4114732848481522e+00:2.9372676468136544e-01:3.9822358422469630e+00 + CVs 20 + 9.1794529966962884e-02 5.2459137759648677e-01 5.3303548236823650e-01 + 2.1502082543370057e-01 8.9676624324050613e-01 8.2664215014128239e-01 + 3.5390952287015276e-01 1.2067196404190530e+00 1.0365556720092646e+00 + 4.9774699290366103e-01 1.4840684274182214e+00 1.2230541656328657e+00 + 6.4003625624395588e-01 1.7207962850558476e+00 1.3865577832750371e+00 + 7.6807754542587681e-01 1.9080155688995477e+00 1.5279204817444012e+00 + 8.6387604940724072e-01 2.0421402378221751e+00 1.6503232011243636e+00 + 9.0506779321012831e-01 2.1338446363195591e+00 1.7711091501062213e+00 + 8.7476141220138626e-01 2.2299685534660583e+00 1.9374906367416778e+00 + 8.4195294354890882e-01 2.4239854172886401e+00 2.1683384339808920e+00 + 9.2458717031333715e-01 2.6657962507950570e+00 2.3262765758466966e+00 + 1.0620047256545713e+00 2.8054709710056991e+00 2.3502122971887771e+00 + 1.1851779604700590e+00 2.8237661629510664e+00 2.2969186305371885e+00 + 1.2819673316086226e+00 2.7470397070418620e+00 2.2044607049283784e+00 + 1.3609253585247920e+00 2.6140983615044995e+00 2.0802516721412379e+00 + 1.4374951891569394e+00 2.4745065140433256e+00 1.9094178195764335e+00 + 1.5208156591583375e+00 2.3077535706000836e+00 1.7154733955303567e+00 + 1.6082211005390277e+00 2.0200358837272190e+00 1.6475351582035231e+00 + 1.6904821699369474e+00 1.5601135117748781e+00 1.8599899937375393e+00 + id 12446 + loc 4.8676991462707520e-01 3.3731275796890259e-01 411 + blend 0.0000000000000000e+00 + interp 5.3163360938873261e-01:4.0912368675939864e-01:5.7900935322240055e-02:5.3162829305263870e-01:6.6930743214399147e-01:2.7001193730028972e-01:1.3748070217040933e+00:4.1650905281246797e-01:1.9999530051037837e+00:3.8932850441223898e-01:2.3590856636288784e+00:4.1408514823434861e-01:2.9185111518390601e+00:3.8888932784484870e-01:3.5264693601924875e+00 + CVs 20 + -8.1298059506752215e-02 1.4249276975919109e-01 -7.2855928368626666e-01 + -1.6107701030473981e-01 1.8157116329644007e-01 -1.2943248444288893e+00 + -2.1793503821628493e-01 1.8180661285797273e-01 -1.8281986656279632e+00 + -2.4535495886457442e-01 1.6212498989415669e-01 -2.3765219822186965e+00 + -2.4439857219200301e-01 1.1855831119788351e-01 -2.9232204508605015e+00 + -2.2273341522036083e-01 5.0919264167213818e-02 -3.4524335249093099e+00 + -1.8993479763140786e-01 -3.9644305819606540e-02 -3.9487007265593865e+00 + -1.5422843864906852e-01 -1.5213493891631114e-01 -4.3993232689030775e+00 + -1.2227399770279468e-01 -2.8391879996335967e-01 -4.7989178318899164e+00 + -9.8951100081327237e-02 -4.3037112278984035e-01 -5.1479493955758002e+00 + -8.4960104285974059e-02 -5.8638424355137286e-01 -5.4520379352541202e+00 + -7.7358989332869554e-02 -7.4859754182267180e-01 -5.7228074555486232e+00 + -7.3296086611302436e-02 -9.1726465407407387e-01 -5.9734851080037892e+00 + -7.0868905552848804e-02 -1.0952319770727552e+00 -6.2128920663288021e+00 + -6.9369852575087321e-02 -1.2841570878493025e+00 -6.4431130042096800e+00 + -7.1197939267187871e-02 -1.4844920209262775e+00 -6.6626548892482456e+00 + -7.9554753584657356e-02 -1.6985472619279318e+00 -6.8674640377254637e+00 + -8.9647758388393783e-02 -1.9309087434956638e+00 -7.0456331512965686e+00 + -1.0197216558452610e-01 -2.1648165875158214e+00 -7.1202264149206034e+00 + id 12447 + loc 2.1695657074451447e-01 6.8316739797592163e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1988494233857332e-01:3.0921881467057932e-01:3.8774996532380157e-01:3.2812524183454689e-01:9.9994235072077231e-01:4.1988074348914994e-01:1.6300026848257265e+00:3.3391367001466665e-01:2.3161062322153132e+00:4.0947259027599853e-01:3.0000034612126294e+00:3.1161592929769860e-01:3.5377953647728959e+00 + CVs 20 + 6.1977547503880896e-02 3.3295550006281682e-01 -2.6700997004896809e-01 + 1.7249890669545154e-01 6.7979315986568911e-01 -5.3614791061356837e-01 + 2.9410876413933290e-01 1.0488561133280403e+00 -8.0956774296041278e-01 + 4.0696581017204891e-01 1.4382571833690170e+00 -1.0910900321752550e+00 + 5.0169642476978382e-01 1.8405651236958742e+00 -1.3896642931491985e+00 + 5.6958400880648652e-01 2.2443588242064099e+00 -1.7157125330564380e+00 + 6.0575876022297603e-01 2.6350082200522751e+00 -2.0795958281994524e+00 + 6.1256881641945582e-01 2.9933900901257040e+00 -2.4902437299245759e+00 + 6.0387434970308873e-01 3.3008780670220723e+00 -2.9457208341909240e+00 + 6.0581724127973791e-01 3.5538195839371016e+00 -3.4246985261378446e+00 + 6.4566744559886968e-01 3.7592114664445755e+00 -3.9116775191237432e+00 + 7.4343578864593440e-01 3.9070191933986624e+00 -4.4259995769654408e+00 + 9.1270573810376610e-01 3.9625014720084195e+00 -4.9838769326097774e+00 + 1.1546436494998136e+00 3.9022004913611394e+00 -5.5444274292165545e+00 + 1.4547989138010877e+00 3.7373416057653670e+00 -6.0550246203287568e+00 + 1.7850290637813999e+00 3.4799249811036246e+00 -6.5129243793378313e+00 + 2.0944998772006964e+00 3.1367797588705466e+00 -6.9448323397654832e+00 + 2.3270676126275460e+00 2.7545628274190377e+00 -7.3485510483366756e+00 + 2.4821662159708811e+00 2.4554491335258986e+00 -7.6354452071353265e+00 + id 12448 + loc 9.4592410326004028e-01 7.1581654250621796e-02 1048 + blend 0.0000000000000000e+00 + interp 3.9884498404591012e-01:2.2612106214892161e-01:6.1460528232551925e-01:3.4261775850976067e-01:1.8288184571118806e+00:3.9884099559606967e-01:2.2971358713759837e+00:3.4655578757092942e-01:3.0015849475336465e+00:2.0208327660250766e-01:3.5591099998356057e+00 + CVs 20 + -2.6917489825530383e-02 3.5305228131999017e-01 6.1625218767496470e-01 + -8.7992194780218080e-02 6.9639522149264799e-01 1.1676915944413198e+00 + -1.9546073344586129e-01 1.0638827591224675e+00 1.6467076129008338e+00 + -3.7316832444956860e-01 1.4759313154229181e+00 2.0526056863947630e+00 + -6.6578518499880601e-01 1.9187046586553360e+00 2.3647214577977342e+00 + -1.0955740730891974e+00 2.3383003442923860e+00 2.5696080153900485e+00 + -1.6590358494384860e+00 2.6496172828998001e+00 2.6843763183366578e+00 + -2.3152096463417626e+00 2.7477161745051952e+00 2.7215590000547105e+00 + -3.0090049475389513e+00 2.5648923562602834e+00 2.6603636977759209e+00 + -3.6613664396128041e+00 2.0762278844153861e+00 2.4885740681772646e+00 + -4.1013304183223447e+00 1.3462495838116830e+00 2.1221446433427547e+00 + -4.1787074642097259e+00 5.8553845335048460e-01 1.5094725618819598e+00 + -3.8763559868532256e+00 7.2813557013017449e-02 7.1844134716269781e-01 + -3.3275400037221221e+00 7.8967198847309517e-03 -6.6217149869549297e-02 + -2.7354648158962180e+00 3.7348132207990692e-01 -6.5423173326070305e-01 + -2.2515156621003203e+00 1.0080044638563503e+00 -9.3067319534088866e-01 + -2.0594082753184804e+00 1.7080920698950353e+00 -7.0599023347556944e-01 + -2.5553501002613439e+00 1.8019288011999861e+00 1.3009590000106919e-01 + -2.4896395091173260e+00 2.3195234928554669e+00 4.8786102486344951e-01 + id 12449 + loc 3.7863934040069580e-01 5.7520961761474609e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1092317118360883e-01:2.8330613746345307e-01:9.5014248824692782e-02:2.6688888658813947e-01:1.0792244708662613e+00:2.9366283681783112e-01:1.9842628243194298e+00:2.6603181157783751e-01:2.6323043144217513e+00:4.1091906195189704e-01:3.3773320192321092e+00 + CVs 20 + 1.1684255550038856e-01 3.7703043023517435e-01 -3.2490737083937582e-01 + 2.6595843890682791e-01 7.5869753612417867e-01 -6.6080910183557118e-01 + 4.2845307451206954e-01 1.1459856094136256e+00 -1.0045061613890591e+00 + 5.9597877296572266e-01 1.5304102484738775e+00 -1.3462118794552671e+00 + 7.5011847496805562e-01 1.8727524347367364e+00 -1.6965007671423524e+00 + 8.5434852367702552e-01 2.1107681101266005e+00 -2.0826633349249954e+00 + 8.7897837025386871e-01 2.2019306614006631e+00 -2.4963625128265141e+00 + 8.0998167905816276e-01 2.1279814098305501e+00 -2.8739696366071321e+00 + 6.6018129129098413e-01 1.9334698549497666e+00 -3.1457029968063668e+00 + 4.7275482775277555e-01 1.6969589013978323e+00 -3.3314746603565424e+00 + 2.8732829451492276e-01 1.4312539282871299e+00 -3.4945984801044321e+00 + 1.3684447746297063e-01 1.0953259129137389e+00 -3.6922393798565811e+00 + 5.1253045751578283e-02 6.6317505058000303e-01 -3.9543110442743568e+00 + 5.3370359670374318e-02 1.8609571424758328e-01 -4.2950345657681392e+00 + 1.4094491331933079e-01 -2.3588568107493357e-01 -4.7259447662305716e+00 + 2.8879102126315931e-01 -5.1604116883459716e-01 -5.2477161354070745e+00 + 4.5944143533673876e-01 -5.8772359857630674e-01 -5.8311806641488504e+00 + 5.8987642380480920e-01 -4.6372780386063128e-01 -6.3048019433475400e+00 + 6.3248773763667221e-01 -2.9438092877772010e-01 -6.4336298382498027e+00 + id 12450 + loc 9.8722016811370850e-01 2.4914339184761047e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7572180730749299e-01:3.1375285154851373e-01:4.4648144344131557e-03:2.1568427055721465e-01:9.9111255857057146e-01:3.7480593197380074e-01:1.4176615657204843e+00:3.7571805008941994e-01:1.9748691831193208e+00:2.9131756390241154e-01:2.4463544866925813e+00:2.9921842273678317e-01:3.0032581002520304e+00 + CVs 20 + -1.1852087831906929e-01 3.7956188010640679e-01 1.3092915810105230e-01 + -2.2268958379405837e-01 7.7147422303848001e-01 2.8310049003224647e-01 + -2.9832156327958670e-01 1.1770515169020808e+00 4.4051154464949843e-01 + -3.3052484123484893e-01 1.5943145025417980e+00 5.7677441312697220e-01 + -3.1405110064187591e-01 2.0113640486016635e+00 6.7777979900350593e-01 + -2.7203644634147522e-01 2.3956025038234627e+00 7.8572376691382884e-01 + -2.4966247538523872e-01 2.6886091572479165e+00 9.7310496424625992e-01 + -2.7936694092025582e-01 2.8500411317969156e+00 1.2513141736938505e+00 + -3.7800986924696645e-01 2.8743595860228659e+00 1.5771663812335230e+00 + -5.5607675635556941e-01 2.7700385876796725e+00 1.8866912897849908e+00 + -8.1308392740591517e-01 2.5700679138776872e+00 2.1291763218434769e+00 + -1.1265378233841568e+00 2.3154510839289726e+00 2.2787242490284148e+00 + -1.4536502356824150e+00 2.0325145566689402e+00 2.3385767488230780e+00 + -1.7385797028557464e+00 1.7233123954257370e+00 2.3214239109163461e+00 + -1.9104411401435746e+00 1.3912084734891412e+00 2.2376091518823289e+00 + -1.9270518852825091e+00 1.0668091913839302e+00 2.0966280911724082e+00 + -1.7660716309690301e+00 8.3015761164481694e-01 1.8992685091207855e+00 + -1.4581880467749928e+00 8.0288345038568354e-01 1.7184141996462685e+00 + -1.1964802831713539e+00 5.8881548174474418e-01 1.4510944300916684e+00 + id 12451 + loc 5.1740199327468872e-02 1.7009226977825165e-01 397 + blend 0.0000000000000000e+00 + interp 4.6136514872185569e-01:3.5119781072093353e-01:1.3278164658046376e-01:4.6136053507036850e-01:7.2986340450560627e-01:2.9762456709906493e-01:1.2014970049238745e+00:2.4951116582760205e-01:2.0246038074502399e+00:4.3911765224854993e-01:2.7357184056702151e+00:3.1998324680145546e-01:3.1986498284677358e+00 + CVs 20 + -2.7341526268861083e-01 2.8581967138173103e-01 -1.0462894976764630e+00 + -4.5721402600609673e-01 3.5071551880296054e-01 -1.7343467674456718e+00 + -5.8681981334992361e-01 3.1825319968026794e-01 -2.3424629594401254e+00 + -6.6628465060978670e-01 2.4525249226470791e-01 -2.9765442794406121e+00 + -6.9349034539203624e-01 1.3643548385216253e-01 -3.6162077779506436e+00 + -6.7866176355215158e-01 2.7826478419212819e-03 -4.2450001270103215e+00 + -6.4184149997969875e-01 -1.4305792206876722e-01 -4.8541720768879904e+00 + -6.0427789839761747e-01 -2.9614498925279031e-01 -5.4438454827640221e+00 + -5.8085063390535296e-01 -4.6857382652471324e-01 -6.0217715404859637e+00 + -5.7908259489459746e-01 -6.8918040669630032e-01 -6.5886227729624451e+00 + -6.0589978576653725e-01 -9.8424720522770448e-01 -7.1269859291979554e+00 + -6.6671644882439274e-01 -1.3580947884962629e+00 -7.6073470216655670e+00 + -7.5411847168541768e-01 -1.7996789068603611e+00 -8.0068660498697888e+00 + -8.4894963972299109e-01 -2.2954034564484465e+00 -8.3186721249775513e+00 + -9.3657747573818417e-01 -2.8290679459645931e+00 -8.5410747360130017e+00 + -1.0106129999568316e+00 -3.3769483629142840e+00 -8.6736406034485665e+00 + -1.0656216912829963e+00 -3.9142936440462428e+00 -8.7198774505762380e+00 + -1.0950137305942800e+00 -4.4245726034671939e+00 -8.6879157408933612e+00 + -1.0980310700752609e+00 -4.8856448756095947e+00 -8.5827275480103786e+00 + id 12452 + loc 7.0972889661788940e-01 3.4584674239158630e-01 1075 + blend 0.0000000000000000e+00 + interp 3.9632982199782524e-01:3.9632585869960529e-01:2.9909769937450137e-01:2.8958630814979752e-01:9.9774300894326762e-01:2.8911421749951216e-01:1.6745973047257594e+00:2.9765818861037280e-01:2.1768264887368631e+00:3.0307114708703525e-01:2.9942640163301810e+00:2.5198955224948999e-01:3.8005160745530362e+00 + CVs 20 + -2.5148886512140547e-02 2.1795041274708027e-01 2.8626547997088136e-01 + -7.1443277023772483e-02 4.0297541220565014e-01 5.3880794576080804e-01 + -1.1573259259532237e-01 5.7106274208476215e-01 7.7348806916519552e-01 + -1.4931698335755111e-01 7.2954392516258126e-01 1.0017806921323056e+00 + -1.8251905866557055e-01 8.8188240392084205e-01 1.2410831261138180e+00 + -2.1611270695263018e-01 1.0287311048024637e+00 1.4993054734565885e+00 + -2.3610930350126125e-01 1.1699133235801367e+00 1.7665463904464398e+00 + -2.2892435631773567e-01 1.3072303272489929e+00 2.0237836782759286e+00 + -1.9445289067814775e-01 1.4465315024559662e+00 2.2524366346213878e+00 + -1.4095672174577145e-01 1.5990473301007555e+00 2.4450439857219792e+00 + -7.4960346203966743e-02 1.7712875644769288e+00 2.6213000562698014e+00 + 4.7868464029732216e-04 1.9458316220721688e+00 2.8209253882422476e+00 + 9.2468824937945504e-02 2.0820427996274518e+00 3.0711085319908067e+00 + 2.1243978366284755e-01 2.1404329437362652e+00 3.3701354104352239e+00 + 3.4847898981902348e-01 2.1157288243237731e+00 3.6919121216897670e+00 + 4.5792999801409850e-01 2.0478523895978396e+00 3.9966972019105045e+00 + 5.0223879775750180e-01 1.9943058527498205e+00 4.2540568615815761e+00 + 5.1275330351374970e-01 1.9579745025894697e+00 4.4709165280752270e+00 + 7.5657592953781583e-01 1.7412584969364699e+00 4.5930001374298994e+00 + id 12453 + loc 4.0939375758171082e-01 6.2453347444534302e-01 406 + blend 0.0000000000000000e+00 + interp 6.6628318230862293e-01:2.8975710527628440e-01:5.6756043052919147e-02:4.2391811231264376e-01:8.9540238094828317e-01:3.5959438422327195e-01:1.4964671733066710e+00:6.6627651947679989e-01:1.9264658619920392e+00:6.6570533262876208e-01:3.1229883594947485e+00:3.6512722425235972e-01:3.5959080016851201e+00 + CVs 20 + 3.3511415454173810e-01 2.7303105616469003e-01 -1.3040824396196593e-01 + 5.7269546951502059e-01 4.7048556880175219e-01 -2.2759483953445420e-01 + 8.0406560292485707e-01 5.8971076998132477e-01 -2.9162686880773475e-01 + 1.0643158092578635e+00 6.7889273333708344e-01 -3.2526593243035995e-01 + 1.3460470793844335e+00 7.3294472619020135e-01 -3.2786583872054076e-01 + 1.6407577892446430e+00 7.4707069580651231e-01 -3.0104681617849716e-01 + 1.9398327083605960e+00 7.1893047799119780e-01 -2.4722821437248585e-01 + 2.2354240448362410e+00 6.4981942639373969e-01 -1.6832477812651930e-01 + 2.5200286766816173e+00 5.4356253271661492e-01 -6.8765109146274039e-02 + 2.7874579183397481e+00 4.0659731581257497e-01 4.0110144354630506e-02 + 3.0367864752148082e+00 2.4912368039969879e-01 1.4557725359427748e-01 + 3.2738959609907221e+00 8.3727070929151770e-02 2.4538194309611860e-01 + 3.5076006585155413e+00 -7.7858679517927465e-02 3.4543644254056899e-01 + 3.7448123413655261e+00 -2.2641656364704388e-01 4.4500443757664365e-01 + 3.9901371379680994e+00 -3.5515388544548032e-01 5.3439042989910990e-01 + 4.2462891461425549e+00 -4.6102691100195359e-01 6.0702533077250098e-01 + 4.5135042071741243e+00 -5.4550263029777279e-01 6.6729984305918488e-01 + 4.7913512107106095e+00 -6.1079715886724628e-01 7.2463025800727199e-01 + 5.1205857418670000e+00 -6.0469762472204369e-01 8.7452159704227084e-01 + id 12454 + loc 7.4128413200378418e-01 6.0397225618362427e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0642304086281054e-01:3.4019088764198541e-01:5.5552503996286529e-01:3.6047256219589868e-01:1.4293105854962382e+00:5.0641797663240196e-01:1.9979986012691127e+00:3.7314536860401692e-01:2.4985128628702276e+00:5.0151033570517833e-01:3.0007439524795942e+00:3.2968159334702263e-01:3.4877157028139929e+00 + CVs 20 + 1.3992130384507223e-01 2.9682385236676179e-01 -5.4376601126035859e-02 + 2.9451891318750784e-01 5.9610719785707678e-01 -1.0055585764595582e-01 + 4.7310806387978360e-01 8.9367520138698908e-01 -1.5964167653993139e-01 + 6.8120973195993972e-01 1.1811898294777008e+00 -2.5054813843945523e-01 + 9.1994111598808292e-01 1.4475030221621057e+00 -3.8921233469691668e-01 + 1.1848413738501129e+00 1.6750321107747626e+00 -5.8902653489784418e-01 + 1.4641240585936373e+00 1.8414550796357583e+00 -8.5713028535394331e-01 + 1.7375465078844929e+00 1.9239859166700861e+00 -1.1912084236845049e+00 + 1.9751191292021402e+00 1.9046685262153935e+00 -1.5751631618891377e+00 + 2.1435327036093121e+00 1.7786192014857107e+00 -1.9765906675709330e+00 + 2.2220884474794049e+00 1.5589711956642909e+00 -2.3563049619482848e+00 + 2.2066092178370655e+00 1.2701568139417514e+00 -2.6832774697020692e+00 + 2.1011571654392678e+00 9.3837343887233227e-01 -2.9386388695957084e+00 + 1.9150326480874593e+00 5.8149062533900886e-01 -3.1140124567569716e+00 + 1.6581082516291055e+00 2.0855914586589130e-01 -3.2427296596082793e+00 + 1.3421513473740458e+00 -1.2397365491838919e-01 -3.4588556055074671e+00 + 1.0394725894466026e+00 -2.4693085571969875e-01 -3.8643791140111592e+00 + 8.7950513226062366e-01 -1.2999580593789917e-02 -4.2905643952200148e+00 + 8.0912636088646894e-01 2.2184727700691131e-01 -4.3524132146824668e+00 + id 12455 + loc 3.5918968915939331e-01 2.5720959901809692e-01 409 + blend 0.0000000000000000e+00 + interp 5.1150422134049722e-01:3.6985140919883475e-01:4.9326225090624165e-01:2.9021866532379520e-01:1.5145271281839983e+00:5.1149910629828388e-01:2.0522389960946010e+00:4.3192878842343219e-01:2.6994723076211731e+00:2.9319018794267898e-01:3.1863442126464356e+00:3.9580687659330205e-01:3.9801039332529315e+00 + CVs 20 + -1.9519226077791918e-01 1.8956693806942304e-01 -3.1471842131590222e-01 + -3.9462113153920342e-01 3.2841985490259384e-01 -5.7211923986108149e-01 + -5.9248564197559805e-01 4.3956481180788143e-01 -8.1989680824288269e-01 + -7.8250199111037999e-01 5.2886831332707196e-01 -1.0686929068305131e+00 + -9.6614723790518564e-01 5.9214355759428439e-01 -1.3158359098178447e+00 + -1.1456934689370077e+00 6.3009775897600440e-01 -1.5650173350071610e+00 + -1.3191974232425170e+00 6.5360034027765723e-01 -1.8216562372429912e+00 + -1.4800781370634561e+00 6.7629652299666720e-01 -2.0895026089182291e+00 + -1.6190999606818099e+00 6.9950309940919664e-01 -2.3729346623811338e+00 + -1.7283207525217654e+00 7.1632051911378269e-01 -2.6770296640419082e+00 + -1.8024925641128207e+00 7.2388062407158826e-01 -3.0054518961588936e+00 + -1.8403962461114785e+00 7.1924753309703071e-01 -3.3636563175614462e+00 + -1.8462615875109789e+00 6.8720577105152381e-01 -3.7606761694992259e+00 + -1.8217381908552348e+00 6.0304117055705508e-01 -4.1993317907956218e+00 + -1.7557041195344167e+00 4.5150629552168065e-01 -4.6649356919550602e+00 + -1.6290677378901544e+00 2.3309321774313529e-01 -5.1253774731970987e+00 + -1.4315996377597933e+00 -5.2438483086434839e-02 -5.5350280484657421e+00 + -1.1667410903601607e+00 -4.1505296489445431e-01 -5.8382272739157797e+00 + -8.3156943735618361e-01 -8.9057359664029034e-01 -5.9744003463937343e+00 + id 12456 + loc 7.4037760496139526e-01 4.6181651949882507e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5414590026204418e-01:3.4784919616283216e-01:4.6129883887186585e-01:2.7120422188475291e-01:1.0199890474171691e+00:3.5414235880304157e-01:1.9447689415059588e+00:2.8892977545980131e-01:2.3418968173159844e+00:2.9077507582008955e-01:3.0017886942193197e+00:2.9353045511759579e-01:3.6804796368397668e+00 + CVs 20 + -1.0083062291466251e-02 4.0619987202346464e-01 -3.5338280859423304e-01 + -3.8206183754683348e-02 7.4525478591128780e-01 -5.6623860232992018e-01 + -7.5302379592315186e-02 1.0712336748396767e+00 -7.3768084964516989e-01 + -1.2868633049582878e-01 1.4174134606342572e+00 -8.9798556621346326e-01 + -2.0887440832999038e-01 1.7742730271781206e+00 -1.0252440980841115e+00 + -3.3087815094326378e-01 2.1314170279998255e+00 -1.0883809350418878e+00 + -5.2197717818555578e-01 2.4699176401295682e+00 -1.0308919099846747e+00 + -8.0559609863906001e-01 2.6995260433648376e+00 -7.4854730594104579e-01 + -1.0609612900414154e+00 2.6108974648785805e+00 -2.7647032438806973e-01 + -1.1504019646020760e+00 2.2860742089664319e+00 9.4834375435302820e-02 + -1.1414994870942727e+00 1.9040114508099366e+00 3.2465218928128559e-01 + -1.0910666681201473e+00 1.5120947936821389e+00 4.6166503247653812e-01 + -1.0266459667253729e+00 1.1402947375035739e+00 5.5186616630751972e-01 + -9.5398158550931611e-01 8.3186506042693598e-01 6.5772673281637395e-01 + -8.8136631794207687e-01 6.9938075247459652e-01 8.5993743838864123e-01 + -8.8602544574272624e-01 9.8971014208825070e-01 1.1048270817612291e+00 + -1.1431154189046711e+00 1.6628190668922931e+00 6.5325027443857087e-01 + -1.2646237973813013e+00 1.5621517326409395e+00 -6.2940801473336472e-02 + -1.3458956946224654e+00 1.7213537297464483e+00 -6.2860805074977821e-02 + id 12457 + loc 1.5197548270225525e-01 3.5411635041236877e-01 1084 + blend 0.0000000000000000e+00 + interp 5.2748611881382879e-01:3.0725159093895538e-01:9.9822374249951551e-03:3.3691197668607570e-01:7.1847599865706169e-01:2.7891262813363260e-01:1.1436506649252134e+00:5.2748084395264072e-01:2.1088227697725825e+00:2.9723389483695428e-01:2.7334544448737828e+00:2.7441839899430509e-01:3.2918745234774569e+00 + CVs 20 + 4.2857413166728342e-01 4.0753164420402443e-01 3.0760097435113964e-01 + 7.6653814281281984e-01 7.3415526168273737e-01 5.8359525346877161e-01 + 1.0940243306321586e+00 1.0364888819711831e+00 8.5447705213630043e-01 + 1.4321910009058749e+00 1.3408822605766559e+00 1.1477895945864796e+00 + 1.7478779509968678e+00 1.6444426466188613e+00 1.4910407815171380e+00 + 1.9961149104139020e+00 1.9347940913536439e+00 1.9002224669412706e+00 + 2.1271967016549800e+00 2.1892758207647218e+00 2.3664719268535048e+00 + 2.0930629264485514e+00 2.3764172328537434e+00 2.8482631355306589e+00 + 1.8709156742258273e+00 2.4575495744386089e+00 3.2650682815595178e+00 + 1.5169650196384035e+00 2.4131982340755753e+00 3.5393721105296794e+00 + 1.1358494694601706e+00 2.2480511130276124e+00 3.6716373211153548e+00 + 8.1615876282345368e-01 1.9583637131346043e+00 3.7157478462577807e+00 + 5.9868438206869301e-01 1.5774647737831000e+00 3.7158559861950571e+00 + 4.1499184652886367e-01 1.1881963423773798e+00 3.6706084853558223e+00 + 1.7830026610753691e-01 8.6739850505980987e-01 3.5587173543676545e+00 + -1.1498097146063224e-01 7.0953262867714639e-01 3.4017875724612985e+00 + -3.8985874352804856e-01 7.7553345265144813e-01 3.2750246076508955e+00 + -5.4296608932207446e-01 9.8356337633551383e-01 3.2303272674371155e+00 + -7.6425775339682356e-01 1.0338548576093254e+00 3.1488036079439250e+00 + id 12458 + loc 8.1416958570480347e-01 3.8264006376266479e-01 416 + blend 0.0000000000000000e+00 + interp 3.6873911087967215e-01:2.5896059657470688e-01:5.0402283964196226e-01:3.4190947615384049e-01:1.4424301603287968e+00:2.6090798447497859e-01:2.1284037701402481e+00:3.1673970417623870e-01:3.0943289761916342e+00:3.6873542348856336e-01:3.7964700300412177e+00 + CVs 20 + -5.0372080728331325e-01 7.7885512021184947e-02 1.4212164365475585e-01 + -8.0150802267381549e-01 7.3358234612016154e-02 2.7875220788050920e-01 + -1.0668955286965942e+00 4.4046729711628929e-02 4.1822773218995402e-01 + -1.3553869586437106e+00 3.2180214287086117e-02 5.4148262300324823e-01 + -1.6658667764445916e+00 3.3712663149272015e-02 6.4744927578780964e-01 + -1.9981269387656400e+00 4.3034112526306845e-02 7.3548585684357159e-01 + -2.3493211715370563e+00 5.6095135755221737e-02 8.0144152722237905e-01 + -2.7142140636382006e+00 7.1431504229817033e-02 8.4167247493041675e-01 + -3.0892586423202935e+00 8.8219676105122380e-02 8.5812236051523683e-01 + -3.4708423910516961e+00 1.0641821768771731e-01 8.5382741775754423e-01 + -3.8431958415924834e+00 1.3741796565514619e-01 8.2165073030078462e-01 + -4.1785443356423499e+00 2.0673843407622816e-01 7.4397967273053167e-01 + -4.4770727622758120e+00 3.2057672236703816e-01 6.1355432634102103e-01 + -4.7841427734369271e+00 4.3662771082441076e-01 4.5934279077161477e-01 + -5.1277109467784374e+00 5.1397385622655789e-01 3.2023514854945334e-01 + -5.4952873171371053e+00 5.5139187591549987e-01 1.9332883605015527e-01 + -5.8676010817712489e+00 5.5663772262426559e-01 5.5617595448045232e-02 + -6.2312306172978404e+00 5.2658542126018393e-01 -9.2727955390638495e-02 + -6.4716045133085007e+00 4.4632981354411472e-01 -7.0873205258616956e-02 + id 12459 + loc 8.7522909045219421e-02 7.4166095256805420e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0279544236671292e-01:3.1555785066008757e-01:9.6397399332402833e-01:5.0279041441228922e-01:1.5980383336547597e+00:3.1789757977871341e-01:2.1272671991109489e+00:4.6232223066485750e-01:3.0790488283632058e+00:3.0793856772788636e-01:3.9358316123629562e+00 + CVs 20 + 2.8724242707185954e-01 5.2911098381012278e-01 -3.1449915088345537e-01 + 5.5152082835637672e-01 1.0906716023294334e+00 -5.7986016624030046e-01 + 8.1687929242937329e-01 1.6727193926795023e+00 -7.5707031374212519e-01 + 1.1067048783948350e+00 2.2499276078345209e+00 -8.4544450201350574e-01 + 1.4508619363998034e+00 2.7932509431509627e+00 -8.6718354155468114e-01 + 1.8850311304052998e+00 3.2737913161742478e+00 -8.5258897197274464e-01 + 2.4383927727632648e+00 3.6504094927488007e+00 -8.2736347595207471e-01 + 3.1088681634484319e+00 3.8645990218737052e+00 -8.0334585929414670e-01 + 3.8630181165853452e+00 3.8520036154265669e+00 -7.9104945793088088e-01 + 4.6366605809480577e+00 3.5564995722193444e+00 -8.0715267929839662e-01 + 5.3151963251785777e+00 2.9610670828527974e+00 -8.2927228671806896e-01 + 5.7704655066706554e+00 2.1458963492607754e+00 -7.7592414190571479e-01 + 5.9552913802681005e+00 1.2625330657783103e+00 -5.8387843217110413e-01 + 5.9112664174607970e+00 4.3999133113539124e-01 -2.7183138555259612e-01 + 5.7151418600452892e+00 -2.1913960461961757e-01 2.3694046717673140e-02 + 5.3960895526245105e+00 -6.0469911204749072e-01 -3.6294513017932462e-02 + 4.8784838998941948e+00 -1.9828008949072646e+00 8.2365501524397589e-02 + 5.3917463052684473e+00 -1.7543965883526258e+00 5.6907242016476278e-01 + 5.5451909981537515e+00 -1.2801588578533387e+00 8.5953496494852755e-01 + id 12460 + loc 3.1200411915779114e-01 1.5919840335845947e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1405986335798247e-01:3.1405672275934893e-01:3.3347461343683960e-01:2.6719115709498120e-01:1.3411903174118585e+00:2.7489896606830766e-01:2.4244989878029006e+00:2.6381272456960764e-01:3.3595479987115606e+00 + CVs 20 + -2.7303625586331953e-01 3.1303874107668822e-01 -3.3433148787605366e-02 + -5.4281726089383064e-01 6.4580922450762657e-01 -8.2680974290522874e-02 + -8.1138550894523376e-01 1.0109894019850827e+00 -1.3370080309754695e-01 + -1.0567224904956840e+00 1.4175509654395682e+00 -1.7085340213057998e-01 + -1.2549374407357539e+00 1.8416487367221850e+00 -1.8471403636620809e-01 + -1.4405248230438068e+00 2.2169841810622524e+00 -1.8481369336974762e-01 + -1.6698917568593077e+00 2.4792993047113341e+00 -1.9585983707407495e-01 + -1.9596233879696083e+00 2.6210572430308146e+00 -2.4349251580525810e-01 + -2.2863045660063337e+00 2.6552376270319100e+00 -3.5228908492675726e-01 + -2.5976127072741213e+00 2.5994184055768756e+00 -5.4073514725955274e-01 + -2.8421978651660780e+00 2.4925271576835888e+00 -8.0938534438887966e-01 + -2.9962341860469457e+00 2.3785685513041726e+00 -1.1339288280816142e+00 + -3.0738879017795573e+00 2.2747895110843790e+00 -1.4860036668499794e+00 + -3.0909681586435025e+00 2.1630721874724319e+00 -1.8501639025058294e+00 + -3.0446364493672444e+00 2.0092755284322452e+00 -2.2123073946894012e+00 + -2.9218447059247303e+00 1.7968477146619182e+00 -2.5478717636125308e+00 + -2.6892665979612107e+00 1.5369427571642253e+00 -2.8006891233561033e+00 + -2.3505214269554902e+00 1.3123993103899279e+00 -2.9041780609841776e+00 + -2.0492581047936356e+00 1.1962406363361731e+00 -2.9751567930376881e+00 + id 12461 + loc 8.2533168792724609e-01 8.8639616966247559e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8708096793841656e-01:2.5361137807735834e-01:1.6175976584245877e-01:3.7952631308444246e-01:8.2326675523383086e-01:3.1155541237830614e-01:1.5447535596266579e+00:3.8707709712873722e-01:2.3175921867966811e+00:2.3800448332457105e-01:3.0187278218548799e+00 + CVs 20 + 2.6664401546768312e-02 3.9820208137423385e-01 -2.1606930950333345e-01 + 3.0812751859415528e-02 7.7217950375530731e-01 -3.9307492103130481e-01 + 3.0216331612607152e-02 1.1463798300627408e+00 -5.5113110864506132e-01 + 4.3512664474364790e-02 1.5449408021353930e+00 -7.0934007282443534e-01 + 9.9036110976650937e-02 1.9854446910540358e+00 -8.8655486111539372e-01 + 2.3084968632057803e-01 2.4596041199114311e+00 -1.1151609135083520e+00 + 4.6087952851041386e-01 2.9196232973312126e+00 -1.4299860279584129e+00 + 7.8610150843021342e-01 3.3016566426577834e+00 -1.8428214734036685e+00 + 1.1843001678282190e+00 3.5576587076020001e+00 -2.3349721421732155e+00 + 1.6237738608867285e+00 3.6663454325467812e+00 -2.8697241693608637e+00 + 2.0656663214796227e+00 3.6345488861737598e+00 -3.4077922768358846e+00 + 2.4729768452761189e+00 3.4955787677167436e+00 -3.9125372590135061e+00 + 2.8384958776400429e+00 3.2980953988153257e+00 -4.3703911322784261e+00 + 3.1895208503366517e+00 3.0757783058929391e+00 -4.8032623619976658e+00 + 3.5347790487013926e+00 2.8312244177875026e+00 -5.2362847828059440e+00 + 3.8434319030634008e+00 2.5676857228854777e+00 -5.6686097210109310e+00 + 4.0830449373015005e+00 2.3084755130701446e+00 -6.1097693610576211e+00 + 4.2187268612171378e+00 2.0791655381419316e+00 -6.6196279420488873e+00 + 4.2131808342374750e+00 1.8965085759767333e+00 -7.2469814617286303e+00 + id 12462 + loc 7.4497342109680176e-01 6.8561804294586182e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2073709326975217e-01:2.7972140779020771e-01:6.1087305141483750e-02:3.3502487520998026e-01:7.7147640001688589e-01:4.2073288589881952e-01:1.1100058196771738e+00:3.0954091851273413e-01:2.0048498615651265e+00:3.2112309495217922e-01:2.8993801618806980e+00:3.0746205325335374e-01:3.5132128444123079e+00 + CVs 20 + 7.6714995232427752e-02 5.3813205021806898e-01 4.0884333960375041e-01 + 1.8345721232902665e-01 9.5305353004159554e-01 6.2241656934402301e-01 + 2.9994306424304434e-01 1.3206349727290070e+00 7.6668404006097002e-01 + 4.1752085208561718e-01 1.6611323326050318e+00 8.8529785646231551e-01 + 5.3522328145747577e-01 1.9615870350463289e+00 9.7523434917213503e-01 + 6.4639990661122704e-01 2.2052086087652927e+00 1.0304990023940350e+00 + 7.3758442285889969e-01 2.3744738916324213e+00 1.0472916573844797e+00 + 7.8771650068566945e-01 2.4573649145236480e+00 1.0389016263941131e+00 + 7.7294417403245519e-01 2.4631446792875682e+00 1.0496270529228695e+00 + 7.1553182781166647e-01 2.4577993018263991e+00 1.1139053853357443e+00 + 6.8682835724275149e-01 2.4791177442413082e+00 1.1634008051973983e+00 + 6.9745336479156395e-01 2.4734214986908807e+00 1.1404928979353235e+00 + 7.2628736790612702e-01 2.4013989590684934e+00 1.0566220675521141e+00 + 7.6266981313057158e-01 2.2525834236133786e+00 9.3627680875147801e-01 + 8.0574062116703393e-01 2.0318775645312765e+00 8.0711364687248732e-01 + 8.5759031585586831e-01 1.7600171195607368e+00 7.1420191029294955e-01 + 9.1713029022100390e-01 1.4615629371855023e+00 7.1594432900309424e-01 + 9.8649711131334250e-01 1.1153282371961470e+00 8.4222503195776011e-01 + 1.0719881535586591e+00 6.1280570438609572e-01 1.0469514005921010e+00 + id 12463 + loc 1.6108088195323944e-01 7.4607723951339722e-01 411 + blend 0.0000000000000000e+00 + interp 4.8440805297084610e-01:3.8338493312258320e-01:5.0441281339551913e-01:3.0036490486970169e-01:1.1758460196399456e+00:4.2413314501529153e-01:1.8511482292731261e+00:4.8440320889031641e-01:2.1353553497830688e+00:3.8769811336795923e-01:2.9451841674675010e+00:3.1966229247186195e-01:3.9711566056586625e+00 + CVs 20 + 8.2899338562880653e-01 2.0171195965456873e-01 2.1071894094951651e-02 + 1.3917560709211616e+00 3.2336758976868729e-01 3.1969371698808507e-02 + 1.8777751272489065e+00 4.1639098986983403e-01 5.3295464110238069e-02 + 2.3857694559040930e+00 5.0841035465398443e-01 9.5612457488842617e-02 + 2.9147911057824638e+00 5.8621757927915463e-01 1.5521572497343003e-01 + 3.4625147241233418e+00 6.3677660031076255e-01 2.2743857601354417e-01 + 4.0256262266003811e+00 6.5002741448600077e-01 3.0835949381374328e-01 + 4.5994594697999736e+00 6.1801016309320800e-01 3.9870950572228481e-01 + 5.1762589233774836e+00 5.3339769459123554e-01 5.0328091176860557e-01 + 5.7450130981392826e+00 3.9123957826130784e-01 6.2386554462933907e-01 + 6.2925074147805908e+00 1.9052591776507621e-01 7.5506534493420285e-01 + 6.8044648994904273e+00 -6.6301812445375363e-02 8.8618987656098924e-01 + 7.2704038778819484e+00 -3.7204691276225255e-01 1.0094476777223529e+00 + 7.6896844981928263e+00 -7.1577808885771255e-01 1.1243103108527559e+00 + 8.0678827906413275e+00 -1.0875359086083214e+00 1.2320361138939309e+00 + 8.4089213314608529e+00 -1.4815179897137347e+00 1.3293327167864746e+00 + 8.7049315113685957e+00 -1.8941158757072225e+00 1.4085303884106550e+00 + 8.9323960412144210e+00 -2.3132305399884086e+00 1.4684268371442157e+00 + 8.9723563854611950e+00 -2.5852119790603494e+00 1.4863233497476434e+00 + id 12464 + loc 8.8607120513916016e-01 5.5761945247650146e-01 409 + blend 0.0000000000000000e+00 + interp 4.5952646917191048e-01:3.0452743084676470e-01:5.0160970137084882e-01:3.9723329528148960e-01:1.0959219944349448e+00:2.9101491648812305e-01:1.8057962236079388e+00:3.5251045018750993e-01:2.1584713780718428e+00:4.5952187390721877e-01:2.7724061048725623e+00:3.3849752211397022e-01:3.1087799975905526e+00:3.2252900751190672e-01:3.9220058642817577e+00 + CVs 20 + 3.6978114947292678e-01 1.3901173145328652e-01 -1.9491143334002925e-01 + 6.9668563778748482e-01 2.4968743562700821e-01 -3.7490256240650111e-01 + 1.0130613962245714e+00 3.5346070945340058e-01 -5.4119271611013653e-01 + 1.3316798002580477e+00 4.5797441016459367e-01 -6.9667500069147525e-01 + 1.6495181957491172e+00 5.5816285420228473e-01 -8.4516530171546034e-01 + 1.9658079132443849e+00 6.5014975059181612e-01 -9.9210069675307100e-01 + 2.2826514097544344e+00 7.3085036650137747e-01 -1.1431359649195230e+00 + 2.6049449501442812e+00 7.9495216109548128e-01 -1.3026003501615004e+00 + 2.9374774645639694e+00 8.3235040344649280e-01 -1.4723714783667012e+00 + 3.2777916126316686e+00 8.2952827980828281e-01 -1.6531612302699976e+00 + 3.6136649921088528e+00 7.7353131488108451e-01 -1.8468010771837720e+00 + 3.9312436896302900e+00 6.5493214610460226e-01 -2.0551909086431923e+00 + 4.2224010919093242e+00 4.7008852836445825e-01 -2.2773643070100253e+00 + 4.4820086361376559e+00 2.2254958322444507e-01 -2.5091722501877665e+00 + 4.7049476694963772e+00 -7.9731749224348114e-02 -2.7457628247787311e+00 + 4.8887132623558047e+00 -4.3230761669299822e-01 -2.9809351895792693e+00 + 5.0334836284898756e+00 -8.3738916121893103e-01 -3.2029881966035458e+00 + 5.1405110451563090e+00 -1.2871692596776705e+00 -3.3978140761602162e+00 + 5.2856133746765490e+00 -1.7106843118552986e+00 -3.5834292822679403e+00 + id 12465 + loc 3.3819034695625305e-02 9.4844818115234375e-01 1075 + blend 0.0000000000000000e+00 + interp 3.7477967036418380e-01:2.8365445147257778e-01:2.1951342433604148e-01:2.5628154097127387e-01:9.8189789143540140e-01:2.2071899225352862e-01:1.7436191566021833e+00:3.7477592256748016e-01:2.3206648808492853e+00:2.7750649401989730e-01:3.5095492961642156e+00 + CVs 20 + 1.2284211637212863e-01 3.9464649577287614e-01 -2.5998824228041822e-01 + 2.5808379100682416e-01 7.9653657699444136e-01 -5.3079869987967998e-01 + 3.6600492676783569e-01 1.2291533426767054e+00 -7.9893334131330929e-01 + 4.2216011006367354e-01 1.6965789794557182e+00 -1.0415168300827902e+00 + 4.3025465823066922e-01 2.1612993084407197e+00 -1.2493411520166726e+00 + 4.3557844327711182e-01 2.5430517392388747e+00 -1.4566171609221403e+00 + 4.9282125336782234e-01 2.7613793366878632e+00 -1.6862663788894874e+00 + 6.2013389223916260e-01 2.7937840275848815e+00 -1.8780515300157339e+00 + 7.9001847640699963e-01 2.6955071763518412e+00 -1.9228177977681782e+00 + 9.4251159982208821e-01 2.5986064969788112e+00 -1.8008582039511567e+00 + 1.0567449345863407e+00 2.5721739364935821e+00 -1.6163688445793161e+00 + 1.1640545524602888e+00 2.5789115227771875e+00 -1.4457396754101537e+00 + 1.3013081386830305e+00 2.5681260401560415e+00 -1.2926477380698298e+00 + 1.4636270101755187e+00 2.5107502232402865e+00 -1.1263093336316836e+00 + 1.6189042280392387e+00 2.3992763744560004e+00 -9.2262834097351443e-01 + 1.6998797749562140e+00 2.3113696802229797e+00 -6.8309984018665115e-01 + 1.6703552826597008e+00 2.4144319008360053e+00 -4.9363772773140713e-01 + 1.6681378126939514e+00 2.6056487250840723e+00 -3.8169918640987377e-01 + 1.6159625449856994e+00 2.5067554063421360e+00 4.9258496313271075e-02 + id 12466 + loc 2.7110281586647034e-01 9.1930156946182251e-01 1078 + blend 0.0000000000000000e+00 + interp 4.2654412486330406e-01:2.6270194372498901e-01:1.9795374291347811e-02:2.9376353739260436e-01:8.6292766799197462e-01:3.0201334431457910e-01:1.3505979818194351e+00:4.2653985942205547e-01:2.1650786488048657e+00:3.5839570961777850e-01:2.9471379685896526e+00:3.7822640912118738e-01:3.3749121932121007e+00 + CVs 20 + 4.4919399448432547e-02 2.0845098453007049e-01 -2.2225815055082448e-02 + 1.1028589396183651e-01 4.0632966272109117e-01 -5.9176538468887596e-02 + 1.7429049862839904e-01 6.0369170845095954e-01 -1.0384871020789194e-01 + 2.2759518903402334e-01 8.0210127890740246e-01 -1.5654727483542968e-01 + 2.6816403020374308e-01 1.0009142700047087e+00 -2.2290488785264967e-01 + 2.9113613583575548e-01 1.1990903135469928e+00 -3.0726258308815441e-01 + 2.8971949869007790e-01 1.3945370414912786e+00 -4.1104487387107136e-01 + 2.5751977569323192e-01 1.5842683854575008e+00 -5.3092610299659526e-01 + 1.9128844282323243e-01 1.7649478417503872e+00 -6.6202549408710221e-01 + 9.0985691113259312e-02 1.9324785249070437e+00 -8.0419851556671229e-01 + -4.2110368277675878e-02 2.0804546970750653e+00 -9.6252022630518008e-01 + -2.0430483115812528e-01 2.2011241499261649e+00 -1.1412190246310892e+00 + -3.8969148155459926e-01 2.2900283336803491e+00 -1.3375688359779709e+00 + -5.9163212101927265e-01 2.3521824208773205e+00 -1.5393461388368239e+00 + -8.0636271177055008e-01 2.4003632117200775e+00 -1.7350085927242178e+00 + -1.0393764350339738e+00 2.4346537781279203e+00 -1.9297780435061940e+00 + -1.2898254110680212e+00 2.4450392783046504e+00 -2.1329065767409192e+00 + -1.5313888438356680e+00 2.4403105091348172e+00 -2.3423306297090334e+00 + -1.7215767035633467e+00 2.4799862877628547e+00 -2.5141256426651384e+00 + id 12467 + loc 6.0992670059204102e-01 5.5815112590789795e-01 1080 + blend 0.0000000000000000e+00 + interp 3.2990162372855836e-01:3.0441240651493690e-01:2.7916009938569253e-01:3.0114085100106691e-01:1.5695060342309395e+00:3.1126258897982706e-01:2.2915120770692790e+00:3.0026771292975385e-01:3.0325887741507076e+00:3.2989832471232111e-01:3.7369519262732305e+00 + CVs 20 + -6.6577457063931700e-02 3.1398452975303859e-01 2.6111344186660457e-01 + -1.0593008710962092e-01 5.5728316730851346e-01 4.0570219695481591e-01 + -1.5114079890133975e-01 7.7017200480358672e-01 5.1817912179203329e-01 + -2.2287380259851997e-01 9.7973173203341934e-01 6.4620081959023734e-01 + -3.2240099249808052e-01 1.1795752697462796e+00 7.8471118915290705e-01 + -4.5174028709381153e-01 1.3619165073353108e+00 9.2649329604179020e-01 + -6.1310028654082493e-01 1.5175988703615362e+00 1.0627843264186363e+00 + -8.0657995760777979e-01 1.6353657458146862e+00 1.1859908444098000e+00 + -1.0282954173524730e+00 1.7029349824649336e+00 1.2906113301903233e+00 + -1.2703353385585228e+00 1.7084597422977401e+00 1.3706102158620626e+00 + -1.5192802373490188e+00 1.6408045209111033e+00 1.4179112072696158e+00 + -1.7552307205732773e+00 1.4963955751377809e+00 1.4273476797196434e+00 + -1.9595803447341698e+00 1.2867723263472763e+00 1.4044029503307973e+00 + -2.1292472385662808e+00 1.0357056497832311e+00 1.3652420573120518e+00 + -2.2817507498836971e+00 7.6686992861715808e-01 1.3285734651264320e+00 + -2.4405098740279767e+00 4.9132916513715519e-01 1.3054655369246819e+00 + -2.6140529928729368e+00 2.0633110165284241e-01 1.2916103409309705e+00 + -2.8009612889885487e+00 -9.0138365767029160e-02 1.2646139243518588e+00 + -3.0556583729376046e+00 -3.4105120653339460e-01 1.2949173515643932e+00 + id 12468 + loc 7.8827105462551117e-02 8.1437671184539795e-01 406 + blend 0.0000000000000000e+00 + interp 6.6012262778870801e-01:3.8413176452636583e-01:9.4016720354294736e-01:6.6011602656243018e-01:1.7193323514917065e+00:4.2527077049741918e-01:2.0846266436268266e+00:5.3189416172387549e-01:2.7672045763182309e+00:3.9891348645128333e-01:3.1097196301048231e+00:4.1286719655254350e-01:3.9531244944538160e+00 + CVs 20 + 1.5927542652674864e-01 2.9756966204708046e-01 -2.0057692010206220e-02 + 1.9365506221001655e-01 4.8332520649939825e-01 -4.7840634453774761e-03 + 1.7509571317571421e-01 6.4253229142000612e-01 1.1077767113221469e-02 + 1.6252288009358751e-01 7.9691714885530274e-01 2.5304911290159555e-02 + 1.5030200444853764e-01 9.3874617590137421e-01 3.9330805856192350e-02 + 1.3170902204304891e-01 1.0595820342890794e+00 5.5096844683067692e-02 + 9.6478109001647272e-02 1.1498580157107348e+00 7.2262102284894630e-02 + 2.0350088742839778e-02 1.2021132716540230e+00 7.5164018338041302e-02 + -1.3308310628571363e-01 1.2646862798693244e+00 -1.3907334193187376e-03 + -2.3092817673966803e-01 1.4435095593842546e+00 -9.1444352319359129e-02 + -2.3530447112349046e-01 1.5679112604594840e+00 -4.8785113277794237e-02 + -2.1784302351379586e-01 1.6164671863270008e+00 5.8520688864173165e-02 + -1.8421362446083445e-01 1.6151131369827831e+00 1.9878987040382548e-01 + -1.3484201368153187e-01 1.5748465701105465e+00 3.5791358738613044e-01 + -6.6977460472240624e-02 1.5158033337457260e+00 5.2616395058340748e-01 + 2.8396990329226102e-02 1.4709668006555312e+00 6.9906286310617005e-01 + 1.5597017468082047e-01 1.4710387707856096e+00 8.6882938689697353e-01 + 2.9886048587270642e-01 1.5347224493132898e+00 1.0130885205983251e+00 + 4.8492848054598192e-01 1.6530424459355908e+00 1.1588229327738251e+00 + id 12469 + loc 6.7681741714477539e-01 5.6199401617050171e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0441696480816947e-01:4.0441292063852141e-01:1.6895572097467437e-01:2.7157492743510209e-01:9.7710541721277244e-01:3.0652290545760869e-01:1.6720811661416290e+00:2.5920036882298753e-01:2.2591986637279424e+00:3.1886072714078539e-01:3.0000482615810142e+00:2.9527090976273501e-01:3.5650536385799709e+00 + CVs 20 + -1.4404532927076108e-01 4.7328914942998063e-01 1.2669194785102983e-01 + -2.9734668129888187e-01 9.1609849396005194e-01 1.7862926778240790e-01 + -4.7548431569620697e-01 1.3387283860888941e+00 1.7894740008317767e-01 + -6.8683363679964660e-01 1.7324141066056020e+00 1.2544064359390328e-01 + -9.2891339891034119e-01 2.0754470873715283e+00 8.1357068447601710e-03 + -1.1875600594763891e+00 2.3462980521534282e+00 -1.7494370276003846e-01 + -1.4392777440400357e+00 2.5292439777540361e+00 -4.1559686699739584e-01 + -1.6603965146922979e+00 2.6207251761169554e+00 -6.9570478815182735e-01 + -1.8444995036144716e+00 2.6281320426771875e+00 -9.9548405623095293e-01 + -2.0120537987656348e+00 2.5566022001994986e+00 -1.3058095930026610e+00 + -2.1884323220138162e+00 2.3971888332857683e+00 -1.6223550400470734e+00 + -2.3827752391313823e+00 2.1359307491784070e+00 -1.9267913423954999e+00 + -2.5973547862316626e+00 1.7619942728746929e+00 -2.1877445484815596e+00 + -2.8408621898615274e+00 1.2646310952383444e+00 -2.3635831951014472e+00 + -3.1234467136286641e+00 6.5056368007995125e-01 -2.3896343789278252e+00 + -3.4331374021207521e+00 1.4141250806434913e-02 -2.2039429921514602e+00 + -3.7706351348681251e+00 -5.1561237453040776e-01 -1.8201385840487210e+00 + -4.1475291050649030e+00 -8.5187003314207088e-01 -1.3088268216216272e+00 + -4.3635027239137241e+00 -9.6397067582493345e-01 -9.3365679323821005e-01 + id 12470 + loc 4.6560031175613403e-01 3.4320205450057983e-02 372 + blend 0.0000000000000000e+00 + interp 1.2867187917233178e+00:1.2867087917233178e+00:1.0849859242951621e-01:5.3308866141118716e-01:1.3006388448998252e-01:8.4457222646007879e-01:2.0491566016297362e+00:7.0143637123441749e-01:2.1242388713097355e+00:3.2085089446186038e-01:2.6025034366750681e+00:3.3523357206752502e-01:3.0220768524782180e+00:3.0236599444331469e-01:3.9950764261867602e+00 + CVs 20 + -4.0596468392379091e-02 3.7143347391784381e-01 6.2029695418466213e-01 + -4.5616073955301234e-02 6.2865615980527267e-01 1.1638323328599141e+00 + -3.9873199534099374e-03 7.8071863186480017e-01 1.7265829806158319e+00 + 4.8746787768313427e-02 8.5709359983041078e-01 2.3382392858364560e+00 + 2.3640340956993466e-02 9.3423406584046231e-01 2.9301859152258767e+00 + -1.7761449973204757e-01 1.0802941785436602e+00 3.3827264809342292e+00 + -5.8068191764970412e-01 1.2423744513964405e+00 3.5276852993968673e+00 + -1.0800663706400617e+00 1.2993521237434156e+00 3.3070527668858527e+00 + -1.5645172655213293e+00 1.1704087796683469e+00 2.7880244339316498e+00 + -1.9513572261143777e+00 7.9637596770827301e-01 2.1011590810339396e+00 + -2.1941362472996602e+00 1.7679860112646950e-01 1.3874433668435231e+00 + -2.3046515522995761e+00 -5.8522095997820722e-01 6.8196684508965544e-01 + -2.3589249952641369e+00 -1.2960553206958565e+00 -1.2951050793284630e-01 + -2.4596363624010897e+00 -1.6804676054344247e+00 -1.1561322389298754e+00 + -2.6785041966443881e+00 -1.5697659654660439e+00 -2.1932405578546712e+00 + -2.9406824703547239e+00 -1.1862721079923335e+00 -2.9864668088538284e+00 + -3.1382986700655420e+00 -6.6929588303611665e-01 -3.5877059427046647e+00 + -3.2173626023094486e+00 -4.2279436246826618e-02 -4.0756130355698446e+00 + -3.1742211009538743e+00 6.3826686195895155e-01 -4.4638165345417562e+00 + id 12471 + loc 8.4275507926940918e-01 5.3095912933349609e-01 403 + blend 0.0000000000000000e+00 + interp 4.9671136867620841e-01:3.3645342919631710e-01:5.4036271081926901e-01:3.4475142249692164e-01:1.4462636475889208e+00:4.9670640156252166e-01:1.9997695074637085e+00:3.6851609353938369e-01:2.4872167785658608e+00:3.1419338265948227e-01:3.4974189216119989e+00 + CVs 20 + -1.1356952252370971e-02 7.2722206506788484e-02 2.7976229564158225e-02 + -3.0712561191326919e-02 1.4885702090776648e-01 5.6995852845013219e-02 + -6.1692171471701321e-02 2.3122293186254306e-01 7.9242006076965549e-02 + -9.1542706847944785e-02 3.2411691368531315e-01 1.0054390734955049e-01 + -1.1915970285938712e-01 4.2622219820352369e-01 1.2043882251676108e-01 + -1.4664321501759348e-01 5.3606556694648255e-01 1.3673295555030052e-01 + -1.7669995916229705e-01 6.5204136774357302e-01 1.4700861925318542e-01 + -2.1199039221269833e-01 7.7168082320476783e-01 1.4931961593818438e-01 + -2.5514714283866313e-01 8.9059751495112516e-01 1.4297126594284248e-01 + -3.0910445744614806e-01 1.0021905087720548e+00 1.2899914867542944e-01 + -3.7667474041704779e-01 1.0985894489637911e+00 1.1026213268392797e-01 + -4.5914835626684508e-01 1.1713760492217271e+00 9.1978498923078647e-02 + -5.5460643904868046e-01 1.2130870974643753e+00 8.1488059230802060e-02 + -6.5693771015526448e-01 1.2176797691157437e+00 8.7883025683793678e-02 + -7.5547774097851217e-01 1.1819771656635178e+00 1.2045874680253808e-01 + -8.3591969448432524e-01 1.1084158602535865e+00 1.8584202216444737e-01 + -8.8457046224356739e-01 1.0069723083630868e+00 2.8439492965395352e-01 + -8.9382388523626399e-01 8.9130538926483427e-01 4.0974078394675012e-01 + -1.0454802645682708e+00 8.4090853567041057e-01 4.1723037500280968e-01 + id 12472 + loc 2.5183650851249695e-01 4.7237247228622437e-01 397 + blend 0.0000000000000000e+00 + interp 6.3096876385943190e+00:2.9368095760536711e-01:1.9342891507501125e-04:3.0045550908204166e-01:9.9985162201864464e-01:4.5137962485566269e-01:1.9225341910695888e+00:7.7504012384774668e-01:1.9498295189476964e+00:5.5033910983335099e+00:1.9900708556348465e+00:5.9112880255519240e+00:1.9951288834374181e+00:6.3096776385943194e+00:1.9967492293107041e+00:5.7044746816696601e-01:3.9721486986780237e+00:1.8221549633901097e+00:3.9933075908246942e+00:1.6624368921936408e+00:3.9954701957715049e+00 + CVs 20 + -2.5103852068393956e-01 2.9221844334843716e-01 -1.3209335371820079e+00 + -4.3373869228659800e-01 3.3135703978513947e-01 -2.1997432558335732e+00 + -5.8526074304984377e-01 2.8100303086202333e-01 -2.9655189685980878e+00 + -7.1832120970972591e-01 1.9589232001747192e-01 -3.7340572065863373e+00 + -8.3063983564418331e-01 7.1962145233768260e-02 -4.4742984899524121e+00 + -9.2627055479763643e-01 -8.5313052491964803e-02 -5.1660758455568230e+00 + -1.0081010005463051e+00 -2.6695146610432879e-01 -5.8028650317442061e+00 + -1.0738573942237686e+00 -4.6696793286177934e-01 -6.3887502383890080e+00 + -1.1260990833483566e+00 -6.9007428288142381e-01 -6.9385643621491324e+00 + -1.1742366596866043e+00 -9.6041492046043531e-01 -7.4757815758249242e+00 + -1.2310596378067680e+00 -1.3137143340880681e+00 -8.0064139925841644e+00 + -1.3119887269377299e+00 -1.7813144978271158e+00 -8.5099196440243556e+00 + -1.4309764501681832e+00 -2.3767609891339081e+00 -8.9504107186476762e+00 + -1.5967045534150899e+00 -3.0933270105507322e+00 -9.2912679119627395e+00 + -1.8129837357866183e+00 -3.9038131294776184e+00 -9.5003924927647354e+00 + -2.0732295877732576e+00 -4.7639760280544214e+00 -9.5541595121833396e+00 + -2.3531224711404368e+00 -5.6240394410119086e+00 -9.4456588607403411e+00 + -2.6284760126213875e+00 -6.4350884192480313e+00 -9.2001776910725184e+00 + -2.9153398572008311e+00 -7.1490215264316399e+00 -9.0039633366425313e+00 + id 12473 + loc 7.6640421152114868e-01 7.3166146874427795e-02 416 + blend 0.0000000000000000e+00 + interp 5.1545762637362647e-01:2.6115922711194461e-01:8.9249240422122011e-01:3.8882157032904541e-01:1.7765037871363174e+00:4.5348658737764608e-01:2.1182451895567627e+00:2.8447994595394632e-01:2.9662197291880674e+00:3.4439773415442693e-01:3.4641771503108036e+00:5.1545247179736275e-01:3.9665826820585885e+00 + CVs 20 + -4.5353591289164519e-01 1.3188278017827390e-01 7.2804249382682221e-02 + -7.6611385318945846e-01 1.6432807711281927e-01 1.5879446015291671e-01 + -1.0528016499756134e+00 1.5965775109388836e-01 2.4112091882541675e-01 + -1.3526202692126970e+00 1.4769328309498020e-01 3.0282589117041292e-01 + -1.6609288075671105e+00 1.2695312275786252e-01 3.4237814430221541e-01 + -1.9740434205068254e+00 9.6727234637024373e-02 3.5830231303107646e-01 + -2.2874694535756355e+00 5.7663011593576119e-02 3.4708660923003087e-01 + -2.5961126056751294e+00 1.0845693508398702e-02 3.0628622771806946e-01 + -2.8968732799183274e+00 -4.3442594689196978e-02 2.3743612158109983e-01 + -3.1864725891021930e+00 -1.0449839242713077e-01 1.4311548092437454e-01 + -3.4504389005875642e+00 -1.6527284934245334e-01 2.2844874881107424e-02 + -3.6656381277188554e+00 -2.1263249191856604e-01 -1.2302602666482576e-01 + -3.8358889074311064e+00 -2.4655595103088190e-01 -2.8659171111288906e-01 + -4.0028837874306715e+00 -2.9394418909621223e-01 -4.4509637206944874e-01 + -4.1900668191801191e+00 -3.7680058265070304e-01 -5.7139139572383368e-01 + -4.3836672474832392e+00 -4.8948117976181171e-01 -6.6204436845812531e-01 + -4.5668401985610689e+00 -6.2063102448544938e-01 -7.2571036909749775e-01 + -4.7339913523715165e+00 -7.6753841517191268e-01 -7.6010087117543890e-01 + -4.8971112147466469e+00 -9.8039099282361408e-01 -6.7920326866507819e-01 + id 12474 + loc 6.8227106332778931e-01 3.4924149513244629e-02 413 + blend 0.0000000000000000e+00 + interp 4.5418875511111784e-01:2.9529408878019431e-01:5.5822544840832933e-02:4.5418421322356672e-01:5.9590155968321468e-01:3.8829327626010668e-01:1.3922791187893748e+00:1.5794365899758914e-01:1.9755040816353193e+00:3.1631160746847120e-01:2.6166920541898611e+00:3.4565686460330802e-01:3.0314069892012037e+00:3.7655214117014763e-01:3.6454442795732955e+00 + CVs 20 + -1.0962858023717805e+00 2.5308804854663447e-01 1.6376105073163111e-01 + -1.8526651001805698e+00 2.9967241979748216e-01 2.8536269492483979e-01 + -2.5269232951704259e+00 2.6138048306735917e-01 3.6821478548011738e-01 + -3.2092942001577844e+00 1.7495982406399846e-01 4.0892402477852346e-01 + -3.8765787175003004e+00 4.0523098882795039e-02 4.0136379858714705e-01 + -4.5075338775863543e+00 -1.4059811380360032e-01 3.5634762180427659e-01 + -5.0832516250720499e+00 -3.7112043994201460e-01 2.9471482882428796e-01 + -5.5862227480944240e+00 -6.5291151495640309e-01 2.3556358163920230e-01 + -6.0056948065734597e+00 -9.7884579033993324e-01 1.9477018988828074e-01 + -6.3388930708775737e+00 -1.3322300540644330e+00 1.8492563309911686e-01 + -6.5911777679401427e+00 -1.6899425516010436e+00 2.1259943017766542e-01 + -6.7828231992709398e+00 -2.0362022293995299e+00 2.7686586534832647e-01 + -6.9443317748478099e+00 -2.3729439457084820e+00 3.7132103199446198e-01 + -7.1008375526543155e+00 -2.7112829367958486e+00 4.8589141584208212e-01 + -7.2643514031419016e+00 -3.0601593083448568e+00 6.1012781411582884e-01 + -7.4352795611355615e+00 -3.4274515804552923e+00 7.3519292536069991e-01 + -7.6045288570331131e+00 -3.8242628580108784e+00 8.5122705588739600e-01 + -7.7582744658941838e+00 -4.2568800431055891e+00 9.4947800847705788e-01 + -7.8955154157685827e+00 -4.7449890866055711e+00 1.0292148931924787e+00 + id 12475 + loc 7.3887887410819530e-03 7.1826511621475220e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1974015480236215e-01:3.8823245178491728e-01:4.6162615031103316e-01:2.4744994537294590e-01:1.2691373717464600e+00:4.1973595740081415e-01:2.0031997724456070e+00:3.3350283003892994e-01:2.7028594171155307e+00:3.9421831207020902e-01:3.5586115538937824e+00 + CVs 20 + 1.6509532069518981e-01 2.6652247876769175e-01 -3.1894233848165765e-01 + 3.1636662463293763e-01 5.3649683785470625e-01 -5.9809087454043597e-01 + 4.6558238186848183e-01 8.0910651375332043e-01 -8.5916281764540914e-01 + 6.2114685421194782e-01 1.0825956235594170e+00 -1.1146451395596664e+00 + 7.8843059776755153e-01 1.3507461174693811e+00 -1.3698451340139151e+00 + 9.6987465184386235e-01 1.6082736096014085e+00 -1.6335387287758170e+00 + 1.1636741306342238e+00 1.8510148717604333e+00 -1.9185053429976111e+00 + 1.3635630998800348e+00 2.0731723212787379e+00 -2.2401629621927444e+00 + 1.5572043006840193e+00 2.2663246736472926e+00 -2.6124630376652060e+00 + 1.7287230019467215e+00 2.4198082204186475e+00 -3.0429684803549453e+00 + 1.8627009627770159e+00 2.5200590919216208e+00 -3.5296720160377402e+00 + 1.9452590141801840e+00 2.5515179164183710e+00 -4.0588343444489299e+00 + 1.9649885480635099e+00 2.5000444862176705e+00 -4.6075044561745848e+00 + 1.9137149750055906e+00 2.3542004648538435e+00 -5.1482502965684782e+00 + 1.7850709610671294e+00 2.1078213757724980e+00 -5.6478299229588353e+00 + 1.5755860530738679e+00 1.7755241354110036e+00 -6.0590369931787302e+00 + 1.2957767281210817e+00 1.4111308553327933e+00 -6.3305466651602096e+00 + 9.8076485414392356e-01 1.0913636445220245e+00 -6.4423854746579376e+00 + 6.9439332985530799e-01 8.6464722729342935e-01 -6.4360114724907520e+00 + id 12476 + loc 8.8810324668884277e-01 4.8079273104667664e-01 1084 + blend 0.0000000000000000e+00 + interp 4.9523557507777327e-01:2.8456728711746881e-01:2.7525770169772001e-01:4.9523062272202251e-01:9.8850417335157659e-01:3.1113146620792032e-01:1.6838183671207210e+00:4.8290614151174632e-01:2.2704829669749409e+00:4.5537051984313826e-01:2.8579179603334910e+00:2.9528735554870417e-01:3.0613029270493346e+00:3.5315207341289850e-01:3.8294582398541221e+00 + CVs 20 + 2.8955753224642850e-01 3.3162318710410393e-01 -1.6027544050058912e-01 + 5.4229318680507022e-01 6.5232141346518802e-01 -3.3257705984472652e-01 + 7.6767580530361323e-01 9.6524296032161416e-01 -5.1866127323365763e-01 + 9.8942545014498018e-01 1.2759306668381010e+00 -7.0272347613181296e-01 + 1.2331578942213504e+00 1.5879061081645296e+00 -8.6095799809147922e-01 + 1.5167195816193915e+00 1.9009273104774236e+00 -9.7255309863712847e-01 + 1.8546873801055210e+00 2.2116181694442165e+00 -1.0162288006211688e+00 + 2.2593978839483189e+00 2.5067251433275080e+00 -9.5783735585758223e-01 + 2.7103749329694948e+00 2.7463906513694143e+00 -7.5309746688870582e-01 + 3.1333896394453808e+00 2.8809277255945158e+00 -3.9675369495648849e-01 + 3.4646423384332019e+00 2.8960563249101936e+00 6.5653755536789093e-02 + 3.6897189484481214e+00 2.7908648665171301e+00 5.8312710682420010e-01 + 3.8293433808179533e+00 2.5368247477937089e+00 1.0903131612135346e+00 + 3.9090661188653089e+00 2.1259277012559474e+00 1.4927545753302420e+00 + 3.9184299255366675e+00 1.6391159572153617e+00 1.7691119156126760e+00 + 3.8328580817088409e+00 1.1974033896409042e+00 1.9893392577967255e+00 + 3.6696495948281176e+00 8.9618568971868029e-01 2.2073036767753935e+00 + 3.4639680280925846e+00 7.3467323068180845e-01 2.4589404362993066e+00 + 3.1795314152524363e+00 5.4121223317933220e-01 2.8742979793147514e+00 + id 12477 + loc 3.8517594337463379e-01 4.2442589998245239e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8595733648323777e-01:2.8905921925803874e-01:6.2515441930170013e-01:3.0680700714716258e-01:1.4850066700313662e+00:3.0604796702393355e-01:2.0984413841139054e+00:3.0849443178277636e-01:2.9972813511819631e+00:3.8595347690987297e-01:3.6227140298513842e+00 + CVs 20 + -9.6823960903959713e-02 3.4469682309355409e-01 -1.2732885225041835e-01 + -2.1122143634403401e-01 6.8750281371486888e-01 -2.8971547487448546e-01 + -3.5584623393878584e-01 1.0268546278164623e+00 -4.5463684864045739e-01 + -5.4118273971260544e-01 1.3527987364397094e+00 -6.0901863205751261e-01 + -7.7430800127243349e-01 1.6496707186516530e+00 -7.5608914049834086e-01 + -1.0562876245191011e+00 1.8970627366015735e+00 -9.0535904680993762e-01 + -1.3826534472918461e+00 2.0725645859143680e+00 -1.0630927440989699e+00 + -1.7431185373187308e+00 2.1565442691513859e+00 -1.2211492409010809e+00 + -2.1201260070304584e+00 2.1361040825440036e+00 -1.3616131097862902e+00 + -2.4893442866362001e+00 2.0096479876218010e+00 -1.4689482771373921e+00 + -2.8263996769298272e+00 1.7863565909291648e+00 -1.5322101574034865e+00 + -3.1118673691218155e+00 1.4822534614448513e+00 -1.5398164681124638e+00 + -3.3387857631204820e+00 1.1261862974835328e+00 -1.4808749444945368e+00 + -3.5298936342626406e+00 7.6424202136661545e-01 -1.3407126875618993e+00 + -3.7150232886935197e+00 4.4337030688117429e-01 -1.0920451803442126e+00 + -3.8871476293186151e+00 2.0002248379565868e-01 -7.2838528326250751e-01 + -4.0179996972076912e+00 5.1953970024723795e-02 -2.8034130641248040e-01 + -4.1076241975591712e+00 -2.8859435449119841e-02 1.8539223262088084e-01 + -4.2775822839225492e+00 -3.0420420366470413e-01 4.5481003820264393e-01 + id 12478 + loc 9.4482702016830444e-01 8.4638649225234985e-01 1048 + blend 0.0000000000000000e+00 + interp 3.9139092610227716e-01:2.2040378432756882e-01:8.1903248152906838e-02:3.9138701219301614e-01:9.5468824204787661e-01:2.2600509109889827e-01:1.6909839557032913e+00:3.0447306748992259e-01:2.1502192381954259e+00:1.8585286735180512e-01:2.9713934057772158e+00 + CVs 20 + -7.1983182170677562e-02 7.1147038711374322e-01 -3.1083083883604190e-01 + -6.9158222012210682e-02 1.4232552900236883e+00 -6.2988460640926625e-01 + 3.4075425160467437e-02 2.1294779650403988e+00 -9.6382861098397044e-01 + 2.4322015290078028e-01 2.8208493807119717e+00 -1.2839938989784074e+00 + 5.7617441443438844e-01 3.5469453123961805e+00 -1.4704722310090950e+00 + 1.0761940294157264e+00 4.2473292497947792e+00 -1.3038947241057863e+00 + 1.6829149223809738e+00 4.6464237232716936e+00 -7.4339278318055246e-01 + 2.2728261690803810e+00 4.5934305539390072e+00 1.3766117991505400e-02 + 2.7459269807758226e+00 4.1084758663164953e+00 7.7474010493631984e-01 + 3.0192914371766220e+00 3.2815503439041498e+00 1.4137485355523713e+00 + 3.0551901910102162e+00 2.2541987411940485e+00 1.8872467199983971e+00 + 2.8628187200149773e+00 1.1669718761918897e+00 2.2168470417737334e+00 + 2.4301144867035758e+00 1.2536437284841107e-01 2.4808160912759831e+00 + 1.8046719513072387e+00 -7.9676482578481123e-01 2.8137978351887831e+00 + 1.1470577663852868e+00 -1.5464802557975244e+00 3.3935755476786378e+00 + 8.1053535340384120e-01 -1.9697327637849147e+00 4.3545690171289682e+00 + 1.0554224658220330e+00 -1.9598139734444791e+00 5.3894899887306291e+00 + 1.8340216298576961e+00 -1.7070478920319463e+00 6.1340899377083904e+00 + 2.5854459353190067e+00 -1.3675710899403044e+00 6.6823841761785179e+00 + id 12479 + loc 1.3451279699802399e-01 5.3852999210357666e-01 411 + blend 0.0000000000000000e+00 + interp 4.1145307986124863e-01:2.4765254669650696e-01:1.9088686369625807e-01:3.8171813285219197e-01:9.0732681249158476e-01:3.7873025968997542e-01:1.1230896000364421e+00:4.1144896533045006e-01:1.7238331144938477e+00:3.2100666981298898e-01:2.1171763683394595e+00:4.0703602555919627e-01:2.9210779291122106e+00:3.0665860889136082e-01:3.1958680982237224e+00 + CVs 20 + 8.3812205811712415e-01 9.3198468014005081e-02 -4.9441983123355709e-02 + 1.4587643801128203e+00 6.5466756664879167e-02 -1.2357141681040715e-01 + 2.0435505248690222e+00 -8.7573205706213963e-03 -1.7013716383048430e-01 + 2.6457578331769294e+00 -1.1028110254913226e-01 -1.7276426993120456e-01 + 3.2462963291858205e+00 -2.4091791151611019e-01 -1.3441445190160042e-01 + 3.8299620671559182e+00 -3.9993950345432738e-01 -6.4199102622122792e-02 + 4.3855185381231347e+00 -5.8870898881887856e-01 2.6701365072612351e-02 + 4.9001950942017647e+00 -8.1347277844363686e-01 1.2638510726525998e-01 + 5.3585003241479781e+00 -1.0824439657926583e+00 2.2030341770555656e-01 + 5.7396894854655081e+00 -1.4007540077860374e+00 2.9078595241625182e-01 + 6.0225360534669834e+00 -1.7646752520172178e+00 3.2284988023749739e-01 + 6.2065969164956769e+00 -2.1632308559176141e+00 3.0962554878155468e-01 + 6.3105153901035402e+00 -2.5878503094878953e+00 2.5413096127394541e-01 + 6.3481081825978078e+00 -3.0300855534749784e+00 1.5846451841222098e-01 + 6.3200398111728440e+00 -3.4741682746487594e+00 2.4761753303889814e-02 + 6.2189025404601601e+00 -3.9038783776129158e+00 -1.3693642747502430e-01 + 6.0460875056303545e+00 -4.3071166506025715e+00 -3.1368962085730678e-01 + 5.8272760941127348e+00 -4.6783863487975719e+00 -5.0964882025017644e-01 + 5.7356339204934690e+00 -5.2171750294379917e+00 -6.8317700225999700e-01 + id 12480 + loc 2.0518429577350616e-01 5.5139958858489990e-01 1080 + blend 0.0000000000000000e+00 + interp 3.3646306521589198e-01:2.8502691192645330e-01:2.8929271123254285e-01:3.2004245030753437e-01:1.0232348075650377e+00:2.9747434530145045e-01:1.9957574606670236e+00:2.7240740339565062e-01:2.8289811509500025e+00:3.3645970058523983e-01:3.5437868298687678e+00 + CVs 20 + -1.9138840837979995e-01 4.8036866140913126e-02 3.0985932445791237e-01 + -2.9641143902210842e-01 6.8665516474195054e-04 4.5348672223352360e-01 + -3.6585224072412170e-01 -7.9654891598288952e-02 5.0549612786123632e-01 + -4.2093227389000265e-01 -1.5518028447746379e-01 5.5279381295700825e-01 + -4.5892586732679930e-01 -2.2180411123537405e-01 5.9659605700934593e-01 + -4.7831949256484146e-01 -2.7528134290833761e-01 6.3913720311713451e-01 + -4.8016939097367273e-01 -3.1151296996073885e-01 6.8481163723571292e-01 + -4.6843601480622138e-01 -3.2685340669563367e-01 7.3865140392289241e-01 + -4.5032202094877727e-01 -3.1907584979176279e-01 8.0523239695007920e-01 + -4.3667817580449181e-01 -2.8890098807866854e-01 8.8772542518367747e-01 + -4.4043983719411711e-01 -2.4028179143811140e-01 9.8664617296676860e-01 + -4.7388629658078585e-01 -1.7924840084950899e-01 1.0990011257367975e+00 + -5.4548827391228627e-01 -1.1157199122276412e-01 1.2191930705347143e+00 + -6.5783083183288926e-01 -4.0760044521280792e-02 1.3425997088524513e+00 + -8.0854530965133242e-01 3.1616772077231459e-02 1.4674379601075758e+00 + -9.9264102942477572e-01 1.0411157280710315e-01 1.5919626962622326e+00 + -1.2036327816546180e+00 1.7441868037735386e-01 1.7115541493227839e+00 + -1.4330252373262653e+00 2.3967157361140290e-01 1.8222303526241648e+00 + -1.6643718556301705e+00 2.6483896797910100e-01 1.9391304004828738e+00 + id 12481 + loc 5.7403200864791870e-01 3.6674484610557556e-01 409 + blend 0.0000000000000000e+00 + interp 4.6939779102549167e-01:3.1962481604647119e-01:2.7691460287029113e-01:4.6939309704758142e-01:1.1783898629829270e+00:2.9112666146459448e-01:2.0278099393207185e+00:3.9608194831141513e-01:2.7484054175878061e+00:3.3848449128891323e-01:3.6341723653829656e+00 + CVs 20 + -3.1357798778903584e-01 1.2282857246921193e-01 9.0446610171966341e-02 + -6.2890752708057662e-01 2.4562873789842996e-01 1.9264093319747566e-01 + -9.6124170389968022e-01 3.7074540945130230e-01 2.7717725992797426e-01 + -1.3149284837114765e+00 4.9518324976974276e-01 3.3501602296183708e-01 + -1.6844044113638441e+00 6.1208113533042718e-01 3.7137610385411468e-01 + -2.0642869128731669e+00 7.1586591045381398e-01 3.8998836087594602e-01 + -2.4509946798259383e+00 7.9958227556314665e-01 3.9204415393384595e-01 + -2.8428978422950379e+00 8.5093552175336484e-01 3.7741390696775290e-01 + -3.2396498149277209e+00 8.5520123654481628e-01 3.4847736385299977e-01 + -3.6382671880424242e+00 7.9806066437685996e-01 3.1314404730597301e-01 + -4.0267915505689347e+00 6.6608858004631921e-01 2.8271345603712739e-01 + -4.3875965001056425e+00 4.5665065727786835e-01 2.6550671029418332e-01 + -4.7111736723423885e+00 1.8277271506220938e-01 2.6273196354662970e-01 + -4.9980683214518820e+00 -1.4063356966207996e-01 2.7184964899689168e-01 + -5.2484505664984251e+00 -5.0417950785957766e-01 2.8844363460343020e-01 + -5.4564672234026208e+00 -8.9869595383975431e-01 2.9892617443263508e-01 + -5.6194061900340735e+00 -1.3102877715989010e+00 2.8217613625623372e-01 + -5.7552021617056770e+00 -1.7265754223814098e+00 2.3764104791082055e-01 + -5.9972588042253658e+00 -2.0789438657150479e+00 1.9413106548006676e-01 + id 12482 + loc 3.4286212921142578e-01 5.4632252454757690e-01 372 + blend 0.0000000000000000e+00 + interp 4.6133940103887278e-01:3.4692562877650851e-01:5.9893550726010691e-01:2.7042177616305069e-01:1.1391785959650835e+00:3.5539677510974282e-01:1.9415423176628446e+00:4.6133478764486241e-01:2.2050637746376340e+00:3.6151580922167886e-01:2.8314663571289995e+00:3.2311278593900256e-01:3.2233321167007865e+00:4.1768364326205587e-01:3.8651091095536478e+00 + CVs 20 + -4.0518961563869976e-01 6.2675824131315405e-01 -1.8571709625561394e-01 + -7.9202523414322146e-01 1.2580154445846312e+00 -3.4192970051366217e-01 + -1.1552564495646760e+00 1.8917231383724880e+00 -5.1537660003322272e-01 + -1.3692152991706505e+00 2.4971869365694128e+00 -7.7149109836039775e-01 + -1.2677511605414491e+00 2.9791531488304015e+00 -1.1194062638489557e+00 + -8.5632128716320310e-01 3.2444136576323883e+00 -1.4765746942496625e+00 + -2.4577521221493681e-01 3.2554385662859726e+00 -1.7695098887322640e+00 + 4.4575274998550274e-01 3.0124108411902482e+00 -1.9692580378366120e+00 + 1.1057020059043063e+00 2.5353816537682947e+00 -2.0777977819394127e+00 + 1.6322985113544062e+00 1.8867998431259501e+00 -2.1119096535475474e+00 + 1.9945279558795430e+00 1.1895453532916922e+00 -2.1000772526207632e+00 + 2.2708453931965340e+00 5.6113085016707065e-01 -2.0736980860919738e+00 + 2.5692205869096054e+00 5.1778473746210807e-02 -2.0612095370882848e+00 + 2.9040539770590730e+00 -2.8154072390782314e-01 -2.0791879038407570e+00 + 3.1898007956818240e+00 -4.5754322137054770e-01 -2.1104894119041466e+00 + 3.5458752986933897e+00 -5.6501888760765095e-01 -2.1091899501559030e+00 + 4.0820857734839961e+00 -5.0748540097872397e-01 -2.1272379976512501e+00 + 4.7195963546764546e+00 -1.6066509427216635e-01 -2.2332484920489568e+00 + 5.3114903424994306e+00 5.0500335226670900e-01 -2.4654285141658874e+00 + id 12483 + loc 2.9885679483413696e-01 5.4049432277679443e-01 1075 + blend 0.0000000000000000e+00 + interp 3.6118371841357660e-01:2.6964932910954603e-01:9.9285166703954486e-02:3.6118010657639249e-01:1.0382011534498790e+00:2.5084982493854235e-01:1.7621167956099970e+00:3.5711760671961817e-01:2.2396914112751896e+00:2.5590756334263393e-01:3.0321565247965707e+00 + CVs 20 + 6.0159701833521970e-02 2.6765179359801256e-01 -1.8854540003054321e-01 + 1.3617973699548819e-01 5.2382033446147636e-01 -3.8040471436240397e-01 + 2.1610570460224726e-01 7.7126408234572008e-01 -5.6709455479742166e-01 + 2.9699906640329349e-01 1.0117136945027465e+00 -7.5370755890316121e-01 + 3.7983959106615101e-01 1.2465919192685539e+00 -9.5099390019836272e-01 + 4.5943535329111390e-01 1.4772701510726971e+00 -1.1608170848382040e+00 + 5.2777564945920652e-01 1.7045521196501152e+00 -1.3797856654334049e+00 + 5.8239962653183541e-01 1.9269545246892834e+00 -1.6082247721100400e+00 + 6.2948332805075879e-01 2.1378541098758030e+00 -1.8544774297841151e+00 + 6.7784223737250204e-01 2.3218788127005943e+00 -2.1323163440087671e+00 + 7.3005266708642924e-01 2.4502120002989178e+00 -2.4528582004980359e+00 + 7.7564143492746829e-01 2.4815870184396029e+00 -2.8099265581675872e+00 + 7.9387547126313540e-01 2.3846249574596876e+00 -3.1647048515624103e+00 + 7.7597242645434850e-01 2.1732044783520879e+00 -3.4660080884652977e+00 + 7.2944900454119144e-01 1.8859686312477755e+00 -3.7000574824652870e+00 + 6.5466288782829773e-01 1.5498733448634725e+00 -3.8756121623670703e+00 + 5.3928569043230290e-01 1.1910309957865657e+00 -3.9957180662222274e+00 + 3.8015558243677977e-01 8.3724467943036374e-01 -4.0573444716482125e+00 + 2.4132973266717631e-01 4.7257431294619134e-01 -4.1235201058493605e+00 + id 12484 + loc 3.0467665195465088e-01 8.0708646774291992e-01 1074 + blend 0.0000000000000000e+00 + interp 3.5752094016730562e-01:3.5751736495790398e-01:3.9802604616469994e-01:2.5728745708105938e-01:1.1255940365940467e+00:2.9828131819035603e-01:2.0908939035759611e+00:2.5582587521524214e-01:3.2547341423919973e+00 + CVs 20 + 6.9974315415392924e-02 3.6320864650143236e-01 -1.2979734061724332e-01 + 1.4892695344236712e-01 7.1527355731970954e-01 -2.6864725943345824e-01 + 2.4211933828486742e-01 1.0484897610208186e+00 -4.1441477761751960e-01 + 3.5713368650466715e-01 1.3608216839359673e+00 -5.5947577861108622e-01 + 5.1160378203372969e-01 1.6628982427882721e+00 -6.8416968778087417e-01 + 7.2591922768080253e-01 1.9772825119714652e+00 -7.7964291856948609e-01 + 1.0079858194303264e+00 2.3354674594913019e+00 -8.8879053111835038e-01 + 1.3534176492503265e+00 2.7549877627701012e+00 -1.0992536984655930e+00 + 1.7297647597488943e+00 3.1533822145347528e+00 -1.5052870762658315e+00 + 2.0605202252297752e+00 3.3625346203107713e+00 -2.0867837941889587e+00 + 2.2933269661213509e+00 3.3240219386692735e+00 -2.7118830005210284e+00 + 2.4278981210001822e+00 3.0933466866908681e+00 -3.2438109578586820e+00 + 2.5223948098391196e+00 2.7639963132525307e+00 -3.5856365745952159e+00 + 2.6576085918637391e+00 2.4087992806810417e+00 -3.7001893936423222e+00 + 2.8698850991455198e+00 2.0391086635922187e+00 -3.6079727610533925e+00 + 3.1420072769117713e+00 1.6151994109058136e+00 -3.3987820316874529e+00 + 3.4567191451417512e+00 1.0591320608565937e+00 -3.1819263757660972e+00 + 3.8677878518542848e+00 5.5373946945623642e-01 -3.1838631041890304e+00 + 4.2760430947437564e+00 9.2562738519134991e-01 -3.3183263412423183e+00 + id 12485 + loc 9.1774120926856995e-02 9.7426509857177734e-01 1092 + blend 0.0000000000000000e+00 + interp 2.5156975084031892e+00:6.2320959273996901e-01:2.2234326856589670e-01:4.1638094875871928e-01:8.9464553988622264e-01:2.8359472733828112e-01:1.1928015703913957e+00:4.0213544495916620e-01:1.9999972668393489e+00:2.5156875084031891e+00:2.4850220502273550e+00 + CVs 20 + -4.7054698563482339e-01 3.9198449053419071e-01 2.3534572235970969e-02 + -7.7808735600816614e-01 6.8099458694388870e-01 8.2875251642476611e-02 + -1.0161770330015651e+00 9.2740351253806441e-01 1.5066819310753005e-01 + -1.2402285917985889e+00 1.1568234855634767e+00 2.0650524986389451e-01 + -1.4460342774674300e+00 1.3647862308942473e+00 2.4705281077871688e-01 + -1.6407453383155490e+00 1.5507154264616083e+00 2.6600128239834486e-01 + -1.8439318868510299e+00 1.7319061949145635e+00 2.4980244230295889e-01 + -2.0763280591988060e+00 1.9786862454350336e+00 1.9426906735101102e-01 + -2.2735296247942429e+00 2.3586190967759841e+00 1.9515582775404394e-01 + -2.3265720525072822e+00 2.7007092710008611e+00 3.3827962369661457e-01 + -2.2741691994467166e+00 2.8909594937580589e+00 5.5132192849374007e-01 + -2.1595526434405503e+00 2.9614839118345264e+00 7.9254340760692399e-01 + -1.9931817449082185e+00 2.9385995400126941e+00 1.0573632127992572e+00 + -1.7726546185202072e+00 2.8214871470402896e+00 1.3494013545339834e+00 + -1.4842808149221969e+00 2.5882915962354831e+00 1.6640203738254482e+00 + -1.1490971713116704e+00 2.2011714179796695e+00 1.9314804925005613e+00 + -8.4721019074931170e-01 1.6656263273899492e+00 2.0432693848396246e+00 + -6.3122675741571355e-01 1.0527130998426744e+00 1.9405988278405508e+00 + -4.7471949331391722e-01 1.0248564183830826e+00 1.6879858969626744e+00 + id 12486 + loc 3.3516356348991394e-01 8.1550872325897217e-01 406 + blend 0.0000000000000000e+00 + interp 1.3773490519139411e+00:3.9505623402408607e-01:2.9885711129699510e-02:4.1501197275654983e-01:8.4145205523721989e-01:3.6734100731095265e-01:1.3704687472716328e+00:5.1050267869702148e-01:1.8722315096067430e+00:1.3773390519139410e+00:3.2649177635905939e+00:1.1877108435502066e+00:3.5252647010576741e+00:6.6627651947679989e-01:3.9178859512310527e+00 + CVs 20 + 2.1806512863772226e-01 2.9950510725048951e-01 2.8945279447704426e-02 + 2.8179295541875204e-01 4.7501359250327357e-01 6.8348968280019615e-02 + 3.1985642657422508e-01 6.3293976276486341e-01 1.0958482405516042e-01 + 3.9226316936434957e-01 7.9561210832477958e-01 1.5259981865375166e-01 + 5.0257274593960788e-01 9.5791766912469944e-01 2.0141388392104648e-01 + 6.5406407740985495e-01 1.1134220550694249e+00 2.5984051953298148e-01 + 8.4821683219940325e-01 1.2536162321640134e+00 3.3043358424748537e-01 + 1.0837484834594886e+00 1.3686273237855540e+00 4.1456407234003323e-01 + 1.3583061889916515e+00 1.4492471506820979e+00 5.1453232471751242e-01 + 1.6700167606588743e+00 1.4872101426843396e+00 6.3158770413306953e-01 + 2.0146322431901478e+00 1.4755322325973561e+00 7.5928577706696010e-01 + 2.3843483342561482e+00 1.4113445570079470e+00 8.8535691783396664e-01 + 2.7706439287419169e+00 1.2970600669567742e+00 1.0004976017392140e+00 + 3.1657599157799234e+00 1.1386726688584656e+00 1.0988213975348460e+00 + 3.5605747864401658e+00 9.4484384654522713e-01 1.1721896391386202e+00 + 3.9430993655560478e+00 7.2628538003556820e-01 1.2112684975297898e+00 + 4.3002841818445328e+00 4.9561450830983578e-01 1.2117179430845360e+00 + 4.6240083950967410e+00 2.7263813922375868e-01 1.1777155787448672e+00 + 4.9105046204646721e+00 8.3967203735017426e-02 1.1289981441492873e+00 + id 12487 + loc 1.1545869708061218e-01 5.1088944077491760e-02 1068 + blend 0.0000000000000000e+00 + interp 4.4465559670947669e-01:3.8396285538802544e-01:3.8556904513214030e-02:4.3379694199295521e-01:9.8718091910770045e-01:3.7656828787126895e-01:1.2637316066709221e+00:4.4465115015350959e-01:1.8872728541161947e+00:3.0244822330874072e-01:2.7304169478323077e+00:4.0952854628423424e-01:3.1173159753373678e+00:3.0922161008846960e-01:3.7375650635017825e+00 + CVs 20 + -1.5612305331599302e-01 1.8903643425897593e-01 -1.9609977566502731e-01 + -3.3740010808522458e-01 3.9244573743991729e-01 -3.4645078823694941e-01 + -5.3055317835631510e-01 5.9507734433085291e-01 -4.6665090991454239e-01 + -7.2182959065776497e-01 7.7931631123253342e-01 -5.5573728468101358e-01 + -8.9994857671932849e-01 9.3626257691261594e-01 -6.0513252174816001e-01 + -1.0439432143306231e+00 1.0583770924397153e+00 -6.1157605007752469e-01 + -1.1315248780507678e+00 1.1516000005879528e+00 -5.7947942530432783e-01 + -1.1540002127462259e+00 1.2442224621036093e+00 -5.1781899702293077e-01 + -1.1257439730444554e+00 1.3666388087371564e+00 -4.3956194290191458e-01 + -1.0845864614076499e+00 1.5244377153459578e+00 -3.5571707777364620e-01 + -1.0841184241075092e+00 1.6816470966378168e+00 -2.5284131671963728e-01 + -1.1617058274580092e+00 1.7532507924046081e+00 -9.2853455289000741e-02 + -1.3071880414940180e+00 1.6651416753709949e+00 1.3631967089914909e-01 + -1.5053437406225880e+00 1.3880188898784045e+00 4.0890303427074803e-01 + -1.7873360585262397e+00 8.9084244269805013e-01 6.9044729894498613e-01 + -2.2486859644081112e+00 9.0066874716951073e-02 8.9640624429380755e-01 + -2.8969435656345728e+00 -1.0189941643318938e+00 7.3002020587462713e-01 + -3.3640587575398504e+00 -1.9509436751294982e+00 9.7738320471729312e-02 + -3.3797022184858307e+00 -2.2347530557303612e+00 -2.4155521218003162e-01 + id 12488 + loc 5.7724452018737793e-01 1.8608336150646210e-01 411 + blend 0.0000000000000000e+00 + interp 5.3163360938873261e-01:3.4869842719337962e-01:8.0813591426705411e-02:3.4101203198827157e-01:1.0392456608934089e+00:3.7714119030229942e-01:1.7829406549408486e+00:3.2907169392589791e-01:2.3320425778220168e+00:4.6091411135996974e-01:2.9939919682827996e+00:5.2042131486361132e-01:3.1989201831770049e+00:5.3162829305263870e-01:3.6906098875693649e+00 + CVs 20 + -5.8099177583098749e-01 1.3818520776529081e-01 1.4794903689030914e-01 + -9.9594418209649738e-01 2.1061167862411725e-01 3.0285516116576555e-01 + -1.3767193173242667e+00 2.7116187882366116e-01 4.6071936662353197e-01 + -1.7683710752264978e+00 3.4299376979736290e-01 6.1581701881658524e-01 + -2.1715382991009466e+00 4.2310466814815995e-01 7.6384491776255203e-01 + -2.5873070934627500e+00 5.0828720538280114e-01 9.0112496975522971e-01 + -3.0199886870000592e+00 5.9521710682229800e-01 1.0254947338334284e+00 + -3.4771906361711915e+00 6.7538447216690456e-01 1.1335366021641273e+00 + -3.9621592441872644e+00 7.3138537004077353e-01 1.2186624902122458e+00 + -4.4693215334829395e+00 7.4035723959855937e-01 1.2782718406323337e+00 + -4.9866425417935467e+00 6.7414207657248437e-01 1.3219620823329570e+00 + -5.4916592789855114e+00 5.0541461524448517e-01 1.3629417992322868e+00 + -5.9535506700186005e+00 2.2632901188807564e-01 1.4030614838031299e+00 + -6.3457101211071745e+00 -1.4900161053188521e-01 1.4368808420039261e+00 + -6.6519616211549497e+00 -5.9876229853904750e-01 1.4639575208551634e+00 + -6.8628957356809428e+00 -1.1015939044490568e+00 1.4872336956305285e+00 + -6.9703093101472540e+00 -1.6279763190595258e+00 1.5027373324140818e+00 + -6.9752505208467799e+00 -2.1354563936647661e+00 1.5030915604091135e+00 + -6.9005636613704997e+00 -2.5929878124226202e+00 1.4921860039679016e+00 + id 12489 + loc 2.7290377020835876e-01 5.0438344478607178e-01 416 + blend 0.0000000000000000e+00 + interp 2.8442692071828418e-01:2.1622235216466201e-01:7.4980265727279494e-01:2.3448635380653157e-01:2.4681769526980162e+00:2.8442407644907702e-01:3.5941572035320344e+00 + CVs 20 + 7.5186685237378792e-01 1.3326675707050134e-01 -2.0308304450284648e-01 + 1.2534464676497588e+00 1.1768759919286470e-01 -3.8458281170254316e-01 + 1.7002378410490022e+00 5.1259778765503861e-02 -5.2523720415561459e-01 + 2.1524543195300132e+00 -3.3966055603821932e-02 -6.2071228678333945e-01 + 2.5982490708886021e+00 -1.3611380203907342e-01 -6.7017650830685904e-01 + 3.0294554370557454e+00 -2.5211185500965805e-01 -6.7346179648807381e-01 + 3.4400059299858370e+00 -3.8051657500907132e-01 -6.3312046685886525e-01 + 3.8267530832298728e+00 -5.1870729409281480e-01 -5.5571009103741709e-01 + 4.1927415678072801e+00 -6.5789600479271115e-01 -4.4972114414374181e-01 + 4.5442142748196295e+00 -7.9043190389475515e-01 -3.2256348222611669e-01 + 4.8835858019406135e+00 -9.1185316384218051e-01 -1.8668305658719114e-01 + 5.2088556510808548e+00 -1.0222460471290307e+00 -6.6764798574177886e-02 + 5.5208165456860385e+00 -1.1257998970334218e+00 1.0640808947664282e-02 + 5.8275757783010258e+00 -1.2282481641371035e+00 3.7322189318176990e-02 + 6.1368051029966617e+00 -1.3349179736589640e+00 1.9131851992359117e-02 + 6.4409391042973976e+00 -1.4441447034643471e+00 -3.9308849331741669e-02 + 6.7244696178916996e+00 -1.5479426606439226e+00 -1.3364963064398183e-01 + 6.9770857580845185e+00 -1.6377185975172335e+00 -2.5596765769082397e-01 + 7.2285835599257986e+00 -1.7405515571662045e+00 -3.9110530913132446e-01 + id 12490 + loc 7.7210980653762817e-01 8.3792817592620850e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7628714252077544e-01:2.9173565053455996e-01:6.8197632758338012e-02:3.4021424853040055e-01:1.1082269085169094e+00:2.8007351130238556e-01:2.0056153714949536e+00:3.7628337964935027e-01:2.8489255998705145e+00:3.2969183780644379e-01:3.2773845446877647e+00 + CVs 20 + -1.5805416907693154e-01 4.1376698031255210e-01 1.5515797405125781e-01 + -3.4960720072345070e-01 8.2542244548832944e-01 3.0033419583411336e-01 + -5.6012678177953068e-01 1.2421475313327548e+00 4.4821240417056796e-01 + -8.0380990010136588e-01 1.6563728316534765e+00 5.7968190430805111e-01 + -1.1013826491755678e+00 2.0452224770015541e+00 6.5700220087312766e-01 + -1.4551831845006147e+00 2.3718750695997617e+00 6.3990628080134382e-01 + -1.8341451439722969e+00 2.5866331018138755e+00 4.9149549855617702e-01 + -2.1604187092372680e+00 2.6303344489508422e+00 1.9621563275223664e-01 + -2.3425291281294029e+00 2.4803496376528154e+00 -1.7821454483943322e-01 + -2.3899367841189694e+00 2.1984265419105857e+00 -5.1617966853628028e-01 + -2.3758686811629337e+00 1.8251565036196700e+00 -7.4980890434922698e-01 + -2.3537877591990974e+00 1.3818699285579792e+00 -7.9771154304194691e-01 + -2.3430695533522776e+00 9.6713717276558531e-01 -6.5352951693181438e-01 + -2.3123465597996113e+00 6.1123966955490339e-01 -5.1426875332149868e-01 + -2.2206853671821167e+00 2.2539601283606822e-01 -5.2750467654060984e-01 + -2.0580644176013507e+00 -1.9124574611265768e-01 -7.3873248215507381e-01 + -1.8493771896496163e+00 -5.5120136495036864e-01 -1.1524337732064867e+00 + -1.6636635028936704e+00 -7.8206519129010688e-01 -1.6268579596788595e+00 + -1.6048896034700117e+00 -9.4595935569864742e-01 -1.8005318536040580e+00 + id 12491 + loc 8.0501623451709747e-02 4.3998789787292480e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8197052071376048e-01:3.2769888659571617e-01:8.3471533732608849e-02:3.2720288122852587e-01:1.0007456624317925e+00:3.7461074750844586e-01:1.9999543198060983e+00:3.8196670100855334e-01:2.6153561316292100e+00:2.6490695589655761e-01:3.3203869402694171e+00 + CVs 20 + 2.4315993570285610e-01 3.7565021163044410e-01 -1.8785222643785146e-01 + 3.7029326517557104e-01 7.0798510349780419e-01 -3.9453627043987466e-01 + 4.3746910640557696e-01 1.0188869769454985e+00 -6.0491241102067739e-01 + 4.5456154973219487e-01 1.3218287766422225e+00 -8.2176326685966816e-01 + 4.0880231667699207e-01 1.5987822710974866e+00 -1.0457719916085186e+00 + 2.8777344015850148e-01 1.8250908549213032e+00 -1.2728995128134184e+00 + 8.5242939695560072e-02 1.9657554459218924e+00 -1.4901290001135563e+00 + -1.8298113150636564e-01 1.9804919588557097e+00 -1.6713959579825846e+00 + -4.6408329003652637e-01 1.8489236849712589e+00 -1.7842312215295155e+00 + -6.8633840507244448e-01 1.6027858025330686e+00 -1.8170097734069626e+00 + -8.1504838225653609e-01 1.3028368039594327e+00 -1.7883064012990586e+00 + -8.5864989153342575e-01 9.9700588235039667e-01 -1.7275718802870510e+00 + -8.5582033993030404e-01 7.0680432374073265e-01 -1.6631114017409065e+00 + -8.6510043943583426e-01 4.1517310128756457e-01 -1.5986019923970476e+00 + -9.6730959696532159e-01 8.5822998705469722e-02 -1.5128196621063330e+00 + -1.3063375008224252e+00 -2.6696418209097550e-01 -1.3799694288605202e+00 + -2.0328516566530928e+00 -3.9998647206235394e-01 -1.2234656977556413e+00 + -2.8957678259645143e+00 2.0920286331135696e-01 -1.2320550644868504e+00 + -3.0473309426838862e+00 2.2423433314413388e-01 -1.2447469266703612e+00 + id 12492 + loc 4.8795858025550842e-01 1.9298036396503448e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6890010269376927e-01:2.6600504112132356e-01:3.2352988462941434e-02:2.3953954312161499e-01:9.3302976475962929e-01:2.8744967073486555e-01:1.5563144182958268e+00:2.8206121456663813e-01:2.0884018129249409e+00:2.7478665312567307e-01:2.9869431185251614e+00:3.6889641369274234e-01:3.7951486068301841e+00 + CVs 20 + -3.0798913748409867e-01 3.9739731871032785e-01 -3.1146787239345289e-02 + -6.0714985430210611e-01 8.1088552890659893e-01 -9.4542467542568343e-02 + -8.5939242147760153e-01 1.2352810748325473e+00 -2.2370989943038583e-01 + -1.0406290482576708e+00 1.6377590703637590e+00 -4.3858755876455813e-01 + -1.1629080032436498e+00 1.9808505416625253e+00 -7.3862235647102981e-01 + -1.1904593801168373e+00 2.2248372261039906e+00 -1.0562181733170308e+00 + -1.1288797384241069e+00 2.3616375087266572e+00 -1.4000609061859752e+00 + -1.1794176179825537e+00 2.3658481042007153e+00 -1.7555901244081145e+00 + -1.3548397365801872e+00 2.1653844319287394e+00 -2.0351677300110187e+00 + -1.5191595709994499e+00 1.7911178407193886e+00 -2.2295540326835992e+00 + -1.6409639480894000e+00 1.2931418719276813e+00 -2.3852227029855482e+00 + -1.7434655445191607e+00 7.3753017320312952e-01 -2.5795100076443402e+00 + -1.9463628618300763e+00 1.9638106577153935e-01 -2.8807511997014075e+00 + -2.3738463772696772e+00 -1.7044546211246436e-01 -3.2308650273289841e+00 + -2.9075449013986567e+00 -3.1095054684443163e-01 -3.5002243351239661e+00 + -3.4422949827618154e+00 -3.4830389327714900e-01 -3.6819206390290984e+00 + -3.8889404842501545e+00 -3.8446439599683663e-01 -3.7923579230184168e+00 + -4.2592983902306152e+00 -4.7428665673821296e-01 -3.8713791000617923e+00 + -4.8744917609431395e+00 -6.6660409237331486e-01 -3.9944131429033711e+00 + id 12493 + loc 7.8364121913909912e-01 1.8583215773105621e-01 1085 + blend 0.0000000000000000e+00 + interp 3.4493980891637605e-01:2.6870967360189502e-01:7.2436079635503015e-01:2.9599786643517123e-01:1.3514908384543498e+00:3.2635777882864964e-01:2.0007519597990959e+00:3.4493635951828688e-01:2.7661151674740978e+00:2.9454769742105918e-01:3.2474067771389148e+00:3.0396980363760179e-01:3.9880747946040267e+00 + CVs 20 + 3.8132083314390303e-01 3.3071824719268356e-01 -2.1896973371767442e-01 + 7.3758233089713332e-01 6.4876309977059354e-01 -3.8368159381119371e-01 + 1.1062920925741928e+00 9.3978498899445595e-01 -4.9783104402537348e-01 + 1.5082354837632714e+00 1.1922483631627596e+00 -5.4599313027300389e-01 + 1.9407764787061959e+00 1.3868205594376870e+00 -5.0914454488361249e-01 + 2.3875059433913637e+00 1.5070257079561449e+00 -3.8015895601429917e-01 + 2.8228253905353982e+00 1.5432324585379547e+00 -1.6421236161851049e-01 + 3.2186703276538973e+00 1.4940145207011697e+00 1.2227281235676257e-01 + 3.5513580753500897e+00 1.3646341119999186e+00 4.4978456139187473e-01 + 3.8123323331039578e+00 1.1665089943154949e+00 7.7770628665654429e-01 + 4.0084896256065328e+00 9.1275689387965842e-01 1.0661536955738176e+00 + 4.1490499742693148e+00 6.1643647403955903e-01 1.2871243141484192e+00 + 4.2407256157426900e+00 2.9495929778667773e-01 1.4296392850205921e+00 + 4.2988231964867891e+00 -3.1950776091067556e-02 1.4951895784652558e+00 + 4.3501730763627826e+00 -3.5038468092307995e-01 1.4819533218061109e+00 + 4.4309088239088936e+00 -6.5456492992931747e-01 1.4016594043230108e+00 + 4.5876927619082126e+00 -9.5502642057710685e-01 1.2699607282943168e+00 + 4.8208701951007900e+00 -1.2462605581521151e+00 1.0897300142579633e+00 + 4.9214259372192029e+00 -1.4920712659326518e+00 1.0155185791181240e+00 + id 12494 + loc 6.7633688449859619e-01 3.7539827823638916e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2230536927777190e-01:2.9697798094916950e-01:9.0788109504841052e-01:3.8874211934571723e-01:1.2235527036152869e+00:4.2230114622407916e-01:2.0006386039121060e+00:2.6823404812985885e-01:2.3699400149244680e+00:3.3423102724788317e-01:3.0665415763469719e+00:4.1202745730899620e-01:3.9645530387189050e+00 + CVs 20 + 6.3469734661266902e-02 5.5384235032015072e-01 -5.4878669237641065e-01 + 7.3194367303697827e-02 1.0025474031777555e+00 -9.0874209665709060e-01 + 7.0551341781408483e-02 1.4073446548155062e+00 -1.2039225249395984e+00 + 6.3616655381432630e-02 1.8034455791403992e+00 -1.4806387348021552e+00 + 4.6473188074200422e-02 2.1856793259121376e+00 -1.7243088296579616e+00 + 1.4035089483383723e-02 2.5553148913327330e+00 -1.9125566527315871e+00 + -3.9439454431093202e-02 2.9179242035087403e+00 -2.0114461367090675e+00 + -1.2221195549855590e-01 3.2772029623078609e+00 -1.9605162494675501e+00 + -2.3516233955054533e-01 3.5727801699616792e+00 -1.6208390984810448e+00 + -2.8089737570714290e-01 3.5340803742562352e+00 -1.0325099348977129e+00 + -2.2467504916694503e-01 3.2752569451971327e+00 -6.2978801991699451e-01 + -1.5472016811862843e-01 3.0324581934669679e+00 -3.6720894799269366e-01 + -8.9632360973392222e-02 2.7978537318556498e+00 -1.4000637949632577e-01 + -3.0450399988267041e-02 2.5418027894420225e+00 7.7257116798076897e-02 + 2.5073648542355914e-02 2.2254343297106147e+00 2.8014343761587934e-01 + 8.3450989883508409e-02 1.7793446259005974e+00 4.3184841880213976e-01 + 1.4443416321338559e-01 1.1942065515394864e+00 4.5165936240513849e-01 + 1.9636581233909425e-01 6.4243407962555499e-01 3.4348263248821403e-01 + 2.3409040969301800e-01 3.7311642368076658e-01 3.1339757748500480e-01 + id 12495 + loc 9.8856520652770996e-01 8.6524242162704468e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7109538915352461e-01:2.8188852968509948e-01:1.5269791070070104e-01:3.1383228230579913e-01:1.0594767242945418e+00:4.7109067819963307e-01:1.9961899250618405e+00:4.6552203693443556e-01:2.2423752628744200e+00:2.7481627086983068e-01:2.9831173936400903e+00:3.3439746368772627e-01:3.7377549738630891e+00 + CVs 20 + 3.9772157596608730e-02 2.6089219195023322e-01 5.8670144525363233e-02 + 9.9281883185435876e-02 4.7598264227195608e-01 3.9005583346037209e-02 + 1.5190604793195081e-01 6.8531581109009010e-01 -5.3509501129907489e-03 + 1.8584612578594734e-01 8.8917688631869363e-01 -5.9972222274983999e-02 + 1.9819676688382459e-01 1.0785795733041907e+00 -1.2703979316917491e-01 + 1.8616868282835056e-01 1.2434432501885826e+00 -2.0777871089161071e-01 + 1.4911438082523998e-01 1.3748129260000475e+00 -3.0064288976901143e-01 + 8.9318197752612891e-02 1.4680385315560924e+00 -4.0029502019189211e-01 + 1.1635609799850597e-02 1.5197219971770921e+00 -4.9975992758648163e-01 + -7.3359889995763913e-02 1.5235531674746066e+00 -5.9169214781279411e-01 + -1.4843685998333803e-01 1.4746639937382389e+00 -6.6696124006689128e-01 + -1.9653102222635674e-01 1.3815952905204518e+00 -7.1581466682079031e-01 + -2.1772157830305502e-01 1.2675004637792917e+00 -7.3504657992303657e-01 + -2.3464755151708505e-01 1.1517569187278760e+00 -7.3282716398649872e-01 + -2.7519830904756104e-01 1.0352919111931578e+00 -7.2090818851084815e-01 + -3.4508572264253623e-01 9.0813511190009810e-01 -6.9751311998198140e-01 + -4.3374511274985306e-01 7.6642626070658959e-01 -6.5463527156872225e-01 + -5.4128153448412053e-01 6.0936293011678200e-01 -5.9936991186525101e-01 + -6.9655444298065705e-01 4.2843143666081118e-01 -5.5077860337546314e-01 + id 12496 + loc 3.0821284651756287e-01 8.0816882848739624e-01 403 + blend 0.0000000000000000e+00 + interp 4.9140629559748789e-01:2.6256765522484615e-01:2.0492016760762288e-02:2.9325098551250478e-01:8.5999623990042084e-01:2.9870949389093704e-01:1.3526521623723973e+00:4.4533529738620475e-01:1.9243279166256295e+00:4.9140138153453194e-01:2.3683454791696699e+00:3.5657102116934719e-01:2.9421792061651395e+00:3.7278327191019084e-01:3.3724074615373798e+00 + CVs 20 + -2.3036563501761059e-02 1.4483647008763911e-01 -3.3357099862995697e-02 + -6.4210780504370416e-02 2.6374266321331097e-01 -6.5310371552513735e-02 + -1.1471297278336420e-01 3.7195122097276440e-01 -9.9765670982073090e-02 + -1.5833183418433791e-01 4.7595796864602291e-01 -1.3623951897672787e-01 + -1.9182675160867402e-01 5.7511364140889509e-01 -1.7355298507703390e-01 + -2.1210697845558737e-01 6.6960137532582720e-01 -2.1115108840376087e-01 + -2.1709486775778508e-01 7.6100274396919509e-01 -2.4893386379758931e-01 + -2.0701603628955395e-01 8.5199281027253448e-01 -2.8722507519137663e-01 + -1.8319494871526981e-01 9.4570074892442268e-01 -3.2653182737700753e-01 + -1.4591822004612459e-01 1.0479405994843169e+00 -3.6629454592186900e-01 + -9.5726767767665089e-02 1.1707509988489428e+00 -4.0456852104479002e-01 + -4.0923945837676112e-02 1.3341682938247330e+00 -4.3604628176757176e-01 + -9.1737807535946514e-03 1.5539382955667400e+00 -4.4967199326138185e-01 + -3.7478419854943157e-02 1.8077611846116011e+00 -4.3771566910568083e-01 + -1.2468490129610710e-01 2.0387524700234856e+00 -4.1323775871008356e-01 + -2.3441959873558060e-01 2.2235702997677684e+00 -3.9992457608542170e-01 + -3.5646152725281555e-01 2.3878439920864558e+00 -4.0667409655530518e-01 + -5.0332460321561601e-01 2.5526436217243340e+00 -4.2114535705925943e-01 + -6.1429311406512244e-01 2.6760626580697560e+00 -3.6355953087666182e-01 + id 12497 + loc 6.0523837804794312e-01 7.2238874435424805e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6277667940560498e-01:2.9645558903624614e-01:3.0620807857592913e-02:3.0223646479014904e-01:9.8587857095383080e-01:3.4462035963318050e-01:1.7574281060158625e+00:3.0466351505058670e-01:2.6454470264385561e+00:3.6277305163881096e-01:3.3452391043417178e+00 + CVs 20 + 1.3785576917865489e-01 2.9637034541620111e-01 -1.0877310859278494e-01 + 3.0340248748303361e-01 5.9415576522022284e-01 -2.0095769880052256e-01 + 4.8637586678337158e-01 8.8805437401731080e-01 -2.9706425306244777e-01 + 6.7999882200727302e-01 1.1740313950952048e+00 -4.0827597700938006e-01 + 8.8652152080518942e-01 1.4502375643227396e+00 -5.4267369795480636e-01 + 1.1114924824068413e+00 1.7057933652472790e+00 -7.2368908578402902e-01 + 1.3546006602345098e+00 1.9148624034905644e+00 -9.7615360702603016e-01 + 1.6075620758678590e+00 2.0551412446333823e+00 -1.3026589536622357e+00 + 1.8583432393606620e+00 2.1184694680691716e+00 -1.6869331588609096e+00 + 2.0945488462875463e+00 2.1068336846951476e+00 -2.1057339046326260e+00 + 2.3073640276216882e+00 2.0272661028127397e+00 -2.5372202649734126e+00 + 2.4899376044990595e+00 1.8849106793922576e+00 -2.9647702498537218e+00 + 2.6322922232020733e+00 1.6829529788189044e+00 -3.3768725043165944e+00 + 2.7175565606918499e+00 1.4331209371172764e+00 -3.7674039488385609e+00 + 2.7244671849207114e+00 1.1628576501271886e+00 -4.1348343031893409e+00 + 2.6426118403380103e+00 9.0940985981651101e-01 -4.4733815510244801e+00 + 2.4835719908159097e+00 7.0121580750356327e-01 -4.7750360558466474e+00 + 2.2768750831621900e+00 5.4949947095103391e-01 -5.0332546327219942e+00 + 2.0928777264294962e+00 4.7928806475028507e-01 -5.2134130954732036e+00 + id 12498 + loc 3.4935932606458664e-02 5.9421545267105103e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3334046903651674e-01:4.3333613563182638e-01:2.0987067283273597e-01:3.7646443051218165e-01:1.0425610794411504e+00:2.7864470777029088e-01:1.8477053091014648e+00:2.6421189494443942e-01:2.3126003678347677e+00:2.5915935428139764e-01:3.0765737667548203e+00:4.2092569147407732e-01:3.9655599844743916e+00 + CVs 20 + 2.7873807655674171e-01 3.5307593409339638e-01 -1.8777548500319147e-01 + 5.1478108743643736e-01 6.9235024860009353e-01 -3.7772332533483954e-01 + 7.2602926710300997e-01 1.0140438662061373e+00 -5.6006212216884643e-01 + 9.1809554990298159e-01 1.3203497767643446e+00 -7.2499597436195662e-01 + 1.0789599983792106e+00 1.5941128354750687e+00 -8.5271266512135824e-01 + 1.1868952246794982e+00 1.7915905904139799e+00 -9.0309973250253484e-01 + 1.2281795861825511e+00 1.9276236594814178e+00 -8.3363963304183708e-01 + 1.2173398758224763e+00 2.1022007372296958e+00 -7.1530621175132514e-01 + 1.1622250129405258e+00 2.3311113641896961e+00 -6.7438560032866746e-01 + 1.0640580590022979e+00 2.5491752056437460e+00 -7.7088409119109436e-01 + 9.5198391461394172e-01 2.6713596001208679e+00 -1.0054614278334406e+00 + 8.9614693534896983e-01 2.6668697743278043e+00 -1.3100130668348626e+00 + 9.5937340619695932e-01 2.5886272318902721e+00 -1.5828444306183163e+00 + 1.1435261067531723e+00 2.5452640542675984e+00 -1.7934891779689894e+00 + 1.4450523047608519e+00 2.6212484444402913e+00 -1.9890377669466035e+00 + 1.8849575088395736e+00 2.7697434378129353e+00 -2.2437296577380823e+00 + 2.5169965899703786e+00 2.8234718836487431e+00 -2.6796804108289640e+00 + 3.3950377236307672e+00 2.4804862156769785e+00 -3.2115381627790827e+00 + 3.4215769347972063e+00 2.2881423675616901e+00 -2.9345838042827923e+00 + id 12499 + loc 6.7748266458511353e-01 4.1120257228612900e-02 372 + blend 0.0000000000000000e+00 + interp 3.9954457752457928e-01:3.1954432701943436e-01:2.1933512293195268e-01:3.6426651649537306e-01:9.6148683330254026e-01:2.8955532289774732e-01:1.5366572200585895e+00:3.0236599444331469e-01:2.9941236898979282e+00:3.9954058207880405e-01:3.5969252938996470e+00 + CVs 20 + 6.9834643186188761e-01 4.3273813603075489e-01 -4.7617889478141245e-02 + 1.3249138774498235e+00 7.0750993213014168e-01 -1.4923993958987145e-01 + 1.9712578089900621e+00 8.6497250088919242e-01 -2.6019739546463200e-01 + 2.6692173273422490e+00 9.8691871469525083e-01 -3.0614307115637562e-01 + 3.3587992765667347e+00 1.1738434527847275e+00 -1.5726391860920613e-01 + 3.8367092806954797e+00 1.4559942170283666e+00 3.2692032376560648e-01 + 3.8811365116768517e+00 1.6771060857252216e+00 9.7010124032118894e-01 + 3.5976490527233898e+00 1.7569082865837489e+00 1.5322135930021532e+00 + 3.1096410278042059e+00 1.7123013005006127e+00 1.9478211196864019e+00 + 2.4980153939617438e+00 1.5522125618981650e+00 2.1823650912336170e+00 + 1.8453968724477914e+00 1.2681155830450528e+00 2.2161006639976106e+00 + 1.2351013889320481e+00 8.6273882488528464e-01 2.0477376990827905e+00 + 6.9557810944834764e-01 3.7015447744643909e-01 1.6981876855805673e+00 + 1.2345826127116229e-01 -1.7015455188968132e-01 1.2321793897631341e+00 + -7.1409513458632412e-01 -5.7074988351475131e-01 7.8677768767241807e-01 + -1.8287467273446898e+00 -5.4477206637158526e-01 5.2919771093911661e-01 + -2.9760071334259139e+00 -1.0660523438932445e-01 5.7268803144963243e-01 + -3.8936910822662849e+00 5.4018475888111883e-01 9.0538244390423595e-01 + -4.4127533870050994e+00 1.1455786278875406e+00 1.3384342175593629e+00 + id 12500 + loc 4.0580567717552185e-01 6.7239624261856079e-01 409 + blend 0.0000000000000000e+00 + interp 3.7014539679223118e-01:2.7836738853724363e-01:9.4897215033070359e-02:2.6595402524052830e-01:9.7863066194616144e-01:3.7014169533826330e-01:1.4016257797313212e+00:3.6055951329359098e-01:2.1112175181901871e+00:3.1236120803886364e-01:2.9966042755001676e+00:3.2861309819750040e-01:3.6409237921134752e+00 + CVs 20 + 4.7839989844354236e-01 9.4982198009891800e-02 -1.1882933486614125e-01 + 8.9888838716657160e-01 1.5626563429067697e-01 -2.6912058178472004e-01 + 1.3161040956807593e+00 2.0622789488612958e-01 -4.0547436054272062e-01 + 1.7349514933643815e+00 2.4664499552927632e-01 -5.1979273536115722e-01 + 2.1441242558508544e+00 2.7328631043030382e-01 -6.1742086086771564e-01 + 2.5361845544929165e+00 2.8472264098943922e-01 -7.0160623493637952e-01 + 2.9044865177389974e+00 2.7869693552847852e-01 -7.7665850854208840e-01 + 3.2427524616348338e+00 2.5222433178810788e-01 -8.4929954249941575e-01 + 3.5451888730643901e+00 2.0565516400679185e-01 -9.2785709198807698e-01 + 3.8022261273121774e+00 1.4493803736376876e-01 -1.0205095859091098e+00 + 4.0047063391154101e+00 8.2857223973384464e-02 -1.1316112498601465e+00 + 4.1566022777437137e+00 3.4240726184099124e-02 -1.2596279770682681e+00 + 4.2751959448473862e+00 7.0392934660672424e-03 -1.3999204003346026e+00 + 4.3780964812254322e+00 3.0724643121176065e-03 -1.5477263773148318e+00 + 4.4805287031921068e+00 2.0813378339861632e-02 -1.6994973996462019e+00 + 4.6007663465649795e+00 4.6554893090148042e-02 -1.8580552962673849e+00 + 4.7455575138475696e+00 5.9725641969135435e-02 -2.0268562500056246e+00 + 4.8909374869948747e+00 5.9216456845605947e-02 -2.1885130134082829e+00 + 4.9383456707097038e+00 -2.2614509963404306e-02 -2.3508671513671220e+00 + id 12501 + loc 8.5240638256072998e-01 1.0534773766994476e-01 1075 + blend 0.0000000000000000e+00 + interp 5.1248862616148971e-01:4.0971188340934050e-01:1.3815395885636994e-01:2.4976985843146246e-01:1.0142126708062009e+00:4.3803302353898138e-01:1.5112285510779673e+00:5.1248350127522813e-01:1.9998925685644504e+00:2.8867881169988302e-01:2.7817208556657946e+00:2.4897263801519526e-01:3.4610434419721567e+00 + CVs 20 + -2.2370383807060440e-02 2.5667341795315979e-01 2.1487968224483972e-01 + -1.6551092368426057e-02 5.3507380365152013e-01 4.3679202636212233e-01 + 5.5273949363639496e-03 8.2793421668560208e-01 6.4904714365426774e-01 + 7.9723621621662355e-03 1.1150318912736492e+00 8.6262693586707773e-01 + -5.4933617357608044e-02 1.3604968534053303e+00 1.0979592560804161e+00 + -2.0406449238672297e-01 1.5214856438909852e+00 1.3505403165512164e+00 + -4.3392833548722054e-01 1.5649748102906904e+00 1.5869872973831147e+00 + -7.3185570457975657e-01 1.4836834312811789e+00 1.7557364198134400e+00 + -1.0691793071992677e+00 1.2962721569426550e+00 1.8046086971596640e+00 + -1.3998670184863768e+00 1.0389613635123740e+00 1.7174684065611145e+00 + -1.6773865308299902e+00 7.4153381791088346e-01 1.5023060163564375e+00 + -1.8425360775036759e+00 4.3168867119053012e-01 1.1785778835267504e+00 + -1.8853991028155044e+00 1.4190128984967387e-01 8.0748963795983930e-01 + -1.9283858208621780e+00 -1.3183275887144008e-01 4.4448059201058532e-01 + -2.1210296704162865e+00 -3.9737224172621854e-01 9.7655572763870491e-02 + -2.5662610668161010e+00 -5.5510069487037184e-01 -2.0939087989820246e-01 + -3.2415787424894567e+00 -3.5872901220569853e-01 -3.5072403666433577e-01 + -3.7393090012776380e+00 1.0930111373863927e-01 -2.7781883989040002e-01 + -4.0312195515314606e+00 2.8129554277602331e-01 -3.8891039377389702e-01 + id 12502 + loc 1.3402090966701508e-01 3.5325177013874054e-02 397 + blend 0.0000000000000000e+00 + interp 4.6136514872185569e-01:3.1033533451290612e-01:4.7679197323289291e-02:4.5040098682086843e-01:6.1192915990435170e-01:2.4508228323156755e-01:1.5017607828054218e+00:3.9475869356867671e-01:2.1221446394487589e+00:4.6136053507036850e-01:2.7528718383869197e+00:2.8013101442176630e-01:3.1132013790606710e+00 + CVs 20 + -2.4448903310907022e-01 2.5097512530019617e-01 -1.0081046073994016e+00 + -4.3792262084817779e-01 3.1223057581244762e-01 -1.6393269831757977e+00 + -6.2416688916809981e-01 3.1028742396300169e-01 -2.1666529080113461e+00 + -8.2126134991601663e-01 3.0142080978362124e-01 -2.7044239653107569e+00 + -1.0251437519631983e+00 2.7912584462164020e-01 -3.2637779347880129e+00 + -1.2291781459663094e+00 2.3142568987822926e-01 -3.8536375853101523e+00 + -1.4284610093596375e+00 1.4222778157671812e-01 -4.4764691439175488e+00 + -1.6185868567555886e+00 -1.0498613230963239e-02 -5.1255328488476941e+00 + -1.7926107795197364e+00 -2.5198018123856736e-01 -5.7786259214022007e+00 + -1.9470001827289778e+00 -5.9722363446724769e-01 -6.3944356618915066e+00 + -2.0884542051357475e+00 -1.0423058419264011e+00 -6.9274858298728699e+00 + -2.2246178305588957e+00 -1.5667895192095345e+00 -7.3517055776747773e+00 + -2.3520492751578495e+00 -2.1424938020388229e+00 -7.6636092959963147e+00 + -2.4610275731619993e+00 -2.7386056427682592e+00 -7.8642478988924065e+00 + -2.5492005150225054e+00 -3.3220371864940894e+00 -7.9607211701116745e+00 + -2.6162884466998726e+00 -3.8693776573542236e+00 -7.9677378000721237e+00 + -2.6576962891215667e+00 -4.3681650081853380e+00 -7.9067298290833969e+00 + -2.6726750999227993e+00 -4.8126594344548206e+00 -7.8070684023955597e+00 + -2.6819203366340680e+00 -5.2304297970398341e+00 -7.7466681076125239e+00 + id 12503 + loc 8.0028069019317627e-01 1.5027277171611786e-01 1081 + blend 0.0000000000000000e+00 + interp 3.9455105292954296e-01:3.3160905259392298e-01:7.2595164351254304e-01:3.9089222010911867e-01:1.1725632433503028e+00:2.5405931201463366e-01:2.0600841888282804e+00:3.9454710741901367e-01:3.1289401703273194e+00:3.8625014863858370e-01:3.9975941716935117e+00 + CVs 20 + 2.1739855218564308e-02 4.9588439682279278e-01 -3.5555773860738676e-01 + -2.9819134508015155e-02 8.4541999854708771e-01 -5.4375182246457121e-01 + -1.1169203680682038e-01 1.1477101967596637e+00 -6.7748062510205154e-01 + -1.9739918501222398e-01 1.4246188396659734e+00 -8.0705380422004402e-01 + -2.8679215352064963e-01 1.6671844454129352e+00 -9.2936573636380171e-01 + -3.7836258227771924e-01 1.8609831879406800e+00 -1.0461089817974498e+00 + -4.7131646804379534e-01 1.9961980639890009e+00 -1.1696424107496739e+00 + -5.7155331466146031e-01 2.0929342520814886e+00 -1.3377179150797589e+00 + -6.9454720190255481e-01 2.2562410148432139e+00 -1.5837677686257510e+00 + -8.3234084124976326e-01 2.5789752872437366e+00 -1.7417918639790095e+00 + -9.4358517787676466e-01 2.8587183338131128e+00 -1.6756006700553938e+00 + -1.0229929517873497e+00 2.9962074892882402e+00 -1.4977435588618602e+00 + -1.0762097959244361e+00 3.0224769750449552e+00 -1.2782139688521199e+00 + -1.1049597316631441e+00 2.9692028027108179e+00 -1.0391958513464792e+00 + -1.1117777149396078e+00 2.8558867314615930e+00 -7.7949154442420898e-01 + -1.1028215689856857e+00 2.6806278180310037e+00 -4.7370486055646710e-01 + -1.0816435068141583e+00 2.3963124067727550e+00 -1.2919041956570987e-01 + -1.0454605798509844e+00 1.9799322534531218e+00 1.0661457038772737e-01 + -1.0037338858141456e+00 1.5763144160013367e+00 3.9750400503497818e-02 + id 12504 + loc 8.0120480060577393e-01 5.7000380754470825e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0401716506848606e-01:2.5234625389285242e-01:2.4838834606178029e-01:3.1886072714078539e-01:1.0002188096859361e+00:2.9266794076574321e-01:1.6002683333905838e+00:4.0401312489683538e-01:2.3106382586841336e+00:2.8780587972222121e-01:3.0845658375669016e+00:3.2985572109207612e-01:3.8178762182420085e+00 + CVs 20 + -1.8988785692209328e-01 2.9862809150598263e-01 1.5415536460649057e-01 + -3.7723274923545957e-01 5.7387449082119979e-01 2.6847454311087171e-01 + -5.6662362917910047e-01 8.3705339209101726e-01 3.5698741581613769e-01 + -7.6208870600252987e-01 1.0935044954508137e+00 4.2435290831432360e-01 + -9.6898914695175953e-01 1.3422881537999705e+00 4.6196818187236810e-01 + -1.1920214711505730e+00 1.5807051541435355e+00 4.5996903352212376e-01 + -1.4327867016755627e+00 1.8017018455715375e+00 4.0807678105292577e-01 + -1.6860774658073672e+00 1.9944319880552803e+00 2.9729003678593380e-01 + -1.9368465872554768e+00 2.1489095384375956e+00 1.2175503877569005e-01 + -2.1660949159703824e+00 2.2577579922647422e+00 -1.2182459314966987e-01 + -2.3667562374390303e+00 2.3149591278867980e+00 -4.3160028017048835e-01 + -2.5486099233724717e+00 2.3098970365967428e+00 -8.0183208274076567e-01 + -2.7263342626433906e+00 2.2185824766606306e+00 -1.2251252978860987e+00 + -2.9123692749864345e+00 1.9958567649877397e+00 -1.6888078707676311e+00 + -3.1211368221114677e+00 1.5877674786179790e+00 -2.1406869854787605e+00 + -3.3432760039292444e+00 1.0005806379786077e+00 -2.4619843050794925e+00 + -3.5624064764542438e+00 3.1230133267819982e-01 -2.5699202959537217e+00 + -3.8147671293451668e+00 -3.4893494576117612e-01 -2.4589645876451520e+00 + -4.0069281702535617e+00 -6.2741883055722458e-01 -2.3025119699461989e+00 + id 12505 + loc 3.3785769343376160e-01 4.8495072126388550e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0282621273436953e-01:2.8043684906853616e-01:3.6184559335120270e-01:4.0282218447224222e-01:1.0001744920172715e+00:3.1929134185378905e-01:1.7718597422810594e+00:2.9032889258889244e-01:2.5350613365531687e+00:4.0095768099122991e-01:3.0889252470721096e+00:2.9888402836945688e-01:3.7860846505567993e+00 + CVs 20 + -3.8327240617453229e-01 5.9127465119803990e-01 -5.2746583050744006e-02 + -7.2293271788536795e-01 1.2537621110105679e+00 -1.4692405288504493e-01 + -9.5463402578187195e-01 2.0155249525192391e+00 -3.3085395617079910e-01 + -1.0241055280049816e+00 2.8272261432801780e+00 -6.7278735103373855e-01 + -9.4894469154110972e-01 3.5607480814137391e+00 -1.2316410724509659e+00 + -8.2154131580486045e-01 4.0764046241157708e+00 -2.0093058101138919e+00 + -7.3260109616683622e-01 4.2496161954742657e+00 -2.9313201886062981e+00 + -7.2249777111645486e-01 4.0176003446773176e+00 -3.8438483566773600e+00 + -7.6022323514275092e-01 3.4287919676657315e+00 -4.5913058573007079e+00 + -7.4415168487989980e-01 2.5873807062739660e+00 -5.0809718389120286e+00 + -5.5906560098774127e-01 1.6405448037854482e+00 -5.2653122735707942e+00 + -1.8402662499583172e-01 7.6080962086911574e-01 -5.1684925279959701e+00 + 2.8295785903527904e-01 5.5361465565707091e-02 -4.8708383360040761e+00 + 7.0235743566920061e-01 -4.9895319627359658e-01 -4.4619405842543349e+00 + 9.5784580787471629e-01 -9.7500792582023355e-01 -4.0556739076272956e+00 + 9.0326976519328384e-01 -1.4662614298392487e+00 -3.9658147053289339e+00 + 5.9441182907479573e-01 -1.5121872060022779e-01 -4.8287175656529566e+00 + 7.4722821782592908e-01 2.4412460691230875e-01 -4.6835322541949935e+00 + 5.8852561202289422e-01 5.4677402136796271e-01 -4.8462267107474535e+00 + id 12506 + loc 5.0806391239166260e-01 2.0050506293773651e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5617736442140472e-01:3.8563576943344668e-01:8.9819864553590989e-01:4.5617280264776050e-01:1.2374406465486780e+00:4.4338664390395999e-01:1.8680949816944645e+00:4.4047009127152892e-01:2.1079171165761474e+00:2.8909150634194708e-01:2.6336694514540664e+00:3.2384351676191281e-01:3.0297060866731012e+00:2.6636499182385243e-01:3.9999724179861964e+00 + CVs 20 + -1.4981178705762482e-01 4.1909687748142704e-01 -1.1289638232224805e-01 + -3.1214555622040496e-01 8.1018354318073482e-01 -1.8140957922593148e-01 + -5.0307537882311815e-01 1.1706005156515178e+00 -2.1977429328726705e-01 + -7.2774348374065889e-01 1.4968353260511833e+00 -2.2869572542454747e-01 + -9.8227148303760048e-01 1.7810847962012002e+00 -2.0400929034306481e-01 + -1.2612585332412538e+00 2.0174807278519520e+00 -1.4124155034175867e-01 + -1.5538012726830646e+00 2.1988406293947356e+00 -4.0921362416707630e-02 + -1.8445951727691206e+00 2.3204976657545586e+00 8.7386035856959809e-02 + -2.1197266484462913e+00 2.3854395000148174e+00 2.2852240685201619e-01 + -2.3682143649629124e+00 2.4041098491408350e+00 3.6588278337272795e-01 + -2.5838798494291719e+00 2.3914335376922762e+00 4.8643140841563526e-01 + -2.7672429207381173e+00 2.3598834037050054e+00 5.8513279067219248e-01 + -2.9232770885504573e+00 2.3147408254960999e+00 6.6433721833638681e-01 + -3.0575699504898473e+00 2.2596816071321206e+00 7.3161590501998985e-01 + -3.1691606319801369e+00 2.2159019836288842e+00 8.0341016247898067e-01 + -3.2510850705684886e+00 2.2541029915180015e+00 9.3282228675200907e-01 + -3.3187883444443766e+00 2.4598837322340392e+00 1.2746076745682720e+00 + -3.4507641333763961e+00 2.6259704822106631e+00 1.9053368926853238e+00 + -3.4650270132691912e+00 2.5040021675801545e+00 1.8185428557064520e+00 + id 12507 + loc 9.8626124858856201e-01 2.3593679070472717e-01 416 + blend 0.0000000000000000e+00 + interp 4.2251777705430471e-01:4.1856760978170149e-01:3.4854096142220947e-01:2.8581493157779952e-01:9.7832946002941412e-01:3.4855048896523544e-01:1.4006092511951478e+00:4.2251355187653417e-01:1.9531666101203431e+00:3.6642073694591132e-01:2.5493916356508031e+00:3.2792726588640936e-01:3.4364323954156237e+00 + CVs 20 + -5.0776065533544545e-01 1.3964013887506208e-01 9.1479317506823477e-02 + -8.5392962282138196e-01 1.7918691716186963e-01 1.6263029260010203e-01 + -1.1673274479797893e+00 1.8018606547020810e-01 2.1105158318825581e-01 + -1.4950294487465314e+00 1.6946403376489716e-01 2.2709949032153068e-01 + -1.8301956491278997e+00 1.4101510482264923e-01 2.1216503606201820e-01 + -2.1651954584833697e+00 9.0560122840454005e-02 1.6781615521442539e-01 + -2.4938178772204571e+00 1.6752884890856024e-02 9.3658943725956456e-02 + -2.8113936445420871e+00 -8.0129322454830509e-02 -1.0429263976021064e-02 + -3.1126118364100126e+00 -1.9901706248414186e-01 -1.4263591144593357e-01 + -3.3911937287638163e+00 -3.3650565575387370e-01 -3.0283122698579124e-01 + -3.6460098808300678e+00 -4.8836890834594460e-01 -4.9328219923624639e-01 + -3.8905501080395606e+00 -6.6228564125129319e-01 -7.0738466788146370e-01 + -4.1413205735841458e+00 -8.8356364921177666e-01 -9.1446075776114599e-01 + -4.3919690086285232e+00 -1.1665117454887313e+00 -1.0734251287214747e+00 + -4.6224877574608580e+00 -1.4982639308257966e+00 -1.1685662449076850e+00 + -4.8226810571215886e+00 -1.8599126711771243e+00 -1.2010266132425595e+00 + -4.9904718191140454e+00 -2.2363465082430505e+00 -1.1694049904663315e+00 + -5.1258820152950317e+00 -2.6102031327585857e+00 -1.0772184970030101e+00 + -5.2550556769401080e+00 -2.9543130850101291e+00 -9.8316024986917205e-01 + id 12508 + loc 4.0451991558074951e-01 4.5491553843021393e-02 411 + blend 0.0000000000000000e+00 + interp 4.5093776424995763e-01:3.4031936635559873e-01:5.0598824560990785e-01:4.5093325487231517e-01:1.0655039535819939e+00:4.0137737784517891e-01:1.9981653147641800e+00:3.5110626372578968e-01:2.5052791507030472e+00:3.4439723124691862e-01:3.0522499897524531e+00:3.6862091543234066e-01:3.9158640980972672e+00 + CVs 20 + -1.3712606860630111e-03 9.2641302354658894e-02 -6.6659939305816729e-01 + -8.8974343390014893e-03 1.0672579061542736e-01 -1.2009272715709554e+00 + 1.3425258462705786e-02 9.5147496396332909e-02 -1.6918873540251671e+00 + 6.6488790276853088e-02 7.5734850401680931e-02 -2.1712050318133893e+00 + 1.4272723152221389e-01 5.1166619086873144e-02 -2.6300546817539829e+00 + 2.3527082000517321e-01 2.4231711592975325e-02 -3.0629065738884718e+00 + 3.3916207931175635e-01 -6.3917416597474297e-03 -3.4650270000553167e+00 + 4.5112882439843355e-01 -4.7609808673063858e-02 -3.8348227942859969e+00 + 5.6813512909467045e-01 -1.0583448080736746e-01 -4.1797099002547178e+00 + 6.8693130400475089e-01 -1.8690387259085273e-01 -4.5100059698001731e+00 + 8.0449209117776710e-01 -2.9919973048391402e-01 -4.8302327633510078e+00 + 9.1866312867562339e-01 -4.5103034133509690e-01 -5.1425910097085925e+00 + 1.0280290701001777e+00 -6.4952556324505784e-01 -5.4492228660551030e+00 + 1.1306133909980904e+00 -8.9923698523132378e-01 -5.7476085600308586e+00 + 1.2236732652630817e+00 -1.1959396581716004e+00 -6.0257004799713503e+00 + 1.3044492746389325e+00 -1.5207975151359578e+00 -6.2652151196141688e+00 + 1.3708441950837227e+00 -1.8550766419838918e+00 -6.4564814060183844e+00 + 1.4185669939239260e+00 -2.2032195303376283e+00 -6.6045042780401690e+00 + 1.4476475355672886e+00 -2.5171084424461196e+00 -6.7182057394880434e+00 + id 12509 + loc 2.1454292535781860e-01 2.7089127898216248e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3691534583953409e-01:2.7082907443477161e-01:3.7749571281459393e-02:3.3530164235927346e-01:6.9455139915913100e-01:2.7258905123650545e-01:1.2051512088748355e+00:2.8578608235637826e-01:2.0066800448378830e+00:3.3691197668607570e-01:2.7054316663898899e+00:2.8473612524730829e-01:3.1874564689116198e+00 + CVs 20 + 5.0931242204281091e-01 4.4930029538348676e-01 2.7693470968509692e-01 + 9.5457226673464368e-01 8.3124548763496664e-01 4.9839142457538310e-01 + 1.4026382827183124e+00 1.1951818012263444e+00 7.0075784423205922e-01 + 1.8558872256470960e+00 1.5810316727181433e+00 9.6135816378648276e-01 + 2.2603523374226024e+00 1.9792501841843717e+00 1.3323502179028626e+00 + 2.5691743372502338e+00 2.3553366585021429e+00 1.8216687092721306e+00 + 2.7474434324753751e+00 2.6759991476522424e+00 2.4158200555467793e+00 + 2.7448779348353933e+00 2.9136719187117937e+00 3.1049400567843715e+00 + 2.4950872328901150e+00 3.0156501050283522e+00 3.8446360641111843e+00 + 2.0385463596190641e+00 2.9165180496181593e+00 4.4977286602803748e+00 + 1.5726868688944056e+00 2.6202960962737696e+00 4.9705293548701768e+00 + 1.2953182102240044e+00 2.2144540222518083e+00 5.2885205132993836e+00 + 1.2368578229715110e+00 1.8295717141403798e+00 5.5191405619199871e+00 + 1.2450368391228177e+00 1.4241324442607368e+00 5.7191256535269179e+00 + 1.2138748900464482e+00 8.4993899712872167e-01 5.8887324173691304e+00 + 1.0559085188017781e+00 9.0598604641491831e-02 5.9775445959026916e+00 + 6.5700686131518249e-01 -7.4661631033129794e-01 5.9388444458334702e+00 + 1.7047870960726727e-02 -1.4623761221324116e+00 5.7837613382716322e+00 + -7.8103483279419100e-02 -1.7843509098723698e+00 5.7406983629303268e+00 + id 12510 + loc 9.3743783235549927e-01 9.5701724290847778e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2214588010634874e-01:2.6320004745072140e-01:6.9278448248825009e-02:3.6778696608788120e-01:1.0182332858089478e+00:2.0678831537930598e-01:1.4930501750148941e+00:2.2052040114959320e-01:2.6186628380495183e+00:2.6707265180877560e-01:2.8606933937617351e+00:4.2214165864754771e-01:3.4830755108878666e+00 + CVs 20 + 1.0812500541668134e-01 3.0747293882469290e-01 -1.8787495377940766e-01 + 2.4215856182347134e-01 6.5266150580874449e-01 -3.9713241014298156e-01 + 3.9052492886761192e-01 1.0348955263839452e+00 -5.9948045728772370e-01 + 5.3979000061470150e-01 1.4437211964897596e+00 -7.9592045750515861e-01 + 6.7696772779887682e-01 1.8651324802722837e+00 -1.0056470552167811e+00 + 7.9013517280943046e-01 2.2792287313800963e+00 -1.2455183579024660e+00 + 8.7257315313743944e-01 2.6604483505291157e+00 -1.5286602557634756e+00 + 9.2662405619515931e-01 2.9788374316268369e+00 -1.8634579551006976e+00 + 9.6893936428211680e-01 3.2151108929690198e+00 -2.2417149559831886e+00 + 1.0284038887432390e+00 3.3772855250626703e+00 -2.6376621837775005e+00 + 1.1254218429509175e+00 3.4790000314091531e+00 -3.0272532162251711e+00 + 1.2601841675047674e+00 3.5192129545633017e+00 -3.3997142158207954e+00 + 1.4247648160934798e+00 3.4941565105281995e+00 -3.7486779827277208e+00 + 1.6088205105831208e+00 3.4124225409732132e+00 -4.0578910200966725e+00 + 1.7996154626525034e+00 3.2915507986923767e+00 -4.3144559412825148e+00 + 2.0001396668431219e+00 3.1420914552929462e+00 -4.5147588593721810e+00 + 2.2288500503666677e+00 2.9582120127775249e+00 -4.6562701792372110e+00 + 2.4522989013322274e+00 2.7340642376428006e+00 -4.7560637934514558e+00 + 2.5164713739762163e+00 2.5396938685839912e+00 -4.8449669022217421e+00 + id 12511 + loc 7.1885770559310913e-01 2.6596966385841370e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9580839774828280e-01:3.9580443966430534e-01:6.0911843279692501e-01:2.8898328599032169e-01:1.1027056777204740e+00:3.4674924950629521e-01:2.0009034519229640e+00:3.7905484713739807e-01:2.4743366080224787e+00:2.9087907775661581e-01:3.0169690789617931e+00:2.8432611265990942e-01:3.9830658323724593e+00 + CVs 20 + -2.1425165441522989e-01 4.5947749676980570e-01 1.4319626541026298e-01 + -4.2592789983496349e-01 9.2723083623613145e-01 3.0325478221217173e-01 + -6.3772451295135524e-01 1.3842210469692766e+00 5.0647477618835834e-01 + -8.3745031368262524e-01 1.8106266243081961e+00 7.6831411283913909e-01 + -1.0277377485895294e+00 2.1860804006146335e+00 1.0999476406278583e+00 + -1.2358599913336943e+00 2.4866026884070607e+00 1.4969099925081986e+00 + -1.4840988502246724e+00 2.6941166181696330e+00 1.9286293065793794e+00 + -1.7751081608743375e+00 2.8021340635059366e+00 2.3591156025178708e+00 + -2.1008170994614050e+00 2.8085097066185973e+00 2.7626624728476639e+00 + -2.4469310371254678e+00 2.7129973180370066e+00 3.1228847191903677e+00 + -2.7935407056579207e+00 2.5188144514861186e+00 3.4304266560405163e+00 + -3.1169371794893816e+00 2.2302947259125294e+00 3.6819834815515526e+00 + -3.3780273025100631e+00 1.8589346478995563e+00 3.8682365976364648e+00 + -3.5303737006223157e+00 1.4400511827997657e+00 3.9714873366359797e+00 + -3.5654114867647091e+00 1.0053767728353313e+00 3.9888419128148112e+00 + -3.4966537128496680e+00 5.5823432675199014e-01 3.9351917484659533e+00 + -3.2827856704326983e+00 1.2756417820682886e-01 3.8357395109490495e+00 + -2.8852408496877495e+00 -9.2083436775126870e-02 3.7196825765670316e+00 + -2.4681758532972315e+00 -4.0594260252447389e-02 3.5857272059539875e+00 + id 12512 + loc 9.1521114110946655e-02 3.8679853081703186e-01 403 + blend 0.0000000000000000e+00 + interp 4.6446059593009126e-01:3.3379580499095662e-01:9.1072965760168545e-02:3.3410327992534372e-01:1.0000212760952141e+00:3.5079057758633625e-01:1.8445708007543029e+00:4.6445595132413198e-01:2.1667237382206297e+00:3.9354423546431533e-01:2.6190054095564239e+00:2.6422003581957315e-01:3.3102022812673835e+00 + CVs 20 + -1.7046443362192867e-01 2.2019033515066663e-01 6.1366468630723425e-02 + -3.3098898105469460e-01 4.3710590391433102e-01 1.5239952039208920e-01 + -4.8434374406456121e-01 6.5544630516386593e-01 2.6700715016006926e-01 + -6.2791519685356867e-01 8.6933857105275947e-01 4.0330444247697000e-01 + -7.5582555121641060e-01 1.0662775276746799e+00 5.6257911190410381e-01 + -8.5914383001694872e-01 1.2319875303043630e+00 7.4208134997135522e-01 + -9.2830805671122452e-01 1.3549848217522849e+00 9.3344735515423705e-01 + -9.5672734661103109e-01 1.4296572500438285e+00 1.1207156798020741e+00 + -9.4472249019377463e-01 1.4600415307771266e+00 1.2861721155864614e+00 + -9.0021944079018967e-01 1.4591970851429907e+00 1.4227752051826699e+00 + -8.3224514667714389e-01 1.4401451642563718e+00 1.5385029370907506e+00 + -7.4366225308754452e-01 1.4047104721934369e+00 1.6593370095522051e+00 + -6.3498050124011129e-01 1.3460845736209843e+00 1.8019896999564875e+00 + -5.1629178048328239e-01 1.2672208110326573e+00 1.9563729815958755e+00 + -3.9460806967795364e-01 1.1667004402117225e+00 2.1204978343952119e+00 + -2.6148437032252914e-01 1.0072429136074976e+00 2.3233028858874585e+00 + -1.2081662527795241e-01 7.5922487196782640e-01 2.6001330060536327e+00 + -1.5153673779953719e-02 5.0311416246215712e-01 2.9374787016991162e+00 + 2.1134005357511344e-02 4.3163871589645897e-01 3.1545428733544920e+00 + id 12513 + loc 1.3941536843776703e-01 6.9760143756866455e-02 406 + blend 0.0000000000000000e+00 + interp 4.6642869429336353e-01:3.7461895441856369e-01:1.3303805120590140e-01:3.8649884680908386e-01:1.1106465970796529e+00:4.3254280586543514e-01:1.6785549144176186e+00:4.0536248040065886e-01:2.0015906025789327e+00:3.4312180334728293e-01:2.8613094561930934e+00:4.6642403000642063e-01:3.3683054278782345e+00:4.0621298149154172e-01:3.8741990782146889e+00 + CVs 20 + 1.1394886048007871e-01 1.0893949332242285e-01 -1.4318632277700039e-01 + 2.5879161852691279e-01 1.7610141159675630e-01 -2.5734160007746698e-01 + 3.9546229649383985e-01 1.8843508467097497e-01 -3.8268201510504884e-01 + 5.2696429432293157e-01 1.6509512892913816e-01 -5.1916493766791949e-01 + 6.5272543596507016e-01 1.1196270270823858e-01 -6.5911788346774514e-01 + 7.7175561435062345e-01 3.5785955124846502e-02 -7.9742431043636464e-01 + 8.8377197980386413e-01 -5.6733559734449712e-02 -9.3034506831880459e-01 + 9.8913236552458872e-01 -1.5988769662673924e-01 -1.0546966235615824e+00 + 1.0893511967258873e+00 -2.6909957687703334e-01 -1.1672996341080863e+00 + 1.1874070560640770e+00 -3.8048509763502014e-01 -1.2651756889255092e+00 + 1.2854808628396526e+00 -4.8966024732381219e-01 -1.3465658631048816e+00 + 1.3849082355737941e+00 -5.9208353145615100e-01 -1.4114374160100953e+00 + 1.4861213448838082e+00 -6.8366089151774290e-01 -1.4617516615956809e+00 + 1.5883467839199885e+00 -7.6112398742512122e-01 -1.5015514965744390e+00 + 1.6905486036294035e+00 -8.2120008051771221e-01 -1.5370191687321826e+00 + 1.7910725916482706e+00 -8.5939601100574670e-01 -1.5794689482236410e+00 + 1.8856163443688085e+00 -8.7253064341271547e-01 -1.6437145738383903e+00 + 1.9658180241441221e+00 -8.6123106682511097e-01 -1.7433532623120409e+00 + 2.0700129067839153e+00 -8.1719650956769352e-01 -1.7876028318080193e+00 + id 12514 + loc 4.8438122868537903e-01 3.7814190983772278e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7063147964959534e-01:2.9367334309750248e-01:1.4463694153208329e-01:2.8022645753817899e-01:9.7925179437955667e-01:3.1644139352405076e-01:1.9257689468555987e+00:4.7062677333479885e-01:2.2256291190357569e+00:3.6606391026806367e-01:3.0084838753101901e+00:4.3927816414893989e-01:3.4663380492750351e+00 + CVs 20 + 4.4370860512158994e-01 4.4648778407441869e-01 -6.1417384797918355e-02 + 6.7697631279883352e-01 7.9555896423668637e-01 -1.4208601133061236e-01 + 8.3600377644901136e-01 1.1123708176881939e+00 -2.2667893182598409e-01 + 9.7643103514393736e-01 1.4341795880758090e+00 -3.1119527023299748e-01 + 1.0865442394570408e+00 1.7438490041087116e+00 -3.9715632177505389e-01 + 1.1540410892745800e+00 2.0200158367351522e+00 -4.8611579987214965e-01 + 1.1642008831593638e+00 2.2344464898626621e+00 -5.7855345305702421e-01 + 1.0955714726479562e+00 2.3302688937397118e+00 -6.6492568201228397e-01 + 9.9458030718581025e-01 2.1378522241345319e+00 -6.2807182267261008e-01 + 1.1477376545189579e+00 1.9397089038628983e+00 -4.1301816124743929e-01 + 1.2273654891338872e+00 1.8788665445860042e+00 -3.1977987213586950e-01 + 1.2291916249248627e+00 1.7687434846648027e+00 -2.5058959581863671e-01 + 1.1913754704960393e+00 1.5885924072470434e+00 -1.7097372648138795e-01 + 1.1234395533899681e+00 1.3471607309076981e+00 -7.6518412963408056e-02 + 1.0146742848368497e+00 1.0794729532129055e+00 3.0380177534244684e-02 + 8.2657113389613746e-01 8.5131704318734591e-01 1.4658118929468006e-01 + 4.2944087246623242e-01 8.0114921093621561e-01 2.4179625330644544e-01 + 1.7830687989132621e-01 1.5530651949785905e+00 -4.5881977336290763e-02 + 1.7736498597334882e-01 1.6475978279299341e+00 -4.7973823193985424e-02 + id 12515 + loc 3.8124442100524902e-01 9.1354680061340332e-01 372 + blend 0.0000000000000000e+00 + interp 5.1041967892907170e-01:3.8088754034444849e-01:5.3165211872306384e-02:3.9549718055393601e-01:8.6123142311421375e-01:4.8810802259418468e-01:1.1138695862626420e+00:3.3514037196477525e-01:1.9493889587011228e+00:5.1041457473228247e-01:2.9491737216153022e+00:3.5195684365554175e-01:3.5980472561462182e+00 + CVs 20 + -3.1085695372233590e-01 5.7729232068938896e-01 -1.8993003291736382e-01 + -6.0118437624594279e-01 1.1144915648863336e+00 -3.8226230614059731e-01 + -8.5131199523081591e-01 1.6012014330927715e+00 -5.8382301168300987e-01 + -1.0418694051134434e+00 2.0514472622833417e+00 -7.9953126739418878e-01 + -1.1083275357370330e+00 2.4968594945833464e+00 -1.0743210145960214e+00 + -9.4983111803155229e-01 2.8976559115523832e+00 -1.4412410177299584e+00 + -5.3269489141697401e-01 3.1417637071860218e+00 -1.8594285703896496e+00 + 9.0557482480909002e-02 3.1441387164652577e+00 -2.2621128113462139e+00 + 8.3340128410895553e-01 2.8861621617819688e+00 -2.6116501443752447e+00 + 1.6046911070002836e+00 2.3864516987380355e+00 -2.8900241652639767e+00 + 2.3311528730216167e+00 1.6910628053624699e+00 -3.0852063066112660e+00 + 2.9633775818847496e+00 8.9519717311846392e-01 -3.1873634279054071e+00 + 3.5021896205111820e+00 1.7346320815130190e-01 -3.2080765310412942e+00 + 3.8970436305174685e+00 -2.7912052722442371e-01 -3.2226775114276802e+00 + 4.0177707319967446e+00 -4.6810768526207647e-01 -3.2848345486441377e+00 + 4.0924281091730634e+00 -6.1340285669731553e-01 -3.3255777520839334e+00 + 4.3602492912782731e+00 -7.2420466456077848e-01 -3.3774575516537828e+00 + 4.8414719674195137e+00 -7.0693099497867129e-01 -3.5149597234295267e+00 + 5.5111821743414025e+00 -4.3887446782024142e-01 -3.8397354026651205e+00 + id 12516 + loc 1.4485894143581390e-01 3.5411635041236877e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0200882511022504e-01:2.9056952880960368e-01:1.9606809469550956e-02:3.2747008660143395e-01:6.9606633423128672e-01:2.5224653773677513e-01:1.1244235430874012e+00:5.0200380502197395e-01:2.0169840486607238e+00:2.8839882549266688e-01:2.7110793261155193e+00:4.6562519333957531e-01:3.2635498487970800e+00 + CVs 20 + 4.8161997389690314e-01 4.2431896452032919e-01 2.1070363124242275e-01 + 8.6496813962060026e-01 7.9292629247013013e-01 4.3813489287077878e-01 + 1.2141788601194614e+00 1.1385349808098524e+00 7.0564820627973357e-01 + 1.5411103000226412e+00 1.4797091866118484e+00 1.0457263844576485e+00 + 1.8113565394912556e+00 1.8009791483487627e+00 1.4743170410195094e+00 + 1.9875645619401912e+00 2.0770094838116830e+00 1.9942330553175638e+00 + 2.0350346940969599e+00 2.2739832420922799e+00 2.5884967122834968e+00 + 1.9342383404961996e+00 2.3556460870401863e+00 3.2145357204459843e+00 + 1.6997385224018384e+00 2.2929078694008029e+00 3.8083080118577359e+00 + 1.4022050755489968e+00 2.0849047364350977e+00 4.3023310771834682e+00 + 1.1331374496102664e+00 1.7716455151132235e+00 4.6694263962231117e+00 + 9.4120429614687950e-01 1.4007604272922600e+00 4.9233612086174974e+00 + 8.4388550769593373e-01 1.0114684644849818e+00 5.0825866922312590e+00 + 8.5729799151182529e-01 6.5248028651045187e-01 5.1629587090331706e+00 + 9.7484636909372735e-01 3.7451922916755803e-01 5.1834513378785596e+00 + 1.1311939265056064e+00 1.9657009191110042e-01 5.1772186577058594e+00 + 1.2605436495849256e+00 1.1145323773977250e-01 5.1776795282920300e+00 + 1.3383723401104888e+00 7.0640314815933192e-02 5.1855802741314534e+00 + 1.3965221728886155e+00 -2.1759189334476436e-01 5.2343173235482592e+00 + id 12517 + loc 4.7464993596076965e-01 4.6351668238639832e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2425142944192448e-01:3.2424818692763008e-01:2.8511818510627462e-01:3.0881969191053327e-01:9.9938564039624600e-01:2.8067040998234777e-01:1.7957177173115286e+00:2.7493934959134431e-01:2.4280264981548747e+00:2.4975552890315647e-01:3.0434585809725681e+00:2.6693156437300197e-01:3.8972230722295067e+00 + CVs 20 + -4.0399156323043878e-01 6.3096722885784040e-01 -9.5426541361368328e-02 + -7.4350840167086218e-01 1.2218877885205726e+00 -2.5746351679772389e-01 + -1.0066871716716119e+00 1.7843995834055999e+00 -4.8959971438750755e-01 + -1.1832997866715576e+00 2.3019426872618252e+00 -7.8789259090757646e-01 + -1.2667484756166436e+00 2.7312591537842459e+00 -1.1441974914669326e+00 + -1.2786317244050989e+00 3.0361630230615724e+00 -1.5212685422787011e+00 + -1.2491738661717948e+00 3.2197414289521777e+00 -1.8674751859623702e+00 + -1.1982542098730566e+00 3.2986443215414116e+00 -2.1821323327407183e+00 + -1.1530942818682803e+00 3.2339960629953550e+00 -2.5112298892728564e+00 + -1.1309712310741267e+00 2.9682467458038881e+00 -2.8456251449877463e+00 + -1.0810422975726908e+00 2.5008556190758657e+00 -3.1175103580072339e+00 + -9.1130942108838031e-01 1.9007945920301323e+00 -3.2666359630130053e+00 + -5.8352586388399397e-01 1.2370629305267167e+00 -3.2860277334581758e+00 + -1.5189853328757111e-01 5.1041326314863367e-01 -3.2028633525722991e+00 + 2.2912200025109802e-01 -3.1566942430300982e-01 -3.0784514756198775e+00 + 2.5046727054466411e-01 -1.3056511276233456e+00 -3.1829117338901805e+00 + -7.6441651645378617e-01 -6.4028211952985703e-01 -4.7554565191323093e+00 + -5.4215659067038935e-01 3.2182553418596188e-01 -4.7414971379674089e+00 + -3.4907412945518379e-01 8.5547854893200526e-01 -4.9223666647402622e+00 + id 12518 + loc 8.2227742671966553e-01 6.7440927028656006e-02 397 + blend 0.0000000000000000e+00 + interp 3.7042876690853926e-01:2.5323712553301519e-01:3.6086864795920748e-01:2.7602763331300356e-01:1.0096155667859408e+00:3.1369886421482168e-01:1.7046342109355899e+00:2.7140600737610093e-01:2.1336816128464728e+00:2.9911762134960646e-01:3.0005539213593768e+00:3.7042506262087022e-01:3.7948195596747514e+00 + CVs 20 + -1.0028494635977556e+00 1.2327504331637526e-01 3.8230640813102285e-01 + -1.6377066903145974e+00 7.9433339817119530e-02 6.9427193139642873e-01 + -2.2048985388499389e+00 -2.4935021832099891e-02 1.0031405310854593e+00 + -2.8153186990050183e+00 -1.3843192934606258e-01 1.3204443052887793e+00 + -3.4634647711576227e+00 -2.7569490986622847e-01 1.6396402913981785e+00 + -4.1359778951895647e+00 -4.5266544699386224e-01 1.9581674207141291e+00 + -4.8083220841225343e+00 -6.8257686090670444e-01 2.2771003499129292e+00 + -5.4480611305508804e+00 -9.7603099091374346e-01 2.5949089402053396e+00 + -6.0213913433769495e+00 -1.3351325843218560e+00 2.9078222088703343e+00 + -6.4980004684222648e+00 -1.7484441423777708e+00 3.2175522417027942e+00 + -6.8603733841422283e+00 -2.1950794293606637e+00 3.5284676608580048e+00 + -7.1174956618646723e+00 -2.6535736525724873e+00 3.8372516894307025e+00 + -7.2979022899757986e+00 -3.1125668842961169e+00 4.1334647768690669e+00 + -7.4258681761651131e+00 -3.5699363983399879e+00 4.4103510618445272e+00 + -7.5126971193723726e+00 -4.0287697111742320e+00 4.6643070042030272e+00 + -7.5598288810430141e+00 -4.4990647601867337e+00 4.8869311498690786e+00 + -7.5635362751636128e+00 -4.9914658673036998e+00 5.0652857869250241e+00 + -7.5261594285490219e+00 -5.5018859016590209e+00 5.1923214220349569e+00 + -7.5428992918575810e+00 -5.9888383868682311e+00 5.3168292436066560e+00 + id 12519 + loc 7.0839005708694458e-01 9.7536258399486542e-02 1068 + blend 0.0000000000000000e+00 + interp 4.1025178441550569e-01:3.9712011984039286e-01:3.4000421702768191e-01:4.1024768189766153e-01:1.0033273523202595e+00:3.9942128672623201e-01:1.9997890011945703e+00:3.1461870778332734e-01:2.4993982875114908e+00:2.9450946785061294e-01:3.4149486327982084e+00 + CVs 20 + -2.7182524557468446e-02 4.8322827614279962e-01 6.1578144009530433e-02 + -9.2654773601002410e-02 9.7542745152162835e-01 1.3106189241846966e-01 + -2.0591419204759642e-01 1.4618797496598959e+00 1.7743301395894726e-01 + -3.8756531003712286e-01 1.9249600500840174e+00 1.9078070330708652e-01 + -6.5376423469656497e-01 2.3361187007525999e+00 1.7333041011379069e-01 + -1.0018439874745890e+00 2.6674327266701185e+00 1.3945841046946517e-01 + -1.4180206793120353e+00 2.9032536292073994e+00 1.1758388439749634e-01 + -1.8708344285145713e+00 3.0373084551237679e+00 1.3319260942297639e-01 + -2.3288637840218751e+00 3.0772435287511564e+00 2.0775064591749876e-01 + -2.8214603337206134e+00 2.9792030656060886e+00 3.9954856475047745e-01 + -3.3050432894650430e+00 2.5295772781734804e+00 7.8658598302910598e-01 + -3.4557171236770574e+00 1.8163673308244037e+00 1.1154362592084874e+00 + -3.3874151519957767e+00 1.2411922486825100e+00 1.2324403870445682e+00 + -3.2313989361035595e+00 7.4471101189122002e-01 1.2454338599338364e+00 + -3.0223523375515504e+00 3.1102346875885678e-01 1.1775885675039834e+00 + -2.8549731657212347e+00 -2.3885267260682630e-03 1.0491109554589340e+00 + -2.7970034571049336e+00 -1.7545793417479411e-01 9.0091556219655455e-01 + -2.8497746843716358e+00 -2.0808417802938317e-01 7.7053992815639860e-01 + -2.8316157438703873e+00 -3.5124213085014383e-01 6.1833467266648590e-01 + id 12520 + loc 2.0140999555587769e-01 5.7388013601303101e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2316268514526190e-01:2.7368826642274047e-01:8.7223720338700739e-02:2.5576770230308182e-01:1.0506582821238588e+00:3.6396884758532516e-01:1.9274048896788751e+00:2.7526178331723472e-01:2.7182277936987296e+00:3.6118010657639249e-01:3.0420479387104722e+00:4.2315845351841047e-01:3.6049469328822581e+00 + CVs 20 + 8.2478202811955975e-02 2.7333975614749972e-01 -1.6508099040472232e-01 + 1.9555581381033729e-01 5.3321591471994734e-01 -3.4857897963038370e-01 + 3.2564435763796140e-01 7.7822535427488349e-01 -5.3193516714971012e-01 + 4.6640843151612238e-01 1.0067434842573879e+00 -7.1366020107649453e-01 + 6.1664862437523715e-01 1.2220521994572919e+00 -9.0132664613719404e-01 + 7.7202317178728963e-01 1.4307262811043007e+00 -1.0948713250023738e+00 + 9.2645191095524693e-01 1.6371109631822067e+00 -1.2880918619922401e+00 + 1.0774344548696999e+00 1.8383334793913757e+00 -1.4741836388651863e+00 + 1.2290325536002629e+00 2.0260390446532934e+00 -1.6530041694178803e+00 + 1.3879134412925409e+00 2.1916909969667167e+00 -1.8361703218648255e+00 + 1.5590972782945047e+00 2.3244280004537585e+00 -2.0456245332522691e+00 + 1.7429433684761824e+00 2.4020798069013352e+00 -2.3076229037608793e+00 + 1.9303430099182524e+00 2.3882248050562489e+00 -2.6243120731010547e+00 + 2.1109075564678923e+00 2.2724335147496815e+00 -2.9439949781741896e+00 + 2.2903907067239775e+00 2.0766451289986616e+00 -3.2389637411111920e+00 + 2.4699281420218582e+00 1.7779482074202977e+00 -3.5412599074978917e+00 + 2.6197546596590828e+00 1.3257851250765686e+00 -3.8751357029234867e+00 + 2.6996689601219059e+00 7.5349854426416718e-01 -4.2117798867721481e+00 + 2.8303686738658698e+00 3.9328039219284228e-01 -4.4317970862299711e+00 + id 12521 + loc 2.3748600482940674e-01 1.8410281836986542e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7549499905964504e-01:2.4537308140051250e-01:2.7123215866841588e-01:4.7549024410965446e-01:1.0217525215411627e+00:3.5700736595596821e-01:1.6328131196457361e+00:2.7248474048514709e-01:2.3420718559719593e+00:3.2380082764805573e-01:3.2267966093604992e+00:3.6468271038627476e-01:3.9175562353685849e+00 + CVs 20 + 6.0574977737034533e-02 3.3642784426643924e-01 -6.7489555494022607e-02 + 5.2111551364927455e-02 6.3166658570576462e-01 -1.3527092632465551e-01 + 1.1095721655616009e-02 9.1886758885823494e-01 -2.2165535587706481e-01 + -4.1663212308956865e-02 1.2005952565741018e+00 -3.3101172427468284e-01 + -1.0776766112285052e-01 1.4652732252498426e+00 -4.6182115584108707e-01 + -1.8732677117847252e-01 1.6971440097959931e+00 -6.0521525365994888e-01 + -2.8178894943302413e-01 1.8821281147116236e+00 -7.4929884830439164e-01 + -3.9158669734326679e-01 2.0134035112467550e+00 -8.8416754611822845e-01 + -5.1429218852843850e-01 2.0913588279352444e+00 -1.0033604361296655e+00 + -6.4890341840562760e-01 2.1177173381237338e+00 -1.1066692899607609e+00 + -7.9576155017905348e-01 2.0883365036042760e+00 -1.1983416021332127e+00 + -9.5255860306390083e-01 1.9952975729253764e+00 -1.2820103570518602e+00 + -1.1147913187143523e+00 1.8344146737721296e+00 -1.3592742612840230e+00 + -1.2775308636633125e+00 1.6078242389416830e+00 -1.4302784114305180e+00 + -1.4317898411557908e+00 1.3207168645912963e+00 -1.4934784219016723e+00 + -1.5406314734053876e+00 9.8457802720358978e-01 -1.5392316984997159e+00 + -1.5210925595098987e+00 6.4495943281155255e-01 -1.5415542551795143e+00 + -1.3570549643321241e+00 3.7410489278369952e-01 -1.4839290917520334e+00 + -1.1879083543422855e+00 -8.3251538582124196e-03 -1.4454970197905439e+00 + id 12522 + loc 2.4706809222698212e-01 2.4175388738512993e-02 413 + blend 0.0000000000000000e+00 + interp 4.8311748321739384e-01:3.8316042264681677e-01:5.2181393387115238e-01:3.9057568114595792e-01:1.0164022893846758e+00:4.8311265204256171e-01:1.9258413387526656e+00:3.7210350355341909e-01:2.1705782528158255e+00:3.2901274207025732e-01:3.6882029148948359e+00 + CVs 20 + -5.1386468951309841e-02 1.8925029642197566e-01 -1.0608499701619285e+00 + -1.2236105828090663e-01 2.6529928764600108e-01 -1.7539106811901126e+00 + -1.8663990589095975e-01 3.0865897135572962e-01 -2.3552237188664282e+00 + -2.3078583564240338e-01 3.5186488605572680e-01 -2.9727803961267218e+00 + -2.4220390920449777e-01 3.8157226278420259e-01 -3.6000599832030242e+00 + -2.1196993569145950e-01 3.8060524803930712e-01 -4.2264747092248518e+00 + -1.3724689792742373e-01 3.3085048726740474e-01 -4.8405560237387162e+00 + -1.9772768972539913e-02 2.1534997035773651e-01 -5.4299714309120040e+00 + 1.3476782236362980e-01 2.1904691861082348e-02 -5.9775576013403331e+00 + 3.1243337568499807e-01 -2.5131753710381499e-01 -6.4619890566806086e+00 + 4.9000098278445992e-01 -5.9287303739219688e-01 -6.8620540035927853e+00 + 6.4428458114578546e-01 -9.7944063686172456e-01 -7.1618665554532832e+00 + 7.6487645580683283e-01 -1.3832307955520420e+00 -7.3616449890256961e+00 + 8.5531158538395347e-01 -1.7805376686806329e+00 -7.4792472170253195e+00 + 9.1854868542846557e-01 -2.1556876349531153e+00 -7.5418327211744858e+00 + 9.4971667235176560e-01 -2.5007671927297359e+00 -7.5761261786555707e+00 + 9.4708708743452452e-01 -2.8187215761547471e+00 -7.5975719612504191e+00 + 9.2312687791096715e-01 -3.1252910325367766e+00 -7.5982647676440429e+00 + 8.4981164096884632e-01 -3.4941022223078395e+00 -7.4714795765353736e+00 + id 12523 + loc 7.9836517572402954e-02 6.0342377424240112e-01 409 + blend 0.0000000000000000e+00 + interp 4.4408110099104736e-01:4.2118435205140481e-01:3.6930345706120971e-04:4.0160038884216148e-01:3.9235047566113945e-01:4.4407666018003750e-01:9.9782813605916432e-01:3.3396607234570430e-01:1.4712705313103698e+00:3.9783297906986614e-01:2.0418397593188287e+00:2.5502316147241566e-01:2.6840194074284942e+00:3.6967436548836957e-01:3.0633516291958029e+00:3.0297138488183289e-01:3.6804056789029405e+00 + CVs 20 + 5.2059819925623096e-01 2.1780920762353817e-01 -2.7470877848420178e-01 + 9.5952306675977916e-01 3.9105464717788568e-01 -5.5536641367975514e-01 + 1.3885949526850552e+00 5.5989479759448157e-01 -8.5463221322665073e-01 + 1.8091727804864908e+00 7.1594846458208616e-01 -1.1854925137675350e+00 + 2.1838865562219456e+00 8.2715353108794376e-01 -1.5535066807208309e+00 + 2.4867302911646618e+00 8.7395596405391196e-01 -1.9547624534778461e+00 + 2.7156108932269603e+00 8.5057149454876402e-01 -2.3812451276194393e+00 + 2.8902421958098601e+00 7.5366679584540353e-01 -2.8305494956474200e+00 + 3.0358831252439935e+00 5.7503532084312781e-01 -3.2951941920036720e+00 + 3.1646798119405997e+00 3.0273150987424180e-01 -3.7522637556288156e+00 + 3.2767632304560750e+00 -6.1120558725669127e-02 -4.1714695327306250e+00 + 3.3677558818625855e+00 -4.7616646796997109e-01 -4.5384617446237190e+00 + 3.4418507785758798e+00 -8.8792504636300817e-01 -4.8667437350621832e+00 + 3.5136567325908725e+00 -1.2772879710258791e+00 -5.1819539095143599e+00 + 3.6036326064933886e+00 -1.6675074610438638e+00 -5.5186881262142284e+00 + 3.7435618652083140e+00 -2.1114007140950148e+00 -5.9314563070582214e+00 + 3.9694689053957664e+00 -2.6445568138822675e+00 -6.4468242945439833e+00 + 4.2839131850909888e+00 -3.2480162510246364e+00 -7.0078710392091628e+00 + 4.5871759205913474e+00 -3.8454088538512541e+00 -7.5216618880310797e+00 + id 12524 + loc 5.9185254573822021e-01 3.9447265863418579e-01 416 + blend 0.0000000000000000e+00 + interp 4.4103415895338344e-01:4.4102974861179395e-01:8.3611010708489419e-02:2.5284893231944378e-01:1.0013283527124319e+00:2.7894524681670602e-01:1.9191302470668972e+00:2.7511729204996671e-01:2.7673250745714055e+00:2.9976060292192463e-01:3.7169423773563053e+00 + CVs 20 + -5.3342224032629737e-01 7.6880567870124747e-02 1.4908076118994285e-01 + -8.5716462875067534e-01 4.2241489561261086e-02 3.1327886053654325e-01 + -1.1577059944029695e+00 -3.8239805061123233e-02 4.9025037050338793e-01 + -1.4953093271997173e+00 -1.2559783736794972e-01 6.5582352367170194e-01 + -1.8685604088827126e+00 -2.2309565215029536e-01 8.0069759868396251e-01 + -2.2754262331965802e+00 -3.3388174639235102e-01 9.1314869007217625e-01 + -2.7069491361260960e+00 -4.5917572153597397e-01 9.7812162878912379e-01 + -3.1474153958202971e+00 -5.9800503123629078e-01 9.8426849576861175e-01 + -3.5826321225410425e+00 -7.4855825340810234e-01 9.2825154375463170e-01 + -3.9995031188958996e+00 -9.0756181923824708e-01 8.1201854772607973e-01 + -4.3699098990479586e+00 -1.0646923077979789e+00 6.4747089305401184e-01 + -4.6559945042412227e+00 -1.2043311963030021e+00 4.6689524464882060e-01 + -4.8593830722062679e+00 -1.3264087193411966e+00 3.0253390278380543e-01 + -5.0378268616782034e+00 -1.4637727991574752e+00 1.6172441499768830e-01 + -5.2349427284046488e+00 -1.6527717039944685e+00 4.8900552837913169e-02 + -5.4376202414813450e+00 -1.8940701908090898e+00 -2.2112784715706657e-02 + -5.6162913761053961e+00 -2.1674643543983070e+00 -3.5418671392272061e-02 + -5.7573451837033414e+00 -2.4553931355682024e+00 1.8650460706491567e-02 + -5.9885270239980679e+00 -2.8482618744200492e+00 8.1806871989897778e-02 + id 12525 + loc 8.9866763353347778e-01 2.3065330088138580e-01 411 + blend 0.0000000000000000e+00 + interp 4.3866915270307527e-01:3.3795671376073966e-01:2.5638181299909590e-01:2.9136028007566261e-01:9.7197874047441590e-01:4.3866476601154825e-01:1.3499428556739839e+00:3.5605793708919575e-01:1.9933327703531034e+00:3.8120888864628794e-01:2.8855761347069522e+00:4.1275987597963615e-01:3.4541907757413437e+00 + CVs 20 + -6.3561294908057031e-01 2.0276423946688993e-01 2.0868034132240643e-01 + -1.1347549235511334e+00 2.7990072807422556e-01 3.9624920126958851e-01 + -1.6072838714586857e+00 2.9977540342901782e-01 5.7030506219280852e-01 + -2.1003496597725282e+00 2.8793036846932984e-01 7.3216450028903601e-01 + -2.6043955759776685e+00 2.4202042391286083e-01 8.7563248978537023e-01 + -3.1078092446772074e+00 1.6395174883653629e-01 9.9972337440596237e-01 + -3.5986118402374299e+00 5.7710800779857241e-02 1.1060965176449273e+00 + -4.0660490695096971e+00 -7.4075720375200937e-02 1.1956100835385000e+00 + -4.5028705426500091e+00 -2.3038954367943609e-01 1.2705758598752332e+00 + -4.9053084934662063e+00 -4.1106211158748929e-01 1.3377652868555971e+00 + -5.2750809491786077e+00 -6.1790042439152337e-01 1.4040318812942352e+00 + -5.6231538593866812e+00 -8.5582256228145681e-01 1.4702635377525219e+00 + -5.9619929784235062e+00 -1.1311623733091145e+00 1.5346108604592454e+00 + -6.2944740366263519e+00 -1.4494264143723838e+00 1.6000352166202914e+00 + -6.6133780958257962e+00 -1.8148152297289402e+00 1.6722356864562602e+00 + -6.9051387330684619e+00 -2.2290856995298483e+00 1.7506152251737974e+00 + -7.1551321741171874e+00 -2.6898967361299584e+00 1.8280149696650230e+00 + -7.3583586937291390e+00 -3.1861052943604764e+00 1.9024472131988310e+00 + -7.6035265284125888e+00 -3.6240325625884648e+00 1.9915198539192256e+00 + id 12526 + loc 5.1493078470230103e-01 2.4700300395488739e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6564517368514768e-01:2.6028611927633211e-01:7.3100254605547699e-02:3.2128708046766752e-01:9.5689588544581938e-01:2.5613196455994186e-01:1.6965309254435668e+00:4.6564051723341088e-01:2.1324502084493622e+00:2.8691624019236778e-01:2.9456400180512086e+00:2.7328486999704216e-01:3.5298912779188609e+00 + CVs 20 + -1.8052046236817054e-01 2.8243208830639799e-01 2.5483464884767937e-01 + -3.1381250456341137e-01 5.7282262633767234e-01 5.2620564194513653e-01 + -4.4512456661277111e-01 8.5081215570890323e-01 8.1416291028727328e-01 + -5.8178799401836201e-01 1.1092234498540923e+00 1.1072794332313565e+00 + -7.1770610162509396e-01 1.3446821266055768e+00 1.4042338347207215e+00 + -8.4619157083862528e-01 1.5492979069180646e+00 1.7167122104386978e+00 + -9.6875142994815278e-01 1.7216457457653822e+00 2.0584003606206602e+00 + -1.0938813654356006e+00 1.8623395806662819e+00 2.4370074879702113e+00 + -1.2225721541017129e+00 1.9632665719806577e+00 2.8484278647943051e+00 + -1.3446307879667452e+00 2.0116166901404262e+00 3.2785618693924845e+00 + -1.4494514241104559e+00 1.9897517390638462e+00 3.7053812966304798e+00 + -1.5260551681488481e+00 1.8851491979003887e+00 4.0996229519899465e+00 + -1.5662889918525815e+00 1.7019491223085321e+00 4.4334909241299085e+00 + -1.5738098196452190e+00 1.4569231636474775e+00 4.6938293280645880e+00 + -1.5550268225188923e+00 1.1768672308847443e+00 4.8716222886363463e+00 + -1.5087466464485277e+00 9.1734352548698539e-01 4.9472810896456334e+00 + -1.4464499418229488e+00 7.3246965180382118e-01 4.9252885435360954e+00 + -1.3898469466844319e+00 5.6508563282787627e-01 4.8745994570501114e+00 + -1.3127951883404367e+00 1.7634917827152460e-01 4.9340682531369353e+00 + id 12527 + loc 8.9216274023056030e-01 9.1921669244766235e-01 1076 + blend 0.0000000000000000e+00 + interp 2.9518817918718171e-01:2.8661262058018311e-01:8.1703281014227391e-01:2.6854318293124285e-01:1.2793893798684515e+00:2.8078206130813738e-01:2.1531158230009750e+00:2.9182424851455696e-01:2.9787287509762930e+00:2.9518522730538987e-01:3.8929270531411024e+00 + CVs 20 + 1.8399846204606043e-01 3.5643376949178734e-01 1.3666902520607958e-02 + 3.8724446067260676e-01 7.3305123280583939e-01 -1.8593683039084999e-02 + 6.1331403462283129e-01 1.1247318953207430e+00 -7.2530203490891565e-02 + 8.6840358833847442e-01 1.5285299050157457e+00 -1.4204080491904678e-01 + 1.1561427725543778e+00 1.9412077417327909e+00 -2.4456476543607841e-01 + 1.4679570594358289e+00 2.3506874311596189e+00 -4.2144380985573610e-01 + 1.7792018394659210e+00 2.7187034742129637e+00 -7.2628076708730283e-01 + 2.0535362205865284e+00 2.9581591073447453e+00 -1.1944718582125287e+00 + 2.2245879707189307e+00 2.9428620659948130e+00 -1.7748759412846371e+00 + 2.2503442254272872e+00 2.6668179836304455e+00 -2.3048549702307355e+00 + 2.1745962575289850e+00 2.2461794655042033e+00 -2.7031267260653444e+00 + 2.0701505619908804e+00 1.7709169594608596e+00 -2.9995299190135043e+00 + 1.9911048501239501e+00 1.2950151477497527e+00 -3.2601145794872961e+00 + 1.9577775451210180e+00 8.8908532120776584e-01 -3.5539411706214135e+00 + 1.9650434652567541e+00 6.5305001295351961e-01 -3.9260750677199683e+00 + 1.9864581765481892e+00 6.9552444120964396e-01 -4.3396369667662196e+00 + 1.9514442898451987e+00 1.0401616191552394e+00 -4.6371223775266026e+00 + 1.8717024212493019e+00 1.4485125078277019e+00 -4.8328387089059310e+00 + 1.8638183537384856e+00 1.7653217564044037e+00 -5.2027028678886813e+00 + id 12528 + loc 5.5238622426986694e-01 6.2451738119125366e-01 1081 + blend 0.0000000000000000e+00 + interp 4.3974543146644268e-01:3.3728814642703403e-01:1.5188690677277406e-01:3.9833250944551479e-01:1.3824016477990471e+00:3.4464736274747471e-01:1.9897682208153369e+00:4.3974103401212805e-01:2.3699089638935273e+00:3.6667707759146079e-01:2.9834228884906571e+00:4.0274844823533767e-01:3.4508333815430503e+00 + CVs 20 + 2.1104454825432856e-02 5.2983051276617987e-01 5.4736722436307161e-01 + 8.4038213277550927e-02 9.2941541371275660e-01 8.8112839292514011e-01 + 1.6936405806913030e-01 1.2805449881008149e+00 1.1387238037411711e+00 + 2.7100354007037153e-01 1.6160594784188587e+00 1.3737529541919897e+00 + 3.9053684054755455e-01 1.9261167579302831e+00 1.5758327047176830e+00 + 5.2348678068267440e-01 2.1987035892818039e+00 1.7326700269726061e+00 + 6.5936322955218563e-01 2.4199882352084749e+00 1.8317541236409527e+00 + 7.8171048731863824e-01 2.5748401506064731e+00 1.8696824814256141e+00 + 8.6293363470144002e-01 2.6469355944649036e+00 1.8641362204811880e+00 + 8.8085471479354216e-01 2.6541161410609080e+00 1.8671140170537206e+00 + 8.8774216396534111e-01 2.6455161135110981e+00 1.8670009850146174e+00 + 8.9778786652827192e-01 2.5889933807908396e+00 1.8256869967846241e+00 + 8.9376320535283127e-01 2.4671933106119592e+00 1.7608379732618262e+00 + 8.7102066268796907e-01 2.2832395443354376e+00 1.6918441403943638e+00 + 8.3208114215812579e-01 2.0522350268567164e+00 1.6388872660815448e+00 + 7.8239375261183075e-01 1.8156273843434976e+00 1.6330267209550140e+00 + 7.2592677972368391e-01 1.6172204774359975e+00 1.6971790048252695e+00 + 6.6092257749286976e-01 1.4029492636060372e+00 1.8440618782964016e+00 + 5.8208245844982931e-01 9.9945002804472249e-01 2.1144060964232700e+00 + id 12529 + loc 7.5377786159515381e-01 3.5336518287658691e-01 406 + blend 0.0000000000000000e+00 + interp 3.9996180749123811e-01:3.5527251212144700e-01:2.1748383419466499e-03:3.3835005145400165e-01:7.1340346774634378e-01:3.5923011892222589e-01:1.1525656489989711e+00:3.9626491619599680e-01:1.8321336724774535e+00:3.9995780787316321e-01:2.0494982584554648e+00:3.2668646377016819e-01:2.6586883896733950e+00:3.9105296112237842e-01:3.0083369790086110e+00:3.0411985917429274e-01:3.5377957628704388e+00 + CVs 20 + -1.8652553851557394e-01 2.6111273053087708e-01 -4.6875775870549578e-02 + -2.9709518068176127e-01 4.5403716516354253e-01 -1.2112611130493896e-01 + -4.0964681684062881e-01 6.2697591319495216e-01 -1.9803502203675580e-01 + -5.5012082167676879e-01 7.9577822382405961e-01 -2.7164361422069017e-01 + -7.1798115635514426e-01 9.5520274024607177e-01 -3.4131728360129859e-01 + -9.0979622341567334e-01 1.1008271562913650e+00 -4.0604898434569564e-01 + -1.1179747791565586e+00 1.2299446435309083e+00 -4.6547767896277426e-01 + -1.3330691936949759e+00 1.3425062171116546e+00 -5.1993242471064516e-01 + -1.5521539454086055e+00 1.4399872399407827e+00 -5.6667481385864482e-01 + -1.7804627961844850e+00 1.5229259534689170e+00 -5.9819160623635603e-01 + -2.0168567659647900e+00 1.5919870523529036e+00 -6.0777793116869516e-01 + -2.2468227819885427e+00 1.6518678072791575e+00 -5.9477073691837490e-01 + -2.4584927324038781e+00 1.7088902331194185e+00 -5.6080934771032898e-01 + -2.6524264965941340e+00 1.7653599379050162e+00 -5.0520325734475724e-01 + -2.8319670839567208e+00 1.8208651902590800e+00 -4.2752522327672060e-01 + -2.9957287588488759e+00 1.8757941338632667e+00 -3.2926121628690208e-01 + -3.1404659162313968e+00 1.9312871155827906e+00 -2.1182944796866798e-01 + -3.2597511967014339e+00 1.9889846487650500e+00 -7.7788974354730644e-02 + -3.3084354099856488e+00 2.0590303050944865e+00 6.0726193009881579e-02 + id 12530 + loc 1.7979545891284943e-01 8.6085271835327148e-01 1084 + blend 0.0000000000000000e+00 + interp 3.2681762009120457e-01:2.6207922801677397e-01:4.6674618445815996e-02:3.2681435191500369e-01:9.9096590872667367e-01:3.0245837073708970e-01:1.6623986397259956e+00:3.0283502358443748e-01:2.8235370533912150e+00:2.8651074182721392e-01:3.3120798568238641e+00 + CVs 20 + -1.3181527337044882e-01 4.9278651935575757e-01 4.2050756553946350e-01 + -2.3830509960153162e-01 9.1605365509562953e-01 7.2293954701617169e-01 + -3.1544790487128815e-01 1.3126118823737276e+00 9.8416895412514616e-01 + -3.7889798687961640e-01 1.7077373767191326e+00 1.2317896312991437e+00 + -4.5264316115800923e-01 2.1026873351342252e+00 1.4573826645036854e+00 + -5.5589518634069601e-01 2.4909475791972246e+00 1.6531050192607672e+00 + -6.9770927287754581e-01 2.8603679145579104e+00 1.8080794615434415e+00 + -8.7770666129562436e-01 3.2009071307566357e+00 1.9119245438489640e+00 + -1.1077436005753762e+00 3.5150282377761197e+00 1.9392126798075850e+00 + -1.3845481346796997e+00 3.7771425223988984e+00 1.8069875907733395e+00 + -1.6447825091611132e+00 3.9195024039385817e+00 1.4503319520839117e+00 + -1.8321155170431900e+00 3.8552470889216330e+00 8.7263582120096417e-01 + -1.9308348025588309e+00 3.5268822538521505e+00 2.4535044459580702e-01 + -2.0059104463623907e+00 3.0987333487145423e+00 -1.5929229890135677e-01 + -2.1348106567178013e+00 2.7569763279831379e+00 -2.9040455134831356e-01 + -2.3272986690406348e+00 2.4810563214635990e+00 -2.3650170219440292e-01 + -2.5393993907888150e+00 2.1872657141457337e+00 -8.4986220390717682e-02 + -2.7006900437891601e+00 1.8217396707770215e+00 2.8344348325185398e-02 + -2.6586165710419718e+00 1.4868940950012099e+00 -3.4120060471661495e-01 + id 12531 + loc 5.7761043310165405e-01 1.7626637220382690e-01 403 + blend 0.0000000000000000e+00 + interp 4.6080544997303702e-01:3.8204286684303262e-01:8.9331356691002661e-01:4.6080084191853732e-01:1.2476770528534407e+00:4.6055474950251335e-01:1.8659479566050012e+00:4.5156210618839265e-01:2.0941041802489830e+00:3.2545747447667717e-01:3.0377388237056113e+00:2.7308056709593814e-01:3.9999203914328922e+00 + CVs 20 + -6.4288463712462246e-02 3.2069888021365434e-01 1.9578067236893676e-01 + -8.6755213207914961e-02 6.2319218880847704e-01 3.8881325903225261e-01 + -1.0248887702113252e-01 9.2789561960141287e-01 5.9511651022764445e-01 + -1.2669579750434151e-01 1.2303271230216497e+00 8.3002439678022899e-01 + -1.5839206190272725e-01 1.5090210567840847e+00 1.1033504689022626e+00 + -1.8315765776116066e-01 1.7458702808099351e+00 1.4126046490206483e+00 + -1.7638544227505126e-01 1.9339186169791169e+00 1.7468627685104088e+00 + -1.1620560764474608e-01 2.0663941832249262e+00 2.0901352171107170e+00 + 8.4268990529485777e-03 2.1321682813295175e+00 2.4230613348573251e+00 + 1.9786950923806934e-01 2.1239432528695295e+00 2.7314842996057314e+00 + 4.4280752373792120e-01 2.0378738964828469e+00 3.0086541687039059e+00 + 7.2186673727760930e-01 1.8660097388436550e+00 3.2545494493999900e+00 + 1.0084831517554211e+00 1.6006364986207784e+00 3.4733405688031289e+00 + 1.2900950444581591e+00 1.2411237250712945e+00 3.6622856628118261e+00 + 1.5754929703115339e+00 7.9624203775371027e-01 3.8236863601665974e+00 + 1.8899783465067472e+00 2.8238642670095626e-01 4.0240128408557849e+00 + 2.2334149526509059e+00 -2.5426868456908136e-01 4.3868322127362562e+00 + 2.5567376790604825e+00 -7.4717199784667754e-01 4.9062574127408975e+00 + 2.8817542296943355e+00 -1.2359632123146671e+00 5.2898286734264328e+00 + id 12532 + loc 9.2883515357971191e-01 6.7098423838615417e-02 372 + blend 0.0000000000000000e+00 + interp 4.3393912967595866e-01:1.1254761848718059e-01:9.1509460151149402e-01:4.3393479028466192e-01:1.5321727432362335e+00:3.2560807832108551e-01:2.2370739390025633e+00:3.6426651649537306e-01:2.9595017445300216e+00:2.9578892466779050e-01:3.5031148076002192e+00 + CVs 20 + 7.3061407067497552e-01 4.2186686548783942e-01 -1.4409036441659695e-02 + 1.3686726578732469e+00 6.9793616885691812e-01 -6.2434523185541685e-02 + 2.0087752763630800e+00 8.7837089216194608e-01 -9.3809504490237866e-02 + 2.6556067417206384e+00 1.0372379797907014e+00 -3.1100590125598016e-02 + 3.1917854058217880e+00 1.2213092180370493e+00 2.0111539736651196e-01 + 3.4653786772874362e+00 1.4025086160093734e+00 5.8643788307162614e-01 + 3.4403186970929531e+00 1.5103342809511697e+00 9.8643541400441503e-01 + 3.1809302200744303e+00 1.5248084585932844e+00 1.3147476907861795e+00 + 2.7421901873063050e+00 1.4461823051891600e+00 1.5393760860993313e+00 + 2.1793662161032987e+00 1.2635173327911833e+00 1.6581012927143433e+00 + 1.5523537134903092e+00 9.4370961476150228e-01 1.6921935427014727e+00 + 9.0782555267034604e-01 4.6957935830854430e-01 1.6686277952132733e+00 + 2.2098795813720395e-01 -1.0421053335556826e-01 1.6215745483897053e+00 + -5.9851998973461940e-01 -6.1288978533476990e-01 1.6262026291013787e+00 + -1.5390773493350149e+00 -8.1950898208990286e-01 1.8052842985969173e+00 + -2.4288723802017342e+00 -6.8836108372020088e-01 2.2206628527357326e+00 + -3.1099702949846129e+00 -3.9180633238033757e-01 2.8101734512526209e+00 + -3.5470649357169819e+00 -1.3925088361809812e-01 3.4298553416349122e+00 + -3.8156916261396625e+00 6.8467014778005097e-02 4.0152388487900197e+00 + id 12533 + loc 4.8748162388801575e-01 5.7481026649475098e-01 1048 + blend 0.0000000000000000e+00 + interp 4.4267783479262240e-01:2.4975552890315647e-01:2.9487306648806499e-02:2.6783752274115785e-01:9.2358528839963983e-01:4.4267340801427452e-01:1.1401142057608649e+00:2.5221447794853502e-01:2.1302807453118682e+00:3.9658609231017811e-01:2.9192161541907926e+00:2.5590086132744011e-01:3.3483270831962013e+00 + CVs 20 + 1.1890060906058975e-01 6.9187808399946249e-01 -3.9991182489836313e-01 + 2.7022027798170056e-01 1.3827535663125556e+00 -7.3987436764391312e-01 + 5.0269605202124179e-01 2.0854818139185070e+00 -9.8924186003142200e-01 + 8.6103384376724534e-01 2.7712216458658077e+00 -1.1157098982370546e+00 + 1.3552728713325799e+00 3.3548530013950795e+00 -1.1159977728502928e+00 + 1.9415411561581599e+00 3.7606905487406541e+00 -1.0387573821172200e+00 + 2.5547512339615226e+00 3.9533507390823392e+00 -9.3971381444100643e-01 + 3.1396156033842058e+00 3.9368011593057011e+00 -8.5101642364936025e-01 + 3.6682996323422570e+00 3.7337424389738834e+00 -7.7749129288686736e-01 + 4.1192512065183484e+00 3.3659128280078625e+00 -7.0875310337219799e-01 + 4.4513046640950238e+00 2.8834914955794888e+00 -6.2611176338655405e-01 + 4.6350722278193777e+00 2.3728593938656344e+00 -5.1068213891132086e-01 + 4.6737004663269417e+00 1.9016808595137913e+00 -3.5166528993992574e-01 + 4.5758683179891024e+00 1.4902122149876802e+00 -1.2732315444810249e-01 + 4.3265674271731163e+00 1.1302524495799207e+00 1.9825778910702144e-01 + 3.8026312557435529e+00 7.2887043167960219e-01 6.6814689343769806e-01 + 2.9748452555709046e+00 -1.5882868546745565e+00 7.7984754922361721e-01 + 4.2256001588907868e+00 -2.3017931637131035e+00 -3.3365366754460357e-01 + 4.4208756332418870e+00 -2.1330934927751670e+00 -4.6820077861591325e-01 + id 12534 + loc 8.4651613235473633e-01 4.8079273104667664e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3109044081622266e-01:2.5330241600939774e-01:2.7179053950232057e-01:3.5954726920277214e-01:1.0044787712905321e+00:2.9351979473204476e-01:1.6651108033571913e+00:4.3108612991181450e-01:2.2698643864388313e+00:2.7811993111567146e-01:3.0753011576430254e+00:3.2985572109207612e-01:3.8086061378396900e+00 + CVs 20 + 3.4585098415230642e-01 3.5691044086940210e-01 -2.3200921077959724e-01 + 7.0719610282100698e-01 6.8130532899360796e-01 -4.1552077136683996e-01 + 1.0933242638544971e+00 9.5689687052503469e-01 -5.5452860599318909e-01 + 1.5052698379128238e+00 1.1710083558186102e+00 -6.3680451890909984e-01 + 1.9279889311111524e+00 1.3090390439024182e+00 -6.5164348238151248e-01 + 2.3384625367332421e+00 1.3656028367563662e+00 -5.9923482706466269e-01 + 2.7127415152982244e+00 1.3462862978530463e+00 -4.8839363398023028e-01 + 3.0318323778594491e+00 1.2656985022883365e+00 -3.3395247858052640e-01 + 3.2813560883494892e+00 1.1424012937420418e+00 -1.6011158668437570e-01 + 3.4559980152763852e+00 1.0015662775968455e+00 -2.3686975579173541e-04 + 3.5642384135039253e+00 8.7078011426218427e-01 1.2391620137347752e-01 + 3.6204646962100511e+00 7.6856014841901499e-01 2.1438492480087953e-01 + 3.6387970867806749e+00 7.0265333614755465e-01 2.8725169631681913e-01 + 3.6328906495769946e+00 6.7239131525977158e-01 3.6335252418370506e-01 + 3.6131826616584113e+00 6.6686910601313543e-01 4.6322853756326876e-01 + 3.6020606219008715e+00 6.3434004412155409e-01 5.9904739063169521e-01 + 3.6255577099423761e+00 5.0804179881129596e-01 7.3577245091889698e-01 + 3.7005396956187839e+00 2.8177524097941620e-01 8.1386167612635685e-01 + 3.8668169152506242e+00 6.8072288915767554e-02 7.7790689374903921e-01 + id 12535 + loc 1.2230474501848221e-01 1.2249286286532879e-02 1075 + blend 0.0000000000000000e+00 + interp 3.6562849604115732e-01:2.6056640892978622e-01:2.8712437287476966e-03:2.8571761872345991e-01:1.0280563807722418e+00:3.2125618134124556e-01:1.9249362214868393e+00:3.6562483975619692e-01:2.0258928546794062e+00:3.4646291218270264e-01:2.7585634095830827e+00:2.6168924022152862e-01:3.1418376045146923e+00 + CVs 20 + -1.3925376523560121e-01 3.1629303679416931e-01 2.6895433360692361e-02 + -2.9088092021119072e-01 6.6028896549912863e-01 5.9674307418737915e-02 + -4.3666244369105378e-01 1.0265209690339889e+00 9.4761055893783253e-02 + -5.8606425240984650e-01 1.4039731844418557e+00 1.1346156013251174e-01 + -7.6084942431484526e-01 1.7754931827466556e+00 9.0318458924194878e-02 + -9.6618144319469723e-01 2.1141788598297788e+00 6.1047571280705704e-03 + -1.1824132522013455e+00 2.3835241988041638e+00 -1.4869516187992748e-01 + -1.3617993012682614e+00 2.5433603630288606e+00 -3.6669874845713002e-01 + -1.4515430281624619e+00 2.5817442662100891e+00 -6.0570072888417315e-01 + -1.4580681595195346e+00 2.5412068176904263e+00 -8.2705756683274090e-01 + -1.4216521995447127e+00 2.4492908789451011e+00 -1.0435397083231392e+00 + -1.3601861997151821e+00 2.2955676461558343e+00 -1.2646429918226518e+00 + -1.2804303832088182e+00 2.0796119725750462e+00 -1.4654067034804923e+00 + -1.1901011623631879e+00 1.8611319416341354e+00 -1.6026871844613491e+00 + -1.1091570779156583e+00 1.7147403464901620e+00 -1.6579672130249987e+00 + -1.0624036009978339e+00 1.6325062790441331e+00 -1.6244197918608534e+00 + -1.0427083522814065e+00 1.5303118042402664e+00 -1.5071429692881735e+00 + -1.0082914778516745e+00 1.3474386335639794e+00 -1.3918025565989014e+00 + -9.1534661747491797e-01 1.2710434541896278e+00 -1.5534380244219601e+00 + id 12536 + loc 7.0999739691615105e-03 1.1810320615768433e-01 408 + blend 0.0000000000000000e+00 + interp 7.2123586508444602e+00:7.2123486508444605e+00:8.8069049389608245e-02:6.6942143859944938e+00:9.2345845259336312e-02:9.2732674598872400e-01:3.3675348093271085e-01:4.2336892179728519e-01:4.2594662534372385e-01:3.0733618428014658e-01:9.9900465867068966e-01:1.1329186254255671e-01:1.9282748592980750e+00:5.7990978774890600e-01:2.0038350628909600e+00:1.2299005619435586e+00:2.0505627532455177e+00 + CVs 20 + -5.9990621748491013e-02 4.3032881277268736e-01 -4.4917871992834957e-01 + -1.2803195972988529e-01 7.2111879741106910e-01 -6.6478085128443509e-01 + -1.9063554316280698e-01 9.3547083656775665e-01 -8.2051160490501851e-01 + -2.5638608123140727e-01 1.1335989538924265e+00 -9.8152017162293159e-01 + -3.1415096331200920e-01 1.3083237880529270e+00 -1.1486491089480717e+00 + -3.4768779072359540e-01 1.4462660606575066e+00 -1.3261775175791088e+00 + -3.3334250566648738e-01 1.5217189031738514e+00 -1.5182214418773523e+00 + -2.4456769514902446e-01 1.4922512564888830e+00 -1.7108517259206200e+00 + -8.9268018916948383e-02 1.3386471360897314e+00 -1.8496338868891575e+00 + 7.0262169828849558e-02 1.1304015603728002e+00 -1.9126645446737200e+00 + 2.0476290630094299e-01 9.3076696826019956e-01 -1.9596713884141685e+00 + 3.2656719454568539e-01 7.3566795135217045e-01 -2.0307262497124468e+00 + 4.4867386416412353e-01 5.3871580039227440e-01 -2.1400156291952670e+00 + 5.8252889138280761e-01 3.6037691428738278e-01 -2.3089995242600327e+00 + 7.2961723441563886e-01 2.3443815971206849e-01 -2.5551929166656224e+00 + 8.6997748797840146e-01 1.7932039970229008e-01 -2.8664312748498766e+00 + 9.8194261810434535e-01 1.8744866388904180e-01 -3.2086936115825662e+00 + 1.0774933841366814e+00 2.4464577417755629e-01 -3.5437473500837786e+00 + 1.1737995084546966e+00 1.4531126781313142e-01 -3.8024295622699942e+00 + id 12537 + loc 7.3812282085418701e-01 7.6467031240463257e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0267419797682777e-01:5.0266917123484800e-01:3.5957307928200888e-01:3.0663706064040608e-01:1.0867179522624448e+00:4.4449678350340410e-01:1.7987369815429095e+00:3.4572517752659121e-01:2.2071852163976460e+00:4.9471015126514783e-01:2.9591004388494131e+00:4.5186326989534636e-01:3.3701026009092128e+00:4.6545975231036607e-01:3.9999637188878401e+00 + CVs 20 + 1.4658325570678825e-02 3.3017599883758347e-01 1.7381064964531284e-01 + 5.3040994309899461e-02 5.8233545873449744e-01 2.4432954023873701e-01 + 8.3932010949773539e-02 8.1667168413173530e-01 3.0770129901057663e-01 + 9.7940764866027819e-02 1.0464276046710912e+00 3.8800705963181586e-01 + 9.3460322514484176e-02 1.2683982974883268e+00 4.7841209393438866e-01 + 6.6435030840900078e-02 1.4809843354787526e+00 5.7108314204028976e-01 + 1.1161645182354019e-02 1.6827196466923420e+00 6.5845258861168832e-01 + -7.8595218994514979e-02 1.8702726371789882e+00 7.3488425940300428e-01 + -2.0932985596499215e-01 2.0370726684922942e+00 7.9510249483923567e-01 + -3.8808853635006491e-01 2.1714774500723362e+00 8.3060354570162065e-01 + -6.1655248297091869e-01 2.2529566806103563e+00 8.2901617949742268e-01 + -8.7395115943934920e-01 2.2582386312873570e+00 7.8344732076220147e-01 + -1.1192497381655258e+00 2.1878463881055144e+00 7.0760052103371207e-01 + -1.3280649925664478e+00 2.0746451577929084e+00 6.2874143819286377e-01 + -1.5073509001328347e+00 1.9525660473590261e+00 5.6498104602793009e-01 + -1.6722291794203124e+00 1.8323417101280290e+00 5.1534331680802692e-01 + -1.8283142203782372e+00 1.7135576640504071e+00 4.6847032560365309e-01 + -1.9746286881696591e+00 1.6023490832176592e+00 4.1306847257499990e-01 + -2.1103862454703437e+00 1.5193541659852685e+00 3.9724804190549756e-01 + id 12538 + loc 8.3931887149810791e-01 3.0205124616622925e-01 413 + blend 0.0000000000000000e+00 + interp 8.3801968571716412e-01:4.5507976960699359e-01:5.2324519613626208e-01:3.5283215497415171e-01:1.0026621712383745e+00:2.8844376635288199e-01:1.9226689501380270e+00:4.6524627912818445e-01:2.8074785828519286e+00:8.3801130552030700e-01:2.9610614081562563e+00 + CVs 20 + -1.2433360070214836e+00 3.5331803464148276e-01 1.4644152908332392e-01 + -2.0805884810398192e+00 4.9603528479887349e-01 2.2351063883890079e-01 + -2.7718741113053778e+00 5.6227644133561250e-01 2.6362828323984411e-01 + -3.4525962658154432e+00 5.9858309747420579e-01 2.9172104362946250e-01 + -4.1174670168954597e+00 5.9559234074202394e-01 3.1511119748419714e-01 + -4.7608849224619476e+00 5.4337487111049410e-01 3.3923415997801487e-01 + -5.3846205507775498e+00 4.3009707202507597e-01 3.6617260667154677e-01 + -5.9970932622115720e+00 2.3885164037676787e-01 3.9217675369948052e-01 + -6.5954070161274405e+00 -4.9382201875303067e-02 4.0732716046347400e-01 + -7.1605255853292533e+00 -4.4960340014170486e-01 4.0081855703287922e-01 + -7.6576396192270861e+00 -9.6274750587558600e-01 3.6888657792377300e-01 + -8.0473721481667209e+00 -1.5686949247982516e+00 3.1429344978810225e-01 + -8.3066719358832408e+00 -2.2314404967778234e+00 2.3588505538266086e-01 + -8.4365794341788707e+00 -2.9124775679392418e+00 1.2801224248719356e-01 + -8.4516586378572658e+00 -3.5768324049674596e+00 -7.7833703524523568e-03 + -8.3690872580263722e+00 -4.1885634086192711e+00 -1.6081092152119936e-01 + -8.2103842129385658e+00 -4.7113812787347502e+00 -3.3034486922175399e-01 + -8.0068894107828754e+00 -5.1330389423824698e+00 -5.2782282262145741e-01 + -7.8307150719174876e+00 -5.5612427320757805e+00 -7.4865388454512805e-01 + id 12539 + loc 7.6421481370925903e-01 3.8031405210494995e-01 397 + blend 0.0000000000000000e+00 + interp 4.0917094577843782e-01:2.7795619661100435e-01:9.7310556836375384e-01:3.6407216217672184e-01:1.6132357484142039e+00:2.6266102898891985e-01:2.1813150043144574e+00:4.0916685406898007e-01:2.9326491482231254e+00:2.6799421540643442e-01:3.8488828451366102e+00 + CVs 20 + -1.2368403188263628e+00 2.9285934248005119e-01 3.0830806142364753e-01 + -2.0364832651155713e+00 3.9089648381221698e-01 5.6829986768866947e-01 + -2.7079312512591405e+00 4.2412637584208845e-01 8.4020342234165712e-01 + -3.3879824452842402e+00 4.4716442211661755e-01 1.1559168153729684e+00 + -4.0615444358006370e+00 4.4032348784342257e-01 1.5124758166363454e+00 + -4.7151354633269333e+00 3.8173470753988442e-01 1.8956384036459752e+00 + -5.3384680121960120e+00 2.5156748744951984e-01 2.2836767691844528e+00 + -5.9266699077224496e+00 3.2370762636194705e-02 2.6506204090448011e+00 + -6.4730941638708162e+00 -2.8697635255346376e-01 2.9670260699776048e+00 + -6.9602610349962131e+00 -7.0046630824611533e-01 3.2031901870805282e+00 + -7.3731126067329056e+00 -1.1861237138678242e+00 3.3423574171746706e+00 + -7.7160592974568400e+00 -1.7275138848075562e+00 3.3912008344515092e+00 + -7.9994849589321859e+00 -2.3174376009557691e+00 3.3711790442787724e+00 + -8.2259643251969372e+00 -2.9508030705829604e+00 3.3098154782791904e+00 + -8.3827357947301628e+00 -3.6180568167410931e+00 3.2353647337148361e+00 + -8.4437743661863376e+00 -4.2992444370074496e+00 3.1622471010427682e+00 + -8.3939198326806377e+00 -4.9542650718556143e+00 3.0925004139093231e+00 + -8.2508475591669832e+00 -5.5411950193914583e+00 3.0297072252397692e+00 + -8.0663447352029181e+00 -6.1104266422167255e+00 3.0108183656868195e+00 + id 12540 + loc 6.9960671663284302e-01 6.9363939762115479e-01 409 + blend 0.0000000000000000e+00 + interp 3.8728969086142440e-01:3.2061814005197647e-01:5.9381657611707106e-02:3.0582797994414990e-01:9.9330778176806589e-01:3.2267482618771881e-01:1.7513873328456073e+00:3.0222522274258823e-01:2.3691869795620133e+00:3.8728581796451578e-01:3.4899163108607967e+00 + CVs 20 + 4.5735104805040483e-01 1.0448445638808387e-01 -1.9510252108694723e-01 + 8.6110322605016021e-01 1.7111178717465836e-01 -4.0189965337416500e-01 + 1.2635092171328215e+00 2.2601084035882518e-01 -6.0517496977763785e-01 + 1.6785683788878432e+00 2.7404826432790863e-01 -8.0252930931392763e-01 + 2.0970112590805767e+00 3.0829103294857685e-01 -9.9563845571344278e-01 + 2.5105721549528583e+00 3.2409682413209140e-01 -1.1857323188515965e+00 + 2.9118455577183502e+00 3.1607550918649641e-01 -1.3721736127407504e+00 + 3.2929954287484136e+00 2.7603226823860050e-01 -1.5528818070890207e+00 + 3.6421078160246974e+00 1.9744150290383877e-01 -1.7277949228871659e+00 + 3.9393044587996706e+00 8.0899925650303350e-02 -1.9002667276607246e+00 + 4.1651470403870192e+00 -6.3023832794941281e-02 -2.0723648462322193e+00 + 4.3218695698812919e+00 -2.1670251498606241e-01 -2.2416404383118782e+00 + 4.4340528434795363e+00 -3.6724203027351399e-01 -2.4048939808327767e+00 + 4.5241259544355632e+00 -5.0995559989732397e-01 -2.5603138159558116e+00 + 4.6052152037857903e+00 -6.4444607396193687e-01 -2.7057054820644226e+00 + 4.6892050574273725e+00 -7.7954532439345980e-01 -2.8389435602854345e+00 + 4.7862858853280281e+00 -9.3392869618082042e-01 -2.9600916333888243e+00 + 4.8962108325789835e+00 -1.1140434157800021e+00 -3.0689085500688309e+00 + 5.0324685280274677e+00 -1.3302757402617500e+00 -3.1703914120924614e+00 + id 12541 + loc 9.4962403178215027e-02 2.3047357797622681e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6682819435186595e-01:4.0297250799333734e-01:7.2328596923584376e-01:4.6682352606992245e-01:1.0743370182943965e+00:3.6216805516413136e-01:1.8169339294698139e+00:3.6761487637752671e-01:2.1474965913288360e+00:3.2599490428877276e-01:2.9822109164118222e+00:2.8122259471006561e-01:3.9868705759784495e+00 + CVs 20 + 1.9800267413092851e-01 3.4482129566466030e-01 -1.4694111159221077e-01 + 2.9890967852507511e-01 6.3187265598681563e-01 -2.7799208519721863e-01 + 3.5857594184367547e-01 8.9878876927359763e-01 -4.0456001107393441e-01 + 4.0116708866334599e-01 1.1628380920366190e+00 -5.3180394974146727e-01 + 4.2274662728195472e-01 1.4214985689249420e+00 -6.6097406236179213e-01 + 4.2021474283038729e-01 1.6692473042130460e+00 -7.9245065128753400e-01 + 3.8947868878953362e-01 1.8981298180616153e+00 -9.2594581810663734e-01 + 3.2617006933747772e-01 2.1005386568349049e+00 -1.0614026470758988e+00 + 2.2694743744425927e-01 2.2702597620673401e+00 -1.1990019025721412e+00 + 8.7930406044280263e-02 2.3992262585191027e+00 -1.3390863830591657e+00 + -9.3629338344913160e-02 2.4737203842920445e+00 -1.4791745794046798e+00 + -3.1388107572841162e-01 2.4793566988963365e+00 -1.6112813474911956e+00 + -5.6463917449634882e-01 2.4082178216415286e+00 -1.7263307189047510e+00 + -8.3852896514664232e-01 2.2569235589910512e+00 -1.8191469255010153e+00 + -1.1309399710375925e+00 2.0173475823735418e+00 -1.8909511069380511e+00 + -1.4302043774787265e+00 1.6604083698820675e+00 -1.9519256765002921e+00 + -1.6599878153957808e+00 1.1327384124344340e+00 -2.0086546716760303e+00 + -1.6512027146920523e+00 4.9507126432175541e-01 -2.0154858699874914e+00 + -1.5622415895670154e+00 2.9068446121970459e-02 -1.9426920017554747e+00 + id 12542 + loc 6.5836924314498901e-01 5.5002820491790771e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0839356073049976e-01:2.5082139889153221e-01:8.3109823341203704e-01:3.8986064721940450e-01:1.0748367464227810e+00:3.8358815251713613e-01:1.8570347970588958e+00:2.4655928198891167e-01:2.4097000078050335e+00:4.0838947679489246e-01:2.9687974408553712e+00:2.7831911941478249e-01:3.9138940333528116e+00 + CVs 20 + 5.4666083159984759e-02 3.4511880323274174e-01 -2.0657344679610715e-01 + 1.2136639257138696e-01 6.6095519820234128e-01 -3.9221923733433062e-01 + 1.9412349415953822e-01 9.5111798535411907e-01 -5.6161104457176814e-01 + 2.7222408229495620e-01 1.2224339528801005e+00 -7.1861467690466319e-01 + 3.5829106567795277e-01 1.4876963632726579e+00 -8.6626197783250936e-01 + 4.5300245482515844e-01 1.7610865597871006e+00 -1.0146849923882111e+00 + 5.5629681259325570e-01 2.0403814993931708e+00 -1.1872605000255203e+00 + 6.6531457043454489e-01 2.3126789502856799e+00 -1.4028865787093667e+00 + 7.8001390622806532e-01 2.5687717378493327e+00 -1.6678913207487993e+00 + 9.1153438843282708e-01 2.7779884482654413e+00 -1.9802060518883513e+00 + 1.0654027458219946e+00 2.8813128314706176e+00 -2.3118238333603460e+00 + 1.2329918779916045e+00 2.8506959075276961e+00 -2.6149730916647069e+00 + 1.4270799309676849e+00 2.7200370170662724e+00 -2.8695033286184644e+00 + 1.6897485762209408e+00 2.5408413898268520e+00 -3.0905327546046872e+00 + 2.0385946626347131e+00 2.3129302246771144e+00 -3.3040837246857047e+00 + 2.4374035228527258e+00 1.9809864319893951e+00 -3.5373377937133390e+00 + 2.8094203446380037e+00 1.5288242657952982e+00 -3.8385635443291117e+00 + 3.0298744912509017e+00 1.0731902872010661e+00 -4.2371452166001218e+00 + 2.9315293122270889e+00 8.7380310434866504e-01 -4.5899410611163098e+00 + id 12543 + loc 7.6135462522506714e-01 9.3198955059051514e-01 1076 + blend 0.0000000000000000e+00 + interp 5.6003592145222814e-01:2.8793253374597799e-01:8.3154037167982087e-02:3.0626292980275988e-01:1.0002650126289214e+00:5.4497382368240332e-01:1.4957880447217171e+00:5.6003032109301365e-01:1.9599124170077979e+00:4.5677803202232981e-01:2.3161282966896293e+00:2.8349232630783799e-01:2.8664312239538470e+00:2.8277399760677530e-01:3.3237959621806734e+00 + CVs 20 + 1.6990578566747591e-01 2.9032947430069167e-01 -1.5815332232924526e-01 + 3.2496718939870911e-01 5.9942069761856043e-01 -2.8276413323651445e-01 + 4.7902471532257068e-01 9.2048088736616351e-01 -4.1082054896374320e-01 + 6.4271725278457226e-01 1.2470284340179723e+00 -5.6266962294533973e-01 + 8.2854329643990665e-01 1.5742801104840229e+00 -7.4912755347997373e-01 + 1.0433618775444040e+00 1.8873712557481981e+00 -9.9087923651486265e-01 + 1.2794559680405397e+00 2.1583716153786567e+00 -1.3140089219751374e+00 + 1.5179019332137580e+00 2.3570604357203817e+00 -1.7300563610089887e+00 + 1.7391146946870684e+00 2.4641136832558135e+00 -2.2297434423935489e+00 + 1.9309695711797812e+00 2.4747817963193572e+00 -2.7935611936730291e+00 + 2.0929549893392934e+00 2.3922193480965959e+00 -3.3998500459771814e+00 + 2.2257509549776744e+00 2.2190134714654488e+00 -4.0236404986046503e+00 + 2.3131375376383074e+00 1.9654929843222420e+00 -4.6284980661131421e+00 + 2.3118688276197532e+00 1.6848312220067054e+00 -5.1599810620099715e+00 + 2.1831153169790602e+00 1.4766642633230731e+00 -5.5655909648456836e+00 + 1.9532061099682609e+00 1.4262931630436069e+00 -5.8102337098062007e+00 + 1.7160300068035312e+00 1.5484647692726679e+00 -5.8858748182276193e+00 + 1.5150885601633921e+00 1.7293844860629290e+00 -5.8866993203680229e+00 + 1.1250861238737528e+00 1.7268424666029074e+00 -6.0787036516316286e+00 + id 12544 + loc 9.0776121616363525e-01 6.8363106250762939e-01 411 + blend 0.0000000000000000e+00 + interp 4.7491136964519320e-01:3.6728279284114618e-01:4.2872029027950387e-01:3.7030564984332304e-01:9.8851930397826060e-01:3.1820947972638303e-01:1.7736074454212201e+00:3.4555656380380240e-01:2.1265036143683562e+00:4.7490662053149679e-01:2.9058891713844646e+00:3.6227396787999355e-01:3.2790375436758787e+00:3.8888933531351294e-01:3.9890467715697926e+00 + CVs 20 + 8.4871892729035947e-01 2.1884396466748199e-01 -2.4796594417185952e-01 + 1.4433540033311780e+00 3.3017119863046940e-01 -4.4802945669194627e-01 + 1.9691358171124711e+00 4.1842944993109488e-01 -6.2029182839689234e-01 + 2.5083980781196149e+00 5.1984179953681686e-01 -7.7193543009312737e-01 + 3.0592078870657162e+00 6.1900121352878268e-01 -8.9800240166289258e-01 + 3.6189556976735990e+00 6.9876152355920451e-01 -9.9709438958325847e-01 + 4.1871216182159801e+00 7.4190970727451755e-01 -1.0713915842606341e+00 + 4.7656382353794280e+00 7.3078726928711446e-01 -1.1238291906805162e+00 + 5.3531948933730540e+00 6.4769629438423981e-01 -1.1583157744388632e+00 + 5.9402962873287075e+00 4.7806613592836822e-01 -1.1868850029590223e+00 + 6.5083124807389314e+00 2.1596494847931935e-01 -1.2289565076277329e+00 + 7.0197740393351085e+00 -1.4136706545112809e-01 -1.2990845792115782e+00 + 7.4331844083388017e+00 -5.7947474254792475e-01 -1.3980523683116060e+00 + 7.7257930080074386e+00 -1.0706531827279759e+00 -1.5171078229009831e+00 + 7.8911148202763641e+00 -1.5842933914324058e+00 -1.6480875708608393e+00 + 7.9335684821762822e+00 -2.0903750506600183e+00 -1.7879085021466561e+00 + 7.8660482028220500e+00 -2.5626112997586135e+00 -1.9343152121490721e+00 + 7.7065235325136401e+00 -2.9778628058607279e+00 -2.0807463994108701e+00 + 7.4487966207526553e+00 -3.3206282127931264e+00 -2.2164025937115968e+00 + id 12545 + loc 4.8945212364196777e-01 6.7654734849929810e-01 1074 + blend 0.0000000000000000e+00 + interp 3.4606605473867930e-01:2.7533249355283668e-01:6.8639599004372776e-01:2.5369676228208421e-01:1.9492523148389171e+00:3.4606259407813195e-01:2.9410850135190287e+00:2.4985464017226355e-01:3.7443840535053186e+00 + CVs 20 + 4.4229964524566741e-02 3.5672676410902388e-01 -2.4799445909826140e-01 + 1.4462539521540799e-01 7.2391216081194132e-01 -5.1163704763147355e-01 + 3.0396020742181884e-01 1.0948663562181415e+00 -8.0079248967451155e-01 + 5.2391254016163513e-01 1.4595139191972490e+00 -1.1126229214489534e+00 + 7.9719788734409625e-01 1.8008219370874858e+00 -1.4498019424013093e+00 + 1.0947093954181970e+00 2.0832727685935803e+00 -1.8401876305526934e+00 + 1.3717779818423221e+00 2.2487897139230317e+00 -2.3055922451963529e+00 + 1.5782372997567635e+00 2.2254334373846829e+00 -2.8073950318146301e+00 + 1.6872049930633999e+00 1.9988433643035370e+00 -3.2486036529483613e+00 + 1.7227999848156408e+00 1.6412367666209904e+00 -3.5720222758630866e+00 + 1.7272183847519795e+00 1.2285285882825707e+00 -3.7778584761882077e+00 + 1.7402827210767073e+00 8.0822537959775498e-01 -3.9072086128021026e+00 + 1.7849213797695695e+00 3.7867569729074707e-01 -4.0406296049619908e+00 + 1.8799771869501736e+00 -8.1553288362290602e-02 -4.2753583796460504e+00 + 2.0521899126800185e+00 -5.2690598609901063e-01 -4.7014161648222483e+00 + 2.3035249981261470e+00 -8.0119559909681781e-01 -5.3600091093556248e+00 + 2.5721218076668935e+00 -6.9484820020272720e-01 -6.1531437571647452e+00 + 2.7385685050445705e+00 -2.8533898944639580e-01 -6.7319610427260885e+00 + 2.8000023814633654e+00 3.5952292981866335e-02 -6.9595114103330262e+00 + id 12546 + loc 4.6957844495773315e-01 4.2324760556221008e-01 406 + blend 0.0000000000000000e+00 + interp 4.3778924744154057e-01:3.9753032281254158e-01:1.4317317440563404e-01:3.1943211467592836e-01:8.2613130162811022e-01:3.9951477652977196e-01:1.0964776805807503e+00:3.9849566067818187e-01:1.7608862542075261e+00:3.6519339117570054e-01:2.0883046011423123e+00:4.3778486954906620e-01:2.7788114121689271e+00:3.9105098996235332e-01:3.0592543662516611e+00:3.6657144436885497e-01:3.8385327167630878e+00 + CVs 20 + -6.9369177759311215e-02 2.1495155576167790e-01 -7.0745940944439353e-02 + -1.3672559320721472e-01 3.8736061556660450e-01 -7.0273720507128462e-02 + -1.8432521465144985e-01 5.6317167040131721e-01 -4.3082726685673089e-02 + -2.2232187081796503e-01 7.6668423199125180e-01 -3.6361909203001641e-02 + -2.4925102447039849e-01 9.9398186919179898e-01 -5.8489479656336774e-02 + -2.6468828172157377e-01 1.2379366327189225e+00 -1.1661006411488728e-01 + -2.7027964009879180e-01 1.4884060186085692e+00 -2.1600659414466616e-01 + -2.6887902570230399e-01 1.7334446961735046e+00 -3.5846413479664019e-01 + -2.5946505471316578e-01 1.9626668401897760e+00 -5.3994423369805455e-01 + -2.3466352252373474e-01 2.1687835577778287e+00 -7.4970738330213960e-01 + -1.9161899569262869e-01 2.3448456969395206e+00 -9.7603419235835809e-01 + -1.4268538011477178e-01 2.4818871038853536e+00 -1.2125126639443153e+00 + -1.0446142202077807e-01 2.5729969111056219e+00 -1.4534306211075552e+00 + -8.0250924756043174e-02 2.6188883593050649e+00 -1.6878711795907106e+00 + -6.1625407746111638e-02 2.6268814518686066e+00 -1.9021986482547395e+00 + -4.3399066314243062e-02 2.6056192907561471e+00 -2.0892001998387215e+00 + -3.1471884561474428e-02 2.5607190381999798e+00 -2.2531273995393244e+00 + -3.5809265005700475e-02 2.4948965518506414e+00 -2.3983558838418335e+00 + -1.0980544213813503e-01 2.3771454461069355e+00 -2.4788590012435128e+00 + id 12547 + loc 2.6999434828758240e-01 1.6184696555137634e-01 403 + blend 0.0000000000000000e+00 + interp 5.0500270111735945e-01:5.0499765109034833e-01:8.8787441249622012e-02:4.7392307847615728e-01:6.9337849141942187e-01:4.9408037091812140e-01:1.0137315518874872e+00:3.5796483229357123e-01:1.6322635825722434e+00:2.8469842010971141e-01:2.3625698001772273e+00:3.2780384681156965e-01:3.2108503459156252e+00:3.6585696945045726e-01:3.9208523079499153e+00 + CVs 20 + -2.3019353283047359e-01 2.8650454048921098e-01 7.4431400116631241e-02 + -4.3362248087554067e-01 5.7654037096336408e-01 1.5853974776918456e-01 + -6.3321571950485511e-01 8.6190758777956600e-01 2.6886764602815028e-01 + -8.3774760239643720e-01 1.1322176227724108e+00 4.1467069909730658e-01 + -1.0422125338349839e+00 1.3765187659403253e+00 6.0344996375722504e-01 + -1.2298416343816490e+00 1.5821520260820905e+00 8.4260155657447811e-01 + -1.3801452455755314e+00 1.7379752536401458e+00 1.1323515602689778e+00 + -1.4768991085266769e+00 1.8349360146320182e+00 1.4622524052357102e+00 + -1.5091922036800782e+00 1.8671679724310923e+00 1.8108316292329554e+00 + -1.4743200473804072e+00 1.8365149631398188e+00 2.1511719241080427e+00 + -1.3799041182483778e+00 1.7526052876065756e+00 2.4612970943094155e+00 + -1.2426681328360323e+00 1.6268927044960890e+00 2.7354256525845506e+00 + -1.0815971803245656e+00 1.4658595344006915e+00 2.9864421496064262e+00 + -9.0989210668812304e-01 1.2751533066520668e+00 3.2192376491846608e+00 + -7.3619163583260250e-01 1.0671949104624403e+00 3.4253502668965132e+00 + -5.6707890485126378e-01 8.4930881444750717e-01 3.6203335226428806e+00 + -4.1014831597966411e-01 6.1822990767539876e-01 3.8597161519910017e+00 + -2.8327584090830993e-01 3.9298389176368742e-01 4.1865588336897170e+00 + -1.7439343496004595e-01 2.4812282277129283e-01 4.4261025575230422e+00 + id 12548 + loc 7.6771593093872070e-01 8.4735798835754395e-01 372 + blend 0.0000000000000000e+00 + interp 4.1429877493740142e-01:4.0036180882473671e-01:2.2105317377341949e-01:4.1429463194965205e-01:9.3735492237813611e-01:3.2746512220144897e-01:1.8088654969044953e+00:3.3921646946168649e-01:2.7231426360019912e+00:3.2806851224526612e-01:3.8745943356905417e+00 + CVs 20 + -3.5164223905895525e-01 4.1460438759595925e-01 -2.1655493081835731e-02 + -6.8028845280428951e-01 7.0458738314531233e-01 -2.8496795822091928e-02 + -1.0123964082294212e+00 8.5393767742958904e-01 -1.4178472200660708e-02 + -1.3727799307229174e+00 8.8995633051876211e-01 2.9817562428620242e-02 + -1.7591811311341106e+00 8.7887247882327013e-01 1.1789676515380437e-01 + -2.1737477289424962e+00 8.8999865467465544e-01 2.4778623873640504e-01 + -2.6326246018804325e+00 9.6707566172854265e-01 3.8218779797228120e-01 + -3.1357466135513148e+00 1.1404530722692381e+00 4.7511356737369709e-01 + -3.6398123146629864e+00 1.4293270566729086e+00 4.9721005440382315e-01 + -4.0890810770740149e+00 1.8232977410836628e+00 4.3991636127781963e-01 + -4.4708665413241055e+00 2.2919455692031083e+00 3.0207155468246882e-01 + -4.8095633682051044e+00 2.8010861627245056e+00 5.5835065831203901e-02 + -5.1269285347251436e+00 3.2834654993191830e+00 -3.7938665634747637e-01 + -5.3936316660994867e+00 3.5978148875213316e+00 -1.0674411921007925e+00 + -5.5344587047661609e+00 3.6133014359394906e+00 -1.9192245134427524e+00 + -5.5807639095423545e+00 3.3438272798355895e+00 -2.7256047586327363e+00 + -5.7231723554780869e+00 2.8810866827201536e+00 -3.3516045420638685e+00 + -6.0569183579557659e+00 2.3236752500416786e+00 -3.7939524971507477e+00 + -6.4259911606075111e+00 1.7519587433564374e+00 -4.2001294989685096e+00 + id 12549 + loc 7.3595428466796875e-01 8.3792817592620850e-01 1085 + blend 0.0000000000000000e+00 + interp 3.3297089289893372e-01:2.5642623670412479e-01:5.4757892296059096e-02:3.1426953437800870e-01:1.1300221560108881e+00:2.4886019882988625e-01:2.0014088520817421e+00:3.3296756319000476e-01:2.8664007313100042e+00:3.0878732419599125e-01:3.2834924599794943e+00 + CVs 20 + -1.1819919692330680e-01 3.5267176194233657e-01 1.8021614283118775e-01 + -2.7463666180035834e-01 6.7518582007616623e-01 3.1250859346333898e-01 + -4.6488804425272684e-01 9.8320975113879405e-01 4.1165436422573032e-01 + -6.8790636787461867e-01 1.2746307596390614e+00 4.7616860058061122e-01 + -9.4422058079502846e-01 1.5300573703761589e+00 4.9022970271698341e-01 + -1.2243729163245023e+00 1.7262111472352826e+00 4.4265041483159162e-01 + -1.5079704304920523e+00 1.8409131502861058e+00 3.3047673483984835e-01 + -1.7678381215779968e+00 1.8616418562994637e+00 1.6203991840568438e-01 + -1.9788181356220886e+00 1.7902542969714788e+00 -4.1339809258945870e-02 + -2.1340585467419051e+00 1.6427569314529440e+00 -2.5033216167455985e-01 + -2.2472720943175895e+00 1.4381815858366374e+00 -4.4121410373884407e-01 + -2.3323085186595920e+00 1.1892514898977740e+00 -5.9680160229561185e-01 + -2.3977824512703529e+00 9.0677566364025386e-01 -6.9881274530692727e-01 + -2.4576951298133634e+00 6.0338461835167734e-01 -7.2579441465190286e-01 + -2.5292554756225729e+00 2.9905176179451365e-01 -6.5180081558128988e-01 + -2.6427646316989080e+00 1.7176440608922983e-02 -4.7801522305872102e-01 + -2.8541923457307634e+00 -2.2086812207049877e-01 -2.2014673883365515e-01 + -3.1775187564898144e+00 -3.6246433632499803e-01 9.7079699783669482e-02 + -3.4117668259012652e+00 -5.6793883362623254e-01 2.4385823382755500e-01 + id 12550 + loc 7.5310492515563965e-01 8.5629308223724365e-01 1048 + blend 0.0000000000000000e+00 + interp 2.4690923768997211e-01:2.4281600550114377e-01:2.8674309603060266e-01:2.4463134936280242e-01:1.5404525965676030e+00:2.4690676859759522e-01:2.5482086425769634e+00:2.3620354041518235e-01:3.1670783211955502e+00 + CVs 20 + 1.0756627229743394e-01 8.8317025397772975e-01 -3.6602990387968470e-01 + 2.5974547968018691e-01 1.7482139696984089e+00 -5.9787356183389218e-01 + 4.7803003070428018e-01 2.5700887114440443e+00 -6.7582589398032111e-01 + 7.5885081718490577e-01 3.2958020299728430e+00 -6.0111251575131108e-01 + 1.1020600055595409e+00 3.8838712707156295e+00 -3.8502543552539614e-01 + 1.5179148070874411e+00 4.3061708005234234e+00 -6.4859117143682976e-03 + 1.9657772397548527e+00 4.4974841918362589e+00 5.8991582841028900e-01 + 2.3574084128135682e+00 4.3886797691387933e+00 1.3604435288408514e+00 + 2.6075715949729843e+00 3.9947865465268872e+00 2.1694156008491596e+00 + 2.6541927022707945e+00 3.4156364846136045e+00 2.8754025953759563e+00 + 2.4879620944519827e+00 2.7965335850531137e+00 3.3828665159311555e+00 + 2.1516769227638490e+00 2.2230326758032519e+00 3.6649773934315686e+00 + 1.6609707032617089e+00 1.6650388397602505e+00 3.7257780768155402e+00 + 1.0037385014888831e+00 1.0207094886804695e+00 3.5578290365802023e+00 + 1.7500005518696074e-01 9.8907142551634797e-02 3.2938730685741073e+00 + -4.4527331043773599e-01 -1.2987910900079029e+00 3.4322609839779159e+00 + -9.7289718517799662e-02 -2.6082135248900729e+00 4.2259403276346106e+00 + 9.9839561698376778e-01 -3.0767474919128883e+00 5.2444873825215401e+00 + 1.9625214430797335e+00 -2.9649951709426263e+00 5.9174150258149361e+00 + id 12551 + loc 7.1325814723968506e-01 8.4371960163116455e-01 416 + blend 0.0000000000000000e+00 + interp 5.6796800352198398e+00:5.4895930779915203e-01:4.0472046708026632e-01:1.0026363722349960e+00:6.1940538432422976e-01:5.6796700352198402e+00:9.3626723554718772e-01:2.9975344468498749e-01:2.5252269959014000e+00:4.8691934968152806e-01:3.3429700125428345e+00:3.1361358767167835e-01:3.9719495901878856e+00 + CVs 20 + 8.5301971757037565e-01 1.9975241878396957e-01 -1.6386971470003103e-01 + 1.4203237958887203e+00 2.3250109279360537e-01 -3.3680861540950718e-01 + 1.9453805454033248e+00 2.0286364525745476e-01 -4.9852180704142179e-01 + 2.5192470120673054e+00 1.4641828451772543e-01 -6.4031224837942968e-01 + 3.1299602150829613e+00 6.1555512937318202e-02 -7.4785486379497468e-01 + 3.7623361535133819e+00 -4.9257712981214286e-02 -8.0420380241001321e-01 + 4.3969974519762518e+00 -1.8061264820699308e-01 -7.9704800655042596e-01 + 5.0129843758854022e+00 -3.2575854498567869e-01 -7.2427727618980531e-01 + 5.5926297206705531e+00 -4.7703824059538658e-01 -5.9038513996959308e-01 + 6.1219280271247580e+00 -6.2876320295127952e-01 -4.0810553295352148e-01 + 6.5912363468320176e+00 -7.8881853371866972e-01 -2.1651009245811104e-01 + 7.0021543229033689e+00 -9.8018170744718303e-01 -7.5457536337521502e-02 + 7.3618543871009932e+00 -1.2110931720207563e+00 -9.1583779740272986e-03 + 7.6772826376025840e+00 -1.4688805654874506e+00 9.5678278646378345e-03 + 7.9502889986651741e+00 -1.7446185663924665e+00 4.6590892896241076e-03 + 8.1739810920498162e+00 -2.0299930427706196e+00 -2.6064212962203182e-02 + 8.3429099974801098e+00 -2.3093210422289445e+00 -8.6243540057603596e-02 + 8.4601553990511782e+00 -2.5610060114353770e+00 -1.6458109878084159e-01 + 8.5429907347407799e+00 -2.7374791735943571e+00 -1.9926916172204712e-01 + id 12552 + loc 4.8432394862174988e-01 3.2619405537843704e-02 1084 + blend 0.0000000000000000e+00 + interp 4.3920483439552604e-01:4.3920044234718209e-01:7.9617520411941622e-01:1.9216579791496530e-01:1.2142445587400452e+00:2.9764137678844071e-01:2.1364783453699774e+00:3.8051474191823431e-01:3.0367209235141699e+00:2.8805829385260939e-01:3.7474686330370215e+00 + CVs 20 + 1.5163423608138643e-01 3.1526741959989873e-01 2.5765554856228179e-01 + 2.7599140746059569e-01 6.1429528455805182e-01 4.9945153593253000e-01 + 4.1803152176860381e-01 9.1389041643581836e-01 7.0408303423524887e-01 + 5.2658792928075193e-01 1.1768296029705547e+00 8.7277538660380460e-01 + 5.3526791372935345e-01 1.3505531531424659e+00 1.0117514411594599e+00 + 4.5729889165627935e-01 1.4205375998274941e+00 1.1053479984709074e+00 + 3.5444228276601353e-01 1.3920598306823557e+00 1.1181724211265927e+00 + 3.2931111620916875e-01 1.2899951014461233e+00 1.0100791097385560e+00 + 4.6758215802486364e-01 1.1872427418597109e+00 8.3275469203229369e-01 + 6.6114767026927868e-01 1.1157913996651558e+00 6.9210026917048184e-01 + 8.2952493090366697e-01 1.0411491557062145e+00 5.6567455748664619e-01 + 1.0387538134022050e+00 9.7604921033753078e-01 4.5789915373990209e-01 + 1.2798498062042698e+00 9.1589938221970724e-01 3.7166234592716807e-01 + 1.4481983447199840e+00 7.1927442235427386e-01 1.5990460707515475e-01 + 1.4195965685168077e+00 2.2267766367006014e-01 -2.9560869668956347e-01 + 9.4733541399014498e-01 -5.3874656219139583e-01 -9.0464943027060107e-01 + -3.8822874634433846e-01 -1.2061496995448464e+00 -1.4633894718666216e+00 + -2.3944854376129840e+00 -8.9343640019054416e-01 -1.5060044505171368e+00 + -2.7698060953686632e+00 -9.1519516798185951e-01 -1.5702675485776836e+00 + id 12553 + loc 3.4834215044975281e-01 8.4099817276000977e-01 263 + blend 0.0000000000000000e+00 + interp 2.1239702038152886e+00:2.1239602038152885e+00:1.0768756732396780e+00:7.5510081245470995e-01:1.0889982000491070e+00:1.2867087917233178e+00:1.1026819942566970e+00:3.2760038928804974e-01:1.3418418821904816e+00:4.3652176032224893e-01:2.0306701539390692e+00:4.3565732643523158e-01:2.5331564737427859e+00:3.7892077660694912e-01:3.0578422170056774e+00 + CVs 20 + -7.9014313650171930e-01 5.1637245264120524e-01 -1.8525512718395812e-01 + -1.5232603997125218e+00 8.7857512584033359e-01 -3.1142158079185644e-01 + -2.2645746804371596e+00 1.1038265902309436e+00 -4.3557015616674100e-01 + -2.9258241440036539e+00 1.2507572954274992e+00 -6.4915460575585604e-01 + -3.2864412425203557e+00 1.3510848615365294e+00 -9.9992405387617711e-01 + -3.2300485886004293e+00 1.3568262873125256e+00 -1.3244232836877792e+00 + -2.9802531801013434e+00 1.2704981497993595e+00 -1.5111184723462499e+00 + -2.6378732638545528e+00 1.1187033164209161e+00 -1.6666169849778685e+00 + -2.1976879417266306e+00 8.8093999191284555e-01 -1.7719107815888291e+00 + -1.7209694654941532e+00 5.5489539941780652e-01 -1.7672058189616164e+00 + -1.2761986239011183e+00 1.6036427647587015e-01 -1.6401228533380072e+00 + -8.5669691372553369e-01 -2.8271654505275973e-01 -1.4274371665763308e+00 + -3.2210006719741990e-01 -7.8600117716202977e-01 -1.1930860627523789e+00 + 6.0379825668873011e-01 -1.2789587025160007e+00 -1.0495359071183481e+00 + 1.9378118103894670e+00 -1.4427355268437794e+00 -1.2209490921311350e+00 + 3.2462376315446737e+00 -1.1638258457359956e+00 -1.8313217580949994e+00 + 4.2382316624848198e+00 -5.7307044013258523e-01 -2.8635480976349079e+00 + 4.7413728799785755e+00 1.1011652004922379e-01 -4.1033300733009002e+00 + 4.9220919227762181e+00 6.7865301069363304e-01 -5.2256457260969986e+00 + id 12554 + loc 3.1406819820404053e-01 3.1814309954643250e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3810811267657729e-01:4.3810373159545052e-01:2.2764754618198635e-01:3.9113211193632874e-01:9.9446416977795471e-01:2.7109897031735547e-01:1.8774985240005324e+00:2.5091182940384216e-01:2.8283870025932250e+00:3.2965124242558597e-01:3.8712186811662632e+00 + CVs 20 + 5.4694361034733130e-01 4.1058514368368471e-01 -1.0256355152487368e-01 + 8.6238601282625582e-01 7.0166701750448479e-01 -2.1572904882654753e-01 + 1.1271320395709616e+00 9.4263316688742327e-01 -3.4154394315498343e-01 + 1.4035229987349160e+00 1.1771497015790211e+00 -4.8600003640448780e-01 + 1.6680365263109433e+00 1.3905732053471112e+00 -6.4867984984762328e-01 + 1.8920730064844029e+00 1.5638617230506844e+00 -8.2657110951812296e-01 + 2.0439076899660358e+00 1.6767502696411465e+00 -1.0084830842222861e+00 + 2.0977019980831635e+00 1.7187005448207515e+00 -1.1661858028029133e+00 + 2.0525208463919191e+00 1.7069338911924083e+00 -1.2546206402859421e+00 + 1.9541399635000216e+00 1.6925532011731976e+00 -1.2505284575160183e+00 + 1.8650163248066889e+00 1.7185490445601095e+00 -1.1999493021979608e+00 + 1.8020761454593390e+00 1.7846870086123876e+00 -1.1689338161310749e+00 + 1.7483352732136539e+00 1.8765976436739102e+00 -1.1846150214763964e+00 + 1.6840161315949673e+00 1.9862584043546057e+00 -1.2499297324680532e+00 + 1.5823328582159164e+00 2.1051652958852971e+00 -1.3717692704704560e+00 + 1.3826030179673161e+00 2.2091562469911272e+00 -1.5841114034003549e+00 + 1.0026673615094182e+00 2.2204540197228191e+00 -1.9498491710427373e+00 + 5.4651952578638840e-01 2.0432607347738649e+00 -2.4665399949584734e+00 + 4.9505508221430694e-01 2.0159452281376851e+00 -2.7071068089932080e+00 + id 12555 + loc 6.9253802299499512e-01 8.7527859210968018e-01 1081 + blend 0.0000000000000000e+00 + interp 5.0920466332060887e-01:4.7507832412887419e-01:2.6630819667872974e-01:3.2710421766217906e-01:1.0824142056587143e+00:5.0919957127397564e-01:1.9998889567755680e+00:3.3544970237513305e-01:2.9739309838616248e+00:2.9727798341285927e-01:3.6554525239248359e+00 + CVs 20 + 1.0048108250515933e-01 4.9742282128805704e-01 4.6898262632715620e-01 + 2.3906578454293975e-01 8.7366831546645862e-01 7.7378598838477275e-01 + 4.0147539643736563e-01 1.2053939827062896e+00 1.0280121203749359e+00 + 5.8403385334255420e-01 1.5216097644303601e+00 1.2724001513076160e+00 + 7.8723524046697624e-01 1.8170934980057352e+00 1.4949338259010825e+00 + 1.0117761899668387e+00 2.0859932255390330e+00 1.6780730913830195e+00 + 1.2586983551177848e+00 2.3183761964909060e+00 1.7974044375434592e+00 + 1.5258545463646855e+00 2.4944135806817740e+00 1.8291373598483500e+00 + 1.7979696371334126e+00 2.5777605569761191e+00 1.7583466661956804e+00 + 2.0313488950709524e+00 2.5324135245339434e+00 1.6098994972378264e+00 + 2.1969490475977445e+00 2.3846376388789738e+00 1.4538054911710230e+00 + 2.3230505256749843e+00 2.1882018045590117e+00 1.3204795365557072e+00 + 2.4418843545268905e+00 1.9615540161466123e+00 1.2030987305870857e+00 + 2.5699931926679538e+00 1.7089514673007618e+00 1.1017374967789220e+00 + 2.7140762865533437e+00 1.4410355793124565e+00 1.0419872320620924e+00 + 2.8713840732034446e+00 1.1911557538070543e+00 1.0800061489911235e+00 + 3.0398638536500191e+00 9.9887292815380146e-01 1.2214936934562612e+00 + 3.2307350873094287e+00 7.9360124814045074e-01 1.3832654101988511e+00 + 3.4526674978694292e+00 4.4087921439563915e-01 1.5063371600305000e+00 + id 12556 + loc 6.5085738897323608e-01 1.5685616433620453e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4696442870335853e-01:2.8010476784507304e-01:1.9291855364986654e-01:2.4455173421758164e-01:1.4069180019190357e+00:3.4696095905907154e-01:2.0413950621089265e+00:2.7973723414638207e-01:2.7951306048898132e+00:2.4466925330632039e-01:3.5245409076489498e+00 + CVs 20 + -3.6250309916814327e-02 2.8791430556528008e-01 2.9607090247939866e-01 + -3.5705367812858546e-02 6.2051178084341385e-01 5.6196267419270440e-01 + -1.6933049990299986e-02 9.8841648861232423e-01 8.1693789959717167e-01 + -9.3752683888204125e-03 1.3790868863823307e+00 1.0880988077082590e+00 + -4.3079620808147201e-02 1.7738176653382816e+00 1.4006025401266911e+00 + -1.4011834019278524e-01 2.1429318047377706e+00 1.7665519417399735e+00 + -3.2135381013397590e-01 2.4464142102645061e+00 2.1795977533580109e+00 + -6.1106076937562848e-01 2.6365668711760475e+00 2.6069697962211777e+00 + -1.0065000711474310e+00 2.6735077405454466e+00 2.9885765199717396e+00 + -1.4563511109281611e+00 2.5627982599803723e+00 3.2775789755025722e+00 + -1.9044723955275022e+00 2.3295973799099547e+00 3.4793062953417686e+00 + -2.3017196011432084e+00 1.9737111076984024e+00 3.6248396457797445e+00 + -2.5987992049551760e+00 1.5151997494660849e+00 3.7275151402376396e+00 + -2.8084588272640936e+00 1.0519405100060610e+00 3.7621617874678348e+00 + -3.0068476224985812e+00 6.8969300252561916e-01 3.7077356621606747e+00 + -3.2256287195672968e+00 5.0200931775482649e-01 3.5919172377323956e+00 + -3.4257662271335185e+00 5.0308012476318398e-01 3.4771927890552461e+00 + -3.5934030793907450e+00 5.7138713554644094e-01 3.3830262218074889e+00 + -3.9238891056794198e+00 4.6525758147863239e-01 3.2368449419644607e+00 + id 12557 + loc 8.7852579355239868e-01 4.5100861787796021e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5772593398007944e-01:4.5772135672073966e-01:9.3011435288625766e-04:3.3505921175884690e-01:4.3118633038847143e-01:3.7305121238643030e-01:9.9813574192429622e-01:2.9042668212876971e-01:1.9090665024450186e+00:2.7604399020787662e-01:2.7468303009951693e+00:3.4503549090696378e-01:3.4776563617460665e+00 + CVs 20 + -1.3999516554816685e-01 3.7869887867745344e-01 1.2030545048688795e-01 + -2.9624336728048206e-01 7.5427834133616667e-01 2.4136819046570157e-01 + -4.7329171467263820e-01 1.1071413344301124e+00 4.0249199207153119e-01 + -6.7032030277389709e-01 1.4173340288593146e+00 6.1996978703655459e-01 + -8.8449274702750269e-01 1.6693445082023017e+00 8.9736009731429611e-01 + -1.1085130829322569e+00 1.8474035417497905e+00 1.2318897150748132e+00 + -1.3304462900869047e+00 1.9382667199528516e+00 1.6157907000259590e+00 + -1.5331026191607771e+00 1.9327678352932605e+00 2.0391231887837229e+00 + -1.6937073822093682e+00 1.8252876668354432e+00 2.4889522310296321e+00 + -1.7872736457018337e+00 1.6143894574966196e+00 2.9450015539506893e+00 + -1.7934015135837154e+00 1.3043252663569951e+00 3.3767609115909010e+00 + -1.7073395990711673e+00 9.0982862124853203e-01 3.7451420459079401e+00 + -1.5516294099566297e+00 4.6242915184906597e-01 4.0269779806693364e+00 + -1.3585107607549278e+00 1.7732403572967348e-02 4.2586780094319350e+00 + -1.1500153202937291e+00 -3.1565085847105756e-01 4.5530875430071251e+00 + -9.8239084118332765e-01 -3.6414307314671213e-01 4.9818590838903267e+00 + -9.3643190627533768e-01 -2.8525200161954256e-02 5.3871858917944841e+00 + -1.1162868860790804e+00 7.0955191244406679e-01 5.3572105081734280e+00 + -1.0872131335745605e+00 9.1518826406571319e-01 5.5802024817338012e+00 + id 12558 + loc 2.0978195965290070e-01 4.8137682676315308e-01 406 + blend 0.0000000000000000e+00 + interp 4.8628404151591259e-01:3.9156201550421998e-01:1.7701691824654864e-02:4.3426896835018425e-01:9.8399214365887144e-01:4.8627917867549747e-01:1.3875968223127604e+00:3.9504568187837202e-01:1.9835817463254664e+00:4.5697726266151462e-01:2.7039516642229100e+00:4.2545385476235448e-01:3.2195345969073634e+00 + CVs 20 + 7.4879013289661678e-02 2.3256879991125903e-01 -2.1351589955356434e-01 + 1.6645339257537664e-01 3.8652010525902936e-01 -3.3097523356806940e-01 + 2.6742893767764186e-01 4.8308360760263802e-01 -4.3801846458394628e-01 + 3.7984639210217586e-01 5.5306207415115072e-01 -5.5660368696281948e-01 + 5.0186375167793529e-01 5.9875113186186790e-01 -6.8290444361037406e-01 + 6.3181515182267789e-01 6.2226361031379240e-01 -8.1383232591319721e-01 + 7.6849579518796085e-01 6.2542041261383230e-01 -9.4589247174945479e-01 + 9.1099415387159455e-01 6.1032292787562836e-01 -1.0752385571970202e+00 + 1.0579294359971172e+00 5.7977445426456697e-01 -1.2003673202249601e+00 + 1.2073925041233677e+00 5.3645147659477921e-01 -1.3235503259103951e+00 + 1.3576136872093973e+00 4.8220992206557961e-01 -1.4470631206480447e+00 + 1.5070268826638591e+00 4.1900802525046249e-01 -1.5697990493875140e+00 + 1.6539942756183446e+00 3.4914794355843265e-01 -1.6900735047833537e+00 + 1.7970534997437422e+00 2.7364739798748122e-01 -1.8097155451944325e+00 + 1.9346278292708834e+00 1.9190587093949374e-01 -1.9321819422263400e+00 + 2.0635786291432385e+00 1.0413382545913574e-01 -2.0574739306941701e+00 + 2.1800989846916399e+00 1.0767581341040833e-02 -2.1846173523657586e+00 + 2.2810977116748536e+00 -9.0954076584057297e-02 -2.3147472790125079e+00 + 2.3415325266710751e+00 -1.9475674067963766e-01 -2.4189662161286942e+00 + id 12559 + loc 9.3596613407135010e-01 9.7127109766006470e-01 409 + blend 0.0000000000000000e+00 + interp 4.2432425935628620e-01:3.8026239746209478e-01:9.2374982872688161e-01:3.8138518717836278e-01:1.9056854889483739e+00:3.0281370297983584e-01:2.8258764775100467e+00:4.2432001611369263e-01:3.1987035353022879e+00:3.7098990851428898e-01:3.9996540677939372e+00 + CVs 20 + 5.7838496151038798e-01 1.1079608231033422e-01 -2.6732383386959591e-01 + 1.0623298653274027e+00 1.3305243144107604e-01 -4.9819509930180839e-01 + 1.5415354984862051e+00 1.3129143890416017e-01 -6.9249458834300825e-01 + 2.0425782529364680e+00 1.2415294512589370e-01 -8.4319207261560147e-01 + 2.5551346727119491e+00 1.0804762929282785e-01 -9.4414470255992922e-01 + 3.0683345084060885e+00 8.0226262797580938e-02 -9.9823642195156248e-01 + 3.5710870062889732e+00 3.5095354383754218e-02 -1.0122145274105661e+00 + 4.0523203104115471e+00 -3.7558731556868619e-02 -9.9353743688392426e-01 + 4.5053091837989623e+00 -1.4876537002696488e-01 -9.5580624049647367e-01 + 4.9270152170451089e+00 -3.0922012038979974e-01 -9.2018238741821312e-01 + 5.3099654602657740e+00 -5.2538675411837987e-01 -9.0120365195641128e-01 + 5.6443616319963867e+00 -7.8934877300048356e-01 -8.9641217394092654e-01 + 5.9284158732476202e+00 -1.0857207726761935e+00 -9.0176128252598475e-01 + 6.1645926863756495e+00 -1.4077965324299559e+00 -9.2581992289068560e-01 + 6.3490564106876839e+00 -1.7525841874682344e+00 -9.7772900252430328e-01 + 6.4719317638628180e+00 -2.1078278866803335e+00 -1.0528982713428017e+00 + 6.5317897400400255e+00 -2.4550471588014422e+00 -1.1393987416038440e+00 + 6.5510361146011338e+00 -2.7863769309564379e+00 -1.2405154401486231e+00 + 6.6214548841461482e+00 -3.0973715701483715e+00 -1.3858302104949571e+00 + id 12560 + loc 2.0085744559764862e-01 6.4131164550781250e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4267928579481947e-01:3.6398284563651545e-01:2.6386956154942987e-01:2.7899777862408504e-01:9.9972560741234484e-01:4.4267485900196152e-01:1.5804285887898102e+00:2.9334840018752645e-01:2.0285247651162761e+00:2.7513115170877850e-01:3.2096556905513194e+00 + CVs 20 + 9.1973020950373421e-02 3.1222728276164269e-01 2.2894775444211021e-02 + 2.1198348622215873e-01 6.1147025465651483e-01 1.8127306309195179e-02 + 3.4756645663767072e-01 8.9431295568579849e-01 -8.5127063568292693e-03 + 4.9295316582246451e-01 1.1645847035567862e+00 -5.5499723552498992e-02 + 6.4782971514057475e-01 1.4181920234782979e+00 -1.2852896722638796e-01 + 8.1105554487366094e-01 1.6488662463033310e+00 -2.3034140479546844e-01 + 9.8181478061825711e-01 1.8467491791013040e+00 -3.5880641393579582e-01 + 1.1573432528421437e+00 2.0020402038844884e+00 -5.0719768204160243e-01 + 1.3303388566342682e+00 2.1108574560192364e+00 -6.6750313245102788e-01 + 1.4903774145713942e+00 2.1735534172495794e+00 -8.3294102762074140e-01 + 1.6306702401918902e+00 2.1919265946325224e+00 -9.9514334080852318e-01 + 1.7534903599305369e+00 2.1687042419079616e+00 -1.1437067569093946e+00 + 1.8684748212399891e+00 2.1018683533838383e+00 -1.2688809111026704e+00 + 1.9914198471933382e+00 1.9763698587410583e+00 -1.3613567539281486e+00 + 2.1421218577665386e+00 1.7693531058185705e+00 -1.4228265138636762e+00 + 2.3148690627886608e+00 1.4704533312113957e+00 -1.4805566591606572e+00 + 2.4674483356580819e+00 1.0781987454659303e+00 -1.5682560711957179e+00 + 2.5259452823208655e+00 6.0363433256815779e-01 -1.6933309173155437e+00 + 2.4029593075159057e+00 3.4406930647391293e-01 -1.6818045345882042e+00 + id 12561 + loc 9.2057019472122192e-01 7.5726789236068726e-01 1082 + blend 0.0000000000000000e+00 + interp 8.4534331847789557e-01:8.4533486504471078e-01:1.8698845353674141e+00:8.1432799741499762e-01:1.9008930002000795e+00:4.7460309466085981e-01:1.9999653805388231e+00:4.3690808465559866e-01:2.4180944078471640e+00:4.6955766473025623e-01:2.9658815251556763e+00:3.3134531494591490e-01:3.1457501143415438e+00:3.2961733871685372e-01:3.8699194299127044e+00 + CVs 20 + -1.4918689711048605e-01 3.0318716947503205e-01 3.7370941234099042e-01 + -2.5076536302235630e-01 4.9098542902102377e-01 5.3144068868578065e-01 + -3.5083954099856252e-01 6.3157853800435282e-01 6.2099343186044376e-01 + -4.7158970537113620e-01 7.5993706467597200e-01 7.1314601663527455e-01 + -6.1478012449272468e-01 8.7471288163980820e-01 8.0227344923384969e-01 + -7.8234120512830396e-01 9.7500548907818341e-01 8.8392992235792966e-01 + -9.7617403020826998e-01 1.0603015362070400e+00 9.5457454451518964e-01 + -1.1977217432483402e+00 1.1305919394866424e+00 1.0114788593871187e+00 + -1.4476854625653102e+00 1.1863710563000123e+00 1.0528699077099677e+00 + -1.7258190600372143e+00 1.2284230588870373e+00 1.0780890367130340e+00 + -2.0306886130934987e+00 1.2571368498656572e+00 1.0882281192643899e+00 + -2.3590086372598162e+00 1.2713862087371819e+00 1.0861016809315212e+00 + -2.7039034872256607e+00 1.2684158105706156e+00 1.0737459827567895e+00 + -3.0524185326157935e+00 1.2457080852922537e+00 1.0517217395221294e+00 + -3.3901962076857135e+00 1.2054441822031281e+00 1.0220336937903882e+00 + -3.7116294548115882e+00 1.1544135011475538e+00 9.9152509704331471e-01 + -4.0164186779784936e+00 1.0992341717242242e+00 9.6891424203681220e-01 + -4.2975494595927914e+00 1.0445865352820629e+00 9.6008340358198541e-01 + -4.5477233167319024e+00 1.0185565550974254e+00 9.9394358049405063e-01 + id 12562 + loc 1.0796137154102325e-01 2.0261202752590179e-01 403 + blend 0.0000000000000000e+00 + interp 4.7840833999415228e-01:4.2735687251338444e-01:7.1550412067831448e-01:4.7840355591075234e-01:1.0588102124628880e+00:3.6222447437300070e-01:1.8303552011193989e+00:3.3801825814279712e-01:2.9768485485759224e+00:2.8440608856232963e-01:3.9907723261027042e+00 + CVs 20 + -1.8817676178407880e-01 1.9403664236359700e-01 1.1489528609987945e-01 + -3.6229421296330261e-01 3.9316764657501557e-01 2.4382288666876051e-01 + -5.2355493077537152e-01 5.8657576273357881e-01 3.9392896289991985e-01 + -6.7035169199803135e-01 7.6291657481677821e-01 5.6703771457154639e-01 + -7.9632289439756854e-01 9.1067578378723413e-01 7.5749700747607629e-01 + -8.9323048812430184e-01 1.0201589789379015e+00 9.5475980128623195e-01 + -9.5553923106711236e-01 1.0887180556103868e+00 1.1451937298733357e+00 + -9.8430020756118031e-01 1.1216868930997816e+00 1.3129145670348368e+00 + -9.8832076867027874e-01 1.1312010076259760e+00 1.4453956542988673e+00 + -9.8120309689618179e-01 1.1322544656492408e+00 1.5441596911942006e+00 + -9.7265876203192914e-01 1.1363292466130359e+00 1.6242200193579905e+00 + -9.5910924808248066e-01 1.1441923163695513e+00 1.7122471819744614e+00 + -9.2913733221793149e-01 1.1456072122953498e+00 1.8299397900967622e+00 + -8.8865968129443595e-01 1.1391945058154067e+00 1.9746028717488553e+00 + -8.5054215999782146e-01 1.1258212253591535e+00 2.1398097159138381e+00 + -7.9871224687500919e-01 1.0647516317176566e+00 2.3293431659412831e+00 + -7.0152272944257621e-01 8.8060730077933280e-01 2.5385999759600630e+00 + -5.8043023668040816e-01 5.8944180815974845e-01 2.7747385701537692e+00 + -6.0399746820844702e-01 5.1530603514594431e-01 2.9978316019363787e+00 + id 12563 + loc 7.0255720056593418e-03 1.1810320615768433e-01 1085 + blend 0.0000000000000000e+00 + interp 1.1413639245734375e+00:2.7679910036821254e-01:1.5805901152828761e-02:2.7830621799501010e-01:9.8545238295739901e-01:1.0176002314473342e+00:1.0056768552140194e+00:1.1413539245734374e+00:2.8900688905970853e+00:4.1333397701121738e-01:2.9725375543693682e+00:2.4116179629265710e-01:3.1554808636835587e+00 + CVs 20 + 5.4339962867306579e-01 4.2683087305328954e-01 2.7945038098046249e-01 + 9.3549520809249487e-01 8.1426285621232042e-01 5.5877556636138070e-01 + 1.2645970964084179e+00 1.1857706070039689e+00 8.7300973379294522e-01 + 1.5541656680223315e+00 1.5514430103034820e+00 1.2549999625154602e+00 + 1.7768570589992874e+00 1.8878652159346387e+00 1.7102875440394121e+00 + 1.9049062969582800e+00 2.1689904642178428e+00 2.2309832041413986e+00 + 1.9183247505683467e+00 2.3678581480176271e+00 2.7936568690409542e+00 + 1.8138044580795112e+00 2.4613368507862825e+00 3.3610991772083509e+00 + 1.6090515705177237e+00 2.4351791284107804e+00 3.8907308835424139e+00 + 1.3516607872769433e+00 2.2906518983177784e+00 4.3430681799461945e+00 + 1.1042384853659202e+00 2.0517596871148429e+00 4.6982499839667513e+00 + 9.0852626824787142e-01 1.7521726812088343e+00 4.9592614520371683e+00 + 7.8410101573865587e-01 1.4255680551882137e+00 5.1351209549003922e+00 + 7.4136606219688184e-01 1.1139358846603580e+00 5.2330058082083371e+00 + 7.6735450610136813e-01 8.6181376918841390e-01 5.2595377251110067e+00 + 8.1497210116778351e-01 6.8350830137441343e-01 5.2262314124248066e+00 + 8.4682354134402260e-01 5.4438336338583959e-01 5.1426190697024650e+00 + 8.6131936333022563e-01 3.7904182584200063e-01 5.0269117083100978e+00 + 9.9228363541430853e-01 1.4364889841549050e-01 5.0492225931040560e+00 + id 12564 + loc 8.2957911491394043e-01 9.0174883604049683e-01 263 + blend 0.0000000000000000e+00 + interp 6.9409648463449602e-01:4.0231509503108687e-01:5.7210191571744839e-01:3.7549644719366071e-01:1.1119919787502963e+00:4.7053953267385695e-01:1.9505720355493912e+00:4.5867385242004088e-01:2.4876980932840898e+00:4.5465548978344938e-01:2.8813918382636361e+00:5.3861715962437717e-01:3.0140711332483936e+00:6.9408954366964970e-01:3.4036551162873976e+00 + CVs 20 + -7.7284650447262981e-01 4.9012890690458927e-01 -1.2903258194366510e-01 + -1.4545337016396696e+00 7.8555040283027644e-01 -1.5768947082403015e-01 + -2.1347752945100114e+00 8.9827049742552900e-01 -8.5737177921436314e-02 + -2.8161828496886963e+00 9.3003190705197314e-01 5.1027229731758994e-02 + -3.4718957913293518e+00 9.7454936103945733e-01 1.9918624733700152e-01 + -4.0973454685755009e+00 1.0643751991408097e+00 3.0573190700750252e-01 + -4.6961809037815767e+00 1.1835933580024414e+00 3.3855296776722177e-01 + -5.2693357343479823e+00 1.3103057213266016e+00 2.8833970051411351e-01 + -5.8261829214350396e+00 1.4268134398820171e+00 1.5235065384441726e-01 + -6.3864264315773660e+00 1.5138016031005548e+00 -7.8885240643903343e-02 + -6.9516734385964529e+00 1.5402604420168238e+00 -4.1018554645362570e-01 + -7.4951515068193926e+00 1.4650213566215307e+00 -8.2426414105261181e-01 + -7.9672400926430047e+00 1.2583125629463687e+00 -1.2750906722351174e+00 + -8.3306201668473676e+00 9.2943739440044215e-01 -1.7059790621465183e+00 + -8.5788708713548552e+00 5.2484261834643853e-01 -2.0687929853469025e+00 + -8.7354784866911892e+00 1.6401306582491681e-01 -2.2853367853249176e+00 + -8.8327975050715448e+00 5.2174929240795365e-02 -2.3498557254146593e+00 + -8.8585572078646759e+00 1.0186424836077590e-01 -2.4145488265107495e+00 + -8.9975359924264460e+00 -1.7330744762716721e-01 -2.3136738853358798e+00 + id 12565 + loc 6.5103423595428467e-01 7.2267127037048340e-01 372 + blend 0.0000000000000000e+00 + interp 4.0036581248286152e-01:3.7304885989935999e-01:1.7778944489498172e-01:3.0108430932226249e-01:9.2732561959338677e-01:3.2803417999655227e-01:1.6155413513241346e+00:4.0036180882473671e-01:2.2530884333284460e+00:3.0786262139387294e-01:2.9870926090419960e+00:3.0003604978703224e-01:3.7953392452390959e+00 + CVs 20 + -3.9883713809961041e-01 3.8726363536783198e-01 2.3415400379207918e-02 + -7.2859674203051372e-01 6.6739617012980312e-01 5.8429331624596945e-02 + -1.0194460228668727e+00 8.3109497677937560e-01 1.0469580724186037e-01 + -1.3149559575456906e+00 8.9645634264338769e-01 1.6387469033472582e-01 + -1.6307783893150058e+00 9.1384975202756358e-01 2.5404632864852861e-01 + -1.9875385334731406e+00 9.5187312872328422e-01 3.9171373766942114e-01 + -2.4136349934322814e+00 1.0554488010965182e+00 5.4937774777559167e-01 + -2.9146907741777559e+00 1.2501026992929340e+00 6.7375509660018895e-01 + -3.4530531197910088e+00 1.5474524520063342e+00 7.1494756155797834e-01 + -3.9701211696624368e+00 1.9295987781182409e+00 6.3878896646695238e-01 + -4.4305098337722137e+00 2.3476392293258730e+00 4.3111284117609472e-01 + -4.8224758671670589e+00 2.7341227944991080e+00 8.8516087058819859e-02 + -5.1259779267495382e+00 2.9987629032562295e+00 -3.8182273328625693e-01 + -5.2986810443880730e+00 3.0523548414296773e+00 -9.3194660436358034e-01 + -5.3095593347580685e+00 2.8876246570731698e+00 -1.4610216028004603e+00 + -5.2300304720323174e+00 2.5554604012143258e+00 -1.9099637629357249e+00 + -5.2197986377796832e+00 2.0333195590002875e+00 -2.2727750886695421e+00 + -5.3686283635026868e+00 1.3535275996639582e+00 -2.5215892482417264e+00 + -5.5031667614631710e+00 6.9501291759773753e-01 -2.7851830989118049e+00 + id 12566 + loc 8.0756968259811401e-01 1.3297057151794434e-01 413 + blend 0.0000000000000000e+00 + interp 5.3404335313593854e-01:2.7818472667758959e-01:3.4320336287209607e-01:3.1081186086166945e-01:1.3441934173915500e+00:4.5951839297873392e-01:1.7484447408528672e+00:5.3403801270240725e-01:2.0094758968835951e+00:4.5418421322356672e-01:2.6035360645378747e+00:2.8082611190358198e-01:3.0000019014634782e+00:4.5220302882371410e-01:3.4531860045791922e+00 + CVs 20 + -1.0084327639298778e+00 1.5166022894639483e-01 2.4272024947625553e-01 + -1.6345418877119668e+00 1.6054872518114349e-01 4.2005087549552667e-01 + -2.1739428235951732e+00 1.3285401428847168e-01 5.7287420044769088e-01 + -2.7280450929334186e+00 1.2478520307958352e-01 7.0943986594171538e-01 + -3.2887844624913387e+00 1.2472287984050867e-01 8.2588567656167577e-01 + -3.8491634825489802e+00 1.1716804590661223e-01 9.1992527099685029e-01 + -4.4053606287930069e+00 9.1263976379205469e-02 9.9405338494886064e-01 + -4.9612116463822593e+00 4.6298456315066128e-02 1.0537128068671946e+00 + -5.5268479327813660e+00 -1.7280298083588441e-02 1.0999162103661098e+00 + -6.1066781666037331e+00 -1.1399134597884764e-01 1.1279477587815288e+00 + -6.6946338218671162e+00 -2.6866342869025894e-01 1.1420990159367681e+00 + -7.2699913899547433e+00 -5.1019112778901166e-01 1.1598167208971750e+00 + -7.8024659048728298e+00 -8.5198379370900224e-01 1.1900463212329422e+00 + -8.2652756185537140e+00 -1.2837887374883739e+00 1.2215151127387933e+00 + -8.6414200239901113e+00 -1.7827898556004391e+00 1.2428358505777761e+00 + -8.9225822854670795e+00 -2.3252317338798378e+00 1.2572241898607674e+00 + -9.1027099317128215e+00 -2.8864174957310538e+00 1.2674739904597840e+00 + -9.1728402276210037e+00 -3.4415767327185289e+00 1.2615446574892428e+00 + -9.0634629372558209e+00 -3.9127485347324136e+00 1.2396465354292654e+00 + id 12567 + loc 9.9006795883178711e-01 1.7161427438259125e-01 397 + blend 0.0000000000000000e+00 + interp 3.3368384124637529e-01:2.6662778144468030e-01:4.2492945870886700e-06:1.8756631212281294e-01:1.2999465650224598e+00:3.3368050440796282e-01:2.1667180016114815e+00:2.6525218546899770e-01:2.9241043622188929e+00 + CVs 20 + -1.0318551745424138e+00 6.4167794930178879e-02 4.0280245250553987e-01 + -1.6208769750656598e+00 -3.9038328907185754e-02 6.9170133055312721e-01 + -2.1160210008913016e+00 -1.9704911648693760e-01 9.6590815697189070e-01 + -2.6268539549348451e+00 -3.4964984328943466e-01 1.2377383854463602e+00 + -3.1604350077567114e+00 -5.0899079115491919e-01 1.5059624323437961e+00 + -3.7266066962375097e+00 -6.9639973722745840e-01 1.7730302004692364e+00 + -4.3224289979711799e+00 -9.3174307285369906e-01 2.0467268429197780e+00 + -4.9275527389334552e+00 -1.2291249117185656e+00 2.3363438929481397e+00 + -5.5089372939805257e+00 -1.6090930442833300e+00 2.6384487306705742e+00 + -6.0228182739526597e+00 -2.0949332313922140e+00 2.9385657583322358e+00 + -6.4229509084496383e+00 -2.6872021155451060e+00 3.2313811574645630e+00 + -6.6800752092408944e+00 -3.3599372826415519e+00 3.5186193162854669e+00 + -6.7924169713526936e+00 -4.0709799040861965e+00 3.7994778695182823e+00 + -6.7769479269040733e+00 -4.7744964981029128e+00 4.0737787106015668e+00 + -6.6576971270014473e+00 -5.4281927738231781e+00 4.3398570640018850e+00 + -6.4628290699219093e+00 -6.0029196148654158e+00 4.5806715639338282e+00 + -6.2273781076940899e+00 -6.4965401879066995e+00 4.7741400328292052e+00 + -5.9957553935115504e+00 -6.9435256826028571e+00 4.9305989673416581e+00 + -5.9036223466697377e+00 -7.4786744520847828e+00 5.2151588296492566e+00 + id 12568 + loc 8.5294121503829956e-01 2.4819667637348175e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6093774698570639e-01:4.0452741100832090e-01:1.9269740236471655e-04:4.5974158771952045e-01:3.1691542299255970e-01:4.0657619908663067e-01:8.6982652143782346e-01:4.6093313760823656e-01:1.1209256891362993e+00:4.1919420106315231e-01:1.7084274659290606e+00:2.7997913290441157e-01:2.0214841872743090e+00:4.0026331307789526e-01:2.9148554123655686e+00:3.4496883637189091e-01:3.3607794012346464e+00 + CVs 20 + -8.5798109902441133e-02 4.4583669419448513e-01 1.5324715373651093e-01 + -1.9719719530275148e-01 8.8777498463507221e-01 2.6168174862769622e-01 + -3.4382165710955648e-01 1.3168182150173486e+00 3.1829880954992990e-01 + -5.3477507820208559e-01 1.7229996554707112e+00 3.2816572435092672e-01 + -7.8261568668270054e-01 2.0968473271617389e+00 3.0522966267181467e-01 + -1.1033934126618119e+00 2.4305222692510196e+00 2.7040666613900421e-01 + -1.5052304512202594e+00 2.7098472389862467e+00 2.5236381489450266e-01 + -1.9696994257399398e+00 2.9141105657454913e+00 2.8047545735714896e-01 + -2.4794282602383659e+00 3.0348490203853280e+00 3.8482918583891162e-01 + -3.0760254030967551e+00 3.0368216158412058e+00 6.5202654594043363e-01 + -3.6666556467314106e+00 2.7691629048035677e+00 1.1592004703271932e+00 + -3.9823590888132987e+00 2.2716049117790851e+00 1.6672195816200410e+00 + -4.0589041947970577e+00 1.6922509650568718e+00 2.0566162228556930e+00 + -3.9512836588256315e+00 1.0479550587507278e+00 2.3522916806762404e+00 + -3.7093516195729048e+00 4.4509105021588857e-01 2.5275821784127621e+00 + -3.4594278153125386e+00 8.4535709909648628e-03 2.5879510246118347e+00 + -3.2948548420722443e+00 -2.3829134189353798e-01 2.5873044429567309e+00 + -3.2820727590333116e+00 -2.2310653275904033e-01 2.5807052793623084e+00 + -3.2158728553155167e+00 -4.5496974921752853e-01 2.5467584125182370e+00 + id 12569 + loc 2.2571580111980438e-01 8.9691716432571411e-01 411 + blend 0.0000000000000000e+00 + interp 4.8731049755240535e-01:4.8440320889031641e-01:1.3301503199958264e-01:3.4685767216685953e-01:9.6981553734448045e-01:4.8730562444742986e-01:1.2831836265275969e+00:3.9057568114595792e-01:2.0187239499085399e+00:3.3379275920746038e-01:2.8958210010107091e+00:4.3955689188268310e-01:3.1362446204050327e+00:4.1087682888759597e-01:3.7630737216997963e+00 + CVs 20 + 9.2797456280138335e-01 1.8326329246943901e-01 1.0913490831352943e-02 + 1.5403591362655313e+00 2.1526410477801869e-01 3.4425179737580122e-02 + 2.0690047200635888e+00 1.7502639224816546e-01 8.6327517765270284e-02 + 2.6118769966454622e+00 9.9956687623703133e-02 1.7926875700938383e-01 + 3.1598538995331853e+00 -4.6823230580740338e-03 3.1405982176713032e-01 + 3.7042561674680736e+00 -1.2980600059456515e-01 4.8608188750648407e-01 + 4.2351997530616439e+00 -2.6490749428207128e-01 6.8612277079151507e-01 + 4.7422730339221371e+00 -4.0448649027503358e-01 9.0569647019127719e-01 + 5.2185002915224938e+00 -5.5464782699142212e-01 1.1400736128110560e+00 + 5.6564938279833870e+00 -7.3115252225968486e-01 1.3779428265979268e+00 + 6.0434157796168417e+00 -9.3960180747548661e-01 1.5998833521805012e+00 + 6.3667442181514655e+00 -1.1713434205331708e+00 1.7876857765028353e+00 + 6.6272924206954142e+00 -1.4146762368785648e+00 1.9330692204894977e+00 + 6.8381886887594270e+00 -1.6644984525349813e+00 2.0358291723207045e+00 + 7.0134082986179411e+00 -1.9168639668782192e+00 2.0959451037473418e+00 + 7.1636791778241342e+00 -2.1582451244845258e+00 2.1100002780959088e+00 + 7.2993604135744219e+00 -2.3821770861247700e+00 2.0785155793691015e+00 + 7.4179500598333483e+00 -2.6097959748836552e+00 2.0177974135035521e+00 + 7.3934552942790663e+00 -2.8782390731371570e+00 1.9045836694118690e+00 + id 12570 + loc 4.5406734943389893e-01 9.5384162664413452e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0086802250973095e-01:4.5933294745448311e-01:4.0992618266144643e-04:5.0086301382950582e-01:5.3030000081359518e-01:3.1641461672342514e-01:9.9143690258324946e-01:2.1652561732834391e-01:1.7932825584240757e+00:3.3056880380615222e-01:2.6569737243666167e+00:3.8892629067116863e-01:2.9988693659306978e+00:3.1294368644311232e-01:3.5494208857055636e+00 + CVs 20 + 1.2534424679679967e-01 2.7164057409913472e-01 -8.0176220929273345e-04 + 2.5530377375171909e-01 5.2288068984686886e-01 -4.2177732131188417e-02 + 3.8685682958471623e-01 7.7070847922057495e-01 -1.0762106539639926e-01 + 5.1580132804895462e-01 1.0186572863601642e+00 -1.9257777607441701e-01 + 6.3735476946892144e-01 1.2598491981092506e+00 -3.0284874670955803e-01 + 7.4406277186209280e-01 1.4844569251002262e+00 -4.4220278624218090e-01 + 8.2624631124245418e-01 1.6795812746801826e+00 -6.1058733894623829e-01 + 8.7350675269150635e-01 1.8300644624207760e+00 -8.0094144684971691e-01 + 8.7801842377010830e-01 1.9217354970220657e+00 -9.9595347585699534e-01 + 8.4071099470582544e-01 1.9510073611308694e+00 -1.1711139242794308e+00 + 7.7288175142171744e-01 1.9308545816567850e+00 -1.3094361154159893e+00 + 6.8705196514995293e-01 1.8792463027534805e+00 -1.4148823213473520e+00 + 5.8768094239549429e-01 1.8022963851966387e+00 -1.5042823556289160e+00 + 4.7424850640652821e-01 1.6906359345101214e+00 -1.5957510972495703e+00 + 3.4959388223375115e-01 1.5230393716771378e+00 -1.7115419587164189e+00 + 2.3731215173760484e-01 1.3266021661631571e+00 -1.8376104370511059e+00 + 1.3891378050520872e-01 1.1222213463274000e+00 -1.9683398083204113e+00 + 4.6697157782907027e-02 8.7755631675824730e-01 -2.1342340038655925e+00 + -1.4711338552458295e-02 7.1714762758183681e-01 -2.2569675218845804e+00 + id 12571 + loc 3.6227089166641235e-01 8.8259750604629517e-01 1081 + blend 0.0000000000000000e+00 + interp 1.4299694850812308e+00:1.4299594850812307e+00:1.7897566755029095e+00:4.7463170991555503e-01:2.0228665528967000e+00:4.0370867248442793e-01:2.2997112492768741e+00:2.8325473395674222e-01:3.1479738094985610e+00:3.2378717943875790e-01:3.9887136380166526e+00 + CVs 20 + 3.3156616689866220e-02 5.0025157028128153e-01 6.5268502400833650e-01 + 9.2595143351124454e-02 8.6141817747703375e-01 1.0497762209722767e+00 + 1.6939193368441149e-01 1.1848663892438664e+00 1.3612229367569555e+00 + 2.5878565584756086e-01 1.5116281836617695e+00 1.6550533877907923e+00 + 3.6180049201953857e-01 1.8337600328558783e+00 1.9244214592177806e+00 + 4.7667200249308272e-01 2.1416238916342900e+00 2.1623428863994465e+00 + 6.0224391529308696e-01 2.4294178616259727e+00 2.3615720276742347e+00 + 7.4810367413779844e-01 2.7039929790435453e+00 2.5231736864625312e+00 + 9.6628623422998106e-01 2.9892063050545259e+00 2.6483975573027818e+00 + 1.3480314134124711e+00 3.2415698317734818e+00 2.6635835339231244e+00 + 1.7536437980771664e+00 3.3039883997493709e+00 2.5052045461465293e+00 + 2.0222471193785951e+00 3.2202707227735123e+00 2.2845020838409313e+00 + 2.1919995120065492e+00 3.0676392972814610e+00 2.0501948859206571e+00 + 2.3080897919502807e+00 2.8620466051572464e+00 1.8007155887524435e+00 + 2.4006062714423053e+00 2.5848999479612704e+00 1.5212260021701391e+00 + 2.4906691074382739e+00 2.1782702625830983e+00 1.2170138315512322e+00 + 2.5849938930085710e+00 1.6245063673148419e+00 9.9173747352344643e-01 + 2.6875650418059283e+00 1.0424713179350142e+00 9.3102023237112430e-01 + 2.8074734016014204e+00 5.8287809907496402e-01 9.6901617912328519e-01 + id 12572 + loc 6.3675171136856079e-01 6.7939633131027222e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1189163966080267e-01:3.0388176890512941e-01:3.8671536195531142e-01:2.5665021305085756e-01:1.0678385330850739e+00:3.9956289980654958e-01:1.8721233864071460e+00:2.5799357830899960e-01:2.2992714450541345e+00:4.1188752074440610e-01:2.9998726190800071e+00:2.6418542931461370e-01:3.9184607050781524e+00 + CVs 20 + 8.3293840621344012e-02 2.8247490264451103e-01 -1.7883105299611141e-01 + 1.5881641604351082e-01 5.6781110766023546e-01 -3.5733461485621154e-01 + 2.4544916028567360e-01 8.5136240752059877e-01 -5.2968376656786176e-01 + 3.5432855645757788e-01 1.1298505639898844e+00 -6.9445474927920681e-01 + 4.8922251685642015e-01 1.4000061129021031e+00 -8.5392989885326998e-01 + 6.4954361092903223e-01 1.6561980244491190e+00 -1.0123512310204719e+00 + 8.2975519819556776e-01 1.8910671449088814e+00 -1.1755920393269956e+00 + 1.0209794416457276e+00 2.0979121540765573e+00 -1.3462414143537715e+00 + 1.2127315892992390e+00 2.2735938072037358e+00 -1.5262861952956772e+00 + 1.3953192774412997e+00 2.4201156678057618e+00 -1.7232878971951291e+00 + 1.5611636313437258e+00 2.5408115676329173e+00 -1.9466922737593308e+00 + 1.7008469271307325e+00 2.6333855543330893e+00 -2.2034383929491579e+00 + 1.8056292685659470e+00 2.6910750843656475e+00 -2.4964382185948661e+00 + 1.8735160607176149e+00 2.7085717441638968e+00 -2.8264971229345743e+00 + 1.9064693550766258e+00 2.6773166308704788e+00 -3.1892296912832214e+00 + 1.9096724037659010e+00 2.5857019681685314e+00 -3.5607307756835653e+00 + 1.8819177122797730e+00 2.4308565792260577e+00 -3.8942366443988350e+00 + 1.8034226270873919e+00 2.2321570775112094e+00 -4.1255449862828026e+00 + 1.5850707957889505e+00 2.0598813923035091e+00 -4.0407242030755928e+00 + id 12573 + loc 5.3486192226409912e-01 4.7605961561203003e-01 1084 + blend 0.0000000000000000e+00 + interp 2.9580917892213610e-01:2.6653670900510074e-01:3.5305422227671690e-01:2.9580622083034691e-01:1.2234159234234723e+00:2.9138822015123644e-01:2.3080244697525223e+00:2.9577178094803658e-01:3.3044434058619321e+00 + CVs 20 + 1.9911224829429677e-01 4.0175902155985926e-01 -1.9160236360807129e-01 + 3.9648764890499250e-01 7.7169743477527386e-01 -3.5327905230209888e-01 + 5.9849360566534004e-01 1.1348835125966847e+00 -5.2600733736163485e-01 + 8.2055222631653324e-01 1.4960237193190151e+00 -7.1222463731007579e-01 + 1.0876371687824331e+00 1.8450420985413265e+00 -8.8092922810725116e-01 + 1.4140218466255337e+00 2.1662440776760201e+00 -9.9995772503329217e-01 + 1.7913361996893880e+00 2.4373966198443604e+00 -1.0407121187005886e+00 + 2.1877334095286134e+00 2.6334672503186276e+00 -9.7591825743687011e-01 + 2.5570224604341654e+00 2.7294541323143968e+00 -7.8592012631429675e-01 + 2.8646200051916284e+00 2.7089629958121213e+00 -4.8302842347158337e-01 + 3.1082046801935843e+00 2.5582751075727819e+00 -1.1209416452811372e-01 + 3.3061612878935041e+00 2.2519005491698563e+00 2.4913714763804284e-01 + 3.4765471972583457e+00 1.8145654282916075e+00 5.0688147567742758e-01 + 3.6174698573333406e+00 1.3389921573184593e+00 6.8216273107784298e-01 + 3.7060389822532520e+00 8.8223810906101752e-01 8.8738811995188682e-01 + 3.7334906003342057e+00 5.2070169969421787e-01 1.1981058686350790e+00 + 3.7439291085241364e+00 3.5824731257043102e-01 1.5968761504878120e+00 + 3.7906446765762363e+00 3.7603010235816126e-01 1.9832325199631118e+00 + 3.8484272230948009e+00 2.9678465558948797e-01 2.3475664991879346e+00 + id 12574 + loc 9.7563242912292480e-01 4.4209823012351990e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8887425677484231e-01:3.3201509203433655e-01:1.7581332936164118e-01:3.7461074750844586e-01:9.9999780421245577e-01:4.8886936803227460e-01:1.4461330031216486e+00:3.1100570853684290e-01:2.1726450158581936e+00:3.2964840752454511e-01:3.0746188098259259e+00:4.8065327887636911e-01:3.6838592283463178e+00 + CVs 20 + -4.3007967689502297e-02 3.8797414456248958e-01 -2.4832357697360491e-01 + -1.1230952879831506e-01 7.3266237023632397e-01 -3.9358194134557278e-01 + -1.9564136305568025e-01 1.0684891506783143e+00 -4.9553426751795016e-01 + -2.9793234839839811e-01 1.4208116182482655e+00 -5.6881419353309570e-01 + -4.2522265282245630e-01 1.7785785981781674e+00 -5.8964948361738112e-01 + -5.8260203223042539e-01 2.1221442047632317e+00 -5.2554861756514959e-01 + -7.6918200925864899e-01 2.4103684056862349e+00 -3.3508651092801878e-01 + -9.5895618062619714e-01 2.5622318946424807e+00 6.8061536984855842e-03 + -1.0865028667068233e+00 2.4946650856540034e+00 4.3540203624228424e-01 + -1.1089592908100050e+00 2.2334752044535930e+00 8.1676552887661624e-01 + -1.0429245032562320e+00 1.8635709021908016e+00 1.0876705924943404e+00 + -9.2630265428907088e-01 1.4497564443979045e+00 1.2510033852977118e+00 + -7.9806756456892225e-01 1.0346893305483049e+00 1.3505579171936928e+00 + -6.7160030293157913e-01 6.5683909726528633e-01 1.4595388356188639e+00 + -5.4169018527651025e-01 4.1725797004876630e-01 1.6887326645559719e+00 + -4.4609180124345282e-01 5.6293575455908706e-01 2.1010843307726876e+00 + -5.5162920292753448e-01 1.3445926908353345e+00 2.3134469365082886e+00 + -9.5167442469136976e-01 2.1689343923752107e+00 1.4605065997034781e+00 + -9.7343870442237790e-01 2.3546558967168911e+00 1.5478065738571536e+00 + id 12575 + loc 1.1621838063001633e-01 3.6273073405027390e-02 408 + blend 0.0000000000000000e+00 + interp 6.8725781898706764e+00:6.8725681898706767e+00:7.9533179726319014e-02:5.0734320355823270e-01:2.7050507895547848e-01:3.7280151716463295e-01:1.0019478831938009e+00:3.1257989190220331e-01:1.9910792590023432e+00:4.2336892179728519e-01:2.4302910998865603e+00 + CVs 20 + -5.2827332024184478e-02 3.9137058751072173e-01 -3.8365499682255300e-01 + -9.2269677940202299e-02 6.8159938858249935e-01 -5.6116079292432586e-01 + -1.1699884894355435e-01 9.0161411433869254e-01 -6.6834243399247573e-01 + -1.4139450488167121e-01 1.1143781166724780e+00 -7.7345846074662239e-01 + -1.6248775273923211e-01 1.3157059827017443e+00 -8.7660267553443338e-01 + -1.7416708926403429e-01 1.4986091295072799e+00 -9.8065750389266193e-01 + -1.6583221829209541e-01 1.6516506415602596e+00 -1.0927524398411261e+00 + -1.1934866348892922e-01 1.7531433516829140e+00 -1.2225059366083257e+00 + -8.6654744772633185e-03 1.7658913680418067e+00 -1.3635413765266515e+00 + 1.6504291199823670e-01 1.6778674871823158e+00 -1.4639886156282793e+00 + 3.4523268554838465e-01 1.5619192806849829e+00 -1.5065181216536558e+00 + 5.0928363175945268e-01 1.4609243456591483e+00 -1.5501904157696476e+00 + 6.7016074199347320e-01 1.3610985280945163e+00 -1.6236388847907666e+00 + 8.3408488168111550e-01 1.2642819852351810e+00 -1.7294589113752263e+00 + 9.9789211811513800e-01 1.1990981544000425e+00 -1.8696056329285904e+00 + 1.1514993651881940e+00 1.1959997948487939e+00 -2.0420327406363699e+00 + 1.2827147130012539e+00 1.2562340710192763e+00 -2.2345343207178185e+00 + 1.3872898913113421e+00 1.3558207219182155e+00 -2.4312044917556257e+00 + 1.5380588299600624e+00 1.3020394562690418e+00 -2.6262727363481670e+00 + id 12576 + loc 3.1632599234580994e-01 7.0239984989166260e-01 406 + blend 0.0000000000000000e+00 + interp 4.1681901469611449e-01:4.1681484650596756e-01:1.1886526740328873e-01:3.2465468640116496e-01:8.5087609895170346e-01:3.8426747070198763e-01:1.3481542221308507e+00:3.9505623402408607e-01:2.0332398876989948e+00:3.5959438422327195e-01:3.4904511162942882e+00 + CVs 20 + 2.4538699309547399e-01 2.6104727229998703e-01 -2.2330134376139506e-02 + 3.6775030669946529e-01 4.1939744390544609e-01 -1.8390284457479783e-02 + 4.6186823168254004e-01 5.3775240504407984e-01 4.3001559098407166e-03 + 5.7581815097717048e-01 6.4558643506895164e-01 4.5067667786079665e-02 + 7.0623607491857265e-01 7.3876209783789515e-01 1.0436758702965984e-01 + 8.4954072817051562e-01 8.1341599967127509e-01 1.8126589461332862e-01 + 1.0016879074576825e+00 8.6605838497346643e-01 2.7328862148559879e-01 + 1.1581694945102370e+00 8.9399447932746801e-01 3.7656515789511447e-01 + 1.3153668010040975e+00 8.9609648449459267e-01 4.8685578977150046e-01 + 1.4722904109265045e+00 8.7264477539695362e-01 6.0046071565982972e-01 + 1.6294124811773700e+00 8.2423653042581702e-01 7.1262751005946223e-01 + 1.7860471735293613e+00 7.5186408910424951e-01 8.1556031278831376e-01 + 1.9408783670298773e+00 6.5763641427936825e-01 9.0118642130201065e-01 + 2.0935682985835373e+00 5.4434142738964852e-01 9.6564016231021654e-01 + 2.2414332217803166e+00 4.1623236843316425e-01 1.0076765506618501e+00 + 2.3770592920725653e+00 2.8114901847930285e-01 1.0249397397792432e+00 + 2.4927175189153234e+00 1.4819921229986310e-01 1.0162680009365550e+00 + 2.5835590035741762e+00 2.1678920346486774e-02 9.8625644318151862e-01 + 2.6683897255731557e+00 -1.5208737188844590e-01 9.0626608864787506e-01 + id 12577 + loc 5.8667272329330444e-01 2.7941960096359253e-01 1048 + blend 0.0000000000000000e+00 + interp 3.7558816730245431e-01:2.3195143546457533e-01:5.9690693828038488e-01:2.5280587320943620e-01:1.2120053942436682e+00:2.2508909056305271e-01:2.0571096761010557e+00:3.6889641369274234e-01:2.7427983220599188e+00:3.7558441142078131e-01:3.0493982330835054e+00:2.2308133295251262e-01:3.8292217926788963e+00 + CVs 20 + -7.6082088044508750e-02 5.0989225270372696e-01 2.5459141682064518e-01 + -1.9478634141091461e-01 1.0464939583555277e+00 4.6536730458278758e-01 + -4.0890311364870385e-01 1.5831719929591210e+00 5.9602566431847026e-01 + -7.5421730634734518e-01 2.0722209658927802e+00 6.4379532192149702e-01 + -1.2490729465186239e+00 2.4393661340325496e+00 6.4641698177885321e-01 + -1.8728930466269327e+00 2.5915373618510631e+00 6.8139788726584460e-01 + -2.5192287182916102e+00 2.4321084417934435e+00 8.3168304647268199e-01 + -2.9889600770313409e+00 1.9694391117443357e+00 1.0645805583093815e+00 + -3.2340401038099653e+00 1.3951676414798344e+00 1.2641570492013106e+00 + -3.4014220961180994e+00 8.5804366890367634e-01 1.4276560363744402e+00 + -3.6048887009409807e+00 4.0512239127590444e-01 1.6228605927773061e+00 + -3.8624481944914746e+00 7.2605573540476975e-02 1.9429780322002721e+00 + -4.1054740273740036e+00 -7.5074572313086285e-02 2.4433106847911410e+00 + -4.2344689040472501e+00 -3.4654105549574044e-02 2.9837005541648698e+00 + -4.2801992329981058e+00 5.8860484816810388e-02 3.4189303669104136e+00 + -4.3321925852546839e+00 1.3467246270796451e-01 3.7653109098258515e+00 + -4.4269828189674527e+00 2.0549740349175505e-01 4.0677317366061896e+00 + -4.5599444989043105e+00 2.7529315666020915e-01 4.3860987499689132e+00 + -4.7681398538076136e+00 2.6475444990817254e-01 4.6780643690118460e+00 + id 12578 + loc 2.0449654757976532e-01 2.7089127898216248e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7425889549754857e-01:3.2596037162134922e-01:6.7692026943110528e-01:2.4799240812951193e-01:1.1906780993717703e+00:2.7204461000133251e-01:2.0160847026122570e+00:3.2747008660143395e-01:2.6870108664889290e+00:2.5600899226234669e-01:3.1679154599894441e+00:4.7425415290859363e-01:3.9999611415331753e+00 + CVs 20 + 2.7037649040870582e-01 3.3402065934134562e-01 2.8115862319645801e-01 + 4.4637376521351424e-01 5.8767159197335106e-01 5.1208411091871087e-01 + 5.9976049743375992e-01 8.1143718031995671e-01 7.2033119613734031e-01 + 7.6503588780229337e-01 1.0268120230774078e+00 9.1135926658214905e-01 + 9.4018359048314293e-01 1.2441938886460604e+00 1.0963866163018987e+00 + 1.1211729782540114e+00 1.4734033158834245e+00 1.2945020557698395e+00 + 1.2975871050480028e+00 1.7183858751078160e+00 1.5309024224293590e+00 + 1.4487387340205800e+00 1.9726483641293520e+00 1.8304767120337955e+00 + 1.5440405408217934e+00 2.2192779226716941e+00 2.2049826153413918e+00 + 1.5498265749775353e+00 2.4315593544306204e+00 2.6366084153945577e+00 + 1.4582375568875612e+00 2.5840591923704528e+00 3.0875587980770236e+00 + 1.2903116576771396e+00 2.6626109245271286e+00 3.5343457056886036e+00 + 1.0718843443655008e+00 2.6605958324927146e+00 3.9621515521215258e+00 + 8.2260915749787966e-01 2.5838133977703146e+00 4.3397933962436710e+00 + 5.6403046004547108e-01 2.4494200551279621e+00 4.6332898148652468e+00 + 3.4684700870334484e-01 2.2729183220902756e+00 4.8079756135858576e+00 + 1.9200497160013874e-01 2.0781900393347361e+00 4.8197945710691030e+00 + 1.0171860912176067e-01 1.8454165427177656e+00 4.7194940498190006e+00 + 3.7284054807606404e-01 1.5927809025153099e+00 4.9254081165694314e+00 + id 12579 + loc 9.9878305196762085e-01 3.9648696780204773e-01 403 + blend 0.0000000000000000e+00 + interp 5.0045055161491925e-01:2.5465482129783368e-01:6.4695995576258714e-02:2.0793469761303790e-01:1.0497137462365191e+00:5.0044554710940314e-01:1.7493183919742790e+00:4.7100736859298908e-01:2.0820027276230455e+00:2.6893856026506124e-01:2.7262606899377788e+00:3.2731713581979410e-01:3.5038676515162037e+00 + CVs 20 + -5.2544370401708423e-02 7.0103378308563127e-03 6.9491369482024154e-02 + -1.0087633846293488e-01 1.5898057106178184e-02 1.3219191165537983e-01 + -1.4809533037928596e-01 2.9124318734840601e-02 1.8901796077389987e-01 + -2.0045177627165864e-01 5.0980115700210077e-02 2.4221854179711494e-01 + -2.5951627388189796e-01 8.3922594990745558e-02 2.9329882862141410e-01 + -3.2306194982946157e-01 1.2891666294871046e-01 3.4237930410174577e-01 + -3.8968053228092653e-01 1.8664582214941111e-01 3.9018024458813932e-01 + -4.6024219520444842e-01 2.5887721184817913e-01 4.4013303019385841e-01 + -5.3458400522729055e-01 3.4747079509703638e-01 4.9791253308788891e-01 + -6.0841692635424138e-01 4.5130079120815864e-01 5.6904669074057479e-01 + -6.7590786184511487e-01 5.6609517973757972e-01 6.5690373094750565e-01 + -7.3333850878373075e-01 6.8833942311771645e-01 7.6387072257689526e-01 + -7.7783115733440555e-01 8.1690711943160133e-01 8.9351739905506455e-01 + -8.0454132740249884e-01 9.4986719430257249e-01 1.0505249279099105e+00 + -8.0639114243774723e-01 1.0813501393906249e+00 1.2391125167764327e+00 + -7.7421000961754327e-01 1.2047655469884744e+00 1.4622058723160867e+00 + -6.9319065908635324e-01 1.3207504049056062e+00 1.7204471531486132e+00 + -5.4124600192784922e-01 1.4341646153251031e+00 2.0071919223883179e+00 + -5.1663188051642117e-01 1.4680283092019066e+00 2.1155904298020518e+00 + id 12580 + loc 4.7704860568046570e-01 5.0416880846023560e-01 397 + blend 0.0000000000000000e+00 + interp 1.2548313021246356e+00:4.7115951576347687e-01:3.0221548412904087e-01:2.8654943172046066e-01:8.9888960300432164e-01:1.0201595091563103e+00:9.6511157362640243e-01:5.7044746816696601e-01:9.8123520393622310e-01:1.2548213021246355e+00:2.9998340372633328e+00:1.0963926019144663e+00:3.0002206619632501e+00:6.0797016370161994e-01:3.0299677302846626e+00:2.7528848695471575e-01:3.5327214424833571e+00 + CVs 20 + 1.2688681599912701e+00 4.0569536177754989e-01 -1.9181220804337684e-01 + 2.1238376095398630e+00 5.6729258989698073e-01 -3.2799974414979960e-01 + 2.8981031244004227e+00 6.2360693402634271e-01 -4.5475469667334195e-01 + 3.7289664963609370e+00 6.2268607374302498e-01 -5.8882128212062224e-01 + 4.5850785170635788e+00 5.4373182623151561e-01 -7.2598906111371864e-01 + 5.4474887811814812e+00 3.7246560164213410e-01 -8.6646621618562381e-01 + 6.3019516158611504e+00 9.8976656815503272e-02 -1.0091751100433810e+00 + 7.1116069780028397e+00 -2.8607184839318411e-01 -1.1573336693931684e+00 + 7.8281730817134365e+00 -7.8774499894192607e-01 -1.3152634928685267e+00 + 8.4051609895910104e+00 -1.3944955874461598e+00 -1.4863656283694244e+00 + 8.8115165680337579e+00 -2.0644515739771441e+00 -1.6777919437775317e+00 + 9.0470260697451064e+00 -2.7369445749994736e+00 -1.8924465434773532e+00 + 9.1445301728903097e+00 -3.3623054919119642e+00 -2.1287142635365530e+00 + 9.1512346134250997e+00 -3.9177431914085408e+00 -2.3858280241468135e+00 + 9.1097364539707666e+00 -4.4026051012127283e+00 -2.6603824945932226e+00 + 9.0505320627088217e+00 -4.8332490868385403e+00 -2.9421626294055567e+00 + 8.9895370291053869e+00 -5.2391957620085696e+00 -3.2199565900166234e+00 + 8.9304912034975157e+00 -5.6450449708666142e+00 -3.4859018280754626e+00 + 8.8989819086534840e+00 -6.0358101667585604e+00 -3.7381715474380504e+00 + id 12581 + loc 4.1097626090049744e-01 7.2915279865264893e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1219763169338458e-01:3.7491393157427666e-01:5.6519783536534973e-02:4.1219350971706764e-01:8.8083131118146218e-01:3.3486241994377108e-01:1.3058015813068584e+00:4.0571532974374036e-01:2.1271181630175957e+00:2.8072270034634578e-01:3.0000934431719921e+00:3.8762774901765534e-01:3.5498613827994934e+00 + CVs 20 + 5.2241867578084959e-02 3.1843931959646643e-01 -1.1555133660689743e-01 + 1.2384388305777763e-01 6.3526657397389408e-01 -2.6935665335499603e-01 + 2.1913315639930819e-01 9.3812797484212196e-01 -4.4844267700484031e-01 + 3.4082608613301407e-01 1.2174515284190102e+00 -6.4884524891641293e-01 + 4.8603631209839349e-01 1.4615599782870783e+00 -8.6951954579400514e-01 + 6.4499055370109137e-01 1.6513075889796527e+00 -1.0977321815016114e+00 + 8.0223525995841904e-01 1.7655104671032309e+00 -1.3106271121538082e+00 + 9.3987764721836642e-01 1.7980845197670767e+00 -1.4832487976437629e+00 + 1.0488369664524149e+00 1.7613031922620626e+00 -1.6025207036685560e+00 + 1.1372409302415383e+00 1.6683415410427695e+00 -1.6734285255759596e+00 + 1.2248541304308529e+00 1.5173572908495574e+00 -1.7107000593516253e+00 + 1.3366482315850730e+00 1.2939192073314261e+00 -1.7312935907201739e+00 + 1.4904176407249001e+00 1.0119556778742922e+00 -1.7404281565289463e+00 + 1.6923886949937115e+00 7.2605025375778953e-01 -1.7292536047390010e+00 + 1.9618968607869240e+00 4.4557625561270464e-01 -1.7123038314146568e+00 + 2.3171794744710352e+00 6.7939420510004456e-02 -1.7802450221797272e+00 + 2.6593083835652287e+00 -4.7223224448845302e-01 -2.0668725260067595e+00 + 2.7968615079558994e+00 -9.8097239423135085e-01 -2.5262225060739056e+00 + 2.6598250817583118e+00 -1.1359049168180126e+00 -2.8054413201515835e+00 + id 12582 + loc 7.1272712945938110e-01 8.9064449071884155e-01 409 + blend 0.0000000000000000e+00 + interp 3.7363203878459872e-01:3.1448491484100033e-01:3.4322526532417719e-01:3.6233736640175612e-01:1.0023743182293754e+00:2.8790886352430817e-01:1.6909987181128061e+00:2.8568644710755536e-01:2.1291959102699867e+00:3.7362830246421092e-01:2.9445754912930120e+00:3.3331281634371174e-01:3.7679665976434382e+00 + CVs 20 + 5.1407173797841899e-01 1.5383733686680590e-01 -1.7425138482051522e-01 + 9.4108926727042230e-01 2.5783826700726131e-01 -3.4116171014148888e-01 + 1.3600689028341895e+00 3.5281016760306416e-01 -4.9403257018035829e-01 + 1.7979515515421500e+00 4.4958652465940607e-01 -6.3204138143571642e-01 + 2.2497273238648945e+00 5.3984038083654251e-01 -7.5630151827442815e-01 + 2.7109736951840580e+00 6.1595729269073929e-01 -8.6835504208936931e-01 + 3.1798327992967468e+00 6.6889333700669806e-01 -9.6856245054688550e-01 + 3.6561396541800129e+00 6.8479985404984034e-01 -1.0564117279166949e+00 + 4.1364237630702299e+00 6.4700965769439844e-01 -1.1337947749947408e+00 + 4.6093363794938824e+00 5.3994920799854107e-01 -1.2077858782011208e+00 + 5.0558198731750652e+00 3.5503739693693070e-01 -1.2860603678862896e+00 + 5.4580734861505649e+00 9.7755325301844387e-02 -1.3700669613813397e+00 + 5.8057998047253969e+00 -2.2089034876874791e-01 -1.4551169099229457e+00 + 6.0920484328287952e+00 -5.8895476640686972e-01 -1.5365870482267106e+00 + 6.3101451214040702e+00 -9.9589449890491233e-01 -1.6086960126277043e+00 + 6.4545967932228763e+00 -1.4320040900821249e+00 -1.6604402354565435e+00 + 6.5245756471369116e+00 -1.8807240672812959e+00 -1.6812765860439864e+00 + 6.5336790770295199e+00 -2.3161897869931685e+00 -1.6735542439650606e+00 + 6.5495099766696736e+00 -2.6991080528308267e+00 -1.6450747157385728e+00 + id 12583 + loc 8.7757194042205811e-01 4.1889542341232300e-01 411 + blend 0.0000000000000000e+00 + interp 3.7856824509486042e-01:3.7742996515270943e-01:8.6089719123099040e-02:2.9049190493853483e-01:9.9999705890565260e-01:3.4446450636098924e-01:1.4566988111112900e+00:3.3763487956106480e-01:2.4316880739241897e+00:3.7856445941240952e-01:3.1689103329164832e+00:2.5908016997767147e-01:3.8434452813192728e+00 + CVs 20 + -6.6295652615612288e-01 1.2762154382919022e-01 2.2253580599006112e-01 + -1.1527828772223203e+00 1.4824682622259144e-01 3.9412637866739353e-01 + -1.6169732590752841e+00 1.3323163940086385e-01 5.4016943860748767e-01 + -2.1065922152878787e+00 1.1848336021103045e-01 6.6223807600093432e-01 + -2.6082160172840494e+00 9.8467007221630931e-02 7.5833887328775229e-01 + -3.1075366560849451e+00 6.8515783449033529e-02 8.3274836307040756e-01 + -3.5906114470317529e+00 2.5807902179376452e-02 8.9338276479186918e-01 + -4.0475701212468937e+00 -3.2409981696002621e-02 9.4556742956001050e-01 + -4.4774742844736730e+00 -1.1047510961044593e-01 9.8910206557358937e-01 + -4.8861493976472827e+00 -2.1644714468556647e-01 1.0244276968584245e+00 + -5.2758944563955890e+00 -3.6239606838612648e-01 1.0577387026313647e+00 + -5.6419305271715068e+00 -5.6162698858477111e-01 1.0968086152475864e+00 + -5.9762354247773839e+00 -8.2320132392243983e-01 1.1418128500519249e+00 + -6.2708521966180930e+00 -1.1488020532973844e+00 1.1856086570311999e+00 + -6.5164220197617864e+00 -1.5326745039712728e+00 1.2238134290155138e+00 + -6.7020078289300233e+00 -1.9605649445487092e+00 1.2569363397548599e+00 + -6.8190864952885519e+00 -2.4137290046819162e+00 1.2835684716220881e+00 + -6.8666707052911553e+00 -2.8790271736440358e+00 1.2999554172560299e+00 + -6.8627873445005676e+00 -3.3717459608876448e+00 1.3117285933403844e+00 + id 12584 + loc 5.7574081420898438e-01 7.3370647430419922e-01 1078 + blend 0.0000000000000000e+00 + interp 3.6108961314642285e-01:2.7700333624630824e-01:2.3742741202082662e-01:2.9836526982526274e-01:9.9473983921244147e-01:2.5876140498529382e-01:1.6321245089215752e+00:3.0740334764717453e-01:2.8448480776756688e+00:3.6108600225029142e-01:3.2084503341789610e+00 + CVs 20 + 1.9093098820098675e-01 2.7574577449680976e-01 -7.2292456112561798e-02 + 3.7231826471129914e-01 5.3962624313126750e-01 -1.7031272523145904e-01 + 5.5397242384492051e-01 7.8445091856168825e-01 -2.9593236608919554e-01 + 7.3897158683113429e-01 9.9907225591735793e-01 -4.5074489070704499e-01 + 9.2291978827221632e-01 1.1710378208103382e+00 -6.3556630138963155e-01 + 1.0987004679425953e+00 1.2903942689560273e+00 -8.4619819688383924e-01 + 1.2573814278968998e+00 1.3514744394362372e+00 -1.0737346205545957e+00 + 1.3898074957420889e+00 1.3538267552973151e+00 -1.3052445287015884e+00 + 1.4884568827335798e+00 1.3025940476555651e+00 -1.5244132234726864e+00 + 1.5513912796083786e+00 1.2083756449280212e+00 -1.7156969084752767e+00 + 1.5839009249794158e+00 1.0851266535811468e+00 -1.8677160898693617e+00 + 1.5962425859720393e+00 9.4304738001767696e-01 -1.9806897049869152e+00 + 1.5968058157609633e+00 7.7316170421516284e-01 -2.0715691615496543e+00 + 1.5886355869785291e+00 5.4382230880751103e-01 -2.1625967756200857e+00 + 1.5717754695581290e+00 2.1452296389905801e-01 -2.2910055016171755e+00 + 1.5493260092430474e+00 -2.1312872401409133e-01 -2.5570980178804765e+00 + 1.5621750979492091e+00 -5.6742195567964004e-01 -3.0723904833712115e+00 + 1.7011379378017977e+00 -5.8677884171934380e-01 -3.7508940561497131e+00 + 1.7892168568076194e+00 -5.6181954101682652e-01 -3.8737798342204979e+00 + id 12585 + loc 9.3689447641372681e-01 1.7871206998825073e-01 1076 + blend 0.0000000000000000e+00 + interp 3.4399890028835733e-01:2.9131756390241154e-01:4.4768614701777310e-01:2.9728341522040824e-01:1.2703891532628364e+00:2.7698221537598816e-01:2.0000397647339954e+00:3.4399546029935446e-01:2.8451919809466037e+00:2.5594849427793348e-01:3.8354905605552094e+00 + CVs 20 + -1.6686127449426302e-01 2.9602368792307127e-01 1.7124714819995912e-01 + -3.4817109352435638e-01 6.0776960310826444e-01 3.8081628312417348e-01 + -5.2448053769730707e-01 9.5582739266201555e-01 6.2165304515357178e-01 + -6.6730548381348664e-01 1.3535362252995711e+00 8.7039729540550537e-01 + -7.5002785167686836e-01 1.7483713247158041e+00 1.0795594125826484e+00 + -7.8485601540224548e-01 2.0059669491264116e+00 1.2130895003222590e+00 + -7.8724333646149347e-01 2.0633023397906305e+00 1.2311112483180779e+00 + -7.3147355679023107e-01 2.0383708984796494e+00 1.1375658487378080e+00 + -5.9801437408081193e-01 2.0443518615298939e+00 1.0129360382809525e+00 + -4.4200721502893148e-01 2.0741960093772054e+00 9.8613248599787207e-01 + -3.5909318413801877e-01 2.0435556162198893e+00 1.0846347198636095e+00 + -3.8806691198860233e-01 1.9354712681668489e+00 1.2300537065773025e+00 + -4.9539430108065319e-01 1.7981205846146660e+00 1.3663039401155244e+00 + -6.0930457726956599e-01 1.7054219984683234e+00 1.4960707424509390e+00 + -7.1817456275878211e-01 1.6820486871612323e+00 1.6491172282818010e+00 + -8.7134090688606625e-01 1.6673566195585932e+00 1.8465510734503754e+00 + -1.1043468246383050e+00 1.5830203186916001e+00 2.0842250031019409e+00 + -1.3159429387106700e+00 1.2853379032525800e+00 2.1347074876634555e+00 + -1.2738493681373628e+00 8.8527167984318966e-01 1.8128491575313366e+00 + id 12586 + loc 2.9136684536933899e-01 2.2236686944961548e-01 1075 + blend 0.0000000000000000e+00 + interp 3.9754224710718078e-01:3.2342795605266150e-01:6.9481207021559754e-01:2.8165590434543414e-01:1.5236854740332628e+00:2.4061555235290344e-01:2.3653021370466516e+00:3.9753827168470973e-01:3.2549590784010021e+00:2.4418653097207438e-01:3.9997224226167827e+00 + CVs 20 + -1.9382990091882607e-01 2.7391671189007982e-01 -6.7093131717877799e-02 + -3.7833250899580489e-01 5.7314946665241306e-01 -1.1787256551632036e-01 + -5.4469820122315771e-01 8.7903609817942852e-01 -1.6610974127934391e-01 + -6.9722929398308964e-01 1.1793768687797241e+00 -2.2015748564438120e-01 + -8.4778002063831914e-01 1.4682111762330829e+00 -2.8293255551514818e-01 + -1.0022825046530164e+00 1.7384425666503001e+00 -3.5068330966739392e-01 + -1.1570086070617649e+00 1.9843123090577837e+00 -4.0733027257667875e-01 + -1.3161423650324338e+00 2.2172676059222485e+00 -4.3852719016586506e-01 + -1.5094819562341535e+00 2.4492419901818092e+00 -5.0274858894388696e-01 + -1.7371822260526959e+00 2.6372997751430027e+00 -6.8554471533080208e-01 + -1.9783549507743161e+00 2.7443495088319221e+00 -9.9465440051530962e-01 + -2.2147261282854909e+00 2.7452655869564566e+00 -1.4142736750415672e+00 + -2.4398327801163608e+00 2.5960546526597987e+00 -1.8727232066350012e+00 + -2.6785875015113318e+00 2.2991460523515332e+00 -2.2084541637533035e+00 + -2.9495376976136316e+00 1.9126813012534534e+00 -2.3505738692499123e+00 + -3.2170370693098698e+00 1.4514366326759314e+00 -2.3756725540767816e+00 + -3.4275678030058110e+00 9.2640554787458407e-01 -2.4183781472433603e+00 + -3.5683987092654870e+00 4.1198093256107859e-01 -2.6366638763600747e+00 + -3.6755493903041838e+00 4.8027222783800783e-02 -3.1114910051430402e+00 + id 12587 + loc 5.1896661520004272e-01 1.4148496091365814e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3768275459781325e-01:2.7958111330925789e-01:3.4998374059630355e-02:2.7685785719614642e-01:8.8220952919993911e-01:2.8865926808867975e-01:1.6402155109105894e+00:3.8051474191823431e-01:2.0417675811389970e+00:4.3767837777026730e-01:2.6499747752940088e+00:3.0102790687195219e-01:3.1507287340245451e+00 + CVs 20 + 1.5196009812280428e-01 3.2298708199319481e-01 -1.5301014278965785e-01 + 2.9078812288718053e-01 6.0403628494587769e-01 -2.6369877796995933e-01 + 4.0087715478940339e-01 8.6413334756728777e-01 -3.8175217070014950e-01 + 4.7049710952705764e-01 1.0997732048956261e+00 -5.1947808618660996e-01 + 5.0947209064827303e-01 1.3043770167855484e+00 -6.5657704378450132e-01 + 5.4286509706488362e-01 1.4946835589077572e+00 -7.8453994880166156e-01 + 6.0095826677561548e-01 1.6826107494146743e+00 -9.0665584425499479e-01 + 7.1912734225813058e-01 1.8601751606751722e+00 -1.0305179580762887e+00 + 9.2394665545835408e-01 2.0109229008795411e+00 -1.1140286683551666e+00 + 1.1461564960851092e+00 2.1024347392794089e+00 -1.0719229191374557e+00 + 1.2914930391750081e+00 2.1303657345647320e+00 -9.1311825931236490e-01 + 1.3566816526062839e+00 2.1230828939597663e+00 -6.8471995452080803e-01 + 1.3406472561723297e+00 2.0838712380351834e+00 -4.2217477920730984e-01 + 1.2011237445817406e+00 1.9718667412486359e+00 -2.2393627129971927e-01 + 9.4070986147366087e-01 1.7560975994566466e+00 -1.8548729223706995e-01 + 6.0672996048417405e-01 1.4180278598622764e+00 -2.5839154090892813e-01 + 2.1967770861412261e-01 9.0497835267846261e-01 -3.1465116768505869e-01 + -2.4933938256605970e-01 2.3991838587631054e-01 -7.7818191495800798e-02 + -2.7150880038704078e-01 2.0498818776110159e-01 1.3354745967412571e-01 + id 12588 + loc 1.3298669457435608e-01 3.4454014897346497e-01 372 + blend 0.0000000000000000e+00 + interp 5.5086611865481694e-01:3.0454857794483636e-01:7.3307523513603345e-01:5.5086060999363040e-01:1.1072445385758423e+00:4.5542418576432703e-01:1.7661091133780673e+00:4.1880393305278912e-01:2.2491129465152229e+00:3.2306756170268286e-01:3.0310125857777956e+00:2.4955732648618836e-01:3.9890594095389682e+00 + CVs 20 + -2.0913420751394665e-01 5.7678169862441953e-01 4.9702281495213174e-01 + -3.9089473656200102e-01 1.1090856275062917e+00 9.2762809201690200e-01 + -5.4387282518643532e-01 1.6075849118244752e+00 1.3176920758360104e+00 + -6.6924162813083166e-01 2.0675813287530840e+00 1.6670445939674954e+00 + -8.4220395813836224e-01 2.5361718961267425e+00 1.9520333058733592e+00 + -1.1728269684436021e+00 3.0245772693538742e+00 2.0385677196784471e+00 + -1.6193147928133658e+00 3.4380058210425917e+00 1.8408104835389287e+00 + -2.0877388334765081e+00 3.6997727927555100e+00 1.3881305977692824e+00 + -2.5228863658873002e+00 3.7744868734119628e+00 7.4481088210603752e-01 + -2.8842890546101816e+00 3.6226723403041401e+00 -6.2479550556424623e-03 + -3.1378139142056392e+00 3.2159850188148553e+00 -7.1511771324564188e-01 + -3.2676972968897884e+00 2.5919864863490765e+00 -1.2045594821863324e+00 + -3.2287825355685924e+00 1.8466463937049358e+00 -1.4084974972235536e+00 + -2.9359580700888963e+00 1.0447763362348974e+00 -1.3453641339134368e+00 + -2.3236953398281881e+00 1.0894564778666305e-01 -1.2856760368697120e+00 + -1.6686558140893968e+00 -6.6119218196714469e-01 -1.8529202668680655e+00 + -1.3059651164299491e+00 -8.5958654355904585e-01 -2.8987244236073115e+00 + -1.2565933607532256e+00 -4.7688856361687226e-01 -3.9476327790495866e+00 + -1.4220870691793499e+00 2.9948424237239868e-01 -4.6333439641082936e+00 + id 12589 + loc 9.0737766027450562e-01 6.5494376420974731e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2286841182896251e-01:3.6366073308995917e-01:1.0240809466524436e-01:3.6236207016862576e-01:8.0084327788755250e-01:2.9027158032566719e-01:1.3120975895458038e+00:3.2621241528395234e-01:2.1113392126172483e+00:3.6800601440878522e-01:2.9515390870633067e+00:4.2286418314484425e-01:3.3717716794647212e+00 + CVs 20 + 1.1845639999010849e-01 5.7508191675050324e-01 3.2669446727652807e-01 + 2.5729946348459687e-01 1.0366355357055705e+00 5.1473949533032348e-01 + 3.9348216601425984e-01 1.4546705194130620e+00 6.6475028888115228e-01 + 5.2591972368093098e-01 1.8471620744686750e+00 7.9887436322851468e-01 + 6.6319144305067712e-01 2.2080683113120285e+00 9.0020729279389067e-01 + 8.1236894398173742e-01 2.5263990356510515e+00 9.3912228587985525e-01 + 9.7431397538078990e-01 2.7798464476889579e+00 8.8099765585737910e-01 + 1.1343132294782041e+00 2.9285536111220747e+00 7.0581451327328459e-01 + 1.2555142375992796e+00 2.9213685756183221e+00 4.3518053623048969e-01 + 1.3045226468111375e+00 2.7590473835799054e+00 1.5421993563634762e-01 + 1.3034474658417439e+00 2.5251021129813678e+00 -7.4869330639745546e-02 + 1.2960082859297448e+00 2.2762840860599161e+00 -2.7240245505707872e-01 + 1.3029134718831663e+00 2.0119424550028793e+00 -4.7018505149506828e-01 + 1.3302859150320447e+00 1.7130099409993140e+00 -6.7666735172474612e-01 + 1.3750922859466996e+00 1.3444147170220777e+00 -8.6721176275632561e-01 + 1.4197015896658385e+00 8.4234383116814904e-01 -9.4805850736297215e-01 + 1.4430643705558688e+00 2.1287215631805456e-01 -7.8126263276783559e-01 + 1.4525207043591288e+00 -3.9660458072235472e-01 -4.7160416488095119e-01 + 1.4739942292533348e+00 -9.2905202189588643e-01 -5.3060876218713826e-01 + id 12590 + loc 8.4861403703689575e-01 9.9735039472579956e-01 1082 + blend 0.0000000000000000e+00 + interp 8.1433614077640537e-01:5.0977804735403538e-02:1.0988183835517145e+00:2.9460285753639759e-01:1.9742754130737035e+00:2.5966186479533471e-01:2.9947320073755832e+00:2.7214879451218682e-01:3.0000304407080245e+00:3.9160069121545465e-01:3.5907414710214547e+00:8.1432799741499762e-01:3.9069915086140590e+00 + CVs 20 + -2.9699895832736824e-02 4.5113879175856253e-01 3.9336174012864772e-01 + -6.2651571701498987e-02 7.7296871966411651e-01 5.4465470269441796e-01 + -1.3593475095018900e-01 1.0497776248351955e+00 6.6176117227000764e-01 + -2.6996826389632728e-01 1.3075139963580245e+00 7.9714558321262308e-01 + -4.7247532989826185e-01 1.5307006346144796e+00 9.3971208238166826e-01 + -7.4273022759599994e-01 1.7025619816753323e+00 1.0771916687604315e+00 + -1.0688083371947756e+00 1.8108635000948357e+00 1.1989969442842920e+00 + -1.4328616213957255e+00 1.8526176950773343e+00 1.3000537638071439e+00 + -1.8195230437286616e+00 1.8324480409276696e+00 1.3807498330445669e+00 + -2.2198907271455588e+00 1.7567840529580097e+00 1.4442076451388333e+00 + -2.6300937387057504e+00 1.6289916776785631e+00 1.4924847031266053e+00 + -3.0462754339008322e+00 1.4505991675355498e+00 1.5251136339282070e+00 + -3.4608954426099747e+00 1.2332160987756859e+00 1.5443974563933596e+00 + -3.8692419569277168e+00 1.0070193464780410e+00 1.5627286370533711e+00 + -4.2760411519128843e+00 8.0264518384569528e-01 1.5986945253735123e+00 + -4.6868130826175820e+00 6.2920246531671797e-01 1.6658842847945068e+00 + -5.0982666786586419e+00 4.8519466617505730e-01 1.7688833948017162e+00 + -5.4972929794004024e+00 3.7541597157927603e-01 1.8946718327482648e+00 + -5.8663392086167141e+00 2.1965553058348647e-01 1.9484700718315227e+00 + id 12591 + loc 8.3957010507583618e-01 4.7193977236747742e-01 1048 + blend 0.0000000000000000e+00 + interp 2.6768572565919097e-01:2.3327635846850014e-01:1.9546229143930394e-01:2.2543169580007230e-01:9.9742704200813648e-01:2.6768304880193439e-01:1.6848782767207471e+00:2.6101082059866398e-01:2.6565984644664389e+00:2.1890747598859797e-01:3.2109472940277861e+00 + CVs 20 + -7.0430135340988478e-02 5.8006451394171898e-01 3.7806202036605585e-01 + -1.8333934968918539e-01 1.1507678531895251e+00 7.6152951483188924e-01 + -3.8046595381775761e-01 1.7062524995904969e+00 1.1139369370243255e+00 + -6.9823966496562750e-01 2.2274198824222591e+00 1.3926764896251085e+00 + -1.1434244777486628e+00 2.6638758640162186e+00 1.5632137346791426e+00 + -1.6737147239142609e+00 2.9605649414895310e+00 1.6291307922151548e+00 + -2.2238856489441678e+00 3.0899518861230031e+00 1.6213870739951977e+00 + -2.7569988533067327e+00 3.0590190274497786e+00 1.5705230019113938e+00 + -3.2823854016613354e+00 2.8688309153915426e+00 1.4845447855818892e+00 + -3.7947803781434706e+00 2.5033893660367834e+00 1.3499775740842619e+00 + -4.2383066670300895e+00 1.9754132280924490e+00 1.1421173990533258e+00 + -4.5435077770429055e+00 1.3443957209204289e+00 8.4512684862430720e-01 + -4.6749273037178201e+00 6.9357158772565264e-01 4.6231195745403314e-01 + -4.6284050392072151e+00 1.1349419607914346e-01 -4.6167100788466198e-03 + -4.4191666928955220e+00 -2.9776682696098400e-01 -5.5736981170550903e-01 + -4.0926990987204785e+00 -4.7074021317394832e-01 -1.1704057795897063e+00 + -3.6847355051900053e+00 -4.0009417268679859e-01 -1.8173023165843918e+00 + -3.1767352814416090e+00 1.6026884347466908e-02 -2.4427527069934789e+00 + -2.9998952952141562e+00 4.4123069231642975e-01 -2.5095739486142654e+00 + id 12592 + loc 1.9454224407672882e-01 2.2706601023674011e-01 417 + blend 0.0000000000000000e+00 + interp 1.1624065885988961e+00:2.9815068050414073e-01:4.7836966256607150e-01:3.0177658564060383e-01:9.9861660097284488e-01:2.4738725211007256e-01:1.3848872105395895e+00:2.4159812072663783e-01:1.9870471841095734e+00:3.0140443169309178e-01:2.3465362141684567e+00:5.1651391739264363e-01:2.6681050333950269e+00:7.2388014882963336e-01:2.9584737956425089e+00:1.1623965885988961e+00:3.0447799060795502e+00 + CVs 20 + -2.4720730555978115e-01 1.4012858139959344e-01 2.7334160145805453e-01 + -3.8248099147997999e-01 2.3572384310162375e-01 4.8036268721118525e-01 + -4.7925811773226679e-01 3.1679413742859852e-01 6.6717694574965958e-01 + -5.7942204875108927e-01 4.0385508564560474e-01 8.6243428152854962e-01 + -6.8534815306331132e-01 4.9574455115509486e-01 1.0635574194514252e+00 + -8.0012295008560375e-01 5.8990881105656312e-01 1.2680586393539663e+00 + -9.2737923685396817e-01 6.8248201532750019e-01 1.4734334022319471e+00 + -1.0707624185683575e+00 7.6871837270544674e-01 1.6765674901218741e+00 + -1.2340933598083881e+00 8.4329526819844935e-01 1.8735514961901982e+00 + -1.4215664678841362e+00 8.9972067395926991e-01 2.0600937778591919e+00 + -1.6349504900484626e+00 9.3084552654721053e-01 2.2314926109985258e+00 + -1.8702875266990966e+00 9.3305750232202767e-01 2.3822250132254688e+00 + -2.1193041048259573e+00 9.0870136505859822e-01 2.5070107172483125e+00 + -2.3714095794195682e+00 8.6333426839037064e-01 2.6031925726868361e+00 + -2.6140577226313062e+00 8.0363818909595852e-01 2.6728628853604119e+00 + -2.8382453948956328e+00 7.3580880136633076e-01 2.7213186230252235e+00 + -3.0431665210819432e+00 6.6340792231488854e-01 2.7519418660028157e+00 + -3.2308937576594809e+00 5.8935911072353364e-01 2.7650975548074497e+00 + -3.3654588473115417e+00 5.4902580211105456e-01 2.7738986375406998e+00 + id 12593 + loc 2.3210090398788452e-01 8.8361513614654541e-01 406 + blend 0.0000000000000000e+00 + interp 5.3189948071868265e-01:3.9890137427451167e-01:4.8472983659166524e-02:5.3189416172387549e-01:7.6372676806827544e-01:3.7364351058832340e-01:1.1587160784071782e+00:2.7563575423534353e-01:2.1533666141035477e+00:3.6734100731095265e-01:3.3667795428479232e+00 + CVs 20 + 3.1268255789903127e-01 3.2085764675636241e-01 -1.7450751405880860e-01 + 4.4525585455155109e-01 5.6108775112693665e-01 -3.3013806054412387e-01 + 5.2708702601106716e-01 7.4332704737120703e-01 -4.6378437627922242e-01 + 6.0948307918803024e-01 9.2039186169105069e-01 -5.9046009884648587e-01 + 6.9116740114524555e-01 1.0886674168637680e+00 -7.0689690235015268e-01 + 7.7450216908704894e-01 1.2424861229325292e+00 -8.0973751469310862e-01 + 8.6740535187323720e-01 1.3738067310018609e+00 -8.9475299017799137e-01 + 9.8849824672963749e-01 1.4662657677605528e+00 -9.5260006806963393e-01 + 1.1717925349791365e+00 1.4740970641145488e+00 -9.5143221159585512e-01 + 1.3975688057048739e+00 1.2802668620542901e+00 -7.9775806634900825e-01 + 1.4256933317453144e+00 9.3853610004426336e-01 -5.1407669925719157e-01 + 1.3415284694875205e+00 7.2392168829665127e-01 -3.2365420747944640e-01 + 1.3069601285816181e+00 5.9125694141523599e-01 -1.9825663877272290e-01 + 1.3312086036236024e+00 4.9199524902696318e-01 -8.0464790559382285e-02 + 1.4189901337524999e+00 4.3302855396834095e-01 5.5893172044802569e-02 + 1.5705842202252049e+00 4.4098717546670546e-01 2.1276298208173020e-01 + 1.7606083389282134e+00 5.2708720933370268e-01 3.6805079924455053e-01 + 1.9517154011569184e+00 6.7035082657749057e-01 5.0128053856032828e-01 + 2.0714726986336873e+00 6.6809810704112571e-01 6.4967846677824004e-01 + id 12594 + loc 8.7927961349487305e-01 8.8497078418731689e-01 411 + blend 0.0000000000000000e+00 + interp 3.7703985665145096e-01:3.1093856048245155e-01:2.9542150085388186e-02:3.7703608625288448e-01:6.9032427661878271e-01:3.4515544694480454e-01:1.3661792563259711e+00:3.3277110981912122e-01:2.0013668256818873e+00:3.4980883091267811e-01:2.6974006409040112e+00:3.3777460079069582e-01:3.5768432912688950e+00 + CVs 20 + 8.6296357029301440e-01 2.9341470798248448e-01 -1.7350865116947289e-01 + 1.4148631374371410e+00 4.3242800924471370e-01 -3.2176814885229976e-01 + 1.8890672775035136e+00 5.0746551464786172e-01 -4.6822122271345035e-01 + 2.3997285504923016e+00 5.6722243216310320e-01 -6.1928094761426744e-01 + 2.9552403725163110e+00 6.0174620970692538e-01 -7.6251137343149367e-01 + 3.5542588316895976e+00 5.9841088433039280e-01 -8.9122903431889355e-01 + 4.1857275957498246e+00 5.4574021051464960e-01 -1.0090815544532303e+00 + 4.8389202698199218e+00 4.3091117621811237e-01 -1.1198989268783783e+00 + 5.5103028516697554e+00 2.3054987377909231e-01 -1.2257643224940968e+00 + 6.1782026216969452e+00 -8.0203568699330763e-02 -1.3315599733965495e+00 + 6.8009749643834070e+00 -5.1568701730343225e-01 -1.4526030392932350e+00 + 7.3344727295159640e+00 -1.0714543469244293e+00 -1.6024742670307979e+00 + 7.7523239082374040e+00 -1.7237490497353585e+00 -1.7766778226127544e+00 + 8.0446674658862527e+00 -2.4346119494753409e+00 -1.9626102130885963e+00 + 8.2097238214342276e+00 -3.1600969979747195e+00 -2.1550931859658098e+00 + 8.2526868905585236e+00 -3.8644124393624031e+00 -2.3491678015901827e+00 + 8.1862274356360416e+00 -4.5223540474844270e+00 -2.5338078369926587e+00 + 8.0394894104987049e+00 -5.1044870681763008e+00 -2.7099041481153026e+00 + 7.9789836249647292e+00 -5.5832317230069970e+00 -2.8970854497417888e+00 + id 12595 + loc 2.3260957002639771e-01 8.1740033626556396e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7216827162101777e-01:4.1099098986116511e-01:4.3441795061184474e-01:2.6159983288788491e-01:9.8371800884927463e-01:3.2879955291956564e-01:1.9206965527628033e+00:4.7216354993830156e-01:2.3820268212450704e+00:3.6278923287577797e-01:3.0010335379178619e+00:4.5065946074809476e-01:3.9312837242781891e+00 + CVs 20 + -1.2455679682152856e-01 3.4620133692417854e-01 1.5639502612619632e-01 + -2.0388229397266941e-01 6.0311020704368390e-01 1.4126371267377980e-01 + -3.2086183319526229e-01 8.4029910722055878e-01 1.0077374742125450e-01 + -4.8624521307923962e-01 1.0597698614692943e+00 6.1152007166591082e-02 + -6.9555407325255902e-01 1.2522122850688295e+00 1.8063097626156654e-02 + -9.4141976520208415e-01 1.4116384889567664e+00 -2.9830954752490424e-02 + -1.2151246821933130e+00 1.5357443658305234e+00 -8.1127129338441684e-02 + -1.5082462209404626e+00 1.6250831166130157e+00 -1.3251381039073196e-01 + -1.8125865057182480e+00 1.6818473403289309e+00 -1.8014178704111938e-01 + -2.1203516206816655e+00 1.7091685579992462e+00 -2.2047171807567179e-01 + -2.4249090972967218e+00 1.7103786864564035e+00 -2.5094432195166216e-01 + -2.7205169651342089e+00 1.6891901979957904e+00 -2.7031328311834835e-01 + -2.9994363575846443e+00 1.6493220058032985e+00 -2.7888397531586628e-01 + -3.2470561474509685e+00 1.5933237217734877e+00 -2.8027648592288917e-01 + -3.4496487129609514e+00 1.5213357896956423e+00 -2.8160054057220202e-01 + -3.6118229172290532e+00 1.4268502780475378e+00 -2.8947943413721011e-01 + -3.7531963446952386e+00 1.3039823865931730e+00 -3.0547298668924572e-01 + -3.8878528336348372e+00 1.1542585966023899e+00 -3.2662282761269246e-01 + -3.9984661623922362e+00 1.0263043137012520e+00 -3.1315794662873264e-01 + id 12596 + loc 9.3089610338211060e-01 5.9581693261861801e-02 397 + blend 0.0000000000000000e+00 + interp 3.5595772328531805e-01:3.3368050440796282e-01:1.6941049928523566e-01:3.5595416370808519e-01:6.8177215190573393e-01:2.1373096872775268e-01:1.3026873400994827e+00:2.5821913449976946e-01:2.1779877071388518e+00:2.7602763331300356e-01:3.0139445532142450e+00:2.6019457136472551e-01:3.7946203922358812e+00 + CVs 20 + -1.1727170015388892e+00 2.9991594479291783e-01 3.6868309246640107e-01 + -1.9958469526069840e+00 3.8836928422068956e-01 6.8270080560352531e-01 + -2.7163002795529207e+00 3.9572570642644384e-01 9.8590578233539616e-01 + -3.4383900120548025e+00 3.5625602047808252e-01 1.3078471945956269e+00 + -4.1350914770699747e+00 2.6402629035020458e-01 1.6444410572998016e+00 + -4.7858685577174613e+00 1.1983223889699779e-01 1.9949128782745356e+00 + -5.3817450300373153e+00 -7.6542995901129340e-02 2.3591012641761684e+00 + -5.9144481074993642e+00 -3.3137367168575249e-01 2.7284997962109081e+00 + -6.3621474603197035e+00 -6.4579498826520598e-01 3.0863927442379833e+00 + -6.7047308164240178e+00 -1.0081662284216435e+00 3.4217849869020753e+00 + -6.9349126469507745e+00 -1.3930312357900276e+00 3.7249176548568617e+00 + -7.0661210472041347e+00 -1.7751554618413736e+00 3.9883514787370604e+00 + -7.1249762693184886e+00 -2.1434792676572041e+00 4.2115289655135673e+00 + -7.1373311778337127e+00 -2.4986290394696171e+00 4.3979958813702300e+00 + -7.1233355936270417e+00 -2.8460059010369045e+00 4.5522275391691025e+00 + -7.0960756714783235e+00 -3.1928126977453384e+00 4.6829450457128354e+00 + -7.0590453972105127e+00 -3.5446363499171145e+00 4.8008282486864289e+00 + -7.0050323932847522e+00 -3.9049006352490547e+00 4.9075650865553122e+00 + -6.8754620209211517e+00 -4.3105430637050475e+00 4.9754800420958958e+00 + id 12597 + loc 5.4340386390686035e-01 2.3983910679817200e-01 413 + blend 0.0000000000000000e+00 + interp 1.2465811141269358e+00:1.2465711141269358e+00:8.2478872082224419e-01:8.3801130552030700e-01:9.4546614257853479e-01:4.0532632615510822e-01:1.0034358752485930e+00:3.6756890658133140e-01:1.7638380366394077e+00:2.7382072473352614e-01:2.7636725971739509e+00:5.3881859277971911e-01:2.9473691496100534e+00 + CVs 20 + -1.2035282028136216e+00 2.6840858190896416e-01 1.4734763576283799e-01 + -1.9988416238856008e+00 3.5101935423753805e-01 3.0184474610238676e-01 + -2.6965690178140655e+00 3.6063289541144955e-01 4.5572187557960042e-01 + -3.4231189956183119e+00 3.3551909517905704e-01 6.0184689229489408e-01 + -4.1706333963448872e+00 2.7288606529529635e-01 7.1593895393325924e-01 + -4.9252099915590062e+00 1.7174367220508113e-01 7.8047504695970860e-01 + -5.6736892097341576e+00 2.8436763522755371e-02 7.9216927109329160e-01 + -6.4067963864162927e+00 -1.6890609342364804e-01 7.6628323152463895e-01 + -7.1101643047668270e+00 -4.3435482496255462e-01 7.1835283490378010e-01 + -7.7620531969963418e+00 -7.7616580908984756e-01 6.5670479118021896e-01 + -8.3422670753270793e+00 -1.1957582974456398e+00 5.9397017423845755e-01 + -8.8389637251392159e+00 -1.6842501590736325e+00 5.3478637414969221e-01 + -9.2472405786431207e+00 -2.2215339147218955e+00 4.7709365539881499e-01 + -9.5666926206398557e+00 -2.7824573280085199e+00 4.2335443187536098e-01 + -9.8018329652287619e+00 -3.3481166490200831e+00 3.8128044677004674e-01 + -9.9596258681762198e+00 -3.9101806261544736e+00 3.5699261971866808e-01 + -1.0047208268635236e+01 -4.4587591966872555e+00 3.5372962845978273e-01 + -1.0077647587352166e+01 -4.9648691631938160e+00 3.7474845986913213e-01 + -1.0093233499199346e+01 -5.3003217996966532e+00 4.2215968595448777e-01 + id 12598 + loc 2.9040476679801941e-01 4.3178316950798035e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4800414385615955e-01:2.7564302281683789e-01:9.2099568621460737e-02:2.6226260070056501e-01:1.1650793269352528e+00:4.4430024474061791e-01:1.9624370896495877e+00:3.8899847979641711e-01:2.2156452320043707e+00:4.4799966381472101e-01:2.9929508133286866e+00:2.7761845493906073e-01:3.3375729725051917e+00 + CVs 20 + 7.6910520009574421e-02 3.3965834243136855e-01 -1.0166769202673187e-01 + 1.0925655232639667e-01 6.4763316605567867e-01 -2.2120544192527053e-01 + 1.1882685790752751e-01 9.4927718276102402e-01 -3.5287650481038585e-01 + 1.0809194582548531e-01 1.2531179275864650e+00 -4.9563976191360509e-01 + 6.0457721091669914e-02 1.5521540340995883e+00 -6.5183643639978484e-01 + -4.3893079215203579e-02 1.8357699560728422e+00 -8.2188888572336516e-01 + -2.2572248705877607e-01 2.0853315154419869e+00 -1.0009175733368041e+00 + -4.9803392718898165e-01 2.2716024466294731e+00 -1.1742869826952251e+00 + -8.5219413694767576e-01 2.3592497357606343e+00 -1.3155196054440172e+00 + -1.2493215660892474e+00 2.3244923047219350e+00 -1.3956862483375818e+00 + -1.6320813215036329e+00 2.1735122232457149e+00 -1.4001732935612488e+00 + -1.9503241365928541e+00 1.9447223255368178e+00 -1.3391466202649367e+00 + -2.1839366351573930e+00 1.6887154653498524e+00 -1.2431526122825176e+00 + -2.3272858899005673e+00 1.4620842050045735e+00 -1.1523718465148294e+00 + -2.3486851836803306e+00 1.3267987856275922e+00 -1.1083529698020731e+00 + -2.1849703747904559e+00 1.2390385949738081e+00 -1.1201625470150123e+00 + -1.8900381646329103e+00 9.5819238348308611e-01 -1.1145099345070988e+00 + -1.8640778832848262e+00 4.0314751275071692e-01 -9.7902274856543270e-01 + -1.8673155783200428e+00 5.2105218096643868e-01 -1.0114089742008243e+00 + id 12599 + loc 5.5907303094863892e-01 5.7330775260925293e-01 409 + blend 0.0000000000000000e+00 + interp 3.8801455505032845e-01:3.1443637299208022e-01:1.6434628460347511e-01:3.3718705681417471e-01:1.0072378172041074e+00:3.7423515776137894e-01:1.6729107619463979e+00:3.1939135589030127e-01:2.2416615630276513e+00:3.8801067490477797e-01:3.0001249245672454e+00:3.7389511392033520e-01:3.5691550389109201e+00 + CVs 20 + 3.8813053286783772e-01 1.2139322899271296e-01 -1.0561927256882100e-01 + 7.4730360235740612e-01 2.1324897764457218e-01 -2.3073182492326649e-01 + 1.1121917384682143e+00 2.9142181151597085e-01 -3.4829639354998665e-01 + 1.4953784816132507e+00 3.5845987040162974e-01 -4.4889320370509445e-01 + 1.8901169151351023e+00 4.0683442574271222e-01 -5.3501245867977243e-01 + 2.2903133755761571e+00 4.3004798404333078e-01 -6.0811466691182436e-01 + 2.6896869193507920e+00 4.2082084813746534e-01 -6.6787833212526948e-01 + 3.0794572207015429e+00 3.6822420496536545e-01 -7.1332677470586703e-01 + 3.4475175463417425e+00 2.6071864637783526e-01 -7.4607736509672840e-01 + 3.7758505603860302e+00 9.1364941971984859e-02 -7.7299441160741456e-01 + 4.0386363173424904e+00 -1.3798232318441306e-01 -8.0362471108667810e-01 + 4.2166925966790068e+00 -4.1249275541585062e-01 -8.4407471159232939e-01 + 4.3143107929530249e+00 -7.1170548424014890e-01 -8.9477769434631849e-01 + 4.3470857716384925e+00 -1.0212288277822850e+00 -9.5403760712827623e-01 + 4.3252656361320039e+00 -1.3310110624607909e+00 -1.0196264176394454e+00 + 4.2529119708212022e+00 -1.6309011538663654e+00 -1.0847495058925083e+00 + 4.1373488501665223e+00 -1.9141890698906299e+00 -1.1385228541147985e+00 + 3.9981305948689547e+00 -2.1860529303097112e+00 -1.1817763217568558e+00 + 4.0021316808177829e+00 -2.5973753172026020e+00 -1.2678730247950107e+00 + id 12600 + loc 8.0196481943130493e-01 8.6169868707656860e-02 1068 + blend 0.0000000000000000e+00 + interp 5.5148207888320377e-01:2.7409371173985358e-01:4.1386022452332649e-01:3.0341720127449534e-01:1.0640293332958359e+00:3.8540685521325252e-01:1.9389268432021498e+00:5.5147656406241496e-01:2.5441832652724674e+00:4.1024768189766153e-01:3.0043625746808424e+00:3.8933512241823265e-01:3.7978429465863610e+00 + CVs 20 + -4.9542082267666210e-03 5.4445567562928110e-01 1.0543488532817009e-01 + -6.0828356735129374e-02 1.0774993741714667e+00 1.9940736979774934e-01 + -1.7969636038236136e-01 1.5915389056166851e+00 2.6210401816282480e-01 + -3.8829133079568190e-01 2.0727320632424604e+00 2.9159532996969345e-01 + -7.0337172603675280e-01 2.4901200944207629e+00 2.9566707913845636e-01 + -1.1180260716500054e+00 2.8135098201650357e+00 2.9837045803677043e-01 + -1.6030971624705326e+00 3.0215085615693114e+00 3.3505332267228433e-01 + -2.1060585726698542e+00 3.1094385457692484e+00 4.3693753935012303e-01 + -2.6020350401625816e+00 3.0692182531144168e+00 6.4702268407261476e-01 + -3.0751492893836949e+00 2.7573192940374076e+00 1.0557576440615539e+00 + -3.2528980199905897e+00 2.1014426533709694e+00 1.5076260183715415e+00 + -3.1391853192027064e+00 1.4951206819948428e+00 1.7316988256216963e+00 + -2.8929196411001947e+00 9.7490633113556169e-01 1.8139635219558088e+00 + -2.5627230967348518e+00 5.3095801235206297e-01 1.7822681757526437e+00 + -2.2609512113845662e+00 2.0908528372514606e-01 1.6538224710459255e+00 + -2.0660496463584410e+00 5.1634542969870162e-03 1.4762879877705108e+00 + -1.9902264112260670e+00 -1.0138733702718133e-01 1.3065459714253627e+00 + -2.0519390653387037e+00 -8.6632721640825666e-02 1.2116340276177886e+00 + -2.0223246086133928e+00 -2.0992528514129782e-01 1.1252927573095821e+00 + id 12601 + loc 5.1622253656387329e-01 8.3853340148925781e-01 403 + blend 0.0000000000000000e+00 + interp 5.0151113606969933e-01:4.5601156998378733e-01:8.1492920893400100e-04:5.0150612095833869e-01:5.2371996361535922e-01:3.1254876746975258e-01:9.8876682738815957e-01:4.4882589205879614e-01:1.3670844424972024e+00:4.6091229875558998e-01:2.0003977811040983e+00:4.9072824582971442e-01:2.5747511830240684e+00:3.8100406736465003e-01:2.9970277602398427e+00:3.0338266487442417e-01:3.5525782002311801e+00 + CVs 20 + -4.7197261126389611e-02 6.2089476251313738e-02 -7.2375495833710071e-02 + -9.9963138842249888e-02 1.2378368000661408e-01 -1.4750706100411870e-01 + -1.6726401986428499e-01 1.7838040755139875e-01 -2.2479894392506192e-01 + -2.5023123433571487e-01 2.2025774309917506e-01 -3.0257435437927144e-01 + -3.4758999937140478e-01 2.4676618726386873e-01 -3.7922618497351746e-01 + -4.5939421131699332e-01 2.5880619087857304e-01 -4.5186538631527157e-01 + -5.8765847152505857e-01 2.5967185255279940e-01 -5.1569303862622384e-01 + -7.3388510668923190e-01 2.5082158344377831e-01 -5.6465446602195257e-01 + -8.9693313906083205e-01 2.3138130046366306e-01 -5.9257394521467266e-01 + -1.0736855883360275e+00 1.9996924286067908e-01 -5.9340454837686141e-01 + -1.2605040779994179e+00 1.5672508709595723e-01 -5.6008932841399595e-01 + -1.4529568506037465e+00 1.0340941884003862e-01 -4.8322393394025842e-01 + -1.6430497386221141e+00 4.2200795993658780e-02 -3.5132702900511459e-01 + -1.8146576392135536e+00 -2.6820942212285370e-02 -1.5412784491113846e-01 + -1.9416317610552514e+00 -1.0909943102407316e-01 1.0850010236477982e-01 + -1.9972763802069324e+00 -2.1413890446991679e-01 4.1632936633949486e-01 + -1.9712156439185291e+00 -3.4711066202300667e-01 7.3499134351757678e-01 + -1.8690604143711218e+00 -5.0230233459180085e-01 1.0389259576747714e+00 + -1.8760718812187069e+00 -6.2825501486997426e-01 1.2598988715003676e+00 + id 12602 + loc 1.7137619853019714e-01 8.6085271835327148e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0905513602880200e-01:2.2497030327614312e-01:2.5795359343846358e-02:2.8601092101900016e-01:9.9960948625426371e-01:2.8006594478410035e-01:1.6458552432926976e+00:4.0905104547744175e-01:2.0160104932512293e+00:2.5425756143651673e-01:2.8520668697038545e+00:2.6772251860311264e-01:3.3232387346455599e+00 + CVs 20 + -1.2918376576578008e-01 3.4566145321709302e-01 4.0499860643129870e-01 + -2.5865974723291363e-01 5.9750847759559111e-01 6.8459300675727541e-01 + -3.7809080427522646e-01 8.1965909358209987e-01 9.1509724839814821e-01 + -4.7720597608058152e-01 1.0422620648560668e+00 1.1337882719615120e+00 + -5.6320813565971739e-01 1.2736665791557207e+00 1.3418642137124761e+00 + -6.5189884814842847e-01 1.5255920384301636e+00 1.5449474622955559e+00 + -7.7493528073149043e-01 1.8126133560425788e+00 1.7447621784015568e+00 + -9.8000758493954943e-01 2.1406463409875673e+00 1.9177628818339665e+00 + -1.2941439293270827e+00 2.4822149468994872e+00 2.0019095824559026e+00 + -1.6669982968635377e+00 2.7748380235399708e+00 1.9397244570994208e+00 + -2.0278847149185126e+00 2.9821775067784886e+00 1.7408427449349639e+00 + -2.3634182452938530e+00 3.0992770985957003e+00 1.4390362351253525e+00 + -2.6801704642458613e+00 3.1170005660840294e+00 1.0559285158730480e+00 + -2.9784748748914365e+00 3.0157620162003163e+00 6.0077743335426859e-01 + -3.2599534578676046e+00 2.7609426443496723e+00 1.1132180838643113e-01 + -3.4970810057098745e+00 2.3638250132606990e+00 -3.1433678027232925e-01 + -3.6452398531591967e+00 1.8954073988216382e+00 -6.3433500682967003e-01 + -3.7525774329015720e+00 1.3984717881538677e+00 -8.2665569195172384e-01 + -4.0413909270302844e+00 1.0776137842056865e+00 -7.2109200434149734e-01 + id 12603 + loc 6.4976608753204346e-01 1.7744356393814087e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7905863772377529e-01:3.7905484713739807e-01:4.7625057776391444e-01:2.6068160697109699e-01:1.0768719107622613e+00:3.5700217810929014e-01:1.9461520442660039e+00:3.4973155118344046e-01:2.3418551862015424e+00:2.7353758316342086e-01:3.0233261648049119e+00:3.1387924503197390e-01:3.9927239347875010e+00 + CVs 20 + -2.0464390606572525e-01 4.3510371773143852e-01 1.5635419099692693e-01 + -4.0074186835529568e-01 8.7236588371304813e-01 3.4783691668641997e-01 + -5.8614842012209523e-01 1.2969821060312756e+00 5.9200677660569845e-01 + -7.4761538629420143e-01 1.6930994441627107e+00 8.9977879969154140e-01 + -8.8811937508334760e-01 2.0487860361474644e+00 1.2758054613915528e+00 + -1.0442982208329978e+00 2.3554590497237040e+00 1.7174006627164362e+00 + -1.2589611197776618e+00 2.6019859294727832e+00 2.2079671734207187e+00 + -1.5546015797934958e+00 2.7743635046885409e+00 2.7210911947529102e+00 + -1.9368963593972786e+00 2.8517837386359739e+00 3.2343994299416168e+00 + -2.3927587714926006e+00 2.7988691706048225e+00 3.7306219987016092e+00 + -2.8693852465931924e+00 2.5652203413920698e+00 4.1966042880032273e+00 + -3.2517729729666138e+00 2.0886309275289752e+00 4.6161917002323571e+00 + -3.3823036375294606e+00 1.3932147395873169e+00 4.9263108176350752e+00 + -3.2437708306831263e+00 6.7501395938994047e-01 5.0767960959852303e+00 + -2.9191397690776606e+00 6.3833889439332214e-02 5.1127546881519192e+00 + -2.3569863228790848e+00 -3.0229500568254219e-01 5.0945443324176516e+00 + -1.6501045927721512e+00 -6.1100836333800146e-02 5.0948351121249607e+00 + -1.3117463382907268e+00 4.7387330822749740e-01 5.1599284116890454e+00 + -9.7450046684171421e-01 6.3860653647903620e-01 5.2160776395182920e+00 + id 12604 + loc 4.1511014103889465e-01 1.5474313497543335e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4494110796507343e-01:3.4493765855399378e-01:3.3505182814010825e-01:2.5326072463791488e-01:1.0228724730545953e+00:2.7918325612961026e-01:1.8309789015217297e+00:2.5066310845329459e-01:2.4065998361138661e+00:2.5513851979978253e-01:3.8661656847757335e+00 + CVs 20 + -2.2267076597804353e-01 2.5312954921112701e-01 -6.5635096897754958e-03 + -4.2550554830136617e-01 5.2509789925102179e-01 1.5048031028395109e-02 + -6.0511812167198853e-01 8.0595015841406092e-01 5.3445426651725136e-02 + -7.6801239243892372e-01 1.0905940974344066e+00 9.6837664362108500e-02 + -9.2710591999873493e-01 1.3795202316706310e+00 1.3436507015819843e-01 + -1.0910004124434816e+00 1.6765994602930341e+00 1.5267048569946595e-01 + -1.2718340749780712e+00 1.9856314936953252e+00 1.3586270564469560e-01 + -1.4940453506731113e+00 2.2997411496911422e+00 7.1282711825470191e-02 + -1.7688127513678165e+00 2.5867942399404646e+00 -6.5699978349451849e-02 + -2.0579672647188145e+00 2.7973344052067173e+00 -3.0265636747012992e-01 + -2.3042802745097530e+00 2.9176423011184482e+00 -6.4530988848300552e-01 + -2.4767747402344726e+00 2.9559835578096911e+00 -1.1017166514293693e+00 + -2.5831286811382181e+00 2.8740145159205621e+00 -1.6398253787007606e+00 + -2.6541191650019549e+00 2.6539397508338878e+00 -2.0935731491794733e+00 + -2.7067801550472712e+00 2.4042724886909377e+00 -2.3217572491735039e+00 + -2.7317366262626739e+00 2.2086618411072347e+00 -2.3167762725964787e+00 + -2.7064252323007509e+00 2.0354047557897657e+00 -2.1225267822053837e+00 + -2.5922826804658863e+00 1.8359894979155071e+00 -1.9432651790036348e+00 + -2.2849980890235240e+00 1.8177676402039231e+00 -2.2882143440128031e+00 + id 12605 + loc 2.1003286540508270e-01 4.2511320114135742e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7091926219966731e-01:3.7091555300704532e-01:6.7588528260353886e-03:3.0532019848757030e-01:7.4068531740109966e-01:2.7441839899430509e-01:1.2988303989490211e+00:3.0262349019916751e-01:2.0073685052029506e+00:3.2814236262159424e-01:2.7086707146929991e+00:2.5446802505892763e-01:3.2787621111231107e+00 + CVs 20 + 2.1827431745866985e-01 3.5394099384008315e-01 3.4357645082145216e-01 + 3.5623275137086524e-01 6.4538317219583718e-01 6.4891870358025716e-01 + 4.9290750759540419e-01 9.1749261570371554e-01 9.3027813416802740e-01 + 6.5778618347803808e-01 1.1739579007452048e+00 1.1771492010997187e+00 + 8.4192952885574823e-01 1.4073051335518121e+00 1.3991924802706059e+00 + 1.0327483865141489e+00 1.6167017372813339e+00 1.6166580881523713e+00 + 1.2111452445375133e+00 1.7981094663245138e+00 1.8448081857646095e+00 + 1.3554851211550409e+00 1.9412787686077060e+00 2.0764886559691891e+00 + 1.4442190472760434e+00 2.0394272024833913e+00 2.2940062791414961e+00 + 1.4371910817332416e+00 2.0858036177361070e+00 2.5021856804246818e+00 + 1.3051900561463636e+00 2.0508949773894809e+00 2.6914557756311481e+00 + 1.0977007815182369e+00 1.8882412748946926e+00 2.8351657489826887e+00 + 9.1998328871976176e-01 1.5646248927172912e+00 2.9365153510998825e+00 + 8.0778961779594805e-01 1.1006759320673207e+00 3.0057879208818772e+00 + 6.6666252174320206e-01 5.3595712336332624e-01 3.0086939969059339e+00 + 3.6479024576086932e-01 -4.3750500662526726e-02 2.8864712332697393e+00 + -2.0334184367441527e-01 -4.7354755323344044e-01 2.6406502887381946e+00 + -9.9077479702923454e-01 -5.7863988370661867e-01 2.3622602853185271e+00 + -1.4116148216687974e+00 -8.9573685547939130e-01 2.2084206540533602e+00 + id 12606 + loc 3.9182651042938232e-01 7.1811401844024658e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6603829041712619e-01:4.6076008833269272e-01:1.2861061125959716e-01:4.6603363003422205e-01:9.3089222256024018e-01:3.6594637725419643e-01:1.6800369068297556e+00:4.5365144611738939e-01:2.4160169055122465e+00:4.0788334265430809e-01:3.0000434490974146e+00:4.4101632861333612e-01:3.6436362981160606e+00 + CVs 20 + -1.4712038716650630e-01 1.3189536879272651e-01 2.4296043728872896e-01 + -2.3919390801060073e-01 1.7764048051992298e-01 3.5022360586778556e-01 + -3.1555689158685979e-01 1.9193188548136580e-01 4.0253761814685490e-01 + -3.9483028923836666e-01 1.9999265178678222e-01 4.5344817297025591e-01 + -4.7411815301124383e-01 2.0147764341661911e-01 5.0007575802520099e-01 + -5.5017682932454293e-01 1.9661788669935967e-01 5.4035951917464109e-01 + -6.2105492721781452e-01 1.8670014239184279e-01 5.7387098166521400e-01 + -6.8663545973555939e-01 1.7358707748463453e-01 6.0114534426835708e-01 + -7.4927184980678663e-01 1.5860930052943847e-01 6.2309480786024429e-01 + -8.1460039821593488e-01 1.4139144571001572e-01 6.4059467779089552e-01 + -8.9085946075547573e-01 1.1941642345799425e-01 6.5392425490154305e-01 + -9.8690176572247668e-01 8.8730836365743387e-02 6.6277616822628027e-01 + -1.1093025793064508e+00 4.5683095273639729e-02 6.6765455693397868e-01 + -1.2599723483295506e+00 -1.1531360583005468e-02 6.7159775026416380e-01 + -1.4374463504441215e+00 -8.3219034074689502e-02 6.7873002809098637e-01 + -1.6399448401469161e+00 -1.6937075048878264e-01 6.9152294274999182e-01 + -1.8652707606949954e+00 -2.6962646720753086e-01 7.1179551270264141e-01 + -2.1074454124267250e+00 -3.8131770734524861e-01 7.4248799610291061e-01 + -2.3577414818758835e+00 -5.0405002817295830e-01 7.8882945530696325e-01 + id 12607 + loc 6.8617230653762817e-01 3.9194309711456299e-01 411 + blend 0.0000000000000000e+00 + interp 4.2429398562889847e-01:3.2371923326816071e-01:5.6794662034597931e-01:4.2428974268904218e-01:1.2094915800778829e+00:3.7373188944325864e-01:1.9317233051443532e+00:3.2805335461902085e-01:2.4770693022241446e+00:3.5760925935441074e-01:3.1352644949974167e+00:2.6718593626835224e-01:3.9721633023333185e+00 + CVs 20 + -6.4710049112338841e-01 1.1030327080384802e-01 1.9022196391071453e-01 + -1.1069963254572408e+00 1.1808784734417593e-01 3.4832380514084849e-01 + -1.5361992111863059e+00 8.9534652887913346e-02 4.8174889805965948e-01 + -1.9878297121917026e+00 5.5953479716630339e-02 5.8070938271825345e-01 + -2.4533919154185688e+00 1.2772648877868886e-02 6.3534629237317630e-01 + -2.9227264474816077e+00 -4.4095805024284118e-02 6.4237787979112682e-01 + -3.3840269651720010e+00 -1.1691856664010625e-01 6.0551896352905521e-01 + -3.8251522094725132e+00 -2.0836336853450099e-01 5.3065605530444016e-01 + -4.2380018990479771e+00 -3.2320768575887771e-01 4.2196391644017950e-01 + -4.6177057225861002e+00 -4.6716182813041751e-01 2.8801979411888967e-01 + -4.9555430580932418e+00 -6.4555347111552353e-01 1.5116737637425759e-01 + -5.2390680460110577e+00 -8.5870049425704642e-01 3.2585730540577229e-02 + -5.4610988036459274e+00 -1.1012929060293026e+00 -5.7752345015354867e-02 + -5.6217470370843854e+00 -1.3649911753512209e+00 -1.1692114541141141e-01 + -5.7210099191757475e+00 -1.6340337707205346e+00 -1.4159476020702055e-01 + -5.7588624461601867e+00 -1.8816373980906507e+00 -1.2780894265101783e-01 + -5.7420696354354170e+00 -2.0887696326792087e+00 -7.5387311366517551e-02 + -5.6784624137493509e+00 -2.2721727575331423e+00 7.7289848839258157e-03 + -5.5148281525946317e+00 -2.5737401339503432e+00 1.2327638629560134e-01 + id 12608 + loc 6.1927968263626099e-01 7.9352152347564697e-01 263 + blend 0.0000000000000000e+00 + interp 1.8551839975177673e+00:3.7892077660694912e-01:1.0574097743692714e+00:1.1327975303363851e+00:1.0774840212864141e+00:3.9181236712537260e-01:1.9838803341867135e+00:4.0231509503108687e-01:2.5720885070268493e+00:1.8551739975177672e+00:3.0115321119828389e+00:8.5833086803502978e-01:3.0434809460892374e+00 + CVs 20 + -7.7583724762747786e-01 4.6187016416744248e-01 -1.5818251955857027e-01 + -1.4475617128667011e+00 8.2390239563151491e-01 -2.2623719639154843e-01 + -2.1516638752232558e+00 1.1030312672950755e+00 -2.5174123141995963e-01 + -2.8841794750532590e+00 1.3370741696757638e+00 -3.1651557031883260e-01 + -3.5364138092835313e+00 1.5682733178087385e+00 -5.6343166143687196e-01 + -3.9284592935335985e+00 1.7897109929509945e+00 -1.1125213417277833e+00 + -3.9071383414282463e+00 1.9205990706366762e+00 -1.8475912623755639e+00 + -3.5239672001097198e+00 1.9150881317863200e+00 -2.5793887654625736e+00 + -2.8792509667484603e+00 1.7494992662259761e+00 -3.2115828152401420e+00 + -2.0865818799558413e+00 1.4055499205150288e+00 -3.6554614647490289e+00 + -1.2908497810801487e+00 9.2159256436344483e-01 -3.8379964665360373e+00 + -6.1936383962363539e-01 4.1225445196695387e-01 -3.7518168697402841e+00 + -1.2617246339453658e-01 -1.2056401414258067e-02 -3.4640299790998816e+00 + 2.6425318865465086e-01 -3.4857045615878124e-01 -3.0636239422322120e+00 + 8.6350260099872633e-01 -6.1885319487389223e-01 -2.6544482879030062e+00 + 1.8675730570715714e+00 -6.4079274940681463e-01 -2.4303516716955822e+00 + 3.0515704520453637e+00 -2.9282217220457174e-01 -2.5653607825038085e+00 + 4.0486583128115976e+00 3.2122077342203625e-01 -3.0506888950380331e+00 + 4.7216391412418197e+00 9.2528965780147465e-01 -3.5739672240610072e+00 + id 12609 + loc 3.5810786485671997e-01 1.9493657350540161e-01 413 + blend 0.0000000000000000e+00 + interp 2.3589885685731127e+00:2.8532141891506385e-01:1.0508764525907210e-04:4.3418088692082102e-01:4.5252033640304690e-01:3.3526725403358593e-01:1.0118361078291547e+00:7.4332155019109269e-01:1.7606755239002223e+00:2.1024658300404622e+00:1.9880965644436954e+00:2.3589785685731126e+00:1.9951139430376772e+00:1.7776008241399375e+00:3.8523424780417201e+00:5.3881859277971911e-01:3.9366207277842107e+00 + CVs 20 + -1.2550471236198144e-01 2.2425747591493031e-01 -1.1311899441025202e+00 + -2.4159415617273250e-01 2.8324111452262657e-01 -1.9195551588063795e+00 + -3.2494999225856253e-01 2.6453787115383143e-01 -2.6327182911979077e+00 + -3.6381560669489688e-01 2.0192908648551905e-01 -3.3846538995587623e+00 + -3.5434308106077517e-01 8.6746610259495149e-02 -4.1461208520459847e+00 + -3.0713532423988199e-01 -8.5614917950406544e-02 -4.8876528649662774e+00 + -2.3924034153998530e-01 -3.1608778133092497e-01 -5.5862726233027287e+00 + -1.6380753481624485e-01 -6.0482795647294862e-01 -6.2249539497799908e+00 + -9.1358027678876325e-02 -9.5297411619193628e-01 -6.7868536357722054e+00 + -3.3639875875874622e-02 -1.3584389430400283e+00 -7.2520098586265398e+00 + 5.6006411518816843e-03 -1.8101139068374701e+00 -7.6073598975949386e+00 + 4.0675465386159342e-02 -2.2913925356368603e+00 -7.8563546893457330e+00 + 9.3474186788760669e-02 -2.7865344917959800e+00 -8.0140149131239049e+00 + 1.7585079946994234e-01 -3.2766787644250259e+00 -8.0933355881815068e+00 + 2.8923391072735716e-01 -3.7442346438181948e+00 -8.1067217440635559e+00 + 4.3218100155627548e-01 -4.1794085919521846e+00 -8.0668809679530256e+00 + 6.0185661005613500e-01 -4.5781339202816431e+00 -7.9854296063343435e+00 + 7.8921331222167668e-01 -4.9452698219714213e+00 -7.8760926531200486e+00 + 9.9859017870069211e-01 -5.3639056075429030e+00 -7.8006972289046228e+00 + id 12610 + loc 8.4446662664413452e-01 3.5763898491859436e-01 409 + blend 0.0000000000000000e+00 + interp 4.2754345547046430e-01:3.0233149506636653e-01:4.8248588240546075e-01:4.2753918003590963e-01:1.3907711472440061e+00:3.5696914141335945e-01:1.9889513863387953e+00:3.0844794976487921e-01:3.0089770488862468e+00:3.2739653748550274e-01:3.9150011282440795e+00 + CVs 20 + -3.0010844642907558e-01 8.9353913370435578e-02 1.7495408907077670e-01 + -5.9511864980794893e-01 1.6801599939892406e-01 3.4047324675361129e-01 + -9.0420230333805018e-01 2.4616140736775605e-01 4.8954789736016158e-01 + -1.2323827078773906e+00 3.2431997728305312e-01 6.1770409477256538e-01 + -1.5764163218520246e+00 3.9684673241353430e-01 7.2536854670047179e-01 + -1.9326050656503266e+00 4.5904247748976468e-01 8.1432746235415354e-01 + -2.2952081983438419e+00 5.0539783002098593e-01 8.8536006692102487e-01 + -2.6580607132098337e+00 5.2591732700081684e-01 9.3779925333003900e-01 + -3.0184518477003852e+00 5.0769850521509241e-01 9.7393944400291588e-01 + -3.3723400782117370e+00 4.3707050297642236e-01 1.0032220225869763e+00 + -3.7092154807349136e+00 3.0179514625603332e-01 1.0376505097962512e+00 + -4.0196554506693172e+00 9.7698848661363691e-02 1.0839187169067457e+00 + -4.3031642624755353e+00 -1.7256168284433437e-01 1.1457449006509353e+00 + -4.5591058544809577e+00 -5.0579766222396705e-01 1.2284328221235192e+00 + -4.7770251179751151e+00 -8.9531654817371153e-01 1.3313584958934577e+00 + -4.9424769727686950e+00 -1.3271872299323970e+00 1.4374697788271154e+00 + -5.0558391057667205e+00 -1.7871817214946106e+00 1.5283287512111932e+00 + -5.1489408815567552e+00 -2.2688033637524176e+00 1.6164501176551453e+00 + -5.3447887006265526e+00 -2.7567757190717819e+00 1.7652670842165126e+00 + id 12611 + loc 1.7532850801944733e-01 9.9919426441192627e-01 417 + blend 0.0000000000000000e+00 + interp 4.0204431734416346e-01:3.0458156320929219e-01:5.0607781290899223e-01:3.5481378420204673e-01:1.1772150134255452e+00:4.0204029690099002e-01:1.8508287531997187e+00:2.1953742752748426e-01:2.1667852473761355e+00:3.6908429722018482e-01:3.4045778631743828e+00 + CVs 20 + -8.9235406609830106e-02 1.4418282943014576e-01 -5.5966018044613423e-02 + -1.6090725856530524e-01 2.3974844708802950e-01 -6.2999548053555579e-02 + -2.0790166484317685e-01 3.1567116764538516e-01 -3.4069631045275051e-02 + -2.5345312367095651e-01 3.9337238163107435e-01 -4.2418862964236914e-03 + -2.9788493607638927e-01 4.7408820407361441e-01 2.3036434627763003e-02 + -3.4076530111469644e-01 5.5690030043631111e-01 4.5078815933471628e-02 + -3.8244584501313050e-01 6.3931570369716284e-01 5.9235665113065605e-02 + -4.2499471641130282e-01 7.1657497429136441e-01 6.2894248195380420e-02 + -4.6936741975143964e-01 7.8480639037286615e-01 5.5416222987131947e-02 + -5.0948796119997575e-01 8.4559442162723053e-01 3.9639103577481516e-02 + -5.3293294649536538e-01 9.0453727128684669e-01 1.9338528871510718e-02 + -5.3319836132179210e-01 9.6159999138566621e-01 -6.7137980518394702e-03 + -5.2189702350467138e-01 1.0044049916715891e+00 -4.5264228082488200e-02 + -5.1393321771167499e-01 1.0200814050639053e+00 -9.9662178091940556e-02 + -5.0890059868535831e-01 1.0059676762808774e+00 -1.6782355567022594e-01 + -4.9636873089602940e-01 9.6572089223273649e-01 -2.4685341939780292e-01 + -4.7166002397775525e-01 9.0267656801389884e-01 -3.3580056181148471e-01 + -4.4490607473800148e-01 8.1803269584710303e-01 -4.3439983897082335e-01 + -4.5392809783398974e-01 6.4668902889288116e-01 -5.4093917295992477e-01 + id 12612 + loc 5.2991682291030884e-01 4.6799585223197937e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4238168140383383e-01:4.4237725758701979e-01:2.7132256614876438e-01:3.8298724258846600e-01:1.0587007496559173e+00:4.1272909553170434e-01:1.9230330267369768e+00:4.1823965689097287e-01:2.3442571801106071e+00:4.3522742627068328e-01:3.0011603522125787e+00:3.1064849188732430e-01:3.9127180552286522e+00 + CVs 20 + -5.9405050569198793e-02 4.2561063264994914e-01 -4.8301074548379397e-02 + -1.4374378740636107e-01 8.6065727088273314e-01 -5.1421650049451539e-02 + -2.5247231469189879e-01 1.3036055477716828e+00 -8.4273111867805284e-04 + -3.9129215505096249e-01 1.7485739665432165e+00 1.2511384280269311e-01 + -5.5070185699499929e-01 2.1711635802279927e+00 3.4827974860312283e-01 + -7.1179582409649533e-01 2.5410413380797880e+00 6.3585362724216077e-01 + -9.5651104693070355e-01 2.7877805775373998e+00 1.0860452451654612e+00 + -1.1068914780512471e+00 2.8932446114128108e+00 1.4940474096427216e+00 + -1.2079880765133588e+00 2.9108799776685705e+00 2.0305218853619404e+00 + -1.2329454437933143e+00 2.7655851638376867e+00 2.6351605346768583e+00 + -1.1597587317821767e+00 2.4589812893945040e+00 3.2010897582791644e+00 + -1.0053221512517372e+00 2.0122418521804324e+00 3.6663728774516029e+00 + -8.2959053151021800e-01 1.4904129183103128e+00 3.9915152531334117e+00 + -6.9748093373252162e-01 1.0313560114446052e+00 4.1948988509640506e+00 + -6.3061582115766091e-01 8.0961481904684129e-01 4.3464600247543812e+00 + -6.4245729064659352e-01 9.8264826634317193e-01 4.4411518224424764e+00 + -7.7842942976147467e-01 1.5027012663459480e+00 4.2662024813391515e+00 + -1.0152194023755472e+00 1.9724762368635713e+00 3.5950192743574476e+00 + -1.0025365209347679e+00 2.0328543023389147e+00 3.7504719603755263e+00 + id 12613 + loc 3.6196857690811157e-01 8.5948988795280457e-02 406 + blend 0.0000000000000000e+00 + interp 3.7775424590553724e-01:3.4260129909633136e-01:3.6153127120337469e-01:3.6216584270825763e-01:9.7540391377729840e-01:3.7408581417729081e-01:1.6431304850436568e+00:2.7456483980824548e-01:2.0433709760835526e+00:3.7179837561485979e-01:3.0336830133556618e+00:3.7775046836307818e-01:3.9695934921394502e+00 + CVs 20 + -2.7117190443292128e-02 1.1221658856381844e-01 1.6076912894920713e-02 + -4.7634775406772079e-02 2.1391814801956083e-01 4.7838887073732045e-02 + -4.8004685417110657e-02 3.2627487941621564e-01 8.2426554713733780e-02 + -2.9511300400639554e-02 4.5302909644287115e-01 9.5828774357807261e-02 + 7.6705484364859647e-03 5.8927588816029042e-01 7.9553082635937022e-02 + 6.1768462677846192e-02 7.2775448388947850e-01 2.5759115097602703e-02 + 1.2965029455206983e-01 8.5923400429017294e-01 -7.1792955251417212e-02 + 2.0930195990200021e-01 9.7389193901486948e-01 -2.1548747771540211e-01 + 3.0198965485113682e-01 1.0629879357480589e+00 -4.0145863359226702e-01 + 4.0609751356291418e-01 1.1190543672514175e+00 -6.2255253618087814e-01 + 5.1047999319171922e-01 1.1360459630977258e+00 -8.7461963265458464e-01 + 6.0265389797901348e-01 1.1111180338714683e+00 -1.1561449419107717e+00 + 6.7947371746850704e-01 1.0462396945931265e+00 -1.4626878308881426e+00 + 7.3913905523396195e-01 9.4685690009045320e-01 -1.7852376641176728e+00 + 7.7047308555123828e-01 8.1915537814273676e-01 -2.1135238846069040e+00 + 7.6231200615546357e-01 6.6764790158073117e-01 -2.4385757480961541e+00 + 7.1663559719147674e-01 4.9490201001698408e-01 -2.7524601648461600e+00 + 6.4317812290270493e-01 3.0901221960603342e-01 -3.0498961453072200e+00 + 6.2657072217878351e-01 1.6478209552512646e-01 -3.3699701890881277e+00 + id 12614 + loc 8.6573582887649536e-01 8.2264500856399536e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2560187869293326e-01:3.4099973362761571e-01:1.3356558533511675e-01:4.2559762267414636e-01:9.2838403596611874e-01:3.1738481336436752e-01:1.3350247660712415e+00:3.2074389361200917e-01:2.1250696286759245e+00:2.8545463722169268e-01:3.3734334915789357e+00 + CVs 20 + 3.3004272605676718e-02 4.0958812548008128e-01 4.0062967027859975e-01 + 1.2460839512341895e-01 7.1749933717233860e-01 6.7098271443631297e-01 + 2.5744149639057601e-01 9.8226440044112984e-01 8.8800892823705124e-01 + 4.2240948132425643e-01 1.2307771300318895e+00 1.0884887088413926e+00 + 6.1346781084034441e-01 1.4592055896187786e+00 1.2679746387209592e+00 + 8.2195811702364296e-01 1.6654895052231251e+00 1.4247758762489586e+00 + 1.0390858999683246e+00 1.8483566677633396e+00 1.5536720648170796e+00 + 1.2590612278273017e+00 2.0082585690067978e+00 1.6493444214086650e+00 + 1.4801309459608467e+00 2.1463385594677691e+00 1.7075940697467442e+00 + 1.6974821058110479e+00 2.2499924432904082e+00 1.7195033889637821e+00 + 1.8949342849770425e+00 2.2934713822931254e+00 1.6861710086796702e+00 + 2.0564320028063938e+00 2.2646570801713759e+00 1.6256992724951234e+00 + 2.1751382758923854e+00 2.1714154933952585e+00 1.5574342728946127e+00 + 2.2513309316713341e+00 2.0350686337198640e+00 1.4946220973604867e+00 + 2.2913980286588247e+00 1.9072856353799976e+00 1.4480667562883209e+00 + 2.3074130548337406e+00 1.8900499534265178e+00 1.4160829531850716e+00 + 2.3144137311435804e+00 1.9809867033430573e+00 1.3556114744777807e+00 + 2.3096471338197420e+00 1.9215990639281251e+00 1.3430104259867079e+00 + 2.2750756036714792e+00 1.4801790893557334e+00 1.5780929545617126e+00 + id 12615 + loc 1.0303446650505066e-01 7.3770207166671753e-01 372 + blend 0.0000000000000000e+00 + interp 5.1324455579692452e-01:3.6298639825217022e-01:1.5620598603872737e-01:3.4894088135284584e-01:3.6008038102322781e-01:3.1554476383097851e-01:1.0147328956227011e+00:5.1323942335136652e-01:1.4797876427769923e+00:3.8571376399921914e-01:2.0813557670072003e+00:4.0055567274299120e-01:2.8899503734182961e+00:3.4323099313366046e-01:3.2762927040561216e+00:4.3957149537013851e-01:3.9212135389099032e+00 + CVs 20 + -3.3336333801869183e-01 6.8356750903764274e-01 -1.9186319720738346e-01 + -6.5791176358144221e-01 1.3991619729245681e+00 -3.6797961892869208e-01 + -9.1844069795697036e-01 2.1330022577047649e+00 -5.7680093696841339e-01 + -9.8725847067129491e-01 2.8349844357833742e+00 -8.7507517238461485e-01 + -7.4714353591170468e-01 3.3949999526044374e+00 -1.2573990143230815e+00 + -2.2480009466657536e-01 3.7198863707378385e+00 -1.6425713607744445e+00 + 4.6162606265403272e-01 3.7856880247361637e+00 -1.9473697203075035e+00 + 1.2001386755854495e+00 3.6314815017357720e+00 -2.1458527998911330e+00 + 1.9255358508609075e+00 3.3126088196548529e+00 -2.2612471837367316e+00 + 2.5993459637020546e+00 2.8723908426988207e+00 -2.3254193040231659e+00 + 3.1754047697785857e+00 2.3723654527869877e+00 -2.3690814058500709e+00 + 3.5904220438826151e+00 1.9114777884081573e+00 -2.4343288291054046e+00 + 3.7838554362278973e+00 1.5482796047914700e+00 -2.5366649608401310e+00 + 3.6384146340991630e+00 1.2815630394272475e+00 -2.6117068739449660e+00 + 3.1052119681709032e+00 9.3009437641987081e-01 -2.4745242480553458e+00 + 2.8437499589226940e+00 3.7309749982975404e-01 -2.1003238130679929e+00 + 3.1647251731266683e+00 -2.9366198395751164e-02 -1.8402981702160697e+00 + 3.7947309805032807e+00 1.9352000498185973e-02 -1.8918523520570538e+00 + 4.4643252636053052e+00 6.2592469264645056e-01 -2.3179799912334618e+00 + id 12616 + loc 5.7978916168212891e-01 6.2922918796539307e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3833662356432529e-01:4.2228545184480154e-01:7.9887342823352636e-03:2.6480321733482853e-01:8.3154868243122571e-01:2.5809698626060340e-01:1.8734733116739011e+00:4.3833224019808964e-01:2.5403035188277010e+00:2.5588189367358638e-01:3.0553302595486889e+00 + CVs 20 + 9.9897926325012862e-02 2.3627645026083288e-01 -2.8057435936583147e-01 + 1.9347933445191018e-01 4.7127187624642675e-01 -5.4690216769483269e-01 + 2.7327252958130582e-01 7.0747971797592102e-01 -8.0592358385153717e-01 + 3.3378297764760906e-01 9.4825371824150939e-01 -1.0608877988294392e+00 + 3.6929322669526338e-01 1.1961872881985569e+00 -1.3096353787109438e+00 + 3.7161691431004085e-01 1.4526021127340218e+00 -1.5440852118650676e+00 + 3.3610239881532100e-01 1.7198455938366104e+00 -1.7585466237013905e+00 + 2.6691934255572147e-01 2.0049432513615781e+00 -1.9624347642675033e+00 + 1.7657863940823704e-01 2.3166983864948669e+00 -2.1823075919135304e+00 + 8.2339831566562216e-02 2.6569043254077505e+00 -2.4590755136407831e+00 + -1.5584602030549455e-04 3.0038899146888318e+00 -2.8384957444325645e+00 + -6.3681938404976490e-02 3.3045768151081991e+00 -3.3403201854207789e+00 + -1.1207496898630209e-01 3.5005279707440695e+00 -3.9445307525963176e+00 + -1.5343851528398389e-01 3.5557048760677938e+00 -4.6013952654504884e+00 + -1.8212127767907504e-01 3.4750286576449345e+00 -5.2450720258620134e+00 + -1.7334994674209581e-01 3.3079733043276107e+00 -5.8082813417189874e+00 + -1.0417304064280430e-01 3.1153363580409934e+00 -6.2508139583786866e+00 + -4.0892428607586240e-03 2.8952175250905006e+00 -6.5849162561585217e+00 + -5.5687004101917070e-02 2.6324529758157742e+00 -6.7344591959751918e+00 + id 12617 + loc 8.9031362533569336e-01 3.4627932310104370e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2146826524437808e-01:2.6790709503544446e-01:2.8734947712517789e-01:2.8415211234704524e-01:1.2179047921714889e+00:4.2146405056172564e-01:1.9510840288425011e+00:2.9649305466229886e-01:2.3618280613453377e+00:2.8668051662196531e-01:3.0486764548937195e+00 + CVs 20 + 3.0169933267269561e-01 3.3260988936910812e-01 -1.0985232609835394e-01 + 5.5255514328042254e-01 6.6853443014269742e-01 -2.0677944203993084e-01 + 7.7405090182697456e-01 1.0148382246839447e+00 -2.9739809086926167e-01 + 9.9356670557914706e-01 1.3630388971396485e+00 -3.5882078906314430e-01 + 1.2370275590961242e+00 1.6961387027539263e+00 -3.6004775491194074e-01 + 1.5151509150531375e+00 1.9941553161711620e+00 -2.8601101725295497e-01 + 1.8131691279595270e+00 2.2294441476962330e+00 -1.3827861473360192e-01 + 2.0921706458812532e+00 2.3745796268074311e+00 6.9037771233321221e-02 + 2.3153508258776587e+00 2.4176022274058306e+00 3.1692417426896258e-01 + 2.4819510900292259e+00 2.3591265537308610e+00 5.9848418186635199e-01 + 2.6102503215042612e+00 2.1889697158967740e+00 9.0764016966166416e-01 + 2.7173945610159000e+00 1.8833171617155813e+00 1.1992470470207985e+00 + 2.8125188294896475e+00 1.4566009143198246e+00 1.3821541670714383e+00 + 2.8875013480695109e+00 9.9144829431162962e-01 1.4405650373360435e+00 + 2.9274176703825470e+00 5.2650641030002310e-01 1.4830090036334349e+00 + 2.9180003640485133e+00 6.6727122437581499e-02 1.6392411014984607e+00 + 2.8600185852241449e+00 -3.3378469429432633e-01 2.0004164390632440e+00 + 2.7796188191046562e+00 -6.1127009636455010e-01 2.5064813341461321e+00 + 2.7656536555602411e+00 -9.4859332333897428e-01 2.8464064011143737e+00 + id 12618 + loc 5.0945770740509033e-01 9.7116971015930176e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8895448488124210e-01:4.8894959533639332e-01:7.8185316545366756e-02:4.5571692602919472e-01:6.8449943124627532e-01:1.9710720428745021e-01:1.4049475907528974e+00:3.8654425222975985e-01:2.0335159686534672e+00:3.4782300850377712e-01:3.0800258312094790e+00:4.6362530407822827e-01:3.7435502914885430e+00 + CVs 20 + -9.9082029988169701e-02 2.4209261812696187e-01 1.1086907850852451e-02 + -1.4640399174482149e-01 4.1388685800269892e-01 -8.7416177266234435e-02 + -2.2719895279423258e-01 5.7513262166921741e-01 -2.1480983389392094e-01 + -3.4442682399069308e-01 7.1666792709985994e-01 -3.5346371581334263e-01 + -4.9457870369787149e-01 8.3322120650164277e-01 -5.0253564838359788e-01 + -6.7508752121579529e-01 9.2309539620499304e-01 -6.5919553925921992e-01 + -8.8556430163702149e-01 9.8694336012804518e-01 -8.1908201822261362e-01 + -1.1271598273966135e+00 1.0258807904141025e+00 -9.7629619894562714e-01 + -1.4001500058294025e+00 1.0409277237447323e+00 -1.1234803839198173e+00 + -1.7029200265137812e+00 1.0332805580906061e+00 -1.2525453660968318e+00 + -2.0303696162703120e+00 1.0039262290671860e+00 -1.3564232264884288e+00 + -2.3742891517065270e+00 9.5444731792758097e-01 -1.4309626543278759e+00 + -2.7291458473509942e+00 8.9128282379101675e-01 -1.4742868927234465e+00 + -3.0931296427521442e+00 8.3006786031601787e-01 -1.4850350815653033e+00 + -3.4630642183764988e+00 7.9087560456967432e-01 -1.4625935095511746e+00 + -3.8314342304167521e+00 7.8661876696184230e-01 -1.4089966313529709e+00 + -4.1876888627472741e+00 8.2026112671858087e-01 -1.3312544183645496e+00 + -4.5163858041492881e+00 8.8875764889693443e-01 -1.2448637329839747e+00 + -4.7881571156676674e+00 9.5408786592531158e-01 -1.2074290962485552e+00 + id 12619 + loc 1.1305474489927292e-01 4.6704256534576416e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6358187564431027e-01:3.4358355612097696e-01:6.4206604921353061e-01:2.6976008754198111e-01:1.0419974424720415e+00:2.9237469591826054e-01:1.8032464963987296e+00:2.7235396646967724e-01:2.5180272770154417e+00:2.7512916189253317e-01:3.2592854628616688e+00:3.6357823982555382e-01:3.9958489108629101e+00 + CVs 20 + -3.0462096192407848e-02 3.3963711706157534e-01 -7.3878310477416220e-02 + -9.2299341703498350e-02 6.4464239000249002e-01 -1.5793437263620824e-01 + -1.6636426754429157e-01 9.2275374854623948e-01 -2.2894055930421436e-01 + -2.4230292168764139e-01 1.1822062160286650e+00 -2.7602909195778391e-01 + -3.2129346899389000e-01 1.4277954004499116e+00 -3.0273608856470136e-01 + -4.0500465429945398e-01 1.6671547723953193e+00 -3.1495363418693778e-01 + -4.9461356989807548e-01 1.9043543835754480e+00 -3.2214940024609873e-01 + -5.8933575086719348e-01 2.1388190346349791e+00 -3.3392114071331463e-01 + -6.9472051563136750e-01 2.3732794187569679e+00 -3.5699965277810330e-01 + -8.3464907853038395e-01 2.6065397772501173e+00 -3.9437885543080164e-01 + -1.0344231199252274e+00 2.8173491135941289e+00 -4.4227993806617555e-01 + -1.2911871245902540e+00 2.9730640450718049e+00 -4.9176896353805333e-01 + -1.5683979091307245e+00 3.0542380201337989e+00 -5.3626759417509917e-01 + -1.8066239388073042e+00 3.0731527092512998e+00 -5.8410814869515004e-01 + -1.9653900137985554e+00 3.0682007836895782e+00 -6.6964492986503521e-01 + -2.0710574394134995e+00 3.0504107980901498e+00 -8.1302207649042790e-01 + -2.1713400120483213e+00 2.9985359991320033e+00 -9.8937501746119771e-01 + -2.2819102720298785e+00 2.8989218579306657e+00 -1.1276298049552627e+00 + -2.4594954732930856e+00 2.7983687518721450e+00 -7.9144172363316190e-01 + id 12620 + loc 6.9929644465446472e-02 3.7869533896446228e-01 411 + blend 0.0000000000000000e+00 + interp 3.9174302010635348e-01:3.5909837186886501e-01:8.8243183266694591e-01:3.4605796974740066e-01:1.5327116418995759e+00:3.1316499637911760e-01:2.0792667024488711e+00:3.9173910267615242e-01:2.7720694869138445e+00:2.4773358331345766e-01:3.0765787241531628e+00:3.3373924698113094e-01:3.9664195023683115e+00 + CVs 20 + -2.8240265043591012e-01 2.9628393044067008e-01 -6.9566328645355113e-01 + -5.7640924624410650e-01 4.7747702902731365e-01 -1.1855034012142529e+00 + -8.9344118393180583e-01 6.2164078369591191e-01 -1.6566600121854771e+00 + -1.2273034683930244e+00 7.4257296508434645e-01 -2.1607139373205282e+00 + -1.5630829495881819e+00 8.0772423187791087e-01 -2.6579090221989148e+00 + -1.8883220035190822e+00 7.9530014254429793e-01 -3.1019328665830126e+00 + -2.2013634434411524e+00 7.0034803671609414e-01 -3.4742244888624878e+00 + -2.5170871337049787e+00 5.1568696595316232e-01 -3.7901936605546331e+00 + -2.8427237254972022e+00 2.2769671686543291e-01 -4.0631678224018897e+00 + -3.1541898754156135e+00 -1.6211346629610079e-01 -4.2837600486235061e+00 + -3.4062839324983378e+00 -6.3255552010588922e-01 -4.4296037842329561e+00 + -3.5590653431537125e+00 -1.1634649375818309e+00 -4.4862283405899506e+00 + -3.6147528814717562e+00 -1.7580384340578419e+00 -4.4637600890422462e+00 + -3.6244075580278010e+00 -2.4422175141845264e+00 -4.4086610723914861e+00 + -3.6625810969476085e+00 -3.2346533396218806e+00 -4.3974523574467339e+00 + -3.7945232248421390e+00 -4.0933226876703444e+00 -4.4937869962015773e+00 + -4.0073723252046909e+00 -4.9265143079029343e+00 -4.7299738948650587e+00 + -4.2385849363705788e+00 -5.6688243214188594e+00 -5.0995463468712252e+00 + -4.4577648070854847e+00 -6.3070755754113552e+00 -5.5697639891906050e+00 + id 12621 + loc 4.9009627103805542e-01 9.7780340909957886e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8681498242428192e-01:3.8681111427445769e-01:2.1476265344447387e-01:1.2699533390445453e-01:1.5141182423741979e+00:2.8087386441813356e-01:2.6134327258299082e+00:3.2419012248815099e-01:3.6614090202666651e+00 + CVs 20 + 1.3008308528975004e-01 3.4119655353511874e-01 -2.2756084516207442e-01 + 2.3254983242278898e-01 6.7277035205284208e-01 -4.7733975257317718e-01 + 3.1855969026535180e-01 9.8425569075750086e-01 -7.3567096339497096e-01 + 3.9224563323573219e-01 1.2652841358008493e+00 -9.9762952963270901e-01 + 4.5193318419795520e-01 1.5093597278548763e+00 -1.2606985599004881e+00 + 4.9424967529792413e-01 1.7159750974287804e+00 -1.5180082661301211e+00 + 5.1985938902638618e-01 1.8931768586668176e+00 -1.7696991390951391e+00 + 5.3966886439990858e-01 2.0482078500814067e+00 -2.0307812212952912e+00 + 5.7065761959663730e-01 2.1699810065991589e+00 -2.3140075285965396e+00 + 6.2116796290966370e-01 2.2344686350202201e+00 -2.6101159476512015e+00 + 6.8936913590430604e-01 2.2255166001783273e+00 -2.8950664118946454e+00 + 7.7085174799805378e-01 2.1393981791624173e+00 -3.1438683548964725e+00 + 8.6810763031242033e-01 2.0217931208643609e+00 -3.3222858970453437e+00 + 1.0048017001056047e+00 1.9663861452205831e+00 -3.3693150504919722e+00 + 1.2386389303044318e+00 2.0018168939927925e+00 -3.2304320484692064e+00 + 1.6442277807289365e+00 2.0042725977927534e+00 -2.9088137578554187e+00 + 2.2264167330623912e+00 1.8074449132733010e+00 -2.5513270120297817e+00 + 2.7620255510155665e+00 1.4724047875283515e+00 -2.4471519929395793e+00 + 2.8195939685610991e+00 1.3742765174330573e+00 -2.7381812724143089e+00 + id 12622 + loc 6.5455132722854614e-01 6.4500999450683594e-01 403 + blend 0.0000000000000000e+00 + interp 3.4711546629577911e-01:2.7656254608531888e-01:2.3471919987186951e-01:2.9188718629216126e-01:9.9308332140683475e-01:2.5133481801879048e-01:1.6473746150339623e+00:3.0248187490873146e-01:2.8314269269819015e+00:3.4711199514111618e-01:3.2041023357616210e+00 + CVs 20 + -7.8127147601391167e-02 3.7604051787393664e-02 -1.3172589040703789e-01 + -1.2951411255439474e-01 9.9650284905459227e-02 -2.5166474644588382e-01 + -1.9974892805119129e-01 1.5770015150436675e-01 -3.7104860758427000e-01 + -2.9192774491912016e-01 2.0364617531576273e-01 -4.8663427352303706e-01 + -4.0288310948510714e-01 2.3677261719363307e-01 -5.9530263162545671e-01 + -5.3074118111863244e-01 2.5767536813237862e-01 -6.9424539633280324e-01 + -6.7482053538552345e-01 2.6784882386665104e-01 -7.8020396089961297e-01 + -8.3478130664737349e-01 2.6859499528203168e-01 -8.4949340045345179e-01 + -1.0093834154268799e+00 2.6020590513624520e-01 -8.9854741306091590e-01 + -1.1960572515834285e+00 2.4221621945758032e-01 -9.2444054493629635e-01 + -1.3914597665601944e+00 2.1479337196103243e-01 -9.2484983748040950e-01 + -1.5919840307385795e+00 1.7912805485024341e-01 -8.9787736848518751e-01 + -1.7939057795257543e+00 1.3758606593798894e-01 -8.4178785953865176e-01 + -1.9930003069129996e+00 9.3695233995061189e-02 -7.5497203342518437e-01 + -2.1830806191208021e+00 5.1584403045200400e-02 -6.3583424873130789e-01 + -2.3560673561729728e+00 1.4221440279026387e-02 -4.8319126534403950e-01 + -2.5022702375626884e+00 -1.8113028399826092e-02 -2.9803729314781408e-01 + -2.6116823974916872e+00 -4.8220353453426457e-02 -8.5482225936300144e-02 + -2.7248078421517250e+00 -1.0683276044594336e-01 3.1913226517833460e-03 + id 12623 + loc 2.9176449775695801e-01 5.5658417940139771e-01 409 + blend 0.0000000000000000e+00 + interp 3.6190329212470851e-01:2.6258252941602594e-01:3.3441406115929329e-01:3.6189967309178728e-01:1.0381890420904965e+00:2.7373036062236106e-01:2.1422939521158719e+00:2.8543280230282675e-01:2.9888564044120014e+00:2.8694052193579189e-01:3.6570968330455109e+00 + CVs 20 + 3.9966637018961537e-01 2.6303988018286428e-01 -5.4539758127693662e-02 + 7.2899947964843648e-01 4.5984176597879151e-01 -9.7193756463370057e-02 + 1.0439830916376656e+00 6.1482052622175587e-01 -1.2265480768814424e-01 + 1.3757950162835175e+00 7.4154221247714380e-01 -1.2851812980563462e-01 + 1.7133356227512171e+00 8.3182529595181465e-01 -1.2195398889197832e-01 + 2.0453157572475509e+00 8.8220448197222057e-01 -1.1192441357632320e-01 + 2.3683405386133565e+00 8.9916524120453512e-01 -1.0606538277361362e-01 + 2.6850620830726855e+00 8.9376794891733935e-01 -1.0981714002685365e-01 + 2.9979487516499805e+00 8.6957101783218904e-01 -1.2613258239228731e-01 + 3.3068878653507543e+00 8.2325172172141814e-01 -1.5687213618507442e-01 + 3.6107284483780155e+00 7.5461676938367517e-01 -2.0299991141296256e-01 + 3.9082808959849964e+00 6.6592251723392382e-01 -2.6401998152360850e-01 + 4.1949718073411972e+00 5.5283461288058788e-01 -3.4076357914363203e-01 + 4.4616846883953984e+00 4.0583398353843725e-01 -4.3631590109395380e-01 + 4.7010797858864697e+00 2.2401330772605554e-01 -5.4962030714929588e-01 + 4.9107637845607091e+00 2.2260693273179477e-02 -6.7062976774777405e-01 + 5.0904510526469728e+00 -1.7792090800826976e-01 -7.8787065321795768e-01 + 5.2269242812526553e+00 -3.8260810520640298e-01 -8.9072864639263394e-01 + 5.1059890042866209e+00 -8.6243980565535949e-01 -8.3872274252757373e-01 + id 12624 + loc 7.7347195148468018e-01 5.1035547256469727e-01 1081 + blend 0.0000000000000000e+00 + interp 4.6263553328226248e-01:3.0142901401413985e-01:3.2688660401506309e-02:4.2028366612632501e-01:1.0008359175674695e+00:2.6085226225588320e-01:1.7205408384131751e+00:3.0948064288552757e-01:2.2213257930275581e+00:3.6069193834897162e-01:2.9424293996385220e+00:4.6263090692692965e-01:3.4314978317338634e+00 + CVs 20 + 2.6625959009459188e-03 5.1549865640997083e-01 4.3589341376981172e-01 + 5.5313088193593207e-02 9.1816618018446450e-01 6.9960142394448199e-01 + 1.2759606838600712e-01 1.2789203194333782e+00 9.0315479589027670e-01 + 2.1007950871656333e-01 1.6234240282059069e+00 1.0878886460605381e+00 + 3.0506635177575497e-01 1.9428773525237004e+00 1.2454793538300009e+00 + 4.1168709935136266e-01 2.2279059100122272e+00 1.3633045660422276e+00 + 5.2634175409088590e-01 2.4688625670769300e+00 1.4252653807172893e+00 + 6.4296265215733472e-01 2.6545631596047148e+00 1.4185412270224371e+00 + 7.5054098938450953e-01 2.7656328962207448e+00 1.3396465239365454e+00 + 8.3297300295404264e-01 2.7858521937515555e+00 1.2162709800404885e+00 + 8.9327253137784768e-01 2.7373555379535199e+00 1.0838034696119627e+00 + 9.4514371438938838e-01 2.6367452214393245e+00 9.4371256510595480e-01 + 9.9543451480191869e-01 2.4840912410497094e+00 7.9616701094609743e-01 + 1.0493557292259492e+00 2.2796921920753199e+00 6.4863717217989936e-01 + 1.1117906403906286e+00 2.0253582659032596e+00 5.1702714498565272e-01 + 1.1841799883568938e+00 1.7266488440035745e+00 4.3716831646906773e-01 + 1.2650396587588300e+00 1.4026708611878953e+00 4.5695729735847568e-01 + 1.3570653878415526e+00 1.0571816900381565e+00 5.8652593598045155e-01 + 1.4608329037037937e+00 6.3326815232387212e-01 7.7980490390053769e-01 + id 12625 + loc 4.3175774812698364e-01 2.7765870094299316e-01 372 + blend 0.0000000000000000e+00 + interp 3.8924502511131970e-01:2.8363857204294385e-01:9.0039945146093259e-01:3.8924113266106858e-01:1.1727175408519361e+00:2.9777112230488284e-01:1.8998716766486412e+00:2.7544843079627424e-01:2.4954535110865415e+00:3.1084985753756017e-01:3.0088085793222206e+00:3.2176709578074703e-01:3.9472095600287220e+00 + CVs 20 + -1.5402480567055205e-01 5.2010409979494066e-01 5.2589692255574283e-01 + -2.6770718282891504e-01 9.9803465320361795e-01 9.7241012994603138e-01 + -3.5133329669391672e-01 1.4443811503832629e+00 1.3877919428996641e+00 + -4.1417874772486929e-01 1.8414909713247885e+00 1.7512970529700906e+00 + -4.8737846276099939e-01 2.1986422980550100e+00 2.0302407718728901e+00 + -6.6928483794809845e-01 2.5788884183544578e+00 2.1536760256123220e+00 + -9.6113238930578337e-01 2.9270026507900484e+00 2.0024026699811590e+00 + -1.2710276013109294e+00 3.1505259224775299e+00 1.5789193379890238e+00 + -1.5450704999858167e+00 3.2052611377665943e+00 9.5732187268191815e-01 + -1.7578385044988087e+00 3.0620505320181870e+00 2.4749307347008909e-01 + -1.8973776048365476e+00 2.7317186536395948e+00 -3.8575881335319395e-01 + -1.9696881597155820e+00 2.2818819851399672e+00 -7.7146089447231625e-01 + -1.9454933943324542e+00 1.7292929280555400e+00 -8.4286418447851386e-01 + -1.7052243187311382e+00 9.4621817491385152e-01 -7.1422435898241632e-01 + -1.2289612403302330e+00 -9.8085179197728356e-02 -9.5168390266149916e-01 + -8.9016780360042436e-01 -9.0869884223067321e-01 -1.9673327652892660e+00 + -9.6881875418530727e-01 -1.1921487569627074e+00 -3.4457164404045093e+00 + -1.4788735034926581e+00 -9.5604179942690104e-01 -4.8521293720569441e+00 + -2.1528978548014375e+00 -5.1975568808065020e-01 -5.7400930916326551e+00 + id 12626 + loc 3.5056790709495544e-01 2.5700640678405762e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1887775409740657e-01:3.1526376056199945e-01:2.5510484445474657e-02:2.9475685525649331e-01:8.5336432895127146e-01:4.1887356531986564e-01:1.6345856933841916e+00:2.9202406805451270e-01:2.0410413680651107e+00:3.2354994257143227e-01:2.9576703687579498e+00:4.1329500765159349e-01:3.3139293167488253e+00 + CVs 20 + -2.0124051419706102e-01 3.4965063019668224e-01 -4.7736640481240156e-03 + -3.8327720114496633e-01 6.4737467162171636e-01 -6.8955644141372285e-02 + -5.4967725439586135e-01 9.1442040312595529e-01 -1.5956287905854377e-01 + -7.0958369087670692e-01 1.1530910847872695e+00 -2.6999113515676942e-01 + -8.7882472614411111e-01 1.3687011374464371e+00 -4.0550813053981749e-01 + -1.0731530068355166e+00 1.5726568895140662e+00 -5.6012620405421598e-01 + -1.2994737030244732e+00 1.7669419954741747e+00 -7.1296118712175638e-01 + -1.5524174571636993e+00 1.9406240583144390e+00 -8.4059787592534529e-01 + -1.8181308304247290e+00 2.0793359129911995e+00 -9.3209301334666772e-01 + -2.0855406455586194e+00 2.1706247400060201e+00 -9.8804947229971218e-01 + -2.3462205911780325e+00 2.2009591517414977e+00 -1.0121157189630758e+00 + -2.5832949540081600e+00 2.1672095958504345e+00 -1.0079062095736449e+00 + -2.7728220945013233e+00 2.0835419531993278e+00 -9.7404722163761892e-01 + -2.8958015734814340e+00 1.9697423310237085e+00 -9.0027390448984368e-01 + -2.9507897405384975e+00 1.8339707898812287e+00 -7.6965116564797631e-01 + -2.9521706797687610e+00 1.6738362094696144e+00 -5.5830346373805295e-01 + -2.9219418768386958e+00 1.4802373254144139e+00 -2.1747157168796771e-01 + -2.9525731471714614e+00 1.1890114279431503e+00 2.3088947429490858e-01 + -3.0956417034888171e+00 9.3596998585770108e-01 7.8196675660509252e-02 + id 12627 + loc 1.1314123868942261e-01 6.9726216793060303e-01 406 + blend 0.0000000000000000e+00 + interp 5.5569493717088880e-01:3.7162332615895854e-01:8.6307388645731553e-01:5.5568938022151715e-01:1.3164169773297805e+00:4.1286719655254350e-01:1.9563795450181849e+00:3.9464760479930028e-01:2.5368027638090904e+00:3.1115830173874370e-01:3.0720350750866117e+00:3.5028879881401537e-01:3.9995852272787653e+00 + CVs 20 + 1.0543469079041225e-01 2.3608067765346680e-01 -2.5004388516707155e-02 + 1.3550407641739690e-01 3.7964714047137604e-01 -5.0141688578398333e-03 + 1.1067789192061966e-01 4.8926327014673915e-01 2.3618062359678345e-02 + 9.7724020533678124e-02 5.8625663325236310e-01 5.5264385128048918e-02 + 9.8202834463728045e-02 6.6443561993133449e-01 8.8875272717973491e-02 + 1.1018032155571642e-01 7.1756295987880658e-01 1.2323116988815508e-01 + 1.3019798033944213e-01 7.3686491514661434e-01 1.5586174382434453e-01 + 1.5033499778671006e-01 7.0486373360666676e-01 1.7789068839620747e-01 + 1.4769225754243198e-01 5.7197550322160673e-01 1.4456898138966651e-01 + 1.4037399459118749e-02 2.6596744654496640e-01 -2.3159194180020753e-01 + -2.9161787420992108e-01 4.8674470140316300e-01 -1.0792628860020184e+00 + -4.0521318817794877e-01 8.3169179260659709e-01 -1.3179758971121964e+00 + -4.4965990193783867e-01 9.9378051018735802e-01 -1.3883363180896218e+00 + -4.6009711008685916e-01 1.0812529462160436e+00 -1.4249305489222679e+00 + -4.5091753340681323e-01 1.0955799862866418e+00 -1.4445553709216707e+00 + -4.3553356207122906e-01 1.0146532191516313e+00 -1.4508411488815951e+00 + -4.1411012640308265e-01 8.4953639027085470e-01 -1.4400559942377997e+00 + -3.7441540161325809e-01 6.5114071050151057e-01 -1.4097363452455924e+00 + -2.2865983808000589e-01 6.8312283404184293e-01 -1.4518370936841418e+00 + id 12628 + loc 3.4771755337715149e-01 5.8446097373962402e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6188220422702508e-01:4.6187758540498286e-01:3.8184843550112380e-01:2.6550728348502356e-01:9.9992294524588565e-01:4.1886015659859505e-01:1.5365475787947589e+00:4.6076008833269272e-01:2.1270576384101907e+00:4.3518699800629945e-01:2.9685510477574093e+00:2.9136598498478472e-01:3.2870435955912063e+00:4.2418551227933615e-01:3.9796895518345989e+00 + CVs 20 + -1.8093464641056881e-01 8.1410620242344689e-02 2.6481163961440080e-01 + -2.8272858480422125e-01 6.6216738722549351e-02 3.7660515140944384e-01 + -3.5829882007221886e-01 1.8531449031031461e-02 4.2040979201497952e-01 + -4.2854332479186691e-01 -3.5865707039944489e-02 4.5813569232870527e-01 + -4.8989949071132122e-01 -9.5328889668722216e-02 4.8835014428438328e-01 + -5.3933719258906954e-01 -1.5759925567395258e-01 5.1125259279511404e-01 + -5.7530169784436380e-01 -2.1998560929988564e-01 5.2839821854965185e-01 + -5.9785188024849401e-01 -2.7960355959369565e-01 5.4142467572584108e-01 + -6.0957083913776100e-01 -3.3443182679895533e-01 5.5146012161466951e-01 + -6.1615363450206673e-01 -3.8456773578412062e-01 5.5861065403385646e-01 + -6.2593020980857206e-01 -4.3246766626455924e-01 5.6168012854763327e-01 + -6.4776265110038833e-01 -4.8202536900488757e-01 5.5826964529084044e-01 + -6.8678015354244493e-01 -5.3624551361429085e-01 5.4669047224447020e-01 + -7.4211123192297768e-01 -5.9552976023220694e-01 5.2892560628593988e-01 + -8.0986261299155027e-01 -6.5893790549712794e-01 5.0839874323870293e-01 + -8.8779025394806577e-01 -7.2657888884269151e-01 4.8488475854606611e-01 + -9.7475118084624757e-01 -8.0041840253776131e-01 4.5667630083907734e-01 + -1.0648026843447731e+00 -8.8423984631863273e-01 4.3019469059628190e-01 + -1.1498345850436580e+00 -1.0104201900472072e+00 4.3748308945661235e-01 + id 12629 + loc 1.2065017968416214e-01 3.6273073405027390e-02 1084 + blend 0.0000000000000000e+00 + interp 6.8984420487185794e-01:2.9019938364436709e-01:8.8010063995907273e-02:4.0676477011100781e-01:9.9999965798177237e-01:6.8983730642980923e-01:1.0170593385010323e+00:2.5786109823243586e-01:2.9808334460210180e+00:4.4827739961216334e-01:3.8230746367712718e+00 + CVs 20 + 4.3586260360196771e-01 3.8882299054082659e-01 2.0482268243843121e-01 + 7.7775726588348659e-01 6.9045235291501372e-01 3.4645993908662615e-01 + 1.1032541244605008e+00 9.5901350599215507e-01 4.3648326269773408e-01 + 1.4327861429844297e+00 1.2554761819906433e+00 5.4050633065874321e-01 + 1.6997238941367885e+00 1.5851163543915479e+00 7.2285036509617817e-01 + 1.8309706445095837e+00 1.9066138827881374e+00 1.0009836825174427e+00 + 1.7907008469375976e+00 2.1621127545717576e+00 1.3326984249826754e+00 + 1.5641622887213180e+00 2.3070505505151297e+00 1.6266654989358389e+00 + 1.1943589072811480e+00 2.3134024469482166e+00 1.7295477229095109e+00 + 8.7859643085360628e-01 2.2216269722644202e+00 1.6002730544313324e+00 + 6.7099244129856206e-01 2.0902327312185971e+00 1.3833361024967776e+00 + 5.3757420931528488e-01 1.9069453896444126e+00 1.1143385322620580e+00 + 4.9552076274869905e-01 1.6660194330186862e+00 8.1400480915776230e-01 + 5.2355065991045291e-01 1.3863771435698684e+00 5.2759360096390728e-01 + 5.3959640046742297e-01 1.0711696815816767e+00 2.7091297883066234e-01 + 4.5328725710214490e-01 7.3161085027956874e-01 4.9687902870012665e-02 + 1.8466218204518436e-01 4.5097344205489076e-01 -1.1127473367121979e-01 + -3.1957520713357834e-01 4.6460974323379683e-01 -1.3042839548189231e-01 + -5.2819383077199444e-01 3.4667069378003740e-01 -2.0982244531422822e-01 + id 12630 + loc 1.5128922462463379e-01 8.0855917930603027e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7339099763069165e-01:3.5874120975976487e-01:2.0937335520147815e-01:4.2942255166057763e-01:9.3281676161432980e-01:3.7949298964717404e-01:1.3121944662338652e+00:4.3591210136622061e-01:1.9797092147185269e+00:2.9461029886368695e-01:2.3052993704489722e+00:4.1003381156869168e-01:2.9467411906816587e+00:4.2992260223718304e-01:3.1539824613554215e+00:4.7338626372071535e-01:3.9245782820272583e+00 + CVs 20 + -6.5343095456850797e-02 1.6088847820183819e-01 9.5174180642375400e-02 + -1.0268696319299964e-01 3.0509336477539334e-01 1.5604788722140495e-01 + -1.2491108739433200e-01 4.2240757854398137e-01 1.9590734425872716e-01 + -1.4591654404790652e-01 5.3201480291784420e-01 2.3385254521969720e-01 + -1.6131650653471119e-01 6.3434073382525802e-01 2.7286682542113427e-01 + -1.6539805772724206e-01 7.3090138978501462e-01 3.1609801385186898e-01 + -1.5404709569532912e-01 8.2412133019258027e-01 3.6221932992673511e-01 + -1.2698054636000317e-01 9.1598673540627351e-01 4.0510387618769933e-01 + -9.1162222099914744e-02 1.0114933110542785e+00 4.3946426292114898e-01 + -6.0997139647750498e-02 1.1201042390541485e+00 4.6492302075167263e-01 + -5.3384194717989428e-02 1.2498466756064757e+00 4.8361328458386194e-01 + -8.6471496087747901e-02 1.3982780605610652e+00 4.9477861882587665e-01 + -1.6898937206878828e-01 1.5494422096796963e+00 4.9349026945384322e-01 + -2.9245442676250827e-01 1.6795539612171293e+00 4.7432449525929732e-01 + -4.3957983408676160e-01 1.7704876576492408e+00 4.3662054624132407e-01 + -6.0341739038109155e-01 1.8287663510433525e+00 3.8363562028382592e-01 + -7.9673254639910107e-01 1.8620319515973334e+00 3.2103758126206194e-01 + -1.0391700641576980e+00 1.8521839848912303e+00 2.5854718961185352e-01 + -1.2817744478225526e+00 1.7719450699040169e+00 2.0831541305365542e-01 + id 12631 + loc 1.6631765663623810e-01 3.0422022938728333e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5048384034758748e-01:2.5023326261609397e-01:3.8149896414671147e-02:4.5047933550918401e-01:7.4347276479013180e-01:2.8932061956807570e-01:1.4733867644512215e+00:2.3803699255674182e-01:2.5194282545555917e+00:2.7328219149930111e-01:3.3861285141883313e+00 + CVs 20 + -1.5247935016262509e-01 2.9941076611468875e-01 -1.2679682854045649e-01 + -3.0055513584468191e-01 6.4408861849902943e-01 -2.2399772052729819e-01 + -4.3374192971183351e-01 1.0071054888125175e+00 -3.1347026124152461e-01 + -5.6489037363319938e-01 1.3706404191272969e+00 -4.0978272158225959e-01 + -7.1175510416933130e-01 1.7180679080359140e+00 -5.2315620273012353e-01 + -8.7726925406654688e-01 2.0250474370414486e+00 -6.6137238749594507e-01 + -1.0447952410942651e+00 2.2631518229391436e+00 -8.2398254944803284e-01 + -1.1876412676672714e+00 2.4175529971911121e+00 -9.9145593910237995e-01 + -1.3048405704068051e+00 2.5051825676905031e+00 -1.1509431403201109e+00 + -1.4230394329294558e+00 2.5383118880367972e+00 -1.3281968978115879e+00 + -1.5532590079048874e+00 2.5088174932917040e+00 -1.5423568779174457e+00 + -1.6931487772698097e+00 2.4162011064084403e+00 -1.7917397723067734e+00 + -1.8430900632605800e+00 2.2671112093196091e+00 -2.0412336288313750e+00 + -2.0290437529037302e+00 2.0748742482413718e+00 -2.2001826003612894e+00 + -2.2780263069545428e+00 1.8282294989737073e+00 -2.2052633682186609e+00 + -2.5509292575781863e+00 1.4580890397555910e+00 -2.0880902610954188e+00 + -2.7584256416983997e+00 9.2195891803701446e-01 -1.9644274070529630e+00 + -2.8642273259649298e+00 3.3521630805001934e-01 -2.0046319172821789e+00 + -2.9527581346383709e+00 5.1830114725277876e-02 -2.2902591936542085e+00 + id 12632 + loc 5.1538836956024170e-01 8.7604515254497528e-02 411 + blend 0.0000000000000000e+00 + interp 3.7096904198974312e-01:3.2907169392589791e-01:3.2892609319787047e-01:3.7096533229932321e-01:1.0294002974185956e+00:3.6699214147720188e-01:2.1042540507857517e+00:3.6862091543234066e-01:2.9236060588878443e+00:3.5669108143211414e-01:3.4239543659762472e+00 + CVs 20 + -6.7104051696333744e-01 2.8087286356741603e-01 4.2488845162042294e-02 + -1.2193638797941047e+00 4.7415550385249006e-01 6.8563888448029214e-02 + -1.7315332973908117e+00 6.2871315291967733e-01 4.8970553499225744e-02 + -2.2493099950838973e+00 7.5412774562538976e-01 -1.3837313427857878e-02 + -2.7653121241789771e+00 8.4474250567436815e-01 -1.1136053403483531e-01 + -3.2745718987465664e+00 8.9848691774805911e-01 -2.3207915787877392e-01 + -3.7722215176303719e+00 9.1253046639227042e-01 -3.6453516494996263e-01 + -4.2540820257233332e+00 8.8185203928079292e-01 -4.9786657016006941e-01 + -4.7222158424102982e+00 8.0118661424184157e-01 -6.1960352951616138e-01 + -5.1802445389292835e+00 6.6412635100511741e-01 -7.1708250766257475e-01 + -5.6182056779452250e+00 4.6815593614343842e-01 -7.8281319612785383e-01 + -6.0145056720321364e+00 2.2369334364241444e-01 -8.1662085501887249e-01 + -6.3589106089342824e+00 -5.1123973409297196e-02 -8.2178832813458413e-01 + -6.6590995676227163e+00 -3.4350699517307692e-01 -8.0182851966909774e-01 + -6.9243609952365297e+00 -6.4683736225445276e-01 -7.6158884944011696e-01 + -7.1599711035541391e+00 -9.5322004778493996e-01 -7.0621831068042240e-01 + -7.3699029841546055e+00 -1.2608330403815664e+00 -6.4107671637616703e-01 + -7.5507539583372818e+00 -1.5745596751963107e+00 -5.7606947841764344e-01 + -7.6472779896604273e+00 -1.7990606767165405e+00 -5.2012418298788854e-01 + id 12633 + loc 1.5894860029220581e-01 8.8287454843521118e-01 409 + blend 0.0000000000000000e+00 + interp 5.1321490339176412e-01:3.7820355547708900e-01:1.2692791661204450e-01:2.4004086712499523e-01:8.1969645580736761e-01:4.0298470766327810e-01:1.1434950439011360e+00:2.8803253725249367e-01:2.0243670615278351e+00:4.1319700819639926e-01:2.5649175072548913e+00:3.4459958793206308e-01:3.0650686943177412e+00:5.1320977124273026e-01:3.8174225631020193e+00 + CVs 20 + 6.4152286969054828e-01 2.0708255903924427e-01 -2.7999033393605949e-01 + 1.1626245757773030e+00 3.4306364908897641e-01 -5.3120503813860021e-01 + 1.6686241901802468e+00 4.6151168663604014e-01 -7.7643893800888197e-01 + 2.1796008016786610e+00 5.6171002512101764e-01 -1.0352639241113499e+00 + 2.6636475561891002e+00 6.1958788133284515e-01 -1.3240900116855605e+00 + 3.0930998672727390e+00 6.2792414512180739e-01 -1.6553563235329827e+00 + 3.4576450539352512e+00 5.9069571166775825e-01 -2.0330526195909382e+00 + 3.7679058861565000e+00 5.1126253826192536e-01 -2.4593741612744311e+00 + 4.0452042284932066e+00 3.8026878079054560e-01 -2.9381161161917095e+00 + 4.3098967804923127e+00 1.6879730947508897e-01 -3.4653805258059860e+00 + 4.5819756487705092e+00 -1.5666659194122001e-01 -4.0136357023090019e+00 + 4.8656119694756992e+00 -5.7840089610780776e-01 -4.5427732282089419e+00 + 5.1643586619427087e+00 -1.0101396538934635e+00 -5.0381262450555875e+00 + 5.4868172072442603e+00 -1.3753674871750690e+00 -5.5058435793417697e+00 + 5.8346733541850728e+00 -1.6579421140082884e+00 -5.9481371814717825e+00 + 6.2091323011880633e+00 -1.9177251793028653e+00 -6.3840348381183887e+00 + 6.6128150784420141e+00 -2.2326950419994596e+00 -6.8353575314245214e+00 + 7.0278493230114103e+00 -2.6271679961244856e+00 -7.2815915675045320e+00 + 7.4028715278216390e+00 -3.1093801545646573e+00 -7.7341322689050171e+00 + id 12634 + loc 5.6291347742080688e-01 3.1865438818931580e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6046281918946647e-01:3.8964481841676929e-01:3.3890585438142362e-01:4.6045821456127461e-01:9.2683753412513714e-01:4.0421140224430724e-01:1.1343845463633795e+00:3.0778659761622651e-01:1.9470925876014691e+00:3.8403897248546109e-01:2.7890869802864580e+00:3.4948870444584440e-01:3.2553765641674310e+00:2.6134359933926249e-01:3.9644451381011478e+00 + CVs 20 + -6.4765896341861348e-02 3.0022115074520933e-01 2.0130092816228035e-01 + -1.4826389377077587e-01 6.0346085817105688e-01 4.1160556807135207e-01 + -2.2490897684653607e-01 9.1027856119666961e-01 6.2890892603503312e-01 + -2.8070414376635144e-01 1.2142342219879949e+00 8.5408416269640064e-01 + -3.1265933064067736e-01 1.5052268437718483e+00 1.0903733467179004e+00 + -3.2023143329920040e-01 1.7699278313930815e+00 1.3414184883319074e+00 + -3.0798784106737248e-01 1.9936671616941610e+00 1.6134771020879466e+00 + -2.8380999431520088e-01 2.1641222204192365e+00 1.9074071134040320e+00 + -2.5748741387992813e-01 2.2728638353274384e+00 2.2152552953735416e+00 + -2.4138115395872273e-01 2.3088947106039135e+00 2.5311084834047364e+00 + -2.4855306287272416e-01 2.2550952081119569e+00 2.8532365384563496e+00 + -2.8884701036671689e-01 2.1066270434145529e+00 3.1750696605930058e+00 + -3.6373024901635265e-01 1.8920278007277840e+00 3.4814605982130082e+00 + -4.5605798323295416e-01 1.6598744846254538e+00 3.7520849484268499e+00 + -5.4033785752039332e-01 1.4369384523394388e+00 3.9767610079944560e+00 + -6.0504887165626842e-01 1.2183794492706703e+00 4.1633291244906010e+00 + -6.4444771111557109e-01 9.9922760011745426e-01 4.3314447304661323e+00 + -6.4020362114858576e-01 7.7643781107660725e-01 4.5324360732906754e+00 + -5.3828029628018881e-01 5.2715661424991445e-01 4.8792028457829444e+00 + id 12635 + loc 6.0412812232971191e-01 1.3383752107620239e-01 413 + blend 0.0000000000000000e+00 + interp 4.5829421931646608e-01:3.7358925476206145e-01:3.8485131361237168e-01:2.9437814101590282e-01:1.0010021184144213e+00:3.7655214117014763e-01:1.6249494621360139e+00:2.6768671668671568e-01:2.1714028080433678e+00:4.0163334968424391e-01:2.9449478100770361e+00:4.5828963637427295e-01:3.1832359756509869e+00:3.6756890658133140e-01:3.7801167810918876e+00 + CVs 20 + -9.9391473188406465e-01 1.1409115669959356e-01 2.0741753188248377e-01 + -1.6300456114384725e+00 9.9543389848412461e-02 3.4998640560071204e-01 + -2.1859879700944282e+00 3.6131682284999966e-02 4.4649450631898085e-01 + -2.7712866601844026e+00 -2.3557111624268989e-02 4.9232234128544095e-01 + -3.3767867305404549e+00 -8.6714329735413931e-02 4.8235821154587333e-01 + -3.9949132307067852e+00 -1.6296913706998661e-01 4.2017919898027523e-01 + -4.6189602749587673e+00 -2.6330246057814477e-01 3.1809279537974711e-01 + -5.2415930161959139e+00 -4.0020799754230230e-01 1.9056467689349610e-01 + -5.8549751748898098e+00 -5.8943205852457436e-01 4.6608891408731701e-02 + -6.4495729186981210e+00 -8.4770555468704600e-01 -1.1050625819147830e-01 + -7.0097560759442823e+00 -1.1879725219128203e+00 -2.7550880790941873e-01 + -7.5137556143786046e+00 -1.6125954949203587e+00 -4.3198928883290300e-01 + -7.9446390815890213e+00 -2.1078790498736453e+00 -5.6997849208871210e-01 + -8.2987919080312746e+00 -2.6563440077601532e+00 -6.8568290466933490e-01 + -8.5779698847224513e+00 -3.2452525619952723e+00 -7.7068983610872932e-01 + -8.7800719543509302e+00 -3.8589145341420092e+00 -8.1507085902314824e-01 + -8.9021966512837203e+00 -4.4783882494199272e+00 -8.1631714998204674e-01 + -8.9504946020746363e+00 -5.0935020858464739e+00 -7.7281564448117390e-01 + -9.0411184677351724e+00 -5.6382192315235509e+00 -6.8520265242094647e-01 + id 12636 + loc 3.3015692234039307e-01 3.7958565354347229e-01 403 + blend 0.0000000000000000e+00 + interp 4.5413159635389133e-01:2.7729501626992631e-01:9.7262206821309705e-02:2.6436691131339396e-01:1.1541382655228825e+00:4.4407906348580062e-01:1.9677704725642644e+00:3.9447395680463598e-01:2.2303870123825438e+00:4.5412705503792783e-01:2.9926527746384308e+00:2.7796765038980675e-01:3.3284745797120516e+00 + CVs 20 + -1.0524115563713740e-01 1.7537133986883169e-01 7.3992888316748745e-02 + -1.9931632192358584e-01 3.8046594697679437e-01 1.2224820238191686e-01 + -2.9555144993521665e-01 6.0174689495407607e-01 1.8287694771414303e-01 + -3.9548460839315525e-01 8.2670140345837129e-01 2.6937425355065575e-01 + -5.0168556112364993e-01 1.0507949648178279e+00 3.8897697214196636e-01 + -6.1360926761873003e-01 1.2680272076149532e+00 5.4740878986614327e-01 + -7.2646319856764285e-01 1.4729100747169137e+00 7.4662201946493001e-01 + -8.3437779268797130e-01 1.6630137146487498e+00 9.8407570913033071e-01 + -9.3471946112599125e-01 1.8384926205289984e+00 1.2572480827829620e+00 + -1.0275818944089512e+00 1.9979326610879409e+00 1.5679969498674671e+00 + -1.1118040564276825e+00 2.1365721010613172e+00 1.9190198140744337e+00 + -1.1838420393232318e+00 2.2485506301823488e+00 2.3094798900169167e+00 + -1.2376679003839395e+00 2.3280919565293128e+00 2.7361013485717560e+00 + -1.2637453275707822e+00 2.3698786496945372e+00 3.1936385054180016e+00 + -1.2504535019669938e+00 2.3712448510663271e+00 3.6726182889380019e+00 + -1.1905463541118866e+00 2.3280060736441470e+00 4.1628396562078471e+00 + -1.0902263871937465e+00 2.2356237997093515e+00 4.6502949729335787e+00 + -9.6759097347585032e-01 2.1003601270295937e+00 5.1156544028595343e+00 + -1.0078422761389199e+00 2.0600569681304224e+00 5.4702215774556073e+00 + id 12637 + loc 8.6084753274917603e-01 4.0690246224403381e-01 406 + blend 0.0000000000000000e+00 + interp 3.3835343498835152e-01:3.2992992595241327e-01:1.2788605222557736e-01:2.2988411029344180e-01:1.2655637588878914e+00:3.2451295507008571e-01:1.9764483802206154e+00:3.3835005145400165e-01:2.6998225155159963e+00:3.2035561897259296e-01:3.2808471442039182e+00 + CVs 20 + -2.0864997452805556e-01 1.7118518206574046e-01 4.6540828729970431e-02 + -3.3154364502075867e-01 2.8426596351332695e-01 7.5978937348585934e-02 + -4.0518757935339289e-01 3.6613278311758157e-01 9.2783509864191524e-02 + -4.7525453203594042e-01 4.5305721681187766e-01 1.0975311826533228e-01 + -5.4538889430331916e-01 5.4761023728209723e-01 1.2547626887761193e-01 + -6.1968272358826870e-01 6.5109284333573580e-01 1.3862303248653790e-01 + -7.0241775484658242e-01 7.6446126587005925e-01 1.4859409145872476e-01 + -7.9730125777134098e-01 8.8737304993673516e-01 1.5564071854432682e-01 + -9.0568512429301040e-01 1.0192120871816448e+00 1.5904355965137290e-01 + -1.0271439164569327e+00 1.1607290179406762e+00 1.5455990810843123e-01 + -1.1637149720137066e+00 1.3125147196975004e+00 1.3725569944864097e-01 + -1.3203607886443329e+00 1.4717477712235163e+00 1.0793361262540790e-01 + -1.4992445855190044e+00 1.6328608665028341e+00 7.4145230259338835e-02 + -1.6968591204442567e+00 1.7920328662778866e+00 4.1815656901373011e-02 + -1.9089413149106640e+00 1.9482902331548608e+00 8.4613509698530098e-03 + -2.1338427359033680e+00 2.1004226518770786e+00 -3.1124681065552884e-02 + -2.3711288970054620e+00 2.2462514954707342e+00 -7.5320531198032947e-02 + -2.6187711129420657e+00 2.3838589554157874e+00 -1.1531407708113561e-01 + -2.7880237227926234e+00 2.5066301890540892e+00 -1.4566270522076075e-01 + id 12638 + loc 5.6912469863891602e-01 9.6343749761581421e-01 263 + blend 0.0000000000000000e+00 + interp 4.3566168305206210e-01:4.3565732643523158e-01:5.3171446844460801e-01:2.7531071053212980e-01:1.2293290641047110e+00:4.1584410740546163e-01:2.3550895197852242e+00:3.7549644719366071e-01:3.1100830798989709e+00:3.9181236712537260e-01:3.9834350745398703e+00 + CVs 20 + -7.1806421563671241e-01 4.2757357410558294e-01 -1.4839033740052776e-01 + -1.3692948032392345e+00 7.2730501959428695e-01 -2.1214171950389538e-01 + -2.0506110832609541e+00 9.2430586497317513e-01 -2.5055339487028289e-01 + -2.7570092139183986e+00 1.0757946293113023e+00 -3.5035410871976036e-01 + -3.3662881880296709e+00 1.2298569998063225e+00 -6.3291681377279752e-01 + -3.6891432832962865e+00 1.3573034190297015e+00 -1.1474930583854723e+00 + -3.6463414176312439e+00 1.3784959481334518e+00 -1.7426646119722928e+00 + -3.3267865807614636e+00 1.2674579776160559e+00 -2.2900100703271806e+00 + -2.8242585452831754e+00 1.0149886749513350e+00 -2.7325176650901857e+00 + -2.2394628839278270e+00 6.1618818765974548e-01 -3.0231458373041318e+00 + -1.6613345227756626e+00 8.7934061619021953e-02 -3.1401671495362531e+00 + -1.1031669430337356e+00 -5.2751762686779191e-01 -3.0933998006168810e+00 + -4.6818848913839994e-01 -1.1637984402550736e+00 -2.9186959135740294e+00 + 4.4840118912210669e-01 -1.7041557708693011e+00 -2.7187729768934439e+00 + 1.7048542568069718e+00 -1.8681372934358795e+00 -2.7224473323851077e+00 + 3.0145291079891838e+00 -1.4896217335658433e+00 -3.0693538167499259e+00 + 4.1299318698466818e+00 -6.3794929262009670e-01 -3.7562564054420413e+00 + 4.8823078560372890e+00 4.4714891832846537e-01 -4.6317403914699327e+00 + 5.4843828121818161e+00 1.3745085927648197e+00 -5.3246207492964288e+00 + id 12639 + loc 1.7222234606742859e-01 3.7662309408187866e-01 1076 + blend 0.0000000000000000e+00 + interp 3.4358699199089687e-01:2.5654868248025203e-01:3.8024483047886193e-02:3.1406282475305575e-01:9.6283328720312056e-01:2.6106846237994386e-01:2.0014358951786075e+00:3.4358355612097696e-01:2.6370908110048763e+00:3.3755127708865101e-01:3.2129268385379381e+00 + CVs 20 + -5.4695422566377716e-02 3.4809378824146298e-01 -6.4424351961870630e-02 + -1.4762165460658244e-01 6.7179871803843927e-01 -1.6980784804320165e-01 + -2.6472298956496448e-01 9.7505368558761596e-01 -2.8082714705626960e-01 + -4.0024328552213367e-01 1.2577864917127983e+00 -3.7938451771088011e-01 + -5.5593338466942255e-01 1.5143364420236449e+00 -4.6455045916378057e-01 + -7.3177309960813974e-01 1.7380746652358703e+00 -5.3861162147003705e-01 + -9.2498635809072594e-01 1.9197346210449049e+00 -6.0403847827688972e-01 + -1.1280713852277904e+00 2.0497369158839183e+00 -6.5737951644280646e-01 + -1.3308595439637214e+00 2.1240398325347951e+00 -6.9099792537690929e-01 + -1.5271987319554086e+00 2.1455796900921480e+00 -7.0121287730747983e-01 + -1.7154690457414978e+00 2.1192280695374652e+00 -6.8910850497582765e-01 + -1.8944664972406966e+00 2.0492925136025644e+00 -6.5579530582197609e-01 + -2.0620582465190709e+00 1.9424952616836766e+00 -5.9969970353164115e-01 + -2.2119942967662771e+00 1.8181223046100934e+00 -5.1532343723236740e-01 + -2.3324045771953705e+00 1.7129261231400221e+00 -3.9787455447450165e-01 + -2.4167358543912045e+00 1.6528660143502667e+00 -2.5254712716253652e-01 + -2.4673827051105643e+00 1.6402058605710259e+00 -8.9839308662049533e-02 + -2.5059858049739758e+00 1.6524047050628528e+00 9.8615916844386337e-02 + -2.6592570746653470e+00 1.5272312637702421e+00 4.7910861886983691e-01 + id 12640 + loc 3.3049967885017395e-01 7.8541111946105957e-01 372 + blend 0.0000000000000000e+00 + interp 4.0055967833977457e-01:3.2478839149267441e-01:5.4907984834662971e-02:4.0055567274299120e-01:8.6998543640375936e-01:3.5743396804443484e-01:1.4087084988339165e+00:3.8088754034444849e-01:2.0622450864823785e+00:3.2608006311511911e-01:2.9199706727686614e+00:3.2677666372255920e-01:3.5572023818678864e+00 + CVs 20 + -3.0017516401458377e-01 6.7885733867468256e-01 -2.7126037573782413e-01 + -5.9708793640177760e-01 1.3436579621063229e+00 -5.5226778398184539e-01 + -8.2822984758893070e-01 1.9421006308310718e+00 -8.7075781737068314e-01 + -8.7843343460819401e-01 2.3981448284860365e+00 -1.2211964973337179e+00 + -7.1846560140183646e-01 2.6537605819280019e+00 -1.5561352715927377e+00 + -4.2024154289048932e-01 2.7360242217814470e+00 -1.8566881260205876e+00 + -3.0923003567384200e-02 2.6716008783317289e+00 -2.1222934317176279e+00 + 4.2114993578505810e-01 2.4647822644683233e+00 -2.3406444910990714e+00 + 8.8861877635564912e-01 2.1246498572435408e+00 -2.4853682679580520e+00 + 1.3172950148968607e+00 1.6797216032726783e+00 -2.5362485899769274e+00 + 1.6801510443564975e+00 1.1553417403994175e+00 -2.4872791213469894e+00 + 1.9845813830424357e+00 5.5835186325716379e-01 -2.3349086183164651e+00 + 2.2900652888631430e+00 -1.0169303556341591e-01 -2.0698003112558228e+00 + 2.7431273477293248e+00 -7.7521153994105585e-01 -1.7060913043224772e+00 + 3.5375496510619922e+00 -1.2995192289847215e+00 -1.3852532121625267e+00 + 4.6235520053051493e+00 -1.4279592261983329e+00 -1.3641264688165304e+00 + 5.7277290742238289e+00 -1.1086946197866641e+00 -1.7414316878878953e+00 + 6.6108518648182422e+00 -4.7669041717722171e-01 -2.4336865018145408e+00 + 7.3314689776143753e+00 1.2590392130505856e-01 -3.1812386317768828e+00 + id 12641 + loc 7.6558077335357666e-01 6.5841600298881531e-02 1080 + blend 0.0000000000000000e+00 + interp 5.3354056621044077e-01:4.3125222254975865e-01:4.9293585576944365e-01:2.7182239849270107e-01:9.8240962784475716e-01:3.0962983873122479e-01:1.4718870700358182e+00:5.3353523080477872e-01:1.9894870013037980e+00:2.9321678081454078e-01:2.9315827406138872e+00:3.2218287477265123e-01:3.6905551940319667e+00 + CVs 20 + -1.3116902809422229e-01 4.1547911984037644e-01 -3.2291168679001231e-01 + -2.6759583247559010e-01 7.1473630261968668e-01 -4.9809524507478842e-01 + -4.1773088975529782e-01 9.7788390613852683e-01 -6.3019442182399099e-01 + -5.7940530446616378e-01 1.2247992458651493e+00 -7.5834323326857256e-01 + -7.5004062086405776e-01 1.4468205426859475e+00 -8.7437677057784247e-01 + -9.1855766823196972e-01 1.6307919795514483e+00 -9.7007206686295389e-01 + -1.0659482228064452e+00 1.7644761436105172e+00 -1.0395115300328714e+00 + -1.1688603371170041e+00 1.8454765747867174e+00 -1.0889865060128252e+00 + -1.2094671337950218e+00 1.8911586927951578e+00 -1.1407368836528113e+00 + -1.2040679597828117e+00 1.9359583520671064e+00 -1.2080165476646261e+00 + -1.2000307461470345e+00 1.9868199191908049e+00 -1.2647057094363316e+00 + -1.2172952830500525e+00 2.0090980020805760e+00 -1.2772778679490422e+00 + -1.2412228341781870e+00 1.9743543376854262e+00 -1.2392480562592474e+00 + -1.2529835153110676e+00 1.8787733363169523e+00 -1.1593773157914895e+00 + -1.2395124296559603e+00 1.7468966080151997e+00 -1.0501793713193126e+00 + -1.1949271697859136e+00 1.6353698560038596e+00 -9.2197848468285881e-01 + -1.1318762828705595e+00 1.5503289537923663e+00 -7.7533946483434202e-01 + -1.0689247946336897e+00 1.3685501369164745e+00 -6.7575420510252315e-01 + -9.9973833095391307e-01 9.7887993280556818e-01 -7.5297423900750016e-01 + id 12642 + loc 9.8494541645050049e-01 9.3070179224014282e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4969976948443244e-01:5.4969427248673763e-01:1.2585325704117079e-01:3.1515750336749071e-01:9.8334405248518708e-01:4.5754334794576662e-01:1.7828454280779498e+00:2.6684392138844809e-01:2.1297127264360478e+00:2.7464033498527862e-01:3.0334140638302962e+00:3.9830074973816160e-01:3.8400037188952991e+00 + CVs 20 + 1.6573317110323960e-01 4.7331165429041910e-01 2.5085840013562027e-01 + 3.6566799190898680e-01 8.4991887671252475e-01 3.6517509531576575e-01 + 5.8897730692658357e-01 1.1865352330948851e+00 4.2487241443451235e-01 + 8.2925224020501132e-01 1.4930182661902114e+00 4.5193013973556584e-01 + 1.0783254850773609e+00 1.7523259602440346e+00 4.3607602983626637e-01 + 1.3171322525642282e+00 1.9351177378767976e+00 3.6399044588987883e-01 + 1.5136194773749703e+00 2.0068584959263740e+00 2.3345602993915693e-01 + 1.6287094861012728e+00 1.9477461483004048e+00 7.2431862565907390e-02 + 1.6290190980024124e+00 1.7699088528632685e+00 -6.1981784268815954e-02 + 1.5152909501138074e+00 1.5303594406429615e+00 -1.1370147020861915e-01 + 1.3378989284341598e+00 1.3011389108687168e+00 -7.9645193759742772e-02 + 1.1523853407841285e+00 1.1092140324533251e+00 -7.0065401899869761e-03 + 9.8220168551183185e-01 9.3756026827693528e-01 6.1089671432007941e-02 + 8.2673595811967837e-01 7.6181503944055362e-01 1.1130483572095326e-01 + 6.7468247095541189e-01 5.7736949314758623e-01 1.6844081123841406e-01 + 5.0395417967733502e-01 4.3961999450128342e-01 3.1454994419879767e-01 + 2.9734416370797734e-01 4.8169179599476147e-01 5.9984631375013442e-01 + 8.0444382434333911e-02 6.4844699886703117e-01 8.5191665819651663e-01 + -9.6238833600156865e-02 3.3103699240668988e-01 9.4526051810365530e-01 + id 12643 + loc 7.3515820503234863e-01 9.2780977487564087e-02 1078 + blend 0.0000000000000000e+00 + interp 4.4499922007660275e-01:4.4499477008440202e-01:1.7199099804869322e-01:4.0330605687255688e-01:7.9443188168058032e-01:3.0359370096698657e-01:1.1024732153360084e+00:3.8468929872711033e-01:1.9952793322954636e+00:4.0413758703779878e-01:2.7025371503880069e+00:3.9817847613541490e-01:3.0376474957846216e+00:2.6825918923746939e-01:3.8352325472134279e+00 + CVs 20 + -1.2256057296483075e-01 2.8710470693692325e-01 5.4742830140967549e-02 + -2.4985571461518752e-01 5.8723460211448142e-01 1.2550310036162468e-01 + -3.9862632590327873e-01 8.9070148034967822e-01 2.2475908415299656e-01 + -5.7709057791156626e-01 1.1828272779440463e+00 3.6177703294358765e-01 + -7.8613676254289899e-01 1.4451342986035640e+00 5.4294106063437786e-01 + -1.0204479578444103e+00 1.6519032973751981e+00 7.7211109449777005e-01 + -1.2656540345359379e+00 1.7753264909853863e+00 1.0451032881993667e+00 + -1.5007309553419343e+00 1.7986449560157953e+00 1.3461840025941409e+00 + -1.7046549827375030e+00 1.7203343988138802e+00 1.6525763453616722e+00 + -1.8616722495843443e+00 1.5501892343352277e+00 1.9402041647702850e+00 + -1.9633739693002665e+00 1.3063368375436182e+00 2.1892622360075271e+00 + -2.0084218755996295e+00 1.0103638266098256e+00 2.3869663279402826e+00 + -2.0012873027833571e+00 6.8284567392206275e-01 2.5275206484581378e+00 + -1.9503749083066255e+00 3.4037191722293314e-01 2.6094186283318299e+00 + -1.8644682061318860e+00 -2.3887484264704106e-03 2.6240148283401563e+00 + -1.7387154336254760e+00 -3.0648208727253667e-01 2.5225300253483702e+00 + -1.5365502194966048e+00 -4.2492336809212539e-01 2.2055708143955135e+00 + -1.2316938053574655e+00 -1.0580616281089950e-01 1.7793775927549376e+00 + -1.1093514435121399e+00 -3.5062711703544458e-01 1.6154393311674895e+00 + id 12644 + loc 7.1991384029388428e-01 3.0354019999504089e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2924103950400544e-01:2.5421011027974244e-01:4.3062935793288548e-01:2.8925306670851991e-01:1.1399912297891306e+00:2.8014783656949444e-01:1.9931168797790813e+00:2.5796247306997727e-01:2.6651485514155069e+00:2.9950167831866409e-01:3.1859251862439186e+00:4.2923674709361043e-01:3.9996072477386444e+00 + CVs 20 + 3.0672180059125287e-01 3.3673011804697384e-01 -1.7977666027604272e-01 + 5.8078897710887512e-01 6.3729480820617768e-01 -3.6207663146939761e-01 + 8.3800155190877978e-01 9.2089182693079652e-01 -5.6876079649981870e-01 + 1.1080705970905789e+00 1.1966878432824444e+00 -7.8289418209812767e-01 + 1.4199040707397941e+00 1.4632895253542102e+00 -9.6403433396745386e-01 + 1.7840177266522113e+00 1.7108838371189352e+00 -1.0818601797616796e+00 + 2.1922407351441247e+00 1.9239049941420532e+00 -1.1176023904037593e+00 + 2.6232504172678262e+00 2.0807632136326255e+00 -1.0523644941380363e+00 + 3.0320808267519328e+00 2.1511171169889320e+00 -8.7421479368390331e-01 + 3.3600872862395268e+00 2.1145268363878373e+00 -6.0833896731167436e-01 + 3.5719693057784547e+00 1.9814668100497896e+00 -3.2110818669354568e-01 + 3.6677947996916216e+00 1.7869145052174109e+00 -9.0761825978250998e-02 + 3.6803653724610572e+00 1.5495094096185564e+00 5.6268371249701188e-02 + 3.6459323423258065e+00 1.2050269024527291e+00 1.6926816677404233e-01 + 3.5503308468287900e+00 7.0460088297497969e-01 3.0715366920313558e-01 + 3.3517605436465709e+00 1.1820747790098182e-01 5.5794113354317565e-01 + 3.0428650578782119e+00 -4.1408198396499152e-01 1.0203567128357309e+00 + 2.6635952925305828e+00 -7.3696243455987409e-01 1.6509039284876548e+00 + 2.3322668676750813e+00 -9.9392393576092908e-01 2.0460277795339739e+00 + id 12645 + loc 6.6402092576026917e-02 6.1011338233947754e-01 417 + blend 0.0000000000000000e+00 + interp 4.9807009139204350e-01:3.3939571498971716e-01:7.5407276332402096e-01:4.3301737616193942e-01:1.1640548221919316e+00:4.9806511069112963e-01:1.6548535096139152e+00:3.3934651367558227e-01:2.0447419182009403e+00:2.9271518633713567e-01:3.0000061093538699e+00:2.6442880196294882e-01:3.8931855733091192e+00 + CVs 20 + -1.6269192476389141e-01 1.9761855349037169e-01 -1.6563065981655728e-01 + -2.6335516292535399e-01 3.5433121480577184e-01 -2.6491906116468394e-01 + -3.4621870393389598e-01 4.8873833591390065e-01 -3.4701969265011279e-01 + -4.3853526742640192e-01 6.1934948745245755e-01 -4.3752055606656515e-01 + -5.4162078898029520e-01 7.4431061261509779e-01 -5.4075953619604866e-01 + -6.5595601805147230e-01 8.6043324808715682e-01 -6.6127939011921222e-01 + -7.8064236077481663e-01 9.6378535331245929e-01 -8.0283697702073331e-01 + -9.1300910528794232e-01 1.0507925801729656e+00 -9.6685108560978428e-01 + -1.0492703360903781e+00 1.1182281401079597e+00 -1.1526226010427538e+00 + -1.1876505273562230e+00 1.1610666478908771e+00 -1.3587453614220930e+00 + -1.3307336563635150e+00 1.1727471063835624e+00 -1.5820392363132265e+00 + -1.4821524475055026e+00 1.1507500915634155e+00 -1.8161279883271761e+00 + -1.6421140892077035e+00 1.0985544329202197e+00 -2.0543248216807743e+00 + -1.8067760611725405e+00 1.0202371606081666e+00 -2.2925707458763100e+00 + -1.9700175219449103e+00 9.1648570656685990e-01 -2.5292330074449159e+00 + -2.1251672284677365e+00 7.8404974058657428e-01 -2.7642426867100696e+00 + -2.2627729598062394e+00 6.1817407705047445e-01 -2.9995454308770113e+00 + -2.3688044371153349e+00 4.1692648183629699e-01 -3.2376822483130199e+00 + -2.4947027573938549e+00 2.5618564662289822e-01 -3.4586745609521063e+00 + id 12646 + loc 3.6029842495918274e-01 7.2643823921680450e-02 409 + blend 0.0000000000000000e+00 + interp 4.9843644323665415e-01:3.9291480536857648e-01:2.1922707005298081e-02:4.9843145887222179e-01:6.6158259973083111e-01:4.5728908248223471e-01:1.0455131953286925e+00:3.8345543548936223e-01:1.8040881813503753e+00:3.7562000589889838e-01:2.5942934410217973e+00:3.2711497470811185e-01:3.5031984885585477e+00 + CVs 20 + -1.8626034110533612e-01 1.8411266027656506e-01 -2.5563267863326666e-01 + -3.7535458385038623e-01 3.5778762063481356e-01 -4.9231087211561542e-01 + -5.5978491445827372e-01 5.3591005276218162e-01 -7.4070843047879409e-01 + -7.3489996152071835e-01 7.2291030306195014e-01 -1.0107890637055525e+00 + -9.0306867336418128e-01 9.1552512729697422e-01 -1.3017714207579221e+00 + -1.0643118149875663e+00 1.1141502152557801e+00 -1.6153994561440612e+00 + -1.2141368787015989e+00 1.3232001813646623e+00 -1.9590566554279234e+00 + -1.3457316368841381e+00 1.5420621896261286e+00 -2.3472426194609444e+00 + -1.4507417093607489e+00 1.7567498620624988e+00 -2.7920776583531963e+00 + -1.5213226415781800e+00 1.9456229579330269e+00 -3.2943284239173343e+00 + -1.5524965386112541e+00 2.0876629383081466e+00 -3.8478577693322498e+00 + -1.5434494319280048e+00 2.1610930388307552e+00 -4.4454106142839214e+00 + -1.4958209202560955e+00 2.1419113620262915e+00 -5.0753954503388838e+00 + -1.4083965706120418e+00 2.0101333024698200e+00 -5.7156818372328626e+00 + -1.2770543883723300e+00 1.7547059270525653e+00 -6.3359090777089317e+00 + -1.0998129800912719e+00 1.3718497534492253e+00 -6.9028175004038594e+00 + -8.8608771557916788e-01 8.7074721218142503e-01 -7.3778095890595541e+00 + -6.7259533707793606e-01 3.0567904390672229e-01 -7.7197525865152379e+00 + -6.2257066819546836e-01 -1.2342489967509529e-02 -7.8739152870876943e+00 + id 12647 + loc 3.3643476665019989e-02 1.6981753706932068e-01 411 + blend 0.0000000000000000e+00 + interp 4.3814770578333556e-01:3.2464078931982354e-01:3.4854076689572189e-05:3.3945981399895575e-01:7.4789200393774835e-01:4.2348463903987549e-01:1.0324338601604912e+00:4.3814332430627773e-01:1.6611149846289446e+00:2.7749983552862534e-01:2.1751251898216459e+00:3.9839816531162331e-01:2.8146367323177155e+00:3.2920324748049451e-01:3.3842328557698922e+00 + CVs 20 + -2.3479894717850380e-01 2.7991307778230934e-01 -6.4167939048314626e-01 + -4.5035188431766965e-01 4.7532910135095852e-01 -1.1239558894945676e+00 + -6.6847580536665796e-01 6.6133568962106404e-01 -1.6087301021847673e+00 + -9.0251627813747659e-01 8.5078216769148296e-01 -2.1524716050812214e+00 + -1.1726461632794918e+00 9.9972784507719270e-01 -2.7365988784082549e+00 + -1.5051119024688835e+00 1.0563938664759771e+00 -3.3303231140633933e+00 + -1.9208308482797498e+00 9.7484024036202466e-01 -3.9018128535575611e+00 + -2.4135308511993530e+00 7.1717157589950453e-01 -4.4233880644034418e+00 + -2.9345077234339469e+00 2.5462964947156896e-01 -4.8749963295488632e+00 + -3.3931536619411267e+00 -4.1610779485853566e-01 -5.2299868925305368e+00 + -3.6995091795913830e+00 -1.2280214276524284e+00 -5.4635825129834936e+00 + -3.8707725346170174e+00 -2.0557143177237398e+00 -5.6021367244840832e+00 + -4.0190345322901839e+00 -2.8203999082268725e+00 -5.7131994105578965e+00 + -4.2229130390196588e+00 -3.4903527510981283e+00 -5.8507241210673291e+00 + -4.4833151928892159e+00 -4.0438861844363778e+00 -6.0421234442951040e+00 + -4.7395601690078957e+00 -4.4809084761457649e+00 -6.2915395825167941e+00 + -4.9456230328771458e+00 -4.8129567593602918e+00 -6.5876646585837655e+00 + -5.1210096976055874e+00 -5.0623519841621523e+00 -6.9145790038133779e+00 + -5.3277576083162081e+00 -5.3009236478918460e+00 -7.2626275003127940e+00 + id 12648 + loc 1.1223603039979935e-01 3.7432956695556641e-01 406 + blend 0.0000000000000000e+00 + interp 6.1989180640520525e-01:3.6111645054106239e-01:2.1885957818094437e-02:4.6824080398875140e-01:7.0276255266244658e-01:3.7577743601580110e-01:1.0025884498689621e+00:6.1988560748714128e-01:1.6798398477626035e+00:5.8191237171968480e-01:1.9954379229952779e+00:4.0056069340411138e-01:2.2405418557889294e+00:3.4169949347866285e-01:2.9363586442588741e+00:4.8627917867549747e-01:3.3961591346826805e+00 + CVs 20 + -8.3888988052785954e-02 9.0554509814617379e-02 -6.2536376539751998e-04 + -1.2040429173543535e-01 1.1714390302418907e-01 2.4456130159460521e-02 + -1.3491156914260569e-01 1.3203433425536149e-01 8.1811112428116145e-02 + -1.3771521450922247e-01 1.4383049100621545e-01 1.2631355513306633e-01 + -1.3107847888993088e-01 1.5277431144042516e-01 1.5145651889083989e-01 + -1.1979380435488407e-01 1.5980701794514518e-01 1.5128869098753847e-01 + -1.1267371530292623e-01 1.6705461953714046e-01 1.2034193743038703e-01 + -1.2358387198496129e-01 1.7852451028710581e-01 5.7084398557574079e-02 + -1.6961180956765309e-01 2.0032042150497656e-01 -3.1486614888879050e-02 + -2.6309976144016284e-01 2.3943498730890966e-01 -1.2528210208614735e-01 + -4.0483439201603316e-01 3.0031315397738229e-01 -1.9573126564005977e-01 + -5.8000851611713344e-01 3.8467906522905670e-01 -2.1617664130218728e-01 + -7.5241872227893902e-01 4.8363757655728523e-01 -1.7121999262164739e-01 + -8.8507651932225107e-01 5.6354269902027632e-01 -6.5134803704812838e-02 + -9.6858595848732310e-01 5.7503335740229189e-01 9.3923827853000352e-02 + -9.9098869577747495e-01 4.8434953194275238e-01 3.0234435430901740e-01 + -9.1253669811551219e-01 3.2372367633523291e-01 5.2696549483516031e-01 + -7.2988294379957952e-01 1.7679269767806693e-01 7.1131748480415435e-01 + -6.0527671962105023e-01 1.7592895020596422e-01 7.5494575792097041e-01 + id 12649 + loc 7.1348869800567627e-01 7.0058155059814453e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5504987553678861e-01:2.4748073366809525e-01:6.8930240290182243e-02:3.7646119285373419e-01:9.6021060846691630e-01:4.5504532503803324e-01:1.5424030060480960e+00:3.7548547021944889e-01:2.0709651800294777e+00:4.4488127402841704e-01:2.5882982318415384e+00:3.7116422149503286e-01:2.9953945578726757e+00:3.9745397837545143e-01:3.7948688169588549e+00 + CVs 20 + 1.6067091238483591e-01 3.8432131830062416e-01 -3.2058315562258249e-01 + 3.4531679050290548e-01 7.3985543256734321e-01 -6.3733489098203566e-01 + 5.5028340372722351e-01 1.0568084076521089e+00 -9.5050815550587264e-01 + 7.7146789517252845e-01 1.3211543347444765e+00 -1.2594414771272873e+00 + 1.0025568420400743e+00 1.5166106999902367e+00 -1.5613465362864150e+00 + 1.2340632263190447e+00 1.6347743704560651e+00 -1.8511426018431516e+00 + 1.4604835471970932e+00 1.6855248928097311e+00 -2.1256813149449254e+00 + 1.6773745522021002e+00 1.6858114164649760e+00 -2.3804595457293094e+00 + 1.8781236522818421e+00 1.6511254053578548e+00 -2.6107683462894924e+00 + 2.0617415503759227e+00 1.5954446488961758e+00 -2.8274705663262818e+00 + 2.2382385222527428e+00 1.5259113160034508e+00 -3.0597988741808000e+00 + 2.4198085429391343e+00 1.4429459923008090e+00 -3.3374616555489331e+00 + 2.6046236078721985e+00 1.3514677495129392e+00 -3.6722010579074609e+00 + 2.7736713304450116e+00 1.2594451273430702e+00 -4.0636577356785191e+00 + 2.8976457455786111e+00 1.1655121121516847e+00 -4.5141959006151158e+00 + 2.9403117040466116e+00 1.0788508637984233e+00 -5.0157875694836545e+00 + 2.8712047765581983e+00 1.0396677421781244e+00 -5.5194796098875782e+00 + 2.7003004848804770e+00 1.0789054488271779e+00 -5.9612429648840797e+00 + 2.4584651419515793e+00 1.1262732424021917e+00 -6.4078096547942529e+00 + id 12650 + loc 6.0245466232299805e-01 4.1142067313194275e-01 403 + blend 0.0000000000000000e+00 + interp 4.4229104265514929e-01:4.4228661974472278e-01:2.6725454781294877e-01:3.7477637416227211e-01:1.0576134789234848e+00:4.1588270739838495e-01:1.9236941835721630e+00:4.1894090791399913e-01:2.3325676665321269e+00:4.2984307538291971e-01:3.0016982247442439e+00:3.1072609017013014e-01:3.9203096435275722e+00 + CVs 20 + -4.3926148561108339e-02 1.7198460814474962e-02 2.4785927311219730e-02 + -8.0214590182550033e-02 2.6540235355556031e-02 5.6747471167246294e-02 + -1.0739415440570670e-01 3.7003731725935143e-02 1.0052914872352942e-01 + -1.2632310812813952e-01 4.4084661132145000e-02 1.3407303326626036e-01 + -1.3953639373394155e-01 4.9047564191700796e-02 1.5600576150273174e-01 + -1.5099650124392500e-01 5.2814190234677691e-02 1.6563718140518394e-01 + -1.6766162317609001e-01 5.7018798013071040e-02 1.6212411682468147e-01 + -2.0204144961225912e-01 6.5778365417089896e-02 1.4732106068788056e-01 + -2.6770385462953794e-01 8.7238307539143800e-02 1.2618051453862580e-01 + -3.6340808451926010e-01 1.3128185701202749e-01 1.0550209798804358e-01 + -4.6440676591617702e-01 1.9663908749827597e-01 8.9504554568646116e-02 + -5.4441975320071667e-01 2.6560551883707501e-01 7.5177600822009916e-02 + -5.9493572687165508e-01 3.1865445674437187e-01 5.5892181049998456e-02 + -6.1859287789281181e-01 3.4208043142465250e-01 2.6994684818341656e-02 + -6.2025075746386804e-01 3.2656208041592755e-01 -1.2874975059727525e-02 + -6.0617653140286554e-01 2.7017080460850262e-01 -6.3012309745827499e-02 + -5.8717401316739748e-01 1.8293361791116947e-01 -1.2045688716433972e-01 + -5.7559049440950272e-01 8.0096707019249591e-02 -1.8183708922148506e-01 + -4.7876535870501113e-01 -8.9548037197802757e-02 -4.1190400935654958e-01 + id 12651 + loc 1.5828710794448853e-01 7.2222596406936646e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3484923295480815e-01:4.1153668034602320e-01:7.0836696996765669e-01:4.3484488446247860e-01:1.1883634546171820e+00:2.7592725067390445e-01:2.0015313782561868e+00:4.1099098986116511e-01:2.4321915586211453e+00:4.0880597775312849e-01:3.0935375033016701e+00:2.8578239271962858e-01:3.7585044036025161e+00 + CVs 20 + -2.0472822388464909e-01 8.4510582234226056e-02 2.7313357223054446e-01 + -3.3060881731226682e-01 8.4047415485049820e-02 4.1946679373758528e-01 + -3.9364263869642946e-01 3.3377742591928189e-02 4.7997380686519686e-01 + -4.3127561743785281e-01 -2.2467253137144705e-02 5.3802432514063869e-01 + -4.4828544998086989e-01 -7.6130591449608737e-02 5.9262077094255039e-01 + -4.5324096593620977e-01 -1.2323612857311517e-01 6.4069277512657863e-01 + -4.5672988095795108e-01 -1.6333470667516600e-01 6.7690530338079313e-01 + -4.6854116260630896e-01 -1.9882961948286593e-01 6.9483841969447835e-01 + -4.9689666960449780e-01 -2.3320560505781127e-01 6.8948533583809368e-01 + -5.4789866705874168e-01 -2.6895647904662789e-01 6.5840741046434748e-01 + -6.2443115861539944e-01 -3.0473778873089286e-01 6.0350943324177164e-01 + -7.2761342066415313e-01 -3.3671853354857773e-01 5.3102709363097522e-01 + -8.6466316712765390e-01 -3.7274275225089953e-01 4.4521356460847816e-01 + -1.0542311049286226e+00 -4.4604449568956306e-01 3.4470370474763312e-01 + -1.3137312546986391e+00 -5.8735551504577288e-01 2.3228032168024104e-01 + -1.6420990929369956e+00 -7.7968803145268273e-01 1.2348925213961220e-01 + -2.0217945608852514e+00 -9.7942949551363401e-01 3.6988435153713473e-02 + -2.4281372881978052e+00 -1.1577429772697592e+00 -1.1073906822795410e-02 + -2.7286737077655898e+00 -1.1942849240624429e+00 2.8586906852108351e-02 + id 12652 + loc 1.4959368109703064e-01 9.2859178781509399e-01 263 + blend 0.0000000000000000e+00 + interp 4.5636318155434602e-01:4.5635861792253052e-01:1.0054629988827348e+00:4.3393479028466192e-01:1.5360866692527284e+00:3.9726569340317019e-01:1.7766759038748607e+00:4.1686361988605136e-01:2.6722691432209214e+00:3.2760038928804974e-01:3.3411738215351390e+00 + CVs 20 + -6.9763182066909302e-01 4.7230663092166902e-01 -1.1329195325007201e-01 + -1.2947185857287178e+00 8.2637135870619072e-01 -1.9367993173167170e-01 + -1.8890831053807140e+00 1.0829821588601967e+00 -2.7343482307287037e-01 + -2.4358463628356906e+00 1.2638557702773683e+00 -3.8596836895796793e-01 + -2.8013127270560996e+00 1.3823851533042963e+00 -5.1435024204891455e-01 + -2.9865577725140420e+00 1.4589611224905172e+00 -5.9552259595823454e-01 + -3.0479771637199535e+00 1.5285241649347887e+00 -7.5025170665702734e-01 + -2.8792101421711700e+00 1.5300429644006643e+00 -1.0384021917199635e+00 + -2.4685062656854506e+00 1.3894793181139129e+00 -1.3701194791588283e+00 + -1.9017704162325773e+00 1.0703576923633789e+00 -1.6712867185814702e+00 + -1.2800887809354351e+00 5.8437132428788630e-01 -1.9037407089025373e+00 + -6.3829171751227354e-01 1.2698983572978884e-02 -2.0621845102221830e+00 + 6.3547247745591937e-02 -5.0262027682081156e-01 -2.1794686842792714e+00 + 8.1603543401916101e-01 -7.8813492891463421e-01 -2.3383343464010555e+00 + 1.4849685785592097e+00 -8.0486683699297212e-01 -2.5923155729739138e+00 + 2.0475530609644261e+00 -6.7988996289464632e-01 -2.9229843026113125e+00 + 2.5353891844731793e+00 -4.4242688549650577e-01 -3.3372563575950909e+00 + 2.9307171468778570e+00 -6.8212169225830621e-02 -3.8074211913265277e+00 + 3.2293016428024650e+00 5.2353949330858529e-01 -4.3644529178888716e+00 + id 12653 + loc 4.7118988633155823e-01 6.5144374966621399e-02 1078 + blend 0.0000000000000000e+00 + interp 4.4047449601648908e-01:3.6473254587590159e-01:2.9872007490143504e-01:2.3521657293582107e-01:1.0856727363337930e+00:3.0652503819970034e-01:1.7692676519729433e+00:3.9120475572019919e-01:2.2492076094028590e+00:2.5572555446097806e-01:2.8875801964071171e+00:4.4047009127152892e-01:3.1071093613717431e+00:3.0569744428576034e-01:3.9998881189825264e+00 + CVs 20 + 8.3010677146788198e-02 3.4669057839159168e-01 -1.8631000622049998e-01 + 1.2084302447850773e-01 6.6463867956998468e-01 -3.8799780566660030e-01 + 1.3022836403544308e-01 9.6085573407744751e-01 -6.0716930352458798e-01 + 1.1521718218847421e-01 1.2349021442869823e+00 -8.4291490457589291e-01 + 7.1866369053028678e-02 1.4789960810583405e+00 -1.0900407844283366e+00 + -4.4562423228787784e-03 1.6841921076083763e+00 -1.3409107377726790e+00 + -1.1558043314361877e-01 1.8422084618980810e+00 -1.5858427410759739e+00 + -2.5619970843135353e-01 1.9503468371823913e+00 -1.8153177978855015e+00 + -4.1502016906701800e-01 2.0120858761151572e+00 -2.0220983354335273e+00 + -5.7999857714143599e-01 2.0359629144302729e+00 -2.2031422070937334e+00 + -7.4504222236627315e-01 2.0337099096605522e+00 -2.3610672403478579e+00 + -9.1231614144973960e-01 2.0154929771630989e+00 -2.5020221287968454e+00 + -1.0878553191649085e+00 1.9873586815058668e+00 -2.6316094659044880e+00 + -1.2767387271148081e+00 1.9536423404574517e+00 -2.7526087525659975e+00 + -1.4850677005843660e+00 1.9215838341353741e+00 -2.8654362122157662e+00 + -1.7389787016197520e+00 1.8979986136471103e+00 -2.9745771160828927e+00 + -2.0991114192100904e+00 1.8352186999137061e+00 -3.1009241665282277e+00 + -2.4870558778342251e+00 1.5926535925373579e+00 -3.2540043429488383e+00 + -2.5556058551811618e+00 1.4196204276546236e+00 -3.3175932182736676e+00 + id 12654 + loc 1.8258093297481537e-01 8.0964553356170654e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7477483803358141e-01:2.9472493904453534e-01:5.8703222662500987e-01:3.4149970159201459e-01:1.2169586333594153e+00:2.6532447640347018e-01:2.0009509784176469e+00:3.7477109028520111e-01:2.7531256067497152e+00:3.2199953263371967e-01:3.0709001183579137e+00:2.6349352763814149e-01:3.8250512435728847e+00 + CVs 20 + 2.4904077390663454e-01 2.9871866343844977e-01 -6.2420142246167487e-02 + 5.1072587378981527e-01 5.7536925058867094e-01 -1.6730490622375233e-01 + 7.7471252890923448e-01 8.3028439072461735e-01 -3.0278130945037179e-01 + 1.0292380840760138e+00 1.0503533018264011e+00 -4.6633632188584989e-01 + 1.2638881727212194e+00 1.2184754488069052e+00 -6.5821714899475847e-01 + 1.4649991229978991e+00 1.3197357250687860e+00 -8.7083773247455709e-01 + 1.6177871851131744e+00 1.3464883263452230e+00 -1.0881668534001436e+00 + 1.7105618193871595e+00 1.3030317736433341e+00 -1.2881507442793483e+00 + 1.7390485677114160e+00 1.2048780198608757e+00 -1.4466874552539344e+00 + 1.7115825966718226e+00 1.0765306065476781e+00 -1.5473226374771780e+00 + 1.6445998681717673e+00 9.4375339007301773e-01 -1.5895548997873534e+00 + 1.5505852504515987e+00 8.2672209639923500e-01 -1.5820481579277017e+00 + 1.4378628816517842e+00 7.3904196156004454e-01 -1.5396972461147664e+00 + 1.3147680611250132e+00 6.8253899424966269e-01 -1.4840056860214137e+00 + 1.1881538739182382e+00 6.5724437508814759e-01 -1.4198708143070384e+00 + 1.0760722353326480e+00 6.8570564407920276e-01 -1.3199224660663498e+00 + 1.0275935614455334e+00 7.8479596918007521e-01 -1.1609040837885556e+00 + 1.0872017126644404e+00 9.1511538619270771e-01 -9.6619109325522312e-01 + 8.1652855531595425e-01 8.7737039379654691e-01 -9.8162075451232167e-01 + id 12655 + loc 2.5442096590995789e-01 5.7406854629516602e-01 1084 + blend 0.0000000000000000e+00 + interp 4.7946560825293189e-01:3.4797862934937890e-01:6.3278006463329428e-01:4.7946081359684939e-01:1.0103577453184680e+00:2.8025135431121906e-01:1.7074950677020457e+00:2.5450285161960401e-01:2.8401822800343335e+00:3.2777467163674068e-01:3.3318454837658313e+00:2.7926823420469210e-01:3.9857208216355073e+00 + CVs 20 + -2.2443420111579659e-01 5.7797767870133354e-01 3.9275916703088237e-01 + -4.2926340649130595e-01 1.0703510121228117e+00 7.0530032987571012e-01 + -6.2901682705013029e-01 1.5146665258441612e+00 9.9559986835926884e-01 + -8.5642675742797225e-01 1.9226390635481669e+00 1.2647679070102269e+00 + -1.1307390597919142e+00 2.2819220980050798e+00 1.4834415060901529e+00 + -1.4501060398452463e+00 2.5771126742834043e+00 1.6265943338239870e+00 + -1.7903704550479591e+00 2.7929484053512725e+00 1.6765674630035130e+00 + -2.1096183355465423e+00 2.9181452744058531e+00 1.6274984796167562e+00 + -2.3673437799770967e+00 2.9531085061917919e+00 1.4984855632861194e+00 + -2.5632546191921977e+00 2.9113241279674318e+00 1.3229394047402350e+00 + -2.7195149962374408e+00 2.7935722780158523e+00 1.1134777654381123e+00 + -2.8386285321837237e+00 2.5923157319865489e+00 8.9479257842951010e-01 + -2.9229846592126441e+00 2.3316539335573498e+00 7.3607092051859224e-01 + -3.0014321942022342e+00 2.0431041770712337e+00 6.8720104056065889e-01 + -3.0968463075262060e+00 1.6958165809343186e+00 7.2830464081029700e-01 + -3.1769160935317302e+00 1.2349574704509936e+00 7.7644904109548485e-01 + -3.1735974807428931e+00 6.6324104679793239e-01 7.1089377003305632e-01 + -3.0725971340510920e+00 1.1406611714456061e-01 4.3838060761766451e-01 + -3.0301203569044186e+00 -1.3759433544537730e-01 1.4203650908897855e-01 + id 12656 + loc 7.2937846183776855e-01 3.7814387679100037e-01 377 + blend 0.0000000000000000e+00 + interp 1.4808030952352951e+00:2.2465877577419469e-01:4.1387539660549655e-01:3.9142341862468694e-01:9.5747281490081848e-01:7.8230958556356811e-01:9.9484279022485156e-01:1.4807930952352950e+00:2.6766986095606082e+00:1.1040943410515598e+00:2.8300212118040626e+00:6.9768492720277264e-01:3.0209386152850546e+00:4.2029867729330644e-01:3.3273228223451992e+00:3.7263271097037837e-01:3.9999267468821325e+00 + CVs 20 + 6.2437234098457572e-01 2.0012071449697352e-01 7.1571400731351620e-01 + 1.0725289183290312e+00 2.8209419199281116e-01 1.2032545011788685e+00 + 1.5026834529522075e+00 3.2545434026802322e-01 1.6327003107325140e+00 + 1.9841915861442245e+00 3.6853846955005815e-01 2.0849581949503166e+00 + 2.5161902756135177e+00 3.9906192152894837e-01 2.5676853591847748e+00 + 3.0980312151237923e+00 3.9984355850854625e-01 3.0756336768803685e+00 + 3.7266186986993852e+00 3.4720937866260659e-01 3.5863136154132804e+00 + 4.3747274532529499e+00 2.1051812542540027e-01 4.0769281002355200e+00 + 4.9982362691924038e+00 -2.9034162515516382e-02 4.5282532809090545e+00 + 5.5577500408274787e+00 -3.6453926963239325e-01 4.9176855488805096e+00 + 6.0299800025541597e+00 -7.6479150578626398e-01 5.2226452986555794e+00 + 6.4092374748624552e+00 -1.1872750407470392e+00 5.4341383548515081e+00 + 6.7051194742844409e+00 -1.5932149982255641e+00 5.5600403374863898e+00 + 6.9301181881815381e+00 -1.9606901146417881e+00 5.6046188286018612e+00 + 7.0892219954877387e+00 -2.2863053906693342e+00 5.5561826378192380e+00 + 7.1852101017916796e+00 -2.5841821001747038e+00 5.4220566639644261e+00 + 7.2227672389182551e+00 -2.8735994535372829e+00 5.2521579993962906e+00 + 7.2488633908321072e+00 -3.1566628573615398e+00 5.0922618678157843e+00 + 7.4391505363617796e+00 -3.4098975171990973e+00 4.9051085876284137e+00 + id 12657 + loc 1.3318803906440735e-01 8.9775294065475464e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8330995598714799e-01:4.1959424577466697e-01:4.5102956529780824e-01:2.6538252771418069e-01:1.1591631166636458e+00:4.3379694199295521e-01:1.9852778148879038e+00:4.8330512288758815e-01:2.4508457920336308e+00:4.8143059019630358e-01:3.0048497345110925e+00:3.3663286215842986e-01:3.6646701112658162e+00 + CVs 20 + 2.6948576500280019e-01 2.1224578275059963e-01 -1.3408950097668323e-01 + 5.3421399788852775e-01 4.4565067920669904e-01 -2.9710961562804861e-01 + 7.9291924879985154e-01 6.9629479795302884e-01 -4.8234771112462016e-01 + 1.0273645926316790e+00 9.6520748369122422e-01 -6.9656148356993008e-01 + 1.2082658098402530e+00 1.2473407205114362e+00 -9.5165425300447593e-01 + 1.3075828762917874e+00 1.5179907672970230e+00 -1.2527011190616779e+00 + 1.3121244809342247e+00 1.7352668053635787e+00 -1.5934353879763365e+00 + 1.2344194118113507e+00 1.8541738729563590e+00 -1.9564126895695322e+00 + 1.0998859076443621e+00 1.8440502793929936e+00 -2.3124010708203677e+00 + 9.2969313870502890e-01 1.7052689500652949e+00 -2.6234916781340782e+00 + 7.4533085719113734e-01 1.4683696777057103e+00 -2.8726930099809422e+00 + 5.7181971482868765e-01 1.1660418516535649e+00 -3.0875106292952066e+00 + 4.3298251338786237e-01 8.1166294578740683e-01 -3.3057085312084791e+00 + 3.6041447686603367e-01 4.1119283186540412e-01 -3.5497108327713085e+00 + 4.1951459180668693e-01 -3.5121486879084896e-02 -3.8304672166184135e+00 + 7.5904961919740521e-01 -5.1194943220357492e-01 -4.1238360602056110e+00 + 1.4817610770040865e+00 -8.6850537200497802e-01 -4.3013904857157321e+00 + 2.2215422009447345e+00 -9.9811194057981312e-01 -4.3103941441791163e+00 + 2.5430681576023848e+00 -1.1919300691853549e+00 -4.3825068713703956e+00 + id 12658 + loc 7.4399942159652710e-01 6.2157750129699707e-01 372 + blend 0.0000000000000000e+00 + interp 4.3379603287971358e-01:4.3379169491938480e-01:2.6029390411211994e-02:3.0136237738871202e-01:9.4974493666819237e-01:3.0003604978703224e-01:1.8041746701033472e+00:3.4706144583371112e-01:2.2500360630127005e+00:4.0437355785500850e-01:2.9169472461902242e+00:2.8133606771431202e-01:3.2559809398112707e+00 + CVs 20 + -3.7510338480309646e-01 5.1516027053456437e-01 -2.0664806437760702e-01 + -7.3013014366029827e-01 9.7478622309158625e-01 -4.0217600513132201e-01 + -1.0608439124927056e+00 1.3628048502874639e+00 -6.0300347472596960e-01 + -1.3114699884009053e+00 1.6496671865039292e+00 -7.8011435175929700e-01 + -1.4796297345875060e+00 1.8298766734296701e+00 -8.7092072739651683e-01 + -1.5972848485937301e+00 2.0074435408943927e+00 -9.4346546764926020e-01 + -1.5621904051884914e+00 2.1857122695388096e+00 -1.0884536516661583e+00 + -1.3311611401539407e+00 2.2829996296852340e+00 -1.2626478889465531e+00 + -9.4527721034907231e-01 2.2753734357316748e+00 -1.4153450406325658e+00 + -4.6684280059154237e-01 2.1548133689808262e+00 -1.5315948503052279e+00 + 2.1574760354443168e-02 1.9076901454660349e+00 -1.6197324880711423e+00 + 4.3699556107730964e-01 1.5040483363745110e+00 -1.6871340380678679e+00 + 7.6389788282462545e-01 9.1362936059230937e-01 -1.6848495700306816e+00 + 1.1134381411804961e+00 1.5305433827540937e-01 -1.5201301816098440e+00 + 1.7513629029633802e+00 -5.7705753803252602e-01 -1.2588291600985904e+00 + 2.7428227850718785e+00 -9.0941957969883247e-01 -1.2095791539269367e+00 + 3.8110338867704829e+00 -7.8677210740296633e-01 -1.5041348519912903e+00 + 4.6828346416435007e+00 -3.4947233617291396e-01 -2.0576159780073477e+00 + 5.2705258205333632e+00 2.6089988307587619e-01 -2.7336844614681968e+00 + id 12659 + loc 1.3198336958885193e-01 6.9760143756866455e-02 413 + blend 0.0000000000000000e+00 + interp 1.4482525237828237e+00:3.7210350355341909e-01:1.5513208451106031e-01:3.1180829343998168e-01:1.1481545824971326e+00:6.0531886942786106e-01:1.6291676314854937e+00:8.8632024806203857e-01:1.9584879360198379e+00:1.1528739294460484e+00:1.9970173260859492e+00:1.4482425237828236e+00:2.0050076502924612e+00:7.4332155019109269e-01:3.7429870225636765e+00:6.1253411803846169e-01:3.9950994007802754e+00 + CVs 20 + -2.1177929966290306e-02 1.9201629410939716e-01 -1.0481656133550112e+00 + -4.7485238903243021e-02 2.4391198398883038e-01 -1.7420206137496950e+00 + -5.3814378258075321e-02 2.2986819460753902e-01 -2.3303173033274036e+00 + -2.8017801081967823e-02 1.8911145923700068e-01 -2.9215126113516057e+00 + 2.9317152694919503e-02 1.2615151075319275e-01 -3.4988645509276233e+00 + 1.1433331741972276e-01 4.8970016803873917e-02 -4.0495322403839191e+00 + 2.2144798083265049e-01 -3.4363906798894450e-02 -4.5677494093265958e+00 + 3.4702039365941595e-01 -1.2086106363802140e-01 -5.0538211000408610e+00 + 4.9316368749038303e-01 -2.1000655986340955e-01 -5.5119649941403983e+00 + 6.6718187328440404e-01 -2.9043900907512077e-01 -5.9568903414586041e+00 + 8.6801971072338113e-01 -3.6539220437928721e-01 -6.4082922153924002e+00 + 1.0766150392427916e+00 -4.5696120204047719e-01 -6.8767264154503671e+00 + 1.2758138801089594e+00 -5.8890947629809332e-01 -7.3580268942783142e+00 + 1.4717524493983865e+00 -7.7489734748965078e-01 -7.8421830011318638e+00 + 1.6777493332923541e+00 -1.0246448722084209e+00 -8.3191203750139202e+00 + 1.8922928918265212e+00 -1.3454857324008191e+00 -8.7781592428984769e+00 + 2.1051643037007204e+00 -1.7394985897800859e+00 -9.2031373249054447e+00 + 2.3227707149465968e+00 -2.2000808030245809e+00 -9.5618729117975878e+00 + 2.4875949258438528e+00 -2.5402517467723973e+00 -9.6499728141182786e+00 + id 12660 + loc 6.7577838897705078e-01 6.5993940830230713e-01 411 + blend 0.0000000000000000e+00 + interp 3.8216603435076668e-01:3.4139381493485549e-01:2.9916218085561130e-01:3.8216221269042316e-01:9.9470452904268780e-01:3.4133024978185383e-01:1.3505059026751565e+00:3.4026141945154448e-01:1.9982467720700643e+00:3.2764394116360235e-01:2.9989844454190968e+00:3.2069133937053307e-01:3.6544382899322874e+00 + CVs 20 + 9.2598280996630045e-01 1.0247256819713688e-01 -2.7050051660573315e-01 + 1.5745503692987275e+00 6.8462623443476200e-02 -4.8954930377115463e-01 + 2.1606851345664815e+00 7.0509403282940086e-03 -6.5875332749629845e-01 + 2.7429668918980119e+00 -4.8879625412672101e-02 -7.7565694044105127e-01 + 3.3104277520542231e+00 -1.0249393107216764e-01 -8.4234102176651748e-01 + 3.8560800809259144e+00 -1.5816880049975812e-01 -8.6101736458722522e-01 + 4.3743710705036811e+00 -2.2244417414335760e-01 -8.2880411505685414e-01 + 4.8585544348981351e+00 -3.0512861895068299e-01 -7.4559370722364848e-01 + 5.3054194136440289e+00 -4.1777107918321565e-01 -6.1677470025707726e-01 + 5.7154173948940539e+00 -5.7325513651980065e-01 -4.5418308221083908e-01 + 6.0858424981042081e+00 -7.8310117052985895e-01 -2.7457261263195260e-01 + 6.4047218166083120e+00 -1.0498839063041945e+00 -9.3666571683755584e-02 + 6.6593313922214685e+00 -1.3675481995862497e+00 7.9047836365588098e-02 + 6.8438797920438548e+00 -1.7296918040675626e+00 2.3683533432137205e-01 + 6.9540168439276453e+00 -2.1241465894883254e+00 3.7052205605567234e-01 + 6.9858385677962431e+00 -2.5246513208457717e+00 4.7125241755368774e-01 + 6.9424870045565283e+00 -2.9095319095722845e+00 5.3755920227228537e-01 + 6.8319594018986063e+00 -3.2914101780335585e+00 5.7391570826443161e-01 + 6.6530476998540689e+00 -3.7395838827772030e+00 5.7565780325316074e-01 + id 12661 + loc 6.8014174699783325e-01 2.1591985225677490e-01 1081 + blend 0.0000000000000000e+00 + interp 4.9402417331589665e-01:4.2230114622407916e-01:8.9122843162325882e-04:4.2601899741101390e-01:6.9171365319057543e-01:3.9454710741901367e-01:1.1439011508236772e+00:4.9401923307416351e-01:1.6379439315563884e+00:2.5889752779872299e-01:3.6574889223340588e+00 + CVs 20 + 5.0442078130115836e-02 5.3595844694901773e-01 -4.5533813568388176e-01 + 6.2027371919709390e-02 9.3996632838485972e-01 -7.1024435706804601e-01 + 7.3263453577750659e-02 1.3003930474087588e+00 -8.9975261054071631e-01 + 1.0285603618822947e-01 1.6443698517069105e+00 -1.0772231413493323e+00 + 1.4422573601746980e-01 1.9617048839185949e+00 -1.2352603928460855e+00 + 1.9214428039467846e-01 2.2373628328102200e+00 -1.3631385650672754e+00 + 2.4367479366809475e-01 2.4527858208614672e+00 -1.4503073614354336e+00 + 2.9898789746582211e-01 2.5830398714228320e+00 -1.5040760543097798e+00 + 3.5704196923492382e-01 2.6119488913161755e+00 -1.5899609795579392e+00 + 4.0256294075185778e-01 2.6565374249694034e+00 -1.7399655124300319e+00 + 4.5500868068752959e-01 2.7344003050852947e+00 -1.7768494737195799e+00 + 5.3731905729369156e-01 2.7499544821991293e+00 -1.7083245101256781e+00 + 6.5001530999445278e-01 2.6932562910531859e+00 -1.5806048188683883e+00 + 7.8778933883003888e-01 2.5694524274362722e+00 -1.4128088246833550e+00 + 9.3989106477577600e-01 2.3884340178620880e+00 -1.2187912880505010e+00 + 1.0925817655917691e+00 2.1646678832195496e+00 -1.0185289089477481e+00 + 1.2375909463678241e+00 1.8884131865858707e+00 -8.4452004061247310e-01 + 1.3729432749664749e+00 1.5281588587747876e+00 -7.5160134005367796e-01 + 1.4899553296908414e+00 1.1443819524949235e+00 -7.6142783428076144e-01 + id 12662 + loc 8.9589190483093262e-01 1.0757833719253540e-01 409 + blend 0.0000000000000000e+00 + interp 5.1090268285217499e-01:4.2122648182930877e-01:7.7685659270081087e-02:4.0245167561179696e-01:9.3467878883901512e-01:4.7358275309418635e-01:1.1773386677500277e+00:4.5011287867918170e-01:1.7803009751788259e+00:5.1089757382534651e-01:2.0002429640919650e+00:2.7689412199394281e-01:2.9982418896973133e+00:3.6904052354995370e-01:3.7612643619100057e+00 + CVs 20 + -2.1059109000816301e-01 4.1333163237788947e-02 1.8014313948135216e-01 + -4.2235635907561647e-01 8.4875392878958067e-02 3.5978411696704538e-01 + -6.3237451275556134e-01 1.2914938762628003e-01 5.3240823147141370e-01 + -8.3880224134100922e-01 1.7359456998533529e-01 6.9376974558878435e-01 + -1.0413182948075941e+00 2.1841170416360633e-01 8.4241827816430259e-01 + -1.2393753400129668e+00 2.6516476038076064e-01 9.7840696689857887e-01 + -1.4284711310692191e+00 3.1889896096911530e-01 1.1017385108683913e+00 + -1.6046300218925860e+00 3.8514561786036783e-01 1.2107822061784588e+00 + -1.7727813934558541e+00 4.6557813303022588e-01 1.2986545279873845e+00 + -1.9427838510403492e+00 5.5876518309114498e-01 1.3584113831628737e+00 + -2.1275102495371438e+00 6.5566210380195677e-01 1.3988251282521631e+00 + -2.3414017370228750e+00 7.3062527764697149e-01 1.4424256562080764e+00 + -2.5894618450245956e+00 7.5518084415980646e-01 1.5031646940964440e+00 + -2.8665728491139921e+00 7.1532154279054661e-01 1.5816565821241413e+00 + -3.1607314204565080e+00 6.0982927068840520e-01 1.6781880850215003e+00 + -3.4553642733292969e+00 4.4338543924869911e-01 1.7939837915946979e+00 + -3.7354764752996896e+00 2.1761288380691268e-01 1.9202033610062101e+00 + -3.9907933626081418e+00 -7.0630833486681421e-02 2.0395772354553321e+00 + -4.2178480886113334e+00 -4.2260627470276013e-01 2.1426118247811106e+00 + id 12663 + loc 4.8723708838224411e-02 7.8240638971328735e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6956236035385973e-01:2.6372898007679929e-01:3.4696144829887010e-01:4.6955766473025623e-01:9.6609924536757696e-01:3.0461920839106571e-01:1.6556509630733831e+00:4.0239839268594757e-01:2.4213664587164665e+00:4.1181707776327126e-01:2.9563380166182851e+00:4.3484488446247860e-01:3.1902819224736696e+00:4.1340358601485616e-01:3.9885275100446114e+00 + CVs 20 + -1.2562947941108646e-01 3.1707539165297310e-01 2.8700244940283143e-01 + -2.0037635053244518e-01 5.3908434538070549e-01 3.9137703038268751e-01 + -2.8149118373956805e-01 7.2820022226161574e-01 4.4774174756313856e-01 + -3.9291070787812765e-01 9.1209702044173757e-01 5.1499743984652979e-01 + -5.3951062224569035e-01 1.0866010780431918e+00 5.8955165928239794e-01 + -7.2436808379071416e-01 1.2460840751044935e+00 6.6853918709217219e-01 + -9.4760308762100132e-01 1.3841958978982714e+00 7.5015633034367013e-01 + -1.2064587049842190e+00 1.4949226398477968e+00 8.3404249853973222e-01 + -1.4961650429975673e+00 1.5729673869335159e+00 9.2139315128908073e-01 + -1.8108130541060539e+00 1.6135437104960786e+00 1.0144689926002708e+00 + -2.1443328182415224e+00 1.6118228988367194e+00 1.1158997888570577e+00 + -2.4904514778672873e+00 1.5624449825798394e+00 1.2276136383130463e+00 + -2.8381013552920571e+00 1.4618118291954674e+00 1.3493374492068595e+00 + -3.1663211482883993e+00 1.3154710246921582e+00 1.4787481033626508e+00 + -3.4551854375750231e+00 1.1402247918190449e+00 1.6147291878190688e+00 + -3.7021836001666153e+00 9.5253597151969360e-01 1.7591484082909861e+00 + -3.9158287923071198e+00 7.6201803727485740e-01 1.9141224616683723e+00 + -4.1030228598963889e+00 5.7541523058579247e-01 2.0786628488912671e+00 + -4.3228990495914923e+00 3.6716492017546942e-01 2.2542534872010735e+00 + id 12664 + loc 9.8949307203292847e-01 5.8848035335540771e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5120520348955762e-01:4.4406255772981029e-01:4.6018549178452772e-01:3.8218506450519807e-01:1.0019138987368643e+00:3.2908045005322362e-01:1.6528512357104437e+00:3.6636520462397604e-01:2.0242018176277168e+00:4.5120069143752273e-01:2.9386334754285244e+00:4.3825070981404879e-01:3.5427778339659759e+00:3.4221419283243432e-01:3.9974368732449070e+00 + CVs 20 + 1.3050999474216357e-01 3.3128288102120640e-01 -1.5806293288356621e-01 + 2.5521161595372310e-01 6.6312966511079563e-01 -3.1390545206204701e-01 + 3.9563066489320253e-01 9.9927875374527775e-01 -4.6513950223831702e-01 + 5.7316976457115465e-01 1.3351843247481030e+00 -6.0957127192904903e-01 + 8.0251800907098891e-01 1.6579051456809890e+00 -7.4299804394461799e-01 + 1.0937685454359789e+00 1.9398150919550210e+00 -8.6358816515660020e-01 + 1.4382254472408802e+00 2.1478053690888861e+00 -9.7949495786359519e-01 + 1.8056928729121957e+00 2.2599145055055798e+00 -1.1073034889558422e+00 + 2.1576517231311878e+00 2.2802244711506829e+00 -1.2616145588929211e+00 + 2.4574977653307641e+00 2.2352361245807093e+00 -1.4450773782766122e+00 + 2.6712500807492709e+00 2.1457384109660533e+00 -1.6447183295020329e+00 + 2.7839009998269968e+00 2.0036223084802893e+00 -1.8458561863448351e+00 + 2.7986013734945230e+00 1.7834329517913963e+00 -2.0409008457443321e+00 + 2.7231485833886113e+00 1.5425218590847556e+00 -2.2123206182208230e+00 + 2.5796469642734619e+00 1.4058185904921923e+00 -2.3539140792367115e+00 + 2.3660496758140384e+00 1.3261548588729473e+00 -2.4854375140252514e+00 + 2.0172359160202418e+00 1.1505058441522600e+00 -2.6330023871728323e+00 + 1.6177537053569604e+00 9.0886721806347581e-01 -2.7801034020360382e+00 + 1.2971207169416399e+00 7.2727697174374173e-01 -2.9054009874151139e+00 + id 12665 + loc 9.0954937040805817e-02 1.6431647539138794e-01 406 + blend 0.0000000000000000e+00 + interp 5.6523445669034111e-01:3.4312180334728293e-01:8.5384033067265674e-01:4.1012350829971383e-01:1.4465789283358390e+00:4.1557281950486435e-01:2.0028640038619754e+00:5.6522880434577427e-01:2.4565737337848783e+00:3.5629479618730570e-01:3.0440616220408332e+00:4.7716450022809875e-01:3.5342862719921619e+00:4.1408637650616936e-01:3.9811869683081191e+00 + CVs 20 + -7.9345866014159730e-02 8.8777228944716735e-02 2.0522076288996702e-02 + -1.7107485560733757e-01 1.5199765953922498e-01 5.9146031233199704e-02 + -2.4782837432714824e-01 2.3535923131574565e-01 1.2386374370666479e-01 + -3.1668685294305315e-01 3.3852159006707716e-01 1.7473805926578062e-01 + -3.7713144509599772e-01 4.5224206977582615e-01 2.0758331504496205e-01 + -4.2851716768161852e-01 5.6808316593432429e-01 2.2242919689822802e-01 + -4.7027473894153266e-01 6.7943092058591659e-01 2.2112765460042036e-01 + -5.0143156004928990e-01 7.8201033701784017e-01 2.0607957378057440e-01 + -5.2029959210047161e-01 8.7347531075078233e-01 1.7923984642154395e-01 + -5.2473591003507969e-01 9.5248203119807506e-01 1.4226810855811972e-01 + -5.1263080639404968e-01 1.0175921107677974e+00 9.6272264746992686e-02 + -4.8272499743348279e-01 1.0656995675235843e+00 4.1545002135922382e-02 + -4.3447076835583820e-01 1.0933723887843358e+00 -2.1418276196202179e-02 + -3.6815982182688933e-01 1.0964788360855089e+00 -9.1256062249279957e-02 + -2.8460772397231371e-01 1.0682539317158348e+00 -1.6462272949592577e-01 + -1.8486879504971648e-01 1.0012308905673049e+00 -2.3759872980905994e-01 + -6.9724130439083251e-02 8.9234003255658778e-01 -3.0841787137318510e-01 + 6.0847740863076080e-02 7.4676734976739945e-01 -3.7876247571769128e-01 + 1.2122686573634989e-01 5.4793668627102221e-01 -4.7245187693164520e-01 + id 12666 + loc 1.6942995786666870e-01 3.9662271738052368e-02 414 + blend 0.0000000000000000e+00 + interp 5.9112980255519236e+00:4.4590762960642466e-01:1.1673693498269633e-02:5.6506561786484977e-01:4.5742782237870394e-01:5.0859053856782366e-01:9.4828565627787076e-01:3.7679273652481687e-01:1.2317696056032736e+00:6.3538433566064167e-01:1.8794114813692429e+00:1.0519252411812130e+00:1.9182883314030295e+00:4.1227573521976957e-01:1.9944321010644517e+00:5.9112880255519240e+00:3.9330301290607101e+00:5.1515097131977212e+00:3.9440521719482171e+00:1.1113698374232035e+00:3.9987828992618555e+00 + CVs 20 + -1.0692774093497477e-01 1.7490604650935337e-01 -9.7418082186566834e-01 + -2.3314073324880130e-01 1.6930058657629493e-01 -1.5932039988532356e+00 + -3.5595748883660072e-01 1.0287070022675487e-01 -2.1192469256856232e+00 + -4.7303134839545197e-01 1.6538203639224147e-02 -2.6556875335076051e+00 + -5.7631774638681588e-01 -9.1842630378295875e-02 -3.1936337527169694e+00 + -6.5590157118011039e-01 -2.2358510032029877e-01 -3.7279305540646104e+00 + -7.0278162933788368e-01 -3.8000696221030672e-01 -4.2533297925947817e+00 + -7.1268009631854046e-01 -5.6250667896569950e-01 -4.7621745723683233e+00 + -6.8635044517836064e-01 -7.7144617132685478e-01 -5.2464217065334990e+00 + -6.2995067238337132e-01 -1.0051857793498045e+00 -5.6982323564455317e+00 + -5.6422551682682864e-01 -1.2621566853992359e+00 -6.1059994130688953e+00 + -5.2885063632471385e-01 -1.5439705279479372e+00 -6.4531830017329881e+00 + -5.5686513952950911e-01 -1.8527825529146298e+00 -6.7280084806406499e+00 + -6.4906130782929028e-01 -2.1865171545003359e+00 -6.9372053837315057e+00 + -7.9244803700426403e-01 -2.5397955727156112e+00 -7.0859575866414293e+00 + -9.7728088150987069e-01 -2.8897708357493914e+00 -7.1642037042398830e+00 + -1.1909699670177982e+00 -3.2050093998894376e+00 -7.1668751863695963e+00 + -1.4147605460829649e+00 -3.4730375315146622e+00 -7.1098281043468017e+00 + -1.6266254237323245e+00 -3.8245874152419370e+00 -7.0996329749580607e+00 + id 12667 + loc 9.3605840206146240e-01 2.1249361336231232e-01 1078 + blend 0.0000000000000000e+00 + interp 5.3664081440273126e-01:4.3481356343040867e-01:1.5173990934689996e-01:5.3663544799458729e-01:8.7615218683939711e-01:4.7108302446491962e-01:1.1264634469806212e+00:3.7314788076212035e-01:1.6307932635899103e+00:4.7344116368510025e-01:2.0095114740332436e+00:4.1741165209619724e-01:2.7586271369315796e+00:4.2303938166551502e-01:3.4207280984129493e+00:4.6299766047764224e-01:3.9542356107353904e+00 + CVs 20 + -1.9701883008211588e-01 3.1573761869382300e-01 1.3816214094707169e-01 + -3.7485470853173791e-01 6.4099294757284386e-01 2.7552531678178083e-01 + -5.5674080788902425e-01 9.5111938934345652e-01 4.4055996873913461e-01 + -7.5261478868931220e-01 1.2276913089177781e+00 6.4488616676767851e-01 + -9.6418825234872330e-01 1.4596144799263167e+00 8.8762263749518877e-01 + -1.1908270175777542e+00 1.6330700988078415e+00 1.1631956750292705e+00 + -1.4271031748404550e+00 1.7332638156165767e+00 1.4609336739701235e+00 + -1.6622475269303794e+00 1.7510785611072617e+00 1.7654436239781113e+00 + -1.8824759257211403e+00 1.6870332865281001e+00 2.0584000167934997e+00 + -2.0749724837588541e+00 1.5503783705526908e+00 2.3213655475546240e+00 + -2.2313916579957778e+00 1.3565444423311557e+00 2.5391061308260250e+00 + -2.3502703977216521e+00 1.1236253631200541e+00 2.7036622277969511e+00 + -2.4374244051516865e+00 8.6717442115258214e-01 2.8165684391959211e+00 + -2.5020601779956251e+00 5.9829796035696869e-01 2.8843551465167896e+00 + -2.5499662452298582e+00 3.3371896771614185e-01 2.9055254880808543e+00 + -2.5730467370641144e+00 1.3453099355474452e-01 2.8495821418789875e+00 + -2.5436938144319590e+00 1.7558544946404475e-01 2.6894472107006919e+00 + -2.4759525632385100e+00 5.7049071734908685e-01 2.6086141487957439e+00 + -2.4871483921193986e+00 3.8386517856356861e-01 2.4121978492809655e+00 + id 12668 + loc 7.2610396146774292e-01 4.2563849687576294e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5537507359387419e-01:2.7982954118019898e-01:2.3221447975777154e-01:4.5537051984313826e-01:8.5542749187517597e-01:2.9506028863747596e-01:1.6626675544326051e+00:4.2923674709361043e-01:1.9999893394915831e+00:3.9810180578359744e-01:2.4486049678984809e+00:2.6512862902159429e-01:3.0519356165268325e+00 + CVs 20 + 3.2003309343856945e-01 3.4261415249436372e-01 -2.2364999550476405e-01 + 6.0207663280356671e-01 6.6074236369889816e-01 -4.1727906476977827e-01 + 8.6118890277312388e-01 9.6593800063083601e-01 -5.9185296364566109e-01 + 1.1188124764077541e+00 1.2552708843815887e+00 -7.2780631118678396e-01 + 1.3849428631008180e+00 1.5131638587260101e+00 -7.9886042640172383e-01 + 1.6524690348434072e+00 1.7249286292266344e+00 -7.9712031471816458e-01 + 1.9002236990301660e+00 1.8793821155224757e+00 -7.3349998619988477e-01 + 2.0975347660813100e+00 1.9729057803050236e+00 -6.3718994205004020e-01 + 2.2253956352473705e+00 2.0199381438755517e+00 -5.4355483225417367e-01 + 2.2954372945605575e+00 2.0417870184330971e+00 -4.5155422463180506e-01 + 2.3121821463302532e+00 2.0517977326713948e+00 -3.3694331977282332e-01 + 2.2698048130763673e+00 2.0660046839671704e+00 -1.8336507373855482e-01 + 2.1850368159551299e+00 2.0511009451881859e+00 1.4520100891204146e-02 + 2.0963397180436751e+00 1.9298696878214971e+00 1.8166150550006588e-01 + 2.0239185961147417e+00 1.7037243650307063e+00 2.3817894702374032e-01 + 1.9509958809011421e+00 1.3864237241307671e+00 2.1908269924824364e-01 + 1.8308861998125618e+00 9.6668917800820231e-01 2.4288978259500738e-01 + 1.6477236787745848e+00 5.4849985911126531e-01 4.2815955853968146e-01 + 1.4533577845338532e+00 3.8728462070131731e-01 7.5096033652498873e-01 + id 12669 + loc 4.6818754076957703e-01 6.9698649644851685e-01 372 + blend 0.0000000000000000e+00 + interp 4.6133940103887278e-01:4.6133478764486241e-01:1.8546311054383835e-01:3.0213995885745287e-01:9.4052278347608076e-01:3.2677666372255920e-01:1.5511072837805733e+00:3.4937026944435789e-01:2.0714094217590029e+00:3.0108430932226249e-01:2.9376048603763651e+00:2.8926874761726162e-01:3.8064758833661934e+00 + CVs 20 + -3.2381788423682117e-01 6.1252297575375259e-01 -2.3633842366587557e-01 + -6.6326931882817486e-01 1.2311862285461115e+00 -4.6322794027302289e-01 + -9.8097843607238300e-01 1.8226912608321213e+00 -7.2278044730088664e-01 + -1.1195390051981429e+00 2.3304996005082930e+00 -1.0505029122312812e+00 + -9.3916859673473718e-01 2.6302399029712893e+00 -1.3970586371258202e+00 + -5.3761195355151981e-01 2.6741931258366423e+00 -1.6727455417754795e+00 + -3.1739109946091304e-02 2.5108658351490543e+00 -1.8692057913592293e+00 + 5.2524392876164949e-01 2.1670116684045926e+00 -1.9980669663956054e+00 + 1.0561803786531359e+00 1.6464261265682714e+00 -2.0542872997179100e+00 + 1.4578716460561676e+00 9.9259601757643989e-01 -2.0330913897195377e+00 + 1.6919797113523081e+00 3.0683753818754400e-01 -1.9442977652924232e+00 + 1.8435089341139785e+00 -3.2658518225931521e-01 -1.8057790156312070e+00 + 2.0574820379455123e+00 -9.1967584561407678e-01 -1.6416729965397348e+00 + 2.5052344975648060e+00 -1.5032387553274353e+00 -1.4586480211674691e+00 + 3.3240499263907832e+00 -1.9740336587886946e+00 -1.3172196277828876e+00 + 4.3774258984833487e+00 -2.1500634899296927e+00 -1.3352702912162642e+00 + 5.4711832277319203e+00 -1.9630485775147080e+00 -1.5706610044637275e+00 + 6.3616597727149600e+00 -1.4757571347571861e+00 -1.9918554274754763e+00 + 6.7574973491448391e+00 -1.0033751860309890e+00 -2.3916441910241688e+00 + id 12670 + loc 2.6788866519927979e-01 9.2720645666122437e-01 403 + blend 0.0000000000000000e+00 + interp 4.4533975078371257e-01:2.7706736143826488e-01:1.7745363015985671e-01:3.0373703405643876e-01:9.7435027218957893e-01:3.7459361094892962e-01:1.6481809672160825e+00:2.7492488461470205e-01:2.0791707098173773e+00:4.1656491360055792e-01:2.6790650009829422e+00:4.2231410476734682e-01:3.0070850221291723e+00:4.4533529738620475e-01:3.9219252702771490e+00 + CVs 20 + -5.9284968955106640e-03 1.2908819928050802e-01 -3.1764322170637488e-02 + -2.6339220135678257e-02 2.4822585363404615e-01 -7.8594973928745926e-02 + -6.3134108163014624e-02 3.6917719977596153e-01 -1.1195175607374175e-01 + -1.1518709409650579e-01 4.8657598171530969e-01 -1.2892665446492238e-01 + -1.8165241306735516e-01 5.9770638045011615e-01 -1.2887863413564793e-01 + -2.5874427359755714e-01 7.0096794354520842e-01 -1.0978979438009003e-01 + -3.4080257667236047e-01 7.9577145890227730e-01 -6.8933304593793002e-02 + -4.2194224026214056e-01 8.8185654423654003e-01 -4.1732862177365337e-03 + -4.9572121273128944e-01 9.5903271472528706e-01 8.5480323472043873e-02 + -5.5381827841151499e-01 1.0275506049491769e+00 1.9915929828079693e-01 + -5.8706688645779870e-01 1.0884221927162070e+00 3.3345504495841710e-01 + -5.8737510529739501e-01 1.1435291959636786e+00 4.8185053871544992e-01 + -5.4982697548757353e-01 1.1954841477099416e+00 6.3554510360811767e-01 + -4.7540575973595223e-01 1.2470614248729284e+00 7.8621053371695948e-01 + -3.7133001822609074e-01 1.3006434446132566e+00 9.2942230697654837e-01 + -2.4636638914422015e-01 1.3575674320223166e+00 1.0634328610100461e+00 + -1.0651045261309688e-01 1.4175898845558983e+00 1.1824760636604803e+00 + 4.2173136960046764e-02 1.4789515965078577e+00 1.2790675693112852e+00 + 1.4683866559017766e-01 1.5467086045535474e+00 1.4342419593685514e+00 + id 12671 + loc 3.0175936222076416e-01 9.4368970394134521e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4974596519641674e-01:2.6330518816458909e-01:1.7843157231521589e-01:3.6071843723989022e-01:1.1950801871997181e+00:2.4624516987689801e-01:2.0017950994233571e+00:2.8164849783365875e-01:3.0033686393938233e+00:4.4974146773676482e-01:3.6786388435929780e+00 + CVs 20 + 3.0152742540317629e-01 2.8738911893884728e-01 -5.0229027298196033e-02 + 6.0849760519601093e-01 5.8402352994068052e-01 -9.9046450068367070e-02 + 9.2334795462915464e-01 8.8623445038356985e-01 -1.4895684002752316e-01 + 1.2496455039421137e+00 1.1838821089283369e+00 -2.1522398801411108e-01 + 1.5904874099742263e+00 1.4642397608672177e+00 -3.2160470602491575e-01 + 1.9441222913783645e+00 1.7121496741358762e+00 -4.9420381397782676e-01 + 2.2995428623488312e+00 1.9078194390498091e+00 -7.5087531411145703e-01 + 2.6376831901197355e+00 2.0313989050407328e+00 -1.0906413691942831e+00 + 2.9413426645763541e+00 2.0693264759803940e+00 -1.4933202849041356e+00 + 3.2053582266313061e+00 2.0187391201320528e+00 -1.9249225884393177e+00 + 3.4347502967546126e+00 1.8831428426291543e+00 -2.3546669173686725e+00 + 3.6305581234975404e+00 1.6649089202964649e+00 -2.7664579494730690e+00 + 3.7755045076159353e+00 1.3741077256052741e+00 -3.1638086777177095e+00 + 3.8259855176870099e+00 1.0433015117513151e+00 -3.5781129056612655e+00 + 3.7264348535294283e+00 7.1649441842189199e-01 -4.0342604273595084e+00 + 3.4521395462256126e+00 4.4746256343599644e-01 -4.5092052611427373e+00 + 3.0195373463461133e+00 2.8543484695514110e-01 -4.9577582230865227e+00 + 2.5690107758288172e+00 2.3413867165040969e-01 -5.3393095062758418e+00 + 2.5113230852932809e+00 1.7027402767109256e-01 -5.6456609072871187e+00 + id 12672 + loc 6.9564598798751831e-01 9.3927091360092163e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1726693802651865e-01:4.1726276535713841e-01:3.2483028549958437e-01:3.9466829957009431e-01:1.0126561311417550e+00:3.8445300938146515e-01:1.8632254707545330e+00:3.4453177346019098e-01:2.1045883130769658e+00:3.1192790237412132e-01:2.9282765604543597e+00:3.5056104352508888e-01:3.7667147994763512e+00 + CVs 20 + 2.0746736423240253e-01 3.6330460810341031e-01 -4.0837777720814056e-01 + 4.0882382970894265e-01 7.2386219206610902e-01 -7.9102778980594046e-01 + 6.1681119320460609e-01 1.0641757029103782e+00 -1.1462049146349584e+00 + 8.3713121988778205e-01 1.3668835454179475e+00 -1.4747266470440616e+00 + 1.0679768056573642e+00 1.6111733272168443e+00 -1.7759356610014185e+00 + 1.3016714100267612e+00 1.7781624556768771e+00 -2.0479324051324852e+00 + 1.5284902604018671e+00 1.8639315572729849e+00 -2.2866239249346085e+00 + 1.7439738997153513e+00 1.8844678125217942e+00 -2.4906367919072214e+00 + 1.9517902525141886e+00 1.8623823076895802e+00 -2.6667833362409006e+00 + 2.1606397022889197e+00 1.8115084331868485e+00 -2.8270586683787284e+00 + 2.3791897783173201e+00 1.7327797563936866e+00 -2.9809024718002761e+00 + 2.6119880327103946e+00 1.6184279338755525e+00 -3.1328036334051959e+00 + 2.8547510352314265e+00 1.4610550521961398e+00 -3.2805430813305931e+00 + 3.0988380115020315e+00 1.2650250584854452e+00 -3.4167716453740580e+00 + 3.3468139651496176e+00 1.0328350171406835e+00 -3.5431894453213593e+00 + 3.6074513624140963e+00 7.2693582605057716e-01 -3.6964191891825995e+00 + 3.8470731990324292e+00 3.0348551413089586e-01 -3.9392441682273320e+00 + 3.9810232428560139e+00 -1.8326414647651501e-01 -4.3063896001921771e+00 + 3.9062050244766398e+00 -4.6777666650550853e-01 -4.5912354772220327e+00 + id 12673 + loc 9.4590878486633301e-01 7.1818053722381592e-02 406 + blend 0.0000000000000000e+00 + interp 5.3880283601883827e-01:3.5481378420204673e-01:1.9910127411067968e-01:3.7824560717152150e-01:9.3719150172918209e-01:3.4180693180051280e-01:1.3596676147459474e+00:5.3879744799047813e-01:1.9964193812725228e+00:4.1995300351702108e-01:2.4260024329723100e+00:3.2024517627719351e-01:2.9436459517713489e+00:2.7705242440239902e-01:3.3879176287591246e+00 + CVs 20 + -8.8865332628944055e-02 1.8667077168260732e-01 7.2731102651837909e-05 + -1.3339472047960238e-01 3.2901260552297440e-01 -3.6972867163888257e-02 + -1.7927829450528004e-01 4.6285557694114432e-01 -7.9727851296569091e-02 + -2.4201151193711121e-01 5.9631224983431497e-01 -1.1670685289291224e-01 + -3.2232018351976111e-01 7.2782649553968026e-01 -1.4719174770219665e-01 + -4.1918560584616826e-01 8.5582045883410296e-01 -1.7063823998355779e-01 + -5.2910807274954075e-01 9.7883686210998733e-01 -1.8728872779956224e-01 + -6.4669805142793424e-01 1.0965110934761051e+00 -1.9838241902666032e-01 + -7.7003089021050708e-01 1.2109420072204218e+00 -2.0425701732164880e-01 + -9.0578419284274347e-01 1.3254532028801189e+00 -2.0202730290756088e-01 + -1.0603768534486189e+00 1.4402822478750772e+00 -1.8722968605857659e-01 + -1.2264006922058566e+00 1.5532255128279395e+00 -1.5841774612416770e-01 + -1.3916611978042615e+00 1.6649519995326481e+00 -1.1777577334863976e-01 + -1.5539498012837123e+00 1.7774856634227985e+00 -6.7327138641104844e-02 + -1.7180751743867075e+00 1.8908112691386791e+00 -7.8117936174356695e-03 + -1.8860868441638616e+00 2.0037962329151897e+00 6.0499449816437512e-02 + -2.0554008685448206e+00 2.1156030903806951e+00 1.3763872000997734e-01 + -2.2203431314691486e+00 2.2253023242534957e+00 2.2174646063618653e-01 + -2.3210258795868857e+00 2.3389197916871973e+00 2.8023498643084332e-01 + id 12674 + loc 1.9268105924129486e-01 9.8639123141765594e-02 411 + blend 0.0000000000000000e+00 + interp 4.3910632560275259e-01:3.4859285868308998e-01:3.1862843674258323e-01:2.7246674499017898e-01:1.0523768387950583e+00:3.5230448765996975e-01:1.9667979692211603e+00:2.8966184577162174e-01:2.5941157233300167e+00:3.2011825522977888e-01:3.1627535647852714e+00:4.3910193453949659e-01:3.9707568917791720e+00 + CVs 20 + -2.5604581447671426e-01 2.4849725500195952e-01 -6.6212955257089690e-01 + -4.6950848294205511e-01 4.0671071667128644e-01 -1.1687513742112114e+00 + -6.6292062835121845e-01 5.4759443403927033e-01 -1.6660950165812780e+00 + -8.4853869876651644e-01 6.8749537739293065e-01 -2.2023805915793337e+00 + -1.0486571231094346e+00 8.0154237519092419e-01 -2.7658333325185960e+00 + -1.2975695385128510e+00 8.5964053826085673e-01 -3.3408237289209439e+00 + -1.6235373816273564e+00 8.3238017462370562e-01 -3.9008584018639945e+00 + -2.0297392456043872e+00 6.9730622508017182e-01 -4.4111454202882321e+00 + -2.4924470199718183e+00 4.4314828878366530e-01 -4.8457015004825346e+00 + -2.9702224240716766e+00 6.6941405159598677e-02 -5.1928543139234176e+00 + -3.4070054469295377e+00 -4.2250477793015540e-01 -5.4529642118413113e+00 + -3.7696989613873804e+00 -9.9707814490778546e-01 -5.6234437804766468e+00 + -4.0825117489424274e+00 -1.6149086225506983e+00 -5.7055941711867932e+00 + -4.3995251571368756e+00 -2.2390468120814475e+00 -5.7116182926161141e+00 + -4.7665781138129670e+00 -2.8487936379344183e+00 -5.6600019873841170e+00 + -5.2104106940481127e+00 -3.4498703957136851e+00 -5.5772039095132486e+00 + -5.7237363985527052e+00 -4.0694334023606835e+00 -5.4982425483449475e+00 + -6.2626385038596526e+00 -4.7237458986165981e+00 -5.4533285785457046e+00 + -6.7754542677488683e+00 -5.3828674454567533e+00 -5.4275423104309510e+00 + id 12675 + loc 9.7282612323760986e-01 2.7189385890960693e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2180410431172605e-01:2.5608674485222910e-01:1.1586850798497639e-02:4.2179988627068293e-01:7.2483536349039424e-01:3.8526671820538927e-01:1.0268891543640966e+00:2.1928648957441310e-01:1.8614578362600231e+00:3.2965511437785400e-01:2.7200435323192118e+00:2.5194640794896439e-01:3.0636086870887915e+00 + CVs 20 + -4.4798577224062108e-02 4.4876819257541611e-01 -1.9612097388497235e-01 + -1.3693044381264449e-01 7.7558490012784076e-01 -2.6928344491873557e-01 + -2.4552419237989473e-01 1.0724115093316433e+00 -2.9934556496865145e-01 + -3.4223123547326550e-01 1.3448424916154322e+00 -3.2440728851377520e-01 + -4.2728169250869952e-01 1.5732102435031958e+00 -3.4181455040765424e-01 + -4.9817156372097487e-01 1.7239710488724493e+00 -3.5758189751612590e-01 + -5.4866820844898923e-01 1.7635818811229949e+00 -3.9900499121820965e-01 + -5.7477039009959452e-01 1.6954118365600861e+00 -5.3262658443606292e-01 + -5.9077604516582904e-01 1.6141818097701979e+00 -8.2959146313327281e-01 + -6.3173032194247858e-01 1.6656801336447280e+00 -1.2029082366391779e+00 + -6.9967501053094594e-01 1.8212527602120168e+00 -1.4588438404599238e+00 + -7.6470313590435068e-01 1.9608812081525397e+00 -1.5619684325571888e+00 + -8.0752850905793283e-01 2.0364731141094539e+00 -1.5657304786753916e+00 + -8.2195754641507157e-01 2.0514030825323832e+00 -1.5173220920995047e+00 + -8.1127707714011799e-01 2.0370273285195100e+00 -1.4471183276331208e+00 + -7.9024522108956496e-01 2.0711488576214867e+00 -1.3675743862953791e+00 + -7.7427354724488806e-01 2.2408165491083007e+00 -1.2411507586022623e+00 + -7.5363711371390596e-01 2.4010128128003405e+00 -1.0527796980511379e+00 + -6.9462349795057210e-01 2.0346879679583005e+00 -1.2160109176612233e+00 + id 12676 + loc 8.3889722824096680e-01 6.7734962701797485e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5242873226574065e-01:4.5242420797841804e-01:8.0821630230000552e-02:4.0357394394649387e-01:7.7341302918635180e-01:4.5186326989534636e-01:1.3661280943731045e+00:3.9541347467588200e-01:2.0989947399517654e+00:3.5052172578223367e-01:2.9830232291593308e+00:3.9590971897990351e-01:3.7255591025842030e+00 + CVs 20 + -2.8498607055464233e-02 2.9612380513576286e-01 1.4492329496023931e-01 + -3.4583563382486505e-02 5.3061609451262470e-01 1.8798499508084568e-01 + -5.5507991480264612e-02 7.5311365696379484e-01 2.0801413042986783e-01 + -1.0406387945017508e-01 9.7261712352916452e-01 2.2322470522836774e-01 + -1.8038061591528037e-01 1.1807052431904355e+00 2.2579639478033670e-01 + -2.8482703240969925e-01 1.3649565931014951e+00 2.0725573007083220e-01 + -4.1575131541629895e-01 1.5107113458941837e+00 1.6178978056228988e-01 + -5.6722681781506590e-01 1.6044053992729390e+00 8.9493137537914547e-02 + -7.2722920504082289e-01 1.6334845536255167e+00 -6.0299718810843395e-03 + -8.7462961791731531e-01 1.5856367925098485e+00 -1.1991880590930915e-01 + -9.8117278403177755e-01 1.4584341295785757e+00 -2.4262281125130514e-01 + -1.0293999310861974e+00 1.2717394309014902e+00 -3.5976278145795959e-01 + -1.0305491514696059e+00 1.0559739145693334e+00 -4.6195324630076562e-01 + -1.0171790517258972e+00 8.2896590449118301e-01 -5.5142276064650897e-01 + -1.0175569508461242e+00 5.8978145283133954e-01 -6.3553243621366728e-01 + -1.0312434090324363e+00 3.3292592796073756e-01 -7.1625088485311106e-01 + -1.0422520747137023e+00 6.5670405380345021e-02 -7.9498723199993759e-01 + -1.0486416599062611e+00 -1.9373236984568798e-01 -8.8456303073341647e-01 + -1.1498367813068926e+00 -4.6697596738311914e-01 -9.7335622059071281e-01 + id 12677 + loc 1.0735584795475006e-01 2.5898438692092896e-01 409 + blend 0.0000000000000000e+00 + interp 4.9607476435000958e-01:4.9606980360236608e-01:4.7809668397744343e-01:2.6970531179438795e-01:1.0301517557041993e+00:2.5395311858845870e-01:1.9692821182859392e+00:2.8257471081122670e-01:2.6031589123606382e+00:4.7925181439502912e-01:3.1760876964045273e+00:3.7018130488970169e-01:3.9736839796230807e+00 + CVs 20 + -2.5808110031295711e-01 2.1797250439846932e-01 -3.3335141093844656e-01 + -4.9418956373826955e-01 4.0957532600177027e-01 -6.2074639624790884e-01 + -7.3221134379537178e-01 6.0212364546339237e-01 -9.0543524559622945e-01 + -9.8577999382763581e-01 7.9527786039316184e-01 -1.1942932938272754e+00 + -1.2709245634655677e+00 9.6948848410528488e-01 -1.4724261308500932e+00 + -1.6089038267665763e+00 1.1065308766296826e+00 -1.7256248127581824e+00 + -2.0189510779750526e+00 1.1890336018695296e+00 -1.9472072771501898e+00 + -2.5125712424225011e+00 1.1900819682737480e+00 -2.1464995208229700e+00 + -3.0747602515092280e+00 1.0716349356144728e+00 -2.3468994323805306e+00 + -3.6524392724449162e+00 7.9646324875628027e-01 -2.5655775398613887e+00 + -4.1701293927502734e+00 3.5585291959527976e-01 -2.7963783326423899e+00 + -4.5977758147796859e+00 -1.8190796225782413e-01 -3.0222160280270320e+00 + -4.9910278550191434e+00 -7.0380585765521486e-01 -3.2438767091588456e+00 + -5.4031163704841232e+00 -1.1246144228745012e+00 -3.4734680908287321e+00 + -5.8258406277560919e+00 -1.4169117692430535e+00 -3.7229350638738792e+00 + -6.2239181186970844e+00 -1.6297805716636582e+00 -4.0130904726176624e+00 + -6.5772557996982988e+00 -1.8269373643180258e+00 -4.3603292173845674e+00 + -6.8804887400878387e+00 -2.0342753717592430e+00 -4.7338902077971374e+00 + -7.1319404148559267e+00 -2.2535018462849439e+00 -5.0565183040524637e+00 + id 12678 + loc 1.9334864616394043e-01 4.9213379621505737e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0593221165569032e-01:3.8899847979641711e-01:2.2082715656440943e-01:2.8190801429317153e-01:1.1090405753085091e+00:2.6225276950551957e-01:2.0311657297805641e+00:2.6695143065337901e-01:2.9903052545548445e+00:4.0592815233357377e-01:3.5773093692263944e+00 + CVs 20 + 1.6129178086284124e-01 3.6431186610591171e-01 -1.6747286494997415e-01 + 2.4070709167433668e-01 7.0208479394085710e-01 -3.4762431515085568e-01 + 2.7190542687493269e-01 1.0380084533198455e+00 -5.3371466342427187e-01 + 2.5227093346857266e-01 1.3800103296289181e+00 -7.2904719711287846e-01 + 1.5807059268229762e-01 1.7076796421461191e+00 -9.3481622398217756e-01 + -3.4726442719733908e-02 1.9877235762037935e+00 -1.1453931042434187e+00 + -3.3842832649228072e-01 2.1709709502284973e+00 -1.3413426183740076e+00 + -7.3193547622290733e-01 2.2038871358736265e+00 -1.4845509993567629e+00 + -1.1470140864952973e+00 2.0615492435116494e+00 -1.5311080110311768e+00 + -1.4976602212322465e+00 1.7739653470658081e+00 -1.4632776874278637e+00 + -1.7286917619190807e+00 1.4012341536935469e+00 -1.2960157449038097e+00 + -1.8363335167569881e+00 1.0095603638415880e+00 -1.0692730038484426e+00 + -1.8811090771273755e+00 6.4280063520676611e-01 -8.2602329216388226e-01 + -1.9588891873510297e+00 3.2367778146967219e-01 -5.7333271324212387e-01 + -2.1930493445090637e+00 1.2501035055437693e-01 -3.0482108900373839e-01 + -2.6545880001925521e+00 2.4911810019851144e-01 -6.9335407157881390e-02 + -3.0685790736780243e+00 9.0815228764334299e-01 -4.4292701848003407e-03 + -2.7490063153511484e+00 1.9610550277170331e+00 -2.3703466761064190e-01 + -2.8425451933472723e+00 2.1158559167232234e+00 -1.3135707892501086e-01 + id 12679 + loc 9.6881735324859619e-01 2.9573023319244385e-01 413 + blend 0.0000000000000000e+00 + interp 4.9284289786838581e-01:4.9283796943940716e-01:3.7985284577999945e-01:3.7922090403900433e-01:1.0458616133416812e+00:4.3911765224854993e-01:1.7139836519575467e+00:3.3815143145274085e-01:2.0013609701160959e+00:3.7559512565757380e-01:2.5438061553584910e+00:3.5283215497415171e-01:3.0049565971061867e+00:3.3323747296431921e-01:3.9974267911002057e+00 + CVs 20 + -1.1641790854615750e+00 2.9800140498715388e-01 2.0364124465178673e-01 + -1.9269471361472155e+00 3.9732410328232315e-01 3.3322957764222549e-01 + -2.5653217273801578e+00 4.1225090872853476e-01 4.3009499515887162e-01 + -3.2068372597687667e+00 3.9435443288733751e-01 5.1572874228999355e-01 + -3.8421827259265195e+00 3.3893319916471709e-01 5.9645886519401092e-01 + -4.4679740944181807e+00 2.4239728832497603e-01 6.7897434537825463e-01 + -5.0844844102513260e+00 1.0092453512321398e-01 7.6816074920270250e-01 + -5.6919622104860590e+00 -9.1840130523411667e-02 8.6376680973669528e-01 + -6.2868722277164277e+00 -3.4699874868342662e-01 9.5836397142216190e-01 + -6.8571662263611834e+00 -6.7655564444488003e-01 1.0414672574889834e+00 + -7.3804884552939107e+00 -1.0866103346415157e+00 1.1079253249837262e+00 + -7.8316996467312778e+00 -1.5744139101451271e+00 1.1593600443950942e+00 + -8.1936558365063892e+00 -2.1285006196291727e+00 1.1966023192490813e+00 + -8.4580972629469500e+00 -2.7294986923978537e+00 1.2199845430946832e+00 + -8.6196982275073122e+00 -3.3527867943050156e+00 1.2414397898122365e+00 + -8.6756990659321644e+00 -3.9725380444653879e+00 1.2786188242913137e+00 + -8.6292364561256090e+00 -4.5669506164128242e+00 1.3371942722870389e+00 + -8.4924449255158265e+00 -5.1173973415897214e+00 1.4142733997484731e+00 + -8.3473364418072720e+00 -5.6322084215125487e+00 1.5151923491193875e+00 + id 12680 + loc 7.2451537847518921e-01 4.6353422105312347e-02 1084 + blend 0.0000000000000000e+00 + interp 4.1015270214657862e-01:2.5817039163884747e-01:7.2724663750825225e-01:3.5921411711099588e-01:1.7305009569745531e+00:2.1263647940444277e-01:2.1987951867452900e+00:4.1014860061955716e-01:3.0960751821601855e+00:3.0677407113739158e-01:3.9116555255267964e+00 + CVs 20 + 2.8172004270407619e-01 3.0004593582517453e-01 -1.7754844182849222e-01 + 5.1093544176545502e-01 5.7749093626253134e-01 -3.5253890594201165e-01 + 6.8937337996318315e-01 8.4657127884009409e-01 -5.4119592541467554e-01 + 8.5888780451588853e-01 1.1073782827817880e+00 -7.0231142152323600e-01 + 1.0536390734919885e+00 1.3359988262869624e+00 -7.8330057298950595e-01 + 1.2731047369912734e+00 1.5109898149725436e+00 -7.7378793789237110e-01 + 1.5069058504969082e+00 1.6282828272812577e+00 -6.8338870566515797e-01 + 1.7433375427022857e+00 1.6843136193079813e+00 -5.0550554229324418e-01 + 1.9394836320449795e+00 1.6679092230567347e+00 -2.3900344681956831e-01 + 2.0465436571415250e+00 1.5886818169045029e+00 6.5012085048551382e-02 + 2.0722473121507790e+00 1.4763708662935828e+00 3.6154868509763127e-01 + 2.0431652238574709e+00 1.3496775578404714e+00 6.4867630243010477e-01 + 1.9723444293210162e+00 1.2157129518187313e+00 9.0491829864777507e-01 + 1.8854410235653531e+00 1.0974566782919448e+00 1.0444302544362805e+00 + 1.8076382649651843e+00 1.0108800832448090e+00 9.9205619926071598e-01 + 1.7021187702202232e+00 8.5858109056596610e-01 7.4034857080361283e-01 + 1.4726654840645981e+00 3.9010278689067623e-01 4.0247226631046623e-01 + 1.1598243166467508e+00 -3.1618626436547587e-01 4.3237171375094785e-01 + 1.2407822513607234e+00 -3.5325271602467923e-01 5.7111348212809188e-01 + id 12681 + loc 1.7199850082397461e-01 7.1081387996673584e-01 403 + blend 0.0000000000000000e+00 + interp 4.7578632334961823e-01:3.5810535234609497e-01:2.0511618955222988e-01:4.2824370219792973e-01:9.3584297564729835e-01:3.8024294168104045e-01:1.3169591653302053e+00:4.3581912099426801e-01:1.9807120171898909e+00:2.9445417391292456e-01:2.3046074942019947e+00:4.0848305204765628e-01:2.9450489948342926e+00:4.2873762456516357e-01:3.1528710259650294e+00:4.7578156548638478e-01:3.9214093984368641e+00 + CVs 20 + -2.5990117537963806e-02 1.5850476986172518e-01 -5.2493325158118061e-02 + -5.7624797915681619e-02 3.0482573988950079e-01 -1.1155777272105666e-01 + -9.3609005083458319e-02 4.4609562869929942e-01 -1.7602091534410688e-01 + -1.3440929578505650e-01 5.8644053851914157e-01 -2.4485558044758282e-01 + -1.8541147761012733e-01 7.2512802623020323e-01 -3.1826172687885640e-01 + -2.5138722433789956e-01 8.6062561340605725e-01 -3.9498160566384932e-01 + -3.3660017583604612e-01 9.9068865988326882e-01 -4.7177449601198240e-01 + -4.4404745255765893e-01 1.1124614077929986e+00 -5.4382850122883541e-01 + -5.7427168897027636e-01 1.2228765859638973e+00 -6.0549313262596782e-01 + -7.2515216873823540e-01 1.3180030675723509e+00 -6.5135482532411770e-01 + -8.9249503958272758e-01 1.3913452293794846e+00 -6.7773183503156254e-01 + -1.0703381172045856e+00 1.4343133430104738e+00 -6.8340919631615360e-01 + -1.2521108527144196e+00 1.4396622435963020e+00 -6.6942481315397329e-01 + -1.4325492419711705e+00 1.4036357765181737e+00 -6.3601717357402765e-01 + -1.6059188684390917e+00 1.3247259418617836e+00 -5.7988569917734412e-01 + -1.7555032249941911e+00 1.2037822246460619e+00 -5.0759810773353631e-01 + -1.8665484822320513e+00 1.0502625818485860e+00 -4.4364060821047202e-01 + -1.9248047006571345e+00 8.7622190414732914e-01 -4.1480285832200947e-01 + -2.0290980464074848e+00 6.8715072612818873e-01 -3.4632533255552211e-01 + id 12682 + loc 3.2262212038040161e-01 1.3745422661304474e-01 372 + blend 0.0000000000000000e+00 + interp 4.5417151836435743e-01:3.2085089446186038e-01:6.0438827136814721e-01:4.5416697664917383e-01:1.9999987378348436e+00:2.8643923446334713e-01:2.8307481636702549e+00:3.8924113266106858e-01:3.1812299824815531e+00:2.6518213039236682e-01:3.9042875335094922e+00 + CVs 20 + 1.3052752449194160e-01 6.1144139649175278e-01 6.1952494352633469e-01 + 2.7847515982542304e-01 1.0680021904115313e+00 1.2352501821542603e+00 + 3.9097161201618313e-01 1.3970671264562005e+00 1.9076428278523945e+00 + 3.6370016526317889e-01 1.6845473100492911e+00 2.5760705704011553e+00 + 8.4223314095425272e-02 2.0206789141012154e+00 3.0606323920427698e+00 + -4.3947977055002979e-01 2.3432715187472359e+00 3.1390131744636434e+00 + -9.6925335700569581e-01 2.4803001659889374e+00 2.8404052304095444e+00 + -1.4096867296597246e+00 2.4159178587149732e+00 2.3502331634476272e+00 + -1.7499373034266319e+00 2.1485928728632677e+00 1.7394857644710067e+00 + -1.9376475858770699e+00 1.6664938752434786e+00 1.0783268466492455e+00 + -1.9218950835245965e+00 1.0079236996905825e+00 4.5085142295645475e-01 + -1.6988469351061461e+00 2.7585806956839043e-01 -1.3220711227733678e-01 + -1.3348189920983771e+00 -3.8381387409272738e-01 -7.9138139990811973e-01 + -9.8326106310367845e-01 -7.4564175035880553e-01 -1.7048600946156438e+00 + -8.2420438151167874e-01 -5.9185788454575883e-01 -2.8458548382260487e+00 + -9.5113114304871915e-01 3.4725595671948994e-02 -4.0177783347246718e+00 + -1.4411728250996541e+00 1.0087722477974213e+00 -4.9883163894943729e+00 + -2.1914216001267768e+00 2.0085710379919082e+00 -5.5621556063700623e+00 + -2.8125349550300243e+00 2.6224186120739210e+00 -5.9593457341125049e+00 + id 12683 + loc 4.0897168219089508e-02 4.2717233300209045e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5037543678410954e-01:2.4655357804323133e-01:2.9882768860047793e-01:3.5037193302974173e-01:1.4064396500879452e+00:2.2302176444050453e-01:2.1211149592643621e+00:3.3375208953678503e-01:3.0485702685527087e+00:2.9237469591826054e-01:3.8048356475546830e+00 + CVs 20 + -2.1939840968048593e-01 2.0005522373965975e-01 -7.8486432651896268e-02 + -4.1823342535440589e-01 4.1871485363434535e-01 -1.6784452563934835e-01 + -6.1387191902755389e-01 6.2978900490829215e-01 -2.6393383694180739e-01 + -8.3061519756799407e-01 8.1469553363355718e-01 -3.6819134300803380e-01 + -1.0721681999971591e+00 9.6447323611592273e-01 -4.8193084777322176e-01 + -1.3396888247613929e+00 1.0682817450806874e+00 -6.0555338370114209e-01 + -1.6285942561545834e+00 1.1137982293980995e+00 -7.3820770742135400e-01 + -1.9272995059419324e+00 1.0910378147101107e+00 -8.7589985700991191e-01 + -2.2222551280914473e+00 9.9633380415952955e-01 -1.0093874039192827e+00 + -2.5013411359496014e+00 8.3142577329140144e-01 -1.1240845647925257e+00 + -2.7487240792562440e+00 6.0482267288809699e-01 -1.2043788590636508e+00 + -2.9450622617991682e+00 3.3279139133058999e-01 -1.2385230098681967e+00 + -3.0830602395322075e+00 2.7840273935113125e-02 -1.2228297899585296e+00 + -3.1862939193487607e+00 -3.2102474094946776e-01 -1.1551459300727753e+00 + -3.3308316567610192e+00 -7.5224720928095268e-01 -1.0158331926926700e+00 + -3.6688149388179685e+00 -1.2661844936969402e+00 -7.6877486409299856e-01 + -4.3323057923562427e+00 -1.6798785815499353e+00 -4.3790754440389312e-01 + -5.2395763547021179e+00 -1.7137244642270890e+00 -1.3290567076763710e-01 + -5.5087862178800702e+00 -1.7508099447651582e+00 -3.2376913573614108e-02 + id 12684 + loc 2.9915043711662292e-01 2.6729410886764526e-01 406 + blend 0.0000000000000000e+00 + interp 4.1731161586776755e-01:3.1502067724807381e-01:5.3302808654857081e-01:3.8695688471805789e-01:1.3106803390008861e+00:2.8422569001774228e-01:1.9652870482608154e+00:3.3331538996443982e-01:2.7302688742265269e+00:3.8878691444914659e-01:3.1782958968392307e+00:4.1730744275160891e-01:3.8469707383877774e+00 + CVs 20 + -4.5493301229044644e-02 1.5158350915968688e-01 -1.2538034047341343e-02 + -8.8879386160624130e-02 2.8201570401358650e-01 1.7133894277634648e-02 + -1.0785461142499310e-01 4.3440395033574003e-01 6.0705441806646554e-02 + -1.0387444996586352e-01 6.1372823848322899e-01 7.9080009867811302e-02 + -7.4798439796172858e-02 8.1224490645175684e-01 6.3042352263528834e-02 + -2.0402433584121540e-02 1.0201813440636611e+00 4.7080485718496434e-03 + 5.7232791576397296e-02 1.2260578790477008e+00 -1.0207890486901894e-01 + 1.5508323030177040e-01 1.4177189408091153e+00 -2.6021467765998041e-01 + 2.7186671706277077e-01 1.5840260029873861e+00 -4.6807944573133675e-01 + 4.0502173354752685e-01 1.7151493938933400e+00 -7.2177005853713072e-01 + 5.4289890976533117e-01 1.8017596103009108e+00 -1.0184964026181134e+00 + 6.6665032304189720e-01 1.8363636257983513e+00 -1.3544116608865138e+00 + 7.6245950185296296e-01 1.8166249730664572e+00 -1.7205737635147960e+00 + 8.2367322304638901e-01 1.7459980617010926e+00 -2.1040185963109690e+00 + 8.4184456956118947e-01 1.6317383753825152e+00 -2.4903358757304570e+00 + 8.0708549017447073e-01 1.4826649434440937e+00 -2.8657582474220868e+00 + 7.1741963080542892e-01 1.3074572244422715e+00 -3.2184028201473422e+00 + 5.8049851981331368e-01 1.1181508773830107e+00 -3.5373674682663250e+00 + 4.6472026319819393e-01 9.5467408919072194e-01 -3.8428295315397265e+00 + id 12685 + loc 2.4127590656280518e-01 3.1308534741401672e-01 411 + blend 0.0000000000000000e+00 + interp 4.4357012217048414e-01:3.9571246505578778e-01:3.8985349887314114e-01:3.1195624949524636e-01:9.9991082058540648e-01:4.4072498523436832e-01:1.9274481709075397e+00:3.4396457012808390e-01:2.6335542249682065e+00:4.4356568646926248e-01:3.1869572154912853e+00:3.5175112890708166e-01:3.9884224880280872e+00 + CVs 20 + -2.0448961323027821e-02 1.5460724846976182e-01 -6.4744957466304065e-01 + -4.6155868093295083e-02 2.1597522423196797e-01 -1.1157441258622931e+00 + -4.7049773113527545e-02 2.3443966185550269e-01 -1.5427020594163936e+00 + -5.2155147755749559e-03 2.2614425392133586e-01 -1.9770467182284326e+00 + 7.5199217699899068e-02 1.8496491031440832e-01 -2.4081950761335680e+00 + 1.8076851625118665e-01 1.0886570759900771e-01 -2.8275545111108857e+00 + 2.9366293286886913e-01 7.9358749722668875e-04 -3.2309207481957336e+00 + 3.9686403478019261e-01 -1.3471356794026534e-01 -3.6152303922140909e+00 + 4.7783582374144018e-01 -2.9465425270125833e-01 -3.9776862937991138e+00 + 5.2616839666505766e-01 -4.7511056111599359e-01 -4.3109820357253144e+00 + 5.3088207934653575e-01 -6.7019736953163211e-01 -4.6029533706316439e+00 + 4.8518442340181550e-01 -8.8076189425215978e-01 -4.8506740638601427e+00 + 3.8980294543831273e-01 -1.1156057890498816e+00 -5.0623070321598043e+00 + 2.5072084727163346e-01 -1.3760903520739853e+00 -5.2426431095796371e+00 + 7.6755370069044926e-02 -1.6489359195701920e+00 -5.3891588305213851e+00 + -1.2061000827524912e-01 -1.9187552619002917e+00 -5.4992517473152223e+00 + -3.2603320755688120e-01 -2.1820853450712239e+00 -5.5728253920257869e+00 + -5.2300249245907970e-01 -2.4443897055936574e+00 -5.6090580966534072e+00 + -7.1516523950545763e-01 -2.8399850526781170e+00 -5.6099462940845832e+00 + id 12686 + loc 9.9842399358749390e-01 8.5940396785736084e-01 1082 + blend 0.0000000000000000e+00 + interp 4.4392382019037152e-01:4.3690808465559866e-01:4.2185109153791667e-01:3.1833386614872911e-01:1.2002288204150129e+00:2.8555680082497759e-01:1.9511768746221210e+00:3.4090415715868189e-01:2.2670985784899136e+00:4.4391938095216965e-01:2.9827502555399095e+00:3.0461920839106571e-01:3.6583108388160266e+00 + CVs 20 + -7.2130657667528172e-02 4.3486855665623270e-01 3.0354362376118765e-01 + -1.2709396040897761e-01 7.5703997407115442e-01 3.9512055764025672e-01 + -2.2242135126255205e-01 1.0402725607326446e+00 4.6449640664539760e-01 + -3.7530983542442503e-01 1.3005627142449927e+00 5.5010858830254628e-01 + -5.8525898832679379e-01 1.5257882375369547e+00 6.4302548372708712e-01 + -8.4487357563942334e-01 1.7054352847986383e+00 7.3640122372752703e-01 + -1.1403578012779036e+00 1.8334165639042361e+00 8.2652480573763631e-01 + -1.4557567358887127e+00 1.9091432940908795e+00 9.1310542529236105e-01 + -1.7770121765838267e+00 1.9358281741363765e+00 9.9744548157032009e-01 + -2.0939823861435944e+00 1.9177427859192779e+00 1.0806289902804149e+00 + -2.4012329272408124e+00 1.8576995533015941e+00 1.1623329464815770e+00 + -2.6963998767880830e+00 1.7565530963572189e+00 1.2404825496731129e+00 + -2.9740507247118786e+00 1.6172698430401469e+00 1.3124095998867329e+00 + -3.2219999681902838e+00 1.4501099566596538e+00 1.3764655015067078e+00 + -3.4335747015500235e+00 1.2662519951106097e+00 1.4341046330683604e+00 + -3.6214126543783194e+00 1.0681575727446484e+00 1.4905789107132006e+00 + -3.8058257559330060e+00 8.5584435062132269e-01 1.5541467924305026e+00 + -3.9983643331915681e+00 6.3506943199588661e-01 1.6325682810279036e+00 + -4.2181202557183646e+00 4.0338322772692731e-01 1.7295125691032078e+00 + id 12687 + loc 1.2920492887496948e-01 5.2105349302291870e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2729084188915045e-01:4.2728656898073158e-01:1.5141905405987577e-01:3.5092589092111498e-01:9.4337735446482518e-01:3.6169241477647879e-01:1.6048181095250116e+00:2.9681535244916080e-01:2.3457709385014178e+00:3.6297564812924843e-01:2.9828475806263128e+00:3.0976854019293609e-01:3.6350478357118634e+00 + CVs 20 + 2.0158913130502232e-01 2.7559648883833393e-01 -2.7584440629251344e-01 + 3.7573087636057290e-01 5.3309342054958098e-01 -5.1956273109255724e-01 + 5.4222522904620107e-01 7.7138910917580850e-01 -7.5190289925054143e-01 + 7.0813116243456331e-01 9.8939395041426570e-01 -9.8137582011821667e-01 + 8.7419653931075747e-01 1.1872127867180546e+00 -1.2092288207490376e+00 + 1.0425030274001510e+00 1.3662349406321097e+00 -1.4379836057054165e+00 + 1.2155799485425092e+00 1.5289195666258502e+00 -1.6731940476405733e+00 + 1.3950266530015827e+00 1.6770383429428719e+00 -1.9221807392614718e+00 + 1.5792220752575727e+00 1.8092280665693288e+00 -2.1931738716104121e+00 + 1.7615383953373061e+00 1.9217577574816322e+00 -2.4913944340335199e+00 + 1.9319937505942941e+00 2.0077443079965702e+00 -2.8149228353670446e+00 + 2.0809061411817185e+00 2.0552076464454396e+00 -3.1531386228159581e+00 + 2.2071934189530498e+00 2.0564320297723215e+00 -3.4890027392280372e+00 + 2.3155357876750693e+00 2.0181144104040336e+00 -3.8056436807506104e+00 + 2.4128528627867443e+00 1.9592593754264498e+00 -4.0955839523406077e+00 + 2.5103008591786891e+00 1.9019047950944290e+00 -4.3669189470251828e+00 + 2.6169843884232509e+00 1.8476420557684938e+00 -4.6262276652216467e+00 + 2.7352302457256603e+00 1.7596841524801023e+00 -4.8282952356745437e+00 + 2.8862954220740895e+00 1.5337498744887790e+00 -4.7702569664388728e+00 + id 12688 + loc 1.2876478955149651e-02 6.5188318490982056e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9285430889666521e-01:3.6317228909101312e-01:2.9380263624079195e-04:4.9284938035357628e-01:7.1005287862845479e-01:3.0161101706488913e-01:1.1539342046967980e+00:4.5905996363494622e-01:1.8255478436632633e+00:4.0120836707947721e-01:2.0501308903179902e+00:3.8700720186280441e-01:2.7748624975451550e+00:3.8515749627146845e-01:3.2582056535019421e+00 + CVs 20 + 7.9489368405093880e-02 3.3567433852167461e-01 1.8446399127153992e-01 + 1.5765436512838471e-01 6.4088724317835355e-01 2.7639313143474042e-01 + 2.4255742550627576e-01 9.5491547903900531e-01 3.3001842278914828e-01 + 3.4528392047595508e-01 1.2922275072452976e+00 3.6169902353925459e-01 + 4.7813416816447363e-01 1.6337520074319127e+00 3.5054458183494908e-01 + 6.5202798263471118e-01 1.9480974798961901e+00 2.6827758348988329e-01 + 8.6409193746650970e-01 2.1836308988002058e+00 8.4097342363918415e-02 + 1.0748385058654788e+00 2.2752516442443542e+00 -2.0601353975224046e-01 + 1.2211385726562676e+00 2.1936781758762169e+00 -5.4932361713375977e-01 + 1.2745794135256299e+00 1.9653046483651533e+00 -8.7430235428411562e-01 + 1.2446330340300606e+00 1.6263330369731330e+00 -1.1305077912337220e+00 + 1.1637585355074200e+00 1.2204486020943643e+00 -1.2937546097372508e+00 + 1.0736401418632771e+00 7.9986823936834717e-01 -1.3941619273147450e+00 + 9.9367392659026532e-01 4.2583803398198228e-01 -1.5231440003592769e+00 + 9.3795984552915901e-01 2.2742722662812653e-01 -1.8279111256024558e+00 + 9.9396624372437103e-01 4.9376475257284269e-01 -2.3370104811376118e+00 + 1.3589306290050789e+00 1.3787656166963678e+00 -2.4897085287508638e+00 + 1.7998835452372797e+00 2.0789862816675320e+00 -1.7701055858896380e+00 + 1.9332789165617281e+00 2.2505642832441795e+00 -1.8661662288701748e+00 + id 12689 + loc 6.4612042903900146e-01 5.2414643764495850e-01 1081 + blend 0.0000000000000000e+00 + interp 4.7838440572525659e-01:4.0192432808693507e-01:3.7410400003002631e-01:4.3172705237109271e-01:9.8932201799271102e-01:4.0274844823533767e-01:1.4408681313632068e+00:3.2419075135461606e-01:2.0366130032707281e+00:3.5130608015777520e-01:2.6614540339131425e+00:4.2028366612632501e-01:3.0021244444790813e+00:4.7837962188119937e-01:3.4333315638616329e+00:4.1202745730899620e-01:3.9650801092184631e+00 + CVs 20 + 6.9859802854665920e-02 5.8755055033513925e-01 4.9251241731410300e-01 + 1.9222475785942808e-01 1.0172204641905631e+00 7.7839955429706187e-01 + 3.2787529272727534e-01 1.3764719964748768e+00 1.0001838401586498e+00 + 4.6339079934201688e-01 1.6882313842048395e+00 1.1999129728865690e+00 + 5.9530451899010672e-01 1.9446499390964118e+00 1.3692704254021884e+00 + 7.1747983646317259e-01 2.1387256415687044e+00 1.5009639122516569e+00 + 8.2136811545272737e-01 2.2651776476092107e+00 1.5943676463890566e+00 + 8.9433987310582974e-01 2.3222208922141654e+00 1.6676974136201692e+00 + 9.2167011445184777e-01 2.3314561802712026e+00 1.7778050882543059e+00 + 9.4802717388697844e-01 2.3946055642919233e+00 1.9432047249787381e+00 + 1.0302985918077154e+00 2.4987752738839202e+00 2.0217663901347889e+00 + 1.1313802227433456e+00 2.5580950765258335e+00 2.0072888388385266e+00 + 1.2337203679446846e+00 2.5733969363237623e+00 1.9436941958778968e+00 + 1.3348862939980024e+00 2.5647896954724536e+00 1.8486885414514129e+00 + 1.4369828541482954e+00 2.5627727824696218e+00 1.7151230758529783e+00 + 1.5455390883050282e+00 2.5949321711861204e+00 1.4908318055362586e+00 + 1.6592634422656620e+00 2.5843277195480354e+00 1.1440539857357135e+00 + 1.7694290988668318e+00 2.4116633266979659e+00 8.5101502889717062e-01 + 1.8820453279097162e+00 2.1359746795146659e+00 8.8558912022925385e-01 + id 12690 + loc 6.3660007715225220e-01 5.1996968686580658e-02 409 + blend 0.0000000000000000e+00 + interp 5.4024079881352960e-01:3.0090858785926106e-01:4.3552839649830788e-01:3.9038170725290328e-01:9.9949245305215184e-01:5.4023539640554152e-01:1.3806177378336533e+00:2.6653826162265021e-01:2.0628944496210564e+00:4.9561018963101078e-01:2.9454834992530694e+00:4.8902577320682317e-01:3.3322394714722154e+00:3.7642003168675015e-01:3.9866975865049126e+00 + CVs 20 + -2.1345423309400491e-01 1.0311706913811752e-01 1.0860051153684160e-01 + -4.5167442035354693e-01 2.1635343356168887e-01 2.1772673247113611e-01 + -7.0183034266787803e-01 3.2602241904300755e-01 3.0278910643759460e-01 + -9.5596481424720403e-01 4.2492262077905868e-01 3.5758515646761213e-01 + -1.2099608448628640e+00 5.1088808382607431e-01 3.8710707451148807e-01 + -1.4594665667281221e+00 5.8349406077297117e-01 3.9566745713291052e-01 + -1.6983412320075211e+00 6.4378443624388582e-01 3.8560641509016669e-01 + -1.9209452071904671e+00 6.9229158915352962e-01 3.5812708437765683e-01 + -2.1312347741397129e+00 7.2956257522798840e-01 3.1431042340862003e-01 + -2.3403100069454585e+00 7.5561314698374804e-01 2.5635509164193870e-01 + -2.5567783803718820e+00 7.6593743067184572e-01 1.9044574883343421e-01 + -2.7868260905179012e+00 7.4806714521039064e-01 1.2736823043590281e-01 + -3.0325970098537880e+00 6.8701152209453697e-01 7.8796017320563044e-02 + -3.2895522135032560e+00 5.7549558726465788e-01 5.3522443397724162e-02 + -3.5456557775823203e+00 4.1766848546244972e-01 5.6308559378120460e-02 + -3.7834611655593391e+00 2.2931048643595942e-01 8.5314953290395790e-02 + -3.9948893689786522e+00 2.2876704564764205e-02 1.3282015312763132e-01 + -4.1890712342065228e+00 -2.1324937219070494e-01 1.9421128931084919e-01 + -4.3836798740131160e+00 -5.0172312925451101e-01 2.7396535137822736e-01 + id 12691 + loc 9.1933083534240723e-01 6.8200543522834778e-02 1080 + blend 0.0000000000000000e+00 + interp 5.0957687748589342e-01:3.3520216718709717e-01:5.8608825681901511e-02:4.7621751060271816e-01:4.1837219760870537e-01:5.0957178171711859e-01:9.8271873653361097e-01:3.4636930793572973e-01:1.2098697230016633e+00:4.5754334794576662e-01:1.7903404702461594e+00:4.5636962625781025e-01:2.0513675741705568e+00:3.9205726829147186e-01:2.6239350359636449e+00:2.6855231952239872e-01:3.0010886201635398e+00:3.6783792776163943e-01:3.5805748968329825e+00 + CVs 20 + -2.3108269328774050e-02 5.0428803970454106e-01 -4.8926825925456841e-01 + -9.3843666346941967e-02 9.6264348560418656e-01 -8.4467942665924878e-01 + -1.9893189523619445e-01 1.3997306856041982e+00 -1.1544168680733107e+00 + -3.6210598533045690e-01 1.8507366713524305e+00 -1.4341513339797465e+00 + -6.0261134855832632e-01 2.3130849886075864e+00 -1.6586995858274161e+00 + -9.4716160154326567e-01 2.7784709991902243e+00 -1.7857936340691623e+00 + -1.4146611367128070e+00 3.2077751697660895e+00 -1.7606503353498821e+00 + -1.9928457584689929e+00 3.5209157079164410e+00 -1.5379707640367135e+00 + -2.6192278255830157e+00 3.6153627789603404e+00 -1.1110303948462334e+00 + -3.1762693337548642e+00 3.4306436673076588e+00 -5.5726490844701715e-01 + -3.5712176338423509e+00 3.0243203317756917e+00 -1.0029078174522477e-02 + -3.8043920208898379e+00 2.5129733183621221e+00 4.4878571355861241e-01 + -3.9247817548245250e+00 1.9724657087527628e+00 8.0519309161327557e-01 + -3.9800260886189252e+00 1.4245918362172780e+00 1.0600620590876444e+00 + -4.0021058678961587e+00 8.3401040896792478e-01 1.1728202944813400e+00 + -3.9905586869587197e+00 1.3994330890088813e-01 9.8983064729547854e-01 + -3.9027480494765929e+00 -5.1597580597686965e-01 3.9231622254042664e-01 + -3.7531800421745443e+00 -9.3418600237839500e-01 -2.4532684647145397e-01 + -3.6851702818330097e+00 -1.3030237180472608e+00 -3.8890609365096018e-01 + id 12692 + loc 6.3825553655624390e-01 2.5799989700317383e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0681865789698185e-01:2.5796247306997727e-01:6.6193391459097883e-01:2.6731320407236370e-01:1.2334211721337840e+00:3.0067653360906538e-01:2.0185241416022506e+00:2.7257273218707612e-01:2.8189673717105230e+00:4.0681458971040291e-01:3.2700334348593016e+00:2.8473402842126422e-01:3.9543728786335119e+00 + CVs 20 + 9.1823532952369100e-02 3.1012610740731872e-01 -1.0146093973027610e-01 + 1.8279351283280501e-01 6.0509457072333594e-01 -1.6212926128457916e-01 + 2.4410191812365656e-01 8.9620831369222620e-01 -2.2415859975799202e-01 + 2.5350306679951390e-01 1.1719960523809998e+00 -3.0171455971764827e-01 + 2.1747805385165930e-01 1.4192493168460818e+00 -3.8446079200721051e-01 + 1.6232295228596222e-01 1.6557676893786393e+00 -4.7477123756687933e-01 + 1.2986014857419065e-01 1.9004378430504447e+00 -5.7204531650156420e-01 + 1.5157133673920903e-01 2.1365445405345564e+00 -6.7226901736041289e-01 + 2.4272301523376616e-01 2.3536446618281537e+00 -7.5229710113892001e-01 + 3.6941904567261963e-01 2.5391638390074904e+00 -7.3645577458355593e-01 + 4.6480144318758299e-01 2.6868672030481608e+00 -5.9210273184180751e-01 + 4.9673449973364103e-01 2.8033901968856485e+00 -3.2955058652122493e-01 + 4.0700582281396053e-01 2.8593204961141563e+00 2.0529200552700466e-02 + 1.3255012898284529e-01 2.8031890769601695e+00 3.4390564227072695e-01 + -2.4284884979340762e-01 2.6474612807343703e+00 5.4836239877696913e-01 + -5.3581043916204174e-01 2.4696373832927798e+00 6.2368912458535763e-01 + -6.1804710517797834e-01 2.2881238184983208e+00 4.0799698329815881e-01 + -7.0054781171211988e-01 1.8905540355027806e+00 -5.3992083399387547e-02 + -6.3620625914721429e-01 2.0366054700393579e+00 1.6126118365590714e-01 + id 12693 + loc 8.3579057455062866e-01 8.1564851105213165e-02 403 + blend 0.0000000000000000e+00 + interp 5.2193187922355355e-01:4.5058545132841255e-01:1.6300498332431013e-01:3.9632057816008892e-01:7.7628249592088328e-01:2.9826721768656489e-01:1.1109863925234358e+00:4.4136092440907138e-01:1.8047795335209909e+00:5.2192665990476139e-01:2.0816098466739223e+00:4.0208019670608974e-01:2.6886280435145418e+00:3.9395620871324055e-01:3.0471662943053137e+00:2.7365435024973878e-01:3.8513724109610452e+00 + CVs 20 + -1.5543419647869364e-01 1.2793494567119265e-01 2.5534282199732533e-01 + -2.8387977858625391e-01 2.5191151858172756e-01 4.7216314355457600e-01 + -3.9960637000915811e-01 3.9385590852452068e-01 6.6011110676238161e-01 + -5.1461232091555420e-01 5.6858959468477743e-01 8.2763968171327051e-01 + -6.4034793321557471e-01 7.8132636266054911e-01 1.0021592988202483e+00 + -7.8247707452751358e-01 1.0294889687345385e+00 1.2228651110961049e+00 + -9.1542732616395517e-01 1.3081154032739035e+00 1.5082434248699925e+00 + -9.9623283629006443e-01 1.6098297765663390e+00 1.8530593651029814e+00 + -9.8538232496661338e-01 1.9154027126745481e+00 2.2354517738395274e+00 + -8.5223620032358804e-01 2.1998913172474106e+00 2.6205459962797533e+00 + -5.8391988783690452e-01 2.4460175487591620e+00 2.9656197587435016e+00 + -1.7919487945050361e-01 2.6442800270227247e+00 3.2381571701750946e+00 + 3.4086643837003328e-01 2.7695263686962721e+00 3.4409043362316267e+00 + 9.1435639178450323e-01 2.7904600510857032e+00 3.5969499227095127e+00 + 1.4885756622716722e+00 2.6915936546561872e+00 3.6895541940551424e+00 + 2.0865678918312227e+00 2.4450941682588390e+00 3.6673131479751597e+00 + 2.7613226935801354e+00 2.0281848719250926e+00 3.5930597150098409e+00 + 3.4376080528813504e+00 1.5430943590725776e+00 3.6586232446293976e+00 + 3.8493358148852335e+00 1.2337226982839584e+00 3.8627827818682983e+00 + id 12694 + loc 5.0372830592095852e-03 5.5404007434844971e-01 406 + blend 0.0000000000000000e+00 + interp 3.8445302210452337e-01:2.2732240594790268e-01:4.9291554587813835e-01:2.2502648699262545e-01:1.4827107462072802e+00:3.7358953243540416e-01:2.0000000119210117e+00:3.8444917757430236e-01:2.8314688206885541e+00:3.4847890467645365e-01:3.6334486334942220e+00 + CVs 20 + 9.7894374100542858e-02 2.2851594537894437e-01 -8.5334295053451178e-02 + 1.0949863665448861e-01 4.1552791007226009e-01 -1.4109004400884986e-01 + 9.4208500580820476e-02 5.7137025862716107e-01 -1.7250431582932607e-01 + 8.0823809773932664e-02 7.2762641273426243e-01 -1.8639134689756820e-01 + 6.6038889994234351e-02 8.7990576649471708e-01 -1.8001742356801670e-01 + 4.8010643791227103e-02 1.0202683134107915e+00 -1.4971267715820349e-01 + 2.8396964295486826e-02 1.1367312126585569e+00 -9.0608890684951010e-02 + 1.6440549285220207e-02 1.2089123681894520e+00 2.6738499397068599e-03 + 3.8902133299565322e-02 1.1995054626162576e+00 1.2622779960116126e-01 + 1.4548604638345219e-01 1.0691208186948589e+00 2.2299070808405785e-01 + 3.3122210734601987e-01 8.8438354913380335e-01 1.8570856118597981e-01 + 5.0216413215190658e-01 7.6336363534269380e-01 5.5618649329620462e-02 + 6.3334053137186885e-01 6.9443746473496115e-01 -7.1666228760336570e-02 + 7.4470388973245538e-01 6.4011888598177791e-01 -1.7969071962000313e-01 + 8.4841257297796380e-01 5.9011909626449399e-01 -2.8076912956928379e-01 + 9.4393870044462491e-01 5.4553748645861089e-01 -3.8634538725685552e-01 + 1.0212015764902689e+00 5.0397129908595051e-01 -5.0175105454853497e-01 + 1.0673138943272733e+00 4.5474887933096786e-01 -6.2338482519672955e-01 + 1.1327674730239683e+00 3.6992249004429245e-01 -6.5997603523156967e-01 + id 12695 + loc 2.6810503005981445e-01 7.8168809413909912e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0648372507610331e-01:2.5228946537373381e-01:6.2727255513424884e-01:3.2199953263371967e-01:1.0698319477311085e+00:2.7231526056669825e-01:2.0027774137610157e+00:4.0647966023885257e-01:2.8787639825344051e+00:2.5145642360703963e-01:3.4619758585688043e+00 + CVs 20 + 2.2332448785912973e-01 2.9315360078041763e-01 -5.9025832896484748e-02 + 4.4466094130033323e-01 5.6652177803246317e-01 -1.3183655242236716e-01 + 6.5615476160991970e-01 8.2172706796095918e-01 -2.1137032772854183e-01 + 8.5462080388904993e-01 1.0573321393702853e+00 -2.9614068484780964e-01 + 1.0420721020051060e+00 1.2715480294628385e+00 -3.8883061128028695e-01 + 1.2218644033796273e+00 1.4637568396918561e+00 -4.9169969697175636e-01 + 1.3984689818635447e+00 1.6333610611953837e+00 -6.0776611141308723e-01 + 1.5753425996086927e+00 1.7786259964670350e+00 -7.4126780596243935e-01 + 1.7519597942805039e+00 1.8963800334174699e+00 -8.9686580655855841e-01 + 1.9238530283707997e+00 1.9812775286912294e+00 -1.0781754911921213e+00 + 2.0868845233557551e+00 2.0267491506833002e+00 -1.2843609830451856e+00 + 2.2409188779783427e+00 2.0257740710356194e+00 -1.5108973225300768e+00 + 2.3872231713661884e+00 1.9668271529710544e+00 -1.7514297108205976e+00 + 2.5239014451723771e+00 1.8319755358103837e+00 -1.9959496244300969e+00 + 2.6383745706671435e+00 1.6100451395507696e+00 -2.2387672065447939e+00 + 2.6933239532369555e+00 1.3142157824540477e+00 -2.4850498941183741e+00 + 2.6388794459177158e+00 9.8070558125258933e-01 -2.7337335743085123e+00 + 2.4380433709731033e+00 6.6913921057113301e-01 -2.9564872097929475e+00 + 2.1163525168994801e+00 4.9362719116197218e-01 -3.0729798914964066e+00 + id 12696 + loc 7.1293312311172485e-01 2.6503002643585205e-01 411 + blend 0.0000000000000000e+00 + interp 3.7373562679952660e-01:3.2542536895811047e-01:7.4987142327195477e-01:3.4312550008218301e-01:1.5128537840296434e+00:2.9249824384141548e-01:2.1011700248142104e+00:3.4692652036077171e-01:3.1357101013671187e+00:3.7373188944325864e-01:3.9383042559593759e+00 + CVs 20 + -6.0729872456181910e-01 1.2978122074640280e-01 1.6956708456547842e-01 + -1.0739978367273519e+00 1.7628838315729312e-01 2.9972474025221035e-01 + -1.5154022329203565e+00 1.9666328127347854e-01 3.9727858423441670e-01 + -1.9812371615927640e+00 2.1915692065446968e-01 4.5779901861170613e-01 + -2.4708455197470198e+00 2.3719542115648484e-01 4.7983961260662916e-01 + -2.9861282953918771e+00 2.4833224318135816e-01 4.7056018258313248e-01 + -3.5288531294616541e+00 2.5097723404867889e-01 4.4401071158292615e-01 + -4.0998266288372696e+00 2.3509710279343210e-01 4.1564797591861175e-01 + -4.6998373460329699e+00 1.7867414595871600e-01 4.0177433285977215e-01 + -5.3223980607245753e+00 5.0471824265936771e-02 4.2389005387598644e-01 + -5.9406802983282230e+00 -1.7877383872879982e-01 5.0287040455646093e-01 + -6.5145207625029347e+00 -5.1646439025316626e-01 6.4147556380067638e-01 + -7.0159553248729436e+00 -9.4541951069220032e-01 8.2640741002354612e-01 + -7.4310728870029266e+00 -1.4417419562402878e+00 1.0485866217232824e+00 + -7.7468036728746590e+00 -1.9806346661125542e+00 1.3023752355052465e+00 + -7.9513675865174065e+00 -2.5386510887967630e+00 1.5706647500771518e+00 + -8.0424763178753800e+00 -3.0957179944264781e+00 1.8261711023057232e+00 + -8.0359461807203534e+00 -3.6208911656812774e+00 2.0557499017071530e+00 + -8.0940878904687246e+00 -3.9571941827858534e+00 2.2656706561799660e+00 + id 12697 + loc 3.8994064927101135e-01 6.0410362482070923e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2245939341680433e-01:3.6007491638206091e-01:6.4217099427908786e-01:3.7127628474168806e-01:1.3583883563479300e+00:3.7491393157427666e-01:2.0572466666688864e+00:3.5748438303840668e-01:2.9546591684904673e+00:3.0681944763286922e-01:3.3469412970525241e+00:4.2245516882287021e-01:3.9543704573758123e+00 + CVs 20 + 8.7599691933509360e-02 3.2882605866953402e-01 -1.5567197068572738e-01 + 1.9137780481040095e-01 6.9243341482122556e-01 -3.5917872082132229e-01 + 2.9818215873543469e-01 1.0812201297237045e+00 -5.9922171364001797e-01 + 4.0140252085855505e-01 1.4784472968729643e+00 -8.8112687543218016e-01 + 5.0330156655309877e-01 1.8571513821280208e+00 -1.2201665753583122e+00 + 6.1671636030536714e-01 2.1699607807888119e+00 -1.6265561327754412e+00 + 7.6192384776919386e-01 2.3571746676244798e+00 -2.0901478598318501e+00 + 9.5549657771215368e-01 2.3702284720779874e+00 -2.5683164099866955e+00 + 1.1918811296305110e+00 2.1970276868378704e+00 -2.9979488151856417e+00 + 1.4413983573009446e+00 1.8796081558318836e+00 -3.3376531047742115e+00 + 1.6854133864100225e+00 1.4913178985749527e+00 -3.6011271633413888e+00 + 1.9319432874161993e+00 1.0930971327649868e+00 -3.8378397141549945e+00 + 2.1611058730315160e+00 7.0671138782708876e-01 -4.0846184698365953e+00 + 2.2814641834681817e+00 3.2662192453715433e-01 -4.3514866697308410e+00 + 2.1988894257843881e+00 -2.4867710926777864e-02 -4.6440721384472745e+00 + 1.8936920219433488e+00 -2.6346881453101134e-01 -4.9768563161108634e+00 + 1.4166843275026564e+00 -3.1478017428250538e-01 -5.3169191869398782e+00 + 9.4111690239514578e-01 -2.8072109300379455e-01 -5.5942021809819336e+00 + 7.7073096502852478e-01 -5.1835951047174389e-01 -5.9149272630108873e+00 + id 12698 + loc 6.5135222673416138e-01 9.8995655775070190e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5487307411981115e-01:4.0284454714924228e-01:1.9126128838716261e-01:3.4328846030550575e-01:9.1053902336650272e-01:4.5486852538906997e-01:1.0293959107932336e+00:3.5079057758633625e-01:1.8423589496431014e+00:3.7582315770010205e-01:2.2688187635544530e+00:3.9975696496574697e-01:3.2413271473356735e+00:4.5397790984915443e-01:3.9134433787733753e+00 + CVs 20 + 2.0145226493706600e-01 2.6529671066152805e-01 -9.7871851664455070e-02 + 4.1526596182452058e-01 5.1838449305975931e-01 -2.0781111151028614e-01 + 6.3821349047320608e-01 7.6215830653617278e-01 -3.2956371480375229e-01 + 8.6571437465426537e-01 9.9350029838963372e-01 -4.6819027159050608e-01 + 1.0922071551700254e+00 1.2070527808857126e+00 -6.3242334673492517e-01 + 1.3095345371599345e+00 1.3961164019378232e+00 -8.3125041717681425e-01 + 1.5069300324919315e+00 1.5519540402018452e+00 -1.0724821719051800e+00 + 1.6708525820952054e+00 1.6624011723233874e+00 -1.3600723477787569e+00 + 1.7869034952459570e+00 1.7134165312170602e+00 -1.6894978476369946e+00 + 1.8466281169972811e+00 1.6972682035377864e+00 -2.0456937074281423e+00 + 1.8550520552326935e+00 1.6157125986613989e+00 -2.4052550861327053e+00 + 1.8398385149224059e+00 1.4841985148768444e+00 -2.7430983911572056e+00 + 1.8354798922093460e+00 1.3255296375119539e+00 -3.0490201769631815e+00 + 1.8407224446256789e+00 1.1423746409797442e+00 -3.3393548464074234e+00 + 1.8300503772533634e+00 9.2861823768751550e-01 -3.6401786683399080e+00 + 1.8404499864809254e+00 7.4494228736719870e-01 -3.9401412562311329e+00 + 1.9279264570342434e+00 6.9171991189089210e-01 -4.2162168780976099e+00 + 2.0750903796199567e+00 8.0776960039765378e-01 -4.4404496704251031e+00 + 2.1334433147848091e+00 7.3343251137846899e-01 -4.7939437896388206e+00 + id 12699 + loc 9.0143495798110962e-01 4.5776432752609253e-01 372 + blend 0.0000000000000000e+00 + interp 3.1389493352191639e-01:2.7477146903910471e-01:9.7073378644793040e-03:3.1389179457258121e-01:9.7650772933730878e-01:2.6847582847266493e-01:2.0029968762053261e+00:2.9188446273422047e-01:2.9996710349318247e+00 + CVs 20 + 6.1614968598072928e-01 4.7204914264053699e-01 3.6044446631679009e-02 + 1.2013168181778435e+00 8.3194934951099075e-01 2.5872499521236630e-02 + 1.7953178484294317e+00 1.1175085255298571e+00 4.4092641412453004e-02 + 2.3882722014985909e+00 1.4180366104767399e+00 1.8535735679393089e-01 + 2.8623763790087406e+00 1.7976377740586142e+00 5.7880245535760699e-01 + 2.9828977408721373e+00 2.1401809521773809e+00 1.2070860477646423e+00 + 2.7690010732652581e+00 2.2772617208953720e+00 1.7875733342160747e+00 + 2.3954981826719663e+00 2.2357950707712386e+00 2.2041830855556968e+00 + 1.9354718894670468e+00 2.0778502100975991e+00 2.4590395193135590e+00 + 1.4143393599133725e+00 1.8308492426157499e+00 2.5686427882675789e+00 + 8.7256673348785285e-01 1.4558576916648598e+00 2.5400735447696552e+00 + 3.8323977953552546e-01 8.9323086859548284e-01 2.3606857389963736e+00 + -7.2858628975736861e-02 1.4417441878211704e-01 2.0070814039931659e+00 + -7.3119600044606337e-01 -6.9005020570001097e-01 1.4840700744037252e+00 + -1.8728969709409808e+00 -1.2493537968089909e+00 9.6734035894127079e-01 + -3.3490681708906571e+00 -1.1466296268417535e+00 7.0001659476641354e-01 + -4.7755279594867739e+00 -4.0322768852155710e-01 7.8446431347265455e-01 + -5.7964093522003939e+00 6.4259727360473873e-01 1.1718828638247083e+00 + -6.3356400347612212e+00 1.4957455868237397e+00 1.6152489282750797e+00 + id 12700 + loc 3.4267267584800720e-01 8.5948988795280457e-02 413 + blend 0.0000000000000000e+00 + interp 6.2184430300294413e-01:6.2183808455991418e-01:4.6544638005561434e-01:4.6053909500959994e-01:1.0006180470854464e+00:3.2901274207025732e-01:1.6952782501679946e+00:6.1253411803846169e-01:1.9982980145059790e+00:3.3526725403358593e-01:3.0137894930530154e+00:3.6007174213654203e-01:3.9888389969830453e+00 + CVs 20 + 7.6201465564563406e-03 1.3349191216456335e-01 -1.1806138556407380e+00 + 4.4610594246050655e-02 1.0751503836803206e-01 -1.9741998156801155e+00 + 1.0797307431015496e-01 2.1237689758648037e-02 -2.6565109149525190e+00 + 1.8859178245172351e-01 -1.0001736411284268e-01 -3.3255313852482500e+00 + 2.7716861856579811e-01 -2.6566277051970533e-01 -3.9722089535448264e+00 + 3.6645701871581782e-01 -4.8226741280421914e-01 -4.5921068511388521e+00 + 4.5448602314930842e-01 -7.5431585674502311e-01 -5.1785192009444359e+00 + 5.4382088360132175e-01 -1.0862292142407801e+00 -5.7205251813876723e+00 + 6.3335461406367743e-01 -1.4822416498600175e+00 -6.2068189464040691e+00 + 7.0742580345498307e-01 -1.9424129165119104e+00 -6.6242680704376866e+00 + 7.4788293270513462e-01 -2.4594356351744486e+00 -6.9552666043714382e+00 + 7.6280043710521817e-01 -3.0181943995702345e+00 -7.1914986568570987e+00 + 7.7188464116036715e-01 -3.6037864703483526e+00 -7.3388058700140393e+00 + 7.8360308245140764e-01 -4.1958421713225240e+00 -7.4011077735528055e+00 + 7.9665002594536327e-01 -4.7633556221864488e+00 -7.3766061069981745e+00 + 8.1650298428254720e-01 -5.2718858155902391e+00 -7.2651472101783199e+00 + 8.4785907125403948e-01 -5.6979917469563945e+00 -7.0819536438808353e+00 + 8.7285259688457695e-01 -6.0504599929228240e+00 -6.8704868461101052e+00 + 9.3769216539576061e-01 -6.4757382153385041e+00 -6.8053875440737768e+00 + id 12701 + loc 2.5992527604103088e-01 9.8636883497238159e-01 409 + blend 0.0000000000000000e+00 + interp 4.5441698011471948e-01:4.1319700819639926e-01:5.7812088092194869e-01:2.6582132630900451e-01:1.0033881599518772e+00:2.9963590328142009e-01:1.0417016410675286e+00:1.3753599752595305e-01:2.1757528205084151e+00:4.5441243594491837e-01:3.4022575351481041e+00:3.6114176731723985e-01:3.9975357019096958e+00 + CVs 20 + 4.6139472458430625e-01 1.8110138972389761e-01 2.4260320902826843e-02 + 8.0216443727864595e-01 3.1555295875082207e-01 1.8195876060102534e-03 + 1.1020669100783320e+00 4.3488957721732591e-01 -3.8109266233217975e-02 + 1.4091018236154995e+00 5.5991529032922249e-01 -7.5611526059176343e-02 + 1.7259980357933369e+00 6.8870311945137241e-01 -1.1242414109388088e-01 + 2.0567009624780432e+00 8.1786753777161891e-01 -1.4944412152126341e-01 + 2.4091554690064108e+00 9.4559838300524190e-01 -1.8491134956042268e-01 + 2.7949767681743398e+00 1.0683492757825015e+00 -2.1371381863486141e-01 + 3.2233231698472324e+00 1.1737683035427320e+00 -2.2702660006395092e-01 + 3.6942302699071958e+00 1.2425775704070956e+00 -2.1596759932293014e-01 + 4.1966172822720065e+00 1.2543633127939646e+00 -1.7833340095721176e-01 + 4.7063354104183048e+00 1.1882425347545205e+00 -1.2280365300190246e-01 + 5.1905495498433716e+00 1.0301737800480895e+00 -6.5293546580112105e-02 + 5.6219321577082333e+00 7.8235768968854158e-01 -1.9116065930714965e-02 + 5.9840762601287683e+00 4.6052084550992767e-01 9.3279917942699075e-03 + 6.2696721935930739e+00 8.5608137941487250e-02 1.6363072101634790e-02 + 6.4739833570414813e+00 -3.2189760522162425e-01 1.2973529247580773e-03 + 6.5882988257790158e+00 -7.3871396665079470e-01 -2.4024917797764889e-02 + 6.5400894730460646e+00 -1.1281897234690534e+00 -5.7168854866450736e-02 + id 12702 + loc 7.8662782907485962e-01 3.0014356970787048e-01 1081 + blend 0.0000000000000000e+00 + interp 4.3033864007772837e-01:4.3033433669132759e-01:6.2127209897126012e-01:3.4705149950005731e-01:9.9483585466009383e-01:3.6859488987541295e-01:1.3296305007882756e+00:3.8625014863858370e-01:1.9974540684871429e+00:4.2601899741101390e-01:2.6709539810039238e+00:3.8874211934571723e-01:3.2097146545809188e+00:2.8030244277514849e-01:3.9476697031865071e+00 + CVs 20 + 1.0763871944505365e-01 5.3554501572896407e-01 -5.3754828763489781e-01 + 1.4547201698071729e-01 9.7339199918143637e-01 -9.1684802013602273e-01 + 1.6459015217494194e-01 1.3571731214609843e+00 -1.2345929109130043e+00 + 1.7549199110885366e-01 1.7294197271190279e+00 -1.5320528467326400e+00 + 1.7459132562603757e-01 2.0935096644342237e+00 -1.7951369316419150e+00 + 1.5769302889993486e-01 2.4656612785142187e+00 -2.0039692908701379e+00 + 1.1779399967393878e-01 2.8719703753022658e+00 -2.1226684478096187e+00 + 4.5613446460418317e-02 3.3380528863184908e+00 -2.0734442547006413e+00 + -5.6020227895894892e-02 3.8159224264618370e+00 -1.6874961281282348e+00 + -1.1211380236815061e-01 4.0070107444530603e+00 -9.5698003575854762e-01 + -7.8650459209953505e-02 3.8587374135873298e+00 -3.2375295686213268e-01 + -1.3670142760453141e-02 3.6258127442142594e+00 1.1239192537712461e-01 + 5.5224695488645226e-02 3.3806312789529027e+00 4.4992908843492074e-01 + 1.2236032147950165e-01 3.1149968662181098e+00 7.3978201177533154e-01 + 1.8848128840217349e-01 2.7958826614132617e+00 1.0004808580438502e+00 + 2.6015373518377027e-01 2.3434932615730277e+00 1.2308356666581104e+00 + 3.3947144004051244e-01 1.6851199986321734e+00 1.3658369899079426e+00 + 4.1111386170408265e-01 9.9727077302923794e-01 1.3208044144652022e+00 + 4.4913217780089892e-01 8.2688990124243789e-01 1.2817162258274371e+00 + id 12703 + loc 6.1818170547485352e-01 1.7225661873817444e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3734910614842223e-01:3.0067653360906538e-01:1.5698283469863128e-02:3.2259631575298303e-01:7.1668135873698291e-01:2.7246876369199857e-01:1.3744405405140065e+00:3.3734573265736079e-01:2.0662706796229249e+00:2.7685785719614642e-01:2.8821790372429374e+00:2.7462316110864976e-01:3.4278794070318388e+00 + CVs 20 + 1.6624253868564720e-01 3.1067254817833601e-01 -1.5826508929275845e-01 + 3.0147866766642756e-01 5.8542333554454562e-01 -2.8709975136969257e-01 + 3.9036947237666431e-01 8.4100936667368653e-01 -4.2777535801552757e-01 + 4.3572741183908303e-01 1.0847645797031216e+00 -5.9088079217534628e-01 + 4.7062683712361209e-01 1.3311621001171976e+00 -7.5938834061383542e-01 + 5.4611619316896243e-01 1.6030502568586928e+00 -9.0433256687220576e-01 + 7.0353811113267040e-01 1.8870920701217626e+00 -9.8703941889258728e-01 + 9.4656644756040786e-01 2.1312417181572343e+00 -9.7688745950245071e-01 + 1.2221446845408228e+00 2.2936216133931984e+00 -8.4452416231827998e-01 + 1.4292804247669906e+00 2.3624684586366129e+00 -5.8805204395399757e-01 + 1.5180932285062740e+00 2.3582250057380159e+00 -2.4425066700317632e-01 + 1.4826744448141074e+00 2.2944629214840040e+00 1.5873997178089416e-01 + 1.3051027194165903e+00 2.1597095301418996e+00 5.3712841083190255e-01 + 1.0190501323211107e+00 1.9620097967323131e+00 7.4754275050453589e-01 + 7.0755895204704400e-01 1.7240761580361954e+00 7.6866674402937352e-01 + 4.3052929096334569e-01 1.4401049044074705e+00 6.8241002574035625e-01 + 1.8714448421188634e-01 1.0651037009202309e+00 5.4091510225599815e-01 + -5.0574759559075137e-02 7.1027422877738466e-01 6.0324387205111341e-01 + -6.5534245725957826e-02 8.1820253472846149e-01 9.3816192194863057e-01 + id 12704 + loc 3.2551038265228271e-01 1.9324034452438354e-01 1080 + blend 0.0000000000000000e+00 + interp 6.4477614279978035e-01:2.9451304506205600e-01:1.1298850024473428e-01:5.0669498437417071e-01:8.9064694796997190e-01:6.4476969503835235e-01:2.2597770990912562e+00:4.0892233307767883e-01:2.5183064756187683e+00:3.9113211193632874e-01:2.9940818217763887e+00:3.9926488719775610e-01:3.7926146498558340e+00 + CVs 20 + 4.5486427695298448e-01 4.1833139201749736e-01 1.4367781665450358e-02 + 6.8940703134740011e-01 7.0997183174125689e-01 3.2130556548625830e-02 + 8.8553760384628399e-01 9.7593981379105577e-01 4.8407700124609376e-02 + 1.1097814291296153e+00 1.2497816999208848e+00 6.2019495924787379e-02 + 1.3473593198921774e+00 1.5233407174599405e+00 6.8876628970870726e-02 + 1.5856154413983847e+00 1.7894277946257935e+00 6.3437297140084448e-02 + 1.8185781910143521e+00 2.0441360438403526e+00 3.8268801799449553e-02 + 2.0528941826032447e+00 2.2890504717001772e+00 -2.0747807739312618e-02 + 2.3019230788689793e+00 2.5224708185505698e+00 -1.4443844609702505e-01 + 2.5509221980915715e+00 2.7176092783317145e+00 -3.6774139933791339e-01 + 2.7477319647906859e+00 2.8404635234970290e+00 -6.7469416583437769e-01 + 2.8638321000117464e+00 2.8952683466413442e+00 -1.0142987669631187e+00 + 2.9040149279306493e+00 2.9060480004159936e+00 -1.3576096842968990e+00 + 2.8770528426946500e+00 2.8918399313104093e+00 -1.6945662187324046e+00 + 2.7755770348843893e+00 2.8689751523935807e+00 -2.0196858511632705e+00 + 2.5539382254924434e+00 2.8535462780226086e+00 -2.3383650865844077e+00 + 2.1651598387568041e+00 2.8072763799213325e+00 -2.6914601812969972e+00 + 1.7623322342671481e+00 2.6195447350241636e+00 -3.0900048652652532e+00 + 1.7546408073041302e+00 2.4291903636116166e+00 -3.2318847833151274e+00 + id 12705 + loc 9.5504641532897949e-01 6.6139125823974609e-01 1082 + blend 0.0000000000000000e+00 + interp 3.0594606957871466e+00:3.2961733871685372e-01:1.8676036411722867e+00:2.6044348388432409e-01:2.5141488348085721e+00:3.8732429500062165e-01:3.0016493399032331e+00:3.7665946894305669e-01:3.7678361994529097e+00:3.0594506957871466e+00:3.7996210484063773e+00 + CVs 20 + -1.7346710395578488e-01 3.0062032739156952e-01 3.5737172260112637e-01 + -2.8834749883372851e-01 5.0350999114412320e-01 5.0584384082239542e-01 + -4.0406776360393359e-01 6.6763138676987510e-01 5.9289640606518912e-01 + -5.5001905613848656e-01 8.2510637439601076e-01 6.8865649128442175e-01 + -7.3082095362199140e-01 9.7106762135892033e-01 7.8845133404309120e-01 + -9.4953195127284418e-01 1.1001614287384931e+00 8.8829394283613194e-01 + -1.2067425592206236e+00 1.2073821118920618e+00 9.8532899714887656e-01 + -1.5004340018194335e+00 1.2891514022952570e+00 1.0779411898665188e+00 + -1.8265739404182071e+00 1.3438823606581340e+00 1.1653390645367239e+00 + -2.1798666260364499e+00 1.3716459608228324e+00 1.2470020954010357e+00 + -2.5548669651580105e+00 1.3730938761191651e+00 1.3219286947984190e+00 + -2.9462767953028943e+00 1.3483104050697490e+00 1.3879705639534670e+00 + -3.3457683353929317e+00 1.2990043517047252e+00 1.4421977006868483e+00 + -3.7391706190567819e+00 1.2344424577155784e+00 1.4829317274473914e+00 + -4.1119140633871076e+00 1.1709431786134656e+00 1.5114301547420119e+00 + -4.4578089923109721e+00 1.1205641811988407e+00 1.5311965871513040e+00 + -4.7787938299077810e+00 1.0854534243599412e+00 1.5465474957793643e+00 + -5.0733802956935961e+00 1.0654261828055835e+00 1.5592473666740245e+00 + -5.3704087437271779e+00 1.0415597092906772e+00 1.5740640437443814e+00 + id 12706 + loc 6.3412004709243774e-01 4.3599513173103333e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9105556177616333e-01:3.3731909622709033e-01:1.7772302372895454e-01:3.8782721547406496e-01:9.9957758801684704e-01:2.9139507403998799e-01:1.6609349692555859e+00:3.9786342834125293e-01:2.4112947322880469e+00:3.8298724258846600e-01:3.0559798764647996e+00:4.9105065122054559e-01:3.9143613585277399e+00 + CVs 20 + -1.1870994917618653e-01 1.8741760714935674e-01 9.2200362835155300e-02 + -2.3878039232059431e-01 3.7542405122658368e-01 1.7937321001343837e-01 + -3.5724769798023082e-01 5.6435414096327374e-01 2.6363802876381109e-01 + -4.6833961950315406e-01 7.5152175931508314e-01 3.4427347800546904e-01 + -5.7022549446989945e-01 9.3721134309611243e-01 4.2621271669429656e-01 + -6.6384484157000989e-01 1.1249701996052039e+00 5.2508815830098288e-01 + -7.5395283109298605e-01 1.3133776229329213e+00 6.5961479897473141e-01 + -8.4465269059321724e-01 1.4933427096690939e+00 8.3914806798868713e-01 + -9.3292027865793048e-01 1.6525135726074109e+00 1.0645301717754170e+00 + -1.0073187189516202e+00 1.7777540704968833e+00 1.3329346489135752e+00 + -1.0535201000894652e+00 1.8574242552798208e+00 1.6368195026019405e+00 + -1.0546678203277378e+00 1.8796470633793123e+00 1.9614612287188435e+00 + -9.9330357255111446e-01 1.8304577006135996e+00 2.2763184832814125e+00 + -8.7611014993084935e-01 1.7058779698330928e+00 2.5230535511606389e+00 + -7.4254529132117530e-01 1.5202347182394234e+00 2.6229153877262505e+00 + -6.2134897483609575e-01 1.2531507610368033e+00 2.5210620461296678e+00 + -4.7117576734219402e-01 8.1517466041421649e-01 2.3361805480783593e+00 + -2.2090905500049621e-01 1.9979293150495769e-01 2.3505476300225148e+00 + -1.4749833892578473e-01 2.6056338391777589e-01 2.4294822448658753e+00 + id 12707 + loc 1.8193246424198151e-01 5.8512818813323975e-01 372 + blend 0.0000000000000000e+00 + interp 4.3957589112904977e-01:3.2103129747599890e-01:4.4812847941264611e-03:3.7730340874766760e-01:8.0845331580423452e-01:2.8103522184678770e-01:1.0967112490382975e+00:4.3957149537013851e-01:1.9192053397142002e+00:2.9446816743558130e-01:2.3244702335744236e+00:2.7042177616305069e-01:3.1474624074862794e+00 + CVs 20 + -3.7504347538099869e-01 6.5931028698907412e-01 -2.2309542669698951e-01 + -7.5010413080107829e-01 1.2668796845015007e+00 -4.3025426999223670e-01 + -1.1161884005483933e+00 1.8088407248689817e+00 -6.5530187792993022e-01 + -1.4017523850796545e+00 2.2838756949203076e+00 -9.4126210605463534e-01 + -1.5005285835989681e+00 2.6916549355591219e+00 -1.3292387896647593e+00 + -1.3551163387375935e+00 2.9820322317858232e+00 -1.8032885688875300e+00 + -1.0013386575496694e+00 3.0854712607466452e+00 -2.2924133973555127e+00 + -5.2330179761408746e-01 2.9692756282155841e+00 -2.7276227079287985e+00 + -7.3834665118226450e-03 2.6508460753626344e+00 -3.0808267499693365e+00 + 4.7255542275908757e-01 2.1550047411845599e+00 -3.3519935181246092e+00 + 8.5959528237834171e-01 1.4837797885296420e+00 -3.5367750469910701e+00 + 1.1513922246976809e+00 6.2328465509773234e-01 -3.6023089924995375e+00 + 1.4352519726558541e+00 -3.7965500013282316e-01 -3.4806190002799435e+00 + 1.8665697426563355e+00 -1.3728380700815352e+00 -3.1517432339737721e+00 + 2.6240319613767733e+00 -2.1532350101448055e+00 -2.7439019452945623e+00 + 3.6823275656182770e+00 -2.4664431287138107e+00 -2.5055839526576298e+00 + 4.7933895379741225e+00 -2.2448104230139752e+00 -2.5030758891664000e+00 + 5.6989838694540955e+00 -1.6123538409557441e+00 -2.6353503810763041e+00 + 6.1951619389572326e+00 -8.7368767737055064e-01 -2.7175183050327263e+00 + id 12708 + loc 8.7399989366531372e-01 5.6210510432720184e-02 1076 + blend 0.0000000000000000e+00 + interp 4.5712945555386386e-01:2.6158962826371140e-01:8.7057399119869150e-01:4.5712488425930836e-01:1.5059002741106089e+00:4.4139705215147079e-01:1.9928947727475745e+00:4.0369682805974805e-01:2.3243941202115499e+00:3.4918058587921952e-01:3.0038404076344429e+00:2.4643343692595715e-01:3.9188492696579686e+00 + CVs 20 + -1.6191652613805463e-01 3.0539729771244212e-01 2.5494702910679512e-01 + -3.2991186097752584e-01 5.9020627047805085e-01 5.0684263388748629e-01 + -4.9970752634927584e-01 8.4686158312303494e-01 7.7151666664873564e-01 + -6.6336713394826208e-01 1.0711418642301358e+00 1.0504599191351400e+00 + -8.0972897311995506e-01 1.2589902427177155e+00 1.3331376356094271e+00 + -9.4078649312439089e-01 1.4077523198130091e+00 1.6169783080640707e+00 + -1.0817657594610486e+00 1.5203658718844757e+00 1.9144257306623544e+00 + -1.2601917743433233e+00 1.6012741179868919e+00 2.2255275245048747e+00 + -1.4863589681210669e+00 1.6562208448207638e+00 2.5247792554783426e+00 + -1.7623479391119710e+00 1.6886614674980440e+00 2.7800380189162786e+00 + -2.0883562697251747e+00 1.6976168800428446e+00 2.9693203405498227e+00 + -2.4634289841569932e+00 1.6772005458495158e+00 3.0936167649527713e+00 + -2.8779009735450809e+00 1.5924875056505079e+00 3.1801740800448175e+00 + -3.2803813732028333e+00 1.3799620384983795e+00 3.2430218385329130e+00 + -3.6121883304854232e+00 1.0146430116025036e+00 3.2626671922523074e+00 + -3.8406581807371287e+00 4.1066700261139055e-01 3.2363106557788974e+00 + -3.6774870180187920e+00 -6.2585144439086937e-01 3.1821524878706842e+00 + -2.8712193114216467e+00 -1.4830796383480394e+00 3.1279460492803621e+00 + -2.6062445952106410e+00 -1.6490805045843784e+00 3.0481154221751603e+00 + id 12709 + loc 2.0171719789505005e-01 9.0174788236618042e-01 1068 + blend 0.0000000000000000e+00 + interp 6.3157302751402367e-01:3.6857580739655488e-01:2.8635618480225344e-01:4.1249639107337310e-01:9.9913178636449596e-01:5.6625470857887272e-01:1.9570288623895231e+00:6.3156671178374857e-01:2.1895564830381904e+00:5.3776369309211003e-01:2.7866024810066565e+00:3.5302721376968005e-01:3.0279401095385339e+00:4.4235528596717283e-01:3.6906713924571481e+00 + CVs 20 + 1.2050943349010484e-01 3.3476328565477464e-01 -3.0691200337495356e-01 + 2.6931069361239318e-01 6.6663080377223560e-01 -6.1871872618296220e-01 + 4.2229996952776033e-01 1.0011737558175757e+00 -9.3273298211654065e-01 + 5.6599353920674855e-01 1.3298496534650972e+00 -1.2479947163489955e+00 + 6.9499815777928176e-01 1.6400698359463175e+00 -1.5656224703648134e+00 + 8.0680390783118461e-01 1.9221052714210689e+00 -1.8838919089651467e+00 + 9.0264322378600703e-01 2.1714052310888792e+00 -2.1983074621572753e+00 + 9.8658813385448063e-01 2.3883091457616969e+00 -2.5053913351554109e+00 + 1.0640883556102194e+00 2.5781762550677261e+00 -2.8121255839857597e+00 + 1.1414372632186500e+00 2.7459769581981113e+00 -3.1277463016837914e+00 + 1.2278704155414177e+00 2.8983662202597769e+00 -3.4489089345608930e+00 + 1.3360890448610214e+00 3.0406585732210036e+00 -3.7829194027733823e+00 + 1.4750796891073028e+00 3.1541415576351195e+00 -4.1521622484187333e+00 + 1.6386808292810791e+00 3.1991282916527375e+00 -4.5574999757918713e+00 + 1.8260744086891427e+00 3.1428555997906891e+00 -4.9795905656286834e+00 + 2.0546418306079439e+00 2.9573854658105168e+00 -5.4021411335433864e+00 + 2.2880612795618993e+00 2.6435939000560484e+00 -5.8173089704153975e+00 + 2.4218161606788540e+00 2.2682432180549230e+00 -6.2277373196727694e+00 + 2.3967887597955500e+00 1.9276050205769659e+00 -6.6224364005437124e+00 + id 12710 + loc 7.8454160690307617e-01 6.4092576503753662e-02 411 + blend 0.0000000000000000e+00 + interp 5.1061105217237057e-01:3.9215188116657002e-01:9.4217976520333369e-01:4.0647108069361698e-01:1.8736522911882847e+00:2.3223684031040109e-01:2.2491964541186089e+00:5.1060594606184884e-01:3.0045529726860813e+00:4.5089317915915650e-01:3.4270632263206950e+00:3.1864754613447410e-01:3.9993495806377943e+00 + CVs 20 + -5.5717432178634774e-01 1.6230872774889823e-01 1.9463359233273908e-01 + -1.0073571605492522e+00 2.5493120633723310e-01 3.8465497182808356e-01 + -1.4576155971665232e+00 3.3220309464119324e-01 5.7182773320658808e-01 + -1.9472526018395910e+00 4.0888235291901565e-01 7.5465054378238006e-01 + -2.4698381497088624e+00 4.7064281863961743e-01 9.3126556533122828e-01 + -3.0131488551228056e+00 5.0203958813279714e-01 1.1044781900221838e+00 + -3.5618414342291547e+00 4.8552922468051940e-01 1.2782662711854456e+00 + -4.0963022122071493e+00 4.0056412576139300e-01 1.4545285725358155e+00 + -4.5857465139256828e+00 2.3143137400233926e-01 1.6368718064438392e+00 + -4.9879330200434779e+00 -2.1894313601553694e-02 1.8306088129379339e+00 + -5.2711994419323460e+00 -3.3835613767403228e-01 2.0312415217460527e+00 + -5.4369884737201239e+00 -6.8572197929507972e-01 2.2241987453488461e+00 + -5.5043484982245161e+00 -1.0358020727372290e+00 2.3990417639014017e+00 + -5.4903180596555163e+00 -1.3671916033197622e+00 2.5519929379647133e+00 + -5.4131266023332110e+00 -1.6704864872984038e+00 2.6796340815450512e+00 + -5.2918882901184068e+00 -1.9491942721846738e+00 2.7776345992012041e+00 + -5.1418615161520389e+00 -2.2099236647330383e+00 2.8452833856757689e+00 + -4.9760536765615324e+00 -2.4608572204019108e+00 2.8881599378866425e+00 + -4.8316857261431192e+00 -2.8120078929443246e+00 2.9290923247178138e+00 + id 12711 + loc 4.7489327192306519e-01 9.6088266372680664e-01 409 + blend 0.0000000000000000e+00 + interp 5.6095675202334949e-01:4.4514713682722451e-01:2.8780982377250686e-02:4.0408044597258552e-01:7.8128857092401560e-01:3.4031936635559873e-01:1.5198457442575573e+00:3.6699214147720188e-01:2.1042088650895483e+00:5.6095114245582933e-01:2.7444175837454177e+00:4.7665540953664892e-01:3.1811925865417603e+00:2.9353384432756335e-01:3.7038187283016599e+00 + CVs 20 + 5.2658129823090483e-01 1.2823601530409853e-01 -9.6847780443364145e-02 + 9.4098603913599876e-01 1.9006230474420205e-01 -1.9800201475829693e-01 + 1.3250305409099834e+00 2.2576632035795441e-01 -2.8336881244296486e-01 + 1.7075306234140466e+00 2.5216318418699135e-01 -3.4703811513589766e-01 + 2.0806262868393604e+00 2.6920462352017138e-01 -3.9463349241921902e-01 + 2.4391868138447408e+00 2.7827366974294909e-01 -4.3175087485681063e-01 + 2.7804418321333548e+00 2.8216930722570854e-01 -4.6221080737749587e-01 + 3.1041319028836485e+00 2.8278975241590820e-01 -4.8638279237782384e-01 + 3.4130677603586745e+00 2.7970955986896540e-01 -4.9882620666425731e-01 + 3.7105129312712464e+00 2.7371807292732364e-01 -4.9172389308240383e-01 + 4.0001494915150619e+00 2.6434976102524765e-01 -4.6048167353798769e-01 + 4.2888722707230960e+00 2.4167220980966042e-01 -4.0645867293801230e-01 + 4.5825425722106843e+00 1.8691566138986748e-01 -3.3369363490235732e-01 + 4.8819158964270137e+00 8.5755977935458638e-02 -2.4469219923181168e-01 + 5.1839239930668306e+00 -6.6488335797333598e-02 -1.4281958065974987e-01 + 5.4822970269129723e+00 -2.6680362703270566e-01 -3.6931116344465942e-02 + 5.7660631629322667e+00 -5.0934634705596027e-01 6.5323325193050397e-02 + 6.0181175046615802e+00 -7.9465752451057226e-01 1.7207158888339713e-01 + 6.1431808829334269e+00 -1.1266434641067136e+00 2.8795200462473897e-01 + id 12712 + loc 6.8781954050064087e-01 3.2296255230903625e-01 393 + blend 0.0000000000000000e+00 + interp 4.9486811816992199e-01:3.2571028074683633e-01:2.4741572831664460e-01:3.0740180967762332e-01:9.9858506486404086e-01:4.9486316948874032e-01:1.8680797272237064e+00:3.1044591889559109e-01:2.0988583783240089e+00:4.7730273850869948e-01:2.9996532017287398e+00:3.3756426068209472e-01:3.3467441353257499e+00 + CVs 20 + 3.1236926645392249e-01 3.4445497592235375e-01 1.5418348801176537e-01 + 6.3159926649710674e-01 6.9092195584589566e-01 3.0580510834873997e-01 + 9.3688541868469011e-01 1.0521801850028978e+00 4.7010367209206128e-01 + 1.2149220250671233e+00 1.4137949498050908e+00 6.6761922725262401e-01 + 1.4594813924563845e+00 1.7516815785511242e+00 9.2286166320249263e-01 + 1.6633289303174239e+00 2.0569565296278447e+00 1.2538835295495276e+00 + 1.8143362339956879e+00 2.3321063319316080e+00 1.6623902637660171e+00 + 1.9094411872786068e+00 2.5785069287483839e+00 2.1407740380627551e+00 + 1.9659510584824114e+00 2.7894495760525131e+00 2.6877149277857093e+00 + 2.0148667781968919e+00 2.9431850622590643e+00 3.3077528949719683e+00 + 2.0914220338868157e+00 2.9995611929531156e+00 3.9977017756657798e+00 + 2.2248574198920479e+00 2.9065443183280495e+00 4.7305676568153672e+00 + 2.4327550736879173e+00 2.6152696751869220e+00 5.4474543460974347e+00 + 2.7221577989555268e+00 2.0883172951073443e+00 6.0527965521556242e+00 + 3.0928584716153029e+00 1.3412583987937221e+00 6.4174378712684490e+00 + 3.5433622542472927e+00 5.0235223026080922e-01 6.4543518634510075e+00 + 4.0665448396470261e+00 -2.5974012039679018e-01 6.1996500645771917e+00 + 4.5900959398013939e+00 -8.7200239414124292e-01 5.7979794672794549e+00 + 4.8738392108969242e+00 -1.4176188604031910e+00 5.6093343181689823e+00 + id 12713 + loc 5.8844506740570068e-01 4.6336299180984497e-01 406 + blend 0.0000000000000000e+00 + interp 3.6657511011995614e-01:3.1088191411616151e-01:2.3252352544072408e-01:2.4073477434047827e-01:1.2012639931526248e+00:2.9942430520958557e-01:1.9865870293441912e+00:3.6657144436885497e-01:2.8327944443352844e+00:3.3409146969502596e-01:3.4745490742531042e+00 + CVs 20 + -2.2484726451551570e-01 1.6406261366797001e-01 3.2625550116268255e-02 + -3.6769561645142018e-01 2.6394466575338371e-01 5.3747741415175854e-02 + -4.6476227656930658e-01 3.2746427500157704e-01 6.4951083364756051e-02 + -5.6118913549167415e-01 3.8918814603772034e-01 7.4416731798440716e-02 + -6.5826693532864244e-01 4.4877670847130219e-01 8.1292633445474230e-02 + -7.5724461464370596e-01 5.0525949134812431e-01 8.5043133590858841e-02 + -8.6002377492216342e-01 5.5716468313815359e-01 8.5995450315633548e-02 + -9.6849741168228232e-01 6.0230325464538703e-01 8.5288390822848392e-02 + -1.0802780089776749e+00 6.3878320541325961e-01 8.2713587174173236e-02 + -1.1862040914548428e+00 6.6688845383353101e-01 7.3942461963468015e-02 + -1.2791297525479284e+00 6.8795352376561503e-01 5.4393554921966736e-02 + -1.3627840028372127e+00 7.0019605536940221e-01 2.6616452308047711e-02 + -1.4444903491149423e+00 6.9903344296899783e-01 -1.3402826403572377e-03 + -1.5243546481214068e+00 6.8269212742317298e-01 -2.6628409973002143e-02 + -1.5961193239736544e+00 6.5419131894108085e-01 -5.6076258669304935e-02 + -1.6556681313367831e+00 6.1773619336563335e-01 -9.7101476336383441e-02 + -1.7052055669475283e+00 5.7600998774731726e-01 -1.4747111738855684e-01 + -1.7485327738647345e+00 5.3045434820172410e-01 -1.9810667635093188e-01 + -1.7917302833959172e+00 4.2586209714463752e-01 -2.1407752502982996e-01 + id 12714 + loc 5.3062915802001953e-01 9.8968362808227539e-01 1081 + blend 0.0000000000000000e+00 + interp 4.4538629881446196e-01:4.4538184495147382e-01:1.1425440390977815e-02:3.8051666329936545e-01:9.9938787702468923e-01:3.8946968563724849e-01:1.5432416961479962e+00:2.3269773955375489e-01:2.3020844252557895e+00:3.2538969559153069e-01:3.4855110231505266e+00 + CVs 20 + 8.0579472071608871e-02 4.9402845221279340e-01 5.3069282048019895e-01 + 1.7008648012785504e-01 8.8207002779713528e-01 8.7038986780072847e-01 + 2.6842697830927542e-01 1.2398011720956683e+00 1.1520181781958823e+00 + 3.7944655771744829e-01 1.6046613770605134e+00 1.4361752021296863e+00 + 5.1362891108933040e-01 1.9700202602058829e+00 1.7123272880180156e+00 + 6.8383163927228363e-01 2.3287882557772512e+00 1.9623837352974844e+00 + 9.0667208132689303e-01 2.6720244630791825e+00 2.1594430909225224e+00 + 1.2038086710431963e+00 2.9832431492081888e+00 2.2716193573757275e+00 + 1.6013211966670773e+00 3.2229561011918371e+00 2.2550666750030302e+00 + 2.0784446874396867e+00 3.3000201453624380e+00 2.0608867111158768e+00 + 2.4958633078710886e+00 3.1513760720409265e+00 1.7388082660272786e+00 + 2.7687557018884155e+00 2.8683493069439692e+00 1.4214839178348930e+00 + 2.9452177773393315e+00 2.5432303441632866e+00 1.1563948127712398e+00 + 3.0759962901091167e+00 2.1974353289554056e+00 9.3859933138714835e-01 + 3.1839271936814675e+00 1.8199843167371710e+00 7.7306813309228029e-01 + 3.2717843383275795e+00 1.3813812221775397e+00 7.0149333454285534e-01 + 3.3284374450616045e+00 8.9738626964954182e-01 7.9220561640730447e-01 + 3.3467667684124733e+00 4.6970889990819703e-01 1.0008963964500661e+00 + 3.3433254008307389e+00 1.5805700854168991e-01 1.0821586550879032e+00 + id 12715 + loc 9.6598970890045166e-01 8.9650046825408936e-01 403 + blend 0.0000000000000000e+00 + interp 5.1206467265686151e-01:5.1205955201013498e-01:3.5323553615129843e-02:4.6736775345336146e-01:6.0035336293485886e-01:4.0912829414489188e-01:9.9142749264656072e-01:3.8696824794596490e-01:1.3389525269286244e+00:3.3041914343724121e-01:1.9949346969330282e+00:4.1933205429953524e-01:2.1992435317391901e+00:4.8466752627613580e-01:2.7274023260449511e+00:3.4135321060407703e-01:3.4053952460701140e+00 + CVs 20 + -3.9698142409824326e-02 -5.1560991544252366e-02 3.8798893832269858e-02 + -6.8840671049811925e-02 -1.0777038899591553e-01 7.3145390438982147e-02 + -1.0824964943959706e-01 -1.6186319331354149e-01 9.5437927968064273e-02 + -1.4698936575326621e-01 -2.1476179392584754e-01 1.1647377585863322e-01 + -1.8267711463407194e-01 -2.6851165534745930e-01 1.3802633386252783e-01 + -2.1459104693039976e-01 -3.2531602243814550e-01 1.5943593095952283e-01 + -2.4263496836945986e-01 -3.8726077535201131e-01 1.7926366359079532e-01 + -2.6787727771149311e-01 -4.5586414090422922e-01 1.9594207132662303e-01 + -2.9315221179628886e-01 -5.3164684777640425e-01 2.0826807159614225e-01 + -3.2267806285091660e-01 -6.1384222151682710e-01 2.1583057963809968e-01 + -3.6107007061071145e-01 -7.0042827950790254e-01 2.1927592547231692e-01 + -4.1236449976286332e-01 -7.8838462477009719e-01 2.1994027614619246e-01 + -4.7932084928707308e-01 -8.7421788389222732e-01 2.1909316555017366e-01 + -5.6359229948826939e-01 -9.5448943245233431e-01 2.1740934728848035e-01 + -6.6616636607617297e-01 -1.0260476807621755e+00 2.1660414348048174e-01 + -7.8236313163802007e-01 -1.0895384474734897e+00 2.2037847909088670e-01 + -8.9862860203739992e-01 -1.1532915160961874e+00 2.3273125312963838e-01 + -9.9717439624003634e-01 -1.2317557392876550e+00 2.5601760744219465e-01 + -9.7579090247511791e-01 -1.3684225320267975e+00 1.4013801136842519e-01 + id 12716 + loc 3.5092729330062866e-01 5.2152770757675171e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3960417276845567e-01:3.3960077672672800e-01:1.7335282090913395e-06:2.5067683469205826e-01:8.6831728659414209e-01:3.2777467163674068e-01:1.3219024885851194e+00:2.9257956694758969e-01:1.9833940748259158e+00:2.5590509094271241e-01:3.0030679617581546e+00 + CVs 20 + -2.7453317656037451e-01 3.3321765855158608e-01 3.3882687383719295e-01 + -5.2649994669695921e-01 6.3754753199532410e-01 5.9817742708191712e-01 + -7.6383020824541326e-01 9.4714463665910964e-01 8.3643062976764115e-01 + -9.9795439196601321e-01 1.2733463147113782e+00 1.0650894319393815e+00 + -1.2472906017332464e+00 1.6040160429215975e+00 1.2591148062244970e+00 + -1.5225672662803185e+00 1.9183249819715615e+00 1.3957480669985678e+00 + -1.8172191817838959e+00 2.1905311832324288e+00 1.4573460233878506e+00 + -2.1025099620014829e+00 2.3957799912756954e+00 1.4367957166388892e+00 + -2.3445480755931460e+00 2.5216068208406175e+00 1.3403431689458847e+00 + -2.5355227380955569e+00 2.5695169523945260e+00 1.1740826965820301e+00 + -2.6796117657002938e+00 2.5345392213740534e+00 9.4342872551141865e-01 + -2.7784143340782519e+00 2.3976950167756166e+00 6.7962969501505466e-01 + -2.8403557617493957e+00 2.1532920046291486e+00 4.5657031746306220e-01 + -2.8833854171020090e+00 1.8429144678160894e+00 3.3709657029972862e-01 + -2.9183959587824884e+00 1.4996220385308816e+00 3.1019672811182497e-01 + -2.9308111490240591e+00 1.1142827151096666e+00 3.1484397284889898e-01 + -2.8842978135051238e+00 6.7070367988617763e-01 2.6393515037450588e-01 + -2.7605507078156730e+00 2.1757558878546909e-01 8.0355066950268395e-02 + -2.6702778567322367e+00 -5.2493366561175731e-02 -7.1582906049812711e-02 + id 12717 + loc 5.7539188861846924e-01 8.4641528129577637e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9241562912829984e-01:4.9241070497200856e-01:2.7077782039977782e-01:3.7791391698319537e-01:9.6467677205324498e-01:4.6362530407822827e-01:1.7405912405308861e+00:3.1713514420641076e-01:2.0951469062425945e+00:4.0956133093512259e-01:2.8826912953335366e+00:3.3441926060032706e-01:3.2474860736972246e+00:4.3150680325677337e-01:3.9508796820105108e+00 + CVs 20 + -7.2291247770593522e-02 2.2518270756796571e-01 1.7013990445124763e-01 + -1.0431350713666343e-01 3.9075824454870428e-01 2.4871763247997059e-01 + -1.4202240968496843e-01 5.3485359449824277e-01 3.1642117456773877e-01 + -2.0026149006899385e-01 6.7234792703332547e-01 4.0014169297575053e-01 + -2.8143887217890412e-01 7.9989578329755751e-01 4.9652845259139228e-01 + -3.8816747441025873e-01 9.1378226256227701e-01 6.0181132473914600e-01 + -5.2251964657033501e-01 1.0101492424634713e+00 7.1178283396388797e-01 + -6.8542698429409488e-01 1.0849275813942008e+00 8.2224879012451491e-01 + -8.7554113385882970e-01 1.1339710250578945e+00 9.2943492408631267e-01 + -1.0886155945447813e+00 1.1539703840589455e+00 1.0309147124840157e+00 + -1.3191780456832782e+00 1.1429894488859391e+00 1.1265906623732822e+00 + -1.5624434175176898e+00 1.1000184564726612e+00 1.2185143443432445e+00 + -1.8155690047759960e+00 1.0241458820000684e+00 1.3094849809999456e+00 + -2.0785432260876888e+00 9.1374776860472584e-01 1.4006824662321011e+00 + -2.3518978139382622e+00 7.6725142015957037e-01 1.4908574296834671e+00 + -2.6321130769095347e+00 5.8545766015423251e-01 1.5793700721524773e+00 + -2.9112614343339445e+00 3.7301131917584185e-01 1.6689130491429713e+00 + -3.1833387699055278e+00 1.3791402236114858e-01 1.7613284496770152e+00 + -3.4841895158750527e+00 -9.1565420176049961e-02 1.8167680677872582e+00 + id 12718 + loc 6.9244647026062012e-01 2.9856467247009277e-01 409 + blend 0.0000000000000000e+00 + interp 5.3579238507662819e-01:4.5895966741050959e-01:4.1652506648508725e-02:2.7103085275584671e-01:6.5121332575009439e-01:4.5146234693071885e-01:1.5914723214626449e+00:4.2242600859111057e-01:1.9935797375374005e+00:3.4344742210922474e-01:2.3672865870216224e+00:4.8221569017351334e-01:2.9724101208468943e+00:4.6939309704758142e-01:3.1926831840999470e+00:5.3578702715277748e-01:3.7847420412572248e+00 + CVs 20 + -2.9104436104222536e-01 1.2850069048129242e-01 1.2227096430030560e-01 + -5.7783210247304351e-01 2.6284213831787057e-01 2.4821128911546925e-01 + -8.7237600050030395e-01 4.0498648972207918e-01 3.5787762465122974e-01 + -1.1785818044432930e+00 5.5235067826153761e-01 4.4605956713403921e-01 + -1.4940723579935753e+00 6.9928844522475897e-01 5.1734435787434063e-01 + -1.8170410407119622e+00 8.4122284597795005e-01 5.7601617068362621e-01 + -2.1487842295928203e+00 9.7335519335713039e-01 6.2534449628358191e-01 + -2.4949489809765484e+00 1.0860914655535838e+00 6.6776376179532648e-01 + -2.8630091260723760e+00 1.1644356676929117e+00 7.0728213095777881e-01 + -3.2553047649831801e+00 1.1890284561079860e+00 7.5282007672040496e-01 + -3.6601697673131555e+00 1.1388687835885045e+00 8.1604386683086139e-01 + -4.0521968231357874e+00 1.0034265553242234e+00 9.0425656421017164e-01 + -4.4081907468886676e+00 7.8979312487224496e-01 1.0185897881490900e+00 + -4.7158093085383666e+00 5.1158039181554704e-01 1.1586204503958433e+00 + -4.9665386741832585e+00 1.8098771309226125e-01 1.3213737033360018e+00 + -5.1532531773673176e+00 -1.9132576424984959e-01 1.4950068164597465e+00 + -5.2752277138626313e+00 -5.9437291620628185e-01 1.6620755087431140e+00 + -5.3445015472959900e+00 -1.0094817752702783e+00 1.8168199330736745e+00 + -5.4350261227190133e+00 -1.3698478161214362e+00 1.9756713498746938e+00 + id 12719 + loc 3.6298555135726929e-01 7.1644717454910278e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7477206522974458e-01:2.9551076564388878e-01:6.8902593274407153e-01:3.8528761840671732e-01:1.0909342441465795e+00:4.1153744454699415e-01:1.9947921643293063e+00:4.4104767987046944e-01:2.5477302555674091e+00:4.7476731750909229e-01:2.9925823125361202e+00:4.0170461797489948e-01:3.3496850085127150e+00:4.1841130120404496e-01:3.9941224406389075e+00 + CVs 20 + 1.9488853165623618e-01 2.9225059334334935e-01 -1.0315440247893104e-02 + 3.8925195669770596e-01 5.5108335102335693e-01 -7.4483527905147034e-02 + 5.9174832979009218e-01 7.8579960012851946e-01 -1.7150106832798068e-01 + 8.0247816959920681e-01 9.8380976525663399e-01 -2.9270188841070099e-01 + 1.0134842929360968e+00 1.1225916102772417e+00 -4.3667999133071245e-01 + 1.2098204726691335e+00 1.1856445126397399e+00 -5.9539670963997460e-01 + 1.3749910300656705e+00 1.1716438271548304e+00 -7.5513224635079179e-01 + 1.4991846682948406e+00 1.0954803437422505e+00 -9.0205302932609344e-01 + 1.5793707081417365e+00 9.7781550676537232e-01 -1.0243599826206986e+00 + 1.6186764332066803e+00 8.3988885290525328e-01 -1.1105259760995150e+00 + 1.6260877599204895e+00 7.0388139946455563e-01 -1.1514134484789842e+00 + 1.6169304576385117e+00 5.8992118091083734e-01 -1.1527023501726092e+00 + 1.6058536582212273e+00 4.9455036295617022e-01 -1.1541228129799057e+00 + 1.5887188113247031e+00 3.7156713393121299e-01 -1.2136655042637059e+00 + 1.5483454499089868e+00 1.6003471461798902e-01 -1.3800826510579025e+00 + 1.4809414904374576e+00 -1.4848483241938193e-01 -1.7203135282598767e+00 + 1.4288260718835373e+00 -3.9466764195644410e-01 -2.3036748126629689e+00 + 1.4897929365557494e+00 -3.0414685169667588e-01 -3.0002742347451834e+00 + 1.4991990537305386e+00 -2.1960641276277637e-01 -3.0993454633931226e+00 + id 12720 + loc 3.2992476224899292e-01 1.3042467832565308e-01 411 + blend 0.0000000000000000e+00 + interp 4.3910632560275259e-01:3.5110626372578968e-01:4.9048189297591804e-01:3.0803815606569440e-01:1.2375698058057287e+00:4.3910193453949659e-01:1.9769883874334848e+00:3.7353031531733333e-01:2.3587270689128714e+00:2.8195707788463736e-01:3.0008836132286207e+00:3.3672280627267848e-01:3.9276911710111757e+00 + CVs 20 + -1.2960277840402701e-01 1.9699284576525322e-01 -4.7050767496685864e-01 + -2.8745883391380506e-01 3.2239224757962603e-01 -8.0699149511994328e-01 + -4.4988356824119291e-01 4.1383260700680957e-01 -1.1306987001239139e+00 + -5.9027114920746560e-01 4.9107383685700889e-01 -1.4877430185966363e+00 + -7.0133727762863729e-01 5.5003738842862193e-01 -1.8735648262738862e+00 + -7.7949560860198241e-01 5.8842986293479194e-01 -2.2813624238404291e+00 + -8.2590217175979963e-01 6.0859812759404552e-01 -2.7048163363579723e+00 + -8.4238877378627930e-01 6.1339676797528331e-01 -3.1375248103478848e+00 + -8.2031712773585830e-01 6.0049248550919287e-01 -3.5737306532634974e+00 + -7.5134821407150809e-01 5.6322959172813980e-01 -4.0057699139963088e+00 + -6.3737713462188061e-01 4.9101177269058272e-01 -4.4246887583374432e+00 + -4.9005236819681208e-01 3.6995984087678591e-01 -4.8242762210601606e+00 + -3.2119150549702946e-01 1.8763644133653612e-01 -5.2007262072796596e+00 + -1.3784733333536137e-01 -5.8063561918884510e-02 -5.5519998430972013e+00 + 5.2414693292924086e-02 -3.5839924775796606e-01 -5.8787949145169538e+00 + 2.3777820039847208e-01 -7.0005428434300665e-01 -6.1819164614176003e+00 + 4.0964104423625664e-01 -1.0690497180605574e+00 -6.4583343161820075e+00 + 5.7111121588009539e-01 -1.4557267382832451e+00 -6.7020158648693755e+00 + 7.1793715289016280e-01 -1.8218869657119470e+00 -6.8633806281530667e+00 + id 12721 + loc 1.1817388236522675e-01 9.7426509857177734e-01 372 + blend 0.0000000000000000e+00 + interp 5.2036467840741207e-01:5.2035947476062805e-01:5.9002319797948921e-01:2.4707921503533720e-01:1.2703644645973406e+00:2.0514330028378211e-01:2.1485611290228315e+00:4.1668244423884787e-01:2.8754342817182312e+00:4.8810802259418468e-01:3.1393232118694079e+00:3.2538334586729889e-01:3.9390763780839064e+00 + CVs 20 + -4.5888848583948411e-01 6.7823194298989475e-01 -4.0122596433004060e-02 + -8.3542285153275064e-01 1.3786706963622546e+00 -1.3710828373946338e-01 + -1.1375019120269023e+00 2.0886409636721663e+00 -3.3974655209778848e-01 + -1.5911524573534734e+00 2.7268944724900894e+00 -5.2468728832815559e-01 + -1.5808614006463380e+00 3.3911320658072284e+00 -8.2122484864037315e-01 + -1.1344331812429309e+00 3.8438023870019453e+00 -1.2253873411117302e+00 + -4.7646119341413162e-01 3.9076029180590806e+00 -1.5794907799426070e+00 + 2.2678103932369131e-01 3.6008004922983039e+00 -1.7849826241746547e+00 + 8.4861876142856407e-01 3.0383723592000429e+00 -1.8261128299760996e+00 + 1.3339568562267687e+00 2.3629541698492735e+00 -1.7402869988775425e+00 + 1.6957936222368504e+00 1.6965171416299003e+00 -1.5947273849304289e+00 + 2.0105740943195989e+00 1.0665597837914875e+00 -1.4401940632723251e+00 + 2.3615657843193998e+00 4.1140718075984883e-01 -1.2593465003061417e+00 + 2.8121167657885398e+00 -2.8873046000190761e-01 -1.0107274030420497e+00 + 3.4781303839048396e+00 -9.3515691009245772e-01 -7.4620329380564776e-01 + 4.3940740657580157e+00 -1.2154504685669951e+00 -7.7156727531462965e-01 + 5.1695090128856016e+00 -1.0212089091341556e+00 -1.3312294564492428e+00 + 5.4134065151300090e+00 -5.9517447934379275e-01 -2.2934205132024186e+00 + 5.5630811164927936e+00 -1.0319160518270021e-01 -3.3749594180357767e+00 + id 12722 + loc 1.4966072142124176e-01 1.6266095638275146e-01 377 + blend 0.0000000000000000e+00 + interp 1.1041043410515599e+00:4.4158350087986803e-01:1.3305247720871305e+00:3.2699618283379639e-01:1.5083582246398610e+00:3.7303429552804857e-01:2.1804147229149962e+00:2.3496305487449234e-01:2.7578301082397814e+00:4.0535631658810928e-01:3.0045944806673686e+00:6.3908271926628846e-01:3.3388190606564008e+00:1.1040943410515598e+00:3.9008886849308508e+00 + CVs 20 + -5.1205851413795878e-01 6.0911499179160800e-01 8.7928314621245607e-01 + -7.9381785414186923e-01 1.0040606691973377e+00 1.6086434113574710e+00 + -9.4650414876299171e-01 1.2578995341823767e+00 2.3406580000397277e+00 + -1.0508573523610669e+00 1.4281586332907672e+00 3.1229629454916759e+00 + -1.1657317148023849e+00 1.5349856772894666e+00 3.9515901311641470e+00 + -1.3465908016205219e+00 1.5610541764377179e+00 4.8303119349711867e+00 + -1.6385675286712371e+00 1.4549156589151719e+00 5.7360236084985647e+00 + -2.0625092848581490e+00 1.1612330305550971e+00 6.6012753098024053e+00 + -2.5814893283941753e+00 6.3924165525796339e-01 7.3370922614698024e+00 + -3.1032123879124991e+00 -1.1271688804057156e-01 7.8662793906878878e+00 + -3.5066949916492192e+00 -1.0452020071207477e+00 8.1454398773101264e+00 + -3.6826139928511066e+00 -2.0555264857447644e+00 8.1702472079274209e+00 + -3.5965656047999293e+00 -2.9997219228524514e+00 7.9918732026187786e+00 + -3.3412556641826958e+00 -3.7836848036771205e+00 7.7364580574382060e+00 + -3.0570994968221843e+00 -4.4446840892363291e+00 7.5369824772542309e+00 + -2.8033959537548894e+00 -5.0454233800223447e+00 7.4637061270707008e+00 + -2.5641248594091750e+00 -5.5730551027058688e+00 7.5226378917383947e+00 + -2.3314472759892078e+00 -5.9895596264879813e+00 7.6464688578853366e+00 + -2.1697199343234006e+00 -6.3391341768147171e+00 7.7097166383183691e+00 + id 12723 + loc 4.6384745836257935e-01 9.9845844507217407e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6600280751327213e-01:3.6599914748519702e-01:7.3189723118157046e-01:2.1756754648126617e-01:1.0548546726398365e+00:2.8566337585883994e-01:1.9991022302553914e+00:1.4901853495160350e-01:2.9529565981314829e+00:2.5236626793194522e-01:3.8085255270468017e+00 + CVs 20 + 3.2057138351511894e-01 2.6271634506124203e-01 -1.2363380508574086e-01 + 6.2404906034533647e-01 5.2250509780435539e-01 -2.4310678781478673e-01 + 9.1311597389658417e-01 7.6400278145367684e-01 -3.6911860700879356e-01 + 1.1876870598832630e+00 9.7447076430177415e-01 -5.0714230596363541e-01 + 1.4435633730323743e+00 1.1437795101718402e+00 -6.5825165345849279e-01 + 1.6750154817315310e+00 1.2671378220279941e+00 -8.2006265040827819e-01 + 1.8795804791031927e+00 1.3469565946246906e+00 -9.8698147981763429e-01 + 2.0609964336200823e+00 1.3910995277557021e+00 -1.1534387584722983e+00 + 2.2259423669216236e+00 1.4080840442155695e+00 -1.3160439255489622e+00 + 2.3803598709675975e+00 1.4045406150244579e+00 -1.4739991623860833e+00 + 2.5277297488528236e+00 1.3859445905607066e+00 -1.6260477775828739e+00 + 2.6722289661975904e+00 1.3593789801301792e+00 -1.7690781431576892e+00 + 2.8237860433636572e+00 1.3291130897811159e+00 -1.9034451774391421e+00 + 3.0011263507364467e+00 1.2780615257260188e+00 -2.0353374231836407e+00 + 3.2241851564760324e+00 1.1622592150975479e+00 -2.1732237012642779e+00 + 3.4803856417744514e+00 9.3910750197246307e-01 -2.3363592953472536e+00 + 3.7164990148562524e+00 5.9500972474825586e-01 -2.5562062433432540e+00 + 3.8464570940491840e+00 1.7919541911820180e-01 -2.8376281265848151e+00 + 3.7293650280632074e+00 6.0122583146442587e-02 -2.9012048407196476e+00 + id 12724 + loc 8.9548403024673462e-01 7.1818053722381592e-02 413 + blend 0.0000000000000000e+00 + interp 4.1733081771072850e-01:3.6994574228948757e-01:2.4308828327602217e-01:2.9931850042571934e-01:9.9634135841755056e-01:2.1625850909131891e-01:2.0136622347758655e+00:3.1081186086166945e-01:3.3621640102355141e+00:4.1732664440255141e-01:3.9622831865714669e+00 + CVs 20 + -1.0055327996398185e+00 2.0849673664341223e-01 2.3190231017371132e-01 + -1.6704709501578685e+00 2.5809598795248684e-01 3.8682753567658462e-01 + -2.2578087118144317e+00 2.4031596469271091e-01 5.0009649191651184e-01 + -2.8693829587440098e+00 1.9317476738416184e-01 5.8064785845450828e-01 + -3.4904280139255430e+00 9.6552261971005415e-02 6.2996912177955822e-01 + -4.1040181159556024e+00 -6.4702380118142111e-02 6.5686660362021065e-01 + -4.6908034384809731e+00 -2.9721047447882498e-01 6.7422451863564348e-01 + -5.2286942937966980e+00 -5.9883055023592935e-01 6.9001775962543677e-01 + -5.6976564193498076e+00 -9.5896721517980688e-01 7.0063087747791553e-01 + -6.0836127176033363e+00 -1.3589908133149935e+00 6.9941393476872071e-01 + -6.3818521081279345e+00 -1.7761879827865417e+00 6.8665768994881027e-01 + -6.6042880760493565e+00 -2.1936260834237640e+00 6.6420424216749141e-01 + -6.7751314012330717e+00 -2.6056790015169735e+00 6.2986765831284419e-01 + -6.9164272441026888e+00 -3.0132818315858736e+00 5.8008975889173264e-01 + -7.0380196269674897e+00 -3.4183928246722504e+00 5.1513588948642730e-01 + -7.1344263593934851e+00 -3.8175482832714716e+00 4.3672730911802138e-01 + -7.1920959434860361e+00 -4.2039315817565903e+00 3.4411099263807776e-01 + -7.2107573430328822e+00 -4.5856731148260401e+00 2.4273753381394442e-01 + -7.2212238589660069e+00 -5.0719523339010060e+00 1.4970807265378511e-01 + id 12725 + loc 8.9383697509765625e-01 2.7262854576110840e-01 1080 + blend 0.0000000000000000e+00 + interp 3.8363396905853642e-01:3.0819546606450277e-01:3.2265820949245549e-01:3.7099549639309864e-01:9.9275760610532304e-01:3.3673637490570413e-01:1.8008983082017611e+00:3.8363013271884583e-01:2.1950053543500481e+00:3.2634517160399917e-01:2.9504296694015868e+00:3.5153214269291777e-01:3.8857103362503818e+00 + CVs 20 + -1.4112907378519485e-01 3.3856595992442740e-01 -2.3222528245535443e-01 + -2.6637443246461312e-01 6.1233744507844834e-01 -3.4985235707720896e-01 + -3.9459797444212535e-01 8.8143126086819934e-01 -4.3752574763681806e-01 + -5.3012375242581733e-01 1.1611299622737603e+00 -5.2940603719915547e-01 + -6.7583110856751372e-01 1.4429315836741168e+00 -6.1680170385439936e-01 + -8.3396703243550485e-01 1.7143764974165761e+00 -6.8783569911371922e-01 + -1.0065815447903543e+00 1.9605171392293599e+00 -7.2764551274187750e-01 + -1.1955278453178066e+00 2.1676668481712453e+00 -7.2412354980008931e-01 + -1.4002899878876403e+00 2.3245238972278388e+00 -6.7100635480075965e-01 + -1.6171180891724999e+00 2.4226787097882365e+00 -5.6701774848567987e-01 + -1.8399493119615122e+00 2.4577788969164254e+00 -4.1516685608237891e-01 + -2.0619732642247954e+00 2.4293494989499718e+00 -2.2181904112792039e-01 + -2.2776774861517168e+00 2.3386153763771942e+00 4.8405398392938892e-03 + -2.4845188283313275e+00 2.1853406421674038e+00 2.5502961282133141e-01 + -2.6864814451303034e+00 1.9594083761620251e+00 5.1605598796440377e-01 + -2.8956076752126005e+00 1.6204535103129003e+00 7.5960011735669941e-01 + -3.1096833280056297e+00 1.1163007189468388e+00 8.9577994120858673e-01 + -3.2758229590366335e+00 5.4957656249293085e-01 8.2954712581238299e-01 + -3.3792131309261078e+00 2.2338023653661154e-01 7.8896388314814481e-01 + id 12726 + loc 3.1991246342658997e-01 6.7784732580184937e-01 411 + blend 0.0000000000000000e+00 + interp 4.4597827743352431e-01:3.2293365069715302e-01:2.4372209517499988e-01:4.4597381765075000e-01:9.6024702039233667e-01:3.2460029410380442e-01:1.8988535257825945e+00:2.4762848921249506e-01:2.6198686457374318e+00:3.4932215653516607e-01:3.0863525945803385e+00:4.3063931587100512e-01:3.8200032481726955e+00 + CVs 20 + 8.1499017660219220e-01 1.9145373892141393e-01 -5.1536016452979352e-02 + 1.3875001331580632e+00 2.7159203593731263e-01 -1.2856529340176595e-01 + 1.9167473501141097e+00 3.0455396229031562e-01 -2.1537527496616665e-01 + 2.4959196374359904e+00 3.1466465654379255e-01 -3.0508932038596792e-01 + 3.1207071613435020e+00 2.8885069554446119e-01 -3.9202983527516055e-01 + 3.7733591560735880e+00 2.1575370080962319e-01 -4.7185719133726500e-01 + 4.4269230747045611e+00 8.7540694613415626e-02 -5.4250308419256932e-01 + 5.0501070653441369e+00 -1.0120899386110183e-01 -6.0241894540429031e-01 + 5.6078739570663174e+00 -3.4968167179411647e-01 -6.5307209350853923e-01 + 6.0652583287348776e+00 -6.4401559382086648e-01 -7.0061098791564169e-01 + 6.4027789112641971e+00 -9.5834281168145230e-01 -7.4864891994617599e-01 + 6.6304088601838904e+00 -1.2679854389651510e+00 -7.9205954888505725e-01 + 6.7742817252442951e+00 -1.5590676748322556e+00 -8.2252539350228537e-01 + 6.8559850587396598e+00 -1.8229342444211667e+00 -8.3474913576273024e-01 + 6.8918531677501917e+00 -2.0551642643445120e+00 -8.2735463079457083e-01 + 6.8964833742350953e+00 -2.2602922078115673e+00 -8.0424987159994321e-01 + 6.8801268498722603e+00 -2.4469153445490095e+00 -7.7269489145030412e-01 + 6.8416441328973683e+00 -2.6191281993581068e+00 -7.3263762049999570e-01 + 6.7043736492037809e+00 -2.8904606265484576e+00 -6.9896825854027533e-01 + id 12727 + loc 5.3568887710571289e-01 5.7269185781478882e-02 403 + blend 0.0000000000000000e+00 + interp 5.2503450132811502e-01:4.5156210618839265e-01:9.6608440937781870e-02:3.0705393954759674e-01:1.0000003595896572e+00:2.6788667897170154e-01:1.8838165075641902e+00:3.0778618782520656e-01:2.7691693307643934e+00:4.0482101090278777e-01:3.2771898595736952e+00:5.2502925098310171e-01:3.8840728358774923e+00 + CVs 20 + -5.6085201992984918e-02 2.6898016543602710e-01 2.3479102821351283e-01 + -9.3147341186556848e-02 5.3270672414244624e-01 4.8542047997375537e-01 + -1.2760055699915265e-01 7.9912887805601363e-01 7.5039046597546255e-01 + -1.6660570308835554e-01 1.0590726493870224e+00 1.0310173338025483e+00 + -2.0582561533289340e-01 1.3010769637167969e+00 1.3371491156365183e+00 + -2.2437236724741261e-01 1.5240430964552889e+00 1.6765043810056774e+00 + -1.8539996060237007e-01 1.7262432549623272e+00 2.0369464558961949e+00 + -6.0640410065112005e-02 1.8956684229797096e+00 2.3881067508401754e+00 + 1.5447339973642260e-01 2.0164779438531548e+00 2.6969406942894598e+00 + 4.4539159908449932e-01 2.0825828123025047e+00 2.9407224323211936e+00 + 7.8892998652959634e-01 2.0985723578626581e+00 3.1128176192978403e+00 + 1.1659055320824425e+00 2.0693232646402002e+00 3.2256385270852248e+00 + 1.5668528507987030e+00 1.9932340361497958e+00 3.3014712241545872e+00 + 1.9772904623697487e+00 1.8709224658234682e+00 3.3509405958732374e+00 + 2.3818176163715048e+00 1.7098443629161193e+00 3.3799987280730210e+00 + 2.7947269976080178e+00 1.4985890265878088e+00 3.4232603043396126e+00 + 3.2330996979664195e+00 1.2215644504374008e+00 3.5476679919688707e+00 + 3.6401425631846434e+00 9.2829752859262227e-01 3.7868743804922902e+00 + 3.8866970196903812e+00 7.1421783621732837e-01 4.0143492091506197e+00 + id 12728 + loc 3.1218129396438599e-01 2.5862112641334534e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2552278873902477e-01:4.2551853351113739e-01:5.2708862971032222e-01:2.4062584706939197e-01:1.1076641356816272e+00:2.7082907443477161e-01:2.0354809283661339e+00:3.4045872801576571e-01:2.8205774937356733e+00:2.5151442249345740e-01:3.9121075003161367e+00 + CVs 20 + 3.1050184380347701e-01 3.1015601123969849e-01 1.7453132356489676e-01 + 5.5774741076246337e-01 5.5014863428645355e-01 3.3110560646093917e-01 + 8.0154180675212716e-01 7.5488961199882976e-01 4.5913950240476431e-01 + 1.0638284415917481e+00 9.4357147132195762e-01 5.6130009189681052e-01 + 1.3217701240907083e+00 1.1207005240294996e+00 6.5608671671207985e-01 + 1.5572694187198641e+00 1.2967760727499771e+00 7.6648036282927956e-01 + 1.7621916494135523e+00 1.4962685201196801e+00 9.3431387219193041e-01 + 1.8594074920353125e+00 1.7219781918457719e+00 1.2355556771353124e+00 + 1.7227701293094309e+00 1.8696145511453692e+00 1.6023213831480811e+00 + 1.4178797767551075e+00 1.8880604919579804e+00 1.8648643454383860e+00 + 1.0487152256430341e+00 1.8217256433971372e+00 1.9907310200587844e+00 + 6.4901516946650406e-01 1.7024159568185646e+00 2.0023847339684009e+00 + 2.5758703306071307e-01 1.5382591768855605e+00 1.9099778567143249e+00 + -1.9346015880349010e-02 1.3440690006226352e+00 1.7477878360469716e+00 + -9.3282272948426836e-02 1.1444271044038135e+00 1.5843605129552423e+00 + 2.3284296608292898e-02 9.0580516682430368e-01 1.4341200157645777e+00 + 2.5100435123411452e-01 4.8556626549173576e-01 1.2325250968582520e+00 + 3.0334387420692766e-01 -2.6646486474413078e-01 7.9026290476424876e-01 + 1.3840382170918505e-01 -3.5149404428456810e-01 7.1701117501464351e-01 + id 12729 + loc 2.7175638079643250e-01 7.5677603483200073e-01 393 + blend 0.0000000000000000e+00 + interp 3.9433890991273512e-01:3.1416523283068215e-01:7.7143623648736526e-01:3.1187302549880197e-01:1.1213907954873192e+00:3.9433496652363603e-01:1.9079684117357627e+00:3.7060422093569606e-01:2.2395382493434304e+00:2.8730630402550011e-01:3.0158788638490166e+00:3.4056045060527873e-01:3.8963839838592125e+00 + CVs 20 + -3.0245779776418280e-01 3.9632454993435096e-01 -2.5069141676692730e-01 + -5.9468974021562626e-01 8.0092805552737234e-01 -5.2138342492177880e-01 + -8.8024382020505032e-01 1.2192954153650817e+00 -8.1334683089891424e-01 + -1.1874957849917607e+00 1.6382843862360563e+00 -1.1169349063818004e+00 + -1.5474205042516953e+00 2.0323954553800014e+00 -1.4128466888880895e+00 + -1.9732006380066209e+00 2.3701328915916138e+00 -1.6787551140426642e+00 + -2.4534381333033233e+00 2.6116419469394101e+00 -1.8985150128046062e+00 + -2.9484707368733751e+00 2.7219589095650676e+00 -2.0696828991145164e+00 + -3.4055676956158756e+00 2.7115828814668519e+00 -2.2064501922842639e+00 + -3.8045913385642995e+00 2.6323801990600488e+00 -2.3297490899454054e+00 + -4.1638387188504691e+00 2.5165094548168350e+00 -2.4458246294697394e+00 + -4.5019698695497246e+00 2.3644536191704200e+00 -2.5466072700894413e+00 + -4.8196866008838439e+00 2.1771034354734269e+00 -2.6309247700087517e+00 + -5.1221752001333751e+00 1.9600706639359036e+00 -2.7167580869758408e+00 + -5.4339441140305649e+00 1.7023174297741115e+00 -2.8208108184024905e+00 + -5.7877496470081802e+00 1.3886838488037196e+00 -2.9221489730312644e+00 + -6.1987745964813286e+00 1.0428520632622622e+00 -2.9585018750490972e+00 + -6.6566110406050374e+00 6.9589478222533518e-01 -2.9178550407659261e+00 + -7.1616178499106722e+00 3.0536451680109122e-01 -2.9073459557740882e+00 + id 12730 + loc 5.3098285198211670e-01 4.8741647601127625e-01 372 + blend 0.0000000000000000e+00 + interp 3.2311601709917354e-01:3.0438599551660522e-01:1.9738130686377087e-02:2.6384907379073397e-01:1.0621004500491171e+00:2.6986963591120150e-01:2.2301522488109438e+00:3.2311278593900256e-01:3.2171713335977250e+00 + CVs 20 + 3.5180520927790870e-01 5.3134199831583828e-01 2.4151387218052822e-01 + 7.0355687744521100e-01 1.0036203201618594e+00 4.5870313460247064e-01 + 1.0797793439079753e+00 1.3973894600500949e+00 6.5179168176719160e-01 + 1.4444171577262608e+00 1.7005496863503180e+00 8.1390427454286129e-01 + 1.7381320132002889e+00 1.9738754144089945e+00 1.0003109957212293e+00 + 1.8349557890774548e+00 2.2627275509097338e+00 1.3249296825060537e+00 + 1.6253544958507584e+00 2.4675422928713155e+00 1.7759748749146307e+00 + 1.1195277270820045e+00 2.4877509479501461e+00 2.2584042937655173e+00 + 3.8909275060523352e-01 2.2834148497636750e+00 2.6915420447379006e+00 + -4.8024259879846742e-01 1.8227578919319591e+00 3.0132591002375682e+00 + -1.3908253917883389e+00 1.1176348963021063e+00 3.1696269928570135e+00 + -2.2908458829047573e+00 3.2973711094651048e-01 3.1403481952898087e+00 + -3.1836697334130770e+00 -2.2034726963488382e-01 3.0232382023210964e+00 + -3.9298166059204753e+00 -1.8345581486309248e-01 3.0987867952560486e+00 + -4.1551890542887620e+00 3.7269364853667808e-01 3.4628490180171556e+00 + -4.0017057157012665e+00 9.1970296652449068e-01 3.7811622599754053e+00 + -3.8100365943912999e+00 1.3261399928154971e+00 3.8828591600890481e+00 + -3.8740080362895930e+00 1.6740950456865937e+00 3.7845602491993304e+00 + -4.4406017665756430e+00 2.1770465972577417e+00 3.6614576296802190e+00 + id 12731 + loc 1.0087412595748901e-01 8.9806580543518066e-01 1068 + blend 0.0000000000000000e+00 + interp 6.8952298700542147e-01:3.7163143000237897e-01:8.0766134584267291e-02:3.8045724283875948e-01:9.0225959447757176e-01:4.9907736813313169e-01:1.3017718286291431e+00:6.8951609177555140e-01:1.9930575944990641e+00:6.3826625268995285e-01:2.2130222165266686e+00:4.1249639107337310e-01:2.9991104101763284e+00:3.6847057002570655e-01:3.6590561829114305e+00 + CVs 20 + 4.6772572968748448e-02 3.2370957303525955e-01 -1.9488429547234615e-01 + 1.1703064121108654e-01 6.5904530526084193e-01 -3.8969563452898626e-01 + 1.9870026033414179e-01 1.0061232269870157e+00 -5.7188648764558991e-01 + 2.8758327724950594e-01 1.3664803171858046e+00 -7.4310289311198374e-01 + 3.8379259007465710e-01 1.7407345118217519e+00 -9.1736673894632714e-01 + 4.8444624193707686e-01 2.1293058213714557e+00 -1.1142141233303857e+00 + 5.8344904256019603e-01 2.5314153036013440e+00 -1.3588556717854727e+00 + 6.7271279783898408e-01 2.9340890168815674e+00 -1.6816149698406924e+00 + 7.4779474317992367e-01 3.2965375088498003e+00 -2.1009161645334427e+00 + 8.2249835435856655e-01 3.5787656813570550e+00 -2.5983796619922335e+00 + 9.3466792399819254e-01 3.7868898588438977e+00 -3.1472928038502226e+00 + 1.1257969143864017e+00 3.9287369705497408e+00 -3.7524130315480084e+00 + 1.4138504716833280e+00 3.9630953008783973e+00 -4.4159946407890791e+00 + 1.7905417694536649e+00 3.8460383340132029e+00 -5.0886879863749295e+00 + 2.2395784916735035e+00 3.5844637563782182e+00 -5.7169843245822749e+00 + 2.7056234086401885e+00 3.1977392543546372e+00 -6.3267652229563458e+00 + 3.0635546794517312e+00 2.7171160826226175e+00 -6.9967598402573881e+00 + 3.2509461889968767e+00 2.2422626837850963e+00 -7.7215323040702959e+00 + 3.4697191235940741e+00 1.8575838848079864e+00 -8.3686818563646685e+00 + id 12732 + loc 9.2027163505554199e-01 7.7492512762546539e-02 1081 + blend 0.0000000000000000e+00 + interp 4.4186342441849835e-01:4.0987482974976663e-01:4.6488725692282573e-01:4.4185900578425419e-01:9.8727493205505412e-01:2.9451334931888418e-01:1.2319368872257637e+00:4.1638094875871928e-01:1.9013449980075823e+00:4.2611622659593085e-01:2.9505536342855891e+00:3.9089222010911867e-01:3.1535744682613247e+00:3.4374514924807181e-01:3.9437844361685190e+00 + CVs 20 + 1.1198215055421987e-01 4.9740412399897649e-01 -3.6244408994321892e-01 + 1.4844443887816383e-01 8.5876543823871720e-01 -5.4811119698461996e-01 + 1.6279275552496814e-01 1.1659000902774774e+00 -6.6286343432893402e-01 + 1.8091666246498339e-01 1.4454643387074912e+00 -7.5247317025733906e-01 + 2.0205617910127127e-01 1.6891995817172534e+00 -8.2082171296784201e-01 + 2.2498212909086979e-01 1.8800252423845158e+00 -8.7993994995072633e-01 + 2.4551182170846531e-01 2.0025015853983077e+00 -9.5697153295222015e-01 + 2.5255094256599575e-01 2.0749770618825849e+00 -1.1052514337688844e+00 + 2.3440789359861286e-01 2.1981029569818729e+00 -1.3492909808039504e+00 + 2.0871245115588066e-01 2.4328643750700207e+00 -1.5427181738310809e+00 + 2.0633719527804040e-01 2.6492557479433185e+00 -1.5831495475707422e+00 + 2.3560047218806246e-01 2.7666989099732140e+00 -1.5271289860052675e+00 + 2.9784430513828630e-01 2.7853169566523563e+00 -1.4295338193093925e+00 + 3.9408526073131711e-01 2.7232599310831085e+00 -1.3164149055679171e+00 + 5.1695985580848258e-01 2.6181486598737265e+00 -1.1957013824616687e+00 + 6.4836236621008803e-01 2.5488086694701106e+00 -1.0543737471640502e+00 + 7.8066941177458360e-01 2.5496702128545792e+00 -8.6788456601012032e-01 + 9.3218751966482016e-01 2.4705512593657106e+00 -7.4601852163207982e-01 + 1.1017650555469936e+00 2.1195297163327718e+00 -1.0174366410645126e+00 + id 12733 + loc 8.1744241714477539e-01 4.6529918909072876e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0700097727633999e-01:3.7577734488267150e-01:3.5751947082133584e-02:3.5573420667093975e-01:9.1608147594272404e-01:2.6722712105032614e-01:1.5697643040949671e+00:4.0699690726656723e-01:2.0480336856222299e+00:2.9310780441184275e-01:2.6498453340139827e+00:3.6230290963635930e-01:3.0267762433330758e+00:3.2075283003695704e-01:3.6972522449967773e+00 + CVs 20 + -1.3335979591092856e-01 2.3894014270495922e-01 2.4471051962980461e-01 + -2.8902382657312531e-01 4.5625258967232513e-01 4.5698284750766871e-01 + -4.7571759071116615e-01 6.4748963597944376e-01 6.4404715460936290e-01 + -6.9873320131124994e-01 8.0772244667490389e-01 8.0366638141155300e-01 + -9.6791519251882541e-01 9.4107983625124314e-01 9.3301499316523029e-01 + -1.2875723145858635e+00 1.0810389659699771e+00 1.0430341293435483e+00 + -1.6255688214360411e+00 1.2903153147039514e+00 1.1565019945423005e+00 + -1.9173457690803017e+00 1.5997776414648599e+00 1.2941112137770372e+00 + -2.1186815077789305e+00 1.9829592339564990e+00 1.4766460730477227e+00 + -2.2067572709526915e+00 2.3822245930637118e+00 1.7431214673987045e+00 + -2.1660117895315412e+00 2.6858946895812048e+00 2.1269648698025776e+00 + -2.0362032099802718e+00 2.7833463947190777e+00 2.5778164888622315e+00 + -1.8914130179704030e+00 2.6759874626878490e+00 3.0104700375786768e+00 + -1.7918125384065144e+00 2.4311481023169268e+00 3.3697103516787603e+00 + -1.7643737397251065e+00 2.1163498593548700e+00 3.6432193037464646e+00 + -1.8130388056581728e+00 1.7560518575577420e+00 3.8264021704058520e+00 + -1.9445335053114547e+00 1.3698661819922475e+00 3.8838251084800848e+00 + -2.1324202492872941e+00 1.0074808717512376e+00 3.8149645073374581e+00 + -2.2664371871324493e+00 6.3908456316553586e-01 3.7704039727195919e+00 + id 12734 + loc 1.8888688087463379e-01 6.6468685865402222e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7339099763069165e-01:2.7856763013889196e-01:4.7166177390297603e-03:3.8852722599113476e-01:6.0358666496570079e-01:3.2412965819063366e-01:1.1728231767247521e+00:4.7338626372071535e-01:1.9220378109075069e+00:3.9048096734063548e-01:2.4573732478244570e+00:3.8537558709084985e-01:2.9997329645519093e+00:4.2265577957414535e-01:3.4425390761615153e+00 + CVs 20 + 1.9022880640177112e-01 3.4722708573514194e-01 4.7846198577240401e-02 + 3.7897364553975543e-01 6.4261128340938078e-01 1.2688629406836738e-02 + 5.7295965834006146e-01 9.1583215221277214e-01 -5.9145302783081832e-02 + 7.7041564222310310e-01 1.1549139101578221e+00 -1.5613405929424162e-01 + 9.6323074712736956e-01 1.3313351105897784e+00 -2.8024738078305561e-01 + 1.1338309810902096e+00 1.4170380041918909e+00 -4.2414824398625944e-01 + 1.2581976087505464e+00 1.4008398430467484e+00 -5.6530736864818409e-01 + 1.3215623861639996e+00 1.3052257705095693e+00 -6.7294067856453488e-01 + 1.3327166296223993e+00 1.1745798260031159e+00 -7.2794403770748917e-01 + 1.3168043656695101e+00 1.0468270326003546e+00 -7.3017565337483570e-01 + 1.2973722448663563e+00 9.4434481377927415e-01 -6.8965288551728066e-01 + 1.2931805514781936e+00 8.7180218070286697e-01 -6.3628387485499394e-01 + 1.3070812934331713e+00 7.9531449941911547e-01 -6.1839369405061473e-01 + 1.3207954660690211e+00 6.4984885539210013e-01 -6.6723714825270553e-01 + 1.3131645506180225e+00 3.6472742949339559e-01 -8.1281971432760947e-01 + 1.2738428909272228e+00 -6.4548281079185421e-02 -1.1672895073229945e+00 + 1.2557157296996486e+00 -3.7760030069208861e-01 -1.8712980105475556e+00 + 1.4230344831348722e+00 -1.3910847590250852e-01 -2.7654689174817064e+00 + 1.4653416406716329e+00 -1.0728283937037242e-01 -2.8044841621097301e+00 + id 12735 + loc 2.1533527970314026e-01 6.6948676109313965e-01 406 + blend 0.0000000000000000e+00 + interp 3.9589033428476395e-01:3.9588637538142113e-01:5.4846729842948805e-01:3.1115830173874370e-01:1.0732853694180642e+00:3.5224064606192812e-01:1.9992438042878915e+00:3.2465468640116496e-01:2.8532119656749595e+00:3.0812854504036313e-01:3.7475382590750783e+00 + CVs 20 + 1.8488918188101072e-01 2.5511978486700909e-01 -1.7956208283091105e-01 + 2.1732387654639052e-01 4.3447837226792019e-01 -3.3230443861546322e-01 + 2.0510205030455625e-01 5.7015564039983357e-01 -4.6335030512975961e-01 + 1.8219151288840169e-01 7.0121449669230462e-01 -5.8520040476669832e-01 + 1.4840333435153463e-01 8.2690318605914914e-01 -6.9417603213958801e-01 + 1.0516918857525320e-01 9.4479838204111299e-01 -7.8741468041926443e-01 + 5.5076320579567573e-02 1.0523856222089907e+00 -8.6301062233407611e-01 + 2.3148426756000040e-03 1.1492084372393141e+00 -9.1977389762795536e-01 + -4.5609907343248102e-02 1.2442586600705701e+00 -9.5423793231999998e-01 + -5.1096289937800909e-02 1.4101973752573274e+00 -9.1665990158906041e-01 + 2.6392420542587902e-01 1.2925219330637505e+00 -2.0323508762523257e-01 + 2.8507228993796957e-01 1.0990709056239489e+00 -1.1148749576081635e-01 + 2.8904296796610729e-01 1.0135220050605696e+00 -4.5592077691902905e-02 + 2.8597518169708014e-01 9.3778529775524544e-01 2.9869036304212379e-02 + 2.8730704400358337e-01 8.7701609449182172e-01 1.1700104979470514e-01 + 3.0649203294665994e-01 8.4201759103923490e-01 2.1577707252637307e-01 + 3.4814960378413562e-01 8.2791396877084689e-01 3.2103513933016203e-01 + 4.0722834283134390e-01 8.1913984254737249e-01 4.2749030995392479e-01 + 4.1279240000499184e-01 7.4006176856078243e-01 5.2800539877275066e-01 + id 12736 + loc 2.9531475901603699e-01 3.8800352811813354e-01 409 + blend 0.0000000000000000e+00 + interp 4.3309740056390006e-01:3.7593409539545980e-01:6.0733327395320003e-02:4.3192878842343219e-01:6.8910173309695755e-01:3.5760929995932145e-01:1.5225401760055335e+00:4.3309306958989446e-01:2.0931657950703340e+00:3.0233819083845326e-01:2.6160281411913942e+00:2.5500743497677913e-01:3.2698491042898521e+00 + CVs 20 + -5.9289850649559855e-02 1.6704902703546132e-01 -5.8178923968173124e-01 + -1.1359996279672738e-01 2.7599972090875236e-01 -1.0734606771175681e+00 + -1.5085158553921141e-01 3.6540162006359889e-01 -1.5275764049139149e+00 + -1.8472284133436190e-01 4.5475994380413176e-01 -1.9709258503350293e+00 + -2.2128404432042531e-01 5.5112252983987342e-01 -2.4023714704876244e+00 + -2.5875926865939586e-01 6.6218600862774379e-01 -2.8182781096016036e+00 + -2.9358279984986935e-01 7.8977029756322303e-01 -3.2170198958038316e+00 + -3.2532921169166751e-01 9.2773105756521979e-01 -3.6041633994959055e+00 + -3.5787064551842757e-01 1.0678948445209726e+00 -3.9914902590362247e+00 + -3.9793236873570725e-01 1.2009309153444347e+00 -4.3891213616883622e+00 + -4.5083176072778647e-01 1.3137457389208675e+00 -4.8045414851072792e+00 + -5.1786623495329720e-01 1.3895664977986268e+00 -5.2450331480323023e+00 + -5.9590487269137093e-01 1.4101962211787016e+00 -5.7139761138223646e+00 + -6.7803457468225026e-01 1.3573524066019913e+00 -6.2087524148181945e+00 + -7.5107737952434550e-01 1.2119383504528143e+00 -6.7250284187734461e+00 + -7.9189063883464106e-01 9.5627088190784981e-01 -7.2555362212330721e+00 + -7.7529137941565729e-01 5.8618533252183447e-01 -7.7768083078023800e+00 + -7.0116937879350516e-01 1.4054833250690191e-01 -8.2359775383322749e+00 + -7.0446417727629163e-01 -1.0308634248523596e-01 -8.4240959209280142e+00 + id 12737 + loc 4.9164029955863953e-01 4.9315252900123596e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9822012990085196e-01:2.6978851218804051e-01:2.6692307906730051e-02:3.6606391026806367e-01:1.0088501349861747e+00:4.6947004463351899e-01:1.9111445636197124e+00:2.9224457025420303e-01:2.1827829677482988e+00:3.6868113994609369e-01:2.9491351254809244e+00:4.9821514769955300e-01:3.2139359590408052e+00 + CVs 20 + 2.4832959970201693e-01 2.9984969398358741e-01 1.2791378872746320e-01 + 3.6253933740636590e-01 4.8879189916065413e-01 2.0474141216525407e-01 + 4.2767011803902977e-01 6.3973764438388214e-01 2.6260737015086377e-01 + 5.0642624840890127e-01 7.7449227581858548e-01 3.2190606107511838e-01 + 5.9274812222590556e-01 8.8835426076183510e-01 3.7978631725075829e-01 + 6.8107983560688223e-01 9.7870763376125136e-01 4.3168333022290739e-01 + 7.6686665977144142e-01 1.0465872823135440e+00 4.7246859105865324e-01 + 8.4684738949521710e-01 1.0969388907903750e+00 4.9769787946757488e-01 + 9.2112735904405774e-01 1.1367149362252611e+00 5.0410345809699220e-01 + 9.9436045641777338e-01 1.1740184775876423e+00 4.8847937349349191e-01 + 1.0748658027028841e+00 1.2186906050950421e+00 4.4956672468891545e-01 + 1.1721191467618561e+00 1.2781438016626661e+00 3.9605598944480958e-01 + 1.2905234553134306e+00 1.3487505296623568e+00 3.4809393843304615e-01 + 1.4232046037246833e+00 1.4104690235583195e+00 3.2726721352280536e-01 + 1.5522887666443272e+00 1.4343767670612202e+00 3.4327567262001535e-01 + 1.6647775300829162e+00 1.4065719361172453e+00 3.9031321496306937e-01 + 1.7638830814470086e+00 1.3314419590384492e+00 4.6059854044961657e-01 + 1.8616629520043304e+00 1.2090450703456597e+00 5.5431189169081851e-01 + 1.8670871711407024e+00 1.0208260968584399e+00 6.4682952806153060e-01 + id 12738 + loc 3.3461237326264381e-03 1.1232371628284454e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7315161227824312e-01:2.4793876579621368e-01:9.4109176675527506e-01:3.2404750219620981e-01:1.7017356801067050e+00:3.7314788076212035e-01:2.6234346550953140e+00:2.4937785854410202e-01:3.7267216944557622e+00 + CVs 20 + -1.2745419929772966e-01 3.2304465167378299e-01 -2.6396911213730367e-01 + -2.4223969828185737e-01 6.6045087700779836e-01 -5.3714227109893309e-01 + -3.8812128793589107e-01 9.8114700948709532e-01 -8.3340536693732326e-01 + -5.8219634778266371e-01 1.2670179359449274e+00 -1.1507711967898258e+00 + -8.2620956074331076e-01 1.5041611494840357e+00 -1.4806955454824222e+00 + -1.1162028208569768e+00 1.6753361011803567e+00 -1.8133028416035517e+00 + -1.4448620103004199e+00 1.7680423535760044e+00 -2.1360194562437580e+00 + -1.8016655562689761e+00 1.7784805035875040e+00 -2.4328810673556522e+00 + -2.1700883869790522e+00 1.7078533762035342e+00 -2.6869144604036133e+00 + -2.5288466134744207e+00 1.5614663509617681e+00 -2.8845219982508770e+00 + -2.8590877461426238e+00 1.3541595352718336e+00 -3.0145306955744795e+00 + -3.1499128366843876e+00 1.1123860813338287e+00 -3.0697454979858008e+00 + -3.3972920620177400e+00 8.6458804882794116e-01 -3.0543328471933444e+00 + -3.6042663586121555e+00 6.3309153959799480e-01 -2.9813408667822339e+00 + -3.7720073483500887e+00 4.2725353564938895e-01 -2.8639593658184705e+00 + -3.8845259802376173e+00 2.5084187318327067e-01 -2.7107930584081501e+00 + -3.9292450048478118e+00 1.1913638591103237e-01 -2.5357450011609464e+00 + -3.9643246786859025e+00 -9.7286397034603844e-03 -2.3617121133139038e+00 + -4.0066992588769832e+00 -2.0673084444471845e-01 -2.1703331449002716e+00 + id 12739 + loc 2.5510254502296448e-01 7.4801796674728394e-01 377 + blend 0.0000000000000000e+00 + interp 4.5400793087910363e-01:2.9626295677839665e-01:1.8196510710403435e-01:2.5378955924717544e-01:1.0960064487203252e+00:4.4209808257309763e-01:1.6022548048990775e+00:4.1276562036066083e-01:2.1038088973461750e+00:3.7330451902863782e-01:2.9809949898482753e+00:4.5400339079979485e-01:3.2132118822728768e+00:4.2658789119822471e-01:3.7448342455301122e+00 + CVs 20 + -7.0816997737094356e-01 3.0076195715831477e-01 -5.2817636852250394e-01 + -1.2721706901335723e+00 4.5541661473923434e-01 -9.1842967572020351e-01 + -1.8056401052861870e+00 5.4252263621998265e-01 -1.2621979492344051e+00 + -2.3492148723432154e+00 6.0657405439017520e-01 -1.6007692768956012e+00 + -2.8906435490543001e+00 6.5686640111787664e-01 -1.9340637385083073e+00 + -3.4263249533242357e+00 6.8735663301298855e-01 -2.2659041090374217e+00 + -3.9535449579605193e+00 6.7718404112690411e-01 -2.6064268261950385e+00 + -4.4630287797586243e+00 6.0743578073287496e-01 -2.9581007581603016e+00 + -4.9375399068152692e+00 4.6759310292034484e-01 -3.3130148968280650e+00 + -5.3600224466848356e+00 2.5544100833375838e-01 -3.6566651510517296e+00 + -5.7158359793727946e+00 -2.1688163108230185e-02 -3.9697848552683408e+00 + -5.9940002805335677e+00 -3.4882542575083475e-01 -4.2366432493201085e+00 + -6.1880117358134425e+00 -7.1232182153503310e-01 -4.4505295969691581e+00 + -6.2936466025002229e+00 -1.1118435676408156e+00 -4.6088386103348604e+00 + -6.3132551141726454e+00 -1.5563267332484294e+00 -4.7156225754388732e+00 + -6.2670394689321576e+00 -2.0534786430185354e+00 -4.7991655627211980e+00 + -6.1978740021578522e+00 -2.6044944123660931e+00 -4.8980770609661111e+00 + -6.1664821580333502e+00 -3.1779021983992428e+00 -5.0136213434324333e+00 + -6.2009804532541590e+00 -3.6265721032803473e+00 -5.0778624848368832e+00 + id 12740 + loc 6.7994689941406250e-01 9.1754728555679321e-01 264 + blend 0.0000000000000000e+00 + interp 4.5438444602661965e-01:4.3884854186155664e-01:4.9420692146300516e-01:3.8416896784511317e-01:9.9947226526148825e-01:4.4041751636432386e-01:1.8344310276864109e+00:4.4377284797933270e-01:2.1668605357159416e+00:3.4102819327214579e-01:2.8724713064786260e+00:4.5437990218215940e-01:3.0947775079626538e+00:3.3979159582600799e-01:3.9380479557061867e+00 + CVs 20 + -7.2350245911156486e-01 3.2719365329885752e-01 -1.0251510084743515e-01 + -1.2193581955671486e+00 5.1789464839131416e-01 -1.0296290901774824e-01 + -1.6770574424866045e+00 6.0049413999317025e-01 -1.8641741813114898e-02 + -2.1982918595295122e+00 6.1057346836955917e-01 1.4341447784066685e-01 + -2.7860272156324584e+00 6.1752227449733987e-01 3.5378731243721939e-01 + -3.4418120794289520e+00 6.7047132376373941e-01 5.4996292187252238e-01 + -4.1603797692739750e+00 7.6576537522524146e-01 6.5570736231598903e-01 + -4.9076092181297915e+00 8.9199753776657298e-01 6.1456615333370035e-01 + -5.6321562289211844e+00 1.0511138098326145e+00 4.0789165810135719e-01 + -6.2944186161518925e+00 1.2354441764919546e+00 4.4549363386674257e-02 + -6.8928006008045051e+00 1.4162666259697365e+00 -4.5524852844433905e-01 + -7.4498580816965712e+00 1.5399341998750915e+00 -1.0790772347716349e+00 + -7.9626266160005477e+00 1.5272541379603402e+00 -1.8157006231560961e+00 + -8.3840984762947244e+00 1.3039800921754843e+00 -2.6233525910566433e+00 + -8.6478958874327407e+00 8.4972099461834061e-01 -3.4285925039377751e+00 + -8.7158102453409843e+00 2.1880131314298534e-01 -4.1109474582202754e+00 + -8.6842149804816380e+00 -4.7513676869701538e-01 -4.5312514028955784e+00 + -8.7196708233159264e+00 -1.1215204427732557e+00 -4.6441665813972275e+00 + -8.8553673549127971e+00 -1.7383685626871288e+00 -4.5647686296997136e+00 + id 12741 + loc 8.8511162996292114e-01 9.9875032901763916e-01 411 + blend 0.0000000000000000e+00 + interp 4.5952298820861598e-01:3.3277110981912122e-01:6.6334022860803366e-04:3.1259040326264709e-01:8.3526409121785294e-01:4.5951839297873392e-01:1.7698593217277265e+00:2.1625850909131891e-01:2.0151647913554198e+00:3.9904303569048277e-01:2.6654563170938168e+00:3.1292618639982445e-01:3.1915233883933309e+00 + CVs 20 + 1.0745416384505240e+00 1.5355446244343551e-01 -2.9342412324135136e-01 + 1.7997137216264674e+00 1.1662841754950859e-01 -5.2231477684685157e-01 + 2.4503627052985304e+00 3.1150380529865795e-02 -7.1188272194094271e-01 + 3.1166400003215777e+00 -5.2336505937167543e-02 -8.6822752188095009e-01 + 3.7906444182372416e+00 -1.3188599082009422e-01 -9.9098483050992492e-01 + 4.4658789931284018e+00 -2.1164445992469039e-01 -1.0896633442940744e+00 + 5.1369066621350266e+00 -3.0571435809169967e-01 -1.1785048197531662e+00 + 5.7974968643241764e+00 -4.3969358966366023e-01 -1.2695705346021118e+00 + 6.4352557885841533e+00 -6.4426099426565830e-01 -1.3722308745399920e+00 + 7.0247292286203846e+00 -9.4338097139947985e-01 -1.4944600013339624e+00 + 7.5341597387334165e+00 -1.3435047231846873e+00 -1.6359128338260311e+00 + 7.9419871779705513e+00 -1.8338394462886456e+00 -1.7945908979585434e+00 + 8.2450965020156133e+00 -2.3907722501461572e+00 -1.9650834245079429e+00 + 8.4529757169221611e+00 -2.9830477076467199e+00 -2.1456815775436544e+00 + 8.5616914727470252e+00 -3.5903197125864739e+00 -2.3310066435873553e+00 + 8.5624395710175421e+00 -4.2098073354711705e+00 -2.5054258463369745e+00 + 8.4518135356671280e+00 -4.8344769234696541e+00 -2.6503599934870223e+00 + 8.2466415959379518e+00 -5.4310014027408213e+00 -2.7629673954619491e+00 + 8.1037434273357682e+00 -5.9790528623251920e+00 -2.8536310564686356e+00 + id 12742 + loc 8.2946509122848511e-01 5.0389873981475830e-01 1068 + blend 0.0000000000000000e+00 + interp 3.5619730393811561e-01:2.8752685599706085e-01:2.2375644131321670e-01:2.5294825686491484e-01:9.8219624070500355e-01:3.5619374196507625e-01:1.3379599308724111e+00:2.9661725910842390e-01:1.9895609151742657e+00:3.4805879350345653e-01:2.5121304489609111e+00:3.4805851312811381e-01:3.0807325583645842e+00:3.3790210835821072e-01:3.9126706905630009e+00 + CVs 20 + 2.9171590800183272e-01 3.1661444088436685e-01 -2.9330674272486640e-01 + 5.9017294298056122e-01 6.4936261489166014e-01 -5.8743676977247650e-01 + 9.2005664116648500e-01 9.7965285704150806e-01 -8.5226342175268699e-01 + 1.2923942132357222e+00 1.2737763088771228e+00 -1.0718281628427437e+00 + 1.6994998019767162e+00 1.4861311500373680e+00 -1.2477173271292574e+00 + 2.1130232322658604e+00 1.5819559820499758e+00 -1.4010892108349093e+00 + 2.4934757392407425e+00 1.5582090625919349e+00 -1.5637253195384475e+00 + 2.8154261401550853e+00 1.4471098078634930e+00 -1.7592039063180520e+00 + 3.0711559620243065e+00 1.2883086087490994e+00 -1.9978107348023058e+00 + 3.2012161932217809e+00 1.0700935219193695e+00 -2.2717568746772860e+00 + 3.0486103853531201e+00 7.4801185080914201e-01 -2.5130080043350853e+00 + 2.5801779554259694e+00 4.0888678402908085e-01 -2.5916847220074186e+00 + 2.1249476256344124e+00 1.4007242394987929e-01 -2.5687535909489299e+00 + 1.7625370112266441e+00 -1.6017556358987572e-01 -2.4927664451492006e+00 + 1.2565264235607607e+00 -3.3801421149595345e-01 -2.1563149750363158e+00 + 7.3307686315263609e-01 -2.8082047178352942e-01 -1.7210455579612058e+00 + 3.5764905859336632e-01 -3.7473357677202573e-01 -1.4622671047558193e+00 + 1.1064670814202565e-01 -7.7028790994700946e-01 -1.3009747151031112e+00 + -1.3636513767672620e-01 -1.1174344561295717e+00 -1.2780538395123959e+00 + id 12743 + loc 8.2344645261764526e-01 2.5602564215660095e-01 372 + blend 0.0000000000000000e+00 + interp 4.8856267163773698e-01:2.7085598246410603e-01:1.8247987404420862e-01:4.8682453140419207e-01:9.9269018846897383e-01:4.8855778601102062e-01:1.7481741114866232e+00:2.6018815168562759e-01:2.0792647478740651e+00:2.8144723531414767e-01:3.1689263559550969e+00 + CVs 20 + 6.5198956219533233e-01 4.2606560380134478e-01 -2.0163954448289695e-02 + 1.2471415187161889e+00 7.2782093310440810e-01 -8.6328896293087182e-02 + 1.8606608773935585e+00 9.5578171301496984e-01 -1.5208361717103153e-01 + 2.4974870132871878e+00 1.1963062122671877e+00 -1.4271967787065726e-01 + 3.0661433829995004e+00 1.5210641865824446e+00 6.4874273229540036e-02 + 3.3535734278195077e+00 1.8965897391686419e+00 5.6525216204287387e-01 + 3.2200214050696983e+00 2.1544069125143230e+00 1.1526156614040195e+00 + 2.7849113051406840e+00 2.2605856498385677e+00 1.6461749523273383e+00 + 2.1331864669653484e+00 2.2300420258653424e+00 2.0179670635398570e+00 + 1.3458098866499904e+00 2.0512603886431524e+00 2.2594933753752691e+00 + 5.3469731876014315e-01 1.7115582712944843e+00 2.3747571462592960e+00 + -1.8879882065695752e-01 1.2404401358505468e+00 2.3815983518824253e+00 + -7.7137652696237746e-01 7.3736083678771802e-01 2.3155861602719887e+00 + -1.2687895487552294e+00 3.2816743023873024e-01 2.2378357052119937e+00 + -1.8938478771209013e+00 1.3482873470301693e-01 2.2327991183181028e+00 + -2.7973911088742041e+00 3.0894353884905290e-01 2.4151883302155710e+00 + -3.7574719876022606e+00 9.0389079996890986e-01 2.8324597105033487e+00 + -4.5456846245253848e+00 1.7705669734618255e+00 3.3812102278469371e+00 + -5.3089127090162052e+00 2.6662999815918940e+00 3.8375852330607749e+00 + id 12744 + loc 2.1981523931026459e-01 4.3264064192771912e-01 403 + blend 0.0000000000000000e+00 + interp 4.0437144011885623e-01:3.9447395680463598e-01:2.2632660779623570e-01:2.8394324957949341e-01:1.0994765709057361e+00:2.6458779445184188e-01:2.0375781532083952e+00:2.7074540016266929e-01:2.9889083604521520e+00:4.0436739640445507e-01:3.5716805311125350e+00 + CVs 20 + -8.9509392615151992e-02 1.3065342206491992e-01 7.5495748713538965e-02 + -1.9363679254340346e-01 2.7655165216294775e-01 1.3070253213701505e-01 + -3.1283841755176534e-01 4.2550476575857249e-01 1.8905583636784562e-01 + -4.4610479119695984e-01 5.6895986445304780e-01 2.6379914975281021e-01 + -5.9315026255594416e-01 7.0386821581348213e-01 3.6123540467834248e-01 + -7.5260502701534515e-01 8.2633566519342327e-01 4.8771504456189163e-01 + -9.2134349965996820e-01 9.3287911319234407e-01 6.4971389177163208e-01 + -1.0943221985796401e+00 1.0210701346928641e+00 8.5286808897112154e-01 + -1.2648867761393094e+00 1.0887495617281897e+00 1.1010609576631518e+00 + -1.4246529404000212e+00 1.1318239082975143e+00 1.3959052741206781e+00 + -1.5634009286767314e+00 1.1439158798520388e+00 1.7359843960695809e+00 + -1.6697750866911285e+00 1.1186436853448634e+00 2.1165169232113561e+00 + -1.7316840464598711e+00 1.0509778156042742e+00 2.5298469487804858e+00 + -1.7361535371748578e+00 9.3763157724971713e-01 2.9658625000739542e+00 + -1.6707500561958204e+00 7.7852465331471188e-01 3.4112753466741337e+00 + -1.5334330739833570e+00 5.7453089700695115e-01 3.8431969716399070e+00 + -1.3443943004585313e+00 3.2923224970501552e-01 4.2327588882177567e+00 + -1.1348378031559396e+00 5.4293295655365004e-02 4.5659262360450743e+00 + -1.0127693149559036e+00 -1.4520555070146424e-01 4.8779382992193678e+00 + id 12745 + loc 6.2600213289260864e-01 7.4129468202590942e-01 1081 + blend 0.0000000000000000e+00 + interp 5.0539026180203395e-01:4.3974103401212805e-01:3.6192737840048472e-01:3.0234577427409665e-01:9.9918334763254757e-01:4.4509073574333863e-01:1.4016786634354668e+00:5.0538520789941599e-01:1.9831949107077982e+00:4.7507832412887419e-01:2.2711578451792471e+00:4.5135136729388814e-01:2.8681751594918010e+00:4.2073288589881952e-01:3.1182639190195940e+00:3.1674560269102181e-01:3.9029054155353595e+00 + CVs 20 + 1.1236200759702077e-01 5.9695818889381480e-01 4.7544769407381554e-01 + 2.4376398294949694e-01 1.0838006254325925e+00 7.4483725816896318e-01 + 3.7987793900852379e-01 1.5353373778298627e+00 9.4348261437897274e-01 + 5.2081212336442917e-01 1.9760304644300473e+00 1.1108915132444233e+00 + 6.7247501311116242e-01 2.3898780429161022e+00 1.2299099245617602e+00 + 8.3427982599975081e-01 2.7537587915731572e+00 1.2731464298418855e+00 + 9.9619695076120651e-01 3.0348210849100896e+00 1.2105578100587202e+00 + 1.1321334632202715e+00 3.1851464579752342e+00 1.0242931252826002e+00 + 1.1759425435147310e+00 3.1292033660391065e+00 7.2878463076807853e-01 + 1.0218685631195226e+00 2.8478015747460876e+00 4.5421514843971422e-01 + 7.3964593018951297e-01 2.5490632482583733e+00 3.3867945990432069e-01 + 5.0089538967910041e-01 2.3382184489497604e+00 2.7518616958925401e-01 + 3.2412132956659467e-01 2.1473696716839585e+00 1.7546978163798743e-01 + 1.8469852688946645e-01 1.9221888051497584e+00 3.2607465724915796e-02 + 6.8070594198030132e-02 1.6218162217338419e+00 -1.2829560814816110e-01 + -3.7488941721883717e-02 1.1899176077480633e+00 -2.3702400970156873e-01 + -1.4151140573491988e-01 6.1184865833947832e-01 -1.8146528396068418e-01 + -2.3771693665907193e-01 2.2427463912912352e-02 1.5527795648727652e-02 + -2.9550485981077018e-01 -3.8610680786796087e-01 -3.8713129597453780e-02 + id 12746 + loc 9.2802500724792480e-01 5.7024907320737839e-02 1078 + blend 0.0000000000000000e+00 + interp 4.7344589814408167e-01:4.7344116368510025e-01:8.7406803810891054e-03:3.2404750219620981e-01:7.0549874119698008e-01:3.3763693711788861e-01:1.0370210121544157e+00:3.1139884434945875e-01:2.0217190370206115e+00:3.8624732152982905e-01:2.9981755892854700e+00:4.1410637039816767e-01:3.4085075251187105e+00 + CVs 20 + -1.6544008645068331e-01 2.3826092210437250e-01 1.5414337217661583e-01 + -3.1080301324086662e-01 4.9406920887067662e-01 3.0212136524562916e-01 + -4.4455991256169647e-01 7.4885325272592362e-01 4.6499509454582882e-01 + -5.7546247352806290e-01 9.9710400180097181e-01 6.5696636133106745e-01 + -7.0947570959336670e-01 1.2371990108603654e+00 8.8282066960990613e-01 + -8.5461402451812341e-01 1.4612454613793213e+00 1.1468413413793856e+00 + -1.0191177679615520e+00 1.6534072390827128e+00 1.4538332685932314e+00 + -1.2045131384864813e+00 1.7949408308480224e+00 1.8035215407740464e+00 + -1.4037024037899568e+00 1.8697679038808641e+00 2.1876908857783612e+00 + -1.6054540557617356e+00 1.8659986862423754e+00 2.5933997115472445e+00 + -1.7982971741434535e+00 1.7765519595759738e+00 3.0056179360182451e+00 + -1.9743839474430855e+00 1.5998249033679635e+00 3.4090727044556188e+00 + -2.1333002406413515e+00 1.3391399796452750e+00 3.7889893717069669e+00 + -2.2839701362124938e+00 9.9849647281301501e-01 4.1286472335046724e+00 + -2.4387185607260444e+00 5.6794731373703145e-01 4.3934482384314935e+00 + -2.5931533344428628e+00 1.0201405675042796e-02 4.4753106026317582e+00 + -2.6980376714037932e+00 -6.1617501551240506e-01 4.1415512000111789e+00 + -2.7305407596394575e+00 -9.8498098575945803e-01 3.5217049482383334e+00 + -2.8305963704661434e+00 -1.2663763373423296e+00 3.3160257181422708e+00 + id 12747 + loc 9.3464404344558716e-01 2.6226156949996948e-01 409 + blend 0.0000000000000000e+00 + interp 5.0024155532798609e-01:3.7759054420617416e-01:2.1785077688948284e-01:3.7833130015940591e-01:1.0199724586765868e+00:4.0595638197823458e-01:1.5506721678231912e+00:4.2122648182930877e-01:2.0770117621826709e+00:3.0888139444777518e-01:2.9279845113934080e+00:4.2753918003590963e-01:3.4067751426381951e+00:5.0023655291243285e-01:3.9464326904521125e+00 + CVs 20 + -3.0593662343641198e-01 2.3677683589517437e-01 1.9503140805228858e-01 + -6.0347454172317239e-01 4.6226933489422439e-01 3.8030849197714595e-01 + -9.0119639775946525e-01 6.7848307326495183e-01 5.5271159115482116e-01 + -1.2033955926938475e+00 8.8045436803338628e-01 7.1400052855454388e-01 + -1.5084954998490270e+00 1.0601531266398005e+00 8.6559439490239809e-01 + -1.8151989312933241e+00 1.2114995757813201e+00 1.0089741552895586e+00 + -2.1271243588797675e+00 1.3286323587175528e+00 1.1458899359829178e+00 + -2.4501117659552176e+00 1.4029495244224668e+00 1.2774077824782362e+00 + -2.7840662506263847e+00 1.4234975983624887e+00 1.4052600894782628e+00 + -3.1186498520152020e+00 1.3786975559376149e+00 1.5345639433167735e+00 + -3.4321975624076742e+00 1.2619109599016456e+00 1.6678568516225241e+00 + -3.6992781830419466e+00 1.0787899796741396e+00 1.8003510926492208e+00 + -3.9055542419204485e+00 8.4319836759189348e-01 1.9266583480740223e+00 + -4.0481295143655220e+00 5.6788924885038972e-01 2.0460101077058415e+00 + -4.1269280907254959e+00 2.6415484068072947e-01 2.1594956790363877e+00 + -4.1422717281303987e+00 -5.5624215772944297e-02 2.2665259782099652e+00 + -4.0977059279560191e+00 -3.8027825471288290e-01 2.3644326047828810e+00 + -4.0041470941219011e+00 -7.0954633338667095e-01 2.4539194472262342e+00 + -3.8978591561104006e+00 -1.0947823548265974e+00 2.5619298075578918e+00 + id 12748 + loc 9.2445164918899536e-01 9.9673736095428467e-01 1082 + blend 0.0000000000000000e+00 + interp 3.0024251316742123e-01:3.0023951074228955e-01:5.2142550242094687e-03:2.7214879451218682e-01:1.0000348875086387e+00:2.4236390831902217e-02:1.7051521968088306e+00:2.7305912465996351e-01:2.9098119406123306e+00:2.5959022558700684e-01:3.4023823830717643e+00 + CVs 20 + -1.2084556048129652e-01 2.6686643158805312e-01 3.7206314284751385e-01 + -2.1948768076696487e-01 4.0141374199140134e-01 5.3980155987865441e-01 + -3.1235064495988479e-01 4.7333271780130293e-01 6.3164519694102894e-01 + -4.0822038590360665e-01 5.2023063069217701e-01 7.1978263649990359e-01 + -5.0283915310490779e-01 5.4256106189347297e-01 7.9894820760432861e-01 + -5.9590936415314211e-01 5.4388308916076755e-01 8.6737074948487325e-01 + -6.9388967693098769e-01 5.2818610514324715e-01 9.2608523880275273e-01 + -8.0755160835440720e-01 4.9662974527751558e-01 9.7714548711983307e-01 + -9.4685481491126811e-01 4.4731645045625301e-01 1.0227476479870850e+00 + -1.1166054990232284e+00 3.7782416785264666e-01 1.0652939034849278e+00 + -1.3144199207723073e+00 2.8741090616912474e-01 1.1080690316543409e+00 + -1.5343080924187271e+00 1.7693180306430376e-01 1.1540307446044151e+00 + -1.7784120788368620e+00 4.5994854311463274e-02 1.2047399960973140e+00 + -2.0588431227670196e+00 -1.0687015225620849e-01 1.2647743501844275e+00 + -2.3798061559436610e+00 -2.7068734266738886e-01 1.3412886212246768e+00 + -2.7256714678664529e+00 -4.2102480435250544e-01 1.4379104510335861e+00 + -3.0740194303870023e+00 -5.3927444588119489e-01 1.5517628146105933e+00 + -3.4084124058183534e+00 -6.1977511892408843e-01 1.6747037334377186e+00 + -3.6747389492567559e+00 -6.5644435644001253e-01 1.7654876852226582e+00 + id 12749 + loc 3.4964084625244141e-01 3.7027084827423096e-01 406 + blend 0.0000000000000000e+00 + interp 3.9849964567463858e-01:2.9002466144980105e-01:4.1359721051762177e-01:3.8878691444914659e-01:1.1694575103730345e+00:3.4392956036173011e-01:1.9568378043508778e+00:3.0334886053771981e-01:3.0000118142150143e+00:3.9849566067818187e-01:3.7670283704371110e+00 + CVs 20 + 3.0957928865033596e-02 1.9498809229297570e-01 -1.3569161129495450e-01 + 7.1627126606036998e-02 3.3449588815346154e-01 -1.9800473717929684e-01 + 1.2154356855500062e-01 4.5586749969289636e-01 -2.4461599668896233e-01 + 1.8108268816004042e-01 5.7943557885145913e-01 -3.0364519539067197e-01 + 2.5224020988396162e-01 7.0468596364577796e-01 -3.7641670440751213e-01 + 3.3669967694259073e-01 8.3048513741786123e-01 -4.6385367028719954e-01 + 4.3569498739117707e-01 9.5495864747123260e-01 -5.6585396517721298e-01 + 5.5011865612948485e-01 1.0758757194915121e+00 -6.8065229777497338e-01 + 6.8142813419377635e-01 1.1916188822297578e+00 -8.0643844866308489e-01 + 8.3209885938720407e-01 1.3010486327675177e+00 -9.4483149509999376e-01 + 1.0024617649662799e+00 1.4017483811369031e+00 -1.0997661559104210e+00 + 1.1868140728905965e+00 1.4903366070953084e+00 -1.2704417675243818e+00 + 1.3774346344282968e+00 1.5654472366094012e+00 -1.4500909146557883e+00 + 1.5720569600934229e+00 1.6274334996861963e+00 -1.6350297972746655e+00 + 1.7728333029677532e+00 1.6754266250402627e+00 -1.8288282964681490e+00 + 1.9787814352412301e+00 1.7082430366442529e+00 -2.0355690384128478e+00 + 2.1829546898565164e+00 1.7277716285860747e+00 -2.2524885872286782e+00 + 2.3781550604415549e+00 1.7385541033101792e+00 -2.4687624549168383e+00 + 2.5188609943137159e+00 1.7744334448600438e+00 -2.5662392837687613e+00 + id 12750 + loc 4.5940113067626953e-01 6.8172216415405273e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3297735470317533e-01:3.7244924124130202e-01:2.5989024461380561e-01:4.3297302492962830e-01:8.8251823780239669e-01:4.3222553120996199e-01:1.3773262565954254e+00:3.4630509666357390e-01:1.9989035747697121e+00:4.3030381119193029e-01:2.6827008337814604e+00:2.6300824382187254e-01:3.5233269945521193e+00 + CVs 20 + 4.1500847042356348e-02 3.0373072612806207e-01 -1.0261450394736996e-01 + 8.7625818462314625e-02 5.9980156601128087e-01 -1.7100615879164011e-01 + 1.4138160723441812e-01 9.0348986495490013e-01 -2.1705317680713321e-01 + 2.1432589995184470e-01 1.2276638479246156e+00 -2.5634437282879058e-01 + 3.2197181884236870e-01 1.5629611739025577e+00 -2.9955840780150139e-01 + 4.6662211898943984e-01 1.9017246258941549e+00 -3.5730038534575403e-01 + 6.3409159895597411e-01 2.2593398302329897e+00 -4.5775065935403697e-01 + 7.9137124963394234e-01 2.6521996259031546e+00 -6.5336999187216971e-01 + 8.9907335800705757e-01 3.0530203333517583e+00 -9.8964533860415282e-01 + 9.3301626394020243e-01 3.3840952215456221e+00 -1.4571241654572571e+00 + 8.9234245609459850e-01 3.5786737638808108e+00 -1.9858878394916619e+00 + 7.8893753608353867e-01 3.6246974659528255e+00 -2.4984960725353926e+00 + 6.3434319311248544e-01 3.5452652545838075e+00 -2.9488550658631572e+00 + 4.3546316488233217e-01 3.3675952171137169e+00 -3.3292566830235266e+00 + 1.9692812008103466e-01 3.1044860444036151e+00 -3.6592550771332606e+00 + -8.7916972714039199e-02 2.7428863216680788e+00 -3.9838455206345671e+00 + -4.1367491065529793e-01 2.2428595647494221e+00 -4.3846062740976190e+00 + -6.0891458439669699e-01 1.6248182246212861e+00 -4.8953808988422747e+00 + -3.4518775564223303e-01 1.4059851040345290e+00 -5.0121289417942672e+00 + id 12751 + loc 8.3162069320678711e-01 9.6493023633956909e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5732346668204967e-01:2.6634866234589183e-01:1.3963911407712581e-02:2.8349232630783799e-01:8.6682123668981348e-01:2.7421145495308374e-01:1.9993780278020270e+00:3.5731989344738285e-01:2.8945299208976540e+00:2.6854318293124285e-01:3.2805542854944534e+00 + CVs 20 + 2.9223664358172396e-01 2.3327771580624385e-01 -2.9772892181025273e-01 + 5.7029664242203781e-01 4.6881895890754216e-01 -5.5936051444341717e-01 + 8.3136394482009390e-01 6.8076570567444705e-01 -8.1830407549669304e-01 + 1.0748214350696967e+00 8.6359750343984010e-01 -1.0854605337998218e+00 + 1.2911228993183776e+00 1.0109668251686161e+00 -1.3562118665416247e+00 + 1.4679650609769486e+00 1.1194119042020376e+00 -1.6259794195584574e+00 + 1.6018768028008414e+00 1.1970637582744685e+00 -1.8930092142384889e+00 + 1.7035886574114218e+00 1.2606362657223655e+00 -2.1630474177588370e+00 + 1.7892447634297908e+00 1.3227633924402002e+00 -2.4475764744513224e+00 + 1.8733200352890929e+00 1.3858715536873003e+00 -2.7590066780954263e+00 + 1.9657978117234607e+00 1.4430912636236091e+00 -3.1047090421065393e+00 + 2.0725727924778914e+00 1.4821534711265727e+00 -3.4832957263157343e+00 + 2.1963121218780217e+00 1.4884641673220234e+00 -3.8853251297704379e+00 + 2.3344145487984251e+00 1.4536526650021431e+00 -4.2872489438456975e+00 + 2.4806631859677859e+00 1.3878405054470877e+00 -4.6543910329583325e+00 + 2.6282985005347244e+00 1.3051374776304705e+00 -4.9751216183703617e+00 + 2.7616388012308652e+00 1.2032586324236842e+00 -5.2741398564579169e+00 + 2.8207219631278981e+00 1.0740813711330994e+00 -5.5927809633599637e+00 + 2.6107426488915881e+00 9.5446190612131809e-01 -5.9609647634705460e+00 + id 12752 + loc 1.3031189143657684e-01 1.3496644794940948e-01 393 + blend 0.0000000000000000e+00 + interp 4.2347755790201291e-01:3.2224809766712181e-01:1.6684650847288218e-01:3.6668587082167925e-01:9.4480095390359498e-01:2.4994672371300894e-01:1.2344068563239614e+00:3.5013906576764942e-01:1.9666173820773634e+00:3.2452984584928801e-01:2.8201989530680782e+00:4.2347332312643393e-01:3.4344037448127915e+00 + CVs 20 + -1.4662494936342635e-01 3.2341119700475279e-01 3.6460115502653678e-01 + -2.5158901294477942e-01 6.6298709451946980e-01 6.8810187348096652e-01 + -3.4665463480078823e-01 1.0291049991491781e+00 9.9495961356854501e-01 + -4.6232265815271018e-01 1.4242507260328654e+00 1.3088577620007238e+00 + -6.2836584562922970e-01 1.8335138137238705e+00 1.6436404981720676e+00 + -8.7094083574303982e-01 2.2239707394838546e+00 2.0125552743494488e+00 + -1.2016939891263463e+00 2.5465514280829122e+00 2.4265830706261253e+00 + -1.6119435861522884e+00 2.7494432776781736e+00 2.8836750767680543e+00 + -2.0716069484634301e+00 2.7969105133765995e+00 3.3649169530703991e+00 + -2.5376454745939223e+00 2.6843106606557408e+00 3.8429498302554452e+00 + -2.9690380823179243e+00 2.4391876953439668e+00 4.2943967674218744e+00 + -3.3375017704625782e+00 2.1119408496640002e+00 4.7105252350442761e+00 + -3.6252620892452851e+00 1.7496237218547603e+00 5.1009610132304202e+00 + -3.8151918233330262e+00 1.3617241787719203e+00 5.4597283986241756e+00 + -3.8843247304691433e+00 9.5685332794673728e-01 5.7676501021727145e+00 + -3.8311106418324132e+00 5.7110853144921947e-01 6.0123206803247475e+00 + -3.6893787687742714e+00 2.2515081557614369e-01 6.2078084146396044e+00 + -3.5013180413891618e+00 -1.1427569519188552e-01 6.3964897360337947e+00 + -3.3486153899483062e+00 -5.5557057308743030e-01 6.6499324303459693e+00 + id 12753 + loc 3.9890035986900330e-01 9.9064433574676514e-01 1080 + blend 0.0000000000000000e+00 + interp 3.6222229628061425e-01:3.6221867405765146e-01:7.2576634281663632e-01:1.1328431853100697e-01:1.4984082218957071e+00:2.5361502916546325e-01:2.9374150070378846e+00:3.1849563987947788e-01:3.9959150896371201e+00 + CVs 20 + -1.3841523899962499e-01 1.4683444979961802e-01 1.3902137248514854e-01 + -2.4555823296989213e-01 2.5110099787777862e-01 1.9545252999657037e-01 + -3.3241238840235371e-01 3.1503294571430318e-01 2.1616960599110382e-01 + -4.2717245510265445e-01 3.6861496517949910e-01 2.4311879070533790e-01 + -5.3272065472308361e-01 4.1129311371807087e-01 2.7364514664165085e-01 + -6.5253782811812944e-01 4.4146069606511551e-01 3.0523974763239853e-01 + -7.9005186229534219e-01 4.5666795068277849e-01 3.3604694428801707e-01 + -9.4760871136274483e-01 4.5430649208699914e-01 3.6519885564553439e-01 + -1.1265267120765894e+00 4.3247007857413577e-01 3.9301524427464907e-01 + -1.3269553681745798e+00 3.9036967883664969e-01 4.2065966171619340e-01 + -1.5470504071133211e+00 3.2846900870103107e-01 4.4972587116040919e-01 + -1.7829729400308445e+00 2.4775892944855921e-01 4.8147226148100752e-01 + -2.0299085839656570e+00 1.4910075974307560e-01 5.1619579457853360e-01 + -2.2864458777708334e+00 3.5520591853645228e-02 5.5540263670952328e-01 + -2.5548135692826386e+00 -8.3364684813462736e-02 6.0479538594122695e-01 + -2.8301927234986759e+00 -1.9236662212573832e-01 6.7147578898027804e-01 + -3.0983156791039672e+00 -2.7903577798019968e-01 7.5778146294496063e-01 + -3.3471069491035164e+00 -3.4086764100251055e-01 8.5819538181185251e-01 + -3.5836577191777792e+00 -4.0698560759128921e-01 9.3880273536239045e-01 + id 12754 + loc 8.4601873159408569e-01 8.9399319887161255e-01 377 + blend 0.0000000000000000e+00 + interp 4.5116854559871250e-01:4.1456795300619786e-01:6.6782017299319985e-02:3.8009552048546780e-01:8.9570409288929231e-01:2.9321467670242396e-01:1.2657968766831533e+00:4.5116403391325655e-01:2.0450993557750263e+00:2.9440568842890597e-01:3.0183683025867509e+00:3.6363381145634582e-01:3.6078776241764050e+00 + CVs 20 + -6.2231926750061217e-01 2.3655117418484461e-01 -8.4305461874317100e-01 + -1.1043810866570374e+00 3.4341224586229913e-01 -1.4421431894626555e+00 + -1.5492114586027548e+00 4.0492787067517855e-01 -1.9704216398797723e+00 + -2.0034513470185402e+00 4.4162179033143933e-01 -2.4954170200612182e+00 + -2.4632440531358721e+00 4.4108303487705980e-01 -3.0220720212893766e+00 + -2.9234099738469665e+00 3.8866491165901240e-01 -3.5533116889898690e+00 + -3.3682970800094494e+00 2.6909034620720074e-01 -4.0826781904055416e+00 + -3.7769124247807575e+00 7.1211158290154009e-02 -4.5968457380393675e+00 + -4.1374494848111150e+00 -2.1039919646799077e-01 -5.0766833586217119e+00 + -4.4485010032603558e+00 -5.6095437666488612e-01 -5.5080924785194325e+00 + -4.7208240009636375e+00 -9.5464174347407837e-01 -5.8792205476845352e+00 + -4.9653526563308334e+00 -1.3750832135623301e+00 -6.1850726727685519e+00 + -5.1956229978676038e+00 -1.8216684956948677e+00 -6.4322404970232414e+00 + -5.4257937034118244e+00 -2.2952604878864484e+00 -6.6331710779062352e+00 + -5.6645810109293571e+00 -2.7724898346645275e+00 -6.8021341987041888e+00 + -5.9141299322530916e+00 -3.2216349350466325e+00 -6.9548869732175467e+00 + -6.1701324554787149e+00 -3.6236247825854058e+00 -7.0992099046334962e+00 + -6.4338128321230030e+00 -3.9719640304733197e+00 -7.2312174558489790e+00 + -6.7208724408672067e+00 -4.2673115479033878e+00 -7.3371442446422179e+00 + id 12755 + loc 2.9836773872375488e-01 3.5446795821189880e-01 372 + blend 0.0000000000000000e+00 + interp 3.4896588338232587e-01:2.7544843079627424e-01:4.9807152505501895e-01:3.0086054037817639e-01:1.0848707983157289e+00:2.4955732648618836e-01:1.9866972811665333e+00:3.4896239372349208e-01:2.6899140428493560e+00:2.5275842255738229e-01:3.7928140043881577e+00 + CVs 20 + -1.3118432090302784e-01 6.9895401594087692e-01 4.9755057314207884e-01 + -2.5593869186725166e-01 1.3512310467133402e+00 9.5204699763210865e-01 + -4.1510017666023363e-01 1.9504285914657391e+00 1.3656828373510725e+00 + -6.5254563569074409e-01 2.4652556076639001e+00 1.6371879502419122e+00 + -9.4954206081116177e-01 2.8340227848192923e+00 1.6593637256588480e+00 + -1.2535962624011794e+00 3.0424350337056469e+00 1.4718923907148080e+00 + -1.5492389417115380e+00 3.0958164117306048e+00 1.1434330504035268e+00 + -1.8287608213899234e+00 2.9860415923822616e+00 7.2582826631196529e-01 + -2.0917357155558731e+00 2.7131987640482658e+00 2.6586698078731241e-01 + -2.3376024777645097e+00 2.2850551513046300e+00 -1.9791175801996830e-01 + -2.5575711676501003e+00 1.7094682083437021e+00 -6.4093486939304245e-01 + -2.7244556669427658e+00 1.0090200734609254e+00 -1.0721813610276587e+00 + -2.8026771351475199e+00 2.8333686365368516e-01 -1.5359420500196623e+00 + -2.8119615175746726e+00 -2.9505868939000335e-01 -2.0517368524742388e+00 + -2.8618444700467296e+00 -5.7996223007768744e-01 -2.5622156378137579e+00 + -3.0587953000370494e+00 -5.4494520533656954e-01 -3.0989895463313948e+00 + -3.4719105809170259e+00 -1.9071401326573167e-01 -3.6236036452980827e+00 + -4.0199617441978130e+00 4.5997634200622861e-01 -4.0827461886166656e+00 + -4.5602456340181794e+00 1.3897798994438317e+00 -4.7157262361321513e+00 + id 12756 + loc 4.7296699881553650e-01 2.8489297628402710e-01 409 + blend 0.0000000000000000e+00 + interp 4.8805133702393622e-01:3.0704184851787375e-01:7.6327926872142071e-02:4.2940726475315372e-01:7.5029055356043806e-01:3.4073943079944341e-01:1.1532008047443407e+00:3.9580687659330205e-01:1.9841905593303579e+00:3.3746604328655044e-01:2.3973057000393236e+00:4.8804645651056600e-01:3.0733478134592627e+00:3.9608194831141513e-01:3.7379019827430886e+00 + CVs 20 + 3.7335532799324452e-02 8.4204960986114130e-02 -4.7214391905521369e-01 + 5.4620791396664606e-02 1.6215630492617883e-01 -9.3406862538641544e-01 + 1.0345174308793224e-01 2.2264640937693236e-01 -1.3774614464076529e+00 + 1.7637951292120824e-01 2.6493336821904834e-01 -1.8096782982359629e+00 + 2.6330597646491960e-01 2.8569742438532553e-01 -2.2258306549997129e+00 + 3.6086230511315120e-01 2.8196668216505461e-01 -2.6182506301333319e+00 + 4.6806335745036587e-01 2.4504250730881472e-01 -2.9768269684828610e+00 + 5.8161651287980187e-01 1.6104316506649430e-01 -3.2896952815962317e+00 + 6.9101616139198430e-01 2.4315325010899169e-02 -3.5529970596556808e+00 + 7.8050992662545093e-01 -1.6277327062406810e-01 -3.7706040325102288e+00 + 8.3667198560796974e-01 -3.9823841648973501e-01 -3.9385371209503610e+00 + 8.5433187778539699e-01 -6.7093329956212222e-01 -4.0509881604991538e+00 + 8.3778481893481471e-01 -9.6002841963682495e-01 -4.1169326831997974e+00 + 7.9534874522234700e-01 -1.2506446714454389e+00 -4.1487143958905168e+00 + 7.3561000215189998e-01 -1.5352774541596037e+00 -4.1492921191503260e+00 + 6.7469634204308138e-01 -1.8029826302555179e+00 -4.1102715042485869e+00 + 6.3338008692339143e-01 -2.0401766042535838e+00 -4.0305767657026497e+00 + 6.0483473751581118e-01 -2.2588224168283895e+00 -3.9400597106316226e+00 + 5.2640665886928184e-01 -2.5806163770882202e+00 -4.0416037477316600e+00 + id 12757 + loc 4.6355086565017700e-01 3.6097964644432068e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6685961146410498e-01:3.6447104144519710e-01:2.5304504042686582e-02:2.6599193303070756e-01:7.1102607502965820e-01:4.6685494286799034e-01:1.1425562922014847e+00:3.9705881424035677e-01:1.8161593680728902e+00:3.7218225623275841e-01:2.1068042465995793e+00:4.0105977493567507e-01:2.7765144579812144e+00:4.1823965689097287e-01:3.3443751324714404e+00 + CVs 20 + 5.5077491644783969e-02 3.4304055273503653e-01 -1.6177659000686870e-01 + 5.4803376494721112e-02 6.7145618464096990e-01 -3.3417531486984936e-01 + 4.4306357045016953e-03 9.9175909277760066e-01 -5.0717038122200331e-01 + -1.0130764273815385e-01 1.2982956704823165e+00 -6.7728696722827120e-01 + -2.7322777242136997e-01 1.5726601940318803e+00 -8.4155750569383991e-01 + -5.1728889452622329e-01 1.7910640456982789e+00 -9.8910848940334584e-01 + -8.2676586402353747e-01 1.9273234620493147e+00 -1.0986131558686274e+00 + -1.1741545663730761e+00 1.9629841640770018e+00 -1.1427149308914373e+00 + -1.5139492381673845e+00 1.8984571212430925e+00 -1.1030820515002373e+00 + -1.8034774513223750e+00 1.7534257379583833e+00 -9.8499355477569672e-01 + -2.0169768616950918e+00 1.5515924410093338e+00 -8.0751682521426882e-01 + -2.1430292990599313e+00 1.3172930491208696e+00 -5.9411922862413069e-01 + -2.1976711409768366e+00 1.0700917173970228e+00 -3.6608228372132806e-01 + -2.2219938775337469e+00 8.1857345976847939e-01 -1.2852956305885443e-01 + -2.2753764663083680e+00 5.7163225220903502e-01 1.2689237836840070e-01 + -2.4336156179649819e+00 3.6318621161352749e-01 4.0157651147948636e-01 + -2.7329856691264371e+00 2.8988792882631365e-01 6.7214489845636005e-01 + -3.0839999846651764e+00 4.8695758394372923e-01 8.8793207628536353e-01 + -3.1812019182438735e+00 5.2356473465386388e-01 1.0516927342156772e+00 + id 12758 + loc 1.4639079570770264e-02 5.7307821512222290e-01 403 + blend 0.0000000000000000e+00 + interp 4.0099724822850896e-01:2.1652561732834391e-01:7.9478312850572563e-01:3.1024619473418202e-01:1.4894093074900649e+00:4.0099323825602667e-01:2.0461716693243472e+00:3.8463331954397501e-01:2.7768092996172955e+00:3.9127681609089965e-01:3.2619927772454371e+00:3.6636569728389046e-01:3.9999998739668450e+00 + CVs 20 + -7.9939628897039761e-02 1.3766656711044048e-01 -1.3833963059003904e-02 + -1.6937074234476013e-01 2.7637875279357282e-01 -3.7129110313638657e-02 + -2.7073421999180380e-01 4.0370380395338612e-01 -5.3116070162273765e-02 + -3.8395526161036864e-01 5.1246375197289717e-01 -5.3620006850583025e-02 + -5.0355484073329204e-01 5.9712660702810805e-01 -3.8269947591139199e-02 + -6.2170886760215616e-01 6.5393106686028446e-01 -7.9265483736567048e-03 + -7.3008940387403587e-01 6.8215712203177559e-01 3.5139230384981505e-02 + -8.2197107768577626e-01 6.8456614765857215e-01 8.7227747554747451e-02 + -8.9036928439319818e-01 6.6597878147441281e-01 1.4342455986239228e-01 + -9.2695706421590918e-01 6.3328976411654714e-01 1.9754122442644417e-01 + -9.2765907742212728e-01 5.9642270555638444e-01 2.4333858806849254e-01 + -8.9604530931155091e-01 5.6636521023623021e-01 2.7645524802520144e-01 + -8.4030416832027144e-01 5.5237727690607707e-01 2.9454498468800000e-01 + -7.7230011179297764e-01 5.5930564266173755e-01 2.9787230442223589e-01 + -7.0430349641900614e-01 5.8652607298319726e-01 2.8871182361822562e-01 + -6.4358561319788099e-01 6.3322549643248283e-01 2.7342181659695608e-01 + -5.9394908892267773e-01 6.9653384432392196e-01 2.6593146052944572e-01 + -5.5650766949286024e-01 7.6534161322922367e-01 2.7880497806041549e-01 + -5.4190923154480031e-01 7.5918606481451445e-01 3.4072693456224573e-01 + id 12759 + loc 3.7473595142364502e-01 5.4712110757827759e-01 411 + blend 0.0000000000000000e+00 + interp 4.3064362230722819e-01:3.3082367166679172e-01:3.5141405759820754e-01:3.5906335354957941e-01:1.1029983880380752e+00:4.3063931587100512e-01:1.8336180514716380e+00:3.2466483031527588e-01:2.2320141526570514e+00:4.0226546628703630e-01:2.9812004646025980e+00:3.3043885758827557e-01:3.4450759037674161e+00:3.9421477012519118e-01:3.9784590834655535e+00 + CVs 20 + 8.4673096376632284e-01 1.0896447644176635e-01 -1.4118563071129378e-01 + 1.4695937262762575e+00 1.0210487621179914e-01 -2.8987167008226200e-01 + 2.0615698780074063e+00 6.6054542892833634e-02 -4.2102441278581837e-01 + 2.6854584729338091e+00 2.7906891083494645e-02 -5.2551154598599770e-01 + 3.3323898070239402e+00 -1.3732455908968655e-02 -5.9885437415805298e-01 + 3.9907288861309129e+00 -6.2899120326444402e-02 -6.4043932020567751e-01 + 4.6466739071851304e+00 -1.3072223753951473e-01 -6.5085112141794266e-01 + 5.2842049303103131e+00 -2.3712791371921771e-01 -6.3134185510922936e-01 + 5.8829674161433543e+00 -4.0420645456907356e-01 -5.8950546099938539e-01 + 6.4175721697216410e+00 -6.4835328790764657e-01 -5.4000288290237042e-01 + 6.8669969879720290e+00 -9.7223046819239967e-01 -4.9192065720821393e-01 + 7.2274794936103666e+00 -1.3589800541582164e+00 -4.4112064981687893e-01 + 7.5121395750354250e+00 -1.7803890508007472e+00 -3.8136746323672299e-01 + 7.7386315884477632e+00 -2.2137015596721143e+00 -3.1326634657683372e-01 + 7.9177098123108971e+00 -2.6510622910930146e+00 -2.3867098289573671e-01 + 8.0546871922277763e+00 -3.0934119462025875e+00 -1.5688210868746538e-01 + 8.1538657079348411e+00 -3.5380792719229808e+00 -7.4315121026212350e-02 + 8.2297033928133025e+00 -3.9704882825254897e+00 -7.6996727387131370e-03 + 8.3629301363642448e+00 -4.3160964676091584e+00 5.3053095820561114e-02 + id 12760 + loc 4.5703992247581482e-01 7.1528673171997070e-01 1081 + blend 0.0000000000000000e+00 + interp 5.8572600249630402e-01:3.1456286843707681e-01:1.2557976460822580e+00:3.7662166475206166e-01:1.9851330350322880e+00:2.9442620436440309e-01:2.8978417387641109e+00:3.9833250944551479e-01:3.3910900622432232e+00:5.8572014523627913e-01:3.9092484387694175e+00 + CVs 20 + 6.9713070002457148e-02 5.5122500354119786e-01 6.0461852983379438e-01 + 1.8428162980205995e-01 9.6082872833460509e-01 9.9077936545607559e-01 + 3.1814506108299012e-01 1.3218580475992761e+00 1.3103290293802878e+00 + 4.6503057490110672e-01 1.6723046499366130e+00 1.6195049136966406e+00 + 6.2770046275983149e-01 2.0056372366057080e+00 1.9024963639502082e+00 + 8.0900766402606350e-01 2.3138133259635794e+00 2.1370602545097483e+00 + 1.0122464755271934e+00 2.5839155907385249e+00 2.2949034589663198e+00 + 1.2414431137743054e+00 2.7907941306966797e+00 2.3449411121179722e+00 + 1.4909808306384060e+00 2.8681122453367420e+00 2.2385166549018334e+00 + 1.6426893995573577e+00 2.6854277361775005e+00 1.9802562501177543e+00 + 1.5986898560590357e+00 2.3858202104673341e+00 1.8076245034156877e+00 + 1.5442482926011827e+00 2.1422625274485227e+00 1.7169529562587129e+00 + 1.5220192952119562e+00 1.8993157602076449e+00 1.6258202339289145e+00 + 1.5193114079322458e+00 1.6210263453199900e+00 1.5289963787350245e+00 + 1.5278093626069957e+00 1.2949550333743169e+00 1.4619395483672517e+00 + 1.5384494530783162e+00 9.2819544376467378e-01 1.5075480536669299e+00 + 1.5444791449481445e+00 5.7588592056969312e-01 1.7215712383332531e+00 + 1.5474084946767090e+00 2.5314915950098649e-01 2.0039145980856725e+00 + 1.5470904678819413e+00 -1.7802241474146274e-01 2.1620127658220571e+00 + id 12761 + loc 9.3516403436660767e-01 6.6027128696441650e-01 264 + blend 0.0000000000000000e+00 + interp 1.8551839975177673e+00:1.0100438753930117e+00:9.9992433237871492e-01:1.8551739975177672e+00:1.0061390099413143e+00:4.7387703483771987e-01:1.0085482765430001e+00:3.4002698630992001e-01:1.4360175674731022e+00:4.2725456895851271e-01:2.0446050844863537e+00:5.0614203072762254e-01:2.8523291946604488e+00:2.4240573120503731e-01:3.0033654408408532e+00 + CVs 20 + -8.3710950403824802e-01 3.6706661127991069e-01 -2.4916543577963707e-01 + -1.4175204768497713e+00 5.3593959688801796e-01 -3.8291127431595512e-01 + -1.9510675202829397e+00 5.6176329096350841e-01 -4.3902994153902725e-01 + -2.5331915840219983e+00 4.9482832619600803e-01 -4.3973959532735679e-01 + -3.1469778491969866e+00 4.1586782291657420e-01 -4.1450374174467014e-01 + -3.7586407463583678e+00 3.8175604439319433e-01 -4.0661530354004438e-01 + -4.3624863464309316e+00 3.9119407273204987e-01 -4.5159018330229095e-01 + -4.9661145706444172e+00 4.2811109627147981e-01 -5.7106486810024326e-01 + -5.5710548615143685e+00 4.9151811963531866e-01 -7.8100651222321316e-01 + -6.1760200794075182e+00 5.8544201367050563e-01 -1.1041439611536248e+00 + -6.7766051744668490e+00 6.8517142273871778e-01 -1.5551495769102717e+00 + -7.3628318765400680e+00 7.2954852878145093e-01 -2.1342033263378326e+00 + -7.9216534031358332e+00 6.3208888234528349e-01 -2.8271973145960625e+00 + -8.3981494338044946e+00 3.0955230812575252e-01 -3.6044438003575396e+00 + -8.7085663107065727e+00 -2.8154486008741664e-01 -4.3983895807595266e+00 + -8.8455208583597607e+00 -1.1383014119295507e+00 -5.0526788644027585e+00 + -9.0098860134879750e+00 -2.1456783682452847e+00 -5.3243372871445178e+00 + -9.3689672901090475e+00 -3.0253421647918080e+00 -5.2015475098919453e+00 + -9.6799917239575102e+00 -3.7872900555970981e+00 -5.1851881702196767e+00 + id 12762 + loc 1.9332330673933029e-02 1.8232432007789612e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0193559794860323e-01:4.0193157859262374e-01:1.1437047717853266e-01:3.9273226467750244e-01:9.9976178646092129e-01:2.6239213721146698e-01:2.0020951321110987e+00:3.7283282954133473e-01:2.8298568861553366e+00:3.6343276754380222e-01:3.6732441663887725e+00 + CVs 20 + -2.4056888708591384e-01 2.8727542399254125e-01 -9.7591977512872172e-02 + -4.7185547363216840e-01 6.0902298996028170e-01 -1.5220226834961370e-01 + -6.9188998297948912e-01 9.5024080866483795e-01 -1.8696408976657963e-01 + -9.2331274048227230e-01 1.2869723884835462e+00 -2.4687224450391754e-01 + -1.1916354905982574e+00 1.5776389500235550e+00 -3.7945954552302097e-01 + -1.4924852708114207e+00 1.7632464389972915e+00 -6.0355870692057056e-01 + -1.7733133091161999e+00 1.7824921099202491e+00 -9.0603565541193909e-01 + -1.9424751502609707e+00 1.6247352490953386e+00 -1.2411724765595418e+00 + -1.9642083076085013e+00 1.3668780650983221e+00 -1.5546431933627711e+00 + -1.8735530437493695e+00 1.0715747823494741e+00 -1.8332626914603294e+00 + -1.6806153189278157e+00 7.4672821530809952e-01 -2.0513695477444882e+00 + -1.3977680968976900e+00 4.0968939374031332e-01 -2.1426602573529587e+00 + -1.1021364106874927e+00 9.8350360194641606e-02 -2.0994111734482455e+00 + -8.6016613597314318e-01 -2.0052446411267200e-01 -2.0601418862795771e+00 + -6.4334936604838300e-01 -5.1656897571209237e-01 -2.1592353848161268e+00 + -4.0973351909139216e-01 -7.9595592550312988e-01 -2.4985299975509534e+00 + -2.2116143593162430e-01 -8.6207409686999092e-01 -3.1493892435684145e+00 + -1.7583972499455147e-01 -7.0532505872805751e-01 -3.7814718755479606e+00 + -6.6261779482547745e-02 -7.4348327839999406e-01 -4.0575696948862925e+00 + id 12763 + loc 8.6698490381240845e-01 2.0928145945072174e-01 413 + blend 0.0000000000000000e+00 + interp 5.0357522108053931e-01:3.7559512565757380e-01:5.3809268193573967e-01:2.7757467103864197e-01:1.0888069485305434e+00:4.1732664440255141e-01:1.9550622151636374e+00:2.7818472667758959e-01:2.3438872692867672e+00:5.0357018532832853e-01:3.0248428370117728e+00:2.8844376635288199e-01:3.9294891979464186e+00 + CVs 20 + -1.0666894836508543e+00 2.0114668809540079e-01 2.8545487737012060e-01 + -1.7337442774501455e+00 2.2317044142194106e-01 5.4960239515155296e-01 + -2.3222212278540044e+00 1.7821440147619480e-01 7.9939259696933895e-01 + -2.9507063458918887e+00 1.1592147588212171e-01 1.0264833170110326e+00 + -3.6063271505449159e+00 2.1393237111034191e-02 1.2142006139288122e+00 + -4.2660456179251316e+00 -1.2103452632087297e-01 1.3647067217764817e+00 + -4.9066402698361165e+00 -3.2042696105204493e-01 1.4774160058471550e+00 + -5.5076809432689631e+00 -5.8243418280441772e-01 1.5507515656083171e+00 + -6.0523010024082886e+00 -9.1154133932398596e-01 1.5836012072384325e+00 + -6.5246081347691733e+00 -1.3088336817865247e+00 1.5797659449363526e+00 + -6.9098195901782393e+00 -1.7705636089904271e+00 1.5514200804073730e+00 + -7.2045787794747689e+00 -2.2938532644572671e+00 1.5106467922130857e+00 + -7.4123347874404972e+00 -2.8708467574829610e+00 1.4593427943906758e+00 + -7.5353537080377198e+00 -3.4790680061222901e+00 1.3956666975576066e+00 + -7.5755348218579046e+00 -4.0882777477870453e+00 1.3238202292722814e+00 + -7.5344138087583650e+00 -4.6702766087408429e+00 1.2467924510368738e+00 + -7.4151309778432610e+00 -5.2017082097011826e+00 1.1615063976308839e+00 + -7.2326993942007922e+00 -5.6744825337021689e+00 1.0748258088084497e+00 + -7.1089533118305868e+00 -6.2186249813003975e+00 1.0015692743851698e+00 + id 12764 + loc 3.3348748087882996e-01 8.1282758712768555e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0155718668327520e-01:4.8870187895293571e-01:2.4928751539779970e-01:3.6278923287577797e-01:1.0009887293148032e+00:3.8926824866138016e-01:1.9668219955135902e+00:3.6409279216132073e-01:2.5047416605538526e+00:5.0155217111140837e-01:2.9924590155226412e+00:3.6594637725419643e-01:3.6828171336880260e+00 + CVs 20 + -1.5480418809483101e-01 2.4070869268915568e-01 1.2790430805738839e-01 + -2.6446446690443171e-01 4.1705105305504619e-01 1.3047894584098735e-01 + -3.8792666632166711e-01 5.6570101570751730e-01 9.9374379421302894e-02 + -5.4733885659983972e-01 6.9698762863828700e-01 6.9126065863752084e-02 + -7.4155595454206169e-01 8.0344507380972485e-01 3.6424264257115091e-02 + -9.6822405129543776e-01 8.7912578860804691e-01 -5.7770615581642648e-04 + -1.2245960945366008e+00 9.1983357270635935e-01 -4.2157811120287936e-02 + -1.5082159661492640e+00 9.2287197509760499e-01 -8.7191236580314690e-02 + -1.8168612067902803e+00 8.8658446288165182e-01 -1.3369665926537166e-01 + -2.1480703935355199e+00 8.1023039276412778e-01 -1.7930390516844880e-01 + -2.4983782783242741e+00 6.9356567046487250e-01 -2.2159144762468647e-01 + -2.8619004308830007e+00 5.3633813843962819e-01 -2.5927438248522655e-01 + -3.2314531675520866e+00 3.4093136332504487e-01 -2.9109710995779503e-01 + -3.6068048391691430e+00 1.2059094268974858e-01 -3.1030989591643143e-01 + -4.0002338425026549e+00 -9.8253318323192951e-02 -3.0175533322216341e-01 + -4.4219982789251198e+00 -2.8801174889264108e-01 -2.4819184191767574e-01 + -4.8635458601758970e+00 -4.3225969616378523e-01 -1.3964037988832417e-01 + -5.3030354267439046e+00 -5.2545464694688448e-01 2.2193635739845202e-02 + -5.6679975311744704e+00 -6.4076603248147601e-01 9.7692221140314672e-02 + id 12765 + loc 3.6465215682983398e-01 4.1411975026130676e-01 377 + blend 0.0000000000000000e+00 + interp 6.9769190412181381e-01:6.9768492720277264e-01:3.4461540106114685e-02:6.3908271926628846e-01:1.2830481002452490e+00:3.6328578303691184e-01:1.8604469945430797e+00:3.4387276493324148e-01:2.3471899663243461e+00:4.0159323912384515e-01:2.9983075732469722e+00:3.7281097256920920e-01:3.8874514742448008e+00 + CVs 20 + -5.8758458495941079e-01 2.7192563477325543e-01 7.6393639475415820e-01 + -1.0140383447603183e+00 4.1580441388420214e-01 1.3380901124031614e+00 + -1.4183154308577282e+00 5.1303970562999912e-01 1.8503426833332659e+00 + -1.8616106839337179e+00 5.8996025653403839e-01 2.3548031569860046e+00 + -2.3424438451511915e+00 6.3716266801906629e-01 2.8502914384825861e+00 + -2.8616750919584697e+00 6.3356534211758087e-01 3.3413314611554874e+00 + -3.4100027534410242e+00 5.5413974347144035e-01 3.8311716811524565e+00 + -3.9659653479819967e+00 3.7922702500177796e-01 4.3093345493947188e+00 + -4.5046978086902110e+00 1.0095653298316543e-01 4.7630286995380473e+00 + -5.0022980601722695e+00 -2.8082906764928239e-01 5.1944743827202542e+00 + -5.4297403928103476e+00 -7.6471303871475715e-01 5.6115809357055850e+00 + -5.7523736612492407e+00 -1.3470084058853660e+00 6.0110717657716730e+00 + -5.9422750610245449e+00 -2.0134768339467302e+00 6.3826403464637176e+00 + -6.0020703884844941e+00 -2.7238962806876255e+00 6.7322899815904442e+00 + -5.9742586858188886e+00 -3.4232152382164731e+00 7.0912240399536550e+00 + -5.9006586430400629e+00 -4.0735445148403260e+00 7.4925458259430568e+00 + -5.7876182933623888e+00 -4.6502835380188206e+00 7.9523971592268374e+00 + -5.6265561279030036e+00 -5.1385623905136519e+00 8.4380262493720508e+00 + -5.4538482006674514e+00 -5.6099040735634151e+00 8.8339167201277569e+00 + id 12766 + loc 2.6821531355381012e-03 1.0253905504941940e-01 417 + blend 0.0000000000000000e+00 + interp 1.9136683427388809e-01:1.9136492060554536e-01:7.3004283272958381e-02:1.1453163919457514e-01:9.9508198075347309e-01:1.7230184646532029e-01:1.7753889128688729e+00:1.0879550486205367e-01:2.4622388473741506e+00:1.8849540911363449e-01:3.5256274626155952e+00 + CVs 20 + -1.6185253824202336e-01 1.4897897388032322e-02 2.7318811873217441e-01 + -2.7622813336691143e-01 -2.2835500131047071e-03 4.7049382666500605e-01 + -3.6426726261986536e-01 -3.6009629412284860e-02 6.3464195319763050e-01 + -4.5980345881535511e-01 -6.5646084369995750e-02 8.0816953513020096e-01 + -5.6249195284956111e-01 -8.9184221155839682e-02 9.8748765288064466e-01 + -6.7086101647998109e-01 -1.0571492074900318e-01 1.1678363359975501e+00 + -7.8331567966957127e-01 -1.1561605993050483e-01 1.3450406256383864e+00 + -8.9858374506649474e-01 -1.2057983144782525e-01 1.5159187116991886e+00 + -1.0154255467133559e+00 -1.2344272286559521e-01 1.6774624324306131e+00 + -1.1319645499896958e+00 -1.2832659103391220e-01 1.8251100573041361e+00 + -1.2462134244980381e+00 -1.4037566442464255e-01 1.9543861501910027e+00 + -1.3584595857685788e+00 -1.6369761831171536e-01 2.0658193008125774e+00 + -1.4735950240182301e+00 -1.9916501828569844e-01 2.1661894158608432e+00 + -1.5985307326938321e+00 -2.4543869237863891e-01 2.2624689038273780e+00 + -1.7358938772057548e+00 -3.0193647035613314e-01 2.3579294080304516e+00 + -1.8836326200550078e+00 -3.6917343200919039e-01 2.4563152525506649e+00 + -2.0382394988998551e+00 -4.4750370531688688e-01 2.5623064109497986e+00 + -2.1971860739401299e+00 -5.3630276469362204e-01 2.6767687482732607e+00 + -2.3802106954782336e+00 -6.0590755968586874e-01 2.8429595867518387e+00 + id 12767 + loc 7.4529516696929932e-01 4.2998066544532776e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3803520175219174e-01:4.3803082140017424e-01:1.0729080506595157e-03:2.5289082388918543e-01:7.8342286986265441e-01:3.2266595172310125e-01:1.6232785222535964e+00:2.6471187061231349e-01:2.3117106091518660e+00:2.6342328929402475e-01:3.1058073901445011e+00 + CVs 20 + -2.5463191515019734e-01 3.0161847135486980e-01 1.5935690489702403e-01 + -4.8384772164762130e-01 5.9503604121410669e-01 3.0570655442628153e-01 + -7.1047903929825651e-01 8.7157031463866608e-01 4.5064947980601711e-01 + -9.4557461378675056e-01 1.1278162446375000e+00 6.0104639770443913e-01 + -1.1869299076468141e+00 1.3665733942192850e+00 7.6312405396669136e-01 + -1.4373868888675849e+00 1.5856529143670872e+00 9.5186123626812202e-01 + -1.7143722425327976e+00 1.7703191372305138e+00 1.1836754319341980e+00 + -2.0401226382449256e+00 1.9059718514206321e+00 1.4541430227541277e+00 + -2.4247524511782084e+00 1.9887349631479279e+00 1.7348500202937234e+00 + -2.8669981192663339e+00 2.0201321136251282e+00 1.9922556609714919e+00 + -3.3639901599432203e+00 1.9962862499008351e+00 2.2084392025685808e+00 + -3.9178216820300933e+00 1.8912883670485212e+00 2.3965079796223172e+00 + -4.5081590924087038e+00 1.6344022316188018e+00 2.5869116786349782e+00 + -5.0347511006954386e+00 1.1603970136272668e+00 2.7641829572394436e+00 + -5.3931655996004944e+00 5.1366226268540294e-01 2.8676153149103714e+00 + -5.5368335252167293e+00 -3.1487804679713438e-01 2.8958461916571823e+00 + -5.1186016196276096e+00 -1.5494854957800652e+00 2.8983677887367585e+00 + -3.4814727094759723e+00 -2.5925746262991556e+00 2.8865262945948755e+00 + -3.1743692688472818e+00 -2.8404784537075001e+00 2.7988677386878793e+00 + id 12768 + loc 9.1580486297607422e-01 2.0928145945072174e-01 406 + blend 0.0000000000000000e+00 + interp 4.7683798432588542e-01:4.7683321594604217e-01:8.2852606087615255e-01:2.1953742752748426e-01:1.1630839978569389e+00:2.9838179506737322e-01:2.3219993404482691e+00:2.3475250302062722e-01:3.0725012653528885e+00:2.8530116984037690e-01:3.9659013367732801e+00 + CVs 20 + -1.5616092719846025e-01 1.6736238261987890e-01 2.9974774705891827e-02 + -2.5693709717156782e-01 2.7157116680848981e-01 3.5921719419722456e-02 + -3.3820771280103279e-01 3.4195758742634363e-01 3.4507848794260526e-02 + -4.2414157207766467e-01 3.9632992004942008e-01 3.6368397141518169e-02 + -5.1206131574878555e-01 4.3416528401175836e-01 3.8943437539376097e-02 + -5.9959521078824862e-01 4.5602899552221188e-01 3.9752689430382265e-02 + -6.8556692164886401e-01 4.6324943121784989e-01 3.7098494322323705e-02 + -7.6904581053608945e-01 4.5744693038051942e-01 2.9752521554076095e-02 + -8.4648817244838137e-01 4.4148369548252187e-01 1.4353580874287619e-02 + -9.1402265115521486e-01 4.2040943957722299e-01 -1.5668037278823155e-02 + -9.7506842245309455e-01 3.9787280676622394e-01 -6.3811753986408981e-02 + -1.0381339787969122e+00 3.7189017197751967e-01 -1.2446218066727605e-01 + -1.1060958229692719e+00 3.3955495629169330e-01 -1.9083635183185443e-01 + -1.1776507593309682e+00 3.0237247609481882e-01 -2.6437419055429850e-01 + -1.2544150747623695e+00 2.6275247291023685e-01 -3.4996973676813681e-01 + -1.3379822417995362e+00 2.2160549366134713e-01 -4.4629696085146681e-01 + -1.4228375265877282e+00 1.8096440077562020e-01 -5.4611152029298116e-01 + -1.5009661395428435e+00 1.4049442430252107e-01 -6.4264167911240888e-01 + -1.5894600293868124e+00 5.3010908669346324e-02 -7.2813313831293391e-01 + id 12769 + loc 8.2378637790679932e-01 9.2688965797424316e-01 409 + blend 0.0000000000000000e+00 + interp 5.2973292308968090e-01:4.3064141149950375e-01:2.3242532813443795e-01:3.7362830246421092e-01:9.5052323326754828e-01:3.1580042128350228e-01:1.3324831302667688e+00:4.0647108069361698e-01:1.8822093777078026e+00:5.2972762576045007e-01:2.2095472530778375e+00:3.8026239746209478e-01:2.9169834481278896e+00:4.5754105752434704e-01:3.3260672628138499e+00:4.3966318924895165e-01:3.9506582859610782e+00 + CVs 20 + 5.6772405925815228e-01 7.6279715459848019e-02 -2.5845333430923267e-01 + 1.0307905746164943e+00 7.2484941340896225e-02 -4.8261021447383001e-01 + 1.4670265832059408e+00 3.7721488477846843e-02 -6.7599981184045144e-01 + 1.8949043090426552e+00 -1.6835153379973877e-02 -8.4120546661468043e-01 + 2.3022698861605422e+00 -9.5959796194616809e-02 -9.8033528161907801e-01 + 2.6787604715898268e+00 -1.9958241787878617e-01 -1.0961651275807001e+00 + 3.0124938112272934e+00 -3.2510797526132862e-01 -1.1916856508002094e+00 + 3.2886597056990290e+00 -4.6712853571804480e-01 -1.2693009192683318e+00 + 3.4941932547167260e+00 -6.1427586592070371e-01 -1.3313950151040854e+00 + 3.6231842207115745e+00 -7.4806332347541971e-01 -1.3797761463574045e+00 + 3.6841198006454974e+00 -8.4732043039144544e-01 -1.4157501094494567e+00 + 3.7079197958182544e+00 -9.0364913453752571e-01 -1.4457961622565416e+00 + 3.7334466841984222e+00 -9.3157146611591468e-01 -1.4819985430473288e+00 + 3.7825860456604135e+00 -9.5124759391440739e-01 -1.5318401605785390e+00 + 3.8612096253402375e+00 -9.7538201962220628e-01 -1.5974965707370417e+00 + 3.9675519736983196e+00 -1.0099783140185850e+00 -1.6833705039372053e+00 + 4.0968083457109987e+00 -1.0635518969890398e+00 -1.7969910010457477e+00 + 4.2388850155736861e+00 -1.1576432872345437e+00 -1.9376136385994780e+00 + 4.3355104268608846e+00 -1.4596805968242696e+00 -2.1049300942886413e+00 + id 12770 + loc 7.4051278829574585e-01 8.7028247117996216e-01 403 + blend 0.0000000000000000e+00 + interp 4.3805037548996184e-01:4.0197937243726728e-01:1.9488745567413290e-01:3.3817484748813326e-01:8.9683906414130266e-01:3.7872513331411295e-01:1.2534511304683065e+00:3.2774497994680440e-01:2.0008502393512435e+00:2.9389648285130349e-01:2.9323859439886690e+00:3.7642189371043921e-01:3.2311160764971412e+00:4.3804599498620694e-01:3.9237853942212038e+00 + CVs 20 + -1.1269686115549854e-01 -1.8140450786550993e-02 3.2647077604077770e-03 + -1.9968974582672538e-01 -1.3393779390033375e-02 2.5333807072731931e-03 + -2.7655775950599959e-01 3.2206617424221928e-03 -1.4320673902380211e-03 + -3.5401651843946702e-01 2.2871435942288687e-02 -8.4116034085160822e-03 + -4.3251345666746510e-01 4.7206917835392492e-02 -1.9184539163170380e-02 + -5.1317049307657403e-01 7.8201769077415662e-02 -3.4664476998180128e-02 + -5.9816897495571375e-01 1.1805625461660557e-01 -5.5047808721579196e-02 + -6.9077228140693703e-01 1.6860289343678658e-01 -8.0158944193488763e-02 + -7.9468930199198096e-01 2.3077392935722302e-01 -1.0817817896628801e-01 + -9.1262933338812469e-01 3.0472816295090666e-01 -1.3405183305159135e-01 + -1.0454936528637091e+00 3.9140975879136697e-01 -1.5035898869188793e-01 + -1.1917849767745143e+00 4.9324871025870837e-01 -1.4697009501123923e-01 + -1.3458444489639412e+00 6.0594128295983607e-01 -1.1532765836975624e-01 + -1.4940791065788490e+00 7.0603562845683299e-01 -6.2026616543611704e-02 + -1.6195513559683548e+00 7.6542720430517197e-01 -1.0842536935820296e-02 + -1.7164264845100330e+00 7.8535083816937379e-01 2.7722492474929930e-02 + -1.7840355804162147e+00 7.9417327059297238e-01 6.7242896917196052e-02 + -1.8152859854515735e+00 8.1954053374438240e-01 1.2033079813714744e-01 + -1.6990700108634067e+00 9.8370634638456345e-01 3.0084106863454152e-01 + id 12771 + loc 4.2412492632865906e-01 2.8749689459800720e-01 395 + blend 0.0000000000000000e+00 + interp 5.5172980833303220e-01:4.8408385012414878e-01:5.3227048769743934e-04:5.5172429103494891e-01:3.6946403655236426e-01:2.7334149056071444e-01:1.0345250470496836e+00:3.6666921556172077e-01:1.8418027655337368e+00:4.5835959296724671e-01:2.2705493521858453e+00:3.3921941278563111e-01:2.9116614100538278e+00:4.2339056561628491e-01:3.1910025334667971e+00:5.1971317889256941e-01:3.7598412179455556e+00 + CVs 20 + -3.4413969003986045e-01 1.4625000105942496e-01 -2.0212075348980796e-01 + -6.3148086240860546e-01 2.5617356508275035e-01 -3.8008881452868165e-01 + -9.0305203295188918e-01 3.4752695095339386e-01 -5.5884601822541824e-01 + -1.1760840183046370e+00 4.2880411486951941e-01 -7.5032717292660633e-01 + -1.4461990825844062e+00 4.9838467375635687e-01 -9.5592215075214637e-01 + -1.7089298232946215e+00 5.5381393742492602e-01 -1.1744724118632028e+00 + -1.9631043857632640e+00 5.9413329373732393e-01 -1.4027384768745825e+00 + -2.2091117615758638e+00 6.1930478218334339e-01 -1.6353738746629671e+00 + -2.4418476952807953e+00 6.2696984098375963e-01 -1.8668794814925722e+00 + -2.6518107689265205e+00 6.1269175396786246e-01 -2.0910524163809128e+00 + -2.8391010733379871e+00 5.7122850863943930e-01 -2.3020585607814712e+00 + -3.0181669318779401e+00 4.9444562543036996e-01 -2.4972811014454823e+00 + -3.2001388556468751e+00 3.7807495189807261e-01 -2.6758301976218855e+00 + -3.3823915987167945e+00 2.3017823240285207e-01 -2.8386599699633726e+00 + -3.5593384367129834e+00 6.7561437377658518e-02 -2.9878371410422657e+00 + -3.7321858230303899e+00 -9.1663327739680334e-02 -3.1252876848715125e+00 + -3.9059263202207233e+00 -2.3864906923754781e-01 -3.2540345522812957e+00 + -4.0809057484787621e+00 -3.8447138121035529e-01 -3.3753654260305312e+00 + -4.2233824631889778e+00 -5.8777237507928914e-01 -3.4681233350575011e+00 + id 12772 + loc 3.5402107238769531e-01 8.4606051445007324e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0086802250973095e-01:4.4783725445312339e-01:5.7245405036584507e-01:3.3718527644624807e-01:9.9234002511928388e-01:3.7822640912118738e-01:1.3721254737803292e+00:3.1785775739064326e-01:2.0236655031727504e+00:5.0086301382950582e-01:2.5278070021242733e+00:3.7382609410970130e-01:3.0949185526291139e+00:4.1153744454699415e-01:3.9953492751821011e+00 + CVs 20 + -2.3703839672661969e-02 1.5790079552845343e-01 -1.6050917953741931e-02 + -2.4679859569794120e-02 3.1787851634806175e-01 -4.7125488941500621e-02 + -2.6997504344585511e-02 4.7434438812988100e-01 -9.3206381090696511e-02 + -4.4025822746274833e-02 6.2532601533535925e-01 -1.5645370389105462e-01 + -7.5532924049614966e-02 7.6463796430325859e-01 -2.3843455589745172e-01 + -1.2064436538167092e-01 8.8485641562017781e-01 -3.3801835378635942e-01 + -1.7818427156302202e-01 9.7887817957641921e-01 -4.5166500422027994e-01 + -2.4645436330891718e-01 1.0422789258193050e+00 -5.7465484566289660e-01 + -3.2289314350378057e-01 1.0738429679030070e+00 -7.0191875989560915e-01 + -4.0375839968754124e-01 1.0739141870557132e+00 -8.2854085629471275e-01 + -4.8425909041183529e-01 1.0435650042292093e+00 -9.5161631031866267e-01 + -5.5942580012530074e-01 9.8510970569367950e-01 -1.0713704108242854e+00 + -6.2470363772775606e-01 9.0205812494178539e-01 -1.1898314574496569e+00 + -6.7733320347457437e-01 7.9914607623293699e-01 -1.3111904012791600e+00 + -7.1753397091596971e-01 6.8188940042134449e-01 -1.4419813729911495e+00 + -7.4571197142955670e-01 5.5596284632375870e-01 -1.5873625767980974e+00 + -7.6034149711055588e-01 4.2771025053987022e-01 -1.7498093341383545e+00 + -7.6013083415531213e-01 3.0467625443080160e-01 -1.9296734848720769e+00 + -7.7892881412335802e-01 1.8749767852446508e-01 -2.1563155265450891e+00 + id 12773 + loc 5.2700841426849365e-01 1.2786197662353516e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1154715624882093e-01:3.4679064612321175e-01:4.5564850418098568e-01:3.5150060999254445e-01:1.0567129271079021e+00:2.7876932718530406e-01:2.3191561159758267e+00:3.5438136259015424e-01:2.9512539275986791e+00:4.1154304077725845e-01:3.8076271757511622e+00 + CVs 20 + -2.5303718040849127e-01 1.6995457402914760e-01 2.6291171506126620e-01 + -4.7327658887549084e-01 3.1606406174270629e-01 5.1599270935770336e-01 + -6.8236230196577707e-01 4.3413890811540234e-01 7.6924371368014843e-01 + -8.8749961954851009e-01 5.2472792150553182e-01 1.0255112188867930e+00 + -1.0779902588327532e+00 5.9066945193721043e-01 1.2707068548386029e+00 + -1.2430962309115343e+00 6.3548938339291183e-01 1.4825772657679550e+00 + -1.3784965558681057e+00 6.6932283512063639e-01 1.6396709662647015e+00 + -1.4872555318622886e+00 7.1486129528560027e-01 1.7254254790359573e+00 + -1.5825131741622027e+00 8.0684498753347067e-01 1.7374283364593825e+00 + -1.6792625445229794e+00 9.6650784282404689e-01 1.7203869011057689e+00 + -1.7656448728145382e+00 1.1562796055805000e+00 1.7523496366847851e+00 + -1.8022424343691270e+00 1.2985709750808752e+00 1.8677909914003348e+00 + -1.7614424726927382e+00 1.3465138743101552e+00 2.0482011426420463e+00 + -1.6459483211008223e+00 1.2904424738653444e+00 2.2719608960446815e+00 + -1.4665768960376004e+00 1.1347397285436736e+00 2.5341850303655344e+00 + -1.2085519294806002e+00 8.9236751982100282e-01 2.8521628563767338e+00 + -8.5694353580282323e-01 5.4607114073210616e-01 3.2722686680012001e+00 + -6.0565263772671774e-01 1.1643273433400181e-01 3.7808047200159187e+00 + -9.1560697822751602e-01 7.5852173012860402e-02 3.9133140856218751e+00 + id 12774 + loc 8.0555671453475952e-01 6.7745864391326904e-01 393 + blend 0.0000000000000000e+00 + interp 4.6613882509611454e-01:2.6397005367269244e-01:2.6018057461644173e-01:3.8990703984475761e-01:1.0159854635165180e+00:3.1476216589426131e-01:1.9760647133975346e+00:4.6613416370786359e-01:2.3270561960437739e+00:4.1383798393381965e-01:3.0064718437113260e+00:3.9193664220849134e-01:3.4607534609368238e+00:4.1915024553885000e-01:3.9705988930735634e+00 + CVs 20 + -1.7403417564821810e-01 1.9744852052245421e-01 -9.2459579539377820e-02 + -3.5186471836511668e-01 4.2097361088606644e-01 -2.1848978203523334e-01 + -5.3156689153532288e-01 6.6693295357327120e-01 -3.4576846022066332e-01 + -7.1328482434497342e-01 9.2859057488063879e-01 -4.5809432526303651e-01 + -9.0055227846508845e-01 1.1974265793254841e+00 -5.5725055611652929e-01 + -1.0952502867420360e+00 1.4599569581650533e+00 -6.5138162328044225e-01 + -1.2968944972296104e+00 1.7028065410298798e+00 -7.5181093727461568e-01 + -1.5053376688676363e+00 1.9153708483714600e+00 -8.6534324089153647e-01 + -1.7192103210460230e+00 2.0852207683858519e+00 -9.9206066172840401e-01 + -1.9263740945800978e+00 2.1890353287065203e+00 -1.1325926195779452e+00 + -2.0956865692246542e+00 2.1939347954574675e+00 -1.2832697452521253e+00 + -2.1931813194357574e+00 2.0910781158914484e+00 -1.4133004497548414e+00 + -2.2259927925717147e+00 1.9273835329600399e+00 -1.4891498055922270e+00 + -2.2395977453895766e+00 1.7506737852871774e+00 -1.5353189471407505e+00 + -2.2643085220912047e+00 1.5601613481505163e+00 -1.5956892021247779e+00 + -2.3143219934049188e+00 1.3497322172076909e+00 -1.6781484845805874e+00 + -2.4212099763427970e+00 1.1347891454361956e+00 -1.7722954402569653e+00 + -2.6039595172408729e+00 9.5121955684356785e-01 -1.8584290530852579e+00 + -2.7274642698633276e+00 7.7333512391785431e-01 -1.9508655110979745e+00 + id 12775 + loc 7.0789247751235962e-01 1.3126380741596222e-01 413 + blend 0.0000000000000000e+00 + interp 3.0871904011452550e-01:2.8082611190358198e-01:9.9983878744920085e-01:2.9529408878019431e-01:2.0530128792437803e+00:2.9437814101590282e-01:3.0021950266099187e+00:3.0871595292412435e-01:3.9648801730548477e+00 + CVs 20 + -1.1444992269318741e+00 2.7591722945188568e-01 1.5743952766232089e-01 + -1.9404135218213110e+00 3.7573691468392717e-01 2.6289926909872363e-01 + -2.6604479367440352e+00 4.1371780400770497e-01 3.4539658560041464e-01 + -3.4073052118712859e+00 4.2033620759202045e-01 4.1896505140216933e-01 + -4.1584317958771280e+00 3.7761186067262453e-01 4.8490009419212232e-01 + -4.8877142635973279e+00 2.7053048011410397e-01 5.4577325852249370e-01 + -5.5687214222408201e+00 8.8554663191340532e-02 6.0099957299057949e-01 + -6.1767126181179846e+00 -1.7256512656047607e-01 6.4385679041088650e-01 + -6.6893406104420272e+00 -5.0545479808623073e-01 6.6627698715914330e-01 + -7.0895946618830727e+00 -8.8783550069136430e-01 6.6278977164531472e-01 + -7.3745843608343131e+00 -1.2870992267574943e+00 6.2904958670815558e-01 + -7.5604947401785303e+00 -1.6744387897253361e+00 5.6372389339488582e-01 + -7.6713190392785151e+00 -2.0306246405326553e+00 4.7406119307926436e-01 + -7.7312731330126239e+00 -2.3430894412835781e+00 3.7289789411447405e-01 + -7.7663445208903328e+00 -2.6099305557175723e+00 2.6210779086773456e-01 + -7.7949379365084290e+00 -2.8371574861902609e+00 1.4704609295523141e-01 + -7.8178944228466616e+00 -3.0375426774512668e+00 3.2200806942485782e-02 + -7.8057519414487029e+00 -3.2357205351913318e+00 -9.4429194681069861e-02 + -7.6202817012362978e+00 -3.4909456434571062e+00 -2.2128203149816478e-01 + id 12776 + loc 3.7596625089645386e-01 9.5794653892517090e-01 417 + blend 0.0000000000000000e+00 + interp 3.5482651821015998e-01:3.4950250400991451e-01:3.7049682196069300e-02:3.2723154587781006e-01:9.0565239035898326e-01:2.4853333160348098e-01:1.9621437009105236e+00:3.5482296994497792e-01:2.9401352021409028e+00 + CVs 20 + -1.8180997993893222e-02 2.3090206960403542e-01 -2.4908806209778500e-01 + 2.8024746130021760e-03 3.8644012108980308e-01 -3.9333936266052466e-01 + 3.1076119260125379e-02 5.1278249554955357e-01 -5.1094666818522771e-01 + 5.6173632425121245e-02 6.3536771178128548e-01 -6.3514311200132945e-01 + 7.9925243681300023e-02 7.5493942347166088e-01 -7.6607770351708571e-01 + 1.0390890451059087e-01 8.7271502447947014e-01 -9.0403108029500556e-01 + 1.2957098180812726e-01 9.8971304599697763e-01 -1.0485648537091925e+00 + 1.5832339868965173e-01 1.1067003618687656e+00 -1.1982267627308512e+00 + 1.9108712250089255e-01 1.2249524004089640e+00 -1.3544389156085768e+00 + 2.2762811038838821e-01 1.3452290857728069e+00 -1.5255960512458073e+00 + 2.6584859275623085e-01 1.4648001322424382e+00 -1.7191130530589260e+00 + 3.0219141912712977e-01 1.5791356443589066e+00 -1.9298450706807644e+00 + 3.3439308407964463e-01 1.6860784425131152e+00 -2.1478645965786165e+00 + 3.6265402471693897e-01 1.7837595271869875e+00 -2.3725205388824691e+00 + 3.8726609384496191e-01 1.8682373893393744e+00 -2.6086775655994225e+00 + 4.0478659428220531e-01 1.9370020263844252e+00 -2.8546148971774361e+00 + 4.0928184614867169e-01 1.9913377728884263e+00 -3.1004796020481771e+00 + 3.9941351594340524e-01 2.0339755636191508e+00 -3.3304506704911967e+00 + 3.9970973082153682e-01 2.0633718911201155e+00 -3.4992384016000271e+00 + id 12777 + loc 2.1351464092731476e-01 8.6032235622406006e-01 264 + blend 0.0000000000000000e+00 + interp 5.3862254584983560e-01:5.3861715962437717e-01:1.0144623242113004e+00:2.4535800938272462e-01:1.8079219800085429e+00:3.3849603042092247e-01:2.7708061766471497e+00:3.9612553646137727e-01:3.1283609336211149e+00:3.7674490834546714e-01:3.9999884339584750e+00 + CVs 20 + -7.5299648037789901e-01 3.6577379635088592e-01 -9.3353917834536226e-02 + -1.3128003584608707e+00 5.4853977462530923e-01 -9.1852133199296526e-02 + -1.8299853122052068e+00 5.9038081629123407e-01 9.5085917132764486e-04 + -2.3833722520016378e+00 5.6104630608096340e-01 1.7826226376505272e-01 + -2.9700707585745785e+00 5.5368654667692341e-01 4.1204655590607131e-01 + -3.5901830760122335e+00 6.2736774142032392e-01 6.4715251634064952e-01 + -4.2455753096321232e+00 7.8400053534340663e-01 8.0687515313025937e-01 + -4.9042821769525453e+00 1.0004155312984770e+00 8.2821180970796360e-01 + -5.5120619569070843e+00 1.2523560691568860e+00 6.8769720508960419e-01 + -6.0307470840433171e+00 1.5199555696385305e+00 3.8706465090000863e-01 + -6.4591861380596436e+00 1.7846706247278254e+00 -6.2005805269263803e-02 + -6.8204912856422988e+00 2.0335976195142056e+00 -6.4565045227138584e-01 + -7.1268788326487531e+00 2.2391252678638276e+00 -1.3525498183884483e+00 + -7.3632016181676505e+00 2.3416968164044150e+00 -2.1527189425307469e+00 + -7.4981905137058229e+00 2.2909503939414479e+00 -3.0303852969471112e+00 + -7.4323728690794697e+00 1.9647172224948353e+00 -4.0397491967170316e+00 + -7.1177052604915572e+00 1.1008199839450321e+00 -5.1009051300225048e+00 + -6.8655493428623160e+00 -1.7919929286237002e-01 -5.7572748420832900e+00 + -6.9070893848812043e+00 -7.5645829824691280e-01 -5.8561134206369143e+00 + id 12778 + loc 7.3789134621620178e-03 5.5766904354095459e-01 1080 + blend 0.0000000000000000e+00 + interp 2.6851497421700405e+00:3.7665946894305669e-01:1.7648790338708906e+00:3.7550240795540368e-01:2.2964550793988119e+00:3.9606668140624979e-01:2.9885610331232728e+00:3.4274340285797605e-01:3.4760614239441043e+00:6.3466207548264331e-01:3.6295557275558874e+00:9.6780224792712444e-01:3.6757149596569203e+00:2.6851397421700405e+00:3.8007898604066632e+00 + CVs 20 + -1.7669583145858045e-01 4.7038643884532416e-01 3.2130681616933854e-01 + -3.1602011660365092e-01 8.3854998443579187e-01 4.1694497127850894e-01 + -5.0377948959482355e-01 1.1610473677268303e+00 4.9261575600515894e-01 + -7.6203366402282813e-01 1.4501239993993857e+00 5.8346209359116763e-01 + -1.0854238633436384e+00 1.6916356870563611e+00 6.8019845016161384e-01 + -1.4631249480612911e+00 1.8742904687281703e+00 7.7707260301108028e-01 + -1.8798233809146498e+00 1.9912373888172556e+00 8.7227758294234969e-01 + -2.3183596381939537e+00 2.0403500757009865e+00 9.6747055699236495e-01 + -2.7618582967460070e+00 2.0234764862365995e+00 1.0654409590197744e+00 + -3.1952707482923448e+00 1.9452369027868275e+00 1.1682036952097152e+00 + -3.6070165516464971e+00 1.8110136340497092e+00 1.2754717879569619e+00 + -3.9888378776879820e+00 1.6263501849646986e+00 1.3837765373063236e+00 + -4.3313657475132592e+00 1.4028775757024077e+00 1.4898488899909323e+00 + -4.6214449077256807e+00 1.1672864743867915e+00 1.5958465531564632e+00 + -4.8521173058674494e+00 9.4965117046231751e-01 1.7089228332483180e+00 + -5.0312577499410382e+00 7.5973241775525402e-01 1.8345380204765274e+00 + -5.1760588123613456e+00 5.9593076519415755e-01 1.9678324743201738e+00 + -5.3007375996022956e+00 4.5892112391292794e-01 2.1007861709125968e+00 + -5.4637040590045576e+00 3.1231764894663960e-01 2.2176788431611691e+00 + id 12779 + loc 5.9877300262451172e-01 6.6370725631713867e-01 377 + blend 0.0000000000000000e+00 + interp 4.1938548653247260e-01:4.0532915643811568e-01:1.9076409016866136e-02:2.6151492056141845e-01:1.0029271966172544e+00:4.0896641307062431e-01:1.4481325631562889e+00:4.1938129267760726e-01:2.1080724705087217e+00:3.8294037248474772e-01:2.9309897091992929e+00:3.8235524201972765e-01:3.4585007330513897e+00 + CVs 20 + -6.9336265529343888e-01 2.0561121905184754e-01 -5.3172283289152200e-01 + -1.2211444817938415e+00 3.0418204799329468e-01 -8.4490876101524037e-01 + -1.7221199927100230e+00 3.7874274963514132e-01 -1.1125244286849787e+00 + -2.2396652153733769e+00 4.6541471604671919e-01 -1.4075328395370150e+00 + -2.7615274105296752e+00 5.5813809512447876e-01 -1.7450012928993739e+00 + -3.2799052232045658e+00 6.4361444954870239e-01 -2.1342988382428025e+00 + -3.7985835416027007e+00 6.9787879700464095e-01 -2.5786051030127983e+00 + -4.3138061840976452e+00 6.9617327523043993e-01 -3.0826644797253655e+00 + -4.8134216883075469e+00 6.1002053669010881e-01 -3.6488958645068013e+00 + -5.2869613291628541e+00 4.1133429715673464e-01 -4.2602222854106993e+00 + -5.7368776538669684e+00 7.4295785922317670e-02 -4.8764217407138286e+00 + -6.1615369097718791e+00 -4.2189225307829137e-01 -5.4372205099672222e+00 + -6.5377296599014585e+00 -1.0677244137055668e+00 -5.8707368694132658e+00 + -6.8454044200988395e+00 -1.7892276974345593e+00 -6.1295007150246814e+00 + -7.1062161412091287e+00 -2.4878363055031949e+00 -6.2344910140085563e+00 + -7.3574834108682312e+00 -3.1071958623510398e+00 -6.2433745062606949e+00 + -7.6214358498365833e+00 -3.6280461935222732e+00 -6.1949059084942757e+00 + -7.9241112788874748e+00 -4.0552771816462050e+00 -6.0983492295475301e+00 + -8.2726451331041204e+00 -4.4588528886431407e+00 -5.9675421330769574e+00 + id 12780 + loc 5.4089170694351196e-01 8.3682030439376831e-01 411 + blend 0.0000000000000000e+00 + interp 4.3840079941789334e-01:3.8714544833928821e-01:1.3310672060063988e-01:3.1472881062432506e-01:8.7903755645565818e-01:3.6177605619047737e-01:1.8412598265288787e+00:4.1542482059829350e-01:2.1346521559272009e+00:3.1088131337689839e-01:2.8778891240566287e+00:4.3839641540989915e-01:3.1736569610641427e+00:3.5942877235797421e-01:3.8421547420304591e+00 + CVs 20 + 9.5491383694484022e-01 1.6376564604180688e-01 -1.7440136713426138e-01 + 1.6274921290583435e+00 1.7400942564294505e-01 -3.3085183417935943e-01 + 2.2262385645935683e+00 1.1289716669129446e-01 -4.6340010114923280e-01 + 2.8330717923659092e+00 5.8827442857121159e-03 -5.7125877986676099e-01 + 3.4291529093998356e+00 -1.5525940087207557e-01 -6.4802119413314896e-01 + 3.9958970557797899e+00 -3.7013586118284292e-01 -6.9130986306120135e-01 + 4.5171959153512296e+00 -6.3080779885739302e-01 -7.0092705362371377e-01 + 4.9790370647004805e+00 -9.2502483696745696e-01 -6.7635648318566433e-01 + 5.3705034355773931e+00 -1.2380250069239325e+00 -6.1786097204614365e-01 + 5.6856714677440650e+00 -1.5530658069012930e+00 -5.2923252632922746e-01 + 5.9280723794998416e+00 -1.8544944792719831e+00 -4.1667078551893022e-01 + 6.1124547139550307e+00 -2.1306648348894268e+00 -2.8342846180048897e-01 + 6.2619847330563880e+00 -2.3757778131878569e+00 -1.2866599738304854e-01 + 6.3969383880265456e+00 -2.5864430634917825e+00 4.6370858432422946e-02 + 6.5319416282420679e+00 -2.7629595543824630e+00 2.3591396361688011e-01 + 6.6760011198893485e+00 -2.9086141859048795e+00 4.3116640220308095e-01 + 6.8343759511738833e+00 -3.0297487845571736e+00 6.2163674384604506e-01 + 7.0071073823251746e+00 -3.1508467478462019e+00 8.0117306247488218e-01 + 7.1204501451664441e+00 -3.3661151553025324e+00 9.6486595134126196e-01 + id 12781 + loc 1.5156152844429016e-01 5.0319701433181763e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7756991946006822e-01:4.7756514376087361e-01:4.3916169433942864e-01:3.6890163382492008e-01:1.0385577378462103e+00:4.0303550146392553e-01:1.6867826164394844e+00:2.6894423470754791e-01:2.0089223951643120e+00:2.5405134873227986e-01:3.0362203698476393e+00:3.3595856374566679e-01:3.9949074793852923e+00 + CVs 20 + 1.5152903535616397e-01 2.6017978098754341e-01 -2.4081966319797016e-01 + 3.4376234022331009e-01 4.9656415775251939e-01 -4.8003795960215173e-01 + 5.5758794158855696e-01 7.2027058223192952e-01 -7.0361306297548343e-01 + 7.8254658361194163e-01 9.3074275996118749e-01 -9.1575155194062441e-01 + 1.0112369104947936e+00 1.1401141530730525e+00 -1.1356528776500967e+00 + 1.2261932104340074e+00 1.3559383961610185e+00 -1.3816850154293607e+00 + 1.4042520013417596e+00 1.5594549805847993e+00 -1.6587820000688209e+00 + 1.5333847072579068e+00 1.7093760782002336e+00 -1.9538612194670999e+00 + 1.6167421620734612e+00 1.7720939169301491e+00 -2.2496025411617668e+00 + 1.6664618550585630e+00 1.7487156670430857e+00 -2.5363219413573184e+00 + 1.6986551427106706e+00 1.6716582068278771e+00 -2.8149111519671544e+00 + 1.7241058957501705e+00 1.5752353273191204e+00 -3.0905296866147824e+00 + 1.7500225613347720e+00 1.4889258865934261e+00 -3.3573071243267072e+00 + 1.7824068596183329e+00 1.4447560795283836e+00 -3.5958687182015479e+00 + 1.8203828317166604e+00 1.4827481430964813e+00 -3.7712326128284044e+00 + 1.8301872445907461e+00 1.6750854518657956e+00 -3.8068250338723288e+00 + 1.6733484572476636e+00 2.0405102222909481e+00 -3.6551950520941383e+00 + 1.4283244547103318e+00 2.2976007000409515e+00 -3.5686669341881734e+00 + 1.7352567742632745e+00 2.2263378991909812e+00 -3.8207844573657161e+00 + id 12782 + loc 5.4014933109283447e-01 5.7315510511398315e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3512544852855145e-01:3.5786088499598478e-01:5.7085053166464794e-01:2.5018760884278413e-01:1.1632529017514210e+00:4.3512109727406617e-01:1.9846117593901931e+00:2.6278374548231048e-01:2.5496022118701052e+00:2.4071959724731401e-01:3.5445832037334011e+00 + CVs 20 + 1.5833976149526677e-01 2.9686825753760793e-01 -1.5931743108760726e-01 + 3.2709890144517151e-01 5.8543880670355308e-01 -3.0941632361630500e-01 + 4.8039839843517967e-01 8.5575436217659329e-01 -4.6820438699771372e-01 + 6.0760294528148917e-01 1.0994489457341086e+00 -6.4163799139337852e-01 + 7.0840118402741847e-01 1.3100414585356719e+00 -8.2832958333849183e-01 + 7.8659546053785634e-01 1.4844303175594507e+00 -1.0276801879861781e+00 + 8.4910308540233215e-01 1.6213971938799827e+00 -1.2416857102138246e+00 + 9.0002229655232824e-01 1.7191427141165039e+00 -1.4684170739263558e+00 + 9.3819367039587487e-01 1.7786383873031451e+00 -1.6988309831785289e+00 + 9.6137196823231763e-01 1.8050656258284361e+00 -1.9235815781579331e+00 + 9.7086650967313393e-01 1.8092121141139854e+00 -2.1335533530470228e+00 + 9.7419070416376530e-01 1.8079073084861252e+00 -2.3199022620715972e+00 + 9.8433729534456105e-01 1.8126191953181641e+00 -2.4777173750784831e+00 + 1.0258446191838748e+00 1.8168971276824735e+00 -2.5925795923214037e+00 + 1.1345908687468076e+00 1.8066401514120827e+00 -2.6501875457137638e+00 + 1.3263142487274113e+00 1.7543829648646287e+00 -2.6748715958215845e+00 + 1.5796189444275179e+00 1.6255035121238004e+00 -2.7155283942633197e+00 + 1.7759637323191189e+00 1.4185976903040434e+00 -2.8158013279741794e+00 + 1.6077591476632564e+00 1.3039048947460088e+00 -2.9378622317842980e+00 + id 12783 + loc 2.3041105270385742e-01 7.6298779249191284e-01 417 + blend 0.0000000000000000e+00 + interp 3.6439606960465321e-01:3.1397385601623490e-01:1.5997953919508257e-01:3.6439242564395719e-01:1.0082715989303204e+00:3.3614365304174210e-01:2.0679985613648197e+00:3.3546797017500457e-01:2.9475062903882252e+00 + CVs 20 + -6.0306492012437429e-03 2.2060977552476266e-01 -3.0566042895929740e-01 + 3.1552338148708670e-02 3.8339420021325338e-01 -5.3427913481465983e-01 + 6.0865351074003093e-02 4.9479328169528164e-01 -7.4727561781435614e-01 + 7.1099043825411601e-02 5.7614820474774797e-01 -9.6783940049654271e-01 + 6.5694271867927645e-02 6.2440023562524249e-01 -1.1904246671059131e+00 + 4.7637584835541757e-02 6.3906003994295235e-01 -1.4087889986637125e+00 + 2.0152132011244606e-02 6.2253873121246706e-01 -1.6167545613762393e+00 + -1.3147932504308457e-02 5.8042163009114589e-01 -1.8093306794661752e+00 + -4.9654459465845235e-02 5.1782221001735007e-01 -1.9831002774642719e+00 + -9.0620409242192501e-02 4.3590470104791734e-01 -2.1356435533605609e+00 + -1.4003828762054404e-01 3.3528709843409255e-01 -2.2655577429234501e+00 + -1.9917795643616037e-01 2.2128036982682664e-01 -2.3735644844019341e+00 + -2.6448393063403552e-01 1.0241786304390810e-01 -2.4630908002296690e+00 + -3.3250890346488038e-01 -1.5983271459387050e-02 -2.5384161905750577e+00 + -4.0433387732664883e-01 -1.3386498683584414e-01 -2.6025763371006057e+00 + -4.8281437439043656e-01 -2.5280860934120919e-01 -2.6574221563075042e+00 + -5.6677776691593029e-01 -3.7340484314489530e-01 -2.7030173149183998e+00 + -6.5037269998560487e-01 -4.9518710270158373e-01 -2.7380533463084573e+00 + -7.5231304064951021e-01 -6.1257749477857426e-01 -2.8067096852339111e+00 + id 12784 + loc 4.5827946066856384e-01 1.9476762413978577e-01 413 + blend 0.0000000000000000e+00 + interp 4.5829421931646608e-01:4.5828963637427295e-01:1.6254030808703412e-01:2.9137260033908546e-01:9.8817948267682720e-01:2.8532141891506385e-01:2.0006297374396338e+00:2.7382072473352614e-01:3.7567484894176140e+00 + CVs 20 + 6.0209048942070902e-02 5.6742134371993547e-02 -1.3378953362813597e+00 + 1.4877602441557786e-01 -7.6712299454486210e-02 -2.2226811539554405e+00 + 2.5299428119937112e-01 -2.5752891786836379e-01 -2.9551865677635969e+00 + 3.5440424856218733e-01 -4.4371390205079386e-01 -3.6370020981876583e+00 + 4.4507008042750351e-01 -6.2869179482540549e-01 -4.2675866608756756e+00 + 5.2266431406619529e-01 -8.1007837360955948e-01 -4.8567055000552353e+00 + 5.8995081580699071e-01 -9.9236906482315401e-01 -5.4105390138479770e+00 + 6.4486473477524719e-01 -1.1860310464707899e+00 -5.9255475827875745e+00 + 6.7721773158236953e-01 -1.3995947613552326e+00 -6.3873077789960941e+00 + 6.8808234895777642e-01 -1.6293095014212531e+00 -6.7746285479663788e+00 + 6.8715986545300500e-01 -1.8601349893401868e+00 -7.0759127853427186e+00 + 6.8959756025224950e-01 -2.0748331279345331e+00 -7.2984550713580774e+00 + 7.0524750443271333e-01 -2.2678813572169649e+00 -7.4633706826373967e+00 + 7.3938756659073701e-01 -2.4449892517408935e+00 -7.5935027287520942e+00 + 7.9644812441025548e-01 -2.6151977510138611e+00 -7.7110668060022398e+00 + 8.7347058450134574e-01 -2.7888863143878044e+00 -7.8290406819500049e+00 + 9.6240879331180695e-01 -2.9783800939854608e+00 -7.9403796046270321e+00 + 1.0668922751979208e+00 -3.2008929420769219e+00 -8.0213931573490349e+00 + 1.1604368522334187e+00 -3.4965480400650364e+00 -7.9252151729706481e+00 + id 12785 + loc 2.5024017691612244e-01 4.4820398092269897e-01 393 + blend 0.0000000000000000e+00 + interp 4.7718693362173431e-01:4.1994470354663938e-01:2.6984761884040087e-02:4.0474242081851275e-01:6.5041014936728159e-01:2.8368274156233114e-01:1.0225310612685374e+00:4.0256589870742843e-01:1.6354325210792746e+00:3.0195643079774814e-01:2.0265821886818709e+00:3.1780528233413186e-01:3.0374087147624644e+00:4.7718216175239814e-01:3.7663020046813651e+00 + CVs 20 + -1.9204559540488211e-01 3.7577117854301800e-01 2.5282246651472845e-01 + -3.6506920968990686e-01 7.8988581510934541e-01 4.9550755491071086e-01 + -5.6097770477474673e-01 1.2322630146779114e+00 7.2139285270088227e-01 + -8.1253777260235938e-01 1.6833349220466580e+00 9.4365486925945385e-01 + -1.1410607481541117e+00 2.1156935826730576e+00 1.1821962397238499e+00 + -1.5555417416482422e+00 2.4912869469067522e+00 1.4556742457673393e+00 + -2.0506630868321425e+00 2.7596711319192719e+00 1.7761205590908733e+00 + -2.6033733882083991e+00 2.8690863449147206e+00 2.1373941779409042e+00 + -3.1707206374482855e+00 2.7946297939931237e+00 2.5145542583028990e+00 + -3.7052182971791963e+00 2.5544883883578868e+00 2.8840821723666239e+00 + -4.1739861972432291e+00 2.1906442670023436e+00 3.2356398849619641e+00 + -4.5625551228865922e+00 1.7486832175504050e+00 3.5711706897563129e+00 + -4.8635662735282112e+00 1.2495593249475372e+00 3.9106349427183607e+00 + -5.0426939080309907e+00 6.7902488601886501e-01 4.2842964258287495e+00 + -5.0244328371746985e+00 5.3410605956470070e-02 4.7126008015667251e+00 + -4.7479348068772644e+00 -5.2056646156817665e-01 5.2006494479342562e+00 + -4.2174795868612618e+00 -9.0266176142243115e-01 5.7276178481218247e+00 + -3.5364959029818945e+00 -1.0776509373023790e+00 6.1840331848368617e+00 + -3.1697968526998439e+00 -1.4806479489139019e+00 6.5284777545005204e+00 + id 12786 + loc 5.0566232204437256e-01 5.6894850730895996e-01 411 + blend 0.0000000000000000e+00 + interp 4.6600703176199698e-01:3.1487819589486238e-01:2.4845629580619122e-01:4.0226546628703630e-01:9.8553855163026316e-01:3.3346843545450922e-01:1.4900802573280223e+00:2.5532867135545501e-01:2.2481916434342111e+00:3.2748048357065856e-01:3.0104203943628836e+00:4.6600237169167941e-01:3.7229300384220205e+00 + CVs 20 + 7.8100702704173330e-01 2.1224988437179682e-01 -1.0743985622656071e-01 + 1.3528294281003470e+00 3.1365880753816466e-01 -2.2333663900869327e-01 + 1.8966867154646676e+00 3.7063559113040911e-01 -3.4394614167569271e-01 + 2.4896452004774745e+00 4.0669797544582242e-01 -4.6604795150587514e-01 + 3.1240404060930373e+00 4.0810250322687636e-01 -5.7821254501460473e-01 + 3.7825324915238192e+00 3.6353982457573086e-01 -6.6773509045653523e-01 + 4.4422099888593740e+00 2.6412923149193590e-01 -7.2413422940805527e-01 + 5.0771522532856350e+00 1.0150252803134752e-01 -7.3962574568445139e-01 + 5.6587638682598387e+00 -1.2810038666451096e-01 -7.1425764152588811e-01 + 6.1609877562828554e+00 -4.1916133247072951e-01 -6.5718599207212292e-01 + 6.5715148032209436e+00 -7.5680257467169509e-01 -5.7581924981695998e-01 + 6.8975875884617901e+00 -1.1198618076685225e+00 -4.6859397867915614e-01 + 7.1577014793044880e+00 -1.4879677316641926e+00 -3.3364021294521246e-01 + 7.3714936831469142e+00 -1.8486409197578961e+00 -1.7666090014680985e-01 + 7.5548178065474554e+00 -2.1987164738955478e+00 -8.3919893411331659e-03 + 7.7173266888084795e+00 -2.5381392576443766e+00 1.5932659470094634e-01 + 7.8649522914754044e+00 -2.8658980498710145e+00 3.1409547480878963e-01 + 8.0019505725935289e+00 -3.1836304477743385e+00 4.4479319603905099e-01 + 8.1193929557561813e+00 -3.4258770706387347e+00 5.4526508246458760e-01 + id 12787 + loc 1.2890697456896305e-02 5.3703582286834717e-01 1078 + blend 0.0000000000000000e+00 + interp 4.2055164299437842e-01:3.3201509203433655e-01:1.7629494010091629e-01:4.2054743747794848e-01:1.0525831273513591e+00:3.6317228909101312e-01:2.0002037749364474e+00:3.7710346639075082e-01:2.8008387835284809e+00:3.9525048701205212e-01:3.0444385424593916e+00:3.8196670100855334e-01:3.6207107953759010e+00 + CVs 20 + 1.3196266288341160e-01 3.7232467432325966e-01 1.3442906812824001e-01 + 2.6779948484663174e-01 6.8016959915856245e-01 1.6232768503775952e-01 + 4.0693828873027854e-01 9.6797286486097600e-01 1.4200498937451334e-01 + 5.4608950455304128e-01 1.2384993298371696e+00 9.1321813123769080e-02 + 6.8027216949092906e-01 1.4672515030801172e+00 1.9134570786655258e-03 + 7.9713471466620955e-01 1.6218009811155896e+00 -1.2670010803397180e-01 + 8.7223230543678865e-01 1.6663802262197072e+00 -2.7572031012716780e-01 + 8.7198288876979890e-01 1.5876346420052121e+00 -3.9231758614154821e-01 + 7.8449069935036309e-01 1.4379702236675185e+00 -4.1005456463223344e-01 + 6.5235813004805521e-01 1.3101665160975697e+00 -3.2791408264703326e-01 + 5.2151003568185117e-01 1.2412769894527726e+00 -2.0230532589523326e-01 + 4.0617053715148749e-01 1.2167413117179131e+00 -8.0325698570458903e-02 + 3.0012996501035072e-01 1.1886422035702213e+00 -1.4989709262689388e-03 + 1.8383597620766295e-01 1.0948054853780786e+00 1.7418066138198740e-02 + 4.4150151065067512e-02 8.8875928699065110e-01 -2.8708329139931821e-02 + -1.2695247476617855e-01 5.3441015910201883e-01 -1.9661983897247065e-01 + -3.3968713046413351e-01 8.8048520725605428e-02 -7.0023018054587183e-01 + -4.8877561336413722e-01 5.9507267385756069e-02 -1.8111381045123207e+00 + -5.6481820920326342e-01 7.6920014903978928e-02 -1.8816025292486804e+00 + id 12788 + loc 7.4775397777557373e-01 1.3126380741596222e-01 406 + blend 0.0000000000000000e+00 + interp 3.9826420099829291e-01:3.9826021835628295e-01:3.0345489315516128e-01:2.7074766060223288e-01:9.9316068386124412e-01:2.8857270280602865e-01:1.6194538713832354e+00:3.2133925346860109e-01:2.0735377137964641e+00:2.8879397358285291e-01:2.9988411484195536e+00:3.1628962791472559e-01:3.9891745707751856e+00 + CVs 20 + -1.4766438574297913e-01 5.1315983939687240e-02 1.0028277043941065e-01 + -2.5287622723553749e-01 6.8430151939969180e-02 1.9820852831101171e-01 + -2.9694162864199852e-01 4.3078609786537325e-02 2.8746034368933371e-01 + -3.0532374378835814e-01 8.7706852122394763e-03 3.7658024353349057e-01 + -2.7716487334128298e-01 -2.4684490077706983e-02 4.6086120047777163e-01 + -2.1759032162271083e-01 -4.6797994744037008e-02 5.3697287549744666e-01 + -1.3992051462922248e-01 -4.9083984540855774e-02 6.0603604167546898e-01 + -6.0692972318008992e-02 -2.8631521431340706e-02 6.7311641888694884e-01 + 1.7712793774250751e-02 1.3704047936786146e-02 7.3554388996903342e-01 + 1.1228743702226764e-01 8.0241159840831078e-02 7.7260438903324757e-01 + 2.2764199980208794e-01 1.7488895064727084e-01 7.6580856200424841e-01 + 3.3434238506974290e-01 2.8996499085576660e-01 7.3099812657206287e-01 + 4.0694575437159747e-01 4.0894158615786597e-01 6.9923723816732775e-01 + 4.5002418250635295e-01 5.2482865949675161e-01 6.7217375335695673e-01 + 4.7854516736336900e-01 6.3958579785869119e-01 6.2741800562216932e-01 + 4.9594843756522694e-01 7.5515037344206126e-01 5.5763935080599203e-01 + 4.9575023862154516e-01 8.7019396397114024e-01 4.8567195466944102e-01 + 4.7598175834474410e-01 9.7624962750307609e-01 4.3974747803327885e-01 + 4.5073611197368768e-01 9.6645034994731616e-01 4.5043729670401367e-01 + id 12789 + loc 9.7960793972015381e-01 4.6363264322280884e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2390442382690308e-01:2.9669475016974611e-01:1.8017500449059176e-01:3.2932919972823271e-01:1.0000002053398251e+00:4.2390018478266484e-01:1.4835756270835587e+00:2.6337723702736049e-01:2.0104824517103488e+00:3.7939244384700055e-01:2.6828358978317670e+00:3.6948439139946571e-01:3.2284934151303970e+00 + CVs 20 + 1.2176657202447594e-02 4.9281799500745516e-01 -3.5310065741126451e-01 + -3.9671919692525787e-02 8.8206720447984632e-01 -5.7067776494950262e-01 + -1.1502732882636274e-01 1.2273628315257796e+00 -7.3258548390891609e-01 + -1.9979711138932565e-01 1.5524532822707067e+00 -8.6567184610878534e-01 + -2.9193806174326653e-01 1.8521096818961271e+00 -9.6261235019014424e-01 + -3.8751266781823657e-01 2.1183049759110175e+00 -1.0168304296432029e+00 + -4.8135940685162848e-01 2.3408758203965698e+00 -1.0242576248830377e+00 + -5.6887226777940059e-01 2.5144955043449597e+00 -9.8866305830149181e-01 + -6.4719930581404850e-01 2.6408220772367068e+00 -9.1795802185957731e-01 + -7.1346349990460800e-01 2.7202749823772709e+00 -8.1666774643055295e-01 + -7.6236848747245889e-01 2.7494100492421669e+00 -6.9130484997417907e-01 + -7.8923427518283307e-01 2.7303838684714528e+00 -5.5234824671403182e-01 + -7.9158023835192914e-01 2.6718372525515832e+00 -4.0760128420800257e-01 + -7.6863797712075099e-01 2.5853506152812287e+00 -2.5873294773499600e-01 + -7.2385608094088572e-01 2.4868300009238906e+00 -9.4871479200772990e-02 + -6.6715837750443119e-01 2.3896964067134769e+00 1.2064974533757600e-01 + -6.0437187366847556e-01 2.2455634785267433e+00 4.0594807527561672e-01 + -5.2312160809128516e-01 1.9939585625570253e+00 6.2976386585107058e-01 + -4.2381426393284183e-01 1.7509305661827268e+00 6.1477408018380675e-01 + id 12790 + loc 4.8171633481979370e-01 2.1792010962963104e-01 373 + blend 0.0000000000000000e+00 + interp 3.8406721764466312e-01:2.6163005526210559e-01:4.5111282074609305e-01:3.5700866252064994e-01:1.0242619312981818e+00:2.5643906511179598e-01:1.7641481447982768e+00:3.1278217070176412e-01:2.5661618565989945e+00:3.7620170381226253e-01:3.0035640153311887e+00:2.8603268861902753e-01:3.4714763763814278e+00:3.8406337697248671e-01:3.9989007044061955e+00 + CVs 20 + -7.1012419924089076e-02 4.7088558090111243e-01 3.0252443610771662e-01 + -1.6247223789338744e-01 9.0665062125479157e-01 5.8375667698928413e-01 + -2.7718747468379717e-01 1.2714537559822165e+00 8.1531126615906557e-01 + -3.8966691168852208e-01 1.5714288566980990e+00 9.5604954054945401e-01 + -4.5260132565446282e-01 1.8076128079297713e+00 1.0163438623037837e+00 + -4.4626900821278465e-01 1.9821936604704469e+00 1.0597767763959902e+00 + -3.8256104854165496e-01 2.1314157815921013e+00 1.1620883447068500e+00 + -3.0128309205416237e-01 2.3081866419116883e+00 1.3520727858098471e+00 + -2.4263807850017247e-01 2.5487074118561717e+00 1.6033265307524871e+00 + -2.3389649224995218e-01 2.8556874720438095e+00 1.8777900416414739e+00 + -2.9273182555071298e-01 3.2008914959923396e+00 2.1532224378057991e+00 + -4.3587679150072295e-01 3.5330967412477290e+00 2.4203055243707747e+00 + -6.7697486645929317e-01 3.7852703631384532e+00 2.6620637637265010e+00 + -9.9355974026469940e-01 3.8868650945949441e+00 2.8532246607849068e+00 + -1.3056094844603829e+00 3.8105336467085285e+00 2.9791596801768989e+00 + -1.5445830269188048e+00 3.6013425573685574e+00 3.0591481833325300e+00 + -1.6882538706324755e+00 3.3069051044543736e+00 3.1263867198875070e+00 + -1.7198518162846046e+00 2.9425170702270718e+00 3.2170417379463787e+00 + -1.5902656942120643e+00 2.5185322286789766e+00 3.3624955939487791e+00 + id 12791 + loc 6.2826938927173615e-02 7.5766313076019287e-01 395 + blend 0.0000000000000000e+00 + interp 4.9582762598438401e-01:3.4043036719824121e-01:2.6288268070747589e-01:4.7416031655987978e-01:8.4820732780280339e-01:4.9582266770812417e-01:1.2137875917516718e+00:4.0485553208425201e-01:1.9768483013519003e+00:3.6598963666147111e-01:2.7102825288969217e+00:4.5889815432570441e-01:3.0110373765948801e+00:3.3600155897057804e-01:3.6602465795760355e+00 + CVs 20 + 4.6728810199513815e-01 1.6045975452305683e-01 -2.3407473904812631e-01 + 8.7962617765209083e-01 2.5619073406055987e-01 -4.3655700292602206e-01 + 1.2933542407476910e+00 3.2956246121717420e-01 -6.1539408322614619e-01 + 1.7272798920531944e+00 3.9177718414566387e-01 -7.7116459021164119e-01 + 2.1733256346352441e+00 4.3539801395401390e-01 -9.0295942229205028e-01 + 2.6228787754796024e+00 4.5571153189772773e-01 -1.0151398246963856e+00 + 3.0668862081374022e+00 4.4855577268012059e-01 -1.1124194257268067e+00 + 3.4966966811524127e+00 4.0807702365358622e-01 -1.1967392091206137e+00 + 3.9064201036670880e+00 3.2717039133857906e-01 -1.2748545921714061e+00 + 4.2906703769750001e+00 1.9889559909147048e-01 -1.3597507807705942e+00 + 4.6388579468373141e+00 2.0365220958278751e-02 -1.4594772120682926e+00 + 4.9414347005746055e+00 -2.0223243453094275e-01 -1.5709005256442135e+00 + 5.1974640529322791e+00 -4.5945656317614159e-01 -1.6892828134487332e+00 + 5.4064679525347987e+00 -7.4380803131499196e-01 -1.8136978232128467e+00 + 5.5644032685630780e+00 -1.0439988444670174e+00 -1.9430805253807071e+00 + 5.6670703998348610e+00 -1.3408897951839789e+00 -2.0705539594963502e+00 + 5.7176112967275703e+00 -1.6161320225803255e+00 -2.1881769527533650e+00 + 5.7291119454778041e+00 -1.8630452917286160e+00 -2.2974233775180073e+00 + 5.7263606222088050e+00 -2.0951642218163586e+00 -2.4124929146086980e+00 + id 12792 + loc 1.1938803072553128e-04 8.5607838630676270e-01 417 + blend 0.0000000000000000e+00 + interp 3.7397325611228421e-01:1.4562654309255446e-01:1.9760905216924363e-01:3.7396951637972309e-01:9.2531477584837707e-01:1.8235509976913575e-01:1.9764071529786142e+00:2.8228571384251283e-01:2.9150881537227256e+00:3.6659080929075971e-01:3.3455872383513072e+00 + CVs 20 + -8.0741218566961412e-02 1.8734724577260251e-01 -1.4260839555827032e-01 + -1.1786822048693658e-01 3.4399572948557011e-01 -2.5638798035864879e-01 + -1.5260098086352519e-01 4.7345078353098313e-01 -3.7613743112798054e-01 + -1.9955623510873369e-01 5.8427242328135487e-01 -5.1709168889887125e-01 + -2.5608266757366765e-01 6.6999891234932263e-01 -6.7809134278897032e-01 + -3.1856074892552844e-01 7.2628828286156322e-01 -8.5584139535087966e-01 + -3.8363447172408138e-01 7.5264889914166866e-01 -1.0453645121067456e+00 + -4.4945851131244152e-01 7.5228218747925524e-01 -1.2409509477236400e+00 + -5.1591922019502701e-01 7.2711861322208216e-01 -1.4368159306769199e+00 + -5.8905668177672976e-01 6.7299271084591250e-01 -1.6261021300660257e+00 + -6.8016844218505002e-01 5.8650523362363116e-01 -1.8010085573841501e+00 + -7.9477807655246657e-01 4.7478053715342261e-01 -1.9560777785907757e+00 + -9.2846348275950508e-01 3.4973089540351965e-01 -2.0898448518977797e+00 + -1.0736093038592061e+00 2.1739709090052495e-01 -2.2009638211290041e+00 + -1.2257704717848219e+00 7.7940770104235835e-02 -2.2853088647697293e+00 + -1.3822712316047743e+00 -6.9006379153840447e-02 -2.3383883372206329e+00 + -1.5355847627939143e+00 -2.2245543881953167e-01 -2.3602289206702913e+00 + -1.6750730925217692e+00 -3.8021704421518310e-01 -2.3575313208757098e+00 + -1.8449644045508151e+00 -4.9639399562719233e-01 -2.3700653291270180e+00 + id 12793 + loc 2.6394288986921310e-02 5.0248521566390991e-01 377 + blend 0.0000000000000000e+00 + interp 4.5473598547745536e-01:3.1354278405917091e-01:1.2964320474948554e-02:4.5473143811760058e-01:9.1843116177661710e-01:1.4520216425994756e-01:1.4011064091258416e+00:3.9809633817350037e-01:2.4698953051609012e+00:3.3855828027415635e-01:3.0040833651401870e+00:4.4423767200648129e-01:3.6462575689774650e+00 + CVs 20 + -7.7055869353288031e-01 3.9747317620576350e-01 -6.0738294003733495e-01 + -1.4269847869948371e+00 5.9451071895245022e-01 -1.0318105857208180e+00 + -2.0513487096305090e+00 6.6140141835934041e-01 -1.3452999450284737e+00 + -2.6570320688643640e+00 6.4743819936784219e-01 -1.5993233147274546e+00 + -3.2137248551578215e+00 5.7286646716104239e-01 -1.8094034262026821e+00 + -3.7108674079991806e+00 4.5388131935623455e-01 -1.9784042400899269e+00 + -4.1566680530437585e+00 3.1292000161132716e-01 -2.1055904827672380e+00 + -4.5683706679491625e+00 1.7854512358128405e-01 -2.1975987207557499e+00 + -4.9589605510985937e+00 7.9687029371235507e-02 -2.2707187887166485e+00 + -5.3416157997673146e+00 3.5245096755317729e-02 -2.3567317322957857e+00 + -5.7282302156273897e+00 4.4926457390952468e-02 -2.4947979517940362e+00 + -6.1362383711086839e+00 7.6580989341893169e-02 -2.7197316956049007e+00 + -6.5750457458321856e+00 4.9699510626790122e-02 -3.0422860655348982e+00 + -7.0099502712108679e+00 -1.3342957875671102e-01 -3.4085941683649486e+00 + -7.3890553076980572e+00 -4.9136282735764603e-01 -3.7262057081196005e+00 + -7.6875287061937945e+00 -9.5650008221596838e-01 -3.9727176969512028e+00 + -7.9216245545875310e+00 -1.4495498727264904e+00 -4.1912313484908275e+00 + -8.1686258663963844e+00 -1.9309286033766337e+00 -4.3903658803570469e+00 + -8.5999657085106804e+00 -2.4372466704980140e+00 -4.5211100700159257e+00 + id 12794 + loc 7.3501193523406982e-01 5.7127445936203003e-01 411 + blend 0.0000000000000000e+00 + interp 3.7614138309154616e-01:3.0533825486516369e-01:3.5051328760176570e-01:3.7613762167771525e-01:9.9710771090499284e-01:3.2069133937053307e-01:1.6699970799941388e+00:3.0354283513373786e-01:2.2232076039808542e+00:2.7612925490236173e-01:2.9870962499067262e+00:3.1357302932050590e-01:3.8809700410007135e+00 + CVs 20 + 7.4432338522989516e-01 2.4366829625293471e-01 -1.4196549665502478e-01 + 1.2901707247670564e+00 3.6393359971097838e-01 -2.6217681572228113e-01 + 1.7841766084260025e+00 4.2030974170727076e-01 -3.7268233732786138e-01 + 2.3032896134432614e+00 4.3982160124651998e-01 -4.7760849565746588e-01 + 2.8360330646565020e+00 4.0890817744940755e-01 -5.7041691974037290e-01 + 3.3656485891521384e+00 3.1950745492201593e-01 -6.4676459442707324e-01 + 3.8722523115399823e+00 1.7107296228453528e-01 -7.0455190828669345e-01 + 4.3347353012179166e+00 -3.0489755296621235e-02 -7.4078810510435855e-01 + 4.7336233493946880e+00 -2.7319025883632220e-01 -7.5085224810353568e-01 + 5.0552045787403594e+00 -5.3763084577410325e-01 -7.3112713065026569e-01 + 5.2970882727812283e+00 -7.9975562473904516e-01 -6.8215659719679311e-01 + 5.4723659891283933e+00 -1.0418685974458151e+00 -6.1014478355033397e-01 + 5.6028653156768620e+00 -1.2586186591972750e+00 -5.2415652348625708e-01 + 5.7092295610146966e+00 -1.4509957093846328e+00 -4.3317963703413126e-01 + 5.8073532921787940e+00 -1.6207176159341969e+00 -3.4631362273942767e-01 + 5.9070438449964096e+00 -1.7639256236624550e+00 -2.7591229440288700e-01 + 6.0137764036275723e+00 -1.8740037082642340e+00 -2.3510909332609831e-01 + 6.1259207986586048e+00 -1.9619275511661762e+00 -2.2452804474766774e-01 + 6.1051586293683284e+00 -2.1731223333775995e+00 -2.3150633727567693e-01 + id 12795 + loc 8.2618474960327148e-01 8.5676985979080200e-01 1078 + blend 0.0000000000000000e+00 + interp 5.1334719892473757e-01:2.6655209082254394e-01:4.6689750723338364e-02:4.4769673950909961e-01:5.7030209439462998e-01:4.9855157024308511e-01:9.9905621839304148e-01:3.6218228903909933e-01:1.3805229774841175e+00:4.6807881135836527e-01:2.0092484276699185e+00:3.8960634909862218e-01:2.7460171999920235e+00:5.1334206545274830e-01:3.0396130166414523e+00:3.5885917925943228e-01:3.6522163675295731e+00 + CVs 20 + 9.1186932143536445e-02 2.5333437244036333e-01 -6.2584660566135125e-02 + 1.9236437227653064e-01 5.0693625678529064e-01 -1.1872563089032842e-01 + 3.0277139292871047e-01 7.6019615464416601e-01 -1.8071634382575757e-01 + 4.2230179417041014e-01 1.0132988376611136e+00 -2.6086719787018814e-01 + 5.5432656825902105e-01 1.2676258581416877e+00 -3.6882991277241001e-01 + 6.9927983505740710e-01 1.5215054119818339e+00 -5.1667946935629006e-01 + 8.5243862699983131e-01 1.7686059657401902e+00 -7.1899874566202737e-01 + 1.0019876250055515e+00 1.9961482529670900e+00 -9.9051471249027934e-01 + 1.1263055264881314e+00 2.1826848381454376e+00 -1.3405282405197649e+00 + 1.1963090802639818e+00 2.2995059237210249e+00 -1.7631474290296356e+00 + 1.1870556227982614e+00 2.3223739342708760e+00 -2.2329111557207346e+00 + 1.0898214392890435e+00 2.2400337607924565e+00 -2.7126989832392030e+00 + 9.2485087802750399e-01 2.0554398592632217e+00 -3.1730522503530065e+00 + 7.3248438981722608e-01 1.7803299415875899e+00 -3.6061950493224559e+00 + 5.4442730732830913e-01 1.4279073039411814e+00 -4.0111410762440753e+00 + 3.8175015453185029e-01 1.0214027952344815e+00 -4.3866029352310649e+00 + 2.8307738855618381e-01 6.2742806988783317e-01 -4.7553973337458721e+00 + 2.9808883740199232e-01 3.4726857188051152e-01 -5.1639205529308150e+00 + 2.4367972211180633e-01 2.7549951513279325e-03 -5.5510052742276610e+00 + id 12796 + loc 4.8408520221710205e-01 1.9476762413978577e-01 406 + blend 0.0000000000000000e+00 + interp 4.4412892072777915e-01:4.4412447943857192e-01:1.4954080965385708e-01:3.1086799617457828e-01:9.9881073887129779e-01:2.9767188820333296e-01:1.9972959978224072e+00:3.9611199742762393e-01:2.9011854803088637e+00:3.0222187556556479e-01:3.7186760813107247e+00 + CVs 20 + 6.4885495761423856e-02 1.6263931806161261e-01 -1.3602994296290147e-01 + 1.2933763756921518e-01 2.8577752545154933e-01 -2.3599184996739736e-01 + 1.8132021824432973e-01 3.8861734574918050e-01 -3.3812944950071666e-01 + 2.1803366682104589e-01 4.8364265392052708e-01 -4.5900285114768086e-01 + 2.3831663814209492e-01 5.6754882175378829e-01 -5.9758214045198088e-01 + 2.4187950799177213e-01 6.3768650869521348e-01 -7.5140866033967735e-01 + 2.3062073859131568e-01 6.9299880101830202e-01 -9.1745638114582673e-01 + 2.0878357718934293e-01 7.3385610884030239e-01 -1.0929944267323985e+00 + 1.7830369573853527e-01 7.5917615996985977e-01 -1.2728960604331139e+00 + 1.3373013867287364e-01 7.6581351519327778e-01 -1.4451805831274338e+00 + 6.9479915360814160e-02 7.5406964955624556e-01 -1.5957488551634718e+00 + -8.0454100687428198e-03 7.2993482527756670e-01 -1.7215704659762281e+00 + -8.7231512834955283e-02 6.9879896248965157e-01 -1.8285669548687078e+00 + -1.6346375050062595e-01 6.6378696829616024e-01 -1.9134731688703439e+00 + -2.3589796136268837e-01 6.2979041016804671e-01 -1.9630717764708527e+00 + -2.9968955887311099e-01 6.0225447244173758e-01 -1.9715875996510759e+00 + -3.4850193691733333e-01 5.8352441236048569e-01 -1.9485781629658694e+00 + -3.8162662051238594e-01 5.7347005217204483e-01 -1.9081966658925960e+00 + -4.1745643043730940e-01 5.4327925038313640e-01 -1.8981555336412725e+00 + id 12797 + loc 2.5999698042869568e-01 3.4764097654260695e-04 409 + blend 0.0000000000000000e+00 + interp 4.7097974453722746e-01:3.7061077128383840e-01:5.4640761848031039e-01:9.9835077393879090e-02:1.0152373613645056e+00:3.1315513004808171e-01:1.9791338402203773e+00:3.0310800221625489e-01:2.0353928080946351e+00:4.2937032228881339e-01:2.7568284995376544e+00:4.7097503473978214e-01:3.0438597816307214e+00:3.8345543548936223e-01:3.7939931441171719e+00 + CVs 20 + -1.4469093500021124e-01 1.7700382519012398e-01 -2.5548596046499772e-01 + -2.8432510057042043e-01 3.3674359440437629e-01 -5.1026655888670380e-01 + -4.0347307142726224e-01 4.8496387560253956e-01 -7.8272312647275555e-01 + -4.9679355514382939e-01 6.2034500092382439e-01 -1.0752326587975511e+00 + -5.7097527584699392e-01 7.3807495338227858e-01 -1.3813819402769232e+00 + -6.3007522245146319e-01 8.3704658297478785e-01 -1.6968446600870786e+00 + -6.7304399669702186e-01 9.1822069973018439e-01 -2.0194617974833826e+00 + -6.9706432264303864e-01 9.7814982223713109e-01 -2.3479148616151133e+00 + -7.0076655893862183e-01 1.0063193487983990e+00 -2.6795601076845514e+00 + -6.8522856803208843e-01 9.9079001355795526e-01 -3.0078523599584166e+00 + -6.5353767871649171e-01 9.2568242763756081e-01 -3.3211255714717423e+00 + -6.1086195289390699e-01 8.1276017238239429e-01 -3.6048467468258059e+00 + -5.6558576326605670e-01 6.5961185056360216e-01 -3.8447783710954968e+00 + -5.2874351683052545e-01 4.8032193113410848e-01 -4.0275928307157622e+00 + -5.0978995522850301e-01 2.9671551512068417e-01 -4.1479292582096319e+00 + -5.1392128333523401e-01 1.3740421318462070e-01 -4.2113581649367289e+00 + -5.3993774845734555e-01 2.7460378204346991e-02 -4.2369782354130141e+00 + -5.6941597945651001e-01 -4.4927616681070592e-02 -4.2526812927024489e+00 + -4.7142964065149545e-01 -3.4765684334609159e-01 -4.2354429979392760e+00 + id 12798 + loc 9.3538796901702881e-01 6.9045621156692505e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5738344622159310e-01:4.0768758932891624e-01:1.1655655034708101e-01:3.5052172578223367e-01:9.8246283041632165e-01:3.9802182075053161e-01:1.6840741959015186e+00:3.1078207481671094e-01:2.0775145509150237e+00:4.5737887238713093e-01:2.6473333291342080e+00:3.0161101706488913e-01:3.1561913650814084e+00 + CVs 20 + -1.3731935831259848e-01 9.9174075973964035e-02 1.8753745491238216e-01 + -2.5107650330436504e-01 1.8157218891503174e-01 3.3142438303597183e-01 + -3.3249277219234180e-01 2.1575474484855917e-01 4.2091312282988802e-01 + -4.0363638437542326e-01 2.4182538216156765e-01 5.0661055341712213e-01 + -4.5735477715190753e-01 2.5977993251709997e-01 5.9308811454228927e-01 + -4.8315052931465857e-01 2.6969221944599076e-01 6.8673746963954074e-01 + -4.7174479673969411e-01 2.7603060187602702e-01 7.9219584708369262e-01 + -4.1827084737695841e-01 2.8709853492957754e-01 9.0606760501294892e-01 + -3.2592962728361485e-01 3.1523863796054230e-01 1.0213933715559209e+00 + -2.0778720541737347e-01 3.7665499662833163e-01 1.1356950555799723e+00 + -8.3076980386060095e-02 4.8672548549486455e-01 1.2501329194887516e+00 + 2.0900871356803338e-02 6.5115666784378567e-01 1.3622156201773561e+00 + 7.7776783346003991e-02 8.5637540280868008e-01 1.4604935245193709e+00 + 7.7827066175915893e-02 1.0724528255533363e+00 1.5277828727803564e+00 + 3.2187606468411067e-02 1.2658196784616520e+00 1.5482865796009682e+00 + -3.7803399244144546e-02 1.4187026373460094e+00 1.5152205624515942e+00 + -1.2172665137230834e-01 1.5392498245910051e+00 1.4353550249063711e+00 + -2.2902704918814687e-01 1.6315611525268368e+00 1.3279021819419066e+00 + -3.1954437675030212e-01 1.6171112677132937e+00 1.1888902122706397e+00 + id 12799 + loc 9.8052191734313965e-01 9.4571018218994141e-01 1082 + blend 0.0000000000000000e+00 + interp 2.8555965642154180e-01:2.6000541130097610e-01:7.2937941353606439e-01:2.5959022558700684e-01:1.4003975538045885e+00:2.5379397116529251e-01:2.0545930415522120e+00:2.3963798363828082e-01:2.9972515590286655e+00:2.8555680082497759e-01:3.9526398142644101e+00 + CVs 20 + -5.6477334636226215e-02 4.0277989247485041e-01 2.9593801094776140e-01 + -1.0250425173915102e-01 6.8730566874677868e-01 3.7737188009084999e-01 + -1.7940949489010069e-01 9.3215016760520608e-01 4.1782583482023117e-01 + -3.0204971568636030e-01 1.1582775408487678e+00 4.6417814476064001e-01 + -4.7028904421605849e-01 1.3562288485893110e+00 5.0870857608375752e-01 + -6.7929364679974014e-01 1.5174336653346894e+00 5.4488346953400546e-01 + -9.1974148649182796e-01 1.6363254391121462e+00 5.6814319851455319e-01 + -1.1809900710441135e+00 1.7113635947638912e+00 5.7661557982079781e-01 + -1.4538406835217461e+00 1.7435882123330910e+00 5.7022521881429444e-01 + -1.7313767906923720e+00 1.7346888020413636e+00 5.4962361517105185e-01 + -2.0084914035837067e+00 1.6858697810323224e+00 5.1567690158378976e-01 + -2.2795516166362426e+00 1.5983757344578506e+00 4.6903235645430685e-01 + -2.5366606485929846e+00 1.4756863853824727e+00 4.1046818743666902e-01 + -2.7724187439771080e+00 1.3240441433056085e+00 3.4176384498980678e-01 + -2.9872890029643751e+00 1.1482580698563445e+00 2.6676276470187010e-01 + -3.1926050855432062e+00 9.5031885794829185e-01 1.9268846128672851e-01 + -3.4021217778293771e+00 7.3568135232729936e-01 1.2942705827884607e-01 + -3.6200931156726490e+00 5.1597332321092015e-01 8.5438219171077162e-02 + -3.7604857276528856e+00 3.5610172316244032e-01 5.8626576685259849e-02 + id 12800 + loc 5.6398671865463257e-01 5.2470877766609192e-02 413 + blend 0.0000000000000000e+00 + interp 3.7284291899309552e-01:2.6768671668671568e-01:1.7324689387338532e-01:3.4565686460330802e-01:1.0252031061888351e+00:2.7298157706351139e-01:1.8748347088941104e+00:3.7283919056390563e-01:2.2847196305396942e+00:3.1701395765048906e-01:3.2241254303999547e+00 + CVs 20 + -1.1224787254953821e+00 2.8106115052791036e-01 8.0614970682721609e-02 + -1.8739758927300456e+00 3.4789908507648010e-01 1.1513634886058710e-01 + -2.5004810763993501e+00 3.2395604092560537e-01 1.0822115338517505e-01 + -3.1069067236754977e+00 2.5239708706420089e-01 6.3678019149129850e-02 + -3.6858061483676345e+00 1.4232521661482489e-01 -1.8240269208845777e-02 + -4.2348086593837699e+00 -3.2796745528234084e-03 -1.2862067004890521e-01 + -4.7501262577410017e+00 -1.9173237566411083e-01 -2.5178866128825561e-01 + -5.2257776915579903e+00 -4.2330328740323431e-01 -3.7229391376159010e-01 + -5.6577969205003438e+00 -6.9507719402322055e-01 -4.8002119639061835e-01 + -6.0434195525731500e+00 -1.0022855249270788e+00 -5.6919230956640388e-01 + -6.3741251821738434e+00 -1.3335290715272237e+00 -6.3382728047321946e-01 + -6.6436934587957452e+00 -1.6736682657480495e+00 -6.6958891744585158e-01 + -6.8655010296383896e+00 -2.0245424579587548e+00 -6.8104412023672956e-01 + -7.0555435488280445e+00 -2.4002425319493099e+00 -6.8132553346914815e-01 + -7.2182138648607568e+00 -2.8112122367162291e+00 -6.8312608448150769e-01 + -7.3453008231618862e+00 -3.2537418528699105e+00 -6.9280152607951484e-01 + -7.4233574641366706e+00 -3.7193963885169414e+00 -7.1640437304703175e-01 + -7.4399567630404881e+00 -4.2136256070699964e+00 -7.6054020764639996e-01 + -7.4091525606562412e+00 -4.8032815978163743e+00 -8.2555253371094950e-01 + id 12801 + loc 5.7595348358154297e-01 4.1431838274002075e-01 1081 + blend 0.0000000000000000e+00 + interp 4.0192834737040878e-01:4.0192432808693507e-01:3.8562057213878476e-01:3.3423102724788317e-01:1.0736488124261525e+00:3.3908604047023860e-01:1.7896541909686410e+00:3.2921961776060721e-01:3.6998009358732213e+00 + CVs 20 + -4.3511982057789500e-04 5.5539935959183107e-01 -5.1545272364660899e-01 + -5.5219243665339923e-02 1.0018851186715603e+00 -8.1228361788936476e-01 + -1.3447825516115025e-01 1.4177930110083681e+00 -1.0269977285654468e+00 + -2.2712081524743893e-01 1.8315887542096281e+00 -1.2103833429920359e+00 + -3.3497561415038185e-01 2.2242605976170795e+00 -1.3461436594920191e+00 + -4.5247788467479366e-01 2.5680315471635122e+00 -1.4112174045455086e+00 + -5.6487854397947523e-01 2.8232984118816091e+00 -1.3802130767875653e+00 + -6.4189657273868828e-01 2.9229727183702123e+00 -1.2386350948738150e+00 + -5.9418894295843816e-01 2.6982347467586889e+00 -1.0377556382698763e+00 + -2.8178004388880390e-01 2.0968367978880460e+00 -1.2170127836956228e+00 + -3.1324415151448459e-02 1.8292028915355960e+00 -1.6923257338138786e+00 + 8.3913938267893506e-02 1.7302397898930399e+00 -1.9522985923034084e+00 + 1.6675093365330662e-01 1.6018689455894286e+00 -2.0866171089943601e+00 + 2.4204808026446106e-01 1.4250451308428720e+00 -2.1779853224049401e+00 + 3.0973386432093247e-01 1.2295560003020658e+00 -2.2844602261658071e+00 + 3.6389990773540848e-01 1.1114737823085741e+00 -2.4773017060585252e+00 + 4.0207657194465596e-01 1.2014955072002835e+00 -2.7559064134579119e+00 + 4.3418488465065447e-01 1.3809980050031567e+00 -2.9831614164985822e+00 + 4.8249651904738616e-01 1.0827459498697856e+00 -3.1880959237752551e+00 + id 12802 + loc 6.1612200736999512e-01 9.2272841930389404e-01 393 + blend 0.0000000000000000e+00 + interp 4.2198874940085179e-01:3.8284878014009904e-01:3.6091627975696594e-01:4.2198452951335780e-01:9.8174207929343993e-01:4.1102784714040180e-01:1.3245306115022284e+00:2.7732907965926407e-01:2.2738233689505103e+00:4.0899690438732877e-01:3.0440583349560200e+00:2.6830637852976319e-01:3.5838981069110769e+00 + CVs 20 + -1.8655033209372635e-01 3.1196957168133965e-01 -2.9290548930808108e-01 + -3.7224653847556366e-01 6.2848438248864691e-01 -5.6621541637614570e-01 + -5.4750654196001569e-01 9.5212237688081136e-01 -8.4922581528961449e-01 + -7.2348545972700951e-01 1.2829924874587737e+00 -1.1515514475710940e+00 + -9.1993366694267242e-01 1.6127523070093039e+00 -1.4669179097986187e+00 + -1.1516203768071460e+00 1.9267766607320764e+00 -1.7873002107655505e+00 + -1.4250428474723156e+00 2.2063382084745342e+00 -2.1032490731973068e+00 + -1.7352097244053621e+00 2.4279055179742874e+00 -2.4035518823312056e+00 + -2.0616066697275146e+00 2.5709825498421468e+00 -2.6784498156993761e+00 + -2.3788333507433723e+00 2.6370683830243076e+00 -2.9270989806555963e+00 + -2.6813342376019644e+00 2.6480620073635217e+00 -3.1602175050588128e+00 + -2.9848849616452111e+00 2.6221928083180774e+00 -3.3925621012153111e+00 + -3.3026015115675893e+00 2.5680226222921076e+00 -3.6334133186270781e+00 + -3.6378997547905252e+00 2.4869722533624632e+00 -3.8817585494956259e+00 + -3.9990308962207712e+00 2.3738114830002242e+00 -4.1469755676812641e+00 + -4.4080010750539369e+00 2.1991557566357445e+00 -4.4558759539212147e+00 + -4.8849120698931756e+00 1.9301665894892976e+00 -4.7977544537859762e+00 + -5.4222424216388543e+00 1.6039007124926004e+00 -5.0839917529383696e+00 + -5.8922704168748137e+00 1.4106103754172601e+00 -5.2261912940322279e+00 + id 12803 + loc 9.7943365573883057e-01 8.4659832715988159e-01 264 + blend 0.0000000000000000e+00 + interp 4.5750669107084929e-01:4.2725456895851271e-01:4.3190998863927521e-02:3.9577790298229992e-01:7.5947809582368242e-01:4.5437990218215940e-01:1.0868280313780125e+00:2.8525334618956205e-01:1.8308684184514399e+00:3.9159239355849895e-01:1.9991737055177647e+00:2.6856790742744352e-01:2.9690195191025088e+00:4.3794730073530996e-01:3.2556412940091510e+00:4.5750211600393859e-01:3.8876721881836165e+00 + CVs 20 + -8.2880774695451465e-01 4.6018292516498033e-01 -3.5803877702774661e-01 + -1.5385662851775608e+00 7.0179704320892333e-01 -5.4202205465997988e-01 + -2.2277529251146713e+00 7.4593099670567031e-01 -5.8353369772684427e-01 + -2.9262497576755293e+00 6.8210426273658487e-01 -5.4931497025648002e-01 + -3.6209535004885369e+00 5.8927877354765368e-01 -5.1370124906277304e-01 + -4.2958945910288477e+00 4.8170789420387061e-01 -5.4251049299030008e-01 + -4.9382981596049289e+00 3.3985421337088040e-01 -6.6871965241701914e-01 + -5.5400956778447483e+00 1.5798392839847231e-01 -8.9656746149497013e-01 + -6.0858121233100526e+00 -5.5715349045691198e-02 -1.2136178147117107e+00 + -6.5530766616079941e+00 -2.9262009165145653e-01 -1.5869415887934291e+00 + -6.9337441321347368e+00 -5.3644460348702472e-01 -1.9557285186467754e+00 + -7.2390749191367636e+00 -7.6065205777904277e-01 -2.2647641192504038e+00 + -7.4956476244268604e+00 -9.4565926786755705e-01 -2.5150699859869086e+00 + -7.7329875566070569e+00 -1.1064517550287616e+00 -2.7694683786382264e+00 + -7.9404606279963934e+00 -1.2855481241078279e+00 -3.0650072236269232e+00 + -8.1064362880594150e+00 -1.4996178567296381e+00 -3.3521936333529148e+00 + -8.2796696004725181e+00 -1.6825142227614056e+00 -3.5326297388075911e+00 + -8.4731166775752698e+00 -1.8143387942100966e+00 -3.6284797027114264e+00 + -8.6079126843781495e+00 -2.3425649766412295e+00 -3.7512008569050215e+00 + id 12804 + loc 5.1592439413070679e-01 9.6741503477096558e-01 403 + blend 0.0000000000000000e+00 + interp 4.6828449693632623e-01:4.6091229875558998e-01:1.8381273157652700e-04:4.1201949456607956e-01:7.8492853782121497e-01:4.4852232774286938e-01:1.0324980954103078e+00:4.6827981409135688e-01:1.4515112478968482e+00:2.8034929413045151e-01:2.0171047528395749e+00:2.9064195787541619e-01:2.8696968399968394e+00:3.8910835049201409e-01:3.1263921150750464e+00 + CVs 20 + -1.2747739154511162e-02 9.2859555354528861e-02 -5.7099856916790349e-02 + -4.5560083929675102e-02 1.9431852147092760e-01 -1.1025673219835699e-01 + -8.4915005585153497e-02 3.0447189079199360e-01 -1.5786635422505166e-01 + -1.3294203102684732e-01 4.2665855571753042e-01 -2.0224933184410249e-01 + -1.9525792156753377e-01 5.5778743784497542e-01 -2.4475951717969721e-01 + -2.7678665709867278e-01 6.9385041300816330e-01 -2.8470823948753066e-01 + -3.8104795135290115e-01 8.3105520181389592e-01 -3.1731525856237780e-01 + -5.0960633050686865e-01 9.6593572783141468e-01 -3.3318309327491386e-01 + -6.6198247264218435e-01 1.0942000036560153e+00 -3.1963891448613463e-01 + -8.3405941124181404e-01 1.2096586468207438e+00 -2.6177928678471418e-01 + -1.0135342862832886e+00 1.3050330404927020e+00 -1.4239262079238629e-01 + -1.1766764929322233e+00 1.3722280994352296e+00 5.3982678073039088e-02 + -1.2871614503488800e+00 1.4031358179649092e+00 3.3372846475903151e-01 + -1.3013494988614323e+00 1.3920730232159975e+00 6.8278604292007661e-01 + -1.1854291765598433e+00 1.3391928545909837e+00 1.0599591447055801e+00 + -9.3939383018950229e-01 1.2497495686856841e+00 1.4083672059902670e+00 + -6.0074901877927633e-01 1.1325663698707142e+00 1.6835232143208734e+00 + -2.1661300983989662e-01 9.9609593692115472e-01 1.8714154947247232e+00 + -8.9376849734801034e-02 9.4314993291215765e-01 2.0629581582459702e+00 + id 12805 + loc 1.7463584244251251e-01 6.4158505201339722e-01 411 + blend 0.0000000000000000e+00 + interp 5.1838135069085467e-01:3.2100666981298898e-01:1.1654430866178056e-01:3.2963877368693406e-01:1.0213668358754966e+00:3.1966229247186195e-01:1.9742754447178976e+00:5.1837616687734778e-01:2.3969027708859989e+00:4.4597381765075000e-01:2.9529544010485251e+00:3.3745348173914519e-01:3.3068118204201697e+00 + CVs 20 + 8.3185500472945517e-01 1.3044419832332163e-01 -2.1245063340880097e-02 + 1.4167302766634353e+00 1.3517269275444782e-01 -5.2440117942718953e-02 + 1.9447335595162358e+00 8.6560447476502544e-02 -5.8927622479457292e-02 + 2.4886835366138036e+00 1.0441833795464484e-02 -2.4317357160425143e-02 + 3.0364234896677118e+00 -9.4757641500030854e-02 5.1608846194118471e-02 + 3.5760694686120384e+00 -2.2844232015318133e-01 1.6393463358674276e-01 + 4.0945032245698645e+00 -3.8939259942586291e-01 3.0385145754555731e-01 + 4.5768074376361270e+00 -5.7869622317262848e-01 4.6103379993091242e-01 + 5.0088877923753810e+00 -8.0021310011235869e-01 6.2476568074094174e-01 + 5.3751936952762769e+00 -1.0574530245727123e+00 7.8295035015236480e-01 + 5.6577423638435045e+00 -1.3488672254511125e+00 9.2195688536111331e-01 + 5.8494783289751480e+00 -1.6653242769958871e+00 1.0315321720403385e+00 + 5.9590376214350904e+00 -1.9973094583095365e+00 1.1102048954317256e+00 + 5.9979757892604368e+00 -2.3352148248644289e+00 1.1587202087663078e+00 + 5.9733328243510266e+00 -2.6618897394933914e+00 1.1769761380855144e+00 + 5.8921194865357531e+00 -2.9529218278700018e+00 1.1668098284394275e+00 + 5.7681028850579725e+00 -3.1919675714385471e+00 1.1334570872381440e+00 + 5.6203829294588834e+00 -3.3935799087291754e+00 1.0825260507230894e+00 + 5.4702724927433435e+00 -3.7695587511439821e+00 1.0153006194450469e+00 + id 12806 + loc 6.1082065105438232e-01 1.8665294349193573e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0592530293079276e-01:2.6377604461330090e-01:4.5979284086908423e-01:4.0592124367776350e-01:1.1711078049296897e+00:3.7190339328653571e-01:2.0004093163478354e+00:3.5427973731620677e-01:2.4826226136692213e+00:3.0701074098703318e-01:3.0151330633207789e+00:3.7290971554594610e-01:3.9925857720033537e+00 + CVs 20 + -7.2241746345516611e-04 2.9580673579863370e-01 1.9913702059970373e-01 + -4.4234473737157110e-02 5.8929986562785552e-01 3.8963058442140303e-01 + -1.2619071895619433e-01 8.8193834974684382e-01 5.5794492062775070e-01 + -2.5516904165651644e-01 1.1685603826782254e+00 6.9274403676664220e-01 + -4.1449491086593715e-01 1.4460029486984183e+00 7.8280319964765321e-01 + -5.3693508136834245e-01 1.7283495692869812e+00 8.2753259098457410e-01 + -5.5615922219550784e-01 2.0195671619333644e+00 8.4037410091883746e-01 + -4.6820529198586869e-01 2.3139559914813583e+00 8.5085556869536583e-01 + -2.8330319094828837e-01 2.6083005295209838e+00 9.0137317819039420e-01 + 1.1971105360935042e-02 2.8484142328639788e+00 1.0437624405739068e+00 + 3.9927092373742457e-01 2.9028055079744388e+00 1.2955864808381947e+00 + 7.6995102383655922e-01 2.6906024078498203e+00 1.5569874858018413e+00 + 1.0336612067603190e+00 2.2973214427817981e+00 1.7251538448374997e+00 + 1.1745347823453427e+00 1.8224089668259962e+00 1.8088133751982860e+00 + 1.1967104703698013e+00 1.3153782328926127e+00 1.8480258201152506e+00 + 1.0816502007705056e+00 8.0942521980976212e-01 1.8115485102575595e+00 + 8.1174124384415625e-01 3.9378526286546700e-01 1.6135241738381612e+00 + 4.5664351512922802e-01 1.7352097356982743e-01 1.2823189069326890e+00 + 2.9278830392430677e-01 -1.3477454879219419e-01 1.1991565752699278e+00 + id 12807 + loc 5.9574490785598755e-01 5.2470877766609192e-02 406 + blend 0.0000000000000000e+00 + interp 3.9321710301652657e-01:2.9871292757724427e-01:1.9504366907092952e-01:3.3066449845130730e-01:1.0108682378459644e+00:3.9237597726382012e-01:1.3959685882477408e+00:3.3171496988174820e-01:2.0015939544283832e+00:3.9321317084549640e-01:2.8856304904782539e+00:3.0330070913203944e-01:3.2076506806390119e+00 + CVs 20 + -8.6172360237687651e-03 2.0954357606573268e-01 -1.5043528619851718e-01 + 2.8953185186993968e-03 3.8918901977355830e-01 -3.0706284312308652e-01 + -2.6296463024950090e-02 5.8318393541981073e-01 -4.5802615599007046e-01 + -1.0867385145318467e-01 7.8403305122093081e-01 -5.9620852792633272e-01 + -2.4968712023969647e-01 9.7954338071997427e-01 -7.1599950321942596e-01 + -4.4724623526068552e-01 1.1550747308569358e+00 -8.1217613410534328e-01 + -6.8975736187170289e-01 1.2967203103451426e+00 -8.8324280228554075e-01 + -9.5873837668828688e-01 1.3961611742391407e+00 -9.3392762352198522e-01 + -1.2434312449012155e+00 1.4516308838297098e+00 -9.6771785983389647e-01 + -1.5497744331567176e+00 1.4608363945011806e+00 -9.7109235894930301e-01 + -1.8774713996492496e+00 1.4180392207885977e+00 -9.2080599690986908e-01 + -2.2002604443388822e+00 1.3255751166931593e+00 -8.1635585319027804e-01 + -2.4921458572433290e+00 1.1985623491821498e+00 -6.8381636672180179e-01 + -2.7485822010538348e+00 1.0505958863290783e+00 -5.3945594904290317e-01 + -2.9710859475533007e+00 8.8697511329748480e-01 -3.7317238770134931e-01 + -3.1537625378637291e+00 7.1048923736871017e-01 -1.7403107423886510e-01 + -3.2904153335139261e+00 5.2404084147743868e-01 4.2674293738351965e-02 + -3.3848750543465340e+00 3.3102768475873567e-01 2.4720410151405109e-01 + -3.4949719834057729e+00 2.1472487374087401e-01 3.8001880053336379e-01 + id 12808 + loc 8.9357978105545044e-01 7.7974194288253784e-01 373 + blend 0.0000000000000000e+00 + interp 5.7439473781958372e-01:3.1524739899193566e-01:8.5074545191177164e-01:4.6550176644533958e-01:1.0748736555729532e+00:4.6280624040603080e-01:2.0005517169681930e+00:5.7438899387220554e-01:2.7104231508761689e+00:4.5072709815698547e-01:3.3359958636574047e+00:2.9227252261892306e-01:3.9569262467495463e+00 + CVs 20 + -1.9901030864620295e-01 3.4846785089369053e-01 -2.4975696423257188e-01 + -3.9443141324370795e-01 6.7059467671442574e-01 -4.8704496287002563e-01 + -5.7669715157234580e-01 9.6501496464560010e-01 -7.1534495033140955e-01 + -7.3287980971038169e-01 1.2339408205828120e+00 -9.3305074168564572e-01 + -8.5474432235497244e-01 1.4751226399362380e+00 -1.1366585608076223e+00 + -9.4518414562665232e-01 1.6837403295408513e+00 -1.3241360073774047e+00 + -1.0166175471205330e+00 1.8625073191021075e+00 -1.5025465049455624e+00 + -1.0808158206117033e+00 2.0179547921566110e+00 -1.6906500885159934e+00 + -1.1411290758363739e+00 2.1508385374770631e+00 -1.9079026336963973e+00 + -1.1922311331321427e+00 2.2555139938777211e+00 -2.1672817758110137e+00 + -1.2207859800744647e+00 2.3284784172560120e+00 -2.4707313840933085e+00 + -1.2075229050599203e+00 2.3705192768766570e+00 -2.8079378715123342e+00 + -1.1327597184791180e+00 2.3557795531389978e+00 -3.1644480757294788e+00 + -9.9483773760192795e-01 2.2201075733678950e+00 -3.5194853409711682e+00 + -8.4420396942971287e-01 1.9315994219728196e+00 -3.8593141423316339e+00 + -7.8360637987612514e-01 1.5344168960793998e+00 -4.1998034284960335e+00 + -9.1137896423325238e-01 1.1271479082995968e+00 -4.5503848693440130e+00 + -1.2522472189140224e+00 8.4355390463361068e-01 -4.8690004914287686e+00 + -1.6448232660994440e+00 7.2326563727498971e-01 -5.0817105014867270e+00 + id 12809 + loc 9.7925163805484772e-02 5.4049566388130188e-02 409 + blend 0.0000000000000000e+00 + interp 4.0794665268478797e-01:3.0314481921506414e-01:1.5830023045165553e-01:3.4889554728908251e-01:4.0894016534433830e-01:3.3050742073911055e-01:1.0016619501357216e+00:3.7466461935594469e-01:1.5929370375098302e+00:2.9943448277831963e-01:1.9655043564001442e+00:2.7948865766102443e-01:2.9699683553711633e+00:4.0794257321826116e-01:3.7648848424809804e+00 + CVs 20 + -2.2082642862560700e-01 2.4040401478756873e-01 -3.9147719068369574e-01 + -4.0181719461171761e-01 4.8127457147703101e-01 -7.7672619347017191e-01 + -5.8026001968701746e-01 7.3726824125119539e-01 -1.1812026189616911e+00 + -8.0208793246655796e-01 1.0015258801965916e+00 -1.6091113398772876e+00 + -1.1104091322012448e+00 1.2426769425882009e+00 -2.0399909882501790e+00 + -1.5192439012239072e+00 1.4175455516327342e+00 -2.4438613645832965e+00 + -1.9999827193940234e+00 1.4870679029188403e+00 -2.7993639385541620e+00 + -2.4977737051214097e+00 1.4311792215608035e+00 -3.1063989866176254e+00 + -2.9647239762838411e+00 1.2475241645510247e+00 -3.3769861149291982e+00 + -3.3631342003907356e+00 9.4036945918392867e-01 -3.6134912007095723e+00 + -3.6730497769051804e+00 5.4149054925549511e-01 -3.8061234838945315e+00 + -3.9369174167018808e+00 1.1137277323203287e-01 -3.9528155957497590e+00 + -4.2159045681055654e+00 -3.0006361936032189e-01 -4.0605535183207433e+00 + -4.5237414507920564e+00 -6.5750718970460231e-01 -4.1350452254485273e+00 + -4.8408743078359810e+00 -9.5520280977898220e-01 -4.1855484615303791e+00 + -5.1583993507677581e+00 -1.2257852542873422e+00 -4.2263297911600226e+00 + -5.4920583331465931e+00 -1.4991246473354172e+00 -4.2751182427632752e+00 + -5.8487972196294242e+00 -1.7783375672582689e+00 -4.3607832957291990e+00 + -6.2024748060249246e+00 -2.0478994113680411e+00 -4.5204182861567874e+00 + id 12810 + loc 9.8221063613891602e-01 4.5382848381996155e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0880422012316214e-01:3.7594181558711298e-01:5.6830515428333350e-01:2.2302176444050453e-01:1.1233569331721260e+00:3.4781713000081721e-01:2.0020003778684718e+00:4.0880013208096094e-01:2.4816160391872097e+00:3.7305121238643030e-01:2.9977239536739475e+00:2.8154906842894090e-01:3.7019806267609323e+00 + CVs 20 + -1.7954456735182980e-01 3.0298161202034912e-01 1.7039744751473157e-01 + -3.8914818954483366e-01 6.1501481366414879e-01 3.1402614373844395e-01 + -6.2995742726754256e-01 9.0869575868920149e-01 4.7684614087869559e-01 + -8.9951229889699413e-01 1.1639582586964872e+00 6.8101607373395323e-01 + -1.1933730235624798e+00 1.3668620222482386e+00 9.3315750957688937e-01 + -1.5037677409677574e+00 1.5024600428308279e+00 1.2342205775398756e+00 + -1.8201873340521697e+00 1.5574111786478793e+00 1.5834202312374515e+00 + -2.1264865064492362e+00 1.5192035968837854e+00 1.9804105318276670e+00 + -2.3976941488237835e+00 1.3761075113159189e+00 2.4161221958274286e+00 + -2.6077267055543745e+00 1.1231435190055725e+00 2.8658510945597686e+00 + -2.7419966752495668e+00 7.6762950765481275e-01 3.2907026974406879e+00 + -2.8011872863282798e+00 3.3647323535014673e-01 3.6452606024667817e+00 + -2.7968604405832371e+00 -1.3299687760212886e-01 3.9159257971147983e+00 + -2.7325473593661966e+00 -6.2575308310858135e-01 4.1587739985640431e+00 + -2.5996532897874256e+00 -1.0993834962546365e+00 4.4943401649079373e+00 + -2.4325248395752967e+00 -1.4057707778836241e+00 5.0105883813091197e+00 + -2.2944373632394526e+00 -1.3586552099756131e+00 5.6962503491186656e+00 + -2.3236445561765722e+00 -7.5302296345120512e-01 6.2716722578849726e+00 + -2.3641109521493648e+00 -5.7861094147166492e-01 6.4486445620628512e+00 + id 12811 + loc 9.3520230054855347e-01 6.0660064220428467e-01 377 + blend 0.0000000000000000e+00 + interp 4.1147920290426793e-01:3.7848035965085458e-01:3.9436731223865029e-01:4.1080057557161170e-01:9.3659839348142482e-01:4.1147508811223893e-01:1.3947337715172923e+00:3.6063757684029418e-01:2.0029803878777104e+00:2.9175877765739672e-01:2.8787998757333302e+00:2.4215417083206170e-01:3.3608144437137937e+00:3.7068458926498682e-01:3.9997287917507611e+00 + CVs 20 + -6.5746140907980144e-01 1.9575445743040037e-01 -8.3105752582147874e-01 + -1.1257004409165172e+00 2.5154809032684150e-01 -1.3881855526525217e+00 + -1.5431450297265736e+00 2.6109429218976493e-01 -1.8405723374046354e+00 + -1.9751000976469202e+00 2.6014659041832433e-01 -2.2550378733816498e+00 + -2.4248945216754105e+00 2.4696181967986486e-01 -2.6304620938983998e+00 + -2.8910271606277713e+00 2.2056240282899753e-01 -2.9734108228093663e+00 + -3.3677544237004762e+00 1.7709165917428948e-01 -3.2920155483068414e+00 + -3.8469148120822325e+00 1.0393102464021364e-01 -3.5953369612621815e+00 + -4.3119762857515225e+00 -2.2564865651224730e-02 -3.8875149558975570e+00 + -4.7289225084096058e+00 -2.0722168554240383e-01 -4.1761096693067064e+00 + -5.0693627841891109e+00 -4.3091220675647546e-01 -4.4684343892882827e+00 + -5.3269562612190056e+00 -6.6916455826711485e-01 -4.7686477999028245e+00 + -5.5037634065960308e+00 -9.1348368178261308e-01 -5.0757241155314547e+00 + -5.5944561394429311e+00 -1.1952685652863528e+00 -5.3642053383278592e+00 + -5.5857103837543276e+00 -1.5497573809420178e+00 -5.5815687381871903e+00 + -5.4640177264195531e+00 -1.9829594123039729e+00 -5.7137207671485690e+00 + -5.2341807609048816e+00 -2.5049141879089003e+00 -5.8126931703902054e+00 + -4.9686743690202784e+00 -3.1125922827116930e+00 -5.9285304668589403e+00 + -4.8676851338002614e+00 -3.5823314423054127e+00 -5.9999745870111854e+00 + id 12812 + loc 9.8497956991195679e-01 8.5340332984924316e-01 1076 + blend 0.0000000000000000e+00 + interp 3.2086551026741983e-01:3.2086230161231716e-01:1.3895177086155552e-01:2.6486125233824809e-01:9.1772538165899065e-01:2.5369498799269602e-01:1.9396901442293721e+00:8.1006255716198183e-02:3.0086482618019499e+00 + CVs 20 + 2.2899399386180375e-01 3.4621990673454994e-01 -9.2113023641864147e-02 + 4.8268812435990605e-01 6.6918939308688363e-01 -2.1754125156064363e-01 + 7.5911762178663300e-01 9.6987486149649260e-01 -3.5225286536952360e-01 + 1.0545226425662935e+00 1.2495135778798212e+00 -4.8622466784173957e-01 + 1.3639066097327908e+00 1.5105214997943228e+00 -6.2506087208145789e-01 + 1.6743448589120231e+00 1.7492192685441208e+00 -7.9198341204241762e-01 + 1.9575404657384883e+00 1.9413736677733617e+00 -1.0197062114346003e+00 + 2.1698393596103860e+00 2.0330307581504390e+00 -1.3006471127062273e+00 + 2.2777979531476857e+00 1.9817645954747865e+00 -1.5726398703022153e+00 + 2.2896228325394374e+00 1.8038884290436539e+00 -1.8001440457098268e+00 + 2.2291418070451550e+00 1.5192167360319373e+00 -1.9980873183555690e+00 + 2.1307182047518975e+00 1.1252652467164670e+00 -2.1953430441026089e+00 + 2.0547261280985301e+00 6.1326670437189934e-01 -2.4485265220553107e+00 + 2.0712269855775487e+00 2.0499514847749034e-02 -2.8564629011214411e+00 + 2.2283969943167166e+00 -4.8778538962390044e-01 -3.5502702741464209e+00 + 2.5118449805416088e+00 -5.6793362470279440e-01 -4.5564650967162326e+00 + 2.7665361307186926e+00 1.6027235166724424e-01 -5.5577072859465906e+00 + 2.7448897284114255e+00 1.2983325424391388e+00 -6.0037806421267597e+00 + 2.7013337322709270e+00 1.7243435718951536e+00 -6.3986662939022532e+00 + id 12813 + loc 2.7009010314941406e-01 4.4057950377464294e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4209497601171682e-01:2.7653983198193927e-01:6.0603303842476919e-04:3.3103007826145736e-01:7.6875108149459559e-01:4.2755756464046352e-01:1.0235628245019366e+00:4.4209055506195671e-01:1.4978689902370399e+00:3.8847018238390202e-01:1.9964508800399543e+00:3.4619230241723636e-01:2.6139805722847154e+00:3.4186766907576160e-01:3.3859253992748841e+00 + CVs 20 + -1.4899375870792989e-01 2.1188892328240688e-01 2.6974850798256671e-02 + -3.3776932203386756e-01 4.4025304029818868e-01 3.3910554365840687e-02 + -5.4409865023117976e-01 6.7583025973455269e-01 3.4733202720268405e-02 + -7.5230441801589809e-01 9.1029329867297881e-01 3.8558294450954975e-02 + -9.6208460527298989e-01 1.1365811766150014e+00 4.5827415035757463e-02 + -1.1688056950814540e+00 1.3428728467455655e+00 5.7827101921441248e-02 + -1.3674865962639906e+00 1.5154561658312731e+00 7.5038548940198513e-02 + -1.5572052709672835e+00 1.6468925058046708e+00 9.6833769103077227e-02 + -1.7428161435212823e+00 1.7339569272491284e+00 1.1639992538585286e-01 + -1.9313677460129850e+00 1.7643245826333454e+00 1.1470980315915544e-01 + -2.1210700501839406e+00 1.7134534780162529e+00 6.8039624850233904e-02 + -2.3014594176542693e+00 1.5622106644124205e+00 -4.0354311766118811e-02 + -2.4560353070346936e+00 1.3260865227893066e+00 -2.0905713449602881e-01 + -2.5601985831845409e+00 1.0628196376309440e+00 -4.0304133442122669e-01 + -2.6013276450063798e+00 8.1796631618456894e-01 -5.7805338139076268e-01 + -2.6193552767131481e+00 5.7367498416699070e-01 -7.3286844367511073e-01 + -2.7085385396642465e+00 2.8332473834029026e-01 -8.6796455808347761e-01 + -2.9456262340457924e+00 -3.6535731509028557e-02 -9.2368795713553298e-01 + -3.2969904646871186e+00 -3.3441063218414674e-01 -8.9296859070961565e-01 + id 12814 + loc 4.2175808548927307e-01 9.9180293083190918e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4637587559495870e-01:4.0370867248442793e-01:2.9692236738560029e-01:1.9878069904931853e-01:1.4336356737676439e+00:3.1874878634734810e-01:2.1401557921484655e+00:3.8051666329936545e-01:2.9997027397955836e+00:5.4637041183620283e-01:3.6366428706770724e+00:4.4858413060372593e-01:3.9912921510506538e+00 + CVs 20 + 1.8731211569232953e-01 5.8631671451911838e-01 5.8194764169375446e-01 + 4.0247938084770907e-01 1.0175917723869647e+00 9.1461816166694443e-01 + 6.2952269528523197e-01 1.3855008801195821e+00 1.1719004140721210e+00 + 8.6085350096033131e-01 1.7199002042319855e+00 1.4126156170190396e+00 + 1.0907570829395694e+00 2.0113365888848236e+00 1.6266907443079672e+00 + 1.3121007398691955e+00 2.2499758535623906e+00 1.7976459073757418e+00 + 1.5168651838856866e+00 2.4254645855583163e+00 1.9076962916212028e+00 + 1.6929406016183715e+00 2.5249883092948799e+00 1.9471358008025599e+00 + 1.8123296492416769e+00 2.5311578022059029e+00 1.9193214672605372e+00 + 1.8317037488373789e+00 2.4491986568017556e+00 1.8605496223500797e+00 + 1.7789291237526657e+00 2.3475955768107504e+00 1.8278162036348768e+00 + 1.7550268081354732e+00 2.2550357378725328e+00 1.8077837223091573e+00 + 1.7878575932583494e+00 2.1350199516198578e+00 1.7686783099052084e+00 + 1.8644040878818460e+00 1.9663565503607330e+00 1.7104105872593829e+00 + 1.9737379377695325e+00 1.7477270950852661e+00 1.6510944390675060e+00 + 2.1060877586144491e+00 1.4912127177146219e+00 1.6252526064518853e+00 + 2.2514072111979853e+00 1.2213313673572017e+00 1.6623846830481510e+00 + 2.4075394667310084e+00 9.3384610327759754e-01 1.7476688367768132e+00 + 2.5765445318089544e+00 5.7040075559329617e-01 1.8288559015616963e+00 + id 12815 + loc 5.0536066293716431e-01 7.1584147214889526e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9241562912829984e-01:3.7967460211467458e-01:1.4360451595620227e-01:4.0788334265430809e-01:1.0000236179845121e+00:3.6782757307215802e-01:1.9009573734728753e+00:4.9241070497200856e-01:2.2687785106588954e+00:3.5182031947240278e-01:2.9999984667172690e+00:3.1925111308741966e-01:3.7162191097633026e+00 + CVs 20 + -1.0738468654211832e-01 2.7442289961722027e-01 2.0047961507405798e-01 + -1.7703419871246967e-01 4.7444404926272110e-01 2.8118347478124539e-01 + -2.5701646836850300e-01 6.4160415874379573e-01 3.4289405782897087e-01 + -3.6214874464099894e-01 7.9022487078295667e-01 4.1232811675232839e-01 + -4.8913730132301597e-01 9.1593311932457544e-01 4.8470570224482201e-01 + -6.3408952386710815e-01 1.0152580241953331e+00 5.5579737861426715e-01 + -7.9265669844619058e-01 1.0859058037743168e+00 6.2218600826785408e-01 + -9.6069184385452233e-01 1.1264552337821661e+00 6.8194965340430258e-01 + -1.1341841161588884e+00 1.1359173505156632e+00 7.3467630024349306e-01 + -1.3092066531135209e+00 1.1136802282420404e+00 7.8142473828539805e-01 + -1.4828037638683520e+00 1.0592419486508566e+00 8.2467956631274353e-01 + -1.6534306622090853e+00 9.7184411019670736e-01 8.6788944414678015e-01 + -1.8205355986342002e+00 8.5054328671900448e-01 9.1471671449821490e-01 + -1.9835528436415550e+00 6.9486461024887758e-01 9.6801402193185326e-01 + -2.1409637086892253e+00 5.0584952051998577e-01 1.0292272100745796e+00 + -2.2897792812778768e+00 2.8701420503846586e-01 1.0984715544077184e+00 + -2.4253770405112980e+00 4.4597200317666452e-02 1.1747846407376770e+00 + -2.5425533873043586e+00 -2.1316789446706663e-01 1.2555877803314790e+00 + -2.6599312274214655e+00 -4.7877406779512854e-01 1.3335884319065769e+00 + id 12816 + loc 8.5806578397750854e-01 4.3965569138526917e-01 395 + blend 0.0000000000000000e+00 + interp 4.7023747438489694e-01:2.7829081057549776e-01:7.6688821747327607e-02:3.9656138883557679e-01:8.2739561675863915e-01:2.8391540193371667e-01:1.1000377838524362e+00:3.4466519944968499e-01:1.8480225847847231e+00:3.9586113149624286e-01:2.1494624914437397e+00:3.0047838438532659e-01:2.9527805558112803e+00:4.7023277201015312e-01:3.3218802025640501e+00 + CVs 20 + -3.1665694849291393e-01 1.7106243205498173e-01 4.4811361153204288e-01 + -5.9116444572245530e-01 2.9250470487397662e-01 7.7510907639516224e-01 + -8.6222295969742269e-01 3.9483545848730039e-01 1.0553206706831166e+00 + -1.1478411015062924e+00 4.9523578118131806e-01 1.3166338354340363e+00 + -1.4462562382987163e+00 5.9439193794850820e-01 1.5509986908000351e+00 + -1.7563947890974414e+00 6.9363880012069101e-01 1.7545443463560291e+00 + -2.0778402613098126e+00 7.9584414260582337e-01 1.9309254254417918e+00 + -2.4091676558832504e+00 9.0456327562968797e-01 2.0899237383685589e+00 + -2.7534810249768791e+00 1.0211033887705416e+00 2.2469036059783121e+00 + -3.1262618354362930e+00 1.1372257192368238e+00 2.4242230519116070e+00 + -3.5409155796994556e+00 1.2263045871016465e+00 2.6458752290208167e+00 + -3.9804568963706037e+00 1.2503559261998469e+00 2.9229141168060906e+00 + -4.4049790489559388e+00 1.1829771637211433e+00 3.2480718117159317e+00 + -4.7836665209832603e+00 1.0151746293258208e+00 3.6070445629220478e+00 + -5.1008171481282636e+00 7.4636196599413740e-01 3.9854786301829268e+00 + -5.3445120410728117e+00 3.8684826718541832e-01 4.3689921516287260e+00 + -5.5032999827681035e+00 -4.1084053900632078e-02 4.7386619198540743e+00 + -5.5721644383224280e+00 -5.1372841168937944e-01 5.0641017001975399e+00 + -5.5233522927308734e+00 -1.0100157446710880e+00 5.2540571896014407e+00 + id 12817 + loc 6.5659254789352417e-01 2.9856356978416443e-01 406 + blend 0.0000000000000000e+00 + interp 3.6983231684657930e-01:3.2668646377016819e-01:6.7023374770172039e-01:2.6578276138552875e-01:1.5733013915011260e+00:3.0897361585683958e-01:2.5658435838335234e+00:3.6982861852341087e-01:3.0612138368519148e+00:2.5837343046512290e-01:3.7786683468766515e+00 + CVs 20 + -1.5989445838919894e-01 1.8303717751619020e-01 -6.0866218282623410e-03 + -2.6391280114246041e-01 3.1821661937535117e-01 -2.0515503075570193e-02 + -3.4905448862282507e-01 4.2851175332239339e-01 -3.4815591937811113e-02 + -4.4503844321114461e-01 5.3625533822866456e-01 -4.1860924702501578e-02 + -5.5212667251475123e-01 6.3874714073033156e-01 -4.2104918937663272e-02 + -6.6936599670440688e-01 7.3327153779410392e-01 -3.6333750667896264e-02 + -7.9502459461939146e-01 8.1769831032945950e-01 -2.5813865854750484e-02 + -9.2676319762791615e-01 8.9069837920431094e-01 -1.2477498649632934e-02 + -1.0602448515396541e+00 9.5154486538062377e-01 1.1828694094692671e-03 + -1.1875760684392622e+00 1.0003144062541576e+00 1.2539875850010096e-02 + -1.3013239227552802e+00 1.0386859472082448e+00 1.9444181654070802e-02 + -1.4005220355358721e+00 1.0689699926480745e+00 2.1120902797206242e-02 + -1.4880524523247254e+00 1.0925440041372574e+00 1.8623607931091191e-02 + -1.5634726256711242e+00 1.1113934526555389e+00 1.1998965371572579e-02 + -1.6229361347498223e+00 1.1298820163186336e+00 -3.1020243935705460e-03 + -1.6656607161712853e+00 1.1536970462480083e+00 -3.2590473685251864e-02 + -1.6973356327869416e+00 1.1877555931727122e+00 -7.5894308542208522e-02 + -1.7249904246970538e+00 1.2347654645086410e+00 -1.2595843736122136e-01 + -1.7270913254915070e+00 1.2589196979697976e+00 -1.5728852816600769e-01 + id 12818 + loc 2.1584948897361755e-01 2.8886717557907104e-01 409 + blend 0.0000000000000000e+00 + interp 5.1150422134049722e-01:5.1149910629828388e-01:4.3268478886418715e-02:4.3102058833126949e-01:5.2714559451529552e-01:4.0306613869433139e-01:1.0010589505774399e+00:3.7018130488970169e-01:1.9785265389045577e+00:4.0929116345374383e-01:2.8508751670277164e+00:3.5760929995932145e-01:3.5120708424841460e+00 + CVs 20 + -3.0664160627243631e-01 2.0184361317953139e-01 -2.9632487742650948e-01 + -5.6824820462571035e-01 3.6813644420677860e-01 -5.6256072139045776e-01 + -8.0676591563622480e-01 5.2216775766997792e-01 -8.4690473080173212e-01 + -1.0282559402020996e+00 6.6270593341895356e-01 -1.1604890842891384e+00 + -1.2478968971904365e+00 7.7620086323921511e-01 -1.4921317532296063e+00 + -1.4939685648156611e+00 8.4969317830820135e-01 -1.8281904708257239e+00 + -1.7887120560739433e+00 8.6863113835502270e-01 -2.1490628779725616e+00 + -2.1348827423107806e+00 8.1574978935856191e-01 -2.4364183617949444e+00 + -2.5114686791851053e+00 6.7899408620135593e-01 -2.6859600518446074e+00 + -2.8844556064628515e+00 4.5724800867060322e-01 -2.8988669915935814e+00 + -3.2281320244534659e+00 1.3782774092749661e-01 -3.0768986577263067e+00 + -3.5496325134651276e+00 -3.1789296592518146e-01 -3.2316364198493996e+00 + -3.9024681336309759e+00 -9.0997419352704778e-01 -3.3732866269324315e+00 + -4.3623342541657371e+00 -1.5760369149266280e+00 -3.5096582045270206e+00 + -4.9962737905446888e+00 -2.2258474780676631e+00 -3.6494911425628409e+00 + -5.8121075885914379e+00 -2.7836492186635899e+00 -3.8083103155142162e+00 + -6.7473963526382592e+00 -3.2507704257526768e+00 -4.0229095918396078e+00 + -7.7140294120906967e+00 -3.6510732337941949e+00 -4.3187095856001596e+00 + -8.6247844259744060e+00 -3.9474096916097348e+00 -4.5757760901271816e+00 + id 12819 + loc 8.1865882873535156e-01 8.3657521009445190e-01 1069 + blend 0.0000000000000000e+00 + interp 5.3550284220123012e-01:3.5935800396926421e-01:5.6476152392165302e-03:4.4012608498814298e-01:8.1413664875042835e-01:2.7875057763701572e-01:1.1181939845244102e+00:3.8030071177193370e-01:2.0506742607950965e+00:5.3549748717280810e-01:2.6786221437817765e+00:4.1091806442846313e-01:3.0694870492412747e+00 + CVs 20 + 2.4484582654564027e-01 3.4238663801191860e-01 -2.1732413431242764e-01 + 5.1201749432453025e-01 6.7665079936017059e-01 -4.2067846452407387e-01 + 8.1518693096523231e-01 9.5690460309435144e-01 -5.6954456776801088e-01 + 1.1415201227557725e+00 1.1350658432464100e+00 -6.5611415017048902e-01 + 1.4608633320671205e+00 1.2009767397822635e+00 -6.9836884318979642e-01 + 1.7366191580792356e+00 1.1672151913478197e+00 -7.1685604947764636e-01 + 1.9243141171609788e+00 1.0518621039300591e+00 -7.1794705180089058e-01 + 1.9958036753724724e+00 8.9546781450832103e-01 -6.9422228390421681e-01 + 1.9653477308978595e+00 7.5314059664240984e-01 -6.4154227232213079e-01 + 1.8773900026779962e+00 6.6298691650666597e-01 -5.6697488092669568e-01 + 1.7803978170273802e+00 6.3357790955022697e-01 -4.8276972561577969e-01 + 1.7089027061687745e+00 6.5205591217800585e-01 -4.0239151559690328e-01 + 1.6769972668826612e+00 6.9104621941426003e-01 -3.3964144916128386e-01 + 1.6697599217313706e+00 6.6959463660448193e-01 -2.8396275656571901e-01 + 1.6385353312646962e+00 5.2950075587959478e-01 -1.8725700095249212e-01 + 1.5776333793057127e+00 3.1447824449669326e-01 -3.2722172016684148e-02 + 1.5180640585316927e+00 7.9708562470612809e-02 1.6301698177824331e-01 + 1.4948120355356631e+00 -1.0526728183906275e-01 4.0257184639373988e-01 + 1.5611877177778888e+00 -5.4878058483011083e-03 6.5549105007706654e-01 + id 12820 + loc 4.7882962226867676e-01 7.8802770376205444e-01 264 + blend 0.0000000000000000e+00 + interp 4.3885293039086054e-01:4.3685563001018729e-01:7.0606054643189142e-01:3.9612553646137727e-01:1.1250051647596835e+00:3.1242473333075471e-01:1.9438307655791451e+00:4.3884854186155664e-01:2.4994585882865064e+00:3.9335161764526222e-01:3.0023898065075141e+00:2.6109707988921921e-01:3.5615238814471106e+00 + CVs 20 + -8.2710234927745274e-01 4.6848503649266265e-01 -2.1943494685707532e-01 + -1.5001705475307094e+00 7.5592358587268049e-01 -2.9424094059540917e-01 + -2.1577033788991038e+00 8.9233904066205616e-01 -2.4056177942848123e-01 + -2.8225406551323116e+00 9.6449080050055847e-01 -1.0269516079667140e-01 + -3.4825308138261653e+00 1.0477299462473031e+00 5.2783610477746490e-02 + -4.1521847305934827e+00 1.1576972482001684e+00 1.5105735997184855e-01 + -4.8279209078904364e+00 1.2714093832986952e+00 1.2778051127346357e-01 + -5.4714259276684301e+00 1.3650119221356336e+00 -4.8096858975450463e-02 + -6.0456949313705213e+00 1.4226467083263321e+00 -3.7279601409721663e-01 + -6.5366556612485240e+00 1.4290173102576951e+00 -8.2476939156167373e-01 + -6.9376235889621984e+00 1.3668503894162902e+00 -1.3673088061461125e+00 + -7.2372896037005550e+00 1.2244725419358340e+00 -1.9482287768741404e+00 + -7.4254237979415407e+00 1.0035814065995696e+00 -2.5109392771709018e+00 + -7.5077427313094089e+00 7.1895698537545893e-01 -3.0134606316587189e+00 + -7.5038947888018566e+00 3.6706989906181686e-01 -3.4486671467516876e+00 + -7.4259921772295820e+00 -1.3378702483829841e-01 -3.8313495641554187e+00 + -7.3456266555162646e+00 -8.3473718066681446e-01 -4.0600441669225074e+00 + -7.3944906807186577e+00 -1.5391797190095344e+00 -4.0191418803831462e+00 + -7.5565334031416711e+00 -2.0503935469393131e+00 -3.8301842220102760e+00 + id 12821 + loc 5.3550857305526733e-01 9.4171947240829468e-01 377 + blend 0.0000000000000000e+00 + interp 4.7631992759790814e-01:4.1931185597871223e-01:1.3525421876507115e-01:4.2116271642873104e-01:9.7306734956942931e-01:4.7631516439863220e-01:1.8610549777767371e+00:2.8933453893121802e-01:2.0564635412301344e+00:3.9983525081612625e-01:2.9974551133305032e+00:3.7725354869016903e-01:3.4400703345780634e+00 + CVs 20 + -6.4893513568088801e-01 2.3246803643854280e-01 -5.0527955268396985e-01 + -1.1310154087666482e+00 3.2231698092405919e-01 -8.4538407944157679e-01 + -1.5735501794470390e+00 3.4835371604459281e-01 -1.1562939433490864e+00 + -2.0276017910693724e+00 3.4294010408103892e-01 -1.4990890998031259e+00 + -2.4939926579361806e+00 3.0407536985698103e-01 -1.8812963641400684e+00 + -2.9707575794234025e+00 2.2771993158650017e-01 -2.3038801288089208e+00 + -3.4556336835407766e+00 1.0149480816012812e-01 -2.7610057393077945e+00 + -3.9371101100269765e+00 -9.1206540971063399e-02 -3.2421512976270161e+00 + -4.3946625254292400e+00 -3.6302854483264912e-01 -3.7310686058372244e+00 + -4.8094524690838147e+00 -7.1566900062971861e-01 -4.1966489874379800e+00 + -5.1626192788754137e+00 -1.1381790634821152e+00 -4.5943224392790105e+00 + -5.4302798118452849e+00 -1.6094612769073606e+00 -4.8873972347032817e+00 + -5.6083610425274504e+00 -2.1061720710204872e+00 -5.0751984229652631e+00 + -5.7379713932570091e+00 -2.6201725249451400e+00 -5.2096030993793123e+00 + -5.8693241835902592e+00 -3.1459776731409730e+00 -5.3603687492992975e+00 + -6.0326616189414333e+00 -3.6564506313161727e+00 -5.5494879602685074e+00 + -6.2473105262972703e+00 -4.1256842032365775e+00 -5.7483169525467215e+00 + -6.4932309748388546e+00 -4.5372287731145278e+00 -5.9238298451312978e+00 + -6.6216631291531165e+00 -4.8810939498656571e+00 -6.1041210042539547e+00 + id 12822 + loc 6.8082487583160400e-01 1.6493365168571472e-01 411 + blend 0.0000000000000000e+00 + interp 4.6557650788161647e-01:2.9249824384141548e-01:1.0256869436689964e-01:3.3398914663782392e-01:9.9151018100486388e-01:4.5089317915915650e-01:1.4066598481520343e+00:3.0980031387165408e-01:2.2760928476415709e+00:3.4101203198827157e-01:3.0457087447830853e+00:4.6557185211653768e-01:3.7588297680260441e+00 + CVs 20 + -6.4541165618526164e-01 2.7132887960537061e-01 1.2275866359056531e-01 + -1.1419654873373426e+00 4.5795198904985546e-01 2.4040985663924491e-01 + -1.5879099825806151e+00 6.1757547832671611e-01 3.3979892977352760e-01 + -2.0376416777664810e+00 7.7088133625512045e-01 4.2106235408517056e-01 + -2.4916549658085718e+00 9.1312055066886555e-01 4.8048437643281294e-01 + -2.9502291284962578e+00 1.0398738037069761e+00 5.1841148048219865e-01 + -3.4175574703918254e+00 1.1455488100878410e+00 5.4036160681094281e-01 + -3.9027065420499247e+00 1.2213639792062001e+00 5.5202128835589559e-01 + -4.4152704692336631e+00 1.2542540956251025e+00 5.5561421841987491e-01 + -4.9600737952726774e+00 1.2261767293274133e+00 5.5608677352652480e-01 + -5.5285871578682917e+00 1.1176755242665324e+00 5.6366531913490436e-01 + -6.0925594361254554e+00 9.1906484004065447e-01 5.8856553172208481e-01 + -6.6213888564069769e+00 6.3705247023718670e-01 6.3297614738464303e-01 + -7.1009833961286954e+00 2.8388627727828153e-01 6.9428712066189624e-01 + -7.5265437553597181e+00 -1.2984507371702358e-01 7.7277365473905646e-01 + -7.8932357639652393e+00 -5.9395120855502137e-01 8.7165541666495538e-01 + -8.1949763384494076e+00 -1.0945323632531032e+00 9.9093970732926384e-01 + -8.4258185211629382e+00 -1.6043945645295699e+00 1.1222334977322519e+00 + -8.5491007711474367e+00 -1.9201865680363053e+00 1.2321178337904095e+00 + id 12823 + loc 5.4322886466979980e-01 1.4372344315052032e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1102967462612405e-01:3.4999479049809795e-01:6.0882027382748061e-02:4.1102556432937781e-01:7.3680183390037290e-01:3.3341560510034068e-01:1.1541531818027189e+00:2.8717667292118138e-01:1.9459424321618131e+00:3.7369794799594191e-01:2.7525211056225753e+00:2.5671492541639807e-01:3.3245463307778116e+00 + CVs 20 + -7.2579202546145943e-02 4.6101176478583883e-01 -4.8230269627467215e-01 + -1.4642202164668650e-01 8.1633555701727123e-01 -7.6770783412985077e-01 + -2.2539292289226659e-01 1.1334843125488714e+00 -9.9219106452564887e-01 + -3.1631571156263383e-01 1.4474733242446856e+00 -1.2143986580152371e+00 + -4.2646768482653924e-01 1.7521464321709974e+00 -1.4268646583222702e+00 + -5.6309222645828561e-01 2.0412009288110955e+00 -1.6195259686109780e+00 + -7.3313565281380411e-01 2.3065657179878887e+00 -1.7807556535831526e+00 + -9.4412210729801027e-01 2.5386474779861121e+00 -1.8991070463214379e+00 + -1.2047249660465191e+00 2.7226796281349674e+00 -1.9624896409616175e+00 + -1.5102014510028789e+00 2.8297329433624774e+00 -1.9552203341863523e+00 + -1.8159280810826719e+00 2.8320960591521809e+00 -1.8754333544708937e+00 + -2.0724177229437433e+00 2.7394034940569441e+00 -1.7487656526190221e+00 + -2.2688538799054871e+00 2.5765072402289122e+00 -1.5996948944313751e+00 + -2.4119833814627949e+00 2.3554020346498543e+00 -1.4401262135308923e+00 + -2.5083116433001047e+00 2.0769832036880027e+00 -1.2798074633168088e+00 + -2.5624346271061906e+00 1.7356661076643674e+00 -1.1409790172224434e+00 + -2.5724513680592938e+00 1.3362900281409604e+00 -1.0792755107193233e+00 + -2.5283382458921415e+00 9.1363809621403047e-01 -1.1483889042188724e+00 + -2.4489363116411140e+00 4.3982852070064044e-01 -1.2753638683205410e+00 + id 12824 + loc 7.2092181444168091e-01 3.8328844308853149e-01 403 + blend 0.0000000000000000e+00 + interp 4.8760157967468554e-01:3.3729009074799515e-01:1.7642384090559582e-01:3.7592573315364497e-01:9.9888004649275430e-01:2.8813989932007306e-01:1.6720020090262575e+00:3.9732834125422917e-01:2.3975689579329975e+00:3.7477637416227211e-01:3.0602045849239321e+00:4.8759670365888880e-01:3.9262292977707367e+00 + CVs 20 + 5.4554396362320949e-02 1.3872822282889274e-01 -8.0922518534529506e-03 + 1.0184909110489124e-01 2.8215064068715073e-01 8.5766783985095560e-03 + 1.4206280752331482e-01 4.1909155340427839e-01 2.1881451161431680e-02 + 1.7560889545994826e-01 5.4803255182599508e-01 2.9970455397409418e-02 + 2.0476866669874139e-01 6.6690522083998960e-01 3.5254279037058849e-02 + 2.3263371722195636e-01 7.7405731744273698e-01 4.0158989120225537e-02 + 2.6274947209944838e-01 8.6782820812886552e-01 4.6270924411262036e-02 + 2.9954183303615350e-01 9.4472231862240119e-01 5.2578668268193948e-02 + 3.4597037768296235e-01 1.0008758711740233e+00 5.6387369973457384e-02 + 3.9957990923234099e-01 1.0363392639428120e+00 5.5309308393760512e-02 + 4.5390193109197585e-01 1.0593598989827067e+00 5.0954949524672694e-02 + 5.0667296210309509e-01 1.0821514597154411e+00 4.9155994786125756e-02 + 5.6283007496920745e-01 1.1128720442183022e+00 5.5622207682462649e-02 + 6.3050335372666988e-01 1.1543123127747301e+00 7.2883660765988151e-02 + 7.1725476880434536e-01 1.2064142416011570e+00 9.9668939082272132e-02 + 8.2943396146761694e-01 1.2669449899690233e+00 1.3128574287602035e-01 + 9.7333790800812903e-01 1.3293404832102631e+00 1.5953897919239840e-01 + 1.1536252869533676e+00 1.3819051548143988e+00 1.7280349240357940e-01 + 1.3659852126380201e+00 1.4525897740654534e+00 2.5341043335859315e-01 + id 12825 + loc 5.6614655256271362e-01 5.8725380897521973e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8986454586486313e-01:3.4137752489720691e-01:3.2075665314118507e-01:3.8945928344947933e-01:1.0925723525641018e+00:2.7870483471088225e-01:1.8343926599428686e+00:3.3851810220852618e-01:2.4527846454595061e+00:3.8986064721940450e-01:3.0704197531842645e+00:2.5572993569423508e-01:3.6646205624478139e+00 + CVs 20 + 1.0566117931062360e-01 3.4817794564959542e-01 -2.3224520690094688e-01 + 2.3268417244546621e-01 6.9574687963407533e-01 -4.9151841376166927e-01 + 3.7031067841877818e-01 1.0338228139501298e+00 -7.7459391785921938e-01 + 5.1103652417864431e-01 1.3494441224051352e+00 -1.0811314031241244e+00 + 6.4988838591617748e-01 1.6227381220901180e+00 -1.4109966886791461e+00 + 7.8323997434255066e-01 1.8247995976727367e+00 -1.7584910185546172e+00 + 9.1009641512706219e-01 1.9334806994913025e+00 -2.1093127165952543e+00 + 1.0299951056047056e+00 1.9443590973725251e+00 -2.4383440422165288e+00 + 1.1388327813517722e+00 1.8676964882815776e+00 -2.7180268547475737e+00 + 1.2348808823659072e+00 1.7292132515809910e+00 -2.9448892855562940e+00 + 1.3326491017879045e+00 1.5527583407439152e+00 -3.1536434072290263e+00 + 1.4531115775634655e+00 1.3470367690519143e+00 -3.3841096840521727e+00 + 1.5907954735860812e+00 1.1272302531189546e+00 -3.6439037666228415e+00 + 1.7082593370571191e+00 9.1980713263685021e-01 -3.9191570562651590e+00 + 1.7749307382320354e+00 7.4229150760354123e-01 -4.2130527614573534e+00 + 1.7769660316744809e+00 6.1003236007054806e-01 -4.5483067012113860e+00 + 1.7026940728485105e+00 5.5822436383563812e-01 -4.9167648178918970e+00 + 1.5769780567172433e+00 5.9271973799899835e-01 -5.3005922121360918e+00 + 1.4525536505853007e+00 6.3051045079812407e-01 -5.7840720633292397e+00 + id 12826 + loc 8.7794613838195801e-01 5.3531289100646973e-01 1081 + blend 0.0000000000000000e+00 + interp 4.5972124003723985e-01:3.6069193834897162e-01:9.3522563215509125e-01:2.7681857751430528e-01:1.4392739671832047e+00:3.6366073308995917e-01:2.1044877593569158e+00:4.5971664282483948e-01:2.9658170476134309e+00:3.6948439139946571e-01:3.2419295724507493e+00:3.9035596817823953e-01:3.9998542848490155e+00 + CVs 20 + -4.6358738822550427e-02 4.3214385207819717e-01 3.9995521916111787e-01 + -4.7337639315612273e-02 7.7796372367076150e-01 6.6573124206652223e-01 + -2.8854936042413348e-02 1.0977948591955071e+00 8.8090874583833001e-01 + -2.0651568284583144e-03 1.4260598482830074e+00 1.0893842620793561e+00 + 3.8306016191550329e-02 1.7630783341502567e+00 1.2861994615886281e+00 + 1.0046364593455970e-01 2.1144873436148091e+00 1.4602221771441637e+00 + 1.9861809929064045e-01 2.4907581865961932e+00 1.5822605683858759e+00 + 3.5306251939894773e-01 2.8964777463944258e+00 1.5956515526504473e+00 + 5.7334980706823035e-01 3.2883403424833393e+00 1.4129968643432689e+00 + 8.0404379143892535e-01 3.5305160324002722e+00 1.0173016149904128e+00 + 9.6884476728268176e-01 3.5595782457797172e+00 5.5075391665072315e-01 + 1.0661511409675872e+00 3.4399606379915939e+00 1.0996507687781421e-01 + 1.1214354056064302e+00 3.2220601963336213e+00 -2.9783373269330893e-01 + 1.1540161125136335e+00 2.9188987136585340e+00 -6.8168573419977541e-01 + 1.1760218544535419e+00 2.5030942871968294e+00 -1.0448085826880478e+00 + 1.1883871826564119e+00 1.8837181856569027e+00 -1.3454480262672861e+00 + 1.1837936528600288e+00 1.0394582515704145e+00 -1.4255313329412171e+00 + 1.1697132178382097e+00 2.3926574827293967e-01 -1.2499070039823943e+00 + 1.1645517859823760e+00 -2.0629113534038990e-01 -1.1985426663958136e+00 + id 12827 + loc 1.9023685157299042e-01 7.3081076145172119e-01 373 + blend 0.0000000000000000e+00 + interp 4.8867044458825781e-01:4.8866555788381194e-01:1.2214740941796642e-02:3.3853473100888032e-01:9.3989127365566794e-01:3.7092713858835574e-01:1.6121866991863938e+00:4.0636845025510665e-01:2.0080337782244690e+00:3.5576593418714469e-01:2.5247243148448923e+00:3.4349168886755332e-01:3.2776061263655998e+00 + CVs 20 + -4.1752895740573898e-01 6.0311805685631636e-01 -1.2004470695895877e-01 + -7.4702714729025477e-01 1.1770865795426655e+00 -2.6886567222759478e-01 + -9.6300421261050084e-01 1.7457340787884092e+00 -4.6213917159805856e-01 + -1.0559196474348642e+00 2.3131847145914559e+00 -7.0761087986476923e-01 + -1.0334341681165782e+00 2.8540323475097065e+00 -1.0107064982037239e+00 + -9.4384896167720578e-01 3.3402622917207658e+00 -1.3826564316809733e+00 + -8.5756917564576252e-01 3.7483962946068572e+00 -1.8433546627877220e+00 + -8.4581640756806220e-01 4.0598562052338334e+00 -2.4021358793590388e+00 + -9.6581118969757163e-01 4.2610103122466851e+00 -3.0353394061345389e+00 + -1.2583757079431299e+00 4.3493024679864369e+00 -3.6867642560100240e+00 + -1.7405111065953547e+00 4.3203453435121624e+00 -4.2874657657998423e+00 + -2.3673312932333745e+00 4.1550706807712272e+00 -4.7895536685756142e+00 + -3.0479042490021624e+00 3.8335348816987929e+00 -5.1770959068861888e+00 + -3.6885091184825969e+00 3.3704729241404738e+00 -5.4302419939568933e+00 + -4.2272540063016750e+00 2.8167821745645183e+00 -5.5323376621748537e+00 + -4.6489566628095345e+00 2.2207480769381869e+00 -5.4902577460620705e+00 + -4.9380910562148150e+00 1.6214640340552722e+00 -5.3344705248083599e+00 + -5.0283329927395322e+00 1.1245757533800713e+00 -5.1075021254012984e+00 + -5.0062465825352787e+00 7.0025478506297523e-01 -4.8837380367879257e+00 + id 12828 + loc 3.8911077380180359e-01 5.4178631305694580e-01 406 + blend 0.0000000000000000e+00 + interp 4.3778924744154057e-01:3.1234026276055388e-01:1.9892657687000714e-01:3.6206804328518694e-01:1.1651985950985941e+00:2.8975710527628440e-01:2.0609520648437805e+00:3.0110412926540303e-01:3.0001126594851475e+00:4.3778486954906620e-01:3.7682158582613403e+00 + CVs 20 + 3.1659437992612866e-01 2.7276126087014768e-01 -6.6778719066851788e-02 + 5.5191544570493256e-01 4.8178856352521748e-01 -8.8497858002840435e-02 + 7.7858301936380270e-01 6.1191390866889095e-01 -9.2589214871345665e-02 + 1.0305079874671541e+00 7.0483541162878072e-01 -7.2777011368398231e-02 + 1.3008925773335636e+00 7.5391442794973007e-01 -2.9393521743689921e-02 + 1.5812433148699268e+00 7.5360988532501194e-01 3.5724080165371208e-02 + 1.8622429079553489e+00 7.0116638799670239e-01 1.2123756111580064e-01 + 2.1341017113036784e+00 5.9650258632036901e-01 2.2668679227869637e-01 + 2.3858080509830044e+00 4.4021789382256871e-01 3.4708810451541960e-01 + 2.6060527576373356e+00 2.3376990356912053e-01 4.6697113365846399e-01 + 2.7876905292029184e+00 -1.6945741573110462e-02 5.7073250262646757e-01 + 2.9300070411904207e+00 -3.0116398123358756e-01 6.5903411779988297e-01 + 3.0359887362477553e+00 -6.0782336436986251e-01 7.4256275166806951e-01 + 3.1085803448365970e+00 -9.2825596202013383e-01 8.2352494528251163e-01 + 3.1508127354480733e+00 -1.2553856140325641e+00 8.9274038671043776e-01 + 3.1662662729960580e+00 -1.5833410449118488e+00 9.4196002598288575e-01 + 3.1577483978234766e+00 -1.9070597254029797e+00 9.7304661051657959e-01 + 3.1315182213308530e+00 -2.2217118373399547e+00 9.9447676941854757e-01 + 3.2079565944331718e+00 -2.5304819615794933e+00 1.0886226500400227e+00 + id 12829 + loc 8.1317794322967529e-01 6.8680369853973389e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9519191553026626e-01:4.9518696361111098e-01:3.1134538689544522e-03:3.7314536860401692e-01:4.9900870349101045e-01:3.7447327309772810e-01:1.4172332273774977e+00:2.7670581665227439e-01:1.9995988137984047e+00:3.6235739788056609e-01:2.5300989329704264e+00:4.8224851720950501e-01:3.0048223183818794e+00:3.6576575987602344e-01:3.5773324204171955e+00 + CVs 20 + 2.2700079948724425e-01 2.8963037231763639e-01 -1.5779676024571027e-01 + 4.3990921010201595e-01 5.9207010230757673e-01 -3.3080537481436634e-01 + 6.4535222817263271e-01 8.8019890414133750e-01 -5.4236081229462418e-01 + 8.4411936039575097e-01 1.1300562470890232e+00 -8.0525368423173893e-01 + 1.0292445288137988e+00 1.3203805224428566e+00 -1.1204971792424101e+00 + 1.1890568311871634e+00 1.4326148789097608e+00 -1.4787314746633449e+00 + 1.3081883182518053e+00 1.4550456388241084e+00 -1.8597132692456151e+00 + 1.3699512285865887e+00 1.3859416219553045e+00 -2.2329994822034438e+00 + 1.3641534375962980e+00 1.2360477562603018e+00 -2.5628339258222592e+00 + 1.2957241968086179e+00 1.0264529687912201e+00 -2.8187920428074458e+00 + 1.1835396111204042e+00 7.8215016085137679e-01 -2.9833494113059920e+00 + 1.0550943475687666e+00 5.1850379898894283e-01 -3.0692570125265490e+00 + 9.3071432268290866e-01 2.2414900563516205e-01 -3.1268171623590004e+00 + 8.1043444534408304e-01 -1.2078323946628733e-01 -3.2344387965136487e+00 + 6.8352115852080819e-01 -4.9383268059159247e-01 -3.5222341787402813e+00 + 5.7554155613731162e-01 -7.3213463936401268e-01 -4.0837210348622630e+00 + 5.7010902859901047e-01 -6.3049365684919678e-01 -4.7985450249681376e+00 + 7.9910485369756856e-01 3.8611808531018976e-02 -5.4233434247627290e+00 + 8.3605686954356440e-01 1.5755397154103923e-01 -5.5956433175451670e+00 + id 12830 + loc 4.4619068503379822e-02 9.2984789609909058e-01 409 + blend 0.0000000000000000e+00 + interp 4.3817291980445722e-01:3.5992985160897867e-01:4.7363211871221833e-02:1.4669186264161704e-01:9.9988959029477897e-01:2.9833685468947130e-01:1.7485750028615761e+00:3.9219924984459875e-01:2.0621275066322755e+00:4.2768917846816773e-01:2.8138698661298758e+00:4.3816853807525918e-01:2.8982812786368877e+00:4.0298470766327810e-01:3.1305187272749122e+00:2.9836661836395578e-01:3.7110551195679600e+00 + CVs 20 + 6.1846317301399945e-01 2.2250432551981339e-01 -2.1474020863148713e-01 + 1.0974463743607454e+00 3.4820517706172899e-01 -3.8935891176314164e-01 + 1.5478804065014782e+00 4.3883581847786368e-01 -5.3605570606543318e-01 + 1.9988870470434912e+00 5.1167225881261214e-01 -6.5671398725857477e-01 + 2.4364681258986223e+00 5.6373587996994934e-01 -7.5608940729915530e-01 + 2.8614260856587754e+00 5.9932864431841248e-01 -8.4948350330459133e-01 + 3.2799214931204745e+00 6.2233920027818757e-01 -9.6536209298190112e-01 + 3.6861558955868268e+00 6.3071217119985157e-01 -1.1379211518778507e+00 + 4.0724302761322519e+00 6.1699582186712010e-01 -1.3927113737947898e+00 + 4.4425133114078417e+00 5.5849938643294994e-01 -1.7427305900836503e+00 + 4.7963812108350350e+00 3.8536541630053489e-01 -2.1695952755037617e+00 + 5.1095455115902570e+00 6.9866539529686023e-03 -2.5992773669683538e+00 + 5.3541398802272395e+00 -5.7591165293785096e-01 -2.9864735292766440e+00 + 5.5295573443898931e+00 -1.2745800292771121e+00 -3.3786181123232693e+00 + 5.6568994125205174e+00 -1.9847423080092157e+00 -3.8402394335152987e+00 + 5.7692535110579044e+00 -2.6332369843106749e+00 -4.3954971786695287e+00 + 5.9066372718860158e+00 -3.2085981487614212e+00 -5.0228404595475764e+00 + 6.1012590924917216e+00 -3.7388250743090476e+00 -5.6921522120526582e+00 + 6.3210005193851266e+00 -4.2648759893325048e+00 -6.4100302737369050e+00 + id 12831 + loc 8.6305308341979980e-01 3.1580683588981628e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6884958785194216e-01:2.9080172356647749e-01:1.8840283369397370e-01:2.3198076379693541e-01:1.5335905995444608e+00:3.6884589935606366e-01:2.5079492373171184e+00:2.4372372301526130e-01:3.1118971639058799e+00 + CVs 20 + -2.2633679524922470e-01 2.8237328824006080e-01 2.0771600883140845e-01 + -4.4557093593585617e-01 5.6670566899433172e-01 3.8993820510285487e-01 + -6.6612661663455797e-01 8.4563700416610965e-01 5.6511267533767795e-01 + -8.8758879264299539e-01 1.1179089552931201e+00 7.4405466035392098e-01 + -1.0991763723977068e+00 1.3845745255953144e+00 9.3225790807870301e-01 + -1.3023227113484377e+00 1.6407601449299278e+00 1.1535168664164455e+00 + -1.5190311191992962e+00 1.8730698982167173e+00 1.4431977384856809e+00 + -1.7724195816749981e+00 2.0688108399178122e+00 1.8140324932697693e+00 + -2.0741742811842427e+00 2.2170731576007716e+00 2.2511387140451857e+00 + -2.4332437077496758e+00 2.2980499867671034e+00 2.7325482999940185e+00 + -2.8548229677518502e+00 2.2746297084997553e+00 3.2390323333412692e+00 + -3.3164239406526388e+00 2.0905953039090210e+00 3.7540688511767328e+00 + -3.7260380933119928e+00 1.6888894998595565e+00 4.2618826623023782e+00 + -3.9413125288843136e+00 1.0831542613144709e+00 4.7106795218985464e+00 + -3.8955762816268025e+00 3.9757710983717531e-01 5.0577238399967213e+00 + -3.5800739782070874e+00 -2.4228469288621413e-01 5.3227544874622277e+00 + -2.9206069106534089e+00 -5.7510612650204340e-01 5.5458697996050041e+00 + -2.2571481818070649e+00 -2.2294152705430370e-01 5.7373889902614925e+00 + -1.8251792650800684e+00 -1.2758935925489712e-01 5.9304707559049747e+00 + id 12832 + loc 8.7059408426284790e-02 1.4682905375957489e-01 395 + blend 0.0000000000000000e+00 + interp 4.6719544037811606e-01:4.6719076842371232e-01:2.6068182199031398e-02:2.6989703933267373e-01:9.7597186999921959e-01:3.7360831380308879e-01:1.4871163367764315e+00:2.9587593329678719e-01:2.0144815325984324e+00:3.3589716613766329e-01:2.6976335455370171e+00:3.1069309719781990e-01:3.1900530086692678e+00 + CVs 20 + -2.1345142116858412e-01 1.5500791010605930e-01 -3.0338274000117160e-01 + -3.9367712638983043e-01 3.1092087054321760e-01 -6.0050810130727383e-01 + -5.5434864686908969e-01 4.7049629245413149e-01 -8.9065682089653375e-01 + -7.0098404403009529e-01 6.3229362493550045e-01 -1.1725708795026515e+00 + -8.3732969227370768e-01 7.9315908532305324e-01 -1.4463699295687842e+00 + -9.6913333214810304e-01 9.5050807750377975e-01 -1.7133410925096624e+00 + -1.1020620690008522e+00 1.1010549795271842e+00 -1.9761432912187415e+00 + -1.2413142963803323e+00 1.2390240595110256e+00 -2.2408609858132129e+00 + -1.3944897546531885e+00 1.3554916441023033e+00 -2.5196205632511823e+00 + -1.5717941326333986e+00 1.4355420873922342e+00 -2.8242093788776419e+00 + -1.7788965616045491e+00 1.4586445036712963e+00 -3.1495249646902335e+00 + -2.0099213488150220e+00 1.4111418633331110e+00 -3.4712567719768881e+00 + -2.2530106456000318e+00 1.2936383458920531e+00 -3.7680151937567095e+00 + -2.4992449150840206e+00 1.1121663368727943e+00 -4.0314284904503985e+00 + -2.7419690233095335e+00 8.7352136352506848e-01 -4.2566080985612453e+00 + -2.9733306268659572e+00 5.8587371414994571e-01 -4.4384926901090145e+00 + -3.1812377179331448e+00 2.6005336253315603e-01 -4.5736193291931553e+00 + -3.3516411630148117e+00 -8.4768873439272863e-02 -4.6589321766976290e+00 + -3.4710504642315403e+00 -3.9280602112081198e-01 -4.6916204027832382e+00 + id 12833 + loc 7.1195262670516968e-01 1.5543784201145172e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8356024032196870e-01:3.3108834086290251e-01:5.8594621329496333e-03:4.5698936249284206e-01:5.4057662994677869e-01:4.8355540471956548e-01:9.9421645398758129e-01:3.2218287477265123e-01:1.6957255394065458e+00:3.5969320079469491e-01:2.0864350318194478e+00:3.4232772435468850e-01:2.7026766468676575e+00:2.8965860164548507e-01:3.2884272219184476e+00 + CVs 20 + -6.8555908196229101e-02 4.7490704564230979e-01 -4.6424346194434329e-01 + -1.5417063870657979e-01 8.7265061939537414e-01 -7.4664201936137364e-01 + -2.5457622261320456e-01 1.2457777153481764e+00 -9.7144132880228151e-01 + -3.8070061997859395e-01 1.6234259876218116e+00 -1.1761150214301448e+00 + -5.3948353662776283e-01 1.9971345680723391e+00 -1.3511622542048223e+00 + -7.4152753894231671e-01 2.3560002362657162e+00 -1.4822343643453684e+00 + -9.9949292232935505e-01 2.6820460656011997e+00 -1.5500871092448858e+00 + -1.3235859279208333e+00 2.9468736602917884e+00 -1.5341026760567829e+00 + -1.7083073189946079e+00 3.1073406898857665e+00 -1.4147637481624546e+00 + -2.1045929271347679e+00 3.1213891541443557e+00 -1.1965322210463105e+00 + -2.4445212454749470e+00 2.9995077389515696e+00 -9.2741718577837540e-01 + -2.7095678010676836e+00 2.7931783253831357e+00 -6.5556512547323353e-01 + -2.9207818478400336e+00 2.5349029926775057e+00 -4.0008687916777197e-01 + -3.1022554538529530e+00 2.2279794386835046e+00 -1.7014172143137607e-01 + -3.2738575309544453e+00 1.8446755729213762e+00 1.1366355646077464e-02 + -3.4412451562058117e+00 1.3360036947975154e+00 7.0754233088885232e-02 + -3.5708091096517194e+00 7.5882571532093657e-01 -9.4659207537128198e-02 + -3.6381492464384215e+00 2.7490413524002272e-01 -4.0443469680209670e-01 + -3.6994015350732496e+00 -8.6833104934985611e-02 -6.2402911511642323e-01 + id 12834 + loc 2.2124892473220825e-01 3.1290546059608459e-02 417 + blend 0.0000000000000000e+00 + interp 3.0177960343663818e-01:2.2608079116753804e-01:8.0588063556037848e-01:2.6003026335527119e-01:1.5446868663452287e+00:1.9660843095567629e-01:2.0958414708267412e+00:3.0177658564060383e-01:2.9123339053014350e+00:2.2511189622418570e-01:3.5854139683703155e+00 + CVs 20 + -2.7603379022782615e-01 -2.0325505392286961e-02 2.1270153723343371e-01 + -4.2838840399892852e-01 -7.2974479310146112e-02 3.7250121444529993e-01 + -5.4065657301755909e-01 -1.3599203499397483e-01 5.3098398918514844e-01 + -6.6837992300549254e-01 -1.8814722854545107e-01 7.0334746680779603e-01 + -8.1291659948738326e-01 -2.2971198044394225e-01 8.8471902501683708e-01 + -9.7404697653960903e-01 -2.6225900977424838e-01 1.0689841178323707e+00 + -1.1505919577630186e+00 -2.8878948358831308e-01 1.2500336578781175e+00 + -1.3406857248970561e+00 -3.1326528968644585e-01 1.4224639997733834e+00 + -1.5413450579769776e+00 -3.3998677613041628e-01 1.5814079448068752e+00 + -1.7475421289604069e+00 -3.7384602508467435e-01 1.7213004244053132e+00 + -1.9547769087220981e+00 -4.2042958253523044e-01 1.8374523167038728e+00 + -2.1656665990975612e+00 -4.8442529612212781e-01 1.9289667484285704e+00 + -2.3875460793650074e+00 -5.6787066065131431e-01 1.9962522286525388e+00 + -2.6215496225146069e+00 -6.6987864690131593e-01 2.0388084000918960e+00 + -2.8602934977538075e+00 -7.8720668177761777e-01 2.0593788501258752e+00 + -3.0967279806991539e+00 -9.1611532941614060e-01 2.0657351402918431e+00 + -3.3305277692425688e+00 -1.0546459459996231e+00 2.0636846609040758e+00 + -3.5654771984348108e+00 -1.2020137749421795e+00 2.0520954771124291e+00 + -3.8244602067946021e+00 -1.3274488233849000e+00 2.0678738117651343e+00 + id 12835 + loc 3.3587887883186340e-01 2.3004770278930664e-01 411 + blend 0.0000000000000000e+00 + interp 3.9571642222000997e-01:3.6930548130119140e-01:2.6461943635411256e-01:2.8195707788463736e-01:1.0006653531205609e+00:3.1291725607646609e-01:1.9641421042763088e+00:3.9571246505578778e-01:2.4078137885605817e+00:2.8779058810482433e-01:3.0254001853606876e+00:3.1016079745622255e-01:3.9376725606317584e+00 + CVs 20 + -5.3792326507738089e-02 1.5516420044583740e-01 -6.1579451469501911e-01 + -1.1500939118263170e-01 2.3187841080567881e-01 -1.0664862679341929e+00 + -1.5630551122572262e-01 2.7859681201787806e-01 -1.4749702713965391e+00 + -1.6425568800811516e-01 3.1476929534931097e-01 -1.8864176806977373e+00 + -1.4040731191786462e-01 3.3797047511311584e-01 -2.2927622434270964e+00 + -8.9842539330683022e-02 3.4946692976901639e-01 -2.6879604405419446e+00 + -2.0161792096794973e-02 3.5439687443943502e-01 -3.0689243273699676e+00 + 6.1571900011379133e-02 3.5862970606377531e-01 -3.4363707939323116e+00 + 1.5261919075495600e-01 3.6479217356740090e-01 -3.7959196390035039e+00 + 2.5309631924434567e-01 3.7245112101284983e-01 -4.1553422791469385e+00 + 3.6015018864958509e-01 3.7557249589536768e-01 -4.5225363462792201e+00 + 4.6702855136409871e-01 3.5491335894289167e-01 -4.9034742752822735e+00 + 5.6365815593251933e-01 2.8713204454871577e-01 -5.2951285576587424e+00 + 6.3982833304186326e-01 1.5957773914348472e-01 -5.6905133552441498e+00 + 6.8614894996388087e-01 -2.7594742845889808e-02 -6.0823061017819402e+00 + 6.8936150052720602e-01 -2.6654424219432871e-01 -6.4620206220452987e+00 + 6.4382673643942767e-01 -5.5055265591519653e-01 -6.8158674189459934e+00 + 5.6782814168794760e-01 -8.7468928941001156e-01 -7.1163518603496829e+00 + 4.5558280963736802e-01 -1.1777439422505362e+00 -7.2229104312747552e+00 + id 12836 + loc 9.9712252616882324e-01 4.9139323830604553e-01 406 + blend 0.0000000000000000e+00 + interp 2.7555873483961344e+00:2.7555773483961343e+00:1.0303253998246487e+00:2.3542779426242428e+00:1.0504817853708688e+00:1.8518440607370108e+00:1.0929096116237482e+00:5.9472716606992249e-01:1.4553818560939780e+00:3.5482296994497792e-01:1.9291145254255224e+00:4.2255570456737984e-01:2.1230970454942915e+00:2.4052392721789528e-01:3.0141371561785912e+00:6.1475159129260248e-01:3.1879532458083588e+00:2.3999844952179448e+00:3.3741268507088544e+00 + CVs 20 + -2.6683453151338166e-01 1.2096059215206978e-01 9.9515636759795537e-02 + -4.3665357339666022e-01 1.5654858873028882e-01 1.7468704783278005e-01 + -5.3608266955963557e-01 1.4143129681607991e-01 2.2911142072498755e-01 + -6.2058534619015859e-01 1.1594886286860787e-01 2.8157592538943088e-01 + -6.8837873154236373e-01 8.4684578347318656e-02 3.3147668680150832e-01 + -7.3927884767161411e-01 5.2571547962530829e-02 3.7847645078366743e-01 + -7.7646069302469500e-01 2.4282322912029253e-02 4.2382217182033455e-01 + -8.0604949233860046e-01 2.7794992958554143e-03 4.7055864225215693e-01 + -8.3053833657552190e-01 -9.5822741371285880e-03 5.1959740557665257e-01 + -8.4440654455706288e-01 -7.7949888366103948e-03 5.6409630660873011e-01 + -8.4572774359473335e-01 1.2896955966330614e-02 5.9596757887117080e-01 + -8.4675187824498865e-01 4.9031101205958549e-02 6.1911468078800014e-01 + -8.6290365400115310e-01 9.0015141497196915e-02 6.4740597392716981e-01 + -8.9827196002241949e-01 1.2856082594972712e-01 6.8827351095369527e-01 + -9.4694848073637206e-01 1.6482702312860592e-01 7.3515564264147160e-01 + -1.0029963080108562e+00 2.0075912808360885e-01 7.7944104036539774e-01 + -1.0656365229430556e+00 2.3586228395573705e-01 8.2508284219831185e-01 + -1.1363276200628472e+00 2.6767215998278832e-01 8.8493769197445427e-01 + -1.2250151601286683e+00 2.1836524505305116e-01 9.8339341027718019e-01 + id 12837 + loc 9.7977578639984131e-01 1.5931004285812378e-01 393 + blend 0.0000000000000000e+00 + interp 3.9228517767589310e-01:3.7522608986593725e-01:2.1398850402268743e-02:7.6845392508005927e-02:8.5444055410380937e-01:3.7528595454887631e-01:1.9710855181417410e+00:3.9228125482411635e-01:2.7342470023291132e+00:3.6228483562879282e-01:3.2306365535328521e+00 + CVs 20 + 1.7665040150741024e-01 2.3879613599831950e-01 8.1363182888162772e-02 + 3.5594835008616665e-01 5.0950212454495802e-01 1.7454057496419828e-01 + 5.1810746635472404e-01 7.9114137207386515e-01 2.6003171968783434e-01 + 6.6168174410537106e-01 1.0739120706153038e+00 3.3200775207453209e-01 + 7.9314863046869699e-01 1.3576451703660608e+00 3.9658349063353288e-01 + 9.2197266301091574e-01 1.6458985291710375e+00 4.6298348562889513e-01 + 1.0607747967092513e+00 1.9394310111670681e+00 5.4421855962736165e-01 + 1.2206085622427776e+00 2.2326338493494564e+00 6.5220119168421897e-01 + 1.4079873007607970e+00 2.5175673350725893e+00 7.9682936419045780e-01 + 1.6255214926457644e+00 2.7852347422930888e+00 9.8958680828136603e-01 + 1.8770608300209379e+00 3.0218172784451376e+00 1.2440417008967051e+00 + 2.1697717034213824e+00 3.1941057018502734e+00 1.5693590643024378e+00 + 2.4868298663494066e+00 3.2369155855444509e+00 1.9249238271228908e+00 + 2.7704599956080846e+00 3.1293838144211827e+00 2.1958671678417225e+00 + 2.9885984632413303e+00 2.9313372023457109e+00 2.3243751573627716e+00 + 3.1399963086605922e+00 2.6996607714982757e+00 2.3541889076604621e+00 + 3.2230726713994993e+00 2.4739223676280662e+00 2.3498930286915387e+00 + 3.3074055618634839e+00 2.2663282982533701e+00 2.3560461870818248e+00 + 3.5970991589070049e+00 2.0823034540245797e+00 2.4173309771276039e+00 + id 12838 + loc 4.1013973951339722e-01 3.4353291988372803e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1570848627170559e-01:3.8018170381331834e-01:3.9062942287143754e-01:3.5169069107594908e-01:1.1182729137956153e+00:4.1570432918684291e-01:1.9973865949909675e+00:3.9663968785747039e-01:2.4366853660596477e+00:3.4099867121662608e-01:3.0027357423663088e+00:3.5332504718824403e-01:3.8928885946053295e+00 + CVs 20 + -9.9068258096981901e-02 3.7864405032232895e-01 -1.3844165299018424e-01 + -2.1427662804283554e-01 7.6009318460338671e-01 -3.0027880864364997e-01 + -3.3847209912785486e-01 1.1464282164069417e+00 -4.5554136321250804e-01 + -4.8096826357446537e-01 1.5348338169556037e+00 -5.9456773533541818e-01 + -6.6030301180869067e-01 1.9205483881942118e+00 -7.1783161645415428e-01 + -8.9453552296804073e-01 2.2881038645526885e+00 -8.2895489324669203e-01 + -1.1906660898827772e+00 2.6073260415517447e+00 -9.3581489744411084e-01 + -1.5363131815806710e+00 2.8439157151584706e+00 -1.0503833452900047e+00 + -1.9044859100127809e+00 2.9721964679531112e+00 -1.1854972382182873e+00 + -2.2580497207760928e+00 2.9838666082448340e+00 -1.3455067758173713e+00 + -2.5624969812036054e+00 2.9014970208932294e+00 -1.5202297626376859e+00 + -2.8147480328762300e+00 2.7657143350856499e+00 -1.6983536756498498e+00 + -3.0489062783487464e+00 2.5953900256339750e+00 -1.8835227919030531e+00 + -3.3144354686953128e+00 2.3768729272805098e+00 -2.0844381907520573e+00 + -3.6456384285133780e+00 2.0959752708588231e+00 -2.2772352297551199e+00 + -4.0494804884978288e+00 1.7746637307109490e+00 -2.3980253321984026e+00 + -4.5073999066206731e+00 1.4705805845282578e+00 -2.3850853175484037e+00 + -4.9593941756954276e+00 1.2300239693663544e+00 -2.2325430584977553e+00 + -5.3055572706555791e+00 1.0229438867810403e+00 -2.0579888483365476e+00 + id 12839 + loc 3.7122738361358643e-01 9.5460706949234009e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3798443876284332e-01:3.1991570989650120e-01:3.8451407059761800e-01:3.1415930102211381e-01:1.0096130264453258e+00:4.3798005891845571e-01:1.8762737048285565e+00:2.2735792429582219e-01:2.2666388844059089e+00:3.5921468463767847e-01:2.9444577910424270e+00:2.4893835835956160e-01:3.6845311090391029e+00 + CVs 20 + 1.2389259346029491e-01 2.8024975547023734e-01 -7.5847271271681602e-02 + 2.2499317494185747e-01 5.6920379417466593e-01 -1.5141581675815327e-01 + 3.2405410376288613e-01 8.6837102066287108e-01 -2.3184691878519442e-01 + 4.2953098652739213e-01 1.1716695327372022e+00 -3.1504527824602679e-01 + 5.4208335162731502e-01 1.4845065527826573e+00 -4.0171098980715769e-01 + 6.6184272119606935e-01 1.8194485957066036e+00 -5.0328684613974117e-01 + 7.8093142623977008e-01 2.1909445720202747e+00 -6.5281897348222517e-01 + 8.7898019820587114e-01 2.6010456663116881e+00 -9.0422505824099897e-01 + 9.3325667691659631e-01 3.0132041149884201e+00 -1.3069462172417003e+00 + 9.2950008069592627e-01 3.3476475143446045e+00 -1.8674945437561317e+00 + 8.6414264168275601e-01 3.5260794648625318e+00 -2.5330238143918784e+00 + 7.5033036242321960e-01 3.5212917011899365e+00 -3.2224692905706935e+00 + 6.2299856684002686e-01 3.3619128171834936e+00 -3.8758296524469169e+00 + 5.2403736790965150e-01 3.1016543621394104e+00 -4.4702655483287081e+00 + 4.8019268955826822e-01 2.7867348051878360e+00 -5.0104972821393527e+00 + 5.0367536950994696e-01 2.4310148486126097e+00 -5.5286141660592705e+00 + 6.3541166578505015e-01 2.0311290873773449e+00 -6.0553423887295450e+00 + 9.5926280463600122e-01 1.6699951478214474e+00 -6.5257434506041045e+00 + 1.3232332635172319e+00 1.6023357065859238e+00 -6.7194869452165316e+00 + id 12840 + loc 4.1267293691635132e-01 6.2983715534210205e-01 403 + blend 0.0000000000000000e+00 + interp 4.6804333558188072e-01:2.9425651433436989e-01:6.8443351743414227e-01:3.8182963765286121e-01:1.0938953517991696e+00:4.1043437933103433e-01:1.9962447189735397e+00:4.4015406660392759e-01:2.5421073655252604e+00:4.6803865514852494e-01:2.9905576677860690e+00:3.9656445509173810e-01:3.3497512104852216e+00:4.1940303689562153e-01:3.9938370196636814e+00 + CVs 20 + 8.9630681824563352e-02 1.7823595155803590e-01 -2.6029643514810002e-01 + 1.6914671050249572e-01 3.6889038320722067e-01 -5.1186228698489800e-01 + 2.3695770002170297e-01 5.5873657257488363e-01 -7.6643177884174829e-01 + 2.8351792257921360e-01 7.5210717752812539e-01 -1.0300421621417137e+00 + 3.0079716398271000e-01 9.4720819343752038e-01 -1.3025469707148192e+00 + 2.7956741943895391e-01 1.1437217483635145e+00 -1.5825159327576936e+00 + 2.1222200877242703e-01 1.3397565146306203e+00 -1.8665012633393334e+00 + 9.6010955239579920e-02 1.5310281169950355e+00 -2.1490830227102085e+00 + -7.0422797996414710e-02 1.7124181559632592e+00 -2.4249551102184865e+00 + -2.9300488231233279e-01 1.8782387436106567e+00 -2.6882381895528380e+00 + -5.7880680223408765e-01 2.0213548864312472e+00 -2.9299039875505999e+00 + -9.2785125402061408e-01 2.1341602383663383e+00 -3.1372661378732589e+00 + -1.3339328551826068e+00 2.2107158518878527e+00 -3.2958140540843170e+00 + -1.7884609183273055e+00 2.2472303530318856e+00 -3.3905603249547611e+00 + -2.2771985386571099e+00 2.2434216487615739e+00 -3.4069408199804467e+00 + -2.7740629311297140e+00 2.2018734585502266e+00 -3.3368799404169045e+00 + -3.2386137238151633e+00 2.1303810795848506e+00 -3.1899841188327476e+00 + -3.6333375238911563e+00 2.0479151906971489e+00 -2.9936995967172679e+00 + -3.7654011010390716e+00 2.0909397366595281e+00 -2.8975077808519289e+00 + id 12841 + loc 4.6674731373786926e-01 7.0199769735336304e-01 395 + blend 0.0000000000000000e+00 + interp 4.3884758121208128e-01:2.6070666115240781e-01:3.4512083446897079e-01:3.9384543832148045e-01:9.8740636119678571e-01:4.3884319273626921e-01:1.6531411617029836e+00:3.4311785924117782e-01:2.1023524054416121e+00:2.8691827245074547e-01:2.9561578256063319e+00:3.6143803228693722e-01:3.9193842752438606e+00 + CVs 20 + 4.5453159942311083e-01 1.4564417832232013e-01 -3.4150390340549386e-01 + 8.1537515758995727e-01 2.2704421552626525e-01 -6.1885677883603607e-01 + 1.1443905968915986e+00 2.8938584493566566e-01 -8.7179920060373650e-01 + 1.4645629944726342e+00 3.5209808085361172e-01 -1.1148789061399791e+00 + 1.7727326578567788e+00 4.1452838309830220e-01 -1.3468965066848959e+00 + 2.0683968956735015e+00 4.7530357783221699e-01 -1.5687470202464644e+00 + 2.3525623415360211e+00 5.3426716776514294e-01 -1.7837478154675801e+00 + 2.6274994468672288e+00 5.9414334227151566e-01 -1.9984438849538746e+00 + 2.9009725249444802e+00 6.5488343769356505e-01 -2.2190623641236638e+00 + 3.1849227805078320e+00 7.0967746005181831e-01 -2.4496232727139646e+00 + 3.4862509874694374e+00 7.4272446423604954e-01 -2.6969102045838089e+00 + 3.7989919532605501e+00 7.3139860512125643e-01 -2.9729399638327973e+00 + 4.1102617840516258e+00 6.5657337669238514e-01 -3.2834082310297830e+00 + 4.4113279579822979e+00 5.1014474723497916e-01 -3.6183674259927976e+00 + 4.6960154738216353e+00 2.9418175078880360e-01 -3.9604760418854443e+00 + 4.9566553652058793e+00 1.6863703192874446e-02 -4.2982816137688440e+00 + 5.1851546652564853e+00 -3.1522819947451142e-01 -4.6242169849201140e+00 + 5.3720216323005925e+00 -6.9209332886926811e-01 -4.9200724531172888e+00 + 5.4784713226593320e+00 -1.0303611149308418e+00 -5.1119875204535106e+00 + id 12842 + loc 7.7708345651626587e-01 5.9629750251770020e-01 409 + blend 0.0000000000000000e+00 + interp 5.1944233902660664e-01:3.7185175728233905e-01:1.9384140686631823e-01:3.5691481778016809e-01:9.9056383680416582e-01:3.8728581796451578e-01:1.5046491221166445e+00:5.1943714460321644e-01:1.9729479172690279e+00:2.8517992856796137e-01:2.7510179350582211e+00:3.9723329528148960e-01:3.0864434258874978e+00:3.7482740974604384e-01:3.8001479196706809e+00 + CVs 20 + 3.5871104676559168e-01 1.6372304884150918e-01 -1.4122351667403243e-01 + 6.6639963123301604e-01 3.0260781137596049e-01 -2.7443279699377054e-01 + 9.6243561352191920e-01 4.3903598689319473e-01 -3.9264798318255500e-01 + 1.2659430845568780e+00 5.8373038667573729e-01 -4.9227049201420947e-01 + 1.5760045898760910e+00 7.3300470576493448e-01 -5.7387152659103813e-01 + 1.8920538833175371e+00 8.8287858341047853e-01 -6.3961612519814315e-01 + 2.2168760678761803e+00 1.0307394937614027e+00 -6.9312652035529621e-01 + 2.5583452213544016e+00 1.1720868387506238e+00 -7.3823131872671199e-01 + 2.9274872030478445e+00 1.2958883841132840e+00 -7.7648568883467328e-01 + 3.3329515639155138e+00 1.3848231013969459e+00 -8.0938259427552239e-01 + 3.7715587055866187e+00 1.4178073021750883e+00 -8.4339985398879957e-01 + 4.2196184589023265e+00 1.3763141749124663e+00 -8.8739854991111877e-01 + 4.6440962916200386e+00 1.2555283676779405e+00 -9.4477900979119278e-01 + 5.0228997868392220e+00 1.0640081255717799e+00 -1.0136054649719595e+00 + 5.3443631839533303e+00 8.1657886639959809e-01 -1.0923750550216944e+00 + 5.6005206637529508e+00 5.3287407295845224e-01 -1.1828214564287727e+00 + 5.7853282710064367e+00 2.3487746887373984e-01 -1.2851257350400915e+00 + 5.8932212961432962e+00 -5.8741713971514731e-02 -1.3882046951086648e+00 + 5.8481806996198848e+00 -3.0676045249155015e-01 -1.4514378696143355e+00 + id 12843 + loc 5.8201247453689575e-01 5.3123790025711060e-01 373 + blend 0.0000000000000000e+00 + interp 4.0230205782601031e-01:3.0069131373720021e-01:1.3672734542223264e-01:3.2183863862067108e-01:9.4726104466286087e-01:4.0229803480543208e-01:1.8007926878075633e+00:3.5417891746137431e-01:2.6030337388122811e+00:3.8492438399544326e-01:3.2790338007255988e+00 + CVs 20 + -3.0705160460816822e-01 5.4110398814330785e-01 -1.9756702272078353e-01 + -5.5027956196392036e-01 1.0124375416190476e+00 -4.3575889695474590e-01 + -7.2278524546397271e-01 1.4052122117536490e+00 -6.9617344251627955e-01 + -8.2023761318804900e-01 1.7180988560641088e+00 -9.6360221909479360e-01 + -8.6363163124201625e-01 1.9523557394248134e+00 -1.2304963030662925e+00 + -8.8550270675211884e-01 2.0976378948486452e+00 -1.4852207346852460e+00 + -9.0348582533897281e-01 2.1540198030631288e+00 -1.7101605829417352e+00 + -9.2413059685206156e-01 2.1571682939652264e+00 -1.9044301233872833e+00 + -9.5372045173029452e-01 2.1399071850328997e+00 -2.0800128524941006e+00 + -9.9513052637829591e-01 2.1179878223800555e+00 -2.2384891153246977e+00 + -1.0455409701741121e+00 2.1033954013824880e+00 -2.3652923203242024e+00 + -1.1014824742250844e+00 2.1168168783344261e+00 -2.4448677743805116e+00 + -1.1687436694032238e+00 2.1601650571473194e+00 -2.5275570044468152e+00 + -1.2518762687715790e+00 2.1456950521570315e+00 -2.7093187996609864e+00 + -1.3717379728131254e+00 2.0063867764393368e+00 -2.9813630502138806e+00 + -1.5633390414021959e+00 1.8167854351494903e+00 -3.2706261343799374e+00 + -1.8143217693886999e+00 1.6750259854726268e+00 -3.5317503674939439e+00 + -2.0817032638485755e+00 1.6326430633720324e+00 -3.7344169610292250e+00 + -2.4514474164012663e+00 1.8128501989636889e+00 -3.7911034856719619e+00 + id 12844 + loc 4.7135818749666214e-02 9.4929957389831543e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4729482752139482e-01:3.4090415715868189e-01:2.7026206436309241e-01:2.3963798363828082e-01:9.9729028829077282e-01:2.9537610744653503e-01:1.6291030329389684e+00:4.4729035457311961e-01:1.9883809660738889e+00:4.4717092784627011e-01:2.4878745815620449e+00:3.3921954630541140e-01:2.9734953048449699e+00:3.5235885980514980e-01:3.4425230251896326e+00 + CVs 20 + -1.2681965226284711e-01 2.1611038061798782e-01 2.9260333243985814e-01 + -2.1192445138521168e-01 3.2579137524402274e-01 4.2229101750282966e-01 + -2.7535125113797554e-01 3.8335270901764673e-01 4.7150670356984054e-01 + -3.3195774696482588e-01 4.2967713349663134e-01 5.1645273055716001e-01 + -3.8169845643021544e-01 4.6987236987067560e-01 5.5590995699721180e-01 + -4.2946194631164747e-01 5.0895803532714101e-01 5.8901844298579187e-01 + -4.8504183616403457e-01 5.4898960793801632e-01 6.1410499043088973e-01 + -5.5952949774588190e-01 5.8785162608357755e-01 6.2795149213017754e-01 + -6.6179435661750263e-01 6.2072994321603969e-01 6.2720215026848358e-01 + -7.9713739893459967e-01 6.4264785058548890e-01 6.0957841854397077e-01 + -9.6686582521477227e-01 6.5078023538264085e-01 5.7498928480468159e-01 + -1.1686012492404940e+00 6.4448130418704475e-01 5.2604471234838990e-01 + -1.3993782436350868e+00 6.2011999788419558e-01 4.6466216274533101e-01 + -1.6603809214404213e+00 5.6480018404511423e-01 3.8796200671402337e-01 + -1.9565169225761923e+00 4.6523404452876660e-01 2.9522450163274150e-01 + -2.2906744918371027e+00 3.2913924847615234e-01 1.9541028182480394e-01 + -2.6587762928594803e+00 1.7988991108078073e-01 1.0309880852735491e-01 + -3.0471294775511066e+00 3.6289097773655299e-02 3.1666563972489639e-02 + -3.3471877118372815e+00 -2.4575448444115078e-02 -7.8960578698847126e-03 + id 12845 + loc 1.5870249271392822e-01 1.1659185588359833e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0297653775871489e-01:3.3197559349316136e-01:5.8955846254675115e-01:3.1329312623828592e-01:1.1517507379670917e+00:3.5551038641667310e-01:1.9057180908030156e+00:4.0297250799333734e-01:2.7162874864684587e+00:3.8090258737877580e-01:3.0286782733349535e+00:3.5700736595596821e-01:3.6368735505391112e+00 + CVs 20 + 2.0231020218858936e-01 3.7186168046788293e-01 -1.5642397450918769e-01 + 3.2718733931729327e-01 6.9399930774275220e-01 -3.2942509453180191e-01 + 4.2982969733033816e-01 9.9567662311535599e-01 -5.1993634058398475e-01 + 5.2822780649334522e-01 1.2858192102152617e+00 -7.2977338327447028e-01 + 6.1543827954958075e-01 1.5571901676839777e+00 -9.5852813656880276e-01 + 6.7939462540972284e-01 1.8033455984095743e+00 -1.2072274085740249e+00 + 7.0491024083650689e-01 2.0161796761367787e+00 -1.4773144415678876e+00 + 6.8152449875723542e-01 2.1850329356846374e+00 -1.7674449630256226e+00 + 6.0772111638524873e-01 2.2977634984530080e+00 -2.0720016578655072e+00 + 4.9269800331558977e-01 2.3451378281341579e+00 -2.3813895917764802e+00 + 3.5342086752543656e-01 2.3282998047063224e+00 -2.6861659578122938e+00 + 2.0443906906830467e-01 2.2584710663745744e+00 -2.9830490865843724e+00 + 5.4890982040116554e-02 2.1495544933099828e+00 -3.2726285748830932e+00 + -8.6178728592211096e-02 2.0163980146546834e+00 -3.5537774057308607e+00 + -2.0315044229224705e-01 1.8806037656117471e+00 -3.8195688738937670e+00 + -2.7911752768778103e-01 1.7816340632316015e+00 -4.0559752586947120e+00 + -3.3959821466777235e-01 1.7528878665105476e+00 -4.2582325845786704e+00 + -4.0645223124509144e-01 1.6940164021646131e+00 -4.4528168056620530e+00 + -3.2703313559785396e-01 1.5274199369537889e+00 -4.6174693015218926e+00 + id 12846 + loc 9.5418953895568848e-01 7.5780606269836426e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9858472138864731e-01:2.5675088632012150e-01:6.3711370320652261e-01:2.5915628963905851e-01:1.7306079852911527e+00:3.2086230161231716e-01:2.1377836037963625e+00:3.5258938567328768e-01:2.3210224904944541e+00:3.9858073554143342e-01:2.9964762591716205e+00:3.1028317496431074e-01:3.6220444383823036e+00 + CVs 20 + 2.1231057485314456e-01 3.6222028679406049e-01 -1.0355616896016218e-01 + 4.3488895688933404e-01 7.0633930846876747e-01 -2.4294891024549919e-01 + 6.5972499684111396e-01 1.0338742149625832e+00 -3.8608988430776897e-01 + 8.8061252938317358e-01 1.3397762208219044e+00 -5.1769140683451054e-01 + 1.0903168103191438e+00 1.6139007806810128e+00 -6.3783475198708173e-01 + 1.2772418412247077e+00 1.8431878706837359e+00 -7.5289989029477300e-01 + 1.4332492447565541e+00 2.0260183505715545e+00 -8.6724059577708434e-01 + 1.5549480137348664e+00 2.1766720244645636e+00 -9.6772027839029739e-01 + 1.6569635327141092e+00 2.3302803658966837e+00 -1.0543027297011061e+00 + 1.7575618785154841e+00 2.4813867208212881e+00 -1.1892414665811086e+00 + 1.8352737139788204e+00 2.5738894930111496e+00 -1.3987464778156202e+00 + 1.8497762199217549e+00 2.5783751531363537e+00 -1.6459605976422258e+00 + 1.7843821579447809e+00 2.4858663274268578e+00 -1.8781011090597470e+00 + 1.6698578222636304e+00 2.2825996056447897e+00 -2.0355081659399419e+00 + 1.5517045418179229e+00 1.9318794640613308e+00 -2.0579839814276859e+00 + 1.4610701664851788e+00 1.3412170037032562e+00 -1.9814292586459226e+00 + 1.4740296134966955e+00 4.2292114295921890e-01 -2.0628261530858216e+00 + 1.6421177837836536e+00 -3.1503446861905227e-01 -2.5145050636002781e+00 + 1.5666714352195901e+00 2.6369887654840940e-02 -2.5913814802577249e+00 + id 12847 + loc 2.3111447691917419e-01 6.9304686784744263e-01 264 + blend 0.0000000000000000e+00 + interp 1.2512364773174163e+00:8.5833086803502978e-01:1.0413866919062349e+00:6.9408954366964970e-01:1.4011280915872102e+00:3.7674490834546714e-01:1.9999676244217746e+00:4.3685563001018729e-01:2.7097084501069100e+00:5.4140887822697092e-01:2.9948625792121346e+00:1.0100438753930117e+00:3.0002842426991796e+00:1.2512264773174162e+00:3.0008885403127001e+00 + CVs 20 + -8.1680316236120154e-01 4.0776843242513294e-01 -1.0345034554131871e-01 + -1.4066406947948980e+00 6.4797534173186389e-01 -9.4636693617050849e-02 + -1.9473432505146488e+00 7.5491734274461497e-01 1.2338158057865922e-02 + -2.4922376279810647e+00 7.8516496039683947e-01 2.0186875223779066e-01 + -3.0382049258534995e+00 8.1103170668057278e-01 4.4667337473511537e-01 + -3.6126993039095141e+00 8.8228068726761766e-01 7.0627341803910215e-01 + -4.2376152166551293e+00 1.0024552242113010e+00 9.1859394995128163e-01 + -4.9008505584907232e+00 1.1560661263568366e+00 1.0234980386825148e+00 + -5.5714316696299715e+00 1.3400710576979422e+00 9.7851595998667507e-01 + -6.2151336337134113e+00 1.5566745910205055e+00 7.5203287986446221e-01 + -6.8180990445430796e+00 1.7842962769238153e+00 3.4019098775538392e-01 + -7.3829700119725175e+00 1.9755469290058805e+00 -2.3455071498910596e-01 + -7.8911889756309934e+00 2.0548272810558479e+00 -9.4233508589931092e-01 + -8.2910385946537843e+00 1.9554182917062484e+00 -1.7270728155378698e+00 + -8.5022131044119948e+00 1.6806038870579407e+00 -2.5494502602546669e+00 + -8.3693596029878137e+00 1.2432651123317320e+00 -3.4011291409624569e+00 + -7.9188485578071157e+00 5.3805000996989616e-01 -4.1633121255711814e+00 + -7.5115618468030059e+00 -3.7391248454810144e-01 -4.5090758052367637e+00 + -7.3323895400640140e+00 -1.0442342479694515e+00 -4.3908012234626845e+00 + id 12848 + loc 1.1340785771608353e-01 8.8674455881118774e-01 377 + blend 0.0000000000000000e+00 + interp 5.9317798875110528e-01:5.1821056534771304e-01:1.8422754447764222e-01:5.9317205697121778e-01:8.3141965180084187e-01:5.4461986974667620e-01:1.0155632633849876e+00:3.5541734955062682e-01:1.5638205490755033e+00:4.8432606391542066e-01:1.9744878019003460e+00:4.5395240086438560e-01:2.4519335432481775e+00:4.1444105058841146e-01:2.9882105835966994e+00:4.4209808257309763e-01:3.6092411833856959e+00:2.6708232783510566e-01:3.9821685752162366e+00 + CVs 20 + -6.6639830876778106e-01 3.5473083656593052e-01 -5.3083234174420424e-01 + -1.2298299866424629e+00 5.5038341671472435e-01 -9.1226326383384193e-01 + -1.7659913277948691e+00 6.5242909408837169e-01 -1.2307573928418489e+00 + -2.3022802696542231e+00 6.9521618538174690e-01 -1.5340709262842256e+00 + -2.8151677296927029e+00 6.8198507262506602e-01 -1.8347792395570566e+00 + -3.2862381164893750e+00 6.0496496928437438e-01 -2.1339194010307665e+00 + -3.7045607250812314e+00 4.4969115794628078e-01 -2.4184086347932046e+00 + -4.0607241577381608e+00 2.1336276504641694e-01 -2.6694863020446071e+00 + -4.3474352362780326e+00 -8.7233683036705756e-02 -2.8721597923628259e+00 + -4.5606155012831504e+00 -4.1885324039228156e-01 -3.0189355675930969e+00 + -4.6971733145358776e+00 -7.3374259224184213e-01 -3.1057916656855906e+00 + -4.7633883980873630e+00 -9.7794161108923872e-01 -3.1385556760872535e+00 + -4.7918603592783438e+00 -1.1368825022773890e+00 -3.1547788895934783e+00 + -4.8303584508250790e+00 -1.3013514373799313e+00 -3.2129624187896484e+00 + -4.8976743433793430e+00 -1.5996220381917836e+00 -3.3402443127657575e+00 + -4.9896172706940813e+00 -2.0444593374447102e+00 -3.5424603620676205e+00 + -5.1062526469679623e+00 -2.5562474704782829e+00 -3.8230253499362004e+00 + -5.2573912140213208e+00 -3.0412111963451576e+00 -4.1514135177377369e+00 + -5.4360120656082191e+00 -3.2717398447820711e+00 -4.4155532475657999e+00 + id 12849 + loc 6.7310428619384766e-01 7.7628600597381592e-01 411 + blend 0.0000000000000000e+00 + interp 4.7470553443320268e-01:2.9502699735896698e-01:7.7216130900833124e-01:4.3839641540989915e-01:1.1926895210211856e+00:3.1042661757213219e-01:1.8961819549672512e+00:3.0230155799466363e-01:2.9019792465230205e+00:4.7470078737785837e-01:3.4703097588742029e+00:3.4026141945154448e-01:3.9971624706280791e+00 + CVs 20 + 8.9475244694529243e-01 2.3686089277089331e-01 -1.3840453921356521e-01 + 1.5542101315079055e+00 3.4459728831102882e-01 -2.3522118290158081e-01 + 2.1636507913257015e+00 4.0213792417226013e-01 -3.1127861946273561e-01 + 2.8103846296604860e+00 4.4108361216833564e-01 -3.7858031235495249e-01 + 3.4812222197498994e+00 4.4871669150736809e-01 -4.4206636459220089e-01 + 4.1606767281305794e+00 4.1461679538652796e-01 -5.0903177070045236e-01 + 4.8324806404776002e+00 3.3037149163962065e-01 -5.8388677483288076e-01 + 5.4810487536179471e+00 1.8627775334246066e-01 -6.6872696971897894e-01 + 6.0903419193115997e+00 -2.8243701186434711e-02 -7.7616784857058541e-01 + 6.6404441784368728e+00 -3.1597763484215791e-01 -9.2051146041708010e-01 + 7.1098226166589180e+00 -6.6592327351652547e-01 -1.1089446169394919e+00 + 7.4909882081771197e+00 -1.0573893236408065e+00 -1.3336209575195501e+00 + 7.7957200363190724e+00 -1.4746657749756851e+00 -1.5785941566159107e+00 + 8.0354848856223775e+00 -1.9027627236237632e+00 -1.8304300286755535e+00 + 8.2151179430663923e+00 -2.3142000266598544e+00 -2.0777704401382984e+00 + 8.3486581141768816e+00 -2.6952926720073460e+00 -2.3093092896263308e+00 + 8.4538192337859144e+00 -3.0501787557492781e+00 -2.5164712286277053e+00 + 8.5428887298972889e+00 -3.3671066058457693e+00 -2.6945220865938344e+00 + 8.6061829011970108e+00 -3.5525381311492072e+00 -2.8373698806276497e+00 + id 12850 + loc 3.4235775470733643e-01 7.9317277669906616e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6587161203696642e-01:3.4475446487012301e-01:9.6246107202043518e-02:3.3243276388167059e-01:9.7671609477236754e-01:3.4232813265951412e-01:1.5660791881129792e+00:3.2509597934845141e-01:2.1279987210335221e+00:4.6586695332084604e-01:2.8245302229072236e+00:3.3486241994377108e-01:3.3031491864965212e+00 + CVs 20 + 5.1484809252967736e-03 3.0981613987667145e-01 -2.1616635379226777e-02 + 3.0331098121372212e-02 6.3239828526672659e-01 -6.4272659940902768e-02 + 8.2464829238280524e-02 9.5926527469142975e-01 -1.0721245984505320e-01 + 1.7024300588210101e-01 1.2965144106354574e+00 -1.4397966306504290e-01 + 2.9601948747839363e-01 1.6563239184830878e+00 -1.8708710565550388e-01 + 4.6024668680523362e-01 2.0496587417782273e+00 -2.5633443464142164e-01 + 6.6577414491323472e-01 2.4653105004648062e+00 -3.7738060992500633e-01 + 9.1562831016687551e-01 2.8611734358047141e+00 -5.6467689083352157e-01 + 1.2090185640966347e+00 3.1829741865445675e+00 -8.0149222739163728e-01 + 1.5399604407377596e+00 3.3927975573977212e+00 -1.0456668467734211e+00 + 1.8964490380807544e+00 3.4803697336648942e+00 -1.2550479541169310e+00 + 2.2626125404906960e+00 3.4538406751193738e+00 -1.4043386652507115e+00 + 2.6477526886275147e+00 3.3337433419555378e+00 -1.4998188339390011e+00 + 3.1163981598986759e+00 3.1350520826799939e+00 -1.5845996188087663e+00 + 3.7324300219534674e+00 2.8271147348520684e+00 -1.7247174457801373e+00 + 4.4575979007732869e+00 2.3268956968659711e+00 -1.9997729629903511e+00 + 5.1371947953005437e+00 1.5968957793084859e+00 -2.5125745335007053e+00 + 5.5476849354761546e+00 8.2718893590406639e-01 -3.2630039605936947e+00 + 5.6169651063601718e+00 5.5888394816431819e-01 -3.5617819376064794e+00 + id 12851 + loc 2.0606911182403564e-01 4.5292943716049194e-01 395 + blend 0.0000000000000000e+00 + interp 4.5673333990389392e-01:4.5672877257049488e-01:2.7471454454571675e-01:2.8733219165362939e-01:1.1769789527459336e+00:3.0620827158500219e-01:2.0137687235917197e+00:3.1340420900727700e-01:2.7489959513094200e+00:3.1442368011826516e-01:3.4328437687340232e+00 + CVs 20 + -2.3607042387810395e-01 1.5882220401952449e-01 -4.2712009500862397e-01 + -4.5478853771691630e-01 2.7155413175430210e-01 -8.1329510166376995e-01 + -6.6983101440695370e-01 3.6203815266846051e-01 -1.1900817148362408e+00 + -8.8547718801070174e-01 4.3449435292194138e-01 -1.5713120330008792e+00 + -1.0996104294241487e+00 4.8263575191367336e-01 -1.9569545757583930e+00 + -1.3140883146835245e+00 5.0087575769995762e-01 -2.3459684105632985e+00 + -1.5297902660474836e+00 4.8070055873224327e-01 -2.7343731562672358e+00 + -1.7433426436745205e+00 4.0766504400245873e-01 -3.1140511649592151e+00 + -1.9528502657067821e+00 2.6572209056145257e-01 -3.4721734236989006e+00 + -2.1625161325974847e+00 4.3709480135783796e-02 -3.7873314670576503e+00 + -2.3733908935516919e+00 -2.5664543708906518e-01 -4.0340686354317175e+00 + -2.5772847692035730e+00 -6.1831475690822257e-01 -4.2048722915480852e+00 + -2.7704428349212220e+00 -1.0222309846728925e+00 -4.3120371208431667e+00 + -2.9612105095914933e+00 -1.4557400611179019e+00 -4.3638909155333643e+00 + -3.1569792359244055e+00 -1.9075484036112966e+00 -4.3574045512064838e+00 + -3.3459837998915440e+00 -2.3649047762753161e+00 -4.2872846681806358e+00 + -3.5078508312938612e+00 -2.8171465732303815e+00 -4.1595767512529074e+00 + -3.6552799302795731e+00 -3.2635557899298564e+00 -4.0067168892156513e+00 + -3.9636337361804799e+00 -3.7474599902614631e+00 -4.0054140564697089e+00 + id 12852 + loc 1.8631654977798462e-01 5.7499396800994873e-01 409 + blend 0.0000000000000000e+00 + interp 4.9324727192893758e-01:3.9111132976704011e-01:1.5606245394856888e-03:2.4367783182903152e-01:6.0226871569053031e-01:3.6967436548836957e-01:1.0718848647637484e+00:2.7828295140968029e-01:1.7367134452425237e+00:3.8304003315924212e-01:2.0493147723060949e+00:4.9324233945621831e-01:2.8511909864669862e+00:3.6189967309178728e-01:3.0321645857550568e+00:3.4988005974516900e-01:3.6476799371960729e+00 + CVs 20 + 4.4453275592580416e-01 2.7890825743780634e-01 -2.1848117492448366e-01 + 8.1883837040976537e-01 5.1049013992845249e-01 -4.2556196814945912e-01 + 1.2010879303987410e+00 7.3552827619097816e-01 -6.4855446037130515e-01 + 1.6122700960010226e+00 9.5559413651432568e-01 -9.1028039917238446e-01 + 2.0301669381328082e+00 1.1414173039608446e+00 -1.2359369695779963e+00 + 2.4272818615945688e+00 1.2584892789292805e+00 -1.6465229460502897e+00 + 2.7832938707353678e+00 1.2675555345403549e+00 -2.1437943068736796e+00 + 3.0934944223866303e+00 1.1271125206576855e+00 -2.7049594284160334e+00 + 3.3649166911675614e+00 8.0049029282036877e-01 -3.2747038223479681e+00 + 3.5942632203647831e+00 2.7632764286853084e-01 -3.7637784203350444e+00 + 3.7642604614915678e+00 -3.9956854575164180e-01 -4.0879405362096932e+00 + 3.8829080958845577e+00 -1.1476949418346181e+00 -4.2689943818364604e+00 + 3.9921831664805905e+00 -1.9308187247183841e+00 -4.4319884245409078e+00 + 4.1318647938640982e+00 -2.7248115430863393e+00 -4.6961090808232653e+00 + 4.3248616087280434e+00 -3.4793934321499531e+00 -5.1072111883338858e+00 + 4.5790775036045890e+00 -4.1510743667240115e+00 -5.6048681295559204e+00 + 4.8802379755271827e+00 -4.7264166895758324e+00 -6.0985033372798512e+00 + 5.1789296478342628e+00 -5.2048504517483227e+00 -6.5647631981744921e+00 + 5.3846899494156988e+00 -5.5915339128217205e+00 -7.0454900066515194e+00 + id 12853 + loc 1.9087237119674683e-01 3.3780103549361229e-03 1069 + blend 0.0000000000000000e+00 + interp 3.8010010619130502e-01:2.9887784638651277e-01:2.8316228770530216e-01:2.5394568370071763e-01:1.2939779719221254e+00:2.8937214318317112e-01:2.0186122456653179e+00:3.8009630519024312e-01:2.6385461436283473e+00:3.1124724115679342e-01:3.0274310231362938e+00:3.0158945091192563e-01:3.8787829017478970e+00 + CVs 20 + -2.8071412542174179e-01 2.0572923676558547e-01 4.6943101708254997e-02 + -5.2587141276739457e-01 4.1453133563261840e-01 1.2016349179541080e-01 + -7.4027917033175639e-01 6.4581649205121217e-01 2.3728171354175431e-01 + -9.5133693899440630e-01 9.2055844020910937e-01 3.8302891333475519e-01 + -1.2086345172860793e+00 1.2313269890521157e+00 4.8995545802184942e-01 + -1.5437370297710185e+00 1.5345480678296475e+00 4.9973467718569209e-01 + -1.9667454828902899e+00 1.7789625543871197e+00 3.7719454444253642e-01 + -2.4508291438406280e+00 1.8991688916992249e+00 6.7179932065116743e-02 + -2.8651919300389457e+00 1.8273505018236018e+00 -4.4514356873980310e-01 + -3.0724784858536895e+00 1.5828760613087554e+00 -1.0290633059912624e+00 + -3.0807551318112321e+00 1.2337409920667071e+00 -1.5670289727299260e+00 + -2.9348981544917914e+00 8.0722429812217944e-01 -2.0084095337220509e+00 + -2.7165635874821108e+00 3.7027047636867028e-01 -2.2935794045953388e+00 + -2.5780412426330264e+00 5.8832107494179775e-02 -2.4485210095140673e+00 + -2.5820337389686179e+00 -6.4993878113429493e-02 -2.5525567879444018e+00 + -2.6658390081737080e+00 -5.3073356324485399e-02 -2.6141918220980491e+00 + -2.7724884974051069e+00 2.8315935856549679e-02 -2.6046759364874061e+00 + -2.8475729793875999e+00 8.3093588228741577e-02 -2.6149264094044455e+00 + -2.8839793470578448e+00 1.3567790934837864e-01 -2.9120207937946878e+00 + id 12854 + loc 5.0771415233612061e-01 9.8290756344795227e-02 393 + blend 0.0000000000000000e+00 + interp 3.3141235636068250e-01:2.6520919692397910e-01:2.5093724603675871e-02:2.5762818853152730e-01:1.0067828318553911e+00:2.5570677824327104e-01:1.9791839178306527e+00:3.3140904223711892e-01:2.4397901886640581e+00:2.6343813897932200e-01:3.2320607315681533e+00 + CVs 20 + 4.3849290690924325e-01 3.9557385209174661e-01 1.1543187504763038e-01 + 8.2575743993910111e-01 8.0579179719051819e-01 2.5697274257275604e-01 + 1.1569003881906432e+00 1.2336145027747676e+00 4.3063674309487820e-01 + 1.4331678793391731e+00 1.6479389051098277e+00 6.5722526819345306e-01 + 1.6597824065948830e+00 2.0106028826857227e+00 9.5062032439707178e-01 + 1.8461814587783383e+00 2.3122757665900511e+00 1.3036799673697299e+00 + 2.0038417783683311e+00 2.5613779954710085e+00 1.6977749844562597e+00 + 2.1500464986384094e+00 2.7640061515263072e+00 2.1150404525493220e+00 + 2.3050229067817711e+00 2.9188877355672758e+00 2.5421939074156810e+00 + 2.4834031508964793e+00 3.0196456736205652e+00 2.9679865371475298e+00 + 2.6915253732832678e+00 3.0568390316083089e+00 3.3827428159410426e+00 + 2.9284355066435888e+00 3.0179802689295827e+00 3.7785847179114613e+00 + 3.1803822168490941e+00 2.8897891091035799e+00 4.1441402836303149e+00 + 3.4190953779683397e+00 2.6693226476556395e+00 4.4590029349758078e+00 + 3.6136667166074212e+00 2.3676454183349023e+00 4.6964436932556302e+00 + 3.7478834513781534e+00 1.9874308162797323e+00 4.8302116817709839e+00 + 3.8424852054516156e+00 1.5273069400209260e+00 4.8317253049995745e+00 + 3.9541467571581572e+00 1.0272785159675863e+00 4.6622492875459072e+00 + 4.1142934596595984e+00 5.8071370514246379e-01 4.2826784518090246e+00 + id 12855 + loc 1.5560902655124664e-01 4.3393203616142273e-01 373 + blend 0.0000000000000000e+00 + interp 4.0795755959302132e-01:3.1955905400613721e-01:5.1086023780207435e-01:3.9426824727195359e-01:1.0884420838899491e+00:4.0795348001742543e-01:1.9972940053787127e+00:3.8782871435344235e-01:2.2948220138861322e+00:2.7647950868231519e-01:2.9484065995338478e+00:3.4683806246328663e-01:3.8336628952501997e+00 + CVs 20 + -1.9250202484070517e-01 8.6038163781888399e-01 3.6609941625640180e-01 + -4.2323432969949210e-01 1.7710462669900284e+00 6.5084807319644389e-01 + -7.2878245099051742e-01 2.7089212922836321e+00 7.5136374728765398e-01 + -1.1199875907954269e+00 3.5945634612028123e+00 5.7581804186414431e-01 + -1.5803561088970084e+00 4.3112801120847521e+00 9.4857503628108741e-02 + -2.0698259595643531e+00 4.7411265781941045e+00 -6.4851699540352858e-01 + -2.5324387479676402e+00 4.8029033904575922e+00 -1.5737108518146987e+00 + -2.9298720461268903e+00 4.4771111311020988e+00 -2.5774349549232420e+00 + -3.2314198700221604e+00 3.7814552646952779e+00 -3.5361272774238239e+00 + -3.3485915553842429e+00 2.7700035712537305e+00 -4.3560489630180292e+00 + -3.1429151368871748e+00 1.5512528129606586e+00 -4.9687686429423650e+00 + -2.6230693608671158e+00 3.2304323942465185e-01 -5.3122310007522238e+00 + -2.0275017059139868e+00 -7.6734300237394359e-01 -5.4469045164147643e+00 + -1.6569671078822235e+00 -1.5969225039928610e+00 -5.5537201295019534e+00 + -1.8265851461305296e+00 -1.8403231759934138e+00 -5.7152959564039101e+00 + -2.1583470606828379e+00 -1.2628795598879572e+00 -5.5031261700855829e+00 + -1.9420505942317083e+00 -8.5345043017318822e-01 -5.0251044393007342e+00 + -1.7297483295007794e+00 -1.0170266801144734e+00 -5.0219606467770861e+00 + -1.7752495865822495e+00 -1.1137058641572599e+00 -5.6654674349695746e+00 + id 12856 + loc 6.6513484716415405e-01 6.8047738075256348e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6331496314416870e-01:4.0058048946352615e-01:4.4866992183989995e-01:4.6264438960683846e-01:9.7094586413363393e-01:3.6108600225029142e-01:1.2053569695645785e+00:2.8851215919301526e-01:1.9810093083738809e+00:3.6748745219096329e-01:2.4656775999409137e+00:3.6047256219589868e-01:3.4339033024665366e+00:4.6331032999453731e-01:3.9987304298754873e+00 + CVs 20 + 1.7316163446644650e-01 3.1509852342344691e-01 -6.8248197006834016e-02 + 3.4275317936609639e-01 6.4798351971771229e-01 -1.4274390714021357e-01 + 5.2416851853450763e-01 9.9319687007012658e-01 -2.4112422393265365e-01 + 7.2862371918013935e-01 1.3404074973953048e+00 -3.8233167495305503e-01 + 9.5867602038214406e-01 1.6743506302654128e+00 -5.8506266101597548e-01 + 1.2086773841673428e+00 1.9737251489841889e+00 -8.6568381370420033e-01 + 1.4646241712144761e+00 2.2108514984778465e+00 -1.2336913251416937e+00 + 1.7033635420478475e+00 2.3546082102733443e+00 -1.6878572109544698e+00 + 1.8935776788870249e+00 2.3743141354415407e+00 -2.2127178779512384e+00 + 2.0044513857268100e+00 2.2451862251166927e+00 -2.7730326938471981e+00 + 2.0175125624357100e+00 1.9545121489460269e+00 -3.3149656353923471e+00 + 1.9399455116255042e+00 1.5149597628940228e+00 -3.7707478722107846e+00 + 1.8191155130728724e+00 9.7980291908149697e-01 -4.0906085622777226e+00 + 1.7170974928730784e+00 4.4081535811264572e-01 -4.2912477124196737e+00 + 1.6687390459592095e+00 2.4751498940691175e-02 -4.4762391926562834e+00 + 1.6944569849669897e+00 -8.2268371373401816e-02 -4.7722553525422171e+00 + 1.8459990227902836e+00 2.9678746362352548e-01 -5.0760333662423323e+00 + 2.1750710537952198e+00 1.0670689968358655e+00 -4.9388571442986118e+00 + 2.2529881521988195e+00 1.0940991301734431e+00 -5.2326109772973464e+00 + id 12857 + loc 8.8691473007202148e-01 2.1256197988986969e-01 1081 + blend 0.0000000000000000e+00 + interp 3.6859857586117156e-01:2.4063309703262648e-01:2.7913795420741350e-02:3.2965511437785400e-01:7.3616811434172158e-01:3.6248283532530629e-01:1.0097044238176007e+00:3.4374514924807181e-01:1.9460569380666839e+00:3.3160905259392298e-01:2.7080103445091277e+00:3.6859488987541295e-01:3.3130577568043478e+00 + CVs 20 + 9.4748598738281578e-02 5.1964763255327751e-01 -4.1439742239609723e-01 + 1.2069374614079487e-01 9.2350261163725311e-01 -6.6028611707561446e-01 + 1.2666147506387199e-01 1.2801449146417818e+00 -8.4377566030131801e-01 + 1.2796675615267034e-01 1.6178249330237193e+00 -1.0041898902591924e+00 + 1.2128161782619107e-01 1.9303674660617531e+00 -1.1360369671727519e+00 + 1.0645904943319817e-01 2.2116229206165920e+00 -1.2324749455589650e+00 + 8.5596666349445294e-02 2.4584711713076759e+00 -1.2854578532173708e+00 + 6.1303935450410796e-02 2.6751030393853354e+00 -1.2872297676139417e+00 + 3.6812935818518522e-02 2.8642343341705843e+00 -1.2210124662959347e+00 + 1.9858404486691628e-02 2.9943379257214002e+00 -1.0799541592966158e+00 + 1.4591258853191680e-02 3.0421165097685554e+00 -8.9972945048869757e-01 + 1.7436419517242285e-02 3.0201156935203728e+00 -7.0488602435034076e-01 + 2.3576871518577680e-02 2.9419983362398439e+00 -5.0147823836876682e-01 + 2.7353953420635069e-02 2.8164405113584006e+00 -2.9034756680848295e-01 + 2.0441350312501660e-02 2.6464723350347250e+00 -6.3700594013700318e-02 + -6.2371518610968013e-03 2.4145719983992997e+00 1.9758081021551110e-01 + -5.6597985873002410e-02 2.0777136767272788e+00 4.6338848540791422e-01 + -1.3714146616898129e-01 1.6745065356571467e+00 6.1767134595586293e-01 + -2.7500352423636426e-01 1.3847883452340091e+00 5.9854029638550943e-01 + id 12858 + loc 5.9525859355926514e-01 9.6770000457763672e-01 411 + blend 0.0000000000000000e+00 + interp 4.1542897488804237e-01:4.1542482059829350e-01:1.3111438660998598e-01:3.0152986217384831e-01:9.6532212303427256e-01:2.7298157706351139e-01:1.8833812991214258e+00:3.1631160746847120e-01:2.6113329147510207e+00:2.7600281819340183e-01:2.9775635576547277e+00:3.1057440874488978e-01:3.7958981809323085e+00 + CVs 20 + 1.0445674688157740e+00 1.3992389964595742e-01 -2.4465405579312741e-01 + 1.7426877383402701e+00 1.4381222530681517e-01 -4.6289233503468497e-01 + 2.3473990230037898e+00 1.0845940297912515e-01 -6.5081150150586187e-01 + 2.9570131147321921e+00 6.9554163970828142e-02 -8.0212959884747370e-01 + 3.5629376226131644e+00 1.6250415008569497e-02 -9.0301259451123583e-01 + 4.1537768894521419e+00 -6.2554677695312755e-02 -9.4673354621114614e-01 + 4.7189968694736297e+00 -1.7713549319878685e-01 -9.3427818632629955e-01 + 5.2490864943012827e+00 -3.3625528225895662e-01 -8.7174786026895501e-01 + 5.7329989327924995e+00 -5.4415433436276395e-01 -7.6805111704042939e-01 + 6.1601467995263262e+00 -7.9667915725445271e-01 -6.3405882303525618e-01 + 6.5264203379760080e+00 -1.0839524404395937e+00 -4.7958358555509134e-01 + 6.8324665267998617e+00 -1.4001979744410677e+00 -3.0398593904183735e-01 + 7.0811246888121868e+00 -1.7387242609532496e+00 -1.0203587094493460e-01 + 7.2762857883424061e+00 -2.0877099977363844e+00 1.3085512372908370e-01 + 7.4247520781176783e+00 -2.4352640879068939e+00 3.9379538014822385e-01 + 7.5338931875082169e+00 -2.7686708402048303e+00 6.7646364743592446e-01 + 7.6107618665138368e+00 -3.0714770787701355e+00 9.6386194198481334e-01 + 7.6619093160930927e+00 -3.3431841068278123e+00 1.2465220879544758e+00 + 7.6258905758029432e+00 -3.6388993683698687e+00 1.5166211348773491e+00 + id 12859 + loc 6.2059760093688965e-01 7.5721013545989990e-01 382 + blend 0.0000000000000000e+00 + interp 4.8071286575528105e-01:4.1107173921283607e-01:3.8991605050610800e-01:4.3087562614813602e-01:1.1095960762365265e+00:3.1527081891131203e-01:1.9866658729693243e+00:3.0489871648955008e-01:2.5005318280877500e+00:3.0514896376984352e-01:3.4440733793886098e+00:4.8070805862662352e-01:3.9888482016970230e+00 + CVs 20 + 9.2252694105279875e-01 1.5203433130646915e-01 -6.0567060387423233e-01 + 1.5056492042941645e+00 1.4136551852142432e-01 -1.0522863152433080e+00 + 1.9937719172111805e+00 6.1361725691137181e-02 -1.4782591001467216e+00 + 2.4917573758822487e+00 -4.1508864347256758e-02 -1.9387277385195447e+00 + 2.9938088628826671e+00 -1.5737537790539258e-01 -2.4261259686786647e+00 + 3.4952646160395417e+00 -2.7877161355782210e-01 -2.9327467449500269e+00 + 3.9909965129971985e+00 -4.0357402038348378e-01 -3.4522938551917690e+00 + 4.4768587974332616e+00 -5.4176753301001279e-01 -3.9779695518393372e+00 + 4.9493564402272643e+00 -7.1818998965267999e-01 -4.4996643491765145e+00 + 5.3981381615721205e+00 -9.6352453040928521e-01 -5.0040132000481510e+00 + 5.8015195875935950e+00 -1.3000402137137810e+00 -5.4767152282027283e+00 + 6.1341320340390126e+00 -1.7332606940807194e+00 -5.9022974990985420e+00 + 6.3769666843758630e+00 -2.2526412706583336e+00 -6.2639065967012844e+00 + 6.5194804584792454e+00 -2.8362510122943076e+00 -6.5481538173443834e+00 + 6.5581075547640033e+00 -3.4544520192856885e+00 -6.7515034372966234e+00 + 6.4980923978100771e+00 -4.0671842173075188e+00 -6.8776191770389623e+00 + 6.3604979794529282e+00 -4.6355864830174607e+00 -6.9171375029568072e+00 + 6.1828926834252673e+00 -5.1314881690711296e+00 -6.8620907683196837e+00 + 5.9878255803748548e+00 -5.5877980414284085e+00 -6.7556827273683639e+00 + id 12860 + loc 4.4362075626850128e-02 6.8724775314331055e-01 377 + blend 0.0000000000000000e+00 + interp 3.6754690845487542e-01:3.6754323298579089e-01:1.2487636480867714e-01:1.1543470237409076e-01:1.0299515927566936e+00:2.6222353153518047e-01:2.3335737696095893e+00:2.8598099911284153e-01:3.2304585566384922e+00 + CVs 20 + -6.9655083895753866e-01 2.7256112568213364e-01 -3.0446617894009403e-01 + -1.2246872042348844e+00 4.1123776280253010e-01 -4.9091570903720344e-01 + -1.7267104912920497e+00 4.7599120474577672e-01 -6.4342419001438811e-01 + -2.2596861156133925e+00 5.0362192938400363e-01 -8.0934840168824018e-01 + -2.8081591255676344e+00 5.0476340447499535e-01 -1.0005038811991831e+00 + -3.3503923892842939e+00 4.7797546859914797e-01 -1.2239268271174764e+00 + -3.8726599782849132e+00 4.0390046818391978e-01 -1.4829389987849440e+00 + -4.3557391899707945e+00 2.5813138933796886e-01 -1.7807625193548919e+00 + -4.7687981873891507e+00 2.8939052609163962e-02 -2.1113082352415100e+00 + -5.0858524444185100e+00 -2.7694191420796122e-01 -2.4516040843604285e+00 + -5.2985335807320419e+00 -6.3684777523858527e-01 -2.7629263311458825e+00 + -5.4124803119078626e+00 -1.0171436055988607e+00 -3.0049684742790106e+00 + -5.4496853928681261e+00 -1.4012061094608281e+00 -3.1638326345342351e+00 + -5.4563627389991431e+00 -1.8395625623445548e+00 -3.2631249664463340e+00 + -5.4862414416645420e+00 -2.4151378173266385e+00 -3.3379857353903062e+00 + -5.5908938138800313e+00 -3.1315119685145936e+00 -3.4148707561219438e+00 + -5.8147733932250034e+00 -3.9024679755645852e+00 -3.4867689191847355e+00 + -6.1437009053920972e+00 -4.6019646571589332e+00 -3.5081232719528801e+00 + -6.3976919369824987e+00 -5.0919070523929886e+00 -3.4673356895623799e+00 + id 12861 + loc 7.0743036270141602e-01 9.9478590488433838e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0342841185190312e-01:3.4994691847421122e-01:7.0127953848627467e-02:4.1760574647506210e-01:8.2415416535284369e-01:3.3111454774379190e-01:1.6507266584480704e+00:2.4911647717235341e-01:2.1763879348269572e+00:4.1421779507188922e-01:2.8952803206961777e+00:4.8365211728237578e-01:3.0932528275807383e+00:5.0342337756778466e-01:3.7258559035848715e+00 + CVs 20 + -6.0677954599436007e-02 1.5657350708589862e-01 1.1346314999616340e-01 + -9.8484531620346455e-02 2.7050805374778175e-01 1.6863993055088070e-01 + -1.3993772395960563e-01 3.6272765765591258e-01 2.1426710218248485e-01 + -1.9748732026239454e-01 4.4633132115397089e-01 2.7186796819959880e-01 + -2.7103596883656056e-01 5.1895192057447104e-01 3.3800996254321752e-01 + -3.6077824214458576e-01 5.7860470475693193e-01 4.0931666428363117e-01 + -4.6706227407724532e-01 6.2412130338710436e-01 4.8299443594504188e-01 + -5.8985027489146924e-01 6.5506298428296372e-01 5.5738901568711252e-01 + -7.2799891703714681e-01 6.7184728368130020e-01 6.3241621956903993e-01 + -8.7892752018733356e-01 6.7642655758824421e-01 7.0999024615263107e-01 + -1.0392780028301996e+00 6.7250551713203521e-01 7.9364875227540654e-01 + -1.2055207474514427e+00 6.6522392277384845e-01 8.8694900784812158e-01 + -1.3741070384982177e+00 6.6036892695786109e-01 9.9139684866916455e-01 + -1.5433113922765511e+00 6.6312733310657679e-01 1.1038798155356300e+00 + -1.7136019378363927e+00 6.7722539361749057e-01 1.2164885088921542e+00 + -1.8836223874426721e+00 7.0505352004902866e-01 1.3199076588384853e+00 + -2.0484544971666225e+00 7.4805975547762271e-01 1.4062094865715127e+00 + -2.2061489156715623e+00 8.0595506019789953e-01 1.4678551403210118e+00 + -2.3977184466137689e+00 8.8179314104269468e-01 1.4755285607905959e+00 + id 12862 + loc 8.2381087541580200e-01 2.3436288535594940e-01 406 + blend 0.0000000000000000e+00 + interp 3.9826420099829291e-01:2.7788152472283950e-01:3.8679020385895069e-01:2.3475250302062722e-01:1.0713040651133481e+00:3.1403571937421043e-01:1.9666027391487093e+00:3.9826021835628295e-01:2.2831212440896058e+00:2.5287838555499065e-01:2.9914320376556081e+00:3.9626491619599680e-01:3.8470613981147386e+00 + CVs 20 + -1.6860706146691748e-01 1.0113913042462935e-01 7.1179563083500846e-02 + -2.8732867439457782e-01 1.5578151488563580e-01 1.2965342559957113e-01 + -3.6217144395348366e-01 1.7289777748870272e-01 1.7706813543570749e-01 + -4.2894674680053602e-01 1.8217518548187606e-01 2.2703598195767088e-01 + -4.8921580328703568e-01 1.8565425308588229e-01 2.7887725541642161e-01 + -5.4620208343976340e-01 1.8475001014581083e-01 3.3231751321339137e-01 + -6.0593905405781490e-01 1.8000318199524695e-01 3.8840450936284676e-01 + -6.7610294157462791e-01 1.7030254347173168e-01 4.4900113470681430e-01 + -7.5732980596617949e-01 1.5300234857337713e-01 5.1272367248837625e-01 + -8.3642466778883051e-01 1.2583542905213657e-01 5.7207520753240515e-01 + -9.0215987415027987e-01 8.8081314160968871e-02 6.2157795995280007e-01 + -9.6493227608630905e-01 3.7429445672645500e-02 6.6641429615977599e-01 + -1.0430379994326326e+00 -3.1512184837442558e-02 7.1594731193820804e-01 + -1.1388722375218543e+00 -1.2141582968355191e-01 7.7158078493508198e-01 + -1.2396906378155361e+00 -2.2910285557930565e-01 8.2761422427606957e-01 + -1.3349822270806297e+00 -3.4907434015514238e-01 8.8138201670804528e-01 + -1.4261069242257065e+00 -4.7843842608407183e-01 9.3624362631971358e-01 + -1.5203981573346970e+00 -6.1745778468440538e-01 9.9566771725267977e-01 + -1.6881940659188706e+00 -7.9101000340514460e-01 1.0788632601228334e+00 + id 12863 + loc 6.3572078943252563e-01 4.6200230717658997e-01 415 + blend 0.0000000000000000e+00 + interp 4.7734368927236270e-01:2.6814979717172249e-01:3.2580267336781676e-01:4.6463670399317736e-01:9.5240721603924039e-01:3.5235739367604801e-01:1.7917401514719651e+00:4.1007236814507325e-01:2.0505458895951421e+00:2.9386564478967359e-01:3.0289004080070976e+00:4.7733891583547000e-01:3.9866493016642210e+00 + CVs 20 + -2.9012955407938706e-01 1.9544014310605304e-01 -4.3595049043023179e-02 + -5.4562474141227080e-01 3.3926824405233919e-01 -5.2373175498536345e-02 + -8.0018614835082291e-01 4.6506026732131939e-01 -6.8310533696066766e-02 + -1.0758434751947863e+00 5.8835485479530425e-01 -1.1219687991922572e-01 + -1.3697240223388831e+00 7.0225888259893221e-01 -1.8834192893173152e-01 + -1.6759686273873020e+00 8.0010725990482912e-01 -3.0137824047930550e-01 + -1.9869150313723236e+00 8.7656683646520817e-01 -4.5385561044649564e-01 + -2.2952499738425254e+00 9.2791501685264854e-01 -6.4293115600330553e-01 + -2.5943403020513918e+00 9.5250632518546996e-01 -8.6227567103087255e-01 + -2.8780046121585903e+00 9.5086739281440980e-01 -1.1050005848904427e+00 + -3.1454071014278560e+00 9.2259745257338843e-01 -1.3560587319972133e+00 + -3.4103152665754140e+00 8.6052099348579736e-01 -1.5737563940261181e+00 + -3.6872024577869773e+00 7.5630787761823837e-01 -1.6946055864059029e+00 + -3.9567115722992918e+00 6.1873183160681222e-01 -1.6902069166324827e+00 + -4.1908379992337750e+00 4.6681504042572852e-01 -1.5990939468949059e+00 + -4.3825214639985157e+00 3.1092301682912105e-01 -1.4576625702315007e+00 + -4.5184712249527870e+00 1.6448875229348214e-01 -1.2683245570295483e+00 + -4.5840625557579351e+00 4.6471535194081426e-02 -1.0395953357984742e+00 + -4.7763448062332490e+00 -1.0291690588372360e-01 -9.2556898091521644e-01 + id 12864 + loc 4.8998913168907166e-01 3.8128903508186340e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8786413660311009e-01:3.4948870444584440e-01:2.5357054230098641e-01:3.5517474940236282e-01:1.0119875185799316e+00:3.5332504718824403e-01:1.8960868642784918e+00:3.8786025796174406e-01:2.3411815555032076e+00:3.3940280864258443e-01:3.1367432976552072e+00:2.6467537428957560e-01:3.9073415098056916e+00 + CVs 20 + -1.4710314854062970e-01 3.7597858796391531e-01 -1.2610211783588748e-01 + -3.1992093103505054e-01 7.5747676170198475e-01 -2.9268376154429038e-01 + -5.2050596580679076e-01 1.1436716146078532e+00 -4.6930691872346930e-01 + -7.6075711792596612e-01 1.5240342203097454e+00 -6.3906531038861969e-01 + -1.0571905121113225e+00 1.8781097374344995e+00 -7.9364073189047579e-01 + -1.4168236680998985e+00 2.1671370047341449e+00 -9.2920538542820741e-01 + -1.8219832327561218e+00 2.3451091220934339e+00 -1.0483664126950687e+00 + -2.2272888832089395e+00 2.3800162142728403e+00 -1.1584159746814089e+00 + -2.5722944188543169e+00 2.2643225817682038e+00 -1.2637046152140505e+00 + -2.8125381906891320e+00 2.0308536403543398e+00 -1.3570938953753700e+00 + -2.9674151987353299e+00 1.7409592719018696e+00 -1.4334447207203225e+00 + -3.1048894096953736e+00 1.4273151695001589e+00 -1.5027207461277545e+00 + -3.2720296168823007e+00 1.0870147991685168e+00 -1.5658436080324130e+00 + -3.4741258604521446e+00 7.1817174358682934e-01 -1.5846858309834886e+00 + -3.7027876421343433e+00 3.3958000143772271e-01 -1.5060458198125941e+00 + -3.9690701667033776e+00 -1.2493778175443060e-02 -1.3060619872765700e+00 + -4.2695599066659389e+00 -2.8930297725900600e-01 -9.7979552992919128e-01 + -4.5329413202157571e+00 -4.6003001587357562e-01 -5.6532152231982935e-01 + -4.7908720932554525e+00 -6.3887700470089015e-01 -1.9955907485554472e-01 + id 12865 + loc 3.2117676734924316e-01 3.4320205450057983e-02 414 + blend 0.0000000000000000e+00 + interp 5.5034010983335095e+00:4.2832091066522748e-01:2.0483781028202142e-04:3.7159135229706575e-01:5.9824851321335215e-01:3.3503922425497934e-01:1.0058795283243507e+00:4.4590762960642466e-01:2.0108925173117864e+00:5.5033910983335099e+00:3.9167653190937495e+00:4.7391253771189579e+00:3.9274595373970369e+00:6.7325326531480079e-01:3.9824242607474476e+00 + CVs 20 + -9.1018389315707882e-02 1.6153878797354773e-01 -9.9174884550617015e-01 + -1.9585440666612444e-01 1.4894233405217000e-01 -1.6517776571494653e+00 + -2.9065090052054188e-01 8.0389682361546699e-02 -2.2217933634608524e+00 + -3.7959158394932746e-01 -2.7049472719224421e-03 -2.8025189169807949e+00 + -4.6248589360424486e-01 -9.7353248775652435e-02 -3.3771395896037788e+00 + -5.3834685015009587e-01 -1.9794822879344065e-01 -3.9337178321114203e+00 + -6.0735354199428571e-01 -3.0018635971321117e-01 -4.4672605746093303e+00 + -6.7099434335415720e-01 -4.0360558442021310e-01 -4.9782036828406708e+00 + -7.2836186345996123e-01 -5.1080728337584524e-01 -5.4698594214474747e+00 + -7.7589392351059383e-01 -6.2708490171752351e-01 -5.9455355845036557e+00 + -8.1641847959443969e-01 -7.6332443267842232e-01 -6.4036405717337015e+00 + -8.6830503789850044e-01 -9.3448414431441162e-01 -6.8342470644141287e+00 + -9.5241060015476908e-01 -1.1479333552813398e+00 -7.2260883077779301e+00 + -1.0699767983635191e+00 -1.4046803199307867e+00 -7.5805969462948202e+00 + -1.2120272683690092e+00 -1.7073410164664149e+00 -7.8995744955890581e+00 + -1.3726250591688136e+00 -2.0419394836137172e+00 -8.1665253714374675e+00 + -1.5456356992016809e+00 -2.3766553263386365e+00 -8.3638919485325793e+00 + -1.7210499727193613e+00 -2.6882129056548374e+00 -8.4938876301927912e+00 + -1.8614700905001933e+00 -2.9934251720490650e+00 -8.6142282629118139e+00 + id 12866 + loc 2.1474273502826691e-01 5.8433401584625244e-01 403 + blend 0.0000000000000000e+00 + interp 4.7578632334961823e-01:2.8047998325863993e-01:3.4835624372963059e-03:3.8647667857316736e-01:6.0310194069238232e-01:3.2590111508654246e-01:1.1805446798161967e+00:4.7578156548638478e-01:1.9233830977271746e+00:3.8956223557126479e-01:2.4534735244224963e+00:3.8378126206057106e-01:2.9997329529309469e+00:4.2569776736226078e-01:3.4429767012751071e+00 + CVs 20 + -7.0932322976054174e-04 1.9228545918697817e-01 -1.2155859505869286e-01 + -9.0152677210270094e-04 3.9924797921238009e-01 -2.3526614094420248e-01 + -1.5443870371532220e-02 6.2197059992338888e-01 -3.4149609708975376e-01 + -5.4303267569243530e-02 8.5868095848172654e-01 -4.4121139871188153e-01 + -1.2626182835281652e-01 1.1071560681444785e+00 -5.3541278972268447e-01 + -2.4008036696013124e-01 1.3628493659127709e+00 -6.2289496416497792e-01 + -4.0152063890096845e-01 1.6183285097128746e+00 -6.9921247196073422e-01 + -6.1056093465832295e-01 1.8647570241943860e+00 -7.5733040173617083e-01 + -8.6532383660080769e-01 2.0932745234233874e+00 -7.8993278093534347e-01 + -1.1671215347483714e+00 2.2927976420197460e+00 -7.9028153373863286e-01 + -1.5151097030174752e+00 2.4485699154968819e+00 -7.5056984494155621e-01 + -1.8978110090948275e+00 2.5463317764435001e+00 -6.6179844773107221e-01 + -2.2949764594220485e+00 2.5760379829731161e+00 -5.1814536150041313e-01 + -2.6816430872912052e+00 2.5337982735832414e+00 -3.1805931559641942e-01 + -3.0301958443530870e+00 2.4246360169888530e+00 -6.3914791881047553e-02 + -3.3235277268496901e+00 2.2542133425032400e+00 2.2976262802626851e-01 + -3.5608200396176648e+00 2.0277100752254360e+00 5.3198398141609049e-01 + -3.7503768783217311e+00 1.7639187488274697e+00 8.0991028658835873e-01 + -3.9395408215532397e+00 1.5796663551404309e+00 9.8500525498841762e-01 + id 12867 + loc 6.3188987970352173e-01 1.1352389305830002e-01 395 + blend 0.0000000000000000e+00 + interp 5.5557965209024529e-01:3.3016797081529797e-01:1.7355655577147022e-03:3.0570448632609876e-01:7.3835597000703879e-01:4.8047690543484217e-01:1.0609204046039609e+00:4.7502409213763552e-01:1.6866176663095243e+00:5.5557409629372445e-01:1.9713276636708270e+00:2.5605235194842246e-01:2.7662924882284168e+00:3.5280765845842743e-01:3.2064017125140514e+00 + CVs 20 + -3.3484507693777243e-01 2.5468737997604551e-01 3.4580950098166918e-01 + -6.2449846653500152e-01 4.6783496708733058e-01 6.5443457207731792e-01 + -9.1423234191248315e-01 6.6429660609190788e-01 9.5260309131055521e-01 + -1.2297332440793081e+00 8.5322795246853500e-01 1.2522783475770964e+00 + -1.5748711694212174e+00 1.0227095455218824e+00 1.5482587586832306e+00 + -1.9491805675512297e+00 1.1612039205584082e+00 1.8388569640868817e+00 + -2.3507084493444772e+00 1.2574530699667430e+00 2.1270905542543770e+00 + -2.7739811345674634e+00 1.2938873906806609e+00 2.4120702436043091e+00 + -3.2051075785091268e+00 1.2495349742556077e+00 2.6867549431353250e+00 + -3.6196140983584817e+00 1.1134823637387041e+00 2.9448062384278866e+00 + -3.9908012611652777e+00 8.9184008951733640e-01 3.1826818445542040e+00 + -4.3026020206538380e+00 5.9996022373395608e-01 3.3893176668666385e+00 + -4.5508833685178329e+00 2.5955504046531352e-01 3.5529295746353107e+00 + -4.7372315737699671e+00 -1.0688382334900837e-01 3.6728328209571588e+00 + -4.8649053502846353e+00 -4.8015902408816569e-01 3.7577842078164432e+00 + -4.9341618262071272e+00 -8.3886088782960311e-01 3.8101007992700806e+00 + -4.9450933089579552e+00 -1.1494791445522838e+00 3.8200886783737955e+00 + -4.9189954696358456e+00 -1.3935785610170064e+00 3.7946696371287043e+00 + -4.9089169381977822e+00 -1.7288975432139115e+00 3.8348274439741559e+00 + id 12868 + loc 5.1551991701126099e-01 5.8480817079544067e-01 393 + blend 0.0000000000000000e+00 + interp 4.8646410273151014e-01:3.8998870445271894e-01:1.6809613716195937e-02:4.8645923809048286e-01:5.2826921330840748e-01:3.2422502050431673e-01:1.1091589893812646e+00:3.4419102741483554e-01:2.0806339286520514e+00:2.7696593762242239e-01:2.8255189803507061e+00:3.7132942084276388e-01:3.6345689540190453e+00 + CVs 20 + -3.6010676757026217e-01 3.2693211874270395e-01 -1.7776886868479475e-01 + -6.8368392440843573e-01 6.5536156155106773e-01 -3.3124574613526370e-01 + -9.8309019777530504e-01 1.0000433569089615e+00 -4.8562897404903876e-01 + -1.2692317324472422e+00 1.3548384346726940e+00 -6.5895633616699967e-01 + -1.5547842128820575e+00 1.7011437093163098e+00 -8.6079310571848744e-01 + -1.8499232921419257e+00 2.0237596220998832e+00 -1.0909323450962931e+00 + -2.1615764528006784e+00 2.3142787747788458e+00 -1.3402385025135126e+00 + -2.5034528689500526e+00 2.5614943482681305e+00 -1.5983498453435405e+00 + -2.8953812181872620e+00 2.7415369376545193e+00 -1.8577381446458778e+00 + -3.3400262185210075e+00 2.8319901655874924e+00 -2.1183620319541117e+00 + -3.8171736758238737e+00 2.8343683468991743e+00 -2.3956323522698391e+00 + -4.3100550565464761e+00 2.7537454285532226e+00 -2.7106687927407451e+00 + -4.8014541056089381e+00 2.5713520232821168e+00 -3.0624842669650416e+00 + -5.2607439419783351e+00 2.2662856216134855e+00 -3.4304525946009456e+00 + -5.6544270605497289e+00 1.8442191270947099e+00 -3.8027624387006433e+00 + -5.9991325915978768e+00 1.3132329242271643e+00 -4.1659219220242427e+00 + -6.3678791726681485e+00 6.7736319136787371e-01 -4.4612866000593137e+00 + -6.7803963148643200e+00 1.1153490876090189e-03 -4.6285686569055402e+00 + -7.1243054726879382e+00 -5.8057732693210817e-01 -4.7690416980087518e+00 + id 12869 + loc 6.9758526980876923e-02 4.4464796781539917e-01 409 + blend 0.0000000000000000e+00 + interp 4.2118856393704418e-01:3.6229027925861418e-01:3.0054153956425189e-02:2.8173138925890368e-01:1.0054625702105167e+00:3.6820373988203819e-01:1.6696627338357160e+00:2.6623969729966634e-01:2.1635886693022823e+00:4.2118435205140481e-01:3.0003280612315582e+00:2.4796117077759594e-01:3.5222965631030574e+00 + CVs 20 + -2.5773736852984747e-01 2.4600003203996459e-01 -3.5852777491603249e-01 + -4.7763612225394281e-01 4.7136567793913670e-01 -6.4991699532816216e-01 + -6.6951556742775886e-01 7.1271725933064078e-01 -9.4149253825560419e-01 + -8.3642437713782758e-01 9.7703444013064711e-01 -1.2572012667324350e+00 + -1.0021873993435195e+00 1.2514945640598372e+00 -1.6044345292646605e+00 + -1.2110946994815011e+00 1.5180833720590310e+00 -1.9906759875304827e+00 + -1.5084924585411332e+00 1.7503305649422682e+00 -2.4098368370130330e+00 + -1.9155754478513374e+00 1.9124291272293492e+00 -2.8434298110065188e+00 + -2.4225002920951892e+00 1.9662565114295125e+00 -3.2849742600936489e+00 + -2.9958785960760603e+00 1.8708836478601738e+00 -3.7365202711418863e+00 + -3.5377567275603430e+00 1.5933739671358722e+00 -4.1727262379404237e+00 + -3.9068626331878433e+00 1.1777348401626195e+00 -4.5448495647150713e+00 + -4.0750374103623770e+00 7.0140881172330261e-01 -4.8500332950185978e+00 + -4.1196105977238835e+00 1.8242560458713664e-01 -5.1280520920005248e+00 + -4.1470434477521909e+00 -3.8486160847578832e-01 -5.4191677496055508e+00 + -4.2385401268049172e+00 -9.6982331617336737e-01 -5.7479916044251187e+00 + -4.3712646016792984e+00 -1.5228245185134295e+00 -6.1215956682203441e+00 + -4.4869792965969051e+00 -2.0352518563593511e+00 -6.5502251196707375e+00 + -4.6129059707838413e+00 -2.5625733284853456e+00 -7.0855509394882636e+00 + id 12870 + loc 9.3709267675876617e-02 3.4318724274635315e-01 417 + blend 0.0000000000000000e+00 + interp 3.0140744576754946e-01:3.0140443169309178e-01:4.9730511653870735e-01:2.0491013949253270e-01:1.0184035855214295e+00:2.8658459302437167e-01:2.0692429085570776e+00:2.5081708985485518e-01:2.9958812552464646e+00 + CVs 20 + -1.6328754840699297e-01 2.1550776920508274e-01 2.9318943492265459e-01 + -2.5898119387764768e-01 3.8487474330576571e-01 5.2207574705546334e-01 + -3.3422166826263283e-01 5.3068835384952973e-01 7.1610944697527512e-01 + -4.2046873869703660e-01 6.7138055249480355e-01 9.1058320329531073e-01 + -5.1904841543932889e-01 8.0551772519558296e-01 1.1046882865976231e+00 + -6.3134714931429980e-01 9.3044511837982646e-01 1.2982642840553229e+00 + -7.5933949244072774e-01 1.0426024737590622e+00 1.4917698701685944e+00 + -9.0506280687672302e-01 1.1379055988996063e+00 1.6850103529108833e+00 + -1.0708411842382872e+00 1.2120357303689751e+00 1.8760911102607352e+00 + -1.2604213771370161e+00 1.2591408482042432e+00 2.0620341500137975e+00 + -1.4773044617675120e+00 1.2706273529822709e+00 2.2395137542973860e+00 + -1.7193988789773904e+00 1.2386031376102746e+00 2.4043267613485053e+00 + -1.9777891970410382e+00 1.1634640360332784e+00 2.5509544544420599e+00 + -2.2429458351056408e+00 1.0534683034573160e+00 2.6755359179985856e+00 + -2.5070022622450723e+00 9.1604263139985120e-01 2.7804979675382353e+00 + -2.7610964011315957e+00 7.5578376535956493e-01 2.8755774757796373e+00 + -2.9979378996348536e+00 5.7583358955005637e-01 2.9721574991863298e+00 + -3.2151222707261846e+00 3.7894847718805402e-01 3.0741726823533169e+00 + -3.3947779350865082e+00 2.3952545864985653e-01 3.2163295210298823e+00 + id 12871 + loc 6.1922818422317505e-01 4.6749827265739441e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3930693483778732e-01:4.3930254176843897e-01:2.2150469132733053e-01:3.9798978755371245e-01:9.1545993032275830e-01:2.3944759251541259e-01:1.3164563563392793e+00:4.1287483022855548e-01:2.0884789949040798e+00:3.2188433020702040e-01:2.8275443184065527e+00:2.6609968748221541e-01:3.3492581053719279e+00 + CVs 20 + -5.7110730758472117e-02 3.3218222098693695e-01 1.8067876345034295e-01 + -1.2059538346957821e-01 6.7256284029021751e-01 3.5041182526213355e-01 + -2.0251029352167060e-01 1.0056707205551285e+00 4.8345991486519224e-01 + -3.5392351049668813e-01 1.3246976427453139e+00 5.6756986988123692e-01 + -5.7100886999031331e-01 1.6216288648782808e+00 6.1568497608585071e-01 + -7.5710685529625332e-01 1.9087646213227525e+00 6.2045646474037008e-01 + -8.2514190774734097e-01 2.1862013756475149e+00 5.7303099569344351e-01 + -7.6218941204517066e-01 2.4404495348897224e+00 5.1608704511303005e-01 + -6.0934700383341101e-01 2.7103980207836340e+00 5.4913102316526008e-01 + -4.0132596990353320e-01 3.0343470154996908e+00 7.7089472613451149e-01 + -2.3440504704919740e-01 3.3769367586043741e+00 1.1036716009651066e+00 + -1.3101242211843722e-03 3.3386879861785559e+00 9.3409580774417089e-01 + 1.3218463864592844e-01 2.9045844753164993e+00 5.2476237645532930e-01 + 6.8489147032499376e-01 2.3597712444906378e+00 8.8754284189227040e-01 + 9.5551788194538345e-01 1.7809513806395945e+00 1.1756351016840338e+00 + 1.0138001222388158e+00 1.2144123623595164e+00 1.3393305136090612e+00 + 9.0589473721528901e-01 7.3677168143908467e-01 1.3297850580141275e+00 + 7.1510969918494316e-01 4.2943867373369676e-01 1.1786719075491192e+00 + 5.6102129325165073e-01 1.6584214327588398e-01 1.1226064850193525e+00 + id 12872 + loc 7.8124082088470459e-01 8.6059498786926270e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0342841185190312e-01:3.4572517752659121e-01:2.0858930053265334e-01:3.6777752751306114e-01:1.0600523015484276e+00:5.0342337756778466e-01:1.7226876668244158e+00:3.4324596017111564e-01:2.3260227210922135e+00:4.5354799667299284e-01:2.9555250475671704e+00:3.8750110010753214e-01:3.2887729668777865e+00 + CVs 20 + 9.0245009307218682e-02 3.6264273305600153e-01 1.0913389243327820e-01 + 2.0367675666364585e-01 6.4507441624330242e-01 1.1292354191195747e-01 + 3.0584177858925726e-01 9.2510302119473575e-01 1.2166691852112183e-01 + 3.8678017343390136e-01 1.2061959329101724e+00 1.4793932658280629e-01 + 4.3990657963623603e-01 1.4834082688438630e+00 1.8400132319539675e-01 + 4.5654940446320719e-01 1.7535798506112810e+00 2.2060786707008784e-01 + 4.2792445879915525e-01 2.0130037138705683e+00 2.4757799113970802e-01 + 3.4684806586866490e-01 2.2561905121270551e+00 2.5754419483286684e-01 + 2.0742531886459742e-01 2.4739063351723081e+00 2.4463905376141404e-01 + 4.2258419327776270e-03 2.6495868229784958e+00 1.9914255951928905e-01 + -2.6476838240178702e-01 2.7527130780210878e+00 1.0487575826923323e-01 + -5.7883702841482243e-01 2.7349638539644747e+00 -5.2613536877422096e-02 + -8.7027202229900202e-01 2.5622193176349759e+00 -2.5796176199820020e-01 + -1.0658568116702920e+00 2.2769762202956656e+00 -4.5445079468456784e-01 + -1.1673754563405343e+00 1.9686031219025968e+00 -5.9499617925831716e-01 + -1.2245774963670262e+00 1.6821137555888281e+00 -6.7423593043066965e-01 + -1.2634176098971412e+00 1.4111295890743885e+00 -7.0700616538994876e-01 + -1.2819996789713941e+00 1.1456543622211517e+00 -7.0821584301912477e-01 + -1.3413265580086973e+00 9.1214924196160996e-01 -6.7936276467780121e-01 + id 12873 + loc 6.2519676983356476e-02 1.3522182404994965e-01 373 + blend 0.0000000000000000e+00 + interp 3.7757008966623679e-01:3.5013662416916347e-01:7.4167657289928801e-01:3.7756631396534013e-01:1.0889641157799663e+00:2.4666589561017013e-01:1.7606839096981890e+00:2.8991074368786984e-01:2.3416540282903942e+00:2.8435620600322331e-01:3.1035605663489125e+00:3.5503278523052484e-01:3.9999449399818094e+00 + CVs 20 + -9.2303289829120852e-02 7.8424714946764440e-01 3.6463442082022274e-01 + -2.6754767652337208e-01 1.5752163099393355e+00 6.9191324597893189e-01 + -5.1483177398597357e-01 2.3484293129126974e+00 9.2544351205338715e-01 + -7.9160046693609876e-01 3.0141353555820620e+00 9.3832273309323322e-01 + -1.0985736328305118e+00 3.4641065716953854e+00 6.9043804341905313e-01 + -1.3890599359952553e+00 3.6242851276784327e+00 3.0155538274237426e-01 + -1.6214541489309184e+00 3.5077247848193971e+00 -1.1355016133804918e-01 + -1.7979857908887604e+00 3.1619412322667229e+00 -5.0859664741158972e-01 + -1.9252032457430559e+00 2.6413650843000234e+00 -8.5539880997883144e-01 + -2.0044940632594206e+00 1.9923128802018799e+00 -1.1673371674032746e+00 + -2.0118067014764112e+00 1.2489876662907222e+00 -1.4796819197227049e+00 + -1.8855954572353000e+00 4.0022812466495639e-01 -1.8381732867838878e+00 + -1.5578076459949570e+00 -5.1840829120804011e-01 -2.2824085884748873e+00 + -1.0432627794083069e+00 -1.4002018492775552e+00 -2.8862893760927206e+00 + -5.4248358290895438e-01 -2.1166979272830826e+00 -3.8433824432227173e+00 + -4.6868002117485769e-01 -2.4061282531806611e+00 -5.1488505395802875e+00 + -9.8801690072767767e-01 -2.3046210827865741e+00 -6.4036053162634534e+00 + -2.0363517790160244e+00 -2.0514363925856989e+00 -7.3678102016532669e+00 + -2.6774476369729947e+00 -1.8262788408886683e+00 -8.1863579043496486e+00 + id 12874 + loc 1.6915090382099152e-01 2.7010745834559202e-03 411 + blend 0.0000000000000000e+00 + interp 4.2769345540272174e-01:2.9963590328142009e-01:3.6117314903654552e-02:5.3583043086947495e-02:7.1493426582683339e-01:4.2768917846816773e-01:1.8281778270140974e+00:3.4796524941106560e-01:2.3325371961665402e+00:2.7246674499017898e-01:3.0519109349483546e+00:3.5670039644231233e-01:3.9628536920384398e+00 + CVs 20 + -2.2795520724325696e-01 2.3442866668860224e-01 -6.5553713813475012e-01 + -4.1351903560830744e-01 3.7138696486853123e-01 -1.1448057663829334e+00 + -5.8123913305268093e-01 4.7548933389916287e-01 -1.6055588453719469e+00 + -7.4098410905662393e-01 5.6064656202156526e-01 -2.0808843492071283e+00 + -9.0289607088249901e-01 6.1241600865357393e-01 -2.5606625803351633e+00 + -1.0828605698036444e+00 6.1942514370486079e-01 -3.0319795279184900e+00 + -1.2931356627258241e+00 5.7802345315196502e-01 -3.4735310529856034e+00 + -1.5356089319968695e+00 4.9612114444187361e-01 -3.8618155377258550e+00 + -1.8043798427035265e+00 3.9253913876181268e-01 -4.1901127068437560e+00 + -2.0972855055291486e+00 2.8433191113862732e-01 -4.4719527292645100e+00 + -2.4040997910804625e+00 1.3798399351477508e-01 -4.7240575582248159e+00 + -2.6640248759956471e+00 -1.3792014692361798e-01 -4.9349987532562594e+00 + -2.8385579658220044e+00 -5.8033347215668707e-01 -5.0814753107050565e+00 + -2.9838474796144605e+00 -1.1591392878204765e+00 -5.1575982946817920e+00 + -3.1999529680157268e+00 -1.8070264669730915e+00 -5.1714707453699882e+00 + -3.5743170077860396e+00 -2.4231080189288825e+00 -5.1403017981967931e+00 + -4.1086649403393620e+00 -2.9616185097153265e+00 -5.1007738472729240e+00 + -4.7162656904222207e+00 -3.4599147195064259e+00 -5.1157013623832270e+00 + -5.2805275865236663e+00 -3.9468524522310142e+00 -5.2451368258838720e+00 + id 12875 + loc 6.1003667116165161e-01 2.3730331659317017e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6763326240346209e-01:4.6762858607083807e-01:3.3736790043188514e-01:3.7346885778909489e-01:9.2600431457189658e-01:3.6677843014433037e-01:1.2435588951738499e+00:3.4680978681972963e-01:1.9898199813192239e+00:3.8563576943344668e-01:2.8946604929130180e+00:3.9384814209699209e-01:3.1286103392656348e+00:3.4590767977545606e-01:3.8046027490164454e+00 + CVs 20 + -1.7786414102484982e-01 3.1185318340235085e-01 9.2615560582773870e-03 + -3.3234700793742705e-01 6.1793869300405679e-01 3.9344801314114830e-02 + -4.8812588143999736e-01 9.1822666841468048e-01 8.7671594128632513e-02 + -6.5805883418145594e-01 1.2101311435364708e+00 1.5507314670463135e-01 + -8.4739166784984221e-01 1.4892704195926036e+00 2.4538485951104627e-01 + -1.0602046829135250e+00 1.7483366761451409e+00 3.6410850330833022e-01 + -1.2972750779736235e+00 1.9747460651491158e+00 5.1864181958820554e-01 + -1.5542057127982289e+00 2.1536134841720642e+00 7.1309615927559378e-01 + -1.8228801796553364e+00 2.2723847530517096e+00 9.4540039284831667e-01 + -2.0945296448422051e+00 2.3216357888691475e+00 1.2077645718733794e+00 + -2.3618516233365914e+00 2.2961634493367420e+00 1.4876955831642544e+00 + -2.6202785279977010e+00 2.1974113183523150e+00 1.7720687666025587e+00 + -2.8691157494126851e+00 2.0325074267914647e+00 2.0527162237935457e+00 + -3.1103974723880952e+00 1.8096360465163541e+00 2.3271621657102064e+00 + -3.3475345245025037e+00 1.5304950533459829e+00 2.5901410286696147e+00 + -3.5826688648565281e+00 1.1779129727272513e+00 2.8076837635631531e+00 + -3.8010863608730898e+00 7.3167664951963940e-01 2.8693770406286077e+00 + -3.9631331421312730e+00 2.8790049843185006e-01 2.6888185493596151e+00 + -4.1213537582434148e+00 -4.3113601877025731e-02 2.5712495889671878e+00 + id 12876 + loc 3.5056790709495544e-01 1.8135191500186920e-01 382 + blend 0.0000000000000000e+00 + interp 4.1672232139245946e-01:4.0857418981454496e-01:3.6704705345607624e-01:3.2184127093987092e-01:1.0019422654383461e+00:2.6358479481099645e-01:1.7265555089398514e+00:3.8626012693748529e-01:2.4793616050250522e+00:4.1671815416924557e-01:2.9997619168844665e+00:3.9705470469385856e-01:3.9011575808121908e+00 + CVs 20 + -3.7663842796820979e-01 1.6582608459163076e-01 -9.2861486861216413e-01 + -6.8249701685982367e-01 2.2684328803385900e-01 -1.5979681688578076e+00 + -9.5414939877760263e-01 2.5732032624563195e-01 -2.1978296602899641e+00 + -1.2064664700769570e+00 2.8081712615052001e-01 -2.7984420790465889e+00 + -1.4292437119039250e+00 2.8893168945077519e-01 -3.3907717402532089e+00 + -1.6178920946184630e+00 2.6841770433220025e-01 -3.9665614875200998e+00 + -1.7774662945191839e+00 2.0108694766005364e-01 -4.5129098597332549e+00 + -1.9222188898565422e+00 6.8696587249444496e-02 -5.0098239635698345e+00 + -2.0646146541799344e+00 -1.3664871845376836e-01 -5.4368683027437434e+00 + -2.2098911994699972e+00 -4.0347087789655611e-01 -5.7686754250045755e+00 + -2.3581781114070570e+00 -6.9183975654830765e-01 -5.9804973308790155e+00 + -2.5124164470885755e+00 -9.4813623598031316e-01 -6.0743510406351753e+00 + -2.6751065628538018e+00 -1.1545743063383787e+00 -6.0851992223909210e+00 + -2.8344769460566956e+00 -1.3786305812524704e+00 -6.0347236849429411e+00 + -2.9693110913057752e+00 -1.7160366581706450e+00 -5.9092927270190110e+00 + -3.0613562001765509e+00 -2.1953531311776899e+00 -5.7334174552571016e+00 + -3.0950431085405068e+00 -2.7603134096087785e+00 -5.5794892825658957e+00 + -3.1032260484824379e+00 -3.3167927384039562e+00 -5.4912934475535193e+00 + -3.3004525752316902e+00 -3.7745359534796643e+00 -5.4313633120083251e+00 + id 12877 + loc 4.6321287751197815e-01 1.8620461225509644e-02 406 + blend 0.0000000000000000e+00 + interp 4.0822479540152684e-01:4.0822071315357283e-01:2.4018822642235393e-01:2.6689063074716057e-01:9.7852394352036931e-01:2.6467946851487378e-01:1.6815389148569713e+00:3.4260129909633136e-01:2.3719077567018712e+00:2.8902832877777451e-01:3.1225764223270893e+00:3.9321317084549640e-01:3.8883748994092744e+00 + CVs 20 + 2.6537458395279288e-02 1.0767472289558321e-01 -2.7175592155901825e-02 + 5.7850139930451523e-02 1.9767567804339703e-01 -5.4713315786715601e-02 + 9.1884584258899976e-02 2.7737671018363741e-01 -9.1518667486349639e-02 + 1.2430017335608659e-01 3.5108985170602780e-01 -1.4774445720707749e-01 + 1.5259982370614961e-01 4.1526361214167573e-01 -2.2264565555274735e-01 + 1.7490588796362844e-01 4.6685776719917538e-01 -3.1435135355425381e-01 + 1.9023175535871215e-01 5.0474656463360268e-01 -4.2091250467063823e-01 + 1.9922910824903114e-01 5.3027124115636060e-01 -5.4131014123957333e-01 + 2.0363787039138923e-01 5.4513481553799092e-01 -6.7231734476875760e-01 + 2.0244387978644468e-01 5.4934150785128077e-01 -8.0369238233755202e-01 + 1.9145880173359481e-01 5.4429158051707771e-01 -9.2445283518899013e-01 + 1.7033106065550130e-01 5.3598228724932184e-01 -1.0364899939515104e+00 + 1.4392494659675265e-01 5.3127520770876946e-01 -1.1526879690814953e+00 + 1.1618703578932665e-01 5.3424553609752179e-01 -1.2793536674006500e+00 + 8.6751229668484364e-02 5.4747262920691964e-01 -1.4093087644947500e+00 + 5.3613808848096356e-02 5.7304485955467710e-01 -1.5349763120582167e+00 + 1.7665399649582469e-02 6.1070002642798449e-01 -1.6602120306758925e+00 + -1.7851075961987928e-02 6.5711683569288271e-01 -1.7956424297857994e+00 + -3.7830173534911693e-02 7.1565701453343677e-01 -1.9845040340358338e+00 + id 12878 + loc 3.6260864138603210e-01 5.9293919801712036e-01 377 + blend 0.0000000000000000e+00 + interp 4.5978199255712687e-01:3.2816983728805388e-01:6.1035516330020345e-01:3.5620007837999812e-01:1.0816369679994449e+00:4.2658789119822471e-01:1.7491302066255112e+00:2.4522179538804037e-01:2.5877547723660737e+00:4.5977739473720131e-01:3.3369651688254267e+00:4.0159323912384515e-01:3.9957032910033057e+00 + CVs 20 + -7.3170012779307103e-01 2.6557692626042345e-01 -5.5892805120306599e-01 + -1.3360685594761261e+00 4.2011242261820747e-01 -9.5225422149060379e-01 + -1.9318663125006645e+00 5.3319534348378239e-01 -1.2943144896683301e+00 + -2.5714140068913611e+00 6.4030467971303406e-01 -1.6464549313901760e+00 + -3.2339421698455069e+00 7.3982059449215620e-01 -2.0219364692733257e+00 + -3.8962878996651593e+00 8.1798739285455735e-01 -2.4295514995106178e+00 + -4.5347326133107186e+00 8.5125487971821179e-01 -2.8720975089628431e+00 + -5.1221474185840377e+00 8.1856305236235904e-01 -3.3439907776589837e+00 + -5.6398792430108600e+00 7.1229616376861138e-01 -3.8223003676251626e+00 + -6.0950498512344335e+00 5.3874191783591963e-01 -4.2715669687690161e+00 + -6.5101826069403348e+00 3.0079904283926640e-01 -4.6668795707207504e+00 + -6.9028263607686213e+00 -8.8082325363849634e-03 -4.9982105232871490e+00 + -7.2718992579662913e+00 -3.9171888796964405e-01 -5.2547874577512941e+00 + -7.5890223057069512e+00 -8.1534678348228917e-01 -5.4128423511151684e+00 + -7.8199390183063375e+00 -1.2233436219274445e+00 -5.4508950860725420e+00 + -7.9519269836427853e+00 -1.5911301672093927e+00 -5.3821707236174001e+00 + -7.9821600479885229e+00 -1.9166063021502486e+00 -5.2589362353604576e+00 + -7.9343171434696806e+00 -2.2088539178439124e+00 -5.1326982470754015e+00 + -8.0127478469478106e+00 -2.5424268322350403e+00 -4.9797101286887955e+00 + id 12879 + loc 5.2700418233871460e-01 3.1734147667884827e-01 403 + blend 0.0000000000000000e+00 + interp 4.7313490999240687e-01:4.1894090791399913e-01:3.3468906619762784e-01:3.6099635407458164e-01:1.0260994264920555e+00:2.7037573079009136e-01:1.7159493660122904e+00:4.7313017864330698e-01:2.1306881136945872e+00:3.9501533515886039e-01:2.8160626916863727e+00:3.7279554828535305e-01:3.1184180650763134e+00:4.0599704833836825e-01:3.7874805487732108e+00 + CVs 20 + -9.9339282163429216e-02 3.7120650764926000e-01 1.5048915613383815e-01 + -1.3794405124321318e-01 7.2667140869121871e-01 2.9617777986325416e-01 + -1.6895731964526500e-01 1.0966664233784487e+00 4.4941753045254423e-01 + -2.0850907365690940e-01 1.4816854086334224e+00 6.2737407410008816e-01 + -2.4867232814144435e-01 1.8611355886264358e+00 8.4007204935998669e-01 + -2.6633527232171572e-01 2.2127334688817566e+00 1.0786356615053356e+00 + -2.3760819668489730e-01 2.5251123736271364e+00 1.3266193481213771e+00 + -1.5015746632503979e-01 2.7924907417341274e+00 1.5698560090227573e+00 + -4.1651194054410645e-03 3.0095901202527378e+00 1.7926193734619633e+00 + 1.9306829361822220e-01 3.1789180972971991e+00 1.9868356825381523e+00 + 4.4605738636964487e-01 3.3075328123247143e+00 2.1647460586581047e+00 + 7.7563261927079163e-01 3.3905261280184562e+00 2.3438919746791336e+00 + 1.1736220852787766e+00 3.4168055054068347e+00 2.5188908384800164e+00 + 1.5899218558910664e+00 3.3923956381100706e+00 2.6679140420707430e+00 + 2.0006961502887428e+00 3.3170328357770620e+00 2.7752121442165589e+00 + 2.4485797571148908e+00 3.1479380207989331e+00 2.8392128800054999e+00 + 2.9658664716203171e+00 2.8596768819957044e+00 2.9209922733493241e+00 + 3.4647084015979388e+00 2.5340204906816517e+00 3.1124989290133480e+00 + 3.7916299504165134e+00 2.2886863946713403e+00 3.3716445399335280e+00 + id 12880 + loc 6.0064917802810669e-01 9.1163921356201172e-01 1081 + blend 0.0000000000000000e+00 + interp 5.1694331140831362e-01:3.5445804453188234e-01:6.2186144448023739e-01:3.2538969559153069e-01:1.4790627075709439e+00:4.3411487118956560e-01:1.9379208435009598e+00:5.1693814197519961e-01:2.3625197354739469e+00:3.2710421766217906e-01:3.0870915642241132e+00:5.0538520789941599e-01:3.9840758851424325e+00 + CVs 20 + 1.0589673609260000e-01 5.0516822755455049e-01 5.0294210905941339e-01 + 2.5648931641072059e-01 8.9365872757066911e-01 8.0720815937095813e-01 + 4.3447908381451900e-01 1.2368533918700662e+00 1.0365191414681796e+00 + 6.3198201682243327e-01 1.5612294838475651e+00 1.2384732663484703e+00 + 8.4227840241510488e-01 1.8538502488421986e+00 1.4023590823637591e+00 + 1.0539466449217945e+00 2.0992840918549351e+00 1.5154742360691003e+00 + 1.2502438839574599e+00 2.2802650139789047e+00 1.5666238432039554e+00 + 1.4074828642376302e+00 2.3804660147097318e+00 1.5573672301803276e+00 + 1.4906121159329904e+00 2.3908979693279422e+00 1.5127944581957751e+00 + 1.4770414701778045e+00 2.3404865724108483e+00 1.4854117060379313e+00 + 1.4211220075286075e+00 2.2915723060418793e+00 1.4926084445299486e+00 + 1.3871162902020251e+00 2.2425851742909488e+00 1.4861151662954992e+00 + 1.3759916313028855e+00 2.1570524308539700e+00 1.4416408860118402e+00 + 1.3737108732618777e+00 2.0185784234943194e+00 1.3668275853278382e+00 + 1.3735623286762535e+00 1.8302244776327630e+00 1.2829241520077963e+00 + 1.3727952341169556e+00 1.6154182672420148e+00 1.2264162116530790e+00 + 1.3700756515719390e+00 1.4021043436852394e+00 1.2294353615397133e+00 + 1.3686783506496432e+00 1.1579533129039907e+00 1.2958104218950957e+00 + 1.3744856064319033e+00 7.6894214890917212e-01 1.4234027772302604e+00 + id 12881 + loc 1.3044317066669464e-01 1.9873318076133728e-01 415 + blend 0.0000000000000000e+00 + interp 5.2844261911086365e-01:3.0439433100858249e-01:2.7464223942271437e-02:4.7369024562260215e-01:8.7729036308538300e-01:5.2843733468467258e-01:1.0023559068623222e+00:4.3557653331664109e-01:1.6233365332593783e+00:3.7396951637972309e-01:1.9470993146438276e+00:2.9634309496208000e-01:2.0195236116937680e+00:3.1093480836060283e-01:2.6964235395923124e+00:2.6071692727482293e-01:3.2877977223238668e+00 + CVs 20 + -2.2313549510925727e-02 1.2957072192715316e-01 -5.8618747676139837e-02 + -5.4784095954872269e-02 2.3263231571695286e-01 -7.2746500105187184e-02 + -9.1430553273804810e-02 3.4979293197092975e-01 -7.3522648338325058e-02 + -1.1392658931028005e-01 4.8286738400797191e-01 -8.4559763769166227e-02 + -1.1555397146641749e-01 6.3053744388290611e-01 -1.0666323023516666e-01 + -8.9919163964527871e-02 7.8949325887858279e-01 -1.3906319694665456e-01 + -3.1377159619001282e-02 9.5366981329609091e-01 -1.7896661689547852e-01 + 6.3068764155441270e-02 1.1139270467439886e+00 -2.2026188420195159e-01 + 1.9139676338589517e-01 1.2612483241675263e+00 -2.5468611762520155e-01 + 3.4902696214211443e-01 1.3912824253921956e+00 -2.7583198743477644e-01 + 5.3543425202774553e-01 1.5042726234701291e+00 -2.8301141831569454e-01 + 7.5605059317020162e-01 1.5999030524433695e+00 -2.8145379581354873e-01 + 1.0111603963854467e+00 1.6737481116418897e+00 -2.7611109415131435e-01 + 1.2925981335587982e+00 1.7234707540779373e+00 -2.6903742644851247e-01 + 1.5927317607657645e+00 1.7518361119553236e+00 -2.6296930400967655e-01 + 1.9077834755012750e+00 1.7621046157498190e+00 -2.6236110403129875e-01 + 2.2337577540382205e+00 1.7539372851604198e+00 -2.6858791022161632e-01 + 2.5626661026860309e+00 1.7252733312234889e+00 -2.7265879388322489e-01 + 2.8585671361146643e+00 1.7219187573125134e+00 -2.5430109781127408e-01 + id 12882 + loc 8.0504286289215088e-01 5.4119867086410522e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5242873226574065e-01:3.4784919616283216e-01:4.6050196386692166e-01:4.0236140742527132e-01:9.9888599002739198e-01:3.3102112551915513e-01:1.5305674310966348e+00:4.5242420797841804e-01:2.0797069980817882e+00:3.4957333822771619e-01:2.9227851431820442e+00:3.5482362356947816e-01:3.3497917921458833e+00:2.9538794764776816e-01:3.9879100625815429e+00 + CVs 20 + 1.0601831109362525e-01 4.0161336261739777e-01 2.2187389681268621e-01 + 2.0919168195931276e-01 6.9861751310235976e-01 2.9327762457916828e-01 + 3.0690551880178030e-01 9.6340060239356196e-01 3.1895153858214387e-01 + 3.9392099958649235e-01 1.2031761124645406e+00 3.2937659195121749e-01 + 4.6560461356533411e-01 1.3985450017024244e+00 3.2061235387694964e-01 + 5.0939332567665885e-01 1.5267853612388107e+00 2.9955493337292394e-01 + 4.9550282808386142e-01 1.5709903409058548e+00 2.9775979527489382e-01 + 3.8924079781919552e-01 1.5708040582458513e+00 3.8961349951797475e-01 + 2.5761311173534940e-01 1.6637378839579400e+00 5.8547045262118358e-01 + 2.1820439548852516e-01 1.8540480333058744e+00 7.2852061849592420e-01 + 2.5409909711737205e-01 2.0395936829187455e+00 7.5384619376970152e-01 + 3.1765310186350071e-01 2.1615665946462039e+00 6.7987692327206029e-01 + 3.7412814433127350e-01 2.1746922009559748e+00 5.5426238114617077e-01 + 4.1868027717344203e-01 2.0613213882373858e+00 4.5281072812186229e-01 + 4.5727147562962567e-01 1.8005609447370374e+00 4.6439130263094064e-01 + 4.2906460151383496e-01 1.2485893146536831e+00 5.8088067938306875e-01 + 1.6242552192008369e-01 3.3367746216960903e-01 1.8222433767162974e-01 + -3.4142320435198922e-03 1.9638644247062503e-01 -9.5454358677703066e-01 + 5.2316362169647711e-02 2.7626275027122293e-01 -8.7868623601087281e-01 + id 12883 + loc 7.5117045640945435e-01 7.6942288875579834e-01 264 + blend 0.0000000000000000e+00 + interp 3.9578186080090794e-01:2.8195626389700956e-01:5.9901915804429140e-01:3.9335161764526222e-01:1.0015405711201264e+00:3.3979159582600799e-01:1.9364502541082844e+00:3.9577790298229992e-01:2.7693500097310806e+00:3.4002698630992001e-01:3.4451549279393907e+00 + CVs 20 + -8.6444314825153612e-01 4.6310783724365262e-01 -3.0093366177741826e-01 + -1.5701756098973836e+00 6.8073533312317414e-01 -4.3437230865970111e-01 + -2.2296013680788098e+00 6.9549311591270979e-01 -4.4799505552823149e-01 + -2.8825495847564424e+00 5.9989530821036663e-01 -4.0746005360552034e-01 + -3.5193797364070130e+00 4.7876128096004489e-01 -3.7738168662672422e-01 + -4.1202042767678364e+00 3.7594814233505924e-01 -4.0894559364552252e-01 + -4.6745457337695324e+00 3.0667019686967745e-01 -5.2406718186531176e-01 + -5.1836974348827152e+00 2.8771200757758741e-01 -7.2251121144959396e-01 + -5.6495857694922549e+00 3.3793252940619345e-01 -9.9617518130369875e-01 + -6.0883849767466369e+00 4.5699567153566800e-01 -1.3440254158812266e+00 + -6.5255944048654975e+00 6.0459306392708334e-01 -1.7701759644343187e+00 + -6.9697721724631396e+00 7.3175059217407967e-01 -2.2882370641566050e+00 + -7.4012041275430329e+00 7.6168411747441711e-01 -2.9221270161806485e+00 + -7.7577485652949534e+00 6.0845992647119562e-01 -3.6597709001041254e+00 + -7.9687563739710567e+00 2.0890944226778396e-01 -4.4345870074741667e+00 + -8.0700144558588125e+00 -5.1558650568991959e-01 -5.1221066645743178e+00 + -8.2404463443433791e+00 -1.5181082232555951e+00 -5.4836248365243883e+00 + -8.6055686096420381e+00 -2.3967337287062911e+00 -5.4697539857495681e+00 + -9.0161599541585140e+00 -2.8853754327073640e+00 -5.4212614199563109e+00 + id 12884 + loc 8.7704509496688843e-02 9.7536170482635498e-01 411 + blend 0.0000000000000000e+00 + interp 4.8731049755240535e-01:3.6907332399622306e-01:9.5301770636776295e-01:3.1180829343998168e-01:2.1500359337514507e+00:4.8311265204256171e-01:2.9161200981420103e+00:4.8730562444742986e-01:3.2596394319078539e+00:3.2736116338121690e-01:3.9411705446236045e+00 + CVs 20 + 1.0538517082337531e+00 1.2059900752703569e-01 -4.8134147243515168e-02 + 1.7504514508467359e+00 1.1223142654079399e-01 -1.1733189850597595e-01 + 2.3714542028737049e+00 7.1679781020821620e-02 -1.5480177143364976e-01 + 3.0066799404143634e+00 3.8635725372551222e-02 -1.3557066770151077e-01 + 3.6415152202282890e+00 1.9782090673323149e-02 -4.9803251403149798e-02 + 4.2652071265842073e+00 1.8703285635775835e-02 1.0391094954312910e-01 + 4.8740919153929969e+00 3.2513965860009097e-02 3.2025699103382932e-01 + 5.4713653840156669e+00 4.8291600301130000e-02 5.9113052946136058e-01 + 6.0656279438773026e+00 4.0782488803760897e-02 9.0833827289662716e-01 + 6.6655904990997010e+00 -2.7439385896532942e-02 1.2600559508885711e+00 + 7.2658884907785186e+00 -1.9491242203470893e-01 1.6227996907225861e+00 + 7.8379493587771050e+00 -4.7624784010215637e-01 1.9672455003001723e+00 + 8.3517942944265116e+00 -8.5622905064763866e-01 2.2722739516598822e+00 + 8.7981020021393821e+00 -1.3091960139262997e+00 2.5264483190006666e+00 + 9.1892774269024553e+00 -1.8128669164803823e+00 2.7230789813103984e+00 + 9.5328753715467585e+00 -2.3553719481382762e+00 2.8554455726151264e+00 + 9.8138423205049499e+00 -2.9299117353582220e+00 2.9203233016206598e+00 + 1.0011485663775183e+01 -3.5156410180698332e+00 2.9261505305598363e+00 + 1.0085002983474759e+01 -3.8740571703072217e+00 2.8491829316908968e+00 + id 12885 + loc 5.0812818109989166e-02 6.1193495988845825e-01 393 + blend 0.0000000000000000e+00 + interp 4.5453414251420177e-01:3.4792600928970113e-01:1.2009521274634771e-01:4.5452959717277663e-01:1.0241862405090301e+00:3.4205138172948646e-01:1.6920508123434663e+00:3.0523904934158436e-01:1.8562233984454022e+00:2.5999773632064349e-01:2.3026050614571405e+00:2.8911119277420722e-01:3.0081292090324250e+00:4.3435942205809452e-01:3.4950401916793812e+00 + CVs 20 + -3.1283252005341688e-01 4.4684946363453748e-01 -1.7661686268711504e-01 + -5.7102539652647033e-01 8.8685379438378442e-01 -3.7196776592344460e-01 + -7.9950937552584034e-01 1.3217587723643587e+00 -5.7423377604535741e-01 + -1.0222896652934432e+00 1.7470736739090125e+00 -7.7959933026168893e-01 + -1.2608247605448772e+00 2.1576247179596315e+00 -9.8521972730874852e-01 + -1.5304360709342069e+00 2.5515670505082824e+00 -1.1837411185254521e+00 + -1.8441468425235372e+00 2.9278726896778728e+00 -1.3666698030740669e+00 + -2.2155455031007714e+00 3.2687820451507501e+00 -1.5229015829264922e+00 + -2.6298738557113532e+00 3.5360826862411474e+00 -1.6361055369227693e+00 + -3.0499788589605075e+00 3.6999017372738905e+00 -1.6897408805187597e+00 + -3.4749428995070732e+00 3.7697954897680166e+00 -1.6905014743376938e+00 + -3.9264310655559638e+00 3.7714279544427951e+00 -1.6702209625572848e+00 + -4.4013864451152811e+00 3.7061314224186277e+00 -1.6397846671965663e+00 + -4.8765612990215503e+00 3.5505705992978966e+00 -1.5783214426760950e+00 + -5.3198461481710524e+00 3.2869663828022730e+00 -1.5050817263922966e+00 + -5.6594410591954274e+00 2.9273758266516721e+00 -1.4898618573621365e+00 + -5.8697052862397747e+00 2.5090530743279329e+00 -1.5257066725590915e+00 + -6.0599552812607476e+00 2.0347989699465145e+00 -1.4903829635757782e+00 + -6.3715435901429274e+00 1.4485391039943778e+00 -1.2709823240194629e+00 + id 12886 + loc 1.3318803906440735e-01 6.3348311185836792e-01 382 + blend 0.0000000000000000e+00 + interp 5.1674649107386772e-01:5.1674132360895697e-01:3.3179957551647388e-01:3.4508032656428750e-01:1.0105221480852395e+00:3.2677239672425584e-01:1.8921507747172983e+00:3.6392119793512701e-01:2.4972903929463675e+00:3.1037204006948726e-01:3.0220822022223950e+00:3.6306495875045602e-01:3.9900879200599628e+00 + CVs 20 + 9.1230113735978779e-01 1.3997971023112665e-01 -5.0483662692685549e-01 + 1.5106384954977250e+00 1.4436086922295818e-01 -8.9173547621792482e-01 + 2.0292884336966219e+00 1.0948425621339436e-01 -1.2555780948514947e+00 + 2.5481342390339488e+00 6.9689242939300566e-02 -1.6195799234278931e+00 + 3.0624794037203977e+00 2.2146002683156363e-02 -1.9707491460971001e+00 + 3.5694562513752790e+00 -3.6091493315955070e-02 -2.3008864995863343e+00 + 4.0671265304542139e+00 -1.0928052361986595e-01 -2.6080492867418239e+00 + 4.5545128749027910e+00 -2.0557994875136720e-01 -2.8946536510542593e+00 + 5.0391053992632084e+00 -3.4317501780950566e-01 -3.1714302025737418e+00 + 5.5264437014290433e+00 -5.5199172164854837e-01 -3.4542425615474479e+00 + 5.9988496092762782e+00 -8.6235344070047049e-01 -3.7560427433537629e+00 + 6.4184370962089980e+00 -1.2890367565443512e+00 -4.0796327702749382e+00 + 6.7508999006898938e+00 -1.8263250071138484e+00 -4.4139257158859309e+00 + 6.9759614198624442e+00 -2.4552108616476720e+00 -4.7417891317567680e+00 + 7.0804361198269632e+00 -3.1491262297571505e+00 -5.0387594033390641e+00 + 7.0600554140383887e+00 -3.8686976724746129e+00 -5.2720406788509386e+00 + 6.9299869275893027e+00 -4.5647581623304383e+00 -5.4097909931750277e+00 + 6.7301296879229247e+00 -5.1964523601818549e+00 -5.4439501369447933e+00 + 6.5390662234613437e+00 -5.7806174130734647e+00 -5.4609845994274497e+00 + id 12887 + loc 1.1182703077793121e-01 7.5021308660507202e-01 409 + blend 0.0000000000000000e+00 + interp 3.9783695743944053e-01:3.9783297906986614e-01:4.3497791187386947e-02:3.6155928734086656e-01:8.0729374803365050e-01:3.5874857217996348e-01:1.1846604621234662e+00:2.6468223685461495e-01:1.8991557301462898e+00:3.7820355547708900e-01:2.1231347762489845e+00:3.7077492080303581e-01:3.0860456285495874e+00:2.7807610032881647e-01:3.7863241847747657e+00 + CVs 20 + 5.3299467113349763e-01 2.4420185562643454e-01 -2.3533728788040120e-01 + 9.6897567273538954e-01 4.1878335977703163e-01 -4.6951241142153616e-01 + 1.4021561619909209e+00 5.7375877718782964e-01 -7.1425394879327619e-01 + 1.8556435854587350e+00 7.1373611951803240e-01 -9.7605048185369181e-01 + 2.3035724400705906e+00 8.1495398440182121e-01 -1.2574524905688573e+00 + 2.7270185350162701e+00 8.6151862574566362e-01 -1.5607802709198488e+00 + 3.1232724294977623e+00 8.4911632007170135e-01 -1.8871841197740671e+00 + 3.5023729898017866e+00 7.7493534520697960e-01 -2.2358270623281946e+00 + 3.8734398558270353e+00 6.3260969518103338e-01 -2.5987569348569663e+00 + 4.2353773627414784e+00 4.1416517577867085e-01 -2.9607844271206321e+00 + 4.5820514279938873e+00 1.1085530100991559e-01 -3.3024902698496259e+00 + 4.9014113742078695e+00 -2.7913909378181723e-01 -3.6082719970870798e+00 + 5.1806690150669068e+00 -7.3149435082798098e-01 -3.8879105276790167e+00 + 5.4074814404055491e+00 -1.2053565259133703e+00 -4.1817615024919688e+00 + 5.5716503512242390e+00 -1.6647059227111738e+00 -4.5328672967494681e+00 + 5.6744097313532258e+00 -2.0982358260514204e+00 -4.9765390857082439e+00 + 5.7382877424867296e+00 -2.5328394005663437e+00 -5.5288817295740706e+00 + 5.8028583860109935e+00 -3.0116427721037962e+00 -6.1624572016374142e+00 + 5.8772855930969055e+00 -3.5469845596575054e+00 -6.8258204714913200e+00 + id 12888 + loc 8.1789022684097290e-01 1.8843196332454681e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1901286846570535e-01:2.4498055600010721e-01:9.3242661420389195e-01:3.9310065891964918e-01:1.2273078215672262e+00:3.1254363561939824e-01:2.0552276372873566e+00:4.1900867833702071e-01:2.7123736451641478e+00:2.9110963341948870e-01:3.0589937857448017e+00:3.5361778216971584e-01:3.9902727013112922e+00 + CVs 20 + -9.4537490923619127e-02 1.1279093870834841e-01 2.4208338801922535e-01 + -1.9694237933846029e-01 1.8766925320858274e-01 4.3298982509754363e-01 + -2.9817708381233887e-01 2.4056447213750293e-01 5.9323967480968498e-01 + -3.9611672571521339e-01 2.7931775374670642e-01 7.3990681873625530e-01 + -5.5594243658730025e-01 3.1193663223474261e-01 8.8422237699258555e-01 + -8.6640750157140678e-01 3.7051053321771821e-01 1.0178772873775830e+00 + -1.3038120750123707e+00 5.4181471691734540e-01 1.1232060699276478e+00 + -1.7130047984150580e+00 8.6755287903788048e-01 1.1800175965801023e+00 + -2.0069396132327904e+00 1.3186317913060202e+00 1.1779991755968371e+00 + -2.1739135972255990e+00 1.9086326538283611e+00 1.1376479191796669e+00 + -2.1638464692132766e+00 2.6425478561341240e+00 1.1611375871617580e+00 + -1.9359973163320796e+00 3.3482033787991994e+00 1.3852781151517783e+00 + -1.5513614668713316e+00 3.8422375816348318e+00 1.8009636761039294e+00 + -1.0818158985423580e+00 4.0792618846168462e+00 2.3056917078897179e+00 + -5.9106212808038960e-01 4.0708912127154493e+00 2.7979273893119023e+00 + -1.1337089047541227e-01 3.8543864943480250e+00 3.2746549566726832e+00 + 3.2021642376587378e-01 3.4133339109747416e+00 3.7889918926834634e+00 + 6.1061484342085315e-01 2.7259366799846365e+00 4.2569927690068283e+00 + 5.9266831031931710e-01 2.3268172864886214e+00 4.2581222559264269e+00 + id 12889 + loc 3.4033281262964010e-03 1.8373055756092072e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7622227282544638e-01:3.5571477951715846e-01:6.8912495610270286e-01:4.7621751060271816e-01:1.4145159283717379e+00:2.3003199813852807e-01:1.9715087822099000e+00:2.9633753030083693e-01:2.9987395172369027e+00:3.6216805516413136e-01:3.8211244194934064e+00 + CVs 20 + 1.4348397729863999e-01 3.4264284728137800e-01 -1.0742574910436772e-02 + 2.1627121426963131e-01 6.2148231238015783e-01 -2.0095768290408336e-02 + 2.7432165164171585e-01 8.9422952733252026e-01 -4.6994053674603173e-02 + 3.5381399521256618e-01 1.1766938839862087e+00 -9.5650887126850687e-02 + 4.4935803295573812e-01 1.4663825302076647e+00 -1.7118101439746181e-01 + 5.5281107026607956e-01 1.7607202559447588e+00 -2.7846450525789956e-01 + 6.4724868269139446e-01 2.0574107444590881e+00 -4.2610455689526827e-01 + 7.0755779094040139e-01 2.3482593669519920e+00 -6.2650211947775658e-01 + 7.0836649709033661e-01 2.6119950372368641e+00 -8.8779874863855512e-01 + 6.3329368013615150e-01 2.8137797842726604e+00 -1.2027766669410842e+00 + 4.8580382353067497e-01 2.9198154979472717e+00 -1.5460619290226014e+00 + 2.8690786461252515e-01 2.9158131983870290e+00 -1.8890218852293956e+00 + 5.9314001638080649e-02 2.8059636150960174e+00 -2.2119806228817347e+00 + -1.7910793330626940e-01 2.6024762705747642e+00 -2.5048347721609998e+00 + -4.1455780961164934e-01 2.3177008707000226e+00 -2.7645397787670869e+00 + -6.2798593943066749e-01 1.9542287488128383e+00 -2.9937858323371391e+00 + -7.5839235188708598e-01 1.5085323392680219e+00 -3.1892546874570771e+00 + -7.1944932285663055e-01 1.0381272381166031e+00 -3.3274586629386707e+00 + -6.2616082007353913e-01 6.7923759368048020e-01 -3.4085739007587041e+00 + id 12890 + loc 7.4074518680572510e-01 7.1593821048736572e-01 395 + blend 0.0000000000000000e+00 + interp 4.3631082268326626e-01:2.6743415635037249e-01:2.7931901718915531e-01:2.8452628456122003e-01:1.0767407139087750e+00:4.3630645957503944e-01:1.9962500869192703e+00:3.3783765875634281e-01:2.7759086984755532e+00:3.2160932595982478e-01:3.5425649645951260e+00 + CVs 20 + 4.1213865751321827e-01 2.1766006791947495e-01 -4.0074339938071513e-01 + 7.2076777423891270e-01 3.8875040627359758e-01 -7.3038626386104888e-01 + 1.0013086150208850e+00 5.4981048451946457e-01 -1.0526991748015067e+00 + 1.2951588932084643e+00 7.1897943354549676e-01 -1.3992516923946219e+00 + 1.6092164018499868e+00 8.8266741463357579e-01 -1.7699899041902216e+00 + 1.9463098769419709e+00 1.0220653365149899e+00 -2.1629101780435636e+00 + 2.3060194649517358e+00 1.1173609148444537e+00 -2.5764553858285195e+00 + 2.6869694198173177e+00 1.1470979918976392e+00 -3.0082093523003217e+00 + 3.0828759861308228e+00 1.0870974283320443e+00 -3.4489193595507950e+00 + 3.4725138385988670e+00 9.1622242703219148e-01 -3.8805606703979398e+00 + 3.8206532730688432e+00 6.2771103675389806e-01 -4.2817314802149635e+00 + 4.0990362348373282e+00 2.3483480654633260e-01 -4.6327854852928958e+00 + 4.3014114820560758e+00 -2.3602630617698495e-01 -4.9183818225292626e+00 + 4.4337108245348089e+00 -7.5309437157347148e-01 -5.1295837728502383e+00 + 4.5035557810184841e+00 -1.2830061240770174e+00 -5.2664683111083859e+00 + 4.5206388011837628e+00 -1.7974544464975306e+00 -5.3346153579520745e+00 + 4.4982442960042563e+00 -2.2742481302611126e+00 -5.3384289090170753e+00 + 4.4557451812928166e+00 -2.6977826853950071e+00 -5.2896081383147067e+00 + 4.4667508765487227e+00 -3.1109962506870890e+00 -5.2930856581696499e+00 + id 12891 + loc 4.6733576059341431e-01 4.1120257228612900e-02 414 + blend 0.0000000000000000e+00 + interp 5.0363992705444560e-01:5.0363489065517508e-01:3.7336373012391622e-01:4.0383626867024647e-01:9.6494698619054486e-01:3.4094276869483009e-01:1.3203693882184724e+00:4.2832091066522748e-01:2.0002365742962467e+00:2.5739994352925250e-01:3.8634893428466568e+00 + CVs 20 + -1.5723978881007672e-01 1.8369636770562281e-01 -8.9149083847011179e-01 + -3.2178579956808984e-01 1.9176487199034056e-01 -1.4386414043185489e+00 + -4.9030355803478232e-01 1.2152568749644682e-01 -1.9015406225621925e+00 + -6.5676322523305541e-01 1.3100014013873396e-02 -2.3866170327760208e+00 + -8.1259308631548244e-01 -1.3530201316373064e-01 -2.8830982788067372e+00 + -9.4761679223886475e-01 -3.2026922992687623e-01 -3.3797859449459398e+00 + -1.0530785287379072e+00 -5.3377382413288632e-01 -3.8639730500013707e+00 + -1.1277390133705656e+00 -7.6622486448588278e-01 -4.3219480123488854e+00 + -1.1761511123880981e+00 -1.0091707392706095e+00 -4.7435941615812665e+00 + -1.1938798492288298e+00 -1.2533429502564590e+00 -5.1214841330050058e+00 + -1.1786563130844683e+00 -1.4861259631643517e+00 -5.4371613994429655e+00 + -1.1364623166545265e+00 -1.6887260323708035e+00 -5.6670108255460674e+00 + -1.0709710877516783e+00 -1.8574814092865275e+00 -5.8276176639555013e+00 + -9.8213332031243183e-01 -2.0272095335528206e+00 -5.9741170193571254e+00 + -8.7587961183298202e-01 -2.2288801543834080e+00 -6.1388691508476558e+00 + -7.5869824632007543e-01 -2.4648122555438108e+00 -6.3242534281952265e+00 + -6.4236122287859032e-01 -2.7352192086127514e+00 -6.5275902498489238e+00 + -5.4799218761734547e-01 -3.0443624411612005e+00 -6.7433746398040322e+00 + -5.1380627237644738e-01 -3.4007146083425202e+00 -6.9510498556052021e+00 + id 12892 + loc 5.3935039043426514e-01 8.8969522714614868e-01 373 + blend 0.0000000000000000e+00 + interp 5.2439449363967672e-01:3.4382399702228089e-01:6.0604873853575170e-01:5.2438924969474032e-01:9.9983721256218050e-01:3.6064212371471921e-01:1.8662417842198376e+00:3.4901304860879945e-01:2.5005575400021223e+00:2.9634151414630278e-01:3.0228106478022605e+00:3.9677006346286248e-01:3.9812251558679783e+00 + CVs 20 + -3.4784511206019780e-01 4.0939287672242730e-01 -2.3495846902411927e-01 + -6.4902301580943145e-01 8.0446631434089710e-01 -4.6584831894391499e-01 + -8.9858889656808349e-01 1.1927550795090291e+00 -7.1297830293524389e-01 + -1.1031973302897322e+00 1.5750036205532705e+00 -9.8870705800015757e-01 + -1.2689523352962340e+00 1.9429134518686952e+00 -1.2980546754086351e+00 + -1.4050826437924127e+00 2.2905060031257878e+00 -1.6477265221009159e+00 + -1.5230078811413710e+00 2.6093008712479469e+00 -2.0477756766167676e+00 + -1.6342180331688945e+00 2.8802109418979045e+00 -2.5025325762765487e+00 + -1.7526541227139645e+00 3.0835327108394175e+00 -3.0024343257485371e+00 + -1.8914521237570470e+00 3.2078475023220570e+00 -3.5242649590065920e+00 + -2.0622981857781797e+00 3.2553402378957359e+00 -4.0392774871605406e+00 + -2.2804839544837519e+00 3.2266678245354425e+00 -4.5325757262070887e+00 + -2.5550279107063747e+00 3.1030230243883952e+00 -4.9966452577855334e+00 + -2.8767681746648877e+00 2.8599533819492042e+00 -5.4156572186062135e+00 + -3.2300686977993509e+00 2.4920773867720323e+00 -5.7766286662499748e+00 + -3.5993909416222194e+00 2.0133498922134589e+00 -6.0721211438761191e+00 + -3.9418458406551511e+00 1.4519272442551632e+00 -6.2686552459054070e+00 + -4.1541784578986061e+00 8.5101685334706101e-01 -6.2881919327871145e+00 + -4.3004883734873376e+00 1.6909123901173473e-01 -6.1792769178694318e+00 + id 12893 + loc 9.1483664512634277e-01 4.6580451726913452e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4406699839979424e-01:4.4406255772981029e-01:4.6688446542550854e-01:3.1889083805864993e-01:1.0030688689640932e+00:2.4296112995069830e-01:1.9959576727948967e+00:3.2374914268682431e-01:2.5398261865565916e+00:3.4805851312811381e-01:3.0909541942179253e+00:3.5230015464075004e-01:3.9505633391953063e+00 + CVs 20 + -1.4869107478375879e-01 3.5216705734773979e-01 1.6965406455801982e-01 + -2.9514481698575196e-01 7.0494377019235688e-01 3.1537855132749870e-01 + -4.5317328805103102e-01 1.0505996386493763e+00 4.2697438419201061e-01 + -6.3338794034158641e-01 1.3791114948337557e+00 5.0024893464317288e-01 + -8.4169727627100255e-01 1.6819753019905090e+00 5.3785156474639662e-01 + -1.0874920093600695e+00 1.9514971535756032e+00 5.4665539650692829e-01 + -1.3806076477332569e+00 2.1786484380729458e+00 5.3886033683952927e-01 + -1.7210361076497547e+00 2.3495040465010093e+00 5.3296549519464553e-01 + -2.0949760359111318e+00 2.4568342159330365e+00 5.4971721776591675e-01 + -2.4908906234377826e+00 2.5114930264858226e+00 6.0918219498907544e-01 + -2.9112628153807707e+00 2.5162510808412044e+00 7.4158996693204582e-01 + -3.2817277365567170e+00 2.4365401675029772e+00 9.6358889861420571e-01 + -3.4374671884678270e+00 2.3057093014694843e+00 1.1379537174856815e+00 + -3.4972077591604682e+00 2.0736210110117805e+00 1.1730124916296858e+00 + -3.8952279353571022e+00 1.4818020125749123e+00 1.5639859385035768e+00 + -3.7886701759693557e+00 9.2013117037137004e-01 1.9945623198110023e+00 + -3.4179347214125619e+00 5.6298865078804938e-01 2.2579707832284450e+00 + -3.0375294856245585e+00 2.9341811721346789e-01 2.4046944023584071e+00 + -2.7195415335295903e+00 5.8902432250949599e-02 2.5076762686099325e+00 + id 12894 + loc 8.2248395681381226e-01 5.4137308150529861e-02 406 + blend 0.0000000000000000e+00 + interp 3.2024837876098111e-01:2.6583359802734147e-01:1.2950345110168526e-01:3.2024517627719351e-01:9.4620387071811562e-01:2.4491591649794725e-01:1.9789644490485303e+00:2.7755163966012292e-01:2.9206978619841024e+00:2.8857270280602865e-01:3.6342980489218100e+00 + CVs 20 + -4.6031700973322709e-02 2.4096709109896580e-01 -9.6297813861888279e-02 + -6.7136553422519896e-02 4.3273908094949676e-01 -2.2714409987738385e-01 + -1.3177996061823433e-01 6.2998594069464064e-01 -3.5285245427042689e-01 + -2.4743259778680893e-01 8.2210318581783604e-01 -4.6627534557919237e-01 + -4.1295197695925290e-01 9.9662940754333174e-01 -5.6430766276507283e-01 + -6.2114717570187339e-01 1.1414027489906231e+00 -6.4514263486667156e-01 + -8.5843250707211716e-01 1.2466453728855846e+00 -7.1007668386648104e-01 + -1.1051601794046164e+00 1.3078083505448190e+00 -7.6516386573456052e-01 + -1.3455915406150667e+00 1.3262002674269466e+00 -8.1544514220946362e-01 + -1.5791153041566890e+00 1.3041503367240816e+00 -8.5351183989341239e-01 + -1.8113618448902253e+00 1.2423128136841197e+00 -8.6276049310099090e-01 + -2.0337340926088165e+00 1.1439226791747106e+00 -8.3644534686234429e-01 + -2.2222564301299261e+00 1.0205104888786756e+00 -7.8892038215667581e-01 + -2.3621255270446668e+00 8.8753663343145783e-01 -7.3635164653094021e-01 + -2.4578399068535082e+00 7.5426451735368882e-01 -6.7587938850949203e-01 + -2.5185261023196710e+00 6.2480680052989856e-01 -5.9697836036591601e-01 + -2.5453971298204991e+00 5.0309150138812408e-01 -4.9962700482329370e-01 + -2.5337150255363863e+00 3.9500819892557415e-01 -3.9519971832444223e-01 + -2.4951820468183290e+00 3.3278182127727329e-01 -3.0186769297526250e-01 + id 12895 + loc 1.7134279012680054e-01 3.4882247447967529e-01 377 + blend 0.0000000000000000e+00 + interp 4.4424211442762557e-01:4.0535631658810928e-01:1.0020107098882112e+00:2.4581854786336949e-01:1.3173301650191920e+00:3.0333191701561535e-01:2.0204308800358106e+00:4.4423767200648129e-01:2.6392817617867212e+00:3.4336208041779132e-01:3.0430675335404942e+00:3.6328578303691184e-01:3.8846605179394373e+00 + CVs 20 + -5.0218349355309055e-01 4.5175150788008023e-01 8.0374226222150358e-01 + -7.6420900071723930e-01 7.1423644552932930e-01 1.4557135393479519e+00 + -8.9685612879709375e-01 8.6140873652349215e-01 2.0972452990037111e+00 + -9.8193727954450161e-01 9.4531179752276506e-01 2.7871718540794688e+00 + -1.0747185592550834e+00 9.8115666865231410e-01 3.5240651524567101e+00 + -1.2204716240265479e+00 9.5514112424236397e-01 4.2977838951324872e+00 + -1.4430962094484807e+00 8.3407039616078027e-01 5.0820531832612676e+00 + -1.7462142368256190e+00 5.9309060852329565e-01 5.8372869347527541e+00 + -2.1148055310580349e+00 2.2541226547275461e-01 6.5106415491811624e+00 + -2.5008240494405234e+00 -2.4995609772715222e-01 7.0390439499887840e+00 + -2.8363749261141118e+00 -7.8514895940958773e-01 7.3917320210409079e+00 + -3.0779861998820355e+00 -1.3243657591876059e+00 7.5794311279461386e+00 + -3.2252515553577465e+00 -1.8244300076152875e+00 7.6445251084288612e+00 + -3.3123268738523191e+00 -2.2848102229546989e+00 7.6517537529990456e+00 + -3.3711141996940035e+00 -2.7390874875119633e+00 7.6594072279361862e+00 + -3.4126703194829959e+00 -3.1936449931179620e+00 7.7056855720646693e+00 + -3.4389624129008793e+00 -3.6146213703544121e+00 7.8085159210718231e+00 + -3.4521767849065719e+00 -3.9817481021168089e+00 7.9759986459578709e+00 + -3.4527815777908661e+00 -4.3331989203842669e+00 8.2431788343191847e+00 + id 12896 + loc 6.5967768430709839e-01 6.3553655147552490e-01 1081 + blend 0.0000000000000000e+00 + interp 3.6668074439890475e-01:3.2419075135461606e-01:3.5605391029407851e-02:3.6667707759146079e-01:9.8015297000194945e-01:3.1674560269102181e-01:1.9008295396949042e+00:3.3502487520998026e-01:2.7797576101214996e+00:2.5093824950227300e-01:3.2032647892918105e+00 + CVs 20 + 7.8904879779293113e-02 5.8423212807954195e-01 4.8100636702108790e-01 + 1.8364632103408782e-01 1.0427589789427283e+00 7.6849702575148238e-01 + 2.8934485410165600e-01 1.4620987827083600e+00 9.9673674552832581e-01 + 3.9207966050157744e-01 1.8708520902955110e+00 1.2043227731813451e+00 + 4.9893471256044486e-01 2.2601945307273934e+00 1.3767949705028242e+00 + 6.1646459415819899e-01 2.6170404182366895e+00 1.4895836958285245e+00 + 7.4951695529687901e-01 2.9215683776961527e+00 1.5094341319909144e+00 + 8.9535357291483231e-01 3.1359416580852439e+00 1.3993244040209172e+00 + 1.0175282092479196e+00 3.1725271291390307e+00 1.1319539158067022e+00 + 1.0197674064437092e+00 2.9674550118550393e+00 8.1842715140701872e-01 + 9.3355425064526210e-01 2.6982183826568393e+00 6.1283470758377212e-01 + 8.6309347452803253e-01 2.4586262530484682e+00 4.4560159474457939e-01 + 8.2622220580858152e-01 2.2081147893597701e+00 2.5997398599227406e-01 + 8.2182917390200971e-01 1.9079835701336547e+00 5.4692497615951741e-02 + 8.4797962909089986e-01 1.5125254696882182e+00 -1.3287558189123894e-01 + 8.9476973432379570e-01 9.5860482318394491e-01 -1.9750903791894386e-01 + 9.5384299894904034e-01 2.9175206626065592e-01 -2.2973515902745059e-02 + 1.0377725270592351e+00 -3.2812178454889623e-01 2.6680517353285071e-01 + 1.1561571179434256e+00 -8.5003074355323771e-01 3.0750769777309239e-01 + id 12897 + loc 3.7639859318733215e-01 7.7951598167419434e-01 399 + blend 0.0000000000000000e+00 + interp 4.2719157901351723e-01:3.9208355559450597e-01:3.0985412205126905e-01:3.5238357602225895e-01:1.1453904966768031e+00:3.4860392191757933e-01:2.0064008714382138e+00:3.9422394822550511e-01:2.5683301234334337e+00:4.2718730709772712e-01:3.1757833392191022e+00:4.0928576263658278e-01:3.9131816377823005e+00 + CVs 20 + -2.3793431497906944e-01 2.9220481900254169e-01 -1.3185413795449250e-01 + -4.5147815798282193e-01 6.0316590151089200e-01 -3.0816606296815280e-01 + -6.5951793388366053e-01 9.2090098066599646e-01 -5.1395346577433598e-01 + -8.8028154697474326e-01 1.2349360397531945e+00 -7.4511899284560634e-01 + -1.1296467658502694e+00 1.5295561915620912e+00 -1.0050715719266674e+00 + -1.4249813818645809e+00 1.7799463535224316e+00 -1.2952963170029734e+00 + -1.7758477812956748e+00 1.9559253632856328e+00 -1.6118225256148337e+00 + -2.1766520534375209e+00 2.0380122381722292e+00 -1.9397834861310397e+00 + -2.6149571665084683e+00 2.0203487360003010e+00 -2.2666884338538025e+00 + -3.0695244765763401e+00 1.8805743735015028e+00 -2.5928023079983875e+00 + -3.4941713285615972e+00 1.6101636722603987e+00 -2.9051737730146208e+00 + -3.8660870313119244e+00 1.2816311869143460e+00 -3.1753626299756403e+00 + -4.2197619522644247e+00 9.6496842961392038e-01 -3.3928474464528815e+00 + -4.5822292734315839e+00 6.3827782593750626e-01 -3.5588457077154008e+00 + -4.9487798557725835e+00 2.7337623887767371e-01 -3.6645858363512200e+00 + -5.3151640347494880e+00 -1.8289607062314389e-02 -3.6973550079510895e+00 + -5.6704681461335324e+00 -1.1844023901024514e-02 -3.6625630271023257e+00 + -5.9409199303429974e+00 2.1764714992346318e-01 -3.5912312723347850e+00 + -6.3926652809500979e+00 1.1157602232785177e-01 -3.5621292529107569e+00 + id 12898 + loc 7.1391969919204712e-02 7.8350949287414551e-01 411 + blend 0.0000000000000000e+00 + interp 3.9583354163474038e-01:3.1663180749337300e-01:1.0278573149700831e+00:2.8687506849573718e-01:2.1337470874702396e+00:3.0036490486970169e-01:3.1642732775356670e+00:3.9582958329932405e-01:3.9997351829389820e+00 + CVs 20 + 1.0671965509384855e+00 1.9147657934368098e-01 -2.4669827164282448e-01 + 1.8043475033166572e+00 2.0498086879327121e-01 -4.6828695113369151e-01 + 2.4796718688077948e+00 1.6894140609425701e-01 -6.7616923700657183e-01 + 3.1584701846739542e+00 1.1725975072679340e-01 -8.7947905940940352e-01 + 3.7978691409304233e+00 3.9761308680653751e-02 -1.0910507779944765e+00 + 4.3687440578557677e+00 -6.8875489452611349e-02 -1.3196396154376686e+00 + 4.8719210132508834e+00 -2.1195005710965176e-01 -1.5687942116486049e+00 + 5.3329379548248124e+00 -4.0261968399577275e-01 -1.8434085403881093e+00 + 5.7715384662723306e+00 -6.6524753991228680e-01 -2.1437025051457632e+00 + 6.1801944558261663e+00 -1.0195976876493265e+00 -2.4567559052752399e+00 + 6.5391388244197781e+00 -1.4645302797317064e+00 -2.7679931563461011e+00 + 6.8231225461839999e+00 -1.9860164214572402e+00 -3.0612499950570604e+00 + 6.9982082483474395e+00 -2.5551101699901309e+00 -3.3143740486557816e+00 + 7.0443883504933504e+00 -3.1347946541398657e+00 -3.5279747671899266e+00 + 6.9593087387534656e+00 -3.7202243118539751e+00 -3.7289965934351921e+00 + 6.7655597501194409e+00 -4.3383802662523703e+00 -3.9777803472436366e+00 + 6.5115765432396895e+00 -5.0048091954880762e+00 -4.3209548461037484e+00 + 6.2608458097752289e+00 -5.7235100504620613e+00 -4.7469295036393566e+00 + 6.0607440040234160e+00 -6.4613797550055603e+00 -5.2105901778971377e+00 + id 12899 + loc 9.6510732173919678e-01 8.2361221313476563e-01 1078 + blend 0.0000000000000000e+00 + interp 5.1334719892473757e-01:3.4659880809951515e-01:7.0430761290299637e-01:5.1334206545274830e-01:1.0385409128227565e+00:3.4177885338510477e-01:1.7603109500446541e+00:2.7759652616118047e-01:2.1734403610427773e+00:1.9396029960594696e-01:3.0058055265863515e+00:3.7857655381771754e-01:3.8287350374310574e+00 + CVs 20 + 1.9732646130886797e-01 2.3331763294553293e-01 -1.9129325674352854e-01 + 3.9955974650266102e-01 4.8848008637995594e-01 -3.7015335929271920e-01 + 5.8966718514352434e-01 7.4219832059587909e-01 -5.6616633154674911e-01 + 7.5872940563559832e-01 9.8373611120728044e-01 -7.9255737526534165e-01 + 9.0067405248078969e-01 1.2083103990662347e+00 -1.0526408937535245e+00 + 1.0075368221018635e+00 1.4103172291363157e+00 -1.3473332228031318e+00 + 1.0698987398574646e+00 1.5829972716934739e+00 -1.6747820322426488e+00 + 1.0775077777178741e+00 1.7181289193640803e+00 -2.0294349154677889e+00 + 1.0214534665525661e+00 1.8071819409009473e+00 -2.3998402123571898e+00 + 8.9844876757805014e-01 1.8454629419333184e+00 -2.7686394883376275e+00 + 7.1415362141953076e-01 1.8327598806070902e+00 -3.1199838661933166e+00 + 4.8335090351352156e-01 1.7697266820690278e+00 -3.4500508203987681e+00 + 2.2390690187302548e-01 1.6544016008182600e+00 -3.7642111275050523e+00 + -4.7998737398570350e-02 1.4857842295018096e+00 -4.0598750123341061e+00 + -3.1891881805372985e-01 1.2694715647343056e+00 -4.3277357378714800e+00 + -5.7400007373512629e-01 1.0192896087257544e+00 -4.5732937625711862e+00 + -7.9144059902689090e-01 7.5832250159484094e-01 -4.8310881696190808e+00 + -9.5387669673532172e-01 5.1072790107961152e-01 -5.1327196344565724e+00 + -1.1150165345407737e+00 2.8147889676161619e-01 -5.3512395828023713e+00 + id 12900 + loc 6.1344081163406372e-01 4.6777161955833435e-01 395 + blend 0.0000000000000000e+00 + interp 4.5691271833437919e-01:4.5690814920719586e-01:2.7233212017714259e-01:4.3356626520482822e-01:8.7666132118254059e-01:2.7721190824177777e-01:1.0452107441806180e+00:3.0048776061389026e-01:1.8849667906630674e+00:2.4368900392208662e-01:2.4500441383842890e+00:2.8375585273520398e-01:3.6568181259233570e+00 + CVs 20 + -3.4268099592676410e-01 1.9462775230356716e-01 3.7880867895188791e-01 + -6.5281508357775553e-01 3.3841772720576146e-01 6.7250717269011329e-01 + -9.6683770484984544e-01 4.6283234613720647e-01 9.3638341622761989e-01 + -1.3027562789221325e+00 5.8355056793335747e-01 1.1966369042905591e+00 + -1.6566476964663566e+00 6.9859144881671642e-01 1.4554104917307114e+00 + -2.0230140769970917e+00 8.0435017751039029e-01 1.7183760795643430e+00 + -2.3954524824260193e+00 8.9604102585024603e-01 1.9942795735706613e+00 + -2.7673631895127424e+00 9.6526280567090739e-01 2.2907468873402692e+00 + -3.1342788045064935e+00 9.9809246418927877e-01 2.6137642758289896e+00 + -3.4912168378434565e+00 9.7544007159560264e-01 2.9705660590811540e+00 + -3.8228589132413711e+00 8.7855363337329151e-01 3.3644999110965745e+00 + -4.1044422628720536e+00 7.0166449664959263e-01 3.7854158193953436e+00 + -4.3194904110105066e+00 4.5529294952242561e-01 4.2147208469055126e+00 + -4.4655254039314745e+00 1.5435221939077870e-01 4.6368795936370280e+00 + -4.5448202155831376e+00 -1.8705203534446824e-01 5.0393309081624924e+00 + -4.5621336513415418e+00 -5.5694265033995194e-01 5.4082653302542134e+00 + -4.5272516509921044e+00 -9.4797449853629656e-01 5.7280292740662393e+00 + -4.4541093045213103e+00 -1.3481218348756534e+00 5.9857272948911486e+00 + -4.3867401963610000e+00 -1.6663293557041627e+00 6.2017786217405941e+00 + id 12901 + loc 3.6706802248954773e-01 2.7032399177551270e-01 393 + blend 0.0000000000000000e+00 + interp 4.2692812314742179e-01:2.8867842695044010e-01:1.3661515955639802e-02:3.5862424572815776e-01:6.9025945055505344e-01:2.5977612030311398e-01:1.1829363536971056e+00:3.2971711390375708e-01:2.0985452346200537e+00:4.0048685126442757e-01:2.9477424186655892e+00:4.2692385386619036e-01:3.2380863678751135e+00 + CVs 20 + -1.0208502908707368e-01 3.0214501090144041e-01 3.3573542570340997e-01 + -2.0840722761489597e-01 6.4148192184651265e-01 6.5805735551265576e-01 + -3.0993431633763679e-01 1.0214449810734676e+00 9.4322182898951668e-01 + -4.2342555669180171e-01 1.4284274279329365e+00 1.1853438608219347e+00 + -5.9145372102573091e-01 1.8440483795555500e+00 1.3977194003971016e+00 + -8.4549722326260568e-01 2.2541643830651137e+00 1.5850895451050939e+00 + -1.1894034237773203e+00 2.6510276466871119e+00 1.7383579229785244e+00 + -1.6205065161377417e+00 3.0248061831089426e+00 1.8616403965298816e+00 + -2.1410483598665278e+00 3.3518252366687404e+00 1.9818618601180558e+00 + -2.7460750135035967e+00 3.5929735445318864e+00 2.1330260202366507e+00 + -3.4122766505930402e+00 3.6991721071551074e+00 2.3379016179470633e+00 + -4.0955664443209123e+00 3.6238282797344907e+00 2.5957985077415495e+00 + -4.7361959428572629e+00 3.3358609539412409e+00 2.8888414519470587e+00 + -5.2595861337981260e+00 2.8257388092032927e+00 3.2027797972285770e+00 + -5.5774316598080675e+00 2.1300338246978816e+00 3.5294710057114114e+00 + -5.6318575247110596e+00 1.3678859967982238e+00 3.8638666642113546e+00 + -5.4513168154360718e+00 6.7399263350565963e-01 4.2065752210644494e+00 + -5.1292723583254887e+00 1.1660991740092452e-01 4.5260318535648336e+00 + -4.8956138134653031e+00 -2.6025509492988119e-01 4.6542429346723786e+00 + id 12902 + loc 4.0248137712478638e-01 7.4378180503845215e-01 403 + blend 0.0000000000000000e+00 + interp 5.0151113606969933e-01:4.4727215490699673e-01:5.6762171401549211e-01:3.3444871990753733e-01:9.9154255810941250e-01:3.7278327191019084e-01:1.3771702450056524e+00:3.1729556559402683e-01:2.0272518806970723e+00:5.0150612095833869e-01:2.5245769707535866e+00:3.6661901278697290e-01:3.0901313813113749e+00:4.1043437933103433e-01:3.9956513737306936e+00 + CVs 20 + 7.9067562567422117e-02 1.7510417423638663e-01 -1.7194662969142344e-01 + 1.2932504684784907e-01 3.4990614849754470e-01 -3.3607706992333053e-01 + 1.6816697450792692e-01 5.2111434258362821e-01 -4.9746327508353466e-01 + 1.9305280178786266e-01 6.9215614037270301e-01 -6.6191142864894670e-01 + 1.9879175903680707e-01 8.5749685200165771e-01 -8.2869817749211105e-01 + 1.8026782992887874e-01 1.0129881124603048e+00 -9.9583132593034807e-01 + 1.3409372982322598e-01 1.1544557777460049e+00 -1.1599597352661506e+00 + 6.0274410886121732e-02 1.2784173487614945e+00 -1.3164543485510862e+00 + -3.9773814190851464e-02 1.3832621653616526e+00 -1.4605816179718765e+00 + -1.6528256710773193e-01 1.4677961637735919e+00 -1.5883005297121284e+00 + -3.1366828214648668e-01 1.5308284106840606e+00 -1.6953314414494931e+00 + -4.7799895135928305e-01 1.5725332741476579e+00 -1.7770870526306002e+00 + -6.4962395954138130e-01 1.5949674398905191e+00 -1.8303179782355119e+00 + -8.2088444537159488e-01 1.6014119981127979e+00 -1.8541328696440520e+00 + -9.8396527762618824e-01 1.5954053408064286e+00 -1.8501001183488699e+00 + -1.1273708885214826e+00 1.5813401923026944e+00 -1.8221414246716310e+00 + -1.2360470828619132e+00 1.5666388987888831e+00 -1.7751909029904935e+00 + -1.3029196280426589e+00 1.5562827464157964e+00 -1.7135016793393349e+00 + -1.2670944107737763e+00 1.5307574311239995e+00 -1.6128812237039309e+00 + id 12903 + loc 8.2099002599716187e-01 1.1791530251502991e-01 373 + blend 0.0000000000000000e+00 + interp 2.6535005555156754e-01:2.2780890030759154e-01:5.4670958066946995e-02:2.3911254377618849e-01:8.4364198164351289e-01:2.6534740205101204e-01:1.5025129618421942e+00:2.4923517706989218e-01:2.4100092712287431e+00:2.0423962876422616e-01:3.0362410755907749e+00 + CVs 20 + 2.4480119010727003e-01 3.9375188899750824e-01 5.4106193938930833e-02 + 5.3353706740229845e-01 7.3365217706133679e-01 9.3348740950035217e-02 + 8.8241062884301391e-01 9.6522895017286958e-01 1.1415720115341851e-01 + 1.2611632220815951e+00 1.1024679272836735e+00 1.1575019788280322e-01 + 1.6336523917024852e+00 1.2159821618080056e+00 7.2855798432842511e-02 + 1.9996301115235096e+00 1.3516135789115178e+00 2.0481342794930191e-03 + 2.3649936447931044e+00 1.5341783006017069e+00 -4.4355427217298571e-02 + 2.7157039532616758e+00 1.7774245854372350e+00 -2.2217318263817676e-02 + 3.0168066293408700e+00 2.0827600414968535e+00 8.8261180249524895e-02 + 3.2385499847859913e+00 2.4326730097415608e+00 2.9182384022204311e-01 + 3.3769788768550901e+00 2.7853985095459652e+00 5.8327479142863514e-01 + 3.4427062677107658e+00 3.0798924080227033e+00 9.4715551821980359e-01 + 3.4412183035221120e+00 3.2518240047148574e+00 1.3515250564398906e+00 + 3.3743757155261740e+00 3.2658403256478064e+00 1.7355888866240514e+00 + 3.2508110014555434e+00 3.1344701172838336e+00 2.0374271454365802e+00 + 3.0993184680924095e+00 2.8459161657202205e+00 2.2699470057424374e+00 + 3.0488332955759745e+00 2.3582907286023338e+00 2.4148718564116169e+00 + 3.1941529654015102e+00 1.8023953287664938e+00 2.4096099469777297e+00 + 3.3904228362730926e+00 1.2786880507852669e+00 2.3333014531327345e+00 + id 12904 + loc 7.5505897402763367e-02 7.7844566106796265e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7673432775059305e-01:4.7672956040731557e-01:1.3882186910080252e-03:3.3350283003892994e-01:7.0311820065812425e-01:3.4891931581167057e-01:1.4627833626423818e+00:3.7163143000237897e-01:2.0808797269787478e+00:3.2578696209889091e-01:2.9693178666984714e+00:3.7339346763194037e-01:3.5574284154490066e+00 + CVs 20 + -1.7213124846872385e-02 3.1563446690086533e-01 -1.4875143602606583e-01 + -6.6454536508564338e-03 6.4110234767811869e-01 -3.0684655625270668e-01 + 1.2160214210360010e-02 9.7507966713281258e-01 -4.6346841643371200e-01 + 3.4464718850315518e-02 1.3217308398926533e+00 -6.2179348892291508e-01 + 6.3880557591181192e-02 1.6792045767147668e+00 -7.9465813989378709e-01 + 1.0046916938501901e-01 2.0425765397845685e+00 -9.9807444748935470e-01 + 1.3976757408413679e-01 2.4059678995500895e+00 -1.2509181581516271e+00 + 1.7365962735887222e-01 2.7527960873963839e+00 -1.5748582342177970e+00 + 1.9634765279438182e-01 3.0406921995024265e+00 -1.9856818235259674e+00 + 2.2188607153438095e-01 3.2318771833270747e+00 -2.4719844523779826e+00 + 2.9073092354497720e-01 3.3344660577132377e+00 -2.9979286237542002e+00 + 4.3834423192226324e-01 3.3662037902693083e+00 -3.5268470649191750e+00 + 6.6561882091984215e-01 3.3105934736319131e+00 -4.0307604858660060e+00 + 9.5680194348854297e-01 3.1486257688805930e+00 -4.4785839061931583e+00 + 1.3059288218649070e+00 2.8917791757317217e+00 -4.8517729993802803e+00 + 1.6950158679028080e+00 2.5378428121886771e+00 -5.1961851015348621e+00 + 2.0433017482922899e+00 2.0729589700451792e+00 -5.6050588762387203e+00 + 2.2756660803150917e+00 1.5567989361136179e+00 -6.1005690635568719e+00 + 2.4658532808978162e+00 1.0723971141622086e+00 -6.6031635991613289e+00 + id 12905 + loc 2.7293118834495544e-01 7.1010416746139526e-01 1069 + blend 0.0000000000000000e+00 + interp 5.1991532543890939e-01:4.2248771934938489e-01:8.7104167988953374e-02:3.1014660422693513e-01:7.2603466393176075e-01:3.9986384763258431e-01:1.2881715992612079e+00:4.6571009656047030e-01:1.9846680486427073e+00:5.1991012628565503e-01:2.2219247662805466e+00:4.7383112237646274e-01:2.7467545031606431e+00:3.7263283918261120e-01:3.2156509886061375e+00 + CVs 20 + 1.2937568067576785e-01 2.5021399481852230e-01 -1.1995431906649720e-01 + 2.5840471449818381e-01 4.8034788384754301e-01 -2.4415861302926944e-01 + 3.8630522050552391e-01 6.8898399593362303e-01 -3.6726085460316915e-01 + 5.1378142589006437e-01 8.7593411801217103e-01 -4.8382683150695360e-01 + 6.4331780213950129e-01 1.0443856107873266e+00 -5.8858238669609120e-01 + 7.7115133434058114e-01 1.2031006959224004e+00 -6.8277713311489940e-01 + 8.9814952650629998e-01 1.3573408368931210e+00 -7.6879330984922190e-01 + 1.0583293805877600e+00 1.5804660683038954e+00 -8.0347963471813155e-01 + 1.1604419899134499e+00 1.8974601249991070e+00 -8.5879879654960478e-01 + 1.1716165170416044e+00 2.2122598021937714e+00 -9.9747832641963141e-01 + 1.1269695926795271e+00 2.4633470293738617e+00 -1.2074840730277612e+00 + 1.0096034206437388e+00 2.6049987851344096e+00 -1.4419071102989383e+00 + 8.1264795528189304e-01 2.6237438938000701e+00 -1.6579825510290269e+00 + 5.4043906228052641e-01 2.5263000150976533e+00 -1.8430540686359667e+00 + 1.7397417742587706e-01 2.3141408954347495e+00 -2.0179784995927896e+00 + -3.5349412577404093e-01 1.9482597785814073e+00 -2.2616422287711928e+00 + -9.8559104011946275e-01 1.3138073191842172e+00 -2.7204143270897330e+00 + -1.2889934554523068e+00 5.6944949945581480e-01 -3.2828715670408166e+00 + -1.1077045794989491e+00 4.3097756814421628e-01 -3.3130618547106310e+00 + id 12906 + loc 5.2243888378143311e-01 3.3271831274032593e-01 406 + blend 0.0000000000000000e+00 + interp 3.6983231684657930e-01:2.7327487051639471e-01:7.4802648635038094e-01:3.6982861852341087e-01:1.0598489300515113e+00:3.2078645726625510e-01:1.8440312829427037e+00:2.7234441297905954e-01:2.8989700813651207e+00:3.1943211467592836e-01:3.8346060387886713e+00 + CVs 20 + -1.5773361348159615e-01 2.3566944088334274e-01 -7.6925269323350115e-02 + -2.6553741027616384e-01 4.1834661023587566e-01 -1.6501398702130757e-01 + -3.8531163725597323e-01 5.8350753669043298e-01 -2.4971362646441678e-01 + -5.4384966680705049e-01 7.4559989001979221e-01 -3.2634439565847362e-01 + -7.4285394404824112e-01 8.9777817626274015e-01 -3.9254713861911161e-01 + -9.8118108209609789e-01 1.0332912376319179e+00 -4.4593974305783035e-01 + -1.2543109427096180e+00 1.1469814396311260e+00 -4.8620251062401892e-01 + -1.5552582964394346e+00 1.2367695978255393e+00 -5.1680976086143660e-01 + -1.8783484489758508e+00 1.3016383622112997e+00 -5.4012032500306284e-01 + -2.2209027615182917e+00 1.3377600156850591e+00 -5.4606169690162787e-01 + -2.5777248368411434e+00 1.3418979273255873e+00 -5.1671074740631506e-01 + -2.9383761610579033e+00 1.3193858325294645e+00 -4.4991851460520771e-01 + -3.2952274906948329e+00 1.2815374286756458e+00 -3.6229345462162976e-01 + -3.6448996468293693e+00 1.2361983720955920e+00 -2.6391746665692162e-01 + -3.9810818999997903e+00 1.1870252973183202e+00 -1.4551809938533278e-01 + -4.2953152435106956e+00 1.1367915495501002e+00 3.6571801057911912e-03 + -4.5852990909357851e+00 1.0854033504498533e+00 1.7437580969622257e-01 + -4.8563409379706570e+00 1.0308556872367978e+00 3.4445380449898189e-01 + -5.1242530551950107e+00 1.0580809548333601e+00 4.3976683811993622e-01 + id 12907 + loc 3.2228198647499084e-01 7.5354260206222534e-01 409 + blend 0.0000000000000000e+00 + interp 4.1993140239198673e-01:3.4960066179782523e-01:9.4303265085055410e-01:3.6061918888660977e-01:1.6440113579129969e+00:3.7601359535128720e-01:2.1007689414120949e+00:4.1992720307796283e-01:2.9297278687110273e+00:3.7014169533826330e-01:3.3873890668292050e+00:2.7442735776899846e-01:3.9901917701285083e+00 + CVs 20 + 2.9146772902375678e-01 2.5219721733662770e-01 1.2590891690563460e-01 + 5.2707855992850816e-01 4.6724164970833904e-01 2.1096025575505228e-01 + 7.4330331043244158e-01 6.5446793799147773e-01 2.7707961245110269e-01 + 9.8736762260606792e-01 8.2541808548797946e-01 3.5005205299581965e-01 + 1.2586976648168409e+00 9.7201699513322937e-01 4.2800062753570678e-01 + 1.5522719169199788e+00 1.0876900422863951e+00 5.0871642108440152e-01 + 1.8670843233605072e+00 1.1730578093741446e+00 5.9313064202587840e-01 + 2.2054181989776374e+00 1.2295695417584165e+00 6.8588001084590555e-01 + 2.5682323687632027e+00 1.2503897058171047e+00 7.9534206351068126e-01 + 2.9520412741776854e+00 1.2254864778547010e+00 9.2933361113414736e-01 + 3.3463281519948191e+00 1.1476272466934807e+00 1.0882986245089019e+00 + 3.7327873744077307e+00 1.0081312570514693e+00 1.2620877376271520e+00 + 4.0909576418461704e+00 8.0008586243379409e-01 1.4330698837580227e+00 + 4.4085168842000515e+00 5.2699073615570780e-01 1.5828767866726139e+00 + 4.6807857922882468e+00 2.0272482542816705e-01 1.6953052451645396e+00 + 4.9016100700360061e+00 -1.4757817209826829e-01 1.7575157746599119e+00 + 5.0660070830639121e+00 -5.0090476654855332e-01 1.7653147283848112e+00 + 5.1786802781354542e+00 -8.7127361611380172e-01 1.7276895474780356e+00 + 5.2149894824965077e+00 -1.3193173767499624e+00 1.6391202995741707e+00 + id 12908 + loc 1.0145467519760132e-01 7.7119016647338867e-01 417 + blend 0.0000000000000000e+00 + interp 5.3637190688716119e-01:3.3934651367558227e-01:4.3782337246377923e-02:3.7113743119952630e-01:1.0365539623921949e+00:3.6659080929075971e-01:1.3092715281200051e+00:2.9887415754084590e-01:1.9838942753193818e+00:5.3636654316809229e-01:2.7461707910444022e+00:3.6439242564395719e-01:3.0188434520652154e+00:3.9897940821740008e-01:3.6908582330718600e+00 + CVs 20 + 1.5686823253147214e-02 2.3438862263154736e-01 -3.0316131833313420e-01 + 8.8937459236650473e-02 4.1494774619384811e-01 -5.4411554958766917e-01 + 1.4508648205474356e-01 5.4540641187342453e-01 -7.8750684483496469e-01 + 1.8174472898048388e-01 6.3695100544823724e-01 -1.0408900534862682e+00 + 2.0408870320643419e-01 6.8494500866401375e-01 -1.2956173747671771e+00 + 2.1616003610731616e-01 6.8920615770889815e-01 -1.5420172400565291e+00 + 2.2205586480003059e-01 6.5373504272368876e-01 -1.7702256274845936e+00 + 2.2571339460798967e-01 5.8639637420515278e-01 -1.9718237835160766e+00 + 2.2856347648752784e-01 4.9357694235272553e-01 -2.1412823749505208e+00 + 2.2616067533820117e-01 3.7648996274516577e-01 -2.2762925926095288e+00 + 2.1260344109827645e-01 2.3736416318078091e-01 -2.3760125209509231e+00 + 1.8902160144763236e-01 8.5336003338222222e-02 -2.4390430704357722e+00 + 1.6154192002277079e-01 -6.8295220065337059e-02 -2.4646647129845545e+00 + 1.3258106874061415e-01 -2.1748208571865468e-01 -2.4551929331198856e+00 + 9.8633158845980562e-02 -3.6140531935852938e-01 -2.4166164715923273e+00 + 5.6386736354864131e-02 -4.9872372753921423e-01 -2.3549968676257356e+00 + 9.0138143724066699e-03 -6.2443390416674971e-01 -2.2704695809263229e+00 + -3.7877809858480660e-02 -7.3152001577539993e-01 -2.1600660309588973e+00 + -1.2265527326947007e-01 -8.4167759307455314e-01 -2.0870943566015798e+00 + id 12909 + loc 8.1744241714477539e-01 3.2832995057106018e-01 382 + blend 0.0000000000000000e+00 + interp 4.7552833985573884e-01:3.6664340839599718e-01:3.1769579279433902e-01:4.1538107626479459e-01:1.0106561837379513e+00:3.7062708722452214e-01:1.5701489708874066e+00:4.6188944191302095e-01:1.9993263505583947e+00:3.5992042477419178e-01:2.5709678894807122e+00:4.7552358457234029e-01:3.0025408826809530e+00:3.7004554564946818e-01:3.8045463704426865e+00 + CVs 20 + -9.0194192447267185e-01 2.3665045176824606e-01 5.5351014085485517e-01 + -1.5089431725721185e+00 3.6465455712439926e-01 9.7598575238312846e-01 + -2.0431140940906980e+00 4.6615801181644018e-01 1.3684872348183710e+00 + -2.6046390392056464e+00 5.6991456764858095e-01 1.7771405533828131e+00 + -3.2027327622367978e+00 6.5971501982039815e-01 2.1990126927108209e+00 + -3.8408506082263436e+00 7.0917053833776023e-01 2.6253570695178170e+00 + -4.5136741240585945e+00 6.8259676599760810e-01 3.0395085169672496e+00 + -5.2043837539053888e+00 5.4788423434099487e-01 3.4122414953641078e+00 + -5.8850149813581041e+00 2.9363457010136340e-01 3.7100346534380111e+00 + -6.5280724992423371e+00 -6.8570951176738948e-02 3.9145224823640157e+00 + -7.1154563702126108e+00 -5.1922380608469987e-01 4.0305738952673424e+00 + -7.6320658237796968e+00 -1.0437871371539948e+00 4.0786943330241758e+00 + -8.0540700979566076e+00 -1.6296494220992355e+00 4.0829657113552713e+00 + -8.3529127944698445e+00 -2.2477195522434164e+00 4.0631780512552069e+00 + -8.5177311916339864e+00 -2.8574794363674840e+00 4.0421988018466388e+00 + -8.5673060635226026e+00 -3.4512059577055472e+00 4.0422314396879964e+00 + -8.5373345910419438e+00 -4.0618555695260126e+00 4.0783364998368938e+00 + -8.4574890377644394e+00 -4.6917509846785164e+00 4.1825410949810067e+00 + -8.3094020931224897e+00 -5.2113039973153654e+00 4.3538929699722839e+00 + id 12910 + loc 7.6618027687072754e-01 3.5167318582534790e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5758094567206472e-01:3.5757736986260802e-01:2.6534356242540336e-01:3.4282144427763023e-01:9.2197725198579006e-01:3.3096061352887246e-01:1.8544664145794991e+00:3.3977681270852222e-01:2.2945083373881117e+00:2.7503449111154782e-01:3.1568298788330451e+00:3.5414235880304157e-01:3.9431550242275666e+00 + CVs 20 + 4.3040979842246738e-03 4.0199631197846036e-01 -3.4005650771145740e-01 + -1.8681164762404945e-02 7.3442790399364299e-01 -5.2495083198617198e-01 + -5.0437204191001825e-02 1.0392175067162330e+00 -6.4312238660369636e-01 + -8.8657983662163098e-02 1.3502982236880845e+00 -7.3307478845612306e-01 + -1.3405585027044883e-01 1.6564292300790635e+00 -7.8501222928984082e-01 + -1.8637697267045147e-01 1.9430546583149788e+00 -7.8876740873518081e-01 + -2.4483752560119548e-01 2.1916882533849353e+00 -7.3208689329876198e-01 + -3.0479271264256458e-01 2.3719733386774049e+00 -6.0066973952639147e-01 + -3.4056551935748980e-01 2.4332549513240025e+00 -4.0813998686143727e-01 + -3.2150102011122550e-01 2.3817726962027517e+00 -2.3119458644681279e-01 + -2.5816263943970996e-01 2.2759790863126379e+00 -9.1142571431593877e-02 + -1.5832791510043454e-01 2.1278728339109643e+00 2.9159286277224750e-02 + -2.2535499173383003e-02 1.9347634170840893e+00 1.3850361962536251e-01 + 1.4086998324575645e-01 1.7169348242910212e+00 2.4074216305488816e-01 + 3.0706712910175904e-01 1.5445934688672422e+00 3.3545259727281118e-01 + 4.3116859457915357e-01 1.5227027017562880e+00 3.7927096203860322e-01 + 4.5289273384946643e-01 1.6361873968134966e+00 2.0029589370662926e-01 + 4.3259019358933093e-01 1.3687816323114883e+00 -2.8284753269820107e-01 + 4.8602597742309261e-01 1.4731422294169358e+00 -3.1457488738554884e-01 + id 12911 + loc 7.8799235820770264e-01 8.8904631137847900e-01 1081 + blend 0.0000000000000000e+00 + interp 5.6579855494200437e-01:3.3378878314517035e-01:2.1266289633394253e-01:3.3544970237513305e-01:9.7109584191646603e-01:5.6579289695645496e-01:1.6386541638610588e+00:5.3353523080477872e-01:1.9883943834591409e+00:3.6073266249903857e-01:2.2185636633344599e+00:3.8995770604588631e-01:2.9158582744017920e+00:3.1738481336436752e-01:3.3433183090846161e+00 + CVs 20 + 2.5859760137492790e-02 4.1296471520449063e-01 4.0441438861155876e-01 + 7.4889562106377261e-02 7.4003324526248571e-01 6.4944667546854240e-01 + 1.3817477539987830e-01 1.0419601553160844e+00 8.2406125534830243e-01 + 2.0952570953502703e-01 1.3541927589167353e+00 9.8033350225529792e-01 + 2.9054592401444662e-01 1.6743319024760799e+00 1.1188410101687516e+00 + 3.8309680543186381e-01 1.9974922732810314e+00 1.2378139575675984e+00 + 4.9156682429039633e-01 2.3186389549773381e+00 1.3266304730490579e+00 + 6.2550325033979259e-01 2.6340971971449036e+00 1.3671507170225086e+00 + 7.9966678364125665e-01 2.9357387042793297e+00 1.3338945613338402e+00 + 1.0169820221011094e+00 3.1877783749801836e+00 1.1909398830829727e+00 + 1.2368761840501117e+00 3.3295205272223054e+00 9.3136831726187097e-01 + 1.4081590577914374e+00 3.3380066160915405e+00 5.9799013122656786e-01 + 1.5149325437415455e+00 3.2290754322340449e+00 2.2983779248717928e-01 + 1.5649650686342367e+00 3.0151521474463321e+00 -1.5780267238169654e-01 + 1.5747058744795654e+00 2.6806183479784131e+00 -5.6173001283839696e-01 + 1.5617958919148860e+00 2.1499754072126223e+00 -9.5979048180555115e-01 + 1.5281994343425727e+00 1.3391019505246096e+00 -1.2146171934895549e+00 + 1.4599108396369338e+00 4.3024002778570836e-01 -1.1688787311372359e+00 + 1.3833089826166911e+00 -1.1824783250153692e-01 -1.1611733536047453e+00 + id 12912 + loc 8.0798882246017456e-01 5.2935361862182617e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9519191553026626e-01:3.8254725092647707e-01:4.0214740859281062e-01:4.8947805985092113e-01:1.0000043839614139e+00:3.2968159334702263e-01:1.4830159499227020e+00:4.9518696361111098e-01:2.0026090191787671e+00:3.4248250012787385e-01:2.5959749261574574e+00:3.4503549090696378e-01:3.4830175786175825e+00:3.7747157065871589e-01:3.9994647822408798e+00 + CVs 20 + 2.4513094818194014e-01 2.8484727021204859e-01 -1.8714526404785098e-01 + 4.9498771101045030e-01 5.6445443069815904e-01 -3.7088037734378981e-01 + 7.4158769228960497e-01 8.1066833754341405e-01 -5.7618489003933104e-01 + 9.7693946395277798e-01 1.0065644360222279e+00 -8.1336340404018737e-01 + 1.1910286837687252e+00 1.1414666232822921e+00 -1.0811568964006684e+00 + 1.3733819309431732e+00 1.2106189790195083e+00 -1.3733659234889624e+00 + 1.5140393867597099e+00 1.2158468877592135e+00 -1.6813705504872833e+00 + 1.6039146772036104e+00 1.1639571763986551e+00 -1.9951872798147865e+00 + 1.6380636032796414e+00 1.0660817301346508e+00 -2.3014144999562745e+00 + 1.6201352093565198e+00 9.3779250130798220e-01 -2.5862094147741232e+00 + 1.5603911883124530e+00 7.9544636124997670e-01 -2.8404951481963514e+00 + 1.4749805125557787e+00 6.4948434926084953e-01 -3.0657010769508979e+00 + 1.3792321178672984e+00 4.9843171899492100e-01 -3.2822972342244539e+00 + 1.2791636702424911e+00 3.4243270335618448e-01 -3.5151135144789420e+00 + 1.1881448415713021e+00 2.2108345638668192e-01 -3.7630334788377051e+00 + 1.1448801079100357e+00 1.9804665883629058e-01 -3.9662972868394384e+00 + 1.1682793714825461e+00 2.3874789723908552e-01 -4.0352459309469966e+00 + 1.2145863878609731e+00 1.6242568017490333e-01 -3.9364002909658113e+00 + 1.2779988631266119e+00 2.8521625578631515e-01 -3.9582256374289453e+00 + id 12913 + loc 8.5830372571945190e-01 7.7912777662277222e-01 411 + blend 0.0000000000000000e+00 + interp 3.8613678766704967e-01:3.8613292629917301e-01:3.0010293235818952e-01:2.7714184741043152e-01:1.1263641691858204e+00:3.1093856048245155e-01:2.0322763208005452e+00:2.7764904603536900e-01:2.9706158602314785e+00:3.1820947972638303e-01:3.7597184907200685e+00 + CVs 20 + 9.1019338997063681e-01 2.4590729002497938e-01 -2.1942532321437380e-01 + 1.5658348777991153e+00 3.2812036769699893e-01 -4.1103661595437013e-01 + 2.1710096864918795e+00 3.5089439198059069e-01 -5.8712401109065726e-01 + 2.8018660958831401e+00 3.4956388883753231e-01 -7.5083747213556129e-01 + 3.4505113928130879e+00 3.1594164971092631e-01 -8.9650430167189954e-01 + 4.1051735531416123e+00 2.4196144428590394e-01 -1.0256200843599677e+00 + 4.7479576430570534e+00 1.1905873895993935e-01 -1.1440755003178431e+00 + 5.3601019420922702e+00 -6.3291217788300491e-02 -1.2577513630591248e+00 + 5.9196272355873436e+00 -3.1270304507409685e-01 -1.3735167996150439e+00 + 6.4001021358513146e+00 -6.2606046147269323e-01 -1.5012076554280609e+00 + 6.7816468228734053e+00 -9.8684441152070446e-01 -1.6455961676255972e+00 + 7.0651526238417084e+00 -1.3749704373628713e+00 -1.8027204683060478e+00 + 7.2614487590970800e+00 -1.7756494820058473e+00 -1.9734672446350190e+00 + 7.3795314840624471e+00 -2.1723564388108456e+00 -2.1583230996751626e+00 + 7.4297648114037864e+00 -2.5497547187338396e+00 -2.3540006635934532e+00 + 7.4272133597752870e+00 -2.9051682317768108e+00 -2.5533591191842344e+00 + 7.3856063644632428e+00 -3.2422013031190806e+00 -2.7470239245015016e+00 + 7.3146278072826494e+00 -3.5538237256213483e+00 -2.9238591191036583e+00 + 7.2127738568346915e+00 -3.8747237649978263e+00 -3.0792826315479731e+00 + id 12914 + loc 8.8084882497787476e-01 8.7534785270690918e-01 393 + blend 0.0000000000000000e+00 + interp 5.1858311377955801e-01:2.9159699602798772e-01:3.3401937494866463e-01:3.6964052867262936e-01:1.0508104090392774e+00:3.5825352804105470e-01:2.0008460250981996e+00:3.9297711175863848e-01:2.7371059303538354e+00:5.1857792794842028e-01:2.9941964399025585e+00:4.4852689492116865e-01:3.5986733736723711e+00:4.4513966868456656e-01:3.9974415813229967e+00 + CVs 20 + -2.5613150913784871e-01 2.8530299836996065e-01 -1.3868075824626230e-01 + -5.0245287791074511e-01 6.0321724571083801e-01 -2.9333720467125757e-01 + -7.6303601446848868e-01 9.4781721067105340e-01 -4.3422481491466980e-01 + -1.0524712828489626e+00 1.3033632072901586e+00 -5.5682838374133747e-01 + -1.3855220778935509e+00 1.6498991724638064e+00 -6.7607503783513467e-01 + -1.7742232884653395e+00 1.9584739307418342e+00 -8.1423369403908297e-01 + -2.2228905193935700e+00 2.1941438600005259e+00 -9.9031213365214210e-01 + -2.7217210628820654e+00 2.3233674252599918e+00 -1.2107044268347640e+00 + -3.2424246514017403e+00 2.3263195523729570e+00 -1.4711698299540146e+00 + -3.7491975259501418e+00 2.2091159506961593e+00 -1.7604076187006434e+00 + -4.2190362945715405e+00 2.0007505397546019e+00 -2.0609838413049340e+00 + -4.6428285941281029e+00 1.7387429623990764e+00 -2.3595093051640879e+00 + -5.0160818962435645e+00 1.4464731383783018e+00 -2.6554088429024940e+00 + -5.3385775984383388e+00 1.1164301404265284e+00 -2.9485010876730264e+00 + -5.6153187186349323e+00 7.7126562067946303e-01 -3.2285266567354904e+00 + -5.8594026202588925e+00 5.8977976823902778e-01 -3.5010962580392309e+00 + -6.0410336937747742e+00 9.2800565899185261e-01 -3.7313092953755311e+00 + -6.0442577561336952e+00 1.7092787983983935e+00 -3.6452950268327564e+00 + -6.3368126697494649e+00 1.7055434648027727e+00 -3.8854753870795706e+00 + id 12915 + loc 2.6710698008537292e-01 7.8915059566497803e-01 395 + blend 0.0000000000000000e+00 + interp 4.4399334262279577e-01:4.3413182525169841e-01:1.8778702466425479e-01:2.4662163667654757e-01:8.2044154397949876e-01:3.9237885908072784e-01:1.1356516599074393e+00:4.4398890268936958e-01:1.9154386581940819e+00:4.4042066551842873e-01:2.2032620448721474e+00:4.1484001465390163e-01:2.9477140195836382e+00:4.2023764690426663e-01:3.5389742510579207e+00 + CVs 20 + 4.2484077807973708e-01 2.2880318310008485e-01 -2.1850642180524324e-01 + 7.8221975700078439e-01 4.0670721938756366e-01 -4.1630976155067956e-01 + 1.1294833399283153e+00 5.6887914090184222e-01 -6.1329209852700228e-01 + 1.5017989563205882e+00 7.3288331476349700e-01 -8.2023576549271182e-01 + 1.8993974967006915e+00 8.8821563477606824e-01 -1.0356873102165438e+00 + 2.3182777588662105e+00 1.0236651993928314e+00 -1.2606759486087136e+00 + 2.7526794235836474e+00 1.1286917188428776e+00 -1.4991355225615099e+00 + 3.1984938826018787e+00 1.1905748913322340e+00 -1.7538701878954115e+00 + 3.6505070525954930e+00 1.1932561370978845e+00 -2.0236137086138131e+00 + 4.0951707573965610e+00 1.1217774701567718e+00 -2.3052320296885402e+00 + 4.5091634470703577e+00 9.6944398089833239e-01 -2.5941277725072247e+00 + 4.8711029947598137e+00 7.4352565600054232e-01 -2.8793130813115990e+00 + 5.1740879515201188e+00 4.6171952416207951e-01 -3.1457382688914377e+00 + 5.4218789351650889e+00 1.4401507834665628e-01 -3.3825477695572950e+00 + 5.6212102629618448e+00 -1.9168932029274721e-01 -3.5862658665858667e+00 + 5.7810222439637968e+00 -5.3477166136589016e-01 -3.7595934779403111e+00 + 5.9100666733824090e+00 -8.8107065540333718e-01 -3.9071581897362835e+00 + 6.0136710375865512e+00 -1.2221403175801377e+00 -4.0304351767475328e+00 + 6.0822976962846518e+00 -1.4808769483335338e+00 -4.1035753149282783e+00 + id 12916 + loc 6.4072179794311523e-01 6.7098423838615417e-02 414 + blend 0.0000000000000000e+00 + interp 2.1024758300404622e+00:2.1024658300404622e+00:9.6536269937254837e-01:1.4482425237828236e+00:1.0002194080147326e+00:3.3698844957844576e-01:1.1946967844893772e+00:3.2927888943888839e-01:1.5537920790917914e+00:3.7708448095719949e-01:2.0862766108696955e+00:2.7145887631972854e-01:3.0254360298918015e+00 + CVs 20 + -9.7594792377555473e-01 2.2667083353578402e-01 1.4908904014651858e-01 + -1.6210574063837329e+00 2.8587572727626837e-01 3.2304734795983231e-01 + -2.1732841921301032e+00 2.8688821153530419e-01 5.0211065938372990e-01 + -2.7487128757109676e+00 2.6748630562575720e-01 6.8908206382979731e-01 + -3.3356288122555462e+00 2.2719064037152181e-01 8.7220930096308180e-01 + -3.9230235142035639e+00 1.6767062567794200e-01 1.0359235460575391e+00 + -4.5006199497125543e+00 9.1065957013568344e-02 1.1658478063381068e+00 + -5.0583152918860366e+00 -1.4416312445831858e-03 1.2536153703493700e+00 + -5.5873514517973977e+00 -1.0910743326357897e-01 1.2971892231609168e+00 + -6.0811895107082172e+00 -2.3202237384100854e-01 1.3008737654873057e+00 + -6.5374140934002725e+00 -3.7717108159797386e-01 1.2796521965178203e+00 + -6.9603072679567140e+00 -5.6113264147160913e-01 1.2520584713910266e+00 + -7.3543346883139673e+00 -7.9810708971695798e-01 1.2278810630331400e+00 + -7.7195071085029952e+00 -1.0912721047903751e+00 1.2065230859981289e+00 + -8.0541059515584692e+00 -1.4393437756744083e+00 1.1817579421698348e+00 + -8.3527410328935865e+00 -1.8365661385993552e+00 1.1530099027570326e+00 + -8.6081638939030451e+00 -2.2690618799416598e+00 1.1265476913572405e+00 + -8.8154512769451898e+00 -2.7149418076425693e+00 1.1083496855029491e+00 + -8.9536936668175002e+00 -3.0651323010081830e+00 1.0557824804637903e+00 + id 12917 + loc 1.4655245468020439e-02 4.7211450338363647e-01 403 + blend 0.0000000000000000e+00 + interp 4.5487307411981115e-01:4.0032337686549385e-01:4.9414322894697382e-02:3.9354423546431533e-01:6.1616315806302813e-01:4.5486852538906997e-01:1.0295979796956836e+00:2.1717726230160900e-01:1.6924028688188919e+00:3.3056880380615222e-01:2.6587583781987059e+00:3.6636569728389046e-01:2.9999999940453392e+00:3.7476241939418814e-01:3.8040619139427188e+00 + CVs 20 + -1.5515456915047912e-01 2.1541939494304230e-01 3.8453573927817938e-02 + -3.0451715743298530e-01 4.1696733996438667e-01 8.9559521421766902e-02 + -4.5142064464409215e-01 6.1838475616800070e-01 1.4665979791078343e-01 + -5.9460345673797943e-01 8.2391813344755649e-01 2.0445068553450263e-01 + -7.3383485714584762e-01 1.0320700556742071e+00 2.6771399839235949e-01 + -8.6857107562382074e-01 1.2408828469225019e+00 3.4096241223249518e-01 + -9.9811314548642782e-01 1.4485876975519372e+00 4.2926160583169870e-01 + -1.1219206516860727e+00 1.6539844536934152e+00 5.3923243434557311e-01 + -1.2383351960712299e+00 1.8547051133808146e+00 6.8175787523572906e-01 + -1.3408634148910012e+00 2.0421663392453198e+00 8.7206873376556404e-01 + -1.4158756768483716e+00 2.2004028569897858e+00 1.1178940109788027e+00 + -1.4475844243988514e+00 2.3149119174562127e+00 1.4069607609927111e+00 + -1.4324075279991371e+00 2.3841365445179878e+00 1.7139862040225542e+00 + -1.3857298181286706e+00 2.4187494587987528e+00 2.0266366341668833e+00 + -1.3281464063932773e+00 2.4264564838675593e+00 2.3463911553007866e+00 + -1.2754938066765187e+00 2.4127512193490510e+00 2.6519754630277825e+00 + -1.2298916969305789e+00 2.4078623572894289e+00 2.8520676610429492e+00 + -1.1713896346701096e+00 2.4360904594353898e+00 2.8552165822880973e+00 + -1.1917738084193152e+00 2.4765330684482860e+00 3.0605688110407754e+00 + id 12918 + loc 5.5626416206359863e-01 4.8199236392974854e-01 377 + blend 0.0000000000000000e+00 + interp 4.6340216484207952e-01:4.0532915643811568e-01:2.9786255727965893e-02:3.6615013671369284e-01:8.7287948413021643e-01:4.2029867729330644e-01:1.3320700176706279e+00:3.7281097256920920e-01:2.8639508369605640e+00:4.5977739473720131e-01:3.3273633951631387e+00:4.6339753082043111e-01:3.8308662917322165e+00 + CVs 20 + 7.1517669695742558e-01 1.9585750338281172e-01 6.3794775612560828e-01 + 1.2644362946163268e+00 2.6193305886013352e-01 1.1070135513497235e+00 + 1.7784169915796884e+00 2.8074792270989973e-01 1.5582992225127521e+00 + 2.3097369646509973e+00 2.8045561161327326e-01 2.0575058972479114e+00 + 2.8527881351978133e+00 2.4895697859085364e-01 2.5942376145721360e+00 + 3.4062916573699900e+00 1.6824004347295873e-01 3.1414958223823084e+00 + 3.9596603602598139e+00 1.6368641527607863e-02 3.6592882414410433e+00 + 4.4843501835092647e+00 -2.1943386563267464e-01 4.1062983679371987e+00 + 4.9539169079366934e+00 -5.3042535576702488e-01 4.4493214979935178e+00 + 5.3594854952494870e+00 -8.8769067226484921e-01 4.6676220926842342e+00 + 5.7007373511989288e+00 -1.2502669454306758e+00 4.7576925869324267e+00 + 5.9835174392963220e+00 -1.5766826572927006e+00 4.7383981843774592e+00 + 6.2296491520146535e+00 -1.8498126820354988e+00 4.6496958970376641e+00 + 6.4692984544519705e+00 -2.1069702762333655e+00 4.5325721938357617e+00 + 6.7087254360115356e+00 -2.4152204345161903e+00 4.4030982161337970e+00 + 6.9280133852247747e+00 -2.7936254998590382e+00 4.2804470901183596e+00 + 7.1028125377681945e+00 -3.1909874456339069e+00 4.2035063215945847e+00 + 7.2340875550912607e+00 -3.5511896540353365e+00 4.1923835846641921e+00 + 7.4225063507961302e+00 -3.8945725012738976e+00 4.2217491967527767e+00 + id 12919 + loc 9.9648362398147583e-01 4.3606990575790405e-01 1069 + blend 0.0000000000000000e+00 + interp 3.5997989553475557e-01:2.6508734907554027e-01:1.8784432304962884e-01:3.5997629573580026e-01:1.1004697001829047e+00:3.1686398933564974e-01:2.0071182797707556e+00:2.3184809902621792e-01:2.8669116115421298e+00:3.1878060986871942e-01:3.1798369462344733e+00 + CVs 20 + -1.2150392705744212e-01 3.1288903929007850e-01 2.8709366866349856e-01 + -2.5181941066580033e-01 5.8820905307911464e-01 5.4660306815141557e-01 + -3.9950172708414872e-01 8.3385644027117833e-01 8.0427939061322928e-01 + -5.7215609533781508e-01 1.0540689433868906e+00 1.0667837563284888e+00 + -7.6615434999108634e-01 1.2473991631803709e+00 1.3220283251721789e+00 + -9.5047231685630607e-01 1.4153389234016505e+00 1.5566960394315785e+00 + -1.0862909309911946e+00 1.5640594109124648e+00 1.7658219828945687e+00 + -1.1582357164174448e+00 1.6986843391648536e+00 1.9514262892615943e+00 + -1.1695039981983921e+00 1.8065511289454950e+00 2.1031673410878815e+00 + -1.1454007453208224e+00 1.8424963885830199e+00 2.1713262324186768e+00 + -1.1521025274411190e+00 1.8109700349721778e+00 2.0927020561431569e+00 + -1.2012154330587059e+00 1.8219808129652688e+00 1.9470336018402539e+00 + -1.2085509840920139e+00 1.8709971199639930e+00 1.8756781631164015e+00 + -1.1390499980147204e+00 1.8795537697093025e+00 1.8944714388838428e+00 + -1.0162907378483679e+00 1.8187939886883766e+00 1.9726962154992964e+00 + -8.8474569334758946e-01 1.7347152563368007e+00 2.0801805034367606e+00 + -7.5958975237897064e-01 1.7007076403874630e+00 2.2106869079669353e+00 + -6.3329495233693345e-01 1.6921667602245003e+00 2.3831525325922849e+00 + -6.6073371470262898e-01 1.4501818773223794e+00 2.4481884292931388e+00 + id 12920 + loc 7.9291623830795288e-01 3.4799680113792419e-01 373 + blend 0.0000000000000000e+00 + interp 3.7257833336488833e-01:3.0588186083561503e-01:2.3884817344687337e-01:3.7257460758155470e-01:1.0497918311215271e+00:2.6420696558987533e-01:1.9944373189028726e+00:2.2419065871243149e-01:2.8300309930926497e+00:2.3280061863522156e-01:3.4462258713711820e+00 + CVs 20 + 3.0394724232812909e-01 3.5709204755321367e-01 4.6671913511847782e-02 + 6.4357454409359516e-01 6.4823540821725123e-01 1.0251603727311309e-01 + 9.9158392992656408e-01 8.3285656981751055e-01 1.5533852619853888e-01 + 1.3416758341170532e+00 9.5587742531709086e-01 2.0587997030167832e-01 + 1.6739554221278858e+00 1.0745095054621736e+00 2.4514117183512002e-01 + 1.9746938737867019e+00 1.2006009589358015e+00 2.6563587007125755e-01 + 2.2787118834387847e+00 1.3532362154150577e+00 2.8804292396696951e-01 + 2.6006416946530093e+00 1.5515205885597647e+00 3.4300559691872834e-01 + 2.9111315094148953e+00 1.7881620654424866e+00 4.4188870363126209e-01 + 3.1749302402730475e+00 2.0349039993795826e+00 5.6493728823074041e-01 + 3.3833259952835997e+00 2.2758555276239467e+00 6.7645551695181427e-01 + 3.5497737440459440e+00 2.5406524094464040e+00 7.4671992220038974e-01 + 3.7055267101683316e+00 2.8893259037670105e+00 7.9974439255802565e-01 + 3.8870570292555979e+00 3.3415064207653202e+00 9.6008001815515498e-01 + 4.0586008532074427e+00 3.8156019114423931e+00 1.3398329732644481e+00 + 3.9882725724694166e+00 4.2499508042363807e+00 1.7775836269378578e+00 + 3.3891100516217141e+00 4.7232071642561211e+00 2.1744035677533247e+00 + 2.5675054962205661e+00 4.7733362787217484e+00 2.6041134570981734e+00 + 2.6115829995582005e+00 4.4752145159921497e+00 2.6718863730106293e+00 + id 12921 + loc 5.6563562154769897e-01 1.6614224016666412e-01 399 + blend 0.0000000000000000e+00 + interp 4.4709962165114070e-01:3.7841979664419145e-01:2.9528704800885208e-04:2.8623998771610909e-01:1.0007274560763268e+00:2.7103298120455610e-01:1.9833304994656549e+00:4.3106684338092011e-01:2.8746162423237456e+00:4.4709515065492422e-01:3.3101725948850724e+00 + CVs 20 + 1.9252008432205869e-01 2.8066581901388599e-01 2.1731116056140293e-01 + 3.5839780390920584e-01 5.5621816376622668e-01 4.1480767033877236e-01 + 5.0040642727640683e-01 8.2699098647686831e-01 6.1434187149280406e-01 + 6.2740942293657365e-01 1.0937892762054453e+00 8.2278072545197256e-01 + 7.5251255143287954e-01 1.3579092818845337e+00 1.0356061365118550e+00 + 8.8777094168650783e-01 1.6205088995266124e+00 1.2515776345655842e+00 + 1.0410248583596124e+00 1.8815133524108085e+00 1.4771211513411664e+00 + 1.2197064164938605e+00 2.1386481608315639e+00 1.7234687132615387e+00 + 1.4348765655665003e+00 2.3841004568564221e+00 2.0024649198764957e+00 + 1.6996738815781762e+00 2.6026425604340209e+00 2.3237763929831363e+00 + 2.0148023248687381e+00 2.7625352706532822e+00 2.6833773437715860e+00 + 2.3533022544061111e+00 2.8309490410579055e+00 3.0431148248368749e+00 + 2.6718531816005444e+00 2.8124516941572346e+00 3.3450440328903861e+00 + 2.9282685708624023e+00 2.7396972473021641e+00 3.5275596447327175e+00 + 3.1118774882507267e+00 2.6295937276378534e+00 3.5420845356256572e+00 + 3.3096771830358884e+00 2.4484319264412964e+00 3.3879623628118747e+00 + 3.6786014661813953e+00 2.1274365552514070e+00 3.1476147314382175e+00 + 4.1610327556790523e+00 1.7465095019094035e+00 3.0913154700898899e+00 + 4.1871336201756586e+00 1.7693897197633606e+00 3.3297610903525650e+00 + id 12922 + loc 6.2974578142166138e-01 1.9171153008937836e-01 409 + blend 0.0000000000000000e+00 + interp 3.7642379592470937e-01:3.4344742210922474e-01:3.6219936026198452e-01:2.8352117246342312e-01:1.2675164045858596e+00:3.7642003168675015e-01:1.9855797568293507e+00:3.6785019049720097e-01:2.9352714456919187e+00:3.2978345521661251e-01:3.3374693619309124e+00 + CVs 20 + -2.3291513537800462e-01 6.4350211222343384e-02 1.2385559874479965e-01 + -4.6918058485019265e-01 1.4036430670416500e-01 2.7973582355330984e-01 + -7.1276545532749158e-01 2.2714441855235012e-01 4.4307750181590577e-01 + -9.6232296946315210e-01 3.2113966369761343e-01 6.0036062851146232e-01 + -1.2158215929328207e+00 4.1899924635723895e-01 7.5178270243213952e-01 + -1.4727868363312298e+00 5.1885533389716776e-01 8.9747467588303398e-01 + -1.7331066324317237e+00 6.2006520407488974e-01 1.0359387012831669e+00 + -1.9983158061143242e+00 7.1906082763727697e-01 1.1644173237834496e+00 + -2.2693106031610286e+00 8.0680129782648435e-01 1.2791314365553776e+00 + -2.5394203069131795e+00 8.7269928899066052e-01 1.3784361256010014e+00 + -2.7986202001720608e+00 9.0888848862086125e-01 1.4661150354374979e+00 + -3.0448753314548456e+00 9.0922191212682080e-01 1.5495454757811231e+00 + -3.2824866243895325e+00 8.6900815154289668e-01 1.6352294963377811e+00 + -3.5128231812713295e+00 7.8790570168162199e-01 1.7261851541330340e+00 + -3.7344266892008759e+00 6.6784117324091219e-01 1.8236253391481489e+00 + -3.9468118903210176e+00 5.0655377100512444e-01 1.9288553459765685e+00 + -4.1462266280289608e+00 3.0153840160703949e-01 2.0385733537375255e+00 + -4.3232526946859569e+00 6.5854961296093695e-02 2.1412044977112297e+00 + -4.4680080606689909e+00 -1.6865145840678020e-01 2.2249380957635934e+00 + id 12923 + loc 9.3983078002929688e-01 6.8267595767974854e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2326479755893009e-01:3.1207852847033235e-01:3.3933434342064950e-01:2.6328338794246087e-01:1.0086143372786585e+00:3.1365369621898676e-01:1.7736429209117166e+00:4.2326056491095454e-01:2.0370407936145405e+00:2.6860509538897703e-01:2.8553546681389657e+00:3.2908045005322362e-01:3.6293276496774194e+00 + CVs 20 + 5.3444081489341884e-02 4.6318205284682196e-01 -2.7531344658861351e-01 + 9.6725300328755454e-02 9.0695331819390757e-01 -4.9897090108132558e-01 + 1.3585423124387880e-01 1.3493205857604500e+00 -6.8692757437537799e-01 + 1.8881222508551224e-01 1.8091953311509839e+00 -8.6077541382490574e-01 + 2.8757529254226244e-01 2.2929078442500859e+00 -1.0550002190960968e+00 + 4.5847143965736353e-01 2.7734303424275302e+00 -1.3242704306775077e+00 + 7.0244847524052534e-01 3.1901438074226354e+00 -1.7046653517515087e+00 + 1.0051511695702811e+00 3.4945393774933451e+00 -2.1871085037738500e+00 + 1.3540492351188680e+00 3.6642628302998737e+00 -2.7375758999616941e+00 + 1.7353807790239393e+00 3.6929791767160838e+00 -3.3163225731417345e+00 + 2.1259867350279364e+00 3.5897841535237265e+00 -3.8820176879861075e+00 + 2.4999906060279922e+00 3.3878052053231413e+00 -4.3926384284248909e+00 + 2.8489715157502649e+00 3.1278255146350675e+00 -4.8422696882390319e+00 + 3.1790692581567432e+00 2.8173423230839743e+00 -5.2754244455379844e+00 + 3.4728726926612459e+00 2.4391548050714187e+00 -5.7280105804963641e+00 + 3.6834739082061416e+00 1.9948201035173601e+00 -6.2019003311076784e+00 + 3.7678076799423708e+00 1.5069694462214720e+00 -6.7090236456740140e+00 + 3.6981885633103166e+00 1.0136215986274704e+00 -7.2502078711716855e+00 + 3.5146582781622402e+00 5.6653217167038106e-01 -7.7206383940257863e+00 + id 12924 + loc 9.3337947130203247e-01 8.8174515962600708e-01 382 + blend 0.0000000000000000e+00 + interp 5.3502476067277682e-01:3.8975328493096506e-01:4.2413957582702466e-01:2.3888089710926161e-01:1.0147945695833998e+00:3.3918324260090604e-01:1.7709790011974715e+00:5.3501941042517009e-01:1.9999539452718880e+00:3.6896801949465735e-01:2.9969341356150307e+00:3.1423878711021958e-01:3.9469000332326187e+00 + CVs 20 + 1.1532702399626338e+00 1.9981612506329227e-01 -5.9732897791326112e-01 + 1.9279075588449419e+00 2.6785156544742300e-01 -9.8977338809824122e-01 + 2.6278715904566301e+00 3.1023071766228816e-01 -1.3143516859916113e+00 + 3.3670166509443282e+00 3.6887906579407076e-01 -1.6313569207402285e+00 + 4.1289774766294842e+00 4.2436780918591138e-01 -1.9608137653879270e+00 + 4.8995375005258621e+00 4.3781854298611972e-01 -2.3286016314494100e+00 + 5.6609074711850935e+00 3.5518764073768538e-01 -2.7487020344954312e+00 + 6.3866316433776884e+00 1.2550229608363761e-01 -3.2066085295716227e+00 + 7.0436026519330035e+00 -2.7666915340359743e-01 -3.6626741282912096e+00 + 7.5972255120066503e+00 -8.4032381468472295e-01 -4.0706782831858215e+00 + 8.0169497026341983e+00 -1.5261813510925522e+00 -4.3948535851024557e+00 + 8.2734688219227888e+00 -2.2824824544560851e+00 -4.6209400318184102e+00 + 8.3401158522415777e+00 -3.0427794989767651e+00 -4.7598495437487536e+00 + 8.2583315562219184e+00 -3.7279474599990450e+00 -4.8221560345975902e+00 + 8.1174776838544744e+00 -4.3249614171555972e+00 -4.8237398665921187e+00 + 7.9879497163927375e+00 -4.8580282462820241e+00 -4.7756529712761724e+00 + 7.9093922631438449e+00 -5.3381696028249737e+00 -4.6945991853716826e+00 + 7.8926901373115070e+00 -5.7765755834320256e+00 -4.6030770699014765e+00 + 7.9255317155014566e+00 -6.1680501613270273e+00 -4.5447729608478209e+00 + id 12925 + loc 2.7008208632469177e-01 4.7225013375282288e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6188220422702508e-01:3.5044216474341822e-01:2.6053544597542611e-02:2.5894147869025702e-01:9.7420777154962512e-01:3.5215732392774340e-01:1.4456275760861337e+00:3.8061657652669317e-01:2.0002996868378964e+00:3.3645970058523983e-01:2.5406809844717220e+00:3.6133524986005383e-01:3.0029656910073861e+00:4.6187758540498286e-01:3.3812548450498596e+00 + CVs 20 + 2.8872027486793589e-01 2.1589073045457013e-01 1.9839498619931176e-01 + 3.9921225545638273e-01 3.4813515053546962e-01 3.3420041712551740e-01 + 4.4889207765525940e-01 4.5040452904328621e-01 4.6312963663477236e-01 + 4.9645721679693477e-01 5.5070120388003330e-01 6.1161661899610598e-01 + 5.3837467069305434e-01 6.4627654311264138e-01 7.7722378887438770e-01 + 5.7157100291331442e-01 7.3445290375794947e-01 9.5672098022016416e-01 + 5.9372823583156020e-01 8.1316134192263889e-01 1.1467016728638588e+00 + 6.0343453770951916e-01 8.8108698063069268e-01 1.3441863343475229e+00 + 6.0034502123285804e-01 9.3726432174885921e-01 1.5470228741415857e+00 + 5.8528548378883305e-01 9.8058965849719093e-01 1.7544020582615596e+00 + 5.6022311611895526e-01 1.0095147102188360e+00 1.9671248183874406e+00 + 5.2816543633826485e-01 1.0217964255703238e+00 2.1875721155625723e+00 + 4.9312908708468806e-01 1.0145153968234493e+00 2.4190494676321128e+00 + 4.5952791973865181e-01 9.8517506991356618e-01 2.6623292355349899e+00 + 4.3146123432823097e-01 9.3264254899920473e-01 2.9147658826707499e+00 + 4.1209687830174513e-01 8.5666754941596923e-01 3.1737631521503409e+00 + 4.0357004131781798e-01 7.5730652616761174e-01 3.4389747232086618e+00 + 4.0675469827165278e-01 6.3686856008964599e-01 3.7078233048000668e+00 + 4.1348491494470668e-01 5.1290865422184728e-01 3.9432080982945195e+00 + id 12926 + loc 2.0382267236709595e-01 2.5558340549468994e-01 406 + blend 0.0000000000000000e+00 + interp 4.7716927192081793e-01:2.7573046383575112e-01:9.4711510022904788e-01:4.7716450022809875e-01:1.5269303046126439e+00:2.7489278100211273e-01:2.0056723957624114e+00:4.6824080398875140e-01:2.7142891656099444e+00:3.5404853426394400e-01:3.0899897012610680e+00:2.8422569001774228e-01:3.9654281951719992e+00 + CVs 20 + 2.3359344927764272e-02 1.5022622616482409e-01 -6.0962641799944289e-02 + 3.5821932821842921e-02 2.7907859842847521e-01 -8.1392678500243371e-02 + 5.2192540878333062e-02 4.1294934801170047e-01 -9.7667451141556810e-02 + 7.5991405753953203e-02 5.6268035443293818e-01 -1.4026969459615030e-01 + 1.0781268719395003e-01 7.2564571785175280e-01 -2.1543010690048250e-01 + 1.4735198723546908e-01 8.9814911562841049e-01 -3.2887188662184202e-01 + 1.9427888253099340e-01 1.0756034874182849e+00 -4.8566106503469852e-01 + 2.4925859260967861e-01 1.2525421007479154e+00 -6.8945183511204811e-01 + 3.1239829421654691e-01 1.4218633018808271e+00 -9.4045392654480331e-01 + 3.7783046076572741e-01 1.5745055203385361e+00 -1.2335452571468615e+00 + 4.3345915504345134e-01 1.7017068626164675e+00 -1.5604372481466537e+00 + 4.7106583471677455e-01 1.7975520793482720e+00 -1.9137101938152494e+00 + 4.9104665706544698e-01 1.8588213158271147e+00 -2.2859535542163258e+00 + 4.9354026405398099e-01 1.8845335989650271e+00 -2.6641942009504240e+00 + 4.7191129143866528e-01 1.8769851656973364e+00 -3.0290959818264209e+00 + 4.1992597833112455e-01 1.8405084722434353e+00 -3.3633610847341746e+00 + 3.4126034509312997e-01 1.7782552988221330e+00 -3.6593878644652742e+00 + 2.4639000343737172e-01 1.6951058567826713e+00 -3.9150116867821732e+00 + 2.1372101414128897e-01 1.6241599243782066e+00 -4.1662324814526661e+00 + id 12927 + loc 6.3941232860088348e-02 8.7600350379943848e-01 1078 + blend 0.0000000000000000e+00 + interp 3.7949678461502018e-01:3.3839845343759511e-01:8.9126612045369646e-02:2.7481627086983068e-01:9.8300027113608646e-01:3.7198552809388385e-01:1.9864178484314277e+00:3.3458191295709283e-01:2.5726008432197371e+00:3.7949298964717404e-01:3.3148926872133360e+00 + CVs 20 + -1.8104699008089219e-02 2.0330932140817415e-01 9.7666552951034685e-02 + 7.1314366991891143e-05 3.9745885464468900e-01 1.4742359397787363e-01 + 3.3357515177572045e-02 5.9176355677740256e-01 1.7578925690156597e-01 + 6.9794057652019917e-02 8.0199351976087696e-01 1.9688014782881424e-01 + 1.0462900189301792e-01 1.0260753212231883e+00 2.0391987041878445e-01 + 1.2837135333383115e-01 1.2614142867220273e+00 1.8843894011944029e-01 + 1.2738358686165027e-01 1.5027898665315838e+00 1.4259286622881195e-01 + 8.7773488586637707e-02 1.7412954802070373e+00 6.4174300235907866e-02 + -9.6420327583786325e-05 1.9664764460562614e+00 -4.5068749419210352e-02 + -1.4087788767594983e-01 2.1657816688311109e+00 -1.8701080359002586e-01 + -3.3365121104649381e-01 2.3209019541170819e+00 -3.6760430209641837e-01 + -5.6592893161056024e-01 2.4128135949872362e+00 -5.8758064213567762e-01 + -8.1747163916673793e-01 2.4367574892405077e+00 -8.3424482172833747e-01 + -1.0739305969190434e+00 2.4134156893979091e+00 -1.0843588444335404e+00 + -1.3359935018014304e+00 2.3762093536406179e+00 -1.3225088345454590e+00 + -1.6125593503681792e+00 2.3333792966684692e+00 -1.5561189164983067e+00 + -1.8956230166184862e+00 2.2815487958067289e+00 -1.8023336746882199e+00 + -2.1515222645466725e+00 2.2504440259323713e+00 -2.0752280932545952e+00 + -2.4033244754141609e+00 2.2850790692649978e+00 -2.3202120242561279e+00 + id 12928 + loc 9.8996192216873169e-01 2.5133106112480164e-01 411 + blend 0.0000000000000000e+00 + interp 4.9771332196527096e-01:3.6857301979956814e-01:5.4726641525566211e-01:4.9042251655481067e-01:1.0059112808181037e+00:4.9770834483205134e-01:1.4458969021710155e+00:3.1534335883210662e-01:1.9598898824192315e+00:2.9136028007566261e-01:2.9754036984005827e+00:2.6902464152544270e-01:3.8219268861465054e+00 + CVs 20 + -5.8950302526007770e-01 1.6986803195877387e-01 2.3505047610264865e-01 + -1.0121839462956570e+00 2.4708366658785708e-01 4.3397983663696432e-01 + -1.3953130112465888e+00 2.9911286555451111e-01 6.1217906702387803e-01 + -1.7917989275937116e+00 3.6303781192804180e-01 7.6852559738022752e-01 + -2.2057358592996517e+00 4.3554232363653145e-01 8.9668687746774300e-01 + -2.6415719740991506e+00 5.0943583319471464e-01 9.9911072832343262e-01 + -3.1040443150302015e+00 5.7451563950423556e-01 1.0883458411583815e+00 + -3.5979415721553334e+00 6.1507480966520034e-01 1.1794752060485907e+00 + -4.1243900251705092e+00 6.0675514185798174e-01 1.2833970697099248e+00 + -4.6726585494889257e+00 5.2040966925676613e-01 1.4101440413170463e+00 + -5.2128327950647053e+00 3.3082781364301650e-01 1.5738736606246770e+00 + -5.7037257018437577e+00 2.7329467188455414e-02 1.7815687334314130e+00 + -6.1143516699937885e+00 -3.8178677797081306e-01 2.0217394284053047e+00 + -6.4290089109981503e+00 -8.7436492068084481e-01 2.2753909233212988e+00 + -6.6394681624984333e+00 -1.4204431634565586e+00 2.5292882200493780e+00 + -6.7445652266829184e+00 -1.9908932260145815e+00 2.7721299883904793e+00 + -6.7517145857011682e+00 -2.5618581848704221e+00 2.9879745788449137e+00 + -6.6808594536813217e+00 -3.1063475979920350e+00 3.1666709678434461e+00 + -6.6424860250473712e+00 -3.5814244085542328e+00 3.3344310365752108e+00 + id 12929 + loc 6.3450592756271362e-01 8.0479753017425537e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1696855496882251e-01:4.1696438528327284e-01:8.5021095328349383e-01:2.6269101145272306e-01:1.1795661676649827e+00:3.7565305422502548e-01:1.9418071652168427e+00:3.0285657045534770e-01:2.5269915970207131e+00:3.7407959384413580e-01:3.0059373585918943e+00:2.8733622642718326e-01:3.9074985881622206e+00 + CVs 20 + 1.2262182659347413e-01 2.6026596996549967e-01 -9.0420956204459446e-02 + 2.2539762089980994e-01 5.2843537204763824e-01 -1.8690740636953995e-01 + 3.3466978052258428e-01 7.9990515690186981e-01 -2.8885479382941548e-01 + 4.8658262815791725e-01 1.0614435210716626e+00 -3.9354127775686459e-01 + 6.9831787107377874e-01 1.2780789595407063e+00 -4.9275084290367460e-01 + 9.4497519811980113e-01 1.4250206906739042e+00 -5.8431289171490064e-01 + 1.1926701211858002e+00 1.5213060104788929e+00 -6.8224933874365057e-01 + 1.4268966245956749e+00 1.6103121055822613e+00 -7.9933030555691498e-01 + 1.6378441244410951e+00 1.7267084329327380e+00 -9.2825277111291205e-01 + 1.8029459283127540e+00 1.8720627500755769e+00 -1.0536234171964023e+00 + 1.8922639036266149e+00 2.0163250892782862e+00 -1.1903151884900125e+00 + 1.8847390467512253e+00 2.1030892427194612e+00 -1.3815341864271757e+00 + 1.8121285958934608e+00 2.0764491825186013e+00 -1.6177255257043930e+00 + 1.7482014863791668e+00 1.9282750024012336e+00 -1.8446869212577153e+00 + 1.7577279201049962e+00 1.6913856310263375e+00 -2.0312709069970540e+00 + 1.8738511671392899e+00 1.4190533306051578e+00 -2.1632514592169714e+00 + 2.0927139179055092e+00 1.1646141478441168e+00 -2.2146716162267914e+00 + 2.3750191871637778e+00 9.3426529275107473e-01 -2.1872140098063255e+00 + 2.6701008548888412e+00 5.5503671648575748e-01 -2.2521666053428846e+00 + id 12930 + loc 3.4706780314445496e-01 8.0834251642227173e-01 417 + blend 0.0000000000000000e+00 + interp 1.3399907876007688e+00:1.3399807876007688e+00:1.9612216129601179e-02:1.1623965885988961e+00:1.0647966839319067e-01:5.8065018383438316e-01:5.7471346821494429e-01:3.3546797017500457e-01:9.3264680210488871e-01:3.4398766922541069e-01:1.4871458968031108e+00:3.4950250400991451e-01:2.0337531529704842e+00:5.9472716606992249e-01:2.4697244722944953e+00 + CVs 20 + -4.8042632190218530e-02 2.2222519389311607e-01 -2.6154168586933579e-01 + -6.3656300777245350e-02 3.7423234620842238e-01 -4.2639783489009392e-01 + -8.1202819925945940e-02 4.8820805372367804e-01 -5.6397535925466680e-01 + -1.1823865556775687e-01 5.8799648705191365e-01 -7.1100019817057547e-01 + -1.7407595667574913e-01 6.7015686135249142e-01 -8.6607738170748816e-01 + -2.4747421610016285e-01 7.3171432286790583e-01 -1.0267162065813811e+00 + -3.3625155112968369e-01 7.7091468540423902e-01 -1.1897181255035099e+00 + -4.3701619657070467e-01 7.8757052079883372e-01 -1.3516394352639076e+00 + -5.4556360396891124e-01 7.8199019108581325e-01 -1.5079958639160147e+00 + -6.5817281814338868e-01 7.5428467034483848e-01 -1.6517808985972184e+00 + -7.7234166635673140e-01 7.0631002639005225e-01 -1.7765929085501706e+00 + -8.8589792920571420e-01 6.4225115387964626e-01 -1.8829939942897793e+00 + -9.9580275824524611e-01 5.6601579599674690e-01 -1.9758111172873072e+00 + -1.0973706309150424e+00 4.8134657414055804e-01 -2.0560001200993052e+00 + -1.1852084383959625e+00 3.9319976551679647e-01 -2.1204912443974258e+00 + -1.2552367039172918e+00 3.0601989169507582e-01 -2.1686577028480305e+00 + -1.3059239662602171e+00 2.2162283546300521e-01 -2.2051594919446877e+00 + -1.3381463950407722e+00 1.4009046170196826e-01 -2.2361448427463357e+00 + -1.3572052263976220e+00 4.8268928536589151e-02 -2.2755387539656002e+00 + id 12931 + loc 4.4647493958473206e-01 7.9972398281097412e-01 409 + blend 0.0000000000000000e+00 + interp 4.4515158834310792e-01:3.6055951329359098e-01:1.1259393176050059e-01:4.1992720307796283e-01:9.3825677315039591e-01:3.7635711329636423e-01:1.4416955743252786e+00:4.4514713682722451e-01:2.0293796212474717e+00:3.0394087274234866e-01:2.6009005841944925e+00:3.6874116792433326e-01:3.0499501867426577e+00:3.7442341109284649e-01:3.7399046824029698e+00 + CVs 20 + 4.9786497477983538e-01 1.0856744002591170e-01 -1.2137150244042735e-01 + 9.2087429836824453e-01 1.8108610820854298e-01 -2.6812150566430193e-01 + 1.3406570250425973e+00 2.4774381792998235e-01 -4.0215636989104708e-01 + 1.7798177142802709e+00 3.1572545540543839e-01 -5.1097334875753564e-01 + 2.2340009465307871e+00 3.7731480021660513e-01 -5.9440426773273858e-01 + 2.6999831896435471e+00 4.2436117023165609e-01 -6.5161032258720875e-01 + 3.1746428691425326e+00 4.4558474067731790e-01 -6.8099340627196758e-01 + 3.6533048638735863e+00 4.2365584214477670e-01 -6.8161903917763422e-01 + 4.1268773078754624e+00 3.3861464098740690e-01 -6.5698924515488377e-01 + 4.5774703833348216e+00 1.7253061346745335e-01 -6.1877440954653418e-01 + 4.9770644383952494e+00 -8.5955198288185652e-02 -5.8680810622216317e-01 + 5.2983883065792536e+00 -4.3149149345770432e-01 -5.7935570493398769e-01 + 5.5299110393233430e+00 -8.4268298927124263e-01 -6.0458939766630526e-01 + 5.6707475903284177e+00 -1.2966225723941633e+00 -6.6427087906689741e-01 + 5.7180779578973002e+00 -1.7728499381032381e+00 -7.5657614633410553e-01 + 5.6671899137702120e+00 -2.2515340858814783e+00 -8.6946320143018629e-01 + 5.5227925105883937e+00 -2.7150966668532677e+00 -9.8345042013603945e-01 + 5.3130221166128626e+00 -3.1503048173711878e+00 -1.1004213992191902e+00 + 5.2669510816184317e+00 -3.6295372374454034e+00 -1.2407606295291680e+00 + id 12932 + loc 4.4857445359230042e-01 7.7762258052825928e-01 377 + blend 0.0000000000000000e+00 + interp 4.5819559061148096e-01:3.7330451902863782e-01:9.7035522782319306e-01:4.1361688268867280e-01:1.6401801832220710e+00:4.1931185597871223e-01:2.1641532103989727e+00:4.5819100865557488e-01:2.9294944535472349e+00:4.0896641307062431e-01:3.4501375982920610e+00:2.6307228306517161e-01:3.9743169824363562e+00 + CVs 20 + -7.1102944623244335e-01 2.5398807414852093e-01 -5.6981315461638349e-01 + -1.2902577094346515e+00 3.7586522035843933e-01 -9.8691882094014138e-01 + -1.8424688494020869e+00 4.4530377379930342e-01 -1.3721267388878968e+00 + -2.4167698451322774e+00 4.9544998572827859e-01 -1.7775727556653536e+00 + -3.0046731781646887e+00 5.2140519732569257e-01 -2.1998298969496477e+00 + -3.6018696495895122e+00 5.0966410932772188e-01 -2.6362261161472857e+00 + -4.2022240375954674e+00 4.3870007856152848e-01 -3.0839976091916803e+00 + -4.7890298720588262e+00 2.8614370979246662e-01 -3.5370407311362531e+00 + -5.3425068142337251e+00 3.7677489761766658e-02 -3.9794660680279024e+00 + -5.8451973631795244e+00 -3.0887429025166968e-01 -4.3843842341571344e+00 + -6.2783570697136328e+00 -7.4778119232750129e-01 -4.7221430753495541e+00 + -6.6192006419603837e+00 -1.2663291390899523e+00 -4.9719155850313479e+00 + -6.8567223377113082e+00 -1.8354174065970477e+00 -5.1318394325541981e+00 + -7.0195976576730130e+00 -2.4103638755009480e+00 -5.2378763726202147e+00 + -7.1637074393493583e+00 -2.9600769618777791e+00 -5.3510508944316566e+00 + -7.3339067588518452e+00 -3.4648244366689700e+00 -5.4978157833357972e+00 + -7.5612598083157145e+00 -3.8993732740191946e+00 -5.6516058825039988e+00 + -7.8459210028885282e+00 -4.2572806148229629e+00 -5.7760465695691829e+00 + -8.0761866833514926e+00 -4.6537407963679405e+00 -5.9256462395293887e+00 + id 12933 + loc 3.3416691422462463e-01 2.4359248578548431e-02 373 + blend 0.0000000000000000e+00 + interp 6.1033254578055818e-01:6.1032644245510037e-01:1.1713137758668890e-01:3.3514037196477525e-01:9.4773976979978325e-01:4.1668244423884787e-01:1.8470213137283871e+00:3.1363409810406412e-01:2.0087969477501053e+00:3.7273368438614640e-01:2.8391947784026295e+00:3.3086000836926255e-01:3.4612569045626009e+00:5.1079110285283980e-01:3.9253441420626709e+00 + CVs 20 + -1.0556560761509898e-01 6.6090372133248354e-01 4.3740092239746370e-01 + -1.9607488302114578e-01 1.2822607144564380e+00 8.4949073905252970e-01 + -2.9590884905338910e-01 1.8827407184890372e+00 1.2895202111759143e+00 + -5.3414983412387818e-01 2.5299850169968021e+00 1.6821215353826293e+00 + -9.4731645888748195e-01 3.2356360952703680e+00 1.8049218799685991e+00 + -1.4952518715918846e+00 3.8552812365624649e+00 1.5332889662845952e+00 + -2.0650678742097588e+00 4.1523789040094083e+00 8.8561099644678398e-01 + -2.5175545821075787e+00 4.0262114353513780e+00 2.8567363472060681e-02 + -2.7713355695308901e+00 3.5281326892352300e+00 -8.5360678305939808e-01 + -2.8009587987540749e+00 2.7863191372920300e+00 -1.6057627936816277e+00 + -2.6485101811775955e+00 1.9671721942914984e+00 -2.1389889066219792e+00 + -2.4096733410083608e+00 1.2119497964650912e+00 -2.4499273266346551e+00 + -2.1741735356636762e+00 5.5837327215667787e-01 -2.6134534591704170e+00 + -1.9548225583214591e+00 -6.2737467173941797e-02 -2.6871149912604984e+00 + -1.6309487137418619e+00 -7.6228761959438684e-01 -2.6986876155359907e+00 + -1.1465057860982586e+00 -1.5395757812211281e+00 -2.9888577939569552e+00 + -8.2078891918143604e-01 -2.0334288372225195e+00 -3.8085760506768374e+00 + -1.0131728973811323e+00 -2.1548451746245854e+00 -4.8459348033684577e+00 + -1.9768437124534715e+00 -2.1291858529232970e+00 -5.4624373934579165e+00 + id 12934 + loc 5.1738160848617554e-01 5.1722818613052368e-01 1081 + blend 0.0000000000000000e+00 + interp 8.4574330785061236e-01:8.4573485041753393e-01:1.7162518524068018e+00:5.8572014523627913e-01:1.9071135346326566e+00:3.3728814642703403e-01:2.1560461091052270e+00:4.3172705237109271e-01:2.9924229259353767e+00:3.2921961776060721e-01:3.7044628917570637e+00:6.6732170419918546e-01:3.7511754690574288e+00 + CVs 20 + 5.8943411460910033e-02 6.0686531640687624e-01 5.5723938918274107e-01 + 1.3557872258450090e-01 1.0437838450244687e+00 8.8292395333751683e-01 + 1.9993738762678687e-01 1.4113225261717850e+00 1.1395438763343919e+00 + 2.4191877193753442e-01 1.7454515198693552e+00 1.3833066803121992e+00 + 2.6810211733481726e-01 2.0452094339974178e+00 1.6069755415995859e+00 + 2.8538696506850897e-01 2.3096301153210410e+00 1.8005525584827686e+00 + 3.0072026431071686e-01 2.5398046625351802e+00 1.9539578078950925e+00 + 3.2253686590741970e-01 2.7438235832471780e+00 2.0628347177511639e+00 + 3.7626671141654655e-01 2.9525516848319779e+00 2.1189474371956174e+00 + 5.1591886959359967e-01 3.1710145096535642e+00 2.0296206867642144e+00 + 6.3621782617044487e-01 3.2452982071867962e+00 1.8116470941278551e+00 + 6.9840159292128701e-01 3.2280179067726058e+00 1.5959563708568369e+00 + 7.3896597298871791e-01 3.1631726200118790e+00 1.3702300091996080e+00 + 7.6979131001883727e-01 3.0506589745049082e+00 1.1227210651212869e+00 + 7.9449065899863969e-01 2.8694195606633368e+00 8.4368882264732670e-01 + 8.1431017721020704e-01 2.5573419832539361e+00 5.2242982614705635e-01 + 8.2944986053659497e-01 2.0478782218375207e+00 2.2381683781261996e-01 + 8.4273080293614577e-01 1.4410764358179373e+00 9.8335478521029307e-02 + 8.6164685313924194e-01 1.0355010474925910e+00 1.6725377112635015e-01 + id 12935 + loc 9.3927735090255737e-01 7.5319647789001465e-01 403 + blend 0.0000000000000000e+00 + interp 5.1622470130887788e-01:2.6186725282100748e-01:5.4147652837023719e-02:4.4205921685471750e-01:5.5334624858782755e-01:4.7673569484967443e-01:9.9692975127207417e-01:3.3718495974177243e-01:1.3899043309030805e+00:5.1205955201013498e-01:2.0398972541202620e+00:4.5903376194951334e-01:2.6248923738171026e+00:5.1621953906186480e-01:2.9998387825509703e+00:4.2568373231767603e-01:3.8246250717579162e+00 + CVs 20 + -1.9168202038896347e-02 1.3263233187353646e-01 6.2436763482245361e-02 + 2.0024718566597821e-02 2.7510466560191532e-01 6.7603781042399655e-02 + 6.7685323557314520e-02 4.2016674575993473e-01 8.9331262585655852e-02 + 1.1881315871630060e-01 5.6909879969516708e-01 1.3408941272840236e-01 + 1.8084341214994679e-01 7.1848471384509960e-01 1.8168715047776773e-01 + 2.5177019034564957e-01 8.6890630002498825e-01 2.2841556305787702e-01 + 3.2999416130809922e-01 1.0201162764617646e+00 2.7305247287117235e-01 + 4.1341766798087315e-01 1.1714097718641368e+00 3.1570936132742522e-01 + 4.9952494587122265e-01 1.3217479042547460e+00 3.5781129375570775e-01 + 5.8532074933538636e-01 1.4700061647366323e+00 4.0203833232591557e-01 + 6.6851784269114012e-01 1.6146581019776942e+00 4.5105608146211362e-01 + 7.4792488394820889e-01 1.7538118461063186e+00 5.0725431431570955e-01 + 8.2414173579999717e-01 1.8850781341494338e+00 5.7194460765588018e-01 + 8.9938271561366678e-01 2.0058022991951256e+00 6.4555489467081506e-01 + 9.7711225106905775e-01 2.1132020371041151e+00 7.2781370971474302e-01 + 1.0618971442267200e+00 2.2042544121520362e+00 8.1712078877946515e-01 + 1.1588387423922248e+00 2.2756841589091783e+00 9.1023621664553989e-01 + 1.2718519672502653e+00 2.3246429541549682e+00 1.0022368872268952e+00 + 1.2694603859088143e+00 2.4156525895333223e+00 1.1902064990751828e+00 + id 12936 + loc 4.1500502824783325e-01 9.2365908622741699e-01 264 + blend 0.0000000000000000e+00 + interp 4.5917018126136278e-01:3.3849603042092247e-01:7.6931467967010203e-01:4.0884355410358492e-01:1.0200555298466483e+00:2.8310837861522770e-01:1.6555522714534590e+00:4.5916558955955017e-01:2.2034799202783382e+00:3.8416896784511317e-01:2.9997297466940105e+00:3.1242473333075471e-01:3.9448985148095645e+00 + CVs 20 + -7.4328344274168456e-01 4.3054874390471010e-01 -1.9918835813541108e-01 + -1.2977457109514505e+00 6.7005579486386146e-01 -2.9648768507505890e-01 + -1.8156214353798865e+00 7.5863029910896862e-01 -3.1502392816781233e-01 + -2.3428891796730715e+00 7.4148518179650680e-01 -2.7235348800931974e-01 + -2.8767017877567795e+00 6.9167439484133142e-01 -1.8742848846878740e-01 + -3.4311997615384722e+00 6.6309021740143670e-01 -9.3801676843045412e-02 + -4.0319538461469406e+00 6.5103562289705896e-01 -4.7980196414772802e-02 + -4.6786826231119143e+00 6.3405084044543636e-01 -1.0477124126998005e-01 + -5.3415860917197824e+00 6.0466326797602643e-01 -2.9547344381153839e-01 + -5.9956175839899704e+00 5.4923075225812878e-01 -6.3476586873949670e-01 + -6.6011421968119475e+00 4.2272452254644266e-01 -1.0930429156992278e+00 + -7.0975402991275320e+00 1.6845643013820677e-01 -1.5985252332595969e+00 + -7.4198263803307194e+00 -2.4120891639527731e-01 -2.0650531545555668e+00 + -7.5315713783761673e+00 -7.6992078126334640e-01 -2.4134245791173141e+00 + -7.4571548792693960e+00 -1.3196553118339276e+00 -2.5459715267301979e+00 + -7.3794663698055167e+00 -1.7705367253394271e+00 -2.3687179038916222e+00 + -7.4985104426869382e+00 -1.9729835092497363e+00 -1.9137644247167376e+00 + -7.7070319156748983e+00 -2.0612617070128940e+00 -1.4883927278397833e+00 + -7.8573222222355037e+00 -2.6307067166324236e+00 -1.2906491639663393e+00 + id 12937 + loc 8.0304764211177826e-02 3.3525130152702332e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9493654880768662e-01:4.0705382529271039e-01:2.6558173039304966e-03:4.3451048707220535e-01:4.5151579353147375e-01:3.2599490428877276e-01:9.8315858594268901e-01:3.4734364067664264e-01:1.7291988740725213e+00:4.9493159944219856e-01:2.0063382659750362e+00:4.8886936803227460e-01:2.4378139116419160e+00:3.2720288122852587e-01:3.0006073519829153e+00:3.9760793950378437e-01:3.6560269899408970e+00 + CVs 20 + 2.3131054783799088e-01 3.9648586349925447e-01 -1.3400365931525854e-01 + 3.5885699423116696e-01 7.4681951632040233e-01 -2.9517888144094745e-01 + 4.4115643554540063e-01 1.0872768737088494e+00 -4.6307150854355889e-01 + 4.8440720868139719e-01 1.4299790389046767e+00 -6.3628834478839402e-01 + 4.6689894041912028e-01 1.7620229338709399e+00 -8.1733393577990410e-01 + 3.5974322467873776e-01 2.0647988455300723e+00 -1.0066436144165740e+00 + 1.3236185212139617e-01 2.3036692616990448e+00 -1.1950714988698101e+00 + -2.2427632130906749e-01 2.4221651403614817e+00 -1.3514622029943997e+00 + -6.5348269440393403e-01 2.3723047710198948e+00 -1.4268940625922535e+00 + -1.0549775275853581e+00 2.1796930104097867e+00 -1.4019332725295117e+00 + -1.3794833531760125e+00 1.9203592730179642e+00 -1.3050312907367094e+00 + -1.6378676418022475e+00 1.6595107963359528e+00 -1.1783588790490516e+00 + -1.8618066483864346e+00 1.4422083555519811e+00 -1.0463538674946273e+00 + -2.0623566812696774e+00 1.3315821937945116e+00 -9.2611382734324366e-01 + -2.1619228753371798e+00 1.4346034137014008e+00 -8.7217270435952954e-01 + -1.9074491638786726e+00 1.7090939557005558e+00 -9.7306036689716513e-01 + -1.1071233552956472e+00 1.5402796163796439e+00 -1.1952771648264235e+00 + -7.4005271699200526e-01 5.7550477171334691e-01 -1.1636326442189397e+00 + -6.1854373698834819e-01 6.2759548734242743e-01 -1.1871969636706301e+00 + id 12938 + loc 4.5940113067626953e-01 4.8104491829872131e-01 382 + blend 0.0000000000000000e+00 + interp 4.7808239097704397e-01:3.1071153930551060e-01:8.4245250083023859e-02:3.1503491946924594e-01:9.5039008501678646e-01:4.1383530009917902e-01:1.3883770968679612e+00:4.7807761015313421e-01:2.0268284480923691e+00:3.0137764721899629e-01:2.4401448134106327e+00:3.8306994984841819e-01:3.0780226304889524e+00:4.6464583044269919e-01:3.7948097176504079e+00 + CVs 20 + -5.6275793741077396e-01 1.0390396887671113e-01 -9.0251071559266927e-01 + -9.7497553212479060e-01 7.0334359033985439e-02 -1.4918493586257560e+00 + -1.3553943003130491e+00 -4.6113416195793233e-03 -1.9652103745154883e+00 + -1.7560220276779832e+00 -7.8723187056947364e-02 -2.4016287347506426e+00 + -2.1746130273965081e+00 -1.4175246991800772e-01 -2.8009973016689553e+00 + -2.6120555284535740e+00 -1.8961533697482180e-01 -3.1676179878486703e+00 + -3.0725087644043270e+00 -2.2940636145399984e-01 -3.5013676701464957e+00 + -3.5597836914031795e+00 -2.7930019613910795e-01 -3.7980433884141851e+00 + -4.0678631738173969e+00 -3.6228142214664016e-01 -4.0584680286117782e+00 + -4.5748220056776638e+00 -4.9886957736735882e-01 -4.2838694617269741e+00 + -5.0491727553032879e+00 -6.9635531998815292e-01 -4.4688733431749004e+00 + -5.4681528683361540e+00 -9.4796846778071964e-01 -4.6091821909406043e+00 + -5.8285030918625154e+00 -1.2435275342238368e+00 -4.7134028969979154e+00 + -6.1406769895035680e+00 -1.5693444416435121e+00 -4.7985286276298424e+00 + -6.4227717398456718e+00 -1.9154931057479527e+00 -4.8815351129717870e+00 + -6.6844722356949724e+00 -2.2900443591179922e+00 -4.9725928914780750e+00 + -6.9335076783173717e+00 -2.7047552332583935e+00 -5.0677695141700019e+00 + -7.1623631693470635e+00 -3.1674162208410657e+00 -5.1509759582215722e+00 + -7.3053470346909535e+00 -3.6800701074577322e+00 -5.1804933135118070e+00 + id 12939 + loc 3.6524549126625061e-01 3.9815816283226013e-01 400 + blend 0.0000000000000000e+00 + interp 4.6777147291009324e-01:2.9238275457898744e-01:7.1261826182038390e-01:4.6776679519536418e-01:1.0149655716623451e+00:3.9319166057610000e-01:1.7759244123614455e+00:3.3896803782533935e-01:2.3612356893726782e+00:4.0571006406583338e-01:3.2650408276755174e+00:3.2169743637453957e-01:3.9984033186176036e+00 + CVs 20 + -1.7412022752193757e-01 2.2445936382174045e-01 2.8833112462681931e-01 + -3.6139234259939479e-01 4.2025699689645368e-01 5.4553158185641792e-01 + -5.7550646223458479e-01 5.8669171266402942e-01 7.8205748126572938e-01 + -8.1963045558314040e-01 7.1914428015498943e-01 9.9837114329169063e-01 + -1.0866741455954294e+00 8.1458567252513336e-01 1.1868568676738860e+00 + -1.3678652587812912e+00 8.7578301187605112e-01 1.3437904886817429e+00 + -1.6536425136474837e+00 9.0949030484025239e-01 1.4687804628454959e+00 + -1.9362576683665162e+00 9.2383205268272772e-01 1.5634309660690417e+00 + -2.2150841772209606e+00 9.2626447468286033e-01 1.6304311105449227e+00 + -2.4957524457661533e+00 9.2213791810398937e-01 1.6712797200818943e+00 + -2.7915072695899661e+00 9.1302517159279351e-01 1.6839235278042697e+00 + -3.1296919694193930e+00 8.9311692176036472e-01 1.6651964756236166e+00 + -3.5355783477263523e+00 8.5062010858088399e-01 1.6200161263569157e+00 + -4.0091141751654220e+00 7.6898802896022267e-01 1.5703060579793482e+00 + -4.5374418247566650e+00 6.1524884986399142e-01 1.5526429851267149e+00 + -5.1148950312509296e+00 3.4831310646472824e-01 1.6111505872804444e+00 + -5.7250454602503460e+00 -3.8853171471886938e-02 1.7900101898162246e+00 + -6.3292125420004783e+00 -4.9108712360872309e-01 2.0917466162032312e+00 + -6.9055803457544940e+00 -8.4235418473832335e-01 2.3116012472845884e+00 + id 12940 + loc 4.3203741312026978e-01 2.6045152544975281e-01 411 + blend 0.0000000000000000e+00 + interp 5.2042651912880256e-01:5.2042131486361132e-01:1.7893558911098484e-01:2.6789725933420466e-01:9.9761994063669945e-01:3.1016079745622255e-01:1.9435398529446568e+00:3.2781057930180224e-01:2.4097176054565326e+00:2.7001193730028972e-01:3.3718909633904524e+00 + CVs 20 + -1.1821063511611790e-01 1.9320146625142537e-01 -5.7342510954767101e-01 + -2.2891614431822788e-01 3.0998065765932692e-01 -9.9076966027789870e-01 + -3.1957099473991546e-01 3.9787824780343523e-01 -1.3836633159684546e+00 + -3.7305893203891993e-01 4.7861784746520863e-01 -1.8063205340168014e+00 + -3.7861465830389651e-01 5.4587143001272209e-01 -2.2555818251256592e+00 + -3.2919967819753243e-01 5.9422545282100581e-01 -2.7270868131747545e+00 + -2.2435622772002534e-01 6.1989891569698552e-01 -3.2183061861384532e+00 + -6.7845039223655423e-02 6.1554739530307401e-01 -3.7285059741914583e+00 + 1.3391668190977435e-01 5.6562715944277375e-01 -4.2579991925159826e+00 + 3.6650571373922469e-01 4.4721016405376024e-01 -4.8055942383039945e+00 + 6.0459259723850822e-01 2.3511610909917802e-01 -5.3575560673113660e+00 + 8.2471845268330313e-01 -8.3785144627834818e-02 -5.8832806386661725e+00 + 1.0169810999333955e+00 -5.0339466654040432e-01 -6.3563819527025718e+00 + 1.1766914206865451e+00 -1.0118747420705989e+00 -6.7672811815035701e+00 + 1.2966989591188325e+00 -1.5989887086883603e+00 -7.1096097604715798e+00 + 1.3758049268906491e+00 -2.2452962536085055e+00 -7.3669210512460355e+00 + 1.4236179526944910e+00 -2.9243827661045021e+00 -7.5236012278796327e+00 + 1.4414319644586797e+00 -3.6213399030868834e+00 -7.5865784355035775e+00 + 1.4439385638597060e+00 -4.2449241199574317e+00 -7.6867546065903252e+00 + id 12941 + loc 2.2234547138214111e-01 9.1390091180801392e-01 415 + blend 0.0000000000000000e+00 + interp 4.2923242537514605e-01:2.3591932164920093e-01:2.5571828018159637e-01:2.1103534473485197e-01:1.1563698445707544e+00:1.7609806319403751e-01:1.8910395884639017e+00:3.5720845143245722e-01:2.1876204379518915e+00:3.2236001427449740e-01:2.9884724027649314e+00:4.2922813305089230e-01:3.7605873831140362e+00 + CVs 20 + 5.3501516342419642e-01 2.1309465921083481e-01 5.8361703288579009e-02 + 9.3094821600290678e-01 3.1031790381118629e-01 4.5195344173970975e-02 + 1.2973667553019990e+00 3.7163860186344227e-01 3.8945598457110320e-02 + 1.6681053380655626e+00 4.2376229648507097e-01 6.5520965045444801e-02 + 2.0391675309363277e+00 4.6563926422797086e-01 1.2618809637811090e-01 + 2.4076156820743710e+00 4.9722766363184934e-01 2.2407426307679756e-01 + 2.7689649695138279e+00 5.1853335232538567e-01 3.6189078279025866e-01 + 3.1183088423545415e+00 5.2925146189899075e-01 5.3969085806604733e-01 + 3.4529191462752205e+00 5.2840980257198189e-01 7.5630166537949717e-01 + 3.7696159848341484e+00 5.1421301066701552e-01 1.0090592721870202e+00 + 4.0594532646458532e+00 4.8525120244696929e-01 1.2844809907882668e+00 + 4.3156957052357932e+00 4.4009468070211089e-01 1.5515346853081606e+00 + 4.5496324423822490e+00 3.7305160643610957e-01 1.7787965366532248e+00 + 4.7879186142457719e+00 2.7156497928116963e-01 1.9559212965863548e+00 + 5.0452932504473074e+00 1.2465815420086113e-01 2.0810385573528656e+00 + 5.3055982986100814e+00 -6.1983700194849778e-02 2.1428117201450574e+00 + 5.5408685642982158e+00 -2.6717634779639710e-01 2.1276807136886027e+00 + 5.7342958063485039e+00 -4.6747372816638322e-01 2.0352468891584317e+00 + 5.9733785976477076e+00 -7.1308788948545176e-01 1.9496819028279631e+00 + id 12942 + loc 7.8160017728805542e-01 4.9079671502113342e-01 393 + blend 0.0000000000000000e+00 + interp 4.6199811440592747e-01:4.0303338619614149e-01:1.6233051002283938e-01:4.0310165137086917e-01:1.0042402732283098e+00:4.5134321768586377e-01:1.7940314605893624e+00:4.4464000524712849e-01:2.0720751493028216e+00:4.6199349442478344e-01:2.6761370446879766e+00:2.7780163564162758e-01:3.2044333524178166e+00 + CVs 20 + 3.0095759615434065e-01 3.6913604523163968e-01 1.6764554835411694e-01 + 6.0724187907994964e-01 7.6463426084902153e-01 3.0904056897425536e-01 + 8.8123198020116400e-01 1.1914635743957933e+00 4.5820049721864953e-01 + 1.1103417053785301e+00 1.6250617033142829e+00 6.4751690327611278e-01 + 1.2890690865003573e+00 2.0347684534942538e+00 8.9996443999685560e-01 + 1.4047979407851596e+00 2.3979295114360486e+00 1.2126847475943472e+00 + 1.4481347085396292e+00 2.7076147025183923e+00 1.5627339092861767e+00 + 1.4216433895253271e+00 2.9724345540034536e+00 1.9313881221268088e+00 + 1.3387113832666011e+00 3.2077993831405101e+00 2.3205896558926531e+00 + 1.2191897996982972e+00 3.4217606956706716e+00 2.7494656392578403e+00 + 1.0887240656520649e+00 3.6083463141232119e+00 3.2432901558421081e+00 + 9.8227515095666518e-01 3.7505786618240173e+00 3.8227714950199188e+00 + 9.3330801382740147e-01 3.8143930537145732e+00 4.5030774882467473e+00 + 9.6100066180749399e-01 3.7373889689494133e+00 5.3041357671906644e+00 + 1.0701063939088986e+00 3.4063455101519833e+00 6.2199911995293453e+00 + 1.2564624903045016e+00 2.6952208485326046e+00 7.1119808650584853e+00 + 1.5443550119942298e+00 1.6459103614725759e+00 7.7405387983665888e+00 + 1.9570563025236618e+00 5.9792359714450960e-01 7.9819141947430223e+00 + 2.2417066116299988e+00 2.8099632048494616e-01 7.9450811006780571e+00 + id 12943 + loc 1.4282165095210075e-02 6.6131919622421265e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4117555956412663e-01:3.9359427167850874e-01:1.5865619687547849e-01:2.4151194988369692e-01:8.6352561568753561e-01:2.8438375441377595e-01:1.9896197059675456e+00:4.4117114780853101e-01:2.2756996406697327e+00:2.9552734506367290e-01:3.0511712499520902e+00:3.5744963750946157e-01:3.8310963696384945e+00 + CVs 20 + 9.8859756289516099e-02 2.3079051529207295e-01 -8.5846122701055572e-02 + 2.1104165175959239e-01 4.6082274688510372e-01 -1.8546831930751928e-01 + 3.3375123529790029e-01 6.8362132143893062e-01 -2.7596749088212202e-01 + 4.6898276666153788e-01 9.0081224562512041e-01 -3.5173072574669800e-01 + 6.2010420911837683e-01 1.1157663685077144e+00 -4.2155019025591700e-01 + 7.8547622599098144e-01 1.3344891872883369e+00 -4.9436502065518539e-01 + 9.5483135459128321e-01 1.5686876198292128e+00 -5.8039655770547416e-01 + 1.1115294446000834e+00 1.8331382596071806e+00 -6.9401631173398270e-01 + 1.2398612661324100e+00 2.1363543489762522e+00 -8.6643939502458545e-01 + 1.3197949159299966e+00 2.4398718502405510e+00 -1.1444569109528728e+00 + 1.3360243856449383e+00 2.6485568436682332e+00 -1.5083361880056567e+00 + 1.3031076647439246e+00 2.7264940949556813e+00 -1.8679403403826420e+00 + 1.2424742848488532e+00 2.7138861704804951e+00 -2.1681110035857030e+00 + 1.1588045207887188e+00 2.6597929943787575e+00 -2.3953196118477234e+00 + 1.0341433276331240e+00 2.5983866452446662e+00 -2.5486927867193527e+00 + 8.0785741917576093e-01 2.5463833825690152e+00 -2.6413280737575149e+00 + 3.6569998379826507e-01 2.4624934268039151e+00 -2.7330427632787995e+00 + -1.6926032031030624e-01 2.2136982123910838e+00 -2.9519875713118893e+00 + -1.6873927625252527e-02 2.1606478892129823e+00 -3.0294307457698433e+00 + id 12944 + loc 2.6711750030517578e-01 1.0702168941497803e-01 406 + blend 0.0000000000000000e+00 + interp 4.5654406576200923e-01:2.7456483980824548e-01:4.1782463221481492e-02:2.8239269462250949e-01:1.0115942335095769e+00:4.0621298149154172e-01:1.8729355008304394e+00:2.4639364212576118e-01:2.8446770842116029e+00:4.5653950032135165e-01:3.5399243016070754e+00 + CVs 20 + 1.0025899803155905e-01 1.1119437118498299e-01 -8.3722706683560341e-02 + 1.8957333809189392e-01 1.9202541536484977e-01 -1.4846277616688325e-01 + 2.6698111920963535e-01 2.4751227822241867e-01 -2.2262072384144582e-01 + 3.3446187967118091e-01 2.8444368371510176e-01 -3.1388685229604751e-01 + 3.8939009271100183e-01 3.0128984397248204e-01 -4.1830605362924977e-01 + 4.2987545682914491e-01 2.9777008813542399e-01 -5.3121727079722814e-01 + 4.5572418354288874e-01 2.7572579741917486e-01 -6.4860213615715745e-01 + 4.6863628581381384e-01 2.3880865934699522e-01 -7.6812131099917191e-01 + 4.6983823886629539e-01 1.9014385384249138e-01 -8.8574695125910097e-01 + 4.5826746619057745e-01 1.3223412835258785e-01 -9.9203357096998568e-01 + 4.3449153135968605e-01 7.0162883660681852e-02 -1.0790713075576339e+00 + 4.0513004619017917e-01 1.1066695711233143e-02 -1.1520709915845888e+00 + 3.7830960365823135e-01 -4.0345638948927620e-02 -1.2231242586983599e+00 + 3.5809827521063231e-01 -8.1203561235456467e-02 -1.2934201506540475e+00 + 3.4569069526955382e-01 -1.0749186972270119e-01 -1.3547640295375116e+00 + 3.4212385312686711e-01 -1.1569419975067918e-01 -1.4050399604340740e+00 + 3.4833540734852897e-01 -1.0634920404138770e-01 -1.4535439954431699e+00 + 3.6408216068970867e-01 -8.5426041073155656e-02 -1.5141981039554269e+00 + 3.8137250245557208e-01 -9.4843150324905978e-02 -1.6724802604122493e+00 + id 12945 + loc 2.3160459101200104e-01 4.0407299995422363e-01 399 + blend 0.0000000000000000e+00 + interp 4.3995828467830400e-01:4.3695791626270231e-01:6.7481154950161237e-01:3.1654316441941682e-01:1.0292909240040324e+00:4.3995388509545724e-01:1.9444407212738171e+00:3.9215979841381093e-01:2.3274439089329433e+00:4.0755613785990907e-01:3.2014764189028559e+00:2.7491792953929262e-01:3.8763412034888827e+00 + CVs 20 + -1.5974912892438786e-01 3.7805850018197290e-01 1.2057113012382700e-01 + -3.6723454936321481e-01 7.5657263039981748e-01 2.4127136098882282e-01 + -6.2209067323655542e-01 1.1193364924768041e+00 3.4036183388669500e-01 + -9.1258186991560697e-01 1.4617663929727600e+00 4.2262430142949015e-01 + -1.2258005960394915e+00 1.7861680857333433e+00 5.1074163947728191e-01 + -1.5545768363679777e+00 2.0880619962039333e+00 6.2887948790722936e-01 + -1.8981772489875997e+00 2.3503324168974116e+00 7.9628208398173994e-01 + -2.2582832420011680e+00 2.5403586769617736e+00 1.0262662058546210e+00 + -2.6288403327908370e+00 2.6103350691115446e+00 1.3184919063418290e+00 + -2.9842376612819264e+00 2.5097983798648937e+00 1.6458471851597194e+00 + -3.2717835677610392e+00 2.2313003031198577e+00 1.9494769262048126e+00 + -3.4568120007868877e+00 1.8704898818000955e+00 2.1790100224162625e+00 + -3.5741125930708737e+00 1.5361103209288696e+00 2.3490230868341677e+00 + -3.6786137026735535e+00 1.2780341879256212e+00 2.4917432341186134e+00 + -3.8125242556005632e+00 1.1245625279842208e+00 2.6134746991500934e+00 + -3.9891045366264839e+00 1.0756928855029462e+00 2.6823526587974085e+00 + -4.1850792895022453e+00 1.1168091037632506e+00 2.6478771122146298e+00 + -4.3515834912850071e+00 1.1822752432193688e+00 2.5555719943374036e+00 + -4.5792094783958879e+00 1.1104218878713941e+00 2.6021051019114156e+00 + id 12946 + loc 2.9854202270507813e-01 7.9764693975448608e-02 395 + blend 0.0000000000000000e+00 + interp 4.6361648310096470e-01:3.1416047332575558e-01:1.3390372731148081e-01:4.5960450623868793e-01:8.7903389149950362e-01:4.4534390603866558e-01:1.1241545715121446e+00:4.6361184693613372e-01:1.9199981492485496e+00:3.4324592855614511e-01:2.1801768145935849e+00:3.8158181279531667e-01:3.0377479546981103e+00:4.4041397549328637e-01:3.6698339958063557e+00 + CVs 20 + -3.0604373428378479e-01 1.1283266488698809e-01 -7.7753455621526829e-02 + -5.7327676179753617e-01 2.2962553824931600e-01 -1.5880982041849795e-01 + -8.2479931264193840e-01 3.5364722389875197e-01 -2.4627709410405266e-01 + -1.0794928598631000e+00 4.9004092829154744e-01 -3.4523620538829186e-01 + -1.3355909207051342e+00 6.3743379491279473e-01 -4.6082239394419888e-01 + -1.5911517702966911e+00 7.9202864584437260e-01 -5.9506209071854710e-01 + -1.8502092212526078e+00 9.5165080380994549e-01 -7.4885885761981941e-01 + -2.1225460134766001e+00 1.1143202912777457e+00 -9.2561848491551135e-01 + -2.4124966318417416e+00 1.2708735400802915e+00 -1.1311328410287518e+00 + -2.7131272318555006e+00 1.4020630434741257e+00 -1.3656492930258497e+00 + -3.0202156518505916e+00 1.4831329262487767e+00 -1.6178835790473745e+00 + -3.3413427623825149e+00 1.4889682395476180e+00 -1.8707137081561522e+00 + -3.6802927970454546e+00 1.4038359554064117e+00 -2.1088074620872224e+00 + -4.0236025174534369e+00 1.2305735740340493e+00 -2.3194106442519957e+00 + -4.3521950872810988e+00 9.8571897431359057e-01 -2.4909847631601219e+00 + -4.6568577181566511e+00 6.8434092543576330e-01 -2.6171861908960068e+00 + -4.9315875444890747e+00 3.3442185517853940e-01 -2.6968971216077797e+00 + -5.1640249310995827e+00 -5.0752131163208869e-02 -2.7308660070155253e+00 + -5.3451913696334241e+00 -4.2595141268313919e-01 -2.7251925020136634e+00 + id 12947 + loc 9.3127292394638062e-01 6.8069159984588623e-01 409 + blend 0.0000000000000000e+00 + interp 4.7416505821046184e-01:3.5251045018750993e-01:1.5845994185655321e-01:2.7562941345635517e-01:9.4917347879617586e-01:3.8628205994529724e-01:1.4328040500093171e+00:4.1397847164107454e-01:1.9995793640515713e+00:4.7416031655987978e-01:2.8386601836060397e+00:2.8332942377873183e-01:3.1349305698280894e+00 + CVs 20 + 4.7129479051730322e-01 9.7513410274298745e-02 -2.7145956828980344e-01 + 8.6741411522625200e-01 1.4975412671774602e-01 -5.2107199845916197e-01 + 1.2437526954680331e+00 2.0047034850865897e-01 -7.5420384234421967e-01 + 1.6128849217034014e+00 2.6095297716242294e-01 -9.7383943294870390e-01 + 1.9713069325878747e+00 3.2768841279109018e-01 -1.1823811121104844e+00 + 2.3179317734350171e+00 3.9698369228055508e-01 -1.3830574116078536e+00 + 2.6553657284731127e+00 4.6426011445937365e-01 -1.5755010115999650e+00 + 2.9900904874452752e+00 5.2203287520273567e-01 -1.7566373091544623e+00 + 3.3265945202655569e+00 5.5990512974066364e-01 -1.9236871634462509e+00 + 3.6635339506413427e+00 5.6640380209864505e-01 -2.0764332002970480e+00 + 4.0019954595272367e+00 5.2881921758516026e-01 -2.2191302141265408e+00 + 4.3475838855684659e+00 4.3339924274289321e-01 -2.3575037898300772e+00 + 4.7005775170896245e+00 2.7228394620393903e-01 -2.4938334443068904e+00 + 5.0553059824012738e+00 4.6911838790154814e-02 -2.6301234290716917e+00 + 5.4043828025411145e+00 -2.4245603057045306e-01 -2.7707613692459363e+00 + 5.7374806714068214e+00 -6.0258447636447254e-01 -2.9169473088982576e+00 + 6.0399638781362643e+00 -1.0336900607874435e+00 -3.0615403883077930e+00 + 6.3019750980173050e+00 -1.5075596510414591e+00 -3.1956469133247771e+00 + 6.5594045673123063e+00 -1.9061702835800078e+00 -3.3191288519792836e+00 + id 12948 + loc 3.7368786334991455e-01 5.8412927389144897e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6845153851811744e-01:2.9663178608285246e-01:2.4606222086948371e-01:3.4775864481003455e-01:9.8876911742025320e-01:3.7498260760962182e-01:1.4486504040038859e+00:4.1841130120404496e-01:1.9934629601454865e+00:3.4267445441262023e-01:2.7216756512240932e+00:4.6844685400273228e-01:3.0157031390733637e+00:3.5757645270648064e-01:3.8896403653565623e+00 + CVs 20 + 2.1292701364519007e-01 3.4523574456303652e-01 -3.3763786367202731e-02 + 4.2846791075045454e-01 6.6097043445511927e-01 -1.1823644765453140e-01 + 6.5070698914733838e-01 9.6450076201950175e-01 -2.3396292665832757e-01 + 8.8011488389701331e-01 1.2404744288265153e+00 -3.8412700690813817e-01 + 1.1139224858479342e+00 1.4594161970859765e+00 -5.7934875234103078e-01 + 1.3410674876629363e+00 1.5859514187921420e+00 -8.2451903856182196e-01 + 1.5405557577643261e+00 1.5956949436853447e+00 -1.1133075422441723e+00 + 1.6859669174358851e+00 1.4880056509087076e+00 -1.4315906443347473e+00 + 1.7568717046628797e+00 1.2728579312993760e+00 -1.7561050258040698e+00 + 1.7463107922206362e+00 9.5799188628327148e-01 -2.0462928033450676e+00 + 1.6691227157021835e+00 5.6053709169755039e-01 -2.2525373791476770e+00 + 1.5771803837517919e+00 1.2448565941095602e-01 -2.3723134645424464e+00 + 1.5167835175853615e+00 -3.0328453358767082e-01 -2.5059703016594450e+00 + 1.4843593938506014e+00 -6.5973056470410496e-01 -2.8338036816559393e+00 + 1.4887324044736305e+00 -7.1466395917204251e-01 -3.5266038930652770e+00 + 1.6657881567173511e+00 -4.7499644616898262e-02 -4.3346471226014316e+00 + 2.1931482469527777e+00 1.3322012430256271e+00 -4.3097804344743125e+00 + 2.7146196379313041e+00 2.1650746302902526e+00 -3.0490794671658299e+00 + 2.8698339845461938e+00 2.3980319216122918e+00 -3.0451399381982491e+00 + id 12949 + loc 2.5132426992058754e-02 2.1240903064608574e-02 414 + blend 0.0000000000000000e+00 + interp 7.2123586508444602e+00:3.7739003335746096e-01:6.3884685891795001e-01:2.6493825848128083e-01:1.4959903530269401e+00:6.5539710150153863e-01:1.8374994294400195e+00:6.8725681898706767e+00:1.9235245578956750e+00:7.2123486508444605e+00:1.9412183173794006e+00:6.3096776385943194e+00:3.9429004586543797e+00:5.5526629947501078e+00:3.9531713983439358e+00:4.1227573521976957e-01:3.9957393663806116e+00 + CVs 20 + -1.7384662523126998e-01 2.5809186589770156e-01 -8.6341411383812716e-01 + -3.6102050414549380e-01 3.7799973037365753e-01 -1.4009562263198050e+00 + -5.5042272226271194e-01 4.4719397567591901e-01 -1.8684914595604438e+00 + -7.3230411564531983e-01 5.0928764173292151e-01 -2.3809258665902409e+00 + -8.9466899141581413e-01 5.5191758771452182e-01 -2.9312331268948504e+00 + -1.0233991860893208e+00 5.6389957752694098e-01 -3.5076605242660914e+00 + -1.1052372188737629e+00 5.3825055454560222e-01 -4.0925750015070781e+00 + -1.1337611905715650e+00 4.7307027963407067e-01 -4.6643959732781166e+00 + -1.1113541080509575e+00 3.7128744292501403e-01 -5.2027662204501670e+00 + -1.0462080087721035e+00 2.4057241337907931e-01 -5.6920587498136204e+00 + -9.4761365796277264e-01 9.3118716513964417e-02 -6.1231284973083842e+00 + -8.1944426859619246e-01 -5.7635499939523660e-02 -6.4953960949956855e+00 + -6.5716903991093678e-01 -2.0876107409537537e-01 -6.8193152075069747e+00 + -4.6893394371098063e-01 -3.7851867092643010e-01 -7.1129891692810645e+00 + -2.6625698107704809e-01 -5.8240565624749685e-01 -7.3857492148949326e+00 + -4.4933601829958425e-02 -8.2056062608012748e-01 -7.6391721158002559e+00 + 1.9913207437077851e-01 -1.0932567664599582e+00 -7.8755082830196637e+00 + 4.4945954714337721e-01 -1.4002185005377641e+00 -8.0891575754427318e+00 + 5.9337879956935302e-01 -1.6386072712059023e+00 -8.1451148420599306e+00 + id 12950 + loc 3.7606012821197510e-01 7.7385872602462769e-01 1081 + blend 0.0000000000000000e+00 + interp 3.0594606957871466e+00:3.0594506957871466e+00:1.7747390030576287e+00:2.6851397421700405e+00:1.7790165549742309e+00:1.7353258294414418e+00:1.8409225955424020e+00:3.2378717943875790e-01:1.9884757384453087e+00:3.1130302243679142e-01:2.5309239634097711e+00:3.1456286843707681e-01:3.2617441125839877e+00:8.4573485041753393e-01:3.7260876269618173e+00:1.5118950402287947e+00:3.7416675573016018e+00 + CVs 20 + -1.5389522370642811e-02 4.9812939222051156e-01 6.3309674934956106e-01 + -2.7032512507111889e-02 8.5176380526185724e-01 9.9903808127773841e-01 + -3.4525294656881672e-02 1.1569730629678088e+00 1.2667222927014734e+00 + -4.0386588935896334e-02 1.4545645098947959e+00 1.5119865498609895e+00 + -3.8518816026633373e-02 1.7378426424687596e+00 1.7381868876002842e+00 + -3.0555949755617873e-02 2.0010638104590028e+00 1.9532587145035061e+00 + -2.3135970426325869e-02 2.2509162570583019e+00 2.1681857175140302e+00 + -1.4048085686192757e-02 2.5282955783988079e+00 2.4099646596926698e+00 + 7.8247758740509377e-02 2.9595347643381409e+00 2.7320075186010437e+00 + 5.7061128804005135e-01 3.6154654867855927e+00 2.9906691457589663e+00 + 1.2670467609630101e+00 3.9886241344847706e+00 2.8542571522577713e+00 + 1.6927741912374810e+00 4.0411354093230445e+00 2.5868609940737497e+00 + 1.9148446194898234e+00 3.9658254572314569e+00 2.3263034499468245e+00 + 2.0143881843176850e+00 3.8120678143339743e+00 2.0688064615889799e+00 + 2.0360081984583966e+00 3.5763072293758986e+00 1.7658521120517778e+00 + 2.0136102854222537e+00 3.2113227078101754e+00 1.3652611546201183e+00 + 1.9616887011462680e+00 2.6686291913127387e+00 9.9773901498377737e-01 + 1.8767923861854467e+00 2.0514259368520076e+00 9.1464459901335982e-01 + 1.7651274635696317e+00 1.5144514040723926e+00 1.1708394662719037e+00 + id 12951 + loc 2.0638903975486755e-01 9.1549825668334961e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9929440214393922e-01:3.8669940413964005e-01:1.8866571016682787e-01:3.3398666664735227e-01:8.5377256465928852e-01:2.8730054505606273e-01:1.3178418058938772e+00:4.9928940919991782e-01:2.2417984260806341e+00:3.8840603484560299e-01:2.9802342365864884e+00:3.2879955291956564e-01:3.9223458626876448e+00 + CVs 20 + -1.2951138514436994e-01 2.1728442289198466e-01 2.1157169748441568e-01 + -2.0855162019716275e-01 3.5458132789507779e-01 2.8254389982783484e-01 + -2.7448032844875087e-01 4.5985549007389714e-01 3.0065429221081119e-01 + -3.5006526626884155e-01 5.6320174630118236e-01 3.2024394213993346e-01 + -4.4078594921801162e-01 6.6558595844251389e-01 3.3922632478120762e-01 + -5.5345726877202450e-01 7.6615699443509122e-01 3.5552193314538849e-01 + -6.9473420579409251e-01 8.6200394310946249e-01 3.6715238266370021e-01 + -8.6964063927488655e-01 9.4911612964563929e-01 3.7296512954530697e-01 + -1.0811940982801624e+00 1.0234352404882434e+00 3.7343778624971868e-01 + -1.3305293423324918e+00 1.0815680103206720e+00 3.7059940193357693e-01 + -1.6171592888331525e+00 1.1209330085882550e+00 3.6783209982480997e-01 + -1.9386857341181267e+00 1.1385130852693415e+00 3.6870028230536811e-01 + -2.2882602332622217e+00 1.1299431645879876e+00 3.7476685752994254e-01 + -2.6521561967519927e+00 1.0948889085658993e+00 3.8631403816674648e-01 + -3.0154578501710199e+00 1.0449080071552854e+00 4.0634087751186571e-01 + -3.3708081276514452e+00 9.9807982995698241e-01 4.4132832512223613e-01 + -3.7142997350624141e+00 9.6679724791987498e-01 4.9655676070529392e-01 + -4.0373476585289021e+00 9.5609004973635825e-01 5.7101920837140441e-01 + -4.3533939271615143e+00 9.5346396068081674e-01 6.5809260278840220e-01 + id 12952 + loc 7.8633224964141846e-01 3.1756684184074402e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4497228609475183e-01:2.7648267140293808e-01:2.3019961820477386e-02:3.4365637134160648e-01:6.5199430295441463e-01:3.4496883637189091e-01:1.3422655412705837e+00:3.4120282941880348e-01:2.0872552347940103e+00:2.8193945709595919e-01:2.9097677025142521e+00:3.2708079434650789e-01:3.5923310654177305e+00 + CVs 20 + -1.2121578802272297e-01 3.3170525882973323e-01 1.4711047825221976e-01 + -2.5394131519320623e-01 6.6140505628762525e-01 2.8472661283215805e-01 + -4.0444478868502437e-01 9.8161234115837548e-01 4.0204633577691057e-01 + -5.7382664682872697e-01 1.2826731694231444e+00 4.9292344541407529e-01 + -7.5895798296884287e-01 1.5583732742814107e+00 5.6058607394251991e-01 + -9.5963766651981586e-01 1.8061589008818255e+00 6.0995718273220967e-01 + -1.1806124315789419e+00 2.0267200734409605e+00 6.4881571815145445e-01 + -1.4235109666494827e+00 2.2131748941685516e+00 6.8938724398378892e-01 + -1.6796254222295821e+00 2.3573795279641407e+00 7.4183133181655825e-01 + -1.9441871109300328e+00 2.4751609694409926e+00 8.1033505872692446e-01 + -2.2511433559032126e+00 2.6018112645798417e+00 9.1818655903760915e-01 + -2.6153416074487881e+00 2.6822275022930295e+00 1.1324875899459252e+00 + -2.9006580432752695e+00 2.6023660525145131e+00 1.4226162511112013e+00 + -3.0528194036380247e+00 2.3874111855677604e+00 1.7235543080944917e+00 + -3.0806112761730722e+00 2.0820060416567929e+00 2.0211700241572950e+00 + -2.9635438326638153e+00 1.7489824033584420e+00 2.2817288013135961e+00 + -2.7042701163387077e+00 1.4579753748319457e+00 2.4740059767922808e+00 + -2.3494556488637421e+00 1.2135779323720610e+00 2.6017135043640751e+00 + -2.0947805980667393e+00 1.0237346678000263e+00 2.6349401723887267e+00 + id 12953 + loc 8.9709311723709106e-01 3.8336271047592163e-01 380 + blend 0.0000000000000000e+00 + interp 4.9177277006812448e-01:3.8876512032184152e-01:9.5114051033839964e-04:2.8954882776833796e-01:4.4742109983977962e-01:4.9176785234042381e-01:1.2620470892329934e+00:3.9114829446609006e-01:2.0490813293368206e+00:2.9995632380522080e-01:2.9993701939005462e+00:2.9205475838330319e-01:3.5706106742670332e+00 + CVs 20 + 5.8936497977879887e-01 2.6801393693135012e-01 6.8641742959305263e-01 + 1.0726021109679720e+00 4.5581263829502738e-01 1.1728486954040371e+00 + 1.5108373178698313e+00 6.2677289115697965e-01 1.6191832664205441e+00 + 1.9254661212827600e+00 8.0645027677365810e-01 2.0962304300410910e+00 + 2.3032018136253942e+00 9.7926173924170345e-01 2.6044112072107186e+00 + 2.6385689756698136e+00 1.1205980810543736e+00 3.1424409282277064e+00 + 2.9337476875789004e+00 1.2005273008246284e+00 3.7056160997256615e+00 + 3.1907922719841570e+00 1.1911487289082561e+00 4.2777702055209028e+00 + 3.4102196673718441e+00 1.0754847383655928e+00 4.8303785220560691e+00 + 3.5957680589758101e+00 8.5187523460420067e-01 5.3328653758284901e+00 + 3.7560614079213193e+00 5.3406356164276092e-01 5.7598865376461550e+00 + 3.8982115054825126e+00 1.4948521661756908e-01 6.0914106070463374e+00 + 4.0147725014135904e+00 -2.7091712801984613e-01 6.3109399636354091e+00 + 4.0807330489543334e+00 -7.1095531662709410e-01 6.3983540062699644e+00 + 4.0923839581607950e+00 -1.1797238004317361e+00 6.3488091739833283e+00 + 4.0717868814712341e+00 -1.7014764225060111e+00 6.2125902733597176e+00 + 4.0413888035621328e+00 -2.2701968768159801e+00 6.0809182475753083e+00 + 4.0298358003932737e+00 -2.8275968122709654e+00 6.0115816196776644e+00 + 4.2041255731161016e+00 -3.2114116358403249e+00 5.9493478877585435e+00 + id 12954 + loc 1.9332330673933029e-02 1.2865385413169861e-01 382 + blend 0.0000000000000000e+00 + interp 4.5866577553705784e-01:3.2370969858153897e-01:1.2853972252482848e-01:2.6765077004736060e-01:9.8069136248204947e-01:2.9495684869644573e-01:1.6892890191413175e+00:3.1930916309779528e-01:2.5607707731530702e+00:3.7554942246281076e-01:3.1397959176077253e+00:4.5866118887930252e-01:3.9372624084869949e+00 + CVs 20 + -4.7140063821190725e-01 1.5728756845730937e-01 -7.5344090433931010e-01 + -8.6647965115984382e-01 1.7996695726950435e-01 -1.3248147877888421e+00 + -1.2583629663301996e+00 1.4820708447183939e-01 -1.8410276552792262e+00 + -1.6776435137204408e+00 8.5317303915181220e-02 -2.3481883095184419e+00 + -2.1133270100929282e+00 -1.0007784795597940e-02 -2.8325464688637894e+00 + -2.5563970387575905e+00 -1.3642544093927467e-01 -3.2814341818539634e+00 + -2.9962675277498061e+00 -2.9289182510673295e-01 -3.6843794838207340e+00 + -3.4182709415590762e+00 -4.8138686478526793e-01 -4.0345344667690979e+00 + -3.8124603807461361e+00 -7.0209823147826289e-01 -4.3265152775351403e+00 + -4.1805069630365672e+00 -9.4833260839821709e-01 -4.5532006861331533e+00 + -4.5284502928381860e+00 -1.2092776670061549e+00 -4.7131088675043733e+00 + -4.8609331097151003e+00 -1.4746678683983858e+00 -4.8174579803968296e+00 + -5.1783346238210175e+00 -1.7354082302801772e+00 -4.8797990437036933e+00 + -5.4810995917521517e+00 -1.9838737270226807e+00 -4.9083356944211936e+00 + -5.7684714606873904e+00 -2.2137809363496608e+00 -4.9074323604838499e+00 + -6.0377952361456773e+00 -2.4243720273167551e+00 -4.8828862022283461e+00 + -6.2888869153496785e+00 -2.6228603198422347e+00 -4.8418518499879575e+00 + -6.5252715004473281e+00 -2.8205637937616777e+00 -4.7903422344331927e+00 + -6.7457711513165055e+00 -3.0195673387854445e+00 -4.7312285793981523e+00 + id 12955 + loc 9.3609976768493652e-01 3.8138025999069214e-01 415 + blend 0.0000000000000000e+00 + interp 4.3911098390904607e-01:2.9180334269900288e-01:4.1897450865576724e-03:3.5369379492965380e-01:9.4528106555731084e-01:3.3151489209324242e-01:1.8263104053092882e+00:3.3441814630648053e-01:2.3191142505516082e+00:4.3910659279920700e-01:2.9994407201431650e+00 + CVs 20 + -2.5352380714812073e-01 1.6219037635144981e-01 3.8127646248269045e-02 + -4.7126526698031340e-01 3.0570811081420146e-01 8.0323604671035526e-02 + -6.7350296300093060e-01 4.4841610759032180e-01 1.0837057188183066e-01 + -8.7703757438047969e-01 6.0149026253580395e-01 1.1399080544919221e-01 + -1.0819006585177724e+00 7.6085729498478449e-01 9.5217475422989806e-02 + -1.2858759831986826e+00 9.2173012766673157e-01 4.9811611161072800e-02 + -1.4862858850691789e+00 1.0800793567075107e+00 -2.4196133245995011e-02 + -1.6822974159125501e+00 1.2329450886190587e+00 -1.2704720749649512e-01 + -1.8733039861682745e+00 1.3775822853140445e+00 -2.5669389100549800e-01 + -2.0567158541507262e+00 1.5114142370226600e+00 -4.0937389301918470e-01 + -2.2349518037350222e+00 1.6332583650736434e+00 -5.8257127410325238e-01 + -2.4343565729815135e+00 1.7415868403784849e+00 -7.8052700241766126e-01 + -2.7038798772321817e+00 1.8247140968613782e+00 -1.0000149474193631e+00 + -3.0696521335608140e+00 1.8579304254508067e+00 -1.1961163067230380e+00 + -3.4934700177786260e+00 1.8290788729057832e+00 -1.3103412430819674e+00 + -3.9238919612763334e+00 1.7474181011105725e+00 -1.3290298370299609e+00 + -4.3379862074201876e+00 1.6233444250929296e+00 -1.2556990824441636e+00 + -4.7137409633583571e+00 1.4711441506111740e+00 -1.0893262677685525e+00 + -4.9937246728643752e+00 1.3731928506586568e+00 -9.7369531537048348e-01 + id 12956 + loc 3.6131042242050171e-01 8.4547829627990723e-01 411 + blend 0.0000000000000000e+00 + interp 4.8227745913154690e-01:2.8662368373223784e-01:5.5286424392691791e-01:4.3955689188268310e-01:1.1529824860774833e+00:2.8540840917914889e-01:1.9089529381458064e+00:4.8227263635695561e-01:2.6232142162669758e+00:2.8378106817951704e-01:3.2759359807454791e+00:3.5486983875050576e-01:3.9407347701093949e+00 + CVs 20 + 9.7985353580408141e-01 1.7914313545533589e-01 -9.6442554637323874e-02 + 1.6711944317651377e+00 2.4510850077719926e-01 -1.6969620656342788e-01 + 2.2991521858204043e+00 2.7935798929119915e-01 -2.0253419744088053e-01 + 2.9436807860864826e+00 3.0918713336597459e-01 -1.8540629732884017e-01 + 3.5850008981501893e+00 3.2310443084598217e-01 -1.1943547467362289e-01 + 4.2048366111853586e+00 3.0981823502471983e-01 -1.6773544957737307e-02 + 4.7897388790082669e+00 2.5848634903448886e-01 1.0469710676821187e-01 + 5.3319474480990472e+00 1.5911912847182275e-01 2.2723339799750755e-01 + 5.8288930701847503e+00 4.7712359857454700e-03 3.3544745795625153e-01 + 6.2792706102996707e+00 -2.0583941455483457e-01 4.1678542063746649e-01 + 6.6816956610294769e+00 -4.6924572848451107e-01 4.6177199400673752e-01 + 7.0347875291064623e+00 -7.8258421226305619e-01 4.6471575668661214e-01 + 7.3392135297970862e+00 -1.1467459882735946e+00 4.2788433787496749e-01 + 7.5974264050697498e+00 -1.5636526443893877e+00 3.6052761396659105e-01 + 7.8092050566977145e+00 -2.0298778463313933e+00 2.7026754505249134e-01 + 7.9701259446612891e+00 -2.5378623825425715e+00 1.6132546474051207e-01 + 8.0691234097794684e+00 -3.0776154218741887e+00 4.1195308038348366e-02 + 8.0930400552233142e+00 -3.6286919281045638e+00 -8.1974485616306936e-02 + 8.0454232188548129e+00 -4.1761788153049064e+00 -2.1397257786239293e-01 + id 12957 + loc 9.2449003458023071e-01 6.0377722978591919e-01 403 + blend 0.0000000000000000e+00 + interp 5.3430658948493637e-01:4.8664825578714244e-01:4.5538323755709431e-03:3.6851609353938369e-01:4.8404035253423694e-01:3.5248439110067126e-01:1.4331487323065772e+00:2.6959222461186200e-01:2.0001232148159422e+00:2.7562539974830880e-01:2.7613414752078929e+00:4.7707855847705022e-01:3.0800416850324082e+00:5.3430124641904153e-01:3.7591561605383590e+00 + CVs 20 + 3.3498609816923999e-02 9.1749569036034401e-02 -7.4205134799644711e-03 + 3.9724314183943427e-02 1.6118613435535348e-01 -2.0349412138186227e-02 + 3.0961221429318564e-02 2.2096853916211290e-01 -4.1398616911724959e-02 + 2.0870313837414431e-02 2.7297823961440082e-01 -6.6730227466013495e-02 + 1.0835464411864143e-02 3.1232462298202057e-01 -9.2503702524425357e-02 + 2.7687811987574806e-03 3.3614166694338532e-01 -1.1416709208262042e-01 + 4.1056568093800205e-04 3.4372220934341458e-01 -1.2588131705815850e-01 + 1.0075978791459855e-02 3.3640374987347466e-01 -1.2017475019779400e-01 + 4.1129163161983284e-02 3.1869511812220935e-01 -8.9117381295750267e-02 + 1.0502348626702009e-01 2.9994770105670349e-01 -2.8968394853189441e-02 + 2.1254715926524614e-01 2.9372405427893655e-01 5.4566622950174615e-02 + 3.7112237222790895e-01 3.1460877128422787e-01 1.4522502047936239e-01 + 5.8336597475561092e-01 3.7545715379660338e-01 2.1825076253070194e-01 + 8.4133466149243308e-01 4.8217091439249199e-01 2.4144393191790411e-01 + 1.1217044060891292e+00 6.2440863348926667e-01 1.8240937376164490e-01 + 1.3927093008234521e+00 7.7981871070137021e-01 2.2659955944730303e-02 + 1.6240927560570448e+00 9.3666447932124641e-01 -2.3930395421622530e-01 + 1.7848976061994557e+00 1.1023471005909748e+00 -5.9744776908545738e-01 + 1.8367537243472565e+00 1.1846584259674144e+00 -6.5010002171940395e-01 + id 12958 + loc 8.9200109243392944e-01 9.6463251113891602e-01 264 + blend 0.0000000000000000e+00 + interp 3.4103160358818163e-01:3.4102819327214579e-01:8.6632145935219718e-01:3.1469062546196508e-01:1.8031601520699581e+00:1.6886300178483715e-01:2.3978540424051955e+00:2.8525334618956205e-01:3.8337811744185659e+00 + CVs 20 + -7.2950775811660418e-01 3.8691047070791135e-01 -2.1168037834947445e-01 + -1.2516580216959536e+00 6.1143362713723026e-01 -2.8615960327080159e-01 + -1.7331922849208821e+00 6.9530176658448484e-01 -2.6286248885607888e-01 + -2.2497970687287436e+00 6.6738400904981732e-01 -1.6410481082051931e-01 + -2.8136043703419920e+00 5.8863544139591417e-01 -1.9459193768872840e-02 + -3.4389741707487680e+00 5.0874359651990475e-01 1.1777779479928707e-01 + -4.1323219861324620e+00 4.2864066883375851e-01 1.7569326768743343e-01 + -4.8741279587121751e+00 3.3761332581905745e-01 9.3143254124049335e-02 + -5.6083002537695643e+00 2.4192927351693472e-01 -1.5473997019334540e-01 + -6.2642301946005503e+00 1.4677703974487644e-01 -5.4300414644439488e-01 + -6.8037979237994497e+00 4.2817540550351030e-02 -1.0083900708051190e+00 + -7.2204799440872209e+00 -8.7359307628775085e-02 -1.4866796573125582e+00 + -7.5102851339065495e+00 -2.6131679081491477e-01 -1.9157057382646341e+00 + -7.6873514562604894e+00 -4.7402856129220972e-01 -2.2593937998733598e+00 + -7.7762817403101998e+00 -6.5403184143181248e-01 -2.5050667528319566e+00 + -7.8025638650207325e+00 -6.9017962555065582e-01 -2.6643432046526652e+00 + -7.7454394930179093e+00 -5.0290146783830503e-01 -2.8436784622396454e+00 + -7.5711914238285898e+00 -3.4870469010216132e-01 -3.1416247188042479e+00 + -7.5425214617983514e+00 -6.1627857293334731e-01 -3.1688620090513693e+00 + id 12959 + loc 9.2558211088180542e-01 4.3089714646339417e-01 377 + blend 0.0000000000000000e+00 + interp 3.9829245167391353e-01:3.7068458926498682e-01:2.5082043012070177e-04:2.9299585953626817e-01:4.4145411822693648e-01:3.9828846874939683e-01:1.0009317282096559e+00:3.9142341862468694e-01:2.9441153803821418e+00:2.5535789793751273e-01:3.1078755200305168e+00 + CVs 20 + 7.8713094422991570e-01 1.8880666228547674e-01 7.3372029130769501e-01 + 1.3592216995046273e+00 2.0662230563511857e-01 1.1842496472150419e+00 + 1.8701456896062667e+00 1.4990106445887297e-01 1.5628671821671001e+00 + 2.3687336551077718e+00 4.8381154211122546e-02 1.9472759159059192e+00 + 2.8452873754393888e+00 -9.9139437557004606e-02 2.3401376790159567e+00 + 3.2970456516789159e+00 -2.8472193184116690e-01 2.7394146418228269e+00 + 3.7323116921826598e+00 -4.9652733630417423e-01 3.1373949491676680e+00 + 4.1613818124698181e+00 -7.2637722047180153e-01 3.5276681593765606e+00 + 4.5864448317519599e+00 -9.7808294895453574e-01 3.9125785652580705e+00 + 4.9988564797280919e+00 -1.2693062587800714e+00 4.2933140997460137e+00 + 5.3736423509288489e+00 -1.6238203079590254e+00 4.6541231038018456e+00 + 5.6914093253445337e+00 -2.0514747998979268e+00 4.9605727155136199e+00 + 5.9553825032421690e+00 -2.5741482588649238e+00 5.1811750330990582e+00 + 6.1850661278651033e+00 -3.2211987431792792e+00 5.2944554235590386e+00 + 6.4178917303599539e+00 -3.9806223345804383e+00 5.3114418602563997e+00 + 6.7039628644269902e+00 -4.7875674037297236e+00 5.2728906886250435e+00 + 7.0838212529721183e+00 -5.5471054244430569e+00 5.2014959030266610e+00 + 7.5376200358917904e+00 -6.1906360261933031e+00 5.0997644952493175e+00 + 7.9544533137092692e+00 -6.7633207541515628e+00 4.9873717878891011e+00 + id 12960 + loc 2.6018467545509338e-01 8.5567712783813477e-01 409 + blend 0.0000000000000000e+00 + interp 3.9299026467344278e-01:3.9298633477079609e-01:9.3188296505414048e-02:3.4459958793206308e-01:1.0733568642440259e+00:3.6114176731723985e-01:1.9978654948386181e+00:3.4113086212371174e-01:2.9564155953842741e+00:3.6061918888660977e-01:3.6325361320881489e+00 + CVs 20 + 5.4105876169335709e-01 1.0272396597449057e-01 -8.3792230968628423e-02 + 9.8993217453291515e-01 1.7663403876447614e-01 -2.0234355305418841e-01 + 1.4297260612170657e+00 2.5411775190154867e-01 -3.0142122671020333e-01 + 1.8817890490060716e+00 3.4277834543329755e-01 -3.6769680870510846e-01 + 2.3413195797895927e+00 4.3584298158835499e-01 -4.0516907627870691e-01 + 2.8058204912994675e+00 5.2591068234520344e-01 -4.1604100276553235e-01 + 3.2745924774174084e+00 6.0264364217650312e-01 -4.0135169045621688e-01 + 3.7483996825874670e+00 6.5123005663237987e-01 -3.6264752950080348e-01 + 4.2264644003487408e+00 6.5614064192969312e-01 -3.0465646899452042e-01 + 4.7029417961037510e+00 6.0482228445179342e-01 -2.3759379103437378e-01 + 5.1667878093519626e+00 4.8767356680999940e-01 -1.7601917997023717e-01 + 5.6035779653162674e+00 2.9868569118109267e-01 -1.3421994698331166e-01 + 6.0027188861652307e+00 4.3668370489615249e-02 -1.2051000110667850e-01 + 6.3590537795005142e+00 -2.6799462308785227e-01 -1.3677301805079489e-01 + 6.6671079988641573e+00 -6.3012576228106987e-01 -1.8144894589448121e-01 + 6.9193712981812840e+00 -1.0399716617703043e+00 -2.4783625270734810e-01 + 7.1087583829969514e+00 -1.4905665488990194e+00 -3.2577803866642119e-01 + 7.2358378376836647e+00 -1.9520346247278355e+00 -4.1443160304816656e-01 + 7.3796665508507449e+00 -2.2999123415556211e+00 -4.9282343037178439e-01 + id 12961 + loc 5.7081258296966553e-01 7.5637429952621460e-01 393 + blend 0.0000000000000000e+00 + interp 3.8951976710394798e-01:3.8881812470862481e-01:3.7844999115467792e-02:2.8432072032862910e-01:9.7618389995392707e-01:3.8951587190627696e-01:1.9560821934210062e+00:2.8914667448206061e-01:2.2893917698657447e+00:3.0033809705872316e-01:2.9979533048547804e+00:3.8578785019428119e-01:3.4581254732559272e+00 + CVs 20 + -3.0513462887389692e-01 2.7564542479452242e-01 -1.4966300131467219e-01 + -6.1323737580267024e-01 5.4519699451878101e-01 -2.5543419678982515e-01 + -9.2457671877386827e-01 8.3101666899874904e-01 -3.4392872053201040e-01 + -1.2376143611997614e+00 1.1324988649848544e+00 -4.2576270598772181e-01 + -1.5630448962295840e+00 1.4370156307482631e+00 -5.0215998274365403e-01 + -1.9100618260910449e+00 1.7290345187373890e+00 -5.7226260868117917e-01 + -2.2787735254512929e+00 1.9927763498978162e+00 -6.3089979446628242e-01 + -2.6740650031212989e+00 2.2117322970619684e+00 -6.7498059492590845e-01 + -3.1349419598130202e+00 2.3668282166590888e+00 -7.1906408225750684e-01 + -3.7078109969773401e+00 2.4363467252996034e+00 -8.0033834174562557e-01 + -4.3592361931272841e+00 2.4128610359275107e+00 -9.5104358993472915e-01 + -5.0006202917717628e+00 2.3062342606047403e+00 -1.1607385823364949e+00 + -5.6011876640379681e+00 2.1152915560311678e+00 -1.4078931845753253e+00 + -6.1810518615450647e+00 1.8208966936933693e+00 -1.7010433103927434e+00 + -6.7129039038428600e+00 1.4527087399143959e+00 -2.0162506474338087e+00 + -7.1545704792467157e+00 1.1386794740831805e+00 -2.2416155984611690e+00 + -7.5188896832486236e+00 9.9056847143729509e-01 -2.3019488687370364e+00 + -7.8742346644205341e+00 9.2848516258539693e-01 -2.2936992998032264e+00 + -8.3924105079434081e+00 6.6853636634776281e-01 -2.3988656995394981e+00 + id 12962 + loc 8.7246984243392944e-01 9.1986191272735596e-01 395 + blend 0.0000000000000000e+00 + interp 5.0798484610636130e-01:3.5186923737277320e-01:5.7533855451038840e-02:4.1283530634574389e-01:9.7528659753306379e-01:3.5467257779256606e-01:1.3593632372848530e+00:3.8208461654886211e-01:2.1765385778284445e+00:5.0797976625790031e-01:2.7616515911271033e+00:4.8936352241781367e-01:3.0042949260568479e+00:3.7635203887941854e-01:3.6924691773650817e+00 + CVs 20 + 4.9215149666427649e-01 2.3356818455976164e-01 -4.0554332597734172e-01 + 8.6399428735621975e-01 3.9186333595671757e-01 -7.2227367806298592e-01 + 1.2160058160682072e+00 5.1881255067862686e-01 -1.0204015070464214e+00 + 1.6053944230017467e+00 6.3714636927644808e-01 -1.3333231567048192e+00 + 2.0350038663132701e+00 7.3622962271721726e-01 -1.6557702325625274e+00 + 2.5005164081341205e+00 8.0393327768636935e-01 -1.9817443249104545e+00 + 2.9949398442060677e+00 8.2967442996535501e-01 -2.3111793000943077e+00 + 3.5079007496029648e+00 8.0254409122432624e-01 -2.6453786867203761e+00 + 4.0262126487387606e+00 7.0880493630167196e-01 -2.9826659116810856e+00 + 4.5331411048379184e+00 5.3234515572194718e-01 -3.3202011118403405e+00 + 5.0033004893302113e+00 2.6471944133753800e-01 -3.6554315773829633e+00 + 5.4075922151671900e+00 -8.3085861036578557e-02 -3.9776530135030668e+00 + 5.7297571687861826e+00 -4.8133104729142984e-01 -4.2701127835088837e+00 + 5.9713229271635209e+00 -8.9789712975920555e-01 -4.5247403185875807e+00 + 6.1421722348929828e+00 -1.3083767058204319e+00 -4.7456319187299982e+00 + 6.2540422137804708e+00 -1.6946571313609518e+00 -4.9400453325704294e+00 + 6.3200828071581583e+00 -2.0422381945322012e+00 -5.1134292991054107e+00 + 6.3548070050994445e+00 -2.3424652739697223e+00 -5.2722429475690546e+00 + 6.3618172930413950e+00 -2.5577533000705195e+00 -5.3977081765989130e+00 + id 12963 + loc 1.1819081753492355e-01 9.0291544795036316e-02 417 + blend 0.0000000000000000e+00 + interp 2.4738972600733264e-01:1.9660843095567629e-01:2.2768815342866389e-01:2.3631871981235539e-01:1.0412369292844796e+00:1.8696059273551729e-01:1.6364370267183976e+00:1.9136492060554536e-01:1.9989500845228898e+00:1.8762669128899423e-01:2.7160253246049568e+00:2.4738725211007256e-01:3.3069745147489575e+00 + CVs 20 + -2.2337653432614449e-01 -6.5634821286582462e-02 2.0941214923232254e-01 + -3.5635485581451681e-01 -1.6964707071528815e-01 3.3802782196465686e-01 + -4.4553179583424996e-01 -2.9079868513566187e-01 4.4882797943405955e-01 + -5.3869293529348217e-01 -4.0740153794972400e-01 5.6659884002677563e-01 + -6.3365623468584631e-01 -5.1735637626736541e-01 6.8816789076599738e-01 + -7.2643704217260918e-01 -6.1901782860112375e-01 8.0862320680781585e-01 + -8.1226119660025820e-01 -7.1149148646997240e-01 9.2310146401524118e-01 + -8.8657429704460244e-01 -7.9467749544962452e-01 1.0281241641350813e+00 + -9.4404215077423137e-01 -8.6852752883341355e-01 1.1219584836698548e+00 + -9.7597992082355600e-01 -9.3079144942118386e-01 1.2028015238336043e+00 + -9.7543703747303578e-01 -9.7686340941086969e-01 1.2705235605556013e+00 + -9.4954765366747518e-01 -1.0055654620791215e+00 1.3318006390707735e+00 + -9.1852324587569345e-01 -1.0236661075069593e+00 1.3962118545411029e+00 + -8.9941703779175342e-01 -1.0404082702537467e+00 1.4665855445574627e+00 + -8.9816799391826829e-01 -1.0601688429557641e+00 1.5364229038791410e+00 + -9.1473662638859565e-01 -1.0837216232364713e+00 1.5967412203451388e+00 + -9.4788661127149887e-01 -1.1122501157352211e+00 1.6455933425052889e+00 + -9.9620741211921837e-01 -1.1483794713898541e+00 1.6882735401634246e+00 + -1.1156658349320752e+00 -1.2578225595465800e+00 1.6913230212881420e+00 + id 12964 + loc 1.8031007051467896e-01 2.5529992580413818e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3801302629879346e-01:3.6349321625217029e-01:3.1190661756253502e-01:3.6768838480258687e-01:9.8437494155437777e-01:4.3800864616853047e-01:1.2855980293371658e+00:3.2413578919073338e-01:1.9921454168438379e+00:3.3278847980794890e-01:2.9852994622100595e+00:3.7399905050575227e-01:3.9167972705792842e+00 + CVs 20 + -2.7822998793205816e-01 1.7123075029520116e-01 -1.5574135944293507e-02 + -5.3723791149289235e-01 3.7073444293217633e-01 -1.0590723946920039e-02 + -7.8076372764200874e-01 6.0377839841268899e-01 6.7135863934126294e-03 + -1.0155434715375937e+00 8.6961370113764724e-01 1.7598985754935181e-02 + -1.2559593011263628e+00 1.1515041657028140e+00 -1.4204460414194098e-02 + -1.5158267528619367e+00 1.4176618175786428e+00 -1.2116191609353943e-01 + -1.8024895341446621e+00 1.6311578298147693e+00 -3.2037828159835369e-01 + -2.0967754858680214e+00 1.7440121683458094e+00 -6.2577779588971960e-01 + -2.3228570318055257e+00 1.7179859175908663e+00 -1.0198284317572197e+00 + -2.4096475341931414e+00 1.5731552364631523e+00 -1.4331253843043585e+00 + -2.3647495709915778e+00 1.3580271133209978e+00 -1.8187829702722946e+00 + -2.2172100385017095e+00 1.0987679270742898e+00 -2.1668648936237171e+00 + -1.9787480301082601e+00 8.2754762688868155e-01 -2.4542710111695416e+00 + -1.6862633416609034e+00 6.0353420416324455e-01 -2.6685619236584945e+00 + -1.4025966027280097e+00 4.5629183231691939e-01 -2.8605427278612829e+00 + -1.1836164358004608e+00 4.1035767936697387e-01 -3.0749937851731737e+00 + -1.0867749460132916e+00 5.2867648567477532e-01 -3.2500179719115159e+00 + -1.0562979208951924e+00 7.2828609816645329e-01 -3.3437850348012241e+00 + -9.4015146642135994e-01 8.7027556118056082e-01 -3.6999649983864127e+00 + id 12965 + loc 6.7201471328735352e-01 5.3302222490310669e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8948295468046793e-01:3.3731909622709033e-01:1.7875860438306768e-01:3.2941714219080087e-01:1.2482665583531558e+00:4.6331032999453731e-01:1.9983648905729468e+00:3.4019088764198541e-01:2.5558054602196583e+00:4.8947805985092113e-01:3.0000563363432833e+00:3.8601118776802429e-01:3.5965820752736315e+00 + CVs 20 + 2.0945581022738086e-01 3.3389900607737344e-01 -1.5746213184610988e-01 + 4.1265276788943811e-01 6.6037130114200737e-01 -3.4406141100177040e-01 + 6.0930265655650384e-01 9.5896348373420648e-01 -5.7765522686400927e-01 + 7.9581620033260636e-01 1.2070209491756514e+00 -8.6706462486603653e-01 + 9.6305288039783055e-01 1.3822515478464712e+00 -1.2107290874239518e+00 + 1.0941698520916208e+00 1.4652860019634555e+00 -1.5953397508544545e+00 + 1.1650215858724353e+00 1.4437024949596784e+00 -1.9942762004152441e+00 + 1.1482540006402391e+00 1.3170033119652069e+00 -2.3650574398213067e+00 + 1.0304078844859497e+00 1.1040057377114576e+00 -2.6550825585121323e+00 + 8.2666913580923340e-01 8.4219310079993115e-01 -2.8221865710584710e+00 + 5.7832320022162409e-01 5.7145067520897719e-01 -2.8583109535591196e+00 + 3.3540667207021579e-01 3.0182532085592473e-01 -2.8188368476258239e+00 + 1.1519786515747728e-01 4.2658819156915495e-03 -2.8034985011309184e+00 + -1.0339788421609714e-01 -3.3411276193454098e-01 -2.9372431246162991e+00 + -3.3547601961568618e-01 -6.2296512053818920e-01 -3.3986823834413813e+00 + -5.0626056493762228e-01 -5.6799686506385338e-01 -4.2101405594637544e+00 + -4.6334216146204343e-01 1.1662075489116308e-01 -5.0186999941874078e+00 + -9.7844100823089503e-02 1.4263998426021041e+00 -5.1121194616265804e+00 + -1.1479423771198685e-01 1.6006099612012001e+00 -5.2299508094468345e+00 + id 12966 + loc 2.6548117399215698e-01 9.5585697889328003e-01 406 + blend 0.0000000000000000e+00 + interp 5.9005248059166489e+00:2.7563575423534353e-01:1.4988080578992780e-01:4.6263974666093227e-01:9.4665055641588991e-01:5.0734320355823270e-01:1.2740017485636197e+00:9.2732674598872400e-01:1.3447464620467586e+00:5.9005148059166492e+00:3.0744409168123292e+00:5.6796700352198402e+00:3.0869040599948598e+00:4.9057321726949592e+00:3.1308598763286399e+00:2.3999844952179448e+00:3.3516959234287471e+00:1.8058418270069450e+00:3.4206760821273789e+00:5.1050267869702148e-01:3.8661723018533092e+00 + CVs 20 + 3.7067181269141775e-01 3.1654341774911610e-01 -1.9943593675117105e-01 + 5.5093320569223048e-01 5.3921206729124305e-01 -3.8511343296528316e-01 + 6.6748444397546258e-01 6.8619037697093821e-01 -5.4518543155472887e-01 + 7.8001776280678192e-01 8.1909906904347318e-01 -6.9716382161110413e-01 + 8.8569269803136552e-01 9.3679480368969437e-01 -8.3690960648079160e-01 + 9.8510008829845774e-01 1.0348783599420792e+00 -9.5993165066826314e-01 + 1.0827673396785751e+00 1.1059984798156779e+00 -1.0613644221763798e+00 + 1.1869321705712856e+00 1.1354892565970063e+00 -1.1328074003516755e+00 + 1.3038102417842554e+00 1.0936521604699427e+00 -1.1539854662572846e+00 + 1.4024982782541637e+00 9.3768314172713785e-01 -1.0845646633282786e+00 + 1.3873405175709805e+00 7.0970998272900576e-01 -9.3117238830459659e-01 + 1.2943570195255227e+00 5.4542080255893266e-01 -8.0426565941103068e-01 + 1.2317065673229710e+00 4.4661902132864811e-01 -7.2810843019917670e-01 + 1.2233124404004918e+00 3.7628099823474714e-01 -6.6833233894937094e-01 + 1.2763720394152658e+00 3.2365420016263624e-01 -5.9616228356204060e-01 + 1.3908667041882150e+00 2.9617416968327026e-01 -4.9857307971751808e-01 + 1.5444549783606978e+00 3.0872227992486828e-01 -3.8527200476093526e-01 + 1.7028717986972157e+00 3.6512026037916251e-01 -2.7444083361462379e-01 + 1.7830917543524609e+00 3.9012426455279692e-01 -1.8246856319208957e-01 + id 12967 + loc 8.7678563594818115e-01 5.5153548717498779e-01 373 + blend 0.0000000000000000e+00 + interp 5.4228407599249240e-01:3.9810015839145541e-01:5.1818964283301128e-03:4.0445787189525412e-01:5.0832840294746329e-01:4.1679613892975276e-01:1.1011288603315519e+00:4.2405113401430622e-01:1.9179682011276729e+00:5.4227865315173251e-01:2.0504850784864073e+00:4.8543576854258497e-01:2.9845616342630219e+00:4.5893706394787309e-01:3.5936159933832945e+00 + CVs 20 + -3.1115538307162754e-01 3.5220088621824958e-01 -1.7246758438241533e-01 + -6.2151298424798362e-01 6.7209674533529307e-01 -3.3308595997427776e-01 + -9.4637256096287081e-01 9.7012919475928150e-01 -4.9061642109773651e-01 + -1.2766964478445426e+00 1.2684739898711577e+00 -6.5176069968953843e-01 + -1.5899464762375037e+00 1.5788837038259995e+00 -8.3074136523800901e-01 + -1.8695650787840932e+00 1.8905182318436997e+00 -1.0566279908995067e+00 + -2.1014580652894725e+00 2.1771596819512609e+00 -1.3558787326779420e+00 + -2.2724570901043002e+00 2.4151951704328822e+00 -1.7302632915045022e+00 + -2.3733679405740018e+00 2.5918642913596690e+00 -2.1605243521261763e+00 + -2.3999565836724353e+00 2.7039369337623809e+00 -2.6210640237507397e+00 + -2.3520712881126657e+00 2.7511440453929890e+00 -3.0895738532150627e+00 + -2.2348697095735974e+00 2.7266393694609201e+00 -3.5475303393372037e+00 + -2.0677687652643968e+00 2.6243845264169954e+00 -3.9681862549453184e+00 + -1.8841413560862543e+00 2.4628241128298671e+00 -4.3294049925005558e+00 + -1.7103597507233050e+00 2.2740316167317212e+00 -4.6358840648410542e+00 + -1.5603978375332974e+00 2.0680180720933810e+00 -4.9171199936161916e+00 + -1.4575341848473449e+00 1.8316426107803865e+00 -5.2109545763752658e+00 + -1.4540205696679003e+00 1.5720043713477356e+00 -5.5423422679741821e+00 + -1.5160318487081506e+00 1.4696747016357969e+00 -5.7676880802973889e+00 + id 12968 + loc 1.0759997367858887e-01 6.8623781204223633e-02 399 + blend 0.0000000000000000e+00 + interp 4.8036893401489589e-01:4.2955766635852111e-01:3.8189325025497656e-01:3.4056471888172729e-01:1.0007963368163282e+00:3.7319971249779299e-01:1.7168095175052751e+00:3.3023368524260671e-01:2.1367110190310541e+00:4.5058970843032825e-01:2.8219190564845373e+00:4.8036413032555575e-01:3.2059501746386769e+00:4.5091003635348720e-01:3.9231079407858132e+00 + CVs 20 + -1.0275431629679491e-01 3.8384018082814642e-01 1.2786000518216820e-01 + -2.1524188638173830e-01 7.6180526807838667e-01 2.6471225225402240e-01 + -3.2999530123747245e-01 1.1278422546956526e+00 3.8876639537849822e-01 + -4.3831219912021657e-01 1.4793247234021925e+00 5.0632718186008285e-01 + -5.3237925221973648e-01 1.8125740461050810e+00 6.3096250087334416e-01 + -6.0797575879065990e-01 2.1241247716519434e+00 7.6831619960202790e-01 + -6.6584853700747504e-01 2.4169422350807368e+00 9.1791171814545702e-01 + -7.0855025288917373e-01 2.7024266811558202e+00 1.0818824463702210e+00 + -7.3096863616538466e-01 2.9821290780413148e+00 1.2819820676884963e+00 + -7.1899731018580371e-01 3.2261836731447366e+00 1.5516957812004959e+00 + -6.8110474240930829e-01 3.4132095018615449e+00 1.8985771490777648e+00 + -6.6108678771452245e-01 3.5625780884957678e+00 2.3014023445901168e+00 + -6.9028124862958284e-01 3.6856804032629480e+00 2.7379519529860983e+00 + -7.5558579948985227e-01 3.7457802584524140e+00 3.1985531769935549e+00 + -8.4673257892063292e-01 3.7075203915504975e+00 3.6401770101310333e+00 + -1.0068202325827627e+00 3.6009067318899728e+00 3.9543212043231475e+00 + -1.2854408343394550e+00 3.4690217902940832e+00 4.0626694679276696e+00 + -1.6199528352681285e+00 3.2508158717402784e+00 4.0905642424794717e+00 + -1.7021474838648867e+00 2.8782752982708244e+00 4.3239553266464519e+00 + id 12969 + loc 4.6335458755493164e-02 4.9495476484298706e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7717985817547892e-01:3.5585494628638858e-01:7.5938023389431408e-01:4.7717508637689721e-01:1.0016728825353614e+00:4.5314570598395199e-01:1.4305660398320417e+00:2.0174709891187931e-01:2.0541490549318331e+00:3.8201345728405189e-01:3.0881222890760371e+00:3.5092589092111498e-01:3.9433391272337852e+00 + CVs 20 + -2.1401632115727767e-01 3.6765473413729155e-01 -3.6656152558418231e-01 + -4.1719929734652123e-01 7.2532353410753148e-01 -7.1507128304611811e-01 + -6.3697993413162490e-01 1.0662259317284182e+00 -1.0617640247399021e+00 + -9.0046568321509524e-01 1.3896783034312703e+00 -1.4055454985244289e+00 + -1.2306763392262607e+00 1.6885407773763985e+00 -1.7355868285150196e+00 + -1.6446791326244148e+00 1.9478835709716891e+00 -2.0354181923471897e+00 + -2.1449541561241268e+00 2.1433928654837926e+00 -2.2831915042284292e+00 + -2.7124325363938464e+00 2.2450564349495128e+00 -2.4554725635947454e+00 + -3.3045410888398798e+00 2.2288520282490798e+00 -2.5367040858724677e+00 + -3.8640229033132187e+00 2.0865846009339588e+00 -2.5271903810130518e+00 + -4.3345236506044946e+00 1.8329543080431929e+00 -2.4442625430631999e+00 + -4.6790777980590024e+00 1.5070766609291031e+00 -2.3239106031390828e+00 + -4.8946129408650734e+00 1.1557596150075029e+00 -2.2024955364413676e+00 + -4.9984372828090837e+00 8.1405139183710573e-01 -2.1016819861863976e+00 + -5.0097756998019864e+00 5.0499100431121979e-01 -2.0268177087730623e+00 + -4.9431781898282168e+00 2.4940340422494733e-01 -1.9694916661914701e+00 + -4.8230977739931209e+00 6.9106036424120720e-02 -1.9188671393771723e+00 + -4.6921288953957063e+00 -4.8439235314652107e-02 -1.8750265288869705e+00 + -4.5755939010223488e+00 -2.3722212350974303e-01 -1.8636690641289042e+00 + id 12970 + loc 4.2406544089317322e-01 8.1723439693450928e-01 400 + blend 0.0000000000000000e+00 + interp 3.3324784612406472e-01:2.5854691424118903e-01:1.0719297428715739e+00:2.5958058505937953e-01:1.9847279861561833e+00:3.3324451364560348e-01:2.6257206536441688e+00:3.1312376444762552e-01:3.0372961847218094e+00:2.4545813171948994e-01:3.9578934182053112e+00 + CVs 20 + -2.2611159646935330e-01 2.4802564713565867e-01 -3.3542962568898230e-02 + -4.6610278487731804e-01 5.0771396178640948e-01 -6.8134649053341101e-02 + -7.0537442354629964e-01 7.8837143578099655e-01 -1.3796576846964043e-01 + -9.2580087611366613e-01 1.0755953737814217e+00 -2.5721285003288769e-01 + -1.1290847560082260e+00 1.3555110720285048e+00 -4.2510049468130695e-01 + -1.3207551896670118e+00 1.6195272440332020e+00 -6.3998865796498439e-01 + -1.5015518642459329e+00 1.8644758794417002e+00 -9.0100723431333196e-01 + -1.6690028493060591e+00 2.0873394149794779e+00 -1.2084491254423917e+00 + -1.8192608650627202e+00 2.2806752681304792e+00 -1.5628368555215688e+00 + -1.9450496846741558e+00 2.4349894037127497e+00 -1.9602201267337769e+00 + -2.0270021041060411e+00 2.5406475558337416e+00 -2.3812628473454196e+00 + -2.0423045833092770e+00 2.5968361964204618e+00 -2.7913161726538118e+00 + -1.9892355885990036e+00 2.6210882235209514e+00 -3.1706379639551519e+00 + -1.8861546679554713e+00 2.6422399248371855e+00 -3.5317680545202164e+00 + -1.7510342456932424e+00 2.6722562124322278e+00 -3.8969443750461146e+00 + -1.6036436261289475e+00 2.6751871294780400e+00 -4.2652448627962238e+00 + -1.4746463401442578e+00 2.6037042182780166e+00 -4.6062287997929072e+00 + -1.4094209029619382e+00 2.4554039644971146e+00 -4.8991729948751299e+00 + -1.6511682415870739e+00 2.2075497766656298e+00 -5.0811249818919508e+00 + id 12971 + loc 8.3352190256118774e-01 7.1608382463455200e-01 1081 + blend 0.0000000000000000e+00 + interp 3.7857969185184231e-01:3.3442612428585439e-01:6.7198426141954815e-02:3.2112309495217922e-01:8.9321702109857148e-01:3.5053510828956691e-01:1.3390063105378944e+00:3.4099973362761571e-01:2.1351869167965907e+00:3.7857590605492381e-01:2.8591602952299713e+00:2.9027158032566719e-01:3.3209962357966694e+00 + CVs 20 + 1.3403511741649682e-01 5.4852456871455191e-01 3.5219536645119665e-01 + 3.0404575972018433e-01 9.6508105368492125e-01 5.4585874908066312e-01 + 4.8838628445536608e-01 1.3251976151806377e+00 6.8962771535371292e-01 + 6.7971602866893133e-01 1.6500539917010695e+00 8.1627537723715027e-01 + 8.7681778242270325e-01 1.9325547895676374e+00 9.1506541947711906e-01 + 1.0737935226737854e+00 2.1590283723998862e+00 9.6832014274150935e-01 + 1.2579295872685088e+00 2.3076243198469126e+00 9.5971971182052984e-01 + 1.4059864223269298e+00 2.3513613423153266e+00 8.9086438712297367e-01 + 1.4824787387952088e+00 2.2694657575265409e+00 7.9982107743728803e-01 + 1.4721084159072932e+00 2.0960598798632168e+00 7.5839738047457095e-01 + 1.4294747254754199e+00 1.9199584009797577e+00 7.8119225862790675e-01 + 1.4132403450421369e+00 1.7672255509237309e+00 8.0685735561370020e-01 + 1.4340597327316997e+00 1.6087280262225452e+00 7.9872243074234128e-01 + 1.4860079578373069e+00 1.4227904215441489e+00 7.5983958973726495e-01 + 1.5638929013864793e+00 1.2104073897224934e+00 7.1994632713031359e-01 + 1.6588889827276772e+00 1.0047325176344089e+00 7.4568581234805709e-01 + 1.7598424772072445e+00 8.7418916609835695e-01 8.9377576012413107e-01 + 1.8689266199052339e+00 7.9121337081558751e-01 1.0737739894104799e+00 + 1.9959173133638048e+00 4.2407830760897453e-01 1.0993776336862675e+00 + id 12972 + loc 1.3719019293785095e-01 1.7417614161968231e-01 411 + blend 0.0000000000000000e+00 + interp 3.2988339245239939e-01:2.8966184577162174e-01:5.8332004087948586e-01:3.2988009361847487e-01:1.2316045239035909e+00:3.2464078931982354e-01:2.0004741695443542e+00:2.8680433517589260e-01:2.8353029882203655e+00:3.2128626946527467e-01:3.9482017725174536e+00 + CVs 20 + -2.3960661404441058e-01 2.5971407910034278e-01 -6.7326866454870238e-01 + -4.3944545869759921e-01 4.1375062653722494e-01 -1.1875475735900549e+00 + -6.2707460765023249e-01 5.2667881501295977e-01 -1.6935023113202425e+00 + -8.1821344575199439e-01 6.0562231252069831e-01 -2.2365721188677288e+00 + -1.0306004433078539e+00 6.2049111762966547e-01 -2.7849916200022684e+00 + -1.2803979244641965e+00 5.5040940002537442e-01 -3.3000300991482838e+00 + -1.5706420096163605e+00 3.9134122082565548e-01 -3.7495109765336956e+00 + -1.8924526291605701e+00 1.4981367789737199e-01 -4.1174482418045208e+00 + -2.2246889495497060e+00 -1.6434233747439531e-01 -4.4043918445953585e+00 + -2.5337192728846816e+00 -5.4235603236622354e-01 -4.6210961957464072e+00 + -2.7850424435045609e+00 -9.9365674101108237e-01 -4.7821351402139269e+00 + -2.9779201885512250e+00 -1.5515215617695979e+00 -4.9119731205255075e+00 + -3.1604020771250951e+00 -2.2441556965408411e+00 -5.0428532740289622e+00 + -3.4123706759211538e+00 -3.0469717713393067e+00 -5.2087758910585578e+00 + -3.7951597255414362e+00 -3.8809512620658571e+00 -5.4406207652234198e+00 + -4.2877534296679460e+00 -4.6489223495183767e+00 -5.7569192125584223e+00 + -4.7997736641758033e+00 -5.3042343639405640e+00 -6.1538699598087234e+00 + -5.2728185488223849e+00 -5.8641900402562017e+00 -6.5983981245305996e+00 + -5.7456297197891892e+00 -6.3887689956229705e+00 -7.0214032283880767e+00 + id 12973 + loc 4.3021064996719360e-01 1.6407309472560883e-01 409 + blend 0.0000000000000000e+00 + interp 4.7489483436906793e-01:3.5271455004669072e-01:2.6399394811761345e-02:3.2842197010716329e-01:7.7922889405848395e-01:3.2711497470811185e-01:1.5111924274133783e+00:4.7489008542072425e-01:2.0175406448573945e+00:3.6985140919883475e-01:2.5048101066705031e+00:3.4073943079944341e-01:3.1507226220886597e+00 + CVs 20 + -1.8918610894181143e-01 1.8725692484898249e-01 -3.1313296412524655e-01 + -3.6411726733865374e-01 3.4415367391687945e-01 -5.8388539789347793e-01 + -5.2072927901171551e-01 4.9144637657139034e-01 -8.4920998249340340e-01 + -6.5695917927876057e-01 6.3736016657871475e-01 -1.1208248689047897e+00 + -7.7511166037974177e-01 7.7817595649557869e-01 -1.3979965069262783e+00 + -8.7749871706092963e-01 9.1210258522137799e-01 -1.6821276669136722e+00 + -9.6453857385480890e-01 1.0431061917516584e+00 -1.9787203804749005e+00 + -1.0351686169637593e+00 1.1742492859459990e+00 -2.2980603226917706e+00 + -1.0866513828074822e+00 1.2962779817076011e+00 -2.6501006013269870e+00 + -1.1170040830231585e+00 1.3913806703468923e+00 -3.0384995509498411e+00 + -1.1267794602444687e+00 1.4436428721693895e+00 -3.4614514447997258e+00 + -1.1187098473928743e+00 1.4385699094779159e+00 -3.9137402349807822e+00 + -1.0973445455644264e+00 1.3594683618126377e+00 -4.3834170851180421e+00 + -1.0653856524323402e+00 1.1922840059686022e+00 -4.8501008882904699e+00 + -1.0186412033468861e+00 9.3276144078249867e-01 -5.2899998768795200e+00 + -9.4848387312135929e-01 5.8586112482835961e-01 -5.6777367228941547e+00 + -8.5435129407934851e-01 1.6449247003294065e-01 -5.9822641223850486e+00 + -7.5089916075652419e-01 -3.0766248706067234e-01 -6.1769943692365370e+00 + -6.5805498723955258e-01 -8.0087783188652750e-01 -6.2691134304516929e+00 + id 12974 + loc 8.0437231063842773e-01 2.5245901942253113e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5699393243216635e-01:4.4998985646153544e-01:2.0004525290668396e-01:3.2634517160399917e-01:9.5263042001451292e-01:3.0957647726294640e-01:1.7736787873976041e+00:4.5698936249284206e-01:2.5366371213670389e+00:3.1130482288407402e-01:3.0037945183270103e+00:3.3096061352887246e-01:3.8514675350522345e+00 + CVs 20 + -1.4155963669869259e-01 3.3406112034825697e-01 -2.6050691662147102e-01 + -2.7205058897433670e-01 5.6082855340707227e-01 -3.9480492006761814e-01 + -4.0641843932419414e-01 7.5193604975398420e-01 -4.9252540326080985e-01 + -5.4149373813644130e-01 9.2403921520519539e-01 -5.9868474239811520e-01 + -6.7069888759078866e-01 1.0712955703403653e+00 -7.0929569425780037e-01 + -7.8041650210237612e-01 1.1889235549560015e+00 -8.2352109894471615e-01 + -8.5262853135007211e-01 1.2799815568550614e+00 -9.4457819402558085e-01 + -8.7631848296365289e-01 1.3627009117329674e+00 -1.0814422510892512e+00 + -8.6215637872118678e-01 1.4691371234379775e+00 -1.2451231002521652e+00 + -8.5229043278264149e-01 1.6235899028994785e+00 -1.4292172996975110e+00 + -8.9408103752803492e-01 1.8110265812858346e+00 -1.5989338457513511e+00 + -9.9866096964954632e-01 1.9903102996666788e+00 -1.7202857971735614e+00 + -1.1469518331255237e+00 2.1345034325449586e+00 -1.7805572961530671e+00 + -1.3146992044536492e+00 2.2420787541683058e+00 -1.7779980594252665e+00 + -1.4802899524344186e+00 2.3362250491057823e+00 -1.7038494005392673e+00 + -1.6284932595511830e+00 2.4818299230169765e+00 -1.5119678863815522e+00 + -1.7803679219552215e+00 2.7263597700258151e+00 -1.0837983697324334e+00 + -2.0094075095677435e+00 2.8717573131981240e+00 -4.5086435805265412e-01 + -2.1504359186224051e+00 2.7029366120844580e+00 -4.6464532377204848e-01 + id 12975 + loc 1.8042653799057007e-01 1.0249727964401245e-01 403 + blend 0.0000000000000000e+00 + interp 4.2736114612484566e-01:3.5530606695221367e-01:5.9152829151436348e-01:3.2121817133545533e-01:1.1307429270604643e+00:3.5885603155572149e-01:1.9200205047814269e+00:4.2735687251338444e-01:2.7187470971217405e+00:3.9267657456052529e-01:3.0207860850594912e+00:3.5796483229357123e-01:3.6306380969172194e+00 + CVs 20 + -2.2204785880624886e-01 3.1628979614470237e-01 8.2043687814106370e-02 + -4.2405127440453344e-01 6.4407633760195049e-01 1.5173179368120152e-01 + -6.2485354365709822e-01 9.7097744653482632e-01 2.3975323361925122e-01 + -8.3089211194870338e-01 1.2841382067123219e+00 3.6187682037410362e-01 + -1.0408429121303095e+00 1.5726658305853576e+00 5.3043868782680148e-01 + -1.2447644329826404e+00 1.8232529219392630e+00 7.5538248922487294e-01 + -1.4296687179658509e+00 2.0213038570991362e+00 1.0380695925249572e+00 + -1.5844916631570067e+00 2.1523436833500198e+00 1.3692491727951199e+00 + -1.7009006026415492e+00 2.2046566600441619e+00 1.7284729115616519e+00 + -1.7760679962325137e+00 2.1739289368855594e+00 2.0886381551954791e+00 + -1.8137188736566017e+00 2.0641488465078841e+00 2.4269523647609512e+00 + -1.8202675852203463e+00 1.8841955581094414e+00 2.7261908713571970e+00 + -1.8044607857262431e+00 1.6450094873109766e+00 2.9747962327397213e+00 + -1.7790300543973805e+00 1.3602080622059471e+00 3.1685189280118413e+00 + -1.7535261801177622e+00 1.0443388338661799e+00 3.3058261957862349e+00 + -1.7219935824566555e+00 6.9684546090705068e-01 3.3890796087269646e+00 + -1.6666705027263444e+00 2.8606855078627258e-01 3.4518283187919105e+00 + -1.5993488741037414e+00 -1.9514724483464385e-01 3.5747599319377481e+00 + -1.6035058158788980e+00 -5.8899440188968333e-01 3.7136905250076238e+00 + id 12976 + loc 7.8473609685897827e-01 7.1778959035873413e-01 377 + blend 0.0000000000000000e+00 + interp 4.1457209872718509e-01:3.7003269692188373e-01:4.2374320688331690e-02:3.8294037248474772e-01:9.1349838033954167e-01:3.7535704028709382e-01:1.5878905423490641e+00:4.1456795300619786e-01:2.0888245759250843e+00:3.5462803715366409e-01:2.9156884539221508e+00:4.1147508811223893e-01:3.3910149313286766e+00 + CVs 20 + -6.4965880026749356e-01 1.8095651043131589e-01 -7.0590618972133889e-01 + -1.1182110243823742e+00 2.0716464587504807e-01 -1.2041604211015193e+00 + -1.5408853818849531e+00 1.7477689253663864e-01 -1.6704523666839410e+00 + -1.9586942945295882e+00 1.2569593707161775e-01 -2.1719580342085725e+00 + -2.3655497056729997e+00 7.3337288217722785e-02 -2.7072067336474714e+00 + -2.7636083194612313e+00 2.8219222891062712e-02 -3.2687684993938122e+00 + -3.1669011032892098e+00 -1.2144167171719067e-02 -3.8501773886411810e+00 + -3.5860877769038688e+00 -6.8423160462716792e-02 -4.4490896826517936e+00 + -4.0240592371307411e+00 -1.7884467085743028e-01 -5.0669349144294262e+00 + -4.4775023568436527e+00 -3.9106014173483761e-01 -5.6935162796137444e+00 + -4.9294981601422760e+00 -7.4714851113417646e-01 -6.2924280098056311e+00 + -5.3472969161164219e+00 -1.2668451695851126e+00 -6.8092891461395766e+00 + -5.6963434535630224e+00 -1.9191746129534479e+00 -7.1939178074953416e+00 + -5.9694352250849576e+00 -2.5986550512078148e+00 -7.4367530775306534e+00 + -6.1965713236457169e+00 -3.1926736580066577e+00 -7.5799524619371592e+00 + -6.4115387601122809e+00 -3.6721549667045368e+00 -7.6679608410522118e+00 + -6.6355639452463162e+00 -4.0707860293448981e+00 -7.7244227277432094e+00 + -6.8682733163522389e+00 -4.4084306446542350e+00 -7.7639640438319573e+00 + -7.0937651872434921e+00 -4.6639870050782939e+00 -7.7907412450966929e+00 + id 12977 + loc 3.2182404398918152e-01 8.8365846872329712e-01 382 + blend 0.0000000000000000e+00 + interp 4.5363723054218930e-01:4.2705060038386694e-01:1.9540130209743367e-01:2.7123109611208235e-01:1.1194120809837287e+00:3.8662256921849714e-01:1.9486586771053682e+00:4.5363269416988389e-01:2.8640452925149784e+00:3.6911238483385855e-01:3.3205412968446235e+00:3.0589819059405732e-01:3.9257951898662795e+00 + CVs 20 + 1.0163672182467829e+00 1.5675668448057650e-01 -5.0335313765340328e-01 + 1.7067822768059235e+00 1.4428393017154595e-01 -8.8601881860533938e-01 + 2.3138483221726496e+00 5.8599996004520871e-02 -1.2400235782025293e+00 + 2.9453312157400289e+00 -5.8125054974749846e-02 -1.5997768065126343e+00 + 3.5845573848619203e+00 -2.0212780796400376e-01 -1.9559939304360661e+00 + 4.2152957112816969e+00 -3.6784188062542522e-01 -2.3073190510902624e+00 + 4.8218303839271801e+00 -5.5262524134701618e-01 -2.6585060639607416e+00 + 5.3891407888298932e+00 -7.6247928216696359e-01 -3.0126032498480084e+00 + 5.9055787646583244e+00 -1.0130540316744987e+00 -3.3697254502795175e+00 + 6.3620470530808193e+00 -1.3254869271435417e+00 -3.7321428349288723e+00 + 6.7451796458364921e+00 -1.7177062857034140e+00 -4.1014150508380132e+00 + 7.0366388591817710e+00 -2.1947389347954340e+00 -4.4700966387421772e+00 + 7.2222961445907377e+00 -2.7490893757469452e+00 -4.8224902297072596e+00 + 7.2961667297637653e+00 -3.3670200020321532e+00 -5.1413908769515082e+00 + 7.2579477426910035e+00 -4.0269244528143799e+00 -5.4099798896042337e+00 + 7.1144992044257140e+00 -4.6945422271928132e+00 -5.6074030531485874e+00 + 6.8853749266980131e+00 -5.3324554281758640e+00 -5.7112072174395356e+00 + 6.6052937765697948e+00 -5.9087529518341295e+00 -5.7123672554704816e+00 + 6.3751670737021833e+00 -6.4723213630216421e+00 -5.7329231963348644e+00 + id 12978 + loc 6.0800719261169434e-01 6.9574403762817383e-01 264 + blend 0.0000000000000000e+00 + interp 9.5059434737677873e-01:5.4140887822697092e-01:9.9327748512846403e-01:2.6109707988921921e-01:1.5562005776725316e+00:2.8195626389700956e-01:2.6038241726770046e+00:9.5058484143330502e-01:2.9791911543419722e+00:7.1598527957890079e-01:3.0091454122076726e+00:4.7387703483771987e-01:3.0115027909872092e+00 + CVs 20 + -8.4182870402719145e-01 4.1875799986169571e-01 -1.8506227220278673e-01 + -1.4640954934404922e+00 6.5661237794522931e-01 -2.1500582961406381e-01 + -2.0359441848904156e+00 7.5800879334650528e-01 -1.3085541150638663e-01 + -2.6265963115946933e+00 7.8979387430028258e-01 2.7292720657522085e-02 + -3.2437328782937009e+00 8.1982929875264210e-01 2.0694408949061172e-01 + -3.9057835177438651e+00 8.7613593182119520e-01 3.4321914503445916e-01 + -4.6123113836865954e+00 9.3864390942376619e-01 3.6612128291365664e-01 + -5.3295991017814437e+00 9.7637771669519513e-01 2.2818661836770016e-01 + -6.0141479524004877e+00 9.7040693482486406e-01 -8.2856231743847264e-02 + -6.6328806838834451e+00 9.0226994344297484e-01 -5.5024571129000743e-01 + -7.1666437297113985e+00 7.4297099624628893e-01 -1.1237381556786472e+00 + -7.5936022899128739e+00 4.6824074142230954e-01 -1.7275319975377688e+00 + -7.8845722445811157e+00 5.9251282578907993e-02 -2.2775228244631576e+00 + -8.0196790983600152e+00 -4.6623091670303562e-01 -2.7060700471407397e+00 + -7.9968268513479011e+00 -1.0424714844695488e+00 -2.9610837615370329e+00 + -7.8851401838721662e+00 -1.5822392693513065e+00 -2.9822608274576314e+00 + -7.8354614630130204e+00 -1.9810171812762389e+00 -2.7492352600240850e+00 + -7.8554612901221255e+00 -2.2922079682656746e+00 -2.4251261551130843e+00 + -7.7956027719142060e+00 -2.9394795991388292e+00 -2.2315255785513299e+00 + id 12979 + loc 8.4877383708953857e-01 1.8855035305023193e-01 395 + blend 0.0000000000000000e+00 + interp 4.5580489750933445e-01:3.3922512296572538e-01:1.4851806356657637e-01:2.9393147993671770e-01:9.9624819089579730e-01:3.8218581383697603e-01:1.5670073929985273e+00:2.5947157267384113e-01:2.0003783866788467e+00:3.7696344608632359e-01:2.4818865707080380e+00:4.5580033946035936e-01:3.0004794259127672e+00:3.1578480394856973e-01:3.7500050717508948e+00 + CVs 20 + -3.9061086486142754e-01 3.7338806081126596e-01 4.4802132651996063e-01 + -7.4042915107071550e-01 6.5580948321951571e-01 8.2680701286055491e-01 + -1.1049495523934671e+00 8.8875351679878434e-01 1.1847473181605381e+00 + -1.5098705667226011e+00 1.0842299252448080e+00 1.5411985560868195e+00 + -1.9508772221934609e+00 1.2345996763841534e+00 1.8915997953218138e+00 + -2.4155845089660382e+00 1.3346244937946352e+00 2.2360951652856040e+00 + -2.8896999250130926e+00 1.3772092098127384e+00 2.5772066409626841e+00 + -3.3591734449798452e+00 1.3478286122409324e+00 2.9110393084697535e+00 + -3.8062091858910723e+00 1.2336340768088307e+00 3.2286214951262746e+00 + -4.2111505836012135e+00 1.0337224915594065e+00 3.5220218566582204e+00 + -4.5574931599479545e+00 7.6209451984910626e-01 3.7794902877816012e+00 + -4.8383669086751668e+00 4.4364178311606262e-01 3.9849464447000020e+00 + -5.0568753370474857e+00 1.0101874788071052e-01 4.1333387168407745e+00 + -5.2181883622627296e+00 -2.5706883286847271e-01 4.2365876010386305e+00 + -5.3257345715731841e+00 -6.2711215437614820e-01 4.3065640912364112e+00 + -5.3779936697627466e+00 -9.8895125067602585e-01 4.3417288235040603e+00 + -5.3790746893268624e+00 -1.3074139219412939e+00 4.3370336729040959e+00 + -5.3413559753440794e+00 -1.5835163021854965e+00 4.3029881620828796e+00 + -5.2270809470596493e+00 -1.9351351623412989e+00 4.2728003745100871e+00 + id 12980 + loc 3.3908557891845703e-01 6.0937613248825073e-01 401 + blend 0.0000000000000000e+00 + interp 3.5172243075449605e-01:2.8255276717565331e-01:1.1177245565933247e-01:3.1822232197606470e-01:1.0232430493173821e+00:3.5171891353018853e-01:1.8245942135913500e+00:2.9106895037772684e-01:2.1693944952886248e+00:3.1193119862264052e-01:2.9795502540827701e+00:2.9799177533878080e-01:3.5415922427129538e+00 + CVs 20 + -7.6074060039424130e-02 3.1147381352694775e-01 -3.1069000657684387e-01 + -1.6040417064530846e-01 6.4853829197792701e-01 -6.2598151299420346e-01 + -2.8178188968938356e-01 9.9246271892503135e-01 -9.3847143018774715e-01 + -4.4643724628935588e-01 1.3171979051484417e+00 -1.2541837028583884e+00 + -6.6263939197077082e-01 1.6034324134633877e+00 -1.5808379453055239e+00 + -9.5077928333727446e-01 1.8342215159497592e+00 -1.9007580184926320e+00 + -1.3216825888778272e+00 1.9936759622449189e+00 -2.1744050359630518e+00 + -1.7591865784743397e+00 2.0704750010915296e+00 -2.3634339787097667e+00 + -2.2267365645701322e+00 2.0668298809253605e+00 -2.4476270424030790e+00 + -2.6912294859237935e+00 2.0034108547961349e+00 -2.4364849416016607e+00 + -3.1419692363152181e+00 1.9026414692779663e+00 -2.3625790247155711e+00 + -3.5909235459816502e+00 1.7702083357681189e+00 -2.2694846145638121e+00 + -4.0509958712207874e+00 1.5969534545048401e+00 -2.1898477572797321e+00 + -4.5065095696237973e+00 1.3889373567450225e+00 -2.1215575791271215e+00 + -4.9515677668682727e+00 1.1632465984604488e+00 -2.0650907925327235e+00 + -5.4473102541464851e+00 8.8520789204591011e-01 -2.0904729012024266e+00 + -6.0473881213785319e+00 5.1023629672611215e-01 -2.3317819299298259e+00 + -6.6386666162399495e+00 1.4465940349664930e-01 -2.8353432030462824e+00 + -6.9717735645294319e+00 -3.6092808836938550e-02 -3.0715677442536662e+00 + id 12981 + loc 3.3380430936813354e-01 3.9815816283226013e-01 402 + blend 0.0000000000000000e+00 + interp 4.3126302377702885e-01:2.7005299252293130e-01:7.0769241870606114e-01:4.3125871114679110e-01:1.0151844095945504e+00:3.6609711341337337e-01:1.7804074089790909e+00:3.1489582908138203e-01:2.3551737913820836e+00:3.7604805786505163e-01:3.2696851242596363e+00:2.9968564191252262e-01:3.9981146743048068e+00 + CVs 20 + -1.7573941368453413e-01 3.7829732676418576e-01 1.3517327629484233e-01 + -3.5425578800523772e-01 7.3580494630924398e-01 2.6005896260071548e-01 + -5.6364944046164256e-01 1.0807183717509974e+00 3.6230144377395646e-01 + -8.1713398112862246e-01 1.4108283718229782e+00 4.4811481106928469e-01 + -1.1170415905214246e+00 1.7134477385787050e+00 5.3473705307950514e-01 + -1.4654830245986872e+00 1.9736872351373169e+00 6.3157240608898557e-01 + -1.8639649147563844e+00 2.1765915938386349e+00 7.3760853022366279e-01 + -2.3088774907388756e+00 2.3066476483549376e+00 8.5194614161118620e-01 + -2.7897275731397784e+00 2.3492244259805379e+00 9.7771718417524978e-01 + -3.2889443335266302e+00 2.2913116480665616e+00 1.1102693050268850e+00 + -3.7730807416878624e+00 2.1209186685361034e+00 1.2357177826267873e+00 + -4.1845908351055066e+00 1.8350247032973446e+00 1.3502493204062711e+00 + -4.4655826457392847e+00 1.4581562206265732e+00 1.4702559140135187e+00 + -4.6083381288384748e+00 1.0475060598211612e+00 1.6273065537304705e+00 + -4.6541199512430769e+00 6.6909860506440477e-01 1.8664319792089608e+00 + -4.6601807808502196e+00 3.8856317417456254e-01 2.2346662748643515e+00 + -4.6856863243523890e+00 2.9307048553732351e-01 2.7697859508345442e+00 + -4.7251166839793193e+00 4.5348427596831054e-01 3.3844358064061204e+00 + -4.8835566266299777e+00 3.4590668405098657e-01 3.7876116602879137e+00 + id 12982 + loc 9.4234430789947510e-01 3.6479970812797546e-01 406 + blend 0.0000000000000000e+00 + interp 4.3378628806541120e-01:4.2255570456737984e-01:1.4450355426675887e-01:2.4853333160348098e-01:9.6580929105155577e-01:4.3321506324574471e-01:1.3784796514565412e+00:2.5008777714719660e-01:2.3497575051906452e+00:2.2988411029344180e-01:3.2689277991366872e+00:4.3378195020253058e-01:3.9682754212598836e+00 + CVs 20 + -2.1191083673820782e-01 1.8664346142598578e-01 3.7441132439525418e-02 + -3.5566478744765717e-01 2.9694933680151936e-01 5.9021566805119947e-02 + -4.6637467790371184e-01 3.6022273164444768e-01 7.8418572287597438e-02 + -5.8079171344494906e-01 4.0206258724940180e-01 1.1129517123516605e-01 + -6.9370039038428877e-01 4.2112594810954807e-01 1.5773409012534900e-01 + -7.9933978364887470e-01 4.1771526144376103e-01 2.1723122388762303e-01 + -8.9337369669131617e-01 3.9428190128416601e-01 2.8924626848817986e-01 + -9.7451945587319644e-01 3.5491153345207943e-01 3.7356016339615705e-01 + -1.0413167807317827e+00 3.0452339037366299e-01 4.6876125036356087e-01 + -1.0861601999308963e+00 2.4929413568722930e-01 5.6918264353051318e-01 + -1.1009446344604914e+00 1.9676358698546226e-01 6.6736374030592260e-01 + -1.0907885817123666e+00 1.5226892998849295e-01 7.6148402000623738e-01 + -1.0729344880413338e+00 1.1553306411850461e-01 8.5730976460723940e-01 + -1.0600537493216280e+00 8.4780010646970161e-02 9.5896906939305193e-01 + -1.0517141837653028e+00 6.2722355281326969e-02 1.0602494485916782e+00 + -1.0438640651411704e+00 5.4104045972183656e-02 1.1511994561889893e+00 + -1.0404910102784897e+00 5.9968810488214341e-02 1.2310025743761559e+00 + -1.0517542805757452e+00 7.6800888688198121e-02 1.3081792973781143e+00 + -1.1159412720556858e+00 3.7823502898988060e-02 1.4130514428388381e+00 + id 12983 + loc 1.2816423177719116e-01 5.1752430200576782e-01 380 + blend 0.0000000000000000e+00 + interp 3.7550926983182387e-01:3.7550551473912558e-01:3.1549353858302043e-02:2.8655210724249408e-01:7.7421578567881988e-01:3.1285871785773833e-01:9.7538606846641673e-01:2.9808234437356668e-01:1.2692674389830638e+00:3.0246713008654480e-01:2.5980273460036591e+00:3.3187690761739214e-01:3.5110130661763836e+00 + CVs 20 + -4.6044468841140607e-01 3.0903001957682358e-01 -3.8314005390489914e-01 + -8.4509242674502949e-01 5.3349962962544173e-01 -6.7416844830421729e-01 + -1.2062134051714044e+00 7.1394431925263280e-01 -9.4264285466610431e-01 + -1.5636213450655938e+00 8.7096931961583479e-01 -1.2180709534549521e+00 + -1.9101520088631945e+00 1.0043796257478408e+00 -1.4993269464588939e+00 + -2.2394637931860881e+00 1.1105838915280257e+00 -1.7809705314842663e+00 + -2.5513467105796064e+00 1.1848192881938386e+00 -2.0553645409739092e+00 + -2.8452073887750675e+00 1.2260151445235321e+00 -2.3174295593284193e+00 + -3.1119667781209839e+00 1.2364521849846497e+00 -2.5725853855049459e+00 + -3.3350784315215032e+00 1.2230120999982588e+00 -2.8313163817886613e+00 + -3.5094067218499951e+00 1.2034883841062256e+00 -3.0989238496715990e+00 + -3.6488012134015015e+00 1.1944537413431919e+00 -3.3821806467357369e+00 + -3.7623417569171735e+00 1.1675141660787647e+00 -3.6896646325069797e+00 + -3.8242402028102571e+00 1.0302775010947394e+00 -3.9925384276999432e+00 + -3.8018651869049842e+00 7.2418831522867988e-01 -4.2480893512087539e+00 + -3.6978321588132257e+00 2.7085948222426914e-01 -4.4951413177582884e+00 + -3.5525788669561020e+00 -2.8397724733344676e-01 -4.8204057628067041e+00 + -3.4755347538624388e+00 -8.5926718638692190e-01 -5.2310996692082981e+00 + -3.6092193112539324e+00 -1.1554656297704451e+00 -5.5170010507346108e+00 + id 12984 + loc 6.4932775497436523e-01 7.0436859130859375e-01 373 + blend 0.0000000000000000e+00 + interp 4.6707620218944457e-01:4.2942902085954809e-01:6.5202488127444935e-01:2.8287239181582269e-01:1.0008668936397267e+00:3.5449699591262279e-01:1.6263935516021817e+00:4.6707153142742269e-01:2.1798562175365332e+00:3.6799961754766441e-01:2.8102308810653298e+00:4.3244006851560396e-01:3.0948244898777602e+00:3.9383823431409465e-01:3.9199993847511632e+00 + CVs 20 + -2.8222909511297223e-01 3.6948269769920028e-01 -1.3666509191046108e-01 + -5.3115787146790350e-01 7.4746550372813725e-01 -2.9229110777736966e-01 + -7.3226210023166849e-01 1.1365253401831492e+00 -4.6623631085170281e-01 + -8.7285489226516022e-01 1.5360231132695146e+00 -6.5686177515737221e-01 + -9.5364480724045253e-01 1.9376197444875827e+00 -8.6921869029510712e-01 + -9.9751141184066616e-01 2.3222691107676963e+00 -1.1264190784067551e+00 + -1.0309850863245051e+00 2.6569235057630203e+00 -1.4557971597152717e+00 + -1.0638610801643362e+00 2.9117980594716619e+00 -1.8570022273467490e+00 + -1.0870662934492648e+00 3.0786973077821043e+00 -2.3046765374942755e+00 + -1.0819402701558862e+00 3.1635306484573062e+00 -2.7680739612776124e+00 + -1.0341257643924422e+00 3.1672061534300244e+00 -3.2256382818320564e+00 + -9.4833708726551658e-01 3.0626663205247340e+00 -3.6714721550779892e+00 + -8.5610587480874445e-01 2.8181631011617325e+00 -4.0897876696352231e+00 + -8.2140526884705511e-01 2.4732728286046131e+00 -4.4609656802523210e+00 + -9.1104192224493286e-01 2.1137208082459873e+00 -4.8008672489599471e+00 + -1.1484510513000923e+00 1.8107589118436591e+00 -5.1111140286908618e+00 + -1.5105144943270226e+00 1.6166553239763437e+00 -5.3695426351956721e+00 + -1.9239776932299191e+00 1.5499664228044265e+00 -5.5539011730850021e+00 + -2.1374754702818857e+00 1.4859935310879124e+00 -5.6878347617967639e+00 + id 12985 + loc 9.4632178544998169e-01 6.7449361085891724e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8225333974290241e-01:3.4482357139092373e-01:4.9371954358640413e-01:4.8224851720950501e-01:1.0043095082888964e+00:3.5584285184058012e-01:1.6237885801373220e+00:2.6257911763375819e-01:2.7668289141661520e+00:2.9005810719521780e-01:3.5105359045839402e+00 + CVs 20 + 2.1460454332249548e-01 2.4854088571672311e-01 -1.5724039771131942e-01 + 4.1975924220426108e-01 5.2017750046595257e-01 -2.9217467698730726e-01 + 6.2137201369830897e-01 7.9700846411181936e-01 -4.3897104420514155e-01 + 8.2208851419279605e-01 1.0625179935855171e+00 -6.2380909859059941e-01 + 1.0192674152757053e+00 1.3071351370602611e+00 -8.5863627098491824e-01 + 1.2076921949093551e+00 1.5181062876011793e+00 -1.1508120284371191e+00 + 1.3787113595771778e+00 1.6809088533074830e+00 -1.5005987278587294e+00 + 1.5198897047632032e+00 1.7820343699947445e+00 -1.8993059951807392e+00 + 1.6163916944500616e+00 1.8123249394363754e+00 -2.3288624931052144e+00 + 1.6558592232472693e+00 1.7691534328605791e+00 -2.7650949124742028e+00 + 1.6344318318232243e+00 1.6566830447780403e+00 -3.1824629417924690e+00 + 1.5568408474476023e+00 1.4838452330497116e+00 -3.5576814043612601e+00 + 1.4341563160078377e+00 1.2629489981014892e+00 -3.8720070817112582e+00 + 1.2890912534602343e+00 1.0229045182213348e+00 -4.1030150981383420e+00 + 1.1589604683534789e+00 8.1974326068166503e-01 -4.2210950909874576e+00 + 1.0712750749713531e+00 6.7979043854996601e-01 -4.1968496890181362e+00 + 1.0007984465494069e+00 5.2243186454039825e-01 -4.0772640209546003e+00 + 8.9926319667493027e-01 2.7455400450049061e-01 -3.9850744680156951e+00 + 8.6656681775764799e-01 2.9615832298054112e-01 -4.1312724359668849e+00 + id 12986 + loc 3.1782811880111694e-01 5.0595629215240479e-01 415 + blend 0.0000000000000000e+00 + interp 5.1385429301063457e-01:4.3625675496169458e-01:6.4775260508078691e-03:4.8961344933653944e-01:4.2162943950531873e-01:4.3329336235064003e-01:9.4652246941285101e-01:4.0975757399653390e-01:1.3465417275661964e+00:4.2962484945552154e-01:1.9776388294181095e+00:2.6109194916428985e-01:2.2349226249757428e+00:4.2268586220253501e-01:2.8836133174410548e+00:5.1384915446770452e-01:3.3767289581153306e+00 + CVs 20 + 2.1012986105796749e-01 2.2447788737316560e-01 1.8234224225673898e-01 + 3.5405075547000064e-01 3.8624554684702633e-01 2.9462532794035856e-01 + 4.7293200104879130e-01 5.2211865766550092e-01 3.8061326246315991e-01 + 5.9713091944576391e-01 6.6435226282349225e-01 4.7924961269453298e-01 + 7.2922084627230144e-01 8.1153606403748979e-01 5.9177136851414480e-01 + 8.7090274894275554e-01 9.6037615844067992e-01 7.1884892057926841e-01 + 1.0229626221589139e+00 1.1071435902801219e+00 8.6359609833741302e-01 + 1.1849009811414115e+00 1.2476805954957970e+00 1.0306472712425769e+00 + 1.3549645341486880e+00 1.3774335885991920e+00 1.2214399397671845e+00 + 1.5305591740695941e+00 1.4921929806446199e+00 1.4338340374028826e+00 + 1.7071939286774136e+00 1.5893697690643454e+00 1.6708373151200411e+00 + 1.8776790309654496e+00 1.6682993049047066e+00 1.9520383425626548e+00 + 2.0438182562713894e+00 1.7248738003776027e+00 2.2976958789011994e+00 + 2.2323678869440218e+00 1.7481164488998624e+00 2.6898094532162879e+00 + 2.4712643315066982e+00 1.7306717492442834e+00 3.0721989055674590e+00 + 2.7588923140416575e+00 1.6760922108912402e+00 3.4041000645814443e+00 + 3.0784610224130917e+00 1.5891673336188128e+00 3.6828810225154256e+00 + 3.4155290517160615e+00 1.4731749637426472e+00 3.9126961457150742e+00 + 3.6337840995680901e+00 1.4005581053002636e+00 3.9565238132796443e+00 + id 12987 + loc 6.7387837171554565e-01 4.8373687267303467e-01 411 + blend 0.0000000000000000e+00 + interp 3.1673926566131400e-01:3.0533825486516369e-01:3.4953807974852469e-01:2.9292774033516294e-01:1.0268126757470717e+00:2.6718593626835224e-01:1.9690528110675700e+00:3.1673609826865740e-01:2.8196050645891146e+00:2.9825943441597857e-01:3.5722232064439066e+00 + CVs 20 + -8.0459309384005551e-01 2.4010805660278389e-01 1.5157059105041248e-01 + -1.4321438073501407e+00 3.4181867523669945e-01 2.9131580174111066e-01 + -2.0188160045992953e+00 3.8466815889692141e-01 4.1371647004402123e-01 + -2.6232185229760923e+00 3.8907087309237520e-01 5.2298766551857190e-01 + -3.2266565337021418e+00 3.4657605732235686e-01 6.2053169206778169e-01 + -3.8096227323153586e+00 2.5261829098608013e-01 7.1396624605156833e-01 + -4.3539753019571963e+00 1.0413253390344601e-01 8.1094199244820553e-01 + -4.8426801028505118e+00 -1.0120229476063169e-01 9.1587367551852772e-01 + -5.2578787797230389e+00 -3.6051978318027622e-01 1.0333600740725668e+00 + -5.5794432670822047e+00 -6.6101015710329469e-01 1.1676477972510413e+00 + -5.7954251568570125e+00 -9.8012970643295083e-01 1.3152510602232519e+00 + -5.9171262639655140e+00 -1.2974939678074142e+00 1.4658033868146896e+00 + -5.9652422695685452e+00 -1.6010464043031609e+00 1.6116332897428496e+00 + -5.9491925726521711e+00 -1.8715401124143753e+00 1.7488613109523925e+00 + -5.8780353046232889e+00 -2.0862079086961618e+00 1.8748547648059335e+00 + -5.7681173413800639e+00 -2.2321286640853097e+00 1.9905307102863707e+00 + -5.6408975269833554e+00 -2.3095433078484220e+00 2.1021218433110374e+00 + -5.5141778580981065e+00 -2.3308460340354955e+00 2.2042906295511848e+00 + -5.3281309169411522e+00 -2.4766047062953875e+00 2.2977940720968291e+00 + id 12988 + loc 5.3659331798553467e-01 8.8596820831298828e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4311791813887158e-01:3.7627207381205924e-01:9.5803700386880541e-01:3.2419012248815099e-01:1.6667580262995716e+00:4.3937969251161629e-01:2.0059435479726280e+00:3.1576989462895860e-01:2.6101721253516557e+00:4.4311348695969022e-01:3.1847533460536561e+00:3.1907676859632422e-01:3.9998019637229225e+00 + CVs 20 + 1.4303346253938090e-01 3.4771255557998249e-01 -2.7052949893667189e-01 + 2.6704003836872919e-01 6.7796104872916318e-01 -5.5377483225182622e-01 + 3.7803579960505335e-01 9.8392766318817071e-01 -8.3975705383847510e-01 + 4.7726522303444618e-01 1.2603475600548333e+00 -1.1232663984874087e+00 + 5.6388311107736422e-01 1.5044657327925146e+00 -1.4004440746774254e+00 + 6.3977330671067689e-01 1.7166612771172420e+00 -1.6683398870769994e+00 + 7.1570145578140065e-01 1.9032945263255683e+00 -1.9350346099218489e+00 + 8.1303995094688253e-01 2.0680480188142143e+00 -2.2189180202356700e+00 + 9.5668835155441523e-01 2.2007284893003169e+00 -2.5318814152959792e+00 + 1.1633725494355531e+00 2.2815878321329697e+00 -2.8689163996017673e+00 + 1.4354258582253183e+00 2.2924477768883804e+00 -3.2152964413487872e+00 + 1.7624513199824918e+00 2.2264371802132770e+00 -3.5549370545912931e+00 + 2.1265835723949746e+00 2.0990817438311145e+00 -3.8759934353758583e+00 + 2.5021260123172224e+00 1.9302461405444573e+00 -4.1812074294450401e+00 + 2.8406909952366459e+00 1.7169937694740312e+00 -4.4930386316721238e+00 + 3.0705389036073365e+00 1.4691028033994034e+00 -4.8381761860507329e+00 + 3.1370636334698538e+00 1.2436468312358879e+00 -5.2347845325034319e+00 + 3.0443758901740843e+00 1.0660049819905704e+00 -5.7086283081795495e+00 + 2.9165505742757483e+00 7.8611998465018473e-01 -6.3334584964692322e+00 + id 12989 + loc 1.7784482240676880e-01 6.2305283546447754e-01 417 + blend 0.0000000000000000e+00 + interp 7.2388738770351035e-01:3.2340584994807436e-01:3.5702331758795713e-01:2.9271518633713567e-01:9.9768152400785814e-01:3.9897940821740008e-01:1.6466299374334159e+00:3.1397385601623490e-01:2.1606908971463175e+00:5.8065018383438316e-01:2.6075116416915707e+00:7.2388014882963336e-01:3.9978175594096994e+00 + CVs 20 + -6.3788943884229843e-02 2.1949741556870089e-01 -2.7892379833209385e-01 + -7.7130100619557634e-02 3.8368628058755616e-01 -4.9139628801337482e-01 + -9.2957188976940081e-02 4.9805519846861757e-01 -6.9333048662581753e-01 + -1.2617575203387169e-01 5.8114687812835264e-01 -9.0920202281431461e-01 + -1.7190722973987010e-01 6.2843782314629559e-01 -1.1336801721744512e+00 + -2.2570475112238603e-01 6.3812737949398990e-01 -1.3603075907504356e+00 + -2.8313373574418066e-01 6.1196670404590559e-01 -1.5824258791630592e+00 + -3.4001766693383345e-01 5.5519918626435993e-01 -1.7943920626211360e+00 + -3.9324940966157157e-01 4.7212114918142634e-01 -1.9911074331945426e+00 + -4.4275066722698508e-01 3.6248851783416391e-01 -2.1665005233000532e+00 + -4.9067919655111297e-01 2.2757568188143973e-01 -2.3159999478714397e+00 + -5.3692726740115138e-01 7.6216467335379789e-02 -2.4409738352561714e+00 + -5.7875952431880751e-01 -8.0871625058581920e-02 -2.5469342572333318e+00 + -6.1468307834646818e-01 -2.3814252819764326e-01 -2.6375661560485959e+00 + -6.4676282370252569e-01 -3.9471919329010574e-01 -2.7136825158862488e+00 + -6.7713278095135976e-01 -5.5038032359878297e-01 -2.7757970911281911e+00 + -7.0202270925949395e-01 -7.0217503693271510e-01 -2.8236470043294899e+00 + -7.1327573074543738e-01 -8.4497900661468250e-01 -2.8559998874747423e+00 + -7.5488838599838870e-01 -9.7617401278040705e-01 -2.9300652201210111e+00 + id 12990 + loc 9.3482571840286255e-01 7.5962889194488525e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4969976948443244e-01:3.2621241528395234e-01:1.0997885980232980e-01:3.7857590605492381e-01:8.5118080371253502e-01:2.8545463722169268e-01:1.3651600318085446e+00:4.8757393742884869e-01:1.9429346751998922e+00:5.4969427248673763e-01:2.1273857511243865e+00:3.8428602762358938e-01:2.8516918682033374e+00:3.3740669485938962e-01:3.4481766778520706e+00 + CVs 20 + 1.1064237861890411e-01 5.0290418589632702e-01 3.1564364580689291e-01 + 2.5705720267195181e-01 8.9191361527981905e-01 4.9308252164748989e-01 + 4.1981009877429404e-01 1.2329231605551694e+00 6.2657634516630378e-01 + 5.9136321199839781e-01 1.5436316970348853e+00 7.4595400384002808e-01 + 7.6964720381116070e-01 1.8170110744614758e+00 8.4450795709350945e-01 + 9.4964612074357324e-01 2.0434081440990743e+00 9.1047659684859894e-01 + 1.1241156589424470e+00 2.2127584357105454e+00 9.3208700657883159e-01 + 1.2838380020499172e+00 2.3174495509882780e+00 9.0823518094059419e-01 + 1.4195489961259118e+00 2.3559126544498907e+00 8.5229007928924183e-01 + 1.5321161929616542e+00 2.3404068377687564e+00 7.8174491084094033e-01 + 1.6353945477120404e+00 2.2871327811957927e+00 6.9905839781837975e-01 + 1.7409054624676876e+00 2.1988549697906863e+00 5.9715266699917335e-01 + 1.8525048241653352e+00 2.0719384608619302e+00 4.7581448891538258e-01 + 1.9718656425812104e+00 1.9073578241663689e+00 3.4411300511162890e-01 + 2.0996038143418465e+00 1.7149659516011511e+00 2.2328948714677727e-01 + 2.2319534071444380e+00 1.5165522381147241e+00 1.5082504659637841e-01 + 2.3636412138630742e+00 1.3235036472157624e+00 1.4654447897397110e-01 + 2.4961828892911395e+00 1.0770217342054254e+00 1.9550926782755462e-01 + 2.6299312207745440e+00 7.0593281486172088e-01 2.7631425189583786e-01 + id 12991 + loc 6.2648695707321167e-01 4.7145563364028931e-01 409 + blend 0.0000000000000000e+00 + interp 5.3579238507662819e-01:3.1218072373563194e-01:2.1920499594176490e-01:3.4302951489907391e-01:1.0034893292127876e+00:5.3578702715277748e-01:1.7724903388337594e+00:3.1962481604647119e-01:2.2805880224586352e+00:3.7286752583539046e-01:2.9999969756938420e+00:3.7389511392033520e-01:3.5817678733277849e+00 + CVs 20 + -3.0852376968230905e-01 6.6764672212394502e-02 1.2458117848027175e-01 + -5.9183841695382522e-01 1.2517240243160893e-01 2.6209473410585982e-01 + -8.7669888960852083e-01 1.8845078740105253e-01 3.9627952289188101e-01 + -1.1715055626999242e+00 2.6224921689059805e-01 5.1429133720867992e-01 + -1.4713776004107881e+00 3.4428501542110057e-01 6.1741882301286533e-01 + -1.7727584277610720e+00 4.3279700780814168e-01 7.0772718667622858e-01 + -2.0731195618878364e+00 5.2733206759993700e-01 7.8626819592381059e-01 + -2.3724902281691813e+00 6.2641197204785048e-01 8.5321849988039822e-01 + -2.6750545898724685e+00 7.2489337748967164e-01 9.0781770188497490e-01 + -2.9853367625266931e+00 8.1465533601204054e-01 9.4959754807531560e-01 + -3.3049630753694754e+00 8.8619482378666170e-01 9.8143180756979254e-01 + -3.6341186417204385e+00 9.2769897531428747e-01 1.0100135634815803e+00 + -3.9707441509022932e+00 9.2812086836707053e-01 1.0421194457449938e+00 + -4.3104070975679676e+00 8.8333469188945357e-01 1.0813784875426167e+00 + -4.6483822953444101e+00 7.9513355214596038e-01 1.1290516892397293e+00 + -4.9813275828739192e+00 6.6650897767810280e-01 1.1876029792075582e+00 + -5.3059044166172491e+00 4.9913682319761676e-01 1.2605242862670298e+00 + -5.6142437467035293e+00 2.9822534135131162e-01 1.3434347692105923e+00 + -5.8161999732325231e+00 1.4565500061649672e-01 1.3951046711537622e+00 + id 12992 + loc 7.6471918821334839e-01 7.2587686777114868e-01 399 + blend 0.0000000000000000e+00 + interp 4.1631380998870221e-01:3.4577273981155704e-01:1.8453540815440805e-01:3.7626260171844950e-01:9.7751002337926107e-01:2.6111760377811399e-01:1.3508877311822731e+00:2.8288312044488068e-01:2.0893609892639140e+00:4.0151872866403360e-01:2.7417122537355638e+00:4.1630964685060234e-01:3.3315502228931737e+00:3.7214882605786714e-01:3.9229532231188395e+00 + CVs 20 + -2.1067266507226706e-01 3.4280010296024038e-01 -2.4185861479425874e-01 + -3.9852532163494614e-01 6.8263537713924904e-01 -5.0539227654422769e-01 + -5.9274134799808431e-01 1.0055684276508758e+00 -8.0818322015156396e-01 + -8.1152500861321175e-01 1.2928791806517437e+00 -1.1514562239808077e+00 + -1.0627511644065264e+00 1.5209054677937532e+00 -1.5247779036838502e+00 + -1.3462081193756150e+00 1.6675922280103141e+00 -1.9104560554428565e+00 + -1.6552091653030783e+00 1.7252600244944676e+00 -2.2852158807809433e+00 + -1.9813464375545713e+00 1.7076611250415352e+00 -2.6252386118946083e+00 + -2.3135621828667503e+00 1.6328385697483254e+00 -2.9144900382327474e+00 + -2.6369915416532019e+00 1.5096443535653095e+00 -3.1476180944162584e+00 + -2.9389568193474465e+00 1.3529907115063251e+00 -3.3238106660750359e+00 + -3.2073049543946643e+00 1.1894623914345965e+00 -3.4393814034177161e+00 + -3.4240457559491628e+00 1.0347515865363413e+00 -3.4918328056383330e+00 + -3.5901945230654060e+00 8.8706815220740010e-01 -3.4994168063771451e+00 + -3.7300659168040458e+00 7.4220171428756998e-01 -3.4870192941753735e+00 + -3.8138077214028776e+00 5.6202059074860744e-01 -3.4518987226714222e+00 + -3.7641822607793256e+00 2.1675912431892119e-01 -3.3762013424513579e+00 + -3.7382097129432630e+00 -3.6574801550160729e-01 -3.2904245473987284e+00 + -4.0295457968567412e+00 -4.9593363979917138e-01 -3.2360618518859421e+00 + id 12993 + loc 4.0497785806655884e-01 8.9184510707855225e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5572148324402717e-01:3.6409279216132073e-01:5.0652457139621998e-01:3.5299059634393909e-01:1.1297985500032246e+00:3.1849563987947788e-01:1.9955533694074592e+00:4.4279648821189288e-01:2.2562809054626545e+00:4.5571692602919472e-01:2.6825870509341549e+00:3.2138217667041402e-01:3.4392985904083782e+00 + CVs 20 + -1.2468874668220162e-01 2.7867846167646471e-01 5.6692996869233597e-02 + -2.0187311577853351e-01 4.9059057891574387e-01 -1.4458059309300525e-02 + -3.1876062214381695e-01 6.9354462484888735e-01 -1.0866795789511768e-01 + -4.8612842875064255e-01 8.8228917531444551e-01 -2.0463662182202871e-01 + -7.0230845211323445e-01 1.0471719397134489e+00 -3.0358747220598359e-01 + -9.6396391378743285e-01 1.1818339856278617e+00 -4.0396994580111795e-01 + -1.2673425038885984e+00 1.2833241394408155e+00 -5.0161090386082663e-01 + -1.6091953940104369e+00 1.3512652080774037e+00 -5.9018826241961764e-01 + -1.9860017898199938e+00 1.3859971212994566e+00 -6.6236778501148375e-01 + -2.3931390357065165e+00 1.3867096389262645e+00 -7.1076522389156338e-01 + -2.8243364841207250e+00 1.3501672342801296e+00 -7.2950790174843871e-01 + -3.2706954179307490e+00 1.2703198702703642e+00 -7.1617127546941339e-01 + -3.7200817897382081e+00 1.1465994538024722e+00 -6.6865746614551114e-01 + -4.1584676281358588e+00 1.0011201547328901e+00 -5.7867684469167535e-01 + -4.5758106608128557e+00 8.7412904275561421e-01 -4.3430783197713463e-01 + -4.9666239339780036e+00 7.8813824352990669e-01 -2.3096482751467753e-01 + -5.3205656879896273e+00 7.4012257918779234e-01 2.4497545980901758e-02 + -5.6264732165611164e+00 7.2074920403916032e-01 3.1262878543870914e-01 + -5.9283926116703993e+00 6.0327172951435337e-01 4.9583500278654413e-01 + id 12994 + loc 7.5313800573348999e-01 9.5125325024127960e-02 393 + blend 0.0000000000000000e+00 + interp 5.6847334859615506e-01:2.7122318182756833e-01:2.0423269264942645e-01:3.6822155861885703e-01:9.6887800881639474e-01:3.0872520476160048e-01:1.5296686027726480e+00:5.6846766386266911e-01:1.9999658837351957e+00:4.5082871345134018e-01:2.6983038255106906e+00:4.4476257331782798e-01:2.9998561343717709e+00:3.8814761331485481e-01:3.3316391297631021e+00 + CVs 20 + 4.6967174192519157e-01 3.9557940347070653e-01 1.2530370813696728e-01 + 9.1321202892243614e-01 7.9515380681376890e-01 2.1583026080512813e-01 + 1.3422079465793186e+00 1.2252357379475398e+00 3.1118971712304488e-01 + 1.7682400452532205e+00 1.6815491103214593e+00 4.6298141802621801e-01 + 2.1903123682366310e+00 2.1315567700886131e+00 7.2111063271182507e-01 + 2.5894144887511006e+00 2.5340585590270392e+00 1.0986292091422125e+00 + 2.9437615765953744e+00 2.8563338622650276e+00 1.5602431541106023e+00 + 3.2441111503977025e+00 3.0841471918075314e+00 2.0466917647257477e+00 + 3.4915680643317959e+00 3.2263791068944219e+00 2.5094093665830526e+00 + 3.6870581008888670e+00 3.3105315153392918e+00 2.9271706668054773e+00 + 3.8321549951713600e+00 3.3710087993672229e+00 3.3128199428098570e+00 + 3.9390842797525880e+00 3.4281105935647687e+00 3.7121522960589415e+00 + 4.0248309352747427e+00 3.4712255750020580e+00 4.1755708084573255e+00 + 4.1010857888555137e+00 3.4575589623119143e+00 4.7375521481132665e+00 + 4.1756810133036035e+00 3.3077776226720013e+00 5.3853337998349318e+00 + 4.2402627116433038e+00 2.9486251794122076e+00 6.0162761032033920e+00 + 4.3380051279643084e+00 2.3797879650801415e+00 6.5003526814426253e+00 + 4.5933321354312326e+00 1.7052035608881244e+00 6.7141352747275338e+00 + 5.0160588684987246e+00 1.1262021871811676e+00 6.5979969399850953e+00 + id 12995 + loc 1.5156152844429016e-01 3.5507187247276306e-01 382 + blend 0.0000000000000000e+00 + interp 4.9204812395280717e-01:3.3295296101881594e-01:3.3949942717649095e-01:4.5896179429867878e-01:9.4903386164963188e-01:2.9207387875044805e-01:1.4671778514925595e+00:4.4795754340691391e-01:1.9579735442216140e+00:4.5741649349849878e-01:2.1123466842229472e+00:4.9204320347156766e-01:2.4046107266785071e+00:3.6582544853691074e-01:2.9854884176675354e+00:2.7257622826637778e-01:3.8528972166894602e+00 + CVs 20 + -4.7777413427592863e-01 1.4816821942483210e-01 -7.9696330915226055e-01 + -8.1707479841893638e-01 1.6693346188972952e-01 -1.3376200634189792e+00 + -1.1251606757569057e+00 1.4168482609138511e-01 -1.7992873552462725e+00 + -1.4440744042695748e+00 1.0494842000209781e-01 -2.2459745471740260e+00 + -1.7797548043059714e+00 5.6912003586333970e-02 -2.6761611511718195e+00 + -2.1388930820384502e+00 -3.6894524658328542e-03 -3.0934944633048449e+00 + -2.5258717915409612e+00 -7.9736531939693878e-02 -3.5019120978030838e+00 + -2.9394141864037229e+00 -1.7988020705953889e-01 -3.9052955935475664e+00 + -3.3704581013843802e+00 -3.2310838444163736e-01 -4.3088632436456997e+00 + -3.8052893005635120e+00 -5.3431643792736683e-01 -4.7108280281292334e+00 + -4.2324611678261128e+00 -8.3328344205100269e-01 -5.0949826775813820e+00 + -4.6427873403788560e+00 -1.2259971450782621e+00 -5.4422192103242297e+00 + -5.0282980919955431e+00 -1.7031516717249950e+00 -5.7442542202246187e+00 + -5.3860167966352455e+00 -2.2498414166671163e+00 -5.9996765174553861e+00 + -5.7055678698563499e+00 -2.8627061537954241e+00 -6.2035483848592445e+00 + -5.9709134421617174e+00 -3.5344681318023192e+00 -6.3440073201986165e+00 + -6.1575694612382854e+00 -4.2431457291569323e+00 -6.4147884934051245e+00 + -6.2541789454980128e+00 -4.9530673688820173e+00 -6.4353621918203405e+00 + -6.3619422755382669e+00 -5.6130739926579203e+00 -6.4961185418069753e+00 + id 12996 + loc 1.2855108082294464e-01 9.5897424221038818e-01 264 + blend 0.0000000000000000e+00 + interp 4.5466003638381319e-01:4.5465548978344938e-01:8.8330076430500992e-01:2.0196989652589742e-01:1.7251947966475814e+00:2.9365715356761596e-01:2.6606874932304443e+00:4.0884355410358492e-01:3.0203881605439227e+00:2.4535800938272462e-01:3.8080849786078899e+00 + CVs 20 + -7.2353325727331641e-01 4.1501505178505849e-01 -1.0704005550067706e-01 + -1.3100492703953204e+00 6.6683964308505761e-01 -1.2227117937245466e-01 + -1.8886606611034664e+00 7.6621099310432272e-01 -4.7963134862712364e-02 + -2.5016756929581012e+00 7.7895940098750938e-01 9.1648162561496549e-02 + -3.1353351722804303e+00 7.8381174686329358e-01 2.5133368761327102e-01 + -3.7884300009358292e+00 8.1593420394534721e-01 3.7259168152195765e-01 + -4.4595410140207141e+00 8.6679073295561149e-01 3.9980242636775554e-01 + -5.1216020494050118e+00 9.1985825164062041e-01 3.0142080405587857e-01 + -5.7419382554895062e+00 9.6324785662351919e-01 8.2861210884204839e-02 + -6.3036501559704421e+00 9.8180539866518668e-01 -2.2604545204043913e-01 + -6.7996519703179450e+00 9.5561122582308355e-01 -5.8700415279424245e-01 + -7.2211785973283806e+00 8.7135206233786322e-01 -9.6202745384139066e-01 + -7.5614887069070944e+00 7.2852999079882874e-01 -1.3258885649716459e+00 + -7.8214464516768150e+00 5.3010957644356083e-01 -1.6741715289941785e+00 + -7.9933247914139063e+00 2.8366226567178421e-01 -1.9957922017781540e+00 + -8.0583823649713366e+00 4.2126724739432575e-02 -2.2417019191853216e+00 + -8.0242051663832115e+00 -9.5302894877358213e-02 -2.4053128398961898e+00 + -7.9380614948769930e+00 -2.5089733381064727e-01 -2.5406053899420415e+00 + -7.9523564559328950e+00 -7.7269263667174481e-01 -2.5286144736885507e+00 + id 12997 + loc 4.7233879566192627e-01 9.5503324270248413e-01 395 + blend 0.0000000000000000e+00 + interp 4.4402660663372640e-01:3.9792860276642650e-01:3.7631232942488246e-01:4.4402216636766006e-01:9.9923864679867158e-01:3.2212593907348408e-01:1.5541828825750750e+00:3.8188876919845205e-01:2.4505133053680996e+00:3.2617327786211542e-01:2.9754918460775412e+00:3.5944649079992552e-01:3.8798265203830589e+00 + CVs 20 + 5.4940296884928486e-01 1.6807426474552850e-01 -3.2864473127065907e-01 + 9.8516483079741413e-01 2.4310713860950212e-01 -6.2302436071812228e-01 + 1.3924756792952246e+00 2.7648663435139798e-01 -9.1121145960541527e-01 + 1.8025680320170743e+00 2.8733334048938219e-01 -1.2034386450973307e+00 + 2.1999587995057119e+00 2.7172508854375577e-01 -1.4932427699442430e+00 + 2.5678438487525574e+00 2.3140702686105175e-01 -1.7772097911489746e+00 + 2.8921895534455606e+00 1.7310310381355909e-01 -2.0529117312378693e+00 + 3.1659816111991508e+00 1.0622982546391579e-01 -2.3171018114314093e+00 + 3.3913808994547310e+00 4.1770059137679283e-02 -2.5672583532093798e+00 + 3.5772374193772394e+00 -8.8281888358192617e-03 -2.8014685502214709e+00 + 3.7390145279922780e+00 -3.7777261233582937e-02 -3.0214174519592474e+00 + 3.9008860338143276e+00 -5.2228754545711853e-02 -3.2425656880769083e+00 + 4.0822753801442655e+00 -7.4090479805717813e-02 -3.4856966036706067e+00 + 4.2902273870870120e+00 -1.2361261847984828e-01 -3.7566077646810809e+00 + 4.5238534661156375e+00 -2.1337464777158344e-01 -4.0478882364601976e+00 + 4.7771839070042699e+00 -3.5472661018497975e-01 -4.3566012480726606e+00 + 5.0373815901055456e+00 -5.6380419582506036e-01 -4.6859141885516529e+00 + 5.2815319220963062e+00 -8.5194191598957802e-01 -5.0231821270548469e+00 + 5.4323941857023934e+00 -1.1650812425978252e+00 -5.2757494302307855e+00 + id 12998 + loc 7.5618207454681396e-01 5.9821569919586182e-01 403 + blend 0.0000000000000000e+00 + interp 4.5845256868236145e-01:3.9829533349411972e-01:4.3787774946188096e-01:4.5170972393132652e-01:9.6670869680060678e-01:3.4711199514111618e-01:1.2091336253049925e+00:2.8302117550048445e-01:1.9871580899951660e+00:3.6456878045911922e-01:2.4583588560609666e+00:3.4475142249692164e-01:3.4386354639260417e+00:4.5844798415667465e-01:3.9992407197064086e+00 + CVs 20 + 1.0163776804859698e-01 9.1568860439852823e-02 -5.6740878727591371e-02 + 1.9054345320380300e-01 1.6678278782315240e-01 -1.3122494239605348e-01 + 2.7949940124763495e-01 2.2270645961032376e-01 -2.0822297058622882e-01 + 3.7568365082799060e-01 2.6596030969265116e-01 -2.8320181028990932e-01 + 4.7584831426059021e-01 3.0041289229283552e-01 -3.5838279653413119e-01 + 5.7677169088229130e-01 3.2944633003968737e-01 -4.3493755132409839e-01 + 6.7590964681550258e-01 3.5633579176611258e-01 -5.1226607626400233e-01 + 7.7099117236929693e-01 3.8405724981313000e-01 -5.8890937272584498e-01 + 8.5999238500584019e-01 4.1532232334695562e-01 -6.6315136999296809e-01 + 9.4108423512346229e-01 4.5273268562695723e-01 -7.3365995518132976e-01 + 1.0126551582334304e+00 4.9892867965645982e-01 -8.0003818462962561e-01 + 1.0731240909367930e+00 5.5635260463333758e-01 -8.6326631081026728e-01 + 1.1206245880952208e+00 6.2698997705052451e-01 -9.2571955142625906e-01 + 1.1521989242988759e+00 7.1263290093766452e-01 -9.9117427763379229e-01 + 1.1623374792937766e+00 8.1505645859019715e-01 -1.0647706276019775e+00 + 1.1408328164877630e+00 9.3519961137563556e-01 -1.1525362152732486e+00 + 1.0716657516137966e+00 1.0697423233183714e+00 -1.2585260343623901e+00 + 9.3836642420642125e-01 1.2058847345257806e+00 -1.3776604587172483e+00 + 9.3602755406295046e-01 1.2610948098416728e+00 -1.3953233827424587e+00 + id 12999 + loc 3.5312560200691223e-01 4.9355104565620422e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3097933925593268e-01:2.5366563068027265e-01:5.5008745045508345e-03:3.4731271353034920e-01:7.4785293572497724e-01:3.5004785929712728e-01:1.1246908965424212e+00:2.6241184329918255e-01:1.9843549586324944e+00:4.3097502946254013e-01:2.1508963218283719e+00:4.0972641760343209e-01:3.0169457523110097e+00:3.5313397810052560e-01:3.5732056116008883e+00 + CVs 20 + -2.0861039179495677e-01 2.4969424407870772e-01 -1.8178681784456099e-02 + -4.0906847120039164e-01 4.7381450752904419e-01 -6.1295663366068287e-02 + -6.0150156076073558e-01 6.8258424399275652e-01 -1.1726233679701270e-01 + -7.8923680096252680e-01 8.7927908093500551e-01 -1.8386066837543502e-01 + -9.7462197303956788e-01 1.0547005747272880e+00 -2.7050190875793162e-01 + -1.1513240597199608e+00 1.1982741809578346e+00 -3.7653931102781779e-01 + -1.3070303808035257e+00 1.3061804141477995e+00 -4.8824071473054975e-01 + -1.4309255933231300e+00 1.3839901006532911e+00 -5.9168322770719284e-01 + -1.5227748863136672e+00 1.4427057872961868e+00 -6.8425801500660266e-01 + -1.6159739307251635e+00 1.4803570864710427e+00 -7.6543667483797406e-01 + -1.7536065147482489e+00 1.4585413406349126e+00 -8.2596374216440238e-01 + -1.9408990207695087e+00 1.3336230674403042e+00 -8.6314657311646492e-01 + -2.1576197165395636e+00 1.0940170510818401e+00 -8.9062786192189114e-01 + -2.3823651397821766e+00 7.6270136927715304e-01 -9.3506751381779452e-01 + -2.5978371549578756e+00 3.8481422350697198e-01 -1.0280802295082552e+00 + -2.7706481655170165e+00 2.9678346451689375e-02 -1.1949640466016229e+00 + -2.8172406757089887e+00 -1.9543878678563034e-01 -1.4227919462619532e+00 + -2.6876907796096097e+00 -2.4477924781790242e-01 -1.6238508778108114e+00 + -2.7593794874779407e+00 -4.6521385667913556e-01 -2.0511050379632723e+00 + id 13000 + loc 2.0064337551593781e-01 3.9662271738052368e-02 400 + blend 0.0000000000000000e+00 + interp 4.4162901553312395e-01:2.5889777244845669e-01:1.1627369860918213e-01:3.2478393353358925e-01:9.7395030140666372e-01:3.6649958082432271e-01:1.6852347240320680e+00:4.0190877809684333e-01:2.1678202126536288e+00:3.9482145394840990e-01:2.8450600782706883e+00:4.4162459924296865e-01:3.2010174550770003e+00 + CVs 20 + -5.5315027123828769e-02 3.2764429957873314e-01 2.6496248052325272e-01 + -1.3500903664439923e-01 6.6159609438286182e-01 5.2351941460054141e-01 + -2.4732761955486199e-01 9.9718537073600655e-01 7.7705755579636016e-01 + -4.0376693551464210e-01 1.3262727315981806e+00 1.0327792109630789e+00 + -6.1654125236469381e-01 1.6352484870871618e+00 1.3004551708977852e+00 + -8.9429149564178234e-01 1.9024698260048611e+00 1.5872089258719533e+00 + -1.2368568069280512e+00 2.1004578589850400e+00 1.8911672724430806e+00 + -1.6320286093103300e+00 2.2049274640103320e+00 2.1996134535715948e+00 + -2.0572007672253472e+00 2.2047735390341936e+00 2.4931825403513836e+00 + -2.4854344260897361e+00 2.1083167238661975e+00 2.7519018065010732e+00 + -2.8942743248522986e+00 1.9413779974963101e+00 2.9560134150613129e+00 + -3.2681959375328136e+00 1.7433367929675889e+00 3.0816200079283642e+00 + -3.5987268930862726e+00 1.5508780931810817e+00 3.1152584830621093e+00 + -3.8880440523228956e+00 1.3703466516949827e+00 3.0708881163700230e+00 + -4.1379444327261501e+00 1.2065892061788031e+00 2.9664921640456807e+00 + -4.3064964283549800e+00 1.1367827282494236e+00 2.7947691550760716e+00 + -4.2444902012949317e+00 1.2628017825354005e+00 2.5328167295425521e+00 + -3.8520241120797447e+00 1.3778397848556063e+00 2.1999814547423817e+00 + -4.0382270127073969e+00 1.3887100702657635e+00 1.9900434036709591e+00 + id 13001 + loc 7.3558455705642700e-01 5.5263686180114746e-01 377 + blend 0.0000000000000000e+00 + interp 4.1080468361844785e-01:3.6615013671369284e-01:8.4953160904729508e-01:3.8235524201972765e-01:1.4603995947292092e+00:3.7003269692188373e-01:2.0577390439759093e+00:4.1080057557161170e-01:2.9514055043721701e+00:2.4912706538466148e-01:3.6200125926825981e+00:3.7263271097037837e-01:3.9985540763248459e+00 + CVs 20 + -7.2238778555482053e-01 1.9793123998539783e-01 -5.7173741254241084e-01 + -1.2699150101444880e+00 2.8194684169356649e-01 -9.2001799808192208e-01 + -1.8033122729114066e+00 3.3642726733837702e-01 -1.2406401636269997e+00 + -2.3750841086653267e+00 3.9788293992063217e-01 -1.6185346674522285e+00 + -2.9764221306149494e+00 4.5576544426394017e-01 -2.0666036671850856e+00 + -3.6015219840887163e+00 4.8732215260736933e-01 -2.5823932059067785e+00 + -4.2475057587553620e+00 4.5311589114511053e-01 -3.1494544540551188e+00 + -4.8901472508680310e+00 3.0904935151899338e-01 -3.7391774761509931e+00 + -5.4836167192831384e+00 3.2201612441736804e-02 -4.3062958198254151e+00 + -5.9920179590899396e+00 -3.6727533037387072e-01 -4.7975434583385628e+00 + -6.4021354006777687e+00 -8.6434229595709722e-01 -5.1753415560697968e+00 + -6.7075315187980760e+00 -1.4411285469678043e+00 -5.4276698209447973e+00 + -6.8886426726895653e+00 -2.0398721332185019e+00 -5.5490652794862738e+00 + -6.9562132241366745e+00 -2.5797354229969534e+00 -5.5706005019330291e+00 + -6.9511654762232471e+00 -3.0333967174202696e+00 -5.5410122114744524e+00 + -6.9084329021382951e+00 -3.4120523879559279e+00 -5.4862184400198810e+00 + -6.8500758361549092e+00 -3.7375683802767083e+00 -5.4354217531813811e+00 + -6.8080072485688969e+00 -4.0220456996349636e+00 -5.4136771540035484e+00 + -6.8559947777948498e+00 -4.2359308717202531e+00 -5.4038917876166241e+00 + id 13002 + loc 6.8978631496429443e-01 9.8266464471817017e-01 411 + blend 0.0000000000000000e+00 + interp 3.4490911335706370e-01:3.4490566426593017e-01:1.5630672300207005e-01:2.7600281819340183e-01:9.8096359488847407e-01:1.5794365899758914e-01:1.9774719499301865e+00:2.9133249797451827e-01:3.0933751194931469e+00 + CVs 20 + 9.8769181346441826e-01 2.4806148375522841e-01 -1.4807331854278741e-01 + 1.6711443659234733e+00 3.1070717507435719e-01 -2.6287325168146192e-01 + 2.2957014039397929e+00 2.7634340008009783e-01 -3.6144388126387350e-01 + 2.9677654647145437e+00 1.7275228075392191e-01 -4.4792662320159371e-01 + 3.6735426625333440e+00 -1.3880926066605848e-02 -5.1473317955621178e-01 + 4.3885999982211095e+00 -2.8862840295492209e-01 -5.6069860920527148e-01 + 5.0788193464897926e+00 -6.4818786372258341e-01 -5.9127806562038665e-01 + 5.7029917154515806e+00 -1.0838202132258230e+00 -6.1433452773231134e-01 + 6.2209758869815897e+00 -1.5790411296396485e+00 -6.4120778799394973e-01 + 6.6018808600716108e+00 -2.1024371060744951e+00 -6.7582726877192900e-01 + 6.8378669878558753e+00 -2.6129407338075024e+00 -7.1321472729590962e-01 + 6.9602647862368503e+00 -3.0793772990026906e+00 -7.3275466999955219e-01 + 7.0173218534409818e+00 -3.4939200167112432e+00 -7.1281445923101971e-01 + 7.0378719179028844e+00 -3.8611846153586935e+00 -6.5040725054506587e-01 + 7.0291299015708590e+00 -4.1867269175675821e+00 -5.5364204880917700e-01 + 7.0032569872381858e+00 -4.4707785505683022e+00 -4.3007474199338641e-01 + 6.9752547742222077e+00 -4.7182008872079644e+00 -2.8894372833339904e-01 + 6.9614870820804073e+00 -4.9521082314263243e+00 -1.5087161383793113e-01 + 7.0325797329266351e+00 -5.2884133586033082e+00 -2.8273537984409958e-02 + id 13003 + loc 2.6216807961463928e-01 7.7652192115783691e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4676803630491563e-01:3.3391367001466665e-01:3.1604599755532969e-01:4.4676356862455258e-01:1.0163787701493312e+00:4.4235528596717283e-01:1.6927002076539399e+00:3.2503766970169468e-01:2.0999227736092552e+00:3.3243276388167059e-01:2.9764575247289082e+00:3.5472081791040483e-01:3.6090662738890842e+00 + CVs 20 + 1.4033811246915862e-01 3.4341046063143615e-01 -3.6999991731981124e-01 + 3.2253858925910828e-01 6.8082326535433213e-01 -7.3141841541572739e-01 + 5.0449159871686211e-01 1.0178628254004827e+00 -1.0943817577348427e+00 + 6.6189981934703856e-01 1.3423475664608013e+00 -1.4634246867194514e+00 + 7.7904659257287212e-01 1.6374165776295597e+00 -1.8412617933917654e+00 + 8.4456216570688203e-01 1.8863252744256407e+00 -2.2238268400219336e+00 + 8.5433973042942779e-01 2.0757152293112711e+00 -2.5992843653455524e+00 + 8.1295345961647136e-01 2.2002058595394947e+00 -2.9529353980150050e+00 + 7.3223539398824433e-01 2.2728292464516375e+00 -3.2905486965615172e+00 + 6.2924134925188224e-01 2.3118989940792503e+00 -3.6444215352150633e+00 + 5.2864913600497798e-01 2.3208194228301431e+00 -4.0279051038608680e+00 + 4.5142803316544966e-01 2.2909491133522373e+00 -4.4187769111167032e+00 + 4.0788199930172458e-01 2.2072969334522829e+00 -4.8013466878287936e+00 + 4.1437456144298912e-01 2.0490991267787235e+00 -5.1832364829933253e+00 + 4.8222309928482238e-01 1.8088552586175257e+00 -5.5521793427777935e+00 + 5.7432838045718893e-01 1.5197855194751513e+00 -5.8805797655933860e+00 + 6.3175380601589537e-01 1.2217901631337014e+00 -6.1804462334386772e+00 + 6.4911506014083353e-01 8.9662856414801295e-01 -6.5033246821202679e+00 + 6.8325447655378346e-01 4.8350596895325126e-01 -6.9001674323435607e+00 + id 13004 + loc 1.2894420325756073e-01 9.1325068473815918e-01 393 + blend 0.0000000000000000e+00 + interp 6.8952298700542147e-01:3.7209443880676468e-01:1.0442540999486394e-01:6.8951609177555140e-01:9.9278723082572062e-01:5.4750004690062304e-01:1.4298459533084031e+00:3.0003606115715964e-01:1.9447065809698851e+00:4.5933289783334535e-01:2.3630710133027462e+00:3.7188844716045932e-01:2.9447432370199218e+00:3.9715526681054475e-01:3.4345731353463673e+00 + CVs 20 + -2.0315641182841998e-01 4.1359137635903143e-01 -2.5129882856833430e-01 + -4.0369115802981420e-01 8.4864713101956091e-01 -5.1159521534204855e-01 + -6.0345754741391910e-01 1.3093831615658491e+00 -7.7087705624134661e-01 + -8.4068629142436047e-01 1.7941823624030739e+00 -1.0141304374368083e+00 + -1.1566117194127876e+00 2.2845914273517169e+00 -1.2209253574188006e+00 + -1.5760271947514553e+00 2.7455194990200993e+00 -1.3723075803544746e+00 + -2.1074712815060224e+00 3.1249653914169508e+00 -1.4599196464276420e+00 + -2.7282556988829225e+00 3.3582070220560922e+00 -1.4943835061922199e+00 + -3.3704354158848533e+00 3.4236825532368025e+00 -1.5155835695714273e+00 + -3.9762768002103686e+00 3.3703654587761682e+00 -1.5789613138410661e+00 + -4.5330984251343533e+00 3.2269781364262253e+00 -1.7033048638724733e+00 + -5.0271930643409792e+00 2.9718173571824154e+00 -1.8531224208562229e+00 + -5.4249531603784842e+00 2.6122727603476434e+00 -1.9951161977495673e+00 + -5.7149483744519989e+00 2.2098960920017481e+00 -2.1319311583152381e+00 + -5.9362850357751773e+00 1.8259399048934501e+00 -2.2284910024172828e+00 + -6.1456861276526862e+00 1.5185178918624240e+00 -2.1881882399030737e+00 + -6.3379899281192627e+00 1.3413703271543584e+00 -2.0079621666518754e+00 + -6.5027019866674962e+00 1.2440160663449744e+00 -1.8295370031826610e+00 + -6.7228274624433091e+00 1.0728467184232187e+00 -1.7481134283754933e+00 + id 13005 + loc 6.0332459211349487e-01 8.9120638370513916e-01 409 + blend 0.0000000000000000e+00 + interp 4.8928970814992362e-01:3.4986038514441081e-01:1.9337030570995606e-01:2.7499589232109267e-01:9.8139218187523602e-01:4.7665540953664892e-01:1.1980284419970650e+00:4.8928481525284212e-01:2.0166984086724522e+00:2.9980602510501825e-01:2.4380395821990626e+00:3.6233736640175612e-01:3.0011137738952125e+00:3.2531269186152295e-01:3.6876208572047435e+00 + CVs 20 + 5.0061509559280082e-01 1.1732005046282487e-01 -1.3582497671796817e-01 + 8.8222587454650592e-01 1.6912183524962010e-01 -2.4635414251404897e-01 + 1.2224864241273765e+00 1.9664959959652339e-01 -3.2482736498292519e-01 + 1.5487275404684087e+00 2.1858829564371374e-01 -3.6956380405611144e-01 + 1.8597252469424652e+00 2.3781553175168035e-01 -3.8705722830402844e-01 + 2.1574838269681411e+00 2.5862268171620972e-01 -3.8422287429175245e-01 + 2.4453134311578428e+00 2.8838412775297573e-01 -3.6695473090740227e-01 + 2.7296479479417943e+00 3.3491384704336480e-01 -3.3807474704223950e-01 + 3.0250492627738113e+00 3.9948864761601866e-01 -2.9416181466661845e-01 + 3.3500481683379082e+00 4.7346138191076337e-01 -2.3315496182611800e-01 + 3.7171441552413960e+00 5.3726114539638514e-01 -1.6223811745571987e-01 + 4.1247194043600892e+00 5.5922035989083674e-01 -9.8140625489651856e-02 + 4.5571235619058612e+00 5.0988877916367059e-01 -5.7090472515648250e-02 + 4.9947013724461247e+00 3.7751402596495454e-01 -4.8938958813090627e-02 + 5.4176817721536183e+00 1.6787997227204698e-01 -8.1900885669584422e-02 + 5.8082114587097298e+00 -1.0501971853005765e-01 -1.6572963183625911e-01 + 6.1518008529589494e+00 -4.3429522222201200e-01 -3.0362123737838798e-01 + 6.4319782267800552e+00 -8.1949701682865772e-01 -4.8215350847389932e-01 + 6.5849994787022110e+00 -1.2087990111661040e+00 -6.8256405552187815e-01 + id 13006 + loc 5.9045571088790894e-01 4.7346633672714233e-01 399 + blend 0.0000000000000000e+00 + interp 4.3880491729828502e-01:4.3880052924911206e-01:2.5262351036765063e-01:3.2027986195237285e-01:9.3068311105411761e-01:2.9503128390358518e-01:1.5761325519535740e+00:3.5047514252415163e-01:2.5241473084853627e+00:2.9464368436793814e-01:3.0061156098965420e+00:4.0870988573459233e-01:3.4770409123512271e+00:4.0123692998913768e-01:3.9795600610051114e+00 + CVs 20 + 1.1012447926414604e-01 2.8550387565324425e-01 2.2520162499412294e-01 + 2.2875955907347265e-01 5.5852625483203111e-01 4.4956140065175021e-01 + 3.3344239012111926e-01 8.1094208978948790e-01 6.9883438896455685e-01 + 4.2017312064585749e-01 1.0396469787273335e+00 9.7951429727688444e-01 + 4.9856974574312213e-01 1.2458884356689472e+00 1.2848151777769563e+00 + 5.7797405395948542e-01 1.4299163769779946e+00 1.6067333227873457e+00 + 6.6487017826074601e-01 1.5885511919677222e+00 1.9383585693594576e+00 + 7.6377982357622165e-01 1.7151005188938622e+00 2.2714750782611182e+00 + 8.7719179170737460e-01 1.7978745651581729e+00 2.5958059986548339e+00 + 1.0028421897412572e+00 1.8242069680559885e+00 2.8977230767873907e+00 + 1.1328347433348840e+00 1.7846341143577313e+00 3.1628683732227048e+00 + 1.2622703528437420e+00 1.6717390712870477e+00 3.3846448331192072e+00 + 1.3937244645145088e+00 1.4841204568898263e+00 3.5627081748048059e+00 + 1.5356517775786012e+00 1.2295078142766138e+00 3.7038343942197036e+00 + 1.7051105751678988e+00 9.2095678164595196e-01 3.8336319334011724e+00 + 1.9186476172933562e+00 5.8706092779385344e-01 4.0027845236428021e+00 + 2.1592041864285410e+00 2.7303230271391687e-01 4.2771288533172491e+00 + 2.3378355812483731e+00 4.9487894856652725e-02 4.6739927414533975e+00 + 2.3826442729632569e+00 -3.2303952226102384e-02 5.0082584619805814e+00 + id 13007 + loc 3.1184864044189453e-01 5.8725237846374512e-02 1078 + blend 0.0000000000000000e+00 + interp 3.5254088169794973e-01:3.0771196247366273e-01:1.2025705875134596e-01:2.8978117600595360e-01:5.9946034240131518e-01:3.5253735628913274e-01:1.1921606571979610e+00:3.3083397428604661e-01:1.9092633615001751e+00:2.4867926576274055e-01:2.9751120751755398e+00:3.2517864723944051e-01:3.4701514499394417e+00 + CVs 20 + 2.1197142807200364e-02 3.2908223338073828e-01 -2.3114711227257542e-02 + -2.1366565035137119e-02 6.1617044562401824e-01 -4.1377311211808945e-02 + -9.7858153335371956e-02 8.9088323637944900e-01 -6.3041989696299247e-02 + -1.8479426554792538e-01 1.1577274822833830e+00 -8.5772073375940366e-02 + -2.7424646519684737e-01 1.4088895438424189e+00 -1.0645092221199964e-01 + -3.5242010454452166e-01 1.6363992081990064e+00 -1.1721361213461315e-01 + -4.1004121357594581e-01 1.8418572489549843e+00 -1.1477839643871132e-01 + -4.5008948351400802e-01 2.0371382709128159e+00 -1.0691216909562573e-01 + -4.8668383838638585e-01 2.2359759117219697e+00 -1.0737742889437052e-01 + -5.4489502915355437e-01 2.4415688489481786e+00 -1.3056603355450991e-01 + -6.4895542326666988e-01 2.6358980113857404e+00 -1.8405150681481269e-01 + -8.0465775926116789e-01 2.7888421648014639e+00 -2.6421594657571112e-01 + -1.0004423861688960e+00 2.8783368133426173e+00 -3.6122830873902934e-01 + -1.2242721788578841e+00 2.8989239849306201e+00 -4.6695878793708512e-01 + -1.4872737324453693e+00 2.8572610751493634e+00 -5.7937264970862445e-01 + -1.8557572984867212e+00 2.7592523281177570e+00 -7.1025285453939224e-01 + -2.4207725270506670e+00 2.5339838752318293e+00 -8.8703939535419141e-01 + -2.9697446629017383e+00 2.0844482310420287e+00 -1.0896676201928788e+00 + -2.8811807458878884e+00 1.9345020427171860e+00 -1.1198383100027098e+00 + id 13008 + loc 9.3928617238998413e-01 1.7366334795951843e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9867488738819862e-01:3.9867090063932475e-01:2.9805908090826816e-01:2.3003199813852807e-01:9.7299279022032181e-01:3.3520216718709717e-01:2.0590166341394651e+00:3.2249371772055507e-01:2.9808599816604682e+00:3.3673637490570413e-01:3.7966080336968955e+00 + CVs 20 + -1.0960615471198343e-01 3.5499118835583254e-01 -2.4581589714132715e-01 + -2.0388616255410838e-01 6.3848437334005914e-01 -3.7830146753925886e-01 + -2.9474318779864717e-01 9.0521744245461244e-01 -4.7383755530295951e-01 + -3.8630373540508822e-01 1.1775140402060298e+00 -5.6879375402805665e-01 + -4.8380949653938887e-01 1.4531975105189150e+00 -6.6008558362405234e-01 + -5.9342292609430825e-01 1.7276665219669829e+00 -7.4421048562557202e-01 + -7.2400723898826080e-01 1.9955193060861576e+00 -8.1272517802059940e-01 + -8.8766033289732471e-01 2.2501145450034108e+00 -8.5191085573821179e-01 + -1.0954267796270487e+00 2.4788154225528807e+00 -8.4558234348677863e-01 + -1.3484029149593308e+00 2.6584291482177438e+00 -7.7961696870314112e-01 + -1.6310198967592002e+00 2.7623439303774724e+00 -6.5212594673226731e-01 + -1.9205871783769433e+00 2.7764230137439845e+00 -4.7749574761403790e-01 + -2.2007854565154461e+00 2.7011476787819255e+00 -2.7665105674321722e-01 + -2.4634043187409724e+00 2.5436574947729289e+00 -6.9952750481204751e-02 + -2.7051787210679112e+00 2.3125666196697936e+00 1.2296561862877142e-01 + -2.9252495634780091e+00 2.0151846941376208e+00 2.7970336892599257e-01 + -3.1148677390422583e+00 1.6709971789914897e+00 3.5820732530237709e-01 + -3.2530500833415963e+00 1.3462993236066987e+00 3.0699308427352689e-01 + -3.3287468996817102e+00 1.1007980379694773e+00 1.1329076413874603e-01 + id 13009 + loc 3.3714607357978821e-01 5.8474254608154297e-01 373 + blend 0.0000000000000000e+00 + interp 4.2690628036901274e-01:3.8159545351136887e-01:5.0423055970938657e-02:3.8774970847547968e-01:1.0021991966817938e+00:3.4031277747120769e-01:1.9753122182279275e+00:4.2690201130620908e-01:2.8286053926982260e+00:3.3073406245418951e-01:3.5509638693152747e+00 + CVs 20 + -4.4483847341445792e-01 5.9889576121055532e-01 -1.3358852527458198e-01 + -7.7945685418536603e-01 1.1496178419199110e+00 -3.1535285573870742e-01 + -9.9392884330668874e-01 1.6509955415585948e+00 -5.4770511072381101e-01 + -1.0879502476378606e+00 2.0911953085293340e+00 -8.1914382321220802e-01 + -1.0744165892731483e+00 2.4522948569055796e+00 -1.1108031106054259e+00 + -9.8818793590690546e-01 2.7310924213663377e+00 -1.4075227630729270e+00 + -8.6310102542009637e-01 2.9402163625007223e+00 -1.7177101651535478e+00 + -7.3237228339975202e-01 3.0924415026698981e+00 -2.0740912361605295e+00 + -6.4094803631500974e-01 3.1807876628452050e+00 -2.5106711918029632e+00 + -6.4878988643818403e-01 3.1854304681879442e+00 -3.0308841200109518e+00 + -8.1597351649823824e-01 3.1037971442472840e+00 -3.5790814883062887e+00 + -1.1707767608769983e+00 2.9486579966188962e+00 -4.0650884962499765e+00 + -1.7003641106849465e+00 2.7168055176857515e+00 -4.4500856216022004e+00 + -2.3778142680780894e+00 2.3828642721535473e+00 -4.7386341009405681e+00 + -3.1608414636313356e+00 1.9488316014880445e+00 -4.9401426097301329e+00 + -3.9818678924600941e+00 1.4600389042196409e+00 -5.0613476223504250e+00 + -4.7154375655770293e+00 9.9036035767791253e-01 -5.0435633928623407e+00 + -5.1835685664697095e+00 6.3432676601433879e-01 -4.8107943236003692e+00 + -5.6610930130756429e+00 1.3195586767323686e-01 -4.4554611512910283e+00 + id 13010 + loc 6.7031896114349365e-01 4.2653501033782959e-01 406 + blend 0.0000000000000000e+00 + interp 3.8587495356108376e-01:2.5931047701418264e-01:7.3317894232778624e-01:3.0411985917429274e-01:1.5286296166631332e+00:2.6160200788776472e-01:2.4785408539698608e+00:2.4073477434047827e-01:3.2035709376783523e+00:3.8587109481154819e-01:3.9724326725654322e+00 + CVs 20 + -2.1002031316019482e-01 2.4040563002696233e-01 -3.4916005421481155e-02 + -3.4084574468898848e-01 4.0607424319950647e-01 -9.2627327703912354e-02 + -4.5990121238329595e-01 5.4064543503869278e-01 -1.5639296586031745e-01 + -6.0138688625740011e-01 6.6611919505584705e-01 -2.2029915092774419e-01 + -7.6526262833235437e-01 7.7704669230121093e-01 -2.8451459269901075e-01 + -9.4931743290046400e-01 8.6792967659872833e-01 -3.4942092949710701e-01 + -1.1485954413004906e+00 9.3405477523401237e-01 -4.1621513531530735e-01 + -1.3555936158743773e+00 9.7246163734280278e-01 -4.8729765388836244e-01 + -1.5632847444141647e+00 9.8199127345059034e-01 -5.6457981253743372e-01 + -1.7693156311794676e+00 9.6208007128908002e-01 -6.4662511312707260e-01 + -1.9736616086877099e+00 9.1226257478247463e-01 -7.2984000362753465e-01 + -2.1710144829421290e+00 8.3412689100594961e-01 -8.1359786132370715e-01 + -2.3525727669616723e+00 7.3225229339626208e-01 -9.0103905544741281e-01 + -2.5150144412050603e+00 6.1122344402532214e-01 -9.9402718034104542e-01 + -2.6624683896542289e+00 4.7309111715028229e-01 -1.0909086188056567e+00 + -2.7984215925737024e+00 3.1905878105996144e-01 -1.1895950505777293e+00 + -2.9184664978869099e+00 1.5323701548249979e-01 -1.2905700603679486e+00 + -3.0153393590300155e+00 -1.7400877939951931e-02 -1.3960906063324769e+00 + -3.0913413110531733e+00 -1.8420341746050073e-01 -1.5088016026022135e+00 + id 13011 + loc 9.1355943679809570e-01 9.6390587091445923e-01 380 + blend 0.0000000000000000e+00 + interp 4.8936841610197468e-01:4.3123096622896123e-01:7.6629955708460429e-03:4.3428059760790044e-01:5.4748099433612696e-01:3.1671632651324683e-01:9.9642286689250970e-01:3.9646031372809154e-01:1.5265714431851671e+00:4.8936352241781367e-01:2.0089808392646353e+00:2.8367900129052592e-01:2.9832432919457790e+00:4.7898839538349430e-01:3.8147555582614698e+00 + CVs 20 + -5.3019703992578782e-01 1.8143164855283656e-01 -4.6402599328565441e-01 + -9.4445050856483648e-01 2.6713252671416765e-01 -7.8740225868029046e-01 + -1.3287961063796345e+00 3.0464012048688349e-01 -1.0788385370881306e+00 + -1.7097682656707414e+00 3.1349436784663143e-01 -1.3821777856975932e+00 + -2.0733518866295686e+00 2.8910021011264830e-01 -1.6924573425543623e+00 + -2.4079170782860349e+00 2.3152781085235774e-01 -2.0041548488687466e+00 + -2.7081816500896334e+00 1.4654758180346117e-01 -2.3132889832200738e+00 + -2.9729664143428618e+00 4.2727654326568887e-02 -2.6178371029882390e+00 + -3.1978795120212191e+00 -7.5313651865718478e-02 -2.9210885051397564e+00 + -3.3779266978448366e+00 -2.0925844705533891e-01 -3.2323688041525540e+00 + -3.5216672881675519e+00 -3.6887638369503972e-01 -3.5591047339626329e+00 + -3.6509837456890910e+00 -5.7170334514737231e-01 -3.8965293563675947e+00 + -3.7844312478159248e+00 -8.3002747886555794e-01 -4.2301444944776616e+00 + -3.9306283733553480e+00 -1.1449089367556651e+00 -4.5473578141511384e+00 + -4.0940187395965753e+00 -1.5078625779267356e+00 -4.8371642844854055e+00 + -4.2755799073327170e+00 -1.8960250907556997e+00 -5.0857064728246915e+00 + -4.4705984935966354e+00 -2.2821104431322596e+00 -5.2821966151578490e+00 + -4.6747637312862587e+00 -2.6669144334557968e+00 -5.4231819310532661e+00 + -4.8863454001501223e+00 -3.1465895554101007e+00 -5.4886392627794063e+00 + id 13012 + loc 4.9788245558738708e-01 3.3435186743736267e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7307046894909827e-01:3.3650687319536748e-01:9.4650528797834954e-01:3.9055881550559440e-01:1.4117535790825799e+00:3.5414007882280168e-01:2.0652980486014285e+00:4.6177198331037461e-01:2.6556402248945390e+00:4.7306573824440878e-01:2.9977600801797291e+00:3.3150488006066953e-01:3.3429245050922383e+00:3.5509529068756523e-01:3.9999508999369464e+00 + CVs 20 + -1.3615275327450019e-01 2.7073351435593385e-01 -1.0219188528550641e-01 + -2.6424883123240939e-01 5.2540809023461454e-01 -2.2662269265497761e-01 + -3.6194474112380248e-01 7.5074290193976323e-01 -3.7013780505646271e-01 + -4.2063127238584175e-01 9.3463386153581651e-01 -5.3291455114833031e-01 + -4.4641820187531400e-01 1.0816081974499516e+00 -7.1882663517697432e-01 + -4.4949477743187555e-01 1.2154646106956544e+00 -9.3104525303142871e-01 + -4.3786368182967794e-01 1.3807176946060917e+00 -1.1613664571413072e+00 + -4.1510696715009404e-01 1.6294139351978472e+00 -1.3798654858832995e+00 + -3.9185638100182385e-01 1.9918812198422340e+00 -1.5459583671759434e+00 + -4.1046681977681854e-01 2.4908000355519766e+00 -1.6127524281894365e+00 + -5.6756206510076246e-01 3.1139083505670464e+00 -1.4940541622885530e+00 + -9.5087175623773712e-01 3.6838793900608500e+00 -1.1226719750885366e+00 + -1.4922650068731993e+00 3.9721020635116999e+00 -5.8003673372577946e-01 + -2.0462203384873283e+00 3.9311294041952296e+00 -7.9505746070753780e-03 + -2.5160248392550431e+00 3.6509453369172626e+00 4.8322864308203606e-01 + -2.9144305065435239e+00 3.1914456711017412e+00 8.7480034993752920e-01 + -3.2565293159559374e+00 2.5130275034371174e+00 1.1560341926312681e+00 + -3.4595521944411138e+00 1.6714773702332761e+00 1.2594159998526067e+00 + -3.5018741388621413e+00 1.4124446113315146e+00 1.2269570177000377e+00 + id 13013 + loc 9.0442794561386108e-01 9.6698957681655884e-01 401 + blend 0.0000000000000000e+00 + interp 4.5413909556793158e-01:4.5413455417697590e-01:9.4732719501681939e-02:3.5942927750192122e-01:9.2138068310540411e-01:4.4136092440907138e-01:1.8130023303198803e+00:3.0883549016088047e-01:2.0836983350694802e+00:4.4650798606064862e-01:2.7628990166665739e+00:2.5623170712330767e-01:3.3013405513621201e+00 + CVs 20 + 9.8962421168668296e-02 2.7664211388590004e-01 -3.4210665737192836e-01 + 2.0692973819952926e-01 5.3585105550173306e-01 -6.6232244732638468e-01 + 3.4084058862580491e-01 7.8088637265798067e-01 -9.8893207367435698e-01 + 5.0453786576934545e-01 1.0076222950051248e+00 -1.3401933763549301e+00 + 6.8810679895833327e-01 1.2148981281485514e+00 -1.7363886376069182e+00 + 8.6365398560622342e-01 1.4124548867789448e+00 -2.2108632868931517e+00 + 9.7897695779635063e-01 1.6023851855568276e+00 -2.7872072286945215e+00 + 9.7088182737124107e-01 1.7660083395301371e+00 -3.4592031949200086e+00 + 7.9016956484845124e-01 1.8690416517736201e+00 -4.1866433755568790e+00 + 4.2765001326154461e-01 1.8806616831244587e+00 -4.9041529663691286e+00 + -7.7865120177695202e-02 1.7868513512529058e+00 -5.5487698529018292e+00 + -6.5029609310687086e-01 1.5878965079683958e+00 -6.0858700076238321e+00 + -1.2276719215248812e+00 1.2919810936158154e+00 -6.5217999730945717e+00 + -1.8110372763060232e+00 9.0587579104395533e-01 -6.8745152761842903e+00 + -2.3909058683322590e+00 4.6466196192528830e-01 -7.1537361822768011e+00 + -2.8510633928549467e+00 9.4131639228228592e-02 -7.4292650502852657e+00 + -3.0552485410068062e+00 -5.7210396806832625e-02 -7.8039879472654690e+00 + -3.0745581315372279e+00 -4.2508445630174863e-02 -8.2276340816504430e+00 + -3.4194672309455165e+00 -2.9771268632322290e-01 -8.6455167098962136e+00 + id 13014 + loc 7.6180648803710938e-01 4.0356472134590149e-01 1081 + blend 0.0000000000000000e+00 + interp 4.7838440572525659e-01:3.0142901401413985e-01:3.3748319676544791e-02:4.0334088499778470e-01:1.0004745491716300e+00:2.8030244277514849e-01:1.9486757433556279e+00:2.9697798094916950e-01:2.8995904379379267e+00:4.7837962188119937e-01:3.4186382119150083e+00 + CVs 20 + -2.0137410649422482e-02 4.9700157630873543e-01 -3.9031358599195931e-01 + -8.5017419277034739e-02 8.4176250926285823e-01 -6.1116269809925994e-01 + -1.5808173807270448e-01 1.1273070220113612e+00 -7.8068549823363065e-01 + -2.1714004992448588e-01 1.3770212871023859e+00 -9.4560654998725391e-01 + -2.6016873558070375e-01 1.5862473955293392e+00 -1.1055745369889260e+00 + -2.8488374171685238e-01 1.7515416032267226e+00 -1.2690740273796155e+00 + -2.9177095394175107e-01 1.8827884744318679e+00 -1.4573229264062175e+00 + -2.9330005107753554e-01 2.0310974691197203e+00 -1.7118355366552478e+00 + -3.4224525616925061e-01 2.3416435941122282e+00 -2.0349550608223170e+00 + -4.9608385272568301e-01 2.8467709309463163e+00 -2.1783956905513646e+00 + -6.5772694521842012e-01 3.2436137997659658e+00 -2.0493189133174190e+00 + -7.6315963151609056e-01 3.4673584264967570e+00 -1.8177438211756622e+00 + -8.1465195270521951e-01 3.5807693838895287e+00 -1.5495682541251556e+00 + -8.1672237231846534e-01 3.6227134642492516e+00 -1.2487086513715644e+00 + -7.7608641720745997e-01 3.6104649838348113e+00 -8.7339374152376115e-01 + -7.0484684816992815e-01 3.5075768660282214e+00 -3.2877133652235746e-01 + -6.0357374009658615e-01 3.1786269901062951e+00 3.4097818353620757e-01 + -4.5803211870431909e-01 2.6619094665392709e+00 8.0324424186229704e-01 + -2.8444769516699397e-01 2.3277426658365319e+00 8.1934631403973146e-01 + id 13015 + loc 6.1082065105438232e-01 1.3170826435089111e-01 382 + blend 0.0000000000000000e+00 + interp 4.7910045111622113e-01:4.7909566011171001e-01:6.8472793103602214e-04:3.1478971067883738e-01:4.9431319764361559e-01:3.0140233729653348e-01:1.1672847143108234e+00:4.0866887178362188e-01:2.2069795000806600e+00:3.7662890100358759e-01:2.9254027229769308e+00:3.9321357476151536e-01:3.4576012183030969e+00 + CVs 20 + -7.2719659807934811e-01 9.3620184503371368e-02 4.6968785695259657e-01 + -1.2035797044348830e+00 1.0404118655069605e-01 8.1646224355378516e-01 + -1.6333400625111643e+00 8.9262784313409504e-02 1.1369373592287386e+00 + -2.0981248119943565e+00 8.3772333471862193e-02 1.4627964226442789e+00 + -2.5977813128665241e+00 7.7531113298408116e-02 1.7926182560046238e+00 + -3.1261253049625193e+00 5.3831993752156970e-02 2.1217700604399288e+00 + -3.6682222599920022e+00 -1.0191147765553632e-02 2.4445897787363249e+00 + -4.2015515764192690e+00 -1.3678754589570086e-01 2.7477838030893231e+00 + -4.7003657438495425e+00 -3.3450052328251711e-01 3.0111295870706449e+00 + -5.1400350770184176e+00 -5.8804323828290372e-01 3.2187838360269816e+00 + -5.5046558456031693e+00 -8.6041038405729431e-01 3.3675778857759826e+00 + -5.8009069824925277e+00 -1.1125501576594954e+00 3.4668544493532880e+00 + -6.0619581084814378e+00 -1.3451525133065771e+00 3.5321442392391154e+00 + -6.3075113356050325e+00 -1.6151647797669970e+00 3.5684049600427521e+00 + -6.5239995948454013e+00 -1.9629745239632770e+00 3.5697283104977577e+00 + -6.7179689825687321e+00 -2.3719424234401898e+00 3.5347658327028566e+00 + -6.9267337190798663e+00 -2.8108089235507392e+00 3.4617464269838316e+00 + -7.1794991351775730e+00 -3.2539608345902513e+00 3.3772774064118587e+00 + -7.4216325555359566e+00 -3.5154788987401897e+00 3.4418357059076889e+00 + id 13016 + loc 3.6708745360374451e-01 5.2343213558197021e-01 395 + blend 0.0000000000000000e+00 + interp 4.7805612371188005e-01:4.2951143539363190e-01:1.3789479900409951e-01:3.4213698815191634e-01:1.0557023101448535e+00:4.1512123708130633e-01:1.9601490049195434e+00:2.8646948213050488e-01:2.2954492727318345e+00:4.2485150833850233e-01:2.9387044447603725e+00:4.7805134315064296e-01:3.2538306439603186e+00:3.3167623277872954e-01:3.8491168559553364e+00 + CVs 20 + 3.2393668689353505e-01 2.0584334389550762e-01 -2.6274713099787894e-01 + 5.9703332668585474e-01 3.8664351656334744e-01 -4.8204441779895785e-01 + 8.5874221290435060e-01 5.6676934304996984e-01 -6.9068617911765884e-01 + 1.1317137042529279e+00 7.5987907820872913e-01 -9.0772126253125218e-01 + 1.4183341244488512e+00 9.5953420419800040e-01 -1.1362091894640329e+00 + 1.7188132296083223e+00 1.1565606733652705e+00 -1.3801497267179030e+00 + 2.0320109117894622e+00 1.3416886355246094e+00 -1.6464669658157658e+00 + 2.3589663838937653e+00 1.5042746722603411e+00 -1.9439634933994845e+00 + 2.7027134908484025e+00 1.6286417537285791e+00 -2.2785007032373663e+00 + 3.0593303340489260e+00 1.6942948539406095e+00 -2.6494317962837526e+00 + 3.4083127804352591e+00 1.6829675720728929e+00 -3.0503503156793395e+00 + 3.7189898310252150e+00 1.5879923352368648e+00 -3.4710562068016886e+00 + 3.9710786269307454e+00 1.4154566783333724e+00 -3.9003951731807893e+00 + 4.1606897803745895e+00 1.1781045356032400e+00 -4.3272931969000901e+00 + 4.2876475718060494e+00 8.9746416926303940e-01 -4.7382508543784141e+00 + 4.3570346080670621e+00 5.9553948918802657e-01 -5.1272550139456960e+00 + 4.3815183960509767e+00 2.7759766839866762e-01 -5.4940104533380474e+00 + 4.3709996717428306e+00 -5.0606812857115546e-02 -5.8298610242384115e+00 + 4.2947909893158549e+00 -2.7363079548435154e-01 -6.0625864469171571e+00 + id 13017 + loc 5.2188605070114136e-01 8.1089317798614502e-01 415 + blend 0.0000000000000000e+00 + interp 4.7117134006503802e-01:2.2782969270341136e-01:3.3334225166330766e-01:2.7235010974041746e-01:1.0271264718716073e+00:2.8671016329147075e-01:1.9139492320631537e+00:3.8249411697945934e-01:2.9307964775880864e+00:4.7116662835163742e-01:3.5156493225263974e+00 + CVs 20 + 3.8082305973781588e-01 2.2068307554648386e-01 6.2813153820800591e-02 + 6.5412233893394189e-01 3.7106239211543229e-01 9.0724139814347210e-02 + 8.8916852324244022e-01 4.9861695204891243e-01 1.1944136083809037e-01 + 1.1255682273007801e+00 6.3410325134756451e-01 1.7120922196401389e-01 + 1.3626791634578164e+00 7.7556537728103025e-01 2.4435175156907213e-01 + 1.5991468716068384e+00 9.2190062320911692e-01 3.3690357474811161e-01 + 1.8350896646029486e+00 1.0738631272666672e+00 4.4953591137201254e-01 + 2.0723052066201939e+00 1.2323991308483537e+00 5.8434157707904011e-01 + 2.3119286137500268e+00 1.3968983847226930e+00 7.4029508158718094e-01 + 2.5541582242978689e+00 1.5656143226124741e+00 9.1463853614910939e-01 + 2.8036574665441498e+00 1.7377951743580207e+00 1.1180973134105863e+00 + 3.0772398492209483e+00 1.9102140467189073e+00 1.3862374033914571e+00 + 3.4067931352267595e+00 2.0631820799785818e+00 1.7386743142544909e+00 + 3.8172955566936162e+00 2.1642526466386665e+00 2.1160764001518544e+00 + 4.2936524504683051e+00 2.2021931200257896e+00 2.4324776893567961e+00 + 4.8062072402941345e+00 2.1827392591652606e+00 2.6624728584351494e+00 + 5.3304911698530129e+00 2.1106493461687750e+00 2.8129466532395782e+00 + 5.8348623878770081e+00 2.0004259699898927e+00 2.8838594662745516e+00 + 6.0967908372009578e+00 1.9974730617659286e+00 2.8122186560423899e+00 + id 13018 + loc 2.6816862821578979e-01 9.0912604331970215e-01 417 + blend 0.0000000000000000e+00 + interp 5.3637190688716119e-01:3.3614365304174210e-01:6.9653722956263708e-02:5.3636654316809229e-01:7.0870863110716342e-01:5.0177683034588694e-01:1.0001125272184415e+00:3.6908429722018482e-01:1.3751071464874349e+00:4.7683321594604217e-01:1.8096128731005074e+00:4.9362312905711392e-01:2.0207669560402097e+00:4.3321506324574471e-01:2.3913526043129343e+00:3.2723154587781006e-01:2.9190732128791810e+00:3.4398766922541069e-01:3.5207535426108230e+00 + CVs 20 + -6.2088842813647523e-02 1.9801309837424419e-01 -1.5273673889492057e-01 + -7.7259980587366328e-02 3.4347094157807878e-01 -2.2845484344879202e-01 + -7.0629721663612602e-02 4.7553234913842768e-01 -2.8195733162540715e-01 + -5.9421122641358654e-02 6.1738351768023580e-01 -3.5162794896928201e-01 + -4.3254453537736215e-02 7.6821817420511551e-01 -4.4338757778243054e-01 + -2.1670125070978929e-02 9.2525350853012989e-01 -5.6231292565474778e-01 + 6.0490699628449884e-03 1.0838004611063567e+00 -7.1117555467972426e-01 + 4.1613773579498248e-02 1.2383273608694785e+00 -8.8892721395040897e-01 + 8.7085582330476641e-02 1.3848395136202778e+00 -1.0934921188167521e+00 + 1.4182198308714333e-01 1.5206894867864298e+00 -1.3288837011654895e+00 + 2.0128784313553005e-01 1.6405423142067301e+00 -1.6019870237444667e+00 + 2.6210736518482280e-01 1.7375287823552588e+00 -1.9077449967454407e+00 + 3.2595591697946369e-01 1.8097963862296287e+00 -2.2305596907160616e+00 + 3.9452811655049858e-01 1.8592873033143194e+00 -2.5602906338555913e+00 + 4.6409668755437905e-01 1.8859647019900945e+00 -2.8975522939189364e+00 + 5.2826705046525513e-01 1.8881255491487836e+00 -3.2438110279855117e+00 + 5.8482680465138226e-01 1.8671889829210206e+00 -3.5910561153923526e+00 + 6.3771325171352955e-01 1.8288181763917661e+00 -3.9247749318878133e+00 + 7.0870279451891682e-01 1.8080292400364764e+00 -4.1965435160053985e+00 + id 13019 + loc 1.0971806012094021e-02 6.1825078725814819e-01 400 + blend 0.0000000000000000e+00 + interp 4.4151316888970732e-01:2.4169334748257326e-01:4.0386123462378165e-01:3.9316582629281066e-01:1.1370982396854834e+00:4.4150875375801846e-01:1.9378482517384659e+00:3.2227420758565239e-01:2.7379055245273403e+00:4.0258620664028916e-01:3.0719305052969124e+00:4.1456706760412071e-01:3.9996018363528716e+00 + CVs 20 + -2.1438635140650730e-01 3.1002751302027226e-01 -6.8395434742537065e-02 + -4.1973375275597330e-01 6.3658642838484725e-01 -1.6708609409981587e-01 + -6.2172545762784515e-01 9.6877417244865016e-01 -3.0274108335253319e-01 + -8.2377868780394892e-01 1.2977326899636914e+00 -4.8147774814294864e-01 + -1.0267487868522613e+00 1.6150438016106672e+00 -7.0871786391843639e-01 + -1.2289424083438527e+00 1.9102338186921990e+00 -9.8701151542215626e-01 + -1.4253637819217737e+00 2.1720919768843405e+00 -1.3173748036906476e+00 + -1.6063056610897506e+00 2.3888759093825129e+00 -1.6991758549994582e+00 + -1.7556686976608136e+00 2.5478426416738897e+00 -2.1295544546382650e+00 + -1.8517703335256011e+00 2.6356520219124393e+00 -2.5996972321025984e+00 + -1.8832419911125009e+00 2.6448874799754627e+00 -3.0890071302324946e+00 + -1.8700055899559966e+00 2.5794399751392758e+00 -3.5755870032719370e+00 + -1.8466703370263178e+00 2.4391275466101705e+00 -4.0493709976139751e+00 + -1.8401701271071123e+00 2.2038587548567397e+00 -4.4951416047843740e+00 + -1.8717929550622641e+00 1.8644286804989427e+00 -4.8806428452150339e+00 + -1.9534547649737954e+00 1.4633243817039214e+00 -5.1920612216376680e+00 + -2.0843992240943718e+00 1.0531984033895214e+00 -5.4559197198134282e+00 + -2.2364916444946252e+00 6.5663440154663388e-01 -5.7015403596787255e+00 + -2.2469094195305250e+00 3.1411376812203384e-01 -5.9644715940481641e+00 + id 13020 + loc 2.2219336032867432e-01 4.9554440379142761e-01 411 + blend 0.0000000000000000e+00 + interp 3.9293739504361375e-01:3.0037981414781745e-01:1.8936158407167969e-01:2.9172608434178615e-01:1.1919009250818275e+00:3.9293346566966331e-01:1.9573014910677986e+00:3.0665860889136082e-01:2.2081591713463578e+00:2.7550610442554047e-01:3.1881342406516522e+00 + CVs 20 + -3.1038639902630852e-02 1.4310988533231458e-01 -7.6269618435318309e-01 + -1.0471207397883336e-01 1.9146867976734983e-01 -1.3302149693656922e+00 + -1.7938309303130898e-01 2.0008838111785754e-01 -1.8594722885826629e+00 + -2.4076045809127838e-01 1.8703161083718045e-01 -2.4236628668737810e+00 + -2.8868342185738055e-01 1.4243915382762662e-01 -3.0188012897879561e+00 + -3.2651426621655499e-01 5.9120982424630597e-02 -3.6380231996723227e+00 + -3.5767872481441615e-01 -6.8667154293335697e-02 -4.2697768849764737e+00 + -3.8377620751513614e-01 -2.4813026890810552e-01 -4.8958803431323163e+00 + -4.0791218022311859e-01 -4.8588666901770416e-01 -5.4903310560013869e+00 + -4.3833968314835503e-01 -7.8199185133589921e-01 -6.0196982759920621e+00 + -4.8198006629093182e-01 -1.1258459761307575e+00 -6.4527303215934317e+00 + -5.3221840017460764e-01 -1.4975707977808215e+00 -6.7817832651312662e+00 + -5.7133993891022095e-01 -1.8766945506137191e+00 -7.0269776468937426e+00 + -5.8465850906884231e-01 -2.2476375622002491e+00 -7.2122314341332920e+00 + -5.6404629556612484e-01 -2.6002732480951685e+00 -7.3524209229471644e+00 + -5.0366191126602755e-01 -2.9341926994812346e+00 -7.4569811013161917e+00 + -4.0088815125771293e-01 -3.2555906739736029e+00 -7.5340609672344474e+00 + -2.6538620293967108e-01 -3.5602665254725139e+00 -7.5945209429918821e+00 + -9.6324726394728749e-02 -3.8242503214150352e+00 -7.7236920366133539e+00 + id 13021 + loc 7.7146184444427490e-01 9.6922427415847778e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3762548246252841e-01:4.1192815195778820e-01:9.9876719027063743e-02:3.1192790237412132e-01:9.2697066916074933e-01:3.0749068112638422e-01:1.6194389646092875e+00:3.1670617153295300e-01:2.0540795288649281e+00:4.3762110620770384e-01:2.9535729053178317e+00:3.1155541237830614e-01:3.5344576367094946e+00 + CVs 20 + 7.6900441612533232e-02 3.8086868791667028e-01 -2.6827827389113712e-01 + 1.5397311914758621e-01 7.5321465403789989e-01 -5.1806931627060870e-01 + 2.5076981881465987e-01 1.1210452525159971e+00 -7.6240537524193108e-01 + 3.8332616375494544e-01 1.4787982850573316e+00 -1.0126655823105961e+00 + 5.6233513981800831e-01 1.8100546588277771e+00 -1.2743621925465340e+00 + 7.8984829307503335e-01 2.0900442585845815e+00 -1.5519926189006430e+00 + 1.0560922332888378e+00 2.2919403142217969e+00 -1.8454404982571977e+00 + 1.3430866017071572e+00 2.3982726994598433e+00 -2.1471132906126056e+00 + 1.6315402533765613e+00 2.4066630196250074e+00 -2.4451502574513970e+00 + 1.9050711578627100e+00 2.3268138694825780e+00 -2.7298674277456820e+00 + 2.1500799159886288e+00 2.1732574419719457e+00 -2.9979596734208807e+00 + 2.3565094587063613e+00 1.9581137386164089e+00 -3.2529389985717843e+00 + 2.5224964556957010e+00 1.6981179354470912e+00 -3.4990746911486368e+00 + 2.6550045889236142e+00 1.4230348929726961e+00 -3.7306624373333062e+00 + 2.7663362795732569e+00 1.1518773083146101e+00 -3.9326970860421162e+00 + 2.8647876613546854e+00 8.6124558517866090e-01 -4.1082078570531149e+00 + 2.9364715984205900e+00 5.2227952224071794e-01 -4.2958813014264727e+00 + 2.9317742608198607e+00 1.7208109912397362e-01 -4.5509383957111771e+00 + 2.7186396127529795e+00 -7.1564526801234374e-02 -4.9345837702473876e+00 + id 13022 + loc 4.6900436282157898e-01 1.1724802106618881e-01 1069 + blend 0.0000000000000000e+00 + interp 3.4592122899594091e-01:2.7780465003231170e-01:1.4249883072584679e-02:3.2625795107558453e-01:9.3284990699861448e-01:3.3872057317943710e-01:1.3558419938286745e+00:3.0435635869295041e-01:2.0528020470259514e+00:3.1157115781538014e-01:2.8947254829572087e+00:3.4591776978365096e-01:3.4299187282704295e+00 + CVs 20 + -1.4966673033130551e-01 2.4936717623172194e-01 2.3206814048501362e-02 + -2.9112375715285710e-01 4.8244729152489768e-01 1.6041242278473838e-02 + -4.0603204347665300e-01 7.0097183668593732e-01 -3.1113756822898075e-03 + -4.8999650384020949e-01 9.0805145878806659e-01 -3.0333876687054895e-02 + -5.4629780120773330e-01 1.0944903095195988e+00 -8.2882754203359887e-02 + -5.7099444704659996e-01 1.2379357332942018e+00 -1.6819867085370999e-01 + -5.6378814690645451e-01 1.3367371543710698e+00 -2.8207019510487741e-01 + -5.2483016023761497e-01 1.4417912588577964e+00 -4.0817173666107887e-01 + -4.4056426737222343e-01 1.6062487621620143e+00 -5.1343851409604324e-01 + -3.0181281592373610e-01 1.8656498866937370e+00 -5.7805245171062125e-01 + -1.3935015328519956e-01 2.2668052606444755e+00 -5.6513529997235046e-01 + -5.1133228748713622e-02 2.7767325090103414e+00 -3.9646559487456767e-01 + -9.5329602560053628e-02 3.2338244537843757e+00 -5.5076241718044150e-02 + -2.2154452677847092e-01 3.5147672622603063e+00 4.1626907760460430e-01 + -3.5568845358850476e-01 3.5724541498285465e+00 9.5602041127014459e-01 + -4.9032132098172909e-01 3.4439851855264236e+00 1.5027028725502034e+00 + -6.7142451430264138e-01 3.1861131501590649e+00 2.0225484189676677e+00 + -8.8051225166746583e-01 2.8039774869039427e+00 2.4737438694426026e+00 + -7.5667430052656848e-01 2.5700475959498088e+00 2.5536292143764170e+00 + id 13023 + loc 6.3872313499450684e-01 3.1092217564582825e-01 1080 + blend 0.0000000000000000e+00 + interp 3.2857357153713995e-01:3.2184479359239604e-01:4.0378315182243230e-01:3.0738985374805922e-01:1.2261610688650291e+00:3.1878494384233202e-01:2.0000028095590610e+00:3.2857028580142461e-01:2.6617350893397189e+00:2.8508453518796562e-01:3.0894626676139909e+00:3.0200796447686445e-01:3.9244924166552955e+00 + CVs 20 + -7.8862233631385975e-02 4.1586717737890028e-01 -4.5750642403129521e-01 + -1.6572363429587172e-01 7.2896383707342449e-01 -7.2095405390450662e-01 + -2.6766622115324967e-01 1.0012162964265201e+00 -9.2167735803972395e-01 + -3.9660705810738650e-01 1.2649931425971099e+00 -1.1052778289753500e+00 + -5.5385208017125964e-01 1.5135991522561167e+00 -1.2639400645541092e+00 + -7.3510108107856631e-01 1.7366809615866732e+00 -1.3896431476908864e+00 + -9.2748221894009475e-01 1.9208682673129291e+00 -1.4743888430928396e+00 + -1.1107078150162741e+00 2.0569151698176089e+00 -1.5161004311547106e+00 + -1.2656596712555774e+00 2.1480403951683620e+00 -1.5229896814975525e+00 + -1.3875889451655488e+00 2.2066836790751578e+00 -1.5058463323462148e+00 + -1.4859143377678399e+00 2.2387991463061208e+00 -1.4656873707193627e+00 + -1.5668775226678340e+00 2.2397558303382281e+00 -1.3962874661754798e+00 + -1.6278720213953772e+00 2.2050924157845602e+00 -1.2931763424127900e+00 + -1.6650616962321341e+00 2.1339766398045779e+00 -1.1527223320130908e+00 + -1.6797104288503921e+00 2.0277581451204183e+00 -9.6045746288880873e-01 + -1.6862689173392196e+00 1.8826715424368610e+00 -6.7995984195271597e-01 + -1.7135637236152335e+00 1.6495236257950603e+00 -3.0957432811589924e-01 + -1.7448074034719603e+00 1.2857222740863632e+00 -1.4573931485946046e-02 + -1.6632479788289334e+00 8.9524646850103118e-01 -2.7240676215546378e-02 + id 13024 + loc 6.9354170560836792e-01 2.0861615240573883e-01 403 + blend 0.0000000000000000e+00 + interp 4.6875980312727239e-01:4.6875511552924115e-01:3.2483985673393390e-01:3.6677745784729177e-01:9.1947687964527969e-01:3.6460050575756786e-01:1.2538168788639610e+00:3.5616680203675460e-01:1.9886141023716555e+00:3.8204286684303262e-01:2.8945284401156517e+00:3.9256462774547662e-01:3.1441233328500320e+00:3.5041018977026811e-01:3.8189299455677546e+00 + CVs 20 + -5.9960843032636574e-02 4.0427362640525161e-01 1.9719390458001429e-01 + -7.8831501392454539e-02 7.8607171587929470e-01 3.8439669078054239e-01 + -1.0530656043388131e-01 1.1725775382452042e+00 5.9549981504982741e-01 + -1.5320277138961080e-01 1.5578904938372573e+00 8.5956375349687053e-01 + -2.0886118692758304e-01 1.9147329203287529e+00 1.1858809230245084e+00 + -2.3877317903035300e-01 2.2201282420597686e+00 1.5610428464137363e+00 + -2.0821571753381329e-01 2.4626644535358828e+00 1.9667422808770956e+00 + -9.4061424537986271e-02 2.6291299949453135e+00 2.3820257586490667e+00 + 1.0694987030058267e-01 2.7066193961372442e+00 2.7755161571585329e+00 + 3.7348601907869639e-01 2.6971634811178742e+00 3.1230213648653593e+00 + 6.7570517922600848e-01 2.6102616833296568e+00 3.4267001829042130e+00 + 9.8397803608444101e-01 2.4508181949334373e+00 3.7085398074945708e+00 + 1.2676829112719652e+00 2.2271240843878202e+00 3.9872265150855846e+00 + 1.5073904575093269e+00 1.9598608854192971e+00 4.2657324346716514e+00 + 1.6998576354417254e+00 1.6737498916224658e+00 4.5577766468435605e+00 + 1.8320364015451402e+00 1.4017649200149076e+00 4.8903640410751006e+00 + 1.8617779600077013e+00 1.1951398117967105e+00 5.2514703112079326e+00 + 1.7986191755465506e+00 1.0559001566166057e+00 5.6059647727019479e+00 + 1.7841763448245096e+00 8.8434560820566210e-01 6.0753778769126328e+00 + id 13025 + loc 4.0530106425285339e-01 3.9692929387092590e-01 373 + blend 0.0000000000000000e+00 + interp 3.9881330587253316e-01:2.5672526226211390e-01:5.9547127331188676e-01:3.4367477325072343e-01:1.0366162082423789e+00:3.1544845425547691e-01:1.8674018203256930e+00:3.4341861347256802e-01:2.5738139079800266e+00:3.9880931773947448e-01:3.0417614776649780e+00:3.1969430596904763e-01:3.7106048022517877e+00 + CVs 20 + -1.0155862306636362e-01 7.1793060601902470e-01 2.7166465985478860e-01 + -1.9288364574845962e-01 1.4655372746810895e+00 5.1226407559385789e-01 + -3.1673814607810963e-01 2.2213532526546040e+00 6.5626643040184729e-01 + -5.1186350399014446e-01 2.9353840083446854e+00 6.3081023463586794e-01 + -7.9547626557602635e-01 3.5377934777336248e+00 3.9383648691359641e-01 + -1.1540028571849130e+00 3.9393721595201674e+00 -3.7856228109688583e-02 + -1.5494046013275751e+00 4.0383777184124510e+00 -6.0623096042871616e-01 + -1.9425436978374595e+00 3.8014776498925187e+00 -1.2133112654240454e+00 + -2.3033667324754061e+00 3.2695074003717925e+00 -1.7773662841193028e+00 + -2.5899499884407251e+00 2.5020768800405340e+00 -2.2483997481110327e+00 + -2.7668892226521646e+00 1.5739399372584881e+00 -2.5864139793445262e+00 + -2.7812968663936872e+00 5.5683789960391472e-01 -2.7937982900439473e+00 + -2.5624658266919176e+00 -5.0526634622746047e-01 -2.9739712990205343e+00 + -2.0738959075397498e+00 -1.5256873009478973e+00 -3.2842721370374690e+00 + -1.4348949130676700e+00 -2.3552420807037273e+00 -3.9059228289169150e+00 + -9.9492898269050101e-01 -2.7941553299465580e+00 -4.9233732192755308e+00 + -9.9827190214437544e-01 -2.8196695634559323e+00 -6.0940300432059562e+00 + -1.5010739484314004e+00 -2.6393374022511202e+00 -7.1520612061329221e+00 + -2.0268671521037973e+00 -2.4444694415446397e+00 -7.8433712635828705e+00 + id 13026 + loc 3.2629916071891785e-01 9.1245299577713013e-01 377 + blend 0.0000000000000000e+00 + interp 5.6352834934646723e-01:4.1276562036066083e-01:8.3107368720925612e-02:4.8726045703624604e-01:5.5482881617762758e-01:4.1444105058841146e-01:9.7757904569299481e-01:3.0994736887176166e-01:1.8536318074381404e+00:5.6352271406297383e-01:2.2070069384273463e+00:4.2116271642873104e-01:2.9838722812344756e+00:4.1361688268867280e-01:3.6383305599944982e+00 + CVs 20 + -6.9300314219240988e-01 3.0247647761298285e-01 -5.0004099192750717e-01 + -1.2924109434086168e+00 4.8279762074462496e-01 -8.3638646750868784e-01 + -1.8993262632504224e+00 6.1812902588844110e-01 -1.1237791066657206e+00 + -2.5541490305087331e+00 7.4531884862369213e-01 -1.4133858277760079e+00 + -3.2395311490679668e+00 8.5981267850684628e-01 -1.7166546128575155e+00 + -3.9370750883229921e+00 9.3932629527443368e-01 -2.0421960877301739e+00 + -4.6280379899264661e+00 9.5412687480739256e-01 -2.3965657550045147e+00 + -5.2857424438592826e+00 8.7898397564214514e-01 -2.7805768100844119e+00 + -5.8776839230890303e+00 7.0117039605259346e-01 -3.1767176157046109e+00 + -6.3779561014080155e+00 4.2351002897925127e-01 -3.5518724838695461e+00 + -6.7750750188646514e+00 5.5670899335710455e-02 -3.8797944047073285e+00 + -7.0663819190137556e+00 -3.9032923799270236e-01 -4.1473479687695587e+00 + -7.2533197823424480e+00 -8.8395586415007754e-01 -4.3478694127501436e+00 + -7.3539843607445592e+00 -1.3775514678401493e+00 -4.4990697104883086e+00 + -7.4015952695613514e+00 -1.8347265255201983e+00 -4.6346228286519384e+00 + -7.4231670045199003e+00 -2.2141116954785298e+00 -4.7707675208691622e+00 + -7.4251682051249031e+00 -2.4865725927219255e+00 -4.9060089262951303e+00 + -7.4116211726006851e+00 -2.6918286891843728e+00 -5.0481647291657881e+00 + -7.4682952497441955e+00 -2.9264955472681624e+00 -5.2033374852656298e+00 + id 13027 + loc 9.6652036905288696e-01 7.8168326616287231e-01 402 + blend 0.0000000000000000e+00 + interp 4.1404319145173091e-01:4.1054214324485672e-01:7.3876127651317791e-03:2.7452804715871670e-01:7.4888759120115944e-01:4.1403905101981642e-01:1.0082245645959929e+00:3.0049231107391056e-01:2.0009749404191863e+00:1.7006240298801323e-01:2.5153155479780742e+00:3.1992110050198491e-01:3.2106827588431313e+00 + CVs 20 + -8.3088927559603759e-02 1.1441681827808331e-01 -2.3579133997271223e-01 + -1.2787783141400511e-01 2.2751579800776983e-01 -4.7826559526764534e-01 + -1.4898815757507294e-01 3.3510155747637388e-01 -7.2363060515128874e-01 + -1.5140303572604777e-01 4.3572033680247058e-01 -9.6667357095091555e-01 + -1.3435283505119205e-01 5.2892395519645663e-01 -1.2024279618448301e+00 + -8.8310683309415383e-02 6.0866698693674359e-01 -1.4184150116428045e+00 + -2.2292226020355632e-03 6.6419846356233792e-01 -1.5968123341022633e+00 + 1.2035253951158054e-01 6.8866725108893623e-01 -1.7270846984510266e+00 + 2.5990819847840602e-01 7.0266098953146461e-01 -1.8300961910273972e+00 + 4.1913987716744433e-01 7.1548470904662920e-01 -1.8843939811926256e+00 + 5.7141060350906081e-01 6.3969235431698646e-01 -1.7654758209951620e+00 + 6.6825074221861613e-01 5.2096910546284581e-01 -1.6432574852342161e+00 + 8.2531843934603666e-01 4.7927069379593035e-01 -1.6883465685888837e+00 + 1.0249860142188629e+00 4.6532701617824790e-01 -1.8987906594649699e+00 + 1.1871929933606635e+00 4.2771715925207854e-01 -2.2092487333780371e+00 + 1.2806767641880539e+00 3.5569190820599905e-01 -2.5542400455371403e+00 + 1.2984431119024036e+00 2.5154239080075458e-01 -2.9196415837994660e+00 + 1.2383344196464945e+00 1.2146514246696971e-01 -3.2858472131594940e+00 + 1.2757858130111783e+00 6.7337119642785881e-02 -3.4589340879745754e+00 + id 13028 + loc 6.4078521728515625e-01 2.4151252582669258e-02 1078 + blend 0.0000000000000000e+00 + interp 4.2923703853131956e-01:4.0413758703779878e-01:7.0762297876114888e-01:3.9998306639891962e-01:1.1711773590050856e+00:4.2923274616093426e-01:1.8818366993255555e+00:3.7506822548057989e-01:2.1502504638668682e+00:2.9853685482675496e-01:2.8895963949907308e+00:3.0272362323509183e-01:3.1165770918382600e+00:3.0209733245903675e-01:3.9723081519463204e+00 + CVs 20 + -1.3714458229148765e-01 3.4843269305626190e-01 -1.2800207526712293e-02 + -2.8795244429536554e-01 7.0317176304879281e-01 6.1698295208600928e-04 + -4.6355948107759576e-01 1.0591011040023099e+00 4.6483623238784133e-02 + -6.7066034411834796e-01 1.4049332756571338e+00 1.3275422018982519e-01 + -9.1061239809778749e-01 1.7222492934442926e+00 2.7004142676190757e-01 + -1.1777116681326123e+00 1.9846285123986505e+00 4.7014126450565674e-01 + -1.4558398743824459e+00 2.1624545264450501e+00 7.3481012736658802e-01 + -1.7232705485430788e+00 2.2367693204440049e+00 1.0475682803801525e+00 + -1.9618097995455683e+00 2.2027996398528078e+00 1.3807604781357199e+00 + -2.1610372209247211e+00 2.0663905705607992e+00 1.7039611182534742e+00 + -2.3180434194122772e+00 1.8419601166773052e+00 1.9910688666959004e+00 + -2.4353104650601107e+00 1.5491145305490568e+00 2.2253637472520014e+00 + -2.5177887729700474e+00 1.2090380640034550e+00 2.3968398973876437e+00 + -2.5719784761752686e+00 8.4093871140558918e-01 2.4980884544584572e+00 + -2.6013573391811575e+00 4.6330386476431928e-01 2.5075175140541415e+00 + -2.5922615052050131e+00 1.2272749321335952e-01 2.3501129476463349e+00 + -2.5084763087303070e+00 -4.1037894063455926e-03 1.9240744040768680e+00 + -2.3762717561684199e+00 2.2801326145212042e-01 1.4463302589850588e+00 + -2.3486513168128123e+00 1.3491987026302610e-02 1.2115856853847657e+00 + id 13029 + loc 3.6707568168640137e-01 9.0552043914794922e-01 393 + blend 0.0000000000000000e+00 + interp 4.4579235192258382e-01:3.0871464488307809e-01:1.1948989460471193e-01:3.6268652602966978e-01:1.0963324934980672e+00:2.7193633559156605e-01:2.2092546641979847e+00:3.1706123788026830e-01:2.9923035956021975e+00:4.4578789399906460e-01:3.8639230825085615e+00 + CVs 20 + -2.1898569538399049e-01 3.1825476533984431e-01 -1.9300462312817124e-01 + -4.2172932856581430e-01 6.5813288161483841e-01 -3.7478720147363709e-01 + -5.9473686344509524e-01 1.0225904488741115e+00 -5.5282547294847340e-01 + -7.4575408983095304e-01 1.4105750664185046e+00 -7.2532383418903801e-01 + -8.9806511332154382e-01 1.8192845824460933e+00 -8.8550878430279534e-01 + -1.0738176605299459e+00 2.2453349967392513e+00 -1.0298798864934771e+00 + -1.2951456533185151e+00 2.6892104620820385e+00 -1.1602235779244088e+00 + -1.5948232310010950e+00 3.1471824771889727e+00 -1.2825135361767239e+00 + -2.0024623583457446e+00 3.5905776686440340e+00 -1.4098564592817788e+00 + -2.5100327254029495e+00 3.9745516552552620e+00 -1.5801123740911671e+00 + -3.0852206740733132e+00 4.2748233761897385e+00 -1.8359033944648588e+00 + -3.7417798610332795e+00 4.4778500561298813e+00 -2.1982651433109601e+00 + -4.4861024480039831e+00 4.5260264229496219e+00 -2.6644885428505547e+00 + -5.2452836249534904e+00 4.3631906257203843e+00 -3.2015275964046448e+00 + -5.9242004167900912e+00 3.9984249661859717e+00 -3.7648870001756709e+00 + -6.5001750241455012e+00 3.4756066510699304e+00 -4.2884325291031447e+00 + -7.0337599771271915e+00 2.8422073261387939e+00 -4.6588739728164343e+00 + -7.5509123030044387e+00 2.1793595683922034e+00 -4.8034252860305617e+00 + -7.8953066091850292e+00 1.6268082713388055e+00 -4.9272906879070000e+00 + id 13030 + loc 8.1865882873535156e-01 5.9031414985656738e-01 382 + blend 0.0000000000000000e+00 + interp 4.2632559728962777e-01:3.4741503208311320e-01:2.0550203949798496e-01:4.2632133403365491e-01:9.9150017044695304e-01:3.2127457788930852e-01:1.4844895211271105e+00:4.2532644497580530e-01:1.9995137192520325e+00:2.6412161552656455e-01:2.6647353466863408e+00:3.9063193412348712e-01:3.7013355602635984e+00 + CVs 20 + 1.0194109609928423e+00 1.6735974977320589e-01 -5.6511100411981929e-01 + 1.7198551408923475e+00 1.8722840040239538e-01 -9.7394667731926665e-01 + 2.3659047170729770e+00 1.5535624045677837e-01 -1.3439980946769898e+00 + 3.0566004962930915e+00 1.0257940380248165e-01 -1.7194280874390859e+00 + 3.7795817028128362e+00 1.8430328324862688e-02 -2.0981310247762495e+00 + 4.5181394232441292e+00 -1.1147808101423429e-01 -2.4720721501074041e+00 + 5.2521183350618665e+00 -3.0258936635466016e-01 -2.8183467660629393e+00 + 5.9570693390891680e+00 -5.6582729087603734e-01 -3.1082533727856774e+00 + 6.6082166420036925e+00 -9.0051051592117259e-01 -3.3253874404297776e+00 + 7.1833558744440635e+00 -1.2977280293397364e+00 -3.4724722428366919e+00 + 7.6616863283561170e+00 -1.7470292914878123e+00 -3.5602099067986699e+00 + 8.0272746874498431e+00 -2.2365235282149638e+00 -3.5999328752317838e+00 + 8.2782679454536368e+00 -2.7534581085648178e+00 -3.6080494599901831e+00 + 8.4261004587300832e+00 -3.2865328327088186e+00 -3.6060530174452090e+00 + 8.4891291061116441e+00 -3.8277517412964386e+00 -3.6206649176639525e+00 + 8.4973831248096587e+00 -4.3849927286715804e+00 -3.6823376618523511e+00 + 8.4873132453725244e+00 -4.9651160882546410e+00 -3.8158205056951888e+00 + 8.4768903529092086e+00 -5.5250552162296218e+00 -4.0359197134094886e+00 + 8.4536237743307225e+00 -5.9543477268495160e+00 -4.3149789302430044e+00 + id 13031 + loc 8.7981849908828735e-02 6.5232354402542114e-01 399 + blend 0.0000000000000000e+00 + interp 3.5383593103688987e-01:3.5383239267757954e-01:2.9744150254509216e-01:2.6832678809380622e-01:9.9374334120205488e-01:2.7000116606918628e-01:1.6700334561965855e+00:2.7304253669971817e-01:2.2379114649792555e+00:2.7645067823520447e-01:3.4524427692240094e+00 + CVs 20 + -2.1618063305283997e-01 3.4798922068045562e-01 -2.6257340517875016e-01 + -4.1376653103835515e-01 7.1039817291417240e-01 -5.2536626409100451e-01 + -5.9292532298857270e-01 1.0845911140827347e+00 -8.1296853919596224e-01 + -7.5829141186275895e-01 1.4727430920176166e+00 -1.1402752643572946e+00 + -9.2960633331498210e-01 1.8800565881368059e+00 -1.5159526400401513e+00 + -1.1580099132047126e+00 2.3047349001956210e+00 -1.9430793262111967e+00 + -1.5301577542990816e+00 2.7150662180997274e+00 -2.4128842866333771e+00 + -2.1403095136751586e+00 3.0028669096865164e+00 -2.8893312985754620e+00 + -2.9655053586682012e+00 2.9927957375204364e+00 -3.2761284476942811e+00 + -3.8018016740139089e+00 2.6331783521214587e+00 -3.4940708469029693e+00 + -4.4723056798782945e+00 2.0435521642215737e+00 -3.5778815747170341e+00 + -4.9212684269400304e+00 1.4043204299922305e+00 -3.6321946796512630e+00 + -5.2073376866440979e+00 8.7752846753220715e-01 -3.7354499790923925e+00 + -5.4388059229361696e+00 5.6206649788363328e-01 -3.8725820860104134e+00 + -5.6749896903756740e+00 4.9781522294668284e-01 -3.9793690776774033e+00 + -5.8584642644399780e+00 6.8593060205402623e-01 -4.0017037745615065e+00 + -5.8296808552180348e+00 1.0614370338655548e+00 -3.8872886079393862e+00 + -5.7013559607234923e+00 1.3173267524981123e+00 -3.7143019414868021e+00 + -6.0277384662663094e+00 1.4260419405764575e+00 -3.7275266882901725e+00 + id 13032 + loc 6.0328727960586548e-01 8.2726925611495972e-01 395 + blend 0.0000000000000000e+00 + interp 4.3590155422057059e-01:2.8568384242322242e-01:2.6155292629653049e-01:3.1463754943874972e-01:1.0046315442700648e+00:4.1686819954348975e-01:1.9368457877287204e+00:2.7766543354116074e-01:2.3146030287804118e+00:4.3589719520502840e-01:2.9085421940245624e+00:2.9437687429514015e-01:3.6244444403143548e+00 + CVs 20 + 4.7417566426889396e-01 2.0015871705240104e-01 -3.4981034041476866e-01 + 8.3295386892335965e-01 3.3431170398382926e-01 -6.3683274441556748e-01 + 1.1638499193039551e+00 4.5320122652122946e-01 -9.1620075122590938e-01 + 1.5060401505581140e+00 5.7972048746020688e-01 -1.2130405908447028e+00 + 1.8610833251573564e+00 7.0856930847591304e-01 -1.5295548384675439e+00 + 2.2275786667519943e+00 8.3216176594804647e-01 -1.8687166778285986e+00 + 2.6026676193623826e+00 9.4231561747005366e-01 -2.2360573310649920e+00 + 2.9859661107348470e+00 1.0271690644121778e+00 -2.6379356253269970e+00 + 3.3774511003859660e+00 1.0674930058464553e+00 -3.0766395885208029e+00 + 3.7669097200987838e+00 1.0377474264075948e+00 -3.5466473207081517e+00 + 4.1289010062859255e+00 9.1833168919889840e-01 -4.0365835859037347e+00 + 4.4396098031487279e+00 7.0361729768282610e-01 -4.5304545575118373e+00 + 4.6896305875506989e+00 4.0015908966546609e-01 -5.0071388045561465e+00 + 4.8755691438443938e+00 2.6581799779222148e-02 -5.4409668910544564e+00 + 4.9962533831613225e+00 -3.9068526780725232e-01 -5.8098729660839048e+00 + 5.0579205288598672e+00 -8.3339425282166291e-01 -6.1023205979993893e+00 + 5.0713432790313551e+00 -1.2887076047217776e+00 -6.3119476704220396e+00 + 5.0501071217782840e+00 -1.7258266076087110e+00 -6.4346489817219314e+00 + 5.0254491327711506e+00 -2.0319631622730494e+00 -6.4696820108975635e+00 + id 13033 + loc 2.2890375927090645e-02 2.9907722491770983e-03 406 + blend 0.0000000000000000e+00 + interp 4.3254713133674849e-01:2.5703380248747476e-01:2.1860710442529285e-01:4.1933205429953524e-01:1.1925238219814178e+00:2.1555083234600728e-01:1.9515663130616510e+00:2.6587803008909866e-01:2.9677784515651155e+00:4.3254280586543514e-01:3.6823088593821884e+00 + CVs 20 + -6.4472016368338797e-02 5.2925926998153280e-02 5.3055940235430317e-02 + -1.3735539093473928e-01 9.8237354214257444e-02 1.1399864753612692e-01 + -1.8804236200205143e-01 1.6806587354290217e-01 2.0852429637749870e-01 + -2.1731319851441519e-01 2.5974217385750931e-01 3.0582914109663223e-01 + -2.2491888673399571e-01 3.6731761842324584e-01 3.9823692242510123e-01 + -2.1176303682973674e-01 4.8488492009918760e-01 4.8127168802559789e-01 + -1.7940366932539484e-01 6.0783666880379539e-01 5.5196055193965143e-01 + -1.2962075546087964e-01 7.3295317279213612e-01 6.0813711634585277e-01 + -6.4288386825219632e-02 8.5806068937045021e-01 6.4810925941775233e-01 + 1.4716799861773905e-02 9.8170151452990950e-01 6.7061950743092358e-01 + 1.0607998770983634e-01 1.1026281124554165e+00 6.7492208444576751e-01 + 2.1080424969210337e-01 1.2189164749432464e+00 6.6072463373402779e-01 + 3.3135428707379949e-01 1.3291778764921307e+00 6.2721655895066775e-01 + 4.6968112818255692e-01 1.4317455572189579e+00 5.7284142055435638e-01 + 6.2513221560342314e-01 1.5217277092533301e+00 4.9755576882303815e-01 + 7.9409521967608487e-01 1.5888187400782381e+00 4.0684792745462078e-01 + 9.7245536015647094e-01 1.6216737594578974e+00 3.0903336533079273e-01 + 1.1598618354203303e+00 1.6165364168346532e+00 2.0544924388643016e-01 + 1.2578830589436645e+00 1.5572581783188149e+00 1.6953595371196228e-01 + id 13034 + loc 4.9474802613258362e-01 1.4495238661766052e-01 415 + blend 0.0000000000000000e+00 + interp 4.8310931317730521e-01:4.8310448208417345e-01:3.2810216028599681e-01:4.2298644847923994e-01:9.9175531409193984e-01:3.5117140348932802e-01:1.5086427548213512e+00:3.6520188228092576e-01:2.4472046413212056e+00:3.7962182076404655e-01:3.3924251696742811e+00:3.9123912252577098e-01:3.9977618956841670e+00 + CVs 20 + 2.0989358338473110e-02 2.0253472347494955e-01 -5.0892058934578030e-02 + 4.8073904899737507e-03 3.8028665739895112e-01 -8.6499610187395159e-02 + -1.6461712224902808e-02 5.7225396011524565e-01 -1.4249098308003061e-01 + -4.1936302519055002e-03 7.8981802783369970e-01 -2.2938327151536647e-01 + 5.1839289372221098e-02 1.0269514107957960e+00 -3.5037665388541839e-01 + 1.6118993512564928e-01 1.2733035197268396e+00 -5.0625399282150363e-01 + 3.3283898024211522e-01 1.5154001844398426e+00 -6.9246087557206459e-01 + 5.7173459838716822e-01 1.7392128558487316e+00 -9.0012046857910333e-01 + 8.7676075161325162e-01 1.9329618935788553e+00 -1.1193628724644831e+00 + 1.2424347132256188e+00 2.0876829494909268e+00 -1.3397770241902700e+00 + 1.6604797658683992e+00 2.1975108824650613e+00 -1.5535877903863324e+00 + 2.1182243403879175e+00 2.2586652561833582e+00 -1.7753681901999880e+00 + 2.5868167838891223e+00 2.2640790404879523e+00 -2.0583387539045854e+00 + 3.0092875231814515e+00 2.2046843516456129e+00 -2.4524063783161969e+00 + 3.3323053909780187e+00 2.0809685784133172e+00 -2.9442382864300400e+00 + 3.5371888242799674e+00 1.9035280285270670e+00 -3.4878025974460520e+00 + 3.6085144300773084e+00 1.6897689294660281e+00 -4.0526294194341510e+00 + 3.5283442703032666e+00 1.4681320291931699e+00 -4.6102845597421158e+00 + 3.6227544559530229e+00 1.3396107943399493e+00 -4.9843130196280478e+00 + id 13035 + loc 6.7274749279022217e-01 5.7683032751083374e-01 409 + blend 0.0000000000000000e+00 + interp 3.8801455505032845e-01:3.1218072373563194e-01:2.2146228524952150e-01:3.8801067490477797e-01:1.0007276905367901e+00:3.6486729690821385e-01:1.6147762710313915e+00:3.2061814005197647e-01:2.0598096408405175e+00:3.5691481778016809e-01:2.9877633810839042e+00:3.5524145220427028e-01:3.6970500752879074e+00 + CVs 20 + 2.9893566212878164e-01 2.2604607170608010e-01 -3.5219003343701351e-02 + 5.7642063980380809e-01 4.2212615305634654e-01 -8.6307866437567909e-02 + 8.6572639169719623e-01 6.0040749797778603e-01 -1.3870273544780354e-01 + 1.1910932372268446e+00 7.6667177268821662e-01 -1.8157953624823842e-01 + 1.5480946169624921e+00 9.1206002866631031e-01 -2.1506760745115555e-01 + 1.9293701045983687e+00 1.0290665278069977e+00 -2.4170131642686946e-01 + 2.3307316669140556e+00 1.1134967246652332e+00 -2.6482799968074400e-01 + 2.7515100027336241e+00 1.1581673804815313e+00 -2.8683598540479766e-01 + 3.1926816836321046e+00 1.1493501021595816e+00 -3.0952956361693423e-01 + 3.6512193430039526e+00 1.0700097917393769e+00 -3.3888312348201399e-01 + 4.1042884958619616e+00 9.0565300454885511e-01 -3.8542923042047433e-01 + 4.5142469296507555e+00 6.5584363308088545e-01 -4.5788028486178706e-01 + 4.8554500679868777e+00 3.3763172020595400e-01 -5.5951510256190584e-01 + 5.1218126697261432e+00 -2.5462079487044154e-02 -6.9101521727989379e-01 + 5.3144936670930853e+00 -4.0953905931789958e-01 -8.4990613031159201e-01 + 5.4374275840249524e+00 -7.9191742059605463e-01 -1.0259356324639506e+00 + 5.5033506042985474e+00 -1.1575045052446593e+00 -1.2056902961804121e+00 + 5.5371560030769995e+00 -1.5004747231175659e+00 -1.3874678509209506e+00 + 5.6088373089675194e+00 -1.8049020080502132e+00 -1.5831829562531983e+00 + id 13036 + loc 7.4378567934036255e-01 5.6368011236190796e-01 400 + blend 0.0000000000000000e+00 + interp 4.0382185819452004e-01:3.9209271914593041e-01:1.0363512475274672e-02:3.1573692106392803e-01:7.2886638249219127e-01:4.0381781997593813e-01:1.2262380479012287e+00:3.4500291060831434e-01:2.0515784837468667e+00:2.8165965575370827e-01:2.7784367699943662e+00:2.7815538692829128e-01:3.3100419454863577e+00 + CVs 20 + -6.2179761479768829e-02 1.3612362521993721e-01 -4.1698479396685528e-01 + -1.0607442169798653e-01 2.6157646456848793e-01 -8.4502762243809559e-01 + -1.3417914091251493e-01 3.7171740833056860e-01 -1.2843411209633486e+00 + -1.7196462303534660e-01 4.7259358566041310e-01 -1.7421042304988410e+00 + -1.9804513730580256e-01 5.6925279075729218e-01 -2.1929515220167524e+00 + -1.9585955035163144e-01 6.4506928366046024e-01 -2.6220224114492492e+00 + -1.8800537508199872e-01 7.0060169216761858e-01 -3.0466669796329793e+00 + -1.7662920603509261e-01 7.1254163932527881e-01 -3.4535232353018168e+00 + -1.5593787990107305e-01 6.5499336441055300e-01 -3.8184117161654507e+00 + -1.2225652481627713e-01 5.2849576938902554e-01 -4.1227568034807645e+00 + -7.3160415954131239e-02 3.4573573463436302e-01 -4.3476445940098962e+00 + -8.3287143735009117e-03 1.2704947456683602e-01 -4.4741391668590760e+00 + 6.8018909999136817e-02 -9.6635059261202416e-02 -4.4914168541030950e+00 + 1.4610969537794555e-01 -2.8859636970609870e-01 -4.4048964098240129e+00 + 2.0999340785090242e-01 -4.1762492429008358e-01 -4.2333358705245674e+00 + 2.4222922358368107e-01 -4.6419808973440535e-01 -4.0116124551509502e+00 + 2.4564343382026621e-01 -4.3730593454224076e-01 -3.8062332384360742e+00 + 2.6280062766643153e-01 -4.1974385998382213e-01 -3.7025024499753383e+00 + 3.7448088625677045e-01 -6.0434806479386771e-01 -3.7840171546974917e+00 + id 13037 + loc 4.9032342433929443e-01 7.1405315399169922e-01 411 + blend 0.0000000000000000e+00 + interp 3.8714931983248652e-01:2.6692810554625279e-01:4.5555571024629582e-01:3.1960091800802709e-01:1.0367211598920631e+00:2.9438678294280535e-01:1.7305902717477863e+00:3.8714544833928821e-01:2.1359697324968900e+00:2.8565324367547529e-01:2.9894038341853308e+00:2.7535732626859027e-01:3.5471618373679696e+00 + CVs 20 + 8.2504147240981218e-01 2.3400575600880030e-01 -6.2869677890142486e-02 + 1.4210996093424424e+00 3.5399856796780738e-01 -1.0485315961941861e-01 + 1.9603064724891426e+00 4.2555265335426418e-01 -1.3074715705977599e-01 + 2.5351272880313949e+00 4.8097254779685672e-01 -1.4262413035933719e-01 + 3.1403487414107163e+00 5.1041109738330115e-01 -1.4188772355471485e-01 + 3.7685653956114589e+00 5.0476524293482339e-01 -1.3275227565064301e-01 + 4.4106147081819911e+00 4.5582908509713616e-01 -1.2087877755593440e-01 + 5.0566947892466985e+00 3.5367215887137360e-01 -1.1015764050872601e-01 + 5.6956526422977340e+00 1.8493829541347928e-01 -1.0462079033552368e-01 + 6.3102377191385290e+00 -6.4908575031920934e-02 -1.1533865710411995e-01 + 6.8733609193976797e+00 -4.0363974697675742e-01 -1.5730920686198818e-01 + 7.3566088995781245e+00 -8.2371007026210497e-01 -2.3280555224618879e-01 + 7.7446732800811686e+00 -1.3068831085004156e+00 -3.3157490554584212e-01 + 8.0331422597387530e+00 -1.8341013491530642e+00 -4.4190309553480661e-01 + 8.2198447002946669e+00 -2.3873254447193801e+00 -5.5349764563219273e-01 + 8.3035561066058481e+00 -2.9514174816996128e+00 -6.5323789525040998e-01 + 8.2851854860798451e+00 -3.5120360372913622e+00 -7.2566563464022504e-01 + 8.1739803732409868e+00 -4.0448940769727582e+00 -7.6337841378503457e-01 + 8.0725151559678245e+00 -4.5034392256435316e+00 -7.6042531403406355e-01 + id 13038 + loc 3.7045016884803772e-01 8.9698612689971924e-01 1068 + blend 0.0000000000000000e+00 + interp 5.1524508899468358e-01:3.2509597934845141e-01:1.2631203532382207e-01:3.4486259279943204e-01:9.8155453039400897e-01:3.3601113631895774e-01:1.6006576922543316e+00:4.5452959717277663e-01:2.0260410270896938e+00:5.1523993654379363e-01:2.5997387401974565e+00:3.2529458970998992e-01:3.1093861684814503e+00 + CVs 20 + 1.8861864575258211e-01 3.2309117296617368e-01 -2.1626317865592093e-01 + 3.7527699713551199e-01 6.5623410191475839e-01 -4.4256127913569898e-01 + 5.6274582853765565e-01 9.8428577323369071e-01 -6.5471534654169450e-01 + 7.4847750215822739e-01 1.2924630262171197e+00 -8.4959007761632843e-01 + 9.3111781344379962e-01 1.5705047562078882e+00 -1.0328845938169791e+00 + 1.1101062177549410e+00 1.8100918898627179e+00 -1.2053340327929942e+00 + 1.2841983387673230e+00 2.0095122914460952e+00 -1.3664750781144275e+00 + 1.4566429664671412e+00 2.1771362126007130e+00 -1.5204720874583493e+00 + 1.6379219062039314e+00 2.3244451842426699e+00 -1.6791498133523592e+00 + 1.8449869704898938e+00 2.4555376520794971e+00 -1.8572955391621742e+00 + 2.0916767827768132e+00 2.5659371568776721e+00 -2.0620451538430604e+00 + 2.3780423775266004e+00 2.6511508801287720e+00 -2.2887675266364167e+00 + 2.6951522531787346e+00 2.7150097106618798e+00 -2.5278764549155035e+00 + 3.0528795447302697e+00 2.7612919447294990e+00 -2.7793522789160554e+00 + 3.4765947927107215e+00 2.7720443728742898e+00 -3.0559689501649516e+00 + 3.9439977013712957e+00 2.7144454304865695e+00 -3.3618563579665848e+00 + 4.3851013316153136e+00 2.5841951193919437e+00 -3.6726488911607169e+00 + 4.7319649963987942e+00 2.4298416276787425e+00 -3.9877154604886904e+00 + 4.7561041415228544e+00 2.4954222079391259e+00 -4.3124833184123910e+00 + id 13039 + loc 1.4283615350723267e-01 9.0771329402923584e-01 373 + blend 0.0000000000000000e+00 + interp 7.3939304608105583e-01:3.7306213697849089e-01:9.6458172066502645e-02:7.3938565215059504e-01:9.7800689346193936e-01:3.0426630876505445e-01:1.8372226627558570e+00:3.0592497714515371e-01:2.6910461518500033e+00:2.8762967569338604e-01:3.7170679237727793e+00 + CVs 20 + -3.5911637364202931e-01 4.3890336443065509e-01 -1.2372548757109660e-01 + -6.5854302781310614e-01 8.6793435422227927e-01 -2.7090069278281553e-01 + -8.9554069997538277e-01 1.3021709909727455e+00 -4.5248961182596409e-01 + -1.0751471272557305e+00 1.7442941680946777e+00 -6.8677233899086521e-01 + -1.1994465947235275e+00 2.1650122686700368e+00 -9.8828537161590979e-01 + -1.2833587084451088e+00 2.5227866367445215e+00 -1.3550125939808586e+00 + -1.3476198176566361e+00 2.7859595168894513e+00 -1.7682339668147964e+00 + -1.4090613246342625e+00 2.9409555456609340e+00 -2.1990403224513719e+00 + -1.4807680673331753e+00 2.9905535309956202e+00 -2.6267354588722056e+00 + -1.5725596156821524e+00 2.9422395370641321e+00 -3.0434947501756877e+00 + -1.6906341236515185e+00 2.8086267006634618e+00 -3.4353832698871529e+00 + -1.8293988293241341e+00 2.6095534667066937e+00 -3.7774557352658018e+00 + -1.9686802645040624e+00 2.3653192793285847e+00 -4.0573831567931755e+00 + -2.1044200055219067e+00 2.0761052666912465e+00 -4.2935970327510535e+00 + -2.2677613462537156e+00 1.7167933582761457e+00 -4.5025943405967208e+00 + -2.4705297415405640e+00 1.3040845905776641e+00 -4.6700131979607677e+00 + -2.6222366251350691e+00 9.7650475450010077e-01 -4.8005181536804944e+00 + -2.6448441924620711e+00 8.8306351444735065e-01 -4.9581362015379433e+00 + -2.8488992554758084e+00 2.8700554004620127e-01 -4.8320768321521079e+00 + id 13040 + loc 1.7281989753246307e-01 1.2690742313861847e-01 401 + blend 0.0000000000000000e+00 + interp 4.8404499259911271e-01:4.5884897433019106e-01:1.9283375211721376e-01:4.8404015214918672e-01:7.8236491454831458e-01:3.6586302375277557e-01:1.0994322527264253e+00:2.8486002158565826e-01:1.8652248698031331e+00:4.0705217684119255e-01:2.1572294125476175e+00:2.9647932665335491e-01:2.8840868474053858e+00:4.3752001063103590e-01:3.1848990328080187e+00:3.9962713580330383e-01:3.9734788257472977e+00 + CVs 20 + -1.1525631434812122e-01 3.8018482287914329e-01 7.1919600217516338e-02 + -2.6428406468290638e-01 7.5631052716186753e-01 1.6929472245063160e-01 + -4.1707295363073982e-01 1.1141688328394768e+00 2.8737906379057210e-01 + -5.7044998388928425e-01 1.4435254884069526e+00 4.3147004738281020e-01 + -7.2923836664699437e-01 1.7325336572663901e+00 6.0987638050009063e-01 + -8.9065617018706145e-01 1.9673535369363901e+00 8.2719555740086870e-01 + -1.0431813328101691e+00 2.1355529652552927e+00 1.0792884365002402e+00 + -1.1708563112443675e+00 2.2342680228827434e+00 1.3519493505046618e+00 + -1.2697378123196310e+00 2.2763608211614912e+00 1.6428999686310466e+00 + -1.3531472284792909e+00 2.2703888026179779e+00 1.9721443630273801e+00 + -1.4263462611029423e+00 2.1996664446295418e+00 2.3284892514908702e+00 + -1.4633681432040226e+00 2.0678697273015065e+00 2.6430772769607813e+00 + -1.4496919456766038e+00 1.9211849550220939e+00 2.8818866008041057e+00 + -1.4122105133338776e+00 1.7944764393525825e+00 3.0848000980577903e+00 + -1.3729858974478646e+00 1.6916696297496592e+00 3.2994028266672548e+00 + -1.3040469805154098e+00 1.6015270288603456e+00 3.4577391099089807e+00 + -1.1657602274765904e+00 1.4973044967899765e+00 3.3479572691515105e+00 + -1.0063551197144158e+00 1.2612433720480920e+00 3.0944827020385004e+00 + -9.3321328993656294e-01 1.3932831163064407e+00 3.4504774165448158e+00 + id 13041 + loc 8.8634157180786133e-01 4.7314879298210144e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1755628845966641e-01:3.1094544478639813e-01:2.4086408153095484e-02:3.2964840752454511e-01:1.0772168522921710e+00:4.1755211289678185e-01:1.8016399862004189e+00:3.1422722518702345e-01:2.1171678793511646e+00:2.6708690324520240e-01:2.8987503762449491e+00:3.5482362356947816e-01:3.3452136262101981e+00 + CVs 20 + -3.0275697633107460e-02 3.8067793730701882e-01 -2.7289193627497299e-01 + -7.5160964891982388e-02 7.0054707719795728e-01 -4.2330834774996651e-01 + -1.2563300862590335e-01 1.0062897324575188e+00 -5.3100355544642519e-01 + -1.8466209340374851e-01 1.3221925873163700e+00 -6.2010291617279045e-01 + -2.5751921553086277e-01 1.6386790153519268e+00 -6.7527067648357586e-01 + -3.5157061388056976e-01 1.9450452425513238e+00 -6.7630669066653204e-01 + -4.7838992079934162e-01 2.2238411522694839e+00 -5.9122359626487886e-01 + -6.3860715790786271e-01 2.4231061265379088e+00 -3.8131264716034763e-01 + -7.8092771276797857e-01 2.4648905226573707e+00 -7.8126629515643975e-02 + -8.5595177917976162e-01 2.3616562533234808e+00 2.2209088932316978e-01 + -8.6416782950892290e-01 2.1639903444656312e+00 4.8206245529248537e-01 + -8.1522915601398527e-01 1.9090063472661136e+00 6.9060336224743191e-01 + -7.2177346662316277e-01 1.6384050621248836e+00 8.4927840356668138e-01 + -5.9964658309887853e-01 1.4106776510919974e+00 9.7161829218114726e-01 + -4.8034197836051989e-01 1.3235616737396076e+00 1.0518657360862174e+00 + -4.1415632082229470e-01 1.4263389786287126e+00 9.8166859382212157e-01 + -3.7631515939273857e-01 1.4467780031019473e+00 6.4015372041184215e-01 + -2.6713534998115057e-01 1.2649639426756183e+00 4.5765535053353795e-01 + -2.3982137694236619e-01 1.4397456901228027e+00 4.3499963627493421e-01 + id 13042 + loc 3.8691938389092684e-03 1.6151970624923706e-01 403 + blend 0.0000000000000000e+00 + interp 5.5778462720646549e-01:3.8075018889211359e-01:6.8139931812019072e-01:3.9697459229317533e-01:1.4653813871934729e+00:4.6807881135836527e-01:2.0101532062290151e+00:4.0952474387242116e-01:2.6540287094947193e+00:5.5777904936019340e-01:3.2466975260817859e+00:3.6222447437300070e-01:3.8280230999821758e+00 + CVs 20 + -1.7588570367533390e-01 3.3597988865623757e-01 7.5555909482709807e-02 + -3.4899638203814476e-01 6.7068144484988190e-01 1.4175335434047434e-01 + -5.2573330157834419e-01 9.9780667921922128e-01 2.2415093241058720e-01 + -7.0815447338232451e-01 1.3095250790910167e+00 3.3927566724349983e-01 + -8.9537531643580359e-01 1.5988920167920075e+00 5.0053788111188424e-01 + -1.0806899580607234e+00 1.8556800130779798e+00 7.1874464589033071e-01 + -1.2528651910046451e+00 2.0668350446460311e+00 9.9821282446259596e-01 + -1.3988848115747734e+00 2.2183675692488141e+00 1.3345561947830724e+00 + -1.5061698426592347e+00 2.2980130017135059e+00 1.7134410766520911e+00 + -1.5664042423598894e+00 2.2995816705021275e+00 2.1113066859934939e+00 + -1.5792697089272210e+00 2.2257752556802313e+00 2.5031267975293785e+00 + -1.5535232210070828e+00 2.0868950617202433e+00 2.8672492987057061e+00 + -1.5057636584938419e+00 1.8982294311055301e+00 3.1896454929801186e+00 + -1.4521254779404722e+00 1.6740569397135461e+00 3.4706947528104330e+00 + -1.4021159425853706e+00 1.4247740765636729e+00 3.7170430491430344e+00 + -1.3623479116976025e+00 1.1647487233016491e+00 3.9275231817653475e+00 + -1.3422730602076018e+00 9.2157251824234554e-01 4.0954869125407134e+00 + -1.3480985142770356e+00 7.2023940077472814e-01 4.2306132857857701e+00 + -1.3702473659881989e+00 5.0235171983011484e-01 4.4490796426264794e+00 + id 13043 + loc 3.0686259269714355e-01 1.1124499142169952e-01 417 + blend 0.0000000000000000e+00 + interp 1.8518540607370109e+00:5.5003994939248380e-01:8.9090814644062888e-01:3.5526218851037605e-01:1.0770602341319917e+00:2.2511189622418570e-01:1.6588448541472813e+00:2.9815068050414073e-01:2.2983715069009865e+00:1.3399807876007688e+00:2.9749329552574388e+00:1.8518440607370108e+00:3.0010502621548154e+00 + CVs 20 + -3.2328065144630908e-01 7.4754193165049831e-02 2.2044611478504395e-01 + -5.2366610108536982e-01 1.0572820828931936e-01 3.7190724979761391e-01 + -6.8439472428257131e-01 1.2172677197420489e-01 5.0247607288417728e-01 + -8.6026109053090283e-01 1.4506443919863116e-01 6.3171032705614272e-01 + -1.0499289644835115e+00 1.7454890545442697e-01 7.5661850521360485e-01 + -1.2514019000958285e+00 2.0746647542879404e-01 8.7407342179580727e-01 + -1.4624394683745194e+00 2.3961062789675774e-01 9.8119973917364123e-01 + -1.6803404675622216e+00 2.6582188624754066e-01 1.0751964290088925e+00 + -1.9008061934841225e+00 2.8072603048353917e-01 1.1525507772169825e+00 + -2.1183533057354982e+00 2.7913898104464252e-01 1.2093275853442507e+00 + -2.3293679286828639e+00 2.5669407864771743e-01 1.2435885437850427e+00 + -2.5338949336038850e+00 2.1237188137342389e-01 1.2568194028919075e+00 + -2.7333773922056150e+00 1.4895241551990501e-01 1.2518521465882215e+00 + -2.9281055192025809e+00 7.0444486278751439e-02 1.2324639798621670e+00 + -3.1188005566719781e+00 -2.0477762511850184e-02 1.2052797140949305e+00 + -3.3068673145469885e+00 -1.2235189703733473e-01 1.1780698850345730e+00 + -3.4915404757185859e+00 -2.3279076847627556e-01 1.1552329952954876e+00 + -3.6706243677290193e+00 -3.4702510479676230e-01 1.1370680112404870e+00 + -3.8683202823313620e+00 -4.4899315719555832e-01 1.1461747817470647e+00 + id 13044 + loc 5.5816308595240116e-03 5.4221726953983307e-02 377 + blend 0.0000000000000000e+00 + interp 4.0148300223568273e-01:1.3365171357357880e-01:1.0347859154656553e+00:2.1266622016438480e-01:1.9819317128114107e+00:4.0147898740566040e-01:2.9469390454725963e+00:3.2699618283379639e-01:3.5397565049299176e+00 + CVs 20 + -4.7614490042983881e-01 4.0353967644935812e-01 8.7213369618755709e-01 + -7.3158531466851584e-01 6.1099334141386230e-01 1.5614955521821041e+00 + -8.5520717798049128e-01 6.9075412977680362e-01 2.2407443866555097e+00 + -9.1349060528677495e-01 6.9395728974829085e-01 2.9732112838992579e+00 + -9.6168198158346718e-01 6.4313201074556836e-01 3.7357783223836365e+00 + -1.0556274881632306e+00 5.3690451641434289e-01 4.4867886101634191e+00 + -1.2291465316682932e+00 3.5634257863388252e-01 5.1800896418556093e+00 + -1.4889632541368516e+00 9.3594294299029102e-02 5.7754475523618440e+00 + -1.8139976927657506e+00 -2.3520332461180482e-01 6.2427055577951709e+00 + -2.1629675590435529e+00 -6.0176657004052370e-01 6.5868381327894792e+00 + -2.4939818209201379e+00 -9.8999633130670350e-01 6.8445677937814597e+00 + -2.7763590815880574e+00 -1.4076407788223144e+00 7.0577750275695550e+00 + -2.9912724125269996e+00 -1.8838709568705090e+00 7.2586792746837210e+00 + -3.1346776887742109e+00 -2.4598758541957659e+00 7.4712529674429078e+00 + -3.2168517155365079e+00 -3.1464137830180339e+00 7.7183385519974586e+00 + -3.2578747280877667e+00 -3.8908443221143760e+00 8.0271788676480451e+00 + -3.2533984985561464e+00 -4.5987849723638643e+00 8.4067889412701184e+00 + -3.1950727031382042e+00 -5.2071307176384058e+00 8.8247732535152359e+00 + -3.1536128826678094e+00 -5.7992147854074094e+00 9.1930720073926366e+00 + id 13045 + loc 4.1747263073921204e-01 2.2238299250602722e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6685961146410498e-01:3.2384351676191281e-01:3.2112177518810903e-02:2.4728273170633447e-01:8.7556799253811601e-01:3.2117072115439493e-01:1.2684889897109186e+00:2.9337636528764965e-01:1.9877450340156151e+00:3.1925626603916907e-01:2.6722012032702862e+00:4.6685494286799034e-01:3.1416643966067719e+00:3.8101768030662209e-01:3.7009171246542616e+00 + CVs 20 + 1.9091503418851299e-01 3.6802115719903927e-01 -3.5630687381959691e-01 + 3.0647355137178156e-01 7.1347314280032748e-01 -7.0705152284679929e-01 + 3.7592283469826776e-01 1.0280202677530828e+00 -1.0583278964430638e+00 + 3.9885124346746870e-01 1.3141644945147117e+00 -1.4135864675437058e+00 + 3.6813623863319156e-01 1.5621761854787808e+00 -1.7668677828233643e+00 + 2.7522346278580628e-01 1.7593805924738206e+00 -2.1111314293145447e+00 + 1.2084497429024721e-01 1.8909582470929356e+00 -2.4339456682272687e+00 + -7.7764606596002372e-02 1.9483344926409019e+00 -2.7190311011502897e+00 + -2.9134764695198445e-01 1.9320159582068124e+00 -2.9525731068820757e+00 + -4.8696484042921295e-01 1.8556477238582674e+00 -3.1279845081330011e+00 + -6.4644469331202226e-01 1.7487941479729692e+00 -3.2503607768434857e+00 + -7.7845054132269897e-01 1.6422145571750981e+00 -3.3341680898695651e+00 + -9.0456037332392092e-01 1.5503835610195786e+00 -3.3926939098489837e+00 + -1.0381387811723397e+00 1.4733216738983237e+00 -3.4304608429241359e+00 + -1.1751015186679350e+00 1.4129702639765755e+00 -3.4433019592365541e+00 + -1.3080246015369315e+00 1.3888447756753382e+00 -3.4238458803630905e+00 + -1.4770834854797867e+00 1.4291611466646064e+00 -3.3803511013406844e+00 + -1.7513961055114224e+00 1.4383264302132768e+00 -3.3614775329176001e+00 + -1.8332364330065707e+00 1.2878534604386027e+00 -3.3130162012509534e+00 + id 13046 + loc 4.5068189501762390e-01 1.1802761256694794e-01 380 + blend 0.0000000000000000e+00 + interp 5.6352834934646723e-01:2.9423467815147619e-01:2.8292408970287453e-01:4.7631516439863220e-01:8.4856775069084112e-01:5.6352271406297383e-01:1.1651563113539971e+00:4.3239244745892291e-01:1.7040598207592212e+00:3.6004739727461582e-01:2.0975247063123610e+00:3.9927337095959387e-01:2.9976154718022459e+00:3.7452239710896768e-01:3.8613302754020986e+00 + CVs 20 + -5.1623311050245890e-01 2.8301143625717923e-01 6.1393227839842113e-01 + -8.8466142285749350e-01 4.7354872532477821e-01 1.1288827966702981e+00 + -1.2246144758702642e+00 6.3317763846378217e-01 1.6135892462530976e+00 + -1.5942282167627710e+00 7.8771868131242395e-01 2.0933109621585766e+00 + -1.9989163293241055e+00 9.2327917865372278e-01 2.5490613330114540e+00 + -2.4384076303299658e+00 1.0196155873845423e+00 2.9682560008987249e+00 + -2.9058336376966292e+00 1.0551792485000693e+00 3.3461600256808413e+00 + -3.3862216801138874e+00 1.0135095122390150e+00 3.6796577394468635e+00 + -3.8606934964669684e+00 8.8681624367666756e-01 3.9692544698315668e+00 + -4.3122808579323983e+00 6.7406767647550936e-01 4.2239363335807596e+00 + -4.7221687147728977e+00 3.7920584310940608e-01 4.4573509832288165e+00 + -5.0659043496004674e+00 1.1226892512988584e-02 4.6779091010745084e+00 + -5.3211879080803453e+00 -4.2408779214021042e-01 4.8836754534378173e+00 + -5.4761770860077963e+00 -9.3423662520778805e-01 5.0709595406763839e+00 + -5.5448003566021109e+00 -1.5275320869247770e+00 5.2556177148451875e+00 + -5.5749640646826029e+00 -2.1862429413675524e+00 5.4780511291864800e+00 + -5.5999806711326405e+00 -2.8488791109423448e+00 5.7817706225386925e+00 + -5.6019537533932082e+00 -3.4336206152901401e+00 6.1876493860145416e+00 + -5.5858848785319344e+00 -3.9482964578493829e+00 6.6095155390672229e+00 + id 13047 + loc 9.0901029109954834e-01 6.4510655403137207e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5792163220409154e-01:4.5791705298776952e-01:1.9248639394134792e-02:3.9692929981801278e-01:7.4921284764298557e-01:3.5661365390154587e-01:1.1939071695772361e+00:4.4291442703021883e-01:2.0374969685280098e+00:3.1104756959272106e-01:2.4710547210903648e+00:3.6016679464949980e-01:2.8519439121966501e+00:3.4842560319996052e-01:3.2989260615384621e+00 + CVs 20 + 7.8091731103557188e-02 3.0845328975535519e-01 -1.1039921042674174e-01 + 1.6212532070683411e-01 6.1450768577394588e-01 -2.4971698294369132e-01 + 2.5592518125176861e-01 9.1986777980736600e-01 -4.0605505189273577e-01 + 3.7077511201470881e-01 1.2294706577570373e+00 -5.7121750552628414e-01 + 5.2181342909845241e-01 1.5424194064597669e+00 -7.3747929248629274e-01 + 7.1862889456852974e-01 1.8550606882381140e+00 -8.9964429941259016e-01 + 9.7939700855231915e-01 2.1621572367354105e+00 -1.0611998679656844e+00 + 1.3400258956315154e+00 2.4304347191685993e+00 -1.2269555074817824e+00 + 1.8157237718325820e+00 2.5789086714020359e+00 -1.3958946940018804e+00 + 2.3824003056554082e+00 2.5131573002824013e+00 -1.5677062365868057e+00 + 2.9450977098718467e+00 2.1636933312820537e+00 -1.7005226513566942e+00 + 3.3666397173323648e+00 1.5749756780712958e+00 -1.7214013103596941e+00 + 3.5819989398675474e+00 8.5245656624171884e-01 -1.6006269174661822e+00 + 3.5850120591443018e+00 1.1063651411196462e-01 -1.3386274515260270e+00 + 3.4450017638745565e+00 -5.5703969801998610e-01 -9.2373262258648625e-01 + 3.2641397000821746e+00 -1.0948487216066916e+00 -3.0655736424775726e-01 + 3.1218252024056103e+00 -1.4040913983144832e+00 5.2666798698530592e-01 + 3.0419751963585151e+00 -1.4188605064230333e+00 1.4277576643555572e+00 + 2.9109122466459509e+00 -1.4278903614904848e+00 2.0351813517308521e+00 + id 13048 + loc 9.3020403385162354e-01 3.1626281142234802e-01 402 + blend 0.0000000000000000e+00 + interp 5.1019517909928680e-01:3.8799561487640760e-01:6.3625857377188288e-02:4.6092727163310365e-01:4.8588555761912866e-01:4.1346919756212508e-01:9.8316620195851701e-01:5.1019007714749587e-01:1.5057323329080408e+00:3.8962560244644973e-01:1.9999296305419478e+00:3.2000179946663504e-01:2.4671147882114375e+00:3.4807267808729370e-01:3.0120418010362169e+00:2.6215413163592050e-01:3.7259053979509105e+00 + CVs 20 + 3.6266254674673926e-03 1.7788809732298455e-01 2.9247280305702339e-01 + 6.2624233094840248e-03 3.5335437150837812e-01 5.5736831846376489e-01 + -1.2685290531696272e-02 5.4173832530076926e-01 7.8749788704772417e-01 + -8.2989414413611434e-02 7.9052247504689910e-01 1.0404356658154281e+00 + -1.4105041479853406e-01 1.1010249328019786e+00 1.4264792290281705e+00 + -6.9703718499649875e-02 1.4143647018381502e+00 1.8824840945547121e+00 + 1.3164336473822791e-01 1.6953922260548466e+00 2.2892441202495166e+00 + 4.1267878325548357e-01 1.9292333807830395e+00 2.6079012586756654e+00 + 7.4806821478650698e-01 2.1072400697516458e+00 2.8677406482218810e+00 + 1.1316917314342565e+00 2.2074418796813045e+00 3.1236415502305825e+00 + 1.5171320965127446e+00 2.1550074725385255e+00 3.4142233224238017e+00 + 1.8099101396129817e+00 1.8817907666690188e+00 3.7239183042635595e+00 + 2.0079896364826610e+00 1.4269295656764494e+00 4.0098198682382478e+00 + 2.2080703147416352e+00 8.7827490378978879e-01 4.2510254988793168e+00 + 2.5045102556576038e+00 3.1412316371734050e-01 4.4438946683812439e+00 + 2.9479218906746967e+00 -2.0759909300478085e-01 4.5947318527125018e+00 + 3.5262887458310699e+00 -6.8460978669639161e-01 4.7418167258140107e+00 + 4.1881497768531180e+00 -1.1571368775608586e+00 4.9525166667483216e+00 + 4.8853995886476751e+00 -1.6521943484091177e+00 5.2350643493792415e+00 + id 13049 + loc 8.1263649463653564e-01 6.0495334863662720e-01 1081 + blend 0.0000000000000000e+00 + interp 3.6236569382556399e-01:3.0948064288552757e-01:2.1669932078211640e-01:2.8813905965848746e-01:9.6589318591283102e-01:3.0746205325335374e-01:1.5047773981785677e+00:3.3442612428585439e-01:2.0682309607467140e+00:3.6236207016862576e-01:2.8103612136751206e+00:2.7681857751430528e-01:3.4482606108858067e+00 + CVs 20 + -1.3980031464659037e-02 4.5007343032104230e-01 4.1140055982392676e-01 + -9.4477819613136838e-03 7.7955175208513716e-01 6.7792838131559352e-01 + -7.7918537544358069e-04 1.0606557741716456e+00 8.9347051839042380e-01 + 5.0607325926380620e-03 1.3320204823853632e+00 1.1100678305689484e+00 + 1.6640589286541441e-02 1.5999848001632522e+00 1.3302185881206441e+00 + 4.4407355123684822e-02 1.8779511613832640e+00 1.5569008898713046e+00 + 1.0601702318922646e-01 2.1922610572789023e+00 1.7823410985980952e+00 + 2.3590234983856428e-01 2.5836962750262922e+00 1.9720951233286934e+00 + 4.8935921482320965e-01 3.0786180222152941e+00 2.0268559275975031e+00 + 8.6058449680410620e-01 3.5539056902319857e+00 1.8056953166699539e+00 + 1.2112097201756962e+00 3.8084147932951709e+00 1.3795233595711220e+00 + 1.4704273013808757e+00 3.8479251732363617e+00 9.2678542749509463e-01 + 1.6585783643008363e+00 3.7489600448007439e+00 5.0816571763317109e-01 + 1.8019380129725713e+00 3.5509173964636749e+00 1.2585651284228394e-01 + 1.9189511081489079e+00 3.2558704859515561e+00 -2.3753872663637243e-01 + 2.0220644961170313e+00 2.8128463261345149e+00 -6.0591229230442389e-01 + 2.1105287634925887e+00 2.1675336988129121e+00 -9.0249260401246123e-01 + 2.1762168817895793e+00 1.4847437178834555e+00 -9.4962808830382917e-01 + 2.2221377246649663e+00 1.1363878811785117e+00 -7.6794246334236904e-01 + id 13050 + loc 2.2648927569389343e-01 2.6698985695838928e-01 373 + blend 0.0000000000000000e+00 + interp 4.1136641536992369e-01:3.7610218380655014e-01:5.2506050701579188e-01:4.1136230170576998e-01:9.9032548108779084e-01:2.7899777930328540e-01:1.6985314195358123e+00:3.0668214555484641e-01:2.2985308928904620e+00:3.3016134506875028e-01:3.0617198707951756e+00:3.1017850988672985e-01:3.9236160593034901e+00 + CVs 20 + -4.0370200202608168e-02 9.7859443073722185e-01 3.2456167875842468e-01 + -1.7793771262004038e-01 1.9261814950019254e+00 5.6697574841179355e-01 + -4.5622504649823081e-01 2.8123550642510278e+00 6.5855444121857609e-01 + -8.8430749264038178e-01 3.5786275453443901e+00 5.1698528416640532e-01 + -1.4304805368780511e+00 4.1418195166969367e+00 1.2648380879850207e-01 + -2.0318583539584818e+00 4.4198514431794012e+00 -4.7305368672163817e-01 + -2.6144255201823352e+00 4.3377926936903322e+00 -1.2252831689269754e+00 + -3.1033891608476338e+00 3.8748556581902021e+00 -2.0368696569216249e+00 + -3.4197592204359912e+00 3.0633532186507368e+00 -2.7987611795324550e+00 + -3.4943195784019703e+00 1.9847863508585772e+00 -3.4007784183192649e+00 + -3.3063702717979737e+00 7.9791051187251871e-01 -3.7696757558661327e+00 + -2.9421429958949239e+00 -3.1492990675013743e-01 -3.9470387939950031e+00 + -2.5321969523176855e+00 -1.2745398714523917e+00 -4.0833022731626469e+00 + -2.1903902066621366e+00 -2.0667477953379541e+00 -4.3252965200699389e+00 + -2.1114148818419709e+00 -2.5514428904891782e+00 -4.7524051037930590e+00 + -2.3484378300341899e+00 -2.6155004064549114e+00 -5.0569588652016098e+00 + -2.5427732313206679e+00 -2.6186100599291282e+00 -5.0124665743726124e+00 + -2.5237186720649820e+00 -2.7551625184218684e+00 -4.9265902774260963e+00 + -2.9491668725931537e+00 -2.9539472377316143e+00 -5.2525126860613680e+00 + id 13051 + loc 3.7122738361358643e-01 6.7360121011734009e-01 382 + blend 0.0000000000000000e+00 + interp 3.7527035450509671e-01:3.1907116429164484e-01:8.4008807076038572e-01:3.7526660180155169e-01:1.2259439381873702e+00:2.6316065533137406e-01:1.9562060254583709e+00:3.7479740578063275e-01:2.2028500517098499e+00:3.5863583825041018e-01:3.1172101663041660e+00:3.0407733306975399e-01:3.9985794580522986e+00 + CVs 20 + 9.1772965420852282e-01 1.5500800711128154e-01 -5.7262787665645709e-01 + 1.5327554557919427e+00 1.7059983180193528e-01 -1.0384391312044379e+00 + 2.0805031219024315e+00 1.4107543516055332e-01 -1.4961135970575230e+00 + 2.6534342305109262e+00 1.0265214022137814e-01 -1.9743389964774463e+00 + 3.2379161911759424e+00 5.4061169984280566e-02 -2.4479348528264318e+00 + 3.8162585960095252e+00 -4.5726946329734952e-03 -2.8964188497207948e+00 + 4.3726219862678981e+00 -7.4201735530713409e-02 -3.3079066758645794e+00 + 4.8979599711942186e+00 -1.5936927932661415e-01 -3.6795595181361564e+00 + 5.3887891675382544e+00 -2.6280098777811856e-01 -4.0214251023158907e+00 + 5.8459227144339501e+00 -3.8463077813827629e-01 -4.3572319062995533e+00 + 6.2706703018274395e+00 -5.3277859533222127e-01 -4.7097459561186454e+00 + 6.6553381759281445e+00 -7.2028469709333676e-01 -5.0907043325286336e+00 + 6.9848508102438123e+00 -9.6122237525708587e-01 -5.5007389388342371e+00 + 7.2449114540237787e+00 -1.2701389145334074e+00 -5.9300985071934065e+00 + 7.4242300973891471e+00 -1.6572347806578498e+00 -6.3627107855609939e+00 + 7.5145574543657565e+00 -2.1229003105241921e+00 -6.7851797736226835e+00 + 7.5133537692389458e+00 -2.6520406398213594e+00 -7.1791274214755667e+00 + 7.4320992595255913e+00 -3.2018787193167713e+00 -7.5047110171436451e+00 + 7.2859806052019280e+00 -3.6121192049355697e+00 -7.6151909448569839e+00 + id 13052 + loc 6.4459049701690674e-01 9.4640845060348511e-01 399 + blend 0.0000000000000000e+00 + interp 5.8107633196483743e-01:2.8988141695649500e-01:6.9206607532439457e-02:3.2986280345500163e-01:8.6162979118894056e-01:5.8107052120151781e-01:1.1807329967278648e+00:5.8054372952609734e-01:1.6470163884918272e+00:5.3489630578480052e-01:1.9913577724267963e+00:2.5481464625019484e-01:2.3511318313055090e+00:2.7671586139043386e-01:3.2564994025614804e+00 + CVs 20 + -1.7636301786080688e-01 2.8420131750406374e-01 -1.4056488382433655e-01 + -3.3750326043287915e-01 5.7213218859084003e-01 -2.8188678721561977e-01 + -4.9107988615005432e-01 8.6120567008363069e-01 -4.3283043159684154e-01 + -6.4645320853206534e-01 1.1473362187072538e+00 -6.0440680870635832e-01 + -8.1283390779708331e-01 1.4204169860488929e+00 -8.0875474019426596e-01 + -9.9674590343693448e-01 1.6635005781019778e+00 -1.0534606219276761e+00 + -1.1973423393427391e+00 1.8511839341433238e+00 -1.3370728141911910e+00 + -1.4064980625108323e+00 1.9617518607091822e+00 -1.6455693188232439e+00 + -1.6256881817859166e+00 2.0032053887031358e+00 -1.9618217530787587e+00 + -1.8653386872210218e+00 1.9974035743411813e+00 -2.2772568268761360e+00 + -2.1048975288368172e+00 1.9350504533998303e+00 -2.5822068441686241e+00 + -2.2784179941346263e+00 1.7833184592804829e+00 -2.8540513651529080e+00 + -2.3500764919646868e+00 1.5378472287777756e+00 -3.0869598900199522e+00 + -2.3693843481047154e+00 1.2356992421422248e+00 -3.3077458021541437e+00 + -2.3880778530481326e+00 9.2405297252811747e-01 -3.5308730313998433e+00 + -2.3820503288545578e+00 5.5545997304875228e-01 -3.7424122363046188e+00 + -2.3472331906433483e+00 -7.1544589750700160e-02 -3.9286683126669160e+00 + -2.5470818658539431e+00 -9.9558447244642845e-01 -4.1212430579749935e+00 + -2.7014257331099509e+00 -1.2115609947238741e+00 -4.2669155072532927e+00 + id 13053 + loc 9.3329989910125732e-01 8.3440566062927246e-01 409 + blend 0.0000000000000000e+00 + interp 4.9582762598438401e-01:3.2447877337509901e-01:7.5089543373817036e-01:4.5754105752434704e-01:1.3446074148171230e+00:3.7098990851428898e-01:1.9998744580062051e+00:4.1486228330329411e-01:2.8139585166895564e+00:4.9582266770812417e-01:3.1965398337415483e+00:4.1397847164107454e-01:3.9991937267038424e+00 + CVs 20 + 4.4338958624618624e-01 1.7796443415880908e-01 -1.7913476579570956e-01 + 8.1747858085099334e-01 2.7859335127864182e-01 -3.3338165518992779e-01 + 1.1779098387646132e+00 3.4197720946955551e-01 -4.7139036777351190e-01 + 1.5507777429847054e+00 3.8783848908579466e-01 -5.9784934825794533e-01 + 1.9296720956887166e+00 4.1447707482461726e-01 -7.1476204993464854e-01 + 2.3077125626525588e+00 4.2249101963968461e-01 -8.2667329959637237e-01 + 2.6773084565110317e+00 4.1481027441977325e-01 -9.3922331144050875e-01 + 3.0313003627167143e+00 3.9427003244919279e-01 -1.0566775789418541e+00 + 3.3663139725659352e+00 3.6183471491588226e-01 -1.1810652872199179e+00 + 3.6809123388093896e+00 3.1755309480845750e-01 -1.3135478998235430e+00 + 3.9722002056844090e+00 2.6145319584359639e-01 -1.4565318200497992e+00 + 4.2403418954360372e+00 1.9045594531154419e-01 -1.6141156846117197e+00 + 4.4898429564436331e+00 9.7499341524660110e-02 -1.7872822693832311e+00 + 4.7234101575842491e+00 -2.1651685897853490e-02 -1.9692522068940330e+00 + 4.9408735929180949e+00 -1.6465926219637339e-01 -2.1506695690443816e+00 + 5.1419706195619952e+00 -3.2794653728050793e-01 -2.3261489468331109e+00 + 5.3268017440985966e+00 -5.1215785738101394e-01 -2.4943691167119102e+00 + 5.4904830339473527e+00 -7.1869043187431192e-01 -2.6477059820369604e+00 + 5.5652094793978364e+00 -9.4732743680187959e-01 -2.7486570149037703e+00 + id 13054 + loc 8.9828723669052124e-01 6.5993940830230713e-01 395 + blend 0.0000000000000000e+00 + interp 5.3304078416728295e-01:2.8199225217242019e-01:6.1292514147647248e-03:2.9648723375339830e-01:9.4643640501496873e-01:3.7959131152814940e-01:1.7347699088600788e+00:3.5870452609057490e-01:2.0751785527605424e+00:5.0452566467891491e-01:2.6441242782744951e+00:5.3303545375944128e-01:2.9990602606859467e+00:5.1961998707673795e-01:3.3100988931593953e+00:4.6120540004732868e-01:3.6738428148868651e+00 + CVs 20 + 4.0587972259393656e-01 1.4723767892308887e-01 -4.8998005797461919e-01 + 6.9617389622469039e-01 1.8901915882817977e-01 -8.8020098102709465e-01 + 9.4251955659433162e-01 1.7573394037681045e-01 -1.2414167887091188e+00 + 1.1770809774951416e+00 1.3128815378948733e-01 -1.6022378961759598e+00 + 1.4015091348146977e+00 6.0512219544424650e-02 -1.9526899524982815e+00 + 1.6173213894309155e+00 -3.1705220419854685e-02 -2.2836672563010927e+00 + 1.8237882717081757e+00 -1.4066030765026860e-01 -2.5893095011499629e+00 + 2.0139560953398217e+00 -2.6311082549264708e-01 -2.8652342727307598e+00 + 2.1742176012850782e+00 -3.9675145575125326e-01 -3.1027447453493444e+00 + 2.2966496933573861e+00 -5.3203482201081043e-01 -3.2874129158530856e+00 + 2.3863035082908279e+00 -6.5854547826932786e-01 -3.4147058278192191e+00 + 2.4558265740813532e+00 -7.7755837488148760e-01 -3.5006452696839325e+00 + 2.5166053694640165e+00 -9.0230869047066364e-01 -3.5709278923160950e+00 + 2.5769545556343485e+00 -1.0434618321316746e+00 -3.6401706548812252e+00 + 2.6452699748275612e+00 -1.2043349604209344e+00 -3.7109075291599636e+00 + 2.7265297826801222e+00 -1.3789218583021816e+00 -3.7823616191890106e+00 + 2.8203094653167815e+00 -1.5565920417781207e+00 -3.8547433733725773e+00 + 2.9222225415138663e+00 -1.7463795659603796e+00 -3.9296512447960454e+00 + 2.9905429918819117e+00 -2.2181419232229600e+00 -4.0382847315002994e+00 + id 13055 + loc 3.8756087422370911e-01 8.1723439693450928e-01 402 + blend 0.0000000000000000e+00 + interp 4.8514686624919834e-01:4.3859746702370522e-01:8.6993917171755419e-02:4.2806443720652015e-01:9.0493789928762314e-01:4.1485767581204791e-01:1.5729601280948613e+00:4.8514201478053587e-01:2.0058371204664591e+00:3.1200758507157572e-01:2.6235752524317926e+00:3.9745266477030267e-01:3.5793581175302052e+00 + CVs 20 + -7.2623991398288998e-02 1.4570357029844561e-01 -1.4485048092530609e-01 + -1.1547566943488999e-01 3.0355181486956795e-01 -2.9811757953041446e-01 + -1.5226739928912569e-01 4.5835416700651976e-01 -4.5968051344674932e-01 + -1.9305911686364133e-01 6.0345045236715644e-01 -6.2741119485207630e-01 + -2.4401125915169264e-01 7.4042870772622360e-01 -8.0077255938618996e-01 + -3.1342404896384402e-01 8.6750467511897877e-01 -9.7613924376615802e-01 + -4.0806527365300044e-01 9.8003024618091472e-01 -1.1478921207697361e+00 + -5.3050577804135735e-01 1.0737084889824562e+00 -1.3101193154746122e+00 + -6.7911362239174500e-01 1.1466969660855004e+00 -1.4571850593753273e+00 + -8.4970018259025049e-01 1.1998385951619457e+00 -1.5845903175841998e+00 + -1.0362953104428858e+00 1.2346931202538141e+00 -1.6888366233826995e+00 + -1.2316295705437605e+00 1.2547767278874939e+00 -1.7684041768534271e+00 + -1.4301550872669446e+00 1.2652961601946990e+00 -1.8248291189324555e+00 + -1.6256647029359395e+00 1.2727326606996963e+00 -1.8575995984545037e+00 + -1.8083238086172155e+00 1.2847901053230726e+00 -1.8624244687157843e+00 + -1.9638398752135382e+00 1.3056138324784710e+00 -1.8377544380265780e+00 + -2.0860144655847144e+00 1.3332475980174974e+00 -1.7930282294545608e+00 + -2.1896013607992799e+00 1.3645265792922077e+00 -1.7413469351405801e+00 + -2.4031824591192046e+00 1.3785735515438318e+00 -1.6886976246037451e+00 + id 13056 + loc 7.4688929319381714e-01 7.9136866331100464e-01 1081 + blend 0.0000000000000000e+00 + interp 4.5135588085269662e-01:3.0954091851273413e-01:4.9051839408063014e-03:4.5135136729388814e-01:8.5988512497747638e-01:2.9727798341285927e-01:1.6496132968999877e+00:3.3378878314517035e-01:2.2150197605352719e+00:4.2559762267414636e-01:2.9344687684563029e+00:3.5053510828956691e-01:3.3486287731706623e+00 + CVs 20 + 5.9453271499878738e-02 4.8036843653213335e-01 4.2013904577528077e-01 + 1.4027349287253496e-01 8.4116170533184276e-01 6.6531580693801529e-01 + 2.3488285877993947e-01 1.1540783825479979e+00 8.3877275202890100e-01 + 3.3878162154795188e-01 1.4481434360808048e+00 9.8534228615419517e-01 + 4.5171781937817351e-01 1.7158207571475448e+00 1.1019270509849235e+00 + 5.6519614712451305e-01 1.9454918859262094e+00 1.1884819230170773e+00 + 6.6347151492693168e-01 2.1271476663833058e+00 1.2496196839904150e+00 + 7.2989911976564736e-01 2.2635961811287051e+00 1.3021409036992502e+00 + 7.6038958584261507e-01 2.3826951255564568e+00 1.3742119989426700e+00 + 7.8657423675314098e-01 2.5266251306659679e+00 1.4609867395444400e+00 + 8.4140655136596920e-01 2.6748591223701856e+00 1.4974093551889287e+00 + 9.0145570295727118e-01 2.7617080589934266e+00 1.4589136854334417e+00 + 9.3490450475557563e-01 2.7626438112668219e+00 1.3740762865940253e+00 + 9.2924396925289043e-01 2.6830545040970457e+00 1.2710942384276356e+00 + 8.8577721043119617e-01 2.5450876342970643e+00 1.1646108207988264e+00 + 8.1637758779976832e-01 2.4006493242970448e+00 1.0539159735999850e+00 + 7.3475180876824775e-01 2.2925964735960318e+00 9.3606551155477602e-01 + 6.4125266816257964e-01 2.1598135527443567e+00 8.9716315519212142e-01 + 5.2092971917667708e-01 1.8523078232885328e+00 1.2000827903067957e+00 + id 13057 + loc 6.3454312086105347e-01 1.5603269636631012e-01 400 + blend 0.0000000000000000e+00 + interp 4.4565760141866306e-01:4.0341422858395620e-01:1.0057346649519749e-01:3.4637897686055585e-01:9.9454755975544007e-01:4.4565314484264890e-01:1.4959668088900828e+00:3.0390582477096251e-01:1.9900850043212928e+00:4.3556654063924266e-01:2.8158361397734009e+00:3.6907505213521113e-01:3.2804589421068169e+00 + CVs 20 + 1.4088044534683855e-01 7.6433867715159851e-02 9.7162988996141272e-02 + 2.7981483508631011e-01 1.9308178422223296e-01 2.2931079820912370e-01 + 4.0569794219916655e-01 3.1643805494938726e-01 3.6554885015980115e-01 + 5.1490142963898611e-01 4.3028917939621125e-01 4.9170617273490175e-01 + 6.0756360778276031e-01 5.3478186638455538e-01 6.0919241894926368e-01 + 6.8464433135787872e-01 6.3106366277271397e-01 7.1903037402738401e-01 + 7.4845938521958455e-01 7.2357736709267029e-01 8.1818313999675429e-01 + 8.0207693172297512e-01 8.2116567764233028e-01 9.0042224140146099e-01 + 8.4474406769533483e-01 9.3684520370785607e-01 9.6725922010192478e-01 + 8.7085285583755057e-01 1.0857450111912605e+00 1.0346071204555511e+00 + 8.8544107065634492e-01 1.2730723219504720e+00 1.1249472853232434e+00 + 9.1265777843822404e-01 1.4751711541019428e+00 1.2520107441948871e+00 + 9.6804290184258235e-01 1.6525948013483389e+00 1.4149561184807569e+00 + 1.0429030438621825e+00 1.7807012667008255e+00 1.6129317152458407e+00 + 1.1291594208596549e+00 1.8518139985091073e+00 1.8428764373025945e+00 + 1.2393883551014111e+00 1.8697923760712836e+00 2.0880033762466637e+00 + 1.3884996801316618e+00 1.8372866405135793e+00 2.3243973575093491e+00 + 1.5601774916391860e+00 1.7398012927003408e+00 2.5292523135586613e+00 + 1.6752979215117481e+00 1.5281933923526207e+00 2.6423479091090698e+00 + id 13058 + loc 5.0413304567337036e-01 4.2247107625007629e-01 393 + blend 0.0000000000000000e+00 + interp 4.5927632255378292e-01:4.5927172979055741e-01:3.3018847153226061e-01:4.2670054376411903e-01:9.9474708255194821e-01:3.2921391486394169e-01:1.4082359347647506e+00:4.1878500002256058e-01:1.9874115064840536e+00:3.0842936172443580e-01:2.3628686617541481e+00:3.1542121540717327e-01:3.0103367485220347e+00:2.8245930172334355e-01:3.9986951363357117e+00 + CVs 20 + 2.1764445524089379e-01 3.0843983415786180e-01 1.5197007073248217e-01 + 4.5079826727766914e-01 6.2588792162494566e-01 3.0412367850745853e-01 + 6.7476421539057840e-01 9.5533805191019883e-01 4.4896743634926134e-01 + 8.8136945883557849e-01 1.2840450369671657e+00 5.9118778899579882e-01 + 1.0824132412550613e+00 1.5909927522188625e+00 7.5270539930304392e-01 + 1.2865512739664018e+00 1.8635889185865389e+00 9.5756976883677436e-01 + 1.4830446179084289e+00 2.1017875817634057e+00 1.2122906533149922e+00 + 1.6574730833966078e+00 2.3099222904942045e+00 1.5065945899997546e+00 + 1.8145085403781001e+00 2.4904033503982914e+00 1.8360472009331168e+00 + 1.9724328613475377e+00 2.6390176520709980e+00 2.2046663620340596e+00 + 2.1519820709380042e+00 2.7415539116362111e+00 2.6174704574778893e+00 + 2.3708841431691035e+00 2.7725948798090752e+00 3.0709848795045516e+00 + 2.6354518691710549e+00 2.6985841168494291e+00 3.5425565409204962e+00 + 2.9390598227573825e+00 2.4931710152545823e+00 3.9768097018046067e+00 + 3.2726649032264366e+00 2.1645107092698961e+00 4.2841085031331918e+00 + 3.6366601299043024e+00 1.7863031602113557e+00 4.3852719059907024e+00 + 4.0400222299035242e+00 1.4811988049163982e+00 4.2832673698445927e+00 + 4.4857610578422538e+00 1.2907611153176846e+00 4.0525618467233846e+00 + 5.0276200698655273e+00 9.5318767014030126e-01 3.7761936919747323e+00 + id 13059 + loc 2.3005064576864243e-02 6.1391800642013550e-01 415 + blend 0.0000000000000000e+00 + interp 3.8746543817286605e-01:3.1356129210096229e-01:7.8291513099083443e-01:2.8658459302437167e-01:1.1331492386178330e+00:3.7320465682850457e-01:1.6610386249300793e+00:3.5018317274623229e-01:2.0000169493146962e+00:3.6145055045726904e-01:2.4830428143707466e+00:3.8746156351848432e-01:3.0010224661300411e+00:2.6378019341188552e-01:3.8568228983646060e+00 + CVs 20 + 3.2658923200641016e-01 1.0858630327372960e-01 7.9064136809287977e-02 + 5.6491794834622799e-01 1.6051927063113058e-01 9.4355356629601761e-02 + 7.7893732397450888e-01 1.9003078619326352e-01 9.4185583140976525e-02 + 9.9740077082353562e-01 2.1126110221127881e-01 9.9359387349229888e-02 + 1.2183839543600203e+00 2.2515499736136696e-01 1.1304580069187398e-01 + 1.4393269140612666e+00 2.3158160142607620e-01 1.3781711571098071e-01 + 1.6572186261252484e+00 2.2956721350506165e-01 1.7541401239062648e-01 + 1.8690626800925711e+00 2.1798064959596858e-01 2.2691017547630399e-01 + 2.0713079901702862e+00 1.9537281524265793e-01 2.9254523024158063e-01 + 2.2584050521321313e+00 1.5890165199997608e-01 3.6960072420742551e-01 + 2.4258246141944104e+00 1.0606304687974910e-01 4.5241169807185799e-01 + 2.5757604865419115e+00 3.7764162782003674e-02 5.3950351689657050e-01 + 2.7130926353268729e+00 -4.3647119373915744e-02 6.3447834332120023e-01 + 2.8370716301323546e+00 -1.3561192772935016e-01 7.3316070324248372e-01 + 2.9444287589274558e+00 -2.3389214331161190e-01 8.2249273411120083e-01 + 3.0361733984371413e+00 -3.3467623159197413e-01 8.9576173974415618e-01 + 3.1163599742626680e+00 -4.3779649788680808e-01 9.5868642000497684e-01 + 3.1886670106989898e+00 -5.4629378383402338e-01 1.0221413581898489e+00 + 3.2559458751189054e+00 -6.6391289343620774e-01 1.0964680080698721e+00 + id 13060 + loc 7.4777489900588989e-01 6.5635550022125244e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9466963445264069e-01:3.9466568775629618e-01:7.5945232327827361e-01:3.4295355190929527e-01:1.0913717474319509e+00:3.6618343245137663e-01:1.9785558596774131e+00:3.7431795865241180e-01:2.7222965208737486e+00:3.1585964729783950e-01:3.2458760694657363e+00:2.5467113517500428e-01:3.9903244224268382e+00 + CVs 20 + 1.0483427377161722e-01 2.8970087832349700e-01 -1.4952296973787532e-01 + 2.1911241957736102e-01 5.7369456206943947e-01 -2.8618886459044268e-01 + 3.5964856432361869e-01 8.3795497195037039e-01 -4.0684329624987037e-01 + 5.4569129021146834e-01 1.0628517731501195e+00 -5.0711790937631152e-01 + 7.8909505358469589e-01 1.2306633941063632e+00 -5.8502828947857721e-01 + 1.0829438990615647e+00 1.3463557743845931e+00 -6.5385507803421961e-01 + 1.4011870742664942e+00 1.4452555518171901e+00 -7.4043360933163549e-01 + 1.7081718506385943e+00 1.5703370884405565e+00 -8.6798111622980390e-01 + 1.9663938078990135e+00 1.7471251396385159e+00 -1.0434630771970428e+00 + 2.1332991043647773e+00 1.9718105845487659e+00 -1.2573076809245969e+00 + 2.1794788549494766e+00 2.1813324332793318e+00 -1.4789894240138550e+00 + 2.1505171277407071e+00 2.2958331051687724e+00 -1.6702115322438902e+00 + 2.1014193066764313e+00 2.3108643631884300e+00 -1.8393228530274384e+00 + 2.0462027613966929e+00 2.2343264623933430e+00 -1.9917296316111475e+00 + 1.9954700789688327e+00 2.0900125870548663e+00 -2.1016147709635487e+00 + 1.9546336226469136e+00 1.9208006561922821e+00 -2.1556296861324369e+00 + 1.9179424688972730e+00 1.7776113781221090e+00 -2.1561311232102049e+00 + 1.8671227953649443e+00 1.6990020663955414e+00 -2.1240694216342395e+00 + 1.8845070056640039e+00 1.4308919989607234e+00 -2.0498081763852745e+00 + id 13061 + loc 9.5916651189327240e-02 9.0247631072998047e-01 417 + blend 0.0000000000000000e+00 + interp 5.0178184816436855e-01:2.8228571384251283e-01:8.9822734490120104e-01:3.1368499602133881e-01:1.0810367499009206e+00:3.7824560717152150e-01:1.9318832116020865e+00:3.0458156320929219e-01:2.5242394405684152e+00:5.0177683034588694e-01:3.0036010804284512e+00:2.9887415754084590e-01:3.9860443183747130e+00 + CVs 20 + -8.8926033302591287e-02 1.4065023410224328e-01 -6.4037044486539726e-02 + -1.4399411505266269e-01 2.4536393272069576e-01 -8.9280579975641414e-02 + -1.7525456544712906e-01 3.3776707973719106e-01 -9.4478729601057826e-02 + -2.0871864701929549e-01 4.3612994168339536e-01 -1.1117399318735352e-01 + -2.4679797966485870e-01 5.3965355996474007e-01 -1.4407018435302080e-01 + -2.9146181593055454e-01 6.4526488174881202e-01 -1.9666562018678413e-01 + -3.4460467545039353e-01 7.4777544148797448e-01 -2.7157863366032770e-01 + -4.0747432964748648e-01 8.4058048041994671e-01 -3.6957933790408987e-01 + -4.7922671270400613e-01 9.1809240526378921e-01 -4.8849218866604599e-01 + -5.5656539067748656e-01 9.7660719940816987e-01 -6.2317269880134207e-01 + -6.3733490148035543e-01 1.0123117978174416e+00 -7.6751018206439370e-01 + -7.2411700450274152e-01 1.0204160976076402e+00 -9.1811958926895998e-01 + -8.2201293457220470e-01 9.9668483466335511e-01 -1.0747858122855645e+00 + -9.3325287368547016e-01 9.3978420069099289e-01 -1.2373648989035240e+00 + -1.0559194312824622e+00 8.5153142269506832e-01 -1.4016115703867711e+00 + -1.1886691488744876e+00 7.3486706534722734e-01 -1.5607498253179601e+00 + -1.3329486951563854e+00 5.9176606601938786e-01 -1.7111269945643286e+00 + -1.4894419862672676e+00 4.2251555423939080e-01 -1.8545444214954518e+00 + -1.6650987810533087e+00 2.4422666853512065e-01 -2.0173705243922364e+00 + id 13062 + loc 7.4029725790023804e-01 9.6299934387207031e-01 403 + blend 0.0000000000000000e+00 + interp 4.3968759568021282e-01:3.2774497994680440e-01:5.1258460698222486e-04:3.6351972621584344e-01:8.5371431444979839e-01:4.3968319880425605e-01:1.0568023445275745e+00:2.8200443052085128e-01:1.9300389409791847e+00:4.3204608771201264e-01:2.4877897384143619e+00:3.6586115753511778e-01:2.9983399723576758e+00:3.7185016748868610e-01:3.4495557114071254e+00 + CVs 20 + -1.2521422496942453e-01 4.9222751069656380e-02 -3.9046442375706848e-02 + -2.4169669858403214e-01 1.1158468085202011e-01 -7.8834892545485591e-02 + -3.6484102133731011e-01 1.7779811076381519e-01 -1.1786762223676550e-01 + -5.0035164295646473e-01 2.4323258353844679e-01 -1.5390061303704006e-01 + -6.4951729862942542e-01 3.0731285875917735e-01 -1.8365311589468081e-01 + -8.1306210610382035e-01 3.6955091736388401e-01 -2.0261593273567363e-01 + -9.9040881504227940e-01 4.2933404413991583e-01 -2.0546039008375130e-01 + -1.1792069001502310e+00 4.8592338623024639e-01 -1.8685798848821789e-01 + -1.3754223485677661e+00 5.3867502263133060e-01 -1.4186020592718193e-01 + -1.5733988474682168e+00 5.8718853502168800e-01 -6.6274950493549353e-02 + -1.7664488002090177e+00 6.3100788840812283e-01 4.2900467857211980e-02 + -1.9480171179653532e+00 6.6841964188083602e-01 1.8698591904126186e-01 + -2.1116574748127350e+00 6.9675313581214227e-01 3.6467600974821734e-01 + -2.2479845517074901e+00 7.1862549176802570e-01 5.6960034957033767e-01 + -2.3440643815991029e+00 7.4914022013267678e-01 7.8851795494859389e-01 + -2.3879977636003131e+00 8.0865557664878551e-01 1.0046262755981672e+00 + -2.3774246166758561e+00 9.0352215498448685e-01 1.2047150435338292e+00 + -2.3180476033510535e+00 1.0247361985251831e+00 1.3847093807245789e+00 + -2.2926224611554851e+00 1.1163399797293767e+00 1.5852141025502631e+00 + id 13063 + loc 1.3691172003746033e-01 6.8353193998336792e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7339720160395640e-01:3.3147421220779077e-01:6.4456916264379549e-01:3.7339346763194037e-01:1.5575612081736643e+00:3.4353457954940225e-01:2.0444527691761158e+00:3.2812524183454689e-01:2.9999308655340440e+00:2.7516232944682373e-01:3.7567218084931686e+00 + CVs 20 + -4.0424809739513623e-02 3.1937412077291627e-01 -1.5180995154256660e-01 + -4.2303264129914864e-02 6.5821465808961332e-01 -3.3346950405423392e-01 + -3.1211470738536709e-02 1.0134714042241559e+00 -5.3765282282079752e-01 + -1.9814704993370458e-02 1.3837955548565464e+00 -7.6795187065999371e-01 + -1.0368528865706661e-02 1.7575957459046436e+00 -1.0338200042306802e+00 + -7.1637932830542483e-03 2.1189898897373260e+00 -1.3459282593438147e+00 + -1.4357374990933092e-02 2.4496213545761107e+00 -1.7135773389341731e+00 + -3.2116624641401803e-02 2.7251225635590579e+00 -2.1412750614913785e+00 + -5.0568857706579012e-02 2.9210311333316894e+00 -2.6269341647341831e+00 + -4.4082323963946901e-02 3.0331885435564812e+00 -3.1583559984312024e+00 + 1.9798719304634782e-02 3.0750822108688913e+00 -3.7038632459513137e+00 + 1.5195559279674198e-01 3.0502068382201166e+00 -4.2198014222761939e+00 + 3.3681726007716900e-01 2.9517800286529954e+00 -4.6790578807619125e+00 + 5.5947979468264508e-01 2.7883260720520533e+00 -5.0756368128837677e+00 + 8.0174910800339383e-01 2.5869267113830405e+00 -5.4159548839005405e+00 + 1.0209626526867774e+00 2.3741412278651244e+00 -5.7324349618589956e+00 + 1.1768623347876199e+00 2.1724487299067685e+00 -6.0593037494912529e+00 + 1.2758286730543946e+00 2.0062553267026644e+00 -6.3950722634210750e+00 + 1.3562625762694018e+00 1.8815698752074139e+00 -6.7304435396160702e+00 + id 13064 + loc 2.6891294121742249e-01 3.9815816283226013e-01 396 + blend 0.0000000000000000e+00 + interp 4.8087851346359439e-01:4.5917705174347073e-01:3.3010107145130108e-01:3.2804986069530367e-01:1.0017153648582651e+00:2.9127380444606382e-01:1.8628826151775764e+00:2.8707888992291530e-01:2.3404735877109619e+00:2.7825303614917429e-01:3.2642075199293146e+00:4.8087370467845980e-01:3.8979318977174091e+00 + CVs 20 + -3.0723058083884447e-01 2.3896565117818505e-01 -6.3125850175704001e-01 + -5.6915975877901048e-01 3.2438006460853108e-01 -1.0645575032381078e+00 + -8.2651710866364780e-01 3.4362641915448622e-01 -1.4632423730842177e+00 + -1.0877380511841910e+00 3.3337738695142077e-01 -1.8882940251590739e+00 + -1.3458815592090538e+00 2.8877321851732141e-01 -2.3355302435558869e+00 + -1.5954136065900473e+00 2.0717739930427648e-01 -2.7956056674523109e+00 + -1.8356888665408553e+00 8.9832662504982563e-02 -3.2560824282064598e+00 + -2.0662742528625992e+00 -6.2315448601373946e-02 -3.7032332657605949e+00 + -2.2813715142920930e+00 -2.5021961553666094e-01 -4.1206556892957469e+00 + -2.4748672342077835e+00 -4.7195029997320348e-01 -4.4892041477758182e+00 + -2.6510683317502304e+00 -7.2667126029700846e-01 -4.7994466575941113e+00 + -2.8220599150851680e+00 -1.0252572850357065e+00 -5.0593075804189027e+00 + -2.9926047205360566e+00 -1.3838353999089636e+00 -5.2785701991881933e+00 + -3.1551530746654661e+00 -1.8049529994128160e+00 -5.4532007240494611e+00 + -3.3009715347152735e+00 -2.2770628233988335e+00 -5.5699091522071873e+00 + -3.4207605035520370e+00 -2.7830446511769407e+00 -5.6141296505314244e+00 + -3.5010797523853978e+00 -3.3028343879900666e+00 -5.5778507204691232e+00 + -3.5411930553107602e+00 -3.8227509372832449e+00 -5.4730486677373156e+00 + -3.6016323401769816e+00 -4.4145578211413090e+00 -5.3873598508845602e+00 + id 13065 + loc 7.5979715585708618e-01 9.5323777198791504e-01 373 + blend 0.0000000000000000e+00 + interp 5.9883876280701309e-01:5.1757564076013607e-01:4.0467632195173242e-02:4.1523602942853249e-01:5.1814156804146105e-01:3.5958458324128534e-01:1.0000017834656580e+00:4.9732305861247589e-01:1.3651511457123235e+00:5.6846766386266911e-01:1.9966510503890598e+00:4.0199606750759304e-01:2.2240085880176057e+00:5.9883277441938509e-01:2.9895754731226871e+00:4.4092411974647522e-01:3.2411240829845598e+00 + CVs 20 + -2.2860573780588800e-01 2.3487115528691704e-01 -7.2487025934233867e-02 + -4.6794208272057969e-01 5.0275308255014262e-01 -1.6463884579040836e-01 + -6.9782327253888399e-01 8.0714939466043434e-01 -2.8249781506892790e-01 + -9.0369895476955775e-01 1.1494160710706469e+00 -4.3669906100805778e-01 + -1.0762193329170040e+00 1.5233287701288842e+00 -6.4542219846464166e-01 + -1.2076538417035436e+00 1.9050691309417238e+00 -9.3113572914915421e-01 + -1.2955236942277955e+00 2.2517511957371479e+00 -1.3132055637877458e+00 + -1.3385894853668854e+00 2.5158820472717389e+00 -1.7927629819298556e+00 + -1.3305320457062473e+00 2.6663116198420558e+00 -2.3476969843001245e+00 + -1.2565355812492711e+00 2.6930237979520881e+00 -2.9422023357302782e+00 + -1.1006377542787309e+00 2.5939657763948838e+00 -3.5339728388376397e+00 + -8.7147097017495312e-01 2.3489540740659725e+00 -4.0690385922492727e+00 + -6.3058942682065722e-01 1.9375502117487935e+00 -4.4831401272326996e+00 + -4.8417160176720864e-01 1.4174441867274696e+00 -4.7679891246507982e+00 + -5.4852934811342691e-01 8.9703434817376726e-01 -5.0133750369608014e+00 + -9.2636285947563424e-01 4.8953095986841499e-01 -5.2724029169208642e+00 + -1.6263724606226941e+00 3.6298293360274902e-01 -5.4822702744904070e+00 + -2.4448991902317987e+00 6.3321646295782452e-01 -5.5149698466618720e+00 + -2.6973265178711192e+00 4.5255880159675677e-01 -5.6936608202807246e+00 + id 13066 + loc 6.7092913389205933e-01 8.3953666687011719e-01 377 + blend 0.0000000000000000e+00 + interp 4.5819559061148096e-01:4.1938129267760726e-01:8.4214744023640153e-02:4.5819100865557488e-01:9.0677668165351133e-01:3.7725354869016903e-01:1.4400981842835248e+00:2.9455819292699942e-01:2.1580464060297744e+00:3.8009552048546780e-01:2.9143658723484309e+00:3.7535704028709382e-01:3.5793662556692056e+00 + CVs 20 + -6.8705646067938941e-01 2.1222228113921640e-01 -5.3836390689919411e-01 + -1.2434207720356707e+00 2.7633243570187493e-01 -8.7480297270238294e-01 + -1.7821751652506044e+00 2.6226280132704211e-01 -1.1600549225036023e+00 + -2.3435385614858086e+00 2.0001532471564798e-01 -1.4556668370941597e+00 + -2.9082585953208873e+00 9.1619870577830387e-02 -1.7576141548830617e+00 + -3.4524633809051037e+00 -5.2953096327650995e-02 -2.0570328524774313e+00 + -3.9609709485227267e+00 -2.1872012500894611e-01 -2.3481818544832129e+00 + -4.4274224499156780e+00 -3.8949680691210808e-01 -2.6357054644008300e+00 + -4.8460076157643055e+00 -5.5410415678257241e-01 -2.9311056046890971e+00 + -5.2099569678408706e+00 -7.1159555424231891e-01 -3.2443312336329617e+00 + -5.5279195219060098e+00 -8.6895523114928186e-01 -3.5761664360553382e+00 + -5.8256912800161915e+00 -1.0480762183305341e+00 -3.9195745043579100e+00 + -6.1187368828792232e+00 -1.2986030495194920e+00 -4.2610854322052223e+00 + -6.4026436894842886e+00 -1.6796034429937392e+00 -4.5748256623607233e+00 + -6.6678333005861505e+00 -2.1989601737334077e+00 -4.8406874368727024e+00 + -6.9207680252494557e+00 -2.7837655145832292e+00 -5.0780972648458604e+00 + -7.1789345163724105e+00 -3.3276664957062083e+00 -5.3149352693930609e+00 + -7.4602525212919168e+00 -3.7757269026512983e+00 -5.5360721572823337e+00 + -7.7850109257312301e+00 -4.2638944597076565e+00 -5.7554058765910625e+00 + id 13067 + loc 1.0676714032888412e-01 7.0852714776992798e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8701107197352413e-01:3.7938382407182847e-01:4.9402364130690657e-04:3.8700720186280441e-01:7.7392946945835051e-01:3.2543291939817504e-01:1.4051727911233978e+00:3.5874120975976487e-01:2.2079152264661759e+00:3.2412965819063366e-01:3.1753916593336200e+00 + CVs 20 + -5.4797543083666855e-02 2.0878974475291726e-01 2.4021133629263988e-01 + -1.0753674897040319e-01 4.1416417393098731e-01 4.4539285548934426e-01 + -1.5763416759277565e-01 6.2207600728560475e-01 6.1637913808854339e-01 + -1.9154800357209212e-01 8.8262476384113797e-01 7.9413300959269006e-01 + -1.9339699029824353e-01 1.2160557274009152e+00 9.7203807938977471e-01 + -1.3168838113709083e-01 1.6466752428943052e+00 1.1324028352994808e+00 + 4.3123665366402997e-02 2.1856555915652636e+00 1.2296036710538729e+00 + 3.7436137777096024e-01 2.7887453389508599e+00 1.1853939576205703e+00 + 8.5088112158389062e-01 3.3471623164905773e+00 9.2898633456435076e-01 + 1.3903229284512471e+00 3.7437614650522484e+00 4.4677948549122215e-01 + 1.8949274796980908e+00 3.9106869947426586e+00 -2.1507896727163978e-01 + 2.2874534638428470e+00 3.8309478087643400e+00 -9.6118481975665948e-01 + 2.5239117917298604e+00 3.5600464789890793e+00 -1.6372386635642568e+00 + 2.6353766881965708e+00 3.2329917763715224e+00 -2.0957272201336177e+00 + 2.6974331926340454e+00 3.0056794296076466e+00 -2.2317150683545370e+00 + 2.7547169332332087e+00 2.9710139718113058e+00 -1.8742530702137232e+00 + 2.7080540499680530e+00 2.8420794701021568e+00 -7.9821283071882843e-01 + 2.1812621902378222e+00 1.8326354468764199e+00 5.7769565136653400e-01 + 2.2793515070101718e+00 1.9166659591303210e+00 5.2226468014246918e-01 + id 13068 + loc 5.4684281349182129e-01 7.1128737926483154e-01 380 + blend 0.0000000000000000e+00 + interp 4.7870295203692587e-01:4.2157623177522868e-01:2.8608557982923166e-05:3.5483735841812986e-01:5.2306467360944464e-01:2.9223819580540111e-01:1.0831377412604826e+00:3.7302906681777870e-01:2.0034308699925756e+00:4.7869816500740553e-01:2.8654695130141401e+00:3.9023048791721354e-01:3.2118412137953456e+00 + CVs 20 + -4.1451444853945746e-01 2.3665840038250616e-01 -5.0773309011495016e-01 + -7.8115470316185787e-01 3.9043990846095455e-01 -8.9895801009019671e-01 + -1.1333516804333650e+00 5.0408512830787611e-01 -1.2922924076133779e+00 + -1.4803930290434222e+00 5.9366033325619261e-01 -1.7445357696607453e+00 + -1.8110189560440926e+00 6.4711060341206383e-01 -2.2527796504278426e+00 + -2.1145938818399892e+00 6.4647033608192750e-01 -2.8024418872513879e+00 + -2.3827682489680360e+00 5.7170491830288905e-01 -3.3681958465603028e+00 + -2.6061122103428720e+00 4.1030225600657411e-01 -3.9150510012441400e+00 + -2.7810791831564274e+00 1.6647604998938093e-01 -4.4044665939126411e+00 + -2.9160305371484485e+00 -1.3857515093278927e-01 -4.8025628989680360e+00 + -3.0211650109690211e+00 -4.7223770356414008e-01 -5.0833935579015908e+00 + -3.1012449166316638e+00 -7.9635123965246768e-01 -5.2369945579777868e+00 + -3.1687747082389337e+00 -1.0868021779052839e+00 -5.2891582721453396e+00 + -3.2510918987002206e+00 -1.3687519408550228e+00 -5.3042319894830339e+00 + -3.3699774280076307e+00 -1.7109273591631329e+00 -5.3456171966810686e+00 + -3.5287744806575483e+00 -2.1276138330789789e+00 -5.4358422996303233e+00 + -3.7254490415403669e+00 -2.5575669820478741e+00 -5.5681582859630039e+00 + -3.9492810976920429e+00 -2.9212378230394873e+00 -5.7115863362888923e+00 + -4.1532124326043700e+00 -3.1696122850911452e+00 -5.8363319790978050e+00 + id 13069 + loc 1.1681197583675385e-01 5.6860452890396118e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9607064211267090e-01:3.1458286934745860e-01:2.1346762430885080e-01:3.9606668140624979e-01:9.8832310429799453e-01:3.3187224400907750e-01:1.6736795700391833e+00:3.8688161000069171e-01:2.5906285346997562e+00:3.2004245030753437e-01:3.0237949773105006e+00:3.3183664549275338e-01:3.7604381337216384e+00 + CVs 20 + -1.9899963776607943e-01 4.3428670623677945e-01 2.4174282488376017e-01 + -3.5337744436408619e-01 7.7329330960262221e-01 2.6888216563348927e-01 + -5.6114628363261077e-01 1.0753950985060268e+00 2.7585837273508101e-01 + -8.3787674619036290e-01 1.3455826336791634e+00 2.8754126088223464e-01 + -1.1761259573308107e+00 1.5716218492038772e+00 2.9719694167048993e-01 + -1.5654270462462712e+00 1.7452724341158914e+00 3.0270212047046363e-01 + -1.9936116989471306e+00 1.8628060010715686e+00 3.0649661811238649e-01 + -2.4483949616378435e+00 1.9243667540860658e+00 3.1456781247737153e-01 + -2.9174194390607551e+00 1.9330177772101540e+00 3.3395293438218898e-01 + -3.3883827556757233e+00 1.8936804666070346e+00 3.7077727192473486e-01 + -3.8496030607536356e+00 1.8105699888785001e+00 4.2773729080481204e-01 + -4.2893477415605981e+00 1.6871272062946732e+00 5.0243301897591508e-01 + -4.6928322844310673e+00 1.5347258240992372e+00 5.9130186733084666e-01 + -5.0404822975402404e+00 1.3839442223090255e+00 6.9450689788889153e-01 + -5.3165696208388660e+00 1.2699940960963891e+00 8.1199208385432242e-01 + -5.5201806659466826e+00 1.2000921416385679e+00 9.3672566531859713e-01 + -5.6610626751020892e+00 1.1589300173176220e+00 1.0582688359838790e+00 + -5.7489218044803554e+00 1.1329638231981638e+00 1.1668883055717088e+00 + -5.8444089117921774e+00 1.0774190286047995e+00 1.2491106895292257e+00 + id 13070 + loc 7.7263629436492920e-01 9.1078263521194458e-01 400 + blend 0.0000000000000000e+00 + interp 3.5469275893087771e-01:3.3044644861523298e-01:3.3696939293062722e-02:2.6818061766134910e-01:9.9839042409998424e-01:3.5468921200328840e-01:1.5129672483290921e+00:3.0350447991041946e-01:2.2706646059728977e+00:2.4397926631438671e-01:3.2712703384176969e+00 + CVs 20 + -3.0039235509522072e-01 2.3643376131428262e-01 -1.9214283133699445e-01 + -5.9063680458045864e-01 4.8607901505172657e-01 -4.0494754496627317e-01 + -8.8429858344206169e-01 7.3443639673090433e-01 -6.4029299067401235e-01 + -1.1913929406790242e+00 9.4974217745128020e-01 -8.8236449101664349e-01 + -1.5202389165144254e+00 1.0981492191590787e+00 -1.1086378212498922e+00 + -1.8692505009218709e+00 1.1611215034155768e+00 -1.3077834346338102e+00 + -2.2265650514082846e+00 1.1338688755246453e+00 -1.4818281383080589e+00 + -2.5716826166477031e+00 1.0191318913259082e+00 -1.6426323448171152e+00 + -2.8672212094650584e+00 8.2869564270339025e-01 -1.8045685455241747e+00 + -3.0684714008439964e+00 5.9393965434576379e-01 -1.9675489475563457e+00 + -3.1778794889580864e+00 3.3469123114423882e-01 -2.1386642391262116e+00 + -3.2579586934252784e+00 -1.0401127911152663e-03 -2.3635453625624567e+00 + -3.3818495599881930e+00 -4.5340179631743083e-01 -2.6775285048067086e+00 + -3.6255868600408281e+00 -9.6910181364962145e-01 -3.0757238046127888e+00 + -4.0152013246212581e+00 -1.4363013486964484e+00 -3.5280706346116313e+00 + -4.4822006290333105e+00 -1.7562538769064866e+00 -3.9976766764059191e+00 + -4.9363817990481280e+00 -1.9170775860495790e+00 -4.4613361847304116e+00 + -5.3543065089450970e+00 -1.9788036042535522e+00 -4.9151396009633972e+00 + -5.8127005179647018e+00 -2.0402407739887414e+00 -5.3899797441570723e+00 + id 13071 + loc 1.8337152898311615e-01 3.9662271738052368e-02 402 + blend 0.0000000000000000e+00 + interp 4.8916664934081422e-01:3.1362450513223405e-01:9.8576285028700528e-01:3.6194415774747307e-01:1.5134952150484464e+00:4.6097999512162452e-01:1.9636751081108237e+00:3.6587810514128039e-01:2.8377005282371641e+00:4.0607808270840673e-01:3.2017357185841044e+00:4.8916175767432085e-01:3.7203016430264522e+00:4.6289032983892142e-01:3.9998934919094880e+00 + CVs 20 + -1.3072123758081247e-01 3.3072116324039974e-01 2.7545086934922436e-01 + -3.0493740266509917e-01 6.6526626494720054e-01 5.2095464786965662e-01 + -5.4232705429923178e-01 9.9247780052398704e-01 7.4474823091896836e-01 + -8.4713792780557307e-01 1.2974624980974394e+00 9.5333341031175778e-01 + -1.2104666045517631e+00 1.5653248224946490e+00 1.1507676072267377e+00 + -1.6186231083777629e+00 1.7864225243579368e+00 1.3391608380321989e+00 + -2.0557377894163555e+00 1.9559236414107177e+00 1.5203317748997338e+00 + -2.5031524959390881e+00 2.0705135265221735e+00 1.7022494916305313e+00 + -2.9429212134260450e+00 2.1275688490684703e+00 1.8917956072124040e+00 + -3.3631112875997213e+00 2.1244331516981605e+00 2.0823517072106732e+00 + -3.7506646771075767e+00 2.0556410868800157e+00 2.2632853875994519e+00 + -4.0821987763436667e+00 1.9162695503006120e+00 2.4371064716955906e+00 + -4.3436256050256539e+00 1.7185612767958696e+00 2.6204515359828267e+00 + -4.5525213778202431e+00 1.4969848868666471e+00 2.8437665231226608e+00 + -4.7340404137936680e+00 1.2959615237085698e+00 3.1435614966680063e+00 + -4.9024316418229450e+00 1.1780541776230211e+00 3.5361874909161006e+00 + -5.0648693837123391e+00 1.2232323987350979e+00 3.9851604083681922e+00 + -5.2308223707227661e+00 1.4120517003387585e+00 4.3956185669005157e+00 + -5.4841993745268223e+00 1.4299870895971751e+00 4.7945000768578003e+00 + id 13072 + loc 9.9799734354019165e-01 3.2384008169174194e-01 395 + blend 0.0000000000000000e+00 + interp 3.5178429785599430e-01:3.5178078001301577e-01:5.2996005914249467e-01:2.6085443313860701e-01:1.1603266081179711e+00:3.4382504841589756e-01:2.2482314945612210e+00:3.3063014730480578e-01:2.9999849346877996e+00:2.8894816249867683e-01:3.5832765581563706e+00 + CVs 20 + -4.9332757864936461e-01 2.3962514735981144e-01 2.7385897683608446e-01 + -9.0617352216468106e-01 4.2410316593366865e-01 5.3598175747201682e-01 + -1.3174875658978267e+00 5.8097298510544104e-01 7.8526009249381212e-01 + -1.7661920928314865e+00 7.2280051682468560e-01 1.0223545367003237e+00 + -2.2472555737277373e+00 8.3966757241875045e-01 1.2404561110637859e+00 + -2.7523145496565067e+00 9.1398733860048420e-01 1.4318334228198701e+00 + -3.2670665840297231e+00 9.2714853562008015e-01 1.5852755182494238e+00 + -3.7696568732899305e+00 8.6811050648794819e-01 1.6854745017050108e+00 + -4.2366439631539299e+00 7.4051959207044438e-01 1.7238491791448072e+00 + -4.6515568085627761e+00 5.6109958212206879e-01 1.7060514232460446e+00 + -5.0012240996684909e+00 3.5277764243607690e-01 1.6442088856761892e+00 + -5.2725647387524042e+00 1.4429832286179023e-01 1.5486827790462763e+00 + -5.4768280700010727e+00 -4.0679967191922906e-02 1.4366020014070382e+00 + -5.6686251591450629e+00 -2.2665710836518382e-01 1.3388976894671660e+00 + -5.8946361200337609e+00 -4.8140730655738606e-01 1.2820622963988859e+00 + -6.1631938715044985e+00 -8.3097762896113858e-01 1.2833000105418653e+00 + -6.4857649138032922e+00 -1.2690660131349891e+00 1.3659222450873776e+00 + -6.8645563926761914e+00 -1.7679192766812757e+00 1.5652750181541448e+00 + -7.1070511001582375e+00 -2.0043334237293542e+00 1.7592973761476420e+00 + id 13073 + loc 4.7556835412979126e-01 5.0320714712142944e-01 376 + blend 0.0000000000000000e+00 + interp 3.7979264998222539e-01:2.9442893374315593e-01:4.6609149031989849e-01:3.7978885205572560e-01:1.3809284513627678e+00:3.7467946319642303e-01:2.1100334958612605e+00:3.2475558902797580e-01:3.0663868793286477e+00:2.7149839429888784e-01:3.8369944763282144e+00 + CVs 20 + -1.7299362318778472e-01 3.2603469734695290e-01 5.4912529651532438e-01 + -2.3904212664866203e-01 5.5148405908269871e-01 9.8791093616198777e-01 + -2.0958666639405096e-01 6.7611545785420324e-01 1.4091000176106907e+00 + -9.6873064830597433e-02 7.2666332608509998e-01 1.8455086348630199e+00 + 7.2055179302819683e-02 7.6465253113212828e-01 2.2787084819365750e+00 + 2.6001839687898487e-01 8.3487219661472545e-01 2.7159306922899855e+00 + 4.1484855968331236e-01 9.3760367724089377e-01 3.1881389122934136e+00 + 4.7740410048864801e-01 1.0525461507186478e+00 3.7083911992543981e+00 + 4.0017216018226121e-01 1.1681154233530102e+00 4.2532684904702851e+00 + 1.5636427610697345e-01 1.2768416363117654e+00 4.7744145665674891e+00 + -2.3895264194874699e-01 1.3558587558131465e+00 5.2307312065340312e+00 + -7.3055522400026585e-01 1.3721928800494347e+00 5.5989016394401192e+00 + -1.2472364210484732e+00 1.2918537982603653e+00 5.8567543098223602e+00 + -1.7206822410745550e+00 1.1011103456186744e+00 5.9859539779402198e+00 + -2.0979854607812536e+00 8.4056011075001313e-01 5.9784251355009657e+00 + -2.3789939863554861e+00 5.5556582407270660e-01 5.8446263861819014e+00 + -2.5818451280389452e+00 2.1154106589766863e-01 5.6513981926183723e+00 + -2.6502864529281043e+00 -2.6435441090912404e-01 5.5340573834825078e+00 + -2.6473936167575540e+00 -8.8590002295998271e-01 5.5124924475611277e+00 + id 13074 + loc 9.5149256289005280e-02 4.8450005054473877e-01 417 + blend 0.0000000000000000e+00 + interp 5.1651908258346946e-01:5.1651391739264363e-01:8.2514455760074257e-01:2.5081708985485518e-01:9.9884894685424030e-01:3.1356129210096229e-01:1.7175677733153205e+00:3.8963037820627339e-01:2.0318382346243005e+00:2.6442880196294882e-01:2.8735330442775782e+00:3.2340584994807436e-01:3.3774572251083037e+00 + CVs 20 + -1.4623833569676953e-01 1.2623148150620683e-01 2.2919768342445238e-01 + -2.1823608734567662e-01 2.1539050740073840e-01 3.9806485249436330e-01 + -2.5838510305612306e-01 2.9023988381648630e-01 5.4358593105219200e-01 + -3.0051491760975724e-01 3.7186232043612077e-01 6.9757700789227384e-01 + -3.4999763799659461e-01 4.5971840850618645e-01 8.6013596172922435e-01 + -4.1270083103442745e-01 5.5158599164675159e-01 1.0309329694409237e+00 + -4.9550038153324627e-01 6.4477427048819358e-01 1.2082297704665881e+00 + -6.0527090542749162e-01 7.3543486823039639e-01 1.3885140780255139e+00 + -7.4743238009888624e-01 8.1860220744817624e-01 1.5659544694638745e+00 + -9.2403675265108198e-01 8.8823716326895952e-01 1.7329393489031770e+00 + -1.1326247847672493e+00 9.3790883371575973e-01 1.8828390355727311e+00 + -1.3678239306887012e+00 9.6348576907441008e-01 2.0121336857131622e+00 + -1.6248758222704314e+00 9.6524591818213201e-01 2.1188922185480803e+00 + -1.8993556178561963e+00 9.4624392059810125e-01 2.2008024938753623e+00 + -2.1832967976212023e+00 9.0941306764681806e-01 2.2585456320350223e+00 + -2.4672278208774165e+00 8.5653185758548411e-01 2.2995724959424688e+00 + -2.7473962575654785e+00 7.8786157236046628e-01 2.3318410031491927e+00 + -3.0260640338317546e+00 7.0265513654410716e-01 2.3544574148698674e+00 + -3.2990372587001713e+00 6.5875469340961090e-01 2.3634716286715229e+00 + id 13075 + loc 5.8115196228027344e-01 2.1431599557399750e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2992861431608465e-01:3.4071184141134975e-01:7.9612414099770246e-01:3.4091242178951087e-01:1.1584425351386016e+00:3.5610077873185259e-01:1.9167260945151869e+00:3.4679064612321175e-01:2.4690899518961364e+00:4.2992431502994150e-01:3.0774233370425037e+00:3.0778659761622651e-01:3.9432813434901535e+00 + CVs 20 + -4.9056033058792470e-03 4.0525014853209873e-01 2.0267788007986506e-01 + -5.2806515952738498e-02 8.1970870930201156e-01 4.3113624992374511e-01 + -1.0145980992355441e-01 1.2377723630651980e+00 6.8510947814069889e-01 + -1.3381816201684077e-01 1.6466092053965098e+00 9.7287685523757506e-01 + -1.4400675026348325e-01 2.0233184899769379e+00 1.3061335651026311e+00 + -1.3238800303462972e-01 2.3356499270892517e+00 1.6942822335483076e+00 + -1.0919458608356025e-01 2.5509829290272141e+00 2.1324588899302928e+00 + -9.3831665821455523e-02 2.6437761621906857e+00 2.6014383106717780e+00 + -1.1021861508406794e-01 2.5912101647397301e+00 3.0711695594095159e+00 + -1.7366114371110142e-01 2.3995666464718113e+00 3.4999532523632881e+00 + -2.8532418246016433e-01 2.1315802264207719e+00 3.8708123296947803e+00 + -4.4183084403689132e-01 1.8551821520344045e+00 4.2088682607945174e+00 + -6.1726958474260996e-01 1.6012919242802259e+00 4.5300144595606699e+00 + -7.5072561569443397e-01 1.3723677747337124e+00 4.8312724557549869e+00 + -7.9041710326669068e-01 1.1786179960819525e+00 5.1166379902304753e+00 + -7.2268935472281248e-01 1.0623276500643128e+00 5.3878454556133581e+00 + -5.8017530272019369e-01 1.0455069254854599e+00 5.6181824034039183e+00 + -4.4084590805079538e-01 1.0643980109461797e+00 5.8167366577300328e+00 + -3.6627071328561356e-01 1.0045313173950745e+00 6.1104296072863553e+00 + id 13076 + loc 1.3275921810418367e-03 6.1535412073135376e-01 373 + blend 0.0000000000000000e+00 + interp 4.6999918921133305e-01:4.6999448921944098e-01:4.3882045862037378e-01:2.3182062824667354e-01:1.3042604153677793e+00:3.5630425645164476e-01:2.1291690650321047e+00:3.9393139968748847e-01:3.0423737215494402e+00:4.5113129990168915e-01:3.6170272059220294e+00:4.0445757495941220e-01:3.9987208982194122e+00 + CVs 20 + -3.7282897320889280e-01 5.5768312540137543e-01 -2.0847111087120437e-02 + -6.9540303165726658e-01 1.0800158509296303e+00 -5.6351645048514781e-02 + -9.7149160169539073e-01 1.6029118697424518e+00 -1.1749455614268389e-01 + -1.1951267356303221e+00 2.1527157134099033e+00 -2.2291593710456736e-01 + -1.3420019948726369e+00 2.7127251359942881e+00 -3.9526206873565961e-01 + -1.4093996416682328e+00 3.2307264480596776e+00 -6.3976487122182701e-01 + -1.4268488544635987e+00 3.6554447363357228e+00 -9.3804790261633475e-01 + -1.4292371210281747e+00 3.9608759493412742e+00 -1.2582942351636734e+00 + -1.4376929836752850e+00 4.1465981914154835e+00 -1.5791558771831307e+00 + -1.4697131837115915e+00 4.2250734186864625e+00 -1.9090511931995231e+00 + -1.5546029883268120e+00 4.2077545688433533e+00 -2.2652998861540232e+00 + -1.7239495269992227e+00 4.1036967873458350e+00 -2.6420892377978027e+00 + -1.9875079189673628e+00 3.9216760964191177e+00 -3.0112602463012084e+00 + -2.3449188568858919e+00 3.6649947671313994e+00 -3.3417088892236642e+00 + -2.8090375405237782e+00 3.3335085568976170e+00 -3.6122535625842449e+00 + -3.3903530633177779e+00 2.9344286018940275e+00 -3.8372403845323322e+00 + -4.0646392744399904e+00 2.4951842158567921e+00 -4.0545044066270748e+00 + -4.8222645925835836e+00 2.0737895677295692e+00 -4.2746724310145190e+00 + -5.4975402584575006e+00 1.4160537401775894e+00 -4.2445957679039452e+00 + id 13077 + loc 3.0060449242591858e-01 5.5823969841003418e-01 374 + blend 0.0000000000000000e+00 + interp 4.7709070482818150e-01:3.7023743494226141e-01:6.6613583519364861e-01:4.7708593392113324e-01:1.0969695777074184e+00:3.4495505963063317e-01:1.8420492940469924e+00:4.6250712630542468e-01:2.5302015975859722e+00:4.3494119543958398e-01:3.0437214159948391e+00:3.3949105528770701e-01:3.7710641627425425e+00 + CVs 20 + -7.3901587166974136e-01 4.1816803811269843e-01 -2.3876297823127074e-01 + -1.3419281180248990e+00 6.8754665677552607e-01 -3.5565490175870040e-01 + -1.9108686087601934e+00 8.6063813716705040e-01 -3.8800266592811139e-01 + -2.4736405486268729e+00 9.8729884772090615e-01 -3.7335806842046004e-01 + -3.0139166961989265e+00 1.1016708653049221e+00 -3.4725352068588455e-01 + -3.5302657130287507e+00 1.2246487162090620e+00 -3.4007677386432533e-01 + -4.0341364675643918e+00 1.3602857831312081e+00 -3.7224305458235185e-01 + -4.5421527412679152e+00 1.5007057051880772e+00 -4.5465953218651078e-01 + -5.0664744260411307e+00 1.6299939601853251e+00 -6.0483856951867865e-01 + -5.6040204161276828e+00 1.7238488578820736e+00 -8.5422420618535044e-01 + -6.1444940707726090e+00 1.7491633832342330e+00 -1.2208905893585187e+00 + -6.6757744194150970e+00 1.6620128262846541e+00 -1.6916056271670201e+00 + -7.1601885410665194e+00 1.4205456372836172e+00 -2.2113102619233072e+00 + -7.5192562952364490e+00 1.0333339464912088e+00 -2.6862890382561249e+00 + -7.7031820307314387e+00 5.7325362563799098e-01 -3.0447305451106113e+00 + -7.7384367054861798e+00 9.3334941634720003e-02 -3.3011623848586540e+00 + -7.6983859782974173e+00 -4.1092920495144414e-01 -3.5251530856836419e+00 + -7.6869368422594402e+00 -9.3177721091768761e-01 -3.7282920707552925e+00 + -7.8214657988856091e+00 -1.3445978304193611e+00 -3.7836754884869026e+00 + id 13078 + loc 7.7862936258316040e-01 7.8168326616287231e-01 396 + blend 0.0000000000000000e+00 + interp 4.1145651543928963e-01:4.1145240087413526e-01:5.4382417326955279e-01:3.5747542180496578e-01:1.0461902425811402e+00:2.5961670485359339e-01:1.9913175326241566e+00:3.2027297131692722e-01:2.4587336017583965e+00:2.9182865536339853e-01:3.1475125549530869e+00:3.4213560482475264e-01:3.9986521535401351e+00 + CVs 20 + 9.2263254904768244e-01 2.1771230348030707e-01 -3.6786363819404905e-01 + 1.5237380711672308e+00 2.5428289620092270e-01 -6.7748722125811023e-01 + 2.0410536413690963e+00 2.2372916247619123e-01 -9.7586974268555338e-01 + 2.5646335927597192e+00 1.7339077081659349e-01 -1.2703646964626456e+00 + 3.0897014505826772e+00 1.0582259842929864e-01 -1.5422526341349547e+00 + 3.6141783157257281e+00 2.4334032171901776e-02 -1.7773450260909218e+00 + 4.1394509284874461e+00 -6.5589716338818826e-02 -1.9710079512430387e+00 + 4.6709272899143564e+00 -1.5829958900872798e-01 -2.1288892530114021e+00 + 5.2182965748894716e+00 -2.5908440566614854e-01 -2.2617139902434991e+00 + 5.7919652990040298e+00 -3.8802307446476947e-01 -2.3859501886297765e+00 + 6.3883183543720348e+00 -5.7565825289710948e-01 -2.5254776806482613e+00 + 6.9783621831602405e+00 -8.4504484244458133e-01 -2.7008454088438119e+00 + 7.5242396370352420e+00 -1.1995216567592821e+00 -2.9162027949766207e+00 + 7.9982418340567101e+00 -1.6310386232377558e+00 -3.1623442228676728e+00 + 8.3822583709863938e+00 -2.1229012445749675e+00 -3.4267149997091702e+00 + 8.6680692826179637e+00 -2.6484400733945810e+00 -3.6973941651153246e+00 + 8.8624198870267907e+00 -3.1793957640806481e+00 -3.9564752937893797e+00 + 8.9828286380048006e+00 -3.6877183534398634e+00 -4.1751738019649833e+00 + 9.0054900627187955e+00 -4.0511729096777476e+00 -4.2766936911410225e+00 + id 13079 + loc 8.9564776420593262e-01 3.9752626419067383e-01 401 + blend 0.0000000000000000e+00 + interp 4.4142434747715470e-01:3.8741352320638195e-01:2.2854262398337399e-01:2.4669183399075587e-01:8.6486391608785129e-01:2.9675115149045467e-01:1.3180230484060877e+00:4.4141993323367995e-01:2.0438815795507761e+00:3.6170923101713237e-01:2.9579232146511791e+00:3.4080119133075465e-01:3.8213008444773937e+00 + CVs 20 + 1.5341501970774540e-01 3.7489945828174975e-01 9.3596222458676312e-02 + 2.8839432815826238e-01 7.7015620665999318e-01 2.0281948313588105e-01 + 3.9330966038233600e-01 1.1770747420060474e+00 3.2711819984995633e-01 + 4.7070890554812878e-01 1.5835824666819298e+00 4.7265426663142657e-01 + 5.3218048121239847e-01 1.9776026165334355e+00 6.4515420114669120e-01 + 5.9026896403976337e-01 2.3503056965113185e+00 8.4340120485231562e-01 + 6.5576227862734293e-01 2.6979380240106825e+00 1.0622579389698414e+00 + 7.3729799906403337e-01 3.0181541316475955e+00 1.2978451387443113e+00 + 8.4284996245977140e-01 3.3107251364903605e+00 1.5541049019322630e+00 + 9.8044648293386449e-01 3.5763200266696180e+00 1.8483020120119318e+00 + 1.1512424152688894e+00 3.8043242741209653e+00 2.2043160206362815e+00 + 1.3444798223352579e+00 3.9652011157493634e+00 2.6359098298154819e+00 + 1.5405266564990709e+00 4.0176757659873594e+00 3.1143258330752159e+00 + 1.7070065954518379e+00 3.9584506199327167e+00 3.5433315394343792e+00 + 1.8013207401524796e+00 3.8551974435650704e+00 3.8413767337767464e+00 + 1.7751489674698941e+00 3.7661360446712067e+00 4.0041132660130474e+00 + 1.5791132245792721e+00 3.6648920695567484e+00 4.0686330176823287e+00 + 1.3398438908726082e+00 3.4585757035867171e+00 4.1141016105269799e+00 + 1.6177488122786037e+00 3.3641810480828869e+00 4.1693490535591993e+00 + id 13080 + loc 8.2552731037139893e-01 5.8425039052963257e-01 411 + blend 0.0000000000000000e+00 + interp 3.6728646570580320e-01:3.6561375255551931e-01:2.1593393450180143e-01:2.7612925490236173e-01:9.8956786124212737e-01:2.7003187126327755e-01:1.7746067444079985e+00:3.6728279284114618e-01:2.4267081287352315e+00:3.0158547474652708e-01:3.1296465364344526e+00:2.4655650597214118e-01:3.9173542473267884e+00 + CVs 20 + 8.0536860462714810e-01 2.1970834969984424e-01 -2.2089074061476399e-01 + 1.3646955168986343e+00 3.2692562309622275e-01 -3.9090901753630825e-01 + 1.8651261855310255e+00 4.0256189200455678e-01 -5.2424829506321069e-01 + 2.3691401957456621e+00 4.7166714925354813e-01 -6.2078715031502796e-01 + 2.8651772619760592e+00 5.1874107182687945e-01 -6.7594771964451517e-01 + 3.3432001202473183e+00 5.3175906864204836e-01 -6.9295962506192832e-01 + 3.7982482298033116e+00 5.0479774897713281e-01 -6.8116419468021894e-01 + 4.2301499434092582e+00 4.3687642102191304e-01 -6.4956479061307348e-01 + 4.6432996105200921e+00 3.2837406049060824e-01 -5.9868853142855549e-01 + 5.0445048016219145e+00 1.7892210300263400e-01 -5.2316888330112266e-01 + 5.4297921681411729e+00 -1.6717130274956693e-02 -4.3497805195207079e-01 + 5.7784623252362346e+00 -2.6559130111236251e-01 -3.5713622010213086e-01 + 6.0705646828508639e+00 -5.7080253590855667e-01 -2.9685857066973803e-01 + 6.2992412467151269e+00 -9.2974605691026757e-01 -2.4696522362645279e-01 + 6.4611920913834542e+00 -1.3279010118689452e+00 -2.0721165063198677e-01 + 6.5519335829620182e+00 -1.7349878514171504e+00 -1.8735830247365459e-01 + 6.5693404782497025e+00 -2.1268655138014534e+00 -1.8902005263781718e-01 + 6.5080422824554018e+00 -2.5132384094288414e+00 -2.0030490548991731e-01 + 6.3103624524612743e+00 -2.9766921652462841e+00 -2.2645267446070477e-01 + id 13081 + loc 3.4240734577178955e-01 1.7543345689773560e-01 375 + blend 0.0000000000000000e+00 + interp 5.4277654438181144e-01:3.6302689252774922e-01:9.8095605387069429e-01:5.4277111661636768e-01:1.7832770597298653e+00:3.1458363419450841e-01:2.4402889467027977e+00:4.3639581814905237e-01:3.0066680423939385e+00:3.1516248105928835e-01:3.9602618147490571e+00 + CVs 20 + -1.6217714042410902e-01 3.9366583079647999e-01 6.1958123105849949e-01 + -2.8173569631448842e-01 6.5420400032217518e-01 1.1891129031231380e+00 + -3.8854597762631193e-01 7.9974295672760543e-01 1.7656801551178503e+00 + -5.0895839579241930e-01 8.7711092305231353e-01 2.3205248296355157e+00 + -6.4467828586758302e-01 9.2848380257826257e-01 2.7640532707385375e+00 + -7.9212446353515231e-01 9.8447774078526062e-01 3.0850728208452760e+00 + -1.0435944865629772e+00 1.0549316094299774e+00 3.2643261493402558e+00 + -1.3909054461796719e+00 1.0863406014806829e+00 3.2190976605332180e+00 + -1.7497932942555579e+00 1.0638604595388563e+00 2.9660197859290056e+00 + -2.0950206399656728e+00 9.8560466136696701e-01 2.5487455608862803e+00 + -2.4318138678232839e+00 7.9006698315327428e-01 1.9966066689491777e+00 + -2.7477307382583662e+00 3.7928188029980137e-01 1.3591283001961907e+00 + -3.0065709459060943e+00 -2.5045478357031098e-01 6.7144897146730620e-01 + -3.2228891780517355e+00 -9.4780124088784223e-01 -8.6097112394857928e-02 + -3.5520973381388847e+00 -1.4436520978952219e+00 -9.3953148304124801e-01 + -4.1751039620375767e+00 -1.5903441041894599e+00 -1.8188460051706241e+00 + -5.0626079782187521e+00 -1.4898565465017106e+00 -2.5709784025716020e+00 + -6.0278981277359875e+00 -1.2663775857426258e+00 -3.1137519216169549e+00 + -6.9897936259899272e+00 -8.7832120739985831e-01 -3.5978999094671904e+00 + id 13082 + loc 8.9476042985916138e-01 9.2208623886108398e-01 1081 + blend 0.0000000000000000e+00 + interp 4.8757881321698082e-01:3.2074389361200917e-01:1.2424589278213161e-01:3.8995770604588631e-01:9.1043680447564190e-01:2.9010458752625978e-01:1.4935348152276404e+00:4.5636962625781025e-01:2.0509227683610840e+00:3.1515750336749071e-01:2.9854875262903686e+00:4.8757393742884869e-01:3.9461248543470600e+00 + CVs 20 + 1.1383364877064692e-02 3.8972245727446875e-01 3.7734692243560214e-01 + 4.0812604029868277e-02 7.1754763736436067e-01 6.5496150133598474e-01 + 8.6814086547099906e-02 1.0285942053915473e+00 8.9939520330613909e-01 + 1.5469895796040323e-01 1.3553119542441709e+00 1.1495044111138490e+00 + 2.5755803618734524e-01 1.6997317417216204e+00 1.3961039265447539e+00 + 4.1509768524490082e-01 2.0700550588316640e+00 1.6234423613980908e+00 + 6.5333988891692207e-01 2.4705024396794339e+00 1.7970412930740474e+00 + 9.9611809569428578e-01 2.8838856179358427e+00 1.8636847352723973e+00 + 1.4495054476438076e+00 3.2563103336329515e+00 1.7639752295293691e+00 + 1.9648151532513021e+00 3.4922104330138075e+00 1.4752653228300792e+00 + 2.4435483302805112e+00 3.5256183648989445e+00 1.0675111235347017e+00 + 2.8245168039081774e+00 3.3825852951035262e+00 6.4635584035791216e-01 + 3.1073887643962927e+00 3.1246483577191171e+00 2.7133139069021350e-01 + 3.3128565611497529e+00 2.7964304532456423e+00 -3.8612489977572606e-02 + 3.4608597101067953e+00 2.4129734971714432e+00 -2.7970054702532943e-01 + 3.5635312461991071e+00 1.9575150415957392e+00 -4.3532354422781427e-01 + 3.6184164134085037e+00 1.4474614208568797e+00 -4.4035076700001841e-01 + 3.6156996260712400e+00 1.0020290474185558e+00 -2.8061263967858019e-01 + 3.5571491322212334e+00 7.0325111516031469e-01 -9.6809286845437575e-02 + id 13083 + loc 9.0411710739135742e-01 8.8981139659881592e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8030542354592726e-01:3.2540857152451175e-01:1.2794896341106543e-01:4.5354799667299284e-01:9.5540564117439442e-01:3.0954670210694685e-01:1.3613818007871643e+00:3.5636377205383407e-01:1.9758084723265765e+00:4.8030062049169181e-01:2.3293547325514954e+00:3.1383228230579913e-01:3.0601224342110798e+00:3.8806612059033108e-01:3.7509190819612623e+00 + CVs 20 + 1.2666704712324344e-02 2.4177249246436372e-01 1.1438146179454084e-01 + 4.5026519097875591e-02 4.5055254223570718e-01 1.7302082064667690e-01 + 7.8977654838227759e-02 6.5346943032409377e-01 2.2311745241134900e-01 + 1.0618356994404556e-01 8.6816236383498890e-01 2.8719344631446470e-01 + 1.2494811412765738e-01 1.0927297447324005e+00 3.5797892373602158e-01 + 1.3019665945416103e-01 1.3258367522837760e+00 4.2562401362890340e-01 + 1.1342616443863306e-01 1.5655971658946490e+00 4.7872105941362075e-01 + 6.4419917079656233e-02 1.8067877311414535e+00 5.0788723786567480e-01 + -2.7163922779733674e-02 2.0400528530998119e+00 5.0657341198263195e-01 + -1.7148802439910546e-01 2.2520074830346233e+00 4.6652528435473861e-01 + -3.7781118860260027e-01 2.4204698011629393e+00 3.7490746798428431e-01 + -6.4297460656522332e-01 2.5102855305498393e+00 2.2240335648225251e-01 + -9.3523687825012236e-01 2.4911125631069879e+00 2.2604675464410251e-02 + -1.2089088309885851e+00 2.3743165123907044e+00 -1.8555468650169615e-01 + -1.4434715946235783e+00 2.2124545411678129e+00 -3.6791818689817934e-01 + -1.6489370383454252e+00 2.0536870666538078e+00 -5.1837127749399925e-01 + -1.8375310175771606e+00 1.9096201902987107e+00 -6.5650770444355278e-01 + -2.0059940471988136e+00 1.7764875236863911e+00 -8.0903034429849807e-01 + -2.1544621350981665e+00 1.7252122947625232e+00 -9.6471318205643020e-01 + id 13084 + loc 7.1341735124588013e-01 9.7461831569671631e-01 382 + blend 0.0000000000000000e+00 + interp 4.9612910639521091e-01:3.3399773241363051e-01:4.8643747352291822e-01:4.6203595421216115e-01:9.8990281869391838e-01:4.9612414510414699e-01:1.2968137102644235e+00:3.6826643413289178e-01:1.9980502638173676e+00:2.7261349135688939e-01:2.5101235768034602e+00:3.0502464686139014e-01:2.9566017689377118e+00:3.1835525508937396e-01:3.4320376765549279e+00:3.3447453726248799e-01:3.9962880907637288e+00 + CVs 20 + 1.0178229425163479e+00 1.8435823595511464e-01 -5.8804758258940604e-01 + 1.6373353079680597e+00 2.3914018126554840e-01 -9.9583647322560753e-01 + 2.1367227860364082e+00 2.3232994840065158e-01 -1.3565633703253406e+00 + 2.6536328975557355e+00 2.0200236341343791e-01 -1.7205980537543786e+00 + 3.1883615715097795e+00 1.3933267637730334e-01 -2.0762986286868683e+00 + 3.7372423323953954e+00 3.7702700827301538e-02 -2.4159175046230081e+00 + 4.2914349841665196e+00 -1.0360828398698063e-01 -2.7404272954193623e+00 + 4.8380093802932294e+00 -2.8139899351930708e-01 -3.0577644774863040e+00 + 5.3687930773596086e+00 -5.0124030479957049e-01 -3.3760310273578860e+00 + 5.8791767438608149e+00 -7.7869712515337419e-01 -3.6986869417294459e+00 + 6.3567087341205211e+00 -1.1311213463441492e+00 -4.0294431763599814e+00 + 6.7732199764023200e+00 -1.5644443840538544e+00 -4.3727768125506179e+00 + 7.1010005242515692e+00 -2.0676952879771071e+00 -4.7305339310217711e+00 + 7.3291936144145522e+00 -2.6231937222652730e+00 -5.1018762064401857e+00 + 7.4586400889789708e+00 -3.2114883408468624e+00 -5.4848860643259041e+00 + 7.4945365102799251e+00 -3.8060892355625020e+00 -5.8755347584726776e+00 + 7.4458321246924521e+00 -4.3775110469696408e+00 -6.2618099919996908e+00 + 7.3240931830997287e+00 -4.9055893413998293e+00 -6.6202101493585150e+00 + 7.1153400312776638e+00 -5.3743700483596575e+00 -6.8906038229343523e+00 + id 13085 + loc 7.7107988297939301e-02 2.1267715096473694e-01 417 + blend 0.0000000000000000e+00 + interp 3.7320838891239366e-01:2.4159812072663783e-01:5.5228063251977488e-05:1.8762669128899423e-01:8.7766194280708731e-01:1.8849540911363449e-01:1.4254839786226570e+00:2.2350464094861386e-01:1.8806282542466675e+00:3.7320465682850457e-01:2.5224108270260723e+00:2.0491013949253270e-01:3.0105910921494603e+00 + CVs 20 + -1.9426335422440183e-01 1.0129085876192703e-01 2.6507370786048778e-01 + -3.3315157067850287e-01 1.7033109940801711e-01 4.4159822314059649e-01 + -4.5011478218973933e-01 2.2464288743509883e-01 5.7456560964042436e-01 + -5.8198347218047541e-01 2.8403688703190000e-01 6.9732222690636647e-01 + -7.2689182002284491e-01 3.4736114570353127e-01 8.0648750219247534e-01 + -8.8188267116178765e-01 4.1263063665437649e-01 8.9886771828455858e-01 + -1.0435717505785913e+00 4.7737220233132577e-01 9.7203942739482507e-01 + -1.2083191664568609e+00 5.3893669315112747e-01 1.0241646144721559e+00 + -1.3715359246017826e+00 5.9481917482261215e-01 1.0531132811891566e+00 + -1.5281492762165600e+00 6.4345492724538422e-01 1.0568064019350816e+00 + -1.6754014865551694e+00 6.8459762956730086e-01 1.0351381195068119e+00 + -1.8143490282458381e+00 7.1876269161286621e-01 9.9044067632297139e-01 + -1.9467966028560357e+00 7.4733161825864358e-01 9.2542403856543021e-01 + -2.0739602575829363e+00 7.7277150362686275e-01 8.4184854556110000e-01 + -2.2017517582376400e+00 7.9701017057378287e-01 7.4307157238972565e-01 + -2.3430186652316563e+00 8.1867103169568467e-01 6.3384026372612234e-01 + -2.5056633897027916e+00 8.3561667133754081e-01 5.1654064672419153e-01 + -2.6843029392916935e+00 8.4956609052505838e-01 3.9072606070172045e-01 + -2.9119268520064305e+00 8.5328363100401494e-01 2.6838241264776774e-01 + id 13086 + loc 8.1511533260345459e-01 7.4112242460250854e-01 415 + blend 0.0000000000000000e+00 + interp 5.3227739181487499e-01:4.3359515516067648e-01:3.4833494563296630e-01:4.4626886903186080e-01:9.6984906017271066e-01:5.3227206904095692e-01:1.4592995094812846e+00:4.8270389849881978e-01:1.9832926421881396e+00:3.0014205606279154e-01:2.6478884582290583e+00:4.3182257570000515e-01:3.5318456303666257e+00:4.9630050166227518e-01:3.9955656143596272e+00 + CVs 20 + 4.0799775958377960e-01 1.3674934459282573e-01 -7.3094416097829656e-02 + 7.3072535733072974e-01 2.0608401028342138e-01 -1.6788446325926307e-01 + 1.0400103688311755e+00 2.5884057913495467e-01 -2.5123525642813710e-01 + 1.3596670999537657e+00 3.1244524552681868e-01 -3.0931119995592493e-01 + 1.6864911719992155e+00 3.6419121631103923e-01 -3.3801833529991321e-01 + 2.0169114163148625e+00 4.1277791432040090e-01 -3.3246977882501660e-01 + 2.3445223551535879e+00 4.5747060728017841e-01 -2.8900920787970774e-01 + 2.6611448298848304e+00 4.9768360781941789e-01 -2.0809666410287486e-01 + 2.9606890852915253e+00 5.3348092298718552e-01 -9.3026657087635800e-02 + 3.2386003484969006e+00 5.6532750879178018e-01 5.1764672268768797e-02 + 3.4858417773644716e+00 5.9285558177831055e-01 2.1501463082257677e-01 + 3.6895116625559621e+00 6.1483908417706501e-01 3.7315526554391987e-01 + 3.8491856920499261e+00 6.3122215355733968e-01 5.0844273151507535e-01 + 3.9934754963025201e+00 6.3822612306785276e-01 6.2918338869237045e-01 + 4.1566430356283650e+00 6.2397165551590983e-01 7.4384641717890188e-01 + 4.3414094016910925e+00 5.8266460477201609e-01 8.4729622348132527e-01 + 4.5340705276771960e+00 5.1657232011112653e-01 9.3465598900263103e-01 + 4.7261548775608304e+00 4.2754744124822897e-01 1.0012014154570932e+00 + 4.9121790300654915e+00 3.0577286902391165e-01 1.0110289358523079e+00 + id 13087 + loc 9.1859066486358643e-01 4.6536099910736084e-01 403 + blend 0.0000000000000000e+00 + interp 4.8665312231836561e-01:4.8664825578714244e-01:6.2143483082539586e-03:2.9562137458570359e-01:9.9687938979420643e-01:3.2731713581979410e-01:1.4952402620006278e+00:3.7301992554278490e-01:1.9998538568176205e+00:3.7920465913970147e-01:2.3879561733186012e+00:4.7005906230549710e-01:2.9999596286563763e+00:3.1419338265948227e-01:3.5051440962137428e+00 + CVs 20 + -1.4877583812011874e-03 1.1768457111681582e-01 3.2424183021169894e-02 + 1.2922005075604676e-02 2.3905398661311589e-01 7.2425819918045697e-02 + 3.5601639945898905e-02 3.6624787239410861e-01 1.1906822435349115e-01 + 6.6986006450953872e-02 4.9806337586794380e-01 1.7255364617644819e-01 + 1.1331938750945414e-01 6.2901695041587513e-01 2.3326425772296472e-01 + 1.7890872515404260e-01 7.5330665495156257e-01 3.0120068405598421e-01 + 2.6535305998671982e-01 8.6469642524095702e-01 3.7570047948084223e-01 + 3.7290138662520989e-01 9.5572877328640937e-01 4.5462181707055899e-01 + 5.0134090169193524e-01 1.0166442180692741e+00 5.3284622337196275e-01 + 6.4827140468301492e-01 1.0365823482928596e+00 6.0173742347110626e-01 + 8.0603964742169643e-01 1.0087260969873157e+00 6.5138625070166312e-01 + 9.6269780043331787e-01 9.3286117784122280e-01 6.7381025448686727e-01 + 1.1051783025935198e+00 8.1351494911709965e-01 6.6424111431284549e-01 + 1.2208250492244035e+00 6.5623404354083670e-01 6.1978785975544970e-01 + 1.2974236710925706e+00 4.6867395949051749e-01 5.4020404969747626e-01 + 1.3264034500915234e+00 2.6302447868947099e-01 4.3086513058396170e-01 + 1.3060464950446820e+00 5.2429116974184398e-02 3.0223162548658333e-01 + 1.2371945651003116e+00 -1.5358077926088964e-01 1.6811942438526997e-01 + 1.3139863286331628e+00 -2.9310073856458618e-01 1.8311548028924352e-01 + id 13088 + loc 4.6037051081657410e-01 5.7749533653259277e-01 409 + blend 0.0000000000000000e+00 + interp 3.7867129893394624e-01:3.0568451737957286e-01:1.2285658454330972e-01:2.8262982640408213e-01:1.0000182366699668e+00:3.2861309819750040e-01:1.6510030988218372e+00:3.0383782489114008e-01:2.1506386379169271e+00:3.3718705681417471e-01:3.0050219521656043e+00:3.7866751222095690e-01:3.6837459890607827e+00 + CVs 20 + 3.7039018002049995e-01 1.2877849764058380e-01 -7.8960668112526694e-02 + 6.8833056440894758e-01 2.4080330673436978e-01 -1.9468491532148482e-01 + 9.9526858839002008e-01 3.5101399690209956e-01 -3.1700312348238530e-01 + 1.3092078593532834e+00 4.6461495426404925e-01 -4.3278551676728672e-01 + 1.6296257942187444e+00 5.7740634813387648e-01 -5.4441877355165214e-01 + 1.9577464755204119e+00 6.8610893139507001e-01 -6.5291577865555972e-01 + 2.2976562499914137e+00 7.8872089050521010e-01 -7.5712663201289421e-01 + 2.6559983844192647e+00 8.8149184656088453e-01 -8.5434515933859867e-01 + 3.0379854861734006e+00 9.5597550014016375e-01 -9.4121062026436464e-01 + 3.4417191819248067e+00 9.9982511348250025e-01 -1.0163082378015169e+00 + 3.8572413963690257e+00 9.9953698945054081e-01 -1.0830719794830315e+00 + 4.2701619603662486e+00 9.4298887424451472e-01 -1.1493709622194190e+00 + 4.6676697939729666e+00 8.2401164551716555e-01 -1.2235785288838732e+00 + 5.0424066424998673e+00 6.4307089857601696e-01 -1.3109659555106581e+00 + 5.3888957508764346e+00 4.0326815654478132e-01 -1.4133258654410743e+00 + 5.7022959197746204e+00 1.0439139421793309e-01 -1.5292261627633938e+00 + 5.9767465717154540e+00 -2.5783412026743502e-01 -1.6521882956460869e+00 + 6.2008194714404468e+00 -6.7047302794966424e-01 -1.7717141902721127e+00 + 6.3948212693353561e+00 -1.0007669762540519e+00 -1.8696403460862656e+00 + id 13089 + loc 1.9087237119674683e-01 2.3836318869143724e-03 382 + blend 0.0000000000000000e+00 + interp 4.7899318531534746e-01:1.5734612088328961e-01:8.9831169818801460e-03:2.4393915667126898e-01:1.0009373643753372e+00:4.7898839538349430e-01:1.8296064787366948e+00:4.7498553074632832e-01:2.0314505499779751e+00:2.9615873786606356e-01:2.5605902317123874e+00:3.4595514134248467e-01:3.3087777269012557e+00 + CVs 20 + -5.5374439657961561e-01 1.4666047833081780e-01 -5.6348601349280381e-01 + -9.7380073410732215e-01 1.4775308663451636e-01 -9.8094712072784729e-01 + -1.3580817954169722e+00 6.4560165589280349e-02 -1.3675841991841737e+00 + -1.7442253128554792e+00 -7.8456247233074428e-02 -1.7734632877240859e+00 + -2.1213320776994551e+00 -2.7694678149348961e-01 -2.1857607356368098e+00 + -2.4817617444299476e+00 -5.1994828267654225e-01 -2.5885964456046135e+00 + -2.8213749816663212e+00 -7.9150850522701521e-01 -2.9646141279994778e+00 + -3.1335734632388168e+00 -1.0742672880650466e+00 -3.2950725782002879e+00 + -3.4104238012142449e+00 -1.3524985694605305e+00 -3.5649345287926533e+00 + -3.6524032096854682e+00 -1.6152868488107253e+00 -3.7695904012104626e+00 + -3.8719313846967651e+00 -1.8602222112595168e+00 -3.9152559325800143e+00 + -4.0821618581206467e+00 -2.0911895081621448e+00 -4.0111311226518858e+00 + -4.2898078953498242e+00 -2.3139515398004415e+00 -4.0662460100842521e+00 + -4.4930118205405423e+00 -2.5317342125610223e+00 -4.0875276834008680e+00 + -4.6846265896915043e+00 -2.7423192046526301e+00 -4.0795090351674030e+00 + -4.8556249072438682e+00 -2.9323968813819530e+00 -4.0450645441772686e+00 + -5.0070048175856261e+00 -3.0801823283699825e+00 -3.9880156842860068e+00 + -5.1616996831263293e+00 -3.1803077834162119e+00 -3.9124773018376215e+00 + -5.3869930287185070e+00 -3.4224637135453060e+00 -3.7939728736009499e+00 + id 13090 + loc 7.9928547143936157e-01 3.0575439333915710e-01 399 + blend 0.0000000000000000e+00 + interp 4.8249612308943962e-01:2.9481750641735593e-01:2.5518849542697675e-02:4.8249129812820873e-01:9.2503761364135362e-01:4.0500760772635275e-01:1.1296592011155455e+00:2.9161196456445182e-01:1.8774663957553628e+00:4.1103989303809740e-01:2.7675469270772002e+00:2.8114641123912959e-01:3.4901000373811244e+00 + CVs 20 + 2.6392231028907726e-01 3.2706020266695229e-01 2.1851180223888450e-01 + 5.3570035692514395e-01 6.4025912385676564e-01 4.6044912698901819e-01 + 7.9491808214945303e-01 9.2608059006343457e-01 7.7370254937442939e-01 + 1.0408767057109032e+00 1.1701796448063138e+00 1.1513281195529312e+00 + 1.2852911179554305e+00 1.3634445746098280e+00 1.5691908909359626e+00 + 1.5344064492372222e+00 1.4949256072071622e+00 2.0055599226672727e+00 + 1.7864677166937830e+00 1.5497206458433055e+00 2.4357883961567968e+00 + 2.0329104587555431e+00 1.5132805945955026e+00 2.8271878979858904e+00 + 2.2567780783904259e+00 1.3822868567050799e+00 3.1427776119869431e+00 + 2.4339920530223957e+00 1.1758652504684144e+00 3.3495941914896465e+00 + 2.5471716644707176e+00 9.4275238981326981e-01 3.4423292292658592e+00 + 2.6079663026568425e+00 7.2649330371057586e-01 3.4747562661401425e+00 + 2.6494130743580393e+00 5.1763597892443047e-01 3.5199794947155509e+00 + 2.7101146958685698e+00 2.6964044236113827e-01 3.6318140519287860e+00 + 2.8203608961729039e+00 -5.0903757729169108e-02 3.8472990861085492e+00 + 2.9794783736921064e+00 -4.2011268822534842e-01 4.2025058471379673e+00 + 3.1286445209772840e+00 -7.5690145458678948e-01 4.7124449003843161e+00 + 3.1564885338951267e+00 -9.5570044307105073e-01 5.2326960387141828e+00 + 3.0263639052424964e+00 -9.8692671469743820e-01 5.4902885828389296e+00 + id 13091 + loc 9.9937725067138672e-01 3.6565080285072327e-01 374 + blend 0.0000000000000000e+00 + interp 4.3930268683496349e-01:3.1354278405917091e-01:1.7282761015560810e-02:3.0333191701561535e-01:1.0283546564319515e+00:2.9475505181131451e-01:1.7225436325056234e+00:3.0322156380778337e-01:2.0488983333832662e+00:3.8897867826748600e-01:2.7848729744615301e+00:4.3929829380809515e-01:3.1839722896266731e+00 + CVs 20 + 6.9148590945438049e-01 3.9004489534896891e-01 5.0028878611940075e-01 + 1.2371113752052469e+00 6.1437241597641734e-01 8.3068313192789600e-01 + 1.7995392913547645e+00 7.2449126164390631e-01 1.0545844773351960e+00 + 2.4262803171497880e+00 7.5902984372427174e-01 1.2092220030769658e+00 + 3.1014329402310663e+00 7.4746005511473912e-01 1.3270821867680560e+00 + 3.8051328859624114e+00 7.0010245531779969e-01 1.4525078216449936e+00 + 4.5129120687870286e+00 5.9675570041615855e-01 1.6232234788836548e+00 + 5.1951422117912873e+00 4.1875880434698076e-01 1.8617328562540012e+00 + 5.8180476292028889e+00 1.6896264012195505e-01 2.1679026607096903e+00 + 6.3562257882277606e+00 -1.3873258876157424e-01 2.5144261869416162e+00 + 6.7988185543665773e+00 -4.9722982278051964e-01 2.8507664300083384e+00 + 7.1396801632409579e+00 -9.0125525150658836e-01 3.1240349157677390e+00 + 7.3837138206944655e+00 -1.3268300097044530e+00 3.3180844826902218e+00 + 7.5479049789962582e+00 -1.7550440787804518e+00 3.4488427437219271e+00 + 7.6458041924026325e+00 -2.1767101627736043e+00 3.5341754457100638e+00 + 7.6891756856854743e+00 -2.5793334237066343e+00 3.5881395673315777e+00 + 7.6988852339670482e+00 -2.9457150897681070e+00 3.6281157933755677e+00 + 7.7220348326042725e+00 -3.2645008872986208e+00 3.6540569497924889e+00 + 7.8470024784616870e+00 -3.5174450376016964e+00 3.6243078311553050e+00 + id 13092 + loc 3.0201241374015808e-01 1.3039981946349144e-02 393 + blend 0.0000000000000000e+00 + interp 5.2551884119346282e-01:5.2551358600505094e-01:7.1522373569894548e-02:4.6505811194641539e-01:9.6096114111736863e-01:2.8160156720576723e-01:1.3454376075523415e+00:3.8903548285186051e-01:2.0763744242475326e+00:3.8065377291896613e-01:2.7927830742951691e+00:2.6307589873787823e-01:3.1874754658839612e+00:3.5068498862496156e-01:3.9469554965927305e+00 + CVs 20 + -8.3731378294095271e-02 4.9292785769194797e-01 3.3766901649425007e-01 + -1.7766933300024679e-01 9.9310480871398754e-01 6.1532847449929262e-01 + -3.0181085996618950e-01 1.4977837170970585e+00 8.1651366607028653e-01 + -4.7961467263451407e-01 2.0017780029318333e+00 9.4997467853840067e-01 + -7.2509585124326215e-01 2.4872384734894393e+00 1.0273813988838560e+00 + -1.0422283992927890e+00 2.9380515692264759e+00 1.0650788177774906e+00 + -1.4348102333870156e+00 3.3450117250344311e+00 1.0816475858346410e+00 + -1.9092193028461744e+00 3.6976329148387066e+00 1.0966433999170979e+00 + -2.4621554572094668e+00 3.9749698979172328e+00 1.1341327796700489e+00 + -3.0754201999397264e+00 4.1567325563059265e+00 1.2231503564486261e+00 + -3.7248550667393685e+00 4.2361495022649471e+00 1.3999873430849274e+00 + -4.3803465327334692e+00 4.2087890713780665e+00 1.7052968846618561e+00 + -5.0008453426310950e+00 4.0556668365613078e+00 2.1546463020992417e+00 + -5.5338906338147478e+00 3.7588396854920427e+00 2.7176485369037584e+00 + -5.9380823697056693e+00 3.3397082337651298e+00 3.3434436670349905e+00 + -6.2074939188728555e+00 2.8344242815968883e+00 4.0024860665440780e+00 + -6.3164466069424332e+00 2.1986511945160840e+00 4.6922338311293990e+00 + -6.1073963399479014e+00 1.3095764150369136e+00 5.3118417048330500e+00 + -5.9274414868956269e+00 7.4581590201872894e-01 5.7191173855591098e+00 + id 13093 + loc 9.0341162681579590e-01 4.8028945922851563e-01 376 + blend 0.0000000000000000e+00 + interp 5.5538203546744258e-01:4.1360952510712556e-01:1.1780592950335012e-01:4.4566183149761412e-01:7.7448303744778757e-01:5.0771109472866993e-01:1.1071789909314333e+00:5.5537648164708797e-01:1.3869194232374167e+00:4.3088648829530829e-01:2.0327305126693602e+00:2.9648366681786004e-01:2.9902277922564080e+00:3.1875259012941881e-01:3.9435934552573162e+00 + CVs 20 + 5.0646296771271117e-02 3.4317331474733626e-01 -4.8446439035631039e-01 + 2.4905170213312414e-02 6.1667812817214818e-01 -9.2695757574655091e-01 + -7.1407013857421708e-02 8.1072077110211782e-01 -1.3818356494486601e+00 + -2.1387603626486121e-01 9.6772656279638203e-01 -1.8608052361163376e+00 + -3.5364659230591444e-01 1.1523127930105252e+00 -2.3485865526952754e+00 + -4.3113441018059190e-01 1.3946363391832981e+00 -2.8454352676793815e+00 + -3.9486070972309562e-01 1.6896124817315776e+00 -3.3539941758188356e+00 + -2.1410355677214715e-01 2.0197993919751442e+00 -3.8536650116827662e+00 + 1.1737507423342197e-01 2.3566303169727751e+00 -4.3206859705318061e+00 + 5.8773044843723277e-01 2.6534725644148702e+00 -4.7642182052217601e+00 + 1.1765345881672227e+00 2.8362280029467715e+00 -5.2034808008702731e+00 + 1.8538338381257295e+00 2.8008737474102872e+00 -5.6139978762767893e+00 + 2.5414779597813340e+00 2.4724048892315666e+00 -5.9131154188471022e+00 + 3.1175555124430918e+00 1.8886224614926881e+00 -6.0116531345033426e+00 + 3.4814884770354091e+00 1.1399954854069763e+00 -5.9258494218689748e+00 + 3.5493094549979629e+00 2.4015252239829588e-01 -5.8582427507146360e+00 + 3.0948630863102649e+00 -7.5159675688793293e-01 -6.0610150659409765e+00 + 2.2265939939080526e+00 -1.3474510352125306e+00 -6.4971162384664911e+00 + 2.0064368778949540e+00 -1.7822857551417237e+00 -6.7123060768154605e+00 + id 13094 + loc 1.0027327574789524e-02 6.1825078725814819e-01 402 + blend 0.0000000000000000e+00 + interp 3.8357806741317457e-01:1.0508672828937361e-01:9.5148822233774122e-01:3.4672928504910372e-01:1.9773823051186463e+00:3.0079257762962247e-01:2.7415155448061097e+00:3.7678221792044880e-01:3.0699872783639002e+00:3.8357423163250048e-01:3.9994826866963691e+00 + CVs 20 + -2.0155511626738759e-02 3.3566727727434931e-01 -1.3438232335097378e-01 + -5.0793678827204342e-02 6.7295269259489643e-01 -2.8335879848130463e-01 + -5.9422142699247893e-02 1.0134542581309758e+00 -4.5364524623608521e-01 + -3.2362170997518480e-02 1.3480674710910669e+00 -6.5208554483451475e-01 + 2.5545672435050126e-02 1.6626763602156416e+00 -8.8397672540354111e-01 + 1.0499321039607318e-01 1.9463539594704500e+00 -1.1500283317965829e+00 + 1.9568215847631892e-01 2.1935400121218973e+00 -1.4479608910064810e+00 + 2.8740923651997491e-01 2.4012049993197717e+00 -1.7737668818431560e+00 + 3.6912966644102974e-01 2.5648945397395444e+00 -2.1188821441998114e+00 + 4.3583833730583826e-01 2.6767356805947573e+00 -2.4643217514066751e+00 + 4.9750429545857067e-01 2.7321999807442343e+00 -2.7850168468575074e+00 + 5.6978392369450503e-01 2.7345035030096891e+00 -3.0703234360767597e+00 + 6.5746295671678190e-01 2.6756922063317026e+00 -3.3477435728734593e+00 + 7.4326799018928913e-01 2.5071910756099371e+00 -3.6715053613138418e+00 + 7.6758190513259961e-01 2.1724182670217114e+00 -4.0692688750920638e+00 + 6.1290514826872666e-01 1.6764804738346153e+00 -4.5314314240435065e+00 + 1.3791016404370976e-01 1.1467861384547962e+00 -5.0319124261258725e+00 + -6.0641374147821858e-01 8.4565443317489453e-01 -5.4978754712217395e+00 + -9.6533068727225435e-01 7.6719091254252780e-01 -5.8264374914171242e+00 + id 13095 + loc 5.3740161657333374e-01 7.4358463287353516e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2867991850975989e-01:2.9442620436440309e-01:8.9313393415630349e-01:4.2867563171057482e-01:1.4183079039721340e+00:2.9372676468136544e-01:1.9818181693342618e+00:3.0234577427409665e-01:2.9996057380373875e+00:3.4464736274747471e-01:3.9899378241406405e+00 + CVs 20 + 4.7283094077306256e-02 5.3086435811781396e-01 5.6787915094274333e-01 + 1.2193481818695412e-01 9.2852141107794450e-01 9.4070735557162288e-01 + 2.1037808716480105e-01 1.2745277773015498e+00 1.2485927788372875e+00 + 3.1026626758990827e-01 1.6027685816448796e+00 1.5385096349782010e+00 + 4.2443682942025551e-01 1.9073593235934674e+00 1.7950298537268736e+00 + 5.5195898303707103e-01 2.1850043209351737e+00 2.0050630007225920e+00 + 6.9147049979540531e-01 2.4345405883132774e+00 2.1588418796253062e+00 + 8.4961748243055624e-01 2.6590275764058218e+00 2.2517742047192000e+00 + 1.0541790611388202e+00 2.8651561274220199e+00 2.2688693966460280e+00 + 1.3177208124837101e+00 3.0074942949251291e+00 2.1616451708282787e+00 + 1.5329667179343682e+00 3.0165450434347658e+00 1.9735083665720063e+00 + 1.6584391659653188e+00 2.9495547282565515e+00 1.7952492366822530e+00 + 1.7250102620009886e+00 2.8521663258176644e+00 1.6326578795188662e+00 + 1.7479192508607482e+00 2.7381538822882474e+00 1.4743869978795388e+00 + 1.7328530776299069e+00 2.6110147119084566e+00 1.3009394682560398e+00 + 1.6859159573775462e+00 2.4566417016695770e+00 1.0729092701160439e+00 + 1.6106863920310941e+00 2.2290194645042192e+00 7.9028532195970258e-01 + 1.4976403566862733e+00 1.9324630221624526e+00 5.7053312170184833e-01 + 1.3382053201855850e+00 1.7181840142600102e+00 5.5935246354001478e-01 + id 13096 + loc 1.3563235104084015e-01 8.6697173118591309e-01 400 + blend 0.0000000000000000e+00 + interp 5.2211831946685672e-01:2.9411897186659297e-01:5.1937808794892826e-01:5.2211309828366204e-01:1.0127280455295589e+00:4.0374602859629388e-01:1.9477869736418540e+00:3.8811052851983285e-01:2.2756132683120560e+00:2.9943621257969943e-01:3.0016179388836157e+00:3.0840735024864185e-01:3.9584747937978397e+00 + CVs 20 + -1.7814434196139498e-01 2.9545652268204237e-01 -2.8836199806421853e-02 + -3.7998084327900339e-01 5.9452347220621493e-01 -7.1009400438850304e-02 + -5.8759432536903311e-01 8.9803457470861270e-01 -1.4067607401479004e-01 + -7.8981571120519223e-01 1.2029037121738984e+00 -2.4661024366274187e-01 + -9.8331381524708605e-01 1.5047704646031628e+00 -3.9273317508998851e-01 + -1.1646434043777070e+00 1.7996501698465848e+00 -5.7955941654792131e-01 + -1.3306718578161558e+00 2.0855206799448176e+00 -8.0689998479297287e-01 + -1.4800629041510456e+00 2.3617871139282052e+00 -1.0773677210621506e+00 + -1.6132370676175645e+00 2.6278196717166078e+00 -1.4001533453628610e+00 + -1.7239063117221414e+00 2.8766252279431197e+00 -1.7858358705109108e+00 + -1.7886984003499349e+00 3.0901492748254187e+00 -2.2230985217025916e+00 + -1.7845282011922563e+00 3.2540361568218206e+00 -2.6752789049221164e+00 + -1.7129045430698526e+00 3.3716361876289729e+00 -3.1255359992865186e+00 + -1.5934435825031275e+00 3.4473725197707132e+00 -3.5971172635784461e+00 + -1.4533270509079128e+00 3.4590146501450052e+00 -4.1071026080535056e+00 + -1.3275107412919220e+00 3.3716973895369837e+00 -4.6188653768172365e+00 + -1.2407822562013628e+00 3.1873890208632227e+00 -5.0833278014366545e+00 + -1.2143315270802462e+00 2.9334549615802543e+00 -5.4953685358595674e+00 + -1.2929331366748722e+00 2.6534846194355630e+00 -5.8303509059131482e+00 + id 13097 + loc 5.7035404443740845e-01 1.7900037765502930e-01 401 + blend 0.0000000000000000e+00 + interp 4.2665639258696347e-01:3.1677754504953987e-01:1.2203710585056760e-02:3.3476460639890543e-01:7.6916207138287473e-01:3.6732393538763097e-01:1.0815295190994072e+00:3.6725579217162391e-01:1.8268571301657810e+00:4.2665212602303765e-01:2.1102803080491634e+00:3.7078196485261455e-01:2.9502399088678963e+00:3.3382622560263742e-01:3.4057583664841919e+00 + CVs 20 + 4.0574503889779553e-02 2.8592643319795885e-01 2.0880950232242665e-01 + 9.3704775624283781e-02 5.5436774765116792e-01 4.2299878285280829e-01 + 1.4838149309860157e-01 8.0183509398595543e-01 6.3678416364727397e-01 + 2.0005477980199471e-01 1.0263926708993747e+00 8.4593913339745164e-01 + 2.5214352807920959e-01 1.2279573012569922e+00 1.0515222060127980e+00 + 3.0965846368325800e-01 1.4088593219737267e+00 1.2580855143737439e+00 + 3.8264516251965203e-01 1.5658989170083200e+00 1.4740520586759716e+00 + 4.8360366420160672e-01 1.6857837544730372e+00 1.7038828414133902e+00 + 6.1986079193388854e-01 1.7696694704849232e+00 1.9353536253629593e+00 + 7.9672206299974768e-01 1.8464694515691948e+00 2.1525770912804196e+00 + 1.0177721625373353e+00 1.9199589963685284e+00 2.3608923979738812e+00 + 1.2557908223100913e+00 1.9281723900596832e+00 2.5668725095020397e+00 + 1.4614354615870921e+00 1.8344452491880925e+00 2.7533112087276006e+00 + 1.6402845246936855e+00 1.6862847797053462e+00 2.9210084829999547e+00 + 1.8424711184816651e+00 1.5456186846221784e+00 3.0830886797981716e+00 + 2.0593682651204204e+00 1.3868087949874355e+00 3.2163189874841174e+00 + 2.1701283833660994e+00 1.1000664827668687e+00 3.2653293413306383e+00 + 2.1647569630828674e+00 5.9376325785356077e-01 3.2370906416124789e+00 + 2.5213461147281091e+00 6.3297120198770163e-01 3.2287964827698117e+00 + id 13098 + loc 2.2020302712917328e-01 1.7543345689773560e-01 407 + blend 0.0000000000000000e+00 + interp 7.0532943383122637e-01:2.6923344841662245e-01:8.1995780229998316e-01:4.7368111003815727e-01:1.3550444938768686e+00:4.3163269187662739e-01:1.9908626204690005e+00:7.0532238053688812e-01:1.9972175156255227e+00:4.6652649168794919e-01:3.9728226408918847e+00 + CVs 20 + -3.2339925192800073e-02 3.7382087359288957e-01 -3.3018359519956408e-01 + -6.6314456449082057e-02 6.0779869882793913e-01 -4.4095661510041884e-01 + -8.4855215230323564e-02 8.1860598337927803e-01 -4.8960122844945170e-01 + -7.8922824388380983e-02 1.0396268562125695e+00 -5.5706416275088766e-01 + -3.7824176336270839e-02 1.2672081752172903e+00 -6.4361082762497746e-01 + 5.2358221453708088e-02 1.4934333431650324e+00 -7.4851774477179545e-01 + 2.0422574488275935e-01 1.7028957718471540e+00 -8.6602910571227798e-01 + 4.2113771263409472e-01 1.8764014815644479e+00 -9.8452977792103691e-01 + 6.9574491570789099e-01 1.9998222043761995e+00 -1.0920733244620404e+00 + 1.0179120995573661e+00 2.0678038647638988e+00 -1.1821717034055479e+00 + 1.3811210101644231e+00 2.0795616535859160e+00 -1.2543130116394610e+00 + 1.7807593966644089e+00 2.0340114752747147e+00 -1.3100861849501371e+00 + 2.2067128250017523e+00 1.9317731551701018e+00 -1.3493254589477266e+00 + 2.6416393706034991e+00 1.7853238973042200e+00 -1.3733331922025620e+00 + 3.0748373526712465e+00 1.6199642489306632e+00 -1.3935415230506532e+00 + 3.5102690926540148e+00 1.4562026228445406e+00 -1.4305790623632488e+00 + 3.9512609561152918e+00 1.3034454898441896e+00 -1.5018433679136778e+00 + 4.3861935279106250e+00 1.1726897465607817e+00 -1.6064217837668064e+00 + 4.8056076978800046e+00 1.0172834392126906e+00 -1.6779319103820629e+00 + id 13099 + loc 7.4441768229007721e-02 1.4395181834697723e-01 1068 + blend 0.0000000000000000e+00 + interp 4.8455280048954208e-01:3.0244822330874072e-01:7.3525375066900134e-01:4.8454795496153719e-01:1.2971389064274639e+00:3.1464358249597524e-01:1.9029676948360632e+00:3.1085536501677641e-01:2.8705750802006147e+00:3.2296451051825042e-01:3.8509247023981001e+00 + CVs 20 + -2.3149458814527568e-01 2.7418130900029314e-01 -1.6163704877052334e-01 + -4.5290131090674179e-01 5.5170520047828653e-01 -3.4072130971488268e-01 + -6.8727423725797476e-01 8.3655468560926449e-01 -5.2336451495395908e-01 + -9.5069247482111241e-01 1.1273682006921824e+00 -6.9719444711729528e-01 + -1.2530601790068521e+00 1.4162314659009192e+00 -8.5109692608372667e-01 + -1.6027535711985514e+00 1.6902155260171885e+00 -9.7357605928131052e-01 + -2.0049506503290946e+00 1.9322927541306290e+00 -1.0550696312767707e+00 + -2.4579982890777492e+00 2.1215211313665367e+00 -1.0896609939001975e+00 + -2.9518505997668925e+00 2.2356723464692689e+00 -1.0755448782430306e+00 + -3.4682335001081457e+00 2.2551809894524073e+00 -1.0161648312597829e+00 + -3.9830824134740208e+00 2.1677690272185037e+00 -9.2379380439520165e-01 + -4.4746737547817697e+00 1.9750956382150893e+00 -8.2128543517043129e-01 + -4.9288842613960124e+00 1.6896639432955107e+00 -7.3554134099814672e-01 + -5.3327266183291382e+00 1.3261969783172782e+00 -6.8857768450244827e-01 + -5.6698300568768447e+00 8.9870473161160769e-01 -6.9379798292714556e-01 + -5.9162768428679033e+00 4.2005124857288767e-01 -7.5064069171324621e-01 + -6.0491758269835065e+00 -8.6318564109396534e-02 -8.3941112478122759e-01 + -6.0923685683859983e+00 -5.7516345764920263e-01 -9.3395894323659001e-01 + -6.2703306619373382e+00 -9.1770320548217488e-01 -9.8631376658316905e-01 + id 13100 + loc 5.0775855779647827e-01 8.8981360197067261e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5451943601070349e-01:3.5614524673295578e-01:4.9763136747289449e-01:4.1808251336612967e-01:9.7997484487115849e-01:3.1735866395468371e-01:1.5550524431334380e+00:4.5177708020425267e-01:1.9888975843332675e+00:4.5451489081634339e-01:2.8838200286301188e+00:2.8648171891220803e-01:3.1051277710383953e+00:3.7787693513639120e-01:3.9079400078781030e+00 + CVs 20 + 2.2550404909776020e-01 2.6825091110265892e-01 -2.4437030292567702e-01 + 4.5526968233903675e-01 5.3012030297081891e-01 -4.5954539884942924e-01 + 6.9749019995884576e-01 7.8344714207046773e-01 -6.6770384084043299e-01 + 9.5005581112147652e-01 1.0275149345435295e+00 -8.9154022344694839e-01 + 1.1959280178711560e+00 1.2605265502922367e+00 -1.1521939574576412e+00 + 1.4008236594701031e+00 1.4730472651327169e+00 -1.4645317734796639e+00 + 1.5255388872250379e+00 1.6398093228549850e+00 -1.8214329053709362e+00 + 1.5546103485946539e+00 1.7289972130375650e+00 -2.1912625059207924e+00 + 1.5021806221893974e+00 1.7225364412417510e+00 -2.5338218806544490e+00 + 1.3941634947234176e+00 1.6303421337857864e+00 -2.8230076052488569e+00 + 1.2522855796681360e+00 1.4790842592693805e+00 -3.0626325675272974e+00 + 1.0910068538173259e+00 1.2878433423441509e+00 -3.2758442608750280e+00 + 9.2378540983262003e-01 1.0636776884258108e+00 -3.4863035725456499e+00 + 7.6718495700048761e-01 8.0809979326142312e-01 -3.7140726674859712e+00 + 6.4125928210218852e-01 5.1876045243556490e-01 -3.9787915906304470e+00 + 5.7563344152255880e-01 1.8694902754064324e-01 -4.3032233631495647e+00 + 6.2995142901305645e-01 -1.9768509292617631e-01 -4.7070894434608919e+00 + 8.6956817295279165e-01 -5.7440663656634383e-01 -5.1310830291529950e+00 + 1.0334496219656466e+00 -6.9600693911977796e-01 -5.3310504383852901e+00 + id 13101 + loc 2.1634808182716370e-01 5.0024640560150146e-01 377 + blend 0.0000000000000000e+00 + interp 3.4387620369527844e-01:3.4336208041779132e-01:3.3619134598083744e-02:3.3855828027415635e-01:1.0010827799827533e+00:3.1809763236548616e-01:1.9452612943218588e+00:3.2816983728805388e-01:2.6437786664774601e+00:3.4387276493324148e-01:3.3576017293740281e+00 + CVs 20 + -7.3082537586094010e-01 3.0402461198665987e-01 -5.7631182967372774e-01 + -1.3047357729320015e+00 4.3375180629397764e-01 -9.4988798923928153e-01 + -1.8489280731567066e+00 4.8084571907163942e-01 -1.2291257689301653e+00 + -2.4053903710910562e+00 5.0588850047593659e-01 -1.4706428447146804e+00 + -2.9597346735011012e+00 5.3880046578707907e-01 -1.6910919551344947e+00 + -3.5140543244685958e+00 5.9205716803291808e-01 -1.9056520959755248e+00 + -4.0880849451482195e+00 6.5538723590239112e-01 -2.1323490393239224e+00 + -4.7005120418337665e+00 6.9852754087544966e-01 -2.3956444346629242e+00 + -5.3497415910846762e+00 6.7551372792074105e-01 -2.7193458064018659e+00 + -6.0100589826731712e+00 5.3436876281414358e-01 -3.1056059948450407e+00 + -6.6423636967331214e+00 2.3130424529060134e-01 -3.5199634009445950e+00 + -7.1994153408477670e+00 -2.5675797964514224e-01 -3.9005994484205257e+00 + -7.6262273981761108e+00 -9.1055377841723351e-01 -4.1767138082982704e+00 + -7.8893788296166649e+00 -1.6524924654700683e+00 -4.3048166724526418e+00 + -8.0145286579624688e+00 -2.3950639046483850e+00 -4.3086963258713826e+00 + -8.0694914528897819e+00 -3.0899583929711798e+00 -4.2479358547229449e+00 + -8.1218924738077938e+00 -3.7131254926962609e+00 -4.1571467326934108e+00 + -8.1976813195312417e+00 -4.2769088969912286e+00 -4.0375511538514299e+00 + -8.2429853765882442e+00 -4.8596443329319134e+00 -3.9188478843911088e+00 + id 13102 + loc 1.8235490424558520e-03 1.9857356324791908e-02 411 + blend 0.0000000000000000e+00 + interp 4.2348887392861473e-01:2.9833685468947130e-01:7.4195495634868158e-01:2.5967820226015970e-01:9.9964937183274227e-01:2.7677028735900872e-01:1.8454452073090244e+00:3.2312940914095500e-01:2.2470281313712177e+00:4.2348463903987549e-01:3.0314705120660479e+00:2.7563335458826366e-01:3.7988140600748674e+00 + CVs 20 + -1.6751428552469383e-01 2.5062264607408313e-01 -6.9520905040319680e-01 + -3.1400152311452417e-01 4.2954416945589580e-01 -1.2258109898302332e+00 + -4.5002984157621068e-01 6.0869552539279737e-01 -1.7176535037608704e+00 + -5.8928222747094683e-01 8.0537502454112497e-01 -2.2157618288064209e+00 + -7.4705946032862869e-01 9.9564870165683239e-01 -2.7204691381744368e+00 + -9.4262577083726284e-01 1.1481679539766856e+00 -3.2369299977297370e+00 + -1.1932735908870178e+00 1.2296762511244892e+00 -3.7618542597450917e+00 + -1.5026794920358326e+00 1.2105509073984129e+00 -4.2751629638491799e+00 + -1.8534168069083503e+00 1.0697306985928123e+00 -4.7530054563972302e+00 + -2.2099057242968416e+00 7.9630287488763796e-01 -5.1748067085883891e+00 + -2.5108608136855257e+00 3.9167934734277887e-01 -5.5113343155689130e+00 + -2.6866101620430123e+00 -1.3611058604270498e-01 -5.7347804146642156e+00 + -2.7397081838486694e+00 -7.8587705853689060e-01 -5.8473112902775677e+00 + -2.7664487055975333e+00 -1.5510444357544930e+00 -5.8792321885884213e+00 + -2.8870140375802049e+00 -2.3774244024848956e+00 -5.8719475826060012e+00 + -3.1863409722638569e+00 -3.1711994301006854e+00 -5.8693485239157202e+00 + -3.6833082862357234e+00 -3.8750404373025429e+00 -5.9204704696485582e+00 + -4.3416609115125464e+00 -4.5050182917833705e+00 -6.0760699989535718e+00 + -5.1139638300677888e+00 -5.1062925218188937e+00 -6.3626622379240523e+00 + id 13103 + loc 3.4531944990158081e-01 5.8130437135696411e-01 399 + blend 0.0000000000000000e+00 + interp 4.6032551127277810e-01:3.8084012119810612e-01:2.0487992625947349e-01:2.8714272540671443e-01:9.8989236316497708e-01:4.2361780798026472e-01:1.2988531511756456e+00:4.6032090801766540e-01:1.9421914325175829e+00:4.4344814785840253e-01:2.2642800234641607e+00:3.3214130119968521e-01:2.8656153842067251e+00:2.9731300561065016e-01:3.5919868127009664e+00 + CVs 20 + -5.4582388572254267e-02 2.8800160781263234e-01 -2.6044840202495112e-01 + -1.3079165950777821e-01 5.5361851755990754e-01 -5.3693940378641980e-01 + -1.9690923465290999e-01 7.8157955751641561e-01 -8.3012195607441286e-01 + -2.5184126352462555e-01 9.7409730241335657e-01 -1.1403611721636486e+00 + -3.0838696519508996e-01 1.1383214664778605e+00 -1.4637982444713431e+00 + -3.7745388722881396e-01 1.2740978620299686e+00 -1.7897017571592408e+00 + -4.6380122364816551e-01 1.3712901805322177e+00 -2.1003826863952453e+00 + -5.6156063408433565e-01 1.4127453779780581e+00 -2.3691314106047421e+00 + -6.4990485567108069e-01 1.3870218471047804e+00 -2.5592489990312135e+00 + -6.9684198981208700e-01 1.3137359048786963e+00 -2.6359981265701093e+00 + -6.9775747163554402e-01 1.2445697086615566e+00 -2.6203277465986607e+00 + -7.0519062786834885e-01 1.1720056897677074e+00 -2.6004700699003203e+00 + -7.6174802236731587e-01 1.0272975520674530e+00 -2.6212815206896019e+00 + -8.8807494227089279e-01 7.6702644299935618e-01 -2.6930175590451473e+00 + -1.1000841017952014e+00 4.0378902895094465e-01 -2.8473661161743666e+00 + -1.3792645190555244e+00 1.5530642856315502e-02 -3.1362966513128718e+00 + -1.6403284647005330e+00 -3.0139973743978021e-01 -3.5956673729833013e+00 + -1.7815899215586353e+00 -4.7563720235481927e-01 -4.1108797656342881e+00 + -1.8425669854715883e+00 -5.3877039189069931e-01 -4.4453320873478006e+00 + id 13104 + loc 7.4004071950912476e-01 2.4834712967276573e-02 414 + blend 0.0000000000000000e+00 + interp 1.1528839294460484e+00:1.1528739294460484e+00:9.9023250662854756e-01:3.0689599390483113e-01:1.1167456632242589e+00:3.7947802214947118e-01:1.8927294026051440e+00:1.2680398054819381e-01:2.4337148579159926e+00:3.3698844957844576e-01:3.2035650445302410e+00 + CVs 20 + -8.6766483633899127e-01 9.9432828566826212e-02 1.8336803095283333e-01 + -1.4159393673803498e+00 5.2273175852449699e-02 3.3474182500249194e-01 + -1.8986629329285873e+00 -5.9840115665669769e-02 4.7836860061066389e-01 + -2.4178223950806994e+00 -2.0188341385875885e-01 6.1384292040106814e-01 + -2.9549519209466157e+00 -3.8122240690714970e-01 7.3877916287130818e-01 + -3.4894828295822640e+00 -5.9908342781643176e-01 8.4653768849582589e-01 + -4.0011604743735676e+00 -8.4897574881172777e-01 9.2583365803007966e-01 + -4.4712699289436522e+00 -1.1196702181966907e+00 9.6958461029491516e-01 + -4.8867616107696792e+00 -1.3983787672510735e+00 9.7899825813744124e-01 + -5.2418990640520260e+00 -1.6728986276059126e+00 9.6002072160512575e-01 + -5.5298466947525995e+00 -1.9344930847327426e+00 9.2474674853352612e-01 + -5.7429609337764349e+00 -2.1802360084200916e+00 8.9312901329465300e-01 + -5.8929410719727411e+00 -2.4118414275983038e+00 8.8032900771298628e-01 + -6.0163206045354762e+00 -2.6397443253215034e+00 8.8857944695116309e-01 + -6.1327953547302245e+00 -2.8698944203789516e+00 9.1894556927401450e-01 + -6.2383404471928516e+00 -3.0937570036721080e+00 9.7251956739446421e-01 + -6.3275475715469156e+00 -3.3035228794791074e+00 1.0480906899867812e+00 + -6.3978746932461323e+00 -3.4975286430801340e+00 1.1432823495251012e+00 + -6.4562284973930328e+00 -3.7238744619322004e+00 1.2833617290865345e+00 + id 13105 + loc 9.7037422657012939e-01 5.6852984428405762e-01 393 + blend 0.0000000000000000e+00 + interp 4.2012022890505568e-01:3.9089170637759907e-01:1.5195053074657727e-01:3.9168838368212161e-01:1.0087008126287611e+00:2.5133621399065459e-01:1.5252198713408194e+00:4.2011602770276663e-01:2.0489633176999296e+00:1.0185020775744986e-01:3.1314914925140656e+00 + CVs 20 + -2.0305558078050914e-01 2.2279795102307520e-01 -1.2878522416793767e-01 + -3.9411877054505673e-01 4.6250304916616081e-01 -2.6903366416397373e-01 + -5.8023142011153128e-01 7.1978691873688372e-01 -3.9490990457456510e-01 + -7.6603090527304318e-01 9.9080357206858138e-01 -4.9659886056775243e-01 + -9.5501267581337390e-01 1.2681126829177547e+00 -5.7892486571742063e-01 + -1.1506870878672177e+00 1.5428955591794700e+00 -6.5308400264125077e-01 + -1.3556828698791739e+00 1.8072696547256499e+00 -7.3284466771143597e-01 + -1.5720745670809104e+00 2.0533342800794192e+00 -8.2640603519807232e-01 + -1.8037257207404342e+00 2.2744279662373139e+00 -9.3635043365377413e-01 + -2.0577548924258506e+00 2.4625873994891236e+00 -1.0738647965780990e+00 + -2.3366556838395276e+00 2.5948943258519823e+00 -1.2619543949211405e+00 + -2.6229629024184380e+00 2.6316018441192952e+00 -1.5078672512514042e+00 + -2.8855252893885992e+00 2.5517731128363739e+00 -1.7810304666697840e+00 + -3.1074759131258003e+00 2.3779117964562353e+00 -2.0422483611115676e+00 + -3.2915802395773142e+00 2.1562398446052420e+00 -2.2710343020210821e+00 + -3.4468520491120964e+00 1.9505205089759055e+00 -2.4522280161662762e+00 + -3.5771842658003936e+00 1.8297865424873909e+00 -2.5762748375832136e+00 + -3.6956316048170579e+00 1.7723272316411443e+00 -2.6755395368698949e+00 + -3.9253815278837281e+00 1.5928360791391580e+00 -2.8429906632247595e+00 + id 13106 + loc 2.8267279267311096e-01 1.0624536871910095e-01 374 + blend 0.0000000000000000e+00 + interp 4.0094777716960406e-01:3.4600747327573000e-01:9.8274021847544746e-02:2.6047136637301094e-01:8.2262212759919295e-01:2.7580120537290670e-01:1.6881735499058572e+00:2.9532416236393044e-01:2.5261066614381713e+00:2.7488153194971371e-01:3.0108371890326686e+00:4.0094376769183238e-01:3.7100383437750359e+00 + CVs 20 + -3.3285821272465121e-01 4.6539687532544061e-01 7.5473678885371109e-01 + -4.4256101631747680e-01 7.6555417986072249e-01 1.3805520581626523e+00 + -4.0340946588873677e-01 9.2508140998429511e-01 1.9840966347632263e+00 + -3.0115373795445854e-01 1.0280686262010765e+00 2.5999893767763664e+00 + -2.2015237089485273e-01 1.1448097325657032e+00 3.2262549824437867e+00 + -2.2665900882497936e-01 1.2958460388254300e+00 3.8664111132019405e+00 + -3.6184843463583061e-01 1.4664684949936193e+00 4.5038745675766343e+00 + -6.4667389479557458e-01 1.6338818452070165e+00 5.0988226301108037e+00 + -1.0776841081796484e+00 1.7790691085919272e+00 5.6162907597925731e+00 + -1.6436544648883709e+00 1.8795031830236026e+00 6.0450306437533712e+00 + -2.3237339580828653e+00 1.9020658632300125e+00 6.3899203799089364e+00 + -3.0700903049945514e+00 1.8088609992777385e+00 6.6503083384896007e+00 + -3.8088730479037252e+00 1.5782729210906554e+00 6.8128265469665177e+00 + -4.4643633806512604e+00 1.2289926258264043e+00 6.8677591281056527e+00 + -5.0131397573404541e+00 7.9356847414144660e-01 6.8253507610098634e+00 + -5.4919392470103219e+00 2.2823381039798818e-01 6.6878591345829159e+00 + -5.8591688233773374e+00 -5.7190766551491246e-01 6.4948111258572849e+00 + -5.9463131853269182e+00 -1.4607340813379621e+00 6.4142614228118155e+00 + -5.8449503480134002e+00 -1.9265556757134714e+00 6.4779664158332650e+00 + id 13107 + loc 3.9950451254844666e-01 3.5331839323043823e-01 1080 + blend 0.0000000000000000e+00 + interp 4.2607729308873321e-01:3.9421521880158888e-01:2.3744835531790187e-01:3.3630165146464219e-01:9.4588989856027605e-01:3.2965124242558597e-01:1.8695106962536561e+00:4.2607303231580235e-01:2.0655282310229222e+00:3.2857578416694461e-01:2.8902005649765763e+00:3.1644139352405076e-01:3.9272381454980700e+00 + CVs 20 + 4.1867059385994410e-01 4.2745639518309420e-01 2.9354102569575567e-02 + 6.6245571148424642e-01 7.4260979216835221e-01 4.5774574700929396e-02 + 8.5114611911413784e-01 1.0215522572516218e+00 5.5849893768670590e-02 + 1.0567801668754886e+00 1.3058655137595938e+00 6.4420230469148534e-02 + 1.2634996476609024e+00 1.5850070880515623e+00 6.7285112631548447e-02 + 1.4553139450106682e+00 1.8483791690756670e+00 6.0693658538810757e-02 + 1.6188833352313565e+00 2.0893113908804049e+00 4.0574267743707260e-02 + 1.7438728704852666e+00 2.3178112056880491e+00 -6.6138365802080323e-03 + 1.7509220726294967e+00 2.6337543331170385e+00 -2.3251990065771738e-01 + 1.3171683641542016e+00 2.5003114736844325e+00 -6.9119170426536136e-01 + 1.1924890377079396e+00 2.2925980195174382e+00 -7.6051170244945054e-01 + 1.1105397243931154e+00 2.0838340060953522e+00 -8.0562472778653693e-01 + 1.0435069163034996e+00 1.8342791512044561e+00 -8.3913269161950499e-01 + 9.8675590480972863e-01 1.5501119416610685e+00 -8.6104741597167944e-01 + 9.2481103258431541e-01 1.2573631915003025e+00 -8.7116343642171212e-01 + 8.3074435080887576e-01 1.0239167287649693e+00 -8.7620133414794155e-01 + 7.6258596914109589e-01 1.0196011890028265e+00 -9.1714597672633558e-01 + 1.4942857826198854e+00 9.3229776714144696e-01 -6.6787529776611554e-01 + 1.5176642071529101e+00 9.8193027664826904e-01 -7.3761208495118558e-01 + id 13108 + loc 9.7717767953872681e-01 5.2032095193862915e-01 409 + blend 0.0000000000000000e+00 + interp 3.5287534786430597e-01:3.0313500033215279e-01:5.8693109246515252e-01:3.3849752211397022e-01:1.1176563016553225e+00:3.4144085560726534e-01:2.0678859154509976e+00:3.5287181911082732e-01:2.9399347773374531e+00:3.5097792825034241e-01:3.9701227352845931e+00 + CVs 20 + 2.7279851772924335e-01 2.3097835264085861e-01 -1.2038736060375968e-01 + 5.2393785927807346e-01 4.3395027393418872e-01 -2.3206919896033368e-01 + 7.8114953701985590e-01 6.2473409006825931e-01 -3.3844417936862536e-01 + 1.0668397501832445e+00 8.1487560991186592e-01 -4.4195304316801420e-01 + 1.3836010295051646e+00 9.9803563155787511e-01 -5.4278985204255403e-01 + 1.7313546231815766e+00 1.1673252283016033e+00 -6.4354871908942568e-01 + 2.1105318325239848e+00 1.3175076457143031e+00 -7.5012725795902857e-01 + 2.5239855568188836e+00 1.4403015382543312e+00 -8.6885994613009487e-01 + 2.9750015069500244e+00 1.5190363960939548e+00 -1.0035369877680944e+00 + 3.4601873347636278e+00 1.5306174449042391e+00 -1.1593140243620923e+00 + 3.9571419041156828e+00 1.4523652220754930e+00 -1.3441978152485143e+00 + 4.4226957628026025e+00 1.2753795334656488e+00 -1.5583130435620762e+00 + 4.8194007246390766e+00 1.0131232225581568e+00 -1.7906782214644648e+00 + 5.1327077241225059e+00 6.8895144192459146e-01 -2.0313694146147689e+00 + 5.3588399860904845e+00 3.2583023237904429e-01 -2.2747107829850148e+00 + 5.4972716142671514e+00 -5.6034292469114177e-02 -2.5127118304831617e+00 + 5.5519558567604355e+00 -4.4065179706865498e-01 -2.7321355115791630e+00 + 5.5323457371379092e+00 -8.1107391883207836e-01 -2.9209217679216639e+00 + 5.4632931942818725e+00 -1.1050760757152140e+00 -3.0733563164159547e+00 + id 13109 + loc 1.1918430030345917e-01 8.6745530366897583e-01 382 + blend 0.0000000000000000e+00 + interp 4.7569655115985371e-01:3.1826166924593668e-01:2.2547503071433495e-02:4.4838340980640234e-01:6.7423968786613986e-01:4.0186333139741037e-01:1.2016867404547429e+00:2.8078068236369907e-01:1.8966531358993723e+00:2.6335562787470829e-01:2.7928097968803201e+00:4.7569179419434215e-01:3.5544696847136570e+00 + CVs 20 + 9.7033426565992087e-01 1.6321068891389162e-01 -4.3502227406561400e-01 + 1.5808300654427936e+00 1.6070994168858180e-01 -7.5027370286690964e-01 + 2.0819979350810929e+00 9.0840775655255335e-02 -1.0323495954967341e+00 + 2.5817345783587862e+00 1.0826638379774489e-03 -1.3140918814199778e+00 + 3.0770998954059832e+00 -1.0738916861679015e-01 -1.5967399198904206e+00 + 3.5673185430701060e+00 -2.3339680129128104e-01 -1.8839742751098787e+00 + 4.0487840459314040e+00 -3.7487631208628125e-01 -2.1800075628603151e+00 + 4.5128575504784898e+00 -5.3015594559775558e-01 -2.4826425627415092e+00 + 4.9526897244054613e+00 -6.9983196694767069e-01 -2.7783747567736685e+00 + 5.3679458115507170e+00 -8.8444849579363982e-01 -3.0585393552289215e+00 + 5.7589858972968520e+00 -1.0874509349623154e+00 -3.3251994846924209e+00 + 6.1201796964424497e+00 -1.3139937597172304e+00 -3.5903338049019049e+00 + 6.4425277522964999e+00 -1.5664543288646964e+00 -3.8666251125192685e+00 + 6.7203164077046784e+00 -1.8441748946983842e+00 -4.1593672210384423e+00 + 6.9499184527034323e+00 -2.1443111110225770e+00 -4.4684001779223230e+00 + 7.1266573206093424e+00 -2.4591302824650754e+00 -4.7958198464372028e+00 + 7.2444094728846045e+00 -2.7797362126416738e+00 -5.1462682811066642e+00 + 7.2936947718549794e+00 -3.1022442527728211e+00 -5.5120812033438291e+00 + 7.1853397708684072e+00 -3.3968681938881571e+00 -5.7801634079922213e+00 + id 13110 + loc 7.4937289953231812e-01 3.1626281142234802e-01 396 + blend 0.0000000000000000e+00 + interp 4.6705869819684820e-01:2.9411516622520656e-01:2.4024660537403708e-02:4.3149500800102714e-01:7.1902016443063621e-01:3.6330157735793611e-01:1.0657850830402804e+00:3.0823794408907029e-01:1.9810550595265732e+00:4.6705402760986625e-01:2.8232242861793164e+00:3.1999497330367410e-01:3.0442202965805141e+00 + CVs 20 + -7.9295942197368641e-01 3.4184306666508157e-01 3.7516149550977484e-01 + -1.3851117214444344e+00 5.3464502517998169e-01 6.8654071596541555e-01 + -1.9054690069880880e+00 6.6315484551812121e-01 9.7075527888041790e-01 + -2.4226506918546691e+00 7.4963406452581738e-01 1.2592327850827789e+00 + -2.9317855711460941e+00 7.8611609577227215e-01 1.5529131927993558e+00 + -3.4271749931159747e+00 7.6840080633219954e-01 1.8537795606354206e+00 + -3.9016590620593150e+00 6.9589089053776321e-01 2.1618450399661251e+00 + -4.3501574926880320e+00 5.6922171999417914e-01 2.4743143059406103e+00 + -4.7739616294365756e+00 3.8749135258070777e-01 2.7903653775702386e+00 + -5.1708022715963073e+00 1.4957435416473452e-01 3.1098719048541570e+00 + -5.5326702804205405e+00 -1.4319249181043681e-01 3.4330045612995694e+00 + -5.8521363670035651e+00 -4.8584929244612640e-01 3.7584573327824033e+00 + -6.1298547776261563e+00 -8.7249262596580746e-01 4.0829780708499381e+00 + -6.3712027551926971e+00 -1.2979437442706789e+00 4.4027058894376907e+00 + -6.5786129944004319e+00 -1.7564979760431338e+00 4.7146685087009974e+00 + -6.7497338357603969e+00 -2.2429781354196563e+00 5.0148494449849217e+00 + -6.8797410892670099e+00 -2.7524513037361804e+00 5.2931073222011094e+00 + -6.9674815478289656e+00 -3.2699385977080446e+00 5.5347959172860115e+00 + -7.0597567320807268e+00 -3.6776004507028990e+00 5.7333154433713602e+00 + id 13111 + loc 6.0723817348480225e-01 7.1955800056457520e-02 373 + blend 0.0000000000000000e+00 + interp 5.1079621081494797e-01:2.5769025965171288e-01:4.8277753084838326e-01:2.1118814350288187e-01:1.0496511650126361e+00:3.5789955862285844e-01:1.9170133916856820e+00:5.1079110285283980e-01:2.8907613913537911e+00:2.8592138977612996e-01:3.0927395453640223e+00:2.6650684872291813e-01:3.9919446208214469e+00 + CVs 20 + 3.6878491920735840e-01 4.6560134778642143e-01 -2.4668242299925439e-02 + 7.2193687188428046e-01 8.6755456595291724e-01 -5.0284818247273932e-02 + 1.0540521187652259e+00 1.1644299544484331e+00 -9.5254373205676729e-02 + 1.3389211012449356e+00 1.3714401309678039e+00 -1.7934888318087600e-01 + 1.5783793580969636e+00 1.5399627415569872e+00 -3.0237184258187588e-01 + 1.8211711514915365e+00 1.7248897303282869e+00 -4.4915534379648941e-01 + 2.0943637258527481e+00 1.9607830422727328e+00 -5.9853058933479697e-01 + 2.3843377982578047e+00 2.2573476792368243e+00 -7.2644491199593009e-01 + 2.6715116279024267e+00 2.6106514514846024e+00 -8.1515139641715839e-01 + 2.9528203255612162e+00 3.0158670102580318e+00 -8.4817247044502575e-01 + 3.2422735975128263e+00 3.4738494925310257e+00 -7.9734728395853494e-01 + 3.5643666346155731e+00 3.9871742027854706e+00 -6.0663936933151907e-01 + 3.9264492998511757e+00 4.5222982747137275e+00 -1.8514240451461905e-01 + 4.2867778691103426e+00 4.9549540788994015e+00 5.5324682917906509e-01 + 4.5447488938066547e+00 5.0770677266202560e+00 1.5349278197696048e+00 + 4.6191674632713076e+00 4.8698404073005186e+00 2.3560585610238967e+00 + 4.5491240124990542e+00 4.5614724865865499e+00 2.8552494630057463e+00 + 4.5007652636871907e+00 4.1898530386144870e+00 3.1012626474260649e+00 + 4.7400326519204548e+00 3.7736793816028866e+00 2.9590183458405312e+00 + id 13112 + loc 7.1631664037704468e-01 3.0304792523384094e-01 395 + blend 0.0000000000000000e+00 + interp 3.9182409227816595e-01:2.9751072872584194e-01:2.5486170794609442e-01:2.9639365121171468e-01:1.0196600313135984e+00:3.1605563085010607e-01:1.9996712727899995e+00:2.8306037693594183e-01:2.7427217677299658e+00:3.1244148665610832e-01:3.2741451377905975e+00:3.9182017403724317e-01:3.9475740752321289e+00 + CVs 20 + -4.5072782786124682e-01 3.9594127813351210e-01 4.0523012621947518e-01 + -8.4305209256942948e-01 7.0894251326947477e-01 7.7415350623941093e-01 + -1.2376736542509383e+00 9.7822821253626557e-01 1.1302429833308267e+00 + -1.6604604709265391e+00 1.2128473856721480e+00 1.4847735367279180e+00 + -2.0996692031092321e+00 1.4035280675002224e+00 1.8289245481425027e+00 + -2.5386647998237302e+00 1.5443984989363042e+00 2.1585672958773490e+00 + -2.9693327421365883e+00 1.6275890498602918e+00 2.4733700257524251e+00 + -3.3914681618312446e+00 1.6406002042342347e+00 2.7716291696019697e+00 + -3.7972343691413846e+00 1.5766055888033152e+00 3.0478099645602805e+00 + -4.1719221952474630e+00 1.4419345880597805e+00 3.2949311964984447e+00 + -4.5079003475781665e+00 1.2512878437906831e+00 3.5060730594883549e+00 + -4.8067855746992079e+00 1.0200559847627497e+00 3.6772401823981360e+00 + -5.0751787104290180e+00 7.6009576969625980e-01 3.8092811369526247e+00 + -5.3241604532399815e+00 4.7912495159342772e-01 3.9045345492706200e+00 + -5.5658151195688426e+00 1.8375636365847958e-01 3.9680331408679512e+00 + -5.8089788234205795e+00 -1.1342812538430369e-01 4.0143059836004884e+00 + -6.0596533977439302e+00 -4.1204419808527470e-01 4.0677106126992193e+00 + -6.2906747828174492e+00 -7.2887184649620451e-01 4.1279864898081957e+00 + -6.3465948251435780e+00 -1.0526180007393084e+00 4.1202120135617051e+00 + id 13113 + loc 4.3904951214790344e-01 8.4282702207565308e-01 1081 + blend 0.0000000000000000e+00 + interp 4.4858861648989079e-01:3.1130302243679142e-01:5.2584712955808044e-01:2.8325473395674222e-01:1.1437838922823200e+00:4.4858413060372593e-01:1.9908153383848004e+00:2.8765698037231768e-01:2.9984512363143212e+00:4.2867563171057482e-01:3.4268804710467395e+00:3.7662166475206166e-01:3.9854641410904024e+00 + CVs 20 + -1.5439251394594206e-02 4.2853673994324898e-01 6.2931468207817698e-01 + 1.4305692132875247e-02 7.3489796851328559e-01 1.0596448142945667e+00 + 7.6272629318598989e-02 1.0035290856899546e+00 1.4144748868239685e+00 + 1.6416016777350739e-01 1.2814173012568089e+00 1.7601651006203975e+00 + 2.7782524992416457e-01 1.5651703259663148e+00 2.0851231848316778e+00 + 4.1696504722558220e-01 1.8517423996995634e+00 2.3808745864712590e+00 + 5.8424999182995729e-01 2.1386589590157468e+00 2.6370285977283019e+00 + 7.9427117790050850e-01 2.4280135629245581e+00 2.8445460522599340e+00 + 1.1002401320911355e+00 2.7284323212873502e+00 2.9838008840905825e+00 + 1.5653865440425374e+00 2.9730759020485293e+00 2.9643592307628266e+00 + 2.0133548079356851e+00 3.0010323714358753e+00 2.7617167243455012e+00 + 2.2843197906948456e+00 2.8785659676950814e+00 2.5288732788882351e+00 + 2.4324565567806644e+00 2.6996855722987649e+00 2.3069157420564399e+00 + 2.5066788947097907e+00 2.4838068324075731e+00 2.0821265734567413e+00 + 2.5314918064833414e+00 2.2277900686823862e+00 1.8459861285118648e+00 + 2.5224334685638521e+00 1.9092469565646328e+00 1.6113169612842835e+00 + 2.4903289925885446e+00 1.4892232688561950e+00 1.4382186473985774e+00 + 2.4410695697922700e+00 9.6301801445408719e-01 1.3925676192195788e+00 + 2.3903990863950817e+00 3.8827813544366452e-01 1.4045230120638348e+00 + id 13114 + loc 6.7975890636444092e-01 5.6368011236190796e-01 402 + blend 0.0000000000000000e+00 + interp 3.6904701696467485e-01:3.6270076514516020e-01:1.3005669254863572e-02:2.9436176632435651e-01:7.2528456234230287e-01:3.6904332649450522e-01:1.2224377534688711e+00:3.2007291213816241e-01:2.0574880234102482e+00:2.6216166687288317e-01:2.7687642058769053e+00:2.5207586073490829e-01:3.3050475659077110e+00 + CVs 20 + -3.2527112037151529e-02 2.9635077301103968e-01 -2.1983392235467472e-01 + -8.8278179448747857e-02 6.0322565928849337e-01 -4.7210857973683235e-01 + -1.4926467152609474e-01 9.1971841760092965e-01 -7.5618468753786594e-01 + -2.3809961499510046e-01 1.2318919846771776e+00 -1.0641061558566769e+00 + -3.8555494662682160e-01 1.5048523461757997e+00 -1.3794573243688675e+00 + -5.8583003697030223e-01 1.6992873683959302e+00 -1.6871913802439811e+00 + -8.3432367030619825e-01 1.8076806705182529e+00 -1.9722335855563573e+00 + -1.0978970006454050e+00 1.8052006534268517e+00 -2.1944068225826054e+00 + -1.3071572792356230e+00 1.7047634504876688e+00 -2.3744723285313420e+00 + -1.4484619038364015e+00 1.5335616113891832e+00 -2.5335705336995993e+00 + -1.5345989805932061e+00 1.3112180597748544e+00 -2.6676733173290046e+00 + -1.6277655057517759e+00 1.0224733365264664e+00 -2.8119682270361817e+00 + -1.7863267912265308e+00 6.4663775287105563e-01 -2.9973386239282256e+00 + -2.0537722230717108e+00 2.3596906063797018e-01 -3.2171156031264001e+00 + -2.4441552868486767e+00 -1.2597940953673270e-01 -3.4516772995467351e+00 + -2.9269697022046497e+00 -3.8807891194382327e-01 -3.6871059358107656e+00 + -3.4642107979784820e+00 -5.5752856544868179e-01 -3.9360089694824518e+00 + -4.0394852195786601e+00 -6.6967520085013232e-01 -4.2270057925979980e+00 + -4.6317303478561396e+00 -7.5439604145829708e-01 -4.5193991427368179e+00 + id 13115 + loc 4.5171079039573669e-01 6.0042464733123779e-01 400 + blend 0.0000000000000000e+00 + interp 4.3241477796866562e-01:4.3241045382088594e-01:2.6386830011013829e-02:2.9816751027076382e-01:5.0126388564471847e-01:3.1639059309030987e-01:1.0294667660378096e+00:3.8900104610545616e-01:1.8089424030655965e+00:2.6768344261289645e-01:2.5296335619630357e+00:3.0993192168107325e-01:3.4250318601885064e+00 + CVs 20 + -2.0711192298047199e-01 2.9706464428286233e-01 -2.0991408134314066e-01 + -4.0903268851194097e-01 5.6345612960079405e-01 -4.2412799428394249e-01 + -6.0669618059111019e-01 8.0336204154413915e-01 -6.7182363863078565e-01 + -8.0079842564498471e-01 1.0142221129076132e+00 -9.6463550173748547e-01 + -9.9179867641810626e-01 1.1886250085812256e+00 -1.2993453595708835e+00 + -1.1825907806360818e+00 1.3185330764110079e+00 -1.6682232586499075e+00 + -1.3753091601166123e+00 1.3956620207778792e+00 -2.0611562878339278e+00 + -1.5683771326142049e+00 1.4121945007068828e+00 -2.4682929256371207e+00 + -1.7565832210577357e+00 1.3636643509195063e+00 -2.8828220701132929e+00 + -1.9322042497531733e+00 1.2503798958730572e+00 -3.2996649779089511e+00 + -2.0898100048941690e+00 1.0777597192887292e+00 -3.7114643735730510e+00 + -2.2356674229367020e+00 8.5800873236195541e-01 -4.1050466214483219e+00 + -2.3867712431287229e+00 6.0925893545993803e-01 -4.4527225642015269e+00 + -2.5569085744313766e+00 3.5508956099189137e-01 -4.7053645287312706e+00 + -2.7444023239820496e+00 1.2907700080643281e-01 -4.8278478360049064e+00 + -2.9348985943356767e+00 -4.1747839987136048e-02 -4.8598676844731026e+00 + -3.1181908912964080e+00 -1.6575904180232515e-01 -4.8836068433003792e+00 + -3.2872662058460831e+00 -2.7841403192472303e-01 -4.9546723948789060e+00 + -3.4604121733826623e+00 -5.0443116059406390e-01 -5.1966622361571391e+00 + id 13116 + loc 7.2693847119808197e-02 7.7010500431060791e-01 403 + blend 0.0000000000000000e+00 + interp 3.8024674414848192e-01:3.3766070731917996e-01:8.5811467747774040e-02:3.2229650438575969e-01:1.0863776571856829e+00:3.7171175711294635e-01:1.9865750028720162e+00:3.3416470604412396e-01:2.5725277299822320e+00:3.8024294168104045e-01:3.3135618361193284e+00 + CVs 20 + 7.4412508232665070e-03 1.9519068138704748e-01 -7.4893972612051177e-02 + -2.3842662492346539e-02 3.6791267640848213e-01 -1.6368977094277046e-01 + -8.0350054083513700e-02 5.2565714296376709e-01 -2.5547914749154971e-01 + -1.5567164008836099e-01 6.6853573988455206e-01 -3.4436727458078015e-01 + -2.4756991387971733e-01 7.9257711469803382e-01 -4.2893472155172691e-01 + -3.5190513840933568e-01 8.9599286479644524e-01 -5.0821676624144352e-01 + -4.6442011878424211e-01 9.7983152750295610e-01 -5.8187672595066087e-01 + -5.8219303136248646e-01 1.0481535686308918e+00 -6.5038220599147112e-01 + -7.0296982190617485e-01 1.1054245638716542e+00 -7.1423158005982557e-01 + -8.2248412061328835e-01 1.1535158196674511e+00 -7.7406853684055510e-01 + -9.3504227606119872e-01 1.1933240901523441e+00 -8.3188302111072665e-01 + -1.0376441289935530e+00 1.2280226785460748e+00 -8.9020476910194590e-01 + -1.1364929332019493e+00 1.2640346685018957e+00 -9.4908178315363845e-01 + -1.2518034128200433e+00 1.3056499928126455e+00 -1.0022503911091480e+00 + -1.4068780475587424e+00 1.3469248742904318e+00 -1.0369898622874600e+00 + -1.5991823799795508e+00 1.3818449615441717e+00 -1.0445758712442164e+00 + -1.8039560117745528e+00 1.4180986018147450e+00 -1.0274753103087295e+00 + -1.9972051367791224e+00 1.4656307182398765e+00 -9.9432273422751638e-01 + -2.1662489290459304e+00 1.5142752186238748e+00 -9.5398194519124047e-01 + id 13117 + loc 2.7860519289970398e-01 2.7519756555557251e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9558196515328697e-01:2.6545187264727377e-01:4.5933544984136498e-01:3.2380082764805573e-01:1.2265607731512174e+00:3.9557800933363546e-01:1.8994998565137056e+00:3.2889083246063244e-01:2.1990951598876611e+00:2.5307949461822682e-01:2.9574686136725936e+00:3.2728170692310027e-01:3.8804934053322047e+00 + CVs 20 + -5.8209106096303587e-03 3.1130579355141441e-01 -2.9191428919623119e-02 + -6.5314230378207661e-02 5.8647548123940363e-01 -4.1861235597689422e-02 + -1.4850484263308361e-01 8.6492708587628497e-01 -6.5362602516425367e-02 + -2.2987522618483869e-01 1.1502133814763835e+00 -1.0725167359080300e-01 + -3.0711908213293482e-01 1.4384128956213420e+00 -1.6973970438568992e-01 + -3.7787733633756160e-01 1.7239970551062465e+00 -2.5173796441559876e-01 + -4.4957186904805790e-01 2.0020269956624466e+00 -3.5524738963770375e-01 + -5.4032391450690975e-01 2.2667860744080630e+00 -4.8714221068284158e-01 + -6.7312454189031701e-01 2.5087393916288412e+00 -6.5560515670368402e-01 + -8.7069107590577577e-01 2.7053799132349159e+00 -8.6713530931520544e-01 + -1.1377806293551593e+00 2.8192640199562176e+00 -1.1173120944759689e+00 + -1.4525551539028390e+00 2.8219925171070472e+00 -1.3896188656410424e+00 + -1.7888015560767447e+00 2.7118639043414499e+00 -1.6708561993086435e+00 + -2.1371080292926012e+00 2.4985716871628498e+00 -1.9602907334917881e+00 + -2.5055462348202222e+00 2.1685887493846336e+00 -2.2704846164469106e+00 + -2.8788630347411361e+00 1.6361559427088688e+00 -2.6251043718307372e+00 + -3.0750314908145517e+00 7.5583763899975120e-01 -3.0166216657527811e+00 + -2.8011123828394551e+00 -2.7611138733583029e-01 -3.3135136579291489e+00 + -2.7025592846132649e+00 -7.8328388760756162e-01 -3.5252477485886287e+00 + id 13118 + loc 7.6280131936073303e-02 7.4796460568904877e-02 380 + blend 0.0000000000000000e+00 + interp 4.8433090722449290e-01:4.0791476978425684e-01:1.1079626632449224e-01:4.8432606391542066e-01:9.6938700474859973e-01:2.6332574548320237e-01:1.3421567096322062e+00:3.5631210734344110e-01:1.9366261833067819e+00:2.7286526221720936e-01:2.7026007368993512e+00:3.4268231099391888e-01:3.0528070450232025e+00:2.4130725540007494e-01:3.9265741614045213e+00 + CVs 20 + -3.6548564910130027e-01 3.7287144124121607e-01 6.1964666256103051e-01 + -5.9041348450626230e-01 6.1333920970549483e-01 1.1327266630170709e+00 + -7.6259494713175913e-01 7.8424298353227095e-01 1.6283179339142699e+00 + -9.2865505341213939e-01 9.1867004424466447e-01 2.1469684021008986e+00 + -1.1124809791532000e+00 1.0240402771560064e+00 2.6869706933096724e+00 + -1.3367121708078704e+00 1.0973021909143310e+00 3.2429597799867853e+00 + -1.6178774120868342e+00 1.1238045634220595e+00 3.8075173074604902e+00 + -1.9636333282578775e+00 1.0874488040567869e+00 4.3648931857741537e+00 + -2.3669947978526888e+00 9.7880195676584769e-01 4.8895962837434706e+00 + -2.8020390160707569e+00 7.9713929263765682e-01 5.3608349566103133e+00 + -3.2323132452373695e+00 5.4461018829885388e-01 5.7744481055451304e+00 + -3.6234808496886206e+00 2.1924025039791228e-01 6.1336168159735838e+00 + -3.9498625621347223e+00 -1.7549050294179125e-01 6.4395649182600554e+00 + -4.2127373540653430e+00 -6.0656231224621093e-01 6.7032903463808715e+00 + -4.4329376686072104e+00 -1.0155478714381214e+00 6.9483230325645735e+00 + -4.6192863525698717e+00 -1.3332783629815221e+00 7.1873771931116810e+00 + -4.7626228979436780e+00 -1.5131041400791942e+00 7.4034665527215555e+00 + -4.8726210529765766e+00 -1.5887880329050450e+00 7.5858503994681854e+00 + -4.9801762204964186e+00 -1.6973214044250398e+00 7.8540433297865180e+00 + id 13119 + loc 7.2730362415313721e-01 1.9642473757266998e-01 415 + blend 0.0000000000000000e+00 + interp 4.4739758866467499e-01:3.7929395924950660e-01:9.0334886247442348e-02:3.9892325089145880e-01:9.1776755998425741e-01:3.4645188320315001e-01:1.8293289970233988e+00:4.4739311468878834e-01:2.4321298994702492e+00:2.8419394954134897e-01:2.9779155450759971e+00:3.7424727229480687e-01:3.8062461996955208e+00 + CVs 20 + -1.7652414220303908e-01 9.1035493389737890e-02 2.9324871097339139e-02 + -3.2290549574546290e-01 1.5122818763908247e-01 8.0848664959119992e-02 + -4.6869296527787496e-01 2.1046075751412033e-01 1.3870029469314010e-01 + -6.1832877403418063e-01 2.8020069911791251e-01 1.8607757097373401e-01 + -7.7252307559639277e-01 3.6175824557417746e-01 2.2289747538560584e-01 + -9.3469154880339600e-01 4.5680303595913818e-01 2.4798134316683984e-01 + -1.1058055455657394e+00 5.6577469649115331e-01 2.5559070970473974e-01 + -1.2833546870909358e+00 6.8736217909529951e-01 2.3860287986250739e-01 + -1.4664895989978781e+00 8.1983984990928072e-01 1.9294519356885187e-01 + -1.6542531870021073e+00 9.6111728646061145e-01 1.1579076367496532e-01 + -1.8264266323083818e+00 1.1096235243456254e+00 2.8283595826447128e-03 + -1.9358331043969625e+00 1.2683097205089811e+00 -1.4940943046055832e-01 + -1.9616401721238230e+00 1.4428567707376532e+00 -3.4901589899250485e-01 + -1.9766051705874799e+00 1.6251852531596984e+00 -5.9893590300320609e-01 + -2.0754200518858461e+00 1.7922609969563552e+00 -8.6233227345535757e-01 + -2.2688366872690837e+00 1.9298239571391842e+00 -1.1041203882035076e+00 + -2.5259231141366150e+00 2.0326447712102693e+00 -1.3122049846986430e+00 + -2.8231449120844658e+00 2.0998835602440469e+00 -1.4664455030647845e+00 + -3.1507023851515932e+00 2.1170821645489415e+00 -1.4249460700681913e+00 + id 13120 + loc 9.4851988554000854e-01 7.7142876386642456e-01 377 + blend 0.0000000000000000e+00 + interp 3.6363744783082413e-01:3.6063757684029418e-01:4.6552408320965633e-04:3.5462803715366409e-01:8.9909969770343789e-01:3.6363381145634582e-01:1.6207781914625605e+00:2.5182546008871010e-01:2.0712294219695675e+00:1.4353715514533624e-01:2.8112365576991247e+00:3.6226052331003999e-01:3.4760120916743240e+00 + CVs 20 + -6.8439625037167895e-01 1.8987585356311504e-01 -7.3688375092234171e-01 + -1.2434535679235443e+00 2.3902905416519621e-01 -1.2354353578738730e+00 + -1.7946902536794691e+00 2.4161524917041965e-01 -1.6831067196631171e+00 + -2.3731723643632252e+00 2.3342127492109355e-01 -2.1448269552080403e+00 + -2.9575298012355535e+00 2.1814714460957374e-01 -2.6044488566245203e+00 + -3.5277118988602210e+00 1.9547339660410712e-01 -3.0431251786978173e+00 + -4.0699511660075824e+00 1.5916056777256760e-01 -3.4573092799835772e+00 + -4.5788496434138573e+00 9.6637917818918284e-02 -3.8669479995359675e+00 + -5.0530580755699885e+00 -1.5063591134823140e-02 -4.2991717260988809e+00 + -5.4848151293551002e+00 -2.0575724044717103e-01 -4.7637616416519055e+00 + -5.8662180779055948e+00 -5.0866404656653730e-01 -5.2506528641927090e+00 + -6.1864599641003402e+00 -9.5396329224201359e-01 -5.7290668009321477e+00 + -6.4230421908705582e+00 -1.5457109847774118e+00 -6.1526943511018448e+00 + -6.5597515955394989e+00 -2.2410343224699720e+00 -6.4856060139984439e+00 + -6.6169593938254927e+00 -2.9688704651319515e+00 -6.7353890560470671e+00 + -6.6449458372158539e+00 -3.6691294415812661e+00 -6.9354725952689211e+00 + -6.6998119475683744e+00 -4.3165915789746858e+00 -7.0985529701636487e+00 + -6.8068517075793284e+00 -4.9178468521064191e+00 -7.2145684962015784e+00 + -6.9004054253221057e+00 -5.4737238482768298e+00 -7.2830835705510610e+00 + id 13121 + loc 5.6212252378463745e-01 8.8070011138916016e-01 374 + blend 0.0000000000000000e+00 + interp 5.1933476987184435e-01:4.8328025658993168e-01:4.2167313323129063e-02:4.5076301056876172e-01:6.0461552089964266e-01:3.8699080486240628e-01:1.0122958479069224e+00:3.0826104470192811e-01:1.6137175817584202e+00:3.7985812045732464e-01:2.0050352114263053e+00:3.7484164362400929e-01:2.4317881857450474e+00:5.0002446284515845e-01:2.9820353624637539e+00:5.1932957652414569e-01:3.2176440659200107e+00:3.7216373322872826e-01:3.7992688852136696e+00 + CVs 20 + -6.3939605769671592e-01 3.6785134323901214e-01 -2.4177051155513368e-01 + -1.1744474849426614e+00 6.1927172210842718e-01 -4.0292187689617409e-01 + -1.6966764374126060e+00 7.9918712811454773e-01 -5.2243112092782784e-01 + -2.2402147037111204e+00 9.4107317975379101e-01 -6.3180713539787126e-01 + -2.7916455853020690e+00 1.0534420172451666e+00 -7.5273999768844668e-01 + -3.3416250152265157e+00 1.1297425596113229e+00 -9.0405343873530819e-01 + -3.8848477185758057e+00 1.1520002233986366e+00 -1.0974728100952105e+00 + -4.4119286431219393e+00 1.1035266889246853e+00 -1.3362722415078938e+00 + -4.9069950339104844e+00 9.7188354521124420e-01 -1.6122075541672607e+00 + -5.3549383541296534e+00 7.5371402987872615e-01 -1.9051826414985742e+00 + -5.7520046402596856e+00 4.4904888159489120e-01 -2.1903661832909513e+00 + -6.0893420924564152e+00 6.1509153384178727e-02 -2.4380929424164099e+00 + -6.3611947329912022e+00 -4.0123024498933813e-01 -2.6303713519728484e+00 + -6.5925678750840433e+00 -9.3544424294934680e-01 -2.7834394107751148e+00 + -6.8407849343057370e+00 -1.5330595285273629e+00 -2.9437904856079435e+00 + -7.1655321845071640e+00 -2.1473224509235020e+00 -3.1411280061726496e+00 + -7.6058387420649467e+00 -2.6986470268695211e+00 -3.3388108689782943e+00 + -8.1348469517582149e+00 -3.1296631533338446e+00 -3.4770750564668682e+00 + -8.5585952105001404e+00 -3.5221827761852360e+00 -3.6477895786842915e+00 + id 13122 + loc 2.9923054575920105e-01 5.9806495904922485e-01 393 + blend 0.0000000000000000e+00 + interp 4.8313948822290714e-01:3.1097294202785403e-01:7.2969386694938021e-02:4.8313465682802492e-01:7.2690494133037165e-01:4.3580149535346868e-01:1.0038147100027517e+00:4.0204231390303641e-01:1.4169000739883162e+00:3.2909397617621572e-01:2.0111798677786048e+00:3.2642760545357991e-01:2.9666464687085963e+00:4.6853566803267910e-01:3.6628784897934863e+00 + CVs 20 + -3.3461746575276508e-01 4.2389319224361027e-01 -2.3776229925127002e-01 + -6.2365712197023515e-01 8.3382537387126077e-01 -4.5669694740459921e-01 + -8.8878113791080482e-01 1.2349843549476955e+00 -6.6212016841637455e-01 + -1.1532411646475984e+00 1.6249538142833821e+00 -8.5741469150336347e-01 + -1.4375505385895637e+00 1.9945022749137009e+00 -1.0408932247146665e+00 + -1.7532821304824586e+00 2.3332760064305407e+00 -1.2061912018383878e+00 + -2.1030095833661733e+00 2.6307943931884461e+00 -1.3468702808595128e+00 + -2.4884125455033783e+00 2.8770507545433794e+00 -1.4619007293800428e+00 + -2.9104392960616696e+00 3.0562776851328044e+00 -1.5534334379187111e+00 + -3.3688524974582670e+00 3.1531422093226382e+00 -1.6292516689090724e+00 + -3.8638132210368781e+00 3.1674801243858495e+00 -1.7145402818031692e+00 + -4.3864524356507326e+00 3.1057779931335379e+00 -1.8429176686259434e+00 + -4.9148709570150135e+00 2.9572903758724429e+00 -2.0244274349012255e+00 + -5.4207513126587514e+00 2.6981747672232235e+00 -2.2448044582020850e+00 + -5.8680316705144397e+00 2.3241209202535651e+00 -2.4954670627748565e+00 + -6.2327755438221049e+00 1.8593320826772333e+00 -2.7658216064524304e+00 + -6.5503988708424323e+00 1.3296534435293887e+00 -3.0070571625868951e+00 + -6.8829827159426262e+00 7.5532958621890089e-01 -3.1615543577086962e+00 + -7.2304945204711322e+00 1.6257718885526073e-01 -3.2911668441599047e+00 + id 13123 + loc 1.4370059967041016e-01 8.7259286642074585e-01 399 + blend 0.0000000000000000e+00 + interp 4.7836154742883596e-01:3.7871581641472685e-01:1.7376962927241058e-01:2.8999704533144366e-01:1.0242327726630063e+00:4.0258494715299420e-01:1.9524989749545498e+00:3.4792706234231424e-01:2.3720428718846258e+00:4.7835676381336167e-01:2.9576213770956739e+00:4.4317435804267974e-01:3.2366267325709703e+00:2.6182763610255694e-01:3.8618660022700211e+00 + CVs 20 + -1.0627585933041936e-01 3.7426853258332415e-01 -3.7634353888026534e-01 + -2.5620866647778290e-01 7.5771661361297649e-01 -7.5970519335660769e-01 + -4.2878043558428780e-01 1.1326300859580076e+00 -1.1694251662611892e+00 + -6.2084928559542596e-01 1.4908781216121592e+00 -1.6090036112118906e+00 + -8.4839744606983791e-01 1.8287089999729533e+00 -2.0666123213749854e+00 + -1.1449293125095676e+00 2.1341197628009558e+00 -2.5172466350947946e+00 + -1.5423979070630294e+00 2.3613432052942294e+00 -2.9276275734137056e+00 + -2.0436840821744893e+00 2.4159890687644090e+00 -3.2569480371023727e+00 + -2.5678236176619302e+00 2.2250814309694671e+00 -3.4594753795103745e+00 + -2.9968163413940871e+00 1.8576914993944702e+00 -3.5514955340098622e+00 + -3.3122342354950858e+00 1.4314136319899098e+00 -3.6135428351212009e+00 + -3.5567243045111372e+00 1.0329812261917410e+00 -3.7228182445162243e+00 + -3.7874719484730810e+00 7.3147629650177337e-01 -3.9107636390452569e+00 + -4.0330228023561903e+00 5.9300668979081417e-01 -4.1653144648032097e+00 + -4.2458047156917127e+00 6.8714207313966491e-01 -4.4365372935093434e+00 + -4.2830300532651240e+00 1.0121078180842211e+00 -4.6297151742951757e+00 + -3.9634825328549939e+00 1.3666916078954650e+00 -4.6487222563250947e+00 + -3.5416582793600528e+00 1.4581290792942150e+00 -4.6343845752119419e+00 + -3.5187221235938506e+00 1.7651509246207835e+00 -4.8500257288729971e+00 + id 13124 + loc 3.1221926212310791e-01 8.1723439693450928e-01 396 + blend 0.0000000000000000e+00 + interp 4.4990597426330087e-01:3.4310463601341901e-01:4.9233524181768629e-02:3.3281368302591574e-01:9.4540573985918519e-01:3.7033093699651909e-01:1.5805413125275631e+00:4.0277925389821712e-01:1.9998031965923251e+00:4.4990147520355828e-01:2.3015641966281248e+00:4.2497636336104255e-01:2.9686749072700458e+00:3.5967665571020269e-01:3.5599960953425094e+00 + CVs 20 + 9.3363542103027319e-01 2.5513190208452119e-01 -2.7681148264165856e-01 + 1.6132925584995239e+00 3.4708840824092491e-01 -4.9535177889817683e-01 + 2.2312398236227144e+00 3.8131421199658966e-01 -6.8633001790081338e-01 + 2.8686574600987824e+00 3.9836223450629765e-01 -8.6269301028618284e-01 + 3.5022695491610296e+00 3.8708754037729942e-01 -1.0238686822509242e+00 + 4.1095771233161331e+00 3.4127022947615948e-01 -1.1763974075948607e+00 + 4.6732843294180437e+00 2.5902143526153909e-01 -1.3293822053803606e+00 + 5.1839099248947873e+00 1.4072162777986752e-01 -1.4887675739330348e+00 + 5.6404692376279950e+00 -1.1078824758085748e-02 -1.6570487360157307e+00 + 6.0476171585694241e+00 -1.9162152992977521e-01 -1.8341772569245178e+00 + 6.4110055548012417e+00 -3.9421243149375673e-01 -2.0171519725564977e+00 + 6.7352936851946401e+00 -6.1201077992662833e-01 -2.2030530313760011e+00 + 7.0250210895955476e+00 -8.3900919243599792e-01 -2.3900472253502096e+00 + 7.2971407968712017e+00 -1.0737865092135237e+00 -2.5802033456954852e+00 + 7.5741859268786556e+00 -1.3231186956974539e+00 -2.7807389930686721e+00 + 7.8639363439052685e+00 -1.6020364849396218e+00 -3.0056470629266259e+00 + 8.1619879210881479e+00 -1.9304105755992742e+00 -3.2654558594997405e+00 + 8.4500012851450350e+00 -2.3200078766840360e+00 -3.5433148374176353e+00 + 8.5962717877261952e+00 -2.6451497933820969e+00 -3.7423991953826512e+00 + id 13125 + loc 6.5644276142120361e-01 7.9385781288146973e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9258400147983505e-01:4.9257907563982029e-01:3.7033291490606857e-04:3.2018518356219883e-01:3.6653361508319182e-01:3.3441926060032706e-01:1.2456852724126393e+00:3.2088768841131532e-01:2.0860123171872487e+00:3.0663706064040608e-01:3.0877755043865558e+00 + CVs 20 + -9.9731809053076201e-02 1.1760321613827494e-01 1.4722288104945586e-01 + -1.4435541770012938e-01 1.8552663797237756e-01 2.3408032314582300e-01 + -1.6301509124118713e-01 2.3020618966533263e-01 2.9241768730103890e-01 + -1.7828322778612607e-01 2.7153286967968099e-01 3.6196628015447663e-01 + -1.9106402156219368e-01 3.1152510816733225e-01 4.4405474268198647e-01 + -2.0352408535441663e-01 3.5188815058679057e-01 5.3992770903588583e-01 + -2.1930937129596501e-01 3.9362874817749488e-01 6.5088441565675825e-01 + -2.4236983395143427e-01 4.3683275082553191e-01 7.7745162020370040e-01 + -2.7567689938238321e-01 4.8052418865376778e-01 9.1878141038757466e-01 + -3.1988237878035353e-01 5.2254407223249277e-01 1.0721771515534890e+00 + -3.7278140680991301e-01 5.6066460417680319e-01 1.2337288293628230e+00 + -4.3009979518666225e-01 5.9375491737011776e-01 1.3990599565829827e+00 + -4.8754019191179543e-01 6.2255195501282357e-01 1.5640362092252813e+00 + -5.4444900312381828e-01 6.4999786484143485e-01 1.7263521508764894e+00 + -6.0576765286156764e-01 6.7977932525706786e-01 1.8859213905275345e+00 + -6.7756303751617564e-01 7.1369164834416243e-01 2.0411899433570397e+00 + -7.5980102886797007e-01 7.5287028689027846e-01 2.1856261068263625e+00 + -8.4835272449729460e-01 7.9776520030263731e-01 2.3116248803112853e+00 + -1.0028042902878411e+00 8.0508237580446962e-01 2.4719986933565443e+00 + id 13126 + loc 9.5946863293647766e-02 4.6127253770828247e-01 411 + blend 0.0000000000000000e+00 + interp 3.9293739504361375e-01:3.1406867518098441e-01:3.1699853161843050e-01:2.4773358331345766e-01:1.0765386415737868e+00:2.7672201531073948e-01:2.1472425715442487e+00:2.4765254669650696e-01:3.1898900993223700e+00:3.9293346566966331e-01:3.9504392257650300e+00 + CVs 20 + -2.3984340907785676e-01 2.9905947533862098e-01 -7.5802931935345608e-01 + -4.5534636954781582e-01 4.9169344354152206e-01 -1.2719162234648378e+00 + -6.6122171350086667e-01 6.5862714504569853e-01 -1.7534485484749944e+00 + -8.4685802046559955e-01 8.2462600341450232e-01 -2.2798514590409589e+00 + -1.0016344672515227e+00 9.6484844329393793e-01 -2.8435385260556827e+00 + -1.1352926376468329e+00 1.0546352656245199e+00 -3.4406892160898126e+00 + -1.2803630612672114e+00 1.0720901236199627e+00 -4.0687888202666151e+00 + -1.4775800169423283e+00 9.9844656787141484e-01 -4.7159433867952858e+00 + -1.7492652922975682e+00 8.2410342195864916e-01 -5.3596674055945090e+00 + -2.0948662457839604e+00 5.4293650755577350e-01 -5.9756199072004232e+00 + -2.4747414214932255e+00 1.3571592851136360e-01 -6.5207480995215787e+00 + -2.7988284201089266e+00 -4.0817299205877111e-01 -6.9357245869501742e+00 + -3.0217667620706825e+00 -1.0701981755867767e+00 -7.1900867028428319e+00 + -3.1965145347484936e+00 -1.8280686083589344e+00 -7.2881725036793616e+00 + -3.4205766068866792e+00 -2.6543066043939998e+00 -7.2587345148673608e+00 + -3.7727499535998499e+00 -3.5065269856192862e+00 -7.1550787658098773e+00 + -4.2418204638911963e+00 -4.3624797104407138e+00 -7.0378083599345906e+00 + -4.7695035739270546e+00 -5.2298176924636053e+00 -6.9178933208806868e+00 + -5.3231299319334049e+00 -6.1149336704413635e+00 -6.7804312122985451e+00 + id 13127 + loc 4.2879763245582581e-01 7.4196189641952515e-01 373 + blend 0.0000000000000000e+00 + interp 4.1011665055671120e-01:3.5906238092085224e-01:6.0210978249280189e-01:3.9249911769522211e-01:1.2513066637423478e+00:3.3270646000777543e-01:2.0037039274303874e+00:3.6922611439149472e-01:2.8396257404484171e+00:2.7805278692801483e-01:3.1816190525087644e+00:4.1011254939020564e-01:3.8333632105273705e+00 + CVs 20 + -3.5695176873815093e-01 5.6540530217887186e-01 -2.5784392462235667e-01 + -6.1971942987645412e-01 1.1192711253793082e+00 -4.9750105066883199e-01 + -7.9506148918983222e-01 1.6663869052889007e+00 -7.3963303359324173e-01 + -8.9909969814991630e-01 2.2091877801855078e+00 -1.0022310065995725e+00 + -9.6219457764323080e-01 2.7398653772587909e+00 -1.3088609926445938e+00 + -1.0276293626318680e+00 3.2408009652644347e+00 -1.6867352917760730e+00 + -1.1340263623352547e+00 3.6830334591483043e+00 -2.1440602576775634e+00 + -1.3077160229228357e+00 4.0377749730530690e+00 -2.6588817045847923e+00 + -1.5556664510759379e+00 4.2892084595083784e+00 -3.1802994267894316e+00 + -1.8610304818985117e+00 4.4416398678383002e+00 -3.6503349792509310e+00 + -2.1981075517291111e+00 4.5072039026321171e+00 -4.0452676134325607e+00 + -2.5648039528380813e+00 4.4868959416751490e+00 -4.3804129830387852e+00 + -2.9654692972796068e+00 4.3715140634991396e+00 -4.6768042570285377e+00 + -3.3812495327282681e+00 4.1501836203081917e+00 -4.9358623585018089e+00 + -3.7951546169029902e+00 3.8166679594403545e+00 -5.1609175857231229e+00 + -4.2264919074836182e+00 3.3750963732191512e+00 -5.3767353380487108e+00 + -4.7151136822706263e+00 2.8467025095065943e+00 -5.6106828185773390e+00 + -5.2704500737145938e+00 2.2160180193655363e+00 -5.8141110165010099e+00 + -5.6255814785581038e+00 1.5535974303649898e+00 -5.7827712496975643e+00 + id 13128 + loc 3.9728409051895142e-01 2.1212497726082802e-02 1068 + blend 0.0000000000000000e+00 + interp 3.4646335234134629e-01:2.5649353401462899e-01:1.8809153895310993e-01:2.2735792429582219e-01:1.2713458836831282e+00:3.4645988770782288e-01:2.3914891042970119e+00:3.3731830351742637e-01:2.9937125726544016e+00:3.2527721803655690e-01:3.4238461082263489e+00 + CVs 20 + -2.4113889218767573e-01 2.0186665662470124e-01 -1.2924543644793654e-01 + -4.6478389408664467e-01 4.0300848007207313e-01 -2.3785410282937428e-01 + -6.6799343298570502e-01 5.9843973670798178e-01 -3.4404317609476942e-01 + -8.3873005045962223e-01 7.8023734258022182e-01 -4.5158379211027933e-01 + -9.6207690171039928e-01 9.5187316862171634e-01 -5.5715283114397673e-01 + -1.0286039844137749e+00 1.1276719615667090e+00 -6.6333643829587818e-01 + -1.0526177282455838e+00 1.3377459054880474e+00 -7.7455559034032995e-01 + -1.0763004189623424e+00 1.6188001139896735e+00 -8.8624358085256438e-01 + -1.1595578191687494e+00 1.9836813482489708e+00 -9.8851482660262024e-01 + -1.3622371502797346e+00 2.3898859569710753e+00 -1.0649519293013510e+00 + -1.7013436734620870e+00 2.7481721428781443e+00 -1.0812657344607199e+00 + -2.1325061677939652e+00 2.9813200473894343e+00 -1.0028388914345165e+00 + -2.5974259678009517e+00 3.0680928341547324e+00 -8.2811998158609157e-01 + -3.0679176895150038e+00 3.0200999089957290e+00 -5.7797465597429853e-01 + -3.5606494188894406e+00 2.8345578811385472e+00 -2.5022908939317878e-01 + -4.1696790997141591e+00 2.4451170873201482e+00 1.8226254078328386e-01 + -5.0105457200174692e+00 1.7443015723261328e+00 5.6999873011244140e-01 + -5.8529156448467612e+00 9.8507358265358635e-01 5.3651569929391618e-01 + -6.0712152377217947e+00 8.5256696613576777e-01 2.7916261652132274e-01 + id 13129 + loc 7.7946908771991730e-02 5.5808448791503906e-01 395 + blend 0.0000000000000000e+00 + interp 5.1569317378146906e-01:5.1568801684973131e-01:3.0853136308143725e-01:3.5287181911082732e-01:9.4530674106757839e-01:3.5100599830421303e-01:1.4915069663777225e+00:2.8682270620288097e-01:2.1759364757554907e+00:2.9698179528401175e-01:3.0089756918539692e+00:3.0837118847725620e-01:3.7494475654330102e+00 + CVs 20 + 3.4562286045003332e-01 1.8756842996404929e-01 -2.0253079110565619e-01 + 6.5396748943844274e-01 3.3496111451477351e-01 -4.0760595498186480e-01 + 9.5905481077702492e-01 4.7074280547052516e-01 -6.2014393385945743e-01 + 1.2777414672375256e+00 6.0800528382262908e-01 -8.4086143054387419e-01 + 1.6090621062597923e+00 7.4362628752691595e-01 -1.0655364810072454e+00 + 1.9526388557344128e+00 8.7481819806283967e-01 -1.2929835714378410e+00 + 2.3106827412121702e+00 9.9814885336422265e-01 -1.5247639233789192e+00 + 2.6893726379440643e+00 1.1048524248742375e+00 -1.7630689520725451e+00 + 3.0919343297971911e+00 1.1781908139596458e+00 -2.0096642819887460e+00 + 3.5093146354788800e+00 1.1959926300148740e+00 -2.2687103144974232e+00 + 3.9220535517972701e+00 1.1379404461084652e+00 -2.5457914035358424e+00 + 4.3145117070601593e+00 9.9678233759814283e-01 -2.8346416562770043e+00 + 4.6788411862362738e+00 7.7956922646231464e-01 -3.1193902274996250e+00 + 5.0092966175318647e+00 5.0212679191935905e-01 -3.3846931202535124e+00 + 5.3027797537130921e+00 1.7981493110577951e-01 -3.6203536016487723e+00 + 5.5616576673267577e+00 -1.8239209289869418e-01 -3.8185212979041827e+00 + 5.7883834047530689e+00 -5.8149953213861982e-01 -3.9687489851893001e+00 + 5.9834748709424161e+00 -9.8890790320516864e-01 -4.0599714229670258e+00 + 6.1662229233728869e+00 -1.2524638264483889e+00 -4.0786665114373992e+00 + id 13130 + loc 5.7992017269134521e-01 1.5603269636631012e-01 402 + blend 0.0000000000000000e+00 + interp 4.1201174914071947e-01:3.7476312903217357e-01:1.0153145132065589e-01:3.1939769322907108e-01:9.9376325964536871e-01:4.1200762902322807e-01:1.5010686084575466e+00:2.8251716793011222e-01:1.9905018730845740e+00:4.0308855320141979e-01:2.8164421966138331e+00:3.4124455248432883e-01:3.2810714042526445e+00 + CVs 20 + 1.2433598952524313e-01 2.7196038044470577e-01 1.7991126271936980e-01 + 2.2374902731246449e-01 5.4335015883158011e-01 3.7381586351675661e-01 + 3.0400092895735142e-01 8.2154800902901226e-01 5.8573278795333483e-01 + 3.8632692279928410e-01 1.1184040344481678e+00 8.2471876002387789e-01 + 5.1177366960456239e-01 1.4221117479064083e+00 1.0832625876724602e+00 + 7.1030511315022749e-01 1.6966909795063281e+00 1.3312303329458248e+00 + 9.7952372196822135e-01 1.9071091631650607e+00 1.5331962761297397e+00 + 1.3008070921170294e+00 2.0346437275673517e+00 1.6664293573457802e+00 + 1.6618672649744841e+00 2.0830196612829095e+00 1.7411484847963763e+00 + 2.0513626287740951e+00 2.0613433060962190e+00 1.7911101352195258e+00 + 2.4160276669180414e+00 1.9261346268372470e+00 1.8552118632175123e+00 + 2.6470091693752980e+00 1.5997029340655811e+00 1.9459519042700970e+00 + 2.7326283278294849e+00 1.0775237425071138e+00 2.0534673097601952e+00 + 2.8070279587797975e+00 4.1054877042894999e-01 2.1843757471252156e+00 + 3.0257367389272387e+00 -3.0373436219144428e-01 2.3379816297677021e+00 + 3.4410207169102534e+00 -9.3175366421907102e-01 2.4947153217595481e+00 + 3.9837247384230587e+00 -1.4076364463977595e+00 2.6620615037527777e+00 + 4.5470042678785827e+00 -1.7519704599553869e+00 2.8798019962644812e+00 + 4.9989635644428798e+00 -1.9874067865782123e+00 3.1562527912463931e+00 + id 13131 + loc 9.1538375616073608e-01 1.1468474566936493e-01 400 + blend 0.0000000000000000e+00 + interp 5.6689842936504453e-01:5.6689276038075087e-01:7.7989393301043397e-01:5.1089757382534651e-01:1.0004541880528390e+00:2.4644738777756142e-01:1.7936248617134871e+00:3.6095374884941694e-01:2.1143507048554695e+00:4.7609115756603926e-01:2.8148705885337639e+00:4.2297279190950110e-01:3.1013428490335793e+00:2.5677006664067265e-01:3.9760496290040157e+00 + CVs 20 + 1.4977332470496560e-01 8.3170256574917889e-02 1.7798311543485099e-01 + 3.0495964968152955e-01 1.7097806431717452e-01 3.7844000251206944e-01 + 4.5859999953063824e-01 2.4916941610332388e-01 5.8678146514070351e-01 + 6.0684399984925363e-01 3.1051655555572621e-01 7.9460619234029894e-01 + 7.4838098440033274e-01 3.5461347848564440e-01 1.0003338725906352e+00 + 8.8200627749369154e-01 3.8187069346723668e-01 1.2018493656503124e+00 + 1.0045246380508159e+00 3.9385911396027895e-01 1.3927662489825057e+00 + 1.1103753826708833e+00 3.9307913262998273e-01 1.5609076655101872e+00 + 1.1920095562000377e+00 3.8394144109846939e-01 1.6968664263023285e+00 + 1.2406084119780401e+00 3.7491125638790090e-01 1.7972407080754049e+00 + 1.2538219843712586e+00 3.7818712906744856e-01 1.8633319267117319e+00 + 1.2459664582792567e+00 3.9742180729566301e-01 1.9106316037488631e+00 + 1.2395085256334388e+00 4.1814435025092123e-01 1.9618063670244195e+00 + 1.2469340096293473e+00 4.2498704508024610e-01 2.0278420055457884e+00 + 1.2716326497630988e+00 4.1647075881743212e-01 2.1098561444935653e+00 + 1.3197639478162786e+00 4.0284078436145587e-01 2.2027495320384416e+00 + 1.4003794663585680e+00 3.9092947682737678e-01 2.3036052089417476e+00 + 1.5148898557144024e+00 3.5787176638891616e-01 2.4164421507882810e+00 + 1.6451528612234148e+00 1.6527285982863171e-01 2.5279228591062566e+00 + id 13132 + loc 8.2092940807342529e-01 4.7331866621971130e-01 409 + blend 0.0000000000000000e+00 + interp 3.7483115805762440e-01:3.0452743084676470e-01:4.9656757868320078e-01:3.2003373285099035e-01:1.0847932770709150e+00:3.2739653748550274e-01:1.9104756101808094e+00:3.5411908453944541e-01:2.3496401917628473e+00:3.3120179059179339e-01:3.0002338896121499e+00:3.7482740974604384e-01:3.8090061879618000e+00 + CVs 20 + -3.4653766276065651e-01 1.4252433752459459e-01 1.7183875641069343e-01 + -6.6939998600885775e-01 2.3976742614926244e-01 3.4981408134430819e-01 + -9.9693490502952609e-01 3.0834797218523063e-01 5.2671061705846745e-01 + -1.3403319819762192e+00 3.5344055066931290e-01 6.9955678286158240e-01 + -1.6946916723509027e+00 3.7237830038856767e-01 8.6658508984818816e-01 + -2.0540752204409358e+00 3.6417116560192009e-01 1.0259576606413954e+00 + -2.4116659042172399e+00 3.2756337364570998e-01 1.1746684125977214e+00 + -2.7577110414612180e+00 2.5754492460815914e-01 1.3076826307058700e+00 + -3.0790021277234887e+00 1.4712715449378799e-01 1.4206511318233379e+00 + -3.3571955212716471e+00 -7.6254250896907738e-03 1.5132021648302070e+00 + -3.5717174981415600e+00 -2.0373190312438849e-01 1.5868599677320541e+00 + -3.7178543024379183e+00 -4.3160296197430514e-01 1.6415594432065990e+00 + -3.8127657918085438e+00 -6.8193531240769811e-01 1.6778276623677690e+00 + -3.8744787977564465e+00 -9.4794533648039647e-01 1.6989524996020828e+00 + -3.9106999038435371e+00 -1.2232043412014428e+00 1.7074178550644241e+00 + -3.9222876645015576e+00 -1.4985063928756592e+00 1.6999146899153375e+00 + -3.9118587711975867e+00 -1.7640311515492209e+00 1.6683886354450375e+00 + -3.8942398286485922e+00 -2.0209657083589421e+00 1.6168108160315280e+00 + -3.9991806825077916e+00 -2.3935502820168830e+00 1.6256705078630072e+00 + id 13133 + loc 7.2747749090194702e-01 1.1592964082956314e-01 374 + blend 0.0000000000000000e+00 + interp 4.4922523086102883e-01:3.9323575148926071e-01:7.1373580816833315e-02:4.4922073860872025e-01:6.9749600513824095e-01:2.9449497796894247e-01:1.3245213506388915e+00:3.3801008109616715e-01:2.1744306130845716e+00:3.9181769893692264e-01:2.8708539047407653e+00:4.1635743217260712e-01:3.1944984810689077e+00:2.6760438883579918e-01:3.7882530336564391e+00 + CVs 20 + 8.4964677521300236e-01 4.2337460803246973e-01 3.6504888679270348e-01 + 1.4899317823925136e+00 7.0419730790300761e-01 5.5935767377248891e-01 + 2.1181490962567828e+00 9.1197553321720515e-01 6.5124246069789027e-01 + 2.7984324282673021e+00 1.1035134336391788e+00 6.8571577977313825e-01 + 3.5198257118083927e+00 1.3016559060680406e+00 6.9964253972634505e-01 + 4.2872215262902813e+00 1.4909580222914247e+00 7.3881895769524863e-01 + 5.1068996066234860e+00 1.6104318217878668e+00 8.4793306563536319e-01 + 5.9469364328964369e+00 1.5865274433807646e+00 1.0591818849595438e+00 + 6.7379558699270108e+00 1.3734219156081415e+00 1.3741857323819613e+00 + 7.4066389802633754e+00 9.6839525540294624e-01 1.7597693186646721e+00 + 7.9041117023256007e+00 4.0599376069385595e-01 2.1604966437796067e+00 + 8.2163424368560420e+00 -2.5407223743625718e-01 2.5206189845317848e+00 + 8.3635550221170973e+00 -9.4165402925002217e-01 2.8073181064147184e+00 + 8.3956869757101042e+00 -1.6053461009833065e+00 3.0267128794707823e+00 + 8.3637220566626063e+00 -2.2106518147827572e+00 3.2016772954071802e+00 + 8.2970069222162763e+00 -2.7424058609691744e+00 3.3336398722100151e+00 + 8.2260090372877546e+00 -3.2082566184516850e+00 3.4140663759905561e+00 + 8.1767025432709666e+00 -3.6108130198505872e+00 3.4444253841550800e+00 + 8.1960312897805281e+00 -3.9084932027966710e+00 3.3833271022139018e+00 + id 13134 + loc 1.3854059576988220e-01 2.9304137825965881e-01 393 + blend 0.0000000000000000e+00 + interp 4.4119616471259049e-01:3.9724414355062182e-01:5.8781779920125421e-01:3.6583444723410019e-01:1.1954699525707562e+00:2.4133538977944191e-01:1.9253241092881166e+00:2.7877180095563220e-01:2.4556219263855317e+00:3.8154778830547775e-01:2.9999949250199709e+00:4.4119175275094336e-01:3.3951355341218861e+00:3.3165477893750006e-01:3.9980764921876455e+00 + CVs 20 + -1.9008334242371897e-01 2.4592302709472630e-01 3.1305103846217297e-01 + -3.4945223260044689e-01 4.9594278045083418e-01 6.0377158314341139e-01 + -4.9159126007997489e-01 7.5148983144325521e-01 8.7170960141827414e-01 + -6.2810824898637863e-01 1.0126587265651303e+00 1.1191354044236541e+00 + -7.7123454776006162e-01 1.2786491086052205e+00 1.3510034229325503e+00 + -9.3529905905345445e-01 1.5469307442596694e+00 1.5757431749868496e+00 + -1.1298710897658177e+00 1.8129355989704774e+00 1.8083289760545207e+00 + -1.3682122182663241e+00 2.0653028750387623e+00 2.0715885198380888e+00 + -1.6670798622429519e+00 2.2795119327465923e+00 2.3874061538630933e+00 + -2.0312891519418410e+00 2.4257633423556944e+00 2.7661207443107179e+00 + -2.4443171605392178e+00 2.4862927809801061e+00 3.2044729774896443e+00 + -2.8752166092658182e+00 2.4691698629494896e+00 3.6890696803365133e+00 + -3.2968008531927140e+00 2.4058234953275459e+00 4.2059102989166854e+00 + -3.6840856627388261e+00 2.3215252750071453e+00 4.7440758232778713e+00 + -3.9902996832925495e+00 2.2327869740107689e+00 5.2794596032568455e+00 + -4.1636171946938489e+00 2.1909799554024110e+00 5.7444703136517212e+00 + -4.2227108384094203e+00 2.2424651077229081e+00 6.0643491790993114e+00 + -4.2261639429081406e+00 2.3300949327279090e+00 6.3006889711893894e+00 + -4.1230205883904354e+00 2.3404572988666597e+00 6.7368375582481335e+00 + id 13135 + loc 1.1825443059206009e-01 2.9098281264305115e-01 1068 + blend 0.0000000000000000e+00 + interp 3.5273487677264093e-01:3.2774086458701951e-01:1.5758558949906387e-01:3.2391161057718354e-01:8.9748944605577707e-01:3.3613885588997255e-01:1.8260617765626643e+00:3.1796177176272650e-01:2.1221727835909521e+00:2.9784067178685841e-01:2.8763860528553091e+00:3.5273134942387324e-01:3.8485284060400375e+00 + CVs 20 + -2.2166825524336048e-01 3.0423480262676184e-01 -2.5066185141426089e-01 + -4.1825076117143833e-01 6.0097154694750632e-01 -5.1402601175312035e-01 + -6.2158455025489112e-01 8.9758162797321972e-01 -7.8830152602264336e-01 + -8.5243830272033250e-01 1.1970459450805973e+00 -1.0672153533526825e+00 + -1.1260689342212378e+00 1.4969251326647193e+00 -1.3406725472822409e+00 + -1.4565881988134139e+00 1.7885360610473535e+00 -1.5956357935193515e+00 + -1.8521844117385655e+00 2.0565407265195805e+00 -1.8173172568197855e+00 + -2.3119296906765929e+00 2.2808296226526470e+00 -1.9918233249980528e+00 + -2.8248686110970826e+00 2.4397964904254317e+00 -2.1081539321684519e+00 + -3.3691102665428705e+00 2.5141253721965651e+00 -2.1606829812244350e+00 + -3.9126159644716338e+00 2.4921366675785848e+00 -2.1530374442421802e+00 + -4.4205984316572451e+00 2.3777291330456989e+00 -2.0998356436502581e+00 + -4.8715428128028080e+00 2.1881907872270072e+00 -2.0210455843855737e+00 + -5.2611260009851302e+00 1.9407294479888766e+00 -1.9341455922192519e+00 + -5.5920650214895291e+00 1.6461589212603611e+00 -1.8526785360370404e+00 + -5.8668401614040846e+00 1.3076293551271032e+00 -1.7866429788416167e+00 + -6.0812788852191808e+00 9.3065502754331397e-01 -1.7415345717850834e+00 + -6.2298221540967873e+00 5.4448284130001379e-01 -1.7152423232169665e+00 + -6.3221820998978195e+00 2.8121974243943881e-01 -1.6767715412145983e+00 + id 13136 + loc 6.1922818422317505e-01 3.2988169789314270e-01 382 + blend 0.0000000000000000e+00 + interp 4.7910045111622113e-01:4.3786121496121699e-01:4.6341237141872349e-01:4.7552358457234029e-01:1.0000717477191321e+00:3.2958463423905160e-01:1.5798357883934524e+00:4.7909566011171001e-01:2.0000462535108512e+00:3.6962082613792413e-01:2.6499684179758023e+00:3.5261521685339459e-01:3.0623217164208443e+00:3.1133855771987518e-01:3.8887128866951528e+00 + CVs 20 + -9.7032967024947114e-01 2.3850463865117755e-01 4.8983516390290543e-01 + -1.6844078583245614e+00 2.9025776790093644e-01 8.6878047762316390e-01 + -2.3315117369209490e+00 2.4653096815789183e-01 1.2040624181467827e+00 + -2.9916877235409931e+00 1.3187343203693969e-01 1.5312727583352119e+00 + -3.6436407536795627e+00 -4.9235260490504640e-02 1.8458902051921948e+00 + -4.2592090415742954e+00 -2.8824576404801472e-01 2.1429569338539345e+00 + -4.8050723411553049e+00 -5.7239246320449189e-01 2.4143774081856644e+00 + -5.2551508803503904e+00 -8.8258015809878265e-01 2.6577730043745826e+00 + -5.6090405152977709e+00 -1.1967080163156383e+00 2.8807419898314457e+00 + -5.8937851002557062e+00 -1.4984709967672010e+00 3.0813687788423398e+00 + -6.1315974703311404e+00 -1.7877565820857926e+00 3.2466602635222856e+00 + -6.3453598016189199e+00 -2.0536758357541096e+00 3.3841654089871946e+00 + -6.5686501903815842e+00 -2.3113377617639910e+00 3.5173823683605203e+00 + -6.8242445021768070e+00 -2.6170859796741865e+00 3.6651748398594566e+00 + -7.1046566242244689e+00 -3.0044067257189635e+00 3.8353634299967494e+00 + -7.3922515904122594e+00 -3.4350145050373246e+00 4.0279592851240880e+00 + -7.6733360345165229e+00 -3.8416111410311458e+00 4.2350057875808265e+00 + -7.9345320139098678e+00 -4.1851372181969584e+00 4.4504878951761597e+00 + -8.1679727066276548e+00 -4.4863061429013333e+00 4.7273354994419146e+00 + id 13137 + loc 6.8884050846099854e-01 8.5299289226531982e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9855655580864316e-01:2.9084900655730295e-01:2.0199147465103073e-01:3.1787332795452788e-01:1.0486784064270840e+00:4.5397790984915443e-01:1.9108680218615430e+00:3.2007147208860626e-01:2.4451734197601027e+00:4.9855157024308511e-01:2.9991423813496194e+00:3.2092826284315534e-01:3.7522721792973006e+00 + CVs 20 + 1.4092221595032983e-01 2.7997840396908547e-01 -8.0328554142838252e-02 + 3.0873820003856156e-01 5.5645667396727461e-01 -1.7805329012391305e-01 + 4.9399134429344849e-01 8.2559838588689227e-01 -2.9855874870917043e-01 + 6.8964898658961116e-01 1.0827142543794368e+00 -4.4841515658330405e-01 + 8.9036023985378032e-01 1.3204790334982000e+00 -6.3555619807174035e-01 + 1.0864888454723856e+00 1.5294710025551290e+00 -8.6697509842348286e-01 + 1.2637999612814981e+00 1.6979053492147824e+00 -1.1476198246263341e+00 + 1.4038388143990448e+00 1.8112431774849247e+00 -1.4775329540644133e+00 + 1.4867077670354303e+00 1.8530512416593861e+00 -1.8464779792123587e+00 + 1.5000369526212980e+00 1.8128575287940225e+00 -2.2307140825034697e+00 + 1.4477150541721200e+00 1.6938854763614068e+00 -2.6002175446380580e+00 + 1.3576634117361348e+00 1.5147030805905994e+00 -2.9301095905868579e+00 + 1.2719646809932237e+00 1.3053836768141829e+00 -3.2171096615870773e+00 + 1.2098740896403333e+00 1.0884606902548288e+00 -3.4752772310176336e+00 + 1.1646830454828425e+00 8.7172826024763395e-01 -3.7162093974549180e+00 + 1.1353939803333029e+00 6.6493408062435555e-01 -3.9442569835347454e+00 + 1.1464365451523733e+00 5.1449800396884293e-01 -4.1675712216063925e+00 + 1.2249028573610401e+00 4.9326414719952072e-01 -4.3810450723796777e+00 + 1.2180986220511929e+00 3.8809852261872324e-01 -4.6205314425504325e+00 + id 13138 + loc 6.8682938814163208e-01 2.2269469499588013e-01 373 + blend 0.0000000000000000e+00 + interp 3.8406721764466312e-01:3.0604692937625561e-01:4.3029923470716547e-04:2.4924387522408653e-01:7.6715588872055984e-01:2.9638499796285561e-01:1.0878313148998111e+00:2.6980415008348230e-01:1.9893829050716958e+00:2.6760479361175099e-01:2.4476501905306618e+00:3.8406337697248671e-01:2.9919835529547250e+00:2.7061128262880507e-01:3.4639073079336868e+00 + CVs 20 + 3.2824762514934003e-01 4.1664816924060105e-01 8.8950057667660926e-03 + 6.7658950609209723e-01 7.7490158266372389e-01 2.4437755726932769e-02 + 1.0272291383072287e+00 1.0414916030697439e+00 3.7315504476289174e-02 + 1.3344507561814005e+00 1.2422503994009142e+00 2.0124270053588522e-02 + 1.5930773324648917e+00 1.4195401357230184e+00 -4.8894405100336102e-02 + 1.8649429432275506e+00 1.6263874986978164e+00 -1.4377047388782849e-01 + 2.1698000314671289e+00 1.8998981081082755e+00 -2.2442274215981628e-01 + 2.4778585408623424e+00 2.2547787886325206e+00 -2.5872015631286194e-01 + 2.7488101852404165e+00 2.6841539362795541e+00 -2.3085757893809611e-01 + 2.9632940746863090e+00 3.1658767416297762e+00 -1.2909992288634475e-01 + 3.1280149118508804e+00 3.6776781984821829e+00 7.4474602926040245e-02 + 3.2548249601967676e+00 4.1879830262678333e+00 4.3627215935589070e-01 + 3.3307680693619779e+00 4.6153481573832060e+00 1.0013089138783886e+00 + 3.3176330651706145e+00 4.8419504764016574e+00 1.7381376463406812e+00 + 3.1853132980666947e+00 4.7752762474942454e+00 2.5452650100562280e+00 + 2.9553546256682726e+00 4.3813154670933150e+00 3.2728371454879204e+00 + 2.7672043011670429e+00 3.7231892585955970e+00 3.7896375193144083e+00 + 2.7173273765775363e+00 3.0735672758803818e+00 4.0126698403268888e+00 + 2.6821000025772568e+00 2.6955422407261920e+00 3.9682215424452556e+00 + id 13139 + loc 2.9884633421897888e-01 8.1135444343090057e-02 415 + blend 0.0000000000000000e+00 + interp 4.3850960260366006e-01:3.5287373387282039e-01:1.6774017068054070e-01:2.5630324067669930e-01:8.7498007529922472e-01:3.1404462923225535e-01:1.2597600986909294e+00:3.7843618300658033e-01:1.8833832478896144e+00:3.2842150614972249e-01:2.6149220878526251e+00:4.3850521750763405e-01:3.3852760142299392e+00 + CVs 20 + -6.0491360654975131e-02 8.1482071460884722e-02 -6.8380888881093366e-02 + -1.2296562435932840e-01 1.6000204181305872e-01 -1.1436278686544077e-01 + -1.8908377042783017e-01 2.5145957257397172e-01 -1.5267029005739069e-01 + -2.5713197081121186e-01 3.5657444824849038e-01 -2.0474900399726764e-01 + -3.2151209142931109e-01 4.7693048346134903e-01 -2.7286670086722692e-01 + -3.7440900170747893e-01 6.1396132523582581e-01 -3.5875293857700064e-01 + -4.0567478522734579e-01 7.6773485119325580e-01 -4.6335361606237613e-01 + -4.0419474599732036e-01 9.3530469336299182e-01 -5.8439399410785997e-01 + -3.6156547108175574e-01 1.1106126377452092e+00 -7.1468350780287060e-01 + -2.7503469297110517e-01 1.2865940559519782e+00 -8.4379133441486320e-01 + -1.4475867570923662e-01 1.4563793537501721e+00 -9.6561621497517769e-01 + 2.6918242381399948e-02 1.6104806198908210e+00 -1.0830968275888806e+00 + 2.3132987338463862e-01 1.7392413416295622e+00 -1.2028591203669678e+00 + 4.5447253002794019e-01 1.8398755132519835e+00 -1.3276706456509808e+00 + 6.8242559390624136e-01 1.9176050956576396e+00 -1.4559937533436871e+00 + 9.0409659539067688e-01 1.9765926396273699e+00 -1.5922276940315225e+00 + 1.1127938854062405e+00 2.0161163108356952e+00 -1.7445000849817602e+00 + 1.3114112660838684e+00 2.0331627101520331e+00 -1.9126393403133479e+00 + 1.4789210081424078e+00 2.0994776919979974e+00 -2.0345273373456525e+00 + id 13140 + loc 5.5385631322860718e-01 6.3064962625503540e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9822012990085196e-01:4.9821514769955300e-01:2.1490268125395307e-01:3.2424587895980178e-01:9.3584973558214701e-01:3.1925111308741966e-01:1.7136433628425891e+00:3.2595542061124733e-01:2.3083670260351603e+00:3.6726157145488897e-01:2.9915904958550121e+00:3.0114085100106691e-01:3.5725137717238100e+00:4.8706568400325084e-01:3.9947777369816260e+00 + CVs 20 + -5.1831872478857732e-02 3.3467178868609854e-01 2.7079369075731152e-01 + -7.0783715758168386e-02 5.9901448905492827e-01 4.0193643262903317e-01 + -9.0905206990889262e-02 8.4031912829455435e-01 4.9733131336841940e-01 + -1.2854841036940196e-01 1.0858024360106662e+00 6.0195801007529326e-01 + -1.8589503447760219e-01 1.3279677430001884e+00 7.0892479974974631e-01 + -2.6601414926973194e-01 1.5590032717882887e+00 8.1094394282956528e-01 + -3.7212601648620158e-01 1.7711805398879577e+00 9.0151382929581481e-01 + -5.0656431349661113e-01 1.9570182708647437e+00 9.7672064219234656e-01 + -6.7020072390191388e-01 2.1088718387256189e+00 1.0339368075193760e+00 + -8.6211384823428927e-01 2.2175789991541826e+00 1.0683432062212779e+00 + -1.0766996891862795e+00 2.2714629540904845e+00 1.0711045799629748e+00 + -1.2970907565806105e+00 2.2619304676083871e+00 1.0324312688507520e+00 + -1.4977736133656461e+00 2.1951006097350931e+00 9.5126694141473900e-01 + -1.6629037174695520e+00 2.0946723461855359e+00 8.4050221151645177e-01 + -1.8001736388160341e+00 1.9854957362712451e+00 7.1814710985412777e-01 + -1.9264031218341455e+00 1.8752794515872302e+00 5.9194846425359016e-01 + -2.0461083730455516e+00 1.7620260113989827e+00 4.5817733030137642e-01 + -2.1494865086582116e+00 1.6528592203820858e+00 3.0989249439243716e-01 + -2.2906025998467139e+00 1.5415565626089007e+00 1.8148323316813342e-01 + id 13141 + loc 5.1364910602569580e-01 9.1754728555679321e-01 401 + blend 0.0000000000000000e+00 + interp 4.0442166882268848e-01:3.8864900146074760e-01:1.3327278627630479e-01:3.8503267523745016e-01:8.6288258093206061e-01:3.7146676079874008e-01:1.2674502103743892e+00:4.0441762460600028e-01:1.7777580816357743e+00:3.0305971268945658e-01:2.3149394528795346e+00:3.6961207500518312e-01:3.2293199052191328e+00 + CVs 20 + 4.9100913663074758e-02 3.2905179234293086e-01 -3.5133635645389300e-01 + 1.0033267739980065e-01 6.6136341657488473e-01 -7.0255323973814887e-01 + 1.6219749262454547e-01 9.8919121968265489e-01 -1.0530302343514646e+00 + 2.3552367447843248e-01 1.2941673859913461e+00 -1.4129312289843683e+00 + 3.0003952088796315e-01 1.5759304490863462e+00 -1.8061773300732649e+00 + 3.0460506909971213e-01 1.8498904049040505e+00 -2.2550760379161452e+00 + 1.8609151165007076e-01 2.1105315166141887e+00 -2.7477283759432698e+00 + -9.4421774345958220e-02 2.3252500015558621e+00 -3.2383631876049375e+00 + -5.3236783641019603e-01 2.4579314264130638e+00 -3.6690137144914141e+00 + -1.0809916670991213e+00 2.4944172174299428e+00 -3.9947516393709535e+00 + -1.6774941618869512e+00 2.4394147179087238e+00 -4.2082291128766842e+00 + -2.2679960131045211e+00 2.2984387927620098e+00 -4.3409281594346485e+00 + -2.8287765835357561e+00 2.0754990984511696e+00 -4.4304151579650455e+00 + -3.3643024985458769e+00 1.7864118483487506e+00 -4.4765986170515628e+00 + -3.8682187707551066e+00 1.4753583170850579e+00 -4.4797347946485440e+00 + -4.3111611682469988e+00 1.2092203760930060e+00 -4.5316749536026499e+00 + -4.6586674059699611e+00 1.0468009979909301e+00 -4.7541555071046329e+00 + -4.8992751683692530e+00 9.8411295636560714e-01 -5.0858976492339956e+00 + -5.1740591359449732e+00 8.2645075179584226e-01 -5.2599871337742492e+00 + id 13142 + loc 9.0099520981311798e-02 2.1029089391231537e-01 376 + blend 0.0000000000000000e+00 + interp 4.7457875938002647e-01:4.0954407473041338e-01:5.1497834567423739e-01:3.2155999673066199e-01:9.6579274508586610e-01:2.8873172281780191e-01:1.2770993354702465e+00:3.1469062546196508e-01:1.8065151218616962e+00:4.4377284797933270e-01:2.1639040708861672e+00:3.6035815781128777e-01:2.9998793359646734e+00:4.7457401359243268e-01:3.6103405978574137e+00:3.2804143225512244e-01:3.9994061163598356e+00 + CVs 20 + 6.8902560623108000e-01 4.2579982918693587e-01 2.7634209026231521e-01 + 1.2969773993952802e+00 6.8787226535526946e-01 4.1618719999340853e-01 + 1.9141924842492568e+00 7.8822649564716518e-01 4.3290585968239581e-01 + 2.5596466455828786e+00 8.0271089167524412e-01 3.7652245486089020e-01 + 3.2034661584130921e+00 8.1869345247207126e-01 3.1688796964896138e-01 + 3.8240026041146686e+00 8.6881044395701823e-01 3.2043617055200757e-01 + 4.4186246652791166e+00 9.4364119075709429e-01 4.2526086237925775e-01 + 4.9866693675418530e+00 1.0319176171559872e+00 6.4553894862652939e-01 + 5.5197167976983339e+00 1.1222191281477103e+00 9.8057963304211293e-01 + 6.0192646492566224e+00 1.1887878819698312e+00 1.4200774568918022e+00 + 6.4859725927718195e+00 1.1849261486681193e+00 1.9411052001383118e+00 + 6.8966126885533985e+00 1.0532552176469960e+00 2.5015136785602419e+00 + 7.2078495982584423e+00 7.5894078558087452e-01 3.0405612568886102e+00 + 7.3819608011541753e+00 3.2398180715805802e-01 3.4944818830339832e+00 + 7.4139978006016323e+00 -1.9044201249764425e-01 3.8083702307634839e+00 + 7.3794219981111278e+00 -7.2106507277781295e-01 3.9187412985495853e+00 + 7.4120631351581352e+00 -1.1595579090947177e+00 3.7772651744585790e+00 + 7.5244189458986463e+00 -1.3881286353171189e+00 3.4952380537243530e+00 + 7.5816302224889567e+00 -1.7642886568913192e+00 3.2971621208119037e+00 + id 13143 + loc 7.8470814228057861e-01 5.2875880151987076e-02 1081 + blend 0.0000000000000000e+00 + interp 6.2321582489821792e-01:2.5405931201463366e-01:6.3647176095637303e-02:4.2611622659593085e-01:9.6420358576364240e-01:6.2320959273996901e-01:1.2622297536462033e+00:4.9401923307416351e-01:3.6233131141149464e+00 + CVs 20 + 1.4822086115118696e-01 5.2786773339483839e-01 -5.0811607126302327e-01 + 1.9881769286356410e-01 9.3229370653942834e-01 -8.2394464383497534e-01 + 2.1281700889319033e-01 1.2803637769442373e+00 -1.0661957010866265e+00 + 2.1146872415016138e-01 1.6088456486843550e+00 -1.2840737924236383e+00 + 1.9352032828413601e-01 1.9144672587846687e+00 -1.4710583291116932e+00 + 1.6161950146299087e-01 2.1974593644643701e+00 -1.6206927079515636e+00 + 1.2243894667693744e-01 2.4656417077281469e+00 -1.7249057424401322e+00 + 8.6937593473898289e-02 2.7444575460106018e+00 -1.7664238077024363e+00 + 7.6429108948531499e-02 3.0580753485149108e+00 -1.6788507667807611e+00 + 1.0360032710728417e-01 3.2908766040738682e+00 -1.4149643875216193e+00 + 1.3126504936662731e-01 3.3594285505567525e+00 -1.1189485613996786e+00 + 1.3927634674015055e-01 3.3354636411214118e+00 -8.4937673994240370e-01 + 1.2675001531583507e-01 3.2582795395399602e+00 -5.9188043068106588e-01 + 9.4238192719742764e-02 3.1401152327756634e+00 -3.3521192818251677e-01 + 4.3333931551982674e-02 2.9768965743667337e+00 -6.4040622603911190e-02 + -2.2267388092080731e-02 2.7262168427989804e+00 2.5529717467232871e-01 + -1.0004661953083846e-01 2.3116570727846359e+00 6.1038740274948611e-01 + -1.9771591396243432e-01 1.7939242384268592e+00 8.5896401420212631e-01 + -3.4601472679960593e-01 1.5480849777618164e+00 8.8098080958899061e-01 + id 13144 + loc 1.4772421121597290e-01 3.9662271738052368e-02 396 + blend 0.0000000000000000e+00 + interp 5.5251798593709767e-01:4.2778376780673316e-01:4.5423840923263237e-03:3.8910286878005362e-01:4.5044248455717650e-01:5.5251246075723837e-01:9.8735016147365939e-01:4.6559400365527964e-01:1.4410607063324634e+00:4.0741869282627557e-01:1.9944943070016821e+00:3.0534332392592767e-01:2.7329979511386640e+00:2.9271505025479361e-01:3.2205190711802869e+00 + CVs 20 + -2.6854672873617436e-01 2.0834014682709517e-01 -4.7299546133633957e-01 + -5.0746013211215724e-01 3.1858579517217761e-01 -8.2095855582211963e-01 + -7.3331764699150181e-01 3.8510495508563131e-01 -1.1385499758617383e+00 + -9.4391488208397301e-01 4.3521213877577447e-01 -1.4630468430625889e+00 + -1.1271372309342318e+00 4.6549702289552874e-01 -1.7866410389042635e+00 + -1.2749458241417844e+00 4.7691169893204766e-01 -2.1001331877106626e+00 + -1.3871781192162760e+00 4.7601934571971705e-01 -2.3976528314030308e+00 + -1.4681984648224113e+00 4.6980181986217318e-01 -2.6781291205219939e+00 + -1.5195472416222706e+00 4.6394866966687032e-01 -2.9445183466406615e+00 + -1.5382389749100371e+00 4.6165984990894215e-01 -3.2047799836979554e+00 + -1.5342706360178093e+00 4.5902887390439484e-01 -3.4680397574309190e+00 + -1.5398196433642208e+00 4.3848919606977299e-01 -3.7315003798663215e+00 + -1.5803582648611942e+00 3.8091196506144898e-01 -3.9816171319219089e+00 + -1.6529454512383919e+00 2.7844798164385165e-01 -4.2134132767389172e+00 + -1.7475326558935664e+00 1.3315118477503418e-01 -4.4296959932698181e+00 + -1.8710376806262015e+00 -4.2588358185065456e-02 -4.6304354329230524e+00 + -2.0367834519896446e+00 -2.3714809834784090e-01 -4.8107220517751914e+00 + -2.2341055576354543e+00 -4.6121664550342922e-01 -4.9562787620296405e+00 + -2.3914932449764468e+00 -8.4075858388560043e-01 -4.9241956226731247e+00 + id 13145 + loc 7.0260155200958252e-01 3.2181814312934875e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9662288547387192e-01:3.3083247430590024e-01:4.1235120304794326e-01:3.4950258026096359e-01:9.9560159840106788e-01:2.7325461804489581e-01:1.8714832174278215e+00:2.6439188025711585e-01:2.4604283370556836e+00:3.9661891924501719e-01:2.9965309037167431e+00:2.5193812669773397e-01:3.9041952159445339e+00 + CVs 20 + -7.3138273325463618e-02 1.8676568390959583e-01 2.2115705795172913e-01 + -1.6138221654479309e-01 3.4725947929422069e-01 4.1830057665049392e-01 + -2.6120953557180770e-01 4.8567235685120735e-01 5.9164546766120363e-01 + -3.7333243521558951e-01 6.0550359275767696e-01 7.4351532801299880e-01 + -5.2325820855598792e-01 7.0565138387789617e-01 8.7242408742906385e-01 + -7.4168994846201275e-01 7.9039209713633973e-01 9.7038029735454978e-01 + -1.0216195157578418e+00 9.0231122292335975e-01 1.0319564467292741e+00 + -1.2979833174501327e+00 1.0925509624133647e+00 1.0538161984567542e+00 + -1.5208608759886377e+00 1.3703520863621583e+00 1.0310458015866026e+00 + -1.6827403777889913e+00 1.7556232415503081e+00 9.6396293287318713e-01 + -1.7450704229463745e+00 2.2868998744097340e+00 9.1428111678350232e-01 + -1.6363748793574235e+00 2.8667644526256635e+00 1.0162195260636455e+00 + -1.3715257277658894e+00 3.3219486807701344e+00 1.2956398369101669e+00 + -1.0015695391320263e+00 3.5843239845252102e+00 1.6774589198192194e+00 + -5.7694583639923747e-01 3.6401090451650582e+00 2.0820449594123884e+00 + -1.3201004182505849e-01 3.5070786730467205e+00 2.5054006718207313e+00 + 3.0007527264029377e-01 3.1601121186966612e+00 2.9896609084484469e+00 + 6.2234205685561084e-01 2.5597172935867105e+00 3.4552770349558122e+00 + 6.7261789732659771e-01 2.1997708062958647e+00 3.5217548256355213e+00 + id 13146 + loc 3.0858987569808960e-01 7.7198743820190430e-01 375 + blend 0.0000000000000000e+00 + interp 5.3903161601499472e-01:4.8775868813118733e-01:1.3643093130341366e-01:5.3902622569883463e-01:6.5713020103412156e-01:2.7987478775733043e-01:1.1155269688674117e+00:4.2602898404944295e-01:1.8459420170986507e+00:2.7567766043127889e-01:2.8681240415836551e+00:5.0938655113359788e-01:3.4018311349661712e+00:4.4924366524013348e-01:3.9172653208595518e+00 + CVs 20 + -4.0774667925116792e-01 3.7317395958856603e-01 -3.1569846976245430e-02 + -8.0182159414686249e-01 6.1905464544243172e-01 -1.4837024273429894e-02 + -1.2389872491061507e+00 7.0929131859215266e-01 5.0478685695709735e-02 + -1.7493309710618676e+00 6.8658526474253812e-01 1.6591053254751903e-01 + -2.3294708923585574e+00 6.4497423719406843e-01 3.1793496309368308e-01 + -2.9769482208984535e+00 6.6014771178628218e-01 4.5417891384639764e-01 + -3.6808440578614636e+00 7.6618777496857304e-01 4.9626143607358641e-01 + -4.4037776866542035e+00 9.7519083392151784e-01 3.8607332780046466e-01 + -5.0830701566610612e+00 1.2727247797327388e+00 1.0889277608698711e-01 + -5.6685889128841875e+00 1.5966680473214374e+00 -3.0425412578734312e-01 + -6.1533118246674601e+00 1.8652325254526478e+00 -8.1162222151897800e-01 + -6.5335698658373849e+00 1.9983539474334733e+00 -1.3881592867480752e+00 + -6.7914875436825133e+00 1.9335343204175022e+00 -1.9948407641830279e+00 + -6.9089729050068005e+00 1.6539874950662741e+00 -2.5704339885882135e+00 + -6.8981951114072881e+00 1.2020409352625303e+00 -2.9705409213164442e+00 + -6.9269339868911537e+00 8.0135124800296120e-01 -2.9413572608108751e+00 + -7.1199928192467308e+00 8.7552556838999473e-01 -2.4562691236770169e+00 + -7.2144079566261015e+00 1.2276778916906692e+00 -2.0152645363771042e+00 + -7.3186593544512872e+00 7.2979171555632494e-01 -1.8839758501838173e+00 + id 13147 + loc 5.4947608709335327e-01 6.4594841003417969e-01 411 + blend 0.0000000000000000e+00 + interp 3.8216603435076668e-01:2.5532867135545501e-01:2.4790734365632350e-01:3.6550382257913538e-01:1.0010738160402033e+00:2.7535732626859027e-01:1.5615136745542786e+00:2.5317252143036756e-01:2.1629877352379654e+00:3.8216221269042316e-01:2.9920128451145676e+00:3.2304103863327299e-01:3.6217495704533995e+00 + CVs 20 + 7.5160664827916435e-01 2.5757615287456537e-01 -5.2968279809604224e-02 + 1.2601222735730355e+00 4.0436020063846256e-01 -7.2511304178646291e-02 + 1.7011593459198366e+00 5.0201813080973490e-01 -7.4336278392256039e-02 + 2.1681653926960247e+00 5.8623148358313970e-01 -6.4554186762542931e-02 + 2.6689750748999135e+00 6.4277763561622037e-01 -4.6504207238911049e-02 + 3.2083346377325626e+00 6.5158377594770178e-01 -2.4181258252653770e-02 + 3.7837738119333282e+00 5.9432767401011100e-01 -4.3745002764849494e-03 + 4.3832656338411926e+00 4.5379219496093537e-01 7.4430378951209075e-03 + 4.9834879883214551e+00 2.1325579795925065e-01 8.8568117265672708e-03 + 5.5461722188764755e+00 -1.3481275962533568e-01 -7.0368748526540847e-03 + 6.0202049150905381e+00 -5.7733525238618344e-01 -5.3471414827424291e-02 + 6.3659915144799761e+00 -1.0809867232397161e+00 -1.3639157449514877e-01 + 6.5778108931114678e+00 -1.6074950783583954e+00 -2.5030662325773506e-01 + 6.6725144014145341e+00 -2.1231634742781154e+00 -3.9143538487065827e-01 + 6.6730525316857356e+00 -2.5986053316917492e+00 -5.5810139528139235e-01 + 6.6047744066414156e+00 -3.0155424651661438e+00 -7.4337264705869122e-01 + 6.4936983195485425e+00 -3.3776451892937476e+00 -9.3627216586363238e-01 + 6.3623779256797617e+00 -3.6954290367779534e+00 -1.1298614849414916e+00 + 6.2704899303926194e+00 -4.0946023813204189e+00 -1.3224113764280361e+00 + id 13148 + loc 7.6251256465911865e-01 6.0344249010086060e-01 374 + blend 0.0000000000000000e+00 + interp 5.0406394417252143e-01:3.9086014466374880e-01:7.6036546008737682e-01:5.0405890353307969e-01:1.1721311762139890e+00:4.0772417357241592e-01:1.7669855014066480e+00:4.6451930317438889e-01:2.0404146443886404e+00:4.3926546149438633e-01:2.7879019925929107e+00:3.8693770184122062e-01:3.1710904855261091e+00:3.6976991186238140e-01:3.9969631615156058e+00 + CVs 20 + -6.8813137977000616e-01 2.8340364278420443e-01 -2.0521097649901282e-01 + -1.1695963516733403e+00 4.4596632936859815e-01 -2.9723892675809066e-01 + -1.6139926098850941e+00 5.5567071768778076e-01 -3.3886149225479956e-01 + -2.0966734532170355e+00 6.5539920813737473e-01 -3.5903383930090782e-01 + -2.6221704456161703e+00 7.7380903030529635e-01 -3.7255401380789355e-01 + -3.1958358798143895e+00 9.2848203652965877e-01 -4.0687533674624965e-01 + -3.8327082993700330e+00 1.1035844694489694e+00 -4.9886876326895657e-01 + -4.5366428824117664e+00 1.2573496192440152e+00 -6.8309236342076529e-01 + -5.2834539236833082e+00 1.3432654572450118e+00 -9.7916259239342462e-01 + -6.0304417800223433e+00 1.3199741085448771e+00 -1.3769239240069153e+00 + -6.7415636063748252e+00 1.1543966965427745e+00 -1.8292284568649415e+00 + -7.3855246063127140e+00 8.2426092998059541e-01 -2.2706521940685089e+00 + -7.9067532893833494e+00 3.3617759982338136e-01 -2.6370905000086906e+00 + -8.2494807874489897e+00 -2.4825906923393459e-01 -2.8776984712513434e+00 + -8.4112585650648803e+00 -8.5812116674273264e-01 -2.9975548546928108e+00 + -8.4358539662492475e+00 -1.4522420005963852e+00 -3.0507085996240506e+00 + -8.3894553532685787e+00 -2.0147396631819103e+00 -3.0865944383880572e+00 + -8.3576661275871995e+00 -2.5811012210233359e+00 -3.1204721932571813e+00 + -8.4059043909319637e+00 -3.2191819463606093e+00 -3.1547764842774115e+00 + id 13149 + loc 5.1804572343826294e-01 4.6371132135391235e-01 409 + blend 0.0000000000000000e+00 + interp 4.8805133702393622e-01:3.1443637299208022e-01:1.6245492192574462e-01:3.7286752583539046e-01:9.9972050164123216e-01:3.3848449128891323e-01:1.6239701004128060e+00:4.8804645651056600e-01:2.0743543319741988e+00:4.7054753129786753e-01:2.7035193769477859e+00:3.2115213591102476e-01:3.0089794690478024e+00:3.7866751222095690e-01:3.6942678954402948e+00 + CVs 20 + -3.1167997163265776e-01 6.1716392809885001e-02 1.0070007254771726e-01 + -5.9638344670338062e-01 1.1364388204669107e-01 2.1723488916098732e-01 + -8.8355359615868267e-01 1.6973553976152445e-01 3.2002476260925050e-01 + -1.1793909646425194e+00 2.3460915666269394e-01 3.8928939394827217e-01 + -1.4790850628009213e+00 3.0665094033361018e-01 4.2453756655239955e-01 + -1.7788616951913525e+00 3.8511087324484794e-01 4.2620772523552075e-01 + -2.0743895664522616e+00 4.7115257206769467e-01 3.9393515307138693e-01 + -2.3644573310348576e+00 5.6449041615672602e-01 3.2693738795860794e-01 + -2.6565455617617864e+00 6.6004847681714829e-01 2.2358803515883879e-01 + -2.9633580083608377e+00 7.4820271470861832e-01 8.4693882120499858e-02 + -3.2967052311444816e+00 8.1262596849337099e-01 -8.1541448247645254e-02 + -3.6617746461612142e+00 8.2911770518502093e-01 -2.6088923436715511e-01 + -4.0515065187809567e+00 7.7708840526150613e-01 -4.3902713345838851e-01 + -4.4509523640113589e+00 6.4977259431070333e-01 -6.0511836636868854e-01 + -4.8407827275440543e+00 4.5398679017538646e-01 -7.5078918444926135e-01 + -5.1964565124851783e+00 2.1210459834457485e-01 -8.7121789630072444e-01 + -5.4992117325723004e+00 -4.9446031948188196e-02 -9.6925672399695817e-01 + -5.7440788636344369e+00 -3.2726986993134366e-01 -1.0532619073115197e+00 + -5.8832931370707140e+00 -5.7803077116667589e-01 -1.1356806747870325e+00 + id 13150 + loc 8.1789022684097290e-01 1.3296359777450562e-01 382 + blend 0.0000000000000000e+00 + interp 4.6189406085362944e-01:2.9401314497617603e-01:6.3810660115938900e-01:2.8511890395450767e-01:1.2006169981896364e+00:2.6723861121013714e-01:2.8077435896008569e+00:3.6283363959520099e-01:3.4086037799010969e+00:4.6188944191302095e-01:3.9999787009308587e+00 + CVs 20 + -7.5271531379073231e-01 5.1217697742928836e-02 5.3317390698661182e-01 + -1.2704982308952062e+00 -8.3586174161658922e-03 9.3871431372383940e-01 + -1.7661095253599539e+00 -9.1495451541313555e-02 1.3182959629956241e+00 + -2.3125329736044753e+00 -1.5209196611583109e-01 1.6907563753443979e+00 + -2.9055343767201931e+00 -1.8440952154591439e-01 2.0465203644407399e+00 + -3.5420727499845635e+00 -1.9496121833211721e-01 2.3906584819936421e+00 + -4.2169193810071084e+00 -2.1213230691083407e-01 2.7373653468863122e+00 + -4.9195247906950028e+00 -2.8350008431209783e-01 3.0952914900133335e+00 + -5.6273873521876414e+00 -4.6037406922511748e-01 3.4634031196592225e+00 + -6.2970710284496123e+00 -7.7985771453199892e-01 3.8348348948912778e+00 + -6.8681832930207625e+00 -1.2529963495628405e+00 4.1915311224090068e+00 + -7.2892152757487736e+00 -1.8578817294868872e+00 4.5033548301160575e+00 + -7.5517646036397892e+00 -2.5349120164308521e+00 4.7550128461481496e+00 + -7.6900827281831479e+00 -3.2031650596638510e+00 4.9853767984316004e+00 + -7.7653762756363598e+00 -3.7970487787629814e+00 5.2473680541074543e+00 + -7.8066846796607523e+00 -4.2886310398287710e+00 5.5688584144071429e+00 + -7.8018541352086199e+00 -4.6663609738518694e+00 5.9501664469698969e+00 + -7.7382263792103991e+00 -4.9502558266803405e+00 6.3525412231253542e+00 + -7.6484692518518962e+00 -5.2885001343740186e+00 6.7107259574337350e+00 + id 13151 + loc 9.1297313570976257e-02 2.9472336173057556e-01 403 + blend 0.0000000000000000e+00 + interp 5.5778462720646549e-01:4.1265721837350461e-01:4.5491692244494786e-03:4.5384132887028472e-01:4.5518946274870387e-01:3.3801825814279712e-01:9.7642347694938980e-01:5.5777904936019340e-01:1.2485317196835730e+00:5.3989667338044889e-01:1.9211019559407614e+00:3.7582315770010205e-01:2.2719099705060648e+00:3.3410327992534372e-01:3.0000295783303068e+00:3.9583292981426776e-01:3.6534912422481978e+00 + CVs 20 + -1.6824611871303105e-01 2.5698668808916852e-01 5.9710867853093555e-02 + -3.2472587890039872e-01 5.1279424197374635e-01 1.2484071217726689e-01 + -4.7550737829020351e-01 7.6812771089837040e-01 1.9723823050329953e-01 + -6.2396682828697925e-01 1.0220647579191418e+00 2.8071308206529827e-01 + -7.7105086523383926e-01 1.2728220309990310e+00 3.8180400561727423e-01 + -9.1607220112372523e-01 1.5183954789622829e+00 5.0964464607752979e-01 + -1.0560456994330862e+00 1.7555378992236446e+00 6.7567728667570126e-01 + -1.1855565260683607e+00 1.9775122477626359e+00 8.9114129023242039e-01 + -1.2961819345084609e+00 2.1717169012031809e+00 1.1636075883633850e+00 + -1.3761804224472272e+00 2.3215803014724719e+00 1.4925381356269134e+00 + -1.4140251127102879e+00 2.4120756379437900e+00 1.8681362361510980e+00 + -1.4037086206564449e+00 2.4325342483339210e+00 2.2729703332396762e+00 + -1.3533312212456798e+00 2.3785729243909834e+00 2.6875454492280002e+00 + -1.2834342475019660e+00 2.2494208876135633e+00 3.0998585788092061e+00 + -1.2131819407029734e+00 2.0470811047657613e+00 3.4957149954342488e+00 + -1.1621517533588008e+00 1.7997030578698650e+00 3.8418491348151065e+00 + -1.1592574569890639e+00 1.5826424838584474e+00 4.1017048391024051e+00 + -1.2151970367988212e+00 1.4408185861757752e+00 4.2888716318901530e+00 + -1.2945792261588698e+00 1.2054268881144867e+00 4.6105528345310933e+00 + id 13152 + loc 5.1228022575378418e-01 8.8058722019195557e-01 1078 + blend 0.0000000000000000e+00 + interp 3.3040475570476668e-01:3.1584649096336198e-01:4.7942127233391152e-01:3.1294368644311232e-01:1.5468378989628706e+00:3.0321293964988616e-01:2.3447764485106966e+00:3.3040145165720963e-01:3.0017331080982630e+00:2.6651860923011589e-01:3.9322805357058752e+00 + CVs 20 + 2.2536049836711436e-01 3.0297543218883904e-01 -1.1199838001666967e-01 + 4.6652797953414027e-01 5.7071057412762527e-01 -2.7055823173928728e-01 + 7.1658501622656312e-01 8.2290886117762585e-01 -4.5958900587272378e-01 + 9.6555230747785381e-01 1.0485668746879471e+00 -6.7871217983335796e-01 + 1.2030967076916037e+00 1.2363016812461907e+00 -9.3212391101590564e-01 + 1.4135902077694631e+00 1.3729917031077417e+00 -1.2211782143042051e+00 + 1.5769667336117108e+00 1.4423328422930437e+00 -1.5416933777042439e+00 + 1.6703736487679934e+00 1.4242029531808398e+00 -1.8790009293900549e+00 + 1.6752769463974782e+00 1.2974540920802005e+00 -2.1988041666826623e+00 + 1.5966896614254282e+00 1.0616935146875446e+00 -2.4473388744659470e+00 + 1.4728346157328145e+00 7.5219487284723285e-01 -2.5787688668172208e+00 + 1.3657878658283658e+00 4.2518215252212577e-01 -2.5840526116888825e+00 + 1.3083597704351786e+00 1.3179255739983398e-01 -2.5089836820681377e+00 + 1.2293653835742415e+00 -1.1171607214389456e-01 -2.4637978689816902e+00 + 1.0794614239765836e+00 -3.0811812891668278e-01 -2.5961542785030289e+00 + 9.4780925186502729e-01 -4.5834529645393496e-01 -2.8154904265428291e+00 + 8.8254215605810149e-01 -5.6073467005717159e-01 -3.0547719537907181e+00 + 8.8876075067166693e-01 -5.8076679669474141e-01 -3.4049871801576956e+00 + 7.3631257478791490e-01 -6.4013939211726245e-01 -3.6518623629052929e+00 + id 13153 + loc 1.3604057021439075e-02 5.5065159685909748e-03 1068 + blend 0.0000000000000000e+00 + interp 4.8455280048954208e-01:2.8466811392360225e-01:3.7674338215218772e-01:2.8811430542286154e-01:1.0421022966819844e+00:2.8663624481218980e-01:1.8920830230175385e+00:2.7483680782241504e-01:2.0853409441971378e+00:3.1019743703253766e-01:2.9869210837407492e+00:4.8454795496153719e-01:3.2954489058530068e+00:4.4465115015350959e-01:3.8897686404777865e+00 + CVs 20 + -2.1069398744599119e-01 2.8245366134846817e-01 -1.7785430227799992e-01 + -4.1782696374531825e-01 5.5482458054044836e-01 -3.6755711197665231e-01 + -6.3732432058426403e-01 8.2891544425351182e-01 -5.4539312590234945e-01 + -8.7785403572308640e-01 1.1069256477333980e+00 -6.9662330320671817e-01 + -1.1441969216133276e+00 1.3847872571185180e+00 -8.1410138799920218e-01 + -1.4403167278918592e+00 1.6545641585487849e+00 -8.9297920970322808e-01 + -1.7697887416884890e+00 1.9056351789922459e+00 -9.3217696315253329e-01 + -2.1360332364947268e+00 2.1254905703181133e+00 -9.3518069865225129e-01 + -2.5415949437120031e+00 2.2995344180378252e+00 -9.0838841079175836e-01 + -2.9856148185437976e+00 2.4109262888566660e+00 -8.5914979993269647e-01 + -3.4608687614941305e+00 2.4416701447984228e+00 -7.9738576231820624e-01 + -3.9533893036600443e+00 2.3784125359885455e+00 -7.3923677595043757e-01 + -4.4454782722792796e+00 2.2172491860847723e+00 -7.0667772807256801e-01 + -4.9162634484527654e+00 1.9614354005959482e+00 -7.2188027934332255e-01 + -5.3413439923448420e+00 1.6174504249896562e+00 -8.0059008193097658e-01 + -5.6910430655105442e+00 1.1908548920342119e+00 -9.4510306806017363e-01 + -5.9312175086255490e+00 6.9313117382048328e-01 -1.1433444487120938e+00 + -6.0518863477617515e+00 1.7086453564623305e-01 -1.3711114784014309e+00 + -6.2084131375198046e+00 -2.0970930242828079e-01 -1.5555208342222182e+00 + id 13154 + loc 6.4127284288406372e-01 2.0853421092033386e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1102967462612405e-01:3.2122424274159311e-01:7.0954369331093936e-01:2.8965860164548507e-01:1.2933631894249527e+00:3.4483501219270485e-01:2.0166770825298470e+00:4.1102556432937781e-01:2.7326876713773327e+00:2.9571312999575344e-01:3.1847057050799457e+00:3.1878494384233202e-01:3.9999998382142357e+00 + CVs 20 + -6.4741329231557690e-02 4.5607696105917050e-01 -5.1975374498207427e-01 + -1.5462835042104917e-01 8.1551055473099454e-01 -8.6976661677220202e-01 + -2.6483938842540156e-01 1.1323959572582067e+00 -1.1727009819234691e+00 + -4.1027057749325979e-01 1.4454389967545191e+00 -1.4701574644952613e+00 + -5.9948485478072411e-01 1.7515566579599313e+00 -1.7476173001122415e+00 + -8.4460027035398866e-01 2.0450442629373269e+00 -1.9865933180693669e+00 + -1.1577607788089919e+00 2.3079711208399516e+00 -2.1628841189376691e+00 + -1.5429635770091310e+00 2.5045061743731836e+00 -2.2507148954379121e+00 + -1.9815106027343432e+00 2.5836554021444842e+00 -2.2284879432326252e+00 + -2.4075435381072086e+00 2.5056501546558456e+00 -2.1011855864418250e+00 + -2.7447361747425512e+00 2.2960418297948300e+00 -1.9188929713353744e+00 + -2.9819244781844216e+00 2.0209401060262988e+00 -1.7295088648730761e+00 + -3.1490167815072119e+00 1.7197261153185066e+00 -1.5477944739758664e+00 + -3.2714275285489287e+00 1.4048322041033394e+00 -1.3781796339979699e+00 + -3.3604356485422859e+00 1.0809852481969497e+00 -1.2478242520683112e+00 + -3.4107742387886781e+00 7.6212406660194754e-01 -1.2328648665474495e+00 + -3.4145914946112002e+00 4.8815120306682336e-01 -1.3810907539736794e+00 + -3.4119125975054585e+00 2.1503992271544625e-01 -1.5637847692819804e+00 + -3.5225515757397359e+00 -2.3576917642847883e-01 -1.5464431018021614e+00 + id 13155 + loc 3.3887603878974915e-01 8.9240300655364990e-01 373 + blend 0.0000000000000000e+00 + interp 5.2439449363967672e-01:3.6587980998424219e-01:1.0492968759264354e-01:3.9516933075255745e-01:7.6023481213451416e-01:3.4387905120415901e-01:1.4245323337069833e+00:4.6505811194641539e-01:1.9548028749713235e+00:5.2073375638837904e-01:2.6188144572194290e+00:5.2438924969474032e-01:3.0015494882550411e+00:3.3105696041449723e-01:3.4504536917054951e+00 + CVs 20 + -3.9761860407062044e-01 3.9965653107690435e-01 -1.1468405322009155e-01 + -7.4066173528159263e-01 8.1040155662297797e-01 -2.3999099724230097e-01 + -1.0228857231685637e+00 1.2484658629745558e+00 -3.9940350959666082e-01 + -1.2459614355527546e+00 1.7173228980010999e+00 -6.1763357064328872e-01 + -1.4075911877734413e+00 2.1920802612782464e+00 -9.1239540259036489e-01 + -1.5213767173728807e+00 2.6363871444154099e+00 -1.2914210306013028e+00 + -1.6154464256111760e+00 3.0141781904116098e+00 -1.7496642652988181e+00 + -1.7242944067041808e+00 3.2943702660882819e+00 -2.2645757073921842e+00 + -1.8805791325989349e+00 3.4577791250794672e+00 -2.7952986038773924e+00 + -2.1061465154711461e+00 3.5139668430054414e+00 -3.2888390220349510e+00 + -2.4057536991283937e+00 3.4937588969870879e+00 -3.6999694665659852e+00 + -2.7730404742387984e+00 3.4246957239712916e+00 -4.0136148913617893e+00 + -3.1967505619628351e+00 3.3143140401176687e+00 -4.2390517207392255e+00 + -3.6580403677836344e+00 3.1597042814040788e+00 -4.3874004340542925e+00 + -4.1405678127127032e+00 2.9619078920891626e+00 -4.4721666138185876e+00 + -4.6331999836416955e+00 2.7223925445025241e+00 -4.5094825382628869e+00 + -5.1022585776860527e+00 2.4352811122142950e+00 -4.4942198158124738e+00 + -5.4720839798409795e+00 2.0836288440412885e+00 -4.3746434254559530e+00 + -5.8247171733226093e+00 1.6258358162239941e+00 -4.2026799471624310e+00 + id 13156 + loc 3.8665652275085449e-02 8.3965408802032471e-01 415 + blend 0.0000000000000000e+00 + interp 3.5018667461297842e-01:3.5018317274623229e-01:2.6073418566950890e-03:2.2350464094861386e-01:9.7382765011080752e-01:1.0879550486205367e-01:1.5524925090034354e+00:1.7143488831943982e-01:2.2500707347702980e+00:2.6531440507811804e-01:3.1465235046306450e+00 + CVs 20 + 4.5318590188481395e-01 6.7789994293105144e-02 -7.1135693538510181e-03 + 8.0471041946647259e-01 9.9863643896395432e-02 -8.4271448297102869e-02 + 1.1200264269186593e+00 1.2509773309457412e-01 -1.7331984466830397e-01 + 1.4351757100062028e+00 1.6018071986926424e-01 -2.5492889317226519e-01 + 1.7476256771195797e+00 2.0531750874581883e-01 -3.2457455110708044e-01 + 2.0544442199088397e+00 2.5806468282350742e-01 -3.7823316317857492e-01 + 2.3535825556389116e+00 3.1444006451573581e-01 -4.1235777910698324e-01 + 2.6435079851713024e+00 3.7009995565873532e-01 -4.2442770839139810e-01 + 2.9237249829868146e+00 4.2123795908579043e-01 -4.1199594301313502e-01 + 3.1952659854777008e+00 4.6347438466144975e-01 -3.7115033961436517e-01 + 3.4590936039690856e+00 4.9035715543493386e-01 -2.9769836146962891e-01 + 3.7128727871784859e+00 4.9544209539328321e-01 -1.9185514903974465e-01 + 3.9518818325019978e+00 4.7906224324334179e-01 -5.8459187351928898e-02 + 4.1719851253154232e+00 4.4745601775439647e-01 9.6610219609780668e-02 + 4.3694625693810405e+00 4.0664334082533782e-01 2.6463000971984374e-01 + 4.5405700188363012e+00 3.6237538657016288e-01 4.2959701911286796e-01 + 4.6843227170840978e+00 3.2147209761293016e-01 5.7397842580030423e-01 + 4.8050165759351158e+00 2.8840158991845599e-01 6.9542325448234710e-01 + 4.8874634087172630e+00 3.0724094360763354e-01 7.2168627034062127e-01 + id 13157 + loc 7.0612597465515137e-01 9.1078263521194458e-01 402 + blend 0.0000000000000000e+00 + interp 4.4584199019230830e-01:3.0727159478524835e-01:3.8376176246613158e-02:4.4583753177240643e-01:7.1617915202915516e-01:3.2289106920306321e-01:1.5229571904940511e+00:2.8385939547913330e-01:2.2719459186277784e+00:3.8329796124659615e-01:2.9911545223937246e+00:4.1048970180833794e-01:3.6352239391617580e+00 + CVs 20 + -5.4467702318969476e-02 8.9523010258112434e-02 -1.0238772214993529e-01 + -1.0623846365594140e-01 2.0118098429675257e-01 -2.1270117443864744e-01 + -1.5986642425673436e-01 3.2623800593225982e-01 -3.2120575922359079e-01 + -2.1764702860128787e-01 4.5503517713991692e-01 -4.1921854172183248e-01 + -2.7868487935748731e-01 5.8616348956403330e-01 -5.0702825694247045e-01 + -3.4074503081808039e-01 7.1866831725766767e-01 -5.8657674002664706e-01 + -3.9871610865204787e-01 8.5244282392570814e-01 -6.6155785303631531e-01 + -4.4483697041736264e-01 9.8733108677690318e-01 -7.3548186900727397e-01 + -4.6960194441713377e-01 1.1228652632608738e+00 -8.1043332384750277e-01 + -4.6188032545792596e-01 1.2569894639558488e+00 -8.8587893511349614e-01 + -4.1241154917654199e-01 1.3819853037571062e+00 -9.5652872143338041e-01 + -3.2185555653210640e-01 1.4857528000826012e+00 -1.0164572178252096e+00 + -1.9597409619715200e-01 1.5625154167735433e+00 -1.0708147563383481e+00 + -3.8215198276681739e-02 1.6120069739985663e+00 -1.1371776524670167e+00 + 1.3565633013893530e-01 1.6307145593489059e+00 -1.2367300884995251e+00 + 2.9531222442695731e-01 1.6106040767180461e+00 -1.3774144223656370e+00 + 4.1715481898841067e-01 1.5439703800091547e+00 -1.5436820343550939e+00 + 4.9565885906588991e-01 1.4301126700592568e+00 -1.7143427563126399e+00 + 5.4698031833546268e-01 1.2836831539650631e+00 -1.8439487254148503e+00 + id 13158 + loc 7.0644658803939819e-01 6.6027128696441650e-01 401 + blend 0.0000000000000000e+00 + interp 3.9143741392130754e-01:2.8711341551265412e-01:6.1588892587687694e-01:3.9143349954716833e-01:1.0149451312251316e+00:3.4937920408739287e-01:1.9851506602015783e+00:2.5150563816866334e-01:2.5343470196275200e+00:3.5168623006420313e-01:3.0060594926620996e+00:3.5917193226207877e-01:3.8714920651751172e+00 + CVs 20 + -1.4974682869593026e-01 3.1595009282790631e-01 -2.1815913771497711e-01 + -2.7639498388133532e-01 6.4370147304725234e-01 -4.4075188188517733e-01 + -3.9022221982902328e-01 9.7121170672868884e-01 -6.9226810113476844e-01 + -4.9481417071920752e-01 1.2771974922593565e+00 -9.8900743714503114e-01 + -5.8852729581986662e-01 1.5317210129317127e+00 -1.3329630833740229e+00 + -6.8019963025404140e-01 1.7128713940809395e+00 -1.7100165512396686e+00 + -7.9132703783187686e-01 1.8175293090397040e+00 -2.0998873855643940e+00 + -9.4105575857853785e-01 1.8501694197216942e+00 -2.4811258742136184e+00 + -1.1376276951888538e+00 1.8144913998661556e+00 -2.8323199925785199e+00 + -1.3807251978366217e+00 1.7163536921411344e+00 -3.1369888336326763e+00 + -1.6624930929171238e+00 1.5692443531342035e+00 -3.3842916179164102e+00 + -1.9734181897423422e+00 1.3907748690560782e+00 -3.5716205510917796e+00 + -2.3041981154442834e+00 1.1942380980786145e+00 -3.7109604805926555e+00 + -2.6482875069713327e+00 9.8518820371468230e-01 -3.8217588307493151e+00 + -3.0174500314892749e+00 7.5395948805683299e-01 -3.9089218341412777e+00 + -3.4424529803357462e+00 4.6690724779762394e-01 -3.9702400997277918e+00 + -3.9267443489376723e+00 1.0936749121389688e-01 -4.0576207611534532e+00 + -4.4047362235891088e+00 -2.4441365477993604e-01 -4.2577449258220668e+00 + -4.7545723676571896e+00 -4.7576422675833718e-01 -4.5251973762018167e+00 + id 13159 + loc 8.0780209973454475e-03 6.1825078725814819e-01 396 + blend 0.0000000000000000e+00 + interp 3.6668248352834620e-01:3.3078062229039490e-01:6.7021732498678732e-01:3.6227396787999355e-01:1.2973679262309754e+00:3.6667881670351093e-01:2.1700941490777765e+00:3.2389732699285817e-01:3.0953864640978357e+00:3.0666306783626335e-01:3.9903342460527589e+00 + CVs 20 + 8.2578797209797716e-01 1.9441690257273259e-01 -2.5205052690092988e-01 + 1.3843696321557513e+00 2.2767713133576442e-01 -4.2963626499931035e-01 + 1.8733535126923193e+00 2.1165540240503516e-01 -5.6405864003492034e-01 + 2.3596268485835656e+00 1.9139754937293463e-01 -6.6211568773142582e-01 + 2.8439551819580662e+00 1.7005022571826256e-01 -7.2435537995108179e-01 + 3.3320020688254122e+00 1.4835645355781357e-01 -7.5752916371521961e-01 + 3.8305746643770862e+00 1.2350496717027948e-01 -7.7419979269295824e-01 + 4.3454826765102776e+00 8.5503399965643379e-02 -7.8812030937411848e-01 + 4.8822535868112942e+00 1.3427269744099357e-02 -8.0861544036809063e-01 + 5.4393901873195487e+00 -1.2162647154125050e-01 -8.4260485245246364e-01 + 5.9957371017760144e+00 -3.4518323079374191e-01 -8.9930546039513959e-01 + 6.5171338023810943e+00 -6.6390415944095427e-01 -9.8029037368897409e-01 + 6.9823055778410534e+00 -1.0660711797338802e+00 -1.0713763135669427e+00 + 7.3894172003719998e+00 -1.5366997348239633e+00 -1.1561467143365904e+00 + 7.7411835977165140e+00 -2.0638733986882576e+00 -1.2283661652924232e+00 + 8.0322138622434682e+00 -2.6331045866617133e+00 -1.2864380812781042e+00 + 8.2548533825401300e+00 -3.2223498946750251e+00 -1.3251532343305117e+00 + 8.4117659146407746e+00 -3.8075189442309281e+00 -1.3425117959208939e+00 + 8.5496165139992328e+00 -4.2909988744839662e+00 -1.3410469448044504e+00 + id 13160 + loc 2.1825484931468964e-01 2.4719712138175964e-01 395 + blend 0.0000000000000000e+00 + interp 4.3801020766700072e-01:3.9223058826849444e-01:4.2222184371053184e-02:3.1823374718584085e-01:9.9980601517298162e-01:3.1898472347096374e-01:2.0167346482642752e+00:3.4671378095398742e-01:2.6909839616963649e+00:4.3800582756492407e-01:3.5251823740176276e+00 + CVs 20 + -2.7984447959520919e-01 1.5288636348528969e-01 -2.4220472700793902e-01 + -5.2134941494407772e-01 3.0159210379553358e-01 -4.8412838769843847e-01 + -7.4412710470695798e-01 4.5395091296939705e-01 -7.3748061789685404e-01 + -9.5351056407648416e-01 6.0991996359286360e-01 -1.0059590016050644e+00 + -1.1460215030508938e+00 7.6204890209191534e-01 -1.2858925145710334e+00 + -1.3218810481708978e+00 9.0438734056119530e-01 -1.5721470610885722e+00 + -1.4843093508108671e+00 1.0343173809326354e+00 -1.8603920407765060e+00 + -1.6362988031780270e+00 1.1509166645684183e+00 -2.1494682569749082e+00 + -1.7801604758128808e+00 1.2534753299140990e+00 -2.4441895271948963e+00 + -1.9214248926715032e+00 1.3391443270356036e+00 -2.7540879233695610e+00 + -2.0690567225028795e+00 1.4005121667347888e+00 -3.0831034984599550e+00 + -2.2290495545664628e+00 1.4300363339554529e+00 -3.4218676945819557e+00 + -2.4009018879683826e+00 1.4274695227356298e+00 -3.7606703306710578e+00 + -2.5822290878924314e+00 1.3952858483384920e+00 -4.1011392147179810e+00 + -2.7752145226625080e+00 1.3340578525664366e+00 -4.4479987804352712e+00 + -2.9904103943145071e+00 1.2430284456296401e+00 -4.8002013276535633e+00 + -3.2325595492220871e+00 1.1196484489097891e+00 -5.1472153647402212e+00 + -3.4761105451004854e+00 9.7053364134480802e-01 -5.4618807370057532e+00 + -3.6053765417654295e+00 8.6159247678739259e-01 -5.6562900104899825e+00 + id 13161 + loc 1.6165189445018768e-01 8.3017259836196899e-01 380 + blend 0.0000000000000000e+00 + interp 4.7345865356802713e-01:2.8336911115981622e-01:5.3563483944651613e-01:4.7345391898149147e-01:1.3155031780833291e+00:4.3871473869570121e-01:1.9123643006434881e+00:4.4088860987245038e-01:2.5208792661755055e+00:4.0150441448094876e-01:3.0201782347067319e+00:3.6088747322280895e-01:3.9861788073903961e+00 + CVs 20 + -3.6227185740140294e-01 2.7176240942524255e-01 -4.1235851058009698e-01 + -7.0854237807979281e-01 4.8622133943479684e-01 -7.6386887261133884e-01 + -1.0518586011155282e+00 6.7860643266627507e-01 -1.1254976537090040e+00 + -1.3900418710124267e+00 8.6563202139522022e-01 -1.5309546365558537e+00 + -1.7041608677036026e+00 1.0364019190692446e+00 -1.9801413511433474e+00 + -1.9819333797553733e+00 1.1693535307100602e+00 -2.4647273264883309e+00 + -2.2163233449978059e+00 1.2416452812076599e+00 -2.9680477117597177e+00 + -2.4010146399335692e+00 1.2393273662147650e+00 -3.4651409092639676e+00 + -2.5390561478214360e+00 1.1627496083665048e+00 -3.9289445353616346e+00 + -2.6436356350799053e+00 1.0223231960722123e+00 -4.3373742866632270e+00 + -2.7235153913227186e+00 8.3424684009142025e-01 -4.6712008939307506e+00 + -2.7805394298179680e+00 6.2260912282520176e-01 -4.9180531997543966e+00 + -2.8236883849310099e+00 4.0886188400285839e-01 -5.0897531452847131e+00 + -2.8673729123042260e+00 1.8763825839220560e-01 -5.2147878081491292e+00 + -2.9161111662730095e+00 -6.8773005640257789e-02 -5.3070562966863948e+00 + -2.9627072250754196e+00 -3.7474864208023462e-01 -5.3739724863733214e+00 + -2.9949078609066224e+00 -7.3049019050696318e-01 -5.4452351735875926e+00 + -3.0177347927867166e+00 -1.1018330748324185e+00 -5.5396491166914448e+00 + -3.1039802040885167e+00 -1.2768004018925159e+00 -5.5272759416161810e+00 + id 13162 + loc 3.8858127593994141e-01 4.1374552249908447e-01 411 + blend 0.0000000000000000e+00 + interp 3.9421871231231431e-01:3.8932850441223898e-01:3.4058831748542162e-01:2.5836028145921774e-01:1.1505481584063095e+00:2.8237410217706838e-01:2.2004290113661367e+00:3.9421477012519118e-01:2.9816851643562750e+00:2.5334412458814198e-01:3.5639527649355722e+00 + CVs 20 + -1.0738415696896697e-01 2.0363237377989851e-01 -6.4390918624181182e-01 + -2.1641525183900284e-01 3.4263606144831138e-01 -1.0813791794103436e+00 + -3.1531977463725203e-01 4.6223355839027058e-01 -1.4654247672103988e+00 + -3.8942520683265025e-01 5.8503020275959638e-01 -1.8642310587274249e+00 + -4.2806071354740366e-01 6.9771698175806929e-01 -2.2784622485647419e+00 + -4.2194922175048366e-01 7.8663117675440364e-01 -2.7067595736748653e+00 + -3.6732402254900109e-01 8.4192143581434964e-01 -3.1493250386102178e+00 + -2.6444064357388286e-01 8.5569292433256494e-01 -3.6072518444584283e+00 + -1.1417326705317016e-01 8.1769849482127832e-01 -4.0779481941307791e+00 + 7.7455617726280679e-02 7.1681188086925662e-01 -4.5540273070127464e+00 + 2.9005065464409507e-01 5.4312538168410662e-01 -5.0201649252445470e+00 + 4.9479492570522177e-01 2.9031438533336473e-01 -5.4479159735201712e+00 + 6.7419200962173897e-01 -3.6929799981237910e-02 -5.8077962932847216e+00 + 8.2525807216862546e-01 -4.2202712083616856e-01 -6.0852530192787064e+00 + 9.4573698517887173e-01 -8.3909686902455682e-01 -6.2753255899143419e+00 + 1.0294886669763343e+00 -1.2496948394990128e+00 -6.3819223721568328e+00 + 1.0749912127014598e+00 -1.6171346532541220e+00 -6.4203568492229648e+00 + 1.0933643501887014e+00 -1.9360394717696545e+00 -6.4079918503562636e+00 + 1.0793214475005144e+00 -2.2790622612086651e+00 -6.2850946016329914e+00 + id 13163 + loc 1.8044357001781464e-01 6.3324761390686035e-01 377 + blend 0.0000000000000000e+00 + interp 4.3307845849919413e-01:3.9809633817350037e-01:4.2930760962783510e-01:4.3307412771460918e-01:7.5722960760393776e-01:2.8598099911284153e-01:1.2158083068117205e+00:3.6509322811158545e-01:1.9165683941200453e+00:2.9626295677839665e-01:2.2035476328912980e+00:3.5620007837999812e-01:3.0948016497952811e+00:3.1809763236548616e-01:3.9403434266939001e+00 + CVs 20 + -7.5165369468163723e-01 3.4273639773975745e-01 -5.5739345250336225e-01 + -1.3762667938300006e+00 5.3321678476011203e-01 -9.2108875422295600e-01 + -1.9842041517677078e+00 6.5057900686655135e-01 -1.1884483422507819e+00 + -2.6196439457965321e+00 7.3722362722813206e-01 -1.4118081812356316e+00 + -3.2755233539734716e+00 7.9611724633474190e-01 -1.6154838553093231e+00 + -3.9523070784650582e+00 8.0946335679019921e-01 -1.8237810257354816e+00 + -4.6469945669085106e+00 7.4449563397393415e-01 -2.0554050763459277e+00 + -5.3371313223387880e+00 5.7411582103127023e-01 -2.3220571029534307e+00 + -5.9786578742080492e+00 2.9107118892336414e-01 -2.6153179111274438e+00 + -6.5266617643920215e+00 -8.5081730938731948e-02 -2.9028670285108094e+00 + -6.9563964119245387e+00 -5.1767407434421431e-01 -3.1517124321098775e+00 + -7.2653558421213278e+00 -9.6981048432309747e-01 -3.3491800948789368e+00 + -7.4739860475887543e+00 -1.4142833114987203e+00 -3.5071078296325435e+00 + -7.6258544263376553e+00 -1.8462829231209548e+00 -3.6602531483584118e+00 + -7.7618933452022754e+00 -2.2683772437676626e+00 -3.8382422920753410e+00 + -7.8963194050278087e+00 -2.6486864764388893e+00 -4.0412848712180285e+00 + -8.0195765203128655e+00 -2.9524914012242793e+00 -4.2516729098626991e+00 + -8.1338832645725443e+00 -3.2096894762472501e+00 -4.4594359391895670e+00 + -8.2863614031189190e+00 -3.5128996340370704e+00 -4.6699025786383821e+00 + id 13164 + loc 9.7628754377365112e-01 3.6754828691482544e-01 1081 + blend 0.0000000000000000e+00 + interp 3.3319010865100879e-01:2.6337723702736049e-01:1.0530345614561787e-02:3.3318677674992231e-01:1.0097931812054641e+00:2.5608674485222910e-01:2.0114325613605493e+00:3.3184294953683519e-01:2.6680772214658184e+00:2.9056517039183805e-01:3.0276431295296811e+00 + CVs 20 + 1.6947644842989457e-01 5.3847396309587070e-01 -5.1479182828198145e-01 + 2.7667605582162319e-01 1.0098573091955947e+00 -8.9253456846969081e-01 + 3.6761441533865769e-01 1.4315184888792440e+00 -1.2087170027974088e+00 + 4.4015133393436023e-01 1.8560674691775774e+00 -1.4935208194476948e+00 + 4.8248582649142130e-01 2.2968509450732815e+00 -1.7319915147088900e+00 + 4.8065680558631230e-01 2.7835683279890726e+00 -1.8924239548558637e+00 + 4.1794949625848599e-01 3.3441629043614034e+00 -1.9085667303594187e+00 + 2.8584278475053726e-01 3.9572594224130659e+00 -1.6674381046503473e+00 + 1.1283937991713200e-01 4.4787640459629801e+00 -1.0596750395378376e+00 + -1.4891250645336362e-02 4.6814016998892143e+00 -1.9908931513460804e-01 + -5.1559439835628607e-02 4.5663233253522639e+00 6.0706691452475448e-01 + -3.4615859893025236e-02 4.3034832736404081e+00 1.2420670347307585e+00 + -5.1775262534541344e-03 3.9874260309054312e+00 1.7420091448155910e+00 + 1.5186929784259146e-02 3.6362245436538676e+00 2.1553201468138625e+00 + 2.0490073334386932e-02 3.2162015738074876e+00 2.5172849852402313e+00 + 2.0770747763304023e-02 2.6040455587297728e+00 2.8475645075772866e+00 + 3.2177523231848859e-02 1.6453799870260364e+00 3.0577519016764891e+00 + 4.7646992003737676e-02 5.9040124441533237e-01 2.9738255147736563e+00 + 1.1265606403454365e-02 4.0373439456328764e-01 2.9646842280405652e+00 + id 13165 + loc 7.3282706737518311e-01 3.5243198275566101e-01 400 + blend 0.0000000000000000e+00 + interp 4.7817447937859625e-01:3.9141804622480675e-01:7.7865808283011928e-03:2.9651345033447579e-01:5.8630132926227940e-01:3.7825661221740914e-01:1.0128481294162783e+00:4.7816969763380246e-01:1.8048753231183585e+00:4.1237817586462405e-01:2.1927628915345223e+00:3.4715932653227988e-01:3.0200575633781774e+00 + CVs 20 + 3.5680042255694283e-01 2.1559508669491390e-01 1.9783517160840719e-01 + 6.6739527129336185e-01 4.3919426188746352e-01 4.2289517061057602e-01 + 9.4183596562691374e-01 6.6482509298179759e-01 6.6927440936137472e-01 + 1.1829809475900910e+00 8.9039386160481304e-01 9.3548524048340853e-01 + 1.3892886103750040e+00 1.1128351860761567e+00 1.2120872808126895e+00 + 1.5618989152570344e+00 1.3311661149731120e+00 1.4886424154235300e+00 + 1.7049342735899877e+00 1.5425883058888052e+00 1.7638980697425701e+00 + 1.8240799557145169e+00 1.7405026135453987e+00 2.0473043164500666e+00 + 1.9222988630045914e+00 1.9177306643119767e+00 2.3472518740741171e+00 + 1.9974533526785823e+00 2.0701720759617013e+00 2.6654710531463741e+00 + 2.0475105181887705e+00 2.1947343093945872e+00 3.0030607505103668e+00 + 2.0728637619306292e+00 2.2862574235947228e+00 3.3624856375045438e+00 + 2.0734167504683070e+00 2.3379096880353893e+00 3.7429118108764339e+00 + 2.0473503994070885e+00 2.3424667039355436e+00 4.1377934856506169e+00 + 1.9919718891151965e+00 2.2928365940391231e+00 4.5385675810017752e+00 + 1.9024769180453260e+00 2.1806417773865094e+00 4.9383667044238209e+00 + 1.7701340180987204e+00 1.9965313769147246e+00 5.3236086324743370e+00 + 1.5981953353856326e+00 1.7489181919515180e+00 5.6466190193543566e+00 + 1.4416498465013832e+00 1.5735886319187853e+00 5.6838028988481515e+00 + id 13166 + loc 3.1070339679718018e-01 2.0414896309375763e-01 399 + blend 0.0000000000000000e+00 + interp 4.6517021567545291e-01:4.5953841029337789e-01:4.0095609748367200e-01:3.1413957109765839e-01:9.3083160128875497e-01:4.6516556397329617e-01:1.1533489431906252e+00:4.1616832212017035e-01:1.9101411811779236e+00:2.9350289767160609e-01:2.3561757511815027e+00:2.6454949478319095e-01:3.3457242580041289e+00:4.0156572972688342e-01:3.9239256541936198e+00 + CVs 20 + -1.5819509691725986e-01 3.6613048951130001e-01 1.6829202068657784e-01 + -3.3585186271747280e-01 7.2525410332958085e-01 3.0525754457721443e-01 + -5.4046923311242123e-01 1.0722201613745099e+00 4.1310290853532161e-01 + -7.6771571765745217e-01 1.4062001093617666e+00 5.0623601062964618e-01 + -1.0129985780457018e+00 1.7289833113687345e+00 6.0398661359532346e-01 + -1.2817389910086909e+00 2.0391432433034802e+00 7.2348461677707232e-01 + -1.5852419380517939e+00 2.3287006741645158e+00 8.8822534500238670e-01 + -1.9030980697687552e+00 2.5730809215092387e+00 1.1028806837982648e+00 + -2.2496230713822039e+00 2.7557052678742253e+00 1.3686328933932772e+00 + -2.6467317548193434e+00 2.8368623771018733e+00 1.6706177737583334e+00 + -3.0663979696352643e+00 2.7856532439993478e+00 1.9935134754754267e+00 + -3.4417007361287686e+00 2.6207296438016772e+00 2.2927162839662287e+00 + -3.7428145899189507e+00 2.4010381445556064e+00 2.5255301487563613e+00 + -3.9546528986097473e+00 2.1940286040036234e+00 2.6610607395535850e+00 + -4.0588506566239921e+00 2.0410242137599122e+00 2.6878523151113889e+00 + -4.0255634885894569e+00 1.9313560619987526e+00 2.6357462716849818e+00 + -3.8240068155630658e+00 1.8099860641717513e+00 2.5812319896219535e+00 + -3.6707868449188346e+00 1.6204839837221017e+00 2.5970546048898759e+00 + -3.9966649710223230e+00 1.5124948922109078e+00 2.5078332826530341e+00 + id 13167 + loc 8.8433367013931274e-01 2.8803077340126038e-01 393 + blend 0.0000000000000000e+00 + interp 5.0708344726177967e-01:3.8515651800016526e-01:1.4868269646080701e-01:3.4128919610270880e-01:7.6971323584525320e-01:3.6645698465532356e-01:1.2562194054875764e+00:3.9966365982655511e-01:2.0149631280804123e+00:5.0707837642730713e-01:2.6171227415894278e+00:3.0139967890316666e-01:3.2655115473657075e+00 + CVs 20 + 3.1568935816991539e-01 3.4766956213316386e-01 2.0831882503526344e-01 + 6.4529253629938488e-01 6.9521164607660879e-01 4.0175087857712610e-01 + 9.7531282013320686e-01 1.0567922512824250e+00 6.1893104160350709e-01 + 1.2904983901580083e+00 1.4063132220445205e+00 8.9536805783025408e-01 + 1.5708932113907101e+00 1.6945258746238596e+00 1.2533252424472949e+00 + 1.7971560309608581e+00 1.8922726697113501e+00 1.6916770489778319e+00 + 1.9560457166610341e+00 1.9962085130728324e+00 2.1871192644254327e+00 + 2.0480897483862899e+00 2.0159771911475413e+00 2.7042410870849078e+00 + 2.0896001350413203e+00 1.9700304642271895e+00 3.2115286504769722e+00 + 2.1056360638319944e+00 1.8808442166269173e+00 3.6895704195946970e+00 + 2.1248014899906105e+00 1.7676428754343567e+00 4.1330247764762849e+00 + 2.1752125093639916e+00 1.6387341797385222e+00 4.5445825146608305e+00 + 2.2831800684822596e+00 1.4855706545686005e+00 4.9270972887411730e+00 + 2.4699904211706643e+00 1.2836767446066868e+00 5.2683880692383509e+00 + 2.7478095721121432e+00 1.0062533318822688e+00 5.5303135220930404e+00 + 3.1208487744485796e+00 6.5678141590189654e-01 5.6547564708218294e+00 + 3.5698071415731163e+00 3.2071091685124076e-01 5.6061590375000758e+00 + 4.0537344418062879e+00 8.7121181086378119e-02 5.4341718935572993e+00 + 4.5640132880630206e+00 -7.7866016557156748e-02 5.2228611629855477e+00 + id 13168 + loc 5.8554506301879883e-01 3.6547169089317322e-01 374 + blend 0.0000000000000000e+00 + interp 4.0677810828968697e-01:3.5846962689301765e-01:7.4077292623858237e-01:3.8624331682987639e-01:1.2391746226553884e+00:3.4601458598363816e-01:1.9029978538097962e+00:4.0677404050860411e-01:2.1240404895409131e+00:3.2332681983672268e-01:2.7844894363863872e+00:3.3952607775511801e-01:3.2163465837673804e+00:3.7723587299325739e-01:3.9855305972329567e+00 + CVs 20 + 8.0621364157802555e-01 3.9078548134909585e-01 2.8496434212553839e-01 + 1.4164365850272684e+00 6.0301499918856838e-01 4.3556199221078218e-01 + 1.9905016291557540e+00 7.1291259089011438e-01 5.1384285283415798e-01 + 2.5877717967287248e+00 7.7996723048557592e-01 5.6623420010958347e-01 + 3.1893501853812705e+00 8.3925392721786751e-01 6.1995180169880593e-01 + 3.7722012561760527e+00 9.0848994088044255e-01 6.9233937828539782e-01 + 4.3379517034375707e+00 9.8233028636800390e-01 7.8851709424852956e-01 + 4.9111856702029222e+00 1.0391026640017382e+00 9.1503160459457988e-01 + 5.5155193624027650e+00 1.0480640558724958e+00 1.0865065272026169e+00 + 6.1545810427652530e+00 9.7312425752427778e-01 1.3194118391696654e+00 + 6.8073978852335255e+00 7.7723297177555351e-01 1.6136748468758348e+00 + 7.4345451854327678e+00 4.3172483106604354e-01 1.9385650045339133e+00 + 7.9845384063786753e+00 -6.5545451612762928e-02 2.2386650617225503e+00 + 8.4165849605668122e+00 -6.6346867776358520e-01 2.4626068138263815e+00 + 8.7383465145399910e+00 -1.2717255527251528e+00 2.6064357063569412e+00 + 8.9932253089499152e+00 -1.8012582862806301e+00 2.7008205614769190e+00 + 9.2211704774422110e+00 -2.1933437206907991e+00 2.7696609697501833e+00 + 9.4431133285019122e+00 -2.4896540068499746e+00 2.8445609807628269e+00 + 9.7465317914247649e+00 -2.8370588121827645e+00 2.9442233934013662e+00 + id 13169 + loc 1.7606091499328613e-01 4.3543311953544617e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8847406712457322e-01:2.9986492697987022e-01:9.3565855292753486e-01:3.8262385220797523e-01:1.8519054072177843e+00:3.0976854019293609e-01:2.6338654388473444e+00:3.4129965394904999e-01:3.2551278233742158e+00:3.8847018238390202e-01:3.9963427423785443e+00 + CVs 20 + -2.9277659881951601e-01 2.5308011666831948e-01 -1.6017937010193445e-01 + -5.6027825627395078e-01 4.9097592456122552e-01 -3.3580275744839649e-01 + -8.2648508700107959e-01 7.1782754039140739e-01 -5.3887786137377569e-01 + -1.1065393627005633e+00 9.3585857725730259e-01 -7.7202534165410930e-01 + -1.4090327212385292e+00 1.1450790913662239e+00 -1.0289055191691951e+00 + -1.7452813861850733e+00 1.3425406444029404e+00 -1.3001886992329224e+00 + -2.1267853656152402e+00 1.5217081539657364e+00 -1.5741779998915568e+00 + -2.5599518091917219e+00 1.6714967744822724e+00 -1.8372627400191626e+00 + -3.0435682652616030e+00 1.7765927884925528e+00 -2.0748279451481642e+00 + -3.5657518640998260e+00 1.8189093037981088e+00 -2.2737340743567258e+00 + -4.1032170460380533e+00 1.7817585455291165e+00 -2.4277684683959504e+00 + -4.6279851312781526e+00 1.6592964461286079e+00 -2.5431813719732883e+00 + -5.1172080878301340e+00 1.4573545183238443e+00 -2.6354324995175382e+00 + -5.5558935103406606e+00 1.1821574804480075e+00 -2.7203461343480702e+00 + -5.9317444138331830e+00 8.3022998390054825e-01 -2.8103213638444067e+00 + -6.2219334191022293e+00 3.8832382543737842e-01 -2.9100291562353595e+00 + -6.3930824915878386e+00 -1.4287658002764059e-01 -3.0132113403321457e+00 + -6.4540119499247703e+00 -7.1826719461137067e-01 -3.1061138360750635e+00 + -6.6343548228783886e+00 -1.2264211976883361e+00 -3.1587649313383839e+00 + id 13170 + loc 6.5564554929733276e-01 6.3963788747787476e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0267419797682777e-01:3.1126258897982706e-01:2.9196047713989526e-01:3.6726157145488897e-01:9.9117395002795905e-01:3.0076275187742496e-01:1.6208611057588440e+00:4.9257907563982029e-01:2.0002483809962883e+00:5.0266917123484800e-01:2.3584996149225610e+00:3.1067460770982464e-01:3.0409886639162247e+00:3.4082663158900278e-01:3.8608196576097153e+00 + CVs 20 + -6.1715582509007886e-03 3.6160543265612755e-01 2.1201777752686346e-01 + 2.3678407889971637e-02 6.5629150452000506e-01 2.9364458668088295e-01 + 4.4401223430145506e-02 9.4033877629432938e-01 3.5354148743020181e-01 + 3.8806861266796271e-02 1.2328591996948350e+00 4.2236753872708871e-01 + 7.1795780978409218e-04 1.5276920133013296e+00 4.9284384690613248e-01 + -7.7609094449645741e-02 1.8169179243904963e+00 5.5565079314225174e-01 + -2.0369901866619872e-01 2.0901952857427326e+00 6.0062405106889283e-01 + -3.8274907560733923e-01 2.3347019965847560e+00 6.2102711457091775e-01 + -6.1585825643294811e-01 2.5347061915307472e+00 6.1225853110093320e-01 + -8.9839428358165774e-01 2.6704683693114433e+00 5.6617183831290285e-01 + -1.2150384311663947e+00 2.7180102132192347e+00 4.6986212316133025e-01 + -1.5298409594170417e+00 2.6594460410917633e+00 3.1341456676199209e-01 + -1.7943569106714350e+00 2.5040161778542833e+00 1.0483092890964252e-01 + -1.9806949256157487e+00 2.2920844890240817e+00 -1.2824360281866642e-01 + -2.1009280708135538e+00 2.0687658220268648e+00 -3.5625168125847850e-01 + -2.1859653252079281e+00 1.8551227915099069e+00 -5.6496922069978417e-01 + -2.2485962680904525e+00 1.6486353329297745e+00 -7.5705281005799385e-01 + -2.2754322432580807e+00 1.4521012305436727e+00 -9.4089139229547403e-01 + -2.3596462929504174e+00 1.2829929099970454e+00 -1.0775814841132070e+00 + id 13171 + loc 4.7358483076095581e-01 9.9686361849308014e-02 407 + blend 0.0000000000000000e+00 + interp 4.8297628453810293e-01:3.4887880039105829e-01:2.1464032442512548e-01:3.0765444138560877e-01:1.1018910958397754e+00:4.0903788391605084e-01:1.9818615850676282e+00:4.8297145477525755e-01:2.4826167285967569e+00:3.4012684228618251e-01:2.9957568688779643e+00:3.3494546444019169e-01:3.4360138301446841e+00 + CVs 20 + -1.1861080046644321e-01 3.2896381631792282e-01 -2.0430901293364123e-01 + -2.2727104842097373e-01 4.9811182325716030e-01 -2.4270499476556484e-01 + -3.3497044264027709e-01 6.6438012086975828e-01 -2.1943257488182649e-01 + -4.4062424084403279e-01 8.5557451870624390e-01 -2.2464031512320626e-01 + -5.3861251243602137e-01 1.0800336769362568e+00 -2.6691075789029156e-01 + -6.1191313469319608e-01 1.3476380103553183e+00 -3.6012320404642939e-01 + -6.2638536862239225e-01 1.6530304912596605e+00 -5.1707470365082753e-01 + -5.4731008506309897e-01 1.9568907756414284e+00 -7.3089850403883894e-01 + -3.7506531626818940e-01 2.2028570370242635e+00 -9.7035680788671441e-01 + -1.4251705784906715e-01 2.3593688015304779e+00 -1.2061081817600940e+00 + 1.2027643786389525e-01 2.4244671506658166e+00 -1.4305450105405257e+00 + 3.9870673910540722e-01 2.4042762363685801e+00 -1.6514596595297530e+00 + 6.7923194640323359e-01 2.3024135272505268e+00 -1.8743528836023455e+00 + 9.3323199738207052e-01 2.1280988522035362e+00 -2.0932753634325691e+00 + 1.1338116128319753e+00 1.9060355248537229e+00 -2.3045894392145541e+00 + 1.2812108611153183e+00 1.6658044703597308e+00 -2.5199108227950227e+00 + 1.3906137873712285e+00 1.4287753609211493e+00 -2.7557855609561828e+00 + 1.4726697576942067e+00 1.2070120260787094e+00 -3.0200679215736690e+00 + 1.6190975235501186e+00 9.5172236896572349e-01 -3.3526644586388956e+00 + id 13172 + loc 5.9591478109359741e-01 3.7683784961700439e-01 373 + blend 0.0000000000000000e+00 + interp 3.0087286058122431e-01:2.2896298645577692e-01:9.1279304296150110e-01:2.4652601932186910e-01:1.5192226790150904e+00:3.0086985185261850e-01:2.0125746364754722e+00:2.5833066164336826e-01:2.7020771420790020e+00:2.6892273296011066e-01:3.7606618061873220e+00 + CVs 20 + 1.3786225156443616e-01 4.1146272763144615e-01 1.0861677950330052e-01 + 2.8488619248967750e-01 7.8881069380835456e-01 2.0309940812601363e-01 + 4.2418516372046250e-01 1.0611590267833042e+00 2.7969844800897636e-01 + 5.3050410159694916e-01 1.2162118116552005e+00 3.9876917281390378e-01 + 5.2424737176426250e-01 1.4053743112443697e+00 5.6784063387704919e-01 + 4.6610369526311934e-01 1.6709080877103242e+00 6.1903293952754890e-01 + 4.8218373823361743e-01 1.8931764468570893e+00 5.4415611546540532e-01 + 5.9495569174834562e-01 2.0697384120383777e+00 4.3131788622916911e-01 + 7.8294667601236889e-01 2.2623629256676665e+00 3.2789689640263242e-01 + 1.0088763742660531e+00 2.5256495440331403e+00 2.6379703628055673e-01 + 1.2416645861741982e+00 2.8818792408229350e+00 2.5936080903976305e-01 + 1.4783806691801018e+00 3.3206505650390139e+00 3.2951641760837369e-01 + 1.7223211018578790e+00 3.8019795193480497e+00 5.2354791217290964e-01 + 1.9474012842727488e+00 4.2272616627953088e+00 9.1555041935689241e-01 + 2.0845090254153456e+00 4.4361342745354087e+00 1.5101301327684595e+00 + 2.0693728859732818e+00 4.2739981765971624e+00 2.1489132815720868e+00 + 2.0570154310219757e+00 3.7710637795416142e+00 2.6200425427541516e+00 + 2.2818171954740074e+00 3.1627576661275265e+00 2.8082456937023026e+00 + 2.7053324067123161e+00 2.6260508243553846e+00 2.7620483853507265e+00 + id 13173 + loc 1.2395679950714111e-01 8.6697173118591309e-01 402 + blend 0.0000000000000000e+00 + interp 5.0802605407965595e-01:2.7514686991232729e-01:5.1996557174767122e-01:4.1938444063447256e-01:9.6446339472907550e-01:4.5995381588029294e-01:1.1594314078896770e+00:3.7843200823218642e-01:1.9492019416927464e+00:3.6393119867862467e-01:2.2758033681238574e+00:5.0802097381911515e-01:2.8674940432212814e+00:4.3216215635405958e-01:3.3699587619571623e+00:2.8764952153303180e-01:3.9583238583985967e+00 + CVs 20 + -4.6036067877676612e-02 2.9918325015779196e-01 -2.4325627375047790e-01 + -7.8509800068404884e-02 5.9580310530377167e-01 -4.6554701073969562e-01 + -8.7947422193687341e-02 9.0427231114662654e-01 -7.1998023072861472e-01 + -6.8893483543314982e-02 1.2150215998558211e+00 -1.0294850550815515e+00 + -2.1308762889994948e-02 1.5062307200964875e+00 -1.3986326317815465e+00 + 4.4326116578591090e-02 1.7588795040169556e+00 -1.8280214075449548e+00 + 9.9321859491520170e-02 1.9613126857748788e+00 -2.3219889055564717e+00 + 1.0435108469509602e-01 2.0986700633518094e+00 -2.8797984507233059e+00 + 2.4154744960303010e-02 2.1482974177336747e+00 -3.4795613702280686e+00 + -1.5698820560919957e-01 2.0926143989506696e+00 -4.0785338872152703e+00 + -4.2860470189306632e-01 1.9333012554074198e+00 -4.6279783288457912e+00 + -7.5992163824170345e-01 1.6893971338645990e+00 -5.0874146300490146e+00 + -1.1179029012976274e+00 1.3840183706095881e+00 -5.4444604319642913e+00 + -1.4917565051060304e+00 1.0339467460319067e+00 -5.7109777992219106e+00 + -1.8801508439999963e+00 6.6433312885267370e-01 -5.8837608374717218e+00 + -2.2752572141170155e+00 3.1403190557821448e-01 -5.9544719019539034e+00 + -2.6907248450677024e+00 -1.7085320326080122e-03 -5.9844702338645615e+00 + -3.1485826550695606e+00 -2.8649690311709891e-01 -6.1044774371541930e+00 + -3.6349070248659792e+00 -5.2647006561208798e-01 -6.3870517338594857e+00 + id 13174 + loc 4.2484024167060852e-01 5.1351487636566162e-01 403 + blend 0.0000000000000000e+00 + interp 4.6215192506418823e-01:2.9723019575113341e-01:2.3844792202478959e-01:3.4541104727404670e-01:9.8977390207486882e-01:3.7451795399800131e-01:1.4602896062807849e+00:4.1940303689562153e-01:1.9945756407286921e+00:3.4051933594696432e-01:2.7140466817232407e+00:4.6214730354493760e-01:3.0145500506361267e+00:3.6020288825141095e-01:3.8891491646698610e+00 + CVs 20 + -2.9589487795529681e-02 1.3925247192142548e-01 -1.6545863193586827e-01 + -5.8384419070326182e-02 2.8476710391122811e-01 -3.1773510313071984e-01 + -1.0144599838010263e-01 4.2730057567834995e-01 -4.6565979007963032e-01 + -1.6581253664809431e-01 5.6199770482444600e-01 -6.1166403826353277e-01 + -2.5399418716882483e-01 6.8784238150740573e-01 -7.5324063383168827e-01 + -3.6851167875987051e-01 8.0554696090793865e-01 -8.8628483086257259e-01 + -5.0978522806252702e-01 9.1584795554461307e-01 -1.0051328471887109e+00 + -6.7498091948734518e-01 1.0193851781596317e+00 -1.1043059795190782e+00 + -8.5934898667362092e-01 1.1168657001938929e+00 -1.1797127491265313e+00 + -1.0579253961072475e+00 1.2082578969949522e+00 -1.2288274074290026e+00 + -1.2665565489684207e+00 1.2925139748829455e+00 -1.2505960678661330e+00 + -1.4821113070308016e+00 1.3682165864323148e+00 -1.2451393731068250e+00 + -1.7024236318572572e+00 1.4340038072107650e+00 -1.2129955759995650e+00 + -1.9251053024449225e+00 1.4884305571135443e+00 -1.1540230716401609e+00 + -2.1455078013287752e+00 1.5301400240979448e+00 -1.0683026149850472e+00 + -2.3583453458849637e+00 1.5577391981822419e+00 -9.5844753330863675e-01 + -2.5619416610319643e+00 1.5694358227425729e+00 -8.3013007409149830e-01 + -2.7568920125034779e+00 1.5646069882312388e+00 -6.9081255341303438e-01 + -2.9445441183292171e+00 1.5664543066093646e+00 -5.7109599917036991e-01 + id 13175 + loc 5.4761415719985962e-01 5.6368011236190796e-01 396 + blend 0.0000000000000000e+00 + interp 4.6683259225393814e-01:2.8625575922926855e-01:6.2938201207951572e-05:4.4433997336588732e-01:6.4411626319947424e-01:3.4164507538656752e-01:1.2565812988911664e+00:2.5013691055998077e-01:2.0200496252986455e+00:3.8379247150089008e-01:3.0004072900323058e+00:4.6682792392801564e-01:3.4453705990234891e+00 + CVs 20 + 8.3622568678472675e-01 1.6474450750305497e-01 -3.5633434879327164e-01 + 1.4073538621972581e+00 1.4122736812029185e-01 -6.5558606956962961e-01 + 1.9103431147691055e+00 4.6071829466404979e-02 -9.3680396964428470e-01 + 2.4058798703977193e+00 -7.6875359853252334e-02 -1.2055696498252773e+00 + 2.8827121968360427e+00 -2.1701107254851471e-01 -1.4521274266053297e+00 + 3.3340018366997217e+00 -3.5943244520280337e-01 -1.6731792604977174e+00 + 3.7571398413820769e+00 -4.8897828450602909e-01 -1.8705686520882632e+00 + 4.1548747733300821e+00 -5.9568261336333550e-01 -2.0488166173140989e+00 + 4.5380496200173104e+00 -6.7961878173802370e-01 -2.2145022318110983e+00 + 4.9221263059378915e+00 -7.5353002477998188e-01 -2.3767512220129721e+00 + 5.3183362623593124e+00 -8.4358195549647386e-01 -2.5495007915714276e+00 + 5.7249535705485464e+00 -9.8242081695470307e-01 -2.7466341858741918e+00 + 6.1288479421580755e+00 -1.1941735701496790e+00 -2.9675416210118843e+00 + 6.5113277009070991e+00 -1.4878188034342867e+00 -3.1966713977347911e+00 + 6.8501821743357274e+00 -1.8562820970878831e+00 -3.4176860444771440e+00 + 7.1263505333549055e+00 -2.2811768916503423e+00 -3.6233436905723124e+00 + 7.3288370652453558e+00 -2.7443946578526415e+00 -3.8143507731626327e+00 + 7.4548784288921182e+00 -3.2224204354180799e+00 -3.9895879066871767e+00 + 7.4949336608353452e+00 -3.6554015623647542e+00 -4.1194845336035089e+00 + id 13176 + loc 4.5273903012275696e-01 1.0084850341081619e-01 395 + blend 0.0000000000000000e+00 + interp 4.2458917494060749e-01:4.2458492904885808e-01:9.0434918518824348e-02:3.7450673770643583e-01:8.2576015001860126e-01:2.9198167240020290e-01:1.7823913591589418e+00:2.9293075284192416e-01:2.6169643791371113e+00:3.4246650006744689e-01:3.7991042235945391e+00 + CVs 20 + -2.5531576645924531e-01 2.5982596496573018e-01 -4.7074525510252435e-01 + -4.8617861044021471e-01 4.6173371442196898e-01 -8.9525364819896014e-01 + -7.0494067818463613e-01 6.3286709092866489e-01 -1.3111731141182315e+00 + -9.2041862897837912e-01 7.8099584514011333e-01 -1.7368504473509505e+00 + -1.1357647327680118e+00 9.0159398351226105e-01 -2.1739429579803544e+00 + -1.3604841009845949e+00 9.9292959213992327e-01 -2.6226591161527963e+00 + -1.5989525425983628e+00 1.0462436377360049e+00 -3.0789923667196692e+00 + -1.8450563962400350e+00 1.0406213490064551e+00 -3.5353227970650654e+00 + -2.0945604970553808e+00 9.5729604721780515e-01 -3.9815910333643281e+00 + -2.3515876846451333e+00 7.9336960781194987e-01 -4.4037270057209303e+00 + -2.6156647546185381e+00 5.6645793751961060e-01 -4.7869257048147142e+00 + -2.8755040105141108e+00 3.0724262728859575e-01 -5.1302226501672381e+00 + -3.1303245925562866e+00 4.1965499169345666e-02 -5.4449446833178472e+00 + -3.4025314132908653e+00 -2.1788931716099658e-01 -5.7356678916904276e+00 + -3.7140903636828213e+00 -4.7423064254509040e-01 -5.9919101758139472e+00 + -4.0588028918615393e+00 -7.4424230000938962e-01 -6.1922388150212360e+00 + -4.4142049961093868e+00 -1.0513620632771010e+00 -6.3187580548349018e+00 + -4.7706109619941746e+00 -1.3788127033531885e+00 -6.3867066459667825e+00 + -5.1148605278614250e+00 -1.5353273701412147e+00 -6.5567438141254186e+00 + id 13177 + loc 3.6724033951759338e-01 9.4486957788467407e-01 1078 + blend 0.0000000000000000e+00 + interp 3.5839929361071460e-01:3.1785775739064326e-01:2.4534085377113657e-02:3.5839570961777850e-01:9.4728192268273437e-01:3.5387140385548121e-01:1.7546520608953171e+00:3.1024619473418202e-01:2.4873187617907031e+00:3.1641461672342514e-01:2.9914350766643460e+00 + CVs 20 + 1.1239681748002397e-01 1.8632489144121239e-01 -1.2990749500914006e-01 + 2.4156673486603819e-01 3.4788569862166807e-01 -2.5890662999280378e-01 + 3.6392782734036244e-01 4.9657620839834538e-01 -3.9156293105696138e-01 + 4.7213188824736874e-01 6.2654704728245425e-01 -5.2559933452094509e-01 + 5.6631219580904957e-01 7.4055171923906105e-01 -6.6055080365803365e-01 + 6.4555166110103901e-01 8.4379746708319348e-01 -7.9730010774317384e-01 + 7.0803724746287255e-01 9.4203516290201339e-01 -9.3794750088444567e-01 + 7.5140913924236252e-01 1.0404959581679880e+00 -1.0847599569215600e+00 + 7.7322906862640961e-01 1.1410087387896883e+00 -1.2380556593220688e+00 + 7.7351729790412105e-01 1.2392472146499784e+00 -1.3935051315760343e+00 + 7.5593496076485112e-01 1.3291036421058715e+00 -1.5448267665834554e+00 + 7.2591609451520678e-01 1.4076298943688281e+00 -1.6874077656966695e+00 + 6.8823774947498007e-01 1.4761034953157011e+00 -1.8191906045598008e+00 + 6.4497058300304111e-01 1.5383619335336081e+00 -1.9409463663242783e+00 + 5.9561245349339964e-01 1.5976754903388879e+00 -2.0553669264488259e+00 + 5.4120974892155438e-01 1.6542710026099310e+00 -2.1626045878967646e+00 + 4.8672114160408630e-01 1.7073620384661843e+00 -2.2577190806947631e+00 + 4.3684927093003639e-01 1.7576526429080739e+00 -2.3358944346955584e+00 + 4.1682078956128082e-01 1.7853504337024555e+00 -2.3533377464369578e+00 + id 13178 + loc 7.4028354883193970e-01 5.3668153285980225e-01 375 + blend 0.0000000000000000e+00 + interp 4.0994626403749590e-01:3.5402127509067677e-01:7.2055098253638139e-01:2.5023871173318962e-01:1.6021769362041554e+00:3.6563915944211867e-01:2.6159648151300559e+00:2.6627690444915969e-01:2.9969139286670896e+00:4.0994216457485555e-01:3.7079991165045456e+00 + CVs 20 + -5.1678031641403510e-01 4.1258497320893323e-01 -1.3967284614177661e-01 + -1.0019709549087945e+00 6.6297576101519040e-01 -2.2560851067708101e-01 + -1.5089448817810669e+00 7.4439654857743243e-01 -2.5401209242973033e-01 + -2.0463280327712630e+00 7.1423532532184364e-01 -2.3605699507553035e-01 + -2.5861227529137265e+00 6.5667938603255471e-01 -1.9217488015122580e-01 + -3.1022732436740359e+00 6.2251539458126737e-01 -1.5577500237412467e-01 + -3.5964743538454087e+00 6.2221766787546495e-01 -1.5882091166272116e-01 + -4.0813259174333183e+00 6.5924061108585530e-01 -2.2398526572307098e-01 + -4.5471603813263588e+00 7.3817001401320748e-01 -3.6189804195227515e-01 + -4.9691267711364686e+00 8.5164970069915191e-01 -5.6517375770719658e-01 + -5.3305439863280615e+00 9.7519660701911359e-01 -8.0319048795138726e-01 + -5.6302495562478478e+00 1.0841143204458199e+00 -1.0347411917969127e+00 + -5.8839385432705971e+00 1.1661488835102070e+00 -1.2420523406621600e+00 + -6.1174311711504776e+00 1.2080282596085596e+00 -1.4394001073220319e+00 + -6.3308397563846803e+00 1.2137917326537790e+00 -1.6295030473481358e+00 + -6.4631448425023343e+00 1.2549218740721124e+00 -1.7813043002877711e+00 + -6.4148599450960173e+00 1.4740370776457081e+00 -1.9005172542022903e+00 + -6.1964903375057121e+00 1.6872179943658969e+00 -2.0674380522233275e+00 + -6.2947627122604004e+00 1.3987727760751092e+00 -1.9303229594963613e+00 + id 13179 + loc 1.4655338600277901e-02 5.9373420476913452e-01 401 + blend 0.0000000000000000e+00 + interp 3.7265132720323169e-01:2.1756754648126617e-01:5.5042702259253229e-02:2.6103719855033880e-01:1.1519019758852238e+00:3.7264760068995967e-01:2.0036486098752815e+00:3.4446609313460563e-01:2.9138605311236203e+00:3.1017560732029004e-01:3.4283772450023693e+00 + CVs 20 + -6.3380729225436361e-02 2.6185767132290549e-01 -2.4619176441461016e-01 + -1.3828989615654363e-01 5.0795863087470428e-01 -4.8410035625063125e-01 + -2.2604988921880781e-01 7.3466420159555990e-01 -7.1869743468290859e-01 + -3.2522590689566455e-01 9.3616128579886371e-01 -9.4977556574240185e-01 + -4.3167388846954291e-01 1.1075193747233820e+00 -1.1741050046748840e+00 + -5.4075846888931156e-01 1.2485842529683209e+00 -1.3891653889934692e+00 + -6.5242744093768312e-01 1.3649893017031558e+00 -1.5966307318122563e+00 + -7.7295007518095604e-01 1.4641366849089226e+00 -1.8024185235766594e+00 + -9.1219139320038023e-01 1.5515967875934289e+00 -2.0115254342438980e+00 + -1.0817904588712566e+00 1.6290678856494738e+00 -2.2250702293374611e+00 + -1.2892500988092299e+00 1.6959246629475195e+00 -2.4431265381192135e+00 + -1.5380833647484735e+00 1.7499730449297051e+00 -2.6698108406179473e+00 + -1.8327289337389254e+00 1.7773945126671793e+00 -2.9121468834758995e+00 + -2.1732468908642790e+00 1.7438586176348596e+00 -3.1763435451239350e+00 + -2.5580698256686167e+00 1.6172443771932339e+00 -3.4522229806548395e+00 + -2.9902503578147788e+00 1.3899523914263012e+00 -3.6924676074989708e+00 + -3.4998168708169204e+00 1.0871861333336013e+00 -3.8318080521795270e+00 + -4.0954355683163541e+00 7.9754311303462078e-01 -3.7701021913434154e+00 + -4.5385748540843673e+00 7.4864182612707342e-01 -3.5812832059972535e+00 + id 13180 + loc 3.1604698300361633e-01 7.2443139553070068e-01 415 + blend 0.0000000000000000e+00 + interp 4.2962914574697897e-01:3.2389397868295672e-01:7.5168735161786471e-01:3.7079603499986996e-01:1.1346969334734811e+00:4.2922813305089230e-01:1.6683221810322908e+00:4.2337207892348033e-01:2.0260767097008596e+00:2.3073755005824303e-01:2.5417217104571299e+00:3.3737415501267087e-01:3.0290296560255454e+00:2.7372061827327226e-01:3.5937161524214787e+00:4.2962484945552154e-01:3.9950040343088453e+00 + CVs 20 + 4.0205146188582064e-01 2.1410753321577791e-01 1.1546028117054685e-01 + 7.1287967162428267e-01 3.2542827419339354e-01 1.6210768977641030e-01 + 9.9845993753100704e-01 3.9209938590354032e-01 2.0300404868537986e-01 + 1.2886257765590452e+00 4.4039639797449681e-01 2.7002007767143926e-01 + 1.5777955443108791e+00 4.6736183458658520e-01 3.6320625845706817e-01 + 1.8600597267731942e+00 4.7153090059183678e-01 4.8229932880001497e-01 + 2.1289887347310721e+00 4.5323147816432252e-01 6.2715360228734518e-01 + 2.3786159256331354e+00 4.1425648446200802e-01 7.9611627910353788e-01 + 2.6054216538614354e+00 3.5747404780520153e-01 9.8523526400577000e-01 + 2.8077004178931215e+00 2.8597903967237026e-01 1.1900310960072500e+00 + 2.9807226826826287e+00 2.0360703525486579e-01 1.4052525223983383e+00 + 3.1135117916284534e+00 1.1649316505154217e-01 1.6219532645645225e+00 + 3.2021037674254300e+00 2.9781916230127381e-02 1.8295724959035038e+00 + 3.2679892672852286e+00 -5.9563311541447339e-02 2.0212166283784101e+00 + 3.3417099922656086e+00 -1.5955208400310372e-01 2.1873281799560860e+00 + 3.4287383716835587e+00 -2.7001349274417352e-01 2.3189031961316058e+00 + 3.5156891950921594e+00 -3.8380476798860541e-01 2.4183904065853783e+00 + 3.5939163209027112e+00 -4.9696935291572397e-01 2.4920578919306813e+00 + 3.7396285132668736e+00 -6.7308213914816473e-01 2.4500016424592044e+00 + id 13181 + loc 5.0597465038299561e-01 9.4981825351715088e-01 382 + blend 0.0000000000000000e+00 + interp 5.5056006465501039e-01:3.9412080548296630e-01:1.0453320576969560e-01:4.5363269416988389e-01:8.8191140378790034e-01:5.5055455905436390e-01:1.1639632875505141e+00:4.9371716982595815e-01:1.7186184002284832e+00:3.1970043268392839e-01:2.0098296477574982e+00:4.6203595421216115e-01:2.9810123818721195e+00:2.9770635153390917e-01:3.3831085716429214e+00 + CVs 20 + 1.0034922839265215e+00 1.6058668564412620e-01 -5.6765138672085147e-01 + 1.5992856356253939e+00 1.9770426308739580e-01 -9.9893106401635512e-01 + 2.0695576339968489e+00 1.9279668080419918e-01 -1.3943228712705464e+00 + 2.5395542170411400e+00 1.8354976814044016e-01 -1.7938309989487029e+00 + 3.0129249062984389e+00 1.5943039591788738e-01 -2.1812968949970628e+00 + 3.5014497593572425e+00 1.1616889534662328e-01 -2.5363589330973006e+00 + 4.0155981891446828e+00 5.1709089198846536e-02 -2.8522827910521027e+00 + 4.5600851051241476e+00 -3.6659399885789923e-02 -3.1401353122258397e+00 + 5.1309790692815982e+00 -1.5704438132079468e-01 -3.4182007249760931e+00 + 5.7165929172386072e+00 -3.2557381960712772e-01 -3.7013344536323993e+00 + 6.2932481310079487e+00 -5.6098420618524181e-01 -4.0022267209686460e+00 + 6.8211710044636398e+00 -8.7031539362591626e-01 -4.3327061413681314e+00 + 7.2620697273226495e+00 -1.2474612585282601e+00 -4.7033186174943395e+00 + 7.5924799715084896e+00 -1.6798525486705627e+00 -5.1169887736103385e+00 + 7.8017014257352386e+00 -2.1534665668176776e+00 -5.5685770561175270e+00 + 7.8865679647367477e+00 -2.6522924001633688e+00 -6.0482908649208298e+00 + 7.8490390547934705e+00 -3.1623007106566776e+00 -6.5378958372974978e+00 + 7.6962503785153560e+00 -3.6695260839146719e+00 -7.0077321222172975e+00 + 7.4048312972537680e+00 -4.0763505978089887e+00 -7.3173313961325057e+00 + id 13182 + loc 2.3904095869511366e-03 9.0671449899673462e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9980620059086824e-01:3.9980220252886234e-01:2.6393553533119452e-03:2.9503422934207946e-01:8.6623614816867645e-01:2.8293164629050277e-01:1.4379115225070171e+00:2.8811430542286154e-01:2.0410552785182956e+00:3.0341261850322598e-01:2.8733901859707061e+00:3.9118709623534731e-01:3.6214117492631885e+00 + CVs 20 + 2.8242440508365729e-01 1.8292702204737155e-01 -1.4537692912972469e-01 + 5.7118428061689130e-01 3.8637112129729151e-01 -3.2358078782398680e-01 + 8.7413951696637227e-01 6.0456836003950054e-01 -5.1060001285453716e-01 + 1.1797644299101189e+00 8.4446259704268689e-01 -7.0876803605628691e-01 + 1.4627576401080098e+00 1.1122390574633194e+00 -9.3552644418292452e-01 + 1.6902165837991268e+00 1.3939615697752279e+00 -1.2101674504739033e+00 + 1.8336202785907734e+00 1.6431395589025810e+00 -1.5434478670036973e+00 + 1.8886945384202412e+00 1.7850019561828048e+00 -1.9220699055364907e+00 + 1.8754530510030261e+00 1.7592218017554400e+00 -2.3010522500076585e+00 + 1.8211361267210295e+00 1.5722359473359098e+00 -2.6220648683409582e+00 + 1.7568868828321171e+00 1.2911920330849571e+00 -2.8600556134107262e+00 + 1.7130351675601538e+00 9.8625435296042896e-01 -3.0417852029227359e+00 + 1.7070168200840903e+00 6.9324734631055585e-01 -3.2053901335811394e+00 + 1.7532004726343287e+00 4.3204372204681524e-01 -3.3673991191419117e+00 + 1.8838081123999328e+00 2.3187416253080240e-01 -3.5151854806338347e+00 + 2.1570271310417528e+00 1.6194377378235714e-01 -3.5800912192799959e+00 + 2.5282748068240211e+00 3.3097585037454003e-01 -3.4652102737166821e+00 + 2.7803264150873730e+00 5.7066274534757611e-01 -3.3094580561980482e+00 + 3.0056853372761556e+00 4.1231192311738613e-01 -3.4338657354707993e+00 + id 13183 + loc 7.2874355316162109e-01 9.5608448982238770e-01 377 + blend 0.0000000000000000e+00 + interp 4.5201628521946841e-01:2.9455819292699942e-01:1.3704012596423110e-01:3.9983525081612625e-01:9.9370725131019022e-01:4.2105201998251846e-01:1.3562001621496376e+00:3.7270757636893465e-01:2.0213715748921630e+00:4.5201176505661622e-01:2.5905439846680682e+00:2.9321467670242396e-01:3.2673275142757028e+00 + CVs 20 + -6.3513479653491478e-01 2.3901680753706545e-01 -5.6463611386478152e-01 + -1.1053730790500704e+00 3.7752099195539823e-01 -9.4417061472775377e-01 + -1.5232408047367407e+00 4.9128794716857088e-01 -1.2857787479907321e+00 + -1.9268503694043764e+00 6.2135165423405248e-01 -1.6508325350033852e+00 + -2.3071389290567614e+00 7.7309468053530161e-01 -2.0405294247231964e+00 + -2.6635380548844010e+00 9.4806902835630691e-01 -2.4636196360726319e+00 + -3.0109814554272498e+00 1.1332358573778973e+00 -2.9313472505535376e+00 + -3.3668975063250075e+00 1.2969738677373632e+00 -3.4514774072084542e+00 + -3.7361731185686606e+00 1.3930207777212518e+00 -4.0269544076198871e+00 + -4.1134470618776398e+00 1.3727047178816218e+00 -4.6504689236332064e+00 + -4.4950481794130388e+00 1.1988298791863841e+00 -5.2940982256033315e+00 + -4.8715106729594604e+00 8.5228613524473396e-01 -5.9077264664893443e+00 + -5.1991886334219428e+00 3.3924889681593084e-01 -6.4193085530210947e+00 + -5.4052893094623071e+00 -2.8346689805703162e-01 -6.7423015599085669e+00 + -5.4600145271449270e+00 -9.3412164795187458e-01 -6.8489091094762928e+00 + -5.3976568077985103e+00 -1.5916124845385591e+00 -6.8191287731890782e+00 + -5.2699385450102207e+00 -2.2854647835322655e+00 -6.7742045389732732e+00 + -5.1573742274186802e+00 -3.0176174987651425e+00 -6.7771573930301452e+00 + -5.1624528902950750e+00 -3.5964397482697628e+00 -6.7509305116317027e+00 + id 13184 + loc 1.9629125297069550e-01 2.4233266711235046e-01 400 + blend 0.0000000000000000e+00 + interp 4.7507382940910364e-01:3.1281517940626169e-01:1.3350919617997037e-01:4.3372197809385538e-01:8.5006734259153027e-01:4.7506907867080955e-01:1.1514721809696993e+00:3.3526660309100864e-01:1.9574072783505612e+00:4.4852817428020719e-01:2.7474102018058364e+00:4.6889401485802712e-01:3.1122656462118128e+00:4.7083931040638027e-01:3.8843510276919249e+00 + CVs 20 + -1.0585455164693999e-01 1.8511343559767474e-01 1.9609317794489675e-01 + -2.2623227147381386e-01 3.7081484259470987e-01 4.2087388031631112e-01 + -3.6655145796140653e-01 5.4691493039739214e-01 6.4904466888000345e-01 + -5.2743391385580463e-01 7.0495073328674052e-01 8.6441731081585815e-01 + -7.0432681487826510e-01 8.3768090553344499e-01 1.0598384292988061e+00 + -8.8765401123468723e-01 9.3803758903444656e-01 1.2275149938217074e+00 + -1.0679490788416188e+00 1.0039251590597520e+00 1.3615803121679864e+00 + -1.2403660242078574e+00 1.0405889283813756e+00 1.4600198214217508e+00 + -1.4091954146809362e+00 1.0564143322970359e+00 1.5268462839566339e+00 + -1.5859538717756037e+00 1.0553361523662144e+00 1.5709423797136328e+00 + -1.7778433708855865e+00 1.0353817691869438e+00 1.6010716525015931e+00 + -1.9811785894697751e+00 9.9487955483978963e-01 1.6220508512501151e+00 + -2.1870475857604417e+00 9.4539890385083458e-01 1.6309192465787778e+00 + -2.3956239900663481e+00 9.0584134333675936e-01 1.6235131916958057e+00 + -2.6068493203417091e+00 8.5845157704441544e-01 1.6017226771862505e+00 + -2.7687996428449773e+00 7.2625848618413769e-01 1.5630468876315606e+00 + -2.8229079849488965e+00 3.8313919350362613e-01 1.5136360025566473e+00 + -2.9482069487072944e+00 -4.3896177176638851e-02 1.4817592036628759e+00 + -3.0987961297102453e+00 1.0076921800382954e-01 1.3743278824068164e+00 + id 13185 + loc 6.5454399585723877e-01 7.9433929920196533e-01 409 + blend 0.0000000000000000e+00 + interp 3.4675170791164506e-01:3.3698419399623980e-01:1.7446542129774800e-01:3.3854390555570274e-01:9.8556987867569201e-01:3.2531269186152295e-01:1.6981709150389035e+00:3.1448491484100033e-01:2.3397242281259967e+00:3.4674824039456598e-01:3.0107769196088587e+00:3.2267482618771881e-01:3.7422338476616628e+00 + CVs 20 + 5.1136474559343326e-01 8.9853938252759114e-02 -1.9465204105765088e-01 + 9.2721784152477438e-01 1.1862902510423090e-01 -3.7958999356150602e-01 + 1.3152455051569483e+00 1.2604725999493593e-01 -5.4010363453982291e-01 + 1.6857182723034827e+00 1.2378710597512099e-01 -6.7333912573982446e-01 + 2.0278346078212692e+00 1.1368901503449680e-01 -7.8238273445381457e-01 + 2.3349032455358039e+00 1.0097841523908468e-01 -8.7107873264686053e-01 + 2.6019401212230568e+00 9.4101386595696113e-02 -9.4314351060784840e-01 + 2.8281567335431683e+00 1.0450872816581147e-01 -1.0018915722360728e+00 + 3.0216806060079144e+00 1.4433090634833068e-01 -1.0471849047675090e+00 + 3.1983082153356852e+00 2.2449591645765232e-01 -1.0748740374581538e+00 + 3.3835581522639533e+00 3.4593608295924483e-01 -1.0849865310371856e+00 + 3.6064336221197935e+00 4.8501206596695123e-01 -1.0869674479341123e+00 + 3.8803044065636207e+00 6.0543238698034307e-01 -1.0925705778655233e+00 + 4.2021836194262132e+00 6.8211965510369721e-01 -1.1083327474825597e+00 + 4.5632959977698047e+00 7.0374698720462847e-01 -1.1441210055612694e+00 + 4.9514031215109995e+00 6.6399909858466022e-01 -1.2191053795861486e+00 + 5.3423323296419429e+00 5.5644263280365625e-01 -1.3376600799266274e+00 + 5.6890866028504172e+00 3.8606755763871137e-01 -1.4664628623490645e+00 + 5.8437817482335426e+00 1.8089570415816336e-01 -1.5795939590354071e+00 + id 13186 + loc 3.8627916574478149e-01 7.3097193241119385e-01 411 + blend 0.0000000000000000e+00 + interp 3.5487338748438058e-01:2.4762848921249506e-01:6.2472010039108317e-01:3.3608755899337572e-01:1.2170668141740653e+00:3.5486983875050576e-01:1.9470256150519125e+00:2.4924769223896806e-01:2.4005722613947258e+00:3.1960091800802709e-01:3.0308514149885712e+00:2.9067173313538613e-01:3.7756307347908677e+00 + CVs 20 + 8.4223922766287185e-01 1.8151117991075819e-01 -5.9266632345575290e-02 + 1.3909778312222218e+00 2.5233028661903034e-01 -8.2360113029723195e-02 + 1.8493116241058145e+00 2.8900494571305158e-01 -6.9507786745452743e-02 + 2.3065943046996193e+00 3.3094660491924882e-01 -1.5791996860577306e-02 + 2.7686797679031812e+00 3.7506548552794716e-01 7.6338119260139559e-02 + 3.2456785272074340e+00 4.1301006381747207e-01 1.9976566837748685e-01 + 3.7480881334764984e+00 4.3264613948629882e-01 3.4167855364273159e-01 + 4.2837406943567862e+00 4.1583515810338278e-01 4.8794801493224765e-01 + 4.8549796224266117e+00 3.3530459086856190e-01 6.2790614372779230e-01 + 5.4497816710508680e+00 1.6027940301699850e-01 7.4862999654278761e-01 + 6.0302794383575620e+00 -1.2981293473089939e-01 8.2769013232932531e-01 + 6.5427546732961392e+00 -5.3346448083455078e-01 8.4447224604828386e-01 + 6.9494267557936622e+00 -1.0313634719312963e+00 7.9629928580554132e-01 + 7.2373597579308946e+00 -1.5989336329655299e+00 6.9354998453114269e-01 + 7.4018461632462698e+00 -2.2022736707758863e+00 5.4806481124535555e-01 + 7.4430921923132889e+00 -2.7999080265125409e+00 3.7424913697652568e-01 + 7.3701898492969899e+00 -3.3564818782277941e+00 1.9142774318715366e-01 + 7.2045897856050818e+00 -3.8504632413288702e+00 1.3618079797884097e-02 + 7.0261110775975091e+00 -4.3468904502575905e+00 -1.4827214485242285e-01 + id 13187 + loc 8.2001739740371704e-01 6.8191811442375183e-02 399 + blend 0.0000000000000000e+00 + interp 4.5137260444561711e-01:4.5136809071957268e-01:2.2975695935781271e-01:3.0909093783516928e-01:9.5564519729731778e-01:2.4080234647585469e-01:1.5326820686105644e+00:3.6369838048918823e-01:2.2332678139756932e+00:4.2945942711936158e-01:3.0229487181925725e+00:2.6074774218300295e-01:3.5080267171277417e+00 + CVs 20 + 2.2370389473569838e-01 2.6592414339381265e-01 2.8501216660434925e-01 + 4.1100292128103272e-01 5.0335472660795677e-01 5.6081225346574182e-01 + 5.6724352606587936e-01 7.1677981021330228e-01 8.6021934163588587e-01 + 7.0367271190994085e-01 9.1112344369689624e-01 1.1982426083945488e+00 + 8.3401206114157511e-01 1.0889874417878769e+00 1.5708690238136200e+00 + 9.7051970671404397e-01 1.2491362150117000e+00 1.9705836612090171e+00 + 1.1217251021918573e+00 1.3854482229380749e+00 2.3910267723184209e+00 + 1.2955486935630567e+00 1.4862351396536433e+00 2.8262987628858833e+00 + 1.4995544708603596e+00 1.5333151533726412e+00 3.2682928835975189e+00 + 1.7372343363086182e+00 1.5042045527441203e+00 3.7038002967314689e+00 + 2.0067725655717958e+00 1.3778026332245223e+00 4.1147638366126227e+00 + 2.3038155191731255e+00 1.1499677834482114e+00 4.4822022876844114e+00 + 2.6223689384722673e+00 8.4807087905000311e-01 4.7941383430103093e+00 + 2.9558068209422772e+00 5.2930893188600603e-01 5.0607211947374537e+00 + 3.2925917382520078e+00 2.6095955312522712e-01 5.3163261872353589e+00 + 3.5930387227092302e+00 9.4243933017963855e-02 5.5971729896003986e+00 + 3.7982338214213187e+00 4.7916627401967782e-02 5.9258342103348793e+00 + 3.9338064587013424e+00 6.5756238745832585e-02 6.3235618039815984e+00 + 4.1649116298470661e+00 -2.0995631815012850e-03 6.8150181959393716e+00 + id 13188 + loc 3.8642223924398422e-02 4.5560291409492493e-01 393 + blend 0.0000000000000000e+00 + interp 4.7629864044162901e-01:3.9171480191130592e-01:4.7913390796757149e-01:4.6871780908203658e-01:9.7371103009590321e-01:3.2141899922108508e-01:1.5521169175320786e+00:4.3937969251161629e-01:2.0045526785737122e+00:2.8087386441813356e-01:2.6097526399969948e+00:3.1962245145658952e-01:2.9297262419131207e+00:4.7629387745522461e-01:3.5231422931887519e+00:3.1015673652801184e-01:3.9954879472234368e+00 + CVs 20 + -1.6835166561883419e-01 2.7473341178974203e-01 2.5245263967272713e-01 + -3.3189827607664707e-01 5.5279855839903880e-01 5.2190966835957431e-01 + -5.0380651520922504e-01 8.2498137823100082e-01 7.9361908598392117e-01 + -6.9001551654018922e-01 1.0764199214516978e+00 1.0590960508935419e+00 + -8.8640940115897415e-01 1.2915852156594563e+00 1.3146885505740522e+00 + -1.0816656835008420e+00 1.4569775354944661e+00 1.5525390194896274e+00 + -1.2610517177388518e+00 1.5679747297295270e+00 1.7636599187110100e+00 + -1.4180181057101913e+00 1.6350453655570927e+00 1.9479298981747388e+00 + -1.5626752590769106e+00 1.6752402073403720e+00 2.1191682573353336e+00 + -1.7153196923178982e+00 1.6975405305970239e+00 2.2968486107582007e+00 + -1.8916072950712459e+00 1.7010801122257981e+00 2.4948887705126701e+00 + -2.0972144276467635e+00 1.6812812786738747e+00 2.7192803988859167e+00 + -2.3276533866045122e+00 1.6454712467956911e+00 2.9632235104153568e+00 + -2.5716115214812021e+00 1.6275043828836293e+00 3.2007657547722572e+00 + -2.8346614729559509e+00 1.6521146132276114e+00 3.4010966306542914e+00 + -3.1372529855999449e+00 1.6895374271554706e+00 3.5401678057915054e+00 + -3.4892880999074989e+00 1.6750797900030721e+00 3.6051991864772330e+00 + -3.8531352112895640e+00 1.5929775823876098e+00 3.6601288013134257e+00 + -3.8568546676729532e+00 1.7066687027361143e+00 3.8965841282778455e+00 + id 13189 + loc 6.2903046607971191e-01 2.9947015643119812e-01 1081 + blend 0.0000000000000000e+00 + interp 1.5119050402287948e+00:2.6823404812985885e-01:3.7960374046841805e-01:2.5889752779872299e-01:1.6629804307398262e+00:1.5118950402287947e+00:3.7233686953496798e+00:6.6732170419918546e-01:3.7428617760260230e+00:3.3908604047023860e-01:3.7860569310059917e+00 + CVs 20 + 1.2093439561798494e-01 5.6990903461443077e-01 -6.6180889506253082e-01 + 1.7231247144707165e-01 1.0404649025831618e+00 -1.1279164460675757e+00 + 2.0988917938384216e-01 1.4697287488624906e+00 -1.5252137970254958e+00 + 2.4011019283401275e-01 1.9048765117073960e+00 -1.8969259984211979e+00 + 2.5677859258245350e-01 2.3465365797765889e+00 -2.2202986746107487e+00 + 2.5395392623291202e-01 2.8049009590343270e+00 -2.4617445914617653e+00 + 2.2561201679392595e-01 3.2942906366769331e+00 -2.5673097854555254e+00 + 1.6664221637365639e-01 3.8272295029200034e+00 -2.4195253693611352e+00 + 9.9508322905986213e-02 4.2682830350776753e+00 -1.6840478137085213e+00 + 2.0773325247104601e-01 3.9293599776079482e+00 -5.4779849153730020e-01 + 4.1484173844058547e-01 3.3071480925512269e+00 -2.0313931541159347e-02 + 5.8941988361162334e-01 2.8451637463872292e+00 2.3667269250986456e-01 + 7.4056763546850302e-01 2.4426058682207836e+00 4.2626679525297750e-01 + 8.7443967233998499e-01 2.0291252420306622e+00 5.7520142339497560e-01 + 9.9830554745800493e-01 1.5413988107099776e+00 6.4958467890927274e-01 + 1.1235727041286843e+00 9.1689307500888528e-01 5.4383854443081348e-01 + 1.2450326719991125e+00 2.6409395697223215e-01 1.7423736786064234e-01 + 1.3516587537455123e+00 -1.8579867274389605e-01 -2.6245174496247492e-01 + 1.4666075760534578e+00 -3.6848832567023271e-01 -4.1926730770548026e-01 + id 13190 + loc 4.9393582344055176e-01 4.1847473382949829e-01 380 + blend 0.0000000000000000e+00 + interp 4.2214801869626079e-01:3.2910828978679352e-01:3.0886128873346408e-03:3.0576369189766817e-01:7.7314831055758837e-01:4.1103723539283893e-01:1.0768305129876112e+00:3.3518173178060812e-01:1.8855498683725083e+00:4.2214379721607387e-01:2.3020915402672433e+00:2.7553420476712942e-01:2.8930986626777919e+00:4.2006316646330494e-01:3.1060916809771513e+00 + CVs 20 + -5.7055721450048291e-01 3.1439799413914848e-01 5.2901803755183807e-01 + -1.0217144309003763e+00 5.1408029613954931e-01 9.6842981175254805e-01 + -1.4681750174338173e+00 6.6555168798517172e-01 1.3761696689917198e+00 + -1.9542077458420120e+00 7.9567742656674456e-01 1.7787348486030794e+00 + -2.4720134353755121e+00 9.0174572797573072e-01 2.1704968083971568e+00 + -3.0124399517347804e+00 9.7426854135246876e-01 2.5485889757073363e+00 + -3.5678636275143307e+00 9.9791819002976578e-01 2.9081327078040813e+00 + -4.1324485948088032e+00 9.5416702971170508e-01 3.2356397257234653e+00 + -4.6987198985931462e+00 8.2613455975747851e-01 3.5157344361849732e+00 + -5.2517729584337678e+00 6.0439797297446551e-01 3.7393865871941809e+00 + -5.7681899972508308e+00 2.8778743914236360e-01 3.8974894582133208e+00 + -6.2210281721471770e+00 -1.1269688714244630e-01 3.9782547589079997e+00 + -6.5933992008323159e+00 -5.7058007937395550e-01 3.9808090824073634e+00 + -6.8928337681265965e+00 -1.0476301964216379e+00 3.9263182605463274e+00 + -7.1490062787359161e+00 -1.5215174168329808e+00 3.8528726281566645e+00 + -7.3957375214278640e+00 -2.0192177134834060e+00 3.8125471926282479e+00 + -7.6578081920162226e+00 -2.5884753019498388e+00 3.8743191134739705e+00 + -7.9142208704722954e+00 -3.1895296591502613e+00 4.0763450006663362e+00 + -8.0760871871603683e+00 -3.5835913190818980e+00 4.2235040533297399e+00 + id 13191 + loc 9.2522919178009033e-01 2.4523302912712097e-01 373 + blend 0.0000000000000000e+00 + interp 2.7371462460523333e-01:2.6229701937611388e-01:2.2359733240181756e-01:2.5574403377137123e-01:9.3546467716846260e-01:2.7371188745898728e-01:1.9767343789126490e+00:2.0634232666891653e-01:2.4217107165127993e+00:2.2089267150633546e-01:3.0413272650661400e+00 + CVs 20 + 2.0126137127078136e-01 3.3450978434156348e-01 1.0417847979558205e-01 + 4.4084542736846055e-01 6.6183304501722384e-01 2.0975841109529772e-01 + 7.4438520022614807e-01 9.3829283810662689e-01 3.1209574551794689e-01 + 1.0870872207395024e+00 1.1552710733168807e+00 4.0420036412724003e-01 + 1.4136692164827944e+00 1.3499110733141100e+00 4.8818481639493216e-01 + 1.6875130117903478e+00 1.5534761179599552e+00 5.7901838407088502e-01 + 1.9020655604234413e+00 1.7736503500892551e+00 6.9484237356198841e-01 + 2.0575841500444900e+00 2.0008328733661842e+00 8.4241520398820691e-01 + 2.1554471655479204e+00 2.2313178597764116e+00 1.0163867935540518e+00 + 2.2055540648381573e+00 2.4778497857355375e+00 1.2163784949932630e+00 + 2.2195073667953551e+00 2.7350234579690635e+00 1.4377335194043444e+00 + 2.2084366837816405e+00 2.9678577808227544e+00 1.6566357132518919e+00 + 2.1827303037724861e+00 3.1491825428037021e+00 1.8471408969040983e+00 + 2.1521143992652281e+00 3.2859567575477646e+00 1.9994971900871694e+00 + 2.1108807052598326e+00 3.3983308173763489e+00 2.1647972525982198e+00 + 1.9887453572986631e+00 3.3949656646436068e+00 2.4830797148718071e+00 + 1.7915465217747666e+00 3.0431885206059990e+00 2.9728951085913611e+00 + 1.7851273100577982e+00 2.3945102883978548e+00 3.4078821502796139e+00 + 1.8811907624522022e+00 2.1399970419013794e+00 3.6187676503884498e+00 + id 13192 + loc 4.1282644867897034e-01 6.0042464733123779e-01 402 + blend 0.0000000000000000e+00 + interp 4.8879246607458426e-01:3.9983206174746366e-01:2.8047244746232214e-02:2.9465353107538589e-01:1.0278595010297054e+00:3.5886975369504787e-01:1.8094998822837933e+00:4.8878757814992352e-01:2.2278896772740318e+00:4.1287900129179322e-01:2.9437103194037015e+00:2.8551700647781525e-01:3.4186299540178995e+00 + CVs 20 + -4.1199361268072235e-02 3.6283792844368068e-01 -2.2478856846484307e-01 + -9.3942481814089873e-02 7.0010027137774800e-01 -4.5192048912869165e-01 + -1.2258705045987356e-01 1.0210738797334602e+00 -7.0861036084033280e-01 + -1.1899613299402140e-01 1.3203822847522979e+00 -1.0008093135034717e+00 + -9.4299290509884504e-02 1.5859598515396161e+00 -1.3177209218824193e+00 + -5.4682862420330380e-02 1.8089249430790111e+00 -1.6471479970263618e+00 + 2.3981558940677772e-05 1.9869625663196930e+00 -1.9800700260208326e+00 + 6.9339367735217095e-02 2.1246340867816000e+00 -2.3129920337133969e+00 + 1.4767451550017008e-01 2.2287494044501495e+00 -2.6434453579623698e+00 + 2.2780170886005313e-01 2.3057287359911571e+00 -2.9645821609898366e+00 + 3.0887696823217892e-01 2.3627065604270698e+00 -3.2747034847150731e+00 + 3.9677870153040495e-01 2.4006730199816726e+00 -3.5901505107198606e+00 + 4.9662855101070569e-01 2.3970917419172042e+00 -3.9399646164579480e+00 + 6.0225077446616138e-01 2.2969896701859662e+00 -4.3462082887231945e+00 + 6.7799652519019693e-01 2.0423723586812024e+00 -4.8023119905097671e+00 + 6.5249635813622453e-01 1.6125754507521899e+00 -5.2772238187442939e+00 + 4.2353924006710908e-01 1.0575855009815807e+00 -5.7433708946379278e+00 + -4.6722535677379939e-02 5.8050883154893396e-01 -6.1642760616972199e+00 + -3.4306090728901883e-01 4.9952195604594918e-01 -6.3526551725202935e+00 + id 13193 + loc 5.6474059820175171e-01 2.9192364215850830e-01 395 + blend 0.0000000000000000e+00 + interp 4.8408869101105889e-01:2.8960412871492752e-01:6.8550753464549563e-01:3.0585997840585999e-01:1.2219465773870197e+00:3.2741469345331581e-01:2.0264455232595417e+00:4.8408385012414878e-01:3.0021256109698014e+00:2.6769007033946052e-01:3.9914377155069554e+00 + CVs 20 + -2.5267794927025988e-01 1.4821582264842523e-01 3.6944653074980616e-01 + -4.6697220899817982e-01 2.5365022531772635e-01 6.6651722998891949e-01 + -6.6405717532914588e-01 3.4044519796756995e-01 9.4156153263199860e-01 + -8.5171296373015160e-01 4.2233020087166340e-01 1.2169773735410816e+00 + -1.0294339675329813e+00 5.0182557997071020e-01 1.4900587069539459e+00 + -1.1974729229110697e+00 5.8077418948563264e-01 1.7588305652066840e+00 + -1.3560620243420345e+00 6.6247313668829433e-01 2.0244581106057540e+00 + -1.5059242556018555e+00 7.5169961386900397e-01 2.2916534342156680e+00 + -1.6522851156982608e+00 8.5166189867654152e-01 2.5646575108183720e+00 + -1.8053752246728725e+00 9.6011163196435989e-01 2.8428781459147627e+00 + -1.9729471039487025e+00 1.0655199816815619e+00 3.1279140085698725e+00 + -2.1526542385781813e+00 1.1452012319327949e+00 3.4323306384096228e+00 + -2.3341620619879739e+00 1.1755161736835187e+00 3.7684597614101500e+00 + -2.5089453931509427e+00 1.1456030379181186e+00 4.1330574251421304e+00 + -2.6724520324793817e+00 1.0571845606685084e+00 4.5120241316899516e+00 + -2.8210775738742075e+00 9.1610846741678742e-01 4.8975092426000462e+00 + -2.9503139463145600e+00 7.2291603183690212e-01 5.2883764193209872e+00 + -3.0511127513787502e+00 4.7667655423595612e-01 5.6678874856104002e+00 + -3.0640937477323922e+00 2.0809819639035876e-01 5.9216135491840820e+00 + id 13194 + loc 4.6718403697013855e-01 1.5603269636631012e-01 396 + blend 0.0000000000000000e+00 + interp 4.4745271873045739e-01:3.8656068116501241e-01:4.0632186385021307e-01:3.4381140167916813e-01:1.2526145233344554e+00:3.2500058068878535e-01:2.2596649261340391e+00:2.7314396729727958e-01:3.0739790218512253e+00:4.4744824420327012e-01:3.8253724540042704e+00 + CVs 20 + -3.1017982643906961e-01 1.9825263988062106e-01 -5.8538723436630991e-01 + -5.5629207612850329e-01 2.7192455627970580e-01 -1.0120341622037421e+00 + -7.8262014768587229e-01 2.9358172735447563e-01 -1.4027315948624470e+00 + -1.0020397804645886e+00 2.9221016412837630e-01 -1.8043877870018181e+00 + -1.2124494049059971e+00 2.6084644572786031e-01 -2.2129380194681936e+00 + -1.4134268275346966e+00 1.9106851502796673e-01 -2.6237949421461937e+00 + -1.6074138837577392e+00 7.8200476754886505e-02 -3.0284217267181566e+00 + -1.7955626986883999e+00 -7.8876722924323683e-02 -3.4134042369051065e+00 + -1.9735458389957428e+00 -2.7968031848546726e-01 -3.7643563215643971e+00 + -2.1355141382237104e+00 -5.2061822886737863e-01 -4.0676340047575064e+00 + -2.2833885736886455e+00 -7.9449788004280109e-01 -4.3106342439198571e+00 + -2.4292237346997689e+00 -1.0948705472186173e+00 -4.4843503579655541e+00 + -2.5835620699311965e+00 -1.4144400260689005e+00 -4.5857694863574086e+00 + -2.7481156135557447e+00 -1.7407344019367668e+00 -4.6196889331129025e+00 + -2.9210908963878692e+00 -2.0547040895327831e+00 -4.5927551641966531e+00 + -3.0982008850407854e+00 -2.3316910621065405e+00 -4.5129835201528756e+00 + -3.2748989106979911e+00 -2.5587790343621761e+00 -4.3949582302570533e+00 + -3.4541772507739226e+00 -2.7601611820048633e+00 -4.2567475257143084e+00 + -3.6795566475686976e+00 -3.1112062837413506e+00 -4.1072125219168445e+00 + id 13195 + loc 2.5893306732177734e-01 1.0442604869604111e-01 1068 + blend 0.0000000000000000e+00 + interp 3.3363860578835897e-01:2.8514809406727115e-01:9.4808206550937535e-01:3.3363526940230109e-01:1.4290491415160607e+00:3.3098548608256267e-01:1.9967838742921549e+00:2.9286715352762988e-01:2.9979656722854342e+00:2.9615446228173142e-01:3.9997380866891894e+00 + CVs 20 + -1.2797124306403956e-01 2.2741329745547634e-01 -3.2801927641666589e-01 + -2.6238256440723356e-01 4.7226149759567010e-01 -6.2932885613028555e-01 + -4.0758099812752863e-01 7.2018191930305664e-01 -9.2314653022816662e-01 + -5.7621280857078738e-01 9.7083205235126457e-01 -1.2111782798197188e+00 + -7.8260408783204161e-01 1.2240279847668036e+00 -1.4811925829131440e+00 + -1.0387541895972265e+00 1.4701398978881111e+00 -1.7187564155848172e+00 + -1.3487205333085590e+00 1.6882048388629380e+00 -1.9092095948921295e+00 + -1.7030032975196083e+00 1.8498373149171792e+00 -2.0437223063586001e+00 + -2.0804231745732102e+00 1.9297332505411036e+00 -2.1228126773335996e+00 + -2.4537610926447759e+00 1.9158858629304185e+00 -2.1520862073129727e+00 + -2.7936283426159303e+00 1.8140537699641821e+00 -2.1398241834402740e+00 + -3.0791365294301696e+00 1.6458430931441397e+00 -2.0990294231494859e+00 + -3.3110597386951883e+00 1.4344830368180463e+00 -2.0440555152816207e+00 + -3.5034635480833680e+00 1.1943681663233003e+00 -1.9869402297438188e+00 + -3.6675919942482218e+00 9.3480162642723985e-01 -1.9383530964085907e+00 + -3.8045670610619737e+00 6.6800327035644047e-01 -1.9114504486557726e+00 + -3.9107552553311131e+00 4.0949968186978386e-01 -1.9286438762410449e+00 + -3.9939740424338783e+00 1.5245605009964036e-01 -2.0328297939393685e+00 + -4.0706840149884655e+00 -1.3435087336385285e-01 -2.2500668300603173e+00 + id 13196 + loc 5.1792744547128677e-02 9.9203282594680786e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6552669220135756e-01:4.6552203693443556e-01:2.4500762121537945e-01:2.6627733502688639e-01:1.0611299558272260e+00:3.3208178566556634e-01:1.9617861100080110e+00:3.4789167697061141e-01:2.6246596491801215e+00:3.3260432134566958e-01:3.2077274923059242e+00:3.7198552809388385e-01:3.9871379229820345e+00 + CVs 20 + 9.9253799849120888e-02 2.4222842370773376e-01 1.4899353137596993e-02 + 2.1455538774628927e-01 4.2901096924606208e-01 -1.4775523701542781e-02 + 3.3264283668845668e-01 6.0618036670526365e-01 -5.0711486970672626e-02 + 4.4585467846115501e-01 7.7610743792816450e-01 -8.3657562143219233e-02 + 5.5188253789423580e-01 9.3880391816833109e-01 -1.1862640079885245e-01 + 6.4724399381778830e-01 1.0965945462003799e+00 -1.6114214823626322e-01 + 7.2747020836978626e-01 1.2522686819689604e+00 -2.1688285761470327e-01 + 7.8762923320075895e-01 1.4082176530137518e+00 -2.9026048594552145e-01 + 8.2265156881419277e-01 1.5638154461467093e+00 -3.8403876513424584e-01 + 8.2908036368615434e-01 1.7119438086827237e+00 -4.9932285841380164e-01 + 8.0680762174435050e-01 1.8402032397974784e+00 -6.3573703311313257e-01 + 7.6114970147716599e-01 1.9339610413686610e+00 -7.8945522041834759e-01 + 7.0329609987350594e-01 1.9834679850834562e+00 -9.5111258306238700e-01 + 6.4257642994429842e-01 1.9912253274109504e+00 -1.1111450898199429e+00 + 5.7860155200876873e-01 1.9670167649310204e+00 -1.2669403303957456e+00 + 5.0736488815960934e-01 1.9174489949622815e+00 -1.4191834653533295e+00 + 4.3412651025280774e-01 1.8449848158839617e+00 -1.5631212152562224e+00 + 3.7548623385590252e-01 1.7566855630434790e+00 -1.6885449101062955e+00 + 3.5989675709658420e-01 1.6763213615606023e+00 -1.7783448982064252e+00 + id 13197 + loc 5.5061215162277222e-01 7.5562328100204468e-02 414 + blend 0.0000000000000000e+00 + interp 4.0786484446979117e+00:4.0786384446979120e+00:9.1625889624694801e-01:2.3589785685731126e+00:9.7647409010545017e-01:2.7145887631972854e-01:1.0236913895914173e+00:4.3324679739586086e-01:1.8645954526200810e+00:2.5739994352925250e-01:2.8637696886297697e+00:6.7325326531480079e-01:2.9828482893227144e+00:1.1113698374232035e+00:2.9986536616794051e+00 + CVs 20 + -9.0994326131768000e-01 1.9470698234758632e-01 1.4264148160208873e-01 + -1.4339036619753536e+00 2.4564500651933407e-01 2.7377189427285120e-01 + -1.8518244033084605e+00 2.4442686565618871e-01 4.0251856452573875e-01 + -2.2708639571222262e+00 2.3431292817588231e-01 5.2875067280545318e-01 + -2.6868197454795042e+00 2.1224157679685979e-01 6.5318914464022082e-01 + -3.0992686584392275e+00 1.7908066534949690e-01 7.7138679071012728e-01 + -3.5095028924888103e+00 1.3756980335130753e-01 8.7175276451611228e-01 + -3.9160763383515307e+00 9.0006807427927105e-02 9.4297060849096237e-01 + -4.3127017892017907e+00 3.7010772683659376e-02 9.8051186540411583e-01 + -4.6902611152194131e+00 -1.7779492862339819e-02 9.8312733799316110e-01 + -5.0522562306099701e+00 -6.0101389290821317e-02 9.3552275083221081e-01 + -5.4260835035392052e+00 -8.4000544395464449e-02 8.0761108297874118e-01 + -5.8341494050214848e+00 -1.3257050766251910e-01 6.1018241542552665e-01 + -6.2605181017491809e+00 -2.6495265649220889e-01 4.0848984464831262e-01 + -6.6756099975649885e+00 -4.9305040293237923e-01 2.4423548272310824e-01 + -7.0615680064673017e+00 -8.0130673660636575e-01 1.1784384098456535e-01 + -7.4004205512389252e+00 -1.1694031172816937e+00 3.0918985361464535e-02 + -7.6628235306978851e+00 -1.5614688136784427e+00 3.6801481905146538e-03 + -7.7253214055101100e+00 -1.8880697066272003e+00 1.0689506806910443e-01 + id 13198 + loc 7.6400369405746460e-01 4.6858611702919006e-01 403 + blend 0.0000000000000000e+00 + interp 4.7006376294312652e-01:3.3645342919631710e-01:5.4229412592180104e-01:4.7005906230549710e-01:9.9986293176658303e-01:3.7535902342144811e-01:1.6069132637105259e+00:3.3729009074799515e-01:2.1732139231155028e+00:3.1895696273077778e-01:3.2582813824594030e+00:4.5844798415667465e-01:3.9996617585283114e+00 + CVs 20 + -3.4757312156932493e-02 8.7393814305648798e-02 2.8342872068982877e-02 + -8.0225180171750704e-02 1.8112896502847531e-01 6.6441386894718818e-02 + -1.4222673465631916e-01 2.8121538917150346e-01 1.0258851254082001e-01 + -2.2226613826513120e-01 3.9072267269683569e-01 1.3263501883690221e-01 + -3.1524594504519104e-01 5.1429005917525150e-01 1.6233349117093376e-01 + -4.1249647364709618e-01 6.5831726338287500e-01 1.9865508160773251e-01 + -5.0066477936906584e-01 8.3017880368930830e-01 2.4810167471253591e-01 + -5.5956439739697894e-01 1.0363555638729984e+00 3.1629788260724429e-01 + -5.6219558789641066e-01 1.2760081642354675e+00 4.0536658350664911e-01 + -4.8320315419059123e-01 1.5338626034430660e+00 5.0801209598603114e-01 + -3.1341270180545100e-01 1.7830226653966534e+00 6.0661340029936073e-01 + -6.0388610001176346e-02 1.9979901921778311e+00 6.8220891068382228e-01 + 2.5855699448709246e-01 2.1603858962825315e+00 7.1903874067716966e-01 + 6.1471673170133745e-01 2.2622144876606001e+00 7.0324342538602758e-01 + 9.7340200078535710e-01 2.3103023529057753e+00 6.2421209334758510e-01 + 1.3120738293049681e+00 2.3151611130551801e+00 4.7411429881622885e-01 + 1.6200933124661991e+00 2.2747551908365007e+00 2.4638842879148343e-01 + 1.8812687224257365e+00 2.1860489419079916e+00 -4.4056010571082965e-02 + 2.1005048183783273e+00 2.1772024061646835e+00 -1.3423681394248116e-01 + id 13199 + loc 1.1854162812232971e-01 3.9737671613693237e-01 1080 + blend 0.0000000000000000e+00 + interp 6.3466842216686492e-01:3.1319227588176318e-01:1.4554819157513998e-03:3.3543687492316132e-01:7.5316353601768360e-01:6.3466207548264331e-01:2.6240928949305653e+00:3.0075831574315987e-01:2.7841187917222685e+00:3.0718661277967158e-01:3.2993020075630723e+00 + CVs 20 + 5.3262713080268909e-01 2.6006490648615338e-01 1.5355405511375630e-01 + 8.6943913259840222e-01 4.1668614648003394e-01 2.5654195400618740e-01 + 1.1470978981282265e+00 5.1634274363701715e-01 3.4367823795768510e-01 + 1.4383776559020880e+00 6.0215026420510465e-01 4.5360882836960126e-01 + 1.7372679137168392e+00 6.7295729074677846e-01 5.8830511792623086e-01 + 2.0377517020900666e+00 7.2713150196701493e-01 7.5140260058057640e-01 + 2.3335642381007005e+00 7.6266763938832616e-01 9.4727307143761874e-01 + 2.6175842322703020e+00 7.7691519401571563e-01 1.1790972315222801e+00 + 2.8818423114458689e+00 7.6733307088948677e-01 1.4469645917975800e+00 + 3.1185245799913148e+00 7.3299720412467462e-01 1.7469669792577351e+00 + 3.3214551434785693e+00 6.7548639154768331e-01 2.0718400248446982e+00 + 3.4871378682139582e+00 5.9844636484624103e-01 2.4126032598918310e+00 + 3.6146541846302989e+00 5.0560039382146638e-01 2.7617016373000434e+00 + 3.7040720066723507e+00 3.9840151259602985e-01 3.1159077754216398e+00 + 3.7557448722788593e+00 2.7670854203549911e-01 3.4732303529665387e+00 + 3.7725124093369193e+00 1.4168702029492164e-01 3.8278871266848609e+00 + 3.7608982565403299e+00 -3.6173821340010903e-03 4.1730160146462705e+00 + 3.7268387863605628e+00 -1.5526432753253050e-01 4.5079854874874652e+00 + 3.6683401040544599e+00 -2.8825569345930235e-01 4.8430655161166385e+00 + id 13200 + loc 9.8131543397903442e-01 8.8022798299789429e-01 377 + blend 0.0000000000000000e+00 + interp 5.1906975708055925e-01:2.5182546008871010e-01:5.8668182594640572e-02:2.9440568842890597e-01:1.0153085480441915e+00:5.1906456638298848e-01:1.8495827511708627e+00:3.0440276971763852e-01:2.2815789694508517e+00:4.0883164500554814e-01:3.0330211679452903e+00:1.9070855324766850e-01:3.8778402509632937e+00 + CVs 20 + -6.0921406038565751e-01 1.7724513452825347e-01 -7.8087900065724170e-01 + -1.0676821684265836e+00 2.1252103960363444e-01 -1.2964258254156678e+00 + -1.4855346453487526e+00 1.9686545036097625e-01 -1.7365474443535038e+00 + -1.9023625732467901e+00 1.6292626754643702e-01 -2.1762484794695327e+00 + -2.3092351991961664e+00 1.0788435333605129e-01 -2.6171292847131573e+00 + -2.7002243517308311e+00 2.8341393900180423e-02 -3.0576500186882893e+00 + -3.0730876969242948e+00 -8.1782373333266989e-02 -3.4902981282773320e+00 + -3.4243642488794612e+00 -2.3012679588122298e-01 -3.9050149696580148e+00 + -3.7460030854809179e+00 -4.2274931153891404e-01 -4.2940665146213135e+00 + -4.0296179574027473e+00 -6.5883354979893549e-01 -4.6497207523222857e+00 + -4.2712523097745994e+00 -9.2400304315792781e-01 -4.9620700421262285e+00 + -4.4732805145014032e+00 -1.1979609235566135e+00 -5.2245681979584058e+00 + -4.6413759710584079e+00 -1.4820797150014169e+00 -5.4387367888560503e+00 + -4.7772218082054909e+00 -1.8169194028282689e+00 -5.5955671098374333e+00 + -4.8785495214662804e+00 -2.2312796923423326e+00 -5.6749205529842568e+00 + -4.9447973371020693e+00 -2.7041113390240135e+00 -5.6911859501268891e+00 + -4.9732090833437939e+00 -3.1937133030464557e+00 -5.6943049262831460e+00 + -4.9912301790860312e+00 -3.6473498500611066e+00 -5.7193529698317329e+00 + -5.1191020826531766e+00 -3.9309963366506921e+00 -5.7297997787739039e+00 + id 13201 + loc 1.6493102908134460e-01 8.3022499084472656e-01 374 + blend 0.0000000000000000e+00 + interp 5.8301764797868549e-01:5.6611687514050402e-01:3.6826736017368178e-01:5.8301181780220568e-01:1.0146580354313153e+00:3.5350525005509115e-01:1.9126597803617427e+00:3.5820870286853751e-01:2.7819241655611187e+00:3.6273594546784305e-01:3.1963078913062852e+00:3.6191084073023311e-01:3.9424084086076303e+00 + CVs 20 + -6.1479668812770916e-01 3.0092088123725697e-01 -3.0794566743343021e-02 + -1.1001718297140584e+00 5.2541959157830798e-01 -9.0660818598677917e-03 + -1.5813627207008285e+00 7.1567364413867329e-01 5.4240393441318868e-02 + -2.1143284245481317e+00 9.1113046347706861e-01 1.3955531359730156e-01 + -2.6927082166217575e+00 1.1336148346877042e+00 2.1208816753316995e-01 + -3.3114714787882749e+00 1.3778929463056058e+00 2.2894286567325861e-01 + -3.9666537068126049e+00 1.6054947329754978e+00 1.5169830940882290e-01 + -4.6348912203334507e+00 1.7681602504342790e+00 -4.0674914789623040e-02 + -5.2769032077422393e+00 1.8298886868494559e+00 -3.4294333224692708e-01 + -5.8606360022903354e+00 1.7699716135639103e+00 -7.2667207792469779e-01 + -6.3748053067878416e+00 1.5741922376530315e+00 -1.1529101805188353e+00 + -6.8138050347089596e+00 1.2292989414334778e+00 -1.5816052722896206e+00 + -7.1538306752821530e+00 7.4212374178461316e-01 -1.9704012927629264e+00 + -7.3755391550536258e+00 1.6243856264723711e-01 -2.2933297657590499e+00 + -7.5076572047911956e+00 -4.4691379425991196e-01 -2.5679557843224536e+00 + -7.6200034026704584e+00 -1.0548638274866633e+00 -2.8276889968448353e+00 + -7.7833002381717789e+00 -1.6628519944356901e+00 -3.0696168947481226e+00 + -8.0164317791623922e+00 -2.2611828925913158e+00 -3.2674612231749371e+00 + -8.1670955400043432e+00 -2.8013969824179785e+00 -3.4492445572393629e+00 + id 13202 + loc 9.7142881155014038e-01 4.2168134450912476e-01 411 + blend 0.0000000000000000e+00 + interp 4.1170934535354597e-01:2.7336819964194986e-01:2.0663587245126014e-01:4.1099981682391257e-01:9.2470923650687065e-01:4.1170522826009248e-01:1.2915655229508340e+00:2.3613899667064717e-01:2.0280095577252117e+00:2.9049190493853483e-01:3.0001185195228999e+00:4.0266379676422853e-01:3.8106982423380105e+00 + CVs 20 + -6.2409399683640632e-01 8.4778851994066762e-02 2.5846923350797213e-01 + -1.0294947898372684e+00 4.2906074787349868e-02 4.8032962473455088e-01 + -1.3924581807524237e+00 -3.7696688336725126e-02 7.0643469229509914e-01 + -1.7719854900794882e+00 -1.0687496106402072e-01 9.4291342537244471e-01 + -2.1745740061415488e+00 -1.6051720023583349e-01 1.1834894017468134e+00 + -2.6040466320273823e+00 -1.9954787970606302e-01 1.4208915091833743e+00 + -3.0597229617349315e+00 -2.2836341191176479e-01 1.6518180649111633e+00 + -3.5386415047090303e+00 -2.5882652930717742e-01 1.8736000535403359e+00 + -4.0316448229214652e+00 -3.1121101598193190e-01 2.0793313088500356e+00 + -4.5183459611099845e+00 -4.0505032617410719e-01 2.2654014562287008e+00 + -4.9823001576677566e+00 -5.5737728149905985e-01 2.4420325658153246e+00 + -5.4237344558505729e+00 -7.8438458548107737e-01 2.6240436279941290e+00 + -5.8418303597380303e+00 -1.0895186297541777e+00 2.8119817393134006e+00 + -6.2229489341100601e+00 -1.4537329423409258e+00 2.9961324699901697e+00 + -6.5527564516152035e+00 -1.8509117378495281e+00 3.1719855183529559e+00 + -6.8229952622708065e+00 -2.2680810352251806e+00 3.3380639930453064e+00 + -7.0285207368062821e+00 -2.6971591021954469e+00 3.4897336966612489e+00 + -7.1715877991460744e+00 -3.1095628290659185e+00 3.6233721501356788e+00 + -7.2958916965216023e+00 -3.4283014007604140e+00 3.7391741471523670e+00 + id 13203 + loc 6.0904633998870850e-01 6.7907965183258057e-01 409 + blend 0.0000000000000000e+00 + interp 3.7209493064813814e-01:3.1939135589030127e-01:2.4457927457193851e-01:3.7209120969883169e-01:1.0065830979640158e+00:3.2961877456053035e-01:1.6469349338982928e+00:3.3698419399623980e-01:2.1731198664309184e+00:3.0582797994414990e-01:2.9911971740614076e+00:3.6486729690821385e-01:3.6023643811023476e+00 + CVs 20 + 4.2750985710485595e-01 1.0167487075241280e-01 -1.5406995918678562e-01 + 7.7761291731943105e-01 1.6099992100426547e-01 -3.2370090141888208e-01 + 1.1057422272512349e+00 2.0280371408640319e-01 -4.9330769000158703e-01 + 1.4313024363484137e+00 2.3532877214518144e-01 -6.5787399012019177e-01 + 1.7518079562340882e+00 2.5550431026269727e-01 -8.1935731750986629e-01 + 2.0646261380578181e+00 2.6165071270544704e-01 -9.7838437555460389e-01 + 2.3650106010333052e+00 2.5419229380985087e-01 -1.1339315189872319e+00 + 2.6495457375062954e+00 2.3557823494646946e-01 -1.2844034649837643e+00 + 2.9148491772748724e+00 2.0899420404108970e-01 -1.4268791731422390e+00 + 3.1538401826068116e+00 1.7909903460543064e-01 -1.5568726996801876e+00 + 3.3595194212399315e+00 1.5408312964695137e-01 -1.6713314270350339e+00 + 3.5391412213481930e+00 1.3708910227621640e-01 -1.7716450335319016e+00 + 3.7129839056944323e+00 1.1726230336092969e-01 -1.8624076633780431e+00 + 3.8962850638855753e+00 8.0223766451606116e-02 -1.9472577294636777e+00 + 4.0946097866607731e+00 1.7488663740944155e-02 -2.0283743358173796e+00 + 4.3105975966514629e+00 -7.8877257190982153e-02 -2.1112297082939047e+00 + 4.5436294144814919e+00 -2.2349075114591210e-01 -2.2034083601486660e+00 + 4.7806771500202379e+00 -4.2573562187506298e-01 -2.3008900052884260e+00 + 4.9695155978672503e+00 -7.1995331004692265e-01 -2.3915722834501869e+00 + id 13204 + loc 1.3794280588626862e-01 4.6593025326728821e-01 400 + blend 0.0000000000000000e+00 + interp 4.9851789521704359e-01:3.5158832214972940e-01:4.3980630224115247e-03:4.9851291003809145e-01:6.8869075836655336e-01:4.8573842938151213e-01:1.0452728086879930e+00:2.9939513224234748e-01:1.6197002560984366e+00:3.6432058163154057e-01:2.1828696496175644e+00:2.8020447533327703e-01:3.3431074945601975e+00 + CVs 20 + -1.3901086332512955e-02 4.2503363154255352e-01 2.7942426655828534e-01 + -9.3078805439265055e-02 8.3944381277163937e-01 5.2726407871498115e-01 + -2.4951158991426375e-01 1.2334821878733184e+00 7.5815027707618710e-01 + -4.8216794791606898e-01 1.5954939306156404e+00 9.7125683453977252e-01 + -7.8166460734139120e-01 1.9164475365173184e+00 1.1623037777444472e+00 + -1.1347806449896791e+00 2.1900334947240419e+00 1.3277748089231898e+00 + -1.5262611362142473e+00 2.4122143415254786e+00 1.4625772943208997e+00 + -1.9379715904377011e+00 2.5804625802223624e+00 1.5582468054059571e+00 + -2.3492863868162805e+00 2.6945481905171338e+00 1.6043908008898125e+00 + -2.7388897399380001e+00 2.7569671518408843e+00 1.5927352020054057e+00 + -3.0952093851343547e+00 2.7764690389734263e+00 1.5291171195726054e+00 + -3.4369892881906687e+00 2.7668755492885357e+00 1.4390482725334830e+00 + -3.8117895087634852e+00 2.7279678293942817e+00 1.3495066388521619e+00 + -4.2869009274820602e+00 2.6310719368670070e+00 1.2949354136392985e+00 + -4.8207678324569931e+00 2.4555181765322089e+00 1.3163776092478012e+00 + -5.2669319302559545e+00 2.2692345141663952e+00 1.4015566807364235e+00 + -5.6778008475868820e+00 2.0727509479476933e+00 1.5515551078533056e+00 + -6.0784688216353793e+00 1.8636730041165568e+00 1.7748213518114078e+00 + -6.3026561058546147e+00 1.7999620494782873e+00 2.0096650409814716e+00 + id 13205 + loc 8.5138380527496338e-01 9.1654479503631592e-01 375 + blend 0.0000000000000000e+00 + interp 4.3842066761424253e-01:3.5999613556346421e-01:1.6658483719557504e-01:4.3841628340756639e-01:7.6077269050509189e-01:3.8457350141459828e-01:1.0073167561303016e+00:3.4263456236681622e-01:1.8733290159720619e+00:2.1599457609199074e-01:2.0183012338137081e+00:2.1514950651908521e-01:3.0119229163753567e+00:2.4997026834498848e-01:3.5934070658508110e+00 + CVs 20 + -3.7184579948806196e-01 3.6127844696081346e-01 -2.4723407577520815e-01 + -7.4972891219140070e-01 6.1409380177271855e-01 -4.1048127212974994e-01 + -1.1761216974258266e+00 7.3588401636835665e-01 -5.1789779972687178e-01 + -1.6626598034409374e+00 7.6652533228468556e-01 -5.8964653687984647e-01 + -2.1923634109658821e+00 7.8376598531718644e-01 -6.4851062145500338e-01 + -2.7466140830380343e+00 8.4191151046057067e-01 -7.3937394976253579e-01 + -3.2988817871155929e+00 9.5496746097447605e-01 -9.1445385378006394e-01 + -3.8119159003224450e+00 1.1190013208082519e+00 -1.1996917899233930e+00 + -4.2444846268676111e+00 1.3217569002217127e+00 -1.5828248515407275e+00 + -4.5712493821311018e+00 1.5355426841065927e+00 -2.0239720764121798e+00 + -4.8028980742122247e+00 1.7291818335735945e+00 -2.4826141529396928e+00 + -4.9611330862126737e+00 1.8897344267037497e+00 -2.9350462599292553e+00 + -5.0502832597053544e+00 2.0179036541064534e+00 -3.3804209673888863e+00 + -5.0647953723860901e+00 2.1008351548661257e+00 -3.8353195064706886e+00 + -4.9805288331492124e+00 2.1456378589391960e+00 -4.2742455106999628e+00 + -4.7276846420305940e+00 2.2349337078312668e+00 -4.6181287530539663e+00 + -4.1837511430979877e+00 2.3867206160707006e+00 -4.9020322596841073e+00 + -3.5241224753193650e+00 2.2460273619418416e+00 -5.1664798922386606e+00 + -3.3596872585519897e+00 1.8832123219777919e+00 -5.1686413852221822e+00 + id 13206 + loc 1.4934109151363373e-01 4.2617848515510559e-01 415 + blend 0.0000000000000000e+00 + interp 4.3329769532759327e-01:2.9096716650580223e-01:8.0600079940571900e-01:2.8201236152652476e-01:1.4172459622946105e+00:2.8123103639933023e-01:2.2383735636570803e+00:3.5300730243146261e-01:3.0266215978270852e+00:4.3329336235064003e-01:3.8968941149257099e+00 + CVs 20 + 1.8412203834146976e-02 1.2708559627565724e-01 -1.7106856785227786e-01 + 1.8207497839576786e-02 2.2868926035303067e-01 -2.6624989273038030e-01 + 9.5770045642765422e-03 3.2192427468991314e-01 -3.2822460973887790e-01 + 7.7824438081462999e-03 4.1590737710142001e-01 -3.8542664219736700e-01 + 1.4508505871465183e-02 5.1063733104824061e-01 -4.3773351741821909e-01 + 3.0188829693538477e-02 6.0667207879590057e-01 -4.8456660752689051e-01 + 5.4088949270489239e-02 7.0372150551919010e-01 -5.2593800591074946e-01 + 8.4554645444602450e-02 8.0041488593785437e-01 -5.6201015997493131e-01 + 1.1947282425225636e-01 8.9480386170549708e-01 -5.9269547411684298e-01 + 1.5892977041603013e-01 9.8577037266119660e-01 -6.1725123111698366e-01 + 2.0629966503899400e-01 1.0742071951227894e+00 -6.3487635481354876e-01 + 2.6776052268740885e-01 1.1594670434259537e+00 -6.4393504042707561e-01 + 3.4553035987944014e-01 1.2350990594794493e+00 -6.4127717563607556e-01 + 4.3513603699173098e-01 1.2932439696985543e+00 -6.2349797919751315e-01 + 5.3597234409709371e-01 1.3316606744701662e+00 -5.8776572521233916e-01 + 6.5657735905763503e-01 1.3509978559277973e+00 -5.3188612778402267e-01 + 8.0368331758677347e-01 1.3506247558692057e+00 -4.5693242035720666e-01 + 9.6807286721252583e-01 1.3295222489165210e+00 -3.6803309366516246e-01 + 1.1079411883224406e+00 1.2524373108435178e+00 -2.5644759262169592e-01 + id 13207 + loc 8.8674414157867432e-01 6.7223888635635376e-01 380 + blend 0.0000000000000000e+00 + interp 4.6696472805856082e-01:2.9319958152628084e-01:4.7444348807463343e-01:4.6696005841128024e-01:9.5725836117562135e-01:4.5385011576623635e-01:1.3331191641959967e+00:4.0786025633161799e-01:2.0227801261785423e+00:3.6615784545342800e-01:2.6028003363020229e+00:3.9699554864025000e-01:3.0030422197195548e+00:2.8806575158884068e-01:3.3849876196098068e+00:3.8393969833972724e-01:3.9984721683730489e+00 + CVs 20 + -3.7576079918622685e-01 2.1504145585906315e-01 -8.0431004522120508e-01 + -6.7740868274383614e-01 3.3234769175297252e-01 -1.4077824766597351e+00 + -9.5542972713968188e-01 4.1748974240505010e-01 -1.9621150619515388e+00 + -1.2390298630595256e+00 4.9120565007237860e-01 -2.5240277686012229e+00 + -1.5303230775171450e+00 5.4291137860585337e-01 -3.0864514698383081e+00 + -1.8342727182847807e+00 5.7001375723399295e-01 -3.6383733200827333e+00 + -2.1530831581555319e+00 5.7396692040186403e-01 -4.1708420651654752e+00 + -2.4875713106969317e+00 5.5456195280737552e-01 -4.6826656954450794e+00 + -2.8397578929407112e+00 5.0746132451696413e-01 -5.1798888712491120e+00 + -3.2085342350296733e+00 4.2298314575562701e-01 -5.6661402002876118e+00 + -3.5873216095748628e+00 2.8477420027788591e-01 -6.1410248284661328e+00 + -3.9661869352953523e+00 6.7400855063109777e-02 -6.6034912620049369e+00 + -4.3250387346510166e+00 -2.4256252336250572e-01 -7.0310609182599055e+00 + -4.6318879700579849e+00 -5.9719551188635167e-01 -7.3653432487685837e+00 + -4.8634616415356753e+00 -9.1296868527932640e-01 -7.5632204583233058e+00 + -4.9985617592080045e+00 -1.1430493832419333e+00 -7.6318729029389250e+00 + -5.0059779103484798e+00 -1.2809647486629632e+00 -7.6154255844813754e+00 + -4.9270930664495491e+00 -1.3883955836117892e+00 -7.5791877395644036e+00 + -5.0967274317604598e+00 -1.6216120243247572e+00 -7.5610425136530415e+00 + id 13208 + loc 5.6019043922424316e-01 2.2309830784797668e-01 393 + blend 0.0000000000000000e+00 + interp 4.1279264808085642e-01:2.9620810821858606e-01:8.4193951280409696e-01:3.8624836679532598e-01:1.6012533776303479e+00:2.5873320488543744e-01:2.1649720482547568e+00:3.6069334333984671e-01:2.9073139774785810e+00:3.0549989576215808e-01:3.2618076839169321e+00:4.1278852015437562e-01:3.9256027932358037e+00 + CVs 20 + 2.5375519787072676e-01 3.5529381847687430e-01 1.8810331674936703e-01 + 4.8893406643134141e-01 7.3416821443093472e-01 3.8792497439999213e-01 + 6.7637583493726128e-01 1.1393581514062607e+00 5.9562958574067115e-01 + 8.0175772095783882e-01 1.5420036832689608e+00 8.2569810374006447e-01 + 8.7383094363320923e-01 1.9052371842587357e+00 1.1073308211954174e+00 + 9.0184807424405578e-01 2.2212177452252271e+00 1.4507067980135990e+00 + 8.9580428268184098e-01 2.5117254988907836e+00 1.8549975301395778e+00 + 8.8535838168774172e-01 2.7962292710203633e+00 2.3393387681380888e+00 + 9.1885271037539584e-01 3.0634546870618986e+00 2.9283863228887208e+00 + 1.0457863753131587e+00 3.2690498771689116e+00 3.6158081374507880e+00 + 1.2991123374500595e+00 3.3565786733331660e+00 4.3594614111502574e+00 + 1.6825849838855591e+00 3.2795451443465433e+00 5.0943432732094536e+00 + 2.1828925405720030e+00 3.0052272488264098e+00 5.7579517595665708e+00 + 2.7851718945248236e+00 2.5130741977278230e+00 6.2757081784184194e+00 + 3.4568594465444553e+00 1.8536141073191033e+00 6.5404408228987192e+00 + 4.1360972154051519e+00 1.2091408006251845e+00 6.5026463915998187e+00 + 4.7538119059097372e+00 7.5238438176156697e-01 6.2580565953656215e+00 + 5.2553431937811608e+00 4.9384272887901837e-01 5.9529878901513689e+00 + 5.6099066780529707e+00 3.4652479586643903e-01 5.6915417618787396e+00 + id 13209 + loc 3.6533188819885254e-01 3.2156806439161301e-02 399 + blend 0.0000000000000000e+00 + interp 5.3272655022881821e-01:3.0060880705267740e-01:8.3539211247672518e-01:5.3272122296331592e-01:1.4247560314124539e+00:4.4933680613767873e-01:1.9228648383370393e+00:4.2785952437609626e-01:2.3851706575718117e+00:3.9643939555622515e-01:2.9683441346182695e+00:2.7774091865396061e-01:3.7554155466258621e+00 + CVs 20 + -1.7054169151545867e-01 2.4363324487912133e-01 2.6055552921340502e-01 + -3.5552814270802607e-01 4.8058506181099125e-01 4.8093280538352767e-01 + -5.5733757269795048e-01 7.0892588837029491e-01 6.6837305273178882e-01 + -7.7381194590741564e-01 9.2740666254985116e-01 8.3155929991302546e-01 + -9.9780088312052317e-01 1.1362255130370567e+00 9.8061095296892309e-01 + -1.2203229816388568e+00 1.3349677549898016e+00 1.1264197665169469e+00 + -1.4354917663853148e+00 1.5219235380673410e+00 1.2743099905830115e+00 + -1.6422453705178985e+00 1.6961478242594326e+00 1.4267550630421242e+00 + -1.8459744831512122e+00 1.8571287704714550e+00 1.5899954567545100e+00 + -2.0582509079050837e+00 1.9997590465902106e+00 1.7763415951292423e+00 + -2.2891523251581583e+00 2.1058052418432966e+00 1.9974174210322466e+00 + -2.5351001710187733e+00 2.1446398862667699e+00 2.2520943584616662e+00 + -2.7745405610983020e+00 2.1003136996409522e+00 2.5218951494411339e+00 + -2.9783081189244074e+00 1.9883839393847227e+00 2.7823835932018808e+00 + -3.1215434420956494e+00 1.8410914562861138e+00 3.0169631420441223e+00 + -3.1976371386789446e+00 1.6919161951869706e+00 3.2381967347068397e+00 + -3.2006067825324598e+00 1.5521678652717585e+00 3.4908991921041155e+00 + -3.2017772102918785e+00 1.4247569024669202e+00 3.7937657171047832e+00 + -3.5362683149542828e+00 1.5722783263769253e+00 3.8473803793952355e+00 + id 13210 + loc 8.3658534288406372e-01 1.1468474566936493e-01 402 + blend 0.0000000000000000e+00 + interp 4.8096345090685444e-01:4.8095864127234539e-01:2.9682113210248051e-02:4.3326247275782775e-01:4.8158666826250762e-01:3.7243199387583698e-01:1.1825294692524093e+00:3.3935024730103486e-01:2.1137438299720270e+00:4.4007669361477358e-01:2.8091645813424639e+00:3.8687863511932519e-01:3.1034934115188206e+00:4.4293562878670478e-01:3.7886668869479179e+00 + CVs 20 + 2.8826189206440728e-01 2.9177010116481694e-01 2.2836046753334194e-01 + 5.5910414247370610e-01 5.9037043080776264e-01 4.5871279113539021e-01 + 8.1899047912158107e-01 8.8564368204664223e-01 6.8665696284434141e-01 + 1.0798802380671331e+00 1.1526339193548050e+00 8.9040042442045741e-01 + 1.3535397922513126e+00 1.3762376724319054e+00 1.0535432648429093e+00 + 1.6516699947129743e+00 1.5613670005874076e+00 1.1795895212410206e+00 + 1.9940483324669720e+00 1.7156752289866546e+00 1.2857593283676931e+00 + 2.4068607000423503e+00 1.8303783536651994e+00 1.3975723715830892e+00 + 2.8981502447836984e+00 1.8746195089390882e+00 1.5471622939970109e+00 + 3.4429481316501556e+00 1.8006658665546484e+00 1.7628532441067106e+00 + 3.9543594957731116e+00 1.5782558610696054e+00 2.0348121259987400e+00 + 4.3293648757136243e+00 1.2814567747224896e+00 2.2976555958671820e+00 + 4.5645526882962111e+00 1.0190748817964721e+00 2.5105940237130833e+00 + 4.7101675847494278e+00 8.1266905765017028e-01 2.6873746984003080e+00 + 4.8434503525874746e+00 6.1571131282765945e-01 2.8710755458645574e+00 + 5.0776742195032840e+00 3.8932641898650355e-01 3.1171118256830912e+00 + 5.4435886362458961e+00 1.4423327477931003e-01 3.4694216096213899e+00 + 5.8511845852484612e+00 -9.6541559497492990e-02 3.9411583317712013e+00 + 6.2217101584714927e+00 -3.2654232486330481e-01 4.5118385052502576e+00 + id 13211 + loc 3.0359381344169378e-03 7.9222694039344788e-02 407 + blend 0.0000000000000000e+00 + interp 4.2386268209241201e-01:4.2385844346559109e-01:5.6324263832832067e-03:2.8047419907054283e-01:9.5179633523786833e-01:2.4236390831902217e-02:1.7054064458430485e+00:2.5966186479533471e-01:2.9948308552313527e+00:4.0952146286166041e-01:3.4417256781325687e+00 + CVs 20 + 1.6294972654875058e-02 3.3330745784941174e-01 -2.9273177042873971e-01 + 2.8252413583116642e-03 5.3977145153633743e-01 -3.8844083492148984e-01 + 2.6345553527619622e-03 7.3295129496932676e-01 -4.3232115382620551e-01 + 2.9528211889510821e-02 9.3371449777448345e-01 -5.0001592240797588e-01 + 9.3026307316541837e-02 1.1361901863656432e+00 -5.8968690688704795e-01 + 2.0280487784850892e-01 1.3300684023795875e+00 -6.9735889924048422e-01 + 3.6405935641348419e-01 1.5005555357873481e+00 -8.1621619407418211e-01 + 5.7419894092126189e-01 1.6328282969446999e+00 -9.3919360516693717e-01 + 8.2516099663549913e-01 1.7165656844251473e+00 -1.0625367647933184e+00 + 1.1084466619763520e+00 1.7470743868600533e+00 -1.1867978553412737e+00 + 1.4181732213697114e+00 1.7234434574095698e+00 -1.3161410484930722e+00 + 1.7491603901963326e+00 1.6456413144794850e+00 -1.4548478353627574e+00 + 2.0897511951809085e+00 1.5150571753568833e+00 -1.6027608129945830e+00 + 2.4227298836519049e+00 1.3425680146668268e+00 -1.7584291459727810e+00 + 2.7398684587753896e+00 1.1523563727276926e+00 -1.9274666131091012e+00 + 3.0443171343808202e+00 9.7127333014006256e-01 -2.1208770483318511e+00 + 3.3360086139356211e+00 8.1821828457710466e-01 -2.3445194632210620e+00 + 3.6121680210619860e+00 7.0245019586734758e-01 -2.5936969862715720e+00 + 3.9215201695884208e+00 5.8512684494254152e-01 -2.8611997420282043e+00 + id 13212 + loc 1.7301966249942780e-01 6.9834548234939575e-01 376 + blend 0.0000000000000000e+00 + interp 4.9702466405373863e-01:3.7713855237265997e-01:1.9242417406449708e-01:3.4717201773778861e-01:1.0099669263505164e+00:3.3135556842050395e-01:2.0375324444265424e+00:4.9701969380709810e-01:2.6899849658743022e+00:4.2068438565783928e-01:3.0305715156184379e+00:4.5620710406154641e-01:3.7904011270511386e+00 + CVs 20 + -9.5949012058298450e-02 5.3135191815226257e-01 6.9742063790459796e-01 + -6.3389427804414755e-02 8.8239674127991163e-01 1.3322950260097399e+00 + 7.4678553164168493e-02 1.0613213169914668e+00 1.9807415384849232e+00 + 2.5079100582112668e-01 1.1738697890274437e+00 2.6487660109428210e+00 + 3.8171896722013987e-01 1.3068485768697500e+00 3.3295007476970016e+00 + 3.8732883057700629e-01 1.4764539761245463e+00 4.0191172873794070e+00 + 2.1808203994264930e-01 1.6619301972618488e+00 4.6772351440634194e+00 + -1.2756809535578828e-01 1.8408369939825944e+00 5.2375947292008069e+00 + -6.0715126562021593e-01 1.9878216423777961e+00 5.6616621632001936e+00 + -1.1691352376542286e+00 2.0735481392991071e+00 5.9680529615268130e+00 + -1.7769175259020191e+00 2.0731599927362803e+00 6.1897498884149726e+00 + -2.3919932185977286e+00 1.9660917199435710e+00 6.3323771429570623e+00 + -2.9593663588717063e+00 1.7510562391054809e+00 6.3860598562649367e+00 + -3.4248701882963992e+00 1.4593886024910492e+00 6.3519726745021234e+00 + -3.7759440118580434e+00 1.1134522029553988e+00 6.2643587988420979e+00 + -4.0813601348020390e+00 6.2282802758065969e-01 6.1890317996256341e+00 + -4.3018185310988857e+00 -1.6739559284365768e-01 6.1962442346426636e+00 + -4.2585121562401502e+00 -1.0522256420110354e+00 6.3768776712964383e+00 + -4.2005714608854365e+00 -1.5355601746004979e+00 6.5608688664385628e+00 + id 13213 + loc 3.3994814753532410e-01 7.1441054344177246e-02 1069 + blend 0.0000000000000000e+00 + interp 3.6006676570160706e-01:2.9683203845234252e-01:1.5779445719268881e-01:2.9297465521146693e-01:9.1308033695990243e-01:2.9695485150932727e-01:1.8571944158277083e+00:3.6006316503395008e-01:2.4814474150760324e+00:2.9350933242820065e-01:3.4061285702052948e+00 + CVs 20 + -3.0349505174826663e-01 3.1227119667641523e-01 -9.9372967998101802e-02 + -5.5942782123912171e-01 6.2868126508039590e-01 -1.7918547665173062e-01 + -7.9087801083886844e-01 9.4776928424382367e-01 -2.4461953251533963e-01 + -1.0201292881754438e+00 1.2481807431791370e+00 -3.2628900829551599e-01 + -1.2641440549239413e+00 1.4975038884285772e+00 -4.5531550222055006e-01 + -1.5230841888278077e+00 1.6628351443623104e+00 -6.3663402989676998e-01 + -1.7616523964646715e+00 1.7137938630489831e+00 -8.5042908420664365e-01 + -1.9167595876344992e+00 1.6478918539121437e+00 -1.0594365644861643e+00 + -1.9511846411242832e+00 1.5078127782410549e+00 -1.2173994073345911e+00 + -1.9040725309734325e+00 1.3430653121748430e+00 -1.3099594086509045e+00 + -1.8250080655079159e+00 1.1610699315637707e+00 -1.3570121357272753e+00 + -1.7314711685744006e+00 9.6932682165286321e-01 -1.3496694065873840e+00 + -1.6411582554682940e+00 7.8218959587986836e-01 -1.2888376745634873e+00 + -1.5399710420794093e+00 5.5107823828796643e-01 -1.2354661043353257e+00 + -1.3864129149059161e+00 1.9300729434359984e-01 -1.2749685103514274e+00 + -1.1929946612036182e+00 -2.7014009600567174e-01 -1.5132388786382613e+00 + -1.0209675338861879e+00 -6.9416470122857665e-01 -2.0606738634925379e+00 + -9.7037884572956212e-01 -8.7152616655829918e-01 -2.8254748513241821e+00 + -9.9732862009555800e-01 -1.0040525457507030e+00 -3.1265252345543448e+00 + id 13214 + loc 2.5018906593322754e-01 1.3713808357715607e-01 373 + blend 0.0000000000000000e+00 + interp 4.1136641536992369e-01:3.8686824692451199e-01:6.8662286523126115e-02:3.7273368438614640e-01:8.4485634402989285e-01:3.5189267563601329e-01:1.2205686843188175e+00:3.5503278523052484e-01:1.9979408816828552e+00:3.7479758888467746e-01:2.4680706343351781e+00:4.1136230170576998e-01:2.9905588083111594e+00:2.5795742075082967e-01:3.7199687306618072e+00 + CVs 20 + -7.2380028020250980e-02 8.1579870412420541e-01 3.6842255392422363e-01 + -1.7890093919676325e-01 1.6025903518462996e+00 6.8621844307206603e-01 + -3.3586967519572486e-01 2.3656396344778909e+00 9.2646383764311380e-01 + -5.6463058111242626e-01 3.1036742542985927e+00 1.0178954844621413e+00 + -8.8407279926415117e-01 3.8000695173704324e+00 8.8659801651668535e-01 + -1.2944151277909228e+00 4.3811884817944486e+00 4.8386308290548663e-01 + -1.7508604155790910e+00 4.6932753685637287e+00 -1.9490922223519558e-01 + -2.1740288686187856e+00 4.6344989295932617e+00 -1.0480387884833988e+00 + -2.5042610269897567e+00 4.1963774348046972e+00 -1.9435235195973759e+00 + -2.6789620405064771e+00 3.4172475185290860e+00 -2.7506066644332816e+00 + -2.6265526716808103e+00 2.4104896070095285e+00 -3.3774283097414730e+00 + -2.3153630468217830e+00 1.3758461364538861e+00 -3.7850215260713469e+00 + -1.8097992011887096e+00 4.9861615114131563e-01 -4.0268593408091071e+00 + -1.2214110505976887e+00 -1.4875761510669694e-01 -4.2130364069620976e+00 + -6.8477360518190500e-01 -5.8187877064465887e-01 -4.4382324148103667e+00 + -3.0926306490257660e-01 -9.1935797706244093e-01 -4.8832111691118989e+00 + -2.8858957644592242e-01 -1.1839075040945484e+00 -5.7213286874000513e+00 + -7.8196835352775818e-01 -1.3419148927744193e+00 -6.7043116196960479e+00 + -1.1237330725337071e+00 -1.5144253379281722e+00 -7.1281795659482521e+00 + id 13215 + loc 5.6885546445846558e-01 9.1078263521194458e-01 396 + blend 0.0000000000000000e+00 + interp 5.4814982232541565e-01:5.0933831311684652e-01:7.9295277657565055e-02:3.3435157906397334e-01:7.5419018128831150e-01:2.9856252464368044e-01:1.5474305092318403e+00:4.8217884882192702e-01:1.9084802019600988e+00:5.4814434082719243e-01:2.4073011204088117e+00:3.1092209375838697e-01:3.0001689206271198e+00:3.8412389308147388e-01:3.6163281851549987e+00 + CVs 20 + 1.0009982124804622e+00 2.1720704640653671e-01 -3.4971383198253214e-01 + 1.6679015386324452e+00 2.7525051568706660e-01 -6.4103294687209678e-01 + 2.2457413279458609e+00 2.8702048124263979e-01 -9.1866350908818761e-01 + 2.8258789735826069e+00 2.9610249648673342e-01 -1.1992647600527724e+00 + 3.3940495135764439e+00 2.9552361752207962e-01 -1.4799321224990467e+00 + 3.9379826705820626e+00 2.8408594169338253e-01 -1.7604582042916512e+00 + 4.4517551121727408e+00 2.5935212947529718e-01 -2.0409927270276826e+00 + 4.9352854366063630e+00 2.1353014616134058e-01 -2.3265028344362353e+00 + 5.3900097304005801e+00 1.3487110102948208e-01 -2.6212107725699467e+00 + 5.8118413781110787e+00 1.3606376712282042e-02 -2.9228015400286962e+00 + 6.1909269600410495e+00 -1.5543084872033441e-01 -3.2271181180232582e+00 + 6.5171845448830821e+00 -3.7760411998746379e-01 -3.5367253491051720e+00 + 6.7823969137030540e+00 -6.5848594426207296e-01 -3.8558098733421460e+00 + 6.9814235045782427e+00 -9.9352972201252920e-01 -4.1763243711657276e+00 + 7.1155641181257598e+00 -1.3666609629499957e+00 -4.4840357569184190e+00 + 7.1933866121083696e+00 -1.7643286004275553e+00 -4.7779786692331205e+00 + 7.2230559944366775e+00 -2.1816424272261843e+00 -5.0668224502923254e+00 + 7.2052988003341163e+00 -2.6070793774399190e+00 -5.3447979177673792e+00 + 7.0696769290285024e+00 -2.9856225473126750e+00 -5.5489481286726274e+00 + id 13216 + loc 3.1824466586112976e-01 9.8597377538681030e-01 1068 + blend 0.0000000000000000e+00 + interp 5.3776907078281788e-01:3.3334743784915460e-01:1.4833019042685425e-01:5.3776369309211003e-01:7.8533017263191596e-01:3.7850702705292888e-01:1.7141228109297719e+00:7.4106059471478844e-02:2.0009550720112221e+00:3.4205138172948646e-01:2.6943476856967608e+00:3.3601113631895774e-01:3.5975326525453664e+00 + CVs 20 + 5.0088174111678388e-02 3.4846707221134338e-01 -2.5934316209485941e-01 + 1.0589729204617673e-01 6.7964556115171226e-01 -5.1342566988461602e-01 + 1.6071510589075663e-01 1.0017192115685636e+00 -7.7154300265944564e-01 + 2.1034623431323268e-01 1.3177925193745428e+00 -1.0389449662207402e+00 + 2.5110943661893620e-01 1.6260452280826683e+00 -1.3191729807024370e+00 + 2.7538911008360889e-01 1.9247841765504017e+00 -1.6173298795921385e+00 + 2.7554512508515605e-01 2.2139864220620784e+00 -1.9406085504333945e+00 + 2.4739719531187462e-01 2.4903782936289018e+00 -2.3024137070332786e+00 + 1.9319556987348913e-01 2.7352059732649576e+00 -2.7297795253147670e+00 + 1.2898713262154679e-01 2.9191205222649592e+00 -3.2474881736807877e+00 + 9.2443040519985670e-02 3.0279839696915873e+00 -3.8424858430628932e+00 + 1.1980873346423127e-01 3.0620981575687423e+00 -4.4637075652603393e+00 + 2.1499254946944366e-01 3.0055916092239547e+00 -5.0648595275584611e+00 + 3.6599911995538220e-01 2.8310204575676150e+00 -5.6213310612785206e+00 + 5.6168179814610208e-01 2.5460464281402029e+00 -6.0867246924487510e+00 + 7.7016051527509610e-01 2.2285061971845703e+00 -6.3903674493660851e+00 + 9.6382533417963989e-01 1.9485651941416682e+00 -6.5280319053697768e+00 + 1.1542825793525160e+00 1.6531731070537241e+00 -6.6014123893533130e+00 + 1.3269466504226075e+00 1.2126467822090077e+00 -6.7524418816255087e+00 + id 13217 + loc 1.6129437088966370e-01 8.6032235622406006e-01 401 + blend 0.0000000000000000e+00 + interp 4.1112275768164680e-01:4.1111864645406998e-01:3.7278860485898768e-01:3.4876057169444480e-01:9.9734656747684347e-01:4.0977556684461319e-01:1.7609733466018125e+00:3.2151535044389429e-01:2.2318852488614169e+00:2.9313534029501498e-01:2.9982011709265319e+00:3.6824261940280051e-01:3.5643585170063194e+00:3.5651683035529808e-01:3.9999772266338645e+00 + CVs 20 + 1.2125512174608055e-03 3.1483817131638847e-01 -2.4853737106212415e-01 + -1.1016202866691749e-02 6.3442872511805359e-01 -5.3321206401868282e-01 + -4.0600091901788149e-02 9.4861488016659634e-01 -8.3223565506931074e-01 + -8.9471734070768028e-02 1.2295456541438590e+00 -1.1404085909515262e+00 + -1.6609481218754901e-01 1.4584990571287022e+00 -1.4586125787743722e+00 + -2.8786915091841048e-01 1.6294390191995118e+00 -1.7772718764951916e+00 + -4.6797597083196896e-01 1.7357758807918262e+00 -2.0735111384881200e+00 + -6.9772662194459412e-01 1.7672486639538754e+00 -2.3164128578435812e+00 + -9.4723209065763703e-01 1.7238596460860922e+00 -2.4821126527511721e+00 + -1.1866730703727795e+00 1.6229712400676748e+00 -2.5665688296381663e+00 + -1.3973954967457660e+00 1.4877117785486991e+00 -2.5768954198625469e+00 + -1.5723177855337345e+00 1.3404278691605591e+00 -2.5226141970256939e+00 + -1.7243831375407941e+00 1.1964123607055948e+00 -2.4178244395198889e+00 + -1.8314577996195642e+00 1.0888153567495018e+00 -2.2694633805689839e+00 + -1.9730451357156895e+00 9.6828345808351990e-01 -2.0892382612207987e+00 + -2.3468672472518080e+00 5.9984031403141547e-01 -1.9424266491705258e+00 + -2.8660450409658726e+00 1.4645975864326322e-01 -1.9222461130262714e+00 + -3.5112597184055501e+00 -3.3007579356847150e-01 -2.1149420866183566e+00 + -3.9769789573257182e+00 -5.6724676633004401e-01 -2.2956301886855228e+00 + id 13218 + loc 2.7293118834495544e-01 5.0107216835021973e-01 382 + blend 0.0000000000000000e+00 + interp 4.7808239097704397e-01:2.6226760316187953e-01:3.9851653926246122e-02:3.4618211853004216e-01:1.0001254051479087e+00:3.1388076733835790e-01:1.9602227882320160e+00:2.7453350256337172e-01:2.7718938610197763e+00:4.7807761015313421e-01:3.0157057397041429e+00:4.5520306445186881e-01:3.7466380285072063e+00 + CVs 20 + 8.4856040313804781e-01 8.3921414499188912e-02 -5.9554782972803866e-01 + 1.4039209828005286e+00 4.3855623601791238e-02 -1.0727098503584402e+00 + 1.8912072273374918e+00 -2.6867144317038738e-02 -1.5332326536251715e+00 + 2.3913354052475011e+00 -9.7246564358467680e-02 -2.0067432762662740e+00 + 2.9026488963979942e+00 -1.7173617486643855e-01 -2.4811792216059105e+00 + 3.4137134616250151e+00 -2.5192923708969239e-01 -2.9475915542805451e+00 + 3.9064515396060591e+00 -3.4165344389307162e-01 -3.3961249618092331e+00 + 4.3674438204156347e+00 -4.5423664745137615e-01 -3.8165289564361990e+00 + 4.7855985694071617e+00 -6.0636842156430282e-01 -4.2013203788451872e+00 + 5.1481414913077224e+00 -8.0939938182481064e-01 -4.5477549709513312e+00 + 5.4447238391317585e+00 -1.0661918968891777e+00 -4.8546126335491300e+00 + 5.6711080534427474e+00 -1.3732816161942620e+00 -5.1188252375359315e+00 + 5.8279269081546232e+00 -1.7235624160623113e+00 -5.3361612820609334e+00 + 5.9228458430362183e+00 -2.1082926057119056e+00 -5.5035546205776926e+00 + 5.9719778271283666e+00 -2.5195911631615280e+00 -5.6228388910058609e+00 + 5.9747672816774111e+00 -2.9481813220150492e+00 -5.7024743148129389e+00 + 5.9217817504597914e+00 -3.3753613260324555e+00 -5.7487735978402874e+00 + 5.8095595425437700e+00 -3.7853096706155722e+00 -5.7621885017459160e+00 + 5.6090555845073737e+00 -4.2490424843748533e+00 -5.7410041680236628e+00 + id 13219 + loc 2.4136993288993835e-01 3.3365455269813538e-01 374 + blend 0.0000000000000000e+00 + interp 6.0398126499364568e-01:2.6998711406950149e-01:7.2150746125048126e-02:2.6501755093957263e-01:9.0035264181657348e-01:3.4376502856223401e-01:1.1863617190466766e+00:5.0555805895577055e-01:1.6385506969280232e+00:6.0397522518099578e-01:2.0012794678814165e+00:3.8138635458116038e-01:2.7097104965164087e+00:3.5018666689146044e-01:3.5465680609545931e+00 + CVs 20 + -3.4477004268323308e-01 4.2001311935277419e-01 6.4961361085552594e-01 + -5.3324335946316048e-01 6.8090726370462518e-01 1.1817910548544832e+00 + -6.1268976479773229e-01 8.0760470134906359e-01 1.6938372808914417e+00 + -6.3246398503499224e-01 8.5831370714639976e-01 2.1997329606804512e+00 + -6.2881327481285687e-01 8.9602787015933660e-01 2.6694525685586874e+00 + -6.2361522053343021e-01 9.5600220787036294e-01 3.0966951217012846e+00 + -6.3148560456958802e-01 1.0412073275311871e+00 3.5056788303620228e+00 + -6.7084561184774338e-01 1.1483529276064903e+00 3.9280953233038138e+00 + -7.7616904685459820e-01 1.2971539034425195e+00 4.3787495046220233e+00 + -9.9787793392340618e-01 1.5143379449279102e+00 4.8516457679630403e+00 + -1.3747128359712988e+00 1.7996775950901216e+00 5.3438274211814711e+00 + -1.9409851909195255e+00 2.1052272150548927e+00 5.8695070538567400e+00 + -2.7234152589966190e+00 2.3114357789731872e+00 6.4224398418775355e+00 + -3.6852940397815264e+00 2.2707912165379134e+00 6.9366382588498254e+00 + -4.7325064571463100e+00 1.9045564379989237e+00 7.2923581995782056e+00 + -5.7191185975455499e+00 1.2186615231629450e+00 7.3765341066946446e+00 + -6.4533342523387933e+00 2.5315131229635268e-01 7.2692852222192874e+00 + -6.7336799873673838e+00 -7.8514142652065333e-01 7.2427658998212010e+00 + -6.6756750960172013e+00 -1.3284741003329250e+00 7.3495735449810589e+00 + id 13220 + loc 8.5887365043163300e-02 3.5706654191017151e-01 395 + blend 0.0000000000000000e+00 + interp 3.5972107048013224e-01:2.8831584824236761e-01:8.8634834432776977e-03:3.2510841525471973e-01:7.2696148881183820e-01:3.1766716340805612e-01:1.2237381932555411e+00:3.5971747326942743e-01:2.0946876322127901e+00:2.8552874419610408e-01:3.1235863136599127e+00 + CVs 20 + -2.3459925945076820e-01 1.4887626967761541e-01 -3.0788080325541628e-01 + -4.6257358208764987e-01 2.8303814092014740e-01 -5.9526677860928934e-01 + -6.9180839110101200e-01 4.1680473332935891e-01 -8.8641446741424579e-01 + -9.2494299694496718e-01 5.5135054849618914e-01 -1.1915977463574774e+00 + -1.1610910533102630e+00 6.7765973198509577e-01 -1.5096339733485196e+00 + -1.4015545213713185e+00 7.8666525344681981e-01 -1.8370557709166029e+00 + -1.6483175161674222e+00 8.6857369847452737e-01 -2.1711898397094935e+00 + -1.9012193726105240e+00 9.0929078186984025e-01 -2.5106155283431497e+00 + -2.1584955062483369e+00 8.9134249609353811e-01 -2.8467600995130180e+00 + -2.4193290577058342e+00 8.0074573755812839e-01 -3.1560246392981748e+00 + -2.6812960334018729e+00 6.3605856769528391e-01 -3.4116227170869458e+00 + -2.9394710076439812e+00 4.0970887416495394e-01 -3.6054492331039025e+00 + -3.1911758480948547e+00 1.3804802208781641e-01 -3.7440392092244141e+00 + -3.4365872564901019e+00 -1.6244355983901837e-01 -3.8301750556873069e+00 + -3.6753108982204128e+00 -4.7782434875930013e-01 -3.8646464234441842e+00 + -3.9023517829445002e+00 -8.0470695326394681e-01 -3.8541852643965786e+00 + -4.1105354870793240e+00 -1.1469259301843089e+00 -3.8104002308787583e+00 + -4.3033148222060555e+00 -1.5024108080836018e+00 -3.7513116693607085e+00 + -4.5400195139190380e+00 -1.8568315936789759e+00 -3.7518050202827031e+00 + id 13221 + loc 3.5453614592552185e-01 5.1626048982143402e-02 403 + blend 0.0000000000000000e+00 + interp 4.8334115254469773e-01:3.1976991774053087e-01:1.3568726286270338e-01:3.3144679952573364e-01:7.3192910309564896e-01:4.8333631913317232e-01:1.0771051223018602e+00:3.3431044411031452e-01:1.9203921371232235e+00:4.7392307847615728e-01:2.6985269656189441e+00:3.2834401256821105e-01:3.4531890724376328e+00 + CVs 20 + -2.0942974397017741e-01 2.1058149174673124e-01 5.4745951983664401e-02 + -4.3215579042103824e-01 4.2522674909409686e-01 1.2034537293868502e-01 + -6.5990966026928577e-01 6.5688370894725168e-01 1.8226757439485494e-01 + -8.8298388895583746e-01 8.9711620909534540e-01 2.2967556979843884e-01 + -1.1055255365513537e+00 1.1274969193372111e+00 2.5600237684380411e-01 + -1.3307946797859032e+00 1.3332006698466219e+00 2.6074691552367413e-01 + -1.5562442771911185e+00 1.5131422118759827e+00 2.6175159406427562e-01 + -1.7740865348093939e+00 1.6701967791197374e+00 2.8182241973334532e-01 + -1.9785552868969123e+00 1.8014380970780990e+00 3.3924841791049265e-01 + -2.1663164737342901e+00 1.8979143581662195e+00 4.5445259597803811e-01 + -2.3256448178715514e+00 1.9470917769256175e+00 6.3886220597788945e-01 + -2.4455066250313062e+00 1.9353112913624413e+00 8.8844775755198180e-01 + -2.5334192474364063e+00 1.8441639276433357e+00 1.1859309907752968e+00 + -2.6014176929260224e+00 1.6592288016886170e+00 1.5029896497802682e+00 + -2.6439938104871001e+00 1.3749627981606902e+00 1.8285042138379657e+00 + -2.6776871210435735e+00 9.7127660635225177e-01 2.1993653633020664e+00 + -2.8069328330288763e+00 4.4076461723376037e-01 2.6591850792030378e+00 + -3.1150451532320438e+00 -1.1859079966976682e-01 3.1400866814562445e+00 + -3.3215368865252271e+00 -5.6315237074629865e-01 3.4562357206342433e+00 + id 13222 + loc 7.5351667404174805e-01 1.0875094681978226e-01 380 + blend 0.0000000000000000e+00 + interp 4.0945065451937029e-01:3.9077265873513906e-01:3.7128952053759412e-01:3.0342304164175216e-01:1.0525329813472708e+00:3.7270757636893465e-01:2.0128006041680253e+00:4.0944656001282514e-01:2.8987810866954469e+00:3.4654247146945638e-01:3.2394736357711142e+00:2.5208337835136507e-01:3.9822570982606385e+00 + CVs 20 + 5.8069703216272106e-01 2.2147827744573531e-01 6.3178022066134620e-01 + 1.0101830478405200e+00 2.9802407615278687e-01 1.0674443518153245e+00 + 1.3827324126996654e+00 3.0865804572523814e-01 1.4556633047962875e+00 + 1.7365126802811637e+00 2.8828987788999905e-01 1.8725242239422617e+00 + 2.0655943151021150e+00 2.3833754321200873e-01 2.3275361791996660e+00 + 2.3653013737465782e+00 1.6033545507045677e-01 2.8243391720037918e+00 + 2.6362853650933911e+00 5.2269761399633019e-02 3.3569191894790933e+00 + 2.8801305117132876e+00 -9.1058458315794066e-02 3.9115266410495702e+00 + 3.1010760713218941e+00 -2.7657369804654786e-01 4.4752199944999296e+00 + 3.3113083394657146e+00 -5.1331030411089218e-01 5.0345831767431122e+00 + 3.5227964031560326e+00 -8.0922939859269016e-01 5.5625148551782653e+00 + 3.7346184480358016e+00 -1.1695889675324311e+00 6.0226657670305341e+00 + 3.9385213791987188e+00 -1.6083926935881507e+00 6.3931052488295013e+00 + 4.1303829634946512e+00 -2.1292985795500790e+00 6.6714714951804819e+00 + 4.3237967362046206e+00 -2.6981863076921249e+00 6.8864963541547155e+00 + 4.5396583687239422e+00 -3.2610612386816276e+00 7.0809279413251920e+00 + 4.7971222666794455e+00 -3.7870522117046526e+00 7.2731241052046061e+00 + 5.1013466247131358e+00 -4.2554553461013507e+00 7.4419058643739335e+00 + 5.2999768036599129e+00 -4.5349639249922893e+00 7.5563618708122116e+00 + id 13223 + loc 4.5883664488792419e-01 3.7267139554023743e-01 415 + blend 0.0000000000000000e+00 + interp 5.1385429301063457e-01:4.5913862251148890e-01:2.7678670237976155e-01:3.0694527222790025e-01:1.1524493868158450e+00:4.5641365845081650e-01:1.9442529955106931e+00:5.1384915446770452e-01:2.4030686281202525e+00:4.5941211799313253e-01:3.0000910635408768e+00:2.5227620740186135e-01:3.4139163933203713e+00 + CVs 20 + 1.3430128412997205e-01 1.9666500266874287e-01 -2.6261199182254558e-01 + 2.2140844761362502e-01 3.2587780870776867e-01 -4.8020558794218748e-01 + 3.1315149164248651e-01 4.2359053142055036e-01 -6.8268162816805800e-01 + 4.3191614736710304e-01 5.0645394392768139e-01 -8.8798727736067451e-01 + 5.7588240549530023e-01 5.6897583402767338e-01 -1.0921116778048645e+00 + 7.4244586599749218e-01 6.0685609741066338e-01 -1.2896345969302954e+00 + 9.2848194493583680e-01 6.1823531563838885e-01 -1.4755729157190691e+00 + 1.1297302074135072e+00 6.0352929728309412e-01 -1.6464944723419432e+00 + 1.3403897036333858e+00 5.6467768715695887e-01 -1.7996954185818712e+00 + 1.5543724997262300e+00 5.0495083329389001e-01 -1.9333309738028026e+00 + 1.7673346578009372e+00 4.2853480180894832e-01 -2.0486472974531487e+00 + 1.9767284685069144e+00 3.3916907422899012e-01 -2.1520234036611563e+00 + 2.1778135289452853e+00 2.3886375137522853e-01 -2.2541466234712528e+00 + 2.3597029417708413e+00 1.2852480065292449e-01 -2.3651945300612032e+00 + 2.5104296570844573e+00 1.1070299014320106e-02 -2.4861115545324850e+00 + 2.6284533124984328e+00 -1.0842521202816369e-01 -2.6099485323649909e+00 + 2.7215492417475655e+00 -2.2751175088357600e-01 -2.7331478359115433e+00 + 2.7955259151054177e+00 -3.4775821038925381e-01 -2.8582323071536102e+00 + 2.7968250879463343e+00 -4.7256187509552383e-01 -2.9852187415155020e+00 + id 13224 + loc 9.4123959541320801e-01 3.5265481472015381e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9493654880768662e-01:3.1100570853684290e-01:1.7242519443201831e-01:4.9493159944219856e-01:1.0077765728407975e+00:2.9523687170121521e-01:1.5645103276104111e+00:3.0819546606450277e-01:2.3217190972592086e+00:3.0385024329592764e-01:3.0641181284327108e+00:4.1755211289678185e-01:3.7971981214153248e+00 + CVs 20 + -1.2011168144543671e-02 4.0333442582480755e-01 -2.7824185806092955e-01 + -6.1108587541368872e-02 7.5859771748455462e-01 -4.2300654742966437e-01 + -1.2791317891175610e-01 1.0957360693280611e+00 -5.0509418229819192e-01 + -2.1384845091996449e-01 1.4360458302284478e+00 -5.4378263701264895e-01 + -3.1904762279700327e-01 1.7602343859121952e+00 -5.2372399572181738e-01 + -4.3795958106614241e-01 2.0405450880250342e+00 -4.2865609379764558e-01 + -5.5593389192551745e-01 2.2351454093815013e+00 -2.4809102566017449e-01 + -6.4172999047816393e-01 2.2883570207482045e+00 -2.0066391224693447e-03 + -6.5679746168536124e-01 2.1809332798653100e+00 2.2613772779517960e-01 + -6.0509304340942083e-01 1.9873283899337988e+00 3.6071617697914182e-01 + -5.2085737642530550e-01 1.7751627213597716e+00 4.1422243448344054e-01 + -4.2635373341885990e-01 1.5525839142073670e+00 4.2692847967172171e-01 + -3.2799537559298875e-01 1.3020017756491011e+00 4.3154426077562819e-01 + -2.2119609833308784e-01 1.0164064193587776e+00 4.6110047375699426e-01 + -9.2341812550838620e-02 7.1546416560209714e-01 5.8405064423505981e-01 + 7.2060952997253347e-02 5.0296477143371199e-01 9.0835449918661859e-01 + 2.1900700591569924e-01 6.7021681068798844e-01 1.4151498571295522e+00 + 1.5153302164796012e-01 1.3915201274295077e+00 1.5531365537104151e+00 + 1.5769983753007533e-01 1.5357307819763082e+00 1.6019997152709760e+00 + id 13225 + loc 7.2845011949539185e-01 5.9204560518264771e-01 1081 + blend 0.0000000000000000e+00 + interp 3.5130959325370770e-01:3.5130608015777520e-01:6.5081471197704011e-01:2.5093824950227300e-01:1.1967463956149207e+00:2.7972140779020771e-01:2.0620831192457008e+00:2.8813905965848746e-01:2.9697156296414038e+00:2.6085226225588320e-01:3.7255191060903123e+00 + CVs 20 + 8.2263964348422924e-02 5.7039364135560433e-01 4.2890660437756684e-01 + 2.3115097725371819e-01 1.0167517167110700e+00 6.4508676956776967e-01 + 4.1235547961811975e-01 1.4232790401970348e+00 7.8465926063122171e-01 + 6.1402450621239402e-01 1.8056850490259815e+00 8.8259867467590714e-01 + 8.2808156611755090e-01 2.1409274238126330e+00 9.2593459715271420e-01 + 1.0355663260127097e+00 2.3895371032414796e+00 8.9286576343871293e-01 + 1.2008228975563309e+00 2.4929532363143916e+00 7.6856049860231324e-01 + 1.2546552909700748e+00 2.3689956957908200e+00 5.8670457664113884e-01 + 1.0804120974658578e+00 1.9621531443719586e+00 5.2265459571699735e-01 + 7.1900959469939041e-01 1.5273296989688296e+00 8.0241620858027463e-01 + 4.4024582756601066e-01 1.3254287235205928e+00 1.1871022782931926e+00 + 2.8394941973769378e-01 1.2177736062168012e+00 1.4466080175801295e+00 + 1.8990196188691910e-01 1.0922540002298136e+00 1.5907528142021918e+00 + 1.3060935114383132e-01 9.2769574111939979e-01 1.6709568996865802e+00 + 9.8392011704623528e-02 7.7121302813480430e-01 1.7674346848974634e+00 + 8.9907955805353712e-02 7.4926583400952007e-01 1.9724455624556709e+00 + 1.0592162623513407e-01 8.7849422466517224e-01 2.2018865077940024e+00 + 1.4943615512709846e-01 8.3810268235609242e-01 2.3216980389995214e+00 + 2.1435327894434664e-01 3.5811784952485148e-01 2.3408987795175924e+00 + id 13226 + loc 5.0299537181854248e-01 5.6338793039321899e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6845153851811744e-01:4.4412000860374967e-01:6.0121496566703914e-01:4.6844685400273228e-01:1.0144028903390974e+00:2.9578207446977922e-01:1.6503778877465671e+00:3.2766352727252090e-01:2.1703582845113498e+00:3.3216915621485132e-01:2.9425361806846642e+00:3.1064849188732430e-01:3.9149689182462977e+00 + CVs 20 + 1.2603518041821732e-01 2.7579022245077761e-01 -2.8878893348433257e-02 + 2.5853728970375300e-01 5.4212197062235279e-01 -8.1079025046908199e-02 + 3.9986952254437252e-01 8.0366345576540898e-01 -1.5393394445775571e-01 + 5.5195725778820115e-01 1.0558835095765418e+00 -2.4595062696898301e-01 + 7.1882834806364271e-01 1.2842880023179535e+00 -3.6136326563635823e-01 + 9.0514011029087338e-01 1.4735140792586017e+00 -5.0625148175717016e-01 + 1.1116554918354853e+00 1.6117626505513727e+00 -6.9070327428928935e-01 + 1.3307775632127403e+00 1.6887264738376655e+00 -9.2496216131396625e-01 + 1.5439895620813637e+00 1.6905708334954230e+00 -1.2090117663202971e+00 + 1.7275853740975315e+00 1.6038006045728097e+00 -1.5250255278237312e+00 + 1.8633529581600670e+00 1.4238459344216081e+00 -1.8385680069506092e+00 + 1.9477844227465828e+00 1.1636649444602865e+00 -2.1059387599456443e+00 + 1.9986328510952800e+00 8.5739217814080593e-01 -2.2960410266924027e+00 + 2.0398570318497771e+00 5.3974876461945420e-01 -2.4199204481915451e+00 + 2.0780848305435828e+00 2.2185041004115691e-01 -2.5291708406444080e+00 + 2.1066673767382929e+00 -8.8680811184961517e-02 -2.7031610679678151e+00 + 2.1358926366151221e+00 -3.2255230608357954e-01 -3.0151240482837300e+00 + 2.2115432209809702e+00 -3.5828409454171717e-01 -3.4064131621623113e+00 + 2.2882312013173465e+00 -4.0410098362255376e-01 -3.5496443248191358e+00 + id 13227 + loc 6.6974359750747681e-01 3.5243198275566101e-01 402 + blend 0.0000000000000000e+00 + interp 4.3904447032661403e-01:3.6222898825776073e-01:9.8746840451859885e-03:2.7644465282078834e-01:5.8086850754225894e-01:3.4633527280739179e-01:1.0101040845888170e+00:4.3904007988191079e-01:1.8115874670926466e+00:3.8376942146348436e-01:2.1961621861070162e+00:3.1987639578674737e-01:3.0183987297774681e+00 + CVs 20 + 1.4544682071925241e-01 3.0693284854693764e-01 1.8135633621696304e-01 + 2.8581807994196151e-01 6.2117171178788133e-01 3.7599804704062073e-01 + 4.1026526339796671e-01 9.4179278782277098e-01 5.8555474681719533e-01 + 5.3548481858911412e-01 1.2633751369199668e+00 8.0769216558019830e-01 + 7.0055861862046220e-01 1.5710379457465484e+00 1.0326889253584417e+00 + 9.3516649419385800e-01 1.8426895976897180e+00 1.2479879033348780e+00 + 1.2454809847950952e+00 2.0533718613464331e+00 1.4464094885654704e+00 + 1.6185670566843209e+00 2.1806211527289783e+00 1.6338265177458835e+00 + 2.0312418049065708e+00 2.2085927111465957e+00 1.8316460694481540e+00 + 2.4501125286909744e+00 2.1200349960595739e+00 2.0620019882527254e+00 + 2.8138205793795250e+00 1.8936048025036103e+00 2.3212823247992671e+00 + 3.0700069508600376e+00 1.5493885110073147e+00 2.5702878090767523e+00 + 3.2575178087739136e+00 1.1546937060966587e+00 2.7787037375080876e+00 + 3.4607980792368647e+00 7.7190504995372766e-01 2.9429896815374503e+00 + 3.7431491149415725e+00 4.4117611119401345e-01 3.0739297015625571e+00 + 4.1480741593994432e+00 1.7357002132496580e-01 3.2038685603033312e+00 + 4.6844644689862331e+00 -4.0018517103520335e-02 3.3887508250389429e+00 + 5.2924906216260910e+00 -2.1077264472732604e-01 3.6696423996135747e+00 + 5.8779588437237802e+00 -3.4174517958328998e-01 3.9823635967334265e+00 + id 13228 + loc 9.1714654117822647e-03 6.8315416574478149e-01 409 + blend 0.0000000000000000e+00 + interp 3.6156290296989624e-01:3.2056333218340655e-01:3.8116166936097318e-01:2.0174171460266524e-01:1.2041585750396622e+00:3.1285275623487840e-01:1.9998130060235420e+00:3.6155928734086656e-01:2.7942593277620542e+00:3.3396607234570430e-01:3.4596440549000347e+00 + CVs 20 + 5.2839300776357090e-01 2.3776248825447416e-01 -2.2023950948345830e-01 + 9.7831012720525290e-01 4.1167383333900276e-01 -4.3836220895624456e-01 + 1.4267296962405249e+00 5.6745354738013565e-01 -6.6589602415332438e-01 + 1.8797173723641514e+00 7.0323829279261085e-01 -9.1789637995919204e-01 + 2.2956540529176603e+00 7.9315398734841291e-01 -1.2039402069783494e+00 + 2.6403171486526160e+00 8.2635539960149251e-01 -1.5196456413968957e+00 + 2.9061323630986444e+00 8.1231059625890945e-01 -1.8505983683184986e+00 + 3.1153144095924761e+00 7.6759823347557132e-01 -2.1903457519116030e+00 + 3.3026555495166821e+00 7.0108426475033414e-01 -2.5424362157590519e+00 + 3.5013328821323837e+00 6.0899799398131171e-01 -2.9096475650005651e+00 + 3.7347199609665815e+00 4.6581716320566469e-01 -3.2810334673100590e+00 + 4.0008749708585558e+00 2.4359426514722005e-01 -3.5987697685148423e+00 + 4.2867741514266342e+00 -4.7622868656950423e-02 -3.8006840484880220e+00 + 4.5891882918984841e+00 -4.0497620059683381e-01 -3.8888637845941649e+00 + 4.9080731051072277e+00 -8.4977582941145791e-01 -3.9305703048931671e+00 + 5.2442993034141896e+00 -1.3794790552587530e+00 -4.0313763029937446e+00 + 5.6007612101785327e+00 -1.9543341792368638e+00 -4.2414280485166032e+00 + 5.9923356209148242e+00 -2.5509655871216244e+00 -4.5122895968498504e+00 + 6.4774364673056102e+00 -3.1847992080209533e+00 -4.8035357013361173e+00 + id 13229 + loc 1.9080052152276039e-02 6.2341731786727905e-01 374 + blend 0.0000000000000000e+00 + interp 4.7709070482818150e-01:3.5811349010055327e-01:5.1955802265863271e-01:1.2060287853717425e-01:1.2081112432157077e+00:3.5799877619726417e-01:2.8119223193922940e+00:4.7708593392113324e-01:3.1218662804896296e+00:3.9263003889531228e-01:3.8793267031681098e+00 + CVs 20 + -5.5377087427780258e-01 3.3735467448680539e-01 -2.1216861947081433e-01 + -9.9498694603110305e-01 5.8285558666447412e-01 -3.0795557803542206e-01 + -1.4132553866903299e+00 7.4459779221776912e-01 -3.3274229891090407e-01 + -1.8395866717292431e+00 8.4270753157058254e-01 -3.1508203044755978e-01 + -2.2665496347897900e+00 9.1678654180735908e-01 -2.7819525717475962e-01 + -2.7017883186532874e+00 9.9865202306352951e-01 -2.5368129922356930e-01 + -3.1596236904079045e+00 1.0863099911028027e+00 -2.8301761298181416e-01 + -3.6403843615259031e+00 1.1621277338064613e+00 -4.0382790447174122e-01 + -4.1241080471188365e+00 1.2184347885095386e+00 -6.4140794229615361e-01 + -4.5803610016693774e+00 1.2529077948319667e+00 -1.0031074890940477e+00 + -4.9853385150168696e+00 1.2544439001390653e+00 -1.4583705874121271e+00 + -5.3230130943587595e+00 1.1960741779750008e+00 -1.9438466912533650e+00 + -5.5746066225519977e+00 1.0492108963050466e+00 -2.3962777953126646e+00 + -5.7235664614801109e+00 8.0954184369651960e-01 -2.7730746133948712e+00 + -5.7553961269584324e+00 5.1550963561871166e-01 -3.0470258480906618e+00 + -5.6894290121798710e+00 2.1914842165505188e-01 -3.2132708613393617e+00 + -5.5977650852211340e+00 -2.3894449905143667e-02 -3.2673616618244514e+00 + -5.5441054707156923e+00 -2.3915059503313252e-01 -3.2382382982673201e+00 + -5.5704537440973114e+00 -6.8286072264355191e-01 -3.1375820541511210e+00 + id 13230 + loc 9.7745126485824585e-01 9.2763864994049072e-01 396 + blend 0.0000000000000000e+00 + interp 4.3647138302607003e-01:3.2087507765830214e-01:8.0713793704474202e-01:2.7399341992169979e-01:1.2397432664244445e+00:2.4888797348725947e-01:2.0424964820261033e+00:2.8202653868120203e-01:2.8880331605761036e+00:4.0186333139741037e-01:3.1754616309062991e+00:4.3646701831223977e-01:3.9998423925610109e+00 + CVs 20 + 1.0291042021625287e+00 2.0913864019555237e-01 -4.4168037948610933e-01 + 1.6833341097750769e+00 2.3848002180391881e-01 -8.3249122076929738e-01 + 2.2411713495600170e+00 1.9066974384159849e-01 -1.2303979722129643e+00 + 2.7953436876373114e+00 9.2739839623782239e-02 -1.6491360217277165e+00 + 3.3281606828204824e+00 -6.7681136261769415e-02 -2.0676213554475984e+00 + 3.8210769843162797e+00 -2.9075122282279775e-01 -2.4677769742665134e+00 + 4.2594482323235319e+00 -5.6528809679159697e-01 -2.8378827113691680e+00 + 4.6341530977813976e+00 -8.7371851843279935e-01 -3.1708665793937603e+00 + 4.9389730721118790e+00 -1.1940494887035582e+00 -3.4621527037928330e+00 + 5.1721248396835540e+00 -1.5015318480716782e+00 -3.7123273412185558e+00 + 5.3465228007780583e+00 -1.7835826393603149e+00 -3.9360794307128066e+00 + 5.4821647102750033e+00 -2.0533466491906234e+00 -4.1585461948813673e+00 + 5.5872092177258459e+00 -2.3384612630276385e+00 -4.3924493743791357e+00 + 5.6624818720684864e+00 -2.6582346935522638e+00 -4.6256068019854766e+00 + 5.7072955814770294e+00 -3.0142567665122257e+00 -4.8471798685783787e+00 + 5.7162433660235221e+00 -3.4031523342034893e+00 -5.0504326143398579e+00 + 5.6805273588927641e+00 -3.8215497650058996e+00 -5.2261099957380752e+00 + 5.5929547540540270e+00 -4.2720606782036281e+00 -5.3642871452693122e+00 + 5.4527193306472297e+00 -4.8284033359033751e+00 -5.4939854916575408e+00 + id 13231 + loc 3.3341389894485474e-01 1.4339105784893036e-01 393 + blend 0.0000000000000000e+00 + interp 4.0392367813092905e-01:2.5938190176474996e-01:3.7809164122742156e-02:2.6969762111625917e-01:9.8997872965379485e-01:3.0791787269376814e-01:1.7116467464899479e+00:4.0391963889414778e-01:2.4949803725575892e+00:2.6873995249760851e-01:2.9964687852209440e+00:3.6037423810453745e-01:3.6704496429187272e+00 + CVs 20 + -4.8803049853362854e-02 4.3067148800469607e-01 3.9752665467977510e-01 + -1.3907797400941302e-01 8.5485995277189197e-01 7.6178638479294924e-01 + -2.7522486496719245e-01 1.2763171784474250e+00 1.0929442647195711e+00 + -4.8083621149460221e-01 1.6669395823289135e+00 1.3908261552606156e+00 + -7.6688826217443506e-01 1.9817583300797947e+00 1.6481473482132079e+00 + -1.1166848361553618e+00 2.2032184483651922e+00 1.8621963422573713e+00 + -1.5009488603633141e+00 2.3369716524260804e+00 2.0356465018159655e+00 + -1.8869618151116185e+00 2.3911071828643662e+00 2.1766762515684821e+00 + -2.2454881078199844e+00 2.3737358094129339e+00 2.2983902266580429e+00 + -2.5486493953865410e+00 2.2949101828822158e+00 2.4110440504069537e+00 + -2.7699082105630244e+00 2.1727576428981847e+00 2.5149249375596052e+00 + -2.8944371684944219e+00 2.0373199465125227e+00 2.6027976423758381e+00 + -2.9291468676383747e+00 1.9273697110715564e+00 2.6614763992049189e+00 + -2.9079447526481679e+00 1.8842791614637582e+00 2.6713845821604214e+00 + -2.8964686628369929e+00 1.9014829158507296e+00 2.6305679901249746e+00 + -2.9220413623630668e+00 1.8465857710114526e+00 2.5797321494866612e+00 + -2.8992298287997222e+00 1.6171517180482156e+00 2.5733320297769682e+00 + -2.7198115094475077e+00 1.2679993277835884e+00 2.6922299409802601e+00 + -2.3066988591025903e+00 8.7967485328977446e-01 3.0361879947558910e+00 + id 13232 + loc 1.3997372984886169e-01 7.0177549123764038e-01 1069 + blend 0.0000000000000000e+00 + interp 3.6180162526787024e-01:2.9971349695768745e-01:5.1486654384785624e-01:3.6179800725161759e-01:1.4140876405440344e+00:3.3799543652034242e-01:2.3483734492408774e+00:2.8629580362057055e-01:3.1353591843386908e+00:2.7856553178173626e-01:3.9837070222576090e+00 + CVs 20 + 1.2155945858626020e-01 2.5008825922052602e-01 -1.1581782184411660e-01 + 2.4052034077796269e-01 5.1558988459320332e-01 -2.4457185062109665e-01 + 3.5655498543109398e-01 7.9333956172981523e-01 -3.7086632738794195e-01 + 4.6801773124036411e-01 1.0815212726567891e+00 -4.9253555701337559e-01 + 5.6806161987038806e-01 1.3763260853409247e+00 -6.1658634453585792e-01 + 6.4406194668185801e-01 1.6717594753483067e+00 -7.5197203545017488e-01 + 6.8253871978576919e-01 1.9637422462507796e+00 -9.1575855650813631e-01 + 6.7283419853279269e-01 2.2423659090070958e+00 -1.1367796183835523e+00 + 6.0685073030039338e-01 2.4690429391169926e+00 -1.4399368693639825e+00 + 4.8333450441111914e-01 2.5813581270819634e+00 -1.8111701378654517e+00 + 3.1702355964700235e-01 2.5456661878645268e+00 -2.2028991606048813e+00 + 1.3400071307164707e-01 2.3688603395237888e+00 -2.5867886146871522e+00 + -3.4545100978631949e-02 2.0699042681605260e+00 -2.9598437576812753e+00 + -1.5303047062265029e-01 1.6705381757546789e+00 -3.3290615796628140e+00 + -1.7035467055755293e-01 1.1893239595170726e+00 -3.7098936305986223e+00 + 1.7113080837333761e-02 6.5008581969218160e-01 -4.1105652438152118e+00 + 5.4805087487514481e-01 1.7302710829046675e-01 -4.4485235739914204e+00 + 1.2600257959559187e+00 -7.0892361323662501e-02 -4.5740866973854457e+00 + 1.7284162528793643e+00 -2.8471415021791879e-01 -4.6280923224012556e+00 + id 13233 + loc 8.4617906808853149e-01 5.0185298919677734e-01 411 + blend 0.0000000000000000e+00 + interp 2.5908276080527953e-01:2.5619813465625557e-01:8.8959491283123238e-01:2.4655650597214118e-01:1.9229606498402649e+00:2.4611210325382207e-01:2.7405515311377373e+00:2.5908016997767147e-01:3.8349594408773866e+00 + CVs 20 + 8.2665527558986618e-01 1.1024186125135857e-01 -3.0777495503379315e-01 + 1.4301522159758668e+00 7.3322638576575061e-02 -5.8426420777470756e-01 + 1.9981238500095910e+00 -8.0111412473834465e-03 -8.3331540612171984e-01 + 2.5879858191833636e+00 -1.0562462773787562e-01 -1.0464756432519056e+00 + 3.1898119547506920e+00 -2.2418393855078800e-01 -1.2087631256229501e+00 + 3.7898686001117010e+00 -3.6786236244906556e-01 -1.3145461941882548e+00 + 4.3729683893840701e+00 -5.4441149364795471e-01 -1.3643704794209963e+00 + 4.9213571014163815e+00 -7.6722899253426879e-01 -1.3619853640528521e+00 + 5.4144977261089133e+00 -1.0488663866547427e+00 -1.3199138031303173e+00 + 5.8308849401989562e+00 -1.3962674262227812e+00 -1.2605712628510457e+00 + 6.1558165926809902e+00 -1.8069790663524610e+00 -1.1986580441411296e+00 + 6.3910752785690335e+00 -2.2663332533608296e+00 -1.1271173642754369e+00 + 6.5487216156037800e+00 -2.7542100017376976e+00 -1.0335146544933402e+00 + 6.6396291031074490e+00 -3.2537726856748708e+00 -9.1577786109291037e-01 + 6.6690328564604178e+00 -3.7520605596723065e+00 -7.7480858878983450e-01 + 6.6350611816499487e+00 -4.2319221924678470e+00 -6.0387188206264097e-01 + 6.5430067027635506e+00 -4.6745847854762408e+00 -3.9619679762372567e-01 + 6.4224700181825716e+00 -5.0880589512079233e+00 -1.7378428298090121e-01 + 6.4592318855227635e+00 -5.5797005166341522e+00 9.4508406265095823e-03 + id 13234 + loc 4.6442461013793945e-01 6.6621452569961548e-01 377 + blend 0.0000000000000000e+00 + interp 4.6340216484207952e-01:2.4522179538804037e-01:5.6229495955614339e-01:4.5400339079979485e-01:1.1970376036779986e+00:2.6307228306517161e-01:1.9789690944868086e+00:2.6151492056141845e-01:3.0051794959379010e+00:4.6339753082043111e-01:3.8184746939192635e+00 + CVs 20 + -7.3267696743739585e-01 2.2623124418079046e-01 -5.4061769361410261e-01 + -1.3284622257109193e+00 3.2196665896500570e-01 -9.3437317843372736e-01 + -1.8884927036491244e+00 3.6349211442235818e-01 -1.3068012327495968e+00 + -2.4484245113927567e+00 3.8371038657913503e-01 -1.7104133400531907e+00 + -2.9855279618292268e+00 3.8065765607820423e-01 -2.1328148626644365e+00 + -3.4856037618131217e+00 3.5076712681595756e-01 -2.5577193594367262e+00 + -3.9455358028294061e+00 2.8853303705753519e-01 -2.9743861232809792e+00 + -4.3654409605206332e+00 1.8532600281213885e-01 -3.3827676890134533e+00 + -4.7379475275446268e+00 3.4641764314297330e-02 -3.7799037275707090e+00 + -5.0631260563020000e+00 -1.6307654584781828e-01 -4.1596895813955701e+00 + -5.3511756856685766e+00 -4.0536824318196629e-01 -4.5166567835843221e+00 + -5.6157233676966793e+00 -6.9280150985392197e-01 -4.8456789408298127e+00 + -5.8664116594295663e+00 -1.0412984421607523e+00 -5.1380057907502090e+00 + -6.1009854928467933e+00 -1.4781997990402109e+00 -5.3726288155658493e+00 + -6.3179452892819414e+00 -2.0078911522563407e+00 -5.5301603331704490e+00 + -6.5389576565415153e+00 -2.6056459332817221e+00 -5.6233274678664298e+00 + -6.8011232366228578e+00 -3.2340392714104884e+00 -5.6782612018219902e+00 + -7.1363619110671026e+00 -3.8375118550309071e+00 -5.6910176993969994e+00 + -7.5145809433009978e+00 -4.3864107102234673e+00 -5.6497866042040759e+00 + id 13235 + loc 5.6041330099105835e-01 6.4553362131118774e-01 399 + blend 0.0000000000000000e+00 + interp 4.7220725933531660e-01:3.7614965903639214e-01:8.5739913976898063e-01:4.4437008451549542e-01:1.0690398301996491e+00:3.6422110276208414e-01:1.8065183998708014e+00:3.6784909806917188e-01:2.4563587767029826e+00:4.7220253726272327e-01:2.9989378299253473e+00:4.1185284067037081e-01:3.4928770583642708e+00:2.7340842231045576e-01:3.9968689820132068e+00 + CVs 20 + -2.6223066311485793e-01 2.9383080841774017e-01 -1.4873660830681584e-01 + -4.8713412513935855e-01 5.9641952623193684e-01 -3.0655327979648445e-01 + -7.0132577633926074e-01 9.0108554548756481e-01 -4.7660308264412221e-01 + -9.2175815613884737e-01 1.2024121446442582e+00 -6.6224606326401791e-01 + -1.1587696597043984e+00 1.4937193336058647e+00 -8.6915088079546421e-01 + -1.4245874455516851e+00 1.7632057137281589e+00 -1.1043201731399335e+00 + -1.7260003016723375e+00 1.9904568387657982e+00 -1.3715804815111818e+00 + -2.0580431279326650e+00 2.1567319531533102e+00 -1.6645035522193410e+00 + -2.4246510888940644e+00 2.2608026659524585e+00 -1.9785025044692928e+00 + -2.8449619661181584e+00 2.2974513709200877e+00 -2.3200134912851080e+00 + -3.2964342968793328e+00 2.2391746260590630e+00 -2.6765541354147175e+00 + -3.7001257038898587e+00 2.0895551446865830e+00 -3.0035577501651960e+00 + -4.0272698219792957e+00 1.8862715235783887e+00 -3.2863199345746890e+00 + -4.3445130060891533e+00 1.6332367074331067e+00 -3.5536935865246422e+00 + -4.6822764234697853e+00 1.3154249603156365e+00 -3.8073771060423720e+00 + -4.9269365841809289e+00 9.6967047202970191e-01 -3.9995650641374971e+00 + -4.9704459032184163e+00 6.5157999502638897e-01 -4.1112959594778760e+00 + -5.0425855725043851e+00 3.3687024728802906e-01 -4.2035746906320686e+00 + -5.5640309992675432e+00 1.4149107257292703e-01 -4.3463381569342889e+00 + id 13236 + loc 7.2421157360076904e-01 8.2010149955749512e-01 373 + blend 0.0000000000000000e+00 + interp 5.6803412492935068e-01:4.6707153142742269e-01:1.6752969339770318e-01:4.3848901173071259e-01:8.8444512532798691e-01:2.9286460106413276e-01:1.5392864923022214e+00:5.1757564076013607e-01:2.0334819654233147e+00:5.6802844458810142e-01:2.7223247935569819e+00:4.6550176644533958e-01:3.1200324969533595e+00:2.9446266122414910e-01:3.7822206925746857e+00 + CVs 20 + -2.6558926435446628e-01 2.5336629055788595e-01 -8.7169472903812939e-02 + -5.3915259086384959e-01 5.3236731048632058e-01 -1.8507939971891241e-01 + -8.0566398288691365e-01 8.5008022410432116e-01 -2.9670451496464068e-01 + -1.0502028860581665e+00 1.2168367588915847e+00 -4.3083093536116657e-01 + -1.2568879797791936e+00 1.6328269431655507e+00 -6.0296879147305515e-01 + -1.4173100233774656e+00 2.0801026565124765e+00 -8.4044307600622536e-01 + -1.5321265000947539e+00 2.5193183427393566e+00 -1.1793270506957665e+00 + -1.6003510526758502e+00 2.9003530360494114e+00 -1.6354436446756133e+00 + -1.6127561097484029e+00 3.1860218609606599e+00 -2.1921854031610515e+00 + -1.5514571455311894e+00 3.3584362131483267e+00 -2.8139959344029748e+00 + -1.4012271842110680e+00 3.4007002409479439e+00 -3.4663797975662023e+00 + -1.1733069312367674e+00 3.2654650051452583e+00 -4.1196603844476600e+00 + -9.3720738631747613e-01 2.9185747758257130e+00 -4.7116588541104321e+00 + -8.2021451569584847e-01 2.4487663581172887e+00 -5.1865219265420937e+00 + -9.3204998086230029e-01 2.0116047698860116e+00 -5.5597746786468836e+00 + -1.2912533001447708e+00 1.7442371118824618e+00 -5.8324636788101953e+00 + -1.7855785697436151e+00 1.7318274976349877e+00 -5.9642307094105451e+00 + -2.2266604732181183e+00 1.8705210752961587e+00 -5.9778170037524880e+00 + -2.5163246402845321e+00 1.7567434597405411e+00 -6.0802287916628499e+00 + id 13237 + loc 7.4037760496139526e-01 5.3451216220855713e-01 395 + blend 0.0000000000000000e+00 + interp 4.7023747438489694e-01:2.5072395277021625e-01:3.0378131010225706e-01:4.3356626520482822e-01:8.8628111919073393e-01:2.9063156079027774e-01:1.6818645079233581e+00:2.9660916158350775e-01:2.4309205969778267e+00:4.6424049782289378e-01:2.9989571825411518e+00:4.7023277201015312e-01:3.2933807936140771e+00:3.4509189518050237e-01:3.9089690690600900e+00 + CVs 20 + 3.7265744399409545e-01 1.7401334415231623e-01 -4.3419906591500301e-01 + 6.7613825782119308e-01 3.0442966546744099e-01 -7.6807274425526739e-01 + 9.6257468199547946e-01 4.2703644044717204e-01 -1.0689754327677135e+00 + 1.2567366040095571e+00 5.5862794860591425e-01 -1.3648825183397120e+00 + 1.5595310521854813e+00 6.9378009003815067e-01 -1.6530620522020818e+00 + 1.8711103216690881e+00 8.2474421262250175e-01 -1.9317378544433481e+00 + 2.1917267011826320e+00 9.4388704686991742e-01 -2.2019534099188580e+00 + 2.5223122725103386e+00 1.0433182836933867e+00 -2.4662862413266158e+00 + 2.8663605260094451e+00 1.1134077152738706e+00 -2.7272426778745271e+00 + 3.2296597748116502e+00 1.1413213317488935e+00 -2.9872751867681275e+00 + 3.6114574680804576e+00 1.1112584974221857e+00 -3.2479605172695920e+00 + 3.9958570440938170e+00 1.0112271106957289e+00 -3.5060584570270548e+00 + 4.3620527578327435e+00 8.4162269297181247e-01 -3.7532560241724449e+00 + 4.7000839179405016e+00 6.1218240844279270e-01 -3.9830818971318749e+00 + 5.0109602339821295e+00 3.3120515100095949e-01 -4.1905200552224446e+00 + 5.2966852265004212e+00 7.4954628935706147e-03 -4.3715286090488812e+00 + 5.5541869113134856e+00 -3.4296068200898988e-01 -4.5238682785059972e+00 + 5.7771623588361649e+00 -7.0201935509531266e-01 -4.6385787864235644e+00 + 5.9183824069714408e+00 -1.0544927698291953e+00 -4.6394106890714104e+00 + id 13238 + loc 6.9287651777267456e-01 7.3265391588211060e-01 400 + blend 0.0000000000000000e+00 + interp 4.8984298006798105e-01:4.8983808163818038e-01:2.6363465506409522e-01:4.4441170801686453e-01:9.8047679750130967e-01:4.5809198707853116e-01:1.2024990590988598e+00:4.3196871035124124e-01:1.8777583607919643e+00:3.7766552788852475e-01:2.2611176645458779e+00:3.2963549808994869e-01:2.9961614861924084e+00:3.2243840845214483e-01:3.6911267963659702e+00 + CVs 20 + -9.6077806744826272e-02 1.8527692636251239e-01 -2.7210374112668545e-01 + -1.8740622763074277e-01 3.6737237718807353e-01 -5.7827820026470445e-01 + -2.5483463110533267e-01 5.3200836875298285e-01 -9.1616808729295252e-01 + -2.9868726403534029e-01 6.7347007647505897e-01 -1.2806814623792586e+00 + -3.2318705425882011e-01 7.9343828821846463e-01 -1.6640172140390894e+00 + -3.2503106244403351e-01 8.9873420633331380e-01 -2.0571809213318843e+00 + -2.9858302171443629e-01 9.9055046363468191e-01 -2.4532119972377471e+00 + -2.4191422101762833e-01 1.0550404281308750e+00 -2.8475951224250586e+00 + -1.5635265366915352e-01 1.0748573574328577e+00 -3.2369816789419916e+00 + -4.3135692875998888e-02 1.0427414710421719e+00 -3.6174113798978471e+00 + 9.4551086862375969e-02 9.5608216638703247e-01 -3.9814938278339120e+00 + 2.4729459398741399e-01 8.0969431480090837e-01 -4.3149016011551771e+00 + 4.0565352590335269e-01 6.0116110552403224e-01 -4.5953555382068254e+00 + 5.6867958461724033e-01 3.4165582154159368e-01 -4.7918703788107369e+00 + 7.3690876182888099e-01 5.7470743176951888e-02 -4.8769140865485667e+00 + 8.9612578072447846e-01 -2.2138670952225170e-01 -4.8417713608501138e+00 + 1.0220253438022835e+00 -4.6730080710230260e-01 -4.7094844510027363e+00 + 1.1102109756762653e+00 -6.6362892831568443e-01 -4.5585381131241158e+00 + 1.2463472764287411e+00 -8.5368648822977033e-01 -4.6976393114001276e+00 + id 13239 + loc 9.9648362398147583e-01 3.0770483613014221e-01 382 + blend 0.0000000000000000e+00 + interp 4.6523468458014200e-01:4.6523003223329623e-01:2.3255948954594485e-02:3.9547753897004617e-01:9.2836168808065445e-01:2.3143107930813078e-01:1.2586314704978765e+00:2.9172484319981429e-01:2.3802230410950767e+00:4.1538107626479459e-01:3.0209384479800745e+00:4.0267378145390520e-01:3.7730806874457166e+00 + CVs 20 + -9.4453843906515589e-01 2.9452534651725087e-01 6.2332081337872591e-01 + -1.5961741701165413e+00 4.2095451498681252e-01 1.0749315072448693e+00 + -2.1748867909102731e+00 4.8771190071468606e-01 1.4577856415510895e+00 + -2.7790491996723832e+00 5.2545129021532888e-01 1.8190774037541790e+00 + -3.4067312872883941e+00 5.2821528358180236e-01 2.1539679100063069e+00 + -4.0435085304332778e+00 4.8940974509920521e-01 2.4554134149585427e+00 + -4.6700288170478865e+00 4.0795469929715966e-01 2.7133693734256354e+00 + -5.2668152544764277e+00 2.8892025622070938e-01 2.9232713509198702e+00 + -5.8268788219831276e+00 1.3792846168774608e-01 3.0954968152956392e+00 + -6.3585452054694009e+00 -5.1656866523562606e-02 3.2539550794809342e+00 + -6.8683948742903160e+00 -3.0033550205636073e-01 3.4234799669543046e+00 + -7.3459839692983167e+00 -6.3563082831199358e-01 3.6171804676339430e+00 + -7.7508943648828756e+00 -1.0853674188688800e+00 3.8201375375374531e+00 + -8.0048242260714773e+00 -1.6461191418924845e+00 3.9877968640487764e+00 + -8.0576165617479969e+00 -2.2725080607500896e+00 4.0911066193378662e+00 + -7.9553495628825717e+00 -2.9443607021694360e+00 4.1380151115868742e+00 + -7.7995539949372299e+00 -3.6739273669959545e+00 4.1589046296610057e+00 + -7.6547947075196943e+00 -4.4245271868918596e+00 4.2164058878241777e+00 + -7.4907508834478103e+00 -5.0080481302832087e+00 4.3694451375144130e+00 + id 13240 + loc 2.3542626202106476e-01 2.8618922829627991e-01 380 + blend 0.0000000000000000e+00 + interp 4.3945283498734805e-01:4.3944844045899822e-01:1.0877471104466574e-02:3.4721931302750614e-01:8.9684449249475351e-01:3.3632366669631708e-01:1.5451604897206535e+00:2.9506229677863849e-01:2.0044414003982043e+00:4.0416418518997355e-01:2.4549287491713545e+00:4.0020839958969162e-01:3.0000367900071474e+00:3.5622709452414147e-01:3.5126634492207027e+00 + CVs 20 + -4.2545953422966826e-01 2.5780269445184512e-01 5.3073566356453905e-01 + -7.3626955240358571e-01 4.1114483640428034e-01 9.9362059929748114e-01 + -1.0183058281440180e+00 5.1192546934018002e-01 1.4625314049904024e+00 + -1.3203430544955710e+00 5.9141846244643714e-01 1.9688428144751642e+00 + -1.6550028862873254e+00 6.5236423294847290e-01 2.4931609112924211e+00 + -2.0282030768348500e+00 6.8618008015362841e-01 3.0087950589804753e+00 + -2.4381695078447674e+00 6.7785146276721919e-01 3.4931628674539028e+00 + -2.8752792262460112e+00 6.1709750871412661e-01 3.9246656891859888e+00 + -3.3194285128577916e+00 5.0353594276402891e-01 4.2857997003189734e+00 + -3.7435691869987084e+00 3.4482679369639913e-01 4.5729538438566841e+00 + -4.1250305003161927e+00 1.4921871315063129e-01 4.7944115405124528e+00 + -4.4547781331702971e+00 -8.1762120880742195e-02 4.9620730957257653e+00 + -4.7362113075990715e+00 -3.5479979090776803e-01 5.0896635899419458e+00 + -4.9771225599013098e+00 -6.7729004660286574e-01 5.1917033548899330e+00 + -5.1849405908044250e+00 -1.0514738190441513e+00 5.2824358514764338e+00 + -5.3615492328585876e+00 -1.4633428723621238e+00 5.3762143261475845e+00 + -5.5071275058988185e+00 -1.8918158124645368e+00 5.4970529501572543e+00 + -5.6122950960648001e+00 -2.3041458848836398e+00 5.6731113560925284e+00 + -5.6542032184755460e+00 -2.6436848242699464e+00 5.8733719369628847e+00 + id 13241 + loc 8.3221632242202759e-01 9.4457823038101196e-01 376 + blend 0.0000000000000000e+00 + interp 3.0282908256542002e-01:1.9956376675093360e-01:1.4867522114948084e-01:2.7447076606228010e-01:9.6887570347944163e-01:1.7763364001580734e-01:1.5559290639264236e+00:2.1514950651908521e-01:2.3560537815427933e+00:3.0084174281142595e-01:2.9829270375031678e+00:3.0282605427459436e-01:3.7047077576890168e+00 + CVs 20 + -1.6036842545979701e-01 2.3180129429812404e-01 4.3578475648368664e-01 + -2.5843122719540984e-01 4.0637661849350792e-01 8.0616416506773547e-01 + -2.8359546665340407e-01 4.9405055403809728e-01 1.1932470808048294e+00 + -2.2267910986919362e-01 4.9216374279033692e-01 1.6438179923036866e+00 + -8.9619726410604034e-02 4.6278070932849247e-01 2.1240492791606456e+00 + 7.4894499600621500e-02 4.6711952637028220e-01 2.6042534676188942e+00 + 2.1854090805643034e-01 5.2701529206334063e-01 3.1005577442130479e+00 + 2.8686277571760532e-01 6.5054942797958670e-01 3.6367787185192331e+00 + 2.3297188106583466e-01 8.4604737864544055e-01 4.1990631024458080e+00 + 3.0870716526215980e-02 1.1040700772929812e+00 4.7425460399188948e+00 + -3.1529350208253248e-01 1.3815466881291376e+00 5.2315739070022715e+00 + -7.8664161504353258e-01 1.6064785714097729e+00 5.6448913213724108e+00 + -1.3578602679493541e+00 1.6923987218981060e+00 5.9510245704252620e+00 + -1.9795023304863237e+00 1.5790083619360447e+00 6.1000227063337036e+00 + -2.5521324456165564e+00 1.2703940505936377e+00 6.0428699351971034e+00 + -2.9418824216230215e+00 8.1896409667140269e-01 5.8318298748175472e+00 + -3.0396585474259776e+00 2.5735258234402725e-01 5.6840420564092309e+00 + -2.8252053705405986e+00 -3.1278274487195201e-01 5.7572045313155726e+00 + -2.9286235643584675e+00 -8.6594505122446552e-01 5.6525711704164072e+00 + id 13242 + loc 4.8483571410179138e-01 5.8888059854507446e-01 415 + blend 0.0000000000000000e+00 + interp 4.5941671216025409e-01:4.5941211799313253e-01:4.9979609927198743e-03:4.2268586220253501e-01:9.3522167114559174e-01:2.8343394804507771e-01:1.1459019154039332e+00:2.7860228246886359e-01:1.8666216502279107e+00:4.0015528774610620e-01:2.8561063971203957e+00:3.0949592189875824e-01:3.7918563959085452e+00 + CVs 20 + 4.7349685316583900e-01 1.8730279688465040e-01 -1.0795102023941489e-02 + 8.7170485141175469e-01 2.8514462353081810e-01 -6.2586680336990330e-02 + 1.2674180809966418e+00 3.6182661150167128e-01 -7.8295210680289273e-02 + 1.6704714272796901e+00 4.2561132510757027e-01 -4.0618396552785541e-02 + 2.0732328120748429e+00 4.7015560419188740e-01 5.3245768325338783e-02 + 2.4669413685516774e+00 4.9158375945487354e-01 2.0657498612817926e-01 + 2.8397513400118588e+00 4.8686301988971381e-01 4.1563591984294923e-01 + 3.1817467703393953e+00 4.5508132044841831e-01 6.6966523433116043e-01 + 3.4878790878252612e+00 3.9832796682234228e-01 9.5954013037692698e-01 + 3.7548009809400491e+00 3.1919629051397003e-01 1.2743522612126967e+00 + 3.9820630129600709e+00 2.1547107312757174e-01 1.5727672547569616e+00 + 4.1793419842570687e+00 8.3580882216013563e-02 1.7773666398541481e+00 + 4.3505433963490416e+00 -6.8252860156800210e-02 1.8433854150772455e+00 + 4.4915759632351797e+00 -2.2387048042034197e-01 1.8237624729002013e+00 + 4.6137349363747795e+00 -3.8075601654124425e-01 1.7916569561839790e+00 + 4.7217645912008894e+00 -5.3706949476725674e-01 1.7521107985023630e+00 + 4.8138411142934086e+00 -6.8266665679832217e-01 1.6870493126496886e+00 + 4.9063215799545699e+00 -8.1531733704684717e-01 1.6037431484536744e+00 + 5.1479026238333514e+00 -1.0033644849336838e+00 1.6732589060779741e+00 + id 13243 + loc 1.1687212437391281e-01 4.7137963771820068e-01 375 + blend 0.0000000000000000e+00 + interp 5.4424828122212476e-01:4.1315810651022755e-01:4.2933731260308050e-01:5.1167360145166452e-01:9.8982616061184581e-01:4.5327474183286620e-01:1.5104571312141082e+00:3.1389179457258121e-01:1.9756385401332486e+00:3.6177694834250829e-01:2.3852703898305410e+00:3.3382036766411016e-01:3.1032181320729393e+00:5.1700543282346390e-01:3.6511681638136650e+00:5.4424283873931256e-01:3.9999699063510628e+00 + CVs 20 + 4.8146904224136242e-02 4.8388523896860847e-01 5.1381287483796578e-01 + 1.4766629123575198e-01 8.2976304942677492e-01 9.9196195979779711e-01 + 3.0509247928479788e-01 1.0309763659193232e+00 1.4953722817167932e+00 + 5.0311193137532828e-01 1.1533757629630450e+00 2.0028925872693613e+00 + 7.1633526222984323e-01 1.2730985123587404e+00 2.5031111085022015e+00 + 9.0703617091008604e-01 1.4319945105026577e+00 3.0249583539322975e+00 + 1.0127317920936070e+00 1.6430873997933930e+00 3.5824477115885101e+00 + 9.7836784535745636e-01 1.9059209861955018e+00 4.1476635943257598e+00 + 7.7687242723323213e-01 2.2146466603426918e+00 4.6822525486609976e+00 + 3.9706373472369139e-01 2.5434531110197991e+00 5.1662041491939128e+00 + -1.6683428129908129e-01 2.8332211307076576e+00 5.5936196168175121e+00 + -9.0361161499961429e-01 2.9842821380392559e+00 5.9319810558016455e+00 + -1.7343226147992956e+00 2.8878753956926415e+00 6.1070743627826740e+00 + -2.4971547971830814e+00 2.5159790537918179e+00 6.0487950285640526e+00 + -3.0359545631199856e+00 1.9194878709747323e+00 5.7843736340283982e+00 + -3.2926722648501960e+00 1.1075239152048724e+00 5.5403890174736183e+00 + -3.2019543915541107e+00 1.1617866873190374e-01 5.6046936608568627e+00 + -2.8625687564931477e+00 -6.9471109043838819e-01 5.8800638241700653e+00 + -2.7531126271505642e+00 -1.2378233153032125e+00 5.8679729439861443e+00 + id 13244 + loc 7.2849935293197632e-01 2.1231651306152344e-02 403 + blend 0.0000000000000000e+00 + interp 4.0208421754826523e-01:4.0208019670608974e-01:6.8919324218431854e-01:3.3182508842401931e-01:1.6916703846449113e+00:2.6954389529523998e-01:2.4127697977684361e+00:3.0634205592076991e-01:3.1378940581445076e+00:3.1402883544972887e-01:3.9738549489141928e+00 + CVs 20 + -3.2698933820239917e-03 3.7789464908068437e-01 2.4610384009585221e-01 + 1.3606612213798719e-02 7.5213706847906614e-01 4.6495659065056338e-01 + 3.0022869662576168e-02 1.1362316985947869e+00 6.9155619660936640e-01 + 4.2724910095553015e-02 1.5219250042356742e+00 9.5365502644343503e-01 + 6.4569274774717966e-02 1.8817227793007574e+00 1.2567140685882678e+00 + 1.1842113452736402e-01 2.1885714853213516e+00 1.5794556188547542e+00 + 2.2153422979869219e-01 2.4303890594892152e+00 1.8993003490625764e+00 + 3.7817382763781882e-01 2.6021874224416726e+00 2.2032558172738197e+00 + 5.8198834518464126e-01 2.6993204092882581e+00 2.4802167836017217e+00 + 8.2432376281438025e-01 2.7208987361228898e+00 2.7265986134966735e+00 + 1.1043100156966201e+00 2.6681486926537872e+00 2.9482405374506766e+00 + 1.4242240691656185e+00 2.5385537363103579e+00 3.1508531556833654e+00 + 1.7594110570711772e+00 2.3321491330982660e+00 3.3308657035300997e+00 + 2.0655742074478254e+00 2.0657544523715483e+00 3.4812242786174199e+00 + 2.3431411441101866e+00 1.7492677210968122e+00 3.5996529974804390e+00 + 2.6514876936314677e+00 1.3513748502966776e+00 3.6936080087379426e+00 + 3.0182712071941662e+00 8.5799041913646723e-01 3.8174718538013295e+00 + 3.3581641319753732e+00 3.5227340808584406e-01 4.0302879797043589e+00 + 3.5198458021691255e+00 -3.9246278229606024e-02 4.2457847571285496e+00 + id 13245 + loc 8.9474213123321533e-01 3.0282250046730042e-01 1081 + blend 0.0000000000000000e+00 + interp 3.4705497004975777e-01:3.3184294953683519e-01:6.8240549232902303e-01:2.5194640794896439e-01:1.0711111916430718e+00:2.4063309703262648e-01:2.0270132087786430e+00:3.4705149950005731e-01:2.9915769843149409e+00:2.3994593229574490e-01:3.9976412771258185e+00 + CVs 20 + 6.6955140135803559e-02 5.2953649649531109e-01 -3.9696046048865591e-01 + 6.7326732162338976e-02 9.6668673504784153e-01 -6.1485096174829290e-01 + 4.5577647910749752e-02 1.3782384116760820e+00 -7.5814595885967728e-01 + 1.3231230766406088e-02 1.7877590583205258e+00 -8.5854086145727382e-01 + -3.2855193256963289e-02 2.1775210087724952e+00 -9.0265650686473642e-01 + -8.9632131006458171e-02 2.5134599939098790e+00 -8.6788464984244329e-01 + -1.4368393231957266e-01 2.7375178696707767e+00 -7.3353371075202900e-01 + -1.6515250224101785e-01 2.7634584423074262e+00 -5.2208600415757633e-01 + -1.2000660765563942e-01 2.5367014313445884e+00 -3.6715424586939371e-01 + -3.4312781897153477e-02 2.2167274002425081e+00 -3.9371162356378342e-01 + 3.9418906781172047e-02 1.9563903673558376e+00 -4.8636979904715649e-01 + 9.6914846835187085e-02 1.7185935159457024e+00 -5.5087678826148323e-01 + 1.4341552909425578e-01 1.4557803943875638e+00 -5.8779147657969932e-01 + 1.7544420483727541e-01 1.1555855389874172e+00 -6.2535213429611869e-01 + 1.8718239303121012e-01 8.4688127079835473e-01 -7.3019937310716354e-01 + 1.7505244088617603e-01 6.4113182113849798e-01 -1.0166688684894860e+00 + 1.3392258769185494e-01 6.5680047322730561e-01 -1.4469179790087425e+00 + 5.8547800878270995e-02 6.7263894023161130e-01 -1.8045517701425622e+00 + -3.8018026252381487e-02 2.6450845279546076e-01 -2.0284872960072318e+00 + id 13246 + loc 6.9272494316101074e-01 5.3952842950820923e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0236543107958211e-01:2.6141757271625865e-01:2.3009027561147244e-01:3.0026771292975385e-01:1.0315201611350098e+00:3.4082663158900278e-01:1.8585658967106062e+00:3.0905656211538557e-01:2.3253355368315320e+00:4.0236140742527132e-01:2.9991313015487915e+00:2.9353045511759579e-01:3.6836778975946327e+00 + CVs 20 + -1.0104129811034164e-01 2.3703232950289893e-01 2.3708902185403050e-01 + -1.6356012186100022e-01 4.0139925512836999e-01 3.6031093505067280e-01 + -2.1251521644589574e-01 5.3272602025969440e-01 4.3406465901574554e-01 + -2.6988479195715981e-01 6.5840373533694141e-01 5.0841530368632992e-01 + -3.3261236393348859e-01 7.7576732405650428e-01 5.8222465030875747e-01 + -3.9666081587425966e-01 8.8186665221052296e-01 6.5415935825498295e-01 + -4.5901769817398486e-01 9.7511575526326411e-01 7.2196856353618222e-01 + -5.1866447854436526e-01 1.0561279809666306e+00 7.8320267732791549e-01 + -5.7678942155262147e-01 1.1270106856681841e+00 8.3765231844955290e-01 + -6.3594363410640142e-01 1.1900721712653197e+00 8.8738281556108212e-01 + -7.0083829886318083e-01 1.2466776911562063e+00 9.3391796162124996e-01 + -7.8124714964592856e-01 1.2953283262622444e+00 9.7552592388180481e-01 + -8.8899927299772374e-01 1.3300368002298719e+00 1.0063751008718045e+00 + -1.0329927573445015e+00 1.3421343050380794e+00 1.0190513903113625e+00 + -1.2177311676821119e+00 1.3251306079151317e+00 1.0080792946249000e+00 + -1.4427835942578198e+00 1.2793820858623874e+00 9.7313804925299263e-01 + -1.7047314285528468e+00 1.2091841345812440e+00 9.1527360526402946e-01 + -1.9979223717850927e+00 1.1198881676137340e+00 8.2871665272606432e-01 + -2.3126072191823006e+00 1.0339564533993038e+00 7.3177640767491170e-01 + id 13247 + loc 1.7939403653144836e-01 2.4233266711235046e-01 402 + blend 0.0000000000000000e+00 + interp 4.3826527516948227e-01:2.9212159298531326e-01:1.3130210225810546e-01:4.0133197500303791e-01:8.4404119788986887e-01:4.3699009065675348e-01:1.1527488910522772e+00:3.1297283826513594e-01:1.9596525385081827e+00:4.1569093791394873e-01:2.7396582514451282e+00:4.3190295577440191e-01:3.1138133997979649e+00:4.3826089251673062e-01:3.8875895903290272e+00 + CVs 20 + -9.9150569867643534e-02 3.9522455164004744e-01 2.0674205973484566e-01 + -2.1811244101288277e-01 7.6819190391756809e-01 3.7968120361094282e-01 + -3.7538674692772273e-01 1.1203427472998624e+00 5.1453930130602132e-01 + -5.7657760883804343e-01 1.4476533271096421e+00 6.1755119472594644e-01 + -8.1978200321820305e-01 1.7427526169666032e+00 7.0109050340844181e-01 + -1.1023197259383963e+00 1.9992712522824911e+00 7.7454442428330572e-01 + -1.4212917566491301e+00 2.2121342945957641e+00 8.4105366259308101e-01 + -1.7696994011464033e+00 2.3748273261589770e+00 9.0740870589156564e-01 + -2.1333294051502003e+00 2.4790144167619270e+00 9.8956637428188698e-01 + -2.4923520315462344e+00 2.5184959305269805e+00 1.0956635380127389e+00 + -2.8292509163612043e+00 2.4932671408322644e+00 1.2146989675248436e+00 + -3.1222387170221100e+00 2.4079769448411290e+00 1.3294786459364905e+00 + -3.3548371247232298e+00 2.2635081475167467e+00 1.4339910216198857e+00 + -3.5228601270443232e+00 2.0504157774597012e+00 1.5361498082289167e+00 + -3.6244078579314483e+00 1.7634118665331597e+00 1.6633645408636364e+00 + -3.6629867450604383e+00 1.4083735692476473e+00 1.8756875349532165e+00 + -3.6441103737855856e+00 1.0513906647260662e+00 2.2469819522453012e+00 + -3.5620760508983880e+00 8.1892245211734216e-01 2.7587211014102184e+00 + -3.4234650792623156e+00 7.0989122965709717e-01 3.3035876092859846e+00 + id 13248 + loc 7.1689319610595703e-01 9.5973116159439087e-01 1069 + blend 0.0000000000000000e+00 + interp 5.5148207888320377e-01:3.0889318096921381e-01:2.7327345159312355e-01:2.8859460580246499e-01:1.3268523043860576e+00:3.9942128672623201e-01:1.9957708294404322e+00:5.5147656406241496e-01:2.4857665227980323e+00:5.0198049574267933e-01:2.9968455924104367e+00:2.6528495206992914e-01:3.7267579956702148e+00 + CVs 20 + 1.8812258884033006e-01 2.6808071660335991e-01 -1.6224915290151365e-01 + 3.5138598054309578e-01 5.4556780265319671e-01 -3.3307121680440199e-01 + 5.3527135072751486e-01 8.1435751651954114e-01 -5.0953287723051621e-01 + 7.7618277726849527e-01 1.0484277404967954e+00 -6.8541385039983216e-01 + 1.0774309007373195e+00 1.2261305504886915e+00 -8.5436090764531070e-01 + 1.4102606153028032e+00 1.3540220273062278e+00 -1.0207981417232279e+00 + 1.7364240812097154e+00 1.4723229346334668e+00 -1.1975784906806102e+00 + 2.0243824864478883e+00 1.6228063392722587e+00 -1.3904068336161064e+00 + 2.2419097716842620e+00 1.8159137631096629e+00 -1.5950740443698721e+00 + 2.3457927059677282e+00 2.0092758758848652e+00 -1.8103433641732698e+00 + 2.3042184522266558e+00 2.1105548171090796e+00 -2.0276846400185802e+00 + 2.1700502969160542e+00 2.0726975859243648e+00 -2.2172549529322279e+00 + 2.0279813584120139e+00 1.9353012573580368e+00 -2.4008810927044157e+00 + 1.9269441324694205e+00 1.7015506699056875e+00 -2.5912106663992600e+00 + 1.9084386525101875e+00 1.3895413698394190e+00 -2.7717836784331551e+00 + 1.9923485443964921e+00 1.0311146795183284e+00 -2.9142587549902639e+00 + 2.1827314165746770e+00 6.5769311681993181e-01 -2.9582302651099996e+00 + 2.4471626360809537e+00 3.1712306380409194e-01 -2.8639427932745183e+00 + 2.6132890726257898e+00 -4.7660503433612528e-02 -2.9349173373362318e+00 + id 13249 + loc 6.8327176570892334e-01 3.5847187042236328e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6763326240346209e-01:3.2786086333763875e-01:4.3766257964605793e-01:2.9924681546606974e-01:1.0332478944804451e+00:2.9249649417134926e-01:1.9095523239723420e+00:4.6762858607083807e-01:2.3367430984703290e+00:4.3026053387930935e-01:2.9731035467355094e+00:2.9139507403998799e-01:3.6562798818837230e+00 + CVs 20 + -5.6432352786701320e-02 3.1963722594161842e-01 5.3563169823057200e-02 + -1.4094824029578765e-01 6.3305969219664027e-01 1.0546175638188318e-01 + -2.4629943763709378e-01 9.4258392910173461e-01 1.7116695777801189e-01 + -3.7142141896143438e-01 1.2490678055360818e+00 2.6557180980448342e-01 + -5.1876501753322968e-01 1.5502903719926315e+00 4.0433597014831479e-01 + -6.8778307015039652e-01 1.8385241551359828e+00 6.0432509586493854e-01 + -8.7289301017025556e-01 2.0989108958589906e+00 8.7899025276679776e-01 + -1.0634055776576741e+00 2.3123924935234332e+00 1.2368145926661820e+00 + -1.2428721816078727e+00 2.4556347266867409e+00 1.6825106953068745e+00 + -1.3882843781054695e+00 2.5003226915544388e+00 2.2085285795211989e+00 + -1.4749194117106472e+00 2.4200150789078827e+00 2.7881395038486789e+00 + -1.4862370728444325e+00 2.2097084862450034e+00 3.3628662444548199e+00 + -1.4388354026124739e+00 1.9179362416240275e+00 3.8501804316840769e+00 + -1.3925762896551879e+00 1.6623472808998367e+00 4.1709833979001525e+00 + -1.4239207232233586e+00 1.5938025069909130e+00 4.2242504421084410e+00 + -1.5556549187035440e+00 1.6699506983536199e+00 3.8899153952322982e+00 + -1.6946860153127588e+00 1.5583568103823309e+00 3.2461320546704004e+00 + -1.6980025375616024e+00 8.2631108924088759e-01 2.4431628239729100e+00 + -1.7575610563283461e+00 9.9027455560491418e-01 2.5369754866666163e+00 + id 13250 + loc 9.9055778980255127e-01 3.0923157930374146e-01 396 + blend 0.0000000000000000e+00 + interp 4.4796202302714416e-01:2.4525806132294675e-01:2.9798648482626255e-05:4.4795754340691391e-01:9.4740994984135607e-01:2.6786262374730518e-01:1.1854832212515778e+00:2.5618234001094015e-01:2.1768594217583370e+00:3.4591937384194044e-01:2.9859397386577453e+00:4.2150666064302067e-01:3.4412408999859219e+00 + CVs 20 + -6.7564025925509896e-01 1.0860816807482138e-01 4.2258766678825577e-01 + -1.1441337470495700e+00 1.0468847021715971e-01 7.2127689651383375e-01 + -1.5692379929002482e+00 5.5782465918714608e-02 9.8379741330605075e-01 + -2.0212553380470775e+00 -1.6258021238575449e-03 1.2375898367058178e+00 + -2.4968846141694692e+00 -6.8801746636680039e-02 1.4809900969390095e+00 + -2.9903533621828204e+00 -1.4693751579519732e-01 1.7174383403944726e+00 + -3.4883948699452700e+00 -2.3698775916656034e-01 1.9542451431259829e+00 + -3.9701848777957354e+00 -3.4196597481156821e-01 2.1954963721593845e+00 + -4.4178049427510526e+00 -4.7107317392551606e-01 2.4404184361656069e+00 + -4.8196933995687576e+00 -6.3777038613492154e-01 2.6881164934526227e+00 + -5.1594800336102686e+00 -8.4125671433252380e-01 2.9463474649983201e+00 + -5.4151245571315574e+00 -1.0676864507670167e+00 3.2206887876038834e+00 + -5.5734086625989141e+00 -1.2972077205210777e+00 3.5110915918074124e+00 + -5.6385818997907089e+00 -1.5148154980394273e+00 3.8158746923506310e+00 + -5.6243898293825900e+00 -1.7109473269144182e+00 4.1306815163492940e+00 + -5.5472594957831785e+00 -1.8734504768953752e+00 4.4501427795982558e+00 + -5.4258328985961333e+00 -1.9943957695851127e+00 4.7733502500517737e+00 + -5.2735468012754216e+00 -2.0875168919836886e+00 5.0976591793120569e+00 + -5.0052002533505622e+00 -2.2612651487488176e+00 5.3441012483894719e+00 + id 13251 + loc 2.3280492424964905e-01 6.7320495843887329e-01 400 + blend 0.0000000000000000e+00 + interp 4.8461454417213634e-01:4.2825297433869225e-01:3.4844448891677271e-01:3.7156114297231302e-01:9.6146966520705868e-01:4.6706930825033455e-01:1.2306696758727731e+00:4.4699101051728096e-01:1.8435376559588477e+00:4.4281919397593567e-01:2.0828354583339963e+00:4.3668417501315893e-01:2.9361793533474438e+00:3.3911617983725539e-01:3.3021649443660674e+00:4.8460969802669462e-01:3.9476297282386499e+00 + CVs 20 + -2.6085179405011610e-01 2.5428187575625705e-01 4.4199133317373199e-02 + -5.3264239375398670e-01 5.3521562998404160e-01 5.4283597535800504e-02 + -8.0810920046311718e-01 8.3929050899688995e-01 -6.4904663610594326e-03 + -1.0711111448485453e+00 1.1483101085416625e+00 -1.5864854537250403e-01 + -1.3049836948521505e+00 1.4412104655560638e+00 -4.0009390906319253e-01 + -1.4996664667331934e+00 1.7021905234322361e+00 -7.1601991036513724e-01 + -1.6531946666629291e+00 1.9231729385452874e+00 -1.0887901510177251e+00 + -1.7662822022944979e+00 2.0993662073593407e+00 -1.5020182253830741e+00 + -1.8390830796936553e+00 2.2269109653853034e+00 -1.9399461559787716e+00 + -1.8712545681441479e+00 2.3040057520854624e+00 -2.3851245670086310e+00 + -1.8636599678640271e+00 2.3326709952183604e+00 -2.8165817930694499e+00 + -1.8248123761666111e+00 2.3214191103099289e+00 -3.2179954611382691e+00 + -1.7713371805629259e+00 2.2841306400547530e+00 -3.5871872335426742e+00 + -1.7183476069291330e+00 2.2334447765018446e+00 -3.9335593539555758e+00 + -1.6755013658607696e+00 2.1667247680563437e+00 -4.2726496531791520e+00 + -1.6591039501067311e+00 2.0650611123248286e+00 -4.6006371626777813e+00 + -1.6854361239504283e+00 1.9275763791746592e+00 -4.8912167951090302e+00 + -1.7670989435403097e+00 1.7792304485966477e+00 -5.1192160602569921e+00 + -1.9490807145081177e+00 1.6467931957033475e+00 -5.2364672280036082e+00 + id 13252 + loc 4.2631298303604126e-01 9.1571557521820068e-01 380 + blend 0.0000000000000000e+00 + interp 5.1516168361806480e-01:5.1515653200122868e-01:1.8434895954555497e-04:4.1918461877515767e-01:3.4451156420701290e-01:3.4603613972118141e-01:1.0026307557786742e+00:3.5178078001301577e-01:1.5322187494677597e+00:4.4302855808928876e-01:1.9980773425320284e+00:4.1113192682934274e-01:2.3154437264073655e+00:3.5150691811747231e-01:2.7750742634208745e+00:3.6377617922326905e-01:3.3692462726326995e+00 + CVs 20 + -3.0042150372132931e-01 2.2238706264456196e-01 -5.3095110600079110e-01 + -5.5654355981495374e-01 3.6357846466710914e-01 -9.3742427664124883e-01 + -7.8646691599918062e-01 4.7010983577310261e-01 -1.3147650398639872e+00 + -1.0007025936764014e+00 5.6647584397156070e-01 -1.7063645097215050e+00 + -1.1978911458373243e+00 6.5471364009335975e-01 -2.1112767126810699e+00 + -1.3731392135272587e+00 7.2881266927547628e-01 -2.5267015467478333e+00 + -1.5271279960815733e+00 7.8236640272419100e-01 -2.9508465460724547e+00 + -1.6633458984786631e+00 8.0791028860762593e-01 -3.3885363528080954e+00 + -1.7818767284337680e+00 7.9254119986994054e-01 -3.8493215655616808e+00 + -1.8823012586548986e+00 7.1841014680932092e-01 -4.3380872295026052e+00 + -1.9657326442035292e+00 5.6846438969449675e-01 -4.8380464583759490e+00 + -2.0281643497159099e+00 3.3213103956843648e-01 -5.3119924591056149e+00 + -2.0586631257628127e+00 -8.9845353547168827e-05 -5.7274612442864115e+00 + -2.0548046948688019e+00 -4.4186046724531280e-01 -6.0803033797985577e+00 + -2.0369968184352572e+00 -9.8605931804627867e-01 -6.3998672871222402e+00 + -2.0470740706095727e+00 -1.5936319473860441e+00 -6.7330786091589694e+00 + -2.1512673545329140e+00 -2.2325763011951447e+00 -7.1053888432806485e+00 + -2.4110173823142218e+00 -2.8620462905431343e+00 -7.4857776667805975e+00 + -2.5307154640471072e+00 -3.2703906764447050e+00 -7.7293328427346983e+00 + id 13253 + loc 1.7427316925022751e-04 1.1137957125902176e-01 374 + blend 0.0000000000000000e+00 + interp 3.2156321236278562e-01:2.4973658420662634e-01:3.7420380749114823e-01:2.2286216423523802e-01:1.0939407289147085e+00:3.2155999673066199e-01:1.9619948761995989e+00:2.2677167516143240e-01:2.9885322865743631e+00:3.1555411619769580e-01:3.5366704107149234e+00 + CVs 20 + -2.9028050343692874e-01 4.2614028937865339e-01 7.0003311269886970e-01 + -4.4720910951054849e-01 6.7946284367108167e-01 1.2500162623095645e+00 + -5.0808286783364243e-01 7.9100419581552361e-01 1.7781206857733936e+00 + -5.1473324948710442e-01 8.1329564073825122e-01 2.3239860620678123e+00 + -5.1076783636964629e-01 8.1166021505674613e-01 2.8702164585288057e+00 + -5.4271195380769266e-01 8.2437937957930829e-01 3.4059686411788461e+00 + -6.5016695252085199e-01 8.4643465276732277e-01 3.9310771442276295e+00 + -8.5470961526403433e-01 8.6277009732482890e-01 4.4431462866154074e+00 + -1.1559470735182471e+00 8.6950954674535552e-01 4.9330140271852834e+00 + -1.5525322210893977e+00 8.6267471575316090e-01 5.4143562689873077e+00 + -2.0335781132390833e+00 8.1606583666173971e-01 5.9052727091520456e+00 + -2.5600236139061630e+00 6.7967102070423779e-01 6.3955850599004380e+00 + -3.0823364483896896e+00 3.9848603404933325e-01 6.8469410361271512e+00 + -3.5463241993058849e+00 -5.9319725582585026e-02 7.2079569519941380e+00 + -3.8822126685122216e+00 -6.6444495670300929e-01 7.4338848846166350e+00 + -3.9730349433689254e+00 -1.3143163368360011e+00 7.5786719106282838e+00 + -3.7063143066924544e+00 -1.7625883755919483e+00 7.8264719095327573e+00 + -3.2883790946717504e+00 -1.8019931297146830e+00 8.1803298168478609e+00 + -3.0955065515139228e+00 -2.2069627246621613e+00 8.4107903229957000e+00 + id 13254 + loc 2.9612186551094055e-01 1.7626070976257324e-01 409 + blend 0.0000000000000000e+00 + interp 4.7489483436906793e-01:4.7489008542072425e-01:1.2943657797167107e-02:3.7562000589889838e-01:5.8415183085197819e-01:4.7097503473978214e-01:1.0450635295528217e+00:3.2223111482918343e-01:1.9287783621886267e+00:4.3102058833126949e-01:2.5399012670422851e+00:2.9021866532379520e-01:3.5068087025479948e+00 + CVs 20 + -1.7152606047018232e-01 1.9074777543544053e-01 -2.9316968110022495e-01 + -3.4439155404001526e-01 3.4723852361429730e-01 -5.5482811189587333e-01 + -5.0912255904301063e-01 4.8443762428827630e-01 -8.3053612132581367e-01 + -6.6019162193345970e-01 6.0200151667505097e-01 -1.1352413366659220e+00 + -8.0201805568438067e-01 6.9124394047792959e-01 -1.4696831283850016e+00 + -9.3640010201726487e-01 7.4875480804037586e-01 -1.8372822433559892e+00 + -1.0585298737164717e+00 7.7574439921861205e-01 -2.2407871657188436e+00 + -1.1598422677911167e+00 7.6695701791182636e-01 -2.6765295084668299e+00 + -1.2329175400024055e+00 7.0704844902985764e-01 -3.1353372165394000e+00 + -1.2738064808526113e+00 5.8166591168021653e-01 -3.6061397457169848e+00 + -1.2814081663220096e+00 3.8363635212835168e-01 -4.0704014077662150e+00 + -1.2574285751210561e+00 1.1118492990414452e-01 -4.5043056204551020e+00 + -1.2024742489104143e+00 -2.3319266129162664e-01 -4.8863210238212940e+00 + -1.1111404621139123e+00 -6.4013972303538758e-01 -5.1977989927749091e+00 + -9.7894940198777536e-01 -1.0886404454914937e+00 -5.4134747402676187e+00 + -8.1851805836821812e-01 -1.5437713947970930e+00 -5.5033038048003826e+00 + -6.5854670482902145e-01 -1.9673763662510635e+00 -5.4639784019975597e+00 + -5.1064578492023960e-01 -2.3552745399808752e+00 -5.3625600574692234e+00 + -2.9420074950124786e-01 -2.8380394106001194e+00 -5.4607303701710457e+00 + id 13255 + loc 6.3450592756271362e-01 5.6789082288742065e-01 382 + blend 0.0000000000000000e+00 + interp 4.8071286575528105e-01:3.2259554801158630e-01:1.4901100308039938e-01:4.6464583044269919e-01:8.1507763541866662e-01:3.4513053128407517e-01:1.2289592941323728e+00:4.8070805862662352e-01:1.9938055806417028e+00:3.2664307428321204e-01:2.3178152751811933e+00:4.2632133403365491e-01:2.9835544924279094e+00:3.7995909314571613e-01:3.4700556485714484e+00 + CVs 20 + 9.5311544121148395e-01 1.7727530780736128e-01 -4.7320706148802422e-01 + 1.5515036549545205e+00 2.0847370253978392e-01 -7.9705904938987449e-01 + 2.0440149039102171e+00 1.7831869844136994e-01 -1.0637046724488868e+00 + 2.5300686205001774e+00 1.2849598696550618e-01 -1.3037372837338925e+00 + 3.0129427079981581e+00 6.4771440347730413e-02 -1.5153594021600019e+00 + 3.5042068926946666e+00 -6.7189255481193699e-03 -1.7027323576776399e+00 + 4.0163508170442253e+00 -8.0671155854951548e-02 -1.8808764721695916e+00 + 4.5622631056263927e+00 -1.6584800964345658e-01 -2.0676828212915574e+00 + 5.1558229728845681e+00 -2.9170912965358187e-01 -2.2719754066756574e+00 + 5.7996192781579881e+00 -4.9505042575770086e-01 -2.4943018124526231e+00 + 6.4716725188600916e+00 -8.0133926423697321e-01 -2.7347459386369217e+00 + 7.1267171005770802e+00 -1.2284882184054537e+00 -2.9913617536218728e+00 + 7.6939898673831362e+00 -1.7975109238415961e+00 -3.2596090049511259e+00 + 8.1063151790347625e+00 -2.4932501716663751e+00 -3.5310535083561057e+00 + 8.3564159758992176e+00 -3.2434270305918158e+00 -3.8149313435686900e+00 + 8.5024049062436120e+00 -3.9820157163896432e+00 -4.1261924560331344e+00 + 8.6000277477873404e+00 -4.6585584589334239e+00 -4.4729814989082994e+00 + 8.6645156078231338e+00 -5.2351057815855322e+00 -4.8638652745083828e+00 + 8.7075052439575540e+00 -5.8198384797235594e+00 -5.2648522515251948e+00 + id 13256 + loc 4.6215638518333435e-01 3.2997569441795349e-01 399 + blend 0.0000000000000000e+00 + interp 4.4977668000937288e-01:4.0332688622127127e-01:4.4826915769053410e-01:4.0851874423763718e-01:1.0361655925630857e+00:4.2850256236753675e-01:1.5170616701287436e+00:4.4977218224257282e-01:1.9723361619491451e+00:3.0613875979060651e-01:2.3372184652218859e+00:3.6520760623276893e-01:3.1558038025801602e+00:2.7056216295042684e-01:3.9093744042399496e+00 + CVs 20 + -2.2047653764631778e-01 2.9315732589485100e-01 1.3385307965256654e-01 + -4.6597550826737599e-01 5.6518329809649792e-01 2.6928665555958742e-01 + -7.4773106688935076e-01 8.0790351325585452e-01 3.9502638772399801e-01 + -1.0593285319196482e+00 1.0223572198409494e+00 5.1899846544979111e-01 + -1.3842084511829484e+00 1.2125093226509045e+00 6.5762870097222403e-01 + -1.7070067877197126e+00 1.3758569480698728e+00 8.2034565266587534e-01 + -2.0149380584775747e+00 1.5022965339799796e+00 1.0072958618894505e+00 + -2.2928372094088982e+00 1.5773773884832112e+00 1.2113968636253789e+00 + -2.5235723029887724e+00 1.5902268946529656e+00 1.4191714775258089e+00 + -2.6918880880342111e+00 1.5421976538818227e+00 1.6119062928830110e+00 + -2.7975458480883795e+00 1.4501298871310042e+00 1.7774101852270154e+00 + -2.8701978224728739e+00 1.3258569999602929e+00 1.9309358780642762e+00 + -2.9408519083173728e+00 1.1585824327034977e+00 2.0994908391324190e+00 + -3.0304408760996449e+00 9.3261036364982119e-01 2.3051129268090316e+00 + -3.1695832396278028e+00 6.4686970057819437e-01 2.5666327036256096e+00 + -3.4188058796702037e+00 3.2936930125011898e-01 2.8866435432719175e+00 + -3.8654877079140690e+00 3.8556264248315264e-02 3.2194145924672419e+00 + -4.4437729582275853e+00 -1.1930002834620501e-01 3.4312236223246653e+00 + -4.7406639928097238e+00 -1.4720177857485728e-01 3.5018070429493395e+00 + id 13257 + loc 9.5582562685012817e-01 6.1439663171768188e-02 1068 + blend 0.0000000000000000e+00 + interp 5.4929550320522225e-01:5.4929001025019020e-01:3.7569855207549097e-01:2.5903693657684135e-01:1.2325189698822745e+00:4.9739716701294162e-01:2.3630334590467550e+00:4.0932911404031591e-01:3.0021022925840799e+00:3.2889342999004567e-01:3.4942332268197864e+00:4.1796347192069949e-01:3.9971541379931144e+00 + CVs 20 + -1.7806698365863100e-02 4.8386240168738526e-01 2.1549506830317317e-01 + -7.0156469096570695e-02 9.5513339683205334e-01 3.8884320910972503e-01 + -1.6268466725302783e-01 1.4226361735969537e+00 5.2016459303310625e-01 + -3.2219309756186043e-01 1.8833775572430178e+00 6.1446325738778818e-01 + -5.8329251961874695e-01 2.3127461038066754e+00 6.8088414194409808e-01 + -9.5313881270728051e-01 2.6757708510365310e+00 7.4427564177347605e-01 + -1.3992908635435928e+00 2.9387869651598777e+00 8.4310047086279727e-01 + -1.8632364065124025e+00 3.0873576012370609e+00 1.0143049055027979e+00 + -2.3127934197338043e+00 3.1026610579411003e+00 1.3150456534860733e+00 + -2.6672393174993290e+00 2.8656474216032493e+00 1.8124797887122233e+00 + -2.7405851639194876e+00 2.4039761617929427e+00 2.3102357933218172e+00 + -2.6008008066208239e+00 1.8951562771589221e+00 2.6844290579951808e+00 + -2.3027334035848557e+00 1.3569245971174007e+00 2.9717114205381616e+00 + -1.9064863413012052e+00 8.3263396096960529e-01 3.1662675957663819e+00 + -1.5403729065937413e+00 3.5866433014467614e-01 3.2876681875344920e+00 + -1.3287743800946528e+00 -3.3988996807789107e-02 3.3934008047867690e+00 + -1.4322808303484682e+00 -1.4472870658916503e-01 3.5822922917914162e+00 + -1.9627572654265766e+00 6.6601096634208390e-01 3.6232108894215713e+00 + -2.0198212135535960e+00 5.5621210664250453e-01 3.8274668153558071e+00 + id 13258 + loc 6.7743104696273804e-01 2.4822057783603668e-01 376 + blend 0.0000000000000000e+00 + interp 4.6154005786678048e-01:3.2761585658042408e-01:3.0407936647237643e-01:4.6153544246620182e-01:1.0336563077306145e+00:3.0966564980965722e-01:2.0587291311141644e+00:3.9570324369155319e-01:2.8811061139561867e+00:3.9394985955275630e-01:3.1197465332528682e+00:3.3563368229443730e-01:3.7713439914372984e+00 + CVs 20 + 1.0162991547170314e-01 3.9024759998493075e-01 -4.5021111777809131e-01 + 1.2868180908979771e-01 7.1138009271299329e-01 -8.4412143536047468e-01 + 9.2692231759076427e-02 9.4067385663190872e-01 -1.2609266243477144e+00 + 1.5774485916522307e-02 1.0798737659893074e+00 -1.7100166785517479e+00 + -6.9688281531249174e-02 1.1787509426079565e+00 -2.1837890586848552e+00 + -1.1468361708697983e-01 1.2807345263105538e+00 -2.6934800709705287e+00 + -5.9710735370389179e-02 1.3867251959870803e+00 -3.2358541467800048e+00 + 1.3545272426552823e-01 1.4783376479019126e+00 -3.7802063169476612e+00 + 4.7869262829981973e-01 1.5440837187871610e+00 -4.2863551141716094e+00 + 9.5040508660674994e-01 1.5724455357262699e+00 -4.7239874230216570e+00 + 1.4991880660488457e+00 1.5398664918799922e+00 -5.0736643176756075e+00 + 2.0455118881742909e+00 1.4195193541816753e+00 -5.3125117756168301e+00 + 2.5027549218554936e+00 1.2107406380692680e+00 -5.4178407193565317e+00 + 2.8182494784493786e+00 9.6303653309403980e-01 -5.3986794805451570e+00 + 2.9949752199405051e+00 7.4082603845429151e-01 -5.3046038143626451e+00 + 3.0991526688460702e+00 5.4049280232881491e-01 -5.2091447371814539e+00 + 3.1800598748618722e+00 2.7143795597952991e-01 -5.1547754109373267e+00 + 3.1814066190032744e+00 -8.4323855620681787e-02 -5.1584730425935525e+00 + 3.1313679688677580e+00 -3.8486369329851655e-01 -5.1828713957683545e+00 + id 13259 + loc 6.0992670059204102e-01 6.4601105451583862e-01 395 + blend 0.0000000000000000e+00 + interp 4.1790410777089743e-01:2.6787616330184011e-01:2.3610257858514139e-01:4.1789992872981974e-01:8.2905136941578594e-01:2.9849873726531506e-01:1.5879573248057839e+00:2.7223492399254634e-01:2.2461546474096385e+00:2.7994607826440693e-01:3.0580836187358251e+00 + CVs 20 + 3.2233176281928833e-01 2.7978326241942347e-01 -2.8176547846055661e-01 + 5.8710964363212303e-01 5.0177832988782411e-01 -5.0766617451654361e-01 + 8.4620505041491145e-01 6.9638027496883748e-01 -7.2768840556235626e-01 + 1.1317485992557212e+00 8.8450864958347719e-01 -9.7192015651832642e-01 + 1.4436697331714448e+00 1.0612808039636756e+00 -1.2415908317632727e+00 + 1.7794382585929203e+00 1.2180036828517955e+00 -1.5364141196155110e+00 + 2.1353686337643007e+00 1.3444333351995634e+00 -1.8578604857696766e+00 + 2.5099543833178317e+00 1.4258195552447650e+00 -2.2068895870283303e+00 + 2.9028279455719299e+00 1.4413908058163465e+00 -2.5791376074127363e+00 + 3.3068567797170201e+00 1.3667047987867802e+00 -2.9631234276034109e+00 + 3.6947815864723870e+00 1.1830741037137291e+00 -3.3404667592872492e+00 + 4.0268223897100661e+00 8.9027930213620854e-01 -3.6889845137890327e+00 + 4.2771091320590608e+00 5.0797727163141149e-01 -3.9869595792615482e+00 + 4.4412368515726071e+00 6.6927725561763296e-02 -4.2170354950142421e+00 + 4.5255617950071914e+00 -3.9833220538768099e-01 -4.3705252951883988e+00 + 4.5406591482656022e+00 -8.5407681755586928e-01 -4.4488499602529137e+00 + 4.4999749919539953e+00 -1.2687115152588393e+00 -4.4588819982038768e+00 + 4.4205604425329650e+00 -1.6186876667202896e+00 -4.4130744250874478e+00 + 4.3212594357698322e+00 -1.9845119550787254e+00 -4.3552821218359021e+00 + id 13260 + loc 3.9097413420677185e-01 9.5007067918777466e-01 415 + blend 0.0000000000000000e+00 + interp 4.2337631268660719e-01:4.2337207892348033e-01:1.1010372833192472e-01:3.2236001427449740e-01:9.9900251800646145e-01:3.3149908589754723e-01:1.8137497551440929e+00:3.4999910543976614e-01:2.3938321398342901e+00:2.5785878701538895e-01:3.0490902351337485e+00:2.8056242716274632e-01:3.9629845099728982e+00 + CVs 20 + 5.4282793174276578e-01 1.8998091625145469e-01 -1.8747141675178880e-02 + 9.3615083012221412e-01 2.7331612214771162e-01 -8.6023038929892381e-02 + 1.2999554691866142e+00 3.3228206197635779e-01 -1.4074049804266486e-01 + 1.6673645688222585e+00 3.9401324239802893e-01 -1.6483698775186795e-01 + 2.0366060253820226e+00 4.5967563789518140e-01 -1.5725945032632960e-01 + 2.4080345694870591e+00 5.3095768025637358e-01 -1.1479441764887122e-01 + 2.7804094249745921e+00 6.0859897499691451e-01 -3.4017108862864243e-02 + 3.1516041651604447e+00 6.9171242124074883e-01 8.6551404825600420e-02 + 3.5209993303509388e+00 7.7730290599718144e-01 2.4743502045660692e-01 + 3.8855593590008803e+00 8.6059273613854204e-01 4.4755251350341174e-01 + 4.2333451740763728e+00 9.3714070685185669e-01 6.7641003773491204e-01 + 4.5543445084319742e+00 1.0017765766833442e+00 9.1002752527800879e-01 + 4.8622183038049425e+00 1.0418928487156436e+00 1.1243974487086625e+00 + 5.1894478175373706e+00 1.0364787454090063e+00 1.3046691017672134e+00 + 5.5489532198819447e+00 9.7163357902638792e-01 1.4373065929764612e+00 + 5.9182968635673863e+00 8.5467071680648021e-01 1.5091018895228403e+00 + 6.2661256340855207e+00 7.0871749719588095e-01 1.5106670089999290e+00 + 6.5740274714479190e+00 5.6093220980844594e-01 1.4437873944735213e+00 + 6.8769241256451537e+00 4.0941003015546684e-01 1.3571921843054588e+00 + id 13261 + loc 7.6316481828689575e-01 9.9107176065444946e-01 393 + blend 0.0000000000000000e+00 + interp 4.5714312785325378e-01:3.7977980269422407e-01:9.5916983782452503e-03:2.9663253227103814e-01:9.6518314987233345e-01:4.5713855642197526e-01:1.7047036426104589e+00:3.6369838048918823e-01:2.2343118745627351e+00:3.6897200184460677e-01:2.8513162982045142e+00:3.4609673527386919e-01:3.0840486014218218e+00 + CVs 20 + -2.7354494614319597e-01 3.3736087080411425e-01 -3.4901229230968434e-01 + -5.0092151167270993e-01 6.5386667287522982e-01 -6.9967307252484423e-01 + -7.0121153077932952e-01 9.4407196813776229e-01 -1.0823291770753423e+00 + -8.9758886374955638e-01 1.2049024070689998e+00 -1.5059575074150955e+00 + -1.1067313328937642e+00 1.4264275538854823e+00 -1.9640726386908951e+00 + -1.3348125162526474e+00 1.5924948895559512e+00 -2.4472438565310997e+00 + -1.5812927775996863e+00 1.6846387344088769e+00 -2.9432189795275803e+00 + -1.8421882709420605e+00 1.6843292934227891e+00 -3.4335184795500204e+00 + -2.1056251849124363e+00 1.5790289604946783e+00 -3.8925276033052052e+00 + -2.3540219403869242e+00 1.3705701052406736e+00 -4.2925885840928011e+00 + -2.5776704745454140e+00 1.0847906855471945e+00 -4.6152056820103384e+00 + -2.7864213791157684e+00 7.7276099717506597e-01 -4.8696566085410327e+00 + -2.9980216850209316e+00 4.8631318177504612e-01 -5.0912135099980196e+00 + -3.2184039774426436e+00 2.7129913984624343e-01 -5.3205621839554000e+00 + -3.4292075958519339e+00 1.7424374412750643e-01 -5.5790095188207083e+00 + -3.5741571674457564e+00 2.2834250923352717e-01 -5.8366373349479321e+00 + -3.5923951075402583e+00 4.3747853209642162e-01 -6.0025074291224323e+00 + -3.5486047093063906e+00 7.0540739664488772e-01 -6.0144164587840212e+00 + -3.6584700708679518e+00 8.2010905859466998e-01 -6.3005075261055596e+00 + id 13262 + loc 1.9519647583365440e-02 5.7670718431472778e-01 411 + blend 0.0000000000000000e+00 + interp 5.5482043809385573e-01:2.4922444064819196e-01:3.0058816176414815e-04:3.3892359385342807e-01:5.1505874071801161e-01:4.1657020592349581e-01:1.0042546283658706e+00:5.5481488988947480e-01:1.5092177779792904e+00:2.5753926065873456e-01:2.2720229915028098e+00:3.7873025968997542e-01:3.1110835863716502e+00 + CVs 20 + 8.8448899096861189e-01 2.7188080206664411e-01 -1.6346559747918965e-01 + 1.5064773274517766e+00 3.8966510668685456e-01 -3.1207922396992172e-01 + 2.0902287653263509e+00 4.5774034801559915e-01 -4.6059103942021917e-01 + 2.7019466083128307e+00 5.0379989014787063e-01 -6.1772003523439523e-01 + 3.3113551118815825e+00 5.1185335247092745e-01 -7.9441255585729487e-01 + 3.8934602984238795e+00 4.6765997849718799e-01 -1.0102486396750072e+00 + 4.4328642537978142e+00 3.5690445796784576e-01 -1.2901953145565157e+00 + 4.9189781371890708e+00 1.5986375915780360e-01 -1.6557939582692365e+00 + 5.3434692232753598e+00 -1.5045087896160525e-01 -2.1095197130363212e+00 + 5.6995186838204690e+00 -5.9681977143408860e-01 -2.6288585350432983e+00 + 5.9714798061256662e+00 -1.1989767477107993e+00 -3.1625142904132741e+00 + 6.1501693488392855e+00 -1.9299700650841398e+00 -3.6694458435803665e+00 + 6.2558198031404739e+00 -2.7101547769678680e+00 -4.1696325025477519e+00 + 6.3203480788451536e+00 -3.4599649067819520e+00 -4.7033408025333259e+00 + 6.3685644626545699e+00 -4.1441483900235170e+00 -5.2751652675870666e+00 + 6.4150619147733519e+00 -4.8157227421727677e+00 -5.8495762420959982e+00 + 6.4632430975403778e+00 -5.5488157403117668e+00 -6.3733207856990512e+00 + 6.5004454188202843e+00 -6.3365599259355356e+00 -6.8017250180390807e+00 + 6.4851226957906380e+00 -7.1163269970218508e+00 -7.1345479542097863e+00 + id 13263 + loc 5.7881563901901245e-01 6.3377493619918823e-01 1069 + blend 0.0000000000000000e+00 + interp 4.2291011324779881e-01:3.0841311135511601e-01:1.0534021468780430e-01:2.9486027658336128e-01:8.9407468104676913e-01:3.6135150363589869e-01:1.8938743903549005e+00:4.2290588414666636e-01:2.7025886666666770e+00:3.3006947139907777e-01:3.0393448236208891e+00 + CVs 20 + 1.1987628713744637e-01 2.6369829929237543e-01 -1.2961904591902582e-01 + 2.2790344131285475e-01 5.4558403776642517e-01 -2.6080062573997920e-01 + 3.4676523200773346e-01 8.2933592602470696e-01 -3.7500935367616695e-01 + 5.1634341727872290e-01 1.0984439015609491e+00 -4.6250314132292086e-01 + 7.5231515555850348e-01 1.3388087843495247e+00 -5.2714794918155761e-01 + 1.0180559197892640e+00 1.5674386684941024e+00 -5.8029163722542054e-01 + 1.2516985743961535e+00 1.8233540077701460e+00 -6.2578751478657058e-01 + 1.3970572273685482e+00 2.1243266798159404e+00 -6.5750064372590700e-01 + 1.4050464246850662e+00 2.4521809895795670e+00 -7.0046484298314726e-01 + 1.2284733389734599e+00 2.7446586034476326e+00 -8.3641547228682311e-01 + 8.9205417861322944e-01 2.8987408359188560e+00 -1.0926381475690394e+00 + 4.8607124315086936e-01 2.8884557187219650e+00 -1.3738318992285856e+00 + 5.4826780405639042e-02 2.7114280518661320e+00 -1.6039589953572444e+00 + -3.3715470248560642e-01 2.2907897959275494e+00 -1.8084954261789699e+00 + -4.9539345746946561e-01 1.5349041286777338e+00 -2.1113355342325644e+00 + -3.6213120501321983e-01 7.9524776547677356e-01 -2.3995994809495773e+00 + -2.5526802032565371e-01 2.3498164925008602e-01 -2.4929480845156928e+00 + -1.7562533120650745e-01 -2.8963080730636220e-01 -2.3726436361731733e+00 + -1.8344720298585235e-01 -6.7398481310216307e-01 -2.4420489479680274e+00 + id 13264 + loc 9.6881008148193359e-01 9.7496145963668823e-01 402 + blend 0.0000000000000000e+00 + interp 3.2024290028257185e-01:3.2023969785356904e-01:2.5102010968734101e-02:2.4446439904967560e-01:1.0117457539310530e+00:2.4149081579288759e-01:1.9796677679510275e+00:1.5066349323234637e-01:2.6858566533822272e+00:2.5795501271987975e-01:3.4655591367201035e+00 + CVs 20 + -1.3499428547875378e-02 1.0686462137780232e-01 -2.9772514548467516e-01 + -4.9958688787084260e-03 2.0927674532032406e-01 -5.9623367123106152e-01 + 3.6096841886950337e-02 3.0482836773566663e-01 -8.8852482633194385e-01 + 1.1342876791994533e-01 3.8560975327051672e-01 -1.1680682241263096e+00 + 2.2902338656815419e-01 4.4276972659643710e-01 -1.4256799368417821e+00 + 3.8420842686748080e-01 4.6870012447617893e-01 -1.6479077711955901e+00 + 5.7132609758203723e-01 4.5947080388960515e-01 -1.8251868898211412e+00 + 7.7356223080289177e-01 4.1837540481233559e-01 -1.9598762145775956e+00 + 9.7726144536831927e-01 3.5547326037419580e-01 -2.0607538719180361e+00 + 1.1765065951461331e+00 2.8328865480501753e-01 -2.1369765740311375e+00 + 1.3602519191385285e+00 2.0934832034669704e-01 -2.2132627548668338e+00 + 1.4947195938580546e+00 1.2719775287573731e-01 -2.3472428039037445e+00 + 1.5173521661544007e+00 1.2615810642083058e-02 -2.5779996098483764e+00 + 1.3939708413679428e+00 -1.4739398809883864e-01 -2.8320631596347976e+00 + 1.1960181631819036e+00 -3.2104388558020647e-01 -3.0110338682773485e+00 + 9.8175465111818982e-01 -4.8139274607682281e-01 -3.1136663391061075e+00 + 7.5283846014239564e-01 -6.2150430331332429e-01 -3.1614108665588381e+00 + 5.1933136791368528e-01 -7.3663706386271011e-01 -3.1679540481230930e+00 + 4.0894316930832031e-01 -8.1190930747387358e-01 -3.2916952855320680e+00 + id 13265 + loc 6.0224950313568115e-01 9.4029307365417480e-01 1080 + blend 0.0000000000000000e+00 + interp 5.4580009171922206e-01:3.1713514420641076e-01:9.6448771796947663e-02:3.4782300850377712e-01:1.0796010936796319e+00:5.4579463371830494e-01:1.7677022258625938e+00:4.7869235335106258e-01:2.1456234301640662e+00:4.1760574647506210e-01:2.8230542403984700e+00:3.2921153020616950e-01:3.2420095294324041e+00 + CVs 20 + -7.1870523609902495e-02 2.0008040043210856e-01 1.4499026015416924e-01 + -1.2754454594735487e-01 3.5369388914592154e-01 2.0014214082531773e-01 + -1.9438408797173251e-01 4.8417426133371411e-01 2.3835918431416980e-01 + -2.8598434486752483e-01 6.0627257226739428e-01 2.8477654331444691e-01 + -4.0115514088906690e-01 7.1393075911086701e-01 3.3537821407642315e-01 + -5.3770473727966350e-01 8.0134548477332346e-01 3.8560471640484784e-01 + -6.9233022688254386e-01 8.6420480797276822e-01 4.3082525152499151e-01 + -8.6086096617685548e-01 9.0016110736965760e-01 4.6792283070167562e-01 + -1.0385465623005696e+00 9.0889943859117905e-01 4.9666908264152065e-01 + -1.2207787256698299e+00 8.9249661434289695e-01 5.2084297804124968e-01 + -1.4044301331696445e+00 8.5454733235016800e-01 5.4825325516917944e-01 + -1.5877678196222615e+00 7.9856737864258487e-01 5.8920636857658770e-01 + -1.7687267114256013e+00 7.2688408075571243e-01 6.5415178119280382e-01 + -1.9432117784434293e+00 6.4043725915725369e-01 7.5066371093847628e-01 + -2.1052381470987096e+00 5.3943838696654223e-01 8.8151302478401206e-01 + -2.2483726050094579e+00 4.2461850044969951e-01 1.0461839651058540e+00 + -2.3658256097299546e+00 2.9840741875325261e-01 1.2437942065278258e+00 + -2.4510049361623674e+00 1.6531973823305757e-01 1.4712296342643703e+00 + -2.5421028112526889e+00 4.1527640100893604e-02 1.6977989618148563e+00 + id 13266 + loc 7.1563726663589478e-01 5.1617801189422607e-01 380 + blend 0.0000000000000000e+00 + interp 4.0226436212384181e-01:3.3613020889712281e-01:2.6434604763722580e-01:4.0226033948022061e-01:1.0848814663605655e+00:3.5661286049878194e-01:1.9912795522075761e+00:3.1290230704939537e-01:2.4751869466519314e+00:2.5336493171106983e-01:3.2381604110659676e+00:3.6982829308872917e-01:3.9062062676910037e+00 + CVs 20 + -4.5376693925018852e-01 2.4761593002425869e-01 -6.6924264042998916e-01 + -8.1483218285848613e-01 4.0083699319474597e-01 -1.1621598209342348e+00 + -1.1264602921748006e+00 5.1766967993517921e-01 -1.6073777328150707e+00 + -1.4083439258442247e+00 6.2614680542039580e-01 -2.0614979546504903e+00 + -1.6552241354154598e+00 7.2887272779609780e-01 -2.5237895176097380e+00 + -1.8746327399832621e+00 8.3159065986976743e-01 -2.9971673649002035e+00 + -2.0861978892644135e+00 9.3558537862135971e-01 -3.4892637417879167e+00 + -2.3135792488708105e+00 1.0294520123493063e+00 -4.0125077924598509e+00 + -2.5776290501237140e+00 1.0837735622051130e+00 -4.5839272768081738e+00 + -2.8922117125255555e+00 1.0528793723165113e+00 -5.2117181436515398e+00 + -3.2611436151410631e+00 8.8568249736381000e-01 -5.8762050601117011e+00 + -3.6695299457685961e+00 5.3554144939885573e-01 -6.5294208304496584e+00 + -4.0758537386602587e+00 -2.0691475593991537e-02 -7.1013249976035935e+00 + -4.4344019075454737e+00 -7.2596827112136175e-01 -7.5188837326836815e+00 + -4.7430764784467412e+00 -1.4491300711900821e+00 -7.7785554408903845e+00 + -5.0370023990822759e+00 -2.0965295890841760e+00 -7.9470267488680948e+00 + -5.3552761086700293e+00 -2.6263671718173933e+00 -8.0688648498310691e+00 + -5.7162716200595378e+00 -3.0227084449195889e+00 -8.1393284687866192e+00 + -6.0189583823466881e+00 -3.4746611714354212e+00 -8.2170697207342798e+00 + id 13267 + loc 4.0500813722610474e-01 1.6963320970535278e-01 400 + blend 0.0000000000000000e+00 + interp 4.2651061528289902e-01:3.0608492001076909e-01:4.3491129276148055e-01:2.9669027368338119e-01:1.2484089282024935e+00:3.0507709056602372e-01:2.2009492271858608e+00:4.2650635017674621e-01:2.9227718074887781e+00:3.6535070259415647e-01:3.1178950632138545e+00:3.5875793419361862e-01:3.7466994591004141e+00 + CVs 20 + -1.7727495242671165e-01 2.5097020379582829e-01 1.8899707582796157e-01 + -3.3470592131483978e-01 5.0335861122761627e-01 3.9914235465349057e-01 + -4.8874297810934419e-01 7.5822441530869045e-01 6.1995326306595500e-01 + -6.4956665510247447e-01 1.0126999960475163e+00 8.5065253966668430e-01 + -8.2360092457961609e-01 1.2602444752487336e+00 1.0977228202027307e+00 + -1.0162618818209250e+00 1.4896695015368513e+00 1.3692498321802480e+00 + -1.2313868838884505e+00 1.6834376793972341e+00 1.6729327954370703e+00 + -1.4854509196081565e+00 1.8202843583438835e+00 2.0184382051328504e+00 + -1.7700102081924207e+00 1.8683437643682825e+00 2.3894645280304840e+00 + -2.0610386523715443e+00 1.8179049261692160e+00 2.7774704112699098e+00 + -2.3558203272933333e+00 1.6735302338145268e+00 3.1804759360077286e+00 + -2.6659029322598142e+00 1.4449877722203628e+00 3.5872692266038175e+00 + -3.0089594620005151e+00 1.1383698395277402e+00 3.9802761741859691e+00 + -3.3829687412985199e+00 7.5904215519428675e-01 4.3351694777627090e+00 + -3.7812367508919582e+00 3.5512084848804015e-01 4.6330964868545612e+00 + -4.2461479014410859e+00 9.9958433356252652e-02 4.8708551697252558e+00 + -4.7685320453185991e+00 2.8593695854476264e-01 5.0180487213832299e+00 + -5.1575109674939803e+00 7.8377182980329296e-01 5.0331005473184849e+00 + -5.6733171266671665e+00 8.5249233984199924e-01 5.1271362815514614e+00 + id 13268 + loc 7.3963153362274170e-01 4.7248220443725586e-01 373 + blend 0.0000000000000000e+00 + interp 4.4453419167409913e-01:4.0445787189525412e-01:5.7695749162028231e-01:2.8336622894135877e-01:1.2140877572870274e+00:2.5429100571631663e-01:2.0777731871841723e+00:4.4452974633218240e-01:2.9462252803422317e+00:3.8492438399544326e-01:3.2252973842052994e+00:4.2956062079069696e-01:3.9670258999138053e+00 + CVs 20 + 4.7600895769914919e-01 4.4864147642203106e-01 5.5480367074769638e-02 + 9.0352770826756168e-01 8.4536783834647711e-01 1.3018229797673192e-01 + 1.2952342346821766e+00 1.2111311704543402e+00 2.3553034202524412e-01 + 1.6405667597348594e+00 1.5739463249513501e+00 3.8335533014561807e-01 + 1.9256591723654493e+00 1.9285254832375482e+00 5.8166437012975980e-01 + 2.1583431178790837e+00 2.2457114988473577e+00 8.4346891502519028e-01 + 2.3487010580564851e+00 2.4947720896949233e+00 1.1742715647023982e+00 + 2.4983981560312118e+00 2.6625434208225824e+00 1.5648393220479297e+00 + 2.6032283400454448e+00 2.7490494924151547e+00 2.0005992264175472e+00 + 2.6531430912866161e+00 2.7587951156338226e+00 2.4665325191778447e+00 + 2.6384822380272173e+00 2.6875383923096927e+00 2.9398936875396360e+00 + 2.5615830522656302e+00 2.5199592509292419e+00 3.3807673121265212e+00 + 2.4520369926347123e+00 2.2655992321736331e+00 3.7510200689935229e+00 + 2.3663510630992435e+00 1.9665626671597902e+00 4.0722476675087425e+00 + 2.3722919668371212e+00 1.6538852233462429e+00 4.4007605428857293e+00 + 2.5388410310625265e+00 1.3653268436776598e+00 4.7509101177082957e+00 + 2.9022220140154271e+00 1.1688007502484734e+00 5.0822291380437505e+00 + 3.3930459503779873e+00 1.0829573460233402e+00 5.3562631995033838e+00 + 3.7835408827663324e+00 9.1903193753912760e-01 5.6682764973256923e+00 + id 13269 + loc 8.1302177906036377e-01 5.4692715406417847e-01 396 + blend 0.0000000000000000e+00 + interp 4.2819432299250032e-01:3.3090424832939219e-01:1.0509103551961574e-01:3.7823530601631661e-01:1.0345181291703622e+00:3.1514873614101624e-01:1.8800863589270655e+00:3.4635662493975222e-01:2.4450645237355912e+00:3.3586587091268033e-01:3.0676148746883363e+00:4.2819004104927044e-01:3.7508037357630934e+00 + CVs 20 + 8.1835961230205134e-01 2.0170081044940080e-01 -4.0597309591167263e-01 + 1.3540553782969400e+00 2.4332337734319459e-01 -7.6432293997726286e-01 + 1.8125255766130153e+00 2.1656115904986822e-01 -1.1327419465772623e+00 + 2.2636829661940898e+00 1.4965660638276435e-01 -1.5261214871069189e+00 + 2.6986251988420236e+00 3.5809017999383852e-02 -1.9275924426679554e+00 + 3.1076844064787141e+00 -1.2421955583753574e-01 -2.3200685027557633e+00 + 3.4817256012742064e+00 -3.2091823744358616e-01 -2.6891394138242686e+00 + 3.8093592632716526e+00 -5.3902904691498010e-01 -3.0188077160840967e+00 + 4.0805258256502634e+00 -7.6104388450673310e-01 -3.2909309081470797e+00 + 4.2907485109943213e+00 -9.6480299772914102e-01 -3.4927205028629151e+00 + 4.4507670873200293e+00 -1.1353701291361562e+00 -3.6317868670247266e+00 + 4.5786189498364651e+00 -1.2767366424817912e+00 -3.7368353570627137e+00 + 4.6959150464796018e+00 -1.3954875738436665e+00 -3.8267521021783391e+00 + 4.8241454667331150e+00 -1.4938794301670144e+00 -3.9040210078996043e+00 + 4.9813182785150669e+00 -1.5744794283734096e+00 -3.9708832688773632e+00 + 5.1777023280663146e+00 -1.6419621451862407e+00 -4.0430360987458656e+00 + 5.4084399178787086e+00 -1.7095270723391969e+00 -4.1388374286194063e+00 + 5.6397228690155705e+00 -1.8075404427948787e+00 -4.2509402671507299e+00 + 5.7179990495598227e+00 -2.0257834086113489e+00 -4.2683486548134164e+00 + id 13270 + loc 4.7461852431297302e-01 1.9549950957298279e-01 403 + blend 0.0000000000000000e+00 + interp 5.2503450132811502e-01:3.2545747447667717e-01:3.6168687125509580e-02:5.2502925098310171e-01:8.7900804934864529e-01:3.2562719995148931e-01:1.2512925708149616e+00:2.9422731304062971e-01:1.9911419973861473e+00:3.2913088198574653e-01:2.6845563077762984e+00:4.7313017864330698e-01:3.1331285784548708e+00:3.7997959055747527e-01:3.6911161013838107e+00 + CVs 20 + -1.9844977650403606e-01 2.4323397107789307e-01 -2.8121490051192174e-02 + -4.1066191113210315e-01 4.7952366389160950e-01 -3.4589328523447926e-02 + -6.3728244100385922e-01 7.2911059015092350e-01 -4.9007169073138512e-02 + -8.7365768177174008e-01 9.8185325953542724e-01 -8.7971899083984118e-02 + -1.1235022285821337e+00 1.2174922487535311e+00 -1.5301588116815362e-01 + -1.3928224750519234e+00 1.4269268943410842e+00 -2.3512223823884948e-01 + -1.6823633324732987e+00 1.6123404533740202e+00 -3.0889520464863363e-01 + -1.9841598554190796e+00 1.7728575467323999e+00 -3.4589602272853692e-01 + -2.2878112642822535e+00 1.9004772526572011e+00 -3.2607362221024894e-01 + -2.5822972479353821e+00 1.9855735552748919e+00 -2.3829846263981835e-01 + -2.8487116003875261e+00 2.0229852752220183e+00 -8.6961249065024560e-02 + -3.0679834824513779e+00 2.0160157099496843e+00 1.0834282219117086e-01 + -3.2389449425100891e+00 1.9696578601014911e+00 3.3216662340127923e-01 + -3.3727259897719666e+00 1.8818415487125519e+00 5.7924669545257090e-01 + -3.4639768041806662e+00 1.7508861213559428e+00 8.4120903703110550e-01 + -3.4841179459246949e+00 1.5730023220722074e+00 1.1164826196773525e+00 + -3.4352937080993087e+00 1.3268848719808854e+00 1.4297508319549082e+00 + -3.4128349116843042e+00 1.0266344067223658e+00 1.7837117826041453e+00 + -3.5109287993625622e+00 8.3567844308079264e-01 2.0246391455456245e+00 + id 13271 + loc 8.0673044919967651e-01 5.2645432949066162e-01 415 + blend 0.0000000000000000e+00 + interp 5.0751912063317839e-01:3.9471402333636257e-01:5.5935438657923608e-03:5.0751404544197209e-01:3.7166744742499958e-01:4.6463670399317736e-01:9.6868661440982906e-01:3.2291234267963353e-01:1.1651077169297532e+00:4.9630050166227518e-01:1.9871787845768973e+00:3.1845808352073202e-01:2.6357812864480552e+00:4.3270913200402533e-01:3.0392172859989541e+00 + CVs 20 + 2.4669259698989815e-01 1.8300500679245668e-01 3.5762695912456829e-02 + 4.3832462516935766e-01 3.1542984459118112e-01 5.7205065130114141e-02 + 6.0522665881020143e-01 4.2267620084282131e-01 8.0892503898812668e-02 + 7.7196783259299950e-01 5.2544044299926729e-01 1.2186243740334715e-01 + 9.3636793752098191e-01 6.2082616418607017e-01 1.7968368443112179e-01 + 1.0942052119512571e+00 7.0499335535776875e-01 2.5252469336235461e-01 + 1.2428134400871815e+00 7.7618467962234361e-01 3.4116902189499404e-01 + 1.3816021176171989e+00 8.3410491023907241e-01 4.4867438861877984e-01 + 1.5090256790793650e+00 8.7761586734473873e-01 5.7399199526415234e-01 + 1.6229324231260371e+00 9.0599240407019632e-01 7.1268705941186083e-01 + 1.7263423273068232e+00 9.2505027742616841e-01 8.7728147124559286e-01 + 1.8349949298438712e+00 9.4735339942202235e-01 1.1171043340951536e+00 + 1.9889948136713533e+00 9.6927263875760872e-01 1.4723560486751326e+00 + 2.2312574928797493e+00 9.5616281758107924e-01 1.8823716936349841e+00 + 2.5455271737309033e+00 8.8670254462967923e-01 2.2400458304139947e+00 + 2.8979274895675520e+00 7.6759391580714564e-01 2.5147496840006740e+00 + 3.2800943598662906e+00 6.0297867819816586e-01 2.7166382246615619e+00 + 3.6772961851875938e+00 3.9860095505907278e-01 2.8407123602519517e+00 + 3.8575772658857845e+00 2.6021611184888327e-01 2.8349516058355015e+00 + id 13272 + loc 6.9156146049499512e-01 3.4924149513244629e-02 407 + blend 0.0000000000000000e+00 + interp 4.3852492711079055e-01:3.5680171462514437e-01:6.4873363621140712e-02:3.1727918523663323e-01:9.4143292076459084e-01:3.9175897154264783e-01:1.1338231365245632e+00:4.3852054186151945e-01:1.7787006976193145e+00:4.3063190470364299e-01:2.0205911989453544e+00:4.3292057650889809e-01:2.8689939431931015e+00:3.8128019621995507e-01:3.0201802636125423e+00:4.2220685234828131e-01:3.6752258409705867e+00 + CVs 20 + -2.8197852039050236e-01 3.6822010075877804e-01 3.6387913881074735e-02 + -3.8370603669538028e-01 5.7610043893112373e-01 5.7794506771184313e-02 + -4.2060233011753900e-01 7.1883657929762401e-01 7.3288364884457127e-02 + -4.5607445557100257e-01 8.4049929256621003e-01 8.8450025994356418e-02 + -4.8594292736032141e-01 9.4349798571309784e-01 1.0629249207355504e-01 + -5.0789494789517420e-01 1.0350710790785869e+00 1.3249593557889369e-01 + -5.2527704559112243e-01 1.1304671200179461e+00 1.7246131154324273e-01 + -5.5147384496263063e-01 1.2483656951756301e+00 2.1848889662905291e-01 + -6.0089473907220192e-01 1.3859000056248867e+00 2.4220753300028119e-01 + -6.6961717165764778e-01 1.5145426850024826e+00 2.2291868880464255e-01 + -7.4556996985284096e-01 1.6158875347534332e+00 1.6384215791182150e-01 + -8.2530319633779814e-01 1.6896861038030946e+00 7.3208728446080090e-02 + -9.0898027878531196e-01 1.7374505381871801e+00 -4.4999407439414746e-02 + -9.8857964063903880e-01 1.7516286803137548e+00 -1.8391527287611759e-01 + -1.0501287785942801e+00 1.7239814401509681e+00 -3.3205467816505319e-01 + -1.0896215767323680e+00 1.6588797149847205e+00 -4.8631044595416789e-01 + -1.1194841867728849e+00 1.5724742459918040e+00 -6.5600373688718627e-01 + -1.1584400518956848e+00 1.4818266214128524e+00 -8.4710249531734627e-01 + -1.2797491977300652e+00 1.4441882789357954e+00 -1.0656187480989523e+00 + id 13273 + loc 1.4282165095210075e-02 4.6664789319038391e-01 382 + blend 0.0000000000000000e+00 + interp 5.1674649107386772e-01:4.9204320347156766e-01:3.6877462593741595e-01:1.6769933633225281e-01:1.0732609951289585e+00:2.8155327370318056e-01:2.2776236647274213e+00:4.6006618349533701e-01:2.9893150862364979e+00:5.1674132360895697e-01:3.3280077992423927e+00:3.3930639288174869e-01:3.9660670064075711e+00 + CVs 20 + -4.2620056558078501e-01 1.4378602337169893e-01 -8.8774842877449678e-01 + -7.6635902544476098e-01 1.2638687687952338e-01 -1.4935042864281187e+00 + -1.0971724911647378e+00 5.3265985534244997e-02 -2.0152894723282833e+00 + -1.4483389422603099e+00 -3.8616025522258290e-02 -2.5199049165254657e+00 + -1.8194598229711167e+00 -1.4473926882149801e-01 -2.9996030058147092e+00 + -2.2143980408068651e+00 -2.6281529633278566e-01 -3.4473695876145101e+00 + -2.6313539925417926e+00 -3.9167230139152021e-01 -3.8586424686145571e+00 + -3.0618503871698612e+00 -5.3591034713910957e-01 -4.2326554522492206e+00 + -3.4939603613660664e+00 -7.0665634376416175e-01 -4.5721231502263828e+00 + -3.9152676572151544e+00 -9.1622959540300375e-01 -4.8757145342582531e+00 + -4.3159755435344156e+00 -1.1742515521812371e+00 -5.1394838973914663e+00 + -4.6889883868529108e+00 -1.4895566948834529e+00 -5.3654542951537092e+00 + -5.0237996122973803e+00 -1.8670650911544366e+00 -5.5577421847212936e+00 + -5.3064327363810939e+00 -2.3009707723201975e+00 -5.7152894500907001e+00 + -5.5264401578681071e+00 -2.7775069351633834e+00 -5.8327070501594847e+00 + -5.6773398646167568e+00 -3.2809048563000172e+00 -5.9036570546198330e+00 + -5.7557181299163069e+00 -3.7911422551241252e+00 -5.9249892729717750e+00 + -5.7716798311704434e+00 -4.2873743354325207e+00 -5.9042455645131930e+00 + -5.7874897377387793e+00 -4.7688622796891744e+00 -5.8825357637124789e+00 + id 13274 + loc 1.2685334682464600e-01 2.2854883223772049e-02 1078 + blend 0.0000000000000000e+00 + interp 4.1222667611334957e-01:1.2572075085028853e-01:9.7759584295132151e-01:4.1222255384658846e-01:1.9852721826254689e+00:2.8097588005007629e-01:2.4075463620570661e+00:3.1329312623828592e-01:3.1518920191006208e+00:3.3638408639435308e-01:3.9900719079057354e+00 + CVs 20 + 1.7981894858924485e-01 3.8612826558733010e-01 -8.0059454713624661e-02 + 2.7934953019682707e-01 7.1934417426424868e-01 -1.7372683603186978e-01 + 3.5245440565994046e-01 1.0410986347241389e+00 -2.8309295197821110e-01 + 4.1918389047234977e-01 1.3635859864492295e+00 -4.0911366978593711e-01 + 4.7165537754445519e-01 1.6801650024554484e+00 -5.5416603482466598e-01 + 4.9660626490528470e-01 1.9823432611141516e+00 -7.2049497281129016e-01 + 4.7472788148283784e-01 2.2589572107229570e+00 -9.1094027220999529e-01 + 3.8917774983995512e-01 2.4945607476619069e+00 -1.1255109963588454e+00 + 2.3266935340275041e-01 2.6701358550787342e+00 -1.3580718902222726e+00 + 9.9540821194605833e-03 2.7675197394917612e+00 -1.5966215106432295e+00 + -2.6317089889080436e-01 2.7771291603934238e+00 -1.8275656523843240e+00 + -5.6770383170352345e-01 2.7004291009914265e+00 -2.0419685768855129e+00 + -8.8816108739312782e-01 2.5438951658495412e+00 -2.2379629935621037e+00 + -1.2119595896291826e+00 2.3108668173454956e+00 -2.4196560350630212e+00 + -1.5232974854630157e+00 1.9828070712595820e+00 -2.5962798791248165e+00 + -1.7675568002911390e+00 1.4896265758925029e+00 -2.7748595849749793e+00 + -1.7924907349584847e+00 8.0724945467931053e-01 -2.9340948579005275e+00 + -1.5835528389937017e+00 1.5869938808740258e-01 -3.0419629969239557e+00 + -1.5121041771311279e+00 -2.4711081467749896e-01 -3.1411294251056630e+00 + id 13275 + loc 1.2814240157604218e-01 7.7880495786666870e-01 377 + blend 0.0000000000000000e+00 + interp 4.8726532968954289e-01:2.6222353153518047e-01:3.0954763460191803e-01:3.2857141354500624e-01:6.2644032751173906e-01:2.6708232783510566e-01:1.9848080968631607e+00:4.8726045703624604e-01:2.6069033855332915e+00:2.5378955924717544e-01:3.1068809898341070e+00:3.6509322811158545e-01:3.9116730356724703e+00 + CVs 20 + -6.8464113793244419e-01 2.7626998232802807e-01 -3.6242577050571056e-01 + -1.2217686396241998e+00 4.0798758686934111e-01 -5.8796036455085221e-01 + -1.7429428469757151e+00 4.6134787997166371e-01 -7.7658846320908470e-01 + -2.3068016672714000e+00 4.6818390526974740e-01 -9.8321042807743597e-01 + -2.9026939557384290e+00 4.3069758261612701e-01 -1.2256453474994879e+00 + -3.5068462059243108e+00 3.4037543785322155e-01 -1.5133990821075216e+00 + -4.0970519599997717e+00 1.8063381821550695e-01 -1.8453369368149268e+00 + -4.6494941650221051e+00 -5.6590022711791477e-02 -2.2118811743708395e+00 + -5.1376144129740906e+00 -3.6406594319536811e-01 -2.5939468711348712e+00 + -5.5405916878343193e+00 -7.2463986370870659e-01 -2.9618996468277796e+00 + -5.8408681236563478e+00 -1.1179730329567086e+00 -3.2837051000089761e+00 + -6.0343078767585112e+00 -1.5175532323603518e+00 -3.5341702023790322e+00 + -6.1458063376646397e+00 -1.9076848822565249e+00 -3.7221046018842596e+00 + -6.2379036319459313e+00 -2.3132816308556614e+00 -3.9023908279824600e+00 + -6.3712084120442656e+00 -2.7746474369248348e+00 -4.1287017187599115e+00 + -6.5774475657470228e+00 -3.2765234555992944e+00 -4.4005535105276499e+00 + -6.8677747724820453e+00 -3.7490829780791950e+00 -4.6650226883644752e+00 + -7.2084568409278553e+00 -4.1429265624853500e+00 -4.8782261587191922e+00 + -7.4360718261439569e+00 -4.4525069754440096e+00 -5.0837226397222643e+00 + id 13276 + loc 5.0091654062271118e-01 6.9116842746734619e-01 374 + blend 0.0000000000000000e+00 + interp 5.0406394417252143e-01:4.6250712630542468e-01:5.0115964700794957e-01:4.7371972130370665e-01:9.9912439354865024e-01:3.1463544248701936e-01:1.3744028367971655e+00:4.8328025658993168e-01:2.0474033374146652e+00:3.0058824226713127e-01:2.7929218098365634e+00:5.0405890353307969e-01:3.2050393891639741e+00:4.1728115198284260e-01:3.9418977787448459e+00 + CVs 20 + -6.8213542222785273e-01 3.5164690903708662e-01 -2.2131868825346496e-01 + -1.2346070961133015e+00 5.8991682110019217e-01 -3.7550468362447664e-01 + -1.7726422198365857e+00 7.5771398860857997e-01 -4.9829927668376589e-01 + -2.3321436315393327e+00 8.9097926461056698e-01 -6.2333098333125925e-01 + -2.8845342125031355e+00 1.0015470976609717e+00 -7.7350040510686524e-01 + -3.4043462076896827e+00 1.0863597929922155e+00 -9.6449412691832981e-01 + -3.8774981954441143e+00 1.1319517456435180e+00 -1.1970768563973726e+00 + -4.2989697197132992e+00 1.1298011547653959e+00 -1.4596346085543348e+00 + -4.6751667342287968e+00 1.0817488024690880e+00 -1.7380796637840885e+00 + -5.0260248397513410e+00 9.9078127714016806e-01 -2.0274031094078460e+00 + -5.3754115850454793e+00 8.6051394449914742e-01 -2.3294559675231010e+00 + -5.7421470795577241e+00 6.8899221425331003e-01 -2.6413724384076769e+00 + -6.1321410524826767e+00 4.5168662381390989e-01 -2.9535488564076311e+00 + -6.5282922185436654e+00 1.1701041817658364e-01 -3.2468206864396003e+00 + -6.9047381158285202e+00 -2.9853581939056184e-01 -3.5002766471109301e+00 + -7.2541972671384327e+00 -7.3224098934353776e-01 -3.7223394593668484e+00 + -7.5820293614969501e+00 -1.1356250284787741e+00 -3.9385548731003457e+00 + -7.9034330659182768e+00 -1.4838556762929356e+00 -4.1457229786966270e+00 + -8.2566847733667341e+00 -1.7443490525526739e+00 -4.2956357161867631e+00 + id 13277 + loc 1.8087565898895264e-02 4.9252393841743469e-01 399 + blend 0.0000000000000000e+00 + interp 4.7111146842182361e-01:3.4971801825772825e-01:1.2201746756762344e-01:3.2520977453489625e-01:1.1079295687431538e+00:4.0735056264266506e-01:1.8458650820064000e+00:4.7110675730713941e-01:2.3941713291784756e+00:4.2130386974247380e-01:2.9229175748154699e+00:3.3240245117085931e-01:3.0048157114730443e+00:2.6611671109059332e-01:3.6819591054103977e+00 + CVs 20 + -2.2172894963108286e-01 2.8502338223910706e-01 2.8603959267764667e-01 + -4.4291957337400828e-01 5.5658502583163005e-01 5.6851092227783651e-01 + -6.8086640327778836e-01 8.1169562082408486e-01 8.5791830306973604e-01 + -9.3904260178799248e-01 1.0492422945544086e+00 1.1566094113689231e+00 + -1.2060403156987063e+00 1.2665559563354956e+00 1.4575915723768014e+00 + -1.4577083885189455e+00 1.4561579989950060e+00 1.7508152568579614e+00 + -1.6646067168791223e+00 1.6131895436747121e+00 2.0195221947203090e+00 + -1.8130613572277459e+00 1.7466784633531329e+00 2.2407617388354910e+00 + -1.9230975388972191e+00 1.8653577447739085e+00 2.4472137608271347e+00 + -2.0031834072440815e+00 1.9286608140070978e+00 2.7127499322777435e+00 + -2.0290542945650167e+00 1.8846230916543554e+00 3.0484160936406743e+00 + -1.9805758081200491e+00 1.6971234286231323e+00 3.4188277534912190e+00 + -1.8823255133092562e+00 1.3516958020397825e+00 3.7764307557873864e+00 + -1.8020759009096263e+00 8.6605578009042938e-01 4.0899010249808905e+00 + -1.7978631489199830e+00 2.8933304135769106e-01 4.3903786428376534e+00 + -1.9005046273919273e+00 -3.2076198758347058e-01 4.7738716301964237e+00 + -2.1292512495470386e+00 -8.4569740577482844e-01 5.3482236588921781e+00 + -2.3925402506468876e+00 -9.7882600150193477e-01 5.9814328388722586e+00 + -2.5188668815961877e+00 -6.6882078069452522e-01 6.2777853713970568e+00 + id 13278 + loc 2.5608208775520325e-01 3.6993253231048584e-01 401 + blend 0.0000000000000000e+00 + interp 4.7673577509809245e-01:3.8247189187301872e-01:1.1400244886394795e-04:3.0868027968957540e-01:6.0305481932150329e-01:2.9883140560537103e-01:1.2594629681236398e+00:3.2577434933580729e-01:1.9863178577560101e+00:4.7673100774034149e-01:2.6273429640079784e+00:3.7840069911479896e-01:3.0002076873200862e+00:2.6583424420912372e-01:3.5437721741749932e+00 + CVs 20 + -2.9458723424814581e-01 2.1060147299165888e-01 1.4347434509134094e-01 + -5.6374037407162114e-01 4.0790059882816604e-01 2.6273429639045998e-01 + -8.2466693126588275e-01 5.8680833838027735e-01 3.7703181365205829e-01 + -1.0858661598025061e+00 7.4620341113651212e-01 4.9687931417353259e-01 + -1.3472324694109707e+00 8.8831995211168380e-01 6.2386464404645237e-01 + -1.6103672146012060e+00 1.0160200769116192e+00 7.6243237193107594e-01 + -1.8763289621793147e+00 1.1314195563469247e+00 9.2392622600881147e-01 + -2.1439569072616709e+00 1.2337063814655733e+00 1.1261540831641250e+00 + -2.4079916657872591e+00 1.3190555389082235e+00 1.3858264115392465e+00 + -2.6599432735966828e+00 1.3820334958385703e+00 1.7128513740242226e+00 + -2.8932542389950906e+00 1.4174026628613232e+00 2.1072902588938782e+00 + -3.1071418422596233e+00 1.4202115998722555e+00 2.5578098786644894e+00 + -3.3023606088354027e+00 1.3833201203655754e+00 3.0456885990698099e+00 + -3.4722108081711229e+00 1.3036580890864018e+00 3.5467971163588139e+00 + -3.5989154761085826e+00 1.2026688340995997e+00 4.0294766516082108e+00 + -3.6678832934773977e+00 1.1232677498992001e+00 4.4646380901888687e+00 + -3.6883111880901724e+00 1.0956793948663828e+00 4.8382519586387280e+00 + -3.6763590178973113e+00 1.1118955617670070e+00 5.1686679877658417e+00 + -3.5454198411564919e+00 1.1388945375047357e+00 5.5341537124386768e+00 + id 13279 + loc 2.9167531058192253e-02 2.5921169668436050e-02 393 + blend 0.0000000000000000e+00 + interp 3.8682668645441409e-01:2.4257735058747390e-01:4.7570288146250927e-01:3.8682281818754954e-01:1.9251919390165415e+00:2.9296188694538683e-01:2.3926713130614532e+00:3.6586044408654483e-01:2.9646678109074891e+00:2.5291154463143400e-01:3.3634638847431755e+00:3.6301196621927695e-01:3.9714607238946158e+00 + CVs 20 + -1.4263111048333305e-01 3.1473288379832687e-01 3.1554564078148861e-01 + -3.1670125343475730e-01 6.4883634479039376e-01 6.2811347833003683e-01 + -5.2129123292938384e-01 1.0110514734685445e+00 9.0697561050199393e-01 + -7.6203044928288954e-01 1.3882389629669694e+00 1.1299356504580298e+00 + -1.0508202382230700e+00 1.7446549473450621e+00 1.2877540990504770e+00 + -1.3906378073635823e+00 2.0444031063084309e+00 1.3873723392807809e+00 + -1.7731868086703211e+00 2.2634869436270701e+00 1.4410371099936958e+00 + -2.1825894197853475e+00 2.3885094046477144e+00 1.4616432177499106e+00 + -2.6179018924355746e+00 2.4186040366431465e+00 1.4733239266527010e+00 + -3.0862565161816775e+00 2.3584782915770717e+00 1.5160113790355214e+00 + -3.5643074842489950e+00 2.2090875284900080e+00 1.6298901381853292e+00 + -3.9926614450729834e+00 1.9687908974460893e+00 1.8129491057328058e+00 + -4.3307263136961529e+00 1.6452101201599239e+00 2.0183804478683980e+00 + -4.5910651125745687e+00 1.2546121124617524e+00 2.2309307825381390e+00 + -4.8027803233177897e+00 8.1341438091839147e-01 2.4727183987409198e+00 + -4.9711886539948935e+00 3.5691032135980927e-01 2.7141385605799346e+00 + -5.0432994557946333e+00 -4.5878319987031513e-02 2.8203811084981605e+00 + -4.9879230666584933e+00 -2.7374731027950994e-01 2.6344881705065046e+00 + -5.0063619889736399e+00 -7.4658213904392956e-01 2.8513834549073458e+00 + id 13280 + loc 3.5104086995124817e-01 1.5314657986164093e-01 376 + blend 0.0000000000000000e+00 + interp 6.0398126499364568e-01:4.0300240626402384e-01:7.2648728820590147e-04:4.9811883595766959e-01:6.6688969261672326e-01:6.0397522518099578e-01:1.0043933931818483e+00:3.8163596583696369e-01:1.7539991679755484e+00:3.0811476048522368e-01:2.1329639906869944e+00:2.9567321318483386e-01:3.0682467382356293e+00 + CVs 20 + 8.0174237943892057e-01 4.0325528272647915e-01 1.2408341740235321e-01 + 1.4228446731353479e+00 6.0216238468720562e-01 6.8190400904221238e-02 + 1.9918286123261846e+00 6.6724929964003377e-01 -9.7231844306780779e-02 + 2.6072298769489879e+00 7.2158347941913770e-01 -3.0010270408680939e-01 + 3.2852469302646257e+00 8.3018772095896487e-01 -4.5660544629592370e-01 + 4.0132442815998788e+00 9.9436315499672234e-01 -4.7175342937382991e-01 + 4.7436230551909722e+00 1.1969747763714169e+00 -2.8095673930952492e-01 + 5.4044337039398522e+00 1.4212458874509439e+00 1.2784530016064211e-01 + 5.9406112066009378e+00 1.6344983409830920e+00 7.1798143107385393e-01 + 6.3521968697989113e+00 1.7845621066605259e+00 1.4312679203968588e+00 + 6.6712579803592060e+00 1.8039165381772881e+00 2.2229145225395013e+00 + 6.9002848954789462e+00 1.6136180065395287e+00 3.0347814530910351e+00 + 7.0017799230382609e+00 1.1821018544380144e+00 3.7552763698101881e+00 + 6.9519083307578153e+00 5.7510998743222430e-01 4.2684510266860594e+00 + 6.8067117229616887e+00 -1.1050597865903988e-01 4.4953691123850517e+00 + 6.7547847234277185e+00 -7.9705632287310291e-01 4.3884139944217440e+00 + 6.9530541291555350e+00 -1.2923811799336473e+00 3.9354237933823772e+00 + 7.2544026571722249e+00 -1.4326815693363937e+00 3.4172044953756786e+00 + 7.4768875148939955e+00 -1.7065347012763734e+00 3.0953524414275995e+00 + id 13281 + loc 3.1562611460685730e-01 6.6332238912582397e-01 380 + blend 0.0000000000000000e+00 + interp 4.5315285249750825e-01:3.1200092482687963e-01:4.2673195824822530e-01:3.3475984470746623e-01:1.1490536527699022e+00:4.3152998722102603e-01:2.0121755208803469e+00:3.6413286790826338e-01:2.5709976574559441e+00:2.9811077158309013e-01:3.0942680026175977e+00:4.5314832096898328e-01:3.9912206651206312e+00 + CVs 20 + -4.1958319005178074e-01 2.6226536200980566e-01 -4.2976175281283679e-01 + -7.9425687477700613e-01 4.5077687473005484e-01 -7.4682237551277786e-01 + -1.1564565229025661e+00 6.1200903144008945e-01 -1.0393429738718420e+00 + -1.5184100223434851e+00 7.7463489277086783e-01 -1.3532592553822891e+00 + -1.8701038423879117e+00 9.4272429790351719e-01 -1.6947654476218648e+00 + -2.2045759409398262e+00 1.1136405553918540e+00 -2.0694580280848096e+00 + -2.5233157060617279e+00 1.2775395913409764e+00 -2.4839498841628118e+00 + -2.8302922393820023e+00 1.4178352133157435e+00 -2.9438934208606571e+00 + -3.1258758253683787e+00 1.5150838944250751e+00 -3.4517312982894741e+00 + -3.4098075655463869e+00 1.5501518344823562e+00 -4.0050945686390680e+00 + -3.6884883827864852e+00 1.4992421532981024e+00 -4.5937836676886308e+00 + -3.9674705139858664e+00 1.3307208153826227e+00 -5.1988861511776197e+00 + -4.2365731077603721e+00 1.0157212028812279e+00 -5.7849394472301690e+00 + -4.4705037962342331e+00 5.7357263033492112e-01 -6.2946840591750224e+00 + -4.6605321466538907e+00 9.6894109276282503e-02 -6.6901567442028833e+00 + -4.8302162964452497e+00 -3.3116453777043953e-01 -6.9890117333250208e+00 + -5.0117508142162750e+00 -6.8536113319002911e-01 -7.2222867893377423e+00 + -5.2321592848735161e+00 -9.6749026230138124e-01 -7.4016119252209336e+00 + -5.5098266051142630e+00 -1.3004388318360398e+00 -7.5819963369764753e+00 + id 13282 + loc 1.6734455525875092e-01 3.0398452281951904e-01 1080 + blend 0.0000000000000000e+00 + interp 1.7353358294414418e+00:2.7311929699952747e-01:1.7707115807792384e-02:6.4476969503835235e-01:2.6663532324754258e-01:1.0826509673710043e+00:5.6322215596478986e-01:1.4299594850812307e+00:8.0197506298650889e-01:1.7353258294414418e+00:8.5302598558460052e-01:9.6780224792712444e-01:2.6674395616746716e+00:3.3543687492316132e-01:2.7505041130171537e+00:3.1515277648261830e-01:3.2130606458345854e+00 + CVs 20 + 5.0949004144892462e-01 4.2956210568862963e-01 8.2823376269938326e-03 + 7.8273499791147139e-01 7.0237771777631353e-01 4.9067573681925714e-03 + 1.0155222437354585e+00 9.2936239067939097e-01 -1.7712686222561308e-02 + 1.2967642730349596e+00 1.1395547934444168e+00 -6.5944251457029340e-02 + 1.6102539725557907e+00 1.3199010030689529e+00 -1.4143569161437750e-01 + 1.9328496046206813e+00 1.4582361579533263e+00 -2.4216535897520125e-01 + 2.2345165065618078e+00 1.5443854888305606e+00 -3.5989420877053258e-01 + 2.4855123961002428e+00 1.5738836725618761e+00 -4.7796103630553138e-01 + 2.6700798328820801e+00 1.5532811370613824e+00 -5.7360030125666295e-01 + 2.7973473450074535e+00 1.4985931129645877e+00 -6.3684004010963302e-01 + 2.8858117197344151e+00 1.4159094373203267e+00 -6.9075513505808006e-01 + 2.9340518226784194e+00 1.2949504484251466e+00 -7.6382325338349921e-01 + 2.9292369346696829e+00 1.1312907304514284e+00 -8.5974090436562078e-01 + 2.8658065992568669e+00 9.3367739613427325e-01 -9.6859131570165491e-01 + 2.7478153397875076e+00 7.1705521832859254e-01 -1.0799613750349357e+00 + 2.5926499872947844e+00 4.9958391304151428e-01 -1.1820973690201644e+00 + 2.4392001963717744e+00 2.9042412960241826e-01 -1.2645133843472145e+00 + 2.3363808469980700e+00 5.7636719244361756e-02 -1.3319567446306051e+00 + 2.3099661670334273e+00 -4.0350343185774051e-01 -1.4755279735737508e+00 + id 13283 + loc 4.9912539124488831e-01 6.8342500925064087e-01 409 + blend 0.0000000000000000e+00 + interp 3.7442715536440013e-01:3.0383782489114008e-01:1.5240961686466226e-01:3.1236120803886364e-01:9.9797550483583175e-01:3.7442341109284649e-01:1.7498919501728070e+00:2.9294113138435735e-01:2.3417431952080707e+00:3.7209120969883169e-01:3.0042711049066280e+00:3.7423515776137894e-01:3.6615098982339425e+00 + CVs 20 + 3.9979992589205782e-01 1.4070719509731230e-01 -8.8670263154894055e-02 + 7.1916315159664090e-01 2.6190366071226251e-01 -1.9926601942182839e-01 + 1.0070753282569280e+00 3.8320402036036327e-01 -3.0646403577184189e-01 + 1.2836947089569126e+00 5.1559251739100564e-01 -4.0027199698351157e-01 + 1.5475401183530630e+00 6.5823447481932607e-01 -4.8337271058111397e-01 + 1.8008482736008307e+00 8.1130176323738623e-01 -5.5637713077236040e-01 + 2.0518885967852016e+00 9.7795891636931520e-01 -6.1846176942176023e-01 + 2.3165537879658271e+00 1.1622634210022829e+00 -6.6696243785162257e-01 + 2.6144907522979857e+00 1.3613770397244060e+00 -6.9440100088282342e-01 + 2.9635973422447428e+00 1.5628094507369972e+00 -6.8918571743126744e-01 + 3.3783059221906293e+00 1.7451992745499867e+00 -6.4413184906968768e-01 + 3.8593626814859898e+00 1.8742282149929692e+00 -5.6412225328127774e-01 + 4.3841191216024784e+00 1.9129833460398402e+00 -4.6291667498822558e-01 + 4.9218086336432627e+00 1.8408055968517663e+00 -3.5352877617444178e-01 + 5.4469837545734894e+00 1.6530657385681558e+00 -2.4605375331871349e-01 + 5.9379138010441626e+00 1.3555510920298413e+00 -1.5368668986609302e-01 + 6.3678861663788675e+00 9.6473648365097375e-01 -8.6679454387876942e-02 + 6.7037478609088277e+00 5.0771563232070616e-01 -3.1630373804603540e-02 + 6.7925496837051664e+00 1.2236055806980373e-01 5.4596334511836764e-02 + id 13284 + loc 5.4915672540664673e-01 9.5332324504852295e-01 400 + blend 0.0000000000000000e+00 + interp 4.6948327154131014e-01:3.2690048991897686e-01:1.0917617087165321e-01:3.3973581473477527e-01:1.0000977853960920e+00:3.2359817169276800e-01:1.9062121319739980e+00:4.6947857670859477e-01:2.1119050822421541e+00:3.7541180768794441e-01:2.8618926571409045e+00:3.5273863391442506e-01:3.1264183299004049e+00:4.1475976590753372e-01:3.7846735350236607e+00 + CVs 20 + -2.5803703682273171e-01 3.4760970034972005e-01 -2.1694501022620755e-01 + -4.6994109964346253e-01 6.9602518355382792e-01 -4.8712131628857841e-01 + -6.7422667696468053e-01 1.0302932826194946e+00 -7.9808559196936457e-01 + -9.1195354547402097e-01 1.3344601622095684e+00 -1.1332697791116848e+00 + -1.2140142771044116e+00 1.5848916661335917e+00 -1.4697256991290606e+00 + -1.5775890695340571e+00 1.7544333461357597e+00 -1.7815333278994610e+00 + -1.9689992130448497e+00 1.8311674677580547e+00 -2.0527462761482935e+00 + -2.3497017792749832e+00 1.8266170199496612e+00 -2.2818732321039099e+00 + -2.7074364547884051e+00 1.7611316352072746e+00 -2.4784231385914222e+00 + -3.0505234363911984e+00 1.6400946297896912e+00 -2.6567419303210338e+00 + -3.3893114411184060e+00 1.4512894633119455e+00 -2.8326300101560653e+00 + -3.7316404881387046e+00 1.1909810514701371e+00 -3.0105004952902932e+00 + -4.0839127639231023e+00 9.1114233532508981e-01 -3.1689870208467994e+00 + -4.4458605769360320e+00 6.9314973222257903e-01 -3.2832306661747030e+00 + -4.8083268230745331e+00 5.7199732082937049e-01 -3.3510032979898963e+00 + -5.1933890147816060e+00 5.2566673542218689e-01 -3.3955543413859610e+00 + -5.6516453108044260e+00 5.1774920943076097e-01 -3.4596850122454446e+00 + -6.1923163083597856e+00 5.2495389892661026e-01 -3.5918754500130023e+00 + -6.7984587750224721e+00 5.3567132258521299e-01 -3.8251928005398286e+00 + id 13285 + loc 9.1822499036788940e-01 2.9616308212280273e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0873549888486077e-01:3.2317037936771664e-01:6.5257055868232605e-02:2.6959854327480365e-01:9.2858186171393120e-01:2.2646549560911425e-01:1.7910285817752640e+00:2.7300714092105166e-01:2.2077151345299462e+00:4.0873141152987191e-01:3.0069136125139120e+00:2.7145001216341152e-01:3.7201797282500975e+00 + CVs 20 + -3.4445639959736818e-02 3.5724935820903964e-01 2.9119542002460841e-01 + -1.0744043141289872e-01 6.8128503785450312e-01 5.6932165430667658e-01 + -2.2713227324334279e-01 9.8272167792242604e-01 8.4434716636699969e-01 + -3.9980719994717073e-01 1.2651760322376462e+00 1.1041193948224697e+00 + -5.9503129235315955e-01 1.5268788115160319e+00 1.3224550346730672e+00 + -7.4147509442245352e-01 1.7718773988189847e+00 1.4896256024810572e+00 + -7.9853504650473750e-01 2.0007310478837135e+00 1.6210819426029652e+00 + -7.8671047663580496e-01 2.2175332703154913e+00 1.7498517684978492e+00 + -7.2523712560892029e-01 2.4122787542575694e+00 1.9101672508882648e+00 + -6.1945849246899920e-01 2.5253516754711653e+00 2.1219691256529956e+00 + -4.9712205946893762e-01 2.4971358205559655e+00 2.3655190639215791e+00 + -3.9355725858556867e-01 2.3534793765774582e+00 2.6155004087501625e+00 + -3.2415848088897259e-01 2.1246411165069854e+00 2.8812170949546445e+00 + -3.1491077754177454e-01 1.8178515997908546e+00 3.1643770182917055e+00 + -3.9918155987447324e-01 1.4537839245123696e+00 3.4456872128043323e+00 + -6.0420020706530109e-01 1.0582686661572935e+00 3.6668220469614985e+00 + -9.3932464748221400e-01 6.7228759506345959e-01 3.7443938063750131e+00 + -1.3531563257389925e+00 3.5143405696734331e-01 3.6879393679834038e+00 + -1.6414717472557852e+00 -2.9036030607435426e-02 3.8131947530183297e+00 + id 13286 + loc 1.2606836855411530e-01 4.6593025326728821e-01 402 + blend 0.0000000000000000e+00 + interp 4.9170865635390448e-01:3.2900034140967832e-01:4.1692818413934241e-03:4.6212638473470469e-01:6.8024499414543937e-01:4.4767150851127763e-01:1.0454664729189198e+00:2.7834121792946814e-01:1.6266414912960194e+00:3.4070670444144047e-01:2.1792736456353592e+00:4.2565119252080202e-01:3.0139122410687893e+00:4.9170373926734096e-01:3.6247845037682840e+00 + CVs 20 + -1.4971439375205059e-01 3.2273831684494475e-01 1.1777853507780384e-01 + -3.0607514253259316e-01 6.6636009547677988e-01 2.3192278364008043e-01 + -4.8763729833406405e-01 1.0349704514081473e+00 3.1330407793521675e-01 + -7.0707316626470318e-01 1.4217681542243386e+00 3.5272058972510734e-01 + -9.7291894230765208e-01 1.8153813423944214e+00 3.6112383040632018e-01 + -1.2911670346172821e+00 2.2042475162843198e+00 3.5372517381931357e-01 + -1.6652774718363730e+00 2.5762878968966940e+00 3.4737869216958861e-01 + -2.0961915479438606e+00 2.9162762386200045e+00 3.6393574331928258e-01 + -2.5834343608567689e+00 3.2034037468912313e+00 4.2159593623121250e-01 + -3.1275138755830816e+00 3.4088967071762717e+00 5.1777327583795474e-01 + -3.7245185458088921e+00 3.4928487227937763e+00 6.3693906936056965e-01 + -4.3489314691798304e+00 3.4079437383725093e+00 7.7666575456191311e-01 + -4.9376802310610932e+00 3.1376638584010950e+00 9.5782865059154676e-01 + -5.4164934107195517e+00 2.7535676884497131e+00 1.2219552579143100e+00 + -5.7507683071497295e+00 2.3983063514467862e+00 1.6054214025153202e+00 + -5.9503490425293091e+00 2.2429136867008483e+00 2.0843949616328361e+00 + -6.0509698949882109e+00 2.4260097089785182e+00 2.5292532213935170e+00 + -6.1194177276685471e+00 2.8156666532652799e+00 2.7964599651435043e+00 + -6.3759025736893165e+00 2.8463411124562201e+00 3.1548491318587635e+00 + id 13287 + loc 2.6922532916069031e-01 6.0434013605117798e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0460364934798265e-01:3.0104503584904746e-01:5.3145530062385782e-01:4.0459960331148920e-01:9.9894381979269431e-01:3.1161592929769860e-01:1.5385915294318000e+00:3.0152741649304288e-01:2.4304382263139672e+00:2.9560948845138663e-01:3.5049824453092366e+00 + CVs 20 + 2.2836728004261389e-01 3.1996280540767608e-01 -2.4437959665505318e-01 + 4.7240989512468290e-01 6.6048194615186961e-01 -5.1380381723516655e-01 + 7.1713827263005658e-01 1.0114768708282984e+00 -7.7758825630347828e-01 + 9.5541908696425915e-01 1.3437081265897086e+00 -1.0346201935713586e+00 + 1.1887935704834651e+00 1.6238261504168261e+00 -1.2917272137822211e+00 + 1.4208768343402285e+00 1.8028104086155865e+00 -1.5403886305906951e+00 + 1.6494074927063302e+00 1.8368540707468874e+00 -1.7432225509150991e+00 + 1.8550794173307765e+00 1.7242557189286369e+00 -1.8373685287630905e+00 + 2.0090534797904454e+00 1.5344300862982478e+00 -1.7907490410857716e+00 + 2.1151464256249950e+00 1.3590401934687848e+00 -1.6596388740418520e+00 + 2.2227446428848943e+00 1.2268777388990821e+00 -1.5384739521701281e+00 + 2.3848485754847450e+00 1.1123636986033352e+00 -1.4859035562305702e+00 + 2.6147565544923648e+00 9.8763603924641918e-01 -1.5155756240781086e+00 + 2.8954157533228670e+00 8.3230108018301741e-01 -1.6373404124815414e+00 + 3.2096939284690222e+00 6.1721924157742825e-01 -1.8921229681139826e+00 + 3.5171176681720393e+00 3.1320850348344503e-01 -2.3572203688181221e+00 + 3.7033996446231128e+00 -2.1686275404796618e-02 -3.0482342326868008e+00 + 3.7306501324659420e+00 -2.0830064177818938e-01 -3.7247903875353847e+00 + 3.7827846359973787e+00 -1.0685924561916604e-01 -3.9492195531410488e+00 + id 13288 + loc 6.8397015333175659e-01 8.7696892023086548e-01 415 + blend 0.0000000000000000e+00 + interp 5.3227739181487499e-01:4.4066422423387747e-01:1.9733726068298707e-02:3.8249411697945934e-01:9.5367526057226881e-01:4.8496604783925495e-01:1.1630055925174534e+00:3.9340932992462169e-01:1.8519366039865859e+00:4.5348658737764608e-01:2.0743419988315019e+00:3.4940488044280765e-01:2.9046712762279823e+00:5.3227206904095692e-01:3.4902245626766102e+00 + CVs 20 + 4.1728113214597817e-01 1.9286528895331545e-01 -1.2622629473002633e-02 + 7.0980616625911896e-01 3.0996395665972226e-01 -5.4010504658684982e-02 + 9.6632675913806687e-01 4.0897734762121085e-01 -9.5244019945982417e-02 + 1.2243518429580653e+00 5.1750345409384524e-01 -1.2398974406697916e-01 + 1.4869396582619965e+00 6.3406679895274798e-01 -1.4267425148515794e-01 + 1.7589223778897831e+00 7.5670540062203884e-01 -1.5204327381196980e-01 + 2.0454894156734862e+00 8.8312405030554242e-01 -1.4827092192488889e-01 + 2.3501940526398690e+00 1.0096211547036500e+00 -1.2562301361416939e-01 + 2.6748375397255497e+00 1.1302732690885446e+00 -8.0857786845674129e-02 + 3.0180262806602216e+00 1.2392392687748592e+00 -1.0373903069382906e-02 + 3.3677222380488363e+00 1.3372095372813817e+00 9.7762470141372404e-02 + 3.7028038927850866e+00 1.4291069243472174e+00 2.5342240818421746e-01 + 4.0236088309670883e+00 1.5050769255633338e+00 4.3649942933876329e-01 + 4.3602131230003760e+00 1.5357474458135703e+00 5.9387165271337594e-01 + 4.7233721491324268e+00 1.5030656279632091e+00 6.8231158764727506e-01 + 5.0836054466561649e+00 1.4172958425162783e+00 6.9742393013434234e-01 + 5.4007951667235403e+00 1.3034298614274979e+00 6.4907726591939363e-01 + 5.6526136356136130e+00 1.1833321814917435e+00 5.4216912885603508e-01 + 5.8865251865470052e+00 1.0095099160393715e+00 3.1861917626715508e-01 + id 13289 + loc 7.3640644550323486e-01 9.9686361849308014e-02 375 + blend 0.0000000000000000e+00 + interp 5.2944073180155315e-01:3.8776460148778824e-01:2.2376188393979679e-01:3.1917954202005622e-01:9.0647914532628215e-01:4.4429803573471149e-01:1.0832683694941498e+00:4.7053953267385695e-01:1.9486817125914322e+00:4.1584410740546163e-01:2.3552259675176384e+00:5.2943543739423515e-01:2.8547021088423312e+00:3.1257410704147620e-01:3.4820666709174306e+00 + CVs 20 + 6.1291634254584171e-01 4.4784941085183616e-01 1.0255543256347890e-01 + 1.1279320644646400e+00 7.3879240716649308e-01 1.0737343588192511e-01 + 1.6353337733651414e+00 8.6471362909390792e-01 1.1683567028681452e-02 + 2.1469671400388597e+00 8.6093113766107598e-01 -1.7415438587341553e-01 + 2.6737919584849474e+00 8.0167326957529350e-01 -4.2566524265257116e-01 + 3.2651778661013968e+00 7.4162700957148076e-01 -6.9213083151603338e-01 + 3.9579739122296367e+00 6.9616598707380106e-01 -8.8224024946305557e-01 + 4.7357469896433262e+00 6.6892316402910157e-01 -9.0604140083941676e-01 + 5.5320035200820872e+00 6.6457837867155178e-01 -7.1974220460312011e-01 + 6.2666707562996322e+00 6.6120034512699988e-01 -3.4748621514755063e-01 + 6.8883228053452665e+00 6.0390604246955526e-01 1.3677957359768755e-01 + 7.3599787825995131e+00 4.3691953862123656e-01 6.4455968942618536e-01 + 7.6571002937035777e+00 1.4194642002148328e-01 1.0907744191363764e+00 + 7.7884380844196421e+00 -2.4467790653122634e-01 1.4193395260725674e+00 + 7.7939768077877201e+00 -6.3952743351685859e-01 1.5535311876723834e+00 + 7.8090743154687239e+00 -8.7601752572528868e-01 1.3890985582742932e+00 + 7.9343856011421359e+00 -7.4916796721377832e-01 1.0096053071157112e+00 + 8.0546942972772388e+00 -5.5307803500152675e-01 7.4470563427569259e-01 + 8.2141654739217707e+00 -1.0174177192378591e+00 5.9500213962088855e-01 + id 13290 + loc 9.9859669804573059e-02 8.6697173118591309e-01 396 + blend 0.0000000000000000e+00 + interp 4.6568811074636701e-01:3.7970934925038757e-01:6.8011519293962874e-02:4.6568345386525956e-01:8.3944212652104244e-01:4.2744991327314419e-01:1.3692172744471449e+00:3.2352993854928958e-01:1.9279121356922744e+00:3.8608103434930047e-01:2.8931215029531026e+00:3.7765151756313853e-01:3.3923299217546257e+00 + CVs 20 + 9.3436861248544734e-01 2.5747513393518906e-01 -2.8374615484964294e-01 + 1.5689293058026088e+00 3.6947948521477941e-01 -5.3756935493092095e-01 + 2.1391504290390984e+00 4.3444480379381417e-01 -7.8896296058919213e-01 + 2.7454969277938210e+00 4.8976746969386864e-01 -1.0475762010563938e+00 + 3.3854302028861265e+00 5.2332509602045985e-01 -1.3029630046330272e+00 + 4.0498381944572390e+00 5.2851558002462440e-01 -1.5483650505344222e+00 + 4.7280852771602726e+00 4.8887652532652104e-01 -1.7785815923993042e+00 + 5.4103695563376668e+00 3.7975310399256468e-01 -1.9884674743710484e+00 + 6.0803854859746922e+00 1.7307439644874889e-01 -2.1736695418123722e+00 + 6.7000807906733177e+00 -1.4782032625237918e-01 -2.3343681814399972e+00 + 7.2192330981343016e+00 -5.7443776676217584e-01 -2.4729477320581581e+00 + 7.6089699614099473e+00 -1.0793189465612643e+00 -2.5847709981559990e+00 + 7.8640870742762585e+00 -1.6252587006713735e+00 -2.6580073097831103e+00 + 7.9913055959331540e+00 -2.1708824272365255e+00 -2.6860111849038182e+00 + 8.0082392441565489e+00 -2.6807894845282738e+00 -2.6713612763454195e+00 + 7.9436125185497746e+00 -3.1361644527090333e+00 -2.6195788163202764e+00 + 7.8266664309381007e+00 -3.5284624368504671e+00 -2.5421797701721163e+00 + 7.6820029361309956e+00 -3.8538415898020073e+00 -2.4564333432081851e+00 + 7.5187607194433506e+00 -4.1431543545830678e+00 -2.3775026166793474e+00 + id 13291 + loc 1.6849637031555176e-01 5.9363180398941040e-01 373 + blend 0.0000000000000000e+00 + interp 4.9299113512167569e-01:2.9317080381075400e-01:1.0737348953371595e-01:3.9393139968748847e-01:1.0287856000095759e+00:4.8709480295623808e-01:1.6873836027461144e+00:4.8866555788381194e-01:2.0132657879590883e+00:4.6094131501529839e-01:2.5680000405730015e+00:3.8774970847547968e-01:3.0082424450532259e+00:4.9298620521032449e-01:3.6680912280618672e+00 + CVs 20 + -4.5093063099381103e-01 4.9219648147935963e-01 4.5930632178161894e-02 + -8.4139995551189206e-01 9.9533665930228488e-01 4.8869145832416319e-02 + -1.1652586950292574e+00 1.5358531452101811e+00 -2.1442776651769038e-02 + -1.4028457202069242e+00 2.1155329187272458e+00 -1.9047376431518390e-01 + -1.5187096075681121e+00 2.6791539973307144e+00 -4.6464502194209012e-01 + -1.5175246495819539e+00 3.1528374977747156e+00 -8.1710347620704771e-01 + -1.4450530565681983e+00 3.4923812529078431e+00 -1.2033340222030728e+00 + -1.3474861045481650e+00 3.6899290791294237e+00 -1.5900433498445354e+00 + -1.2637221926622431e+00 3.7573931292467342e+00 -1.9863057085228566e+00 + -1.2412769165188937e+00 3.7027047115647735e+00 -2.4237611958580896e+00 + -1.3335627780001587e+00 3.5337370047123562e+00 -2.9052079038385061e+00 + -1.5674829340162411e+00 3.2675526313990280e+00 -3.3896948211488502e+00 + -1.9205478926644770e+00 2.9293040450787040e+00 -3.8251402260030729e+00 + -2.3607171954250230e+00 2.5378623559862330e+00 -4.1833472295801215e+00 + -2.8534530692847415e+00 2.0973776301004179e+00 -4.4571613202832063e+00 + -3.3530066679183941e+00 1.6319158988118769e+00 -4.6542450663293735e+00 + -3.8177710161652865e+00 1.2597854515766214e+00 -4.8118595354079670e+00 + -4.2329841244393194e+00 1.0455619378352832e+00 -4.9836717756019482e+00 + -4.6576155299118227e+00 5.0102163260758115e-01 -4.9212368335470646e+00 + id 13292 + loc 6.9800049066543579e-01 6.3245421648025513e-01 376 + blend 0.0000000000000000e+00 + interp 3.9356994269108747e-01:2.9571484215731980e-01:3.5549336206615911e-01:3.9356600699166056e-01:1.2938810354813923e+00:3.3887617635785011e-01:1.9590305460719610e+00:2.1081128614390687e-01:2.2788377255082648e+00:3.5566006074457496e-01:2.9411291150069894e+00:3.1935326915144202e-01:3.7377753579452588e+00 + CVs 20 + -4.1052545972584994e-02 4.2736194670652145e-01 5.4855787238995990e-01 + 4.7941177912061428e-04 7.0929028140112560e-01 1.0453208110802641e+00 + 1.0443758674118880e-01 8.4575990385807365e-01 1.5339241267072954e+00 + 2.3097187645134498e-01 8.9960509189638560e-01 2.0215413529784882e+00 + 3.4112464963142813e-01 9.3763620093707611e-01 2.4976417340233970e+00 + 4.0451019547449379e-01 9.9219110483325001e-01 2.9542369296669282e+00 + 4.0590819597238043e-01 1.0675739422852795e+00 3.3895985494720895e+00 + 3.4363083897232882e-01 1.1659517529212704e+00 3.8085840483929836e+00 + 2.1719032022103280e-01 1.2989728090582606e+00 4.2169516213408604e+00 + 1.7454250861743015e-02 1.4796026289314763e+00 4.6226312993158576e+00 + -2.6472022044552457e-01 1.7010174965995204e+00 5.0392955282623726e+00 + -6.4340172305861087e-01 1.9216057297801403e+00 5.4827174082424044e+00 + -1.1470859188834082e+00 2.0536532836031700e+00 5.9483087367313665e+00 + -1.7792240133005299e+00 1.9889032515895981e+00 6.3816218372214397e+00 + -2.4759738255616930e+00 1.6603418048374028e+00 6.6932003405003506e+00 + -3.0743541234669847e+00 1.0672784215407276e+00 6.8714880792809359e+00 + -3.3159824683452630e+00 3.2481766674142110e-01 7.0745876263789640e+00 + -3.1504037814849757e+00 -2.6603782248091790e-01 7.4105935461920396e+00 + -3.0326711003501035e+00 -7.8398686463739597e-01 7.7037640261644498e+00 + id 13293 + loc 8.1650811433792114e-01 7.9143375158309937e-01 374 + blend 0.0000000000000000e+00 + interp 5.9317798875110528e-01:4.6451930317438889e-01:3.2066036341238835e-02:3.0617149586842246e-01:8.8397395476048124e-01:5.1932957652414569e-01:1.1795506215100291e+00:3.1123767753156623e-01:2.0047746933114761e+00:5.9317205697121778e-01:2.8791251537487388e+00:3.8947862626689067e-01:3.3981532703044754e+00 + CVs 20 + -6.7004158151574267e-01 4.0901731074317382e-01 -3.9136249995558964e-01 + -1.2099975547848461e+00 7.1992201545258494e-01 -6.6070240306688821e-01 + -1.7221021241293752e+00 9.8323533676027097e-01 -8.7317793114601761e-01 + -2.2407794743127165e+00 1.2303674194466985e+00 -1.0652069191330438e+00 + -2.7654681138330108e+00 1.4586775310444413e+00 -1.2579500610319760e+00 + -3.3142288666357391e+00 1.6496168167878000e+00 -1.4784154863361978e+00 + -3.8977442273732961e+00 1.7675136829286067e+00 -1.7517980019017361e+00 + -4.5018388143265078e+00 1.7737789602215384e+00 -2.0941542921252072e+00 + -5.0956221724341715e+00 1.6410188130939607e+00 -2.5091880106491491e+00 + -5.6466235724932599e+00 1.3547079101973383e+00 -2.9813983059885172e+00 + -6.1270414207897472e+00 9.1093025461637023e-01 -3.4704679209649520e+00 + -6.5073484454322736e+00 3.1779003703356734e-01 -3.9197386019586173e+00 + -6.7603778144538502e+00 -3.9466735785967177e-01 -4.2758233894872664e+00 + -6.8939796655331111e+00 -1.1629838878791561e+00 -4.5189953255006969e+00 + -6.9751573391077404e+00 -1.9225890146981763e+00 -4.6883375812973211e+00 + -7.0975335250676581e+00 -2.6522070860143807e+00 -4.8257883927050802e+00 + -7.3398903718681279e+00 -3.3478562296502310e+00 -4.9154807819246997e+00 + -7.6859028497350117e+00 -3.9776714388622296e+00 -4.9224842785631893e+00 + -7.8649974084028580e+00 -4.5166329936381837e+00 -4.9174311431702069e+00 + id 13294 + loc 2.0518429577350616e-01 6.3819670677185059e-01 395 + blend 0.0000000000000000e+00 + interp 4.8055475813361870e-01:2.5688381650598163e-01:2.5559948242096286e-01:3.0928167897322906e-01:1.0499492374181552e+00:2.8895230851252729e-01:1.9853429311218442e+00:4.3413182525169841e-01:2.1886625434849591e+00:4.8054995258603739e-01:2.9707923915275849e+00:3.4392784185140185e-01:3.5355980319731874e+00 + CVs 20 + 3.4177209728624874e-01 2.3908008081976881e-01 -1.9197864067669962e-01 + 6.2868725050651697e-01 4.2349467313599598e-01 -3.8916328272183964e-01 + 9.1480621309283872e-01 5.8079020382448776e-01 -6.0954322596962141e-01 + 1.2326593298979298e+00 7.2035628274520458e-01 -8.5925362199429600e-01 + 1.5871620518865852e+00 8.2905391746255308e-01 -1.1303787147272089e+00 + 1.9744006932268339e+00 8.9324471677400696e-01 -1.4161470474450286e+00 + 2.3853932814279699e+00 9.0113198403422201e-01 -1.7133429697348470e+00 + 2.8078241431218460e+00 8.3840096032351152e-01 -2.0159837891033883e+00 + 3.2182113711312983e+00 6.8849324641867282e-01 -2.3112145791168897e+00 + 3.5774430893473843e+00 4.4318933032133456e-01 -2.5851359636236255e+00 + 3.8512260236905083e+00 1.1125344073062049e-01 -2.8263062983733778e+00 + 4.0363056244105504e+00 -2.8704831567269684e-01 -3.0242831786036559e+00 + 4.1486158164429465e+00 -7.2997162591925902e-01 -3.1722402296205421e+00 + 4.2001809877169478e+00 -1.1966133769733844e+00 -3.2722993829789235e+00 + 4.1972155850745825e+00 -1.6702068852424998e+00 -3.3325092651624910e+00 + 4.1414890280181966e+00 -2.1337224826159380e+00 -3.3516781763726322e+00 + 4.0394518976560985e+00 -2.5713235592194548e+00 -3.3265337051343948e+00 + 3.9163995263740041e+00 -2.9838737240090341e+00 -3.2799960275891458e+00 + 3.8971369692805560e+00 -3.4725254807855199e+00 -3.3406493587621777e+00 + id 13295 + loc 1.4024135470390320e-01 9.6601819992065430e-01 1080 + blend 0.0000000000000000e+00 + interp 5.5448500505843590e-01:2.9831047863811205e-01:5.7962634022307946e-02:3.3921954630541140e-01:9.7379234621929944e-01:2.6569739101499246e-01:1.9931201186773593e+00:5.5447946020838534e-01:2.7591171952470388e+00:2.8730054505606273e-01:3.3193392634134069e+00 + CVs 20 + -1.0134995947993682e-01 2.5754972847370422e-01 2.4653919583899855e-01 + -1.6141318071426028e-01 4.1594259825788971e-01 3.4527228220982076e-01 + -2.1319595828326171e-01 5.3364615890093448e-01 4.0039754689601081e-01 + -2.7273770613732135e-01 6.4230387592035454e-01 4.6780406807750319e-01 + -3.4284397280710782e-01 7.4446674222371789e-01 5.4592067960438839e-01 + -4.2766152239008098e-01 8.4124511594001672e-01 6.3377980227908826e-01 + -5.3054740863470373e-01 9.3145308904559887e-01 7.3027541641827909e-01 + -6.5229187862974314e-01 1.0130093694607449e+00 8.3435664214093896e-01 + -7.9164637075091837e-01 1.0846905629819494e+00 9.4553528644824114e-01 + -9.4674492350419037e-01 1.1470986961300547e+00 1.0635370352680149e+00 + -1.1175386339614892e+00 1.2027951599435620e+00 1.1887019146242661e+00 + -1.3062583962786338e+00 1.2537971339763918e+00 1.3213408620947691e+00 + -1.5092822370479093e+00 1.2963620359542356e+00 1.4569391792865949e+00 + -1.7080492527320279e+00 1.3222094086016862e+00 1.5837055217143479e+00 + -1.8810318593841686e+00 1.3305758054985131e+00 1.6910759010949059e+00 + -2.0247658910070285e+00 1.3332546960784377e+00 1.7802844045044794e+00 + -2.1472416972912929e+00 1.3440333619743048e+00 1.8624477185751265e+00 + -2.2579999571062555e+00 1.3696665490200091e+00 1.9532345352784228e+00 + -2.4591175799566556e+00 1.4452415866187327e+00 2.1626467651944026e+00 + id 13296 + loc 9.6926689147949219e-03 1.2332119047641754e-02 1078 + blend 0.0000000000000000e+00 + interp 4.3438206897940784e-01:4.3437772515871809e-01:3.2866055235679759e-02:3.4599191698072529e-01:7.4690179098878806e-01:2.6684392138844809e-01:1.1294142367858031e+00:3.4636930793572973e-01:2.2023959300286648e+00:2.9970074968997451e-01:3.4244044473675013e+00:4.1222255384658846e-01:3.9876671354372277e+00 + CVs 20 + 1.8214177376569390e-01 3.8748135253878291e-01 -5.0724820367227738e-02 + 2.5459671643593995e-01 6.9318745086260569e-01 -1.2796513806221926e-01 + 2.7503810476900642e-01 9.6498886504575809e-01 -2.3094998253056478e-01 + 2.7567208476388155e-01 1.2129040636654069e+00 -3.4937433673349888e-01 + 2.5654505258878957e-01 1.4233200759010542e+00 -4.7032838596776916e-01 + 2.2588656240690030e-01 1.5797939543987547e+00 -5.7066772967543011e-01 + 2.0163427176416671e-01 1.6754590163721641e+00 -6.2301597099377026e-01 + 2.0873487958826942e-01 1.7276017111349122e+00 -6.1081260545853222e-01 + 2.6840526839406009e-01 1.7764757092699552e+00 -5.3853698005257278e-01 + 3.7494175559560838e-01 1.8658194260967593e+00 -4.3729053786662658e-01 + 4.8413353949107463e-01 2.0049480221340650e+00 -3.4961465356925953e-01 + 5.5005252640959468e-01 2.1593969880833219e+00 -2.9420623429303733e-01 + 5.5476271182474157e-01 2.2859634939920017e+00 -2.6110776842298855e-01 + 5.0022489140016591e-01 2.3575143244239007e+00 -2.3028966972429593e-01 + 3.8791181088361337e-01 2.3709169781632444e+00 -1.8502384410262629e-01 + 1.9477693234235227e-01 2.3658905865885131e+00 -1.2057351776134229e-01 + -1.4196638295385022e-01 2.3843393716977896e+00 -5.0761172941338945e-02 + -5.5772699238233103e-01 2.3137432323056046e+00 6.0350453731156384e-03 + -4.4240393454763993e-01 1.9876664397033088e+00 1.2529975950897765e-01 + id 13297 + loc 7.9938751459121704e-01 5.5967384576797485e-01 399 + blend 0.0000000000000000e+00 + interp 5.1588829545098158e-01:5.1588313656802709e-01:7.1077821904284799e-02:4.2105077820401304e-01:5.8377541463410365e-01:4.1077554910198705e-01:1.0032480777624802e+00:3.9919374377056871e-01:1.6698404814708951e+00:2.8034718338764586e-01:2.0062053633862647e+00:2.6741365981329551e-01:2.7552965900735562e+00:3.6543208334310351e-01:3.6125410699690619e+00 + CVs 20 + -2.1227947451404017e-01 3.1948362786640827e-01 -9.2408923552515593e-02 + -4.1708994561140650e-01 6.4412565396910926e-01 -2.2458358098870107e-01 + -6.2949409085191377e-01 9.5541256426293075e-01 -3.8002711488675778e-01 + -8.5381046711433517e-01 1.2390036009719094e+00 -5.5376904061945365e-01 + -1.0890486206663723e+00 1.4855702393753263e+00 -7.4393328641656120e-01 + -1.3294858863833643e+00 1.6869658358899455e+00 -9.4627275189922777e-01 + -1.5672400524194274e+00 1.8389704720482578e+00 -1.1561965719589256e+00 + -1.7942637391395386e+00 1.9415401299555226e+00 -1.3692345502646912e+00 + -2.0034985108267716e+00 1.9980133205542800e+00 -1.5819085788995764e+00 + -2.1900653839691446e+00 2.0140160119113006e+00 -1.7917919069008112e+00 + -2.3506019669931213e+00 1.9952399905089448e+00 -1.9934599831666646e+00 + -2.4817444221618747e+00 1.9472142783593078e+00 -2.1726139709672960e+00 + -2.5815865440397068e+00 1.8839549930181532e+00 -2.3051220568224142e+00 + -2.6463204365675379e+00 1.8380587397737633e+00 -2.3664849914338757e+00 + -2.6674355808879850e+00 1.8367752011757414e+00 -2.3694280411938551e+00 + -2.6468548655802651e+00 1.8483846988310535e+00 -2.3690721518901992e+00 + -2.6073987991647005e+00 1.8152966851513825e+00 -2.3987014134862892e+00 + -2.6093354697123976e+00 1.7086253447998812e+00 -2.4627454161041764e+00 + -2.7810702233385460e+00 1.5156680344488831e+00 -2.5533303112268149e+00 + id 13298 + loc 9.4672590494155884e-02 7.3130798339843750e-01 393 + blend 0.0000000000000000e+00 + interp 6.3157302751402367e-01:3.1985030249538154e-01:5.8771837329997645e-01:3.7850702705292888e-01:7.1152188029343222e-01:6.3156671178374857e-01:1.1864289663680117e+00:3.9250425151443025e-01:1.9983115870478625e+00:3.1509835661984381e-01:2.5307763455056231e+00:2.4913568817834711e-01:3.0298497246152909e+00:2.7088117240135123e-01:3.9974812200452572e+00 + CVs 20 + -3.2943523654857398e-01 2.6088567652808653e-01 -1.1819299266320931e-02 + -6.6210273102246897e-01 5.3188030107811024e-01 -3.7388808048475858e-02 + -9.8887648990474553e-01 8.2015923908532717e-01 -8.0030803534760026e-02 + -1.3045193071438386e+00 1.1199402897408193e+00 -1.3930055343972178e-01 + -1.6182843668092175e+00 1.4177178300321542e+00 -2.1362661557552309e-01 + -1.9481830257238963e+00 1.6983442593818407e+00 -2.9913394044546454e-01 + -2.3052932486690949e+00 1.9487927843015505e+00 -3.9110371775684577e-01 + -2.6961013474923252e+00 2.1526856084133632e+00 -4.8831792240994998e-01 + -3.1344094510223321e+00 2.2925892854678338e+00 -5.9938575397837690e-01 + -3.6268724962708294e+00 2.3614095025923327e+00 -7.4739886902652586e-01 + -4.1312198970486076e+00 2.3658642681322473e+00 -9.5549157273068075e-01 + -4.5788292361146548e+00 2.3130127725297096e+00 -1.2134504713011551e+00 + -4.9395508084348041e+00 2.2025858645751839e+00 -1.4896992582239297e+00 + -5.2187939425875385e+00 2.0380207806421797e+00 -1.7741874994186582e+00 + -5.4268304362783155e+00 1.8321649607945301e+00 -2.0643485412242879e+00 + -5.6013774782657482e+00 1.5851940881400255e+00 -2.3410590406309746e+00 + -5.8019717243319855e+00 1.2677128387715644e+00 -2.5797052540040553e+00 + -6.0437663215530666e+00 8.8606085122970102e-01 -2.7466575516877167e+00 + -6.2626020876142547e+00 5.1723811449531798e-01 -2.8649121987343595e+00 + id 13299 + loc 8.1472116708755493e-01 7.6171427965164185e-01 382 + blend 0.0000000000000000e+00 + interp 4.2533069828278808e-01:2.9935210803060408e-01:5.2261037643832209e-01:2.9952671198766118e-01:1.5015879082762473e+00:3.2525111859920369e-01:2.0019529168799290e+00:3.8975328493096506e-01:2.4170594457858807e+00:3.2637400503796182e-01:3.0005550720121610e+00:3.5302713152595222e-01:3.5711682075625530e+00:4.2532644497580530e-01:3.9978810776556339e+00 + CVs 20 + 1.0655875673722424e+00 2.0149607047544946e-01 -5.6368492466059672e-01 + 1.7876163153427236e+00 2.3562003898909872e-01 -9.9397726487081561e-01 + 2.4442281007389481e+00 2.0336362529853330e-01 -1.3863646147006785e+00 + 3.1494971337287310e+00 1.4676867446536973e-01 -1.7744777394209801e+00 + 3.8834130860070482e+00 6.6144916608654070e-02 -2.1439807266148039e+00 + 4.6156475203112759e+00 -4.3445790124025496e-02 -2.4895832209963928e+00 + 5.3116348010817127e+00 -1.9148674825187961e-01 -2.8129189364751892e+00 + 5.9425495948048255e+00 -3.8350087503287167e-01 -3.1193775205615455e+00 + 6.4948723087048252e+00 -6.1839868841915879e-01 -3.4205606248328633e+00 + 6.9700897590917688e+00 -8.9638742958889694e-01 -3.7303351663612303e+00 + 7.3759581021895508e+00 -1.2253160997663044e+00 -4.0557081810300852e+00 + 7.7211773908477737e+00 -1.6181020019179073e+00 -4.3989954845991566e+00 + 7.9966092439596412e+00 -2.0913505501462728e+00 -4.7471155363230375e+00 + 8.1628469997671260e+00 -2.6366893403127034e+00 -5.0695441546515783e+00 + 8.2051492453117501e+00 -3.2062404089902845e+00 -5.3361752716026825e+00 + 8.1712100705097122e+00 -3.7386360102660916e+00 -5.5245559223275063e+00 + 8.1296765647676033e+00 -4.2031190592639316e+00 -5.6197595131771632e+00 + 8.1234680069877800e+00 -4.6124662387407493e+00 -5.6423268273989979e+00 + 8.1571360545410823e+00 -5.1288155915080260e+00 -5.7408418650224666e+00 + id 13300 + loc 2.4834305047988892e-01 3.9968550205230713e-01 1069 + blend 0.0000000000000000e+00 + interp 3.3818398686452644e-01:2.9927116435828699e-01:2.1387385280032478e-02:3.0680590232233512e-01:9.4350045782036485e-01:3.3818060502465780e-01:1.9429456585865195e+00:2.3513929050807103e-01:2.7920801479363107e+00:3.0226716617906491e-01:3.2971977158550541e+00 + CVs 20 + -2.0553106699301460e-01 2.2852509003077515e-01 4.5274048408754125e-02 + -4.1281623472898299e-01 4.4928960339207896e-01 5.8736374362920174e-02 + -6.0943852307030255e-01 6.7141134831713545e-01 5.8234476263320900e-02 + -7.9224036782825125e-01 8.9725015115505569e-01 4.9457600098175070e-02 + -9.6424244233567902e-01 1.1143588652313490e+00 2.5440745287569122e-02 + -1.1234536813473146e+00 1.3095745845280715e+00 -8.6152412812986467e-03 + -1.2570613161885102e+00 1.4746002219057943e+00 -3.9075559929404591e-02 + -1.3436580162962590e+00 1.6113823700896286e+00 -5.9173935974120906e-02 + -1.3827672116453589e+00 1.7421391571111868e+00 -7.2728855082606847e-02 + -1.4404449997944500e+00 1.8757393611145516e+00 -6.4326022965485508e-02 + -1.5802624133274539e+00 1.9566270500548448e+00 -9.4663886447032830e-04 + -1.7967006073992977e+00 1.9332294205509934e+00 1.2230779126391911e-01 + -2.0641227601394396e+00 1.7992967326418037e+00 2.8514123109000222e-01 + -2.3662450699427113e+00 1.5742903987725327e+00 4.5764853412306439e-01 + -2.6977940483183538e+00 1.2856141310125293e+00 6.0910790602843246e-01 + -3.0619770863668574e+00 9.5218529107939598e-01 7.1536878144873373e-01 + -3.4676143379210469e+00 5.7422653275088564e-01 7.3958456359426517e-01 + -3.8691466693498899e+00 2.1625322826646953e-01 6.0578319477533160e-01 + -4.0021682768433600e+00 1.4243368057187911e-01 4.1083795284731434e-01 + id 13301 + loc 5.6152737140655518e-01 4.3492218852043152e-01 401 + blend 0.0000000000000000e+00 + interp 4.9107516305085785e-01:2.6173057956906809e-01:7.7442077322445613e-01:3.4146422255732523e-01:1.0804337923795544e+00:3.8094809399702190e-01:1.8365947282486010e+00:4.9107025229922735e-01:2.2267626637910789e+00:3.1934955223244083e-01:2.9529019933629126e+00:3.3745467600229984e-01:3.5443993741997115e+00 + CVs 20 + 1.7660367424619910e-01 2.7081131689206017e-01 2.3739835053443251e-01 + 3.0786595018200780e-01 5.4911637960443904e-01 4.7911277989369866e-01 + 4.2321530373687472e-01 8.2256893575794909e-01 7.2755392234760086e-01 + 5.3589447100297527e-01 1.0824041913655000e+00 9.8471204974929427e-01 + 6.4581766404977126e-01 1.3273914390075596e+00 1.2606695576544877e+00 + 7.6043570190199250e-01 1.5586088768603434e+00 1.5690720910392322e+00 + 9.0175498812462607e-01 1.7780268914205524e+00 1.9158061475338048e+00 + 1.0996126446753416e+00 1.9845198706191181e+00 2.2953161001818114e+00 + 1.3799478881454319e+00 2.1677781094873270e+00 2.6917030267404884e+00 + 1.7545602885192846e+00 2.3105037244734659e+00 3.0798023440684008e+00 + 2.2188746024380448e+00 2.3995021542427399e+00 3.4360309653398167e+00 + 2.7682813355371958e+00 2.4262987369089881e+00 3.7594232048622005e+00 + 3.3945942067002521e+00 2.3740747560471060e+00 4.0665156314523685e+00 + 4.0780449486114261e+00 2.2163430179665302e+00 4.3795379882921930e+00 + 4.7814994947208875e+00 1.9423336890281235e+00 4.6953041324829163e+00 + 5.4322126471625394e+00 1.6075218269668845e+00 5.0019709800607295e+00 + 5.9190247887608329e+00 1.3499242014398929e+00 5.3409013836120982e+00 + 6.2000471030755113e+00 1.2485285076771200e+00 5.7476857544261506e+00 + 6.6189005874084028e+00 9.7210321732473137e-01 6.2757431933289149e+00 + id 13302 + loc 6.8272233009338379e-01 2.9857796430587769e-01 380 + blend 0.0000000000000000e+00 + interp 4.2301279653441320e-01:2.9376736623532140e-01:4.3543809036985981e-01:4.2300856640644791e-01:1.1466914075559906e+00:2.5935160378702937e-01:1.7829160554863659e+00:3.4867349866583941e-01:2.1743340406687386e+00:2.7431776136321884e-01:3.0274988469449693e+00:3.1023424549539597e-01:3.9174910264385403e+00 + CVs 20 + 6.7811990485021234e-01 2.6632770157713337e-01 5.9526700514513964e-01 + 1.2600419067992501e+00 3.9185011912175960e-01 1.0314730609312306e+00 + 1.8049781134772269e+00 4.4939967220825294e-01 1.4513707838309771e+00 + 2.3307308600875905e+00 4.6391893817860175e-01 1.9069636017185883e+00 + 2.8117131436546092e+00 4.2854078507558446e-01 2.3874161508213518e+00 + 3.2240882700344340e+00 3.3742430993173467e-01 2.8730888776727399e+00 + 3.5524840227434509e+00 1.9407843284517368e-01 3.3439099839971975e+00 + 3.7925873199988342e+00 1.5910782506378007e-02 3.7825528694132218e+00 + 3.9574724265300913e+00 -1.7051486408700045e-01 4.1784179639796255e+00 + 4.0758485573565979e+00 -3.4265748412847108e-01 4.5337063200843319e+00 + 4.1793225663006091e+00 -4.9080542678190264e-01 4.8589512490673759e+00 + 4.2935576019357748e+00 -6.1724149125460848e-01 5.1656889829353068e+00 + 4.4349558745773336e+00 -7.4064429420779687e-01 5.4677393542113109e+00 + 4.6018696762554985e+00 -9.0343663561024323e-01 5.7708778687232556e+00 + 4.7686689263715021e+00 -1.1262752633960003e+00 6.0565507429673202e+00 + 4.9027981720608738e+00 -1.3745423699225174e+00 6.3177685926997214e+00 + 4.9695164184183538e+00 -1.6126707166947272e+00 6.5787565899594513e+00 + 4.9686938137647960e+00 -1.8371620541087830e+00 6.8690092782362235e+00 + 5.1306900309271812e+00 -1.9840259994080287e+00 7.1425944639163310e+00 + id 13303 + loc 7.8358165919780731e-03 1.3956414163112640e-01 400 + blend 0.0000000000000000e+00 + interp 5.2717289788342880e-01:3.6659686250786522e-01:2.7687399486309161e-04:2.6021968683954738e-01:6.3248757398472166e-01:3.4874500446972789e-01:1.5119921427761027e+00:3.4608154600075691e-01:2.0640159338453028e+00:5.2716762615445001e-01:2.8631670985581752e+00:4.2679257492160189e-01:3.2772309226254928e+00 + CVs 20 + 6.9122094455936756e-04 4.2014239261842373e-01 2.0949704205916017e-01 + -4.2802873962553334e-02 8.4965860024224260e-01 4.2819563639588937e-01 + -1.2234927575237492e-01 1.2703828434699809e+00 6.5539145311037106e-01 + -2.4140079240695134e-01 1.6700293650564830e+00 9.0810439903399309e-01 + -4.1080371512182101e-01 2.0340515067207212e+00 1.2093194680609001e+00 + -6.4348793513472824e-01 2.3352845131319833e+00 1.5747273471439556e+00 + -9.4335581672732582e-01 2.5340145512277417e+00 2.0030015047325485e+00 + -1.2966166411014333e+00 2.5907264797465643e+00 2.4710707099414191e+00 + -1.6705785156709765e+00 2.4882390482054690e+00 2.9374006180358352e+00 + -2.0281216756328351e+00 2.2475672856654141e+00 3.3598650409840487e+00 + -2.3552418451223707e+00 1.9159223420106888e+00 3.7109153670269106e+00 + -2.6700228619971567e+00 1.5441972758291636e+00 3.9745294830527800e+00 + -2.9948688538879940e+00 1.1603597011776117e+00 4.1466465597850206e+00 + -3.3212388490737892e+00 7.6171655077328060e-01 4.2378827313596634e+00 + -3.6351578385949725e+00 3.8307444416760994e-01 4.2725509137448086e+00 + -3.9896059535672839e+00 1.9540022422362235e-01 4.2856995716205546e+00 + -4.3980890850260757e+00 5.4103628806385196e-01 4.2807898590894284e+00 + -4.5294634597205325e+00 1.2942914085414352e+00 4.2144835281969870e+00 + -4.8642751431870810e+00 1.2964771763462144e+00 4.3053057168073900e+00 + id 13304 + loc 2.9242947697639465e-01 2.9616072773933411e-01 415 + blend 0.0000000000000000e+00 + interp 4.5641822263304282e-01:3.6765912228115116e-01:1.7087655432108062e-01:2.7126243506815717e-01:1.2758526529170717e+00:2.8930345896686877e-01:2.0291501774288974e+00:4.3625675496169458e-01:3.0012932771590677e+00:4.5641365845081650e-01:3.9083304900644813e+00 + CVs 20 + 5.9360887827009823e-02 7.1372459461187185e-02 -2.9642887343124558e-01 + 1.2247926411334703e-01 1.4039262506421812e-01 -5.4628991364026047e-01 + 2.0218812775866910e-01 1.8739255116184628e-01 -7.6068841149551436e-01 + 2.9927295081608213e-01 2.2437872096354222e-01 -9.5902284882877464e-01 + 4.1431365293066369e-01 2.4809352061103013e-01 -1.1321397374688604e+00 + 5.4585929631517760e-01 2.5376639590401234e-01 -1.2708026193122468e+00 + 6.8984733805780551e-01 2.3739873923751986e-01 -1.3667899167249620e+00 + 8.3906093477250898e-01 1.9792959541590938e-01 -1.4147991901185430e+00 + 9.8319537050142070e-01 1.3709556119558453e-01 -1.4134778237378576e+00 + 1.1089728729869592e+00 5.4969645145526713e-02 -1.3641419387069249e+00 + 1.2018265433509467e+00 -4.7525090183898833e-02 -1.2738866024004261e+00 + 1.2551679211508642e+00 -1.5922999824688489e-01 -1.1589303934962907e+00 + 1.2769168673177598e+00 -2.6210803374492653e-01 -1.0364876469727686e+00 + 1.2801813752081115e+00 -3.4476415651428971e-01 -9.1711435938481345e-01 + 1.2746560630532362e+00 -4.0613254253158415e-01 -8.0850067192056296e-01 + 1.2697638466665369e+00 -4.4875536974650432e-01 -7.1717834519260903e-01 + 1.2687277587959964e+00 -4.7479067509390732e-01 -6.3966502299875461e-01 + 1.2620336039270335e+00 -4.8413733285441968e-01 -5.6314412742769493e-01 + 1.3109494346731236e+00 -4.7449095802144997e-01 -5.2023406656065230e-01 + id 13305 + loc 8.2220208644866943e-01 6.0782086849212646e-01 1068 + blend 0.0000000000000000e+00 + interp 3.0413927885493286e-01:2.7400642264432690e-01:8.8895794092967440e-01:2.9109616449367376e-01:1.9560402356273396e+00:3.0413623746214430e-01:2.4295271140275156e+00:2.8415159884258012e-01:3.0288778105826673e+00:2.9661725910842390e-01:3.9867633123865569e+00 + CVs 20 + 1.1575322730121379e-01 4.3831816805283441e-01 -2.8295900451844913e-01 + 2.7484521173116983e-01 8.5323924912583338e-01 -5.2101382902381321e-01 + 4.6546871844593785e-01 1.2511697201851895e+00 -7.3187752836824616e-01 + 6.8310722972838311e-01 1.6306794561714746e+00 -9.4368048707389918e-01 + 9.2758277875996020e-01 1.9799008869713757e+00 -1.1984796211532376e+00 + 1.1891676579600869e+00 2.2719188724782797e+00 -1.5384887806085232e+00 + 1.4467721536067535e+00 2.4744904061733513e+00 -1.9776897179320927e+00 + 1.6760540900466832e+00 2.5647819599739412e+00 -2.4954345299283496e+00 + 1.8553738188009417e+00 2.5303460012098369e+00 -3.0489105965325050e+00 + 1.9705502255492180e+00 2.3774946180374852e+00 -3.5912021055468761e+00 + 2.0233586038019125e+00 2.1440435446900792e+00 -4.0891515378988723e+00 + 2.0319324726968118e+00 1.8870964920367153e+00 -4.5389036565407936e+00 + 2.0027770411440069e+00 1.6461417438273263e+00 -4.9518881135782067e+00 + 1.9091451048733878e+00 1.4384698413609747e+00 -5.3295656241975546e+00 + 1.7224634272634818e+00 1.2939149229559064e+00 -5.6588375159868898e+00 + 1.4475896685152581e+00 1.2646576865771491e+00 -5.8957789914106780e+00 + 1.1473338619495848e+00 1.3750282624654304e+00 -5.9645960348098512e+00 + 8.9447026731922330e-01 1.5548196050856811e+00 -5.9010488723880812e+00 + 5.4883214794766633e-01 1.7060258675908886e+00 -6.0063761866727337e+00 + id 13306 + loc 1.2138199806213379e-01 6.2287455797195435e-01 403 + blend 0.0000000000000000e+00 + interp 3.8463716591563413e-01:3.8195735332586417e-01:1.0267219543780293e-04:3.8463331954397501e-01:7.7918571449932461e-01:3.2857576850563153e-01:1.4110411903943720e+00:3.5810535234609497e-01:2.2049580515615697e+00:3.2590111508654246e-01:3.1778779246118658e+00 + CVs 20 + -7.4025032886924122e-02 1.3363081246426919e-01 -1.0245359188881194e-02 + -1.4311774650581893e-01 2.6638393109379233e-01 -3.6262403740677879e-02 + -2.0640612745004602e-01 3.9574060629614449e-01 -7.2168783881241427e-02 + -2.6537602306385866e-01 5.2411869456341997e-01 -1.1404921524238106e-01 + -3.2210849691025001e-01 6.5343813616955693e-01 -1.6294807577403869e-01 + -3.7916686494191504e-01 7.8584890473937796e-01 -2.1938776672329841e-01 + -4.4056959554467540e-01 9.2371852640683427e-01 -2.8251979310836539e-01 + -5.1125790570366370e-01 1.0689312230880492e+00 -3.4987228816764604e-01 + -5.9538558093037541e-01 1.2228461021922770e+00 -4.1729470314290751e-01 + -6.9672053224360875e-01 1.3868128989716255e+00 -4.7977654839663197e-01 + -8.2109214652315199e-01 1.5604374161530172e+00 -5.3287120855123438e-01 + -9.7665246275592466e-01 1.7388582167239330e+00 -5.7271842084158775e-01 + -1.1721542469318285e+00 1.9127255757952297e+00 -5.9674066690112026e-01 + -1.4129199807088049e+00 2.0689876220766865e+00 -6.0193503906346546e-01 + -1.6848885129952649e+00 2.1967819730918592e+00 -5.8446506012107691e-01 + -1.9698853788353115e+00 2.3022486583491895e+00 -5.4322703041516329e-01 + -2.2767987258696278e+00 2.3927044120643948e+00 -4.7330561018623923e-01 + -2.6096930845094568e+00 2.4603766479316853e+00 -3.7298144135081757e-01 + -2.8699894776930419e+00 2.5318194174285713e+00 -3.1631550885965692e-01 + id 13307 + loc 3.5643786191940308e-01 9.1118812561035156e-01 376 + blend 0.0000000000000000e+00 + interp 4.9702466405373863e-01:4.9701969380709810e-01:6.8661519794501191e-01:3.5187886781834898e-01:1.0179083042316712e+00:2.4994621038338280e-01:2.0094173552314589e+00:4.1258163712036067e-01:2.8362891390936875e+00:4.7092645659672805e-01:3.2036357952187418e+00:3.5019366528282614e-01:3.9999349901084882e+00 + CVs 20 + -1.1962932976570459e-01 4.0289785138213696e-01 5.8577445058571431e-01 + -1.3882697559804968e-01 6.7589805640003409e-01 1.0949292327296245e+00 + -5.8520649081151177e-02 8.0834039042566019e-01 1.6217655678044942e+00 + 9.6397113658782063e-02 8.5824102986369066e-01 2.1870564223555178e+00 + 2.7205142086087430e-01 9.1255875257363250e-01 2.7777591835403950e+00 + 3.9373094885726834e-01 1.0166386291851868e+00 3.3952417851098646e+00 + 3.8736130617425957e-01 1.1699169303501902e+00 4.0311331036889975e+00 + 2.1373126214054783e-01 1.3578832485828083e+00 4.6387554237715882e+00 + -1.1487579552112615e-01 1.5579827747989734e+00 5.1584650274011938e+00 + -5.5311493203600570e-01 1.7367095469018534e+00 5.5674397693413216e+00 + -1.0492606145080898e+00 1.8593122152482211e+00 5.8710113842024736e+00 + -1.5535315634956586e+00 1.9030507614285110e+00 6.0748188175545135e+00 + -2.0217942458039824e+00 1.8719781576872174e+00 6.1879698309924880e+00 + -2.4298350054250446e+00 1.7939148975351746e+00 6.2339641037332729e+00 + -2.8062119819750135e+00 1.6885811273596318e+00 6.2464121761306926e+00 + -3.2514275276962010e+00 1.4861358191961644e+00 6.2172651062208093e+00 + -3.7763636026003926e+00 1.0246954399288586e+00 6.1154279873162967e+00 + -4.1572323259228794e+00 3.4207469392089429e-01 6.0678350671278523e+00 + -4.2785674535821414e+00 -5.9075975905507505e-02 6.1603269703147632e+00 + id 13308 + loc 6.3323205709457397e-01 7.3265391588211060e-01 402 + blend 0.0000000000000000e+00 + interp 4.5703254993000464e-01:4.5702797960450536e-01:2.6922004818445666e-01:4.1249425595644096e-01:9.7831419121768171e-01:3.9624956694160413e-01:1.8857615403744987e+00:3.5283443424310756e-01:2.2653872761674161e+00:3.0333898803915682e-01:2.9936785358961653e+00:2.9328960122107112e-01:3.6959249950464956e+00 + CVs 20 + -1.4955876807554852e-01 -1.3235109674187118e-02 9.1146526872209810e-02 + -3.1197937237004147e-01 1.5878791750078766e-02 1.4648551635804030e-01 + -4.4390989622577426e-01 5.7520707622864403e-02 1.8641159353468806e-01 + -5.7046846991432598e-01 1.0519457567233589e-01 2.1744573320259039e-01 + -6.8773146239903160e-01 1.5950422735702083e-01 2.3788541339772953e-01 + -7.9821635003163882e-01 2.2242778218656625e-01 2.4518407243606749e-01 + -9.1371049030852403e-01 2.9979236976719059e-01 2.3533237941140728e-01 + -1.0426479411760652e+00 3.9703133936688029e-01 2.0481761573126225e-01 + -1.1859722710967024e+00 5.1543900322343816e-01 1.5016660468710105e-01 + -1.3436881455362044e+00 6.5339372858695943e-01 6.5011512714511832e-02 + -1.5212773160953534e+00 8.2434604077697526e-01 -6.3004436161990210e-02 + -1.6942780218956353e+00 1.0799237653566394e+00 -2.3599963785284761e-01 + -1.7567298632618391e+00 1.4356170260503234e+00 -3.9057920672770191e-01 + -1.6538576192126475e+00 1.7932881251564561e+00 -4.6454614138811035e-01 + -1.4375476079765579e+00 2.1034973489522111e+00 -5.1148901080144948e-01 + -1.1733439059623310e+00 2.3604664791303582e+00 -6.1281855989208955e-01 + -9.1267366344279544e-01 2.5598537000649602e+00 -7.9867656701339573e-01 + -6.8274614858911098e-01 2.7030583560409105e+00 -1.0591706521032160e+00 + -5.7182859814399822e-01 2.7657194967452465e+00 -1.2602051728338659e+00 + id 13309 + loc 3.3257323503494263e-01 6.0042464733123779e-01 396 + blend 0.0000000000000000e+00 + interp 4.8602919035172387e-01:3.1104297723591140e-01:7.0248744038988731e-03:3.9450498791787980e-01:8.8495526743983177e-01:3.1630041938283232e-01:1.7555082998889886e+00:3.6879134892356463e-01:2.1879413328350403e+00:3.3669010657555654e-01:2.9795192998533060e+00:4.8602433005982038e-01:3.6502944080730431e+00 + CVs 20 + 8.8160687186322118e-01 1.3424732455218374e-01 -3.4552347283172075e-01 + 1.5042766337182221e+00 1.0168933510795297e-01 -6.0389547985166547e-01 + 2.0628143598822954e+00 2.6541381869924940e-02 -8.1717991752793195e-01 + 2.6124140171240118e+00 -4.7364910545248162e-02 -9.9827903865221823e-01 + 3.1387679324346354e+00 -1.1462022236973501e-01 -1.1527814652273620e+00 + 3.6345999820491679e+00 -1.6709893998252556e-01 -1.2879228818382684e+00 + 4.1001609410931898e+00 -1.9651513876042626e-01 -1.4051387129361232e+00 + 4.5425659286828033e+00 -2.0010912932620495e-01 -1.5044377253807346e+00 + 4.9777661901473742e+00 -1.8416012547866156e-01 -1.5896506514616080e+00 + 5.4265370737567524e+00 -1.6633661385112641e-01 -1.6688741081168472e+00 + 5.9013774310843257e+00 -1.7426848320430022e-01 -1.7538255238023768e+00 + 6.3918910469120105e+00 -2.3407561029136770e-01 -1.8586635809020104e+00 + 6.8705825295421352e+00 -3.5739289961392595e-01 -1.9930523013181345e+00 + 7.3149513714920200e+00 -5.4438540952101899e-01 -2.1574081717061624e+00 + 7.7148878177877487e+00 -7.8852976621090365e-01 -2.3513210819063657e+00 + 8.0695238582488535e+00 -1.0750313742796016e+00 -2.5873690228087844e+00 + 8.3749082937046015e+00 -1.3900231755311152e+00 -2.8768490520365191e+00 + 8.6164216934466875e+00 -1.7162085226875194e+00 -3.2029640292038208e+00 + 8.6507189985632831e+00 -1.9010622442158636e+00 -3.4406392671057651e+00 + id 13310 + loc 3.7777507305145264e-01 3.6604333668947220e-02 1080 + blend 0.0000000000000000e+00 + interp 1.0826609673710044e+00:1.9878069904931853e-01:4.3698244241249118e-01:4.7463170991555503e-01:1.0230374506433504e+00:1.0826509673710043e+00:2.5499011224748616e+00:5.0669498437417071e-01:2.8874860272096168e+00:3.9474650879289430e-01:3.0747490152473351e+00:3.1532705241318004e-01:3.7302016676490251e+00 + CVs 20 + 6.2685837324315574e-01 5.4825874091510685e-01 -1.2682934654330885e-01 + 1.0251987395084117e+00 9.4218346675925391e-01 -2.9272798375728581e-01 + 1.3566484760806894e+00 1.2795930818765688e+00 -4.8654421966076611e-01 + 1.6725288712848523e+00 1.5916484916127551e+00 -7.0615392071589256e-01 + 1.9517440913242088e+00 1.8677385784920639e+00 -9.4734578195370311e-01 + 2.1725296832360339e+00 2.0969268836532047e+00 -1.2003274694994632e+00 + 2.3167310316093914e+00 2.2664024039309503e+00 -1.4495939251228374e+00 + 2.3789206763300901e+00 2.3609942218434954e+00 -1.6718346201471768e+00 + 2.3716017128694364e+00 2.3678381599451237e+00 -1.8287506138586134e+00 + 2.3386636964433625e+00 2.3062433983232093e+00 -1.8776562628364752e+00 + 2.3242766002801680e+00 2.2377946038975152e+00 -1.8545549020533205e+00 + 2.3074123039627144e+00 2.1670259469626352e+00 -1.8351777315112741e+00 + 2.2652907500433943e+00 2.0643518633751050e+00 -1.8278408417044663e+00 + 2.1997670397385245e+00 1.9222706679053188e+00 -1.8194393399633630e+00 + 2.1255792940975038e+00 1.7567789824155260e+00 -1.8030893877714627e+00 + 2.0569803665482720e+00 1.5990189454455273e+00 -1.7795355265786386e+00 + 1.9918584447098120e+00 1.4356059116606741e+00 -1.7563266060938048e+00 + 1.9606348482424707e+00 1.1981502145774372e+00 -1.7389903178000785e+00 + 2.0141204242486772e+00 8.7182144981821641e-01 -1.7273484664769154e+00 + id 13311 + loc 4.6909192204475403e-01 5.7843152433633804e-02 409 + blend 0.0000000000000000e+00 + interp 3.9291873455592202e-01:2.0789469024242005e-01:6.5476256554402334e-01:3.6096669143437132e-01:1.0825375617709212e+00:3.9291480536857648e-01:2.0264959811650733e+00:3.2842197010716329e-01:2.7852736318438351e+00:3.0268956310889972e-01:3.4170142057789059e+00 + CVs 20 + -1.9495064755562366e-01 1.7350839260126333e-01 -3.0687081994936849e-01 + -3.8772723944020104e-01 3.1524766469350296e-01 -6.0440689536217507e-01 + -5.7376270079526159e-01 4.3835356742126513e-01 -9.1482778022343880e-01 + -7.5330154892800949e-01 5.4689687082906491e-01 -1.2438421413573568e+00 + -9.2848107106832722e-01 6.4031072140444789e-01 -1.5882738621228929e+00 + -1.0985131587974259e+00 7.2224143912433436e-01 -1.9469941577899745e+00 + -1.2586520616082986e+00 7.9592626993473847e-01 -2.3192713305800150e+00 + -1.4029831606464018e+00 8.5696188900193926e-01 -2.7033994534225592e+00 + -1.5273392955714513e+00 8.9521237554119071e-01 -3.0964144880781226e+00 + -1.6299656357884789e+00 9.0230983161242384e-01 -3.4926361429804746e+00 + -1.7107188801303992e+00 8.7365774103744687e-01 -3.8827286642825882e+00 + -1.7707547988836327e+00 8.0699990194652749e-01 -4.2563568754577679e+00 + -1.8113737817365245e+00 7.0210269140850512e-01 -4.6069342171608820e+00 + -1.8273044697276739e+00 5.6265927476361055e-01 -4.9327842670172171e+00 + -1.8073694578690787e+00 3.9686265410871746e-01 -5.2314062431120343e+00 + -1.7451572092258143e+00 2.1750410778493645e-01 -5.4950708568174864e+00 + -1.6408949575753842e+00 4.1306765892073383e-02 -5.7173966255663569e+00 + -1.4977503502693734e+00 -1.1940257564176049e-01 -5.8964496521759369e+00 + -1.3209574752465549e+00 -2.5370124888425094e-01 -5.9700808567639729e+00 + id 13312 + loc 1.6085889935493469e-01 3.7129398435354233e-02 373 + blend 0.0000000000000000e+00 + interp 3.5189619459795923e-01:3.1363409810406412e-01:1.5495750927367546e-02:2.0514330028378211e-01:1.1416128314093186e+00:2.9640023144624944e-01:1.9539381765141548e+00:3.5013662416916347e-01:2.7274150627987788e+00:3.5189267563601329e-01:3.2395055206807299e+00 + CVs 20 + -1.5910534729789527e-01 6.2659687708590361e-01 4.4992489162180482e-01 + -3.6769360121379724e-01 1.2354614579662950e+00 8.4273852598037480e-01 + -5.8011421264169527e-01 1.7893983316485687e+00 1.3868749855625195e+00 + -9.0620878660129034e-01 2.3838634438842363e+00 1.7085448597574551e+00 + -1.3301201694475058e+00 2.9378857613795519e+00 1.7664906594095775e+00 + -1.8159252390605438e+00 3.3693039486971053e+00 1.6071097294198626e+00 + -2.3247509747290347e+00 3.5811476732005594e+00 1.2265153240458160e+00 + -2.7905429105588859e+00 3.5076549556459709e+00 6.8263347975225863e-01 + -3.1503836561845477e+00 3.1714201575452767e+00 8.1958941023871024e-02 + -3.3603256082281572e+00 2.6324517769088196e+00 -4.8291214753562439e-01 + -3.3951438870252266e+00 1.9715933623465727e+00 -9.4052056945628837e-01 + -3.2384779361996254e+00 1.2316217972300239e+00 -1.2460755247494131e+00 + -2.8758219241504981e+00 4.1560032047413820e-01 -1.4183358498750773e+00 + -2.2751221417822829e+00 -4.9570361284484282e-01 -1.5539902766745721e+00 + -1.3639881491092460e+00 -1.5898503289763202e+00 -1.8984645302843144e+00 + -4.6723710442997568e-01 -2.6392150987789105e+00 -3.0002507289008129e+00 + -2.5158316717866769e-01 -3.0629522354157972e+00 -4.6696729828602095e+00 + -9.2691647729105531e-01 -2.9570876424017625e+00 -6.1725309420414822e+00 + -1.8981028594062899e+00 -2.7086351761470491e+00 -6.8978555988471015e+00 + id 13313 + loc 6.4331817626953125e-01 3.1069543957710266e-01 375 + blend 0.0000000000000000e+00 + interp 4.0501931819222464e-01:3.9409026957178211e-01:8.3410582472961681e-01:3.2192853338006022e-01:1.2168843165662628e+00:3.0801456708953490e-01:2.1534850230739431e+00:4.0501526799904275e-01:3.0467297751792892e+00:3.8175986312937971e-01:3.8430079704543627e+00 + CVs 20 + 6.3785075908200362e-01 3.9866321449599507e-01 3.5495065346234506e-02 + 1.1729815447932435e+00 6.0629568797761069e-01 7.9036611292605252e-03 + 1.6915487086696988e+00 6.6156158743943350e-01 -8.0393577400256544e-02 + 2.2375680570899275e+00 6.5808398998790185e-01 -2.1719753618331056e-01 + 2.7894055086789167e+00 6.9130923924759013e-01 -3.7307230515326723e-01 + 3.3234267112151676e+00 8.0902939742280877e-01 -5.0774577102565266e-01 + 3.8329418498064012e+00 1.0135489124833952e+00 -5.8787429231782573e-01 + 4.3121392765297397e+00 1.2918824463084257e+00 -5.9552429604870694e-01 + 4.7579113011365832e+00 1.6321120186365994e+00 -5.2194371061091316e-01 + 5.1855421144344405e+00 2.0242388749093827e+00 -3.4574037177273109e-01 + 5.6195084097976800e+00 2.4374479615650402e+00 -3.3857652997741017e-02 + 6.0724148641207156e+00 2.8051882048870240e+00 4.4745134849308332e-01 + 6.5185361578636245e+00 3.0251560712102008e+00 1.1212463731982387e+00 + 6.8770385851365665e+00 2.9949540193138500e+00 1.9406206239612345e+00 + 7.0585358900021209e+00 2.6695691264187302e+00 2.8141146398573409e+00 + 7.0331838612975819e+00 2.0343517937882720e+00 3.6211938371956172e+00 + 6.9635002494794476e+00 1.1061614478395416e+00 4.1666390579741712e+00 + 7.0591879867468244e+00 1.5598240627873938e-01 4.2929083262915722e+00 + 7.1946484657461793e+00 -5.1092573315831968e-01 4.2270067268965033e+00 + id 13314 + loc 4.9491453170776367e-01 2.0061364769935608e-01 374 + blend 0.0000000000000000e+00 + interp 4.1636159578856496e-01:4.1635743217260712e-01:2.1598295662074996e-01:3.2439602463818451e-01:1.0000052376249209e+00:4.0094376769183238e-01:1.6861839211861285e+00:3.1448768027615193e-01:2.0247781481758995e+00:2.7134726572911982e-01:2.7377426172776262e+00:4.0677404050860411e-01:3.1361354439653475e+00:2.5627704484368119e-01:3.9659261517079272e+00 + CVs 20 + -4.0130683137777179e-01 5.5924606061929938e-01 7.3517370143207239e-01 + -5.9493001372980570e-01 9.4490985486765200e-01 1.3881189127909255e+00 + -6.4375042376931224e-01 1.1686464951705788e+00 2.0474441913342218e+00 + -6.4453084575734609e-01 1.3136697833223676e+00 2.7027419250270288e+00 + -6.8350418309252958e-01 1.4356726422485384e+00 3.3403343380892156e+00 + -8.2469263846804175e-01 1.5307358463153964e+00 3.9710812052514175e+00 + -1.1010376113977083e+00 1.5706608688316668e+00 4.5810127923842678e+00 + -1.5163304422263426e+00 1.5365479469511560e+00 5.1354414581640402e+00 + -2.0601411704415229e+00 1.4170261488404141e+00 5.6057241232859445e+00 + -2.7055323378153515e+00 1.2005564363560568e+00 5.9794413557055064e+00 + -3.4050989390742057e+00 8.7642288081235331e-01 6.2474385394057581e+00 + -4.0865494104324176e+00 4.3861143947820347e-01 6.3909083494746124e+00 + -4.6645359378825599e+00 -1.0432207832570306e-01 6.3940485578939779e+00 + -5.0693651680088241e+00 -7.2195329833309163e-01 6.2618863271903802e+00 + -5.2620941531768493e+00 -1.3596856401674273e+00 6.0244982763132793e+00 + -5.2321533989134767e+00 -2.0134131416029741e+00 5.8070182013424523e+00 + -4.9100404887777671e+00 -2.7187245102444000e+00 5.8429287886784946e+00 + -4.3066678614454279e+00 -3.2761880026273684e+00 6.2258857898206363e+00 + -4.1994744622357434e+00 -3.9026082247401908e+00 6.3618549972708802e+00 + id 13315 + loc 4.8208630084991455e-01 5.0883448123931885e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7307046894909827e-01:2.6732310246511842e-01:8.6306023512211838e-01:2.8387338027756004e-01:1.2825152539230580e+00:3.1257261625341365e-01:2.1725162778631395e+00:3.1587260221504260e-01:2.9279569756015116e+00:2.9736368760687021e-01:3.4682832089230820e+00:4.7306573824440878e-01:3.9976171705705279e+00 + CVs 20 + 3.2652688021699378e-02 2.6063600359427153e-01 -5.7582609081658312e-02 + 6.7850828975753841e-02 5.4044499585378802e-01 -1.4187232010633086e-01 + 1.1805119622208021e-01 8.3478419453796482e-01 -2.4286956613567653e-01 + 2.0926990219500169e-01 1.1281788497977696e+00 -3.5550593373926748e-01 + 3.4811305239432572e-01 1.3763669229092257e+00 -4.5473552468316591e-01 + 4.9275495443201311e-01 1.5516350315042806e+00 -5.1041440369736368e-01 + 6.0744661314322834e-01 1.6729797142410403e+00 -5.2133114629056032e-01 + 6.9272878001684079e-01 1.7862396684940600e+00 -4.9667998904768351e-01 + 7.4735880111950770e-01 1.9421106920507025e+00 -4.5297814973633443e-01 + 7.4231495035124762e-01 2.1636450815200226e+00 -4.3786490313943838e-01 + 6.4271365026021188e-01 2.3989555421301394e+00 -5.1416669963946204e-01 + 4.6345859929363231e-01 2.5497259359027176e+00 -6.7683014967144861e-01 + 2.4639000242466735e-01 2.5761145743187281e+00 -8.7077021496584917e-01 + 1.4663230403795247e-02 2.4676416622190134e+00 -1.0650816978989344e+00 + -1.9250304125691198e-01 2.2295059441757532e+00 -1.2245004836326041e+00 + -3.3363456643572875e-01 1.9382218516379239e+00 -1.3009018103248529e+00 + -4.2201016779967204e-01 1.6246868446995428e+00 -1.3021257855103805e+00 + -4.5845907948713061e-01 1.2313430607674078e+00 -1.2406658599642753e+00 + -4.8254625324655426e-01 9.1720827282834871e-01 -1.1634379969413482e+00 + id 13316 + loc 1.7345614731311798e-01 1.8379511311650276e-02 395 + blend 0.0000000000000000e+00 + interp 4.6361648310096470e-01:4.0544296772603583e-01:4.8041895472169560e-01:3.2203044998427027e-01:9.8122897316152369e-01:2.2240203926093743e-01:1.5266229281814183e+00:3.0892552616820257e-01:2.0969002928371907e+00:3.0750075018742334e-01:3.1770811983337435e+00:4.6361184693613372e-01:3.9110691849956796e+00 + CVs 20 + -2.7123593907075438e-01 1.1753556895788042e-01 -1.1765641352604926e-01 + -5.1507910846467830e-01 2.4254046131920212e-01 -2.4978021941574019e-01 + -7.4779381651989585e-01 3.7456112706479883e-01 -3.8911663729856893e-01 + -9.7965070525878484e-01 5.1529008309067303e-01 -5.3532078556336615e-01 + -1.2093467283528496e+00 6.6334975303611277e-01 -6.9153712467228889e-01 + -1.4371286363056717e+00 8.1601168065988405e-01 -8.5971967336722144e-01 + -1.6679861684208281e+00 9.7268666163752471e-01 -1.0419662783437764e+00 + -1.9090125414537744e+00 1.1315084474097892e+00 -1.2438152030123402e+00 + -2.1612033507842900e+00 1.2818973984424988e+00 -1.4726717210545159e+00 + -2.4212986079410701e+00 1.4043887857503401e+00 -1.7283217444176635e+00 + -2.6939222493287462e+00 1.4762194466348011e+00 -2.0007061761728484e+00 + -2.9894749472031767e+00 1.4771135208958830e+00 -2.2783518277484553e+00 + -3.3078534749196642e+00 1.3981702562179594e+00 -2.5515600016148556e+00 + -3.6373969617452149e+00 1.2439093380364301e+00 -2.8110317751295844e+00 + -3.9678566224349963e+00 1.0222158898021596e+00 -3.0487669522969876e+00 + -4.2934963370322006e+00 7.3318604790597908e-01 -3.2607674775686508e+00 + -4.6006675327805437e+00 3.7715393020022558e-01 -3.4427135031687368e+00 + -4.8693975978788435e+00 -2.0913363609627478e-02 -3.5909176271912955e+00 + -5.0917170612120772e+00 -3.6140185048977091e-01 -3.7113168527280038e+00 + id 13317 + loc 8.0755722522735596e-01 4.6469748020172119e-01 377 + blend 0.0000000000000000e+00 + interp 3.7848414449229950e-01:3.7848035965085458e-01:4.3308331871843841e-01:2.5535789793751273e-01:1.1125391860273199e+00:2.2465877577419469e-01:2.3911110767096195e+00:2.4912706538466148e-01:3.6263800463115814e+00 + CVs 20 + 7.2181469593533609e-01 1.9015081455892413e-01 6.9009529002716752e-01 + 1.2406771269797547e+00 2.4043372971465560e-01 1.1117037030659738e+00 + 1.7033037905668693e+00 2.4397975993847110e-01 1.4452932938534560e+00 + 2.1661386991135108e+00 2.4126462696380124e-01 1.7635572338564407e+00 + 2.6282417490757761e+00 2.3685180805896222e-01 2.0755805933015874e+00 + 3.0922427630921456e+00 2.4487833057765507e-01 2.4005073391759164e+00 + 3.5728806436579674e+00 2.7183393405389877e-01 2.7604508808108417e+00 + 4.0829168052998099e+00 3.0412919446427655e-01 3.1764996196742330e+00 + 4.6054655356588503e+00 3.1229825408250589e-01 3.6613205196589012e+00 + 5.1263443637077319e+00 2.5336169335037861e-01 4.2292943721364713e+00 + 5.6534975218502854e+00 6.2618030919205925e-02 4.8829631528528701e+00 + 6.1830312789279116e+00 -3.3296796395563044e-01 5.5804710463420371e+00 + 6.6728844777206344e+00 -9.8279176941025215e-01 6.2317373497219659e+00 + 7.0575887050714030e+00 -1.8417682427996604e+00 6.7345203595747121e+00 + 7.3237269462422354e+00 -2.7721330706126084e+00 7.0663613249180601e+00 + 7.5284332002901522e+00 -3.6600280562828966e+00 7.2862972847372873e+00 + 7.7533366804984407e+00 -4.4682686449249056e+00 7.4406957706840844e+00 + 8.0474854981982631e+00 -5.2003526286204043e+00 7.5341452764851873e+00 + 8.3242688555796995e+00 -5.8798539192624357e+00 7.5939116069480281e+00 + id 13318 + loc 2.5043240189552307e-01 2.4175388738512993e-02 407 + blend 0.0000000000000000e+00 + interp 4.5729412362488264e-01:2.5822809780679967e-01:1.3619264368716189e-02:4.5728955068364641e-01:9.5120721843246248e-01:4.4570048315873056e-01:1.2738855849983572e+00:3.1123869446257074e-01:1.9360230284697013e+00:4.0794319648623190e-01:2.1565980102315896e+00:2.9786494231506083e-01:3.0055539035074608e+00:3.8670873083271007e-01:3.6599337241341781e+00 + CVs 20 + 1.0584055359387254e-01 3.5624905234416337e-01 -4.1130119408085841e-01 + 2.1639821091757150e-01 6.1762152548326954e-01 -6.1000173722318296e-01 + 3.4025155951701952e-01 7.7745387394983678e-01 -7.4837377880900668e-01 + 4.8573248697785215e-01 8.9533409661448782e-01 -8.7276399186483689e-01 + 6.5209608227912352e-01 9.6163895926263532e-01 -9.7321251902915062e-01 + 8.3071342682909466e-01 9.6995868707703026e-01 -1.0421996889743885e+00 + 1.0076649154450876e+00 9.2707302326243046e-01 -1.0792969503416869e+00 + 1.1750493863238411e+00 8.5409843738040503e-01 -1.0941185224670895e+00 + 1.3387005532802332e+00 7.7407583441560712e-01 -1.1005273053364837e+00 + 1.5112669585695229e+00 7.0030529309964207e-01 -1.1090891671713754e+00 + 1.7016155939692197e+00 6.3531255816377030e-01 -1.1243028729657976e+00 + 1.9115643936695494e+00 5.7561472927003887e-01 -1.1448591401260304e+00 + 2.1401833167053468e+00 5.1866094351103909e-01 -1.1690666617397354e+00 + 2.3910646348752578e+00 4.7129038362250020e-01 -1.2017818722825819e+00 + 2.6684931577474171e+00 4.4915655209799199e-01 -1.2504884048550586e+00 + 2.9663521215480957e+00 4.6515610728682688e-01 -1.3138738652302488e+00 + 3.2711951901077589e+00 5.1987573457393221e-01 -1.3816849904855277e+00 + 3.5736367948656729e+00 6.0624658348288218e-01 -1.4417945893923685e+00 + 3.8655417392107019e+00 6.7586790579063749e-01 -1.4290267976229094e+00 + id 13319 + loc 8.3709377050399780e-01 8.7506532669067383e-01 399 + blend 0.0000000000000000e+00 + interp 4.5856179114219281e-01:3.3949359008095087e-01:1.9300693321732065e-01:4.2350457710949735e-01:8.6152361719250459e-01:3.4751950725920983e-01:1.1034884915171654e+00:3.8033079470040404e-01:1.8146855967339373e+00:4.5855720552428142e-01:2.2000555933281571e+00:3.5380708800662991e-01:2.9676425692054318e+00:3.8594725661232776e-01:3.9150025140925271e+00 + CVs 20 + -1.7025884225370411e-01 3.3441990321173964e-01 -2.4553517440470901e-01 + -3.2386872242802134e-01 6.3140638864301113e-01 -4.8241874960940423e-01 + -4.6395000699868527e-01 8.8753412733853332e-01 -7.2700737825242379e-01 + -5.9044209677116222e-01 1.1022739247428475e+00 -9.8137873335219750e-01 + -7.0172167660880247e-01 1.2791596232983684e+00 -1.2421691054627690e+00 + -7.9902006210595244e-01 1.4258414862680542e+00 -1.5105947172973606e+00 + -8.8844674696164494e-01 1.5442438168935917e+00 -1.7978785439676379e+00 + -9.7996109146717980e-01 1.6244164575694182e+00 -2.1172371820687208e+00 + -1.0857846663997994e+00 1.6667572965538193e+00 -2.4674786799924466e+00 + -1.2190341731455403e+00 1.6871125739999289e+00 -2.8413135224584707e+00 + -1.3799531529845581e+00 1.6594872646622396e+00 -3.2417096644649499e+00 + -1.5428453880465240e+00 1.5067370199290742e+00 -3.6653946117102696e+00 + -1.7039280145221236e+00 1.2074939489241290e+00 -4.0902871369481559e+00 + -1.9109085602575915e+00 8.3414121693476073e-01 -4.4929394302676045e+00 + -2.1947875094726648e+00 4.4356145931426127e-01 -4.8472831233635469e+00 + -2.5268623457655441e+00 -2.6743885675605261e-03 -5.1173272355073012e+00 + -2.9019967613264797e+00 -5.6034987754697863e-01 -5.2908927241116235e+00 + -3.4163160365765322e+00 -1.0783635038444250e+00 -5.4078086133718681e+00 + -3.8961506012777880e+00 -1.1419651869919853e+00 -5.4575807223269051e+00 + id 13320 + loc 1.8031007051467896e-01 1.8014778196811676e-01 382 + blend 0.0000000000000000e+00 + interp 4.5896638396251838e-01:2.8503378172786387e-01:2.9234264601184090e-01:2.7103221594422766e-01:1.2959029728385663e+00:4.5866118887930252e-01:1.9485902668943194e+00:3.8293184840235273e-01:2.3953486801690582e+00:4.5896179429867878e-01:2.9586337699466081e+00:3.0325236252614463e-01:3.3246567558861555e+00 + CVs 20 + -5.3152438830798443e-01 1.5971756211617685e-01 -5.7744004714476116e-01 + -9.1099599454755675e-01 2.1442207468679919e-01 -9.4631753447653155e-01 + -1.2437746751805407e+00 2.2661502374881992e-01 -1.2572434872462201e+00 + -1.5676769618917215e+00 2.3074731482162980e-01 -1.5781160506435254e+00 + -1.8801176151022849e+00 2.2535060116049188e-01 -1.9114492069757911e+00 + -2.1818505515993216e+00 2.0650174783804287e-01 -2.2594380585518721e+00 + -2.4792863102284386e+00 1.7102438097766293e-01 -2.6214645104375687e+00 + -2.7813429003886361e+00 1.1650945405750135e-01 -2.9924987792888635e+00 + -3.0905867103688456e+00 3.6941918190275036e-02 -3.3671937959172751e+00 + -3.4004010819446604e+00 -7.9207514160495762e-02 -3.7423923981678948e+00 + -3.7038474484420374e+00 -2.4492949763160587e-01 -4.1092383880251688e+00 + -3.9986379522371038e+00 -4.6723132220937824e-01 -4.4487395041224183e+00 + -4.2801525067518220e+00 -7.4265365345466861e-01 -4.7404233287875588e+00 + -4.5365750453692115e+00 -1.0570153529001061e+00 -4.9790429187586742e+00 + -4.7573790054252454e+00 -1.3920447666347626e+00 -5.1708135661243180e+00 + -4.9417057709343428e+00 -1.7264223793386626e+00 -5.3235754565592313e+00 + -5.0965077473328115e+00 -2.0411765419703833e+00 -5.4436343407634666e+00 + -5.2247363375000644e+00 -2.3337945946325585e+00 -5.5312747573988830e+00 + -5.2495852170714601e+00 -2.6980591112699415e+00 -5.5037146679173610e+00 + id 13321 + loc 7.2223222255706787e-01 8.1625849008560181e-01 393 + blend 0.0000000000000000e+00 + interp 3.5719380146441182e-01:2.8543138075822849e-01:2.6277991922842714e-01:2.9025623805671086e-01:9.9755339013681232e-01:2.5503689355489778e-01:1.7672507009391767e+00:3.5719022952639717e-01:2.0852130629931569e+00:2.9805423570367467e-01:2.9949378746626780e+00:3.1052092591382835e-01:3.6857081335046500e+00 + CVs 20 + -2.1777265681872124e-01 3.3741183809280789e-01 -3.4852887126956555e-01 + -4.3912098020798385e-01 6.8668872005673376e-01 -6.5265629539494741e-01 + -6.7136717495730824e-01 1.0522372836865279e+00 -9.4901592767645460e-01 + -9.3683153575593525e-01 1.4263812802513787e+00 -1.2508493306462174e+00 + -1.2573558559848772e+00 1.7851327515276494e+00 -1.5543278127919016e+00 + -1.6432052153548404e+00 2.0965134749052003e+00 -1.8509053525001624e+00 + -2.0886065928973516e+00 2.3235097625349539e+00 -2.1268673822844875e+00 + -2.5707439994159240e+00 2.4238843513591410e+00 -2.3626162918408458e+00 + -3.0483080955902895e+00 2.3831031720565092e+00 -2.5483316383707932e+00 + -3.4971715234955227e+00 2.2317611095051082e+00 -2.6996793117693869e+00 + -3.9116433622643600e+00 2.0010070204351269e+00 -2.8276375017217359e+00 + -4.2672091312145453e+00 1.7135150013728748e+00 -2.9110287738823173e+00 + -4.5432827124178328e+00 1.4085578276050748e+00 -2.9342994156930273e+00 + -4.7639912570970724e+00 1.1227970408182504e+00 -2.9258657795000880e+00 + -4.9656233614871006e+00 8.7323879274437388e-01 -2.9192159516276890e+00 + -5.1502695693678078e+00 6.9080889453692018e-01 -2.9203082440085910e+00 + -5.3040517631790332e+00 6.0385706408433926e-01 -2.9428492849150767e+00 + -5.4709800101553139e+00 5.5769356277778881e-01 -3.0136317316512264e+00 + -5.8212917326072215e+00 3.8230852892462441e-01 -3.0750938070206475e+00 + id 13322 + loc 8.9846616983413696e-01 4.5165437459945679e-01 400 + blend 0.0000000000000000e+00 + interp 4.2615599085010231e-01:4.2615172929019385e-01:5.4259333887370031e-02:3.3118672845349095e-01:6.8367814347813460e-01:2.6668708567159427e-01:1.7436202123047697e+00:3.1093100299339860e-01:2.5887757534014368e+00:2.7959360548482931e-01:3.6711732181956434e+00 + CVs 20 + 1.0094354090542851e-01 1.2873146364623511e-01 2.7716589128559044e-01 + 1.9198378795312585e-01 2.4792983448811515e-01 5.3693359602931623e-01 + 2.7868834662929209e-01 3.6125828464776305e-01 7.9369558592866540e-01 + 3.6667126823540391e-01 4.6943178324412238e-01 1.0538023316858636e+00 + 4.6041088821120474e-01 5.6725025459076672e-01 1.3141351797265890e+00 + 5.6232418813840124e-01 6.5216161215902668e-01 1.5697289356216881e+00 + 6.7064809343868492e-01 7.2940942366240180e-01 1.8159374962447896e+00 + 7.8320724069582748e-01 8.0599323832497183e-01 2.0501945812681961e+00 + 9.0111845026383075e-01 8.8146559773358557e-01 2.2760636880367291e+00 + 1.0267560423466260e+00 9.4968381124772094e-01 2.5007539912120409e+00 + 1.1618719229459065e+00 1.0069399881022068e+00 2.7295197960417052e+00 + 1.3072578776701591e+00 1.0535094799180609e+00 2.9654733897580172e+00 + 1.4661542637373035e+00 1.0878787028858441e+00 3.2114513879202002e+00 + 1.6445360965866900e+00 1.1025709537561017e+00 3.4747227525638182e+00 + 1.8415267161925584e+00 1.0866951106424907e+00 3.7670170698556493e+00 + 2.0401994976941151e+00 1.0314016097992518e+00 4.0979701286495702e+00 + 2.2120769642412723e+00 9.2831839064772659e-01 4.4636707314029547e+00 + 2.3330639873900001e+00 7.5856024979428449e-01 4.8298231304805990e+00 + 2.3662093858937210e+00 4.5460537971501447e-01 4.9864467030506452e+00 + id 13323 + loc 8.1821948289871216e-01 5.7154174894094467e-02 1078 + blend 0.0000000000000000e+00 + interp 4.9520710808115387e-01:2.8906978578851311e-01:5.8263716918696917e-02:3.8624732152982905e-01:9.9884769714847199e-01:4.4779440187616432e-01:1.4326196657576231e+00:4.9520215601007306e-01:1.9999041559561646e+00:3.8770582044089635e-01:2.4457435551489990e+00:3.0359370096698657e-01:3.0978559822042984e+00 + CVs 20 + -1.4745237709024861e-01 1.6346727650832102e-01 1.2554391743250368e-01 + -2.8128986982146387e-01 3.4386549087295409e-01 2.4086310265832270e-01 + -4.0599336861854513e-01 5.3164723902605049e-01 3.5170381590600536e-01 + -5.2916119793241989e-01 7.2433319991987954e-01 4.6554146242476702e-01 + -6.5471934062597403e-01 9.2163838863789915e-01 5.8372565565125978e-01 + -7.8774392318957487e-01 1.1211088812012919e+00 7.0847511923774520e-01 + -9.3743737617411316e-01 1.3163876800054655e+00 8.4923239836819764e-01 + -1.1137291866290813e+00 1.4953150125950954e+00 1.0195778578636243e+00 + -1.3203716890078172e+00 1.6417944314122124e+00 1.2278620622353174e+00 + -1.5544818696800151e+00 1.7390001530571744e+00 1.4754392521916875e+00 + -1.8092126073590029e+00 1.7711686611055428e+00 1.7586375107198724e+00 + -2.0750418072563881e+00 1.7255338874561124e+00 2.0691032053318774e+00 + -2.3412916471815608e+00 1.5940383042535866e+00 2.3940800347344298e+00 + -2.5980734308393876e+00 1.3749780991729601e+00 2.7163521188852831e+00 + -2.8381614822512384e+00 1.0734465480507671e+00 3.0115086015118542e+00 + -3.0557962689314211e+00 6.9599565428261645e-01 3.2294756763040229e+00 + -3.2313729698543083e+00 2.6699487123918053e-01 3.2442281853601687e+00 + -3.3184403488988710e+00 -6.5979232315553915e-02 2.9186243004666150e+00 + -3.4408830683433695e+00 -4.4596110249406662e-01 2.7967275027659717e+00 + id 13324 + loc 9.5988774299621582e-01 8.3599781990051270e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2326479755893009e-01:4.2326056491095454e-01:2.7708098625362276e-02:2.6954623116596454e-01:7.0862498912778227e-01:3.0382647666310569e-01:1.1187844220834140e+00:3.1913773372783394e-01:1.8396734955444021e+00:2.1021367289659060e-01:2.5577631764318545e+00:3.5490468297061684e-01:3.7562875252714480e+00 + CVs 20 + 3.6092963089504299e-02 4.3669480121579607e-01 -2.1329543471719895e-01 + 6.9290187637478573e-02 8.3903133292297150e-01 -3.6363338538570733e-01 + 1.1494532943586017e-01 1.2357067735047376e+00 -4.8430908277728502e-01 + 1.9206035359261872e-01 1.6550516557466557e+00 -6.0291332980408885e-01 + 3.3336276684794303e-01 2.1160019863084916e+00 -7.4692211755291604e-01 + 5.7377151981937868e-01 2.5932541928748090e+00 -9.6444682470283394e-01 + 9.1882562293090908e-01 3.0027104638185498e+00 -1.2955578507225687e+00 + 1.3380951989574486e+00 3.2603574117662060e+00 -1.7323031005570799e+00 + 1.7925099502779365e+00 3.3308539184133448e+00 -2.2302115189720744e+00 + 2.2492369586832619e+00 3.2205596376067116e+00 -2.7409143390241164e+00 + 2.6813074429400081e+00 2.9636210749163241e+00 -3.2325896879849170e+00 + 3.0754342661241285e+00 2.6102939266692209e+00 -3.6972697187456793e+00 + 3.4380518800090547e+00 2.2147788974228626e+00 -4.1541534185027373e+00 + 3.7754444970683165e+00 1.8172267239492299e+00 -4.6315737572343467e+00 + 4.0732617260751907e+00 1.4269285008488988e+00 -5.1599367104963907e+00 + 4.2938696788610882e+00 1.0595850090159968e+00 -5.7537948961291985e+00 + 4.4001166907093516e+00 7.6146668222701663e-01 -6.3918363163758984e+00 + 4.3916140679569677e+00 5.7714505926817372e-01 -7.0101653764203329e+00 + 4.3184876104938761e+00 5.3553832996493522e-01 -7.4817884800639440e+00 + id 13325 + loc 6.7310202121734619e-01 9.2615705728530884e-01 380 + blend 0.0000000000000000e+00 + interp 5.3304078416728295e-01:4.1630766207785080e-01:5.5417670032013411e-01:3.2197889905628002e-01:1.1172178238017447e+00:5.3303545375944128e-01:1.9999996079261586e+00:3.1204747805266619e-01:2.8540287247840288e+00:3.1429927537467278e-01:3.2390682394007042e+00:4.6776575529710673e-01:3.9299225378119926e+00 + CVs 20 + -2.8524638524336965e-01 2.0479237775032136e-01 -6.6713031822374780e-01 + -5.4314964379468778e-01 3.3837029651151151e-01 -1.1685934254393875e+00 + -7.8015552925027443e-01 4.5241463238707058e-01 -1.6184549724811861e+00 + -1.0058820276227680e+00 5.7553482658291488e-01 -2.0715326889819075e+00 + -1.2186873345841696e+00 7.0898364961081095e-01 -2.5277895608164465e+00 + -1.4195414987439210e+00 8.4632446322172306e-01 -2.9913367563316635e+00 + -1.6145219084119673e+00 9.7889679115506034e-01 -3.4682638480798720e+00 + -1.8103862115517111e+00 1.0935100599293108e+00 -3.9670609155427607e+00 + -2.0106897504148602e+00 1.1689287158755348e+00 -4.4966051915102216e+00 + -2.2157319783429248e+00 1.1780909037754650e+00 -5.0569779122846716e+00 + -2.4242354576209757e+00 1.0941024694431349e+00 -5.6326972887614799e+00 + -2.6333689986636304e+00 8.8939854161372978e-01 -6.2023975071367250e+00 + -2.8285613911954375e+00 5.4242041190254220e-01 -6.7301103137026823e+00 + -2.9831084951806441e+00 7.0935963774632516e-02 -7.1565456338877169e+00 + -3.0821200270021296e+00 -4.5468651901432722e-01 -7.4428289105396264e+00 + -3.1405560951585612e+00 -9.8063127366011571e-01 -7.6164992073013238e+00 + -3.1976005097544573e+00 -1.4983808473633093e+00 -7.7293371208630335e+00 + -3.3029286508322131e+00 -2.0014048450832091e+00 -7.8173739112025684e+00 + -3.4741511268030028e+00 -2.5049117872034996e+00 -7.8916896688351628e+00 + id 13326 + loc 9.8713177442550659e-01 7.1583026647567749e-01 401 + blend 0.0000000000000000e+00 + interp 4.2378974909230860e-01:3.6937027888095841e-01:1.6478373148137826e-02:2.8650997252995414e-01:6.4462536379646151e-01:2.8950345042959919e-01:1.6318818177390442e+00:4.2378551119481772e-01:2.2907017477914389e+00:2.8234307407365655e-01:2.9019196766396771e+00:3.6446558693458819e-01:3.2639083269221145e+00:3.4672928504910372e-01:3.9749097414045087e+00 + CVs 20 + -3.1756288672309216e-02 3.3376590173511422e-01 -3.6868892379862839e-01 + -1.9398931305715184e-02 6.6545643043461955e-01 -7.2603093760368509e-01 + 3.1893287351134780e-02 9.7945966130031070e-01 -1.1132059589365342e+00 + 1.1019478029292007e-01 1.2584372026396322e+00 -1.5483660486900657e+00 + 1.8992533965275304e-01 1.4901414469252667e+00 -2.0402819296650732e+00 + 2.2657145804455137e-01 1.6724371257845703e+00 -2.5966258589061733e+00 + 1.6925878078350720e-01 1.7975314386005437e+00 -3.2056187374195098e+00 + -1.6997260838536699e-02 1.8482312134699803e+00 -3.8285064370536581e+00 + -3.3607136486908862e-01 1.8123200416519496e+00 -4.4119702323518899e+00 + -7.5636694816652106e-01 1.6937084273660721e+00 -4.9051286061871213e+00 + -1.2232196577449521e+00 1.5101704471200850e+00 -5.2793342367161964e+00 + -1.6788529295726085e+00 1.2851879081820756e+00 -5.5368175727483964e+00 + -2.0951882027120088e+00 1.0367529911662345e+00 -5.7050274532388308e+00 + -2.4768212522411313e+00 7.6968136913397012e-01 -5.8156196549016306e+00 + -2.8142132988188822e+00 4.9563771712202453e-01 -5.8885161899727958e+00 + -3.0747096675417906e+00 2.4554024310948874e-01 -5.9275446609745917e+00 + -3.2580398876228904e+00 2.6569363097080745e-02 -5.9182552985788348e+00 + -3.4312128726358448e+00 -2.1040458358528608e-01 -5.8919741865871798e+00 + -3.6301473422048360e+00 -5.0130260554006667e-01 -6.0001940989718312e+00 + id 13327 + loc 3.5132713615894318e-02 9.5345425605773926e-01 376 + blend 0.0000000000000000e+00 + interp 4.5867843920443291e-01:3.4452274067827482e-01:1.0975926846290562e-06:2.0196989652589742e-01:7.2401537277479999e-01:4.5867385242004088e-01:1.4902522225132331e+00:4.4429803573471149e-01:2.0881354368410281e+00:2.5637772549716370e-01:2.7826966972472658e+00:4.1095020594630571e-01:3.0158957246165916e+00 + CVs 20 + -1.0866448880688914e-01 4.6443771122691702e-01 6.9507000844365907e-01 + -1.4655142545328470e-01 7.6025288641176125e-01 1.2622342339683106e+00 + -1.1966014145742604e-01 9.1249083307628887e-01 1.8258497195999490e+00 + -5.6602065317983452e-02 9.8604281961155038e-01 2.4041266978087203e+00 + 3.6666575329233897e-03 1.0577010056080656e+00 2.9615251118139940e+00 + 2.2633919905312272e-02 1.1683171309360665e+00 3.4777312950135264e+00 + -3.0161407322307210e-02 1.3165823143531459e+00 3.9421757869598220e+00 + -1.5749257142797712e-01 1.4832310064862400e+00 4.3429120417542295e+00 + -3.4683963741050750e-01 1.6590710903555279e+00 4.6851263977772843e+00 + -6.0571876476299513e-01 1.8472666061394070e+00 5.0030520209102072e+00 + -9.4781354478257029e-01 2.0372875512745914e+00 5.3246502418358794e+00 + -1.3653071163800437e+00 2.1947180612006369e+00 5.6527891970091320e+00 + -1.8371737311516665e+00 2.2721630952091516e+00 5.9666818142373508e+00 + -2.3245125940990556e+00 2.2351330730171206e+00 6.2293473410510529e+00 + -2.8199044303432972e+00 2.0767313701725865e+00 6.4086990125465846e+00 + -3.4035640589687173e+00 1.7164558264985927e+00 6.4304781882218753e+00 + -4.0289546164884058e+00 9.8478902581343331e-01 6.2538568244751636e+00 + -4.3732069406360878e+00 2.2413639813391395e-02 6.0902426056926675e+00 + -4.3367313039197137e+00 -4.1842134943550979e-01 6.0569631987175594e+00 + id 13328 + loc 6.4113003015518188e-01 6.7519140243530273e-01 415 + blend 0.0000000000000000e+00 + interp 4.8452606824666877e-01:4.8452122298598632e-01:2.8093872779448537e-01:4.0015528774610620e-01:9.0001962121682244e-01:4.8388254616533477e-01:1.0828639988646862e+00:4.7116662835163742e-01:1.4878094394560757e+00:4.4066422423387747e-01:2.0043651389720916e+00:4.4626886903186080e-01:2.9540896219088610e+00:3.2828865001212515e-01:3.6496201008886562e+00:4.7733891583547000e-01:3.9960415738246904e+00 + CVs 20 + 4.1140534387085148e-01 1.8177075216294833e-01 -1.8377592459398684e-02 + 7.5315598031347486e-01 3.0731390991511293e-01 -6.5713154766090465e-02 + 1.0908275975202546e+00 4.2551593940331023e-01 -9.2424676438529751e-02 + 1.4491373362098936e+00 5.5105950657917369e-01 -7.8298180839445397e-02 + 1.8229713001032464e+00 6.7451844357385837e-01 -1.6889476974833784e-02 + 2.2026405026236113e+00 7.8745940905240175e-01 9.9551686128752315e-02 + 2.5738163637948661e+00 8.8337856173277152e-01 2.7409649797994895e-01 + 2.9216001828043345e+00 9.5925386352528097e-01 5.0088323927772482e-01 + 3.2331143440863186e+00 1.0166577192867523e+00 7.6968868285471725e-01 + 3.4983600092938421e+00 1.0585313732905559e+00 1.0680140753122789e+00 + 3.7203093649150514e+00 1.0837514810664810e+00 1.3718101500677335e+00 + 3.9308802425406828e+00 1.0803819555009131e+00 1.6421851298678567e+00 + 4.1679581315565803e+00 1.0347382981451676e+00 1.8460062525518179e+00 + 4.4264642589702428e+00 9.5231799818496743e-01 1.9836235591001368e+00 + 4.6792270915686958e+00 8.5032130626348046e-01 2.0833091749478987e+00 + 4.9180442496864210e+00 7.3716726516333564e-01 2.1574962135804370e+00 + 5.1455901631883076e+00 6.1662912006328829e-01 2.2011747695318968e+00 + 5.3612698217359345e+00 4.9482945115132004e-01 2.2148429554707558e+00 + 5.4875269646303719e+00 4.4398209448147963e-01 2.2796934005059222e+00 + id 13329 + loc 4.1719496250152588e-01 5.3421711921691895e-01 1080 + blend 0.0000000000000000e+00 + interp 3.2247085733209263e-01:3.2246763262351935e-01:3.2836144751874574e-01:2.9136598498478472e-01:1.2846039221401488e+00:2.9602360622563739e-01:2.3766714874706101e+00:2.9224457025420303e-01:3.1850875968331129e+00 + CVs 20 + -1.8348098194737508e-01 1.9335447254710811e-01 2.6716887094488517e-01 + -3.0908175519308712e-01 3.0044764727302770e-01 3.9769364927891238e-01 + -4.2970921361543252e-01 3.6922588842471210e-01 4.9168178878895896e-01 + -5.7082594103018558e-01 4.2001888922666469e-01 5.9268245741743342e-01 + -7.2979939374429514e-01 4.4989145853463941e-01 6.9596495874029873e-01 + -9.0411829031944591e-01 4.5670271768337334e-01 7.9761323299670794e-01 + -1.0919859726746997e+00 4.3939138388116172e-01 8.9453007829274500e-01 + -1.2919950924946846e+00 3.9753191195033244e-01 9.8445330563622924e-01 + -1.5029087039799738e+00 3.3119751429432559e-01 1.0663789744490264e+00 + -1.7239946569177991e+00 2.4121828244671417e-01 1.1412660282987710e+00 + -1.9551209683075415e+00 1.2930477682879560e-01 1.2123363480905986e+00 + -2.1959384209552129e+00 -1.9361475167872788e-03 1.2846661871664136e+00 + -2.4445431423431989e+00 -1.4901432678822069e-01 1.3635937540503957e+00 + -2.6969405616963518e+00 -3.0757462362554699e-01 1.4523496374128921e+00 + -2.9472868253639839e+00 -4.7231971065927003e-01 1.5518482567147791e+00 + -3.1880988647846720e+00 -6.3703619083131935e-01 1.6628074632591776e+00 + -3.4122851796487081e+00 -7.9515328425658605e-01 1.7850724440488248e+00 + -3.6187165788128692e+00 -9.4072612965207048e-01 1.9124597871840856e+00 + -3.8345329803421477e+00 -1.0649421277780986e+00 2.0266179867550269e+00 + id 13330 + loc 3.1674215197563171e-01 2.4192942678928375e-01 403 + blend 0.0000000000000000e+00 + interp 3.9631949078492651e-01:2.7505513652371966e-01:4.6767972544446357e-01:3.2780384681156965e-01:1.2103988516193012e+00:3.9631552759001870e-01:1.9084574282847371e+00:3.3792241878004819e-01:2.2181472813691472e+00:2.6108573908108335e-01:2.9545921825259267e+00:3.2674312976760261e-01:3.8811834538954009e+00 + CVs 20 + -2.3989784533896819e-01 1.7225686532714771e-01 8.1652827649491097e-02 + -4.5611902265961185e-01 3.5089504623880413e-01 1.5140299393972606e-01 + -6.6761774303892474e-01 5.3392569051921157e-01 2.1322233571490903e-01 + -8.8633075599892530e-01 7.2087026155039879e-01 2.7070978418176150e-01 + -1.1184635554670113e+00 9.1382985992150290e-01 3.3168266412862535e-01 + -1.3686221225002708e+00 1.1180144793302749e+00 4.1531591376415850e-01 + -1.6337931696002963e+00 1.3371789090841442e+00 5.4997415017054796e-01 + -1.9025550088722911e+00 1.5662458985986467e+00 7.6422651987078261e-01 + -2.1555209475173815e+00 1.7882683325093693e+00 1.0796995321688261e+00 + -2.3665118426715619e+00 1.9788585154828287e+00 1.5030387571792947e+00 + -2.5101056848214887e+00 2.1148199251695905e+00 2.0194140864264956e+00 + -2.5763696869120047e+00 2.1819912813436728e+00 2.5930814611609980e+00 + -2.5807945337575142e+00 2.1782541138966085e+00 3.1897310559663143e+00 + -2.5438537897893139e+00 2.1000918010165175e+00 3.7944503492151718e+00 + -2.4827424214296103e+00 1.9577336874323485e+00 4.3789291501171403e+00 + -2.4425186896606665e+00 1.8467511953781113e+00 4.8658620631594527e+00 + -2.4720690051626009e+00 1.9128166323405500e+00 5.1670438757835848e+00 + -2.5338266946180643e+00 2.1023327771064642e+00 5.3202084033822619e+00 + -2.5572860079791520e+00 2.0814158318773166e+00 5.7262080792771295e+00 + id 13331 + loc 7.3521798849105835e-01 6.8066263198852539e-01 412 + blend 0.0000000000000000e+00 + interp 4.8087413282756997e-01:3.4927515811873838e-01:3.9750266112138888e-01:3.6230863491786619e-01:1.4330553673605890e+00:3.6557600199416335e-01:1.9832116326650522e+00:4.3098086119398199e-01:2.3068864071797486e+00:4.8086932408624172e-01:2.9948028562773574e+00:2.9961750209190302e-01:3.6752320081231664e+00 + CVs 20 + 6.9164140046411005e-01 1.7861360297497614e-01 -1.5569977017811426e-01 + 1.1318740381263486e+00 2.3789957404973677e-01 -2.7388766705914225e-01 + 1.4985136208506853e+00 2.4237109539471555e-01 -3.7750425201332405e-01 + 1.8740583992139364e+00 2.2722027477071477e-01 -4.7006801829940070e-01 + 2.2497067498053540e+00 1.9413471593447817e-01 -5.4789153176941485e-01 + 2.6163010394866113e+00 1.4693131120978586e-01 -6.0876737775622369e-01 + 2.9670172053351851e+00 9.1022896811335685e-02 -6.5046023439025835e-01 + 3.2971652547683892e+00 3.0134146429980579e-02 -6.7093257129772144e-01 + 3.6011450850118143e+00 -3.5830305887572189e-02 -6.7007774200981596e-01 + 3.8741757841703075e+00 -1.0349411884063398e-01 -6.5015037217681604e-01 + 4.1271966513706753e+00 -1.6011368491056932e-01 -6.0507751439692736e-01 + 4.4003482712684105e+00 -1.9243405515038225e-01 -5.1261526025303839e-01 + 4.7291919952813313e+00 -2.2563039285819508e-01 -3.6980207794929887e-01 + 5.0969938171902207e+00 -3.1329514634063593e-01 -2.1995711199427864e-01 + 5.4711267490022122e+00 -4.7563548886404439e-01 -9.6875810675209950e-02 + 5.8434926978974220e+00 -7.0971901356229772e-01 -3.3568587251675552e-05 + 6.2070461859541073e+00 -1.0117137031758079e+00 7.2301743366389642e-02 + 6.5303836766538783e+00 -1.3565974845134385e+00 1.0475335657841009e-01 + 6.6531971199243163e+00 -1.6327071757019593e+00 5.3557836986768137e-02 + id 13332 + loc 2.1276453137397766e-01 6.7320495843887329e-01 402 + blend 0.0000000000000000e+00 + interp 4.4817554264907833e-01:3.9828813804897073e-01:3.5317288189191554e-01:3.4775646542678917e-01:9.6206655360114723e-01:4.3604150446054862e-01:1.2283138377819978e+00:4.1522244388604335e-01:1.8429534910034073e+00:4.1181504132910463e-01:2.0850903312478040e+00:4.0846942492094757e-01:2.9352015125521111e+00:3.1541799321630326e-01:3.2955028908521520e+00:4.4817106089365188e-01:3.9463721891958641e+00 + CVs 20 + 4.6580232485335119e-02 3.5933508146143145e-01 -2.4062544218276344e-01 + 8.2565805743142345e-02 6.9685527519537382e-01 -4.8728125558642083e-01 + 1.4270811410433060e-01 1.0147711333928355e+00 -7.4961242755832791e-01 + 2.2919924534674774e-01 1.3113506820026828e+00 -1.0317079334286403e+00 + 3.2711314097887750e-01 1.5764228863983734e+00 -1.3304472272215067e+00 + 4.2409525550936777e-01 1.8003365283952784e+00 -1.6406415766885987e+00 + 5.1265723427141852e-01 1.9792727021925811e+00 -1.9554335658378865e+00 + 5.8846210955136402e-01 2.1129698469735310e+00 -2.2679316104226821e+00 + 6.4859777445569167e-01 2.2005606018000670e+00 -2.5643326588156166e+00 + 6.9318114836264644e-01 2.2441123091104251e+00 -2.8221844804857086e+00 + 7.2819625450902659e-01 2.2571103195625906e+00 -3.0269418490514406e+00 + 7.6408447233751442e-01 2.2584924297522893e+00 -3.1898264814089794e+00 + 8.1073622421142955e-01 2.2433911776917257e+00 -3.3530891893235597e+00 + 8.6928592435444640e-01 2.1549921298589649e+00 -3.5664879685758635e+00 + 9.1229931185421131e-01 1.9184710016487270e+00 -3.8440479517730504e+00 + 8.5286002080536438e-01 1.4903083262735703e+00 -4.1702461797317412e+00 + 5.4290140754706917e-01 9.1310766965767654e-01 -4.5269111579991543e+00 + -5.1509518818193323e-02 4.4268440100342077e-01 -4.8469025003980803e+00 + -4.1999236344885715e-01 3.5433530888832943e-01 -4.9189219520879419e+00 + id 13333 + loc 6.7395365238189697e-01 1.1468474566936493e-01 396 + blend 0.0000000000000000e+00 + interp 5.0947061880450772e-01:3.2136822477677851e-01:5.6108195007830308e-01:3.6073415096867317e-01:1.1768917820273321e+00:5.0946552409831969e-01:2.0024156046856536e+00:4.4399274644384695e-01:2.4195719133349400e+00:3.6443875528461350e-01:2.9169366657738522e+00:3.9457617855937588e-01:3.6750986506270142e+00 + CVs 20 + -6.0163457961522349e-01 1.3018745226201667e-01 3.6863510879024786e-01 + -1.0376513139565173e+00 1.4065876098436536e-01 6.7136608889055016e-01 + -1.4406485490546190e+00 1.0673010097116009e-01 9.5764708085279460e-01 + -1.8571565357442417e+00 5.9276106782823912e-02 1.2327609127034675e+00 + -2.2810919266179019e+00 1.9642894917807352e-03 1.4832199352467965e+00 + -2.7061609738290375e+00 -5.9421297483895685e-02 1.7024852794185432e+00 + -3.1252968514757931e+00 -1.1767357768683251e-01 1.8903369927118212e+00 + -3.5323657111835920e+00 -1.6730505288241870e-01 2.0493712682811580e+00 + -3.9292936563059859e+00 -2.0803192854694386e-01 2.1848655702668287e+00 + -4.3273214743707626e+00 -2.4821303385961624e-01 2.3086958330496730e+00 + -4.7299278123364044e+00 -3.0703226924113003e-01 2.4416395612452515e+00 + -5.1206782243557258e+00 -4.0322875520934387e-01 2.6010396856901608e+00 + -5.4764431613782314e+00 -5.4549101009965062e-01 2.7904705758559878e+00 + -5.7824315050131458e+00 -7.3808820034130873e-01 3.0031689713957981e+00 + -6.0272149585970869e+00 -9.7932063646248890e-01 3.2290663881969230e+00 + -6.1983004711151004e+00 -1.2525366445594113e+00 3.4594736179434591e+00 + -6.2870617102724857e+00 -1.5348921399147630e+00 3.6836915173580840e+00 + -6.2867039253271697e+00 -1.8133049939759642e+00 3.8801524473197624e+00 + -6.1369044954476504e+00 -2.1209676299918456e+00 3.9722991921106132e+00 + id 13334 + loc 5.0239545106887817e-01 6.3679271936416626e-01 373 + blend 0.0000000000000000e+00 + interp 4.7468800822642454e-01:4.5398721394022717e-01:1.0159984543216805e-01:4.2690201130620908e-01:7.8775034333396410e-01:4.6985318290444061e-01:1.0841203318225427e+00:4.1011254939020564e-01:1.8137711197967104e+00:2.6934603517157124e-01:2.0828502520711734e+00:4.2942902085954809e-01:2.7007151918399748e+00:4.7468326134634231e-01:3.0975051740931194e+00:4.0229803480543208e-01:3.8206645425306860e+00 + CVs 20 + -3.1611064899656371e-01 4.0406566148587325e-01 -7.6389335182235452e-02 + -5.8419444555150257e-01 7.8682855933513318e-01 -2.0541068446364813e-01 + -8.0117220640897213e-01 1.1439468437782414e+00 -3.7557988570792933e-01 + -9.6459203211303257e-01 1.4743670224497289e+00 -5.7568058389590193e-01 + -1.0733783947854190e+00 1.7693472266942760e+00 -7.9145236502463312e-01 + -1.1426617203306604e+00 2.0093465267634758e+00 -1.0023698436262625e+00 + -1.1958706232472802e+00 2.1803024877764217e+00 -1.1928762992202218e+00 + -1.2537033539683715e+00 2.2927356567741155e+00 -1.3688139710457239e+00 + -1.3322551972067991e+00 2.3644573054960536e+00 -1.5488114612163926e+00 + -1.4383708923945773e+00 2.4076304602256227e+00 -1.7393812338864341e+00 + -1.5646114457146645e+00 2.4403787622916173e+00 -1.9267960835045159e+00 + -1.6938534084906478e+00 2.4927355247874567e+00 -2.0929665246296421e+00 + -1.8110930103308009e+00 2.5624945755705495e+00 -2.2585359411510217e+00 + -1.8969938763886085e+00 2.5911637123828486e+00 -2.4376288509468602e+00 + -1.9292238460677096e+00 2.5714431670701479e+00 -2.5946620224957848e+00 + -1.8912428825771139e+00 2.5320484566902106e+00 -2.7169305574631020e+00 + -1.7801193084814289e+00 2.4698355891691510e+00 -2.8319448826633837e+00 + -1.6852340878813294e+00 2.4051293085454843e+00 -2.9692147717422119e+00 + -1.9347412220568250e+00 2.5776836624829871e+00 -3.0107381629159913e+00 + id 13335 + loc 4.7207684256136417e-03 7.9222694039344788e-02 375 + blend 0.0000000000000000e+00 + interp 5.4277654438181144e-01:5.4095034924089624e-01:4.0113953172800976e-02:3.9726569340317019e-01:7.7242106213323825e-01:1.1254761848718059e-01:1.9146263965946133e+00:3.6232340502594101e-01:2.2380408460123467e+00:4.8855778601102062e-01:2.7587679989341529e+00:5.2227990722898021e-01:3.2215623198407948e+00:5.4277111661636768e-01:3.7851880808464573e+00 + CVs 20 + -6.8973045382251463e-02 4.7123197917014903e-01 6.3570914317658311e-01 + -1.0011261715066205e-01 8.4842440574879763e-01 1.2089745123670852e+00 + -1.1482515286855394e-01 1.1458047836557825e+00 1.7886205271354811e+00 + -1.4654453083594521e-01 1.3983029166168908e+00 2.3271220222241866e+00 + -2.0904164790036370e-01 1.6288832432118763e+00 2.7326084616888466e+00 + -3.3059360661648030e-01 1.8707201220476317e+00 3.0189502546035123e+00 + -6.2004702539468282e-01 2.1367001322425443e+00 3.1328808937141672e+00 + -1.0220529449270377e+00 2.3489259128697690e+00 2.9710020954440246e+00 + -1.4327655912155250e+00 2.4532418368365163e+00 2.5533975167353917e+00 + -1.7838933714155882e+00 2.4078650456821711e+00 1.9487952262350179e+00 + -2.0196150582819770e+00 2.1886912559723140e+00 1.2866609385430228e+00 + -2.1119399635920377e+00 1.8315519829196918e+00 7.4109332813266537e-01 + -2.0525363849484117e+00 1.3727618339152081e+00 4.0319083491885743e-01 + -1.8199958798836291e+00 7.8852550901932283e-01 2.1497793674213406e-01 + -1.4755136049304571e+00 1.4240710853175412e-01 -1.8053575335300481e-01 + -1.2666690145569675e+00 -1.6366669006331297e-01 -1.0572592177143751e+00 + -1.3696562881313044e+00 4.9861714836519799e-02 -2.1656042620328302e+00 + -1.8459099178077230e+00 5.9528891718704346e-01 -3.1582167205581060e+00 + -2.6083125237576468e+00 1.1767243364268081e+00 -3.8392435206322406e+00 + id 13336 + loc 5.7404500246047974e-01 4.5993289351463318e-01 400 + blend 0.0000000000000000e+00 + interp 4.3943852679946183e-01:3.2488957965706500e-01:4.2793230132483706e-01:4.3943413241419388e-01:9.9849780213084716e-01:3.3432580049651556e-01:1.9624322102977456e+00:3.6464235649995697e-01:2.5218280783154876e+00:3.8683843184636746e-01:3.0450818314149899e+00:3.1028601985279086e-01:3.9496817091513581e+00 + CVs 20 + 1.7105737858625278e-01 1.6548219632510427e-01 1.6252200915598886e-01 + 3.2752655199017006e-01 3.3187845204228483e-01 3.6576251192389814e-01 + 4.6899554221000389e-01 4.8415457986448740e-01 6.0457262451146887e-01 + 5.9506633057229497e-01 6.1426083721323410e-01 8.7389076331919058e-01 + 7.0743638948655507e-01 7.2308863677362711e-01 1.1723341098833957e+00 + 8.1301825805855854e-01 8.1468794356923668e-01 1.4957830910897121e+00 + 9.2272256251751661e-01 8.9297892072699225e-01 1.8381787499216133e+00 + 1.0426108349006118e+00 9.5877943374926167e-01 2.1878678140962755e+00 + 1.1628312610858851e+00 1.0072324190311286e+00 2.5259544653933976e+00 + 1.2654212605110637e+00 1.0279546324322923e+00 2.8350889066216913e+00 + 1.3466582592325800e+00 1.0135105052996438e+00 3.1086054066197413e+00 + 1.4153543119084866e+00 9.6517106691338461e-01 3.3467704650020047e+00 + 1.4804156001886961e+00 8.9044313673418962e-01 3.5516282549732763e+00 + 1.5470683567810630e+00 7.9948444098371074e-01 3.7290019098432818e+00 + 1.6170860661515984e+00 7.0034159131181961e-01 3.8879688482379002e+00 + 1.6912749545822909e+00 5.9679296406063442e-01 4.0379075331988652e+00 + 1.7695373883020193e+00 4.8870841392908626e-01 4.1900706688771052e+00 + 1.8445495944007113e+00 3.6575704683362931e-01 4.3621027254645082e+00 + 1.8994179875661510e+00 1.9881732973203570e-01 4.5744599435490567e+00 + id 13337 + loc 2.5218394398689270e-01 8.7739330530166626e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8143540455034906e-01:3.7340711299119778e-01:5.7171477504029289e-01:4.8143059019630358e-01:1.0033075852651241e+00:4.2147191115523802e-01:1.8551468407141229e+00:3.8854172933303899e-01:2.1010112377409618e+00:3.3483587362593703e-01:2.3215662001538409e+00:3.0250366898796271e-01:3.0004872018730020e+00:4.6571009656047030e-01:3.9872006886175511e+00 + CVs 20 + 3.7375449663368587e-01 1.9740605220836260e-01 -2.5506277227024199e-01 + 7.2792310613857947e-01 4.0894207535332083e-01 -5.3485278029022998e-01 + 1.0532166970856807e+00 6.2509645070175357e-01 -8.4086457246659430e-01 + 1.3239802923261297e+00 8.3965448466223302e-01 -1.1793662848498991e+00 + 1.5115319561238278e+00 1.0312626362623343e+00 -1.5465019583736719e+00 + 1.6009082927976626e+00 1.1620039733340786e+00 -1.9196750415150758e+00 + 1.6071464629574379e+00 1.1972535714834733e+00 -2.2568586027349937e+00 + 1.5720583968997162e+00 1.1320371696273948e+00 -2.5120101945427682e+00 + 1.5313935087990289e+00 1.0041420155242329e+00 -2.6640781775955151e+00 + 1.4974873156560704e+00 8.7015168236792628e-01 -2.7338684673146338e+00 + 1.4712745366547801e+00 7.6714127222888073e-01 -2.7720120804261237e+00 + 1.4472192198394898e+00 6.9796152330202710e-01 -2.8366514289054359e+00 + 1.4171525310651736e+00 6.4320520198278908e-01 -2.9595857082977308e+00 + 1.3813979776677343e+00 5.8693460751406157e-01 -3.1427141206279319e+00 + 1.3507565222818614e+00 5.2882406976211449e-01 -3.3712640601826185e+00 + 1.3376810659513783e+00 4.8198291197098303e-01 -3.6183769420699683e+00 + 1.3517831684242250e+00 4.4146740502533022e-01 -3.8703139317978548e+00 + 1.4415100920933392e+00 3.8583825900446056e-01 -4.1455764294489486e+00 + 1.6260923763647126e+00 3.6219460130682968e-01 -4.4326224133292209e+00 + id 13338 + loc 8.6048737168312073e-02 2.5520077347755432e-01 377 + blend 0.0000000000000000e+00 + interp 2.9475799939130842e-01:2.3496305487449234e-01:7.5809426174184802e-01:2.2682021719503498e-01:1.9589315311913480e+00:2.9475505181131451e-01:2.7195243234640980e+00:2.4581854786336949e-01:3.3388455431625603e+00 + CVs 20 + -4.7658497836612079e-01 4.0500595773810294e-01 7.7147538626129419e-01 + -7.2362842620783951e-01 6.5500001911989025e-01 1.3723768151571802e+00 + -8.2481389112526970e-01 8.1417710145312872e-01 1.9599558901036263e+00 + -8.3484426040726845e-01 9.3372932573439638e-01 2.5980787186297816e+00 + -7.9887499579261856e-01 1.0352841222611251e+00 3.2831562421685456e+00 + -7.7986892665955754e-01 1.1188689839758390e+00 4.0120396780732950e+00 + -8.3843433633052933e-01 1.1523600654941339e+00 4.7738604386295282e+00 + -1.0162691692340398e+00 1.0921156572162498e+00 5.5309089079844131e+00 + -1.3208536158130255e+00 9.1460028939628790e-01 6.2224054148450483e+00 + -1.7222913190387874e+00 6.2887675366109796e-01 6.7967895117728965e+00 + -2.1673566923418517e+00 2.6292299198692115e-01 7.2437077136694716e+00 + -2.6110430609537278e+00 -1.6508329790649157e-01 7.5803588557995631e+00 + -3.0175657112534267e+00 -6.5263735078167873e-01 7.8300780012365623e+00 + -3.3554958253975169e+00 -1.1996721211130148e+00 8.0116762061136892e+00 + -3.6092043894096095e+00 -1.7874520297126364e+00 8.1468475703896370e+00 + -3.7903409478401726e+00 -2.3744254401550760e+00 8.2660829013338244e+00 + -3.9213459072917449e+00 -2.9129682035275293e+00 8.3930810334123880e+00 + -4.0124636771722946e+00 -3.3797583027062696e+00 8.5440706648830211e+00 + -4.0499553411674745e+00 -3.8221582967241186e+00 8.7804774552760048e+00 + id 13339 + loc 5.3773885965347290e-01 6.7602592706680298e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4120718341655681e-01:2.9130048850711404e-01:7.7781618391024654e-01:2.7699969308559097e-01:1.2827601206199370e+00:2.8411013083469944e-01:2.0000507764155415e+00:3.4120377134472268e-01:3.0000512038841074e+00:2.7870483471088225e-01:3.8307127755870143e+00 + CVs 20 + 1.4779593556037035e-01 3.4794953337909168e-01 -2.6601818717812581e-01 + 3.1287313977342812e-01 6.9526177409263257e-01 -5.4992659054505277e-01 + 4.9010265435817124e-01 1.0315672297430161e+00 -8.4189789687587402e-01 + 6.7547105629369797e-01 1.3429283371517433e+00 -1.1364933208480619e+00 + 8.6629782473170303e-01 1.6106004402259870e+00 -1.4287046910822931e+00 + 1.0605927211026358e+00 1.8116557164777112e+00 -1.7080197380514508e+00 + 1.2566372001581545e+00 1.9368576624600158e+00 -1.9593128719379425e+00 + 1.4507728677073048e+00 1.9964095061813669e+00 -2.1669096103327354e+00 + 1.6383930417760613e+00 2.0137418026284704e+00 -2.3266415523298716e+00 + 1.8240157823113461e+00 2.0143265261415273e+00 -2.4592375447604136e+00 + 2.0225598952312178e+00 2.0085127286788733e+00 -2.5969227488538724e+00 + 2.2433318085925351e+00 1.9938235441485694e+00 -2.7585588934060237e+00 + 2.4896218951082481e+00 1.9737063620965494e+00 -2.9499883741324933e+00 + 2.7784363580122520e+00 1.9516145684804775e+00 -3.1863756364640863e+00 + 3.1233288451411405e+00 1.9081701178191826e+00 -3.4970604284091609e+00 + 3.4916022805944014e+00 1.8168170768433964e+00 -3.9002120415871544e+00 + 3.8121483231689770e+00 1.7005060392005393e+00 -4.3827243080255860e+00 + 4.0167856178291963e+00 1.6590131501235785e+00 -4.8985848880741480e+00 + 4.0450101398280784e+00 1.8355866390164886e+00 -5.3476656549786226e+00 + id 13340 + loc 4.4374238699674606e-02 6.8104773759841919e-01 380 + blend 0.0000000000000000e+00 + interp 5.0221201304156282e-01:3.2819049839702719e-01:4.5182350429389229e-02:4.5410574057498038e-01:4.5951962337321994e-01:3.9156574771525704e-01:1.1267253957141019e+00:2.8390425551407278e-01:2.0984678846032137e+00:3.4314204144261135e-01:2.9277026189615252e+00:5.0220699092143239e-01:3.3058814578596714e+00 + CVs 20 + -3.9138580606384588e-01 3.3052400316337005e-01 -4.2324188043894095e-01 + -7.5290326865410417e-01 6.1304434820620768e-01 -7.8786588740439556e-01 + -1.1040794491385737e+00 8.7198354577433701e-01 -1.1483360105020763e+00 + -1.4467977428163135e+00 1.1213984806553126e+00 -1.5323940232212134e+00 + -1.7644457669677733e+00 1.3478414882924590e+00 -1.9384397837536982e+00 + -2.0531922772355773e+00 1.5296782878620536e+00 -2.3604834466373319e+00 + -2.3138615765566146e+00 1.6468980525647006e+00 -2.7850607362566322e+00 + -2.5458980765012629e+00 1.6904507032878615e+00 -3.1916946501164603e+00 + -2.7556016007129371e+00 1.6647065304458066e+00 -3.5623063566670639e+00 + -2.9548956937270763e+00 1.5813007511481358e+00 -3.8884159486332601e+00 + -3.1482309171521425e+00 1.4549397136782791e+00 -4.1656822129231008e+00 + -3.3335051077224844e+00 1.3048979857111735e+00 -4.3921511342973494e+00 + -3.5124903268546488e+00 1.1442483719555816e+00 -4.5763022763302939e+00 + -3.6840062678630323e+00 9.5715336839162024e-01 -4.7248303208829689e+00 + -3.8350555190282831e+00 7.0775481902114246e-01 -4.8214685085494322e+00 + -3.9559118013422441e+00 3.7810760938271404e-01 -4.8732801718737946e+00 + -4.0450760122140155e+00 -1.9488024355790223e-02 -4.9401663885254798e+00 + -4.1288320334076571e+00 -4.4030161531968082e-01 -5.0663372865625824e+00 + -4.3535563013320591e+00 -7.4331736787312774e-01 -5.1738217440037078e+00 + id 13341 + loc 7.5715494155883789e-01 7.8502881526947021e-01 409 + blend 0.0000000000000000e+00 + interp 5.1944233902660664e-01:3.0222522274258823e-01:3.7292593734113144e-01:3.4674824039456598e-01:1.0140044351428890e+00:3.3331281634371174e-01:1.7773166629006538e+00:4.3064141149950375e-01:2.2308032795183310e+00:3.0945562129881138e-01:3.0269813857741394e+00:4.9750233427985407e-01:3.5420882031290732e+00:5.1943714460321644e-01:3.9692140962877240e+00 + CVs 20 + 5.3280933002654218e-01 6.8974833472306485e-02 -2.5224343468077692e-01 + 1.0108908259020433e+00 8.9763508400903858e-02 -4.9360420906488300e-01 + 1.4973227792807788e+00 1.0269647089738709e-01 -7.0720535037278176e-01 + 2.0057967091181474e+00 1.1584911955249222e-01 -8.8656337613100267e-01 + 2.5228871225040708e+00 1.2293490618945824e-01 -1.0285630751856341e+00 + 3.0355675832406277e+00 1.1889645884648425e-01 -1.1331227957601051e+00 + 3.5306084061448919e+00 9.4580135877347926e-02 -1.2003316487724558e+00 + 3.9939069175563713e+00 3.4821834292716680e-02 -1.2303687249561142e+00 + 4.4115739513861207e+00 -7.2984033492319966e-02 -1.2304096118707846e+00 + 4.7703988931321799e+00 -2.3390150738766913e-01 -1.2175583731110473e+00 + 5.0590766234139846e+00 -4.4583065094000984e-01 -1.2069304483884324e+00 + 5.2778427275349769e+00 -6.9395704144015236e-01 -1.2000102504167924e+00 + 5.4427047574913772e+00 -9.5708438991469036e-01 -1.1925856971561921e+00 + 5.5697268641016811e+00 -1.2234845728520822e+00 -1.1867922252673413e+00 + 5.6647473656585872e+00 -1.4904421455007775e+00 -1.1875037232978141e+00 + 5.7249922982011476e+00 -1.7556895545835784e+00 -1.1923924898103233e+00 + 5.7480141364499726e+00 -2.0124198646793134e+00 -1.1936875613409987e+00 + 5.7422174952809595e+00 -2.2548869488295100e+00 -1.1948059901812194e+00 + 5.8028537595473235e+00 -2.4993843270638667e+00 -1.2317208474148078e+00 + id 13342 + loc 4.8438122868537903e-01 4.3766614794731140e-01 395 + blend 0.0000000000000000e+00 + interp 4.7805612371188005e-01:2.9612430879244384e-01:1.7917553459093216e-01:4.2339056561628491e-01:1.1890784242431789e+00:2.9139404229455707e-01:1.9608822160478889e+00:4.7805134315064296e-01:2.2759839254968344e+00:3.4601622029019902e-01:3.0004584421298253e+00:3.8454726322305166e-01:3.4499735110565091e+00 + CVs 20 + -3.2427391595786542e-01 2.0106985900473764e-01 -4.5575291922462768e-01 + -5.9229906533998533e-01 3.5125873608674385e-01 -8.6959363277985258e-01 + -8.4488812704929561e-01 4.7199199888047760e-01 -1.2709662951994780e+00 + -1.0947406109862070e+00 5.6400032877788786e-01 -1.6693605163040073e+00 + -1.3370145389552395e+00 6.1675693538264387e-01 -2.0560551736291370e+00 + -1.5705722168468945e+00 6.2419083629046446e-01 -2.4205036211395075e+00 + -1.7929686687171820e+00 5.8373920959741832e-01 -2.7507708054423659e+00 + -1.9958276598415550e+00 4.9585287169101333e-01 -3.0330748415052620e+00 + -2.1712784897067579e+00 3.6821976291299618e-01 -3.2553838136864655e+00 + -2.3178427637799022e+00 2.1785478306418926e-01 -3.4129947083461478e+00 + -2.4362057043422101e+00 6.7875237424204649e-02 -3.5098172434447590e+00 + -2.5310333932544919e+00 -6.0526981085464726e-02 -3.5564897928821857e+00 + -2.6167193977421936e+00 -1.5683652865523401e-01 -3.5668218102069043e+00 + -2.7114209428166074e+00 -2.2189624795794760e-01 -3.5558911156054713e+00 + -2.8284198073565388e+00 -2.6236632543201610e-01 -3.5361454212499415e+00 + -2.9776076632193718e+00 -2.8136740372999158e-01 -3.5092986876143009e+00 + -3.1704447998491707e+00 -2.8228260532387806e-01 -3.4717872554645650e+00 + -3.4098563701297397e+00 -2.9418735488789505e-01 -3.4190093873600951e+00 + -3.6309357465721295e+00 -4.8723736728673339e-01 -3.2861503041789639e+00 + id 13343 + loc 3.5312560200691223e-01 3.4826534986495972e-01 382 + blend 0.0000000000000000e+00 + interp 4.8172123098429454e-01:4.8171641377198471e-01:3.5059840293599476e-01:4.1671815416924557e-01:9.9896042585410350e-01:3.1048795290901221e-01:1.7547994651888152e+00:3.1274341846968884e-01:2.2158642266483692e+00:4.5520306445186881e-01:2.7740030171595995e+00:4.1383530009917902e-01:3.3821169720266724e+00:3.2844810848587602e-01:3.9967847986899407e+00 + CVs 20 + -5.5568181953788520e-01 1.1458730519761229e-01 -7.5648355167662040e-01 + -9.3816987545036834e-01 8.4626702138618837e-02 -1.2656102043971218e+00 + -1.2764593422494386e+00 -3.3841883096852321e-03 -1.7084579542182836e+00 + -1.6171133862300224e+00 -1.0955688491907400e-01 -2.1525707633664051e+00 + -1.9641215774005456e+00 -2.2360243958260140e-01 -2.5901805232060910e+00 + -2.3255631062511171e+00 -3.3670529295660856e-01 -3.0146048460250658e+00 + -2.7085424328185841e+00 -4.4262465779161642e-01 -3.4165455036986980e+00 + -3.1136675616726626e+00 -5.4213652810629287e-01 -3.7862330398529274e+00 + -3.5342773308188615e+00 -6.4888815346018580e-01 -4.1215746919543435e+00 + -3.9610867788548139e+00 -7.8353742738059950e-01 -4.4236720261753568e+00 + -4.3876652746025826e+00 -9.6178654788340046e-01 -4.6845409981348931e+00 + -4.8075853657117120e+00 -1.1917352577330222e+00 -4.8898682184503306e+00 + -5.2111154165348603e+00 -1.4735170725858013e+00 -5.0313003157206682e+00 + -5.5846027573408605e+00 -1.8014222740088406e+00 -5.1099243260654967e+00 + -5.9158854982632896e+00 -2.1640380380040884e+00 -5.1303458392941703e+00 + -6.1992956535229311e+00 -2.5456462792603674e+00 -5.0971894304948249e+00 + -6.4317152487716029e+00 -2.9315091451579196e+00 -5.0152384843059652e+00 + -6.6082288300625951e+00 -3.3153151166613686e+00 -4.8881782527567355e+00 + -6.7151857977025395e+00 -3.7469169071223845e+00 -4.6966695074434206e+00 + id 13344 + loc 4.2238026857376099e-01 6.9381093978881836e-01 393 + blend 0.0000000000000000e+00 + interp 3.8020363129852131e-01:3.3988063180477868e-01:1.5500721532646256e-02:3.3534054833506510e-01:9.5737110259570102e-01:2.6587887007852995e-01:1.6679309371103559e+00:2.7083474590090778e-01:2.3321122982452893e+00:3.8019982926220836e-01:3.0925650366789972e+00 + CVs 20 + -3.2242296528154168e-01 3.3465465593890248e-01 -1.7327112918886689e-01 + -6.2207429614960619e-01 6.8070201323478363e-01 -3.1385633288703074e-01 + -9.0589825877320718e-01 1.0498308934338669e+00 -4.3694309402608522e-01 + -1.1879170805364943e+00 1.4373160986382549e+00 -5.5154909175663036e-01 + -1.4885907645101477e+00 1.8269889239114196e+00 -6.6109623975363419e-01 + -1.8247068924604550e+00 2.2004974511400528e+00 -7.6429377868628756e-01 + -2.2088951907889798e+00 2.5397375653126852e+00 -8.5730133157340560e-01 + -2.6576088718122040e+00 2.8197233158047421e+00 -9.3982703206688689e-01 + -3.1906977171624993e+00 3.0078153292130141e+00 -1.0210322204533571e+00 + -3.8143715537624692e+00 3.0812745842987757e+00 -1.1264789162462141e+00 + -4.4965999999293720e+00 3.0342642355853737e+00 -1.2848545233069941e+00 + -5.1778105331373450e+00 2.8613621718679947e+00 -1.4909786586905815e+00 + -5.8147012485858927e+00 2.5507660969583537e+00 -1.7133977271902820e+00 + -6.3802181817062866e+00 2.1015446569196521e+00 -1.9308985025695782e+00 + -6.8329077400172267e+00 1.5585278019431592e+00 -2.0988818315206017e+00 + -7.1450709355419511e+00 1.0502414248666259e+00 -2.1051824264358499e+00 + -7.3240159085693977e+00 7.0792780297480085e-01 -1.8885858222263137e+00 + -7.4151370544760544e+00 4.8714088295007718e-01 -1.5764753435384193e+00 + -7.6073390740078715e+00 8.5442726171207628e-02 -1.3642905014217994e+00 + id 13345 + loc 4.3638709187507629e-01 9.3468880653381348e-01 399 + blend 0.0000000000000000e+00 + interp 3.5368423758258827e-01:3.0089641208631185e-01:3.0637712276270135e-01:2.9005516735303788e-01:1.0419681017697260e+00:3.2387257923874019e-01:2.1112623755783471e+00:3.3522771901601650e-01:3.0360073601389477e+00:3.5368070074021246e-01:3.9152106435500418e+00 + CVs 20 + -1.5184343100641490e-01 3.1685980663662489e-01 -1.9976471869565138e-01 + -2.9010997733906912e-01 6.3654377121233052e-01 -4.1210220544283432e-01 + -4.2443848245288052e-01 9.5215125444627136e-01 -6.2580851392118442e-01 + -5.6416218236668181e-01 1.2579811369229696e+00 -8.4098736885845837e-01 + -7.1976109088680129e-01 1.5492477078473665e+00 -1.0670384423946957e+00 + -9.0399459766371726e-01 1.8178785531193336e+00 -1.3131696994983613e+00 + -1.1267917797070801e+00 2.0486239049800390e+00 -1.5832622902755524e+00 + -1.3863195066580454e+00 2.2258295485711641e+00 -1.8693697591656921e+00 + -1.6805336969193672e+00 2.3508321869520437e+00 -2.1612983574201929e+00 + -2.0229551642537968e+00 2.4282759013236221e+00 -2.4649981690029708e+00 + -2.4017438152438877e+00 2.4344979165675604e+00 -2.7832127013425532e+00 + -2.7424084448752599e+00 2.3623296673424998e+00 -3.0809300849744909e+00 + -3.0008529222046949e+00 2.2545643564559850e+00 -3.3320653015991177e+00 + -3.2318842534251102e+00 2.1341419906327750e+00 -3.5625974776375786e+00 + -3.4973745156455460e+00 1.9966646826168484e+00 -3.7896177776561779e+00 + -3.6931905747010094e+00 1.8572937999621992e+00 -3.9586848565454487e+00 + -3.5421342059936056e+00 1.7143374850774276e+00 -4.0003451978438518e+00 + -3.1168071955617349e+00 1.3890025926999703e+00 -3.9624967578883870e+00 + -3.3834886452667519e+00 1.4416174249787117e+00 -3.9967136105488068e+00 + id 13346 + loc 7.9093801975250244e-01 2.8604692220687866e-01 374 + blend 0.0000000000000000e+00 + interp 3.9323968388609953e-01:3.8897867826748600e-01:8.1655877372039876e-01:3.0050757177156423e-01:1.1765898932214824e+00:3.9323575148926071e-01:2.0614625742823804e+00:2.6839812862748191e-01:2.7048161554931545e+00:3.8624331682987639e-01:3.2174632862545440e+00:3.7236992531322843e-01:3.9897047899793447e+00 + CVs 20 + 7.1450499838210102e-01 4.0810682666318726e-01 4.1168516982717862e-01 + 1.2660915680988136e+00 6.6952402811937017e-01 6.6913926795118051e-01 + 1.8229215315975140e+00 8.3982414916609760e-01 8.2126885768417501e-01 + 2.4381808897314583e+00 9.5908232803078020e-01 8.9325991828987705e-01 + 3.0962531098801938e+00 1.0548290426768088e+00 9.0588317730807177e-01 + 3.7925875745920035e+00 1.1396854164348147e+00 8.9928939790203000e-01 + 4.5286321259339779e+00 1.1888780744275480e+00 9.1988232353586619e-01 + 5.2943197844858485e+00 1.1620952722457374e+00 1.0011294032418490e+00 + 6.0589640337069648e+00 1.0302294774016720e+00 1.1602231265099519e+00 + 6.7759498394962092e+00 7.8604903845038088e-01 1.3952129295148217e+00 + 7.3988089184799666e+00 4.4213383829726993e-01 1.6856015831236029e+00 + 7.8974781767305551e+00 1.8116900753789800e-02 2.0066142142383021e+00 + 8.2566097599734256e+00 -4.6806284687738042e-01 2.3379718871258581e+00 + 8.4699777161166985e+00 -9.8996130920928715e-01 2.6635817148604977e+00 + 8.5537861554591821e+00 -1.5223747167075903e+00 2.9851829529081715e+00 + 8.5481984341026411e+00 -2.0486576016034688e+00 3.3159906559776613e+00 + 8.5127052767557814e+00 -2.5756473913224966e+00 3.6575945178072824e+00 + 8.5148870912765542e+00 -3.1352927754524051e+00 3.9739381231483817e+00 + 8.5961362027132928e+00 -3.7157513461866420e+00 4.2110687684706676e+00 + id 13347 + loc 9.0153431892395020e-01 1.4203469455242157e-01 401 + blend 0.0000000000000000e+00 + interp 4.0664745513040229e-01:3.0256750397652271e-01:9.6661396695940649e-02:3.1025541964931880e-01:9.9988325503095021e-01:3.2447208228933833e-01:1.8483502067205058e+00:3.4651196409620999e-01:2.3321410583347393e+00:4.0664338865585098e-01:3.1196820260641145e+00 + CVs 20 + 3.3611847914143504e-02 3.0728875218439905e-01 2.4181747660344766e-01 + 6.4396026027964182e-02 6.0945419449753369e-01 4.7670718504574205e-01 + 7.7132395018757946e-02 9.0361664490721416e-01 7.3569162643313279e-01 + 7.5900364374935386e-02 1.1819380879594501e+00 1.0435962641698788e+00 + 7.9630146796041135e-02 1.4215614651172759e+00 1.4121615063186521e+00 + 1.0816487310966846e-01 1.5926839519245846e+00 1.8414203383980616e+00 + 1.7892242901145533e-01 1.6673507488573249e+00 2.3179722605051660e+00 + 3.0252869582728359e-01 1.6304226489544502e+00 2.8134726621618054e+00 + 4.7043402022883729e-01 1.4853871209830962e+00 3.2813617046705170e+00 + 6.4949505955049225e-01 1.2441965655381075e+00 3.6695999325333992e+00 + 8.1415967238456266e-01 9.1854986714746167e-01 3.9582916460404212e+00 + 9.8389323731499856e-01 5.1214707305124219e-01 4.1764804319195674e+00 + 1.1911936396144391e+00 4.2206397346121971e-02 4.3477024810992653e+00 + 1.4252987655956832e+00 -4.3168324787677009e-01 4.4539841209019544e+00 + 1.6575537409594661e+00 -8.6845403823690692e-01 4.4897342214444658e+00 + 1.9697675933037702e+00 -1.3353603010666268e+00 4.5180898560632770e+00 + 2.5821030060240573e+00 -1.8833892916907220e+00 4.6229905698894207e+00 + 3.4142188559258493e+00 -2.2358494684269017e+00 4.7739712219386261e+00 + 3.6853628949422741e+00 -2.3212366083456795e+00 4.7446862647499382e+00 + id 13348 + loc 7.8348517417907715e-01 2.2407102584838867e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4499922007660275e-01:3.3903891099275563e-01:4.2603179576590389e-01:2.8263696667596677e-01:1.6175005196559256e+00:4.4499477008440202e-01:2.1724373033063511e+00:3.3408652757114371e-01:2.7719341845900054e+00:2.8469782204167599e-01:3.1881713085927963e+00:3.5386875266242995e-01:3.9779770619401269e+00 + CVs 20 + -1.9788759151452545e-01 2.2961885849144592e-01 1.1368442728689546e-01 + -3.9069001804096948e-01 4.5993736179649702e-01 2.2916043274762565e-01 + -5.9444163451390752e-01 6.7365101612757317e-01 3.5823388264271216e-01 + -8.1463873851221702e-01 8.5986028961591632e-01 5.0691244585381989e-01 + -1.0444397124418758e+00 1.0101253271090778e+00 6.7282052488345223e-01 + -1.2720650672908544e+00 1.1145097392725791e+00 8.5058266224905033e-01 + -1.4857978279367261e+00 1.1658344147421886e+00 1.0360132608813639e+00 + -1.6757898812078162e+00 1.1632509058742797e+00 1.2249041117434942e+00 + -1.8319451295548901e+00 1.1117993516625757e+00 1.4092027937604032e+00 + -1.9475369559786069e+00 1.0211679607315867e+00 1.5801741039735504e+00 + -2.0231176258277905e+00 9.0233767933833353e-01 1.7347947190981721e+00 + -2.0649497792891194e+00 7.6298250495042597e-01 1.8777478366099420e+00 + -2.0803768718288387e+00 6.0681310884482043e-01 2.0167339215947342e+00 + -2.0730983133867955e+00 4.4028799536185481e-01 2.1538973888699009e+00 + -2.0381540602429151e+00 2.9255612328288927e-01 2.2724334508925379e+00 + -1.9569895910132256e+00 2.5483787631467303e-01 2.3351973933128578e+00 + -1.8216467475668598e+00 4.5855811695556181e-01 2.3936380358856142e+00 + -1.7185930455825911e+00 6.5494068756042345e-01 2.5547603102137533e+00 + -1.6807896046249802e+00 3.8515130134151832e-01 2.4332101832267150e+00 + id 13349 + loc 2.5379613041877747e-01 4.2119112610816956e-01 376 + blend 0.0000000000000000e+00 + interp 4.7457875938002647e-01:3.3896051220217854e-01:1.1605022640091656e-01:2.9137425946023576e-01:1.0247437967250412e+00:4.7457401359243268e-01:1.6207571841292632e+00:3.8001603425548902e-01:2.0322082502438397e+00:4.5620710406154641e-01:2.7941336958829903e+00:3.9027273635111209e-01:3.2813577371763811e+00 + CVs 20 + 7.3282594005727542e-01 4.0763820226991487e-01 1.3287772111853857e-01 + 1.3135488669382616e+00 6.2603053044049894e-01 1.1971233649334562e-01 + 1.8536214067463461e+00 7.0631925639466919e-01 5.3850572118300244e-03 + 2.4159268155156055e+00 7.4866625511713925e-01 -1.5578781517241391e-01 + 2.9926151446510425e+00 8.2741174451217914e-01 -2.9984753003067854e-01 + 3.5669312572008001e+00 9.6463869097999455e-01 -3.6564684911382128e-01 + 4.1146717483640423e+00 1.1555873022412571e+00 -3.1462729978837645e-01 + 4.6002634633097426e+00 1.3929278746048790e+00 -1.3945248782007047e-01 + 4.9997740974666263e+00 1.6684441861148589e+00 1.4595257588477462e-01 + 5.3239401928685304e+00 1.9716608481839941e+00 5.3824826181478880e-01 + 5.6105478091752889e+00 2.2733736198994183e+00 1.0512598601712653e+00 + 5.8939405026401399e+00 2.5087070079833040e+00 1.6960729049174943e+00 + 6.1631140734836523e+00 2.5796397340265416e+00 2.4484655789954002e+00 + 6.3589997912764487e+00 2.4127088769101670e+00 3.2197302798200944e+00 + 6.4197571250386796e+00 1.9932959182601167e+00 3.9287189903747564e+00 + 6.3019414815939294e+00 1.2700920055226663e+00 4.5395998777027584e+00 + 6.1104266807104723e+00 1.9093389448222275e-01 4.8931150269525432e+00 + 6.0772696490284215e+00 -9.0403312333922381e-01 4.7719707354530865e+00 + 6.1058738130368049e+00 -1.5342588554274905e+00 4.4348687469458641e+00 + id 13350 + loc 3.7014406919479370e-01 1.6963320970535278e-01 402 + blend 0.0000000000000000e+00 + interp 3.9405097916922277e-01:2.8431335305004102e-01:4.3280139815300600e-01:2.7364409294488334e-01:1.2494837551404223e+00:2.8412556365050151e-01:2.1989116240350932e+00:3.9404703865943108e-01:2.9205133625176973e+00:3.3249861191286550e-01:3.7482752653454465e+00 + CVs 20 + -1.9418491611705446e-01 3.3945266384356171e-01 2.5083908740445360e-01 + -4.0209298084911199e-01 6.5785645557181682e-01 4.4930471182545290e-01 + -6.4338156895703191e-01 9.5273759891727028e-01 5.8647333064375406e-01 + -9.1777553324956140e-01 1.2210106817483546e+00 6.6557591509413072e-01 + -1.2105183008558567e+00 1.4601137052225939e+00 7.0034721708601388e-01 + -1.5074476814545155e+00 1.6722195180538582e+00 7.0347025738619062e-01 + -1.8043511975909179e+00 1.8671902346026963e+00 6.8195128267933769e-01 + -2.1105580050165562e+00 2.0571076360614531e+00 6.4521130451405839e-01 + -2.4331269559539592e+00 2.2462947929392829e+00 6.1088621605286497e-01 + -2.7696003068804815e+00 2.4340324543597101e+00 5.9652360266436211e-01 + -3.1374182628400287e+00 2.6169926238969925e+00 6.0658587628241767e-01 + -3.5815657740308353e+00 2.7693941259851882e+00 6.3643553669059327e-01 + -4.1264441230493816e+00 2.8223029779839033e+00 6.8941200430078720e-01 + -4.7320503508014156e+00 2.6981022232832310e+00 7.8162706998701403e-01 + -5.3098922823024406e+00 2.3808253683164109e+00 9.3824748589693074e-01 + -5.7712972078234746e+00 1.9324956987627968e+00 1.1791843254398406e+00 + -6.0811176862754941e+00 1.4633484994147499e+00 1.5068573870071085e+00 + -6.2564859653431846e+00 1.1306163785398522e+00 1.9113865546945443e+00 + -6.2856201133471066e+00 1.1393836533251576e+00 2.3268752681262965e+00 + id 13351 + loc 4.0479654073715210e-01 1.5876938402652740e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9475045629745725e-01:2.6962988382269693e-01:6.4140148808176756e-01:3.9474650879289430e-01:1.0749114733093703e+00:2.9451304506205600e-01:2.1102273029193297e+00:2.9144987942037576e-01:3.0696202487513231e+00:3.0033570371229923e-01:3.8526540660216932e+00 + CVs 20 + 4.2978118006879318e-01 4.6269547043404780e-01 -1.3208953323749918e-02 + 6.6007818149134923e-01 7.8988293224942763e-01 -3.7597427459812482e-02 + 8.4076193525671239e-01 1.0791634174120985e+00 -8.2818300552117557e-02 + 1.0456772210960945e+00 1.3610496452265672e+00 -1.4713754988832115e-01 + 1.2669839299005701e+00 1.6286205900563437e+00 -2.3039450618898918e-01 + 1.4943860306585219e+00 1.8763321137637206e+00 -3.2958794373684575e-01 + 1.7156467269498197e+00 2.1033548903858255e+00 -4.4118714126885356e-01 + 1.9223770592907792e+00 2.3154170033299093e+00 -5.6654752369166927e-01 + 2.1136641749546934e+00 2.5215350681326649e+00 -7.2090725782124165e-01 + 2.2801313904550997e+00 2.7125102671725796e+00 -9.3899201872187876e-01 + 2.3858196284718929e+00 2.8350409677506176e+00 -1.2285321622261713e+00 + 2.4104374678565681e+00 2.8473583151510624e+00 -1.5339986897079114e+00 + 2.3687434594739138e+00 2.7595397912447726e+00 -1.8111160478910784e+00 + 2.2780044655069518e+00 2.5952448784047704e+00 -2.0515665813548067e+00 + 2.1464740689111035e+00 2.3749963334865578e+00 -2.2596765328489830e+00 + 1.9784518114067073e+00 2.1175915526658393e+00 -2.4436210305467867e+00 + 1.7999680151535640e+00 1.8249046420009432e+00 -2.6134038305042888e+00 + 1.6959413964998888e+00 1.4696502522256152e+00 -2.7730248762911951e+00 + 1.7673029696684686e+00 1.0529534208618321e+00 -2.9026378432692859e+00 + id 13352 + loc 9.5359903573989868e-01 9.9162411689758301e-01 403 + blend 0.0000000000000000e+00 + interp 3.9966511930013793e-01:3.0918259387338815e-01:8.8061054291336627e-01:3.9966112264894493e-01:1.2205903907937852e+00:3.0486281222009831e-01:1.8996007512972191e+00:3.4912112029382825e-01:2.2159795818544472e+00:2.1555083234600728e-01:2.9512099113512189e+00:3.3041914343724121e-01:3.9935712638359799e+00 + CVs 20 + -5.4595810038221511e-02 -7.0334680544559824e-02 1.1734517520890550e-01 + -8.7104065201530190e-02 -1.3645113478184973e-01 2.4375566712048968e-01 + -1.1747739583572239e-01 -1.8180172393639060e-01 3.7924980338482495e-01 + -1.3729381013550793e-01 -2.1529028296974606e-01 5.0356563391427100e-01 + -1.4240917423646823e-01 -2.3735186045200243e-01 6.0990691635971428e-01 + -1.3119404696831674e-01 -2.4805831195633113e-01 6.9076149965968991e-01 + -1.0630100944096560e-01 -2.4740570953176724e-01 7.3896705148805220e-01 + -7.4772263845614723e-02 -2.3594914474702600e-01 7.4894127197519311e-01 + -4.6431094173877557e-02 -2.1486497279420869e-01 7.1796432292455870e-01 + -3.1457938838273830e-02 -1.8544816975992920e-01 6.4670751645539670e-01 + -3.6937583898653009e-02 -1.4697162146097284e-01 5.3712092764327479e-01 + -6.8722245748797040e-02 -9.4979680651246179e-02 3.9368643770590195e-01 + -1.3751799968780745e-01 -3.3541364833288623e-02 2.2749865507512346e-01 + -2.5923382202589906e-01 4.2531463235198630e-04 5.1486369453976569e-02 + -4.5018365945879157e-01 -4.6135181777797740e-02 -1.1910429404396439e-01 + -7.1911977033381569e-01 -1.7315625960415545e-01 -2.4482697106915621e-01 + -1.0422862032370288e+00 -3.0604571678963277e-01 -2.8118271089616320e-01 + -1.3704324525248057e+00 -3.6942397415797862e-01 -2.3463020476007734e-01 + -1.5029039130177309e+00 -2.5732783342655452e-01 -1.7100847738483346e-01 + id 13353 + loc 7.8734476119279861e-03 4.9829560518264771e-01 373 + blend 0.0000000000000000e+00 + interp 4.0446161957560794e-01:3.8782871435344235e-01:3.2493327986495046e-01:2.4573897029745331e-01:1.1319512512402767e+00:3.2989723456813613e-01:2.0244274735819103e+00:4.0445757495941220e-01:2.9986231289412704e+00:2.6932586596988728e-01:3.9653917011940409e+00 + CVs 20 + -1.5844891965152746e-01 8.3052380285381344e-01 3.0724277133404598e-01 + -3.2776292968409576e-01 1.6395953611917173e+00 5.4522474626470929e-01 + -5.5286353993500115e-01 2.4419558964273347e+00 6.8152528891115061e-01 + -8.7470371484970511e-01 3.2420137887806693e+00 6.6490460467226731e-01 + -1.3227782286792120e+00 3.9907581028743611e+00 4.1584706999260268e-01 + -1.8828377406453600e+00 4.5506062635996321e+00 -1.1323392773219232e-01 + -2.4642718474203962e+00 4.7222212000659702e+00 -8.7441229805870213e-01 + -2.9487344545399390e+00 4.4400598183136468e+00 -1.7086698509257967e+00 + -3.2660244938550851e+00 3.7904750524486825e+00 -2.4920200554876866e+00 + -3.3439726393622746e+00 2.9093528467179235e+00 -3.1747986076720278e+00 + -3.1085652832578154e+00 1.9915032926069702e+00 -3.7380062045192459e+00 + -2.5789317723633398e+00 1.2106959359972698e+00 -4.1608984240490319e+00 + -1.8640700627770721e+00 5.8806598961821988e-01 -4.4478615496476701e+00 + -1.0685958869395233e+00 4.3206197422319459e-02 -4.6209445561425486e+00 + -2.8633749046224455e-01 -5.2998298799996135e-01 -4.7641898371332969e+00 + 2.8295114310450098e-01 -1.2449139355904428e+00 -5.1142190013955560e+00 + 3.5313547491416364e-01 -1.8726182859188480e+00 -5.7626346753340210e+00 + 6.8431970918598151e-02 -2.1342446454944324e+00 -6.5767615768817542e+00 + -3.8761051213723180e-01 -2.0743845958456371e+00 -7.5855163996559654e+00 + id 13354 + loc 1.9454224407672882e-01 1.7543345689773560e-01 412 + blend 0.0000000000000000e+00 + interp 4.4489741136685024e-01:4.4489296239273657e-01:3.8846074302431333e-01:4.2915507079426218e-01:9.2315316086508159e-01:3.1218542653763265e-01:1.3441227744703945e+00:3.2389984208819056e-01:2.0011599909966340e+00:4.1405902763785213e-01:2.4369541971502509e+00:2.6996377352003453e-01:3.2605961839898638e+00:3.5480656719959786e-01:3.9982708845342660e+00 + CVs 20 + -1.1005951775415479e-01 1.4420288986544727e-01 -5.1632580324653521e-01 + -2.2683733785033769e-01 2.1680409648582077e-01 -9.0467022270898834e-01 + -3.3551852626494361e-01 2.7217118389485212e-01 -1.2672731411282134e+00 + -4.3111719528908954e-01 3.3507951616992981e-01 -1.6602085341069852e+00 + -5.0552489341757800e-01 3.9947946718460503e-01 -2.0830166674050159e+00 + -5.4797908684323993e-01 4.5940984120480066e-01 -2.5318841217063488e+00 + -5.4836010598299678e-01 5.0967944807285703e-01 -2.9997335257614135e+00 + -5.0226682736354522e-01 5.4562754881752862e-01 -3.4771960682791341e+00 + -4.1044283623697175e-01 5.6495443664553124e-01 -3.9533301948654782e+00 + -2.7662080461194660e-01 5.6920658837048244e-01 -4.4168602692215568e+00 + -1.1725482535994314e-01 5.5429978485741116e-01 -4.8650740885746284e+00 + 1.9654695853877913e-02 4.8996031496985903e-01 -5.3184171461691108e+00 + 6.6452397452795187e-02 3.3585414148471759e-01 -5.7968822285400332e+00 + 4.6673593034340932e-05 1.0350230596634136e-01 -6.2751503469455709e+00 + -1.4719653754023210e-01 -1.6169198444798027e-01 -6.7239452224684948e+00 + -3.5903525417095417e-01 -4.3637287810571612e-01 -7.1332948678987771e+00 + -6.4264289169671307e-01 -7.0447372780951545e-01 -7.4899698704956599e+00 + -9.8837378496573691e-01 -9.4119650689087697e-01 -7.7829669942195281e+00 + -1.1771311564529530e+00 -1.0437502818045559e+00 -8.0979628253557401e+00 + id 13355 + loc 5.3954583406448364e-01 3.5243198275566101e-01 396 + blend 0.0000000000000000e+00 + interp 4.7373432329769077e-01:4.2735109178663622e-01:6.5450798850111747e-01:3.1755133342920216e-01:1.0339548541256265e+00:3.8844593714738007e-01:1.7048325011419414e+00:2.7997613543143868e-01:2.1886890046918577e+00:4.6752302291011477e-01:2.9517753820276886e+00:4.7372958595445780e-01:3.4303293496789404e+00:2.8315463381799100e-01:3.9998317063640032e+00 + CVs 20 + -7.3855155301703879e-01 2.3813936242848807e-01 3.1771206839379323e-01 + -1.2917331870965134e+00 3.4611829224231061e-01 5.8364675834549795e-01 + -1.8140302679386759e+00 4.1256909344562476e-01 8.4342363852478064e-01 + -2.3642270322139751e+00 4.6498639733369468e-01 1.1180039809566489e+00 + -2.9316993898339341e+00 4.9163766724195712e-01 1.4112216361176566e+00 + -3.5006993288066153e+00 4.8030741678215860e-01 1.7298090024798281e+00 + -4.0526314885308246e+00 4.1739402908369994e-01 2.0785803526480948e+00 + -4.5689513861081918e+00 2.8598309574145686e-01 2.4541039437248515e+00 + -5.0278169975894222e+00 7.1565013808924993e-02 2.8460344322774587e+00 + -5.3990542646179902e+00 -2.2684848536082702e-01 3.2406659626423640e+00 + -5.6558406154123420e+00 -5.9260297030975373e-01 3.6209862916864339e+00 + -5.7987926827464564e+00 -1.0010972089111374e+00 3.9664564482961433e+00 + -5.8481099957805576e+00 -1.4318240873523136e+00 4.2608167351243482e+00 + -5.8231920025970538e+00 -1.8643913760632405e+00 4.4943815949112329e+00 + -5.7431109297550282e+00 -2.2808657653724271e+00 4.6619188118262871e+00 + -5.6296934507849308e+00 -2.6740313609453059e+00 4.7608477061465617e+00 + -5.5040654004445893e+00 -3.0406437462112841e+00 4.7926458484924730e+00 + -5.3869347324773091e+00 -3.3830852459961882e+00 4.7698748979594967e+00 + -5.3111901585824368e+00 -3.7668322443187967e+00 4.7420428898224785e+00 + id 13356 + loc 6.6172569990158081e-01 7.4011904001235962e-01 375 + blend 0.0000000000000000e+00 + interp 4.1771049424842543e-01:2.5616442814957330e-01:4.0278451301145157e-02:2.6152141286071007e-01:1.4131750582802536e+00:3.5999613556346421e-01:2.3840939451194396e+00:3.3507925322988957e-01:2.9715717018481671e+00:4.1770631714348300e-01:3.1486963729189128e+00 + CVs 20 + -4.4650557786434675e-01 5.0024053452515038e-01 -2.6067699054053939e-01 + -9.6041991667210691e-01 8.6180347263427259e-01 -4.3604726169614222e-01 + -1.5385395111935274e+00 1.0578412561170987e+00 -5.2151589609417215e-01 + -2.1059024465813652e+00 1.1813498929844757e+00 -5.3832708350627567e-01 + -2.6019121203680848e+00 1.3188749299030857e+00 -5.2401229528139948e-01 + -3.0124034103415158e+00 1.4888793620269170e+00 -5.1655556487401177e-01 + -3.3648000590890508e+00 1.6813738696202383e+00 -5.3518443577154073e-01 + -3.6918060923141711e+00 1.8913011349132773e+00 -5.9113852474458528e-01 + -4.0189570622793891e+00 2.1200967960305932e+00 -7.0581188250538973e-01 + -4.3646430176767446e+00 2.3692840675118294e+00 -9.1667793996389135e-01 + -4.7261631920815432e+00 2.6188004171484609e+00 -1.2540495243453895e+00 + -5.0894232480750761e+00 2.8236557263518929e+00 -1.7258383225525336e+00 + -5.4237959591907288e+00 2.9171632181584681e+00 -2.3256490993682615e+00 + -5.6700650737989777e+00 2.8232048216583516e+00 -3.0094720618279123e+00 + -5.7788128499896629e+00 2.5063420142770418e+00 -3.6833292049147710e+00 + -5.7717298620135793e+00 2.0023393830146712e+00 -4.1979861348987448e+00 + -5.7902243679083636e+00 1.4641854169251540e+00 -4.4079194015906227e+00 + -5.9057444513327972e+00 1.0811263240398685e+00 -4.3452144075458614e+00 + -6.0207518221133327e+00 5.9426964014583072e-01 -4.2415559842552151e+00 + id 13357 + loc 8.7274163961410522e-01 6.9059425592422485e-01 1068 + blend 0.0000000000000000e+00 + interp 3.0413927885493286e-01:3.0413623746214430e-01:4.2340008783688587e-01:2.6606392869830725e-01:1.0401554114972655e+00:2.7562656311641726e-01:2.1621190223213356e+00:2.6328338794246087e-01:3.0072647902261465e+00:2.8946349572715235e-01:3.9188853806509427e+00 + CVs 20 + 1.2315649992969761e-01 4.4678972649358512e-01 -2.9555078209509777e-01 + 2.7078863827756672e-01 8.7200089955743953e-01 -5.3306779837991014e-01 + 4.4528953767147206e-01 1.2772523072959752e+00 -7.2576044168233567e-01 + 6.5351975219986858e-01 1.6591837816608515e+00 -8.9680919864260433e-01 + 9.0776772994466026e-01 2.0073947314520200e+00 -1.0803200394929675e+00 + 1.2131877989423494e+00 2.2988436147738551e+00 -1.3148654092665155e+00 + 1.5599703971931524e+00 2.5019495250540742e+00 -1.6168057278009820e+00 + 1.9274476932999589e+00 2.5957844969243613e+00 -1.9711157067891287e+00 + 2.2934157296988706e+00 2.5772743500720803e+00 -2.3484255484231720e+00 + 2.6378035823351227e+00 2.4571431809614435e+00 -2.7215812098478298e+00 + 2.9440154419503317e+00 2.2583862361346596e+00 -3.0683038095227206e+00 + 3.2055728226030347e+00 2.0146450056937786e+00 -3.3760428584553144e+00 + 3.4305724212499999e+00 1.7530054368326780e+00 -3.6559478249273591e+00 + 3.6360008263374199e+00 1.4753889199901349e+00 -3.9459855521853493e+00 + 3.8298003546200832e+00 1.1641696714304124e+00 -4.2889008868166529e+00 + 3.9970344435617835e+00 7.9823534230962956e-01 -4.7120487654074790e+00 + 4.1097714572406314e+00 3.7826239282273466e-01 -5.2313057225102302e+00 + 4.1256374297372895e+00 -1.9055248627063204e-02 -5.8142488021563139e+00 + 4.0473357724052743e+00 -1.9294518705064134e-01 -6.1893761305725201e+00 + id 13358 + loc 9.0240073204040527e-01 6.7443853616714478e-01 400 + blend 0.0000000000000000e+00 + interp 4.5729365541878886e-01:3.5378075161762540e-01:3.1742230498222945e-01:3.8359603494346051e-01:9.4312516043397077e-01:2.9561232830514456e-01:1.4403999277265420e+00:3.1494130419929800e-01:2.3173504945328980e+00:3.7061077128383840e-01:2.5560385706725648e+00:4.5728908248223471e-01:3.0445579807724656e+00:3.8956587437568896e-01:3.9883513016717282e+00 + CVs 20 + -1.6255247818375546e-01 1.7212904271000379e-01 -2.3656604003644086e-01 + -3.2083005019999111e-01 3.3674953389224682e-01 -4.7689953080758762e-01 + -4.5882322876751358e-01 4.9566685597977322e-01 -7.3294691384956234e-01 + -5.7050133027670702e-01 6.4512473257654102e-01 -1.0042644105658749e+00 + -6.5882314121120067e-01 7.8004773809317474e-01 -1.2854168930043384e+00 + -7.2458734276589043e-01 8.9942712397047953e-01 -1.5725232854044040e+00 + -7.6524517926035351e-01 1.0058918656831612e+00 -1.8631080643610800e+00 + -7.7806612677303477e-01 1.0996495515619169e+00 -2.1560471969872559e+00 + -7.6214319688502474e-01 1.1739133477084909e+00 -2.4503313165886826e+00 + -7.1914402558782864e-01 1.2196193215783833e+00 -2.7422651340285800e+00 + -6.5265738958835373e-01 1.2323640146897399e+00 -3.0253630256130082e+00 + -5.6843924564076365e-01 1.2123476034467007e+00 -3.2923780985554787e+00 + -4.7658691420102373e-01 1.1612065993023721e+00 -3.5341672640600681e+00 + -3.8934311453677117e-01 1.0830462927176820e+00 -3.7399400970761176e+00 + -3.1298441441287683e-01 9.8820045446781735e-01 -3.9028614726788939e+00 + -2.4159015120267618e-01 8.9138415796591963e-01 -4.0236173444881480e+00 + -1.5946785572221242e-01 7.9863663268329388e-01 -4.1050429378850026e+00 + -4.2712170427832402e-02 6.7956104859738709e-01 -4.1378857301243359e+00 + 1.9696581390555368e-01 3.2928324764368755e-01 -4.0620741959956428e+00 + id 13359 + loc 8.4977811574935913e-01 2.2477343678474426e-01 409 + blend 0.0000000000000000e+00 + interp 5.1606046512356196e-01:3.0888139444777518e-01:9.2274000772440967e-01:3.6904052354995370e-01:1.7518698853952950e+00:3.4722535634731633e-01:2.0713424708819717e+00:3.0996249242497526e-01:2.8435390030151377e+00:5.1605530451891080e-01:3.5600175828270082e+00:3.5696914141335945e-01:3.9901875053147902e+00 + CVs 20 + -2.7954661180656898e-01 1.9766152815969207e-01 1.6259831093958604e-01 + -5.5153778920229868e-01 4.0368510023726195e-01 3.1574758190938856e-01 + -8.2623638305945857e-01 6.1671451935493837e-01 4.5032093350692737e-01 + -1.1103579191568649e+00 8.3191313013597101e-01 5.6526792609561172e-01 + -1.4064177182602511e+00 1.0420793673387576e+00 6.6266224485986580e-01 + -1.7165898072616006e+00 1.2405984686261491e+00 7.4483595104491718e-01 + -2.0475693545459248e+00 1.4204400584385413e+00 8.1487656873919778e-01 + -2.4106986647504351e+00 1.5698074270359839e+00 8.7594755798793678e-01 + -2.8157248298566291e+00 1.6703311815921462e+00 9.3287035402623197e-01 + -3.2651035859545496e+00 1.6979678828562350e+00 9.9647358369390626e-01 + -3.7437742465926340e+00 1.6260168069406860e+00 1.0787932419742852e+00 + -4.2125737863436585e+00 1.4418273594721032e+00 1.1793101091572773e+00 + -4.6330880389928115e+00 1.1584833862276427e+00 1.2870175552048717e+00 + -4.9887784175262428e+00 7.9620343020338602e-01 1.3968669966159522e+00 + -5.2724032095158151e+00 3.7046711703734791e-01 1.5090466447837503e+00 + -5.4749240992559454e+00 -1.0218332507109151e-01 1.6150363991343721e+00 + -5.5903656629261871e+00 -5.9829995173370065e-01 1.6955782097288554e+00 + -5.6288400599978594e+00 -1.0900273019589091e+00 1.7438785044521268e+00 + -5.6809189675200198e+00 -1.5013868663936201e+00 1.8056222998811826e+00 + id 13360 + loc 4.8649078235030174e-03 6.6246114671230316e-02 415 + blend 0.0000000000000000e+00 + interp 4.3558088912553233e-01:4.1096626053024166e-01:3.6202401307265886e-01:3.4180693180051280e-01:1.3783730292180822e+00:3.1368499602133881e-01:2.0987701181392171e+00:1.8235509976913575e-01:2.9771685878007244e+00:4.3557653331664109e-01:3.5827223155314716e+00 + CVs 20 + 1.2718412104038307e-01 1.5452379910485456e-01 -1.1754023930025230e-01 + 2.2981227286720440e-01 3.0839466537534477e-01 -1.9363772109977939e-01 + 3.3049128079382312e-01 4.3110834192129321e-01 -2.5940810372804118e-01 + 4.4903097255769009e-01 5.4247730341898781e-01 -3.2930775083938463e-01 + 5.8760705058967577e-01 6.3855210948835961e-01 -4.0146521682815628e-01 + 7.4578368032600950e-01 7.1500752139759249e-01 -4.7335045097214806e-01 + 9.2106303510127829e-01 7.6964624276707494e-01 -5.4176885033457278e-01 + 1.1094167453131671e+00 8.0473375078242204e-01 -6.0267404435782990e-01 + 1.3060340970073918e+00 8.2406306978794996e-01 -6.5203842520819033e-01 + 1.5046806001172093e+00 8.2728983322757599e-01 -6.8923654619157493e-01 + 1.6971425813669483e+00 8.0852316334264673e-01 -7.2163807182926887e-01 + 1.8763525518979194e+00 7.6610453233604203e-01 -7.6021871618781656e-01 + 2.0411288450001326e+00 7.1126352118949954e-01 -8.0613340559376467e-01 + 2.1941789932058398e+00 6.5814944213729454e-01 -8.5175270681803916e-01 + 2.3366974103486058e+00 6.1363456340053779e-01 -8.9047493677084089e-01 + 2.4663237152251369e+00 5.7685018654690712e-01 -9.2290368501681508e-01 + 2.5803638407333742e+00 5.4522082220545443e-01 -9.5412957023215217e-01 + 2.6793043814614284e+00 5.1824184839131826e-01 -9.8311149716255986e-01 + 2.7793384577202276e+00 5.4811067546820458e-01 -1.0017610714814067e+00 + id 13361 + loc 7.3812282085418701e-01 8.8503891229629517e-01 395 + blend 0.0000000000000000e+00 + interp 4.3631082268326626e-01:4.3365923504389731e-01:3.0923349787072418e-01:4.3589719520502840e-01:9.1799998158471385e-01:2.7761796914869030e-01:1.1360194160898736e+00:3.0387269602497641e-01:2.1517635354206526e+00:4.1283530634574389e-01:2.9689010446919690e+00:4.2549824501762934e-01:3.4037782402844670e+00:4.3630645957503944e-01:3.9940900670979271e+00 + CVs 20 + 5.8432168541669582e-01 9.5282808559575272e-02 -4.7528844319937047e-01 + 1.0537772149821112e+00 1.0318387822650954e-01 -8.7236059973212765e-01 + 1.5084298160462164e+00 8.4732507967427040e-02 -1.2439584480951611e+00 + 1.9872375216950127e+00 5.8246960200737385e-02 -1.6043033986038733e+00 + 2.4842330994549378e+00 1.5233379175418671e-02 -1.9409194912623018e+00 + 2.9897272143518929e+00 -5.3170499182493280e-02 -2.2468761046627641e+00 + 3.4911957627798964e+00 -1.5623171122005264e-01 -2.5178732166545092e+00 + 3.9734392648972423e+00 -3.0530424558843050e-01 -2.7457762282907821e+00 + 4.4190692627642818e+00 -5.0933815811061534e-01 -2.9236540884484419e+00 + 4.8127252404696126e+00 -7.6926534167933047e-01 -3.0570104406574994e+00 + 5.1492326448007439e+00 -1.0760194017790683e+00 -3.1580181190156558e+00 + 5.4389371890875244e+00 -1.4099867508403823e+00 -3.2294243709801362e+00 + 5.6991590733786008e+00 -1.7502891816355408e+00 -3.2693902199467484e+00 + 5.9408300089546486e+00 -2.0883498996367420e+00 -3.2875655723486839e+00 + 6.1660587734443260e+00 -2.4287118098364875e+00 -3.3019638067296406e+00 + 6.3667181172848242e+00 -2.7737070110636202e+00 -3.3188415184918933e+00 + 6.5309328949019720e+00 -3.1118551699253567e+00 -3.3291708008278333e+00 + 6.6545742519399731e+00 -3.4328608426164875e+00 -3.3296545372081643e+00 + 6.7780479210082962e+00 -3.7913739323145532e+00 -3.3916047549891108e+00 + id 13362 + loc 7.5136744976043701e-01 2.1320864558219910e-01 393 + blend 0.0000000000000000e+00 + interp 5.0708344726177967e-01:4.8946625971646862e-01:5.8820727727446398e-02:5.0707837642730713e-01:5.7286226821275310e-01:3.5915715112245689e-01:1.0349328389457597e+00:2.8904950480346464e-01:1.7879405946333105e+00:3.9996512395940698e-01:2.5898198021352972e+00:3.2341330555864473e-01:3.2483986106273122e+00:4.9486316948874032e-01:3.8553130660711226e+00 + CVs 20 + 2.2719781749178503e-01 3.1997076171066552e-01 2.2119974964829908e-01 + 4.4117109628089179e-01 6.2250027155310406e-01 4.2932828636639170e-01 + 6.3472317114341281e-01 9.2492521455878351e-01 6.3011046508321744e-01 + 8.0071018583000009e-01 1.2231416182057693e+00 8.2802089408562751e-01 + 9.3951560803722245e-01 1.4983047159512557e+00 1.0406840417345737e+00 + 1.0524412329431418e+00 1.7401691439492248e+00 1.2977463878524000e+00 + 1.1276739183315643e+00 1.9530546035049183e+00 1.6212685963345868e+00 + 1.1513847914866360e+00 2.1462642513079961e+00 2.0206745375868778e+00 + 1.1290091379765732e+00 2.3217460042918758e+00 2.4962048182316345e+00 + 1.0852870279394793e+00 2.4713771486913512e+00 3.0451736496918325e+00 + 1.0557234276980199e+00 2.5741805699851628e+00 3.6658239644975676e+00 + 1.0803229974826782e+00 2.5923166501244403e+00 4.3535689744022701e+00 + 1.1969414840138384e+00 2.4634511792249798e+00 5.0972487162623636e+00 + 1.4386711653153630e+00 2.1036709886773961e+00 5.8501632435942277e+00 + 1.8373124983174756e+00 1.4406405766556025e+00 6.4882965425129484e+00 + 2.4180897669404429e+00 5.0677236121664615e-01 6.8166109162479600e+00 + 3.1793756601977834e+00 -4.7698868525665561e-01 6.7036124712400849e+00 + 4.0087977779310409e+00 -1.2218236593304279e+00 6.2422599400071581e+00 + 4.5832890264306387e+00 -1.6487057666210807e+00 5.8584624605449429e+00 + id 13363 + loc 5.0188404321670532e-01 9.5332324504852295e-01 402 + blend 0.0000000000000000e+00 + interp 4.7398797812072291e-01:3.0590494382950534e-01:1.1240430677643098e-01:3.1541239869142679e-01:1.0000243323423712e+00:4.0321638315529862e-01:1.5921461245941135e+00:4.7398323824094174e-01:2.1387665629280406e+00:3.4943654679178043e-01:2.8537433179729783e+00:3.8210777802657148e-01:3.7895032243584161e+00 + CVs 20 + 3.6097990952947676e-02 1.5243937229013660e-01 -2.6590593857347078e-01 + 9.7329013760524344e-02 3.0086818442111529e-01 -5.1818895629541539e-01 + 1.6279369541118366e-01 4.4321900561055477e-01 -7.6615353510452411e-01 + 2.1882323283833890e-01 5.8599782776277554e-01 -1.0135747856336912e+00 + 2.5400821361932802e-01 7.3483448460763612e-01 -1.2625943793952619e+00 + 2.5925044119032092e-01 8.8636703594597632e-01 -1.5131102112211194e+00 + 2.2808718460186661e-01 1.0343477925561158e+00 -1.7657823728725659e+00 + 1.5553116660724042e-01 1.1762815225026690e+00 -2.0211693264495167e+00 + 3.7320290391698929e-02 1.3119353801110374e+00 -2.2771620829347792e+00 + -1.2998411084759387e-01 1.4395655640496843e+00 -2.5289661115683768e+00 + -3.5089163310443838e-01 1.5536643843187281e+00 -2.7701618960030059e+00 + -6.2736091957017215e-01 1.6495011257628946e+00 -2.9893739729361037e+00 + -9.5927644198460871e-01 1.7276658234652209e+00 -3.1725177271585463e+00 + -1.3401135415531389e+00 1.7981657229116641e+00 -3.3021387750807443e+00 + -1.7606387421332388e+00 1.8813486253596137e+00 -3.3535255476953689e+00 + -2.2035192581463803e+00 1.9789737287758802e+00 -3.3033805632531834e+00 + -2.6523324959101586e+00 2.0453111870718530e+00 -3.1577451141874806e+00 + -3.0988035971907890e+00 2.0321939295995994e+00 -2.9457014851551229e+00 + -3.4803227666906773e+00 2.1234527742708851e+00 -2.9175132058323046e+00 + id 13364 + loc 2.6892530918121338e-01 2.6448504999279976e-02 380 + blend 0.0000000000000000e+00 + interp 4.5395694043378992e-01:3.0994736887176166e-01:8.4856766722335375e-01:4.5395240086438560e-01:1.4048299705091358e+00:4.0791476978425684e-01:2.0922748328153022e+00:2.5237213484579268e-01:2.6056757690288386e+00:3.4816083976820483e-01:3.0110131551705228e+00:4.3239244745892291e-01:3.7449002757072161e+00 + CVs 20 + -4.6402256078778531e-01 4.2962104506765469e-01 6.5705461567485268e-01 + -7.8356309848043493e-01 7.4320393857793654e-01 1.1913944893630186e+00 + -1.0627154377010224e+00 1.0031690263637623e+00 1.6994599773907164e+00 + -1.3444705778208508e+00 1.2282011650471354e+00 2.2183906592493363e+00 + -1.6332639851346373e+00 1.4012400630917143e+00 2.7410159960213805e+00 + -1.9303868216529736e+00 1.4997503409143231e+00 3.2632366357373788e+00 + -2.2297174387740379e+00 1.5039188064553239e+00 3.7762308982284001e+00 + -2.5209481612175217e+00 1.4077054100506179e+00 4.2636985406774865e+00 + -2.7959544042873055e+00 1.2232170507737228e+00 4.7044890134669295e+00 + -3.0513779118714406e+00 9.7787312362374612e-01 5.0800035498022025e+00 + -3.2881885720423742e+00 7.0429916921546099e-01 5.3880389461355476e+00 + -3.5073388242063430e+00 4.2093725367174795e-01 5.6414420550499464e+00 + -3.6944180746949278e+00 1.0844921762212989e-01 5.8414877228975399e+00 + -3.8051836233714988e+00 -2.8964948034460170e-01 5.9716662786076480e+00 + -3.8392241276244681e+00 -8.0328562791045632e-01 6.0343061598778522e+00 + -3.8642462782196434e+00 -1.3943367172697281e+00 6.0605422366977706e+00 + -3.9398698164314681e+00 -1.9715019711702788e+00 6.0917450327507821e+00 + -4.0583724398086716e+00 -2.4662806223941520e+00 6.1912892614358093e+00 + -4.1680633885823291e+00 -2.8739896029121854e+00 6.4726491332154890e+00 + id 13365 + loc 8.1856626272201538e-01 1.3297057151794434e-01 407 + blend 0.0000000000000000e+00 + interp 6.6490060868297385e-01:5.7990978774890600e-01:1.0033782187308762e+00:4.7430556726909906e-01:1.0184732743536900e+00:3.4083621838209327e-01:1.3731501062641338e+00:2.9959171088138148e-01:2.1094030607370668e+00:3.1634347510672800e-01:2.9979154536296924e+00:6.6489395967688703e-01:3.1283213223728978e+00 + CVs 20 + -3.7334635921988790e-01 3.0677419792687505e-01 1.0825183762375543e-01 + -5.6343740046054880e-01 4.6325193293106581e-01 1.9181555545150500e-01 + -6.6859699588446320e-01 5.5499643783402131e-01 2.6556074855858069e-01 + -7.7581978281983621e-01 6.3887975050733015e-01 3.3448583739519133e-01 + -8.7960164489497494e-01 7.1403147178739435e-01 3.9952131913115341e-01 + -9.7392619450683693e-01 7.8046393556222138e-01 4.6356895757453087e-01 + -1.0548404130060054e+00 8.4187640229048299e-01 5.3141114233427078e-01 + -1.1265549853969032e+00 9.0661875254772295e-01 6.0438819529102727e-01 + -1.2055098417470043e+00 9.7533675724557423e-01 6.6716466109665507e-01 + -1.3005941819700544e+00 1.0276080831371197e+00 6.9335810999855396e-01 + -1.4043242604987118e+00 1.0452543948525932e+00 6.7231786009274475e-01 + -1.5112181489616954e+00 1.0266536925498486e+00 6.0681752069914419e-01 + -1.6213758792720885e+00 9.7330766857314654e-01 5.0015259781875665e-01 + -1.7373197387380577e+00 8.8241673531840747e-01 3.5303174055419717e-01 + -1.8655900885751935e+00 7.6151441991866275e-01 1.6783808879975423e-01 + -2.0154350143564175e+00 6.3993252011560142e-01 -4.5341532298186771e-02 + -2.1907133380235586e+00 5.5078179023621598e-01 -2.6864543879361613e-01 + -2.3876646864700994e+00 5.1041292992401732e-01 -4.8549005406513424e-01 + -2.5939919818658552e+00 5.0046039991135816e-01 -6.9472104153351322e-01 + id 13366 + loc 1.3553875684738159e-01 2.6382964849472046e-01 399 + blend 0.0000000000000000e+00 + interp 3.8206256822588508e-01:2.9650842716821774e-01:3.9814552409165427e-02:3.8205874760020286e-01:8.8489891522357489e-01:2.7535925244509180e-01:1.8240297111268928e+00:2.9765259763648244e-01:2.3786920634497588e+00:3.4814049674281589e-01:3.4832337511657316e+00 + CVs 20 + -1.0482585484281602e-01 3.2991650411123163e-01 1.7038611997442271e-01 + -2.5883625137325178e-01 6.6458014330201054e-01 3.1713601004117603e-01 + -4.5670958026998154e-01 9.8997640056560954e-01 4.3419404109316884e-01 + -6.8936259716303272e-01 1.2999020296114516e+00 5.3136529511082586e-01 + -9.4905147489981545e-01 1.5942659898638276e+00 6.2832371127192921e-01 + -1.2318983333384470e+00 1.8693125111172795e+00 7.4374452213333497e-01 + -1.5393409079831613e+00 2.1131880728878332e+00 8.9212296923198886e-01 + -1.8740834627887779e+00 2.3033615571290253e+00 1.0841699718194886e+00 + -2.2321031545130645e+00 2.4043573035998422e+00 1.3220359068217131e+00 + -2.5951484337355231e+00 2.3754354205013546e+00 1.5890349778992081e+00 + -2.9288210267096559e+00 2.1951817795348911e+00 1.8449888884056067e+00 + -3.2025864433836717e+00 1.8978989972890443e+00 2.0453782925793025e+00 + -3.4245437960483880e+00 1.5506731622697822e+00 2.1816341226209723e+00 + -3.6283092017442056e+00 1.2073354855836362e+00 2.2698365133578986e+00 + -3.8544445612999181e+00 9.2358762913540959e-01 2.3209663170313704e+00 + -4.1210451867784759e+00 7.5625227200832856e-01 2.3097374720088473e+00 + -4.3614090582358216e+00 7.6437366189636036e-01 2.1392752497954644e+00 + -4.4247101230589303e+00 8.9949320199061455e-01 1.7989138245425826e+00 + -4.7824408256632474e+00 7.8440799936775041e-01 1.7292007696644294e+00 + id 13367 + loc 3.9055591821670532e-01 7.0591740310192108e-02 401 + blend 0.0000000000000000e+00 + interp 4.7849324300295865e-01:3.1635038932202586e-01:4.2585779576248051e-01:4.7848845807052864e-01:1.0998883054200919e+00:2.6102130501169024e-01:2.0000899594843045e+00:3.8652331717364069e-01:2.4848100519066256e+00:3.8938758309317956e-01:3.2609662564560060e+00:4.1900051633648672e-01:3.9987090420316025e+00 + CVs 20 + -1.8852906567245720e-01 3.3331594075395765e-01 1.0852488407307714e-01 + -4.0738936675440818e-01 6.6772462027288704e-01 2.3771265918074430e-01 + -6.3968657685689512e-01 9.9211739492344797e-01 3.8442248754142960e-01 + -8.8129700674116340e-01 1.2924080160500933e+00 5.4919577276220477e-01 + -1.1343106806710062e+00 1.5535607816398964e+00 7.3600599911585407e-01 + -1.3961617048061903e+00 1.7613813889850876e+00 9.4936084223787565e-01 + -1.6603567182137899e+00 1.9075224491901650e+00 1.1909763367657042e+00 + -1.9183373859716482e+00 1.9954809673902341e+00 1.4568766543756888e+00 + -2.1669560776426540e+00 2.0344184824338938e+00 1.7421821032641880e+00 + -2.4142416643075979e+00 2.0200307636627106e+00 2.0463558250153815e+00 + -2.6620542387074413e+00 1.9395385129473048e+00 2.3581966373534833e+00 + -2.8894181259881244e+00 1.8162074167012583e+00 2.6495739434713483e+00 + -3.0798661190960894e+00 1.6987500150913324e+00 2.9104575379145512e+00 + -3.2431773622626321e+00 1.6014449941245885e+00 3.1621409011178470e+00 + -3.3894396875398685e+00 1.5143322901081935e+00 3.4266029071238213e+00 + -3.4841061948422243e+00 1.4739980765029164e+00 3.6222215915220812e+00 + -3.4709661459166568e+00 1.5120534997638564e+00 3.4978679765416776e+00 + -3.3852759523403821e+00 1.4012385436091659e+00 3.0712239446435792e+00 + -3.3875507601796633e+00 1.5207489891343644e+00 3.2370303569184613e+00 + id 13368 + loc 8.6706155538558960e-01 1.4669591188430786e-01 396 + blend 0.0000000000000000e+00 + interp 3.6384500779344675e-01:2.8366366468941934e-01:6.3595477724754279e-01:3.1008387144046101e-01:1.5653740216321632e+00:3.2544629811798098e-01:2.5948898475656681e+00:3.6384136934336886e-01:3.1930696768028173e+00:3.6114073213870290e-01:3.9991007349085566e+00 + CVs 20 + -6.3932396353253074e-01 1.8748859205121371e-01 4.2260307457801577e-01 + -1.0826336399712679e+00 2.5244637102022549e-01 7.5351436945251082e-01 + -1.4624051613886866e+00 2.6098263621133322e-01 1.0645189505539794e+00 + -1.8319585634001379e+00 2.3858491003127791e-01 1.3819586416293459e+00 + -2.1884388138601762e+00 1.8225109708127996e-01 1.7017731668828977e+00 + -2.5276537907288121e+00 8.8829247963377655e-02 2.0244812811486685e+00 + -2.8443164614410898e+00 -4.1134027577366616e-02 2.3519482685423601e+00 + -3.1322947157700467e+00 -2.0439853295327071e-01 2.6829274057808554e+00 + -3.3865306697580211e+00 -3.9823965256491101e-01 3.0080046135456611e+00 + -3.6018429852341058e+00 -6.1989328509651243e-01 3.3115282597636644e+00 + -3.7735623303205381e+00 -8.6708625324824440e-01 3.5854974919490195e+00 + -3.9034575709682535e+00 -1.1433449746359416e+00 3.8364444352379792e+00 + -3.9994901521294510e+00 -1.4540532137258351e+00 4.0700212916031893e+00 + -4.0703323139930569e+00 -1.7966030242509703e+00 4.2799907566159581e+00 + -4.1213244054902978e+00 -2.1582941645127245e+00 4.4606235690617355e+00 + -4.1536638863879691e+00 -2.5227104446443844e+00 4.6128244124614728e+00 + -4.1665334356734034e+00 -2.8815116781565728e+00 4.7389375361206980e+00 + -4.1586668246954446e+00 -3.2533639283547808e+00 4.8481963756552027e+00 + -4.1409629731348341e+00 -3.7838817086969798e+00 5.0214287539729048e+00 + id 13369 + loc 4.9788245558738708e-01 2.3592934012413025e-01 382 + blend 0.0000000000000000e+00 + interp 4.8172123098429454e-01:3.9321357476151536e-01:4.2437205391600730e-01:3.7593188691739376e-01:1.0257916057604370e+00:3.9705470469385856e-01:1.9145295770960202e+00:4.8171641377198471e-01:2.3895476086209273e+00:3.0976499266784019e-01:2.9760394090599336e+00:3.6962082613792413e-01:3.6360953637170788e+00 + CVs 20 + -4.9000821574792153e-01 2.0357066561910170e-01 -7.2597643695760894e-01 + -8.6807614235551589e-01 3.0343021998779018e-01 -1.1914373759638770e+00 + -1.2193628118558022e+00 3.6164589664503310e-01 -1.6165425258726647e+00 + -1.5701949459468629e+00 4.0982379453185946e-01 -2.0921839398203401e+00 + -1.9215139115324877e+00 4.4323858327501564e-01 -2.6232126406113858e+00 + -2.2751068387849127e+00 4.4544318234279545e-01 -3.2094891048601273e+00 + -2.6343451793528474e+00 3.8467449698827549e-01 -3.8409137462946936e+00 + -2.9938243078465501e+00 2.2004183600309046e-01 -4.4925456241350963e+00 + -3.3426420070929748e+00 -8.5986761380054899e-02 -5.1350467879897792e+00 + -3.6727138228497735e+00 -5.5832758772567459e-01 -5.7324307659375000e+00 + -3.9717032090981257e+00 -1.1951821005434347e+00 -6.2232484371845924e+00 + -4.2151461776324197e+00 -1.9613523938254587e+00 -6.5352989892425946e+00 + -4.3834826386287213e+00 -2.7870648706976131e+00 -6.6260805123464817e+00 + -4.5023561171017672e+00 -3.6079825917777057e+00 -6.5508968919294883e+00 + -4.6284487890387922e+00 -4.4070225298765751e+00 -6.4402949505868214e+00 + -4.8165954609216257e+00 -5.1491246994883877e+00 -6.3775809800291263e+00 + -5.1117411914397204e+00 -5.7410809018703004e+00 -6.3389663713055988e+00 + -5.4717096312428364e+00 -6.1328751358299058e+00 -6.2545313901846900e+00 + -5.6615594964089251e+00 -6.5475888707057859e+00 -6.1697157555720192e+00 + id 13370 + loc 8.2221788167953491e-01 6.6944301128387451e-01 373 + blend 0.0000000000000000e+00 + interp 4.3244439295953352e-01:3.8705023912106312e-01:5.2514831284247576e-01:4.3244006851560396e-01:1.0551084832183191e+00:3.0418451978126892e-01:1.8871169857470553e+00:2.7220320033335799e-01:2.8181564452168457e+00:4.2405113401430622e-01:3.9311536758364825e+00 + CVs 20 + -2.8377686558544546e-01 2.6303422910144653e-01 -8.6415944451091992e-02 + -5.6617741969256041e-01 5.1275574525662360e-01 -1.7671363528368730e-01 + -8.5928144303143350e-01 7.6280967739652306e-01 -2.7722997653286435e-01 + -1.1653099835696259e+00 1.0357765948880224e+00 -3.9211133386707608e-01 + -1.4718873128067238e+00 1.3547275160369274e+00 -5.2570569696820735e-01 + -1.7688797826269385e+00 1.7214681529283160e+00 -7.0291037428727354e-01 + -2.0509044947513808e+00 2.1040627285623463e+00 -9.7078090580332721e-01 + -2.3081810475161815e+00 2.4546523192865859e+00 -1.3611920269135687e+00 + -2.5256041661587600e+00 2.7355313487959059e+00 -1.8737498306310232e+00 + -2.6878800733394641e+00 2.9295988386610547e+00 -2.4892738100668717e+00 + -2.7820432169476064e+00 3.0279031398362024e+00 -3.1816226160475560e+00 + -2.8134561093822010e+00 3.0067416819341384e+00 -3.9070584047307002e+00 + -2.8387432591756792e+00 2.8536257463558989e+00 -4.5725822833061667e+00 + -2.9624899929846764e+00 2.6807935900943103e+00 -5.0536045793534541e+00 + -3.2138933773684766e+00 2.7057519633132570e+00 -5.2765892607482945e+00 + -3.4437115900964050e+00 3.0517762363983088e+00 -5.2223088540131375e+00 + -3.3999642913817625e+00 3.6510295233181869e+00 -4.9119851706739750e+00 + -3.0526767547924285e+00 4.2143970783090321e+00 -4.5419435456110993e+00 + -3.4417652745441627e+00 4.4556668746388475e+00 -4.6704689380521458e+00 + id 13371 + loc 8.6989980936050415e-01 1.9082777202129364e-01 376 + blend 0.0000000000000000e+00 + interp 5.9292884339841168e-01:4.3088648829530829e-01:6.8533579146264900e-03:5.1837618899773130e-01:9.3925206588559451e-01:5.9292291410997777e-01:1.5524754008526558e+00:5.4412877720406261e-01:1.8264303462551608e+00:5.8301181780220568e-01:2.0414458107012887e+00:5.7089184127369463e-01:2.8889678905237157e+00:4.6153544246620182e-01:3.0532657797544838e+00:4.5008356520634785e-01:3.6787371076975472e+00 + CVs 20 + 1.5052524814931903e-01 3.2769360836530975e-01 -4.7446395503543309e-01 + 2.3067418798482339e-01 5.9436333891959436e-01 -9.0147559528972543e-01 + 2.5402895567174599e-01 7.9031510519112402e-01 -1.3403847603418475e+00 + 2.3958182860834712e-01 9.3708794868713086e-01 -1.8027439478798188e+00 + 2.1483376501449364e-01 1.0807708058699677e+00 -2.2679846967424568e+00 + 2.1697610728430466e-01 1.2528748456959458e+00 -2.7319997180541349e+00 + 2.8065456108300868e-01 1.4596797221318356e+00 -3.2044422927868177e+00 + 4.2971920008721753e-01 1.7001950143217281e+00 -3.6845340052607396e+00 + 6.7486783704690201e-01 1.9716132589409487e+00 -4.1596805127700032e+00 + 1.0169648430823128e+00 2.2596574045606697e+00 -4.6267852904739550e+00 + 1.4546641098903759e+00 2.5270401497624544e+00 -5.0906058860688095e+00 + 1.9926924390402176e+00 2.7101780945380671e+00 -5.5435527600572936e+00 + 2.6261634917192707e+00 2.7398633232602831e+00 -5.9662271433745619e+00 + 3.3283288206057824e+00 2.5733089904942359e+00 -6.3173313002250993e+00 + 4.0571679735743267e+00 2.1990906696350181e+00 -6.5565823458846442e+00 + 4.7454495828538938e+00 1.5887628796467763e+00 -6.7061029404696750e+00 + 5.2228533826844217e+00 6.9040075294824454e-01 -6.8978850035285273e+00 + 5.2230800096224685e+00 -3.2939644442254323e-01 -7.3052346828785311e+00 + 5.3855016151361061e+00 -7.5815024870968006e-01 -7.5603428049114942e+00 + id 13372 + loc 5.5914503335952759e-01 5.2444332838058472e-01 374 + blend 0.0000000000000000e+00 + interp 4.3494554489503290e-01:3.3459947286513292e-01:5.8021250815226177e-01:4.3494119543958398e-01:1.0298060392225465e+00:4.1728115198284260e-01:1.9387636834061159e+00:3.9086014466374880e-01:2.7911349411411805e+00:4.0251447357272224e-01:3.2256718924372203e+00:3.7723587299325739e-01:3.9851728154076191e+00 + CVs 20 + -7.6398389022407365e-01 4.0405228010436700e-01 -3.1502493319142127e-01 + -1.4048050636722507e+00 6.4202923443535442e-01 -4.7604463259152863e-01 + -2.0244906845349555e+00 7.6799172202075916e-01 -5.3469711447245294e-01 + -2.6572063773523111e+00 8.3276662170418714e-01 -5.3591283286619384e-01 + -3.2857328556243619e+00 8.6251367676179624e-01 -5.1811115939419672e-01 + -3.8955235657217484e+00 8.6356786477505498e-01 -5.2214380980334041e-01 + -4.4743944131810043e+00 8.3159165164636017e-01 -5.7771566780487160e-01 + -5.0108301494459759e+00 7.6522426944272937e-01 -7.0198839214323261e-01 + -5.4924207379525356e+00 6.6893352224134395e-01 -9.0125668806470127e-01 + -5.9105569198704515e+00 5.4758332886159122e-01 -1.1732169169497504e+00 + -6.2697697721289831e+00 3.9654448770849227e-01 -1.5085834406915009e+00 + -6.5858509035881205e+00 1.9369327256520252e-01 -1.8881438226955671e+00 + -6.8670157614807872e+00 -9.8880427050037412e-02 -2.2793888025541089e+00 + -7.1043644654658360e+00 -5.0898787013712532e-01 -2.6381606255846219e+00 + -7.3016401010548844e+00 -1.0093820607544055e+00 -2.9321152546556832e+00 + -7.4955947234936939e+00 -1.5352169746662194e+00 -3.1669164773676131e+00 + -7.7223858611508378e+00 -2.0266753635181591e+00 -3.3553829763689054e+00 + -8.0014037878435111e+00 -2.4402873388833108e+00 -3.4857119868383752e+00 + -8.3567958762170278e+00 -2.7572197958511437e+00 -3.5272094637141258e+00 + id 13373 + loc 1.7532850801944733e-01 7.7198743820190430e-01 412 + blend 0.0000000000000000e+00 + interp 3.6707805237846775e-01:2.8715889751654955e-01:5.0644314892312925e-01:3.5442055724166643e-01:1.1888218885541171e+00:3.3686911180026002e-01:2.0095441965857677e+00:3.1986065073416214e-01:2.8906788656381606e+00:3.6707438159794398e-01:3.4011783263553870e+00:3.1107764596461190e-01:3.9763808226874859e+00 + CVs 20 + 7.9036781966659708e-01 1.4308212308146162e-01 -1.9504894355354369e-01 + 1.2963480383230479e+00 1.5537403077377748e-01 -3.8221639584150269e-01 + 1.7402222956894913e+00 1.3000723322791347e-01 -5.4965210989411262e-01 + 2.2085530057850002e+00 1.0564440918712736e-01 -6.8973601494949788e-01 + 2.7003626987592684e+00 7.9331064914780591e-02 -7.9469840759300414e-01 + 3.2141551534399664e+00 4.7559180054639105e-02 -8.5609411290783799e-01 + 3.7448986102309560e+00 5.5870803941650005e-03 -8.6619573248579362e-01 + 4.2839320943301740e+00 -5.3138642391394431e-02 -8.2125795031078597e-01 + 4.8205743816744420e+00 -1.3569515580437241e-01 -7.2097858008066384e-01 + 5.3414372802428325e+00 -2.4648364328769112e-01 -5.6326588965150470e-01 + 5.8329598569333916e+00 -3.9291143710749799e-01 -3.5456057970441746e-01 + 6.2939956625714073e+00 -6.0183146291768597e-01 -1.2711281025863941e-01 + 6.7332945645503877e+00 -9.1200515805760518e-01 7.2847455220567348e-02 + 7.1445303445466184e+00 -1.3325787601566115e+00 2.2558763953180316e-01 + 7.5093251061494994e+00 -1.8443040265865418e+00 3.4153674557163305e-01 + 7.8112055784436780e+00 -2.4296160592637817e+00 4.1787545719864666e-01 + 8.0398532244844514e+00 -3.0712386114926624e+00 4.3185154621351390e-01 + 8.1914868956226297e+00 -3.7364563065022320e+00 3.7314099059620187e-01 + 8.3474026579980620e+00 -4.2552665560982454e+00 4.5267213238177983e-01 + id 13374 + loc 1.6382667422294617e-01 4.7704687714576721e-01 1080 + blend 0.0000000000000000e+00 + interp 3.8062038273052046e-01:3.8061657652669317e-01:3.9367650732480275e-04:3.0560216912749344e-01:7.7567233054573570e-01:3.0718661277967158e-01:1.2999303447271131e+00:3.0791700106382214e-01:2.0009378354517797e+00:3.3183664549275338e-01:2.7579086394502599e+00:2.8502691192645330e-01:3.2885126119965626e+00 + CVs 20 + 3.5971810176623381e-01 2.4117659608445691e-01 1.8133505781510526e-01 + 5.3407641035181952e-01 3.8324588301181994e-01 2.8763167264367934e-01 + 6.5536393711669860e-01 4.8862461775261756e-01 3.7976734296648423e-01 + 7.9366619628904034e-01 5.8833607769981511e-01 4.8088326857520802e-01 + 9.4586349490470323e-01 6.7911842198533379e-01 5.9033586695148266e-01 + 1.1091176249441257e+00 7.5799199431768061e-01 7.0813334707928144e-01 + 1.2810301670581832e+00 8.2249769948309515e-01 8.3523022359517041e-01 + 1.4592003599191261e+00 8.7051678310463099e-01 9.7323874801872623e-01 + 1.6406718629341623e+00 8.9994431401982733e-01 1.1236572495937804e+00 + 1.8217046005644602e+00 9.0879073859622628e-01 1.2870624926509848e+00 + 1.9985340652702188e+00 8.9485936418195156e-01 1.4622106876102774e+00 + 2.1680959969785696e+00 8.5563503594406687e-01 1.6454814695808824e+00 + 2.3281616103816569e+00 7.8951851748170931e-01 1.8317824095512329e+00 + 2.4780358932457713e+00 6.9574003598736800e-01 2.0160235466634164e+00 + 2.6174312756669784e+00 5.7438467548357686e-01 2.1934904529373207e+00 + 2.7445689880573068e+00 4.2749308998759672e-01 2.3586991629725178e+00 + 2.8570347143309105e+00 2.5943475517826387e-01 2.5058761158518870e+00 + 2.9553009336000557e+00 7.4842509319277717e-02 2.6323360492060703e+00 + 3.0482902472565860e+00 -1.3383892031704714e-01 2.7461524039039880e+00 + id 13375 + loc 4.0004730224609375e-01 3.5923978686332703e-01 409 + blend 0.0000000000000000e+00 + interp 4.7055223682023573e-01:3.3746604328655044e-01:3.8572517827524033e-01:2.9319018794267898e-01:1.1894484011471298e+00:3.7593409539545980e-01:2.0684340999684578e+00:3.8753088377038664e-01:2.6570522137993442e+00:2.9631736469711967e-01:3.0570792692742597e+00:4.7054753129786753e-01:3.6903411953550318e+00 + CVs 20 + -1.6351438276889180e-01 1.8689938241673065e-01 -4.3830657986230581e-01 + -3.3145849656428861e-01 3.1965951595272130e-01 -8.0682986673004420e-01 + -4.9940343901981599e-01 4.2796400384750449e-01 -1.1579502230304011e+00 + -6.7096934267898056e-01 5.2242378865793870e-01 -1.5109311153535587e+00 + -8.4852827508253514e-01 6.0022104631774675e-01 -1.8632387700039579e+00 + -1.0310733521840703e+00 6.6105523504827046e-01 -2.2130611882677353e+00 + -1.2149705838449387e+00 7.0625616541824066e-01 -2.5601586162053547e+00 + -1.3959850519923720e+00 7.3576507979723593e-01 -2.9044519565909805e+00 + -1.5707422600215648e+00 7.4806863499378928e-01 -3.2446575163089166e+00 + -1.7375619097183812e+00 7.4370525103855334e-01 -3.5788165138996719e+00 + -1.8938616627590434e+00 7.2088138232658339e-01 -3.9057247295839383e+00 + -2.0374361199003461e+00 6.7721834614655196e-01 -4.2263433840586995e+00 + -2.1688292289420001e+00 6.0732662788943603e-01 -4.5467713401731666e+00 + -2.2902973822335952e+00 4.9908010716856266e-01 -4.8758837153700361e+00 + -2.4003722704231953e+00 3.4098825215658524e-01 -5.2170871976054123e+00 + -2.4901936297046028e+00 1.3468760360234766e-01 -5.5629466387185289e+00 + -2.5488881248250954e+00 -1.0719007302049466e-01 -5.8954184198155382e+00 + -2.5709267219505909e+00 -3.7970826208569175e-01 -6.1739462757108505e+00 + -2.5334282912878305e+00 -7.2202700487158378e-01 -6.1577198819981405e+00 + id 13376 + loc 5.6116789579391479e-01 9.5769590139389038e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6446059593009126e-01:3.0321293964988616e-01:3.4678581607634906e-01:3.8892629067116863e-01:9.9885911173440556e-01:2.1717726230160900e-01:1.6907614862999445e+00:4.6445595132413198e-01:2.1634593649314735e+00:3.4328846030550575e-01:2.9100119946412200e+00:3.0048431016973548e-01:3.7456180029954251e+00 + CVs 20 + 1.6715882771229698e-01 2.8546761274333210e-01 -3.9829608671602720e-02 + 3.3913356965246982e-01 5.4574008277778985e-01 -9.9684229763912890e-02 + 5.1311726282354708e-01 7.9090114914262855e-01 -1.7194915811208888e-01 + 6.8589596879546300e-01 1.0232458657790147e+00 -2.5621606121030027e-01 + 8.5460005247359305e-01 1.2408201799028880e+00 -3.5795864113401316e-01 + 1.0149479043173488e+00 1.4412955747884673e+00 -4.8199991756032934e-01 + 1.1614684801664041e+00 1.6216399987450243e+00 -6.3257743217417506e-01 + 1.2877198340572080e+00 1.7776496458388333e+00 -8.1257629157179767e-01 + 1.3862008176707015e+00 1.9033046223522194e+00 -1.0224250135601198e+00 + 1.4489550735714476e+00 1.9912395997916725e+00 -1.2585157722485565e+00 + 1.4692207842784515e+00 2.0355898907436742e+00 -1.5096730165861014e+00 + 1.4444044249487071e+00 2.0363866007459333e+00 -1.7567448691601846e+00 + 1.3794063996622925e+00 2.0000830685237321e+00 -1.9853562520306156e+00 + 1.2853623771681326e+00 1.9325304081360681e+00 -2.1969868112529034e+00 + 1.1707703387650366e+00 1.8368982602423132e+00 -2.3948405187246355e+00 + 1.0326438976049537e+00 1.7185207374620055e+00 -2.5670368016978347e+00 + 8.6891202984669969e-01 1.5756610767390979e+00 -2.6892026710919077e+00 + 6.9054444109336643e-01 1.4002235109769234e+00 -2.7717764188377600e+00 + 5.8548423212656486e-01 1.2793242906239968e+00 -2.9563524308088516e+00 + id 13377 + loc 7.1612908504903316e-03 1.3956414163112640e-01 402 + blend 0.0000000000000000e+00 + interp 4.3485736264636687e-01:3.4310919027174325e-01:4.3303006335215777e-04:4.3485301407274041e-01:9.9064424255183270e-01:3.5371459376264586e-01:1.2717258649586904e+00:3.1025541964931880e-01:1.9999214150972420e+00:3.5705096343375420e-01:2.6355995155282530e+00:3.9311776172194596e-01:3.2827048586902636e+00 + CVs 20 + -1.1932380579849858e-01 2.6858161269399994e-01 2.3122477392460539e-01 + -2.6132796196686570e-01 5.3319463372961584e-01 4.2909524656436898e-01 + -4.2422482115217941e-01 7.8978337984644109e-01 5.9446395657283124e-01 + -6.0369552240927482e-01 1.0329892935404563e+00 7.2794007646532233e-01 + -7.9425491171156171e-01 1.2575622352340430e+00 8.3165253200186506e-01 + -9.8972222760506190e-01 1.4611797572526568e+00 9.1013826944266352e-01 + -1.1874555620594611e+00 1.6463895276303713e+00 9.6233608608302090e-01 + -1.3881995502767341e+00 1.8189724620929906e+00 9.8428867205659298e-01 + -1.5880515698137723e+00 1.9860122388966757e+00 9.8564094961964011e-01 + -1.7760857992358838e+00 2.1561747505222018e+00 9.8554530403576168e-01 + -1.9518887614075520e+00 2.3429345787893565e+00 9.8471934400686500e-01 + -2.1437831846543798e+00 2.5616696179102232e+00 9.6060056213288814e-01 + -2.4069941154311807e+00 2.7867060068230702e+00 8.9636266904704653e-01 + -2.7737112965241137e+00 2.9052068400298965e+00 7.9100178483773187e-01 + -3.2042523868308179e+00 2.7858309263009406e+00 6.5637614522684795e-01 + -3.6230448121545877e+00 2.3502104040735525e+00 5.4844945735360007e-01 + -3.9680903071304132e+00 1.6121966287725833e+00 6.0048518387971228e-01 + -4.1920847856512093e+00 8.4778607213879376e-01 9.2035355632628402e-01 + -4.1815162026572148e+00 6.6855626325939344e-01 1.2080870218384845e+00 + id 13378 + loc 3.1406819820404053e-01 3.6822280287742615e-01 395 + blend 0.0000000000000000e+00 + interp 5.1024312704771158e-01:4.5835959296724671e-01:2.4996714197049275e-01:3.8814905094426116e-01:9.7278673790207182e-01:4.3800582756492407e-01:1.5318163041844817e+00:5.1023802461644108e-01:1.9996024122727727e+00:4.5672877257049488e-01:2.2944368717500203e+00:5.0976462441718629e-01:2.8865745177261477e+00:4.2951143539363190e-01:3.1400350650918822e+00:3.0295092923820016e-01:3.9072175373277691e+00 + CVs 20 + -3.0645509926536108e-01 1.4043014236211826e-01 -2.4417143215891909e-01 + -5.6286763947035756e-01 2.2896767139851421e-01 -4.5364993951607890e-01 + -7.9928179763033136e-01 2.8965107130001810e-01 -6.6102691545068915e-01 + -1.0235655100539065e+00 3.3356843831771854e-01 -8.8033024340626875e-01 + -1.2270703568103820e+00 3.6121707092272082e-01 -1.1129699488301426e+00 + -1.4022912343583875e+00 3.7315030307279040e-01 -1.3581803611449808e+00 + -1.5462455882424297e+00 3.7355190661931947e-01 -1.6108854829413202e+00 + -1.6569294522008189e+00 3.6957796414304456e-01 -1.8610979294104562e+00 + -1.7275283168148934e+00 3.6889735206664009e-01 -2.1031925360671222e+00 + -1.7544850204659395e+00 3.7692054640627770e-01 -2.3472013862610264e+00 + -1.7530094911706606e+00 3.8598322426521881e-01 -2.6079372555474993e+00 + -1.7520832255510745e+00 3.7244410335686551e-01 -2.8862508842678363e+00 + -1.7668748328292700e+00 3.1702487668017110e-01 -3.1727217469844851e+00 + -1.7948155873946385e+00 2.1228979285418648e-01 -3.4657951466822610e+00 + -1.8318025872825934e+00 5.9844441047617547e-02 -3.7650834707096603e+00 + -1.8776823688462745e+00 -1.2418454329337791e-01 -4.0604360275622700e+00 + -1.9290440658927630e+00 -3.2693480343070025e-01 -4.3399379756372358e+00 + -1.9739384978520338e+00 -5.6818674610153064e-01 -4.5927848003471610e+00 + -1.9857785568870443e+00 -9.6021193375351244e-01 -4.7953999921628752e+00 + id 13379 + loc 7.2920835018157959e-01 7.6989620923995972e-01 380 + blend 0.0000000000000000e+00 + interp 4.7870295203692587e-01:3.6855132483198688e-01:5.5066287400241443e-02:4.7869816500740553e-01:8.4100058090545959e-01:4.6694256721126581e-01:1.1522591467911787e+00:4.6776575529710673e-01:1.9404361327684960e+00:3.3319503181549315e-01:2.2210057944198605e+00:4.5465137124812804e-01:2.9035289876898771e+00:4.5385011576623635e-01:3.3335650983265692e+00 + CVs 20 + -3.2438502032129929e-01 2.2086692495689331e-01 -7.6552009520565756e-01 + -5.9010911834438573e-01 3.5393658392264837e-01 -1.3405993446300253e+00 + -8.1342887218150417e-01 4.4915534931279488e-01 -1.8500398454530271e+00 + -1.0102737897665475e+00 5.2537843463142253e-01 -2.3457925774959345e+00 + -1.1775808603606375e+00 5.7656010639420452e-01 -2.8238442134888779e+00 + -1.3147696168572436e+00 5.9737594580280484e-01 -3.2835731133997097e+00 + -1.4213580373621466e+00 5.8504715521895667e-01 -3.7243542661598141e+00 + -1.4964303367759926e+00 5.4057566391785228e-01 -4.1472797522914595e+00 + -1.5411172217248847e+00 4.6707068581516809e-01 -4.5624334174302952e+00 + -1.5647705813459383e+00 3.7473065432575559e-01 -4.9832080384877324e+00 + -1.5835715785585556e+00 2.8152079978871214e-01 -5.4092208394229928e+00 + -1.6195523776728289e+00 2.0048995232658173e-01 -5.8394986337891943e+00 + -1.6930598051284065e+00 9.6175813864375570e-02 -6.2935275280769023e+00 + -1.7988888484406196e+00 -1.0967670857789980e-01 -6.7596111670930838e+00 + -1.9214340788661834e+00 -4.4058461127732240e-01 -7.1855014069922172e+00 + -2.0592520352896817e+00 -8.5296354472851510e-01 -7.5645204047341394e+00 + -2.2159953308315279e+00 -1.3173097934036280e+00 -7.9413770775513246e+00 + -2.4265482395796858e+00 -1.7964886413103316e+00 -8.3404301552554472e+00 + -2.7858789968560140e+00 -2.0626153719485947e+00 -8.6633638855488719e+00 + id 13380 + loc 3.4797129034996033e-01 6.0937613248825073e-01 378 + blend 0.0000000000000000e+00 + interp 4.4684769603492863e-01:4.4134361038986131e-01:2.0745513331298981e-01:3.9369667408349940e-01:8.3728128426809190e-01:4.3174732043181546e-01:1.3135306313246018e+00:2.6944370590999334e-01:1.8460592405525353e+00:3.5860667418838216e-01:2.5145357201391438e+00:4.1977260341187028e-01:3.0042724232957112e+00:4.4684322755796829e-01:3.4343845139743001e+00:4.0689262546841976e-01:3.9649387701989376e+00 + CVs 20 + 5.3008229740956403e-01 3.3770022585427539e-01 1.6069862708082111e-01 + 1.0215303902254869e+00 5.9566717876434216e-01 2.3587227202544636e-01 + 1.5217912631456265e+00 8.0930813915990041e-01 2.6558743831882853e-01 + 2.0541017566432607e+00 1.0056373610089699e+00 2.8358413114250480e-01 + 2.6093681411997842e+00 1.1827951714332801e+00 3.1973650213255855e-01 + 3.1726962244548345e+00 1.3195692543865798e+00 3.9898875664852029e-01 + 3.7252259787727739e+00 1.3896302997766803e+00 5.3366516757883176e-01 + 4.2395374153054455e+00 1.3772967635869748e+00 7.2139725532831478e-01 + 4.6786860927141483e+00 1.2839869070016958e+00 9.4122818676442932e-01 + 5.0074954704763508e+00 1.1326544082029328e+00 1.1571782769880929e+00 + 5.2120496897550179e+00 9.6640030411811595e-01 1.3397927447542446e+00 + 5.3088129303166784e+00 8.3379326091866490e-01 1.4855241951884313e+00 + 5.3398938381705978e+00 7.5460251568768522e-01 1.6219833035406193e+00 + 5.3503904654813041e+00 6.6957922386048940e-01 1.7900140823396018e+00 + 5.3542171898846682e+00 4.8001241750745471e-01 2.0001056930053220e+00 + 5.3438701488691676e+00 1.7197950483886393e-01 2.2488570591771095e+00 + 5.3126782294650710e+00 -1.9565535241222065e-01 2.5544062785584662e+00 + 5.2950939576050482e+00 -5.7556827680670564e-01 2.9201122074160804e+00 + 5.4052321137320360e+00 -8.3912390439969675e-01 3.2365592960113752e+00 + id 13381 + loc 7.8313267230987549e-01 7.4987608194351196e-01 403 + blend 0.0000000000000000e+00 + interp 4.7674046225429695e-01:2.8946004494164973e-01:2.0386865824543321e-01:3.0436001978565302e-01:1.0431308643460688e+00:4.3804599498620694e-01:1.9289341376612934e+00:3.1834622516562572e-01:2.4414465440658968e+00:4.7673569484967443e-01:2.9964073768631705e+00:4.7364944302537426e-01:3.2284798436971429e+00:3.0659828028895603e-01:3.7660015713472497e+00 + CVs 20 + -3.3858302234830787e-02 3.6646273358574344e-02 -1.1685248879848427e-01 + -6.4439194563340046e-02 9.0969947535188805e-02 -2.2113967557528835e-01 + -9.7607356897007419e-02 1.4613364222608810e-01 -3.1754310620889220e-01 + -1.4269415497407226e-01 1.9759522902507354e-01 -4.1380187008659186e-01 + -2.0246571551801076e-01 2.4615699224601240e-01 -5.0877428967936933e-01 + -2.7832352117392423e-01 2.9103310357240952e-01 -5.9984107307598911e-01 + -3.7168118729903393e-01 3.3227199995181567e-01 -6.8343248137952284e-01 + -4.8341119803517385e-01 3.7001505536608831e-01 -7.5510942744166887e-01 + -6.1338550405284475e-01 4.0431372663479037e-01 -8.0986626510382498e-01 + -7.5979142624021767e-01 4.3431881205430917e-01 -8.4306440424019580e-01 + -9.1925070849590806e-01 4.5902362321905271e-01 -8.5083128766482785e-01 + -1.0869094711657514e+00 4.7767377419342089e-01 -8.3049962559433455e-01 + -1.2565678449016244e+00 4.9061445491421324e-01 -7.8068441911069841e-01 + -1.4211818553753937e+00 4.9859411957609540e-01 -7.0111612878715246e-01 + -1.5731582594716105e+00 5.0232157840524860e-01 -5.9236431750211893e-01 + -1.7043737218953892e+00 5.0291029391065567e-01 -4.5685720479632208e-01 + -1.8067673145521290e+00 5.0164640454325027e-01 -2.9830976574648999e-01 + -1.8724545682503480e+00 4.9963401538567576e-01 -1.2153663241034546e-01 + -1.9665340544365320e+00 4.9580795543362355e-01 -1.3573019798126668e-02 + id 13382 + loc 5.2601909637451172e-01 3.0497097969055176e-01 400 + blend 0.0000000000000000e+00 + interp 4.1981512141838051e-01:3.4617359407414627e-01:4.3500915355047276e-01:4.1981092326716635e-01:1.1464579654574087e+00:3.5859689536294725e-01:2.0194272177035479e+00:3.0689551508991791e-01:2.5956038894104685e+00:2.7863365137285695e-01:3.0900124341095196e+00:3.5555621379853364e-01:3.9231769599218054e+00 + CVs 20 + 2.1498353840036796e-01 1.7918732519468744e-01 1.4416080644744173e-01 + 4.0733425825162661e-01 3.7275790714235812e-01 3.1734529350629881e-01 + 5.9401391617048149e-01 5.7102804515310479e-01 5.1577797531836000e-01 + 7.8044762006101343e-01 7.6643162962199063e-01 7.3881800474443393e-01 + 9.6546671175638310e-01 9.5713530952114823e-01 9.9049339390948399e-01 + 1.1495538654335786e+00 1.1442455350157552e+00 1.2698075952099481e+00 + 1.3342911054232340e+00 1.3280499187432964e+00 1.5743396494321953e+00 + 1.5197532770084416e+00 1.5007485421953497e+00 1.9049700527971054e+00 + 1.7023481919303578e+00 1.6467474302005312e+00 2.2633863786195927e+00 + 1.8742846201371082e+00 1.7493070848707153e+00 2.6469440578077608e+00 + 2.0226416847121511e+00 1.7929358829791013e+00 3.0492449424340711e+00 + 2.1302079236598832e+00 1.7620048778641404e+00 3.4604026501840117e+00 + 2.1817605073260311e+00 1.6439507595517859e+00 3.8620519119379972e+00 + 2.1718456791793050e+00 1.4364533873108909e+00 4.2260743179475471e+00 + 2.1061302551162187e+00 1.1483061476790022e+00 4.5213979566792233e+00 + 2.0007562545524511e+00 7.9560650424104229e-01 4.7192691651342500e+00 + 1.8838701046273456e+00 4.0757017571013421e-01 4.8043948731744415e+00 + 1.7827830961940565e+00 2.6859955256350432e-02 4.8052911054887950e+00 + 1.7267726229503446e+00 -2.8830118215463973e-01 4.8691160849570059e+00 + id 13383 + loc 7.2187077999114990e-01 2.8756919503211975e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5727525430164334e-01:3.4173061018452722e-01:2.5799695291017888e-02:2.8193945709595919e-01:9.0079847699695115e-01:2.9407867365036378e-01:1.6587846725370037e+00:4.5727068154910033e-01:2.4019231704997055e+00:2.9779136532227846e-01:2.9538306747836094e+00:3.0116593334876235e-01:3.4741966942519982e+00 + CVs 20 + -1.6349367483951388e-01 2.1648680615330518e-01 1.6745760836624562e-01 + -3.3503947843093179e-01 4.4460779253994009e-01 3.5395293328523103e-01 + -5.1807000203266251e-01 6.7691561384008958e-01 5.3940475059353488e-01 + -7.0916038451166763e-01 8.9858092561390490e-01 7.0273507641981892e-01 + -8.9688109647776126e-01 1.0937965131739922e+00 8.3191430152068868e-01 + -1.0675132050795539e+00 1.2509889027215138e+00 9.1622743457423694e-01 + -1.2153933875740925e+00 1.3704726906201050e+00 9.5377450137235187e-01 + -1.3530138644093563e+00 1.4569139956998569e+00 9.5674819710907766e-01 + -1.4780251996670162e+00 1.5224996588400443e+00 9.3073558886621088e-01 + -1.5430594098321619e+00 1.6557883550002881e+00 8.3363254151949862e-01 + -1.6194701580690716e+00 1.9918855429149853e+00 6.7255349642694917e-01 + -1.8315502500942253e+00 2.2957602561694443e+00 6.3036882745041534e-01 + -2.0662659894852089e+00 2.3919662814240734e+00 6.9634723275706600e-01 + -2.2815432146487433e+00 2.3558380329722235e+00 8.1349986546173969e-01 + -2.4089296843437324e+00 2.2293238272517133e+00 9.4198515188540366e-01 + -2.3819961876596949e+00 2.0659545154815411e+00 1.0274059322828939e+00 + -2.2336328292888750e+00 1.9217755742130127e+00 1.0630880812471821e+00 + -1.9793142451840062e+00 1.8259209404284418e+00 1.0595746632306906e+00 + -1.9459793201353814e+00 1.7317539306329122e+00 9.6841959494675534e-01 + id 13384 + loc 7.3988896608352661e-01 8.4659832715988159e-01 401 + blend 0.0000000000000000e+00 + interp 4.7236447948133692e-01:3.6350062855045429e-01:2.0363003875142149e-01:3.7193621929752302e-01:1.0261513674470975e+00:4.5697753045041650e-01:1.8295849355554412e+00:3.8194619010219805e-01:2.1936092318017910e+00:3.7231266284078074e-01:2.9991317805330415e+00:4.7235975583654211e-01:3.6114984797798995e+00 + CVs 20 + -7.8910940985504052e-03 3.0616064287083400e-01 -3.0025153761456103e-01 + -3.5238414685771213e-03 5.8931759803057837e-01 -5.9009974553673161e-01 + 1.3878777008562604e-02 8.4666199474948556e-01 -8.7998310937732904e-01 + 4.3418301312108554e-02 1.0719295696578783e+00 -1.1715388959480002e+00 + 8.6512439584535028e-02 1.2640445578487409e+00 -1.4691362685533125e+00 + 1.4099557271268265e-01 1.4301605029886615e+00 -1.7849871896791754e+00 + 1.8950977635991384e-01 1.5813398567438735e+00 -2.1281701228194638e+00 + 2.0477970681782887e-01 1.7256784830410192e+00 -2.5007020810323368e+00 + 1.5726130172889086e-01 1.8581597838496364e+00 -2.8976955057316940e+00 + 2.2747629369023525e-02 1.9613290529508229e+00 -3.3004449155537254e+00 + -2.0436318179987789e-01 2.0220844099941302e+00 -3.6772143790097336e+00 + -5.1136654856326169e-01 2.0356033668430000e+00 -3.9964374215581144e+00 + -8.7448195862109757e-01 1.9883968252300899e+00 -4.2560679116242044e+00 + -1.2649000828086954e+00 1.8494718264279166e+00 -4.4866163222916606e+00 + -1.6536674878991504e+00 1.5956081041576557e+00 -4.6839722101838248e+00 + -2.0135284206776660e+00 1.2383839059782744e+00 -4.7859033299823484e+00 + -2.3359648744451795e+00 8.0935726055101831e-01 -4.7940472608302853e+00 + -2.6334620847511401e+00 3.4612770009586025e-01 -4.8674575811287148e+00 + -2.8763214646238358e+00 -8.8884061085507088e-02 -5.2157926188031096e+00 + id 13385 + loc 8.9841639995574951e-01 9.0074700117111206e-01 373 + blend 0.0000000000000000e+00 + interp 5.6803412492935068e-01:4.6280624040603080e-01:3.1986680159353797e-03:5.6802844458810142e-01:6.8308265481807862e-01:4.4092411974647522e-01:1.1910525580227056e+00:3.4906595329647999e-01:2.3100831485780238e+00:4.9752393330270001e-01:3.1153062696987202e+00 + CVs 20 + -2.2401791647601141e-01 2.5198670102686466e-01 -1.0820039195519664e-01 + -4.4863531243900096e-01 5.1277691697699712e-01 -2.2569033910245548e-01 + -6.6140515820391232e-01 7.8978300090171727e-01 -3.6333077751894288e-01 + -8.4590247188861034e-01 1.0891356366257603e+00 -5.2920611528405215e-01 + -9.8310348817059690e-01 1.4115573021232461e+00 -7.2768508216680861e-01 + -1.0580975977470759e+00 1.7450497138317185e+00 -9.6496896538946042e-01 + -1.0680380448116473e+00 2.0646849577928728e+00 -1.2500271713775697e+00 + -1.0167452960447179e+00 2.3425544251635557e+00 -1.5854118254630927e+00 + -9.0997034937071408e-01 2.5611362098602029e+00 -1.9591343730567035e+00 + -7.5485111541348904e-01 2.7166702426894522e+00 -2.3506509314511623e+00 + -5.5848216894140368e-01 2.8163531972335272e+00 -2.7445473986604609e+00 + -3.2455867484847722e-01 2.8641688228259436e+00 -3.1463893233824711e+00 + -5.4392201330213830e-02 2.8327186423058084e+00 -3.5809856186995686e+00 + 2.3306160811063958e-01 2.6647391868202308e+00 -4.0676477030601479e+00 + 4.6769015295195482e-01 2.3299281090645301e+00 -4.6159472012572413e+00 + 5.2549365434519235e-01 1.8828232049903677e+00 -5.2220593977103924e+00 + 3.0373127426336033e-01 1.4689593823535541e+00 -5.8407724426232424e+00 + -1.7328492863519829e-01 1.2646990932604516e+00 -6.3712305837844108e+00 + -4.3024620464350705e-01 1.2912248953403993e+00 -6.6093013310885622e+00 + id 13386 + loc 9.3527352809906006e-01 3.1822785735130310e-02 393 + blend 0.0000000000000000e+00 + interp 4.1506226142492170e-01:3.2435292035716823e-01:3.9667872596864928e-01:3.6745724951715902e-01:1.0574521566205195e+00:2.4415161767590374e-01:1.9680799558135793e+00:3.6200616939260455e-01:3.0262398365517349e+00:4.1505811080230748e-01:3.7259708581313475e+00 + CVs 20 + 2.9106193832974409e-01 2.7548316170584519e-01 5.7343429241296463e-02 + 5.8602722839770283e-01 5.9233038349043743e-01 1.4871980794152728e-01 + 8.7957842727683799e-01 9.3337664415012889e-01 2.5840988999858694e-01 + 1.1667137306963948e+00 1.2917371139872893e+00 3.9403989128291111e-01 + 1.4403118160113628e+00 1.6570976019614501e+00 5.7743471360087195e-01 + 1.6968281568292454e+00 2.0044097443157760e+00 8.3012138704191707e-01 + 1.9337881362653051e+00 2.3018762426110424e+00 1.1621828276286548e+00 + 2.1452324855957130e+00 2.5215036588847122e+00 1.5647632257077302e+00 + 2.3256834082766433e+00 2.6387544657743809e+00 2.0144572739818969e+00 + 2.4767680645551495e+00 2.6279597653337570e+00 2.4763895373577860e+00 + 2.6032551791124581e+00 2.4614927978225909e+00 2.9033575555242455e+00 + 2.6956498526596184e+00 2.1225265822490140e+00 3.2302882019366574e+00 + 2.7323680335538443e+00 1.6637279032013232e+00 3.3966561100440167e+00 + 2.7349164891813613e+00 1.2245582699493243e+00 3.4530422617206487e+00 + 2.7708985370765093e+00 8.8192579960170137e-01 3.5484827562280707e+00 + 2.8845824259712471e+00 6.2763048411947642e-01 3.7429436910016127e+00 + 3.1127420473638510e+00 4.5372590348301767e-01 3.9910046591530963e+00 + 3.4355656145432700e+00 3.5747417657646574e-01 4.2172636428418793e+00 + 3.5696610615779085e+00 2.2884189153183732e-01 4.3443371864821287e+00 + id 13387 + loc 5.4040962457656860e-01 7.6470911502838135e-01 376 + blend 0.0000000000000000e+00 + interp 4.7630655722944731e-01:3.7467946319642303e-01:1.1016798048246201e-01:4.3936937231834222e-01:9.2709423505732991e-01:4.7092645659672805e-01:1.2415534618511064e+00:3.8172684383998023e-01:1.9956014169536600e+00:3.7390697740374496e-01:2.2337321422314238e+00:2.8752761761712103e-01:2.7658324833464283e+00:3.9356600699166056e-01:3.2238631340075674e+00:4.7630179416387503e-01:3.8414546142453956e+00 + CVs 20 + -7.0620212532042453e-02 4.5525468520508494e-01 5.8054606150549737e-01 + -9.9433228999838419e-03 7.7238269760540035e-01 1.1301952664084540e+00 + 1.6927061679105676e-01 9.4102322862473908e-01 1.6994330072078256e+00 + 4.1275937253977790e-01 1.0594914922290979e+00 2.2889469841678509e+00 + 6.3885910717823480e-01 1.2201922126433549e+00 2.8944028299911340e+00 + 7.5875403549255938e-01 1.4431416076400281e+00 3.5243266586322011e+00 + 7.1049820280118448e-01 1.7058389493976052e+00 4.1523970340975715e+00 + 4.8592453454113227e-01 1.9762569687025078e+00 4.7199420393430760e+00 + 1.1843754392327632e-01 2.2151801432145946e+00 5.1942685462331735e+00 + -3.5018315952086909e-01 2.3807353563255638e+00 5.5908416914991292e+00 + -8.9166357259220785e-01 2.4350094612606341e+00 5.9325484676256339e+00 + -1.4750113025278271e+00 2.3415731971100264e+00 6.2090264849253467e+00 + -2.0306433530543946e+00 2.0903993150775779e+00 6.3821475860043337e+00 + -2.4706196889060914e+00 1.7293245702161646e+00 6.4264122896064286e+00 + -2.7472527656544488e+00 1.3399540257646794e+00 6.3701293651461999e+00 + -2.8887796578954323e+00 9.7907188444845161e-01 6.2735305480969146e+00 + -2.9613136505916930e+00 6.6660261062147574e-01 6.1596745531392720e+00 + -2.9880696209902657e+00 3.7162851794234264e-01 6.0504444367977799e+00 + -2.8647433129414992e+00 1.0172989879503813e-01 6.0335931344316789e+00 + id 13388 + loc 1.4451994001865387e-01 2.4233266711235046e-01 396 + blend 0.0000000000000000e+00 + interp 4.9042742082901897e-01:3.3682594047422804e-01:7.4401301922201180e-01:3.1758064570506078e-01:1.1545103067336926e+00:4.9042251655481067e-01:2.0096970095738711e+00:3.5835315243477889e-01:2.6563711506790786e+00:3.1819321247601634e-01:3.0940581666949374e+00:3.6540646646482411e-01:3.9469651395798842e+00 + CVs 20 + -1.8602767211686697e-01 1.8702770199705221e-01 -7.2520141553067763e-01 + -3.3180774321566286e-01 2.4522124001437923e-01 -1.2839385650602446e+00 + -4.5454645103269364e-01 2.6126743759278348e-01 -1.7882598556908291e+00 + -5.6499778098719144e-01 2.6495863743760184e-01 -2.2840522009511335e+00 + -6.6554696473754604e-01 2.5255578890109365e-01 -2.7674861193835625e+00 + -7.6329495507591938e-01 2.1957351816842974e-01 -3.2379977428600735e+00 + -8.6525559186517931e-01 1.5922205892389352e-01 -3.6933646383755434e+00 + -9.7485412429616902e-01 6.1480818779987123e-02 -4.1282775854480054e+00 + -1.0937645419729571e+00 -8.6343244724218282e-02 -4.5381310111450688e+00 + -1.2245433665346375e+00 -2.9752199699741744e-01 -4.9160174055732595e+00 + -1.3683245369086565e+00 -5.7895602628951859e-01 -5.2439904323487490e+00 + -1.5204843432381732e+00 -9.2437050845258262e-01 -5.5001171868190317e+00 + -1.6728520067612718e+00 -1.3192666240532642e+00 -5.6763832901480180e+00 + -1.8206206956627780e+00 -1.7494070227520471e+00 -5.7781562060538096e+00 + -1.9601349446818037e+00 -2.2002064381816160e+00 -5.8086756245097426e+00 + -2.0835510483587196e+00 -2.6475337010503992e+00 -5.7672501068607556e+00 + -2.1790441000606333e+00 -3.0668506292355300e+00 -5.6589797312041714e+00 + -2.2451692813267012e+00 -3.4511678520529498e+00 -5.5018113282370065e+00 + -2.3513298389889932e+00 -3.9268046362185265e+00 -5.3919695652824640e+00 + id 13389 + loc 5.7594776153564453e-01 7.9714202880859375e-01 399 + blend 0.0000000000000000e+00 + interp 4.5941928745997801e-01:3.4159855987416088e-01:4.2157823239550596e-01:3.5876140467829243e-01:1.2477215289369665e+00:4.5941469326710344e-01:1.9671965816359904e+00:3.2824974859742112e-01:2.1981016217333811e+00:4.2978755544887920e-01:2.8569645399254684e+00:3.6225705141000986e-01:3.0790137053744271e+00:3.6538580390541975e-01:3.7376277805973217e+00 + CVs 20 + -1.8378161902242837e-01 3.5192050646020950e-01 -2.6089599200806196e-01 + -3.5061714588712756e-01 6.9774165174612779e-01 -5.5089257338739905e-01 + -5.2678536945773080e-01 1.0189749868210916e+00 -8.7115406192718570e-01 + -7.2632527030845895e-01 1.2934807859725574e+00 -1.2190245666141561e+00 + -9.5524565107033677e-01 1.4978183471629236e+00 -1.5873082529686895e+00 + -1.2113541476821681e+00 1.6111259245770990e+00 -1.9611625194027957e+00 + -1.4874809214561722e+00 1.6284972208071875e+00 -2.3222562532870223e+00 + -1.7784392728429388e+00 1.5647275240301237e+00 -2.6560691690673446e+00 + -2.0707044415836409e+00 1.4342779789524553e+00 -2.9507063769863615e+00 + -2.3379776964319530e+00 1.2444935164396451e+00 -3.1963411666411625e+00 + -2.5765285731245116e+00 1.0098345301795735e+00 -3.3991761760628827e+00 + -2.8221579842071782e+00 7.4386284364786026e-01 -3.5841118266312386e+00 + -3.1014159925078792e+00 4.6057686431806960e-01 -3.7639657043599426e+00 + -3.4093026162105837e+00 1.7937895451535063e-01 -3.9354860757475452e+00 + -3.7418538971947006e+00 -9.6574656444844198e-02 -4.1019845622102924e+00 + -4.1219140054071701e+00 -3.5694846767828992e-01 -4.2741195182025615e+00 + -4.5594007500516325e+00 -5.1085338767407873e-01 -4.4517829130888149e+00 + -4.9930635035513102e+00 -4.7950465696513689e-01 -4.6293759320327323e+00 + -5.4406805574662318e+00 -3.7786705451194014e-01 -4.8293886367219105e+00 + id 13390 + loc 1.1000386625528336e-01 4.7064745426177979e-01 374 + blend 0.0000000000000000e+00 + interp 4.9812381719584153e-01:4.7204656757873159e-01:3.8824143983884896e-02:3.8138635458116038e-01:7.2487293441613176e-01:4.9811883595766959e-01:1.6555596299965480e+00:4.1222289373800908e-01:2.0722172766635607e+00:3.9263003889531228e-01:2.8642416790632517e+00:3.7023743494226141e-01:3.6835395637067254e+00 + CVs 20 + -2.8204174874333110e-01 3.3997776253891460e-01 6.0649815803818163e-01 + -4.1934626498923505e-01 5.5158624341163209e-01 1.1192256486626737e+00 + -4.4614600306220031e-01 6.4003484617051387e-01 1.6252076852805650e+00 + -3.9805651787249263e-01 6.4886199158671809e-01 2.1691558274231673e+00 + -3.2104700393545083e-01 6.4115832273058926e-01 2.7493068897442314e+00 + -2.7880315854888038e-01 6.5232050635967165e-01 3.3639235962897596e+00 + -3.3273402769582205e-01 6.7930040585554652e-01 4.0147290778439348e+00 + -5.2682861666040159e-01 7.1168529611976261e-01 4.6847796772086685e+00 + -8.7019893130690140e-01 7.3869297977614679e-01 5.3235809037326121e+00 + -1.3248632956949118e+00 7.3914161055104133e-01 5.8762784850653142e+00 + -1.8248861440695343e+00 6.8627597705257237e-01 6.3115484692380450e+00 + -2.3041706844176288e+00 5.6334274941881590e-01 6.6148731076523921e+00 + -2.7154976607188290e+00 3.7971667996998182e-01 6.7895638304112289e+00 + -3.0537206701712400e+00 1.6250779130697390e-01 6.8568346515582483e+00 + -3.3189366803522766e+00 -6.0272445530186847e-02 6.8350302994473227e+00 + -3.4873126484615717e+00 -2.3951492208385883e-01 6.7565038991448301e+00 + -3.5594795741193064e+00 -3.0235586928496350e-01 6.6596295926584137e+00 + -3.6152594707738204e+00 -3.0298937638340151e-01 6.5433864293605364e+00 + -3.5524525366747124e+00 -7.0883268761797869e-01 6.5084242928952474e+00 + id 13391 + loc 6.9444906711578369e-01 3.8858228921890259e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0012729185502588e-01:2.8892977545980131e-01:3.4236574354159599e-01:2.7503449111154782e-01:1.1599384049896284e+00:4.0012329058210733e-01:1.9724607398126659e+00:3.2184479359239604e-01:2.4026486200028452e+00:2.9051530040608631e-01:3.0204766518598749e+00:2.7499594856325044e-01:3.8048956884777394e+00 + CVs 20 + 3.8154460305440396e-02 3.9897208575085752e-01 -4.1860696862763830e-01 + 3.3285205585354603e-02 7.4514621441687479e-01 -6.9459354990339051e-01 + 1.1342571135809790e-02 1.0436431030117179e+00 -9.0185583837730099e-01 + -3.3415278383379626e-02 1.3509593819677612e+00 -1.0906348614784824e+00 + -1.0474718052864304e-01 1.6658557971542101e+00 -1.2502244497984596e+00 + -2.0644956684100499e-01 1.9871025651820919e+00 -1.3661898778211881e+00 + -3.4797423815629824e-01 2.3166764798924482e+00 -1.4140192705603569e+00 + -5.5323945526189111e-01 2.6516885386504150e+00 -1.3382950683176007e+00 + -8.5144617283631363e-01 2.9213438588819125e+00 -1.0134301506871028e+00 + -1.1346067548558629e+00 2.8697905473346648e+00 -4.3032116141413979e-01 + -1.2318481734179185e+00 2.5189422061592199e+00 3.5205459578403708e-02 + -1.2194236232811326e+00 2.1212796166048697e+00 3.0154135325649722e-01 + -1.1696735784940862e+00 1.7368525036816740e+00 4.5743584103750329e-01 + -1.1108002806687869e+00 1.3756646812272886e+00 5.6004764589990041e-01 + -1.0470307552826081e+00 1.0496901782868788e+00 6.5771122422457584e-01 + -9.7299006094642637e-01 8.0967358388331889e-01 8.0611121964151156e-01 + -9.0597998996539009e-01 7.9636401039412708e-01 1.0422540057100917e+00 + -9.4575594709830779e-01 1.2460469325957559e+00 1.1956880236997796e+00 + -9.2345074435147145e-01 1.2254994399822146e+00 1.3538236263953698e+00 + id 13392 + loc 7.4521565437316895e-01 6.2225610017776489e-02 409 + blend 0.0000000000000000e+00 + interp 5.2925121918533014e-01:2.9771515689956429e-01:5.0935975780617815e-02:2.7276789798591877e-01:9.1477240938350568e-01:3.4385878846375512e-01:1.9923276409970818e+00:5.2924592667313830e-01:2.7581832674418840e+00:3.9038170725290328e-01:2.9999305558472509e+00:2.8974766523341527e-01:3.5764195860278956e+00 + CVs 20 + -1.6595774045907424e-01 -8.1364996919411181e-02 1.4220703684671032e-01 + -3.5473102045163224e-01 -1.4503740964733880e-01 2.8649311121161258e-01 + -5.5093591400266806e-01 -1.9762791427215398e-01 4.1333547804587695e-01 + -7.4445860811136078e-01 -2.4404267069870134e-01 5.1026935070943646e-01 + -9.3004344142689832e-01 -2.8598623970848708e-01 5.7748782967636192e-01 + -1.1017521655625442e+00 -3.2343342807682529e-01 6.1873747841262450e-01 + -1.2416803245044907e+00 -3.5014308358640711e-01 6.3550191021565317e-01 + -1.3264270287312836e+00 -3.5322683692391033e-01 6.2650933235629491e-01 + -1.3532844770542920e+00 -3.1659649686949887e-01 5.8387743952683846e-01 + -1.3415000443634133e+00 -2.2198059496766342e-01 4.9242805758298375e-01 + -1.3229484531248590e+00 -5.5665416839109194e-02 3.4688999511487606e-01 + -1.3446109269449900e+00 1.6298303275623960e-01 1.6641235377764785e-01 + -1.4414704500864888e+00 3.8009543780222121e-01 -2.1017507773387956e-02 + -1.6168498437729881e+00 5.5322677358244288e-01 -2.0080385115351188e-01 + -1.8546943243551024e+00 6.7122349356773892e-01 -3.6517748254273308e-01 + -2.1260565977562238e+00 7.4990749732785444e-01 -4.9935434743825746e-01 + -2.4007067727516667e+00 8.0302858444875758e-01 -5.9082776311397223e-01 + -2.6577473764716411e+00 7.9040364262623186e-01 -6.5335485233776225e-01 + -2.8127799177784132e+00 5.0311124599174906e-01 -7.3046253681637152e-01 + id 13393 + loc 8.2112413644790649e-01 4.5165437459945679e-01 402 + blend 0.0000000000000000e+00 + interp 3.9805440351315335e-01:3.0855465761296946e-01:6.6990514426007464e-01:3.5502885670410783e-01:1.0223296048753299e+00:2.4177119108751730e-01:1.7564432467334667e+00:2.9016567329631721e-01:2.5834911885694360e+00:3.9805042296911824e-01:2.9996532631948147e+00:2.5301739210940472e-01:3.6828698669290594e+00 + CVs 20 + 1.3738872322701606e-01 3.0465365290132962e-01 2.2883702295663602e-01 + 3.1117583488379141e-01 6.1844523479696933e-01 4.6387075205915868e-01 + 5.0377611221462848e-01 9.4022592458042309e-01 7.0692980387723092e-01 + 7.2387027144871230e-01 1.2461957163588608e+00 9.3662897121680921e-01 + 9.8699099666614731e-01 1.5138668971463798e+00 1.1292187115266858e+00 + 1.2901997450658733e+00 1.7481244902785187e+00 1.2894884551566503e+00 + 1.5849754452785143e+00 1.8967671111500291e+00 1.4593625407579500e+00 + 1.8520486649218642e+00 1.9368046222206279e+00 1.6291435870719111e+00 + 2.1919003978748535e+00 1.9122040973463295e+00 1.8556403803800379e+00 + 2.5555453998874365e+00 1.7923828535247794e+00 2.1440253282650348e+00 + 2.8398957717106690e+00 1.5842715690515048e+00 2.4582172911099871e+00 + 3.0185370469143216e+00 1.3526949853218104e+00 2.7560703794387602e+00 + 3.1044008414374988e+00 1.1527302377443120e+00 3.0155654035450614e+00 + 3.1159192199047738e+00 9.7995973445545992e-01 3.2345147330185768e+00 + 3.0887094973937494e+00 7.9059038131370307e-01 3.4246938169106032e+00 + 3.1006267861233465e+00 5.6038987224651160e-01 3.6019551701585542e+00 + 3.2059051906857938e+00 3.1142644792884988e-01 3.7695011938386811e+00 + 3.3796686966126166e+00 5.7498466347948529e-02 3.9475052086649787e+00 + 3.5559797375446367e+00 -1.8523752956947859e-01 4.2141908822843144e+00 + id 13394 + loc 3.3580416440963745e-01 5.0495254993438721e-01 380 + blend 0.0000000000000000e+00 + interp 4.5315285249750825e-01:3.0811739878324512e-01:5.4389329250371932e-01:3.2684364063599480e-01:1.4559492460291679e+00:4.5314832096898328e-01:1.9951172685533378e+00:4.3297275854732670e-01:2.3328211645910737e+00:2.6413009902362261e-01:2.9907596541960402e+00:4.2214379721607387e-01:3.3127061780290341e+00:3.4731552339240140e-01:3.9908556348285917e+00 + CVs 20 + -4.7692548770190835e-01 2.8256103632391083e-01 -4.6049826856887172e-01 + -8.9286020224975027e-01 4.7361280255422200e-01 -7.9758483127760971e-01 + -1.2989361780453887e+00 6.1921240146423995e-01 -1.1067778615419572e+00 + -1.7179035272633980e+00 7.4096564270474075e-01 -1.4338146633239177e+00 + -2.1410809742741095e+00 8.3316119775664466e-01 -1.7824363042447771e+00 + -2.5589988987210170e+00 8.8447776424743030e-01 -2.1509139398945991e+00 + -2.9649145314627563e+00 8.8122808018792975e-01 -2.5322669248135474e+00 + -3.3506087489441905e+00 8.1375753823370500e-01 -2.9146919069533030e+00 + -3.7063267955664934e+00 6.8051871747954329e-01 -3.2807098347476709e+00 + -4.0238132335235246e+00 4.9118390191687400e-01 -3.6080171860031842e+00 + -4.2971257036316519e+00 2.6676184647394630e-01 -3.8769312937996485e+00 + -4.5223531098704575e+00 3.1188611465137850e-02 -4.0807902089498223e+00 + -4.7047855808815164e+00 -2.0229808154454743e-01 -4.2333693108903336e+00 + -4.8593527733949706e+00 -4.5962824274352787e-01 -4.3646717096690688e+00 + -4.9950208961404119e+00 -7.8397602224882279e-01 -4.4972986811685471e+00 + -5.1142765517649176e+00 -1.1557198032791467e+00 -4.6464256528010068e+00 + -5.2127893265003244e+00 -1.4972595153642181e+00 -4.8199404775841526e+00 + -5.2922536677997343e+00 -1.7555452154035143e+00 -5.0111788089715406e+00 + -5.4880722284593375e+00 -1.9773176114911992e+00 -5.2228783057193375e+00 + id 13395 + loc 4.0553882718086243e-01 5.8949196338653564e-01 375 + blend 0.0000000000000000e+00 + interp 5.1701060292949319e-01:5.1700543282346390e-01:6.1710342160571630e-01:3.1009373259265166e-01:9.9999977265037143e-01:4.4924366524013348e-01:1.9535915175713705e+00:2.8546925465439338e-01:2.9072111017145934e+00:3.2785396803604305e-01:3.8232970606883576e+00 + CVs 20 + -4.8887551627319392e-01 4.0309435437530178e-01 -5.5780713411941671e-02 + -9.5227005850002477e-01 6.4675121078221209e-01 -5.6804128113468688e-02 + -1.4360211422772380e+00 7.1981740973476249e-01 -5.6166112975719051e-03 + -1.9572262693769140e+00 6.8669961292211523e-01 8.7010411607764071e-02 + -2.4957152486016723e+00 6.4081496023204743e-01 1.9790408666269993e-01 + -3.0247189112043698e+00 6.4029689236796861e-01 2.9139300167508231e-01 + -3.5284613305631574e+00 6.9842087419811372e-01 3.3739198363549927e-01 + -3.9985606503485305e+00 8.1340334446307749e-01 3.2608397560067481e-01 + -4.4206398048915636e+00 9.8347319376122710e-01 2.6631057171387928e-01 + -4.7814535787084385e+00 1.2077033664204220e+00 1.7376744718904469e-01 + -5.0905997051315701e+00 1.4840621826363503e+00 6.2781699563087545e-02 + -5.3835789518318800e+00 1.8183729674684397e+00 -6.9800886710867260e-02 + -5.7008145125278791e+00 2.1990122540524761e+00 -2.7373688644189231e-01 + -6.0548730150811743e+00 2.5580893128736450e+00 -6.1673408874318580e-01 + -6.3832175362168915e+00 2.8307736413834808e+00 -1.1224327738625868e+00 + -6.4818939025608540e+00 3.0275782555073762e+00 -1.7357425888838021e+00 + -6.1835023942322991e+00 3.1687269120225903e+00 -2.4071627924345647e+00 + -5.7568853778407263e+00 3.0404853438227573e+00 -2.9634245769291048e+00 + -5.8421392566102046e+00 2.7321927221562934e+00 -2.8581495773563717e+00 + id 13396 + loc 9.7563242912292480e-01 5.1168996095657349e-01 395 + blend 0.0000000000000000e+00 + interp 4.6121001214745011e-01:2.7046326981667329e-01:1.2234282557288823e-01:3.9656138883557679e-01:8.3699072208962910e-01:3.0160805049341383e-01:1.1241475431115555e+00:4.6120540004732868e-01:1.7024799365937850e+00:1.9040762015218063e-01:2.8055943176305345e+00:4.1113192682934274e-01:3.2867063977108710e+00 + CVs 20 + 5.6692943798208717e-01 2.3483932590193848e-01 -2.9127959183153096e-01 + 9.9455667732679820e-01 4.2465706457178459e-01 -5.9756660539074291e-01 + 1.3990241319749976e+00 6.0860161730099060e-01 -9.1420572539515876e-01 + 1.8292109188066858e+00 8.0386383904442593e-01 -1.2397500698239745e+00 + 2.2896942129726821e+00 1.0030663106834146e+00 -1.5653075689768345e+00 + 2.7852777657521637e+00 1.1896250079748696e+00 -1.8843279457606990e+00 + 3.3231781022638849e+00 1.3389607097098062e+00 -2.1920132012460716e+00 + 3.9068899949335085e+00 1.4215090232687717e+00 -2.4799285963327584e+00 + 4.5247292011362426e+00 1.4091252151098275e+00 -2.7386112099259572e+00 + 5.1496052958431626e+00 1.2812038397669667e+00 -2.9648988643790637e+00 + 5.7395538524146126e+00 1.0293052773558857e+00 -3.1567798010338981e+00 + 6.2530809924849979e+00 6.6164852017205833e-01 -3.3095471916101991e+00 + 6.6566762288268899e+00 2.2137706360650755e-01 -3.4221972924585362e+00 + 6.9433326119443119e+00 -2.0045267827845459e-01 -3.5066386418445301e+00 + 7.1374827058846453e+00 -5.2108986005601476e-01 -3.5823294231791554e+00 + 7.2521220755750146e+00 -7.1474904994962918e-01 -3.6554246556714429e+00 + 7.2868967524856734e+00 -7.9211621903462248e-01 -3.7015374121929758e+00 + 7.2703416691370428e+00 -8.0196406120587493e-01 -3.6892518095652305e+00 + 7.2838268731803506e+00 -8.7437032062897924e-01 -3.8168840669255926e+00 + id 13397 + loc 3.6298418045043945e-01 1.9493657350540161e-01 407 + blend 0.0000000000000000e+00 + interp 1.1698390469078355e+00:4.8297145477525755e-01:4.7722972083267345e-01:3.9483944464434856e-01:1.0200235535690620e+00:4.7166711872394629e-01:1.5433783664897565e+00:4.6652649168794919e-01:1.9746617801650110e+00:1.1698290469078354e+00:1.9915903160549502e+00:8.1668697064716167e-01:3.9959296114776564e+00:3.2523470427626650e-01:3.9996982988914667e+00 + CVs 20 + 8.0911711697658588e-03 3.9828172267801820e-01 -4.4169696916996332e-01 + 2.5887006669488836e-02 6.4690144409866168e-01 -6.6174773166331369e-01 + 5.8371279514673434e-02 8.1812327642571847e-01 -8.2158606505001031e-01 + 1.0897894343456202e-01 9.6080691348672853e-01 -9.9104488944320779e-01 + 1.8230712914637925e-01 1.0664248950500568e+00 -1.1610032224973270e+00 + 2.7980475394773252e-01 1.1264323759825507e+00 -1.3222896655266461e+00 + 3.9646314096697571e-01 1.1366750002549053e+00 -1.4678941228581681e+00 + 5.2279868399676577e-01 1.1024399505882831e+00 -1.5978096450031178e+00 + 6.5290558705493873e-01 1.0357787718190881e+00 -1.7202321700713887e+00 + 7.8624738738164923e-01 9.4670635318410845e-01 -1.8450796142374564e+00 + 9.2247090916049168e-01 8.4022860730147841e-01 -1.9775435783900686e+00 + 1.0589355310506738e+00 7.1952283024775665e-01 -2.1174791707857001e+00 + 1.1933205967205647e+00 5.9094238819505129e-01 -2.2639786012089407e+00 + 1.3261443649112301e+00 4.6630521199922481e-01 -2.4186718266240268e+00 + 1.4550558915414620e+00 3.5890509578305424e-01 -2.5804457712752402e+00 + 1.5700512022783546e+00 2.7677389404513442e-01 -2.7393670247333541e+00 + 1.6631881877475190e+00 2.1923262181042136e-01 -2.8817885229511551e+00 + 1.7401700941272125e+00 1.7736510275077144e-01 -3.0008173575247725e+00 + 1.8219766441485106e+00 1.3512552056710148e-01 -3.1055698200320676e+00 + id 13398 + loc 9.2812848091125488e-01 9.6698957681655884e-01 378 + blend 0.0000000000000000e+00 + interp 5.9292884339841168e-01:3.1881405504896509e-01:5.9077493579749785e-02:2.1564682340747743e-01:9.1741378231326220e-01:1.7825614034527784e-01:1.8949216081425821e+00:5.9292291410997777e-01:2.5299622231871393e+00:5.7774579073463417e-01:3.0260691209554951e+00:4.8864149704928428e-01:3.2725782075683201e+00 + CVs 20 + 5.7616978248013706e-01 3.3663817063396390e-01 2.7228172330021505e-02 + 1.0700901753032492e+00 5.7983180807051460e-01 1.4460496063671169e-02 + 1.5596449453764987e+00 7.6601453821924448e-01 -3.3508932345498954e-02 + 2.0748472312713582e+00 9.3521128705807455e-01 -1.0323716007950412e-01 + 2.6009349510611912e+00 1.1128345094345375e+00 -1.6694297265382507e-01 + 3.1281345216386169e+00 1.3038362629719249e+00 -1.9458726141418992e-01 + 3.6571601792324073e+00 1.4953574881078706e+00 -1.6278625691421023e-01 + 4.1879536302564091e+00 1.6709715600717274e+00 -5.6914721705265015e-02 + 4.7184809808479695e+00 1.8156732313458768e+00 1.3024733155667678e-01 + 5.2526231106527126e+00 1.9097504368841487e+00 4.0065016647372065e-01 + 5.7994792879868076e+00 1.9205701257897045e+00 7.4758711863771266e-01 + 6.3612187722527267e+00 1.7984350040667492e+00 1.1514327889432345e+00 + 6.9073478866833220e+00 1.4995788971693464e+00 1.5732348973811021e+00 + 7.3800911904391526e+00 1.0509640204665933e+00 1.9610110991558067e+00 + 7.7593134483667789e+00 5.5522379214689499e-01 2.2884932591204654e+00 + 8.0840402809145555e+00 9.0903260510137862e-02 2.5588254538930597e+00 + 8.4142812954272621e+00 -3.3118545339036132e-01 2.7633542970649367e+00 + 8.7805954294199786e+00 -7.3029609685662766e-01 2.8875618891849415e+00 + 9.1211006635918999e+00 -1.1890738066551227e+00 2.9941679885480088e+00 + id 13399 + loc 6.1590147018432617e-01 2.3186263442039490e-01 412 + blend 0.0000000000000000e+00 + interp 5.0401376066067127e-01:3.4431922450374580e-01:1.3433059651530632e-02:4.2959443395240060e-01:8.4176107372186160e-01:5.0400872052306467e-01:1.0384207207258365e+00:4.6415531889966544e-01:1.4295409386886444e+00:2.9840078576754231e-01:1.9305749380015933e+00:3.2464729663817937e-01:2.3879090983823925e+00:3.9284562761890363e-01:3.0230760664181258e+00 + CVs 20 + -5.5453586777044994e-01 1.8202375952433153e-01 1.8832913743586277e-01 + -9.4782179615102879e-01 3.1005065018584316e-01 3.5822982251145635e-01 + -1.2941217394011786e+00 4.2620513459185960e-01 5.2495891587400467e-01 + -1.6477314914328978e+00 5.4702864086095926e-01 6.9874414031309884e-01 + -2.0078713397826831e+00 6.6418543009711439e-01 8.7636737875544157e-01 + -2.3728906179000879e+00 7.7040132922462590e-01 1.0532714680961410e+00 + -2.7416677479951663e+00 8.6114098914314263e-01 1.2242831000993075e+00 + -3.1135637022552189e+00 9.3473825490585360e-01 1.3848420077853887e+00 + -3.4863067412482698e+00 9.9258484648222856e-01 1.5317659064658873e+00 + -3.8562434882346719e+00 1.0388147882318901e+00 1.6631837049946028e+00 + -4.2261343933600681e+00 1.0750478260453158e+00 1.7769969546536499e+00 + -4.6104593935242582e+00 1.0963258507980647e+00 1.8736354555031953e+00 + -5.0139546394868031e+00 1.0865076197515089e+00 1.9664416356576204e+00 + -5.4155505821523233e+00 1.0287328499338564e+00 2.0817518574202243e+00 + -5.7916205195188653e+00 9.2113756335936992e-01 2.2348115222171274e+00 + -6.1229912640028088e+00 7.7795657863703993e-01 2.4209437077359262e+00 + -6.3919776926213121e+00 6.2265018098750624e-01 2.6269248372831671e+00 + -6.5926930070255878e+00 4.7171096535693957e-01 2.8449299406769888e+00 + -6.7209574683918483e+00 3.1640751898584929e-01 3.0946977478134334e+00 + id 13400 + loc 6.6914731264114380e-01 3.5949021577835083e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6046281918946647e-01:2.8232961701590570e-01:1.8826151990892215e-02:3.0255057028218424e-01:8.1178513324389989e-01:3.0116593334876235e-01:1.4693302393879695e+00:2.8087133421611798e-01:2.0641842761313294e+00:4.6045821456127461e-01:2.9342418635737229e+00:2.8950024293347348e-01:3.4555659483188474e+00 + CVs 20 + -1.0445607235342050e-01 2.4125041410063108e-01 2.4483481389746392e-01 + -2.3425158593979264e-01 4.7428404402849306e-01 4.6951124373349429e-01 + -3.7533037911996225e-01 7.1314525439301646e-01 6.7600457636664946e-01 + -5.1728501296284091e-01 9.6480357428269548e-01 8.6536833399588842e-01 + -6.5809278896892176e-01 1.2350165578845078e+00 1.0419076382085866e+00 + -7.9323541777258921e-01 1.5257320685275471e+00 1.2193783657133102e+00 + -9.2097503732140606e-01 1.8271653076551986e+00 1.4257136162865125e+00 + -1.0401889276872351e+00 2.1190363772716037e+00 1.6782698816192405e+00 + -1.1512206381168255e+00 2.3826423869865456e+00 1.9738014381005944e+00 + -1.2636944352233881e+00 2.5918430694547832e+00 2.3118601537487580e+00 + -1.3925753206691198e+00 2.7064690748650007e+00 2.6858373148777170e+00 + -1.5437780856047296e+00 2.7134565722413146e+00 3.0659011853317133e+00 + -1.7205653228560287e+00 2.6407702834643541e+00 3.4338881281211511e+00 + -1.9335789216542825e+00 2.5116502792514868e+00 3.8086840838878713e+00 + -2.1739221046620041e+00 2.3185585360655057e+00 4.2210214026844541e+00 + -2.3872205827560165e+00 2.0546480307283055e+00 4.6763363520719787e+00 + -2.5052097430841562e+00 1.7536447837383580e+00 5.1574628564687286e+00 + -2.4847934258155142e+00 1.4830255543720816e+00 5.6329794719599224e+00 + -2.3249938395508227e+00 1.3267741300773461e+00 6.0006961640449541e+00 + id 13401 + loc 5.8240389823913574e-01 7.7413463592529297e-01 403 + blend 0.0000000000000000e+00 + interp 3.2131422771917229e-01:3.1569424031794774e-01:4.7283849926188826e-01:3.0338266487442417e-01:1.5577930412249854e+00:3.0356982668068488e-01:2.3470437789569827e+00:3.2131101457689509e-01:3.0004735787127097e+00:2.6161594079387540e-01:3.9387562346355258e+00 + CVs 20 + -5.8242861902711163e-02 -1.0975989402710676e-04 2.4378022267032028e-02 + -1.0402655616654520e-01 -1.4203786304557778e-03 4.8807599792097631e-02 + -1.2262655977070101e-01 3.6313240915918782e-03 7.7344267996360905e-02 + -1.2355136219095267e-01 1.2419798849589825e-02 1.0511487424139199e-01 + -1.0945745291678477e-01 2.7493827859459842e-02 1.2965537815310357e-01 + -8.1361163300692568e-02 5.0534478533355992e-02 1.4815103491927620e-01 + -3.9538690652409836e-02 8.1278334491486567e-02 1.5681841775593056e-01 + 1.6240473283187049e-02 1.1840138278462756e-01 1.5104394073382327e-01 + 8.5068916359810343e-02 1.6202993094372420e-01 1.2699724639596707e-01 + 1.6435074518792864e-01 2.1309288290728304e-01 8.1664480690281593e-02 + 2.5002257126927835e-01 2.7217620973533091e-01 1.2584193460856950e-02 + 3.3708405128497687e-01 3.3786440856295791e-01 -8.3016870847489099e-02 + 4.1964863605958480e-01 4.0700208119445830e-01 -2.0868994539395591e-01 + 4.9036948143028780e-01 4.7509981305149662e-01 -3.6777674334773686e-01 + 5.4018053065952454e-01 5.3673833200360366e-01 -5.6269081283523514e-01 + 5.5808089158134411e-01 5.8682972411137957e-01 -7.9386575341191379e-01 + 5.3099510111801829e-01 6.2524898730753309e-01 -1.0579020118851548e+00 + 4.4657930163427828e-01 6.5702218109202515e-01 -1.3436961678920871e+00 + 4.8034883519720339e-01 7.0278506995516798e-01 -1.4029879089329818e+00 + id 13402 + loc 8.1989133358001709e-01 2.3274829983711243e-01 400 + blend 0.0000000000000000e+00 + interp 4.7817447937859625e-01:4.1963055669987709e-01:1.6375798120672003e-01:3.2258060747947248e-01:9.2629848537958437e-01:2.5303231910819846e-01:1.4356635134579543e+00:3.3655635339071671e-01:2.2539965659131402e+00:3.9657693756385759e-01:3.0257670740369456e+00:4.7816969763380246e-01:3.8154763538435188e+00 + CVs 20 + 1.5823581811870946e-01 9.4842077225070820e-02 1.4758371676042928e-01 + 3.1635412255146661e-01 2.3624398142294811e-01 3.2709667132519754e-01 + 4.6115641370849547e-01 3.9818533879631873e-01 5.1730209053282927e-01 + 5.8910623851749411e-01 5.6415808141947665e-01 7.0755131256846582e-01 + 7.0288402376328818e-01 7.2825497718420684e-01 8.9603282245902161e-01 + 8.0466240069172901e-01 8.8595565887037964e-01 1.0808595983171301e+00 + 8.9639680732457849e-01 1.0349183396676074e+00 1.2625160684978707e+00 + 9.8025481561685668e-01 1.1726777142774840e+00 1.4454425927008621e+00 + 1.0581194049164324e+00 1.2946905500250621e+00 1.6367482053161275e+00 + 1.1322368689972628e+00 1.3944654733839401e+00 1.8416968668609974e+00 + 1.2063824814185309e+00 1.4640491063191492e+00 2.0588559732746674e+00 + 1.2849016981047359e+00 1.4951674982256686e+00 2.2783249664350551e+00 + 1.3704431438603213e+00 1.4840682163805066e+00 2.4863736157705842e+00 + 1.4636174352184155e+00 1.4344938898410104e+00 2.6731776930746998e+00 + 1.5650225648175737e+00 1.3547448701853531e+00 2.8332823099280913e+00 + 1.6786636087481890e+00 1.2543984083466224e+00 2.9632713921372860e+00 + 1.8090181038735629e+00 1.1395452141426778e+00 3.0608726315340329e+00 + 1.9485113124907940e+00 1.0085230640777079e+00 3.1218616793882856e+00 + 2.0578513166021328e+00 8.3875194220826299e-01 3.1053590487793734e+00 + id 13403 + loc 3.6172002553939819e-01 7.8802770376205444e-01 401 + blend 0.0000000000000000e+00 + interp 4.4511275915904464e-01:4.0216620132039133e-01:3.1850897159144609e-01:3.8575455283236015e-01:9.9728308789731979e-01:4.2807341630398438e-01:1.3937311375456798e+00:3.5559540210855450e-01:2.1221061012077671e+00:3.5858926727312690e-01:2.8990834990992465e+00:4.4510830803145307e-01:3.5456658890894279e+00:3.8719194139806251e-01:3.9891330482288998e+00 + CVs 20 + -1.9189232546055529e-01 2.7197342178755923e-01 -3.0821238817030389e-02 + -3.7963303107712632e-01 5.6981462035887054e-01 -7.3974826538641819e-02 + -5.6697069113027632e-01 9.0036133854998113e-01 -1.2702539018465717e-01 + -7.5282729213173183e-01 1.2704072229604728e+00 -2.0336547590038145e-01 + -9.1138583630202019e-01 1.6385280177648225e+00 -3.0634290601703307e-01 + -1.0129946989324443e+00 1.9501121708074378e+00 -4.0922015186533023e-01 + -1.0556703677367314e+00 2.2023340372124820e+00 -4.9924041708938205e-01 + -1.0618633719247335e+00 2.4236201072665460e+00 -5.9212359703199335e-01 + -1.0629705646837566e+00 2.6271850697285770e+00 -7.0471604630133300e-01 + -1.0970283973706054e+00 2.8051816288587967e+00 -8.4021349160041237e-01 + -1.2168939848096434e+00 2.9467029560052689e+00 -9.8224220678293173e-01 + -1.4841050431308551e+00 3.0330557286475073e+00 -1.0952516103317986e+00 + -1.8785292965393503e+00 3.0416420273154170e+00 -1.1701645579149698e+00 + -2.2913393172816483e+00 2.9728516471108373e+00 -1.2433766629610026e+00 + -2.6824653402236160e+00 2.8094089524985733e+00 -1.3148718023872841e+00 + -3.1460002185095912e+00 2.4453645455990296e+00 -1.3130598789710390e+00 + -3.7662733285039716e+00 1.8081918088043170e+00 -1.2789452404803618e+00 + -4.3899892357575006e+00 1.1162193046002722e+00 -1.4482835730929879e+00 + -4.5502860789969777e+00 8.6292392238847904e-01 -1.8198911947910972e+00 + id 13404 + loc 5.2073043584823608e-01 1.4821451902389526e-01 376 + blend 0.0000000000000000e+00 + interp 4.4012176837666761e-01:3.9570324369155319e-01:8.5341106737994954e-01:3.3866171250400240e-01:1.2009549823583145e+00:3.5811349010055327e-01:1.5229995568618400e+00:4.1222289373800908e-01:2.0869115086488770e+00:4.0300240626402384e-01:3.0018929958998233e+00:4.4011736715898386e-01:3.4698476704064758e+00:2.7267497240760463e-01:3.9988014638828169e+00 + CVs 20 + 2.0356262184492710e-01 3.7706547393046769e-01 -5.6375719700859872e-01 + 3.0156608622612829e-01 6.3150672889854698e-01 -1.0424326973057614e+00 + 3.1599328814747496e-01 7.6258648944093010e-01 -1.5091651996143240e+00 + 2.8162134355841717e-01 8.0445779522174732e-01 -1.9830027641971655e+00 + 2.3411204031477939e-01 8.0991530198909067e-01 -2.4466397049775326e+00 + 2.0797247844373923e-01 8.1342976328733241e-01 -2.8904173923935872e+00 + 2.2995430920906912e-01 8.1603844752527843e-01 -3.3137714346259846e+00 + 3.0954617355857117e-01 8.0646487824473811e-01 -3.7087441769609319e+00 + 4.3539291568890259e-01 7.8739813252747992e-01 -4.0605677820830310e+00 + 5.8951123474338052e-01 7.8107205784821354e-01 -4.3563260934460732e+00 + 7.4389857957498307e-01 8.2138234585770387e-01 -4.5978290022622197e+00 + 8.6801297961464041e-01 9.5238059487298177e-01 -4.8178752174198900e+00 + 9.8256651017514740e-01 1.1977760578909893e+00 -5.0807136006620528e+00 + 1.1716794204732768e+00 1.4981466287551466e+00 -5.4477447211437475e+00 + 1.5232077719908046e+00 1.7463009170979853e+00 -5.9015712845382371e+00 + 2.0975746787990874e+00 1.8674582880674306e+00 -6.2560586216184948e+00 + 2.8816770761457682e+00 1.8461298582125860e+00 -6.2789756664559082e+00 + 3.6761376103323200e+00 1.5385496180467899e+00 -6.0586431631433131e+00 + 3.6656075745482513e+00 9.7011163570477210e-01 -6.2633272696098210e+00 + id 13405 + loc 7.6609176397323608e-01 3.3856666088104248e-01 1078 + blend 0.0000000000000000e+00 + interp 3.5387229138534382e-01:2.7931641854957240e-01:3.8285059718264203e-01:2.8917238192647354e-01:1.1063211291264092e+00:3.5386875266242995e-01:1.9793027026450356e+00:3.0476044038062849e-01:2.4526641797770772e+00:2.9924681546606974e-01:3.0314191630198888e+00:3.1018261136791170e-01:3.9354390790998930e+00 + CVs 20 + -7.7702355375601190e-02 3.9448600436697279e-01 8.9984162534865658e-02 + -1.9698449670847329e-01 7.9090029659972405e-01 2.0602858646190725e-01 + -3.5089879133940149e-01 1.1709571229759648e+00 3.8051387762875205e-01 + -5.3498666849479248e-01 1.5090832214809524e+00 6.3032013849315249e-01 + -7.4265558925987663e-01 1.7764619459608086e+00 9.5858907288321804e-01 + -9.5908878385538043e-01 1.9446230231564514e+00 1.3561973520001647e+00 + -1.1622356135261853e+00 1.9926548431549758e+00 1.8022316984887610e+00 + -1.3259629606280652e+00 1.9110341715010088e+00 2.2676910665491961e+00 + -1.4266504303002099e+00 1.7018211766665767e+00 2.7166433718591136e+00 + -1.4536156253943266e+00 1.3806427668573149e+00 3.1079093503010657e+00 + -1.4136108497974553e+00 9.7573327375661367e-01 3.4032168852391331e+00 + -1.3371563822115988e+00 5.2960392929035582e-01 3.5816646836673454e+00 + -1.2691953581038944e+00 9.0799394771915676e-02 3.6681464881901236e+00 + -1.2229598743731214e+00 -3.0525100240892411e-01 3.7478649005755509e+00 + -1.1683197332338622e+00 -6.2974498815700830e-01 3.9492798726066480e+00 + -1.0922703141053769e+00 -7.9412198007065005e-01 4.3618500754750853e+00 + -1.0418160159191820e+00 -6.6546551504412754e-01 4.8950560562961325e+00 + -1.0956610663496238e+00 -8.1711494569733922e-02 5.3318853439249114e+00 + -1.1091667103489065e+00 -4.4872852331828472e-02 5.5085270482309623e+00 + id 13406 + loc 7.8047400712966919e-01 9.7496145963668823e-01 396 + blend 0.0000000000000000e+00 + interp 3.6999413905968004e-01:2.7129216668898143e-01:1.3768229372650431e-03:2.9898640645646513e-01:6.9764276878126541e-01:3.2762307635836330e-01:1.6317997947176004e+00:2.7140600737610093e-01:2.1363580884858440e+00:2.6991831417576484e-01:3.0019064145597509e+00:3.6999043911828944e-01:3.6085590436653598e+00 + CVs 20 + 1.0231717210367639e+00 2.5465661907153625e-01 -3.2384969224974680e-01 + 1.6992980466352132e+00 3.2038001722328285e-01 -5.7041333308831699e-01 + 2.2894063918867009e+00 3.0550458075313547e-01 -8.0021013097696181e-01 + 2.8972178492650040e+00 2.4762809847559764e-01 -1.0358334281113861e+00 + 3.5100924575313401e+00 1.3296945091208268e-01 -1.2772195700828850e+00 + 4.1144659944506641e+00 -4.6761463882482590e-02 -1.5261957481975712e+00 + 4.6945855677712860e+00 -2.9287618900612511e-01 -1.7846561039434392e+00 + 5.2321264334744688e+00 -6.0277252962933592e-01 -2.0486862587663870e+00 + 5.7087603355322596e+00 -9.7174991302350500e-01 -2.3074589938791661e+00 + 6.1018274079576571e+00 -1.3853422281962176e+00 -2.5474920198762971e+00 + 6.3944485273903897e+00 -1.8174201368518585e+00 -2.7607897734782005e+00 + 6.5876603517062318e+00 -2.2406963952759424e+00 -2.9461530527913351e+00 + 6.6961999286996354e+00 -2.6350591670322538e+00 -3.1051406359460074e+00 + 6.7476151153373358e+00 -2.9896656275868327e+00 -3.2323224364765197e+00 + 6.7660651080278562e+00 -3.3013442583894577e+00 -3.3221460134772771e+00 + 6.7703286168763270e+00 -3.5659429966304379e+00 -3.3761668571437156e+00 + 6.7737982446211991e+00 -3.7834504529204516e+00 -3.4044067107185443e+00 + 6.7762932224399854e+00 -3.9735747328015121e+00 -3.4193516919631510e+00 + 6.6955885784640836e+00 -4.2548256311572086e+00 -3.4152539314080679e+00 + id 13407 + loc 9.6396291255950928e-01 5.4101216793060303e-01 374 + blend 0.0000000000000000e+00 + interp 4.3307845849919413e-01:3.9218319706752369e-01:6.8725666633554738e-01:3.8693770184122062e-01:1.1486871975116786e+00:3.6415128520212403e-01:2.0054033039875456e+00:3.6754323298579089e-01:2.1447907989284687e+00:4.3307412771460918e-01:2.7968607812405200e+00:1.4520216425994756e-01:3.4082860653980855e+00 + CVs 20 + -7.7156899935347822e-01 4.1814951160445990e-01 -5.4716177799371601e-01 + -1.4299454911424139e+00 6.9194230726332562e-01 -9.3371247077901598e-01 + -2.0788707215308446e+00 8.8729094634985117e-01 -1.2277652264008709e+00 + -2.7324385190107665e+00 1.0462542805226975e+00 -1.4755788735892703e+00 + -3.3665519411911711e+00 1.1645151801769016e+00 -1.6983672404083932e+00 + -3.9839116417667686e+00 1.2143660840283341e+00 -1.9111771471142034e+00 + -4.5882580362275007e+00 1.1659488031306007e+00 -2.1219556340378602e+00 + -5.1717157141883687e+00 1.0024734695509105e+00 -2.3352055764913748e+00 + -5.7200032744634131e+00 7.2225698159601226e-01 -2.5526777572924488e+00 + -6.2181321156662399e+00 3.3851281687236767e-01 -2.7639239404395664e+00 + -6.6611454635232796e+00 -1.1954765323450989e-01 -2.9383723257386940e+00 + -7.0553661196336517e+00 -6.1566643462019277e-01 -3.0399548766456252e+00 + -7.4054415201657715e+00 -1.1210141792350075e+00 -3.0507893495730727e+00 + -7.7235131905455834e+00 -1.6343309191681055e+00 -2.9763606018562596e+00 + -8.0236561818041814e+00 -2.1571484404101069e+00 -2.8441142878784320e+00 + -8.3123745006957339e+00 -2.6420044719117599e+00 -2.6958480739309931e+00 + -8.5731392455183233e+00 -3.0121663495609674e+00 -2.5507635100679971e+00 + -8.8036465307325749e+00 -3.2945006528405378e+00 -2.4261087453063701e+00 + -9.0827360119660661e+00 -3.6822885406167445e+00 -2.3590639023044475e+00 + id 13408 + loc 5.6153637170791626e-01 3.4062197804450989e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3348034466037177e-01:4.3347600985692519e-01:3.8133314368703486e-03:2.7892577697167642e-01:4.6340928343860843e-01:2.8508453518796562e-01:1.0919023001512103e+00:2.7638323239231150e-01:1.9998362836701256e+00:2.8441628381532880e-01:2.6570969890420342e+00:2.9367334309750248e-01:3.1418643765682597e+00 + CVs 20 + 4.0086281255702821e-02 4.2507125837869153e-01 -4.5151093285659222e-01 + 4.9421641232096164e-02 8.0260872570824771e-01 -7.5059537675946619e-01 + 4.9818254015472407e-02 1.1359070502482926e+00 -9.7255009453473151e-01 + 3.9175209031431873e-02 1.4863185875787863e+00 -1.1822818491706091e+00 + 1.1386397558079936e-02 1.8505186773816349e+00 -1.3687921646093750e+00 + -4.0643438385701891e-02 2.2233464245658565e+00 -1.5158721204244956e+00 + -1.2881993033330169e-01 2.6028522476481699e+00 -1.5974595739424551e+00 + -2.7814214891480593e-01 2.9879566748725965e+00 -1.5595450708937655e+00 + -5.3986939864500416e-01 3.3378299104044826e+00 -1.2471716909953341e+00 + -8.4542306354612851e-01 3.2762882560967972e+00 -4.2080253957608771e-01 + -8.0227842933992011e-01 2.6324738390261140e+00 2.3132219211430649e-01 + -6.2824275495418325e-01 2.0898405302852283e+00 4.7075268383305280e-01 + -4.6924257176859380e-01 1.6526553399698465e+00 6.0074705964644703e-01 + -3.3973154189780985e-01 1.2534326187489011e+00 7.1267805861545652e-01 + -2.3553776522134642e-01 8.9132761154239959e-01 8.4751484440902869e-01 + -1.4149658946632149e-01 6.2984188310937195e-01 1.0484149157159137e+00 + -4.8937928908310863e-02 6.3197317531237351e-01 1.3560071172176551e+00 + -3.0196774935848880e-02 1.2300012153382180e+00 1.6743722129875178e+00 + 3.0038504051591891e-02 1.1700423509813029e+00 1.8773647672255556e+00 + id 13409 + loc 4.5396214723587036e-01 1.0431646555662155e-01 373 + blend 0.0000000000000000e+00 + interp 3.8687211564566842e-01:2.8592138977612996e-01:1.0897395392611686e-01:3.3086000836926255e-01:1.4288212049276123e+00:3.8686824692451199e-01:2.0499408364205260e+00:2.8361052189647667e-01:2.6665727525777703e+00:3.5700866252064994e-01:3.0311212806913326e+00:3.0578598684650510e-01:3.6850270656557949e+00 + CVs 20 + -9.3805184525136934e-02 6.5813636645718276e-01 3.8700743985874025e-01 + -1.7095153197679372e-01 1.2953029136077761e+00 7.7002340111557765e-01 + -2.7284680029818065e-01 1.9198471046353756e+00 1.1326904313334114e+00 + -4.5749230237949384e-01 2.5325433843754044e+00 1.3979886072232066e+00 + -7.4397895890439369e-01 3.1114362470322887e+00 1.4722571062752734e+00 + -1.1146573053328857e+00 3.5908680766458003e+00 1.3144973659028554e+00 + -1.5188714339645148e+00 3.8327158814829287e+00 9.2547696831269932e-01 + -1.8869148037718808e+00 3.7523036676206400e+00 3.8915126389501697e-01 + -2.1867227902903283e+00 3.3624327888854850e+00 -2.1105690315607828e-01 + -2.4035360010149809e+00 2.6895233064604560e+00 -8.3095446172880583e-01 + -2.5142700852773272e+00 1.7819831405300146e+00 -1.4497248579936621e+00 + -2.4736089839331816e+00 7.1975371577963898e-01 -2.0556765231300740e+00 + -2.2631726754849657e+00 -3.3081784146237758e-01 -2.7026860970719770e+00 + -1.9650532639750722e+00 -1.1393556380204668e+00 -3.4736818349740117e+00 + -1.8261116326705480e+00 -1.4223498962494581e+00 -4.3115090680434323e+00 + -1.9759226033808810e+00 -1.1494799149533017e+00 -4.9260661518350970e+00 + -2.2532262765983049e+00 -6.5077614336353751e-01 -5.2628542445078939e+00 + -2.5764889007930321e+00 -1.2738565833320559e-01 -5.4767503112775593e+00 + -3.0269403241347801e+00 3.3725371353753530e-01 -5.8506360211000565e+00 + id 13410 + loc 5.2462989091873169e-01 4.5993289351463318e-01 402 + blend 0.0000000000000000e+00 + interp 4.0645409835790469e-01:3.0276276213447018e-01:4.3018404506890762e-01:4.0645003381692113e-01:9.9744962065627285e-01:3.0777848001792768e-01:1.9642262700999014e+00:3.3937998498419153e-01:2.5253232698725152e+00:3.5867568595620641e-01:3.0428730673708744e+00:2.8540442504430180e-01:3.9520997906436630e+00 + CVs 20 + 6.5749532454332030e-02 2.7536538412299771e-01 1.4690311450462265e-01 + 1.4670092244281185e-01 5.4782222698273064e-01 3.2623391718226774e-01 + 2.2346318299656281e-01 8.0888811823869089e-01 5.3281012556336727e-01 + 2.9364504395147351e-01 1.0493467474503386e+00 7.5849339843861630e-01 + 3.7198177458847820e-01 1.2554178718065481e+00 9.8671433028049127e-01 + 4.6807997596809864e-01 1.4147636665289829e+00 1.1945092840047240e+00 + 5.8077542585044717e-01 1.5201155873482861e+00 1.3598623570625656e+00 + 7.0520656168486517e-01 1.5721388513982371e+00 1.4668805361550219e+00 + 8.3391680087668341e-01 1.5903857633476817e+00 1.5102249093817552e+00 + 9.6374251407545042e-01 1.6144395526745208e+00 1.4949272195741696e+00 + 1.1033535120000344e+00 1.6146829619061709e+00 1.4707978576972616e+00 + 1.2046206759607765e+00 1.4389655375514137e+00 1.5146143462602799e+00 + 1.2330497412674264e+00 1.0065976442678051e+00 1.6481611210750269e+00 + 1.2858576026994126e+00 3.5972540965234073e-01 1.8695427623240477e+00 + 1.5048442898134828e+00 -3.7010376754765595e-01 2.1552657281881391e+00 + 1.9177311827526937e+00 -9.8320987237405422e-01 2.4396061951048278e+00 + 2.4175552805607445e+00 -1.3805194654501407e+00 2.6898729303123368e+00 + 2.8895142926933057e+00 -1.6019306280342067e+00 2.9576221906794919e+00 + 3.1982003736982865e+00 -1.6815566110055531e+00 3.3336018121272315e+00 + id 13411 + loc 4.4004073739051819e-01 2.7189132571220398e-01 380 + blend 0.0000000000000000e+00 + interp 4.4935843563035932e-01:4.4935394204600304e-01:3.0984628206196374e-01:3.9927337095959387e-01:9.9464387627102835e-01:4.3120970389229030e-01:1.5352464682513767e+00:4.3944844045899822e-01:2.0049351269672675e+00:3.4616684287769556e-01:2.6929387495112813e+00:4.1103723539283893e-01:3.0959058868088061e+00:2.8853630628770877e-01:3.8351806468937761e+00 + CVs 20 + -5.4227772320387002e-01 4.5705116228977410e-01 6.2510951328247466e-01 + -9.5226884271676648e-01 7.8352824625013695e-01 1.1898525047378614e+00 + -1.3412247044287151e+00 1.0367037368100771e+00 1.7432732807464817e+00 + -1.7619006317457195e+00 1.2349469378026519e+00 2.3193386988658786e+00 + -2.2219885908389041e+00 1.3666938996428764e+00 2.9119608454167047e+00 + -2.7194198750035703e+00 1.4135075767189522e+00 3.5088145319686066e+00 + -3.2433485622204357e+00 1.3585643632266837e+00 4.0860758918969386e+00 + -3.7765000235210016e+00 1.1965963549695604e+00 4.6103634397659734e+00 + -4.2869923266881766e+00 9.4136340327644996e-01 5.0569562873877620e+00 + -4.7355553477808661e+00 6.1564719994274286e-01 5.4215542450279433e+00 + -5.0911184079317078e+00 2.3364225337881939e-01 5.7103388659623144e+00 + -5.3424552102798177e+00 -1.8925839837909830e-01 5.9241690048600955e+00 + -5.4950092601169747e+00 -6.1681813062717161e-01 6.0669139016824580e+00 + -5.5718749595130745e+00 -9.9761106156679036e-01 6.1568427226766982e+00 + -5.5982088813469799e+00 -1.3124755933512189e+00 6.2109554493125039e+00 + -5.5799107294741477e+00 -1.5803933653115494e+00 6.2287081867760072e+00 + -5.5275529530307965e+00 -1.8175681438395679e+00 6.1969061233412281e+00 + -5.4706166329237078e+00 -2.0433098424897200e+00 6.1163090381908720e+00 + -5.4215512888771613e+00 -2.3272447841327000e+00 6.1470852691365625e+00 + id 13412 + loc 9.2374372482299805e-01 1.0864943265914917e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3477434744001381e-01:3.0782480601661977e-01:1.4447786917449301e-01:2.9919857272235206e-01:1.1096083458320321e+00:2.8986619673507602e-01:2.0001913616149074e+00:4.3476999969653946e-01:2.9217464117131717e+00:3.9310065891964918e-01:3.2169564566320457e+00:2.7374412811868204e-01:3.8323827122423957e+00 + CVs 20 + 3.6546822378929533e-02 3.2993545838640104e-01 3.0782551105563860e-01 + 1.6333415268034557e-02 6.2864262478037358e-01 5.8586051312402398e-01 + -5.1617262371892902e-02 9.1669137420464408e-01 8.3835427734586709e-01 + -1.6020138311603838e-01 1.2003664661833966e+00 1.0488044620862307e+00 + -2.7256739473690472e-01 1.4668968110141871e+00 1.1898452364913665e+00 + -3.2763775128826056e-01 1.6940874807924584e+00 1.2554251102809437e+00 + -3.1858559231907424e-01 1.8817607448510971e+00 1.2698644734811193e+00 + -2.6853244037232682e-01 2.0796409366048416e+00 1.2687722649663720e+00 + -1.7016477125992235e-01 2.3207990151016760e+00 1.2818767464009198e+00 + -6.3354373222290761e-04 2.6003399703882333e+00 1.3501320615925814e+00 + 2.5695014750792966e-01 2.8654650484377764e+00 1.5197653148584516e+00 + 5.7948064213723227e-01 3.0436830447221812e+00 1.7910415636258865e+00 + 9.3547572140409097e-01 3.1015156900530370e+00 2.1393118157143447e+00 + 1.3009176209155451e+00 3.0176857667001409e+00 2.5399282703843169e+00 + 1.6453317117770321e+00 2.7821934452564014e+00 2.9694781445487690e+00 + 1.9377563011354506e+00 2.3729804064014113e+00 3.4262661226436695e+00 + 2.1187127936091157e+00 1.7428498554503125e+00 3.8703954168430803e+00 + 2.1265314704477900e+00 1.0174614124233594e+00 4.1642481114050103e+00 + 2.0995827301991197e+00 7.4660328485339633e-01 4.2654705936273638e+00 + id 13413 + loc 8.8272619247436523e-01 1.2351765483617783e-01 415 + blend 0.0000000000000000e+00 + interp 4.9969340271861773e-01:3.9811508517164118e-01:3.4163069785443323e-01:3.8529195127177707e-01:1.0178960680465090e+00:4.9968840578459056e-01:1.3765946504842503e+00:3.9360901825744782e-01:2.0013585076149365e+00:3.5624859985317692e-01:2.9378531297991715e+00:3.4816685411836779e-01:3.9252883383043300e+00 + CVs 20 + -1.8664275979188799e-01 1.4345945397383084e-01 3.0677706339259231e-02 + -3.5968685540573586e-01 2.7926719129672473e-01 5.9613772769883250e-02 + -5.2848776234589634e-01 4.2028178433747376e-01 6.6172335070255356e-02 + -6.9626764351985027e-01 5.6957249729963122e-01 4.0331965482784393e-02 + -8.5861056117233270e-01 7.2127077541366624e-01 -2.0775760832864310e-02 + -1.0081123681933408e+00 8.6891259590415126e-01 -1.1863521313049680e-01 + -1.1377933687146418e+00 1.0079124724008162e+00 -2.5221865574658381e-01 + -1.2433943627525188e+00 1.1358816696127942e+00 -4.1724847790403391e-01 + -1.3205910119384059e+00 1.2507205467646365e+00 -6.0619420382330347e-01 + -1.3671372913002036e+00 1.3514916215207222e+00 -8.1126953732568563e-01 + -1.4013670300901708e+00 1.4434092912573719e+00 -1.0421239153759407e+00 + -1.4790417264949074e+00 1.5340448555839181e+00 -1.3385262212555129e+00 + -1.6766513884692351e+00 1.6112837667949780e+00 -1.7138360916627531e+00 + -2.0087276557526934e+00 1.6427333031310769e+00 -2.0915244202108170e+00 + -2.4124500389629935e+00 1.6158706925542989e+00 -2.4037286746265671e+00 + -2.8649104801930978e+00 1.5319252924519164e+00 -2.6431327290742588e+00 + -3.3668223276684595e+00 1.3902052175242874e+00 -2.7993647136647235e+00 + -3.8699971881619497e+00 1.2072729027511317e+00 -2.8666924500034927e+00 + -4.0839597333488600e+00 1.1004344931775316e+00 -2.9791873309264552e+00 + id 13414 + loc 1.1371520347893238e-02 2.5155248120427132e-02 409 + blend 0.0000000000000000e+00 + interp 4.5997854771353774e-01:1.8352730998428907e-01:9.9813401688967185e-01:2.7612797868884831e-01:1.7580135167030790e+00:4.5997394792806062e-01:2.2730047060261107e+00:3.1957761495209053e-01:2.9660600210718204e+00:4.1212393067510777e-01:3.3438653463913721e+00:2.9943448277831963e-01:3.9609188610624395e+00 + CVs 20 + -2.6159730121876978e-01 2.1772117125664128e-01 -2.3350493443179121e-01 + -5.1019850659994892e-01 4.3971801086536849e-01 -4.6207136916869640e-01 + -7.5125253249719726e-01 6.7735740533437327e-01 -7.0600503810262683e-01 + -9.8871464544497367e-01 9.1680455856225418e-01 -9.6114383573458062e-01 + -1.2394306123039924e+00 1.1356858222987241e+00 -1.2159779673994844e+00 + -1.5259681880529210e+00 1.3166072817191805e+00 -1.4681174234832022e+00 + -1.8633435546362416e+00 1.4418456851090833e+00 -1.7227756022150857e+00 + -2.2472660560807962e+00 1.4874103161945667e+00 -1.9915950793612001e+00 + -2.6419639519035205e+00 1.4333747661621419e+00 -2.2883051272223272e+00 + -2.9942817475881576e+00 1.2772774456807774e+00 -2.6149733299559275e+00 + -3.2549296015668374e+00 1.0317674159195533e+00 -2.9582591106434464e+00 + -3.4035000952468812e+00 7.1711055156771830e-01 -3.3102940071732823e+00 + -3.4723883477567377e+00 3.5418466935053172e-01 -3.6802421874854687e+00 + -3.5246389098354203e+00 -3.5737656329065004e-02 -4.0742263622339001e+00 + -3.6131620360350847e+00 -4.1690545738733720e-01 -4.4801522146580286e+00 + -3.7578811318977747e+00 -7.3088508108493233e-01 -4.8627581447517425e+00 + -3.9496375786382369e+00 -9.4888993805856869e-01 -5.1895907477472329e+00 + -4.1955264668604588e+00 -1.1106993988153726e+00 -5.4872173676658598e+00 + -4.5425827036147126e+00 -1.3010322642363463e+00 -5.8807952108122317e+00 + id 13415 + loc 6.8913424015045166e-01 5.8925259113311768e-01 393 + blend 0.0000000000000000e+00 + interp 4.2684208244438260e-01:4.2618908619661089e-01:4.2681441985601010e-01:2.6554897368490887e-01:1.1117304770727883e+00:4.2683781402355819e-01:1.9893118407531225e+00:2.5814837617259301e-01:2.6620209769477743e+00:4.1922817898435816e-01:3.0067339111753251e+00:2.8037401156931485e-01:3.9989291970352081e+00 + CVs 20 + -3.1208059833136403e-01 3.6363801796177075e-01 -3.4166010596006480e-01 + -5.7326403906956935e-01 7.0764918497737650e-01 -6.5904012025876435e-01 + -8.0782017536550144e-01 1.0422096890096695e+00 -9.8388529635715760e-01 + -1.0376774833424818e+00 1.3589672148542615e+00 -1.3294706232856639e+00 + -1.2818726943533219e+00 1.6432402212714912e+00 -1.6936071608307797e+00 + -1.5563685228319504e+00 1.8885990747336332e+00 -2.0682471969893714e+00 + -1.8707388098466451e+00 2.0900038219561878e+00 -2.4399435436304007e+00 + -2.2257034927156738e+00 2.2316291633272121e+00 -2.7909638524177605e+00 + -2.6119643450209011e+00 2.2859141095481337e+00 -3.1047980801043509e+00 + -3.0141313929630251e+00 2.2388260681335233e+00 -3.3768034693357301e+00 + -3.4260073838340781e+00 2.1099472646548052e+00 -3.6134988045440939e+00 + -3.8413900680798552e+00 1.9254639462765128e+00 -3.8182015144428454e+00 + -4.2444468152749781e+00 1.7071713551801670e+00 -3.9759646334599323e+00 + -4.6283234056553306e+00 1.4762180695106668e+00 -4.0824836659384829e+00 + -5.0114120723002333e+00 1.2380096340084101e+00 -4.1703569565007719e+00 + -5.4180426101580865e+00 9.7595481702898246e-01 -4.2817100487615907e+00 + -5.8454913901482266e+00 7.0964448643804268e-01 -4.4082693522418674e+00 + -6.2791627819831213e+00 4.9614226429896879e-01 -4.5132428249177963e+00 + -6.7053596877580599e+00 3.6778224421539019e-01 -4.5618935559868294e+00 + id 13416 + loc 4.0258514881134033e-01 4.5360836386680603e-01 399 + blend 0.0000000000000000e+00 + interp 3.7409685418446542e-01:3.4799907223889592e-01:1.8759915726368637e-01:3.1968248182189896e-01:1.0614407449947749e+00:2.8495505056247999e-01:1.8586366404322829e+00:3.7409311321592359e-01:2.1841760789554114e+00:2.7147543736128832e-01:3.0082859775650452e+00:2.9593055216706649e-01:3.8516190303639561e+00 + CVs 20 + -2.1569430121201405e-01 3.6065112020029444e-01 7.9368100032153055e-02 + -4.5242110648189116e-01 7.1203920996899128e-01 1.6211585495103159e-01 + -7.1972759433588862e-01 1.0394430547778513e+00 2.2338120406575496e-01 + -1.0125359094981410e+00 1.3385975380920134e+00 2.6378469099716123e-01 + -1.3220481613852983e+00 1.6115621493735663e+00 2.9721951142364683e-01 + -1.6440645090398369e+00 1.8574084810574549e+00 3.3631505757528657e-01 + -1.9791055228546421e+00 2.0697348674812170e+00 3.9073791102231720e-01 + -2.3292310595279195e+00 2.2372213422420475e+00 4.6853006718840373e-01 + -2.6925715765736529e+00 2.3438544151490932e+00 5.7407611511233225e-01 + -3.0583569650217126e+00 2.3720167743052940e+00 7.0352825166845601e-01 + -3.4043220730832671e+00 2.3137814385672208e+00 8.4118956488792085e-01 + -3.7031258211650595e+00 2.1868625427252422e+00 9.6143977475959719e-01 + -3.9418086090023738e+00 2.0278140028745546e+00 1.0453797104700207e+00 + -4.1134208894246109e+00 1.8729493322711381e+00 1.0840929059758111e+00 + -4.1914618506920904e+00 1.7493932035282751e+00 1.0694882564373134e+00 + -4.1208420805565522e+00 1.6646141905432472e+00 1.0155597961744516e+00 + -3.8156238065348655e+00 1.5851936317479078e+00 1.0041180479189760e+00 + -3.4154235186517736e+00 1.4176938926677323e+00 1.1605033584695477e+00 + -3.5665086340979313e+00 1.4236570970827171e+00 1.1253597595703295e+00 + id 13417 + loc 2.3260957002639771e-01 9.4606930017471313e-01 395 + blend 0.0000000000000000e+00 + interp 4.4399334262279577e-01:3.6623697065915117e-01:3.9939046993942995e-01:3.8910286878005362e-01:1.4682850751212098e+00:2.7039559542302977e-01:2.2778583455966768e+00:3.2907879728166456e-01:3.0065367338442606e+00:4.4398890268936958e-01:3.9067188170124263e+00 + CVs 20 + 5.0124389676209324e-01 2.2180485291478846e-01 -2.2319410722315319e-01 + 8.9780717858830628e-01 3.5275077776548436e-01 -4.0907045621652038e-01 + 1.2777289504761797e+00 4.5058004677777908e-01 -5.8581457003602777e-01 + 1.6814500368508634e+00 5.3954855064347129e-01 -7.6593499374620522e-01 + 2.1129008732981585e+00 6.1559110053730948e-01 -9.5304200168630948e-01 + 2.5737041718127558e+00 6.7457167419434916e-01 -1.1544019506012728e+00 + 3.0621960663548657e+00 7.1162559188749674e-01 -1.3799715210389962e+00 + 3.5755784951208929e+00 7.1508464034503816e-01 -1.6367540977651847e+00 + 4.1055830072400816e+00 6.6040751720944368e-01 -1.9327838369931736e+00 + 4.6267464042640052e+00 5.1684538989339912e-01 -2.2792549618596425e+00 + 5.0958418902053833e+00 2.6292199254106530e-01 -2.6788703157774423e+00 + 5.4767879842132272e+00 -1.0224531681850646e-01 -3.1131132584230032e+00 + 5.7535556018354050e+00 -5.6290896259515133e-01 -3.5529673317967605e+00 + 5.9137377680364613e+00 -1.0916735405085496e+00 -3.9752965708123100e+00 + 5.9462773465164194e+00 -1.6555555001171971e+00 -4.3613767518905417e+00 + 5.8526530582415921e+00 -2.2301423597615297e+00 -4.6864394611185993e+00 + 5.6499604914862926e+00 -2.7918151600714074e+00 -4.9270485450877493e+00 + 5.3794063251251245e+00 -3.3020983219914726e+00 -5.0886141338970363e+00 + 5.1826828102322011e+00 -3.7184259020399741e+00 -5.2584537090642884e+00 + id 13418 + loc 4.6900436282157898e-01 8.2733944058418274e-02 382 + blend 0.0000000000000000e+00 + interp 4.0857827559730092e-01:3.1502542626375796e-01:6.6517676114868929e-01:2.9916952788970080e-01:1.3859311538620589e+00:3.4719168483482743e-01:1.9672347482746022e+00:4.0857418981454496e-01:2.3989502099269040e+00:3.7593188691739376e-01:3.0290761857871100e+00:3.7662890100358759e-01:3.9128427286651766e+00 + CVs 20 + -4.4975065852311574e-01 1.9012335817046894e-01 -7.9098043775458016e-01 + -7.9137698680327773e-01 2.6376464991770865e-01 -1.3377274484322790e+00 + -1.0890919990020307e+00 3.0532511747862928e-01 -1.8224443494610003e+00 + -1.3659848731355224e+00 3.5474244489521456e-01 -2.3104751969915895e+00 + -1.6217595871233050e+00 4.2010939396055902e-01 -2.7938902893944886e+00 + -1.8628624190485898e+00 5.0449999512147514e-01 -3.2701256281028623e+00 + -2.1022818415463034e+00 6.0208275451906923e-01 -3.7440044159789405e+00 + -2.3505687770346095e+00 6.9528665891771968e-01 -4.2277724283698257e+00 + -2.6041454013560208e+00 7.5609745558405272e-01 -4.7377830736024018e+00 + -2.8466687500862076e+00 7.5609927526885889e-01 -5.2846623154676422e+00 + -3.0750922348180723e+00 6.7068694486601244e-01 -5.8592774167385979e+00 + -3.2963777085094730e+00 4.8295795325895030e-01 -6.4386171286253440e+00 + -3.5003539738364955e+00 1.8304735234948044e-01 -6.9781976593993260e+00 + -3.6480244667069170e+00 -2.1014661457680406e-01 -7.3875322915279096e+00 + -3.7050555942587513e+00 -6.3644330917002501e-01 -7.5968940208799216e+00 + -3.6622507562356197e+00 -1.0676775960811780e+00 -7.6484075701017060e+00 + -3.5165775535351234e+00 -1.5244093657138547e+00 -7.6534945716347771e+00 + -3.3476043451028192e+00 -2.0155816351137532e+00 -7.6995714944470404e+00 + -3.4706102971209289e+00 -2.4031990557737628e+00 -7.7306994227081329e+00 + id 13419 + loc 4.2059969902038574e-01 5.3668153285980225e-01 412 + blend 0.0000000000000000e+00 + interp 3.9827524683959836e-01:3.2543021560782509e-01:1.2468926192514052e-02:3.9827126408712998e-01:7.8649515588217644e-01:3.6545475513663944e-01:1.5793876902598902e+00:3.4053969121166261e-01:2.0343972087729698e+00:3.5300512553091101e-01:3.0001371329892543e+00:3.4207000633286866e-01:3.4687549074256232e+00 + CVs 20 + 6.7381406154413837e-01 1.2672480665013849e-01 -1.8856522600033518e-01 + 1.1575287265189529e+00 1.4206295425433513e-01 -3.6827271802548356e-01 + 1.6063919223534762e+00 1.2208949011534520e-01 -5.3372068162004449e-01 + 2.0866602943096733e+00 9.5128993130255357e-02 -6.8371804065295638e-01 + 2.5868942382091138e+00 5.7766233801569422e-02 -8.1176805051409140e-01 + 3.0953893050693941e+00 9.1559003665804273e-03 -9.1101217466772022e-01 + 3.6005562667654667e+00 -5.0107838557283291e-02 -9.7759370935984813e-01 + 4.0922884083732090e+00 -1.1961838536294800e-01 -1.0136253531062900e+00 + 4.5641068864824899e+00 -1.9847487619019755e-01 -1.0238705401247423e+00 + 5.0126435851116868e+00 -2.8562743005751656e-01 -1.0130696570724349e+00 + 5.4336311071760806e+00 -3.8779753700200104e-01 -9.9561675729531207e-01 + 5.8190980898008027e+00 -5.2619217528861517e-01 -1.0090952511784754e+00 + 6.1600030199034839e+00 -7.1462182218690007e-01 -1.0923320084902102e+00 + 6.4610199764880480e+00 -9.3948593490210630e-01 -1.2419641083290320e+00 + 6.7367425004429151e+00 -1.1894393093640756e+00 -1.4361313918488625e+00 + 6.9810569924867352e+00 -1.4584973494629110e+00 -1.6709432738357428e+00 + 7.1755567822813617e+00 -1.7295746541695149e+00 -1.9478428463376538e+00 + 7.3156826799577477e+00 -1.9846092909376782e+00 -2.2559812073375003e+00 + 7.5244825005375127e+00 -2.2468448397323448e+00 -2.5079938046908374e+00 + id 13420 + loc 3.8034591078758240e-01 3.4320205450057983e-02 400 + blend 0.0000000000000000e+00 + interp 4.6271735071619996e-01:2.7755521875014355e-01:2.0246246741829121e-01:4.2480858851753844e-01:9.2597827957353673e-01:3.7021275942325232e-01:1.2552624744408019e+00:2.7190997127462113e-01:1.8755125401679491e+00:2.7889230593869757e-01:2.9691482584000575e+00:4.6271272354269283e-01:3.5076848062459125e+00 + CVs 20 + -1.7210946003248700e-01 1.9020331315326616e-01 2.2399229609870744e-01 + -3.2283787716047835e-01 3.8031400378321140e-01 4.2890230807882590e-01 + -4.6232445561604474e-01 5.7766199309937849e-01 6.1226196375883168e-01 + -6.0084234038177875e-01 7.8668916089158536e-01 7.7312274074908349e-01 + -7.4712703726446650e-01 1.0095649577052508e+00 9.1639304709313563e-01 + -9.0805777076755878e-01 1.2487064789797020e+00 1.0508211905967269e+00 + -1.0928002719161154e+00 1.5034097657865133e+00 1.1900855879950745e+00 + -1.3150402682072442e+00 1.7634919498992665e+00 1.3498309725268882e+00 + -1.5887062367987745e+00 2.0046775272508990e+00 1.5393452689891649e+00 + -1.9161750572784984e+00 2.1950836859757881e+00 1.7585428475027332e+00 + -2.2733975045024986e+00 2.3130236689087842e+00 2.0013804021256782e+00 + -2.6213924176249179e+00 2.3582518088342437e+00 2.2600882948384231e+00 + -2.9489052069793091e+00 2.3441927399991158e+00 2.5320500356632678e+00 + -3.2829182842943161e+00 2.2744197905351791e+00 2.8183426702257264e+00 + -3.5979099057941202e+00 2.1435679235983196e+00 3.0897115137089788e+00 + -3.7232858160523250e+00 1.9877072043748996e+00 3.2684060573491847e+00 + -3.4377772685384995e+00 1.8003681512017131e+00 3.2935680044262727e+00 + -3.0362437073721824e+00 1.4722512095403295e+00 3.3034128201139183e+00 + -3.4218246095093754e+00 1.6136399118232010e+00 3.4969346123680767e+00 + id 13421 + loc 4.1751015186309814e-01 8.3064597845077515e-01 403 + blend 0.0000000000000000e+00 + interp 5.1700038393198178e-01:3.1729556559402683e-01:2.6293860459792984e-02:3.5657102116934719e-01:9.4325357537964605e-01:3.0853452354537164e-01:1.9767071023649172e+00:3.1254876746975258e-01:2.9882471059916771e+00:5.1699521392814252e-01:3.6662677204080909e+00 + CVs 20 + -5.4758878642776149e-02 1.0597883263061748e-01 -9.3743923092168016e-02 + -9.0396952969168443e-02 2.1507782019013677e-01 -1.9151046191880028e-01 + -1.3329763896132876e-01 3.2736078469216123e-01 -2.8921951439800003e-01 + -1.8199909418985524e-01 4.3908701913842108e-01 -3.8553088082034004e-01 + -2.3740353394616082e-01 5.5118402990349491e-01 -4.8063554743883963e-01 + -3.0173460419699222e-01 6.6599712302833780e-01 -5.7335359779175255e-01 + -3.7885281581995017e-01 7.8589239520003606e-01 -6.6166606890066004e-01 + -4.7360014676905199e-01 9.1199722853349385e-01 -7.4299301953381114e-01 + -5.9070770229136715e-01 1.0442586359281949e+00 -8.1340904425019489e-01 + -7.3399242807120435e-01 1.1818476486874530e+00 -8.6678255880285460e-01 + -9.0512526262685977e-01 1.3230907157017966e+00 -8.9462440391059417e-01 + -1.1007309613262501e+00 1.4651334590837155e+00 -8.8739527938966867e-01 + -1.3112776034534885e+00 1.6041275941170730e+00 -8.3734745262305954e-01 + -1.5222064767072652e+00 1.7356634486606202e+00 -7.4219830466392911e-01 + -1.7171382343346708e+00 1.8549335962979980e+00 -6.0875007533081038e-01 + -1.8872592849391729e+00 1.9583525449309584e+00 -4.4521809753346459e-01 + -2.0301696189394542e+00 2.0437187014357900e+00 -2.5560205622882137e-01 + -2.1420377343823418e+00 2.1095844754327024e+00 -4.6034955810355722e-02 + -2.1693838186980963e+00 2.1409378933087115e+00 5.9474750294848527e-03 + id 13422 + loc 3.4856483340263367e-01 6.5825110673904419e-01 376 + blend 0.0000000000000000e+00 + interp 4.5995195480562262e-01:3.9027273635111209e-01:2.8830877812976008e-01:4.2068438565783928e-01:1.0354111585529344e+00:3.5019366528282614e-01:2.0001089979027347e+00:4.3936937231834222e-01:2.9131467798821422e+00:3.7978885205572560e-01:3.3575247868696017e+00:4.5994735528607461e-01:3.9443914221919876e+00 + CVs 20 + -1.2718230632973865e-01 4.3242057432946368e-01 6.2509582437446609e-01 + -1.2084257538011015e-01 6.9870654510368702e-01 1.1724330975301935e+00 + 2.4688717948320726e-03 8.0455059462920153e-01 1.7149407141455646e+00 + 2.0208955380770999e-01 8.3344007427662836e-01 2.2802766123548883e+00 + 4.1330011798332522e-01 8.7740925177627738e-01 2.8720814440265880e+00 + 5.5650544616331188e-01 9.7875618770019202e-01 3.4986363683230897e+00 + 5.6061451401257478e-01 1.1369172653231945e+00 4.1449213588490847e+00 + 3.9017399067559899e-01 1.3391141442720835e+00 4.7625404549509076e+00 + 4.9913703366971651e-02 1.5646573372012993e+00 5.2987527065787763e+00 + -4.3478728037557091e-01 1.7835982941715023e+00 5.7312478685082313e+00 + -1.0416722900370734e+00 1.9613013482278461e+00 6.0665942041444190e+00 + -1.7499451154455388e+00 2.0449910852557407e+00 6.3109360223093862e+00 + -2.5160327157988767e+00 1.9753352198011134e+00 6.4457857363473403e+00 + -3.2603725108937880e+00 1.7294894484022101e+00 6.4352291642731991e+00 + -3.9065515689023922e+00 1.3095960996071487e+00 6.2779290970595767e+00 + -4.4274405878611631e+00 6.1826664825379574e-01 6.0728928564258773e+00 + -4.6668258271730894e+00 -4.5748404193763426e-01 6.0231450988993664e+00 + -4.5163607605997127e+00 -1.5184519916866619e+00 6.2215773229430935e+00 + -4.4724970659649479e+00 -2.1062905088476080e+00 6.3289684107445847e+00 + id 13423 + loc 2.1013090736232698e-04 6.6141468286514282e-01 375 + blend 0.0000000000000000e+00 + interp 5.3903161601499472e-01:2.9645820516197374e-01:2.2039586390382548e-01:4.0437355785500850e-01:9.0532238485719663e-01:2.8194567473218268e-01:1.4059277139832456e+00:4.4589973557968710e-01:2.1996775556860633e+00:5.3902622569883463e-01:2.7157563976855990e+00:2.9124983598805276e-01:3.2782429595110583e+00 + CVs 20 + -4.5919351679309728e-01 5.2628154312235864e-01 -1.0298835915163315e-01 + -9.7946723789502566e-01 8.9172514759276533e-01 -1.4295751907829118e-01 + -1.5523088436741717e+00 1.0566991662298586e+00 -1.0589107739217590e-01 + -2.1182783153351443e+00 1.1131440252768343e+00 -4.9425069521990550e-03 + -2.6440509802739860e+00 1.1620512972392203e+00 1.2401495407545465e-01 + -3.1314633010277255e+00 1.2467109602279260e+00 2.3219325414944370e-01 + -3.5961645383777174e+00 1.3778208270229770e+00 2.8784659874128760e-01 + -4.0421074221695763e+00 1.5631789760715311e+00 2.7887945872494035e-01 + -4.4583464365602232e+00 1.8019268552966534e+00 2.0114361496456457e-01 + -4.8322830894131199e+00 2.0742801502844346e+00 6.1620201414883446e-02 + -5.1624477835449989e+00 2.3558649324160585e+00 -1.2905816892827504e-01 + -5.4462513999315316e+00 2.6229715511148424e+00 -3.8350631935198509e-01 + -5.6767163499040105e+00 2.8498091451732090e+00 -7.2399182558967101e-01 + -5.8375845241445345e+00 3.0037231998783342e+00 -1.1557273670148418e+00 + -5.9006787402382805e+00 3.0567924512371021e+00 -1.6496148673508979e+00 + -5.8223217190134449e+00 3.0090208840816266e+00 -2.1527317680971043e+00 + -5.5646571881361160e+00 2.8330854296170109e+00 -2.6566694613633279e+00 + -5.2374654437237025e+00 2.4201007873162612e+00 -3.1073489439734949e+00 + -5.0373419889405850e+00 2.0475454421447212e+00 -3.2268214591961839e+00 + id 13424 + loc 8.4233438968658447e-01 7.4665650725364685e-02 1080 + blend 0.0000000000000000e+00 + interp 2.7306462010536359e-01:2.7306188945916254e-01:1.3609789603719724e-02:2.6855231952239872e-01:1.0015505994874381e+00:2.5265833916763292e-01:2.0288642643246924e+00:2.7182239849270107e-01:2.9808524553213380e+00 + CVs 20 + -8.7762232458391182e-02 4.3760024898392402e-01 -3.7386460640305724e-01 + -1.9719484370694207e-01 7.7804350231652664e-01 -5.9474373234880473e-01 + -3.2378302650014856e-01 1.0742177556426351e+00 -7.5942385074634777e-01 + -4.6965007212493437e-01 1.3487400932537121e+00 -9.0138420579889544e-01 + -6.3107452861102464e-01 1.5933729761409663e+00 -1.0152958739880797e+00 + -7.9782036917620702e-01 1.7986630391272063e+00 -1.0984448782542136e+00 + -9.5417266172797355e-01 1.9582240285588886e+00 -1.1529643366684494e+00 + -1.0846983463086597e+00 2.0764724016208360e+00 -1.1896487263668698e+00 + -1.1840278088154723e+00 2.1729257149747294e+00 -1.2246598901988786e+00 + -1.2656480644857648e+00 2.2700260343182386e+00 -1.2614357489272197e+00 + -1.3482607572535219e+00 2.3671132120164828e+00 -1.2831660606179978e+00 + -1.4324805468304262e+00 2.4454690424883783e+00 -1.2760418351915548e+00 + -1.5064434887858469e+00 2.4956928682714663e+00 -1.2395964039710792e+00 + -1.5591116139608223e+00 2.5243861228842546e+00 -1.1738151557363885e+00 + -1.5850028810930241e+00 2.5622079928073571e+00 -1.0571578943040607e+00 + -1.5948109341891219e+00 2.6631282641636069e+00 -8.0606477103476315e-01 + -1.6292881016976191e+00 2.7643096325172745e+00 -3.3318061468222604e-01 + -1.6968735563250357e+00 2.6810871331343700e+00 1.2464914892246437e-01 + -1.6846019193827921e+00 2.4969047780399292e+00 7.4549068143416330e-02 + id 13425 + loc 1.0156074911355972e-01 4.6593025326728821e-01 396 + blend 0.0000000000000000e+00 + interp 4.1100392686318116e-01:2.8559880991669595e-01:1.7565030909950319e-02:4.0396584999382473e-01:6.0494898088828242e-01:3.3859266476314287e-01:1.0248171404063240e+00:4.1099981682391257e-01:1.9319029664595089e+00:3.0083501477038649e-01:2.1998349993047106e+00:3.3230806510901889e-01:3.0018468938223988e+00:3.7499789866769806e-01:3.6758750595419847e+00 + CVs 20 + -2.4601832799362322e-01 2.3629193840609528e-01 -7.3549478508611266e-01 + -4.5095206542506894e-01 3.3655950793991712e-01 -1.2638015610739133e+00 + -6.3711419371131450e-01 3.9364564989691514e-01 -1.7472999029101213e+00 + -8.0784815584241043e-01 4.4468407453674552e-01 -2.2492907104708948e+00 + -9.5520067625884031e-01 4.8544940241029261e-01 -2.7674928713068199e+00 + -1.0774444642624430e+00 5.1171016591791729e-01 -3.2988417036414033e+00 + -1.1805708302802032e+00 5.1825098683497339e-01 -3.8404481964890698e+00 + -1.2748677620805191e+00 5.0131937847944319e-01 -4.3917443240339562e+00 + -1.3674589583278771e+00 4.5512230963612677e-01 -4.9569045770804721e+00 + -1.4681715010823708e+00 3.6602458357068546e-01 -5.5396109186262690e+00 + -1.5913779083815927e+00 2.1673654529251896e-01 -6.1332066687418667e+00 + -1.7469605866491975e+00 -1.6950263740258542e-03 -6.7178321050906789e+00 + -1.9331705119991884e+00 -2.8562444757527494e-01 -7.2740923965838133e+00 + -2.1422866483189535e+00 -6.2853547573632218e-01 -7.7908082419018543e+00 + -2.3688677242101406e+00 -1.0257864906493701e+00 -8.2588125159541139e+00 + -2.6111485210850072e+00 -1.4740511416274442e+00 -8.6674427871502004e+00 + -2.8628631917172886e+00 -1.9641014644725465e+00 -9.0041582449683268e+00 + -3.1042023972851576e+00 -2.4554831053713677e+00 -9.2567710184792489e+00 + -3.2767491894490020e+00 -2.7165322010779849e+00 -9.3927942166529022e+00 + id 13426 + loc 3.3707922697067261e-01 4.3628481030464172e-01 1068 + blend 0.0000000000000000e+00 + interp 3.9664365429401333e-01:3.9663968785747039e-01:4.3710814397250608e-01:3.0672743824216725e-01:1.1470706894746345e+00:2.7653983198193927e-01:2.0006745978998128e+00:2.8207258722070033e-01:2.9490317122209486e+00:3.2508899295947136e-01:3.9419820451923133e+00 + CVs 20 + -1.5547320481738869e-01 2.5785702293302676e-01 -1.2400187999309177e-02 + -3.4847151109780872e-01 5.2506161958655251e-01 -4.7272323127818233e-02 + -5.5366307152961403e-01 7.9237980264284580e-01 -8.7054608443971504e-02 + -7.5799888818816186e-01 1.0526046571175935e+00 -1.2400082263354059e-01 + -9.5849830590553653e-01 1.3001495368043776e+00 -1.5737650104933845e-01 + -1.1502367505135398e+00 1.5272699346656373e+00 -1.8570093756083589e-01 + -1.3335061227053622e+00 1.7271432071889026e+00 -2.0866411827842457e-01 + -1.5144160126746984e+00 1.8973265402123063e+00 -2.2781046832756774e-01 + -1.7026272079704960e+00 2.0342125982205888e+00 -2.5245907485483937e-01 + -1.9082100791835082e+00 2.1194798119001947e+00 -3.0473690606968146e-01 + -2.1286380615530831e+00 2.1215099809535567e+00 -4.0773600078486300e-01 + -2.3479645068196811e+00 2.0272671216786300e+00 -5.7139524270098119e-01 + -2.5497226171290710e+00 1.8697180039876633e+00 -7.9068334608088819e-01 + -2.7291203960325672e+00 1.6957216106435162e+00 -1.0477477998342173e+00 + -2.9079387542846455e+00 1.5073781221869700e+00 -1.3187746570737175e+00 + -3.1339866516643475e+00 1.2728227148162699e+00 -1.5674653676572290e+00 + -3.4533405608343410e+00 1.0021988377325857e+00 -1.7271066045598586e+00 + -3.8603823079773760e+00 7.6306005883421457e-01 -1.7378770682816955e+00 + -4.2941957933938317e+00 5.8086406210367580e-01 -1.6310419452867209e+00 + id 13427 + loc 9.9491745233535767e-01 9.9158346652984619e-01 374 + blend 0.0000000000000000e+00 + interp 3.6455793069089654e-01:3.6455428511158966e-01:7.1425297188992620e-01:2.2748810858239712e-01:1.3207950055566018e+00:2.6332574548320237e-01:2.3675886293890267e+00:3.5541734955062682e-01:3.5756052952375041e+00 + CVs 20 + -6.3391018888794981e-01 3.9713248286981412e-01 -4.5299891717869906e-01 + -1.1767740739009935e+00 6.9020635261239516e-01 -7.8309398579325684e-01 + -1.7131468435049229e+00 9.2862442713349469e-01 -1.0663017569638917e+00 + -2.2731521820369585e+00 1.1364824114930236e+00 -1.3406398399062185e+00 + -2.8526253951197758e+00 1.3030077150329813e+00 -1.6204827770934682e+00 + -3.4567993556412429e+00 1.4004553579202039e+00 -1.9193277406458731e+00 + -4.0816908701914301e+00 1.3934771819363796e+00 -2.2442090453743666e+00 + -4.7034406556890644e+00 1.2550608147415840e+00 -2.5930837261997173e+00 + -5.2861067913951514e+00 9.7541599644122634e-01 -2.9499165436113413e+00 + -5.7922446915727548e+00 5.6525319845267985e-01 -3.2795214946960627e+00 + -6.1858182194657072e+00 5.5221215620968600e-02 -3.5394115279281433e+00 + -6.4371749717745264e+00 -5.0787777647795895e-01 -3.7008832088419874e+00 + -6.5480626920875622e+00 -1.0681087311219768e+00 -3.7680410294998139e+00 + -6.5719132099840820e+00 -1.5990497004243704e+00 -3.7912342786898412e+00 + -6.5720449891244010e+00 -2.1248227201599832e+00 -3.8209891988279532e+00 + -6.5960353183039402e+00 -2.6557068080241222e+00 -3.8670072487564964e+00 + -6.6762293243004995e+00 -3.1681034955284075e+00 -3.9016356052848189e+00 + -6.7941960504789822e+00 -3.6395669628081326e+00 -3.9076630832231314e+00 + -6.8356169103131288e+00 -4.0705276550404594e+00 -3.9188624675662376e+00 + id 13428 + loc 5.4828578233718872e-01 5.6278777122497559e-01 380 + blend 0.0000000000000000e+00 + interp 4.5751294740231147e-01:4.2006316646330494e-01:8.6227857528788920e-02:2.6492285101747393e-01:7.0323107022348497e-01:3.0959301851093179e-01:1.3496524108183305e+00:4.2157623177522868e-01:2.0009947942836712e+00:4.2436398986476387e-01:2.6994567456163168e+00:4.0226033948022061e-01:3.0934306620418219e+00:4.5750837227283747e-01:3.7978514865075885e+00 + CVs 20 + -4.8649699685006831e-01 2.5150628647086498e-01 -5.0689572959177587e-01 + -9.0995343633989489e-01 4.1799012956598841e-01 -8.9253963835142125e-01 + -1.3175851780002141e+00 5.6051081349204168e-01 -1.2829190128280137e+00 + -1.7205405497631472e+00 7.0667067177091103e-01 -1.7296051903280030e+00 + -2.1045499801616412e+00 8.5134452660040871e-01 -2.2302507909627192e+00 + -2.4588225760306712e+00 9.7674751577360364e-01 -2.7794060661574309e+00 + -2.7740453897798241e+00 1.0530886790553633e+00 -3.3703434840098447e+00 + -3.0376277917899075e+00 1.0510077348219018e+00 -3.9869150927038643e+00 + -3.2413363795630805e+00 9.5336766368837056e-01 -4.6014487536751734e+00 + -3.3893089203898752e+00 7.5727077945120680e-01 -5.1823018757064414e+00 + -3.4904551047180865e+00 4.7073668187015416e-01 -5.6990511410863558e+00 + -3.5499183576788447e+00 1.1290954346111048e-01 -6.1260049897923423e+00 + -3.5742061483805339e+00 -2.8926789194278957e-01 -6.4521659201315025e+00 + -3.5768810535987718e+00 -7.1205230873918079e-01 -6.6853993799176425e+00 + -3.5797228832481043e+00 -1.1492067618349466e+00 -6.8502179268803980e+00 + -3.6116016509780406e+00 -1.6188426456121641e+00 -6.9901992506817399e+00 + -3.7084868852478126e+00 -2.1346878902323390e+00 -7.1510149146663400e+00 + -3.9046076284321707e+00 -2.6502718448685996e+00 -7.3317391283424795e+00 + -4.1407542800298298e+00 -3.0136557325283646e+00 -7.4527015164624730e+00 + id 13429 + loc 1.7734862864017487e-01 1.2690742313861847e-01 378 + blend 0.0000000000000000e+00 + interp 4.5950356262287900e-01:3.9989027465140825e-01:8.1318652508097777e-01:3.1835618001408889e-01:1.1251292144234837e+00:3.2521817571545081e-01:2.1505106093716875e+00:4.5949896758725278e-01:2.8898800554684119e+00:3.7411075790502357e-01:3.1795936229821944e+00:3.3792277028568474e-01:3.9548517582376039e+00 + CVs 20 + 2.6994416092215795e-01 2.9223287112946777e-01 -3.1039695031707498e-01 + 4.7989675678163352e-01 5.4700506712555386e-01 -6.0667798104799009e-01 + 6.6877007976559877e-01 7.8605962750695801e-01 -9.0338674847558864e-01 + 8.6024435738009730e-01 1.0280339597932637e+00 -1.2063804414036923e+00 + 1.0641026931966229e+00 1.2789082317131062e+00 -1.5107652636791575e+00 + 1.2935075651679684e+00 1.5364547309856373e+00 -1.8158612623045662e+00 + 1.5614203865661378e+00 1.7890103192368128e+00 -2.1264043587160093e+00 + 1.8766611907937436e+00 2.0199137543518346e+00 -2.4434508527924730e+00 + 2.2434960808919251e+00 2.2090891201453990e+00 -2.7582604241019562e+00 + 2.6572381716807580e+00 2.3354876529123487e+00 -3.0560481749492650e+00 + 3.1038633346114288e+00 2.3828446422098715e+00 -3.3261611583068955e+00 + 3.5667575586239226e+00 2.3391812334170821e+00 -3.5635883898473226e+00 + 4.0213894429469725e+00 2.1985188538682578e+00 -3.7581015482904960e+00 + 4.4224104404989486e+00 1.9795241925133773e+00 -3.8833130210234215e+00 + 4.7259295885937807e+00 1.7323353627032283e+00 -3.9120540437365148e+00 + 4.9374705545902993e+00 1.4888657170483750e+00 -3.8418372456514249e+00 + 5.1157942931104294e+00 1.2320281854883341e+00 -3.6865569631557729e+00 + 5.3333389057403355e+00 9.3194398603913342e-01 -3.4868782649281451e+00 + 5.5060247322909301e+00 7.4885427780649971e-01 -3.4171837738037669e+00 + id 13430 + loc 7.2958147525787354e-01 2.9561021924018860e-01 401 + blend 0.0000000000000000e+00 + interp 4.3471119787193374e-01:3.5111284331529502e-01:2.0000603110281223e-01:4.1994835233161182e-01:1.0110114440680555e+00:4.2472452739903188e-01:1.9257878424569466e+00:3.4791417692139476e-01:2.3370527494812898e+00:3.7742708515482326e-01:3.1580115074080215e+00:4.3470685075995502e-01:3.8463398261174033e+00 + CVs 20 + 2.0222976032446441e-01 3.4301309503707034e-01 6.8920371982075845e-02 + 3.9631619274906732e-01 6.9127657120034147e-01 1.5595224751897710e-01 + 5.7919958813601058e-01 1.0328246298855293e+00 2.4147257676053849e-01 + 7.4995802858832483e-01 1.3603927320626061e+00 3.2157108864896861e-01 + 9.0829565481122632e-01 1.6683703154667846e+00 3.9768931336448254e-01 + 1.0542682614316812e+00 1.9540371744208009e+00 4.6762173074934432e-01 + 1.1863454227071697e+00 2.2188311209693894e+00 5.2789465151114789e-01 + 1.3013142208596127e+00 2.4682003855025298e+00 5.7609334193281869e-01 + 1.4066092995175630e+00 2.7204556524151218e+00 6.1744414586437757e-01 + 1.5338472100759757e+00 3.0081195227939541e+00 6.7247932037767288e-01 + 1.7134702782583437e+00 3.3560275889976192e+00 7.7660298853917387e-01 + 1.9375303934532728e+00 3.7651137549101548e+00 9.7557953833005251e-01 + 2.1714927957511740e+00 4.1926518878680268e+00 1.3065769518402210e+00 + 2.3510077231136588e+00 4.5408259045790782e+00 1.7147865928804582e+00 + 2.3672464461803511e+00 4.7796083644021321e+00 2.0576015617600723e+00 + 2.1146642030969107e+00 4.9401371135426322e+00 2.2683997090736696e+00 + 1.4968562752909280e+00 4.9475330919751386e+00 2.3614288903041638e+00 + 7.0169120296171628e-01 4.6484158085653871e+00 2.4203583835513571e+00 + 8.9518557021869360e-01 4.7492872864074522e+00 2.3509356625508384e+00 + id 13431 + loc 5.5840700864791870e-01 6.2697403132915497e-02 1078 + blend 0.0000000000000000e+00 + interp 4.4339107781473813e-01:3.0446463838264071e-01:5.9967604540997543e-01:3.0272362323509183e-01:1.1218494438049713e+00:2.0255043837271614e-01:1.9999598566805323e+00:3.0569744428576034e-01:2.9996798845856349e+00:4.4338664390395999e-01:3.8625744312927810e+00 + CVs 20 + -1.6870899640788703e-01 2.5757980165683431e-01 3.3132287392987542e-02 + -3.3561352078064188e-01 5.0235105921236356e-01 9.8511891408926217e-02 + -5.0656872091425487e-01 7.3857063899182829e-01 1.8809105875394561e-01 + -6.8262557398154755e-01 9.6282805065992183e-01 2.9524567987940048e-01 + -8.6096899266740468e-01 1.1666242417881578e+00 4.1828990885506767e-01 + -1.0345436191675625e+00 1.3380496356104008e+00 5.5460985620016556e-01 + -1.1973799660038746e+00 1.4681169958591087e+00 7.0503793600613407e-01 + -1.3474643978225571e+00 1.5541344203431338e+00 8.7278817843712486e-01 + -1.4825761492751603e+00 1.5952217837369886e+00 1.0579488129460393e+00 + -1.6005206380883306e+00 1.5900548441950140e+00 1.2570823013338743e+00 + -1.7021176350473861e+00 1.5372592614765306e+00 1.4665952645113798e+00 + -1.7918146951604486e+00 1.4365337652294381e+00 1.6843870934632623e+00 + -1.8750648874304456e+00 1.2879348629009610e+00 1.9101305862521984e+00 + -1.9560114214119231e+00 1.0918637648630547e+00 2.1404833631664224e+00 + -2.0368443744151317e+00 8.4805665926946217e-01 2.3596979655457027e+00 + -2.1119177355500351e+00 5.5386229904222439e-01 2.5128493393275786e+00 + -2.1566640493910301e+00 2.2853827651191039e-01 2.4754240316074734e+00 + -2.1453177448659173e+00 -2.3900117715415670e-02 2.1985037460870132e+00 + -2.2106561707977144e+00 -3.8965065853378866e-01 2.1693718910454658e+00 + id 13432 + loc 5.5601352453231812e-01 2.5797605514526367e-01 409 + blend 0.0000000000000000e+00 + interp 4.8222051237863711e-01:2.9112666146459448e-01:2.7956412252968299e-02:4.8221569017351334e-01:9.6638396108239233e-01:3.2978345521661251e-01:1.3262966620276826e+00:2.9821622932453379e-01:2.0792898258914230e+00:3.0704184851787375e-01:3.0829076077203958e+00 + CVs 20 + -2.7874838162806653e-01 1.3975966425905753e-01 8.2995324826447087e-02 + -5.4073270543692109e-01 2.6810136697289444e-01 1.9070762768414101e-01 + -7.9338975012462565e-01 3.8550011300760645e-01 2.9351801403809596e-01 + -1.0381873346560062e+00 4.9171330630668275e-01 3.8292178925395171e-01 + -1.2725303432518564e+00 5.8619978249901661e-01 4.6294972380407218e-01 + -1.4954501738626405e+00 6.7046999700123666e-01 5.3685664468744831e-01 + -1.7078322254838865e+00 7.4971925446645149e-01 6.0667047429053234e-01 + -1.9127640060577580e+00 8.3027661209010717e-01 6.7280041040381666e-01 + -2.1159292325340751e+00 9.1479945249199279e-01 7.3166122560464197e-01 + -2.3216283585048325e+00 1.0037130859105856e+00 7.7667427072038464e-01 + -2.5326779453047328e+00 1.0960369010832949e+00 8.0431572746593694e-01 + -2.7534446116759335e+00 1.1810838708683207e+00 8.1829209511466217e-01 + -2.9851746580091829e+00 1.2412816711250145e+00 8.2739628367609952e-01 + -3.2239044681161109e+00 1.2674682078236581e+00 8.3908734402262097e-01 + -3.4651499208388703e+00 1.2613401536253561e+00 8.6055287832464411e-01 + -3.7065377658213294e+00 1.2252174671903742e+00 9.0624684808851208e-01 + -3.9394582223103578e+00 1.1550435082450123e+00 9.8414628435944407e-01 + -4.1399378209987452e+00 1.0409412541823566e+00 1.0690330223924445e+00 + -4.2011458514403293e+00 8.5293224862349049e-01 1.1246589460264511e+00 + id 13433 + loc 9.3754285573959351e-01 5.0217274576425552e-02 373 + blend 0.0000000000000000e+00 + interp 4.6504891871266069e-01:2.8448866723089922e-01:1.2271674580286329e-02:2.9159112520672531e-01:3.8552222759372790e-01:4.2528708763949757e-01:1.0086594544494856e+00:4.6504426822347356e-01:1.4427996439759116e+00:3.8239850451313462e-01:1.9992231279111388e+00:3.4672763100242948e-01:2.9998215204916345e+00:2.6534740205101204e-01:3.4989555830740295e+00 + CVs 20 + 3.0355241794853632e-01 3.8866971611372358e-01 1.0775043970138842e-02 + 6.3562943100209057e-01 6.8819541370414372e-01 4.2012217776142835e-03 + 1.0280396756197705e+00 8.7341263708237782e-01 -3.2728138898075188e-02 + 1.4679429402753121e+00 9.9065243317977836e-01 -1.0891215940824578e-01 + 1.9081561831557445e+00 1.1181881775493383e+00 -2.2110480973681906e-01 + 2.3211594550688526e+00 1.3059592455511067e+00 -3.4501330250582662e-01 + 2.7023605250818394e+00 1.5702243606539803e+00 -4.4243746649390836e-01 + 3.0429638793455096e+00 1.9108818316765319e+00 -4.8359481736333354e-01 + 3.3304333381339020e+00 2.3274462893761330e+00 -4.5437238663338797e-01 + 3.5631408927803676e+00 2.8254158638186539e+00 -3.3577032315588573e-01 + 3.7522425546292739e+00 3.3979526002943237e+00 -9.0716742528691441e-02 + 3.9084523229358417e+00 4.0083041680496905e+00 3.4445979006101146e-01 + 4.0108975124502155e+00 4.5583713355179301e+00 1.0384240378411844e+00 + 4.0011090650290724e+00 4.8959417615746181e+00 1.9733140931098938e+00 + 3.8248549030626591e+00 4.8962275738509602e+00 3.0426423399146323e+00 + 3.5226595845730735e+00 4.4610752545876045e+00 4.1258243975332700e+00 + 3.3651892611304324e+00 3.4755699817984342e+00 5.0937389588714055e+00 + 3.6760955023689008e+00 2.2670658664815422e+00 5.6655690889065937e+00 + 3.7941656246159896e+00 1.7700609314942302e+00 5.9711411417132307e+00 + id 13434 + loc 3.9470362663269043e-01 5.0438344478607178e-01 393 + blend 0.0000000000000000e+00 + interp 4.8646410273151014e-01:2.9962551653917863e-01:6.9605281536766483e-05:4.7718216175239814e-01:7.6358605256984347e-01:3.6536913042675884e-01:1.0479772414416675e+00:4.6853566803267910e-01:1.6575942662410457e+00:4.4373830479498233e-01:2.0109637548414421e+00:4.8645923809048286e-01:2.5258821745989972e+00:3.0752978792483904e-01:3.0284791965190339e+00 + CVs 20 + -3.9639478941685119e-01 3.4097966923575851e-01 -1.3009782623647215e-01 + -7.3972851544089513e-01 7.0677218057775770e-01 -2.7575516859681826e-01 + -1.0485909560678452e+00 1.1024778828867396e+00 -4.5402029574861402e-01 + -1.3438478689181355e+00 1.5111477208250432e+00 -6.8002951922306831e-01 + -1.6478285369740147e+00 1.9023310852316746e+00 -9.5731676266547827e-01 + -1.9802267195744920e+00 2.2505574956692489e+00 -1.2717228641941500e+00 + -2.3549763342925703e+00 2.5354006141153067e+00 -1.5981647726969881e+00 + -2.7766487987467476e+00 2.7332980807740963e+00 -1.9124326730790124e+00 + -3.2309105216534304e+00 2.8255921198713954e+00 -2.1996327065132522e+00 + -3.6968857549290632e+00 2.8163118717998543e+00 -2.4644818320680915e+00 + -4.1678786849673379e+00 2.7089471066529902e+00 -2.7243727581429966e+00 + -4.6408220175358608e+00 2.4998771835331590e+00 -2.9825209084846014e+00 + -5.1001607525705221e+00 2.1816880012887561e+00 -3.2140867092489636e+00 + -5.5171305831324027e+00 1.7578710078308317e+00 -3.3923272297154234e+00 + -5.8818669692135783e+00 1.2459892587150505e+00 -3.5138532831187042e+00 + -6.2337054720707448e+00 6.5635028609903068e-01 -3.5700854296808355e+00 + -6.6295377588951609e+00 1.9235720160910574e-02 -3.5045309087314127e+00 + -7.0659914154120695e+00 -5.8973603640957029e-01 -3.2951696769175869e+00 + -7.5320161298886932e+00 -1.1719118395071264e+00 -3.1256963746268953e+00 + id 13435 + loc 7.5799274444580078e-01 4.3347063660621643e-01 399 + blend 0.0000000000000000e+00 + interp 5.1588829545098158e-01:5.1588313656802709e-01:7.3522681373599963e-02:4.2165958796910319e-01:7.5335303136558074e-01:4.2583252547318112e-01:1.1199732789491972e+00:2.5692898849751300e-01:1.6562468839555364e+00:3.1877241860678346e-01:2.0919726681453117e+00:3.1199412326902404e-01:2.9318955485685576e+00:2.9116960514369178e-01:3.6045501971423541e+00 + CVs 20 + 3.9214375807453711e-02 2.2413093897270836e-01 2.4678477755120404e-01 + 7.5141695764086636e-02 4.2245481755722092e-01 4.5704451963912529e-01 + 9.3991973029833212e-02 5.9562153824336117e-01 6.5439555851345332e-01 + 9.3260256332217059e-02 7.5574150901307036e-01 8.6615011850833890e-01 + 8.0715353191285089e-02 9.1176363721998421e-01 1.0965296905235142e+00 + 6.5675984666478143e-02 1.0722024135832608e+00 1.3419634526404614e+00 + 5.5138862983080517e-02 1.2457665070058044e+00 1.6024024759741597e+00 + 5.4771977716405226e-02 1.4408053228689277e+00 1.8832280181013779e+00 + 7.4764380870422170e-02 1.6612912565600206e+00 2.1932447120772975e+00 + 1.3090689802671274e-01 1.8996519079479046e+00 2.5465414661715902e+00 + 2.3695640462599285e-01 2.1112350028341345e+00 2.9598477581417639e+00 + 3.9473008844851376e-01 2.2068867826089908e+00 3.4095143844376921e+00 + 5.8993428793353431e-01 2.1345479757341628e+00 3.8156789298377762e+00 + 8.0220213463286483e-01 1.9119223380549244e+00 4.0996149609424322e+00 + 1.0286634206809726e+00 1.5838690039396333e+00 4.2339307247082312e+00 + 1.3095144093299105e+00 1.1992803153998399e+00 4.2619938113956000e+00 + 1.6896039052772396e+00 7.8615101577059809e-01 4.2786950772522649e+00 + 2.0823465542855759e+00 4.0188339112468885e-01 4.4718926107744403e+00 + 2.1677110506353001e+00 2.5410156801648687e-01 4.9126884342819750e+00 + id 13436 + loc 8.2471996545791626e-01 6.7443853616714478e-01 402 + blend 0.0000000000000000e+00 + interp 3.6707817575446866e-01:3.3069689441549016e-01:3.2133825250172365e-01:3.5390758935647054e-01:9.3630449471628074e-01:2.6564346407134282e-01:1.4456321940542918e+00:2.9436867954044715e-01:2.3193204611110181e+00:3.6707450497271116e-01:3.0069876499356685e+00:3.5716636872337998e-01:3.9924405178763038e+00 + CVs 20 + -1.5391614743674867e-01 5.5129952593292404e-02 -1.5712485096452171e-02 + -2.7910916540827974e-01 1.3458066846419345e-01 -4.5560337487334415e-02 + -3.7350143600013896e-01 2.2183703888458603e-01 -7.4688222258155662e-02 + -4.5053508055493779e-01 3.0866148090406698e-01 -9.7357576711038479e-02 + -5.1075934620488550e-01 3.9598043509498471e-01 -1.1420077388318320e-01 + -5.6409996476516899e-01 4.8570166040433171e-01 -1.2482224149182021e-01 + -6.2578796294840844e-01 5.8102524659124977e-01 -1.2672647293806177e-01 + -7.0461330175881076e-01 6.8613133699125561e-01 -1.1891306983210635e-01 + -7.9191559142408441e-01 7.9456335017587876e-01 -1.0729709706626708e-01 + -8.8398400069912952e-01 8.5661193854637063e-01 -1.0007384687973039e-01 + -1.1072305238994906e+00 8.2374366141855515e-01 -1.1250342699219017e-01 + -1.4642918945917323e+00 9.6572974432066050e-01 -1.5734405419326555e-01 + -1.5219440061737879e+00 1.3188272147827109e+00 -1.3109925366535502e-01 + -1.2510493251531865e+00 1.7026978714570138e+00 -6.3084881874368337e-02 + -8.0593698484274512e-01 2.0626518533720088e+00 -9.2321266889369702e-02 + -2.9608498667398497e-01 2.3742002915547396e+00 -2.8666410325669933e-01 + 2.1981714935528252e-01 2.6148877309990541e+00 -6.6856913280191199e-01 + 6.6658069747801241e-01 2.7566505424242633e+00 -1.2265468952346890e+00 + 8.0176075880616160e-01 2.7805510820964532e+00 -1.4572176615066996e+00 + id 13437 + loc 3.9182651042938232e-01 8.3115410804748535e-01 395 + blend 0.0000000000000000e+00 + interp 4.3884758121208128e-01:4.2039793719470531e-01:8.7827747778364218e-02:4.1484001465390163e-01:9.5427286914910203e-01:3.6209461737103110e-01:1.6927315307829267e+00:3.9792860276642650e-01:2.3734394612049363e+00:3.6934233245283671e-01:3.0034906104527588e+00:4.3884319273626921e-01:3.6330220142158045e+00 + CVs 20 + 5.3907500246283357e-01 1.1326220389596980e-01 -3.5157055889006045e-01 + 9.6677146894963051e-01 1.3700034943342737e-01 -6.5847264890334722e-01 + 1.3675004190066868e+00 1.3155583160135265e-01 -9.4432647775286971e-01 + 1.7645668499804055e+00 1.1415015562270103e-01 -1.2075913985913909e+00 + 2.1498975703329357e+00 8.4050500882721257e-02 -1.4368061121214619e+00 + 2.5163640300051657e+00 4.4204238806635265e-02 -1.6265424927085332e+00 + 2.8586070802161352e+00 -7.8041320799471237e-05 -1.7747510233130535e+00 + 3.1737726850570636e+00 -4.2327024580194994e-02 -1.8810799935514171e+00 + 3.4662963151835866e+00 -7.5440353226499113e-02 -1.9493707023310505e+00 + 3.7524142167465793e+00 -9.5850202916383243e-02 -1.9909257447646209e+00 + 4.0528903470430677e+00 -1.1128356649677618e-01 -2.0271423762375744e+00 + 4.3750080782787917e+00 -1.4028439209363297e-01 -2.0837233780662912e+00 + 4.7117012768260995e+00 -2.0101888535890655e-01 -2.1772001160679944e+00 + 5.0554450631165331e+00 -3.0938201845559554e-01 -2.3125809802354089e+00 + 5.3962158938810170e+00 -4.7670789989341023e-01 -2.4900522569308636e+00 + 5.7167414987016389e+00 -7.0097673990215803e-01 -2.7082034774323116e+00 + 6.0000562188580222e+00 -9.7458065494673063e-01 -2.9576540488570444e+00 + 6.2344664577107975e+00 -1.2929097267339884e+00 -3.2127631723100949e+00 + 6.3849277536414037e+00 -1.6329107040368425e+00 -3.4096781506142539e+00 + id 13438 + loc 8.3548951148986816e-01 9.9566495418548584e-01 412 + blend 0.0000000000000000e+00 + interp 8.8632911135315207e-01:3.0214102034414231e-01:3.0564718712644279e-01:3.0689599390483113e-01:1.1243320229008151e+00:8.8632024806203857e-01:2.9446566005590014e+00:4.3073271510783256e-01:3.1657685200150398e+00:3.7618964790653969e-01:3.8385017478774204e+00 + CVs 20 + 9.4223407560352646e-01 1.0613174458820306e-01 -2.4946430107165907e-01 + 1.5480094051040043e+00 9.2498092388630132e-02 -4.6656795895907038e-01 + 2.0893884409634089e+00 5.3936298031149910e-02 -6.6808043063772882e-01 + 2.6644747081421869e+00 2.5678406301969325e-02 -8.6267102102775428e-01 + 3.2648185189452441e+00 5.6550628151958993e-03 -1.0459747915530715e+00 + 3.8803668413325920e+00 -8.7575862662737647e-03 -1.2053754692814258e+00 + 4.4979370732703634e+00 -2.3454934518397197e-02 -1.3288500266398424e+00 + 5.1018909492935833e+00 -4.7787543965534418e-02 -1.4113903858809707e+00 + 5.6761286831043805e+00 -9.0557154043706012e-02 -1.4537076750092941e+00 + 6.2068084265507473e+00 -1.5910834268993868e-01 -1.4617392887714822e+00 + 6.6921517627196527e+00 -2.7143121800399639e-01 -1.4536854863108148e+00 + 7.1424903567311144e+00 -4.5885496742331044e-01 -1.4590779443575574e+00 + 7.5488718725261883e+00 -7.2928847798020136e-01 -1.4961378462445434e+00 + 7.8837198941390740e+00 -1.0557957265702980e+00 -1.5602954278845824e+00 + 8.1303901892621102e+00 -1.4132077223098005e+00 -1.6437516780478694e+00 + 8.2850748932144107e+00 -1.7820947338465627e+00 -1.7438866471724239e+00 + 8.3527094000150548e+00 -2.1403264447603627e+00 -1.8564490903084951e+00 + 8.3438202890988418e+00 -2.4654864364931157e+00 -1.9751689533982473e+00 + 8.2497758751446035e+00 -2.7144768701414659e+00 -2.0902013830942296e+00 + id 13439 + loc 2.8008186817169189e-01 5.4632252454757690e-01 400 + blend 0.0000000000000000e+00 + interp 4.8461454417213634e-01:3.5517524527968986e-01:3.1445774615639133e-02:2.7024618713232818e-01:8.6271145180711839e-01:3.8487235722488783e-01:1.1140091722633982e+00:4.8460969802669462e-01:1.9524319185673422e+00:3.3331876288473755e-01:2.2772543866494330e+00:2.7558239949422897e-01:2.9956984271297493e+00 + CVs 20 + -2.6366570711401377e-01 3.5529308060688064e-01 -1.3808226412612515e-01 + -5.2434722236072184e-01 6.9974996742996531e-01 -3.1913326738654579e-01 + -7.8355995721777327e-01 1.0207886266559556e+00 -5.7001959910556188e-01 + -1.0365840502137453e+00 1.3050559246785631e+00 -8.9658102353384228e-01 + -1.2767780950355716e+00 1.5407490080964488e+00 -1.2889341522108946e+00 + -1.4998553749476007e+00 1.7209271671144504e+00 -1.7310416244911269e+00 + -1.7002829909057575e+00 1.8421808412554657e+00 -2.2065883666794863e+00 + -1.8688048187307880e+00 1.9034928356126120e+00 -2.7013892562942927e+00 + -1.9948162374955114e+00 1.9075574242048277e+00 -3.2038145429921321e+00 + -2.0719726201787854e+00 1.8599983220991763e+00 -3.7036043208707445e+00 + -2.1146456186585887e+00 1.7706044487671402e+00 -4.1919056250833622e+00 + -2.1637914254605746e+00 1.6513010009177282e+00 -4.6650704592511447e+00 + -2.2619126951657216e+00 1.4989863370578611e+00 -5.1152855257403491e+00 + -2.4381512114019235e+00 1.2931848448604337e+00 -5.5168576118161319e+00 + -2.7078840172906999e+00 1.0395441889863637e+00 -5.8431498488454885e+00 + -3.0677823364390089e+00 7.9552432378639848e-01 -6.1008501650913622e+00 + -3.4944623637869605e+00 6.1360425847954447e-01 -6.3208416359197130e+00 + -3.9388572486514488e+00 4.8831122324079645e-01 -6.5453113727271894e+00 + -4.3067667546308046e+00 3.6250447645808137e-01 -6.8919046847366925e+00 + id 13440 + loc 7.5013421475887299e-02 3.7967878580093384e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7756991946006822e-01:3.4047939391730397e-01:9.7553149371718695e-01:4.5156750711934240e-01:1.7851489171903410e+00:3.8284630435679423e-01:2.0552706310515831e+00:4.3242620799317594e-01:2.9911198861478745e+00:4.7756514376087361e-01:3.4497665812548806e+00:3.4113453201799743e-01:3.9969262383212669e+00 + CVs 20 + -2.2005239415900718e-01 3.3270121992799961e-01 -3.2955011599638606e-01 + -4.2497017026578776e-01 7.1395503511442049e-01 -6.0525980270141000e-01 + -6.1436896954670872e-01 1.0946856108970673e+00 -8.6667747270226592e-01 + -8.0616821634287372e-01 1.4255475775246778e+00 -1.1508934648822273e+00 + -1.0134888042465366e+00 1.6553329586693264e+00 -1.4798832465938743e+00 + -1.2169873881537809e+00 1.7336829834761045e+00 -1.8446587877455434e+00 + -1.3343721606243237e+00 1.6155809264892647e+00 -2.1967740353630978e+00 + -1.2634768606717701e+00 1.3488237982615974e+00 -2.4422003559522927e+00 + -1.0584799635440281e+00 1.0870113136722481e+00 -2.5527284904170142e+00 + -8.4998157313260925e-01 8.8384631631269173e-01 -2.6242860578571867e+00 + -6.4188374469629117e-01 7.1351647751210279e-01 -2.6769751350412507e+00 + -4.1027849022366558e-01 5.7751151031522674e-01 -2.6491281171554966e+00 + -1.8891034634282305e-01 4.6714078172904094e-01 -2.5566683907198779e+00 + 1.9725870616570385e-03 2.9327288585976774e-01 -2.5667015473493247e+00 + 1.7381612872649779e-01 4.4458309035334542e-02 -2.7933044891057404e+00 + 2.7517999637881618e-01 -1.0409379541451869e-01 -3.2291630999923857e+00 + 2.2715017450202754e-01 1.4076519166426715e-02 -3.7384531764885476e+00 + 8.1318326302148747e-02 2.2277724191820814e-01 -4.1010098152245851e+00 + 2.8137488632928365e-02 2.2605329053945389e-01 -4.3451756150873058e+00 + id 13441 + loc 2.0881573855876923e-01 2.0317563787102699e-02 376 + blend 0.0000000000000000e+00 + interp 5.0556311458691638e-01:5.0555805895577055e-01:6.5698938713072785e-01:2.5564805665691348e-01:1.0018779162237021e+00:2.2677167516143240e-01:1.9889334760533626e+00:4.0954407473041338e-01:2.5073262906384834e+00:3.0483497448201580e-01:3.0176490844801735e+00:3.8163596583696369e-01:3.7428224325671255e+00 + CVs 20 + 5.9994780879611154e-01 4.3044680807132740e-01 3.3217800832107797e-01 + 1.1331904777120276e+00 7.5629165189301573e-01 5.2531000695782992e-01 + 1.7009161564320630e+00 9.6220817291805194e-01 5.7651104417733534e-01 + 2.2918618845142169e+00 1.0943484745195049e+00 5.1573163950982437e-01 + 2.8728527150902634e+00 1.2298653647195670e+00 3.9956962498689885e-01 + 3.4616707663939277e+00 1.4025093896513317e+00 2.9502291181536089e-01 + 4.0824260439017035e+00 1.5973470277218593e+00 2.6635499086827497e-01 + 4.7216728076406724e+00 1.7872095714759273e+00 3.5666782341612202e-01 + 5.3461506501843079e+00 1.9474075877344672e+00 5.8030456430997290e-01 + 5.9260114694334556e+00 2.0497983559881323e+00 9.2846767821692289e-01 + 6.4355795242115192e+00 2.0658597143363382e+00 1.3713172129746818e+00 + 6.8596144713012146e+00 1.9829905627115545e+00 1.8708031238493534e+00 + 7.1994416044717360e+00 1.8095357308667332e+00 2.3844956719641761e+00 + 7.4605368300095867e+00 1.5715538151094557e+00 2.8560426580848368e+00 + 7.6426816975118772e+00 1.3042052465964353e+00 3.2649075886751628e+00 + 7.7051072554100912e+00 1.0732254765364906e+00 3.6197339321474100e+00 + 7.5398834707875650e+00 9.6301700005135427e-01 3.9880974006933800e+00 + 7.1547582457329160e+00 8.3843766060423874e-01 4.3892501408178077e+00 + 7.0770231752874659e+00 5.6571363166478816e-01 4.1534805714301122e+00 + id 13442 + loc 1.9844962656497955e-01 6.4419925212860107e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8750044397884862e-01:3.8688161000069171e-01:5.9139561008715891e-01:4.8749556897440888e-01:1.0026983337787918e+00:2.8578239271962858e-01:1.7563493497852178e+00:2.7789344693694407e-01:2.7994870309685589e+00:3.2467787189385339e-01:3.3238979369585171e+00:2.9747434530145045e-01:3.9960574522499548e+00 + CVs 20 + -1.8222252661447752e-01 3.1175441481263777e-01 1.9597039721442822e-01 + -2.9871607622447105e-01 5.3547740597629823e-01 2.2069031043513107e-01 + -4.2988075062528425e-01 7.2904946766152556e-01 2.0540462367202994e-01 + -5.9454000658190143e-01 9.0520497905733088e-01 1.8906343126331698e-01 + -7.8881168819523539e-01 1.0590463559949652e+00 1.6739256653268086e-01 + -1.0081599900363225e+00 1.1872135403987616e+00 1.3810066796904730e-01 + -1.2478615663323422e+00 1.2875184910302979e+00 1.0055707597290231e-01 + -1.5034173138489035e+00 1.3584244726669734e+00 5.5343171466107899e-02 + -1.7701147752350881e+00 1.3985563146532700e+00 3.8017174342843685e-03 + -2.0427830342125874e+00 1.4066942312550363e+00 -5.2249793889862728e-02 + -2.3158055123932302e+00 1.3821733120027202e+00 -1.1062804994468078e-01 + -2.5819033072536510e+00 1.3258632132929999e+00 -1.6886910889455531e-01 + -2.8313373553070997e+00 1.2405280272446666e+00 -2.2524725412312557e-01 + -3.0540470683746070e+00 1.1275415008342160e+00 -2.8077802163070509e-01 + -3.2456116086453841e+00 9.8404481320125758e-01 -3.3875186524001588e-01 + -3.4136770943797194e+00 8.0895459411219828e-01 -4.0015411059899009e-01 + -3.5724944625692099e+00 6.0963073276009472e-01 -4.6178438238151170e-01 + -3.7299104870267619e+00 3.9833678505846992e-01 -5.1828060655889852e-01 + -3.8178699389629722e+00 2.6213651032897944e-01 -5.1482350531303434e-01 + id 13443 + loc 9.0901029109954834e-01 4.5520776510238647e-01 382 + blend 0.0000000000000000e+00 + interp 4.8005147150304789e-01:4.8004667098833287e-01:1.6481222637033666e-03:2.8321783326164246e-01:8.3392840278114377e-01:4.0267378145390520e-01:1.7413812897834582e+00:3.6664340839599718e-01:2.3225085261170597e+00:3.7134960464106975e-01:3.0069797035775196e+00:3.9063193412348712e-01:3.7343381319095403e+00 + CVs 20 + -9.6612662570059449e-01 2.3826518903003308e-01 6.1672429821829233e-01 + -1.5907119550896218e+00 3.1880629743852068e-01 1.1007995394332877e+00 + -2.1265340434555124e+00 3.4070122807362135e-01 1.5533255210145140e+00 + -2.6809778654579786e+00 3.3568695265612436e-01 2.0111900556235924e+00 + -3.2675450873042382e+00 3.0011375440018462e-01 2.4559049204502093e+00 + -3.8977589450887371e+00 2.2688669365693104e-01 2.8692464551318539e+00 + -4.5767453518750747e+00 1.0052941863854770e-01 3.2357887310704156e+00 + -5.2961175310453452e+00 -1.0088428956864770e-01 3.5418333670753772e+00 + -6.0274062998996865e+00 -3.9890119006332947e-01 3.7832057946483104e+00 + -6.7446845116262519e+00 -7.9705402348765264e-01 3.9582797722990426e+00 + -7.4309890927335793e+00 -1.2908832821522043e+00 4.0669261987582086e+00 + -8.0528797899074025e+00 -1.8877157717729263e+00 4.1153488529216329e+00 + -8.5656830957606935e+00 -2.5837523868036589e+00 4.1079360867773298e+00 + -8.9494939914030418e+00 -3.3219409398633601e+00 4.0709453798457806e+00 + -9.2264474955329980e+00 -4.0180124303414688e+00 4.0515826425999162e+00 + -9.4224088067191243e+00 -4.6411838211693066e+00 4.0944707261626379e+00 + -9.5451489078022256e+00 -5.2173637635319938e+00 4.2316689816094168e+00 + -9.5944285553144724e+00 -5.7399405588561176e+00 4.4577099329749705e+00 + -9.5686556250868371e+00 -6.0885812717469134e+00 4.6659183396008963e+00 + id 13444 + loc 5.1013213396072388e-01 7.3265391588211060e-01 396 + blend 0.0000000000000000e+00 + interp 5.0934340655091204e-01:3.4292115273391599e-01:2.3917271379851146e-01:3.3723904408916366e-01:9.9861895518505495e-01:3.5482652330870862e-01:1.8358797461535261e+00:5.0933831311684652e-01:2.0847429273696503e+00:4.2478339907090917e-01:2.8137144897682465e+00:2.6985526664968928e-01:3.6463322237670344e+00 + CVs 20 + 8.4374876339966964e-01 2.9716609516932124e-01 -2.3881997376381606e-01 + 1.4172626918760347e+00 4.2918935867540592e-01 -3.9622638856329134e-01 + 1.9194886013757619e+00 4.8730147497532555e-01 -5.2048405895519256e-01 + 2.4418044386935178e+00 5.1442195258933587e-01 -6.2870088740879126e-01 + 2.9807623567274653e+00 5.0269833529413388e-01 -7.2322178794544933e-01 + 3.5334989529146168e+00 4.4814804388647206e-01 -8.1046159820409513e-01 + 4.0933342770484913e+00 3.5237384403146088e-01 -9.0004233870894079e-01 + 4.6490624484731828e+00 2.1822711705234987e-01 -9.9775487351277070e-01 + 5.2042061078805286e+00 3.4953816278842531e-02 -1.1032063183903755e+00 + 5.7619959173617437e+00 -2.2812543990553702e-01 -1.2114546453115209e+00 + 6.2974396150804637e+00 -6.0027003762029585e-01 -1.3211485650117623e+00 + 6.7622541683634561e+00 -1.0825285715670907e+00 -1.4303436584374132e+00 + 7.1213447089033588e+00 -1.6499870055187758e+00 -1.5269703081909731e+00 + 7.3691987035760960e+00 -2.2738262275911882e+00 -1.5981162808672615e+00 + 7.5126125477546006e+00 -2.9236320818158168e+00 -1.6412894813184633e+00 + 7.5596019606129889e+00 -3.5542890363212694e+00 -1.6576548856993587e+00 + 7.5264425606403158e+00 -4.1185503587718149e+00 -1.6456512581875715e+00 + 7.4406028081652069e+00 -4.6041017244660232e+00 -1.6132437182617594e+00 + 7.3433797944263697e+00 -5.1067634561285367e+00 -1.6095510498460261e+00 + id 13445 + loc 9.8204106092453003e-01 6.9466865062713623e-01 374 + blend 0.0000000000000000e+00 + interp 5.1821574750518806e-01:3.6415128520212403e-01:3.0950956276127872e-03:4.3926546149438633e-01:7.4793047256500977e-01:3.8947862626689067e-01:1.3751761249852179e+00:5.1821056534771304e-01:2.2212659155186758e+00:3.2857141354500624e-01:2.6612830727056500e+00:1.1543470237409076e-01:3.0337785296875115e+00 + CVs 20 + -7.2995405406379810e-01 3.7128972530810012e-01 -4.9181929167423227e-01 + -1.3501638689122093e+00 5.8043053355510765e-01 -8.3757123466240846e-01 + -1.9481271029221174e+00 6.9303874694660406e-01 -1.1127018837889828e+00 + -2.5479170770542923e+00 7.5104290750532776e-01 -1.3678914610638064e+00 + -3.1191547743979879e+00 7.6477211710247350e-01 -1.6257971533352278e+00 + -3.6398877180160123e+00 7.3490720295054079e-01 -1.9003052278936807e+00 + -4.0991137413645617e+00 6.6395804625688148e-01 -2.1975217384696721e+00 + -4.4925438582344226e+00 5.6179249500321760e-01 -2.5207323805095880e+00 + -4.8235091914387915e+00 4.3803798854655041e-01 -2.8733644476700211e+00 + -5.1039550346987363e+00 2.8929317254716524e-01 -3.2580030532475281e+00 + -5.3437071351755332e+00 9.5983502029308276e-02 -3.6642417421526483e+00 + -5.5438370348768453e+00 -1.5299497488860148e-01 -4.0730182144969387e+00 + -5.7046624421054180e+00 -4.6302626770854971e-01 -4.4697037934400257e+00 + -5.8401318189339850e+00 -8.4032858819591016e-01 -4.8359950784633483e+00 + -5.9748841434430933e+00 -1.2691953695819933e+00 -5.1556005665630824e+00 + -6.1421112176751009e+00 -1.7222590988794049e+00 -5.4354755609988707e+00 + -6.3752642917234681e+00 -2.1865124212919471e+00 -5.6957107950701289e+00 + -6.6863403106637360e+00 -2.6068008749086209e+00 -5.9275634413907499e+00 + -7.0335296635591877e+00 -2.8027485651446429e+00 -6.0690674970328740e+00 + id 13446 + loc 6.5538829565048218e-01 1.6516003012657166e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7572800804890997e-01:4.5727068154910033e-01:3.7490335222322124e-01:4.7572325076882949e-01:9.2800106543896510e-01:2.9450946785061294e-01:1.4264560019047796e+00:4.1229811796426169e-01:2.0000218554030904e+00:2.9361654470236831e-01:2.5102700760415648e+00:3.4091242178951087e-01:3.1577006757110908e+00:2.8965894244433504e-01:3.9990347073611154e+00 + CVs 20 + -1.3188158264178185e-01 2.1508409955563829e-01 1.2828137121615513e-01 + -2.6472921525479970e-01 4.3468436759422252e-01 2.7519532840674749e-01 + -3.9842774074884396e-01 6.5877329237971105e-01 4.2976878201327595e-01 + -5.2837300437352697e-01 8.7992031203661414e-01 5.7386948378888847e-01 + -6.5085783924554641e-01 1.0920765855321526e+00 7.0320357090137853e-01 + -7.6270946865280109e-01 1.2879167624786301e+00 8.0985294126541940e-01 + -8.5880793026608848e-01 1.4621290537912466e+00 8.8459629002078000e-01 + -9.4013574161498514e-01 1.6117042593265061e+00 9.2792269206748190e-01 + -1.0080512713956076e+00 1.7374620139974617e+00 9.4118875969113180e-01 + -1.0371539817765951e+00 1.8937554891748378e+00 8.9917777204806781e-01 + -1.0630339957896568e+00 2.2425497593801831e+00 7.7638027354662142e-01 + -1.2666726236731027e+00 2.6836263531065936e+00 7.4353637866782196e-01 + -1.5031590034941225e+00 2.8654940125066153e+00 8.5961738268879029e-01 + -1.6768517210424290e+00 2.8533924583361960e+00 1.0292637967926657e+00 + -1.7791783577625515e+00 2.7299824653935962e+00 1.2218983521767219e+00 + -1.7438804505943355e+00 2.5337839409093865e+00 1.3948575136274965e+00 + -1.5407601003060818e+00 2.3060182531109947e+00 1.5066180194272798e+00 + -1.2158209817671848e+00 2.0653050489309219e+00 1.5468975282906487e+00 + -1.0351564190231404e+00 1.9002791238632777e+00 1.4816805875931518e+00 + id 13447 + loc 6.1235445737838745e-01 1.3383752107620239e-01 407 + blend 0.0000000000000000e+00 + interp 4.2221107445902589e-01:2.5187973744043013e-01:1.0099329833957671e-02:3.3145758637115336e-01:1.0000014450432817e+00:4.2220685234828131e-01:1.6710666298051535e+00:3.2313079184033694e-01:2.1759285626798430e+00:2.5250931961711726e-01:3.2263578112280928e+00 + CVs 20 + -3.5887391274799652e-01 3.7484916573248844e-01 4.1396114407880040e-02 + -5.4326147242711897e-01 6.1345945685557923e-01 5.5761174402157707e-02 + -6.6187275903078846e-01 7.7615132462596592e-01 4.9188142660901116e-02 + -7.9032400846136719e-01 9.1332015955286838e-01 2.1942117867433872e-02 + -9.1796820601213014e-01 1.0151899034512248e+00 -2.7526516786596636e-02 + -1.0306077792628947e+00 1.0705917836521450e+00 -9.6741418780588340e-02 + -1.1112356328393085e+00 1.0709346375606534e+00 -1.7521261387602124e-01 + -1.1468324182401950e+00 1.0202514002081642e+00 -2.4354387776195985e-01 + -1.1423821317975897e+00 9.4035605280246504e-01 -2.8808941763818285e-01 + -1.1183229392953837e+00 8.5150775931061717e-01 -3.1697187830768647e-01 + -1.0887910239031435e+00 7.5686560456237761e-01 -3.4604327262251122e-01 + -1.0550422469547869e+00 6.5361964097289027e-01 -3.8060404240960138e-01 + -1.0146588980186215e+00 5.4285867601701399e-01 -4.1881320978736658e-01 + -9.7105390419324089e-01 4.2365094444127327e-01 -4.6659265701346980e-01 + -9.3396501656339248e-01 2.8575059295189509e-01 -5.4103308156375052e-01 + -9.1346012078810213e-01 1.2067780808969725e-01 -6.5624724418167357e-01 + -9.1456059753924912e-01 -6.0835228626669791e-02 -8.0978548809468076e-01 + -9.3692193542266866e-01 -2.3699417716084839e-01 -9.8773628849455208e-01 + -9.3389719327481935e-01 -3.0989912625685401e-01 -1.0787410121243315e+00 + id 13448 + loc 1.8856737017631531e-01 6.1118268966674805e-01 415 + blend 0.0000000000000000e+00 + interp 4.0976167161325000e-01:3.5300730243146261e-01:4.5886560032145862e-02:3.6912097248977799e-01:7.2211743487135127e-01:3.8746156351848432e-01:1.0240888438074927e+00:3.0418572421069101e-01:1.8895624672862716e+00:3.2389397868295672e-01:2.6366525626941346e+00:4.0975757399653390e-01:3.3055832602262125e+00 + CVs 20 + 2.6262287313979382e-01 2.4656655080535850e-01 2.3314923066073087e-01 + 4.5051328215543240e-01 4.2558156909026684e-01 3.8760591478930284e-01 + 6.0852640062643981e-01 5.7454986901598026e-01 5.2050336982646883e-01 + 7.7101187506523061e-01 7.2632392307506799e-01 6.7887465802283009e-01 + 9.3912414431097457e-01 8.7487419377556719e-01 8.6343867670933361e-01 + 1.1119391841064881e+00 1.0125604390850953e+00 1.0735499892510236e+00 + 1.2875393135835047e+00 1.1322411099582346e+00 1.3098898588638637e+00 + 1.4640177575473288e+00 1.2277284592485656e+00 1.5736192051048996e+00 + 1.6387694106189259e+00 1.2938867930269129e+00 1.8624867793049085e+00 + 1.8080173010006404e+00 1.3275282118875633e+00 2.1710886647849370e+00 + 1.9699811569871089e+00 1.3277337773010573e+00 2.4995413915932443e+00 + 2.1335724694356828e+00 1.2921304771774322e+00 2.8630852708305969e+00 + 2.3254050986506725e+00 1.2114246028931037e+00 3.2721248685569111e+00 + 2.5782312184096075e+00 1.0739048774426752e+00 3.6924074467857522e+00 + 2.8962682581788246e+00 8.8088064141018219e-01 4.0602234806012767e+00 + 3.2557645330445357e+00 6.4508438496582876e-01 4.3398270965397385e+00 + 3.6391402051770898e+00 3.7687260586123283e-01 4.5244780186308340e+00 + 4.0357317947157911e+00 8.9097231293006729e-02 4.6070345919053057e+00 + 4.3010871001824196e+00 -1.1629695423724051e-01 4.6459886067354832e+00 + id 13449 + loc 5.8882411569356918e-02 8.7210774421691895e-01 403 + blend 0.0000000000000000e+00 + interp 3.9664124972386255e-01:3.8149158771773606e-01:4.8140344361708098e-01:3.6529050828070775e-01:9.9689291199801555e-01:3.4789167697061141e-01:1.6267602138395723e+00:3.5798975362790814e-01:2.1002253156127875e+00:3.9663728331136533e-01:2.8489000780160487e+00:3.3204959603300377e-01:3.2048905486738946e+00:3.7171175711294635e-01:3.9862950379034094e+00 + CVs 20 + -9.0720608491789562e-03 1.7168711027963107e-01 2.2759726499379400e-02 + -3.5617137707774832e-02 3.2090803780530075e-01 3.9470499146920766e-02 + -6.4262960535393265e-02 4.6448159105678921e-01 5.2604623933316483e-02 + -7.9187760359391846e-02 6.0937918342641395e-01 6.8211828869394392e-02 + -8.1954758372016545e-02 7.5216734598706658e-01 8.6048715578986357e-02 + -7.4021286430700384e-02 8.8881282000904838e-01 1.0578620438726366e-01 + -5.8099051632064191e-02 1.0167787387628846e+00 1.2672448980321482e-01 + -3.7307990690263693e-02 1.1353985373184217e+00 1.4833899737186262e-01 + -1.3811649467937226e-02 1.2474204108703428e+00 1.7077240723434797e-01 + 9.2368160391292919e-03 1.3600693071443262e+00 1.9563514666661747e-01 + 2.3827389856450054e-02 1.4812504608120500e+00 2.2742988283055859e-01 + 1.5984145929218263e-02 1.6121729218499223e+00 2.7436765417588105e-01 + -2.4053533386191983e-02 1.7413693352034034e+00 3.4066535990051311e-01 + -9.0831710078758121e-02 1.8529702014430549e+00 4.1845338617812655e-01 + -1.7308901685907119e-01 1.9409794990266809e+00 4.9732339683478144e-01 + -2.7309797556729010e-01 2.0066009944514880e+00 5.8267148487345410e-01 + -3.9864306046357845e-01 2.0451177894070316e+00 6.8853119296808907e-01 + -5.4545413035153700e-01 2.0541141855536726e+00 8.1218383304706543e-01 + -7.0231620129888928e-01 2.0550684738640572e+00 9.2699611660010461e-01 + id 13450 + loc 9.7872740030288696e-01 6.6412830352783203e-01 375 + blend 0.0000000000000000e+00 + interp 4.4582412463215160e-01:2.1277441414507764e-01:2.9702277209875394e-04:3.6563915944211867e-01:5.3485887962936041e-01:4.4581966639090531e-01:9.7648133953459282e-01:4.1770631714348300e-01:1.1859552682726375e+00:2.2421351713495560e-01:1.9611831179831949e+00:2.0108027521141908e-01:2.6837052890885933e+00:3.7390697740374496e-01:3.0695965517389272e+00 + CVs 20 + -4.5694338620947467e-01 3.4295913788454413e-01 -1.5052194653104214e-01 + -8.3087001900843660e-01 5.5585311701509976e-01 -2.3196004274612969e-01 + -1.2018901057692433e+00 6.4645459438653030e-01 -2.5944493826432735e-01 + -1.6172413874154274e+00 6.3212602447543731e-01 -2.3506272828008512e-01 + -2.0721369554152140e+00 5.7244554008862480e-01 -1.5626160863395377e-01 + -2.5692598434365137e+00 5.3029994772325240e-01 -4.1842439912315510e-02 + -3.1289064950494438e+00 5.3312995064668878e-01 4.9914786523451715e-02 + -3.7563097078606829e+00 5.9036252415444701e-01 4.3081903084002615e-02 + -4.4069520228197590e+00 7.1402839342347857e-01 -1.1565009698532536e-01 + -5.0026021944778654e+00 8.9877225600025601e-01 -4.3310993530084985e-01 + -5.4946228771486654e+00 1.1070807086096366e+00 -8.7191556364211531e-01 + -5.8735352023497205e+00 1.2876545219152737e+00 -1.3859567603240146e+00 + -6.1344826267015922e+00 1.3849937202792599e+00 -1.9448809497000876e+00 + -6.2628448554608545e+00 1.3508864480175413e+00 -2.5260533971381047e+00 + -6.2331188701178917e+00 1.1749592600172143e+00 -3.0698050806335333e+00 + -6.0580139774989714e+00 9.0686693346941860e-01 -3.4678911733720650e+00 + -5.8548230549346822e+00 6.1096532348116650e-01 -3.6576964513929289e+00 + -5.7494772053329610e+00 2.3858353522994635e-01 -3.6851104583586536e+00 + -5.6734052194644420e+00 -4.6376130077521971e-01 -3.7291147418064829e+00 + id 13451 + loc 8.5853308439254761e-01 2.3491515219211578e-01 380 + blend 0.0000000000000000e+00 + interp 6.2437312926362354e-01:3.9114829446609006e-01:6.4530647368549632e-02:5.2529699452097867e-01:9.5417692201352911e-01:6.2436688553233088e-01:1.3755367191787529e+00:3.8363052201680170e-01:1.9652380442302135e+00:3.9077265873513906e-01:2.3352941639569527e+00:2.7822363743967865e-01:2.9363820989958560e+00:4.2300856640644791e-01:3.1396850238194007e+00:4.3037273799801301e-01:3.7827506639983239e+00 + CVs 20 + 6.1552995005523825e-01 2.3583565619240407e-01 6.9235649577710923e-01 + 1.1267844236613962e+00 3.2811949921261530e-01 1.1798290509641960e+00 + 1.6078229903727768e+00 3.5337813197236823e-01 1.6314488543634693e+00 + 2.0832604286197198e+00 3.3650809852565411e-01 2.1100267171336284e+00 + 2.5381084045110738e+00 2.7191300134435048e-01 2.6069953972777133e+00 + 2.9628291388432322e+00 1.5134727129656000e-01 3.1059948700036983e+00 + 3.3532537725830949e+00 -3.2988607125451708e-02 3.5889713756251633e+00 + 3.7043311536062933e+00 -2.8088033289158343e-01 4.0418889799356661e+00 + 4.0129303227440971e+00 -5.8323115046669383e-01 4.4555465604245921e+00 + 4.2788980593799781e+00 -9.2457196429473099e-01 4.8211794944716022e+00 + 4.4986052957860290e+00 -1.2837985986375826e+00 5.1255676518078284e+00 + 4.6641321515265872e+00 -1.6341223855028320e+00 5.3589579751641097e+00 + 4.7836653119162724e+00 -1.9666330717410778e+00 5.5428101525381104e+00 + 4.8831484189409045e+00 -2.3137171740050269e+00 5.7260813893978728e+00 + 4.9772977153466664e+00 -2.6987682233988126e+00 5.9392181197553775e+00 + 5.0655598727717148e+00 -3.0881865493685896e+00 6.1799826181638959e+00 + 5.1445080784502473e+00 -3.4389953464473071e+00 6.4292625731695550e+00 + 5.2163488845994666e+00 -3.7446091986288628e+00 6.6719466005510881e+00 + 5.3062379797191550e+00 -3.9924594880669604e+00 6.8943149133810291e+00 + id 13452 + loc 2.9982590675354004e-01 4.7662961483001709e-01 373 + blend 0.0000000000000000e+00 + interp 4.9299113512167569e-01:3.4341861347256802e-01:5.9917291842450338e-01:3.8136899079671566e-01:1.0432320233476033e+00:3.4683806246328663e-01:1.8051086413988227e+00:4.0038140808621153e-01:2.0806129353707363e+00:4.9298620521032449e-01:2.6376203465117998e+00:3.8159545351136887e-01:3.0560798171160348e+00:3.3223953110724952e-01:3.8642618992840716e+00 + CVs 20 + -1.2744346934643822e-01 7.4413986568014789e-01 2.9081814481594426e-01 + -2.9924542497440509e-01 1.5527008571011269e+00 5.6704477698836830e-01 + -5.6080746831683814e-01 2.4031550166559885e+00 7.4341427368804114e-01 + -9.4889869762981205e-01 3.2365377381034417e+00 7.1424173647979217e-01 + -1.4631456993767931e+00 3.9450468167799522e+00 4.1220163973276680e-01 + -2.0542041010525143e+00 4.3982717569062935e+00 -1.5063444318171282e-01 + -2.6261188308129033e+00 4.4995202055738730e+00 -8.6788641941420575e-01 + -3.1022265575961168e+00 4.2546604813317765e+00 -1.5920686865158684e+00 + -3.4460561684931030e+00 3.7140989287938693e+00 -2.2170088041384344e+00 + -3.6263504880381023e+00 2.9356141743812447e+00 -2.6810967464445676e+00 + -3.6201553063856520e+00 2.0124570564309043e+00 -2.9774796901085705e+00 + -3.4304960600546428e+00 1.0677342799029210e+00 -3.1216863756629065e+00 + -3.0574095303140463e+00 1.2037808339007083e-01 -3.2047721843113228e+00 + -2.4866852041916010e+00 -8.1152937539232539e-01 -3.3591713142377500e+00 + -1.7448174048448994e+00 -1.6651094894945253e+00 -3.6884642602178155e+00 + -1.1063150789161009e+00 -2.2799561240406936e+00 -4.4171564360532241e+00 + -9.1723438032633731e-01 -2.4428834668133090e+00 -5.4983069208941853e+00 + -1.3163512537776354e+00 -2.2620070860331674e+00 -6.5935586514587348e+00 + -2.0794811825282467e+00 -1.9538996045836940e+00 -7.3727669966768445e+00 + id 13453 + loc 6.3599556684494019e-01 3.3731275796890259e-01 399 + blend 0.0000000000000000e+00 + interp 3.8215081683480384e-01:3.1785184942570871e-01:5.0474965468828459e-02:2.8904215670212230e-01:9.0919074516825926e-01:3.3011976654396780e-01:1.8729938919673619e+00:3.8214699532663549e-01:2.3328982150396800e+00:2.6429785849124549e-01:3.0222778960662247e+00 + CVs 20 + 2.6824630380173392e-01 3.6054733418099233e-01 1.9451601007124802e-01 + 5.3346824137709181e-01 7.2495027484959063e-01 4.2956129317299430e-01 + 7.7646628204978585e-01 1.0768782631009319e+00 7.3630600969120441e-01 + 1.0031521175102978e+00 1.4028060476265518e+00 1.0923809013353341e+00 + 1.2284358516338911e+00 1.7000982233852502e+00 1.4718107700522896e+00 + 1.4604108719563684e+00 1.9628200864353311e+00 1.8624028433696005e+00 + 1.7030733316035453e+00 2.1764643907014629e+00 2.2565764531467534e+00 + 1.9605501714621827e+00 2.3214733939843613e+00 2.6456061391261865e+00 + 2.2354121103264450e+00 2.3801403277149351e+00 3.0216126350384545e+00 + 2.5262392742626183e+00 2.3371451408651001e+00 3.3763389356359252e+00 + 2.8237696921051425e+00 2.1995919494553959e+00 3.6901746119792058e+00 + 3.1133233325741383e+00 2.0205169066316686e+00 3.9517083722847532e+00 + 3.3862144998628905e+00 1.8617282704679494e+00 4.1784741072052505e+00 + 3.6295080859384616e+00 1.7745645252255111e+00 4.3915966254715260e+00 + 3.8243711875139659e+00 1.7800415544950203e+00 4.5956427165723763e+00 + 3.9756353505145205e+00 1.8367982936178353e+00 4.7988051623343839e+00 + 4.1002330668552096e+00 1.9051142392802234e+00 5.0249872014549579e+00 + 4.2002691625727149e+00 1.9793574614785321e+00 5.2818151963944562e+00 + 4.2710003966971390e+00 2.0581351425901615e+00 5.5414305767237861e+00 + id 13454 + loc 8.5600268840789795e-01 3.9447265863418579e-01 393 + blend 0.0000000000000000e+00 + interp 4.5134773116317539e-01:4.2455739451267510e-01:2.2124190553424983e-01:2.4169520456969429e-01:1.1721419671110198e+00:3.5323217228921377e-01:2.2812859321597552e+00:3.2524021589386132e-01:2.9944467901555072e+00:4.5134321768586377e-01:3.7988836883089969e+00 + CVs 20 + 2.5043844043082270e-01 3.4128101061400334e-01 2.0526376750108616e-01 + 5.1445051777381146e-01 6.9625930282796800e-01 3.6706623517596954e-01 + 7.7114441491829844e-01 1.0694266898922837e+00 5.1418146173429580e-01 + 1.0154437364658568e+00 1.4455866545319924e+00 6.7641063229034248e-01 + 1.2480036828496486e+00 1.7949329849383251e+00 8.8186713380886239e-01 + 1.4641080720782200e+00 2.0898344244898599e+00 1.1463041178039377e+00 + 1.6523558106955059e+00 2.3127522291698326e+00 1.4654535019304824e+00 + 1.8024825552485200e+00 2.4547235671307925e+00 1.8197194085941053e+00 + 1.9127570280935251e+00 2.5159403934690578e+00 2.1855487855157718e+00 + 1.9859744758193467e+00 2.5061457801253373e+00 2.5437333807431006e+00 + 2.0262535604459315e+00 2.4423287296449359e+00 2.8834825345120803e+00 + 2.0411058535530762e+00 2.3466204436627360e+00 3.2029023644719432e+00 + 2.0313230449979711e+00 2.2422026901751977e+00 3.5103506413373369e+00 + 1.9855460433070915e+00 2.1517890709353291e+00 3.8295980396091815e+00 + 1.8969887472639448e+00 2.0565087351949987e+00 4.1982311127545877e+00 + 1.7928709523820858e+00 1.8288487036418559e+00 4.6096953963781564e+00 + 1.7622302477403833e+00 1.3768388714520421e+00 4.9483491986886072e+00 + 1.9080032127193542e+00 8.3074602430092259e-01 5.0748548557634336e+00 + 2.2362944468742931e+00 4.3811318755921391e-01 4.9123647525344243e+00 + id 13455 + loc 9.0767556428909302e-01 4.4289398193359375e-01 409 + blend 0.0000000000000000e+00 + interp 5.0024155532798609e-01:3.0313500033215279e-01:5.8142417957011971e-01:3.2942425169105038e-01:1.2052870990412365e+00:5.0023655291243285e-01:1.9409830817765339e+00:3.0233149506636653e-01:2.4873222938623236e+00:3.2003373285099035e-01:3.0922148275695385e+00:3.2252900751190672e-01:3.9263615384926585e+00 + CVs 20 + -3.5854912118906401e-01 1.7367620142302787e-01 1.9280282117458863e-01 + -7.1927099734042765e-01 3.2001171414940033e-01 3.7482600914326220e-01 + -1.1056936181245740e+00 4.5672810961248611e-01 5.3868740890766786e-01 + -1.5251899899734829e+00 5.8544499665811389e-01 6.8165153312745697e-01 + -1.9705333297929097e+00 6.9827973431256807e-01 8.0283349997180165e-01 + -2.4333749868467072e+00 7.8765694169231337e-01 9.0357361168605499e-01 + -2.9060298805980569e+00 8.4121928161827575e-01 9.8428818375885307e-01 + -3.3801471963104226e+00 8.3900156607800769e-01 1.0441398510271636e+00 + -3.8451000217515778e+00 7.6081206470306162e-01 1.0906207592554071e+00 + -4.2843087091514196e+00 5.9046757861181987e-01 1.1415712530136453e+00 + -4.6703664530704057e+00 3.2359790950000988e-01 1.2055245100901129e+00 + -4.9793421703117513e+00 -1.7829991297538594e-02 1.2716941793264429e+00 + -5.2086532921912028e+00 -4.0016222540189128e-01 1.3302212125191257e+00 + -5.3654297670092621e+00 -8.0199789880662031e-01 1.3840920751529868e+00 + -5.4508246834696195e+00 -1.2097912601053356e+00 1.4325116854238749e+00 + -5.4618486869166691e+00 -1.6049637442818523e+00 1.4577758577689663e+00 + -5.4066054282817042e+00 -1.9654761060719901e+00 1.4446756050391980e+00 + -5.3166298292198242e+00 -2.2852270633224547e+00 1.4107830955649512e+00 + -5.2995306256288144e+00 -2.5973177229184783e+00 1.4270590743375791e+00 + id 13456 + loc 7.1876430511474609e-01 6.5770410001277924e-02 401 + blend 0.0000000000000000e+00 + interp 4.7486490212391552e-01:4.7486015347489430e-01:1.3382070182321792e-01:3.5575931957803253e-01:9.9744485954231132e-01:3.9789791723530060e-01:1.8250249244843397e+00:2.6384915248556035e-01:2.1047760349469251e+00:2.9740856175480296e-01:3.0670369470323156e+00:3.1657768882478410e-01:3.9255903973933228e+00 + CVs 20 + 7.8210896910268959e-02 2.7559413491405882e-01 2.2906795981535052e-01 + 1.7600477373575937e-01 5.2108119058885893e-01 4.4742009024846074e-01 + 2.8587666776237386e-01 7.3745059989320727e-01 6.5816666173247351e-01 + 4.0157453403055265e-01 9.2643352114360533e-01 8.6092430425831790e-01 + 5.2142230350922314e-01 1.0903158483085806e+00 1.0560949547392577e+00 + 6.4590552927611367e-01 1.2324651995413247e+00 1.2489726864138615e+00 + 7.8064943253446895e-01 1.3495023667164285e+00 1.4527779818761579e+00 + 9.3626648351861963e-01 1.4285862826621427e+00 1.6809017380454250e+00 + 1.1223678727141024e+00 1.4733782596901166e+00 1.9293060799179051e+00 + 1.3452406466841564e+00 1.5091047071842905e+00 2.1866238214659406e+00 + 1.6043277519495409e+00 1.5254706644327654e+00 2.4594042530835227e+00 + 1.8790329736807001e+00 1.4588865773201762e+00 2.7547123184087301e+00 + 2.1495409096903786e+00 1.2931796000971081e+00 3.0563258742328427e+00 + 2.4367830748206480e+00 1.0922764358536794e+00 3.3509033146884217e+00 + 2.7716572577716465e+00 9.0444440507316892e-01 3.6324679169898748e+00 + 3.1395978928889048e+00 7.2199820582503271e-01 3.8805650615585634e+00 + 3.4490419065782913e+00 5.7847006680731528e-01 4.0580143777080062e+00 + 3.5890069315657707e+00 5.4482165637785496e-01 4.1521623298853765e+00 + 4.0285697419671571e+00 6.5773464769332957e-01 4.3056188577794652e+00 + id 13457 + loc 5.5343121290206909e-01 4.1120257228612900e-02 400 + blend 0.0000000000000000e+00 + interp 4.9765099363070481e-01:3.1318593864794242e-01:7.7776834219889668e-01:4.9764601712076850e-01:1.0910527791202318e+00:3.5731026822480377e-01:2.0001086976403615e+00:2.9050254094458100e-01:2.6144600175138297e+00:3.0609558040174900e-01:3.7730722579441842e+00 + CVs 20 + 3.3504553083517896e-01 2.7670382893624335e-01 2.0362871653128811e-01 + 6.5274468499114480e-01 5.3829895696918928e-01 3.8049809254203004e-01 + 9.5133205783718733e-01 7.9669201706738224e-01 5.6215602207484228e-01 + 1.2304747307626724e+00 1.0472508226584114e+00 7.6335412566974969e-01 + 1.4937218818973519e+00 1.2758207702696041e+00 9.8715357928077285e-01 + 1.7479679666606738e+00 1.4682126201834049e+00 1.2323240278746397e+00 + 2.0010090111252916e+00 1.6131099115488525e+00 1.5006755659152249e+00 + 2.2566211736168937e+00 1.6980951322719726e+00 1.7948781791827062e+00 + 2.5109368574037649e+00 1.7119728701483470e+00 2.1089058865493127e+00 + 2.7565069611288990e+00 1.6540982641591881e+00 2.4298141825101958e+00 + 2.9886429385072586e+00 1.5338962752583898e+00 2.7494071431856297e+00 + 3.2031150393458980e+00 1.3645972751034567e+00 3.0660802204993129e+00 + 3.3939444283306170e+00 1.1611789615594448e+00 3.3781800623676559e+00 + 3.5592422530757837e+00 9.3467804562463797e-01 3.6826483707865343e+00 + 3.6997123351211534e+00 6.9640770655368422e-01 3.9746712109141473e+00 + 3.8063789807930672e+00 4.8845066370436419e-01 4.2373093661406331e+00 + 3.8534067210541476e+00 3.9433512277129124e-01 4.4171052730180751e+00 + 3.8262907022744228e+00 4.1131574352821243e-01 4.4395744588713999e+00 + 3.8752964896598967e+00 4.3041684665843860e-01 4.7178082341651582e+00 + id 13458 + loc 4.9359464645385742e-01 7.2794294357299805e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7477206522974458e-01:3.1576263950736028e-01:2.2040938058435744e-01:4.7476731750909229e-01:9.9211221953851869e-01:2.9469511594919828e-01:1.7504965997920223e+00:2.6732858613975180e-01:2.2781021235839716e+00:2.9836526982526274e-01:2.9949769044009011e+00:2.7375468021331023e-01:3.6489396527856988e+00 + CVs 20 + 1.8436052738759515e-01 2.7319649641739341e-01 -5.4256833492734330e-02 + 3.4184986521928740e-01 5.3578136990406910e-01 -1.3774456054916484e-01 + 4.8592211484208714e-01 7.9109507894264475e-01 -2.4483610543333184e-01 + 6.2317606529035097e-01 1.0323408060586163e+00 -3.7797977577501285e-01 + 7.5488882470197227e-01 1.2478595813364286e+00 -5.4465505724746799e-01 + 8.7798510784182038e-01 1.4258916666566794e+00 -7.4925686206626962e-01 + 9.8408697959288549e-01 1.5557859851555271e+00 -9.9106842118753424e-01 + 1.0603396778721916e+00 1.6291194133010796e+00 -1.2619331355919587e+00 + 1.0930828644737745e+00 1.6414141368523114e+00 -1.5459554777468423e+00 + 1.0741519065721308e+00 1.5931194440386369e+00 -1.8247056451145462e+00 + 1.0024492232446391e+00 1.4871242967409219e+00 -2.0814778563211660e+00 + 8.8376716430283608e-01 1.3240927021568931e+00 -2.3094562702894561e+00 + 7.2844808428204821e-01 1.0998548090804237e+00 -2.5186222996843113e+00 + 5.5304292196154381e-01 8.3434288052978367e-01 -2.7256309694596883e+00 + 3.8509041146727196e-01 6.0892034608921808e-01 -2.9667990545040839e+00 + 2.6275814152914834e-01 5.4780686443208859e-01 -3.2705707984937131e+00 + 2.2881912000161519e-01 7.0796931726858037e-01 -3.6038159164242285e+00 + 3.5496665228975804e-01 1.1504455748128222e+00 -3.8535714067663704e+00 + 3.4240563220310688e-01 1.3196121019646221e+00 -4.0106193682705076e+00 + id 13459 + loc 4.8372244834899902e-01 9.1654479503631592e-01 412 + blend 0.0000000000000000e+00 + interp 4.2865525971540080e-01:3.1038561229890221e-01:7.1115936521946499e-01:2.9237573592096822e-01:1.1615916458546920e+00:4.0383626867024647e-01:1.9675769059283224e+00:3.3503376529203877e-01:2.9333864018883693e+00:4.2865097316280365e-01:3.7863472533726972e+00 + CVs 20 + 8.6812808410564124e-01 1.2627860111392000e-01 -2.0759199057885572e-01 + 1.4074069975489429e+00 1.0694725578297642e-01 -4.0686272592923345e-01 + 1.8664968770337635e+00 4.1114515969759236e-02 -5.9655903352593653e-01 + 2.3347576938796251e+00 -3.5252890775960666e-02 -7.7579788290479235e-01 + 2.8065795735940680e+00 -1.2708154764216717e-01 -9.4111195338633857e-01 + 3.2808621328584557e+00 -2.3819005880351019e-01 -1.0886054590951315e+00 + 3.7565459052752028e+00 -3.6961047344144315e-01 -1.2141472994201701e+00 + 4.2310451092006396e+00 -5.1948035551877614e-01 -1.3142297247691093e+00 + 4.7014932147462751e+00 -6.8624146919080531e-01 -1.3871954353890954e+00 + 5.1626741705898374e+00 -8.6857897372737858e-01 -1.4329941529459533e+00 + 5.5961580903594204e+00 -1.0628300669931614e+00 -1.4579458499509166e+00 + 5.9699847546516489e+00 -1.2642040620759916e+00 -1.4847744968183743e+00 + 6.2735904217507823e+00 -1.4746862351661736e+00 -1.5408067087220294e+00 + 6.5356299994100180e+00 -1.7106464382967888e+00 -1.6354479244467681e+00 + 6.7739675445163643e+00 -1.9836470475274461e+00 -1.7688989318991011e+00 + 6.9720809872607958e+00 -2.2758213752175580e+00 -1.9400897640981662e+00 + 7.1111149760204500e+00 -2.5557670599282809e+00 -2.1443685391383362e+00 + 7.1930719429236607e+00 -2.8069462090127413e+00 -2.3715245407864725e+00 + 7.3113518320849034e+00 -3.1204946202902484e+00 -2.6078092697717397e+00 + id 13460 + loc 5.6636470556259155e-01 4.7763633728027344e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8707055470879790e-01:3.0441240651493690e-01:2.7894529298685677e-01:3.3094092202647468e-01:1.0055800610313013e+00:2.8058962576690299e-01:1.6644180636453343e+00:4.3347600985692519e-01:2.0041235780545952e+00:4.3927816414893989e-01:2.4652236654358259e+00:2.6978851218804051e-01:3.0258017480362631e+00:4.8706568400325084e-01:3.9942520559612644e+00 + CVs 20 + -3.0730151688164453e-04 4.2722682978762605e-01 -4.0378768016827432e-01 + -2.3686979897770966e-03 7.5173444743175388e-01 -6.2710219928541833e-01 + 1.5200265146754349e-03 1.0438644516835334e+00 -8.0091134976919276e-01 + 1.2134962874008906e-02 1.3367570496875141e+00 -9.7630210103812620e-01 + 2.3666748519587319e-02 1.6233253193066810e+00 -1.1452043651074235e+00 + 2.5152229364019146e-02 1.9068198572203392e+00 -1.3010333522245299e+00 + -1.1575278224988578e-02 2.2163416995612013e+00 -1.4347194501673024e+00 + -1.9319093346019625e-01 2.6300557147889263e+00 -1.4846559294420456e+00 + -6.8285807046410618e-01 2.9985400155643704e+00 -1.1773456260609141e+00 + -1.0652553785823446e+00 2.9404220346574537e+00 -7.1236926141485668e-01 + -1.2628482642713188e+00 2.7373963909069881e+00 -3.6383722335157032e-01 + -1.3906463859078533e+00 2.5056237404289061e+00 -8.9964070692365006e-02 + -1.4918456179318431e+00 2.2941025533023600e+00 1.1924743703452356e-01 + -1.5910246063141067e+00 2.1619279619110801e+00 2.3373929200083066e-01 + -1.7069031331440969e+00 2.1871353960177564e+00 1.2513718724303347e-01 + -1.7816331868643962e+00 2.2641106601015291e+00 -6.5001641275131661e-01 + -8.5920024363815728e-01 6.9095964938064180e-01 -2.0562248042941031e+00 + -9.7100063680249316e-02 -4.2567210733880073e-01 -1.3637019482281310e+00 + -1.2889518264282601e-01 -4.4862366986563540e-01 -1.4535297518822776e+00 + id 13461 + loc 2.7789995074272156e-01 5.7566817849874496e-03 1068 + blend 0.0000000000000000e+00 + interp 3.8854561478918687e-01:1.1394768320471012e-01:6.6670191097192744e-01:3.8854172933303899e-01:1.1049975873008435e+00:2.8463142817454706e-01:2.0066843251667539e+00:2.8514809406727115e-01:2.9445267418856504e+00:3.6494747703406255e-01:3.3935404268963674e+00 + CVs 20 + -1.4529174596154490e-01 2.4278433118913773e-01 -3.0214483034904122e-01 + -2.9929966070459779e-01 5.1228522935594223e-01 -6.0092886547769220e-01 + -4.7324124549834967e-01 8.0190969836981985e-01 -9.0710566456056940e-01 + -6.8785333142178284e-01 1.1148826350130281e+00 -1.2088607071263984e+00 + -9.6777197048489727e-01 1.4487205022758940e+00 -1.4786759841119252e+00 + -1.3343054910182011e+00 1.7805050823274031e+00 -1.6852009245845441e+00 + -1.7938486414847479e+00 2.0641062084147865e+00 -1.8048690550314537e+00 + -2.3315131103161493e+00 2.2406576911444889e+00 -1.8364539933851596e+00 + -2.9118483947645237e+00 2.2606068309861334e+00 -1.7910553518774137e+00 + -3.4811189025510059e+00 2.1090172705556465e+00 -1.6813058120002242e+00 + -3.9917105096846712e+00 1.8176377832728849e+00 -1.5390869960496967e+00 + -4.4389020390120377e+00 1.4518011563543551e+00 -1.4173757369920823e+00 + -4.8509680942028233e+00 1.0645240742769504e+00 -1.3587844021240127e+00 + -5.2485771850591068e+00 6.8594160674224014e-01 -1.3934767270681743e+00 + -5.6281444644684449e+00 3.3651384214142843e-01 -1.5808933163749694e+00 + -5.9281289672516539e+00 6.9441188717252911e-02 -2.0541307786692706e+00 + -6.0199582015035764e+00 3.5375140297422947e-02 -2.8171457323999207e+00 + -6.0020094392432286e+00 1.5689960931148728e-01 -3.4890464960230685e+00 + -6.2213728725987147e+00 3.6621157552980677e-03 -3.8456432152554592e+00 + id 13462 + loc 8.9541840553283691e-01 7.1882218122482300e-01 376 + blend 0.0000000000000000e+00 + interp 4.0350795518686083e-01:4.0350392010730901e-01:3.0724637399379362e-01:3.5566006074457496e-01:9.8508204489003814e-01:2.5139903944442255e-01:1.2302366071024029e+00:3.0282605427459436e-01:1.8784180353647151e+00:3.2262542728955829e-01:2.3617686602799295e+00:2.3134151239041303e-01:2.8918141643299391e+00:3.1875259012941881e-01:3.9492107792232769e+00 + CVs 20 + 1.0636159009987302e-01 4.6655523962864193e-01 4.8800840635873144e-01 + 3.2200219183698525e-01 7.8773067428497623e-01 9.3000046127995095e-01 + 6.1697322623985695e-01 9.6176611165654624e-01 1.3546087569946843e+00 + 9.4487442089822915e-01 1.0677780304540221e+00 1.7769553660056427e+00 + 1.2582025918934361e+00 1.1761922407902070e+00 2.2312740636367470e+00 + 1.5021669925720793e+00 1.3114662309869560e+00 2.7578386883742452e+00 + 1.6185841419662459e+00 1.4619591314753959e+00 3.3535855105254875e+00 + 1.5754130063397438e+00 1.6018029011401400e+00 3.9752214293323136e+00 + 1.3801214142880196e+00 1.7018863218010192e+00 4.5716663718552519e+00 + 1.0762174982953294e+00 1.7310550377903553e+00 5.0987340750668695e+00 + 7.2628413962045069e-01 1.6721032894677510e+00 5.5264264148869975e+00 + 4.0047639638914956e-01 1.5352542212255000e+00 5.8287578602153935e+00 + 1.5844698788792422e-01 1.3654966649442737e+00 5.9930824075854732e+00 + 5.1311191373640264e-03 1.2229241175386742e+00 6.0440123858173473e+00 + -8.1331205966118592e-02 1.1647068901275075e+00 6.0075854873225314e+00 + -1.4415562515881597e-01 1.2715636402443020e+00 5.8670312787152268e+00 + -3.4152788461839301e-01 1.5912665052612178e+00 5.5690574209058665e+00 + -7.9699518681177584e-01 1.7502147853523857e+00 5.1592964730822111e+00 + -8.7048919392083624e-01 1.3928092187163574e+00 4.9748930144130856e+00 + id 13463 + loc 9.1911822557449341e-01 3.9752626419067383e-01 378 + blend 0.0000000000000000e+00 + interp 6.4823649674956019e-01:3.1571880838846855e-01:2.2260386519797026e-01:4.5344176322137647e-01:9.9059117186822121e-01:6.4823001438459271e-01:1.4578545999689339e+00:3.7766572907790280e-01:2.0650705307331441e+00:2.9526464492760213e-01:2.9653745233050284e+00:2.6834810638824591e-01:3.8600342988728871e+00 + CVs 20 + -4.2137198712678381e-01 4.4270051983197461e-01 -8.5781399991425866e-03 + -8.3247955717301947e-01 8.3124542368987997e-01 -2.2066288343065787e-02 + -1.2547489032495802e+00 1.1726548002432440e+00 -2.9039461783859383e-02 + -1.6774585996542681e+00 1.4797855763434602e+00 -4.2685910527515802e-02 + -2.0886787312492032e+00 1.7557664005787172e+00 -8.0764262135844589e-02 + -2.4919841696231133e+00 1.9922330924222380e+00 -1.5216419666536651e-01 + -2.8921032153549300e+00 2.1800992985277250e+00 -2.5685480938631688e-01 + -3.2896466729433946e+00 2.3180989778731869e+00 -3.8943825594433967e-01 + -3.6910813875316042e+00 2.4092397948819855e+00 -5.4393940586475076e-01 + -4.1108252892776225e+00 2.4500505466636637e+00 -7.1594726300102907e-01 + -4.5573183826445316e+00 2.4221753754639650e+00 -8.9961015161423863e-01 + -5.0228375374035199e+00 2.2966525660218871e+00 -1.0839832536395373e+00 + -5.4831542132784481e+00 2.0616972100321527e+00 -1.2509396475707806e+00 + -5.9139070750956284e+00 1.7639826732268693e+00 -1.3840856131710422e+00 + -6.3209983090025599e+00 1.4876783595435916e+00 -1.4879401129598637e+00 + -6.7290916011117741e+00 1.2921263196103121e+00 -1.5706296619287565e+00 + -7.1471493193271236e+00 1.1994772247025609e+00 -1.6168193921285816e+00 + -7.5678893054413701e+00 1.1914492374224332e+00 -1.6227869071776229e+00 + -8.0470546045680837e+00 1.1430706240972484e+00 -1.6530598201432141e+00 + id 13464 + loc 3.7055066227912903e-01 7.8708404302597046e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7383586073507006e-01:4.1905640839749403e-01:3.2064807384449723e-02:4.7383112237646274e-01:7.3750692990268885e-01:2.7486283891088292e-01:1.6315934703957982e+00:3.1794028260261392e-01:2.2882677727017464e+00:3.3924911896856319e-01:2.9534096940552486e+00:4.3222553120996199e-01:3.3991170451860016e+00 + CVs 20 + 2.8968363253106699e-01 2.3656656748795793e-01 -2.4768010964098333e-01 + 5.5712401213636253e-01 4.8023450842356807e-01 -4.7174386563731896e-01 + 7.9975349508072369e-01 7.3076220351419652e-01 -6.7921257996425166e-01 + 1.0128638490452271e+00 9.8879344510227429e-01 -8.8094590166328235e-01 + 1.1908028349696405e+00 1.2556148562915426e+00 -1.0885584157777672e+00 + 1.3263193679113967e+00 1.5280441914813729e+00 -1.3127671117872430e+00 + 1.4145577897533474e+00 1.7970001874472326e+00 -1.5655900413398987e+00 + 1.4561778649225170e+00 2.0488142789168453e+00 -1.8644868817075886e+00 + 1.4518311377825239e+00 2.2611036618004290e+00 -2.2311533197430053e+00 + 1.3988817640516595e+00 2.4009860291586942e+00 -2.6753879315889915e+00 + 1.3000246727469484e+00 2.4413549565599499e+00 -3.1798752412060152e+00 + 1.1721691879173934e+00 2.3808902559181817e+00 -3.7124737013098494e+00 + 1.0439945244319095e+00 2.2389620442333604e+00 -4.2496824302368212e+00 + 9.4832334980736166e-01 2.0412648509585689e+00 -4.7790563462011511e+00 + 9.2192112596307707e-01 1.8115407948960467e+00 -5.2942747195672455e+00 + 1.0258695645953317e+00 1.5735839456362741e+00 -5.7811304412353355e+00 + 1.3330743067296156e+00 1.3866354145998165e+00 -6.1850596792612862e+00 + 1.7818843461267013e+00 1.2955390302576155e+00 -6.4683209309588161e+00 + 2.1383557739842436e+00 1.1578325176852180e+00 -6.7691309663549468e+00 + id 13465 + loc 4.8073813319206238e-01 3.0497097969055176e-01 402 + blend 0.0000000000000000e+00 + interp 3.8726474658973681e-01:3.8726087394227093e-01:1.4292268113752316e-01:3.3152004809457553e-01:1.0200794095348418e+00:2.5848022725473857e-01:2.0880003404960124e+00:3.2763497595687885e-01:2.9238367915266075e+00:3.2169588818051315e-01:3.4367021513974576e+00 + CVs 20 + -5.4589663128100041e-02 4.8140413430629325e-01 1.6352219286321693e-01 + -1.6829252477803053e-01 9.9413375698363371e-01 2.9620849601269755e-01 + -3.3725558972584102e-01 1.5187634402120320e+00 4.2269825348933648e-01 + -5.6186802560206794e-01 2.0322201559059998e+00 6.2020381711097783e-01 + -8.3036696629415918e-01 2.4787350385847580e+00 9.6112552784183480e-01 + -1.1226550471154726e+00 2.7819876387873803e+00 1.4523632406227862e+00 + -1.4291181598590941e+00 2.8873179418012533e+00 2.0328774951058066e+00 + -1.7580513264347823e+00 2.7819469105593204e+00 2.6137511226665953e+00 + -2.1190522893894124e+00 2.4656007043787946e+00 3.1186102869893499e+00 + -2.4871286393041920e+00 1.9447746155821652e+00 3.4641215944469419e+00 + -2.7793068017739220e+00 1.3306391913260018e+00 3.6008248045433833e+00 + -2.9533678712988847e+00 7.7956882406272376e-01 3.6389973673284750e+00 + -3.0602486894876701e+00 3.2186731943381186e-01 3.7132804270541828e+00 + -3.1631607614625250e+00 -6.7812077630544865e-02 3.8748545381049055e+00 + -3.3087210394310311e+00 -4.1951553825990362e-01 4.1205864916367752e+00 + -3.5249696786430027e+00 -7.6955587501148137e-01 4.4098873447641802e+00 + -3.8016852645125176e+00 -1.1321847260165177e+00 4.6976777197366868e+00 + -4.1064667362238048e+00 -1.4885269473608707e+00 4.9656261819185525e+00 + -4.3780741114681927e+00 -1.8280962752289622e+00 5.2403072839138378e+00 + id 13466 + loc 8.2672286033630371e-01 9.4250333309173584e-01 415 + blend 0.0000000000000000e+00 + interp 5.1246237311504839e-01:3.4940488044280765e-01:9.2428572446219026e-01:3.8882157032904541e-01:1.7444753219265032e+00:4.3269548332797025e-01:2.0117336742840259e+00:5.1245724849131724e-01:2.6758779647767388e+00:4.2713516223737652e-01:3.5580464703446886e+00:4.8270389849881978e-01:3.9956909694108265e+00 + CVs 20 + 4.2000706349393307e-01 1.8258609467790854e-01 -2.5878786447890642e-02 + 7.3497979114147283e-01 2.7156493958527900e-01 -6.5624160579396684e-02 + 1.0300272379666593e+00 3.2530681714251647e-01 -9.4168042533189167e-02 + 1.3434014505596716e+00 3.7003399388580149e-01 -9.5262543159185864e-02 + 1.6687529677443613e+00 4.0369944796629342e-01 -6.3054584261988456e-02 + 1.9968464521597789e+00 4.2463442374013716e-01 8.4427802507751060e-03 + 2.3179239575167712e+00 4.3190200266932399e-01 1.2472858944445298e-01 + 2.6229309590513257e+00 4.2356712221328874e-01 2.8715346610190140e-01 + 2.9011114625936192e+00 3.9677584009492128e-01 4.9074389802889556e-01 + 3.1417701220872125e+00 3.5132066574568110e-01 7.2602348793509841e-01 + 3.3510990191186583e+00 2.8642764439489077e-01 9.8516853309769492e-01 + 3.5639122394135194e+00 1.9066415130368219e-01 1.2625477355669958e+00 + 3.8111689284482289e+00 4.2522391466792930e-02 1.5347114758292340e+00 + 4.0747148143601262e+00 -1.6222954541816348e-01 1.7607263215201348e+00 + 4.3174102869061084e+00 -4.0275591138941280e-01 1.9238539970098758e+00 + 4.5296467668810569e+00 -6.6116879650657889e-01 2.0299653738408177e+00 + 4.7154955212588128e+00 -9.2786487866834744e-01 2.0858062510193758e+00 + 4.8678465190605174e+00 -1.1865964894049594e+00 2.0984667253366402e+00 + 4.9028979936534833e+00 -1.3579301884886683e+00 2.0836537532028157e+00 + id 13467 + loc 4.4592660665512085e-01 8.0515015125274658e-01 382 + blend 0.0000000000000000e+00 + interp 4.8732132315053911e-01:3.7479740578063275e-01:2.0149433597398525e-01:2.3683515309629075e-01:8.9243301199680658e-01:3.6911238483385855e-01:1.3531840459247899e+00:3.9412080548296630e-01:2.1094303362642290e+00:4.0754309261660454e-01:2.7922080252226937e+00:4.3087562614813602e-01:3.0849845415273038e+00:4.8731644993730761e-01:3.8797236728939026e+00 + CVs 20 + 9.3497305148957832e-01 2.5622036240297508e-01 -4.8810557077812250e-01 + 1.5417019247778305e+00 3.9767494418488947e-01 -8.1713779745538517e-01 + 2.0740446570637028e+00 4.9018866711649550e-01 -1.1247364463993192e+00 + 2.6473915714923626e+00 5.6166146503177050e-01 -1.4736754245984236e+00 + 3.2545562016070564e+00 5.9106856238788708e-01 -1.8742184804890951e+00 + 3.8809124203842784e+00 5.6137517952141236e-01 -2.3305010342431993e+00 + 4.5067394077422458e+00 4.6301996151092067e-01 -2.8414145837945441e+00 + 5.1127305817338859e+00 2.7666972765307596e-01 -3.3882513130243259e+00 + 5.6776115458861813e+00 -1.9536826254519024e-02 -3.9348323200132662e+00 + 6.1702007191134278e+00 -4.3034416378788265e-01 -4.4413901880545588e+00 + 6.5429834594189051e+00 -9.3434609739346453e-01 -4.8816757666298267e+00 + 6.7490883289999335e+00 -1.4867057724951287e+00 -5.2455922291093522e+00 + 6.7791068922852755e+00 -2.0339785077092012e+00 -5.5331427153366803e+00 + 6.6540944846979544e+00 -2.5398241436180409e+00 -5.7591153972146829e+00 + 6.4072566465568190e+00 -2.9836479795502391e+00 -5.9450495931560052e+00 + 6.0760139976338117e+00 -3.3489182422426453e+00 -6.1113221014134265e+00 + 5.6967885487466097e+00 -3.6333730895657097e+00 -6.2757983328868336e+00 + 5.2901723369312315e+00 -3.8650381748474523e+00 -6.4481287382302508e+00 + 4.8149470422995577e+00 -4.1614895530304068e+00 -6.6083480384291793e+00 + id 13468 + loc 1.7140322923660278e-01 6.7320495843887329e-01 396 + blend 0.0000000000000000e+00 + interp 3.7988466530129167e-01:2.9897700572673702e-01:3.4885003459106634e-01:3.7988086645463870e-01:1.2649642466107172e+00:3.2164009637379998e-01:2.0493861162537330e+00:3.2577433757194812e-01:2.9679478156206747e+00:3.7605585194807678e-01:3.9005766603972769e+00 + CVs 20 + 8.3499195725450004e-01 2.8527838817983264e-01 -2.2636965932781175e-01 + 1.4532656834957933e+00 4.1583797797390465e-01 -4.0524597496190456e-01 + 2.0331735994877462e+00 4.9153715152231214e-01 -5.6717707363413017e-01 + 2.6543070817041770e+00 5.4818789539054524e-01 -7.2573496933593407e-01 + 3.3035509776837753e+00 5.6971191213492489e-01 -8.8074187384175784e-01 + 3.9625336667743221e+00 5.4025886150378022e-01 -1.0383242309519591e+00 + 4.6097494148005413e+00 4.4480377728004949e-01 -1.2074669578270392e+00 + 5.2216994860797357e+00 2.6839738438065153e-01 -1.3929177488482853e+00 + 5.7721412931091614e+00 9.2323323815768354e-04 -1.5956349678764270e+00 + 6.2299784063411305e+00 -3.5455459196111438e-01 -1.8162380295400684e+00 + 6.5660390098377466e+00 -7.7550096544312641e-01 -2.0492154108847518e+00 + 6.7731572838339797e+00 -1.2284679272598737e+00 -2.2791473810859726e+00 + 6.8692174826381196e+00 -1.6881053349608373e+00 -2.4908035257798975e+00 + 6.8789850383096267e+00 -2.1387808517453761e+00 -2.6766425233678079e+00 + 6.8290213449374821e+00 -2.5679961656591641e+00 -2.8373464925590062e+00 + 6.7454936468683586e+00 -2.9725278458809350e+00 -2.9781486631443470e+00 + 6.6457388591536937e+00 -3.3600513117292738e+00 -3.1048095158135887e+00 + 6.5378931110018996e+00 -3.7434430486385075e+00 -3.2261093740055751e+00 + 6.4493764889339094e+00 -4.1886018759021280e+00 -3.3724504689636494e+00 + id 13469 + loc 5.7184809446334839e-01 4.9528095126152039e-01 403 + blend 0.0000000000000000e+00 + interp 4.6215192506418823e-01:3.2777753350536332e-01:1.7048390244989653e-01:3.2640261190074943e-01:9.3641401373479061e-01:3.1072609017013014e-01:1.9173659771923126e+00:4.4200295161509323e-01:2.5927529662106745e+00:4.6214730354493760e-01:3.0158903860260877e+00:2.9292170499312731e-01:3.6644119061962876e+00 + CVs 20 + 1.6034705835851681e-01 2.2466358630713848e-01 1.4622864288825618e-01 + 3.1056629338889791e-01 4.5645627416100759e-01 2.6493063256556443e-01 + 4.7435077800316938e-01 6.7614134980554275e-01 3.8459034758820165e-01 + 6.5984117357074246e-01 8.7534704187730450e-01 5.0874301242857001e-01 + 8.7038642354234963e-01 1.0467717283690259e+00 6.2896214450915644e-01 + 1.1060435126628265e+00 1.1863130829645270e+00 7.3179901935227099e-01 + 1.3630339174139734e+00 1.2948004457552940e+00 8.0918603775862441e-01 + 1.6357319114449551e+00 1.3761452093784339e+00 8.6196664107905241e-01 + 1.9187535947855052e+00 1.4328420845111005e+00 8.9257210868889192e-01 + 2.2074089649950484e+00 1.4618905613388036e+00 9.0098705430788883e-01 + 2.4957705274929283e+00 1.4565747641564823e+00 8.8509956066437978e-01 + 2.7752381942625073e+00 1.4127801134717575e+00 8.4325570237515879e-01 + 3.0352250333268334e+00 1.3313780683350487e+00 7.7394563195777100e-01 + 3.2631636363697325e+00 1.2177942528217225e+00 6.7063280015461868e-01 + 3.4457483140913809e+00 1.0832978534063222e+00 5.2653521782746671e-01 + 3.5751671327437338e+00 9.3927582651024299e-01 3.4559772117839893e-01 + 3.6559415507125514e+00 7.8972223390217255e-01 1.4740523831964478e-01 + 3.7045558570334958e+00 6.3881241988292281e-01 -4.5501241136675780e-02 + 3.9045600559965985e+00 5.7745456843857279e-01 -1.2624740508203061e-01 + id 13470 + loc 7.0098310708999634e-01 5.9699821472167969e-01 373 + blend 0.0000000000000000e+00 + interp 4.7468800822642454e-01:3.5417891746137431e-01:5.5317259235381089e-01:4.7468326134634231e-01:1.0575317686913837e+00:3.9383823431409465e-01:1.9072394884047468e+00:3.8705023912106312e-01:2.5786464446776574e+00:4.1679613892975276e-01:3.1537573565833261e+00:4.2956062079069696e-01:3.9708282347058064e+00 + CVs 20 + -3.0094049388251320e-01 4.0610557158742050e-01 -1.2230189458065620e-01 + -5.5148257862806416e-01 8.0475923809650585e-01 -2.5990990234414679e-01 + -7.5570918209660620e-01 1.1955211859442081e+00 -4.1461633926935998e-01 + -9.0662309912779349e-01 1.5794542997930314e+00 -5.8703310061677816e-01 + -1.0040806872703059e+00 1.9576750692015403e+00 -7.8325525675271201e-01 + -1.0709790148031675e+00 2.3218566097422437e+00 -1.0264109986884189e+00 + -1.1330091272962135e+00 2.6419702200238273e+00 -1.3431339434497156e+00 + -1.2000094282374660e+00 2.8879131316596340e+00 -1.7348225348693020e+00 + -1.2673981824894265e+00 3.0482618968655903e+00 -2.1829121179871156e+00 + -1.3231687713747533e+00 3.1217776183040753e+00 -2.6674018067227592e+00 + -1.3561311957299802e+00 3.0957425990695753e+00 -3.1799105793998699e+00 + -1.3678514108116908e+00 2.9222653218118944e+00 -3.7070251079471066e+00 + -1.4001320602408871e+00 2.5720671230351773e+00 -4.1946872841164087e+00 + -1.5515792166761964e+00 2.1266378565935682e+00 -4.6039706829851390e+00 + -1.9095376540184379e+00 1.7279730462783931e+00 -4.9403635025997854e+00 + -2.4771356935754270e+00 1.5063427860357332e+00 -5.1786988575650748e+00 + -3.1632955595545722e+00 1.5487226583278804e+00 -5.2534854733596843e+00 + -3.8134119320051152e+00 1.7793661581318290e+00 -5.1722499015959658e+00 + -4.4305579571775482e+00 1.7386944973244214e+00 -5.2599006698207189e+00 + id 13471 + loc 7.7032661437988281e-01 4.4715809822082520e-01 374 + blend 0.0000000000000000e+00 + interp 4.5473598547745536e-01:3.9218319706752369e-01:7.2386028799430191e-01:4.5473143811760058e-01:9.4271473654612226e-01:4.3929829380809515e-01:1.2087988439374553e+00:3.7236992531322843e-01:1.9881863447816777e+00:3.5846962689301765e-01:2.7121350055516129e+00:4.0251447357272224e-01:3.2014737830578679e+00:3.6976991186238140e-01:3.9978243678904120e+00 + CVs 20 + 7.5308724380044290e-01 3.9437416468994252e-01 3.5529222764249202e-01 + 1.3363740167770835e+00 6.6974446080734407e-01 5.6792845364093769e-01 + 1.9070677630319932e+00 8.9376081937566665e-01 7.0615214303385354e-01 + 2.5084459173561675e+00 1.1195009438548873e+00 8.1766820984979860e-01 + 3.1289637547702629e+00 1.3667628428860930e+00 9.3735704786464158e-01 + 3.7835636974341202e+00 1.6220139059099501e+00 1.1022637932532078e+00 + 4.4914523533176283e+00 1.8332697912973228e+00 1.3469690449313980e+00 + 5.2435149842522604e+00 1.9343496657271606e+00 1.6947149970969728e+00 + 6.0059893819009984e+00 1.8694695378313932e+00 2.1493151755165609e+00 + 6.7397806305935664e+00 1.5987241878113259e+00 2.6875425928870809e+00 + 7.4186841574344555e+00 1.1010718532935626e+00 3.2457672518596978e+00 + 8.0150849279936018e+00 3.8145085313258908e-01 3.7402444444543566e+00 + 8.4962051539544472e+00 -4.9709551131939866e-01 4.0973864425421613e+00 + 8.8712757615412308e+00 -1.4015917874195307e+00 4.3012088476430241e+00 + 9.2074328124972986e+00 -2.2251699280889974e+00 4.4076389834773311e+00 + 9.5748699801897725e+00 -2.9293978306015207e+00 4.4607820925801125e+00 + 1.0008926754709410e+01 -3.4965364173009443e+00 4.4531140043207262e+00 + 1.0471764731870564e+01 -3.9817812098354035e+00 4.4052249686927860e+00 + 1.0863475889337977e+01 -4.5809472660620765e+00 4.4416375728742592e+00 + id 13472 + loc 3.4771755337715149e-01 6.7646241188049316e-01 395 + blend 0.0000000000000000e+00 + interp 4.8055475813361870e-01:4.1060259352487782e-01:3.5630462481843039e-01:4.8054995258603739e-01:9.7657649860013707e-01:4.2023764690426663e-01:1.5584322982905991e+00:4.2039793719470531e-01:2.0904860384128359e+00:3.9384543832148045e-01:2.9835831498684193e+00:2.9077555789018056e-01:3.3140119376600863e+00:4.1512123708130633e-01:3.9544609154929162e+00 + CVs 20 + 5.2348973422096334e-01 6.2423958724362905e-02 -3.9011744589665331e-01 + 9.6528808228082230e-01 6.1926084218859201e-02 -7.3291577453088164e-01 + 1.3917276876066662e+00 4.7418722469495855e-02 -1.0538602150585050e+00 + 1.8205209083054463e+00 2.7616560146897950e-02 -1.3565840409336560e+00 + 2.2445574041666525e+00 -4.7132022900668868e-03 -1.6379798474267520e+00 + 2.6556562660154057e+00 -5.4998750117054351e-02 -1.9012349162095301e+00 + 3.0467145517483250e+00 -1.2770998272066247e-01 -2.1454493065451792e+00 + 3.4114154976631021e+00 -2.2980397019178911e-01 -2.3621771649498542e+00 + 3.7416818367090641e+00 -3.6929171504983116e-01 -2.5441680417571439e+00 + 4.0264139302311488e+00 -5.4854791021329907e-01 -2.6930276731740888e+00 + 4.2633707764429838e+00 -7.6109180406100840e-01 -2.8125352259365175e+00 + 4.4708231009024981e+00 -9.9528021821572965e-01 -2.9022206711277643e+00 + 4.6691928133315113e+00 -1.2409429764346824e+00 -2.9607390706309240e+00 + 4.8635790242446406e+00 -1.4902549958099218e+00 -2.9928335248923421e+00 + 5.0493685267490838e+00 -1.7372691207604727e+00 -3.0057819082022559e+00 + 5.2195307744539070e+00 -1.9735262812665550e+00 -2.9981440600487677e+00 + 5.3710750651542298e+00 -2.1863252795686323e+00 -2.9670984855433522e+00 + 5.5109900806528191e+00 -2.3723017964708357e+00 -2.9267773443813705e+00 + 5.6733351816238029e+00 -2.5786818148394235e+00 -2.9327789718032400e+00 + id 13473 + loc 3.1143611669540405e-01 9.1354680061340332e-01 400 + blend 0.0000000000000000e+00 + interp 4.6222765355796730e-01:2.9336285562585318e-01:4.9491900824251223e-01:3.3069405631691212e-01:1.1634563179286908e+00:4.6222303128143172e-01:2.0754404126263797e+00:3.7541500609254097e-01:2.7586882079756885e+00:2.7292599680534840e-01:3.0807134380653167e+00:2.7193496068312412e-01:3.9706979658995900e+00 + CVs 20 + -1.3773196205731075e-01 3.7977432633233144e-01 -1.7287437078370665e-01 + -2.7914862585099909e-01 7.3191975686967659e-01 -3.6376199751195815e-01 + -3.9421015253806635e-01 1.0425265380634328e+00 -5.9090239253951682e-01 + -4.7899144156459983e-01 1.3015220885851118e+00 -8.5352701798017372e-01 + -5.3602811488560509e-01 1.5002237276913799e+00 -1.1379633156233186e+00 + -5.6435795672324551e-01 1.6367846610230075e+00 -1.4286367814741787e+00 + -5.6251492348130383e-01 1.7155883628456237e+00 -1.7122002698699093e+00 + -5.3107505286839907e-01 1.7439380376725537e+00 -1.9781964878410832e+00 + -4.7372650219376194e-01 1.7300081193193000e+00 -2.2184419331807756e+00 + -3.9518914257384496e-01 1.6828707108661347e+00 -2.4298787777307593e+00 + -2.9088334287110862e-01 1.6092912416823264e+00 -2.6292944592972023e+00 + -1.4507579216003033e-01 1.5076472456247285e+00 -2.8512879109297438e+00 + 4.2694444036458189e-02 1.3771071117351679e+00 -3.1180699148340545e+00 + 2.4596181625592373e-01 1.2239325627728164e+00 -3.4283441212899008e+00 + 4.2681101345394035e-01 1.0323205221230221e+00 -3.7803299400713790e+00 + 5.3281290298303619e-01 7.4675820328424813e-01 -4.1800595320564771e+00 + 4.9904227787798944e-01 3.4032611257808631e-01 -4.6089189581463330e+00 + 2.9446412336858280e-01 -1.2507657552076523e-01 -5.0146152069755425e+00 + -3.4657805976135159e-03 -5.2190481443661740e-01 -5.3295097801287321e+00 + id 13474 + loc 3.4953981637954712e-01 3.5388472676277161e-01 375 + blend 0.0000000000000000e+00 + interp 4.6151688901434756e-01:4.0501526799904275e-01:3.9349085850150178e-02:4.6151227384545745e-01:6.2875613171840583e-01:4.3639581814905237e-01:1.0036311686841048e+00:3.5289553646076410e-01:1.5684053059137393e+00:4.1315810651022755e-01:2.4543773826857218e+00:3.5869356770368066e-01:3.4443968161804186e+00 + CVs 20 + 6.3214722815387064e-02 5.0930122183706295e-01 5.9047577807536522e-01 + 2.1808179992436375e-01 8.1601747180156670e-01 1.1483636045131513e+00 + 4.5356518746016988e-01 9.2003992130467316e-01 1.7030295525773345e+00 + 7.3768841315584510e-01 9.2138758993820413e-01 2.2552088554607845e+00 + 1.0269224051044872e+00 9.1183303709981112e-01 2.8257916249073478e+00 + 1.2629799089337059e+00 9.3757054867156553e-01 3.4503835899719175e+00 + 1.3840430957561476e+00 1.0122214788315531e+00 4.1238376832758181e+00 + 1.3564525800174461e+00 1.1313638900919007e+00 4.8017040708202954e+00 + 1.1824221472751222e+00 1.2890175095986369e+00 5.4345105337378072e+00 + 8.9160154965383409e-01 1.4714707316984084e+00 5.9800977745016795e+00 + 5.2111943139644956e-01 1.6610656158952855e+00 6.4255071080349335e+00 + 8.8598174972434052e-02 1.8471057216420026e+00 6.7884129686893697e+00 + -4.1430540142217054e-01 2.0083503655306112e+00 7.0911217943549474e+00 + -1.0080454598017181e+00 2.0997326130774492e+00 7.3378528774749299e+00 + -1.6870933559281107e+00 2.0706752200872307e+00 7.5007420677971242e+00 + -2.3723676865840426e+00 1.9065497668027218e+00 7.5387381287982516e+00 + -2.9669995041553996e+00 1.6230020606345823e+00 7.4894563632979239e+00 + -3.3992085484030543e+00 1.2006120309700012e+00 7.4863677174142422e+00 + -3.6133882121116887e+00 7.0282646192601783e-01 7.6383006892538567e+00 + id 13475 + loc 4.2505514621734619e-01 8.0384427309036255e-01 393 + blend 0.0000000000000000e+00 + interp 4.6732851907016659e-01:2.8865277100248810e-01:3.3795335311872265e-01:2.9843646590637185e-01:1.1742879935309540e+00:4.4578789399906460e-01:1.8637895343061430e+00:4.6732384578497593e-01:2.1048678776630436e+00:3.9143373858766162e-01:2.7552486201363355e+00:2.7121181431651187e-01:3.7278095961756259e+00 + CVs 20 + -2.7570782147351058e-01 2.9334515794172200e-01 -1.5556638705065057e-01 + -5.3725945770984129e-01 5.9741680865612390e-01 -3.0743104000038490e-01 + -7.7407353783832078e-01 9.2067664473712563e-01 -4.7291241548031038e-01 + -9.8525923515249003e-01 1.2613314052284146e+00 -6.5933006273458639e-01 + -1.1866091167326338e+00 1.6152540337474044e+00 -8.6616018322198307e-01 + -1.4009157502725225e+00 1.9783884627427291e+00 -1.0905464280356443e+00 + -1.6532263727946006e+00 2.3438195360830880e+00 -1.3265495887496290e+00 + -1.9709038008063093e+00 2.6921925188168641e+00 -1.5669612429765343e+00 + -2.3714868377199725e+00 2.9835944339656475e+00 -1.8052703583985612e+00 + -2.8417070898919570e+00 3.1817692977640348e+00 -2.0403491163111132e+00 + -3.3577272504745244e+00 3.2819652432158026e+00 -2.2833639518427100e+00 + -3.9148382010271701e+00 3.2810610831724403e+00 -2.5462621655801749e+00 + -4.5037625493538194e+00 3.1499807095744368e+00 -2.8164591585177137e+00 + -5.0836157313752901e+00 2.8650640976685429e+00 -3.0646156059519085e+00 + -5.6107296241207978e+00 2.4369865038557426e+00 -3.2736229838463595e+00 + -6.0903496901180230e+00 1.9116893994181208e+00 -3.3955459460548880e+00 + -6.5513249210534701e+00 1.3791435225419677e+00 -3.3312124966140426e+00 + -6.9868694933749413e+00 9.4066378418602303e-01 -3.0477496353990827e+00 + -7.4569224630182500e+00 4.6641060625677877e-01 -2.7844789754435526e+00 + id 13476 + loc 5.6512564420700073e-01 5.2016157656908035e-02 1080 + blend 0.0000000000000000e+00 + interp 4.3411921238168938e-01:2.8204980959251491e-01:7.2066863363431144e-01:4.1942271899337596e-01:1.0005208028833059e+00:4.3411487118956560e-01:1.9402248633409638e+00:2.3269773955375489e-01:2.3008035792065931e+00:4.0191925328542527e-01:3.0525984041734242e+00:2.8717667292118138e-01:3.9445995686332664e+00 + CVs 20 + -8.1742408077728645e-02 4.5932359950464285e-01 -5.0247358174420709e-01 + -1.7442226704218700e-01 7.7952095530558752e-01 -8.1564505398123632e-01 + -2.7282368884015140e-01 1.0369181182090030e+00 -1.0649174488189741e+00 + -3.7797087554400111e-01 1.2696678516893485e+00 -1.3097296464989989e+00 + -4.9268107032936098e-01 1.4783002952206024e+00 -1.5465113680029912e+00 + -6.1847710414279866e-01 1.6653365733011269e+00 -1.7732628456705690e+00 + -7.5513217042420566e-01 1.8351608183347419e+00 -1.9865248583815203e+00 + -9.0224524413276219e-01 1.9948450817188161e+00 -2.1827384409544273e+00 + -1.0665032238724899e+00 2.1566543067400961e+00 -2.3614382674542092e+00 + -1.2697929304713140e+00 2.3238942789621664e+00 -2.5113138572477114e+00 + -1.5158287302058182e+00 2.4551669470260409e+00 -2.6003088860709083e+00 + -1.7583898436358045e+00 2.5002318494775251e+00 -2.6209096489100334e+00 + -1.9572795314102873e+00 2.4550456930035431e+00 -2.5966294891141444e+00 + -2.1000208852126168e+00 2.3384656183745038e+00 -2.5473111390923142e+00 + -2.1827541511117219e+00 2.1811530096268745e+00 -2.4829591765263688e+00 + -2.2030463724877998e+00 2.0487067655258198e+00 -2.4063293677187985e+00 + -2.1683952485038254e+00 2.0060373545251853e+00 -2.3062230609029943e+00 + -2.1055668267984315e+00 1.9388605154810088e+00 -2.2170400753127617e+00 + -2.0262284564672250e+00 1.4559492360595843e+00 -2.3939309627122056e+00 + id 13477 + loc 8.7232834100723267e-01 5.7349973917007446e-01 401 + blend 0.0000000000000000e+00 + interp 3.7322151023597955e-01:3.3778942907460130e-01:8.2518085352080273e-02:3.6690168843838233e-01:9.8889911623980609e-01:3.0180056774942837e-01:1.7841189367062507e+00:3.7321777802087719e-01:2.1253193794140914e+00:3.4828430350843120e-01:2.8091116456394918e+00:3.6985659618290012e-01:3.6070714786568576e+00 + CVs 20 + -7.5611767420521350e-02 3.1255890261390495e-01 -8.4265705612981939e-02 + -1.7383117479843141e-01 6.3077665138068573e-01 -2.0730171185347696e-01 + -2.6866883324114266e-01 9.5891776363568337e-01 -3.6950337936671362e-01 + -3.4279281034361531e-01 1.2872704576668248e+00 -5.7298605832641503e-01 + -3.9548426146261778e-01 1.5973917885318256e+00 -8.2132148456883936e-01 + -4.3307859926030523e-01 1.8731692292496880e+00 -1.1101731598055633e+00 + -4.6536712517092482e-01 2.1054520516091855e+00 -1.4290652353886837e+00 + -5.0234280857286495e-01 2.2884425151541552e+00 -1.7638152438754808e+00 + -5.5242990758045318e-01 2.4178990856448990e+00 -2.1005015193382395e+00 + -6.1504502591437749e-01 2.4870946990849876e+00 -2.4284357545975466e+00 + -6.7409578568851536e-01 2.4806496265691504e+00 -2.7281241169920483e+00 + -7.0980572322173519e-01 2.3868233601675044e+00 -2.9574995206421404e+00 + -7.2093288213684004e-01 2.2258326611158048e+00 -3.0872013252252639e+00 + -7.3618974889228683e-01 2.0290986027744689e+00 -3.1606383744342592e+00 + -8.1022925244549504e-01 1.7994946784664632e+00 -3.2406847910881607e+00 + -1.0176693027253250e+00 1.5557962436233501e+00 -3.3509364740125931e+00 + -1.4328431952923748e+00 1.3941463350773413e+00 -3.4875479059298007e+00 + -1.9817937679784421e+00 1.4416989021259603e+00 -3.6067413436543774e+00 + -2.3662060187577643e+00 1.3608764457146378e+00 -3.7738577238796958e+00 + id 13478 + loc 9.5516151189804077e-01 1.9340805709362030e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6093774698570639e-01:3.5925397203232201e-01:9.9931054231964200e-01:4.1796347192069949e-01:1.9989239891553723e+00:2.8181492953457038e-01:2.5841530260534231e+00:4.6093313760823656e-01:3.1563556919936797e+00:3.1149281816045143e-01:3.9858113235925856e+00 + CVs 20 + -5.3583731482958225e-02 5.3495739990442437e-01 2.1226392010604356e-01 + -1.6300703805088990e-01 1.0564916246893270e+00 3.9743860532902309e-01 + -3.4705524671000854e-01 1.5488730591260398e+00 5.4841977677909060e-01 + -6.2225438543706957e-01 1.9784247168573486e+00 6.6833504039319280e-01 + -9.7892414282591578e-01 2.3026039587458738e+00 7.7130611848812614e-01 + -1.3722018046604991e+00 2.4991140456745846e+00 8.8183530804395360e-01 + -1.7410611545033827e+00 2.5744381143491171e+00 1.0153875859555517e+00 + -2.0370701399965925e+00 2.5610058695575613e+00 1.1670173536630621e+00 + -2.2462342056379283e+00 2.4967149458675708e+00 1.3208718263762589e+00 + -2.3800674812453924e+00 2.4140676630716302e+00 1.4592973136298730e+00 + -2.4589834799913044e+00 2.3320495842454925e+00 1.5783992692983899e+00 + -2.4895927699496907e+00 2.2310359233163863e+00 1.6811747881499155e+00 + -2.4936403980415371e+00 2.1062098811846646e+00 1.7651744124531399e+00 + -2.4787802606801241e+00 1.9726991368165310e+00 1.8373809403714785e+00 + -2.4049064740950494e+00 1.8638234134569722e+00 1.8863640273300322e+00 + -2.2471628660005250e+00 1.8071887548252259e+00 1.8903421861622531e+00 + -1.9754939229499917e+00 1.7885404428350085e+00 1.7504826461151191e+00 + -1.3451473631100141e+00 1.5560255701236585e+00 1.1734630313711998e+00 + -1.3580876600866796e+00 1.5306749697196758e+00 1.1611978626765624e+00 + id 13479 + loc 2.1046233177185059e-01 7.4607723951339722e-01 399 + blend 0.0000000000000000e+00 + interp 4.0910231360098365e-01:2.7799997296906404e-01:7.8479514121870642e-01:3.8763076366104388e-01:1.1359404131386204e+00:2.6516132813129206e-01:1.8434461238174484e+00:3.2750393464535826e-01:2.3193068463598512e+00:3.4958047649664414e-01:3.2941956446199372e+00:4.0909822257784767e-01:3.9846740434987287e+00 + CVs 20 + -1.7402969507094990e-01 3.2992092726293892e-01 -2.6727460173560436e-01 + -3.3477738980555538e-01 6.6092606593193293e-01 -5.1601842900847272e-01 + -4.8056183907797739e-01 9.8999693532888999e-01 -7.7317351776653931e-01 + -6.1043535721906494e-01 1.3159425157604836e+00 -1.0500354682216300e+00 + -7.2373242417950889e-01 1.6438473698742637e+00 -1.3501622720460913e+00 + -8.2801724406176735e-01 1.9853891228151452e+00 -1.6808413119228700e+00 + -9.5993348385568078e-01 2.3609980770378134e+00 -2.0569678516768475e+00 + -1.2059575681969315e+00 2.7750715695298340e+00 -2.5043060696058563e+00 + -1.6771258416337125e+00 3.1309010812328419e+00 -3.0118944692193796e+00 + -2.3524694020383978e+00 3.2678884269465551e+00 -3.4809079182838336e+00 + -3.0780251756659842e+00 3.1553292433261753e+00 -3.8259465350938213e+00 + -3.6978847433630850e+00 2.8961455509644694e+00 -4.0304666993571621e+00 + -4.1202236299056567e+00 2.6274189484125605e+00 -4.1284817405146033e+00 + -4.3047679700079380e+00 2.4318082301917303e+00 -4.1536292362638880e+00 + -4.2397807252343727e+00 2.3003082166616622e+00 -4.1016725015475979e+00 + -3.9426129039937861e+00 2.1232491217181377e+00 -3.9476972544370219e+00 + -3.4701615271314714e+00 1.6864839800005100e+00 -3.6978108300538959e+00 + -3.2872405257161876e+00 1.1351268241452721e+00 -3.5667400527461761e+00 + -3.6747983509753954e+00 1.4727335368729235e+00 -3.6555775164925839e+00 + id 13480 + loc 6.1923187971115112e-01 4.2698282748460770e-02 415 + blend 0.0000000000000000e+00 + interp 4.8310931317730521e-01:2.9519333484068072e-01:1.1785650102069667e-05:4.4739311468878834e-01:3.9205296907026299e-01:4.3760377754766810e-01:9.9199907434030354e-01:2.7297302278438579e-01:1.5751241712153639e+00:1.8997765813840742e-01:2.2697652691554309e+00:3.8555613979832848e-01:2.8733756231737928e+00:4.8310448208417345e-01:3.3477208326495060e+00 + CVs 20 + -1.3123508727258001e-01 1.3351642249662929e-01 -2.7613969977998754e-02 + -2.5304541743969572e-01 2.4452227564810269e-01 -2.1911732240904008e-02 + -3.8469085372800915e-01 3.5742245163746555e-01 -1.2538640294918718e-02 + -5.3291019294638109e-01 4.7977364366922021e-01 -2.2695296312091440e-02 + -6.9987054374382618e-01 6.0767808802247791e-01 -5.7911754003770188e-02 + -8.8702435154163306e-01 7.3565380158737459e-01 -1.2471568476683248e-01 + -1.0928215316058751e+00 8.5624576807070574e-01 -2.3026639352938805e-01 + -1.3127012394003907e+00 9.6062015334155104e-01 -3.7910682774667837e-01 + -1.5412530171378531e+00 1.0405320517565180e+00 -5.7190711699676144e-01 + -1.7726830487292351e+00 1.0890387745947481e+00 -8.0703932355567221e-01 + -1.9997431221562723e+00 1.0994327528973704e+00 -1.0759713682845842e+00 + -2.2192409490051554e+00 1.0641971641381338e+00 -1.3460093096673671e+00 + -2.4411736302876990e+00 9.7824866320446791e-01 -1.5572465701032705e+00 + -2.6729874770629136e+00 8.4474857816752658e-01 -1.6630713264921857e+00 + -2.9073637460076882e+00 6.7239932423447080e-01 -1.6705412651097662e+00 + -3.1331284236721455e+00 4.6800577777075647e-01 -1.6037746708514242e+00 + -3.3287348269692991e+00 2.4389808097334087e-01 -1.4600090228038116e+00 + -3.4706423928412282e+00 2.1189044014129799e-02 -1.2357598358873891e+00 + -3.7883862569133484e+00 -2.3179365216662129e-01 -1.1671688197119479e+00 + id 13481 + loc 7.4931317567825317e-01 2.3274829983711243e-01 402 + blend 0.0000000000000000e+00 + interp 4.4294005818728666e-01:3.9209352705215728e-01:1.6642469905331503e-01:2.9749463688101219e-01:9.1801196119601736e-01:4.4293562878670478e-01:1.7752307086898491e+00:3.1416911555975546e-01:2.2538675367223249e+00:3.6413540804207511e-01:3.0246820588961567e+00:4.3904007988191079e-01:3.8242730201564985e+00 + CVs 20 + 1.9137330597831495e-01 3.2196137023189653e-01 2.3016510455487968e-01 + 3.7416075419572581e-01 6.5328308565932458e-01 4.6849809851887991e-01 + 5.5226682384399495e-01 1.0026591904015885e+00 7.3200975305296789e-01 + 7.6813353025890752e-01 1.3629125910637792e+00 1.0254398972271714e+00 + 1.0836128319382141e+00 1.6920605501658952e+00 1.3271338359007365e+00 + 1.5174037093812087e+00 1.9337334336841252e+00 1.6138430038537595e+00 + 2.0343166233206746e+00 2.0423974174746724e+00 1.8871765913299026e+00 + 2.5676157105149677e+00 1.9890675023024591e+00 2.1754576120847897e+00 + 3.0317713495701928e+00 1.7571951136941424e+00 2.5085930140126420e+00 + 3.3249013389584774e+00 1.3497746746244894e+00 2.8717892538498790e+00 + 3.4167615435036001e+00 8.2742114934064714e-01 3.2100674619862373e+00 + 3.4506262538851553e+00 2.4939349957179968e-01 3.5215365407119226e+00 + 3.5945043739919371e+00 -3.5166123799189641e-01 3.8401038930827354e+00 + 3.9301258593720498e+00 -8.9377210947530716e-01 4.1733340554169054e+00 + 4.4098127105675200e+00 -1.2921216991029891e+00 4.5180686577829707e+00 + 4.8733895314300204e+00 -1.5578038979440316e+00 4.8898624870115199e+00 + 5.2219209831884816e+00 -1.7614447860678943e+00 5.2979790234578505e+00 + 5.4975398218044500e+00 -1.9472004686417526e+00 5.7033207771935173e+00 + 5.8252527988307650e+00 -2.1673294315014302e+00 6.0398887132886703e+00 + id 13482 + loc 6.6402092576026917e-02 4.7137963771820068e-01 412 + blend 0.0000000000000000e+00 + interp 5.4556240185746085e-01:3.0747123824106143e-01:3.3953150032828283e-04:2.9877168511952806e-01:8.6758067635935077e-01:5.4555694623344231e-01:1.5064784005124223e+00:4.5911675009234798e-01:2.0034089630313963e+00:3.1846648335648076e-01:2.6151765072655393e+00:3.4720198455343765e-01:3.0270794842502697e+00 + CVs 20 + -1.4911621264202163e-01 2.0397280134300647e-01 -5.7962795247857424e-01 + -3.0714192371968652e-01 3.1007728196422579e-01 -9.8724913456303076e-01 + -4.5948145008205799e-01 3.8179439123334591e-01 -1.3683927189448233e+00 + -5.9136005766179989e-01 4.5408122564325015e-01 -1.7989696694061943e+00 + -6.8899006383901051e-01 5.1852672412047440e-01 -2.2745986163789094e+00 + -7.3698413694338227e-01 5.6652684582968094e-01 -2.7848366953129884e+00 + -7.2197367692221281e-01 5.9109949756020641e-01 -3.3126250168255336e+00 + -6.3891517694963174e-01 5.8700244474193553e-01 -3.8367517511631002e+00 + -4.9184643507261239e-01 5.5178829393853768e-01 -4.3356715490630400e+00 + -2.9119427368586281e-01 4.8667406448020833e-01 -4.7904028210622833e+00 + -5.6844758631324876e-02 3.8914672564553721e-01 -5.1938099766461754e+00 + 1.7770762074491464e-01 2.3854233343622400e-01 -5.5641281036216403e+00 + 3.7408818451820752e-01 6.1754599727716908e-03 -5.9246878284272899e+00 + 5.1160551567488188e-01 -3.0465789057295956e-01 -6.2614350418230371e+00 + 5.9540078879291158e-01 -6.6276690628787627e-01 -6.5447104802461613e+00 + 6.3076143453917843e-01 -1.0438573318618061e+00 -6.7639315169635141e+00 + 6.1648459679635814e-01 -1.4309711581264297e+00 -6.9212833293193867e+00 + 5.5863050463156905e-01 -1.8045618935300221e+00 -7.0208773561843367e+00 + 5.3814172000837868e-01 -2.0656082009836059e+00 -7.0482885664087496e+00 + id 13483 + loc 6.7093068361282349e-01 8.8582485914230347e-01 376 + blend 0.0000000000000000e+00 + interp 3.3887956515350165e-01:2.8752761761712103e-01:7.6278437565081592e-01:2.0108027521141908e-01:1.8739685698066753e+00:2.3600430221827604e-01:2.4192212640655328e+00:2.7447076606228010e-01:2.9710736502923378e+00:2.3602638597825226e-01:3.3367080030161604e+00:3.3887617635785011e-01:3.9188499616598733e+00 + CVs 20 + -7.1023180938907943e-02 4.2916881110958466e-01 5.1933574834770502e-01 + -5.6903935020726604e-02 7.5096978789505464e-01 1.0146584269236789e+00 + 4.6434421266010939e-02 9.3791442747968790e-01 1.5413408261668748e+00 + 2.0534050042851604e-01 1.0488118388703267e+00 2.0831440118735114e+00 + 3.6722864534456662e-01 1.1569789553439767e+00 2.6165218637698997e+00 + 4.7445136478038707e-01 1.2893308144843649e+00 3.1458492579697195e+00 + 4.8530095258017680e-01 1.4398058946596559e+00 3.6716479875599610e+00 + 3.9116579374059957e-01 1.6009614426405840e+00 4.1765771371759666e+00 + 2.0384142690450913e-01 1.7713512021867714e+00 4.6457091512999957e+00 + -5.9913555649675043e-02 1.9465622786188470e+00 5.0772729693443761e+00 + -3.8698908261917442e-01 2.1162705764780450e+00 5.4728338793066245e+00 + -7.7619859046778072e-01 2.2648393626458070e+00 5.8330711268943150e+00 + -1.2398811533158423e+00 2.3663349201677093e+00 6.1550351930941050e+00 + -1.7867583967516092e+00 2.3813179145924561e+00 6.4219113679088151e+00 + -2.4051581737705972e+00 2.2709762524481576e+00 6.5967175823937669e+00 + -3.0518297578407472e+00 2.0080401090667772e+00 6.6307591471374794e+00 + -3.6539836660634784e+00 1.5432816032927335e+00 6.5378754114503197e+00 + -4.0469958619841861e+00 8.7603470408305606e-01 6.4670529945738320e+00 + -4.1397183988652291e+00 3.9069428244503346e-01 6.4905042827168424e+00 + id 13484 + loc 2.3875829577445984e-01 7.3544543981552124e-01 382 + blend 0.0000000000000000e+00 + interp 4.8128685671959343e-01:3.6392119793512701e-01:5.0551725983974749e-01:3.6741088921842951e-01:1.0213124609560140e+00:4.7569179419434215e-01:1.5926973137159619e+00:4.8128204385102624e-01:1.9819749210237934e+00:4.2705060038386694e-01:2.1974055954632199e+00:2.8618813854450736e-01:2.9053611938256338e+00:3.7526660180155169e-01:3.1988209159500705e+00:3.0827591269571275e-01:3.9759335217164384e+00 + CVs 20 + 9.5201386666764232e-01 1.4511980952430506e-01 -5.3088594871619799e-01 + 1.5867594456800891e+00 1.5921941816237259e-01 -9.5959686748686879e-01 + 2.1503757324628401e+00 1.3254384386267509e-01 -1.3795452056874127e+00 + 2.7427875662950441e+00 9.2977503603733358e-02 -1.8256209982684783e+00 + 3.3559579284619470e+00 2.4553267853066663e-02 -2.2857712791046807e+00 + 3.9740269811810607e+00 -8.5730124265416485e-02 -2.7470194856414230e+00 + 4.5767930523444029e+00 -2.4609530565453674e-01 -3.1969616619431722e+00 + 5.1451038442503156e+00 -4.6061471301156653e-01 -3.6231184346679957e+00 + 5.6619681477677313e+00 -7.2302497362643225e-01 -4.0197834155044205e+00 + 6.1144366578163414e+00 -1.0186993942607938e+00 -4.3938604551834075e+00 + 6.4999572912038159e+00 -1.3327933312157372e+00 -4.7575646043999971e+00 + 6.8287656100381549e+00 -1.6551020062703943e+00 -5.1185658467517889e+00 + 7.1150208804343329e+00 -1.9844872833429144e+00 -5.4800672958960304e+00 + 7.3668846397812553e+00 -2.3286018472503263e+00 -5.8432154659589077e+00 + 7.5852594622418570e+00 -2.7000237865047336e+00 -6.2045693207468346e+00 + 7.7667506988286057e+00 -3.1128484331714277e+00 -6.5558248883109549e+00 + 7.9062127807973166e+00 -3.5725895343792105e+00 -6.8831657533316015e+00 + 7.9955237068990375e+00 -4.0514265861544505e+00 -7.1624054109722781e+00 + 8.0558111876161131e+00 -4.3554908322487789e+00 -7.3029482701076116e+00 + id 13485 + loc 2.9818829894065857e-01 1.6963320970535278e-01 396 + blend 0.0000000000000000e+00 + interp 5.0956913950430149e-01:5.0956404381290643e-01:4.8618416385221475e-01:3.6371030955117079e-01:1.0122003956054670e+00:3.3374928297253098e-01:1.9549484790432636e+00:3.2600663163891630e-01:2.8390878496459440e+00:2.6766773223823687e-01:3.8473441344724919e+00 + CVs 20 + -2.0304837181166022e-01 1.7829416229893674e-01 -7.5511521274999471e-01 + -3.7920161430272925e-01 2.1996971446855307e-01 -1.3579869156501838e+00 + -5.4972636846853296e-01 2.0989201360735510e-01 -1.9152602604388778e+00 + -7.2968978276271046e-01 1.6966490418341851e-01 -2.4679051507973981e+00 + -9.2161024190220686e-01 9.4421010698520380e-02 -3.0096352691916710e+00 + -1.1289929282508111e+00 -1.7956123067822238e-02 -3.5310678814998688e+00 + -1.3476841060559090e+00 -1.6920206162933593e-01 -4.0125192083067951e+00 + -1.5645536519808652e+00 -3.6087140847016297e-01 -4.4310646971895267e+00 + -1.7679719216224639e+00 -5.8978986976491332e-01 -4.7683591588013963e+00 + -1.9548441299588908e+00 -8.4472183361867836e-01 -5.0115248106379404e+00 + -2.1225102836550840e+00 -1.1061518346964245e+00 -5.1551660972676698e+00 + -2.2618083091466827e+00 -1.3514635669184760e+00 -5.2133686975892761e+00 + -2.3641525987346030e+00 -1.5668412758976056e+00 -5.2177396211182971e+00 + -2.4300537751632438e+00 -1.7513291812063447e+00 -5.1947539782616765e+00 + -2.4595162219787587e+00 -1.9085441215477190e+00 -5.1623824734100339e+00 + -2.4508513528299125e+00 -2.0394217727131183e+00 -5.1328194070914783e+00 + -2.4081759909058009e+00 -2.1446178814656625e+00 -5.1144821334006538e+00 + -2.3401146176150460e+00 -2.2447651264351647e+00 -5.1088916281012562e+00 + -2.2547841980771914e+00 -2.5115166820949328e+00 -5.0600670965270398e+00 + id 13486 + loc 3.9580065011978149e-01 1.9936142489314079e-02 1078 + blend 0.0000000000000000e+00 + interp 3.4959028499675310e-01:2.1454490433005560e-01:1.3458622810131460e-01:1.5782492111622429e-01:1.4359321727461958e+00:3.0771196247366273e-01:2.1148210322662777e+00:3.4958678909390317e-01:2.9616449198624890e+00:3.0652503819970034e-01:3.7735460947821138e+00 + CVs 20 + 8.6749794721535045e-02 3.4445953626139747e-01 -1.2232826795076640e-01 + 1.2725256869879903e-01 6.4726328914536324e-01 -2.5569763246712096e-01 + 1.4271128417443896e-01 9.2638583569331667e-01 -4.0325591539297967e-01 + 1.4223037158683227e-01 1.1865637967840394e+00 -5.6533220569921272e-01 + 1.2376746940893213e-01 1.4221403881941059e+00 -7.3980557262833102e-01 + 8.6624425175471420e-02 1.6268052379125966e+00 -9.2145785235099897e-01 + 2.9092337469352247e-02 1.7951095922143558e+00 -1.1042048266194839e+00 + -4.9713461293089845e-02 1.9245983102069550e+00 -1.2829030002880148e+00 + -1.4721211769889697e-01 2.0163563648940972e+00 -1.4525940559515305e+00 + -2.5944777490629933e-01 2.0735973297020678e+00 -1.6093078771776674e+00 + -3.8396889964700109e-01 2.0990037785916691e+00 -1.7517036924949170e+00 + -5.1993629253986740e-01 2.0932372893355389e+00 -1.8804125602688366e+00 + -6.6695230433999431e-01 2.0564667090764450e+00 -1.9961122186090372e+00 + -8.2451283891917493e-01 1.9923418400497890e+00 -2.0987490298381060e+00 + -9.9431820393455328e-01 1.9152473461963555e+00 -2.1879660695239189e+00 + -1.1923162927848512e+00 1.8618638731320631e+00 -2.2664585088395932e+00 + -1.4706487224391827e+00 1.8507809168053586e+00 -2.3482774572157976e+00 + -1.7877834311929577e+00 1.7482685111361393e+00 -2.4508894796931329e+00 + -1.7444893506615669e+00 1.5059178630970456e+00 -2.5106336844970460e+00 + id 13487 + loc 1.7362892627716064e-01 9.1425549983978271e-01 403 + blend 0.0000000000000000e+00 + interp 3.9664124972386255e-01:3.1225488214830971e-01:5.0404467394319918e-02:3.9663728331136533e-01:8.5076350026190284e-01:3.1290097575936554e-01:1.3536064124972014e+00:3.5870257467728728e-01:2.0458013898647120e+00:3.0373703405643876e-01:2.9736308182280333e+00:2.7309088244467822e-01:3.5483658764429666e+00 + CVs 20 + 7.1703666128620155e-02 1.9255690618168225e-01 -9.3785271655335470e-02 + 1.1167110595870322e-01 3.5651217513245687e-01 -1.9789984539050107e-01 + 1.4247203829036728e-01 5.0036976536779099e-01 -3.0531569233768641e-01 + 1.7642219747969362e-01 6.3889337413853109e-01 -4.1664452473157937e-01 + 2.1087890490310979e-01 7.7272871298373591e-01 -5.3182312132589171e-01 + 2.4264817145426509e-01 9.0511053634399685e-01 -6.5071340919941800e-01 + 2.6768942457319655e-01 1.0416796651474094e+00 -7.7287107289829393e-01 + 2.8107751735994230e-01 1.1882360797822007e+00 -8.9694698993524435e-01 + 2.7701601275989174e-01 1.3501263811730460e+00 -1.0203803571806729e+00 + 2.4846294433416205e-01 1.5325369899816326e+00 -1.1389014370663817e+00 + 1.8569969545940523e-01 1.7409565750567761e+00 -1.2456376491046037e+00 + 7.4132945984996312e-02 1.9785550614647729e+00 -1.3296229326321025e+00 + -1.0186834544235368e-01 2.2348502020707661e+00 -1.3761131381853577e+00 + -3.4554362402029382e-01 2.4783655004059479e+00 -1.3750188730609589e+00 + -6.3691188876621774e-01 2.6711887815288184e+00 -1.3323053186445688e+00 + -9.3885554456809417e-01 2.7941463756702456e+00 -1.2694488787544422e+00 + -1.2209798353478725e+00 2.8550089648313524e+00 -1.2080891565130458e+00 + -1.4753673168396166e+00 2.8713434734276384e+00 -1.1576682093751376e+00 + -1.6003119916348316e+00 2.8775987103509948e+00 -1.1775596661357888e+00 + id 13488 + loc 9.1667371988296509e-01 9.2528951168060303e-01 1069 + blend 0.0000000000000000e+00 + interp 7.0205389698025922e-01:4.1428780897668427e-01:1.3832650853841666e-02:5.3549748717280810e-01:6.8769746893582195e-01:3.6175304289294835e-01:1.0379141813075927e+00:4.2981988328586690e-01:1.8073011857867547e+00:4.9739716701294162e-01:2.1889756357175183e+00:5.9270504651599398e-01:2.6109511208263516e+00:7.0204687644128949e-01:3.0196595798878016e+00:6.3713661130595478e-01:3.4262635220728788e+00 + CVs 20 + 1.5137545627916782e-01 3.4408182510757152e-01 -1.5692310463206904e-01 + 3.0973184415195931e-01 6.8372655491743484e-01 -3.1033375092096560e-01 + 4.9488387846570897e-01 9.9836507527022289e-01 -4.4297927758724992e-01 + 7.2012110369406079e-01 1.2705669729471958e+00 -5.4887066068946111e-01 + 9.9163694472146191e-01 1.4867347544134017e+00 -6.3035724272455351e-01 + 1.2969964376487904e+00 1.6378472305380285e+00 -7.0035320882577667e-01 + 1.6105079534621276e+00 1.7208201726706900e+00 -7.8046402968005268e-01 + 1.9149871934479119e+00 1.7352929139980395e+00 -8.8867239320879821e-01 + 2.2078201005694678e+00 1.6752936576288369e+00 -1.0288527329119694e+00 + 2.4886877798969196e+00 1.5240022320790456e+00 -1.1916781800741807e+00 + 2.7456340952703790e+00 1.2552298249976419e+00 -1.3570240326062515e+00 + 2.9462844744583125e+00 8.5260856932415630e-01 -1.4905790817336915e+00 + 3.0525340334333357e+00 3.2568708178065697e-01 -1.5464044586776795e+00 + 3.0586863247760134e+00 -3.1260483926149729e-01 -1.4532835314880221e+00 + 3.0305717237483281e+00 -1.0129710778039125e+00 -1.1104591947808564e+00 + 3.0865404212772161e+00 -1.6338571179265002e+00 -4.4573784815484907e-01 + 3.2977654722023702e+00 -1.9734102281306758e+00 4.5822278593877908e-01 + 3.5870230360919413e+00 -2.0096260030760225e+00 1.3194520647826566e+00 + 3.7666195877792465e+00 -2.0557441493594237e+00 1.8482382179037913e+00 + id 13489 + loc 8.8391286134719849e-01 8.0344986915588379e-01 400 + blend 0.0000000000000000e+00 + interp 3.3983567415577470e-01:3.2990418589103793e-01:3.6254265623846393e-01:3.3983227579903313e-01:1.0135193354224816e+00:2.4290031889610858e-01:1.9260855139716111e+00:2.7157347082302469e-01:2.8500138627475566e+00:2.7695106681833664e-01:3.4846877801483149e+00 + CVs 20 + -1.4917402499563234e-01 1.8324495652887529e-01 -2.0895854481805914e-01 + -3.1809859775643351e-01 3.6533642832886787e-01 -4.2473468621990618e-01 + -4.7970410673663361e-01 5.4739052559947154e-01 -6.6388224897907666e-01 + -6.2187774098557569e-01 7.2277859010107703e-01 -9.2509233631387855e-01 + -7.4813571434448500e-01 8.8662522436899405e-01 -1.2047598280139864e+00 + -8.5725109697737967e-01 1.0406613374573488e+00 -1.5033365801000467e+00 + -9.4110514446758431e-01 1.1906219380784426e+00 -1.8229487112633982e+00 + -9.9033898892186401e-01 1.3369537797869220e+00 -2.1659642597853814e+00 + -9.9884770869862982e-01 1.4729528302637411e+00 -2.5311399666354251e+00 + -9.6472553170836184e-01 1.5929021678047790e+00 -2.9120237659067802e+00 + -8.8928182543241940e-01 1.6968380365851246e+00 -3.3014501512459278e+00 + -7.7680497966086193e-01 1.7862802949271095e+00 -3.6997536565693121e+00 + -6.3296762164304043e-01 1.8576147841380772e+00 -4.1148216691422803e+00 + -4.5973419851689135e-01 1.9013457098217157e+00 -4.5526975840244948e+00 + -2.4932509376742545e-01 1.9051686798754655e+00 -5.0140807224931070e+00 + 1.9083901494018049e-02 1.8522902387988203e+00 -5.4937098530504436e+00 + 3.6284887787159376e-01 1.7248274181746099e+00 -5.9648351174392866e+00 + 7.6477202024556956e-01 1.5388917737466308e+00 -6.3647173572929017e+00 + 1.1125751595358027e+00 1.4437525594929745e+00 -6.5607742702337681e+00 + id 13490 + loc 9.0344512462615967e-01 8.1571710109710693e-01 380 + blend 0.0000000000000000e+00 + interp 4.5465591780730608e-01:4.0786025633161799e-01:1.5176501751180127e-02:4.5465137124812804e-01:8.8642767944575140e-01:3.1511531191854164e-01:1.2123042624142462e+00:4.3123096622896123e-01:2.0132502478212984e+00:2.4393915667126898e-01:3.0015370345651093e+00:2.8165160581020832e-01:3.3477309661621142e+00 + CVs 20 + -3.5254614259432521e-01 2.1544565876581540e-01 -6.6607839942106739e-01 + -6.5261281212032685e-01 3.6573336862026729e-01 -1.1342729685330273e+00 + -9.3724399541363523e-01 5.0266825876768162e-01 -1.5569602324756096e+00 + -1.2234759913447171e+00 6.5670197673056019e-01 -2.0107130531992334e+00 + -1.5115401133000876e+00 8.2508926345561173e-01 -2.5042967270115981e+00 + -1.8005629428553478e+00 9.9517296093938257e-01 -3.0462932208576321e+00 + -2.0907345386919975e+00 1.1414540605409584e+00 -3.6459812882997218e+00 + -2.3811789321712076e+00 1.2246052675596066e+00 -4.3131322718275698e+00 + -2.6621659209243802e+00 1.1989547244619589e+00 -5.0399304564761680e+00 + -2.9212888585712107e+00 1.0272393884567244e+00 -5.7942678695871583e+00 + -3.1497688241495521e+00 6.8848638600566714e-01 -6.5274971535290245e+00 + -3.3347575511815397e+00 1.7903206364392776e-01 -7.1845384987915821e+00 + -3.4563528260973464e+00 -4.7294220166625056e-01 -7.7085589244344392e+00 + -3.5082520123589811e+00 -1.1783879169602534e+00 -8.0676913206002396e+00 + -3.5146937593571344e+00 -1.8193181765163895e+00 -8.3017220297665482e+00 + -3.5114287403216689e+00 -2.3392159709463427e+00 -8.4866519729400416e+00 + -3.5308141789551462e+00 -2.7465413125554563e+00 -8.6624330964992904e+00 + -3.5946862530272750e+00 -3.0775138125005546e+00 -8.8322637734634615e+00 + -3.6191316252028409e+00 -3.4062196368918123e+00 -9.0002834464969244e+00 + id 13491 + loc 7.4683725833892822e-01 9.8942196369171143e-01 409 + blend 0.0000000000000000e+00 + interp 4.5868119037008809e-01:2.8568644710755536e-01:1.2896748945090974e-01:2.6410986157544619e-01:9.8928927983318105e-01:4.5867660355818440e-01:1.2629826701894951e+00:2.3223684031040109e-01:2.2483731801715603e+00:3.1580042128350228e-01:3.3194757320794710e+00 + CVs 20 + 4.6859762398001198e-01 2.1562529581337997e-01 -1.0609632970130389e-01 + 8.3729473303841961e-01 3.6494318225727768e-01 -1.9525360445913220e-01 + 1.1799190606499690e+00 4.8685912199827169e-01 -2.7382373312336533e-01 + 1.5411270576973624e+00 6.0592096029992648e-01 -3.4551321859639533e-01 + 1.9234261820902692e+00 7.1965271901503347e-01 -4.1399351162050002e-01 + 2.3296874270855747e+00 8.2517621004757113e-01 -4.8437388610660320e-01 + 2.7646317722473994e+00 9.1989622676095106e-01 -5.6318154360276418e-01 + 3.2357925696675180e+00 9.9640346554483306e-01 -6.5568784350846177e-01 + 3.7505919842979578e+00 1.0369608198682405e+00 -7.6375288059303015e-01 + 4.3075680431952561e+00 1.0155920037870094e+00 -8.9033263704333521e-01 + 4.8869309415420030e+00 9.0503085704638520e-01 -1.0438838551522722e+00 + 5.4525950128293044e+00 6.8822910156001238e-01 -1.2313476765668654e+00 + 5.9706061809279474e+00 3.6875240056559644e-01 -1.4497295727371156e+00 + 6.4213269227497491e+00 -3.4827791251953677e-02 -1.6909925720898991e+00 + 6.7938363542382394e+00 -4.9955180806580213e-01 -1.9479628623013552e+00 + 7.0825155471636254e+00 -1.0070197181089662e+00 -2.2109367953410213e+00 + 7.2860064391725530e+00 -1.5442868380749126e+00 -2.4645596275933777e+00 + 7.4078243579665450e+00 -2.0813446607771402e+00 -2.6970224313441311e+00 + 7.5197212867249625e+00 -2.4447524834443599e+00 -2.9024188782709190e+00 + id 13492 + loc 5.8530014753341675e-01 1.7900037765502930e-01 378 + blend 0.0000000000000000e+00 + interp 5.3357605157219523e-01:5.2960287737815248e-01:5.0776178076191503e-02:3.0385528009262347e-01:7.3911529499195305e-01:5.3357071581167959e-01:1.4262455885251415e+00:3.8640286104367150e-01:2.1515342956616572e+00:3.3033755867695486e-01:2.9510579195779880e+00:4.7760588165639606e-01:3.8272281476548118e+00 + CVs 20 + -3.4300943904133424e-01 3.8800437738928933e-01 -2.0824283600237237e-01 + -6.9019876524835699e-01 7.3613489019735268e-01 -3.7837585344209518e-01 + -1.0401306047277221e+00 1.0499727972238162e+00 -5.2468251401664046e-01 + -1.3806262721740785e+00 1.3405612858202784e+00 -6.6370030996687035e-01 + -1.7011423430165160e+00 1.6091798093923311e+00 -8.1256212745776846e-01 + -2.0045245858080989e+00 1.8502053313411468e+00 -9.8536904988510798e-01 + -2.2948578726136311e+00 2.0580019808352237e+00 -1.1891528163760239e+00 + -2.5715959157636301e+00 2.2313022928060846e+00 -1.4241645332012722e+00 + -2.8363651336483757e+00 2.3726758091152629e+00 -1.6878094469120382e+00 + -3.0980574636879994e+00 2.4832491682528510e+00 -1.9811587773972366e+00 + -3.3691917205321120e+00 2.5553392605176319e+00 -2.3085677333394079e+00 + -3.6615556337173993e+00 2.5678720727377966e+00 -2.6735321750590781e+00 + -3.9745206096491317e+00 2.4923202699911795e+00 -3.0658685009361246e+00 + -4.2804749687817880e+00 2.3341629141969316e+00 -3.4443034181000947e+00 + -4.5499079538740439e+00 2.1566656068103196e+00 -3.7667201167427282e+00 + -4.7798334480442275e+00 2.0103722493005489e+00 -4.0287336539842178e+00 + -4.9864444173503220e+00 1.8946603406009284e+00 -4.2544162796862377e+00 + -5.2084137773141137e+00 1.7971146367125552e+00 -4.4577758460985528e+00 + -5.5485728827438425e+00 1.7078451664266150e+00 -4.6266654055381027e+00 + id 13493 + loc 6.9467449188232422e-01 9.9349611997604370e-01 374 + blend 0.0000000000000000e+00 + interp 4.1222140547221370e-01:3.7484164362400929e-01:4.0035877148874910e-01:2.3953422885242232e-01:1.1391629703337907e+00:2.2009335343285186e-01:1.9754337489662619e+00:4.1221728325815898e-01:2.9316519627470772e+00:3.2943008621527703e-01:3.3959188651744654e+00 + CVs 20 + -6.0896241140380447e-01 3.6126061111029145e-01 -2.6246108026722181e-01 + -1.1241443049200672e+00 6.2498808547563778e-01 -4.5864500355862997e-01 + -1.6491782881931036e+00 8.3681912506427847e-01 -6.3343277943091181e-01 + -2.2206557788958956e+00 1.0249829816042642e+00 -8.1823579578085381e-01 + -2.8254092917288416e+00 1.1873509460303744e+00 -1.0341513149869446e+00 + -3.4515693131203329e+00 1.2978905241263032e+00 -1.2996164045946945e+00 + -4.0848429746061132e+00 1.3163966621658825e+00 -1.6210212628729663e+00 + -4.6993242732472904e+00 1.2115965245535736e+00 -1.9876197961096633e+00 + -5.2659646996777774e+00 9.7085038557696368e-01 -2.3686858603731484e+00 + -5.7638775719327100e+00 5.9925038882988613e-01 -2.7134255990672744e+00 + -6.1715672451838142e+00 1.2052258426013918e-01 -2.9645766840938679e+00 + -6.4637299688008394e+00 -4.1776060963326156e-01 -3.0847238532724077e+00 + -6.6521705295393634e+00 -9.4824288100494103e-01 -3.0856396420987400e+00 + -6.8255678266554263e+00 -1.4275994273303523e+00 -3.0403653791196361e+00 + -7.0723981975365735e+00 -1.8624491083364156e+00 -3.0247275295163867e+00 + -7.4170780329543611e+00 -2.2381455491094404e+00 -3.0356361171108190e+00 + -7.8202953838821809e+00 -2.5010072917812241e+00 -3.0071362452982622e+00 + -8.2000422399907826e+00 -2.6463027015128162e+00 -2.9234016708115020e+00 + -8.5304303721870909e+00 -2.8403801583021728e+00 -2.8985127978712333e+00 + id 13494 + loc 9.5861285924911499e-01 7.8400325775146484e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5906455428048898e-01:3.1078207481671094e-01:7.8483679809223106e-02:3.1173755383189283e-01:1.0100977635178854e+00:3.8806612059033108e-01:1.7480428592518940e+00:2.8188852968509948e-01:2.1515143882280161e+00:2.8274392902158380e-01:3.0093399901886837e+00:4.5905996363494622e-01:3.8290242299480362e+00 + CVs 20 + 7.7881564156656018e-03 2.6347551415394077e-01 8.8278422049828845e-02 + 2.8497845826122761e-02 4.7934888777589502e-01 1.0793938764956482e-01 + 3.4376465981702999e-02 6.8404276059746350e-01 1.1061683377058990e-01 + 1.3564839256293579e-02 8.8469895072430371e-01 1.1236856377558407e-01 + -3.5088002671166879e-02 1.0754262393720353e+00 1.0776082985256330e-01 + -1.1398846883468916e-01 1.2470618429163389e+00 9.1229463434023605e-02 + -2.2448634064017844e-01 1.3871886103992450e+00 5.9448394225085299e-02 + -3.6420554676325162e-01 1.4829730299289847e+00 1.4753748287631874e-02 + -5.2546276895212873e-01 1.5240873070163508e+00 -3.6119376930138558e-02 + -6.9513687202569274e-01 1.5028580037957595e+00 -8.6638680675745650e-02 + -8.5520268245917563e-01 1.4144523930957007e+00 -1.3129795387480980e-01 + -9.8799250704305475e-01 1.2650865317758677e+00 -1.6503008473493785e-01 + -1.0881058089020070e+00 1.0735822575296483e+00 -1.8430696631447840e-01 + -1.1686886833307251e+00 8.6137896394197055e-01 -1.9005408566736770e-01 + -1.2553959016923659e+00 6.4169765969548931e-01 -1.8892858154084899e-01 + -1.3610802592021247e+00 4.1331523997672814e-01 -1.8640386624501526e-01 + -1.4790944020547401e+00 1.7275181755956567e-01 -1.8968837758431598e-01 + -1.6074610120882269e+00 -7.4451992276692122e-02 -2.2438404383458627e-01 + -1.7996379636288413e+00 -2.9751396973455069e-01 -2.9727121516741373e-01 + id 13495 + loc 4.7979152202606201e-01 7.2748190164566040e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0527504571810025e-01:2.8546719409869925e-01:5.5023809187367823e-03:2.8072270034634578e-01:1.0001354045563884e+00:4.0527099296764307e-01:1.8886076577683286e+00:2.7330394274476605e-01:2.7458288698535824e+00:2.7699969308559097e-01:3.2790723419572223e+00 + CVs 20 + 1.1620312362741211e-01 3.3054670589732060e-01 -2.0182021457001614e-01 + 2.4819968910657364e-01 6.5651698805674896e-01 -4.0700308850445061e-01 + 3.9353674460386012e-01 9.7347607463140118e-01 -6.0224309366483075e-01 + 5.4924605933986492e-01 1.2788426062780898e+00 -7.8397040509503668e-01 + 7.1202927460957532e-01 1.5714999160751340e+00 -9.5453305571847935e-01 + 8.7940722495451285e-01 1.8480770565031210e+00 -1.1177587324296852e+00 + 1.0523778035248423e+00 2.1030180909871143e+00 -1.2820860289673983e+00 + 1.2352766440406977e+00 2.3295883957498340e+00 -1.4570211306196936e+00 + 1.4378128402931567e+00 2.5195866626448487e+00 -1.6502187299806257e+00 + 1.6724067466614883e+00 2.6596575870584003e+00 -1.8647975873900173e+00 + 1.9408523696772073e+00 2.7341411529879620e+00 -2.0933759290813265e+00 + 2.2315021729449160e+00 2.7365940913793168e+00 -2.3213503913056379e+00 + 2.5440997329340873e+00 2.6760612899559879e+00 -2.5457868920804909e+00 + 2.9050415565753482e+00 2.5582660246105324e+00 -2.7876058875295824e+00 + 3.3197464641570660e+00 2.3630741676795477e+00 -3.0767421939650363e+00 + 3.7286273929835687e+00 2.0621912060752488e+00 -3.4287426534901813e+00 + 4.0408094342788834e+00 1.6758463359711155e+00 -3.8503257843963317e+00 + 4.1692921301174994e+00 1.3208582547130190e+00 -4.3134440000206835e+00 + 4.0557188004868445e+00 1.1997701793621409e+00 -4.6423932382778501e+00 + id 13496 + loc 3.4760484099388123e-01 3.4320205450057983e-02 402 + blend 0.0000000000000000e+00 + interp 5.2997751435473406e-01:3.2802404744867281e-01:6.1751818236172817e-01:4.6222303128143172e-01:1.0698118750976451e+00:5.2997221457959054e-01:1.6461763457733047e+00:4.6289032983892142e-01:1.9999363526820240e+00:2.5829207990032182e-01:2.9668739921391705e+00:4.2696831508771277e-01:3.5083123370998783e+00:4.4315017889899810e-01:3.9875940498843714e+00 + CVs 20 + -1.4854982817348528e-01 3.6842354591202020e-01 2.8002949123699777e-01 + -2.9431597102002371e-01 7.1880727587846072e-01 5.1012910684601187e-01 + -4.6680363438090683e-01 1.0576177313498603e+00 7.0746025110570621e-01 + -6.7690092703827665e-01 1.3850514040328561e+00 8.8545376104096485e-01 + -9.2475900837401637e-01 1.6972478565269951e+00 1.0550096465263610e+00 + -1.2128205183562679e+00 1.9906570673407971e+00 1.2225264320748122e+00 + -1.5481097588981481e+00 2.2619107368438116e+00 1.3861344009385423e+00 + -1.9387142242161595e+00 2.5030693655433383e+00 1.5438402925763557e+00 + -2.3886706453097122e+00 2.6985926249411301e+00 1.6993333520333436e+00 + -2.8934816781697239e+00 2.8281588372895921e+00 1.8510380196878835e+00 + -3.4419770643090146e+00 2.8701361734654980e+00 1.9867545665785240e+00 + -4.0169720453528832e+00 2.7989181472084583e+00 2.1024641986918260e+00 + -4.5818796780168878e+00 2.5894201187773001e+00 2.2137419189987502e+00 + -5.0862444208088826e+00 2.2433092644135746e+00 2.3504450067451303e+00 + -5.4878956827869168e+00 1.8065597311186208e+00 2.5550300724579826e+00 + -5.7679012579122366e+00 1.3692672399002672e+00 2.8674343255265331e+00 + -5.9375965788713359e+00 1.0417388021141947e+00 3.2927190635970534e+00 + -6.0233561884755398e+00 8.6529390571686404e-01 3.7788890581539816e+00 + -6.0692356956606401e+00 7.0128399091157290e-01 4.2263728260093378e+00 + id 13497 + loc 7.6558077335357666e-01 7.6205886900424957e-02 395 + blend 0.0000000000000000e+00 + interp 4.8048171025194469e-01:3.7696344608632359e-01:4.7931555591566299e-01:2.5685655645205796e-01:9.9759112391432969e-01:2.2479761213898219e-01:1.9953610446759444e+00:3.3988950360675302e-01:2.3729667841572626e+00:4.8047690543484217e-01:3.0755552644408226e+00:3.4172085515531825e-01:3.6749211178041992e+00 + CVs 20 + -3.2392487748910487e-01 2.7004360974485786e-01 3.7823937718907752e-01 + -6.0708412530608857e-01 4.9553934855813775e-01 6.7829701124966368e-01 + -8.8873234532365775e-01 7.0808041870598615e-01 9.4757218509563312e-01 + -1.1863715974030127e+00 9.2355467710195560e-01 1.2060390539877972e+00 + -1.4986282945323097e+00 1.1373989101291166e+00 1.4539514673545866e+00 + -1.8246899855847096e+00 1.3447986966012437e+00 1.6967863369906167e+00 + -2.1643223811762007e+00 1.5422275740134088e+00 1.9461077639702524e+00 + -2.5206885701531325e+00 1.7235817550616896e+00 2.2151488417122023e+00 + -2.9025451690675252e+00 1.8750562350178570e+00 2.5128144987453158e+00 + -3.3176891854721813e+00 1.9776119530061209e+00 2.8402888581152692e+00 + -3.7605783221309155e+00 2.0152374026673980e+00 3.1929902362013061e+00 + -4.2058310300850161e+00 1.9749925092832219e+00 3.5648145385088115e+00 + -4.6293345966640125e+00 1.8535079448293024e+00 3.9442196788950383e+00 + -5.0211228604535716e+00 1.6529371360166363e+00 4.3178437410134780e+00 + -5.3752690760224242e+00 1.3774455958329503e+00 4.6792681602765311e+00 + -5.6840996341300070e+00 1.0287059187477299e+00 5.0371625749581392e+00 + -5.9324511308767285e+00 6.0471089113206977e-01 5.3973394730818631e+00 + -6.0859587107471960e+00 1.3171347767074160e-01 5.7233728038397533e+00 + -6.0575544613375829e+00 -2.0427669645837110e-01 5.8706658366112316e+00 + id 13498 + loc 2.6373505592346191e-01 3.6523026227951050e-01 373 + blend 0.0000000000000000e+00 + interp 3.8137280452476091e-01:3.1852474254661078e-01:5.2706009032881407e-01:3.3016134506875028e-01:1.0557426899010185e+00:3.7146064705058196e-01:1.8226261230222054e+00:3.1955905400613721e-01:2.4862668444477403e+00:3.8136899079671566e-01:3.0486824642783272e+00:3.1544845425547691e-01:3.8928413171320022e+00 + CVs 20 + -5.1059021446204098e-02 9.2049964651401295e-01 2.7293187665459373e-01 + -1.8902520209048115e-01 1.8202331239611254e+00 4.6924957674385104e-01 + -4.4948128529788489e-01 2.6462677570602944e+00 5.0196218685061400e-01 + -8.3050850445503333e-01 3.3061849143890076e+00 3.1348486307866685e-01 + -1.2719952372805918e+00 3.7064031274338411e+00 -6.6973111070026459e-02 + -1.6696569260119074e+00 3.8111778787901480e+00 -5.1006062147694542e-01 + -1.9722629906127682e+00 3.6966190302242614e+00 -9.3069054475618462e-01 + -2.1788759445394854e+00 3.4512851783470313e+00 -1.3409319461936180e+00 + -2.2878010369282147e+00 3.1208419613521157e+00 -1.7820713245023045e+00 + -2.2892494741946456e+00 2.6827715857288705e+00 -2.2863267782886001e+00 + -2.1593480868860393e+00 2.0945218371716350e+00 -2.8273388320822428e+00 + -1.8682476002441533e+00 1.3292203383456513e+00 -3.3146816240858490e+00 + -1.4242033393043076e+00 4.7259482212843706e-01 -3.7341212220475266e+00 + -9.1513166577629823e-01 -3.5948329162678894e-01 -4.1859256219647563e+00 + -5.4774696628261399e-01 -1.0642019900929067e+00 -4.7701327044246176e+00 + -6.0353688840717434e-01 -1.4941665144756007e+00 -5.5393274980425273e+00 + -1.2657618466728091e+00 -1.6811813132688096e+00 -6.3195126580910523e+00 + -2.4493855973837890e+00 -1.8074613830811255e+00 -6.6634895056163241e+00 + -3.7916026090245918e+00 -2.0480697838970960e+00 -6.9058027766211314e+00 + id 13499 + loc 5.8998590707778931e-01 2.8073161840438843e-01 415 + blend 0.0000000000000000e+00 + interp 5.1177720181618391e-01:4.1007236814507325e-01:3.2499001055525722e-02:2.6718391856813273e-01:8.6729400285425051e-01:3.1664483920626157e-01:1.8014484439249920e+00:3.7962182076404655e-01:2.4346131015672698e+00:5.1177208404416574e-01:2.9967160257239769e+00:4.5913862251148890e-01:3.2977942401617324e+00:4.9078722075461073e-01:3.8030039150273502e+00 + CVs 20 + -2.1949600064717475e-01 2.8680016675798570e-01 -1.5972661490549900e-01 + -4.0993392511461146e-01 5.2496665292293243e-01 -2.8518171274608412e-01 + -5.7817533464276005e-01 7.3139317632710732e-01 -4.3094721460684937e-01 + -7.4671570334749315e-01 9.2038219107329122e-01 -6.0913156219129105e-01 + -9.1143373080847556e-01 1.0839646815956547e+00 -8.1865189312934128e-01 + -1.0633268186943727e+00 1.2146487617338999e+00 -1.0561849195278947e+00 + -1.1969241859026889e+00 1.3094872568798215e+00 -1.3148474077099783e+00 + -1.3120075139375693e+00 1.3691561220289079e+00 -1.5857599708392498e+00 + -1.4069556277352007e+00 1.3947306532698991e+00 -1.8592218366647604e+00 + -1.4816562942255245e+00 1.3884176392905025e+00 -2.1260990331078329e+00 + -1.5604970537609546e+00 1.3537675394346662e+00 -2.3890249201084508e+00 + -1.7036790123381469e+00 1.2881392219538133e+00 -2.6696684769823200e+00 + -1.9645600889061474e+00 1.1771849868975612e+00 -2.9670059408321547e+00 + -2.3186957292083186e+00 1.0127308339787848e+00 -3.2195030597700303e+00 + -2.6860402085099371e+00 8.0877238833108689e-01 -3.3785801203295720e+00 + -3.0324425566013389e+00 5.8068620426867534e-01 -3.4470014433182739e+00 + -3.3600467458908865e+00 3.3766139586495791e-01 -3.4346537918616700e+00 + -3.6575054365867308e+00 9.3530423401330332e-02 -3.3506730785772421e+00 + -3.7635322832419922e+00 -6.9621443087238166e-02 -3.2918948942208277e+00 + id 13500 + loc 8.9446443319320679e-01 7.6707571744918823e-01 393 + blend 0.0000000000000000e+00 + interp 4.6613882509611454e-01:4.6613416370786359e-01:3.3097340708149703e-01:3.2325247413966152e-01:9.5301326925600749e-01:2.8138551736379624e-01:1.5429044176446902e+00:4.4513966868456656e-01:1.9978186190139744e+00:2.7920447474720667e-01:2.8806017563203148e+00:4.4048658306676147e-01:3.8927900672319389e+00 + CVs 20 + -1.4758340888768415e-01 1.7954155219042295e-01 -9.3165033542515374e-02 + -3.0243818020879654e-01 3.9263446710220262e-01 -2.1105765821410355e-01 + -4.5395794573410864e-01 6.3579038370710206e-01 -3.2851833409592079e-01 + -5.9847289003340387e-01 9.0468733308749849e-01 -4.3018990980033778e-01 + -7.3976065527416479e-01 1.1961696165139408e+00 -5.1649584349238975e-01 + -8.8261289069578552e-01 1.5025577431964485e+00 -5.9652896773289266e-01 + -1.0320226304190783e+00 1.8133352022343334e+00 -6.8711635387461456e-01 + -1.1940285055097499e+00 2.1171476755377743e+00 -8.0262049818643988e-01 + -1.3757702986135301e+00 2.4027184461264097e+00 -9.5011337494245129e-01 + -1.5806368214409445e+00 2.6506120097655197e+00 -1.1460810849060108e+00 + -1.7970234996835215e+00 2.8159630414597165e+00 -1.4261680435455197e+00 + -1.9905934460421237e+00 2.8300475782840047e+00 -1.7996333655470558e+00 + -2.1279297412597393e+00 2.6576239656622125e+00 -2.2017634594788409e+00 + -2.2068319774479317e+00 2.3475218824216268e+00 -2.5557492197792899e+00 + -2.2561834720244072e+00 1.9891310576495220e+00 -2.8518902531623680e+00 + -2.3269391600436706e+00 1.6377810710570326e+00 -3.1164077401500094e+00 + -2.5020625003466295e+00 1.3392961361161198e+00 -3.3510593159162370e+00 + -2.8493908142655400e+00 1.1749341800121940e+00 -3.5212387074123432e+00 + -3.0333429152244276e+00 9.7090995262069502e-01 -3.7504055222732502e+00 + id 13501 + loc 1.7574945092201233e-01 5.3852999210357666e-01 399 + blend 0.0000000000000000e+00 + interp 3.8526100245901551e-01:3.4355847519701599e-01:2.0678448521468484e-01:2.6564130758952492e-01:9.8410064782454554e-01:2.6572198300757649e-01:1.9456749333859200e+00:2.7551244392613489e-01:2.7219376508578819e+00:3.8525714984899095e-01:3.1838921896171590e+00 + CVs 20 + -2.6684530761054304e-01 3.1062312203585701e-01 -2.2831655333157291e-01 + -5.4099640603707266e-01 6.2203454630172983e-01 -4.5393578623231734e-01 + -8.3603842090944125e-01 9.2667572597830894e-01 -7.0724376128962885e-01 + -1.1593315908164838e+00 1.2133860676633947e+00 -9.9480842827567018e-01 + -1.5129956323666180e+00 1.4677356079755688e+00 -1.2992782069098312e+00 + -1.8964174732838703e+00 1.6670157235389316e+00 -1.5854469611561144e+00 + -2.2973459601367057e+00 1.7812492613219690e+00 -1.8079621674569195e+00 + -2.6670525029860337e+00 1.7769965161294625e+00 -1.9275329771347540e+00 + -2.9560904270959778e+00 1.6521526152896271e+00 -1.9446098013755071e+00 + -3.1875616250769037e+00 1.4198805708918565e+00 -1.9029762431939448e+00 + -3.4064972991689948e+00 1.0582544456514931e+00 -1.8430237880875053e+00 + -3.6510866583400490e+00 5.2664288135771242e-01 -1.8139662343464789e+00 + -3.9724040436225319e+00 -1.7782261285782602e-01 -1.8980497331917650e+00 + -4.4687774765394748e+00 -9.5395735906666634e-01 -2.1777233988907390e+00 + -5.2608205144099536e+00 -1.5747866530715109e+00 -2.6754871995277520e+00 + -6.3505235384548850e+00 -1.7070826931043213e+00 -3.3276240796443086e+00 + -7.4611102080512026e+00 -9.9903672491717843e-01 -3.9559994905508362e+00 + -8.0228638564075982e+00 2.1881682644049161e-01 -4.3104215620872033e+00 + -8.3448792848181643e+00 7.4086562229761543e-01 -4.6074291098542952e+00 + id 13502 + loc 8.6200898885726929e-01 4.0754392743110657e-01 412 + blend 0.0000000000000000e+00 + interp 4.9861309267591575e-01:4.9860810654498899e-01:4.2711669920085793e-03:3.1599843776230413e-01:4.3746197071828730e-01:3.4404299614877620e-01:1.0087349448531568e+00:3.2847929273326759e-01:1.9860842793949409e+00:4.2417533136264457e-01:2.5601628857123169e+00:4.0300708160205939e-01:3.0051653889905574e+00:4.4237859024185089e-01:3.4850683959141118e+00 + CVs 20 + -6.1946244247143389e-01 1.4391673957021128e-01 2.3561530674329217e-01 + -1.0213770823602892e+00 2.1109744325808644e-01 4.2526101587043869e-01 + -1.3563877579257664e+00 2.5034909873830441e-01 6.0585262704511389e-01 + -1.6854940162133434e+00 2.8181895159681408e-01 7.9012262170640535e-01 + -2.0071058173640481e+00 2.9954646834196419e-01 9.7326600731543178e-01 + -2.3207010713461562e+00 2.9699655402649972e-01 1.1501850987667113e+00 + -2.6266741189644764e+00 2.6914350898954331e-01 1.3152629725015348e+00 + -2.9252808799622700e+00 2.1320004366374912e-01 1.4628577475423510e+00 + -3.2148108648677134e+00 1.2792654982415663e-01 1.5885235967029105e+00 + -3.4916746450973730e+00 1.5016698344851420e-02 1.6881516243898345e+00 + -3.7541534685015532e+00 -1.1389791470465238e-01 1.7518093255237845e+00 + -4.0054894300180717e+00 -2.4036296552393521e-01 1.7623988904292842e+00 + -4.2521022197271607e+00 -3.7163935252290803e-01 1.7203491941358200e+00 + -4.4940210847682778e+00 -5.4808359419454122e-01 1.6547883155506951e+00 + -4.7219035564741612e+00 -7.9582745913240394e-01 1.5876480898815180e+00 + -4.9265915872205897e+00 -1.1134688781439455e+00 1.5236100305145150e+00 + -5.0979398126094395e+00 -1.4901900297044655e+00 1.4742075868043485e+00 + -5.2193072320375995e+00 -1.9058456045813104e+00 1.4622042933279924e+00 + -5.2568183496994028e+00 -2.3476068151640535e+00 1.5256651291003691e+00 + id 13503 + loc 7.4777489900588989e-01 4.6314537525177002e-01 382 + blend 0.0000000000000000e+00 + interp 4.3786559361715316e-01:3.4741503208311320e-01:2.0585875482218641e-01:3.7134960464106975e-01:1.0022694356811901e+00:3.7004554564946818e-01:1.7797646511919929e+00:4.3786121496121699e-01:2.4751685406673003e+00:4.0281132954633175e-01:2.9968868117673542e+00:3.7995909314571613e-01:3.5064953818496205e+00 + CVs 20 + -8.9729392263033936e-01 9.9640823304036091e-02 5.1429218413810263e-01 + -1.4981353821283556e+00 7.8954562358367619e-02 8.8745576835969708e-01 + -2.0459125402019707e+00 1.8724368296630378e-02 1.2334117960553841e+00 + -2.6403406771810958e+00 -3.2115598875892215e-02 1.5902371445394321e+00 + -3.2763212879009744e+00 -6.5969024101764417e-02 1.9515180060469015e+00 + -3.9498005321242333e+00 -8.8946112596854476e-02 2.3167913069984372e+00 + -4.6528837681009385e+00 -1.3048092131965006e-01 2.6881595139149601e+00 + -5.3693175809729832e+00 -2.3779582652468512e-01 3.0601964028918891e+00 + -6.0683664452066663e+00 -4.5591401914622054e-01 3.4184511714901862e+00 + -6.7020623763574614e+00 -8.0789717364914360e-01 3.7467035434119191e+00 + -7.2138513223886171e+00 -1.2876080567765931e+00 4.0285819106676266e+00 + -7.5561655985103737e+00 -1.8602101199802432e+00 4.2461958381911344e+00 + -7.7103695091076787e+00 -2.4642193242044845e+00 4.3891596070766523e+00 + -7.7045719449976291e+00 -3.0354146149202603e+00 4.4655675242657322e+00 + -7.5975401065631409e+00 -3.5568864410637566e+00 4.4942564786994410e+00 + -7.4412785099695515e+00 -4.0572718807278587e+00 4.4945171923392442e+00 + -7.2743817140216951e+00 -4.5586688251333323e+00 4.4895998648058342e+00 + -7.1132863664606845e+00 -5.0543012451148526e+00 4.4998127831627244e+00 + -6.9404055100856876e+00 -5.5137400955557565e+00 4.5287290244890830e+00 + id 13504 + loc 1.3378058373928070e-01 6.9760143756866455e-02 407 + blend 0.0000000000000000e+00 + interp 4.7368584689662624e-01:4.0794319648623190e-01:1.5292202892328144e-01:2.5114420943651844e-01:9.1147260556757659e-01:4.0294493016102062e-01:1.1440240500231722e+00:4.3454328238851042e-01:1.6957273346408721e+00:4.2385844346559109e-01:2.0065553233004891e+00:3.6974970277464453e-01:2.8389364298629634e+00:4.7368111003815727e-01:3.3524241285539524e+00:4.1933289530993390e-01:3.8922372494404565e+00 + CVs 20 + 3.4325966954052767e-02 3.2393519789789638e-01 -3.1150857526917536e-01 + 6.1784687827802658e-02 5.2254278151943123e-01 -4.3179593665621568e-01 + 9.6961547301146880e-02 6.7695369290985297e-01 -4.8272061606784583e-01 + 1.4736096546611779e-01 8.2347828432436809e-01 -5.3846615612937532e-01 + 2.1443136495452103e-01 9.6076734005235265e-01 -5.9659116067344886e-01 + 3.0138352930500889e-01 1.0877110757991455e+00 -6.5557115606860439e-01 + 4.1321188107801432e-01 1.2021587084169050e+00 -7.1449739955312264e-01 + 5.5499491284982450e-01 1.3004297116828230e+00 -7.7242044041705882e-01 + 7.2961686604120612e-01 1.3784100299431246e+00 -8.2882333826687837e-01 + 9.3741273510340040e-01 1.4332451159799438e+00 -8.8427132595444857e-01 + 1.1770290266075731e+00 1.4638137130347524e+00 -9.4045732542956806e-01 + 1.4457649289917214e+00 1.4695199969824855e+00 -9.9919549373337868e-01 + 1.7383021799920357e+00 1.4487774167268519e+00 -1.0613858593768000e+00 + 2.0434513764031186e+00 1.4013624677337062e+00 -1.1277856446616468e+00 + 2.3456993176208583e+00 1.3341255872785840e+00 -1.2000619625122519e+00 + 2.6327357469746944e+00 1.2606897163443036e+00 -1.2831453909806152e+00 + 2.8980854366720759e+00 1.1930746202777205e+00 -1.3827555634690272e+00 + 3.1354700433512024e+00 1.1375901176218726e+00 -1.5003211140709998e+00 + 3.3551482849566807e+00 1.0923433020883073e+00 -1.6444868589115345e+00 + id 13505 + loc 1.7121697962284088e-01 9.2993885278701782e-01 375 + blend 0.0000000000000000e+00 + interp 5.1455906462598489e-01:3.1178065832701179e-01:6.3251525599524516e-02:3.4411067905371107e-01:9.5813040796895510e-01:4.6504426822347356e-01:1.4499609245194574e+00:2.8042653104258519e-01:2.0780772896984301e+00:4.9206645667254162e-01:3.0024183683492396e+00:5.1455391903533865e-01:3.2670133015664611e+00:4.2602898404944295e-01:3.8011916583037966e+00 + CVs 20 + -3.4947436882560479e-01 4.0363377917293619e-01 -5.0710526841154180e-02 + -7.2028852315210534e-01 7.0424079318394528e-01 -5.4410423888916509e-02 + -1.1472153050073834e+00 8.7353724486550033e-01 -7.7412135107703395e-03 + -1.6169587021123122e+00 9.6270393458408066e-01 9.0854815622927076e-02 + -2.0956065726516324e+00 1.0585709619084511e+00 2.2963895085598274e-01 + -2.5754092464302971e+00 1.2185174512474635e+00 3.7299973999598823e-01 + -3.0568371297730854e+00 1.4641777965899023e+00 4.7070596810587106e-01 + -3.5223949657762814e+00 1.7976380655965465e+00 4.8399842025052486e-01 + -3.9475161766929805e+00 2.2146174334872182e+00 3.9307137854681551e-01 + -4.3188569817913534e+00 2.7000894370512674e+00 1.8011100940833535e-01 + -4.6415841232045274e+00 3.2174265580691164e+00 -1.8380960183010231e-01 + -4.9184596456076051e+00 3.7005380881016858e+00 -7.4547149445891603e-01 + -5.1198263574208793e+00 4.0317075694896278e+00 -1.5190007845860578e+00 + -5.1940878394139869e+00 4.0899185329756280e+00 -2.4192894609987117e+00 + -5.1099458873277035e+00 3.8323937943107778e+00 -3.2863336472648479e+00 + -4.9344084806273267e+00 3.3270029561952104e+00 -3.9263176258995776e+00 + -4.8278960653713652e+00 2.7269709433985461e+00 -4.2502796284126374e+00 + -4.8494278211439052e+00 2.1695809229574028e+00 -4.3097362735040523e+00 + -4.8947537695712278e+00 1.6446234758382703e+00 -4.2289629940076310e+00 + id 13506 + loc 7.7680164575576782e-01 3.1513684988021851e-01 403 + blend 0.0000000000000000e+00 + interp 4.6875980312727239e-01:3.2598561080611244e-01:4.2416236085867121e-01:2.8935536898311059e-01:1.0319988218848890e+00:2.9350156202950001e-01:1.9147071134731266e+00:4.6875511552924115e-01:2.3210345859593962e+00:4.2171925169904961e-01:2.9727081732268190e+00:2.8813989932007306e-01:3.6779266886969300e+00 + CVs 20 + -9.1502277822487297e-03 3.2862559446464171e-02 4.2504963837031784e-02 + -2.6706670506594025e-02 7.2385210671299480e-02 1.0842685171620570e-01 + -5.0817720760972400e-02 1.1906704680882234e-01 1.9527635591679743e-01 + -7.7138483973963848e-02 1.6769229113030371e-01 2.9210610507310741e-01 + -1.0571112045264440e-01 2.1791304855841137e-01 3.9751971984596790e-01 + -1.3543963980813661e-01 2.6881937283748014e-01 5.1049949047383525e-01 + -1.6434964936031521e-01 3.1978017750486809e-01 6.3052664811521730e-01 + -1.8924956545791116e-01 3.7221379775545987e-01 7.5836802272102921e-01 + -2.0430415861540577e-01 4.2973172986648744e-01 8.9607824003081504e-01 + -2.0124620245829392e-01 4.9526544839931053e-01 1.0451101518646781e+00 + -1.7287017568625218e-01 5.6899211084831713e-01 1.2041701338951705e+00 + -1.1680809474638498e-01 6.4944503384428653e-01 1.3688312334975237e+00 + -3.4907300737823277e-02 7.3636719148701235e-01 1.5334336077003743e+00 + 7.0578080072789096e-02 8.3167831289887517e-01 1.6926024662673675e+00 + 1.9907426063627631e-01 9.3815002049333573e-01 1.8409996237378350e+00 + 3.5075976984507340e-01 1.0578227217035552e+00 1.9725441792210732e+00 + 5.2683981657987811e-01 1.1922357483303290e+00 2.0804622445286345e+00 + 7.3058185512504836e-01 1.3421666096885754e+00 2.1569812185107602e+00 + 7.2036851302937277e-01 1.4662728426250335e+00 2.1914323580901667e+00 + id 13507 + loc 4.0431806445121765e-01 9.5332324504852295e-01 396 + blend 0.0000000000000000e+00 + interp 4.4990597426330087e-01:4.4990147520355828e-01:3.0097512019592565e-01:2.5407681070393173e-01:1.0109394508852474e+00:3.4102495728285664e-01:1.9661412467888530e+00:2.6416715615350245e-01:2.8874816835466914e+00:3.4610009567349420e-01:3.7546382442429782e+00 + CVs 20 + 9.9152855912786675e-01 2.5635659474962480e-01 -2.7634531500734927e-01 + 1.6431745862690645e+00 3.3647742728996743e-01 -4.6779672333362132e-01 + 2.2181252309473809e+00 3.6315153533733596e-01 -6.2341161769201658e-01 + 2.8228842352422019e+00 3.8402829315045173e-01 -7.5823430136871672e-01 + 3.4594271871591693e+00 3.8293652438446407e-01 -8.7632785081546238e-01 + 4.1250388814541692e+00 3.3771516114177808e-01 -9.8903120610697903e-01 + 4.8072205054923876e+00 2.2356820994861970e-01 -1.1128576977897733e+00 + 5.4800436210202976e+00 1.4914749286690787e-02 -1.2607911146634316e+00 + 6.1121086982332624e+00 -3.1305928181225107e-01 -1.4392924695716478e+00 + 6.6678759659603521e+00 -7.7872803272059854e-01 -1.6534914331141515e+00 + 7.0941473979218408e+00 -1.3730324279997754e+00 -1.9018660502667770e+00 + 7.3474242479656802e+00 -2.0537736841254768e+00 -2.1662350015792793e+00 + 7.4223275350966773e+00 -2.7670990279180021e+00 -2.4164508738652533e+00 + 7.3416769401495632e+00 -3.4633758656901619e+00 -2.6295477517000228e+00 + 7.1380158881981535e+00 -4.0962061943970767e+00 -2.7942817491415335e+00 + 6.8484759296520039e+00 -4.6255943064273168e+00 -2.9005026174058752e+00 + 6.5146797383093471e+00 -5.0280998371747190e+00 -2.9457077147774013e+00 + 6.1795314979047706e+00 -5.3137875251403530e+00 -2.9578502932105364e+00 + 5.9296556617123999e+00 -5.6555161659244693e+00 -3.0298973834282910e+00 + id 13508 + loc 4.9784249067306519e-01 2.8951826691627502e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9421916099319881e-01:2.5855238158521937e-01:1.8197534559549178e-01:3.0856298531283743e-01:1.0436100827169030e+00:2.9828048315162931e-01:1.7908687780453501e+00:3.9421521880158888e-01:2.2329747498674357e+00:2.8022645753817899e-01:2.9786213801809951e+00:2.8441628381532880e-01:3.6589753931608655e+00 + CVs 20 + 3.3834853524585173e-01 4.4967267999887806e-01 1.3131031031465019e-02 + 4.7998495688312015e-01 7.9390893461607814e-01 4.1757235062107843e-02 + 5.7762399963218258e-01 1.1364132370510254e+00 5.5539466289688574e-02 + 6.9294258047731838e-01 1.4994337351689240e+00 4.8951758559869718e-02 + 8.2094613083876455e-01 1.8738468140190543e+00 1.5473160487648713e-02 + 9.5713463337368332e-01 2.2505764121368568e+00 -4.8319953476773037e-02 + 1.0976053456593613e+00 2.6279615941857393e+00 -1.4932404813858605e-01 + 1.2399328718136258e+00 3.0116084428776837e+00 -3.1037214437967120e-01 + 1.3717904061575830e+00 3.3931650571222463e+00 -5.7452003517434158e-01 + 1.4492431798453225e+00 3.7175742003417067e+00 -9.6578374594911565e-01 + 1.4263756497517699e+00 3.9146081282399026e+00 -1.4255954268486082e+00 + 1.3050868264510773e+00 3.9713751537623203e+00 -1.8669095032676362e+00 + 1.1104539186724702e+00 3.9123998393685362e+00 -2.2519256669055752e+00 + 8.5753972304871184e-01 3.7556148927844699e+00 -2.5810006546809223e+00 + 5.2784531572277071e-01 3.4855860989600629e+00 -2.8842072468643414e+00 + 8.7301104616808844e-02 3.0166365407508100e+00 -3.2193434548971118e+00 + -3.3036826163049149e-01 2.2734897466855095e+00 -3.5865420759710038e+00 + -4.7831794614673051e-01 1.4931090491082883e+00 -3.8472706051684749e+00 + -3.9599776340506226e-01 1.1273956130937457e+00 -3.8512482697108852e+00 + id 13509 + loc 2.0689229667186737e-01 9.3184351921081543e-01 376 + blend 0.0000000000000000e+00 + interp 5.0201216383692171e-01:3.3135556842050395e-01:3.5035957601158074e-02:5.0200714371528332e-01:6.5979073559117851e-01:4.1095020594630571e-01:1.0158881054847069e+00:2.4909463138907045e-01:1.4729886261271905e+00:2.9622176845522230e-01:2.0473608767378568e+00:4.2392501181338549e-01:2.7702076465851642e+00:3.5187886781834898e-01:3.0168614321410150e+00 + CVs 20 + -8.9135465417997731e-02 4.3243370951987881e-01 6.3408884879219496e-01 + -8.0902829915267843e-02 6.7458087392829869e-01 1.1294729106306676e+00 + 5.8396296620873422e-03 7.5238981559735252e-01 1.5866166602693466e+00 + 1.5974050460675493e-01 7.1054051422981079e-01 2.0499462611536363e+00 + 3.6819659675104605e-01 6.2283901487550697e-01 2.5382977361252248e+00 + 5.9805266058692264e-01 5.5425175382941094e-01 3.0835268866502386e+00 + 7.8017644949829468e-01 5.2803887829490548e-01 3.7123989157524502e+00 + 8.4024935492973363e-01 5.4467514779238524e-01 4.4173854797874128e+00 + 7.3605838525919809e-01 6.0258192345314376e-01 5.1410507801138516e+00 + 4.7693516980833750e-01 6.9281736629667323e-01 5.7999389619083770e+00 + 1.1450231998313343e-01 7.9141552745466504e-01 6.3493339618906628e+00 + -2.9814672560993882e-01 8.7809046395410606e-01 6.7864539040940617e+00 + -7.4052677188914107e-01 9.3353191432511951e-01 7.1252182885683304e+00 + -1.2193244841445823e+00 9.3388608093748671e-01 7.3779359808372984e+00 + -1.7235823222225783e+00 8.8319884739362520e-01 7.5265073453161548e+00 + -2.2267128357221213e+00 8.2316863298897003e-01 7.5235566676730681e+00 + -2.7362089720151070e+00 7.1691092050599980e-01 7.3786434591820296e+00 + -3.1679857456507978e+00 3.6080993321177202e-01 7.2464901695381112e+00 + -3.3621842769578194e+00 -1.9544329188064102e-01 7.3050001352289913e+00 + id 13510 + loc 5.2710926532745361e-01 9.1754728555679321e-01 378 + blend 0.0000000000000000e+00 + interp 3.9631010553475055e-01:2.7922186303266666e-01:9.5489363312874276e-02:3.9630614243369522e-01:1.0062292937641311e+00:2.5011076318945197e-01:1.3555216447422271e+00:2.8222702473679456e-01:2.0054520763960060e+00:3.2889437745723504e-01:2.8495901605600116e+00:2.5001253873799867e-01:3.2916805227547483e+00 + CVs 20 + 4.9275929782278183e-01 3.7137428772844649e-01 2.2960387579297736e-01 + 9.2180264222639408e-01 6.7669062172893180e-01 4.3024419579548323e-01 + 1.3678337704560017e+00 9.4263705013040267e-01 6.1880806129826016e-01 + 1.8453152117855158e+00 1.1944221723816131e+00 8.1387112754830582e-01 + 2.3306900059939468e+00 1.4411578312710402e+00 1.0333254525477378e+00 + 2.8165543143343519e+00 1.6741970967984192e+00 1.2959282000558530e+00 + 3.3048356597491351e+00 1.8654145822721977e+00 1.6139112650037535e+00 + 3.7946962527288823e+00 1.9844863035803604e+00 1.9904185521026625e+00 + 4.2909813066866427e+00 2.0039040515148425e+00 2.4254670463019488e+00 + 4.8018286265730863e+00 1.8888470204247327e+00 2.9108519355701339e+00 + 5.3156661261559988e+00 1.5981301597690241e+00 3.4124292275379662e+00 + 5.7846458414436022e+00 1.1073533698340854e+00 3.8690413846474456e+00 + 6.1493905492518870e+00 4.5187748160344121e-01 4.2198244454418301e+00 + 6.4050701634577649e+00 -2.5075779941066267e-01 4.4565322504392082e+00 + 6.6205074886007775e+00 -8.8622428196056946e-01 4.6376997221144194e+00 + 6.8802546746874871e+00 -1.4291048805413662e+00 4.8060521914479093e+00 + 7.2397927313139689e+00 -1.9042229103049100e+00 4.9424257572376611e+00 + 7.6444389553217036e+00 -2.3042411901956745e+00 5.0262540640645259e+00 + 7.8272000161420010e+00 -2.6019486072359745e+00 5.1231865934282341e+00 + id 13511 + loc 8.5147660970687866e-01 6.5287303924560547e-01 409 + blend 0.0000000000000000e+00 + interp 4.9750730935294757e-01:2.8517992856796137e-01:7.5749723482689058e-01:4.9750233427985407e-01:1.5609783784667746e+00:3.1705061885229174e-01:1.9936025078908908e+00:2.7562941345635517e-01:2.9450167332068871e+00:2.9101491648812305e-01:3.7985188098905036e+00 + CVs 20 + 3.7635281568795481e-01 1.5825906710307608e-01 -1.7123320212139234e-01 + 6.9179382838741599e-01 2.6509142179788303e-01 -3.3678867910228671e-01 + 9.9261231659031690e-01 3.4744487220985670e-01 -4.9795953945750709e-01 + 1.3007179556926398e+00 4.1750488451843859e-01 -6.5477249266978255e-01 + 1.6156460126191461e+00 4.7249346529033964e-01 -8.0648044757163140e-01 + 1.9362587891454552e+00 5.1150187248480272e-01 -9.5324528846619949e-01 + 2.2612417524285298e+00 5.3623287416216225e-01 -1.0960011272272143e+00 + 2.5896070636184541e+00 5.4695687560681616e-01 -1.2348140205266414e+00 + 2.9202125427109080e+00 5.3883239276340156e-01 -1.3671176864134342e+00 + 3.2476918287043350e+00 5.0412541176410608e-01 -1.4903219599821236e+00 + 3.5620395923501347e+00 4.3520407223109570e-01 -1.6072493938081207e+00 + 3.8559849425845503e+00 3.2307493078687921e-01 -1.7254710383351886e+00 + 4.1270297068505686e+00 1.5983118199543567e-01 -1.8498958466827204e+00 + 4.3717373801519752e+00 -5.4659929186319900e-02 -1.9797435000605317e+00 + 4.5836684164110766e+00 -3.1323280566380074e-01 -2.1126277038654000e+00 + 4.7557151962418178e+00 -6.0682703503494162e-01 -2.2458506477408937e+00 + 4.8822247709752356e+00 -9.2830661672153747e-01 -2.3730384735379513e+00 + 4.9609664317795534e+00 -1.2690514878050405e+00 -2.4852584576897154e+00 + 5.0284953749316239e+00 -1.6413499785597883e+00 -2.5902348328576363e+00 + id 13512 + loc 9.9797552824020386e-01 3.5776883363723755e-01 1068 + blend 0.0000000000000000e+00 + interp 5.0206522440892254e-01:3.9747970078710854e-01:4.8121971778796402e-01:3.1925649842847337e-01:1.1082771323015543e+00:5.0206020375667848e-01:1.8427937359377786e+00:2.6400519077397755e-01:2.5909308108923605e+00:3.2287615117105006e-01:3.0447069937141773e+00:2.8077498763031039e-01:3.9998119548018387e+00 + CVs 20 + -1.0604377020897202e-01 4.2099303797654014e-01 1.9799131961856459e-01 + -2.0663855272213533e-01 8.5723259429824228e-01 3.5611228012315299e-01 + -3.2467753619895634e-01 1.3081112855273447e+00 4.7098381676440232e-01 + -4.9029224940969834e-01 1.7666450957087652e+00 5.4627992901645006e-01 + -7.4115735409421735e-01 2.2124368770472964e+00 5.9002224543592330e-01 + -1.1061763522033521e+00 2.6093760855248700e+00 6.1970141334701978e-01 + -1.5789870863860043e+00 2.9133806253740335e+00 6.6543090371898206e-01 + -2.1094029084061185e+00 3.0958982875916607e+00 7.6064573438015159e-01 + -2.6480076397465995e+00 3.1536836837509834e+00 9.3529046702354712e-01 + -3.1804986346878730e+00 3.0558812847854955e+00 1.2299623124684389e+00 + -3.6264879419759755e+00 2.7283000786816234e+00 1.6485033207025179e+00 + -3.8374586468968004e+00 2.2285091628382787e+00 2.0690632786774663e+00 + -3.8001229550216729e+00 1.6836904535158577e+00 2.4144245516264875e+00 + -3.5610783157948300e+00 1.1828738730165682e+00 2.6617520362518845e+00 + -3.2198017638763661e+00 8.2215109761596517e-01 2.7879039607232126e+00 + -2.8732690169997932e+00 6.2028759274954859e-01 2.8162493994691511e+00 + -2.5780249607202186e+00 5.5100952704052841e-01 2.7798805447864581e+00 + -2.3661965115570673e+00 6.2971277050971874e-01 2.6370631354849370e+00 + -2.2233353218690985e+00 5.7667134359175787e-01 2.6547923138236054e+00 + id 13513 + loc 3.6675024032592773e-01 2.3456862568855286e-01 401 + blend 0.0000000000000000e+00 + interp 4.9799885989381865e-01:3.8254845889082523e-01:5.2839850846230729e-01:4.0629360920827318e-01:1.2757685442015125e+00:4.1894863453359099e-01:1.9986650947402822e+00:2.9605514131621058e-01:2.7652890528317089e+00:4.9563469988488268e-01:3.0085755370545444e+00:4.9799387990521971e-01:3.5869539373008914e+00:3.6552924458509012e-01:3.9976077354574864e+00 + CVs 20 + -2.0114999321299099e-01 2.2721476635984864e-01 8.9886289696461827e-02 + -4.1689992322704883e-01 4.7598821507023370e-01 1.9901195427848131e-01 + -6.2986114823626294e-01 7.3986491980037972e-01 3.1213854569958355e-01 + -8.3232076740636729e-01 1.0032488042087775e+00 4.2211568554925649e-01 + -1.0315367892505176e+00 1.2505957463339379e+00 5.3407999092905933e-01 + -1.2341191631639388e+00 1.4677275094140689e+00 6.5817346258843412e-01 + -1.4474569046049202e+00 1.6420689993005544e+00 8.1044540717053160e-01 + -1.6746201916101933e+00 1.7626227851780967e+00 1.0033975778910822e+00 + -1.9082501446934954e+00 1.8266166907623471e+00 1.2364211097715927e+00 + -2.1445699799723470e+00 1.8267694265100207e+00 1.4998881670353681e+00 + -2.3839800229176094e+00 1.7386164546006420e+00 1.7738700616670080e+00 + -2.6169081502039444e+00 1.5631340387233270e+00 2.0341731757170685e+00 + -2.8340523041679861e+00 1.3441378761155351e+00 2.2831736751116800e+00 + -3.0294102721047405e+00 1.1115537928483847e+00 2.5429312743020560e+00 + -3.1944901445752536e+00 8.6342874949646897e-01 2.8236367189699725e+00 + -3.3184625563121255e+00 6.3803986328634477e-01 3.1140724793723868e+00 + -3.3948618310934200e+00 5.7278989298413829e-01 3.3751659050880045e+00 + -3.4330310249704832e+00 6.8527044977429541e-01 3.5514922748442381e+00 + -3.5135060241336440e+00 7.1951753920651362e-01 3.9223284712613964e+00 + id 13514 + loc 2.5597175955772400e-01 5.4632252454757690e-01 402 + blend 0.0000000000000000e+00 + interp 4.9170865635390448e-01:3.2798838888113352e-01:3.2198009154669194e-02:4.9170373926734096e-01:6.2041585405775534e-01:3.5951575299814748e-01:1.1114840392867011e+00:4.4817106089365188e-01:1.9522071860271106e+00:3.0959431844054813e-01:2.2821740749683355e+00:4.2750496890353490e-01:3.1803673033563062e+00 + CVs 20 + -7.8008643121461885e-03 4.0415535901397964e-01 -2.7093064739064082e-01 + -1.8582583329316893e-02 7.8823233134458548e-01 -5.4227766316676629e-01 + -5.5325643926547041e-03 1.1520219051656846e+00 -8.3009760990505610e-01 + 2.2334359037308738e-02 1.4966860000652014e+00 -1.1394010401972721e+00 + 4.8634304276993279e-02 1.8140715551130322e+00 -1.4633710263544026e+00 + 6.5589982679762349e-02 2.0983291023387340e+00 -1.7939049007970755e+00 + 6.9560724033779664e-02 2.3512797665015350e+00 -2.1281226299193716e+00 + 5.7198970647067027e-02 2.5779383324941834e+00 -2.4682710558743954e+00 + 3.0021391279536513e-02 2.7793221641052770e+00 -2.8171950947714981e+00 + -3.0729622078927710e-03 2.9508029017871178e+00 -3.1750576121116931e+00 + -3.3388455224048763e-02 3.0856894819267247e+00 -3.5462315871203378e+00 + -5.8476694496379711e-02 3.1734511300950428e+00 -3.9443999576609841e+00 + -7.9799108675263186e-02 3.1975359821746214e+00 -4.3787376811257328e+00 + -9.8287504152310357e-02 3.1447422953065240e+00 -4.8351567110792573e+00 + -1.0873303850755822e-01 3.0176536275701462e+00 -5.2797859341986797e+00 + -9.2975895132588304e-02 2.8305243097251163e+00 -5.6717021612609084e+00 + -2.6679665602176383e-02 2.5741727907361116e+00 -5.9870594466656222e+00 + 1.5311046750556501e-02 2.2563947615316620e+00 -6.2581762954067992e+00 + -8.3021174372044926e-02 2.2390590091894440e+00 -6.4239705228086397e+00 + id 13515 + loc 7.1913039684295654e-01 1.1416239291429520e-01 1069 + blend 0.0000000000000000e+00 + interp 4.2861086704834617e-01:3.0388258825840070e-01:6.9520258521652889e-02:4.1900867833702071e-01:7.3930772359207042e-01:2.9112587895643033e-01:1.0903489220197258e+00:3.1983518070903794e-01:2.0028296861685728e+00:4.2860658093967569e-01:2.7606154880505400e+00:4.0592124367776350e-01:3.1597247191470910e+00:4.0893583118257920e-01:3.7698492551205494e+00 + CVs 20 + -6.2772804382150549e-02 1.4574776405057888e-01 2.4789742638185672e-01 + -1.4943539093828515e-01 2.3591451935826038e-01 4.6511689111611321e-01 + -2.3623748897080343e-01 2.9095827383395534e-01 6.6305955351446033e-01 + -3.2310370045591941e-01 3.2663484311094326e-01 8.5558184470474008e-01 + -4.9492429508964719e-01 3.7138905376623133e-01 1.0589461864635925e+00 + -8.2940985191911976e-01 4.8161701003657681e-01 1.2641675535519981e+00 + -1.2404149956823818e+00 7.3288501004586637e-01 1.4437387900723460e+00 + -1.5716378450225896e+00 1.1046083275207095e+00 1.5679416267906467e+00 + -1.7895457579351415e+00 1.5416297126286911e+00 1.6177910957603121e+00 + -1.9133605055454554e+00 2.0623417625314078e+00 1.5972007178392493e+00 + -1.8890540983187660e+00 2.6769524876466280e+00 1.6131024842903363e+00 + -1.6698671050999736e+00 3.2288383208017954e+00 1.7916273074794846e+00 + -1.3150120941343479e+00 3.5906623243216700e+00 2.0910590414191788e+00 + -8.9669748173042874e-01 3.7546411478509634e+00 2.4027370484275150e+00 + -4.5205885940140589e-01 3.7611467659386748e+00 2.6958352112246278e+00 + 1.6129956380344979e-02 3.6236559946939355e+00 3.0498414076807179e+00 + 4.6309582936043281e-01 3.2842421999848517e+00 3.5003741776544168e+00 + 7.4634463835188791e-01 2.7829353429990222e+00 3.8522894184272931e+00 + 7.2915734285160450e-01 2.5160809313046992e+00 3.7938802828614486e+00 + id 13516 + loc 7.5875949859619141e-01 6.7098423838615417e-02 400 + blend 0.0000000000000000e+00 + interp 4.7609591852522448e-01:3.4057422617234456e-01:8.9658904988981769e-03:4.7609115756603926e-01:8.2279965635116747e-01:3.3599671084120791e-01:1.1689531019104968e+00:2.9531700857850368e-01:2.0848791081125171e+00:2.8639242286319061e-01:3.0024269949112936e+00:4.4565314484264890e-01:3.5054459949984089e+00 + CVs 20 + 2.0657920848140426e-01 1.0401749328718271e-01 1.2539710836054521e-01 + 4.2051602656495946e-01 2.6347215009288150e-01 2.9338925732465027e-01 + 6.3469600534833925e-01 4.5165511758127208e-01 4.8000016594142225e-01 + 8.4385625178870383e-01 6.5227499289938784e-01 6.7687927480803589e-01 + 1.0459205708774331e+00 8.5890380957512336e-01 8.8563056029022780e-01 + 1.2391831551647601e+00 1.0663724532307488e+00 1.1074545136243659e+00 + 1.4223005331178569e+00 1.2682616000435032e+00 1.3488662571364278e+00 + 1.5938507668238309e+00 1.4510485607256394e+00 1.6238904534272407e+00 + 1.7563103161328331e+00 1.5923992732404257e+00 1.9438152905352453e+00 + 1.9215812609703586e+00 1.6624446354332352e+00 2.3061957821136945e+00 + 2.1006946325466593e+00 1.6307203751662054e+00 2.6930666386722129e+00 + 2.2870390694423373e+00 1.4883101079297421e+00 3.0760312840349120e+00 + 2.4677229420466378e+00 1.2543889650663989e+00 3.4342974883535593e+00 + 2.6415499596136804e+00 9.4910285972336927e-01 3.7598300969256826e+00 + 2.8067788203045092e+00 5.8041693682491191e-01 4.0478861234812067e+00 + 2.9414573981882928e+00 1.5137741719981879e-01 4.2951948190258440e+00 + 3.0144128632468368e+00 -3.2184580105697691e-01 4.5023205313883770e+00 + 3.0254283217845379e+00 -7.9292850947061022e-01 4.6837860462719512e+00 + 3.0689983578302051e+00 -1.1457617480897548e+00 4.9141907426703622e+00 + id 13517 + loc 1.0020383447408676e-01 9.6596407890319824e-01 380 + blend 0.0000000000000000e+00 + interp 4.6223533708715614e-01:3.0330094155130810e-01:7.3049370057109009e-01:3.8132271321102734e-01:1.5066342413571920e+00:3.6984499234637486e-01:1.9930579567568412e+00:4.1401747143717149e-01:2.4333793360688052e+00:4.6223071473378530e-01:3.0526248206324471e+00:4.3871473869570121e-01:3.9025188295316200e+00 + CVs 20 + -2.9852788069667602e-01 2.6973118320882494e-01 -4.0056285411219344e-01 + -6.0774647900603185e-01 4.9290483683569075e-01 -7.0131669405551345e-01 + -9.3076387320025245e-01 6.9668148502815908e-01 -9.7192234085635976e-01 + -1.2701252937734753e+00 8.9918454716457752e-01 -1.2488921367656043e+00 + -1.6180117200297264e+00 1.1010533223957639e+00 -1.5438443456148727e+00 + -1.9663968161769338e+00 1.2940180220793278e+00 -1.8677815322296896e+00 + -2.3087523979167024e+00 1.4632723730195196e+00 -2.2313944632463798e+00 + -2.6337479224190856e+00 1.5909609781584748e+00 -2.6423560675430475e+00 + -2.9241574717074199e+00 1.6595611027972423e+00 -3.0969481257800502e+00 + -3.1655366749703235e+00 1.6567606469336931e+00 -3.5784183724174601e+00 + -3.3534381821468999e+00 1.5745041204461250e+00 -4.0685378394881111e+00 + -3.4883667328268673e+00 1.4028902432449790e+00 -4.5522871165374141e+00 + -3.5672198256900005e+00 1.1376659196094643e+00 -5.0080871781656278e+00 + -3.5880679501449162e+00 8.0283912224930765e-01 -5.4127078599931906e+00 + -3.5596863565493848e+00 4.4985337590713703e-01 -5.7705009367379940e+00 + -3.5022831326951094e+00 1.2239475880043926e-01 -6.1132996006032361e+00 + -3.4516002486215056e+00 -1.7100897004333504e-01 -6.4674606102412309e+00 + -3.4571349063519481e+00 -4.5062307162084503e-01 -6.8452897974853242e+00 + -3.4883683276440056e+00 -6.8027267128154367e-01 -7.2114876593168153e+00 + id 13518 + loc 7.8200548887252808e-01 3.5380354523658752e-01 415 + blend 0.0000000000000000e+00 + interp 5.4806067746408282e-01:3.9471402333636257e-01:2.5680237074878765e-03:5.4805519685730819e-01:6.6323714469852324e-01:4.3910659279920700e-01:9.9638821312418724e-01:3.6461891867422180e-01:1.4938352053467303e+00:3.7929395924950660e-01:2.1113125166432738e+00:2.7983045290070768e-01:2.9968011512406809e+00 + CVs 20 + -2.4565492319834814e-01 1.5091673220211443e-01 1.4531117685661857e-02 + -4.5087816481576504e-01 2.6476938582488208e-01 4.8427497456877439e-02 + -6.4902588066959743e-01 3.7089879980656187e-01 7.4527542344048125e-02 + -8.5276433657155293e-01 4.8101118294532702e-01 7.6786967754710223e-02 + -1.0599060197252692e+00 5.9093425049584003e-01 5.1391790808818671e-02 + -1.2661291986084036e+00 6.9609551109186774e-01 -5.1579780331291736e-03 + -1.4646676059957522e+00 7.9241202236804131e-01 -9.6179150571165883e-02 + -1.6479395543186319e+00 8.7651631259682949e-01 -2.2221172727967092e-01 + -1.8092597168628544e+00 9.4584367035092831e-01 -3.7919193170238852e-01 + -1.9428294085444371e+00 9.9934534665518371e-01 -5.6088161768641465e-01 + -2.0450452504389407e+00 1.0398540562815795e+00 -7.6834405599809363e-01 + -2.1241733960057045e+00 1.0733421273157684e+00 -1.0199256465059781e+00 + -2.2173320317072251e+00 1.0973752673700068e+00 -1.3334600762768278e+00 + -2.3723989455939840e+00 1.0932012697074809e+00 -1.6795815674942118e+00 + -2.5944411616725676e+00 1.0474601932076499e+00 -2.0049943592772963e+00 + -2.8714076553000765e+00 9.5892033916783848e-01 -2.2934348371355577e+00 + -3.2040500017104798e+00 8.2394768497440984e-01 -2.5389506702545064e+00 + -3.5761255899776829e+00 6.4621042266368978e-01 -2.7203436448227789e+00 + -3.7694891540885580e+00 5.1927815989874704e-01 -2.8215084369638106e+00 + id 13519 + loc 4.3902066349983215e-01 5.1330590248107910e-01 373 + blend 0.0000000000000000e+00 + interp 4.5399175385776575e-01:3.9880931773947448e-01:3.5420339058794714e-02:3.3223953110724952e-01:8.3442362258348024e-01:3.3073406245418951e-01:1.5223034966340609e+00:4.5398721394022717e-01:2.1163861794112742e+00:3.2183863862067108e-01:2.9671914805366870e+00:2.8814006997357755e-01:3.5579863969291861e+00 + CVs 20 + -3.2259410255458809e-01 4.9849322214222214e-01 -8.6557652490415943e-02 + -5.8343373491858319e-01 9.4087257882914699e-01 -2.3005588205626148e-01 + -7.8555777360195855e-01 1.3259379750695512e+00 -4.1275926523082707e-01 + -9.2650917671042565e-01 1.6551927302053213e+00 -6.2017915789217193e-01 + -1.0090207910658313e+00 1.9286640382928841e+00 -8.4111116822559173e-01 + -1.0522059882726531e+00 2.1349436849926842e+00 -1.0609847195808495e+00 + -1.0795561123506781e+00 2.2588972370878895e+00 -1.2630171782584203e+00 + -1.1077468455771653e+00 2.3133352336515696e+00 -1.4464117614494827e+00 + -1.1494784532387661e+00 2.3240410621321792e+00 -1.6311686091028310e+00 + -1.2080132838452351e+00 2.3027011021145207e+00 -1.8258796228628369e+00 + -1.2715269406581875e+00 2.2564004965309103e+00 -2.0121240016011859e+00 + -1.3231872305095298e+00 2.1983631701334283e+00 -2.1571610529328042e+00 + -1.3693914438579986e+00 2.1273856858620954e+00 -2.2787464906582158e+00 + -1.4484916295319177e+00 1.9755831269044906e+00 -2.4540545728720664e+00 + -1.6173802605209564e+00 1.6938400458170308e+00 -2.7012645559770485e+00 + -1.9377903892174546e+00 1.3494866019010701e+00 -2.9769407788220650e+00 + -2.4309078666574528e+00 1.0603856921104264e+00 -3.2228478650087320e+00 + -3.0377784170794540e+00 9.1551041443768844e-01 -3.3808015327388965e+00 + -3.6033226484174810e+00 8.5240211675685229e-01 -3.4722757338262653e+00 + id 13520 + loc 3.4804967045783997e-01 8.9937371015548706e-01 374 + blend 0.0000000000000000e+00 + interp 4.5429161410504970e-01:3.5820870286853751e-01:7.5569293039660090e-01:4.5428707118890865e-01:1.1200172979548511e+00:3.5768187411814062e-01:1.9535600140362468e+00:2.7684988279944661e-01:2.5318758804127848e+00:3.8699080486240628e-01:3.0245669307304901e+00:3.2803352194294383e-01:3.9967303443484767e+00 + CVs 20 + -6.4396184224912811e-01 4.1011857953750430e-01 -1.8256534040843969e-01 + -1.2009953345019928e+00 7.2121617432172358e-01 -2.7172984577503223e-01 + -1.7577059864022875e+00 9.7081373435454932e-01 -2.9674837873210336e-01 + -2.3440237135474971e+00 1.1949524132984939e+00 -2.9150551880448783e-01 + -2.9553031852725926e+00 1.4034184442020994e+00 -2.9611490021046827e-01 + -3.5949193142576998e+00 1.5808653339155714e+00 -3.5111723673161366e-01 + -4.2539382313122180e+00 1.6943079264656347e+00 -4.8324403104592095e-01 + -4.9029919270260036e+00 1.7169009189452138e+00 -6.9177209779760007e-01 + -5.5097340629906384e+00 1.6398418952494618e+00 -9.4985086676247543e-01 + -6.0517545762013132e+00 1.4698091122182475e+00 -1.2166160213461588e+00 + -6.5191803477895673e+00 1.2260133845636370e+00 -1.4515513748413496e+00 + -6.9113905413055781e+00 9.3713378564894079e-01 -1.6317731916749454e+00 + -7.2374728154981334e+00 6.3849365047457418e-01 -1.7553320258022813e+00 + -7.5106840545422511e+00 3.6312208315617189e-01 -1.8312276462726085e+00 + -7.7307766820666650e+00 1.2934491349662025e-01 -1.8637526116239651e+00 + -7.8743445833198678e+00 -5.1616219408271657e-02 -1.8556353509015868e+00 + -7.9075726180000103e+00 -1.7187454635848276e-01 -1.8330337278938937e+00 + -7.8620650600803206e+00 -2.6388288592331000e-01 -1.8277869775922810e+00 + -7.9955104824125947e+00 -3.9933403588523442e-01 -1.7767000559968968e+00 + id 13521 + loc 1.5828710794448853e-01 8.3591330051422119e-01 395 + blend 0.0000000000000000e+00 + interp 5.5251798593709767e-01:3.6598963666147111e-01:7.1768630670425160e-01:4.2207843462468719e-01:1.2386753911774637e+00:5.5251246075723837e-01:1.9903744283045834e+00:3.6623697065915117e-01:2.3962480492299401e+00:3.9237885908072784e-01:3.1233745481668276e+00:2.8636628654191715e-01:3.7402815890392502e+00 + CVs 20 + 4.1426551802129302e-01 2.3718573919196057e-01 -1.7643560865007313e-01 + 7.5071068796987017e-01 4.0064686206648681e-01 -3.2862279210012824e-01 + 1.0664731181681995e+00 5.2592874211209062e-01 -4.7332555847764546e-01 + 1.3967779526857134e+00 6.3424792461853263e-01 -6.1972001204618654e-01 + 1.7455681917021943e+00 7.2076974727264220e-01 -7.6903046438311096e-01 + 2.1171201133104662e+00 7.7899051651001405e-01 -9.2430426405157762e-01 + 2.5131437170911295e+00 8.0226265791264817e-01 -1.0921121628532406e+00 + 2.9317146141515029e+00 7.8165866596649258e-01 -1.2790630093929982e+00 + 3.3667572985340950e+00 7.0154583242778235e-01 -1.4863512716718881e+00 + 3.8018259620287633e+00 5.4224331817512450e-01 -1.7127267806945934e+00 + 4.2040075602858398e+00 2.8818872970704601e-01 -1.9598857104650067e+00 + 4.5377771734774468e+00 -6.4896903376127302e-02 -2.2258831455012089e+00 + 4.7867052158086443e+00 -5.0919616896522735e-01 -2.4980953848103011e+00 + 4.9494344713969047e+00 -1.0272409527383268e+00 -2.7605818096159176e+00 + 5.0245424952741029e+00 -1.5942408807370847e+00 -3.0039329348745003e+00 + 5.0104813629652654e+00 -2.1830786364504728e+00 -3.2169064003065495e+00 + 4.9128239384364161e+00 -2.7703563738816528e+00 -3.3785007098480899e+00 + 4.7545974152786652e+00 -3.3387301081797944e+00 -3.4805442134458136e+00 + 4.7272815246237725e+00 -3.9402997261844392e+00 -3.6559278876794084e+00 + id 13522 + loc 7.5420635938644409e-01 1.8608336150646210e-01 399 + blend 0.0000000000000000e+00 + interp 3.9627605639543384e-01:3.2517266233030795e-01:5.9199208645021817e-01:3.9627209363486993e-01:1.0307900173966340e+00:2.8226602585241339e-01:2.0007803995786935e+00:2.9071071078479849e-01:2.8715952526795423e+00:3.5451914410516966e-01:3.6433164288018798e+00 + CVs 20 + 2.0405170956513113e-01 2.7185353326458145e-01 2.3644300163796156e-01 + 3.6938789809117584e-01 5.1232801585596999e-01 4.5488724507646017e-01 + 4.9742115356206179e-01 7.2492437215785799e-01 6.8695531897706064e-01 + 5.9435460520703609e-01 9.1504819253969250e-01 9.4720550467627196e-01 + 6.7010917929833114e-01 1.0871867839481326e+00 1.2370009813140896e+00 + 7.3412618431597387e-01 1.2427619045510143e+00 1.5562139183939128e+00 + 7.9292125509030864e-01 1.3784884191734001e+00 1.9063935965361551e+00 + 8.5421106343303943e-01 1.4844174033178676e+00 2.2872741829508114e+00 + 9.2649529543034970e-01 1.5432517856646080e+00 2.6916044885604835e+00 + 1.0141629554571434e+00 1.5342729487176254e+00 3.1005288694930604e+00 + 1.1145637437573428e+00 1.4353457692186060e+00 3.4866077963986140e+00 + 1.2238907011217899e+00 1.2244833016427714e+00 3.8232777083855809e+00 + 1.3433002645205214e+00 8.9690496166760147e-01 4.0921212855865106e+00 + 1.4857007222586986e+00 4.6653328395378635e-01 4.2979700043426217e+00 + 1.6750290614068670e+00 -3.4057364797380529e-02 4.4846962179782572e+00 + 1.9068154656672465e+00 -5.2813404283077992e-01 4.7111901121937683e+00 + 2.1173934268232255e+00 -9.2969164432508156e-01 5.0146489733839328e+00 + 2.2450853331614025e+00 -1.2092404991351444e+00 5.4149093983808658e+00 + 2.3468053967233495e+00 -1.4356815330361199e+00 5.8734676982083229e+00 + id 13523 + loc 6.5184277296066284e-01 4.2902949452400208e-01 393 + blend 0.0000000000000000e+00 + interp 4.6199811440592747e-01:4.1032556132088027e-01:9.5125075174097629e-02:4.6199349442478344e-01:6.6278155588455578e-01:3.0857610442706945e-01:1.2746952488329311e+00:2.9646600167152198e-01:2.3402273331197114e+00:4.2670054376411903e-01:2.9951140979772206e+00:3.8091127339147468e-01:3.8220482601108547e+00 + CVs 20 + 9.1580285624463409e-02 2.7676947264044627e-01 2.2952406523352251e-01 + 1.9977334758470475e-01 5.6964338510383405e-01 4.1620292873884163e-01 + 3.0098875613756149e-01 8.7956379746383240e-01 5.4336193726242132e-01 + 3.9249804272297173e-01 1.2170296145065913e+00 6.0986672667425457e-01 + 4.9521915116788034e-01 1.5824293421047317e+00 6.4529647461919493e-01 + 6.2663247137027678e-01 1.9675691843574568e+00 6.9859857523742719e-01 + 7.7728058180692161e-01 2.3721878617833316e+00 8.1529795714679565e-01 + 9.2371168901719025e-01 2.7949644958373643e+00 1.0302953021230719e+00 + 1.0611599758175203e+00 3.2167342970698094e+00 1.3595304830679120e+00 + 1.2054381909738938e+00 3.6095831934568920e+00 1.8035620459841355e+00 + 1.3822323008263266e+00 3.9504375628025032e+00 2.3532305976754215e+00 + 1.6226797594720876e+00 4.2193203316301444e+00 3.0002623169638101e+00 + 1.9443956159828382e+00 4.3791532010541347e+00 3.7420429959222004e+00 + 2.3400898681660278e+00 4.3756759242436409e+00 4.5672973463209203e+00 + 2.7791360928634052e+00 4.1500614542968890e+00 5.4101172010806042e+00 + 3.1911142189458213e+00 3.7190745834135743e+00 6.1136306396507774e+00 + 3.5266802426860604e+00 3.2153044102299817e+00 6.5754302739419348e+00 + 3.8603729966394331e+00 2.7884599879485674e+00 6.7593038139666337e+00 + 4.3304572927446419e+00 2.6611170372469211e+00 6.4989984841769282e+00 + id 13524 + loc 4.1839689016342163e-01 9.9686361849308014e-02 412 + blend 0.0000000000000000e+00 + interp 4.0350029592842279e-01:3.1126435008942471e-01:2.4388493306246750e-01:3.5850888916119328e-01:1.1823066038630008e+00:3.2202173090109615e-01:1.9999870541140083e+00:2.6878985709497805e-01:2.9642991661928533e+00:4.0349626092546353e-01:3.1588318344480957e+00:3.6039300982790118e-01:3.9709638651445731e+00 + CVs 20 + -8.7869231315632207e-02 8.5729086311296693e-02 -5.8264826545379478e-01 + -1.6606640260581679e-01 9.7838844851406759e-02 -1.0348875346965676e+00 + -2.2980169888068322e-01 8.7855625706212082e-02 -1.4405277541860455e+00 + -2.8782511031773478e-01 7.2528165827188684e-02 -1.8433918461114012e+00 + -3.3917974519317828e-01 4.9074272828780519e-02 -2.2379944331260093e+00 + -3.8148839683638797e-01 1.6824210700454589e-02 -2.6192268266400758e+00 + -4.1247577571797028e-01 -2.3626989348783711e-02 -2.9837102291548359e+00 + -4.3182482438925590e-01 -7.1797908620590656e-02 -3.3302124064716079e+00 + -4.3975335529566933e-01 -1.2659327510415586e-01 -3.6583670138535327e+00 + -4.3543469436711901e-01 -1.8554637431170473e-01 -3.9676782297758360e+00 + -4.2231804598425099e-01 -2.5006022189278365e-01 -4.2577756689579953e+00 + -4.2138450694324381e-01 -3.3581670844157441e-01 -4.5292736921546464e+00 + -4.6675565738695329e-01 -4.6285888979904155e-01 -4.7796652717356256e+00 + -5.6698999131967964e-01 -6.2363730008897411e-01 -5.0017519577390450e+00 + -7.0368517906163619e-01 -7.9723394130686986e-01 -5.1988330539461023e+00 + -8.6819348739415680e-01 -9.7530931969129631e-01 -5.3734063155064815e+00 + -1.0625954726221973e+00 -1.1510475407615102e+00 -5.5164734908792283e+00 + -1.2823529504489066e+00 -1.3133682589025863e+00 -5.6204204591448370e+00 + -1.4742626306049185e+00 -1.4736143718311467e+00 -5.7665864558266984e+00 + id 13525 + loc 4.8218482732772827e-01 1.9330023229122162e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5442979457900664e-01:2.5671492541639807e-01:3.2855427331689147e-01:3.5088389889078836e-01:1.1067842539611383e+00:3.0033570371229923e-01:1.8501676623028436e+00:2.6012339907152859e-01:2.4030670563085881e+00:3.0856298531283743e-01:3.0432482736236559e+00:3.5442625028106084e-01:3.7074789467358471e+00 + CVs 20 + 4.6516657715284482e-01 4.5539063148102488e-01 -7.7072934718731112e-02 + 7.2674350170532664e-01 8.0150418611972896e-01 -1.5453323642899136e-01 + 9.3160442620822315e-01 1.1205431620183035e+00 -2.4404517739051385e-01 + 1.1358623095903804e+00 1.4428247430153185e+00 -3.5167459651980942e-01 + 1.3266850634318894e+00 1.7561061679358985e+00 -4.8169263134178925e-01 + 1.4900924060906990e+00 2.0454914702913127e+00 -6.3437255649815427e-01 + 1.6130591719695024e+00 2.2963833314945168e+00 -8.0575841000712922e-01 + 1.6891029833335431e+00 2.4989215415461619e+00 -9.8968107010373729e-01 + 1.7188418665961851e+00 2.6490306649087261e+00 -1.1805462357570642e+00 + 1.7046114564756869e+00 2.7448619184857277e+00 -1.3740827778137139e+00 + 1.6474596443152660e+00 2.7837764863219672e+00 -1.5627813961492427e+00 + 1.5510186347973067e+00 2.7666947537810538e+00 -1.7354413207757986e+00 + 1.4216945482779937e+00 2.6989418290158627e+00 -1.8855255168900651e+00 + 1.2647650555242915e+00 2.5843979410255833e+00 -2.0128492212897235e+00 + 1.0775793095287558e+00 2.4175766256151245e+00 -2.1251683346332020e+00 + 8.4585781759323941e-01 2.1701745019087921e+00 -2.2418830570544488e+00 + 5.9375831632336662e-01 1.7964407905376751e+00 -2.3782615731344219e+00 + 4.4305136361197817e-01 1.3376629451375901e+00 -2.5031660668457110e+00 + 4.9573086396181831e-01 1.0308586649133662e+00 -2.5277751743454240e+00 + id 13526 + loc 5.0775855779647827e-01 6.2788087129592896e-01 382 + blend 0.0000000000000000e+00 + interp 4.8732132315053911e-01:3.8306994984841819e-01:7.4061200020069107e-02:3.7246540257386568e-01:7.9091396758204335e-01:3.5863583825041018e-01:1.1391217134070630e+00:4.8731644993730761e-01:1.9013861691424103e+00:4.1107173921283607e-01:2.3835212548562357e+00:3.4513053128407517e-01:3.2015772603203727e+00 + CVs 20 + 8.5781058943451316e-01 1.5734058012093941e-01 -5.5322012287495448e-01 + 1.4235905582624548e+00 1.5844978914505672e-01 -9.2133379030409235e-01 + 1.9231117762876668e+00 8.5665828661552479e-02 -1.2406258899124094e+00 + 2.4550357419825355e+00 -2.0371690406238985e-02 -1.5629887593134251e+00 + 3.0105334096859666e+00 -1.5304089086314643e-01 -1.8912896327968123e+00 + 3.5777200466174794e+00 -3.0400725632676184e-01 -2.2340630911251829e+00 + 4.1402556283272105e+00 -4.6438909575950482e-01 -2.6024325272690190e+00 + 4.6817235728009008e+00 -6.3309380377282243e-01 -3.0032866265154858e+00 + 5.2009107521186095e+00 -8.3252194570372628e-01 -3.4411237686769289e+00 + 5.7003944109802145e+00 -1.1047957395305299e+00 -3.9135275700938230e+00 + 6.1634564590753751e+00 -1.4779921483195984e+00 -4.4206756256455346e+00 + 6.5512671546476939e+00 -1.9605864931458321e+00 -4.9546413186278890e+00 + 6.8306288692604626e+00 -2.5393179029820123e+00 -5.4952465198242191e+00 + 6.9849734030598158e+00 -3.1890950908530229e+00 -6.0194199771649437e+00 + 7.0085240332877188e+00 -3.8779749142003146e+00 -6.5041436371398182e+00 + 6.9065146321238071e+00 -4.5710478987403595e+00 -6.9203564081328484e+00 + 6.7007338533906626e+00 -5.2364662670277227e+00 -7.2335584714856127e+00 + 6.4353394769175560e+00 -5.8453298023461429e+00 -7.4247036282224324e+00 + 6.2369529761224261e+00 -6.3402162220178457e+00 -7.6047995704404592e+00 + id 13527 + loc 5.3517901897430420e-01 9.2755359411239624e-01 375 + blend 0.0000000000000000e+00 + interp 5.0658045904276572e-01:2.4682522107821603e-01:1.2254421032501073e-02:4.9206645667254162e-01:9.9783068044654766e-01:5.0657539323817535e-01:1.2491814013827303e+00:4.3934265332188482e-01:1.8567106651657359e+00:3.1657894908605450e-01:2.0099063008918279e+00:3.8811209192555823e-01:2.5630656516515926e+00:3.8457350141459828e-01:3.0385271710568320e+00 + CVs 20 + -3.6470363063180378e-01 3.4993299741306205e-01 -1.1982910386511336e-01 + -7.2663134314502842e-01 6.0263572631662399e-01 -1.9236169966899636e-01 + -1.1338260557661650e+00 7.3301138382208020e-01 -2.3075203284713741e-01 + -1.6079229467162768e+00 7.7595179363346445e-01 -2.4338072644797382e-01 + -2.1308786100173505e+00 8.1212283094940585e-01 -2.4092264957212556e-01 + -2.6784419150247807e+00 9.0518637105886857e-01 -2.6106903770553436e-01 + -3.2228424925920995e+00 1.0771203201603354e+00 -3.5953694784292189e-01 + -3.7254038260278541e+00 1.3265446689998979e+00 -5.7222304215142317e-01 + -4.1422000613099330e+00 1.6382982863149012e+00 -8.9972761768694465e-01 + -4.4478898073291973e+00 1.9764925994205997e+00 -1.3221276186245219e+00 + -4.6479461605889307e+00 2.2883310408964044e+00 -1.8200217455188847e+00 + -4.7552441749281380e+00 2.5115228796389726e+00 -2.3762797600023724e+00 + -4.7720595061534858e+00 2.5845075977644472e+00 -2.9574460599000467e+00 + -4.6971932367775961e+00 2.4778321119933260e+00 -3.5050015693794108e+00 + -4.5465549864206896e+00 2.2062847089516868e+00 -3.9446195127384489e+00 + -4.4019909875912795e+00 1.8230379457050128e+00 -4.2074697594913166e+00 + -4.4104113767890283e+00 1.4347889280991346e+00 -4.2568704624256419e+00 + -4.5837782593230791e+00 1.1674985080889053e+00 -4.1552450797737759e+00 + -4.7314793128404986e+00 7.0157508001095836e-01 -4.1549816463894151e+00 + id 13528 + loc 4.5075398683547974e-01 5.4061937332153320e-01 1068 + blend 0.0000000000000000e+00 + interp 3.1579990878028258e-01:2.8050467901618975e-01:3.1871209336957362e-01:3.0681944763286922e-01:1.3497771850832838e+00:2.7610057514304903e-01:2.1368313502073621e+00:3.1579675078119479e-01:3.2033062499240987e+00 + CVs 20 + 7.5719059384791260e-02 3.3147268325631846e-01 -1.5861937514368793e-01 + 1.7443274986107887e-01 6.8358768681474247e-01 -3.4222204096088560e-01 + 2.8575136069576096e-01 1.0506751219797406e+00 -5.3953287629998159e-01 + 4.0676199787123080e-01 1.4255247314636958e+00 -7.5336988176510167e-01 + 5.4049366499080209e-01 1.7966109982219201e+00 -9.9668542972029550e-01 + 6.9412120102444652e-01 2.1391551822100277e+00 -1.2835360499410555e+00 + 8.7857451761577043e-01 2.4152333197224913e+00 -1.6174183883649191e+00 + 1.1039230891919691e+00 2.5868605643863622e+00 -1.9777602551719631e+00 + 1.3715840430199115e+00 2.6319022882959824e+00 -2.3237110889840058e+00 + 1.6694278420166546e+00 2.5612512439459501e+00 -2.6167209224150003e+00 + 1.9833008456984542e+00 2.4181194324960043e+00 -2.8452957821632010e+00 + 2.3082027822118052e+00 2.2492002369284050e+00 -3.0257688973604746e+00 + 2.6412622728235622e+00 2.0700585992021341e+00 -3.1912500115802542e+00 + 2.9751669856002536e+00 1.8559064533509777e+00 -3.3896899701233201e+00 + 3.2893662536181627e+00 1.5788974143396142e+00 -3.6729586780478227e+00 + 3.5387808246837582e+00 1.2490373062833582e+00 -4.0804801519194385e+00 + 3.6686017800859223e+00 9.1896527156834584e-01 -4.6077163702238257e+00 + 3.6881202414978818e+00 6.6291075419172185e-01 -5.1323973629839728e+00 + 3.7438185457923665e+00 5.4861891828185283e-01 -5.3654578195952487e+00 + id 13529 + loc 1.4421769976615906e-01 2.0091997459530830e-02 403 + blend 0.0000000000000000e+00 + interp 4.2261965004257501e-01:3.6122764098776933e-01:6.7650646710834739e-01:2.6814234608523674e-01:1.3124624685122348e+00:4.2261542384607459e-01:1.9935909167968786e+00:3.0198586603825206e-01:2.4295928450201836e+00:3.2121817133545533e-01:3.1307565887532420e+00:3.4418042133322269e-01:3.9942369520807031e+00 + CVs 20 + -1.2385815339655840e-01 3.5195381028155565e-01 -2.4823435010747255e-02 + -2.7770911472509535e-01 7.0755861576769452e-01 -2.1790682583342158e-02 + -4.4169052356243288e-01 1.0705809148515801e+00 -3.3211841592416524e-03 + -6.2254406557983699e-01 1.4360840895318205e+00 3.0693752425395626e-02 + -8.3149709647743830e-01 1.7874491218510609e+00 8.9628566693897516e-02 + -1.0640723360253346e+00 2.1039226840204330e+00 1.9136569948691273e-01 + -1.3017334849296072e+00 2.3645810376074015e+00 3.5550443876766757e-01 + -1.5190830959380646e+00 2.5469848018578221e+00 5.8802827186620743e-01 + -1.6891794665481537e+00 2.6318123922082419e+00 8.7190361468228139e-01 + -1.7996733057043102e+00 2.6180904866974624e+00 1.1766442003509305e+00 + -1.8615558825336000e+00 2.5170306462844030e+00 1.4817304815498911e+00 + -1.8987836957041215e+00 2.3334670712103178e+00 1.7792323601838023e+00 + -1.9290391091701953e+00 2.0702333036336453e+00 2.0540416087885425e+00 + -1.9499419537459757e+00 1.7463587179507216e+00 2.2858130302344568e+00 + -1.9660647071217465e+00 1.3760011325027099e+00 2.4895047406066899e+00 + -2.0360719302740229e+00 9.3030966598150910e-01 2.7281281998817115e+00 + -2.2670694502850965e+00 3.9575686817058120e-01 3.0379363392578260e+00 + -2.6632373014278805e+00 -1.3881671900453774e-01 3.3285631215814049e+00 + -2.9153323860565283e+00 -5.9589781258442742e-01 3.4397877571650053e+00 + id 13530 + loc 8.9600241184234619e-01 5.3095912933349609e-01 380 + blend 0.0000000000000000e+00 + interp 3.8876900801192160e-01:3.8876512032184152e-01:7.6922254317324246e-06:2.6374336858555197e-01:5.6682861462452450e-01:2.7629235375347350e-01:1.4080849090934309e+00:3.8393969833972724e-01:1.9998097942600557e+00:2.9403199353238602e-01:2.5397347409375151e+00:2.5110289891942816e-01:3.4484419023112931e+00 + CVs 20 + -4.9081895623993521e-01 2.3838417651975544e-01 -6.9308692243202574e-01 + -9.2917168334243638e-01 3.9220357858280097e-01 -1.1619581586070209e+00 + -1.3674574922302773e+00 5.2460965221377420e-01 -1.5809271830185525e+00 + -1.8297006741077397e+00 6.5454865543820440e-01 -2.0196488112871771e+00 + -2.3097926584907924e+00 7.6048693795214684e-01 -2.4822810660470846e+00 + -2.7999934721406730e+00 8.1221634563611567e-01 -2.9704011831341131e+00 + -3.2888156663208377e+00 7.7586167025160235e-01 -3.4821705353689589e+00 + -3.7541561606745222e+00 6.2384448947633575e-01 -4.0054112861804541e+00 + -4.1661257093846960e+00 3.4845499804017055e-01 -4.5100827252429667e+00 + -4.5026442379655869e+00 -3.2438190835875513e-02 -4.9589572002299782e+00 + -4.7581467020169015e+00 -4.9037724774372160e-01 -5.3294206012160554e+00 + -4.9320887717807986e+00 -9.9997251847583524e-01 -5.6102765214806221e+00 + -5.0238509803995139e+00 -1.5384644155379874e+00 -5.7972872029715745e+00 + -5.0446380185395618e+00 -2.1015290278494376e+00 -5.9149415282637969e+00 + -5.0197441562558458e+00 -2.7031106593781740e+00 -6.0130820652116181e+00 + -4.9910676680986032e+00 -3.3191322649109480e+00 -6.1283984725784357e+00 + -5.0147386118785864e+00 -3.8838412154279407e+00 -6.2542765347913880e+00 + -5.1162507697958377e+00 -4.3673393860201584e+00 -6.3598183167113236e+00 + -5.1892557669867614e+00 -4.8888154885264932e+00 -6.4775842867239248e+00 + id 13531 + loc 5.7691400870680809e-03 1.3956414163112640e-01 396 + blend 0.0000000000000000e+00 + interp 4.3866915270307527e-01:3.0819699619850827e-01:7.4616404127190172e-03:3.3126681680537673e-01:9.6012104164313627e-01:3.3830835178225832e-01:1.9314373977825283e+00:4.3866476601154825e-01:2.3699829436050481e+00:3.1534335883210662e-01:2.9638379510294741e+00 + CVs 20 + -2.2732251314445384e-01 2.1151124638036714e-01 -5.5349369827616057e-01 + -4.1426105430587923e-01 3.3771486607064205e-01 -9.9035561185507748e-01 + -5.7414933157203607e-01 4.4090447621359707e-01 -1.4087799998469268e+00 + -7.0829407140128131e-01 5.5218824264103650e-01 -1.8566678903540592e+00 + -8.1230257937342143e-01 6.6586247999292469e-01 -2.3322496804112327e+00 + -8.8828170562597886e-01 7.7495921205665175e-01 -2.8334691379882697e+00 + -9.4399203431781631e-01 8.7115244690151206e-01 -3.3601534561365911e+00 + -9.8938829431751485e-01 9.4110240589755123e-01 -3.9147950713583772e+00 + -1.0361906339618907e+00 9.6471413321996691e-01 -4.5013193891407637e+00 + -1.1014596384652546e+00 9.1555343403556400e-01 -5.1197387458344217e+00 + -1.2031071712140569e+00 7.6686081959146746e-01 -5.7524338615167414e+00 + -1.3436838019994115e+00 5.0991426422403219e-01 -6.3596525512741371e+00 + -1.5091902910748538e+00 1.5830043893537260e-01 -6.9050086110284594e+00 + -1.6882347632668577e+00 -2.7223769695302247e-01 -7.3713048119897664e+00 + -1.8768040331047258e+00 -7.6949173138088156e-01 -7.7472727634513285e+00 + -2.0684574701901357e+00 -1.3190370787161099e+00 -8.0204870040054903e+00 + -2.2487262480406729e+00 -1.9009502864819279e+00 -8.1813846644129207e+00 + -2.4026178866519050e+00 -2.4826609573019320e+00 -8.2303808184666991e+00 + -2.5149646179078684e+00 -2.8796095211475321e+00 -8.2226990497537269e+00 + id 13532 + loc 5.0579053163528442e-01 4.1120257228612900e-02 402 + blend 0.0000000000000000e+00 + interp 4.4315461044510251e-01:2.8923288458054752e-01:7.7571111366795131e-01:3.2359817169276800e-01:1.9004051772354660e+00:3.8817752594589416e-01:2.3748253788528295e+00:4.4315017889899810e-01:2.9877608308196244e+00:2.8456448472882023e-01:3.7726357876051089e+00 + CVs 20 + 3.4708101948532488e-01 3.1805179104890452e-01 6.1794713949732800e-02 + 6.6226350589787797e-01 6.6096539141482702e-01 1.8475070687991724e-01 + 9.4895921201282551e-01 9.9253619594249287e-01 3.4822386355437251e-01 + 1.2180420067456599e+00 1.2796580877345118e+00 5.2655578319530938e-01 + 1.4818743944142656e+00 1.5055310413952010e+00 7.0183864161750098e-01 + 1.7501062594103347e+00 1.6720078560392841e+00 8.7235142532643439e-01 + 2.0312540729738262e+00 1.7863761666222577e+00 1.0477952655311937e+00 + 2.3294445455982125e+00 1.8500990671176363e+00 1.2392451859350746e+00 + 2.6351812872104867e+00 1.8618560542431890e+00 1.4527861819502004e+00 + 2.9322938974543238e+00 1.8231701620208405e+00 1.6880592281414841e+00 + 3.1948577444998589e+00 1.7255446253970825e+00 1.9396311269703230e+00 + 3.3688202463123420e+00 1.5514320638909931e+00 2.1946536992041672e+00 + 3.4277665637061276e+00 1.2950194433269469e+00 2.4354991399690133e+00 + 3.4236792291112508e+00 9.4917388868579122e-01 2.6531927487208806e+00 + 3.4574702135369688e+00 5.2630365223547138e-01 2.8387513311094112e+00 + 3.6165349173649086e+00 9.7383582644209765e-02 2.9686310737474875e+00 + 3.9105575708294138e+00 -2.5918471986121183e-01 3.0374031517841305e+00 + 4.2878076078091096e+00 -5.2109732104022144e-01 3.0979671368989283e+00 + 4.6456757974424958e+00 -6.7586488913094889e-01 3.3133649663593143e+00 + id 13533 + loc 7.2495901584625244e-01 6.6027128696441650e-01 378 + blend 0.0000000000000000e+00 + interp 4.2552857002041744e-01:3.9085230471480625e-01:1.7873658426532246e-01:2.7251107982823225e-01:1.0325679170432596e+00:2.6877279762144296e-01:1.9855494002922096e+00:3.5502413505190233e-01:2.5853644367750501e+00:4.2552431473471725e-01:3.2761316088142127e+00:2.8176709430713498e-01:3.8807604914656673e+00 + CVs 20 + 4.5055949715316135e-01 3.5524995849234697e-01 1.0729112098607910e-01 + 8.6236100338990118e-01 6.5121428182697172e-01 2.0187021082714474e-01 + 1.2879539812873833e+00 9.0526981113854055e-01 2.7807561346353260e-01 + 1.7346098153658909e+00 1.1326247135762861e+00 3.3914528074795036e-01 + 2.1838519795138236e+00 1.3395644113703495e+00 3.9508789492766683e-01 + 2.6305755233805619e+00 1.5206686741928270e+00 4.5674190379158902e-01 + 3.0783732251449916e+00 1.6604469305265201e+00 5.3229749150111416e-01 + 3.5244884858062484e+00 1.7462887627139547e+00 6.2747167603608200e-01 + 3.9592118727508652e+00 1.7753267856825723e+00 7.4144722727958867e-01 + 4.3716445717415144e+00 1.7527263130190096e+00 8.6476631815193905e-01 + 4.7504843348758685e+00 1.6896369251924241e+00 9.8385093514454613e-01 + 5.0911258457244148e+00 1.5992576442909316e+00 1.0886089797372156e+00 + 5.3969862254595018e+00 1.4755262672628793e+00 1.1789563242063288e+00 + 5.6635416538519330e+00 1.2802167941247284e+00 1.2520596516327724e+00 + 5.8787450851577043e+00 9.9124529504850489e-01 1.3058923606303998e+00 + 6.0396406438354928e+00 6.3853428626665432e-01 1.3673574936179882e+00 + 6.1579328495053804e+00 2.7303821809860462e-01 1.4677071483909949e+00 + 6.2949305541782721e+00 -7.2077529041592481e-02 1.5939595783294072e+00 + 6.5446893497638161e+00 -3.5674514293741089e-01 1.6883829175380654e+00 + id 13534 + loc 6.5341168642044067e-01 7.7115029096603394e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4754224892463623e-01:3.0740334764717453e-01:8.4455044689259695e-01:4.4753777350214702e-01:1.0356725121630515e+00:3.7549983663211112e-01:1.7701368308403411e+00:2.9084900655730295e-01:2.2003569331621939e+00:2.9102222568477881e-01:3.0038187641202381e+00:2.8851215919301526e-01:3.9818454122857245e+00 + CVs 20 + 2.4853645843340627e-01 3.0392423830377230e-01 -1.2229374476437627e-01 + 4.7061085895399990e-01 6.0682515295207584e-01 -2.6474666670752711e-01 + 6.7773662423181324e-01 8.9432279178631446e-01 -4.3795125174611893e-01 + 8.7207504600418118e-01 1.1532430175105355e+00 -6.4914082476089829e-01 + 1.0477431317663797e+00 1.3711428120257614e+00 -9.0064773173498103e-01 + 1.1960476428947031e+00 1.5375859769447699e+00 -1.1889888306338201e+00 + 1.3079901357773362e+00 1.6478385133087059e+00 -1.5021586411736398e+00 + 1.3778473914672564e+00 1.7044414420472540e+00 -1.8220867139423378e+00 + 1.4074459934883317e+00 1.7149873343242281e+00 -2.1328959845750961e+00 + 1.4077650365068646e+00 1.6859391116284557e+00 -2.4303641914363383e+00 + 1.3916136606702230e+00 1.6141866151646416e+00 -2.7212841235786223e+00 + 1.3673055015644136e+00 1.4851508287561395e+00 -3.0149421762717949e+00 + 1.3438690174936945e+00 1.2943147525621626e+00 -3.3042439802628771e+00 + 1.3451462743113480e+00 1.0932562786701456e+00 -3.5550477344518936e+00 + 1.3950032427512820e+00 9.9147416617511319e-01 -3.6967729180369688e+00 + 1.4661857026408758e+00 1.0129449337950185e+00 -3.6012242597425912e+00 + 1.4503745252125273e+00 9.3183945005442526e-01 -3.2745008364050427e+00 + 1.2317912088939094e+00 5.0059887028806949e-01 -2.9939268002679711e+00 + 1.3310332961594262e+00 6.1679495942524609e-01 -2.9378148265379807e+00 + id 13535 + loc 5.2034461498260498e-01 8.7317878007888794e-01 409 + blend 0.0000000000000000e+00 + interp 3.0394391218147043e-01:3.0394087274234866e-01:6.0881593329825801e-01:2.9353384432756335e-01:1.7130387467807262e+00:2.7499589232109267e-01:2.9782646941620592e+00:3.0104781643465417e-01:3.8367479307859496e+00 + CVs 20 + 5.2950660493934665e-01 1.1557050266243910e-01 -1.3619945417715587e-01 + 9.7727807456718230e-01 1.8539936919728756e-01 -2.7511923883898215e-01 + 1.4198551066377003e+00 2.4464221828034732e-01 -3.8859997988504835e-01 + 1.8809626589473423e+00 3.0160695759461986e-01 -4.6890365966558684e-01 + 2.3531535890116064e+00 3.4851594350841952e-01 -5.1860185726606811e-01 + 2.8300993247249626e+00 3.7784747533443475e-01 -5.4110934008878764e-01 + 3.3060216480044295e+00 3.7938330087950756e-01 -5.3963978505104004e-01 + 3.7747167391546554e+00 3.3802139068871306e-01 -5.1781378738800943e-01 + 4.2286606436785821e+00 2.3771303183624459e-01 -4.8329510107970108e-01 + 4.6548086033104292e+00 6.5421858768182961e-02 -4.5017841766465855e-01 + 5.0324822647820184e+00 -1.8376384557922609e-01 -4.3435260960422062e-01 + 5.3453415415896508e+00 -4.9960253979174940e-01 -4.4558655205643638e-01 + 5.5929826532171996e+00 -8.6319354507955781e-01 -4.8653307838807841e-01 + 5.7820644552798646e+00 -1.2589678840528271e+00 -5.5810807123665618e-01 + 5.9144006183564013e+00 -1.6753369897407357e+00 -6.5817585109521359e-01 + 5.9879219023148957e+00 -2.1027044356711997e+00 -7.7408038323381123e-01 + 6.0069429310162494e+00 -2.5347628877284936e+00 -8.8876442711066050e-01 + 5.9931163073059608e+00 -2.9669694023511806e+00 -1.0090895461003782e+00 + 6.1055418643111512e+00 -3.4033644243106025e+00 -1.1504587620645887e+00 + id 13536 + loc 1.7494958639144897e-01 1.1525651440024376e-02 415 + blend 0.0000000000000000e+00 + interp 4.7369498257242787e-01:2.4103588565499670e-01:3.0778691897818367e-01:3.9810754678257326e-01:1.0046059648369856e+00:2.0917328297958535e-01:1.8435142037277510e+00:4.7369024562260215e-01:2.8823553225228107e+00:4.1541997522439811e-01:3.1094404632215964e+00:3.7843618300658033e-01:3.8589990810192574e+00 + CVs 20 + -7.2005928832404795e-02 8.8839867851500665e-02 8.4273230764042219e-03 + -1.6820599711803005e-01 1.4967288010911092e-01 4.7341247236372092e-02 + -2.8587799849877826e-01 2.4227618619425118e-01 9.7398860862583772e-02 + -4.1294928225926297e-01 3.6812373769721657e-01 1.3343696317430687e-01 + -5.3837454016439534e-01 5.3483011290480975e-01 1.4878440640872284e-01 + -6.4687826610718457e-01 7.4488242074929889e-01 1.3814891944264465e-01 + -7.2204861137528253e-01 9.9064691716955688e-01 1.0071210688851298e-01 + -7.5447570605575820e-01 1.2516779889572152e+00 4.3418740720687146e-02 + -7.4463278392546728e-01 1.5095119892365183e+00 -2.3216918945617143e-02 + -6.8904301520190170e-01 1.7624977378632314e+00 -8.9572520805415168e-02 + -5.7603046759068011e-01 2.0136576724550528e+00 -1.4672703909527413e-01 + -4.0394253623451515e-01 2.2516286451642284e+00 -1.9008464920973989e-01 + -1.9205957694435938e-01 2.4564079448689906e+00 -2.2247774652418634e-01 + 3.7525575146397427e-02 2.6193642362307186e+00 -2.4888374857278428e-01 + 2.8038765785431075e-01 2.7464797911544672e+00 -2.7316757661555152e-01 + 5.4427156213219985e-01 2.8449886704438567e+00 -2.9836255938190537e-01 + 8.3520827755561178e-01 2.9161001297366296e+00 -3.2664133600937284e-01 + 1.1523583535233062e+00 2.9570582580475562e+00 -3.5641211057199507e-01 + 1.3894582253164041e+00 2.9726970139762607e+00 -3.3420539291963236e-01 + id 13537 + loc 1.2358006834983826e-01 1.2326563149690628e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5209893216875013e-01:3.8009630519024312e-01:6.4316977394816077e-01:2.7060181580232745e-01:1.0483104675270427e+00:4.5209441117942845e-01:1.6649332624084781e+00:4.0193157859262374e-01:2.1060755950523946e+00:3.5285014348894073e-01:2.9425977909224064e+00:4.3800864616853047e-01:3.2971075941509702e+00:2.8001382249931178e-01:3.9999557182116385e+00 + CVs 20 + -2.4890843995204590e-01 2.4137661333566085e-01 -2.2932350963530357e-02 + -4.6401667762807269e-01 5.0728294385912376e-01 -2.7818710779064781e-02 + -6.4867692602751248e-01 7.9438516131942227e-01 -1.6574102532387669e-02 + -8.2111394198612930e-01 1.0945591433845365e+00 -1.1803538873089381e-02 + -1.0089905327604485e+00 1.3875441703661200e+00 -5.3528773271823371e-02 + -1.2269518353507447e+00 1.6395252355399408e+00 -1.6807999615128688e-01 + -1.4654490539642939e+00 1.8145492084476134e+00 -3.5379965636912802e-01 + -1.6940483340889712e+00 1.8891110545139784e+00 -5.9428887114136242e-01 + -1.8713083990429140e+00 1.8612193282062250e+00 -8.6801139955683226e-01 + -1.9669670045364778e+00 1.7470981588067136e+00 -1.1455133584559780e+00 + -1.9858599516298925e+00 1.5703807153783096e+00 -1.3964922712414125e+00 + -1.9566657839983883e+00 1.3484868550307088e+00 -1.6060450492558955e+00 + -1.8958646387139633e+00 1.0926400820011852e+00 -1.7713317302492759e+00 + -1.7927507898531461e+00 8.2237052633434704e-01 -1.8790331792315589e+00 + -1.6441631456231154e+00 5.4706485692061979e-01 -1.9254375437267668e+00 + -1.4633273693719113e+00 2.3327283994568115e-01 -1.9693924613901252e+00 + -1.2665295146807498e+00 -1.2869815240425164e-01 -2.1374994288991807e+00 + -1.1281699418993274e+00 -3.9026551703133583e-01 -2.5236071327716494e+00 + -1.1303893863513934e+00 -4.5199018398783419e-01 -2.8980443840151491e+00 + id 13538 + loc 8.7353732669726014e-04 1.7974689602851868e-02 373 + blend 0.0000000000000000e+00 + interp 4.9865540857917234e-01:2.4707921503533720e-01:2.8796790059525723e-01:4.9865042202508658e-01:1.1575570204973462e+00:2.5759952852652634e-01:1.9215258781572531e+00:3.0447306748992259e-01:2.1306932400954772e+00:2.6069575393475458e-01:2.8541074039181726e+00:3.7756631396534013e-01:3.0961107536459078e+00:2.9640023144624944e-01:3.9653738061146662e+00 + CVs 20 + -1.1288105089113531e-01 6.9898689525854008e-01 4.5616038937205922e-01 + -2.9173125594908506e-01 1.3938858581250031e+00 8.7144460142284430e-01 + -5.6805763701095202e-01 2.0885675805819419e+00 1.2528395257066429e+00 + -9.3132466530227997e-01 2.7784211334832216e+00 1.5740278834888870e+00 + -1.3494261076626000e+00 3.4338803244260934e+00 1.6104694178542802e+00 + -1.8523687491115239e+00 3.9032222437566766e+00 1.2660125883822400e+00 + -2.3762844749697938e+00 4.0315794632697726e+00 6.3801942076973628e-01 + -2.8234210817589891e+00 3.7759953824035257e+00 -1.2161501529065188e-01 + -3.1324846874565404e+00 3.1790801925526937e+00 -8.9366306619610958e-01 + -3.2650282184946398e+00 2.3189223650487403e+00 -1.5946209470299344e+00 + -3.2110195826465171e+00 1.3103583565473871e+00 -2.1672509357432381e+00 + -2.9978386737721308e+00 2.8933122238462428e-01 -2.6077811109129900e+00 + -2.6501964279002999e+00 -6.2268721901855351e-01 -2.9668823158230397e+00 + -2.2203643028179707e+00 -1.3458876261085826e+00 -3.3072620140196465e+00 + -1.8225475820830275e+00 -1.8369688508995177e+00 -3.6890910035463449e+00 + -1.5473159178355058e+00 -2.1542361098484597e+00 -4.1930202297234764e+00 + -1.4769417081886742e+00 -2.3550116848569518e+00 -4.8680698183342876e+00 + -1.7820552949100139e+00 -2.4572198682904336e+00 -5.6966474689628175e+00 + -2.3571575620159608e+00 -2.5219207452293340e+00 -6.4840275285224713e+00 + id 13539 + loc 2.7372503280639648e-01 5.8523976802825928e-01 1080 + blend 0.0000000000000000e+00 + interp 3.6133886324868630e-01:3.6133524986005383e-01:3.2294064989246696e-03:2.7240740339565062e-01:8.2861753458789511e-01:3.2467787189385339e-01:1.3214667940345384e+00:3.0974646253906502e-01:1.9961323106846962e+00:2.6550728348502356e-01:2.9999465845995648e+00 + CVs 20 + -1.5859623240065124e-01 2.0949874716753086e-01 3.1076089810050278e-01 + -2.5217918670957667e-01 3.1684590510177407e-01 4.5059453216864925e-01 + -3.3192567209247142e-01 3.8663516276224935e-01 5.3620702593386638e-01 + -4.1763115168356829e-01 4.4644985712073054e-01 6.2367169027688429e-01 + -5.0695347737778484e-01 4.9621861340242612e-01 7.0918650445306830e-01 + -5.9805163343753187e-01 5.3655106533353381e-01 7.9041066615809696e-01 + -6.9008466558493775e-01 5.6855400124160860e-01 8.6634201273741351e-01 + -7.8331992632673830e-01 5.9345967580069425e-01 9.3656343462309488e-01 + -8.7925319970020221e-01 6.1183829503565423e-01 1.0005564484479632e+00 + -9.8073522607493246e-01 6.2285844526132328e-01 1.0571578471990404e+00 + -1.0916250939944614e+00 6.2423041475855012e-01 1.1042321738374694e+00 + -1.2159502648802281e+00 6.1288039969029628e-01 1.1388996531669620e+00 + -1.3564908857482014e+00 5.8622745440727386e-01 1.1591586032448751e+00 + -1.5132522833400996e+00 5.4322429884621581e-01 1.1659067474047553e+00 + -1.6836617714313025e+00 4.8412996241795275e-01 1.1615971186481724e+00 + -1.8642378266376067e+00 4.0970447082966766e-01 1.1472051029530677e+00 + -2.0504166532505685e+00 3.2098496957699085e-01 1.1234403320108035e+00 + -2.2326825301565156e+00 2.1993268741740357e-01 1.0952950718296657e+00 + -2.3916976986456420e+00 9.7886424046343179e-02 1.0763087668766163e+00 + id 13540 + loc 6.2714219093322754e-01 8.4735798835754395e-01 400 + blend 0.0000000000000000e+00 + interp 4.3197303008154203e-01:3.2554171680668803e-01:6.1566724459422761e-01:3.0616685904117097e-01:1.0415566908820437e+00:4.1475976590753372e-01:1.7945246985376981e+00:2.7811535599469517e-01:2.2538838886491033e+00:3.5317233633040662e-01:3.0456049344777454e+00:4.3196871035124124e-01:3.8690029901585392e+00 + CVs 20 + -1.1726972557962317e-01 1.9459198222469823e-01 -1.3102720344911789e-01 + -2.4866495683207676e-01 4.0792295298058895e-01 -2.8786819178545653e-01 + -3.6887747550677902e-01 6.2695745407698644e-01 -4.7240419040966503e-01 + -4.6904194433767221e-01 8.4170481571958999e-01 -6.8224898923937816e-01 + -5.5386631147187471e-01 1.0477201278723434e+00 -9.1262135546277867e-01 + -6.2570688652278472e-01 1.2451792623122668e+00 -1.1575187713168824e+00 + -6.8278655413480527e-01 1.4388365029994690e+00 -1.4150990494893705e+00 + -7.2258925388268302e-01 1.6322634728621717e+00 -1.6914547438760055e+00 + -7.4332669177312372e-01 1.8211664242425782e+00 -1.9967097634262279e+00 + -7.4373951929120852e-01 1.9940147125052869e+00 -2.3374688714677694e+00 + -7.2261271630549329e-01 2.1377851549849476e+00 -2.7156380129789324e+00 + -6.7863328324401673e-01 2.2395353128925324e+00 -3.1306193476359936e+00 + -6.1227380643643015e-01 2.2847726525725180e+00 -3.5782192921965690e+00 + -5.2718507563739503e-01 2.2588457275214555e+00 -4.0478789685490195e+00 + -4.2516358284648209e-01 2.1494932709450243e+00 -4.5261627794563939e+00 + -3.0283561316371388e-01 1.9475544529883870e+00 -4.9954346794679285e+00 + -1.6092198091991988e-01 1.6534398251284437e+00 -5.4265422620784758e+00 + -2.4785525431066963e-02 1.2998628521092765e+00 -5.7788815843721260e+00 + 3.7778982629160154e-03 1.0473111620986733e+00 -5.9648294424949269e+00 + id 13541 + loc 4.8723708838224411e-02 9.0556687116622925e-01 395 + blend 0.0000000000000000e+00 + interp 4.6559865964187602e-01:4.1486228330329411e-01:8.2246897387914175e-01:4.2432001611369263e-01:1.2138109250072067e+00:3.3239460502838342e-01:1.9117763044858918e+00:4.6559400365527964e-01:2.4361775000167998e+00:4.2207843462468719e-01:3.2226348479785236e+00:4.0485553208425201e-01:3.9735503664249121e+00 + CVs 20 + 5.2998598196203417e-01 1.4905770142905347e-01 -2.5315552724778428e-01 + 9.7100489797471834e-01 2.0563048277764573e-01 -4.7502333395904983e-01 + 1.4057827712933140e+00 2.2987840676018140e-01 -6.7269545777789452e-01 + 1.8611444977845137e+00 2.3785235462946186e-01 -8.4146524020565083e-01 + 2.3301154752972146e+00 2.2270077096728413e-01 -9.7408368254330902e-01 + 2.8034400947519940e+00 1.7938530047584700e-01 -1.0708491483778877e+00 + 3.2691380247233703e+00 1.0303037438940654e-01 -1.1353128089654065e+00 + 3.7128238409779568e+00 -1.2431862038602359e-02 -1.1704482534558500e+00 + 4.1226863940963003e+00 -1.7167984910395773e-01 -1.1830381929001195e+00 + 4.4889937757492513e+00 -3.7703044872863467e-01 -1.1871928135893972e+00 + 4.8003040311530203e+00 -6.2439515933265310e-01 -1.1929035051892867e+00 + 5.0508139078476750e+00 -8.9950439930493831e-01 -1.1989883316742413e+00 + 5.2462403017249564e+00 -1.1879373895339498e+00 -1.2065045770949590e+00 + 5.3951499576893003e+00 -1.4840119658774533e+00 -1.2258691953688632e+00 + 5.4980101805899997e+00 -1.7814246733096741e+00 -1.2647507985372426e+00 + 5.5493577235333582e+00 -2.0629410068517036e+00 -1.3192477289753737e+00 + 5.5517711177045976e+00 -2.3146116570719251e+00 -1.3841507131361122e+00 + 5.5201701476544525e+00 -2.5511819877837092e+00 -1.4665440023282525e+00 + 5.4919958341944470e+00 -2.8591615498800058e+00 -1.5992411030069098e+00 + id 13542 + loc 6.7844080924987793e-01 4.5669898390769958e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6578083017870486e-01:4.6577617237040309e-01:4.8056050738261213e-01:3.7813638851909748e-01:9.3616873878004059e-01:2.7695631448763153e-01:1.2882282209823459e+00:2.8232961701590570e-01:2.0191994549573793e+00:2.6602399385009495e-01:2.9005641714709975e+00:3.5051094838972785e-01:3.2223518602556624e+00:2.7831911941478249e-01:3.9180686561853335e+00 + CVs 20 + -7.1813843080669515e-02 3.3379034058721863e-01 2.3967604783035185e-01 + -1.5719775159832464e-01 6.4930541576507628e-01 4.6017833025009730e-01 + -2.4070232678603373e-01 9.4992395823439080e-01 6.7158365064308412e-01 + -3.1559548227575407e-01 1.2370101313244091e+00 8.8231416717656019e-01 + -3.8047036380395233e-01 1.5117787955591504e+00 1.0989933852853848e+00 + -4.3330549049667211e-01 1.7726935824496910e+00 1.3320187918486750e+00 + -4.7399095092732130e-01 2.0081802241947750e+00 1.5985558814055842e+00 + -5.0301349205491408e-01 2.2040789105947098e+00 1.9062528032497381e+00 + -5.2414816863895863e-01 2.3505622405368194e+00 2.2500310971608211e+00 + -5.5016632723071901e-01 2.4215503721743281e+00 2.6248865347288102e+00 + -5.9488788156150973e-01 2.3756239157200216e+00 3.0200213953788810e+00 + -6.6734508421969774e-01 2.2033772295918554e+00 3.4189062706043138e+00 + -7.7406830836677587e-01 1.9500084584833193e+00 3.8094711390680560e+00 + -9.0241519618690058e-01 1.6736471499277585e+00 4.1839496763308306e+00 + -1.0125930635740525e+00 1.3955405613701082e+00 4.5492306859610938e+00 + -1.0535336125411923e+00 1.1290415416910315e+00 4.9241201017806278e+00 + -9.8223391897220802e-01 9.2071032182503987e-01 5.3197851797534126e+00 + -7.8916778576526436e-01 7.8268135215202039e-01 5.7692203809267237e+00 + -5.2684454554880922e-01 5.9990097162434908e-01 6.4030269308249679e+00 + id 13543 + loc 8.6174803972244263e-01 1.8168401718139648e-01 412 + blend 0.0000000000000000e+00 + interp 3.7513946341999299e-01:2.8756154421243224e-01:9.7042833037411758e-01:3.7513571202535878e-01:1.7473079487165275e+00:3.3844772056203448e-01:2.2362344470121238e+00:2.8571839149858003e-01:3.1196299795058873e+00:3.2554478238744289e-01:3.9998500878451093e+00 + CVs 20 + -6.3569881390632799e-01 1.2388600482544207e-01 2.1517961602798363e-01 + -1.1054754173761969e+00 1.6222227712530396e-01 4.1357834021838119e-01 + -1.5753240955581140e+00 2.0348632625425805e-01 5.9881266250270393e-01 + -2.0825442938035481e+00 2.7473459498139596e-01 7.5753542376594107e-01 + -2.6079881799006759e+00 3.5321978737750648e-01 8.9623102139853916e-01 + -3.1444400254685694e+00 4.0308598256900707e-01 1.0425553403849215e+00 + -3.6913544874866848e+00 3.7931164049466393e-01 1.2391504929862454e+00 + -4.2387273835046351e+00 2.3604468643552567e-01 1.5159681354852332e+00 + -4.7627323110087021e+00 -6.0630902837712108e-02 1.8546313115966020e+00 + -5.2303263019562074e+00 -5.2355575934594678e-01 2.1879061348645239e+00 + -5.6269438462660792e+00 -1.1307336767948812e+00 2.4499193650119384e+00 + -5.9972609492125732e+00 -1.8377047206788788e+00 2.6495742004242580e+00 + -6.4019820001338807e+00 -2.6052937008810839e+00 2.8583350844627073e+00 + -6.8760337465491244e+00 -3.3880301038364995e+00 3.1450689699932912e+00 + -7.4201749003941249e+00 -4.1227210156566372e+00 3.5271054381887126e+00 + -7.9980020338179001e+00 -4.7353133934848497e+00 3.9118785570288961e+00 + -8.5404335695450015e+00 -5.2081682399319931e+00 4.1918786583484060e+00 + -8.9652561094706034e+00 -5.5681557639477059e+00 4.3861883904751817e+00 + -9.2239113781910831e+00 -5.8945580989415216e+00 4.6258637686789665e+00 + id 13544 + loc 5.2853077650070190e-01 4.5491553843021393e-02 399 + blend 0.0000000000000000e+00 + interp 2.7677445991729616e-01:2.7133602333198847e-01:3.3227870774933366e-01:2.5349932120405011e-01:1.0262052592781663e+00:2.7677169217269698e-01:2.1121421459623746e+00:2.5434768346701669e-01:3.0845984893042604e+00 + CVs 20 + 3.1133220200438128e-01 2.9505300938910012e-01 1.7497988969191247e-01 + 6.1501281303120436e-01 5.8375982832304985e-01 3.5633111873091639e-01 + 9.2012995884229420e-01 8.6151297342113575e-01 5.6637989811391320e-01 + 1.2366747285248867e+00 1.1184853112594615e+00 8.0502878719131754e-01 + 1.5743952134483634e+00 1.3435378008008605e+00 1.0571652272714149e+00 + 1.9391206112022892e+00 1.5257234947096645e+00 1.3136427826816885e+00 + 2.3253319871403093e+00 1.6467324560875074e+00 1.5731250955871785e+00 + 2.7167834883430690e+00 1.6815268003558999e+00 1.8301210829296972e+00 + 3.0875321924950945e+00 1.6090782208005485e+00 2.0699781492906499e+00 + 3.4050496820011458e+00 1.4269114287572775e+00 2.2713691254319484e+00 + 3.6396963697277469e+00 1.1613002212901919e+00 2.4153115427845835e+00 + 3.7880451268566193e+00 8.6441362652533815e-01 2.5106872987238300e+00 + 3.8800562857201082e+00 5.7515145255862532e-01 2.6041368063562356e+00 + 3.9559945754556756e+00 2.9557173495105959e-01 2.7544286470431820e+00 + 4.0498816399767747e+00 1.3301108964923980e-02 3.0138350585940517e+00 + 4.1585155374785501e+00 -2.5864555643565368e-01 3.4038606385309085e+00 + 4.2367088260233707e+00 -4.7619204057339537e-01 3.9179788239573536e+00 + 4.2218773300723367e+00 -5.8004780646682141e-01 4.4751243350328203e+00 + 4.1113387251526063e+00 -5.7015191403858756e-01 4.7113657280286567e+00 + id 13545 + loc 1.5759946405887604e-01 5.3686124086380005e-01 393 + blend 0.0000000000000000e+00 + interp 4.8313948822290714e-01:3.1002953315862047e-01:1.1559511395597633e-02:4.7629387745522461e-01:5.1758883275902767e-01:4.2970658387905580e-01:9.9712393594462867e-01:4.3435942205809452e-01:1.4898584783277675e+00:2.8029088675895608e-01:1.9937397023797103e+00:4.8313465682802492e-01:2.7297443550312805e+00:3.3125932317891876e-01:3.0210099019714329e+00 + CVs 20 + -3.8337626039505357e-01 2.9962070494467863e-01 -1.6569873452681155e-02 + -7.2492553438826102e-01 6.0231327164586035e-01 -3.4213956777926970e-02 + -1.0402496173812199e+00 9.1966950974700712e-01 -6.0247017776083246e-02 + -1.3413021215698924e+00 1.2508535846409692e+00 -1.0499842949962188e-01 + -1.6401204561356477e+00 1.5815251373399719e+00 -1.8057220206460972e-01 + -1.9513283623651241e+00 1.8961472904291092e+00 -2.9026694153413757e-01 + -2.2900758078791283e+00 2.1835701242442065e+00 -4.2592010880833880e-01 + -2.6766972877721584e+00 2.4259997339859329e+00 -5.7491874407739885e-01 + -3.1369335495326620e+00 2.5860700093377758e+00 -7.2832921354983582e-01 + -3.6803451062996304e+00 2.6311716869776092e+00 -8.9036535721493704e-01 + -4.2760290133607679e+00 2.5659963692643819e+00 -1.0814662443958691e+00 + -4.8654733753205646e+00 2.4037087905776318e+00 -1.3097141900463076e+00 + -5.3997459953920490e+00 2.1391331930841639e+00 -1.5592270021888330e+00 + -5.8527248245060797e+00 1.7699635750366673e+00 -1.8174728810941687e+00 + -6.2147425821791789e+00 1.3243705778934147e+00 -2.0740440512572986e+00 + -6.5198662134001593e+00 8.4246102267753087e-01 -2.2899914974465143e+00 + -6.8485456350915515e+00 3.4857336295273367e-01 -2.4059071587439163e+00 + -7.2448789716949946e+00 -1.4673814823887654e-01 -2.4280290138917899e+00 + -7.7136929801297107e+00 -6.5806774218386588e-01 -2.5069227145490309e+00 + id 13546 + loc 3.2768648862838745e-01 8.0816882848739624e-01 380 + blend 0.0000000000000000e+00 + interp 4.6557915201614297e-01:4.3152998722102603e-01:6.8062484383341060e-03:4.6557449622462282e-01:5.5835709867647931e-01:4.0150441448094876e-01:1.0142921904156068e+00:3.7069365472403415e-01:1.9445847998037915e+00:4.1918461877515767e-01:2.3774864206734856e+00:2.9666009959367051e-01:3.3843028640654862e+00 + CVs 20 + -3.8709884386722748e-01 2.6507648149450447e-01 -4.5097915556634571e-01 + -7.8368238396910050e-01 4.8273335570243248e-01 -7.7347537360684371e-01 + -1.2090186264775913e+00 6.9442042687445882e-01 -1.0689082466136515e+00 + -1.6725541156046799e+00 9.2236942715948755e-01 -1.3893344003939503e+00 + -2.1636180793000444e+00 1.1599174057510369e+00 -1.7505727142686021e+00 + -2.6708704867321726e+00 1.3854345978853095e+00 -2.1650711342628668e+00 + -3.1848858380065379e+00 1.5659607523342089e+00 -2.6430866296074900e+00 + -3.6917327376102507e+00 1.6631808447889704e+00 -3.1845814476013112e+00 + -4.1744319792638045e+00 1.6437810013458241e+00 -3.7614752245541929e+00 + -4.6186875792045257e+00 1.4965875310770813e+00 -4.3248345159837385e+00 + -5.0205598587934279e+00 1.2256706083903550e+00 -4.8382263379902675e+00 + -5.3812951502769915e+00 8.3085452714588470e-01 -5.2916118176683247e+00 + -5.6935934471653891e+00 3.2348346234816550e-01 -5.6691685225466486e+00 + -5.9569538515017868e+00 -2.1337854449227311e-01 -5.9552325427993758e+00 + -6.1962560906572257e+00 -6.6723238062641554e-01 -6.1851364297499503e+00 + -6.4350191355832997e+00 -9.6689454440024836e-01 -6.3873493560292172e+00 + -6.6735096026691414e+00 -1.0536803223456173e+00 -6.5223300563620850e+00 + -6.8747917492331085e+00 -9.3657568154378268e-01 -6.5482957539557605e+00 + -7.1280987151153905e+00 -1.1607657287129314e+00 -6.7350794796017457e+00 + id 13547 + loc 9.5788963139057159e-02 4.5658701658248901e-01 376 + blend 0.0000000000000000e+00 + interp 4.8392975096249291e-01:3.8001603425548902e-01:3.0360175161666114e-02:4.8392491166498330e-01:5.3581968372162225e-01:3.6035815781128777e-01:9.9998033042050483e-01:4.4041751636432386e-01:1.8372924466930440e+00:4.5916558955955017e-01:2.2024519587407303e+00:4.1457323421475467e-01:2.8096084611402770e+00:3.7713855237265997e-01:3.1908919710535226e+00 + CVs 20 + 5.4668342883072696e-01 4.5923208622801703e-01 3.1590003007757167e-01 + 1.0471046582839911e+00 8.1658228812867240e-01 5.3151727464559384e-01 + 1.5832014893072113e+00 1.0317966363065671e+00 6.2097044161951531e-01 + 2.1062198948104887e+00 1.1186931572954955e+00 5.9402071904325193e-01 + 2.5763381556217553e+00 1.1531341211366564e+00 4.7933409132381971e-01 + 3.0250020163774467e+00 1.1903352569151839e+00 3.1190711147564909e-01 + 3.5070240863089674e+00 1.2346560795759542e+00 1.4832945001597742e-01 + 4.0485371121077796e+00 1.2743649987477093e+00 5.0927951048629794e-02 + 4.6452444935784589e+00 1.3172864653453349e+00 6.3537202034096740e-02 + 5.2704374601358008e+00 1.3748224638334052e+00 2.2043278461560711e-01 + 5.8809743982728797e+00 1.4304972947364269e+00 5.2327166334156949e-01 + 6.4425748931085751e+00 1.4498787419730370e+00 9.3908065830679344e-01 + 6.9230503146170568e+00 1.3882497711208210e+00 1.4296895348595975e+00 + 7.2877957783009792e+00 1.2093144883503211e+00 1.9500178190318809e+00 + 7.4996063467081431e+00 9.2903227386128329e-01 2.4506224876736198e+00 + 7.5105484336409400e+00 6.1339438615487518e-01 2.8871090657194518e+00 + 7.3356287953775201e+00 3.0437941331322982e-01 3.2385033150538254e+00 + 7.1228761339430875e+00 -9.4169944617620072e-02 3.4379476327647507e+00 + 7.0892303259104352e+00 -6.3828427744278438e-01 3.2930016971319236e+00 + id 13548 + loc 2.8462696075439453e-01 9.1354680061340332e-01 402 + blend 0.0000000000000000e+00 + interp 5.0802605407965595e-01:4.6617968239589258e-01:7.7794113852795999e-02:5.0802097381911515e-01:8.6765164102971504e-01:3.0836553206445289e-01:1.1639603513746088e+00:3.3321591375709891e-01:1.7914204222401082e+00:3.5167995609658387e-01:2.7548128958838829e+00:4.1485767581204791e-01:3.5589981541106415e+00 + CVs 20 + -9.1952079089666433e-02 1.1538860091152760e-01 -3.8972298855187729e-02 + -1.5712024115477449e-01 2.6446350294863208e-01 -1.0006387308319015e-01 + -1.9957785703622635e-01 4.2868989285553782e-01 -1.7362122890243631e-01 + -2.2743566799981901e-01 5.9750539944059433e-01 -2.5651298584017129e-01 + -2.4080277127498428e-01 7.6742732282278281e-01 -3.4635030542270673e-01 + -2.4374196767801426e-01 9.3723175117423230e-01 -4.4052702145129413e-01 + -2.4338552223946402e-01 1.1080390049247710e+00 -5.3860698581840949e-01 + -2.4979412579385701e-01 1.2820331760909953e+00 -6.4330592944486353e-01 + -2.7518933911149768e-01 1.4588759976756012e+00 -7.5785299777736637e-01 + -3.3176887705056624e-01 1.6354113491529887e+00 -8.8321391686185347e-01 + -4.2977780107896679e-01 1.8077457320033905e+00 -1.0181112030171917e+00 + -5.7308789061618615e-01 1.9661589708070544e+00 -1.1552837540490997e+00 + -7.5890476976378829e-01 2.1022207212540236e+00 -1.2861130840674675e+00 + -9.7043434439551002e-01 2.2081753582003603e+00 -1.3961744944042418e+00 + -1.1782464311700163e+00 2.2836789128231412e+00 -1.4686608555784377e+00 + -1.3674400730397762e+00 2.3381260607346350e+00 -1.4989778328835124e+00 + -1.5584643925343880e+00 2.3793362600259353e+00 -1.4952179639529342e+00 + -1.7710341297676553e+00 2.4039503168806307e+00 -1.4605238253735293e+00 + -1.9987807761013241e+00 2.4059502590552415e+00 -1.3976860923056806e+00 + id 13549 + loc 8.5418057441711426e-01 9.9951052665710449e-01 382 + blend 0.0000000000000000e+00 + interp 3.3918663446725072e-01:2.7897384502468481e-01:5.4391766081746562e-02:3.0502464686139014e-01:9.6603671317587203e-01:1.6411117021285379e-01:1.6252029158128705e+00:2.8538500875193651e-01:2.2763269625513258e+00:3.3918324260090604e-01:3.7400038608088124e+00 + CVs 20 + 1.1545794497995008e+00 1.9505986899817215e-01 -5.5907291120578206e-01 + 1.8700744852680673e+00 1.8453956731709928e-01 -9.7149940201468143e-01 + 2.4839661025109692e+00 7.7684177523046127e-02 -1.3792928138700629e+00 + 3.1327044612446375e+00 -7.0732070337558517e-02 -1.8421899575992731e+00 + 3.8145108835671286e+00 -2.4303675734702385e-01 -2.3499352278501870e+00 + 4.5188336335810160e+00 -4.2744714064169198e-01 -2.8751118683509604e+00 + 5.2301742676051699e+00 -6.2863573430835640e-01 -3.3796457024189164e+00 + 5.9328095184022214e+00 -8.6355748855126135e-01 -3.8213825770795555e+00 + 6.6049689165798933e+00 -1.1466209929456770e+00 -4.1656737416560734e+00 + 7.2167448700619161e+00 -1.4807974952168039e+00 -4.3959718117726307e+00 + 7.7401340921826263e+00 -1.8624625387327294e+00 -4.5130992534193597e+00 + 8.1576215564067187e+00 -2.2830210630733019e+00 -4.5265153057926204e+00 + 8.4663493882231311e+00 -2.7240509092323544e+00 -4.4431065479519862e+00 + 8.6824823646610181e+00 -3.1717026711686733e+00 -4.2538105160279942e+00 + 8.8331703235824754e+00 -3.6365734449362348e+00 -3.9521510493695535e+00 + 8.9420126459887541e+00 -4.1469201860174563e+00 -3.5561187913954377e+00 + 9.0296400190539572e+00 -4.7484063000803536e+00 -3.0942228230639035e+00 + 9.1204773972103030e+00 -5.4686438264703421e+00 -2.6525463464460701e+00 + 9.1849000577774671e+00 -6.0606791527352026e+00 -2.3404690649612303e+00 + id 13550 + loc 9.0452802181243896e-01 3.7124863266944885e-01 375 + blend 0.0000000000000000e+00 + interp 5.4514675274550273e-01:3.6231863083587845e-01:4.0411473957538080e-02:2.4994621038338280e-01:1.0052558544319246e+00:4.2392501181338549e-01:1.7533213210279235e+00:3.1925957729047827e-01:2.0624931586791631e+00:3.9409026957178211e-01:2.8456685793884486e+00:5.4514130127797533e-01:3.1323960611158386e+00:4.0994216457485555e-01:3.7773814256534917e+00 + CVs 20 + 6.0332604426055947e-01 4.1329873953924345e-01 5.9976478927442456e-02 + 1.1035368098841389e+00 6.8353447575116899e-01 2.7628113499781448e-02 + 1.6018272224133998e+00 8.2356192459460775e-01 -9.2401195315353124e-02 + 2.1259186813173607e+00 8.9841088562142313e-01 -2.8206971117973356e-01 + 2.6704253353188347e+00 9.8723117859012577e-01 -5.0339194043266744e-01 + 3.2532686890279257e+00 1.1405409650118281e+00 -6.9698384274421832e-01 + 3.8778972227992110e+00 1.3713796413589057e+00 -7.8672012336865682e-01 + 4.5040041854214401e+00 1.6698076435615568e+00 -7.1445612172854667e-01 + 5.0787046102312043e+00 2.0142257082240489e+00 -4.5910039448112983e-01 + 5.5781065915281607e+00 2.3646410110829175e+00 -2.0857060458712828e-02 + 6.0056334683161623e+00 2.6567703930241717e+00 5.9677939345053388e-01 + 6.3471148925197634e+00 2.7994385996942843e+00 1.3738762321102982e+00 + 6.5451514729216917e+00 2.7083452268161494e+00 2.2268644164633775e+00 + 6.5391749830828028e+00 2.3816864414046326e+00 3.0074624238821137e+00 + 6.3431593827413835e+00 1.8866840408041701e+00 3.5952104821713284e+00 + 6.0783029826341046e+00 1.2341960035453425e+00 3.9740284233437024e+00 + 5.8990626832456403e+00 3.7464669601300127e-01 4.1254741124055858e+00 + 5.8549163239742548e+00 -4.4647990350823052e-01 4.0066082628566049e+00 + 5.7225780175358238e+00 -8.2696655175530642e-01 3.8544274160703766e+00 + id 13551 + loc 1.1019453406333923e-02 1.0841310955584049e-02 403 + blend 0.0000000000000000e+00 + interp 4.2261965004257501e-01:3.3039410321797419e-01:3.2170095150811850e-01:2.4771280563846257e-01:1.0967562782187286e+00:3.4178739478570208e-01:1.9942442219515839e+00:3.8994245130198169e-01:2.4334876688704359e+00:3.0169590965791226e-01:3.4058326239029024e+00:4.2261542384607459e-01:3.9929197789494388e+00 + CVs 20 + -2.0910289656379799e-01 1.4726510588837399e-01 1.5247731328671060e-01 + -4.2844587530519668e-01 3.0033929622745825e-01 2.8952288342337840e-01 + -6.4985489866235857e-01 4.3791077243572840e-01 4.2945443663347727e-01 + -8.6865269552544322e-01 5.4792834340807617e-01 5.8218465616966419e-01 + -1.0804435208945027e+00 6.2630985087273383e-01 7.4450098977865409e-01 + -1.2821480837492170e+00 6.7234395505181466e-01 9.1335213636751533e-01 + -1.4707506655833400e+00 6.8859394316654432e-01 1.0875162712708444e+00 + -1.6433555284339361e+00 6.7957245828128154e-01 1.2653113992175926e+00 + -1.7984006227466736e+00 6.5075352593513547e-01 1.4446782117246530e+00 + -1.9347865543482399e+00 6.0659264170568983e-01 1.6268289073799385e+00 + -2.0492575028278601e+00 5.5178316953126294e-01 1.8103142420266187e+00 + -2.1344076901640263e+00 4.9335833598843953e-01 1.9863178215604453e+00 + -2.1830408233806029e+00 4.3897460164991076e-01 2.1438982150852230e+00 + -2.2029572173521408e+00 3.9901552209053393e-01 2.2788818441757379e+00 + -2.2088033628084873e+00 3.7585980091711502e-01 2.3976148530687800e+00 + -2.1840223610064120e+00 3.3065054299223440e-01 2.4983294065330472e+00 + -2.0743659339791201e+00 1.7306525332064449e-01 2.5576039248432809e+00 + -1.8654314470132249e+00 -1.3305796845479057e-01 2.5894026683110942e+00 + -1.8629298159691889e+00 -2.5424735467790627e-01 2.7106523508114404e+00 + id 13552 + loc 1.7458972334861755e-01 6.9304686784744263e-01 401 + blend 0.0000000000000000e+00 + interp 4.8147688714459419e-01:3.1747365132380873e-01:3.0638677908266443e-01:4.8147207237572276e-01:1.0002561670945300e+00:4.0482358638960825e-01:1.4903045860097248e+00:2.5464733113248700e-01:1.9795758972718491e+00:3.8959282741273088e-01:2.2773383654890851e+00:3.6501441884533514e-01:2.9970468723189700e+00:3.2112538801288809e-01:3.6161382005737774e+00 + CVs 20 + 4.1607046687124831e-02 2.7464810839136317e-01 -4.0701721202039232e-01 + 5.4886634554799016e-02 5.3670670931496933e-01 -8.0213248515817115e-01 + 4.1740462148489282e-02 7.7365092966924109e-01 -1.1975657641726734e+00 + -3.4989472474258321e-03 9.7283684815452898e-01 -1.5980831025394919e+00 + -9.2040592744253413e-02 1.1209403690906306e+00 -1.9977438425103882e+00 + -2.3601911642299978e-01 1.2086760935010172e+00 -2.3832841667537275e+00 + -4.3628919462200694e-01 1.2307708071922829e+00 -2.7318618550881397e+00 + -6.7561398239206127e-01 1.1911123226529388e+00 -3.0217856891377632e+00 + -9.2744946656771243e-01 1.1033016856967515e+00 -3.2438778303716456e+00 + -1.1675618977250872e+00 9.8710929095309641e-01 -3.4030841081846179e+00 + -1.3817243415533589e+00 8.6267830577553295e-01 -3.5132893215989949e+00 + -1.5672506739425347e+00 7.4560721351924542e-01 -3.5886088121388351e+00 + -1.7345350570418174e+00 6.4464411976932257e-01 -3.6414310775618053e+00 + -1.9130089730761470e+00 5.5423428852195911e-01 -3.6835313319430778e+00 + -2.1364071981110233e+00 4.5238252237851856e-01 -3.7154622912341639e+00 + -2.4093072631935764e+00 3.2935320925849609e-01 -3.7161463424824865e+00 + -2.7140407898372758e+00 2.0243205365285455e-01 -3.6589764845758563e+00 + -3.0273694176874519e+00 1.0286511251925978e-01 -3.5340632223494577e+00 + -3.2607252887705007e+00 1.2720335980936570e-01 -3.4135778838552917e+00 + id 13553 + loc 6.6149806976318359e-01 4.5165437459945679e-01 396 + blend 0.0000000000000000e+00 + interp 4.6683259225393814e-01:3.0592684983257501e-01:2.1600677634414422e-02:3.2456579687176046e-01:1.0554393407602269e+00:3.1153652899315726e-01:2.0139380137522553e+00:4.2735109178663622e-01:2.6643009575040635e+00:3.5082486300153976e-01:3.0102594273063636e+00:4.6682792392801564e-01:3.4745609998691886e+00 + CVs 20 + -7.6715685022048896e-01 2.0266250507583716e-01 3.6311904185907451e-01 + -1.2876099885066508e+00 2.4341775172595703e-01 6.8270946401455379e-01 + -1.7455721194322928e+00 2.2705229927399062e-01 1.0050283501559643e+00 + -2.2086984700752463e+00 1.9505206253842333e-01 1.3441214680256857e+00 + -2.6724943339830487e+00 1.4984158476545639e-01 1.6932950891521876e+00 + -3.1280021862323490e+00 9.0562586180967353e-02 2.0536021547159011e+00 + -3.5683182885435096e+00 1.6922318757870425e-02 2.4243745223198960e+00 + -3.9959910330608568e+00 -7.1769223383097325e-02 2.7947999924272748e+00 + -4.4149300666509852e+00 -1.8141324268434822e-01 3.1519557960225533e+00 + -4.8247058707828732e+00 -3.1609646704673677e-01 3.4880427243361360e+00 + -5.2277072956114683e+00 -4.8450969725846194e-01 3.8058458171881986e+00 + -5.6320499581975021e+00 -7.0523707066000396e-01 4.1133931494807614e+00 + -6.0393007745169527e+00 -9.9495104295594450e-01 4.4093755053792911e+00 + -6.4387116026767321e+00 -1.3569598325550958e+00 4.6814696388586059e+00 + -6.8128673653322807e+00 -1.7884176085199774e+00 4.9187903439068235e+00 + -7.1412213141182539e+00 -2.2898610117146707e+00 5.1157522195279377e+00 + -7.4016109746265615e+00 -2.8517248040652432e+00 5.2628246853318483e+00 + -7.5826703959224604e+00 -3.4328603866830143e+00 5.3451968850279030e+00 + -7.7178539522133045e+00 -3.8919460156631871e+00 5.3462321112524425e+00 + id 13554 + loc 1.5039382502436638e-02 5.9373420476913452e-01 378 + blend 0.0000000000000000e+00 + interp 4.4997466119936713e-01:2.7625812366306968e-01:4.1899882862742599e-03:1.9896448834436539e-01:1.2581487427006877e-01:2.5096718379286803e-01:1.0496547818673614e+00:2.8260959047821405e-01:2.0023202085568821e+00:4.4997016145275515e-01:2.5950492991629401e+00:3.9674118000957448e-01:3.0809391351520459e+00 + CVs 20 + 4.7685501962202703e-01 3.2500519432336406e-01 3.3007622606342624e-01 + 8.8411115813158148e-01 5.6553622402861237e-01 5.8771765769184925e-01 + 1.2744052081804573e+00 7.6192526415999107e-01 8.2982798441294470e-01 + 1.6656056372442538e+00 9.3946857089976821e-01 1.0873976159730119e+00 + 2.0420844161364102e+00 1.0994947503665276e+00 1.3639293152760177e+00 + 2.3943832259401199e+00 1.2374343524904545e+00 1.6586602601806391e+00 + 2.7240514149927382e+00 1.3448995544516800e+00 1.9660890353537526e+00 + 3.0376646750789016e+00 1.4156428433050501e+00 2.2781758568212989e+00 + 3.3468286957025621e+00 1.4471973859662195e+00 2.5945430681691444e+00 + 3.6649542171820819e+00 1.4341975431609020e+00 2.9243385180435033e+00 + 3.9996313666081367e+00 1.3662910676761557e+00 3.2684194133782678e+00 + 4.3517685533836339e+00 1.2295994626541566e+00 3.6130596899848575e+00 + 4.7114415277856416e+00 1.0015212263608664e+00 3.9376701550373125e+00 + 5.0559617403552206e+00 6.6033276577546518e-01 4.2144979307322181e+00 + 5.3716031922463703e+00 2.2241726940000550e-01 4.4265922915231819e+00 + 5.6711182600916921e+00 -2.5208139797851548e-01 4.5969996687195289e+00 + 5.9742165424785778e+00 -6.8565570087038719e-01 4.7506570594857678e+00 + 6.2951334282325710e+00 -1.0186966825010919e+00 4.8725586946376396e+00 + 6.6891107707703270e+00 -1.3343157841932012e+00 4.9830721117530796e+00 + id 13555 + loc 3.7666806578636169e-01 5.7239401340484619e-01 409 + blend 0.0000000000000000e+00 + interp 3.3681009319663313e-01:2.8710678353532115e-01:1.7183055371197398e-01:2.8543280230282675e-01:9.9129580499722225e-01:2.8722448795118888e-01:1.6168666231518150e+00:2.7836738853724363e-01:2.0938279073397785e+00:2.8262982640408213e-01:2.9999386923624254e+00:3.3680672509570120e-01:3.7178056474916015e+00 + CVs 20 + 3.8719230758901246e-01 1.1407220480260633e-01 -6.3287811174905978e-02 + 7.2219245155977396e-01 2.0845670837734778e-01 -1.4998521581775343e-01 + 1.0416549636243295e+00 2.9613096493549257e-01 -2.2174866743955310e-01 + 1.3569961653966194e+00 3.8041452661027059e-01 -2.6435646231780113e-01 + 1.6630177935749022e+00 4.5737837281526861e-01 -2.8366592085894921e-01 + 1.9561070437150381e+00 5.2457830393121097e-01 -2.8545270910904830e-01 + 2.2349740042164861e+00 5.8182937314561001e-01 -2.7454687390394827e-01 + 2.5010799739145813e+00 6.3002595497575531e-01 -2.5516025041200840e-01 + 2.7588678732702565e+00 6.6857947045031729e-01 -2.3032896873908099e-01 + 3.0130798451450032e+00 6.9521882137814828e-01 -2.0195701693687676e-01 + 3.2648244862146067e+00 7.0819367317291237e-01 -1.7267893976031945e-01 + 3.5129022486631394e+00 7.0365272969519221e-01 -1.4716478469501121e-01 + 3.7557311912900389e+00 6.7322783204558223e-01 -1.3302426527843106e-01 + 3.9901218153903004e+00 6.1069805888271711e-01 -1.4011555069329085e-01 + 4.2084731238251152e+00 5.1488227299897904e-01 -1.7670736032196588e-01 + 4.4014197251803218e+00 3.9140632704369005e-01 -2.5002683315258822e-01 + 4.5609597735490928e+00 2.4633199286947161e-01 -3.6665495600464593e-01 + 4.6761579531281541e+00 7.9421698038211641e-02 -5.2114077024272343e-01 + 4.6623035302535358e+00 -1.8296738231136267e-01 -7.0899296552817548e-01 + id 13556 + loc 2.4350297451019287e-01 2.9021540284156799e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0892642234190224e-01:4.0892233307767883e-01:5.2316403941751688e-01:2.7311929699952747e-01:2.0169937460269893e+00:3.3980491819796399e-01:2.8624356095711883e+00:3.5634710844758510e-01:3.1786708486334532e+00:2.7109897031735547e-01:3.8788309199109512e+00 + CVs 20 + 4.0079168117179387e-01 4.3872882950776021e-01 5.7516414182420587e-02 + 5.5406592933642618e-01 7.4608891248606357e-01 1.1942905639866544e-01 + 6.7453928594233781e-01 1.0540529510644001e+00 1.7386083441382144e-01 + 8.4592116348066759e-01 1.3825144592969618e+00 2.1953917584387322e-01 + 1.0669241310311479e+00 1.7185881019519980e+00 2.5444177477559626e-01 + 1.3368314124588920e+00 2.0517017059271958e+00 2.7402619579221615e-01 + 1.6582453063617528e+00 2.3779409120351316e+00 2.6568572053856115e-01 + 2.0403109590898345e+00 2.6968883405526087e+00 1.9705016691030727e-01 + 2.4827498961810686e+00 2.9890216785959618e+00 8.7689040181729849e-03 + 2.9300635980080267e+00 3.1929888755801143e+00 -3.4375882474881148e-01 + 3.2903728867865900e+00 3.2526975584202269e+00 -8.1494494588402411e-01 + 3.5272808256261334e+00 3.1721984771645624e+00 -1.3176500557925093e+00 + 3.6566813887654663e+00 2.9828075041188837e+00 -1.8029494212475867e+00 + 3.7031870250437100e+00 2.7147348467191859e+00 -2.2494975557383832e+00 + 3.6877202325871377e+00 2.4099927322370607e+00 -2.6341436449133688e+00 + 3.6338178611796517e+00 2.1476963610090039e+00 -2.9215115202231452e+00 + 3.5659230524629293e+00 1.9957440840103291e+00 -3.1052796015091868e+00 + 3.5589043883135059e+00 1.8502655862757396e+00 -3.2502216069227470e+00 + 3.8218435763429741e+00 1.4551664953552634e+00 -3.3563975753236903e+00 + id 13557 + loc 5.3182566165924072e-01 7.2267127037048340e-01 400 + blend 0.0000000000000000e+00 + interp 4.4441615217838631e-01:2.8423446334454494e-01:3.0444835626254441e-02:2.4495042847444895e-01:1.1377853300660563e+00:2.6989115944795383e-01:2.0133741112819878e+00:4.4441170801686453e-01:2.9808361536509036e+00:4.0475686183085324e-01:3.7845751101484755e+00 + CVs 20 + -7.3591497091521504e-02 2.4942552803546258e-01 -2.8778990808919303e-01 + -1.2615435090362254e-01 4.7713057265078340e-01 -6.1375607380940922e-01 + -1.4257771889974577e-01 6.6004463429778437e-01 -9.6250585124398924e-01 + -1.2618602203818885e-01 7.9470843107890299e-01 -1.3205359957651925e+00 + -8.5756060444290988e-02 8.9242423418973293e-01 -1.6787737848352431e+00 + -2.5794506113870661e-02 9.6738153590732667e-01 -2.0292519684966610e+00 + 4.8476473379296316e-02 1.0247400808516574e+00 -2.3683936664731871e+00 + 1.2984836096921978e-01 1.0525879839074193e+00 -2.6938689203089918e+00 + 2.1170833865197730e-01 1.0352762516328182e+00 -3.0013128422125201e+00 + 2.9004906069410474e-01 9.6839608786020315e-01 -3.2853570246253931e+00 + 3.6211958759420898e-01 8.5455361563391907e-01 -3.5413869580061603e+00 + 4.2341192339572536e-01 6.9483391247340442e-01 -3.7653866768847966e+00 + 4.6922684404065945e-01 4.8991104665137497e-01 -3.9515451546516092e+00 + 5.0086139162316257e-01 2.4527574183137224e-01 -4.0890290750901341e+00 + 5.2506209748796129e-01 -2.9163297909093000e-02 -4.1637531728039772e+00 + 5.4134041933141175e-01 -3.2543505729723132e-01 -4.1650184145869202e+00 + 5.3892777757950905e-01 -6.3738812395523703e-01 -4.0959953480099340e+00 + 5.2031198877908091e-01 -9.6641921652278484e-01 -4.0117271806976378e+00 + 5.8410346033528282e-01 -1.3837850330075097e+00 -4.2852304694810526e+00 + id 13558 + loc 4.0201178193092346e-01 4.3411433696746826e-01 374 + blend 0.0000000000000000e+00 + interp 4.7205128809161251e-01:3.3952607775511801e-01:2.3568627402484199e-01:3.0826742710263544e-01:9.9949352326173446e-01:3.5018666689146044e-01:1.5281604090658103e+00:4.7204656757873159e-01:2.0267161593514400e+00:3.3949105528770701e-01:2.7588230293899230e+00:3.3459947286513292e-01:3.6034942423119425e+00 + CVs 20 + -1.9158897975431979e-01 4.8092411290359055e-01 7.7209284817464729e-01 + -2.6147986220046926e-01 8.0800709106698321e-01 1.3728328013470892e+00 + -2.5741500431028119e-01 1.0396487415049291e+00 1.9511439494242580e+00 + -2.1756926544353394e-01 1.2219400946656416e+00 2.5554741795466800e+00 + -1.7319176659922864e-01 1.3791931558883557e+00 3.1907398529929081e+00 + -1.5819886101718073e-01 1.5141856991813543e+00 3.8729173478174537e+00 + -2.0580787807280121e-01 1.5999827792134294e+00 4.6023842001476112e+00 + -3.3659267842333018e-01 1.6034350668066450e+00 5.3483399110032765e+00 + -5.5072865774158819e-01 1.5032763114207410e+00 6.0707149406997285e+00 + -8.3155243325032147e-01 1.2799625402869699e+00 6.7239548713931452e+00 + -1.1502884758923857e+00 9.3191654065275475e-01 7.2613468636747118e+00 + -1.4668474623301231e+00 4.7723986293992171e-01 7.6520719100458408e+00 + -1.7430086983032886e+00 -5.3494445425055659e-02 7.8803231906014792e+00 + -1.9598372023934549e+00 -6.3518845258937962e-01 7.9510307108654406e+00 + -2.1352958300084937e+00 -1.2646793183464227e+00 7.9098548111409128e+00 + -2.3090304446199905e+00 -1.9361852145776970e+00 7.8365228010349330e+00 + -2.4953638543828940e+00 -2.6222941804773434e+00 7.8176462480673568e+00 + -2.6655794419605696e+00 -3.2875827426560784e+00 7.9068214316283942e+00 + -2.8009360344220298e+00 -3.8905178864227619e+00 8.0738464228209352e+00 + id 13559 + loc 9.3827515840530396e-01 5.3069049119949341e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3720940824622584e-01:3.3505921175884690e-01:4.3113231124808093e-01:2.9049850313489822e-01:1.4972072961265754e+00:3.4215766981199253e-01:2.4882161189470029e+00:4.3720503615214340e-01:2.9995355620651236e+00:2.8154906842894090e-01:3.7057339396618043e+00 + CVs 20 + 2.2585724215998393e-01 2.6677791444273924e-01 -2.0765954524085797e-01 + 4.5477589768953669e-01 5.4107373849784524e-01 -4.1982773270369855e-01 + 6.8263567770506062e-01 7.8089057938271134e-01 -6.6868659984898837e-01 + 9.0475819162508497e-01 9.6102958890071577e-01 -9.6329288127719959e-01 + 1.1145442298567616e+00 1.0669686030884813e+00 -1.2957195765811951e+00 + 1.3058627882613600e+00 1.0913928251377367e+00 -1.6535823186730552e+00 + 1.4723653241693819e+00 1.0348148575381895e+00 -2.0248426452081554e+00 + 1.6039650994504477e+00 9.0278576395428789e-01 -2.3993056830091928e+00 + 1.6878707015430683e+00 7.0343417066248304e-01 -2.7662825806523887e+00 + 1.7141130898682491e+00 4.4617397860437213e-01 -3.1124482969515843e+00 + 1.6786543996087200e+00 1.4076177628156716e-01 -3.4198576253057409e+00 + 1.5914446146431191e+00 -2.0197599935297728e-01 -3.6823036612120821e+00 + 1.4694718869735752e+00 -5.6733069688157056e-01 -3.9424497183962322e+00 + 1.3105801679885254e+00 -9.0615779997225010e-01 -4.3126028796727667e+00 + 1.1345765450077940e+00 -1.0467739401107383e+00 -4.9140383952443418e+00 + 1.0713554256919373e+00 -7.4421416559296327e-01 -5.6220581983601887e+00 + 1.2367809873418156e+00 3.6326302586548120e-02 -6.0351692515690027e+00 + 1.6828307813932524e+00 1.0296624889578616e+00 -5.5935121407685049e+00 + 1.7736352797919319e+00 1.2973461279412284e+00 -5.6747853047057166e+00 + id 13560 + loc 2.4829535186290741e-01 5.6646203994750977e-01 1069 + blend 0.0000000000000000e+00 + interp 5.0977408842277094e-01:2.8318714783553361e-01:2.4080733519870479e-01:3.7316236239127309e-01:1.0315538099234283e+00:2.7880709034699125e-01:1.7491200093112105e+00:4.2248771934938489e-01:2.0870490382925788e+00:5.0976899068188675e-01:2.7954641265753404e+00:4.3097502946254013e-01:3.1643183973773858e+00:2.4250487619114505e-01:3.6989581894642485e+00 + CVs 20 + 1.2027757053953776e-01 2.5924923399195082e-01 -2.0362787270542629e-01 + 2.5227587248331784e-01 5.1142078503231725e-01 -4.1005124565967577e-01 + 3.8447202027267563e-01 7.6524462275356864e-01 -6.1239641071109052e-01 + 5.0873676193145434e-01 1.0223754601982353e+00 -8.1303270862328225e-01 + 6.1596267491741341e-01 1.2815302308873247e+00 -1.0193573543119037e+00 + 6.9065363618312015e-01 1.5370194227410252e+00 -1.2344149415991412e+00 + 7.1793193815527534e-01 1.7742706988020940e+00 -1.4541870295676638e+00 + 6.9134193636781727e-01 1.9681095918919960e+00 -1.6725513443108777e+00 + 6.1590099253045194e-01 2.0958039201413161e+00 -1.8948842038661939e+00 + 4.9965811065325094e-01 2.1486243564994298e+00 -2.1388435705572832e+00 + 3.4839185279405949e-01 2.1228665714428749e+00 -2.4163199931144326e+00 + 1.7324353927752845e-01 2.0156029717247530e+00 -2.7286487248590712e+00 + -3.0636241067023562e-03 1.8290475951347298e+00 -3.0720649953021852e+00 + -1.4718250566070368e-01 1.5735225728576159e+00 -3.4413769711989963e+00 + -2.1877813427742387e-01 1.2641862707695419e+00 -3.8332266320869079e+00 + -1.5988182703844944e-01 9.1758445345787698e-01 -4.2442933719469389e+00 + 1.1715739183522089e-01 5.8501412592722724e-01 -4.6390511831798555e+00 + 5.8593366533083979e-01 3.8040342574743158e-01 -4.9144211875981583e+00 + 9.1035419556293673e-01 2.5681768058051979e-01 -5.0810853810231578e+00 + id 13561 + loc 8.0782359838485718e-01 8.0344986915588379e-01 402 + blend 0.0000000000000000e+00 + interp 4.9677890255197243e-01:3.0835369252547445e-01:3.6423130474294241e-01:3.0915736022063395e-01:1.0107722262801173e+00:4.1048970180833794e-01:1.6549086798407802e+00:3.8688992468736461e-01:2.1332513971858806e+00:4.9677393476294696e-01:2.7098729354052518e+00:4.1403905101981642e-01:3.0063387108915034e+00:2.4741145494931222e-01:3.4900567776435967e+00 + CVs 20 + -8.6438884273383421e-02 1.0759581516896632e-01 -1.5116994732612524e-01 + -1.5052376303810508e-01 2.3339417227621495e-01 -3.1845385160143419e-01 + -2.0595105613063491e-01 3.6322212335878290e-01 -4.9027935488371710e-01 + -2.5903265564632627e-01 4.8889600781162657e-01 -6.5769484124620436e-01 + -3.1155869756613380e-01 6.0850233144322419e-01 -8.1735950184848061e-01 + -3.5961744583453076e-01 7.1863596742526226e-01 -9.6473788075809741e-01 + -3.9693475910117981e-01 8.1694707483621598e-01 -1.0958122659135165e+00 + -4.1943333848516623e-01 9.0349525076429038e-01 -1.2065198450281631e+00 + -4.2299271330295202e-01 9.7387047520225900e-01 -1.2873159811487780e+00 + -4.1354320745646445e-01 1.0136117417868522e+00 -1.3260031628284676e+00 + -4.1138251791137270e-01 1.0358724807737878e+00 -1.3415378966761158e+00 + -3.9650061604213577e-01 1.0784446677855133e+00 -1.3637951567838291e+00 + -3.4708900506770751e-01 1.1438129204970293e+00 -1.3891956841716384e+00 + -2.6388437641764079e-01 1.2249513087523076e+00 -1.4160586495139604e+00 + -1.6039475850498830e-01 1.3161583723445398e+00 -1.4602762029508201e+00 + -5.2441149953400656e-02 1.4121246226544752e+00 -1.5364273150533170e+00 + 5.3756587810238399e-02 1.5072356787064323e+00 -1.6517689750213318e+00 + 1.4606731713647336e-01 1.5929600795363312e+00 -1.8073742598795808e+00 + 1.2974174015619377e-01 1.6439490480670718e+00 -1.9123793171600303e+00 + id 13562 + loc 3.4733879566192627e-01 8.5948988795280457e-02 407 + blend 0.0000000000000000e+00 + interp 4.0904197433579420e-01:3.8756753427186180e-01:3.6838639917038796e-01:2.6206505395158453e-01:1.0495781983697214e+00:3.8670873083271007e-01:1.6624640238285906e+00:3.0055750489706773e-01:2.0579009844813179e+00:3.9483944464434856e-01:3.0202744336969771e+00:4.0903788391605084e-01:3.9807599070878412e+00 + CVs 20 + 4.8472349298543140e-03 3.6810092864780808e-01 -3.4884438468983014e-01 + 1.8916808459805201e-02 5.9246009732966542e-01 -4.8358806393461429e-01 + 4.7139289492714426e-02 7.6163075881341458e-01 -5.5957590294142767e-01 + 9.2702488921277582e-02 9.1435557477216889e-01 -6.3683298457353588e-01 + 1.5753369129570605e-01 1.0461165850935390e+00 -7.1036196590128098e-01 + 2.4245435520717301e-01 1.1534145886166196e+00 -7.7654563488250994e-01 + 3.4810583256615341e-01 1.2350166189288230e+00 -8.3385380777239693e-01 + 4.7644159807802994e-01 1.2914954993095655e+00 -8.8303438792058686e-01 + 6.3025335320004927e-01 1.3233028533260094e+00 -9.2575609056033326e-01 + 8.1085676117555983e-01 1.3304578965692033e+00 -9.6342629995556917e-01 + 1.0165945197467297e+00 1.3135900045883055e+00 -9.9704012594673030e-01 + 1.2432913608183789e+00 1.2743513606328634e+00 -1.0271545138901281e+00 + 1.4859240413142034e+00 1.2152759445476966e+00 -1.0543966828991493e+00 + 1.7395372311400785e+00 1.1415910349039682e+00 -1.0809115499423578e+00 + 1.9990912512707013e+00 1.0635600956277049e+00 -1.1115191205207586e+00 + 2.2595602791449823e+00 9.9371478730042284e-01 -1.1524915789450032e+00 + 2.5135861929961183e+00 9.4156694533072760e-01 -1.2075187459370360e+00 + 2.7454412586092691e+00 9.1344499832913373e-01 -1.2725966326527285e+00 + 2.9447112007395329e+00 9.2228291370384230e-01 -1.3478988456911978e+00 + id 13563 + loc 6.3717222213745117e-01 4.6518689393997192e-01 412 + blend 0.0000000000000000e+00 + interp 4.2169684668520663e-01:3.5171665122093360e-01:6.2021291320379923e-03:3.8128077939369542e-01:9.4333071125638701e-01:3.4936357046507571e-01:1.2970986553840476e+00:3.2761983514471693e-01:1.9907991543471217e+00:4.2169262971673982e-01:2.6746472892639055e+00:4.1249341826948183e-01:3.0055885175104806e+00:3.9988327029277082e-01:3.4207237488337436e+00 + CVs 20 + -6.7648047186473326e-01 1.9116930043962277e-01 1.7363340590577878e-01 + -1.1505491516703774e+00 2.8086295705515979e-01 3.1299098730899877e-01 + -1.5709335096888999e+00 3.3715986014161825e-01 4.3114947520897151e-01 + -2.0032592566815879e+00 3.8227776760512600e-01 5.3737178951060627e-01 + -2.4418832384351461e+00 4.1216038402277066e-01 6.3030131485432950e-01 + -2.8809164569918506e+00 4.2442153562411833e-01 7.0817961312398658e-01 + -3.3164676404160836e+00 4.1831817538053462e-01 7.6927327321750272e-01 + -3.7462596620052540e+00 3.9366537927890510e-01 8.1268384568785468e-01 + -4.1665341393926107e+00 3.5130490036821316e-01 8.3792466821235689e-01 + -4.5730372701420423e+00 2.9361125941062727e-01 8.4480619914255584e-01 + -4.9740442007849319e+00 2.1678860144067125e-01 8.3710583570000163e-01 + -5.3947813300331937e+00 9.7079147602273208e-02 8.3002469891655750e-01 + -5.8362711465823089e+00 -9.4255244977922370e-02 8.5090707383133979e-01 + -6.2631039844148733e+00 -3.5395895451742154e-01 9.1809661877542448e-01 + -6.6514769851548481e+00 -6.5943085168537685e-01 1.0317528622148502e+00 + -6.9923175522332315e+00 -9.8973106671554234e-01 1.1888942619659515e+00 + -7.2780928040315782e+00 -1.3204832302820901e+00 1.3845488127057071e+00 + -7.5063236049643818e+00 -1.6198094915631644e+00 1.5987881458579296e+00 + -7.6806828888969729e+00 -1.8118056829919111e+00 1.7569026779305792e+00 + id 13564 + loc 9.9916063249111176e-02 3.2059851288795471e-01 373 + blend 0.0000000000000000e+00 + interp 4.5856306694052346e-01:3.0668214555484641e-01:3.2365666447073416e-01:3.2159048459005823e-01:9.9785306282334518e-01:3.2389457904782187e-01:1.9459760384525824e+00:4.5855848130985405e-01:2.6133418601504910e+00:3.9426824727195359e-01:3.0967004541254370e+00:3.7146064705058196e-01:3.8516721129527265e+00 + CVs 20 + -3.4725131180814744e-02 1.0236786926209098e+00 2.9352914002977071e-01 + -1.6022315261914249e-01 2.0408101559073151e+00 5.2561424482067809e-01 + -4.1663824812978489e-01 3.0226275787949271e+00 5.9177475144448466e-01 + -8.1081143969194702e-01 3.8949610309712495e+00 3.9388144524313384e-01 + -1.3044587659264597e+00 4.5640942784952561e+00 -8.8246905009915722e-02 + -1.8338673546524227e+00 4.9509839129887556e+00 -8.1019380020572029e-01 + -2.3190991852425218e+00 4.9819953153234886e+00 -1.6913123145448035e+00 + -2.6901682182284836e+00 4.6386314683645473e+00 -2.6077981185795407e+00 + -2.8903949981326527e+00 3.9540901107479054e+00 -3.4426534028945821e+00 + -2.8606728409805346e+00 2.9979347347436085e+00 -4.0898393077333344e+00 + -2.5528462899408577e+00 1.9272291842899405e+00 -4.4612747559372830e+00 + -2.0170511156188513e+00 9.1495261092650093e-01 -4.5859910239181767e+00 + -1.4482570642175858e+00 -5.6120935367998559e-02 -4.6380100145561958e+00 + -9.9583332874396413e-01 -9.5864234401750092e-01 -4.7778073802007004e+00 + -8.2454685715279152e-01 -1.6292825524480552e+00 -5.1811569578355154e+00 + -1.0579157781022426e+00 -1.8609004871709260e+00 -5.6834113484965325e+00 + -1.5097005725014296e+00 -1.8732493175996989e+00 -6.0259743581674492e+00 + -2.0319241909173220e+00 -1.8462764413707684e+00 -6.2135410707764525e+00 + -2.6066917935974674e+00 -1.8383019515768586e+00 -6.4349412158772719e+00 + id 13565 + loc 8.3889722824096680e-01 7.8397285938262939e-01 395 + blend 0.0000000000000000e+00 + interp 4.2550250004262974e-01:4.0478424441041005e-01:4.3027594186207940e-02:3.3783765875634281e-01:7.8419812762151431e-01:4.2549824501762934e-01:1.4294390412734204e+00:3.5186923737277320e-01:2.0608166182578911e+00:2.9443746133460336e-01:2.9920048968641315e+00:3.7959131152814940e-01:3.7143230740494171e+00 + CVs 20 + 4.2904175444140091e-01 2.6316805904457052e-01 -3.9319330072634223e-01 + 7.6671380134018319e-01 4.6719738746786638e-01 -6.9370992746970850e-01 + 1.0990987388823101e+00 6.5200767288751549e-01 -9.7575066986243830e-01 + 1.4744326202571889e+00 8.3876794800212873e-01 -1.2717556494309246e+00 + 1.8992664551773741e+00 1.0184236782656666e+00 -1.5786762757288484e+00 + 2.3750815795374116e+00 1.1785350505887355e+00 -1.8943484600375120e+00 + 2.8986003408365311e+00 1.3055946763014443e+00 -2.2214949951616809e+00 + 3.4633443546612366e+00 1.3822897859552694e+00 -2.5648426962528519e+00 + 4.0610700260324357e+00 1.3842779018587790e+00 -2.9282975359097474e+00 + 4.6773626799037116e+00 1.2816567169398680e+00 -3.3180416173322920e+00 + 5.2804053878532597e+00 1.0502460663485320e+00 -3.7353770977709284e+00 + 5.8267729801495083e+00 6.9014938845489349e-01 -4.1624438050421011e+00 + 6.2887753137757789e+00 2.2201198022726754e-01 -4.5730637189037928e+00 + 6.6596410533344983e+00 -3.3518886408082604e-01 -4.9509614152941115e+00 + 6.9385735123607102e+00 -9.6935823621882067e-01 -5.2852199341840560e+00 + 7.1250647652720644e+00 -1.6681057170655866e+00 -5.5592342892239159e+00 + 7.2223057529356272e+00 -2.4067173183004122e+00 -5.7482606590650036e+00 + 7.2484012630352179e+00 -3.1377876973191312e+00 -5.8355699879382019e+00 + 7.3012423721381170e+00 -3.7069603731363907e+00 -5.8912272349262835e+00 + id 13566 + loc 6.5950906276702881e-01 2.2356070578098297e-02 1068 + blend 0.0000000000000000e+00 + interp 4.3485504430475186e-01:3.1461870778332734e-01:4.7427329360483172e-01:2.8859460580246499e-01:1.3511310943709836e+00:4.3485069575430885e-01:1.9781617346924167e+00:3.5274748939187567e-01:2.4579653377271420e+00:2.9318323020919673e-01:3.4605624605989460e+00:4.1229811796426169e-01:3.9989543264826928e+00 + CVs 20 + -5.4508291247534701e-02 3.9101226047569665e-01 8.5838033925994289e-02 + -1.4911135253341276e-01 7.8760508280295927e-01 2.0655320350098186e-01 + -2.8464993619542772e-01 1.1843098946426855e+00 3.2945419814593485e-01 + -4.7442535708867145e-01 1.5629266943425311e+00 4.3561178632159731e-01 + -7.2958477997755267e-01 1.8893338898220233e+00 5.2058691115264466e-01 + -1.0383033694350017e+00 2.1265512901163892e+00 5.9149472146522231e-01 + -1.3649878571567000e+00 2.2499580645481219e+00 6.6571107905940852e-01 + -1.6612099900315265e+00 2.2596593333971895e+00 7.5929264543135178e-01 + -1.8774320696957043e+00 2.1683781477696744e+00 8.8059661342377860e-01 + -1.8962389036060117e+00 1.9468206363558633e+00 1.0029801711785553e+00 + -1.6255942127386234e+00 1.7341383369191428e+00 9.8311570522842173e-01 + -1.3796571310057957e+00 1.6347040275614977e+00 9.0357692586810234e-01 + -1.1434014152079441e+00 1.5272596101698326e+00 8.2817335189228558e-01 + -8.7248177522039172e-01 1.4443585095571416e+00 7.1877127990673062e-01 + -5.9111245720191885e-01 1.3789502819104595e+00 5.7716991916409077e-01 + -3.0597005480309869e-01 1.2669410606624634e+00 4.1247891909949974e-01 + -3.6363434801194305e-02 1.0746963631417799e+00 2.2394240035216567e-01 + 1.8136301008120242e-01 7.3359874431326866e-01 2.1477865243292010e-02 + 3.3025364825433967e-01 6.2098484407459398e-01 -9.1929269103794592e-02 + id 13567 + loc 2.8340303897857666e-01 3.9139583706855774e-01 1080 + blend 0.0000000000000000e+00 + interp 4.2607729308873321e-01:4.2607303231580235e-01:6.7850694154229840e-02:2.5091182940384216e-01:8.3016099608156724e-01:3.5634710844758510e-01:1.1790674591406303e+00:2.7673685849601759e-01:1.9993226327624662e+00:2.5894147869025702e-01:2.9735812437560787e+00:3.6354681279433337e-01:3.6986863688319516e+00 + CVs 20 + 2.9298799843773171e-01 2.1347370755121597e-01 2.1699742133693475e-01 + 4.1196587209072943e-01 3.4789289564140979e-01 3.5989600533405225e-01 + 4.7441822507981068e-01 4.5459418034211430e-01 4.9327280881629398e-01 + 5.3867860498646591e-01 5.6132221195301724e-01 6.4624457084610976e-01 + 6.0067043806369269e-01 6.6553221241075211e-01 8.1696833096688926e-01 + 6.5678986238939729e-01 7.6474532376952897e-01 1.0031106189122141e+00 + 7.0423455152213821e-01 8.5702058544892556e-01 1.2023403992875972e+00 + 7.4113578952465531e-01 9.4097354352522489e-01 1.4126845300342468e+00 + 7.6665826524002745e-01 1.0153690242297491e+00 1.6326289580690128e+00 + 7.8109290180410396e-01 1.0788051719463394e+00 1.8612889943783779e+00 + 7.8593774335065203e-01 1.1295902827983935e+00 2.0985423578945661e+00 + 7.8386155088561915e-01 1.1655973966744384e+00 2.3448796808358581e+00 + 7.7861991034046341e-01 1.1843529663767742e+00 2.6005121911820037e+00 + 7.7477637487056561e-01 1.1837374128810623e+00 2.8632918202339264e+00 + 7.7697492048214256e-01 1.1624633723618394e+00 3.1286070187318660e+00 + 7.8906824683508237e-01 1.1196985185427959e+00 3.3922322097485225e+00 + 8.1370528816901311e-01 1.0551618100412465e+00 3.6512107554233260e+00 + 8.5220758678823016e-01 9.7118114154614599e-01 3.8996504547859914e+00 + 8.9906106321536672e-01 8.8294336217331182e-01 4.0954359393784392e+00 + id 13568 + loc 9.3022173643112183e-01 5.0244908779859543e-02 403 + blend 0.0000000000000000e+00 + interp 4.0543369264500057e-01:2.9473440304022586e-01:5.5687208783144815e-02:4.0542963830807416e-01:5.0523930456553812e-01:3.1061526400640266e-01:1.0604953842654248e+00:3.0883549016088047e-01:2.0806250734750122e+00:2.9826721768656489e-01:3.1143401042974150e+00 + CVs 20 + -1.2358540108878860e-01 2.0988065630188868e-01 2.9267644122486336e-01 + -2.3158243638946066e-01 4.1640056269317827e-01 5.7448624176712271e-01 + -3.4581895087132586e-01 6.3386185829201214e-01 8.7621686151722178e-01 + -4.7239069192819849e-01 8.5515810264443870e-01 1.2186542693048419e+00 + -5.9952652697874320e-01 1.0620103108358971e+00 1.6215763929099110e+00 + -6.9439136060656192e-01 1.2407580452184956e+00 2.1026463520355385e+00 + -7.0305489217627670e-01 1.3749891092994171e+00 2.6515246164278334e+00 + -5.8061058260758502e-01 1.4386082175891004e+00 3.2193480252174882e+00 + -3.1922114753519137e-01 1.4106515269702822e+00 3.7378624182610909e+00 + 4.7283077998374723e-02 1.2933842243349212e+00 4.1486373747472296e+00 + 4.5731202119028391e-01 1.1095249229579389e+00 4.4212368587087711e+00 + 8.4906749066375842e-01 8.9191613938165593e-01 4.5618260046718131e+00 + 1.2003233931915476e+00 6.7534176554467273e-01 4.6025455069697747e+00 + 1.5238198013132733e+00 4.8938472038306324e-01 4.5758379771595008e+00 + 1.8429609030116774e+00 3.4618231010718303e-01 4.5237204876374078e+00 + 2.2140428580261791e+00 2.1054887508253028e-01 4.5027255412379565e+00 + 2.6706292614932354e+00 4.6180329370755752e-02 4.5529277400715253e+00 + 3.1363229768448480e+00 -8.8335184791290600e-02 4.6782468970437279e+00 + 3.4651957710437169e+00 -7.5319737387875008e-02 4.8311646434100997e+00 + id 13569 + loc 2.9491192102432251e-01 8.9691716432571411e-01 399 + blend 0.0000000000000000e+00 + interp 4.7836154742883596e-01:3.2425900499083032e-01:6.3470503382098697e-02:4.7835676381336167e-01:9.5870555461461493e-01:3.1125288125740319e-01:1.3268032725459404e+00:2.6030640107396558e-01:2.3466060700305902e+00:2.8880969704207099e-01:3.1184257339028152e+00 + CVs 20 + -1.8298188451939226e-01 3.3410320510376235e-01 -1.9838301665924438e-01 + -3.7414324905430518e-01 6.7105038631383973e-01 -4.5115780494421864e-01 + -5.9030484517172721e-01 9.8934100072308806e-01 -7.3253788448128454e-01 + -8.3952269640905497e-01 1.2613272003861000e+00 -1.0302065528325213e+00 + -1.1254346587208863e+00 1.4569420294081199e+00 -1.3349925704655712e+00 + -1.4437318763808307e+00 1.5466764593766482e+00 -1.6278071467670294e+00 + -1.7806874099489496e+00 1.5205634065539950e+00 -1.8882767184996665e+00 + -2.1261560445866379e+00 1.3964280939627314e+00 -2.1077541037419758e+00 + -2.4593904144785572e+00 1.1873097823156629e+00 -2.2872594755939941e+00 + -2.7287651979436340e+00 8.8843306201830230e-01 -2.4290636688402794e+00 + -2.9233501606132299e+00 5.1952802724969227e-01 -2.5455690786154976e+00 + -3.1443355671462427e+00 1.1479265816205492e-01 -2.6752854191783091e+00 + -3.4735001804252481e+00 -3.0619123339230236e-01 -2.8305695251186376e+00 + -3.8690002138106649e+00 -7.3143615960395969e-01 -2.9693422043842554e+00 + -4.2906432791396707e+00 -1.1602792566353617e+00 -3.0736434686554803e+00 + -4.9012411231472637e+00 -1.4861092219596663e+00 -3.1973095283630073e+00 + -5.8944133841298259e+00 -1.3207758209700466e+00 -3.3646187226682684e+00 + -6.7785098697800663e+00 -6.0903212125716211e-01 -3.5039897708060965e+00 + -7.3126661082638202e+00 -5.2824583450635920e-01 -3.7015492599532762e+00 + id 13570 + loc 5.2703797817230225e-01 5.9436243772506714e-01 401 + blend 0.0000000000000000e+00 + interp 4.2055764385735361e-01:3.5747785879911309e-01:1.4005267567246205e-01:4.2055343828091507e-01:8.2849801780960397e-01:2.8860856527171502e-01:1.0955038925662939e+00:4.1663261630251819e-01:1.7651970137124360e+00:3.4366443149897147e-01:2.2400199643473151e+00:3.4011300285415763e-01:2.9525542031267880e+00:3.8797500969720283e-01:3.2769669982898031e+00 + CVs 20 + -1.0026022200184721e-01 3.1433485030369140e-01 -3.2854767292361903e-01 + -1.9103492147585385e-01 6.2424381654112082e-01 -6.6463587919419820e-01 + -2.9280639224729998e-01 9.0860412579572714e-01 -1.0103094604038279e+00 + -4.0794308838474930e-01 1.1451766026938781e+00 -1.3654497504632528e+00 + -5.3877382292421605e-01 1.3245924931656681e+00 -1.7300329864420387e+00 + -6.9900665641941906e-01 1.4491136929165951e+00 -2.0972200003190586e+00 + -9.0247138091142254e-01 1.5236156096277105e+00 -2.4498406835778437e+00 + -1.1510518388097468e+00 1.5521349560638071e+00 -2.7681093623097004e+00 + -1.4380904800578591e+00 1.5399927774711895e+00 -3.0417742971616608e+00 + -1.7599117529431980e+00 1.4933770297157851e+00 -3.2740796929710316e+00 + -2.1148600818955856e+00 1.4150607294012065e+00 -3.4724684690043892e+00 + -2.4978759558090995e+00 1.3017156704631891e+00 -3.6446254852783633e+00 + -2.9032940075864504e+00 1.1420793273805652e+00 -3.7984702212602435e+00 + -3.3284082597285733e+00 9.2362891509693001e-01 -3.9421813371884937e+00 + -3.7775545086677260e+00 6.4718609797297777e-01 -4.0884569018715249e+00 + -4.2521397075837131e+00 3.4053939458027344e-01 -4.2778664908964359e+00 + -4.7106114246145552e+00 8.1021348983306374e-02 -4.6016514075690145e+00 + -5.0860759975859722e+00 -4.7560426487753826e-02 -5.0805346952739194e+00 + -5.5318783333155936e+00 -2.0298331826524896e-01 -5.5611802294913195e+00 + id 13571 + loc 9.7177404165267944e-01 7.6553475856781006e-01 396 + blend 0.0000000000000000e+00 + interp 4.4838789368533916e-01:3.5372840696502950e-01:2.4014666176100996e-01:2.5312191410888746e-01:9.6307488135239017e-01:4.1665058065590188e-01:1.5209929154666408e+00:4.3646701831223977e-01:2.0000304952576378e+00:4.4838340980640234e-01:2.6599412959099462e+00:3.2569142442335247e-01:3.0273469044073380e+00:3.5126757971058981e-01:3.9225886231900375e+00 + CVs 20 + 8.3257147662471609e-01 3.1848399343247552e-01 -3.2505528580265464e-01 + 1.3527019615275762e+00 4.8524836444717823e-01 -5.8653944574880268e-01 + 1.7788864842572527e+00 5.7744308084237106e-01 -8.5183827640593213e-01 + 2.2329647720692822e+00 6.4300780632078480e-01 -1.1522896132775673e+00 + 2.7252144853863860e+00 6.7331792021887416e-01 -1.4854485685229468e+00 + 3.2571641883890772e+00 6.5341864632168689e-01 -1.8533767041953206e+00 + 3.8236383602151607e+00 5.6722407864289104e-01 -2.2581612124191719e+00 + 4.4133962495132826e+00 4.0040807735942718e-01 -2.6976555740659460e+00 + 5.0070983031650638e+00 1.3747087161580440e-01 -3.1561078831717708e+00 + 5.5737060235085174e+00 -2.3043459679047062e-01 -3.6088049879075186e+00 + 6.0768221048442479e+00 -6.9652877829946647e-01 -4.0386222555850599e+00 + 6.4962017719251453e+00 -1.2423820199886777e+00 -4.4385406551437772e+00 + 6.8381107135832098e+00 -1.8500592357385497e+00 -4.8046974008615493e+00 + 7.1199155936892229e+00 -2.5125517792856416e+00 -5.1402310777683846e+00 + 7.3478426541650155e+00 -3.2261943384136202e+00 -5.4531679928100925e+00 + 7.5140136790767178e+00 -3.9766488301845428e+00 -5.7406954484099728e+00 + 7.6098755002677194e+00 -4.7441135228209363e+00 -5.9854945804726611e+00 + 7.6446103913623160e+00 -5.4926162791244284e+00 -6.1711652553360707e+00 + 7.7735266185365059e+00 -6.0764348718974421e+00 -6.3673365337515158e+00 + id 13572 + loc 7.0260155200958252e-01 2.2708515822887421e-01 382 + blend 0.0000000000000000e+00 + interp 3.6283726796788063e-01:3.5992042477419178e-01:5.5786171818153396e-01:3.6283363959520099e-01:1.3752275807499696e+00:3.5124122936698704e-01:1.9791340689649140e+00:3.1478971067883738e-01:2.5030853443574324e+00:3.2958463423905160e-01:3.6077568736499850e+00 + CVs 20 + -8.1152226098269431e-01 1.4895445153112857e-01 5.1528211266502555e-01 + -1.3350229568475949e+00 2.1353813537676386e-01 9.1880487685317713e-01 + -1.7947817174222735e+00 2.7363555424253422e-01 1.3044050641842484e+00 + -2.2759412169122011e+00 3.6883638689215187e-01 1.7008663887497939e+00 + -2.7883201642075943e+00 4.9406946980074018e-01 2.1015833628963922e+00 + -3.3458802425666221e+00 6.2956826674678834e-01 2.5038611082678877e+00 + -3.9629877797515443e+00 7.3372738293172624e-01 2.9084542773445072e+00 + -4.6400867059393036e+00 7.4810255576685325e-01 3.3048736257979825e+00 + -5.3495087035049211e+00 6.2043812244831975e-01 3.6650278665762266e+00 + -6.0410538195670762e+00 3.2808041563488333e-01 3.9606824326420704e+00 + -6.6607083015896498e+00 -1.1919201588572648e-01 4.1796467026077408e+00 + -7.1615248670184872e+00 -6.8602873733758596e-01 4.3205400706794235e+00 + -7.5085931470007754e+00 -1.3132204943675685e+00 4.3842420218569531e+00 + -7.6955822076715723e+00 -1.9318507585777764e+00 4.3826342272425682e+00 + -7.7609941192262362e+00 -2.5033661118603283e+00 4.3479755925882060e+00 + -7.7679349636325172e+00 -3.0308694836192744e+00 4.3103842380100019e+00 + -7.7689262493287394e+00 -3.5304345560163850e+00 4.2794120127549631e+00 + -7.7765616895182550e+00 -3.9959999615792388e+00 4.2651481832452758e+00 + -7.7545460191619933e+00 -4.3600525889485038e+00 4.3140787542128880e+00 + id 13573 + loc 9.7303643822669983e-02 3.8679853081703186e-01 380 + blend 0.0000000000000000e+00 + interp 4.0416822687224224e-01:4.0416418518997355e-01:4.6697629961435283e-01:2.5289514116861145e-01:9.9998583753891324e-01:3.4338091787773400e-01:1.5443703332323762e+00:2.5096718379286803e-01:2.0409243600116116e+00:2.9804897220076698e-01:2.6390672753885034e+00:3.7550551473912558e-01:3.0417014159806568e+00:3.2671210270874518e-01:3.8557564663222790e+00 + CVs 20 + -3.5574239458068918e-01 2.6879704984131125e-01 5.0044029422035197e-01 + -5.8293014116149089e-01 4.4839878679431727e-01 9.3571542311851019e-01 + -7.6230637007962831e-01 5.8814862152429548e-01 1.3739460522062921e+00 + -9.3171524248499304e-01 7.1901024450914419e-01 1.8451732735268589e+00 + -1.1059513406558095e+00 8.5086471197663993e-01 2.3445467601415739e+00 + -1.3063930840235645e+00 9.8357306496247854e-01 2.8697209686060976e+00 + -1.5587677660759498e+00 1.1015734021091785e+00 3.4242951334327070e+00 + -1.8878077830241682e+00 1.1775139924122990e+00 4.0032673378320345e+00 + -2.3017392190368957e+00 1.1790950959203137e+00 4.5806263857795475e+00 + -2.7781925362362401e+00 1.0790277362625020e+00 5.1214342588129611e+00 + -3.2747713699480894e+00 8.5683092706969743e-01 5.6014399952499190e+00 + -3.7468126493004092e+00 4.9433696653398274e-01 6.0021115100053155e+00 + -4.1528386406496800e+00 -3.0935331384682740e-03 6.3028697214112857e+00 + -4.4859764553788857e+00 -5.7635122586289800e-01 6.5088004362319358e+00 + -4.7889106183927321e+00 -1.1410569240575561e+00 6.6650729209912569e+00 + -5.0797837018624570e+00 -1.6194118742082657e+00 6.8280407264718779e+00 + -5.3113835896768791e+00 -1.9573516095656833e+00 7.0409218672868832e+00 + -5.4541786738898423e+00 -2.1848289135448744e+00 7.2948385731493683e+00 + -5.6435337475760843e+00 -2.5373040073773931e+00 7.5005887984153219e+00 + id 13574 + loc 1.6552108526229858e-01 8.6032235622406006e-01 378 + blend 0.0000000000000000e+00 + interp 3.4827339494568571e-01:2.8893377539747028e-01:3.3385728820854388e-01:3.4725148539636636e-01:9.8154162094658637e-01:2.9369182106719460e-01:1.7940290195538593e+00:3.4826991221173625e-01:2.7591640337707459e+00:2.6513069074229734e-01:3.6115121229615950e+00 + CVs 20 + 5.0150498332029736e-01 3.3720988106392336e-01 3.1263228636353685e-01 + 9.2695553904057681e-01 5.7972715312905909e-01 5.4527626020165776e-01 + 1.3530019451149005e+00 7.7265195942376097e-01 7.4000928501907071e-01 + 1.8095559501109182e+00 9.4787874845726139e-01 9.2056568081103507e-01 + 2.2832429169036672e+00 1.1178264752741474e+00 1.0972312426846702e+00 + 2.7627263090393654e+00 1.2874078972923140e+00 1.2843257201881759e+00 + 3.2444493600493693e+00 1.4491763813676211e+00 1.4929540396888756e+00 + 3.7272637356038483e+00 1.5934433098869651e+00 1.7303815626592232e+00 + 4.2098135430238415e+00 1.7129893822219970e+00 2.0038554754681566e+00 + 4.6923684747050789e+00 1.7990566383168822e+00 2.3206695171707330e+00 + 5.1781289892947022e+00 1.8356868686062269e+00 2.6848833491597084e+00 + 5.6711099127827209e+00 1.7933358381279938e+00 3.0965304412963297e+00 + 6.1566129494410546e+00 1.6326715993851688e+00 3.5380211378252806e+00 + 6.5776436362970276e+00 1.3487402534861723e+00 3.9523654753168627e+00 + 6.8747493455736173e+00 1.0050223877625810e+00 4.2810095512948116e+00 + 7.0361459652250229e+00 6.6538805542033241e-01 4.5313700019064687e+00 + 7.0878429831728056e+00 3.3992856394733462e-01 4.7616929492024278e+00 + 7.1113932172091010e+00 -1.5418416740651253e-03 5.0121992004123346e+00 + 7.3052986658819448e+00 -3.8757212770677452e-01 5.2434150988864454e+00 + id 13575 + loc 7.6394444704055786e-01 4.3668833374977112e-01 376 + blend 0.0000000000000000e+00 + interp 4.5008806608700869e-01:4.0350392010730901e-01:2.1692977583881412e-01:2.9648366681786004e-01:9.6505753207267242e-01:4.5008356520634785e-01:1.6894431982482152e+00:3.2761585658042408e-01:2.3618884496138484e+00:3.4173523667722150e-01:3.0154765739976321e+00:3.1935326915144202e-01:3.7527023949761285e+00 + CVs 20 + 1.6297018874611074e-01 3.0276542766486930e-01 -6.2416527054277182e-01 + 1.9454824105633067e-01 4.7653288346873718e-01 -1.1775584842604541e+00 + 1.2520721658628356e-01 5.2886737253666727e-01 -1.6950137522214410e+00 + -1.0408580578350701e-02 5.3793063182373824e-01 -2.2128684716609692e+00 + -1.6507230289878244e-01 5.6816376312999028e-01 -2.7275623061971426e+00 + -2.8875833731511685e-01 6.4094755884517740e-01 -3.2321997756989749e+00 + -3.5234991021091544e-01 7.5601452408830472e-01 -3.7374773976707836e+00 + -3.4069795690584681e-01 9.1036879340839416e-01 -4.2456347702225461e+00 + -2.5301640860323438e-01 1.0915821005128798e+00 -4.7365078822593940e+00 + -1.0818610136503715e-01 1.2775244100418730e+00 -5.1860922273245311e+00 + 6.9845358084816400e-02 1.4499997977166847e+00 -5.5858256465948104e+00 + 2.7102242980623270e-01 1.6063237349996258e+00 -5.9472565708806213e+00 + 5.1198590090738305e-01 1.7508193404857832e+00 -6.2981749985811550e+00 + 8.3723643922787350e-01 1.8642652572096079e+00 -6.6659817453713259e+00 + 1.2858836879636657e+00 1.9078243888279407e+00 -7.0356092491522455e+00 + 1.8434712527119659e+00 1.8924672883341387e+00 -7.2942372090134393e+00 + 2.4946906307701475e+00 1.8985447111052016e+00 -7.3198374135766002e+00 + 3.2152908751591376e+00 1.7649917272124949e+00 -7.1519976317623071e+00 + 3.3747154875476912e+00 1.3512046762029866e+00 -7.2237716395089606e+00 + id 13576 + loc 1.7577920854091644e-01 1.4422051608562469e-02 409 + blend 0.0000000000000000e+00 + interp 3.2797609731216715e-01:3.0310800221625489e-01:3.1255998581529387e-02:1.0297865327569082e-01:1.0114160582882519e+00:3.0314481921506414e-01:2.1664160749807202e+00:3.2797281755119406e-01:3.0628671552689806e+00 + CVs 20 + -1.2134456310538178e-01 1.8357496962507827e-01 -2.7104357774299137e-01 + -2.5044969181822013e-01 3.4047934601546848e-01 -5.2004110463237341e-01 + -3.6843540503608979e-01 4.8148626296763664e-01 -7.7243164812944487e-01 + -4.7081380874874224e-01 6.0831840320544317e-01 -1.0335984081560419e+00 + -5.6785384649578297e-01 7.1932873022055233e-01 -1.3021764786747130e+00 + -6.6677865534733205e-01 8.1735635336363344e-01 -1.5813525005459153e+00 + -7.6740612612543402e-01 9.1124023344290817e-01 -1.8765512644193487e+00 + -8.6532075502500827e-01 1.0063239858422270e+00 -2.1944563849895764e+00 + -9.5567548731966556e-01 1.0941669141220998e+00 -2.5428420489581178e+00 + -1.0340354432259609e+00 1.1586693571511857e+00 -2.9245811353889075e+00 + -1.0961605435077599e+00 1.1867917502947958e+00 -3.3326413985561318e+00 + -1.1421080499831040e+00 1.1687509697137308e+00 -3.7552940670488528e+00 + -1.1772022870454275e+00 1.0933846143534738e+00 -4.1845193915706584e+00 + -1.2041038340374031e+00 9.4892327062586967e-01 -4.6136343749717383e+00 + -1.2188131308456127e+00 7.3242955576429303e-01 -5.0273756916030656e+00 + -1.2127875054869424e+00 4.5850373029449853e-01 -5.3992291765763936e+00 + -1.1809102935564624e+00 1.5519641899434555e-01 -5.6991541362540596e+00 + -1.1268513558812887e+00 -1.5091391390349251e-01 -5.8996588122059741e+00 + -1.0532966184595369e+00 -4.7550760520093815e-01 -5.9425996499225580e+00 + id 13577 + loc 1.0863596946001053e-01 3.4454014897346497e-01 400 + blend 0.0000000000000000e+00 + interp 4.8574328681438023e-01:4.4852817428020719e-01:7.3952518513676746e-01:4.6825924161896748e-01:1.0442934155225188e+00:4.3649177690433522e-01:1.9824724473047579e+00:3.1873342685853540e-01:2.8339110027640575e+00:4.8573842938151213e-01:3.0488324553706727e+00:3.8628629864528158e-01:3.9777645618140252e+00 + CVs 20 + -6.0723778436097935e-02 2.4070294043906601e-01 1.4403198701962061e-01 + -1.5004002370334030e-01 4.9532976512218896e-01 3.0931863939358512e-01 + -2.6969059601207124e-01 7.4897108729821726e-01 4.6866373567579328e-01 + -4.1824746922203848e-01 9.9268151447290587e-01 6.1231724699565049e-01 + -5.9436932415332633e-01 1.2224877032971031e+00 7.4602794625990398e-01 + -7.9654621112163371e-01 1.4317637168107558e+00 8.7691130455935007e-01 + -1.0244551127150139e+00 1.6105014368586426e+00 1.0117361829402927e+00 + -1.2773201165059516e+00 1.7466502260093282e+00 1.1548692163746315e+00 + -1.5516284359998687e+00 1.8287363694209335e+00 1.3067647201316257e+00 + -1.8400399428159804e+00 1.8499782086565566e+00 1.4642586267446482e+00 + -2.1319486523196907e+00 1.8121322586025692e+00 1.6215165283083897e+00 + -2.4160434135053310e+00 1.7274765717583367e+00 1.7700644450062561e+00 + -2.6880085209333564e+00 1.6146369371960754e+00 1.9024431026388517e+00 + -2.9561283812379813e+00 1.4845249983817335e+00 2.0182278343623263e+00 + -3.2261390119428013e+00 1.3412423511765388e+00 2.1178139276231125e+00 + -3.4648983795101467e+00 1.2223228611012513e+00 2.1878070692284006e+00 + -3.5555079908365164e+00 1.2223898260314952e+00 2.1959097895387831e+00 + -3.3789286946490633e+00 1.2799950355444047e+00 2.1407850123078456e+00 + -3.6169115827953009e+00 1.3710386971226252e+00 2.1674792005265302e+00 + id 13578 + loc 2.1900954842567444e-01 6.8860834836959839e-01 374 + blend 0.0000000000000000e+00 + interp 4.7372445854829209e-01:3.5799877619726417e-01:7.9542023779548121e-01:4.4140344610101673e-01:9.3891135357496625e-01:3.6191084073023311e-01:1.9310204334987109e+00:3.0509610055953140e-01:2.5873512389157254e+00:4.7371972130370665e-01:3.0002657243868960e+00:3.4495505963063317e-01:3.8550241716043434e+00 + CVs 20 + -6.5157398596781813e-01 3.0424075981028131e-01 -7.5606732847856850e-02 + -1.1421039515641085e+00 4.9885229740694897e-01 -7.6529861689006440e-02 + -1.5980264316496027e+00 6.3611267418851236e-01 -3.1769523159453195e-02 + -2.0842329808971738e+00 7.5975466394928870e-01 3.1034764794312331e-02 + -2.6002796733285747e+00 8.9992448871443276e-01 8.0528042347023709e-02 + -3.1424122009991633e+00 1.0711058770063893e+00 8.1235115172973438e-02 + -3.7136269731782261e+00 1.2531831424118001e+00 4.9183929854645925e-05 + -4.3081330984365946e+00 1.4020053891186517e+00 -1.8732446227643695e-01 + -4.9024237751858779e+00 1.4730151227734423e+00 -4.8702954005980970e-01 + -5.4675798694118711e+00 1.4299428221585497e+00 -8.8325412287791039e-01 + -5.9823078996186565e+00 1.2426705850174362e+00 -1.3344274955467474e+00 + -6.4268933879978452e+00 8.9329531538231866e-01 -1.7743666282155064e+00 + -6.7754988498425046e+00 3.9260932267908988e-01 -2.1314168081900737e+00 + -7.0239410085978253e+00 -2.1508045627791894e-01 -2.3633491814794434e+00 + -7.2260320141875347e+00 -8.8246552450563209e-01 -2.4846487780151958e+00 + -7.4687759031103917e+00 -1.5823298891932862e+00 -2.5437966542562167e+00 + -7.8211824211933134e+00 -2.2697262415710746e+00 -2.5629996551840408e+00 + -8.2844826293416531e+00 -2.8757492113046323e+00 -2.5218418820139936e+00 + -8.7304544069582377e+00 -3.4260505275353439e+00 -2.4847424902272870e+00 + id 13579 + loc 2.9564374685287476e-01 6.6527640819549561e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8537944088525866e-01:2.9575080418344624e-01:5.4107971307381986e-02:3.8537558709084985e-01:9.9962395788341996e-01:3.0630836462152511e-01:1.8412984079544934e+00:2.9551076564388878e-01:2.6892890874848416e+00:3.7498260760962182e-01:3.4534910404218504e+00 + CVs 20 + 1.2982162006365905e-01 3.0769087655310023e-01 6.2720108492122506e-02 + 2.6168661592204395e-01 5.9460457937941613e-01 6.7279437792509694e-02 + 4.0052415847879147e-01 8.7974226847016834e-01 3.7610639751189778e-02 + 5.4978891844947286e-01 1.1633082632064848e+00 -2.1165905669783158e-02 + 7.1118813059056329e-01 1.4291852500253284e+00 -1.2033551922920405e-01 + 8.8377592690059992e-01 1.6570744323040896e+00 -2.7201411096955996e-01 + 1.0588055768387119e+00 1.8243319484573011e+00 -4.8583777825721808e-01 + 1.2163122884731874e+00 1.9114348018238645e+00 -7.6250632163234755e-01 + 1.3301200908130961e+00 1.9055201935598975e+00 -1.0900724594531184e+00 + 1.3786238932935964e+00 1.7987532115237890e+00 -1.4444076607955578e+00 + 1.3519926290012323e+00 1.5869385240203797e+00 -1.7912858019488511e+00 + 1.2627614552818938e+00 1.2798903969141002e+00 -2.1011631993863014e+00 + 1.1441957546014729e+00 9.1556564374711691e-01 -2.3817354995982321e+00 + 1.0284161621526302e+00 5.8901832698219203e-01 -2.6938158764306519e+00 + 9.5580695508414615e-01 5.2030786267639528e-01 -3.1090896522613223e+00 + 1.0083336253463500e+00 9.8549684590275821e-01 -3.4591047984320920e+00 + 1.2389419246544890e+00 1.8212119126763326e+00 -3.2192868375607042e+00 + 1.4145795469255944e+00 2.2667112953266773e+00 -2.1848657661314976e+00 + 1.5001340343020824e+00 2.5644545696762964e+00 -2.1778198787753613e+00 + id 13580 + loc 3.8941287994384766e-01 2.4175388738512993e-02 375 + blend 0.0000000000000000e+00 + interp 5.4095575879848423e-01:2.7531071053212980e-01:2.2672296558634386e-01:4.3652176032224893e-01:1.0294744913570426e+00:4.1686361988605136e-01:1.6706538785533964e+00:5.4095034924089624e-01:2.0420035400648411e+00:3.6302689252774922e-01:2.9832265758249603e+00:4.9520532084512181e-01:3.2809214407719862e+00:5.2943543739423515e-01:3.8516682249764451e+00 + CVs 20 + -8.4088902476825919e-02 5.6838526663693001e-01 7.1886415905207957e-01 + -1.2636352034856566e-01 1.0205124701167450e+00 1.4081028612906161e+00 + -2.0681680281641590e-01 1.3666979081334178e+00 2.1322972571430201e+00 + -4.3382356937542377e-01 1.6551826694077121e+00 2.7916310353938099e+00 + -8.6420418952735800e-01 1.8915257401492471e+00 3.1483357195979700e+00 + -1.3285504375992396e+00 1.9892530323537148e+00 3.0518991879801587e+00 + -1.6335491980817018e+00 1.9296687961434249e+00 2.7060575161330349e+00 + -1.8295391893880919e+00 1.7501943134854918e+00 2.2724736575852136e+00 + -1.9392889440129784e+00 1.4437433229795169e+00 1.7882272844796228e+00 + -1.9580472877196460e+00 1.0228539279805391e+00 1.3072469807599738e+00 + -1.8995996633548242e+00 5.2112073916477675e-01 8.7289982674164857e-01 + -1.7760051691716876e+00 -3.3289715556558130e-02 4.7453963056985254e-01 + -1.5989927157853168e+00 -6.1347209112378687e-01 4.6771717460954709e-03 + -1.4512470015297863e+00 -1.1424558699939176e+00 -7.6260118252079367e-01 + -1.5047956946198231e+00 -1.3706734337351405e+00 -1.8750528816429690e+00 + -1.8622279840392628e+00 -1.1475832187099093e+00 -3.0009140176951550e+00 + -2.5039288391730654e+00 -5.2972105771842792e-01 -3.8453608962756034e+00 + -3.2974940448704708e+00 2.8908051596254869e-01 -4.2133679541093567e+00 + -4.1105968459446904e+00 1.1070497970424347e+00 -4.1887968768136368e+00 + id 13581 + loc 5.2192056179046631e-01 3.2089996337890625e-01 393 + blend 0.0000000000000000e+00 + interp 4.7730751158381529e-01:2.9135479141566989e-01:4.9026647549077440e-01:4.7730273850869948e-01:9.9958341506448500e-01:4.7515169134602397e-01:1.3602359524891454e+00:4.1278852015437562e-01:1.9334382187912169e+00:2.8364093465923379e-01:2.2930974627703833e+00:2.8820687828550923e-01:3.3372764485486526e+00:4.1878500002256058e-01:3.9848582591381829e+00 + CVs 20 + 2.2592057086057454e-01 3.3213071085781476e-01 1.5724644305546087e-01 + 4.3723531387816150e-01 6.9153097049428114e-01 2.9253235989434678e-01 + 6.1316221479153366e-01 1.0846887273159771e+00 4.0093245638284364e-01 + 7.5954066115223640e-01 1.5109072097654848e+00 5.0194947236441734e-01 + 9.0015735897793625e-01 1.9503947296002178e+00 6.4175843196734594e-01 + 1.0426856786115892e+00 2.3763569201530901e+00 8.5274572851786345e-01 + 1.1791328743887708e+00 2.7835289567575225e+00 1.1467150709752871e+00 + 1.3090368969858959e+00 3.1707826797852130e+00 1.5390608939661310e+00 + 1.4501683557781555e+00 3.5126279797588267e+00 2.0375739502285124e+00 + 1.6274960081476562e+00 3.7653620656390721e+00 2.6278696687289260e+00 + 1.8564691413182917e+00 3.8846791749912688e+00 3.2723595986066365e+00 + 2.1341412467797207e+00 3.8408945824320564e+00 3.9172036764266922e+00 + 2.4392803813130444e+00 3.6268889475353738e+00 4.5079500932829175e+00 + 2.7436494793415962e+00 3.2580110818610857e+00 4.9981301628272243e+00 + 3.0208782012264201e+00 2.7751110136415087e+00 5.3429397406202694e+00 + 3.2443633518042989e+00 2.2492599773344191e+00 5.5063467792418317e+00 + 3.4090918701321060e+00 1.7437804282508405e+00 5.4921900673202639e+00 + 3.5581654084508858e+00 1.3064506414231225e+00 5.3070898655567955e+00 + 3.7424292163426527e+00 1.0583112817013631e+00 4.9065880824546655e+00 + id 13582 + loc 1.5727326273918152e-01 7.7367871999740601e-01 415 + blend 0.0000000000000000e+00 + interp 3.7079974299729990e-01:3.6145055045726904e-01:6.4927677295931341e-01:2.6531440507811804e-01:1.2437025987052754e+00:2.9641825991049481e-01:1.8156609943583883e+00:2.3591932164920093e-01:2.1119665593641415e+00:3.7079603499986996e-01:3.0824214886729808e+00:3.0418572421069101e-01:3.9147750603484237e+00 + CVs 20 + 4.4181205500846765e-01 2.3983592646736024e-01 1.7687660810389613e-01 + 8.0300343963418686e-01 3.7715043368255174e-01 2.5838554985909223e-01 + 1.1528026214938680e+00 4.7538068199601036e-01 3.3977323856085706e-01 + 1.5225680507976969e+00 5.5927119403516490e-01 4.6558365526820700e-01 + 1.9043823708145557e+00 6.2099359347213234e-01 6.4326225314300300e-01 + 2.2860323737447850e+00 6.5389652822109245e-01 8.7978839229812023e-01 + 2.6518237340785245e+00 6.5407133393906314e-01 1.1770809415581140e+00 + 2.9877139820094434e+00 6.2211605354419175e-01 1.5279366746354368e+00 + 3.2848024982061457e+00 5.6384118892799839e-01 1.9198968932869456e+00 + 3.5380083930698722e+00 4.8838666984873313e-01 2.3395789036722690e+00 + 3.7527394037385391e+00 4.0387291992485430e-01 2.7636537096564546e+00 + 3.9621509386280804e+00 3.1025521907151887e-01 3.1468928420261282e+00 + 4.2133910901031930e+00 2.0191184256112127e-01 3.4370861668565960e+00 + 4.5121148469433727e+00 8.3651536634271828e-02 3.6169752257086309e+00 + 4.8261337324593896e+00 -3.2434836207785089e-02 3.7169648470883789e+00 + 5.1354523209955412e+00 -1.3980180073299930e-01 3.7602813390286220e+00 + 5.4328102643363296e+00 -2.3020116525878409e-01 3.7398786177922307e+00 + 5.7079883330770329e+00 -2.8953754911127927e-01 3.6517695988104175e+00 + 5.9578868490973065e+00 -3.1305274659273907e-01 3.7120834183150917e+00 + id 13583 + loc 6.9344371557235718e-01 6.7098423838615417e-02 402 + blend 0.0000000000000000e+00 + interp 4.4008109442571780e-01:3.1797062736034343e-01:9.5449945668283354e-03:4.4007669361477358e-01:8.1310406885005815e-01:3.0881858139768192e-01:1.1736944033695405e+00:2.9506416838187205e-01:2.0534500350151195e+00:2.6369676328127922e-01:3.0026104918969976e+00:4.1200762902322807e-01:3.5126158150029672e+00 + CVs 20 + 3.1948632751475453e-01 3.1325837180929872e-01 1.4644083295002880e-01 + 5.9318473411868666e-01 6.1622364788880679e-01 3.0223065240309238e-01 + 8.2527870830527172e-01 8.9625672344130858e-01 4.5956777044610747e-01 + 1.0185073506957294e+00 1.1465204501642701e+00 6.0841195265620607e-01 + 1.1899494975489611e+00 1.3761464468761828e+00 7.4828420614225588e-01 + 1.3769076861430132e+00 1.5984313597973641e+00 8.8456349654769695e-01 + 1.6228209388957184e+00 1.8114089541616019e+00 1.0168039700747411e+00 + 1.9609249425386750e+00 1.9922981231414501e+00 1.1440677864518227e+00 + 2.3987548324946419e+00 2.1127007852391197e+00 1.2868877431250205e+00 + 2.9158934008182671e+00 2.1383231401496325e+00 1.4829022301883399e+00 + 3.4098400425730482e+00 2.0054915844144587e+00 1.7464555670497490e+00 + 3.7246825154301328e+00 1.7054382197926994e+00 2.0316137663307616e+00 + 3.8640771036738863e+00 1.3052884436729311e+00 2.2879939011388322e+00 + 3.9578211847886453e+00 8.6094473922435455e-01 2.5001429762313512e+00 + 4.1327344726645014e+00 4.1734014172300116e-01 2.6652340294012493e+00 + 4.4667656386834000e+00 2.3174050839328442e-02 2.7838072136308862e+00 + 4.9394510359020654e+00 -3.0137495353394905e-01 2.8772221704315930e+00 + 5.4535810928755950e+00 -5.6572510643191010e-01 2.9825579126798654e+00 + 5.8613647816596277e+00 -7.5341966802868732e-01 3.1170695488827600e+00 + id 13584 + loc 9.7269527614116669e-02 8.1191718578338623e-01 373 + blend 0.0000000000000000e+00 + interp 6.6226823705111337e-01:3.8562363987977560e-01:7.4220305129389930e-02:3.0381562771782766e-01:8.7268613059481659e-01:6.6226161436874287e-01:1.1418075466778390e+00:3.7306213697849089e-01:2.1010801305264639e+00:2.9087262999784624e-01:2.8597511286328592e+00:3.7092713858835574e-01:3.6324988379480967e+00 + CVs 20 + -3.5776993085315401e-01 5.6972118301620511e-01 -1.6261540168073629e-01 + -6.1647656346704827e-01 1.1285788143764734e+00 -3.4610825465725031e-01 + -7.6483037560919542e-01 1.6694631495502283e+00 -5.4733080737260753e-01 + -8.2793348930219290e-01 2.1852322470481775e+00 -7.6957959897949846e-01 + -8.4711705253183089e-01 2.6659704045600954e+00 -1.0237538114349105e+00 + -8.6942644835535021e-01 3.1040067937380864e+00 -1.3198763720257669e+00 + -9.3209832928660830e-01 3.4918623233628492e+00 -1.6627605537515719e+00 + -1.0594359759381800e+00 3.8192621667344913e+00 -2.0436833118045752e+00 + -1.2636482318541913e+00 4.0760538004307607e+00 -2.4361858552933500e+00 + -1.5401222558246619e+00 4.2606302403400624e+00 -2.7987320174178105e+00 + -1.8708275849764635e+00 4.3870882546114647e+00 -3.0979480703918827e+00 + -2.2593543363195527e+00 4.4708952366190138e+00 -3.3245405118887681e+00 + -2.7445091024188639e+00 4.4980895383593342e+00 -3.4713586822035127e+00 + -3.3351987769852069e+00 4.4293491228875963e+00 -3.5249141638566237e+00 + -4.0038886307951218e+00 4.2384641940609900e+00 -3.4912892397901620e+00 + -4.7223488846461219e+00 3.9295244631514357e+00 -3.3930197084814102e+00 + -5.4394264559983885e+00 3.5428106874458987e+00 -3.2727525709134646e+00 + -6.0746956395205602e+00 3.1010960213624879e+00 -3.1350554604876386e+00 + -6.5530411576118128e+00 2.5720423786670357e+00 -2.9122764243399653e+00 + id 13585 + loc 3.6550781130790710e-01 3.1069543957710266e-01 412 + blend 0.0000000000000000e+00 + interp 4.4199722915318546e-01:4.4199280918089395e-01:2.7791378706915337e-01:3.7452144779529334e-01:8.1055081859712375e-01:3.2293571809909516e-01:1.0925146151426792e+00:3.2157251631928196e-01:1.9293660479828045e+00:2.8703135318161721e-01:2.4297882938524586e+00:3.1723215230249213e-01:3.0387262508123944e+00:4.3965009353532652e-01:3.9074363975825270e+00 + CVs 20 + -1.7696497053383609e-01 1.4941860729542228e-01 -4.9671412277950872e-01 + -3.4969846003706712e-01 2.1110094783394659e-01 -8.4394612282060399e-01 + -5.2448804368502899e-01 2.3686024081478230e-01 -1.1648866984349411e+00 + -6.9827035246123148e-01 2.5602622002660858e-01 -1.5234379992183147e+00 + -8.6394780157549800e-01 2.6511978320149293e-01 -1.9194024312857418e+00 + -1.0110573319498257e+00 2.6146761303222477e-01 -2.3499718955479398e+00 + -1.1268518815229742e+00 2.4415549363719768e-01 -2.8090703625728297e+00 + -1.2012857866740760e+00 2.1288571808612167e-01 -3.2868283129375180e+00 + -1.2294857208249306e+00 1.6788846084988407e-01 -3.7713135707229108e+00 + -1.2102786940204169e+00 1.1091894367333111e-01 -4.2499853286917340e+00 + -1.1520351846756474e+00 4.1534150669877201e-02 -4.7064049476499408e+00 + -1.0884056375824107e+00 -5.3108238882563663e-02 -5.1215956509055651e+00 + -1.0654396910133708e+00 -1.9133596526633667e-01 -5.4874352766692285e+00 + -1.0917514337523810e+00 -3.7265745870775069e-01 -5.8170579607041448e+00 + -1.1461767424666114e+00 -5.8645653529790254e-01 -6.1288193894214933e+00 + -1.2198938057854578e+00 -8.2111780586761851e-01 -6.4193628043926445e+00 + -1.3146670039493620e+00 -1.0599789883094717e+00 -6.6751213856588301e+00 + -1.4249694852656465e+00 -1.2876683406978398e+00 -6.8938496537319001e+00 + -1.4578118958572903e+00 -1.4661479550221128e+00 -7.1377757585418031e+00 + id 13586 + loc 8.9073276519775391e-01 1.9698348641395569e-01 403 + blend 0.0000000000000000e+00 + interp 4.5058995722798478e-01:3.3712721103653143e-01:4.0800185117622134e-01:2.8014025025168787e-01:1.6369358295638734e+00:4.5058545132841255e-01:2.1580654760157052e+00:3.2878577232451739e-01:2.7583246723395352e+00:2.7767342126347538e-01:3.2054373974734789e+00:3.5526205083818568e-01:3.9834491171669364e+00 + CVs 20 + 3.7291507095811915e-02 4.7575951205701544e-02 5.4547062875796720e-02 + 5.3743889983906508e-02 1.2086500835957448e-01 1.1058029326281346e-01 + 6.3192819611952389e-02 2.0769192806508202e-01 1.6116944104232839e-01 + 7.2813764657257946e-02 3.0108470973471013e-01 2.0376399939578296e-01 + 8.3778261533231563e-02 4.0155805884157458e-01 2.3975431941413555e-01 + 9.8515236043864862e-02 5.1016104345220437e-01 2.7112312653584608e-01 + 1.2067563084848987e-01 6.2829056780948167e-01 3.0013598668724362e-01 + 1.5528276777617384e-01 7.5680680812012346e-01 3.2871358698230596e-01 + 2.0759290429968114e-01 8.9466918682142871e-01 3.5659289634628843e-01 + 2.8012415929971646e-01 1.0393176077237898e+00 3.8009380176741725e-01 + 3.7155216248927503e-01 1.1892706105964317e+00 3.9397446684066040e-01 + 4.7919302824578996e-01 1.3452457504169546e+00 3.9420795666719177e-01 + 5.9922141078651292e-01 1.5083201739103109e+00 3.7809160477946324e-01 + 7.2366939852346124e-01 1.6782011504941170e+00 3.4348302439789258e-01 + 8.4092314826028935e-01 1.8529104407689574e+00 2.8974740979810670e-01 + 9.4252857595498574e-01 2.0297319833472196e+00 2.1995588586625420e-01 + 1.0270646636618586e+00 2.2046798122492950e+00 1.3990838783027074e-01 + 1.0977864181200898e+00 2.3724064489628325e+00 5.5394646681802495e-02 + 1.1968150650870670e+00 2.5243489882704466e+00 -5.0903257587784689e-02 + id 13587 + loc 6.1410528421401978e-01 1.7626637220382690e-01 380 + blend 0.0000000000000000e+00 + interp 4.4935843563035932e-01:3.4867349866583941e-01:1.9946003744643004e-01:2.8035235038021722e-01:9.2123803221491374e-01:3.4654247146945638e-01:1.2446181654096851e+00:3.1182962523215813e-01:2.0793876304479886e+00:3.7452239710896768e-01:2.8360580151853840e+00:4.4935394204600304e-01:3.3006100418555206e+00:3.8320835298777595e-01:3.9126962234195135e+00 + CVs 20 + 5.0406436516430830e-01 2.5603858183010098e-01 6.1003178633243216e-01 + 9.0678854044895740e-01 4.0488326263693258e-01 1.0479681018170401e+00 + 1.2904679836700788e+00 5.0845218050401841e-01 1.4454364425913213e+00 + 1.6898793304726019e+00 5.9636327000954670e-01 1.8636180063886925e+00 + 2.0951975785348682e+00 6.6327849911773162e-01 2.3069861515511936e+00 + 2.5008443232282915e+00 6.9887488218634330e-01 2.7825459352154009e+00 + 2.9038505900194913e+00 6.8285275070796314e-01 3.2928238643534447e+00 + 3.2950783149328924e+00 5.8746941877759795e-01 3.8304242852936956e+00 + 3.6596397868714194e+00 3.8749128080038608e-01 4.3782980686930379e+00 + 3.9836902639474046e+00 7.0045220108417183e-02 4.9051431625421325e+00 + 4.2514288459926304e+00 -3.5863733032963774e-01 5.3629669744602761e+00 + 4.4384712185982389e+00 -8.7030197721168490e-01 5.7018815238111236e+00 + 4.5294383583407249e+00 -1.4224075052159395e+00 5.8990085364842342e+00 + 4.5504274429807188e+00 -1.9865409085390864e+00 5.9837432068149807e+00 + 4.5551836939513386e+00 -2.5693767246014434e+00 6.0193918428732616e+00 + 4.5991299671702084e+00 -3.1827359113079092e+00 6.0558308313032114e+00 + 4.7354190818312851e+00 -3.8134859260387768e+00 6.1061297440784319e+00 + 4.9746133710583997e+00 -4.3997815711508572e+00 6.1444755303037004e+00 + 5.1394963010266936e+00 -4.8017483103146059e+00 6.1411223331916531e+00 + id 13588 + loc 9.1933083534240723e-01 7.8936152160167694e-02 395 + blend 0.0000000000000000e+00 + interp 4.7518825618019589e-01:3.0863555556718431e-01:2.6818053397192121e-02:3.6984499234637486e-01:9.8920236794938088e-01:2.5616627968951799e-01:1.8414702945536348e+00:4.7518350429763412e-01:2.0848978951339281e+00:2.5806150838883135e-01:3.0190100949263403e+00:3.8218581383697603e-01:3.5947925228803594e+00 + CVs 20 + -3.7373001579973308e-01 1.7009203004045620e-01 2.5292921648727790e-01 + -6.7238732915357158e-01 3.1926656523397939e-01 5.2265755656628543e-01 + -9.6048600075933299e-01 4.7215132340360255e-01 8.0703796097067915e-01 + -1.2754610338404908e+00 6.4520814227531087e-01 1.0989558321542181e+00 + -1.6246016855373351e+00 8.3681106119428561e-01 1.3854731608496695e+00 + -2.0123300718226464e+00 1.0341745255183845e+00 1.6548720982985530e+00 + -2.4419855051478909e+00 1.2171523599410756e+00 1.9022584398341400e+00 + -2.9130207716487821e+00 1.3645116832661330e+00 2.1226568395031884e+00 + -3.4164686126619079e+00 1.4596358447381266e+00 2.3118740322280522e+00 + -3.9361153767030812e+00 1.4910017564648648e+00 2.4734815796353633e+00 + -4.4537874354193248e+00 1.4475208723009918e+00 2.6160609512579858e+00 + -4.9523034475543364e+00 1.3139984746935420e+00 2.7439426135823091e+00 + -5.4137164461802438e+00 1.0820342446785216e+00 2.8580528507663350e+00 + -5.8257121152279163e+00 7.8199263029135402e-01 2.9640880919295394e+00 + -6.1903208943336674e+00 4.8665018597069487e-01 3.0756310032465466e+00 + -6.5089324201308116e+00 2.5595821269638952e-01 3.2053132053017714e+00 + -6.7709004876810814e+00 1.0249222916423983e-01 3.3602304022814948e+00 + -6.9699492582498177e+00 7.2054018533442843e-03 3.5371952550191708e+00 + -7.1625443644302944e+00 -1.2421200174142388e-01 3.7318177767448870e+00 + id 13589 + loc 8.4168195724487305e-02 7.3770207166671753e-01 400 + blend 0.0000000000000000e+00 + interp 4.6707397899012443e-01:3.4348452638808546e-01:9.8840270675489750e-01:2.9127664620801896e-01:1.9788506907756320e+00:2.9809940804123536e-01:2.6034580248115899e+00:4.6706930825033455e-01:3.2252915742341042e+00:3.0062711150610777e-01:3.9753323803914808e+00 + CVs 20 + -2.2842409664252275e-01 2.5509510331006385e-01 3.2269612997628871e-02 + -4.7799575813989748e-01 5.4797733787858138e-01 4.7378669537374046e-02 + -7.4453347663855285e-01 8.7388683011325041e-01 1.7918198712574829e-02 + -1.0200046538106240e+00 1.2177453609579452e+00 -7.8991980340151424e-02 + -1.2946456417190164e+00 1.5585500346065129e+00 -2.5408559166960798e-01 + -1.5585255477930042e+00 1.8762771547364596e+00 -5.0624956882499483e-01 + -1.8041395593843041e+00 2.1572776291570874e+00 -8.2958521492865667e-01 + -2.0255208444765840e+00 2.3939818800917032e+00 -1.2196026653361109e+00 + -2.2152105947898866e+00 2.5818778127952347e+00 -1.6742518560224271e+00 + -2.3591397969357719e+00 2.7131751886407249e+00 -2.1818343446415955e+00 + -2.4427281892935668e+00 2.7779949740520884e+00 -2.7011451269690792e+00 + -2.4741391235530408e+00 2.7826404124414434e+00 -3.1752805623164653e+00 + -2.4787930711210482e+00 2.7470825575463627e+00 -3.5793312213952091e+00 + -2.4758475888394091e+00 2.6875082845116416e+00 -3.9147570512644014e+00 + -2.4706994868995937e+00 2.6160223267864549e+00 -4.1832521736725337e+00 + -2.4563214315845419e+00 2.5418966752466612e+00 -4.3922479671555585e+00 + -2.4261601583359291e+00 2.4621581155753454e+00 -4.5638860909449930e+00 + -2.4004997300884314e+00 2.3562081930017449e+00 -4.7269014065833002e+00 + -2.4520320303428536e+00 2.1968773544688061e+00 -4.8888870404241498e+00 + id 13590 + loc 8.1587505340576172e-01 4.4795957207679749e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5758094567206472e-01:2.6708690324520240e-01:9.0029938320419811e-01:2.5575829620252188e-01:1.6782991831622636e+00:3.5757736986260802e-01:2.2650462615211229e+00:2.7120422188475291e-01:3.0190074383953589e+00:2.9538794764776816e-01:3.9873591963129646e+00 + CVs 20 + -8.8987166233354786e-02 3.2171504262048961e-01 -1.6707570887174167e-01 + -1.6247780965281960e-01 5.4107568857113186e-01 -2.1127649126013873e-01 + -2.2269263204778231e-01 7.4692089261295436e-01 -2.1272750524496059e-01 + -2.5212358194409124e-01 9.4483994375059177e-01 -2.1435563290263498e-01 + -2.4402543374403696e-01 1.1171721370289278e+00 -2.1829512114787381e-01 + -1.8668149238953674e-01 1.2458278171150696e+00 -2.4393811374360264e-01 + -5.9592761531109623e-02 1.3372028862809309e+00 -3.4687904970524386e-01 + 1.3052267203350842e-01 1.4965207980376869e+00 -6.0954593163431836e-01 + 2.5050094555055080e-01 1.8818335882891617e+00 -9.1770523895147493e-01 + 2.3267809863273964e-01 2.3380447838246181e+00 -1.0037116178483072e+00 + 1.7695829689180004e-01 2.6878827753391619e+00 -8.7522285417638113e-01 + 1.6576606037819488e-01 2.8827023984047160e+00 -6.2907880744840861e-01 + 2.3826863503010154e-01 2.9155495241568516e+00 -3.7611644314373116e-01 + 3.6162274329810418e-01 2.8302570095474668e+00 -2.4358107252075278e-01 + 4.6235293141306794e-01 2.6527292888436609e+00 -4.0413797052461309e-01 + 5.7046060310470703e-01 2.1003244587142200e+00 -9.6328102948763139e-01 + 1.0869507144551380e+00 6.3442537459897586e-01 -9.6147127747345174e-01 + 1.6902657601556410e+00 1.6325491760047686e-01 3.9376037520729762e-01 + 1.7503039254075070e+00 2.7833512373633856e-01 2.8112924502649650e-01 + id 13591 + loc 4.2264214158058167e-01 4.5993289351463318e-01 396 + blend 0.0000000000000000e+00 + interp 4.8602919035172387e-01:3.5493715821119487e-01:2.5009426177865501e-03:4.7372958595445780e-01:4.0281101883026893e-01:4.2499305043433744e-01:1.0419421410620766e+00:4.8087370467845980e-01:1.9082177518531758e+00:3.2399585580104168e-01:2.0779552556444387e+00:4.8602433005982038e-01:2.6758850904586340e+00:4.4248883337146200e-01:3.0170413344317639e+00:4.4433997336588732e-01:3.6348956398834589e+00 + CVs 20 + -3.6316684343593086e-01 2.6031087188419277e-01 -6.3521205897902644e-01 + -6.9002734646526631e-01 3.7932090190261619e-01 -1.0773205933955010e+00 + -1.0203519474485636e+00 4.3869647580907251e-01 -1.5059237587595953e+00 + -1.3528444488643476e+00 4.7617307778514378e-01 -1.9977568097373188e+00 + -1.6652101090811398e+00 4.8339078049617978e-01 -2.5497357445164863e+00 + -1.9404206460610278e+00 4.5444861605500098e-01 -3.1481835342723561e+00 + -2.1728068173919977e+00 3.8554406346298220e-01 -3.7765282709890404e+00 + -2.3626013436070101e+00 2.6902057894054376e-01 -4.4186747018877739e+00 + -2.5129922975224357e+00 9.3825187540915955e-02 -5.0556814110654917e+00 + -2.6372760178106662e+00 -1.5047245568358392e-01 -5.6676558803281401e+00 + -2.7565339729209990e+00 -4.7480788693157017e-01 -6.2412548481118924e+00 + -2.8830743765070377e+00 -8.9001926208907323e-01 -6.7689063148307049e+00 + -3.0136984253448769e+00 -1.3943574577927027e+00 -7.2359568092300721e+00 + -3.1461358964392088e+00 -1.9737053690450512e+00 -7.6230706196387636e+00 + -3.2822774565525048e+00 -2.6115240278170284e+00 -7.9091450802897878e+00 + -3.4133585095267547e+00 -3.2848062033540315e+00 -8.0742870182475510e+00 + -3.5195133576095934e+00 -3.9589631422465255e+00 -8.1110213016660175e+00 + -3.5934939677403683e+00 -4.5895313601160606e+00 -8.0410211223314896e+00 + -3.6823824209024645e+00 -5.0826420029741453e+00 -7.9947327716891010e+00 + id 13592 + loc 8.5750430822372437e-02 4.2721047997474670e-01 401 + blend 0.0000000000000000e+00 + interp 4.0968497314336866e-01:3.2340132190554055e-01:5.8215947204237606e-01:3.3030448056451106e-01:1.0882235206165725e+00:2.8213422438356628e-01:1.9274964778034167e+00:3.5180362848250762e-01:2.5302494244325082e+00:4.0968087629363725e-01:3.0009403205765164e+00:2.9314261185359142e-01:3.6672300363378536e+00 + CVs 20 + -2.7005897503240334e-01 1.3124389565151723e-01 1.6927792297506883e-01 + -5.2167898083031661e-01 2.7641859115352341e-01 3.1733607571089328e-01 + -7.5729002480508523e-01 4.2559573673664053e-01 4.5134361005332219e-01 + -9.8143765283185669e-01 5.7434346310290740e-01 5.7545303642505208e-01 + -1.1970546852651442e+00 7.1989611697773248e-01 6.8730745082032774e-01 + -1.4087810166494619e+00 8.6242653477852649e-01 7.9058536272539737e-01 + -1.6217666716666483e+00 1.0031297528601075e+00 9.0120460661102775e-01 + -1.8384285456959493e+00 1.1384589367390010e+00 1.0423334841186409e+00 + -2.0525307189892561e+00 1.2595886467935160e+00 1.2327743748125395e+00 + -2.2508345692240437e+00 1.3562582519472177e+00 1.4812288867555774e+00 + -2.4230017984239853e+00 1.4225458437044123e+00 1.7820792916297410e+00 + -2.5691394950331032e+00 1.4569194833110493e+00 2.1199257654065762e+00 + -2.6986356832581624e+00 1.4552439028342894e+00 2.4748705141681313e+00 + -2.8263370306017572e+00 1.4099148017799472e+00 2.8165142100432221e+00 + -2.9576632200885680e+00 1.3269272589551773e+00 3.1116761360437639e+00 + -3.0882194372932665e+00 1.2205350369935695e+00 3.3527103378210650e+00 + -3.2079393642722502e+00 1.0969877536523569e+00 3.5617112449095378e+00 + -3.2268892778165590e+00 9.8094444361161770e-01 3.7719579986793610e+00 + -2.8988739427020431e+00 9.9110531521400780e-01 3.9527854570727854e+00 + id 13593 + loc 6.1144101619720459e-01 4.4878000020980835e-01 376 + blend 0.0000000000000000e+00 + interp 4.7630655722944731e-01:2.9571484215731980e-01:3.1465151212822273e-01:3.4173523667722150e-01:1.0042741239397539e+00:3.3563368229443730e-01:1.7739326132217590e+00:2.6227203800822901e-01:2.6388235136970177e+00:3.2475558902797580e-01:3.0844852473818101e+00:4.7630179416387503e-01:3.8664677632111069e+00 + CVs 20 + 1.3035678682462015e-01 3.5603229002016212e-01 -5.4495812956830758e-01 + 1.4874786612865032e-01 6.0615418196182569e-01 -9.7621314716744501e-01 + 8.3758605804524378e-02 7.5447784122181893e-01 -1.3690397510766146e+00 + -4.4982661286859127e-02 8.2571856866901205e-01 -1.7524681199684884e+00 + -2.2558115213613711e-01 8.6823914257034496e-01 -2.1269134230914042e+00 + -4.3836099580767246e-01 9.3422826503008172e-01 -2.5184315889634901e+00 + -6.3260783169959711e-01 1.0469453640768933e+00 -2.9636113318317441e+00 + -7.4032246110801125e-01 1.2061309515408076e+00 -3.4693638044778297e+00 + -7.0510998806491965e-01 1.4127551716116731e+00 -3.9977946638499038e+00 + -4.9564863124650449e-01 1.6680252394791637e+00 -4.4849955426627810e+00 + -1.1579602015284318e-01 1.9584422584444166e+00 -4.8895082011410294e+00 + 4.0921806994367849e-01 2.2541103028766019e+00 -5.2113515254641829e+00 + 1.0506046707054291e+00 2.5003511502970328e+00 -5.4569917025153147e+00 + 1.7609756740981253e+00 2.6291754275743782e+00 -5.6105886307485600e+00 + 2.4882332781647287e+00 2.6115759414159294e+00 -5.6426542359387586e+00 + 3.2549101840086054e+00 2.4067958160757312e+00 -5.5027460636315615e+00 + 4.1100802471146762e+00 1.7944800959596745e+00 -5.1615413068062894e+00 + 4.7442896306004982e+00 5.8640520713867783e-01 -4.8425673618786718e+00 + 4.8370935620203577e+00 2.5542098740993335e-02 -4.7143765954894059e+00 + id 13594 + loc 3.1776610016822815e-01 2.3323443531990051e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8437996309456801e-01:2.7281944829569948e-01:6.1559731364235759e-05:3.8437611929493709e-01:4.5547329423010441e-01:3.7596461798744552e-01:9.8988911000726021e-01:2.8264515907293941e-01:1.9108447904979631e+00:3.0074009103299898e-01:2.3231799958872257e+00:3.0569312177837638e-01:2.9940695269627380e+00 + CVs 20 + -1.9051851754648319e-01 2.1618060332457448e-01 -2.5787031726997411e-01 + -3.8511275631296560e-01 4.4664027198485023e-01 -4.7412899424114685e-01 + -5.9310805560921531e-01 6.7767643602355354e-01 -6.8346505031135929e-01 + -8.2241520015224512e-01 9.0289431706794676e-01 -8.9244525944436492e-01 + -1.0811775458489961e+00 1.1223988749277565e+00 -1.0869591034330957e+00 + -1.3743390072087598e+00 1.3282926953642251e+00 -1.2479873865739290e+00 + -1.7019125892244373e+00 1.5035026762889716e+00 -1.3562201171894275e+00 + -2.0551081029399945e+00 1.6249431862029124e+00 -1.3989311305804502e+00 + -2.4123732200424080e+00 1.6665997386279985e+00 -1.3730836525047829e+00 + -2.7445926298661165e+00 1.6125481177022882e+00 -1.2827606737445694e+00 + -3.0389377951138283e+00 1.4645361935934083e+00 -1.1393151660569947e+00 + -3.3170674592019394e+00 1.2250670983945584e+00 -9.6177577493364153e-01 + -3.6096149795038732e+00 8.9039428186305269e-01 -7.7726736065315327e-01 + -3.9405325637186004e+00 4.6036066154318600e-01 -6.2662247060616838e-01 + -4.3380497098801714e+00 -7.2433735665112131e-02 -5.8044032987612448e-01 + -4.8173786429618035e+00 -7.2453470725080615e-01 -7.8883912270561996e-01 + -5.2733802943916501e+00 -1.3977986771896420e+00 -1.4353693789679136e+00 + -5.5200890499564146e+00 -1.8487383390733436e+00 -2.2745074973517116e+00 + -5.6823594103274688e+00 -2.1076096251419778e+00 -2.5617168140888147e+00 + id 13595 + loc 2.7364995330572128e-02 3.4947488456964493e-02 1069 + blend 0.0000000000000000e+00 + interp 4.8545161463591180e-01:3.0916137578601866e-01:6.2208444508771166e-04:3.9878214290711400e-01:8.2710581707818809e-01:3.0428713505707966e-01:1.1142049470033053e+00:3.6182630213178063e-01:1.7957892768148067e+00:4.0490488981766826e-01:2.0858530190565645e+00:4.8544676011976545e-01:2.6981449043755310e+00:3.9273226467750244e-01:2.9998670421548703e+00:4.5209441117942845e-01:3.6814133313458344e+00 + CVs 20 + -2.1831556064737614e-01 3.0627883211564599e-01 -4.2986252707755940e-02 + -4.0172842388458796e-01 6.1045959537382044e-01 -6.8297990562503075e-02 + -5.4698366974717738e-01 9.0465443323236205e-01 -7.9997753995274368e-02 + -6.6508474325815237e-01 1.1662525682928537e+00 -1.0397893806881764e-01 + -7.7128463046021523e-01 1.3782629243348694e+00 -1.6125408367223326e-01 + -8.7371627721018474e-01 1.5390911704697543e+00 -2.5048299971499211e-01 + -9.6566503865654352e-01 1.6489739678706874e+00 -3.4375631242842131e-01 + -1.0480300842041970e+00 1.7244123266980620e+00 -3.9922657128303751e-01 + -1.1489269498160095e+00 1.7931680817845528e+00 -4.2500166034636611e-01 + -1.2501725298359401e+00 1.8388769232450048e+00 -4.9773263281441049e-01 + -1.3225876827813066e+00 1.8295963200192098e+00 -6.1042960699088678e-01 + -1.4314581750810538e+00 1.7960833085374242e+00 -7.3762821035626369e-01 + -1.5625330521718921e+00 1.7594702364499830e+00 -9.2575635975511283e-01 + -1.5559928938775771e+00 1.6687373316978871e+00 -1.0836783593364649e+00 + -1.3779929512905729e+00 1.4891197453865019e+00 -1.0679137259236509e+00 + -1.0818583213779704e+00 1.1501642943742099e+00 -9.0754854736494406e-01 + -6.8060020829435608e-01 5.1605675200820034e-01 -7.7313067985183626e-01 + -2.7264549707857000e-01 -2.0617228045018188e-01 -1.0020254690523247e+00 + -3.2340442801442548e-01 -2.0210065436609459e-01 -1.2131718624536711e+00 + id 13596 + loc 1.7739622294902802e-01 9.8687905073165894e-01 409 + blend 0.0000000000000000e+00 + interp 4.3817291980445722e-01:2.8803253725249367e-01:2.4634096002353445e-02:4.3816853807525918e-01:9.1016974894553471e-01:5.3583043086947495e-02:1.7164094713042035e+00:2.6582132630900451e-01:3.0020662390772888e+00 + CVs 20 + 6.5110461872657743e-01 2.5297904275160388e-01 -2.4817302911188607e-01 + 1.1848591149849246e+00 4.2733130767469207e-01 -4.8814216126525878e-01 + 1.7289841628974123e+00 5.8565798525262425e-01 -7.4284346050552208e-01 + 2.3151519884345908e+00 7.3122640814908457e-01 -1.0355542401998716e+00 + 2.9047090964802482e+00 8.2919092037297482e-01 -1.3882058637351535e+00 + 3.4542442925862633e+00 8.5090737553592555e-01 -1.8136670811888649e+00 + 3.9377184558714085e+00 7.8294393304582988e-01 -2.3014432512636249e+00 + 4.3610623922480878e+00 6.2184924156445831e-01 -2.8225537524557303e+00 + 4.7465036298440335e+00 3.6251724001066066e-01 -3.3461760068001576e+00 + 5.1069270093331571e+00 -8.8935484771721640e-03 -3.8464070830633750e+00 + 5.4380149457532081e+00 -4.9199583767905075e-01 -4.3034532847148883e+00 + 5.7237064455304427e+00 -1.0293365092381332e+00 -4.7181515273865120e+00 + 5.9573509254090951e+00 -1.5485663686903122e+00 -5.1210655858989771e+00 + 6.1395395342841539e+00 -2.0171663242395521e+00 -5.5467659009629022e+00 + 6.2789253011269546e+00 -2.4440240653631382e+00 -6.0226139027440544e+00 + 6.4049420293036174e+00 -2.8915589998529190e+00 -6.5782812215540023e+00 + 6.5639857066772489e+00 -3.4253659646649344e+00 -7.2214568410164723e+00 + 6.7773194108322059e+00 -4.0455058275350035e+00 -7.9150734296253074e+00 + 6.9629783956074736e+00 -4.7225762137033884e+00 -8.6155382508896032e+00 + id 13597 + loc 2.6279273629188538e-01 3.6993253231048584e-01 378 + blend 0.0000000000000000e+00 + interp 4.9012129521345527e-01:4.8563380751087626e-01:7.0115162144845244e-01:4.3055787432802345e-01:1.0334075937948155e+00:4.9011639400050316e-01:1.6081773221460143e+00:4.3647052203885656e-01:2.1509550150063359e+00:3.0419976088644129e-01:3.0001449064973520e+00:4.2134570118590720e-01:3.4440134781473910e+00:2.9972973321299323e-01:3.9997453988772440e+00 + CVs 20 + 3.1450645291332679e-01 2.6663375957119545e-01 -5.2340367515103636e-01 + 5.4431551603029693e-01 4.6472055141036961e-01 -1.0012562336988684e+00 + 7.3223934821952552e-01 6.3163116157604537e-01 -1.4612090004249529e+00 + 9.0609119970481244e-01 7.9779805975110751e-01 -1.9136550426633623e+00 + 1.0806822249355070e+00 9.6453637895314781e-01 -2.3458081227840779e+00 + 1.2667651421820336e+00 1.1202726333091853e+00 -2.7508851338350468e+00 + 1.4746504191232046e+00 1.2549851257744460e+00 -3.1316520221481712e+00 + 1.7114707034142156e+00 1.3608227932311849e+00 -3.4872498562891963e+00 + 1.9749472563746540e+00 1.4302217329562836e+00 -3.8095170376941523e+00 + 2.2536345737019969e+00 1.4584960706014449e+00 -4.0894369738831218e+00 + 2.5354519527981356e+00 1.4452525801994787e+00 -4.3247601175978501e+00 + 2.8150292234374250e+00 1.3908796000089625e+00 -4.5241365988905091e+00 + 3.0930457952501587e+00 1.2874089256737515e+00 -4.7041141517916376e+00 + 3.3669411520576524e+00 1.1098501812733921e+00 -4.8695876140439918e+00 + 3.6247375662696948e+00 8.4473471693394231e-01 -5.0084176948520227e+00 + 3.8682340164840472e+00 5.1741834928010677e-01 -5.1193916970869067e+00 + 4.1147507793881406e+00 1.6782010960643179e-01 -5.2205080634049921e+00 + 4.3674388392994032e+00 -1.7747457651752230e-01 -5.3553783655838796e+00 + 4.6094176747974709e+00 -5.0753841511943865e-01 -5.5770033670598709e+00 + id 13598 + loc 4.9644219875335693e-01 5.6659400463104248e-02 374 + blend 0.0000000000000000e+00 + interp 3.9182161715309416e-01:2.7931140368183877e-01:3.8646144167553109e-01:3.2530507435205486e-01:1.0823981729814192e+00:2.5339963536443211e-01:1.7266234651195669e+00:3.4600747327573000e-01:2.0858010060943815e+00:3.2439602463818451e-01:3.0000575438352994e+00:3.9181769893692264e-01:3.8921091812866782e+00 + CVs 20 + -4.2549780855355490e-01 4.5121933938836362e-01 7.4807103063780278e-01 + -6.6313317480201450e-01 7.2054909572016612e-01 1.3540234005941436e+00 + -7.6313926632575269e-01 8.2984882298499851e-01 1.9487714387023292e+00 + -7.8637059987985625e-01 8.3740677888427928e-01 2.5658045280072344e+00 + -7.9663419560769722e-01 8.0392901063386346e-01 3.1975719021020859e+00 + -8.6654573268194635e-01 7.5213305169313349e-01 3.8432427145565100e+00 + -1.0530886623222266e+00 6.6989303288915547e-01 4.4914427446985172e+00 + -1.3839596846204318e+00 5.5085770159942693e-01 5.1144871244486882e+00 + -1.8505264602472908e+00 4.0502601395677917e-01 5.6723590002087150e+00 + -2.4054404736137358e+00 2.4234644848029063e-01 6.1370416141346560e+00 + -2.9807422868061941e+00 6.6981273263095886e-02 6.5040953046458938e+00 + -3.5193878846156204e+00 -1.2059720425532916e-01 6.7800363828271424e+00 + -4.0106104828589597e+00 -3.2969879504427180e-01 6.9833276910161377e+00 + -4.4700198045866504e+00 -5.8807115355766948e-01 7.1277945351291754e+00 + -4.8589235104015360e+00 -9.0799609655058511e-01 7.2118771071935122e+00 + -5.1230518581577069e+00 -1.2780422371612352e+00 7.2797924912464431e+00 + -5.2130620260033105e+00 -1.6234527319706191e+00 7.4056709940710954e+00 + -5.1901541012552528e+00 -1.8332792805709621e+00 7.5769005461098153e+00 + -5.1191552146039641e+00 -2.1066430729202765e+00 7.7445432852239779e+00 + id 13599 + loc 5.1388502120971680e-01 4.6068355441093445e-01 375 + blend 0.0000000000000000e+00 + interp 5.4514675274550273e-01:4.0704068956015005e-01:1.3729614381007160e-01:3.5402127509067677e-01:7.3997262075594650e-01:5.4514130127797533e-01:1.0966332826980092e+00:3.8175986312937971e-01:1.8136125665136911e+00:3.5869356770368066e-01:2.4248388385527355e+00:5.4424283873931256e-01:3.0000015398821520e+00:3.2785396803604305e-01:3.8552626416582738e+00 + CVs 20 + 4.9805568919986815e-01 4.0767594860631878e-01 7.5691226588315619e-02 + 9.4713467704373988e-01 6.8798074981571333e-01 9.9594371668777409e-02 + 1.4141836965880215e+00 8.2818256136420909e-01 6.1691617685393940e-02 + 1.9010582254342623e+00 8.6862693029721449e-01 -3.5041033604919947e-02 + 2.3786795187152032e+00 8.8597483899224316e-01 -1.7915434227967603e-01 + 2.8440792891779831e+00 9.3437425155553511e-01 -3.4878583788763839e-01 + 3.3187711921115541e+00 1.0295719131904371e+00 -5.0514887011398379e-01 + 3.8156744476609683e+00 1.1718032140993466e+00 -6.0214491992896513e-01 + 4.3232262427134245e+00 1.3646290100526897e+00 -6.0422762116592055e-01 + 4.8156342859639114e+00 1.6100987592500444e+00 -4.8673658857983781e-01 + 5.2715700825959146e+00 1.8877257425770162e+00 -2.4266018063837791e-01 + 5.6849739590806827e+00 2.1564365951805229e+00 1.2024883416185350e-01 + 6.0465089120276083e+00 2.3603831998207645e+00 5.9019131518097634e-01 + 6.3298645214605855e+00 2.4394982208231109e+00 1.1341909834876753e+00 + 6.5013124152471091e+00 2.3781758211448780e+00 1.6918774849015195e+00 + 6.5120422394013930e+00 2.2168074716860899e+00 2.2071948753059991e+00 + 6.3296529516183684e+00 1.9939812911178274e+00 2.6597844441790466e+00 + 6.0651355185484981e+00 1.6512524022925779e+00 3.0083196748780576e+00 + 6.0364707388374601e+00 1.2733878278574964e+00 2.9694066824512895e+00 + id 13600 + loc 5.7315635681152344e-01 8.4735798835754395e-01 402 + blend 0.0000000000000000e+00 + interp 5.1286231870624721e-01:5.1285719008306019e-01:2.7028839255993831e-01:2.8252948703451591e-01:1.0391008952095215e+00:3.8210777802657148e-01:1.8029192300712618e+00:4.9551865946672641e-01:2.0986102436326437e+00:4.4583753177240643e-01:2.7190801093501435e+00:3.2341766287680807e-01:3.0402344520218225e+00:3.9624956694160413e-01:3.8744291790991827e+00 + CVs 20 + -1.3734673780184209e-01 1.3325019458461890e-01 -7.9768694658983244e-02 + -2.3984251669300383e-01 2.7784297551379855e-01 -1.5747593207386532e-01 + -3.1254444666918202e-01 4.2369728375560844e-01 -2.3367709331336495e-01 + -3.6208246414932027e-01 5.6247908231662969e-01 -3.0929251398662383e-01 + -3.8707901806466216e-01 6.9511986961219940e-01 -3.8212994083214519e-01 + -3.9140470149158402e-01 8.2910855160824604e-01 -4.5452027255581262e-01 + -3.8010595582831619e-01 9.7177373110075882e-01 -5.3327687881963881e-01 + -3.5693738118863416e-01 1.1236128640533860e+00 -6.2776210994173509e-01 + -3.2503976348593971e-01 1.2791972195726202e+00 -7.4658914001010035e-01 + -2.8823424726619917e-01 1.4340281557608172e+00 -8.9715648194473574e-01 + -2.5104956399543232e-01 1.5863074651724633e+00 -1.0861750659989216e+00 + -2.2074122865425017e-01 1.7277761770373858e+00 -1.3172068145874658e+00 + -2.0424852832304363e-01 1.8470857484010132e+00 -1.5940885003303999e+00 + -2.0692935232172882e-01 1.9226424679172909e+00 -1.9182729149846218e+00 + -2.3959707734497704e-01 1.9394107163838092e+00 -2.2944663149271571e+00 + -3.4342802886738888e-01 1.9224785470985719e+00 -2.7189471876548508e+00 + -5.7300826915551795e-01 1.9229767878376922e+00 -3.1527538557200963e+00 + -9.3127672697638597e-01 1.9329514356674100e+00 -3.5314332611094699e+00 + -1.2231479059155310e+00 1.8306410369388715e+00 -3.6739533413884100e+00 + id 13601 + loc 7.0196700096130371e-01 1.7507922649383545e-01 1078 + blend 0.0000000000000000e+00 + interp 3.6678209796531003e-01:2.8541951203830862e-01:1.7833946809138634e-02:3.3408652757114371e-01:7.7531832620640673e-01:2.6825918923746939e-01:1.8389454491350623e+00:3.2793488999453418e-01:2.7425242014072797e+00:3.6677843014433037e-01:3.2365425691389538e+00 + CVs 20 + -1.7258427770525933e-01 1.3119547627012892e-01 1.1038869201854200e-01 + -3.2863779341729726e-01 2.4784080408569084e-01 2.1947472837832041e-01 + -4.7193442954657489e-01 3.4466779296527172e-01 3.1980461604298138e-01 + -6.0890810871768886e-01 4.2213391309702608e-01 4.0377026509962943e-01 + -7.3635632383777672e-01 4.8492912634827090e-01 4.6055671859411851e-01 + -8.5008089578405999e-01 5.4279891683478609e-01 4.7592392113780380e-01 + -9.5373266336858131e-01 6.1181811599552505e-01 4.4518129301740406e-01 + -1.0627514488917955e+00 7.0707470964375929e-01 3.8183311201207798e-01 + -1.1937956042958269e+00 8.3552874784543707e-01 3.0799739673278453e-01 + -1.3581119882614490e+00 9.9534887497030633e-01 2.4657404203822869e-01 + -1.5632935554779268e+00 1.1746107455675681e+00 2.1969272481989599e-01 + -1.8128474977286482e+00 1.3534384907485073e+00 2.4454721905784965e-01 + -2.1041217454861947e+00 1.5099025780825854e+00 3.3088307938754130e-01 + -2.4276260950812625e+00 1.6284965181225726e+00 4.8069768311150168e-01 + -2.7623263900595081e+00 1.7129687856745162e+00 6.9090752386690046e-01 + -3.0764804872861196e+00 1.8105221717108744e+00 9.6353822700484382e-01 + -3.3408321345652294e+00 2.0163766340173885e+00 1.3477820055087975e+00 + -3.5903455739008048e+00 2.2891948750399496e+00 1.9710773688021324e+00 + -3.8292014996466723e+00 2.0401198594385406e+00 1.9860305324534042e+00 + id 13602 + loc 2.8705325722694397e-01 1.6184696555137634e-01 380 + blend 0.0000000000000000e+00 + interp 4.3121401603245058e-01:3.6004739727461582e-01:1.1040153529302310e-01:3.4816083976820483e-01:1.0066095160544146e+00:2.4589385688204571e-01:1.6058251466447184e+00:3.7395855355009699e-01:2.0792346248528606e+00:3.4721931302750614e-01:2.9025687111364782e+00:4.3120970389229030e-01:3.5795633850071940e+00 + CVs 20 + -4.3965328814548421e-01 1.5927195747154158e-01 5.4413174413347298e-01 + -7.1755919034646554e-01 2.1809911076231869e-01 9.7662675463903725e-01 + -9.3999805318563401e-01 2.4430244811988255e-01 1.4067037771880055e+00 + -1.1568096288261331e+00 2.7397062185304377e-01 1.8777586334053631e+00 + -1.3875749765552756e+00 3.1204798563645508e-01 2.3809213548207180e+00 + -1.6537645121637823e+00 3.5071796033243463e-01 2.8998362533139819e+00 + -1.9732498080867260e+00 3.6751638288166788e-01 3.4243577749734717e+00 + -2.3518967775162749e+00 3.3875773264114772e-01 3.9422116263968889e+00 + -2.7828575349807538e+00 2.4218106142147455e-01 4.4253111951844133e+00 + -3.2405232718160732e+00 5.9355113280275873e-02 4.8334604727856867e+00 + -3.6784280698168916e+00 -2.0950857933079359e-01 5.1406373928452753e+00 + -4.0534144673954513e+00 -5.4951991900139463e-01 5.3339561851901198e+00 + -4.3499850224463312e+00 -9.4161657947981636e-01 5.4182335259831849e+00 + -4.5930564984858009e+00 -1.3855448812176210e+00 5.4276194294803979e+00 + -4.8203588694424759e+00 -1.8884310135444542e+00 5.4093022706686877e+00 + -5.0541832530503124e+00 -2.4403000480623920e+00 5.4173515022579384e+00 + -5.2908220692747516e+00 -3.0132345834287846e+00 5.5123403205142214e+00 + -5.5062921062144259e+00 -3.5564415842022052e+00 5.7130290317961823e+00 + -5.6964342457787192e+00 -3.9965421758593922e+00 5.8943847748355997e+00 + id 13603 + loc 3.7454947829246521e-01 2.9392454028129578e-01 373 + blend 0.0000000000000000e+00 + interp 3.6031621951854803e-01:3.1278217070176412e-01:5.8586533778279581e-01:3.6031261635635287e-01:1.0049613453325199e+00:3.1017850988672985e-01:1.9025970222005459e+00:3.1852474254661078e-01:2.5028285396657006e+00:3.4367477325072343e-01:3.0426185778368771e+00:2.6801640377623875e-01:3.7438712801953500e+00 + CVs 20 + -1.8041569573784794e-01 6.3058962903734306e-01 3.7782633009749766e-01 + -3.3489331891406604e-01 1.3104450421442320e+00 7.3593516276570681e-01 + -4.8904082163046680e-01 2.0639020844947713e+00 1.0311230526915767e+00 + -7.0964356451714372e-01 2.9075798659855243e+00 1.1499772632912726e+00 + -1.0546545995397589e+00 3.7554703417004043e+00 9.2917753084583743e-01 + -1.5063930292246526e+00 4.3890197883998434e+00 2.9400945529451139e-01 + -1.9488659829940478e+00 4.5528471794788645e+00 -6.4113358422772726e-01 + -2.2693920518642368e+00 4.1980140886052020e+00 -1.6353552559117892e+00 + -2.4257028545044816e+00 3.4455721499645873e+00 -2.5112803284682625e+00 + -2.4143916096729439e+00 2.4727349060371528e+00 -3.2033486480808406e+00 + -2.2791436950765820e+00 1.4279452360043026e+00 -3.7140576093904896e+00 + -2.0904402227339558e+00 4.3434465401264455e-01 -4.1078557246770684e+00 + -1.9125463597077412e+00 -4.1950441332457888e-01 -4.4918185558826691e+00 + -1.8008899671656555e+00 -1.0676068520283346e+00 -4.9314581704448948e+00 + -1.9034098653033233e+00 -1.3269412901696374e+00 -5.3524127336711880e+00 + -2.2251354488676713e+00 -1.2124264929808204e+00 -5.4776562687754140e+00 + -2.5752588124742530e+00 -1.0763835085289757e+00 -5.4103061154744703e+00 + -2.9782834333092154e+00 -1.0048480533924546e+00 -5.3357314136432699e+00 + -3.9030549846546827e+00 -9.9741961977127369e-01 -5.9113503486759083e+00 + id 13604 + loc 9.6766775846481323e-01 7.9555529356002808e-01 412 + blend 0.0000000000000000e+00 + interp 5.5022126432217022e-01:3.4346846520758001e-01:3.4320026423175287e-01:4.3848880767360415e-01:1.0132628467613534e+00:4.0308559207988259e-01:1.5382212526380912e+00:4.5791719308789369e-01:1.9966529262264894e+00:4.6884199665406917e-01:2.7788379457756722e+00:3.1663180749337300e-01:3.0230734704383666e+00:5.5021576210952705e-01:3.6503750507467960e+00 + CVs 20 + 8.1915443653188058e-01 1.0940663281582627e-01 -2.2392215233559842e-01 + 1.3711233153497484e+00 8.1544493657189465e-02 -3.9634993209442576e-01 + 1.8606861679832705e+00 -7.7863931956279053e-03 -5.5549657870817448e-01 + 2.3790986056554861e+00 -1.2649707887943074e-01 -7.1392781243367098e-01 + 2.9164020343561572e+00 -2.7049928737924001e-01 -8.6702640371274231e-01 + 3.4636929537219769e+00 -4.3295192737224419e-01 -1.0076443366880452e+00 + 4.0146977757950717e+00 -6.0622304412490646e-01 -1.1275964148993274e+00 + 4.5651914093327859e+00 -7.8585862788738825e-01 -1.2212995442746335e+00 + 5.1091092450746158e+00 -9.7028321362657866e-01 -1.2850204238797807e+00 + 5.6377722246234203e+00 -1.1590076750887564e+00 -1.3168440580683380e+00 + 6.1399680181189211e+00 -1.3595144211815855e+00 -1.3244671757715611e+00 + 6.6052724319188556e+00 -1.6018819844860688e+00 -1.3382158930807100e+00 + 7.0274529829868637e+00 -1.9213824947641869e+00 -1.3966097953068675e+00 + 7.4047065520975046e+00 -2.3140229268516324e+00 -1.5078245961193331e+00 + 7.7379236996991736e+00 -2.7524853220743841e+00 -1.6623828013568693e+00 + 8.0202808004996875e+00 -3.2155238681416449e+00 -1.8670146177700382e+00 + 8.2426250148377775e+00 -3.6776812557497180e+00 -2.1343935535477754e+00 + 8.4079634800510039e+00 -4.1022466034265506e+00 -2.4490429682651698e+00 + 8.6318091264755914e+00 -4.3748112859394377e+00 -2.6442362636232803e+00 + id 13605 + loc 6.2962365336716175e-03 7.1685332059860229e-01 1080 + blend 0.0000000000000000e+00 + interp 3.3134862843219920e-01:2.6044348388432409e-01:5.1568203171184113e-01:3.3134531494591490e-01:1.1445848857498375e+00:2.6372898007679929e-01:2.3450673338575880e+00:2.8108759640692793e-01:3.4938555594295391e+00 + CVs 20 + -1.8217187737783996e-01 2.0999656664493371e-01 3.3419808280052382e-01 + -2.8962963985642165e-01 3.1780562411011970e-01 4.7742117114655269e-01 + -3.7299660518002642e-01 3.8865842196184097e-01 5.4753034542293044e-01 + -4.6138853823455822e-01 4.5948906469173190e-01 6.2291122968608503e-01 + -5.6304155042034199e-01 5.3142559976898696e-01 7.0304327430861047e-01 + -6.8865722143570796e-01 6.0266689310903987e-01 7.8688629014172984e-01 + -8.4910005864015214e-01 6.6805483381927333e-01 8.7260766053954186e-01 + -1.0526514726062699e+00 7.2039041123507319e-01 9.5876221141797535e-01 + -1.3039628730965154e+00 7.5225683263455578e-01 1.0457007182429288e+00 + -1.6037069949224574e+00 7.5768219884539501e-01 1.1356838903596389e+00 + -1.9487449269597581e+00 7.3272524432860653e-01 1.2324839778695882e+00 + -2.3325225632678119e+00 6.7399504092466178e-01 1.3391576272407995e+00 + -2.7448340524348285e+00 5.7916316326648054e-01 1.4565778352762653e+00 + -3.1723639777611750e+00 4.5638447294668527e-01 1.5874097621484053e+00 + -3.6007366545267070e+00 3.3034855384648260e-01 1.7392171266804555e+00 + -4.0148205346547696e+00 2.2799004327792516e-01 1.9188342470949409e+00 + -4.3997606326505876e+00 1.6329534956440317e-01 2.1258186085153499e+00 + -4.7490518483067978e+00 1.3773543587546000e-01 2.3505996110744354e+00 + -5.1052861518832398e+00 1.0015410101359401e-01 2.5667313302930599e+00 + id 13606 + loc 8.9652734994888306e-01 3.9194309711456299e-01 399 + blend 0.0000000000000000e+00 + interp 4.8729755233755684e-01:4.8729267936203347e-01:9.2523232208105766e-01:2.7505311609651151e-01:1.6257225423372159e+00:2.5612263867673729e-01:2.9457709957482958e+00:4.2583252547318112e-01:3.1226068210262996e+00:3.5840729735367804e-01:3.9920449119286210e+00 + CVs 20 + 8.1986760264764619e-02 2.4556440521015530e-01 2.6703378648210074e-01 + 1.6134386675585283e-01 4.6694562805891004e-01 5.1423129823435365e-01 + 2.2376507494184883e-01 6.5714399863629769e-01 7.8230300486711246e-01 + 2.7029932353114405e-01 8.1898569380432029e-01 1.1035829867306330e+00 + 3.1300209121581957e-01 9.5274228552757556e-01 1.4818630598135143e+00 + 3.6589575935662833e-01 1.0560061025022431e+00 1.9094412847560873e+00 + 4.4167739508846304e-01 1.1223042066123603e+00 2.3724702215978333e+00 + 5.5045663332671801e-01 1.1400903528762321e+00 2.8487659796031330e+00 + 6.9692957196055505e-01 1.0937571134677120e+00 3.3042121216479159e+00 + 8.7511174711033990e-01 9.7133650207574451e-01 3.6955814573729899e+00 + 1.0727254731320024e+00 7.7576097595547255e-01 3.9914176688238423e+00 + 1.2901426994251544e+00 5.2373284971019896e-01 4.2019233846120994e+00 + 1.5431604582245495e+00 2.3182734526589543e-01 4.3688358652580748e+00 + 1.8503832682862738e+00 -8.3729213017451398e-02 4.5475972300631939e+00 + 2.2178319408109144e+00 -3.9306146970085154e-01 4.8061048821085492e+00 + 2.6001764519576653e+00 -6.4384759240646194e-01 5.2044495846182128e+00 + 2.8913325911811105e+00 -7.8074085377898439e-01 5.7799263124530667e+00 + 3.0195030871277169e+00 -7.7178819598957626e-01 6.4402401241087661e+00 + 3.2274331004258840e+00 -7.8067025614598529e-01 6.8577763759599044e+00 + id 13607 + loc 2.9762476682662964e-02 2.1240903064608574e-02 400 + blend 0.0000000000000000e+00 + interp 5.0788889196934739e-01:2.1147356277429449e-01:2.5795450066074921e-01:4.2442371364469017e-01:1.0708843692600158e+00:5.0788381308042774e-01:1.7515030749026581e+00:4.2964907106028077e-01:1.9993905817538815e+00:3.6951690881394023e-01:2.3843926968402966e+00:2.8773309929404473e-01:3.1671500319093200e+00 + CVs 20 + -8.7212158538504073e-02 2.4181118623570802e-01 2.4257826400604093e-01 + -2.1308955371023547e-01 4.9155272734794481e-01 4.7728696310495367e-01 + -3.6388907347951949e-01 7.4215415750608704e-01 7.0133891316977692e-01 + -5.3311612919464846e-01 9.8677921320791606e-01 9.1723912522936613e-01 + -7.2122353382008497e-01 1.2185965015472808e+00 1.1301521908991625e+00 + -9.2934087996983528e-01 1.4273228534390183e+00 1.3429174332106477e+00 + -1.1592815272794261e+00 1.6019259679029176e+00 1.5560817264020601e+00 + -1.4130121162025850e+00 1.7330885629985291e+00 1.7685223843065077e+00 + -1.6910886368623377e+00 1.8139382396155377e+00 1.9758689396787421e+00 + -1.9899764990009259e+00 1.8428511402728291e+00 2.1712467147786145e+00 + -2.3013881421130011e+00 1.8251050473703789e+00 2.3441876433637949e+00 + -2.6089753814498806e+00 1.7764856758461580e+00 2.4778043667483578e+00 + -2.8946246256503754e+00 1.7204787932765009e+00 2.5592220586593610e+00 + -3.1576373013370018e+00 1.6676449419677755e+00 2.5976173051786198e+00 + -3.4045932697339274e+00 1.6128204860229722e+00 2.6062815558417669e+00 + -3.5736558572210555e+00 1.5871409313171747e+00 2.5631729917890507e+00 + -3.4612793417648557e+00 1.6499276844348916e+00 2.4168817253718098e+00 + -2.9960501559631512e+00 1.6051019262690793e+00 2.1930217366014149e+00 + -3.2410294268801749e+00 1.6882131000524088e+00 2.1518640526465038e+00 + id 13608 + loc 9.0782201290130615e-01 6.2459594011306763e-01 415 + blend 0.0000000000000000e+00 + interp 4.9576102222471513e-01:3.1845808352073202e-01:6.5783211734595204e-01:4.3182257570000515e-01:1.5094954575037363e+00:4.9575606461449290e-01:1.9828489099558440e+00:4.5782361113460218e-01:2.1782038989751933e+00:2.6280387724653326e-01:2.9928003067061733e+00:3.2578729470170487e-01:3.7466106135052559e+00 + CVs 20 + 2.8039686969799360e-01 1.8067608944454294e-01 9.6464861494467702e-04 + 5.0526074018072875e-01 3.2597611532905729e-01 -1.4349523157898225e-02 + 7.1245775936209643e-01 4.6279824026509658e-01 -2.8743688906056497e-02 + 9.3213508146058388e-01 6.1224974429943579e-01 -2.9174220504224024e-02 + 1.1649701223565518e+00 7.7086525254111682e-01 -1.2611786758358667e-02 + 1.4088226612910599e+00 9.3376238660485700e-01 2.4779691796835035e-02 + 1.6612117356344920e+00 1.0969256217885883e+00 8.8598150791250108e-02 + 1.9199857075160676e+00 1.2567482633886251e+00 1.8352119171262615e-01 + 2.1805923350456435e+00 1.4090324480428207e+00 3.0956919344793488e-01 + 2.4365001964125885e+00 1.5503130379498720e+00 4.6319290667603408e-01 + 2.6915815934172933e+00 1.6792047731714730e+00 6.4562069486768292e-01 + 2.9778082580350675e+00 1.7901265386675045e+00 8.6773563998494807e-01 + 3.3411568063521364e+00 1.8603335271002486e+00 1.1184779721366260e+00 + 3.7817369784604709e+00 1.8631729318836836e+00 1.3332796959549302e+00 + 4.2480051541938089e+00 1.8011799432388242e+00 1.4604246555368725e+00 + 4.7040568922622485e+00 1.6904866484482803e+00 1.4978855840398353e+00 + 5.1320126453958412e+00 1.5456206388024922e+00 1.4531947381035279e+00 + 5.5109835596465642e+00 1.3876103240027164e+00 1.3352661772152441e+00 + 5.7460359645653103e+00 1.3125908517457217e+00 1.2385157621663105e+00 + id 13609 + loc 2.3904095869511366e-03 6.3980668783187866e-01 382 + blend 0.0000000000000000e+00 + interp 4.6007078420317904e-01:3.6388459852248850e-01:2.5955849282163923e-01:2.7259352905573664e-01:1.0158717356894262e+00:3.5126757971058981e-01:1.9327544482794805e+00:3.6100820888829710e-01:2.4024983767957151e+00:3.4508032656428750e-01:3.0060416906238832e+00:4.6006618349533701e-01:3.9846680548822420e+00 + CVs 20 + 8.6937373208086199e-01 1.5440592026620492e-01 -4.4434191565788489e-01 + 1.4171216935548079e+00 1.7997527777369687e-01 -7.6416036202877402e-01 + 1.8779005198901895e+00 1.7271296925811219e-01 -1.0421424709195506e+00 + 2.3452348740842135e+00 1.7587854391678365e-01 -1.3061668459429605e+00 + 2.8273899101830211e+00 1.8432984197087010e-01 -1.5588262568277411e+00 + 3.3334224136428428e+00 1.8656342610052967e-01 -1.8063580571886257e+00 + 3.8661962368017586e+00 1.6586504760831300e-01 -2.0609944177177737e+00 + 4.4199295971436534e+00 1.0040620733381522e-01 -2.3351634310671918e+00 + 4.9815347729223820e+00 -3.7899797869196838e-02 -2.6323864123119876e+00 + 5.5276714959372812e+00 -2.7752139728192793e-01 -2.9471800665016756e+00 + 6.0175662086556736e+00 -6.3251700184471660e-01 -3.2702133699076281e+00 + 6.4017076335904424e+00 -1.0848269610224817e+00 -3.5824492630680194e+00 + 6.6543298276950757e+00 -1.5904929142506987e+00 -3.8576072650373998e+00 + 6.7832790197177895e+00 -2.1042059297766933e+00 -4.0770032089379544e+00 + 6.8140480281209115e+00 -2.5887315886786837e+00 -4.2353353558235280e+00 + 6.7786293374271338e+00 -3.0137183552394946e+00 -4.3367905656074992e+00 + 6.7105902059648024e+00 -3.3593439098922637e+00 -4.3899888377250429e+00 + 6.6348846548775207e+00 -3.6301590819789009e+00 -4.4041451712957205e+00 + 6.5011688752678314e+00 -3.9267140383724746e+00 -4.3579264644177726e+00 + id 13610 + loc 6.3798356056213379e-01 8.4192174673080444e-01 403 + blend 0.0000000000000000e+00 + interp 3.8100787744342446e-01:3.0356982668068488e-01:3.4486726284584579e-01:3.8100406736465003e-01:9.9737338737641590e-01:2.9933926203239769e-01:1.9993970446232967e+00:3.3817484748813326e-01:2.8961852189923416e+00:2.8968651581913574e-01:3.7562876409182957e+00 + CVs 20 + -7.1068096996736690e-02 -2.7815428748888149e-02 9.8456978625615477e-02 + -1.2022276216174613e-01 -6.5341974190438815e-02 1.9399336556620381e-01 + -1.5426405457146455e-01 -9.3792643406582110e-02 2.9131285157397407e-01 + -1.7296129511186234e-01 -1.1591159950474347e-01 3.8258421404604986e-01 + -1.7668698592346527e-01 -1.3030028009591466e-01 4.6601544629640546e-01 + -1.6446871330248719e-01 -1.3941682001302677e-01 5.3787864627700077e-01 + -1.3429666762595571e-01 -1.4760319721315582e-01 5.9354474938004553e-01 + -8.5173950792862330e-02 -1.5727087691706898e-01 6.2946912525774334e-01 + -1.8043997534365766e-02 -1.6740791081177026e-01 6.4406222413233882e-01 + 6.5676455994817529e-02 -1.7618477432730939e-01 6.3587732072928316e-01 + 1.6487188511666323e-01 -1.8418037777164176e-01 6.0095333225147674e-01 + 2.7833523006754574e-01 -1.9338166033749854e-01 5.3211088542634277e-01 + 4.0245704408770344e-01 -2.0611315971315997e-01 4.1935064660634291e-01 + 5.2823364026985464e-01 -2.2461213173487707e-01 2.5148554468986584e-01 + 6.3950092220891896e-01 -2.5087802639254564e-01 1.7410888690196497e-02 + 7.1270466283432332e-01 -2.8230732719742679e-01 -2.8840951362124301e-01 + 7.2141039338360424e-01 -3.1130099776377418e-01 -6.4844796756412260e-01 + 6.5270843056582861e-01 -3.3081543124035762e-01 -1.0247644299727945e+00 + 6.9926051238321285e-01 -3.5146200086629426e-01 -1.0421341305458682e+00 + id 13611 + loc 1.0867171920835972e-02 4.0050815790891647e-02 395 + blend 0.0000000000000000e+00 + interp 4.7358748896907604e-01:3.2680966480997703e-01:6.9135032830700327e-01:2.9505271351328755e-01:1.5673218448989696e+00:4.7358275309418635e-01:2.1918599137903345e+00:3.0497047063530941e-01:2.9870079495698727e+00:3.7360831380308879e-01:3.4814287858700421e+00:3.0253811709795519e-01:3.9999225908940104e+00 + CVs 20 + -2.1927688275039492e-01 1.1272131162143736e-01 -1.4730610987693704e-01 + -4.3035748799346957e-01 2.4957695014567510e-01 -3.1052153735023680e-01 + -6.3397614495148191e-01 4.0796007358000830e-01 -4.8333400509468977e-01 + -8.3127403436114955e-01 5.8529319654677603e-01 -6.6413762589380121e-01 + -1.0208346916726332e+00 7.7830863813623163e-01 -8.5497681682480708e-01 + -1.2029291297326596e+00 9.8307254157621637e-01 -1.0577664722979276e+00 + -1.3810276599451163e+00 1.1971356973585072e+00 -1.2780178010260785e+00 + -1.5608582239625712e+00 1.4155890824481410e+00 -1.5287668228132141e+00 + -1.7462297594747800e+00 1.6240136497454065e+00 -1.8258370976104419e+00 + -1.9409614654894947e+00 1.7977076642593151e+00 -2.1773807692461085e+00 + -2.1533977635930603e+00 1.9063594499261141e+00 -2.5785646570909178e+00 + -2.3866063717200898e+00 1.9241506664219890e+00 -3.0093605237621075e+00 + -2.6295463306593274e+00 1.8444701800266061e+00 -3.4433349314461390e+00 + -2.8683783718038582e+00 1.6764231845686575e+00 -3.8620882616804137e+00 + -3.0953823194978609e+00 1.4307330399520140e+00 -4.2550421502365783e+00 + -3.3050660860323058e+00 1.1116921355646245e+00 -4.6163516900781634e+00 + -3.4844306408942383e+00 7.2324478702022299e-01 -4.9402706742304119e+00 + -3.6124918992713742e+00 2.9316023312078343e-01 -5.2185107813102505e+00 + -3.6605210141400217e+00 4.0804170727115618e-03 -5.4455328377098144e+00 + id 13612 + loc 8.7278790771961212e-02 1.6431647539138794e-01 407 + blend 0.0000000000000000e+00 + interp 4.3163700824670986e-01:3.6974970277464453e-01:8.3681797435307981e-01:4.0952146286166041e-01:1.4452005931056739e+00:2.9460285753639759e-01:1.9756573439506577e+00:2.7476645457620980e-01:2.0000737498096970e+00:4.3163269187662739e-01:3.9896707801965907e+00 + CVs 20 + 3.1732592369268432e-02 3.4003926037583970e-01 -3.7931529403154501e-01 + 5.2175405904193173e-02 5.3817129411183739e-01 -5.5917435958085404e-01 + 7.8646323124656220e-02 6.7950942278687210e-01 -6.7155641296855217e-01 + 1.1960879031855325e-01 8.0371836594767621e-01 -8.0077044733683866e-01 + 1.7728812619353190e-01 9.0878303978277575e-01 -9.4301070057419012e-01 + 2.5483240506718902e-01 9.9212691389006802e-01 -1.0950584003076482e+00 + 3.5539623605758813e-01 1.0495392053408581e+00 -1.2540436302463061e+00 + 4.8022255475277853e-01 1.0756859786888411e+00 -1.4173585927911436e+00 + 6.2814377736838367e-01 1.0661348741955847e+00 -1.5837926419650421e+00 + 7.9667308156269967e-01 1.0189152911631270e+00 -1.7538133673228149e+00 + 9.8309280571565494e-01 9.3482724757201685e-01 -1.9288385001214683e+00 + 1.1852821770483868e+00 8.1635562290015939e-01 -2.1098935859794348e+00 + 1.4011788061657446e+00 6.6649623235678079e-01 -2.2955779618143564e+00 + 1.6290779837509224e+00 4.9055052042309166e-01 -2.4832026334556505e+00 + 1.8686274627081001e+00 3.0186178425551868e-01 -2.6732365394094240e+00 + 2.1170764990647872e+00 1.2211718292609142e-01 -2.8687254980250971e+00 + 2.3660751981840935e+00 -2.9421062774378615e-02 -3.0701642670788805e+00 + 2.6086173924954132e+00 -1.4503939083733020e-01 -3.2748163222801057e+00 + 2.8812872746877924e+00 -2.6400709682073664e-01 -3.4734787248071779e+00 + id 13613 + loc 1.7878903448581696e-01 1.0274982452392578e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4447212928991481e-01:2.5877208084927988e-01:8.1557483423115129e-01:3.0922161008846960e-01:1.7368970438551217e+00:2.5871883984865818e-01:2.7648934823957227e+00:4.1071266386461902e-01:3.0291851773960392e+00:4.4446768456862190e-01:3.5126011326453463e+00:3.3098548608256267e-01:3.9971441193850592e+00 + CVs 20 + -1.4349658838725571e-01 2.0212330088487990e-01 -2.3053244718229196e-01 + -2.9437961825442027e-01 4.2647809330907421e-01 -4.2234843855587240e-01 + -4.4523384604284821e-01 6.5735975528875357e-01 -5.9414503773847471e-01 + -5.8948760467274974e-01 8.8139512249867846e-01 -7.4990362684160505e-01 + -7.2483072710581964e-01 1.0951013048783389e+00 -8.8543957399299467e-01 + -8.4807028003329621e-01 1.2980601386735888e+00 -1.0019760890959521e+00 + -9.6315171424748436e-01 1.4980301430278855e+00 -1.1052676605203564e+00 + -1.0884324065480138e+00 1.7094391893177079e+00 -1.1986955245683912e+00 + -1.2533525154277281e+00 1.9344719218338193e+00 -1.2819147282978987e+00 + -1.4837400368349236e+00 2.1463466826554964e+00 -1.3526397910514218e+00 + -1.7854500659717256e+00 2.2980304281996293e+00 -1.4001775358943638e+00 + -2.1351295548829019e+00 2.3422125805767919e+00 -1.4076456405498083e+00 + -2.4937285535784857e+00 2.2583258900484546e+00 -1.3777347965540265e+00 + -2.8370953387188611e+00 2.0589837250648895e+00 -1.3380327872169060e+00 + -3.1626239222868247e+00 1.7685256199565274e+00 -1.3149936648733145e+00 + -3.4830620990031500e+00 1.4124847778356764e+00 -1.3249381981010404e+00 + -3.7946718653784752e+00 1.0302036813209101e+00 -1.4091650230687389e+00 + -4.0261657516470821e+00 7.1786048865575225e-01 -1.6619920146320435e+00 + -4.1143219184011377e+00 5.5970831104411456e-01 -2.1646533079596026e+00 + id 13614 + loc 6.2179547548294067e-01 3.2424494624137878e-02 393 + blend 0.0000000000000000e+00 + interp 4.9732803189279479e-01:4.5082871345134018e-01:6.9906658161027235e-01:4.9732305861247589e-01:1.4172370771687026e+00:3.0224034686624834e-01:1.9953538104410729e+00:2.7979222055707281e-01:3.0001324376803038e+00:2.5158996974445985e-01:3.9273497063050553e+00 + CVs 20 + 4.1838228125459198e-01 3.8605529212366213e-01 1.4541199134727420e-01 + 8.1200605536941806e-01 7.8820796402420112e-01 2.7051843163366834e-01 + 1.1839190545429561e+00 1.2276984758612299e+00 3.9957543990394406e-01 + 1.5341507046294360e+00 1.6938572290160390e+00 5.7510114092078102e-01 + 1.8529950821422370e+00 2.1482490082601542e+00 8.3859669754679156e-01 + 2.1235235631084666e+00 2.5555214537747646e+00 1.1984595377358089e+00 + 2.3314546725132335e+00 2.8964222702357665e+00 1.6294058421094770e+00 + 2.4764736945060726e+00 3.1630062046961758e+00 2.0965968352137558e+00 + 2.5689762450317088e+00 3.3555494932299736e+00 2.5756566684801041e+00 + 2.6227835514416311e+00 3.4804909487961293e+00 3.0582546646905775e+00 + 2.6555177958635481e+00 3.5469853529910877e+00 3.5490929188265441e+00 + 2.6933952035265341e+00 3.5624727144907555e+00 4.0593207561326405e+00 + 2.7671387254571025e+00 3.5236941506880299e+00 4.6036669821269616e+00 + 2.9020604668961827e+00 3.3996404192781551e+00 5.2023677772384715e+00 + 3.1176966224337641e+00 3.1252183347312306e+00 5.8500740267407831e+00 + 3.4167095333287385e+00 2.6449784309608164e+00 6.4397180322962084e+00 + 3.7833795752626225e+00 2.0191648074279973e+00 6.8112028589897617e+00 + 4.2222537443334236e+00 1.4362355949364289e+00 6.8861505832512746e+00 + 4.7098112415256912e+00 1.2121706403338028e+00 6.6034286271757354e+00 + id 13615 + loc 2.6717789471149445e-02 7.0987373590469360e-01 376 + blend 0.0000000000000000e+00 + interp 5.0201216383692171e-01:2.8310837861522770e-01:6.5642769660859579e-01:2.9365715356761596e-01:1.6611988609346544e+00:3.4452274067827482e-01:2.0000122215657665e+00:5.0200714371528332e-01:2.6633173715789296e+00:3.4717201773778861e-01:3.0095922914244997e+00:4.1457323421475467e-01:3.8104820965705239e+00 + CVs 20 + -1.1551330630560623e-01 4.8041317044997650e-01 7.2894618748071394e-01 + -1.0581565632068385e-01 7.6623636614372781e-01 1.3397151417169297e+00 + 2.4188753463585400e-03 8.8118472766120304e-01 1.9265263887434501e+00 + 1.6073057862170348e-01 9.1008587054545687e-01 2.5228188151090034e+00 + 3.1245612985441895e-01 9.3269719561960496e-01 3.1281066009284642e+00 + 4.0060139674024653e-01 9.8416609215847850e-01 3.7423763776881360e+00 + 3.8491999495180973e-01 1.0620773853502381e+00 4.3471575787214674e+00 + 2.6032874136550221e-01 1.1563237716048922e+00 4.9107445677390098e+00 + 5.0187923544722901e-02 1.2616591417559468e+00 5.4141551065302380e+00 + -2.2018502752859948e-01 1.3764194110569745e+00 5.8640616597736459e+00 + -5.3611621187145964e-01 1.4967197296336396e+00 6.2804050832849043e+00 + -8.9353927325447502e-01 1.6120114637691976e+00 6.6786978065859870e+00 + -1.3006817846838568e+00 1.7004043142553511e+00 7.0596756653047725e+00 + -1.7652098033431454e+00 1.7271764428837508e+00 7.4201105451585443e+00 + -2.2983880859041301e+00 1.6607761150622968e+00 7.7357417651411033e+00 + -2.9123595273326695e+00 1.4893083682860144e+00 7.9060115415564578e+00 + -3.5828172007141283e+00 1.1979801123174685e+00 7.8132230348148735e+00 + -4.1291249790307871e+00 7.0426612858708149e-01 7.5774403349017367e+00 + -4.0912703619954289e+00 2.4455628767208637e-01 7.5956561131425460e+00 + id 13616 + loc 6.6439485549926758e-01 6.7443853616714478e-01 396 + blend 0.0000000000000000e+00 + interp 4.1145651543928963e-01:2.8624404796468911e-01:9.8164746686445548e-01:3.5765776128276178e-01:1.9816111125401101e+00:4.1145240087413526e-01:2.5360975435905702e+00:3.2235778139575105e-01:3.0364615240491140e+00:3.0336196993878856e-01:3.9572513038492376e+00 + CVs 20 + 8.1263829197535375e-01 2.7409296608722650e-01 -2.9100269721283006e-01 + 1.3424444318603657e+00 3.8690960273235669e-01 -5.2800093224586786e-01 + 1.7868472815290743e+00 4.2682415538328206e-01 -7.6249581628355545e-01 + 2.2386944970476041e+00 4.3746997557231676e-01 -1.0158447418779262e+00 + 2.6990376135994696e+00 4.1299612800053653e-01 -1.2851336298577225e+00 + 3.1677777995665677e+00 3.4955556004403732e-01 -1.5690028443066459e+00 + 3.6414949806379768e+00 2.4674347831614163e-01 -1.8722998804142117e+00 + 4.1136895775767695e+00 1.0351197002127011e-01 -2.2020836051220205e+00 + 4.5752784261626367e+00 -8.6349154549424600e-02 -2.5573165437245473e+00 + 5.0099898810208288e+00 -3.3052686306956680e-01 -2.9293960591667254e+00 + 5.3948688391959054e+00 -6.3291700776049331e-01 -3.3138310275989031e+00 + 5.7139548241105409e+00 -9.9647923919523773e-01 -3.7128090920701444e+00 + 5.9661365953906715e+00 -1.4254114278457950e+00 -4.1237396130893185e+00 + 6.1537379417203413e+00 -1.9148699198489454e+00 -4.5324242872496896e+00 + 6.2749463270205510e+00 -2.4449013003537035e+00 -4.9217385066679373e+00 + 6.3281023961127421e+00 -2.9944947875729682e+00 -5.2782588682542562e+00 + 6.3150112193912493e+00 -3.5486750211409062e+00 -5.5879046759474598e+00 + 6.2483284373865562e+00 -4.0860739851003656e+00 -5.8427482549624683e+00 + 6.2221269678595919e+00 -4.5588352945699091e+00 -6.0914779190915054e+00 + id 13617 + loc 4.8604488372802734e-01 7.2267127037048340e-01 402 + blend 0.0000000000000000e+00 + interp 5.1286231870624721e-01:4.8878757814992352e-01:2.1780863999002886e-01:4.0419042100790520e-01:9.2430158252500083e-01:3.9745266477030267e-01:1.5934243728703328e+00:4.9399006820692520e-01:1.9999297324252248e+00:5.1285719008306019e-01:2.2816723098067859e+00:4.1249425595644096e-01:2.9772460101476721e+00:3.7147065137529783e-01:3.7860357270381919e+00 + CVs 20 + -1.1753538770584376e-01 1.5747434523200435e-01 -1.5283528940255142e-01 + -1.8343084914338559e-01 3.3652115059950005e-01 -3.0478616625405985e-01 + -2.2900110622159553e-01 5.2116079175957863e-01 -4.6156233459253726e-01 + -2.6862893014682537e-01 7.0502216250114946e-01 -6.2375437571734038e-01 + -3.1185199502379080e-01 8.9131726017912882e-01 -7.9285134404507862e-01 + -3.7048580002110487e-01 1.0806037477649939e+00 -9.6912194142675934e-01 + -4.5446899536218788e-01 1.2702537433622589e+00 -1.1524711753166186e+00 + -5.7021497032075774e-01 1.4561539153551957e+00 -1.3418755186558413e+00 + -7.2090648804130175e-01 1.6339130840391900e+00 -1.5337855132726577e+00 + -9.0785823349160411e-01 1.7998182472775039e+00 -1.7229508616436739e+00 + -1.1313018758671509e+00 1.9498225782239946e+00 -1.9037864483119273e+00 + -1.3859325311431148e+00 2.0801104264432118e+00 -2.0675499544746971e+00 + -1.6643184445941950e+00 2.1896573336503025e+00 -2.2059848416016772e+00 + -1.9497834992929914e+00 2.2817945562042778e+00 -2.3039836351334411e+00 + -2.2142230473222879e+00 2.3660794132666920e+00 -2.3426200190005462e+00 + -2.4406028215571247e+00 2.4476903993248325e+00 -2.3236791924618796e+00 + -2.6555202357529279e+00 2.5189900732346491e+00 -2.2727312242967344e+00 + -2.8874531153044734e+00 2.5702081045674623e+00 -2.2002302350578251e+00 + -3.0951735787718095e+00 2.6072367542186212e+00 -2.1079436254675441e+00 + id 13618 + loc 7.5715744495391846e-01 3.6239573359489441e-01 409 + blend 0.0000000000000000e+00 + interp 5.1606046512356196e-01:3.5411908453944541e-01:3.4555824679800862e-01:3.0844794976487921e-01:1.0068451501845255e+00:5.1605530451891080e-01:1.5422595852145369e+00:5.1200034683953710e-01:1.9830569514535665e+00:2.7103085275584671e-01:2.6574942000412052e+00:3.1512993770640807e-01:3.8474484823780104e+00 + CVs 20 + -2.9217425992403490e-01 9.8396449064505842e-02 1.4392592729334866e-01 + -5.6557077263088162e-01 1.7659412456092347e-01 2.9019276149439233e-01 + -8.3526631815457364e-01 2.4541579305537292e-01 4.2962724800160584e-01 + -1.1063717366063464e+00 3.1071695616502859e-01 5.5879420861918994e-01 + -1.3756997840244392e+00 3.7368912679895405e-01 6.8190234667766791e-01 + -1.6415517081495217e+00 4.3636588544986621e-01 8.0382421215711752e-01 + -1.9031092774991989e+00 5.0197843394347763e-01 9.2853554133215011e-01 + -2.1615646930189714e+00 5.7247961662067270e-01 1.0586509287396324e+00 + -2.4224217950784253e+00 6.4497700051863049e-01 1.1947825770328155e+00 + -2.6904770045378656e+00 7.1118983859175233e-01 1.3363139475306269e+00 + -2.9641050005940608e+00 7.5929742062786132e-01 1.4852427418606586e+00 + -3.2398565400153654e+00 7.7362245111363048e-01 1.6479858871742410e+00 + -3.5148330359072650e+00 7.3833131456235668e-01 1.8310191577866628e+00 + -3.7825468923174741e+00 6.4603689794751418e-01 2.0363158127495535e+00 + -4.0326084791444377e+00 4.9768249298105927e-01 2.2617416719450638e+00 + -4.2559549349011947e+00 2.9447476507991466e-01 2.5036107220888288e+00 + -4.4468225926230032e+00 3.1001456271515959e-02 2.7549552072360699e+00 + -4.5970766266754133e+00 -2.9133959314085978e-01 3.0011032155963360e+00 + -4.7193131749672679e+00 -6.1366120938217206e-01 3.2288233503802930e+00 + id 13619 + loc 5.6745320558547974e-01 7.6942288875579834e-01 401 + blend 0.0000000000000000e+00 + interp 4.3671305339484989e-01:4.3670868626431597e-01:6.0895473629130914e-01:3.4283649037267583e-01:1.2440614502155305e+00:3.8944666003055456e-01:2.1898976149298339e+00:3.7459260011734746e-01:3.0081562159091044e+00:3.3715080989799961e-01:3.9921715313886228e+00 + CVs 20 + -1.0881119472551445e-01 3.1120575980987986e-01 -2.2322347433856027e-01 + -2.0832694574197522e-01 6.1431735794821518e-01 -4.4913760545710124e-01 + -3.0006816362231936e-01 9.0651101515538213e-01 -6.8276282881281070e-01 + -3.7860647224668154e-01 1.1791420172904938e+00 -9.2892500327071026e-01 + -4.2655278734462637e-01 1.4126290241108230e+00 -1.1898079844378759e+00 + -4.3074356842178385e-01 1.5949573173469624e+00 -1.4644285670873227e+00 + -4.0334293107835084e-01 1.7398202535550251e+00 -1.7612532062056725e+00 + -3.7975683571654495e-01 1.8716301488659752e+00 -2.0953330103007706e+00 + -4.0777629578107832e-01 1.9980630508279207e+00 -2.4738172897273309e+00 + -5.3418314917501053e-01 2.1062329532776500e+00 -2.8825324487223734e+00 + -7.8326304732559016e-01 2.1845970557922154e+00 -3.2868365384834939e+00 + -1.1530993011218866e+00 2.2274185458956959e+00 -3.6515519456380519e+00 + -1.6215723296041096e+00 2.2179008879087099e+00 -3.9772334467105384e+00 + -2.1628177226184544e+00 2.1226687045939063e+00 -4.2925800276983779e+00 + -2.7491051304963898e+00 1.9253692833903873e+00 -4.5836051413623622e+00 + -3.3206536648605227e+00 1.6796431594664596e+00 -4.8108164708882279e+00 + -3.7980335880506741e+00 1.4931418790657325e+00 -5.0165399606807366e+00 + -4.1796564962878398e+00 1.4061272389865267e+00 -5.3107587150850613e+00 + -4.6540502825926735e+00 1.2618008135232772e+00 -5.8460452916850247e+00 + id 13620 + loc 1.4792175590991974e-01 2.0199792087078094e-01 374 + blend 0.0000000000000000e+00 + interp 3.6903722255845545e-01:2.9532416236393044e-01:5.3705057171694781e-01:3.6903353218622986e-01:1.0064535148600255e+00:3.1555411619769580e-01:1.5262088178419357e+00:2.5564805665691348e-01:2.0009889608638631e+00:3.4376502856223401e-01:3.1927186953620108e+00:2.3931161391944991e-01:3.9438986443135149e+00 + CVs 20 + -3.7282709211204668e-01 2.8156607952548823e-01 6.2874732006822298e-01 + -6.1608787011503108e-01 4.5561953806326261e-01 1.0851552777241977e+00 + -7.5354910000937836e-01 5.3084973779026456e-01 1.5421269766820085e+00 + -7.8947625250649600e-01 5.2729374193051581e-01 2.0483736003966566e+00 + -7.5267316659409456e-01 5.2156875794106483e-01 2.5606601459412839e+00 + -6.9245127825768171e-01 5.6909304274249917e-01 3.0633608101882510e+00 + -6.6874956042341172e-01 6.6677624550615455e-01 3.5870016756688017e+00 + -7.3658637735556165e-01 7.9637475010048409e-01 4.1471043764709226e+00 + -9.3045454156841412e-01 9.5172064616544971e-01 4.7198496002793719e+00 + -1.2602640622473245e+00 1.1215900563212711e+00 5.2724006957906742e+00 + -1.7058667322653140e+00 1.2748744645636418e+00 5.7880974026564607e+00 + -2.2493889698425940e+00 1.3660229990664829e+00 6.2631884304900467e+00 + -2.8675296433984379e+00 1.3382111684473288e+00 6.6746370498698937e+00 + -3.5156282956850475e+00 1.1575919827216703e+00 6.9841223968146249e+00 + -4.1542142866492853e+00 8.3650939152490178e-01 7.1520260853190472e+00 + -4.7561011111394116e+00 3.8900806158861334e-01 7.1512061360566976e+00 + -5.2562309716783187e+00 -2.1013653115396025e-01 7.0581170546844252e+00 + -5.5169292019332374e+00 -9.0016644322454686e-01 7.0674448457788115e+00 + -5.5523439427450052e+00 -1.4138300009971907e+00 7.2679111053721286e+00 + id 13621 + loc 9.5337235927581787e-01 7.9756683111190796e-01 375 + blend 0.0000000000000000e+00 + interp 3.3508260405593010e-01:3.3507925322988957e-01:9.2380690327560910e-01:2.4997026834498848e-01:1.7249815488639952e+00:1.7763364001580734e-01:2.1895302851313603e+00:2.3600430221827604e-01:3.0919211964856714e+00:2.2421351713495560e-01:3.8757864539403943e+00 + CVs 20 + -4.1193680193536814e-01 3.4352179571131458e-01 -1.9557076435387599e-01 + -7.8908020994218342e-01 5.8617677871355611e-01 -3.0543389796749343e-01 + -1.2030314366400283e+00 7.1331083885716051e-01 -3.4511816210332930e-01 + -1.6859392362905110e+00 7.5305615634531231e-01 -3.2211889396072113e-01 + -2.2323377500746280e+00 7.8026787983225776e-01 -2.5039512622200044e-01 + -2.8471413006577615e+00 8.5839740452195668e-01 -1.7943558427866924e-01 + -3.5295127822626693e+00 1.0114157180071470e+00 -1.8849682109099630e-01 + -4.2471637062390037e+00 1.2423321996458312e+00 -3.4555192828408066e-01 + -4.9408134428725425e+00 1.5441271233144460e+00 -6.7974971679463825e-01 + -5.5537329287983752e+00 1.8784781429937691e+00 -1.1739305544084508e+00 + -6.0711261211443102e+00 2.1803303588640484e+00 -1.7975088707276545e+00 + -6.4934939572104415e+00 2.3788563103744611e+00 -2.5424103845605681e+00 + -6.7993742064511480e+00 2.3959640563094267e+00 -3.3908996748014735e+00 + -6.9517037361693532e+00 2.1732766960968539e+00 -4.2776523722613380e+00 + -6.9332428266784447e+00 1.7163708111491163e+00 -5.0739716721191410e+00 + -6.8513635874623713e+00 1.1991792880632022e+00 -5.5537562890825374e+00 + -6.8909829039687986e+00 1.0057236747836935e+00 -5.6273290376419478e+00 + -6.9248602906328820e+00 1.2092544610572835e+00 -5.5746231055970092e+00 + -7.0221529312596154e+00 8.1275042708141321e-01 -5.5649143898340840e+00 + id 13622 + loc 1.1478263884782791e-01 2.0261202752590179e-01 380 + blend 0.0000000000000000e+00 + interp 4.0015400139045748e-01:3.7395855355009699e-01:9.4745771315922211e-02:3.0893275026887712e-01:7.3122055222267157e-01:3.4268231099391888e-01:1.0422488775821286e+00:2.5048841073038269e-01:1.8058630346273969e+00:4.0014999985044358e-01:2.4716843136264850e+00:2.5071535523204391e-01:2.9780618627394206e+00:3.3632366669631708e-01:3.5811847256946563e+00 + CVs 20 + -3.7526848996871631e-01 3.6847461697203632e-01 5.7710840777653116e-01 + -6.2470526126129600e-01 6.4809595580299639e-01 1.0764133966288689e+00 + -8.3385085476321652e-01 8.9201421420590454e-01 1.5703330616663169e+00 + -1.0511192696341949e+00 1.1292849995460612e+00 2.0892830803932561e+00 + -1.3010772548514691e+00 1.3551832130956687e+00 2.6251688487404108e+00 + -1.6073182389383549e+00 1.5504196645469488e+00 3.1723863178174918e+00 + -1.9853622277647360e+00 1.6859035981558412e+00 3.7230326720768110e+00 + -2.4378953641741665e+00 1.7341075610648491e+00 4.2586186179028811e+00 + -2.9509635434942698e+00 1.6772523034124642e+00 4.7548331888285880e+00 + -3.4959414186530537e+00 1.5086282375381925e+00 5.1965174728090426e+00 + -4.0402217814051795e+00 1.2254779724462241e+00 5.5836511300684322e+00 + -4.5508830676177947e+00 8.2598952715444440e-01 5.9168957213981521e+00 + -4.9907538354454761e+00 3.3576397450663720e-01 6.1854584569684636e+00 + -5.3453324084160583e+00 -1.6852878594026954e-01 6.3910619735578447e+00 + -5.6375453283268939e+00 -5.9496789940892914e-01 6.5607079087347877e+00 + -5.8928094476405404e+00 -8.9871192767954122e-01 6.7198177330286510e+00 + -6.1199653611656357e+00 -1.0907014650487143e+00 6.8706146681934861e+00 + -6.3307880129699710e+00 -1.2179348168146205e+00 7.0208038302245726e+00 + -6.5511606586797573e+00 -1.3618934096703690e+00 7.2311043837417550e+00 + id 13623 + loc 3.5270014405250549e-01 2.7765870094299316e-01 400 + blend 0.0000000000000000e+00 + interp 4.7084401884656873e-01:2.5287994700287958e-01:6.3751487808129892e-02:4.2650635017674621e-01:9.1681294635162114e-01:3.1345193680485728e-01:1.2326058178711454e+00:4.7083931040638027e-01:1.8833798965129911e+00:4.0114311008518116e-01:2.4918362401694378e+00:4.6776679519536418e-01:3.0178474110170566e+00:3.0503664847336820e-01:3.5033495449293817e+00 + CVs 20 + -1.6935333154939120e-01 1.7623154909292932e-01 1.7115250951273031e-01 + -3.4276984221470641e-01 3.4839710463838824e-01 3.7945488406198291e-01 + -5.3247633112190362e-01 5.1017843612185199e-01 6.0231110223951079e-01 + -7.4168381922806093e-01 6.5170294606631463e-01 8.2644775946203186e-01 + -9.6347219613349044e-01 7.5962565303530960e-01 1.0473679781064726e+00 + -1.1814275781638228e+00 8.1776992091711542e-01 1.2577940446094829e+00 + -1.3722833431371551e+00 8.1353040838734048e-01 1.4472829926073660e+00 + -1.5170397553628923e+00 7.4728565422789572e-01 1.6062664988785378e+00 + -1.6247387729679357e+00 6.3060474690324853e-01 1.7442156445059056e+00 + -1.7419822629271784e+00 4.6070842092462105e-01 1.8915019652052325e+00 + -1.8682021945314780e+00 2.4381717434743888e-01 2.0145497217969166e+00 + -1.9397986702834540e+00 2.9949551451712741e-02 2.0834351536144502e+00 + -2.0221343786078911e+00 -2.1601650658925409e-01 2.1658292471138298e+00 + -2.1396262235011370e+00 -5.0029639362678724e-01 2.2638966895517507e+00 + -2.3200987717916881e+00 -8.2900105699249116e-01 2.3725295793284973e+00 + -2.7403167618840394e+00 -1.2913499466185452e+00 2.5667787169265428e+00 + -3.6883013770206348e+00 -1.7432174453468849e+00 2.9139232854387438e+00 + -4.7668569297659626e+00 -1.7173124437246914e+00 3.1925528555739242e+00 + -5.0857487909572203e+00 -1.6551556655878104e+00 3.2241536487760607e+00 + id 13624 + loc 5.6284826993942261e-01 7.8366708755493164e-01 373 + blend 0.0000000000000000e+00 + interp 4.3849339666467924e-01:2.8011927759704786e-01:7.3601163141135850e-02:3.6922611439149472e-01:8.0908159375955857e-01:3.6754240222227308e-01:1.2173407082371299e+00:3.9677006346286248e-01:1.9760342493813114e+00:4.2211712526995265e-01:2.3028459784394366e+00:4.3848901173071259e-01:2.9157680067167240e+00:3.5449699591262279e-01:3.6614107823854449e+00 + CVs 20 + -2.8351480553502262e-01 2.2534652645675232e-01 2.0628197487170818e-03 + -5.4687245803464157e-01 4.7706914461717437e-01 -2.7658064451009920e-02 + -7.7782132727504905e-01 7.5778886415692104e-01 -8.9214595963911097e-02 + -9.6867350242113570e-01 1.0716758512116544e+00 -1.8608095885248793e-01 + -1.1043726838853405e+00 1.4157457880435822e+00 -3.2277006590453455e-01 + -1.1750794945096079e+00 1.7768914371642599e+00 -5.0254927577354158e-01 + -1.1886369303564621e+00 2.1274514620914169e+00 -7.3779418780702644e-01 + -1.1618317615977851e+00 2.4265695921553987e+00 -1.0420571401332008e+00 + -1.1075094483955570e+00 2.6372209003584905e+00 -1.4093291390917206e+00 + -1.0302101346276809e+00 2.7422995750461969e+00 -1.8115873007374510e+00 + -9.2719972841532194e-01 2.7473779723432146e+00 -2.2132513997742622e+00 + -7.9607647454008734e-01 2.6631360070542107e+00 -2.5846940987620686e+00 + -6.4626663740145063e-01 2.4778684555310919e+00 -2.9158118014350753e+00 + -5.1184902107379360e-01 2.1522101505428064e+00 -3.2330392301494246e+00 + -4.8545670708338368e-01 1.6583177436979737e+00 -3.5811836397463130e+00 + -7.3474522541771892e-01 1.0615340303489791e+00 -3.9668845660065535e+00 + -1.3734020125636781e+00 5.7473213781413213e-01 -4.3051852292925306e+00 + -2.2095963705844492e+00 4.0092746958951619e-01 -4.4822757775615507e+00 + -2.6692683463811395e+00 2.8572413503586080e-01 -4.5658796278738354e+00 + id 13625 + loc 1.9590218365192413e-01 8.8543897867202759e-01 1078 + blend 0.0000000000000000e+00 + interp 2.9461324499613689e-01:2.9461029886368695e-01:3.0676431431661999e-01:2.9175947507842270e-01:1.4077846140832133e+00:2.8906768503968344e-01:2.0103034335743839e+00:2.9376353739260436e-01:2.8626304845588773e+00:2.8027318078658942e-01:3.2912121625810724e+00 + CVs 20 + 1.2119678781141603e-01 2.5324341506577941e-01 -7.2845670420021671e-02 + 2.6969667265001296e-01 4.4921110730225011e-01 -1.9037753145602795e-01 + 4.1514444367295755e-01 6.3000973448716224e-01 -3.3005422136249596e-01 + 5.4572984117832679e-01 7.8367841399838356e-01 -4.8680337244252136e-01 + 6.5727426296910718e-01 9.0808895123759537e-01 -6.6013951595238873e-01 + 7.4475146216277521e-01 1.0042297201822994e+00 -8.4861340437866883e-01 + 8.0387218578143627e-01 1.0768237083982419e+00 -1.0501524179795347e+00 + 8.3085282219356726e-01 1.1335252734458605e+00 -1.2630335336363252e+00 + 8.2396075691289994e-01 1.1748374114420965e+00 -1.4830550687778261e+00 + 7.9013288553180183e-01 1.1884906819261003e+00 -1.6983152292061796e+00 + 7.4622509311843865e-01 1.1604895341228794e+00 -1.8922559019562049e+00 + 7.1337345357312720e-01 1.0882314923581617e+00 -2.0497727424313079e+00 + 6.9999937177970950e-01 9.8564567989937879e-01 -2.1675104126896336e+00 + 6.8808266995836209e-01 8.7187119745023489e-01 -2.2609630337201647e+00 + 6.4308320382498130e-01 7.5463681653109960e-01 -2.3552121841411759e+00 + 5.4628050915447324e-01 6.2746372663999761e-01 -2.4560395415887539e+00 + 4.0956245516262146e-01 4.8626441628690120e-01 -2.5449784255688139e+00 + 2.5719013039861094e-01 3.3969572304463802e-01 -2.6091371929280358e+00 + 4.1399968207027973e-02 2.0152031549032734e-01 -2.7025070537354980e+00 + id 13626 + loc 2.6821531355381012e-03 7.9222694039344788e-02 412 + blend 0.0000000000000000e+00 + interp 6.2611535523792994e-01:3.2681590220387441e-01:3.7610486393012232e-02:5.1908225569528588e-01:7.2070072142821462e-01:6.2610909408437754e-01:1.0700842700617739e+00:5.1245724849131724e-01:1.7200526655113637e+00:3.9923024911473554e-01:2.1531819164980566e+00:4.2251355187653417e-01:2.9408303276190875e+00:2.6200445820860313e-01:3.4365389175526500e+00 + CVs 20 + -1.1044155631928733e-01 1.8061506164882971e-01 -4.5343649713757517e-01 + -2.3781933762286547e-01 2.8157651799268429e-01 -7.8123535851078563e-01 + -3.6403220874777387e-01 3.6042695912915407e-01 -1.0932171767101089e+00 + -4.7716511330321948e-01 4.4013581154952142e-01 -1.4327360093947186e+00 + -5.7001277726431210e-01 5.1473368238531869e-01 -1.7978790916985201e+00 + -6.3368915741063669e-01 5.7931144049939531e-01 -2.1848487297726207e+00 + -6.5898929687585039e-01 6.3078063752426150e-01 -2.5867004069341508e+00 + -6.4089947021326177e-01 6.6734367000956096e-01 -2.9943198440568946e+00 + -5.7958524356457231e-01 6.8873653336018914e-01 -3.3983175255870455e+00 + -4.7831053852517458e-01 6.9622720005149996e-01 -3.7890281846827256e+00 + -3.4678487961806626e-01 6.8963058434913327e-01 -4.1557674286531370e+00 + -2.0821399478081204e-01 6.6190205937264546e-01 -4.4952838360651866e+00 + -9.1713686679985029e-02 5.9804032676191099e-01 -4.8196407870565121e+00 + -1.5917924601534295e-02 4.8461075551229205e-01 -5.1437715899644374e+00 + 1.2895995956977324e-02 3.2027363659754338e-01 -5.4651717494096879e+00 + -6.7034794288467481e-03 1.1771739086555533e-01 -5.7643579286227826e+00 + -7.4352342774623770e-02 -1.0432210634145811e-01 -6.0226517815812866e+00 + -1.8315692460467869e-01 -3.2920314478450896e-01 -6.2337726250660186e+00 + -3.0083299451540380e-01 -5.4954780642547130e-01 -6.4201164766285634e+00 + id 13627 + loc 1.6052716970443726e-01 8.0778193473815918e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1182119597523098e-01:2.7592725067390445e-01:1.7338315180934760e-03:4.1181707776327126e-01:9.5650484299564753e-01:2.6159115176327880e-01:1.7079193420442171e+00:3.8669940413964005e-01:2.1860784132031217e+00:2.6159983288788491e-01:2.9837261444158556e+00 + CVs 20 + -1.4593882818162576e-01 2.1857818258190198e-01 2.4051308904981777e-01 + -2.3112924332635310e-01 3.5676224057784511e-01 3.4349734453810776e-01 + -2.9612931843602819e-01 4.6024204597524526e-01 3.9159252995777266e-01 + -3.6867644430880886e-01 5.6304356203784911e-01 4.4939477644474290e-01 + -4.5443586861706436e-01 6.6711951098818822e-01 5.1602584042735944e-01 + -5.5979175332839903e-01 7.7218537427661271e-01 5.9030225839578943e-01 + -6.9004790082514511e-01 8.7566700227172412e-01 6.7082876345695974e-01 + -8.4780841564040965e-01 9.7387522179177188e-01 7.5630780309686763e-01 + -1.0328078058777390e+00 1.0633776734925029e+00 8.4623202671408881e-01 + -1.2422136347478065e+00 1.1419075243244392e+00 9.4060515961596769e-01 + -1.4724844054908843e+00 1.2089092832414683e+00 1.0396380092426623e+00 + -1.7219380133761519e+00 1.2643367151617886e+00 1.1436757750881996e+00 + -1.9864292001645847e+00 1.3059832850369080e+00 1.2503621348543903e+00 + -2.2498405446533276e+00 1.3290758150822168e+00 1.3511393206372329e+00 + -2.4879762130281375e+00 1.3334009475541371e+00 1.4346395904322207e+00 + -2.6906634905375593e+00 1.3284198195949704e+00 1.4952742393002014e+00 + -2.8657537610312049e+00 1.3271016394364030e+00 1.5352588286656996e+00 + -3.0235702115173475e+00 1.3381034494763266e+00 1.5621704783528731e+00 + -3.2561043631435660e+00 1.3843455688144972e+00 1.6760238572448813e+00 + id 13628 + loc 9.1367490589618683e-02 3.7869533896446228e-01 399 + blend 0.0000000000000000e+00 + interp 4.3995828467830400e-01:4.2746564069881099e-01:2.3565490263172684e-01:2.9367265329006048e-01:1.1226383762808050e+00:3.5469520145870309e-01:1.6799944423632034e+00:3.5953480100645185e-01:2.1601135244868317e+00:3.4474544739904028e-01:3.0932654762003673e+00:4.3995388509545724e-01:3.9435823108635293e+00 + CVs 20 + -1.4368857587756081e-01 1.4611129213908677e-01 1.8124943768792745e-01 + -3.0499950064399500e-01 2.7879738146006228e-01 3.5970157035676698e-01 + -4.7779725530508421e-01 3.9595270967559987e-01 5.2296878310118489e-01 + -6.6005701993366650e-01 4.9970644606172626e-01 6.6110870372489405e-01 + -8.5047522912501239e-01 5.9459343207749527e-01 7.7004418832277377e-01 + -1.0352764110123134e+00 6.8319681595998105e-01 8.4756346303693708e-01 + -1.1951082446166537e+00 7.6749821422300846e-01 8.9095462666198222e-01 + -1.3082108086985544e+00 8.5375108420242529e-01 8.8976446461031322e-01 + -1.3584386608829413e+00 9.6371551579082004e-01 8.3072605509678610e-01 + -1.3499453591236887e+00 1.1422923450696156e+00 7.1732341678091283e-01 + -1.3290791618847866e+00 1.4221785988121058e+00 5.9697165463601176e-01 + -1.3641806041027296e+00 1.7094618952063532e+00 5.5392398707629564e-01 + -1.4471070905350212e+00 1.8454773690510824e+00 5.9695557106770647e-01 + -1.5197240606845950e+00 1.7713909494945883e+00 6.8051223013123119e-01 + -1.5408720630136528e+00 1.4732222696386872e+00 7.9646377965974635e-01 + -1.5209780607300276e+00 9.8842765811964461e-01 9.9674117578330779e-01 + -1.5188372442979490e+00 3.8765931417396282e-01 1.3683638115650751e+00 + -1.7017186711835153e+00 -2.1508917335825956e-01 1.8562444498475374e+00 + -1.9231874695548847e+00 -3.1301407288248506e-01 1.8409177155738670e+00 + id 13629 + loc 9.1966348886489868e-01 8.3216148614883423e-01 415 + blend 0.0000000000000000e+00 + interp 6.2611535523792994e-01:3.0014205606279154e-01:6.8622079486050702e-01:4.2713516223737652e-01:1.5366137816339300e+00:6.2610909408437754e-01:2.0393152222991486e+00:4.6934433206508347e-01:2.8306943745711575e+00:2.6924615123154244e-01:3.1201021251634886e+00:4.9575606461449290e-01:3.9951041328118322e+00 + CVs 20 + 3.6443050405043947e-01 1.6457958895128119e-01 -3.4325729952431980e-02 + 6.4551901406596035e-01 2.6663742074187902e-01 -7.6310203613408678e-02 + 8.9893892804260100e-01 3.4129472162559604e-01 -1.0967936931839059e-01 + 1.1583344500996386e+00 4.0923332933269529e-01 -1.2448239392124505e-01 + 1.4174927533257022e+00 4.6475490732947417e-01 -1.2187453960023426e-01 + 1.6692695084557136e+00 5.0301020952139819e-01 -1.0512568419388801e-01 + 1.9087425191529119e+00 5.2171696975537474e-01 -7.8010001752495395e-02 + 2.1341095881988550e+00 5.2052474471868426e-01 -4.4646561856917621e-02 + 2.3451485898661599e+00 4.9958620947507260e-01 -1.1094259957768249e-02 + 2.5431706219743093e+00 4.5972119862605987e-01 1.6114773013168771e-02 + 2.7281014960474650e+00 4.0696126605016947e-01 3.9165232645888670e-02 + 2.8852397914832228e+00 3.5989563886509979e-01 7.7072728055419204e-02 + 2.9903558101716938e+00 3.4001493354933676e-01 1.4986028146220198e-01 + 3.0524726818086769e+00 3.4146291267562789e-01 2.4662620652283068e-01 + 3.1008662494586945e+00 3.3898171822287426e-01 3.2819979546774264e-01 + 3.1392640520827890e+00 3.2873934799800542e-01 3.8166135782579941e-01 + 3.1584253750015945e+00 3.2271420298772346e-01 4.3241432782613931e-01 + 3.1575920304900302e+00 3.2288581785856496e-01 5.0039863479946511e-01 + 3.1426625509636810e+00 1.8016810478602352e-01 3.2326835709276452e-01 + id 13630 + loc 1.7079511284828186e-01 6.0171592235565186e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0460364934798265e-01:2.9681535244916080e-01:3.4668035662054242e-01:4.0398283330802109e-01:1.0106280052985186e+00:2.7516232944682373e-01:1.7566231782157775e+00:3.0921881467057932e-01:2.3871034087410772e+00:4.0459960331148920e-01:2.9988608217707053e+00:2.6722156541053221e-01:3.5199437761271666e+00 + CVs 20 + -5.2199717185176499e-02 3.0812323985709072e-01 -1.4432577498287047e-01 + -6.5591313494714129e-02 6.1604819799946242e-01 -3.0915808043904663e-01 + -6.9154963887316748e-02 9.2067989336086420e-01 -4.9716561540828969e-01 + -7.7801235640959809e-02 1.2212017430995048e+00 -7.1578459981425446e-01 + -9.1374422182713369e-02 1.5052892204383284e+00 -9.7078138322965390e-01 + -1.1054795359489185e-01 1.7559420837534920e+00 -1.2635990079584225e+00 + -1.3602325950570321e-01 1.9565727069090006e+00 -1.5876517111245130e+00 + -1.6773194142726777e-01 2.0937294924734617e+00 -1.9283723140664490e+00 + -2.0710673165303101e-01 2.1562897956387177e+00 -2.2823885488844926e+00 + -2.5262614595123994e-01 2.1396210547375429e+00 -2.6660790358006672e+00 + -2.8138371428855341e-01 2.0621062694772219e+00 -3.0656178747296483e+00 + -2.6461973573356234e-01 1.9634328829985159e+00 -3.4144418492903101e+00 + -2.0309483427020100e-01 1.8703897140157852e+00 -3.6735117045586678e+00 + -1.0487956390011405e-01 1.7713099417116673e+00 -3.8812096677973460e+00 + 4.8437318211438041e-02 1.6376737487549535e+00 -4.0758269755677983e+00 + 2.8561344922092446e-01 1.4394494394481439e+00 -4.2769683883796628e+00 + 5.8142611173630454e-01 1.1286905094889925e+00 -4.5341454500218630e+00 + 8.4023736420668460e-01 6.9925781538956100e-01 -4.8875825619103743e+00 + 1.0447640133117124e+00 2.3753804487390451e-01 -5.2906125317598640e+00 + id 13631 + loc 8.7095850706100464e-01 2.9763793945312500e-01 403 + blend 0.0000000000000000e+00 + interp 3.5526560349422059e-01:2.7753079753910531e-01:3.6979756890253446e-01:2.7704647768053542e-01:1.1071128980088418e+00:3.5526205083818568e-01:1.9812491894678139e+00:3.0329791994111488e-01:2.4344900426863232e+00:2.8935536898311059e-01:3.0335577118069490e+00:3.0773905133389229e-01:3.9467534826972290e+00 + CVs 20 + -8.8171621275855046e-03 2.4935274081798010e-02 4.6935948591690604e-02 + -1.9265026450131773e-02 4.9815162315855657e-02 9.2918160781149117e-02 + -3.0936236826347063e-02 7.2725017821904964e-02 1.3511383111008013e-01 + -3.9774508520708830e-02 8.9698057174854934e-02 1.6856963435993441e-01 + -4.8628836549591770e-02 1.0207495327854818e-01 1.9290343450243810e-01 + -6.1423428513439543e-02 1.1177572434529862e-01 2.0801050481186995e-01 + -8.2819314002928648e-02 1.2151112642987000e-01 2.1449440125611693e-01 + -1.1866798636764925e-01 1.3539883467891936e-01 2.1473850277746515e-01 + -1.7403846399065345e-01 1.5922520387841599e-01 2.1357564731497788e-01 + -2.4835811262231550e-01 1.9854115706760395e-01 2.1848807426180791e-01 + -3.3203859793018686e-01 2.5442787624141505e-01 2.3688036493618531e-01 + -4.1142787671824055e-01 3.2280010554030159e-01 2.7183756340491289e-01 + -4.7682408227694989e-01 3.9971598222633908e-01 3.2276635494162942e-01 + -5.2210233716746213e-01 4.8294470909634613e-01 3.8868756643873781e-01 + -5.4180323810403619e-01 5.6956928254947548e-01 4.6940805662685087e-01 + -5.3042947249215455e-01 6.5546310056123047e-01 5.6485440500225237e-01 + -4.8309355069251092e-01 7.3899204515965267e-01 6.7399592129361363e-01 + -3.9559171681205485e-01 8.2588131782176788e-01 7.9319187695364235e-01 + -2.6634986529125704e-01 8.7687102845132436e-01 7.6830779616679690e-01 + id 13632 + loc 9.9284335970878601e-02 3.4454014897346497e-01 402 + blend 0.0000000000000000e+00 + interp 4.4767598527113034e-01:4.1569093791394873e-01:7.3100541333501279e-01:4.3079153995539360e-01:1.0440845697208085e+00:3.4660302261837844e-01:1.9999988314202763e+00:2.9501819089349757e-01:2.8279689725880863e+00:4.4767150851127763e-01:3.0494841727246236e+00:3.6108711256026588e-01:3.9786948727868352e+00 + CVs 20 + -1.2831957667872876e-01 3.1045919232202612e-01 1.7954891338785156e-01 + -2.6963576185292787e-01 6.0706283549188245e-01 3.2687280927581991e-01 + -4.2347113157220651e-01 8.8668351365034104e-01 4.2745071203965124e-01 + -5.8408148442789809e-01 1.1486583621123057e+00 4.7859631897758026e-01 + -7.4673422412202162e-01 1.3970912479767026e+00 4.9042784097145409e-01 + -9.1321431662897878e-01 1.6397865990381080e+00 4.7288716317064355e-01 + -1.0938368974436954e+00 1.8841449102229819e+00 4.2669327405440427e-01 + -1.3045308328412872e+00 2.1331846282349174e+00 3.5508842525013418e-01 + -1.5552766883177815e+00 2.3854880580373883e+00 2.8576349206222679e-01 + -1.8451441568086944e+00 2.6337197095888745e+00 2.5451164063860754e-01 + -2.1773500673206985e+00 2.8677147616582883e+00 2.6694660111443647e-01 + -2.5686279498423703e+00 3.0681497304181962e+00 3.0361856633448414e-01 + -3.0292491232284444e+00 3.1751393898251372e+00 3.4496237771607141e-01 + -3.5254152877637184e+00 3.1021070339123540e+00 3.8141685697561878e-01 + -3.9867312715798100e+00 2.8160859030299159e+00 4.3718534715278123e-01 + -4.3501728528348309e+00 2.3564374099726471e+00 5.7446229983516073e-01 + -4.5962350995830494e+00 1.8325495370594411e+00 8.6678589899775238e-01 + -4.7335930672727544e+00 1.4512243755653913e+00 1.3310603070014944e+00 + -4.7530577725231424e+00 1.3981553502573196e+00 1.8320459165484646e+00 + id 13633 + loc 2.6500526070594788e-01 1.7231997847557068e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4690339651548383e-01:4.4689892748151872e-01:3.6578546815843049e-03:3.6006316503395008e-01:4.8913585708061202e-01:3.6237859281304652e-01:1.0026118784202591e+00:3.0242811857260427e-01:1.7036617151365725e+00:3.6349321625217029e-01:2.3016925018367362e+00:3.1598068712078059e-01:3.0283531368695571e+00:4.1887356531986564e-01:3.6515561882386001e+00 + CVs 20 + -2.9484158717380649e-01 2.3399453072759324e-01 -5.7067564695437750e-02 + -5.5720019497781414e-01 4.7333379723811381e-01 -8.2702042223429806e-02 + -8.0027880561445286e-01 7.2074756279349073e-01 -8.3897473711352311e-02 + -1.0380822806851921e+00 9.7015225653585457e-01 -8.0618973889557410e-02 + -1.2857738848151627e+00 1.2032469267812198e+00 -1.0519020960361314e-01 + -1.5518207430154969e+00 1.3967796226048255e+00 -1.7636347512307382e-01 + -1.8391361078364798e+00 1.5321967712065983e+00 -2.9630293277924324e-01 + -2.1453676474833836e+00 1.5891944880812403e+00 -4.7782721851697374e-01 + -2.4292979493535727e+00 1.5422249552462188e+00 -7.3531574190026316e-01 + -2.6244521352744510e+00 1.3904665411618209e+00 -1.0408717393011095e+00 + -2.7146080945183146e+00 1.1634181316513144e+00 -1.3485804428921484e+00 + -2.7182543181418519e+00 8.8232879612173454e-01 -1.6301731341113528e+00 + -2.6493557977951196e+00 5.5784523945171560e-01 -1.8556746028689481e+00 + -2.5319902989727141e+00 2.1245564636430814e-01 -2.0177483504319942e+00 + -2.4084758700410291e+00 -1.2970635592255186e-01 -2.1834486346909654e+00 + -2.3168837062857963e+00 -4.4221948550069867e-01 -2.4530431130558066e+00 + -2.3126250907649704e+00 -6.2071342232178517e-01 -2.8711828780437081e+00 + -2.4391230853744958e+00 -5.8948317268498729e-01 -3.3220691114901721e+00 + -2.6065831327934599e+00 -5.2366987179196711e-01 -3.7943195727743024e+00 + id 13634 + loc 3.3994814753532410e-01 5.0411086529493332e-02 382 + blend 0.0000000000000000e+00 + interp 3.9699951863543631e-01:2.3162018179654445e-01:5.2739946784483993e-01:3.9699554864025000e-01:1.0016669117002104e+00:2.7640305446549140e-01:1.8248623195343550e+00:2.7934659243653698e-01:2.4432506891231234e+00:3.2184127093987092e-01:3.0030365827009082e+00:3.4719168483482743e-01:3.9591627963748524e+00 + CVs 20 + -4.1127278707903053e-01 1.9033279325978403e-01 -7.4085501382821950e-01 + -7.5147613044493156e-01 2.6391562255128231e-01 -1.2866426326574745e+00 + -1.0677919211211548e+00 2.7560799151739568e-01 -1.7996983851903228e+00 + -1.3780334980297724e+00 2.4697296010956782e-01 -2.3548392557566582e+00 + -1.6745241812386966e+00 1.7195795830041205e-01 -2.9405663379979092e+00 + -1.9495746119168031e+00 4.5335575106967507e-02 -3.5355609827777466e+00 + -2.1961404510120293e+00 -1.3558164140678697e-01 -4.1111619040934473e+00 + -2.4072619462489504e+00 -3.6485470684641674e-01 -4.6391895406719694e+00 + -2.5821775179575814e+00 -6.2518803706919712e-01 -5.1025514387077084e+00 + -2.7290201379594143e+00 -8.9416056126031251e-01 -5.4985569837713486e+00 + -2.8564102675580170e+00 -1.1530191306821109e+00 -5.8324927460636609e+00 + -2.9675829172737398e+00 -1.3936602051552955e+00 -6.1157359645390876e+00 + -3.0656156472143912e+00 -1.6303071655754611e+00 -6.3713598700880141e+00 + -3.1554644326745986e+00 -1.9094043593402383e+00 -6.6270118977846622e+00 + -3.2372708595305788e+00 -2.2736037978059342e+00 -6.8900964282679062e+00 + -3.3129451235311023e+00 -2.7083879575301584e+00 -7.1551732922505247e+00 + -3.4013126574007453e+00 -3.1675213028637828e+00 -7.4220812610534708e+00 + -3.5422850057715962e+00 -3.6061232571947430e+00 -7.6813073902896312e+00 + -3.7395493542372771e+00 -3.9700115064480808e+00 -7.9127595103516306e+00 + id 13635 + loc 5.7624214887619019e-01 4.3492218852043152e-01 378 + blend 0.0000000000000000e+00 + interp 4.9652243462659634e-01:3.4951726370540981e-01:2.4241633997370970e-01:4.2569392382412469e-01:9.1721139132665208e-01:3.1360772350417598e-01:1.8455526947111220e+00:4.0455324625144928e-01:2.2409774986178976e+00:4.9651746940225011e-01:2.8473021426748923e+00:4.5327186306154860e-01:3.0648266206812695e+00:2.6734158539563085e-01:3.5837520996934389e+00 + CVs 20 + -4.2300701150053616e-01 3.8702941611012848e-01 -1.4805217764290696e-01 + -8.0710241039989705e-01 7.2341914462821943e-01 -2.5227603322676967e-01 + -1.1807315419878752e+00 1.0244240179030477e+00 -3.2585931078943137e-01 + -1.5499033575128838e+00 1.3058275159229691e+00 -3.8296635164763443e-01 + -1.9132821821517578e+00 1.5727522126042306e+00 -4.3987078437582716e-01 + -2.2837533304002857e+00 1.8240336599251803e+00 -5.1568537053270469e-01 + -2.6746524009225729e+00 2.0479921533317995e+00 -6.2912727844099958e-01 + -3.0875144993491750e+00 2.2268063680325767e+00 -7.9546730764733387e-01 + -3.5122927360129204e+00 2.3433705027482126e+00 -1.0256738734208264e+00 + -3.9328984806089879e+00 2.3819740616164182e+00 -1.3223382344806769e+00 + -4.3348962437562406e+00 2.3267549774314538e+00 -1.6742909491934723e+00 + -4.7052797258351093e+00 2.1591001936242957e+00 -2.0570772948254583e+00 + -5.0218533786551802e+00 1.8633118873059011e+00 -2.4354636807535330e+00 + -5.2632927976223076e+00 1.4518459611975558e+00 -2.7794302414922871e+00 + -5.4481900796720328e+00 9.7142616674026439e-01 -3.0984792787098598e+00 + -5.6394035313278499e+00 4.7466058069618899e-01 -3.4294126098738085e+00 + -5.9117952912312237e+00 -1.5297151336381987e-03 -3.7789557356732910e+00 + -6.3030770605494428e+00 -4.3323093635046117e-01 -4.1065992462800969e+00 + -6.6243536405157073e+00 -8.3491250306570075e-01 -4.4321170719779710e+00 + id 13636 + loc 3.8728293776512146e-01 3.0497097969055176e-01 396 + blend 0.0000000000000000e+00 + interp 4.6752769818709661e-01:3.6637057543151946e-01:1.5247660211494007e-01:2.4928602643988074e-01:1.0032312530417626e+00:3.9460313310104922e-01:1.9812803776379573e+00:4.5917705174347073e-01:2.3543490173870718e+00:4.2499305043433744e-01:3.0453897467139068e+00:4.6752302291011477e-01:3.9432200767386587e+00 + CVs 20 + -2.4507051300033303e-01 2.0876971040170095e-01 -7.5140812162974902e-01 + -4.3465320375058880e-01 2.8944262347053867e-01 -1.3140454392247574e+00 + -5.9712233100263723e-01 3.2994412635340536e-01 -1.8169026032429185e+00 + -7.4457994209081824e-01 3.5909281553775829e-01 -2.3057700727218502e+00 + -8.7820071664680932e-01 3.7153722052593818e-01 -2.7713966831209311e+00 + -1.0036286593993102e+00 3.6390093918227295e-01 -3.2099951919611374e+00 + -1.1271728134788801e+00 3.3455545571685086e-01 -3.6205804994801913e+00 + -1.2534352490356104e+00 2.8254190229531950e-01 -4.0047283971200143e+00 + -1.3846302619041961e+00 2.0408001139497012e-01 -4.3711433627876701e+00 + -1.5205790289700243e+00 8.9107200234711970e-02 -4.7324875240909803e+00 + -1.6631497234761419e+00 -7.6868044459432294e-02 -5.0890155096617544e+00 + -1.8174360411386288e+00 -3.0605348038344848e-01 -5.4231656088211837e+00 + -1.9817856587551059e+00 -6.0468616887443116e-01 -5.7186525239791717e+00 + -2.1436364085188400e+00 -9.7512560200195031e-01 -5.9720454028051133e+00 + -2.2893575922042850e+00 -1.4093380925915606e+00 -6.1812965987289870e+00 + -2.4099299568285182e+00 -1.8787631381752012e+00 -6.3383999832605866e+00 + -2.5003668741251612e+00 -2.3563121947274142e+00 -6.4380738662498267e+00 + -2.5603162622478353e+00 -2.8430145102461450e+00 -6.4781281442689451e+00 + -2.6038087633148237e+00 -3.3970226944982929e+00 -6.4519282349631926e+00 + id 13637 + loc 3.8732370734214783e-01 3.4760892391204834e-01 376 + blend 0.0000000000000000e+00 + interp 4.5995195480562262e-01:3.1233587354988379e-01:7.6531451043626575e-03:4.4011736715898386e-01:4.6403483042353455e-01:2.9567321318483386e-01:1.0743292644233411e+00:4.0308952683867255e-01:1.8251555018521151e+00:3.3896051220217854e-01:2.1228318927597774e+00:4.5994735528607461e-01:2.9461815893662444e+00:2.9442893374315593e-01:3.4468278068949800e+00 + CVs 20 + 6.1418873168287957e-01 4.1442554841261359e-01 2.0864175471211760e-01 + 1.1676763132871124e+00 6.8207134235645495e-01 2.8602855729199239e-01 + 1.7404386216963736e+00 7.9369457363192275e-01 2.4249270496127076e-01 + 2.3520660853737230e+00 8.1712095682611996e-01 1.1945361013845873e-01 + 2.9927067586232083e+00 8.3459461631328224e-01 -1.5335515645391595e-02 + 3.6608765039691615e+00 8.7385645591889460e-01 -8.0206980775669456e-02 + 4.3500791337339786e+00 9.2143188918684693e-01 -1.0531060860892616e-02 + 5.0345734511766613e+00 9.6321145242123274e-01 2.2447910938719917e-01 + 5.6748449799002323e+00 9.7983438835997316e-01 6.2267706367697329e-01 + 6.2395485539406916e+00 9.3098678786012989e-01 1.1481818738625718e+00 + 6.6987446152063228e+00 7.6217775559058110e-01 1.7444890510178259e+00 + 6.9998495095293993e+00 4.2342620444658108e-01 2.3345174491872687e+00 + 7.0875105499222339e+00 -8.4625242633108222e-02 2.8246102900288452e+00 + 6.9384781975790393e+00 -6.8811945991840240e-01 3.1397886284995948e+00 + 6.5984357951438284e+00 -1.2772377927705794e+00 3.1859147395304168e+00 + 6.2941226336166594e+00 -1.7473251880733054e+00 2.8731966674162619e+00 + 6.2675584807570681e+00 -1.9752689394186493e+00 2.2046330688349318e+00 + 6.3718948243097566e+00 -2.0010431295593194e+00 1.5290167924785416e+00 + 6.2707682253512980e+00 -2.5684998515424597e+00 1.2994289580390517e+00 + id 13638 + loc 2.3062781989574432e-01 2.1641334891319275e-01 393 + blend 0.0000000000000000e+00 + interp 4.5031106842011198e-01:2.7154153862588792e-01:5.7186260912398534e-03:4.0391963889414778e-01:5.1212030344754966e-01:4.5030656530942781e-01:9.9812012925124693e-01:4.2347332312643393e-01:1.4246309194182964e+00:4.1741385306392426e-01:1.9952996189707821e+00:3.9724414355062182e-01:2.5760453504817731e+00:3.2806793234855752e-01:3.0488416172079278e+00 + CVs 20 + -3.6730908670290205e-02 3.5025581244126175e-01 3.6035818493866573e-01 + -7.9159705158447488e-02 7.0364012521707853e-01 7.1921511204196920e-01 + -1.1982483840645511e-01 1.0673892160236840e+00 1.0682400023440564e+00 + -1.7607616178257410e-01 1.4345947886197012e+00 1.4054891796519606e+00 + -2.8012882319542820e-01 1.7890307305429818e+00 1.7332826984004046e+00 + -4.5251717247921286e-01 2.1177708467573142e+00 2.0488038913487108e+00 + -6.8556351001037585e-01 2.4124119174085155e+00 2.3357313791373970e+00 + -9.5217493351581806e-01 2.6662450121651213e+00 2.5775982047162307e+00 + -1.2291624548526978e+00 2.8794864184835030e+00 2.7719050356125132e+00 + -1.5084465582521229e+00 3.0607515971401758e+00 2.9258591376581040e+00 + -1.8003680834906257e+00 3.2187979909873832e+00 3.0578746893035396e+00 + -2.1243842008120835e+00 3.3490886972045351e+00 3.1947464369700880e+00 + -2.4900103150197039e+00 3.4333521757934871e+00 3.3449696540766602e+00 + -2.8959695312450684e+00 3.4478458329958932e+00 3.4956393185473855e+00 + -3.3123394228384706e+00 3.3477689337242569e+00 3.6330762997161554e+00 + -3.6553594193514543e+00 3.0965682524567431e+00 3.7403142698325347e+00 + -3.8391267173210020e+00 2.7298246233071231e+00 3.8406557635625180e+00 + -3.7794962965991714e+00 2.3510528299145741e+00 4.0191183508504178e+00 + -3.4026074233910526e+00 2.0654107048787602e+00 4.3579349724644283e+00 + id 13639 + loc 8.5647833347320557e-01 2.3983910679817200e-01 375 + blend 0.0000000000000000e+00 + interp 4.2686777598697973e-01:3.1925957729047827e-01:6.5336083398706890e-02:2.9622176845522230e-01:1.0419076370464671e+00:2.7207432089924766e-01:1.8023482739443186e+00:3.8776460148778824e-01:2.2221435981385618e+00:4.2686350730921985e-01:2.9139310888424106e+00:3.2192853338006022e-01:3.2342013555420546e+00 + CVs 20 + 6.4101264514667022e-01 4.0062875392859815e-01 4.7560720274418822e-02 + 1.1271540318603537e+00 6.2216579949955020e-01 9.1057113086854824e-03 + 1.5632733078725798e+00 7.0346051700686552e-01 -1.0003064877691598e-01 + 1.9990325341476116e+00 6.9707865769452493e-01 -2.7190641905185275e-01 + 2.4418950276095757e+00 6.6828045164557115e-01 -5.0066979127582634e-01 + 2.9224990250450427e+00 6.7172827314364614e-01 -7.7210356380049450e-01 + 3.4842727331447199e+00 7.2843054384533124e-01 -1.0378901210954641e+00 + 4.1459492706521637e+00 8.4275796744866405e-01 -1.2285642759753377e+00 + 4.8818510552676635e+00 1.0253820544208385e+00 -1.2853972934414173e+00 + 5.6334365645671047e+00 1.2748472395624093e+00 -1.1829379042208128e+00 + 6.3805663118021467e+00 1.5603231317501092e+00 -9.3196330118508852e-01 + 7.1510159242720812e+00 1.8275760648720087e+00 -5.1447886663173259e-01 + 7.9338426681058323e+00 1.9700243225142275e+00 1.0933953782700234e-01 + 8.6464692794276097e+00 1.8542046994939905e+00 9.3428205042104961e-01 + 9.1535453143958811e+00 1.4272554828194659e+00 1.8408861034856558e+00 + 9.3897523765825497e+00 8.7377831618673119e-01 2.5005777830680036e+00 + 9.5081091399690401e+00 5.8807173990848227e-01 2.7044794952327651e+00 + 9.6077229998543281e+00 5.0432110983005884e-01 2.6783793414186476e+00 + 9.8140745394849525e+00 -1.7436986710238767e-01 2.5112992198279045e+00 + id 13640 + loc 2.6998308300971985e-01 7.8541111946105957e-01 400 + blend 0.0000000000000000e+00 + interp 4.9587210608333565e-01:4.4281919397593567e-01:7.7873728657110286e-02:3.0452186821032085e-01:9.9715272466819671e-01:2.7955186572133300e-01:1.9451462850454910e+00:2.8074832747527928e-01:2.4426800325051601e+00:4.9586714736227483e-01:3.0411808515807484e+00:4.3064917827601829e-01:3.5212952646068985e+00 + CVs 20 + -1.7558458091609550e-01 3.8055217799854441e-01 -1.3164852365028007e-01 + -3.5096334500533161e-01 7.5768550916126909e-01 -2.8568805942927755e-01 + -5.1422659082677247e-01 1.1213980780096491e+00 -4.9092578720058089e-01 + -6.6762880458424456e-01 1.4622709233532023e+00 -7.5767153055084324e-01 + -8.1694031867045347e-01 1.7704137403451909e+00 -1.0846156724964846e+00 + -9.6448773619004391e-01 2.0379177233740600e+00 -1.4682687239678240e+00 + -1.1086027912360883e+00 2.2569366052796456e+00 -1.9062135163639313e+00 + -1.2426292303582591e+00 2.4170455452346391e+00 -2.3967199001541788e+00 + -1.3536559625074998e+00 2.5057583602965576e+00 -2.9360937077840390e+00 + -1.4260021697495604e+00 2.5100095768721142e+00 -3.5147473073977058e+00 + -1.4610339315622116e+00 2.4210429485903733e+00 -4.1120627700075492e+00 + -1.4933968465417324e+00 2.2402496046471647e+00 -4.6988351181230401e+00 + -1.5662247785124404e+00 1.9696824830330202e+00 -5.2409782413124724e+00 + -1.7088212411721744e+00 1.5988401942803403e+00 -5.6887181374119180e+00 + -1.9325607895794561e+00 1.1413286501109605e+00 -5.9788011201674154e+00 + -2.2158233350247341e+00 6.7508806580277847e-01 -6.0967767801179438e+00 + -2.5122521791027053e+00 2.7034999253140080e-01 -6.1111805284698208e+00 + -2.7701618163805204e+00 -8.4475550374342179e-02 -6.1079618570996450e+00 + -2.8400433149593796e+00 -4.8999182248571382e-01 -6.2803297795943216e+00 + id 13641 + loc 3.2551038265228271e-01 2.2365878522396088e-01 395 + blend 0.0000000000000000e+00 + interp 4.4766582606087840e-01:3.1085214141788392e-01:1.4792593534832121e-01:3.8158181279531667e-01:1.0356631680032931e+00:4.4766134940261781e-01:1.7345836810644133e+00:3.9223058826849444e-01:2.0498702706760845e+00:3.8814905094426116e-01:2.9765496302705770e+00:3.6666921556172077e-01:3.8336022429152781e+00 + CVs 20 + -3.1784685260355300e-01 1.3400837568045917e-01 -1.6444597355451712e-01 + -5.9135670620976144e-01 2.4682136077466196e-01 -3.2278942844366870e-01 + -8.4909467904990765e-01 3.4937556138397918e-01 -4.8920479869961842e-01 + -1.1035939880528720e+00 4.4721285497941476e-01 -6.7135303859125361e-01 + -1.3484971660735661e+00 5.3703868506169772e-01 -8.6982092344054995e-01 + -1.5783305537949659e+00 6.1497169059532497e-01 -1.0825345312050652e+00 + -1.7928361856505641e+00 6.8043536634572144e-01 -1.3052335364900860e+00 + -1.9946940224770282e+00 7.3512172153137101e-01 -1.5325818013947812e+00 + -2.1818706061959565e+00 7.7926754661953979e-01 -1.7606639175819945e+00 + -2.3483799822969225e+00 8.1105563362169186e-01 -1.9877940048602962e+00 + -2.4989481277460186e+00 8.2444632925891548e-01 -2.2132145496111360e+00 + -2.6530043117524622e+00 8.0560254901662764e-01 -2.4340210452408657e+00 + -2.8251495084568923e+00 7.4296683445237233e-01 -2.6439461338321739e+00 + -3.0142091115912928e+00 6.3748684488711516e-01 -2.8386684701491314e+00 + -3.2149100536370550e+00 4.9850774863425817e-01 -3.0156398563108238e+00 + -3.4283302379846705e+00 3.3735609652243692e-01 -3.1706597331244497e+00 + -3.6554654554929953e+00 1.5843565498053458e-01 -3.2994143553061046e+00 + -3.8852743379828341e+00 -4.8272090107992938e-02 -3.3968657079981379e+00 + -4.0706449933599993e+00 -3.2618343078339374e-01 -3.4376686341721383e+00 + id 13642 + loc 2.9280292987823486e-01 7.9888415336608887e-01 373 + blend 0.0000000000000000e+00 + interp 4.2757050554417153e-01:3.5576593418714469e-01:5.0122700419472010e-01:2.7272968725388291e-01:1.3198947613768959e+00:3.6587980998424219e-01:2.1094594770689548e+00:3.8443584829819327e-01:2.9005633262984132e+00:3.9249911769522211e-01:3.2859295674555984e+00:4.2756622983911613e-01:3.9892521520772788e+00 + CVs 20 + -3.9774986851513172e-01 5.3720375904340600e-01 -1.8747533388682955e-01 + -7.2463211599681765e-01 1.0440448453266535e+00 -3.9132655739514277e-01 + -9.7878433924035235e-01 1.5330227601756845e+00 -6.4169716709588842e-01 + -1.1653328279266126e+00 2.0038254165517122e+00 -9.6242017636179211e-01 + -1.2944244224500352e+00 2.4235806530961099e+00 -1.3597153756013256e+00 + -1.3989579884391772e+00 2.7473538187170341e+00 -1.8177655873669258e+00 + -1.5169167098139080e+00 2.9434399939425315e+00 -2.2992687213801246e+00 + -1.6731976268073776e+00 3.0070417533771718e+00 -2.7532049706738939e+00 + -1.8713608383754037e+00 2.9642771710804730e+00 -3.1357353966036907e+00 + -2.0978895369633896e+00 2.8590879066906716e+00 -3.4290920516160290e+00 + -2.3300896138790854e+00 2.7305064859509285e+00 -3.6414837535883655e+00 + -2.5536902159304580e+00 2.6026504956197449e+00 -3.8100323543426833e+00 + -2.7780239410851610e+00 2.4840482909093837e+00 -3.9793372663474700e+00 + -3.0291319519019426e+00 2.3676550363831765e+00 -4.1811186793386561e+00 + -3.3362854472009777e+00 2.2330373913079353e+00 -4.4270100644583845e+00 + -3.7055312172007184e+00 2.0726042085194454e+00 -4.7017452399843416e+00 + -4.1134022384661515e+00 1.9029406842303769e+00 -4.9738713683518680e+00 + -4.5509956786463981e+00 1.7130265491426608e+00 -5.2069859737575364e+00 + -4.9945839905296818e+00 1.3522462156017880e+00 -5.2325387728220907e+00 + id 13643 + loc 7.6922804117202759e-02 7.3770207166671753e-01 402 + blend 0.0000000000000000e+00 + interp 4.3604586491919778e-01:2.8234307407365655e-01:9.0223272136576671e-01:2.7138362869908628e-01:1.9788979173294248e+00:2.7853086833425017e-01:2.6056185818905377e+00:4.3604150446054862e-01:3.2205051861946634e+00:2.7920794116392128e-01:3.9746250616485632e+00 + CVs 20 + -3.5231207651284305e-02 3.0548569208955278e-01 -5.3068814806463985e-02 + -9.6030683447546894e-02 6.1855370910285856e-01 -1.1068908920301254e-01 + -1.4854983212887629e-01 9.6243800713482008e-01 -1.9117620929167900e-01 + -1.6502442785376104e-01 1.3309028318781666e+00 -3.0319042143209818e-01 + -1.4411728640236410e-01 1.7046967391421788e+00 -4.5297329882272791e-01 + -9.3149229800761457e-02 2.0657219346229483e+00 -6.4083529961645502e-01 + -2.3374555429433230e-02 2.4055212106348223e+00 -8.6319365015598493e-01 + 5.3682018261356323e-02 2.7232131026408215e+00 -1.1156554047956764e+00 + 1.2079492853132034e-01 3.0251796848102943e+00 -1.4009087863132850e+00 + 1.5580020360282731e-01 3.3152513800873615e+00 -1.7342524889581192e+00 + 1.5458005167264721e-01 3.5808334738479477e+00 -2.1320826451042114e+00 + 1.4023825435706838e-01 3.7836975025259756e+00 -2.5964536137061005e+00 + 1.4385689923131828e-01 3.8662648255787140e+00 -3.0857352951210046e+00 + 1.9070072812917038e-01 3.8008856870264531e+00 -3.5156248009045106e+00 + 2.9657452937438622e-01 3.6119667850618971e+00 -3.8330518008870378e+00 + 4.6129335187836829e-01 3.3128034841700753e+00 -4.0363384355289558e+00 + 6.4551008559171486e-01 2.8635554063448643e+00 -4.1594593788385570e+00 + 6.7867976113057205e-01 2.3102302145105131e+00 -4.2773657442866613e+00 + 4.1393372344435309e-01 2.1488186137029963e+00 -4.3011734304565161e+00 + id 13644 + loc 1.0691341012716293e-01 9.6599483489990234e-01 374 + blend 0.0000000000000000e+00 + interp 5.4413421854624799e-01:5.4412877720406261e-01:7.8904050974937345e-01:1.7825614034527784e-01:1.8796690049282596e+00:2.7440836438518168e-01:2.2723034894978036e+00:3.9820222216368939e-01:2.8200619253221717e+00:4.5428707118890865e-01:3.1652553004579587e+00:3.5350525005509115e-01:3.9312482960650565e+00 + CVs 20 + -6.0755437034990245e-01 3.7845445240092113e-01 -9.8276452312050649e-02 + -1.1308704928766549e+00 6.5704683363752470e-01 -1.5796556945237727e-01 + -1.6518049448372820e+00 8.7013048162817486e-01 -1.7360722908363047e-01 + -2.2011446698843793e+00 1.0545905599299108e+00 -1.5575823784416659e-01 + -2.7741234421480843e+00 1.2294566771523523e+00 -1.2911983026864360e-01 + -3.3756216024518748e+00 1.3896505269736950e+00 -1.3130301450928272e-01 + -4.0092291095962240e+00 1.5083137887825817e+00 -2.0163203587843270e-01 + -4.6595031258114252e+00 1.5547935283661545e+00 -3.6820632293071243e-01 + -5.2926614060228614e+00 1.5054685583346545e+00 -6.3689316483460634e-01 + -5.8741606497205900e+00 1.3438910874998529e+00 -9.8349926241461749e-01 + -6.3797105511302901e+00 1.0590992875396457e+00 -1.3615411115788494e+00 + -6.7877530298165452e+00 6.4959334514589040e-01 -1.7222211839194850e+00 + -7.0851474489705044e+00 1.4301659870203309e-01 -2.0319136826586730e+00 + -7.3052741585679097e+00 -3.8990107814752051e-01 -2.2935472140832753e+00 + -7.5268121852955003e+00 -8.7122427000143565e-01 -2.5428906953067951e+00 + -7.8113664006190380e+00 -1.2578610175734051e+00 -2.7874408561871342e+00 + -8.1830828110959253e+00 -1.5484625264338692e+00 -2.9807711058737936e+00 + -8.6081265177744282e+00 -1.7585039764535502e+00 -3.0927846317492365e+00 + -8.9262963963602395e+00 -1.9538579576980353e+00 -3.2176844583164472e+00 + id 13645 + loc 8.8813550770282745e-02 1.5713571012020111e-01 409 + blend 0.0000000000000000e+00 + interp 4.1246835883086880e-01:4.1246423414728051e-01:3.4504640920149154e-02:2.7948865766102443e-01:9.6941763674917270e-01:4.1212393067510777e-01:1.3544004747110876e+00:3.0110485963695333e-01:1.9970412847807189e+00:3.0025509771750136e-01:2.5395029409544181e+00:2.6970531179438795e-01:3.0293204443373649e+00 + CVs 20 + -2.7674351873559272e-01 2.2997894628644305e-01 -2.6074059698623492e-01 + -5.3710218118194031e-01 4.8091500355104411e-01 -4.9996501626609713e-01 + -7.9553146220720072e-01 7.6520817917204809e-01 -7.5162379607263741e-01 + -1.0669879923543304e+00 1.0682937708826967e+00 -1.0217098519101351e+00 + -1.3773488859276370e+00 1.3566394936231716e+00 -1.3000857691525038e+00 + -1.7553671849047283e+00 1.5955978392569790e+00 -1.5807553950711246e+00 + -2.2182275788985311e+00 1.7488421976234512e+00 -1.8659102284798728e+00 + -2.7596845265331948e+00 1.7736069720582091e+00 -2.1666532291778822e+00 + -3.3363908489580383e+00 1.6280374911039706e+00 -2.4940979198482891e+00 + -3.8741543536607939e+00 1.2869313398383917e+00 -2.8422760901717550e+00 + -4.2885891756043275e+00 7.7724837657991297e-01 -3.1757742777658269e+00 + -4.5588690822595881e+00 2.0415213949973476e-01 -3.4556807490570369e+00 + -4.7631592401725973e+00 -3.4835941097268397e-01 -3.6838594365519706e+00 + -4.9830612675261792e+00 -8.7364357343647647e-01 -3.8885227048147000e+00 + -5.2626409142446056e+00 -1.3886362621172079e+00 -4.0992991490280000e+00 + -5.5961192351092874e+00 -1.9045803610451233e+00 -4.3427261119503493e+00 + -5.9298349074037464e+00 -2.4223332039008474e+00 -4.6335098451903418e+00 + -6.2053149873097766e+00 -2.9124274092527132e+00 -4.9451720719283978e+00 + -6.4259015575701701e+00 -3.3497648058055294e+00 -5.1910543676630798e+00 + id 13646 + loc 8.4305071830749512e-01 1.5480656921863556e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7744625993116354e-01:2.7997913290441157e-01:1.6371656364317033e-02:2.7792005672596160e-01:1.0650636693034190e+00:3.0965012111798668e-01:1.8866618232695544e+00:2.7409371173985358e-01:2.4584504209297258e+00:3.7744248546856424e-01:3.1656674305335883e+00 + CVs 20 + -1.9977873261318557e-02 4.9685809194087260e-01 1.2730060333210408e-01 + -6.8990280206033539e-02 9.8928752938768094e-01 2.3703585038925193e-01 + -1.6558588302397154e-01 1.4716840306862515e+00 3.1714361914081490e-01 + -3.3547821618921825e-01 1.9344100118056347e+00 3.6699861635235864e-01 + -6.0113627216964094e-01 2.3538560016535364e+00 3.9195298605543960e-01 + -9.6487497433496860e-01 2.6997789737704219e+00 4.0617196397672978e-01 + -1.4107559655694608e+00 2.9481734095864049e+00 4.3640761894269064e-01 + -1.8980324005198632e+00 3.0846091245556688e+00 5.0948598524187472e-01 + -2.3823220080870087e+00 3.1145603704601723e+00 6.4877643898946413e-01 + -2.8607976786623124e+00 3.0171706208894817e+00 9.0503745016536052e-01 + -3.2786804495471564e+00 2.6612272146721074e+00 1.3392607856099086e+00 + -3.4167672009390611e+00 2.0561482124855841e+00 1.7605011122665482e+00 + -3.3187592926711980e+00 1.4671720014225087e+00 1.9871065900367872e+00 + -3.0809825044391093e+00 9.1231951994083205e-01 2.0836734182788543e+00 + -2.7386674136422324e+00 4.0283284926546636e-01 2.0694834257947941e+00 + -2.3903055674842908e+00 -1.6181725423103716e-02 1.9612076980228927e+00 + -2.1328181224359972e+00 -3.5093132140560013e-01 1.8052579158291338e+00 + -2.0197999418669661e+00 -6.2177768296650227e-01 1.6579456820245657e+00 + -1.8445744801493007e+00 -9.1067672495733265e-01 1.5436561773661204e+00 + id 13647 + loc 7.1815854310989380e-01 4.9972665309906006e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9799376749138732e-01:2.7607804452650303e-01:4.5589303212443477e-01:3.6230290963635930e-01:1.0360670592451342e+00:2.6235686870380492e-01:1.8083474651025995e+00:3.1004666447977530e-01:2.3194027783440649e+00:3.9798978755371245e-01:2.8980380859758865e+00:3.2282273379034715e-01:3.6818586738250363e+00 + CVs 20 + -1.2951485152401546e-01 2.1575897177444617e-01 2.2051766331887362e-01 + -2.7088690415509414e-01 4.4037709121980417e-01 4.3206125164114828e-01 + -4.4506815619577955e-01 6.6689307017994115e-01 6.2967523434421480e-01 + -6.6367844877078319e-01 8.9127803991046517e-01 7.9901921558706956e-01 + -9.1625035330272919e-01 1.1178257418707847e+00 9.2281400165647554e-01 + -1.1556125946797651e+00 1.3663426941126826e+00 9.9852919640590820e-01 + -1.3203537058401273e+00 1.6550275374235373e+00 1.0428642006527724e+00 + -1.3852119335400657e+00 1.9819358258011270e+00 1.0822144010529138e+00 + -1.3521644666111277e+00 2.3311614756314918e+00 1.1465819314919161e+00 + -1.2203547682832512e+00 2.6700105906698681e+00 1.2903916683235419e+00 + -9.8021969089747829e-01 2.9056642220097060e+00 1.5763429023004383e+00 + -6.6933189992140729e-01 2.9323082737364206e+00 1.9386655588089752e+00 + -3.5116704841403457e-01 2.7739972538195334e+00 2.2913298193209375e+00 + -6.8944588579421096e-02 2.4684641963696961e+00 2.6243910423108625e+00 + 1.3806997967371437e-01 2.0462860366291435e+00 2.9380939510518607e+00 + 2.3366726597882437e-01 1.5059394874338150e+00 3.2043931320964356e+00 + 1.7274250017841286e-01 8.4410259295718815e-01 3.3368492391178450e+00 + -3.8623209509771717e-02 1.7821992677691068e-01 3.2787635965333575e+00 + -8.7128176161863191e-02 -1.6725638382240515e-01 3.3675754948354304e+00 + id 13648 + loc 9.0767776966094971e-01 7.1818053722381592e-02 407 + blend 0.0000000000000000e+00 + interp 4.2914783140223184e-01:2.4632336521010062e-01:6.6312037468651885e-01:3.4631129715000025e-01:1.1495151750330252e+00:3.5806390843121172e-01:1.8476963901049097e+00:4.2914353992391785e-01:2.5322798760991847e+00:3.7637277720875484e-01:2.9621526137154586e+00:3.4083621838209327e-01:3.3766559758068615e+00 + CVs 20 + -3.3988781329350470e-01 4.3412674774218662e-01 5.4270422809014902e-02 + -5.0047241450250457e-01 7.3361904637809094e-01 1.0386817229760938e-01 + -6.2318240854167528e-01 9.6709806602370296e-01 1.4702444365116674e-01 + -7.6803997798059342e-01 1.1821922106011036e+00 1.8736105904133871e-01 + -9.2955800491451424e-01 1.3707301715414000e+00 2.1481154395085522e-01 + -1.1059688474902578e+00 1.5205787785389879e+00 2.1341770113600483e-01 + -1.2964807842882098e+00 1.6088128131541437e+00 1.5957553895103524e-01 + -1.4856298114478363e+00 1.5943435615414048e+00 3.0591417003609372e-02 + -1.6234963688018285e+00 1.4511987573114102e+00 -1.5456296631002542e-01 + -1.6874300447886108e+00 1.2402701533850511e+00 -3.2579139896353426e-01 + -1.7300542230203286e+00 1.0348516913344319e+00 -4.5656740999466572e-01 + -1.7909843948966906e+00 8.4247564852339440e-01 -5.6385524453593872e-01 + -1.8801141816497136e+00 6.5556999918925241e-01 -6.6031430591047324e-01 + -2.0110571098529553e+00 4.8920747448302049e-01 -7.5579156315972340e-01 + -2.2013479624217736e+00 3.7444150509213825e-01 -8.5798109407627976e-01 + -2.4474503610274523e+00 3.3511678004899381e-01 -9.5758485673218874e-01 + -2.7198094343860313e+00 3.7200260474680336e-01 -1.0321982000187617e+00 + -2.9818223207870975e+00 4.6796184810252572e-01 -1.0727275892233772e+00 + -3.1759031873395571e+00 4.7119373100676687e-01 -1.1307762708037279e+00 + id 13649 + loc 3.7596625089645386e-01 7.4011904001235962e-01 412 + blend 0.0000000000000000e+00 + interp 3.8016753765653288e-01:3.4379542148196585e-01:2.5665833181355402e-02:3.1534376669707670e-01:9.2393946963904749e-01:3.8016373598115633e-01:1.4369002641536603e+00:3.5407958272705475e-01:2.0016216540995626e+00:2.6371398620074910e-01:2.9992713463068248e+00:3.7431970241239559e-01:3.5712607947522796e+00 + CVs 20 + 7.6810681226874100e-01 1.3118567207724852e-01 -1.8311467717007618e-01 + 1.2516113220248573e+00 1.1517062071669271e-01 -3.4720479806557081e-01 + 1.6581386061945365e+00 4.5896391965023653e-02 -4.9307678201129451e-01 + 2.0545817837824591e+00 -4.1573189394083498e-02 -6.1964135247951557e-01 + 2.4262438134187367e+00 -1.4615938900362890e-01 -7.2828720192888252e-01 + 2.7635678173873446e+00 -2.6458423370333417e-01 -8.2343394079171284e-01 + 3.0622360433640829e+00 -3.9302765182189159e-01 -9.1026611397488055e-01 + 3.3235046014671710e+00 -5.2482401832908954e-01 -9.9451440622217646e-01 + 3.5554039389464540e+00 -6.5219786345587549e-01 -1.0825926309593441e+00 + 3.7679585766301980e+00 -7.6838508705282860e-01 -1.1766182493050663e+00 + 3.9577580820275018e+00 -8.5099873857186359e-01 -1.2609069393968833e+00 + 4.1079303234645490e+00 -8.5498385614986405e-01 -1.2963849091736634e+00 + 4.2376164956621238e+00 -7.7205293354506077e-01 -1.2581397270316659e+00 + 4.4026172651945235e+00 -6.6808329349043771e-01 -1.1773290331988560e+00 + 4.6242605126104595e+00 -5.9223477194912610e-01 -1.0933462084249594e+00 + 4.8920709094280568e+00 -5.4027457847859983e-01 -9.9786908944556707e-01 + 5.1996098672190953e+00 -5.1663486004307013e-01 -8.7568359171808208e-01 + 5.5323095376064648e+00 -5.4554973636935977e-01 -7.5306568631287729e-01 + 5.7547443206179274e+00 -6.9553610420065226e-01 -8.2840581307644512e-01 + id 13650 + loc 2.0001048687845469e-03 7.8838855028152466e-02 401 + blend 0.0000000000000000e+00 + interp 3.7928145001589941e-01:2.8817206084427960e-01:9.7690664666727256e-01:2.8027757089901367e-01:1.5946698181520040e+00:2.8078206130813738e-01:2.1544684523537034e+00:3.5731989344738285e-01:2.8950194387198569e+00:3.7927765720139928e-01:3.1743922322055362e+00:2.7958390928705684e-01:3.9200004511642130e+00 + CVs 20 + -2.5252929704146415e-01 2.6619080771834203e-01 8.4809036352768721e-02 + -4.9348833776879297e-01 5.2056203168218984e-01 2.2797864717060398e-01 + -7.2761907968882256e-01 7.6903622292872398e-01 4.0329548754484446e-01 + -9.5496099239571886e-01 1.0125049910012636e+00 5.9184945258275934e-01 + -1.1684851990553040e+00 1.2465786826180629e+00 7.8536549096129005e-01 + -1.3475250359586344e+00 1.4574240610811193e+00 9.7196481138138213e-01 + -1.4631845754921948e+00 1.6359033525385551e+00 1.1362771421548017e+00 + -1.4899169023737935e+00 1.7901244541255585e+00 1.2360205019356261e+00 + -1.4460226037782555e+00 1.9651268433148892e+00 1.2469243143420081e+00 + -1.3851947733019987e+00 2.1579181011733524e+00 1.2890008820381706e+00 + -1.2853176797744099e+00 2.2332669537165550e+00 1.4732452202100914e+00 + -1.0968529875275670e+00 2.0600856030363199e+00 1.7820388152823665e+00 + -8.5052767715731947e-01 1.5845455326755982e+00 2.1786452168899992e+00 + -6.6392611047549643e-01 8.7257028822220739e-01 2.6748988939475979e+00 + -6.4102457440600802e-01 1.1870444657857432e-01 3.3494453976920968e+00 + -8.1049054377578489e-01 -3.7699059080965097e-01 4.2902373890178866e+00 + -1.0998467717403477e+00 -2.2611631533819287e-01 5.4051913739428095e+00 + -1.2518747525801470e+00 6.0316984811586816e-01 6.1982841052296163e+00 + -1.2489693289656436e+00 1.0607340055953296e+00 6.6801769852347954e+00 + id 13651 + loc 6.7338746786117554e-01 8.7604515254497528e-02 399 + blend 0.0000000000000000e+00 + interp 4.5714312785325378e-01:2.7012510680716489e-01:7.9704230254901021e-01:4.2945942711936158e-01:1.0218433518521859e+00:4.5713855642197526e-01:1.7005058735030771e+00:4.4115600394587207e-01:2.0086457205380430e+00:2.8714646995392734e-01:2.3967371753406326e+00:2.7707122431072206e-01:3.0207224314157255e+00:3.0085096017605306e-01:3.9945957890192307e+00 + CVs 20 + 1.7104649072408187e-01 2.4141117091250605e-01 2.5370487077731413e-01 + 3.3142440948372132e-01 4.5502476531473079e-01 4.8444464462866776e-01 + 4.8908006129653980e-01 6.4795950623844645e-01 7.1800594223595127e-01 + 6.5501101193504918e-01 8.2722133165642964e-01 9.7153908601117323e-01 + 8.3958645809835064e-01 9.9578687772493313e-01 1.2419630424485333e+00 + 1.0512784523643797e+00 1.1534625583289619e+00 1.5196839211976765e+00 + 1.2925169102200207e+00 1.2975538040350818e+00 1.7988971594466134e+00 + 1.5626235917588278e+00 1.4215005160260690e+00 2.0779767210301086e+00 + 1.8626701247599540e+00 1.5121455064864426e+00 2.3573003968180899e+00 + 2.1952175488646386e+00 1.5486241291437097e+00 2.6350737900689740e+00 + 2.5604776516576915e+00 1.5026251093973753e+00 2.9006736511387134e+00 + 2.9552174348809599e+00 1.3514606990246114e+00 3.1365703570925607e+00 + 3.3766596717294943e+00 1.0977715873407035e+00 3.3309178949986493e+00 + 3.8279634227835597e+00 7.6901015175049303e-01 3.4986078753489718e+00 + 4.3211886412471774e+00 4.0532646547392859e-01 3.7017359831540637e+00 + 4.8559263847142944e+00 4.7817162106646771e-02 4.0491659835507390e+00 + 5.3658766411095788e+00 -2.5468989561261246e-01 4.6992651832035452e+00 + 5.6844065304843516e+00 -3.8164456371304523e-01 5.6691376696263678e+00 + 6.0035651200759581e+00 -4.8645049731886081e-01 6.1828007482934053e+00 + id 13652 + loc 3.3533683419227600e-01 2.1500761806964874e-01 1078 + blend 0.0000000000000000e+00 + interp 3.6468635724984722e-01:2.7261281198229037e-01:7.9386733686013145e-01:2.7130322385266198e-01:1.2602514714452184e+00:3.6468271038627476e-01:1.9141446157350994e+00:2.6545187264727377e-01:2.4538113335469443e+00:3.1366245172525109e-01:3.1237328957279646e+00:2.9337636528764965e-01:3.9889218858406417e+00 + CVs 20 + 9.2999212021711922e-02 3.2848600562583102e-01 -1.6095622346379548e-01 + 1.4087309522827737e-01 6.0927710226961129e-01 -3.2061393015376943e-01 + 1.7421261818453171e-01 8.6291339478671536e-01 -4.9258164712130298e-01 + 2.0614429027437153e-01 1.0963894193377408e+00 -6.8113301220420619e-01 + 2.3436972444029758e-01 1.3091800612303659e+00 -8.8341427523497207e-01 + 2.5650705244010080e-01 1.5026261243273673e+00 -1.0954461106073294e+00 + 2.6606780238515959e-01 1.6781156130882868e+00 -1.3144395769109809e+00 + 2.5448003460960145e-01 1.8355166110650569e+00 -1.5381548116634169e+00 + 2.1567948861566399e-01 1.9738121496771663e+00 -1.7618747435003659e+00 + 1.4617151515909566e-01 2.0902864761285889e+00 -1.9799231676186189e+00 + 4.3639992944846995e-02 2.1775182308404926e+00 -2.1902681914271334e+00 + -9.2500355034836557e-02 2.2237437610881523e+00 -2.3934210668108826e+00 + -2.6115767539143120e-01 2.2220850350019732e+00 -2.5887261318055685e+00 + -4.6348802016144219e-01 2.1787924762128252e+00 -2.7729346168831865e+00 + -7.1005465451702765e-01 2.1185775941693636e+00 -2.9394027760241181e+00 + -1.0361036604076515e+00 2.0735044483094063e+00 -3.0878725579579620e+00 + -1.4888204990999852e+00 1.9904819313238558e+00 -3.2487105536513519e+00 + -1.9074816687458147e+00 1.6912771719962965e+00 -3.4406001064116407e+00 + -1.9630500509520852e+00 1.3624054151768430e+00 -3.5275609920344912e+00 + id 13653 + loc 1.3997372984886169e-01 4.9519518017768860e-01 382 + blend 0.0000000000000000e+00 + interp 4.4011094048541133e-01:3.9288062589089634e-01:4.1650929301585804e-01:3.6582544853691074e-01:9.8118231288360491e-01:4.4010653937600647e-01:1.7586403741540675e+00:3.3930639288174869e-01:1.9730061748159393e+00:3.6306495875045602e-01:2.9930796276921341e+00:4.1547549995168792e-01:3.4411936904657905e+00:3.4618211853004216e-01:3.9998197095683090e+00 + CVs 20 + -4.8149891938674927e-01 1.7398437728928212e-01 -8.0761764577168127e-01 + -8.5707053779632858e-01 2.3959699587249689e-01 -1.3483605756781607e+00 + -1.2095475132629812e+00 2.7044706459315682e-01 -1.8137567301869859e+00 + -1.5742039147083637e+00 2.9996821989207678e-01 -2.2861766502032950e+00 + -1.9454592969503732e+00 3.1555769206654616e-01 -2.7597476538076968e+00 + -2.3199839394657782e+00 2.9963929070237993e-01 -3.2280873611681784e+00 + -2.6987466323780316e+00 2.3472716253326764e-01 -3.6844759894626842e+00 + -3.0835784474698982e+00 1.0356462081027695e-01 -4.1222770581439185e+00 + -3.4702313264443108e+00 -1.1018920286814460e-01 -4.5327132262859262e+00 + -3.8464480265560788e+00 -4.1676507646069982e-01 -4.9015969258868024e+00 + -4.1982540353901427e+00 -8.1418220933241892e-01 -5.2116369444782737e+00 + -4.5161669440612338e+00 -1.2897753171815276e+00 -5.4545419269694237e+00 + -4.7961210051054044e+00 -1.8284476233625127e+00 -5.6357617293826472e+00 + -5.0375378313789039e+00 -2.4144027339646992e+00 -5.7687225139040192e+00 + -5.2458061154716935e+00 -3.0310502136685251e+00 -5.8647284160468995e+00 + -5.4266692395619982e+00 -3.6609582811750498e+00 -5.9285919460914887e+00 + -5.5758213403687336e+00 -4.2867588974164610e+00 -5.9621154048059850e+00 + -5.6881127770252391e+00 -4.8969666450029372e+00 -5.9723080399046573e+00 + -5.8702555564394352e+00 -5.5186423775101456e+00 -6.0398356174618044e+00 + id 13654 + loc 6.3484472036361694e-01 5.5118024349212646e-02 403 + blend 0.0000000000000000e+00 + interp 4.6055935509606427e-01:3.0503692033146701e-01:5.8172633063596657e-01:3.0634205592076991e-01:1.1345898469455373e+00:3.3905717414467496e-01:1.8894183490026610e+00:3.3145139256099648e-01:2.4266404257725043e+00:3.0705393954759674e-01:3.0000143482336696e+00:4.6055474950251335e-01:3.8713544764975891e+00 + CVs 20 + -4.9878881526482816e-02 2.8343957362024863e-01 2.3902372597573698e-01 + -6.7457262579598748e-02 5.5421494916568603e-01 4.6485237252349115e-01 + -7.3173923736507107e-02 8.2452619725453680e-01 6.8862234052674554e-01 + -7.7542117428311463e-02 1.0909944790583135e+00 9.1955063941880755e-01 + -8.4993563102083503e-02 1.3397338930127447e+00 1.1659909290793091e+00 + -9.2847104123938595e-02 1.5601299306803080e+00 1.4270683557714960e+00 + -8.7210459413498809e-02 1.7560350589761538e+00 1.6934041817588141e+00 + -5.2033352658898080e-02 1.9374623450572626e+00 1.9577920902626789e+00 + 2.9727143442361714e-02 2.1065055904445926e+00 2.2190769374197550e+00 + 1.8067101420245080e-01 2.2563484659810782e+00 2.4749122688164564e+00 + 4.2175344109387747e-01 2.3807356165018931e+00 2.7145885069374547e+00 + 7.6792065674148524e-01 2.4702287061676760e+00 2.9280560749703843e+00 + 1.2082541471676673e+00 2.5040205895801648e+00 3.1198205939181252e+00 + 1.7008263773632284e+00 2.4655688703662593e+00 3.2975722986671281e+00 + 2.2209042238516687e+00 2.3487408917354959e+00 3.4489279396033168e+00 + 2.7841633244115807e+00 2.1408921768020592e+00 3.5702139651448381e+00 + 3.3838255173222120e+00 1.8635612017469678e+00 3.7388971521359804e+00 + 3.9328526107543778e+00 1.6169261571557287e+00 4.0517582094525988e+00 + 4.3363669910249580e+00 1.4874874489365084e+00 4.4560484493635704e+00 + id 13655 + loc 5.4883873462677002e-01 8.3853340148925781e-01 380 + blend 0.0000000000000000e+00 + interp 4.6694723668363264e-01:3.7302906681777870e-01:1.2585002898375386e-03:4.1711704386401705e-01:4.9995779278862262e-01:3.6377617922326905e-01:1.3666728182998962e+00:3.8820555652107891e-01:2.0025466520436539e+00:4.1630766207785080e-01:2.5854272167184043e+00:4.6694256721126581e-01:3.1601377829352431e+00 + CVs 20 + -3.3646360210848003e-01 2.3347486044354254e-01 -5.6558271782439251e-01 + -6.1311083946302436e-01 3.9078045701327724e-01 -9.8195277389050317e-01 + -8.6141592943964329e-01 5.1931527415586676e-01 -1.3613316852810529e+00 + -1.0983713966685729e+00 6.4293974995212144e-01 -1.7491106742039362e+00 + -1.3281166827941495e+00 7.6602271493343121e-01 -2.1444062118229272e+00 + -1.5540733738781656e+00 8.9292009132201799e-01 -2.5497610734025851e+00 + -1.7888063049657916e+00 1.0188616985928594e+00 -2.9660229575811754e+00 + -2.0457764528977789e+00 1.1304147637483237e+00 -3.3937476998832952e+00 + -2.3351538580762394e+00 1.2066884241058757e+00 -3.8469501386468044e+00 + -2.6611625858100858e+00 1.2185207726996468e+00 -4.3380242561480440e+00 + -3.0246778752824173e+00 1.1338495071845813e+00 -4.8597451785698373e+00 + -3.4179374622599150e+00 9.1686934140298915e-01 -5.3883384818741487e+00 + -3.8088144114411469e+00 5.3653163912763802e-01 -5.8745344501676957e+00 + -4.1563488254349510e+00 1.3882184092991245e-02 -6.2482768064688168e+00 + -4.4530671597496916e+00 -5.6829734918403663e-01 -6.4958322034082041e+00 + -4.7185146671792282e+00 -1.1169866628324590e+00 -6.6702304867463553e+00 + -4.9724769625986847e+00 -1.5390265728433583e+00 -6.8023450909456233e+00 + -5.2287690763091641e+00 -1.8072054788839491e+00 -6.8889038704252954e+00 + -5.5539572186587511e+00 -2.2121170220343553e+00 -7.0520404210250964e+00 + id 13656 + loc 2.3052716255187988e-01 2.2341725230216980e-01 376 + blend 0.0000000000000000e+00 + interp 4.8392975096249291e-01:3.0811476048522368e-01:1.3068969806173458e-01:3.0483497448201580e-01:1.0204712480292513e+00:3.2804143225512244e-01:1.9995648258724719e+00:4.8392491166498330e-01:2.5338285251539725e+00:2.9137425946023576e-01:3.0228041051591958e+00:4.0308952683867255e-01:3.8128624974162095e+00 + CVs 20 + 5.3955208131820731e-01 4.4815012765869072e-01 3.2625646996686020e-01 + 1.0449971519387025e+00 8.0795475744271394e-01 5.3920676753725094e-01 + 1.6023300303829522e+00 1.0365308939004743e+00 6.2676218048566168e-01 + 2.1646136133825968e+00 1.1604658465958746e+00 6.1755302217422181e-01 + 2.6795413404917685e+00 1.2613399627654063e+00 5.6260705513440945e-01 + 3.1529456560766289e+00 1.3874945553961280e+00 5.0787425582826629e-01 + 3.6168014647279136e+00 1.5397971809400106e+00 4.9419903677640709e-01 + 4.0872770008470498e+00 1.6989597754904218e+00 5.5178611925075294e-01 + 4.5657228433549193e+00 1.8510840168575762e+00 6.9833367360490761e-01 + 5.0598581148694057e+00 1.9835499380384705e+00 9.5247195588941813e-01 + 5.5684366620009866e+00 2.0679356771226676e+00 1.3116214553205394e+00 + 6.0801978203045239e+00 2.0673918887668585e+00 1.7491684703718429e+00 + 6.5713645141792094e+00 1.9451373124564169e+00 2.2301945804527250e+00 + 7.0096572971290430e+00 1.6764394076340234e+00 2.7148183874295131e+00 + 7.3551065460560299e+00 1.2681455382004838e+00 3.1782024939952733e+00 + 7.5444141568822616e+00 7.8025360939053012e-01 3.5776729258462519e+00 + 7.5833047581635862e+00 3.4536393643731600e-01 3.8468734377752392e+00 + 7.5991802103638273e+00 -1.5829918912591889e-02 3.9465558000679279e+00 + 7.8128593074091643e+00 -5.4632426428468639e-01 3.7199603378602193e+00 + id 13657 + loc 8.8149768114089966e-01 4.0912893414497375e-01 396 + blend 0.0000000000000000e+00 + interp 4.3149932299425708e-01:3.0447654062778962e-01:1.4979435961382681e-01:3.1830119787766276e-01:1.0064282300066534e+00:4.2150666064302067e-01:1.4124819344395361e+00:3.2224796482553891e-01:2.0035070947294860e+00:4.3149500800102714e-01:2.7312215167864933e+00:3.2617354263255094e-01:3.0411801467881401e+00:4.2819004104927044e-01:3.7726563927564651e+00 + CVs 20 + -6.7570070092039702e-01 3.2849573400241167e-02 3.8769867399332003e-01 + -1.1170597741007753e+00 -5.5739962050139313e-02 6.6370187438841999e-01 + -1.5025620544763059e+00 -1.7996115047275474e-01 9.1824913162073207e-01 + -1.8885302937946342e+00 -2.8479981037547153e-01 1.1704318843057449e+00 + -2.2644275801379425e+00 -3.6040205059660835e-01 1.4205314191035237e+00 + -2.6250238659776901e+00 -4.0276859858702241e-01 1.6733656833140971e+00 + -2.9656208989282087e+00 -4.1157652052933547e-01 1.9365697668149124e+00 + -3.2835783575513715e+00 -3.9124408431523938e-01 2.2179096218333454e+00 + -3.5847658859601923e+00 -3.5545156733551408e-01 2.5200758604858633e+00 + -3.8784836410484687e+00 -3.2558899675507202e-01 2.8382671257141996e+00 + -4.1633178323512743e+00 -3.2398823299502455e-01 3.1732004118637480e+00 + -4.4239090461169743e+00 -3.6768814371144765e-01 3.5430769826185289e+00 + -4.6423078270262534e+00 -4.7260619434811924e-01 3.9572033853910336e+00 + -4.8068944587474753e+00 -6.4992086985612008e-01 4.3922031816436826e+00 + -4.9116338402941269e+00 -8.9369163383296613e-01 4.8154939796735130e+00 + -4.9524895110181530e+00 -1.1888098290169273e+00 5.2084920387514480e+00 + -4.9248336419383820e+00 -1.5225096788276267e+00 5.5626468249946930e+00 + -4.8216069174935470e+00 -1.8863195839918883e+00 5.8598555459556803e+00 + -4.5813464982274930e+00 -2.3229477650252783e+00 6.0372456638836427e+00 + id 13658 + loc 4.0703573822975159e-01 2.3913776874542236e-01 415 + blend 0.0000000000000000e+00 + interp 5.1177720181618391e-01:3.6520188228092576e-01:4.3310652911674241e-01:4.9068523063147740e-01:9.9678272136970869e-01:4.3850521750763405e-01:1.4300855310301479e+00:4.8358524204907560e-01:1.9824360415315891e+00:3.6765912228115116e-01:2.1948938133402596e+00:3.0694527222790025e-01:3.1269502895421937e+00:5.1177208404416574e-01:3.9866442550174397e+00 + CVs 20 + 7.4366160432690648e-02 2.3227420104625235e-01 -9.7217323968631308e-02 + 1.0100877435199579e-01 4.2783825578693768e-01 -1.6060434157527270e-01 + 1.2664875363028927e-01 6.2978736771299626e-01 -2.3023133943402918e-01 + 1.8755937553513174e-01 8.5437656646361937e-01 -3.1835181174630084e-01 + 2.8888704367556878e-01 1.0970895332490112e+00 -4.2583541605009506e-01 + 4.3456651763592585e-01 1.3509074609707352e+00 -5.5135387953054815e-01 + 6.2797879231925491e-01 1.6075520071182232e+00 -6.8993701149897957e-01 + 8.6985149792986394e-01 1.8589756059721778e+00 -8.3472024597825989e-01 + 1.1569933216981014e+00 2.0978550001087211e+00 -9.7916532679824719e-01 + 1.4839855301987792e+00 2.3186812304765603e+00 -1.1183594649038637e+00 + 1.8541377038920137e+00 2.5182822129658371e+00 -1.2534450547240659e+00 + 2.2889385533841886e+00 2.6913421730246672e+00 -1.4046445822921814e+00 + 2.7993917942273905e+00 2.8223393989174035e+00 -1.6224448275902257e+00 + 3.3339040438330145e+00 2.8915929601758372e+00 -1.9583526732132592e+00 + 3.8107867783883078e+00 2.8937400782461276e+00 -2.4121869513104426e+00 + 4.1872022497021497e+00 2.8328914173732969e+00 -2.9552950115555365e+00 + 4.4390907828725359e+00 2.7178698656283009e+00 -3.5596527658379813e+00 + 4.5444941448116838e+00 2.5740473340902237e+00 -4.1794086693788799e+00 + 4.5807161243904240e+00 2.5384115126695805e+00 -4.5148589913959736e+00 + id 13659 + loc 4.9904000759124756e-01 9.8189854621887207e-01 393 + blend 0.0000000000000000e+00 + interp 4.8291122119848917e-01:3.0198786317069753e-01:6.9456011064688461e-02:2.8155849363397412e-01:9.2501403875376598e-01:3.6709759807857678e-01:1.8317480669176689e+00:2.7677169217269698e-01:2.1123351183767487e+00:4.0720608629608729e-01:2.7091007589855360e+00:4.8290639208627723e-01:2.9999479054414842e+00:4.1102784714040180e-01:3.3221354959114726e+00 + CVs 20 + -1.9551122313440811e-01 2.8978595811090818e-01 -2.0689088105485867e-01 + -3.8857267949619190e-01 5.8980158180897602e-01 -4.1810040150903560e-01 + -5.5546567223333509e-01 9.0410740007290979e-01 -6.5631780453509092e-01 + -6.9503551772164052e-01 1.2344538033601054e+00 -9.2579706660172756e-01 + -8.2985523859892352e-01 1.5853866040163904e+00 -1.2161690906789895e+00 + -9.8773199242072507e-01 1.9581226345498077e+00 -1.5142442139922516e+00 + -1.1972512719165209e+00 2.3455113669302063e+00 -1.8062783360596666e+00 + -1.4839911914486965e+00 2.7234996234075037e+00 -2.0790117467620499e+00 + -1.8483277249420973e+00 3.0476994858850111e+00 -2.3204627003811185e+00 + -2.2479991519412001e+00 3.2864298254634088e+00 -2.5292796182062638e+00 + -2.6668201649204928e+00 3.4453005503896170e+00 -2.7384023933790917e+00 + -3.1491876527265159e+00 3.5167942012697226e+00 -2.9926501822665035e+00 + -3.7050658256933136e+00 3.4626406550692690e+00 -3.2740769773735052e+00 + -4.2853014318362899e+00 3.2627588132206822e+00 -3.5306111348506048e+00 + -4.8415028377185223e+00 2.9265141954741525e+00 -3.7410139473706789e+00 + -5.3500082797780708e+00 2.4874722247857903e+00 -3.8778926369043667e+00 + -5.7919023315167903e+00 2.0265655190794201e+00 -3.8771665735815031e+00 + -6.1516597807682949e+00 1.6118261928563979e+00 -3.7345393604661066e+00 + -6.4770770303509124e+00 1.1608777271395434e+00 -3.5745124254231260e+00 + id 13660 + loc 6.0776835680007935e-01 6.2157750129699707e-01 400 + blend 0.0000000000000000e+00 + interp 4.8984298006798105e-01:3.6168578921872985e-01:2.9192778723554302e-01:2.5014628110164427e-01:1.1053493128707990e+00:4.0475686183085324e-01:1.7934543552371427e+00:4.8983808163818038e-01:2.2751056717290949e+00:4.5677836365098196e-01:2.8969565109765538e+00:4.0381781997593813e-01:3.2213211718275199e+00:3.6655895296621382e-01:3.9427692184583192e+00 + CVs 20 + -1.0730568573004304e-01 1.8832331737584768e-01 -2.6725641095046471e-01 + -1.9629722007894948e-01 3.7438735983599364e-01 -5.6489439944233655e-01 + -2.5947261597673577e-01 5.4356595374164618e-01 -8.8530642066658727e-01 + -2.9599481010579670e-01 6.9213578094718686e-01 -1.2219696274558856e+00 + -3.0997714986165947e-01 8.2521660200167879e-01 -1.5709914669573379e+00 + -3.0560586844117477e-01 9.5082793766478835e-01 -1.9278343414572960e+00 + -2.8721947261080971e-01 1.0689278765306733e+00 -2.2886660881230232e+00 + -2.5935964260401329e-01 1.1641092196553042e+00 -2.6506896835517693e+00 + -2.2456315055393344e-01 1.2160578040146519e+00 -3.0095242835706006e+00 + -1.8222053604046884e-01 1.2110095735569777e+00 -3.3564062785408444e+00 + -1.3124672920601027e-01 1.1402511168085816e+00 -3.6784832151747473e+00 + -7.2083067598651074e-02 9.9818545931738845e-01 -3.9572645797384585e+00 + -5.1885806857894234e-03 7.8877836970587611e-01 -4.1674649146153442e+00 + 6.8702680254612541e-02 5.3114809476688762e-01 -4.2830633308428725e+00 + 1.4164539382565422e-01 2.5440200318257755e-01 -4.2855684693411797e+00 + 1.9308832041162199e-01 -8.9099204619069727e-03 -4.1720496855228033e+00 + 2.0420414823317290e-01 -2.2947708645826803e-01 -3.9747032769911792e+00 + 1.8815376443074294e-01 -4.2523909397917570e-01 -3.7815403090977497e+00 + 2.2192007533299335e-01 -7.5129661824399618e-01 -3.7636581805313831e+00 + id 13661 + loc 6.8523740768432617e-01 4.4387839734554291e-02 1080 + blend 0.0000000000000000e+00 + interp 5.6579855494200437e-01:3.5969320079469491e-01:8.6301496834333524e-02:2.9321678081454078e-01:9.3441739688345249e-01:5.6579289695645496e-01:1.6496016228416504e+00:5.0919957127397564e-01:1.9999484644164245e+00:5.1693814197519961e-01:2.3582051183221231e+00:4.1942271899337596e-01:3.0001984789238318e+00:2.3982940192912730e-01:3.4288615918974679e+00 + CVs 20 + -1.3046036882638398e-01 4.5204358790732779e-01 -3.6855557621118884e-01 + -2.6567102518577107e-01 7.9840188027088388e-01 -5.7921153324421304e-01 + -4.1088728233615257e-01 1.1205172140474584e+00 -7.5480088718538951e-01 + -5.6522090752830745e-01 1.4391342388219828e+00 -9.3938535514685351e-01 + -7.3263795907020746e-01 1.7442850706340676e+00 -1.1223589764212081e+00 + -9.1668820449218036e-01 2.0240030369607878e+00 -1.2859340374987058e+00 + -1.1214661379730515e+00 2.2648816550585047e+00 -1.4063586050748580e+00 + -1.3489475793340446e+00 2.4491209801421912e+00 -1.4623731332900352e+00 + -1.5917945945456402e+00 2.5503773782967829e+00 -1.4408335632945701e+00 + -1.8254682976541905e+00 2.5443274224361678e+00 -1.3485896617939970e+00 + -2.0275874484803502e+00 2.4384083052508725e+00 -1.2181742772109079e+00 + -2.2053267370384204e+00 2.2583343108572382e+00 -1.0753846494115094e+00 + -2.3751865799307268e+00 2.0149051372705737e+00 -9.2938772106257150e-01 + -2.5466472831495870e+00 1.7090221235753553e+00 -7.9212971032332735e-01 + -2.7206994063987904e+00 1.3396131932130819e+00 -7.0320098929819852e-01 + -2.8820509112494812e+00 9.2332266798383933e-01 -7.6093890759938432e-01 + -3.0076738832760763e+00 5.3967064773797913e-01 -1.0326007370898085e+00 + -3.1156010558499294e+00 1.9312445780890292e-01 -1.3839214335076593e+00 + -3.2732332517949767e+00 -2.8327892919851844e-01 -1.5930840380741129e+00 + id 13662 + loc 2.7200452983379364e-02 2.1240903064608574e-02 402 + blend 0.0000000000000000e+00 + interp 5.5333343897705989e-01:2.5376474090513207e-01:4.2001112535943586e-01:5.5332790564267009e-01:1.1715943001167630e+00:4.0623219703362229e-01:1.8487361358195100e+00:2.6155744839324341e-01:2.2578699231031147e+00:4.3485301407274041e-01:2.9921994536496963e+00:5.2124220338541571e-01:3.3415176128807436e+00:4.6097999512162452e-01:3.9633907380191378e+00 + CVs 20 + -2.1376600130662179e-01 3.6321720616170805e-01 1.6741148402466541e-01 + -4.3622662770992393e-01 7.0908060334590650e-01 3.4433330649148008e-01 + -7.1215164694871524e-01 1.0277131197802358e+00 5.2151458245967419e-01 + -1.0537389386878959e+00 1.2963292467886369e+00 7.0207080293317536e-01 + -1.4486774910971587e+00 1.4861267855105154e+00 8.9418312699121771e-01 + -1.8744393345061403e+00 1.5742518623666095e+00 1.1027499482841252e+00 + -2.3047155405127526e+00 1.5519536704153574e+00 1.3302791219527710e+00 + -2.7158782732034532e+00 1.4295345841754969e+00 1.5791569111999146e+00 + -3.0880118816166351e+00 1.2238704871569899e+00 1.8462468273746246e+00 + -3.3955595205697597e+00 9.4395215693497658e-01 2.1141019965792052e+00 + -3.6199243147313283e+00 6.0875234727614425e-01 2.3697205961505632e+00 + -3.7733949645314486e+00 2.5855066799979975e-01 2.6366190749649374e+00 + -3.8718931700629677e+00 -6.3489295575025917e-02 2.9460365128393944e+00 + -3.9067462617649347e+00 -3.2581301001929541e-01 3.2854186993184977e+00 + -3.8816483876074259e+00 -5.2254017559644228e-01 3.6261482738294037e+00 + -3.8354755624414634e+00 -6.4863439528260303e-01 3.9831435503310884e+00 + -3.7975260472202845e+00 -6.4802020588230402e-01 4.3619198344929195e+00 + -3.7613095997950792e+00 -4.9959290046981469e-01 4.6865454168183360e+00 + -3.7659267993382959e+00 -3.9581712220567428e-01 5.0942237096322103e+00 + id 13663 + loc 1.6493457555770874e-01 2.6514989137649536e-01 375 + blend 0.0000000000000000e+00 + interp 5.2228513008028099e-01:3.1458363419450841e-01:4.2830968382588841e-01:5.2227990722898021e-01:1.2108246549959509e+00:4.8682453140419207e-01:1.9928404405785978e+00:4.2152293877213126e-01:2.2334714076561983e+00:5.1167360145166452e-01:2.9952982369116490e+00:3.5289553646076410e-01:3.5768061940043063e+00 + CVs 20 + -1.1832047003491619e-01 4.1054580687567771e-01 5.5573077259005033e-01 + -1.6120059412954901e-01 7.5220103424049511e-01 1.0667043506568472e+00 + -1.6057670696903029e-01 1.0376329691415140e+00 1.6186581990633453e+00 + -1.7307980850234048e-01 1.3049687368836946e+00 2.2096532101848245e+00 + -3.1585918996098794e-01 1.6071752852969285e+00 2.7537415861642964e+00 + -7.3551400217159113e-01 1.9415695029942899e+00 3.0786407974367962e+00 + -1.3564668905950727e+00 2.1704067697396106e+00 2.9987046152533225e+00 + -2.0012413865076923e+00 2.1978966130028925e+00 2.5540199827103280e+00 + -2.5844424462815723e+00 1.9743940147012231e+00 1.8488652696068226e+00 + -3.0329547203684446e+00 1.4623591941170482e+00 1.0273295068805488e+00 + -3.2963665373133733e+00 7.1211918710009192e-01 2.6001393338470558e-01 + -3.3878428487239272e+00 -1.0838899417612205e-01 -3.8028632163028958e-01 + -3.3882796298323643e+00 -7.9492689368849057e-01 -9.6672271761593076e-01 + -3.4138926699219527e+00 -1.1822318786351202e+00 -1.5784180948038440e+00 + -3.5114401563049324e+00 -1.2551640031327045e+00 -2.1930556684314317e+00 + -3.6304220364481896e+00 -1.0914822019007513e+00 -2.8572432195377999e+00 + -3.7765345213269592e+00 -6.1252356723771839e-01 -3.6027532314974864e+00 + -4.0142732017083054e+00 2.0822008413646054e-01 -4.3316682700187545e+00 + -4.3516323387636051e+00 1.2065027714320486e+00 -5.0397031885270902e+00 + id 13664 + loc 8.6642873287200928e-01 4.3398278951644897e-01 373 + blend 0.0000000000000000e+00 + interp 4.1003166097317484e-01:3.9810015839145541e-01:7.8157242831283780e-03:3.2410506694911090e-01:9.8620909301925308e-01:4.1002756065656515e-01:1.6746678405809010e+00:3.0588186083561503e-01:2.1908352696267048e+00:3.4137537635283077e-01:2.8550158210027994e+00:2.8336622894135877e-01:3.1723875347653703e+00 + CVs 20 + 3.5206534900542075e-01 3.5098106385120625e-01 1.3570551225295457e-01 + 6.7035561017574596e-01 6.3703126579409408e-01 2.5668300620926954e-01 + 9.8902551972919550e-01 8.7312857523926757e-01 3.7512728246220894e-01 + 1.3177522981419010e+00 1.0814916852298744e+00 5.0020003066908691e-01 + 1.6421162369587159e+00 1.2856900737745209e+00 6.3658136581676861e-01 + 1.9483917370429729e+00 1.4915559832897514e+00 7.9390188569709741e-01 + 2.2308758982719517e+00 1.6788127759498390e+00 9.9993021855804765e-01 + 2.4782731082245126e+00 1.8174826783522868e+00 1.2826965808640112e+00 + 2.6698794186373727e+00 1.8838654643977057e+00 1.6418340087378045e+00 + 2.7900154139709405e+00 1.8666650774932487e+00 2.0523075602414327e+00 + 2.8336430941014235e+00 1.7706752350377213e+00 2.4671750959232845e+00 + 2.8113446284297190e+00 1.6119639825513579e+00 2.8199850895268561e+00 + 2.7450913201335410e+00 1.3966845946470701e+00 3.0825924638994580e+00 + 2.6638118795244785e+00 1.1073481486713337e+00 3.3048968316376208e+00 + 2.6427054887300745e+00 7.4941447929929050e-01 3.5528762115682238e+00 + 2.7880148018500703e+00 3.9800082789946911e-01 3.8428240524825759e+00 + 3.1436637323510759e+00 1.7619777830430206e-01 4.1201644162789135e+00 + 3.6041275824717331e+00 1.3732940035974472e-01 4.3210658153759720e+00 + 4.0014494712671365e+00 8.9194504222604110e-02 4.5613202346939481e+00 + id 13665 + loc 5.5049657821655273e-01 4.0795075893402100e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7609612500486772e-01:3.7609236404361768e-01:3.3038936594420087e-01:2.8256663805370286e-01:9.5580906826715573e-01:2.6134359933926249e-01:1.9655115086763768e+00:2.6467537428957560e-01:2.9102967429358060e+00:2.6673710635051234e-01:3.7790408512819251e+00 + CVs 20 + -9.3043141024447523e-02 2.6175449724884392e-01 2.0164445073054388e-01 + -2.0644715454764584e-01 5.1148487896919759e-01 4.0918792747666233e-01 + -3.2253811485332656e-01 7.5691959357130567e-01 6.1527261862709470e-01 + -4.3031649190629156e-01 1.0014606893239060e+00 8.1304846961045929e-01 + -5.2617297224224302e-01 1.2471115822889505e+00 9.9703303066641480e-01 + -6.0608577556899290e-01 1.4938817431411207e+00 1.1629638694731024e+00 + -6.7018585579437584e-01 1.7417070401989889e+00 1.3194769308716969e+00 + -7.2014837445793534e-01 1.9917806388074903e+00 1.4798637816454696e+00 + -7.5944535253928080e-01 2.2491715594556223e+00 1.6564132494230623e+00 + -8.0275464181109468e-01 2.5027544442219432e+00 1.8752198915746374e+00 + -8.6899598674832401e-01 2.7040964982828326e+00 2.1487857981535701e+00 + -9.6209541474317406e-01 2.8173758356790874e+00 2.4447328432591564e+00 + -1.0882351822183340e+00 2.8641573857445772e+00 2.7261587406053960e+00 + -1.2819912851619129e+00 2.8893628946757817e+00 2.9863442505097684e+00 + -1.5757285455844625e+00 2.8992979497415434e+00 3.2339692831504459e+00 + -1.9550682973792224e+00 2.8469944252274821e+00 3.4610173334542171e+00 + -2.3792835400922190e+00 2.6896370032260020e+00 3.6660458509542844e+00 + -2.7538090559845445e+00 2.4669150664186219e+00 3.9115275292336178e+00 + -2.7220429254770853e+00 2.4501818439815470e+00 4.1869392983065419e+00 + id 13666 + loc 6.1549419164657593e-01 4.5985504984855652e-02 1069 + blend 0.0000000000000000e+00 + interp 4.5388335707420635e-01:3.7190339328653571e-01:1.0091602290503987e-03:4.2860658093967569e-01:7.8354001346148883e-01:3.7323155353763032e-01:1.1023548806547649e+00:4.4645123240455548e-01:1.8180925985817891e+00:3.8379917056650464e-01:2.0625427701037973e+00:4.5387881824063564e-01:2.8656241784788969e+00:2.6571985571102913e-01:3.2029189565214207e+00 + CVs 20 + 1.2918944476230054e-01 3.7063575074302202e-01 2.1592536611793040e-01 + 1.9222486479006629e-01 7.2105410020124294e-01 4.3187107437913519e-01 + 1.9444624852958758e-01 1.0632052234554725e+00 6.2726708578205059e-01 + 1.1296996188837727e-01 1.4003951874781364e+00 7.9135907600353150e-01 + -1.3206482399805930e-02 1.7091650375519922e+00 8.9676040135460999e-01 + -7.8929172960682581e-02 1.9809736266274720e+00 9.3791958961459243e-01 + -3.5610747871672288e-02 2.2085888172511670e+00 9.3716049579943483e-01 + 7.3062577227336778e-02 2.4054762134305139e+00 9.3070823181140361e-01 + 2.1893591491007913e-01 2.5993216094580172e+00 9.5262231534196073e-01 + 4.1973696163359997e-01 2.7655574924810162e+00 1.0364328127803613e+00 + 6.8120786755594920e-01 2.8234648631528052e+00 1.1974980359900882e+00 + 9.5116639917463952e-01 2.7333008180803855e+00 1.3848842496348177e+00 + 1.1968061104926508e+00 2.5535716362245267e+00 1.5571778165785402e+00 + 1.4307232401434304e+00 2.3137771630572082e+00 1.7389279773497677e+00 + 1.6511461844666424e+00 2.0040635057305023e+00 1.9481520090946018e+00 + 1.8306753870654477e+00 1.6043701159517529e+00 2.1571671957651741e+00 + 1.9240617075825837e+00 1.0925138659913565e+00 2.2997420790673910e+00 + 1.8940008756504136e+00 5.0192683825920681e-01 2.3134090931200149e+00 + 1.9920853760640753e+00 1.5393064321516992e-01 2.3940406778839929e+00 + id 13667 + loc 9.2515903711318970e-01 1.4203469455242157e-01 378 + blend 0.0000000000000000e+00 + interp 6.4791856003036430e-01:6.4791208084476404e-01:6.5411331702500619e-01:5.3939760779946000e-01:1.0395837742157612e+00:3.1530284979815554e-01:1.8380129549721338e+00:3.6475418054018333e-01:2.4556311124617323e+00:3.8738487778407804e-01:3.1296171456058577e+00:4.5333981268732715e-01:3.9877768326193417e+00 + CVs 20 + -3.1744873858435202e-01 3.6223141711287393e-01 1.9273459633144800e-02 + -6.4346281883929812e-01 7.0702513915299403e-01 3.1699752165682049e-02 + -9.7946337614737211e-01 1.0270818767343024e+00 5.0286539004472414e-02 + -1.3153660008400960e+00 1.3247517049253190e+00 6.6932282717272945e-02 + -1.6450171536581160e+00 1.5983004966620218e+00 6.6306949711132268e-02 + -1.9727334539696777e+00 1.8361351823053016e+00 3.9296326529238645e-02 + -2.3013528368305849e+00 2.0244090444118159e+00 -1.5192819960572146e-02 + -2.6262662554870273e+00 2.1557523637039657e+00 -9.1950318882642101e-02 + -2.9400210866755123e+00 2.2304887897541432e+00 -1.8372538433648272e-01 + -3.2332682571856175e+00 2.2529933175992563e+00 -2.8438241605375419e-01 + -3.4922864337895385e+00 2.2313311754378766e+00 -3.8703348404004334e-01 + -3.7069739578611776e+00 2.1793396615674903e+00 -4.8528213467500675e-01 + -3.8829792079970225e+00 2.0982929592930826e+00 -5.8204591106146730e-01 + -4.0287157561613638e+00 1.9510424671579152e+00 -6.8273187928301693e-01 + -4.1433165033472337e+00 1.7035977609508193e+00 -7.8950545382422233e-01 + -4.2429264300255829e+00 1.3612510506485132e+00 -9.2395981518173009e-01 + -4.3705026258413247e+00 9.5673832262123826e-01 -1.1104668808262768e+00 + -4.5601998519676519e+00 5.5849169523603925e-01 -1.3095507915817413e+00 + -4.7431126787163764e+00 2.9598591800286034e-01 -1.4268179453386878e+00 + id 13668 + loc 6.6633033752441406e-01 9.7559458017349243e-01 409 + blend 0.0000000000000000e+00 + interp 2.9980902319525021e-01:2.9980602510501825e-01:4.4290993299188475e-01:2.9345529799385550e-01:1.7919314891840994e+00:2.6410986157544619e-01:2.9870247675358135e+00:2.8790886352430817e-01:3.6810997102325880e+00 + CVs 20 + 4.8673952644473562e-01 1.9928976247859448e-01 -1.1858203070930423e-01 + 8.6793743324669914e-01 3.4360802735486223e-01 -2.4228828212134529e-01 + 1.2296948373181107e+00 4.6580938905771008e-01 -3.6395114207864987e-01 + 1.6133263036574585e+00 5.7747283463444021e-01 -4.7943844847680550e-01 + 2.0155046017207532e+00 6.6543017043972397e-01 -5.8810065706924042e-01 + 2.4291484498625868e+00 7.1828839588229854e-01 -6.9127295826426449e-01 + 2.8469959160496092e+00 7.2866901977849630e-01 -7.9161022361633759e-01 + 3.2606444479700025e+00 6.9057297682561580e-01 -8.9068723845214848e-01 + 3.6563383117078505e+00 5.9877408118668596e-01 -9.8758872591367175e-01 + 4.0126712615697047e+00 4.5505655127492473e-01 -1.0814899949905121e+00 + 4.3065547497423289e+00 2.7220891480391107e-01 -1.1743858571945318e+00 + 4.5269824055053078e+00 6.6832911940727158e-02 -1.2696102209374107e+00 + 4.6794279506191776e+00 -1.4817447362546066e-01 -1.3680250121347233e+00 + 4.7774940217059498e+00 -3.6007363052173513e-01 -1.4666872370475754e+00 + 4.8386117292199078e+00 -5.5490631806704327e-01 -1.5632562772273308e+00 + 4.8837181849709799e+00 -7.2464888894098856e-01 -1.6613670141218555e+00 + 4.9310896605399686e+00 -8.7443019287566948e-01 -1.7666620380312783e+00 + 4.9851739257380672e+00 -1.0218040236495822e+00 -1.8735103854173563e+00 + 4.9808451255945965e+00 -1.2770304758081052e+00 -1.9813823888570252e+00 + id 13669 + loc 8.7714833021163940e-01 4.0555644780397415e-02 374 + blend 0.0000000000000000e+00 + interp 4.3557608259699232e-01:4.3557172683616635e-01:8.4377021589954526e-02:2.1266622016438480e-01:9.8693211344623288e-01:2.1230436256014779e-01:1.2515212857893483e+00:3.1229529973197101e-01:2.0079577825600574e+00:4.0768347379523434e-01:2.8721354572652529e+00:2.9449497796894247e-01:3.3092162315450855e+00 + CVs 20 + 8.9711286422587944e-01 3.9327239163015054e-01 3.9148777659067890e-01 + 1.5689673329492335e+00 5.9181583775763502e-01 5.6114197715601755e-01 + 2.1887532874210844e+00 6.7699523438852227e-01 6.0548398465691100e-01 + 2.8349017306334003e+00 7.1082189131299134e-01 5.8387428010524323e-01 + 3.5060683666095080e+00 7.2150653370153273e-01 5.3259301856322505e-01 + 4.1915283515280262e+00 7.1919508112812769e-01 4.9434132617975779e-01 + 4.8801351604637251e+00 6.9418134763187722e-01 5.0903262987655173e-01 + 5.5514327087016619e+00 6.2606464967936426e-01 6.0753431282901404e-01 + 6.1790605141070785e+00 5.0010088146372600e-01 8.0858148730522372e-01 + 6.7401768220987428e+00 3.0716555956491320e-01 1.1210251613541597e+00 + 7.2146364089942168e+00 3.7262733226916644e-02 1.5385563563712248e+00 + 7.5931277522922436e+00 -3.3282694589468731e-01 2.0354410941910848e+00 + 7.8687926590482844e+00 -8.4121855044573790e-01 2.5610787892540712e+00 + 8.0353122641838635e+00 -1.5107256047714310e+00 3.0490732538062613e+00 + 8.1213841061935543e+00 -2.3121776681149226e+00 3.4592705436292781e+00 + 8.2008644015189454e+00 -3.1798807467468171e+00 3.7946730076595743e+00 + 8.3490535098034897e+00 -4.0468992550926615e+00 4.0559869439996046e+00 + 8.5825283129803207e+00 -4.8553980329605304e+00 4.2311234160692912e+00 + 8.7674007563281400e+00 -5.5472207088655896e+00 4.3768131543488789e+00 + id 13670 + loc 6.7529082298278809e-01 8.7338489294052124e-01 412 + blend 0.0000000000000000e+00 + interp 4.3447366243863156e-01:3.7032082465627020e-01:2.2400464628748895e-02:4.3446931770200720e-01:7.7262815946517172e-01:3.5937655801817719e-01:1.5144971242298255e+00:3.7694310327219116e-01:2.0474586013329561e+00:3.0648891538862344e-01:2.8857669013424787e+00:2.9219126055679717e-01:3.6685199215608759e+00 + CVs 20 + 8.2083389627082504e-01 1.3129431085854709e-01 -2.0524383240818361e-01 + 1.3285617396383487e+00 1.2265683714880968e-01 -3.9370600570221981e-01 + 1.7466449237730854e+00 5.9180095887372830e-02 -5.7439188509609673e-01 + 2.1585487842964532e+00 -2.3566925463045119e-02 -7.4941786280670242e-01 + 2.5502119372966048e+00 -1.2447041228982159e-01 -9.1628274195198722e-01 + 2.9126307956174475e+00 -2.3830870832779882e-01 -1.0745254660462416e+00 + 3.2421881376449062e+00 -3.5691744010653348e-01 -1.2248897238742662e+00 + 3.5399913830002592e+00 -4.7185164449060557e-01 -1.3692336932590199e+00 + 3.8126187030446621e+00 -5.7663944228370934e-01 -1.5068168929016266e+00 + 4.0680426307619282e+00 -6.6613234570920565e-01 -1.6328225353830228e+00 + 4.3054368906508875e+00 -7.2301939527275150e-01 -1.7311314664273521e+00 + 4.5195308254239954e+00 -7.1284905993687520e-01 -1.7691657959631444e+00 + 4.7349852714969023e+00 -6.3764204738527486e-01 -1.7295800417741110e+00 + 4.9946375230808453e+00 -5.6704841063507794e-01 -1.6465554347564211e+00 + 5.3070154081365271e+00 -5.5183767799991301e-01 -1.5586037685644232e+00 + 5.6569617166535409e+00 -5.8944266739926299e-01 -1.4630419674180206e+00 + 6.0296048641029092e+00 -6.7341854836751658e-01 -1.3508330941474100e+00 + 6.4058917802575088e+00 -8.1023479523478859e-01 -1.2448189599532122e+00 + 6.6374859285106167e+00 -1.0086621481502565e+00 -1.2815025620188030e+00 + id 13671 + loc 5.6116050481796265e-01 6.3994318246841431e-01 403 + blend 0.0000000000000000e+00 + interp 4.6804333558188072e-01:3.1576768094330737e-01:2.1709207336101766e-01:4.6803865514852494e-01:9.9133206599729551e-01:2.8940647285871335e-01:1.7638055073172498e+00:2.6711781446911387e-01:2.2786820309600486e+00:2.9188718629216126e-01:2.9926461601550263e+00:2.6829376616371819e-01:3.6557252905597477e+00 + CVs 20 + 2.8655642080135386e-02 1.1770676194589209e-01 -1.7100750291189976e-01 + 4.1258245875822969e-02 2.3543171985162506e-01 -3.1244960802889932e-01 + 4.1087804052720917e-02 3.4693085575022348e-01 -4.3855750425819634e-01 + 2.6089265691229324e-02 4.5601761251454159e-01 -5.6056978098744092e-01 + -5.7067422855089367e-03 5.6083176521164546e-01 -6.7823960125468985e-01 + -5.4951916504262455e-02 6.5963081910953858e-01 -7.9089813527034414e-01 + -1.2109161754430214e-01 7.5080131177052256e-01 -8.9763277008781994e-01 + -2.0254090039368877e-01 8.3306841508476115e-01 -9.9762411273892337e-01 + -2.9723140619851179e-01 9.0592623046054799e-01 -1.0906607548217717e+00 + -4.0300026192289679e-01 9.6956861201952926e-01 -1.1770849910926557e+00 + -5.1790100551706630e-01 1.0244860899231136e+00 -1.2575096061882092e+00 + -6.4090978242173280e-01 1.0711066746749434e+00 -1.3326528858465279e+00 + -7.7248435258309245e-01 1.1095719282565069e+00 -1.4030273025270921e+00 + -9.1407068043016859e-01 1.1397115202880235e+00 -1.4683122738526011e+00 + -1.0672560046240951e+00 1.1607529769975851e+00 -1.5268462417183393e+00 + -1.2328852561258348e+00 1.1702389841072574e+00 -1.5757661179677271e+00 + -1.4080673030673387e+00 1.1656747580811790e+00 -1.6101733848338577e+00 + -1.5853722705407649e+00 1.1453972781265851e+00 -1.6249714347296971e+00 + -1.7511251405353228e+00 1.1015178455954615e+00 -1.6090414202986616e+00 + id 13672 + loc 6.9590753316879272e-01 6.4500999450683594e-01 380 + blend 0.0000000000000000e+00 + interp 4.6696472805856082e-01:4.2436398986476387e-01:6.6665866591789102e-01:3.9023048791721354e-01:1.2049859515885517e+00:3.6855132483198688e-01:2.0678892133962243e+00:4.6696005841128024e-01:2.9677758169385475e+00:2.8012404940918934e-01:3.1931791218633361e+00:3.5661286049878194e-01:3.9869822515601880e+00 + CVs 20 + -4.4295304654532192e-01 2.3291820462742571e-01 -5.6453554302535658e-01 + -8.3274506505543044e-01 3.7538083434870706e-01 -9.8006195734035095e-01 + -1.2125543738413254e+00 4.8068021311271381e-01 -1.3772985994895535e+00 + -1.5975609777624231e+00 5.7609789470515560e-01 -1.8147924029305853e+00 + -1.9787748775604577e+00 6.6116057246946980e-01 -2.2884313586024847e+00 + -2.3483532223340537e+00 7.3095408701165321e-01 -2.7900985305501935e+00 + -2.7026753545165763e+00 7.7578976012159195e-01 -3.3126899495734947e+00 + -3.0370235612728305e+00 7.8281409860423601e-01 -3.8512083821093350e+00 + -3.3434097946175432e+00 7.3703945675241900e-01 -4.3989845378659851e+00 + -3.6123965673703795e+00 6.2085154919027419e-01 -4.9443095654163551e+00 + -3.8376659715524335e+00 4.1649645931629165e-01 -5.4727307956588191e+00 + -4.0103866920964482e+00 1.1451368132999962e-01 -5.9607123986551205e+00 + -4.1157926297739742e+00 -2.6551938071507131e-01 -6.3737364449304401e+00 + -4.1474256975540342e+00 -6.7417202038366497e-01 -6.6934707786324985e+00 + -4.1116749660523508e+00 -1.0565901115597116e+00 -6.9285009412779850e+00 + -4.0240414899174111e+00 -1.3919736805894165e+00 -7.1033870290663828e+00 + -3.9021566409054218e+00 -1.7014737297243450e+00 -7.2480942495337022e+00 + -3.7747713675291390e+00 -2.0235370134643524e+00 -7.3981545326432760e+00 + -3.7633369103949423e+00 -2.2767705537903886e+00 -7.5275720930308871e+00 + id 13673 + loc 7.3512917757034302e-01 4.6624380350112915e-01 401 + blend 0.0000000000000000e+00 + interp 3.8401907446498434e-01:3.6737449331115207e-01:2.8396882404463919e-02:3.3762892105608772e-01:9.4877448222716465e-01:3.3135762129274038e-01:1.8649553726659107e+00:3.0534951167051261e-01:2.4567325879297859e+00:3.0298066684574132e-01:2.9998526958911738e+00:3.8401523427423973e-01:3.4070119415841997e+00 + CVs 20 + 7.4124029256513735e-03 2.7198893045617983e-01 1.4189424379206292e-01 + 7.4466381651920321e-03 5.5155921993130230e-01 2.9979091470734925e-01 + -1.3399939117966025e-02 8.3049808659888347e-01 4.5239543774539676e-01 + -6.2803160799635077e-02 1.1037611202230466e+00 5.8854830199548347e-01 + -1.3967460044824984e-01 1.3737409036897352e+00 7.1636966007481040e-01 + -2.3914241157499483e-01 1.6462715343543919e+00 8.4718584695592569e-01 + -3.5292416736811205e-01 1.9283492409630345e+00 9.9079141932618264e-01 + -4.7025968086271475e-01 2.2270632059317683e+00 1.1560870393192766e+00 + -5.7438328158520524e-01 2.5440202934045235e+00 1.3433537321307689e+00 + -6.4464388395647709e-01 2.8745761939382897e+00 1.5377635596254295e+00 + -6.7096118179011899e-01 3.2231312171482878e+00 1.7395911001826012e+00 + -6.5601665726438962e-01 3.5979333178388475e+00 2.0116842415906637e+00 + -6.0672556263488531e-01 3.9368835078249096e+00 2.4555412011838254e+00 + -5.4026400234749827e-01 4.0766465320829850e+00 3.0761501879566646e+00 + -4.6209751334132410e-01 3.9229132204104724e+00 3.7518207427390937e+00 + -3.2870700131756436e-01 3.5301779694739897e+00 4.3676170154079692e+00 + -9.0910193421325891e-02 3.0218032745902215e+00 4.8623163522449238e+00 + 2.8226467276377987e-01 2.5768701144273010e+00 5.2292097998019313e+00 + 6.5410075759500308e-01 2.6323141758837920e+00 5.3859831944420549e+00 + id 13674 + loc 4.3957326561212540e-02 1.6981753706932068e-01 399 + blend 0.0000000000000000e+00 + interp 4.5059421437247194e-01:4.5058970843032825e-01:8.2162030251704810e-01:3.0923586975756001e-01:1.1421129596248945e+00:2.2301579670921390e-01:1.9037554986543876e+00:2.6496935038396663e-01:3.0114673442765905e+00:4.0857646835754141e-01:3.9976553020367529e+00 + CVs 20 + -1.1113061330187671e-01 1.6392595121000605e-01 2.3278492764480149e-01 + -2.3149323144665260e-01 3.3142130890226718e-01 4.4082168777963704e-01 + -3.5661340551094400e-01 5.0792548151114292e-01 6.2329020114951272e-01 + -4.8495989653723004e-01 6.9772244918733783e-01 7.8113603336085335e-01 + -6.1572625364546507e-01 9.0553451387421213e-01 9.2127496299247658e-01 + -7.4184918979956893e-01 1.1349526322281767e+00 1.0555424240239790e+00 + -8.6057736405517238e-01 1.3874148235849861e+00 1.1944589456296753e+00 + -9.7791732070808224e-01 1.6603036551195660e+00 1.3523326280130190e+00 + -1.1102744181982875e+00 1.9403374726977085e+00 1.5557705205864254e+00 + -1.2785496084267081e+00 2.1933143093936440e+00 1.8346935409253118e+00 + -1.4915996455320575e+00 2.3581920229631295e+00 2.2009456212845802e+00 + -1.7268421403191083e+00 2.3781323145120079e+00 2.6303496297963682e+00 + -1.9482237092395944e+00 2.2543509251476879e+00 3.0798149784506541e+00 + -2.1434019486753706e+00 2.0397562478674995e+00 3.5150976245136625e+00 + -2.3397224857295953e+00 1.8118887728833049e+00 3.9170726532822804e+00 + -2.6021152915194072e+00 1.6360495381135998e+00 4.2792818879425782e+00 + -3.0169630425890506e+00 1.5611551323159580e+00 4.5655812259038511e+00 + -3.5593330670868673e+00 1.6339453273780729e+00 4.6970218854252206e+00 + -4.0137342592123000e+00 1.6608031743109413e+00 4.8379559753315959e+00 + id 13675 + loc 9.6535325050354004e-01 7.5738322734832764e-01 382 + blend 0.0000000000000000e+00 + interp 4.4047021811926940e-01:2.7600703605962018e-01:1.4095955266816151e-01:3.2637400503796182e-01:1.0032160901591858e+00:3.1423878711021958e-01:1.9580145125749762e+00:4.4046581341708824e-01:2.4777500470209235e+00:3.4196352223984156e-01:2.9700563298870537e+00:2.3824661876308231e-01:3.4977750717985039e+00 + CVs 20 + 1.0451279453464954e+00 1.8458994581804389e-01 -5.8868957113850395e-01 + 1.7316241045493548e+00 2.0628618155760364e-01 -9.9785699766072877e-01 + 2.3329023468070740e+00 1.7174477016580658e-01 -1.3427968456159491e+00 + 2.9769763736410022e+00 1.2336301374768294e-01 -1.6616564204431636e+00 + 3.6609882853304452e+00 5.2466960607195245e-02 -1.9439205560053601e+00 + 4.3773829423960136e+00 -4.9489930062219134e-02 -2.1878847907395103e+00 + 5.1103263780664614e+00 -1.9227818768260208e-01 -2.3997720208921165e+00 + 5.8325219354526983e+00 -3.9020098018303795e-01 -2.5941642482701726e+00 + 6.5157559945584191e+00 -6.5921052092136057e-01 -2.7921181790270388e+00 + 7.1347245258090410e+00 -1.0153271316825723e+00 -3.0188939922062414e+00 + 7.6576098195443558e+00 -1.4680741240266735e+00 -3.2920670467515736e+00 + 8.0470484499587513e+00 -2.0136859456932656e+00 -3.6099701517819893e+00 + 8.2743888752159087e+00 -2.6363252451372903e+00 -3.9541750893164727e+00 + 8.3311377864233318e+00 -3.2939308112113643e+00 -4.3031474467181248e+00 + 8.2516966615909819e+00 -3.9209503773904171e+00 -4.6469590698005927e+00 + 8.1072184330385646e+00 -4.4786239643526766e+00 -4.9829791229616553e+00 + 7.9631979926249556e+00 -4.9426453116877749e+00 -5.3075612471480413e+00 + 7.8468590814002708e+00 -5.2877445867744779e+00 -5.6058207294940949e+00 + 7.7475128593589462e+00 -5.6097708944287072e+00 -5.9120581534339998e+00 + id 13676 + loc 4.0323561429977417e-01 3.0132384970784187e-02 415 + blend 0.0000000000000000e+00 + interp 4.9069013753285268e-01:3.3761182053092631e-01:2.4063354379545199e-01:1.6042602458411837e-01:9.5901477340223018e-01:2.5010123293373288e-01:1.8715198633044703e+00:3.5287373387282039e-01:2.1861414380095496e+00:4.9068523063147740e-01:2.9941270806354039e+00:3.5117140348932802e-01:3.4757037606159691e+00 + CVs 20 + -5.0206096568654060e-02 6.0249017200617892e-02 -1.2303683972674165e-01 + -9.7121718009703137e-02 1.3207939706381888e-01 -2.2088356662868594e-01 + -1.3978601570051580e-01 2.0574962289189572e-01 -3.0108324408759413e-01 + -1.8431271998503737e-01 2.8135156927121596e-01 -3.8032972653271835e-01 + -2.2710561125086198e-01 3.6057306464591338e-01 -4.6137275624109836e-01 + -2.6276373404458730e-01 4.4413452843983658e-01 -5.4567693703587428e-01 + -2.8504520406634298e-01 5.3220440406560932e-01 -6.3428361669227429e-01 + -2.8700145262566379e-01 6.2418860672203502e-01 -7.2698281028285283e-01 + -2.6201765350211004e-01 7.1849522708307434e-01 -8.2134186079728744e-01 + -2.0522369720940814e-01 8.1248593673241642e-01 -9.1234625565624694e-01 + -1.1512949640963077e-01 9.0247957193763317e-01 -9.9332448313114940e-01 + 6.3457307172057886e-03 9.8060209938590093e-01 -1.0603993162879850e+00 + 1.5251541838432670e-01 1.0357182350909067e+00 -1.1160960365858927e+00 + 3.1286080255127158e-01 1.0592994852290014e+00 -1.1682882829622065e+00 + 4.7895053965625978e-01 1.0529175802628286e+00 -1.2214995324829245e+00 + 6.4791950391391440e-01 1.0259943459223584e+00 -1.2738347081400461e+00 + 8.1869299675606710e-01 9.8523440459043532e-01 -1.3251033705708331e+00 + 9.8796238071233489e-01 9.3207029395420471e-01 -1.3810304644634237e+00 + 1.1608297116979225e+00 9.3698749242984036e-01 -1.4303593950372744e+00 + id 13677 + loc 1.7365807294845581e-01 2.3844288289546967e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3451483222052756e-01:2.7248474048514709e-01:3.4780390417825724e-01:3.8090258737877580e-01:1.0294057303577140e+00:2.8122259471006561e-01:1.9856512665956929e+00:4.3451048707220535e-01:2.4430277918795502e+00:2.8386537640447140e-01:3.0843143964580877e+00:3.9557800933363546e-01:3.9030671852763841e+00 + CVs 20 + 2.3599238339465770e-01 3.7168102938214698e-01 -2.3254137268770214e-01 + 3.8900897917723898e-01 7.1058158306082198e-01 -4.5578065816118218e-01 + 5.1346853823241478e-01 1.0364134371847886e+00 -6.7801717968935049e-01 + 6.2031978491843565e-01 1.3612414055129491e+00 -9.0788426731345673e-01 + 6.9932052010639589e-01 1.6788803330949813e+00 -1.1492080716208155e+00 + 7.3448855214969089e-01 1.9814885877819024e+00 -1.4093093999859012e+00 + 7.0904426154423261e-01 2.2549935083522739e+00 -1.6941130704181917e+00 + 6.1431693339740312e-01 2.4801891084723175e+00 -2.0025912653016169e+00 + 4.5304053842891689e-01 2.6370295775724886e+00 -2.3271544555155153e+00 + 2.4141249360257233e-01 2.7131121182551627e+00 -2.6539845402020705e+00 + 3.2419157688432509e-03 2.7155810706556736e+00 -2.9678388394593771e+00 + -2.4362237716500956e-01 2.6680732146695902e+00 -3.2606073807503813e+00 + -4.9316593712174017e-01 2.5927450481401895e+00 -3.5329182728007318e+00 + -7.4538483864517147e-01 2.4987302308660575e+00 -3.7886150045344413e+00 + -1.0028982548077192e+00 2.3758172412873191e+00 -4.0337271911064132e+00 + -1.2751976200059219e+00 2.1754755841698747e+00 -4.2825154990584533e+00 + -1.5352595739547015e+00 1.8063611118952303e+00 -4.5488207918167607e+00 + -1.6608616153271707e+00 1.3064173705111084e+00 -4.7905272851713843e+00 + -1.6952844384220909e+00 1.0987399721837234e+00 -4.8999993909294286e+00 + id 13678 + loc 5.7539188861846924e-01 9.7965157032012939e-01 395 + blend 0.0000000000000000e+00 + interp 4.4399718641571106e-01:4.3556582558168155e-01:2.1708860433099708e-01:3.2617327786211542e-01:9.7962572433438733e-01:2.4119930196294034e-01:1.9326874894050114e+00:4.4399274644384695e-01:2.4146741212678515e+00:3.1300723196181213e-01:3.2925977296443403e+00:4.1686819954348975e-01:3.9286216067513315e+00 + CVs 20 + 6.0370909454547717e-01 1.1677447267377700e-01 -3.8876474653099669e-01 + 1.0539416034757203e+00 1.3098917815526367e-01 -7.0270633155707685e-01 + 1.4629534963140645e+00 1.1813119307770958e-01 -9.8913165570847861e-01 + 1.8631254427283253e+00 1.0498625594622280e-01 -1.2587358430469733e+00 + 2.2497614000397941e+00 9.4926747305853487e-02 -1.5087947748619706e+00 + 2.6216086235131004e+00 9.1301070417896257e-02 -1.7421363180723124e+00 + 2.9795467174782830e+00 9.5862806650811816e-02 -1.9645132072691032e+00 + 3.3273169701995484e+00 1.0607680340191972e-01 -2.1824515344282638e+00 + 3.6732970829893636e+00 1.1238141800056223e-01 -2.4022538258402673e+00 + 4.0251584032187235e+00 9.7477486408953151e-02 -2.6301916296767103e+00 + 4.3791873488076476e+00 3.9351606357467706e-02 -2.8738960763980672e+00 + 4.7177497903874155e+00 -7.8738640360914935e-02 -3.1356378830499159e+00 + 5.0237329645499464e+00 -2.6195643861381024e-01 -3.4062337245718455e+00 + 5.2883178981064844e+00 -5.0903898544914483e-01 -3.6703827882688023e+00 + 5.5043601394410731e+00 -8.1192836303416716e-01 -3.9140243440494573e+00 + 5.6654301953342099e+00 -1.1565690020683763e+00 -4.1289625211684013e+00 + 5.7682385750970422e+00 -1.5258648058080104e+00 -4.3062701897364093e+00 + 5.8136895922566731e+00 -1.9032012786684138e+00 -4.4324799310182232e+00 + 5.7913880685895052e+00 -2.2841617648510271e+00 -4.4812686606484480e+00 + id 13679 + loc 2.0166849717497826e-02 4.0387708693742752e-02 376 + blend 0.0000000000000000e+00 + interp 4.4084660919008156e-01:2.2286216423523802e-01:9.5581343039336408e-02:2.7238444191524114e-01:9.5378588770284545e-01:4.4084220072398966e-01:1.6084077345446386e+00:3.9159239355849895e-01:1.9991421864230492e+00:1.6886300178483715e-01:2.3938539045024818e+00:2.8873172281780191e-01:3.2700437964659761e+00 + CVs 20 + 7.6921372039172831e-01 4.1118082822986768e-01 2.5366310178695534e-01 + 1.3519675652247858e+00 6.3933032267420775e-01 3.4521235590189053e-01 + 1.8893276035432367e+00 7.2794573151765296e-01 3.2794096897395530e-01 + 2.4447525022872343e+00 7.4291696644641136e-01 2.5093917659664555e-01 + 3.0152569450162230e+00 7.4955649806037028e-01 1.6354496993647394e-01 + 3.5969936627399530e+00 7.8145517261028674e-01 1.1891753852338238e-01 + 4.1840124517693962e+00 8.3248065151978268e-01 1.6385309023623051e-01 + 4.7560351999331987e+00 8.9070135188443433e-01 3.2478641540748199e-01 + 5.2807908817880360e+00 9.5954187646563227e-01 6.0200124517772879e-01 + 5.7311299478107252e+00 1.0430641231957307e+00 9.7238059531843013e-01 + 6.1053516798369740e+00 1.1342828532581797e+00 1.3926850607290944e+00 + 6.4279076092699698e+00 1.2224536618943385e+00 1.8225166899782388e+00 + 6.7303645163922514e+00 1.2898576993841075e+00 2.2473104183260229e+00 + 7.0323468892386467e+00 1.3051548036080183e+00 2.6691969718975268e+00 + 7.3188971218486696e+00 1.2476954146712234e+00 3.1086847973705782e+00 + 7.4775076721646574e+00 1.1166965102524324e+00 3.6194314388921338e+00 + 7.3598772004909074e+00 9.0273210082531863e-01 4.2312177064341459e+00 + 7.1041191747963124e+00 5.1993962214211509e-01 4.7443078096265028e+00 + 7.2395505077521838e+00 2.0145949325822921e-01 4.5558176729899733e+00 + id 13680 + loc 9.4099849462509155e-01 2.0047250390052795e-01 402 + blend 0.0000000000000000e+00 + interp 5.1434944597225007e-01:3.8962560244644973e-01:6.3158010929043051e-05:3.5640057087843885e-01:9.9659102571324043e-01:5.1434430247779039e-01:1.3566112328530411e+00:4.7231927721669958e-01:1.9923836820665950e+00:4.3326247275782775e-01:2.4709629089648200e+00:2.7128674508266415e-01:3.3459241097322323e+00 + CVs 20 + 1.9736514867618277e-01 2.7574993818483928e-01 2.6873920573960997e-01 + 3.7669483433970152e-01 5.5786552240336784e-01 5.4043483197185460e-01 + 5.4075780504263382e-01 8.5038517455330409e-01 8.2750588315004392e-01 + 7.1491922131647834e-01 1.1390398423885386e+00 1.1236627612473320e+00 + 9.3438884531666511e-01 1.4024648849116559e+00 1.4148383000946181e+00 + 1.2199917181735385e+00 1.6204171143610282e+00 1.6905184248751806e+00 + 1.5718182294701815e+00 1.7717655260177445e+00 1.9496229607890319e+00 + 1.9741260265413514e+00 1.8329173868961610e+00 2.2020927177552787e+00 + 2.3988134856864440e+00 1.7796616826006697e+00 2.4615466976639189e+00 + 2.8054692066122882e+00 1.5903119824343446e+00 2.7298462670627579e+00 + 3.1437782708467621e+00 1.2700098915578080e+00 2.9827236424581627e+00 + 3.3991272499980973e+00 8.7202233750293923e-01 3.1851059784422553e+00 + 3.6143299119923040e+00 4.4794895415102132e-01 3.3255344656423396e+00 + 3.8446204693472601e+00 1.8784008258842189e-02 3.4169350539370278e+00 + 4.1364340828182646e+00 -4.1408788986335587e-01 3.4903582574096479e+00 + 4.5258321472089671e+00 -8.5894986634762971e-01 3.5885310839923577e+00 + 5.0052474337732047e+00 -1.3174134715152213e+00 3.7472940541535187e+00 + 5.5119211328889302e+00 -1.7732243964530099e+00 3.9750895687095187e+00 + 5.9621126442259653e+00 -2.1909912940885619e+00 4.2069787105559975e+00 + id 13681 + loc 6.0364711284637451e-01 2.3274829983711243e-01 396 + blend 0.0000000000000000e+00 + interp 4.7869826920659075e-01:2.8606069072783680e-01:1.3887519773072088e-01:4.6705402760986625e-01:8.1065769917089103e-01:4.7869348222389874e-01:1.0448270178966910e+00:3.9457617855937588e-01:1.6551056831073010e+00:4.4677364698241051e-01:2.0662646778207203e+00:4.4744824420327012e-01:2.8364884989428427e+00:3.4073746513637682e-01:3.0561833801014506e+00:3.8844593714738007e-01:3.7234553598183195e+00 + CVs 20 + -7.2126453504948529e-01 2.9619237373252405e-01 3.4157853277158506e-01 + -1.2679726757342646e+00 4.5135165927564658e-01 6.3937957152837399e-01 + -1.7666390849507609e+00 5.4778746635057796e-01 9.2564708164878828e-01 + -2.2793032558009783e+00 6.0884909702958190e-01 1.2220819673692429e+00 + -2.8015993771739858e+00 6.2963080321512943e-01 1.5274661377718748e+00 + -3.3247738995744744e+00 6.0919886198002648e-01 1.8444940278544841e+00 + -3.8370152655493972e+00 5.4749743858578137e-01 2.1767901442605364e+00 + -4.3259126382902444e+00 4.4100321725249181e-01 2.5253064315446441e+00 + -4.7776564020146131e+00 2.8404352969696922e-01 2.8906977370289728e+00 + -5.1742104959466584e+00 7.5966618720828105e-02 3.2749368033520736e+00 + -5.4990938587267433e+00 -1.7418412702041008e-01 3.6770404242848351e+00 + -5.7523630106060626e+00 -4.5151390116239520e-01 4.0903182385822827e+00 + -5.9486463822416455e+00 -7.4526119636127630e-01 4.5089100100765531e+00 + -6.1001854077390814e+00 -1.0485635002397595e+00 4.9297647173608095e+00 + -6.2133330163550342e+00 -1.3567549639159187e+00 5.3491898991320426e+00 + -6.2938924949379125e+00 -1.6777796564084078e+00 5.7628625308850330e+00 + -6.3449968694608643e+00 -2.0303571537549727e+00 6.1648944012836173e+00 + -6.3663687951044103e+00 -2.4128406260234176e+00 6.5423636102710194e+00 + -6.3859576771276405e+00 -2.6647182372312335e+00 6.8564783604116579e+00 + id 13682 + loc 3.5923695564270020e-01 6.4022529125213623e-01 1069 + blend 0.0000000000000000e+00 + interp 5.0977408842277094e-01:4.0972641760343209e-01:1.7250166275744050e-02:5.0976899068188675e-01:7.8178140507133542e-01:3.7263283918261120e-01:1.2022992907213439e+00:4.1905640839749403e-01:2.0301773129489082e+00:4.3297302492962830e-01:2.8934611536838575e+00:2.7679840958321550e-01:3.4031919584325672e+00 + CVs 20 + 7.4799823987979949e-02 2.9007312315749373e-01 -1.3800067924733381e-01 + 1.6059424278509538e-01 5.8498498690643608e-01 -2.6281033253670688e-01 + 2.5783761413276274e-01 8.9462570321385282e-01 -3.7864928581714352e-01 + 3.7068304955715731e-01 1.2241801480825361e+00 -4.9657322161643336e-01 + 4.9527050368257330e-01 1.5696307099104254e+00 -6.2908006728891197e-01 + 6.1380287258969868e-01 1.9316068525412318e+00 -7.9339326691660994e-01 + 6.9758212751064430e-01 2.3047772729422249e+00 -1.0264231634007885e+00 + 7.1366637396728971e-01 2.6565316351336898e+00 -1.3762411751861872e+00 + 6.4092394561506261e-01 2.9141718300535850e+00 -1.8608545633358999e+00 + 4.8561325211530315e-01 3.0028662545187896e+00 -2.4287486065158101e+00 + 2.8152997745049357e-01 2.9079549976015677e+00 -3.0022606882999390e+00 + 7.2664323422150900e-02 2.6592011135115619e+00 -3.5383380790141885e+00 + -9.6208048751454056e-02 2.2923501120811891e+00 -4.0261751591514781e+00 + -1.8170702702944297e-01 1.8382669430849874e+00 -4.4694111767138720e+00 + -1.3596619007271538e-01 1.3250494610353387e+00 -4.8751795031719398e+00 + 1.1431059074821370e-01 7.9662720689151656e-01 -5.2354321142009193e+00 + 6.2454150441899170e-01 3.5755608487338075e-01 -5.4829789234960193e+00 + 1.2166191150454977e+00 8.5634448456750945e-02 -5.5309035091230339e+00 + 1.5504604289446158e+00 -1.7638682089705504e-01 -5.4822870562155765e+00 + id 13683 + loc 6.5891975164413452e-01 4.6781966090202332e-01 1080 + blend 0.0000000000000000e+00 + interp 3.3094423146878937e-01:2.6141757271625865e-01:2.2985854695397567e-01:2.9077507582008955e-01:1.0020858726302224e+00:2.7499594856325044e-01:1.8073586530400241e+00:2.6391370975397832e-01:2.3990096038450632e+00:3.3094092202647468e-01:3.0050571431927002e+00:3.2989832471232111e-01:3.7338203094303566e+00 + CVs 20 + -2.1770794910616342e-02 3.9918419697813945e-01 -3.4060850535541465e-01 + -6.3284288843607817e-02 7.0767235542521367e-01 -5.0382847805064335e-01 + -1.1524336227442089e-01 9.8954294048464209e-01 -5.9789305639780310e-01 + -1.7514960865484369e-01 1.2738155896101409e+00 -6.6817030143495315e-01 + -2.4131662288641881e-01 1.5443739172467370e+00 -7.0738137767988141e-01 + -3.0805205942274838e-01 1.7786372586620478e+00 -7.1127482852880941e-01 + -3.6124412890627933e-01 1.9469268877708799e+00 -6.8264571713528743e-01 + -3.6616966800240941e-01 2.0186951510484832e+00 -6.5166636815826995e-01 + -2.9077564881448786e-01 2.0382613558014366e+00 -6.9562893725611552e-01 + -2.2626217043906777e-01 2.1007531107717483e+00 -7.5135579239976058e-01 + -1.9159157193549872e-01 2.1256595135486753e+00 -7.2909948228273280e-01 + -1.4310783940730870e-01 2.0685317027431660e+00 -6.6186686767822756e-01 + -6.5150882912202224e-02 1.9214805735031564e+00 -5.8172104358052878e-01 + 3.2577912074267093e-02 1.6976490243136435e+00 -5.0708791765757766e-01 + 1.2828211149847568e-01 1.4359427143406123e+00 -4.4023619288249116e-01 + 2.1794341467765699e-01 1.1731529353166212e+00 -3.5235880431467870e-01 + 3.2462277518456961e-01 9.4717396926444875e-01 -2.8133191051988693e-02 + 2.3075074738425327e-01 1.3378300181972980e+00 4.8407655228235125e-01 + 2.0584251663302153e-01 1.4679360986859062e+00 4.8538780406932125e-01 + id 13684 + loc 5.6442666053771973e-01 1.9493657350540161e-01 375 + blend 0.0000000000000000e+00 + interp 4.9521027294785125e-01:3.0801456708953490e-01:1.6067862565942725e-01:4.2686350730921985e-01:9.0826896604398277e-01:3.1257410704147620e-01:1.4712022838663104e+00:4.9520532084512181e-01:2.2762492590434258e+00:3.1516248105928835e-01:2.9619520121639646e+00:4.6151227384545745e-01:3.6546555605786355e+00 + CVs 20 + 6.2886925156159867e-01 4.0508073450813309e-01 5.8927040614779713e-02 + 1.1650683797100923e+00 6.2236863272160159e-01 7.4502782513205634e-02 + 1.6882064980222349e+00 6.6232369506217570e-01 3.7116740525039937e-02 + 2.2336049081803941e+00 5.8431054487007517e-01 -4.7136319065325505e-02 + 2.7868100568988554e+00 4.6685758970586544e-01 -1.5694350544776053e-01 + 3.3301799177535636e+00 3.6033809263964045e-01 -2.5258857134169932e-01 + 3.8593474494608273e+00 2.7811950854322975e-01 -3.0291076107500048e-01 + 4.3797292579887150e+00 2.2595125812885719e-01 -2.9128306443491614e-01 + 4.8800035550052154e+00 2.1523144353580803e-01 -2.1406333433207214e-01 + 5.3295307370307770e+00 2.5518930229959658e-01 -8.1139199771570580e-02 + 5.7051015190946153e+00 3.4259341643529106e-01 7.9585948708335907e-02 + 6.0090227427415579e+00 4.7011226888276925e-01 2.3113124934212270e-01 + 6.2703971668789773e+00 6.3193503052337174e-01 3.6750499217082599e-01 + 6.5245823836759875e+00 8.0090415945448390e-01 5.3243877344454749e-01 + 6.7649727498273275e+00 9.4317727614166902e-01 7.6103004233108362e-01 + 6.9069424928693088e+00 1.0552884824598254e+00 1.0636317209285406e+00 + 6.8460802044423943e+00 1.1318592860251524e+00 1.4360971617892009e+00 + 6.6569961901966517e+00 1.0167241120063126e+00 1.8005708647743677e+00 + 6.6860129755143038e+00 5.4511746551143414e-01 1.8127073730193133e+00 + id 13685 + loc 5.4389588534832001e-02 7.0949095487594604e-01 373 + blend 0.0000000000000000e+00 + interp 4.8709967395297760e-01:3.5630425645164476e-01:1.2202359786382888e-01:3.8100085666288053e-01:7.0187069743146702e-01:3.1766596014208759e-01:1.6909329218340012e+00:3.8562363987977560e-01:2.0785959764712540e+00:3.3853473100888032e-01:2.9531824847330999e+00:4.8709480295623808e-01:3.7107842987120927e+00 + CVs 20 + -3.7773747103733279e-01 6.2304502433888853e-01 -1.2660007486912284e-01 + -6.8850090464790048e-01 1.2012425282906776e+00 -2.9211535461500548e-01 + -9.1711290920382560e-01 1.7571921410529268e+00 -4.9929154740698750e-01 + -1.0598073958017089e+00 2.2935594764139595e+00 -7.5240285402211271e-01 + -1.1265322292627316e+00 2.7778864915778487e+00 -1.0495112490947707e+00 + -1.1550485163741278e+00 3.1711180321053187e+00 -1.3718582673750050e+00 + -1.1860469063933716e+00 3.4558193485202127e+00 -1.6933020892706958e+00 + -1.2419802458348186e+00 3.6466220441352539e+00 -2.0015090431135678e+00 + -1.3348460877567367e+00 3.7720606147333560e+00 -2.3107982783243930e+00 + -1.4795430552923043e+00 3.8516745859842314e+00 -2.6392450822590385e+00 + -1.6977358245419580e+00 3.8949498210371485e+00 -2.9910159253047395e+00 + -2.0198457051532026e+00 3.8983615844171959e+00 -3.3584214874677039e+00 + -2.4607313625330329e+00 3.8424911661470982e+00 -3.7198677771652351e+00 + -2.9939758766868128e+00 3.7078815389582283e+00 -4.0481460407916900e+00 + -3.5794288019575040e+00 3.4947072836618451e+00 -4.3141440857786932e+00 + -4.2035595836399793e+00 3.2310620823344074e+00 -4.4884816400203160e+00 + -4.9060119829346718e+00 2.9636301942864871e+00 -4.5809765074949711e+00 + -5.7249348729307705e+00 2.6392823624599711e+00 -4.6275903976440294e+00 + -6.2305331501599230e+00 2.3538924909982351e+00 -4.4191944300147101e+00 + id 13686 + loc 4.0079042315483093e-01 7.0591740310192108e-02 378 + blend 0.0000000000000000e+00 + interp 4.5165463271823136e-01:3.0790891184879349e-01:9.0934219117694570e-01:4.5165011617190420e-01:1.7989156690207411e+00:3.2079694744442622e-01:2.4857872506736847e+00:3.5019905368364812e-01:3.2583498851939776e+00:3.7671329736319364e-01:3.9909981447548977e+00 + CVs 20 + 1.5184278533211770e-01 3.1934908104775961e-01 -2.2257847927726834e-01 + 2.6873373620870289e-01 6.1708593089901009e-01 -4.2835915851167228e-01 + 3.6907517663130585e-01 8.9825656433562062e-01 -6.2644016728845964e-01 + 4.5989526557919258e-01 1.1690467424066349e+00 -8.2021795058258429e-01 + 5.4419229045462902e-01 1.4418924670965034e+00 -1.0110280731602586e+00 + 6.3269844357460947e-01 1.7308603139568166e+00 -1.2072194979633348e+00 + 7.3751268604222409e-01 2.0334645820059087e+00 -1.4218874448744028e+00 + 8.6837135800395671e-01 2.3386652785176536e+00 -1.6647277203212649e+00 + 1.0401385906443803e+00 2.6405801215842004e+00 -1.9353266669978468e+00 + 1.2732381977606768e+00 2.9385850650094820e+00 -2.2266395385339406e+00 + 1.5879191106491057e+00 3.2336919841250733e+00 -2.5436743048701791e+00 + 2.0034275113483471e+00 3.5083395878228889e+00 -2.9080604652652005e+00 + 2.4926517898112812e+00 3.6895288206479027e+00 -3.3082755181491450e+00 + 2.9098877674021240e+00 3.7042624929660746e+00 -3.6520336096442518e+00 + 3.1226211008368825e+00 3.5816875830326040e+00 -3.8502837659184106e+00 + 3.1745527493885657e+00 3.3863634302803285e+00 -3.8653183709085601e+00 + 3.2165664365369757e+00 3.1589423982721430e+00 -3.6761002366317408e+00 + 3.3469722513407243e+00 2.9266534087972373e+00 -3.4183619695881298e+00 + 3.4277132613952128e+00 2.8433568057547474e+00 -3.6345171354481218e+00 + id 13687 + loc 7.9913991689682007e-01 8.0265635251998901e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4488572288564587e-01:4.4488127402841704e-01:5.8202900620490094e-01:2.5299882546564856e-01:1.0877110665957508e+00:2.5361137807735834e-01:2.1688978835688744e+00:3.9233118666366051e-01:2.7495830010383155e+00:4.0203288289667616e-01:3.0178993047455185e+00:2.6187780709203684e-01:3.9861984221785671e+00 + CVs 20 + 1.3753873372249806e-01 4.2662369060769834e-01 -2.9667000175340663e-01 + 3.0024100116249675e-01 8.3939499406322093e-01 -5.5623782524598075e-01 + 4.9660368739714550e-01 1.2292888315187034e+00 -7.8972518393027724e-01 + 7.3303924306227675e-01 1.5783891862756203e+00 -1.0113281155749867e+00 + 1.0117109084796017e+00 1.8618329473091519e+00 -1.2360833391670702e+00 + 1.3260031991639072e+00 2.0558023830923480e+00 -1.4730937990403667e+00 + 1.6619783737614973e+00 2.1489488242970474e+00 -1.7159113913465949e+00 + 2.0023340989569287e+00 2.1481000735107361e+00 -1.9460050948680701e+00 + 2.3335654104384598e+00 2.0744338879758661e+00 -2.1492920683601691e+00 + 2.6493456475596915e+00 1.9520575857736489e+00 -2.3269479645118771e+00 + 2.9467137499440450e+00 1.7975679415794148e+00 -2.4912756931954609e+00 + 3.2254342786363090e+00 1.6165319876215589e+00 -2.6586398869529355e+00 + 3.4945641719354490e+00 1.4168719789355109e+00 -2.8423215331043470e+00 + 3.7818265671571512e+00 1.2028239411398820e+00 -3.0643506553308288e+00 + 4.1062591510836892e+00 9.4471299066525216e-01 -3.3546420608638101e+00 + 4.4503405292805303e+00 5.8418719587620105e-01 -3.7424709773954965e+00 + 4.7498057056377814e+00 1.3543419542596258e-01 -4.2482324370607145e+00 + 4.9211932037478139e+00 -2.3314792828130027e-01 -4.7776846655745109e+00 + 4.9110848579214945e+00 -2.6580942369830662e-01 -5.0562873659924801e+00 + id 13688 + loc 3.3494952321052551e-01 3.6744678020477295e-01 393 + blend 0.0000000000000000e+00 + interp 4.0474646828319555e-01:3.0034076286835198e-01:4.3833020225416686e-03:4.0048685126442757e-01:9.5167593818544349e-01:3.6201544467567459e-01:1.3831183232924236e+00:2.8560650038254554e-01:2.0232214368969719e+00:4.0474242081851275e-01:2.6422672775817899e+00:3.1120817176987647e-01:3.3081300858316682e+00 + CVs 20 + -1.3544302103500780e-01 2.1571790641260569e-01 2.9801323685298170e-01 + -2.8448212434185721e-01 4.6563653121059767e-01 6.1262126087342195e-01 + -4.3073277263976639e-01 7.4754625272039144e-01 9.0848807699671341e-01 + -5.7192884325586069e-01 1.0336221051272301e+00 1.1605598404807560e+00 + -7.3589212885372191e-01 1.3019431723138064e+00 1.3810173939839556e+00 + -9.5596867098964899e-01 1.5446435058659500e+00 1.5855352725608693e+00 + -1.2386809744726603e+00 1.7551665765117666e+00 1.7617904749735349e+00 + -1.5685925075953753e+00 1.9234255746015796e+00 1.8920127332531975e+00 + -1.9309845211424534e+00 2.0390261562606953e+00 1.9793392675440553e+00 + -2.3129770475555582e+00 2.0952079240138155e+00 2.0350286939736137e+00 + -2.6987005646048261e+00 2.0871798807930020e+00 2.0682103417837014e+00 + -3.0698272936049373e+00 2.0127855132463912e+00 2.0818339542656825e+00 + -3.4099783833821271e+00 1.8731049557174935e+00 2.0749002482326970e+00 + -3.7055197330410152e+00 1.6650082653805223e+00 2.0564937931658864e+00 + -3.9447296369785239e+00 1.3597156989867663e+00 2.0622849163580299e+00 + -4.0962325059440587e+00 8.9130558910765201e-01 2.1654855397546529e+00 + -4.0735344327864462e+00 2.6218482888556993e-01 2.4380890975523348e+00 + -3.8668611747894559e+00 -3.7526253991076042e-01 2.8479316101855705e+00 + -3.7583105915129575e+00 -8.7918059781237412e-01 3.1517260088045713e+00 + id 13689 + loc 3.2649952173233032e-01 6.5290576219558716e-01 409 + blend 0.0000000000000000e+00 + interp 4.9324727192893758e-01:2.7373036062236106e-01:1.4463201546355264e-01:4.9324233945621831e-01:8.6521439524738319e-01:4.1276489549012557e-01:1.2132494176859918e+00:2.7442735776899846e-01:1.9907664826529050e+00:2.6595402524052830e-01:2.9752289031215478e+00:2.8722448795118888e-01:3.6078404027685371e+00 + CVs 20 + 5.4200478843165323e-01 3.7348101208514534e-02 -1.6511759141650190e-01 + 1.0262934705356415e+00 3.8014309711024596e-02 -3.5307285357685714e-01 + 1.5157591320590824e+00 3.0376079385113997e-02 -5.0314086953084947e-01 + 2.0067653859061507e+00 1.6175244809288447e-02 -6.0960134811684963e-01 + 2.4886743769075736e+00 -5.5716814591260100e-03 -6.7929680783099999e-01 + 2.9550964743446153e+00 -3.4817119481081349e-02 -7.1483062498876404e-01 + 3.3960193841570145e+00 -7.7907041009496636e-02 -7.1737681843269530e-01 + 3.7984637718476408e+00 -1.4603559912797448e-01 -6.9128452651521088e-01 + 4.1521306344617859e+00 -2.4549008892828628e-01 -6.4731017428768900e-01 + 4.4455485877406478e+00 -3.7741747458477226e-01 -6.0201032303283264e-01 + 4.6665963059214937e+00 -5.3741989460643769e-01 -5.7235244014746001e-01 + 4.8193881359458990e+00 -7.1092970822365187e-01 -5.6594169335432687e-01 + 4.9267481610606021e+00 -8.8299356898072867e-01 -5.7767912747368200e-01 + 5.0088775318729031e+00 -1.0478714020356801e+00 -5.9938652509665935e-01 + 5.0738817028735852e+00 -1.2046957726005569e+00 -6.2525930125079277e-01 + 5.1272253002979529e+00 -1.3547609453802809e+00 -6.4889166773579632e-01 + 5.1809041504000870e+00 -1.5000598379281311e+00 -6.6860557029883194e-01 + 5.2547469398820930e+00 -1.6398466421297473e+00 -6.9458507076613007e-01 + 5.4074148249774243e+00 -1.8086951751008877e+00 -7.3013892198898711e-01 + id 13690 + loc 3.5101705789566040e-01 3.7958565354347229e-01 380 + blend 0.0000000000000000e+00 + interp 3.5623065683070976e-01:3.4616684287769556e-01:6.9030984179222765e-01:3.5622709452414147e-01:1.4763930296235417e+00:2.9454756074442401e-01:2.2335164226459217e+00:3.4731552339240140e-01:2.9940233244551040e+00:3.3518173178060812e-01:3.9042477199441867e+00 + CVs 20 + -4.7030853408452544e-01 3.8149690263599167e-01 5.2342922999500430e-01 + -7.9383140337089586e-01 6.7309918525670109e-01 9.4713332773785375e-01 + -1.0709368405911053e+00 9.3169502627364387e-01 1.3313037655263329e+00 + -1.3501597918241406e+00 1.1885651749653801e+00 1.7100515293314560e+00 + -1.6451075275225386e+00 1.4471976568322622e+00 2.0922150010180425e+00 + -1.9779430110481038e+00 1.7034326810212672e+00 2.4922838302450634e+00 + -2.3731728496153468e+00 1.9376765958118667e+00 2.9222494710727860e+00 + -2.8455161964417535e+00 2.1181437576792117e+00 3.3784035986605350e+00 + -3.3901669153872622e+00 2.2128525003132431e+00 3.8350115033354237e+00 + -3.9927086127581504e+00 2.1991121664164681e+00 4.2672259977227345e+00 + -4.6366853034852227e+00 2.0590100285930157e+00 4.6673383760587743e+00 + -5.2988626824160301e+00 1.7721054297604006e+00 5.0342759404636581e+00 + -5.9304276921475836e+00 1.3304307072151880e+00 5.3453238260220646e+00 + -6.4442433595690618e+00 7.9090390022124035e-01 5.5543670710979391e+00 + -6.7849752985524567e+00 2.6705694173808681e-01 5.6467491371696692e+00 + -6.9852899128540704e+00 -1.8979299089589752e-01 5.6589432798274215e+00 + -7.1160468050899714e+00 -6.0795484270383282e-01 5.6405446564638382e+00 + -7.2277666855625515e+00 -1.0220142008889517e+00 5.6541927716262972e+00 + -7.3028034817586889e+00 -1.4234412946776498e+00 5.8223301678422690e+00 + id 13691 + loc 3.5814166069030762e-01 7.6932996511459351e-01 374 + blend 0.0000000000000000e+00 + interp 4.5076751824394412e-01:3.0509610055953140e-01:5.6906629711155654e-01:3.6273594546784305e-01:1.1647183598778803e+00:3.2803352194294383e-01:1.9956001479802239e+00:4.5076301056876172e-01:2.6415434285988604e+00:3.1463544248701936e-01:3.4002687939981620e+00 + CVs 20 + -6.4936098798315534e-01 3.1915509234406941e-01 -1.4812994519615041e-01 + -1.1671920448780881e+00 5.1074326191309516e-01 -2.4215172693765122e-01 + -1.6700241962411382e+00 6.2297426992626392e-01 -3.0076031170402945e-01 + -2.2069941452981610e+00 6.9468983290829756e-01 -3.3922525859069175e-01 + -2.7633752053905245e+00 7.5146896009977826e-01 -3.6791686806630775e-01 + -3.3226658762326782e+00 8.0556390951363865e-01 -3.9882196612154897e-01 + -3.8851173404341424e+00 8.4921336804392178e-01 -4.4313062380212032e-01 + -4.4581845512423879e+00 8.6648559896432764e-01 -5.1359800598704064e-01 + -5.0364159446343706e+00 8.4205801723013840e-01 -6.2492725815189876e-01 + -5.5974945957220568e+00 7.6398158434675656e-01 -7.8161621307522522e-01 + -6.1200577119996380e+00 6.2748178180428793e-01 -9.6201775478355023e-01 + -6.5905597842971639e+00 4.3182975487326969e-01 -1.1385759975211747e+00 + -7.0016513830902980e+00 1.7370054596135409e-01 -1.2947820893597211e+00 + -7.3467140854696673e+00 -1.5209634430505359e-01 -1.4250390178390231e+00 + -7.6200889207710389e+00 -5.3144026942657252e-01 -1.5303112183459040e+00 + -7.8208109029690043e+00 -9.1524321761103744e-01 -1.6210846511820045e+00 + -7.9504552238854949e+00 -1.2453831140748091e+00 -1.7122651618936424e+00 + -8.0391920128345902e+00 -1.5144739045017399e+00 -1.8149084328884433e+00 + -8.2285112097058430e+00 -1.7889103868152376e+00 -1.9188125737781632e+00 + id 13692 + loc 2.3041105270385742e-01 5.8949196338653564e-01 412 + blend 0.0000000000000000e+00 + interp 4.4379062684738529e-01:3.1858913659855298e-01:1.3846699950975039e-01:3.6982773239607802e-01:1.0217963537496315e+00:2.9398156198546960e-01:1.7076105513642037e+00:3.3265855661200350e-01:2.0533039649148637e+00:3.3414904913998561e-01:2.9528071491978518e+00:4.4378618894111682e-01:3.7724437513280100e+00 + CVs 20 + 6.7757941588967541e-01 1.8180205648223757e-01 -1.4459957667623075e-01 + 1.1417310679977182e+00 2.3596050458134890e-01 -3.0349542078763625e-01 + 1.5609623365702647e+00 2.4264087507434498e-01 -4.6651990113752434e-01 + 2.0061909590173617e+00 2.3344752922210443e-01 -6.3097606003146600e-01 + 2.4675119714122409e+00 2.0440148891647403e-01 -7.9069365675169268e-01 + 2.9356477101985079e+00 1.5458753070010101e-01 -9.3863293377602197e-01 + 3.4014732764973505e+00 8.5424890682305077e-02 -1.0702954933690085e+00 + 3.8562817274820702e+00 -9.5862971698990052e-04 -1.1874641894514630e+00 + 4.2952024007347562e+00 -1.0197072873283708e-01 -1.2945385043938911e+00 + 4.7154957467952370e+00 -2.1436735978968602e-01 -1.3948179284692790e+00 + 5.1001121593275212e+00 -3.3071980665196854e-01 -1.4954650641932803e+00 + 5.4075918293924454e+00 -4.3089096130783622e-01 -1.6137080663837566e+00 + 5.6175202265030935e+00 -4.9020565366612612e-01 -1.7573874581265696e+00 + 5.7730788295853639e+00 -5.1643842962729458e-01 -1.9151367319991834e+00 + 5.9156723043083161e+00 -5.3350754485358998e-01 -2.0797820762478416e+00 + 6.0418358936998775e+00 -5.3307671376569576e-01 -2.2371411271319959e+00 + 6.1453918942161927e+00 -5.0104654419862782e-01 -2.3655031015344679e+00 + 6.2380952731697565e+00 -4.5662151524188799e-01 -2.4640008486736327e+00 + 6.3523769384215836e+00 -5.7841178817431693e-01 -2.6756883414801758e+00 + id 13693 + loc 9.2563647031784058e-01 5.6534755229949951e-01 400 + blend 0.0000000000000000e+00 + interp 4.9843644323665415e-01:4.2615172929019385e-01:4.7640962674539322e-02:3.1896757753804250e-01:6.4802885283325151e-01:2.5936981732853109e-01:1.1435408281610968e+00:3.8956587437568896e-01:1.9911165192611275e+00:4.9843145887222179e-01:2.6730560962995464e+00:3.6096669143437132e-01:3.0813600871615447e+00:2.8727000421358062e-01:3.6160744647852474e+00 + CVs 20 + -1.6835384143466253e-01 1.8636695399661066e-01 -2.9697289408186284e-01 + -3.2047655517683177e-01 3.7872307455762233e-01 -5.8958957901775344e-01 + -4.5315222422852758e-01 5.8159556258224665e-01 -8.9606188975539125e-01 + -5.7080096138983194e-01 7.9313178117608074e-01 -1.2238260835108878e+00 + -6.7727169385779029e-01 1.0083275773497036e+00 -1.5713735355236285e+00 + -7.6988065495074287e-01 1.2266212556210885e+00 -1.9362649703813877e+00 + -8.4336554698764377e-01 1.4472208731113261e+00 -2.3236036005545446e+00 + -8.9340061129739479e-01 1.6609714278522960e+00 -2.7481882835940121e+00 + -9.1488688720721323e-01 1.8518083084680328e+00 -3.2215112168095796e+00 + -9.0291294006359357e-01 2.0001313291400966e+00 -3.7436193202899943e+00 + -8.5442045904261454e-01 2.0834583103450210e+00 -4.3089185104271817e+00 + -7.6618729378559802e-01 2.0743394503853141e+00 -4.9072982125240259e+00 + -6.2847604708623150e-01 1.9481720478741194e+00 -5.5130777201907684e+00 + -4.2570147932602020e-01 1.6948639948288817e+00 -6.0821214067338918e+00 + -1.4934939896370758e-01 1.3152646990960934e+00 -6.5648328916744969e+00 + 1.8841046556718094e-01 8.1292143592678778e-01 -6.9152054942059280e+00 + 5.4982990131092069e-01 2.1663027089527231e-01 -7.0957019290946821e+00 + 8.7420638454683497e-01 -3.8116272057101730e-01 -7.1232218284754820e+00 + 1.0595037160182459e+00 -7.5048333656454114e-01 -7.2154500974090849e+00 + id 13694 + loc 8.6249583959579468e-01 2.5733861327171326e-01 415 + blend 0.0000000000000000e+00 + interp 4.9173257122541070e-01:3.3441814630648053e-01:2.9007334717838029e-01:3.2794918670565609e-01:1.0021572736489561e+00:3.4816685411836779e-01:1.9308953278147434e+00:4.9172765389969847e-01:2.2680405703398918e+00:3.9892325089145880e-01:2.9371326717952346e+00:3.6461891867422180e-01:3.4976161568290252e+00 + CVs 20 + -1.8293360705447531e-01 3.6126206879039648e-02 8.0791281173208898e-02 + -3.4235138412010940e-01 5.5507834507893969e-02 1.7589356636833148e-01 + -5.1154035277129839e-01 8.2728208736309067e-02 2.7927908560251263e-01 + -6.9906632345058728e-01 1.3078890155218600e-01 3.7201276403317257e-01 + -9.0821495722727441e-01 1.9921829780966238e-01 4.4731681099569776e-01 + -1.1440786494957278e+00 2.8558138599039196e-01 4.9667724381607270e-01 + -1.4065639545932473e+00 3.8486529855915241e-01 5.0703617144066060e-01 + -1.6878667592027206e+00 4.8893123674962585e-01 4.6577927319624673e-01 + -1.9793095550218962e+00 5.8920743016709087e-01 3.6693990131559051e-01 + -2.2742834317011713e+00 6.7878921390837943e-01 2.0928527144504983e-01 + -2.5583116816361295e+00 7.5103535216886641e-01 -9.3778724803639246e-04 + -2.8057713189936861e+00 7.9566421408028509e-01 -2.2893879922857396e-01 + -3.0084045405428999e+00 8.0029649145080461e-01 -4.1015898876891310e-01 + -3.1876094344325248e+00 7.6092492455492722e-01 -5.0302966175051023e-01 + -3.3773675456025085e+00 6.8151512159859351e-01 -5.2041541733744789e-01 + -3.5913253318061287e+00 5.6364288441286603e-01 -4.7852423944684297e-01 + -3.7999406873633896e+00 4.1501233231127999e-01 -3.6541291476808979e-01 + -3.9653125616064626e+00 2.5489012499346253e-01 -1.7109829115969355e-01 + -4.3119368562549711e+00 6.4377082304261091e-02 -5.2867565721612442e-02 + id 13695 + loc 3.2233887910842896e-01 2.7765870094299316e-01 402 + blend 0.0000000000000000e+00 + interp 4.5114930068169073e-01:4.5114478918868395e-01:2.0965516492999525e-01:3.9404703865943108e-01:9.1429902451490908e-01:2.8923465479410582e-01:1.2354985341790641e+00:4.3826089251673062e-01:1.8869866695267667e+00:3.7248901404009394e-01:2.4851400834116499e+00:4.3125871114679110e-01:3.0181803159899419e+00:2.8277468300802089e-01:3.5076314944873328e+00 + CVs 20 + -1.7461555847758639e-01 3.6758511689139950e-01 2.1047500506968131e-01 + -3.5602166695517756e-01 7.1714604994475084e-01 3.9107656699341203e-01 + -5.6954649203755880e-01 1.0530976000093717e+00 5.3785519113551139e-01 + -8.2359747621607737e-01 1.3719406139270554e+00 6.6211562005308067e-01 + -1.1150567185914695e+00 1.6643767353616445e+00 7.8406132177198562e-01 + -1.4433049784257763e+00 1.9223658053913382e+00 9.1373290179362354e-01 + -1.8112130996363587e+00 2.1380562530873006e+00 1.0479050833934129e+00 + -2.2174691536619808e+00 2.3038186070524089e+00 1.1852259033394048e+00 + -2.6560046614100528e+00 2.4159235740926914e+00 1.3298827633594847e+00 + -3.1184339177851719e+00 2.4695916911349811e+00 1.4780014542086450e+00 + -3.5857583103442794e+00 2.4559289128695090e+00 1.6162175601395106e+00 + -4.0260940876206011e+00 2.3667843725392865e+00 1.7401379055100836e+00 + -4.4121082239296925e+00 2.2059654097866797e+00 1.8621924362647131e+00 + -4.7314319943044909e+00 1.9998436192026032e+00 2.0038540555282705e+00 + -4.9808710204358153e+00 1.7971723734907139e+00 2.1823111422237051e+00 + -5.1672121256980708e+00 1.6565909284660310e+00 2.3931502330317187e+00 + -5.3040944339709286e+00 1.6131802363898315e+00 2.5983911840390674e+00 + -5.4234312294930955e+00 1.6142368613349547e+00 2.7911342617730388e+00 + -5.5720846382593523e+00 1.5807313826869134e+00 3.0854385244573277e+00 + id 13696 + loc 7.1689319610595703e-01 6.7721688747406006e-01 382 + blend 0.0000000000000000e+00 + interp 4.1898226137601402e-01:3.2664307428321204e-01:3.2103429691627616e-01:3.0514896376984352e-01:1.4746189333474344e+00:4.1897807155340028e-01:2.0000062688176738e+00:2.9935210803060408e-01:2.5134274863956243e+00:3.2127457788930852e-01:3.4515452371362310e+00 + CVs 20 + 1.0232205890255213e+00 2.1185429704806844e-01 -4.9930018613450922e-01 + 1.7263375345529666e+00 2.7441541172621703e-01 -8.6560804626964472e-01 + 2.3449054879922802e+00 2.6351823794264717e-01 -1.2012613937700756e+00 + 2.9808750069837298e+00 2.0901042474439691e-01 -1.5589665492123035e+00 + 3.6137068306795923e+00 1.0436957262769364e-01 -1.9468605920536095e+00 + 4.2227500348154638e+00 -5.4408982871703149e-02 -2.3717184869365391e+00 + 4.7889389755754417e+00 -2.7380590326307575e-01 -2.8311290877699631e+00 + 5.3006112670382457e+00 -5.6649315432925440e-01 -3.3047507206468127e+00 + 5.7520031017873645e+00 -9.4133165380465789e-01 -3.7585133272804807e+00 + 6.1384102584853464e+00 -1.3865022454585785e+00 -4.1614002547977726e+00 + 6.4552785536918442e+00 -1.8803805615753206e+00 -4.4893251308422135e+00 + 6.6978847151384153e+00 -2.4031624681909753e+00 -4.7278274830420397e+00 + 6.8605072726935168e+00 -2.9433194897794674e+00 -4.8758176603690373e+00 + 6.9457041757761537e+00 -3.5065566751005357e+00 -4.9554769600363180e+00 + 6.9754816032285341e+00 -4.1147550265793811e+00 -5.0061442671409795e+00 + 7.0081478882247463e+00 -4.7525588941926404e+00 -5.0463214937731600e+00 + 7.0791040807197003e+00 -5.3479415793123923e+00 -5.0980751815352967e+00 + 7.1776658448826405e+00 -5.8389673998637335e+00 -5.1777579081685436e+00 + 7.3024554251768485e+00 -6.3384263838323545e+00 -5.2286038062443012e+00 + id 13697 + loc 1.0741888731718063e-01 2.6819017529487610e-01 401 + blend 0.0000000000000000e+00 + interp 5.6003592145222814e-01:4.1084706401905730e-01:1.0482195621951063e-01:2.6943322462642488e-01:8.6218818766014826e-01:4.0656905511175800e-01:1.1798899877460187e+00:5.6003032109301365e-01:1.9615855445302435e+00:3.2048186074986534e-01:2.7391678561158179e+00:3.7246765292592843e-01:3.1486259332083497e+00:3.3934551237895055e-01:3.8642069853104282e+00 + CVs 20 + -2.5651313472188392e-01 2.7118611773116230e-01 1.6346977508229249e-01 + -5.0051515684762971e-01 5.5590122615621584e-01 2.8056020023399492e-01 + -7.5375962037181499e-01 8.4527241896067307e-01 3.8651704637950163e-01 + -1.0297855213202529e+00 1.1315207871435076e+00 5.0311431220422509e-01 + -1.3371999315236107e+00 1.4072081510531471e+00 6.4476873456330441e-01 + -1.6803707350637378e+00 1.6592039455507481e+00 8.3080675053640984e-01 + -2.0536577841610590e+00 1.8673477459209966e+00 1.0813033735537712e+00 + -2.4393935940424720e+00 2.0076143433474702e+00 1.4070334442205714e+00 + -2.8126790823702317e+00 2.0600019993912237e+00 1.8020669209100662e+00 + -3.1498104409987411e+00 2.0153005148986902e+00 2.2439154169060669e+00 + -3.4368343658401690e+00 1.8762542150775223e+00 2.7022334820357323e+00 + -3.6694666302573404e+00 1.6518317922634553e+00 3.1506961650830143e+00 + -3.8430035137471124e+00 1.3555291876135853e+00 3.5726593127274686e+00 + -3.9455822526816955e+00 1.0086379583215532e+00 3.9648126892095581e+00 + -3.9561885629038884e+00 6.4044359521665961e-01 4.3382642777446865e+00 + -3.8429657444845615e+00 2.9218460305645994e-01 4.6965460393350877e+00 + -3.5920217085833652e+00 1.9470567719851117e-02 5.0143345809343414e+00 + -3.2418413803996016e+00 -1.3129469062267263e-01 5.2481506993452971e+00 + -2.9557308303404786e+00 -1.7900226407336683e-01 5.3657336588104103e+00 + id 13698 + loc 8.8294708728790283e-01 6.5993940830230713e-01 399 + blend 0.0000000000000000e+00 + interp 4.4373519359565827e-01:2.6444042983019073e-01:1.0228245010253323e-02:2.6470380157965340e-01:8.0573521289594496e-01:4.1630964685060234e-01:1.3361783337107564e+00:4.4373075624372232e-01:2.0003026669392261e+00:3.8022666064507660e-01:2.4456708543925072e+00:3.9316582629281066e-01:3.1342265997911967e+00:3.9384415976579873e-01:3.7076222795938900e+00 + CVs 20 + -2.2875763978888125e-01 1.9158097651043715e-01 3.4979398541545831e-02 + -4.7368960462729309e-01 4.1017664039051654e-01 2.3018172814691359e-02 + -7.2907047187252338e-01 6.4008746961062102e-01 -3.2528098373743264e-02 + -9.9241357513756956e-01 8.7088537325895832e-01 -1.3051927326651247e-01 + -1.2584644160030805e+00 1.0936866822787490e+00 -2.7290640956643170e-01 + -1.5218860931109883e+00 1.3013950263758154e+00 -4.5748233763729645e-01 + -1.7768317186197329e+00 1.4892516643751814e+00 -6.8108059777865670e-01 + -2.0176509256040105e+00 1.6549140599345713e+00 -9.4121850585400491e-01 + -2.2389023763709037e+00 1.7979953408034142e+00 -1.2376981591229694e+00 + -2.4313467424458359e+00 1.9158967669389608e+00 -1.5722454239423085e+00 + -2.5757304551671165e+00 1.9978751365340806e+00 -1.9345804324486160e+00 + -2.6552867780162797e+00 2.0336428248194869e+00 -2.2876366813612741e+00 + -2.6768152169844246e+00 2.0294424040530306e+00 -2.5940925244879249e+00 + -2.6594653723938038e+00 2.0010981366330256e+00 -2.8401663332735891e+00 + -2.6150686459871673e+00 1.9609731396081576e+00 -3.0247230326646006e+00 + -2.5491507048718387e+00 1.9043163604827162e+00 -3.1738676706338191e+00 + -2.4758326602835243e+00 1.8018038179347926e+00 -3.3311458837858194e+00 + -2.4215656189631458e+00 1.6301972175728263e+00 -3.5175901810107053e+00 + -2.4508875847650136e+00 1.3485523898134351e+00 -3.7678327900373807e+00 + id 13699 + loc 6.7143164575099945e-02 7.9218101501464844e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7805722812853230e-01:4.4117114780853101e-01:2.7358031978079067e-01:2.7653204959576350e-01:8.8642682655086402e-01:3.9118709623534731e-01:1.6129523823123948e+00:4.1850851849687676e-01:2.0088315472196818e+00:4.1959424577466697e-01:2.4532502840206041e+00:4.7805244755625104e-01:2.9945461455170728e+00:3.6179800725161759e-01:3.4240172128373509e+00:4.4584504371434863e-01:3.9834510926411753e+00 + CVs 20 + 1.0818154404595610e-01 2.3339597827023634e-01 -4.5426313346225641e-02 + 2.2299249443293315e-01 4.7056785869148221e-01 -1.2016434313366064e-01 + 3.4732903921156993e-01 7.0545617622271628e-01 -2.0787990326868877e-01 + 4.8465726927603997e-01 9.3733988070572261e-01 -3.0040804426795731e-01 + 6.2966582289524986e-01 1.1690600821305990e+00 -4.0176207623266869e-01 + 7.6962557461634473e-01 1.4041983765050614e+00 -5.1631679158743649e-01 + 8.8556519238821585e-01 1.6489662397141496e+00 -6.5240615694552950e-01 + 9.5733643034932647e-01 1.9043639883821259e+00 -8.2460696895231012e-01 + 9.7290110843590805e-01 2.1488139671172481e+00 -1.0518299799950528e+00 + 9.2878265963905182e-01 2.3279165533544983e+00 -1.3393405644777323e+00 + 8.2682576511232331e-01 2.3865926634756356e+00 -1.6568036670630462e+00 + 6.7532529484410819e-01 2.3097603565345639e+00 -1.9643481086318608e+00 + 4.9070835502497967e-01 2.1129716881399476e+00 -2.2465451887234114e+00 + 2.9619305365396897e-01 1.8186346681495613e+00 -2.5124998899901647e+00 + 1.2066050490131064e-01 1.4407588550029811e+00 -2.7883497922353091e+00 + 1.4885095326980902e-02 9.7399882960406248e-01 -3.1156093357119672e+00 + 1.0786713491530553e-01 4.1722409783865433e-01 -3.5195304442132747e+00 + 5.0345688360836105e-01 -7.9351492736854046e-02 -3.8847819310942859e+00 + 7.5812726928495822e-01 -3.0537032926996993e-01 -4.0432927487933235e+00 + id 13700 + loc 4.4997996091842651e-01 1.7526097595691681e-02 403 + blend 0.0000000000000000e+00 + interp 4.0442166882268848e-01:3.7587601407516519e-01:7.6025428454980615e-02:4.0441762460600028e-01:7.7287299104624019e-01:2.0800997348607966e-01:1.3688079285091561e+00:3.1976991774053087e-01:2.1385057944582302e+00:3.6852801024120224e-01:2.9589178572283030e+00:3.0778618782520656e-01:3.7683055389075588e+00 + CVs 20 + -2.2176791536086307e-01 2.8283158502022754e-01 8.2984186903482249e-03 + -4.6014059675939145e-01 5.5902264506675259e-01 4.2464564253080178e-02 + -7.1381882663404894e-01 8.3492744698784527e-01 8.7423668129968324e-02 + -9.8358891362727263e-01 1.0995562324338375e+00 1.3275771765480093e-01 + -1.2723261709303293e+00 1.3322851444078068e+00 1.7498456132787621e-01 + -1.5740789273424598e+00 1.5180236666445848e+00 2.2262937352836154e-01 + -1.8727893271998906e+00 1.6522755984184849e+00 2.9618220092216729e-01 + -2.1469169178668817e+00 1.7319402137482536e+00 4.0992502234166317e-01 + -2.3790614553215659e+00 1.7527610039067980e+00 5.6360651813371387e-01 + -2.5660250969256668e+00 1.7150426314339609e+00 7.5338227919448575e-01 + -2.7131021029085933e+00 1.6213903260018163e+00 9.7320926006008890e-01 + -2.8304570825718165e+00 1.4719658772213831e+00 1.2111340146773604e+00 + -2.9352437254784025e+00 1.2638207485289255e+00 1.4523589374633346e+00 + -3.0393403431586830e+00 9.9643264123896857e-01 1.6858969721408499e+00 + -3.1507271136906172e+00 6.6944912516358945e-01 1.9220287886577045e+00 + -3.3125923904808441e+00 2.7158682622549773e-01 2.1983011792558718e+00 + -3.6228326685944996e+00 -1.7753714028264100e-01 2.5309726773193528e+00 + -4.1095915267425651e+00 -5.7426011895404361e-01 2.8482829230068099e+00 + -4.4989772802313182e+00 -8.8684209139518055e-01 3.0988964987029588e+00 + id 13701 + loc 3.6439219117164612e-01 4.0323707461357117e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0077673596435442e-01:3.7218225623275841e-01:1.1091682569861439e-01:2.9190559201319488e-01:1.0009409425198890e+00:4.0077272819699478e-01:1.8450968482145575e+00:2.7564302281683789e-01:2.0894539541673747e+00:3.2574377861474774e-01:2.9005679695509254e+00:2.8282712808032751e-01:3.3345888376551236e+00 + CVs 20 + 1.5653220358437775e-02 3.0678772193451065e-01 -5.8056541615078519e-02 + 1.0920196968977058e-03 5.6578973075901906e-01 -1.2729183591183429e-01 + -2.2217539041636813e-02 7.9860024550318742e-01 -2.0161525924033574e-01 + -3.7043821173558200e-02 1.0162432665933554e+00 -2.7527766934140441e-01 + -3.7256597417044901e-02 1.2265469374215958e+00 -3.5102915025322334e-01 + -2.0158277470051833e-02 1.4475414544829346e+00 -4.3936262171884466e-01 + -1.3220902430315373e-03 1.7019117395393777e+00 -5.6179804610380080e-01 + -2.3207621590455307e-02 2.0025511591184562e+00 -7.4560181540733406e-01 + -1.5421538337035323e-01 2.3270815970984522e+00 -9.9718812407520541e-01 + -4.4229261990474433e-01 2.6069698923444511e+00 -1.2690601940868862e+00 + -8.6141036862943121e-01 2.7795311151510376e+00 -1.4806326423733926e+00 + -1.3278299404291225e+00 2.8272604709477047e+00 -1.5776128186882195e+00 + -1.7293590915639796e+00 2.7600333752527502e+00 -1.5788226630660103e+00 + -1.9092271562940497e+00 2.5993220453188752e+00 -1.5705019326853218e+00 + -1.6748125744243438e+00 2.3134372929471119e+00 -1.6271315485792155e+00 + -1.0754765045916250e+00 1.6346495682314113e+00 -1.6793963975053774e+00 + -7.4851885051704437e-01 1.8844773571370821e-01 -1.4819302437475186e+00 + -1.6807245873899355e+00 -1.2563109248428657e+00 -9.6373355237314173e-01 + -1.6117027520857548e+00 -1.1397242027647576e+00 -1.0436625002334385e+00 + id 13702 + loc 9.0165781974792480e-01 6.4741706848144531e-01 396 + blend 0.0000000000000000e+00 + interp 3.5771233382883910e-01:3.4635662493975222e-01:4.4998140418404520e-01:3.4223527764178224e-01:1.0132103777643977e+00:2.7033535296909245e-01:1.9231326924545173e+00:3.5372840696502950e-01:2.2405721113245205e+00:2.7259352905573664e-01:3.0114795271907324e+00:3.5770875670550084e-01:3.9344392724453074e+00 + CVs 20 + 8.5582771602197094e-01 2.3876761265571261e-01 -3.5201769125550164e-01 + 1.4306170168459031e+00 3.3006757309310969e-01 -5.8598534103690658e-01 + 1.9428190999677568e+00 3.6562605334121845e-01 -7.7243591806269574e-01 + 2.4881292742702366e+00 3.8775090284013403e-01 -9.3141755599048903e-01 + 3.0721105785427212e+00 3.9298949135926692e-01 -1.0651464481732464e+00 + 3.7006765896416276e+00 3.7378013996226611e-01 -1.1877709226896263e+00 + 4.3732731808643370e+00 3.1666079198378250e-01 -1.3221869620316311e+00 + 5.0780197574864019e+00 1.9969003387376283e-01 -1.4895649625012901e+00 + 5.7986846740221996e+00 3.7972169723854421e-04 -1.7103697445509527e+00 + 6.5131905373418117e+00 -3.1135736692928506e-01 -2.0037096025909218e+00 + 7.1722889465858159e+00 -7.5354979412763989e-01 -2.3772959276903514e+00 + 7.7152522064921492e+00 -1.3067029703640272e+00 -2.8119374429790893e+00 + 8.1146528782049216e+00 -1.9307725239077524e+00 -3.2738272647609237e+00 + 8.3768179443863016e+00 -2.5942404499610099e+00 -3.7373737448425786e+00 + 8.5170831123168007e+00 -3.2731062404945002e+00 -4.1837392452558690e+00 + 8.5520403710272301e+00 -3.9473286247107651e+00 -4.5886178318713453e+00 + 8.5010604383253838e+00 -4.6065876975781119e+00 -4.9261942636978144e+00 + 8.3907720240242405e+00 -5.2354298112032929e+00 -5.1842854835548824e+00 + 8.3232743159695382e+00 -5.7231082982374790e+00 -5.4012642230424204e+00 + id 13703 + loc 7.6661658287048340e-01 7.8141117095947266e-01 376 + blend 0.0000000000000000e+00 + interp 2.5140155345995713e-01:2.1081128614390687e-01:2.8073745070166556e-01:2.3602638597825226e-01:1.4220355212368427e+00:1.9956376675093360e-01:2.2226837001184454e+00:2.5139903944442255e-01:3.1368375705428502e+00 + CVs 20 + -3.7058151056980265e-02 4.0870992155031710e-01 5.1157608802089583e-01 + 1.3489609970266020e-02 7.1711445246876704e-01 9.9187188123568859e-01 + 1.5186336839373005e-01 9.0426052712342098e-01 1.4915445080601493e+00 + 3.4449917599750002e-01 1.0298845498949918e+00 2.0055608218048624e+00 + 5.3829765207784275e-01 1.1682982838656106e+00 2.5163734180166633e+00 + 6.7723483248101424e-01 1.3488099004338987e+00 3.0296166921801615e+00 + 7.1897500842945083e-01 1.5665827075606278e+00 3.5490564807055662e+00 + 6.4608071950166979e-01 1.8105756367453196e+00 4.0590875037515897e+00 + 4.6102573658087731e-01 2.0692809080381900e+00 4.5450249211666138e+00 + 1.7247116243021665e-01 2.3257627147545410e+00 5.0106740019755422e+00 + -2.1646819574758924e-01 2.5475116007234853e+00 5.4672996698357110e+00 + -7.0719935116873622e-01 2.6818000768105925e+00 5.9159790408948272e+00 + -1.2818304377972924e+00 2.6696658630312262e+00 6.3294562588251697e+00 + -1.8934566567901880e+00 2.4821044363513098e+00 6.6607052417943287e+00 + -2.4828389528481680e+00 2.1258062472131014e+00 6.8794118578192425e+00 + -2.9605509354583313e+00 1.6376451397898446e+00 7.0111765117010911e+00 + -3.2231856684468223e+00 1.1116384132148989e+00 7.1380006076478457e+00 + -3.2783211334011306e+00 6.9781436879946313e-01 7.3014682622249687e+00 + -3.2391127698360886e+00 3.9462991607621900e-01 7.4876986209792573e+00 + id 13704 + loc 1.7856700718402863e-01 5.9582918882369995e-01 375 + blend 0.0000000000000000e+00 + interp 4.8776356576684499e-01:3.3382036766411016e-01:8.5237761906728604e-02:4.0137520914323221e-01:9.3367322784257778e-01:2.9124983598805276e-01:1.2896143049023274e+00:4.8775868813118733e-01:2.1933534854574672e+00:3.1009373259265166e-01:3.0000101418307654e+00 + CVs 20 + -4.7892036950757877e-01 3.9202213745099629e-01 5.0749058231060185e-04 + -9.2736822174832556e-01 6.2542352297550841e-01 5.7326980108326236e-02 + -1.3991596785808047e+00 6.8942744669747125e-01 1.7242432614653236e-01 + -1.9264364910478746e+00 6.4971206045038055e-01 3.4525243486051022e-01 + -2.5066275786500283e+00 6.1086054102659870e-01 5.5475116613254793e-01 + -3.1332736508764061e+00 6.4632704856891299e-01 7.4715542005882551e-01 + -3.7896695154868336e+00 7.8200158902947381e-01 8.4587203686091739e-01 + -4.4283933781918483e+00 1.0154239446537887e+00 7.9487552763792946e-01 + -4.9822379512631532e+00 1.3166200582223262e+00 5.8622538749381470e-01 + -5.4071281826096342e+00 1.6272160347088973e+00 2.5237366513149406e-01 + -5.7042258955335843e+00 1.8867772991111731e+00 -1.6217540265915509e-01 + -5.8901893620620207e+00 2.0490797125601174e+00 -6.1179939647204928e-01 + -5.9792396722620786e+00 2.0925287159347556e+00 -1.0433966785672546e+00 + -5.9913692216644803e+00 2.0318144509427674e+00 -1.4098651486875062e+00 + -5.9511109962306206e+00 1.9142504947622281e+00 -1.6769619973040335e+00 + -5.8642875908379049e+00 1.8017259483240220e+00 -1.8510687637051189e+00 + -5.7244995854083722e+00 1.7085534410612233e+00 -1.9834911144795513e+00 + -5.6240314650862260e+00 1.5069980920983559e+00 -2.0751526239917588e+00 + -5.7537851700956297e+00 1.1373970340225026e+00 -2.0026454415758232e+00 + id 13705 + loc 8.9383697509765625e-01 3.1554365158081055e-01 395 + blend 0.0000000000000000e+00 + interp 3.4466864613614634e-01:2.6462069136469496e-01:2.7942185100857198e-01:3.3063014730480578e-01:9.9948572071269948e-01:3.3687221938008599e-01:1.7605588479259482e+00:3.3922512296572538e-01:2.1434217009593848e+00:2.9125796055264852e-01:2.9796153359896289e+00:3.4466519944968499e-01:3.8630997343496274e+00 + CVs 20 + -4.4487730081608701e-01 4.2979423415488482e-01 4.7886186538166831e-01 + -8.2380127777869383e-01 7.5407891524800363e-01 9.0065331022059913e-01 + -1.2039361135670927e+00 1.0149246104893750e+00 1.3022400055981789e+00 + -1.6175494807312512e+00 1.2210257118464187e+00 1.7030952967907551e+00 + -2.0556462753727454e+00 1.3611514754430323e+00 2.0922366783911501e+00 + -2.5010661879834610e+00 1.4313586556464764e+00 2.4633052129766133e+00 + -2.9411533400659762e+00 1.4298106513813520e+00 2.8157197771285514e+00 + -3.3690992084938656e+00 1.3502305372932868e+00 3.1458218888839928e+00 + -3.7743103977363983e+00 1.1881788676604705e+00 3.4423087995660926e+00 + -4.1430314898801957e+00 9.5035085279915199e-01 3.6933763050596768e+00 + -4.4686669489477389e+00 6.5387711372878465e-01 3.8919174969152688e+00 + -4.7552045938576333e+00 3.1890928689152620e-01 4.0347908495613281e+00 + -5.0119620112415131e+00 -3.7182948678545547e-02 4.1262091644600734e+00 + -5.2502722925279866e+00 -4.0443964904292784e-01 4.1801068922767204e+00 + -5.4788363371051680e+00 -7.7957657401241143e-01 4.2150054375241677e+00 + -5.6940284879042462e+00 -1.1494931007713376e+00 4.2419990927336384e+00 + -5.8893537779446152e+00 -1.4951504418600816e+00 4.2673771318373674e+00 + -6.0607239095722143e+00 -1.8242417165663274e+00 4.3009740814892536e+00 + -6.1538578610387891e+00 -2.1780415968086819e+00 4.3346414722075348e+00 + id 13706 + loc 3.8810902833938599e-01 1.3972263038158417e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8437996309456801e-01:2.5467958756927589e-01:1.3127387117000022e-01:3.3731830351742637e-01:9.9552027149802447e-01:2.7121454656140870e-01:1.8157759032014926e+00:3.8437611929493709e-01:2.4483695275964124e+00:2.5750178358165154e-01:2.9975905223987604e+00 + CVs 20 + -1.7760961406700349e-01 2.5337683108800829e-01 -3.3427922070351940e-01 + -3.4699077101113174e-01 5.0722580781876581e-01 -6.4074163640847348e-01 + -5.2314282766284670e-01 7.5459137706248891e-01 -9.4022667390020254e-01 + -7.2185447118279333e-01 1.0015517939893217e+00 -1.2286203493809573e+00 + -9.5386930741873011e-01 1.2512672574985493e+00 -1.4858369174587358e+00 + -1.2226934661203619e+00 1.4963173492937856e+00 -1.6916892750015382e+00 + -1.5215108692150663e+00 1.7216781549368307e+00 -1.8328808743763769e+00 + -1.8380973480814475e+00 1.9137711207879957e+00 -1.9099436853683449e+00 + -2.1649259670984433e+00 2.0650737045516605e+00 -1.9343152264659274e+00 + -2.4991311626420316e+00 2.1691594155796001e+00 -1.9178950802871615e+00 + -2.8338392982757412e+00 2.2179556809793537e+00 -1.8662665249639947e+00 + -3.1554614322566419e+00 2.2057870296760487e+00 -1.7805504106461807e+00 + -3.4519089347997225e+00 2.1333117364644094e+00 -1.6664391833364536e+00 + -3.7189321622554088e+00 2.0039391850483570e+00 -1.5353571587108670e+00 + -3.9682455043472533e+00 1.8166517161116988e+00 -1.3901361333405491e+00 + -4.2420033965031925e+00 1.5541626160826438e+00 -1.2107397540516414e+00 + -4.5978747817255803e+00 1.1813590569798142e+00 -1.0252545714293284e+00 + -4.9556108960667764e+00 7.8706296457286817e-01 -1.0206116919131794e+00 + -4.9829370177895855e+00 7.0577197164037986e-01 -1.3000274598278563e+00 + id 13707 + loc 4.9120658636093140e-01 9.7868937253952026e-01 373 + blend 0.0000000000000000e+00 + interp 5.2551884119346282e-01:5.2073375638837904e-01:5.9162828169271164e-01:5.2551358600505094e-01:1.0511873719001723e+00:2.7609874848968335e-01:1.6010953879091394e+00:2.2811932134565743e-01:2.1302809266632847e+00:3.8910968706982413e-01:3.0633536393421634e+00:3.6064212371471921e-01:3.8820265067984749e+00 + CVs 20 + -3.6264712724415926e-01 3.4852855577776998e-01 -1.3022739779709414e-01 + -7.1002065506035295e-01 7.1134989386576097e-01 -2.7780634713959312e-01 + -1.0161280292937547e+00 1.1067079490292888e+00 -4.7367089779647575e-01 + -1.2584848826162505e+00 1.5268936389884387e+00 -7.4661985179324897e-01 + -1.4176897471094789e+00 1.9324286326795799e+00 -1.1098178390619116e+00 + -1.4920711295013271e+00 2.2784535849256358e+00 -1.5548349533095696e+00 + -1.4972372096757038e+00 2.5316376478199061e+00 -2.0563113605835017e+00 + -1.4584187817169756e+00 2.6736144452985871e+00 -2.5818487863923472e+00 + -1.4051005548744411e+00 2.7011070546454969e+00 -3.1066334412966441e+00 + -1.3669259251943700e+00 2.6371821457255988e+00 -3.6159162453892479e+00 + -1.3698986710191456e+00 2.5189452451229379e+00 -4.0954911258907423e+00 + -1.4283054981012198e+00 2.3833654770533528e+00 -4.5266584037802362e+00 + -1.5460962127229525e+00 2.2528580063250532e+00 -4.9091408507018812e+00 + -1.7408751314284103e+00 2.1180358872169656e+00 -5.2662754893756265e+00 + -2.0415236431258701e+00 1.9575555206693012e+00 -5.6089323276744620e+00 + -2.4529801772125461e+00 1.7841170777807887e+00 -5.9291601147667166e+00 + -2.9550901753110113e+00 1.6257576180652729e+00 -6.2328213074964225e+00 + -3.5556112297708165e+00 1.3875294501363886e+00 -6.4858955279937716e+00 + -4.0849942129115355e+00 9.5064485390469322e-01 -6.4543724791246380e+00 + id 13708 + loc 6.4051926136016846e-01 4.1142067313194275e-01 380 + blend 0.0000000000000000e+00 + interp 4.5751294740231147e-01:3.3613020889712281e-01:2.9057976907071770e-01:2.9308157137297397e-01:1.0606232201970551e+00:3.1023424549539597e-01:1.9091432075236860e+00:3.1019181991711309e-01:2.3280486707210599e+00:3.2910828978679352e-01:3.0012196220134473e+00:4.5750837227283747e-01:3.8087441451817314e+00 + CVs 20 + 6.5629274328122389e-01 2.8891809726359663e-01 5.9103762224807610e-01 + 1.2160480343689499e+00 4.6152932649662448e-01 1.0275078251439549e+00 + 1.7319694140284736e+00 5.8332492442456485e-01 1.4514474280313827e+00 + 2.2199246220372935e+00 6.6993262153053168e-01 1.9100978055902662e+00 + 2.6670866890778102e+00 7.0821895291555448e-01 2.3948747600618776e+00 + 3.0663290429494321e+00 6.8381122273351558e-01 2.8934105636816976e+00 + 3.4141669286896308e+00 5.8676328947906975e-01 3.3933521562956850e+00 + 3.7052901650132792e+00 4.1689804573918177e-01 3.8764387338451658e+00 + 3.9309321494547032e+00 1.9190061433471950e-01 4.3077106886145611e+00 + 4.0917809401244618e+00 -5.1947373628037141e-02 4.6558525641327613e+00 + 4.2003913358179643e+00 -2.7265319352255402e-01 4.9147725851638171e+00 + 4.2784430994321347e+00 -4.3722960453145721e-01 5.1058815038432694e+00 + 4.3513991422935190e+00 -5.5128520491005206e-01 5.2661502653605812e+00 + 4.4185890661329497e+00 -6.7784778440844295e-01 5.4045906577135625e+00 + 4.4627246709016806e+00 -8.7247386830918083e-01 5.4887467967038681e+00 + 4.4672377943611350e+00 -1.1397926898483268e+00 5.5190453963221326e+00 + 4.4115411476330557e+00 -1.4521145607948802e+00 5.5487084432319431e+00 + 4.3427422196795975e+00 -1.7644193979355718e+00 5.6170414399779887e+00 + 4.5499034935406701e+00 -1.9691210593888417e+00 5.6423029653497592e+00 + id 13709 + loc 4.0478903055191040e-01 8.1395649909973145e-01 415 + blend 0.0000000000000000e+00 + interp 2.9421147734562697e-01:2.3073755005824303e-01:6.2843081534516876e-01:2.8056242716274632e-01:1.9234388994135823e+00:2.9420853523085355e-01:2.3657615991316465e+00:2.7235010974041746e-01:3.0188441711284209e+00:2.6844110024521273e-01:3.7148844585036049e+00 + CVs 20 + 4.4856096726069361e-01 2.0704361479890071e-01 4.9061615055609492e-02 + 7.8601082456626303e-01 3.1302596933899812e-01 3.2102955523634347e-02 + 1.1019490669023482e+00 3.8651044248262556e-01 9.2592391696157961e-03 + 1.4295764514226978e+00 4.5464990692085827e-01 3.8545699921909149e-03 + 1.7674196942784257e+00 5.1737463120430172e-01 1.7571963500220056e-02 + 2.1146121271990168e+00 5.7564849365239801e-01 5.4295108817834614e-02 + 2.4678999623753430e+00 6.3073842372464517e-01 1.1888627432295384e-01 + 2.8217339134363049e+00 6.8381699072906321e-01 2.1368734583495297e-01 + 3.1720722008063191e+00 7.3587058288923934e-01 3.3844558856893636e-01 + 3.5144983216797385e+00 7.8764223878054040e-01 4.9095361799018167e-01 + 3.8318784367679015e+00 8.4247273515511023e-01 6.5902012698052514e-01 + 4.0930256975866870e+00 9.1046428242531063e-01 8.1408032235957006e-01 + 4.2808527408617838e+00 1.0017505480059290e+00 9.3963778706595624e-01 + 4.4289881976249887e+00 1.1062640432003492e+00 1.0547539155463737e+00 + 4.5880344986108437e+00 1.1992008170072843e+00 1.1737911561023768e+00 + 4.7579634414858694e+00 1.2735640292940238e+00 1.2985144581841526e+00 + 4.9154427304188406e+00 1.3350284063750086e+00 1.4378410419186898e+00 + 5.0571180833783362e+00 1.3796496728615968e+00 1.5943395160629996e+00 + 5.2373058047053789e+00 1.3375621339276906e+00 1.6039594611287031e+00 + id 13710 + loc 9.2908442020416260e-01 9.1196560859680176e-01 400 + blend 0.0000000000000000e+00 + interp 3.4727299183493926e-01:2.6335192659020756e-01:6.4172474965935045e-01:3.4726951910502091e-01:1.4335251432928762e+00:2.8966357956272853e-01:2.0982701150312395e+00:3.3050742073911055e-01:3.0015846530621584e+00:3.0134459210358988e-01:3.8732343763157076e+00 + CVs 20 + -2.3139336723085951e-01 2.5537746463109484e-01 -3.8068953070916589e-01 + -4.4539483764655352e-01 5.2192266484545291e-01 -7.5660273580963522e-01 + -6.8600972199746602e-01 8.0254715598211934e-01 -1.1372079365715786e+00 + -9.9708175889663853e-01 1.0740304666054277e+00 -1.5095760848974993e+00 + -1.4000793821805873e+00 1.2896600776758340e+00 -1.8416901757608608e+00 + -1.8760092059468525e+00 1.4069127453558790e+00 -2.1057016987118211e+00 + -2.3772887997146825e+00 1.4065099384399016e+00 -2.2989825920303728e+00 + -2.8588591268349495e+00 1.2937660045802652e+00 -2.4454548528446827e+00 + -3.2952426985442345e+00 1.0823395922834096e+00 -2.5712868981334678e+00 + -3.6657899745536002e+00 7.8369655781963965e-01 -2.6872011367184987e+00 + -3.9689755846144461e+00 4.2813479453114134e-01 -2.7951573172846480e+00 + -4.2547588065200648e+00 6.5455842540007136e-02 -2.9018717116518653e+00 + -4.5690562487142712e+00 -2.5882159107543168e-01 -3.0151655315760761e+00 + -4.9113505318227153e+00 -5.0952116981119233e-01 -3.1365301177415663e+00 + -5.2524765191354019e+00 -6.7946568269998608e-01 -3.2619710027246867e+00 + -5.5804126770743103e+00 -7.9877257371369692e-01 -3.4002984340709665e+00 + -5.9075447187267232e+00 -8.7896648583127779e-01 -3.5735892937343925e+00 + -6.2235792062135751e+00 -9.0801082905318653e-01 -3.7839151473628645e+00 + -6.4859590948417924e+00 -8.6913871838020884e-01 -4.0519304517990404e+00 + id 13711 + loc 7.1753180027008057e-01 1.3126380741596222e-01 407 + blend 0.0000000000000000e+00 + interp 3.9587129407571708e-01:3.1634347510672800e-01:9.9770311064464023e-01:3.4498976614477983e-01:1.6025595225226776e+00:3.5680171462514437e-01:2.0639507325338400e+00:3.3145758637115336e-01:3.0000164204124609e+00:3.9586733536277635e-01:3.4048603083244644e+00 + CVs 20 + -3.6888911662489021e-01 4.1637398547415422e-01 5.3208104067319330e-02 + -5.3334381939374442e-01 6.6757724276193264e-01 9.0094705088430718e-02 + -6.4890364554598268e-01 8.5207118275010951e-01 1.1486732293906608e-01 + -7.7891743281034009e-01 1.0132211121787016e+00 1.2794050572724866e-01 + -9.1629463971075298e-01 1.1434739273803145e+00 1.2313357892898595e-01 + -1.0528119176102091e+00 1.2332033600079002e+00 9.4533537283490648e-02 + -1.1767483081810550e+00 1.2710504098577475e+00 4.0544684529166083e-02 + -1.2752533227027203e+00 1.2527256532545850e+00 -2.9381375551282951e-02 + -1.3488043970349961e+00 1.1913500848310246e+00 -1.0116504604022200e-01 + -1.4128303198694674e+00 1.1013846497550603e+00 -1.7297773100695946e-01 + -1.4778603829294126e+00 9.8387320172059423e-01 -2.4876600639046265e-01 + -1.5449675928877336e+00 8.3531241925447630e-01 -3.2775979195666044e-01 + -1.6161325060215579e+00 6.5484606519635025e-01 -4.1015942095940255e-01 + -1.7022856753642248e+00 4.4392393560929211e-01 -5.0515029870164263e-01 + -1.8188862439576445e+00 2.0943393821426043e-01 -6.2360364428887993e-01 + -1.9741473354207439e+00 -3.2199928705205272e-02 -7.6338173163993162e-01 + -2.1656578778745925e+00 -2.6364293053380405e-01 -9.1344874682031230e-01 + -2.3853668902048493e+00 -4.7532797781856650e-01 -1.0743636978628655e+00 + -2.5412229446818606e+00 -6.7846292189974666e-01 -1.1873175519853822e+00 + id 13712 + loc 5.8348141610622406e-02 3.3773574233055115e-01 409 + blend 0.0000000000000000e+00 + interp 4.3606219342358038e-01:2.8257471081122670e-01:5.9570272188875362e-01:2.7359330642187818e-01:1.0655433154052725e+00:2.8886506653341343e-01:2.0566502282506240e+00:2.8173138925890368e-01:3.0052233581668339e+00:4.3605783280164617e-01:3.7487297015787835e+00 + CVs 20 + -1.8901656744766837e-01 2.3690399636846785e-01 -4.8534478287118465e-01 + -3.4854891668020271e-01 4.3877604670906639e-01 -9.1302294958390084e-01 + -4.9585172948622375e-01 6.2949574913143647e-01 -1.3280354440771258e+00 + -6.5156045193583800e-01 8.0825079594591531e-01 -1.7433031619779136e+00 + -8.3047844932968862e-01 9.6067968689558847e-01 -2.1492202136394463e+00 + -1.0383024785158197e+00 1.0774267666447259e+00 -2.5369215724102290e+00 + -1.2697579599536852e+00 1.1564017102125370e+00 -2.8982166985304483e+00 + -1.5150561621606105e+00 1.2032914851868233e+00 -3.2258722440003424e+00 + -1.7750443681430883e+00 1.2289451416344910e+00 -3.5243786367717047e+00 + -2.0643882607495736e+00 1.2332809049203641e+00 -3.8129868704694942e+00 + -2.3845541601688129e+00 1.1746396873542444e+00 -4.1117018231482376e+00 + -2.6817651702363916e+00 9.8070136386492313e-01 -4.4219735677178651e+00 + -2.9048400238333358e+00 6.5164607202420610e-01 -4.7258324002805896e+00 + -3.0849003639264123e+00 2.4376973078368636e-01 -5.0207273000381551e+00 + -3.2926370935386879e+00 -1.8125495931265956e-01 -5.3136581321491514e+00 + -3.5950377782100991e+00 -5.5240768184811362e-01 -5.6032367168381150e+00 + -4.0168739293056896e+00 -8.3658838790970025e-01 -5.8972543626539089e+00 + -4.5329283539485257e+00 -1.0878278785310269e+00 -6.2433313551507075e+00 + -5.1576075142719882e+00 -1.4297202606948489e+00 -6.7578019896769526e+00 + id 13713 + loc 1.9346570968627930e-01 6.6220092773437500e-01 393 + blend 0.0000000000000000e+00 + interp 4.0204633436638004e-01:2.6550544863802555e-01:2.3542703756479033e-01:2.7489224497932219e-01:1.0014477882350865e+00:2.4257546108762593e-01:1.9677482773839701e+00:3.4841966125757712e-01:2.9636119835485397e+00:4.0204231390303641e-01:3.4204732175855641e+00 + CVs 20 + -3.5296211636917385e-01 3.1349738427596224e-01 -7.0790606578760490e-02 + -6.9275028506490510e-01 6.3914966087124170e-01 -1.4717759848556980e-01 + -1.0197153683729350e+00 9.8670129990182120e-01 -2.3184826373485373e-01 + -1.3386240001442622e+00 1.3499772744585270e+00 -3.2422321027487672e-01 + -1.6647052950795977e+00 1.7164451861858843e+00 -4.2198437290872298e-01 + -2.0168895680267016e+00 2.0743009103985792e+00 -5.1810822063475825e-01 + -2.4143405340607931e+00 2.4102059963075684e+00 -6.0315406879579891e-01 + -2.8802747597145530e+00 2.7010848267115812e+00 -6.7397662744531894e-01 + -3.4383293352110940e+00 2.9168818161188130e+00 -7.4161443299148622e-01 + -4.0949332667428635e+00 3.0423334523018681e+00 -8.3590686650515478e-01 + -4.8231469498894901e+00 3.0766052158883315e+00 -9.9039994201205306e-01 + -5.5761427318195569e+00 3.0025756468235665e+00 -1.2061505480112444e+00 + -6.3157883608093774e+00 2.7854849586071051e+00 -1.4570210568599988e+00 + -7.0130738233925971e+00 2.4121180557959097e+00 -1.7364973334716385e+00 + -7.6365733556785536e+00 1.9159466673134886e+00 -2.0277834909329613e+00 + -8.1835595863722350e+00 1.3977644153156668e+00 -2.2065051685790249e+00 + -8.6929354343293816e+00 9.9176970515321616e-01 -2.1279194330087909e+00 + -9.1824951444302734e+00 7.1686273609538897e-01 -1.8789065165266767e+00 + -9.7389082062875172e+00 3.2695527029011151e-01 -1.8491012542924019e+00 + id 13714 + loc 7.5927776098251343e-01 8.4659832715988159e-01 378 + blend 0.0000000000000000e+00 + interp 3.4261080351385209e-01:2.6054640377277505e-01:1.5517979540797078e-01:2.3966902150274824e-01:1.0556621436829459e+00:3.3411935884390809e-01:1.8691216404161333e+00:2.6674163883653890e-01:2.1326569864175813e+00:2.3423941538788051e-01:2.9994584113122049e+00:3.4260737740581698e-01:3.6545269679283940e+00 + CVs 20 + 6.0807978050096922e-01 3.5227437858795391e-01 1.7008498973001662e-02 + 1.1138413700134027e+00 6.4397133446566501e-01 -1.1322000516416131e-02 + 1.6006512069475090e+00 9.1334027903139192e-01 -6.2550731254644720e-02 + 2.0974161700959448e+00 1.1921500093421586e+00 -1.0699812291859878e-01 + 2.5980681921727520e+00 1.4814563525192832e+00 -1.1292905406280440e-01 + 3.1064462939512474e+00 1.7615842788961760e+00 -5.5346954110022550e-02 + 3.6243934579871504e+00 2.0014231640550082e+00 7.9360670052864624e-02 + 4.1401641707240353e+00 2.1723253576520802e+00 2.9075347396746620e-01 + 4.6366754950863935e+00 2.2560544478170135e+00 5.6685086469230717e-01 + 5.1021154074628328e+00 2.2436867332638251e+00 8.9080701487830738e-01 + 5.5319190247393806e+00 2.1309344879755523e+00 1.2447812330955810e+00 + 5.9217503021787259e+00 1.9159026013265761e+00 1.6074271767209427e+00 + 6.2504190007336931e+00 1.6010377894170578e+00 1.9488691119966211e+00 + 6.4828191264029709e+00 1.2096750027293139e+00 2.2337598326422707e+00 + 6.6198959269246282e+00 7.7998869985741637e-01 2.4549703847282158e+00 + 6.7114037688309480e+00 3.2514387991640747e-01 2.6432234941877857e+00 + 6.8281247402590779e+00 -1.5398020745412211e-01 2.8271589772866648e+00 + 7.0146880019800673e+00 -6.2377613472426674e-01 2.9873712409276996e+00 + 7.2320486613497899e+00 -1.0155125760894510e+00 3.0867613446157511e+00 + id 13715 + loc 7.9994201660156250e-01 3.2204800844192505e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0873549888486077e-01:4.0699690726656723e-01:5.8534503829185680e-02:3.2877949364493186e-01:6.6909295999565654e-01:4.0873141152987191e-01:1.0121485048413119e+00:3.9588616200799370e-01:1.5166955334473293e+00:3.5361778216971584e-01:1.9875516154479032e+00:3.7457143947509708e-01:2.4238518460632554e+00:3.4950258026096359e-01:2.9917733947544223e+00:2.6770878453394359e-01:3.7192010843710728e+00 + CVs 20 + -7.8932608663402529e-02 2.1706938071595600e-01 2.3879457551359801e-01 + -1.8049175055527578e-01 4.0251435923309031e-01 4.4292476039232376e-01 + -2.9945723189147011e-01 5.6301007210448939e-01 6.1870408351273831e-01 + -4.3220119999366913e-01 7.0268174318382060e-01 7.6962863287214212e-01 + -5.9484350481847503e-01 8.2170968272114431e-01 8.9442718921619657e-01 + -8.0870151803395929e-01 9.2751631232268683e-01 9.8960381327550895e-01 + -1.0637778018022659e+00 1.0597819780090050e+00 1.0557881177293018e+00 + -1.3025278033511063e+00 1.2657574187447771e+00 1.0945537735216544e+00 + -1.4786774538386676e+00 1.5561370083681556e+00 1.1038736539536793e+00 + -1.5812336263904496e+00 1.9422142625059930e+00 1.0928808663857135e+00 + -1.5769822138222294e+00 2.4310715744120310e+00 1.1260220416449127e+00 + -1.4196942439581515e+00 2.9113894865414176e+00 1.2982477893934632e+00 + -1.1316854722537069e+00 3.2451060026622049e+00 1.5999546064495449e+00 + -7.5613950685641984e-01 3.3905821977356387e+00 1.9585858108424938e+00 + -3.3498191347508821e-01 3.3471608484173458e+00 2.3104087809384359e+00 + 9.9361803826203632e-02 3.1365450816881562e+00 2.6520661473019973e+00 + 5.1339431510102851e-01 2.7551457296664146e+00 3.0109282962654484e+00 + 8.3464739284453704e-01 2.1908736512881584e+00 3.3279289463928183e+00 + 9.4728378779383826e-01 1.8495458303953836e+00 3.3062587738880671e+00 + id 13716 + loc 1.1938803072553128e-04 6.6141468286514282e-01 412 + blend 0.0000000000000000e+00 + interp 5.3903816595766274e-01:4.4660671777040095e-01:9.4488587206110330e-01:5.3903277557600315e-01:1.3568287855064018e+00:4.3064519977339971e-01:1.9318079119328426e+00:4.5568421149104221e-01:2.0957571677015303e+00:2.6728582028086662e-01:2.9158031510178732e+00:3.7104261911132919e-01:3.3493863066522893e+00:3.1015226242111466e-01:3.9808779182885798e+00 + CVs 20 + 6.6984591849076824e-01 2.5334433092710257e-01 -7.7262095392129554e-02 + 1.1325180588851416e+00 3.8014161036609428e-01 -1.7514602475371430e-01 + 1.5462300529719974e+00 4.4911394586038211e-01 -2.7779182204482294e-01 + 2.0051320270911979e+00 4.9738533708188587e-01 -3.7576292872101386e-01 + 2.5015113220093421e+00 5.1635380838657352e-01 -4.5766100920240094e-01 + 3.0246624623663587e+00 5.0030444270250052e-01 -5.0945780504399973e-01 + 3.5642500706459037e+00 4.4699462200682016e-01 -5.1695604672606976e-01 + 4.1096835793212714e+00 3.5622417302846521e-01 -4.7047594173639212e-01 + 4.6409925473532869e+00 2.3236581120704991e-01 -3.6736274205323827e-01 + 5.1370347762270576e+00 8.4542762909880498e-02 -2.1193518403898193e-01 + 5.5869579593088066e+00 -8.3076308212679084e-02 -2.0766601370889926e-02 + 5.9985169298511520e+00 -2.8511874204536647e-01 1.7021125942710724e-01 + 6.3831555854790176e+00 -5.4006200298051588e-01 3.2110806244046741e-01 + 6.7346960517639491e+00 -8.3546974636360605e-01 4.2157581701632019e-01 + 7.0450978942688440e+00 -1.1414485196378064e+00 4.8848016708617981e-01 + 7.3174753749427106e+00 -1.4405458252755927e+00 5.3212690981518118e-01 + 7.5607063339420630e+00 -1.7265804691840572e+00 5.5468639129738528e-01 + 7.7827278849403889e+00 -1.9941058576650754e+00 5.6536222974123707e-01 + 7.9419565055365471e+00 -2.1218158201940316e+00 6.3171630548569391e-01 + id 13717 + loc 9.6489250659942627e-01 6.5526843070983887e-01 402 + blend 0.0000000000000000e+00 + interp 5.5432471543242379e-01:5.5431917218526949e-01:1.0304228083039535e-01:4.6651920252366491e-01:5.2264314105616339e-01:3.6707450497271116e-01:1.0084926686880509e+00:3.3849278847084713e-01:1.6614292897876575e+00:4.1054214324485672e-01:2.0111208237816722e+00:4.1320090346063237e-01:2.6170549496174593e+00:3.2393447969713624e-01:3.0722655948145139e+00:4.9812126353071062e-01:3.6183027657406956e+00 + CVs 20 + -1.7176265232788368e-01 6.3469827851014446e-02 -4.2234162825438230e-02 + -3.1469010053154162e-01 1.4580306707073984e-01 -1.0355890076207425e-01 + -4.3133725942492185e-01 2.3871522424955061e-01 -1.7699912895336686e-01 + -5.3440371789036234e-01 3.3774168352409317e-01 -2.6163623569346084e-01 + -6.2464479997401900e-01 4.4317677908311148e-01 -3.5778971308005103e-01 + -7.0818244025919164e-01 5.5478272462861866e-01 -4.6479095993544023e-01 + -7.9037414228138236e-01 6.7194334142180689e-01 -5.8025874536731104e-01 + -8.7033388776519094e-01 7.9417855382762903e-01 -7.0086679798190388e-01 + -9.4173604800738575e-01 9.2177748071996979e-01 -8.2462497243633726e-01 + -9.8860198157935508e-01 1.0513217373050008e+00 -9.5066886217344504e-01 + -9.9443803315952639e-01 1.1635936352946485e+00 -1.0717735757660622e+00 + -9.9483505244105086e-01 1.2444764830346766e+00 -1.1789272392812866e+00 + -9.5376356379323757e-01 1.3842657481086238e+00 -1.2808710875553753e+00 + -7.8844421786013186e-01 1.5654799566829969e+00 -1.4045856780123609e+00 + -5.5794699590180885e-01 1.7187624377546304e+00 -1.5993050850063142e+00 + -3.4569586485547166e-01 1.8187027371589044e+00 -1.8763918207612864e+00 + -1.8962989080559556e-01 1.8618804909076885e+00 -2.2220256943990888e+00 + -1.1611276841665075e-01 1.8496867733904907e+00 -2.6067612840764389e+00 + -1.1728127889467965e-01 1.8268548440336905e+00 -2.8367420820962352e+00 + id 13718 + loc 3.7448656558990479e-01 4.7111847996711731e-01 401 + blend 0.0000000000000000e+00 + interp 3.8230492127160126e-01:3.2728619835667178e-01:3.4188998060301101e-01:3.8230109822238856e-01:9.9951533717458285e-01:2.6658979572656943e-01:1.4455442448380311e+00:3.6831264420952259e-01:2.0000018423414110e+00:3.1026879634411969e-01:2.5937423125060453e+00:3.0137466338454866e-01:3.1071854595298198e+00:3.7025725523270231e-01:3.8816096505846800e+00 + CVs 20 + -2.2886401702723932e-01 1.6557315725513005e-01 1.9024768110694021e-01 + -4.5398553212873477e-01 3.6026474373333600e-01 3.3815078508126162e-01 + -6.5723230815732625e-01 5.7446645869287094e-01 4.6396607766815678e-01 + -8.3722101392562642e-01 8.0997334852395764e-01 5.8116028202815873e-01 + -1.0160469104206740e+00 1.0718311277725454e+00 6.8571088648348355e-01 + -1.2250478826261733e+00 1.3606013995805348e+00 7.8325679949381066e-01 + -1.4846521709453631e+00 1.6736038191714846e+00 9.0748306237007614e-01 + -1.7973469990644173e+00 1.9987081800142728e+00 1.1091320168251098e+00 + -2.1472096026170759e+00 2.3039413746751842e+00 1.4348688284703988e+00 + -2.5028855586289822e+00 2.5457644676075653e+00 1.9085989083812305e+00 + -2.8313459626773545e+00 2.6869031515744939e+00 2.5245282494259431e+00 + -3.1139177216469287e+00 2.6953857918728099e+00 3.2543552163997354e+00 + -3.3574070806098018e+00 2.5439218657896903e+00 4.0460629240797283e+00 + -3.5656409493356294e+00 2.2275782749933075e+00 4.8302648934303898e+00 + -3.7290421628907193e+00 1.7890344903970443e+00 5.5434185153476339e+00 + -3.9041407965158581e+00 1.3246481820472888e+00 6.1385895188066470e+00 + -4.2144055026846168e+00 9.5691395295544324e-01 6.5768898056313336e+00 + -4.6463347084052247e+00 7.2167600847272073e-01 6.8584616485846928e+00 + -4.9459747126045279e+00 3.8873048340102201e-01 7.1796901019902206e+00 + id 13719 + loc 2.8481453657150269e-01 9.2720645666122437e-01 380 + blend 0.0000000000000000e+00 + interp 4.6223533708715614e-01:4.4088860987245038e-01:4.8307830968100773e-01:4.6223071473378530e-01:1.0440424154523131e+00:4.5369320942576452e-01:1.8328791810009575e+00:2.6085443313860701e-01:2.1752303376094453e+00:3.4603613972118141e-01:3.0048022164010706e+00:3.7069365472403415e-01:3.9371495046311873e+00 + CVs 20 + -2.9160463546449999e-01 2.6658865869521076e-01 -5.8244443140479607e-01 + -5.7158064490707849e-01 4.6698760761851665e-01 -1.0738835414254126e+00 + -8.4248736957239012e-01 6.2976008444861264e-01 -1.5606299440388316e+00 + -1.1130820037276679e+00 7.6411534132679293e-01 -2.0784056527819641e+00 + -1.3805013821205525e+00 8.5664932815824024e-01 -2.6231615886325295e+00 + -1.6445582837162207e+00 8.8722456968557384e-01 -3.1830989827091023e+00 + -1.9001475856177112e+00 8.3564355562302484e-01 -3.7373161737520553e+00 + -2.1390985871338555e+00 6.9288580936226118e-01 -4.2594551798694154e+00 + -2.3660177921632575e+00 4.6550454584833023e-01 -4.7244733149780984e+00 + -2.5936662731257929e+00 1.6775735179534967e-01 -5.1060723700542088e+00 + -2.8173243320578258e+00 -1.8128572448013713e-01 -5.3746518376551542e+00 + -3.0201358783714802e+00 -5.5423193286581851e-01 -5.5160265236298738e+00 + -3.2147865369423330e+00 -9.2055653416392014e-01 -5.5717134327071314e+00 + -3.4516609666402283e+00 -1.2746467885533836e+00 -5.6510115529031815e+00 + -3.7642950538588016e+00 -1.6192299880085210e+00 -5.8306272524047493e+00 + -4.1569187338883236e+00 -1.9032848680872125e+00 -6.0839802886619037e+00 + -4.6121611092031962e+00 -2.0430410767054830e+00 -6.3130092494244963e+00 + -5.0530821685793095e+00 -2.0350066871673111e+00 -6.4537262691712076e+00 + -5.3872744511985644e+00 -2.1416039975075027e+00 -6.6574712817043995e+00 + id 13720 + loc 2.5174996256828308e-01 9.8639123141765594e-02 399 + blend 0.0000000000000000e+00 + interp 4.6517021567545291e-01:4.2785952437609626e-01:3.8398554291929254e-01:4.0194348824950765e-01:1.0567525171677115e+00:4.5091003635348720e-01:1.9235421976708631e+00:3.7163305756554105e-01:2.6656357723900395e+00:4.6516556397329617e-01:3.1533323315607342e+00:2.9276204932042649e-01:3.8179194192917842e+00 + CVs 20 + -1.3763573653595357e-01 3.4042135011326574e-01 2.3916269691751374e-01 + -3.1605862259255679e-01 6.7755209219952905e-01 4.4577563774071710e-01 + -5.3658470706614891e-01 1.0059310207169978e+00 6.2673681013669669e-01 + -7.9298531006975626e-01 1.3221829618033343e+00 7.9825249156971045e-01 + -1.0760137878214366e+00 1.6245893306306209e+00 9.8247842411861863e-01 + -1.3802647365680043e+00 1.9060247052530224e+00 1.1976670394726967e+00 + -1.7038883136660734e+00 2.1476932520376062e+00 1.4607133057986141e+00 + -2.0447779403405653e+00 2.3093158624467987e+00 1.7898226011291214e+00 + -2.4046886939958614e+00 2.3425884151608098e+00 2.1694741752029638e+00 + -2.7763288652123355e+00 2.2208913492120277e+00 2.5633668028748247e+00 + -3.1237301275620171e+00 1.9389468232616551e+00 2.9424414908914804e+00 + -3.4215649709231917e+00 1.5480306014983700e+00 3.2852774229996271e+00 + -3.7000825063453719e+00 1.1330663320281138e+00 3.5923789517232967e+00 + -4.0264210127429338e+00 7.8403596553894372e-01 3.8666783471436363e+00 + -4.4611015868734585e+00 6.0420643298443211e-01 4.0892430583025865e+00 + -5.0012045453074450e+00 6.7801632191291605e-01 4.1753721176666208e+00 + -5.5319211025609052e+00 1.0513979201124364e+00 3.9698735768663895e+00 + -5.8660920674117634e+00 1.5522903498158920e+00 3.5637583449542687e+00 + -6.3611278264524991e+00 1.6468788543354900e+00 3.5880549386760028e+00 + id 13721 + loc 7.1871656179428101e-01 8.4344708919525146e-01 382 + blend 0.0000000000000000e+00 + interp 4.1898226137601402e-01:3.0489871648955008e-01:5.0876671958262032e-01:2.7035739352183824e-01:1.1361642459877421e+00:3.3447453726248799e-01:1.9983997685434809e+00:2.5243095465625737e-01:2.7741817338776604e+00:2.9952671198766118e-01:3.4696965458602116e+00:4.1897807155340028e-01:3.9995975062892768e+00 + CVs 20 + 1.1058842783789062e+00 1.3877739989913224e-01 -5.4160643926258489e-01 + 1.8110333416546021e+00 1.7436455912615115e-01 -9.0325887655630654e-01 + 2.4191117811449332e+00 1.9604808266010418e-01 -1.2036239646686120e+00 + 3.0653126142204519e+00 2.4447321847775644e-01 -1.4938660961324708e+00 + 3.7612007776801337e+00 3.0269531770107783e-01 -1.7853607238410873e+00 + 4.5151703948681643e+00 3.4102282998339578e-01 -2.0920853072567831e+00 + 5.3202204452283031e+00 3.1975896330171855e-01 -2.4245784936713526e+00 + 6.1631812275032853e+00 1.9426779705769737e-01 -2.7868562853780561e+00 + 7.0326988160638724e+00 -9.0582939075314783e-02 -3.1695137219110951e+00 + 7.8926237976928508e+00 -5.7649244041443604e-01 -3.5480928339814302e+00 + 8.6830795115569863e+00 -1.2802828005976647e+00 -3.8931869032492976e+00 + 9.3201167651509245e+00 -2.1962446468349510e+00 -4.1806097850354149e+00 + 9.7224305354996954e+00 -3.2678651507258212e+00 -4.3923016395219863e+00 + 9.8829392262777418e+00 -4.3631427921691888e+00 -4.5424958486960056e+00 + 9.9151346927721296e+00 -5.3488511267578183e+00 -4.6809112205360552e+00 + 9.9495026397945026e+00 -6.1761268297066874e+00 -4.8550177201565790e+00 + 1.0026800701715336e+01 -6.8415737671197254e+00 -5.1119627452594409e+00 + 1.0112575766677008e+01 -7.3569958633950128e+00 -5.4745377113570939e+00 + 1.0207069609349958e+01 -7.9269684492453694e+00 -5.6826532616761583e+00 + id 13722 + loc 2.8003066778182983e-01 3.4320205450057983e-02 396 + blend 0.0000000000000000e+00 + interp 4.2778804568719003e-01:3.1643494528776522e-01:6.5709512824258354e-01:2.7039559542302977e-01:1.2785773567832996e+00:4.2778376780673316e-01:2.0074345634465827e+00:4.0772463120556252e-01:2.5152614680505692e+00:3.6371030955117079e-01:3.0138499635729672e+00:4.0542820127512125e-01:3.9999402449335264e+00 + CVs 20 + -2.8912141997601792e-01 2.0708430957149176e-01 -5.1649719699174146e-01 + -5.4324973704387647e-01 3.0419863093393640e-01 -9.1221037486614431e-01 + -7.8227107777120186e-01 3.5205793414695108e-01 -1.2902386372430339e+00 + -1.0031462022754156e+00 3.7231863481195077e-01 -1.6865161388838952e+00 + -1.1928515943879689e+00 3.5988864673834453e-01 -2.0914249645003307e+00 + -1.3443073514112975e+00 3.1455062513482090e-01 -2.4932053075180147e+00 + -1.4546054954435728e+00 2.3590698224666129e-01 -2.8811576548562070e+00 + -1.5219008849319160e+00 1.2541973203688817e-01 -3.2440148950300594e+00 + -1.5428101808556840e+00 -1.1499402985086338e-02 -3.5730358001331024e+00 + -1.5161907582619574e+00 -1.6622229560674207e-01 -3.8677686413370109e+00 + -1.4532390164632476e+00 -3.3212972336140845e-01 -4.1325112349007327e+00 + -1.3761685288179113e+00 -5.0665216226100163e-01 -4.3659481009586187e+00 + -1.3031315371458541e+00 -6.8582099029247456e-01 -4.5661036861664872e+00 + -1.2442695134846000e+00 -8.6785242192682044e-01 -4.7417938857248805e+00 + -1.2099158616184835e+00 -1.0494520683373800e+00 -4.9025342115088391e+00 + -1.2146128950853494e+00 -1.2125050153345192e+00 -5.0480691189176623e+00 + -1.2700864758253883e+00 -1.3463135374454458e+00 -5.1748259546007951e+00 + -1.3729361990805065e+00 -1.4866376750871604e+00 -5.2705670198248828e+00 + -1.4860044822773781e+00 -1.7886262512518663e+00 -5.2453884613656072e+00 + id 13723 + loc 1.6896642744541168e-01 4.0773510932922363e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4430468778749577e-01:3.6333485209233285e-01:1.8292038875265182e-01:2.6778866524866107e-01:8.9857014324479934e-01:3.9760793950378437e-01:1.6530907321559800e+00:3.2769888659571617e-01:2.0805186249027150e+00:3.5328690748612818e-01:2.7807938358399311e+00:2.8190801429317153e-01:3.1083609114570465e+00:4.4430024474061791e-01:3.9645262882509487e+00 + CVs 20 + 9.6333063040317496e-02 3.3986067574526940e-01 -4.6334545632392407e-02 + 1.2716878926910624e-01 6.2576906513535335e-01 -9.6755509744361201e-02 + 1.3010738430148444e-01 8.9504556028277715e-01 -1.4896438759863978e-01 + 1.2535557778787926e-01 1.1603237078732662e+00 -2.0060009239160304e-01 + 1.1056058717156569e-01 1.4175018214563688e+00 -2.5575682434355196e-01 + 8.3618299776056171e-02 1.6655448354644722e+00 -3.1913318368001842e-01 + 3.5430694451466960e-02 1.9070676469487400e+00 -3.9779045437925947e-01 + -5.5729379042244176e-02 2.1400261852071631e+00 -4.9951450582226897e-01 + -2.2166839374296310e-01 2.3406689851889788e+00 -6.2083270940554880e-01 + -4.7497529453941356e-01 2.4604109013025162e+00 -7.3658616734550320e-01 + -7.8540680657151107e-01 2.4555955620830185e+00 -8.1182451419430879e-01 + -1.0949162752174426e+00 2.3115043310434555e+00 -8.2397475232240402e-01 + -1.3506030707420433e+00 2.0504782569910396e+00 -7.9027229788002840e-01 + -1.5223823165211336e+00 1.7283601035424643e+00 -7.5901566733172321e-01 + -1.5982956080767139e+00 1.4223837864412356e+00 -7.6227967582921541e-01 + -1.5885985894797638e+00 1.1617923386718807e+00 -7.9001563781551054e-01 + -1.5586468181227742e+00 8.5548594627136088e-01 -7.9544220472818639e-01 + -1.7026039091051033e+00 5.7504749965577162e-01 -7.5004332036910426e-01 + -1.7052628163240671e+00 7.7444879657200627e-01 -8.7458508774244703e-01 + id 13724 + loc 1.1168795824050903e-01 9.5151531696319580e-01 415 + blend 0.0000000000000000e+00 + interp 2.9642122412273603e-01:1.7143488831943982e-01:5.3860535516806318e-01:1.7230184646532029e-01:9.8952790124384538e-01:1.6301641854503471e-01:1.3119435485414888e+00:1.5893693549811450e-01:2.7156690648396338e+00:2.1103534473485197e-01:3.1460037737398947e+00:2.9641825991049481e-01:3.9298264620241183e+00 + CVs 20 + 4.5567684902703098e-01 2.6018103756272803e-01 1.7608535290898258e-01 + 7.8863182433242907e-01 4.2662889303003793e-01 2.9071998479543798e-01 + 1.0821024846108853e+00 5.5604826134493324e-01 4.1120689932123866e-01 + 1.3835993530861057e+00 6.7899259840117199e-01 5.7725373931270707e-01 + 1.6858308549136123e+00 7.8686817766644435e-01 7.9073630927717820e-01 + 1.9769566154254663e+00 8.7106852423558379e-01 1.0515527231132222e+00 + 2.2457975572020477e+00 9.2530999224056965e-01 1.3577712349379840e+00 + 2.4848578066310369e+00 9.4582480068401620e-01 1.7032910575070590e+00 + 2.6876642545751710e+00 9.3159970748307697e-01 2.0756841879487653e+00 + 2.8512663378116674e+00 8.8474976313224607e-01 2.4601025806917241e+00 + 2.9964947707043863e+00 8.0364780587990370e-01 2.8551015105536308e+00 + 3.1827038511261927e+00 6.6881547242119543e-01 3.2792740578506665e+00 + 3.4715615296539362e+00 4.4882257068687048e-01 3.7226982421853463e+00 + 3.8546985871656716e+00 1.4348789795193539e-01 4.1082032304617639e+00 + 4.2646531984979701e+00 -2.0664998727619155e-01 4.3736495432978861e+00 + 4.6693011822280193e+00 -5.7484329695004854e-01 4.5169953410295527e+00 + 5.0715226843719901e+00 -9.5472595935646787e-01 4.5451169916887064e+00 + 5.4607379640073326e+00 -1.3275688726459083e+00 4.4603738179803791e+00 + 5.6412753309422152e+00 -1.5001703994132805e+00 4.4094864151274447e+00 + id 13725 + loc 6.5433835983276367e-01 7.4945169687271118e-01 374 + blend 0.0000000000000000e+00 + interp 4.0772825085492442e-01:3.0058824226713127e-01:7.6903498500516898e-01:3.7216373322872826e-01:1.7869127659573647e+00:3.0617149586842246e-01:2.9045629541648346e+00:4.0772417357241592e-01:3.7771991759194199e+00 + CVs 20 + -6.5670668941188426e-01 3.3001193708212834e-01 -2.3652570215670068e-01 + -1.1427994442925473e+00 5.4812393491793854e-01 -3.9094716483765540e-01 + -1.5897750095322298e+00 7.1577082258666525e-01 -5.1558071091328150e-01 + -2.0441780046248792e+00 8.7101436318611791e-01 -6.3870662521300359e-01 + -2.4981309106029079e+00 1.0319514980064721e+00 -7.7149234487844787e-01 + -2.9554363602744935e+00 1.2049022961061411e+00 -9.2823809250685052e-01 + -3.4308063576755723e+00 1.3678316171291476e+00 -1.1270267832029190e+00 + -3.9266481908201927e+00 1.4810469112749733e+00 -1.3865460805783165e+00 + -4.4229998810205986e+00 1.5086191319017286e+00 -1.7211818990613823e+00 + -4.8898784112029023e+00 1.4283615609136506e+00 -2.1272730755243421e+00 + -5.3096648573050080e+00 1.2293124022798632e+00 -2.5770412730294954e+00 + -5.6744852200964333e+00 9.0561686037040001e-01 -3.0252976296472389e+00 + -5.9630750170607154e+00 4.5692284428269847e-01 -3.4193918013813844e+00 + -6.1547903983225112e+00 -1.0566823831836825e-01 -3.7183594615671369e+00 + -6.2718030769638577e+00 -7.5251578079448311e-01 -3.9252381129038909e+00 + -6.3797692286416279e+00 -1.4602329627281732e+00 -4.0865910022276717e+00 + -6.5485852108893354e+00 -2.2061519832272327e+00 -4.2228741988658705e+00 + -6.7963447689697318e+00 -2.9141551049009000e+00 -4.2971301890516873e+00 + -7.0028511917078680e+00 -3.4542825073337728e+00 -4.2735217570303226e+00 + id 13726 + loc 9.4924986362457275e-01 1.5098848938941956e-01 373 + blend 0.0000000000000000e+00 + interp 3.9343441375219673e-01:3.9343047940805925e-01:3.0100871816621932e-01:1.5901988311811618e-01:1.0890906912869778e+00:2.8448866723089922e-01:2.0044457450079904e+00:2.3911254377618849e-01:2.8076393429728941e+00:2.0924760625071967e-01:3.3229296146963301e+00:2.7371188745898728e-01:3.9850750943737143e+00 + CVs 20 + 1.6945832845909120e-01 3.6830087053079469e-01 1.3178353103487647e-01 + 4.2381826916493404e-01 7.2486427269944220e-01 2.5645047198730320e-01 + 7.9223505518193349e-01 9.8195936101211034e-01 3.5559848909480946e-01 + 1.2267969776644883e+00 1.1212235189230570e+00 4.1097380481321782e-01 + 1.6659846937767337e+00 1.2115198723622354e+00 4.1786307904662134e-01 + 2.0839185098491826e+00 1.3134007905279765e+00 4.0361616779412046e-01 + 2.4866047402139362e+00 1.4671823268553119e+00 4.0991502000062252e-01 + 2.8744492761510747e+00 1.6903487680774414e+00 4.6348712315689794e-01 + 3.2312072900361120e+00 1.9865005253641190e+00 5.8178331214037748e-01 + 3.5434938357164261e+00 2.3367698246750006e+00 7.7056129557439923e-01 + 3.8153242670366248e+00 2.6965125260259408e+00 1.0222625952611120e+00 + 4.0517545487834585e+00 3.0196731126811209e+00 1.3319949862577984e+00 + 4.2492695060402541e+00 3.2709477802841591e+00 1.7116057428159122e+00 + 4.3927857628887619e+00 3.4148057321633725e+00 2.1787271778450359e+00 + 4.4606151525399840e+00 3.4167997901039415e+00 2.6875233541498504e+00 + 4.4686360776873775e+00 3.3462947400529748e+00 3.0768259047443363e+00 + 4.4051953986567467e+00 3.3917362882671038e+00 3.2775391881222218e+00 + 4.2893748128250770e+00 3.4091385002356924e+00 3.4223482114275354e+00 + 4.4631020659613494e+00 3.1439198221421183e+00 3.4626292952613111e+00 + id 13727 + loc 5.4293662309646606e-01 7.5952547788619995e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8501953898685063e-01:4.6627924160097345e-01:1.3117332539759607e-01:4.3030381119193029e-01:6.7178110707344496e-01:3.8134628655187697e-01:1.0680223726917590e+00:3.7787693513639120e-01:1.8947708333319691e+00:3.0955769038475028e-01:2.2361787022815660e+00:4.1696438528327284e-01:2.8603685146757503e+00:4.8501468879146076e-01:3.0603744917747240e+00:3.6135150363589869e-01:3.9044827450744064e+00 + CVs 20 + 2.4933959088671989e-01 2.1783241758432495e-01 -2.0137557085642016e-01 + 4.7096524715570653e-01 4.3870830791163540e-01 -3.9873480292564573e-01 + 6.8693890152693315e-01 6.2041859962324430e-01 -5.6597981388868279e-01 + 9.0524476709704293e-01 7.4150818767853865e-01 -6.9647473076626909e-01 + 1.1360511951698784e+00 8.2248136319919873e-01 -8.0437360697932581e-01 + 1.3992586429634903e+00 9.0466334588280550e-01 -9.0746428022956738e-01 + 1.6902127244481924e+00 1.0260149935773684e+00 -1.0116657937798015e+00 + 1.9728765825359620e+00 1.2078131704708999e+00 -1.1108621168655921e+00 + 2.2044606844728003e+00 1.4377623292426556e+00 -1.1974864879461915e+00 + 2.3649150692009786e+00 1.6802123972477336e+00 -1.2705443936211012e+00 + 2.4625218525768711e+00 1.9201731780272384e+00 -1.3412402815345104e+00 + 2.4920297317910443e+00 2.1593500222754951e+00 -1.4498632778147365e+00 + 2.4449681682245208e+00 2.3752442269078227e+00 -1.6147139151952175e+00 + 2.3283176655038824e+00 2.5560456563434970e+00 -1.8133194205381082e+00 + 2.1477587728736660e+00 2.6929372242616680e+00 -2.0235941662050232e+00 + 1.9022044866289771e+00 2.7684341230742828e+00 -2.2752848300621205e+00 + 1.6136928092295311e+00 2.7154521375659648e+00 -2.6263429485481846e+00 + 1.3922245276755678e+00 2.4835860263154679e+00 -3.0198808489569609e+00 + 1.3460835893062106e+00 2.3846400393150615e+00 -3.1289684414936803e+00 + id 13728 + loc 9.5228171348571777e-01 5.4505777359008789e-01 375 + blend 0.0000000000000000e+00 + interp 4.1258576297799043e-01:3.6231863083587845e-01:1.6762151582090934e-02:2.6627690444915969e-01:9.9775718441039651e-01:2.1277441414507764e-01:2.0117048475701775e+00:3.8172684383998023e-01:2.9558083275135676e+00:4.1258163712036067e-01:3.7576407098815663e+00 + CVs 20 + -5.2167463398174108e-01 3.8511116739502038e-01 -1.1137681435225757e-01 + -1.0130504688613167e+00 6.4277617799435494e-01 -1.3651484460251195e-01 + -1.5384409429884383e+00 7.4924082751708121e-01 -7.2533381686046894e-02 + -2.1169577962468926e+00 7.7318908076545956e-01 5.9586722216522614e-02 + -2.7268858180105418e+00 8.0974129315042342e-01 2.1199751810032164e-01 + -3.3507715137526679e+00 9.0559573777458624e-01 3.1458356171716328e-01 + -3.9724780493368161e+00 1.0610025511230912e+00 3.0885668076753148e-01 + -4.5683447211686286e+00 1.2671461738974974e+00 1.6961062864075127e-01 + -5.1149027697991123e+00 1.5123939125802373e+00 -1.0529691388164286e-01 + -5.5966760487339764e+00 1.7720132781042335e+00 -5.0429486493169617e-01 + -6.0131670913432478e+00 2.0086744602908597e+00 -1.0169472707972518e+00 + -6.3613857528491318e+00 2.1658401782345402e+00 -1.6434410414723557e+00 + -6.6155941269692047e+00 2.1706023283928118e+00 -2.3721739570761513e+00 + -6.7277397229462688e+00 1.9694598355827413e+00 -3.1492719495072690e+00 + -6.6601554016140030e+00 1.5488861872214028e+00 -3.8750233077663880e+00 + -6.4888811014023124e+00 9.2364965668984889e-01 -4.4078674859887110e+00 + -6.4614767824165833e+00 1.3933528499040904e-01 -4.6055021346179768e+00 + -6.7142370164827749e+00 -5.8320531374219042e-01 -4.4527848434494519e+00 + -6.7941580856336881e+00 -1.1512579285284583e+00 -4.5015026337018584e+00 + id 13729 + loc 3.8245940208435059e-01 6.9698649644851685e-01 400 + blend 0.0000000000000000e+00 + interp 4.3668854189857786e-01:3.2769768474019123e-01:1.7949230716713149e-01:4.3668417501315893e-01:9.3560727281709954e-01:4.3064917827601829e-01:1.5299612462146330e+00:2.8172811925940011e-01:2.4521439665006612e+00:4.0091495292399915e-01:3.1647064601416073e+00:3.8900104610545616e-01:3.8013505591975729e+00 + CVs 20 + -1.8039996026442348e-01 3.4693259544106492e-01 -1.8601545224609106e-01 + -3.4336117536484256e-01 6.7398801829456845e-01 -3.7158322302273250e-01 + -4.8693386249044995e-01 9.8162438173582245e-01 -5.7994510031940505e-01 + -6.1603650095999496e-01 1.2707517465410565e+00 -8.1896207001071175e-01 + -7.3707695123844674e-01 1.5397654384888104e+00 -1.0872006810611996e+00 + -8.5442894805600167e-01 1.7872997899711129e+00 -1.3827903824814309e+00 + -9.6922265119146578e-01 2.0120838887415693e+00 -1.7060926219486838e+00 + -1.0792133221110072e+00 2.2109391722574112e+00 -2.0607742560377118e+00 + -1.1787567360358830e+00 2.3775652635545410e+00 -2.4517277987524109e+00 + -1.2586055707776842e+00 2.5034026730879231e+00 -2.8816659685030950e+00 + -1.3076671234048476e+00 2.5794002390505844e+00 -3.3492068996808433e+00 + -1.3227680357730449e+00 2.5986095199573471e+00 -3.8471283306780761e+00 + -1.3161869381468509e+00 2.5564738558089610e+00 -4.3673556605497117e+00 + -1.3112872512425171e+00 2.4399157508077018e+00 -4.9107848179085947e+00 + -1.3395608560204493e+00 2.2265975572301122e+00 -5.4657993776300566e+00 + -1.4323433984940630e+00 1.9165914730368383e+00 -5.9943701511421246e+00 + -1.6049584281106200e+00 1.5476771653641239e+00 -6.4691879255486420e+00 + -1.8448223232950185e+00 1.1590833049960159e+00 -6.8911455701486082e+00 + -2.0467264264759191e+00 8.0360838076738306e-01 -7.2729337046883558e+00 + id 13730 + loc 3.3778712153434753e-01 4.7238031029701233e-01 409 + blend 0.0000000000000000e+00 + interp 3.8753475911797780e-01:2.9884825342567706e-01:5.9434693532396388e-03:3.8753088377038664e-01:6.4638325717514422e-01:2.5500743497677913e-01:1.2741655212330283e+00:3.2035971873112745e-01:2.0042992718851469e+00:2.8694052193579189e-01:2.6650162379735249e+00:2.8710678353532115e-01:3.1690613691688299e+00 + CVs 20 + -1.7164446114433918e-01 2.0759381495046114e-01 -4.1276659973751634e-01 + -3.1903270252694926e-01 3.6303653122206381e-01 -7.4765522136463802e-01 + -4.3589520941071674e-01 4.9990747689069004e-01 -1.0692580124674318e+00 + -5.1887857225909972e-01 6.3110952236353701e-01 -1.3973250248531728e+00 + -5.7312894000274350e-01 7.5286074752889520e-01 -1.7263338291100399e+00 + -6.0529396653773493e-01 8.6539057279833875e-01 -2.0532769809637945e+00 + -6.2153113961409590e-01 9.7746174101788907e-01 -2.3815907545128887e+00 + -6.2695531986203923e-01 1.0986054797442726e+00 -2.7228239425109990e+00 + -6.2436760752971632e-01 1.2254898104246588e+00 -3.0914683436723802e+00 + -6.1532766520112392e-01 1.3443960626061546e+00 -3.4988912334254563e+00 + -5.9936713068358904e-01 1.4404638315165743e+00 -3.9543456639465329e+00 + -5.7175522943791524e-01 1.4956440264390649e+00 -4.4645783247366309e+00 + -5.2319202208705895e-01 1.4857441357675436e+00 -5.0249331843208900e+00 + -4.4021803737127968e-01 1.3874549361304611e+00 -5.6144601354509982e+00 + -3.0186826570007830e-01 1.1874127148305047e+00 -6.2024589511759700e+00 + -8.3127285365690806e-02 8.8165386345832042e-01 -6.7510987368485980e+00 + 2.2431188228198223e-01 4.7926330118126304e-01 -7.2043843975150619e+00 + 5.9436698931861875e-01 1.8895364973362749e-02 -7.4943276845546514e+00 + 9.5720182696874700e-01 -3.9418876404502123e-01 -7.5412290369596127e+00 + id 13731 + loc 4.9164029955863953e-01 5.7078087329864502e-01 395 + blend 0.0000000000000000e+00 + interp 4.4383860870476155e-01:3.4601622029019902e-01:1.3359144144731161e-04:4.2485150833850233e-01:9.4597680319099198e-01:2.8945168484335365e-01:1.2314204470808086e+00:3.6143803228693722e-01:1.9270395624798473e+00:4.4383417031867450e-01:2.1716038368030688e+00:4.1789992872981974e-01:2.8196017303525638e+00:2.5772827975389617e-01:3.0510010180485359e+00 + CVs 20 + 4.7286714612697028e-01 6.2023956649805978e-02 -4.2504683039679159e-01 + 8.7530196036589325e-01 5.8260426589539227e-02 -7.7225525169929132e-01 + 1.2572884290863637e+00 3.3219354144763291e-02 -1.0849531518451379e+00 + 1.6342356687578696e+00 1.7309093468883541e-03 -1.3752971119514501e+00 + 1.9992996336766735e+00 -3.6326348333546976e-02 -1.6406795176497435e+00 + 2.3468920414163486e+00 -8.0365396343822670e-02 -1.8841966592488875e+00 + 2.6719321880036246e+00 -1.3127441209228530e-01 -2.1097070575262356e+00 + 2.9684464449087815e+00 -1.9335948219516608e-01 -2.3170413421645066e+00 + 3.2313943014479456e+00 -2.7246572497709964e-01 -2.5059334372799995e+00 + 3.4582107213805120e+00 -3.7396043201347173e-01 -2.6817497539974813e+00 + 3.6497535177306961e+00 -5.0253600181917712e-01 -2.8541734744817813e+00 + 3.8118982975300377e+00 -6.6280085283082002e-01 -3.0328811836687182e+00 + 3.9514863987191546e+00 -8.6017550696428202e-01 -3.2231374408999409e+00 + 4.0701123333843467e+00 -1.1004975587045700e+00 -3.4207799566013772e+00 + 4.1639068001284345e+00 -1.3837204243856724e+00 -3.6151668401179533e+00 + 4.2276821537690434e+00 -1.7002638604927927e+00 -3.7882572906224050e+00 + 4.2593363701349141e+00 -2.0343759373510455e+00 -3.9177292466949063e+00 + 4.2670165318757682e+00 -2.3743091770381155e+00 -3.9941949687658140e+00 + 4.3256232156292800e+00 -2.7862242677664550e+00 -4.1123891914255095e+00 + id 13732 + loc 1.9253300130367279e-01 2.4283780157566071e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1071677103232934e-01:2.6537145082953573e-01:1.3000990793689249e-01:4.1071266386461902e-01:1.0310696739524807e+00:2.6473324439142726e-01:1.5513439317836266e+00:3.2774086458701951e-01:2.1555150272956967e+00:2.6845714665138054e-01:3.0075848281830382e+00:3.1391712597586313e-01:3.7413850235736916e+00 + CVs 20 + -2.5257688554804103e-01 3.3402744455363487e-01 -2.5160422583257991e-01 + -4.9518729920881160e-01 6.6363209972237114e-01 -4.9264984185274896e-01 + -7.6716595875239157e-01 9.8973976547956666e-01 -7.1469989726705674e-01 + -1.0833820193996864e+00 1.3036694902198165e+00 -9.0767653121383407e-01 + -1.4458803824651445e+00 1.5893935087751270e+00 -1.0628237448272329e+00 + -1.8506641112392244e+00 1.8273390822662285e+00 -1.1740645046465121e+00 + -2.2865244300263821e+00 1.9988967637963213e+00 -1.2400368066356473e+00 + -2.7361706236591474e+00 2.0897974198072267e+00 -1.2644254518688807e+00 + -3.1781352067106807e+00 2.0922959918364317e+00 -1.2542989366662918e+00 + -3.5893954119628586e+00 2.0067262836136424e+00 -1.2197382729274990e+00 + -3.9501526635488866e+00 1.8426555077851676e+00 -1.1738637658821471e+00 + -4.2513331260247460e+00 1.6164152298427854e+00 -1.1303395211988525e+00 + -4.4905286848614141e+00 1.3458432089381644e+00 -1.0992850558889449e+00 + -4.6628123299350301e+00 1.0512346508844930e+00 -1.0853699192104396e+00 + -4.7602892740128686e+00 7.5781458275756519e-01 -1.0862934868227725e+00 + -4.7769242138826238e+00 4.9619356452051999e-01 -1.0920290093370086e+00 + -4.7206715510852515e+00 2.9398506684361281e-01 -1.0902391829673173e+00 + -4.6224525940612038e+00 1.2145573214349170e-01 -1.0861157224200522e+00 + -4.4976913245356620e+00 -2.4610478554042120e-01 -1.1386580659389742e+00 + id 13733 + loc 7.4285417795181274e-01 6.7792731523513794e-01 403 + blend 0.0000000000000000e+00 + interp 4.3213837629825402e-01:3.0248187490873146e-01:8.3188892371253120e-01:4.3213405491449108e-01:1.0328618247443659e+00:3.6225718593919998e-01:1.7904291276640967e+00:2.8946004494164973e-01:2.2069805868568424e+00:2.7915917786298278e-01:3.0016040339147541e+00:2.8302117550048445e-01:3.9857953356621785e+00 + CVs 20 + -6.4049896906142975e-02 3.0483614555300062e-02 -1.1998381824255989e-01 + -1.1948890900666373e-01 7.3816346619888118e-02 -2.2242645377146261e-01 + -1.8488689459014165e-01 1.0874827550312680e-01 -3.1385148879934910e-01 + -2.6729081540362826e-01 1.2801626431402138e-01 -3.9512483276906779e-01 + -3.6384863521584182e-01 1.3120087257981039e-01 -4.6247106728594645e-01 + -4.7132643529977336e-01 1.1905230009974938e-01 -5.1220897586003467e-01 + -5.8622404485100121e-01 9.3192342658058924e-02 -5.4101406293227683e-01 + -7.0411501642114649e-01 5.5533934597042978e-02 -5.4640229894029113e-01 + -8.1896915882983712e-01 7.5720896574770213e-03 -5.2754968099734212e-01 + -9.2384605059195912e-01 -4.9266916460390109e-02 -4.8605027433009668e-01 + -1.0119340604855596e+00 -1.1324038970304590e-01 -4.2607853968456977e-01 + -1.0775084052692692e+00 -1.8226527438900630e-01 -3.5431193918380088e-01 + -1.1165769040293552e+00 -2.5430497396339213e-01 -2.7964746155979825e-01 + -1.1279437996615347e+00 -3.2776206099964228e-01 -2.1264538544296618e-01 + -1.1141268476604211e+00 -4.0186811413635742e-01 -1.6438457543455345e-01 + -1.0815616084332973e+00 -4.7684060937710165e-01 -1.4513042248958874e-01 + -1.0391849645884095e+00 -5.5326279346766971e-01 -1.6328985009184094e-01 + -9.9867975593477842e-01 -6.3095408542854825e-01 -2.2395327025263292e-01 + -9.7584926880872502e-01 -6.8365369075762661e-01 -2.3550326309468558e-01 + id 13734 + loc 5.5607402324676514e-01 6.6412830352783203e-01 412 + blend 0.0000000000000000e+00 + interp 4.1560355512371211e-01:3.5252406046275803e-01:2.2587006244765284e-03:3.0421329535669800e-01:9.9864685876448211e-01:3.9716294196383134e-01:1.4923401732366031e+00:4.1559939908816090e-01:1.9703925247138132e+00:3.5757287686568900e-01:2.5088016724723610e+00:4.0692867814838074e-01:3.4025235291965004e+00 + CVs 20 + 7.2647863124886780e-01 1.0719546844739297e-01 -2.2890244054100423e-01 + 1.2049783502748250e+00 8.9114642962668189e-02 -4.6028178641609679e-01 + 1.6360762620266673e+00 2.8538007856677539e-02 -6.9590589889793142e-01 + 2.0972474364389377e+00 -4.5048275257432047e-02 -9.3557978138737985e-01 + 2.5853681907248895e+00 -1.3496165074985589e-01 -1.1672088441596127e+00 + 3.0964150741257228e+00 -2.4261402545719057e-01 -1.3741763325018523e+00 + 3.6207228472072943e+00 -3.6769472961588601e-01 -1.5390576907853222e+00 + 4.1425795420713749e+00 -5.0892601933702464e-01 -1.6498749872751388e+00 + 4.6466644558436556e+00 -6.6364172375025365e-01 -1.7011894318956176e+00 + 5.1185708147372901e+00 -8.2792553634211230e-01 -1.6933873671869626e+00 + 5.5326980365374530e+00 -1.0016602689580738e+00 -1.6430440747045783e+00 + 5.8551528114074012e+00 -1.1920995107876589e+00 -1.5915988715949863e+00 + 6.0856209019406204e+00 -1.4016780955700243e+00 -1.5675929586076713e+00 + 6.2732704021071557e+00 -1.6291340450087843e+00 -1.5527198731184861e+00 + 6.4538893769997312e+00 -1.8797165296468983e+00 -1.5272736498838415e+00 + 6.6237879731161886e+00 -2.1501961645354495e+00 -1.4975553335776781e+00 + 6.7752696106696861e+00 -2.4316135334067859e+00 -1.4783093692033051e+00 + 6.9111488369048164e+00 -2.7182293248075324e+00 -1.4759389546318427e+00 + 7.0776678795356744e+00 -2.9975387090548873e+00 -1.4450564534644035e+00 + id 13735 + loc 1.8286579847335815e-01 7.1081387996673584e-01 380 + blend 0.0000000000000000e+00 + interp 4.6557915201614297e-01:3.4314204144261135e-01:9.1086024353848094e-01:2.9952176402697828e-01:1.3214342556395793e+00:3.6088747322280895e-01:1.9901483080432678e+00:4.6557449622462282e-01:2.5996126347990050e+00:3.3475984470746623e-01:3.1595377086311034e+00:3.8019746849988278e-01:3.9314336001770034e+00 + CVs 20 + -4.1152794977131235e-01 2.5712936170394896e-01 -3.0505510926586077e-01 + -7.9140528943837107e-01 4.5439336891605842e-01 -5.0816184277495913e-01 + -1.1782950389473612e+00 6.3025853174820345e-01 -6.8999735892573333e-01 + -1.5871011024319839e+00 8.0963305923993856e-01 -8.9760913283207611e-01 + -2.0103186493792680e+00 9.9585100594638010e-01 -1.1454490599754465e+00 + -2.4380240467821155e+00 1.1822044014167641e+00 -1.4445947646456265e+00 + -2.8679585713209272e+00 1.3515330742406908e+00 -1.8039691799916835e+00 + -3.2978681895238497e+00 1.4797108078417460e+00 -2.2279144971982259e+00 + -3.7152758308194804e+00 1.5438393735468772e+00 -2.7094554573653347e+00 + -4.1017930546100132e+00 1.5322989454904974e+00 -3.2300418559282473e+00 + -4.4502035973882785e+00 1.4371416429902089e+00 -3.7689909081396591e+00 + -4.7635872857991171e+00 1.2444296867126186e+00 -4.3128683513419608e+00 + -5.0377134491364597e+00 9.3645118559233875e-01 -4.8448533553466779e+00 + -5.2603356373303978e+00 5.3150361586271488e-01 -5.3375250627651267e+00 + -5.4351188418134448e+00 1.1022476658089042e-01 -5.7847365726221867e+00 + -5.5856717114195185e+00 -2.3618842165602594e-01 -6.2059944206268192e+00 + -5.7371120769578843e+00 -4.5095325026323163e-01 -6.5972175030422804e+00 + -5.9058825004571007e+00 -5.3751716409689188e-01 -6.9344770135499409e+00 + -6.1170093179035110e+00 -7.6433114679958880e-01 -7.3386077791239526e+00 + id 13736 + loc 7.0386087894439697e-01 5.6775033473968506e-01 415 + blend 0.0000000000000000e+00 + interp 4.3359949115558799e-01:2.6814979717172249e-01:3.5917521897546600e-01:3.2828865001212515e-01:1.6336207139457724e+00:4.3359515516067648e-01:2.2956787125484244e+00:3.2291234267963353e-01:3.1593411265380373e+00 + CVs 20 + 3.2514189196566134e-01 1.6321651152358860e-01 -1.0711096964116096e-03 + 5.8597660871072521e-01 2.6361685445752558e-01 -2.6410310212709620e-02 + 8.2864397992848882e-01 3.3958819694725034e-01 -4.5983816034202929e-02 + 1.0761899158491766e+00 4.1047156388789374e-01 -4.2453335226449174e-02 + 1.3270797197938702e+00 4.7357416050138113e-01 -1.4625214773623108e-02 + 1.5793955301415523e+00 5.2643918909686382e-01 3.8752343775133036e-02 + 1.8304065939738026e+00 5.6738865308679631e-01 1.1979267224936974e-01 + 2.0769951675097191e+00 5.9520914813791537e-01 2.2999854714642404e-01 + 2.3168182718594226e+00 6.0897575399147186e-01 3.6849339270140913e-01 + 2.5483273953192702e+00 6.0828532376597266e-01 5.3294132970884833e-01 + 2.7682536605161010e+00 5.9364540677882549e-01 7.2041125476554568e-01 + 2.9713204164459848e+00 5.6550965963154876e-01 9.2213864067331086e-01 + 3.1605336762276721e+00 5.2075916942646794e-01 1.1166456363381019e+00 + 3.3521575732254392e+00 4.5241257984092753e-01 1.2770609109359679e+00 + 3.5612708434572702e+00 3.5472006232172903e-01 1.3868516463395104e+00 + 3.7858302148461842e+00 2.2775633077978941e-01 1.4408140064147934e+00 + 4.0078037429597488e+00 7.8702509560627743e-02 1.4362157222121197e+00 + 4.2082604332099613e+00 -8.0983129156998679e-02 1.3712086064168070e+00 + 4.4645834934630919e+00 -2.7196171686721859e-01 1.3009631031931082e+00 + id 13737 + loc 9.4996905326843262e-01 6.6605895757675171e-01 393 + blend 0.0000000000000000e+00 + interp 5.2599941324381061e-01:2.6400045756711682e-01:2.2948791332449670e-01:4.1383798393381965e-01:1.0077937269371913e+00:4.4048658306676147e-01:1.8953114663796951e+00:5.2599415324967824e-01:2.0519739993056438e+00:1.4002983268425631e-01:3.0010400767282452e+00 + CVs 20 + -1.5212843907752632e-01 2.1350760898023574e-01 -1.6185187812477578e-01 + -2.9474039397424101e-01 4.4996821769043882e-01 -3.4800551272417279e-01 + -4.3055989070293832e-01 7.0936123747125124e-01 -5.3469666761673151e-01 + -5.6380778469690007e-01 9.8498938480650400e-01 -7.1199489201158328e-01 + -6.9995499857978705e-01 1.2653296427251053e+00 -8.8448189959194234e-01 + -8.4048291351891358e-01 1.5307608776178001e+00 -1.0617072923844917e+00 + -9.8450711958092918e-01 1.7617345465261960e+00 -1.2543653451942469e+00 + -1.1349892102941923e+00 1.9483602944587877e+00 -1.4679017447970959e+00 + -1.2930376971639626e+00 2.0803548107091583e+00 -1.6994713556585810e+00 + -1.4343976268545893e+00 2.1258862633588267e+00 -1.9332124829248019e+00 + -1.5037597922036823e+00 2.0513357501086737e+00 -2.1292504004667534e+00 + -1.4683615971420323e+00 1.8824003655095649e+00 -2.2351048902215553e+00 + -1.3648149009105099e+00 1.6902287705988219e+00 -2.2477149461582435e+00 + -1.2464107446261954e+00 1.5034120876424470e+00 -2.2200846683461943e+00 + -1.1410545994696824e+00 1.2936659931013170e+00 -2.2045099523600031e+00 + -1.0724770332256999e+00 1.0046824156837504e+00 -2.2338190309560439e+00 + -1.1088374599158246e+00 5.6100134439156479e-01 -2.3430405462411112e+00 + -1.3441849017724332e+00 -1.5282776321411395e-02 -2.5151149408390836e+00 + -1.3986975410579630e+00 -3.4707009836978198e-01 -2.5595461084648981e+00 + id 13738 + loc 5.1950627565383911e-01 3.3219984173774719e-01 376 + blend 0.0000000000000000e+00 + interp 3.9395379909074718e-01:2.6227203800822901e-01:6.0739954398741203e-01:3.9394985955275630e-01:1.1018760741566704e+00:2.7267497240760463e-01:1.9995470024119695e+00:3.1233587354988379e-01:3.0115083266434510e+00:2.7149839429888784e-01:3.8379114268405465e+00 + CVs 20 + 2.1417836463617482e-01 3.5810683484917682e-01 -6.4609541991493602e-01 + 2.8756001567692624e-01 5.9110928047232081e-01 -1.2270163320344569e+00 + 2.4760545427734010e-01 6.9698865494222795e-01 -1.8074226932699777e+00 + 1.4534984118547617e-01 7.5340139899613146e-01 -2.4156785645202268e+00 + 5.0982728455829074e-02 8.2851254655819340e-01 -3.0337876361266898e+00 + 3.6260355715674097e-02 9.3360303244810594e-01 -3.6442224758089194e+00 + 1.4672571341672147e-01 1.0477981761278632e+00 -4.2354566670709106e+00 + 3.9441494993574344e-01 1.1536101716842313e+00 -4.7860962618165859e+00 + 7.6410130034684376e-01 1.2314159689039628e+00 -5.2688868292936268e+00 + 1.2182418382075242e+00 1.2519960917630286e+00 -5.6719912106366577e+00 + 1.7122010179893059e+00 1.1849789022533841e+00 -5.9921731099921800e+00 + 2.1955941414230811e+00 1.0080947502696391e+00 -6.2115706828541688e+00 + 2.6128865478603194e+00 7.2708118395456189e-01 -6.3090297747410871e+00 + 2.9353863793992696e+00 3.8549532338997228e-01 -6.2864430594367526e+00 + 3.1604019812392572e+00 2.6890746991923731e-02 -6.1679819995901770e+00 + 3.2820508337524781e+00 -3.4626980216343028e-01 -6.0282054713816429e+00 + 3.2506081829429352e+00 -7.6883068359479312e-01 -6.0094886166580022e+00 + 3.0209903920660168e+00 -1.1672830248409416e+00 -6.2017700003316385e+00 + 3.1113767156684933e+00 -1.7059875186448736e+00 -6.3048689709623851e+00 + id 13739 + loc 5.7881563901901245e-01 4.4721183180809021e-01 382 + blend 0.0000000000000000e+00 + interp 4.0281535769990873e-01:3.2259554801158630e-01:1.5093470902470141e-01:4.0281132954633175e-01:9.9203932255550642e-01:3.1133855771987518e-01:1.8748633523956013e+00:3.1410324383925398e-01:2.5509630251058146e+00:3.1071153930551060e-01:3.1004857196720983e+00 + CVs 20 + -9.9553869632180492e-01 2.7185130715017053e-01 4.7746042604583222e-01 + -1.6676503625806358e+00 3.9675003354528382e-01 8.4087440402518687e-01 + -2.2195623756755971e+00 4.5354259808742137e-01 1.1543599335220565e+00 + -2.7495479808204109e+00 4.6640065584845813e-01 1.4579545943317784e+00 + -3.2615891110941493e+00 4.3475580732158875e-01 1.7527951694369570e+00 + -3.7683530097108977e+00 3.6564268243141762e-01 2.0415787304088417e+00 + -4.2855271078103749e+00 2.6757168107646723e-01 2.3275916683944393e+00 + -4.8272857050896416e+00 1.3914506636775292e-01 2.6144185612220334e+00 + -5.3984768295839594e+00 -4.0231164199478808e-02 2.9078470565277055e+00 + -5.9822622409453832e+00 -3.0088210018416861e-01 3.2154043764912017e+00 + -6.5400491111377779e+00 -6.5561922059632360e-01 3.5366756119058236e+00 + -7.0362995765209035e+00 -1.1088922349014001e+00 3.8673776523806902e+00 + -7.4405172800329167e+00 -1.6687324145184350e+00 4.1939657258696945e+00 + -7.7206664285388937e+00 -2.3190735325591980e+00 4.4984559606314569e+00 + -7.8834869700713144e+00 -3.0102496985882077e+00 4.7815018325409548e+00 + -7.9880663543342667e+00 -3.6847945597154519e+00 5.0596229024302808e+00 + -8.0872497283372340e+00 -4.2779084481527372e+00 5.3450556031041323e+00 + -8.1874122262455558e+00 -4.7403826100415891e+00 5.6449290433284141e+00 + -8.3071043737945161e+00 -5.2980113623376033e+00 5.9394940026966871e+00 + id 13740 + loc 2.0621101558208466e-01 5.4632252454757690e-01 396 + blend 0.0000000000000000e+00 + interp 4.6168649336625933e-01:2.5261482783042744e-01:1.1492117414117486e-02:3.7499789866769806e-01:6.8288412311670177e-01:3.1696544932366422e-01:1.1450369803177463e+00:3.7605585194807678e-01:1.9107206044890090e+00:4.6168187650132569e-01:2.2052746119205633e+00:3.9450498791787980e-01:2.8761988074027292e+00:3.8738358364605385e-01:3.1959249795279558e+00 + CVs 20 + 8.7137206651060728e-01 1.0624495820577140e-01 -3.7381157610815485e-01 + 1.5069613198200924e+00 5.4134293094896646e-02 -6.8920888668391878e-01 + 2.0944985937464304e+00 -3.4285354900438825e-02 -9.6921485863933321e-01 + 2.6885942974738137e+00 -1.2652887814387703e-01 -1.2161435156332860e+00 + 3.2748840872301983e+00 -2.2604962840078913e-01 -1.4265588981059230e+00 + 3.8395160719124251e+00 -3.2291638688149815e-01 -1.6116366798213564e+00 + 4.3746635183347085e+00 -4.0803096739142619e-01 -1.7871321278378443e+00 + 4.8811078845763927e+00 -4.8139573298681637e-01 -1.9644640840291163e+00 + 5.3681641826435813e+00 -5.5176112460309357e-01 -2.1520073224644269e+00 + 5.8441951844301183e+00 -6.3668024859676708e-01 -2.3645909914701475e+00 + 6.3110625095766455e+00 -7.6052126510381357e-01 -2.6176906121461148e+00 + 6.7684914831164642e+00 -9.4756627470979993e-01 -2.9129011657726620e+00 + 7.2101203518803665e+00 -1.2153338737078294e+00 -3.2394482138743452e+00 + 7.6145986050346863e+00 -1.5663655859508960e+00 -3.5832351134766283e+00 + 7.9517548758153822e+00 -1.9845437817328295e+00 -3.9296004036827008e+00 + 8.1995333180489212e+00 -2.4522292320002568e+00 -4.2617072492989383e+00 + 8.3491366852224509e+00 -2.9595969050069049e+00 -4.5613103710628753e+00 + 8.4040316619374753e+00 -3.4752382402111879e+00 -4.8144152384247629e+00 + 8.4513968041488408e+00 -3.7695344535416617e+00 -5.0080147779551947e+00 + id 13741 + loc 3.1524220108985901e-01 3.1308534741401672e-01 399 + blend 0.0000000000000000e+00 + interp 4.5566946139786735e-01:2.6082735010904895e-01:7.2920536657631807e-01:3.6572490146776426e-01:1.4872681376575023e+00:3.0697020010092751e-01:2.0240892834069464e+00:4.3695791626270231e-01:2.6766522099458872e+00:4.5566490470325338e-01:3.0004003900898777e+00:3.1863222914785561e-01:3.3699908864755015e+00:4.4977218224257282e-01:3.9717637252551130e+00 + CVs 20 + -1.7582033229978186e-01 4.1325292704063010e-01 1.0690692865501972e-01 + -4.0034911797578826e-01 8.2173117565295595e-01 2.0192016699706786e-01 + -6.7712705198450984e-01 1.2112272605910896e+00 2.7641410318140835e-01 + -9.9203931834048442e-01 1.5803085562980361e+00 3.4943327779899719e-01 + -1.3322776178136528e+00 1.9318163255006795e+00 4.5059443754023198e-01 + -1.6964208815261850e+00 2.2579828678920268e+00 6.0280246386183745e-01 + -2.0905265675043698e+00 2.5365156321767022e+00 8.2313375688797941e-01 + -2.5184734485455271e+00 2.7276130626862956e+00 1.1261549282887393e+00 + -2.9683245723262868e+00 2.7739913086912926e+00 1.5132813268556202e+00 + -3.4018852460281406e+00 2.6151188724803149e+00 1.9568047627858409e+00 + -3.7536523770372683e+00 2.2278257433108442e+00 2.3921851343885772e+00 + -3.9763521594051343e+00 1.6969659205721890e+00 2.7465640056810554e+00 + -4.1101618387155279e+00 1.1603872961616710e+00 3.0132564150565733e+00 + -4.2487095230657630e+00 7.0673946151261113e-01 3.2312216221284236e+00 + -4.4978479477621125e+00 4.0579115209779248e-01 3.4242673584317220e+00 + -4.9188870015368300e+00 3.0453622851907802e-01 3.5406226265230902e+00 + -5.4873897537260641e+00 4.4797977046490534e-01 3.4099926403897833e+00 + -5.9719440453793329e+00 8.2263001902674182e-01 2.9413137834563945e+00 + -6.2990654283118364e+00 7.2409194248476227e-01 2.9423297719830384e+00 + id 13742 + loc 4.6451979875564575e-01 1.9476762413978577e-01 407 + blend 0.0000000000000000e+00 + interp 4.9210706429137641e-01:2.5867883855871859e-01:1.1408887583921457e-01:3.4012684228618251e-01:9.9551004689974265e-01:3.2523470427626650e-01:1.9998164111065577e+00:4.9210214322073353e-01:3.9917927271719380e+00 + CVs 20 + -4.6272372540314417e-02 3.9252907080400723e-01 -3.7527445095208084e-01 + -7.9400941300769495e-02 6.2214469083471546e-01 -5.2954354159060446e-01 + -1.0019855216491470e-01 7.9539572927173641e-01 -6.1678566201457419e-01 + -1.0814795277528225e-01 9.5655965225166739e-01 -7.1346616629283788e-01 + -1.0035844340834904e-01 1.1034100489715948e+00 -8.1630403631896153e-01 + -7.3794643114698300e-02 1.2346253096820670e+00 -9.2365579839032486e-01 + -2.4105586468494214e-02 1.3476514909046944e+00 -1.0345316169180898e+00 + 5.3184134870602973e-02 1.4359378873850450e+00 -1.1457734628878864e+00 + 1.5847034489059864e-01 1.4904090774087730e+00 -1.2508088762137595e+00 + 2.8724729701841339e-01 1.5050498106654140e+00 -1.3428720260060478e+00 + 4.3344976094250270e-01 1.4786494915561650e+00 -1.4182332420957229e+00 + 5.9085906636700236e-01 1.4124344085067673e+00 -1.4752421205367456e+00 + 7.5257449100914331e-01 1.3067228966620419e+00 -1.5111076504206311e+00 + 9.1333634555919485e-01 1.1582174811844146e+00 -1.5222894094195278e+00 + 1.0755477538638485e+00 9.6366104151330323e-01 -1.5115742195827484e+00 + 1.2485979606800675e+00 7.2978638454760580e-01 -1.4922724325890619e+00 + 1.4391879076437699e+00 4.7139107749359177e-01 -1.4787695260445297e+00 + 1.6442900458279446e+00 2.0188775500010106e-01 -1.4817270183351428e+00 + 1.7987790979930260e+00 -6.7417275195513771e-03 -1.4864349933824836e+00 + id 13743 + loc 2.4674229323863983e-01 7.8541111946105957e-01 402 + blend 0.0000000000000000e+00 + interp 4.6618434423933497e-01:4.1181504132910463e-01:7.9500051402005667e-02:2.8488926119468977e-01:9.9704571646522133e-01:4.3216215635405958e-01:1.3810615392258252e+00:4.6617968239589258e-01:2.0845012288904163e+00:4.2806443720652015e-01:2.9044657065595167e+00:3.9943939244784438e-01:3.5160301203452589e+00 + CVs 20 + -2.8572506157789529e-02 1.7801929031482211e-01 -2.1928327298377862e-01 + 1.2624459528142673e-02 3.5603258501311791e-01 -4.6264486906598801e-01 + 7.5834941277347023e-02 5.1514574376521938e-01 -7.2511329160119664e-01 + 1.5159192128510632e-01 6.4690051932753234e-01 -9.9720371050789347e-01 + 2.2175459416998314e-01 7.6400931192703114e-01 -1.2850831855447660e+00 + 2.6284311139437566e-01 8.7591483937584580e-01 -1.5968024037418143e+00 + 2.5180181491275350e-01 9.8328925759245167e-01 -1.9353759942428508e+00 + 1.7239412352032074e-01 1.0778307716898159e+00 -2.2942744627227127e+00 + 1.8343557424727708e-02 1.1493333631007996e+00 -2.6594031285960820e+00 + -2.0416952589434467e-01 1.1854016341209221e+00 -3.0136146028866646e+00 + -4.8233246943810637e-01 1.1790109032568477e+00 -3.3418251726908244e+00 + -7.9981137811121095e-01 1.1330006943643309e+00 -3.6339754064427159e+00 + -1.1543719622842006e+00 1.0588119563540626e+00 -3.8863448433534038e+00 + -1.5778370748494557e+00 9.7982761700010934e-01 -4.0948539135169622e+00 + -2.1046005236763072e+00 9.0826643431979504e-01 -4.2375242862930698e+00 + -2.6939989936607986e+00 8.1811973672577420e-01 -4.2821479028945237e+00 + -3.2509803378315567e+00 6.6563990851897514e-01 -4.2310569248329024e+00 + -3.7141931837416564e+00 4.6182741631416513e-01 -4.1323595901832526e+00 + -4.0124604338693715e+00 3.7970010251512870e-01 -4.1528878093590853e+00 + id 13744 + loc 3.3408498764038086e-01 5.0293701887130737e-01 1078 + blend 0.0000000000000000e+00 + interp 3.2574703608510858e-01:2.7761845493906073e-01:3.3757019368833019e-01:2.9692257017496004e-01:1.5514887342890205e+00:2.9663178608285246e-01:2.2453781518878499e+00:2.7760030142170383e-01:3.0820878313886206e+00:3.2574377861474774e-01:3.9031482412057947e+00 + CVs 20 + 5.5748024585522186e-02 2.8472253497392908e-01 8.6971966792709507e-02 + 1.2262590045373785e-01 5.4391232331096162e-01 1.2578076700465152e-01 + 1.9997118485821302e-01 7.8785883351083774e-01 1.3009145459060967e-01 + 2.8732931495047664e-01 1.0281597032758287e+00 1.1513369706951676e-01 + 3.8525487719054552e-01 1.2606241337386943e+00 8.0912845309230375e-02 + 4.9420478424652714e-01 1.4830571883394170e+00 2.8808784800860354e-02 + 6.1540119584827724e-01 1.6953931856585145e+00 -4.2975717086482734e-02 + 7.5094778097539672e-01 1.8951598298757055e+00 -1.4268646471424729e-01 + 8.9887722298618256e-01 2.0712822008471035e+00 -2.8299752209849072e-01 + 1.0460455138550950e+00 2.2035275829185261e+00 -4.7215704631421240e-01 + 1.1750029116875305e+00 2.2768673479011445e+00 -7.0471680252180302e-01 + 1.2627562616664418e+00 2.2783944990932969e+00 -9.5855603677430323e-01 + 1.2785622343296239e+00 2.1931097736708600e+00 -1.1846052337704771e+00 + 1.2210791587836252e+00 2.0172631277499957e+00 -1.3231677813316929e+00 + 1.1224744068417460e+00 1.7352556679447508e+00 -1.3255557104456668e+00 + 9.9513546119789964e-01 1.2716432144745444e+00 -1.1978161507366882e+00 + 7.8577069483507589e-01 5.5010060513738901e-01 -1.1688208756240688e+00 + 4.3585654674830476e-01 -2.6449765421719085e-01 -1.6912808968498423e+00 + 3.9700258864874938e-01 -2.0349547956656144e-01 -1.7535234373417750e+00 + id 13745 + loc 8.8859790563583374e-01 8.1564851105213165e-02 380 + blend 0.0000000000000000e+00 + interp 5.1906975708055925e-01:4.2194810308458391e-01:1.0017205057448915e+00:4.2452607221393773e-01:1.2411984919449635e+00:5.1906456638298848e-01:1.8257774185821072e+00:4.5116403391325655e-01:2.0287746410460121e+00:4.5201176505661622e-01:2.5463741900360013e+00:3.0342304164175216e-01:3.0478777974271720e+00:3.8363052201680170e-01:3.9746109692875637e+00 + CVs 20 + 5.7720231452080695e-01 2.4023806732537278e-01 7.0585448723744049e-01 + 1.0183643193519674e+00 3.7934304189018392e-01 1.2091395445571049e+00 + 1.4245768749052847e+00 4.8563635371304381e-01 1.6718220548358766e+00 + 1.8362956759573874e+00 5.8793092931788471e-01 2.1710237202340368e+00 + 2.2447151868574493e+00 6.7131497401298734e-01 2.7097268929069496e+00 + 2.6468103396515348e+00 7.0585202305983208e-01 3.2805756540422308e+00 + 3.0365144845169243e+00 6.5519951211998984e-01 3.8645323937016354e+00 + 3.3956460866986014e+00 4.9117078348110654e-01 4.4310321488324051e+00 + 3.7025965367854550e+00 2.0640274800452030e-01 4.9472278108164680e+00 + 3.9466011540779649e+00 -1.8642025979109089e-01 5.3888760788204255e+00 + 4.1222201587731773e+00 -6.5683202804351160e-01 5.7348829916979520e+00 + 4.2226540540983244e+00 -1.1559069273660261e+00 5.9673188961050290e+00 + 4.2513191528584011e+00 -1.6397217256230650e+00 6.0924012880951066e+00 + 4.2308050589923649e+00 -2.1122234460043345e+00 6.1463760741982902e+00 + 4.1920221177915167e+00 -2.6196698528134372e+00 6.1750188967459687e+00 + 4.1647885314220918e+00 -3.1880525204215622e+00 6.2252760594405583e+00 + 4.1786972476417574e+00 -3.8090251181589125e+00 6.3346108281184277e+00 + 4.2563616867676686e+00 -4.4348920619932057e+00 6.5016778989657027e+00 + 4.3241817740237796e+00 -4.8291530037896022e+00 6.6633168388941098e+00 + id 13746 + loc 2.4343313276767731e-01 4.7315385937690735e-01 409 + blend 0.0000000000000000e+00 + interp 3.4988355858075482e-01:3.2035971873112745e-01:2.6549150120686038e-03:3.0233819083845326e-01:6.0734180598334542e-01:2.4839555685852605e-01:1.8143201259641486e+00:3.4988005974516900e-01:2.6571890542823819e+00:2.6258252941602594e-01:3.3287622228882130e+00 + CVs 20 + -2.7694029697107153e-01 2.3208972718832624e-01 -4.4343077398486991e-01 + -4.8743054074449582e-01 4.4013378013560833e-01 -8.4471090037562613e-01 + -6.7099098818448133e-01 6.5860575662442056e-01 -1.2709275527804209e+00 + -8.6324854132378726e-01 8.8658333947988011e-01 -1.7417781335286004e+00 + -1.1068778561447001e+00 1.0942319937554912e+00 -2.2407976253589288e+00 + -1.4313248836523271e+00 1.2430517252874169e+00 -2.7388538828453477e+00 + -1.8289300674302946e+00 1.2985133486935605e+00 -3.2000261940624251e+00 + -2.2580930112753337e+00 1.2441017069655482e+00 -3.5957108342869355e+00 + -2.6724088998433428e+00 1.0848613127422386e+00 -3.9172719238760263e+00 + -3.0384913680818721e+00 8.4136901750040627e-01 -4.1687768990002052e+00 + -3.3305173836216491e+00 5.3446950136760085e-01 -4.3609143090003748e+00 + -3.5279432541418219e+00 1.5779012656130531e-01 -4.5148869075172646e+00 + -3.6420674023068207e+00 -3.0480824396925055e-01 -4.6580741906714245e+00 + -3.7355581878859776e+00 -8.4960017717599090e-01 -4.8197568618041338e+00 + -3.8911524727399489e+00 -1.4345970861582202e+00 -5.0209377283128394e+00 + -4.1598493538619428e+00 -1.9710336463738307e+00 -5.2658503238034875e+00 + -4.5216401624269293e+00 -2.4051283869714473e+00 -5.5616338917939832e+00 + -4.9303114597748863e+00 -2.7681670090375472e+00 -5.9395865165492978e+00 + -5.3849241985792728e+00 -3.1485665410573529e+00 -6.4542233413976628e+00 + id 13747 + loc 3.7119889259338379e-01 7.8802770376205444e-01 378 + blend 0.0000000000000000e+00 + interp 3.7911838181140517e-01:2.9038486739815317e-01:2.7834653648996299e-01:2.5715884892314717e-01:9.9949066567662959e-01:3.7911459062758707e-01:1.9290235298358778e+00:2.3651577673954796e-01:2.8757462320219815e+00:3.2846589397424769e-01:3.5923947450277440e+00 + CVs 20 + 5.0858374731548128e-01 3.6510493311227543e-01 2.3488509167523436e-01 + 9.6167390748813641e-01 6.7559826080048002e-01 4.3642741203773677e-01 + 1.4246299707750065e+00 9.5504927748817603e-01 6.3356571432760378e-01 + 1.9117788988940627e+00 1.2202538546687340e+00 8.5187876171114196e-01 + 2.4007955540854091e+00 1.4611296714466864e+00 1.1076144304852789e+00 + 2.8804013648062767e+00 1.6515496632230597e+00 1.4120961642836731e+00 + 3.3414516665639136e+00 1.7587710046183369e+00 1.7636980363715333e+00 + 3.7676698889602180e+00 1.7611086380284535e+00 2.1459816265961908e+00 + 4.1474077302387453e+00 1.6541352216649747e+00 2.5345019059974399e+00 + 4.4815740633356320e+00 1.4438078693852940e+00 2.9044390758828529e+00 + 4.7682880026176049e+00 1.1407472820453037e+00 3.2292829757599577e+00 + 4.9908255768500061e+00 7.6517325899093880e-01 3.4806099088599041e+00 + 5.1357200513268877e+00 3.4893566200387305e-01 3.6445044935939857e+00 + 5.2271958402499985e+00 -8.3660920540293837e-02 3.7342631484574627e+00 + 5.3222960190604365e+00 -5.3752487927008552e-01 3.7772651982818810e+00 + 5.4727609937731900e+00 -1.0246476843507555e+00 3.7992323843516962e+00 + 5.7125509412242117e+00 -1.5312967871323631e+00 3.8073680419603617e+00 + 6.0233387059551777e+00 -1.9926236670895054e+00 3.7798247340499369e+00 + 6.2550186201162337e+00 -2.2867474530047951e+00 3.6778007270528232e+00 + id 13748 + loc 7.4218648672103882e-01 4.4186291098594666e-01 379 + blend 0.0000000000000000e+00 + interp 4.4244120499453599e-01:4.0724198333834644e-01:8.1830435631640164e-03:2.9172212458403352e-01:9.6534126307897739e-01:3.3601982789268076e-01:1.8063588231757486e+00:4.0158292891315278e-01:2.0787777454781375e+00:4.4243678058248603e-01:2.6592157524732172e+00:4.2536062991411999e-01:2.9974004894675623e+00:4.0222877204041957e-01:3.4194739620334156e+00 + CVs 20 + 4.3348788338923122e-01 3.3947370167711688e-01 -2.2191402473528837e-01 + 8.4054071705076461e-01 6.1919020885105214e-01 -4.3929099918061715e-01 + 1.2624478106564301e+00 8.5244027353898433e-01 -6.9035723602227439e-01 + 1.7190819932175843e+00 1.0732528423063694e+00 -9.7197325727412220e-01 + 2.2097418837853615e+00 1.2997675191249332e+00 -1.2460926624860724e+00 + 2.7401085947703256e+00 1.5179621032688120e+00 -1.4721905718721544e+00 + 3.3148675365563829e+00 1.6984232849787138e+00 -1.6213168613327504e+00 + 3.9220328657475365e+00 1.8160481094857821e+00 -1.6791480220372865e+00 + 4.5324543644941278e+00 1.8477632465346472e+00 -1.6503869471112258e+00 + 5.1112545362242638e+00 1.7693406862375500e+00 -1.5657063506084408e+00 + 5.6243377295625123e+00 1.5584911590853006e+00 -1.4691261569531766e+00 + 6.0349409394421940e+00 1.2099112351308778e+00 -1.3920609556027457e+00 + 6.3387577032581461e+00 7.7078803426060860e-01 -1.3422313730390316e+00 + 6.6228326693287496e+00 3.2308883705865199e-01 -1.2994466871891461e+00 + 6.9982962563515745e+00 -7.3420915701075895e-02 -1.2374501594108129e+00 + 7.4953837042801954e+00 -3.6773796631825428e-01 -1.1825697624968208e+00 + 8.0670975091455297e+00 -5.2552797849323296e-01 -1.2024190984467196e+00 + 8.6379077684326422e+00 -5.8643864370763943e-01 -1.2678642896895649e+00 + 9.1508461193307973e+00 -7.4116005940646357e-01 -1.2102085595858298e+00 + id 13749 + loc 5.8023703098297119e-01 2.8379455208778381e-01 373 + blend 0.0000000000000000e+00 + interp 3.0087286058122431e-01:3.0086985185261850e-01:1.6982777195043597e-02:2.3791890208135513e-01:7.5594968402611895e-01:2.7061128262880507e-01:1.4840692025396058e+00:2.8603268861902753e-01:2.4356936727581555e+00:2.4151474044687099e-01:3.4457991556788925e+00 + CVs 20 + 2.6084107296107212e-01 4.5254060154426817e-01 4.5109797292921541e-02 + 5.4289957798865018e-01 8.5141751327226245e-01 1.1390193794353985e-01 + 8.1442038922511406e-01 1.1557268344926273e+00 2.1046182627258153e-01 + 1.0306717980371212e+00 1.3865891796278462e+00 3.1634645941709683e-01 + 1.1854994748876027e+00 1.5612047193448100e+00 3.7744881299933242e-01 + 1.3280400624583717e+00 1.6839530327898806e+00 3.8980730922385320e-01 + 1.5197759586289634e+00 1.7904924556507433e+00 3.8613327323720387e-01 + 1.7846367098742608e+00 1.9142510892361098e+00 4.0710299306715086e-01 + 2.0990757292908118e+00 2.0726736020741066e+00 4.8534956662702400e-01 + 2.4157815065745698e+00 2.2556289594552119e+00 6.3175389950523408e-01 + 2.6920469067008623e+00 2.4246654660804903e+00 8.3190642555031047e-01 + 2.8958494686431564e+00 2.5254993621885200e+00 1.0444605440297043e+00 + 3.0047239203701022e+00 2.5197335354104129e+00 1.1883210256247021e+00 + 3.0235014140772356e+00 2.4439421434326967e+00 1.1555717580674676e+00 + 2.9897008160136291e+00 2.4422614176899420e+00 8.9767986346263950e-01 + 2.8947725614489057e+00 2.5851721497800662e+00 5.9796620541815626e-01 + 2.6875818074191358e+00 2.6816175580428840e+00 4.4093154995666106e-01 + 2.5061955418966781e+00 2.5129361697798145e+00 4.1185524557378539e-01 + 2.6076283536558651e+00 1.9696490589000839e+00 4.0680952570710083e-01 + id 13750 + loc 3.3348748087882996e-01 9.4077676534652710e-01 395 + blend 0.0000000000000000e+00 + interp 4.4402660663372640e-01:4.4042066551842873e-01:2.0259569353067197e-01:3.2907879728166456e-01:1.0091281334889368e+00:3.1643494528776522e-01:1.6704033483042242e+00:3.4038222641363580e-01:2.4322945364010025e+00:4.4402216636766006e-01:2.9977810863013907e+00:3.6209461737103110e-01:3.6775998721087992e+00 + CVs 20 + 5.1200339208598167e-01 2.1565166816754186e-01 -2.6910393925536541e-01 + 9.1850500881053876e-01 3.5376179192801277e-01 -5.2607676090013933e-01 + 1.2998012771034058e+00 4.6550189251293722e-01 -7.9555910568417154e-01 + 1.6906126073949592e+00 5.7169913881509493e-01 -1.0895928565434745e+00 + 2.0837427083792295e+00 6.6475405058041659e-01 -1.4052248218518097e+00 + 2.4686247559038490e+00 7.3842703640189133e-01 -1.7404287350946341e+00 + 2.8363169738900909e+00 7.8792899224511226e-01 -2.0940402881476960e+00 + 3.1847124762368715e+00 8.0680882971366297e-01 -2.4636981923293755e+00 + 3.5118188906056633e+00 7.8649393787920885e-01 -2.8431286182871656e+00 + 3.8054509909318783e+00 7.2158035364683282e-01 -3.2215678606217377e+00 + 4.0525241055505319e+00 6.1241923935163944e-01 -3.5899332426911115e+00 + 4.2541751608236904e+00 4.5711889823717322e-01 -3.9477584691386829e+00 + 4.4159116969965018e+00 2.4928591318747362e-01 -4.2974450782038822e+00 + 4.5305627592822617e+00 -5.6649747337882417e-03 -4.6312127193715460e+00 + 4.5947636280995177e+00 -2.8841160934064991e-01 -4.9340564498484802e+00 + 4.6170333200292273e+00 -5.9001272148290651e-01 -5.2023026907684802e+00 + 4.6074179133434257e+00 -9.1557450574837329e-01 -5.4402003761676738e+00 + 4.5688152148589056e+00 -1.2597965970941831e+00 -5.6436811210417064e+00 + 4.4929153109664783e+00 -1.5889786904467940e+00 -5.7928753902112389e+00 + id 13751 + loc 7.4999436736106873e-02 3.1179493665695190e-01 415 + blend 0.0000000000000000e+00 + interp 4.3302170637900317e-01:3.1360170421993738e-01:1.1566163592296896e-02:3.1093480836060283e-01:6.7970269080890766e-01:2.4988810710503490e-01:1.2238199275497228e+00:4.3301737616193942e-01:2.2171890485094474e+00:3.5812042511627828e-01:2.9532222102057224e+00:2.8201236152652476e-01:3.3783071369636408e+00 + CVs 20 + 1.2574865923623479e-01 1.1672900739224040e-01 -2.3746867172722386e-01 + 2.1875943233465894e-01 2.0886478340084574e-01 -4.0779018947411544e-01 + 3.0471996216715347e-01 2.6736143920106098e-01 -5.3467225574860233e-01 + 3.9661056636924713e-01 3.1126426922723688e-01 -6.4390673718290414e-01 + 4.9278009967519715e-01 3.3923737904885587e-01 -7.3372337230443074e-01 + 5.8995036957897706e-01 3.4990643500274621e-01 -8.0254696341628007e-01 + 6.8365043414260285e-01 3.4317130644160820e-01 -8.4989541422156245e-01 + 7.6894793175289333e-01 3.2090258742376310e-01 -8.7726996916937161e-01 + 8.4112222391174229e-01 2.8589700501599769e-01 -8.8762742816689633e-01 + 8.9545023326435280e-01 2.3978417500417976e-01 -8.8331749515444558e-01 + 9.2749370001390841e-01 1.8441838290427559e-01 -8.6628314715499688e-01 + 9.3664522170051256e-01 1.2340860266253506e-01 -8.3924259206943896e-01 + 9.2719393861366473e-01 5.9703659079580196e-02 -8.0549433940922932e-01 + 9.0440946460402660e-01 -6.8144963126559599e-03 -7.6738994646664427e-01 + 8.7111853183597443e-01 -7.7007642218005268e-02 -7.2398026525850101e-01 + 8.2653594156644994e-01 -1.4962105927175062e-01 -6.7212472001056567e-01 + 7.6458555841666853e-01 -2.2098465951322827e-01 -6.1117638089617021e-01 + 6.7545293731235478e-01 -2.8558499477706956e-01 -5.4587379181989237e-01 + 6.1842184006608281e-01 -3.9816165707211981e-01 -4.9591321347854922e-01 + id 13752 + loc 6.1097222566604614e-01 3.4924149513244629e-02 412 + blend 0.0000000000000000e+00 + interp 5.3681456063568145e-01:2.6523060321164416e-01:2.9556788056101624e-02:4.0220484955116359e-01:6.2378497828785728e-01:5.1976467063639797e-01:1.1393395073272705e+00:3.6675349282548647e-01:1.6708662953071884e+00:5.3680919249007508e-01:2.0757038840899273e+00:3.7145159054372417e-01:2.7651903226267800e+00:3.3326295564065961e-01:3.0566888752840242e+00:3.7586069219284829e-01:3.6075270756357525e+00 + CVs 20 + -4.2940809545815128e-01 7.4526336265017173e-02 2.1314613512055516e-01 + -7.3722422189246384e-01 1.0217969643250474e-01 3.9424732257609962e-01 + -1.0171441614595764e+00 1.1776446350454733e-01 5.7019159950722476e-01 + -1.3074710621558046e+00 1.4279909342622771e-01 7.4781858114760635e-01 + -1.6042947757837758e+00 1.7810715675344002e-01 9.2547205232742447e-01 + -1.9039553374364444e+00 2.2298755516188784e-01 1.1023279457291932e+00 + -2.2035008310100581e+00 2.7564815826581057e-01 1.2763121458767790e+00 + -2.5012135752148472e+00 3.3321832743609558e-01 1.4441909635043826e+00 + -2.7970465010321659e+00 3.9147170618628058e-01 1.6034684365131406e+00 + -3.0917683863424834e+00 4.4587251910869985e-01 1.7519594075614933e+00 + -3.3846332545494398e+00 4.9566966467067664e-01 1.8842605141177513e+00 + -3.6700354332381702e+00 5.4687991490636612e-01 1.9905226081747158e+00 + -3.9400825724893132e+00 6.0274734715819123e-01 2.0686664374996151e+00 + -4.1953945760915836e+00 6.5022865217570991e-01 2.1377739363459507e+00 + -4.4362687377104928e+00 6.7371837181285610e-01 2.2214097464872973e+00 + -4.6501778536633127e+00 6.7531641518105001e-01 2.3225680201651135e+00 + -4.8206492404394758e+00 6.6836265433118025e-01 2.4290562136708558e+00 + -4.9400042687144143e+00 6.5961458149422381e-01 2.5377643871079205e+00 + -4.9872379327950611e+00 5.7422340760155532e-01 2.7627676960193215e+00 + id 13753 + loc 5.7301420718431473e-02 5.3926122188568115e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7507292425256342e-01:4.7506817352332092e-01:4.8897326576679356e-01:3.0563332897901041e-01:9.8526728549568021e-01:3.5744963750946157e-01:1.8264153335398028e+00:2.9488520026238874e-01:2.2234371873100258e+00:3.6890163382492008e-01:3.0435151153310498e+00:4.3242620799317594e-01:3.9915438811662911e+00 + CVs 20 + 2.0579017153333168e-01 2.5599499351406413e-01 -2.6827141915204894e-01 + 4.4066778352281377e-01 5.1799954056804520e-01 -5.4495510110089262e-01 + 6.8661200983044679e-01 7.9765363948457091e-01 -8.0748148135051556e-01 + 9.2613057753287009e-01 1.0827420803872903e+00 -1.0633943441165394e+00 + 1.1368367338513408e+00 1.3793744304981914e+00 -1.3400776020797485e+00 + 1.2822755916926036e+00 1.6825752554358246e+00 -1.6631184530680163e+00 + 1.3293868479656414e+00 1.9442368626379478e+00 -2.0441251450734685e+00 + 1.2730366919450355e+00 2.0714935987056022e+00 -2.4707195599370229e+00 + 1.1315852586519026e+00 1.9597345501547021e+00 -2.8918555214547683e+00 + 9.4764064026560924e-01 1.5925948216454155e+00 -3.2018161053288043e+00 + 7.8880986927571228e-01 1.1306614828057935e+00 -3.3633780703618847e+00 + 6.8487406150944741e-01 7.1618672395448579e-01 -3.4865711802085557e+00 + 6.3995350027604370e-01 3.6407623061323247e-01 -3.6578895576282573e+00 + 6.7877552623608028e-01 6.7136984351658269e-02 -3.8892742864172858e+00 + 8.4720660334452458e-01 -1.5409128269212330e-01 -4.1554285935820809e+00 + 1.2213766226017246e+00 -2.3941594656652390e-01 -4.3852106894538760e+00 + 1.8610406291874964e+00 -3.7330386595780030e-02 -4.4163981943789876e+00 + 2.4668846045675341e+00 4.8497307696047043e-01 -4.1760437268611525e+00 + 2.6612539579684107e+00 3.8918054876356178e-01 -4.4328895437705622e+00 + id 13754 + loc 1.8186901509761810e-01 5.5097740888595581e-01 401 + blend 0.0000000000000000e+00 + interp 4.0346724912025655e-01:2.9587963250298316e-01:4.7885878377113111e-02:2.9518902220028820e-01:9.7358577522663658e-01:3.2152389969138417e-01:1.6322666665376153e+00:3.2204688671042003e-01:2.3114776652073852e+00:4.0346321444776539e-01:3.0135280111605116e+00:3.6855233139098742e-01:3.6047337693837078e+00 + CVs 20 + -7.0506101758875520e-02 2.6611542480774780e-01 -2.7607224323364921e-01 + -1.2665499643458100e-01 5.4449353373506848e-01 -5.4032254028159798e-01 + -1.7866556263593764e-01 8.3363268745860764e-01 -8.1477614994109215e-01 + -2.3750738057321358e-01 1.1272685396461597e+00 -1.1160427920333496e+00 + -3.1864134284026169e-01 1.4160854279112030e+00 -1.4527279558060271e+00 + -4.4703306478891947e-01 1.6882534896989843e+00 -1.8274187689295427e+00 + -6.5255803867462348e-01 1.9277254179673471e+00 -2.2318288907164225e+00 + -9.5601023406199714e-01 2.1149319449533364e+00 -2.6450799199553687e+00 + -1.3595390109765941e+00 2.2313819172830711e+00 -3.0392945731784420e+00 + -1.8462570572840340e+00 2.2633456478106528e+00 -3.3887716459975366e+00 + -2.3878167396903036e+00 2.2021914118851100e+00 -3.6776910553351105e+00 + -2.9555733583454042e+00 2.0393509741951759e+00 -3.8961673390884703e+00 + -3.5209156596120721e+00 1.7699125076234661e+00 -4.0262681092991004e+00 + -4.0514619525879363e+00 1.4198900916555306e+00 -4.0313681928610645e+00 + -4.5150566802335677e+00 1.0696162537454610e+00 -3.8625579157730359e+00 + -4.8701446909614692e+00 8.2948720092619666e-01 -3.5043858070795917e+00 + -5.0621795352238292e+00 7.9006394241034861e-01 -3.0190200300621362e+00 + -5.0571994019585000e+00 9.3849336510509729e-01 -2.5279519871207121e+00 + -5.1503932185599695e+00 8.7695292535553060e-01 -2.1887437707792801e+00 + id 13755 + loc 5.5545020103454590e-01 6.2157750129699707e-01 402 + blend 0.0000000000000000e+00 + interp 4.5703254993000464e-01:3.3690673706139768e-01:2.9733200606942201e-01:4.1287900129179322e-01:9.4434323817868437e-01:3.7147065137529783e-01:1.7977639498640983e+00:4.5702797960450536e-01:2.2797052596634990e+00:4.2467601977797342e-01:2.8894255545316225e+00:3.6904332649450522e-01:3.2133794873737620e+00:3.3668024606578684e-01:3.9460109964056533e+00 + CVs 20 + 7.7128872543511820e-02 3.5195275962423095e-01 -2.9470864253310386e-01 + 1.3476975503659377e-01 7.0226614406254106e-01 -6.1093755781416026e-01 + 1.8792416694914268e-01 1.0515974579472678e+00 -9.4245951220323199e-01 + 1.9164843599674508e-01 1.4047295626517546e+00 -1.2934881262575952e+00 + 9.9022965042225741e-02 1.7364592963094911e+00 -1.6541447936519951e+00 + -1.0632915985656843e-01 2.0019834699795411e+00 -2.0051336927190677e+00 + -3.9441543380691690e-01 2.1516407741933330e+00 -2.3240332857469426e+00 + -6.6308202529394689e-01 2.1689793112813334e+00 -2.5902207188837769e+00 + -8.5689150244578516e-01 2.1023439762645175e+00 -2.8065310836560120e+00 + -9.9660894354022989e-01 1.9861221770471285e+00 -2.9853847388818036e+00 + -1.1373331118698720e+00 1.8250774751155909e+00 -3.1550524127391619e+00 + -1.3392684553766654e+00 1.5965259703339085e+00 -3.3512362427933802e+00 + -1.6101963983041210e+00 1.3373828940758559e+00 -3.5530392705549558e+00 + -1.9096946541779372e+00 1.1450421567977216e+00 -3.7078558476750638e+00 + -2.1791149082876404e+00 1.0503648347413077e+00 -3.7913024036653926e+00 + -2.4180628643744435e+00 1.0137421884080613e+00 -3.8221144019960467e+00 + -2.6655637854172571e+00 1.0038510249663504e+00 -3.8394694576378194e+00 + -2.9275471958348787e+00 1.0034519164074047e+00 -3.9007579922634261e+00 + -3.1586811850550345e+00 1.0069341875281941e+00 -4.0997231874037077e+00 + id 13756 + loc 3.3611303567886353e-01 5.8485233783721924e-01 403 + blend 0.0000000000000000e+00 + interp 3.8378509991157017e-01:2.9700219739602773e-01:5.0924510849876814e-02:3.8378126206057106e-01:9.9984043983374482e-01:3.0673417566548639e-01:1.8462059304352736e+00:2.9425651433436989e-01:2.6837133856739039e+00:3.7451795399800131e-01:3.4550463466984862e+00 + CVs 20 + -1.2282939295819792e-02 1.4565808945948730e-01 -1.2103922759570142e-01 + -3.2695999179474244e-02 2.9642988791344188e-01 -2.3824945201600400e-01 + -6.8921543193181251e-02 4.4603682872917183e-01 -3.5573243066220239e-01 + -1.2496521597973498e-01 5.8873385182589488e-01 -4.7471755189870962e-01 + -2.0140663353441735e-01 7.1931088287705625e-01 -5.9331056394538362e-01 + -2.9744394935780277e-01 8.3378946101763884e-01 -7.0877369574669546e-01 + -4.1025155023579385e-01 9.2925744494386431e-01 -8.1788011796231352e-01 + -5.3453892642092060e-01 1.0041794358732696e+00 -9.1804215146868062e-01 + -6.6378177727752141e-01 1.0586174275576741e+00 -1.0078957011038918e+00 + -7.9141696825744101e-01 1.0936018765736615e+00 -1.0871886796210051e+00 + -9.1136161164655904e-01 1.1115533712993524e+00 -1.1566850253792647e+00 + -1.0193591306914103e+00 1.1170903147940172e+00 -1.2182800266677130e+00 + -1.1147725056856386e+00 1.1163988202604291e+00 -1.2747360173494362e+00 + -1.1998806211642865e+00 1.1154874016875367e+00 -1.3290922126733076e+00 + -1.2770248433661158e+00 1.1188900372812913e+00 -1.3846742586995526e+00 + -1.3494322436620263e+00 1.1295952875981727e+00 -1.4444958913749473e+00 + -1.4159100665134456e+00 1.1517717490230253e+00 -1.5085336629304547e+00 + -1.4701045028606692e+00 1.1907734446477258e+00 -1.5720490932426390e+00 + -1.4517573688124559e+00 1.1888109435698451e+00 -1.5794485741727153e+00 + id 13757 + loc 6.4666157960891724e-01 4.9583002924919128e-02 376 + blend 0.0000000000000000e+00 + interp 5.7089755024919708e-01:3.0966564980965722e-01:4.4691328094994098e-02:5.7089184127369463e-01:8.3485486836415879e-01:5.6611687514050402e-01:1.3750907190673327e+00:4.4140344610101673e-01:1.9532624635446840e+00:1.2060287853717425e-01:2.2173851633937298e+00:3.3866171250400240e-01:3.2075935299166618e+00 + CVs 20 + 1.5491165432084458e-01 3.8721917005907841e-01 -4.6327091267389958e-01 + 2.4205946459785971e-01 6.7684185029334587e-01 -8.5404620567712786e-01 + 2.8540309490002475e-01 8.6011394802841457e-01 -1.2582991053266241e+00 + 3.0283949911589381e-01 9.3754276613040655e-01 -1.6929964467926397e+00 + 3.1434444392755528e-01 9.6155434801980921e-01 -2.1474128983138954e+00 + 3.5595344398270828e-01 9.8303085789728495e-01 -2.6161789406142528e+00 + 4.7192079411989762e-01 1.0101309774318945e+00 -3.0892481855950673e+00 + 6.8727492650159538e-01 1.0366123020361815e+00 -3.5449328528268014e+00 + 9.9971348584938569e-01 1.0676521173985845e+00 -3.9529227693494460e+00 + 1.3877660896394906e+00 1.1080482413139721e+00 -4.2953555759096798e+00 + 1.8046742727027030e+00 1.1437960846862874e+00 -4.5754740840800956e+00 + 2.1945470279816250e+00 1.1593250717472969e+00 -4.8017188019941850e+00 + 2.5347815513044507e+00 1.1463087803743561e+00 -4.9849899261959782e+00 + 2.8301969878525006e+00 1.0940625822137966e+00 -5.1350807448348839e+00 + 3.1072680084006228e+00 9.9195042097010910e-01 -5.2508858914840655e+00 + 3.4121532102334315e+00 7.8811585885892832e-01 -5.3051750841340919e+00 + 3.7031743782328812e+00 4.2360413065387093e-01 -5.2931013650555094e+00 + 3.8338195756159719e+00 -6.3822442221905362e-02 -5.3169979832089087e+00 + 3.7636629008422604e+00 -4.6692380208712825e-01 -5.4531632211344778e+00 + id 13758 + loc 1.3806749880313873e-01 3.8843885064125061e-01 393 + blend 0.0000000000000000e+00 + interp 4.0256992440667250e-01:2.8082081336054238e-01:1.9216218186862699e-02:3.8154778830547775e-01:9.9999992060306575e-01:2.8167449002279366e-01:1.5307353428009192e+00:3.9171480191130592e-01:2.4715842226136431e+00:2.9317061190350846e-01:3.0070143615471077e+00:4.0256589870742843e-01:3.6406213979050390e+00 + CVs 20 + -1.6907863524337360e-01 3.5339630743855788e-01 2.7047719839523354e-01 + -3.2625380714490887e-01 7.1991148961792739e-01 5.2695579978371598e-01 + -4.9355835474033122e-01 1.0924945320360340e+00 7.6472950035205578e-01 + -6.8376544147353813e-01 1.4586479912605836e+00 9.9135031805677698e-01 + -9.0154697725118205e-01 1.8051242180942455e+00 1.2209569523296695e+00 + -1.1465609894858377e+00 2.1189158665566108e+00 1.4664274653995117e+00 + -1.4155094404006969e+00 2.3863548691990304e+00 1.7373672967160139e+00 + -1.7055183760944386e+00 2.5949220279005241e+00 2.0395583650737450e+00 + -2.0124574659397161e+00 2.7360314689013396e+00 2.3735485943196384e+00 + -2.3265714224699923e+00 2.8085333844642406e+00 2.7337532160716029e+00 + -2.6308199661403191e+00 2.8215749748154506e+00 3.1080168093563727e+00 + -2.9053032389903910e+00 2.7944847363208360e+00 3.4775000211011760e+00 + -3.1468173694915000e+00 2.7519430276037413e+00 3.8233437109566784e+00 + -3.3780186686705593e+00 2.7150656438055529e+00 4.1285968880490849e+00 + -3.6189118643209035e+00 2.6967523284764052e+00 4.3584709138862321e+00 + -3.8778230967058023e+00 2.6884339614843262e+00 4.4480118889941176e+00 + -4.1856472905377711e+00 2.6404108246740261e+00 4.3782099250722082e+00 + -4.4994174534260907e+00 2.5263739611939533e+00 4.3187437728051785e+00 + -4.4475833490033718e+00 2.5607990387867599e+00 4.5534214302244385e+00 + id 13759 + loc 2.6354792714118958e-01 1.3745422661304474e-01 400 + blend 0.0000000000000000e+00 + interp 4.8512164282728248e-01:2.7328687445408356e-01:1.6158276899889901e-01:4.8511679161085425e-01:9.8981049486372974e-01:4.4162459924296865e-01:1.1951521536901355e+00:3.5481213357946789e-01:1.9906295282809148e+00:4.3372197809385538e-01:2.8570443603204683e+00:3.1100673888841007e-01:3.1642645739234165e+00 + CVs 20 + -1.3771791496333680e-01 1.4615631958313882e-01 2.1216799964709124e-01 + -2.6863901982607630e-01 3.0127105016630118e-01 4.2704255428356991e-01 + -3.9428695977689410e-01 4.6529967067758576e-01 6.3271058081450104e-01 + -5.1676060017359970e-01 6.3815111449497475e-01 8.2345909484018776e-01 + -6.3877063072280338e-01 8.1933495960378866e-01 1.0016021974623350e+00 + -7.6435546867772297e-01 1.0075614246427969e+00 1.1722417391091442e+00 + -9.0145037271544015e-01 1.1987778496881534e+00 1.3456727401691420e+00 + -1.0627926637721323e+00 1.3819959984366035e+00 1.5342217383419274e+00 + -1.2617143967557285e+00 1.5366120740376983e+00 1.7432322199478247e+00 + -1.5007439125894075e+00 1.6395393206365241e+00 1.9668879067877250e+00 + -1.7649323021176913e+00 1.6760430604696468e+00 2.1968012206916119e+00 + -2.0310754728927232e+00 1.6442229015543830e+00 2.4256419127066482e+00 + -2.2884574524723407e+00 1.5578383112125258e+00 2.6416454848307671e+00 + -2.5426349677710447e+00 1.4356619494523424e+00 2.8293661544117144e+00 + -2.7777169519787508e+00 1.2801826457502452e+00 2.9690898477473091e+00 + -2.9152987014320488e+00 1.0711934389485629e+00 3.0355498067892532e+00 + -2.8785553827650894e+00 7.2538292769677915e-01 3.0308147676933861e+00 + -2.8875594255855317e+00 2.5529713139152044e-01 3.0397377576083717e+00 + -3.0949400312563440e+00 2.5801283833782929e-01 3.0173025107179963e+00 + id 13760 + loc 9.5409709215164185e-01 2.3286901414394379e-01 374 + blend 0.0000000000000000e+00 + interp 4.4922523086102883e-01:3.0322156380778337e-01:5.7445733129387277e-02:2.2682021719503498e-01:9.6754070374427881e-01:3.7303429552804857e-01:1.1989005875833585e+00:4.0147898740566040e-01:1.9437505642296575e+00:4.3557172683616635e-01:2.0701585458058407e+00:4.4922073860872025e-01:2.6580830462555061e+00:3.0050757177156423e-01:3.1606239206823168e+00 + CVs 20 + 7.4871027173083471e-01 4.1272124826425366e-01 4.6008629825178970e-01 + 1.3206614868354891e+00 6.7259554538875055e-01 7.6217486699263515e-01 + 1.8955006331940825e+00 8.3335659536066731e-01 9.7436722926625263e-01 + 2.5333812181383233e+00 9.3217034716478775e-01 1.1385458041546115e+00 + 3.2120269849179142e+00 9.8500566759400343e-01 1.2792475943689607e+00 + 3.9083937229103736e+00 9.9301639622157711e-01 1.4282492905224562e+00 + 4.5992575382727514e+00 9.2996478503765967e-01 1.6080348411538241e+00 + 5.2599210796813667e+00 7.6574853284038080e-01 1.8275817427323391e+00 + 5.8698714118004069e+00 4.8931053483669995e-01 2.0837004025494967e+00 + 6.4171321066426410e+00 1.0634816299404148e-01 2.3655845229566861e+00 + 6.8827670654459947e+00 -3.5892077314351356e-01 2.6440218248478820e+00 + 7.2528696366948679e+00 -8.6260972693280280e-01 2.8806873817458070e+00 + 7.5361394741558758e+00 -1.3613562425584429e+00 3.0627548740819477e+00 + 7.7575093059354066e+00 -1.8351841554564068e+00 3.2105734897732336e+00 + 7.9320312145615270e+00 -2.2829262260152441e+00 3.3434228430648480e+00 + 8.0716779278970598e+00 -2.6882651259728223e+00 3.4816950430587750e+00 + 8.1893070650673607e+00 -3.0353745748970313e+00 3.6339979894198984e+00 + 8.2931110873881799e+00 -3.3333982371984905e+00 3.8030911306589372e+00 + 8.4429016838640489e+00 -3.6062374139954319e+00 3.9590712529323362e+00 + id 13761 + loc 4.0746515989303589e-01 4.1120257228612900e-02 396 + blend 0.0000000000000000e+00 + interp 5.0956913950430149e-01:3.2212593907348408e-01:5.3832366627563644e-01:3.4038222641363580e-01:1.4360609473302040e+00:4.0542820127512125e-01:2.0001070155406202e+00:5.0956404381290643e-01:2.5117844463791910e+00:4.7498173927091447e-01:2.9492085462541962e+00:3.4381140167916813e-01:3.2524329944992529e+00:4.7334034734470509e-01:3.9884572097104645e+00 + CVs 20 + -2.7027215727827608e-01 1.9095544991816632e-01 -5.7198955156441000e-01 + -4.8344128999773711e-01 2.8528869854077321e-01 -1.0234210589525796e+00 + -6.7457538629994773e-01 3.4800051283129441e-01 -1.4528965638791418e+00 + -8.5800275714280416e-01 4.0940985274488917e-01 -1.9067792468711273e+00 + -1.0361794857045006e+00 4.6772793111954902e-01 -2.3836197864552870e+00 + -1.2167975655400849e+00 5.2020104968995939e-01 -2.8809530429279788e+00 + -1.4104359315442425e+00 5.6187969308243790e-01 -3.3939495362836820e+00 + -1.6250674808855485e+00 5.8141096744702847e-01 -3.9166208871496351e+00 + -1.8656324962313831e+00 5.5890525865738483e-01 -4.4445580262835245e+00 + -2.1390790111622184e+00 4.7051448354274750e-01 -4.9701012011069174e+00 + -2.4549314533390056e+00 3.0577214536780017e-01 -5.4739288632717056e+00 + -2.8090926671526182e+00 7.1904891175590180e-02 -5.9323756214773109e+00 + -3.1856685660641784e+00 -2.1238402496844522e-01 -6.3353905776419701e+00 + -3.5727822835899614e+00 -5.3185595194170299e-01 -6.6862675309350159e+00 + -3.9633074319154424e+00 -8.7799910180852914e-01 -6.9890210060827673e+00 + -4.3470717472767539e+00 -1.2497561868604143e+00 -7.2462417597373889e+00 + -4.7091884911278035e+00 -1.6530438374212748e+00 -7.4606493011994193e+00 + -5.0319288655623975e+00 -2.0783966466202566e+00 -7.6344607628389607e+00 + -5.2615571264234635e+00 -2.3026582008485699e+00 -7.7912177191198673e+00 + id 13762 + loc 9.1822499036788940e-01 2.0898211002349854e-01 382 + blend 0.0000000000000000e+00 + interp 4.0744068797887578e-01:2.9172484319981429e-01:3.7406849423054633e-01:3.9531923326892804e-01:9.1637537128285596e-01:4.0743661357199601e-01:1.7378757614043834e+00:3.0522116104535041e-01:1.9972519388980512e+00:2.9401314497617603e-01:2.6510068029921605e+00:3.7062708722452214e-01:3.6047495917866508e+00 + CVs 20 + -8.0148171061403606e-01 1.4862437625191149e-01 5.5717241214061186e-01 + -1.3378893787316146e+00 2.0497608249247545e-01 9.8305785529260070e-01 + -1.8044025808292758e+00 2.3940075487234264e-01 1.3857698944979857e+00 + -2.2817273514526941e+00 2.8294520560580605e-01 1.8093827631582706e+00 + -2.7648184949889618e+00 3.1811225702032575e-01 2.2524518140992793e+00 + -3.2500977078306965e+00 3.1995953724403503e-01 2.7121301609285542e+00 + -3.7343435086247774e+00 2.5751652499569377e-01 3.1798053335503100e+00 + -4.2125547819390388e+00 1.0136185601341463e-01 3.6320984243282819e+00 + -4.6669235551492951e+00 -1.6881980978038591e-01 4.0352022762803879e+00 + -5.0696229249118812e+00 -5.4799102973323421e-01 4.3539788684236269e+00 + -5.3940016008117917e+00 -1.0038975292074492e+00 4.5673734394653707e+00 + -5.6246319323292990e+00 -1.4896281315457445e+00 4.6724676447837554e+00 + -5.7652302980769505e+00 -1.9691634277765571e+00 4.6818133896354244e+00 + -5.8389518107223894e+00 -2.4595034522224584e+00 4.6253988654788909e+00 + -5.8729190591284510e+00 -3.0207309618876739e+00 4.5465061913363698e+00 + -5.8995195097946223e+00 -3.6704327832364751e+00 4.4903872945128374e+00 + -5.9482336738627044e+00 -4.3601144218621464e+00 4.4900856862294924e+00 + -6.0149740382522587e+00 -5.0196992027255405e+00 4.5540428687435224e+00 + -6.0702765145409057e+00 -5.5262330433934865e+00 4.6284473291862120e+00 + id 13763 + loc 9.0496903657913208e-01 3.6099666357040405e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6300229050054720e-01:4.0880013208096094e-01:4.8256085905443713e-01:2.7333448697274010e-01:1.0382112691646506e+00:4.6299766047764224e-01:1.9568280888491136e+00:2.8514310780161656e-01:2.6172918242012972e+00:3.5410664286745086e-01:3.1489060368862032e+00:2.9042668212876971e-01:3.9067384539543903e+00 + CVs 20 + -1.3573372218670832e-01 3.2182985819009258e-01 1.5916866284993211e-01 + -2.9246899417161387e-01 6.5886011318606630e-01 3.2660064499404562e-01 + -4.6255957154348076e-01 9.7994610532476112e-01 5.3919672662721596e-01 + -6.3701013662423989e-01 1.2543524565007687e+00 8.1502080725010173e-01 + -8.0590041723748440e-01 1.4559477227834623e+00 1.1519680449676650e+00 + -9.5440732391397365e-01 1.5626726969686442e+00 1.5347946356321245e+00 + -1.0632998334648187e+00 1.5632859054541477e+00 1.9365649702763235e+00 + -1.1111169634837734e+00 1.4615507774139957e+00 2.3211399601686145e+00 + -1.0827429655556873e+00 1.2784840200867982e+00 2.6466906205256415e+00 + -9.8063451155314352e-01 1.0513739216086020e+00 2.8763743992201096e+00 + -8.2686545398915190e-01 8.2624281000851496e-01 2.9905781299158605e+00 + -6.5499385221962769e-01 6.3879173743853546e-01 3.0055192053974698e+00 + -4.8333231115906145e-01 4.8173551367808876e-01 2.9765369873867602e+00 + -2.9857275580998632e-01 3.0026229771796531e-01 2.9606853660986054e+00 + -6.9391904611369987e-02 2.0928385746863398e-02 3.0100579004230918e+00 + 2.2821057428974653e-01 -3.5316840192697474e-01 3.2123905496117673e+00 + 5.5982169581248675e-01 -6.5327093544705583e-01 3.6216290852386965e+00 + 8.8514018742464828e-01 -6.8875743680957568e-01 4.2438292550557080e+00 + 9.8915295618865229e-01 -6.2687488816667347e-01 4.3314634017651210e+00 + id 13764 + loc 9.5218795537948608e-01 1.3383752107620239e-01 375 + blend 0.0000000000000000e+00 + interp 3.1918273384739465e-01:2.4909463138907045e-01:4.6885161184078672e-01:2.5637772549716370e-01:1.7797016558132897e+00:3.1917954202005622e-01:2.9098333669060112e+00:2.7207432089924766e-01:3.8090762190726641e+00 + CVs 20 + 6.8471778949725903e-01 4.1533606040938215e-01 9.3527010176933364e-02 + 1.2480996487078833e+00 6.4508988846285720e-01 1.0794237000454218e-01 + 1.8006497957788208e+00 7.1746657805670422e-01 4.0704201387545713e-02 + 2.3876425277021895e+00 7.0572038556356875e-01 -9.4724135983155711e-02 + 3.0039323620227325e+00 6.9160238072337732e-01 -2.6171507593324883e-01 + 3.6539902231001817e+00 7.1563803508353308e-01 -3.9691317177399132e-01 + 4.3434768600709015e+00 7.7786310201503528e-01 -4.3755553133878566e-01 + 5.0563608611973612e+00 8.7201407750438786e-01 -3.4086477796501069e-01 + 5.7604019837368741e+00 9.8980815560593438e-01 -8.9994808769898738e-02 + 6.4312259918580672e+00 1.1002336507562758e+00 3.0912977079021409e-01 + 7.0463675623188733e+00 1.1416732555518401e+00 8.3161898783955701e-01 + 7.5630792510336216e+00 1.0369224754601376e+00 1.4413329499278209e+00 + 7.9182344547116204e+00 7.3379682305813354e-01 2.0793743371068993e+00 + 8.0596334057361219e+00 2.4822439951011965e-01 2.6687948960419519e+00 + 7.9903456550448198e+00 -3.5926880863124921e-01 3.0922978836220150e+00 + 7.9095024340541462e+00 -9.8119298341811279e-01 3.1749433321612397e+00 + 8.0793801351142047e+00 -1.4170866973546676e+00 2.8578922525777313e+00 + 8.3699828814503299e+00 -1.6052433258812124e+00 2.4955623501884503e+00 + 8.4713798856143718e+00 -2.0757106308363218e+00 2.5400283585348880e+00 + id 13765 + loc 9.3149209022521973e-01 2.6503002643585205e-01 399 + blend 0.0000000000000000e+00 + interp 5.2717289788342880e-01:2.9093477939953927e-01:9.0410808820364785e-02:4.3845038097280065e-01:1.0788571338668942e+00:5.2716762615445001e-01:1.8570658702539080e+00:4.2575492532511344e-01:2.1024561115047513e+00:3.0372689264516872e-01:2.8274650229970559e+00:4.0500760772635275e-01:3.1325710284252186e+00 + CVs 20 + 2.6857285859898894e-01 3.2026670653121664e-01 2.3321962691949111e-01 + 5.0835738035869438e-01 6.1726721562627251e-01 4.7283258810129680e-01 + 7.0788031772680449e-01 8.8489532972627472e-01 7.6945714411375188e-01 + 8.6686476177662908e-01 1.1164638715650530e+00 1.1229789706467144e+00 + 9.9447066591548250e-01 1.3106311100373031e+00 1.5139876998539459e+00 + 1.0997125217767345e+00 1.4672025465994101e+00 1.9236653685133094e+00 + 1.1884191446600667e+00 1.5868740490223692e+00 2.3349461026617266e+00 + 1.2656572797324874e+00 1.6731983963012542e+00 2.7338046102774030e+00 + 1.3403095839486674e+00 1.7321887413860737e+00 3.1122630342277993e+00 + 1.4232429844663845e+00 1.7716909390036073e+00 3.4717955631132229e+00 + 1.5261229535719794e+00 1.7914874140379831e+00 3.8214502693144636e+00 + 1.6558009451065545e+00 1.7748773437135446e+00 4.1604882643013159e+00 + 1.8074766770072437e+00 1.7083812248858583e+00 4.4627523923661796e+00 + 1.9653657073594522e+00 1.5945155853768049e+00 4.6786262368038098e+00 + 2.1313910592851957e+00 1.4432679690278474e+00 4.7619678522691604e+00 + 2.3711027985715925e+00 1.2515934712786614e+00 4.7036459251977680e+00 + 2.7724182546612415e+00 9.8389172806394587e-01 4.5849126464131116e+00 + 3.2335414901959321e+00 7.0456307630435111e-01 4.6549578520333110e+00 + 3.3896649130805732e+00 6.8528807652028645e-01 4.9973631773187295e+00 + id 13766 + loc 5.6953501701354980e-01 5.7269185781478882e-02 380 + blend 0.0000000000000000e+00 + interp 4.2105623054482388e-01:3.1182962523215813e-01:9.5332797510113476e-02:4.0944656001282514e-01:9.1883450657796151e-01:4.2105201998251846e-01:1.3584641833141671e+00:2.8933453893121802e-01:2.0451224159729859e+00:2.9423467815147619e-01:3.2761178308481722e+00 + CVs 20 + 6.5302019545428258e-01 2.6008811692519906e-01 5.5041388049247186e-01 + 1.1579495173665975e+00 3.9432662944204555e-01 9.2645745096717136e-01 + 1.6092223884170258e+00 4.7780304404257024e-01 1.2522376813792575e+00 + 2.0502219186048150e+00 5.4587733010621631e-01 1.5790999793277469e+00 + 2.4832181718320738e+00 6.0085643439078651e-01 1.9061002057808250e+00 + 2.9134685272627134e+00 6.4233515952649445e-01 2.2380914646745289e+00 + 3.3499689639700474e+00 6.6299961457083945e-01 2.5849382370928260e+00 + 3.7964390996172472e+00 6.4672621465535762e-01 2.9590933952935865e+00 + 4.2417583878662244e+00 5.7152400929049252e-01 3.3704686481457804e+00 + 4.6644769660773679e+00 4.1781403677712214e-01 3.8167030179921135e+00 + 5.0467207121650901e+00 1.7365225202039314e-01 4.2787904724792991e+00 + 5.3736218322806844e+00 -1.6811177853643811e-01 4.7269974928450837e+00 + 5.6215851175222848e+00 -6.0881378665618779e-01 5.1272825263939588e+00 + 5.7670423352356046e+00 -1.1320085180176034e+00 5.4513853947619140e+00 + 5.8141586145199469e+00 -1.6980135809924550e+00 5.6995883346703629e+00 + 5.7985012517585552e+00 -2.2613794875159057e+00 5.9011187740334758e+00 + 5.7671764532142289e+00 -2.7956776887730235e+00 6.0795156963227335e+00 + 5.7631400473038550e+00 -3.2949792258532731e+00 6.2359065254850385e+00 + 5.7761155436758642e+00 -3.6792877721144817e+00 6.3389657114802276e+00 + id 13767 + loc 1.2697117030620575e-01 5.1304286718368530e-01 409 + blend 0.0000000000000000e+00 + interp 3.0297441462597913e-01:2.4796117077759594e-01:5.3096646586902474e-01:3.0297138488183289e-01:1.6878057804452116e+00:2.4367783182903152e-01:2.5937514030437825e+00:2.9389483993668514e-01:3.6429190769946436e+00 + CVs 20 + 4.9935084375034033e-01 2.1526107319646820e-01 -2.7432105246501015e-01 + 9.4356141330455401e-01 3.8255867320921422e-01 -5.2863201557079653e-01 + 1.3988164230373530e+00 5.3879101724259471e-01 -7.8062924860590832e-01 + 1.8698345088298265e+00 6.7424071282303599e-01 -1.0465357784623983e+00 + 2.3291155829709576e+00 7.5903327024638312e-01 -1.3411805286288865e+00 + 2.7551446028889242e+00 7.7378536783633600e-01 -1.6697705563007508e+00 + 3.1398841822790393e+00 7.1067876666939411e-01 -2.0192079667096947e+00 + 3.4894352898963428e+00 5.7110953091050387e-01 -2.3626614831574160e+00 + 3.8130388001658861e+00 3.6351942385099312e-01 -2.6716780938533367e+00 + 4.1064522098465055e+00 9.8373253131513572e-02 -2.9270645902344850e+00 + 4.3612017501808866e+00 -2.2360788464206216e-01 -3.1393643097346722e+00 + 4.5793919820002955e+00 -6.2671341679820136e-01 -3.3519139694630828e+00 + 4.7521945228136779e+00 -1.1155881121573299e+00 -3.6078793406800829e+00 + 4.8638687700527576e+00 -1.6498786316016623e+00 -3.9431064773679583e+00 + 4.9105937144389618e+00 -2.1810595566243740e+00 -4.3760926417707955e+00 + 4.9094749593949008e+00 -2.6897107602806916e+00 -4.9011503081120997e+00 + 4.9062970795291978e+00 -3.2024571924791072e+00 -5.4960364890894153e+00 + 4.9505712106929876e+00 -3.7450437523027640e+00 -6.1159460979360549e+00 + 5.0292316900397367e+00 -4.2930456815914670e+00 -6.6996388232517887e+00 + id 13768 + loc 7.4870014190673828e-01 2.9561021924018860e-01 378 + blend 0.0000000000000000e+00 + interp 3.6979323756211813e-01:3.0069080515262697e-01:1.8340545031805189e-01:3.6348799634141954e-01:1.0005985915597733e+00:3.6978953962974254e-01:1.9343368238700522e+00:3.0883506659538473e-01:2.3789944149470346e+00:3.1502161769922948e-01:3.1763815005311820e+00 + CVs 20 + -3.8925770112292130e-01 3.8318674395732072e-01 -7.4248627338989404e-02 + -7.7482599899012172e-01 7.2436871981490170e-01 -1.3020378138470301e-01 + -1.1711715013544557e+00 1.0326095874965993e+00 -1.6566265626015150e-01 + -1.5745723492011525e+00 1.3242785360457783e+00 -1.9129829383680358e-01 + -1.9786226071148512e+00 1.6046469222035602e+00 -2.2577705051171998e-01 + -2.3924331396283272e+00 1.8645132314430004e+00 -2.8756829473675877e-01 + -2.8279093317455022e+00 2.0849830600174561e+00 -3.9065317135008581e-01 + -3.2840870069699903e+00 2.2439646416980219e+00 -5.4190494387141164e-01 + -3.7490309326568489e+00 2.3200096490239930e+00 -7.3761900290383275e-01 + -4.2046566322848449e+00 2.2929858641551935e+00 -9.5822729077150504e-01 + -4.6258593720627044e+00 2.1480311010493489e+00 -1.1710680830308380e+00 + -4.9795721966498530e+00 1.8857819655221419e+00 -1.3395178327153243e+00 + -5.2405570200155021e+00 1.5399015669308267e+00 -1.4379243100536494e+00 + -5.4276237568405623e+00 1.1613119283516391e+00 -1.4800748263233787e+00 + -5.5934848309093681e+00 7.6815434757953716e-01 -1.5091582465313449e+00 + -5.7791473202480663e+00 3.7350056481060534e-01 -1.5462487365112174e+00 + -5.9994714735832586e+00 1.6894408955678841e-02 -1.5718932646964796e+00 + -6.2445157837197254e+00 -2.8904963163951614e-01 -1.5707346991422075e+00 + -6.4849535786335251e+00 -6.2233565341882402e-01 -1.5986145706173980e+00 + id 13769 + loc 8.8581097126007080e-01 8.7428021430969238e-01 1068 + blend 0.0000000000000000e+00 + interp 3.9233511001476062e-01:3.9233118666366051e-01:7.4375793989069794e-01:2.3800448332457105e-01:1.0195682322437984e+00:3.5275877385268911e-01:1.9978110124925750e+00:2.4498384353911229e-01:2.4042910051363804e+00:3.0382647666310569e-01:3.1132399789548590e+00:2.5690605042074427e-01:3.9446327958907514e+00 + CVs 20 + 1.6731067660555604e-01 4.0440784964685822e-01 -3.6150730023582556e-01 + 3.4664355558773391e-01 7.7249948359815523e-01 -6.8273011087506219e-01 + 5.4198377733852099e-01 1.1058003000857715e+00 -9.8096957228742521e-01 + 7.5333328672921995e-01 1.3909345241889213e+00 -1.2668490876509031e+00 + 9.7377100468451183e-01 1.6020128965069631e+00 -1.5409110058179305e+00 + 1.1909884098572481e+00 1.7206406871971374e+00 -1.8011245134171574e+00 + 1.3987142659165810e+00 1.7496877133586790e+00 -2.0472978329364655e+00 + 1.5971523404209322e+00 1.7062254716177720e+00 -2.2852869328300320e+00 + 1.7863837812226899e+00 1.6092391008880886e+00 -2.5254855657815174e+00 + 1.9672444414571701e+00 1.4729467336214515e+00 -2.7835945558400246e+00 + 2.1395040978347111e+00 1.3047938122787488e+00 -3.0812342540976831e+00 + 2.3039157536201191e+00 1.1040718915609857e+00 -3.4446461172425553e+00 + 2.4491592954678230e+00 8.8237040094773711e-01 -3.8774086555727232e+00 + 2.5486949434808110e+00 6.6655773844991417e-01 -4.3566341438260654e+00 + 2.5709325158371517e+00 4.7025411725892452e-01 -4.8669946961664881e+00 + 2.4852304227595079e+00 3.0781340708598126e-01 -5.4044057848567624e+00 + 2.2783427057189987e+00 2.2392129266232641e-01 -5.9358874733998848e+00 + 1.9832336972822056e+00 2.2616949270383158e-01 -6.4361026757783897e+00 + 1.6605260398758608e+00 1.7270725408880061e-01 -7.0455275537351909e+00 + id 13770 + loc 5.7166647911071777e-01 5.2470877766609192e-02 407 + blend 0.0000000000000000e+00 + interp 4.2757193829521628e-01:3.2313079184033694e-01:1.7640862165715587e-01:3.8128019621995507e-01:1.0192086246374166e+00:2.1245963460898706e-01:2.0143438085408052e+00:4.2756766257583334e-01:2.9098338398021295e+00:3.4887880039105829e-01:3.2178269462382527e+00:4.2241153203493126e-01:3.9582152862580937e+00 + CVs 20 + -3.0434611634727787e-01 3.6290412773639147e-01 4.1479765470947824e-02 + -4.1778532065396290e-01 5.8668949675683590e-01 6.3526835761201189e-02 + -4.7291463534045475e-01 7.5869427453622662e-01 7.1240243602700842e-02 + -5.3458580219310103e-01 9.2005836613833014e-01 6.4076786066361274e-02 + -5.9990406888416437e-01 1.0653125536604815e+00 3.8973855985170808e-02 + -6.6584811404969269e-01 1.1886846965356046e+00 -6.7537467535690177e-03 + -7.2940500194586677e-01 1.2843766616383006e+00 -7.5088363368214922e-02 + -7.8830729979393288e-01 1.3476037747331604e+00 -1.6677601045449542e-01 + -8.4229105455879527e-01 1.3755043544859800e+00 -2.8169597799069462e-01 + -8.9325131676632119e-01 1.3662827224993370e+00 -4.1959247125123988e-01 + -9.4396840747974631e-01 1.3178736215846529e+00 -5.7888883673273483e-01 + -9.9678245060273085e-01 1.2280858799209948e+00 -7.5522252009367152e-01 + -1.0542029862391284e+00 1.0958957638494784e+00 -9.4296321657330562e-01 + -1.1233825150362093e+00 9.2443351426134002e-01 -1.1404607238666999e+00 + -1.2194488201792213e+00 7.2501559686605954e-01 -1.3521371509194033e+00 + -1.3589774046934540e+00 5.1744655719682919e-01 -1.5793582699346520e+00 + -1.5496135654007324e+00 3.2259996117436640e-01 -1.8131330872120015e+00 + -1.7851471370098244e+00 1.5668873595339111e-01 -2.0410299977817865e+00 + -1.9924905407299356e+00 -6.3689920194739402e-03 -2.2318030814201362e+00 + id 13771 + loc 7.6557683944702148e-01 7.2112478315830231e-02 415 + blend 0.0000000000000000e+00 + interp 4.9173257122541070e-01:4.9172765389969847e-01:2.3253359361929649e-01:3.5624859985317692e-01:9.2315269680111944e-01:4.4921613723643800e-01:1.4310875619920318e+00:3.2705924758631472e-01:1.9766728955248345e+00:3.5650008566933489e-01:2.5573635861361055e+00:4.3760377754766810e-01:2.9969697691076549e+00:3.4645188320315001e-01:3.8256511334992576e+00 + CVs 20 + -1.4565070289228926e-01 1.0756861479225840e-01 1.6656698409486706e-02 + -2.7083613070457158e-01 1.9276573519932896e-01 5.1331980316934769e-02 + -3.9183450680353071e-01 2.7397185725085993e-01 8.7664199867786424e-02 + -5.1229543095238972e-01 3.5762656887898681e-01 1.1291539227735342e-01 + -6.3266065714038877e-01 4.4228408176130829e-01 1.2768272686598786e-01 + -7.5442567347731671e-01 5.2644575681022376e-01 1.3284391846613092e-01 + -8.7732599601372629e-01 6.0798734635124119e-01 1.2643747024134283e-01 + -9.9859793479621883e-01 6.8378037719337259e-01 1.0545429722980798e-01 + -1.1166495080724488e+00 7.5093890394229279e-01 7.0092031266283106e-02 + -1.2305039422927300e+00 8.0747738067627028e-01 2.1891473879054102e-02 + -1.3222380978235035e+00 8.5359123165585760e-01 -4.4759589438501002e-02 + -1.3401165239846919e+00 8.9638152218227973e-01 -1.4942508895821144e-01 + -1.2446621223431045e+00 9.5070020115345610e-01 -3.2894551794288418e-01 + -1.1003845267681485e+00 1.0197599181851738e+00 -6.0644469934704659e-01 + -1.0149649965935577e+00 1.0836431995316240e+00 -9.3724790022195381e-01 + -1.0134332942756001e+00 1.1262330078818619e+00 -1.2826138545664683e+00 + -1.0875431750687661e+00 1.1355590331585406e+00 -1.6454951298936114e+00 + -1.2381571502596460e+00 1.0973066144563863e+00 -2.0039599470176026e+00 + -1.3606311016717858e+00 9.8908206667697529e-01 -2.0336509847241220e+00 + id 13772 + loc 1.9859462976455688e-01 3.5388472676277161e-01 412 + blend 0.0000000000000000e+00 + interp 3.7703994569711813e-01:3.1493400175710579e-01:6.6714563477329325e-01:3.3708453328917143e-01:1.6224177736932159e+00:3.0843940045756257e-01:2.0839025588047755e+00:3.7703617529766115e-01:2.9309719802962837e+00:3.6010245256451301e-01:3.4175721839203530e+00:2.7413082122621218e-01:3.9962184962379901e+00 + CVs 20 + -1.2736435152835113e-01 1.7024104347283447e-01 -5.7640891061412891e-01 + -2.3808346247067011e-01 2.3891587186676955e-01 -9.9075726429297217e-01 + -3.2592569899901802e-01 2.7629356998467669e-01 -1.3843527829875006e+00 + -3.8403039892076551e-01 3.0800989166865839e-01 -1.8144068256310013e+00 + -4.0704001118235605e-01 3.2769959648876235e-01 -2.2742294708591855e+00 + -3.8867922097579349e-01 3.3052332763979708e-01 -2.7541130853434947e+00 + -3.2470319027214278e-01 3.1314289610813573e-01 -3.2440389336648741e+00 + -2.1640849886987534e-01 2.7256773263281708e-01 -3.7348177215663574e+00 + -6.8293619963558094e-02 2.0774339470327541e-01 -4.2163875703615741e+00 + 1.1229234118069364e-01 1.1814831322421648e-01 -4.6810923249517069e+00 + 2.9975523815957639e-01 -1.5473221183271546e-02 -5.1408221292654535e+00 + 4.3440290345964022e-01 -2.4363569504800919e-01 -5.6251937247355777e+00 + 4.5636096117332015e-01 -5.9259963279314665e-01 -6.1228178404200095e+00 + 3.6781331237906351e-01 -1.0237626471175596e+00 -6.5851343823499509e+00 + 1.9719721103521159e-01 -1.4978145798265636e+00 -6.9881853647846315e+00 + -5.8045008754175620e-02 -1.9947007257523452e+00 -7.3198267866273277e+00 + -4.0096307616588500e-01 -2.4875039723632990e+00 -7.5663926345223658e+00 + -7.8646823369894758e-01 -2.9407519999507676e+00 -7.7389592779329721e+00 + -9.9543949766755335e-01 -3.3036560937184705e+00 -7.9765370428599773e+00 + id 13773 + loc 9.5536291599273682e-01 4.2721423506736755e-01 402 + blend 0.0000000000000000e+00 + interp 3.8799949487135632e-01:2.2787633613647010e-01:1.0331017413248595e+00:3.8799561487640760e-01:2.0564000242758018e+00:2.7999172342148704e-01:2.6911022896871550e+00:3.5502885670410783e-01:3.0244243060772908e+00:2.5047140474241614e-01:3.8505363583873189e+00 + CVs 20 + 3.2336111114857562e-02 2.2228584887442981e-01 2.8696356865598277e-01 + 8.1506781719404731e-02 4.6687281467619296e-01 5.5088911628800252e-01 + 1.3493025634623590e-01 7.4386244087033560e-01 8.0251574654747948e-01 + 1.9268788910734766e-01 1.0405507782398116e+00 1.0256904278501104e+00 + 2.4375878054413647e-01 1.3647330307201719e+00 1.2016776862432414e+00 + 2.7938103396472891e-01 1.7209180055562645e+00 1.5137004548222910e+00 + 4.5579305389519442e-01 1.9808944684494980e+00 1.9030634290242634e+00 + 7.7472714309936741e-01 2.1604599646745402e+00 2.2247506550417135e+00 + 1.1756359590485914e+00 2.2665173012075299e+00 2.4935597332999229e+00 + 1.6144460019434992e+00 2.2643343364462494e+00 2.7661429748942257e+00 + 2.0125223865581821e+00 2.1131442860161367e+00 3.0460584946047420e+00 + 2.2749920788720814e+00 1.8284900575781291e+00 3.2827097341527738e+00 + 2.4063211970846319e+00 1.4683378629693173e+00 3.4534248820102693e+00 + 2.4889568791992120e+00 1.0662491260715932e+00 3.5811797699173016e+00 + 2.6196602307552137e+00 6.4534604789781524e-01 3.6983887723208850e+00 + 2.8875408350406446e+00 2.5351862819199278e-01 3.8301312123493041e+00 + 3.3021597968194523e+00 -7.0046017004950167e-02 4.0067650141154498e+00 + 3.7889506060795171e+00 -3.2693388957214498e-01 4.2748601464408793e+00 + 4.2619568036473465e+00 -5.2579927468758569e-01 4.6678988416597385e+00 + id 13774 + loc 3.1350529193878174e-01 9.2365908622741699e-01 401 + blend 0.0000000000000000e+00 + interp 4.8334115254469773e-01:2.9111822396644216e-01:4.1995899260832226e-01:3.2931323652272526e-01:1.0213399679436350e+00:4.1431941185632060e-01:1.7990161304673231e+00:4.8333631913317232e-01:2.0783200752233002e+00:3.5519817829959188e-01:2.7431286032685152e+00:3.1001671043486689e-01:3.2496148862233287e+00 + CVs 20 + -7.2841931103587498e-02 2.9498478711862314e-01 -1.2227859807766453e-01 + -1.2641248521197365e-01 5.9471894532660385e-01 -2.6536507504072915e-01 + -1.5558800581187215e-01 9.0746689702234762e-01 -4.1772748878735971e-01 + -1.5797903981202333e-01 1.2358135695902019e+00 -5.8091029403505390e-01 + -1.2934355537080711e-01 1.5653035091944951e+00 -7.6767385769180563e-01 + -7.4219773783724130e-02 1.8853252392746498e+00 -9.9037649718824161e-01 + -2.4663944243455083e-02 2.2052984897784258e+00 -1.2637062112735180e+00 + -3.1631345235670794e-02 2.5337378110735593e+00 -1.5992487245049001e+00 + -1.4663410026300916e-01 2.8522295506371083e+00 -1.9922961207722210e+00 + -4.0076864732352457e-01 3.1206264979090079e+00 -2.4123728303184118e+00 + -7.9243067635907538e-01 3.3080008986604241e+00 -2.8219957905976258e+00 + -1.2912231947178290e+00 3.3936534663430891e+00 -3.1993356382111608e+00 + -1.8381444584487234e+00 3.3569141313546784e+00 -3.5615011004127783e+00 + -2.3745777542304767e+00 3.1846344482716393e+00 -3.9420489011003372e+00 + -2.8518204156881626e+00 2.9060143237583160e+00 -4.3236613795276639e+00 + -3.1795663175469739e+00 2.6439544377290733e+00 -4.6533831841473257e+00 + -3.2859096213737864e+00 2.5258737726691791e+00 -4.9093807342448574e+00 + -3.2967152924200112e+00 2.4678745494402561e+00 -5.1806335387398041e+00 + -3.5154935852297982e+00 2.2070310012991428e+00 -5.7670386280228252e+00 + id 13775 + loc 7.3789134621620178e-03 6.4545303583145142e-01 395 + blend 0.0000000000000000e+00 + interp 4.5952646917191048e-01:3.4144085560726534e-01:6.6604236892931934e-02:4.5952187390721877e-01:7.8213223438584700e-01:2.8332942377873183e-01:1.1431687322555173e+00:3.4043036719824121e-01:2.2619568180276968e+00:3.7084153430990835e-01:2.9972016619877841e+00:3.5100599830421303e-01:3.4771964799021107e+00 + CVs 20 + 3.9863760228847228e-01 1.4819756251759303e-01 -2.2510800893710609e-01 + 7.4224221805590673e-01 2.5206449531895048e-01 -4.3639181938110372e-01 + 1.0771686600892700e+00 3.4489026879899620e-01 -6.3707056240226223e-01 + 1.4241907644394951e+00 4.4042981643672752e-01 -8.2669075705094563e-01 + 1.7823265802045754e+00 5.3306786417672503e-01 -1.0012507214362110e+00 + 2.1491026479040682e+00 6.1667345255115136e-01 -1.1592465048832703e+00 + 2.5220253113922322e+00 6.8451475336561218e-01 -1.3010249287007702e+00 + 2.8992345951605003e+00 7.2704770416151354e-01 -1.4269271137575648e+00 + 3.2773679861777167e+00 7.3205982403881786e-01 -1.5373529714405909e+00 + 3.6482821899370057e+00 6.8763758492343086e-01 -1.6355812799504532e+00 + 3.9981822464192476e+00 5.8543491543008397e-01 -1.7273433208557309e+00 + 4.3116366193282598e+00 4.2519487789556853e-01 -1.8142048236989079e+00 + 4.5778419339443914e+00 2.1570044665971899e-01 -1.8920894761508400e+00 + 4.7920910952483240e+00 -3.0047832327135371e-02 -1.9565874699703789e+00 + 4.9526262741594103e+00 -2.9807835533184601e-01 -2.0056410423654336e+00 + 5.0586718000632693e+00 -5.7194206715030615e-01 -2.0378690990991615e+00 + 5.1120370813849956e+00 -8.3227080324750213e-01 -2.0518991312265680e+00 + 5.1200315532224669e+00 -1.0660093288597920e+00 -2.0485773918806185e+00 + 5.0798209748423648e+00 -1.3278008826060361e+00 -2.0336033157097271e+00 + id 13776 + loc 1.0603331774473190e-01 5.9649723768234253e-01 379 + blend 0.0000000000000000e+00 + interp 4.6440577758380353e-01:2.1799112132870677e-01:1.0580403441059738e-01:4.3934265332188482e-01:7.7802209139413125e-01:3.1265744906373827e-01:1.6678312698753062e+00:3.4897093030563908e-01:2.0921818369788521e+00:4.6440113352602769e-01:2.6942461153262505e+00:3.8503578402177269e-01:3.0052168039776248e+00:4.2370409235979328e-01:3.3316273143483928e+00:3.8435433246496009e-01:3.9160604857010952e+00 + CVs 20 + -2.1642365213616430e-01 2.3238180921486584e-01 2.8077729107221128e-01 + -4.0756405542050150e-01 3.9755276549726798e-01 5.4251928174950759e-01 + -5.8988088169205666e-01 4.7676301843965835e-01 8.3557325139083760e-01 + -7.7286795697305666e-01 4.7889666065266967e-01 1.2228484366336017e+00 + -9.4411985130442744e-01 4.6052864843489350e-01 1.6875987382721052e+00 + -1.1125090173638517e+00 4.7726208436085826e-01 2.1711063440828502e+00 + -1.3204748108769910e+00 5.5292408278928251e-01 2.6374866321060511e+00 + -1.6105727527889933e+00 6.9974144629241564e-01 3.0666792269477323e+00 + -1.9857033834587101e+00 9.1224591297201507e-01 3.4161914831740514e+00 + -2.4041917333633132e+00 1.1461004167344362e+00 3.6461115059282463e+00 + -2.8126976848557752e+00 1.3340173896930636e+00 3.7603654207850070e+00 + -3.1624282819802074e+00 1.4248503039283382e+00 3.7905239644526709e+00 + -3.4067020696520327e+00 1.4033868425419469e+00 3.7698732094493406e+00 + -3.5323175217767608e+00 1.3044428225147688e+00 3.7310309866751563e+00 + -3.5605174708189296e+00 1.1821360762871103e+00 3.7013892981436651e+00 + -3.5036147310996100e+00 1.0932883363899477e+00 3.7348286535591311e+00 + -3.3506358431661578e+00 1.1591403470324844e+00 3.9177977172382423e+00 + -3.1771795837688384e+00 1.4797363166883435e+00 4.1417691623998696e+00 + -3.3607803248393893e+00 1.1767324630996265e+00 4.2865404841970776e+00 + id 13777 + loc 8.2998555898666382e-01 9.1554528474807739e-01 374 + blend 0.0000000000000000e+00 + interp 5.4462531599983621e-01:3.1123767753156623e-01:3.3038482930696222e-03:5.0002446284515845e-01:9.6333806681600176e-01:3.2943008621527703e-01:1.3713173318222744e+00:3.4539735416790546e-01:2.1504673064911453e+00:3.6455428511158966e-01:2.7512781654110938e+00:5.4461986974667620e-01:3.0320248206511824e+00 + CVs 20 + -6.3025998512421233e-01 3.1442527157651301e-01 -2.8404399056129520e-01 + -1.1331081218868775e+00 5.0352870380485304e-01 -4.9015594196192352e-01 + -1.6217506767322685e+00 6.2795899836701374e-01 -6.8047828728390103e-01 + -2.1351035677425201e+00 7.2396833613078437e-01 -8.9411129808286716e-01 + -2.6509356858976920e+00 8.0368636874807953e-01 -1.1465911281486181e+00 + -3.1460149471646899e+00 8.6603544371142127e-01 -1.4447110193813173e+00 + -3.6108582703023626e+00 8.9860847832394386e-01 -1.7839796264400993e+00 + -4.0443420988917360e+00 8.9165427189135382e-01 -2.1507188942898674e+00 + -4.4535915902859955e+00 8.4144347352494586e-01 -2.5293055651410077e+00 + -4.8551113641767021e+00 7.4241621178225881e-01 -2.9051013461306701e+00 + -5.2606113374869317e+00 5.8591396472542767e-01 -3.2566343788194754e+00 + -5.6680432920407693e+00 3.6568553740043264e-01 -3.5604623635206591e+00 + -6.0687707356696947e+00 7.7774047057289852e-02 -3.8056943975032365e+00 + -6.4518268257588183e+00 -2.6744952292145729e-01 -3.9908404642211606e+00 + -6.8083220485132312e+00 -6.2886875277074683e-01 -4.1253837553816073e+00 + -7.1355248360665149e+00 -9.5663876907328005e-01 -4.2419525188294713e+00 + -7.4323359676967238e+00 -1.2190351645261210e+00 -4.3693235390646796e+00 + -7.7267417891259917e+00 -1.4166105065850112e+00 -4.5089743191748504e+00 + -8.1274731559461415e+00 -1.6042908304786940e+00 -4.6426237685577618e+00 + id 13778 + loc 6.0757821798324585e-01 9.3540722131729126e-01 1069 + blend 0.0000000000000000e+00 + interp 5.5866187412467849e-01:2.9297116046878552e-01:2.7866879970574121e-01:4.5451489081634339e-01:8.7959707691539368e-01:5.5865628750593732e-01:1.2718167597274093e+00:4.5922922075601974e-01:2.0011381597577609e+00:3.5274748939187567e-01:2.4409504241593081e+00:3.4756237315112509e-01:3.2259587577846820e+00:3.7565305422502548e-01:3.9547051800065534e+00 + CVs 20 + 1.6105930494619353e-01 2.3349627371267662e-01 -1.0107877048592512e-01 + 2.9509661084746475e-01 4.6662285270124848e-01 -2.2707097960947165e-01 + 4.3276920176790723e-01 6.9000559016749818e-01 -3.7479209461426788e-01 + 5.9987123782022578e-01 8.8354565849573941e-01 -5.3605213961749354e-01 + 8.0240917461962780e-01 1.0202016986600693e+00 -7.0179323389779680e-01 + 1.0293651808355437e+00 1.0805585412788683e+00 -8.6679013161097973e-01 + 1.2717972334101328e+00 1.0845625762824411e+00 -1.0414217213060415e+00 + 1.5267722690569208e+00 1.0811342071243515e+00 -1.2351196912894018e+00 + 1.7739320369530969e+00 1.1035773425376525e+00 -1.4229307438585075e+00 + 1.9834442363647271e+00 1.1303856612788359e+00 -1.5356204673917691e+00 + 2.1775043526207849e+00 1.1325930554454646e+00 -1.4842328276192580e+00 + 2.4075276951846294e+00 1.1963782641018159e+00 -1.3024513789725054e+00 + 2.6097356402462588e+00 1.3680126051517041e+00 -1.1620220629505504e+00 + 2.7194581503997819e+00 1.5783140808024219e+00 -1.1057601269460324e+00 + 2.7277803456889842e+00 1.7517511052616963e+00 -1.1097626288653824e+00 + 2.6720931208894392e+00 1.8899325002462863e+00 -1.1501537794543863e+00 + 2.5760800353119948e+00 2.0536777917245281e+00 -1.2432149997449007e+00 + 2.4640958666473147e+00 2.1828897671792529e+00 -1.4064382746683324e+00 + 2.5545027108098717e+00 1.9091955309840776e+00 -1.3883438038576708e+00 + id 13779 + loc 2.2929564118385315e-01 9.1354680061340332e-01 396 + blend 0.0000000000000000e+00 + interp 4.8829201616864204e-01:3.6953791582831397e-01:4.1763381757516149e-02:3.8608103434930047e-01:9.0160480001946763e-01:4.8828713324848039e-01:1.1541999290485094e+00:4.5040098682086843e-01:1.6385287794534649e+00:2.8544961754358966e-01:2.0111198324505231e+00:2.6340692141115296e-01:2.7715022922704975e+00:3.7033093699651909e-01:3.5578731871260429e+00 + CVs 20 + 9.3322046165006234e-01 3.1693518685588301e-01 -2.1510192036445594e-01 + 1.5782106950589063e+00 4.5178765926001896e-01 -3.8267937927083301e-01 + 2.1737649009756623e+00 5.2238189516807343e-01 -5.4355067088284470e-01 + 2.8201602555201841e+00 5.7600993587119986e-01 -7.1719088800677600e-01 + 3.5046562388882605e+00 5.9828596267401135e-01 -9.0829701465944179e-01 + 4.2072336572791631e+00 5.7351681355103379e-01 -1.1240004533187016e+00 + 4.9031903665755348e+00 4.8697032337617496e-01 -1.3702253907051127e+00 + 5.5664628544234818e+00 3.2425180432163370e-01 -1.6448109278784839e+00 + 6.1684836828629095e+00 7.6940108471997615e-02 -1.9377933102984981e+00 + 6.6763692043054608e+00 -2.4679795571129537e-01 -2.2365449540672544e+00 + 7.0658072202477786e+00 -6.2008788145086524e-01 -2.5255318669147631e+00 + 7.3400482414932222e+00 -1.0136993757260457e+00 -2.7871578067083851e+00 + 7.5220721538207007e+00 -1.4094847840583056e+00 -3.0068660709828468e+00 + 7.6361364226869002e+00 -1.7941956024284720e+00 -3.1735760860658333e+00 + 7.7057214196022548e+00 -2.1620350403636373e+00 -3.2830412185710003e+00 + 7.7509092581112098e+00 -2.5221321582455856e+00 -3.3434266804778154e+00 + 7.7784671218640344e+00 -2.8850078565970207e+00 -3.3658432869015993e+00 + 7.7753161655959033e+00 -3.2480998495338436e+00 -3.3467408424031797e+00 + 7.6643777164165652e+00 -3.6035873654404424e+00 -3.2642655758830372e+00 + id 13780 + loc 7.9805600643157959e-01 1.5391421318054199e-01 403 + blend 0.0000000000000000e+00 + interp 3.6460415179908584e-01:2.9007104842691722e-01:1.7879617066870579e-02:3.2878577232451739e-01:7.5841440003522964e-01:2.7365435024973878e-01:1.8469229820041493e+00:3.2514201839596985e-01:2.7312020035910014e+00:3.6460050575756786e-01:3.2598156302903174e+00 + CVs 20 + -9.0875003957574710e-02 3.1778066569304453e-01 2.3379915172227922e-01 + -1.4812349537714362e-01 6.1650323338650415e-01 4.4368887887115699e-01 + -2.0964939016582335e-01 9.1910602013998466e-01 6.6106699365831822e-01 + -2.8855088777451482e-01 1.2221863016339916e+00 9.0468505718650127e-01 + -3.8111043844860631e-01 1.5083969766942136e+00 1.1818182277434026e+00 + -4.7471537944448605e-01 1.7670146520303367e+00 1.4925618525166957e+00 + -5.5022129252456220e-01 1.9992227777838192e+00 1.8380031113462205e+00 + -5.8497542381617029e-01 2.2070318605966528e+00 2.2223058588438716e+00 + -5.5432700640311017e-01 2.3829090387984855e+00 2.6445947223813513e+00 + -4.3752208340739052e-01 2.5110928552362557e+00 3.0915631579066383e+00 + -2.2703387288452226e-01 2.5752638852082206e+00 3.5385330330329539e+00 + 6.6342272168575578e-02 2.5624515177834164e+00 3.9571189778658553e+00 + 4.1481011330056328e-01 2.4594038509765905e+00 4.3315491725267483e+00 + 7.8849128509346311e-01 2.2554273058501324e+00 4.6559953175282764e+00 + 1.1587131012204859e+00 1.9607119229936107e+00 4.9002668309836999e+00 + 1.4967356953862352e+00 1.6123794730027001e+00 5.0269997654466376e+00 + 1.8155711479579324e+00 1.2322458106448915e+00 5.0882261640678639e+00 + 2.1503972078069689e+00 8.2291736584617026e-01 5.2264676910780619e+00 + 2.4861679343367746e+00 4.1242753976458285e-01 5.4967824615483662e+00 + id 13781 + loc 7.3637646436691284e-01 4.5776432752609253e-01 400 + blend 0.0000000000000000e+00 + interp 5.0898829770636711e-01:3.9209271914593041e-01:1.3108857033745758e-02:3.5875707435112164e-01:5.8304444828595692e-01:2.7698306987872889e-01:1.5042195946715440e+00:3.9141804622480675e-01:2.0057051861428277e+00:5.0898320782339002e-01:2.5394092740867711e+00:4.3943413241419388e-01:2.9984228584438455e+00:3.2192753894999371e-01:3.5039139815523899e+00 + CVs 20 + 1.2946699876877207e-01 1.3712459163657795e-01 2.5040343882797661e-01 + 2.5485603095234532e-01 2.7305221497936599e-01 5.1528865148440339e-01 + 3.8176105931066351e-01 4.0664729674992695e-01 7.9574521836374035e-01 + 5.1329815135654955e-01 5.3819058986813306e-01 1.0920812624422407e+00 + 6.5143504751762205e-01 6.7044747824334028e-01 1.4050942343767336e+00 + 7.9793610131695825e-01 8.0830133709100016e-01 1.7325287120141826e+00 + 9.5243882389770462e-01 9.5363197852788895e-01 2.0701646236121363e+00 + 1.1126515361388858e+00 1.0979442546826514e+00 2.4172204045775532e+00 + 1.2752774948822161e+00 1.2260106268766726e+00 2.7777292484317706e+00 + 1.4347196033874288e+00 1.3240513764563271e+00 3.1555579882135740e+00 + 1.5805598503665745e+00 1.3806909572613157e+00 3.5526607595873472e+00 + 1.6973755409521287e+00 1.3838671588162412e+00 3.9689995581487292e+00 + 1.7687012560148796e+00 1.3209503439472561e+00 4.3982388025334238e+00 + 1.7809476701833149e+00 1.1825029783771523e+00 4.8251326298024644e+00 + 1.7257941646343333e+00 9.6338662190870661e-01 5.2264497602863882e+00 + 1.6060497019823055e+00 6.6404382982123877e-01 5.5720016108118999e+00 + 1.4378610706734376e+00 3.0420003398370499e-01 5.8352617414969794e+00 + 1.2466805405457200e+00 -5.6800221887939983e-02 6.0227399431694240e+00 + 1.0853032205808684e+00 -2.7576486750286300e-01 6.2093768153962756e+00 + id 13782 + loc 2.3017965257167816e-01 8.4877055883407593e-01 393 + blend 0.0000000000000000e+00 + interp 4.2848537172434098e-01:3.1804300215144787e-01:2.9590165086528053e-01:4.2848108687062375e-01:9.5522604660871069e-01:3.9715526681054475e-01:1.4339042765512273e+00:3.5479817890501125e-01:2.0311529937923019e+00:3.0555146261084914e-01:3.0299392346939245e+00:3.9433496652363603e-01:3.9086114394244640e+00 + CVs 20 + -2.2905817408714155e-01 4.3096160555761742e-01 -3.1077420684419171e-01 + -4.3607115833200771e-01 8.7213215101378705e-01 -6.1933988459841927e-01 + -6.2897891484808488e-01 1.3223890163409426e+00 -9.2049081656979970e-01 + -8.4995627458566769e-01 1.7752781512601443e+00 -1.2056327502540536e+00 + -1.1372360051274641e+00 2.2080294572379033e+00 -1.4588299062331418e+00 + -1.5020914320280383e+00 2.5838284847679751e+00 -1.6659195876837400e+00 + -1.9258433147583407e+00 2.8609307508183384e+00 -1.8237582665309420e+00 + -2.3686413220813320e+00 3.0120955603146138e+00 -1.9369996209585376e+00 + -2.7842407944158332e+00 3.0387403994592468e+00 -2.0103108471450013e+00 + -3.1288916121923296e+00 2.9670254968196410e+00 -2.0474870841935409e+00 + -3.4130891829401593e+00 2.8324565358898215e+00 -2.0512216067057452e+00 + -3.6632367102800711e+00 2.6620215797008910e+00 -2.0308481307074833e+00 + -3.8680883941886202e+00 2.4845123156921067e+00 -1.9870071399125739e+00 + -4.0334505470042545e+00 2.3191501519991098e+00 -1.9173274110744873e+00 + -4.1899529738855046e+00 2.1507391190112219e+00 -1.8502039570192639e+00 + -4.3248231209779631e+00 1.9557654561221796e+00 -1.8497070657430092e+00 + -4.4109892946885338e+00 1.7213499496676281e+00 -1.9578890061518111e+00 + -4.5080276730687876e+00 1.4163053913458878e+00 -2.1116820874533446e+00 + -4.7517184265417667e+00 9.9164490551828965e-01 -2.1103979771098347e+00 + id 13783 + loc 3.1312844157218933e-01 6.8069881200790405e-01 373 + blend 0.0000000000000000e+00 + interp 4.6985788148325541e-01:4.6094131501529839e-01:5.3137216649324681e-01:3.4349168886755332e-01:1.2498016862169541e+00:4.2756622983911613e-01:1.9876211917652595e+00:3.5906238092085224e-01:2.6331107487926069e+00:4.6985318290444061e-01:3.1191138615780942e+00:3.4031277747120769e-01:3.9773451963652215e+00 + CVs 20 + -4.2430177955994575e-01 5.9655102178804720e-01 -1.6923623295921744e-01 + -7.7711129929188183e-01 1.1472989315433881e+00 -3.5957677742330374e-01 + -1.0491634467344322e+00 1.6772050914669863e+00 -5.9039688594199635e-01 + -1.2352040367748200e+00 2.1947712576732687e+00 -8.7327080655458644e-01 + -1.3433207876495550e+00 2.6773092688535658e+00 -1.2008361035764186e+00 + -1.4106963632006051e+00 3.0984639935545477e+00 -1.5539770063894247e+00 + -1.4770294938553448e+00 3.4482922779825849e+00 -1.9153754212867662e+00 + -1.5673281907053060e+00 3.7366628491286384e+00 -2.2755214651727718e+00 + -1.6923459278255615e+00 3.9787381897296070e+00 -2.6306040379676769e+00 + -1.8564552264369985e+00 4.1852437068978459e+00 -2.9780522381676917e+00 + -2.0768219422316911e+00 4.3594561814617574e+00 -3.3312765842662841e+00 + -2.3963818597169579e+00 4.4866444616052252e+00 -3.7159476842167836e+00 + -2.8299094116340426e+00 4.5322893746798023e+00 -4.1296956421223303e+00 + -3.3285987712165852e+00 4.4681115773681324e+00 -4.5454593924914954e+00 + -3.8361302664603683e+00 4.3075684065329227e+00 -4.9339849518564209e+00 + -4.3486579780928665e+00 4.0695532061233832e+00 -5.2984989467279888e+00 + -4.9273112359995359e+00 3.6986586246485094e+00 -5.6842541221236456e+00 + -5.6548862208812762e+00 3.0956330175004920e+00 -6.0661420674011604e+00 + -5.7781538884753232e+00 2.5237690483470221e+00 -5.9335659484955015e+00 + id 13784 + loc 6.1086249351501465e-01 6.2453347444534302e-01 375 + blend 0.0000000000000000e+00 + interp 5.0939164505004830e-01:4.0704068956015005e-01:9.4737008682148849e-02:2.8546925465439338e-01:8.9394089684560574e-01:5.0938655113359788e-01:1.4552834296371173e+00:4.4461260474774411e-01:1.9344065863203150e+00:2.5616442814957330e-01:2.0789370636949491e+00:4.4581966639090531e-01:2.9858022067610595e+00:2.5023871173318962e-01:3.5569599223576298e+00 + CVs 20 + -4.8784704617623859e-01 4.4249600228644465e-01 -1.2577750037272728e-01 + -1.0048107056813433e+00 7.6059914746513968e-01 -1.8234437097974929e-01 + -1.5869607318871501e+00 9.1215452149461196e-01 -1.6195155347978879e-01 + -2.2044208413742563e+00 9.7870943028109836e-01 -8.9220454460951504e-02 + -2.8139335359537059e+00 1.0557390818782055e+00 -1.5650472291510842e-02 + -3.3929537251117048e+00 1.1761821670827892e+00 -8.6748979771171797e-03 + -3.9334151185253781e+00 1.3340096220803019e+00 -1.1507875584548266e-01 + -4.4186746449866430e+00 1.5202529987427091e+00 -3.4825876215714446e-01 + -4.8287770015853138e+00 1.7168188546514649e+00 -6.9965905565209652e-01 + -5.1636676309939187e+00 1.8845133436757233e+00 -1.1486895239097112e+00 + -5.4241029781476620e+00 1.9684828293782120e+00 -1.6658175273297315e+00 + -5.5771684095926535e+00 1.9213803938607239e+00 -2.1982631337904568e+00 + -5.5847161903711200e+00 1.7353603831291045e+00 -2.6639862422814344e+00 + -5.4420230745820612e+00 1.4726066820120987e+00 -2.9909492431067726e+00 + -5.1908172506732591e+00 1.2173110530344724e+00 -3.1483427316852564e+00 + -4.9323870661625220e+00 9.9651859406402288e-01 -3.1918290017091588e+00 + -4.7449712300356763e+00 7.0668860129018185e-01 -3.2352473104510460e+00 + -4.6356638138729718e+00 2.6260758096556458e-01 -3.3017475958318530e+00 + -4.4089913766791584e+00 -6.8218323718308493e-02 -3.4605871188697366e+00 + id 13785 + loc 2.5689068436622620e-01 2.9526728391647339e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2756184025886607e-01:3.0074009103299898e-01:3.2588453068117418e-01:2.5632988498281450e-01:1.0081188647933066e+00:3.1391712597586313e-01:1.7425464131293777e+00:2.6940636141853341e-01:2.1611002530211261e+00:4.2755756464046352e-01:3.0223047212640006e+00:2.6079974481317508e-01:3.7392285060675401e+00 + CVs 20 + -1.8514402286885867e-01 2.0649341278956412e-01 -2.8494842304026946e-01 + -3.9652287985731322e-01 4.2919889646992393e-01 -5.4285837728418063e-01 + -6.3220828743684176e-01 6.4307750987146417e-01 -8.0650906982789472e-01 + -8.9274290456162997e-01 8.3685337731294385e-01 -1.0772126670464390e+00 + -1.1778069148947223e+00 1.0057082836534466e+00 -1.3372814391131256e+00 + -1.4805835711517232e+00 1.1380610066393424e+00 -1.5678713233609671e+00 + -1.7864073636531410e+00 1.2186949361449888e+00 -1.7548987094707396e+00 + -2.0726498650676222e+00 1.2351233488200983e+00 -1.8942140548015252e+00 + -2.3139925579237328e+00 1.1855936267622511e+00 -1.9918816728938793e+00 + -2.4980806028616995e+00 1.0846910044143447e+00 -2.0617129547126396e+00 + -2.6394431400731486e+00 9.5113967973278546e-01 -2.1208230958646208e+00 + -2.7734615829837148e+00 7.8842299985451159e-01 -2.1840246570409767e+00 + -2.9221363198701740e+00 5.9304657471310884e-01 -2.2627974816466994e+00 + -3.0836752523633582e+00 3.7693206534287338e-01 -2.3697767640057554e+00 + -3.2371532477176928e+00 1.7553930048105443e-01 -2.5176116829768844e+00 + -3.3310136424668149e+00 6.0269387609192038e-02 -2.6989922890011262e+00 + -3.3294094943019661e+00 8.6841539796480460e-02 -2.8437975186075350e+00 + -3.3128099311183798e+00 1.6266727139454934e-01 -2.9612242009938607e+00 + -3.3611659901768962e+00 1.6457151457164304e-01 -3.3073401663836282e+00 + id 13786 + loc 9.9664956331253052e-01 9.0324503183364868e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9421883580492939e-01:2.7759652616118047e-01:1.7505962200553304e-01:2.8657556763759962e-01:1.0260902897435769e+00:3.4178739478570208e-01:1.9937209776035756e+00:3.3680124894067209e-01:2.3836331446010033e+00:3.9421489361657136e-01:3.1128768884646729e+00:2.7823636965581716e-01:3.9229563299679175e+00 + CVs 20 + 2.0959390674008019e-01 2.0396312770940708e-01 -1.7534481167757643e-01 + 4.4059910352763920e-01 4.1843393320599370e-01 -3.4043472244486228e-01 + 6.8395005402524189e-01 6.1981381176633610e-01 -5.2675150965647721e-01 + 9.3243489948741642e-01 7.9277230945029975e-01 -7.5339329310085756e-01 + 1.1776773110537750e+00 9.2704324843473751e-01 -1.0278609979876052e+00 + 1.4063879157690553e+00 1.0108520228977671e+00 -1.3543939932650826e+00 + 1.6008577011822109e+00 1.0313827664949442e+00 -1.7307168409968186e+00 + 1.7411640729623166e+00 9.7597356344643593e-01 -2.1442282143122684e+00 + 1.8094704404538617e+00 8.3556753518380211e-01 -2.5696910505341037e+00 + 1.7979828788449708e+00 6.1153412192994916e-01 -2.9745468139411604e+00 + 1.7135611957729013e+00 3.1691552241230303e-01 -3.3266922024600043e+00 + 1.5835757210584782e+00 -2.6151947143810972e-02 -3.6019309079313588e+00 + 1.4496091094210395e+00 -3.9171943664832409e-01 -3.8013101549727089e+00 + 1.3360562421393527e+00 -7.6128844166912435e-01 -3.9397119340613354e+00 + 1.2428917065195000e+00 -1.1234840344046921e+00 -4.0262646848213137e+00 + 1.1689428067275667e+00 -1.4699779654693774e+00 -4.0911736353453936e+00 + 1.1221802957998728e+00 -1.8032654653028299e+00 -4.2379412824832521e+00 + 1.1305417108661278e+00 -2.1161550923725962e+00 -4.5744079579399086e+00 + 1.0544860255672508e+00 -2.4134807878773912e+00 -4.7808915422561373e+00 + id 13787 + loc 8.4595549106597900e-01 5.6534755229949951e-01 402 + blend 0.0000000000000000e+00 + interp 4.6652386776234250e-01:2.9745263980118769e-01:6.4069979654931886e-01:2.3385317002301920e-01:1.1380735722283288e+00:3.5716636872337998e-01:1.9950204943019956e+00:4.6651920252366491e-01:2.5314049382737656e+00:2.5772907447319954e-01:3.6271325331067006e+00 + CVs 20 + -5.8542858882309923e-02 2.7953559586407439e-01 -2.4993046057134885e-01 + -1.5460583959609581e-01 5.5240014825384665e-01 -5.0185483312330592e-01 + -2.6665769724671756e-01 8.2918530262232526e-01 -7.6718575297116853e-01 + -4.0422167501974049e-01 1.1000282513663029e+00 -1.0368554693980321e+00 + -5.9090494567359342e-01 1.3434388311284360e+00 -1.2887056884403878e+00 + -8.3170366220368286e-01 1.5421078416577307e+00 -1.4994477904147447e+00 + -1.0604084340920401e+00 1.6725726200407705e+00 -1.6273756656313569e+00 + -1.1957803102737679e+00 1.7030684882177631e+00 -1.7351861923121359e+00 + -1.4457673651267342e+00 1.6228215241704311e+00 -1.9284792324189992e+00 + -1.7672637928649988e+00 1.4386533613334855e+00 -2.1273503093705823e+00 + -2.0547540716995796e+00 1.1348790065021634e+00 -2.3134352742598692e+00 + -2.3058078111190947e+00 7.0860377796468188e-01 -2.4965630772719489e+00 + -2.5894460072554737e+00 2.1072427637622915e-01 -2.6875237087315651e+00 + -2.9751436479593503e+00 -2.7761515179985985e-01 -2.9011609956300166e+00 + -3.4826256142773842e+00 -6.9327500069286552e-01 -3.1589657726467331e+00 + -4.0783602824394798e+00 -1.0371404349055031e+00 -3.5060349307118623e+00 + -4.6950801341085322e+00 -1.3443097043302259e+00 -3.9870384689045073e+00 + -5.2519697538699859e+00 -1.6277352859533114e+00 -4.5629426634745425e+00 + -5.7160777988373752e+00 -1.8996220126442558e+00 -5.0933826243298022e+00 + id 13788 + loc 3.2642412930727005e-02 2.3556947708129883e-01 409 + blend 0.0000000000000000e+00 + interp 4.2817131821197141e-01:3.0025509771750136e-01:5.3110974836396685e-01:2.5595020630252308e-01:1.1376287764069006e+00:4.2816703649878929e-01:2.0160463732312248e+00:3.9411415013351442e-01:2.7108627757835588e+00:2.7359330642187818e-01:3.0636023006137294e+00:2.5395311858845870e-01:3.9652954273867862e+00 + CVs 20 + -2.2862856059184736e-01 2.4446180985607557e-01 -3.3143189195111744e-01 + -4.2636076496569958e-01 4.9797959471944475e-01 -6.2819052739695969e-01 + -6.1025265174997179e-01 7.8210631701479361e-01 -9.3620613899371841e-01 + -8.0583773992838648e-01 1.0942080951643072e+00 -1.2742008192319438e+00 + -1.0545324758461785e+00 1.4103869172884012e+00 -1.6384904027616258e+00 + -1.3947111294261543e+00 1.6971375509898257e+00 -2.0218051539992672e+00 + -1.8408037099744903e+00 1.9126294175045067e+00 -2.4238399113083711e+00 + -2.3757850895227817e+00 2.0093374030570468e+00 -2.8549278834298089e+00 + -2.9487114069753901e+00 1.9412364241023421e+00 -3.3311269072189860e+00 + -3.4841012718971491e+00 1.6738856084297564e+00 -3.8530976315608712e+00 + -3.8882092406696689e+00 1.2292907931580537e+00 -4.3812322428930992e+00 + -4.1161035001287347e+00 7.2828309476864472e-01 -4.8604565888699796e+00 + -4.2168522399402404e+00 2.7060633276113366e-01 -5.2742598490957420e+00 + -4.2533350379185624e+00 -1.4084209488354338e-01 -5.6254918125178968e+00 + -4.2655840822320190e+00 -5.4255397367244207e-01 -5.9096583912807095e+00 + -4.2790576753128002e+00 -9.5803072737063699e-01 -6.1111844175710175e+00 + -4.3078169087753748e+00 -1.3736542254848065e+00 -6.2024618176942923e+00 + -4.3833577530554990e+00 -1.7749517800782613e+00 -6.1832519178792866e+00 + -4.5853754055740463e+00 -2.1939673077357051e+00 -6.1716699653245461e+00 + id 13789 + loc 7.3759949207305908e-01 6.5770410001277924e-02 378 + blend 0.0000000000000000e+00 + interp 5.5457967119104590e-01:4.5252661391605914e-01:1.3015964597483698e-01:3.7186559783733752e-01:9.8163302301730526e-01:2.8956135502241853e-01:1.6375485024666756e+00:3.7732775565950000e-01:2.2548027014773910e+00:5.5457412539433404e-01:3.0000617906214773e+00:5.3357071581167959e-01:3.4480297931893942e+00:5.2339906811635872e-01:3.9366570569335355e+00 + CVs 20 + -2.8917048699376735e-01 2.6841512721671601e-01 -4.4567575424316747e-02 + -5.7590253672722780e-01 5.1579535464624127e-01 -6.0965695936253950e-02 + -8.6400315972713138e-01 7.4145217563372257e-01 -5.1599264598796629e-02 + -1.1583669214475407e+00 9.5729323340952888e-01 -2.3122742894691850e-02 + -1.4535885479297121e+00 1.1768142656906817e+00 1.2662678951630646e-02 + -1.7451243428636567e+00 1.4076038255636976e+00 4.1652029352412856e-02 + -2.0368183198544960e+00 1.6480438597862603e+00 4.8555905640441321e-02 + -2.3313711209550645e+00 1.8931527602612102e+00 2.0193005855744239e-02 + -2.6202588059016305e+00 2.1410371310857546e+00 -5.3458897973620134e-02 + -2.8905646834980283e+00 2.3951583919485544e+00 -1.8086789182329743e-01 + -3.1480827039110486e+00 2.6627412635457763e+00 -3.7411646476951399e-01 + -3.4251488799038934e+00 2.9326434805516195e+00 -6.5455942162092728e-01 + -3.7344202747485520e+00 3.1331970390460206e+00 -1.0237848741379680e+00 + -4.0107127312292814e+00 3.1747859525067721e+00 -1.4063018094104269e+00 + -4.1785233675972240e+00 3.0662947787833912e+00 -1.7191446361975475e+00 + -4.2200093031846420e+00 2.8790953854759138e+00 -1.9792695657284374e+00 + -4.1616935506808197e+00 2.6637591513088821e+00 -2.2649372701662398e+00 + -4.1378680499438580e+00 2.4467277598476809e+00 -2.6004532122432029e+00 + -4.4164651887189432e+00 2.3212478637648508e+00 -2.8765954273821706e+00 + id 13790 + loc 2.4834305047988892e-01 2.8203085064888000e-01 382 + blend 0.0000000000000000e+00 + interp 4.0883058439278058e-01:3.8626012693748529e-01:4.4970085649532365e-01:4.0882649608693666e-01:9.7390113334767758e-01:3.0325236252614463e-01:1.3270244735265169e+00:3.3295296101881594e-01:2.3640192215667568e+00:2.9912904535570611e-01:2.9986031067755055e+00:3.1048795290901221e-01:3.7433526765225276e+00 + CVs 20 + -5.5707367870544144e-01 1.2500725039499949e-01 -6.8631304708043306e-01 + -1.0020513957265527e+00 1.1344795908799399e-01 -1.1149863806945528e+00 + -1.4280875945000200e+00 4.6668149976183293e-02 -1.4528810076014851e+00 + -1.8698768622263029e+00 -3.5632900899524644e-02 -1.7706644369963951e+00 + -2.3140061910085388e+00 -1.2417852621392844e-01 -2.0717767000976801e+00 + -2.7502517782919300e+00 -2.1073200321400865e-01 -2.3620526620727715e+00 + -3.1750695485987821e+00 -2.8949804333180307e-01 -2.6483011033518156e+00 + -3.5916537541928149e+00 -3.6108641300638444e-01 -2.9377019794922097e+00 + -4.0036884119442506e+00 -4.3610095497587520e-01 -3.2351247913256578e+00 + -4.4117818621435863e+00 -5.3212163086357234e-01 -3.5370396114164491e+00 + -4.8205570236030137e+00 -6.6957282882984726e-01 -3.8308319835968643e+00 + -5.2327756336240894e+00 -8.7343112038474358e-01 -4.1078103125641467e+00 + -5.6424177823434363e+00 -1.1629564461139799e+00 -4.3597194066052882e+00 + -6.0286885114779043e+00 -1.5395956289818116e+00 -4.5772513578259932e+00 + -6.3675837770767991e+00 -1.9886777030954588e+00 -4.7507183730588727e+00 + -6.6423809389321402e+00 -2.4897848838668653e+00 -4.8714340944261734e+00 + -6.8392105116116744e+00 -3.0211120712038535e+00 -4.9344449829000894e+00 + -6.9463601387793812e+00 -3.5556839883307965e+00 -4.9438586488835767e+00 + -7.0040828543348219e+00 -4.0733300123528764e+00 -4.9367924882052669e+00 + id 13791 + loc 2.3370371758937836e-01 4.3264064192771912e-01 380 + blend 0.0000000000000000e+00 + interp 4.2893858440685312e-01:2.9454756074442401e-01:2.4435244936006806e-01:4.0020839958969162e-01:9.9971518842248674e-01:3.2671210270874518e-01:1.8308777136518124e+00:3.3187690761739214e-01:2.5044866559078454e+00:4.2893429502100905e-01:2.9999961214820026e+00:3.0811739878324512e-01:3.5742669533136224e+00 + CVs 20 + -4.2765280129701316e-01 2.4441856487709424e-01 4.9054985707470100e-01 + -7.5761670964933781e-01 3.8999945611271153e-01 9.2986247994665328e-01 + -1.0692828513523740e+00 4.8499105997883485e-01 1.3715293209870631e+00 + -1.4070185394143331e+00 5.5767930927846932e-01 1.8363901194836969e+00 + -1.7748866054268289e+00 6.0730481354470001e-01 2.3029589057743456e+00 + -2.1683514118120364e+00 6.2363565191261383e-01 2.7459350796367596e+00 + -2.5768476626550085e+00 5.9494482787560754e-01 3.1458115235458401e+00 + -2.9859758418542444e+00 5.1823868438664222e-01 3.4859968980328548e+00 + -3.3779998510849811e+00 4.0220892554557475e-01 3.7557077833663719e+00 + -3.7356570083526992e+00 2.6354724400079199e-01 3.9554149156614935e+00 + -4.0472014022931262e+00 1.2122709297918632e-01 4.0922001188018777e+00 + -4.3120145666173517e+00 -7.0087539376340047e-03 4.1760892450562590e+00 + -4.5491450618496909e+00 -1.1604632529146874e-01 4.2266573678045249e+00 + -4.7884187514014727e+00 -2.3802936398989649e-01 4.2674929923221097e+00 + -5.0302851202949741e+00 -4.2214905567970762e-01 4.3022543635276813e+00 + -5.2562520227995755e+00 -6.7884244914943004e-01 4.3230172998125109e+00 + -5.4777915821675709e+00 -1.0024123735621258e+00 4.3284157228402709e+00 + -5.7182294779693841e+00 -1.3800086556918449e+00 4.3408790298103686e+00 + -5.8800687982424744e+00 -1.6093143710164091e+00 4.4530161633888827e+00 + id 13792 + loc 9.3538796901702881e-01 7.9914259910583496e-01 395 + blend 0.0000000000000000e+00 + interp 3.9646427837087522e-01:3.5870452609057490e-01:7.1008646862763092e-02:2.9443746133460336e-01:9.9448050598155446e-01:3.7635203887941854e-01:1.7129352320182991e+00:3.9646031372809154e-01:2.5200575583479066e+00:3.0961703443131444e-01:3.0178393156006287e+00 + CVs 20 + 5.0095331573896906e-01 1.7582228999548616e-01 -5.1685078648222349e-01 + 8.8463965643217601e-01 2.8668524238043691e-01 -9.4187445575631312e-01 + 1.2453438230923219e+00 3.8594882442839606e-01 -1.3542708274376059e+00 + 1.6210764179644677e+00 4.9460233922389107e-01 -1.7851959477883950e+00 + 2.0084839789759665e+00 6.0476598005907056e-01 -2.2290015590074259e+00 + 2.4009201976334573e+00 7.0517918410785363e-01 -2.6817243083773876e+00 + 2.7915879168397315e+00 7.8163481226249010e-01 -3.1418240243510764e+00 + 3.1765673143683162e+00 8.1444955926724272e-01 -3.6076226580126196e+00 + 3.5503110146460584e+00 7.7947401704916963e-01 -4.0755080909641030e+00 + 3.8964366479338510e+00 6.5570266018430523e-01 -4.5388141466463878e+00 + 4.1908246279408212e+00 4.3578717091761243e-01 -4.9848787950998306e+00 + 4.4172780345378388e+00 1.2867132457402874e-01 -5.3960471731166981e+00 + 4.5727644569946255e+00 -2.4967968564949539e-01 -5.7567192615244931e+00 + 4.6588887075710534e+00 -6.8193106896953104e-01 -6.0569502774888058e+00 + 4.6785583931354164e+00 -1.1505857813239255e+00 -6.2927304729278060e+00 + 4.6381897718514633e+00 -1.6417609200650212e+00 -6.4643029398939555e+00 + 4.5460489967857356e+00 -2.1418309742586081e+00 -6.5721449372086811e+00 + 4.4081705506412874e+00 -2.6332777810005799e+00 -6.6200141269374857e+00 + 4.2668786507612566e+00 -3.0962626335124268e+00 -6.6689590072830267e+00 + id 13793 + loc 4.8836731910705566e-01 3.1895112991333008e-01 401 + blend 0.0000000000000000e+00 + interp 4.9799885989381865e-01:3.3900287077526231e-01:3.4124451345991891e-01:3.0259592075902592e-01:1.0029754086604497e+00:4.9799387990521971e-01:1.5872717510040530e+00:3.7771964293226523e-01:2.2112788566247881e+00:3.7075778659712727e-01:2.9568301069069705e+00:4.9107025229922735e-01:3.2288395489435455e+00:3.9663078644906663e-01:3.9569051244004161e+00 + CVs 20 + -2.1809965489874847e-01 2.6860396396983055e-01 4.2336113820601637e-02 + -4.5835234465541952e-01 5.4189773081422099e-01 1.0118125138888442e-01 + -7.1076106358497948e-01 8.1185622918999190e-01 1.5177463508470962e-01 + -9.6963515008195855e-01 1.0606096718317466e+00 1.8299598979733001e-01 + -1.2388182852044680e+00 1.2730539301830994e+00 1.9915871579619759e-01 + -1.5237419345419960e+00 1.4422248094297474e+00 2.1032710207566097e-01 + -1.8345468822050415e+00 1.5659009831509103e+00 2.3367467188993696e-01 + -2.1794161323675425e+00 1.6407375821684591e+00 2.8620495528876028e-01 + -2.5430237025647426e+00 1.6694275619384369e+00 3.6832152085659559e-01 + -2.9000189484131744e+00 1.6587213453521326e+00 4.6322959752703879e-01 + -3.2511756023296843e+00 1.5969244323303049e+00 5.6300670527209973e-01 + -3.6175706758297159e+00 1.4536679674377870e+00 6.8042577192824294e-01 + -4.0005689465722059e+00 1.2307362199410521e+00 8.3711168881760400e-01 + -4.3766287205665000e+00 9.7048355325329116e-01 1.0519751245477265e+00 + -4.7169641739049339e+00 7.0259527007307288e-01 1.3242789046252608e+00 + -5.0026170615573573e+00 4.3279826425060558e-01 1.6406424458559357e+00 + -5.2289692403681034e+00 1.9465173694334359e-01 1.9877367950126881e+00 + -5.4003571541486766e+00 9.3384890649988672e-02 2.3242210630684363e+00 + -5.5104759281571898e+00 2.2037908873159295e-01 2.5808646736165040e+00 + id 13794 + loc 9.1801381111145020e-01 7.8812932968139648e-01 1069 + blend 0.0000000000000000e+00 + interp 5.3114032904186537e-01:4.4291442703021883e-01:4.6654273352804809e-02:4.9163670337291049e-01:7.0271023025313317e-01:4.1091806442846313e-01:1.0491883018562651e+00:4.1428780897668427e-01:2.0042764327586418e+00:5.3113501763857496e-01:2.9981711614144655e+00:2.4438522289780917e-01:3.7467626615646807e+00 + CVs 20 + 5.2590731462831983e-02 3.3113974755264663e-01 -1.0389089444114577e-01 + 1.0591352875952750e-01 6.8191679337445188e-01 -2.1942422512312840e-01 + 1.7838144929097804e-01 1.0563551487283782e+00 -3.3148984065820092e-01 + 3.0602950830199882e-01 1.4566614825120778e+00 -4.3151878041043029e-01 + 5.2641035338881548e-01 1.8609068265766571e+00 -5.1334265790388911e-01 + 8.5194559952587856e-01 2.2359323801315263e+00 -5.8289785269621297e-01 + 1.2829708142636180e+00 2.5469352216591510e+00 -6.5822266603855284e-01 + 1.8146137892330634e+00 2.7448663038388963e+00 -7.4997931742500257e-01 + 2.4208109107831297e+00 2.7723146880549630e+00 -8.4861798448153536e-01 + 3.0483552294896521e+00 2.5846072371376865e+00 -9.3050333988769995e-01 + 3.6146053957584101e+00 2.1702395344580103e+00 -9.6549990552372589e-01 + 4.0320308055579277e+00 1.5746124029491706e+00 -9.2614892842222196e-01 + 4.2520894126565221e+00 9.0058103887154362e-01 -8.0160969340004273e-01 + 4.3020514811381299e+00 2.9299597666991850e-01 -6.0781133581370739e-01 + 4.2832564777159803e+00 -1.6770135032733391e-01 -3.6522518969579876e-01 + 4.2799236639903571e+00 -4.9140605925666692e-01 -5.3402589032427117e-02 + 4.3302949816894998e+00 -6.7415492947104694e-01 3.6059138623392295e-01 + 4.4355478413717675e+00 -7.1318787558772923e-01 8.6768469720774455e-01 + 4.5526983774066956e+00 -7.4658316655118728e-01 1.4175427750364480e+00 + id 13795 + loc 1.4861947298049927e-01 5.8512818813323975e-01 400 + blend 0.0000000000000000e+00 + interp 4.8780232593326378e-01:4.8779744791000446e-01:6.0876957911110996e-01:4.0258620664028916e-01:1.0739797804276805e+00:2.9463189043635185e-01:1.8609158950287283e+00:4.2825297433869225e-01:2.3543130571574977e+00:3.8487235722488783e-01:3.1113192211997642e+00:2.5555297185428305e-01:3.8071566460099149e+00 + CVs 20 + -2.4950451806498450e-01 2.7422770221504467e-01 -9.0214529926304354e-03 + -4.7693198931643893e-01 5.6920222344508187e-01 -3.6531668600163519e-02 + -6.9057255043007237e-01 8.8463403863029832e-01 -9.6161542954024903e-02 + -8.9523112095916813e-01 1.2176781668388206e+00 -1.9800579807582080e-01 + -1.0942196681351299e+00 1.5619806817076396e+00 -3.4775693253172557e-01 + -1.2924335579857542e+00 1.9085749961438387e+00 -5.4914252089504034e-01 + -1.4953157851461707e+00 2.2469518754158018e+00 -8.0649258403149648e-01 + -1.7056343427605312e+00 2.5644513997839100e+00 -1.1257824492023838e+00 + -1.9202664053586367e+00 2.8454703044509611e+00 -1.5143588844940317e+00 + -2.1267869125486238e+00 3.0706490382344764e+00 -1.9768110923046156e+00 + -2.3030561624758001e+00 3.2176232395184292e+00 -2.4989186836814143e+00 + -2.4395336753044377e+00 3.2722745168437477e+00 -3.0404386838285165e+00 + -2.5586426437000394e+00 3.2348888970384460e+00 -3.5712826918929617e+00 + -2.6916287745009533e+00 3.1032948719297315e+00 -4.0873211703616468e+00 + -2.8468747237867533e+00 2.8728155410821308e+00 -4.5506770031343082e+00 + -3.0134728681848761e+00 2.5749883445964432e+00 -4.8883657505256615e+00 + -3.1849798296464069e+00 2.2542939114634328e+00 -5.0906511220690414e+00 + -3.3683774978303980e+00 1.9158626216859318e+00 -5.2092898425036553e+00 + -3.5937547133611667e+00 1.4975890031503654e+00 -5.3433989745274033e+00 + id 13796 + loc 8.8261222839355469e-01 5.7698923349380493e-01 412 + blend 0.0000000000000000e+00 + interp 4.9861309267591575e-01:4.9860810654498899e-01:3.8710335805746121e-03:3.9793912984969987e-01:7.7102480737642054e-01:3.0929458767516421e-01:1.0937068872595221e+00:3.6971084984918134e-01:2.0029600288266352e+00:4.1657020592349581e-01:3.0021965105248034e+00:3.1462997922902158e-01:3.6827341864317682e+00 + CVs 20 + 7.3447764688613337e-01 5.3305042974546107e-02 -2.9180785578631330e-01 + 1.2250553834505069e+00 7.0508705446822306e-03 -5.3488909942367602e-01 + 1.6664009155435950e+00 -7.1961852361355549e-02 -7.5961481916447959e-01 + 2.1338100868389498e+00 -1.5947681499723321e-01 -9.7266041672756409e-01 + 2.6257311419401863e+00 -2.5611123650747358e-01 -1.1656330048049384e+00 + 3.1369254853996997e+00 -3.6097949546541686e-01 -1.3312768093315159e+00 + 3.6604603739509765e+00 -4.7320196324069852e-01 -1.4651698350391507e+00 + 4.1879129484269360e+00 -5.9391831469660739e-01 -1.5663458100986856e+00 + 4.7096727791577724e+00 -7.2530085473797912e-01 -1.6356110470264578e+00 + 5.2156376354523815e+00 -8.6879958966168291e-01 -1.6746602259770993e+00 + 5.6926428944991070e+00 -1.0324447720872216e+00 -1.6939802597308482e+00 + 6.1249225425466758e+00 -1.2449053591953927e+00 -1.7276106827346258e+00 + 6.5007643450809818e+00 -1.5365949485452572e+00 -1.8171872370942668e+00 + 6.8206316382429080e+00 -1.8994510802813636e+00 -1.9689521847404687e+00 + 7.0912460252933940e+00 -2.3075572172394963e+00 -2.1682266637532615e+00 + 7.3074397119769161e+00 -2.7408699326048129e+00 -2.4135682570107000e+00 + 7.4612783219489014e+00 -3.1753444144546998e+00 -2.7065295194864332e+00 + 7.5614843793015210e+00 -3.5852980289495751e+00 -3.0257684053696123e+00 + 7.7687580742639852e+00 -3.9229966865977355e+00 -3.2172497352283811e+00 + id 13797 + loc 4.3106749653816223e-01 1.3042467832565308e-01 399 + blend 0.0000000000000000e+00 + interp 4.5954300572343509e-01:4.5323565550150502e-01:6.5063824612676235e-02:2.6715313971893417e-01:9.7885591167912778e-01:2.7332393822889550e-01:1.9982129308501282e+00:4.5953841029337789e-01:2.4029662210708715e+00:4.0282633973554505e-01:3.0059945288197092e+00:4.3106684338092011e-01:3.8737537806019127e+00 + CVs 20 + -2.1111729369756285e-01 1.3721061257861303e-01 2.3596129197640392e-01 + -4.2646731948810057e-01 2.5420646104929545e-01 4.4195049472523257e-01 + -6.5342875829169789e-01 3.4938879402595296e-01 6.1119693892650628e-01 + -8.9772300681400452e-01 4.2427304228547025e-01 7.4089701441025946e-01 + -1.1515157269892307e+00 4.8341377111508371e-01 8.3543474366340431e-01 + -1.3963060994739831e+00 5.3116217452976255e-01 9.0211447363012431e-01 + -1.6125401818820073e+00 5.7229412971177285e-01 9.3885168262755303e-01 + -1.7846486926097338e+00 6.1849861264559802e-01 9.3646833490268300e-01 + -1.9101999971482997e+00 6.9110325476370804e-01 8.9333148032930365e-01 + -2.0046439299466705e+00 8.1576449323304834e-01 8.2203024040461614e-01 + -2.1074576718071483e+00 9.9521883838008807e-01 7.5636066298287319e-01 + -2.2626027592922648e+00 1.1615280257804055e+00 7.4628277118249042e-01 + -2.4607283461201037e+00 1.2182952240098144e+00 8.1515089353783310e-01 + -2.6471646445443135e+00 1.1091971096401116e+00 9.5782260522934881e-01 + -2.7808433728796662e+00 8.3281113615768543e-01 1.1687609542485944e+00 + -2.8562718523417145e+00 4.6658873418910396e-01 1.4590605472617786e+00 + -2.8712193207435353e+00 8.3237541813516502e-02 1.8609318182302350e+00 + -2.9538239602609542e+00 -2.5234034249675902e-01 2.3274837592899940e+00 + -3.2913687454192706e+00 -1.6236544140992237e-01 2.4050362124656064e+00 + id 13798 + loc 4.0690359473228455e-01 3.0262789130210876e-01 374 + blend 0.0000000000000000e+00 + interp 3.2333005313725405e-01:2.7134726572911982e-01:7.4460155013101925e-01:2.5123748819675490e-01:1.4745391781828203e+00:2.6998711406950149e-01:2.0630859225730092e+00:3.0826742710263544e-01:2.9995425643989462e+00:3.2332681983672268e-01:3.8047313802612313e+00 + CVs 20 + -4.0340609245143089e-01 4.4590654858254208e-01 6.4548024457084097e-01 + -6.4610124127818280e-01 7.6594081187048735e-01 1.1851100789716282e+00 + -7.6623976408041028e-01 9.7398004995100096e-01 1.7287549848844470e+00 + -8.2108739013054099e-01 1.1271627620846569e+00 2.2653373908033538e+00 + -8.6298908887912784e-01 1.2787835910194281e+00 2.7464756432002981e+00 + -9.2577703168417225e-01 1.4459838737169335e+00 3.1703460139973130e+00 + -1.0203190151714199e+00 1.6205339575106423e+00 3.5584592335897627e+00 + -1.1489806304175887e+00 1.7932215938677631e+00 3.9283254810064143e+00 + -1.3235715241500086e+00 1.9735706132886681e+00 4.2982028760682036e+00 + -1.5826680676413674e+00 2.1532933807755645e+00 4.7012157632570766e+00 + -1.9650755219219327e+00 2.2942662216323013e+00 5.1615725118776279e+00 + -2.4832973399692175e+00 2.3377916582260210e+00 5.6834866499516474e+00 + -3.1147175336445616e+00 2.2042791674886431e+00 6.2337055891352930e+00 + -3.7865272752458159e+00 1.8219993708517555e+00 6.7368753514833184e+00 + -4.4113345609847183e+00 1.1888645954280390e+00 7.0953652909089264e+00 + -4.8835936665470836e+00 4.0091591491651757e-01 7.2192676412612311e+00 + -5.0836843947675625e+00 -3.5355428240090747e-01 7.1685231603237796e+00 + -4.9869617401151354e+00 -9.3183828367977783e-01 7.1390863418023054e+00 + -4.6696036828221565e+00 -1.6165570202908177e+00 7.2150918295766573e+00 + id 13799 + loc 8.4910660982131958e-01 9.1196560859680176e-01 402 + blend 0.0000000000000000e+00 + interp 3.8689379362530085e-01:3.8688992468736461e-01:1.2348844631786771e-01:3.8329796124659615e-01:9.9240851699974586e-01:3.1150310334391895e-01:1.4450941747213188e+00:2.6958481113823379e-01:2.1054508322840730e+00:2.9233137647304325e-01:3.0913866870803801e+00 + CVs 20 + -7.9073993686967992e-02 1.0451072152439617e-01 -1.4203678450778309e-01 + -1.4526692514363271e-01 2.1592076909738739e-01 -2.9871455801881364e-01 + -2.0107992231298649e-01 3.2617623207600377e-01 -4.6120227866259284e-01 + -2.5014671578917380e-01 4.3204126515473285e-01 -6.2433633405936129e-01 + -2.9508551951138740e-01 5.3363304578220661e-01 -7.8646448921980849e-01 + -3.3534119260492801e-01 6.3127652483430974e-01 -9.4601608627800760e-01 + -3.6618721546038069e-01 7.2649208340427085e-01 -1.1015481517571077e+00 + -3.7952795661558969e-01 8.2110104723345867e-01 -1.2504012752870559e+00 + -3.6434857559532341e-01 9.1466194383229971e-01 -1.3890359321495229e+00 + -3.1114895836693279e-01 1.0046250271292387e+00 -1.5159562667037720e+00 + -2.1947587598676077e-01 1.0875592693202720e+00 -1.6295591155279441e+00 + -1.0652028243307776e-01 1.1580664797861495e+00 -1.7279066352945613e+00 + -9.7795811082024287e-04 1.2104706343215526e+00 -1.8159407968851671e+00 + 8.1350341709669927e-02 1.2436524307023709e+00 -1.9067050533745880e+00 + 1.4322329363693198e-01 1.2591763667599574e+00 -2.0171364163550209e+00 + 1.8469833298653993e-01 1.2540359935967029e+00 -2.1482852953384572e+00 + 2.0189639114665026e-01 1.2251169477703949e+00 -2.2906049287079151e+00 + 1.9183318946500538e-01 1.1715422616075153e+00 -2.4427458339617329e+00 + 1.7384786172067868e-01 1.0956354688535572e+00 -2.6372850832980586e+00 + id 13800 + loc 5.0518155097961426e-01 9.3928313255310059e-01 415 + blend 0.0000000000000000e+00 + interp 4.8497089754823042e-01:2.9420853523085355e-01:4.5479161248318334e-01:2.5785878701538895e-01:1.0512792651195420e+00:3.3107485642100598e-01:1.9918328740156448e+00:3.3666920730946714e-01:2.7618719274313408e+00:4.8496604783925495e-01:3.1709928692106635e+00:2.8671016329147075e-01:3.9453348583048018e+00 + CVs 20 + 4.6541644426371748e-01 2.0064730215561730e-01 1.3922278177489728e-02 + 8.1461183939482096e-01 3.0952124201482495e-01 -4.6476678867285459e-04 + 1.1325367843896017e+00 3.8215827068149089e-01 -2.2249144244016472e-03 + 1.4605645003658583e+00 4.4497477400580271e-01 2.9416145748201783e-02 + 1.7926765259738304e+00 4.9318187033663458e-01 9.4428053561228742e-02 + 2.1223313267901571e+00 5.2209766593597873e-01 1.9207272174210710e-01 + 2.4437890566655884e+00 5.2831142735199887e-01 3.2078075900386976e-01 + 2.7535170282403474e+00 5.0966013524692166e-01 4.7669906668044215e-01 + 3.0497092001187789e+00 4.6509295182586285e-01 6.5366538057067891e-01 + 3.3315323842155262e+00 3.9501435045537314e-01 8.4514841695608767e-01 + 3.6004209980639788e+00 3.0045247815857090e-01 1.0444611559997028e+00 + 3.8618054632490511e+00 1.7986277905067327e-01 1.2376763045871215e+00 + 4.1205428773346178e+00 2.9117233526968711e-02 1.3944695054369907e+00 + 4.3716495968267015e+00 -1.4984020095532635e-01 1.4822009262360498e+00 + 4.6019916372663801e+00 -3.4511749130872493e-01 1.4919833266868525e+00 + 4.7965741011166587e+00 -5.3962844305115620e-01 1.4329980222194634e+00 + 4.9389863128288347e+00 -7.1202500658540213e-01 1.3186985375372191e+00 + 5.0202409040551528e+00 -8.4286737191265448e-01 1.1686649501687962e+00 + 5.1545819289725472e+00 -1.0102504584738323e+00 1.0094202487986323e+00 + id 13801 + loc 6.5078312158584595e-01 8.0344986915588379e-01 396 + blend 0.0000000000000000e+00 + interp 4.5805261396795421e-01:4.5804803344181455e-01:2.4949766008248697e-01:4.2478339907090917e-01:8.2550838714589814e-01:3.8412389308147388e-01:1.6409448645410207e+00:3.0633644964118206e-01:2.0691303137628108e+00:3.7225387830433587e-01:2.7410842508904025e+00:3.5747542180496578e-01:3.0366253198210362e+00:3.5765776128276178e-01:3.9770346578575491e+00 + CVs 20 + 9.7727813136204078e-01 1.3853809359064156e-01 -3.9647654170540370e-01 + 1.6254553932394380e+00 6.9152214558697356e-02 -7.3461201118453612e-01 + 2.1901748041172002e+00 -7.3432593931723522e-02 -1.0616143313956306e+00 + 2.7486149010884859e+00 -2.4312891820313565e-01 -1.3886815305170552e+00 + 3.2892267118931868e+00 -4.3478034485617711e-01 -1.7062581103622083e+00 + 3.8035649771267197e+00 -6.4231378689477070e-01 -2.0077875277441199e+00 + 4.2848919593201282e+00 -8.6290186975090588e-01 -2.2874369312854093e+00 + 4.7273416022786954e+00 -1.1005618042074887e+00 -2.5373721834200746e+00 + 5.1238630146835664e+00 -1.3638761482613229e+00 -2.7501799467944799e+00 + 5.4627867046370655e+00 -1.6591937703554722e+00 -2.9232466831822963e+00 + 5.7332909931862641e+00 -1.9861159314480019e+00 -3.0590327023914572e+00 + 5.9343558416568891e+00 -2.3357711484782877e+00 -3.1606292119310435e+00 + 6.0767328676856280e+00 -2.6929246896070138e+00 -3.2346599243424530e+00 + 6.1746320509878645e+00 -3.0374184611894703e+00 -3.2954677429345409e+00 + 6.2415147697809426e+00 -3.3552171039371168e+00 -3.3588148094797909e+00 + 6.2906348538240522e+00 -3.6406258409123176e+00 -3.4323160928219236e+00 + 6.3382499540809674e+00 -3.8991017874403808e+00 -3.5144228009985881e+00 + 6.4012983277659536e+00 -4.1572130930429694e+00 -3.6002922634513372e+00 + 6.4767228529713767e+00 -4.5228524364159544e+00 -3.7069523768073402e+00 + id 13802 + loc 2.2271831333637238e-01 7.7839982509613037e-01 403 + blend 0.0000000000000000e+00 + interp 2.9445711848410938e-01:2.9445417391292456e-01:3.0473635621242534e-01:2.9042694679251613e-01:1.4107154895052227e+00:2.8883062339335941e-01:2.0115917495368603e+00:2.9325098551250478e-01:2.8588386668538686e+00:2.7830928795421794e-01:3.2895489386459538e+00 + CVs 20 + -2.9760189076493866e-02 1.5033237884755291e-01 -3.4428515876640128e-02 + -7.4807099089113940e-02 2.6076618468089219e-01 -7.5115123439346260e-02 + -1.2458537251736751e-01 3.4722330566356807e-01 -1.2638898391131673e-01 + -1.6747720727087603e-01 4.1676600765469957e-01 -1.8944271498341064e-01 + -2.0165597296564830e-01 4.7171497341921703e-01 -2.6743804710144142e-01 + -2.2606979511063285e-01 5.1623671021476913e-01 -3.6436143247287134e-01 + -2.4357784025947166e-01 5.5689422163374436e-01 -4.8402921626539469e-01 + -2.6178064644639532e-01 6.0165874222652405e-01 -6.2891525353610789e-01 + -2.8819295082904450e-01 6.5929817863852591e-01 -7.9783231854555914e-01 + -3.2596761512006012e-01 7.3954863944324323e-01 -9.8554353926842320e-01 + -3.7845883779229139e-01 8.5185048033993183e-01 -1.1845463211087304e+00 + -4.5423559060597912e-01 9.9917687504877772e-01 -1.3821202539239534e+00 + -5.5771808513480847e-01 1.1719306427704876e+00 -1.5600850016860031e+00 + -6.6936625374742409e-01 1.3485442996962864e+00 -1.7007049742078602e+00 + -7.4727275436656226e-01 1.5003415672131872e+00 -1.7966829054837037e+00 + -8.0765934609161694e-01 1.6001509990536023e+00 -1.8693850321237624e+00 + -9.1960847130228418e-01 1.6353317913242731e+00 -1.9527001474687111e+00 + -1.0852167055996293e+00 1.6000216940577476e+00 -2.0475074543577261e+00 + -1.2355729544598575e+00 1.5370769273098974e+00 -2.1295044954671152e+00 + id 13803 + loc 1.0840942710638046e-01 2.2080571949481964e-01 373 + blend 0.0000000000000000e+00 + interp 4.1146364229150084e-01:3.7479758888467746e-01:4.9473534453694112e-01:2.8435620600322331e-01:1.0971085842075099e+00:3.4158560966465218e-01:1.9087572144189013e+00:4.1145952765507793e-01:2.3567253680175764e+00:3.2159048459005823e-01:2.9978309275827688e+00:2.7899777930328540e-01:3.7232938222677379e+00 + CVs 20 + -8.2586395010861277e-02 9.3295060523945605e-01 3.2300739600778716e-01 + -2.1671301004202345e-01 1.8400650436827830e+00 5.5226523181040577e-01 + -4.1740846704874435e-01 2.6864045728436876e+00 6.3128633145474533e-01 + -6.8978021528297329e-01 3.4180485411898687e+00 5.3246678256037239e-01 + -1.0373525790406972e+00 4.0000408271828762e+00 2.6332868327028702e-01 + -1.4657998587799226e+00 4.4111326474950641e+00 -1.6961220018637779e-01 + -1.9523572174489463e+00 4.5412430994695674e+00 -7.8598751077641493e-01 + -2.4350447123625716e+00 4.2777752994624434e+00 -1.5263188386936000e+00 + -2.8665022726449316e+00 3.6317238439708186e+00 -2.2917461038123319e+00 + -3.1739063283422895e+00 2.6424744658207335e+00 -2.9633096479915877e+00 + -3.3053494520528326e+00 1.4067661304610692e+00 -3.3945788268959811e+00 + -3.2578598562409224e+00 1.1377090288688319e-01 -3.5128440666764607e+00 + -3.0684084760836692e+00 -1.0489949307463293e+00 -3.4185186961792082e+00 + -2.7705461686873076e+00 -1.9987097881277356e+00 -3.2859196675182467e+00 + -2.4015084544809233e+00 -2.7952841602417062e+00 -3.3219608651779788e+00 + -2.1037274875590697e+00 -3.4831395221790671e+00 -3.6956485139588562e+00 + -1.8844067771134705e+00 -3.8792047499472329e+00 -4.1036613978017709e+00 + -1.5905199643461643e+00 -4.0798851723797060e+00 -4.6287392591994498e+00 + -2.0027985680469826e+00 -4.0994224735340872e+00 -5.2722432460716320e+00 + id 13804 + loc 4.4616695493459702e-02 3.3238399028778076e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7717985817547892e-01:3.1796177176272650e-01:1.2375442198547726e-01:2.5143232140803373e-01:1.0010728077507147e+00:3.0691376743669196e-01:1.6977677802820428e+00:3.0877260767675058e-01:2.1882538534878471e+00:4.7717508637689721e-01:3.0014467162198586e+00:2.5579950015874370e-01:3.5726324844851329e+00 + CVs 20 + -2.7021192352641787e-01 2.0700985227854818e-01 -6.1876866581402214e-02 + -5.3954303660356051e-01 4.2249187780941494e-01 -1.3378066972427460e-01 + -8.1379808753578708e-01 6.4427579123993084e-01 -2.1858089520294377e-01 + -1.0958735114806666e+00 8.6757894845015693e-01 -3.1486550259923829e-01 + -1.3831394801075623e+00 1.0857005202006125e+00 -4.1720123708468115e-01 + -1.6752658881665101e+00 1.2920255206870113e+00 -5.2015740672501432e-01 + -1.9773603376788440e+00 1.4817414079350222e+00 -6.2027026096900340e-01 + -2.2952429989475300e+00 1.6481594085902120e+00 -7.1487024695252810e-01 + -2.6320748061099644e+00 1.7814181232979032e+00 -8.0225428905477070e-01 + -2.9891375740508974e+00 1.8706613188169907e+00 -8.8334892891573147e-01 + -3.3634209606591732e+00 1.9044098425787575e+00 -9.6236917351058127e-01 + -3.7480813329721219e+00 1.8735104200199877e+00 -1.0480297080429106e+00 + -4.1290787691902429e+00 1.7762633558572554e+00 -1.1528057401564837e+00 + -4.4831610482241429e+00 1.6221191415058920e+00 -1.2877291256459151e+00 + -4.7876591209370458e+00 1.4295221865600691e+00 -1.4571637035520546e+00 + -5.0283601622107374e+00 1.2198749119810419e+00 -1.6569735706493920e+00 + -5.2039548107889519e+00 1.0107606504598805e+00 -1.8765799857658716e+00 + -5.3238353099357534e+00 8.1153666868089935e-01 -2.1056896385050625e+00 + -5.3732181295320158e+00 6.2452762000802098e-01 -2.3404961349010165e+00 + id 13805 + loc 8.9518773555755615e-01 5.7349973917007446e-01 378 + blend 0.0000000000000000e+00 + interp 4.6110436964715168e-01:2.5846714949021909e-01:9.5408019187234960e-02:2.6783233215928626e-01:9.9573326010532315e-01:4.2552431473471725e-01:1.3574293843004357e+00:4.6109975860345526e-01:1.9881009033362802e+00:3.5107450446701349e-01:2.4985757515805744e+00:2.6348497354824635e-01:3.5952979906249052e+00 + CVs 20 + 3.3725756252863370e-01 3.6152572854130760e-01 6.2807817215458070e-02 + 6.3354248357426979e-01 6.7379048539861452e-01 1.1580365904871946e-01 + 9.3816343658122159e-01 9.4065472588953081e-01 1.4892074266728492e-01 + 1.2635720698507973e+00 1.1655725127222238e+00 1.6068412538494514e-01 + 1.6050986386635022e+00 1.3692572608431037e+00 1.6331985166375002e-01 + 1.9685224026220616e+00 1.5696553074227695e+00 1.7671457960848913e-01 + 2.3664477564046504e+00 1.7558108792052987e+00 2.2645052526800979e-01 + 2.8021284758995577e+00 1.9029160022908793e+00 3.3526731065590976e-01 + 3.2662037152226269e+00 1.9900524516236773e+00 5.1954601541824941e-01 + 3.7449411716754262e+00 1.9938189504061756e+00 7.8152444988381409e-01 + 4.2181543194073665e+00 1.8834840302763038e+00 1.0938746283532239e+00 + 4.6518575715219583e+00 1.6359774417335937e+00 1.4057511659796083e+00 + 5.0115718802069562e+00 1.2446445190832467e+00 1.6702029726846157e+00 + 5.3079129763593436e+00 7.3244689391765894e-01 1.8748974865972343e+00 + 5.6138122670379733e+00 1.5086235372413137e-01 2.0485126786160155e+00 + 6.0186748558379506e+00 -4.3591672628400913e-01 2.2126237702868918e+00 + 6.5699601031342105e+00 -9.6076794538662336e-01 2.3295887478984039e+00 + 7.1879815621800169e+00 -1.3611052204326626e+00 2.3629330542127103e+00 + 7.6180558813833121e+00 -1.6640308083614812e+00 2.4070797793743792e+00 + id 13806 + loc 3.7285986542701721e-01 1.3603833317756653e-01 379 + blend 0.0000000000000000e+00 + interp 4.4566628816049569e-01:3.8743857107101498e-01:7.6612579071699827e-04:4.4566183149761412e-01:9.4471839147845060e-01:3.0614497089247411e-01:1.5879517068445863e+00:1.9910960137624870e-01:2.0326045972440281e+00:2.9327564255548461e-01:3.0000075362902718e+00:2.7013485895948064e-01:3.7226260684545185e+00 + CVs 20 + -3.2644927490060482e-02 2.4182332141968921e-01 4.0438320512217518e-01 + -2.8401631384628673e-02 4.6237659370928025e-01 7.6581865368621771e-01 + 3.0173525401540502e-02 6.3533035120934034e-01 1.1208531444732079e+00 + 1.4676673732673987e-01 7.5112116509200577e-01 1.4779503406905361e+00 + 2.9397479113591918e-01 8.4172439177177094e-01 1.8005579556957088e+00 + 4.4106518208593259e-01 9.4289515969232252e-01 2.0690253153099736e+00 + 5.7112260996371889e-01 1.0675907828082538e+00 2.3069068786242979e+00 + 6.6888186837526720e-01 1.2151235217776590e+00 2.5455230317662645e+00 + 7.1641295998565058e-01 1.3876197011034179e+00 2.7904000100755573e+00 + 6.9740751266378043e-01 1.5959857048389137e+00 3.0348554047695879e+00 + 6.2117961298308666e-01 1.8427911346206076e+00 3.2744194657020080e+00 + 5.2681789348255159e-01 2.1208759667419637e+00 3.5155333629551779e+00 + 4.3154851581113951e-01 2.4208629568050979e+00 3.7885728780188694e+00 + 3.0696011834946063e-01 2.7009065422294762e+00 4.1409712210978045e+00 + 9.5297730636765610e-02 2.8857411948042513e+00 4.5914992336981415e+00 + -2.9720407273190630e-01 2.8690613501819398e+00 5.0899269899712660e+00 + -8.6941504971497585e-01 2.5260795811987249e+00 5.5397500858322779e+00 + -1.3001803413212607e+00 1.8508084740975894e+00 5.9376089408184463e+00 + -1.2139852561885114e+00 1.4074455979974343e+00 6.3333342389447393e+00 + id 13807 + loc 1.5564013272523880e-02 5.7307821512222290e-01 380 + blend 0.0000000000000000e+00 + interp 4.9002564676037458e-01:2.1077296830183051e-01:7.2957732350519278e-02:2.3843502840710121e-01:9.9904939262350012e-01:3.2819049839702719e-01:2.0559676548766070e+00:4.9002074650390698e-01:2.9960585123728727e+00:2.9808234437356668e-01:3.2812497868951591e+00 + CVs 20 + -4.3218617461415443e-01 3.3828925679344224e-01 -4.2531986641655956e-01 + -8.2596195989332366e-01 5.8185925707295016e-01 -7.7245005493260988e-01 + -1.2179506989153248e+00 7.6520368958485951e-01 -1.0951899959160216e+00 + -1.6255493271929815e+00 9.0965722083914669e-01 -1.4198147105898526e+00 + -2.0416026051905583e+00 1.0143674676941785e+00 -1.7481039411199095e+00 + -2.4625997070591028e+00 1.0705989241181300e+00 -2.0781947936084002e+00 + -2.8858186637196139e+00 1.0683366250495423e+00 -2.4027418121051385e+00 + -3.3055161967502973e+00 1.0060529197902615e+00 -2.7111886182895675e+00 + -3.7165582387954030e+00 8.9285397111309184e-01 -2.9917976497708403e+00 + -4.1139545445372043e+00 7.4518834093834041e-01 -3.2288601036818525e+00 + -4.4887570377556063e+00 5.8403290330185254e-01 -3.4073744640774590e+00 + -4.8346495082679244e+00 4.2830826883433382e-01 -3.5295930825128727e+00 + -5.1606734300693269e+00 2.8177172347716439e-01 -3.6225522116734088e+00 + -5.4853234856654716e+00 1.2282778741069267e-01 -3.7188273409927568e+00 + -5.8085505264229518e+00 -6.6780961132108185e-02 -3.8164590194606376e+00 + -6.0996204124680702e+00 -2.4561249995644863e-01 -3.8915110405138087e+00 + -6.3011315563405041e+00 -3.3144508454175847e-01 -3.9203952972229437e+00 + -6.3717039539887796e+00 -3.0618729010863266e-01 -3.9117858640343526e+00 + -6.6060920588707681e+00 -3.9424858468026125e-01 -3.9783722253184575e+00 + id 13808 + loc 1.1761908978223801e-01 8.1437671184539795e-01 375 + blend 0.0000000000000000e+00 + interp 4.7064706622481844e-01:4.4589973557968710e-01:1.5501911420829939e-01:4.7064235975415619e-01:7.3313402798186778e-01:3.4678816126388395e-01:1.5058530985999652e+00:3.1178065832701179e-01:2.0964352524009175e+00:2.7987478775733043e-01:3.1178391553733600e+00 + CVs 20 + -3.7619676279201658e-01 3.6091625668378696e-01 2.1708572026404749e-02 + -7.3107680121395302e-01 6.1475969585139190e-01 9.6022170083908814e-02 + -1.1299008597671736e+00 7.3134041833379526e-01 2.2464438559425498e-01 + -1.6034680546168933e+00 7.4378468717220492e-01 4.1214806574834495e-01 + -2.1525940537903119e+00 7.4570183631187059e-01 6.4553836953154486e-01 + -2.7876737844493893e+00 8.2199546693636727e-01 8.7096020869843793e-01 + -3.4945645864378241e+00 1.0159455832289515e+00 1.0012898937965331e+00 + -4.2163400720454574e+00 1.3379564432273934e+00 9.7284321137038510e-01 + -4.8789267232328015e+00 1.7684145194793424e+00 7.6803934550867081e-01 + -5.4350346825119331e+00 2.2476156348314413e+00 4.0809179511456750e-01 + -5.8899244752568274e+00 2.7078974963704709e+00 -9.0993824175521265e-02 + -6.2569519786141381e+00 3.0826802309027164e+00 -7.5417153613211740e-01 + -6.5108511412466870e+00 3.2750921389308472e+00 -1.5956143797123132e+00 + -6.5919068013409108e+00 3.1915599181122394e+00 -2.5545891656980722e+00 + -6.4731002852224684e+00 2.7888010791552200e+00 -3.4577638885512103e+00 + -6.3407894773646918e+00 2.1658252498989610e+00 -4.0239883288495326e+00 + -6.4883709737171920e+00 1.5972600693181533e+00 -4.1180588482518115e+00 + -6.7845594276229901e+00 1.2457255214488065e+00 -4.0074319167118535e+00 + -6.8864597371462235e+00 7.0664650538072893e-01 -4.1427777212742027e+00 + id 13809 + loc 5.3928035497665405e-01 6.5755087137222290e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6264901609699943e-01:3.2766352727252090e-01:1.7161787075730417e-01:3.1584538752462321e-01:9.6468882317418370e-01:2.7375468021331023e-01:1.6457629101522904e+00:2.7700333624630824e-01:2.2362206276318872e+00:4.6264438960683846e-01:2.9718664747143624e+00:2.8797364905067713e-01:3.5788213165677756e+00 + CVs 20 + 1.2395083035557936e-02 2.4618205127363590e-01 8.3852305624853268e-02 + 3.4137677103868343e-02 5.0943452481609863e-01 1.5879853498418051e-01 + 7.5631667186131180e-02 8.0449202961182109e-01 2.1896779665608462e-01 + 1.5400581755643006e-01 1.1446288157164461e+00 2.5523207268527853e-01 + 2.8639627567123427e-01 1.5268609823592183e+00 2.4510021847988572e-01 + 4.8665771400527735e-01 1.9325230426866904e+00 1.6163753166652095e-01 + 7.5619102202532096e-01 2.3287213577646884e+00 -2.0895855922036466e-02 + 1.0816174900296776e+00 2.6774009670952963e+00 -3.2191273588703706e-01 + 1.4340133093090170e+00 2.9405126261573926e+00 -7.5318921484317736e-01 + 1.7689986488277583e+00 3.0800919719279469e+00 -1.3115068662072038e+00 + 2.0384803748671216e+00 3.0639737168030221e+00 -1.9680644885747249e+00 + 2.2008664577010415e+00 2.8829866501485717e+00 -2.6452771247006615e+00 + 2.2544117031298501e+00 2.5934963440920282e+00 -3.2181579060877015e+00 + 2.2625392646243454e+00 2.3285148503356448e+00 -3.5648505440784590e+00 + 2.3012433477202769e+00 2.2445021643578791e+00 -3.5394793747406337e+00 + 2.3576375718531164e+00 2.2749790206993241e+00 -2.9481601788136622e+00 + 2.2525272709619539e+00 1.9440333996133470e+00 -1.9343447233758710e+00 + 1.7266376709046793e+00 7.6719308319824453e-01 -1.0460742037396051e+00 + 1.8147005941897201e+00 9.0663612289011630e-01 -1.0503232759046632e+00 + id 13810 + loc 9.1017264127731323e-01 4.9458846449851990e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5792163220409154e-01:4.5791705298776952e-01:2.1019892012136498e-02:4.4192376199576106e-01:6.5208373296660138e-01:4.1666247061394301e-01:9.4622172073050459e-01:3.1878060986871942e-01:1.1935623688732870e+00:2.3152091572604372e-01:1.9113769248607571e+00:3.4663860500079940e-01:2.1985304645609629e+00:3.5573420667093975e-01:2.8957450847676243e+00:3.7855661386078521e-01:3.4587617068306429e+00 + CVs 20 + -1.5918140399495506e-01 1.9023638797148287e-01 2.4910374939281865e-01 + -3.1433248757284266e-01 3.5445343421132147e-01 4.5476033475419314e-01 + -4.6702749672656657e-01 4.9580935032382484e-01 6.3288289322612534e-01 + -6.2025463240527978e-01 6.1671023577836237e-01 7.9542639109058533e-01 + -7.9395497720463237e-01 7.1285470434179909e-01 9.4253719252278567e-01 + -1.0160855880768529e+00 7.7804092443458805e-01 1.0686774661638077e+00 + -1.2932792200231851e+00 8.2972590410111324e-01 1.1732590174087063e+00 + -1.5944093466957834e+00 9.1057666373076607e-01 1.2619002069436862e+00 + -1.8760844073760232e+00 1.0490883969611065e+00 1.3169548820352381e+00 + -2.1397258833249526e+00 1.2737449452777483e+00 1.2843441124862611e+00 + -2.4181018961810268e+00 1.6807242611541238e+00 1.1662054199511465e+00 + -2.6294461002293126e+00 2.2794326265515350e+00 1.1573302555557241e+00 + -2.6566773392046859e+00 2.8402841240319807e+00 1.3472451438133377e+00 + -2.5086041041110541e+00 3.2378227214117778e+00 1.6222364577240445e+00 + -2.2362825986052233e+00 3.4679208362340295e+00 1.8951963190713323e+00 + -1.8876668607596709e+00 3.5761186608459155e+00 2.1818461048636895e+00 + -1.4965536126611276e+00 3.5993912367552721e+00 2.5693345694684080e+00 + -1.1167499283062874e+00 3.4939772930902375e+00 3.0785553805701449e+00 + -1.1915908584490926e+00 3.2234208620511726e+00 3.0835775773873904e+00 + id 13811 + loc 6.7081332206726074e-01 6.9157111644744873e-01 393 + blend 0.0000000000000000e+00 + interp 4.2749663372355018e-01:3.9399627912869739e-01:2.7638191688357738e-01:3.7918248211117472e-01:9.0003964207535980e-01:3.8578785019428119e-01:1.4593736132431163e+00:2.7514575877399489e-01:2.0035489399056310e+00:4.2749235875721298e-01:2.6207253134939776e+00:3.8990703984475761e-01:3.0148470593740271e+00:3.7406757026705567e-01:3.5412232220248048e+00:4.2683781402355819e-01:3.9899043188038608e+00 + CVs 20 + -2.7667437737448719e-01 3.4710885974134165e-01 -3.0790932828552342e-01 + -5.2006876163112903e-01 7.0152476990318791e-01 -5.7612839642364277e-01 + -7.3772666098821715e-01 1.0774986764598384e+00 -8.3333113862332708e-01 + -9.4396523166474633e-01 1.4760142951329607e+00 -1.0940161014065266e+00 + -1.1572707811123317e+00 1.8897112353485079e+00 -1.3629486037923892e+00 + -1.3960040534837148e+00 2.3100099747302112e+00 -1.6429049345591649e+00 + -1.6795298985410139e+00 2.7258371172193065e+00 -1.9353589780464517e+00 + -2.0322931162736699e+00 3.1167499577145166e+00 -2.2404323418901821e+00 + -2.4568780971829067e+00 3.4464235923758171e+00 -2.5443733705708542e+00 + -2.9174499707978052e+00 3.6917333447414924e+00 -2.8257836993934848e+00 + -3.3960815434049723e+00 3.8560994745548465e+00 -3.0867808385833109e+00 + -3.9093691093719496e+00 3.9364512935767562e+00 -3.3520765865039146e+00 + -4.4508047226403082e+00 3.9095268977560522e+00 -3.6203105633399213e+00 + -4.9738749013055674e+00 3.7578275436023856e+00 -3.8530671480849912e+00 + -5.4230670288245193e+00 3.4834594537530359e+00 -4.0415726562618524e+00 + -5.7351845237409202e+00 3.0992555387427561e+00 -4.2328598401677624e+00 + -5.8953392419457833e+00 2.6226711316369653e+00 -4.4481138766632364e+00 + -5.9865433550264449e+00 2.0749283448287144e+00 -4.6011613494792529e+00 + -6.0726970571507479e+00 1.5148810667464543e+00 -4.5024183488567671e+00 + id 13812 + loc 8.1891268491744995e-01 9.7049809992313385e-02 409 + blend 0.0000000000000000e+00 + interp 5.6689842936504453e-01:3.4722535634731633e-01:7.1670858299312634e-02:2.7689412199394281e-01:9.9729930024657543e-01:5.6689276038075087e-01:1.7670367731013716e+00:5.4049890959000668e-01:1.9985669985872494e+00:4.8106615555128468e-01:2.2374816356743303e+00:2.7276789798591877e-01:2.9195860438307104e+00:2.8597013196693166e-01:3.5500661070777584e+00 + CVs 20 + -1.9298875903168750e-01 1.8286934993327619e-03 1.5506307882874437e-01 + -4.0449181865026929e-01 1.9168762508926490e-02 3.1227227529102952e-01 + -6.2520713825298246e-01 4.7909187863771352e-02 4.6042333079862613e-01 + -8.4703169476925000e-01 8.3296207993319049e-02 5.9327472357508038e-01 + -1.0647981199404901e+00 1.2218244144005463e-01 7.1175989249033644e-01 + -1.2742516826448700e+00 1.6238574829046326e-01 8.1911267739180138e-01 + -1.4681152896527090e+00 2.0447965564349568e-01 9.1785629599415175e-01 + -1.6374455448243754e+00 2.5110669487397108e-01 1.0092281766037969e+00 + -1.7816487018700631e+00 3.0484176792511553e-01 1.0923580974359046e+00 + -1.9079660761791351e+00 3.6686440917479968e-01 1.1628850751512050e+00 + -2.0229069567165965e+00 4.3712042000239992e-01 1.2191448496275215e+00 + -2.1369370573542579e+00 5.0660430404244194e-01 1.2715372089259942e+00 + -2.2625318520970095e+00 5.5249573867183432e-01 1.3367293606456672e+00 + -2.4013810392610617e+00 5.5450571970606211e-01 1.4233354799824962e+00 + -2.5452038372680570e+00 5.0527954303670763e-01 1.5317745714791058e+00 + -2.6820720111306353e+00 4.0769665082027351e-01 1.6622217644023518e+00 + -2.8018051226688163e+00 2.6408555780374487e-01 1.8142159724409495e+00 + -2.8982553817068268e+00 6.5493603393949273e-02 1.9773492451529953e+00 + -2.9741151056724382e+00 -2.8986764333465542e-01 2.1491660228373464e+00 + id 13813 + loc 8.7409466505050659e-01 3.3488109707832336e-01 400 + blend 0.0000000000000000e+00 + interp 4.1963475304740755e-01:2.9869216017738159e-01:5.6399471771044118e-01:3.2784540369856063e-01:1.8047635345890884e+00:4.1963055669987709e-01:2.1533796636528644e+00:3.7825661221740914e-01:3.0128118338452845e+00:2.7693114213202075e-01:3.7113514077758212e+00 + CVs 20 + 2.9972529430517381e-01 1.7683519629238403e-01 2.5182003342391923e-01 + 5.4526985117314508e-01 3.1192472992891540e-01 4.9557550944484685e-01 + 7.5123139925470728e-01 4.1225279954666161e-01 7.3773636581357693e-01 + 9.2501997822580428e-01 4.8113949326870964e-01 9.7689596336513662e-01 + 1.0712617924120447e+00 5.2118210195072479e-01 1.2095137829104154e+00 + 1.1966307130756375e+00 5.3784642683163819e-01 1.4350617087287221e+00 + 1.3057055002937914e+00 5.4094251365886414e-01 1.6496709723952259e+00 + 1.4000731241461251e+00 5.4279809767666198e-01 1.8449547175419569e+00 + 1.4812319874448963e+00 5.5115295640114037e-01 2.0184130841793535e+00 + 1.5521373136696826e+00 5.6817570202222056e-01 2.1752520449132464e+00 + 1.6155118643856299e+00 5.9733799954331146e-01 2.3196279127515895e+00 + 1.6741864734893293e+00 6.4385312134432882e-01 2.4543740595204611e+00 + 1.7396721369007340e+00 7.1063316728875270e-01 2.5863100002499664e+00 + 1.8311844764186564e+00 7.9328985290212395e-01 2.7283143791103228e+00 + 1.9591265857920810e+00 8.8674903448483988e-01 2.8966938948029730e+00 + 2.1100129342190419e+00 9.9208325312843137e-01 3.1110381425241975e+00 + 2.2492307981061503e+00 1.0934525820031378e+00 3.3833337469206199e+00 + 2.3335840858797763e+00 1.1207833560987810e+00 3.6746621404763697e+00 + 2.2452912017275359e+00 8.5970614127633915e-01 3.7546190143399292e+00 + id 13814 + loc 9.5019258558750153e-02 7.4854761362075806e-01 382 + blend 0.0000000000000000e+00 + interp 3.6741456336406314e-01:3.6100820888829710e-01:4.0725165009592568e-01:3.2569142442335247e-01:1.0359693505691279e+00:3.1826166924593668e-01:2.0255163242497116e+00:3.6741088921842951e-01:3.0138049260749762e+00:3.2677239672425584e-01:3.8792316428718161e+00 + CVs 20 + 8.7784185498299372e-01 2.9031440371864647e-01 -3.7344827189781732e-01 + 1.4608638912679817e+00 4.5190169126771634e-01 -6.3619361086913484e-01 + 1.9676746329040296e+00 5.4907895939084339e-01 -8.7226712368588322e-01 + 2.5092392648352839e+00 6.1009022271118507e-01 -1.1191250794350724e+00 + 3.0819530213076498e+00 6.1235383839324964e-01 -1.3789881407557831e+00 + 3.6768624673086778e+00 5.3798919457143435e-01 -1.6563236069691536e+00 + 4.2788839245710184e+00 3.7912071405691028e-01 -1.9586319557028746e+00 + 4.8668742280482382e+00 1.3422322535559950e-01 -2.2879805974968876e+00 + 5.4184518148628822e+00 -1.9949716552975882e-01 -2.6320967765834169e+00 + 5.9113203190432593e+00 -6.2728066532134408e-01 -2.9680316179228141e+00 + 6.3185061665780458e+00 -1.1467142612460330e+00 -3.2709632743453851e+00 + 6.6199772386949327e+00 -1.7360792821298856e+00 -3.5226365159731658e+00 + 6.8184742153042066e+00 -2.3685090564911127e+00 -3.7158518606136530e+00 + 6.9270236811030266e+00 -3.0207498710993095e+00 -3.8548994162926360e+00 + 6.9507820398838067e+00 -3.6591634705433691e+00 -3.9489273330315946e+00 + 6.9081047485024127e+00 -4.2418039396852691e+00 -4.0026356980885245e+00 + 6.8325990725614130e+00 -4.7312703022274363e+00 -4.0159801902179764e+00 + 6.7584350873050782e+00 -5.1216103841421274e+00 -4.0015766816749840e+00 + 6.6995651794519251e+00 -5.5416977404353789e+00 -4.0310503752772853e+00 + id 13815 + loc 9.8520916700363159e-01 8.4938561916351318e-01 401 + blend 0.0000000000000000e+00 + interp 4.1938863452081776e-01:3.0718155668650660e-01:3.7868953626421675e-01:3.6852957105343975e-01:9.9544089253778156e-01:2.6284473282298743e-01:1.9983878249114997e+00:4.1938444063447256e-01:2.9635637538407389e+00:2.4085073032040030e-01:3.2126397285690200e+00 + CVs 20 + -1.2624667733983144e-02 3.0404376859110316e-01 -2.9891363957953709e-01 + -1.0165193555345897e-02 6.0333166295333196e-01 -5.8497536584455634e-01 + 1.4916071827551669e-02 9.0176420186706130e-01 -9.0190607145531332e-01 + 6.2025815420192199e-02 1.1860444143978568e+00 -1.2732226618225659e+00 + 1.1829504378658356e-01 1.4344600142633153e+00 -1.7104647167451810e+00 + 1.5160174531889348e-01 1.6310988464125087e+00 -2.2193724011459919e+00 + 1.1357386414430160e-01 1.7634751991191604e+00 -2.7910449379230218e+00 + -3.8941397722430215e-02 1.8129198158519166e+00 -3.3942273229122182e+00 + -3.2263548423468902e-01 1.7599611435941318e+00 -3.9787277625112041e+00 + -7.1713210922135018e-01 1.5995745493474127e+00 -4.4927557845827693e+00 + -1.1714004617846898e+00 1.3435475430626957e+00 -4.9033335737052637e+00 + -1.6204511501667005e+00 1.0136211025498962e+00 -5.2076021508969843e+00 + -2.0238853804320542e+00 6.3722927644853955e-01 -5.4252297338885356e+00 + -2.3838676067223319e+00 2.4388939449524638e-01 -5.5740024503995640e+00 + -2.7038820824939012e+00 -1.3007044989740882e-01 -5.6853643203045010e+00 + -2.9684263581933221e+00 -4.4199865881867839e-01 -5.8296512588442440e+00 + -3.1634703250774039e+00 -6.6709760913864402e-01 -6.0352995660678976e+00 + -3.3174226706721264e+00 -8.3463113455510629e-01 -6.2513462905093400e+00 + -3.5007318623045420e+00 -1.0071141658975846e+00 -6.4645965618875616e+00 + id 13816 + loc 3.8202768564224243e-01 6.2575763463973999e-01 415 + blend 0.0000000000000000e+00 + interp 2.8343678241290182e-01:2.6109194916428985e-01:2.9248697567550541e-01:2.7372061827327226e-01:1.5810633835673711e+00:2.2017109285514941e-01:2.5023822076695819e+00:2.8343394804507771e-01:3.1277070601944756e+00 + CVs 20 + 4.0450957755527650e-01 2.1955744973810598e-01 8.5013779295459668e-02 + 7.1875801726000543e-01 3.4723753623562720e-01 1.1057833375775900e-01 + 1.0131523437138275e+00 4.4661531656699882e-01 1.4724486111631352e-01 + 1.3078028268439930e+00 5.3668578455296656e-01 2.1834239926828625e-01 + 1.5986663870373974e+00 6.1388460051847571e-01 3.2288672159068538e-01 + 1.8815993665821547e+00 6.7633911882613484e-01 4.6020130569489820e-01 + 2.1517929513913900e+00 7.2358333655208407e-01 6.2877535564176823e-01 + 2.4055522654322234e+00 7.5644235418487393e-01 8.2511347722474060e-01 + 2.6416022269467718e+00 7.7664386230355531e-01 1.0449979394912958e+00 + 2.8584717930283565e+00 7.8615679946391437e-01 1.2842617879913381e+00 + 3.0500915519797065e+00 7.8738048937767169e-01 1.5353882552947946e+00 + 3.2115364486696949e+00 7.8244244255438034e-01 1.7860387516524718e+00 + 3.3558170850930420e+00 7.6908972551477706e-01 2.0264637592986219e+00 + 3.5143803072667250e+00 7.3784541233910472e-01 2.2511981437038551e+00 + 3.7054327403172964e+00 6.8093873895620072e-01 2.4515294825077047e+00 + 3.9209147739168291e+00 6.0066733831623420e-01 2.6220236014508158e+00 + 4.1497762663275104e+00 5.0219828955450252e-01 2.7597348853969663e+00 + 4.3875618872598832e+00 3.8975087653913487e-01 2.8568391957448038e+00 + 4.6181432296731808e+00 2.7799056193821059e-01 2.8891503213523189e+00 + id 13817 + loc 5.0536066293716431e-01 8.2852381467819214e-01 395 + blend 0.0000000000000000e+00 + interp 4.3557018128349440e-01:3.4311785924117782e-01:9.9959512689294372e-02:3.6934233245283671e-01:1.0058275010983353e+00:3.5944649079992552e-01:1.8891390932601693e+00:4.3556582558168155e-01:2.2177828992401269e+00:3.1463754943874972e-01:3.0027834806001517e+00:3.1527145937612439e-01:3.7028213903243108e+00 + CVs 20 + 5.0626767825623276e-01 1.2691739486497494e-01 -3.7142722808102169e-01 + 8.7585323198621479e-01 1.8084075649828379e-01 -6.8590291099193956e-01 + 1.1974881412443281e+00 2.1664704247939265e-01 -9.7887890902139230e-01 + 1.5064278671677003e+00 2.5700108361529661e-01 -1.2593077829214754e+00 + 1.8062507182580734e+00 3.0064487719072175e-01 -1.5190370469558079e+00 + 2.1016773701184981e+00 3.4543941291816371e-01 -1.7529419095616263e+00 + 2.3985946416630854e+00 3.8917557020460303e-01 -1.9605709169793375e+00 + 2.7039373010201038e+00 4.2850141016338283e-01 -2.1458799757880369e+00 + 3.0251441822436047e+00 4.5606252191173313e-01 -2.3128499900487083e+00 + 3.3686493035233100e+00 4.5882253608065482e-01 -2.4637643333887764e+00 + 3.7344418218446127e+00 4.1749610079826627e-01 -2.6068725806202258e+00 + 4.1082249564711404e+00 3.1058377890513733e-01 -2.7573526536849045e+00 + 4.4672336635578267e+00 1.2751272809216552e-01 -2.9230767460234337e+00 + 4.7970851257646787e+00 -1.2683829717487249e-01 -3.0997730516419182e+00 + 5.0941410189376901e+00 -4.4024279848012826e-01 -3.2812780013005209e+00 + 5.3591252190318039e+00 -7.9534816611302528e-01 -3.4664807015814438e+00 + 5.5900630441304635e+00 -1.1747183707762190e+00 -3.6549392786939707e+00 + 5.7839734945157852e+00 -1.5691690531312017e+00 -3.8395084590401871e+00 + 5.9259025045515061e+00 -1.9764070634591109e+00 -3.9953028629708278e+00 + id 13818 + loc 9.6724396944046021e-01 6.1294045299291611e-02 402 + blend 0.0000000000000000e+00 + interp 4.7874778997236894e-01:4.0558981248222847e-01:8.5235996260019686e-01:2.7612797868884831e-01:1.7490976531590452e+00:2.5281782357602772e-01:2.0316248223196709e+00:4.7874300249446922e-01:2.8925422898931892e+00:3.7243199387583698e-01:3.1887589096796001e+00:4.7231927721669958e-01:3.9954066231622809e+00 + CVs 20 + 2.9294073817811733e-01 2.8883397934241944e-01 2.7156488844273557e-01 + 5.6930242451189728e-01 6.0152961417882778e-01 5.4042043475458956e-01 + 8.4730076846319746e-01 9.3084252150894486e-01 8.1378114993965500e-01 + 1.1567352623029250e+00 1.2416305254334168e+00 1.0720071035496948e+00 + 1.5187334577373006e+00 1.4909990716069370e+00 1.2882762467908047e+00 + 1.9305013326659279e+00 1.6508283138127333e+00 1.4543714768512530e+00 + 2.3777467089880902e+00 1.7070536539443826e+00 1.5874771335909967e+00 + 2.8455319344814374e+00 1.6481206910243185e+00 1.7189418994375156e+00 + 3.3025947624184462e+00 1.4597754781350631e+00 1.8678556190787674e+00 + 3.6940456177014700e+00 1.1410352950312641e+00 2.0283447188472827e+00 + 3.9680017485768566e+00 7.3796970314655908e-01 2.1736101346856964e+00 + 4.1252828302099998e+00 3.2859673786003873e-01 2.2858843025552438e+00 + 4.2119854893444977e+00 -6.7436918635229826e-02 2.3879343925291394e+00 + 4.2900477783136584e+00 -4.8590758462379113e-01 2.5232949975391898e+00 + 4.4368873614195028e+00 -9.4940240374941109e-01 2.7303141516107798e+00 + 4.7071711009428991e+00 -1.4284072834016106e+00 3.0296631486397447e+00 + 5.0633862176205700e+00 -1.8568752385907719e+00 3.4132241982816294e+00 + 5.3976594924123367e+00 -2.1865512383141277e+00 3.8393658117463461e+00 + 5.6159385219865143e+00 -2.4079207331169910e+00 4.2554060564615295e+00 + id 13819 + loc 7.6854890584945679e-01 4.8948374390602112e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7814016992079669e-01:2.5294825686491484e-01:9.8049278015840491e-01:2.4771124384165100e-01:1.7805466248143915e+00:2.7770453495729153e-01:2.2345908424308778e+00:3.7813638851909748e-01:2.9407296139607180e+00:2.4397741092102190e-01:3.9722106585179580e+00 + CVs 20 + -8.5399499279239677e-02 4.3705897578093628e-01 2.7770490420526622e-01 + -2.3747609903970501e-01 8.5874676883983825e-01 5.2595473236863355e-01 + -4.3770043896357080e-01 1.2641258737422216e+00 7.6030195667134204e-01 + -6.7402276899362856e-01 1.6463315439110995e+00 1.0039150072373033e+00 + -9.3567555586925821e-01 1.9911147479003792e+00 1.2869515402954379e+00 + -1.2073300289483107e+00 2.2741599445069558e+00 1.6336609688010726e+00 + -1.4720144960703061e+00 2.4701799449742783e+00 2.0406253955492253e+00 + -1.7164484602900387e+00 2.5651452933790209e+00 2.4780281074954855e+00 + -1.9337711035722969e+00 2.5553876049207020e+00 2.9066654367307141e+00 + -2.1238914297223244e+00 2.4546965210072011e+00 3.2941182186456119e+00 + -2.2941927991707969e+00 2.2991442562103082e+00 3.6262477054040403e+00 + -2.4570572677204350e+00 2.1274966918262708e+00 3.9072741941629645e+00 + -2.6215604116760121e+00 1.9524970268827850e+00 4.1588886155345985e+00 + -2.7954058904737034e+00 1.7549788284978363e+00 4.4187640752247175e+00 + -2.9815948992158070e+00 1.5110260252144010e+00 4.7223819316897826e+00 + -3.1663471453854113e+00 1.2075342555438213e+00 5.0963256477782668e+00 + -3.3127189982453400e+00 8.5342944946581412e-01 5.5616664963885132e+00 + -3.3797378745820543e+00 5.1125081512243220e-01 6.0737525023293708e+00 + -3.4009183540658263e+00 3.0184851233221832e-01 6.4081495103107722e+00 + id 13820 + loc 3.7544307112693787e-01 9.9168580770492554e-01 403 + blend 0.0000000000000000e+00 + interp 4.4852681301099945e-01:4.1656491360055792e-01:6.7980223679830420e-01:2.6734575128986604e-01:1.0109975453050886e+00:2.5210003867951170e-01:2.1366779369588174e+00:4.4852232774286938e-01:3.0308386177165665e+00:2.8236051961757347e-01:3.9249017190437772e+00 + CVs 20 + -3.0736419650974948e-02 1.8291219692984636e-02 4.0389120748685045e-02 + -5.2646850239036508e-02 2.4787634658744003e-02 7.4630030114633969e-02 + -7.6052762448954481e-02 2.1914875956172794e-02 9.6760927881553327e-02 + -8.7811569453900132e-02 1.7739984365959680e-02 1.1195745788411651e-01 + -8.7787885474143096e-02 1.5461608038656330e-02 1.1955050701409456e-01 + -7.7782812356784317e-02 1.7403087870554945e-02 1.1736499195090656e-01 + -6.1284449853854991e-02 2.5253818656460023e-02 1.0184550808333376e-01 + -4.3250584424457658e-02 4.1407315778270767e-02 7.0060506425993069e-02 + -3.0710551162275942e-02 6.9138830397172585e-02 2.2219600592581622e-02 + -3.2992297476916968e-02 1.1069633609127774e-01 -3.6990975647889106e-02 + -5.9821735136176640e-02 1.6540747981888615e-01 -9.8363984688212724e-02 + -1.1767948162489436e-01 2.2989467635646221e-01 -1.4885075163994926e-01 + -2.0701934676450934e-01 2.9892650190069997e-01 -1.7290705939955359e-01 + -3.2138694308214599e-01 3.6649858102803884e-01 -1.5551718149884047e-01 + -4.4775839374414689e-01 4.2679099312574226e-01 -8.4894342089945368e-02 + -5.7029743911798347e-01 4.7323964896715831e-01 4.4677255472328398e-02 + -6.7614315982301543e-01 4.9780146541373127e-01 2.3122590038358787e-01 + -7.5684255600260886e-01 4.9184420825877601e-01 4.6699231781203770e-01 + -8.2975971889041911e-01 4.5668849219423041e-01 7.2637787226216433e-01 + id 13821 + loc 4.4449105858802795e-01 1.8620461225509644e-02 407 + blend 0.0000000000000000e+00 + interp 4.2757193829521628e-01:3.9118160372718253e-01:4.3312735941362313e-02:2.1179396220544378e-01:8.2173189320336126e-01:2.7829300594269230e-01:1.6682485269837364e+00:3.6690190353077484e-01:1.9974046549823659e+00:3.8756753427186180e-01:2.3725746716581915e+00:3.0765444138560877e-01:3.1022455717939157e+00:4.2756766257583334e-01:3.9081112390484645e+00 + CVs 20 + 5.0810980086653940e-03 3.5102613755147583e-01 -3.3846707024285394e-01 + 1.5824254994786971e-02 5.7115140037122414e-01 -4.9810960345452204e-01 + 3.5618907160668289e-02 7.1505927299370486e-01 -6.0109595272422789e-01 + 6.3217713714671581e-02 8.3164322520771616e-01 -7.0342959766115343e-01 + 9.8177931614899905e-02 9.1896432668006867e-01 -7.9821697047800444e-01 + 1.3740924104014826e-01 9.7773918704838259e-01 -8.8093994052295499e-01 + 1.7665628897224145e-01 1.0146454528733568e+00 -9.5121830091651183e-01 + 2.1624917204970737e-01 1.0416382160050686e+00 -1.0136302273932343e+00 + 2.6349254981795511e-01 1.0685615668717963e+00 -1.0740723087792181e+00 + 3.2585010376486429e-01 1.0994893830964565e+00 -1.1348497253680341e+00 + 4.0657480853499095e-01 1.1368966822380233e+00 -1.1946940071497862e+00 + 5.0713157613083404e-01 1.1841215517652035e+00 -1.2512040187437956e+00 + 6.2856635734153421e-01 1.2425450085026952e+00 -1.3003404036749171e+00 + 7.6641694865867749e-01 1.3073501386231636e+00 -1.3320075910411908e+00 + 9.0750743776056952e-01 1.3706894371898968e+00 -1.3297900597919892e+00 + 1.0431686090918615e+00 1.4286069187446158e+00 -1.2818879509820076e+00 + 1.1784215755416523e+00 1.4793229670683659e+00 -1.1893780325011938e+00 + 1.3181004892592290e+00 1.5181068458926643e+00 -1.0656612297632067e+00 + 1.4719443785062918e+00 1.6140951485509465e+00 -1.0122524442908138e+00 + id 13822 + loc 3.6380460858345032e-01 1.8075862526893616e-01 373 + blend 0.0000000000000000e+00 + interp 3.7610594486599880e-01:2.8361052189647667e-01:6.7739344769089649e-01:2.5795742075082967e-01:1.6946459140578609e+00:3.7610218380655014e-01:2.4989318444271058e+00:3.6031261635635287e-01:3.0067522782841309e+00:2.5643906511179598e-01:3.7908252145874930e+00 + CVs 20 + -6.4449863248848535e-02 8.5101979109386849e-01 3.5656667169474426e-01 + -1.4961295469107672e-01 1.6951346552646236e+00 6.7481073013905402e-01 + -3.0573759986197641e-01 2.5195966474574658e+00 8.9913627342217650e-01 + -5.6797770822786209e-01 3.2920291959384711e+00 9.3231675565208105e-01 + -9.3168504632359239e-01 3.9517347977982782e+00 7.1158029983788373e-01 + -1.3709781280186637e+00 4.4093627591400661e+00 2.4968423337329471e-01 + -1.8361338024095304e+00 4.5639956101630643e+00 -3.8379883915351076e-01 + -2.2758840595818381e+00 4.3842306051851452e+00 -1.0776430096514120e+00 + -2.6464301127889822e+00 3.8955342748931598e+00 -1.7420585930205945e+00 + -2.8824489656224470e+00 3.1383990359226814e+00 -2.3084948781498689e+00 + -2.9078446954165202e+00 2.1952114234818838e+00 -2.7303484293403972e+00 + -2.6792567959226674e+00 1.1840107659800703e+00 -2.9854127824254171e+00 + -2.2246785751875700e+00 2.0972869216674206e-01 -3.1556884525197182e+00 + -1.6227339160012015e+00 -6.5704584745547012e-01 -3.3967567911105192e+00 + -1.0175627887874894e+00 -1.3707089524825067e+00 -3.8752774201900180e+00 + -6.9786087857449619e-01 -1.8026474505196024e+00 -4.7447849501405104e+00 + -9.2508936110253170e-01 -1.8745771255317760e+00 -5.8544335162909151e+00 + -1.8240791156891785e+00 -1.7847021451550065e+00 -6.8281985987725227e+00 + -2.7940875392440279e+00 -1.7680937453587875e+00 -7.5372761428041759e+00 + id 13823 + loc 9.7278684377670288e-02 9.2993885278701782e-01 412 + blend 0.0000000000000000e+00 + interp 4.7670761881918711e-01:3.5049391357201670e-01:2.6393808056493495e-02:4.7670285174299892e-01:4.2417708440097501e-01:4.2864587564802814e-01:1.0673740223443737e+00:3.7739003335746096e-01:1.6337393075422633e+00:3.7679273652481687e-01:2.2357206891276631e+00:3.3975155974976978e-01:3.2401650466526997e+00 + CVs 20 + 9.1623334846794657e-01 1.2006246128097517e-01 -2.2064228747599945e-01 + 1.4850387832043135e+00 7.4481997959785384e-02 -4.2423475721933235e-01 + 1.9791007244015808e+00 -1.4656105195336333e-02 -5.9794554883271089e-01 + 2.4757235695015654e+00 -1.0464258218645645e-01 -7.3495495830394730e-01 + 2.9596413647489612e+00 -1.9142202152475207e-01 -8.3245927992349966e-01 + 3.4190820718955890e+00 -2.6967874723222607e-01 -8.9246561094962917e-01 + 3.8457916916958523e+00 -3.3489734731088605e-01 -9.2300165555133373e-01 + 4.2373762597160010e+00 -3.8553126126514792e-01 -9.3684791051805205e-01 + 4.5986237212657093e+00 -4.2448223224921677e-01 -9.4716621869015150e-01 + 4.9365295857624769e+00 -4.5747108036204409e-01 -9.6294864150854165e-01 + 5.2510891731515157e+00 -4.8289421333796567e-01 -9.8194841472678684e-01 + 5.5357315371127758e+00 -4.8443564951260609e-01 -9.8461155503827924e-01 + 5.7986261958409839e+00 -4.5953089957679882e-01 -9.5139888819196217e-01 + 6.0653122357142149e+00 -4.4788023082053807e-01 -9.0207905809948352e-01 + 6.3443117412438781e+00 -4.8236716971392135e-01 -8.7265966404296202e-01 + 6.6273193795959031e+00 -5.5618083825642195e-01 -8.6461848577623002e-01 + 6.9000207498752237e+00 -6.5515903359458560e-01 -8.6307061536234841e-01 + 7.1400797256675883e+00 -7.7771148094006026e-01 -8.7309884176971009e-01 + 7.2485534566833678e+00 -9.7997223936941080e-01 -1.0600654764452697e+00 + id 13824 + loc 8.6387717723846436e-01 8.7123566865921021e-01 396 + blend 0.0000000000000000e+00 + interp 4.1665474720337392e-01:3.2027297131692722e-01:4.6340272627376833e-01:2.4217377568855841e-01:1.0098118591572214e+00:3.6999043911828944e-01:1.6345398708754491e+00:2.7946372908705730e-01:2.0266167174077943e+00:3.2087507765830214e-01:2.7962473361880331e+00:4.1665058065590188e-01:3.4894805734950016e+00:3.5164777391966534e-01:3.9790187115807449e+00 + CVs 20 + 9.7405828624343738e-01 2.3559711205007927e-01 -3.5643936565112899e-01 + 1.6493593066545871e+00 2.8943531122974830e-01 -6.4366173464583920e-01 + 2.2530673693340422e+00 2.5980267491136771e-01 -9.1290654495855250e-01 + 2.8852828873192933e+00 1.8459834572765166e-01 -1.1843082755531305e+00 + 3.5251385707763201e+00 5.6333984448585173e-02 -1.4540060957535879e+00 + 4.1493422647839333e+00 -1.2453428694657598e-01 -1.7254826878605010e+00 + 4.7350640544919109e+00 -3.5116889893709380e-01 -2.0061358691316586e+00 + 5.2623549739130873e+00 -6.1579875082917424e-01 -2.2998532392351096e+00 + 5.7183060632129159e+00 -9.1325061701109722e-01 -2.6070438026092866e+00 + 6.0961410784196763e+00 -1.2415497900320795e+00 -2.9289739269819757e+00 + 6.3903261615376596e+00 -1.6008955063451520e+00 -3.2639775120479664e+00 + 6.6010142595210413e+00 -1.9896233505232805e+00 -3.6056324194218812e+00 + 6.7429405191258249e+00 -2.3995228986190327e+00 -3.9555037725791298e+00 + 6.8317072928831619e+00 -2.8283492660605436e+00 -4.3150938726204551e+00 + 6.8749379448717702e+00 -3.2724618064576632e+00 -4.6806757360088689e+00 + 6.8745608903853226e+00 -3.7244254124563092e+00 -5.0401621389824189e+00 + 6.8312838138344816e+00 -4.1897319065071503e+00 -5.3783579389198488e+00 + 6.7459821793287391e+00 -4.6767970033066932e+00 -5.6816704010137640e+00 + 6.6943031462303191e+00 -5.1631559086247973e+00 -5.9883567734212999e+00 + id 13825 + loc 4.5241606235504150e-01 8.1982809305191040e-01 379 + blend 0.0000000000000000e+00 + interp 5.2573083780199004e-01:3.1103089874874518e-01:1.8925765598951982e-02:5.2572558049361207e-01:9.2000202685260823e-01:5.2317128320393225e-01:1.0596993272975643e+00:4.7245468889912923e-01:1.3694843762652358e+00:2.7426964074494509e-01:2.0012415149995384e+00:4.7841999369975308e-01:2.8865523621824334e+00:3.3807426605504770e-01:3.1533263537477598e+00 + CVs 20 + -2.6578933394202603e-01 2.8654565455490194e-01 3.0567817144690329e-01 + -4.9824367408289816e-01 5.0509356521518600e-01 5.6460280154126485e-01 + -7.2654197161848111e-01 6.8661749581806863e-01 8.1973349499444570e-01 + -9.5647760843257623e-01 8.6444723396623790e-01 1.0839577103045230e+00 + -1.1633350556707525e+00 1.0667394994236412e+00 1.3295920415968769e+00 + -1.3365764962700948e+00 1.3078520356753391e+00 1.5348596166656963e+00 + -1.5162436442135558e+00 1.5828978442579344e+00 1.6956322551549574e+00 + -1.7555174273356029e+00 1.8673652746799139e+00 1.8002389830868171e+00 + -2.0729530532134857e+00 2.1272350030798490e+00 1.8283973004388665e+00 + -2.4558984306402358e+00 2.3315217220739450e+00 1.7681742795276738e+00 + -2.8780878989599556e+00 2.4655928894637080e+00 1.6223014125085087e+00 + -3.3175928914811035e+00 2.5173266536516796e+00 1.3993108883235794e+00 + -3.7569824849403357e+00 2.4362637338411401e+00 1.1088543064823964e+00 + -4.1804148683424804e+00 2.1562416641620330e+00 7.8533061387207659e-01 + -4.6015574177057452e+00 1.6746386841352612e+00 5.1832372699425799e-01 + -5.0557945307605285e+00 1.0720244733890953e+00 4.2841424656032712e-01 + -5.5465108892079140e+00 4.8164976731675635e-01 6.0559705363176342e-01 + -5.9705738117933773e+00 7.6651978939948240e-02 1.0261733437361267e+00 + -6.1139396138607989e+00 -5.0399668761789140e-02 1.4288588882318001e+00 + id 13826 + loc 7.8730022907257080e-01 8.7028247117996216e-01 380 + blend 0.0000000000000000e+00 + interp 4.3428494045730498e-01:3.3319503181549315e-01:2.0071803719132686e-01:3.1429927537467278e-01:1.2363896210677803e+00:2.7321611142005997e-01:2.0023977853385837e+00:4.3428059760790044e-01:2.5772574880489625e+00:3.1511531191854164e-01:3.2145137273135500e+00 + CVs 20 + -3.4167096949314535e-01 2.1768838788827399e-01 -6.3258932124397238e-01 + -6.5057764240133031e-01 3.6068512567763689e-01 -1.0862857110491042e+00 + -9.4911010775528992e-01 4.7185999198331763e-01 -1.5024712839523160e+00 + -1.2444739909481928e+00 5.7074915560074446e-01 -1.9483801408849635e+00 + -1.5277931971297447e+00 6.5085344282080382e-01 -2.4281878075538543e+00 + -1.7887328046943742e+00 7.0220070784094446e-01 -2.9417007723958668e+00 + -2.0180777027713779e+00 7.1151907803704417e-01 -3.4837220996785696e+00 + -2.2045588750096488e+00 6.6610518030403032e-01 -4.0426640566566974e+00 + -2.3371911772071265e+00 5.6001097925482712e-01 -4.6011714070492440e+00 + -2.4139125239565589e+00 3.9685791480958432e-01 -5.1406188166929514e+00 + -2.4439811810101535e+00 1.8574547040963596e-01 -5.6438395376694492e+00 + -2.4372179732024315e+00 -6.2974456308764193e-02 -6.0966483517655323e+00 + -2.3901324667828807e+00 -3.4193764403348847e-01 -6.4967815323465139e+00 + -2.2927152784213414e+00 -6.5904742577562692e-01 -6.8403375615084645e+00 + -2.1356213683924627e+00 -1.0174980815181969e+00 -7.1113678722553573e+00 + -1.9250305927722065e+00 -1.4135793246955184e+00 -7.3080612134439367e+00 + -1.6843273921376656e+00 -1.8794784708196444e+00 -7.4647272145062651e+00 + -1.4664946180851990e+00 -2.4544711123147582e+00 -7.6329052976220026e+00 + -1.3274567925748602e+00 -2.7911811436992071e+00 -7.6974998290302725e+00 + id 13827 + loc 3.7636092305183411e-01 2.3456862568855286e-01 378 + blend 0.0000000000000000e+00 + interp 4.8563866389751520e-01:3.1693601925523701e-01:5.2974418278723046e-01:3.5179356076724178e-01:1.3017334379080545e+00:3.4457183363151145e-01:1.9981746269418370e+00:4.8563380751087626e-01:2.7066541939033817e+00:4.1275120004587063e-01:3.0078967133929138e+00:4.2087363357179869e-01:3.5476620103834065e+00 + CVs 20 + 1.7652174828181846e-01 3.1083480365085714e-01 -3.5550187606240402e-01 + 2.9280280777128670e-01 5.6839438847895296e-01 -6.9000163835273554e-01 + 3.7789835918542475e-01 7.9253851656971130e-01 -1.0280513376511649e+00 + 4.5142862379929938e-01 1.0032672143892722e+00 -1.3829520849027208e+00 + 5.2889245331854373e-01 1.2137173957970302e+00 -1.7524862047442249e+00 + 6.2816672788173389e-01 1.4288707804382876e+00 -2.1362607444005306e+00 + 7.6831336341083911e-01 1.6413151081326285e+00 -2.5399239700846463e+00 + 9.7086759321211424e-01 1.8340521014317994e+00 -2.9616630132818487e+00 + 1.2484660459321206e+00 1.9869599906780224e+00 -3.3828404164964287e+00 + 1.5961023374779653e+00 2.0814740851259455e+00 -3.7781434225381463e+00 + 1.9964893241251507e+00 2.1016066749791094e+00 -4.1345549095511069e+00 + 2.4294885406672675e+00 2.0258956438753644e+00 -4.4504670493712286e+00 + 2.8661382425181414e+00 1.8288625207812403e+00 -4.7159527827103176e+00 + 3.2718720352483386e+00 1.5145488457684038e+00 -4.9130022107342484e+00 + 3.6401956645134597e+00 1.1349264788210252e+00 -5.0463512803463786e+00 + 3.9869931386338004e+00 7.5486428865995991e-01 -5.1506076898527926e+00 + 4.3119735620688990e+00 4.1325993057748045e-01 -5.2763796670964425e+00 + 4.6026363191309221e+00 1.0647266063994199e-01 -5.4712662127070111e+00 + 4.8903008518089948e+00 -2.2685296669698563e-01 -5.7004858529186535e+00 + id 13828 + loc 6.5168422460556030e-01 2.2220560908317566e-01 374 + blend 0.0000000000000000e+00 + interp 3.4601804616409976e-01:2.6839812862748191e-01:7.2643046332143379e-01:2.6760438883579918e-01:1.7920170524009074e+00:2.5627704484368119e-01:2.9577189127666310e+00:3.4601458598363816e-01:3.9013991870707017e+00 + CVs 20 + 7.9382009321203884e-01 3.7222707293927992e-01 3.3730429690067193e-01 + 1.3795217668038049e+00 5.4260611659327862e-01 5.2471239782028734e-01 + 1.9279144343078631e+00 5.9543779379940820e-01 6.3583915982891237e-01 + 2.5089603370352522e+00 5.8912774370914178e-01 7.1898037340248266e-01 + 3.1148516448750372e+00 5.6810531950962528e-01 8.0569687759003439e-01 + 3.7237201507731763e+00 5.5559177684882166e-01 9.2520783249605887e-01 + 4.3196197015347986e+00 5.4413644193686816e-01 1.1003033416520369e+00 + 4.8997010157521350e+00 5.1870379437942149e-01 1.3563795369009104e+00 + 5.4621343540322744e+00 4.5292687790452191e-01 1.7108771721009477e+00 + 5.9981667156351204e+00 3.1363050214603172e-01 2.1623611110036660e+00 + 6.4934903687193302e+00 5.9955083229605410e-02 2.6817886592302180e+00 + 6.9240523465370094e+00 -3.4468570900803464e-01 3.2109449778876060e+00 + 7.2585269127547418e+00 -8.9798826849868574e-01 3.6788497659993391e+00 + 7.4877911335210108e+00 -1.5305175488177079e+00 4.0374446579578018e+00 + 7.6487157104668571e+00 -2.1485577770249891e+00 4.2736302473623669e+00 + 7.7855919888790002e+00 -2.7130052950658161e+00 4.3953766993475298e+00 + 7.9230629703259439e+00 -3.2309365552901608e+00 4.4192571474668325e+00 + 8.0575616108716943e+00 -3.6832455762434240e+00 4.3633762721575433e+00 + 8.1643144760305528e+00 -3.9858870580549235e+00 4.2181339750207609e+00 + id 13829 + loc 5.9388244152069092e-01 3.2646432518959045e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3088377797558719e-01:4.1287483022855548e-01:9.6769881144954883e-02:4.1255229188437964e-01:6.1843765041737631e-01:3.9661891924501719e-01:9.9886137314869428e-01:2.7580498632242845e-01:1.4083614083789986e+00:3.7290971554594610e-01:1.9914180842834321e+00:4.3087946913780745e-01:2.3939093054605012e+00:3.5509529068756523e-01:2.9992498760345851e+00:3.1109234792886714e-01:3.7141402380202955e+00 + CVs 20 + -6.6377099532555134e-02 2.2814047575779389e-01 1.9495889659115845e-01 + -1.3268020056761001e-01 4.3825439456637250e-01 3.9469967262877381e-01 + -2.0081539306562773e-01 6.3362444731177647e-01 5.9347866278401895e-01 + -2.8294029250498043e-01 8.1696899770377163e-01 7.9051300326626261e-01 + -3.9313601880644272e-01 9.7755794225991943e-01 9.7949245137703522e-01 + -5.2377812449446137e-01 1.0973169493576855e+00 1.1489786826908772e+00 + -6.5577894158598427e-01 1.1861247610951491e+00 1.2950358131004052e+00 + -7.6588285467393635e-01 1.2718679273948554e+00 1.4131360711416079e+00 + -8.5597488417442247e-01 1.3417652960088398e+00 1.4817894688636111e+00 + -9.8310294915704355e-01 1.3781873688459103e+00 1.4482172647617011e+00 + -1.1926456917366708e+00 1.4613622865050215e+00 1.2864405835811503e+00 + -1.4111218226199447e+00 1.6817930963850714e+00 1.1094533804301705e+00 + -1.5560148091863830e+00 1.9906595740219595e+00 1.0164300104451693e+00 + -1.5994252328368201e+00 2.2940875467623583e+00 9.9852542648851839e-01 + -1.5584828957788701e+00 2.5561912448958903e+00 1.0181315360154159e+00 + -1.4428717816533461e+00 2.8551045789385348e+00 1.1014522332315007e+00 + -1.2253594847763458e+00 3.2011668064308401e+00 1.3244920932043502e+00 + -1.0098665930751098e+00 3.3946760199775867e+00 1.5844901576473163e+00 + -1.1822969158444854e+00 3.2418767690167645e+00 1.4414780770762645e+00 + id 13830 + loc 4.1798579692840576e-01 6.7784732580184937e-01 399 + blend 0.0000000000000000e+00 + interp 4.4437452826077800e-01:4.4344814785840253e-01:2.6370935055464073e-01:3.4506513956614748e-01:1.0369119979511903e+00:4.0928576263658278e-01:1.9147817458215923e+00:3.4107546894380292e-01:2.6166749492457413e+00:4.4437008451549542e-01:3.0674860559069592e+00:2.7098849101188544e-01:3.9101621730187217e+00 + CVs 20 + -2.3832545833428204e-01 2.9759432401634844e-01 -1.7313100327514130e-01 + -4.2870544308097241e-01 5.9319911299579753e-01 -3.7106691537521769e-01 + -6.0049247022900498e-01 8.7954244729715392e-01 -5.8373831779317353e-01 + -7.7555703771865525e-01 1.1520900371252354e+00 -8.0778247532097969e-01 + -9.6977909676932816e-01 1.4056804032904233e+00 -1.0464864909137284e+00 + -1.2001798061112574e+00 1.6274915540479695e+00 -1.3015629060252432e+00 + -1.4791323659499296e+00 1.7938123322633843e+00 -1.5709956002125598e+00 + -1.8073020246294527e+00 1.8784101307436878e+00 -1.8450927674258841e+00 + -2.1799913921147911e+00 1.8728999426394730e+00 -2.1060427575296372e+00 + -2.5914359585064486e+00 1.7796098061450667e+00 -2.3387097377793258e+00 + -3.0175607017547668e+00 1.5860624435114341e+00 -2.5356902413561961e+00 + -3.4288526211160280e+00 1.2894942263588827e+00 -2.6896342994758613e+00 + -3.8386762964860637e+00 9.2781550386445044e-01 -2.7972145933810530e+00 + -4.2832204702694483e+00 5.4610181402991032e-01 -2.8581558613710158e+00 + -4.7642316116728605e+00 1.6103579776021243e-01 -2.8661730822344640e+00 + -5.2653175763137483e+00 -1.8319688836341361e-01 -2.8186989452482023e+00 + -5.7800158556385766e+00 -3.1522156995013612e-01 -2.7300405045742941e+00 + -6.2236268669433565e+00 -1.2449734000585033e-01 -2.6211377960524240e+00 + -6.7880503314491083e+00 -1.1120892437895785e-01 -2.5761190406153314e+00 + id 13831 + loc 9.6535481512546539e-02 9.7426509857177734e-01 400 + blend 0.0000000000000000e+00 + interp 5.4171959796961056e-01:5.4171418077363087e-01:6.1186010761023146e-01:2.5376474090513207e-01:1.4242748946393351e+00:3.6194415774747307e-01:2.5174480205826200e+00:3.0254981116408508e-01:3.0395214826131802e+00:4.0374602859629388e-01:3.9439453538521416e+00 + CVs 20 + -2.8829575808958757e-01 3.0723136965334175e-01 -7.5392674911454974e-02 + -5.4537552732309047e-01 6.0709851328580955e-01 -1.7043486105270553e-01 + -7.8817759582890001e-01 8.9790587140713363e-01 -3.0090068435807432e-01 + -1.0234408165007847e+00 1.1730707767355066e+00 -4.7547480295552325e-01 + -1.2508387434336699e+00 1.4232643397254936e+00 -6.9670990049826398e-01 + -1.4683464088207188e+00 1.6406702593022902e+00 -9.6313122873989421e-01 + -1.6694953562937265e+00 1.8187641023836527e+00 -1.2691816980851112e+00 + -1.8492343451846984e+00 1.9516825300118885e+00 -1.6038944611330890e+00 + -2.0133160960238676e+00 2.0368391234715721e+00 -1.9542616389578888e+00 + -2.1683267598873632e+00 2.0725568317994734e+00 -2.3075661628726336e+00 + -2.3032814866008793e+00 2.0561032161939869e+00 -2.6434469284547486e+00 + -2.4025327431016570e+00 1.9901234062349233e+00 -2.9369598373130286e+00 + -2.4750708293928079e+00 1.8722156305754647e+00 -3.1910264900504584e+00 + -2.5593478151653311e+00 1.6760051169432244e+00 -3.4347952171046083e+00 + -2.7214034013743289e+00 1.3772886792942178e+00 -3.6829043222433193e+00 + -3.0533677097155580e+00 1.0074665393771034e+00 -3.9243101685022621e+00 + -3.6191669746361126e+00 6.9751838686401513e-01 -4.1370097159314714e+00 + -4.3263947282607935e+00 5.8101270886204603e-01 -4.3094521531890875e+00 + -4.9464374555461177e+00 4.8272145366463981e-01 -4.4965042658851804e+00 + id 13832 + loc 5.2878028154373169e-01 4.6796852350234985e-01 415 + blend 0.0000000000000000e+00 + interp 4.9079212867589744e-01:4.8452122298598632e-01:2.0882540811296524e-01:2.9386564478967359e-01:1.0198573292878255e+00:4.9078722075461073e-01:1.8166582267433216e+00:2.5227620740186135e-01:2.4555535433721358e+00:3.0949592189875824e-01:3.7768318968197154e+00 + CVs 20 + -3.0230802597194950e-01 3.0941472071805454e-01 -1.8565490295786261e-01 + -5.4914751549052621e-01 5.4190096819813538e-01 -3.2670311550373254e-01 + -7.6071109276733839e-01 7.3024602420133067e-01 -4.8215107942121760e-01 + -9.6857819307547599e-01 8.9139842893994159e-01 -6.6439970373568480e-01 + -1.1693841508778071e+00 1.0178672986253858e+00 -8.6957762363883329e-01 + -1.3563878310311008e+00 1.1040286836160851e+00 -1.0921720426999442e+00 + -1.5280371178722167e+00 1.1489497004115896e+00 -1.3253713602755575e+00 + -1.6874501807379936e+00 1.1547671120861858e+00 -1.5624952223413884e+00 + -1.8352477799527607e+00 1.1246710614828097e+00 -1.7967642479636254e+00 + -1.9734151316206519e+00 1.0635169104308793e+00 -2.0235450511759852e+00 + -2.1233984592180359e+00 9.7549074157726756e-01 -2.2496766850136471e+00 + -2.3262998990284709e+00 8.5719786051261448e-01 -2.4878057458444629e+00 + -2.6052991998099575e+00 6.9986573497803173e-01 -2.7164888668084077e+00 + -2.9284277056604449e+00 5.0798415831550403e-01 -2.8803183546821165e+00 + -3.2447868673451872e+00 3.0051470954671533e-01 -2.9566991010594963e+00 + -3.5387075912686519e+00 9.0597487237489283e-02 -2.9571900795860806e+00 + -3.8099133490512260e+00 -1.1376831161425294e-01 -2.8916294797881252e+00 + -4.0504193342112362e+00 -3.0166050591465332e-01 -2.7703422981198909e+00 + -4.2288533940378965e+00 -4.4588924039435884e-01 -2.6741219733450809e+00 + id 13833 + loc 1.8479819595813751e-01 5.7676303386688232e-01 1078 + blend 0.0000000000000000e+00 + interp 3.3470522045136858e-01:3.1915390840524771e-01:5.3040701380816513e-01:2.8466056197112366e-01:1.0131137410583175e+00:2.7856763013889196e-01:2.0044111984019324e+00:3.3470187339916407e-01:3.0000587141786523e+00:2.6695143065337901e-01:3.9908176964718249e+00 + CVs 20 + -2.4815294243761641e-02 2.3174539436509917e-01 1.9500699724724033e-01 + -2.3780781412338359e-02 4.5448502905010818e-01 3.5279858304928641e-01 + 1.3271052502295752e-03 6.6772713982337950e-01 4.7664967190851498e-01 + 5.5567625828707834e-02 9.0689946207230632e-01 5.9875761994423871e-01 + 1.4376241330716200e-01 1.1793928219357375e+00 7.1409753358848838e-01 + 2.7525070200989232e-01 1.4957038894646233e+00 8.1080396555300682e-01 + 4.6615696770919901e-01 1.8646779619437839e+00 8.6139399044655418e-01 + 7.3423997701315469e-01 2.2710592048679104e+00 8.1775007148118184e-01 + 1.0788963405225067e+00 2.6568170034454157e+00 6.3015604376507595e-01 + 1.4565848073632923e+00 2.9376170436254698e+00 2.8728389837367230e-01 + 1.8048041426633052e+00 3.0568366342937021e+00 -1.6984837785503704e-01 + 2.0735254563133014e+00 3.0030529756113209e+00 -6.6942946136097814e-01 + 2.2326264067531945e+00 2.8044199330325004e+00 -1.1106052460838214e+00 + 2.2902700211066818e+00 2.5214982950908587e+00 -1.3969107280670268e+00 + 2.2869583946625216e+00 2.2012218897156206e+00 -1.4767907994811731e+00 + 2.2582338964298905e+00 1.8306265061531581e+00 -1.3283843583660988e+00 + 2.1893787702555283e+00 1.2944632193165164e+00 -1.0263930901953213e+00 + 2.0020717596369790e+00 5.0365702177901428e-01 -8.9179860290728696e-01 + 1.9844072898518244e+00 4.3733034422850581e-01 -1.0331394890077723e+00 + id 13834 + loc 8.3440029621124268e-01 5.7875353097915649e-01 393 + blend 0.0000000000000000e+00 + interp 4.7685782085335865e-01:4.0303338619614149e-01:1.6119512321964902e-01:4.7685305227515012e-01:7.3845904692239062e-01:4.1922817898435816e-01:1.0075620220284682e+00:2.7785358028371065e-01:1.4457225361146600e+00:4.1915024553885000e-01:1.9699714819574803e+00:2.6116091853774021e-01:2.6819840715455943e+00:3.9168838368212161e-01:3.0073324914011148e+00:4.6219059740671092e-01:3.7292234634708330e+00 + CVs 20 + -2.0450868605331646e-01 2.0451075881629022e-01 -7.7746848853062905e-02 + -3.8994996056423803e-01 4.2150543578232647e-01 -1.7081234555768535e-01 + -5.5996752336765643e-01 6.4165768110765853e-01 -2.5054235745179809e-01 + -7.1778786394070559e-01 8.5785031185517657e-01 -3.0709811549461941e-01 + -8.6522357678108841e-01 1.0647353462154927e+00 -3.4453096917197334e-01 + -1.0042497044321008e+00 1.2576370422989378e+00 -3.6757311873456838e-01 + -1.1339784120547760e+00 1.4341247895038067e+00 -3.8245983339331607e-01 + -1.2483479868594838e+00 1.5939519208431883e+00 -3.9711666991546035e-01 + -1.3418460425992911e+00 1.7463095659183203e+00 -4.0921490522404702e-01 + -1.4207419962224774e+00 1.9211228074048210e+00 -3.9716579627629267e-01 + -1.5103159110743383e+00 2.1647560454001789e+00 -3.4996283208289819e-01 + -1.6455155815846532e+00 2.4945120272363921e+00 -3.2011403285829704e-01 + -1.8248845790753165e+00 2.8345811934277050e+00 -3.8734968380150986e-01 + -1.9880633416712090e+00 3.0690109486884318e+00 -5.4761158704843393e-01 + -2.0614563439994535e+00 3.1606696264090850e+00 -7.4082997370124903e-01 + -1.9692979992892718e+00 3.1169569716598504e+00 -9.4040994013084567e-01 + -1.6634927246928015e+00 2.8894557446108533e+00 -1.1573016988725280e+00 + -1.3207560152491351e+00 2.4600104213112108e+00 -1.3866491594298671e+00 + -1.3398142826746162e+00 2.2617233474506806e+00 -1.4753891741451166e+00 + id 13835 + loc 3.4953638911247253e-01 6.9698649644851685e-01 402 + blend 0.0000000000000000e+00 + interp 4.3860185304223565e-01:3.0463913984071433e-01:1.8359927847936419e-01:4.0846942492094757e-01:9.3578551499571039e-01:3.9943939244784438e-01:1.5282216366487453e+00:4.3859746702370522e-01:2.0940472577499110e+00:4.0419042100790520e-01:2.9237409848452787e+00:3.5886975369504787e-01:3.7997316551178031e+00 + CVs 20 + 6.6605349544517078e-03 3.4318300948750491e-01 -1.8952229022031647e-01 + 1.2242357341444216e-02 6.6608908505128084e-01 -3.7892986775208448e-01 + 5.3441049450109634e-02 9.8301418306265098e-01 -5.9190187783955928e-01 + 1.4237614131614523e-01 1.2927985594346829e+00 -8.3714542457518748e-01 + 2.6373842731444447e-01 1.5873934794452711e+00 -1.1105176770075949e+00 + 4.0167154786685999e-01 1.8587381105283685e+00 -1.4053320037293016e+00 + 5.4564110099677920e-01 2.1029152020397692e+00 -1.7175345863643781e+00 + 6.8692260525640225e-01 2.3206547159086108e+00 -2.0475473960614958e+00 + 8.1474039404314402e-01 2.5123608962500130e+00 -2.3926190314350060e+00 + 9.2224515370873572e-01 2.6775198994369367e+00 -2.7432958704037453e+00 + 1.0181495559349720e+00 2.8178178757549421e+00 -3.1020972805469578e+00 + 1.1212697931671010e+00 2.9255921606466808e+00 -3.4972295659824031e+00 + 1.2382696178865156e+00 2.9635586913932830e+00 -3.9625906266194786e+00 + 1.3579930242596119e+00 2.8671176106829943e+00 -4.5075302367073267e+00 + 1.4424715486877639e+00 2.5842382015761816e+00 -5.1091400543710535e+00 + 1.4182841609541508e+00 2.1157842316492816e+00 -5.7236294953715507e+00 + 1.1933855702555043e+00 1.5406732874080986e+00 -6.3136991012550876e+00 + 7.3384105785376663e-01 1.0638625044647050e+00 -6.8504996956929860e+00 + 4.5989173133191663e-01 9.9623706672449863e-01 -7.1413229545959203e+00 + id 13836 + loc 6.0253435373306274e-01 5.1421540975570679e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7609612500486772e-01:3.7609236404361768e-01:3.3361148459838075e-01:3.4910345765689144e-01:9.5848175382583345e-01:2.5572993569423508e-01:1.6695174901659000e+00:2.5082139889153221e-01:2.8287191653936627e+00:3.5051094838972785e-01:3.2136581454231243e+00:2.5551846318592797e-01:3.9462352271018166e+00 + CVs 20 + 4.9040504356305158e-02 3.4233814084135822e-01 -1.6345864294668583e-01 + 1.4704323590620291e-01 6.6878307579264673e-01 -3.2264766470750289e-01 + 2.8029292005937073e-01 9.7726014361589952e-01 -4.7776662273234610e-01 + 4.3878697954725721e-01 1.2697857078100510e+00 -6.3219537336159126e-01 + 6.1424914219142002e-01 1.5519561306437815e+00 -7.9011524742317341e-01 + 7.9512000789019466e-01 1.8266176798841296e+00 -9.5680203948985176e-01 + 9.6893869943443189e-01 2.0832116000947405e+00 -1.1404845200244254e+00 + 1.1224465919204221e+00 2.3107437891061071e+00 -1.3400815228968408e+00 + 1.2489059930797364e+00 2.5125191723535059e+00 -1.5487531756865336e+00 + 1.3578517686043690e+00 2.6781227983305027e+00 -1.7679734040304034e+00 + 1.4599983457296930e+00 2.7633227762220312e+00 -1.9863454808837082e+00 + 1.5569448350601143e+00 2.7346728723711187e+00 -2.1790913231817379e+00 + 1.6752206382684385e+00 2.6073136918156292e+00 -2.3465303625768863e+00 + 1.8725818743394198e+00 2.4179614567637966e+00 -2.5135036066960712e+00 + 2.1701483296691304e+00 2.1549850163622137e+00 -2.7080733589489636e+00 + 2.5174551599799067e+00 1.7534493490502139e+00 -2.9634506095538189e+00 + 2.8023576020185890e+00 1.2224559467510097e+00 -3.3333614412340791e+00 + 2.8673666636876787e+00 7.4323192738502941e-01 -3.8123846793785612e+00 + 2.5783085768148744e+00 5.5416425310630202e-01 -4.2497888347799959e+00 + id 13837 + loc 4.8208630084991455e-01 3.5904985666275024e-01 382 + blend 0.0000000000000000e+00 + interp 3.5261874304082497e-01:3.5261521685339459e-01:4.8167754655295325e-02:3.0976499266784019e-01:9.7080011845608860e-01:3.2844810848587602e-01:1.9989476640241546e+00:3.1503491946924594e-01:2.9579472665322921e+00:3.1410324383925398e-01:3.5412116295519667e+00 + CVs 20 + -4.4861237807958820e-01 1.5369067259815389e-01 -8.9473592545123370e-01 + -8.2429832748831300e-01 1.9633931258966092e-01 -1.4969349178513691e+00 + -1.1831231849654542e+00 2.0490162345765039e-01 -2.0261312218594982e+00 + -1.5494258710891353e+00 2.1481131958401489e-01 -2.5845754006481547e+00 + -1.9152546444579119e+00 2.2764501999050446e-01 -3.1800548147213950e+00 + -2.2791173619010827e+00 2.4344416765206955e-01 -3.8160161515936326e+00 + -2.6431031832541980e+00 2.4510698778763107e-01 -4.4947984785491677e+00 + -3.0058538760537417e+00 1.9510860358591753e-01 -5.2152683333901777e+00 + -3.3603395439831023e+00 4.7045975320008537e-02 -5.9612233313422003e+00 + -3.6987460673496195e+00 -2.3766286512958112e-01 -6.6928817578513353e+00 + -4.0125687646124266e+00 -6.8161412114254727e-01 -7.3524791585403335e+00 + -4.2861105016621925e+00 -1.2859239673202567e+00 -7.8754975895150450e+00 + -4.5009571211081258e+00 -2.0074396371913883e+00 -8.2032188863653310e+00 + -4.6553824170822526e+00 -2.7421135723909260e+00 -8.3219642959261932e+00 + -4.7669959379657065e+00 -3.3914298045759832e+00 -8.2959184209546830e+00 + -4.8599394732008694e+00 -3.9341459961383736e+00 -8.2021755499571967e+00 + -4.9663780018566897e+00 -4.3780132509174550e+00 -8.0704516790553527e+00 + -5.0995464345735444e+00 -4.7271521676947579e+00 -7.9087898087907949e+00 + -5.2177379599455680e+00 -5.1573682496632358e+00 -7.7507996079224206e+00 + id 13838 + loc 2.4653550982475281e-01 1.3121542520821095e-02 401 + blend 0.0000000000000000e+00 + interp 4.8404499259911271e-01:3.7630162265027856e-01:3.7441042116020729e-01:2.8625120335407922e-01:1.1501236184233543e+00:3.5060918396122526e-01:2.0546039225163883e+00:4.8404015214918672e-01:2.7848585847171377e+00:2.9342151014618584e-01:3.4066916749164888e+00 + CVs 20 + -1.6264895448663297e-01 2.4512712021438396e-01 1.6175691330565675e-01 + -3.5342613355097346e-01 4.8858745417617239e-01 3.2947152033724619e-01 + -5.4821872054709064e-01 7.1903243251253035e-01 4.9802413070721507e-01 + -7.3361438542740331e-01 9.2551211550091550e-01 6.6051104648066183e-01 + -9.0933111501123731e-01 1.1010455513803679e+00 8.0914941995257361e-01 + -1.0740213283844990e+00 1.2438717622626538e+00 9.3779891856557784e-01 + -1.2333670654280344e+00 1.3571944939023988e+00 1.0520609049970711e+00 + -1.3998281681717932e+00 1.4390081925570541e+00 1.1677902612731976e+00 + -1.5679297789056768e+00 1.4945707513998467e+00 1.2894068236711902e+00 + -1.7181930650552695e+00 1.5538670812181470e+00 1.4081013819227393e+00 + -1.8602801966650553e+00 1.6146359464547859e+00 1.5274882449894547e+00 + -2.0305484171644963e+00 1.5927324591818055e+00 1.6353563935324604e+00 + -2.2474289144954014e+00 1.4455656771036776e+00 1.7025327792748586e+00 + -2.5130639889589506e+00 1.2384977370486576e+00 1.7528488395335613e+00 + -2.8147899526447979e+00 1.0340632742849252e+00 1.8243545700520116e+00 + -3.1272398030088566e+00 7.4434573109519664e-01 1.9088138139037567e+00 + -3.4327731975292779e+00 1.4931866576462449e-01 2.0196354120343498e+00 + -3.7355866117177214e+00 -6.3155039452513373e-01 2.3792988068365082e+00 + -3.9241111473036310e+00 -6.2437924052596938e-01 2.5870425108226489e+00 + id 13839 + loc 5.4852181673049927e-01 9.6741503477096558e-01 380 + blend 0.0000000000000000e+00 + interp 5.1962518332857122e-01:3.8820555652107891e-01:7.3189132978834781e-04:3.5150691811747231e-01:7.5331671784462939e-01:1.9040762015218063e-01:1.8102846545510256e+00:5.1961998707673795e-01:2.3449817184164186e+00:3.2197889905628002e-01:3.1222187559005894e+00 + CVs 20 + -2.8151103194454258e-01 2.2056855518629162e-01 -6.1031224724443545e-01 + -5.4597481132797987e-01 3.7313020855636714e-01 -1.0843727734622228e+00 + -7.9005425918335104e-01 4.9164051774535800e-01 -1.5212419075875294e+00 + -1.0164871937388134e+00 5.9071250821079946e-01 -1.9634427244226269e+00 + -1.2202325844463728e+00 6.6393779897512140e-01 -2.4003200576537589e+00 + -1.3992939997299458e+00 7.0505376515236917e-01 -2.8197458692785493e+00 + -1.5524383267417505e+00 7.0602987096723369e-01 -3.2111190153053109e+00 + -1.6774216903564001e+00 6.6186208918494494e-01 -3.5654860886238358e+00 + -1.7687472385826903e+00 5.7713484049029717e-01 -3.8695459736313995e+00 + -1.8209970980571251e+00 4.7028131473802448e-01 -4.1122005356805822e+00 + -1.8367354597182832e+00 3.7555177016341346e-01 -4.2901097861225876e+00 + -1.8327162672448556e+00 3.3723710493511749e-01 -4.4135159241974380e+00 + -1.8310999182505237e+00 3.6998616576050547e-01 -4.5187878682861609e+00 + -1.8323394120949570e+00 3.8868023021772680e-01 -4.6358325943011298e+00 + -1.8110564215481306e+00 2.4968582965545849e-01 -4.7277948984897886e+00 + -1.7512930067608461e+00 -1.0065425965257724e-01 -4.7715328276442897e+00 + -1.6412982136299548e+00 -6.2346759241683314e-01 -4.8325308749112548e+00 + -1.4996091299785492e+00 -1.2368040904172390e+00 -4.9862487764149446e+00 + -1.6374345922647271e+00 -1.5521347474492933e+00 -5.1032252714609703e+00 + id 13840 + loc 3.8123950362205505e-01 1.8901573121547699e-01 403 + blend 0.0000000000000000e+00 + interp 3.6586062805673780e-01:2.8523168208858868e-01:7.9118812690320572e-01:3.6585696945045726e-01:1.9223493884851268e+00:2.7505513652371966e-01:2.4713401238579591e+00:3.1885430372568757e-01:3.1130079833043887e+00:2.9422731304062971e-01:3.9906196439124431e+00 + CVs 20 + -1.8192816093570879e-01 2.5826629507242932e-01 -2.1678869122321198e-02 + -3.9228620825383032e-01 5.0859782473200632e-01 -5.2494230114375484e-03 + -6.2787332012254304e-01 7.7139571180638933e-01 2.2119086062623805e-02 + -8.8227444269221023e-01 1.0370852033642886e+00 4.4700794900793650e-02 + -1.1555942101080385e+00 1.2835347506219086e+00 6.0220853923594109e-02 + -1.4424976945951504e+00 1.4933020804808841e+00 7.6868950069253095e-02 + -1.7290114854886789e+00 1.6586330325030210e+00 1.1581201368597849e-01 + -1.9934358172628994e+00 1.7710663832725648e+00 1.9473032348101516e-01 + -2.2157376205912040e+00 1.8221247726537331e+00 3.1608667608317409e-01 + -2.3954675329170478e+00 1.8164683723569883e+00 4.7543984854957355e-01 + -2.5487579502636377e+00 1.7637310836060065e+00 6.7034602409123789e-01 + -2.6983837831740050e+00 1.6660491639651840e+00 8.9612680978002879e-01 + -2.8670189576594236e+00 1.5212496619238338e+00 1.1482726658027662e+00 + -3.0574992876702041e+00 1.3321913187324426e+00 1.4278097471150777e+00 + -3.2668628453732618e+00 1.1106192532664194e+00 1.7408436669081528e+00 + -3.5390461085304650e+00 8.8144454358310431e-01 2.0820339095332390e+00 + -3.9438609720489315e+00 7.0358852716303344e-01 2.4008624967288634e+00 + -4.4290505886110481e+00 6.3137625879555914e-01 2.6237694503652458e+00 + -4.8059471038923816e+00 5.4699693625734347e-01 2.8291319003392710e+00 + id 13841 + loc 5.0010251998901367e-01 8.1550872325897217e-01 375 + blend 0.0000000000000000e+00 + interp 5.1455906462598489e-01:2.7567766043127889e-01:8.2737122907969141e-01:5.1455391903533865e-01:1.2700698064733105e+00:2.4682522107821603e-01:2.0441935176929023e+00:4.3841628340756639e-01:2.9150891218702997e+00:2.6152141286071007e-01:3.3833436287938508e+00:4.4461260474774411e-01:3.8683797948438707e+00 + CVs 20 + -4.0516848224166380e-01 4.3977732186270391e-01 -1.6092025516560304e-01 + -8.5468548550410206e-01 7.7377989051254947e-01 -2.7432696685160535e-01 + -1.3812151322636985e+00 9.5934785666843592e-01 -3.3870564918232465e-01 + -1.9453565808864068e+00 1.0597096146559222e+00 -3.7062650363770838e-01 + -2.4926379859266761e+00 1.1594197156917554e+00 -4.0587826099573371e-01 + -2.9845213938675608e+00 1.2903699637420316e+00 -4.9457388492854387e-01 + -3.4031266267887554e+00 1.4450447165348810e+00 -6.6816812722945429e-01 + -3.7436352661849455e+00 1.6138159417746412e+00 -9.2604351332254864e-01 + -4.0110884235672781e+00 1.7906485247384691e+00 -1.2550434530347017e+00 + -4.2291393339209034e+00 1.9596904746695885e+00 -1.6471041822803549e+00 + -4.4204948291493009e+00 2.0805238254842395e+00 -2.0921259142131428e+00 + -4.5823830094759463e+00 2.0923677181350842e+00 -2.5564322756715652e+00 + -4.7001292867672841e+00 1.9540391244475681e+00 -2.9855466468695724e+00 + -4.7643157752739569e+00 1.6803717185467413e+00 -3.3365669939033351e+00 + -4.7847875880351820e+00 1.3047645910321677e+00 -3.5809689388535801e+00 + -4.8636546190128627e+00 8.5977485113119112e-01 -3.6813137074330644e+00 + -5.1889459331448204e+00 4.7424667255208020e-01 -3.5557340539644668e+00 + -5.6788604653328951e+00 3.4054726205193298e-01 -3.3018918852098000e+00 + -5.9599521960175386e+00 -1.1863275965251940e-01 -3.4008828911544282e+00 + id 13842 + loc 6.3011884689331055e-01 9.5492523908615112e-01 373 + blend 0.0000000000000000e+00 + interp 4.2788563549517805e-01:3.4901304860879945e-01:4.8605760332375791e-01:3.8910968706982413e-01:1.0461257767060672e+00:4.2788135663882310e-01:1.4892775260483597e+00:3.0224034686624834e-01:1.9926063223243160e+00:3.5958458324128534e-01:3.0013783610024505e+00:2.9499136579398616e-01:3.9709774171154057e+00 + CVs 20 + -2.0623816570134984e-01 3.4337057592909931e-01 -1.8514391968941840e-01 + -4.1133890082723373e-01 7.1395710397084955e-01 -3.7436701795021676e-01 + -5.7857822266320502e-01 1.1010309009966119e+00 -5.6377051816442691e-01 + -6.9463715924875125e-01 1.4889803785714222e+00 -7.6290441945672516e-01 + -7.6241974014653868e-01 1.8576046217942259e+00 -9.8807946906778055e-01 + -7.9559448837302404e-01 2.1787220629735584e+00 -1.2539405841776563e+00 + -8.1014509450067429e-01 2.4237924461518485e+00 -1.5631452136540351e+00 + -8.1839755223027499e-01 2.5781553646498088e+00 -1.9001619242049439e+00 + -8.2767556964870492e-01 2.6452224667935473e+00 -2.2403234447153806e+00 + -8.4076219605523073e-01 2.6388601665446103e+00 -2.5624640158512664e+00 + -8.6241756026443106e-01 2.5681704697211565e+00 -2.8549367674863553e+00 + -9.0467180109962764e-01 2.4354192757624440e+00 -3.1043685237857392e+00 + -9.8268094287719854e-01 2.2626788513085900e+00 -3.2938368821974588e+00 + -1.0991983351512289e+00 2.0878187699654163e+00 -3.4181113347823691e+00 + -1.2301623850890391e+00 1.9451890167016077e+00 -3.4609543516294106e+00 + -1.3092938302901775e+00 1.8615654811256399e+00 -3.4028127576008425e+00 + -1.2480588010435647e+00 1.7945933527028461e+00 -3.2736675591275759e+00 + -1.1265867527343723e+00 1.6547235261453592e+00 -3.1703155790074300e+00 + -1.3426587307094486e+00 1.6380070903632311e+00 -3.0500109392129344e+00 + id 13843 + loc 5.4322886466979980e-01 1.6634729504585266e-01 395 + blend 0.0000000000000000e+00 + interp 5.5172980833303220e-01:3.2741469345331581e-01:2.8971601027845684e-02:3.6927410467733740e-01:7.7181884216030860e-01:3.5280765845842743e-01:1.1898317933579365e+00:2.9801910776523671e-01:1.8961696288660606e+00:3.4246650006744689e-01:2.8071076403949204e+00:4.9336898730513679e-01:3.0273185123251314e+00:5.5172429103494891e-01:3.3989119493076583e+00 + CVs 20 + -3.3930525237414300e-01 1.4148464243115055e-01 3.0222146506171854e-01 + -6.0469369737933709e-01 2.2050330657033745e-01 5.4598118505601323e-01 + -8.4868331607580005e-01 2.7751913348113660e-01 7.6031412062321013e-01 + -1.0887714234330907e+00 3.3462413011994885e-01 9.5200912863846421e-01 + -1.3275895831678675e+00 3.9615656609422778e-01 1.1182466849630002e+00 + -1.5702786708377414e+00 4.6698232946830809e-01 1.2601374632385327e+00 + -1.8139917088844095e+00 5.5993387842803222e-01 1.3857260757878462e+00 + -2.0548064891068702e+00 6.9208197868697918e-01 1.5079165586078103e+00 + -2.3103801396374242e+00 8.6421348134309595e-01 1.6383187774011678e+00 + -2.6099480617815578e+00 1.0536156591578552e+00 1.7872795752315924e+00 + -2.9607310264926321e+00 1.2274420910728561e+00 1.9751184419333814e+00 + -3.3475539214578309e+00 1.3578556438577962e+00 2.2221181600147792e+00 + -3.7633178725265708e+00 1.4296129280699976e+00 2.5210797339829614e+00 + -4.2141622675661878e+00 1.4361899251543844e+00 2.8425218135212242e+00 + -4.7018294439555959e+00 1.3810723439012200e+00 3.1755624831929525e+00 + -5.2203750676379936e+00 1.2675935036613484e+00 3.5503228919413146e+00 + -5.7413884160868669e+00 1.0699873926518078e+00 3.9916466346635158e+00 + -6.1763610663145254e+00 7.6945740819896358e-01 4.4518529698988942e+00 + -6.3134010315930489e+00 5.0401351900188285e-01 4.7694173056728939e+00 + id 13844 + loc 4.3375650048255920e-01 4.8741647601127625e-01 400 + blend 0.0000000000000000e+00 + interp 5.0088982322804088e-01:3.8683843184636746e-01:4.3963226982369208e-02:3.5333083991311820e-01:8.9328964404980704e-01:4.0571006406583338e-01:1.2576244716664831e+00:5.0088481432980858e-01:1.9126200722147020e+00:2.5793935035807408e-01:2.7119559679765053e+00:4.3241045382088594e-01:3.0300959262148131e+00:3.7894471928052181e-01:3.6595014020824896e+00 + CVs 20 + -1.9863297505657931e-01 2.0124115094888798e-01 2.6771408711671263e-01 + -3.8356803852072219e-01 3.8091018689628647e-01 5.2903121171615652e-01 + -5.7590144978789892e-01 5.4756684339941364e-01 7.9467925177579490e-01 + -7.8720495039231786e-01 7.0413585906889731e-01 1.0685672991659363e+00 + -1.0195995250104892e+00 8.4976397811123050e-01 1.3473341818103710e+00 + -1.2748975593911589e+00 9.8376652895539896e-01 1.6274425976943059e+00 + -1.5565554818585157e+00 1.1049463037941103e+00 1.9055321506139511e+00 + -1.8713335433642606e+00 1.2127401136045994e+00 2.1792338125923036e+00 + -2.2308979635904294e+00 1.3076651384665781e+00 2.4467833540957939e+00 + -2.6490384871904027e+00 1.3857090989134795e+00 2.7011648412064639e+00 + -3.1289448159159043e+00 1.4385974718935630e+00 2.9291437495485870e+00 + -3.6543166847088830e+00 1.4612471014277153e+00 3.1251013143969280e+00 + -4.1951733538633693e+00 1.4545808668227291e+00 3.3053406631120463e+00 + -4.7159978017117119e+00 1.4117836654303964e+00 3.5008203687177297e+00 + -5.1816988603901217e+00 1.3185470704975621e+00 3.7428836033795552e+00 + -5.5683857582471532e+00 1.1839320159474798e+00 4.0510817754052235e+00 + -5.8728650967575877e+00 1.0404473522685014e+00 4.4219842377711975e+00 + -6.1266665780749054e+00 8.8398763566129723e-01 4.8338181324505349e+00 + -6.4787194013306690e+00 5.9951010888905021e-01 5.2585124018179830e+00 + id 13845 + loc 4.0491628646850586e-01 3.7848210334777832e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1329914064299988e-01:3.5414007882280168e-01:7.4027254742770943e-02:4.0066130949199585e-01:9.5499080124192437e-01:4.1329500765159349e-01:1.3015376639800436e+00:2.9917456258208230e-01:1.9901488328626002e+00:3.4731271353034920e-01:2.7404918013678254e+00:2.9229915670721951e-01:3.0680247206716338e+00 + CVs 20 + -2.0714256066090478e-01 3.2523643611026914e-01 -1.7272784857214590e-02 + -3.8795300532547061e-01 6.1724721512782543e-01 -7.8653529888910723e-02 + -5.5044634705822726e-01 8.9180807704380016e-01 -1.6340376331750417e-01 + -7.0674497127217362e-01 1.1544596383947268e+00 -2.6841717290673228e-01 + -8.7294523107914956e-01 1.4064661506579694e+00 -3.9802061506001352e-01 + -1.0666466006186925e+00 1.6488662583053904e+00 -5.3908540765009316e-01 + -1.3012464465481637e+00 1.8718551554329861e+00 -6.6169153325335683e-01 + -1.5778483902972971e+00 2.0500869806360482e+00 -7.3859544698307389e-01 + -1.8819914004792559e+00 2.1530526618995367e+00 -7.6272088006903149e-01 + -2.1943606781926928e+00 2.1618590901342869e+00 -7.4416561522292723e-01 + -2.5019781664672069e+00 2.0735336792699779e+00 -6.9647480076478308e-01 + -2.7944974205077515e+00 1.8967545776800188e+00 -6.3187977208576573e-01 + -3.0611592545627540e+00 1.6521724646068909e+00 -5.6424905457455099e-01 + -3.2950516742033837e+00 1.3700772383170927e+00 -5.0909550126379988e-01 + -3.4947047758391392e+00 1.0818471145797823e+00 -4.7926327435815808e-01 + -3.6538381296670326e+00 8.1916181834273971e-01 -4.7898145352007682e-01 + -3.7524273212993999e+00 6.1463072486092063e-01 -4.8995254287713508e-01 + -3.8039527818568590e+00 4.5674867499197591e-01 -4.9217271899949033e-01 + -3.9028634120762935e+00 2.9537707485643838e-01 -7.1180075514425623e-01 + id 13846 + loc 8.6874711513519287e-01 2.8568375110626221e-01 396 + blend 0.0000000000000000e+00 + interp 3.7456579199246981e-01:3.2224796482553891e-01:4.7381532029154849e-03:3.4591937384194044e-01:9.8105943480621993e-01:3.0364890326760752e-01:1.3786379982920349e+00:3.6114073213870290e-01:1.9982036436449704e+00:3.7456204633454993e-01:2.7006180466850189e+00:3.6330157735793611e-01:3.0776813116702013e+00 + CVs 20 + -7.2355534960470103e-01 2.2108944359279795e-01 3.9330700267557550e-01 + -1.2578049487072089e+00 3.2272239112533979e-01 6.7804060290821777e-01 + -1.7377575582968798e+00 3.7073743201825038e-01 9.1897660719135010e-01 + -2.2232253596889140e+00 3.8785503236817970e-01 1.1452047814464723e+00 + -2.7009189231478437e+00 3.6481909592149608e-01 1.3592048245262442e+00 + -3.1590741900603954e+00 2.9793242902088146e-01 1.5671894340987003e+00 + -3.5880461473519882e+00 1.9109787309997950e-01 1.7747430064674010e+00 + -3.9820362734265902e+00 5.5495629266988367e-02 1.9809421066874788e+00 + -4.3429849918569072e+00 -9.8563432715363053e-02 2.1819687393964666e+00 + -4.6791632380675106e+00 -2.7100197478578458e-01 2.3769776203635180e+00 + -4.9954820452007516e+00 -4.7020627671999748e-01 2.5643486782337135e+00 + -5.2829916163429758e+00 -7.0686615302612510e-01 2.7392727623628703e+00 + -5.5311157296697697e+00 -9.8476880407368106e-01 2.8932544802896887e+00 + -5.7422082702424202e+00 -1.3027127196178008e+00 3.0154681017452116e+00 + -5.9247792597922500e+00 -1.6549017400165844e+00 3.0975884498226911e+00 + -6.0834500618797680e+00 -2.0188349585181609e+00 3.1378759749465974e+00 + -6.2211614784443787e+00 -2.3605393362951985e+00 3.1413757904508177e+00 + -6.3384309360612789e+00 -2.6658901358717162e+00 3.1145035531650831e+00 + -6.3447508529326608e+00 -3.0826669286609318e+00 3.0265164731660978e+00 + id 13847 + loc 6.9561630487442017e-01 1.4081791043281555e-01 409 + blend 0.0000000000000000e+00 + interp 4.2243023289343951e-01:2.6515988064583201e-01:9.2543633555106197e-01:2.8974766523341527e-01:1.5673834403107476e+00:3.0090858785926106e-01:2.4408396312083402e+00:2.8352117246342312e-01:3.2767818303848308e+00:4.2242600859111057e-01:3.9944190181094794e+00 + CVs 20 + -2.4071193195467475e-01 1.2479778271434791e-01 1.1977608886773296e-01 + -4.9729867385696719e-01 2.4795457908286908e-01 2.4498516655102018e-01 + -7.6434616394890642e-01 3.6373409257607786e-01 3.5597785199556853e-01 + -1.0343943971167211e+00 4.6763167858933052e-01 4.4646651177924690e-01 + -1.2998743617067476e+00 5.5743560650673274e-01 5.1979018935568833e-01 + -1.5534885662524240e+00 6.3292409022385776e-01 5.7923032120915741e-01 + -1.7883226177988369e+00 6.9571176429541692e-01 6.2729693137953502e-01 + -1.9981330993503339e+00 7.4861113984820726e-01 6.6624861011393821e-01 + -2.1816659715682705e+00 7.9694568593050186e-01 6.9851065525866085e-01 + -2.3437653365237603e+00 8.4909000960711767e-01 7.2543147670507480e-01 + -2.4922581437515499e+00 9.1468835934630166e-01 7.4763475763827647e-01 + -2.6395523049635354e+00 9.9752367890763671e-01 7.6898685038871073e-01 + -2.7990228287967271e+00 1.0904021363690153e+00 7.9716511603803542e-01 + -2.9784326532975314e+00 1.1850293818210258e+00 8.3846316000828780e-01 + -3.1817069503180324e+00 1.2785972215631414e+00 8.9701243622794880e-01 + -3.4108002306706742e+00 1.3717839646027001e+00 9.8286023605405337e-01 + -3.6639691984502072e+00 1.4606084604890615e+00 1.1127876045188301e+00 + -3.9283589675836352e+00 1.5295278909334200e+00 1.2856470154363011e+00 + -4.0421111242822576e+00 1.5454597491826292e+00 1.4193882499805661e+00 + id 13848 + loc 2.3502869904041290e-01 1.8503461778163910e-01 415 + blend 0.0000000000000000e+00 + interp 4.8359007794985509e-01:3.2842150614972249e-01:6.0279883633754816e-01:4.1541997522439811e-01:1.1256133656647866e+00:3.0439433100858249e-01:2.0397225886895476e+00:3.1433787744160036e-01:2.7696423974703670e+00:2.7126243506815717e-01:3.2499234422391146e+00:4.8358524204907560e-01:3.9634375183420820e+00 + CVs 20 + -4.2827884936155886e-02 9.2198146185231575e-02 -7.9652584317057032e-02 + -9.2518661180484102e-02 1.4757017813570963e-01 -1.1594010626970072e-01 + -1.5469605897750466e-01 1.9742360016352722e-01 -1.3370819334165984e-01 + -2.2646421097162125e-01 2.4388877494153408e-01 -1.5804898785386889e-01 + -3.0866189370773667e-01 2.9125767436750927e-01 -1.9254689449914983e-01 + -4.0081100789046387e-01 3.4495845853752660e-01 -2.4110692465752720e-01 + -5.0006278447630970e-01 4.1007901476955555e-01 -3.0832884322773957e-01 + -6.0006942572305244e-01 4.8891052615911823e-01 -3.9780420003729328e-01 + -6.9234174746311150e-01 5.7953021391752269e-01 -5.1015454750931288e-01 + -7.6928172925865401e-01 6.7995643794592175e-01 -6.4202558793679920e-01 + -8.2490480448583969e-01 7.9171081907521379e-01 -7.8452096417746031e-01 + -8.5538541626013398e-01 9.1576411460689222e-01 -9.2352642321175382e-01 + -8.6103866799957396e-01 1.0438351386621010e+00 -1.0501230575397484e+00 + -8.4590196694341502e-01 1.1635587635490565e+00 -1.1621407775590489e+00 + -8.1552392175291633e-01 1.2696829139984833e+00 -1.2540054058209804e+00 + -7.7445604052563233e-01 1.3654110878635461e+00 -1.3164717805944224e+00 + -7.2254373900382995e-01 1.4575978601592974e+00 -1.3493611593518886e+00 + -6.5402083152347501e-01 1.5504077671386478e+00 -1.3733104771992197e+00 + -5.9996823102358188e-01 1.5804260540527806e+00 -1.3920340758369103e+00 + id 13849 + loc 9.8431289196014404e-01 2.9191458225250244e-01 412 + blend 0.0000000000000000e+00 + interp 3.9840214933311663e-01:3.4605796974740066e-01:5.2296646934991409e-01:3.8892293182454740e-01:1.0624082125112133e+00:3.9839816531162331e-01:1.8062544395692486e+00:2.5642800281375222e-01:2.0923648239217822e+00:3.6257335035283828e-01:3.0100305244489647e+00:3.2822843236812482e-01:3.9757166751761153e+00 + CVs 20 + -6.9494593010477190e-01 1.4332223918234460e-01 2.2474631483716548e-01 + -1.1910941742383740e+00 1.6703846143534118e-01 4.4004035583229140e-01 + -1.6742598182557571e+00 1.6299464041976941e-01 6.5386361737570375e-01 + -2.1801239374344976e+00 1.5663585674357239e-01 8.5456439962195274e-01 + -2.6698611841668822e+00 1.3113936961879802e-01 1.0404955493558856e+00 + -3.1140363609628943e+00 7.3617966351094744e-02 1.2230144691965159e+00 + -3.5139490545663739e+00 -2.1136717044437647e-02 1.4167088169409652e+00 + -3.8930608199957071e+00 -1.6515422368483357e-01 1.6439210083581672e+00 + -4.2656479814699617e+00 -3.7226383532235841e-01 1.9018443466111048e+00 + -4.6314920296237077e+00 -6.4502665303655560e-01 2.1517288536301020e+00 + -4.9878521992405327e+00 -9.8429720683591859e-01 2.3529223232842296e+00 + -5.3384228210686135e+00 -1.3979815043339032e+00 2.4901719818709247e+00 + -5.6834006024515009e+00 -1.8727848987092495e+00 2.5671642485410251e+00 + -6.0090986679050244e+00 -2.3722309314257197e+00 2.5971575248361005e+00 + -6.2883212353228561e+00 -2.8573917841826577e+00 2.5966309647001360e+00 + -6.4889710538045993e+00 -3.2684263953947372e+00 2.5939413280674364e+00 + -6.5913974273279585e+00 -3.5576508015859214e+00 2.6279220023866774e+00 + -6.6356962699137778e+00 -3.7703624775152416e+00 2.7311317816305554e+00 + -6.7610453540784707e+00 -4.0167625208246145e+00 2.9027606240904644e+00 + id 13850 + loc 3.5824048519134521e-01 2.7114665135741234e-04 374 + blend 0.0000000000000000e+00 + interp 4.5062393234228054e-01:2.1704540699646635e-01:6.9735257439513565e-01:4.5061942610295713e-01:1.4913105749854076e+00:3.4828959654107539e-01:2.0534722504036824e+00:2.6047136637301094e-01:2.8190300133778146e+00:2.5339963536443211e-01:3.7420350419894843e+00 + CVs 20 + -3.6583175896609094e-01 3.9471443721725752e-01 7.5856996431775947e-01 + -5.2116591980241778e-01 5.9605678959675801e-01 1.3307923733481313e+00 + -5.3595681137872198e-01 6.3792536255306809e-01 1.8517436689719646e+00 + -4.6138796659141967e-01 5.7044837697099327e-01 2.3971704608079136e+00 + -3.4871143469053756e-01 4.6165775855614943e-01 2.9862177892376609e+00 + -2.6657609092309753e-01 3.6177380625277633e-01 3.6256298376387832e+00 + -2.8520367306253624e-01 2.7746484676994831e-01 4.3106759085641242e+00 + -4.5527340714166198e-01 2.0763713265707318e-01 5.0170181021517237e+00 + -7.8819330320331260e-01 1.6468767331335488e-01 5.6910353309467130e+00 + -1.2502194175762105e+00 1.5683175091959622e-01 6.2818127911624302e+00 + -1.7895019463474089e+00 1.7092224238791243e-01 6.7848115352823806e+00 + -2.3743002467870893e+00 1.6671464739214059e-01 7.2241658275716158e+00 + -2.9971933176759498e+00 7.7251463825949607e-02 7.6056065981700565e+00 + -3.6450106970979865e+00 -1.5910586606190824e-01 7.8992780146267343e+00 + -4.2650466630170349e+00 -5.4280374656100427e-01 8.0659424898002854e+00 + -4.7732177986970994e+00 -9.9525466707388821e-01 8.1105386393019288e+00 + -5.1051244155460651e+00 -1.4144969987331013e+00 8.1286462671314226e+00 + -5.2972507035875971e+00 -1.8091478781537313e+00 8.1828850394738399e+00 + -5.4299293306687684e+00 -2.3153304061565598e+00 8.2508843535308003e+00 + id 13851 + loc 1.7916484177112579e-01 6.9304686784744263e-01 378 + blend 0.0000000000000000e+00 + interp 4.4997466119936713e-01:4.4997016145275515e-01:6.4644160336524914e-01:3.3349573696865059e-01:1.0016793411684537e+00:2.9341339549006856e-01:1.5423667593841632e+00:2.8288349308048494e-01:2.2218551975892948e+00:2.5208283002221610e-01:2.9962511310770763e+00:4.3174732043181546e-01:3.2796218004835191e+00:4.0046703558589292e-01:3.9990744783998693e+00 + CVs 20 + 6.8832036345596748e-01 3.5016427339454892e-01 1.7856003428390349e-01 + 1.2901225745775711e+00 6.0736329887357288e-01 2.8138754989082437e-01 + 1.8697579916926013e+00 8.3310916387963985e-01 3.7570701074425983e-01 + 2.4509757265766998e+00 1.0689906877783948e+00 5.0971179758543228e-01 + 3.0199263414207342e+00 1.3132729545593951e+00 7.1007626167107629e-01 + 3.5666302681414064e+00 1.5400207773355339e+00 9.9060337216464533e-01 + 4.0887484350466794e+00 1.7201000354419864e+00 1.3553152577551382e+00 + 4.5807866099466992e+00 1.8285108970928459e+00 1.7980260075252248e+00 + 5.0328543019961280e+00 1.8427866344533173e+00 2.2957901087471155e+00 + 5.4362792376660103e+00 1.7445037760140538e+00 2.8116517135195429e+00 + 5.7827296690732792e+00 1.5208524721202337e+00 3.3107650375623194e+00 + 6.0573637345067706e+00 1.1713907924769695e+00 3.7685035054275957e+00 + 6.2419981940933962e+00 7.2860378830225825e-01 4.1693506436735017e+00 + 6.3363694218315247e+00 2.6564900777498446e-01 4.5130852100366479e+00 + 6.3650503474941438e+00 -1.4436430899040120e-01 4.8254626623906702e+00 + 6.3614867221958935e+00 -4.8636981603181129e-01 5.1236515348867417e+00 + 6.3675943083543487e+00 -8.0294520875187736e-01 5.4068904135672398e+00 + 6.4195004237405504e+00 -1.1441298947617957e+00 5.6759726664768486e+00 + 6.4211941678635753e+00 -1.4749512790396135e+00 5.9229711941035852e+00 + id 13852 + loc 6.3108369708061218e-02 8.6210213601589203e-02 379 + blend 0.0000000000000000e+00 + interp 3.2262865357609405e-01:1.8335539138938636e-01:1.4661506758465781e-01:3.2262542728955829e-01:8.4923027494288184e-01:3.0084174281142595e-01:1.3327693908425799e+00:2.1599457609199074e-01:1.9750449094727716e+00:1.8493570953618510e-01:3.0978406911617742e+00 + CVs 20 + 2.6995755190268278e-01 3.7013896321981971e-01 3.6302971520328070e-01 + 5.8800962175943572e-01 6.3866204510128355e-01 6.7256902207033675e-01 + 9.6781438549526533e-01 7.8588831150305771e-01 9.5953098416748051e-01 + 1.3946109391630399e+00 8.7091102200405812e-01 1.2490854796786173e+00 + 1.8232978576769656e+00 9.6999327058294016e-01 1.5600638317756081e+00 + 2.1911820595577640e+00 1.1147786473492087e+00 1.9139888719726272e+00 + 2.4455038561846267e+00 1.2917824207070503e+00 2.3142035699100836e+00 + 2.5658895617214670e+00 1.4738303496500458e+00 2.7328166167327046e+00 + 2.5688457840272836e+00 1.6328248772537042e+00 3.1298960185277265e+00 + 2.4997005551236344e+00 1.7488801290672169e+00 3.4831932790576809e+00 + 2.4087246401154907e+00 1.8142667091529889e+00 3.7808387492263500e+00 + 2.3464126174889559e+00 1.8373435986093678e+00 4.0015455758046512e+00 + 2.3585188094912208e+00 1.8569122384208596e+00 4.1459281957270591e+00 + 2.4599802261725547e+00 1.9122345259635205e+00 4.2775668581616220e+00 + 2.6106873910481951e+00 2.0031893479594634e+00 4.4806273183049319e+00 + 2.6835341059964066e+00 2.1098146819311250e+00 4.7536855892261540e+00 + 2.5241597156130489e+00 2.2745901602505190e+00 4.9809115141197848e+00 + 2.1364123302480222e+00 2.3791262874785524e+00 5.1302119392163714e+00 + 2.3589010343839649e+00 2.0491216300663080e+00 5.2170334314342526e+00 + id 13853 + loc 4.8961618542671204e-01 5.4712110757827759e-01 399 + blend 0.0000000000000000e+00 + interp 4.0871397287432104e-01:2.6649314628539189e-01:8.5056828317569089e-01:2.7723729019891519e-01:1.7946372599766789e+00:2.6440554859870491e-01:2.8086420156403449e+00:4.0870988573459233e-01:3.4736304609325184e+00:2.5923117878124552e-01:3.9998913387764139e+00 + CVs 20 + -1.3106454215796895e-01 2.6816324767535787e-01 -1.5810420804423958e-01 + -2.9637253163981325e-01 5.4081477246383436e-01 -3.2498690886233972e-01 + -4.6839173006434370e-01 8.0687135821469635e-01 -5.2436026205997477e-01 + -6.3236582615456904e-01 1.0486698611437744e+00 -7.5748931729275726e-01 + -7.9305365993282018e-01 1.2575078371469119e+00 -1.0122893818370042e+00 + -9.5713349566754480e-01 1.4293353246892047e+00 -1.2742614205776019e+00 + -1.1272215814783957e+00 1.5601908029439875e+00 -1.5279553105742580e+00 + -1.2988644910929490e+00 1.6466827489012035e+00 -1.7529560244161777e+00 + -1.4629764029932411e+00 1.6930546823522450e+00 -1.9269053025650809e+00 + -1.6099645800920772e+00 1.7172950869937356e+00 -2.0353280014474491e+00 + -1.7328956386290311e+00 1.7345883890198093e+00 -2.0829936341736839e+00 + -1.8380418436662462e+00 1.7177510857472620e+00 -2.0953733566796950e+00 + -1.9407310012177994e+00 1.6117474533464129e+00 -2.0862178702905436e+00 + -2.0713051159050813e+00 1.3579585593195516e+00 -2.0660030485279903e+00 + -2.2978361741073758e+00 9.0013303381144072e-01 -2.0929769897500292e+00 + -2.7134188917395874e+00 2.3471296415886178e-01 -2.3354789233201929e+00 + -3.2566131403580347e+00 -5.0169978530258064e-01 -3.0403188418978551e+00 + -3.5665771958536392e+00 -9.9281547147729310e-01 -3.9879840990859345e+00 + -3.5600113895900747e+00 -1.1809271260489527e+00 -4.3074096723475250e+00 + id 13854 + loc 2.4086110293865204e-01 1.3745422661304474e-01 402 + blend 0.0000000000000000e+00 + interp 4.0608214352984201e-01:2.5496290638862551e-01:1.6087858271169320e-01:4.0607808270840673e-01:1.1957113404234099e+00:3.3092459458154605e-01:1.9915868145082771e+00:4.0133197500303791e-01:2.8512112165392454e+00:2.8638342293701974e-01:3.1651848033827221e+00 + CVs 20 + -1.1069563382750980e-01 3.9604710001923904e-01 2.5106272475048103e-01 + -2.3862948182559046e-01 8.0417329239108359e-01 4.7415161397425631e-01 + -4.2148674954358728e-01 1.2196920801719173e+00 6.6748984154307200e-01 + -6.7571949387199970e-01 1.6250077170286490e+00 8.3579494646045460e-01 + -1.0015893324779364e+00 1.9960351318935385e+00 9.8486583787408311e-01 + -1.3916145940018594e+00 2.3110624213149089e+00 1.1151216307888681e+00 + -1.8324555268557265e+00 2.5538163542633363e+00 1.2265798808611972e+00 + -2.3064677376561207e+00 2.7135040758214402e+00 1.3266434502829498e+00 + -2.7946128161862402e+00 2.7858902649703907e+00 1.4220181516206742e+00 + -3.2777826944387263e+00 2.7722804860541048e+00 1.5091676882699665e+00 + -3.7363380039170728e+00 2.6765136741742075e+00 1.5856829284961436e+00 + -4.1521923985028071e+00 2.5035043037466043e+00 1.6646300171797919e+00 + -4.5139797799635000e+00 2.2635353102029425e+00 1.7706451651106514e+00 + -4.8231955702098555e+00 1.9772119910682115e+00 1.9357484968315952e+00 + -5.0832352532587199e+00 1.6781393757395322e+00 2.1959595405992318e+00 + -5.2900413189777815e+00 1.4312646305554320e+00 2.5713923650640877e+00 + -5.4407818813260755e+00 1.3313468709836596e+00 3.0309333159843885e+00 + -5.5440118381205732e+00 1.4042095208508973e+00 3.4836124647939726e+00 + -5.6623346764264326e+00 1.4561632645509475e+00 3.9359159097823606e+00 + id 13855 + loc 9.1798549890518188e-01 3.7970894575119019e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5974618518137222e-01:3.7723150821202944e-01:6.5906084561265033e-01:3.2287615117105006e-01:1.0348876311311495e+00:2.6250114085721654e-01:1.7960691857108726e+00:4.5974158771952045e-01:2.3243567545557977e+00:2.5432560573936075e-01:3.0108887590352822e+00:2.4296112995069830e-01:3.9976091904423723e+00 + CVs 20 + -1.9753719098365888e-01 2.2168573698295591e-01 2.3517481573203597e-01 + -3.9409151310293267e-01 4.4668948098708805e-01 4.6683090197959265e-01 + -5.9074754414894837e-01 6.7193531692607333e-01 6.8242098906283455e-01 + -7.8091431907239917e-01 8.8553265686638083e-01 8.6935319620245055e-01 + -9.5653109549638005e-01 1.0724610221822126e+00 1.0167288155207588e+00 + -1.1183331379479315e+00 1.2232193309227626e+00 1.1178238428562171e+00 + -1.2728137072832453e+00 1.3340068671005845e+00 1.1778819212807738e+00 + -1.4273835218834114e+00 1.4024968443313313e+00 1.2145538796948174e+00 + -1.5488662104163144e+00 1.4500055868030566e+00 1.2338386910765888e+00 + -1.5642336493359847e+00 1.5691688839710047e+00 1.2089969669410585e+00 + -1.5388553600926864e+00 1.7854153845109744e+00 1.1882937866125123e+00 + -1.5864551479638451e+00 1.8710317589203838e+00 1.2123338946362341e+00 + -1.7500897260130901e+00 2.0558675808941653e+00 1.1561185075512141e+00 + -1.9483929431575471e+00 2.1477814675012299e+00 1.2529334420178753e+00 + -1.8939460564453920e+00 1.9886601860006772e+00 1.4774569547077587e+00 + -1.5784522432043484e+00 1.6419252581112662e+00 1.6763715288877343e+00 + -1.1717740641670464e+00 1.1818654615848887e+00 1.8115266468974569e+00 + -8.0456692314207601e-01 5.8298628463352453e-01 2.0279568740781118e+00 + -6.7532134130324317e-01 3.7350987006027969e-01 2.1489648866099795e+00 + id 13856 + loc 7.8924137353897095e-01 5.4137308150529861e-02 407 + blend 0.0000000000000000e+00 + interp 3.7637654097416456e-01:2.9959171088138148e-01:1.1046310056034947e-01:3.7637277720875484e-01:9.6150606778463998e-01:2.2728507704590931e-01:1.9383641692234428e+00:3.1727918523663323e-01:2.9421886194791438e+00:3.4498976614477983e-01:3.6062217153556668e+00 + CVs 20 + -3.1731524571318309e-01 2.6069984579884431e-01 1.1111826143567888e-01 + -4.6801501765093767e-01 3.8396653786365587e-01 1.9259143986471705e-01 + -5.1935723964815206e-01 4.4562745916549829e-01 2.6254895133215927e-01 + -5.5804683883803252e-01 5.0174018372956308e-01 3.2733016977801527e-01 + -5.8103615449117818e-01 5.5532149419110255e-01 3.9441000427480044e-01 + -5.8489453071723629e-01 6.1521445707808886e-01 4.7793923756251117e-01 + -5.7218512887026773e-01 7.0428657568859010e-01 5.9722444317943013e-01 + -5.6488769175805476e-01 8.6047096255199695e-01 7.5735948691335508e-01 + -6.0331080376265678e-01 1.0922195708417617e+00 9.1241180514406728e-01 + -6.8783568016042862e-01 1.3355624056955964e+00 9.9821948925429049e-01 + -7.7644176446557300e-01 1.5352780500110685e+00 1.0068199278322592e+00 + -8.4691830159883896e-01 1.6898077107511149e+00 9.5803760913416725e-01 + -8.9647757309162779e-01 1.8094505491936719e+00 8.6526252899769607e-01 + -9.1454200319127543e-01 1.8848300513946843e+00 7.4228366808627155e-01 + -8.8083057645793106e-01 1.8959821493784585e+00 6.0848476379255390e-01 + -7.8819815359342049e-01 1.8373061771083923e+00 4.7348856226234382e-01 + -6.5502601663622317e-01 1.7251996604704993e+00 3.2765490184007562e-01 + -5.1352430472569566e-01 1.5813240175384040e+00 1.5904441737578792e-01 + -4.9505371221019179e-01 1.5704784008342227e+00 -1.7007461737021945e-03 + id 13857 + loc 7.6647144556045532e-01 3.8328844308853149e-01 380 + blend 0.0000000000000000e+00 + interp 4.3037704176843067e-01:2.5257741662207900e-01:1.9654411413171025e-01:2.9995632380522080e-01:9.9990924906669054e-01:4.3037273799801301e-01:1.7682388404143521e+00:2.9376736623532140e-01:2.4089117102271631e+00:2.9308157137297397e-01:3.0551796752471683e+00:3.6982829308872917e-01:3.9164693059205877e+00 + CVs 20 + 5.4021732786944521e-01 2.4101041347644017e-01 6.5941689083484700e-01 + 9.7702059109668804e-01 3.6285637207434984e-01 1.1665542959031030e+00 + 1.3729449370351436e+00 4.3772031405985634e-01 1.6509480654848205e+00 + 1.7605851516970656e+00 4.9940529322334348e-01 2.1693594426063454e+00 + 2.1430576375762258e+00 5.4552271391073592e-01 2.7127581505856404e+00 + 2.5263465370636351e+00 5.5932672081198165e-01 3.2723177594307473e+00 + 2.9110176003038006e+00 5.0883024431671608e-01 3.8369430685610695e+00 + 3.2979351595544091e+00 3.7424681682300642e-01 4.3821033972649426e+00 + 3.6904838941265896e+00 1.5139160223159287e-01 4.8764911397724635e+00 + 4.0919166590092129e+00 -1.5169971293788054e-01 5.2865843015235159e+00 + 4.4956529632857647e+00 -5.1485240321872583e-01 5.5808846625827648e+00 + 4.8838870554179330e+00 -9.0859609917894923e-01 5.7441256556460925e+00 + 5.2449638068657531e+00 -1.2985326583102244e+00 5.7891793913765532e+00 + 5.5862700315066647e+00 -1.6555544528375346e+00 5.7572492860541287e+00 + 5.9166507353075506e+00 -1.9729128910722227e+00 5.6920313197531343e+00 + 6.2222196444984146e+00 -2.2401768993298945e+00 5.6069229259151010e+00 + 6.4625041306382602e+00 -2.4019978146533747e+00 5.4922188429726502e+00 + 6.5851178588451287e+00 -2.4169540522784203e+00 5.3423850082236726e+00 + 6.8118749245960561e+00 -2.5777023938953225e+00 5.2323240111880729e+00 + id 13858 + loc 5.0550371408462524e-01 2.8729224205017090e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9385208061779825e-01:2.7326001739755190e-01:6.2527128511452279e-01:3.9384814209699209e-01:1.1341674392401075e+00:2.6636499182385243e-01:1.9999940288818643e+00:3.8101768030662209e-01:2.6974255188779290e+00:2.6599193303070756e-01:3.7067625566088278e+00 + CVs 20 + -1.1352717653377127e-01 2.5598758003098415e-01 3.6277606881509550e-02 + -2.4335621055334858e-01 4.9194909528262248e-01 8.0692132249365806e-02 + -3.7814176732623361e-01 7.2197819040471611e-01 1.2877645614991295e-01 + -5.0929950577636007e-01 9.4751193822187108e-01 1.7872366527240025e-01 + -6.4022157495539700e-01 1.1684243580476088e+00 2.3906022345432720e-01 + -7.7595692711201769e-01 1.3856395453071060e+00 3.2559579509170827e-01 + -9.1904909295956594e-01 1.5929198450203050e+00 4.6440813128524061e-01 + -1.0608691079442152e+00 1.7708080427183832e+00 6.7851738551572793e-01 + -1.1782980497614561e+00 1.8924899428615323e+00 9.7168163954240661e-01 + -1.2458113316619033e+00 1.9360065638593282e+00 1.3245395277561272e+00 + -1.2456030264117233e+00 1.8895888062092920e+00 1.7005183320554682e+00 + -1.1697553835833809e+00 1.7521923689596020e+00 2.0511323458064008e+00 + -1.0322374983643758e+00 1.5356469190965474e+00 2.3292092561724878e+00 + -8.7181887697715765e-01 1.2674842591051296e+00 2.5026203190691829e+00 + -7.2902763309593721e-01 9.8334243674319355e-01 2.5690611115604378e+00 + -6.0853816899233182e-01 6.9296102348197863e-01 2.5929755626465067e+00 + -4.8589161343066573e-01 3.7102833669284019e-01 2.6824692223372244e+00 + -3.3000250508972062e-01 1.2388172481235049e-01 2.9586982064148497e+00 + -3.1420146915737723e-01 3.0419706452674466e-01 2.9688120659854249e+00 + id 13859 + loc 6.4595174789428711e-01 1.5007610619068146e-01 393 + blend 0.0000000000000000e+00 + interp 4.4025687275894521e-01:4.1815517003270641e-01:2.2074673670576805e-03:3.9996512395940698e-01:5.7305816369001850e-01:4.4025247019021763e-01:9.9974754079376393e-01:3.8814761331485481e-01:1.3564216328380194e+00:2.6190384711443671e-01:2.2592827675049003e+00:3.5463065481780653e-01:3.0250267107051201e+00:3.8624836679532598e-01:3.5817542524862271e+00 + CVs 20 + 3.6579545845353645e-01 3.5929032193917970e-01 1.5684085933070099e-01 + 7.4404140849835809e-01 7.1692186896599841e-01 3.1421257756456522e-01 + 1.1343938059413503e+00 1.0886370394622960e+00 4.9059403625824982e-01 + 1.5305178962599744e+00 1.4488528642864362e+00 7.1894610497649558e-01 + 1.9232631194179972e+00 1.7571634491970367e+00 1.0349509648940272e+00 + 2.2997728583623349e+00 1.9975509394053197e+00 1.4566069350385549e+00 + 2.6424023381984978e+00 2.1628897658766011e+00 1.9683003751189148e+00 + 2.9453474697600264e+00 2.2395341512113136e+00 2.5201715528122786e+00 + 3.2170648669975259e+00 2.2183569263850220e+00 3.0525265371298342e+00 + 3.4631594705949365e+00 2.1024648993044890e+00 3.5102231833484536e+00 + 3.6798201208595751e+00 1.9152852640403744e+00 3.8521166087140064e+00 + 3.8631582789129109e+00 1.7070624777664074e+00 4.0648259094001169e+00 + 4.0127517708804161e+00 1.5362720539375014e+00 4.1578810092794578e+00 + 4.1294792120473449e+00 1.4623226919194550e+00 4.1571890644110026e+00 + 4.2160479661874346e+00 1.5182507709519328e+00 4.1350993814391641e+00 + 4.2821250915050690e+00 1.6579072389980147e+00 4.1885538225838346e+00 + 4.3336776040471845e+00 1.7757009905045433e+00 4.3481606799295438e+00 + 4.4340045630290934e+00 1.7752768787186581e+00 4.5348151652585731e+00 + 4.7202469596178105e+00 1.6592599322344754e+00 4.5513582902801897e+00 + id 13860 + loc 1.9742931425571442e-01 2.0961794257164001e-01 403 + blend 0.0000000000000000e+00 + interp 4.5384586732895799e-01:2.8469842010971141e-01:3.5940345957280440e-01:3.9267657456052529e-01:1.0204331782271148e+00:2.8440608856232963e-01:1.9912936073147307e+00:4.5384132887028472e-01:2.4596979140427191e+00:2.8871581765457943e-01:3.0730591354608703e+00:3.9631552759001870e-01:3.9066687343618400e+00 + CVs 20 + -2.0948147122036209e-01 1.8266779426399773e-01 1.1507086575839298e-01 + -3.9014561305236750e-01 3.7955803092638962e-01 2.4131206429261143e-01 + -5.5043514562690821e-01 5.8370074640496905e-01 3.8729200627767024e-01 + -6.9490750288181879e-01 7.8744101506607822e-01 5.5796338190262418e-01 + -8.2024825118500033e-01 9.7974515358550707e-01 7.5379700124161675e-01 + -9.1668143947651393e-01 1.1479554827329892e+00 9.7478477371168459e-01 + -9.7257528807555071e-01 1.2824827318753431e+00 1.2208955608012528e+00 + -9.7866325757008632e-01 1.3745798051764475e+00 1.4861577086810056e+00 + -9.2985401066402174e-01 1.4159230364594004e+00 1.7579872015444735e+00 + -8.2678076411100754e-01 1.4017617379733325e+00 2.0238050602053206e+00 + -6.7611104895641105e-01 1.3294224002141202e+00 2.2779063866692710e+00 + -4.9142925780964059e-01 1.1898433603470044e+00 2.5365712716942102e+00 + -2.9138452312241103e-01 9.6877652140668902e-01 2.8118508889510201e+00 + -9.5702465706355738e-02 6.6765982186960215e-01 3.0763892522058160e+00 + 8.1145847449935998e-02 2.9921448913883819e-01 3.3160293498177058e+00 + 2.1975780198035333e-01 -1.3428212014926522e-01 3.6183212086230756e+00 + 2.7513884570701008e-01 -5.9768002695304312e-01 4.1320209165521646e+00 + 2.1571063099214016e-01 -9.8074133231982774e-01 4.8145818898194177e+00 + 2.1188978531210964e-01 -1.3385978464146109e+00 5.1875848595886795e+00 + id 13861 + loc 9.7298008203506470e-01 2.6330241560935974e-01 415 + blend 0.0000000000000000e+00 + interp 4.3559660638816788e-01:4.3559225042210403e-01:2.1684091854199461e-01:4.0598470629605504e-01:8.8122133542903325e-01:2.3777481930561134e-01:1.1280867638938104e+00:4.0303003171428281e-01:1.8843264329366836e+00:3.9811508517164118e-01:2.3728862998827438e+00:3.2794918670565609e-01:3.0047828359639412e+00:3.3151489209324242e-01:3.8203087981847421e+00 + CVs 20 + -1.7888214071808264e-01 2.7702884883456201e-02 9.4770225919487056e-02 + -3.2617926716313733e-01 3.9610132241397700e-02 2.0075731558499635e-01 + -4.6893126182293027e-01 5.3056924107673292e-02 3.1772986256948099e-01 + -6.1574777985042950e-01 7.8631859117496566e-02 4.3620599215121908e-01 + -7.7031889802349840e-01 1.1673232662530153e-01 5.5562488236053209e-01 + -9.4021943183185708e-01 1.6728378923328957e-01 6.7545642886849233e-01 + -1.1306433299272343e+00 2.2936176455801827e-01 7.8933575787516075e-01 + -1.3391363908597067e+00 2.9936380913811511e-01 8.8623821750284237e-01 + -1.5615884400313629e+00 3.7173772956721890e-01 9.5908010781901365e-01 + -1.7973377666022561e+00 4.4077945716674966e-01 1.0055271745083225e+00 + -2.0269334567845334e+00 5.0241388354616812e-01 1.0227425176581757e+00 + -2.1696689457225578e+00 5.5960389726365523e-01 1.0123610858375538e+00 + -2.1233984984434522e+00 6.3012266946263051e-01 9.7295964815977576e-01 + -1.9093644206639098e+00 7.3654435074336866e-01 8.6626152080212826e-01 + -1.6882410873527838e+00 8.6227037101088544e-01 6.8437976401917133e-01 + -1.5473821850947038e+00 9.7385103624640501e-01 4.7452958631274433e-01 + -1.4635149873788467e+00 1.0648055013374482e+00 2.4351145969067656e-01 + -1.4179417147889248e+00 1.1316191280226093e+00 -1.7669573079639678e-02 + -1.5085955468446746e+00 1.0160826804833865e+00 5.4566938194218539e-02 + id 13862 + loc 9.9218910932540894e-01 3.2541468739509583e-01 373 + blend 0.0000000000000000e+00 + interp 4.7245941349326415e-01:3.8498893822409602e-01:4.3480958321781671e-02:4.7245468889912923e-01:5.4417714831466579e-01:2.0690259472709857e-01:1.5835074742691608e+00:2.6229701937611388e-01:2.1735418086340146e+00:3.8789822958272707e-01:2.7148086320791087e+00:3.7257460758155470e-01:3.0209580681407484e+00:4.1002756065656515e-01:3.6550856418333995e+00 + CVs 20 + 2.6290144412211325e-01 3.2308990424350953e-01 8.8414657421436726e-02 + 5.6164152990101857e-01 5.9071232591563749e-01 1.7353249137081864e-01 + 8.9124116922851715e-01 7.7424627441825455e-01 2.5180835324572298e-01 + 1.2513974156889995e+00 9.0639039280361489e-01 3.2539842636448985e-01 + 1.6301663878533739e+00 1.0431031545547582e+00 4.0375360286802187e-01 + 1.9978624261958933e+00 1.2211230801925279e+00 5.0622629487368653e-01 + 2.3275442181618056e+00 1.4484125105886401e+00 6.5118263052533365e-01 + 2.6052947976115006e+00 1.7177992414271470e+00 8.4796653147183909e-01 + 2.8139647541926500e+00 2.0155614444768348e+00 1.0968918775718892e+00 + 2.9346552239154251e+00 2.3166853198982462e+00 1.3884763500082333e+00 + 2.9650706623167045e+00 2.5901866255519903e+00 1.7022115940767775e+00 + 2.9191681697709519e+00 2.8070708739379064e+00 2.0048228552013758e+00 + 2.8181676629412005e+00 2.9486413481697333e+00 2.2586843323680585e+00 + 2.6846087656841533e+00 3.0259916403842775e+00 2.4427993672889081e+00 + 2.5321000825044857e+00 3.0710784891897469e+00 2.5634841663874663e+00 + 2.3370171204346830e+00 3.0926412906489382e+00 2.6703310954822612e+00 + 2.0498751331706724e+00 3.0022744317129155e+00 2.8321600395852973e+00 + 1.7777874163437812e+00 2.6432300602843064e+00 3.0513491413046649e+00 + 1.6731454351499724e+00 2.2938575012871549e+00 3.1686408686216896e+00 + id 13863 + loc 6.0632747411727905e-01 8.7923789024353027e-01 382 + blend 0.0000000000000000e+00 + interp 4.0754716808828539e-01:4.0754309261660454e-01:8.0978931372389740e-01:2.9770635153390917e-01:1.4125966493388054e+00:3.3399773241363051e-01:2.4791338890803853e+00:2.7035739352183824e-01:3.1174504509578842e+00:3.1527081891131203e-01:3.9817491335575226e+00 + CVs 20 + 9.6806240713739589e-01 2.4882810681729384e-01 -5.6724864528041663e-01 + 1.5460736886441122e+00 3.5396862684198838e-01 -9.8807489442745666e-01 + 2.0032364639824798e+00 3.7816739548234213e-01 -1.3936862848442755e+00 + 2.4576499821599893e+00 3.4365022564481279e-01 -1.8390055295244350e+00 + 2.9126887066703433e+00 2.3486385490816541e-01 -2.3190439835707828e+00 + 3.3735396511724147e+00 4.6903501182732565e-02 -2.8265752151215402e+00 + 3.8441920705277806e+00 -2.1386733721059203e-01 -3.3570106120907202e+00 + 4.3241321243025688e+00 -5.4314133435842149e-01 -3.9025187865489213e+00 + 4.8026441404868212e+00 -9.5259756734377310e-01 -4.4382639804373127e+00 + 5.2482318904439307e+00 -1.4566362278367140e+00 -4.9335669163043940e+00 + 5.6085414496448411e+00 -2.0553514666609169e+00 -5.3752752047626888e+00 + 5.8460063782590606e+00 -2.7244223190094807e+00 -5.7604707216805355e+00 + 5.9644456342116525e+00 -3.4209876926838434e+00 -6.0854867402995207e+00 + 5.9839665641231070e+00 -4.1021261687325632e+00 -6.3538441524486835e+00 + 5.9287049058527010e+00 -4.7346780501472177e+00 -6.5737940569700051e+00 + 5.8230619702477533e+00 -5.3023362897811870e+00 -6.7466862344444838e+00 + 5.6908641065273633e+00 -5.8093815247241753e+00 -6.8699014751755412e+00 + 5.5559472866863926e+00 -6.2825533404472340e+00 -6.9561707481527009e+00 + 5.4768080165335249e+00 -6.7812765936213300e+00 -7.1307524404205633e+00 + id 13864 + loc 3.0406746268272400e-01 9.2755359411239624e-01 412 + blend 0.0000000000000000e+00 + interp 5.6507126857753553e-01:3.4363439064103457e-01:8.1359183433016291e-03:3.2103370080940014e-01:8.7554944531376255e-01:5.6506561786484977e-01:1.4569814127282668e+00:3.3503922425497934e-01:2.0064856628915946e+00:2.6531269222974435e-01:2.9705004700646218e+00:3.5907406174796891e-01:3.4421112856120315e+00 + CVs 20 + 8.2194656722150894e-01 1.7655821701946928e-01 -1.6367273099125160e-01 + 1.3100155133143765e+00 1.9576260775896859e-01 -3.3887010757031222e-01 + 1.7085839679155417e+00 1.5523489696533876e-01 -5.1679372707397198e-01 + 2.1192722971351943e+00 1.0265149692316539e-01 -6.8924822780875417e-01 + 2.5425208527587109e+00 3.9145038802223586e-02 -8.4825077433344509e-01 + 2.9803054460881748e+00 -3.5352476932751231e-02 -9.8792166422503436e-01 + 3.4324632731669729e+00 -1.2235058882921579e-01 -1.1056533560287727e+00 + 3.8953053486605800e+00 -2.2425300847836893e-01 -1.1991868388758449e+00 + 4.3620486303100217e+00 -3.4364086592832721e-01 -1.2651801170187829e+00 + 4.8206827255023930e+00 -4.8059155378325169e-01 -1.3019491677257164e+00 + 5.2495195034056117e+00 -6.2563937579069129e-01 -1.3081116873235932e+00 + 5.6212464618234463e+00 -7.6115087011337401e-01 -1.2868853102091005e+00 + 5.9296912044758994e+00 -8.8395397748266391e-01 -1.2498367543955835e+00 + 6.2001466319868275e+00 -1.0223969638229491e+00 -1.2142123918150536e+00 + 6.4473651044137652e+00 -1.1991719093212005e+00 -1.1925170899605151e+00 + 6.6621837231093952e+00 -1.4024119736776746e+00 -1.1794435292267642e+00 + 6.8358515830998225e+00 -1.6114406377749571e+00 -1.1630422146145414e+00 + 6.9694273779282030e+00 -1.8196840817053030e+00 -1.1423212038125072e+00 + 7.0412129202510636e+00 -2.0852004392064929e+00 -1.1978091046558657e+00 + id 13865 + loc 7.0670908689498901e-01 8.3682030439376831e-01 399 + blend 0.0000000000000000e+00 + interp 4.2979185336741288e-01:2.6906391452510275e-01:3.5003899955308060e-02:4.2978755544887920e-01:8.5737460264864462e-01:2.8397279666257563e-01:1.2146389275904745e+00:2.7685925229474967e-01:2.0533669237717964e+00:4.2350457710949735e-01:2.8613863234893198e+00:2.8498415121951975e-01:3.2673372477586349e+00 + CVs 20 + -2.2437230478463943e-01 2.8109975677063298e-01 -1.1947230956001716e-01 + -4.5246519382798717e-01 5.7225176334083627e-01 -2.4608341319364946e-01 + -6.9348664578349661e-01 8.6894041718951809e-01 -3.9473797879658357e-01 + -9.5373985636790948e-01 1.1616328769609194e+00 -5.7597845815371984e-01 + -1.2357893771318986e+00 1.4362299559092218e+00 -7.9720263812408909e-01 + -1.5412724467203796e+00 1.6752972215000157e+00 -1.0631099614922577e+00 + -1.8672644868158388e+00 1.8599013684372852e+00 -1.3708543330646812e+00 + -2.2057818964023057e+00 1.9811237535774127e+00 -1.7071642606009167e+00 + -2.5569252474609598e+00 2.0454960067646266e+00 -2.0648147092185130e+00 + -2.9322780481333184e+00 2.0467318506490848e+00 -2.4540395613812356e+00 + -3.3203206442514435e+00 1.9609473042541250e+00 -2.8655618088349923e+00 + -3.6735193750290760e+00 1.8125353921531886e+00 -3.2455634804353881e+00 + -3.9718463204303824e+00 1.6683333765396540e+00 -3.5617070021758028e+00 + -4.2619066117926190e+00 1.5300882548992507e+00 -3.8428447509563468e+00 + -4.6038613729037774e+00 1.3546944194596504e+00 -4.1150315494923211e+00 + -4.9446198345771020e+00 1.1901274827613173e+00 -4.3460051265472508e+00 + -5.0829471122606433e+00 1.2126953037789505e+00 -4.4929133422338277e+00 + -4.9149291115075124e+00 1.3953511277757724e+00 -4.5678529723977519e+00 + -5.4311805289221864e+00 1.4538708001285447e+00 -4.7674771686725093e+00 + id 13866 + loc 5.4084903001785278e-01 5.9436243772506714e-01 378 + blend 0.0000000000000000e+00 + interp 4.1977680117988209e-01:2.7949484757771081e-01:1.2675429671393745e-01:4.1977260341187028e-01:1.0165750106277323e+00:3.2094894838202909e-01:1.7999253883327804e+00:2.5910224550300254e-01:2.1884759238585287e+00:2.9331598030984823e-01:3.3019906194993931e+00 + CVs 20 + 4.2982264542452259e-01 3.3331846225657785e-01 1.4349771173739129e-01 + 8.1363587160193296e-01 5.9961625248335626e-01 2.3819076076425466e-01 + 1.1987069118624563e+00 8.3040645701963034e-01 3.0053731313941057e-01 + 1.6047600914203519e+00 1.0537997020676992e+00 3.4596763850041601e-01 + 2.0249662574075442e+00 1.2853977525013625e+00 3.9382371006310640e-01 + 2.4602106666426633e+00 1.5255777674064139e+00 4.6929157907530855e-01 + 2.9176163706308218e+00 1.7535238655388437e+00 5.9653198604358471e-01 + 3.3939871049348840e+00 1.9396466044342993e+00 7.9174520979195040e-01 + 3.8720070111809837e+00 2.0568071186162324e+00 1.0586841755078544e+00 + 4.3303135512268440e+00 2.0834170375587933e+00 1.3855246698042922e+00 + 4.7534574997171966e+00 2.0028773882992614e+00 1.7454506935616467e+00 + 5.1297409364973507e+00 1.8014967723497484e+00 2.1041404221285789e+00 + 5.4395524733753815e+00 1.4734022892256018e+00 2.4239674836433620e+00 + 5.6655896038256284e+00 1.0356075607246180e+00 2.6766838272302742e+00 + 5.8271778729376891e+00 5.2049520794711013e-01 2.8708196356585720e+00 + 5.9819235062062326e+00 -4.1640967166663323e-02 3.0429019630640908e+00 + 6.1978642534220043e+00 -6.1728345268981366e-01 3.2083010075177301e+00 + 6.5075313265296622e+00 -1.1666097960552135e+00 3.3416067333172177e+00 + 6.7581662176760693e+00 -1.6818477120441568e+00 3.4585061953060716e+00 + id 13867 + loc 6.7266815900802612e-01 2.5602564215660095e-01 400 + blend 0.0000000000000000e+00 + interp 4.7902455279461470e-01:4.1237817586462405e-01:2.0259937075956302e-01:3.9657693756385759e-01:1.0255718429185161e+00:4.1801250904262977e-01:1.7181334816619322e+00:4.0341422858395620e-01:2.0932302823847864e+00:4.7901976254908679e-01:2.8384220863378586e+00:4.1981092326716635e-01:3.1497723153329615e+00:4.5001850172285468e-01:3.8775863057955986e+00 + CVs 20 + 1.4827576046508706e-01 8.6605437826890425e-02 1.0101360572799008e-01 + 3.0698672624916096e-01 2.2806410942846289e-01 2.3421344768146291e-01 + 4.6361882990174375e-01 3.8786702829672792e-01 3.7062061134790247e-01 + 6.1396772105778818e-01 5.4820502474575006e-01 5.0139259837894778e-01 + 7.5953105486062333e-01 7.0572682317279711e-01 6.2959975042507543e-01 + 9.0218403526061386e-01 8.5693909698144755e-01 7.5634535557238747e-01 + 1.0450098983519935e+00 1.0007310327138854e+00 8.8300722312950208e-01 + 1.1911559652650108e+00 1.1373469365344790e+00 1.0137464718815008e+00 + 1.3397150851208699e+00 1.2630452318287499e+00 1.1523660436635752e+00 + 1.4849900936400293e+00 1.3692532588316855e+00 1.2953076824633372e+00 + 1.6239024016106276e+00 1.4486591447085657e+00 1.4341811452140747e+00 + 1.7615471851654181e+00 1.4944342372379584e+00 1.5657107662734027e+00 + 1.9010394879787635e+00 1.4986409488260370e+00 1.6871290381582649e+00 + 2.0334751326902643e+00 1.4631166489149903e+00 1.7895483742586671e+00 + 2.1505492755870872e+00 1.3982204484435421e+00 1.8675914096818846e+00 + 2.2584464277011911e+00 1.3076369432680610e+00 1.9254183905605118e+00 + 2.3674186679830549e+00 1.1839342177749779e+00 1.9666443945638958e+00 + 2.4699621478321441e+00 1.0178380985185578e+00 1.9856213205225983e+00 + 2.5399603250498033e+00 7.7873586124309202e-01 1.9631537621325341e+00 + id 13868 + loc 6.7384022474288940e-01 9.6463251113891602e-01 401 + blend 0.0000000000000000e+00 + interp 4.5698210027141922e-01:3.9820298627113160e-01:1.9399751359768147e-01:3.3630407739416968e-01:1.0442019939383393e+00:3.3905717414467496e-01:1.8932061876905644e+00:2.6954389529523998e-01:2.4143609254622138e+00:3.6406544824018955e-01:3.0370358459668569e+00:4.5697753045041650e-01:3.8230406062640436e+00 + CVs 20 + 3.0741796010054154e-02 3.0387817853623555e-01 -2.9551775363755040e-01 + 3.0678867777400864e-02 6.0958894958382126e-01 -6.0419957180392081e-01 + 1.1453702454996828e-02 9.1640735200257128e-01 -9.4419248920130006e-01 + -2.5913733392689653e-02 1.2026018961974725e+00 -1.3292923940345647e+00 + -9.8183801634363133e-02 1.4405419875806240e+00 -1.7577552250391604e+00 + -2.4148481657611565e-01 1.6133985943076516e+00 -2.1992975921574920e+00 + -4.8341075815863666e-01 1.7097775941488937e+00 -2.6002381718614291e+00 + -8.1347762776305221e-01 1.7198754207154314e+00 -2.9051297101967859e+00 + -1.1883209857573904e+00 1.6508230354735769e+00 -3.0844646675529774e+00 + -1.5647969336877776e+00 1.5301452013827248e+00 -3.1548962071896560e+00 + -1.9211220405929743e+00 1.3802085987828725e+00 -3.1616784808629452e+00 + -2.2570407427340782e+00 1.2059301044964910e+00 -3.1582476127505479e+00 + -2.5775375613061873e+00 1.0089182635630121e+00 -3.1718501508755654e+00 + -2.8805635725903329e+00 8.0714207196527477e-01 -3.1940997741823565e+00 + -3.1968503427384589e+00 6.0356297882146670e-01 -3.2496580383710509e+00 + -3.6030297185700904e+00 3.5012767436596626e-01 -3.4375216245460334e+00 + -4.0913211349482133e+00 5.7386747035251040e-02 -3.8447163068973476e+00 + -4.5194045141121917e+00 -1.5171785046287112e-01 -4.3701931407845303e+00 + -4.8149240836938532e+00 -2.2938769081176291e-01 -4.7079348112371351e+00 + id 13869 + loc 4.3874666094779968e-01 6.2983715534210205e-01 380 + blend 0.0000000000000000e+00 + interp 4.3297708831820986e-01:4.3297275854732670e-01:2.9686550894296848e-01:2.9811077158309013e-01:1.0861423446190990e+00:3.3008233627996653e-01:1.9984171670456803e+00:3.5483735841812986e-01:2.5536273390168871e+00:3.0959301851093179e-01:3.3543863249827508e+00:3.2849376221023846e-01:3.9938154665650809e+00 + CVs 20 + -4.1231809652111734e-01 2.6049177507654631e-01 -5.6617461566929816e-01 + -7.6705074184116973e-01 4.3279449771730960e-01 -9.9433201921671899e-01 + -1.0900742046531757e+00 5.6537866689255323e-01 -1.3812163902846877e+00 + -1.3986732233785772e+00 6.8321108119131579e-01 -1.7742841559362843e+00 + -1.6867627446489726e+00 7.8423812369477031e-01 -2.1745127784828369e+00 + -1.9515454521982121e+00 8.6271352607809904e-01 -2.5828813114229834e+00 + -2.1941625280720136e+00 9.0964330370338842e-01 -2.9993143728965759e+00 + -2.4145767165975704e+00 9.1553856612443241e-01 -3.4220142475979332e+00 + -2.6108853078829233e+00 8.7269633854684625e-01 -3.8481576211113335e+00 + -2.7829841158952879e+00 7.7864407664226132e-01 -4.2697034615284783e+00 + -2.9393492247245225e+00 6.3919755503497289e-01 -4.6738216610658343e+00 + -3.0933057143710876e+00 4.5575766476069379e-01 -5.0521206741313831e+00 + -3.2493992627519583e+00 2.1613111783191430e-01 -5.3966462561704134e+00 + -3.4008128505157216e+00 -1.1225559178042310e-01 -5.6967486200519195e+00 + -3.5416913087069335e+00 -5.5068058926008101e-01 -5.9395178377823390e+00 + -3.6856184088912438e+00 -1.0775231666080063e+00 -6.1434539124890355e+00 + -3.8622193427937548e+00 -1.6492129211315776e+00 -6.3484764889598750e+00 + -4.1104484266274977e+00 -2.2067869023436297e+00 -6.5598617002371515e+00 + -4.3787578639350118e+00 -2.6544731543850277e+00 -6.7255245207130860e+00 + id 13870 + loc 7.2626298666000366e-01 7.8493762016296387e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4013048629300588e-01:3.7618166121785118e-01:5.5059234915253463e-01:3.7407959384413580e-01:1.0026337276856045e+00:2.8224250624981956e-01:1.6820205567339626e+00:3.1602673803841058e-01:2.1934689304496917e+00:4.4012608498814298e-01:2.8240109609020214e+00:4.0668683372615283e-01:3.1816756028037618e+00:3.6618343245137663e-01:3.9846789900030455e+00 + CVs 20 + 1.9531527562062861e-01 2.7471043228758452e-01 -2.1125633697151097e-01 + 3.6092036561889895e-01 5.4191701639620704e-01 -4.1425415570761615e-01 + 5.2876372730933352e-01 7.8217969709222746e-01 -6.0331845851053323e-01 + 7.2595458991244510e-01 9.8475154944267262e-01 -7.7892909044757563e-01 + 9.5936558447080178e-01 1.1478928734544946e+00 -9.4695702657836289e-01 + 1.2039815261590892e+00 1.2815649232191477e+00 -1.1186894040538105e+00 + 1.4131989335655726e+00 1.4026066755276363e+00 -1.3015366583026593e+00 + 1.5502147880624118e+00 1.5170194535135513e+00 -1.4889404139198297e+00 + 1.5954276691532208e+00 1.5999172339108914e+00 -1.6517879787111613e+00 + 1.5594696559981172e+00 1.5794739235916555e+00 -1.7195069299383792e+00 + 1.5429965148546210e+00 1.4304565645950222e+00 -1.6102419605344891e+00 + 1.6065315317670388e+00 1.3086395159917241e+00 -1.3803478602991988e+00 + 1.6647421491900936e+00 1.2990235738688574e+00 -1.1524590651896798e+00 + 1.6596183337740567e+00 1.3457317681653802e+00 -9.9375267732775929e-01 + 1.5874120054849665e+00 1.3642628802232026e+00 -9.2431357837876815e-01 + 1.4917180590477384e+00 1.3473629300483339e+00 -9.0844680268047373e-01 + 1.4041075534484486e+00 1.3697971708365322e+00 -9.1115902646731639e-01 + 1.3191962743571017e+00 1.4792984996226035e+00 -9.4773503833032668e-01 + 1.4033379930155556e+00 1.2351396229687817e+00 -9.6010015431960172e-01 + id 13871 + loc 1.8881273269653320e-01 3.0470234155654907e-01 415 + blend 0.0000000000000000e+00 + interp 4.8961834551999461e-01:2.8930345896686877e-01:1.7716542539737423e-02:3.1433787744160036e-01:7.6305491571621142e-01:2.6071692727482293e-01:1.3127285444025443e+00:3.1360170421993738e-01:2.0234935305451680e+00:2.9096716650580223e-01:2.8117856968495456e+00:4.8961344933653944e-01:3.3397445485697368e+00 + CVs 20 + -4.4627899751054835e-02 1.3833870491753408e-01 -8.3544658611838435e-02 + -9.4571223191452905e-02 2.5316386960919418e-01 -1.0390164384283923e-01 + -1.4804283156752485e-01 3.7918129605186535e-01 -1.0966560484469910e-01 + -1.9163943069722084e-01 5.1767529317750349e-01 -1.2233092988550189e-01 + -2.2257315813469020e-01 6.6878169166713453e-01 -1.4184934963865395e-01 + -2.3850243063286997e-01 8.3188171411303646e-01 -1.6827607788416302e-01 + -2.3741500336138227e-01 1.0043148792383043e+00 -2.0088202694374974e-01 + -2.1818520913226408e-01 1.1806074045051205e+00 -2.3661056772171096e-01 + -1.8113448328288329e-01 1.3541221060771473e+00 -2.7020587817983005e-01 + -1.2423194295781426e-01 1.5231351035914529e+00 -2.9794427959798364e-01 + -3.9306760871502200e-02 1.6895079585307018e+00 -3.1819274268903042e-01 + 7.8560931463433459e-02 1.8475563345731181e+00 -3.2680491830371661e-01 + 2.2150770055887392e-01 1.9854293866090644e+00 -3.1736036082022900e-01 + 3.8222389852003869e-01 2.0970596945996194e+00 -2.8545363594142648e-01 + 5.6786997336856060e-01 2.1833403732595080e+00 -2.3146893319444906e-01 + 7.8769696073226192e-01 2.2450872709095631e+00 -1.6190110641300071e-01 + 1.0293034901492568e+00 2.2812378243291955e+00 -8.6483944945861868e-02 + 1.2601517746672555e+00 2.2929632994103955e+00 -7.9096545195324053e-03 + 1.4385039260272472e+00 2.2524142156781286e+00 1.1170625370740139e-01 + id 13872 + loc 4.1427215933799744e-01 3.5449045896530151e-01 403 + blend 0.0000000000000000e+00 + interp 3.9925149906342794e-01:3.7279554828535305e-01:1.1509768204924753e-01:2.9774748654032102e-01:1.0003212717007066e+00:3.9924750654843733e-01:1.8485080845822850e+00:2.7729501626992631e-01:2.0993618067419075e+00:3.3105360553672780e-01:2.9031933785719981e+00:2.8342463675248070e-01:3.3250869441796675e+00 + CVs 20 + -1.2427106101420855e-01 8.5793942153208000e-03 1.0789617997910859e-01 + -2.4344306486868370e-01 3.5942092948448252e-02 1.9445753422140860e-01 + -3.4663245702175088e-01 6.3396688438645210e-02 2.5976592542041471e-01 + -4.3992089985011440e-01 8.3908175151858153e-02 3.1768850459323300e-01 + -5.2273769583589047e-01 1.0019156500117740e-01 3.6522615308469752e-01 + -5.9878197676302769e-01 1.1645652242438287e-01 4.0128778630426420e-01 + -6.7549591685151622e-01 1.3706148476226832e-01 4.2960122583895777e-01 + -7.5884312671880250e-01 1.6494607482338114e-01 4.5957823021399480e-01 + -8.4897292359709764e-01 2.0201426069423392e-01 5.0140693637249989e-01 + -9.4080636008680751e-01 2.5153285625394572e-01 5.6008356128401815e-01 + -1.0285950453730504e+00 3.1649128415865208e-01 6.3765193599088033e-01 + -1.1070426739155164e+00 3.9645753884812540e-01 7.3752578963556992e-01 + -1.1713908641128805e+00 4.8832379868512094e-01 8.6298933683556533e-01 + -1.2179939078216249e+00 5.8760558299552024e-01 1.0152228068855262e+00 + -1.2440013108520231e+00 6.8738195360173604e-01 1.1935928960341284e+00 + -1.2447126720886574e+00 7.8189842189322356e-01 1.3935581986394998e+00 + -1.2113699270205676e+00 8.6957473121414197e-01 1.6063383581906387e+00 + -1.1338764554386325e+00 9.4844937454420686e-01 1.8219004090970683e+00 + -9.2075354169186485e-01 9.4890749756940052e-01 2.0293994073243962e+00 + id 13873 + loc 5.5863863229751587e-01 6.7098423838615417e-02 396 + blend 0.0000000000000000e+00 + interp 4.7334508079551302e-01:4.4677364698241051e-01:6.9532645946357663e-02:3.6443875528461350e-01:9.0880171155281175e-01:2.4119930196294034e-01:1.9279633498208990e+00:3.8188876919845205e-01:2.4553331586201912e+00:4.7334034734470509e-01:2.9925123458745455e+00:3.8656068116501241e-01:3.4270620662261639e+00 + CVs 20 + -5.5664883629908257e-01 1.3277930612095329e-01 3.1757795910237185e-01 + -9.6972342129187084e-01 2.0399822428266190e-01 5.5744465845775015e-01 + -1.3629800813721542e+00 2.7480996085383680e-01 7.7570414496991735e-01 + -1.7821804880975778e+00 3.7290535304309558e-01 9.8791480024385148e-01 + -2.2270017576541128e+00 4.8821007569313779e-01 1.1974640128982639e+00 + -2.6951410024174680e+00 6.0837891024284629e-01 1.4137270056705251e+00 + -3.1817541609437221e+00 7.1899633472787017e-01 1.6502559005773794e+00 + -3.6823586888510760e+00 7.9896799637318594e-01 1.9186466350676379e+00 + -4.1935953907944246e+00 8.1838531450423635e-01 2.2240123053493854e+00 + -4.7029673814662436e+00 7.4348530174863914e-01 2.5657717935593460e+00 + -5.1767551206612881e+00 5.4981245118028910e-01 2.9360732082444096e+00 + -5.5723493443418439e+00 2.3613523615108223e-01 3.3128514483403699e+00 + -5.8654920474447945e+00 -1.7962490986560509e-01 3.6644029911921021e+00 + -6.0515411790694866e+00 -6.7138866636407490e-01 3.9613559804859895e+00 + -6.1345544275347548e+00 -1.2089103855841783e+00 4.1840331303259166e+00 + -6.1203646871827502e+00 -1.7602520756163793e+00 4.3215281599600388e+00 + -6.0195402105863147e+00 -2.2895365186443475e+00 4.3663046237783387e+00 + -5.8547297697503575e+00 -2.7659277401846967e+00 4.3221455294451054e+00 + -5.6641293147534473e+00 -3.2154394598858120e+00 4.2317417106222033e+00 + id 13874 + loc 1.6290731728076935e-01 4.2717453092336655e-02 393 + blend 0.0000000000000000e+00 + interp 3.9478185939497551e-01:3.8903548285186051e-01:9.0474506916253583e-02:3.9477791157638159e-01:7.4412269221231686e-01:2.9230557348709757e-01:1.3683681958568070e+00:3.6301196621927695e-01:1.9642514473630301e+00:2.4875871280361678e-01:2.2999158698769597e+00:3.6668587082167925e-01:2.9415043480034360e+00:3.0623276941009003e-01:3.4542224793934500e+00 + CVs 20 + -1.2168485174356157e-01 3.3938866938410878e-01 3.3890772582848172e-01 + -2.6154485855603671e-01 6.9911948070718488e-01 6.6913956543308784e-01 + -4.2694539500984091e-01 1.0899871400004217e+00 9.6775806550093391e-01 + -6.3630311880463630e-01 1.5102530555192721e+00 1.2240974104762661e+00 + -9.0835265656386310e-01 1.9347619022337628e+00 1.4321134282824648e+00 + -1.2452384948738175e+00 2.3304959845499287e+00 1.5979966023115189e+00 + -1.6300866962861060e+00 2.6677952770489259e+00 1.7385366644293374e+00 + -2.0315972489737666e+00 2.9264134289540733e+00 1.8773913375299340e+00 + -2.4164910048961996e+00 3.1032212107778276e+00 2.0376633248176370e+00 + -2.7490182705316424e+00 3.2125839879533329e+00 2.2296638579067891e+00 + -3.0026030461366950e+00 3.2808840487037658e+00 2.4476744063394094e+00 + -3.1866203395971975e+00 3.3333173372628755e+00 2.6894995935736423e+00 + -3.3266359219320139e+00 3.3836745003455064e+00 2.9679619167952596e+00 + -3.4358693427698555e+00 3.4261576628343398e+00 3.2948644104809004e+00 + -3.5133883754886748e+00 3.4499241985710154e+00 3.6791456078811802e+00 + -3.5604466336894194e+00 3.4535822421071902e+00 4.1307735636800418e+00 + -3.6071247971926979e+00 3.4276233314213793e+00 4.6670513121014983e+00 + -3.6206528058086733e+00 3.2512345261574627e+00 5.2925428207782463e+00 + -3.4084837274084450e+00 2.9028487524176336e+00 5.7256979563957451e+00 + id 13875 + loc 2.5218394398689270e-01 6.1911672353744507e-01 382 + blend 0.0000000000000000e+00 + interp 4.1547965474823539e-01:4.1547549995168792e-01:4.4873408776329549e-01:3.1037204006948726e-01:1.0297703589499769e+00:3.0827591269571275e-01:1.9806493787350372e+00:3.1907116429164484e-01:2.8275943445021801e+00:3.5130132102644235e-01:3.2373641926210626e+00:3.1388076733835790e-01:3.9532047422734036e+00 + CVs 20 + 8.7715766988558441e-01 1.7127972467408201e-01 -4.9103845867457468e-01 + 1.4733607050968427e+00 2.0693748914910254e-01 -8.4094942968281761e-01 + 2.0048059825803368e+00 1.8390697159324765e-01 -1.1606000742277345e+00 + 2.5541729295545745e+00 1.2995184248112090e-01 -1.4886842753432767e+00 + 3.1057322898405579e+00 3.5299295690631727e-02 -1.8230314232348239e+00 + 3.6442472677362208e+00 -1.0480497584644599e-01 -2.1634835968012158e+00 + 4.1554238714445715e+00 -2.8899427952547518e-01 -2.5094692081824452e+00 + 4.6275446420174902e+00 -5.1315598547011310e-01 -2.8547533181991591e+00 + 5.0568044227339612e+00 -7.7475409526933969e-01 -3.1886660696619202e+00 + 5.4473676843917156e+00 -1.0745452155318629e+00 -3.5035442439791056e+00 + 5.8033381715814043e+00 -1.4147413271562264e+00 -3.7979368314409445e+00 + 6.1261185512019614e+00 -1.7962452062324665e+00 -4.0731094272420059e+00 + 6.4183332795718275e+00 -2.2196336774234942e+00 -4.3294691497658100e+00 + 6.6797487607678976e+00 -2.6900255175184951e+00 -4.5646769940635314e+00 + 6.8960954802096568e+00 -3.2132241615997277e+00 -4.7678650040631867e+00 + 7.0480972852176080e+00 -3.7739804467697704e+00 -4.9256253829134371e+00 + 7.1259244359607052e+00 -4.3379769416010392e+00 -5.0229234583852493e+00 + 7.1339491338664995e+00 -4.8708240551694644e+00 -5.0515509520884265e+00 + 7.0819172585636174e+00 -5.4054630791953544e+00 -5.0444505503254495e+00 + id 13876 + loc 4.3587002158164978e-01 8.3298110961914063e-01 373 + blend 0.0000000000000000e+00 + interp 3.8443969269512018e-01:3.3270646000777543e-01:4.0122851979152996e-03:3.8443584829819327e-01:8.7787032497000828e-01:3.3105696041449723e-01:1.4221714973878874e+00:3.4382399702228089e-01:2.6293350673431113e+00:3.6754240222227308e-01:3.2532049918776567e+00 + CVs 20 + -3.6974835825616881e-01 4.8202394852471353e-01 -2.4626436025128320e-01 + -6.5052126931241117e-01 9.5110979145260222e-01 -4.8724017982451739e-01 + -8.3576220903960519e-01 1.4013086297232877e+00 -7.4476726458271580e-01 + -9.3376301976800624e-01 1.8196289005594353e+00 -1.0307635372537356e+00 + -9.5608431019452733e-01 2.1869870392986681e+00 -1.3476238278559425e+00 + -9.2445851007854263e-01 2.4934799037419522e+00 -1.6971218131614316e+00 + -8.6417560567005869e-01 2.7365875957357773e+00 -2.0857299340556068e+00 + -7.9851164180458978e-01 2.9123910038590624e+00 -2.5200429161478337e+00 + -7.5008771110501005e-01 3.0098373768330773e+00 -2.9981596560488382e+00 + -7.3862112586948481e-01 3.0204226981442202e+00 -3.5065793692364853e+00 + -7.7958146551910390e-01 2.9529908239072489e+00 -4.0149674587746915e+00 + -8.8409393950932369e-01 2.8419384841307314e+00 -4.4757003477311157e+00 + -1.0568345954710727e+00 2.7132888632115413e+00 -4.8643631788503328e+00 + -1.3085099377836855e+00 2.5449292214842836e+00 -5.1838959960286246e+00 + -1.6548685056116630e+00 2.3084555001242810e+00 -5.4299466481385412e+00 + -2.0983303047215975e+00 2.0381551970437446e+00 -5.6124894721585834e+00 + -2.6085247072877538e+00 1.8451628629505836e+00 -5.8046043685678326e+00 + -3.1713650863648999e+00 1.7196116251592937e+00 -6.0378621962352588e+00 + -3.6049823010336559e+00 1.1240921894666849e+00 -5.7280298313828801e+00 + id 13877 + loc 5.1391685009002686e-01 3.7124863266944885e-01 412 + blend 0.0000000000000000e+00 + interp 4.3965449008022733e-01:4.2169262971673982e-01:6.6398442997381046e-01:3.8728991520763800e-01:1.0440953881170718e+00:3.6925109177658760e-01:2.0168238462725632e+00:4.3965009353532652e-01:2.9148997101807224e+00:3.9796047153341813e-01:3.2090247105891305e+00:2.7901578201276128e-01:3.9404142925176702e+00 + CVs 20 + -4.9297947519925084e-01 3.0533771695044287e-02 2.0545373536610778e-01 + -7.9509155376533724e-01 -8.4230410632490926e-03 3.8721999756947600e-01 + -1.0723058453662153e+00 -6.7336117237455528e-02 5.7174672011440308e-01 + -1.3825505903149273e+00 -1.1179801036865727e-01 7.5061863491642100e-01 + -1.7276983921380891e+00 -1.4379216422276364e-01 9.1573150094401545e-01 + -2.1076835038221251e+00 -1.6721674177251511e-01 1.0586655643195231e+00 + -2.5170982717827890e+00 -1.8561088058873121e-01 1.1688609808571717e+00 + -2.9454460394485960e+00 -2.0259748559289825e-01 1.2378818110810081e+00 + -3.3807478541884484e+00 -2.2256679228296083e-01 1.2634460184444474e+00 + -3.8097164516499840e+00 -2.4794142047948275e-01 1.2471569265188762e+00 + -4.2157102468678413e+00 -2.7651308319428547e-01 1.1922196014912698e+00 + -4.5916265060311163e+00 -3.1199543321652601e-01 1.1094445762358649e+00 + -4.9571780893914914e+00 -3.7806052137124890e-01 1.0214520829608489e+00 + -5.3351109972142696e+00 -5.0274767748322802e-01 9.5293044709443697e-01 + -5.7214222321857777e+00 -6.9123099986071312e-01 9.1607273314027726e-01 + -6.0954658874995520e+00 -9.3075158499440480e-01 9.1535788340037194e-01 + -6.4378476273275851e+00 -1.2039010565255008e+00 9.5597774729720464e-01 + -6.7349961708551387e+00 -1.4868316066689427e+00 1.0348783565740378e+00 + -6.9699707904654016e+00 -1.7054788261245046e+00 1.0951088569871656e+00 + id 13878 + loc 6.9722115993499756e-01 6.1640048027038574e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4519314852700139e-01:2.4655928198891167e-01:4.0867704567832319e-01:3.4518969659551613e-01:1.2295904027797981e+00:2.4748073366809525e-01:2.0718808335173846e+00:2.7085621220993933e-01:3.1866023949695967e+00 + CVs 20 + 1.6345857395911426e-01 3.7641936931213615e-01 -3.3694665646604433e-01 + 3.5716713945990708e-01 7.4241577244529844e-01 -6.5819842389727956e-01 + 5.7321003335050835e-01 1.0962011076430782e+00 -9.7255811645607482e-01 + 8.0574301954580874e-01 1.4310989888179668e+00 -1.2891380788708733e+00 + 1.0483835381724413e+00 1.7314755403477089e+00 -1.6193475928079879e+00 + 1.2967566905970556e+00 1.9733854327151839e+00 -1.9727622481055409e+00 + 1.5502698761601836e+00 2.1400821743725253e+00 -2.3482124397567321e+00 + 1.8090789557582125e+00 2.2210517507293197e+00 -2.7284773211826430e+00 + 2.0694900980686350e+00 2.2056538423938066e+00 -3.0903152420683746e+00 + 2.3249606474347528e+00 2.1012995301062563e+00 -3.4251807277197668e+00 + 2.5739985037959494e+00 1.9424734267559813e+00 -3.7459867849225796e+00 + 2.8162492178661971e+00 1.7657870297929477e+00 -4.0744366800692138e+00 + 3.0339909850468945e+00 1.5732161665487201e+00 -4.4317142641369696e+00 + 3.1878681870888186e+00 1.3346254302546403e+00 -4.8391518268713547e+00 + 3.2293648778406512e+00 1.0509155824373178e+00 -5.3039628425173042e+00 + 3.1195031826703641e+00 7.8442440241924682e-01 -5.8057670057180522e+00 + 2.8638995081271559e+00 5.9919482945891178e-01 -6.2836678647861515e+00 + 2.5497098286584952e+00 4.7132785593248361e-01 -6.6684077358763387e+00 + 2.3167373914398550e+00 2.8892502768205630e-01 -6.9516025804221542e+00 + id 13879 + loc 7.1195262670516968e-01 1.7990569770336151e-01 395 + blend 0.0000000000000000e+00 + interp 4.5580489750933445e-01:3.9760876849200250e-01:5.3630110033104672e-01:4.5580033946035936e-01:9.9999221937969540e-01:3.4172085515531825e-01:1.6544840607927458e+00:3.0570448632609876e-01:2.7451647161813373e+00:3.0338880178220368e-01:3.3344649248244620e+00:3.1605563085010607e-01:3.9999668675824855e+00 + CVs 20 + -3.7938691536063462e-01 2.9070014514090292e-01 3.7971077217300064e-01 + -7.1507293409335426e-01 5.0742301222402175e-01 6.9832768820860025e-01 + -1.0574913685865048e+00 6.8536267748922675e-01 9.8850891183621681e-01 + -1.4253126030090097e+00 8.3599420734161112e-01 1.2600750500140081e+00 + -1.8095168790730276e+00 9.5388395512556057e-01 1.5064052691794254e+00 + -2.1986738614993011e+00 1.0390131069606188e+00 1.7288114810729631e+00 + -2.5811464550522851e+00 1.0954430908818000e+00 1.9344290240845039e+00 + -2.9459866432360964e+00 1.1277448278770672e+00 2.1306040383226854e+00 + -3.2898833255120530e+00 1.1400561386450350e+00 2.3269508566790460e+00 + -3.6191317146189155e+00 1.1340357395698784e+00 2.5372545300302987e+00 + -3.9363435819019070e+00 1.1083365338155700e+00 2.7749581182343688e+00 + -4.2363995165051485e+00 1.0607357080747319e+00 3.0499398987842974e+00 + -4.5220842030847752e+00 9.8545159305627950e-01 3.3652170056924882e+00 + -4.8075099667859398e+00 8.7011914917306088e-01 3.7117969503714292e+00 + -5.1007824582688652e+00 7.0586056062584701e-01 4.0816354431295228e+00 + -5.3979049187868871e+00 4.9014076090099312e-01 4.4902272644838188e+00 + -5.6792742157987171e+00 2.0303817882130470e-01 4.9489213187526708e+00 + -5.8935864134588316e+00 -1.7065814732562323e-01 5.4243938015202655e+00 + -5.9527061312577176e+00 -5.2200988078963206e-01 5.8091539642436283e+00 + id 13880 + loc 6.7298740148544312e-01 4.5776432752609253e-01 402 + blend 0.0000000000000000e+00 + interp 4.7433177689935535e-01:3.6270076514516020e-01:1.6251380113569858e-02:3.3483006400067705e-01:5.7759004640994960e-01:3.9805042296911824e-01:9.9946842715519058e-01:2.5186602513676931e-01:1.5056064068410526e+00:3.6222898825776073e-01:2.0074263825616874e+00:4.7432703358158640e-01:2.5404737043186585e+00:4.0645003381692113e-01:2.9978023414711199e+00:2.9368757833017356e-01:3.5054532842304496e+00 + CVs 20 + 1.4974585784867314e-01 3.4510024868015193e-01 1.6917054151325026e-01 + 2.9221779194404279e-01 7.1004644505225578e-01 3.7426833705758100e-01 + 4.1263975309819778e-01 1.0863477883000103e+00 6.1479148543823581e-01 + 5.4075015860061160e-01 1.4544571278760636e+00 8.8409536684332868e-01 + 7.2050826350876984e-01 1.7899836517496930e+00 1.1757901440819853e+00 + 9.7590985079121872e-01 2.0639515785233526e+00 1.4800257664097862e+00 + 1.3088160772766293e+00 2.2424026462983950e+00 1.7935537043102312e+00 + 1.6745943934761578e+00 2.2970623201201743e+00 2.1407422184806837e+00 + 2.0062582668184414e+00 2.2123762086138794e+00 2.5408924345592681e+00 + 2.2391251397234204e+00 1.9799285830771702e+00 2.9768456524553812e+00 + 2.3474079796268299e+00 1.6393237208966662e+00 3.4056779050847075e+00 + 2.4137925259709156e+00 1.2547055948917043e+00 3.8246403904747495e+00 + 2.5512731192626870e+00 8.7214808224855767e-01 4.2607096981328105e+00 + 2.8175686839172114e+00 5.6407059081957556e-01 4.7081308381623934e+00 + 3.1780616663176344e+00 3.9211676242259252e-01 5.1379445454589829e+00 + 3.5377631054421688e+00 3.3948190011636648e-01 5.5409897089515638e+00 + 3.8518430358084106e+00 3.4006155381016745e-01 5.9265625296865272e+00 + 4.1744974015898579e+00 3.3660199440762018e-01 6.3028488978357302e+00 + 4.6487104355845243e+00 2.6209672571113596e-01 6.6818021797033502e+00 + id 13881 + loc 2.0384867489337921e-01 9.7579783201217651e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6698111786766971e-01:2.8906768503968344e-01:1.0817709622377936e-02:2.7330117279353688e-01:8.6453587755268524e-01:3.8149158771773606e-01:1.4793466332397034e+00:3.2229650438575969e-01:2.0847669933706783e+00:4.6697644805649108e-01:2.7972540744230239e+00:3.0201334431457910e-01:3.3523329761652012e+00 + CVs 20 + 3.8519920110395324e-02 1.9553297551558224e-01 1.9989019573672495e-02 + 9.8095333952054192e-02 3.7126025866082846e-01 2.4895677068195343e-02 + 1.6089731958200229e-01 5.4016352342040908e-01 3.0310050374907305e-02 + 2.1758193686809285e-01 7.1071802511853666e-01 4.2910763812703034e-02 + 2.6659927283812995e-01 8.8644889205696498e-01 5.9239212078274095e-02 + 3.0593596065198997e-01 1.0718359016343486e+00 7.4429551197900012e-02 + 3.3216030262078106e-01 1.2691926292802305e+00 8.2812269596885035e-02 + 3.4077230699385852e-01 1.4765472501430010e+00 8.0939123769200427e-02 + 3.2704980864426048e-01 1.6915657495853647e+00 6.7704762955952846e-02 + 2.8489417754895113e-01 1.9162012908204722e+00 3.9075785483750791e-02 + 2.0507138879191511e-01 2.1523141293430532e+00 -1.4824663104150648e-02 + 7.8380719737057430e-02 2.3917136355683888e+00 -1.0355946194844257e-01 + -9.4028603059990931e-02 2.6153058399174984e+00 -2.2548595094456547e-01 + -2.9312455345260968e-01 2.8044669327879239e+00 -3.5838137152929028e-01 + -4.9489145520827282e-01 2.9561000310718324e+00 -4.7087165474934989e-01 + -7.0361313514470325e-01 3.0794231420578946e+00 -5.6114998899242252e-01 + -9.4007623805207519e-01 3.1732118781638583e+00 -6.4206580589238493e-01 + -1.2007930298771445e+00 3.2254891012831663e+00 -7.0420704489112040e-01 + -1.4069672245943889e+00 3.2453695513358385e+00 -7.0724181741204317e-01 + id 13882 + loc 2.5632134079933167e-01 1.0702168941497803e-01 407 + blend 0.0000000000000000e+00 + interp 4.7167183544230068e-01:3.0055750489706773e-01:5.6179298045072157e-02:2.9786494231506083e-01:1.0054387554047881e+00:4.1933289530993390e-01:1.8951059980820446e+00:2.6923344841662245e-01:2.8216834688446051e+00:4.7166711872394629e-01:3.5402333921925355e+00 + CVs 20 + 5.7540099417252230e-04 3.4017120348051766e-01 -3.2579224538486740e-01 + -1.0063828018748791e-04 5.3538152100371483e-01 -4.5003027146401847e-01 + 5.3226725891776516e-03 6.8169844584399408e-01 -5.0110277127924152e-01 + 1.8412940911154019e-02 8.1943364386363271e-01 -5.5436026051453879e-01 + 3.8858791316156188e-02 9.5107440219155515e-01 -6.0834623103504182e-01 + 6.9106144176843548e-02 1.0804035493813278e+00 -6.6369852569606358e-01 + 1.1665154606757044e-01 1.2087355909634885e+00 -7.2156578828414708e-01 + 1.9169684328121228e-01 1.3311443668708987e+00 -7.8027227683889233e-01 + 3.0084481680586644e-01 1.4381606787024164e+00 -8.3489441023699373e-01 + 4.4522760539098677e-01 1.5217846384272509e+00 -8.8009505814959499e-01 + 6.2357201331780510e-01 1.5787547764466279e+00 -9.1309139341748535e-01 + 8.3447720246564971e-01 1.6090550518210285e+00 -9.3431680064805867e-01 + 1.0757656665870239e+00 1.6106855693426603e+00 -9.4337588334075662e-01 + 1.3413384896014069e+00 1.5752203943864420e+00 -9.3472466008601862e-01 + 1.6244571750052537e+00 1.4963539208774048e+00 -9.0381845425418383e-01 + 1.9272984639639237e+00 1.3826175585631792e+00 -8.5849629581109943e-01 + 2.2565355903456559e+00 1.2530551749443628e+00 -8.1660009325273375e-01 + 2.6071488734069668e+00 1.1255563225605041e+00 -7.9430902682430182e-01 + 2.9279298951973214e+00 1.0565303070024481e+00 -8.1331417738896428e-01 + id 13883 + loc 1.3492755591869354e-01 4.2156592011451721e-02 374 + blend 0.0000000000000000e+00 + interp 4.0245600658304992e-01:3.4828959654107539e-01:6.2520578496406687e-02:4.0245198202298410e-01:9.9862837198125176e-01:2.7238444191524114e-01:1.9486460910029182e+00:2.4973658420662634e-01:2.3658077106517204e+00:3.6903353218622986e-01:3.0068507662318393e+00:2.7580120537290670e-01:3.7011613351420980e+00 + CVs 20 + -3.0358098697650626e-01 4.9180462928808483e-01 7.6890805617167923e-01 + -4.2844296146250443e-01 7.9660505111569313e-01 1.4170068016945450e+00 + -4.1883567571257618e-01 9.4451546783607265e-01 2.0472524150790856e+00 + -3.4492184595480635e-01 1.0265963137747298e+00 2.6863571988745951e+00 + -2.7617596643256781e-01 1.1182368254997124e+00 3.3269156818249752e+00 + -2.7723711658038641e-01 1.2424645907424325e+00 3.9759489493660904e+00 + -4.0093452134381691e-01 1.3928036875423135e+00 4.6278908358287012e+00 + -6.8487964760123843e-01 1.5582234823326038e+00 5.2462381993880340e+00 + -1.1409057725874749e+00 1.7251607413644137e+00 5.7822776730269965e+00 + -1.7600535105851218e+00 1.8675253454729526e+00 6.2087180443159014e+00 + -2.5252297724566817e+00 1.9413244676942527e+00 6.5219812694803379e+00 + -3.4024082336179644e+00 1.8855536644283628e+00 6.7155475215383094e+00 + -4.3147783809269731e+00 1.6482808401909295e+00 6.7602396852013955e+00 + -5.1442123242542168e+00 1.2407876783169760e+00 6.6200790260185682e+00 + -5.7999024287035130e+00 7.1708076992837277e-01 6.3066229873694040e+00 + -6.2940657274383334e+00 6.5657022519882702e-03 5.9170324695638472e+00 + -6.5931425997613156e+00 -1.1603552869620737e+00 5.6063033267151008e+00 + -6.4574394285180938e+00 -2.6199065898819636e+00 5.5846154733616364e+00 + -6.4647853139877753e+00 -3.1342158342402380e+00 5.5405558261151047e+00 + id 13884 + loc 1.4676295220851898e-01 6.6108739376068115e-01 409 + blend 0.0000000000000000e+00 + interp 2.7828573426702297e-01:2.5502316147241566e-01:6.9347562099341076e-01:2.7807610032881647e-01:1.7915878402918430e+00:2.6462684397211972e-01:2.7347315369158984e+00:2.7828295140968029e-01:3.7304121791307661e+00 + CVs 20 + 5.8416893735296316e-01 1.7480663267274049e-01 -3.1277454307693553e-01 + 1.0819035980002560e+00 2.9209394802770239e-01 -6.0254075199428303e-01 + 1.5700495700995512e+00 4.0055767302550427e-01 -8.9448785061268177e-01 + 2.0503987668475476e+00 4.9949879471730296e-01 -1.2136040179961292e+00 + 2.4862894200235344e+00 5.6542583940713964e-01 -1.5803173498426095e+00 + 2.8515858853377445e+00 5.8122443955436798e-01 -2.0045350448606150e+00 + 3.1434593873179795e+00 5.3522239515711179e-01 -2.4820425575800416e+00 + 3.3860172756539817e+00 4.1068046177984496e-01 -3.0031000186048793e+00 + 3.6059062902370456e+00 1.7612318309289288e-01 -3.5504180441271838e+00 + 3.8068014466189424e+00 -2.0663650389432076e-01 -4.0820789266862887e+00 + 3.9740650394786590e+00 -7.3649834259770119e-01 -4.5510850299865790e+00 + 4.1002825548413950e+00 -1.3273554946510810e+00 -4.9792453942761092e+00 + 4.1968433735095214e+00 -1.8656630756011434e+00 -5.4525854939654037e+00 + 4.2789942936246614e+00 -2.2772297023811339e+00 -6.0123488230332960e+00 + 4.3634025884714118e+00 -2.5699439488969547e+00 -6.6047512208651726e+00 + 4.4860487502704398e+00 -2.8617986925695624e+00 -7.1717684095768846e+00 + 4.6894840527823600e+00 -3.2850196367236326e+00 -7.6900789287609719e+00 + 4.9618304504685256e+00 -3.8492113373198746e+00 -8.1216754633123767e+00 + 5.1469942175064176e+00 -4.4415904582303067e+00 -8.4048451498231014e+00 + id 13885 + loc 1.3373845815658569e-01 9.5685482025146484e-01 379 + blend 0.0000000000000000e+00 + interp 3.8180209856599567e-01:3.6141958810623631e-01:4.8473915912601262e-01:2.9159112520672531e-01:1.3232310846075384e+00:1.5901988311811618e-01:2.0776750817839278e+00:3.8179828054501003e-01:3.0218008241571837e+00:2.2093098046630505e-01:3.9646487579714842e+00 + CVs 20 + -3.8312184437766558e-02 4.3096179957153108e-01 2.7734183254202371e-01 + -4.4913201962671873e-02 7.8700602979054379e-01 6.0820140634658593e-01 + -1.7581597602885968e-02 1.0353314352446945e+00 9.9224375092222716e-01 + 4.1768648334741365e-02 1.2169647117051352e+00 1.3817834799861095e+00 + 1.2166014044455598e-01 1.3961224368334757e+00 1.7449687088105794e+00 + 1.9890418663899201e-01 1.6111316625377006e+00 2.0832113205041036e+00 + 2.4239289233748640e-01 1.8662557667081605e+00 2.3849794487996325e+00 + 2.3786391411249297e-01 2.1459000589963950e+00 2.6247744803839521e+00 + 1.9357141749442230e-01 2.4516545321775207e+00 2.8042016957259510e+00 + 1.0427576075240541e-01 2.7901533727454226e+00 2.9207867612375580e+00 + -3.8146675689071596e-02 3.1753716115425132e+00 2.9803975700992771e+00 + -2.5105502828592530e-01 3.6304588469615644e+00 3.0103719807572977e+00 + -5.7512586257866893e-01 4.1368810066142832e+00 3.0380962787921302e+00 + -1.0381797090610108e+00 4.6090461743983235e+00 3.0749407798588986e+00 + -1.6717254930615493e+00 4.9549022387168860e+00 3.0290435314958222e+00 + -2.4875307128684012e+00 5.0041726952346082e+00 2.6337806115856806e+00 + -3.4267574294039491e+00 4.4560275643721328e+00 1.8903194649110573e+00 + -4.0418190931748601e+00 3.4947320783073281e+00 1.5256809303418830e+00 + -4.0140960509606920e+00 3.0623004202924315e+00 1.7622725462607831e+00 + id 13886 + loc 8.7997518479824066e-02 4.2721047997474670e-01 378 + blend 0.0000000000000000e+00 + interp 4.7665245688426561e-01:4.3647052203885656e-01:1.2707384297427993e-01:4.7664769035969679e-01:9.9426563102588905e-01:4.5410574057498038e-01:1.5061437317536976e+00:2.3843502840710121e-01:1.9999297869273676e+00:2.6673848795072941e-01:2.5601646354072352e+00:4.2710867147200282e-01:3.2647083028306199e+00:4.2752700495197404e-01:3.8791077331486057e+00 + CVs 20 + 2.3030573307686653e-01 3.8301515390612223e-01 -3.3179538148663268e-01 + 4.2942310427762453e-01 7.0826136841592480e-01 -6.0773759218556800e-01 + 6.3890146048459040e-01 1.0016450632595233e+00 -8.7378708508083702e-01 + 8.8061492251807238e-01 1.2792422222042310e+00 -1.1431428194852586e+00 + 1.1583826276525941e+00 1.5466545355797627e+00 -1.4080026716661145e+00 + 1.4803087212275532e+00 1.8051253405048533e+00 -1.6690605818474864e+00 + 1.8490212413296021e+00 2.0403578150622455e+00 -1.9307711787634054e+00 + 2.2596112160948461e+00 2.2330132123871818e+00 -2.1933625963984085e+00 + 2.7123344149996162e+00 2.3687964332113158e+00 -2.4552521216468985e+00 + 3.2137750585518301e+00 2.4338451435310477e+00 -2.7158748154231835e+00 + 3.7584928656004140e+00 2.4112221823636251e+00 -2.9721851148350296e+00 + 4.3183311389366290e+00 2.2921279263353762e+00 -3.2265306583921203e+00 + 4.8516476472026326e+00 2.0696548577044305e+00 -3.4747856303163167e+00 + 5.2976939631589541e+00 1.7529986200945697e+00 -3.6891570432526275e+00 + 5.6128114639970921e+00 1.3883118046218823e+00 -3.8572167299964137e+00 + 5.8331611394813851e+00 9.9483110870711000e-01 -4.0078504797572831e+00 + 6.0423755575909333e+00 5.5788924030146125e-01 -4.1862652686250099e+00 + 6.2632176566170745e+00 1.1501604830128542e-01 -4.4508019158340257e+00 + 6.3681218944434708e+00 -1.5625930985815506e-01 -4.8406772065646901e+00 + id 13887 + loc 6.6067969799041748e-01 5.6894850730895996e-01 399 + blend 0.0000000000000000e+00 + interp 4.3880491729828502e-01:4.3880052924911206e-01:2.5088614840995227e-01:2.7845547491964229e-01:1.0038363766002740e+00:4.1185284067037081e-01:1.4968535661197493e+00:3.5301075227477574e-01:2.2597655683769853e+00:4.1077554910198705e-01:3.0029825996757076e+00:3.0796599160952515e-01:3.9164210963307959e+00 + CVs 20 + -1.1544420333491512e-01 2.7052930108291862e-01 -1.7671452752517794e-01 + -2.6545386953713557e-01 5.3277642523565527e-01 -3.4333386855614745e-01 + -4.2599647177931621e-01 7.8773262958203394e-01 -5.3604280652100611e-01 + -5.8085158158547257e-01 1.0269266519711424e+00 -7.6634795646531839e-01 + -7.3031652455078910e-01 1.2489668577803266e+00 -1.0289967762989434e+00 + -8.7515317187919650e-01 1.4566945627671484e+00 -1.3173652732038041e+00 + -1.0137607902637553e+00 1.6513679689059650e+00 -1.6259678662830463e+00 + -1.1450285756168463e+00 1.8307924266021662e+00 -1.9498801125680303e+00 + -1.2740352365072094e+00 1.9884072276948177e+00 -2.2890960191001462e+00 + -1.4108878268244707e+00 2.1067323072109438e+00 -2.6491888357319238e+00 + -1.5593006410086399e+00 2.1497454525584949e+00 -3.0233024280636775e+00 + -1.7119732063055346e+00 2.0843255486678092e+00 -3.3795459926170608e+00 + -1.8623121390612007e+00 1.9152590820429292e+00 -3.6903775595129513e+00 + -2.0103572318346883e+00 1.6775299445962228e+00 -3.9557205256183510e+00 + -2.1593391227853211e+00 1.4168368069132073e+00 -4.2035547241426068e+00 + -2.3118347843033860e+00 1.1728666755017736e+00 -4.4903408846090711e+00 + -2.4319157462392287e+00 9.8945778781504801e-01 -4.8711862305264022e+00 + -2.4383490320363408e+00 9.2009370132290957e-01 -5.3140796840536408e+00 + -2.3746617403088526e+00 9.1325456624814794e-01 -5.7215373260767270e+00 + id 13888 + loc 6.6347211599349976e-01 6.0127967596054077e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8020895192963864e-01:4.3930254176843897e-01:2.0946180647004442e-01:4.8020414984011939e-01:7.5756732715552044e-01:3.3006947139907777e-01:1.0304959859036102e+00:2.9770671077927430e-01:2.0064267632602482e+00:3.9466568775629618e-01:2.7789213388412759e+00:3.7379264387545463e-01:3.0334784081663084e+00:3.2282273379034715e-01:3.6957339656505508e+00 + CVs 20 + 5.3388867366802886e-02 2.8016273541002934e-01 -9.3792177299750853e-02 + 9.4406727865763318e-02 5.6796780418326975e-01 -1.7741949035193677e-01 + 1.4269612530970915e-01 8.6736024254136723e-01 -2.5267440917009598e-01 + 2.3918376643307221e-01 1.1756138366075275e+00 -3.2102300556448832e-01 + 4.0849761581474886e-01 1.4517283317182932e+00 -3.7075195510579234e-01 + 6.1368006863406244e-01 1.6599801770447113e+00 -3.9678470725115961e-01 + 8.0360171193161534e-01 1.8066754533285145e+00 -4.1240806387164269e-01 + 9.5912467268591839e-01 1.9127497242495053e+00 -4.3019191720004057e-01 + 1.0937663818881465e+00 1.9850736638732080e+00 -4.4160801885420714e-01 + 1.2287222928574799e+00 2.0733557060085093e+00 -4.4166392359763296e-01 + 1.2645287817498709e+00 2.2849708019411099e+00 -4.8931759733864993e-01 + 1.1099736103994640e+00 2.5529442601778269e+00 -6.5245082416266098e-01 + 8.7722817371273443e-01 2.7104432579586852e+00 -9.2690808078079012e-01 + 6.8276820273024275e-01 2.6879211988774507e+00 -1.2338366646544845e+00 + 5.4234372802594577e-01 2.5071035030634703e+00 -1.5404865931315055e+00 + 4.8002488976421365e-01 2.2216801945713818e+00 -1.8232864156794437e+00 + 5.1261450608235981e-01 1.8963176037665745e+00 -2.0532769082637969e+00 + 6.3256366370368533e-01 1.5823282935931202e+00 -2.1965356000096832e+00 + 8.4984047761975134e-01 1.2800827600196985e+00 -2.1918186556348975e+00 + id 13889 + loc 2.4373470246791840e-01 3.5446795821189880e-01 400 + blend 0.0000000000000000e+00 + interp 4.9851789521704359e-01:4.0114311008518116e-01:4.8406882556998876e-01:4.6889401485802712e-01:1.1068434188554985e+00:3.8628629864528158e-01:1.9780260900024129e+00:4.9851291003809145e-01:2.6978480239445854e+00:3.9700608208453364e-01:3.0371760007760926e+00:3.9319166057610000e-01:3.7784689187263085e+00 + CVs 20 + -1.3772633708381385e-01 2.0577939627312453e-01 3.1570717677132593e-01 + -2.9309923909896723e-01 3.9647644610017152e-01 6.0182673935618869e-01 + -4.7133903724566545e-01 5.6754609150748203e-01 8.7406251956415737e-01 + -6.7113066400907728e-01 7.1225218728246165e-01 1.1393335506874105e+00 + -8.8341716470110043e-01 8.2470222508920754e-01 1.3938019899490333e+00 + -1.0960327949078972e+00 9.0354256751229789e-01 1.6364679044058879e+00 + -1.2974418203675919e+00 9.5271044148617334e-01 1.8697839128539258e+00 + -1.4801800816957027e+00 9.8018995619897142e-01 2.0990620174483081e+00 + -1.6450406833131679e+00 9.9556730806672200e-01 2.3317603341906969e+00 + -1.8013884505282067e+00 1.0070621470820755e+00 2.5745977569527865e+00 + -1.9617293148405004e+00 1.0184299183066683e+00 2.8242408259414744e+00 + -2.1305111222449966e+00 1.0296276930654114e+00 3.0605498249861847e+00 + -2.2924290834905818e+00 1.0493513605581644e+00 3.2597658063923611e+00 + -2.4245534905970691e+00 1.1045388468931834e+00 3.4106681930307099e+00 + -2.5306929519238066e+00 1.2113552308628774e+00 3.5091700934516705e+00 + -2.6437162292882448e+00 1.3277266902652014e+00 3.5590617890038621e+00 + -2.7786202325736200e+00 1.3840744027133305e+00 3.5813909782032001e+00 + -2.9258039313101940e+00 1.3512968727245187e+00 3.6260302079833591e+00 + -3.0737328834727222e+00 1.1018537443962726e+00 3.9470648317318777e+00 + id 13890 + loc 5.5553231388330460e-02 4.8319739103317261e-01 415 + blend 0.0000000000000000e+00 + interp 3.8963427454901883e-01:2.8123103639933023e-01:1.9908495107859037e-01:3.5812042511627828e-01:9.5037568188268706e-01:3.3939571498971716e-01:1.8061277453812898e+00:3.8963037820627339e-01:2.0734440100277425e+00:2.6378019341188552e-01:2.8711814126575783e+00:3.6912097248977799e-01:3.6275401295023939e+00 + CVs 20 + -6.3792370275222568e-02 2.1600049300082896e-01 -5.5687697510578851e-02 + -1.6386304183600978e-01 3.9061211271156437e-01 -4.0227720350055535e-02 + -2.9031836479974826e-01 5.6822343678479814e-01 -2.8687717229397176e-02 + -4.1598096319453337e-01 7.5221503865571360e-01 -4.8430251002723940e-02 + -5.3508700548329324e-01 9.4223636775510677e-01 -1.0412089132735992e-01 + -6.4075988148663288e-01 1.1381175648814068e+00 -2.0019929570506179e-01 + -7.2526367749675202e-01 1.3375483992825510e+00 -3.3941221519488374e-01 + -7.8099978216586941e-01 1.5348030017954357e+00 -5.2058352752137538e-01 + -8.0155871329480799e-01 1.7230365698722336e+00 -7.3856305091367935e-01 + -7.8005349685411474e-01 1.8981465016818382e+00 -9.8422778590934556e-01 + -7.1120734384017681e-01 2.0551281480241883e+00 -1.2429713423102098e+00 + -6.0167000065473419e-01 2.1803322347081187e+00 -1.4975120135264313e+00 + -4.6899164695633933e-01 2.2594088623482573e+00 -1.7373823541994939e+00 + -3.2837166817092900e-01 2.2890956343071522e+00 -1.9569715965603973e+00 + -1.8915322180917804e-01 2.2768251023571779e+00 -2.1462767761978445e+00 + -5.8812257044588367e-02 2.2326255813954541e+00 -2.2970531304698190e+00 + 5.9612223234817074e-02 2.1620089313825761e+00 -2.4202429398059770e+00 + 1.6743178015328564e-01 2.0647231064488785e+00 -2.5417233345094257e+00 + 2.0482801557932628e-01 1.9032382419599871e+00 -2.6304164889941548e+00 + id 13891 + loc 9.2374372482299805e-01 7.6666504144668579e-02 382 + blend 0.0000000000000000e+00 + interp 6.2437312926362354e-01:1.9780891404176704e-01:1.0592832761817184e+00:4.2194810308458391e-01:2.0005226006312133e+00:6.2436688553233088e-01:2.3848325400025687e+00:4.9518545260102087e-01:3.0024654425542137e+00:2.8511890395450767e-01:3.2238984994076798e+00:3.0522116104535041e-01:3.9986175985624950e+00 + CVs 20 + -7.2942489985766423e-01 1.1977660667862716e-01 5.4169449193015240e-01 + -1.1699380944274671e+00 1.3644798721953116e-01 9.2605760577795071e-01 + -1.5302207145808102e+00 1.2822022580647591e-01 1.2856627969879966e+00 + -1.8853517124277548e+00 1.3092561327758467e-01 1.6653652553693989e+00 + -2.2439802380525973e+00 1.4003702431628795e-01 2.0676522709070788e+00 + -2.6145877131760766e+00 1.4842702444112621e-01 2.4901920447326744e+00 + -3.0008399685876137e+00 1.3867034110041931e-01 2.9316449528424515e+00 + -3.4015223624021189e+00 8.3785611870166088e-02 3.3807166715264425e+00 + -3.8079094612003188e+00 -3.5920575798260579e-02 3.8071352991959242e+00 + -4.2025305889041826e+00 -2.1230410435678060e-01 4.1860806955346099e+00 + -4.5692496635890176e+00 -4.2379924678559511e-01 4.5219371782643156e+00 + -4.9136066894956310e+00 -6.7243685730532410e-01 4.8329158284333689e+00 + -5.2533370595401623e+00 -1.0044279684026627e+00 5.1148073822527298e+00 + -5.5621595206272270e+00 -1.4937176084050234e+00 5.3483949369934134e+00 + -5.8304754980752538e+00 -2.1475159631825926e+00 5.5363176094009070e+00 + -6.1123782692190201e+00 -2.8767436087655800e+00 5.7034042033173851e+00 + -6.4494903991503838e+00 -3.5640825364992570e+00 5.8842240076225840e+00 + -6.8286084811709760e+00 -4.1696465438884278e+00 6.1280034715318976e+00 + -7.2368573838137449e+00 -4.7649869964889238e+00 6.4573010358738321e+00 + id 13892 + loc 1.9209544360637665e-01 3.5844472050666809e-01 403 + blend 0.0000000000000000e+00 + interp 4.4408350432084381e-01:3.7097248651446652e-01:1.9099722032422983e-01:2.7646989020278012e-01:8.9127872755372706e-01:3.9583292981426776e-01:1.6557439444222060e+00:3.3379580499095662e-01:2.0931429564404587e+00:3.6299078295576798e-01:2.7809710246745696e+00:2.8394324957949341e-01:3.0997988965206811e+00:4.4407906348580062e-01:3.9663783399063570e+00 + CVs 20 + -1.9252003933045289e-01 5.6370968743632517e-02 1.2444674288025442e-01 + -3.5520414521676480e-01 1.0580431013565347e-01 2.5400680742937276e-01 + -4.9071211029260242e-01 1.5363493897277408e-01 3.8186765172411474e-01 + -5.9944990326439018e-01 1.9776805258600519e-01 4.9178751253751096e-01 + -6.8086503210367255e-01 2.3541200739072513e-01 5.6790099308995501e-01 + -7.4123953990359970e-01 2.6927290928970288e-01 5.9206556618110917e-01 + -7.9346978738952112e-01 3.1279365262014330e-01 5.5511290738286878e-01 + -8.5596203693994755e-01 3.8722777833192745e-01 4.6228605348257368e-01 + -9.5021286299605401e-01 5.1290790824939392e-01 3.3506331631459008e-01 + -1.0908649247897921e+00 6.9712634669596263e-01 2.1765965281440347e-01 + -1.2699721394891728e+00 9.2882020073972460e-01 1.6021478692259461e-01 + -1.4480707973485631e+00 1.1839714147396292e+00 1.9757023887712177e-01 + -1.5686361566899039e+00 1.4282768721367234e+00 3.3918601449961905e-01 + -1.6161361422941400e+00 1.6431951559985500e+00 5.6763177396063680e-01 + -1.6140279754941975e+00 1.8229095869951544e+00 8.6544475423549794e-01 + -1.5604942713231125e+00 1.9293967066776840e+00 1.2077971932269782e+00 + -1.4223845256553069e+00 1.8854932849080903e+00 1.5267092009339338e+00 + -1.2064946367430622e+00 1.6698972922853348e+00 1.7737524953914061e+00 + -1.1737826559453159e+00 1.6393543246525999e+00 2.1173087375623063e+00 + id 13893 + loc 2.2124892473220825e-01 2.4175388738512993e-02 412 + blend 0.0000000000000000e+00 + interp 4.4207832550429216e-01:4.4207390472103714e-01:1.6545334810477341e-01:3.4125331677304588e-01:9.6497539711928670e-01:4.1802650158333621e-01:1.7164143195011259e+00:3.4152212366438417e-01:2.2042344428968761e+00:4.2915507079426218e-01:2.9139699783736899e+00:2.6576663990211075e-01:3.7274014390026005e+00 + CVs 20 + -6.0423900257016216e-02 9.8552401721491045e-02 -5.4054497210276997e-01 + -1.0281120942182984e-01 1.1380396195301223e-01 -9.4980401622633748e-01 + -1.1530836477071552e-01 1.0236975518207453e-01 -1.3122890087345913e+00 + -1.0085138625435661e-01 7.9783238919380217e-02 -1.6612890178095108e+00 + -6.1221255184528200e-02 4.2669924284677418e-02 -1.9876751409846931e+00 + 6.6621263601762681e-04 -1.0081815110838055e-02 -2.2831030575507039e+00 + 7.9504700920793037e-02 -7.7156442750565324e-02 -2.5448061605155847e+00 + 1.6889502931895586e-01 -1.5628786188549038e-01 -2.7757201408745922e+00 + 2.6340238538858762e-01 -2.4495645833932556e-01 -2.9794076639478808e+00 + 3.5961075869292769e-01 -3.4040846309199368e-01 -3.1598584542123187e+00 + 4.5880729549176130e-01 -4.4062611579073541e-01 -3.3292086752839278e+00 + 5.6536878368606247e-01 -5.4875279781620145e-01 -3.5097305460948207e+00 + 6.6844211861370195e-01 -6.7758926711850531e-01 -3.7149395035585382e+00 + 7.4013616039527275e-01 -8.3720494068871609e-01 -3.9334379795375187e+00 + 7.6670369418596340e-01 -1.0223489567457820e+00 -4.1474306444878835e+00 + 7.5259958595057030e-01 -1.2242139020585128e+00 -4.3508161541481982e+00 + 7.0191081020920787e-01 -1.4387727367905512e+00 -4.5430833337512233e+00 + 6.1539229166120812e-01 -1.6575568183597293e+00 -4.7166647173269389e+00 + 4.9551754770762269e-01 -1.8610965630469769e+00 -4.8506951891212866e+00 + id 13894 + loc 2.2831071913242340e-01 5.8433401584625244e-01 380 + blend 0.0000000000000000e+00 + interp 5.0221201304156282e-01:3.0246713008654480e-01:5.6818545873750859e-01:4.9002074650390698e-01:9.8880444007152546e-01:5.0220699092143239e-01:1.2897246637445030e+00:3.8019746849988278e-01:1.9383439598363208e+00:3.1200092482687963e-01:2.4555699149528776e+00:3.2684364063599480e-01:3.4616209473222179e+00:4.2893429502100905e-01:3.9993084599547228e+00 + CVs 20 + -4.4756958001600566e-01 2.7784479448020938e-01 -4.2643955753881363e-01 + -8.4405767421721023e-01 4.6457658855928419e-01 -7.6866196172448698e-01 + -1.2249381195711746e+00 6.0965269161471891e-01 -1.1060661108498036e+00 + -1.6024476254149340e+00 7.4256785565423877e-01 -1.4793157020722656e+00 + -1.9613291499095116e+00 8.6525074352852849e-01 -1.8864169047411614e+00 + -2.2912400027641944e+00 9.7028288526900408e-01 -2.3166123060192607e+00 + -2.5853246090936377e+00 1.0558901715748417e+00 -2.7595641086504057e+00 + -2.8406817203822694e+00 1.1280111773716355e+00 -3.2071065799117973e+00 + -3.0651130403580686e+00 1.1949287344181063e+00 -3.6570771824394717e+00 + -3.2776707017131681e+00 1.2579344424377952e+00 -4.1150505258016281e+00 + -3.4993171595542427e+00 1.3042961569246816e+00 -4.5884006424994137e+00 + -3.7463409937481487e+00 1.3063779604266470e+00 -5.0829474635521521e+00 + -4.0227453797472004e+00 1.2270484564596305e+00 -5.5946404688784082e+00 + -4.3034256768388870e+00 1.0599289354457833e+00 -6.0776878337954230e+00 + -4.5489308427622053e+00 8.7028202467586446e-01 -6.4565411999588953e+00 + -4.7369500634845494e+00 7.1790374881905850e-01 -6.7031467256611235e+00 + -4.8513476243441342e+00 5.9630357623966557e-01 -6.8594203541185230e+00 + -4.9056692382757934e+00 4.7785385710475214e-01 -6.9909444411746327e+00 + -5.1873492483938533e+00 3.7549614864273462e-01 -7.0859275433459734e+00 + id 13895 + loc 8.1092739105224609e-01 7.7454710006713867e-01 1078 + blend 0.0000000000000000e+00 + interp 2.8246513388063615e-01:2.8246230922929738e-01:9.8556968829012881e-01:2.6655209082254394e-01:2.0456955262563752e+00:2.7083212159669945e-01:3.0114374740250112e+00:2.7670581665227439e-01:3.9997030204407586e+00 + CVs 20 + 1.1063905974566809e-01 2.7022598860919422e-01 -8.5452691151813365e-02 + 2.6036470916377913e-01 5.4640548119507559e-01 -1.6953306914917052e-01 + 4.3625847714783056e-01 8.2076778199458666e-01 -2.7057246406758217e-01 + 6.3069521670087636e-01 1.0877273509908170e+00 -4.0290968739745026e-01 + 8.4004673941626773e-01 1.3420088097347640e+00 -5.7807777597674148e-01 + 1.0564937932128493e+00 1.5756715406684156e+00 -8.0863299678101153e-01 + 1.2662245345892993e+00 1.7763804838774522e+00 -1.1074099507438084e+00 + 1.4481533743078816e+00 1.9259634892419131e+00 -1.4836290778359333e+00 + 1.5748673011675800e+00 2.0010223288907416e+00 -1.9334084690114364e+00 + 1.6226439367113263e+00 1.9818045875209476e+00 -2.4310423941641699e+00 + 1.5871406244735973e+00 1.8632191185063172e+00 -2.9330040080128934e+00 + 1.4965242379218395e+00 1.6605822207236185e+00 -3.3929639361498642e+00 + 1.3973788842303441e+00 1.4007208170961745e+00 -3.7892280521492920e+00 + 1.3205686698869696e+00 1.1014973949665694e+00 -4.1266005054499990e+00 + 1.2815945465430842e+00 7.7951489996409662e-01 -4.4142522235493296e+00 + 1.3067350307445007e+00 4.8664122903868878e-01 -4.6590078648796052e+00 + 1.4301604319110497e+00 3.0552907430289467e-01 -4.8627046789450112e+00 + 1.6259687260425963e+00 2.2780406262439001e-01 -5.0279036663561980e+00 + 1.7339551834607414e+00 -3.6767576461293583e-02 -5.3248551519918452e+00 + id 13896 + loc 5.8904290199279785e-01 1.6023756563663483e-01 373 + blend 0.0000000000000000e+00 + interp 3.0578904473695245e-01:2.6760479361175099e-01:4.8632516197578368e-01:2.1818030941655478e-01:1.1260662630731022e+00:2.6650684872291813e-01:1.9894960986422872e+00:3.0578598684650510e-01:2.6478902397965718e+00:2.6163005526210559e-01:3.4331631772523350e+00 + CVs 20 + 3.4278175522600030e-01 4.7236580815547813e-01 1.7700976001311791e-03 + 7.0765936504422988e-01 8.8622518128413230e-01 2.6942200784853987e-02 + 1.0606688879012798e+00 1.2009088543914399e+00 5.8421197771270111e-02 + 1.3608788945051109e+00 1.4237302503676867e+00 4.7666083509141033e-02 + 1.6193079141097051e+00 1.5793272452534715e+00 -1.7759929346097825e-02 + 1.8920166298066974e+00 1.7216962823719466e+00 -9.6650461752576911e-02 + 2.2142597372861119e+00 1.9056733285959968e+00 -1.5254077334562688e-01 + 2.5744104856297052e+00 2.1628561763606182e+00 -1.5604957895051752e-01 + 2.9316306286533185e+00 2.4916855734056758e+00 -8.7036964417984808e-02 + 3.2513855890432235e+00 2.8592159563568065e+00 5.9133034321226075e-02 + 3.5233079529410833e+00 3.2234805791973566e+00 2.8345291737505590e-01 + 3.7470746121366338e+00 3.5444995886039070e+00 6.0149338732610769e-01 + 3.9137972820805604e+00 3.7643483799305431e+00 1.0256374041117478e+00 + 4.0097772794889819e+00 3.8064341812912970e+00 1.5218651321546024e+00 + 4.0494922413437857e+00 3.6410661276277465e+00 1.9721840005842748e+00 + 4.1169476137600505e+00 3.4076238025744967e+00 2.2554775886328740e+00 + 4.2490659557283319e+00 3.2283900904761214e+00 2.4151816556507888e+00 + 4.4412032330945994e+00 3.0208282377190177e+00 2.5559316650080008e+00 + 4.7417044384489602e+00 2.6377913409353706e+00 2.7310518842883695e+00 + id 13897 + loc 8.4033626317977905e-01 7.3982632160186768e-01 401 + blend 0.0000000000000000e+00 + interp 4.7236447948133692e-01:3.3089945164689255e-01:3.7780741650805916e-02:2.6340492117845415e-01:7.7174602564700179e-01:4.6055888095755299e-01:1.0113838905233845e+00:4.7235975583654211e-01:1.6205925901108387e+00:3.8815309437019241e-01:2.0439479953034834e+00:3.0549557137679223e-01:2.7200616853195658e+00:3.1665840776700976e-01:3.5724635054811902e+00 + CVs 20 + -1.6720854467664376e-01 2.9711419678918100e-01 -1.4217992544662839e-01 + -3.2963767368160030e-01 6.1801942752111416e-01 -2.7832792298106246e-01 + -4.8463225015949418e-01 9.7784242652691156e-01 -4.4317002183682841e-01 + -6.2562868469129640e-01 1.3707081260955096e+00 -6.6325735932711039e-01 + -7.4148621868745623e-01 1.7648864721526643e+00 -9.4533040565070470e-01 + -8.3303798981893573e-01 2.1251172559266007e+00 -1.2736138208747914e+00 + -9.2400688734768999e-01 2.4415726015790615e+00 -1.6355865145375192e+00 + -1.0524520468103560e+00 2.7136136226108705e+00 -2.0335179728706350e+00 + -1.2575072907191656e+00 2.9262607798059905e+00 -2.4652527371286883e+00 + -1.5690688683115355e+00 3.0538004910361378e+00 -2.9167999028414142e+00 + -2.0044595378824779e+00 3.0704222352379782e+00 -3.3708883011370658e+00 + -2.5620165531357766e+00 2.9489272794873020e+00 -3.8119138363839062e+00 + -3.2013450058515622e+00 2.6672584476865269e+00 -4.2314807271560086e+00 + -3.8523497216725593e+00 2.2335578731637891e+00 -4.6267728708304237e+00 + -4.4691196470151171e+00 1.6902095524449905e+00 -5.0009417837906716e+00 + -5.0183725315174001e+00 1.1152325311561775e+00 -5.4251916321597635e+00 + -5.4122228446445275e+00 6.4850052490702714e-01 -6.0430988416722284e+00 + -5.5748607881082739e+00 3.8360700222032273e-01 -6.8319746560134975e+00 + -5.8319803286525040e+00 1.5237310305736051e-02 -7.5089259746968793e+00 + id 13898 + loc 4.6173509955406189e-01 8.4735798835754395e-01 396 + blend 0.0000000000000000e+00 + interp 4.2498061316717423e-01:3.8841976086194097e-01:2.3060611901111328e-01:4.2497636336104255e-01:9.7526782016246893e-01:3.4610009567349420e-01:1.7723137185994038e+00:3.9688246724002813e-01:2.0464417450063750e+00:3.3435157906397334e-01:2.7453350647085717e+00:3.5482652330870862e-01:3.8208019274339673e+00 + CVs 20 + 9.7462459301274251e-01 1.7814070875283311e-01 -3.6336146839745914e-01 + 1.5990132521410281e+00 1.8000034971639994e-01 -6.6162080220146291e-01 + 2.1234408499604518e+00 1.3987882856613293e-01 -9.3132420438488350e-01 + 2.6304642928947013e+00 1.1021081447745956e-01 -1.1796352374981898e+00 + 3.1188286133811949e+00 9.2182201714909318e-02 -1.4005833632500684e+00 + 3.5931555588705244e+00 8.3818341180043276e-02 -1.5941190090221760e+00 + 4.0626258509735580e+00 7.6472594436605812e-02 -1.7655572255145122e+00 + 4.5398175528580351e+00 5.4963339145198242e-02 -1.9208637482558930e+00 + 5.0376495158330563e+00 -1.8225504328293063e-03 -2.0568555048632682e+00 + 5.5586625047789164e+00 -1.2145139943996197e-01 -2.1689720076500416e+00 + 6.0880435050360493e+00 -3.3327471601213898e-01 -2.2626038099280965e+00 + 6.5916141380961371e+00 -6.5747747809183843e-01 -2.3522826325570287e+00 + 7.0297773621960626e+00 -1.0916264763094081e+00 -2.4426502810016952e+00 + 7.3759572419469084e+00 -1.6130705647212320e+00 -2.5240001790747177e+00 + 7.6181482790732851e+00 -2.1888762350562692e+00 -2.5896664188050988e+00 + 7.7542790059873248e+00 -2.7816873639323019e+00 -2.6442846134470566e+00 + 7.7906320097725157e+00 -3.3553825919738243e+00 -2.6923612728942743e+00 + 7.7413923736175922e+00 -3.8876781451520217e+00 -2.7326643631858527e+00 + 7.6130080624721526e+00 -4.3942437572796447e+00 -2.7664526060876464e+00 + id 13899 + loc 1.3582594692707062e-01 5.8512818813323975e-01 402 + blend 0.0000000000000000e+00 + interp 4.5412531885621360e-01:4.2565119252080202e-01:1.1659109228197240e-02:4.5412077760302505e-01:6.1477397889837959e-01:3.7678221792044880e-01:1.0729055829467535e+00:2.7327767911835493e-01:1.8583326899204786e+00:3.9828813804897073e-01:2.3591342985335957e+00:3.5951575299814748e-01:3.1075329056380601e+00 + CVs 20 + -3.0761032569895860e-02 3.5839278502501160e-01 -1.6070872550315204e-01 + -6.6716947238857460e-02 7.2207560339058841e-01 -3.2197159092702354e-01 + -7.5564518206021003e-02 1.0987926451321357e+00 -4.9746772767169267e-01 + -5.0390744340274796e-02 1.4861731442972865e+00 -6.9582125724779909e-01 + -2.6753679527501406e-03 1.8758341429315792e+00 -9.2124592195335753e-01 + 5.4662503876270141e-02 2.2599924558691771e+00 -1.1759889718604446e+00 + 1.1056624564021800e-01 2.6329851152688528e+00 -1.4631812203434782e+00 + 1.5419977574653065e-01 2.9887828425931353e+00 -1.7887874617369552e+00 + 1.7490775930404978e-01 3.3180078363706085e+00 -2.1616990184061713e+00 + 1.6913278698030598e-01 3.6045500086011608e+00 -2.5945272520110318e+00 + 1.4411455385499916e-01 3.8204138759777644e+00 -3.1042542606048662e+00 + 1.0534215404225922e-01 3.9190765583472094e+00 -3.7001496468355333e+00 + 4.5522711120043580e-02 3.8511933114915697e+00 -4.3416003768307547e+00 + -5.5305328211991966e-02 3.6223381309808165e+00 -4.9409889575091626e+00 + -2.2154252621099624e-01 3.3107338873472250e+00 -5.4247362003132702e+00 + -4.4025833552308402e-01 3.0434877185080649e+00 -5.7475274035562718e+00 + -6.3782530575965035e-01 2.9149763003454687e+00 -5.9139576653152304e+00 + -8.3462060178291186e-01 2.9001596643875356e+00 -5.9959072498443682e+00 + -1.2687657691954568e+00 2.9712958840202535e+00 -6.0736439983419883e+00 + id 13900 + loc 7.8124082088470459e-01 9.9606335163116455e-01 395 + blend 0.0000000000000000e+00 + interp 4.6417195857720617e-01:3.0387269602497641e-01:1.5016748480322306e-01:4.1614622676810947e-01:8.1653066722343248e-01:1.6980747616879596e-01:1.9930602549514578e+00:4.6416731685762042e-01:2.9039564186007336e+00:3.5467257779256606e-01:3.3384936960631211e+00 + CVs 20 + 5.9002138918961788e-01 1.3762660681337946e-01 -4.4321624089721623e-01 + 1.0428980959559211e+00 1.6221844991915485e-01 -8.2086330236075389e-01 + 1.4667796186842130e+00 1.3402781766134075e-01 -1.1830518422605629e+00 + 1.9051280930247729e+00 7.2345695809802879e-02 -1.5422984261537094e+00 + 2.3467146229099218e+00 -2.6645009304755662e-02 -1.8804490527709981e+00 + 2.7766557553508395e+00 -1.6032768324720759e-01 -2.1842691772145280e+00 + 3.1791259736467055e+00 -3.2052690990335875e-01 -2.4448405066683581e+00 + 3.5387123601734354e+00 -4.9589950939862604e-01 -2.6536804494288204e+00 + 3.8439608054370127e+00 -6.7114662449892637e-01 -2.8064075239434407e+00 + 4.0946413946009557e+00 -8.2771871416842968e-01 -2.9102886112930646e+00 + 4.3063028992476653e+00 -9.5057905714781099e-01 -2.9841968392368257e+00 + 4.5016852223000994e+00 -1.0356018464781691e+00 -3.0527992840921852e+00 + 4.6966590001274806e+00 -1.0889927104289661e+00 -3.1399396643486788e+00 + 4.9010810865239005e+00 -1.1241438709326932e+00 -3.2634128847917196e+00 + 5.1232741331637746e+00 -1.1607033980864534e+00 -3.4326637539304947e+00 + 5.3541100535789585e+00 -1.2166938262612916e+00 -3.6518318837579011e+00 + 5.5704140943899567e+00 -1.3019196499769925e+00 -3.9218459671514792e+00 + 5.7462616465532665e+00 -1.4287139754899583e+00 -4.2313768558368006e+00 + 5.7763580376959940e+00 -1.6473834185138219e+00 -4.4733586069321110e+00 + id 13901 + loc 9.2225122451782227e-01 4.8086774349212646e-01 393 + blend 0.0000000000000000e+00 + interp 4.8838786388642924e-01:3.9089170637759907e-01:1.6106968323157567e-01:4.0680171769707718e-01:3.8161354123471314e-01:4.8838298000779040e-01:1.0002402976349305e+00:4.7534015447368794e-01:1.9990350174974845e+00:4.2455739451267510e-01:2.2308862477652118e+00:4.0310165137086917e-01:3.0068883395514154e+00:4.6219059740671092e-01:3.7466624514732652e+00 + CVs 20 + 2.3520617316298364e-01 2.1705992057510409e-01 8.4327004530469735e-02 + 4.5702825596150420e-01 4.4040933412004479e-01 1.9152495861827826e-01 + 6.7987928630832550e-01 6.7506791617665640e-01 2.9536653695619042e-01 + 9.0996000362378504e-01 9.2102272150101805e-01 3.8309671442510301e-01 + 1.1477392476245520e+00 1.1712212087305667e+00 4.5680616314183164e-01 + 1.3940652649160081e+00 1.4145871199947910e+00 5.2478513531494131e-01 + 1.6494121780130266e+00 1.6407500556885193e+00 5.9816852468255244e-01 + 1.9135961346806234e+00 1.8402640249255162e+00 6.8292541317037825e-01 + 2.1870671094434515e+00 2.0048529647814597e+00 7.7751756501251545e-01 + 2.4696860205846236e+00 2.1235768748561790e+00 8.8370539131881642e-01 + 2.7530710043090427e+00 2.1747673136782106e+00 1.0089176534649269e+00 + 3.0162490501841397e+00 2.1337148372541854e+00 1.1470691881755908e+00 + 3.2437091174831338e+00 1.9950910733326568e+00 1.2778079695135078e+00 + 3.4406370693218715e+00 1.7697451183100832e+00 1.3911557323146755e+00 + 3.6204766250596800e+00 1.4860481524546683e+00 1.4763690068244286e+00 + 3.8082662529891707e+00 1.2083015735716909e+00 1.5114333592819302e+00 + 4.0371914062679046e+00 9.9728945148369186e-01 1.4919003711696326e+00 + 4.3281405460265274e+00 8.0957655303160792e-01 1.4624116771718403e+00 + 4.6793423952553495e+00 4.6868569339482824e-01 1.4985671502663753e+00 + id 13902 + loc 7.9684084653854370e-01 4.1258504986763000e-01 1068 + blend 0.0000000000000000e+00 + interp 2.8752973129437376e-01:2.8752685599706085e-01:2.2711491581190990e-01:2.4586115642453008e-01:1.0821242960928765e+00:2.7648267140293808e-01:2.0229463273685058e+00:2.5168756222229338e-01:2.9926491848905803e+00:2.4771124384165100e-01:3.7889062585600377e+00 + CVs 20 + -1.3316062696975756e-01 4.1555119999943219e-01 1.5315172299143523e-01 + -2.7171025476387789e-01 8.5590094943159023e-01 3.0816836957320665e-01 + -4.5272051574909489e-01 1.3094305201968290e+00 4.4221884821449647e-01 + -7.0951663964657752e-01 1.7529461702237548e+00 5.4501798597559004e-01 + -1.0663005620238273e+00 2.1498837255471606e+00 6.2137088561152265e-01 + -1.5244144269301301e+00 2.4542434949790355e+00 6.9209993933266911e-01 + -2.0515409393171282e+00 2.6289471301489655e+00 7.8824383706998791e-01 + -2.5855173621840302e+00 2.6678540990182400e+00 9.2995745474836899e-01 + -3.0762455706269791e+00 2.5852690965182425e+00 1.1264046925925446e+00 + -3.4911791578068101e+00 2.3314923477596596e+00 1.3999934619872323e+00 + -3.7155647691464910e+00 1.8275011884833496e+00 1.7065558970448242e+00 + -3.6938007660315644e+00 1.2403378468633415e+00 1.8817295290371203e+00 + -3.5307293809034181e+00 6.9826012528692605e-01 1.8986872487173441e+00 + -3.2669744645669110e+00 2.3224351279372143e-01 1.7701072796497821e+00 + -3.0224600869855474e+00 -9.8107752476181365e-02 1.5453973637987155e+00 + -2.9106910576010483e+00 -3.1390618682055288e-01 1.3121327394600264e+00 + -2.9439095247625202e+00 -4.3801106812148249e-01 1.1245297800006755e+00 + -3.1399974590389301e+00 -4.1883503777885828e-01 1.0468108186698148e+00 + -3.1790035600624305e+00 -5.1855096182081883e-01 9.4841111548533497e-01 + id 13903 + loc 2.1965209394693375e-02 2.9907722491770983e-03 407 + blend 0.0000000000000000e+00 + interp 4.3454762786478907e-01:2.4819724113298447e-01:2.8374171257367686e-01:2.9537610744653503e-01:1.6318081685973111e+00:2.5379397116529251e-01:2.0561335334233202e+00:2.7305912465996351e-01:2.9106924505513088e+00:2.8047419907054283e-01:2.9523443268085705e+00:4.3454328238851042e-01:3.6917774818783631e+00 + CVs 20 + 1.1376631979424263e-01 3.0687824829488458e-01 -3.5660487314028672e-01 + 2.0463253605305501e-01 5.0829135255394287e-01 -5.2121126071620427e-01 + 2.9225570867375972e-01 6.3829985493826980e-01 -6.2757565547863325e-01 + 3.9128441700466582e-01 7.4439670740802433e-01 -7.3518997806164244e-01 + 5.0229602326639311e-01 8.2684803056881762e-01 -8.4028332649049142e-01 + 6.2542159229940064e-01 8.8725330150282766e-01 -9.4152336026177086e-01 + 7.6113372362583398e-01 9.2868159329602107e-01 -1.0398987120702943e+00 + 9.1051169899556916e-01 9.5447163701756088e-01 -1.1377179061241556e+00 + 1.0750014946363691e+00 9.6710415089200952e-01 -1.2373971557565482e+00 + 1.2554701353142372e+00 9.6773927218458700e-01 -1.3406514217331702e+00 + 1.4517726841470442e+00 9.5628579627343224e-01 -1.4482580026374978e+00 + 1.6635211359979314e+00 9.3143631950015504e-01 -1.5602429341719155e+00 + 1.8891015534201427e+00 8.9154602182702625e-01 -1.6760919879121821e+00 + 2.1228067640354613e+00 8.3797642897942326e-01 -1.7952133040384790e+00 + 2.3553638688299472e+00 7.7897104138092277e-01 -1.9183263512732027e+00 + 2.5798486947060906e+00 7.2834621609267258e-01 -2.0471735242257600e+00 + 2.7929940119413250e+00 6.9599816953125837e-01 -2.1818927547792089e+00 + 2.9941586919840852e+00 6.8490583685876261e-01 -2.3216983220209717e+00 + 3.2438390754732489e+00 6.7101052726573340e-01 -2.4919239169682910e+00 + id 13904 + loc 5.8232331275939941e-01 7.6942288875579834e-01 378 + blend 0.0000000000000000e+00 + interp 3.0419966117461683e-01:3.0419661917800511e-01:5.7214550677020559e-01:2.3943995525891729e-01:1.3216110599714854e+00:2.8006982703105987e-01:2.1321159812439143e+00:2.4965331366458723e-01:3.0121391437166567e+00:2.5904080083711295e-01:3.9908270375385944e+00 + CVs 20 + 5.6222841285897307e-01 3.4684842798747428e-01 9.0765312401855147e-02 + 1.0502477222948641e+00 6.3446674195168884e-01 1.3440703972694901e-01 + 1.5341458112009443e+00 8.9854410345131175e-01 1.5347210837898240e-01 + 2.0410334430577781e+00 1.1739771144198874e+00 1.7502559285895913e-01 + 2.5641141030749837e+00 1.4743007191828501e+00 2.3012200256513515e-01 + 3.1053758587841314e+00 1.7924449903540962e+00 3.5160957692242811e-01 + 3.6704545643092108e+00 2.1032924767951626e+00 5.6662514729863511e-01 + 4.2525658746269457e+00 2.3745733097672437e+00 8.8968794837436416e-01 + 4.8361903346543773e+00 2.5713913736581961e+00 1.3164337310866610e+00 + 5.4121687184974130e+00 2.6557670438402372e+00 1.8221006545533029e+00 + 5.9792215485273177e+00 2.5845693382014341e+00 2.3697598998076734e+00 + 6.5239823795123533e+00 2.3152157516060372e+00 2.9158010028866785e+00 + 7.0013979147286527e+00 1.8486869113748035e+00 3.4019764589544064e+00 + 7.3573867853643637e+00 1.2989164964168793e+00 3.7706813285825520e+00 + 7.5875837903388605e+00 8.3684892730538341e-01 4.0127938080750001e+00 + 7.7331890835944748e+00 5.2241267252361379e-01 4.1505904213995262e+00 + 7.8418568830921220e+00 2.9917320318018081e-01 4.2017684281914223e+00 + 7.9449790327098482e+00 9.6384874675708332e-02 4.1950140549122050e+00 + 8.0610734917389983e+00 -1.7099217401005440e-01 4.1842334044706373e+00 + id 13905 + loc 4.6013444662094116e-01 9.7479897737503052e-01 374 + blend 0.0000000000000000e+00 + interp 3.2149884030045056e-01:2.7684988279944661e-01:5.1015739815486572e-01:3.2149562531204756e-01:1.2289544332727875e+00:2.8222702473679456e-01:2.0054810995703178e+00:2.5808208574103819e-01:2.7375247322324778e+00:3.0826104470192811e-01:3.6368171051049787e+00 + CVs 20 + -5.6557166862574237e-01 2.8615700685064677e-01 -8.4594281852608422e-02 + -9.9727688984692886e-01 4.9362206535426129e-01 -1.1738064085858896e-01 + -1.4124293753816843e+00 6.6393584879794021e-01 -1.2511354038587180e-01 + -1.8711851147625107e+00 8.2846246006634372e-01 -1.2171370210925392e-01 + -2.3785318630315939e+00 1.0061395062393839e+00 -1.2057757249135581e-01 + -2.9372776449499405e+00 1.2082307053656720e+00 -1.4809111678672926e-01 + -3.5558160514338004e+00 1.4237366218335437e+00 -2.3889970503307434e-01 + -4.2344356686957729e+00 1.6231442817473827e+00 -4.2589248573754857e-01 + -4.9544347864231089e+00 1.7700773735347102e+00 -7.2874997355601945e-01 + -5.6870345948978311e+00 1.8241606989788957e+00 -1.1405047916671163e+00 + -6.4089951101203102e+00 1.7407002585056546e+00 -1.6240440119596029e+00 + -7.0961613593806785e+00 1.4743363119693438e+00 -2.1262426506996488e+00 + -7.7039788489793928e+00 1.0127768263268253e+00 -2.5862852179024869e+00 + -8.1874119711392481e+00 4.4203474124530473e-01 -2.9517941121951536e+00 + -8.5505079598384768e+00 -8.2192726388377935e-02 -3.2166132039005144e+00 + -8.8284996289584523e+00 -4.6306212749924747e-01 -3.3960220621337012e+00 + -9.0457848595356563e+00 -6.9912063638681943e-01 -3.4850053816626332e+00 + -9.2187727599428015e+00 -8.6889437433573846e-01 -3.5015517582586972e+00 + -9.4060963833243836e+00 -1.2012126598091353e+00 -3.5554227457695067e+00 + id 13906 + loc 7.5160819292068481e-01 3.0205124616622925e-01 412 + blend 0.0000000000000000e+00 + interp 4.2959872993970000e-01:4.2417533136264457e-01:5.4823359148844397e-01:3.5896565067281622e-01:1.0128050224457965e+00:2.8762103336810857e-01:1.8888131393281358e+00:4.2959443395240060e-01:2.8531036802825325e+00:3.9331800641869435e-01:3.2018216208748971e+00:3.2155464736768519e-01:3.9246114171192832e+00 + CVs 20 + -6.4405070192118841e-01 2.5943904829761216e-01 1.8543110370761939e-01 + -1.1277438387427252e+00 4.4484057347593464e-01 3.3414942449155949e-01 + -1.5476993947718829e+00 6.0778007403460210e-01 4.5678595473412054e-01 + -1.9700034032516522e+00 7.6620707853519154e-01 5.7191223204911534e-01 + -2.3925327611012941e+00 9.1460944033987790e-01 6.7929147543922908e-01 + -2.8111449571781448e+00 1.0469846336652027e+00 7.7879205334356261e-01 + -3.2213397195618363e+00 1.1576025876676310e+00 8.7068751349598772e-01 + -3.6190900869186899e+00 1.2412530686216534e+00 9.5573621355501293e-01 + -3.9974888192555933e+00 1.2948839712769515e+00 1.0336391874400737e+00 + -4.3507825124684274e+00 1.3183673039757360e+00 1.1040386973919620e+00 + -4.6874806415606303e+00 1.3104698647185820e+00 1.1694454171138498e+00 + -5.0460311569449017e+00 1.2580931406337590e+00 1.2379332991505612e+00 + -5.4602945266713778e+00 1.1332977129119535e+00 1.3235806782451558e+00 + -5.8900199436472827e+00 9.2078443896373807e-01 1.4434805401040429e+00 + -6.2693277942116010e+00 6.3433251577945726e-01 1.6045190862584187e+00 + -6.5718301108401764e+00 2.9463618964936966e-01 1.8027701181741693e+00 + -6.7910130135021998e+00 -7.4860362751608012e-02 2.0308042763816241e+00 + -6.9251742678631807e+00 -4.4501659028018103e-01 2.2790090272417762e+00 + -6.9624414669747035e+00 -7.4271798708026626e-01 2.5005742244450637e+00 + id 13907 + loc 7.5013421475887299e-02 2.6791346073150635e-01 382 + blend 0.0000000000000000e+00 + interp 3.8293567775913029e-01:3.8293184840235273e-01:3.6813301093957695e-01:3.7554942246281076e-01:1.1375626541759323e+00:3.6855401559733764e-01:1.9104597149213447e+00:2.6786262374730518e-01:2.2007722810925632e+00:2.9207387875044805e-01:3.4618183476204845e+00 + CVs 20 + -4.5313043044939011e-01 1.5393666297403424e-01 -7.8176060090928579e-01 + -7.9275965031947304e-01 1.8555023016593569e-01 -1.3280855818599926e+00 + -1.1060522231021104e+00 1.7418655917083714e-01 -1.7854239328936607e+00 + -1.4327704549863367e+00 1.5082032397253631e-01 -2.2056618489967779e+00 + -1.7772429864008517e+00 1.1791966084464656e-01 -2.5793417239783079e+00 + -2.1452120072096861e+00 7.8811992515411822e-02 -2.9047685245201387e+00 + -2.5409643870366416e+00 3.6923971460780303e-02 -3.1860164193693903e+00 + -2.9670982030893400e+00 -7.3421880663144812e-03 -3.4337495804681257e+00 + -3.4218671185658098e+00 -6.2207602837129228e-02 -3.6652232260892514e+00 + -3.8951147393267869e+00 -1.4490174912289500e-01 -3.8938965261852099e+00 + -4.3766014825554116e+00 -2.7755641418593990e-01 -4.1185041329371943e+00 + -4.8632789573661288e+00 -4.8408703237681228e-01 -4.3261430868456463e+00 + -5.3447426979116139e+00 -7.7906237851589122e-01 -4.4999251354285565e+00 + -5.7936652450291186e+00 -1.1536307536811869e+00 -4.6193439009583228e+00 + -6.1847636535358435e+00 -1.5827885581841588e+00 -4.6634056450834684e+00 + -6.5044047688971052e+00 -2.0375531307482948e+00 -4.6222713223604162e+00 + -6.7456523629104943e+00 -2.4926338141005604e+00 -4.4998936149490643e+00 + -6.9078199961288824e+00 -2.9263580587805018e+00 -4.3130668304457771e+00 + -7.0244529217163514e+00 -3.3441691433306846e+00 -4.0933126776716122e+00 + id 13908 + loc 8.9962579309940338e-02 8.4094315767288208e-01 409 + blend 0.0000000000000000e+00 + interp 2.9836960205997637e-01:2.5866596692835830e-01:8.5702240396854679e-01:2.9836661836395578e-01:1.7184081894722376e+00:2.4004086712499523e-01:2.8116157438307350e+00:2.6468223685461495e-01:3.8964853003094424e+00 + CVs 20 + 5.6584469946060323e-01 2.7277162901126761e-01 -1.9622274084273050e-01 + 1.0213000868954891e+00 4.7464710774761093e-01 -3.6212116067085864e-01 + 1.4800239896517711e+00 6.6220029275507142e-01 -5.2033017204742327e-01 + 1.9800149602497408e+00 8.4255835029794834e-01 -6.9327744791191637e-01 + 2.5052760342221010e+00 9.8673307854988901e-01 -9.1252390489980151e-01 + 3.0246623435874471e+00 1.0616873484860367e+00 -1.2078868832985228e+00 + 3.4936497596810270e+00 1.0416326293604055e+00 -1.5845749347778189e+00 + 3.8742840229015241e+00 9.1530868882062144e-01 -2.0155833862653627e+00 + 4.1517539164204784e+00 6.8512491508707951e-01 -2.4554281974138545e+00 + 4.3240836913956802e+00 3.7071725473729034e-01 -2.8556660560116787e+00 + 4.3944508988158475e+00 1.3866534896238569e-03 -3.1738800417005835e+00 + 4.3734746062768686e+00 -4.0969649705376798e-01 -3.3816242612599132e+00 + 4.2823849751984362e+00 -8.6825713412228089e-01 -3.4832244438777225e+00 + 4.1514012082118139e+00 -1.3919356598761450e+00 -3.5278661178539443e+00 + 4.0067773526976289e+00 -1.9841796922433894e+00 -3.6021899354539735e+00 + 3.8536567422812533e+00 -2.5923964441550300e+00 -3.8047989708925845e+00 + 3.7019958117257410e+00 -3.1609546156597936e+00 -4.1653158695948562e+00 + 3.6134993025053479e+00 -3.6778598810994447e+00 -4.6155441384412850e+00 + 3.6507583838104485e+00 -4.1222036333357366e+00 -5.0354574434600625e+00 + id 13909 + loc 8.1285953521728516e-01 4.0809780359268188e-01 1078 + blend 0.0000000000000000e+00 + interp 3.7747534541216998e-01:2.7604399020787662e-01:7.4837234347664450e-01:3.5410664286745086e-01:1.1532917362051491e+00:3.2940500884714630e-01:1.9065931985234754e+00:2.7931641854957240e-01:2.3825541937981152e+00:2.6420752091973848e-01:3.0929091014797363e+00:3.7747157065871589e-01:3.9992661734395534e+00 + CVs 20 + -1.3341646733838361e-01 3.2611449692073508e-01 1.2421641365169932e-01 + -2.7366027586211195e-01 6.6385845447083591e-01 2.5336631216381295e-01 + -4.2045426579056677e-01 9.9491103772760470e-01 4.1573264529378562e-01 + -5.7549449551506604e-01 1.3006158493652009e+00 6.2844836231377044e-01 + -7.4078162941335857e-01 1.5626238282190148e+00 8.9738078222691120e-01 + -9.1367170932323483e-01 1.7607334053675991e+00 1.2210359293852349e+00 + -1.0859452698569307e+00 1.8765125078883460e+00 1.5892223376506867e+00 + -1.2440925101714100e+00 1.8972792931469489e+00 1.9838400868196664e+00 + -1.3725161049005117e+00 1.8181494159572513e+00 2.3812434976262522e+00 + -1.4593436842340624e+00 1.6424410228086948e+00 2.7546934214830672e+00 + -1.5005428682190747e+00 1.3815741055192412e+00 3.0760430364596014e+00 + -1.5037695970839589e+00 1.0568989215637341e+00 3.3201131898408183e+00 + -1.4886987260425661e+00 6.9755213219434942e-01 3.4780943211849076e+00 + -1.4697601071852002e+00 3.2455770420888852e-01 3.5724189866960501e+00 + -1.4333199158872254e+00 -6.5145113475792105e-02 3.6665712786211850e+00 + -1.3457294355685177e+00 -4.5524503212043466e-01 3.8729001724081158e+00 + -1.2085289954456744e+00 -7.2707245995252823e-01 4.2882334745076411e+00 + -1.0692895622066971e+00 -6.1911756337735158e-01 4.9393448361482006e+00 + -1.0645902993691396e+00 -6.0255661283127582e-01 5.1307783380835756e+00 + id 13910 + loc 9.6033948659896851e-01 5.7127445936203003e-01 399 + blend 0.0000000000000000e+00 + interp 4.2602164578965851e-01:4.2601738557320062e-01:3.3025616768841848e-01:2.4922022342156455e-01:1.0780743233743997e+00:3.9384415976579873e-01:1.7130715232096838e+00:2.4169334748257326e-01:2.4059582830295665e+00:2.7950561645097027e-01:3.6668257483141189e+00 + CVs 20 + -2.1901063486778838e-01 3.3222273399711588e-01 -9.3628171016521447e-02 + -4.2269802332892903e-01 6.7266451794594451e-01 -2.1033233216922592e-01 + -6.2129292485176946e-01 1.0093231445847612e+00 -3.4841200561534819e-01 + -8.1904346285404406e-01 1.3339971377468967e+00 -5.0682641236998771e-01 + -1.0180406568984988e+00 1.6427560083613759e+00 -6.8340060766509536e-01 + -1.2194675055159725e+00 1.9328007390254549e+00 -8.7500598875530977e-01 + -1.4239780997528155e+00 2.2031460949898065e+00 -1.0810039917121546e+00 + -1.6315788890458003e+00 2.4537119066857045e+00 -1.3046310748480292e+00 + -1.8413611554071903e+00 2.6841448271060537e+00 -1.5547009318927429e+00 + -2.0494414671961971e+00 2.8913415344041811e+00 -1.8452146288727294e+00 + -2.2445139613009562e+00 3.0660996465257186e+00 -2.1826713778062641e+00 + -2.4145277171932329e+00 3.1981302818549815e+00 -2.5511088086512430e+00 + -2.5620030373766496e+00 3.2848001299645286e+00 -2.9348404979968299e+00 + -2.7006953954338520e+00 3.3221033724097757e+00 -3.3398937679971130e+00 + -2.8435000527475762e+00 3.2940228534399614e+00 -3.7527919698507084e+00 + -2.9915564360354816e+00 3.1965937191338978e+00 -4.1115482873633473e+00 + -3.1366868566209378e+00 3.0519614746642096e+00 -4.3740816998726793e+00 + -3.2958944795370839e+00 2.8645108340509049e+00 -4.5612786595319399e+00 + -3.5581274152725531e+00 2.5796396279263760e+00 -4.7321878889859335e+00 + id 13911 + loc 6.8239104747772217e-01 3.3257171511650085e-01 415 + blend 0.0000000000000000e+00 + interp 5.0751912063317839e-01:5.0751404544197209e-01:3.2161870826791161e-01:2.7983045290070768e-01:9.9299921650131695e-01:3.7424727229480687e-01:1.8130596373528656e+00:3.9565855067609734e-01:2.0915088504336734e+00:2.6718391856813273e-01:2.8883856034522206e+00:3.5235739367604801e-01:3.7817184295254025e+00 + CVs 20 + -2.2765986339711336e-01 1.2746141889274831e-01 1.4284541353890456e-02 + -4.1531710568205060e-01 2.1788609165253453e-01 5.9321732987463738e-02 + -6.0597174701806711e-01 3.0904348678295723e-01 1.0418784937496572e-01 + -8.0907623308426335e-01 4.1358671207418152e-01 1.2801266739659140e-01 + -1.0241945870655460e+00 5.2865068936545923e-01 1.2686041337101472e-01 + -1.2501549464414570e+00 6.5082843134198309e-01 9.5980291375317661e-02 + -1.4812622864982681e+00 7.7583217424570661e-01 2.9834345847460364e-02 + -1.7094557768117287e+00 8.9940796227666786e-01 -7.3395226104845501e-02 + -1.9290755775587975e+00 1.0185990627575290e+00 -2.1070748969677100e-01 + -2.1335434855128828e+00 1.1318212578220468e+00 -3.7698704849977627e-01 + -2.3045351237982219e+00 1.2402226304118029e+00 -5.6568725975721434e-01 + -2.4207154204820780e+00 1.3485013988427283e+00 -7.7178697204569158e-01 + -2.4970397314251649e+00 1.4584373978264418e+00 -9.9985248915633029e-01 + -2.5931715266193307e+00 1.5589558653863342e+00 -1.2469217555231185e+00 + -2.7459781301258124e+00 1.6373256462362227e+00 -1.4913412631737002e+00 + -2.9469649056138869e+00 1.6897083967455382e+00 -1.7254384782013088e+00 + -3.1840945006887527e+00 1.7127007926037066e+00 -1.9480666291688888e+00 + -3.4468189988491025e+00 1.7044093172865464e+00 -2.1381537560982227e+00 + -3.6497555196993354e+00 1.6918884299938308e+00 -2.1866699916888459e+00 + id 13912 + loc 3.7981632351875305e-01 4.4213783740997314e-01 403 + blend 0.0000000000000000e+00 + interp 3.3105691610588883e-01:2.7692085766360225e-01:8.4771488426407249e-02:3.3105360553672780e-01:9.0068436613759362e-01:2.7796765038980675e-01:1.3280782339365411e+00:2.9961209522247945e-01:2.5621195299778838e+00:2.9723019575113341e-01:3.2394607029334250e+00 + CVs 20 + -1.2423619073435616e-01 6.1532749926083069e-02 8.6286893261865588e-02 + -2.4806485919357030e-01 1.3515415016040452e-01 1.5382313142037138e-01 + -3.7048849103775350e-01 2.0743673136536758e-01 2.1099007754154583e-01 + -4.9673133818429843e-01 2.7325521537459480e-01 2.6868311454121230e-01 + -6.2857607517769321e-01 3.3295403318159011e-01 3.2878520407049028e-01 + -7.7036623200568388e-01 3.8800091951458537e-01 3.9605865107273819e-01 + -9.2665039940673055e-01 4.4043801466956678e-01 4.8034043921744041e-01 + -1.0984891964927632e+00 4.9119881399512305e-01 5.9453112762427485e-01 + -1.2823499346893239e+00 5.3972756260564658e-01 7.4855532734649577e-01 + -1.4717315563547619e+00 5.8409719404649352e-01 9.4659621524160176e-01 + -1.6587938915257112e+00 6.2019485701135502e-01 1.1897678391509465e+00 + -1.8350638858464308e+00 6.4192256590303010e-01 1.4783872702148551e+00 + -1.9911528634540332e+00 6.4264440856573235e-01 1.8112880620355580e+00 + -2.1160455108612619e+00 6.1606717129444377e-01 2.1854312310447672e+00 + -2.1964616310852789e+00 5.5733102857523908e-01 2.5968023364155659e+00 + -2.2193619059876215e+00 4.6343136938834928e-01 3.0329632835613465e+00 + -2.1828361502964166e+00 3.3431572122951381e-01 3.4672452691927651e+00 + -2.1008534777338443e+00 1.7653456868349382e-01 3.8736756973704818e+00 + -2.0761483194873449e+00 6.7686401925453055e-02 4.2146194868757716e+00 + id 13913 + loc 5.6030166149139404e-01 3.1734147667884827e-01 380 + blend 0.0000000000000000e+00 + interp 3.8321218510962701e-01:3.1019181991711309e-01:3.5521245888458353e-01:2.7431776136321884e-01:1.0323286186240914e+00:3.8320835298777595e-01:1.9025302749699970e+00:2.8853630628770877e-01:2.8146968928657179e+00:3.0576369189766817e-01:3.7794230473150461e+00 + CVs 20 + 5.5064841401048414e-01 2.7052693767650360e-01 5.6076104288985373e-01 + 1.0030211153798612e+00 4.3247548506788913e-01 9.8512844633660290e-01 + 1.4250229234610845e+00 5.3603057377311103e-01 1.3855187224543535e+00 + 1.8519374484396891e+00 6.0091469834062561e-01 1.8126650228766628e+00 + 2.2803400041659407e+00 6.1607703730677676e-01 2.2576342433655352e+00 + 2.7050208346877320e+00 5.7014745868048311e-01 2.7071390481651645e+00 + 3.1190705367031528e+00 4.5329647261205586e-01 3.1461876805070261e+00 + 3.5093539989535678e+00 2.6105699072596056e-01 3.5616427095515113e+00 + 3.8551205854109760e+00 -2.1090145147915074e-03 3.9464954389428977e+00 + 4.1340672302021515e+00 -3.2404311675890973e-01 4.2941310824272803e+00 + 4.3300003580938480e+00 -6.8277798625199182e-01 4.5917413597211016e+00 + 4.4337853513970256e+00 -1.0499152280756032e+00 4.8271342305824181e+00 + 4.4517965377234416e+00 -1.4030394929790599e+00 5.0056172034573194e+00 + 4.4169339315561134e+00 -1.7537408097835279e+00 5.1662531411921178e+00 + 4.3730618597552926e+00 -2.1486685121436095e+00 5.3622630793819770e+00 + 4.3537705952847929e+00 -2.5925563655672161e+00 5.6159179192410527e+00 + 4.3927163944499608e+00 -3.0500751984920753e+00 5.9149403073492435e+00 + 4.5139563572527450e+00 -3.4856341432220725e+00 6.2241178551464937e+00 + 4.6074986558250188e+00 -3.7325435537694895e+00 6.4725828985453617e+00 + id 13914 + loc 3.9155805110931396e-01 7.2267127037048340e-01 396 + blend 0.0000000000000000e+00 + interp 3.8842364509839195e-01:3.6879134892356463e-01:1.8537219561002383e-01:3.2141518310270628e-01:9.6694498846572063e-01:3.5967665571020269e-01:1.5818761987846917e+00:3.8841976086194097e-01:2.2325100902452757e+00:3.3723904408916366e-01:2.9970028857352435e+00:3.3285295303315776e-01:3.7257502883649689e+00 + CVs 20 + 8.5988761059150520e-01 2.3150144856838861e-01 -2.9175830858065122e-01 + 1.4347703032685291e+00 3.0786593767052872e-01 -5.1224548186138785e-01 + 1.9251573345863600e+00 3.2736987829654363e-01 -6.9751541106136639e-01 + 2.4174430718799087e+00 3.3506694742265219e-01 -8.5788853637968199e-01 + 2.9135180950129524e+00 3.2679369159886296e-01 -9.8418776873165581e-01 + 3.4195100269308862e+00 3.0042483985268265e-01 -1.0705483009154220e+00 + 3.9432671056581361e+00 2.5482078017701948e-01 -1.1198800832132778e+00 + 4.4908802160309023e+00 1.8654552898101628e-01 -1.1427159566793161e+00 + 5.0659393561991894e+00 8.5045362647513389e-02 -1.1516860559079070e+00 + 5.6681367330207424e+00 -6.8157237007767435e-02 -1.1606617748159058e+00 + 6.2819592016096362e+00 -2.9134366590567362e-01 -1.1883261471959010e+00 + 6.8734374700086560e+00 -5.8903571351493356e-01 -1.2530488842333092e+00 + 7.4089662830865777e+00 -9.4631440310472725e-01 -1.3600668103709135e+00 + 7.8764823944862608e+00 -1.3488231658747269e+00 -1.5040094148505188e+00 + 8.2744069723602411e+00 -1.7933352126531017e+00 -1.6774786190660627e+00 + 8.5957265894544381e+00 -2.2731139408116774e+00 -1.8714090386929674e+00 + 8.8317431292464654e+00 -2.7719558627488863e+00 -2.0727763952078120e+00 + 8.9783346740486305e+00 -3.2733344138163063e+00 -2.2615949515142399e+00 + 8.9990089277599132e+00 -3.6642852850836176e+00 -2.3747583518812418e+00 + id 13915 + loc 8.2396399974822998e-01 5.9230411052703857e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9693326915070426e-01:3.7577734488267150e-01:3.1742572052225859e-02:2.6735671187347637e-01:8.4903634502020431e-01:3.1585964729783950e-01:1.2217460843586967e+00:3.5656403676720405e-01:2.0089886336953144e+00:3.9692929981801278e-01:2.7742191343550893e+00:3.7855661386078521e-01:3.4821242429200701e+00 + CVs 20 + 2.4795925518674050e-01 2.5653692551011525e-01 -3.4645786272719981e-01 + 5.0421263270713690e-01 4.9348006836633174e-01 -6.5324224679727172e-01 + 7.9648538556349446e-01 6.9433312329626906e-01 -9.1519996624082445e-01 + 1.1356596657248070e+00 8.6171742692812281e-01 -1.1248781044452461e+00 + 1.5108783136613964e+00 1.0267942422947545e+00 -1.2939717217498057e+00 + 1.8867915184236943e+00 1.2524273205823253e+00 -1.4621523790939126e+00 + 2.1878649047616499e+00 1.5768304501323489e+00 -1.6679617916239371e+00 + 2.3383053667104718e+00 1.9604302357096033e+00 -1.9242893729094446e+00 + 2.3141481200081198e+00 2.3121891484997694e+00 -2.2250438692119761e+00 + 2.1363696748315277e+00 2.4968183454302020e+00 -2.5650190019150885e+00 + 1.8870587798466734e+00 2.3619046179321734e+00 -2.8847624723044145e+00 + 1.7046012602053491e+00 1.9794841950040150e+00 -3.0542360850896748e+00 + 1.6304496556022570e+00 1.5714593487747774e+00 -3.0961857308963854e+00 + 1.6549614710618510e+00 1.2049564245580604e+00 -3.0941094921300394e+00 + 1.7775063860590685e+00 8.8824162206300794e-01 -3.0739406270318312e+00 + 1.9974191782662025e+00 6.4218309071752699e-01 -2.9900325301603736e+00 + 2.2860677265683695e+00 5.3391303540075086e-01 -2.7886939888023026e+00 + 2.5551216573185007e+00 5.9006591251703178e-01 -2.5453552366662411e+00 + 2.7211668514307195e+00 3.9179565960319968e-01 -2.5617894248488513e+00 + id 13916 + loc 7.9885059595108032e-01 3.3488109707832336e-01 402 + blend 0.0000000000000000e+00 + interp 3.9209744802663754e-01:2.7896610897193203e-01:5.5451864264326400e-01:3.4807267808729370e-01:1.0109741684401801e+00:3.0006920074967336e-01:1.8165533297172713e+00:3.9209352705215728e-01:2.1571773963603600e+00:3.4633527280739179e-01:3.0110602818045140e+00:2.5222849024118527e-01:3.7226299042956938e+00 + CVs 20 + 1.3039377264290866e-01 2.8272990002920134e-01 2.4208798055723019e-01 + 2.5636308028620025e-01 5.5700490357106891e-01 4.9457025347302652e-01 + 3.6921926192335858e-01 8.3234466804604845e-01 7.6814928431334617e-01 + 4.8496113595674617e-01 1.1153179446166765e+00 1.0675224000829775e+00 + 6.4306821831147476e-01 1.3912429044443551e+00 1.3748578295793186e+00 + 8.2996870733367434e-01 1.6189822438553847e+00 1.6002066324781308e+00 + 1.0014859773032689e+00 1.8471754581078978e+00 1.8895424066275535e+00 + 1.2583081068382662e+00 2.0046681893487972e+00 2.1766314092106107e+00 + 1.5581301503694744e+00 2.1265775247940355e+00 2.4248668776455746e+00 + 1.8609058598526764e+00 2.2028081946214035e+00 2.7020703324996691e+00 + 2.1281041536843825e+00 2.1672981673984579e+00 3.0512259097906407e+00 + 2.2750758647524845e+00 1.9504064389708862e+00 3.4758626566377644e+00 + 2.3089816081862984e+00 1.5728918516747230e+00 3.9487311640871661e+00 + 2.3404604255274237e+00 1.1104552815500450e+00 4.4459764132645327e+00 + 2.4583513159365733e+00 6.6405413944280212e-01 4.9380782532498912e+00 + 2.6557935275282527e+00 3.3364295073893535e-01 5.3806593853520122e+00 + 2.8634961246037052e+00 1.4160595999213843e-01 5.7463535757743589e+00 + 3.0686929238782028e+00 2.7562638230495651e-02 6.0672411836493936e+00 + 3.3797249242279968e+00 -1.0201581318784214e-01 6.4745057893974849e+00 + id 13917 + loc 7.2767382860183716e-01 5.4761957377195358e-02 373 + blend 0.0000000000000000e+00 + interp 5.1980634273194548e-01:2.4923517706989218e-01:4.4950901904789309e-01:3.4672763100242948e-01:1.0009272125984894e+00:5.1980114466851823e-01:1.5713492880053788e+00:3.1301190807704021e-01:2.0948910899831579e+00:2.1118814350288187e-01:3.0408479961090298e+00:2.3391590921041774e-01:3.9816143236954904e+00 + CVs 20 + 2.6264483626397861e-01 4.1878699282538379e-01 5.7536286555953109e-02 + 5.4475378193864998e-01 7.7037562909258517e-01 1.1988911634003448e-01 + 8.5906144692933062e-01 1.0097775968299745e+00 1.8207735760223731e-01 + 1.1958415388796364e+00 1.1370921859302534e+00 2.3486606311197494e-01 + 1.5351698873022108e+00 1.1961929267899993e+00 2.6827378101179650e-01 + 1.8652191329860670e+00 1.2271796396373618e+00 2.8500033581168727e-01 + 2.1959613619983207e+00 1.2475242630840049e+00 3.0805399936493127e-01 + 2.5454180658632435e+00 1.2705239455150164e+00 3.6506351085366395e-01 + 2.9043694001287941e+00 1.3098540972328743e+00 4.7154663515460710e-01 + 3.2330902380221045e+00 1.3619388180238918e+00 6.2167590197539824e-01 + 3.4956749949093360e+00 1.3946900450998185e+00 7.7526031449190613e-01 + 3.6870649616493871e+00 1.3742021488532743e+00 8.4196104921058901e-01 + 3.8338710387566071e+00 1.3298065124043370e+00 7.0800654315778089e-01 + 3.9947674952887242e+00 1.3911865697489998e+00 3.3626507604272432e-01 + 4.2085078237110594e+00 1.7080842556231095e+00 -1.5043896380436139e-01 + 4.3251503804810225e+00 2.2572195432847018e+00 -5.3008980020150598e-01 + 4.0766357446935348e+00 2.9231115426151719e+00 -7.1458223146279076e-01 + 3.5621789614517132e+00 3.3756281612933097e+00 -6.4407280223384977e-01 + 3.7553121355236150e+00 3.0525706226621434e+00 -7.0424968327287540e-01 + id 13918 + loc 6.7432963848114014e-01 9.8679316043853760e-01 400 + blend 0.0000000000000000e+00 + interp 4.0541733496418103e-01:2.6553116594623050e-01:4.5579663419613725e-03:3.7541180768794441e-01:8.5965538019773846e-01:3.5829957021882497e-01:1.7120523106103889e+00:2.9506416838187205e-01:2.0578410121321320e+00:3.8314666721243923e-01:2.8364805685236067e+00:4.0541328079083139e-01:2.9994898345956966e+00:3.5468921200328840e-01:3.5034580463362199e+00 + CVs 20 + -2.6939963434040870e-01 3.1323318748970136e-01 -2.4238564815418417e-01 + -5.1141655114309070e-01 6.1742828005837502e-01 -5.2874937938283284e-01 + -7.5231173367838311e-01 8.9817798884081013e-01 -8.5498839162794193e-01 + -1.0221619636148433e+00 1.1330855784447429e+00 -1.2031450704360005e+00 + -1.3386821756202556e+00 1.2915744324720380e+00 -1.5430529491824418e+00 + -1.6869469741761141e+00 1.3465383597079916e+00 -1.8447493935295647e+00 + -2.0215761256161673e+00 1.2907739099685553e+00 -2.0882662617011123e+00 + -2.2942775858073912e+00 1.1447951227891415e+00 -2.2634972824985264e+00 + -2.4798891847568156e+00 9.4954763071457537e-01 -2.3620977543616029e+00 + -2.5786733652228309e+00 7.5825464262474718e-01 -2.3730916575197241e+00 + -2.6475688213637443e+00 5.8325202874814441e-01 -2.3212772401876061e+00 + -2.7557576528429717e+00 3.1721793746487204e-01 -2.2805604606198706e+00 + -2.9227455211313655e+00 -1.0975949805549823e-01 -2.2819602673566655e+00 + -3.1844786348804868e+00 -6.3478249470685388e-01 -2.3111968223527755e+00 + -3.5711108693642619e+00 -1.1404574162791070e+00 -2.3453301326873333e+00 + -4.0697829176966032e+00 -1.5210355926192034e+00 -2.3664748049221425e+00 + -4.6429671074143828e+00 -1.7427261508632030e+00 -2.3935857965237934e+00 + -5.2309350292084593e+00 -1.8271642082669435e+00 -2.4805817295235393e+00 + -5.7002486154934253e+00 -1.7713212409810137e+00 -2.6824240923500331e+00 + id 13919 + loc 8.6754870414733887e-01 5.9266902506351471e-02 1068 + blend 0.0000000000000000e+00 + interp 4.2982418152768215e-01:2.7523017147906015e-01:3.1750889915727287e-01:4.0932911404031591e-01:9.9801953565371015e-01:4.2981988328586690e-01:1.8842869726688405e+00:3.5683046382648781e-01:2.3112338711008320e+00:3.0341720127449534e-01:3.0653751937400369e+00:3.0965012111798668e-01:3.8586730602340014e+00 + CVs 20 + -5.9570460700962363e-02 3.8722545583982532e-01 1.6983975928879508e-01 + -1.4941301048011199e-01 7.7384324886010181e-01 3.0553921608366008e-01 + -2.6988077722303233e-01 1.1506920859180876e+00 3.9133170330448702e-01 + -4.2000937875168959e-01 1.5001947331333465e+00 4.1876165690136885e-01 + -6.0233289202821594e-01 1.8039108667372017e+00 3.8925733366134024e-01 + -8.2068969486371857e-01 2.0571795915821647e+00 3.1204047887571812e-01 + -1.0839568741773982e+00 2.2648076812909061e+00 2.0351319873848461e-01 + -1.4032029469648946e+00 2.4255011552918830e+00 8.8238345869028567e-02 + -1.7943007179077459e+00 2.5356926441445657e+00 -1.9035921432065672e-03 + -2.2947400784233940e+00 2.5978623489266068e+00 -7.3182509330963486e-03 + -2.8869594095765692e+00 2.5411964401237985e+00 1.7170987621833489e-01 + -3.3353047464906806e+00 2.2837700077052010e+00 4.5262671460880854e-01 + -3.5755729373994241e+00 1.8959164413085343e+00 6.8320495134356130e-01 + -3.6614323315482267e+00 1.4169035684284392e+00 8.6441376176242735e-01 + -3.6171780267502998e+00 9.4449378875663081e-01 9.9217900052748553e-01 + -3.5028295872942072e+00 6.0938505428562006e-01 1.0567583171431325e+00 + -3.3759865915692329e+00 4.5068985326888777e-01 1.0765899534286825e+00 + -3.2505910793057233e+00 4.4733505638805349e-01 1.0316425710125934e+00 + -3.1491585573129468e+00 2.4600953471777881e-01 1.0192948639558586e+00 + id 13920 + loc 7.7172470092773438e-01 1.8350879848003387e-01 401 + blend 0.0000000000000000e+00 + interp 4.9771734737411494e-01:4.7329150706942874e-01:4.1345279972071736e-01:4.9771237020064124e-01:9.1015729844036009e-01:4.0664338865585098e-01:1.1166952076976511e+00:4.6115151088997863e-01:1.8413898814478886e+00:4.7486015347489430e-01:2.1306229212989507e+00:2.9409958643647766e-01:2.7779731420021836e+00:3.4149433935094509e-01:3.1390794749774393e+00:4.2472452739903188e-01:3.9291278691221576e+00 + CVs 20 + 6.6614261481272169e-02 3.3898085819279467e-01 2.3604026576396375e-01 + 1.3716248901626543e-01 6.7721773129453400e-01 4.9050901486500176e-01 + 1.9770274730907725e-01 1.0040843689562102e+00 7.8214728169120484e-01 + 2.5478940706492959e-01 1.2993852462761446e+00 1.1238979314610340e+00 + 3.2821576577131706e-01 1.5342878805458158e+00 1.5198203821642982e+00 + 4.3732591171523144e-01 1.6793095636835909e+00 1.9614137776647080e+00 + 5.9613550435993301e-01 1.7151391512942817e+00 2.4269569427197872e+00 + 8.0973668273027610e-01 1.6436713640528806e+00 2.8895209686343715e+00 + 1.0653464568644146e+00 1.4722812967234740e+00 3.3207039756677439e+00 + 1.3242593387392732e+00 1.1944961612705589e+00 3.6880526566313550e+00 + 1.5558982584390735e+00 8.2010395955571747e-01 3.9741702204107137e+00 + 1.7973952513746585e+00 3.9069767238008901e-01 4.2030120684431687e+00 + 2.1118092454288080e+00 -5.6294266549720695e-02 4.3947235957611879e+00 + 2.4945996476139163e+00 -4.9783144919820005e-01 4.5165861640685181e+00 + 2.9042053754030603e+00 -9.2314661855183822e-01 4.5410375975596136e+00 + 3.4133879663560864e+00 -1.2771844101048060e+00 4.5303321501684710e+00 + 4.2000860427829805e+00 -1.3373650549616263e+00 4.5845142643716477e+00 + 5.0428024084590870e+00 -8.9986241499430819e-01 4.6579035696732154e+00 + 5.5099888126783085e+00 -9.2799337342255417e-01 4.6484703699400240e+00 + id 13921 + loc 8.0504286289215088e-01 6.2639009952545166e-01 395 + blend 0.0000000000000000e+00 + interp 4.0478829229333296e-01:2.9660916158350775e-01:4.3258044108254190e-01:3.5895649961214110e-01:1.0022094961327148e+00:3.2160932595982478e-01:1.5620921724567554e+00:4.0478424441041005e-01:2.0471460688423915e+00:2.9648723375339830e-01:2.9405956570180463e+00:3.4071669032278795e-01:3.3767469866731199e+00 + CVs 20 + 4.0344497038296495e-01 1.8901346749046180e-01 -4.4723481365532858e-01 + 7.2671406527865390e-01 3.0461303285112273e-01 -7.9006779966982887e-01 + 1.0358199592804960e+00 3.8356646836615671e-01 -1.0938181973051060e+00 + 1.3577307216759815e+00 4.3796984698818298e-01 -1.3782886157311189e+00 + 1.6879892548592845e+00 4.6086447994639079e-01 -1.6322342938433814e+00 + 2.0203213244137657e+00 4.4871823776720987e-01 -1.8482082913069688e+00 + 2.3473582138044824e+00 4.0423601036423573e-01 -2.0239010690258303e+00 + 2.6597115557410014e+00 3.3730361000812570e-01 -2.1591007256256529e+00 + 2.9529556943504174e+00 2.6348832404040956e-01 -2.2552194821440645e+00 + 3.2327235913246328e+00 1.9117478208005378e-01 -2.3221281240645379e+00 + 3.5038415073954057e+00 1.1434459057245427e-01 -2.3776163065269551e+00 + 3.7524134525109143e+00 1.8689849164195582e-02 -2.4391145834907446e+00 + 3.9542301583797621e+00 -1.0466212747306036e-01 -2.5152329547667858e+00 + 4.0985267422082829e+00 -2.5656157319784434e-01 -2.6035768553495959e+00 + 4.1880144844658860e+00 -4.3018680835244050e-01 -2.6913602832850940e+00 + 4.2260632395439561e+00 -5.9659772241644315e-01 -2.7629625175405348e+00 + 4.2145090237421510e+00 -7.1823260660818011e-01 -2.8266698149828469e+00 + 4.1528130099912355e+00 -8.1326555372665910e-01 -2.8956751650787114e+00 + 3.9588315405138870e+00 -1.1581291647349166e+00 -2.9050291630795306e+00 + id 13922 + loc 5.9481894969940186e-01 5.1264178752899170e-01 393 + blend 0.0000000000000000e+00 + interp 4.5927632255378292e-01:4.5927172979055741e-01:3.3583411079264003e-01:2.8965241360984412e-01:8.9924284358843709e-01:3.7132942084276388e-01:1.6310315270550533e+00:4.1235667399150699e-01:2.0038825061796084e+00:4.2618908619661089e-01:2.4209486096214281e+00:2.9072157533991538e-01:2.9769638438501120e+00:3.8091127339147468e-01:3.8243775962611117e+00 + CVs 20 + -2.4181098091953429e-01 2.3301328945697614e-01 -5.3726856717414541e-02 + -5.1526132598547991e-01 4.9927452879346745e-01 -1.2457450373768363e-01 + -7.9237319684663254e-01 8.1471955297683807e-01 -2.1408404213122204e-01 + -1.0556656535958973e+00 1.1681939180729086e+00 -3.3142999464933015e-01 + -1.3137869062400322e+00 1.5280088807476999e+00 -5.0300798567792260e-01 + -1.5664544704735448e+00 1.8625004010145989e+00 -7.5308996626097047e-01 + -1.7905856391299459e+00 2.1508102948012882e+00 -1.0794075309990752e+00 + -1.9633345665966533e+00 2.3791708275136565e+00 -1.4545270579075709e+00 + -2.0852616825283921e+00 2.5440468654425543e+00 -1.8516933124274311e+00 + -2.1705584525136201e+00 2.6511733361799315e+00 -2.2613399156209910e+00 + -2.2341871551748618e+00 2.7059136371123977e+00 -2.6899838742223139e+00 + -2.2914073345482873e+00 2.7015108807372861e+00 -3.1511835332256544e+00 + -2.3529794727043600e+00 2.6114189707665072e+00 -3.6440815855249933e+00 + -2.4207244558740362e+00 2.3967750434170405e+00 -4.1344865858491779e+00 + -2.4989922329481300e+00 2.0288818539989752e+00 -4.5488961680212814e+00 + -2.6149680038939485e+00 1.5131830062908742e+00 -4.7950145624362852e+00 + -2.8223072919693157e+00 9.1197143609087927e-01 -4.8027919663149916e+00 + -3.1449523099427816e+00 3.2569707401659564e-01 -4.5732539133762611e+00 + -3.4511051012296190e+00 -2.8382210980391487e-01 -4.3462644447559891e+00 + id 13923 + loc 8.2256287336349487e-01 8.0336362123489380e-01 412 + blend 0.0000000000000000e+00 + interp 4.3849319260553021e-01:4.3098086119398199e-01:3.0921584653933143e-01:2.8608803681871531e-01:1.0002396225075569e+00:3.7998679866638535e-01:1.8231149840415131e+00:2.9368690335274922e-01:2.2865809618968127e+00:4.3848880767360415e-01:3.0094964039360144e+00:4.0378347890705973e-01:3.6463565527663562e+00 + CVs 20 + 7.8123802944035992e-01 1.3104594285908411e-01 -2.2032555117284813e-01 + 1.2654340174632330e+00 1.5012744076222667e-01 -4.0584829979841675e-01 + 1.6709852038284900e+00 1.2830440269085014e-01 -5.7984631232166794e-01 + 2.0921179172590749e+00 9.8931613168151689e-02 -7.4844684648840920e-01 + 2.5286135147760844e+00 5.7685106465753200e-02 -9.0854567249646367e-01 + 2.9807623467602693e+00 -7.9521411789906793e-05 -1.0574945827623190e+00 + 3.4481922017815414e+00 -7.8283578109432095e-02 -1.1917636366818616e+00 + 3.9280725686503746e+00 -1.8051652687204378e-01 -1.3082201268342843e+00 + 4.4137964107162375e+00 -3.0980696016548492e-01 -1.4057371096686266e+00 + 4.8949843215534798e+00 -4.6619832744880352e-01 -1.4843980248510125e+00 + 5.3586759953667018e+00 -6.4760287421854978e-01 -1.5466489205873184e+00 + 5.7940909409367682e+00 -8.6297736639343703e-01 -1.6067234577618030e+00 + 6.1953991979834591e+00 -1.1368933435731370e+00 -1.6939987865463295e+00 + 6.5595330804522973e+00 -1.4859135790022167e+00 -1.8337073816986960e+00 + 6.8825041630764305e+00 -1.9074724472656173e+00 -2.0356410592265388e+00 + 7.1467657783917797e+00 -2.3792032519644084e+00 -2.3030560825725308e+00 + 7.3320437281360169e+00 -2.8636220548926126e+00 -2.6363391644221577e+00 + 7.4390868447376395e+00 -3.3258662330119675e+00 -3.0201515973735487e+00 + 7.6036582189203576e+00 -3.7742600586435193e+00 -3.3651201473547068e+00 + id 13924 + loc 2.6134833693504333e-01 8.3749747276306152e-01 1078 + blend 0.0000000000000000e+00 + interp 4.1003791194781114e-01:2.6329630874780063e-01:1.5389493414397215e-04:4.1003381156869168e-01:9.4639627822953132e-01:2.8027318078658942e-01:1.2893371621533736e+00:2.6270194372498901e-01:2.0191700597733320e+00:3.3718527644624807e-01:2.9925000662293679e+00 + CVs 20 + -6.4729356387328157e-02 1.6214109958147954e-01 7.3146365134096891e-02 + -9.9297412949306801e-02 3.3396821641995417e-01 1.3733726674945393e-01 + -1.2181111752623816e-01 5.0528929707640879e-01 1.9769515633057039e-01 + -1.4750666401724319e-01 6.9044664806260037e-01 2.5470786405120760e-01 + -1.7692651383587762e-01 8.8797117778010848e-01 3.0222731651428819e-01 + -2.1180885598153493e-01 1.0934006150003737e+00 3.3577968514240297e-01 + -2.5569810070523546e-01 1.2975110365958860e+00 3.5337787053534642e-01 + -3.1168719051449201e-01 1.4891063783718603e+00 3.5809264814243946e-01 + -3.8374717308965850e-01 1.6653803034097159e+00 3.5365657199468781e-01 + -4.8062080597387558e-01 1.8324496449204144e+00 3.3794795511441356e-01 + -6.1393286749434428e-01 1.9936543373769355e+00 3.0485323058436686e-01 + -7.9223247707863498e-01 2.1419674616850921e+00 2.4949789472728845e-01 + -1.0115512480218525e+00 2.2629725297606047e+00 1.7419827248808861e-01 + -1.2507171917303643e+00 2.3449291747915399e+00 9.3311866658672082e-02 + -1.4861619356182634e+00 2.3889796547268718e+00 2.4922691758535009e-02 + -1.7159308295778195e+00 2.4072970891784218e+00 -2.9150802698316935e-02 + -1.9549870256368294e+00 2.4069131016834695e+00 -7.8437810985475087e-02 + -2.2181886932078960e+00 2.3813365901369332e+00 -1.2893231995425869e-01 + -2.4447325002469671e+00 2.3423337358335408e+00 -1.3775263159214779e-01 + id 13925 + loc 2.0525176078081131e-03 7.8838855028152466e-02 378 + blend 0.0000000000000000e+00 + interp 4.9458114057195351e-01:3.6247682294550965e-01:1.1143288413393282e-01:4.7333450294394663e-01:5.5558238403711191e-01:4.2886663567128791e-01:1.0000252341612739e+00:3.0330094155130810e-01:1.7527803609371047e+00:4.7345391898149147e-01:2.3239896024897186e+00:4.9457619476054782e-01:2.8675234660006277e+00:3.2451011257355167e-01:3.1766392621880932e+00 + CVs 20 + 4.3022051529301097e-01 2.3856534147669209e-01 -4.0817208498592217e-01 + 7.6669898046262674e-01 4.3934889613825723e-01 -8.1421989947103235e-01 + 1.0775152782976669e+00 6.3029791351700459e-01 -1.2167374146919336e+00 + 1.3927081005244357e+00 8.2750482828458449e-01 -1.6120645066446460e+00 + 1.7181385293479416e+00 1.0209348502096887e+00 -1.9868058943967002e+00 + 2.0552437613392103e+00 1.1900737461006221e+00 -2.3356079141920461e+00 + 2.4067332312311112e+00 1.3173393125019137e+00 -2.6585973893124502e+00 + 2.7727775869248896e+00 1.3898589991316714e+00 -2.9540005005042218e+00 + 3.1423417853747506e+00 1.3979308151122909e+00 -3.2190435113101161e+00 + 3.4937515970658430e+00 1.3367023437337278e+00 -3.4515784844257666e+00 + 3.8041807315140899e+00 1.2082918064633947e+00 -3.6483594041300327e+00 + 4.0538505684388078e+00 1.0268924433313571e+00 -3.8049326238663856e+00 + 4.2375060488581404e+00 8.2055414360633305e-01 -3.9246350086236257e+00 + 4.3734348044359370e+00 6.0505366370300750e-01 -4.0220981445390187e+00 + 4.4709626847445652e+00 3.7300011899363117e-01 -4.0994832301862729e+00 + 4.5257632402672154e+00 1.3312882210638799e-01 -4.1421997110295763e+00 + 4.5454654124460223e+00 -8.8915128566996238e-02 -4.1244834578092133e+00 + 4.5594550267978784e+00 -2.9167348529347548e-01 -4.0562366932622984e+00 + 4.5710284404699211e+00 -4.7909856972120490e-01 -4.1444183861983870e+00 + id 13926 + loc 3.7055066227912903e-01 5.5539160966873169e-01 382 + blend 0.0000000000000000e+00 + interp 3.7246912726513831e-01:2.7453350256337172e-01:7.8264410290758613e-01:3.5130132102644235e-01:1.2636565920065068e+00:3.0407733306975399e-01:1.9994260751856885e+00:3.7246540257386568e-01:2.7753711724329673e+00:3.0137764721899629e-01:3.4143017581792225e+00 + CVs 20 + 7.7837018441502748e-01 2.2707722611035344e-01 -5.0537178972290164e-01 + 1.2826039012107555e+00 3.2403554012107461e-01 -8.9311923855464170e-01 + 1.7051711039322666e+00 3.5383389403527110e-01 -1.2661430525759347e+00 + 2.1511534424190395e+00 3.5096046406726356e-01 -1.6727722488218184e+00 + 2.6225042977001811e+00 3.0792637117908150e-01 -2.1038619239802201e+00 + 3.1138247454496839e+00 2.1704065784854376e-01 -2.5517504876957564e+00 + 3.6076156295010979e+00 7.0579559071137998e-02 -3.0156505567622851e+00 + 4.0748560323696719e+00 -1.3796101593605203e-01 -3.4905430970113591e+00 + 4.4838100505869756e+00 -4.1069450122663698e-01 -3.9571646934198594e+00 + 4.8062784350414427e+00 -7.3908994048470755e-01 -4.3884530349992650e+00 + 5.0232257616863363e+00 -1.0987983441120801e+00 -4.7601758122964419e+00 + 5.1355144528438954e+00 -1.4573809248331622e+00 -5.0577660180051387e+00 + 5.1648063271890594e+00 -1.7863165272392179e+00 -5.2784544194991359e+00 + 5.1431571054327785e+00 -2.0659930401896078e+00 -5.4276687827338588e+00 + 5.1040655728726865e+00 -2.2875876038499934e+00 -5.5159079123129686e+00 + 5.0759776481797720e+00 -2.4511034107482392e+00 -5.5616413560384181e+00 + 5.0758936770161025e+00 -2.5617859220566421e+00 -5.5930739980138533e+00 + 5.1006185348839406e+00 -2.6373478462203948e+00 -5.6357294454483773e+00 + 4.9984500053091416e+00 -2.8365167540188412e+00 -5.6046568832678361e+00 + id 13927 + loc 7.9983517527580261e-02 3.4454014897346497e-01 396 + blend 0.0000000000000000e+00 + interp 4.1170934535354597e-01:3.5835315243477889e-01:6.3997776412097052e-01:3.6857301979956814e-01:1.5519310976784579e+00:3.8617403016810781e-01:1.9999650099593405e+00:4.1170522826009248e-01:2.3111000721703396e+00:3.3859266476314287e-01:3.0272059380103973e+00:3.0787333815462803e-01:3.9966484550482781e+00 + CVs 20 + -2.1036598670989387e-01 2.1273489838521609e-01 -6.7419691105854740e-01 + -3.3497865996354248e-01 2.8283814583155931e-01 -1.1780333098532931e+00 + -4.0882178397843183e-01 2.9653956738935894e-01 -1.6415774823208953e+00 + -4.4326731092839128e-01 2.9048411862348422e-01 -2.1135677604606480e+00 + -4.4588004613817123e-01 2.6488608252287282e-01 -2.5880351792613476e+00 + -4.2871811032252322e-01 2.2078272165568824e-01 -3.0646787254156136e+00 + -4.0358136217304164e-01 1.6025400004095403e-01 -3.5429421908111727e+00 + -3.7467098928347292e-01 8.4281605522150915e-02 -4.0214038175391922e+00 + -3.4731974557629097e-01 -1.6078855420419425e-02 -4.5040720927273803e+00 + -3.3802480061307671e-01 -1.6275995364350226e-01 -4.9934378698480346e+00 + -3.6439467481439081e-01 -3.7522187390587658e-01 -5.4698379705681202e+00 + -4.3543115574248137e-01 -6.5471479569002633e-01 -5.8944246389593742e+00 + -5.4670504019302302e-01 -9.8864880728418214e-01 -6.2413919775543247e+00 + -6.9071712989985756e-01 -1.3690353476648052e+00 -6.5099956372710093e+00 + -8.6521859942326595e-01 -1.7834286945500248e+00 -6.7071595662376744e+00 + -1.0661290232867737e+00 -2.2063962048482044e+00 -6.8362141497472475e+00 + -1.2835615421493332e+00 -2.6173936968626386e+00 -6.9040691366799392e+00 + -1.5084072989365784e+00 -3.0196252429766153e+00 -6.9240663293631259e+00 + -1.7421913585944111e+00 -3.4315436290288321e+00 -6.9209425496769299e+00 + id 13928 + loc 2.3267820943146944e-03 1.6487905383110046e-01 407 + blend 0.0000000000000000e+00 + interp 1.1698390469078355e+00:2.7476645457620980e-01:1.8511166720580619e-05:5.0977804735403538e-02:1.0989255033315342e+00:4.3570325749585193e-01:1.5295592029559053e+00:8.4533486504471078e-01:1.8769548878579840e+00:1.1698290469078354e+00:3.9883660768691795e+00:7.0532238053688812e-01:3.9960152584937378e+00 + CVs 20 + 1.2341029165271708e-01 3.5577564387531579e-01 -4.7119765048995210e-01 + 2.3480679362852894e-01 5.7219030553196082e-01 -6.9436023242863576e-01 + 3.5249052627126876e-01 7.0926361866306198e-01 -8.5052944703074318e-01 + 4.8908060151296873e-01 8.1375813941528385e-01 -1.0020300507914630e+00 + 6.4354488588846614e-01 8.8334676250445088e-01 -1.1410167732401526e+00 + 8.1372382373251140e-01 9.1912148831341223e-01 -1.2639570867002035e+00 + 9.9862654962555097e-01 9.2665678426434095e-01 -1.3728097406734778e+00 + 1.2008389456112203e+00 9.1388147128415786e-01 -1.4736620295186000e+00 + 1.4260066143203280e+00 8.8787188560205244e-01 -1.5733977608105891e+00 + 1.6794523576108009e+00 8.5313020255007666e-01 -1.6771654298808381e+00 + 1.9640133505868107e+00 8.1122809067472090e-01 -1.7870835769830515e+00 + 2.2801533367117770e+00 7.6181064444818203e-01 -1.9030159559244979e+00 + 2.6261988449183158e+00 7.0880383820242221e-01 -2.0266071484424781e+00 + 2.9949591086000074e+00 6.6817952023377647e-01 -2.1634444806002593e+00 + 3.3698843219997365e+00 6.6138503837459905e-01 -2.3180408821645582e+00 + 3.7306944522228735e+00 6.9740233345815184e-01 -2.4887739959459632e+00 + 4.0625408675193757e+00 7.7124828220148967e-01 -2.6686670954422995e+00 + 4.3603093602473209e+00 8.7434796353212851e-01 -2.8434052676265673e+00 + 4.6790114188540119e+00 9.3218150007335643e-01 -3.0002889196108780e+00 + id 13929 + loc 8.8225483894348145e-02 9.7426509857177734e-01 402 + blend 0.0000000000000000e+00 + interp 4.4068912694671053e-01:3.8383809184113948e-01:7.5883086952610179e-01:2.3027512367684633e-01:1.5366571516617200e+00:4.4068472005544107e-01:2.1848415955983711e+00:4.2121527649189350e-01:2.9224106725034393e+00:2.8258792197259891e-01:3.0391011578577425e+00:3.7843200823218642e-01:3.9442862055121934e+00 + CVs 20 + -9.0755236847383638e-02 1.0886600012753372e-01 -2.0988801286822088e-02 + -1.7156464918633674e-01 2.5998702206292634e-01 -7.6309127106622410e-02 + -2.5051510558339196e-01 4.2908934124197717e-01 -1.4490813720806570e-01 + -3.3362351036666560e-01 6.0737003186398197e-01 -2.1955958704227979e-01 + -4.1929150209440302e-01 7.8811740155886822e-01 -2.9487594546113999e-01 + -5.0867373865606291e-01 9.5792238699456500e-01 -3.5812753714091494e-01 + -6.0483223511378537e-01 1.1008031363588884e+00 -3.9428145587628494e-01 + -7.0848905051454514e-01 1.2075142021615757e+00 -3.9514780688950030e-01 + -8.1612075441208964e-01 1.2785872742634548e+00 -3.6153239898094203e-01 + -9.2494395266333707e-01 1.3232164337895584e+00 -3.0097078834462410e-01 + -1.0356476288242598e+00 1.3510452969335489e+00 -2.2197099844725862e-01 + -1.1530346988527569e+00 1.3687767082037730e+00 -1.3266227660698776e-01 + -1.2711756809580592e+00 1.3753257088017279e+00 -3.4268751353002808e-02 + -1.3662917865739390e+00 1.3675353748329047e+00 7.7310396179080726e-02 + -1.4004335174948055e+00 1.3481235861734375e+00 2.0454364438499462e-01 + -1.3618088317106321e+00 1.3283930486056577e+00 3.3334698986323208e-01 + -1.2810355122969950e+00 1.3217516780410765e+00 4.4407471065138582e-01 + -1.2230849277412617e+00 1.3339711345175516e+00 5.3475870048114815e-01 + -1.4123302061041123e+00 1.3221990585897232e+00 6.5497001142711575e-01 + id 13930 + loc 2.9741123318672180e-01 2.2530533373355865e-01 374 + blend 0.0000000000000000e+00 + interp 3.1449082518440374e-01:3.1448768027615193e-01:3.1976343377026928e-02:2.7488153194971371e-01:1.0101209396895097e+00:2.3931161391944991e-01:1.9373042381084340e+00:2.6501755093957263e-01:2.8971691408696163e+00:2.5123748819675490e-01:3.4878377630630069e+00 + CVs 20 + -3.3387099422736555e-01 5.0724831178905938e-01 7.2531482503569988e-01 + -4.4575439376163639e-01 8.0802970314950140e-01 1.3483456644969958e+00 + -3.9375852192387384e-01 9.2993646810708130e-01 1.9363799678252211e+00 + -2.5441407696974661e-01 9.6018116791905306e-01 2.5102395409767722e+00 + -9.3430992815344505e-02 9.6864347316221167e-01 3.0883524985157003e+00 + 2.6981387508636212e-02 9.8309624463202561e-01 3.6981668062616748e+00 + 5.1563879881438845e-02 1.0018526587444154e+00 4.3378131503962232e+00 + -5.3158153389768037e-02 1.0178942224432268e+00 4.9730044664311279e+00 + -2.9100366985666692e-01 1.0265230031812440e+00 5.5497541528035637e+00 + -6.3506068099566582e-01 1.0163005891901427e+00 6.0156524985627220e+00 + -1.0508435290609879e+00 9.9203914805364524e-01 6.3521109745250293e+00 + -1.5120458199855675e+00 9.8066568295836554e-01 6.5779523067484593e+00 + -2.0036679474356758e+00 9.8845719734172754e-01 6.7297014774318082e+00 + -2.5135611193998013e+00 9.9321598000657474e-01 6.8424379567190847e+00 + -3.0441932909665663e+00 1.0005191078726612e+00 6.9220278837331817e+00 + -3.6758718451922792e+00 9.9139308972428086e-01 6.8591633602623050e+00 + -4.4655671453414607e+00 8.2473266340373197e-01 6.5242198456503262e+00 + -5.1385273820037298e+00 2.5429227547505784e-01 6.1322891545568536e+00 + -5.1775647105915379e+00 -3.5088256809107632e-01 6.1775330143877687e+00 + id 13931 + loc 2.2817274928092957e-01 6.4158505201339722e-01 399 + blend 0.0000000000000000e+00 + interp 4.2362204420070670e-01:2.6992012351277123e-01:7.0285622896203792e-01:4.0603408247948758e-01:1.4666727515185158e+00:4.0909822257784767e-01:1.9850320883772166e+00:3.2535257236607529e-01:2.5594980588585536e+00:4.2361780798026472e-01:3.2963101609777210e+00:2.6942634978853375e-01:3.9329941456595812e+00 + CVs 20 + -2.2527582104148652e-01 3.1606938677279917e-01 -2.2946125499622230e-01 + -4.3676413274335218e-01 6.4673739451940171e-01 -4.4430776789439963e-01 + -6.3624619836560525e-01 9.9144059642604143e-01 -6.8077257757154985e-01 + -8.2349229350188369e-01 1.3458029670193787e+00 -9.5651690670536671e-01 + -1.0039133145328953e+00 1.7070095342098954e+00 -1.2751831060938625e+00 + -1.2000471276545435e+00 2.0710338965114623e+00 -1.6364262000831455e+00 + -1.4632732460952531e+00 2.4278595263298830e+00 -2.0378129240237106e+00 + -1.8660335283826264e+00 2.7306502375761998e+00 -2.4672440666988797e+00 + -2.4435872010002226e+00 2.8657574395221368e+00 -2.8700833762919791e+00 + -3.1124343634615217e+00 2.7420481792756424e+00 -3.1621237550628711e+00 + -3.7401802766197383e+00 2.3868049568871013e+00 -3.3120177311457262e+00 + -4.2435872076468044e+00 1.9016693223950649e+00 -3.3558470220611660e+00 + -4.6203036952560517e+00 1.3957578886032249e+00 -3.3595451245550891e+00 + -4.9225767392016690e+00 9.5470112478471969e-01 -3.3676020531796249e+00 + -5.2060344855413980e+00 6.3789664697456261e-01 -3.3881354545981086e+00 + -5.4866359581528297e+00 4.7821527307881689e-01 -3.4170665381192862e+00 + -5.7069231604887607e+00 5.0375055648118283e-01 -3.4322528013817779e+00 + -5.8927624240700789e+00 6.3686738956897970e-01 -3.4489559711847395e+00 + -6.3285291006511946e+00 7.8189234945057207e-01 -3.6018052242419403e+00 + id 13932 + loc 1.9558047875761986e-02 5.1012450456619263e-01 400 + blend 0.0000000000000000e+00 + interp 4.9853605672697809e-01:4.2359283815250254e-01:9.2153448143397776e-01:2.7950561645097027e-01:1.6711164316869218e+00:4.1456706760412071e-01:1.9998303057505629e+00:4.8779744791000446e-01:2.6122656173073264e+00:4.9853107136641084e-01:2.9781581517109457e+00:3.6432058163154057e-01:3.1793483935494273e+00:3.5303018514148782e-01:3.9273760335287036e+00 + CVs 20 + -2.6724989937657728e-01 2.7133747386225504e-01 -4.9002143612451338e-02 + -5.2342990695817426e-01 5.4182489792617317e-01 -1.5255355521243399e-01 + -7.7332739118079652e-01 7.9354480358678725e-01 -3.1117845673988553e-01 + -1.0152473702872522e+00 1.0104452840144789e+00 -5.2089976839612939e-01 + -1.2441664429233250e+00 1.1793875478333700e+00 -7.7126589939012191e-01 + -1.4566404903948507e+00 1.2910730800256818e+00 -1.0456390874754748e+00 + -1.6507469681401266e+00 1.3422645931513206e+00 -1.3257930359437617e+00 + -1.8258993655818891e+00 1.3356137268600579e+00 -1.5938850529320712e+00 + -1.9833353852132944e+00 1.2787413022381817e+00 -1.8338916499375468e+00 + -2.1263336667476991e+00 1.1830108302539653e+00 -2.0347717548072271e+00 + -2.2554207549630130e+00 1.0599241995514990e+00 -2.1976618927790854e+00 + -2.3616385077433533e+00 9.1604618897356271e-01 -2.3300354988524239e+00 + -2.4327021146529870e+00 7.6428516050286688e-01 -2.4134985914224965e+00 + -2.4645782828319751e+00 6.5192537719429000e-01 -2.4024541626038660e+00 + -2.4555692561234808e+00 6.2657744193240328e-01 -2.3009330732024234e+00 + -2.4207699553775073e+00 6.4388142529372594e-01 -2.2005727228519105e+00 + -2.3957389864384004e+00 6.1349941056282387e-01 -2.1625113241810507e+00 + -2.4364401111622223e+00 5.1191431927835418e-01 -2.1779227828506973e+00 + -2.7134490985548112e+00 3.1113957010313709e-01 -2.2278120649930853e+00 + id 13933 + loc 4.0864485502243042e-01 4.8233294486999512e-01 379 + blend 0.0000000000000000e+00 + interp 3.4736157284196378e-01:3.4735809922623540e-01:4.8655993380435636e-01:3.1446516025408555e-01:1.1702452798614336e+00:2.6529675105850975e-01:1.8382569191905027e+00:2.9636965631391177e-01:2.1384857492124718e+00:3.2944923340900867e-01:3.1370851176254093e+00:2.4843038677172591e-01:3.9998357847808759e+00 + CVs 20 + -8.1617252975128285e-03 2.3879870309306855e-01 3.2907882647858694e-01 + 4.0943015097251734e-03 4.7277584803985839e-01 6.4886646988564889e-01 + 5.5403964926992733e-02 6.7074200588736121e-01 9.7378200590029240e-01 + 1.5706882909452188e-01 8.0343835301643884e-01 1.2995028453900235e+00 + 2.8429798732996497e-01 8.8171985422975629e-01 1.5773591667506783e+00 + 4.1370145047529738e-01 9.3324181033836473e-01 1.7716304390754982e+00 + 5.5644461185082505e-01 9.8421559551302340e-01 1.9122316260749310e+00 + 7.2204700881433925e-01 1.0667416266021008e+00 2.0657144979136710e+00 + 8.9225393009183085e-01 1.2121269321845460e+00 2.2591207240960829e+00 + 1.0463896900629808e+00 1.4326778250769312e+00 2.4880105929334899e+00 + 1.1718976820277365e+00 1.7166158294301850e+00 2.7501151053237458e+00 + 1.2679721363183296e+00 2.0364656210249290e+00 3.0301929331147166e+00 + 1.3403428560279202e+00 2.3586484630925515e+00 3.3186739058941059e+00 + 1.3725211171318192e+00 2.6380041035644997e+00 3.6444107711944072e+00 + 1.3146658222182626e+00 2.8129200176777909e+00 4.0243810824656974e+00 + 1.1106090202937120e+00 2.8222753356151200e+00 4.4056969260994787e+00 + 8.0156633797384869e-01 2.6460021359385602e+00 4.7122916048646282e+00 + 5.8740645307170813e-01 2.2935686666134152e+00 4.9422378294618809e+00 + 6.6509262153250837e-01 1.8452709718576334e+00 5.1435125906642725e+00 + id 13934 + loc 5.3085374832153320e-01 4.4914874434471130e-01 373 + blend 0.0000000000000000e+00 + interp 4.4453419167409913e-01:3.0069131373720021e-01:1.5380690826285959e-01:4.4452974633218240e-01:9.7843368440278933e-01:3.8802948482012067e-01:1.1962266647426414e+00:2.6892273296011066e-01:1.7727985259225356e+00:3.8499301068920666e-01:2.0550341025719767e+00:3.1969430596904763e-01:2.6713340145090392e+00:2.8814006997357755e-01:3.5324303001120647e+00 + CVs 20 + 3.2016658073424425e-01 4.8349906468328929e-01 1.0697651141279374e-01 + 5.9880356515998223e-01 8.8122984053020992e-01 2.4756471296694296e-01 + 8.4419235107848034e-01 1.1967576329545355e+00 4.1127856628571297e-01 + 1.0505938226351583e+00 1.4463302855691575e+00 5.8793840003541886e-01 + 1.1962490270418864e+00 1.6388465387898730e+00 7.5883792583065635e-01 + 1.2732247556106993e+00 1.7662662934703524e+00 8.8008972684852171e-01 + 1.2995492753098299e+00 1.8448102800051067e+00 9.3853075224175031e-01 + 1.3209733922777178e+00 1.9009033958449315e+00 9.8456796024330218e-01 + 1.3697638399897303e+00 1.9355281875273165e+00 1.0511184183224938e+00 + 1.4519476205996804e+00 1.9510602738010148e+00 1.1293592335428029e+00 + 1.5509674953019137e+00 1.9846785233578574e+00 1.1801791290535015e+00 + 1.6455797556075764e+00 2.1088100094375308e+00 1.1761824234437879e+00 + 1.7078664215691706e+00 2.3017272280279917e+00 1.1917469118018675e+00 + 1.6769283144937726e+00 2.3635264135488976e+00 1.3026919251244589e+00 + 1.5603661679515668e+00 2.1710284534931916e+00 1.4921385931906956e+00 + 1.4454150763380682e+00 1.7872629840568734e+00 1.7647011946002735e+00 + 1.4052039133821155e+00 1.3233170132113137e+00 2.1452594356008130e+00 + 1.5224338867347065e+00 9.1714298934047533e-01 2.5775137929912146e+00 + 1.8416345751286007e+00 9.0851301793535932e-01 2.7611454475147790e+00 + id 13935 + loc 6.1309987306594849e-01 5.7806074619293213e-01 403 + blend 0.0000000000000000e+00 + interp 4.5171424107373725e-01:3.2777753350536332e-01:1.6812809929512440e-01:3.1079356036630523e-01:9.6188201626282932e-01:2.6829376616371819e-01:1.6604178203571873e+00:2.7656254608531888e-01:2.2369203793790291e+00:4.5170972393132652e-01:2.9655277816745187e+00:2.8164903984547507e-01:3.5860211509259727e+00 + CVs 20 + -1.0608663964884595e-01 1.0879065710068342e-01 4.3749910744129965e-03 + -2.0621730316016898e-01 2.1923123309189793e-01 5.4022710968434688e-02 + -3.0064545360922146e-01 3.5231313904868400e-01 1.2778210382275748e-01 + -3.8632517741550615e-01 5.0071381273640680e-01 2.1317197684504025e-01 + -4.6136312352502556e-01 6.6218215851364659e-01 3.0701041930104567e-01 + -5.2414339606893301e-01 8.3287955772495503e-01 4.0563057622317639e-01 + -5.7581815615020393e-01 1.0101245976277067e+00 5.0451229412604526e-01 + -6.2156334125042179e-01 1.1921964390940785e+00 5.9855943229619335e-01 + -6.6632127044958456e-01 1.3769148694168831e+00 6.8386062023203809e-01 + -7.1234356443892177e-01 1.5640583841523541e+00 7.5763971801926122e-01 + -7.6134454961711362e-01 1.7537710577720975e+00 8.1817019340767927e-01 + -8.1567503893548987e-01 1.9431237963289902e+00 8.6613350764578445e-01 + -8.7501875007097440e-01 2.1277576828606932e+00 9.0497470448963468e-01 + -9.3190788758091503e-01 2.3048918790360826e+00 9.3953317370511757e-01 + -9.7297828772122585e-01 2.4716735347963592e+00 9.7151197883776630e-01 + -9.9393183734378099e-01 2.6271986819953548e+00 9.9799901476533037e-01 + -1.0148428848012321e+00 2.7714452961848548e+00 1.0227244607502171e+00 + -1.0576038054160506e+00 2.8962370976415812e+00 1.0581430099966331e+00 + -1.2304638922078901e+00 2.9053896128615144e+00 1.2121418324399083e+00 + id 13936 + loc 4.9203544855117798e-01 4.9098249524831772e-02 1068 + blend 0.0000000000000000e+00 + interp 5.5866187412467849e-01:5.5865628750593732e-01:3.0146132005974458e-01:4.5177708020425267e-01:9.9379833967492748e-01:2.6872372285747415e-01:1.3988100874154330e+00:2.4172992489459427e-01:2.3837402892652384e+00:2.7876932718530406e-01:3.3092962805795381e+00:5.1986214668827135e-01:3.9150412533487935e+00 + CVs 20 + -2.4212613865141377e-01 2.3870940212137773e-01 -2.3296788666274337e-01 + -4.5549727513291971e-01 4.6406361940749813e-01 -4.7367956706974684e-01 + -6.5679702585344035e-01 6.6686044203728922e-01 -7.4621593637009875e-01 + -8.5956350866192976e-01 8.4643305614573394e-01 -1.0556167596992161e+00 + -1.0780440527007278e+00 1.0097895654510891e+00 -1.3917409931031037e+00 + -1.3312357047275643e+00 1.1625655792339691e+00 -1.7361161209591689e+00 + -1.6329986622246062e+00 1.2997449294633263e+00 -2.0608953814264090e+00 + -1.9785243041588265e+00 1.4031792635635081e+00 -2.3397058711522090e+00 + -2.3483572826364671e+00 1.4500272128959004e+00 -2.5610084820191235e+00 + -2.7278321782691219e+00 1.4215079417926084e+00 -2.7260034579877854e+00 + -3.1092247623930511e+00 1.3066832268197111e+00 -2.8385695917232083e+00 + -3.4820086262645460e+00 1.1118378340810107e+00 -2.9068251141277028e+00 + -3.8388203500939073e+00 8.6234646356289346e-01 -2.9490498945612647e+00 + -4.1798067838367645e+00 5.9197230540907653e-01 -2.9931980932461677e+00 + -4.4947694935787910e+00 3.4668839027667242e-01 -3.0783589713656729e+00 + -4.7164396449942076e+00 2.1566745388190856e-01 -3.2534943345462595e+00 + -4.7326238248884618e+00 3.1404057308846745e-01 -3.5031322117562480e+00 + -4.6411878902748986e+00 5.3719927431553993e-01 -3.7414716041600049e+00 + -4.9174854548601994e+00 3.8983495631209586e-01 -4.2444299189399244e+00 + id 13937 + loc 7.2317683696746826e-01 1.3297057151794434e-01 412 + blend 0.0000000000000000e+00 + interp 4.7035008562883512e-01:2.5063427245507996e-01:3.3842085048679482e-01:3.1858683710460961e-01:1.3510963418831212e+00:4.7034538212797888e-01:1.8880929749775746e+00:4.0220484955116359e-01:2.6400180833649065e+00:2.7240880136119794e-01:3.0049375402501246e+00:4.6415531889966544e-01:3.4396935545159515e+00 + CVs 20 + -5.3019827940665998e-01 1.5692424609795558e-01 2.3906319145224847e-01 + -9.4335164747414257e-01 2.3363348719207327e-01 4.7182133163371209e-01 + -1.3225867441679426e+00 2.7037380356447799e-01 7.1333513946734906e-01 + -1.7138350174527515e+00 2.8366401437809091e-01 9.7856925673427142e-01 + -2.1102890641490766e+00 2.7320581874056127e-01 1.2611268277728711e+00 + -2.5086417820435969e+00 2.4059804486259662e-01 1.5511224406271482e+00 + -2.9104345027766958e+00 1.8840790922268158e-01 1.8356857702830196e+00 + -3.3196973495115851e+00 1.1796693300152361e-01 2.1013980292484020e+00 + -3.7414828191297924e+00 2.9442171097568304e-02 2.3354403775374943e+00 + -4.1785293616461985e+00 -7.5399021680656597e-02 2.5252264263894166e+00 + -4.6213684170415332e+00 -1.9722044270331329e-01 2.6647415405665527e+00 + -5.0319989312634998e+00 -3.5191445652212283e-01 2.7768006920560091e+00 + -5.3521631055700540e+00 -5.6084171761881851e-01 2.9179829054806619e+00 + -5.5632729905849274e+00 -8.1186679710209209e-01 3.1175209477718777e+00 + -5.6969686551111636e+00 -1.0768305275282417e+00 3.3583733331241121e+00 + -5.7679868668642049e+00 -1.3383565159840316e+00 3.6287343072077389e+00 + -5.7657959211997829e+00 -1.5730394597037873e+00 3.9249505891393692e+00 + -5.6964769399491075e+00 -1.7609788289210366e+00 4.2315059658340823e+00 + -5.8351865485277949e+00 -2.0086561432783050e+00 4.4760981340528438e+00 + id 13938 + loc 1.2113720178604126e-01 5.0861418247222900e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9525443955644768e-01:2.6490695589655761e-01:3.2027961704306007e-01:3.9525048701205212e-01:1.0422854963914099e+00:2.5627275153573831e-01:1.9616520147991985e+00:3.1915390840524771e-01:2.5311386133936988e+00:2.6225276950551957e-01:3.0324365508184861e+00:3.5328690748612818e-01:3.7848937532248401e+00 + CVs 20 + 4.0254853824138126e-02 2.9194084183525915e-01 1.6863521714134483e-01 + 9.6640169442742729e-02 5.6377032973415697e-01 2.9126641554379773e-01 + 1.6842765242418956e-01 8.3292898701339035e-01 3.8608959888660921e-01 + 2.5989606025439421e-01 1.1297975000031413e+00 4.7676278949184481e-01 + 3.7915228007312329e-01 1.4556500380213508e+00 5.4730469322211617e-01 + 5.3683321684080587e-01 1.8090313664976569e+00 5.7202385230636144e-01 + 7.4459663645989582e-01 2.1796057934704205e+00 5.1029024551515556e-01 + 1.0057355363799743e+00 2.5303962188633409e+00 3.0976392214507298e-01 + 1.2961332191029225e+00 2.7865294108388676e+00 -6.4399086768646363e-02 + 1.5587911650326842e+00 2.8660659973694216e+00 -5.8092435518223384e-01 + 1.7429236661156777e+00 2.7377064928490968e+00 -1.1552326891791935e+00 + 1.8300516890140821e+00 2.4226406925763526e+00 -1.7022810331367273e+00 + 1.8373184369217850e+00 1.9894954306712076e+00 -2.1563943499116558e+00 + 1.8101983571695373e+00 1.5404906430912977e+00 -2.5058355920033279e+00 + 1.7893997478445676e+00 1.1907516101736113e+00 -2.7929414705951174e+00 + 1.8088311370943857e+00 1.1178478752944818e+00 -3.0488750230074757e+00 + 1.9364465976024212e+00 1.5296627828491434e+00 -3.1133718482023545e+00 + 2.2239338910647737e+00 2.2172225818045272e+00 -2.4916813099487372e+00 + 2.2814847993627589e+00 2.3277362033854843e+00 -2.6958876780809287e+00 + id 13939 + loc 8.8882371783256531e-02 8.2720053195953369e-01 393 + blend 0.0000000000000000e+00 + interp 6.3827263541630697e-01:5.6625470857887272e-01:9.5582223849606729e-01:6.3826625268995285e-01:1.2112958790004180e+00:3.7209443880676468e-01:2.1044147329135683e+00:4.2848108687062375e-01:2.9556184844212519e+00:3.0240430365079440e-01:3.3404733035131113e+00:3.9250425151443025e-01:3.9983596894594453e+00 + CVs 20 + -2.6206387537169284e-01 3.4711565846350767e-01 -1.4780588113793161e-01 + -5.1312816162661035e-01 6.9527688464377579e-01 -3.1839473972713028e-01 + -7.5037543623142478e-01 1.0463213971205230e+00 -5.0191177437866297e-01 + -9.8375887605694978e-01 1.3960967176085559e+00 -6.8817682958774051e-01 + -1.2291534133703301e+00 1.7359455217700790e+00 -8.6760415713513606e-01 + -1.4969170738350916e+00 2.0554309888893614e+00 -1.0329778147246351e+00 + -1.7889666825345822e+00 2.3442611089950751e+00 -1.1816357381849618e+00 + -2.1004615046789588e+00 2.5924607074761479e+00 -1.3119752918334504e+00 + -2.4232640848229705e+00 2.7876043907253791e+00 -1.4230076857795046e+00 + -2.7451238415578869e+00 2.9235702097468126e+00 -1.5169679973331442e+00 + -3.0573745472573908e+00 3.0193600365270048e+00 -1.6093497005928219e+00 + -3.3677729416363107e+00 3.1049491085550907e+00 -1.7297243786459202e+00 + -3.6886150091282923e+00 3.1821910694763309e+00 -1.8925276948162639e+00 + -4.0174819841053919e+00 3.2256277465094207e+00 -2.0816990665678814e+00 + -4.3484154525502259e+00 3.2046738886927026e+00 -2.3080894688942073e+00 + -4.6742676236031464e+00 3.0684648608680360e+00 -2.6419391489432922e+00 + -5.0086601578352896e+00 2.7662315917572768e+00 -3.0885105203353791e+00 + -5.3935347838153396e+00 2.3432785425787115e+00 -3.4928319490099873e+00 + -5.7746696385515577e+00 2.0057887273406756e+00 -3.6797104982084976e+00 + id 13940 + loc 4.2791116237640381e-01 7.4378180503845215e-01 380 + blend 0.0000000000000000e+00 + interp 5.1516168361806480e-01:3.6413286790826338e-01:5.3892295682071034e-01:2.9666009959367051e-01:1.3806091437961170e+00:5.1515653200122868e-01:2.0019937328649622e+00:4.1711704386401705e-01:2.5343128294495800e+00:2.9223819580540111e-01:3.0897192618042153e+00:3.3008233627996653e-01:3.9966009328338759e+00 + CVs 20 + -4.3543704880795753e-01 2.5300251900991982e-01 -4.3983824104842478e-01 + -8.5572517037894880e-01 4.4899876748048956e-01 -7.6001175081917349e-01 + -1.2934619169462318e+00 6.4345909133761836e-01 -1.0833798705489746e+00 + -1.7557611235984565e+00 8.6172538559176837e-01 -1.4655829730395142e+00 + -2.2288571219848121e+00 1.0954567668358317e+00 -1.9198979459017722e+00 + -2.7003152234529262e+00 1.3170301580904675e+00 -2.4567415252524492e+00 + -3.1586355067859193e+00 1.4815600938245419e+00 -3.0844190034587884e+00 + -3.5826028341157192e+00 1.5359154764891965e+00 -3.7958000317906757e+00 + -3.9466794445709983e+00 1.4361728935302605e+00 -4.5511497029817560e+00 + -4.2345738385356286e+00 1.1599800081741507e+00 -5.2888745495864136e+00 + -4.4296840354466918e+00 7.0239032542513247e-01 -5.9532488817846758e+00 + -4.5029937697334548e+00 8.0581612426145366e-02 -6.4971076912206573e+00 + -4.4429092293927432e+00 -6.2837854890493716e-01 -6.8864920984962001e+00 + -4.2930229044394226e+00 -1.2910607334654358e+00 -7.1686141620863264e+00 + -4.1271174975630514e+00 -1.8365632883424778e+00 -7.4466568251201029e+00 + -4.0229548135526114e+00 -2.2882687329689442e+00 -7.7590727206168157e+00 + -4.0668037681394864e+00 -2.7057991829661256e+00 -8.0779721993798983e+00 + -4.2573912720363740e+00 -3.1209524181694817e+00 -8.3599282979596818e+00 + -4.2436111412443775e+00 -3.5061457728658354e+00 -8.5977332379617319e+00 + id 13941 + loc 9.1667371988296509e-01 6.5291380882263184e-01 382 + blend 0.0000000000000000e+00 + interp 4.8005147150304789e-01:4.8004667098833287e-01:2.8260171007343793e-04:2.6412161552656455e-01:6.7702820723017643e-01:3.5302713152595222e-01:1.6078038635172727e+00:2.7600703605962018e-01:2.1438997214017812e+00:2.8623197880517215e-01:2.9085445970137478e+00:4.3569624032970128e-01:3.6766696851226692e+00 + CVs 20 + 9.9518426363799306e-01 2.4562638490974514e-01 -5.3622903983761738e-01 + 1.6500210890059595e+00 3.2723068692348778e-01 -8.8542754520141131e-01 + 2.2347418179306429e+00 3.3154937824997643e-01 -1.1888561385335388e+00 + 2.8623889564749252e+00 2.8984064641295992e-01 -1.5092444634663524e+00 + 3.5320258551173676e+00 1.8720814187400403e-01 -1.8592146363888786e+00 + 4.2319241208011986e+00 1.7009831012438692e-02 -2.2530377143924523e+00 + 4.9343566063329671e+00 -2.2494115212359889e-01 -2.6986501739073785e+00 + 5.6092719770301365e+00 -5.4802496866389694e-01 -3.1827105768597153e+00 + 6.2346799813082754e+00 -9.5685897601779168e-01 -3.6769229427056094e+00 + 6.7908116642378120e+00 -1.4433367620503430e+00 -4.1506198510839960e+00 + 7.2581540317777078e+00 -1.9914027085903057e+00 -4.5725150261031819e+00 + 7.6261601556717249e+00 -2.5906427683022542e+00 -4.9124048902477373e+00 + 7.8993842734916928e+00 -3.2373289893592716e+00 -5.1542181602216655e+00 + 8.1016212246179045e+00 -3.9206133177779323e+00 -5.3035058970988889e+00 + 8.2582435383960515e+00 -4.5989673095939150e+00 -5.3762330005675976e+00 + 8.3692144374256277e+00 -5.2335043738667348e+00 -5.4041383721598821e+00 + 8.4121369332470035e+00 -5.8126089125514184e+00 -5.4347151649310357e+00 + 8.3715964319287384e+00 -6.3614832174088960e+00 -5.4937030758696288e+00 + 8.2667237428025153e+00 -6.9293402191169973e+00 -5.5018460481494369e+00 + id 13942 + loc 9.9456197023391724e-01 5.6884175539016724e-01 1069 + blend 0.0000000000000000e+00 + interp 5.3117180300190947e-01:4.4192376199576106e-01:6.1046438982817286e-01:3.4842560319996052e-01:1.2661081726774022e+00:3.3154389086801156e-01:2.0075465504536094e+00:5.3116649128387949e-01:2.5583804776170940e+00:4.6994470259944476e-01:2.9953187417347475e+00:4.1345747020627449e-01:3.2913237810938223e+00:1.7103762931814481e-01:3.8947523073442318e+00 + CVs 20 + 1.2210540587622983e-01 3.2894914207696752e-01 -1.6423066249793078e-01 + 2.7662078973144544e-01 6.6682593629995091e-01 -3.1880971506844025e-01 + 4.6056544392937776e-01 1.0124082270892711e+00 -4.5468967582205877e-01 + 6.7871538098987649e-01 1.3556762128254447e+00 -5.6714327581559787e-01 + 9.3826808974902465e-01 1.6799946112244222e+00 -6.5526579591063860e-01 + 1.2410754900485714e+00 1.9628331657189382e+00 -7.2141500310627804e-01 + 1.5859086398200324e+00 2.1690019265813092e+00 -7.6608567190490695e-01 + 1.9622493994077166e+00 2.2523201194888731e+00 -7.8149767391098290e-01 + 2.3424426439624138e+00 2.1843176416069143e+00 -7.6159903368745230e-01 + 2.6830765067593201e+00 1.9630940147121358e+00 -7.0465720649208130e-01 + 2.9118132610757028e+00 1.6258422140305240e+00 -5.9814440200675834e-01 + 2.9928594665399864e+00 1.2507278673420066e+00 -4.3954263005925343e-01 + 2.9523353518001287e+00 9.0536189586228910e-01 -2.4382953161260401e-01 + 2.8548828502773063e+00 6.3368784318519689e-01 -2.7607886755490307e-02 + 2.7642120257470060e+00 4.4526625411665732e-01 2.0173693263398335e-01 + 2.7064856552923637e+00 3.4038445863536793e-01 4.3494644362063239e-01 + 2.6804427401829365e+00 3.0296792801593164e-01 6.6654926761277966e-01 + 2.6763246018014715e+00 2.9306966844693050e-01 9.4358864706649703e-01 + 2.6899189520257503e+00 2.8287738550152675e-01 1.3252031212741355e+00 + id 13943 + loc 9.5288193225860596e-01 5.1077228784561157e-01 415 + blend 0.0000000000000000e+00 + interp 5.4806067746408282e-01:2.9180334269900288e-01:3.7203918617076948e-03:5.4805519685730819e-01:6.9515333355259745e-01:4.3270913200402533e-01:1.0438758710815290e+00:3.2578729470170487e-01:1.7377059684770377e+00:3.1920663917747466e-01:2.0882771246038065e+00:4.1498308954820262e-01:2.9905690790547221e+00:3.8596124278970018e-01:3.2875426897403042e+00 + CVs 20 + 2.1980408145047778e-01 1.8297214316890492e-01 1.6691015218262537e-02 + 3.7778562991111314e-01 3.2107268284250029e-01 2.0408279714111882e-02 + 5.0578783975346042e-01 4.3749361065172288e-01 1.8607929596161588e-02 + 6.2664843211055266e-01 5.5034587653473355e-01 1.6991602559171815e-02 + 7.4154573639945975e-01 6.5834769062509979e-01 1.0464477277810857e-02 + 8.5248006353572858e-01 7.5991589737822529e-01 -6.3995671121478970e-03 + 9.6532341827694745e-01 8.5642660683856620e-01 -3.1268764592445375e-02 + 1.0858666065635327e+00 9.4936684711681552e-01 -5.6009926855483227e-02 + 1.2167624143040203e+00 1.0364841374516123e+00 -7.7316313039304529e-02 + 1.3583007847407171e+00 1.1170885860780151e+00 -8.9068633813669917e-02 + 1.4986865203320587e+00 1.2093379085341422e+00 -4.4711056092156198e-02 + 1.6157303777961567e+00 1.3452376525901253e+00 1.4177695180820482e-01 + 1.7437539891592992e+00 1.5162267914708387e+00 4.9523985289252609e-01 + 1.9569962790838429e+00 1.6575089996034464e+00 8.9889996563751995e-01 + 2.2590588078533420e+00 1.7325152608896326e+00 1.2397107073235267e+00 + 2.6240362356207649e+00 1.7432180512753626e+00 1.5163905630799606e+00 + 3.0327838083169869e+00 1.6898723462847274e+00 1.7396279163520036e+00 + 3.4450701772186330e+00 1.5807080293497533e+00 1.8751259048886759e+00 + 3.6767992261068638e+00 1.4670284718107873e+00 1.7835448777106269e+00 + id 13944 + loc 4.5930403470993042e-01 6.9574403762817383e-01 401 + blend 0.0000000000000000e+00 + interp 4.4511275915904464e-01:2.8465837517620041e-01:6.2417642773994531e-02:2.6563577011910455e-01:9.5735833245133384e-01:4.4510830803145307e-01:1.5512115378705260e+00:4.4445913665364745e-01:2.0091740205139388e+00:4.3670868626431597e-01:2.6088856900175545e+00:3.7583225036749801e-01:3.0278855402112228e+00:4.1663261630251819e-01:3.7605617394159174e+00 + CVs 20 + -3.0250768381665322e-02 3.0756786515076379e-01 -3.5410487039081762e-01 + -4.3781358997783321e-02 6.0280705475302465e-01 -7.0999134142007669e-01 + -5.2378566917045177e-02 8.7126954652603994e-01 -1.0610596532344203e+00 + -5.6676512977090421e-02 1.0958223824678734e+00 -1.4029556690166496e+00 + -6.1384321364090388e-02 1.2797659034348228e+00 -1.7463828830533816e+00 + -8.5458925467091273e-02 1.4398181832333468e+00 -2.1130456648726015e+00 + -1.5742786796577612e-01 1.5829244518584462e+00 -2.5107021187474725e+00 + -3.0159944867224664e-01 1.7020723869804104e+00 -2.9251421752438422e+00 + -5.2847861463056223e-01 1.7827222198164332e+00 -3.3329934023417476e+00 + -8.3124371585940582e-01 1.8122304585140308e+00 -3.7076710321729469e+00 + -1.1830930393606240e+00 1.7953492944346057e+00 -4.0229892030676808e+00 + -1.5427348388527993e+00 1.7524820596353972e+00 -4.2641580234680090e+00 + -1.8883229147689167e+00 1.7040375246801136e+00 -4.4403357247811215e+00 + -2.2371062070650880e+00 1.6457294110627099e+00 -4.5807902289320461e+00 + -2.5975155188945105e+00 1.5625207330559365e+00 -4.6966672487577474e+00 + -2.9221868872518444e+00 1.4813453796577978e+00 -4.7440898507809379e+00 + -3.1591205356396430e+00 1.4430229552153380e+00 -4.6541105716539928e+00 + -3.3668532313986157e+00 1.3995903608815352e+00 -4.4685718294131558e+00 + -3.6630600813168392e+00 1.2982359529890863e+00 -4.6351492832528045e+00 + id 13945 + loc 3.9641773700714111e-01 4.8741647601127625e-01 402 + blend 0.0000000000000000e+00 + interp 4.9646289679265138e-01:3.5867568595620641e-01:4.0518988588825966e-02:3.2541073843552232e-01:8.9264049216241348e-01:3.7604805786505163e-01:1.2626081429273865e+00:4.6759522396350728e-01:1.9139679486251944e+00:4.2750496890353490e-01:2.1874595682911004e+00:4.9645793216368345e-01:2.8066457748042652e+00:3.9983206174746366e-01:3.0321376558979769e+00:3.5335657550355820e-01:3.6603183366536003e+00 + CVs 20 + -2.3073227445997108e-01 2.7114810177536591e-01 1.5628904868223031e-01 + -4.3576615490081194e-01 5.3740014290759985e-01 3.3423437610175349e-01 + -6.4371481952701515e-01 8.1211055028894075e-01 5.0041899317140248e-01 + -8.6319767654533897e-01 1.0889461882408402e+00 6.3655073102876436e-01 + -1.0954740307923410e+00 1.3630677564857085e+00 7.4944614463024195e-01 + -1.3522867632629898e+00 1.6348387775923297e+00 8.4444204288984070e-01 + -1.6490314638746923e+00 1.8983655903718610e+00 9.1429043009120003e-01 + -1.9994720973191655e+00 2.1406822444474312e+00 9.5040764992603310e-01 + -2.4168974530395158e+00 2.3459302053689406e+00 9.5567664838394828e-01 + -2.9048729501906752e+00 2.4916964778654482e+00 9.3401070477159209e-01 + -3.4432314980829677e+00 2.5481058617888879e+00 8.7849180054392240e-01 + -3.9967350466542957e+00 2.4846359263449926e+00 7.9063837955370608e-01 + -4.5316766717779444e+00 2.2754121601880497e+00 6.9655051519630595e-01 + -5.0251613793551249e+00 1.9157973998831406e+00 6.4278717741400326e-01 + -5.4725568676235570e+00 1.4382620632889214e+00 6.9725649864227601e-01 + -5.8936918169740666e+00 9.2519615263488375e-01 9.5022928836225129e-01 + -6.3138139187907507e+00 5.3866068776742315e-01 1.4837561360551796e+00 + -6.7051545771718750e+00 4.1063222476080563e-01 2.1850048517163931e+00 + -7.0860171676865482e+00 1.8081316539829317e-01 2.5630196252349293e+00 + id 13946 + loc 7.5439321994781494e-01 4.6624380350112915e-01 378 + blend 0.0000000000000000e+00 + interp 4.9963974314864301e-01:2.9115186265310505e-01:2.6286329217733662e-02:2.5905355246171402e-01:9.2374866284087487e-01:2.6975383309513085e-01:1.8740393675753384e+00:4.9963474675121156e-01:2.4154226198590552e+00:4.2569392382412469e-01:2.9617596031300844e+00:2.9753171614491991e-01:3.4668752289752578e+00 + CVs 20 + -4.1118073040008452e-01 2.9166623785121509e-01 4.6011819321495478e-03 + -7.6031709102635681e-01 5.4464681958138850e-01 1.1884209448375205e-02 + -1.0936116724196927e+00 7.7950353150787122e-01 1.9229911065570815e-02 + -1.4301373744444517e+00 1.0166244406414706e+00 1.9594105512130755e-02 + -1.7609390134222549e+00 1.2703892073176450e+00 -3.6476152287523433e-07 + -2.0856125715222498e+00 1.5483201291522410e+00 -5.4808216377548957e-02 + -2.4181255559939476e+00 1.8406453425849567e+00 -1.6137391787480793e-01 + -2.7697860301195809e+00 2.1260581289469238e+00 -3.3356559924468210e-01 + -3.1439189708194268e+00 2.3824858701599672e+00 -5.8215485553995261e-01 + -3.5453565765010628e+00 2.5855232680220439e+00 -9.1403862240881784e-01 + -3.9838597383228187e+00 2.7007602256710870e+00 -1.3223175930123547e+00 + -4.4598031315474769e+00 2.6798471506301769e+00 -1.7793058033941476e+00 + -4.9346848444793023e+00 2.4784460867215392e+00 -2.2314868579646729e+00 + -5.3354348870849755e+00 2.1194057082693605e+00 -2.6087351583453264e+00 + -5.6349716218540049e+00 1.6970880169711267e+00 -2.8818877183830613e+00 + -5.8816426175082768e+00 1.2746116668981111e+00 -3.0809832906850350e+00 + -6.1495805668370425e+00 8.6176911453455451e-01 -3.2401163138155669e+00 + -6.4727738628046962e+00 4.8019047449132257e-01 -3.3518670636776653e+00 + -6.7688092851357489e+00 1.6543161429655573e-01 -3.4042625213473405e+00 + id 13947 + loc 7.6618027687072754e-01 4.0703091025352478e-01 395 + blend 0.0000000000000000e+00 + interp 3.4509534613396370e-01:3.0047838438532659e-01:9.4723242278929420e-01:3.3097948284545525e-01:1.8106394009297708e+00:2.9751072872584194e-01:2.2528573373106058e+00:2.7026454226781715e-01:3.2108304391798885e+00:3.4509189518050237e-01:3.9189586108212842e+00 + CVs 20 + -3.1716937032377923e-01 2.7660441971388772e-01 4.8549319116659384e-01 + -6.0400997454288541e-01 4.7954004277288426e-01 8.9280772054823776e-01 + -8.9223614082107650e-01 6.3759259727548778e-01 1.2850310078332821e+00 + -1.2007790362879029e+00 7.5902857883525165e-01 1.6881592857678376e+00 + -1.5268136772490004e+00 8.3775682183895617e-01 2.0938467703959218e+00 + -1.8627795163970866e+00 8.7066535331181605e-01 2.4944508799498251e+00 + -2.2004155307816631e+00 8.5777215779175719e-01 2.8856263955575594e+00 + -2.5332904905313414e+00 7.9867749968326196e-01 3.2634873339156947e+00 + -2.8539854261685189e+00 6.9104272584841775e-01 3.6244327371194061e+00 + -3.1500182310841316e+00 5.3256113210444878e-01 3.9696057299901519e+00 + -3.4081081616964823e+00 3.2485706981383000e-01 4.3050288487314745e+00 + -3.6242593789823006e+00 7.4470402289854132e-02 4.6376596006882522e+00 + -3.8023498579690211e+00 -2.1357676171987272e-01 4.9737927373187620e+00 + -3.9404784178395857e+00 -5.4080016463140623e-01 5.3169771933631962e+00 + -4.0264800482562020e+00 -9.1098851111175971e-01 5.6636160397623199e+00 + -4.0468417309451894e+00 -1.3258181137132090e+00 5.9983163676495206e+00 + -3.9953722497452384e+00 -1.7825326025256754e+00 6.2959113685040640e+00 + -3.8797156773640142e+00 -2.2635130126002405e+00 6.5389532476276990e+00 + -3.7765930128780552e+00 -2.6818953348799455e+00 6.8237471226064699e+00 + id 13948 + loc 5.4143595695495605e-01 1.6882164776325226e-01 407 + blend 0.0000000000000000e+00 + interp 4.2241575619249316e-01:2.7969269514036743e-01:7.8003687197031646e-01:2.5250931961711726e-01:1.2240038611196062e+00:4.2241153203493126e-01:1.9569123428426454e+00:3.3494546444019169e-01:2.4369469243809725e+00:2.5867883855871859e-01:3.1160218075629649e+00 + CVs 20 + -3.9107187204812244e-01 3.5409761436849113e-01 6.4532617749708310e-02 + -5.7347036107094906e-01 5.4770985532417393e-01 1.0977396087715637e-01 + -6.8373679376123864e-01 6.7798222889112070e-01 1.4338743119259648e-01 + -7.9885070415055504e-01 7.9383650987430276e-01 1.6784541371582989e-01 + -9.1325958656706152e-01 8.9393527122323624e-01 1.8399346208735631e-01 + -1.0232869768714550e+00 9.7934424020547717e-01 1.9357363574822298e-01 + -1.1285502259882376e+00 1.0529270541416269e+00 1.9594008251241971e-01 + -1.2312745592363308e+00 1.1145681319616583e+00 1.8401655299893332e-01 + -1.3317601834709940e+00 1.1568787342666940e+00 1.4744029206328538e-01 + -1.4265088416378233e+00 1.1715084294060960e+00 8.1503616531891740e-02 + -1.5128866171914215e+00 1.1568448574331875e+00 -1.1952118355642694e-02 + -1.5906829031790430e+00 1.1161859869408388e+00 -1.2905295837594480e-01 + -1.6590854770325483e+00 1.0503978310200492e+00 -2.6683851875392117e-01 + -1.7160652544734210e+00 9.5608801848127345e-01 -4.2365869677296486e-01 + -1.7627374355841654e+00 8.3721894137293018e-01 -5.9761045646012900e-01 + -1.8052104525140362e+00 7.1287267862163051e-01 -7.8473521918809719e-01 + -1.8497284372990137e+00 6.0330798464152791e-01 -9.7800792434938022e-01 + -1.9022068249534763e+00 5.1648580380063236e-01 -1.1667528934247977e+00 + -1.9760750961493017e+00 5.0382402167337170e-01 -1.3270389167632752e+00 + id 13949 + loc 1.3766568899154663e-01 1.3339664041996002e-01 400 + blend 0.0000000000000000e+00 + interp 4.7507382940910364e-01:3.9482145394840990e-01:8.3860908958332536e-01:2.8969653738020562e-01:1.5228458120075412e+00:3.6659686250786522e-01:2.0004060783386173e+00:3.9521568244737343e-01:2.8737813115911588e+00:4.7506907867080955e-01:3.1568831130903021e+00:3.5481213357946789e-01:3.9902610444998965e+00 + CVs 20 + -1.2502467961973496e-01 1.1579701034474145e-01 2.1425912837417585e-01 + -2.7220085445171649e-01 2.2447467299745913e-01 4.2327552389211198e-01 + -4.3265896160942041e-01 3.1672425009033767e-01 6.1335260630790045e-01 + -5.9563576120777528e-01 3.8863193109445382e-01 7.7499272857789125e-01 + -7.4950136629046304e-01 4.4172229036532173e-01 9.0275392692829481e-01 + -8.7959090569079035e-01 4.8179432007325534e-01 9.9107985381978958e-01 + -9.7731455651933863e-01 5.2093991615926949e-01 1.0414704762428588e+00 + -1.0455567767138039e+00 5.7381536872577066e-01 1.0656159829164540e+00 + -1.1009580084092900e+00 6.4629904545191308e-01 1.0849224063293481e+00 + -1.1654091603613197e+00 7.2532090516601389e-01 1.1243943408639117e+00 + -1.2433314028164151e+00 7.8567681608595241e-01 1.2044366178440418e+00 + -1.3210022146284144e+00 8.0506663661027222e-01 1.3383736480742712e+00 + -1.3954808551881097e+00 7.8421320009680384e-01 1.5236230700058693e+00 + -1.4887092577031549e+00 7.4172680855935780e-01 1.7416828748718423e+00 + -1.6214027542001941e+00 6.3986209938914784e-01 1.9774817305320189e+00 + -1.7948271403020262e+00 3.3993677735233829e-01 2.2247042185814490e+00 + -2.1119957866315104e+00 -2.7304886774113646e-01 2.4958148763229593e+00 + -2.7158493116762021e+00 -7.9504711063367683e-01 2.7798754665623746e+00 + -2.9857039969230805e+00 -6.6158937152116071e-01 2.9234262694711419e+00 + id 13950 + loc 7.3362451791763306e-01 7.7482086420059204e-01 379 + blend 0.0000000000000000e+00 + interp 4.7706738310173141e-01:3.8470466381769691e-01:3.0709368618252353e-02:4.6544886377825101e-01:8.9888250895027433e-01:4.0200382180812777e-01:1.1744090447430975e+00:4.0834754441928478e-01:2.0324197302945262e+00:4.5237926723935235e-01:2.9819821191600222e+00:4.7706261242790043e-01:3.6692149091379127e+00 + CVs 20 + -3.2200259153324812e-01 3.7435018124728747e-01 1.8536820702476708e-01 + -6.0269380469758027e-01 7.0489449346718114e-01 3.9427082869989727e-01 + -8.7377224927627783e-01 1.0082388981104975e+00 6.2494436215727434e-01 + -1.1510968251848892e+00 1.3116582648227557e+00 8.6014012180448218e-01 + -1.4476445114342644e+00 1.6360455248037951e+00 1.0707822616630027e+00 + -1.7909102464860613e+00 1.9822016440652184e+00 1.2274039025492738e+00 + -2.2057720142842054e+00 2.3214023264155514e+00 1.3011422095058816e+00 + -2.6900603088835267e+00 2.6117130171705254e+00 1.2701881417950247e+00 + -3.2160699594361217e+00 2.8212667354537304e+00 1.1268908175385444e+00 + -3.7487079301561792e+00 2.9345175346923318e+00 8.7735497430877074e-01 + -4.2627872948482119e+00 2.9460940892729393e+00 5.3393234347425733e-01 + -4.7447721273192744e+00 2.8435069692413748e+00 1.1250121971813953e-01 + -5.1760534740758235e+00 2.6047826589467897e+00 -3.4579847004649134e-01 + -5.5467381279549617e+00 2.2395735218154700e+00 -7.6187449985984490e-01 + -5.8950071411082234e+00 1.8076580238307756e+00 -1.0526174477610293e+00 + -6.2717749521824819e+00 1.4009183886229226e+00 -1.1537735296110756e+00 + -6.6667029077102438e+00 1.1358060447711371e+00 -1.0418491201298870e+00 + -7.0066097062430783e+00 1.0777329939822669e+00 -7.7604871530118957e-01 + -7.3449749943136977e+00 1.0007793249749124e+00 -5.0567699345547079e-01 + id 13951 + loc 6.1969053000211716e-02 7.3770207166671753e-01 396 + blend 0.0000000000000000e+00 + interp 4.7491136964519320e-01:3.6667881670351093e-01:1.6689742127850860e-01:4.7490662053149679e-01:9.1508328213190482e-01:3.7379564211893135e-01:1.2385014893309110e+00:3.7970934925038757e-01:2.0721013221867559e+00:4.1432418638576762e-01:2.9062871109982469e+00:3.7988086645463870e-01:3.2456469166326003e+00:4.6152759321829462e-01:3.8816783952068246e+00 + CVs 20 + 8.9589509261335853e-01 1.7297568753471998e-01 -2.9128537681663613e-01 + 1.5122464757400294e+00 1.5691053800188590e-01 -5.1850339754407038e-01 + 2.0620933767157745e+00 6.9409842528726062e-02 -7.0458087237376799e-01 + 2.6205583853721719e+00 -4.6978530404056640e-02 -8.5123140955902432e-01 + 3.1797212972729367e+00 -1.9255701186710472e-01 -9.5237515017037178e-01 + 3.7328169343338691e+00 -3.6662820710083566e-01 -1.0110961976639390e+00 + 4.2724518864759649e+00 -5.6945350879008960e-01 -1.0362056981512024e+00 + 4.7886559492585095e+00 -8.0433995354670662e-01 -1.0337699493572250e+00 + 5.2717352733204583e+00 -1.0788315290102555e+00 -1.0059478424113768e+00 + 5.7107291691846926e+00 -1.4053595910137890e+00 -9.6089819834224044e-01 + 6.0910693959257083e+00 -1.7921776875937399e+00 -9.1314874197048201e-01 + 6.4015863795255834e+00 -2.2324545838491163e+00 -8.7273650258962876e-01 + 6.6399648572581036e+00 -2.7093662703815884e+00 -8.3932493721892687e-01 + 6.8103233422610057e+00 -3.2073619393426891e+00 -8.1621043331770493e-01 + 6.9146934638936068e+00 -3.7153135978540215e+00 -8.1472423110898895e-01 + 6.9492162083678499e+00 -4.2170554869046502e+00 -8.3839833834097066e-01 + 6.9134396129406177e+00 -4.6954654231859330e+00 -8.7888491545359149e-01 + 6.8228118596481577e+00 -5.1516851846221163e+00 -9.3790611897277454e-01 + 6.8313508624312478e+00 -5.6892658205899211e+00 -1.0708691032295106e+00 + id 13952 + loc 2.9196906089782715e-01 4.6068355441093445e-01 412 + blend 0.0000000000000000e+00 + interp 4.7651660564032039e-01:3.4609926763514837e-01:1.5628146774108298e-01:2.6117601580705618e-01:9.7864317964544700e-01:3.6010245256451301e-01:1.4282340829367499e+00:3.4338586324781262e-01:2.0727601381705996e+00:4.4378618894111682e-01:2.7682315776449915e+00:4.7651184047426398e-01:3.0555288189078702e+00:3.9827126408712998e-01:3.7798228805074578e+00 + CVs 20 + -1.4282292239583905e-01 1.7474652860889520e-01 -6.0171543076040312e-01 + -2.7410140146139317e-01 2.6197355360046132e-01 -1.0319266662048430e+00 + -3.9017175750624089e-01 3.2499063587385724e-01 -1.4295423609019267e+00 + -4.8642688110950538e-01 3.9502850729946748e-01 -1.8669865654774935e+00 + -5.5539169747131856e-01 4.6258193132066439e-01 -2.3392094096392073e+00 + -5.8656801574456807e-01 5.1721885285171743e-01 -2.8362961045939379e+00 + -5.6925087264192842e-01 5.5012203889102118e-01 -3.3446173742540104e+00 + -4.9993199973846747e-01 5.5395767888404712e-01 -3.8483781465999858e+00 + -3.8272148868833883e-01 5.2465602294286795e-01 -4.3303302754579187e+00 + -2.2625274589832645e-01 4.6256875636719652e-01 -4.7747927096447711e+00 + -4.8244130584977230e-02 3.6171313505549429e-01 -5.1823074457174645e+00 + 1.1773792898601732e-01 1.9286083242783980e-01 -5.5815687491923569e+00 + 2.2924867748568278e-01 -7.6202501775582299e-02 -5.9888958863135340e+00 + 2.6639888493357311e-01 -4.2893116094683448e-01 -6.3656223879463143e+00 + 2.4142713863845927e-01 -8.2088356726980605e-01 -6.6727371201574801e+00 + 1.6257634279492472e-01 -1.2246360738186697e+00 -6.9035850143064916e+00 + 3.0428913506359345e-02 -1.6198538077935529e+00 -7.0626611982151459e+00 + -1.4300880088625945e-01 -1.9811981702846131e+00 -7.1561365075719268e+00 + -2.5798723647858612e-01 -2.2203522885044391e+00 -7.2026265118372654e+00 + id 13953 + loc 8.8954067230224609e-01 1.6493365168571472e-01 399 + blend 0.0000000000000000e+00 + interp 4.5137260444561711e-01:4.2575492532511344e-01:1.0493860622727236e-01:3.4608154600075691e-01:1.0619384328286479e+00:3.4195189653432229e-01:1.9358162737253926e+00:4.5136809071957268e-01:2.2276838988313825e+00:4.5121179365514935e-01:2.7808367467872950e+00:3.9627209363486993e-01:3.0320576996879915e+00:3.1052551541242618e-01:3.7999647272929487e+00 + CVs 20 + 2.2777471783403319e-01 2.3734528789083598e-01 3.9933273539330433e-02 + 4.5392236414167697e-01 5.0687791003785787e-01 1.1545604545450720e-01 + 6.6473954708052641e-01 7.8859270258828695e-01 2.0675660835535192e-01 + 8.6593989897255164e-01 1.0721559934255667e+00 3.0678057850574691e-01 + 1.0735347390609231e+00 1.3525547989041236e+00 4.1885919996043908e-01 + 1.3027467021246495e+00 1.6190862399986921e+00 5.5135702179002166e-01 + 1.5649580796809386e+00 1.8536129659344431e+00 7.1433892268448906e-01 + 1.8638331962339774e+00 2.0335629993595687e+00 9.1363210320519561e-01 + 2.1904673693173167e+00 2.1402180974185407e+00 1.1456768854687518e+00 + 2.5258835663073675e+00 2.1697250296981370e+00 1.3987289527861047e+00 + 2.8484673631641493e+00 2.1348919613039614e+00 1.6617965980596767e+00 + 3.1374562883267312e+00 2.0590209691370949e+00 1.9300455400780177e+00 + 3.3827726870681163e+00 1.9603769273886675e+00 2.2045192277801275e+00 + 3.5864778610605947e+00 1.8440076493967903e+00 2.4869354341859671e+00 + 3.7349730210126424e+00 1.7462988837983802e+00 2.7476972940562581e+00 + 3.7831341359857915e+00 1.7829691680990065e+00 2.8536910970212630e+00 + 3.6861680808727901e+00 1.9342581454346863e+00 2.5123971682494508e+00 + 3.5891837192868383e+00 1.8481278386221156e+00 2.0441461704092072e+00 + 3.6089319514244136e+00 1.9985574375782120e+00 2.1701968758096841e+00 + id 13954 + loc 2.6218286156654358e-01 3.5564255714416504e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0077673596435442e-01:3.8361844058797445e-01:1.2496313792735314e-01:2.5307949461822682e-01:9.5877586269177273e-01:2.6230631995435272e-01:1.8544901310065192e+00:3.6333485209233285e-01:2.1778839613740009e+00:2.6226260070056501e-01:3.1646087900463975e+00:4.0077272819699478e-01:3.8481475500477904e+00 + CVs 20 + 6.9709546113459142e-02 3.3611043420464620e-01 -4.7843534428831776e-02 + 9.5852554036666371e-02 6.4285570825869931e-01 -1.0847223509323903e-01 + 9.9847804985784216e-02 9.4783391176251386e-01 -1.7539395745170147e-01 + 8.8225774420241931e-02 1.2627688151594576e+00 -2.4586102931039877e-01 + 4.4506089992993658e-02 1.5808732335531857e+00 -3.2419942211768726e-01 + -5.0331725415793227e-02 1.8903635426022563e+00 -4.1244002595736406e-01 + -2.1511995907871051e-01 2.1712832456811793e+00 -5.0616627132248393e-01 + -4.5842852797905786e-01 2.3949220876738764e+00 -5.8989542632281333e-01 + -7.6879927281324612e-01 2.5314072569573431e+00 -6.3756563068846717e-01 + -1.1146902337905282e+00 2.5628400951912966e+00 -6.2311090288488324e-01 + -1.4587863541044916e+00 2.4883202639528532e+00 -5.3336666844216618e-01 + -1.7680823458843189e+00 2.3168797827287251e+00 -3.7133249739857727e-01 + -2.0123831619771737e+00 2.0743658920913979e+00 -1.6059231473231150e-01 + -2.1631018363753149e+00 1.8313391063394435e+00 5.1916115684873081e-02 + -2.1820015094735696e+00 1.7003160446333145e+00 2.0884969917039381e-01 + -1.9933051390855028e+00 1.6924230038561898e+00 2.7302716659049103e-01 + -1.5732205591713726e+00 1.5560019857915719e+00 2.8156878842831179e-01 + -1.2297397056523303e+00 9.2222036805536134e-01 3.9039941673186773e-01 + -1.2387080714669121e+00 1.0394015203627789e+00 4.7200410380446839e-01 + id 13955 + loc 8.3222377300262451e-01 8.8952302932739258e-01 403 + blend 0.0000000000000000e+00 + interp 4.0913238546874653e-01:2.9389648285130349e-01:9.3297943668825833e-01:3.7185016748868610e-01:1.4575535584038246e+00:2.7900666199591745e-01:2.1083379356317140e+00:4.0912829414489188e-01:2.9908143936896243e+00:2.6149744907919109e-01:3.9690278203409326e+00 + CVs 20 + -1.1901029710406753e-01 -7.2103171878764027e-03 -5.2027632548042810e-03 + -2.2341664439828274e-01 -1.6645685996981158e-03 -1.6261421042565935e-03 + -3.2926902989814211e-01 4.4372420161150061e-03 7.4324134663392855e-03 + -4.4525850369049541e-01 2.5729780038449834e-03 2.1033223159607359e-02 + -5.6934288489395701e-01 -8.6720939858300761e-03 4.0128121756866988e-02 + -6.9845096517053618e-01 -3.0448905633754408e-02 6.5696473870060806e-02 + -8.2918807988350762e-01 -6.3522838537138526e-02 9.8575077107798573e-02 + -9.5823680393151411e-01 -1.0852682677624842e-01 1.3887976293649557e-01 + -1.0825317140311692e+00 -1.6605525855338349e-01 1.8578970857335242e-01 + -1.1979509066595240e+00 -2.3456522577462080e-01 2.3709707675463981e-01 + -1.2982587535713765e+00 -3.1001428695731037e-01 2.8806690310338201e-01 + -1.3777599214646576e+00 -3.8697920355030924e-01 3.3127404839814312e-01 + -1.4398097817775353e+00 -4.6207189085407774e-01 3.6149027203025852e-01 + -1.5057062034846664e+00 -5.4088588090409928e-01 3.8835274971988182e-01 + -1.5999193538212320e+00 -6.3361554033119982e-01 4.3811993180861530e-01 + -1.7208985288082828e+00 -7.3198803489859110e-01 5.2620656657415221e-01 + -1.8472494377551283e+00 -8.1443874027873486e-01 6.3704037851189699e-01 + -1.9634364452369883e+00 -8.6955809874442636e-01 7.3796863852574202e-01 + -1.9508627191601224e+00 -8.6329516510500592e-01 7.4526979771880220e-01 + id 13956 + loc 8.0375719070434570e-01 2.6242223381996155e-01 373 + blend 0.0000000000000000e+00 + interp 3.8790210860381308e-01:3.8789822958272707e-01:8.0045445647115165e-01:2.2089267150633546e-01:1.0576335538224779e+00:2.1793808021451233e-01:1.8828498477750693e+00:2.4924387522408653e-01:2.7258896560807382e+00:2.8178179851784446e-01:3.3877657300350186e+00:2.6420696558987533e-01:3.9970258231959281e+00 + CVs 20 + 3.5198419648469359e-01 3.6412243563355773e-01 5.9916043368331701e-03 + 7.0421376440223493e-01 6.6721622793408653e-01 2.4188501035294296e-02 + 1.0569060519464351e+00 8.8605395613966531e-01 4.8517148608822697e-02 + 1.4048576477367245e+00 1.0652614516158707e+00 7.7403311326475821e-02 + 1.7206545035132232e+00 1.2535617228351961e+00 1.0334117245044966e-01 + 2.0090088715045282e+00 1.4763993492796015e+00 1.3412519814829427e-01 + 2.2822893408183478e+00 1.7436154452471122e+00 1.9708406219511776e-01 + 2.5261388029890397e+00 2.0527748544232853e+00 3.1201824513618481e-01 + 2.7185280463888821e+00 2.3973631325451628e+00 4.8169543717329177e-01 + 2.8504274788889754e+00 2.7725056952314731e+00 7.0567856348697566e-01 + 2.9289652878458563e+00 3.1673975118021214e+00 9.9423905291675341e-01 + 2.9650311806387668e+00 3.5443682664639313e+00 1.3732691660334129e+00 + 2.9496415758892796e+00 3.8246994657971349e+00 1.8678461442032233e+00 + 2.8416282749849668e+00 3.9095853629890263e+00 2.4458179251934649e+00 + 2.6120706700133725e+00 3.7348131428644167e+00 3.0141808665722802e+00 + 2.3770147704518867e+00 3.2440036620580499e+00 3.5497650381908539e+00 + 2.4894015300238976e+00 2.3581516362308621e+00 3.9849960247290817e+00 + 3.0556696945369319e+00 1.5149334628188025e+00 4.1761102994199826e+00 + 3.3323430874248330e+00 9.4816061486875691e-01 4.4681288597283420e+00 + id 13957 + loc 7.1913039684295654e-01 8.0556631088256836e-02 382 + blend 0.0000000000000000e+00 + interp 5.2530224754345411e-01:2.6723861121013714e-01:7.9568154536391100e-01:4.9518545260102087e-01:1.0000394996381121e+00:5.2529699452097867e-01:1.9394825317243543e+00:4.9176785234042381e-01:2.2632176979307888e+00:5.1994923637488799e-01:2.8076881553587150e+00:3.0140233729653348e-01:3.1881386853420768e+00:3.5124122936698704e-01:3.9841644885036875e+00 + CVs 20 + -7.2022159992246149e-01 7.5645716030533827e-02 5.2641304948211287e-01 + -1.1947342724387222e+00 3.0709213890423082e-02 9.3911652760766484e-01 + -1.6202753242277097e+00 -4.9824859466098270e-02 1.3225409249949938e+00 + -2.0754003473932512e+00 -1.1731949798843877e-01 1.6920561329498813e+00 + -2.5656289323967014e+00 -1.6042452931770423e-01 2.0298046127321419e+00 + -3.0990691080638681e+00 -1.7623575901376554e-01 2.3266774291404677e+00 + -3.6824775951788395e+00 -1.7952563200019234e-01 2.5847605100913857e+00 + -4.3160555970845751e+00 -2.0526847477201504e-01 2.8082482499600459e+00 + -4.9867163353161734e+00 -2.9949435067250785e-01 2.9967965428701859e+00 + -5.6611508615878234e+00 -5.0182934379086142e-01 3.1491945881551575e+00 + -6.2856477303298082e+00 -8.2806847094520464e-01 3.2625079724935495e+00 + -6.8071603181065461e+00 -1.2602741382326053e+00 3.3246274798927216e+00 + -7.2119082957733536e+00 -1.7572686396668917e+00 3.3210869994336485e+00 + -7.5160903634240528e+00 -2.2887199664243298e+00 3.2563400869154862e+00 + -7.7326487689495051e+00 -2.8320630448120632e+00 3.1485524440592600e+00 + -7.8806086153265635e+00 -3.3800373301002429e+00 3.0269291648318162e+00 + -7.9818010835413817e+00 -3.9741158373852095e+00 2.9332862810725757e+00 + -8.0496332885468842e+00 -4.6211529683958501e+00 2.9096314641182497e+00 + -8.0169154050982758e+00 -4.9821843882843657e+00 2.8711016874597202e+00 + id 13958 + loc 1.5581199899315834e-02 4.7211450338363647e-01 380 + blend 0.0000000000000000e+00 + interp 2.9805195272029417e-01:2.9804897220076698e-01:6.4279295213889265e-01:1.9896448834436539e-01:1.1148791975184145e+00:1.0399120499265628e-01:2.7285002878425093e+00:2.8655210724249408e-01:3.7991406708754161e+00 + CVs 20 + -3.4377065395254858e-01 3.9120059735959534e-01 5.0659536118656256e-01 + -6.0431907413894281e-01 6.8113214206499595e-01 9.7207513572079984e-01 + -8.4542767019535070e-01 9.1568112170949945e-01 1.4368004550466482e+00 + -1.0990520769889525e+00 1.1211820177587311e+00 1.9087517592039756e+00 + -1.3731094295365229e+00 1.2994202515567703e+00 2.3683941868604124e+00 + -1.6688122041950395e+00 1.4446006695254763e+00 2.8029326648515291e+00 + -1.9820359072267826e+00 1.5536056627994768e+00 3.2065006495011055e+00 + -2.3077029776225988e+00 1.6317381554823012e+00 3.5772224177756171e+00 + -2.6446917169385578e+00 1.6888433226116191e+00 3.9182323129710901e+00 + -2.9996374205397784e+00 1.7315016435045150e+00 4.2383202841761332e+00 + -3.3867369615296425e+00 1.7541761852632733e+00 4.5540272011211664e+00 + -3.8194037073894229e+00 1.7297954904928126e+00 4.8855186350222892e+00 + -4.2832088147552696e+00 1.6186879689088367e+00 5.2281982221392456e+00 + -4.7174500106431685e+00 1.4299293550295311e+00 5.5329322527610110e+00 + -5.0666060064301943e+00 1.2395487876661599e+00 5.7471489229157076e+00 + -5.3486147942502766e+00 1.0974185800659231e+00 5.8418612240411489e+00 + -5.6286163670825804e+00 9.9110375282743757e-01 5.8086102959669432e+00 + -5.9571324294913826e+00 8.6704718368986189e-01 5.7475238851158874e+00 + -6.2765997809205878e+00 7.2400977984498960e-01 5.9470816461828928e+00 + id 13959 + loc 6.2963771820068359e-01 1.6552996635437012e-01 415 + blend 0.0000000000000000e+00 + interp 3.9566250730117036e-01:3.9565855067609734e-01:7.1530372290113275e-02:2.8419394954134897e-01:9.6933799865325054e-01:2.9519333484068072e-01:2.0003257886957169e+00:3.9123912252577098e-01:2.9998823220192805e+00:3.1664483920626157e-01:3.7972764111931592e+00 + CVs 20 + -1.6588841130665927e-01 1.1319994845602893e-01 6.7748125093722716e-03 + -3.0703765332566119e-01 2.0579430447840064e-01 4.5643941289060158e-02 + -4.5689434531358020e-01 3.1167416694871231e-01 8.9736007709386223e-02 + -6.2297187161488266e-01 4.4267526316367811e-01 1.1219462180722467e-01 + -8.0790722749929067e-01 5.9750228806907835e-01 1.0505251698897383e-01 + -1.0141925705173527e+00 7.7295405341990231e-01 5.8521258071738247e-02 + -1.2396604401645051e+00 9.6292998131015373e-01 -3.8401806362778235e-02 + -1.4777300744663107e+00 1.1594827991157490e+00 -1.9314921241410943e-01 + -1.7214199584368262e+00 1.3552738430528446e+00 -4.0799874882377274e-01 + -1.9633614570202107e+00 1.5440542216564812e+00 -6.8184624527978721e-01 + -2.1950840535691478e+00 1.7196999077876454e+00 -1.0053813419667046e+00 + -2.4219556638107136e+00 1.8745899008785381e+00 -1.3489857742400848e+00 + -2.6803655669006594e+00 1.9978027840702661e+00 -1.6645188981457193e+00 + -3.0065762489796439e+00 2.0796341922631947e+00 -1.9110913561866487e+00 + -3.3994790351819333e+00 2.1178720136550964e+00 -2.0793670392865407e+00 + -3.8361118899154589e+00 2.1149485699012214e+00 -2.1684053335351003e+00 + -4.2846083264858814e+00 2.0805131651654341e+00 -2.1580848601414888e+00 + -4.7063648256826882e+00 2.0359012929004283e+00 -2.0356281950065958e+00 + -5.0834932193823867e+00 2.0289732395223119e+00 -2.0648181004267818e+00 + id 13960 + loc 5.2569133043289185e-01 2.1010282635688782e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3088377797558719e-01:4.3087946913780745e-01:4.1518221678509903e-01:3.0701074098703318e-01:1.0191426401225763e+00:2.9838713046052184e-01:1.9672663251597171e+00:3.4591776978365096e-01:2.4133343259623530e+00:3.2956021663300095e-01:3.0072481326713905e+00:3.3650687319536748e-01:3.9469174335926223e+00 + CVs 20 + 1.1505098132556235e-03 3.2108270031562014e-01 1.6003502768510339e-01 + -3.1988449870060442e-02 6.2546928031201587e-01 3.1965026831832377e-01 + -9.1103245784327935e-02 9.1040536571979813e-01 4.6279104029851781e-01 + -1.8241273321791318e-01 1.1717418382359934e+00 5.8644664904226618e-01 + -2.9067405278469871e-01 1.3964689323067203e+00 6.8385570691862818e-01 + -3.7048558524692221e-01 1.5718421714861073e+00 7.4910419859405553e-01 + -4.0356665292691585e-01 1.6939300657218221e+00 7.9066705815025040e-01 + -4.1222761855917367e-01 1.7952023638797638e+00 8.2905729692538910e-01 + -4.0329333526847000e-01 1.9041403536705650e+00 8.7354889384082712e-01 + -3.8696853497284667e-01 2.0069515701742811e+00 9.1350100979835092e-01 + -3.9378252653688461e-01 2.0979193809768830e+00 9.2625220526118424e-01 + -4.2883489947366793e-01 2.2074825675870202e+00 9.2129810115477606e-01 + -4.6051276793453855e-01 2.3413641264996916e+00 9.4057291739371485e-01 + -4.6126727041383453e-01 2.4640182564080066e+00 9.9481112593760512e-01 + -4.3553513048901804e-01 2.5480886750029108e+00 1.0644141903428521e+00 + -3.9423155429525791e-01 2.6417030707961047e+00 1.1587082493184284e+00 + -3.0844816249742335e-01 2.7904473230435132e+00 1.3368956534692606e+00 + -1.9297594349106384e-01 2.9002244384289146e+00 1.5865637978269587e+00 + -3.8944995999640319e-01 2.7887574300848836e+00 1.5427172066591259e+00 + id 13961 + loc 6.1476325988769531e-01 2.5602564215660095e-01 402 + blend 0.0000000000000000e+00 + interp 4.4430024422129344e-01:3.8376942146348436e-01:2.0487372929343317e-01:3.6413540804207511e-01:1.0232303534145624e+00:3.8529733563110680e-01:1.7231437654071440e+00:3.7476312903217357e-01:2.0948231411279332e+00:4.4429580121885126e-01:2.8380824155824795e+00:3.8726087394227093e-01:3.1483396523269054e+00:4.1432337402413050e-01:3.8812287673158785e+00 + CVs 20 + 3.6094617059143497e-01 3.9331737482379714e-01 8.7998203768849648e-02 + 7.1171025063400606e-01 8.0703769387594215e-01 2.1079464704759224e-01 + 1.0503910416283693e+00 1.1966806481458516e+00 3.5733018830574875e-01 + 1.3918629880781612e+00 1.4977727476067408e+00 4.9113652078782044e-01 + 1.7390778722669453e+00 1.6759070085795951e+00 5.8742552986519292e-01 + 2.0832867003976738e+00 1.7414695903033257e+00 6.5687556839595396e-01 + 2.4249146370949455e+00 1.7154481184673860e+00 7.2928867057925628e-01 + 2.7672770058653318e+00 1.6040513663123146e+00 8.3368828054519029e-01 + 3.0831916498744731e+00 1.4031697051696037e+00 9.7891595641061180e-01 + 3.3154486960012686e+00 1.1284596120579868e+00 1.1423217475547405e+00 + 3.4305871190819435e+00 8.2517694596937730e-01 1.2874473539440503e+00 + 3.4505597507450174e+00 5.1076763092156208e-01 1.4144854508457723e+00 + 3.4212356906911525e+00 1.4838398274719822e-01 1.5576025023344005e+00 + 3.4169427731250814e+00 -3.0021209797643533e-01 1.7496888347176907e+00 + 3.5282666166812677e+00 -8.3243651760321780e-01 2.0133301085877497e+00 + 3.7927037877435925e+00 -1.3892620211514215e+00 2.3553987546534119e+00 + 4.1412014341763914e+00 -1.9095800927671145e+00 2.7712375281051065e+00 + 4.4567108803115110e+00 -2.3806842132161776e+00 3.2473342220012653e+00 + 4.6335328084217471e+00 -2.7991132648832520e+00 3.7146989003294673e+00 + id 13962 + loc 8.6927992105484009e-01 2.7964940667152405e-01 401 + blend 0.0000000000000000e+00 + interp 4.7329624003182902e-01:4.4141993323367995e-01:4.6692183962822598e-02:4.2862754255642865e-01:6.2666302134588436e-01:2.7300881061003657e-01:1.6064408748078298e+00:4.7329150706942874e-01:2.4100237310462704e+00:4.1994835233161182e-01:3.0117782293760391e+00:4.4283627041763329e-01:3.6574554277776681e+00 + CVs 20 + 3.3073573427113173e-01 4.3323526721107825e-01 4.0687100854972874e-02 + 6.3486203393067786e-01 8.9275924049465638e-01 1.3913920054074430e-01 + 9.0531746594362494e-01 1.3602010203292751e+00 2.9968692661197116e-01 + 1.1435287497150586e+00 1.8077806727130787e+00 5.3292590101860715e-01 + 1.3563421958150310e+00 2.2044789706330112e+00 8.3707488258720353e-01 + 1.5522988097629120e+00 2.5272515841374288e+00 1.1967838745299013e+00 + 1.7423730725853179e+00 2.7604151627028348e+00 1.5874242416078865e+00 + 1.9371219396890458e+00 2.8956376361500871e+00 1.9820614247251269e+00 + 2.1327233239713612e+00 2.9350370501253709e+00 2.3731570044125752e+00 + 2.3100036251918032e+00 2.8768611342531889e+00 2.7694989559944174e+00 + 2.4479197801843768e+00 2.7008835995359228e+00 3.1468970640136162e+00 + 2.5354178742739575e+00 2.3931465249074737e+00 3.4242331312542280e+00 + 2.5780248483965678e+00 2.0055424366590269e+00 3.5203755909669328e+00 + 2.6143117206207203e+00 1.6476082491017947e+00 3.4583651080458315e+00 + 2.7129608963019454e+00 1.3732815532698979e+00 3.3475344363436315e+00 + 2.9529294395029604e+00 1.1897799792840065e+00 3.2688614664156290e+00 + 3.3849016549338256e+00 1.1585477859487443e+00 3.2363373272384148e+00 + 3.9074721146467821e+00 1.2747701520348755e+00 3.2379001116286843e+00 + 4.3557551791514690e+00 1.1134913685964734e+00 3.3599138983718482e+00 + id 13963 + loc 1.1023379862308502e-01 2.6819017529487610e-01 378 + blend 0.0000000000000000e+00 + interp 4.9012129521345527e-01:3.2508235128236929e-01:9.2769313220995353e-02:4.5949896758725278e-01:8.9881062590369143e-01:3.4067098849120342e-01:1.1982550541116324e+00:4.7319346208272728e-01:1.9353136835696865e+00:3.9156574771525704e-01:2.1416923435476454e+00:4.7664769035969679e-01:2.9901178122852210e+00:4.9011639400050316e-01:3.5515925448700454e+00 + CVs 20 + 3.0368771147762175e-01 2.9468570017224111e-01 -3.7553045651421091e-01 + 5.5174080714157858e-01 5.2047073199439042e-01 -7.0859810093443043e-01 + 7.8989094131410065e-01 7.0827810149594728e-01 -1.0239239017159003e+00 + 1.0426575921009431e+00 8.8124323177073327e-01 -1.3311182960840560e+00 + 1.3123078372457044e+00 1.0495526644654949e+00 -1.6239249235872919e+00 + 1.6025261402215170e+00 1.2179854002835397e+00 -1.9030899508699877e+00 + 1.9205996039912288e+00 1.3828571851480036e+00 -2.1801792403974223e+00 + 2.2767951563125965e+00 1.5332506721290893e+00 -2.4677896925583629e+00 + 2.6831335071051088e+00 1.6517588093554030e+00 -2.7737932809458146e+00 + 3.1440655768411006e+00 1.7122499157614501e+00 -3.1030541148388644e+00 + 3.6437409663005544e+00 1.6799386684799562e+00 -3.4561444608822987e+00 + 4.1482899044647148e+00 1.5159510153198412e+00 -3.8214663726775315e+00 + 4.6153871709389991e+00 1.1953746187185597e+00 -4.1734053119002930e+00 + 5.0126975174295483e+00 7.5214630341168931e-01 -4.4921810208561501e+00 + 5.3530754410128942e+00 2.8442867502514035e-01 -4.7878838373652242e+00 + 5.6578670119059105e+00 -1.2181484685599209e-01 -5.0896687868550021e+00 + 5.8997016177845545e+00 -4.2833873079396545e-01 -5.4272779615831341e+00 + 6.0372849733388563e+00 -6.3975437994496964e-01 -5.7989854178255325e+00 + 6.1713966082443266e+00 -9.3696665911457933e-01 -6.0730876966938059e+00 + id 13964 + loc 2.7008208632469177e-01 5.4658818244934082e-01 395 + blend 0.0000000000000000e+00 + interp 5.0976972211440741e-01:3.1442368011826516e-01:4.3607176601830344e-01:3.6545189731150557e-01:1.0095194073687392e+00:3.4392784185140185e-01:1.5509506075010078e+00:4.1060259352487782e-01:2.3540198941790185e+00:3.4213698815191634e-01:3.0485148606371779e+00:5.0976462441718629e-01:3.8742944299593414e+00 + CVs 20 + 3.0192539632280130e-01 2.4780225494075572e-01 -1.8801362833343088e-01 + 5.6887099284465747e-01 4.5851527594033048e-01 -3.4332061733085706e-01 + 8.3923616767223341e-01 6.5287209988338202e-01 -4.8870700321702576e-01 + 1.1373947062324028e+00 8.4299649300760948e-01 -6.3428572626205915e-01 + 1.4668903328530514e+00 1.0228614945253129e+00 -7.7716628044065983e-01 + 1.8293334554702023e+00 1.1865443528822190e+00 -9.1705721955638053e-01 + 2.2246370754739941e+00 1.3307891150177553e+00 -1.0593307623452271e+00 + 2.6531629287412821e+00 1.4514541738225453e+00 -1.2115479253186892e+00 + 3.1197166638027438e+00 1.5377629602057075e+00 -1.3793404513403655e+00 + 3.6302321394356336e+00 1.5700092656093869e+00 -1.5701791125398588e+00 + 4.1721092602977841e+00 1.5234466551139687e+00 -1.7932651640214095e+00 + 4.7069571331555515e+00 1.3852980213086468e+00 -2.0454255420246739e+00 + 5.2020629015715603e+00 1.1640710035231410e+00 -2.3097245152137620e+00 + 5.6491853315636789e+00 8.7183784171455958e-01 -2.5731233349889306e+00 + 6.0473346987426861e+00 5.1471826777104868e-01 -2.8300010042282313e+00 + 6.3897695313460678e+00 1.0071493322363878e-01 -3.0753178091370881e+00 + 6.6675293481741917e+00 -3.5410968160158030e-01 -3.2993491851817844e+00 + 6.8757148609276433e+00 -8.2182078101843192e-01 -3.4855152026262752e+00 + 7.0087349648954884e+00 -1.1629921018971863e+00 -3.5933404010490047e+00 + id 13965 + loc 5.3999072313308716e-01 8.4937846660614014e-01 393 + blend 0.0000000000000000e+00 + interp 4.6914583120005127e-01:4.6914113974173927e-01:1.8050112732362378e-01:3.9143373858766162e-01:7.5664241706685087e-01:3.1208059981486969e-01:1.6356586243783986e+00:3.8284878014009904e-01:2.3599893475504565e+00:4.1552288316164909e-01:2.9404550001138983e+00:2.7395288287358793e-01:3.2504879446281949e+00:3.8951587190627696e-01:3.9560907946551676e+00 + CVs 20 + -2.3958515600372768e-01 2.8762496918671682e-01 -2.1403942059354861e-01 + -4.7594804899399590e-01 5.6447991726703828e-01 -4.1074166554832020e-01 + -7.0649395959871675e-01 8.4260179526058032e-01 -6.1351992992370219e-01 + -9.3498787308800901e-01 1.1238839289894094e+00 -8.2958765689228053e-01 + -1.1746280713337602e+00 1.4049827046512657e+00 -1.0532294129618114e+00 + -1.4366879773795387e+00 1.6801844583548551e+00 -1.2775632316501562e+00 + -1.7269530694442494e+00 1.9404022326496440e+00 -1.4948158159235740e+00 + -2.0493287444754245e+00 2.1695303768351497e+00 -1.6980284524341935e+00 + -2.4166062706604556e+00 2.3446703951522112e+00 -1.8898484222101930e+00 + -2.8429303881490364e+00 2.4483477187458358e+00 -2.0907749980561907e+00 + -3.3158939540097827e+00 2.4800219627993840e+00 -2.3305856246629357e+00 + -3.8064086973782656e+00 2.4380617536993281e+00 -2.6209502435470169e+00 + -4.3007519072168696e+00 2.2971909140354390e+00 -2.9518806251800807e+00 + -4.7836594259136263e+00 2.0285525533824140e+00 -3.3133277699948822e+00 + -5.2333761036209392e+00 1.6292324593907774e+00 -3.6948433607254034e+00 + -5.6714201559362838e+00 1.1179761361405074e+00 -4.0348663331861818e+00 + -6.1614518330979795e+00 5.3821697189230022e-01 -4.2099475332636738e+00 + -6.6904746654752270e+00 -2.9446705821460029e-02 -4.1809885207596649e+00 + -7.1319046468857543e+00 -5.5784401886793566e-01 -4.2753935542145527e+00 + id 13966 + loc 6.2340229749679565e-01 1.2534606456756592e-01 379 + blend 0.0000000000000000e+00 + interp 5.0771617189038887e-01:3.6571679889625053e-01:2.0492046421531462e-01:1.8456710730425507e-01:1.1136976838954298e+00:5.0771109472866993e-01:2.1764634521395378e+00:3.8743857107101498e-01:2.9840947833562828e+00:2.1964443158965533e-01:3.3342494651914176e+00 + CVs 20 + 5.3305592943487778e-01 3.0259160029105714e-01 -5.5216536181914681e-02 + 9.7525801371179677e-01 5.2504447006076305e-01 -1.8901112702271289e-01 + 1.3691392184799855e+00 6.7644235705467137e-01 -3.6829900365108859e-01 + 1.7526426156274559e+00 8.1951316753647152e-01 -5.6871514997640504e-01 + 2.1364536044368792e+00 1.0012207043536026e+00 -7.5699298931293668e-01 + 2.5265814928101515e+00 1.2346961005350450e+00 -8.9819933813553798e-01 + 2.9260190479453785e+00 1.5159004006850039e+00 -9.6881253510405407e-01 + 3.3256276037025496e+00 1.8335293955408654e+00 -9.5786824460311681e-01 + 3.7126119269468512e+00 2.1711769590958703e+00 -8.6662839147319759e-01 + 4.0880756834919199e+00 2.5115008846111468e+00 -7.0269718007709403e-01 + 4.4760562392455991e+00 2.8374210727178806e+00 -4.6857875529544907e-01 + 4.9159259374950031e+00 3.1244861136884188e+00 -1.4368806398274031e-01 + 5.4176448039083906e+00 3.3091856442608156e+00 3.0284896386952337e-01 + 5.9314293369876800e+00 3.2979575166596442e+00 8.7074103397532743e-01 + 6.3577028617998295e+00 3.0354171102147860e+00 1.5143268108468759e+00 + 6.6174804382149368e+00 2.5463334752891971e+00 2.1299551656234637e+00 + 6.7714554795344917e+00 1.9044429942985763e+00 2.5465125218529483e+00 + 6.9497294194935417e+00 1.2928861442753332e+00 2.5832444261388101e+00 + 7.1871139495402394e+00 8.2029265435419996e-01 2.3308039440948454e+00 + id 13967 + loc 2.1912701427936554e-02 2.1240903064608574e-02 396 + blend 0.0000000000000000e+00 + interp 4.5810274903755177e-01:3.3239460502838342e-01:9.0568978878152184e-01:3.0281370297983584e-01:1.8321017778653685e+00:4.5809816801006142e-01:2.2741696586551425e+00:3.3126681680537673e-01:2.9639349478936556e+00:3.8316225090204237e-01:3.4052169187778105e+00:4.0741869282627557e-01:3.9919255690591120e+00 + CVs 20 + -2.1303694225895023e-01 1.9696930885766598e-01 -5.4694752429742599e-01 + -3.9558644156616907e-01 3.0921656620905508e-01 -9.4905030751246333e-01 + -5.6618685614127617e-01 4.0136821650869015e-01 -1.3009738640020414e+00 + -7.3214163191544734e-01 4.9912450895942273e-01 -1.6378100274975336e+00 + -8.9306294935749775e-01 6.0181730607346706e-01 -1.9622110380628406e+00 + -1.0486029724971975e+00 7.0979645617060372e-01 -2.2794711943181261e+00 + -1.2012599604143595e+00 8.2542847816912279e-01 -2.5990829011100169e+00 + -1.3543909195715871e+00 9.4840297104652604e-01 -2.9367087592699019e+00 + -1.5048878999304782e+00 1.0690108667996334e+00 -3.3101846786819964e+00 + -1.6501983939585796e+00 1.1677407307173198e+00 -3.7318125786079799e+00 + -1.8072762758792202e+00 1.2131489460351665e+00 -4.1987526076040362e+00 + -1.9983900001777342e+00 1.1694673193407596e+00 -4.6862616892529818e+00 + -2.2180975041277589e+00 1.0185152893117853e+00 -5.1636188619300549e+00 + -2.4427782454512474e+00 7.6371486637632380e-01 -5.6090689023078424e+00 + -2.6624817080385710e+00 4.1826399168196104e-01 -6.0078182239924542e+00 + -2.8832694778595815e+00 -4.7498561206031908e-03 -6.3470618653791391e+00 + -3.0998705792075913e+00 -4.8787889641489368e-01 -6.6096773211314552e+00 + -3.2864771246305033e+00 -9.9377627302267957e-01 -6.7756067535298810e+00 + -3.4070511696221075e+00 -1.4333729790503584e+00 -6.8024482361142065e+00 + id 13968 + loc 9.6491569280624390e-01 9.4398015737533569e-01 412 + blend 0.0000000000000000e+00 + interp 6.0532492267708782e-01:2.9539502395284623e-01:6.9069815293505066e-01:4.3073271510783256e-01:1.1807506516770605e+00:6.0531886942786106e-01:2.6176347068007635e+00:3.6907332399622306e-01:2.9467737504686156e+00:4.9974523956515438e-01:3.2142219438741515e+00:4.5791719308789369e-01:3.9951568481812862e+00 + CVs 20 + 8.6114897401083745e-01 1.7047873177835104e-01 -2.0750883382891444e-01 + 1.4280136884081924e+00 2.1888215936222791e-01 -3.9281391134505189e-01 + 1.9251355185418331e+00 2.1370478576508528e-01 -5.7746026538269946e-01 + 2.4626585804395842e+00 1.8666973241420121e-01 -7.6934723415388429e-01 + 3.0301401830476564e+00 1.3284614082785062e-01 -9.5955281850931839e-01 + 3.6137102740568077e+00 5.0843205288038540e-02 -1.1387002664821630e+00 + 4.1984690897017760e+00 -5.6969484015639282e-02 -1.2986561578984941e+00 + 4.7705074725172611e+00 -1.8614904267821464e-01 -1.4338495075150393e+00 + 5.3175506796945218e+00 -3.3116223329591121e-01 -1.5421973805365881e+00 + 5.8300114123906415e+00 -4.8617984733106256e-01 -1.6240061028746868e+00 + 6.3037286145525169e+00 -6.5421299168259095e-01 -1.6859896488652877e+00 + 6.7427746614508743e+00 -8.5724473841839499e-01 -1.7484880459547472e+00 + 7.1504316711775333e+00 -1.1170337544078484e+00 -1.8342794642817120e+00 + 7.5243594019125792e+00 -1.4257655112440559e+00 -1.9469726734903401e+00 + 7.8659856918583282e+00 -1.7651682272707954e+00 -2.0798523394675699e+00 + 8.1758137973180869e+00 -2.1247321058023854e+00 -2.2326487203593004e+00 + 8.4516403136689959e+00 -2.4942137571748386e+00 -2.4082012151077965e+00 + 8.6938678785717940e+00 -2.8580515417165682e+00 -2.6004148034071362e+00 + 8.9214770803087529e+00 -3.1260505149747972e+00 -2.7303912147700564e+00 + id 13969 + loc 1.5728652477264404e-01 2.7698315680027008e-03 407 + blend 0.0000000000000000e+00 + interp 3.1124180688063952e-01:3.0860537884056655e-01:9.5032883910330712e-01:2.6365521430167244e-01:1.7466451991148049e+00:2.5114420943651844e-01:2.9123660592236797e+00:3.1123869446257074e-01:3.9344162264942906e+00 + CVs 20 + -9.1249981860107281e-03 2.9669079701061152e-01 -2.2737482585011032e-01 + -2.6629869116098857e-02 4.6506980783144025e-01 -2.9976966877033340e-01 + -3.3861234882822493e-02 6.1307760311821380e-01 -3.1035130306473946e-01 + -2.3570310992251015e-02 7.6193246018452865e-01 -3.3734484971828405e-01 + 7.1988632374670285e-03 9.0861549222976179e-01 -3.7966797647804701e-01 + 6.3856042438530547e-02 1.0481582368684486e+00 -4.3500715647832594e-01 + 1.5250876285936754e-01 1.1705237791122940e+00 -4.9921893674888940e-01 + 2.7595673579327129e-01 1.2616963231603040e+00 -5.6656271505094136e-01 + 4.3163473461283858e-01 1.3083406435053129e+00 -6.3260824319102782e-01 + 6.1405461695074737e-01 1.3015314842267269e+00 -6.9601465489336833e-01 + 8.1750845569085728e-01 1.2376455154073307e+00 -7.5836856462592517e-01 + 1.0362438863961450e+00 1.1172303784196327e+00 -8.2292790425417062e-01 + 1.2645543947211795e+00 9.4204069476847718e-01 -8.9116888881448730e-01 + 1.5011622469785084e+00 7.1217986336698713e-01 -9.6267266084398673e-01 + 1.7557784300660026e+00 4.3207649530357128e-01 -1.0422941162370825e+00 + 2.0430652345613707e+00 1.2158767519820562e-01 -1.1436090767828830e+00 + 2.3661569580851189e+00 -1.8728363936465270e-01 -1.2804030989225041e+00 + 2.7138931381466316e+00 -4.6642021044760873e-01 -1.4573576620194046e+00 + 3.0258899581784253e+00 -7.0416988318130613e-01 -1.6165631058074839e+00 + id 13970 + loc 5.3196889162063599e-01 7.9927587509155273e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4754224892463623e-01:2.6732858613975180e-01:2.7939068334571204e-01:2.8953412048415533e-01:1.0097669980490374e+00:2.6651860923011589e-01:1.9308882581527596e+00:3.5680330241755004e-01:2.5314169308498053e+00:4.4753777350214702e-01:3.0367924308882177e+00:2.5876140498529382e-01:3.6348837713445334e+00 + CVs 20 + 9.4404675522791040e-02 2.5727868956949007e-01 4.0724156764856509e-02 + 1.7911061701364248e-01 5.2169668933721969e-01 6.9020400735443410e-02 + 2.6975808612338215e-01 8.0497090189417964e-01 8.0195415777107981e-02 + 3.8359784881994802e-01 1.1129089388744262e+00 6.8394135434330428e-02 + 5.2989680825715013e-01 1.4412176207943115e+00 1.6867253412000460e-02 + 7.1527774209520034e-01 1.7768754450328978e+00 -9.2622829880738111e-02 + 9.3946633729774764e-01 2.0984746761262221e+00 -2.7623959803557052e-01 + 1.1934180322369057e+00 2.3800163259453786e+00 -5.4439343569995757e-01 + 1.4597725742062695e+00 2.5955907439624486e+00 -9.0178775607233230e-01 + 1.7112014415190999e+00 2.7194074163847830e+00 -1.3457255576477083e+00 + 1.9173038800016045e+00 2.7280297132506361e+00 -1.8603717951200773e+00 + 2.0491114633278316e+00 2.6062234860740765e+00 -2.4037130610898569e+00 + 2.0929838974556607e+00 2.3705488557334724e+00 -2.8974798080776365e+00 + 2.0793140756090631e+00 2.0940228524498679e+00 -3.2512547040911901e+00 + 2.0625627100115174e+00 1.8940894633521486e+00 -3.3810756223968546e+00 + 2.0566385979218760e+00 1.8339728266026822e+00 -3.1739381534162723e+00 + 1.9716986286500147e+00 1.7069656684419592e+00 -2.6094193010438276e+00 + 1.6497165947428454e+00 1.1955498249670475e+00 -2.0088819821158759e+00 + 1.7403309462509673e+00 1.3025442001171377e+00 -2.1072432174935836e+00 + id 13971 + loc 2.6342454552650452e-01 4.5519816875457764e-01 400 + blend 0.0000000000000000e+00 + interp 5.0088982322804088e-01:3.3896803782533935e-01:3.5572501815001789e-01:3.9700608208453364e-01:1.0340809014455516e+00:3.5158832214972940e-01:2.0046766107450789e+00:3.1232753443327865e-01:2.6449131962812218e+00:3.5517524527968986e-01:3.0341816931365351e+00:4.9932421949802241e-01:3.4658032975529687e+00:5.0088481432980858e-01:3.9138530559014924e+00 + CVs 20 + -1.2811035157643902e-01 2.5507816952429363e-01 2.9311449929616029e-01 + -2.8542864620480612e-01 4.9975852030692747e-01 5.5446007673444175e-01 + -4.8450454093597384e-01 7.3247611985573990e-01 7.8991222332667022e-01 + -7.2720706761340681e-01 9.4961881478806731e-01 9.9698847418091496e-01 + -1.0063894870191539e+00 1.1480823187257827e+00 1.1693717832744999e+00 + -1.3132117933494802e+00 1.3268116137973978e+00 1.3049359175987989e+00 + -1.6395377584426687e+00 1.4845038499684446e+00 1.4032944321110639e+00 + -1.9782174995244954e+00 1.6164463319359470e+00 1.4619574430528743e+00 + -2.3209288243331789e+00 1.7160131320149623e+00 1.4767143972912369e+00 + -2.6575323659051864e+00 1.7784367271028145e+00 1.4448090396961022e+00 + -2.9906375593710184e+00 1.8005518940108827e+00 1.3680542393160084e+00 + -3.3461816869855738e+00 1.7747493642672769e+00 1.2546541125781845e+00 + -3.7483950698633475e+00 1.6864433593627772e+00 1.1220845494049425e+00 + -4.1992289905164482e+00 1.5146705750585148e+00 9.9992687597843288e-01 + -4.6839618188294949e+00 1.2294272524698822e+00 9.2717099003869574e-01 + -5.1762918912577716e+00 8.1119984060119199e-01 9.4674378422033956e-01 + -5.6419233524592194e+00 2.9027173384580252e-01 1.0869432129215961e+00 + -6.0400831901809742e+00 -2.4678653752532242e-01 1.3253288838645578e+00 + -6.3301826559494137e+00 -6.6698642058524427e-01 1.5378518793926113e+00 + id 13972 + loc 2.1009436249732971e-01 5.0703918933868408e-01 403 + blend 0.0000000000000000e+00 + interp 3.3425515217297824e-01:3.1760951552809469e-01:5.2750073048937618e-01:2.8589313570902802e-01:1.0166107624209848e+00:2.8047998325863993e-01:2.0036536677841852e+00:3.3425180962145651e-01:3.0001366216164942e+00:2.7074540016266929e-01:3.9885265324475920e+00 + CVs 20 + -3.2546438099685826e-02 1.5247146247018495e-01 -1.2649766230053472e-01 + -6.2383767913707755e-02 3.1793258192546447e-01 -2.5903073700886042e-01 + -1.0968296724759774e-01 4.8961018633230258e-01 -3.9767766148315675e-01 + -1.8453521907057885e-01 6.5748596797286241e-01 -5.3991099459237712e-01 + -2.9168519266388182e-01 8.1502386662248871e-01 -6.8407311139718374e-01 + -4.3426889853109063e-01 9.5555164826504013e-01 -8.2716377696464360e-01 + -6.1354926384065056e-01 1.0735013530784496e+00 -9.6428012489930337e-01 + -8.2753501597986201e-01 1.1652231852645145e+00 -1.0894657111419881e+00 + -1.0715754415120624e+00 1.2293325221301981e+00 -1.1971779016689572e+00 + -1.3401494045699855e+00 1.2639916903058124e+00 -1.2825798143238758e+00 + -1.6263050928108749e+00 1.2656944035572868e+00 -1.3412602323902933e+00 + -1.9209480664047136e+00 1.2318372253028438e+00 -1.3697142440241812e+00 + -2.2143681793240413e+00 1.1630242152611898e+00 -1.3655413040934632e+00 + -2.4977832566081446e+00 1.0626466854765990e+00 -1.3268334459257123e+00 + -2.7638173892907365e+00 9.3647259254045900e-01 -1.2518950000803224e+00 + -3.0065354214842968e+00 7.9227152844953874e-01 -1.1398744926119795e+00 + -3.2168946011491304e+00 6.3606982167933568e-01 -9.9663070225367678e-01 + -3.3855964486186148e+00 4.7414021224483283e-01 -8.3893074450566130e-01 + -3.5464228728190528e+00 3.7490189306620691e-01 -7.3950532341704356e-01 + id 13973 + loc 9.9862325191497803e-01 7.5319647789001465e-01 380 + blend 0.0000000000000000e+00 + interp 3.6616150706849865e-01:3.6615784545342800e-01:5.7685160978161543e-01:2.8165160581020832e-01:1.3495696304950315e+00:1.5734612088328961e-01:2.0111014650022900e+00:3.0463372911237174e-01:3.0162467623717428e+00:2.7640305446549140e-01:3.8153862804306775e+00 + CVs 20 + -4.2238367385210779e-01 2.2821027239237626e-01 -6.5720005713735452e-01 + -7.8914316466276502e-01 3.7526072390483622e-01 -1.0851012403093114e+00 + -1.1379753103920389e+00 4.8633975313920985e-01 -1.4624459963033818e+00 + -1.4734519953262315e+00 5.7999290611559795e-01 -1.8602082392502959e+00 + -1.7825257578921225e+00 6.4904622057432004e-01 -2.2799863512260186e+00 + -2.0556948986836567e+00 6.9006307550838786e-01 -2.7224029890053005e+00 + -2.2922039972397124e+00 7.0040231375356976e-01 -3.1882002611477636e+00 + -2.4932636088700679e+00 6.7405963214314557e-01 -3.6766180089626599e+00 + -2.6534867883567896e+00 5.9909841608131065e-01 -4.1833942198960550e+00 + -2.7668043233778885e+00 4.6074970228665091e-01 -4.6983248594168394e+00 + -2.8426426878082434e+00 2.5290755594638559e-01 -5.2026567416246694e+00 + -2.8978629073783275e+00 -1.9132707535702398e-02 -5.6701904133325272e+00 + -2.9319193551954279e+00 -3.5352854933425837e-01 -6.0688495475238931e+00 + -2.9311034090407357e+00 -7.7338511582824854e-01 -6.3635524071432821e+00 + -2.8970172133536956e+00 -1.2967522346828022e+00 -6.5475043261703076e+00 + -2.8544768081608289e+00 -1.8990636089658826e+00 -6.6748602342540337e+00 + -2.8423620030862695e+00 -2.5274209465126742e+00 -6.8083761139833534e+00 + -2.9108923539624438e+00 -3.1134868196045877e+00 -6.9673031030716706e+00 + -3.1521092008127489e+00 -3.5442983098064906e+00 -7.1014296286907141e+00 + id 13974 + loc 1.2638883292675018e-01 5.1368165016174316e-01 373 + blend 0.0000000000000000e+00 + interp 4.5113581125980173e-01:2.6932586596988728e-01:9.5519236690798426e-01:4.5113129990168915e-01:1.5905739540914423e+00:2.9317080381075400e-01:2.1138244351965567e+00:4.0038140808621153e-01:3.1054103814393623e+00:2.7647950868231519e-01:3.9510510095881366e+00 + CVs 20 + -3.0721896431488760e-01 8.8426748761765361e-01 -2.0862925191321738e-01 + -5.3199836983356641e-01 1.8008112519869941e+00 -4.6371566417670862e-01 + -5.6827326782645937e-01 2.7060076625203928e+00 -8.2069557568531160e-01 + -3.4097411116624765e-01 3.4948845679153040e+00 -1.2843234901583669e+00 + 1.4651532998924210e-01 4.0430054849765451e+00 -1.7989421961196064e+00 + 8.0736927085366306e-01 4.2639360930642107e+00 -2.2747973658619935e+00 + 1.5418452329332075e+00 4.1504874502606155e+00 -2.6441770147663459e+00 + 2.2825328882073714e+00 3.7542197250004730e+00 -2.8788290186436587e+00 + 2.9650756795858029e+00 3.1708211621331461e+00 -2.9596008972923773e+00 + 3.5321776044652666e+00 2.5440529015544624e+00 -2.8816953324123329e+00 + 3.9643117576528808e+00 1.9912727865383097e+00 -2.6831993738763482e+00 + 4.2810064954384215e+00 1.5291061572459679e+00 -2.4106249328817202e+00 + 4.4846362116943483e+00 1.1248030529562005e+00 -2.0575521107621877e+00 + 4.4924880984896216e+00 7.7149561257598509e-01 -1.5686546604714469e+00 + 4.2108077969713307e+00 4.0779708663699776e-01 -7.4732879797526053e-01 + 3.9451661984754178e+00 -4.7368779071750300e-01 4.0520911879594124e-01 + 4.2328172461423419e+00 -1.9192496210713756e+00 9.4375432499610412e-01 + 4.9460548025576649e+00 -3.0766468109530800e+00 5.2035160221200782e-01 + 5.7023150922654242e+00 -3.3370583449365205e+00 -1.6647478773597582e-01 + id 13975 + loc 4.3884694576263428e-01 2.3004770278930664e-01 399 + blend 0.0000000000000000e+00 + interp 4.4709962165114070e-01:4.4709515065492422e-01:3.0757316117807465e-01:4.0282633973554505e-01:1.0058221876324924e+00:4.0156572972688342e-01:1.9246025442214387e+00:2.5250349833378444e-01:2.1681255225850640e+00:4.0851874423763718e-01:3.0366360680975140e+00:3.9934470875198319e-01:3.8932369258712094e+00 + CVs 20 + -1.9973840619901545e-01 3.7343889451951368e-01 1.4845127677882411e-01 + -4.1667115990458781e-01 7.2796521903648992e-01 2.8167002152026915e-01 + -6.5815152503633823e-01 1.0585066288239144e+00 3.9830046264226449e-01 + -9.1083246973150134e-01 1.3666277007702043e+00 5.1347169601179465e-01 + -1.1598203136024599e+00 1.6565801761750947e+00 6.4457079837838194e-01 + -1.4018655748354965e+00 1.9303896792922774e+00 8.0099609711331565e-01 + -1.6431382110402846e+00 2.1872667536862034e+00 9.8756014107173051e-01 + -1.8938404887942828e+00 2.4228854188046092e+00 1.2099371139676141e+00 + -2.1644308646487227e+00 2.6271860820327348e+00 1.4757491205993056e+00 + -2.4628069845985734e+00 2.7821427862662591e+00 1.7931536458022639e+00 + -2.7821204564819797e+00 2.8625433763695818e+00 2.1600427150758823e+00 + -3.0875759939079450e+00 2.8590482856668857e+00 2.5466999292005905e+00 + -3.3404727841147874e+00 2.8024104746121088e+00 2.9099669127684820e+00 + -3.5104689278303902e+00 2.7444472583629871e+00 3.2113954229004316e+00 + -3.5623254213203670e+00 2.7178712718887272e+00 3.4278899335288688e+00 + -3.4786075616557168e+00 2.6876184528445810e+00 3.6086678451184584e+00 + -3.3001826571300579e+00 2.5662612877444340e+00 3.8903351060466229e+00 + -3.2217678660908744e+00 2.3524780061973471e+00 4.3126270616139850e+00 + -3.3909965001738920e+00 2.4262478477473253e+00 4.4241321853204427e+00 + id 13976 + loc 2.1659997105598450e-01 9.1486203670501709e-01 382 + blend 0.0000000000000000e+00 + interp 4.8128685671959343e-01:2.6335562787470829e-01:8.0275787436387824e-01:3.5604963422686015e-01:1.1775496093673319e+00:3.8861521120167059e-01:1.7507895043679844e+00:3.2841952764472804e-01:2.2373984183618916e+00:2.7123109611208235e-01:3.1041878494206179e+00:4.8128204385102624e-01:3.9742548482417210e+00 + CVs 20 + 1.0314913395748724e+00 1.8848737353964645e-01 -4.8562122615346076e-01 + 1.7057563414150112e+00 2.3967050395961881e-01 -8.8153236168754379e-01 + 2.2741207667927434e+00 2.5646455344346719e-01 -1.2670150098510495e+00 + 2.8361067945818248e+00 2.8238224177353832e-01 -1.6719202482181768e+00 + 3.3812922375353667e+00 3.1126948012539613e-01 -2.0857873299768004e+00 + 3.9140070965738358e+00 3.3239635967420011e-01 -2.5049350932658312e+00 + 4.4465667546939684e+00 3.2965724365936555e-01 -2.9305545235545285e+00 + 4.9936576697243691e+00 2.7951655661053887e-01 -3.3665735117054227e+00 + 5.5634461754104443e+00 1.5186983455305669e-01 -3.8139384212413847e+00 + 6.1458892831091712e+00 -7.9698480270333327e-02 -4.2671863140862181e+00 + 6.7129469460791702e+00 -4.2444827708028154e-01 -4.7239971133774272e+00 + 7.2287490773215248e+00 -8.8308699417337788e-01 -5.1772725873510979e+00 + 7.6607214597768483e+00 -1.4504300102337975e+00 -5.6026463350821336e+00 + 7.9892857869898721e+00 -2.1027034315271123e+00 -5.9740661156760000e+00 + 8.2068980787461498e+00 -2.8065670401307696e+00 -6.2732273520619746e+00 + 8.3153218038705816e+00 -3.5300292368218784e+00 -6.4921979238159766e+00 + 8.3255734976871079e+00 -4.2391851375575618e+00 -6.6253026275150395e+00 + 8.2642782491331293e+00 -4.8860482192150503e+00 -6.6671920663654163e+00 + 8.2091208779304736e+00 -5.3201429056730927e+00 -6.6037186343999803e+00 + id 13977 + loc 4.3550559878349304e-01 2.3061124980449677e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0066531614515727e-01:3.2956021663300095e-01:1.0266446448825906e-02:3.1157115781538014e-01:8.9457852376940250e-01:2.9764170987407834e-01:1.4296431962269893e+00:3.1526376056199945e-01:2.0211504728812417e+00:4.0066130949199585e-01:2.9547068429776693e+00:3.9055881550559440e-01:3.4283889199580520e+00 + CVs 20 + -1.1833876906264609e-01 3.4083997845921543e-01 -1.2403135970999177e-01 + -2.5602629573055702e-01 6.5968015402529767e-01 -2.7236881063233365e-01 + -3.8003908687072369e-01 9.4281328993061730e-01 -4.4366370632684543e-01 + -4.7982298852414718e-01 1.1732498667057583e+00 -6.4998962986355568e-01 + -5.6203167791433140e-01 1.3826158852132990e+00 -8.7883265220434859e-01 + -6.3503831156384938e-01 1.6536185506275058e+00 -1.0829665208049639e+00 + -6.9413059936919175e-01 2.0299164782572543e+00 -1.1838458820955271e+00 + -7.5477631841347148e-01 2.4618155050164581e+00 -1.1429033049741444e+00 + -8.7058994294696013e-01 2.8967987476918120e+00 -9.6626127155455688e-01 + -1.1125463319876423e+00 3.2660007304286975e+00 -6.2601066503599534e-01 + -1.5156586625327515e+00 3.3934023385341221e+00 -1.1714581849667560e-01 + -1.9554135433800792e+00 3.1226004568135100e+00 4.1054696808606850e-01 + -2.2659295796643266e+00 2.5528444838654529e+00 7.7427674928728385e-01 + -2.4395754449861888e+00 1.8843146574921958e+00 9.1469827964326889e-01 + -2.5333583410905760e+00 1.2236787430778548e+00 8.6175538117350037e-01 + -2.5099040388783078e+00 5.6250889224353040e-01 6.2867637786289587e-01 + -2.2720411216545831e+00 -5.1521209590583594e-02 1.9298674075353425e-01 + -1.9095195302374730e+00 -4.8423343308572198e-01 -3.5348972138759061e-01 + -1.8829723406291470e+00 -8.8702826866678230e-01 -5.9418142601850554e-01 + id 13978 + loc 2.2275343537330627e-01 3.5446795821189880e-01 402 + blend 0.0000000000000000e+00 + interp 4.6213100604476509e-01:3.7248901404009394e-01:4.7624605025804179e-01:4.3190295577440191e-01:1.1081060485303591e+00:3.6108711256026588e-01:1.9790967823987753e+00:4.6212638473470469e-01:2.6910414358006980e+00:3.6602171863374294e-01:3.0378608730687988e+00:3.6609711341337337e-01:3.7821673237960614e+00 + CVs 20 + -1.4970065673936489e-01 3.7567598468171787e-01 1.7399853355295802e-01 + -3.3612910226893189e-01 7.5365755803179446e-01 3.3638413064241579e-01 + -5.7932799360108922e-01 1.1274059723407461e+00 4.6397045526147673e-01 + -8.8261509570748831e-01 1.4815640134905546e+00 5.6037701258931927e-01 + -1.2396994999644058e+00 1.7989894538238356e+00 6.4230717650079228e-01 + -1.6423513022618237e+00 2.0630177085849630e+00 7.1874347543511807e-01 + -2.0794828426596941e+00 2.2570263752864417e+00 7.9399315934116466e-01 + -2.5324023262484663e+00 2.3690704417033648e+00 8.7580732725598998e-01 + -2.9787459275269375e+00 2.3943130403051667e+00 9.6466829854788894e-01 + -3.3951586151859372e+00 2.3329105980157769e+00 1.0447688862142899e+00 + -3.7489448768055440e+00 2.1908750129131311e+00 1.1004050652736521e+00 + -4.0013041682798018e+00 1.9898336338848406e+00 1.1317040767477766e+00 + -4.1453030546723895e+00 1.7748428333063901e+00 1.1515760874499192e+00 + -4.2332303050598412e+00 1.5833667896657750e+00 1.1803496057560940e+00 + -4.3295425177876785e+00 1.4109259667198115e+00 1.2403659490875352e+00 + -4.4692228440148307e+00 1.2291197116052575e+00 1.3602639025584731e+00 + -4.6478540311507315e+00 1.0304544225422672e+00 1.5751894990526754e+00 + -4.8279555696968108e+00 8.6983172466535508e-01 1.8541272759681835e+00 + -4.9517922043249500e+00 8.6075125621752857e-01 2.0121509999451082e+00 + id 13979 + loc 4.5744106173515320e-01 7.1029520034790039e-01 415 + blend 0.0000000000000000e+00 + interp 4.8388738503918516e-01:2.2017109285514941e-01:5.6590608113973873e-01:3.3737415501267087e-01:1.0489397047004823e+00:2.6844110024521273e-01:1.6826198906082497e+00:2.2782969270341136e-01:2.2762968550127849e+00:4.8388254616533477e-01:3.0657904529406013e+00:2.7860228246886359e-01:3.8903372870412696e+00 + CVs 20 + 3.6338461032576908e-01 2.1754451132922331e-01 1.0425122368397427e-01 + 6.5407741170611255e-01 3.4270193722044440e-01 1.5891781929594698e-01 + 9.3367374791491875e-01 4.2686241042042339e-01 2.1407060621377788e-01 + 1.2370287949507430e+00 4.9371008524712046e-01 2.9868092040266070e-01 + 1.5602646348574796e+00 5.3707850272330082e-01 4.1676316721030410e-01 + 1.8959475752394894e+00 5.5166881443870419e-01 5.7373004671678329e-01 + 2.2349188409171927e+00 5.3446195834151966e-01 7.7573967676295230e-01 + 2.5674974580478982e+00 4.8457420087227132e-01 1.0252414039861382e+00 + 2.8829317468454319e+00 4.0379992334174863e-01 1.3197527728925678e+00 + 3.1705374887896687e+00 2.9676589853694879e-01 1.6534082519531799e+00 + 3.4325608659571945e+00 1.6520926793546042e-01 2.0083025126571603e+00 + 3.7023473336215575e+00 -1.6129278557088789e-03 2.3399409593424600e+00 + 4.0184603178375262e+00 -2.1870017273624054e-01 2.5859085372969934e+00 + 4.3662887718373709e+00 -4.7850256971564598e-01 2.7177207506923660e+00 + 4.7036570482970674e+00 -7.5880440300444496e-01 2.7622406987150767e+00 + 5.0147669519107936e+00 -1.0461510741929105e+00 2.7327407780697550e+00 + 5.2990078611727753e+00 -1.3277738282861269e+00 2.6151203551416220e+00 + 5.5556159011208841e+00 -1.5854447473412177e+00 2.4166779579616824e+00 + 5.8326238827114363e+00 -1.7942889367699513e+00 2.4452723631604449e+00 + id 13980 + loc 9.7110733389854431e-02 9.5897424221038818e-01 401 + blend 0.0000000000000000e+00 + interp 4.0977966464125959e-01:4.0348809520404644e-01:1.3256861226567440e-01:3.5241895033547210e-01:9.8218657319955394e-01:3.3039410321797419e-01:1.3244466258255787e+00:2.6814234608523674e-01:2.3116980267551486e+00:3.6308270561904499e-01:3.0421608441165739e+00:4.0977556684461319e-01:3.7584055636916043e+00 + CVs 20 + 3.6560162777242611e-02 3.2683466338389827e-01 -2.2874255588030706e-01 + 6.9581844779957408e-02 6.5112122079024171e-01 -5.1136582629977378e-01 + 1.0574617643726408e-01 9.7283829284982437e-01 -8.1825977720763721e-01 + 1.4105346986286643e-01 1.2687014177556208e+00 -1.1411620711701058e+00 + 1.5924966035995525e-01 1.5259098043131498e+00 -1.4818186619988931e+00 + 1.3088953873302256e-01 1.7497255156696547e+00 -1.8392648241137401e+00 + 2.7349487582994270e-02 1.9387840725113348e+00 -2.2009404652463433e+00 + -1.5987787969370404e-01 2.0764761023400515e+00 -2.5405829339952204e+00 + -4.1121343458221526e-01 2.1487663668312011e+00 -2.8296229854438364e+00 + -6.8504988074565754e-01 2.1604090142782439e+00 -3.0503809943438429e+00 + -9.3249151128800112e-01 2.1348154777412129e+00 -3.1992152087206454e+00 + -1.1163578449940408e+00 2.1109117033847027e+00 -3.2812701384719580e+00 + -1.2540144524003929e+00 2.1218150891846741e+00 -3.3105545280377369e+00 + -1.4009969120499410e+00 2.1560498480460439e+00 -3.3112912277973483e+00 + -1.5615502300724375e+00 2.1832566645802283e+00 -3.2776040894467586e+00 + -1.6921725275817709e+00 2.1913760635495310e+00 -3.1206684780560692e+00 + -1.8252337690258216e+00 2.1260303965468164e+00 -2.7818862933556971e+00 + -2.0520972112117590e+00 1.9695460355919678e+00 -2.4703897244705502e+00 + -2.2836329322737066e+00 1.9333316015709920e+00 -2.5506547816935501e+00 + id 13981 + loc 2.1399641036987305e-01 1.2673164904117584e-01 395 + blend 0.0000000000000000e+00 + interp 4.8172507119586222e-01:3.4324592855614511e-01:1.6775894842194305e-01:3.0750075018742334e-01:1.1770583356192026e+00:4.6074593579928153e-01:1.8427621542685326e+00:4.6719076842371232e-01:2.0328819810153966e+00:4.8172025394515028e-01:2.5632024720268616e+00:3.1823374718584085e-01:2.9999485319755097e+00:4.4766134940261781e-01:3.7246440206411382e+00 + CVs 20 + -2.8376940441990078e-01 1.0526508584518664e-01 -1.0938628254722975e-01 + -5.3747662837735855e-01 1.9955755295626959e-01 -2.3530568017248213e-01 + -7.7489484581754653e-01 2.8704973977013581e-01 -3.8154349957528810e-01 + -1.0063072916116549e+00 3.7203703424540369e-01 -5.5189947208621148e-01 + -1.2256897853924995e+00 4.5329343509222242e-01 -7.4769974152407581e-01 + -1.4280100646535092e+00 5.2849382017218960e-01 -9.6818521936688351e-01 + -1.6126799417081148e+00 5.9762397177107529e-01 -1.2107033927122810e+00 + -1.7812211084586147e+00 6.6130248678531367e-01 -1.4711525587001466e+00 + -1.9314650547019037e+00 7.1611589366248274e-01 -1.7464258150456180e+00 + -2.0596419379543311e+00 7.5421498548230981e-01 -2.0357396675398420e+00 + -2.1721193376620582e+00 7.6419970489913047e-01 -2.3391287071111098e+00 + -2.2867362695965685e+00 7.2998957153616573e-01 -2.6551804035548967e+00 + -2.4156805442197626e+00 6.3848128007672145e-01 -2.9799398325040474e+00 + -2.5586452877763715e+00 4.8766301823374159e-01 -3.3094870633352302e+00 + -2.7134515999329372e+00 2.8156561732493124e-01 -3.6391112288011485e+00 + -2.8779880090686394e+00 2.7210389975687033e-02 -3.9589348503054889e+00 + -3.0432439689314119e+00 -2.6613730512080336e-01 -4.2567317644867710e+00 + -3.1970331707924213e+00 -5.8997062051645877e-01 -4.5264133736419430e+00 + -3.3603259037497870e+00 -9.1217496215159910e-01 -4.7974545985470298e+00 + id 13982 + loc 3.8429999351501465e-01 4.7111847996711731e-01 378 + blend 0.0000000000000000e+00 + interp 4.5327639582550683e-01:4.5327186306154860e-01:3.5511539498233713e-02:3.0993700519389039e-01:9.9994990121990313e-01:4.2134570118590720e-01:1.4980129262877520e+00:2.7726017534898062e-01:2.0003296044549428e+00:4.0689262546841976e-01:2.9627161893701253e+00:2.8028290008435219e-01:3.8552963621149479e+00 + CVs 20 + 2.6985417939252077e-01 2.9345895345879508e-01 -5.6453590163178924e-01 + 4.8264803648653587e-01 5.0309450497307417e-01 -1.0983408519105957e+00 + 6.7016855563130562e-01 6.6117048737634010e-01 -1.6307756863649461e+00 + 8.5761890831807897e-01 7.9484815960984379e-01 -2.1617088524804773e+00 + 1.0572093789738219e+00 8.9786328186493936e-01 -2.6606744278650316e+00 + 1.2668186419385064e+00 9.5070214930973451e-01 -3.1040874220464909e+00 + 1.4770415121369855e+00 9.5028190106071131e-01 -3.4866050419012105e+00 + 1.6793593501245434e+00 9.0970412287853497e-01 -3.8123158752430379e+00 + 1.8654496881577050e+00 8.4432784277754092e-01 -4.0874048606042450e+00 + 2.0273149184032642e+00 7.6682050720119532e-01 -4.3165351537464165e+00 + 2.1593038932943376e+00 6.8830112600901661e-01 -4.4998390236543830e+00 + 2.2654485138550262e+00 6.1869307814486296e-01 -4.6416046923534182e+00 + 2.3738216571407253e+00 5.4635990683510860e-01 -4.7659611522477991e+00 + 2.5195252975148383e+00 4.1424734030278998e-01 -4.9029291238474046e+00 + 2.7062493952373949e+00 1.7750824644980501e-01 -5.0575073570039111e+00 + 2.9190699007691427e+00 -1.3261631401559582e-01 -5.2200519543899677e+00 + 3.1412775976581822e+00 -4.5461459715780705e-01 -5.3900862894758852e+00 + 3.3473378830774347e+00 -7.4788594296515276e-01 -5.5882865229908312e+00 + 3.5060105286168186e+00 -9.8823808249966971e-01 -5.8361501415063870e+00 + id 13983 + loc 5.4166829586029053e-01 7.9756683111190796e-01 412 + blend 0.0000000000000000e+00 + interp 5.0688384143674869e-01:2.4857637081966916e-01:7.1990272002352929e-01:5.0687877259833436e-01:1.1824162696554741e+00:4.2865097316280365e-01:1.7922243294353939e+00:4.8312575278795672e-01:2.0713075753973218e+00:4.3446931770200720e-01:2.7683518552177340e+00:3.6306650509233074e-01:3.1878081753169063e+00:4.1559939908816090e-01:3.9689549023828681e+00 + CVs 20 + 7.6151627298345748e-01 1.9224100267667790e-01 -1.7183322158125930e-01 + 1.2368673271307147e+00 2.7221954565718254e-01 -3.4938386494423396e-01 + 1.6488501275787533e+00 3.1541655436464761e-01 -5.4158794151753831e-01 + 2.0933379561835679e+00 3.5564342575600028e-01 -7.5320868483732817e-01 + 2.5735617891416211e+00 3.8530918810959058e-01 -9.7969616959804806e-01 + 3.0915068325203010e+00 3.9143010948751578e-01 -1.2081306369501521e+00 + 3.6432254389143677e+00 3.5967666503674367e-01 -1.4186916342126419e+00 + 4.2157144424528177e+00 2.7854792244630455e-01 -1.5923319878030515e+00 + 4.7898733128077442e+00 1.4201949703826111e-01 -1.7155531854665937e+00 + 5.3437876472979973e+00 -4.8472436178435885e-02 -1.7812383000892549e+00 + 5.8485481057128723e+00 -2.8823206288536030e-01 -1.7971324911256765e+00 + 6.2687086927201427e+00 -5.7747072289953350e-01 -1.7961928266585994e+00 + 6.5913750932871391e+00 -9.1951428050373507e-01 -1.8096052154314746e+00 + 6.8394607159914225e+00 -1.3206237567101267e+00 -1.8369058911749363e+00 + 7.0309671778872902e+00 -1.7817361318932949e+00 -1.8706258480242370e+00 + 7.1643997803047048e+00 -2.2850178013579914e+00 -1.9179080564941522e+00 + 7.2409613529196211e+00 -2.8072371630752375e+00 -1.9935782030942300e+00 + 7.2800128792718066e+00 -3.3360557364142363e+00 -2.1012278199816503e+00 + 7.3956168006707239e+00 -3.8916101241716063e+00 -2.1779845867703420e+00 + id 13984 + loc 7.5806897878646851e-01 2.0047250390052795e-01 396 + blend 0.0000000000000000e+00 + interp 4.7869826920659075e-01:3.7456204633454993e-01:6.9051196914749302e-01:3.6384136934336886e-01:1.1751386371395915e+00:3.7474730041287935e-01:1.9494151757421581e+00:3.2136822477677851e-01:2.5674522220195937e+00:4.7869348222389874e-01:3.0570568371805842e+00:3.0823794408907029e-01:3.9841566046087742e+00 + CVs 20 + -6.1184794430161937e-01 1.0068721896388258e-01 3.5074731928271480e-01 + -1.0556211240913755e+00 1.1623720338577953e-01 5.9292344228397387e-01 + -1.4628147497270940e+00 1.0808679690639961e-01 8.0088649001974344e-01 + -1.8832653527485776e+00 1.1300851637779641e-01 9.9565040125280413e-01 + -2.3109151367411211e+00 1.3143252716755971e-01 1.1767339746549801e+00 + -2.7450375243531155e+00 1.6467853938724997e-01 1.3460634734484480e+00 + -3.1806065212601906e+00 2.1026900589517838e-01 1.5159207773216843e+00 + -3.6110489657143319e+00 2.6296235349286290e-01 1.7014369572736867e+00 + -4.0373563079976531e+00 3.1044976076939768e-01 1.9152823173424958e+00 + -4.4669113042860387e+00 3.3044075457960442e-01 2.1660182746959538e+00 + -4.8922765393681038e+00 2.9661001082693850e-01 2.4583948791927019e+00 + -5.2809142158209141e+00 1.9259805805430519e-01 2.7906957560624730e+00 + -5.6007175827998585e+00 1.8286892135594979e-02 3.1503595282216237e+00 + -5.8421520489166046e+00 -2.1787692807169545e-01 3.5149085705030640e+00 + -6.0100828133363580e+00 -5.0102900046609156e-01 3.8603987886816098e+00 + -6.1142996358897657e+00 -8.0962364390162067e-01 4.1753515262873417e+00 + -6.1666187147651188e+00 -1.1237320393520336e+00 4.4595690937553840e+00 + -6.1745279054753510e+00 -1.4336342500028101e+00 4.7052101267299449e+00 + -6.0550974268758182e+00 -1.7487508988682152e+00 4.8077801979813639e+00 + id 13985 + loc 2.9825198650360107e-01 1.4017470180988312e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4210442176935799e-01:2.6233432892675412e-01:1.3763660539128919e-03:2.4867926576274055e-01:9.7618022116265368e-01:4.4210000072514033e-01:1.3938864345239712e+00:2.4537308140051250e-01:2.2660611858585318e+00:2.7130322385266198e-01:3.2607528048686634e+00 + CVs 20 + -1.2773688409144779e-02 3.2403656446534784e-01 2.0506193815981604e-02 + -6.9736016305834259e-02 6.2033437099363109e-01 5.9294503476992506e-02 + -1.4415837567693462e-01 9.2789349502288165e-01 9.2336873692264079e-02 + -2.1739179004765774e-01 1.2528038952174785e+00 1.1064039206346706e-01 + -2.9150027252644628e-01 1.5889141074873752e+00 1.0703110774668785e-01 + -3.6904594890283027e-01 1.9261945591987772e+00 7.8809456449318693e-02 + -4.6369918544127164e-01 2.2531474889401952e+00 2.2461912023702929e-02 + -5.9656489386899081e-01 2.5561905662818614e+00 -6.5520610750548491e-02 + -7.8918190218829731e-01 2.8193703843062861e+00 -1.8659702363960787e-01 + -1.0584907583809402e+00 3.0148537743393211e+00 -3.3797375320966627e-01 + -1.3969906026799470e+00 3.1049081329048178e+00 -5.0450943597002151e-01 + -1.7709288487321024e+00 3.0674013210271740e+00 -6.6381816801840265e-01 + -2.1470293353580923e+00 2.9059479187905595e+00 -8.0223728941638728e-01 + -2.5135912199389043e+00 2.6290917276560983e+00 -9.2135865647640691e-01 + -2.8836418943163835e+00 2.2120350910085609e+00 -1.0402837578279036e+00 + -3.2385971639897249e+00 1.5531240306827219e+00 -1.1852858403376441e+00 + -3.3593379071685656e+00 5.9614108105037356e-01 -1.3242001341635588e+00 + -3.0928342223915868e+00 -2.6084162269180222e-01 -1.3420724071450048e+00 + -2.8794493865482726e+00 -6.6092670098588302e-01 -1.2760606977244429e+00 + id 13986 + loc 3.3025684952735901e-01 1.4808909967541695e-02 407 + blend 0.0000000000000000e+00 + interp 4.4394241532315526e-01:1.9836418956203317e-01:5.0592924211612700e-01:4.4393797589900202e-01:1.1244017368394110e+00:2.5822809780679967e-01:2.0143091454762101e+00:2.6206505395158453e-01:3.0497804882540400e+00:3.6690190353077484e-01:3.9970248525308891e+00 + CVs 20 + -7.8728737841749122e-02 3.1367281231360572e-01 -2.1298968947179292e-01 + -1.6615271604973961e-01 4.8864856965748077e-01 -2.6817801085371246e-01 + -2.5087896530343679e-01 6.6175761852011028e-01 -2.7756305226821415e-01 + -3.2691084762744266e-01 8.5951087380498592e-01 -3.1752612708140926e-01 + -3.7955938223181068e-01 1.0893501274889488e+00 -3.9338653636890841e-01 + -3.8251315133579494e-01 1.3509342988762139e+00 -5.1026620844047743e-01 + -3.0825681259668830e-01 1.6217694169950208e+00 -6.6392031786253858e-01 + -1.5173565974085773e-01 1.8633438945316567e+00 -8.3798170865343935e-01 + 6.6582750600291549e-02 2.0477853224689611e+00 -1.0158816131911466e+00 + 3.2304623829519519e-01 2.1688746522778000e+00 -1.1905680965230787e+00 + 6.0596380165919284e-01 2.2315071331420926e+00 -1.3636382534779341e+00 + 9.1193323465237963e-01 2.2395643649919106e+00 -1.5378033721538913e+00 + 1.2261834008336387e+00 2.1953150487306852e+00 -1.7067079108739769e+00 + 1.5171208146891499e+00 2.1108961210332602e+00 -1.8567189192592681e+00 + 1.7654416026720159e+00 2.0079490501435338e+00 -1.9834841320235226e+00 + 1.9823742885704860e+00 1.9007528373032425e+00 -2.1004188763934284e+00 + 2.1865131739869459e+00 1.7942865736361371e+00 -2.2258615645998279e+00 + 2.3873596481794594e+00 1.6910076503042517e+00 -2.3716271922785648e+00 + 2.6738606930273217e+00 1.5568699793247107e+00 -2.5856084978183467e+00 + id 13987 + loc 5.1452606916427612e-01 2.1222957968711853e-01 400 + blend 0.0000000000000000e+00 + interp 4.7902455279461470e-01:3.5859689536294725e-01:2.2339807561255864e-02:4.7901976254908679e-01:8.4284981637744361e-01:3.6907505213521113e-01:1.2751846896251344e+00:3.9061701905220514e-01:2.0400797075884958e+00:3.5875793419361862e-01:2.7429252491193874e+00:2.4595275709822492e-01:3.4328271847868477e+00 + CVs 20 + 2.9029611058066379e-01 2.9771923787046722e-01 1.9076302066567655e-01 + 5.9090378272611022e-01 5.8401498647559935e-01 3.5644089964888620e-01 + 8.8591364056779009e-01 8.6477672349326695e-01 5.3170161481368405e-01 + 1.1709976026986020e+00 1.1287554700782947e+00 7.2375479388222663e-01 + 1.4504554055474757e+00 1.3614262505052381e+00 9.3290924801145847e-01 + 1.7292944431844972e+00 1.5462884533511221e+00 1.1576094216010389e+00 + 2.0102009903337601e+00 1.6664009825562933e+00 1.3920403616937864e+00 + 2.2899727044575204e+00 1.7118834377567038e+00 1.6222339017768546e+00 + 2.5643807690696567e+00 1.6854904154916115e+00 1.8400587318119035e+00 + 2.8264121506163415e+00 1.5980110506964198e+00 2.0366552688458568e+00 + 3.0730514838646101e+00 1.4665277558486571e+00 2.2093768001808232e+00 + 3.3137284593490204e+00 1.2966186863519138e+00 2.3752167980202445e+00 + 3.5552730042197944e+00 1.0855608983051748e+00 2.5468172406278327e+00 + 3.7929690084460814e+00 8.3952928224863377e-01 2.7209487176172646e+00 + 4.0208314197520858e+00 5.6466350404329080e-01 2.8911256576706608e+00 + 4.2438988303193330e+00 2.4524750781085092e-01 3.0664160568406524e+00 + 4.4852102400474081e+00 -1.3076267138266462e-01 3.3121990073850989e+00 + 4.7528504859773397e+00 -4.3530233316722833e-01 3.7209676576297328e+00 + 4.9288242123392463e+00 -4.9173351934049103e-01 3.9980934158597634e+00 + id 13988 + loc 9.8290163278579712e-01 6.0377722978591919e-01 380 + blend 0.0000000000000000e+00 + interp 3.6879152762314443e-01:3.6878783970786821e-01:3.2651683473159387e-03:2.9403199353238602e-01:5.1689447586886128e-01:2.8806575158884068e-01:1.3876221503216490e+00:2.3162018179654445e-01:2.5446098010234750e+00:2.9916952788970080e-01:3.3820361981965847e+00 + CVs 20 + -4.1454575907022473e-01 1.8959327825588770e-01 -7.2308740218893819e-01 + -7.3887641400636539e-01 2.6028295054211459e-01 -1.2225247342664705e+00 + -1.0288983135257008e+00 2.7813131162307742e-01 -1.6650733261671506e+00 + -1.3100173952969891e+00 2.7386152474013237e-01 -2.1277095037306282e+00 + -1.5793758089512471e+00 2.4944101162640187e-01 -2.6077429692081906e+00 + -1.8308063643268919e+00 2.0656898090183451e-01 -3.0921814392480407e+00 + -2.0634094337482303e+00 1.4603527159451590e-01 -3.5645933288290648e+00 + -2.2810058678586356e+00 6.8486794362599079e-02 -4.0132310970356482e+00 + -2.4895830208880687e+00 -2.6638833618486624e-02 -4.4367389131672299e+00 + -2.6962974722054227e+00 -1.4260348720945037e-01 -4.8401500309562975e+00 + -2.9098055151552948e+00 -2.8346140482709448e-01 -5.2240264796084110e+00 + -3.1378998886393781e+00 -4.5611270006062954e-01 -5.5838272507699216e+00 + -3.3776279507917568e+00 -6.8341268443638592e-01 -5.9126925404370390e+00 + -3.6082853182898789e+00 -1.0078106009335315e+00 -6.1860860807692593e+00 + -3.8072689227860605e+00 -1.4521859836691742e+00 -6.3656894342815775e+00 + -3.9706748183009712e+00 -1.9864896315451590e+00 -6.4549984857049871e+00 + -4.1046278426999692e+00 -2.5457072021221880e+00 -6.4990583524851084e+00 + -4.2289523688097450e+00 -3.0585831823539422e+00 -6.5295273496289568e+00 + -4.4542142266020743e+00 -3.5346975798884479e+00 -6.5573234941125964e+00 + id 13989 + loc 5.7469975948333740e-01 2.5256198644638062e-01 403 + blend 0.0000000000000000e+00 + interp 3.9256855343101094e-01:2.7212631365757622e-01:6.1244412943913440e-01:3.9256462774547662e-01:1.1397656118922326e+00:2.7308056709593814e-01:1.9998364066801968e+00:3.7997959055747527e-01:2.6917072125798729e+00:2.7037573079009136e-01:3.7201311575211635e+00 + CVs 20 + -3.6704791458849445e-02 4.5199057932486031e-01 1.5502396749590636e-01 + -2.3343847519970373e-02 8.8639642766590532e-01 3.0684949792486849e-01 + -1.9587653680806616e-02 1.3339469913226456e+00 4.8308978617126497e-01 + -4.5688183079424238e-02 1.7896061581681235e+00 7.1702287464263459e-01 + -9.0720406105721185e-02 2.2206442951240541e+00 1.0218651115098210e+00 + -1.1644853636275787e-01 2.5950255925908294e+00 1.3814332797457538e+00 + -8.3933964053092724e-02 2.8968665282292001e+00 1.7792332958091239e+00 + 3.4642088403625149e-02 3.1099229326967990e+00 2.2065763918970114e+00 + 2.5303808065564670e-01 3.2127219210261169e+00 2.6403325357360927e+00 + 5.5533500704284977e-01 3.1975344131039884e+00 3.0516740418801929e+00 + 9.0692227550484450e-01 3.0670724807207099e+00 3.4403452078481007e+00 + 1.2688410678910544e+00 2.8175614441638102e+00 3.8290574884300557e+00 + 1.6025551449331927e+00 2.4537778233219374e+00 4.2227468980061147e+00 + 1.8973499036046391e+00 2.0040451935384036e+00 4.5926689997808552e+00 + 2.1597779876276038e+00 1.5165348902119193e+00 4.9274651385997226e+00 + 2.3507022984810177e+00 1.0767318577275460e+00 5.2971185288616569e+00 + 2.3908222228954896e+00 7.8583475262471236e-01 5.7778994493791522e+00 + 2.3018257358526659e+00 6.1283821859065568e-01 6.2904548294879508e+00 + 2.3838382948838421e+00 2.6220083142164585e-01 6.7296917713731315e+00 + id 13990 + loc 1.9477374851703644e-01 3.2986098527908325e-01 379 + blend 0.0000000000000000e+00 + interp 3.8435817604672057e-01:2.9672843000285382e-01:2.0278002979670084e-03:1.9630276921684114e-01:9.7989180474192361e-01:2.3618684646864219e-01:1.5960129905948814e+00:2.4365847427563164e-01:2.2189614513411557e+00:3.8435433246496009e-01:2.7420663306808919e+00:2.6543875672023692e-01:3.5629269970616266e+00 + CVs 20 + 2.5333158318135662e-01 3.6334373848899987e-01 2.9088829119811643e-01 + 5.4451296177793806e-01 6.4376162744191734e-01 5.2282197737102343e-01 + 8.7983904553393466e-01 8.1864754675939522e-01 7.1961997523620658e-01 + 1.2492030368012581e+00 9.1927581310503081e-01 8.9254385277645065e-01 + 1.6377174591683554e+00 9.9937870396495709e-01 1.0508046020996262e+00 + 2.0373309557049293e+00 1.0992009680227923e+00 1.2191976484777949e+00 + 2.4351080086197401e+00 1.2346519326955712e+00 1.4310537908373799e+00 + 2.8087145774516356e+00 1.4071706582777921e+00 1.7077511743062277e+00 + 3.1290329779876975e+00 1.6142986953781500e+00 2.0444916585181017e+00 + 3.3726686511361699e+00 1.8504560388157651e+00 2.4145117765671293e+00 + 3.5461642934465747e+00 2.1102991065191130e+00 2.7982136508515940e+00 + 3.6752621461999047e+00 2.3943296567980683e+00 3.2096257913396671e+00 + 3.7589189250383992e+00 2.6834550326270676e+00 3.6908483628693363e+00 + 3.7639176354858987e+00 2.9079160728654077e+00 4.2804973087134757e+00 + 3.6459402448607965e+00 2.9947390826381595e+00 4.9330293314694718e+00 + 3.3912530594922963e+00 2.9868412994245901e+00 5.4649339674402277e+00 + 3.0009914749388922e+00 3.0718969499915594e+00 5.7635433096459581e+00 + 2.5497725482749769e+00 3.0959868700303783e+00 5.9477107607534698e+00 + 2.7272573112852250e+00 2.6303965626381105e+00 6.1125677201392534e+00 + id 13991 + loc 9.4953663647174835e-02 2.5343549251556396e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7077992849708505e-01:3.5285014348894073e-01:9.4283684878360274e-01:3.6343276754380222e-01:1.6615735571165220e+00:4.7077522069780009e-01:2.0720319774982685e+00:3.4047939391730397e-01:2.9752107683079227e+00:4.5684260321679088e-01:3.3948462720380843e+00:3.2413578919073338e-01:3.9942505591711419e+00 + CVs 20 + -2.4198760150594448e-01 2.7386320073394504e-01 -1.4175300321332407e-01 + -4.5230843548403321e-01 5.7573282755556177e-01 -2.3534796890480036e-01 + -6.3495420785954793e-01 8.9081295210259026e-01 -3.0318739788969618e-01 + -8.0765013626740534e-01 1.2078086139100419e+00 -3.7369950778098426e-01 + -9.9575029289051531e-01 1.5134891889324453e+00 -4.7982207682865807e-01 + -1.2136665135770246e+00 1.7819991391654391e+00 -6.4736696955524708e-01 + -1.4511217930151201e+00 1.9731559758915673e+00 -8.8849934858319968e-01 + -1.6665225718264980e+00 2.0444667610069445e+00 -1.1981545926525938e+00 + -1.8077994847041630e+00 1.9870857324332114e+00 -1.5400629150758449e+00 + -1.8632728823974141e+00 1.8448454910954366e+00 -1.8698058435681322e+00 + -1.8474817840192812e+00 1.6550766850743368e+00 -2.1828506143352104e+00 + -1.7463115228039578e+00 1.4195786030487174e+00 -2.4854735790808329e+00 + -1.5371197151682563e+00 1.1487384703620906e+00 -2.7443342436248428e+00 + -1.2713666933037455e+00 8.8703165611254065e-01 -2.9309724067174026e+00 + -1.0411876612140287e+00 6.7144823274629162e-01 -3.0918341289638858e+00 + -9.1340034606795606e-01 5.5994593408529048e-01 -3.2682134715297280e+00 + -9.2994759589773290e-01 6.2931758586374997e-01 -3.4011376156684934e+00 + -9.9755168919141268e-01 7.7086098610363185e-01 -3.5010238251634229e+00 + -9.2273307122056591e-01 8.2570980129189198e-01 -3.9535728946726341e+00 + id 13992 + loc 9.5957845449447632e-02 9.8207008838653564e-01 373 + blend 0.0000000000000000e+00 + interp 7.2161433721777823e-01:7.2160712107440605e-01:7.1998181605036893e-01:5.5110982463040570e-01:1.0101170259710197e+00:2.4257735058747390e-01:1.4647511299693701e+00:2.9230557348709757e-01:2.3777530576951715e+00:3.9230452922003478e-01:3.0814433542770545e+00:3.0426630876505445e-01:3.8443130468939679e+00 + CVs 20 + -2.8689446146349268e-01 5.3711911379495203e-01 -2.1239831805609835e-01 + -5.0035873235366779e-01 1.0626805432275912e+00 -4.3117770126952076e-01 + -6.3283973632522839e-01 1.5703771277678602e+00 -6.5780106313314735e-01 + -7.0829387247348252e-01 2.0550128054111028e+00 -9.1382352790876964e-01 + -7.5975600351010497e-01 2.5074028931441426e+00 -1.2276590573409223e+00 + -8.1873462269439190e-01 2.9108666706727431e+00 -1.6193368665269083e+00 + -9.1275490439043261e-01 3.2431336803459225e+00 -2.0943989125066591e+00 + -1.0728863943928055e+00 3.4810110986045522e+00 -2.6428142630635132e+00 + -1.3323531323340640e+00 3.6054922471531428e+00 -3.2337208413352818e+00 + -1.7175854883275501e+00 3.6121280824513624e+00 -3.8107474247502919e+00 + -2.2264444319336278e+00 3.5032993906877694e+00 -4.3035325619503206e+00 + -2.8076163348059842e+00 3.2772585726274341e+00 -4.6658255802487920e+00 + -3.3987829498460846e+00 2.9364786170123081e+00 -4.8987632152096721e+00 + -3.9693151715556541e+00 2.5113741895606938e+00 -5.0259027583875371e+00 + -4.5123578269824467e+00 2.0434725953075228e+00 -5.0853855878135992e+00 + -5.0066205312830929e+00 1.5328459257381297e+00 -5.0935206933956154e+00 + -5.3539138270660942e+00 9.0933976969241748e-01 -4.9410331737060407e+00 + -5.3617113087421870e+00 1.9192931446755290e-01 -4.4917770373590900e+00 + -5.6313327916451108e+00 -2.9662256505743501e-01 -4.4008041494790149e+00 + id 13993 + loc 3.7979080807417631e-03 1.1933866143226624e-01 393 + blend 0.0000000000000000e+00 + interp 4.3762548246252841e-01:2.7160329888925311e-01:3.3996287714545681e-01:3.6586044408654483e-01:9.6602638211146896e-01:2.3735526040470176e-01:1.4554842655248894e+00:3.5275877385268911e-01:1.9958345560988193e+00:3.8707709712873722e-01:2.3041766001448800e+00:4.3762110620770384e-01:2.9519374642339109e+00:4.1321978946461047e-01:3.2641566775739181e+00:3.5013906576764942e-01:3.9722357305236167e+00 + CVs 20 + -1.1771441696423535e-01 4.2010001204058517e-01 3.3518098695485393e-01 + -2.1445031875598197e-01 8.2981826762564126e-01 5.9432086739078571e-01 + -3.1201150822846363e-01 1.2403755995462704e+00 8.0648535574274260e-01 + -4.2857591214910401e-01 1.6577469008170758e+00 9.9847666481736008e-01 + -5.8675173932886349e-01 2.0806934613048771e+00 1.1950580652994802e+00 + -8.1335945654229469e-01 2.4957873047382662e+00 1.4276522698004404e+00 + -1.1255584876527132e+00 2.8662442082617439e+00 1.7231026975654218e+00 + -1.5194529114413029e+00 3.1413461276533732e+00 2.0883935151748028e+00 + -1.9714539739874450e+00 3.2777395441228285e+00 2.5072491409766959e+00 + -2.4466449807847099e+00 3.2533183113130626e+00 2.9498988581523919e+00 + -2.9075836098166330e+00 3.0718210713652887e+00 3.3853577474615792e+00 + -3.3254189209234406e+00 2.7610308103492311e+00 3.7905264421280043e+00 + -3.6944821033097837e+00 2.3586331238461016e+00 4.1655715624396263e+00 + -4.0210703873521672e+00 1.8917071056932762e+00 4.5347781241208143e+00 + -4.2921706411172540e+00 1.3776666431508089e+00 4.9247222013484233e+00 + -4.4760220601722178e+00 8.4507899720072932e-01 5.3582163965405423e+00 + -4.5458700133302461e+00 3.4470497816041101e-01 5.8582961916254837e+00 + -4.5002412631527893e+00 -6.5240217093062824e-02 6.4053296466156278e+00 + -4.4400003775096994e+00 -3.4768187166644005e-01 6.8277700850582095e+00 + id 13994 + loc 2.3213522136211395e-01 2.3169265687465668e-01 401 + blend 0.0000000000000000e+00 + interp 4.3752438587489462e-01:3.8899106478350276e-01:7.1902516375759551e-01:4.3752001063103590e-01:1.1849216310534632e+00:3.1154532980741745e-01:1.8608730867155043e+00:4.1084706401905730e-01:2.1068814893456365e+00:2.6823885312216639e-01:2.9272336789928080e+00:3.8854760386800330e-01:3.4986254944912063e+00:4.1894863453359099e-01:3.9984396404725948e+00 + CVs 20 + -2.7670247412543225e-01 1.0402967900317438e-01 2.2087238110491439e-01 + -5.3376310328138599e-01 2.2277885334592873e-01 4.1848079996585541e-01 + -7.7975164231419269e-01 3.4231431402414458e-01 6.0940878174532398e-01 + -1.0261833840995767e+00 4.5506800214212761e-01 8.0901526295217507e-01 + -1.2721459533502013e+00 5.5454683541276251e-01 1.0141289361351902e+00 + -1.5157744059082925e+00 6.3338326615916785e-01 1.2225812869489909e+00 + -1.7546134894601537e+00 6.8508846774052823e-01 1.4374050800302778e+00 + -1.9879012050030382e+00 7.0366646671971378e-01 1.6675361768422567e+00 + -2.2136149185982954e+00 6.8249825472304526e-01 1.9198369153498802e+00 + -2.4279113321109214e+00 6.1589652494659486e-01 2.1941913972592237e+00 + -2.6266458523530707e+00 5.0208858587935346e-01 2.4802302247407511e+00 + -2.8053489307614705e+00 3.4675178526113271e-01 2.7548192959826867e+00 + -2.9592247902136406e+00 1.6247048375169937e-01 2.9927409436774073e+00 + -3.0855739478130806e+00 -3.7943021004429534e-02 3.1851944335979052e+00 + -3.1827719997135913e+00 -2.4732431319171927e-01 3.3452228031854427e+00 + -3.2444375822639637e+00 -4.5558751254633612e-01 3.4905562347031793e+00 + -3.2664616926114909e+00 -6.5431538104795961e-01 3.6334421307188705e+00 + -3.2516921271854229e+00 -8.3494394318570631e-01 3.7779125655753578e+00 + -3.1101997155428389e+00 -9.2234057754234833e-01 3.8980433994841182e+00 + id 13995 + loc 3.9193399250507355e-02 2.4842356145381927e-01 395 + blend 0.0000000000000000e+00 + interp 4.3519841126345948e-01:3.3589716613766329e-01:6.8654320397363588e-01:2.6812363491715824e-01:1.1566373332835722e+00:3.7833130015940591e-01:2.0243910959618758e+00:4.3519405927934685e-01:2.8044241535352756e+00:3.1766716340805612e-01:3.2230145634986629e+00:3.2009372854024915e-01:3.9999159976136607e+00 + CVs 20 + -2.5507559261618978e-01 1.2081892609581246e-01 -1.7124236956592181e-01 + -5.0174994417075636e-01 2.2469165805873184e-01 -3.3776252997059486e-01 + -7.4638849855513167e-01 3.1711283220075015e-01 -5.1314074608412974e-01 + -9.8854032985916984e-01 3.9792666495119211e-01 -7.0176577478622804e-01 + -1.2231439764577545e+00 4.6148153830084082e-01 -9.0090252981918051e-01 + -1.4469524380727847e+00 5.0401965586393238e-01 -1.1059200347802700e+00 + -1.6598355352368341e+00 5.2754311993798741e-01 -1.3109442791978236e+00 + -1.8599422116182949e+00 5.3588793320191042e-01 -1.5083750496702018e+00 + -2.0342146223725948e+00 5.3023607502530301e-01 -1.6861655450855477e+00 + -2.1644458666014073e+00 5.1613583682026698e-01 -1.8283145013092093e+00 + -2.2515882428500329e+00 5.0255198376663590e-01 -1.9314521377729237e+00 + -2.3190904244796275e+00 4.8431348281359710e-01 -2.0109322602714381e+00 + -2.3827087378058418e+00 4.4893791190694921e-01 -2.0797026118029600e+00 + -2.4396816627356905e+00 3.9674751931542507e-01 -2.1416699265840689e+00 + -2.4901210369670927e+00 3.3858468954507415e-01 -2.1991930811911837e+00 + -2.5481962960619668e+00 2.8454551120369542e-01 -2.2545204532298699e+00 + -2.6263629118217193e+00 2.2843710706367348e-01 -2.3073972774828353e+00 + -2.7172022451095725e+00 1.2977804587561459e-01 -2.3483394295458866e+00 + -2.7844281788206651e+00 -1.4263150197128005e-01 -2.3342263063492954e+00 + id 13996 + loc 2.5967639684677124e-01 2.7765870094299316e-01 396 + blend 0.0000000000000000e+00 + interp 4.2413569975461851e-01:4.2413145839762101e-01:1.9788032713346837e-01:3.2600663163891630e-01:8.2856850281946393e-01:4.1792284301675597e-01:1.2071036827555897e+00:3.6540646646482411e-01:1.9528358120552163e+00:3.3821726598733814e-01:2.4314844247304244e+00:3.2804986069530367e-01:3.0025310028408656e+00:3.9460313310104922e-01:3.9765570567816502e+00 + CVs 20 + -2.0642414606654907e-01 1.9059411208993599e-01 -7.4192897637092481e-01 + -3.5944679692844206e-01 2.3139614902960676e-01 -1.3186383282931280e+00 + -4.8209323233924073e-01 2.0586242020890366e-01 -1.8469277338868786e+00 + -5.8454518290249191e-01 1.3766152286775313e-01 -2.3682810974747839e+00 + -6.6848188255245689e-01 2.1797175078807296e-02 -2.8665628279314799e+00 + -7.4157966561820887e-01 -1.3961223447265825e-01 -3.3280219753302607e+00 + -8.1094540443340868e-01 -3.3822630631650230e-01 -3.7367955128645449e+00 + -8.7834021804368811e-01 -5.5978028949166858e-01 -4.0741614315272452e+00 + -9.4363105987146945e-01 -7.8494390937667524e-01 -4.3309659937505973e+00 + -1.0075084890224943e+00 -9.9334900057685593e-01 -4.5146904063493896e+00 + -1.0706013976387747e+00 -1.1673498770480575e+00 -4.6409162967066049e+00 + -1.1379123315594406e+00 -1.2967358338419666e+00 -4.7261737955535299e+00 + -1.2197298197154427e+00 -1.3820059741198356e+00 -4.7867017228936763e+00 + -1.3228295719432319e+00 -1.4323548870509495e+00 -4.8380079277483681e+00 + -1.4464881215160288e+00 -1.4591159486396958e+00 -4.8914022249519693e+00 + -1.5864295684354088e+00 -1.4629959849382355e+00 -4.9541527919660417e+00 + -1.7442511279228579e+00 -1.4460445821496437e+00 -5.0309282960971675e+00 + -1.9146918806222226e+00 -1.4409451940221905e+00 -5.1160188060767275e+00 + -2.0457988985500108e+00 -1.6417393483802223e+00 -5.0642103757902817e+00 + id 13997 + loc 6.1628174781799316e-01 9.8679316043853760e-01 402 + blend 0.0000000000000000e+00 + interp 4.9552361470287343e-01:4.9551865946672641e-01:8.8564565886146251e-02:3.4943654679178043e-01:8.5394524051246157e-01:3.3933225823663310e-01:1.8148121032643656e+00:3.5487050707886786e-01:2.7643042161834268e+00:3.7108808412420408e-01:2.9984918209920886e+00:3.2289106920306321e-01:3.5079174949280860e+00 + CVs 20 + -6.9073317734983361e-02 1.5551481983044319e-01 -1.5740123831394970e-01 + -1.2290731792211412e-01 3.1905202774272579e-01 -3.0711356124281886e-01 + -1.6544884436510518e-01 4.8799447154087328e-01 -4.5865180481462370e-01 + -2.0148236366050226e-01 6.5937577149676208e-01 -6.1439153274816038e-01 + -2.3370322561743412e-01 8.3323236429883274e-01 -7.7182701795599717e-01 + -2.6461608850465868e-01 1.0099227124772328e+00 -9.3092970310220324e-01 + -2.9691169158707775e-01 1.1871704709494060e+00 -1.0938823240222986e+00 + -3.3479725609142597e-01 1.3605742119469622e+00 -1.2628578241699620e+00 + -3.8182079989676543e-01 1.5249941579537043e+00 -1.4364467510640426e+00 + -4.4066478053149138e-01 1.6782288474763436e+00 -1.6125747500245775e+00 + -5.1263409405581595e-01 1.8188366786416603e+00 -1.7877977763009953e+00 + -6.0172418055855614e-01 1.9447076723428935e+00 -1.9601912245668065e+00 + -7.1339182693613923e-01 2.0540000596150523e+00 -2.1294427822762314e+00 + -8.3940905262660204e-01 2.1441075311291860e+00 -2.2858558896506933e+00 + -9.6335410961029999e-01 2.2193227538569378e+00 -2.4208474748883559e+00 + -1.0990470780983133e+00 2.2915482225290713e+00 -2.5415969196540300e+00 + -1.2938994823563768e+00 2.3660483195465898e+00 -2.6515913864011642e+00 + -1.5573534245508409e+00 2.4243192717522986e+00 -2.7299606130080312e+00 + -1.8142264491586548e+00 2.4441037411746738e+00 -2.7444702742102809e+00 + id 13998 + loc 4.4444841146469116e-01 1.4576184749603271e-01 1078 + blend 0.0000000000000000e+00 + interp 2.8909439728591990e-01:2.5572555446097806e-01:8.9045493206088833e-01:2.5730239730536852e-01:1.9701960368482534e+00:2.4728273170633447e-01:2.8727509840956196e+00:2.8909150634194708e-01:3.6365387131483855e+00 + CVs 20 + 3.3172917442332348e-02 3.2169058723070565e-01 -1.3262539719852245e-01 + 1.4669026152850095e-02 6.2274665527175233e-01 -2.6006742450279319e-01 + -3.9668384065847384e-02 9.1283945994182680e-01 -3.9586395273997632e-01 + -1.2240416257422448e-01 1.1896481565919435e+00 -5.4579358077704088e-01 + -2.3564272669115549e-01 1.4411087105302478e+00 -7.0846963587481282e-01 + -3.7868410138457720e-01 1.6506183801219949e+00 -8.7599116475496419e-01 + -5.4775763213476047e-01 1.8015913222323872e+00 -1.0355932984590663e+00 + -7.3388881920875471e-01 1.8851972569692110e+00 -1.1742339843336160e+00 + -9.2314621021642851e-01 1.9025124447229844e+00 -1.2815621618030248e+00 + -1.1019094705300942e+00 1.8617850787881234e+00 -1.3529330678371814e+00 + -1.2621041330482203e+00 1.7733293607474656e+00 -1.3903758901877468e+00 + -1.4017142601438268e+00 1.6454595603534610e+00 -1.4008608350245804e+00 + -1.5224295227230702e+00 1.4827097589717673e+00 -1.3930638022962278e+00 + -1.6235271271464387e+00 1.2894557690142037e+00 -1.3733217607747858e+00 + -1.6979555694575135e+00 1.0772290814747660e+00 -1.3447374857503298e+00 + -1.7242375286582574e+00 8.8618367316168656e-01 -1.3019525416581352e+00 + -1.6871020175704337e+00 8.1841116002374503e-01 -1.2288668937637255e+00 + -1.6675048413486362e+00 9.3313150740983497e-01 -1.1386265614047328e+00 + -1.4846142690175217e+00 7.4902078364550861e-01 -1.0963155407017302e+00 + id 13999 + loc 1.8663489818572998e-01 5.5097740888595581e-01 378 + blend 0.0000000000000000e+00 + interp 4.3016620083254520e-01:4.2710867147200282e-01:3.0442910993058214e-01:4.3016189917053688e-01:8.8014135945312888e-01:3.9674118000957448e-01:1.1009842443686304e+00:4.0046703558589292e-01:1.9977399620328316e+00:3.9369667408349940e-01:2.7959710233290833e+00:2.8307756894691127e-01:3.6334224966420976e+00 + CVs 20 + 4.9935311542426569e-01 3.3182576450176277e-01 2.4765948135884783e-01 + 9.3737498683261122e-01 5.7051153966854340e-01 4.2506027936715851e-01 + 1.3606225904794007e+00 7.5527304321268418e-01 5.7218840296447548e-01 + 1.7858035400211838e+00 9.1343335607100840e-01 7.0923551736577062e-01 + 2.2063057415863745e+00 1.0492970977679272e+00 8.3883447856053306e-01 + 2.6236537701199998e+00 1.1607933185120478e+00 9.6273914193051102e-01 + 3.0489526362074066e+00 1.2414637205414571e+00 1.0838764664278773e+00 + 3.4926586393873222e+00 1.2840947362015840e+00 1.2081458616065310e+00 + 3.9504634090723734e+00 1.2836685303147042e+00 1.3424507229247657e+00 + 4.4009352105197932e+00 1.2414640907634937e+00 1.4854849394969931e+00 + 4.8236653605897946e+00 1.1693663636335898e+00 1.6254657051956984e+00 + 5.2143075691686338e+00 1.0793626055050263e+00 1.7546678993125280e+00 + 5.5749333421353393e+00 9.5327410689650938e-01 1.8764683665383526e+00 + 5.8985342800331075e+00 7.2784226548782494e-01 1.9899156556286761e+00 + 6.1761102166821615e+00 3.6498149283996995e-01 2.0910885820765648e+00 + 6.4048165090303737e+00 -6.1609852100842577e-02 2.1937902295127905e+00 + 6.5713475354213795e+00 -4.0811292248971487e-01 2.2967402595138182e+00 + 6.6938442169948260e+00 -6.2316158536697541e-01 2.3879074288529378e+00 + 7.0200293165710352e+00 -8.8927220433482734e-01 2.5245668022510666e+00 + id 14000 + loc 2.6475900784134865e-02 2.0453657209873199e-01 415 + blend 0.0000000000000000e+00 + interp 4.9807009139204350e-01:2.9634309496208000e-01:1.0678364671894314e-02:1.4562654309255446e-01:1.2044066875992427e+00:3.7113743119952630e-01:2.0565689991246048e+00:4.9806511069112963e-01:2.6987968226180334e+00:2.4988810710503490e-01:3.2078481206125016e+00 + CVs 20 + 1.9947968114106801e-01 1.4253286166561505e-01 -2.5706001112996385e-01 + 3.6941646409167916e-01 2.6899592072869716e-01 -4.6345998818377110e-01 + 5.3803085365796555e-01 3.2875323579386656e-01 -6.3985930567398031e-01 + 7.1819794820613991e-01 3.5252628140822256e-01 -8.0362789077676000e-01 + 9.0606803226741861e-01 3.3995776574940079e-01 -9.4954396855769319e-01 + 1.0968689935225189e+00 2.9393630353706968e-01 -1.0737166630005259e+00 + 1.2869264037445576e+00 2.2325878180747039e-01 -1.1754531909040171e+00 + 1.4761376460860738e+00 1.4235518070664932e-01 -1.2578935715610635e+00 + 1.6650670524448101e+00 6.0013747383668381e-02 -1.3236858869982440e+00 + 1.8458877005819871e+00 -2.9218632096965402e-02 -1.3761723129543508e+00 + 2.0069261865303027e+00 -1.3187388526663213e-01 -1.4263391735428668e+00 + 2.1490300599547165e+00 -2.3936222293616982e-01 -1.4884985943233335e+00 + 2.2871027551539083e+00 -3.3528253306986056e-01 -1.5677731622168900e+00 + 2.4339835035633879e+00 -4.1280271048140382e-01 -1.6573593222477401e+00 + 2.5906404527749758e+00 -4.7811646978585109e-01 -1.7463594914471627e+00 + 2.7516262937623672e+00 -5.4060296088421955e-01 -1.8291880511686629e+00 + 2.9151139591939494e+00 -6.0655396478878676e-01 -1.9004966725610437e+00 + 3.0847819551489222e+00 -6.8034577877298363e-01 -1.9474182774943127e+00 + 3.3015856984940113e+00 -6.7822259890738956e-01 -2.0420166179202668e+00 + id 14001 + loc 8.7945324182510376e-01 7.7628600597381592e-01 399 + blend 0.0000000000000000e+00 + interp 5.6971318654634662e-01:4.4373075624372232e-01:1.2405576214946645e-04:4.0151872866403360e-01:7.4098483762649614e-01:2.6940731594206707e-01:1.0594584942975125e+00:3.8594725661232776e-01:1.9182384155108494e+00:4.9268635467727212e-01:2.2335633687745688e+00:5.6970748941448113e-01:2.9131986483103578e+00:2.9383303475676203e-01:3.2927263664561486e+00 + CVs 20 + -2.4234727856421731e-01 2.9699548569475376e-01 -1.5699781510002409e-01 + -4.6902335789417893e-01 5.8901347051981801e-01 -3.4100599216644156e-01 + -6.9293799335627548e-01 8.6303755487852318e-01 -5.7513576967137503e-01 + -9.2088392662282781e-01 1.1013359038120092e+00 -8.6098421624125776e-01 + -1.1554731540072336e+00 1.2871976044286844e+00 -1.1852273141101959e+00 + -1.4003785059604339e+00 1.4088293077328331e+00 -1.5332145234557444e+00 + -1.6605863633202236e+00 1.4592971399966719e+00 -1.8939342556957246e+00 + -1.9420822831430997e+00 1.4396103201916051e+00 -2.2578544813357659e+00 + -2.2489937748351858e+00 1.3597504597404340e+00 -2.6138860014786305e+00 + -2.5765064848442027e+00 1.2237649637406145e+00 -2.9505689029979010e+00 + -2.9124645289063986e+00 1.0241638105725044e+00 -3.2590220123495159e+00 + -3.2529087607780913e+00 7.7140293588845710e-01 -3.5304326914241888e+00 + -3.6077068014142553e+00 5.0733447673757404e-01 -3.7579159148635926e+00 + -3.9825573533235517e+00 2.6064559621370054e-01 -3.9425806629601219e+00 + -4.3703178125387696e+00 2.5057306873241925e-02 -4.0910418682397589e+00 + -4.7439102579368875e+00 -1.7354410616610094e-01 -4.2062773415567722e+00 + -5.0381909609930045e+00 -2.4102749695918890e-01 -4.2913752371193006e+00 + -5.2223524673205501e+00 -1.9286071665503557e-01 -4.3631733124385734e+00 + -5.6245019604424202e+00 -2.2565541982953763e-01 -4.5005424054405161e+00 + id 14002 + loc 1.9182632863521576e-01 1.0249727964401245e-01 380 + blend 0.0000000000000000e+00 + interp 3.0893583962727339e-01:2.5237213484579268e-01:6.0903658910755776e-01:2.4130725540007494e-01:1.9119857299645764e+00:3.0893275026887712e-01:2.7299841485550909e+00:2.4589385688204571e-01:3.6317767624701558e+00 + CVs 20 + -4.1299372665206890e-01 3.7332028608594237e-01 6.1897442972423211e-01 + -6.7924627790695857e-01 6.3266128367343044e-01 1.1256260872422243e+00 + -9.0261367665201508e-01 8.4729307531047038e-01 1.6044283573832103e+00 + -1.1328748386846570e+00 1.0522309059014163e+00 2.0879543766873376e+00 + -1.3868656057424669e+00 1.2515220145545989e+00 2.5688454096512761e+00 + -1.6790076511085132e+00 1.4401379876546336e+00 3.0482944318391580e+00 + -2.0210981984418184e+00 1.6013712093101307e+00 3.5346037775313661e+00 + -2.4288098758907446e+00 1.7021306580602626e+00 4.0207700655222904e+00 + -2.9084098788327228e+00 1.7064631994380566e+00 4.4813322836432308e+00 + -3.4472855469722656e+00 1.5873500729520793e+00 4.8886238156976596e+00 + -4.0141647364777251e+00 1.3293715092667968e+00 5.2284192734966144e+00 + -4.5629954425178232e+00 9.2991378866729812e-01 5.4901824447658623e+00 + -5.0394626557773510e+00 4.1067206451888838e-01 5.6485979821283312e+00 + -5.4060175169850311e+00 -1.7301473738277950e-01 5.6845100815265788e+00 + -5.6813550192708071e+00 -7.6895681327370324e-01 5.6283680594674950e+00 + -5.9275575921017243e+00 -1.3706989929063447e+00 5.5520852105443819e+00 + -6.1882190006283349e+00 -1.9939349410548810e+00 5.5411180063499259e+00 + -6.4442299300377615e+00 -2.5992990517646288e+00 5.6462157929843144e+00 + -6.6254972942294588e+00 -3.0206024328825269e+00 5.7665221642251154e+00 + id 14003 + loc 7.6309889554977417e-01 5.0462681055068970e-01 412 + blend 0.0000000000000000e+00 + interp 4.4238301407199160e-01:2.9163144745613240e-01:7.6539339622339941e-02:3.8128077939369542e-01:9.4866735083772236e-01:4.2996103718260753e-01:1.3767569088222678e+00:2.9034018633724445e-01:2.0317196346654178e+00:3.9793912984969987e-01:2.7614571360929352e+00:4.4237859024185089e-01:3.4711880967885858e+00 + CVs 20 + 6.7903179524368729e-01 8.6384299822483357e-02 -2.4947756550806149e-01 + 1.1183910227550840e+00 8.0907500407835731e-02 -4.5343914187559914e-01 + 1.4982607994324271e+00 4.8697578863732827e-02 -6.3571744810201214e-01 + 1.8837709555007152e+00 1.4860589969654558e-02 -7.9678228900156878e-01 + 2.2744900879945233e+00 -2.3205245827363719e-02 -9.2657002464592042e-01 + 2.6698731139326495e+00 -6.8383253064909777e-02 -1.0176517838861825e+00 + 3.0676326081194256e+00 -1.2299480911449623e-01 -1.0656013187578028e+00 + 3.4635879739725999e+00 -1.8909657219121012e-01 -1.0697000367921761e+00 + 3.8519138157478503e+00 -2.6872874459293916e-01 -1.0330024389818182e+00 + 4.2257043362215434e+00 -3.6257198668018065e-01 -9.6066408556820426e-01 + 4.5842515938979984e+00 -4.7041213869215537e-01 -8.5895061016077967e-01 + 4.9454310097577610e+00 -6.0330555289426702e-01 -7.3916821382919640e-01 + 5.3289194454107820e+00 -7.9347331989814940e-01 -6.2452842900099348e-01 + 5.7226983842143264e+00 -1.0676336308934011e+00 -5.4203811825374593e-01 + 6.1006611371203405e+00 -1.4253947308890860e+00 -5.0805050130552076e-01 + 6.4450106845507484e+00 -1.8549919135994071e+00 -5.3625706600841583e-01 + 6.7383243141155020e+00 -2.3345563755994290e+00 -6.3998259807102564e-01 + 6.9623330563935077e+00 -2.8176758610273729e+00 -8.1038826129839991e-01 + 7.1193268519459245e+00 -3.1860876018853905e+00 -9.4805033130607219e-01 + id 14004 + loc 1.2358006834983826e-01 8.6980156600475311e-02 382 + blend 0.0000000000000000e+00 + interp 3.9407194677223523e-01:2.9615873786606356e-01:5.4039173215739456e-01:3.0400406484800857e-01:1.7789719594298743e+00:3.2370969858153897e-01:2.1441758260054722e+00:2.7103221594422766e-01:3.2945955532710993e+00:3.9406800605276754e-01:3.9649183033118844e+00 + CVs 20 + -5.2256476601752777e-01 1.5707354473371499e-01 -6.2710662127437833e-01 + -9.0686815953519861e-01 1.8298979974533258e-01 -1.0467928715936949e+00 + -1.2499774119402365e+00 1.5476805407885558e-01 -1.3971357833727929e+00 + -1.5828488400177918e+00 1.0847963273159422e-01 -1.7285591618809453e+00 + -1.8992496692885430e+00 5.6914612491376304e-02 -2.0423501674236917e+00 + -2.1986896198460841e+00 1.3424879498716402e-02 -2.3476165803029589e+00 + -2.4876325320338895e+00 -9.9822180960846829e-03 -2.6577080651607554e+00 + -2.7780279685829412e+00 -6.8629188946329744e-03 -2.9870679495005623e+00 + -3.0826998395843059e+00 1.5006487764635201e-02 -3.3540699055204044e+00 + -3.4135000583453152e+00 2.6566018332550678e-02 -3.7770666541895652e+00 + -3.7847833525034824e+00 -1.8834168023050157e-02 -4.2532462921387726e+00 + -4.2056053315960913e+00 -1.6471962304275323e-01 -4.7486947351824309e+00 + -4.6675060871158198e+00 -4.3054658690308445e-01 -5.2211958744424756e+00 + -5.1514293762641739e+00 -8.1217439913693656e-01 -5.6395108909917386e+00 + -5.6445831847576784e+00 -1.2891646350041071e+00 -5.9805189937435923e+00 + -6.1378928175056373e+00 -1.8376798264298331e+00 -6.2291457372113879e+00 + -6.6144758006366118e+00 -2.4406806200654989e+00 -6.3843868749673227e+00 + -7.0467228454380981e+00 -3.0716554111818652e+00 -6.4644613833055011e+00 + -7.4063258276521555e+00 -3.5846966409790211e+00 -6.5274323346325467e+00 + id 14005 + loc 4.2539489269256592e-01 9.5961219072341919e-01 400 + blend 0.0000000000000000e+00 + interp 3.8850494747319120e-01:2.6993756169647959e-01:5.6893672779611215e-02:3.7541500609254097e-01:7.5571527818366380e-01:3.2802404744867281e-01:1.6252583779448446e+00:3.8817752594589416e-01:2.3824255115395392e+00:3.3973581473477527e-01:3.0000711513646889e+00:3.8850106242371646e-01:3.6432988620674314e+00 + CVs 20 + -1.6328275818352753e-01 3.3281211755421530e-01 -1.5850467205170599e-01 + -3.5108150662241544e-01 6.4960182614437745e-01 -3.3713601669116533e-01 + -5.3139763379931904e-01 9.4419068935306694e-01 -5.6772306793319705e-01 + -6.9664889526163742e-01 1.1959905927209620e+00 -8.5385030792017114e-01 + -8.5460578837861512e-01 1.3866828213629203e+00 -1.1826102985448377e+00 + -1.0064793850149816e+00 1.5077478732156242e+00 -1.5413589030371746e+00 + -1.1472209128723756e+00 1.5575725809362551e+00 -1.9193267927695836e+00 + -1.2709661854201519e+00 1.5380313228977593e+00 -2.3084660762997555e+00 + -1.3722321133099378e+00 1.4533614584722030e+00 -2.7047944550139671e+00 + -1.4438761611419637e+00 1.3090303062636415e+00 -3.1010237943483006e+00 + -1.4814209483656993e+00 1.1127916704882468e+00 -3.4774366390991189e+00 + -1.4923305942853231e+00 8.7779833001206353e-01 -3.8047078344324023e+00 + -1.4939056487270834e+00 6.2478166852675909e-01 -4.0449177477479905e+00 + -1.4995238004798142e+00 3.9248758656974525e-01 -4.1525308610304732e+00 + -1.4985963166848137e+00 2.1944594911429416e-01 -4.1226361303653904e+00 + -1.4701999841398667e+00 8.9413519035525635e-02 -4.0307322283463005e+00 + -1.4222200359711097e+00 -5.2278880830056718e-02 -3.9534944135097350e+00 + -1.3940210391882069e+00 -2.4529532687781108e-01 -3.9252425321831748e+00 + -1.5017594472278775e+00 -5.7797290291072390e-01 -4.0053640616138741e+00 + id 14006 + loc 9.8037946224212646e-01 3.4611502289772034e-01 379 + blend 0.0000000000000000e+00 + interp 5.4394077896437454e-01:4.5894769292150195e-01:5.6801298646265819e-02:3.5107450446701349e-01:5.6331088378280358e-01:3.6461683017446400e-01:1.3935309399653719e+00:5.4393533955658491e-01:1.8544423390419245e+00:2.8903833449165450e-01:2.8371809315339531e+00:3.2529476642018929e-01:3.6356194478166262e+00 + CVs 20 + 4.3747887585677081e-01 3.5242903075072707e-01 -3.1114731192967968e-02 + 8.5159416410183042e-01 6.5572491965076429e-01 -7.2971145683333405e-02 + 1.2909308297954856e+00 9.1910610772488988e-01 -1.5250325972082726e-01 + 1.7718359346116344e+00 1.1602437166605628e+00 -2.7018095321272212e-01 + 2.2887633411857480e+00 1.3897166017566915e+00 -4.0104400480515501e-01 + 2.8460971469568972e+00 1.5954020249738685e+00 -5.1209531162495270e-01 + 3.4463309324450009e+00 1.7454125084135201e+00 -5.7163954486357182e-01 + 4.0709497951282740e+00 1.8092359116158383e+00 -5.5682075850788681e-01 + 4.6793902199443238e+00 1.7659623343108926e+00 -4.6443188848852146e-01 + 5.2212037789380457e+00 1.6051799899545602e+00 -3.1901943976795799e-01 + 5.6485029092102668e+00 1.3315120018783109e+00 -1.6302450960004078e-01 + 5.9223221940412056e+00 9.7156441983926500e-01 -3.3173436088993258e-02 + 6.0367620503638886e+00 5.7993969514984078e-01 5.9778001809120740e-02 + 6.0600221388442108e+00 2.0385798706409552e-01 1.4739439903793361e-01 + 6.0922050703804089e+00 -1.6858010778593480e-01 2.7715326480122227e-01 + 6.1840818965809294e+00 -5.5826529424567939e-01 4.5601534516037701e-01 + 6.3514141592137969e+00 -9.5747124068832701e-01 6.4786372284273863e-01 + 6.5789851730115485e+00 -1.3455670019544379e+00 8.2090003471605189e-01 + 6.6792648285343788e+00 -1.6416416210171390e+00 9.9594945239109034e-01 + id 14007 + loc 1.6374287009239197e-01 3.7904006242752075e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5684717168850775e-01:4.5630568782146846e-01:2.3790027960981897e-01:3.3278847980794890e-01:9.8544377095180369e-01:4.5684260321679088e-01:1.3832109384247140e+00:3.4113453201799743e-01:1.9953707597458585e+00:3.3595856374566679e-01:2.9946747138861167e+00:3.6473776904990263e-01:3.3805470314510657e+00:3.3818060502465780e-01:3.9489630960805666e+00 + CVs 20 + -2.6820965560284010e-01 1.8835514092239575e-01 -1.0193875684519943e-01 + -5.0824404297157122e-01 4.1167714163027241e-01 -1.5086295706188213e-01 + -7.2840722711035677e-01 6.6599476398224344e-01 -1.6940076788778102e-01 + -9.4245899869325844e-01 9.5309800680192358e-01 -1.8002124016533289e-01 + -1.1750475449495694e+00 1.2685519820631126e+00 -2.1624138566955931e-01 + -1.4523800638463822e+00 1.5876917275541256e+00 -3.1597420384615693e-01 + -1.7969614030967807e+00 1.8664968900939005e+00 -5.1564158399212578e-01 + -2.1955781048016529e+00 2.0253219195138006e+00 -8.5271352651439247e-01 + -2.5429180958473876e+00 1.9869924435875639e+00 -1.3002982342923755e+00 + -2.7424645768201978e+00 1.7821394003077076e+00 -1.7479660475562011e+00 + -2.8085268202719513e+00 1.4738302360040532e+00 -2.1567982788706010e+00 + -2.7525014992742007e+00 1.0795630617103873e+00 -2.5439585968617733e+00 + -2.5573530606330110e+00 6.4800316938059366e-01 -2.8652564420751414e+00 + -2.2827574482464890e+00 2.8682903239809077e-01 -3.0506903788750517e+00 + -2.0117307160184583e+00 1.7807352959953282e-02 -3.1424480914628536e+00 + -1.7538402554072579e+00 -1.9918140534433415e-01 -3.2537185393069841e+00 + -1.5260710655109504e+00 -3.2129912593555532e-01 -3.4858972978919747e+00 + -1.3386074604756613e+00 -3.1364949046152768e-01 -3.8645339279218343e+00 + -1.0873408001877094e+00 -3.1407454888486441e-01 -4.3609888862878785e+00 + id 14008 + loc 2.3175255954265594e-01 8.5783541202545166e-01 403 + blend 0.0000000000000000e+00 + interp 2.9871248101574716e-01:2.8883062339335941e-01:1.1261519649042429e-02:2.7337056732253817e-01:8.6247264623703168e-01:2.7309088244467822e-01:1.5511236167979727e+00:2.7706736143826488e-01:2.1780296599323936e+00:2.9870949389093704e-01:3.3493344001907399e+00 + CVs 20 + 7.7430394183219259e-03 1.7555057043129363e-01 -4.5331245033943750e-02 + -1.7535360642877029e-02 3.2158063968448825e-01 -7.2559506545934752e-02 + -6.0863573030220636e-02 4.5231242940505356e-01 -8.3526397965460186e-02 + -1.0620995485336493e-01 5.7481227003566426e-01 -7.6914423258252179e-02 + -1.4986208733151751e-01 6.8515207841038195e-01 -5.3628199496157158e-02 + -1.8603696008172094e-01 7.7873889354656178e-01 -1.6251127209062161e-02 + -2.0781689143552756e-01 8.5181622547608626e-01 3.0762436963964464e-02 + -2.0926207708427919e-01 9.0277337919834189e-01 8.0856829619499276e-02 + -1.8472435976420032e-01 9.3263987687833605e-01 1.2562510960954903e-01 + -1.2659025597965823e-01 9.4848798831520753e-01 1.5608761146260908e-01 + -2.6058166429538399e-02 9.6654737403909929e-01 1.6287057979168221e-01 + 1.1748729197695218e-01 1.0146958545685103e+00 1.4006628059936663e-01 + 2.8157707233380486e-01 1.1242756474438540e+00 9.6025400873020486e-02 + 4.2155585316982791e-01 1.3029846764539412e+00 5.8588404642963360e-02 + 4.9840081627055538e-01 1.5143211215718957e+00 5.9608042060014535e-02 + 5.0720759339297483e-01 1.7009295851301911e+00 1.0786377552789031e-01 + 4.7162356771406533e-01 1.8373935988008241e+00 1.7623475874325997e-01 + 4.1176934855805691e-01 1.9303193006652479e+00 2.3489718393002032e-01 + 3.4377663313907636e-01 1.9275964883203092e+00 2.9355412551734683e-01 + id 14009 + loc 9.7161293029785156e-01 1.1049962043762207e-01 407 + blend 0.0000000000000000e+00 + interp 4.7431031037220278e-01:1.1329186254255671e-01:9.2814667738170242e-01:3.0127216383901467e-01:1.8442392097419247e+00:2.4632336521010062e-01:2.6628281450200366e+00:4.7430556726909906e-01:3.0194305623408413e+00 + CVs 20 + -3.8802549653911383e-01 2.8638812759053012e-01 1.3802974128882489e-01 + -5.8736865771774416e-01 4.1680470358788857e-01 2.5084678986853276e-01 + -7.0338404517178987e-01 4.7973976946950919e-01 3.5347280669452452e-01 + -8.1736906631781647e-01 5.2751095635949286e-01 4.5078178844816774e-01 + -9.1934269239176225e-01 5.5830601132104296e-01 5.4260233759833332e-01 + -9.9651458650468072e-01 5.7231433948087140e-01 6.3285671262271281e-01 + -1.0326046680935077e+00 5.7668169744875475e-01 7.3310889551682290e-01 + -1.0191159016684355e+00 5.9617285211641169e-01 8.6399807743691881e-01 + -9.9192159449278561e-01 6.6151765526989781e-01 1.0284227839809619e+00 + -1.0058558449357504e+00 7.4797355474620442e-01 1.1780686668429550e+00 + -1.0559127205869359e+00 8.0800296393015392e-01 1.2754950952706854e+00 + -1.1192345035021611e+00 8.3359367237492865e-01 1.3218114978939128e+00 + -1.1882114417200846e+00 8.2123576193155723e-01 1.3209007878451118e+00 + -1.2605885558007199e+00 7.5052177970872058e-01 1.2701137482897678e+00 + -1.3374050758431497e+00 6.1598300692457997e-01 1.1693605696505842e+00 + -1.4253016145656707e+00 4.5318504016408967e-01 1.0274656888044560e+00 + -1.5302714017626300e+00 3.0713936386673968e-01 8.6054785572056547e-01 + -1.6623958924453732e+00 1.9578033837122893e-01 6.8566778942473339e-01 + -1.7968753025629736e+00 2.1977933019273349e-01 5.5077021845285867e-01 + id 14010 + loc 8.2243785262107849e-02 7.7106177806854248e-01 401 + blend 0.0000000000000000e+00 + interp 4.1112275768164680e-01:3.3619502036935300e-01:3.2450436499637980e-01:2.8290968585124160e-01:1.0421698169328768e+00:3.2261466482338563e-01:1.9081347046345623e+00:4.1111864645406998e-01:2.3713764739937822e+00:2.5455453128243866e-01:3.0144203298777570e+00:4.0482358638960825e-01:3.4868829120895128e+00 + CVs 20 + -5.2370851732038037e-02 2.8016529824977660e-01 -1.9450484509168578e-01 + -1.0902026070126494e-01 5.4872320189543111e-01 -3.7616048040319483e-01 + -1.5980223768520999e-01 8.1253972047350742e-01 -5.6171022926402547e-01 + -1.9954227782513323e-01 1.0697834577740308e+00 -7.6047472296687202e-01 + -2.3211851349533280e-01 1.3130088573512642e+00 -9.7713423466459959e-01 + -2.6701855855915757e-01 1.5364747271674126e+00 -1.2139253596332820e+00 + -3.2352895428044826e-01 1.7372080787697686e+00 -1.4713061877070444e+00 + -4.2251829032023114e-01 1.9052870912626378e+00 -1.7464842752591789e+00 + -5.7437473333738320e-01 2.0252101214152582e+00 -2.0288358293011890e+00 + -7.7615630468468544e-01 2.0821283296442479e+00 -2.3019754243346844e+00 + -1.0114079362719521e+00 2.0677348242518852e+00 -2.5512772801201207e+00 + -1.2542396289076332e+00 1.9825541760126617e+00 -2.7698352390063596e+00 + -1.4755160276157555e+00 1.8316289807469945e+00 -2.9580930009919721e+00 + -1.6503485128951525e+00 1.6171243283099985e+00 -3.1225830129696042e+00 + -1.7749858795857210e+00 1.3371563318889428e+00 -3.2690037432728762e+00 + -1.8743955954335176e+00 9.9363336607124486e-01 -3.3811069675725518e+00 + -1.9788448070852389e+00 5.9920478977680913e-01 -3.4208154251176182e+00 + -2.0890723096203101e+00 1.9415422299035329e-01 -3.3401523764743954e+00 + -2.0730380910028301e+00 -4.2425126679267455e-02 -3.0939473282878298e+00 + id 14011 + loc 7.7731794118881226e-01 6.5526843070983887e-01 396 + blend 0.0000000000000000e+00 + interp 3.4598768089540610e-01:3.4598422101859716e-01:5.5861500924483121e-01:3.2235778139575105e-01:1.0447599458068164e+00:3.4213560482475264e-01:1.9994592624218490e+00:3.4468000358424916e-01:2.5689129245656175e+00:3.4223527764178224e-01:3.0085663037160941e+00:3.1514873614101624e-01:3.8685654456621701e+00 + CVs 20 + 8.7146185626191275e-01 2.0885304225160295e-01 -3.9223639073274763e-01 + 1.4418950378758204e+00 2.6694409922655848e-01 -7.2618684353769392e-01 + 1.9251099812184640e+00 2.7128622158465227e-01 -1.0497882934574756e+00 + 2.3997576409269574e+00 2.5614671792508459e-01 -1.3761604184631069e+00 + 2.8635077709419936e+00 2.1269273666702349e-01 -1.6947660964019136e+00 + 3.3156750904105610e+00 1.3460886167450958e-01 -1.9980885487568445e+00 + 3.7569602208486650e+00 1.8861485830306668e-02 -2.2839105289462500e+00 + 4.1881987643430669e+00 -1.3711201115508942e-01 -2.5535853223484528e+00 + 4.6065938333939300e+00 -3.3783310925399723e-01 -2.8065273039586529e+00 + 5.0029416929506159e+00 -5.8801459896043573e-01 -3.0415972136808125e+00 + 5.3628626310357408e+00 -8.9190646585804068e-01 -3.2668724109519776e+00 + 5.6711125645671601e+00 -1.2528821860769388e+00 -3.4974922302899323e+00 + 5.9163814611045780e+00 -1.6673850704718283e+00 -3.7404580774551097e+00 + 6.0924463903986048e+00 -2.1216785422239850e+00 -3.9912733928608191e+00 + 6.1954956485524191e+00 -2.5946290070833027e+00 -4.2418641584745416e+00 + 6.2243360617217265e+00 -3.0635513293762724e+00 -4.4796512908169488e+00 + 6.1867509597670534e+00 -3.5098047704404416e+00 -4.6874737702315805e+00 + 6.1053881101162339e+00 -3.9226964758909606e+00 -4.8663709095702599e+00 + 6.0120069170849630e+00 -4.3413113927472686e+00 -5.0520552151022553e+00 + id 14012 + loc 7.8032433986663818e-01 7.4970138072967529e-01 373 + blend 0.0000000000000000e+00 + interp 3.8784063532154595e-01:3.6799961754766441e-01:7.7015147267372408e-01:2.9446266122414910e-01:1.7546726754619053e+00:3.1524739899193566e-01:2.8808486708897796e+00:3.8783675691519276e-01:3.2142754789722385e+00:3.0418451978126892e-01:3.9033013713844142e+00 + CVs 20 + -2.5818241404026099e-01 2.8801747463246397e-01 -1.4699633460503139e-01 + -5.1112770112203476e-01 6.0092624830952768e-01 -3.0962535972330174e-01 + -7.4508238650131475e-01 9.4396022892260101e-01 -4.9052345979683259e-01 + -9.4641671078732692e-01 1.3180718586824189e+00 -6.9637363124839435e-01 + -1.1062184214803026e+00 1.7133682751965724e+00 -9.4246068029010388e-01 + -1.2259250549553646e+00 2.0965323772408113e+00 -1.2574262076325340e+00 + -1.3105888931027765e+00 2.4153862027428463e+00 -1.6631618589968482e+00 + -1.3588826214177199e+00 2.6291194386641452e+00 -2.1493851787797382e+00 + -1.3618373868231446e+00 2.7231114055620624e+00 -2.6821164839026599e+00 + -1.3081105842345715e+00 2.6995036617524573e+00 -3.2217406345504194e+00 + -1.2005976434393442e+00 2.5539903657119654e+00 -3.7297983315732348e+00 + -1.0798260066190233e+00 2.2598315401268887e+00 -4.1557816285954878e+00 + -1.0334261606665542e+00 1.8292307499247682e+00 -4.4428331921766659e+00 + -1.1570941745067311e+00 1.3703003758945387e+00 -4.6038643549689313e+00 + -1.4926849715884849e+00 1.0095636375048516e+00 -4.6926585616399841e+00 + -1.9841684266831525e+00 8.4224389013731971e-01 -4.7027898375105712e+00 + -2.5028008047797146e+00 9.0455749964590337e-01 -4.6021423446448324e+00 + -2.9113645084395330e+00 1.1014949274069745e+00 -4.4083026398681291e+00 + -3.2520443281407223e+00 1.0347210112784209e+00 -4.3490837353528340e+00 + id 14013 + loc 8.0437231063842773e-01 2.9219922423362732e-01 395 + blend 0.0000000000000000e+00 + interp 3.9761274461944868e-01:3.9586113149624286e-01:1.5470388442573280e-01:2.9125796055264852e-01:9.7553003045608577e-01:3.1578480394856973e-01:1.7318647175003039e+00:3.9760876849200250e-01:2.5407131504258977e+00:2.9639365121171468e-01:3.0246935245686934e+00:3.3097948284545525e-01:3.8258257819310861e+00 + CVs 20 + -3.8870169899370310e-01 1.9107682664441983e-01 3.8898521428167687e-01 + -6.8014052012920456e-01 3.2412376387730724e-01 7.0987657391037962e-01 + -9.4454222790214237e-01 4.4429465257266293e-01 1.0211367297753342e+00 + -1.2112304806272889e+00 5.7232783059468662e-01 1.3472176901281330e+00 + -1.4859152740824109e+00 7.0192029376352949e-01 1.6899566757370943e+00 + -1.7723956228124162e+00 8.2575716074413485e-01 2.0506581281731395e+00 + -2.0695704948454758e+00 9.4113858457343968e-01 2.4345608298590253e+00 + -2.3760075078438372e+00 1.0467572814325641e+00 2.8509640537463885e+00 + -2.6922502973221105e+00 1.1322115937830541e+00 3.3048549120293256e+00 + -3.0117405411553908e+00 1.1804925938440949e+00 3.7923671716909113e+00 + -3.3177717724222422e+00 1.1761884883500726e+00 4.3126676347530797e+00 + -3.5972892976367050e+00 1.1065788933201839e+00 4.8667400086635313e+00 + -3.8402016995868458e+00 9.6856792905964273e-01 5.4379416750077247e+00 + -4.0271485516329362e+00 7.8358656005599814e-01 5.9864387664966001e+00 + -4.1425448873940365e+00 5.8532127309038806e-01 6.4787406510645216e+00 + -4.1956984236585413e+00 3.8057900270025868e-01 6.9127556051694121e+00 + -4.1986005643993831e+00 1.5549527442436650e-01 7.2931943713021319e+00 + -4.1442684089769113e+00 -8.4186737600443262e-02 7.6015978247207503e+00 + -3.9926480885744553e+00 -3.7994851062002244e-01 7.8311467667110284e+00 + id 14014 + loc 4.3876245617866516e-01 1.9599965214729309e-01 393 + blend 0.0000000000000000e+00 + interp 3.6069695030934978e-01:2.7000783634033837e-01:2.2713401795238586e-01:2.6048327127837351e-01:1.0217109825919981e+00:3.6037423810453745e-01:1.6621742762831806e+00:3.1703750769922784e-01:2.0342666964376392e+00:3.5862424572815776e-01:2.6770418116932131e+00:2.7817805159796161e-01:3.0897845076925177e+00:3.6069334333984671e-01:3.9122427759165008e+00 + CVs 20 + -8.3592716128984640e-02 3.8108910397190510e-01 3.7381470812784334e-01 + -1.8394235275472787e-01 7.7597343730191981e-01 7.1329388722491527e-01 + -3.1175786686795048e-01 1.1893711612177702e+00 1.0117898591858128e+00 + -4.9836643339594278e-01 1.5966464577893651e+00 1.2722932947158252e+00 + -7.7501755699666164e-01 1.9549451781185330e+00 1.4984914269748217e+00 + -1.1447326334929850e+00 2.2407566085863659e+00 1.6902178502087608e+00 + -1.5877812523355930e+00 2.4534034006026606e+00 1.8475835663733213e+00 + -2.0770880931341176e+00 2.5932920253573339e+00 1.9838911352407607e+00 + -2.5835198425866865e+00 2.6541329100888196e+00 2.1259734316197787e+00 + -3.0732361670274799e+00 2.6277592018786904e+00 2.2976559650070012e+00 + -3.5102146108179979e+00 2.5099589678837981e+00 2.5060100965475991e+00 + -3.8680905594198283e+00 2.3022868827815444e+00 2.7391921024361263e+00 + -4.1322387070743964e+00 2.0053614362170191e+00 2.9775744204036045e+00 + -4.2749504965710505e+00 1.6289219086932816e+00 3.2085897219573685e+00 + -4.2594250956104034e+00 1.2026754755171416e+00 3.4344611715423761e+00 + -4.0774833576751819e+00 7.6164408668723915e-01 3.6927370855932953e+00 + -3.7411915529361179e+00 3.4429762639940709e-01 4.0459484387976161e+00 + -3.2937169256837149e+00 -1.5184740979443223e-02 4.5030360010983266e+00 + -2.9489028677994877e+00 -5.4373899174907314e-01 4.9901045493541449e+00 + id 14015 + loc 3.2172068953514099e-01 9.2365908622741699e-01 378 + blend 0.0000000000000000e+00 + interp 4.4599105448522919e-01:4.0262502696495195e-01:1.4659105802455008e-01:3.4826991221173625e-01:7.9480842520658990e-01:4.4598659457468437e-01:1.0602719128015663e+00:2.2009335343285186e-01:1.9755233245175308e+00:2.2720685522990339e-01:2.6830714782122715e+00:3.9630614243369522e-01:3.0006856749891799e+00:4.2825460475476590e-01:3.4280456754765209e+00:3.7911459062758707e-01:3.9262499717032164e+00 + CVs 20 + 4.8482415733836387e-01 3.5772768533452293e-01 2.8240256085227444e-01 + 8.7875130879618202e-01 6.2036123830060286e-01 4.7900851331911426e-01 + 1.2629637833584080e+00 8.2163649276400830e-01 6.1948345672284044e-01 + 1.6630198182645890e+00 9.8786944252733211e-01 7.1664984973413359e-01 + 2.0751332026103251e+00 1.1328933169032047e+00 7.7810853516020306e-01 + 2.5086020685477908e+00 1.2616513034366599e+00 8.1918413694098779e-01 + 2.9781645786577844e+00 1.3603762821437317e+00 8.5525518332621409e-01 + 3.4921632205404887e+00 1.4110067344970854e+00 8.9581748796737792e-01 + 4.0401125733241940e+00 1.4047151874652033e+00 9.5484811975453376e-01 + 4.5910589907345560e+00 1.3455918626588150e+00 1.0410633129486355e+00 + 5.1165348092382938e+00 1.2521884616673462e+00 1.1443169307959651e+00 + 5.6096148586479515e+00 1.1409581997607892e+00 1.2518444420342085e+00 + 6.0667514843941106e+00 9.8731187984776891e-01 1.3599969733246888e+00 + 6.4633193852112178e+00 7.2333424029717985e-01 1.4546356768361910e+00 + 6.7759194172656736e+00 3.3003290482140102e-01 1.5294573792533177e+00 + 6.9956199754336330e+00 -1.0229312374924504e-01 1.6189756370978543e+00 + 7.1198614085024055e+00 -4.5104421416722307e-01 1.7519617835806982e+00 + 7.2254688169950878e+00 -7.0812725556255662e-01 1.9209302544191775e+00 + 7.5512180570842222e+00 -9.8121324574261548e-01 2.0901250749626641e+00 + id 14016 + loc 8.0395954847335815e-01 5.9821569919586182e-01 380 + blend 0.0000000000000000e+00 + interp 3.5033740943587827e-01:3.1290230704939537e-01:4.4915910893975342e-01:2.8012404940918934e-01:1.1892855893657837e+00:2.9319958152628084e-01:2.4975220752641838e+00:2.7629235375347350e-01:3.4061892024787310e+00:3.5033390606178394e-01:3.9982566231119900e+00 + CVs 20 + -3.9987072312225092e-01 2.1217871958199561e-01 -8.3747924428889242e-01 + -7.4027459340643631e-01 2.9633474986361036e-01 -1.4896362592630092e+00 + -1.0438315647179679e+00 3.1920980828067003e-01 -2.0848431707470403e+00 + -1.3286319009848153e+00 3.0114140018141766e-01 -2.6728974919144433e+00 + -1.5827100565428953e+00 2.3424723949648274e-01 -3.2376983126456347e+00 + -1.7998736470729708e+00 1.1149648982413773e-01 -3.7592864464607088e+00 + -1.9782551591931055e+00 -6.6848326611448794e-02 -4.2150947729804473e+00 + -2.1216819827243949e+00 -2.8664274564136139e-01 -4.5887184683387208e+00 + -2.2448536416250584e+00 -5.2458607189878470e-01 -4.8816032948315087e+00 + -2.3643207295574018e+00 -7.5738387378148309e-01 -5.1056923908084944e+00 + -2.4853900135349223e+00 -9.5569279979331778e-01 -5.2627845411957814e+00 + -2.6125992658928192e+00 -1.0880274853400609e+00 -5.3628081458500976e+00 + -2.7625588097090885e+00 -1.1662210133226845e+00 -5.4511309496274700e+00 + -2.9458160050202924e+00 -1.2817561691481223e+00 -5.5706847935208446e+00 + -3.1476670210970070e+00 -1.5248744625012511e+00 -5.7090581298201553e+00 + -3.3438615619336334e+00 -1.8848022542773837e+00 -5.8452846029072498e+00 + -3.5096505182807798e+00 -2.2895433767394238e+00 -5.9872688043981839e+00 + -3.6426130851916518e+00 -2.6641456264408490e+00 -6.1397980985607568e+00 + -3.8883505520767416e+00 -2.9043964392725012e+00 -6.2581704383686443e+00 + id 14017 + loc 8.2171583175659180e-01 8.9154559373855591e-01 382 + blend 0.0000000000000000e+00 + interp 3.2525437114291511e-01:3.2525111859920369e-01:6.9573930959565544e-04:2.5243095465625737e-01:7.8593613461297307e-01:3.1835525508937396e-01:1.4671032854267421e+00:2.7897384502468481e-01:2.0594158304524104e+00:2.3888089710926161e-01:3.0093450816722713e+00 + CVs 20 + 1.2069713430225968e+00 6.9373087925985039e-02 -6.2255955564082022e-01 + 2.0078273736744667e+00 -4.0754981489223963e-02 -1.0468925933955988e+00 + 2.7323483737741729e+00 -1.9824308695843867e-01 -1.4102569453320228e+00 + 3.4803764425952277e+00 -3.5313810497730858e-01 -1.7608486620891985e+00 + 4.2290828645160436e+00 -4.9247352403558875e-01 -2.1030338212707855e+00 + 4.9554181861431417e+00 -6.1333738960943796e-01 -2.4413880482000656e+00 + 5.6341296392873375e+00 -7.3862674520834304e-01 -2.7931266383404014e+00 + 6.2525090040828379e+00 -9.0276402186211924e-01 -3.1669793662821402e+00 + 6.8067580845856366e+00 -1.1390503747334377e+00 -3.5562766779034307e+00 + 7.2881172084002452e+00 -1.4675949813120894e+00 -3.9391060321075897e+00 + 7.6852197612620774e+00 -1.8855142706589632e+00 -4.2881684055074167e+00 + 8.0035203766237775e+00 -2.3687184138372261e+00 -4.5930854534508816e+00 + 8.2591852407554320e+00 -2.8947281674993692e+00 -4.8520149433319517e+00 + 8.4535435227484346e+00 -3.4399221528001740e+00 -5.0438241274700122e+00 + 8.6030317843172242e+00 -3.9757933694350784e+00 -5.1576316293318811e+00 + 8.7371702774850402e+00 -4.4822687183332786e+00 -5.1934879230508031e+00 + 8.8811161627108763e+00 -4.9425116475631032e+00 -5.1650869676112112e+00 + 9.0449357000223465e+00 -5.3894718135642954e+00 -5.1167769553599740e+00 + 9.2216674540411887e+00 -5.9113770802198164e+00 -5.1321840191777266e+00 + id 14018 + loc 7.6497685909271240e-01 6.5524572134017944e-01 400 + blend 0.0000000000000000e+00 + interp 4.5678293148029675e-01:3.4500291060831434e-01:4.6740898157434208e-02:4.5677836365098196e-01:8.9406268458012761e-01:3.2243840845214483e-01:1.6992700362222748e+00:3.2499167245221949e-01:2.2198422794334736e+00:3.8359603494346051e-01:2.9447982695852764e+00:2.6517744759452422e-01:3.5772126852541080e+00 + CVs 20 + -1.3949122036035755e-01 1.4537092772991794e-01 -2.1800287685509348e-01 + -2.8547796978619455e-01 2.7557135466390181e-01 -4.5229571667177093e-01 + -4.2963605388495962e-01 3.8635465865700080e-01 -7.0491700029295945e-01 + -5.6949177207836221e-01 4.7223365616870289e-01 -9.7346126012243772e-01 + -7.0928630672122117e-01 5.2953324850012440e-01 -1.2560997216292484e+00 + -8.5233195425163055e-01 5.5876204323463252e-01 -1.5540940627534687e+00 + -9.9777022952295136e-01 5.6220364911666854e-01 -1.8657157273755893e+00 + -1.1420481468474619e+00 5.3638717911526068e-01 -2.1800784978637102e+00 + -1.2830047847132902e+00 4.7162731332424923e-01 -2.4828454680910492e+00 + -1.4208926894409144e+00 3.6073375720666512e-01 -2.7633127261771859e+00 + -1.5563597812772039e+00 2.0439906141979081e-01 -3.0094386321539806e+00 + -1.6907253079898439e+00 1.2065783669725105e-02 -3.2037911154654983e+00 + -1.8280000086015593e+00 -1.9883523280632431e-01 -3.3332189196041417e+00 + -1.9735726049043976e+00 -4.0835755851992128e-01 -3.4008330337166934e+00 + -2.1309966926618622e+00 -5.9833801369494899e-01 -3.4194641025984178e+00 + -2.3032563610088475e+00 -7.4324481332922132e-01 -3.3937646620100024e+00 + -2.4936327910339320e+00 -8.1109055808208186e-01 -3.3322470171115377e+00 + -2.6842645837417414e+00 -8.2305799728996221e-01 -3.2755715333664526e+00 + -2.7003178004903807e+00 -1.1944955510530302e+00 -3.3076156089365409e+00 + id 14019 + loc 8.2265788316726685e-01 7.1418249607086182e-01 1069 + blend 0.0000000000000000e+00 + interp 4.9164161978910836e-01:3.5656403676720405e-01:1.1002706544498642e-02:3.7431795865241180e-01:7.0593735630033261e-01:4.0668683372615283e-01:1.1514079735782401e+00:3.5935800396926421e-01:2.0022767380560982e+00:4.9163670337291049e-01:2.7172016851189600e+00:3.5661365390154587e-01:3.2258005766118165e+00 + CVs 20 + 1.4656390157325505e-01 3.0049186661768490e-01 -2.2686273113210947e-01 + 2.7021367416090780e-01 5.9788973338879337e-01 -4.2412072409015533e-01 + 4.0767100152366054e-01 8.8733792753420804e-01 -5.9447546781003213e-01 + 5.9670947787840967e-01 1.1611786151464405e+00 -7.3839368121477400e-01 + 8.4899111727981791e-01 1.4040857285150734e+00 -8.4957579389926652e-01 + 1.1311193150143890e+00 1.6159245561173763e+00 -9.3215112468072159e-01 + 1.3905597318429619e+00 1.8163174055031905e+00 -1.0011459282018635e+00 + 1.5878905220520130e+00 2.0205139213891465e+00 -1.0666783897938743e+00 + 1.7054870287933550e+00 2.2262832729307269e+00 -1.1277432178765046e+00 + 1.7462752989188997e+00 2.4312086924674059e+00 -1.1927941001226310e+00 + 1.7075972204061562e+00 2.6505612769320450e+00 -1.3254825407028250e+00 + 1.5615194676067645e+00 2.8219560642509007e+00 -1.5972213231010939e+00 + 1.3429165349932881e+00 2.8416985522574003e+00 -1.9619870963036843e+00 + 1.1134280603382289e+00 2.6925745184089003e+00 -2.3721240961557672e+00 + 9.3390111026015710e-01 2.3828716555297085e+00 -2.8041938133167541e+00 + 8.6469004928739368e-01 1.9321373488537839e+00 -3.2151853713257856e+00 + 9.4535827070222189e-01 1.3649485446529175e+00 -3.5294959435327176e+00 + 1.1756056786905333e+00 7.5184784000550731e-01 -3.6549472464484727e+00 + 1.3585375057186606e+00 3.7390617634007173e-01 -3.7489062173076064e+00 + id 14020 + loc 9.1868990659713745e-01 9.3044811487197876e-01 379 + blend 0.0000000000000000e+00 + interp 5.8183865885662100e-01:4.8832781617865068e-01:1.9966972062967969e-01:5.8183284047003248e-01:9.8172408366402575e-01:5.7438899387220554e-01:1.3810447965991577e+00:4.9752393330270001e-01:1.9994765644040178e+00:5.3413931528609337e-01:2.3797741321739605e+00:4.4065997246491001e-01:3.0021975856882142e+00:5.3939760779946000e-01:3.3874948791861410e+00 + CVs 20 + -2.0137198812914242e-01 3.3520369104404651e-01 2.0927699410259282e-01 + -4.2302487108378856e-01 6.6009240541297354e-01 4.0458094551169455e-01 + -6.5313654467732951e-01 9.6301387889066614e-01 6.0833391683199856e-01 + -8.8457787854405123e-01 1.2487131764568697e+00 8.1509063855498254e-01 + -1.1191872449868276e+00 1.5250180885351008e+00 1.0098853481535146e+00 + -1.3679861201880141e+00 1.7895926726954745e+00 1.1855925512129759e+00 + -1.6431799511708565e+00 2.0317362900235989e+00 1.3402134798676988e+00 + -1.9487689291834123e+00 2.2411966200489726e+00 1.4734229279471345e+00 + -2.2823486165828926e+00 2.4113007713610077e+00 1.5863369957812634e+00 + -2.6399362137510574e+00 2.5347866441710547e+00 1.6834021243366717e+00 + -3.0188450211269493e+00 2.5997378766641370e+00 1.7735311241050133e+00 + -3.4122173141044265e+00 2.5867297855331488e+00 1.8671678599102983e+00 + -3.8024909344465141e+00 2.4776243924116561e+00 1.9742373403261824e+00 + -4.1696856228035211e+00 2.2819354610521501e+00 2.1043659082507458e+00 + -4.5174384116651787e+00 2.0468537171872030e+00 2.2625964357750608e+00 + -4.8561489432520144e+00 1.8418004881235146e+00 2.4458628280405446e+00 + -5.1670657047996027e+00 1.7289693001599029e+00 2.6517589088675249e+00 + -5.4568630655765640e+00 1.6984775890091792e+00 2.8817992246671205e+00 + -5.8640700087523463e+00 1.6265016488774595e+00 3.1521861487837519e+00 + id 14021 + loc 7.7774286270141602e-01 9.6770000457763672e-01 399 + blend 0.0000000000000000e+00 + interp 4.2375188438686079e-01:2.8442331042935820e-01:3.3260977270692715e-01:2.7552257898105775e-01:1.1686824851698652e+00:3.9789791723530060e-01:1.8292722128898491e+00:4.2374764686801691e-01:2.2032614181098342e+00:3.7478607641086953e-01:2.9660918863352981e+00:3.8033079470040404e-01:3.8103218992746282e+00 + CVs 20 + -1.6240520965662436e-01 2.9893578252266800e-01 -1.7918842992473355e-01 + -3.1171262931344090e-01 5.7417409646478001e-01 -3.6446699547611361e-01 + -4.4680145305138624e-01 8.2435121038814974e-01 -5.6515743202675983e-01 + -5.6709532503690074e-01 1.0474808989662836e+00 -7.8226108521218352e-01 + -6.7526551313242344e-01 1.2434511833288826e+00 -1.0140943341966535e+00 + -7.7649356010569226e-01 1.4137027175569359e+00 -1.2625211800601219e+00 + -8.7836327256456714e-01 1.5532219098078466e+00 -1.5361535076269697e+00 + -9.9038432099552520e-01 1.6486029921118117e+00 -1.8434917840322211e+00 + -1.1251974263332039e+00 1.7024293557625185e+00 -2.1795334520434220e+00 + -1.2983761971670353e+00 1.7349757578280740e+00 -2.5338480338870362e+00 + -1.5124920441436298e+00 1.7287806450816383e+00 -2.9073403244022886e+00 + -1.7408048850986757e+00 1.6167476630262572e+00 -3.2952047947784977e+00 + -1.9703727078469648e+00 1.3798032203711863e+00 -3.6752572492733746e+00 + -2.2450397270736064e+00 1.0800387902054052e+00 -4.0324065300460763e+00 + -2.6020571163482673e+00 7.7352064726505465e-01 -4.3499213579372507e+00 + -3.0077014222482692e+00 4.5940018831026175e-01 -4.5958394309040553e+00 + -3.3787923597966021e+00 1.6167677885170395e-01 -4.7464063064607798e+00 + -3.6784522665786956e+00 -3.6314183215748641e-02 -4.8239234152662389e+00 + -4.1431930462839617e+00 -1.6169580837107955e-02 -4.9103837651867526e+00 + id 14022 + loc 1.7874443903565407e-02 5.1012450456619263e-01 402 + blend 0.0000000000000000e+00 + interp 4.5412531885621360e-01:3.5945372647186163e-01:1.6858691523596758e-01:2.0842934512159561e-01:8.5848584931094218e-01:3.7710053390966036e-01:1.9176831403295864e+00:3.8357423163250048e-01:1.9997961104784934e+00:4.5412077760302505e-01:2.6181809845980339e+00:3.4070670444144047e-01:3.1748187412972788e+00:3.2647058460806017e-01:3.9238549216441498e+00 + CVs 20 + -1.4074631211452659e-01 2.9311056053877638e-01 -2.2233063694653853e-02 + -2.9571121260831879e-01 6.0427640646212866e-01 -6.4859791978581494e-02 + -4.3848703019142582e-01 9.4105822222524360e-01 -1.4099386289354249e-01 + -5.4990553873810244e-01 1.2892295280161796e+00 -2.5698222587733749e-01 + -6.2659389568809731e-01 1.6246455224974943e+00 -4.1380549035517389e-01 + -6.6815244462623702e-01 1.9261413769505498e+00 -6.0327069599643812e-01 + -6.7193964173193643e-01 2.1830830807966222e+00 -8.1084583887195660e-01 + -6.3503224177045536e-01 2.3982958735580957e+00 -1.0227241681175978e+00 + -5.7020478648565798e-01 2.5920405680259631e+00 -1.2365198968574811e+00 + -5.0468639528858095e-01 2.7898433637377229e+00 -1.4571411037102511e+00 + -4.4483449271631947e-01 3.0117167040315458e+00 -1.6865682334489265e+00 + -3.6470819594605242e-01 3.2702019579313197e+00 -1.9402551667514434e+00 + -2.1911499095554487e-01 3.5224722376842363e+00 -2.2536301199053588e+00 + 4.7188317251507517e-02 3.6527364978381449e+00 -2.6401685364680416e+00 + 4.4664933942245133e-01 3.5379201549076713e+00 -3.0894857723616052e+00 + 8.8693039439951515e-01 3.0560165282749097e+00 -3.5815226668307152e+00 + 1.1383958462298638e+00 2.1605211991974631e+00 -4.1015729833410663e+00 + 9.8078112155746078e-01 1.2230788754972937e+00 -4.6064419223501405e+00 + 8.1715193425732702e-01 1.0587378322682095e+00 -4.8497244441773981e+00 + id 14023 + loc 1.9877573847770691e-01 7.8541111946105957e-01 396 + blend 0.0000000000000000e+00 + interp 4.1432832966906430e-01:3.2164009637379998e-01:4.6215035348692202e-02:4.1432418638576762e-01:9.1475956383196189e-01:3.7765151756313853e-01:1.4148827218185378e+00:3.6953791582831397e-01:2.0454921216462258e+00:3.3281368302591574e-01:2.9390389993697434e+00:3.5661916149559675e-01:3.5048650542321425e+00 + CVs 20 + 8.5489963222551069e-01 2.5828318635009045e-01 -2.6205809077266190e-01 + 1.4290444199842802e+00 3.4269673559392688e-01 -5.0649464080666751e-01 + 1.9312705928047769e+00 3.5928152492527043e-01 -7.6066094322177169e-01 + 2.4563396863650691e+00 3.5804617239509245e-01 -1.0333998808532416e+00 + 2.9982663326353740e+00 3.3369612126696080e-01 -1.3079303443159076e+00 + 3.5455772672555805e+00 2.8132092159765032e-01 -1.5681289888962628e+00 + 4.0863934600262946e+00 1.9671674505468428e-01 -1.8040216942313303e+00 + 4.6114348692858007e+00 7.2817277716420659e-02 -2.0122409725951735e+00 + 5.1082695365886810e+00 -1.0100174822334451e-01 -2.1955368105839517e+00 + 5.5567668724531334e+00 -3.3152974279001191e-01 -2.3589164013954780e+00 + 5.9408568265155282e+00 -6.1679908562505004e-01 -2.5016340095516520e+00 + 6.2559704379090917e+00 -9.5674437773696264e-01 -2.6272295820797340e+00 + 6.5037138768167182e+00 -1.3531328979210797e+00 -2.7373805573851495e+00 + 6.6833377610706375e+00 -1.7975033516130334e+00 -2.8260122932054217e+00 + 6.7940640518742299e+00 -2.2717261368590527e+00 -2.8875521316549717e+00 + 6.8363051868344851e+00 -2.7593840959599616e+00 -2.9229755842493192e+00 + 6.8052799831171686e+00 -3.2475977854253770e+00 -2.9301141432276934e+00 + 6.7006762140736917e+00 -3.7213308504672531e+00 -2.9051715409741945e+00 + 6.5508958548167620e+00 -4.2550231797921736e+00 -2.8725640972985560e+00 + id 14024 + loc 5.2680283784866333e-01 7.2305500507354736e-02 401 + blend 0.0000000000000000e+00 + interp 5.8054953502144757e-01:4.2665212602303765e-01:1.1206216526624513e-01:3.0232051310996166e-01:9.4999537855105509e-01:5.8054372952609734e-01:1.6406630846566568e+00:2.8477556939714227e-01:2.3976186362451308e+00:4.1900051633648672e-01:2.9988897729077735e+00:3.8791942702920368e-01:3.6816282450600513e+00 + CVs 20 + 1.3734476908858467e-01 3.3549076299157909e-01 2.1644639275821603e-01 + 2.9217800631261265e-01 6.6720736320160490e-01 4.5876674763959246e-01 + 4.5839510329170408e-01 9.8535290147680976e-01 7.2299335422726230e-01 + 6.3450181148127627e-01 1.2731144334672357e+00 1.0110464112941886e+00 + 8.2266645042426279e-01 1.5110208031210346e+00 1.3251944542258265e+00 + 1.0257333410853473e+00 1.6823379859562479e+00 1.6609861349514132e+00 + 1.2454098450118587e+00 1.7813265484141303e+00 2.0099101226934803e+00 + 1.4815331997693957e+00 1.8179742739594418e+00 2.3634044119232724e+00 + 1.7296767054328912e+00 1.8007190801168991e+00 2.7158965044848706e+00 + 1.9752401665455217e+00 1.7197887287820999e+00 3.0678376924036628e+00 + 2.2040192257479720e+00 1.5704765487923520e+00 3.4187727984446754e+00 + 2.4257758848969102e+00 1.3881817767573004e+00 3.7672070973765091e+00 + 2.6666238834133864e+00 1.2162962487149660e+00 4.1150028684698041e+00 + 2.9440464331960183e+00 1.0546229969774445e+00 4.4626760456610395e+00 + 3.2661093287469098e+00 8.8174592093637738e-01 4.8061876666922574e+00 + 3.5959873329981034e+00 7.6311610604723257e-01 5.1203703511372156e+00 + 3.7753876941531721e+00 8.6904919717627749e-01 5.3580834884143318e+00 + 3.6542976963545106e+00 1.1116774124585878e+00 5.5057699997141896e+00 + 3.9305353456668701e+00 1.2813311092818958e+00 5.7300712738478214e+00 + id 14025 + loc 4.8661696910858154e-01 2.3983910679817200e-01 412 + blend 0.0000000000000000e+00 + interp 5.1282242907247211e-01:3.9284562761890363e-01:1.9562467867549560e-02:3.6467568689932317e-01:7.2903241663737450e-01:4.0349626092546353e-01:1.1697115864247389e+00:2.3669740295588429e-01:1.8106019404889377e+00:4.4199280918089395e-01:2.2828659757561431e+00:3.6925109177658760e-01:3.0150824793956690e+00:5.1281730084818145e-01:3.6856258013195911e+00 + CVs 20 + -1.5550247214992488e-01 1.2277325752089141e-01 -5.2726775949328941e-01 + -2.7165963401446874e-01 1.5832625190462227e-01 -9.1934361901542005e-01 + -3.6229221099051595e-01 1.5831883951804648e-01 -1.2810643889822386e+00 + -4.2977699093909105e-01 1.4425579060150562e-01 -1.6611312909279350e+00 + -4.7296352447272094e-01 1.1137262503568779e-01 -2.0489382296852918e+00 + -4.9284061869481399e-01 5.8963866647100072e-02 -2.4327801428973830e+00 + -4.9229679030782192e-01 -1.0159989467740660e-02 -2.8033319976390216e+00 + -4.7642340180727244e-01 -9.1686194373056917e-02 -3.1547559987343488e+00 + -4.5149650974979272e-01 -1.8046754757507055e-01 -3.4810401557188544e+00 + -4.2381186110572761e-01 -2.7057551895951160e-01 -3.7780490596374801e+00 + -3.9953625211162602e-01 -3.5779117603874000e-01 -4.0466188202468949e+00 + -3.8746841215237188e-01 -4.4488375235651922e-01 -4.2959428700875621e+00 + -4.0103593025441642e-01 -5.3975662678252379e-01 -4.5363560369314815e+00 + -4.5450690934433885e-01 -6.4317737482670689e-01 -4.7677891802134935e+00 + -5.5507287541514128e-01 -7.4510510659158458e-01 -4.9862142275984258e+00 + -6.9791228867601585e-01 -8.3227569944477664e-01 -5.1895642145140730e+00 + -8.6924605226009199e-01 -8.9340061764784062e-01 -5.3759521809214865e+00 + -1.0575015723858419e+00 -9.2032990471745579e-01 -5.5413033649775887e+00 + -1.2954732143020076e+00 -9.2698966006245453e-01 -5.6596091641947393e+00 + id 14026 + loc 7.0464426279067993e-01 1.3366009294986725e-01 373 + blend 0.0000000000000000e+00 + interp 3.1262884548301201e-01:3.1262571919455717e-01:6.8195660804357972e-01:2.0423962876422616e-01:1.0460346447736544e+00:2.3391590921041774e-01:1.9773745325342684e+00:2.5769025965171288e-01:2.4469440974583092e+00:2.1818030941655478e-01:3.1112803393759005e+00:2.6980415008348230e-01:3.9924406053419514e+00 + CVs 20 + 2.8198893826511662e-01 4.2692853857523549e-01 4.0439288338696922e-02 + 5.8727705171520406e-01 8.1706558951855057e-01 8.7802547155142560e-02 + 9.1664042856600547e-01 1.1219093600254979e+00 1.3661031915604077e-01 + 1.2415397259881309e+00 1.3545244459525787e+00 1.6228805878361055e-01 + 1.5492183608447034e+00 1.5570736795052262e+00 1.4877003878746536e-01 + 1.8510266143583944e+00 1.7614069938417170e+00 1.2440470238494172e-01 + 2.1556754842200010e+00 1.9870762656397145e+00 1.3267839569894363e-01 + 2.4541352708750512e+00 2.2469302581458068e+00 2.0515265725758530e-01 + 2.7264695760293720e+00 2.5430920797265677e+00 3.5864874768470029e-01 + 2.9596774259743155e+00 2.8594152644114015e+00 6.0242761694349345e-01 + 3.1486446073412693e+00 3.1518385873603760e+00 9.4061196190898611e-01 + 3.2817060589651526e+00 3.3414014931030422e+00 1.3618126985143970e+00 + 3.3351026263560719e+00 3.3457983343337805e+00 1.8115108795493806e+00 + 3.2981216074820985e+00 3.1355416480632696e+00 2.1830766439208498e+00 + 3.2196182173636592e+00 2.7524182770621772e+00 2.3612804844060742e+00 + 3.2571080766510230e+00 2.2905928975539993e+00 2.3509520135721296e+00 + 3.5362892872976710e+00 1.8532914049306675e+00 2.1980094574378026e+00 + 3.9268908031979333e+00 1.5276167412082950e+00 1.9805771999239856e+00 + 4.2265626235048233e+00 1.0696537095707392e+00 1.9550937257404648e+00 + id 14027 + loc 9.3928617238998413e-01 2.0100012421607971e-01 395 + blend 0.0000000000000000e+00 + interp 4.5369774640322852e-01:3.4382504841589756e-01:2.5270543064932816e-01:4.5369320942576452e-01:8.2199004024996736e-01:4.1401747143717149e-01:1.4001720243930085e+00:3.0863555556718431e-01:2.0229192737321724e+00:2.9393147993671770e-01:2.9979500222370072e+00:3.3687221938008599e-01:3.7803717764033835e+00 + CVs 20 + -4.5928948265608371e-01 3.6893839737313328e-01 2.5565515542626399e-01 + -8.1415270209225066e-01 6.7849326362784712e-01 5.2883401658958173e-01 + -1.1422582652889706e+00 9.5390669968541497e-01 8.0032975159736419e-01 + -1.4821305688773005e+00 1.2087005982562580e+00 1.0696254074009697e+00 + -1.8438621655093037e+00 1.4384963195944507e+00 1.3353899226198163e+00 + -2.2370227160048475e+00 1.6313498906538009e+00 1.6014393921265691e+00 + -2.6688743098283871e+00 1.7703534709475555e+00 1.8692981845412269e+00 + -3.1404054415769735e+00 1.8359703607598119e+00 2.1333548687040373e+00 + -3.6414477881994696e+00 1.8097768872200790e+00 2.3831442549840847e+00 + -4.1493904096586380e+00 1.6790289954262385e+00 2.6093494178554191e+00 + -4.6336726001886577e+00 1.4382390111506482e+00 2.8053938831983869e+00 + -5.0588347791730905e+00 1.0893544082941502e+00 2.9614291280936564e+00 + -5.3875965325502495e+00 6.5175500107268736e-01 3.0638590158459080e+00 + -5.6099479465927917e+00 1.7260648552724822e-01 3.1134619515904483e+00 + -5.7748606009984345e+00 -3.0381194939865841e-01 3.1365822865059076e+00 + -5.9423196699911802e+00 -7.5560646991635672e-01 3.1676507443333612e+00 + -6.1278601432620565e+00 -1.1579839820086399e+00 3.2427541588663527e+00 + -6.3050247725792525e+00 -1.4860402677107620e+00 3.3864807103986863e+00 + -6.4599999916740627e+00 -1.7759687291036905e+00 3.4764575454821731e+00 + id 14028 + loc 7.3736143112182617e-01 2.0861615240573883e-01 380 + blend 0.0000000000000000e+00 + interp 2.8035515393175653e-01:2.7822363743967865e-01:9.4580487069304620e-01:2.5208337835136507e-01:1.9774031418794773e+00:2.8035235038021722e-01:2.9084484263058519e+00:2.5935160378702937e-01:3.7908520634445781e+00 + CVs 20 + 6.0898456738605256e-01 2.4041144042910328e-01 6.1361221990942716e-01 + 1.0874670536620532e+00 3.4295123515192283e-01 1.0154483728096817e+00 + 1.5219969516416683e+00 3.9009103974585896e-01 1.3609178084150870e+00 + 1.9460068284502037e+00 4.1910063559340471e-01 1.7150461956259067e+00 + 2.3534891080029201e+00 4.3637454863366920e-01 2.0846873327957183e+00 + 2.7407103893665989e+00 4.4515367170348008e-01 2.4769043317469261e+00 + 3.1115318865480939e+00 4.3889947116047345e-01 2.8990563243581526e+00 + 3.4701300018538976e+00 3.9752631499209223e-01 3.3545370721565257e+00 + 3.8097316768925267e+00 2.9547914358170213e-01 3.8403102185729336e+00 + 4.1169310140964495e+00 1.1443763891219350e-01 4.3422724393842955e+00 + 4.3829551697323597e+00 -1.5252076189245356e-01 4.8301055435847378e+00 + 4.5987188464103337e+00 -5.0091733730199284e-01 5.2654359010591012e+00 + 4.7491592944503358e+00 -9.2016167902204726e-01 5.6152111734196843e+00 + 4.8249233513274383e+00 -1.3990456438569212e+00 5.8627291463068385e+00 + 4.8369981420947035e+00 -1.9194168363307265e+00 6.0194193169380146e+00 + 4.8126250472453558e+00 -2.4552375737741574e+00 6.1228831969231816e+00 + 4.7822172806742982e+00 -2.9873542151391392e+00 6.2107892902333370e+00 + 4.7762493435148237e+00 -3.4966596032858672e+00 6.2974426300464730e+00 + 4.8092074814061538e+00 -3.8566625532332988e+00 6.3372724868095052e+00 + id 14029 + loc 9.2193144559860229e-01 6.8091350793838501e-01 403 + blend 0.0000000000000000e+00 + interp 4.7365417956716993e-01:2.6959222461186200e-01:1.9952478181206601e-05:2.7096721757348480e-01:9.7895486500801276e-01:4.7364944302537426e-01:1.2367381847056194e+00:2.6186725282100748e-01:2.0567541691194302e+00:2.7313241992171994e-01:3.2381908157317412e+00 + CVs 20 + 6.5362278916330507e-03 8.1927611801140637e-02 3.1628929613857992e-02 + -1.1086526291583500e-02 1.3116100133860439e-01 6.0676192828634123e-02 + -5.1539314670067310e-02 1.7049777059484952e-01 8.1769266455360715e-02 + -9.4464918814021220e-02 2.0498242883129081e-01 9.8375893987795018e-02 + -1.3510823158068036e-01 2.3035045240181556e-01 1.1528735857742162e-01 + -1.7091368428530310e-01 2.4457474339988822e-01 1.3682379346063667e-01 + -1.9872403364632882e-01 2.4826554755068711e-01 1.6721808920898851e-01 + -2.1449794354193333e-01 2.4438575027534590e-01 2.1062758183388686e-01 + -2.1272171808430723e-01 2.3743723493773769e-01 2.7126294890630187e-01 + -1.8647060884356509e-01 2.3311907257241168e-01 3.5233616296835235e-01 + -1.2779689824210716e-01 2.3809812235881361e-01 4.5417662519859370e-01 + -2.8849702307811788e-02 2.5972634207014705e-01 5.7239708154326563e-01 + 1.1717675610427562e-01 3.0585620808166325e-01 6.9717790209495156e-01 + 3.1568713498795792e-01 3.8305750821275136e-01 8.1244987007529446e-01 + 5.6826563506578531e-01 4.9496603479980683e-01 8.9556195100505620e-01 + 8.6797797738542759e-01 6.3880753059555417e-01 9.1835647183059732e-01 + 1.1940906176577342e+00 7.9866985828832149e-01 8.5312131072716268e-01 + 1.5154337649518688e+00 9.5116938324412581e-01 6.8423637589597841e-01 + 1.5546536265615702e+00 9.5632971083985618e-01 6.2197778119605718e-01 + id 14030 + loc 5.0116497278213501e-01 3.1895112991333008e-01 378 + blend 0.0000000000000000e+00 + interp 5.2221960376158072e-01:4.0455324625144928e-01:1.9781792227984873e-01:3.2813019145841449e-01:9.3943985917482031e-01:4.7760588165639606e-01:1.8295004627551195e+00:5.2221438156554312e-01:2.0575011500424267e+00:4.2087363357179869e-01:2.6080071116551116e+00:3.0312784467641452e-01:3.2277105648571136e+00 + CVs 20 + -3.9045499163080899e-01 3.1306673446103706e-01 -1.1295818882402081e-01 + -7.6066315349771130e-01 5.7976948928093064e-01 -1.6926959715521492e-01 + -1.1367714374389735e+00 8.2229066039784549e-01 -1.9021205796445390e-01 + -1.5328086468995192e+00 1.0663156206499527e+00 -1.9606598951690613e-01 + -1.9450323357428647e+00 1.3255769177332097e+00 -2.0964414394466468e-01 + -2.3730636504978975e+00 1.5992872338131341e+00 -2.5720638697835962e-01 + -2.8215065521700851e+00 1.8719571771695296e+00 -3.6215032732199615e-01 + -3.2888587634060569e+00 2.1215488662539896e+00 -5.3866167052825453e-01 + -3.7634259521274469e+00 2.3269353814708609e+00 -7.8529677890330352e-01 + -4.2315742865400603e+00 2.4758816467856093e+00 -1.0846041635831858e+00 + -4.6888520149902142e+00 2.5584128241163078e+00 -1.4193852945722196e+00 + -5.1408719921966011e+00 2.5560734020965068e+00 -1.7819742907236362e+00 + -5.5823419899259896e+00 2.4438079544213127e+00 -2.1579876531868489e+00 + -5.9753666371921241e+00 2.2338116675467914e+00 -2.5031974732392905e+00 + -6.2784041292582344e+00 2.0024520358662072e+00 -2.7755980557658155e+00 + -6.4759717566064632e+00 1.8249482023609529e+00 -2.9728858394570565e+00 + -6.5546258785258562e+00 1.7357087415804626e+00 -3.1108508802407124e+00 + -6.5336943854957426e+00 1.6993880728648794e+00 -3.2250359450509918e+00 + -6.7188209210878487e+00 1.5299799731442438e+00 -3.4107094611757716e+00 + id 14031 + loc 2.4829535186290741e-01 3.9971369504928589e-01 382 + blend 0.0000000000000000e+00 + interp 3.9288455473644368e-01:3.1274341846968884e-01:1.9513276916709488e-01:2.9912904535570611e-01:9.9753695922829211e-01:2.7257622826637778e-01:1.8623929806662778e+00:3.9288062589089634e-01:2.4468765379131820e+00:2.6226760316187953e-01:3.0423236216601097e+00 + CVs 20 + -5.3818502363009368e-01 1.6141206611885306e-01 -7.7706001868783015e-01 + -9.5611726514901996e-01 2.1017011266654001e-01 -1.2661227144909213e+00 + -1.3576208749058498e+00 2.1555179629651411e-01 -1.6673246493375626e+00 + -1.7785295735449704e+00 2.0089264047885946e-01 -2.0581542865750371e+00 + -2.2086392501992078e+00 1.5595493867388033e-01 -2.4412267339603413e+00 + -2.6404797311865806e+00 7.2782565322364934e-02 -2.8157038631419558e+00 + -3.0741513889696792e+00 -5.4484189794869353e-02 -3.1738276673756465e+00 + -3.5113729088095536e+00 -2.3006421860433890e-01 -3.5024094064720028e+00 + -3.9431828628189938e+00 -4.5338924193831742e-01 -3.7868994866418424e+00 + -4.3523876476682819e+00 -7.1365816017641426e-01 -4.0116275658544165e+00 + -4.7343917884678586e+00 -9.9853028731073890e-01 -4.1708466192528544e+00 + -5.1027406115250047e+00 -1.3078150782274935e+00 -4.2727226634531963e+00 + -5.4676878404728360e+00 -1.6461479161975718e+00 -4.3302492189451041e+00 + -5.8263554099255295e+00 -2.0119236275832870e+00 -4.3561329589298259e+00 + -6.1708955429026409e+00 -2.3969598531040810e+00 -4.3596016462823366e+00 + -6.4941143439394589e+00 -2.7953393008272909e+00 -4.3455368308820619e+00 + -6.7851172365927788e+00 -3.2082932923737619e+00 -4.3150403202094640e+00 + -7.0335384311359377e+00 -3.6421002214704803e+00 -4.2693890806435038e+00 + -7.2686801630018500e+00 -4.1104345995349956e+00 -4.2285076012308123e+00 + id 14032 + loc 8.3325779438018799e-01 9.5987778902053833e-01 1069 + blend 0.0000000000000000e+00 + interp 5.0198551559783533e-01:3.8030071177193370e-01:6.9942491251465788e-02:4.4282437064880076e-01:6.5439619697855111e-01:5.0198049574267933e-01:9.9471119495112581e-01:3.8540685521325252e-01:1.8984002610783686e+00:3.5683046382648781e-01:2.2424508019645986e+00:3.6175304289294835e-01:3.0504265091764680e+00 + CVs 20 + 1.5152029328680250e-01 3.2823348012298503e-01 -1.0489875601614718e-01 + 3.0667634100835189e-01 6.6787368120034662e-01 -2.0385572141407862e-01 + 4.8978349902835772e-01 9.9540043551266910e-01 -2.7125716993630689e-01 + 7.2001604103679040e-01 1.2914731272579465e+00 -2.9768833193861410e-01 + 1.0125847305400864e+00 1.5389645207152367e+00 -2.8623516494952822e-01 + 1.3673471920735558e+00 1.7218216132009188e+00 -2.5214900379590632e-01 + 1.7609777065022825e+00 1.8219361197135107e+00 -2.1936882979181882e-01 + 2.1542471879005682e+00 1.8243833517719628e+00 -2.0004508360615841e-01 + 2.5098981133935583e+00 1.7278503122322393e+00 -1.8614020518055113e-01 + 2.8020976805178139e+00 1.5432109314534799e+00 -1.6255880650467291e-01 + 3.0117108195717641e+00 1.2924646556684654e+00 -1.1781191602856748e-01 + 3.1269557744359173e+00 1.0123559510572255e+00 -4.6824126030053939e-02 + 3.1508866761459333e+00 7.5624673824131117e-01 4.4478834095155517e-02 + 3.1165712838611124e+00 5.4386250513477630e-01 1.5149461468066172e-01 + 3.0718217767584863e+00 3.6124473557463244e-01 2.8611713999007848e-01 + 3.0546117638367880e+00 2.1217831911971863e-01 4.5242054586866082e-01 + 3.0832596574406494e+00 9.7965505130933050e-02 6.6131017787657298e-01 + 3.1794404247364754e+00 2.0500755396598569e-02 9.6439307615968040e-01 + 3.3592844988945005e+00 -1.4384021134067337e-02 1.4007514211461045e+00 + id 14033 + loc 4.4747102260589600e-01 6.2157750129699707e-01 396 + blend 0.0000000000000000e+00 + interp 4.4249325830404501e-01:4.4248883337146200e-01:1.4135059560548391e-02:3.3669010657555654e-01:9.8368845959199935e-01:3.3285295303315776e-01:1.7425073625515868e+00:3.4292115273391599e-01:2.2404517412057050e+00:3.3829898309992196e-01:2.9417323777577575e+00:3.4164507538656752e-01:3.2379873125441123e+00 + CVs 20 + 7.9759922183515441e-01 2.6675879390529228e-01 -2.7283191159535386e-01 + 1.3233076945036848e+00 3.9381892880293873e-01 -4.8412637779128259e-01 + 1.7812924221919031e+00 4.7778402141420118e-01 -6.8276868462283369e-01 + 2.2605060787151947e+00 5.6345291761360894e-01 -8.8767533650811070e-01 + 2.7716485306386489e+00 6.4689325165834966e-01 -1.1014108558744973e+00 + 3.3245011993396671e+00 7.2214946810795855e-01 -1.3282582803081500e+00 + 3.9266116814210776e+00 7.7911579810880183e-01 -1.5765573474306891e+00 + 4.5827848039725678e+00 7.9713405406316218e-01 -1.8543611097161892e+00 + 5.2894199711233210e+00 7.4217570597466254e-01 -2.1626555979129214e+00 + 6.0233652070697214e+00 5.7677265883442908e-01 -2.4990889150195450e+00 + 6.7385184089919248e+00 2.7711720440982401e-01 -2.8620884411290515e+00 + 7.3866527138906681e+00 -1.5433028802902671e-01 -3.2399315593374762e+00 + 7.9405654721203085e+00 -6.9306103740761582e-01 -3.6063538956467784e+00 + 8.3914040627995785e+00 -1.3050227343390839e+00 -3.9363383210525766e+00 + 8.7390181396076052e+00 -1.9588741562007956e+00 -4.2186213967312165e+00 + 8.9860004346632891e+00 -2.6354165479624867e+00 -4.4521374374226870e+00 + 9.1283430395131990e+00 -3.3116368992647134e+00 -4.6417661750449524e+00 + 9.1756950200656640e+00 -3.9333767530761397e+00 -4.7915708145049312e+00 + 9.2007488645312439e+00 -4.2846553997777344e+00 -4.8912993184229903e+00 + id 14034 + loc 1.2581510841846466e-01 1.3339664041996002e-01 402 + blend 0.0000000000000000e+00 + interp 5.2124741585957424e-01:3.6587810514128039e-01:8.3153164047503614e-01:5.2124220338541571e-01:1.3350957226160709e+00:3.4310919027174325e-01:2.0005343494826260e+00:3.6548358811032067e-01:2.8673812103895724e+00:4.3699009065675348e-01:3.1585984291581459e+00:3.3092459458154605e-01:3.9913501891152174e+00 + CVs 20 + -1.2396270113322025e-01 3.1626200029010965e-01 2.5169329223542675e-01 + -2.7560399087722703e-01 6.4044507040975429e-01 4.8563770086796515e-01 + -4.7166421432091143e-01 9.6568149374688828e-01 6.9989997583274721e-01 + -7.1688218988646790e-01 1.2792727753399882e+00 8.9541981142758220e-01 + -1.0059447402696382e+00 1.5675148126886893e+00 1.0767048368738921e+00 + -1.3292601189758413e+00 1.8208211928048099e+00 1.2488725926077369e+00 + -1.6735293113988736e+00 2.0325342526570682e+00 1.4162063220390051e+00 + -2.0218700673310601e+00 2.1977848698570646e+00 1.5873201763454245e+00 + -2.3629112198842961e+00 2.3156489928973754e+00 1.7741782338877181e+00 + -2.6966578508673940e+00 2.3849697190127452e+00 1.9831025650933560e+00 + -3.0141125862457443e+00 2.3978705972200212e+00 2.2082650959874299e+00 + -3.2849520770428176e+00 2.3500520079025091e+00 2.4395566452019173e+00 + -3.4822652943279677e+00 2.2558118893351917e+00 2.6743203587909186e+00 + -3.5991588185649079e+00 2.1496882151467531e+00 2.9165355131882791e+00 + -3.6404841977163040e+00 2.0812855864816950e+00 3.1634687895418421e+00 + -3.6235641428918455e+00 2.0998057050559131e+00 3.3932261387320883e+00 + -3.5770501153438983e+00 2.2278807087712114e+00 3.5666999101640493e+00 + -3.5462790101709252e+00 2.4090531665676682e+00 3.7282342557671848e+00 + -3.6006175246152998e+00 2.5487092379586835e+00 4.1963175492979738e+00 + id 14035 + loc 6.3563430309295654e-01 5.3578972816467285e-01 401 + blend 0.0000000000000000e+00 + interp 4.8077958865370601e-01:2.4875417180981618e-01:5.5267935111258382e-04:4.8077478085781949e-01:9.3236120867404459e-01:3.8797500969720283e-01:1.2815693453075863e+00:2.7824519432207617e-01:2.0001596876063763e+00:3.7625387515576958e-01:2.8995760615106323e+00:3.8401523427423973e-01:3.4014059595461750e+00 + CVs 20 + -2.2326266181929749e-01 2.5968248496462010e-01 -1.3636060760091756e-01 + -4.1422850054636084e-01 5.2680980358865093e-01 -2.8384886947987464e-01 + -5.8342228315567868e-01 7.9889416251551237e-01 -4.5056050099314326e-01 + -7.3431606906589630e-01 1.0708820074710235e+00 -6.4557472699585428e-01 + -8.4899235690294694e-01 1.3261828758877963e+00 -8.7417397269168129e-01 + -9.1232203481413565e-01 1.5483279311333229e+00 -1.1371156342567292e+00 + -9.3495812948906099e-01 1.7408258758478319e+00 -1.4396956737742228e+00 + -9.5659003645949703e-01 1.9169582958256073e+00 -1.7989387820477973e+00 + -1.0342982951180955e+00 2.0725200026312853e+00 -2.2232709133117337e+00 + -1.2223197519368942e+00 2.1809491272263064e+00 -2.6939100856367579e+00 + -1.5480684095250949e+00 2.2152001277752791e+00 -3.1693217489789398e+00 + -2.0080992568540847e+00 2.1596060820117651e+00 -3.6057284926109228e+00 + -2.5709138354382621e+00 2.0032577171545221e+00 -3.9889710156855487e+00 + -3.1934748320506507e+00 1.7355198536590768e+00 -4.3382335337091753e+00 + -3.8395206011296046e+00 1.3594121678956601e+00 -4.6508914101191356e+00 + -4.4597370995412611e+00 9.3036232321787238e-01 -4.9257066667179084e+00 + -4.9748597015031013e+00 5.6667764109290142e-01 -5.2452696138269435e+00 + -5.3394957343236698e+00 3.4690861312505816e-01 -5.6819397004227010e+00 + -5.7895242128198161e+00 4.1439330352438963e-02 -6.1820531982819951e+00 + id 14036 + loc 9.3709267675876617e-02 2.6514989137649536e-01 412 + blend 0.0000000000000000e+00 + interp 4.5035761404481928e-01:4.5035311046867887e-01:9.6752357431569846e-03:4.1405902763785213e-01:4.4321033142838073e-01:2.6297066622445137e-01:1.0031332411433671e+00:2.8581493157779952e-01:1.9804399010049893e+00:2.9788714252061843e-01:2.9875123222870061e+00:3.3708453328917143e-01:3.6095320965435231e+00 + CVs 20 + -1.2709599331352717e-01 1.7612398834207355e-01 -5.0331123356778495e-01 + -2.5159205807636464e-01 2.5889828935503884e-01 -8.4393857238054193e-01 + -3.6540569431544617e-01 3.1135789468323072e-01 -1.1484703522418140e+00 + -4.5731340274329224e-01 3.6525668980839415e-01 -1.4690854170020984e+00 + -5.2141860836443876e-01 4.1874530920681324e-01 -1.8003589620134937e+00 + -5.5236153686691947e-01 4.7033942239562776e-01 -2.1349533168806443e+00 + -5.4483588846285080e-01 5.1993072516207794e-01 -2.4641072609653878e+00 + -4.9662624964676866e-01 5.6785639386259068e-01 -2.7789064899990139e+00 + -4.1160555145052091e-01 6.1366804246720519e-01 -3.0708965036268023e+00 + -2.9614343113585523e-01 6.5789623364221517e-01 -3.3334104830099727e+00 + -1.4193007121124135e-01 7.0752866079935273e-01 -3.5718535595227334e+00 + 8.5808735497962085e-02 7.6907603366198596e-01 -3.8181637228701018e+00 + 3.9936802631989432e-01 8.1798532672340762e-01 -4.1179112174968502e+00 + 7.3838014744923219e-01 8.0916844081413686e-01 -4.4778325713599667e+00 + 1.0451313856363404e+00 7.3222503682961593e-01 -4.8679220360364113e+00 + 1.3159906468938694e+00 5.9467762857840278e-01 -5.2770020343073618e+00 + 1.5562338840731949e+00 3.9544904249402690e-01 -5.7036965805346860e+00 + 1.7515620433255616e+00 1.4822536412976106e-01 -6.1203821072269120e+00 + 1.8306079589410054e+00 2.6226570914717140e-02 -6.2810127025613411e+00 + id 14037 + loc 7.5676894187927246e-01 8.2032161951065063e-01 400 + blend 0.0000000000000000e+00 + interp 3.7766930458157055e-01:3.7766552788852475e-01:2.5181838356682062e-01:3.5317233633040662e-01:1.0469178019656469e+00:3.7628205314182450e-01:1.7066567729691062e+00:3.3044644861523298e-01:2.0378414703619532e+00:3.3378675581116518e-01:2.6597508464346475e+00:3.3983227579903313e-01:3.0131475125233336e+00:3.3319541581929379e-01:3.8252697476414550e+00 + CVs 20 + -1.0774900427164781e-01 1.8740638393291162e-01 -2.2393364989376680e-01 + -2.1510733350027145e-01 3.6128069672049945e-01 -4.6251008027747054e-01 + -2.9570596786190501e-01 5.1407500151008900e-01 -7.1650284381458818e-01 + -3.4376175818027133e-01 6.4159561268752308e-01 -9.8128815507213674e-01 + -3.6625075650113526e-01 7.4255720786449442e-01 -1.2502193580110008e+00 + -3.6646954828691281e-01 8.1923234981173154e-01 -1.5175230090007357e+00 + -3.4223862900310331e-01 8.7763980823469490e-01 -1.7774017326683427e+00 + -2.9035606606891434e-01 9.2300740172777795e-01 -2.0242170928069618e+00 + -2.0837248072527020e-01 9.5593667231584611e-01 -2.2563415743845328e+00 + -9.4050070883447884e-02 9.7512946062787176e-01 -2.4740007900869898e+00 + 5.5861711607173709e-02 9.8234071854664329e-01 -2.6764540209182437e+00 + 2.4279807172125500e-01 9.8150651829272539e-01 -2.8623156911946355e+00 + 4.5845108071261581e-01 9.7550686033093781e-01 -3.0251592131927496e+00 + 6.8558739722326789e-01 9.6850286490905990e-01 -3.1520572614142957e+00 + 9.1051567368767239e-01 9.6939858753968733e-01 -3.2343102472666914e+00 + 1.1326148757591552e+00 9.8254928195238311e-01 -3.2786847953343199e+00 + 1.3647572864672362e+00 9.8542039597073838e-01 -3.3005476101102804e+00 + 1.6365578494071071e+00 9.0312849887831859e-01 -3.3060553632378200e+00 + 2.0148280650664252e+00 5.5549549553109423e-01 -3.3021346836333274e+00 + id 14038 + loc 8.7395584583282471e-01 1.1120109260082245e-01 393 + blend 0.0000000000000000e+00 + interp 4.3361902279490516e-01:3.9228125482411635e-01:6.4148403214847649e-01:4.3361468660467722e-01:1.0855015202138405e+00:4.1505811080230748e-01:1.7778153694995471e+00:3.2648580418372625e-01:2.2325088714031947e+00:3.6822155861885703e-01:2.9765049083924873e+00:2.9809091978580587e-01:3.3751500375449495e+00:3.7658464456996926e-01:3.9973279049696191e+00 + CVs 20 + 1.9559844106766985e-01 3.0611275830134443e-01 2.7795685248627189e-01 + 3.8185035924381522e-01 5.9084070688590007e-01 5.1454841248021999e-01 + 5.6825570333123543e-01 8.7525122549683276e-01 7.1445876930334118e-01 + 7.5963355335072569e-01 1.1685448982931816e+00 8.7698103358976121e-01 + 9.6503007962618814e-01 1.4661834424788998e+00 1.0151221397686894e+00 + 1.1982142638167435e+00 1.7634302667517670e+00 1.1662022834799546e+00 + 1.4556697941942796e+00 2.0600632484264048e+00 1.3695263705925818e+00 + 1.7148846636590227e+00 2.3557451860483449e+00 1.6488178505830304e+00 + 1.9552800708402258e+00 2.6439155583936333e+00 2.0100502467091843e+00 + 2.1764251316505381e+00 2.9125417619809468e+00 2.4681276450611245e+00 + 2.4042672116061294e+00 3.1298971541047647e+00 3.0439285844511748e+00 + 2.6908369149769955e+00 3.2390587925692298e+00 3.7333993962695873e+00 + 3.0748138317836125e+00 3.1686424495917578e+00 4.4917531176001919e+00 + 3.5578986944856039e+00 2.8650791006682974e+00 5.2230503212257915e+00 + 4.1144431014304175e+00 2.3399844340848848e+00 5.7788478597142525e+00 + 4.6989161633302761e+00 1.7235606963166612e+00 6.0081032656125144e+00 + 5.2661545744876896e+00 1.2350796061713152e+00 5.8902044483900902e+00 + 5.8052682047141966e+00 9.6364263635849934e-01 5.5433196751254732e+00 + 6.4432180950938367e+00 5.6495516032332649e-01 5.0845365734938923e+00 + id 14039 + loc 2.2100631892681122e-01 2.7010745834559202e-03 399 + blend 0.0000000000000000e+00 + interp 4.5933749120825740e-01:2.9170121535041205e-01:9.1580434546662937e-01:4.5933289783334535e-01:1.3632731990781681e+00:3.5531154795980013e-01:1.9556124409342104e+00:4.2955766635852111e-01:2.3823263008663074e+00:4.0194348824950765e-01:3.0567369543112077e+00:4.4933680613767873e-01:3.9223839568947856e+00 + CVs 20 + -1.6024410125639188e-01 4.1611506999883985e-01 1.6482873123621222e-01 + -3.3700417733636817e-01 8.3005578586533268e-01 3.3485706724354436e-01 + -5.3359991221165592e-01 1.2376300653695709e+00 4.9480454363146681e-01 + -7.4571750975637052e-01 1.6348728582116028e+00 6.6488955860073595e-01 + -9.6526141340690463e-01 2.0107598596531502e+00 8.7096738943994390e-01 + -1.1839317376956993e+00 2.3451910313866975e+00 1.1216118670244211e+00 + -1.3951559937380096e+00 2.6183663094262406e+00 1.4097586451502189e+00 + -1.5916626018115794e+00 2.8153018171928474e+00 1.7166315805805215e+00 + -1.7652489051092353e+00 2.9303506949161902e+00 2.0116036135414510e+00 + -1.9077057071408003e+00 2.9744369599910137e+00 2.2667596169705986e+00 + -2.0164649453046932e+00 2.9791748167967169e+00 2.4767257652071843e+00 + -2.1042696933718856e+00 2.9906661549842357e+00 2.6556478369609966e+00 + -2.1790995008457137e+00 3.0367434157229871e+00 2.8290474517832886e+00 + -2.2322120420607550e+00 3.0996637161187053e+00 3.0309591925227939e+00 + -2.3009228700704316e+00 3.1296158975886228e+00 3.2755995334277634e+00 + -2.4888340290192259e+00 3.0683831281810612e+00 3.5220883056302745e+00 + -2.7954583727307609e+00 2.8882782618069252e+00 3.7561659693753091e+00 + -3.0343579243293335e+00 2.6371370375121179e+00 4.0533197177801359e+00 + -2.9911157178106023e+00 2.4124560198602270e+00 4.4749787958763374e+00 + id 14040 + loc 8.3514130115509033e-01 1.5129464864730835e-01 379 + blend 0.0000000000000000e+00 + interp 4.9706363337670689e-01:3.7868406245657882e-01:4.2869533736205057e-03:4.9705866274037314e-01:1.0002719175713159e+00:4.8864149704928428e-01:1.3906908804164748e+00:2.2290623949265020e-01:2.5993828389595781e+00:3.2568612580749728e-01:3.5661988272331633e+00 + CVs 20 + 6.3804140887445093e-01 2.9984969652746379e-01 -1.6590230605552156e-01 + 1.2058392437851584e+00 4.8471045190427708e-01 -3.4889875969847028e-01 + 1.7710319363241096e+00 5.8983645062514678e-01 -5.5718458753628641e-01 + 2.3698186226775295e+00 6.6788294800395964e-01 -7.6753403708938184e-01 + 2.9802397530699380e+00 7.3420364218716871e-01 -9.3479950789278332e-01 + 3.5629004291464650e+00 7.6920445037870522e-01 -1.0244982116759387e+00 + 4.0844988030378504e+00 7.5706779915426448e-01 -1.0327792787249488e+00 + 4.5227191484603875e+00 7.0370176022538522e-01 -9.8022311148059105e-01 + 4.8600557283238874e+00 6.2646834879816682e-01 -8.9669187484552648e-01 + 5.0872431833279279e+00 5.5077319499235156e-01 -8.0678003020423839e-01 + 5.2146611244756294e+00 5.0789771306191511e-01 -7.2244617052156612e-01 + 5.2811076334034723e+00 5.2248294731340517e-01 -6.3656685800033708e-01 + 5.3570337452217291e+00 5.7002135789021180e-01 -5.2396800566837842e-01 + 5.4940741616720654e+00 5.4375933526205245e-01 -3.6804286927152263e-01 + 5.6786075075157338e+00 3.6176104666650577e-01 -1.8629202928888755e-01 + 5.8986181724072271e+00 5.4372079820768526e-02 1.1377394064557400e-02 + 6.1688033358964702e+00 -2.9642333078494687e-01 2.2368883690419972e-01 + 6.5071685973821038e+00 -6.0180416026652805e-01 4.0118648027413850e-01 + 6.9137315658539755e+00 -7.6150436875250582e-01 4.7284336742058597e-01 + id 14041 + loc 6.3872313499450684e-01 3.5986518859863281e-01 395 + blend 0.0000000000000000e+00 + interp 3.1244461110221933e-01:2.8036533902899019e-01:3.7740615451073012e-01:3.1244148665610832e-01:1.2570734855949812e+00:3.0795543296469624e-01:1.9916354558302962e+00:2.8960412871492752e-01:2.6912745320778408e+00:2.8426761631603947e-01:3.1384864344992249e+00:3.0048776061389026e-01:3.8940823440309824e+00 + CVs 20 + -2.9528137192258497e-01 2.2980411790371988e-01 4.1416895285795363e-01 + -5.6013548670368407e-01 4.1039491074343482e-01 7.5129406487666883e-01 + -8.1366252671065109e-01 5.6348713126044547e-01 1.0689409635575153e+00 + -1.0632166583586169e+00 6.9733769203394114e-01 1.3934802778585063e+00 + -1.3017336383368925e+00 8.0729519690697493e-01 1.7238553010976960e+00 + -1.5222810733390786e+00 8.9032714906788168e-01 2.0590965595241997e+00 + -1.7202790857455139e+00 9.4620805831388810e-01 2.3995210664815287e+00 + -1.8952660027102488e+00 9.7634525967930530e-01 2.7459312542387044e+00 + -2.0504335432322445e+00 9.8205352918596822e-01 3.0969706715467398e+00 + -2.1884408704697762e+00 9.6403475085962764e-01 3.4454359264935288e+00 + -2.3097606800807822e+00 9.2287775649901316e-01 3.7824462255979485e+00 + -2.4182261779300802e+00 8.5545754597097012e-01 4.1093292388865059e+00 + -2.5232708915294610e+00 7.5243909452680824e-01 4.4356015429854558e+00 + -2.6359960286865380e+00 6.0545677126828279e-01 4.7636688180665949e+00 + -2.7658432540893698e+00 4.1135131947405279e-01 5.0868219931699459e+00 + -2.9190427518876474e+00 1.6613715066729506e-01 5.4005169845161900e+00 + -3.0960957677887713e+00 -1.4089245477662304e-01 5.7017623054430153e+00 + -3.2896606221175464e+00 -5.1742092390656502e-01 5.9753037559693025e+00 + -3.4835879535432488e+00 -9.2187555743758942e-01 6.1817453305328049e+00 + id 14042 + loc 6.1842411756515503e-01 2.0393833518028259e-01 407 + blend 0.0000000000000000e+00 + interp 1.2299105619435586e+00:1.2299005619435586e+00:1.0458987679957945e+00:6.6489395967688703e-01:1.1238253865181349e+00:3.9586733536277635e-01:1.4006541582361869e+00:2.5187973744043013e-01:2.0098556053307171e+00:2.7969269514036743e-01:2.7814793323518803e+00:4.9210214322073353e-01:2.9926553440979591e+00:8.1668697064716167e-01:2.9969693357776701e+00 + CVs 20 + -4.0043419061463259e-01 4.5665334800532531e-01 2.6159791903376493e-02 + -5.6778821615042330e-01 7.3680719250698301e-01 3.0130355891094827e-02 + -6.8171162769714222e-01 9.4742397596596883e-01 1.6926053134484809e-02 + -8.0509169569073968e-01 1.1306075721393860e+00 -1.3878813459828609e-02 + -9.2863009990089185e-01 1.2777418476607103e+00 -6.6751148091540979e-02 + -1.0419694543746081e+00 1.3800077723638400e+00 -1.4365315606475648e-01 + -1.1337571110095175e+00 1.4315326872899590e+00 -2.4038167447822387e-01 + -1.1975460754862248e+00 1.4366877637006281e+00 -3.4591748692833996e-01 + -1.2397199912302652e+00 1.4095947297101761e+00 -4.5263501179737486e-01 + -1.2725238703686526e+00 1.3596129873890024e+00 -5.6301117379490129e-01 + -1.3010679954239275e+00 1.2872084176463050e+00 -6.8009978307756602e-01 + -1.3234912405584194e+00 1.1917864929017923e+00 -8.0168391879880430e-01 + -1.3378802830223486e+00 1.0742024370098175e+00 -9.2560550796129948e-01 + -1.3459189250394941e+00 9.3285708133618050e-01 -1.0554455288242020e+00 + -1.3517967800949562e+00 7.6496850540571959e-01 -1.1979500133101029e+00 + -1.3604601969112002e+00 5.7442407927599870e-01 -1.3569467126233823e+00 + -1.3755812170916100e+00 3.7140280197197928e-01 -1.5306175531467245e+00 + -1.3964461247594839e+00 1.6716693362417584e-01 -1.7079198527631856e+00 + -1.3831008632758748e+00 2.3985657057448317e-02 -1.8255473201440411e+00 + id 14043 + loc 2.5299596786499023e-01 1.3121542520821095e-02 378 + blend 0.0000000000000000e+00 + interp 5.0462952847579368e-01:5.0462448218050893e-01:1.7470597069024874e-02:2.2540892720912387e-01:9.1033873694537781e-01:3.6233017130481232e-01:1.7762102189203435e+00:2.9228561720237228e-01:2.0414044200427592e+00:3.9989027465140825e-01:2.8041220592357785e+00:4.6004767855886913e-01:3.1097883119047025e+00:4.5165011617190420e-01:3.7581658056834746e+00 + CVs 20 + 3.7774586566296664e-01 2.2627184037751644e-01 -3.9618973515001654e-01 + 7.0407823805177128e-01 4.1749283746999122e-01 -8.0698639246746295e-01 + 1.0236178412436856e+00 5.9799272116479030e-01 -1.2206609926281102e+00 + 1.3586579490758184e+00 7.8426159427839637e-01 -1.6243459008043042e+00 + 1.7119114364736658e+00 9.6105910426753660e-01 -1.9952426035888013e+00 + 2.0758173733181664e+00 1.0979050018139251e+00 -2.3206709972243695e+00 + 2.4407325054735631e+00 1.1785712931172172e+00 -2.5982534367011958e+00 + 2.7943065627232961e+00 1.2020619312626888e+00 -2.8273131936225275e+00 + 3.1160333795340991e+00 1.1721921977936702e+00 -3.0126124708830666e+00 + 3.3808140881404967e+00 1.0947591719691261e+00 -3.1638495395227313e+00 + 3.5670709094842179e+00 9.7934613850124674e-01 -3.2831917057592501e+00 + 3.6671229276539332e+00 8.4827479819648666e-01 -3.3672095277042073e+00 + 3.7124409648550172e+00 7.3388360654868556e-01 -3.4311913799968345e+00 + 3.7710256332860523e+00 6.3287128031977602e-01 -3.5089600551642812e+00 + 3.8681489693721094e+00 5.1015862346556107e-01 -3.6091351277062049e+00 + 3.9805758827425644e+00 3.6827897838521695e-01 -3.7115433361382508e+00 + 4.0922952325511455e+00 2.4132531752551545e-01 -3.7869453387697254e+00 + 4.2099361709958201e+00 1.5200596274652334e-01 -3.8277182561921723e+00 + 4.3196179569825928e+00 1.3758398505455816e-01 -3.9721210424461169e+00 + id 14044 + loc 2.4074834585189819e-01 4.5519816875457764e-01 402 + blend 0.0000000000000000e+00 + interp 4.6759989996250689e-01:3.1489582908138203e-01:3.4813021110300335e-01:3.6602171863374294e-01:1.0345225942502996e+00:3.2900034140967832e-01:2.0046050380296592e+00:3.2798838888113352e-01:3.0352199453437527e+00:4.6759522396350728e-01:3.9139621887813090e+00 + CVs 20 + -1.6721917946199760e-01 3.2382629176282768e-01 1.2906969210575497e-01 + -3.2511670372959700e-01 6.5501958711874320e-01 2.5820039267087525e-01 + -4.9782977079059376e-01 1.0023777186518739e+00 3.6333288703658095e-01 + -6.9865614167922274e-01 1.3606679746051451e+00 4.3700169314558263e-01 + -9.3322460646224248e-01 1.7179333027666086e+00 4.8911892869884671e-01 + -1.2076912695003870e+00 2.0621531604924930e+00 5.2775286511413211e-01 + -1.5262351779609817e+00 2.3797414193739019e+00 5.5484273983925236e-01 + -1.8873565346371750e+00 2.6555459503793557e+00 5.7307847262128497e-01 + -2.2864244027228926e+00 2.8764151299966882e+00 5.8865808409014841e-01 + -2.7155091021973350e+00 3.0302704869301369e+00 6.0303026762773526e-01 + -3.1593055580098657e+00 3.1057734657231504e+00 6.0793248144714462e-01 + -3.5977741936587710e+00 3.0964719091908091e+00 5.9465404990889348e-01 + -4.0132711701540620e+00 3.0021962876786681e+00 5.6336636270852891e-01 + -4.3954773325138552e+00 2.8255632422822305e+00 5.2170017700896532e-01 + -4.7389033136949354e+00 2.5613625825814146e+00 4.8230262994936324e-01 + -5.0388387048001553e+00 2.2023244604500354e+00 4.7263281029417004e-01 + -5.2972549340714128e+00 1.7472016659553427e+00 5.4845250444570703e-01 + -5.5216539198652956e+00 1.2635180214662507e+00 7.8518017539800800e-01 + -5.6077315373774770e+00 1.0317040633901664e+00 9.9907854671420360e-01 + id 14045 + loc 7.4218648672103882e-01 4.5313373208045959e-01 1079 + blend 0.0000000000000000e+00 + interp 4.6141955736552331e-01:3.7027150141647058e-01:4.1369779256164230e-01:4.6141494316994969e-01:9.7690882067474405e-01:2.7724608696407921e-01:1.9570707918108372e+00:3.1439917237239245e-01:2.4416717076285286e+00:3.5795940943348437e-01:2.9939156432174210e+00:3.4045161243407096e-01:3.5955041521080466e+00 + CVs 20 + 1.3098538750645133e-01 4.7600938328743192e-01 -5.6977843037221032e-02 + 2.0353880148807760e-01 9.2599961891311144e-01 -6.8932684011611456e-02 + 2.5042155697210333e-01 1.3484252522215456e+00 -3.4456420358815909e-02 + 2.7292610096968867e-01 1.7487325526801027e+00 5.1591069349289809e-02 + 2.6571332878358778e-01 2.1215493859380299e+00 1.9455919327534610e-01 + 2.2656874437527502e-01 2.4575134919897881e+00 4.0071254048994487e-01 + 1.6086657565855739e-01 2.7376597514409848e+00 6.6433998612120382e-01 + 8.1017661903416860e-02 2.9466208324036494e+00 9.6362699824341780e-01 + -2.0313914704896963e-03 3.0847088659323187e+00 1.2752932079727826e+00 + -8.2480987030965625e-02 3.1620342566707782e+00 1.5833148549262626e+00 + -1.5894162388511524e-01 3.1904400795462244e+00 1.8817495615495912e+00 + -2.3156484745336270e-01 3.1781781425060203e+00 2.1735460811195026e+00 + -2.9923034546410943e-01 3.1278800636943198e+00 2.4658098117671106e+00 + -3.5914508148730950e-01 3.0365629466731838e+00 2.7691571309690657e+00 + -4.1296280511025774e-01 2.8929870887153992e+00 3.1115043454887505e+00 + -4.7756031905052065e-01 2.6476806888411595e+00 3.5704161722288590e+00 + -5.6452085841400224e-01 2.1405491633564155e+00 4.1659503440434307e+00 + -6.2571550811229570e-01 1.4431885067174666e+00 4.5263000166652407e+00 + -6.5094506202820401e-01 1.2842228352191409e+00 4.4074450977519923e+00 + id 14046 + loc 3.2068479061126709e-01 1.9493657350540161e-01 412 + blend 0.0000000000000000e+00 + interp 3.5481011530075085e-01:2.6284338728494616e-01:1.0269082196479817e-02:2.9208290074926896e-01:1.0010708767020475e+00:3.5480656719959786e-01:1.9990358820606606e+00:3.0689627280882636e-01:2.5122621610988505e+00:3.2293571809909516e-01:3.0859997211062726e+00 + CVs 20 + -1.1663651130428285e-01 1.0925808804920334e-01 -5.6487368562511664e-01 + -2.3537600627676053e-01 1.2868363033079555e-01 -9.9497629170748036e-01 + -3.4115571288872071e-01 1.2031928291355942e-01 -1.3932529528463242e+00 + -4.3156123485845144e-01 1.0588591257708424e-01 -1.8082526859831907e+00 + -4.9729363671252347e-01 8.3581218925106948e-02 -2.2321531088101709e+00 + -5.2824630577460852e-01 5.3886753793635056e-02 -2.6551973619201692e+00 + -5.1767217744208494e-01 1.8509947473472677e-02 -3.0666556196392851e+00 + -4.6560154711571949e-01 -2.0985983115595408e-02 -3.4564723940510520e+00 + -3.7617480650665064e-01 -6.2289377612016583e-02 -3.8162956008749482e+00 + -2.5542207701880426e-01 -1.0245326815297218e-01 -4.1396200016797637e+00 + -1.1818776149185012e-01 -1.4573939484972631e-01 -4.4267889663301263e+00 + 5.7844699466699234e-03 -2.1315972528675409e-01 -4.6967802080413827e+00 + 8.9126454146046807e-02 -3.2710252247206584e-01 -4.9750543306625827e+00 + 1.3217828034203921e-01 -4.8122750465766284e-01 -5.2614954194486874e+00 + 1.5016188187776891e-01 -6.5605484281286452e-01 -5.5455581317082556e+00 + 1.4430315665030324e-01 -8.4669827859472635e-01 -5.8245185774862227e+00 + 1.0624867026146556e-01 -1.0567006806153136e+00 -6.0960937224005232e+00 + 3.4093231554685022e-02 -1.2816685541498165e+00 -6.3516935511383927e+00 + 6.8365911407785029e-03 -1.4276752006886122e+00 -6.5485623773266290e+00 + id 14047 + loc 9.2852121591567993e-01 5.1807433366775513e-01 396 + blend 0.0000000000000000e+00 + interp 3.6546696242940580e-01:3.0447654062778962e-01:1.4787422745475243e-01:3.3586587091268033e-01:1.0797043347147151e+00:3.5770875670550084e-01:1.9432557455322976e+00:3.6388459852248850e-01:2.2592281609221132e+00:2.8155327370318056e-01:3.2592278283703013e+00:3.6546330775978153e-01:3.6996333886395556e+00 + CVs 20 + 7.4916778239548720e-01 2.5355725582487565e-01 -3.7584741500638891e-01 + 1.2280722119507710e+00 3.6505010954912220e-01 -6.9665766827068110e-01 + 1.6162798228860666e+00 4.1328595867579287e-01 -1.0309103154338339e+00 + 1.9969540389178331e+00 4.4057680375524644e-01 -1.4068397036679783e+00 + 2.3700827332560572e+00 4.4757681180023934e-01 -1.8125964200185809e+00 + 2.7365481503416595e+00 4.3632271657756155e-01 -2.2341018421127696e+00 + 3.0980050588018062e+00 4.0946798987314248e-01 -2.6644650855437257e+00 + 3.4550889538264498e+00 3.5852773024335738e-01 -3.1057404613973327e+00 + 3.7995420233437547e+00 2.6326927970200176e-01 -3.5561997504043639e+00 + 4.1185955604541773e+00 1.1165446853118599e-01 -3.9924915511991057e+00 + 4.3961041669861372e+00 -1.0029537543657674e-01 -4.3938480773423132e+00 + 4.6233176601411810e+00 -3.7759323883267681e-01 -4.7574512470475474e+00 + 4.8006387651310058e+00 -7.2259096215491003e-01 -5.0818328649734728e+00 + 4.9336727580676731e+00 -1.1219367770012489e+00 -5.3527323856702527e+00 + 5.0318541969469734e+00 -1.5518176621117141e+00 -5.5586664222837054e+00 + 5.1052918299528276e+00 -1.9938056570456308e+00 -5.7055984988209136e+00 + 5.1593070569775294e+00 -2.4369571045318166e+00 -5.8062096246222517e+00 + 5.1934911623494227e+00 -2.8741255682447426e+00 -5.8670298971926087e+00 + 5.1814956441959010e+00 -3.3451094209005148e+00 -5.8859657977082867e+00 + id 14048 + loc 4.1136592626571655e-03 1.6151970624923706e-01 380 + blend 0.0000000000000000e+00 + interp 3.9072727964710224e-01:2.7286526221720936e-01:7.0685431561337264e-01:3.7382720047260670e-01:1.2794561977751184e+00:3.4725148539636636e-01:1.9687477176048409e+00:2.5872017084326970e-01:2.4904584154049352e+00:3.9072337237430577e-01:2.9801928852547075e+00:2.5048841073038269e-01:3.8282571992269334e+00 + CVs 20 + -3.4894769360398659e-01 1.9985931206050950e-01 5.1794306364138221e-01 + -5.8856901363232550e-01 3.2382187188764439e-01 9.3170262800838222e-01 + -7.8617499910933741e-01 4.2402469955800198e-01 1.3387048413367832e+00 + -9.7860772953470077e-01 5.3533708486280340e-01 1.7808715559514283e+00 + -1.1812300030043457e+00 6.6493334329252418e-01 2.2470572007587335e+00 + -1.4134151483596662e+00 8.0627092548148815e-01 2.7236763052329880e+00 + -1.6927582609370386e+00 9.3477892259943829e-01 3.2072193056913836e+00 + -2.0295336422397163e+00 1.0189446037227874e+00 3.6918205253521763e+00 + -2.4246367764744718e+00 1.0310945382521748e+00 4.1648832188229230e+00 + -2.8698821740973486e+00 9.4730367435579788e-01 4.6209894795798725e+00 + -3.3417063339449724e+00 7.4093273229243195e-01 5.0560116770873300e+00 + -3.7989930051997742e+00 3.8707331854635907e-01 5.4524754109579030e+00 + -4.1972647808027457e+00 -1.2387947561155288e-01 5.7813160016008034e+00 + -4.5119447738488017e+00 -7.6837439267183205e-01 6.0320327073150013e+00 + -4.7733223721242695e+00 -1.4847229489495408e+00 6.2435653683572667e+00 + -5.0233562053688088e+00 -2.2045562341505924e+00 6.4876159193481229e+00 + -5.2374780905716793e+00 -2.8683200066361154e+00 6.8403347079652956e+00 + -5.3526492186723900e+00 -3.4368590271659056e+00 7.3096151249933703e+00 + -5.4681408798935713e+00 -4.0160001894852186e+00 7.5933540475056942e+00 + id 14049 + loc 4.8788875341415405e-01 3.3588162064552307e-01 373 + blend 0.0000000000000000e+00 + interp 3.8499686065781324e-01:2.4151474044687099e-01:4.6639152681211060e-01:3.7620170381226253e-01:1.0020036612418186e+00:2.6801640377623875e-01:1.7132017486245974e+00:2.5672526226211390e-01:2.5769572408100401e+00:3.8499301068920666e-01:3.0665276913417192e+00:2.5833066164336826e-01:3.7368498784136994e+00 + CVs 20 + -9.3870543689504954e-02 7.5653875452484243e-01 2.5664620620610173e-01 + -1.9659241142397477e-01 1.5382382979280591e+00 4.8063108380524677e-01 + -3.6048076142623797e-01 2.2970063616511482e+00 6.0573626135731884e-01 + -6.0607953869713549e-01 2.9483252521743042e+00 5.5819655739436280e-01 + -9.1561219153123496e-01 3.4190778070735450e+00 3.2962617108118697e-01 + -1.2483589366722758e+00 3.6625868895363887e+00 -2.0069344129335365e-02 + -1.5808381848599811e+00 3.6714981378392384e+00 -4.2905265947966309e-01 + -1.9191560785355262e+00 3.4657496789730509e+00 -8.4895744010082730e-01 + -2.2706607181042640e+00 3.0726229098649180e+00 -1.2332605237979941e+00 + -2.6310945866597097e+00 2.5003732449650280e+00 -1.5309363171601043e+00 + -2.9532387277381056e+00 1.7881201910089466e+00 -1.7198035682815478e+00 + -3.1455039420163091e+00 9.6805864504414951e-01 -1.8135875931924261e+00 + -3.0950649896669304e+00 1.0555423996331637e-02 -1.8908108193844615e+00 + -2.6992111581876803e+00 -1.0507793310036981e+00 -2.0888537515212899e+00 + -1.9330976378114872e+00 -2.1006476032030283e+00 -2.5777298831129363e+00 + -1.1707366172204015e+00 -2.7896714452232541e+00 -3.6062590937029610e+00 + -8.7724132926920462e-01 -2.8315468767718972e+00 -4.9893213521140716e+00 + -1.2838170446236497e+00 -2.4898535976400229e+00 -6.3570701615528948e+00 + -2.1030191517378403e+00 -2.0929516852166303e+00 -7.3684157230959748e+00 + id 14050 + loc 4.5413380861282349e-01 9.7835922241210938e-01 1069 + blend 0.0000000000000000e+00 + interp 3.5921827682044666e-01:3.5811402616823368e-01:3.3673184553316049e-01:3.5921468463767847e-01:9.4215311088941578e-01:2.5649353401462899e-01:1.1802272970126788e+00:3.5864605184273241e-01:1.9959084922714188e+00:2.6872372285747415e-01:2.3910094626176401e+00:3.1735866395468371e-01:3.5738575519475528e+00 + CVs 20 + 3.0970512398443234e-01 2.3706070844280783e-01 -2.9348557848208223e-01 + 6.0558102822672599e-01 4.8539240296881420e-01 -5.8532046554872397e-01 + 8.9934316174461748e-01 7.3748501837996305e-01 -8.9153940071797222e-01 + 1.1754090792763177e+00 9.9488028934193484e-01 -1.2258341656164367e+00 + 1.3985899175963286e+00 1.2483966308036896e+00 -1.5951875484999676e+00 + 1.5328554347572676e+00 1.4706182257499956e+00 -1.9968202115671358e+00 + 1.5649022703481545e+00 1.6227367997325965e+00 -2.4126534822089489e+00 + 1.5135156411086454e+00 1.6696892915749639e+00 -2.8156140016245446e+00 + 1.4096661198673104e+00 1.5957137454106745e+00 -3.1788237907941941e+00 + 1.2802830616055891e+00 1.4191127364824909e+00 -3.4900583429688417e+00 + 1.1484319662263114e+00 1.1782491107929716e+00 -3.7691684633286773e+00 + 1.0350930226002557e+00 8.9824869346834979e-01 -4.0548851712963225e+00 + 9.6428137451416074e-01 5.9000318881672897e-01 -4.3700143631206476e+00 + 9.6660529976103993e-01 2.7095317357278104e-01 -4.7219228323704305e+00 + 1.0888273575761449e+00 -3.8884595952785483e-02 -5.1053296302891376e+00 + 1.4170566281137675e+00 -3.0908843509532646e-01 -5.4816990585058862e+00 + 1.9955928415733211e+00 -4.4891001814416032e-01 -5.7444555261022519e+00 + 2.5892871023521784e+00 -4.1488370907978167e-01 -5.8503545683302596e+00 + 2.8716876332302754e+00 -4.3473689042944552e-01 -6.0405099756033076e+00 + id 14051 + loc 2.7364995330572128e-02 2.4660063907504082e-02 382 + blend 0.0000000000000000e+00 + interp 5.0798484610636130e-01:4.7498553074632832e-01:2.1339623652288364e-02:2.8367900129052592e-01:9.8005343392813249e-01:5.0797976625790031e-01:1.7766427300223246e+00:2.9945963787937641e-01:2.1198970753626227e+00:2.6765077004736060e-01:2.9835975980677398e+00:3.0400406484800857e-01:3.7692618070901491e+00 + CVs 20 + -4.8839475651737119e-01 1.9312640430916378e-01 -6.5505365478805389e-01 + -8.7833839773450917e-01 2.9422484982164493e-01 -1.1450810930745727e+00 + -1.2506133556087065e+00 3.6473331089496458e-01 -1.5895322076096237e+00 + -1.6406323249630392e+00 4.2314724904295220e-01 -2.0372353605385771e+00 + -2.0435871003116084e+00 4.5743635950798378e-01 -2.4820717187723700e+00 + -2.4562985567621700e+00 4.5581964059539937e-01 -2.9167123885748762e+00 + -2.8761698849308730e+00 4.0765013452268151e-01 -3.3338156932926166e+00 + -3.2980411336415472e+00 3.0191379144510910e-01 -3.7269784223964977e+00 + -3.7148446296025446e+00 1.2841057688407465e-01 -4.0886966347412752e+00 + -4.1208624762196973e+00 -1.1691647545116535e-01 -4.4052637170396949e+00 + -4.5068961777624219e+00 -4.3010353882147578e-01 -4.6600122613880979e+00 + -4.8514155654192699e+00 -8.0585258499613177e-01 -4.8477145399565398e+00 + -5.1353700071048536e+00 -1.2339748702356834e+00 -4.9760071455033081e+00 + -5.3470106325561293e+00 -1.7019169788977200e+00 -5.0564923473158423e+00 + -5.4818511278602617e+00 -2.1951423127487302e+00 -5.0985856872534825e+00 + -5.5384893181005417e+00 -2.6969996448570197e+00 -5.1092449117832235e+00 + -5.5165147745593073e+00 -3.1870680115191132e+00 -5.0953104147032624e+00 + -5.4269654232906896e+00 -3.6497234869875115e+00 -5.0679398159057882e+00 + -5.3682693349088559e+00 -4.1591799095465261e+00 -5.0650054590731957e+00 + id 14052 + loc 9.2412811517715454e-01 3.5876360535621643e-01 403 + blend 0.0000000000000000e+00 + interp 3.7302365577934266e-01:2.6893856026506124e-01:7.2688063136288494e-01:3.2457864264112840e-01:1.9161046619488262e+00:2.7753079753910531e-01:2.3668566851864581e+00:2.5246853846904860e-01:3.0964677202472366e+00:3.7301992554278490e-01:3.9999901276125169e+00 + CVs 20 + 1.0848631454264165e-02 8.7597480654105386e-02 6.1260890466043973e-02 + 2.6868464339727199e-02 1.8388223113177796e-01 1.3409047030243657e-01 + 4.9678963658127295e-02 2.8789179070759507e-01 2.1399430092340102e-01 + 8.2064155466038430e-02 3.9710619901799676e-01 2.9664832967399296e-01 + 1.2899947657609379e-01 5.0812385258070858e-01 3.7895614141862383e-01 + 1.9674603871724294e-01 6.1568521247327013e-01 4.5654778633305165e-01 + 2.9024728522670101e-01 7.1302918092541046e-01 5.2340450269918182e-01 + 4.1167191970860567e-01 7.9132216442071657e-01 5.7172778355360221e-01 + 5.5833616548411191e-01 8.4033892957789280e-01 5.9252361368557582e-01 + 7.2059436962529033e-01 8.5237494679991577e-01 5.7767524908904433e-01 + 8.8334961406738111e-01 8.2648611190391486e-01 5.2337943810647181e-01 + 1.0311293762170504e+00 7.6710681128334179e-01 4.3158026817717943e-01 + 1.1508873787044467e+00 6.7886194831805147e-01 3.0826291773577402e-01 + 1.2310255011688997e+00 5.6536705019100852e-01 1.6119088246321589e-01 + 1.2606571754968803e+00 4.3106237034446954e-01 -2.5426538004248711e-04 + 1.2308288799606444e+00 2.8163148433483842e-01 -1.6374919736816690e-01 + 1.1349989200127726e+00 1.2201230759885412e-01 -3.1326528683362354e-01 + 9.6603785488728255e-01 -4.4549430945012958e-02 -4.2868728553770097e-01 + 9.8709637305649700e-01 -1.8772294285693980e-01 -4.7625731846058578e-01 + id 14053 + loc 6.1417943239212036e-01 3.3882808685302734e-01 401 + blend 0.0000000000000000e+00 + interp 4.5666428261309888e-01:3.0555258121592627e-01:3.2702853962619483e-01:3.7742708515482326e-01:1.1548408643453292e+00:4.5665971597027277e-01:1.8976296224401223e+00:3.0219345310392226e-01:2.1407003411584484e+00:3.9663078644906663e-01:2.9577134682913409e+00:3.8094809399702190e-01:3.8402976069616215e+00 + CVs 20 + -2.9712519879171388e-02 2.7384338490060767e-01 2.2643785474446770e-01 + -3.7155643676477765e-02 5.1514766311247173e-01 4.6616681446364372e-01 + -4.7678735791064977e-02 7.1996884515572646e-01 7.0809666013160733e-01 + -7.6026027441484095e-02 8.8886323912607090e-01 9.4127650290930232e-01 + -1.2306111477475475e-01 1.0270426517166531e+00 1.1619838929559887e+00 + -1.8711280082139373e-01 1.1465213775916026e+00 1.3782842992336810e+00 + -2.5499229661980521e-01 1.2518679058751365e+00 1.6117997516318243e+00 + -3.0233509666580549e-01 1.3286699406168996e+00 1.8829506734086403e+00 + -3.1495534290062649e-01 1.3736557783639978e+00 2.1767580486030806e+00 + -2.9973158700369956e-01 1.4177558600497910e+00 2.4554233676184829e+00 + -2.6331008025729247e-01 1.4609641449640225e+00 2.7195628350641701e+00 + -2.0571871908704020e-01 1.4108472749178871e+00 3.0110245570157068e+00 + -1.2912970376771465e-01 1.1904911914084126e+00 3.3493907226114712e+00 + -1.1443287810755487e-02 8.5678511846382710e-01 3.7230489687981709e+00 + 1.6778600873483721e-01 5.0763910375174892e-01 4.1005625668077057e+00 + 4.2156684880731304e-01 1.0528716780494218e-01 4.4578495511448546e+00 + 8.4135476869930292e-01 -4.9540438208693371e-01 4.8047300479181381e+00 + 1.6172163695202488e+00 -1.1215605509174733e+00 5.1816952401548750e+00 + 1.9340902860894726e+00 -1.1022714585245859e+00 5.4014985476021113e+00 + id 14054 + loc 1.1459147185087204e-01 9.7536170482635498e-01 399 + blend 0.0000000000000000e+00 + interp 4.7299838941010508e-01:4.0050677662739348e-01:2.4506751697062101e-01:4.7299365942621102e-01:7.5612533354702094e-01:3.2430317355748278e-01:1.1106151123663746e+00:2.3879901266291639e-01:2.0842026930812043e+00:3.2201447154949220e-01:3.1314252354684360e+00:4.0258494715299420e-01:3.9519141949646110e+00 + CVs 20 + -1.0569838915885982e-01 3.4242646280241851e-01 -2.6630942448381983e-01 + -2.5118846497214092e-01 6.8990433319799449e-01 -5.3850627861582001e-01 + -4.2089075902113005e-01 1.0360286603865307e+00 -8.3847531560218291e-01 + -6.1375011418824155e-01 1.3712097303591375e+00 -1.1734874313995922e+00 + -8.4278622649421842e-01 1.6845093152640809e+00 -1.5343368979539207e+00 + -1.1293042986379871e+00 1.9562352024670593e+00 -1.8908814867238473e+00 + -1.4881387929252963e+00 2.1443508668723892e+00 -2.1942627325120889e+00 + -1.8860093535917530e+00 2.1753164882735563e+00 -2.3817577177447453e+00 + -2.2235555325567899e+00 2.0160412569878643e+00 -2.4099811858615006e+00 + -2.4511295940952968e+00 1.7303213028744266e+00 -2.3177009979330334e+00 + -2.6150663775628873e+00 1.3558419129846095e+00 -2.1689042827574090e+00 + -2.7892132891846102e+00 8.6754867339617003e-01 -2.0185578941028033e+00 + -3.0555959493438389e+00 2.4905559583872008e-01 -1.9311982061743045e+00 + -3.5263467760269109e+00 -4.2189934200886892e-01 -1.9747101607107502e+00 + -4.3199483080094989e+00 -9.3087190540367482e-01 -2.1969225427667003e+00 + -5.4276350254378922e+00 -9.0266103958000754e-01 -2.5865390019996530e+00 + -6.4352779615984499e+00 -9.8663501344323223e-03 -2.9493639984899631e+00 + -6.8960526198598808e+00 1.0526049119676515e+00 -3.0642538177818337e+00 + -7.2724984178804961e+00 1.4803033321278787e+00 -3.1270758324087700e+00 + id 14055 + loc 5.9206372499465942e-01 5.9494543075561523e-01 379 + blend 0.0000000000000000e+00 + interp 4.0223279436836323e-01:3.0582920108817463e-01:3.1416370653197712e-01:3.2038074337238082e-01:1.0159237004568118e+00:2.9543183662298639e-01:1.9971868800942678e+00:3.7246125547374898e-01:2.9591836245802128e+00:4.0222877204041957e-01:3.6152039105057518e+00 + CVs 20 + -3.7355665057890963e-01 2.5607199541123088e-01 2.1415648809098520e-01 + -6.9708317947598886e-01 4.6825839569987238e-01 3.8938766125143570e-01 + -1.0183317551509590e+00 6.5835293104963966e-01 5.5732579353270517e-01 + -1.3496787064688873e+00 8.4829282147190443e-01 7.2306225905211097e-01 + -1.6606736836376832e+00 1.0509090233703666e+00 8.6219473280637948e-01 + -1.9285522112387365e+00 1.2697566052397935e+00 9.5396390913484097e-01 + -2.1681731479326265e+00 1.4981908837218683e+00 9.9466520614957254e-01 + -2.4108550948672374e+00 1.7219554325763284e+00 9.8191701198557557e-01 + -2.6719476491554577e+00 1.9240866355791006e+00 9.1157899505732720e-01 + -2.9515894865523111e+00 2.0902614396323278e+00 7.8433864031697409e-01 + -3.2445493487463546e+00 2.2205967551130428e+00 6.0593375935665172e-01 + -3.5514743193721765e+00 2.3226930548220692e+00 3.7143737015615319e-01 + -3.8692863552687582e+00 2.3523552350368258e+00 5.3243708828854763e-02 + -4.1654110178579344e+00 2.2005353019536273e+00 -3.6268907865838018e-01 + -4.4302100014346282e+00 1.7957053241988503e+00 -8.2559131291195065e-01 + -4.7345304534811348e+00 1.1593127625938719e+00 -1.2259098705038589e+00 + -5.1733837673593133e+00 3.8489789163638921e-01 -1.4378132348358745e+00 + -5.7340705058783801e+00 -2.9661984919858320e-01 -1.3569993237505678e+00 + -5.9827947849714755e+00 -4.3667414281773409e-01 -1.0713400672135596e+00 + id 14056 + loc 8.8634157180786133e-01 5.4762828350067139e-01 395 + blend 0.0000000000000000e+00 + interp 4.6424514027429653e-01:2.7829081057549776e-01:7.2867770580407609e-02:4.6424049782289378e-01:9.9993155674545264e-01:3.4071669032278795e-01:1.3988238835968201e+00:2.8199225217242019e-01:2.0078334407359262e+00:3.0160805049341383e-01:3.1110149097644375e+00 + CVs 20 + 4.0121637302360169e-01 1.3965997536800978e-01 -5.2215835420559897e-01 + 7.2865013620519026e-01 2.1198910984660468e-01 -9.4494149404250294e-01 + 1.0407908722236183e+00 2.6601272118439334e-01 -1.3454734532267327e+00 + 1.3673680072308465e+00 3.2574877044007500e-01 -1.7548226271754643e+00 + 1.7130825807381638e+00 3.9283710375002734e-01 -2.1670040242173112e+00 + 2.0810976548351139e+00 4.6534827891981401e-01 -2.5781374553171439e+00 + 2.4730311953910205e+00 5.3762147151133921e-01 -2.9875617682704334e+00 + 2.8906238235075330e+00 5.9720330132201749e-01 -3.3961437749397785e+00 + 3.3352054881983006e+00 6.2272988970435339e-01 -3.8093756094707878e+00 + 3.7988364746546663e+00 5.8594901636037333e-01 -4.2403632049595563e+00 + 4.2619290629835502e+00 4.5941656542612463e-01 -4.7033314701034223e+00 + 4.7016041932024688e+00 2.3072615769366234e-01 -5.1964191802744093e+00 + 5.1013993849501436e+00 -9.3518288064423416e-02 -5.7007771252817712e+00 + 5.4485153281973968e+00 -5.0002599903930278e-01 -6.1951407111164256e+00 + 5.7281488814790800e+00 -9.7608083432310222e-01 -6.6610933743937313e+00 + 5.9280542884843408e+00 -1.5128249542666703e+00 -7.0758856523701219e+00 + 6.0462811796521310e+00 -2.0996346497884883e+00 -7.4094456027289972e+00 + 6.0968350298079912e+00 -2.6984324512228759e+00 -7.6422870630545017e+00 + 6.1855888315229492e+00 -3.0407228423318582e+00 -7.8584055058644280e+00 + id 14057 + loc 1.0603331774473190e-01 6.1171239614486694e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5005047102987972e-01:4.5004597052516943e-01:5.9656844567374523e-02:3.6119219259569041e-01:7.7524232927053693e-01:3.4704330732089339e-01:1.2346919092544675e+00:3.5802929980276971e-01:2.0035991385708076e+00:3.7790067910060898e-01:2.5980340851002071e+00:3.8049296748354478e-01:3.4901620557360276e+00 + CVs 20 + 1.3116343672676678e-01 5.3066078436263930e-01 1.9824751840016447e-01 + 3.0723339179325648e-01 9.4363037869427302e-01 2.7730419932457034e-01 + 4.9879640793087676e-01 1.3013019235005086e+00 3.1326598111773829e-01 + 6.9441700629478986e-01 1.6100322796089246e+00 3.2415779449769433e-01 + 8.8810626557259420e-01 1.8557232886208506e+00 3.0301713255885399e-01 + 1.0663293631058195e+00 2.0140089643963037e+00 2.4275499127171529e-01 + 1.2079725881307377e+00 2.0596166509552818e+00 1.5175059073091135e-01 + 1.2924349132394912e+00 1.9901367281518336e+00 6.7059750322667644e-02 + 1.3140408803570751e+00 1.8406688605209203e+00 3.8486162204578012e-02 + 1.2949459831516554e+00 1.6763927988707783e+00 8.5624729405609612e-02 + 1.2716210675941095e+00 1.5462113644172526e+00 1.7221259885782286e-01 + 1.2632814980780145e+00 1.4507443648425111e+00 2.4775362599547340e-01 + 1.2695696895061439e+00 1.3679424705257897e+00 2.8652356616999902e-01 + 1.2839513272105718e+00 1.2805881361576681e+00 2.8702749139077471e-01 + 1.3002813705821161e+00 1.1887903070914410e+00 2.6704301911500250e-01 + 1.3102510823441349e+00 1.1315756377258912e+00 2.7277402864669631e-01 + 1.3076135343536970e+00 1.1862380958672110e+00 3.3496967470436090e-01 + 1.2936313519923472e+00 1.2709055712415191e+00 3.8133270831613209e-01 + 1.2512272040342780e+00 8.7828314148582376e-01 4.1757178068918266e-01 + id 14058 + loc 7.6964092254638672e-01 4.2721423506736755e-01 396 + blend 0.0000000000000000e+00 + interp 4.6562091603232136e-01:3.3090424832939219e-01:1.0787550217584285e-01:3.2617354263255094e-01:1.0332638766590312e+00:2.9411516622520656e-01:2.0219039850883949e+00:4.2226161742536955e-01:2.7142251918447853e+00:3.2456579687176046e-01:3.0650977897298333e+00:4.6561625982316107e-01:3.6816569758616504e+00 + CVs 20 + -6.7012447932051811e-01 9.8749153961599084e-02 3.5237951567164327e-01 + -1.0992818006225371e+00 9.9246641877446085e-02 6.0613906730239675e-01 + -1.4674605923098134e+00 7.0728162987421017e-02 8.4222875524855279e-01 + -1.8469990836554921e+00 5.7731135879438900e-02 1.0864026740527035e+00 + -2.2381903838363861e+00 5.2841411783148606e-02 1.3448458917810699e+00 + -2.6399092822483805e+00 4.4779294709672790e-02 1.6229755503877619e+00 + -3.0456351757869085e+00 2.3818377250345746e-02 1.9256782780872483e+00 + -3.4450831160474147e+00 -1.8430064672878110e-02 2.2543499415482318e+00 + -3.8284532034109122e+00 -9.2678178558587954e-02 2.6002206900344609e+00 + -4.1842322312380196e+00 -2.0867447931894145e-01 2.9439572833927539e+00 + -4.4974457487571682e+00 -3.6962131342262450e-01 3.2683869885728409e+00 + -4.7579775053568119e+00 -5.7492943044480649e-01 3.5690738959442760e+00 + -4.9681712821709789e+00 -8.2302257823013636e-01 3.8466739840360527e+00 + -5.1416118628639715e+00 -1.1100139787787482e+00 4.0976866500243707e+00 + -5.2948618507098386e+00 -1.4293173402368395e+00 4.3213630655094768e+00 + -5.4415216289054307e+00 -1.7703391315449875e+00 4.5323153285145521e+00 + -5.5873322032068735e+00 -2.1295309670084048e+00 4.7499755948680100e+00 + -5.7269248186501285e+00 -2.5136922583757260e+00 4.9784849915823042e+00 + -5.8158128700067948e+00 -2.9547769029067235e+00 5.1868921940126427e+00 + id 14059 + loc 8.7637549638748169e-01 2.4834712967276573e-02 400 + blend 0.0000000000000000e+00 + interp 4.1804423475253499e-01:3.6095374884941694e-01:1.2300737406468598e-01:2.6304655957733780e-01:8.0219876559773939e-01:3.2700048363266582e-01:1.7685608074684809e+00:2.9990314291168441e-01:2.1171115377932237e+00:4.1804005431018748e-01:2.8822760516114796e+00:3.3599671084120791e-01:3.1710096989350340e+00 + CVs 20 + 2.9305858514494221e-01 1.2599086631345269e-01 1.4098646953696134e-01 + 5.8169655440339596e-01 2.8733469930837879e-01 3.2227631301420684e-01 + 8.6164332886809381e-01 4.6364861867222901e-01 5.2309326425060465e-01 + 1.1302370587806632e+00 6.4486775745962388e-01 7.3859495826551647e-01 + 1.3865932721787244e+00 8.2556797161826978e-01 9.6855498280111552e-01 + 1.6312830881213378e+00 1.0013490193029191e+00 1.2132013969315056e+00 + 1.8656763795782221e+00 1.1645126492598048e+00 1.4796937671651791e+00 + 2.0899083029043437e+00 1.2978016909196457e+00 1.7801404283681626e+00 + 2.3053666401452939e+00 1.3743348243338287e+00 2.1134423633731996e+00 + 2.5199366342961427e+00 1.3649146175122113e+00 2.4570216420254520e+00 + 2.7387097668976184e+00 1.2524973723678006e+00 2.7821937737935682e+00 + 2.9546531365819373e+00 1.0468223915600958e+00 3.0732267374301063e+00 + 3.1615330639710342e+00 7.7248953902431028e-01 3.3288826040189869e+00 + 3.3622545970089823e+00 4.4705997522891794e-01 3.5484102570157097e+00 + 3.5560222936388213e+00 7.4679234016339358e-02 3.7318097181675509e+00 + 3.7246413428800769e+00 -3.5161074021745975e-01 3.8861546678793015e+00 + 3.8453533631223453e+00 -8.2883971783161869e-01 4.0225849217927259e+00 + 3.9265217311724361e+00 -1.3196411528401637e+00 4.1663955772514836e+00 + 4.0734070670095743e+00 -1.7121765689389745e+00 4.4019713803218607e+00 + id 14060 + loc 4.7023442387580872e-01 2.1222957968711853e-01 402 + blend 0.0000000000000000e+00 + interp 4.5145114117464730e-01:3.4124455248432883e-01:2.7427085001569440e-01:3.6136446734184791e-01:1.0400537309312903e+00:3.3249861191286550e-01:1.7455791473076436e+00:4.5114478918868395e-01:2.2169248983887004e+00:4.5144662666323560e-01:2.8117699387101807e+00:3.3152004809457553e-01:3.0229658775949440e+00:4.4429580121885126e-01:3.8402805419590540e+00 + CVs 20 + -6.5432546327886032e-02 3.7769787573135705e-01 2.4345150193446147e-01 + -1.7748860421305679e-01 7.7919012669394927e-01 4.8411743139151009e-01 + -3.2780220556440692e-01 1.1790990706286035e+00 7.2460599423194871e-01 + -4.9935254515179606e-01 1.5411373553866852e+00 9.8937089643284881e-01 + -6.7059139665560141e-01 1.8269502426220599e+00 1.3036353183724283e+00 + -8.3116937028914839e-01 2.0130352854592721e+00 1.6712512960801431e+00 + -9.9089133628474457e-01 2.0922436724982547e+00 2.0829407238954527e+00 + -1.1764575906984573e+00 2.0612638334283342e+00 2.5262052348699067e+00 + -1.4158393649912142e+00 1.9073276482509962e+00 2.9723436967654049e+00 + -1.7149335402988952e+00 1.6137282897169571e+00 3.3612261901526264e+00 + -2.0391710071926767e+00 1.2106194877656653e+00 3.6344676960001987e+00 + -2.3534718560722871e+00 7.8433394844365090e-01 3.8295693515692344e+00 + -2.6600373455800215e+00 3.9740134141837496e-01 4.0491484254004035e+00 + -2.9693812072582131e+00 8.9420449557164550e-02 4.3636293888542603e+00 + -3.3026354981132933e+00 -1.2436771829064752e-01 4.7793429773010576e+00 + -3.7105973306872659e+00 -2.8129634434919015e-01 5.2541235186171118e+00 + -4.2291849854992023e+00 -4.2523826957219302e-01 5.7252591213112876e+00 + -4.8216948687395895e+00 -5.8754032708328707e-01 6.1581988009701316e+00 + -5.3463522104155690e+00 -8.2975059766977843e-01 6.6668732356250171e+00 + id 14061 + loc 9.1515249013900757e-01 7.0485606789588928e-02 412 + blend 0.0000000000000000e+00 + interp 4.3814770578333556e-01:3.8552467288489123e-01:6.4353638000412383e-02:4.3814332430627773e-01:6.4490605457299643e-01:3.2312940914095500e-01:1.2352643211157865e+00:2.7063424963508498e-01:1.9880551352065325e+00:3.5414879427270901e-01:3.0078096769172173e+00:3.7513571202535878e-01:3.7543095523892687e+00 + CVs 20 + -7.2364452505012267e-01 4.0160996037119229e-01 1.1929649612094594e-01 + -1.2839996489502636e+00 6.9832200829649138e-01 2.0530328115851257e-01 + -1.8110822979540770e+00 9.4692255467794939e-01 2.6889398074327120e-01 + -2.3613660193213946e+00 1.1490150059001538e+00 3.3827868003332995e-01 + -2.9243506879098358e+00 1.2798332970888806e+00 4.3755366413260377e-01 + -3.4815261650476836e+00 1.3258600279872095e+00 5.7960283275232283e-01 + -4.0083620822425621e+00 1.2873667449418744e+00 7.6059761690385896e-01 + -4.4671453795498035e+00 1.1750631553518163e+00 9.7427409824297739e-01 + -4.8232087666047301e+00 1.0096269305634775e+00 1.2168899098844406e+00 + -5.0656952998351628e+00 8.1925607446885751e-01 1.4941824358754743e+00 + -5.1979726511517308e+00 6.0107335340166634e-01 1.8026937319365173e+00 + -5.2111246251285790e+00 2.9307234587354491e-01 2.0852946629298383e+00 + -5.0963469067689067e+00 -1.4181992134655186e-01 2.2941191861861432e+00 + -4.8756991704589261e+00 -6.7794817849862921e-01 2.4644761310417191e+00 + -4.5924829471979161e+00 -1.2529444906617404e+00 2.6724822140651581e+00 + -4.3040554401131068e+00 -1.8168148953084451e+00 3.0309140006792807e+00 + -4.0847100951272619e+00 -2.3519575532816885e+00 3.6046911880452877e+00 + -4.0219118715453837e+00 -2.8910022915853206e+00 4.3101505576958514e+00 + -4.1741949213123100e+00 -3.4243132746975413e+00 4.9579571992846532e+00 + id 14062 + loc 6.9149816036224365e-01 9.6463251113891602e-01 378 + blend 0.0000000000000000e+00 + interp 3.9820620422573161e-01:2.7843967319585861e-01:1.3835439684539386e-01:3.2889437745723504e-01:8.7818681944053645e-01:3.2149562531204756e-01:1.2652749978998095e+00:3.5768187411814062e-01:1.9620095425496602e+00:3.9820222216368939e-01:2.7859917442687863e+00:2.2694148157961569e-01:3.0604538785819555e+00:3.3411935884390809e-01:3.8460442210476882e+00 + CVs 20 + 6.9520494514928033e-01 3.1685153829865387e-01 2.2441727545998352e-02 + 1.2657936264117731e+00 5.0555507502711439e-01 -3.4338105665355390e-02 + 1.8055578729730237e+00 6.2876118485036303e-01 -1.3737294862045379e-01 + 2.3650938770972498e+00 7.3848532120287380e-01 -2.5266819791624939e-01 + 2.9444400333404870e+00 8.5428905414610101e-01 -3.4257473306437869e-01 + 3.5350962414831191e+00 9.7036854185315824e-01 -3.7037467521507317e-01 + 4.1302063895220513e+00 1.0658384590855245e+00 -3.0642212166868554e-01 + 4.7131556121014411e+00 1.1167549692553858e+00 -1.3337969488668344e-01 + 5.2496207346328996e+00 1.1030566745574542e+00 1.4351921022064107e-01 + 5.7061404358267787e+00 1.0138242664908423e+00 4.9337511003229251e-01 + 6.0720310048650576e+00 8.4520383411417255e-01 8.7509651113622977e-01 + 6.3533826424476914e+00 5.9702190584628534e-01 1.2550406521272464e+00 + 6.5693692531711738e+00 2.7576393976610136e-01 1.6212574343700896e+00 + 6.7572477597706495e+00 -1.1002219355399845e-01 1.9865402522697688e+00 + 6.9558527454800831e+00 -5.2442594951000965e-01 2.3687035247213042e+00 + 7.1884587972663265e+00 -9.0910776579939645e-01 2.7640035269545704e+00 + 7.4607621761362326e+00 -1.2392966885436443e+00 3.1481660999956835e+00 + 7.7480091979550494e+00 -1.5245634824336998e+00 3.5119679236974655e+00 + 7.9563579969854237e+00 -1.7638708286542535e+00 3.8824397735376701e+00 + id 14063 + loc 8.5345111787319183e-02 9.6509444713592529e-01 382 + blend 0.0000000000000000e+00 + interp 3.5605319475880770e-01:2.8202653868120203e-01:8.9743045303715019e-01:2.6122907130157852e-01:1.3404114046535600e+00:2.2687257443926886e-01:2.2941103038370971e+00:3.5604963422686015e-01:3.1544916091010231e+00:2.8078068236369907e-01:3.8851280096271306e+00 + CVs 20 + 1.0001188237547891e+00 2.3015234161881393e-01 -4.1220311325205544e-01 + 1.6269372067437895e+00 3.0120672360177786e-01 -7.5141225713579185e-01 + 2.1593869758601016e+00 3.1040510977254887e-01 -1.0936151533459646e+00 + 2.7217627970249465e+00 2.9776854506170863e-01 -1.4664071665582292e+00 + 3.3093905949023008e+00 2.4652364585987308e-01 -1.8563054812235609e+00 + 3.9116156105523965e+00 1.3882837305406359e-01 -2.2544095494998881e+00 + 4.5216656023612378e+00 -4.1004806507059732e-02 -2.6592834378803745e+00 + 5.1302437063242818e+00 -3.0508702360072293e-01 -3.0604423415893756e+00 + 5.7160682853077800e+00 -6.6465272761999405e-01 -3.4397007800516399e+00 + 6.2448776645802697e+00 -1.1199581737940556e+00 -3.7786489778759127e+00 + 6.6820712600227194e+00 -1.6521747922179817e+00 -4.0692477930113204e+00 + 7.0120967914183847e+00 -2.2276375703015958e+00 -4.3109878374212443e+00 + 7.2421415982605399e+00 -2.8087264546214690e+00 -4.5056241008968474e+00 + 7.3897821715162468e+00 -3.3626090406947062e+00 -4.6612352409462918e+00 + 7.4729226713818537e+00 -3.8666963338279832e+00 -4.7921460916732990e+00 + 7.5066395466500948e+00 -4.3091610369862261e+00 -4.9092057729574794e+00 + 7.5039839207742167e+00 -4.6864261485858636e+00 -5.0171113223782866e+00 + 7.4760135471099094e+00 -5.0036662634688920e+00 -5.1199953842953949e+00 + 7.4321407289369334e+00 -5.2732599561664513e+00 -5.2233069863029797e+00 + id 14064 + loc 6.0182881355285645e-01 9.9525588750839233e-01 403 + blend 0.0000000000000000e+00 + interp 4.3968759568021282e-01:2.9064195787541619e-01:8.7020413795531992e-01:2.9130696340886142e-01:1.3535651523146051e+00:4.2893240832600682e-01:1.9977197530876780e+00:3.9002650597058602e-01:2.8117882160919874e+00:4.3968319880425605e-01:3.0541748731846727e+00:2.6027924596401475e-01:3.8737040031173260e+00 + CVs 20 + -1.1789956885315502e-01 2.9963578073984816e-02 9.7013753274777029e-03 + -2.2283468708261700e-01 7.3691430376094436e-02 2.0469957630622371e-02 + -3.1982178497497815e-01 1.2554240237213676e-01 3.6194969752979714e-02 + -4.1407732826155408e-01 1.8158770471375640e-01 5.9574888418101671e-02 + -5.0484781006698254e-01 2.4165335288424358e-01 8.9637981096604369e-02 + -5.9104151545290440e-01 3.0555072142402856e-01 1.2484492312377472e-01 + -6.7193819385926545e-01 3.7323828550797256e-01 1.6350073953740307e-01 + -7.4748671043913473e-01 4.4468542192357174e-01 2.0371785264604225e-01 + -8.1812082934011698e-01 5.1973088620440211e-01 2.4316266122672969e-01 + -8.8493339317499209e-01 5.9829209577645748e-01 2.7984606963831909e-01 + -9.4970399484142276e-01 6.8130811512631506e-01 3.1343017064283407e-01 + -1.0145836907979560e+00 7.7223029795091169e-01 3.4752635064339837e-01 + -1.0818436174028441e+00 8.7305237848126360e-01 3.8663099061021861e-01 + -1.1519157704392411e+00 9.7198582627011731e-01 4.2480332293709533e-01 + -1.2246622809996315e+00 1.0449636983404660e+00 4.3903974404236723e-01 + -1.3065085862497889e+00 1.0721589052412737e+00 4.1378932602198359e-01 + -1.4055256704187651e+00 1.0542752929930410e+00 3.6857228274383330e-01 + -1.5179050036652300e+00 1.0106387406457640e+00 3.3943846050918464e-01 + -1.4927698593459053e+00 1.0839778122579364e+00 4.5111945551901877e-01 + id 14065 + loc 7.5453883409500122e-01 8.9868181943893433e-01 393 + blend 0.0000000000000000e+00 + interp 4.6128167514317459e-01:3.5719022952639717e-01:8.4995957744536943e-02:2.5621390184595760e-01:7.8675715150166825e-01:4.0899690438732877e-01:1.0456293815405331e+00:4.1071304919001272e-01:1.6190838645929824e+00:3.7977980269422407e-01:2.0100485429500607e+00:4.6127706232642318e-01:2.6401545700142508e+00:3.6964052867262936e-01:3.0486191130951621e+00:3.7405588994178368e-01:3.7333202520613575e+00 + CVs 20 + -2.1742606144506094e-01 2.7535783923519908e-01 -2.3602531140380267e-01 + -4.1945619911434906e-01 5.5012809480341118e-01 -4.3751168933602780e-01 + -5.9613760331903798e-01 8.3450837538404110e-01 -6.4040517693388077e-01 + -7.4138529656732710e-01 1.1242340568308944e+00 -8.5981935259698183e-01 + -8.5856632269600908e-01 1.4114529422174178e+00 -1.0970658088168372e+00 + -9.4775124009767464e-01 1.6944476292240933e+00 -1.3566787945156251e+00 + -1.0091533022526700e+00 1.9852263340800087e+00 -1.6462787736583282e+00 + -1.0589654280076000e+00 2.3040391429963871e+00 -1.9710580052656739e+00 + -1.1346387231660060e+00 2.6425656367742576e+00 -2.3212962018566472e+00 + -1.2567324298602804e+00 2.9555499001886671e+00 -2.6690227748125843e+00 + -1.4225262405442822e+00 3.2340067252283569e+00 -3.0195870227816521e+00 + -1.6569278884227652e+00 3.4996198333964053e+00 -3.4327755989935422e+00 + -1.9984647344626365e+00 3.7167537992356445e+00 -3.9292579916611272e+00 + -2.4436312194197853e+00 3.8052942857740137e+00 -4.4416244884974247e+00 + -2.9580016496848995e+00 3.6971946229645249e+00 -4.9443996000467862e+00 + -3.5187579648523069e+00 3.3066314273564847e+00 -5.5038369925447563e+00 + -4.1498830892429215e+00 2.6114844033559534e+00 -6.0506550974968656e+00 + -4.8556315077188357e+00 1.8121119246603976e+00 -6.3151552399678890e+00 + -5.4543858866676560e+00 1.2780361084687986e+00 -6.1235587647457885e+00 + id 14066 + loc 6.8542575836181641e-01 3.2103618979454041e-01 373 + blend 0.0000000000000000e+00 + interp 3.0604998987615434e-01:2.4985793363603148e-01:2.8934267061097807e-02:2.2419065871243149e-01:8.6356388366101955e-01:2.8178179851784446e-01:1.4140157809088001e+00:3.0604692937625561e-01:2.0000001294728520e+00:2.3791890208135513e-01:2.7205522378878100e+00:2.4652601932186910e-01:3.4975077438297895e+00 + CVs 20 + 1.3251757575184120e-01 3.7576417966324671e-01 1.2308446730975052e-01 + 2.7910960646319316e-01 7.4053418061159459e-01 2.3656448137812425e-01 + 4.2801311771707340e-01 1.0327939259200114e+00 3.3469298154137594e-01 + 5.6089163777411466e-01 1.2254592608309298e+00 4.5715991064264472e-01 + 6.6038873755434091e-01 1.4323016001802509e+00 5.9578136743805687e-01 + 7.3622976482445457e-01 1.6623292652771247e+00 6.2720972706198963e-01 + 8.2988816830494361e-01 1.8510110226583403e+00 5.6284245687774348e-01 + 9.7233163629326447e-01 2.0113268202297157e+00 4.6567519102051558e-01 + 1.1628953916883575e+00 2.1904890441433333e+00 3.7287709505438049e-01 + 1.3790010279020590e+00 2.4362573514878325e+00 3.1359995551161124e-01 + 1.5970567625095871e+00 2.7670989276968725e+00 3.0822207613604874e-01 + 1.8141889562598217e+00 3.1732332748835450e+00 3.6640087749721045e-01 + 2.0345453224994245e+00 3.6274254346663488e+00 5.2364431664026811e-01 + 2.2451178796519797e+00 4.0629844520345513e+00 8.3837766049663753e-01 + 2.3920048189700625e+00 4.3820290886886211e+00 1.3466528667757403e+00 + 2.3287065024143567e+00 4.4313883664670692e+00 2.0068591827519056e+00 + 2.0777113647782404e+00 4.0689821504837225e+00 2.6464810271733832e+00 + 2.0465196916919206e+00 3.4565536543120512e+00 3.0116729375599847e+00 + 2.3732724727157395e+00 2.9998694682895120e+00 3.0541045496021075e+00 + id 14067 + loc 6.8150222301483154e-01 5.6534755229949951e-01 396 + blend 0.0000000000000000e+00 + interp 4.6562091603232136e-01:3.0592684983257501e-01:1.9371148498341650e-02:3.8379247150089008e-01:1.0017455652573890e+00:4.3186429198256077e-01:1.3703836962408678e+00:3.0336196993878856e-01:1.9627505529534082e+00:3.4598422101859716e-01:2.5518000126757201e+00:3.7823530601631661e-01:3.0262742674167695e+00:4.6561625982316107e-01:3.6549641290221047e+00 + CVs 20 + 8.0040600917847105e-01 2.2731002791774657e-01 -3.1143187709477033e-01 + 1.3760945872166137e+00 2.9094177368029162e-01 -5.4455748194126086e-01 + 1.9106649175609520e+00 2.7791077534885833e-01 -7.5263065645068028e-01 + 2.4873005980556075e+00 2.2388057034741515e-01 -9.5662529907826477e-01 + 3.0952356518661288e+00 1.2202257985378018e-01 -1.1598143107822094e+00 + 3.7173467327853489e+00 -3.0567690186047436e-02 -1.3725831396919230e+00 + 4.3284458977308686e+00 -2.3309119784391674e-01 -1.6078051052471909e+00 + 4.8965085786283975e+00 -4.8438807894069180e-01 -1.8712695502383256e+00 + 5.3910830603861424e+00 -7.8315927223966630e-01 -2.1625266020255198e+00 + 5.7867687496674733e+00 -1.1231929403071221e+00 -2.4825229517336926e+00 + 6.0640691389337151e+00 -1.4865221841950571e+00 -2.8283830673409289e+00 + 6.2232611055235880e+00 -1.8462998780883360e+00 -3.1871077436317332e+00 + 6.2891469782656841e+00 -2.1853628733919015e+00 -3.5473075017938491e+00 + 6.2934647024120549e+00 -2.5059184604670177e+00 -3.9075840130550139e+00 + 6.2573958524019950e+00 -2.8088145043748636e+00 -4.2634964169922061e+00 + 6.1986546960397249e+00 -3.0872277295094452e+00 -4.6078787989945340e+00 + 6.1343432361423433e+00 -3.3487285626421546e+00 -4.9349587991128478e+00 + 6.0756392688893284e+00 -3.6110000365560158e+00 -5.2420106990218303e+00 + 6.0516107397281953e+00 -3.8862344745491404e+00 -5.5458918324381763e+00 + id 14068 + loc 7.8707104921340942e-01 9.6299934387207031e-01 380 + blend 0.0000000000000000e+00 + interp 5.0453070998601479e-01:2.7321611142005997e-01:1.0466807997067118e-03:3.1204747805266619e-01:8.3998108682675077e-01:5.0452566467891491e-01:1.6546310467845580e+00:3.0961703443131444e-01:2.0233257883552680e+00:3.1671632651324683e-01:2.9978187414685715e+00 + CVs 20 + -5.3410887391846362e-01 1.9836609715702191e-01 -4.1117196896239744e-01 + -9.4492155809742906e-01 3.3440962468669883e-01 -6.9557975481089640e-01 + -1.3300292294170968e+00 4.5295867986084293e-01 -9.5665686877412126e-01 + -1.7261922227197890e+00 5.7133910215225914e-01 -1.2415500684754111e+00 + -2.1295159924974278e+00 6.7712797571127459e-01 -1.5584990181337071e+00 + -2.5355375964388793e+00 7.5722901478603988e-01 -1.9120469082710414e+00 + -2.9438104687613107e+00 8.0441416222105833e-01 -2.3038585203910706e+00 + -3.3578731378297113e+00 8.1600621927460804e-01 -2.7339652339175475e+00 + -3.7740640264249805e+00 7.7498855754409846e-01 -3.2051133180305444e+00 + -4.1824153770604369e+00 6.5084955006302181e-01 -3.7141340445896081e+00 + -4.5760404816523064e+00 4.1583739425284438e-01 -4.2403429751641388e+00 + -4.9446935165164216e+00 5.8882608067036823e-02 -4.7534128096460000e+00 + -5.2721455881624069e+00 -4.0956812740263038e-01 -5.2279124569158348e+00 + -5.5453437857985213e+00 -9.6647733638779076e-01 -5.6454983081111010e+00 + -5.7592248268820292e+00 -1.5848617911300149e+00 -5.9896100605622244e+00 + -5.9079437279973703e+00 -2.2337259705131558e+00 -6.2456625220537321e+00 + -5.9822448123620076e+00 -2.8736548207397257e+00 -6.4086275336612202e+00 + -5.9867765756795688e+00 -3.4588052814728467e+00 -6.4934541821027283e+00 + -6.0040725514850894e+00 -3.9387598631234515e+00 -6.5601548438421169e+00 + id 14069 + loc 9.3278110027313232e-02 7.8350949287414551e-01 399 + blend 0.0000000000000000e+00 + interp 4.1726016344215777e-01:3.3715525323302870e-01:2.6495989174092238e-01:4.1725599084052339e-01:9.8117022343153615e-01:4.1004098723556454e-01:1.9013240877096820e+00:3.7871581641472685e-01:2.1734214272550041e+00:2.7449288221086138e-01:2.8638874726659163e+00:3.8763076366104388e-01:3.1341742009618905e+00:2.9481773031821201e-01:3.8485729695467201e+00 + CVs 20 + -2.0267083958408874e-01 3.1893049628835446e-01 -1.9859785234673211e-01 + -4.0342701005399018e-01 6.4600791775631594e-01 -4.1089927735661591e-01 + -5.9648392504815662e-01 9.7774054026657808e-01 -6.5762933917617716e-01 + -7.7900208594440967e-01 1.3084567475076661e+00 -9.4758068413176588e-01 + -9.5531484853140225e-01 1.6358928911961108e+00 -1.2786618639110738e+00 + -1.1444350586515484e+00 1.9607314406924699e+00 -1.6406288999500054e+00 + -1.3884663693186221e+00 2.2804515071352203e+00 -2.0181187991250602e+00 + -1.7464900279384112e+00 2.5567848935472202e+00 -2.3931641206701784e+00 + -2.2546728540515728e+00 2.6881989706955420e+00 -2.7290491919825364e+00 + -2.8522158555968509e+00 2.5933486728809920e+00 -2.9789295141637697e+00 + -3.4379169397870459e+00 2.2987267938214258e+00 -3.1406279708664102e+00 + -3.9466746432941249e+00 1.9024980139380381e+00 -3.2594555286586515e+00 + -4.3625146224653220e+00 1.5341946836008891e+00 -3.3907828004687040e+00 + -4.6898730873651164e+00 1.3270185593269406e+00 -3.5393752832342127e+00 + -4.8970211650144018e+00 1.3571514652645040e+00 -3.6421381400888797e+00 + -4.8679037764425113e+00 1.5782339224974047e+00 -3.6110084661276218e+00 + -4.4761187482479361e+00 1.7415031027866803e+00 -3.3881355614254156e+00 + -4.1674148303412206e+00 1.6915054787643957e+00 -3.1923065641842516e+00 + -4.4473752626296363e+00 2.0248583337191470e+00 -3.2396685774001162e+00 + id 14070 + loc 3.7285986542701721e-01 1.3950832188129425e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4664081837600994e-01:3.2915652574123194e-01:2.3668670073273557e-01:2.9531449385856895e-01:9.7691304246032773e-01:2.9419313910168060e-01:1.4749159660593427e+00:4.2445765045146505e-01:2.0486509606587231e+00:4.4663635196782620e-01:2.6265390397629882e+00:2.9338354239703612e-01:3.2942781217227672e+00 + CVs 20 + 3.1473172536993405e-01 4.6221478011720007e-01 -5.5601887098948810e-02 + 5.0890544191662290e-01 8.8254494023277963e-01 -1.2615213399105368e-01 + 6.5962742823660958e-01 1.2846214152970066e+00 -2.0226724742399377e-01 + 7.8521933177025738e-01 1.6828615505755442e+00 -2.9146691100379918e-01 + 8.6466193976415195e-01 2.0699175931849814e+00 -4.1291785840118977e-01 + 8.6547782052908406e-01 2.4294002029553008e+00 -5.9329640819117291e-01 + 7.5732389140822698e-01 2.7156370855807892e+00 -8.5538744408291278e-01 + 5.5264129606479606e-01 2.8594376577054677e+00 -1.1862694895651149e+00 + 3.1285817569612406e-01 2.8385371519175222e+00 -1.5335107224680760e+00 + 7.8712207365050579e-02 2.7010538940653137e+00 -1.8582702507721605e+00 + -1.5541807894782977e-01 2.4865522597304550e+00 -2.1544031848877840e+00 + -4.0394682618880801e-01 2.1968004804926462e+00 -2.4151344940749087e+00 + -6.7803109416087914e-01 1.8177315393238100e+00 -2.6135920880950536e+00 + -9.8695776804240198e-01 1.3331902070311035e+00 -2.6927390950256549e+00 + -1.3245417210671824e+00 7.5330692216221051e-01 -2.5507925945540961e+00 + -1.6609079694285205e+00 2.1733716538989145e-01 -2.1176742744926202e+00 + -2.0016708837567823e+00 -5.6366287812614768e-02 -1.4868745479397423e+00 + -2.3506671522353448e+00 5.6409918268502945e-03 -8.9121997066052372e-01 + -2.5761762269984949e+00 -3.6380984175755859e-02 -6.2240697120893862e-01 + id 14071 + loc 4.5075935125350952e-01 8.0600756406784058e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8135010005287751e-01:3.3924911896856319e-01:9.4848315749654832e-01:2.5258376871778432e-01:1.5848355027869148e+00:3.5614524673295578e-01:2.4972123616255120e+00:3.8134628655187697e-01:3.0795062898826631e+00:3.4630509666357390e-01:3.9994947547935658e+00 + CVs 20 + 1.8246260931544978e-01 2.5939207495445715e-01 -2.0307101229630792e-01 + 3.6472442870794231e-01 4.9515730548909065e-01 -3.9401375318041376e-01 + 5.4960815177577382e-01 7.0953648640592215e-01 -5.8291044734082587e-01 + 7.3595765073347608e-01 9.0144861461587289e-01 -7.7892463355057706e-01 + 9.1825564187665720e-01 1.0680432332354313e+00 -9.8706819830611847e-01 + 1.0829432717535723e+00 1.2063881276599275e+00 -1.2055194267426890e+00 + 1.2112738520981667e+00 1.3143046252731512e+00 -1.4228928562652379e+00 + 1.2915001760501128e+00 1.3929803384275736e+00 -1.6221910766729060e+00 + 1.3269141482212761e+00 1.4492480297550860e+00 -1.7922335018899043e+00 + 1.3263847891542471e+00 1.4878114798686826e+00 -1.9457233188576570e+00 + 1.2880055974738471e+00 1.4957781650465813e+00 -2.1115235993394506e+00 + 1.2021500905701983e+00 1.4485223429538352e+00 -2.3067274789949335e+00 + 1.0683230014920093e+00 1.3281596967350899e+00 -2.5330109365985156e+00 + 9.0210743552410011e-01 1.1293315234326715e+00 -2.7889505966382835e+00 + 7.2840794574023437e-01 8.5255333349392171e-01 -3.0775878351727837e+00 + 5.7756630430901734e-01 4.9988225677040310e-01 -3.4086371786936032e+00 + 5.0139100023568206e-01 7.2902663726248429e-02 -3.7986372869880181e+00 + 6.0248254063010798e-01 -3.8215993135163695e-01 -4.2152963228552514e+00 + 8.1567760173332626e-01 -6.0442765523013398e-01 -4.4017554500436260e+00 + id 14072 + loc 6.5534883737564087e-01 5.8494645357131958e-01 412 + blend 0.0000000000000000e+00 + interp 5.1218674857663493e-01:3.5171665122093360e-01:6.2370481733865502e-03:3.4431018130498126e-01:9.3003608434315288e-01:4.0692867814838074e-01:1.4111508934398680e+00:5.1218162670914924e-01:1.9885052612021257e+00:3.4927515811873838e-01:2.3933053709171497e+00:3.9170773485756089e-01:2.9954143909110451e+00:4.2996103718260753e-01:3.3651265741987499e+00 + CVs 20 + 7.1778728943212600e-01 6.3886748698725626e-02 -2.4989653637502537e-01 + 1.1883026909830092e+00 9.9785357473974878e-04 -4.7163117446197778e-01 + 1.6066636619997468e+00 -1.0373684232785663e-01 -6.8044712629075321e-01 + 2.0302877770158645e+00 -2.2024985392394192e-01 -8.7734442157537806e-01 + 2.4445348008749832e+00 -3.4295911942519253e-01 -1.0558409642629956e+00 + 2.8363745851952116e+00 -4.6329921014393016e-01 -1.2117150048377199e+00 + 3.1944071093185920e+00 -5.7165602398871762e-01 -1.3442105532879944e+00 + 3.5106356522549684e+00 -6.5981458530245152e-01 -1.4569940505139944e+00 + 3.7839492063254054e+00 -7.2291759676946010e-01 -1.5568120417006801e+00 + 4.0171836392372855e+00 -7.5956904222407595e-01 -1.6503110767968594e+00 + 4.2050041092598036e+00 -7.6262546671209597e-01 -1.7384451827804519e+00 + 4.3380757063156095e+00 -7.0681585501962996e-01 -1.8071929771703683e+00 + 4.4410899963558270e+00 -5.7880951146391801e-01 -1.8383173252932803e+00 + 4.5628545342247451e+00 -4.1789234297489619e-01 -1.8461088118196836e+00 + 4.7174269858909019e+00 -2.6462093631830519e-01 -1.8559017700342682e+00 + 4.8945805892896344e+00 -1.2657086779131088e-01 -1.8598834251919971e+00 + 5.0841317520324321e+00 -7.4826167025232593e-03 -1.8401985689868570e+00 + 5.2689767538257284e+00 7.7019034169728773e-02 -1.8186781737995723e+00 + 5.3127838677560639e+00 4.6129664797537773e-02 -1.9910151624197288e+00 + id 14073 + loc 3.8877588510513306e-01 9.5961219072341919e-01 402 + blend 0.0000000000000000e+00 + interp 4.8514686624919834e-01:4.8514201478053587e-01:3.5779346385738098e-03:3.5167995609658387e-01:7.5336524232124202e-01:4.7369471943012587e-01:1.0659373595391732e+00:3.1404788721872839e-01:2.0320312853186207e+00:3.1541239869142679e-01:2.9999999881095611e+00:3.5948090316391340e-01:3.6449739283691329e+00 + CVs 20 + -8.9113346465646961e-02 1.3030909483622066e-01 -5.2772768589775046e-02 + -1.6851051862539176e-01 2.7880958442492682e-01 -1.2973356992146901e-01 + -2.3917348694852456e-01 4.3190722502723938e-01 -2.2509061991265994e-01 + -3.0562498445712022e-01 5.8018646014856701e-01 -3.3528406598144567e-01 + -3.6732073147648059e-01 7.1873528024541367e-01 -4.5378500646541109e-01 + -4.2645284420026980e-01 8.4463345183802796e-01 -5.7293239680682428e-01 + -4.8698042556749715e-01 9.5653856573611207e-01 -6.8747658427131564e-01 + -5.5494737054882204e-01 1.0541787587808371e+00 -7.9772579031665658e-01 + -6.3665577031782106e-01 1.1358224019882726e+00 -9.0566035211175122e-01 + -7.3641872355756788e-01 1.1990686487354076e+00 -1.0107998079082090e+00 + -8.5686177989811130e-01 1.2438327303721968e+00 -1.1112639582940114e+00 + -9.9658632913938749e-01 1.2668726502345127e+00 -1.2017970929364532e+00 + -1.1536106676159834e+00 1.2658835123914887e+00 -1.2790998639175526e+00 + -1.3197128488046306e+00 1.2395502401886835e+00 -1.3355864691094266e+00 + -1.4798232907762932e+00 1.1936559543164871e+00 -1.3589464570520329e+00 + -1.6180021779437841e+00 1.1400374975964809e+00 -1.3389181450816905e+00 + -1.7207434712189675e+00 1.0840558488313257e+00 -1.2758834158979566e+00 + -1.7868274721956938e+00 1.0230015603557530e+00 -1.1836717339273304e+00 + -2.0910411080545277e+00 9.6154303628969484e-01 -1.1206404530609950e+00 + id 14074 + loc 2.9946434497833252e-01 1.4301764965057373e-01 401 + blend 0.0000000000000000e+00 + interp 4.8079708396830778e-01:3.8652331717364069e-01:4.8138568051759856e-01:2.6714691788193190e-01:9.9579498248653775e-01:3.9962713580330383e-01:1.9742928697087638e+00:3.8899106478350276e-01:2.7216945617159416e+00:4.0629360920827318e-01:3.2761735799862124e+00:4.8079227599746810e-01:3.9803771964463208e+00 + CVs 20 + -1.6108136680469512e-01 3.2062992482056363e-01 7.6255621924342293e-02 + -3.4291964012354786e-01 6.3716034085078832e-01 1.6214408346559739e-01 + -5.2808610748917717e-01 9.4173899462076782e-01 2.4622805745076931e-01 + -7.1592802762296182e-01 1.2283213199068328e+00 3.2598903174183153e-01 + -9.1761155885589196e-01 1.4930508097073334e+00 4.0628449245946108e-01 + -1.1444337731290157e+00 1.7322254212316088e+00 4.9741646131556400e-01 + -1.4035748608280634e+00 1.9329954120726656e+00 6.1370508719193884e-01 + -1.6909032280043168e+00 2.0738835448232775e+00 7.6150781066759643e-01 + -1.9914666442398326e+00 2.1497789687831865e+00 9.3802879631573610e-01 + -2.2918470774833115e+00 2.1699740422046192e+00 1.1377341514767596e+00 + -2.5862505138875429e+00 2.1156082257695221e+00 1.3351256416933825e+00 + -2.8716397683062946e+00 1.9450470504097817e+00 1.4845002220812162e+00 + -3.1573971322384664e+00 1.6498706408176012e+00 1.5894140469310691e+00 + -3.4535891638355913e+00 1.2636813359899379e+00 1.7151312241927668e+00 + -3.7371764010512698e+00 8.1891988759026590e-01 1.8974805279723452e+00 + -3.9832878844966517e+00 2.9452043412011020e-01 2.1455302335985365e+00 + -4.2183088194807077e+00 -2.9917720461104086e-01 2.6008959065624331e+00 + -4.4601050413472070e+00 -6.5057448703253984e-01 3.3696091416037777e+00 + -4.6207362180444047e+00 -7.7987657426207291e-01 3.8618388637412391e+00 + id 14075 + loc 6.0429149866104126e-01 3.7095490097999573e-01 400 + blend 0.0000000000000000e+00 + interp 5.0898829770636711e-01:5.0898320782339002e-01:5.5063866901762260e-01:3.4715932653227988e-01:1.0197863681233452e+00:4.5001850172285468e-01:1.8690513808119524e+00:3.4617359407414627e-01:2.4274062776707810e+00:3.3683020337920705e-01:3.0549673271170379e+00:3.3432580049651556e-01:3.9660570538186883e+00 + CVs 20 + 3.1911782297641350e-01 1.9734561068694012e-01 1.3558013534973479e-01 + 6.1399547749877437e-01 3.9330007220434138e-01 3.0587839568817221e-01 + 8.9052572322810053e-01 5.7561621172800870e-01 5.0322846399370436e-01 + 1.1498295067886608e+00 7.4148425702759047e-01 7.2608604543152910e-01 + 1.3890009511338812e+00 8.9052859441207743e-01 9.6972122916544790e-01 + 1.6084131793395717e+00 1.0252825509107988e+00 1.2284827115042944e+00 + 1.8106825848242971e+00 1.1477937747594176e+00 1.5015138072184850e+00 + 1.9985462174360584e+00 1.2546754845178461e+00 1.7924371596585607e+00 + 2.1721415146964027e+00 1.3383550288862687e+00 2.1044879143931419e+00 + 2.3283308205295858e+00 1.3918032735370964e+00 2.4393783695012501e+00 + 2.4616132817419940e+00 1.4081265028452823e+00 2.7995735811758760e+00 + 2.5622416530820806e+00 1.3771851547372544e+00 3.1859759269791068e+00 + 2.6166641408634121e+00 1.2865308978865642e+00 3.5918171699411898e+00 + 2.6098037921623227e+00 1.1250018230552681e+00 4.0001648891068378e+00 + 2.5326523472210960e+00 8.8810209286314534e-01 4.3797407062427425e+00 + 2.3901144535907224e+00 5.7943735365714621e-01 4.6954373174346618e+00 + 2.1973615492068843e+00 2.0973399007706517e-01 4.9169273855496751e+00 + 1.9787130525946246e+00 -1.9391434144157804e-01 5.0430955805036746e+00 + 1.7802670944830263e+00 -5.4281124433059258e-01 5.2473986399892292e+00 + id 14076 + loc 2.6500526070594788e-01 1.2159448117017746e-01 382 + blend 0.0000000000000000e+00 + interp 4.0883058439278058e-01:2.7934659243653698e-01:4.2234709646359636e-01:3.0463372911237174e-01:1.0141534165474151e+00:3.4595514134248467e-01:1.3108216974090685e+00:3.9406800605276754e-01:1.9728173809457021e+00:2.8503378172786387e-01:2.3121365486074748e+00:4.0882649608693666e-01:2.9796847082611553e+00:2.6358479481099645e-01:3.7173789549600462e+00 + CVs 20 + -5.9769680536853587e-01 1.5077547160875865e-01 -5.0797232162086003e-01 + -1.0529876671533331e+00 1.7510407789791915e-01 -8.2922594978576103e-01 + -1.4741795906119153e+00 1.2480386720651215e-01 -1.1095536642346098e+00 + -1.8938231382570574e+00 2.4702588758543254e-02 -1.4104599642693989e+00 + -2.2948140461611710e+00 -1.2504815644059852e-01 -1.7247567487953939e+00 + -2.6637124500884219e+00 -3.1613989614204685e-01 -2.0416745989976706e+00 + -2.9967716478340556e+00 -5.3157372119164914e-01 -2.3494596261451730e+00 + -3.2963585156159949e+00 -7.4887908438125739e-01 -2.6347548720634637e+00 + -3.5633866180469154e+00 -9.4484733854382497e-01 -2.8848252814183080e+00 + -3.8029275165053278e+00 -1.1025616416154684e+00 -3.0972222786992876e+00 + -4.0335688598546220e+00 -1.2200721279610414e+00 -3.2788953450098410e+00 + -4.2851031916180498e+00 -1.3146313948003308e+00 -3.4359753072421912e+00 + -4.5776175451433154e+00 -1.4130530927170932e+00 -3.5690944189576963e+00 + -4.9048988147446986e+00 -1.5399472540988792e+00 -3.6806367766821610e+00 + -5.2509930175796420e+00 -1.7053102766371873e+00 -3.7794857767835373e+00 + -5.6067166843957548e+00 -1.9073156808667899e+00 -3.8715015573497671e+00 + -5.9640887335984516e+00 -2.1472095407238028e+00 -3.9554740370159447e+00 + -6.3080268709574936e+00 -2.4376045818018914e+00 -4.0222166335320981e+00 + -6.5911197367573759e+00 -2.8595399444561695e+00 -4.0219227858787754e+00 + id 14077 + loc 8.6235725879669189e-01 7.3982632160186768e-01 378 + blend 0.0000000000000000e+00 + interp 4.6110436964715168e-01:3.5502413505190233e-01:6.3597597008071927e-01:3.0630198401845848e-01:1.0310398127237939e+00:3.4260737740581698e-01:1.7047931139749100e+00:2.8451143410099600e-01:2.0284887355318366e+00:3.6461683017446400e-01:3.2970281226164486e+00:4.6109975860345526e-01:3.9789358049741961e+00 + CVs 20 + 5.6167170567221669e-01 3.3716927600015273e-01 -2.1517360876136982e-02 + 1.0760151527996751e+00 6.0740835057598797e-01 -8.0783442959105722e-02 + 1.5925637250318931e+00 8.3565271365906812e-01 -1.7833036432056687e-01 + 2.1314687909819714e+00 1.0573073954061609e+00 -2.9583500792857792e-01 + 2.6837905784537783e+00 1.2813766925583183e+00 -4.0258666496708428e-01 + 3.2514060351756577e+00 1.4927491990727679e+00 -4.6999703736207143e-01 + 3.8445069071049351e+00 1.6695056711839109e+00 -4.7704182183399879e-01 + 4.4611008835259662e+00 1.7924734444223356e+00 -4.1010444252996048e-01 + 5.0818916639276424e+00 1.8426451344758545e+00 -2.6885857656784462e-01 + 5.6786719613537677e+00 1.7999821960865408e+00 -7.4430680377181924e-02 + 6.2258842528799097e+00 1.6463148898390019e+00 1.3810649817817722e-01 + 6.7012206838431236e+00 1.3681279077613695e+00 3.3576880276389409e-01 + 7.0840387460670478e+00 9.7617375338617451e-01 4.9411538445359482e-01 + 7.3827667576120550e+00 5.2560142404820853e-01 6.1281395130207650e-01 + 7.6459878481147090e+00 8.0060130405620544e-02 7.1980121070462277e-01 + 7.9124568099913510e+00 -3.1225852116747665e-01 8.2005511903923267e-01 + 8.1850127705360656e+00 -6.0933725576360986e-01 8.6823279530163155e-01 + 8.4467245212991244e+00 -8.3324748349962796e-01 8.4741907441592557e-01 + 8.6989546330147629e+00 -1.1988369938587233e+00 8.8250333654235025e-01 + id 14078 + loc 1.1681197583675385e-01 6.5810990333557129e-01 395 + blend 0.0000000000000000e+00 + interp 3.7084524276233594e-01:2.8682270620288097e-01:1.7557441243143479e-01:3.7084153430990835e-01:9.9848789357199397e-01:3.3600155897057804e-01:1.6726663614161121e+00:3.4409591872517731e-01:2.5863871678200230e+00:3.0928167897322906e-01:3.0441980371956863e+00:3.3760618596975783e-01:3.7296941781771276e+00 + CVs 20 + 4.7236164704864370e-01 1.0600505373346186e-01 -2.9114726579801309e-01 + 8.8722042021688874e-01 1.6314788401052582e-01 -5.5169643566561233e-01 + 1.2973662807371060e+00 2.1354832543245050e-01 -7.8870378741468905e-01 + 1.7161194031202682e+00 2.6542662249777071e-01 -1.0008635137455997e+00 + 2.1355240265447271e+00 3.1106116956463814e-01 -1.1860568592949639e+00 + 2.5472521263114185e+00 3.4403674604559153e-01 -1.3472583745857734e+00 + 2.9436250516160598e+00 3.5668117440153835e-01 -1.4867230375837817e+00 + 3.3180637485332740e+00 3.3942677869452642e-01 -1.6032772352682649e+00 + 3.6650948701953965e+00 2.8466994496516884e-01 -1.6982934878913118e+00 + 3.9799102377607500e+00 1.8855187531957007e-01 -1.7780402207288466e+00 + 4.2597429189295388e+00 5.1759848961939969e-02 -1.8460770446295713e+00 + 4.5059685356579315e+00 -1.1977568053679333e-01 -1.8999540283574863e+00 + 4.7218678317328830e+00 -3.1947541470174512e-01 -1.9379667168294676e+00 + 4.9090931132006679e+00 -5.4482235698792403e-01 -1.9631936426895451e+00 + 5.0649101463298942e+00 -7.9399086893430226e-01 -1.9792590243244026e+00 + 5.1814358932524636e+00 -1.0569591514387215e+00 -1.9861344607869624e+00 + 5.2523869631883890e+00 -1.3180800385303986e+00 -1.9829616893818112e+00 + 5.2779093296805684e+00 -1.5774543978868096e+00 -1.9716969581759107e+00 + 5.2635488557759942e+00 -1.9068403922487334e+00 -1.9699725107474797e+00 + id 14079 + loc 2.6112499833106995e-01 7.6454371213912964e-01 379 + blend 0.0000000000000000e+00 + interp 5.2573083780199004e-01:4.6440113352602769e-01:6.5892666088243734e-01:2.9087570527307838e-01:1.0500780253482178e+00:2.7638233095987563e-01:2.0075579595126918e+00:5.2572558049361207e-01:2.9650445733895721e+00:4.8807848337501430e-01:3.1751081588170704e+00:2.8443077763858676e-01:3.9992172302064612e+00 + CVs 20 + -1.9878865757477718e-01 2.0627032079448110e-01 2.3457323436610014e-01 + -3.6344757869979039e-01 3.7491848532991823e-01 4.6225844724389725e-01 + -5.0700627291848610e-01 4.8739626196378183e-01 7.1089734053353604e-01 + -6.3929529602060575e-01 5.5116720588041712e-01 1.0318934917329670e+00 + -7.4493673506449198e-01 6.1036055885453955e-01 1.4158857445117192e+00 + -8.2677059659750141e-01 7.1335783466492841e-01 1.8226765199084327e+00 + -9.3401102380707435e-01 8.8788712487470745e-01 2.2287749620997941e+00 + -1.1172014636829983e+00 1.1464573524382884e+00 2.5932708613691089e+00 + -1.3667062232489262e+00 1.4769062451699306e+00 2.8633766658683002e+00 + -1.6594584902892431e+00 1.8473569028248358e+00 3.0160718730464460e+00 + -1.9776307722788569e+00 2.2224355641253175e+00 3.0574301223851927e+00 + -2.2943659080379897e+00 2.5655335892142905e+00 3.0143975743833593e+00 + -2.5928159950954486e+00 2.8427766712312597e+00 2.9202454210360513e+00 + -2.8682907884784310e+00 3.0347169642831315e+00 2.7992844976934315e+00 + -3.1168154763126550e+00 3.1428062552156453e+00 2.6577948128185809e+00 + -3.3473687522704600e+00 3.1677557671493002e+00 2.4619050765882449e+00 + -3.5752930503270335e+00 3.0680275736500873e+00 2.1689745443456756e+00 + -3.7954508292805698e+00 2.7613619241179270e+00 1.8771579867588235e+00 + -3.8559218301198275e+00 2.4763438515954679e+00 1.8891537756127543e+00 + id 14080 + loc 6.8404078483581543e-01 9.1196560859680176e-01 396 + blend 0.0000000000000000e+00 + interp 4.2784509942882631e-01:3.0633644964118206e-01:6.5811331139950080e-02:3.1092209375838697e-01:1.0010226529593074e+00:4.2784082097783205e-01:2.0120810499639412e+00:2.9898640645646513e-01:2.6892585711660173e+00:2.6232655595400650e-01:3.1587518600387381e+00 + CVs 20 + 9.4753069625421737e-01 2.5581242185128855e-01 -2.6730004729191542e-01 + 1.5507674516874175e+00 3.2520536520529686e-01 -4.1979204672787784e-01 + 2.0528185007780895e+00 3.1399536696388103e-01 -5.2609391251485571e-01 + 2.5594721933243103e+00 2.7711278171217513e-01 -6.0966583911997807e-01 + 3.0706886391647559e+00 2.1644320638443820e-01 -6.7934931464609760e-01 + 3.5911978618029083e+00 1.3574677807035163e-01 -7.4554060307282644e-01 + 4.1248947724139349e+00 4.3159989911022434e-02 -8.1875726930205128e-01 + 4.6732070029691597e+00 -5.2368714470438671e-02 -9.0537422046299809e-01 + 5.2403603745055038e+00 -1.5506894536313054e-01 -1.0096822389583613e+00 + 5.8336559006344286e+00 -2.8759992834803838e-01 -1.1356893185625097e+00 + 6.4438808882039460e+00 -4.8176475257845475e-01 -1.2944898940103522e+00 + 7.0346520521267077e+00 -7.6047043145432758e-01 -1.5023184242841328e+00 + 7.5643035463107333e+00 -1.1260134916097988e+00 -1.7632347165895730e+00 + 8.0111763388052530e+00 -1.5751379383731918e+00 -2.0669725427134371e+00 + 8.3623255759335375e+00 -2.1006646079599012e+00 -2.3984379706831085e+00 + 8.6047971975490558e+00 -2.6782054086528668e+00 -2.7452133362703734e+00 + 8.7308482845551314e+00 -3.2747064415015545e+00 -3.0908187450088169e+00 + 8.7413101961742097e+00 -3.8613618421004707e+00 -3.4077863061095570e+00 + 8.6215179895804077e+00 -4.3589692362053150e+00 -3.6366518925118467e+00 + id 14081 + loc 4.5241606235504150e-01 8.4073984622955322e-01 1079 + blend 0.0000000000000000e+00 + interp 4.9013169891923181e-01:4.3650152996766139e-01:5.3527481196709414e-01:3.4741990645015858e-01:1.0748686192616261e+00:4.9012679760224265e-01:1.6772127349171253e+00:4.4717249516451985e-01:2.0031052682547923e+00:3.1549857776326556e-01:2.4753395291382931e+00:4.6040969112803087e-01:3.2085422827025667e+00:2.7128721250160448e-01:3.7783273651376614e+00 + CVs 20 + 8.0851160422341209e-02 3.6533537912606173e-01 1.1357688643170247e-01 + 2.0010714033705279e-01 7.0468884850046010e-01 1.8682758799430152e-01 + 3.5108007245797362e-01 1.0330885990976129e+00 2.3234732306338057e-01 + 5.3181998388775997e-01 1.3535514645480338e+00 2.5138731477040482e-01 + 7.4227177182291926e-01 1.6562729232412474e+00 2.3381320126763383e-01 + 9.7921667516852395e-01 1.9265572475296153e+00 1.6553447996073711e-01 + 1.2332575662673091e+00 2.1429918301477784e+00 3.4500689950138330e-02 + 1.4892120033261305e+00 2.2865814527232389e+00 -1.5648838247083807e-01 + 1.7317629322462529e+00 2.3485135454077932e+00 -3.9036028257198063e-01 + 1.9499639675163301e+00 2.3294409812394137e+00 -6.4409031622725355e-01 + 2.1392918415197242e+00 2.2373649508108073e+00 -8.9505932281033385e-01 + 2.3007887464261065e+00 2.0848283818185163e+00 -1.1241227483776943e+00 + 2.4389145221335515e+00 1.8879776882455064e+00 -1.3158722639876002e+00 + 2.5602165668127168e+00 1.6662571983000629e+00 -1.4572821231423374e+00 + 2.6702278734420566e+00 1.4442725904686466e+00 -1.5340620451997105e+00 + 2.7690531081012342e+00 1.2707313302543226e+00 -1.5261991739922074e+00 + 2.8588242806258055e+00 1.2224393295206211e+00 -1.4574893098229653e+00 + 2.9539982737472372e+00 1.2243821750223269e+00 -1.4011373179595521e+00 + 3.0455184501386157e+00 1.0557164947944400e+00 -1.2208682315256647e+00 + id 14082 + loc 2.9712310433387756e-01 7.3625391721725464e-01 403 + blend 0.0000000000000000e+00 + interp 4.0848713691902544e-01:2.6337000954271339e-01:1.5257904833998470e-04:4.0848305204765628e-01:9.4644660757466459e-01:2.7830928795421794e-01:1.2924819854370768e+00:2.6256765522484615e-01:2.0210034215519217e+00:3.3444871990753733e-01:2.9910160621321573e+00 + CVs 20 + 4.5089383149442899e-02 1.8964609560532472e-01 -1.5955854070607059e-01 + 7.2329841879231943e-02 3.7414510653118227e-01 -3.3551288867353662e-01 + 9.2310234753281262e-02 5.5700633265454758e-01 -5.2608617518319700e-01 + 1.0231061969983413e-01 7.4549320152962362e-01 -7.3374758159273656e-01 + 9.6243662188700674e-02 9.4006684902191173e-01 -9.5616625398711241e-01 + 6.6780006238812417e-02 1.1434246699411303e+00 -1.1887145095441107e+00 + 5.2407981251649804e-03 1.3588400073539590e+00 -1.4243283981701700e+00 + -9.6026147193855715e-02 1.5877328554330337e+00 -1.6536424554018938e+00 + -2.4326004273915014e-01 1.8286280187550288e+00 -1.8661132785351466e+00 + -4.4279301994200881e-01 2.0730319954098406e+00 -2.0530872826782258e+00 + -7.0141688804785030e-01 2.3012196326324572e+00 -2.2111311969959537e+00 + -1.0171932339141665e+00 2.4791086591971014e+00 -2.3460839389962995e+00 + -1.3595400260530126e+00 2.5710820597821673e+00 -2.4751045383600849e+00 + -1.6796747195428492e+00 2.5820161040446119e+00 -2.6107702412262657e+00 + -1.9749321996579021e+00 2.5611873939761671e+00 -2.7379461530117299e+00 + -2.2920238500795467e+00 2.5361602526145219e+00 -2.8282165172672493e+00 + -2.6630117334450576e+00 2.4900009150055604e+00 -2.8625780323238645e+00 + -3.0715461044669654e+00 2.4024328048540324e+00 -2.8363808844709593e+00 + -3.2289807795532948e+00 2.4223165633210257e+00 -2.8954386597016950e+00 + id 14083 + loc 8.9596092700958252e-01 7.0038342475891113e-01 412 + blend 0.0000000000000000e+00 + interp 5.5482043809385573e-01:3.6971084984918134e-01:2.4983485606016043e-03:4.1744831547647326e-01:5.6353320358412207e-01:4.8086932408624172e-01:9.9688871615338936e-01:4.0378347890705973e-01:1.6599847369597600e+00:3.4346846520758001e-01:2.3402426657028723e+00:5.5182732199677331e-01:3.0882197172796131e+00:5.5481488988947480e-01:3.4859394255941289e+00 + CVs 20 + 6.8322110182982476e-01 2.4788684733941960e-01 -1.3616423228164537e-01 + 1.1468750088943447e+00 4.1015103741886827e-01 -2.4167058546188508e-01 + 1.5457509407800165e+00 5.2131422549811979e-01 -3.4633992728476493e-01 + 1.9791582237446612e+00 6.0677200797694042e-01 -4.6509991650953053e-01 + 2.4378298157313743e+00 6.5195925517718323e-01 -5.9537280819249272e-01 + 2.9068030987139091e+00 6.4515550344938755e-01 -7.3252323765680516e-01 + 3.3707736548217087e+00 5.8144640185429552e-01 -8.7052531556564683e-01 + 3.8166601461891205e+00 4.6290305864964454e-01 -1.0032360254950177e+00 + 4.2326922975984598e+00 2.9709142268495392e-01 -1.1254613840862833e+00 + 4.6101570035006025e+00 9.5909521733456016e-02 -1.2331266705981299e+00 + 4.9508539368014608e+00 -1.2715129554902038e-01 -1.3230504544226149e+00 + 5.2673160750185204e+00 -3.6451338295518054e-01 -1.3942763448435798e+00 + 5.5625333052403301e+00 -6.2211404488449151e-01 -1.4541220464523543e+00 + 5.8195074762137446e+00 -9.1274780394238753e-01 -1.5183789679807462e+00 + 6.0246935384882869e+00 -1.2406889833091681e+00 -1.5950503010270514e+00 + 6.1767880272502413e+00 -1.5999903185146698e+00 -1.6772915761080462e+00 + 6.2781980702187088e+00 -1.9809052264710805e+00 -1.7559354050809142e+00 + 6.3333374660358999e+00 -2.3720682983929247e+00 -1.8303582239257596e+00 + 6.3399463477516909e+00 -2.7719375399074138e+00 -1.9164763360245733e+00 + id 14084 + loc 9.5904392004013062e-01 8.7612313032150269e-01 402 + blend 0.0000000000000000e+00 + interp 4.9677890255197243e-01:3.0049231107391056e-01:2.4283179105411001e-04:4.9677393476294696e-01:7.0662523079780715e-01:2.9233137647304325e-01:1.0983753935183653e+00:3.9288852917701811e-01:1.7738741470885491e+00:3.2023969785356904e-01:2.0303328920100756e+00:2.7730461425303859e-01:2.7584620820790491e+00:2.1402060374479104e-01:3.7085417661808719e+00 + CVs 20 + -1.5854647702675845e-01 8.6727538410160482e-02 -3.1688390643331218e-02 + -3.2011701796282338e-01 1.8065342257856762e-01 -6.4415019401864101e-02 + -4.8219540854742721e-01 2.7792999391529338e-01 -9.7361381381560780e-02 + -6.4635124748515294e-01 3.7741298521874289e-01 -1.3250760021295216e-01 + -8.1909371753692017e-01 4.8304900165055975e-01 -1.7736620234831524e-01 + -1.0093245768024177e+00 6.0364925386582591e-01 -2.4642861402714841e-01 + -1.2062186930540792e+00 7.4083003548815474e-01 -3.4781185807630188e-01 + -1.3933496312453082e+00 8.6881980161376426e-01 -4.8161010368897555e-01 + -1.6076127351826872e+00 1.0046228814871772e+00 -7.1141658984629341e-01 + -1.8063846396089498e+00 1.2350144270697587e+00 -1.0752251562503421e+00 + -1.8713164369492925e+00 1.5012395389583275e+00 -1.3795774899555133e+00 + -1.8400446065746916e+00 1.6975240665680462e+00 -1.4704986493322567e+00 + -1.7249780719650873e+00 1.8603278990664167e+00 -1.3193018453136900e+00 + -1.4900235234983077e+00 2.0437658351664378e+00 -1.0692909841756773e+00 + -1.1932405747787915e+00 2.2340528902019927e+00 -9.2187252585323765e-01 + -8.8456361506056702e-01 2.4039431715107478e+00 -8.9506383923877297e-01 + -5.5910574244674827e-01 2.5417988406778420e+00 -9.4989410634125793e-01 + -2.5955566835583643e-01 2.6263094999804482e+00 -1.0782257216005857e+00 + -2.9777599622172946e-01 2.5576985138082802e+00 -1.2329534633943222e+00 + id 14085 + loc 1.8572178483009338e-01 7.9590922594070435e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7805722812853230e-01:3.3799543652034242e-01:3.4630779665790890e-01:4.7805244755625104e-01:9.9265767040953001e-01:3.3663286215842986e-01:1.6559021509878340e+00:3.7340711299119778e-01:2.5749298602604620e+00:3.9986384763258431e-01:3.3013131928254627e+00:3.8398833999945092e-01:3.9690147452109943e+00 + CVs 20 + 3.1412603733991140e-01 1.9353672561349661e-01 -2.4505642949462048e-01 + 6.2229906492637954e-01 4.0404153250354991e-01 -5.0458067106451432e-01 + 9.2000258665492163e-01 6.3302521971290482e-01 -7.7371201111371557e-01 + 1.1873912804319364e+00 8.8290098866132594e-01 -1.0628274431866247e+00 + 1.3942765178483234e+00 1.1472670780689722e+00 -1.3869154238505041e+00 + 1.5064303392076446e+00 1.3965756302729631e+00 -1.7516283384281210e+00 + 1.5074141228021527e+00 1.5735729707049093e+00 -2.1421413156180460e+00 + 1.4206092051601789e+00 1.6132828164989772e+00 -2.5213139525401758e+00 + 1.2925889789419935e+00 1.4856102837758705e+00 -2.8402818581296976e+00 + 1.1595185443904583e+00 1.2292736544103167e+00 -3.0665083853475954e+00 + 1.0401306957912630e+00 9.2052433205623996e-01 -3.2221267491519390e+00 + 9.4758874770436008e-01 6.0654096948953562e-01 -3.3684349499128428e+00 + 8.9632718294452374e-01 2.9821998287527235e-01 -3.5565435478150746e+00 + 9.0689774744154361e-01 -2.5537672525244304e-04 -3.8060425414633743e+00 + 1.0172048247854109e+00 -2.7290424856883161e-01 -4.1118779545587101e+00 + 1.3095428972844423e+00 -4.8266964391853412e-01 -4.4312917664177069e+00 + 1.8901221618476836e+00 -5.2739763629979863e-01 -4.6439606508399711e+00 + 2.6029417351642512e+00 -3.0489342739373637e-01 -4.6389441283641837e+00 + 2.8453068148183540e+00 -4.0750253576104822e-01 -4.9336286239385689e+00 + id 14086 + loc 9.7662949562072754e-01 4.6536099910736084e-01 380 + blend 0.0000000000000000e+00 + interp 5.1995443591924717e-01:3.6878783970786821e-01:7.0815010344278395e-03:3.1502542626375796e-01:6.8703641520027781e-01:4.0866887178362188e-01:1.2075212035165361e+00:5.1994923637488799e-01:1.7866124467803537e+00:2.8954882776833796e-01:2.4232446944852088e+00:2.5110289891942816e-01:3.4523728560779556e+00 + CVs 20 + 4.5842844617556622e-01 2.2628597576261111e-01 7.1186439277072877e-01 + 8.4195416085542174e-01 3.7328940751329609e-01 1.1695915259944694e+00 + 1.2154373788183883e+00 5.0058959110736190e-01 1.5546596929241492e+00 + 1.6071911037859361e+00 6.3712676324413398e-01 1.9492746508847172e+00 + 2.0117295116505240e+00 7.7507968873899302e-01 2.3673525905772799e+00 + 2.4252557113585329e+00 9.0386387748239405e-01 2.8209006616410059e+00 + 2.8508663432489745e+00 1.0112622814354908e+00 3.3155155463254458e+00 + 3.2946344430350343e+00 1.0810152530804602e+00 3.8555938533762344e+00 + 3.7519612441263508e+00 1.0856916435114443e+00 4.4417924473347954e+00 + 4.2125864317024977e+00 9.9726556424360102e-01 5.0616814478629895e+00 + 4.6728580590255957e+00 7.8805543655805299e-01 5.6949464478784879e+00 + 5.1282530619175448e+00 4.2521415608334756e-01 6.3136028137890730e+00 + 5.5500408936585970e+00 -1.0368672475041807e-01 6.8595108239753193e+00 + 5.8949417835095215e+00 -7.3089971291477962e-01 7.2502177956986564e+00 + 6.1526495488042414e+00 -1.3362382856027195e+00 7.4600455040364153e+00 + 6.3422194020901630e+00 -1.8388988237178348e+00 7.5392146638454589e+00 + 6.4749823027429736e+00 -2.1888714641880278e+00 7.5459155920718874e+00 + 6.5675627299994748e+00 -2.4001072497072151e+00 7.5207007638449488e+00 + 6.8261676077031748e+00 -2.8156947727418475e+00 7.5511849665164874e+00 + id 14087 + loc 8.6258041858673096e-01 8.4611409902572632e-01 401 + blend 0.0000000000000000e+00 + interp 4.5843890591071607e-01:3.8815309437019241e-01:4.1314078043966695e-02:3.7231266284078074e-01:9.9932423322458996e-01:3.8966930071443867e-01:1.7290997016750456e+00:4.5413455417697590e-01:2.0991569044835221e+00:4.5843432152165697e-01:2.6034692457895998e+00:3.6852957105343975e-01:2.9950022485536780e+00:2.8124032794574433e-01:3.5935826366711057e+00 + CVs 20 + -7.7396098790519230e-04 2.9938442350667516e-01 -3.2706862979928297e-01 + 1.7210745577505016e-03 5.6937718422505290e-01 -6.5419095214587386e-01 + 1.2163545541343135e-02 8.0667501867174585e-01 -1.0050590611681545e+00 + 2.9561290469932500e-02 9.9936092441220026e-01 -1.3854771355636448e+00 + 4.6631536716583266e-02 1.1393005337903963e+00 -1.7949481316138987e+00 + 4.4611422019038005e-02 1.2305451913457572e+00 -2.2353484173927800e+00 + -6.2029460744290610e-03 1.2795879986730201e+00 -2.6986015604311313e+00 + -1.3160219971523990e-01 1.2863002518197906e+00 -3.1635143085743245e+00 + -3.4443048015630384e-01 1.2452445299284349e+00 -3.6076643568481974e+00 + -6.4432250054915963e-01 1.1512113052749950e+00 -4.0150015465690609e+00 + -1.0116098854360076e+00 1.0001235009102434e+00 -4.3727598790345121e+00 + -1.4075748958555994e+00 7.8665670736330584e-01 -4.6791353998320124e+00 + -1.8037669193134518e+00 5.0945604700042091e-01 -4.9481762396387339e+00 + -2.2070247933643667e+00 1.7247621927783108e-01 -5.1885458542263612e+00 + -2.6275937730073005e+00 -2.0751492196308774e-01 -5.4085968676285257e+00 + -3.0388213290850894e+00 -5.7799618001304320e-01 -5.6779891089928238e+00 + -3.3794288719606858e+00 -8.6115735010821270e-01 -6.0891781383874672e+00 + -3.6431461666191507e+00 -1.0514491276894722e+00 -6.5942626961671209e+00 + -4.0389093801493221e+00 -1.3332878223486584e+00 -7.0090133574404536e+00 + id 14088 + loc 7.6237022876739502e-01 1.5739347040653229e-01 400 + blend 0.0000000000000000e+00 + interp 4.2297702167971790e-01:3.3655635339071671e-01:2.6341379479570137e-01:3.8034305872253732e-01:9.0080548848256459e-01:4.2297279190950110e-01:1.1002022400254137e+00:3.4057422617234456e-01:2.0068885102768199e+00:3.4637897686055585e-01:2.9942647217206897e+00:4.1801250904262977e-01:3.7279378652717030e+00 + CVs 20 + 1.9265485111547467e-01 9.2973784307498544e-02 1.2064889194225803e-01 + 3.9421219966872756e-01 2.3274337079877230e-01 2.7437995290136152e-01 + 5.9509303501592759e-01 3.9582156648807693e-01 4.4047079972564029e-01 + 7.9013522549306858e-01 5.6763629899794932e-01 6.0959886775549810e-01 + 9.7919288094613288e-01 7.4492862462350562e-01 7.8309334334774761e-01 + 1.1619570632718712e+00 9.2528656359872297e-01 9.6248400753100860e-01 + 1.3379570943517181e+00 1.1064888111165254e+00 1.1529690983802656e+00 + 1.5067091952826792e+00 1.2822102333080547e+00 1.3662798050492451e+00 + 1.6678022920433848e+00 1.4378959072711353e+00 1.6141915916991154e+00 + 1.8247709361333104e+00 1.5512672154348144e+00 1.8970300094270485e+00 + 1.9864591955890021e+00 1.5974795317563895e+00 2.2023124328129393e+00 + 2.1577577847515004e+00 1.5609434525760439e+00 2.5095669437079069e+00 + 2.3354390467654218e+00 1.4473308708506707e+00 2.7993018224216444e+00 + 2.5167338234052079e+00 1.2730347184991293e+00 3.0613211656857562e+00 + 2.7014895878696135e+00 1.0499971555722878e+00 3.2911851939951045e+00 + 2.8845804261090304e+00 7.8033797939145244e-01 3.4888167426851107e+00 + 3.0515889549729089e+00 4.6084014676896778e-01 3.6572901146278847e+00 + 3.1886402165744445e+00 1.0330740642297043e-01 3.7981452130421420e+00 + 3.3233123381048495e+00 -1.5943381887617303e-01 3.9556490366994166e+00 + id 14089 + loc 2.5028696656227112e-01 9.3404030799865723e-01 393 + blend 0.0000000000000000e+00 + interp 5.3272655022881821e-01:3.5479817890501125e-01:3.1296599198004538e-02:3.7188844716045932e-01:9.4473962825862934e-01:2.9170121535041205e-01:1.9158135703260981e+00:5.3272122296331592e-01:2.4241619682695399e+00:4.8661850994350142e-01:2.9291632710547235e+00:3.6268652602966978e-01:3.0960694032332832e+00:4.6738986442951991e-01:3.7403327301146327e+00 + CVs 20 + -2.2197628710927511e-01 3.3886435865972608e-01 -1.9800085808100332e-01 + -4.4481708814577225e-01 7.0118757718494029e-01 -4.2056073708930952e-01 + -6.5447665949544209e-01 1.0897435924824117e+00 -6.7131718712213162e-01 + -8.7138195560052478e-01 1.5006870889059938e+00 -9.4046244100731002e-01 + -1.1326058918381099e+00 1.9197527338316926e+00 -1.2112548595871877e+00 + -1.4631068832450240e+00 2.3198395363600772e+00 -1.4712535711153862e+00 + -1.8677513357994080e+00 2.6642357989835861e+00 -1.7174801418092329e+00 + -2.3362217502204814e+00 2.9120730625579916e+00 -1.9494474607934629e+00 + -2.8314306069382638e+00 3.0328529333583969e+00 -2.1723630359334565e+00 + -3.2954782492039763e+00 3.0417070564151309e+00 -2.4170460223225758e+00 + -3.7073359199922735e+00 2.9645314440471662e+00 -2.7053272405832383e+00 + -4.0667117378859334e+00 2.7907385384494070e+00 -3.0176596387450956e+00 + -4.3483438182071863e+00 2.5180381204435953e+00 -3.3222817113289862e+00 + -4.5177369819706232e+00 2.1970286917330624e+00 -3.6060350693311243e+00 + -4.6187612271068099e+00 1.8660441235311582e+00 -3.8629916173901453e+00 + -4.7727487303777858e+00 1.4812220013824027e+00 -4.0829083955167658e+00 + -5.0268187928309240e+00 1.0180683818499854e+00 -4.2436124972724043e+00 + -5.2854594031489430e+00 5.7373411829267051e-01 -4.3495400227566279e+00 + -5.3832086955560285e+00 3.0894969812527528e-01 -4.4673620664624698e+00 + id 14090 + loc 3.5135617852210999e-01 7.7192658185958862e-01 382 + blend 0.0000000000000000e+00 + interp 3.0590124960655335e-01:2.8618813854450736e-01:9.1527190025389438e-01:3.0589819059405732e-01:1.9359499166982790e+00:2.3683515309629075e-01:2.8833570193321529e+00:2.6316065533137406e-01:3.9494417028010029e+00 + CVs 20 + 9.3642201736782038e-01 1.1154696273532216e-01 -5.3026511835764545e-01 + 1.5218945162884854e+00 4.7549157623902882e-02 -9.2560053632103045e-01 + 2.0015926315912047e+00 -9.4379911957919171e-02 -1.2996091438049753e+00 + 2.4758153344590483e+00 -2.7088186901691469e-01 -1.6995109479667097e+00 + 2.9346046539221051e+00 -4.7712523380495775e-01 -2.1279303073852693e+00 + 3.3696605418886150e+00 -7.0489595550756878e-01 -2.5833376076421359e+00 + 3.7733198996246986e+00 -9.4221520662855263e-01 -3.0563067957698795e+00 + 4.1406274374554819e+00 -1.1785950006512516e+00 -3.5276721081153557e+00 + 4.4735667237385082e+00 -1.4099630256522420e+00 -3.9726754507296964e+00 + 4.7790796677583671e+00 -1.6355931962807111e+00 -4.3709613114576200e+00 + 5.0682434275867987e+00 -1.8545157152680438e+00 -4.7186519045171291e+00 + 5.3577730658005152e+00 -2.0708915082876236e+00 -5.0306796945012486e+00 + 5.6608738343541880e+00 -2.2976128296829446e+00 -5.3238109185394817e+00 + 5.9780414337315975e+00 -2.5472013368666073e+00 -5.6045848805803606e+00 + 6.2978741581538618e+00 -2.8280076245866499e+00 -5.8711491335589203e+00 + 6.6015935947525630e+00 -3.1450606616853491e+00 -6.1191045474354020e+00 + 6.8684273583297433e+00 -3.4983999484199635e+00 -6.3441930171175756e+00 + 7.0845838413544815e+00 -3.8689121091136105e+00 -6.5339567344007463e+00 + 7.2246303546406736e+00 -4.1656925907197246e+00 -6.5979794474687949e+00 + id 14091 + loc 5.6448411941528320e-01 2.6045152544975281e-01 399 + blend 0.0000000000000000e+00 + interp 4.7668594118762131e-01:3.8214699532663549e-01:3.3372133391930914e-01:3.3813463134683996e-01:9.9990218146861154e-01:4.7668117432820944e-01:1.6539793098389810e+00:3.7841979664419145e-01:2.0002316521904620e+00:3.9934470875198319e-01:2.8939766762182275e+00:4.0332688622127127e-01:3.4510715912375334e+00:3.5391319602521748e-01:3.9868648892470757e+00 + CVs 20 + 1.3935211223080340e-01 2.6492814471280141e-01 2.1980408829278381e-01 + 2.4972170994555831e-01 5.2037655332205623e-01 4.5310418354843668e-01 + 3.2306560637969478e-01 7.5887972366786405e-01 7.1835651179181892e-01 + 3.6757169477300622e-01 9.8309932408589717e-01 1.0231396633685592e+00 + 4.0184779752658811e-01 1.1979463547024425e+00 1.3627587453571530e+00 + 4.4316021860878368e-01 1.4014911288760434e+00 1.7300889287803578e+00 + 5.0407999893770294e-01 1.5838445858681789e+00 2.1211657000108493e+00 + 5.9551013655734075e-01 1.7279799678269065e+00 2.5330893225273878e+00 + 7.2597299661705228e-01 1.8093512176467350e+00 2.9574839202915406e+00 + 8.9594849726878434e-01 1.7998089069692891e+00 3.3750615104836754e+00 + 1.0939226612004322e+00 1.6781968507497576e+00 3.7554465600042697e+00 + 1.3028508971173918e+00 1.4462499337908747e+00 4.0704284379115148e+00 + 1.5138767679569527e+00 1.1303431318881143e+00 4.3125933382705295e+00 + 1.7278291359941749e+00 7.6959409999297801e-01 4.4996478824118027e+00 + 1.9502924362516931e+00 4.0871186279203287e-01 4.6774115236145688e+00 + 2.1660409757713341e+00 9.6703730770257179e-02 4.9010384345801761e+00 + 2.2986010057010455e+00 -1.0673699153632055e-01 5.1960789799447662e+00 + 2.2815877453120157e+00 -1.7968244881841511e-01 5.5324276612507033e+00 + 2.4033326246580153e+00 -3.9310459368984652e-01 5.9428370505270287e+00 + id 14092 + loc 3.9950451254844666e-01 4.0893509984016418e-01 395 + blend 0.0000000000000000e+00 + interp 3.3922280501368124e-01:3.3921941278563111e-01:9.0390705051439912e-01:3.0295092923820016e-01:1.9131203493012268e+00:3.3167623277872954e-01:2.8587618512956587e+00:2.9139404229455707e-01:3.9564185958931670e+00 + CVs 20 + -3.2944420457135687e-01 1.6693235128075767e-01 -2.9169336250602546e-01 + -6.0841937039971516e-01 2.9586698678967105e-01 -5.3716386550378226e-01 + -8.7810333105583105e-01 4.1170835946390116e-01 -7.7220781280463702e-01 + -1.1545681907594514e+00 5.2349317483317004e-01 -1.0121856551195929e+00 + -1.4361408347517157e+00 6.2618324049550789e-01 -1.2590627897900502e+00 + -1.7217796062743131e+00 7.1325606788877627e-01 -1.5128862773799219e+00 + -2.0133814802082264e+00 7.7895801954293609e-01 -1.7722723587295910e+00 + -2.3130206448333941e+00 8.1613340301541348e-01 -2.0359593127161912e+00 + -2.6160910848845318e+00 8.1316755315991207e-01 -2.3005878827655106e+00 + -2.9113271361281030e+00 7.5669017003071981e-01 -2.5539047958651651e+00 + -3.1920982938985714e+00 6.3655328111757670e-01 -2.7778146789119917e+00 + -3.4606352621762113e+00 4.4596214429370784e-01 -2.9615198174704536e+00 + -3.7152569293570306e+00 1.8392311912543913e-01 -3.1021326168724781e+00 + -3.9437478191113220e+00 -1.3886400375743868e-01 -3.1964172374352886e+00 + -4.1344495174713574e+00 -5.0447634442705658e-01 -3.2406820676553432e+00 + -4.2798054335824700e+00 -8.9588312740373288e-01 -3.2333470401403024e+00 + -4.3732659743601374e+00 -1.2992681660217889e+00 -3.1772395841081589e+00 + -4.4214802600328280e+00 -1.7145473874458668e+00 -3.0862321284939864e+00 + -4.4915727591307952e+00 -2.2067397802535460e+00 -3.0097944031008397e+00 + id 14093 + loc 5.6483244895935059e-01 3.4414020180702209e-01 379 + blend 0.0000000000000000e+00 + interp 4.4244120499453599e-01:4.4243678058248603e-01:7.1816944718324427e-01:2.7728740655284151e-01:1.2648004575122389e+00:3.0986677528886236e-01:2.1945916731117370e+00:3.8095958366392496e-01:2.8993582609480288e+00:3.4735809922623540e-01:3.2877796377853326e+00:2.4544132591428167e-01:3.9576382723159731e+00 + CVs 20 + 4.0853194302305396e-01 3.1574525632959982e-01 -9.3991872239915703e-02 + 7.5035563764540847e-01 5.8590027095869424e-01 -2.4579729404265491e-01 + 1.0533734177528380e+00 7.9791781642279624e-01 -4.3685458515133835e-01 + 1.3333959748016697e+00 9.8385038725449436e-01 -6.5039953765559877e-01 + 1.5949603532964418e+00 1.1797271746459019e+00 -8.6254276909221128e-01 + 1.8539840594543990e+00 1.4041300939312242e+00 -1.0525213470481605e+00 + 2.1298908371656253e+00 1.6573545192340458e+00 -1.2037772547614889e+00 + 2.4296884856451633e+00 1.9280516743266873e+00 -1.3033119035709499e+00 + 2.7519320714841333e+00 2.2074436194125546e+00 -1.3457080647956670e+00 + 3.0970617026095533e+00 2.4904710749784096e+00 -1.3312264785285066e+00 + 3.4665487128576697e+00 2.7674524600507651e+00 -1.2678383913508871e+00 + 3.8619703334926863e+00 3.0357455388092145e+00 -1.1706476801745143e+00 + 4.2981434972165182e+00 3.2942775769324428e+00 -1.0445879095521735e+00 + 4.8005054616286111e+00 3.5069991942772671e+00 -8.7556296526160160e-01 + 5.3416552134580275e+00 3.6233600756941522e+00 -6.2944358399757094e-01 + 5.7685388530441202e+00 3.6744304175514646e+00 -2.6204783538582921e-01 + 5.9468995397684115e+00 3.7752463426430101e+00 3.6387566299753493e-01 + 5.9775637994683866e+00 3.6970595078198327e+00 1.1200423230562930e+00 + 6.1426532242018004e+00 3.5307795719919994e+00 9.2785746151821025e-01 + id 14094 + loc 7.9194772243499756e-01 1.8350879848003387e-01 378 + blend 0.0000000000000000e+00 + interp 4.5253113922745142e-01:4.3996516196582891e-01:3.7091698255098082e-01:3.8738487778407804e-01:1.0554756302208725e+00:4.2448789394006603e-01:1.8447470212909707e+00:4.5252661391605914e-01:2.2039860677015923e+00:3.0686808975406382e-01:3.1366675125048249e+00:3.6978953962974254e-01:3.9333522897346702e+00 + CVs 20 + -3.3795821291141426e-01 2.6268129027818599e-01 2.2408822749765356e-02 + -6.6076495126455570e-01 4.8805509755572973e-01 4.9044718109972379e-02 + -9.8435422828348595e-01 6.8378214664134684e-01 7.6826237678957826e-02 + -1.3155896961849529e+00 8.6594320398310176e-01 9.7618120108445838e-02 + -1.6359583518158607e+00 1.0438938184431243e+00 9.7103669158010220e-02 + -1.9250269194752319e+00 1.2165329371997275e+00 6.4535862621139417e-02 + -2.1767299564982272e+00 1.3765557148049139e+00 -5.1497346064289240e-03 + -2.3895258949213911e+00 1.5192434577192511e+00 -1.1066564234611453e-01 + -2.5568718021267003e+00 1.6488351937102921e+00 -2.4792628965538183e-01 + -2.6748838147527518e+00 1.7791364156432639e+00 -4.1571997704000979e-01 + -2.7539821179399029e+00 1.9301331215972517e+00 -6.1337898387572243e-01 + -2.8243493872261167e+00 2.1127359870509697e+00 -8.4377574638320574e-01 + -2.9199136939697605e+00 2.2711953696253051e+00 -1.1155714409325048e+00 + -3.0256735582016745e+00 2.2682902536557434e+00 -1.3991766630001186e+00 + -3.1016924508049875e+00 2.0305413384523914e+00 -1.6423710832556480e+00 + -3.1666536433132775e+00 1.5902460116944872e+00 -1.8741864012521390e+00 + -3.2902797932005932e+00 1.0229333820213697e+00 -2.1663385097402017e+00 + -3.5352787998935584e+00 4.7248322682134392e-01 -2.4650752827281091e+00 + -3.8228607358941051e+00 2.0639446402998862e-01 -2.5542647272451835e+00 + id 14095 + loc 7.0395553112030029e-01 3.9811921119689941e-01 373 + blend 0.0000000000000000e+00 + interp 3.8803336515377218e-01:2.5429100571631663e-01:9.4324992767259919e-02:3.4137537635283077e-01:9.0814648049870261e-01:2.3280061863522156e-01:1.4706322366744460e+00:2.4985793363603148e-01:2.0220417898983092e+00:2.2896298645577692e-01:2.8867726392100659e+00:3.8802948482012067e-01:3.1526553374407991e+00 + CVs 20 + 3.3136946760825359e-01 4.2966190969184509e-01 1.4566892266689321e-02 + 6.9688860763567728e-01 8.1999010550929075e-01 4.3579888499953118e-02 + 1.0711348808916916e+00 1.1346598741383247e+00 9.7348449823593697e-02 + 1.3961352411282637e+00 1.4192634312590788e+00 1.5179622990722896e-01 + 1.6226951378273193e+00 1.6272475312886421e+00 1.0060681521792925e-01 + 1.8434699569371567e+00 1.7670319180739389e+00 2.0833173927999105e-02 + 2.1308487202443898e+00 1.9804937207030500e+00 -2.4473122548639425e-03 + 2.4618373889990268e+00 2.2992362290115906e+00 5.4769564080966338e-02 + 2.7818832823550075e+00 2.6931406553953172e+00 2.0581459503461275e-01 + 3.0564347267100338e+00 3.1075149882888740e+00 4.4714062739348193e-01 + 3.2823824974193703e+00 3.4892937554299581e+00 7.7377568661949025e-01 + 3.4649412341530956e+00 3.7958634285639179e+00 1.2003546606781801e+00 + 3.5956026991234804e+00 3.9669456743881879e+00 1.7314546216520805e+00 + 3.6558950247925646e+00 3.9382090706927828e+00 2.3179714718057540e+00 + 3.6465049522902726e+00 3.6868488842422451e+00 2.8437648913430662e+00 + 3.6743933656903227e+00 3.3751794579127141e+00 3.0938861618192579e+00 + 3.7993558556499969e+00 3.3768602882718408e+00 3.0428610562301808e+00 + 3.8499087020306884e+00 3.5482777355614048e+00 3.0075610152114534e+00 + 4.1040744731470955e+00 3.2944000931826172e+00 3.0694499567186369e+00 + id 14096 + loc 7.7921235561370850e-01 6.1294045299291611e-02 396 + blend 0.0000000000000000e+00 + interp 5.0167002294399432e-01:3.2544629811798098e-01:5.8756996173391440e-01:4.5614634663302639e-01:1.0024700535582582e+00:1.6980747616879596e-01:1.9920769750964764e+00:5.0166500624376487e-01:2.5148158221189933e+00:3.6073415096867317e-01:3.1937198863952698e+00:3.7474730041287935e-01:3.9559737056134807e+00 + CVs 20 + -6.4081449676515323e-01 2.5284333082232874e-01 4.3297322056413268e-01 + -1.1395876593682228e+00 3.9666634067423701e-01 8.2695317475004027e-01 + -1.6041162978239190e+00 4.9770275662811669e-01 1.2315521613070672e+00 + -2.0798177977648686e+00 5.7062165204384629e-01 1.6745673828064525e+00 + -2.5509906515644407e+00 6.0128973628520133e-01 2.1479516644977057e+00 + -2.9968606850119679e+00 5.7907400174471801e-01 2.6411499203469058e+00 + -3.3997275734438923e+00 4.9601629059268904e-01 3.1396049190292503e+00 + -3.7502859448735908e+00 3.4408748618345419e-01 3.6227968831362309e+00 + -4.0386817241073070e+00 1.2075779280214682e-01 4.0670846575526136e+00 + -4.2476183179117744e+00 -1.6100168538829163e-01 4.4498078332119420e+00 + -4.3739234013987085e+00 -4.7341445373125035e-01 4.7536447214562738e+00 + -4.4482942175604574e+00 -7.9334077805577463e-01 4.9748306139767893e+00 + -4.5106546514318442e+00 -1.1145272526276160e+00 5.1223439140096465e+00 + -4.5824251921143064e+00 -1.4352120604774177e+00 5.2065898727527093e+00 + -4.6708602083111952e+00 -1.7526596394471214e+00 5.2366800901125057e+00 + -4.7767960977414585e+00 -2.0659171689639129e+00 5.2209089560598230e+00 + -4.8957535363699520e+00 -2.3668513408795264e+00 5.1643089370026960e+00 + -5.0226957378634811e+00 -2.6429404795462008e+00 5.0728565309157112e+00 + -5.1452831693720027e+00 -2.9434045281076937e+00 4.9653701485045074e+00 + id 14097 + loc 7.1001881361007690e-01 9.9301481246948242e-01 412 + blend 0.0000000000000000e+00 + interp 3.7694687274091854e-01:3.7694310327219116e-01:4.5226480847984085e-02:3.5023599771970382e-01:8.9809088220710254e-01:3.2927888943888839e-01:1.5647369130100084e+00:1.2680398054819381e-01:2.4337570891111691e+00:3.3528096092451809e-01:3.6160346147425679e+00 + CVs 20 + 8.8472486029786979e-01 1.7991977810312609e-01 -1.6433568971277585e-01 + 1.4508695852167761e+00 2.0103201861079062e-01 -3.2770285789297782e-01 + 1.9412897750824847e+00 1.4885908526409752e-01 -4.9801250966363908e-01 + 2.4555465844174136e+00 5.2858054956934020e-02 -6.7887215414136870e-01 + 2.9779833440440999e+00 -9.2486525751306892e-02 -8.6359367263067222e-01 + 3.4938894450566385e+00 -2.8551786042138450e-01 -1.0437984427929350e+00 + 3.9893679591607976e+00 -5.1968148914698675e-01 -1.2171871373628098e+00 + 4.4533577748960740e+00 -7.8497348935954725e-01 -1.3837345758388697e+00 + 4.8803606492464366e+00 -1.0698238720834907e+00 -1.5429712474236448e+00 + 5.2673734605928502e+00 -1.3621009425377277e+00 -1.6924146405245870e+00 + 5.5935759150157311e+00 -1.6460174342478253e+00 -1.8335109356945238e+00 + 5.8191854105874716e+00 -1.8983747146075580e+00 -1.9787460665054346e+00 + 5.9509834351299791e+00 -2.1076081275445402e+00 -2.1349037918033194e+00 + 6.0547840520651581e+00 -2.2998979829265105e+00 -2.2959201772385605e+00 + 6.1696573195676807e+00 -2.5010159464646096e+00 -2.4556200533711818e+00 + 6.2939579088426933e+00 -2.7077400414394490e+00 -2.6064568174487559e+00 + 6.4234571839578578e+00 -2.9171516220218314e+00 -2.7456254644390077e+00 + 6.5654335051458670e+00 -3.1495372351918332e+00 -2.8803391954594542e+00 + 6.7822649046889065e+00 -3.5090921109425688e+00 -3.0381847520436569e+00 + id 14098 + loc 8.0149954557418823e-01 7.4188441038131714e-02 1069 + blend 0.0000000000000000e+00 + interp 5.1277793465871413e-01:3.1254363561939824e-01:6.3826474934105981e-02:4.3476999969653946e-01:9.3762320429960855e-01:4.4627299514879337e-01:1.1644842389549401e+00:5.0344138489737167e-01:1.9558426912899236e+00:5.1277280687936755e-01:2.1097926209223927e+00:3.7492530709427668e-01:2.6053827577094713e+00:2.9112587895643033e-01:3.0833886111794406e+00 + CVs 20 + 2.3868151008366034e-04 2.6141628880393880e-01 2.7604119568464758e-01 + -6.4005013419760559e-02 4.8938643787057512e-01 5.3755361862243800e-01 + -1.8416547111569981e-01 6.9972262882718694e-01 7.8400160009799813e-01 + -3.5794136243091801e-01 9.0227853874963415e-01 1.0025378301171464e+00 + -5.8030109982880484e-01 1.1208562271313962e+00 1.1851931736213825e+00 + -8.0592512616533130e-01 1.4097759397321026e+00 1.3433315111982291e+00 + -9.4509771892465610e-01 1.7905987377123422e+00 1.4952235369390976e+00 + -9.4949134545118308e-01 2.2064827921428773e+00 1.6642100452329682e+00 + -8.3201324338927440e-01 2.5852167760136542e+00 1.8833670414507391e+00 + -6.2551413286262503e-01 2.8428661458691145e+00 2.1804138961372872e+00 + -3.9349218744696435e-01 2.9070636779268977e+00 2.5355228022129821e+00 + -1.9470598552662932e-01 2.7973128243092882e+00 2.8889534603446503e+00 + -4.9112102254946111e-02 2.5712836821381870e+00 3.2014753667041624e+00 + 2.6955081391061730e-02 2.2891870945571315e+00 3.4483077760336878e+00 + 3.6943636813842273e-02 2.0106565499841889e+00 3.6281612675873460e+00 + 1.7379885949138085e-03 1.7483968955557858e+00 3.7484170810268957e+00 + -6.5796922089494503e-02 1.4876119110812358e+00 3.8094448171247928e+00 + -1.4875647934024938e-01 1.2370212736217532e+00 3.8256803732303686e+00 + -1.7307348004737699e-01 1.0667697305544446e+00 3.8625171416474569e+00 + id 14099 + loc 7.7286824584007263e-02 7.7010500431060791e-01 380 + blend 0.0000000000000000e+00 + interp 4.9458114057195351e-01:2.8390425551407278e-01:8.5443026025450841e-02:4.7319346208272728e-01:9.1205249278097134e-01:3.5739299573391015e-01:1.2295230750773194e+00:4.9457619476054782e-01:1.8783233524215297e+00:2.8336911115981622e-01:2.5614718190229122e+00:2.9952176402697828e-01:3.3289022514728552e+00 + CVs 20 + -3.7877580057941507e-01 2.5984103121765512e-01 -3.1884293602148162e-01 + -7.2529810684788898e-01 4.3934276064988420e-01 -5.4104263742096792e-01 + -1.0672232145519629e+00 5.7864645577872376e-01 -7.3257611230495878e-01 + -1.4145924293939014e+00 7.0416253049988986e-01 -9.2809218856944609e-01 + -1.7562820283217868e+00 8.2714623890912309e-01 -1.1352360167772160e+00 + -2.0783908439930792e+00 9.5383669371218094e-01 -1.3604367578865058e+00 + -2.3759491088407039e+00 1.0841601134478014e+00 -1.6114122639534214e+00 + -2.6471908270943656e+00 1.2123323388318399e+00 -1.8971744779878887e+00 + -2.8841029206420181e+00 1.3275953428532841e+00 -2.2244254259247391e+00 + -3.0785050653506234e+00 1.4172773880511607e+00 -2.5924092589029120e+00 + -3.2319974237928575e+00 1.4770425528649953e+00 -2.9963369060913227e+00 + -3.3547814444776023e+00 1.5060969932666857e+00 -3.4357770386169206e+00 + -3.4498689361209536e+00 1.4781483039153029e+00 -3.9070445346903035e+00 + -3.4923006621635331e+00 1.3400113003047265e+00 -4.3777420032430232e+00 + -3.4506534072734611e+00 1.0742204624334177e+00 -4.7952513080773560e+00 + -3.3254525512888842e+00 7.1925732147604959e-01 -5.1611578424370821e+00 + -3.1454844098672599e+00 2.9726507046247841e-01 -5.5386153739699964e+00 + -2.9891704523250020e+00 -1.8822550065435628e-01 -5.9795762897326705e+00 + -2.9819124829333306e+00 -4.6159439954834625e-01 -6.3131040163350978e+00 + id 14100 + loc 6.3108369708061218e-02 8.8409222662448883e-02 1079 + blend 0.0000000000000000e+00 + interp 4.4186342441849835e-01:2.3229699497915168e-01:3.9491706423355122e-01:2.6354134078371710e-01:1.4356798912503494e+00:4.4185900578425419e-01:1.9780552058994012e+00:2.9648722945620509e-01:2.6780568882382596e+00:4.1053708997677524e-01:3.0964132758497054e+00:3.1685728068649122e-01:3.9008658754247425e+00 + CVs 20 + 4.3862294655554190e-01 4.7144173399715583e-01 -5.1548139353983696e-02 + 6.9777617927671165e-01 8.4299481172366497e-01 -1.4725460758699832e-01 + 8.9206881730903020e-01 1.1576414460463642e+00 -2.6201899502972475e-01 + 1.0636970947383348e+00 1.4300264780595207e+00 -3.8562927519572726e-01 + 1.2081659562999387e+00 1.6501878385985318e+00 -5.1220708889887212e-01 + 1.3261338185904308e+00 1.8092453582639796e+00 -6.2933159557030882e-01 + 1.4309310357652274e+00 1.9048755754164861e+00 -7.1252992444614660e-01 + 1.5501701566208499e+00 1.9675637241589072e+00 -7.3390753708294332e-01 + 1.6826725753894807e+00 2.0592632834516236e+00 -7.2640297645346008e-01 + 1.7829644913395020e+00 2.1624424315024484e+00 -7.7072352888242623e-01 + 1.8440619326643406e+00 2.2220617803374889e+00 -8.8155763536286824e-01 + 1.8827676288761146e+00 2.2272153503690801e+00 -1.0449387223799207e+00 + 1.9073354852776787e+00 2.1763819684589949e+00 -1.2606908308056060e+00 + 1.9126101762981973e+00 2.0546536726864306e+00 -1.5380711421472566e+00 + 1.8793407535344522e+00 1.8218028553341854e+00 -1.8737341545803547e+00 + 1.8026261953271026e+00 1.3880341148179918e+00 -2.1729085511722515e+00 + 1.7180934092339526e+00 6.9097951689405612e-01 -2.2220497640523971e+00 + 1.6395360271858381e+00 -9.1632881455662396e-02 -1.8332105700918306e+00 + 1.6490320963096428e+00 -2.9893600480231747e-01 -1.5750710210728880e+00 + id 14101 + loc 6.9912582635879517e-01 6.5524572134017944e-01 402 + blend 0.0000000000000000e+00 + interp 4.2468026658063923e-01:3.2007291213816241e-01:5.2207438554790708e-02:4.2467601977797342e-01:8.8949690386882641e-01:2.9328960122107112e-01:1.7075378859068966e+00:3.0330285879788926e-01:2.2257115363538502e+00:3.5390758935647054e-01:2.9353919171901048e+00:2.3986888121772168e-01:3.5810290869645955e+00 + CVs 20 + -2.9951828185394921e-02 2.5816547679447144e-01 -1.3370377966377003e-01 + -8.2296325288785582e-02 5.2051450331351712e-01 -2.7114093424471719e-01 + -1.2237699472581931e-01 7.9247047047509545e-01 -4.1345327911281737e-01 + -1.3386371019478893e-01 1.0715006591824467e+00 -5.5586735142483890e-01 + -1.3462004269303279e-01 1.3680804259445707e+00 -6.9832670935618479e-01 + -1.7702815441294667e-01 1.7000531619188697e+00 -8.4460001740853541e-01 + -3.1610217703245025e-01 2.0249889582566292e+00 -9.9447711493628410e-01 + -2.2526832227014459e-01 2.2843140076984039e+00 -1.2962330962536783e+00 + -3.7225248393288368e-01 2.6224880867808129e+00 -1.5733894091317455e+00 + -8.3266257183480230e-01 2.8915178880439210e+00 -1.8181630044937287e+00 + -1.3336366688731336e+00 2.9708209253494258e+00 -2.2316298516037869e+00 + -1.6464480011806200e+00 2.8417639261156298e+00 -2.6935347917423282e+00 + -1.7419210598829147e+00 2.5952103174178980e+00 -3.1068969450877693e+00 + -1.7401365787688192e+00 2.2893569917089764e+00 -3.4710883853571000e+00 + -1.7788426994536719e+00 1.9613548511242502e+00 -3.8158084953296019e+00 + -1.9579683578741642e+00 1.6656052274202131e+00 -4.1634646353777613e+00 + -2.2848255910780022e+00 1.4358793682034876e+00 -4.5327041491805016e+00 + -2.6955038658703594e+00 1.2494906464656754e+00 -4.9572858286563912e+00 + -3.1826993580378615e+00 1.0548361318497825e+00 -5.5000743620631720e+00 + id 14102 + loc 5.4164808988571167e-01 5.4230356216430664e-01 400 + blend 0.0000000000000000e+00 + interp 3.8769824309525797e-01:3.7894471928052181e-01:6.5410869256694837e-01:3.0993192168107325e-01:1.4309616922529627e+00:3.8769436611282704e-01:1.9904812109854961e+00:3.6168578921872985e-01:2.2999604727453078e+00:2.8774553465774771e-01:3.0353575812980997e+00:3.1028601985279086e-01:3.9457564355757864e+00 + CVs 20 + -2.0756307275765740e-01 1.3188504549114347e-01 -2.3714427603653394e-02 + -4.1825011744955271e-01 2.9624574501691736e-01 -8.6878430580180493e-02 + -6.1960742554054427e-01 4.7339395419023522e-01 -1.8986903431513114e-01 + -8.0747530350438557e-01 6.4684143421361129e-01 -3.2942880567869220e-01 + -9.9009929526560514e-01 8.1620085877359594e-01 -5.0098682852711374e-01 + -1.1608476514992547e+00 9.9087840540546623e-01 -6.9979908021912851e-01 + -1.2935309439800484e+00 1.1758888868364936e+00 -9.2028310974776839e-01 + -1.3772892227132492e+00 1.3743391146042363e+00 -1.1600400669658866e+00 + -1.4185315686705002e+00 1.5843461562696877e+00 -1.4245720591639843e+00 + -1.4240981847857650e+00 1.7948662553475110e+00 -1.7214587060061939e+00 + -1.3956973560080836e+00 1.9929096555204708e+00 -2.0555692191655686e+00 + -1.3318934436693004e+00 2.1657623116269020e+00 -2.4293902449190083e+00 + -1.2289382196296541e+00 2.2932678712952246e+00 -2.8398181139334882e+00 + -1.0817579663727699e+00 2.3514475534424069e+00 -3.2698920792615462e+00 + -8.8441063713715851e-01 2.3259436150914801e+00 -3.6910673543898804e+00 + -6.3008623547865039e-01 2.2126024228722807e+00 -4.0717076785718920e+00 + -3.2126081209044766e-01 2.0144791955901984e+00 -4.3703623819208177e+00 + 1.9366630995436840e-02 1.7555087874172255e+00 -4.5325372163438047e+00 + 3.6737060239946540e-01 1.4655259910914995e+00 -4.5045381203574157e+00 + id 14103 + loc 1.3771910965442657e-01 4.4712874293327332e-01 403 + blend 0.0000000000000000e+00 + interp 4.0032738013929525e-01:2.6458779445184188e-01:3.6507837189983072e-02:3.6299078295576798e-01:7.7839766442468217e-01:2.6422003581957315e-01:1.3109222639406282e+00:4.0032337686549385e-01:2.0511873085158210e+00:2.6056403190379596e-01:2.9583386655373816e+00:3.1760951552809469e-01:3.5262331476195756e+00 + CVs 20 + -1.4802865440677382e-01 3.1554745681784752e-01 -4.0364459601184635e-02 + -3.0042907096524185e-01 6.0618618056389839e-01 -4.6726150904616903e-02 + -4.6718786433852100e-01 8.8146577021275441e-01 -3.0938521554663589e-02 + -6.5498472154800425e-01 1.1448910977724558e+00 1.0870497229821807e-02 + -8.6348513130855742e-01 1.3911615180586341e+00 9.0358450072949958e-02 + -1.0873943480356656e+00 1.6113908731750526e+00 2.2067610196737364e-01 + -1.3153233810029630e+00 1.7913652986850734e+00 4.1269823252748450e-01 + -1.5299029835463689e+00 1.9120798690283412e+00 6.6950800523512743e-01 + -1.7095536518580174e+00 1.9541205436347144e+00 9.8090376338540974e-01 + -1.8352815513592233e+00 1.9063695845348845e+00 1.3220508893295930e+00 + -1.8994463910921742e+00 1.7707056719798790e+00 1.6588353392912376e+00 + -1.9133778505653447e+00 1.5624865258707612e+00 1.9563813964808012e+00 + -1.9005489491711822e+00 1.3034069098307268e+00 2.1970978709441518e+00 + -1.8758626040645550e+00 1.0088854018517652e+00 2.3802763189296319e+00 + -1.8461337271608307e+00 6.9112275055003547e-01 2.5117951320207315e+00 + -1.8235995156021705e+00 3.6277267145684489e-01 2.6254793028421766e+00 + -1.8297357398523615e+00 3.0809284654167879e-02 2.8028343470684063e+00 + -1.8864238783826899e+00 -2.8343499020009078e-01 3.0961053435096222e+00 + -1.9124373451134660e+00 -6.1150964662964413e-01 3.3151743865149368e+00 + id 14104 + loc 6.1960911750793457e-01 8.6598026752471924e-01 401 + blend 0.0000000000000000e+00 + interp 5.0157355342175680e-01:3.8944666003055456e-01:1.8754450917700261e-01:5.0156853768622256e-01:8.6774154610468768e-01:3.6961207500518312e-01:1.2338872854492311e+00:4.5479056160066200e-01:1.8883203698768685e+00:3.9820298627113160e-01:2.1968087686793463e+00:3.7193621929752302e-01:3.0247471514501321e+00:4.3477202665259257e-01:3.7785421412838502e+00 + CVs 20 + 2.0515227487921742e-02 3.3529134174851455e-01 -3.5210709650713246e-01 + 3.2285190755038773e-02 6.8269334292113371e-01 -7.0549219801072438e-01 + 3.9397827406172925e-02 1.0263950372623634e+00 -1.0742239367909734e+00 + 4.0452826410986520e-02 1.3387194273487404e+00 -1.4743176888516172e+00 + 1.4570337832554903e-02 1.5989224709556042e+00 -1.9136176821673818e+00 + -8.2244203580109310e-02 1.7993121987223488e+00 -2.3770371155863899e+00 + -2.8474097594365300e-01 1.9280472246462970e+00 -2.8220240376540899e+00 + -5.8682300443550595e-01 1.9677545371097289e+00 -3.1972548505496881e+00 + -9.4543526814542800e-01 1.9138618603020927e+00 -3.4686707566546549e+00 + -1.3088701911661693e+00 1.7817960022230457e+00 -3.6369136263437434e+00 + -1.6396043890038476e+00 1.5901595514149931e+00 -3.7276302445226643e+00 + -1.9167365240296106e+00 1.3521669041906312e+00 -3.7723727086816710e+00 + -2.1318759020713158e+00 1.0829832913357706e+00 -3.7883018819246459e+00 + -2.2889576779165246e+00 8.0371799154838541e-01 -3.7737133059727328e+00 + -2.4124330173499797e+00 5.2472359694567527e-01 -3.7353452662883417e+00 + -2.5613859412952729e+00 2.1661072341790621e-01 -3.6982064990397419e+00 + -2.8025204613225827e+00 -1.7006182695539762e-01 -3.6969343689234360e+00 + -3.1079709385858014e+00 -5.9897417361836003e-01 -3.7741101466183595e+00 + -3.2547373247727558e+00 -8.5953599340230735e-01 -3.8356299637214701e+00 + id 14105 + loc 8.8026523590087891e-01 6.0536986589431763e-01 379 + blend 0.0000000000000000e+00 + interp 4.8324510336128107e-01:4.2415502891069357e-01:4.8566317780711965e-02:3.4188411715709638e-01:9.7115668581861170e-01:4.7706261242790043e-01:1.4683664064590336e+00:4.8324027091024746e-01:2.0267996371248906e+00:4.5344176322137647e-01:3.0147590031716915e+00:3.8252792494673060e-01:3.5926751651420612e+00 + CVs 20 + -3.4767998495940727e-01 2.3338611293681491e-01 2.1441929959616690e-01 + -6.6633412851953933e-01 4.2867911368376133e-01 4.2686145705829021e-01 + -9.8391665194730771e-01 5.9374367752606871e-01 6.6783189581581859e-01 + -1.3222286981429470e+00 7.5295050857681500e-01 9.4984419282462640e-01 + -1.6775903736420612e+00 9.2447528354114472e-01 1.2487413594331005e+00 + -2.0463628104042200e+00 1.1072358351886185e+00 1.5327975879979827e+00 + -2.4327561550937453e+00 1.2896067897588679e+00 1.7797839892085014e+00 + -2.8372121044477456e+00 1.4624632848800054e+00 1.9774415692640355e+00 + -3.2447519283441864e+00 1.6207319442758925e+00 2.1203425595729222e+00 + -3.6286670581806115e+00 1.7640092877054563e+00 2.2120868134087184e+00 + -3.9717647228255801e+00 1.9003405564265463e+00 2.2646271538359497e+00 + -4.2877024154913030e+00 2.0404452156808697e+00 2.2884354013156396e+00 + -4.6155898041635091e+00 2.1715912079856716e+00 2.2857442618209456e+00 + -4.9695490637636084e+00 2.2423139310822879e+00 2.2607703431620894e+00 + -5.3030116488485763e+00 2.2190529002011909e+00 2.2306204123225046e+00 + -5.5579299275514842e+00 2.1391315371925312e+00 2.2028293346476615e+00 + -5.6939907015763493e+00 2.0678591028796030e+00 2.1495236810800988e+00 + -5.7391050339293503e+00 2.0164311712688869e+00 2.0557430613978367e+00 + -6.0047246225088315e+00 1.9558470152943532e+00 2.0898742263539281e+00 + id 14106 + loc 1.2941126525402069e-01 2.5531676411628723e-01 395 + blend 0.0000000000000000e+00 + interp 4.8172507119586222e-01:3.1898472347096374e-01:1.3395172200137528e-02:4.8172025394515028e-01:5.4309586312616998e-01:3.1069309719781990e-01:1.1902969203568008e+00:3.2009372854024915e-01:2.0000114196696246e+00:3.2510841525471973e-01:2.7374893223513022e+00:2.7614052683013818e-01:3.1893627783907141e+00 + CVs 20 + -2.7791781631034046e-01 1.2185092034639315e-01 -1.3248567839237582e-01 + -5.3693328940562102e-01 2.3809813708784280e-01 -2.5073411364892195e-01 + -7.9082115554453192e-01 3.5731087302720249e-01 -3.7184852302970683e-01 + -1.0464161222237105e+00 4.8378756360236219e-01 -5.0637591390884173e-01 + -1.2998397734931930e+00 6.1282271259254117e-01 -6.5811218676233674e-01 + -1.5481697636643064e+00 7.3840491594953450e-01 -8.2893172935344972e-01 + -1.7943480826174767e+00 8.5868344748530523e-01 -1.0213710465294075e+00 + -2.0442035489202404e+00 9.7249050400690162e-01 -1.2405455034063153e+00 + -2.2931112079972440e+00 1.0698261407859420e+00 -1.4882969798444861e+00 + -2.5264062580413817e+00 1.1339555456745580e+00 -1.7546496586533706e+00 + -2.7414573038485130e+00 1.1478791247763787e+00 -2.0238369041648694e+00 + -2.9529342130137701e+00 1.0914785062568713e+00 -2.2851118465309290e+00 + -3.1676414121341558e+00 9.4944374091337735e-01 -2.5289733608143310e+00 + -3.3738975361904249e+00 7.2584888858923358e-01 -2.7427203816269516e+00 + -3.5608312093013255e+00 4.3775931674388868e-01 -2.9147893818374797e+00 + -3.7285600484399413e+00 1.0015567479819310e-01 -3.0389088345768323e+00 + -3.8764839010018139e+00 -2.7805497764551079e-01 -3.1121998480825219e+00 + -3.9988500050321627e+00 -6.8911618195924262e-01 -3.1360501557441558e+00 + -4.1298353719639813e+00 -1.1584101848841395e+00 -3.1500071494426631e+00 + id 14107 + loc 4.7134011983871460e-01 6.9574403762817383e-01 378 + blend 0.0000000000000000e+00 + interp 3.6292067592613836e-01:3.5860667418838216e-01:5.6087326758629286e-01:3.6291704671937913e-01:1.0016825341959339e+00:3.2846589397424769e-01:1.6163255771870766e+00:3.3634481570620278e-01:2.0035048405275693e+00:3.0419661917800511e-01:2.5338052751319076e+00:2.6159454564423379e-01:3.0351221542361668e+00:3.2094894838202909e-01:3.7854942490591554e+00 + CVs 20 + 6.1635329920139093e-01 3.1612062012576414e-01 8.2183700929555459e-02 + 1.1601236004507243e+00 5.1982358352467561e-01 1.0069848993778763e-01 + 1.6897253524503377e+00 6.6242454730712264e-01 9.0802485642249631e-02 + 2.2388050966568365e+00 7.8705058363816838e-01 8.5255580257614261e-02 + 2.7997248677085032e+00 9.0453124413116093e-01 1.1079712790510177e-01 + 3.3547799905039857e+00 1.0020060840732492e+00 1.8741084285618681e-01 + 3.8905801827681668e+00 1.0594528314534286e+00 3.2562846695508274e-01 + 4.3913891017720257e+00 1.0612177962824354e+00 5.2527877383941568e-01 + 4.8292848257034784e+00 9.9854659868329776e-01 7.6724737609371252e-01 + 5.1754947627855525e+00 8.7565020693978157e-01 1.0138910351523034e+00 + 5.4155590166152106e+00 7.1239426318091859e-01 1.2269351750115278e+00 + 5.5529818201108316e+00 5.3779882656922151e-01 1.3854041549398273e+00 + 5.6124272870525473e+00 3.7438359419583911e-01 1.4968268758500078e+00 + 5.6404350398001419e+00 1.9598808537541190e-01 1.5974897953613818e+00 + 5.6743498869454942e+00 -7.1158401441667074e-02 1.7167293966946455e+00 + 5.7264554050907313e+00 -4.4806787226815414e-01 1.8595665513347728e+00 + 5.8018922650960487e+00 -8.8026314801715655e-01 2.0263648275076798e+00 + 5.9122794696289933e+00 -1.3069370297925187e+00 2.2060764226188043e+00 + 6.0631683731766062e+00 -1.6464126066840756e+00 2.3478229603717660e+00 + id 14108 + loc 8.7926810979843140e-01 9.6317869424819946e-01 393 + blend 0.0000000000000000e+00 + interp 5.0788889196934739e-01:3.5825352804105470e-01:6.4452538018600070e-04:4.6127706232642318e-01:6.4176070190029799e-01:3.4609673527386919e-01:1.0864663593905073e+00:2.4274826070519651e-01:2.0017958224226318e+00:5.0788381308042774e-01:2.7497866052429258e+00:3.6252230706702099e-01:3.1836403398995698e+00 + CVs 20 + -2.3649020775331886e-01 3.0943657825232146e-01 -1.7209230829155309e-01 + -4.6665597418551819e-01 6.2767075289829122e-01 -3.5677049090982171e-01 + -7.0976827439087042e-01 9.4532468327416308e-01 -5.2567896310509310e-01 + -9.7703492952740678e-01 1.2463951985907653e+00 -6.7460054719496243e-01 + -1.2771957761058434e+00 1.5133077399351897e+00 -8.1340148593157058e-01 + -1.6105268899622602e+00 1.7239639962256383e+00 -9.5524757326030241e-01 + -1.9699421787340068e+00 1.8578471987342764e+00 -1.1102246375439524e+00 + -2.3409742284390731e+00 1.9011642107398194e+00 -1.2811319793649365e+00 + -2.7033994074178991e+00 1.8529935273685543e+00 -1.4653090393052368e+00 + -3.0414797605175443e+00 1.7264450072101030e+00 -1.6592196139004551e+00 + -3.3463518203514999e+00 1.5406330632464151e+00 -1.8623244033120940e+00 + -3.6080783398152736e+00 1.3151123587989848e+00 -2.0790298833439746e+00 + -3.8142982095681499e+00 1.0612522808558864e+00 -2.3140051915462978e+00 + -3.9573558958796733e+00 7.8152060639725218e-01 -2.5639971492449600e+00 + -4.0445293797745769e+00 5.0844661568841598e-01 -2.8300650185721321e+00 + -4.0973555354601459e+00 3.7112082658221057e-01 -3.1447920413517441e+00 + -4.0998768635164842e+00 5.9444577039866919e-01 -3.4636417333428331e+00 + -4.0297990097756040e+00 9.7355922539709505e-01 -3.6361024796334998e+00 + -4.0542172144770170e+00 1.0621617049521634e+00 -4.0091686648162650e+00 + id 14109 + loc 2.8158670663833618e-01 6.9698649644851685e-01 396 + blend 0.0000000000000000e+00 + interp 4.6168649336625933e-01:4.6168187650132569e-01:2.0234072166094341e-01:3.2577433757194812e-01:9.7265124730619823e-01:3.5661916149559675e-01:1.5262560431094805e+00:3.4310463601341901e-01:2.0526945302217938e+00:3.2141518310270628e-01:2.9617110486001548e+00:3.1630041938283232e-01:3.7404929569699332e+00 + CVs 20 + 9.2194856964330074e-01 1.5439020506153533e-01 -3.5044388772974056e-01 + 1.5505853152765818e+00 1.2169697295143372e-01 -6.2978882680506576e-01 + 2.1219868434133464e+00 3.3317445362460729e-02 -8.7486241247925900e-01 + 2.7068780308389986e+00 -7.3821756546067707e-02 -1.0935886435949436e+00 + 3.3026404070005144e+00 -2.0573686568995087e-01 -1.2871430438268154e+00 + 3.9048244106249381e+00 -3.7003380709041367e-01 -1.4650341087773855e+00 + 4.5023194944107932e+00 -5.7757029129732018e-01 -1.6383105583774780e+00 + 5.0740460169423303e+00 -8.4209714190472007e-01 -1.8099337680831398e+00 + 5.5933733458797530e+00 -1.1745442706692673e+00 -1.9771679877379067e+00 + 6.0305289807211802e+00 -1.5798521853701271e+00 -2.1473735249787396e+00 + 6.3603087840457526e+00 -2.0498495673169788e+00 -2.3251375171724340e+00 + 6.5812630526860838e+00 -2.5657856905018726e+00 -2.4976176495335629e+00 + 6.7073537315255951e+00 -3.1061993470634417e+00 -2.6472348441722020e+00 + 6.7490461314893571e+00 -3.6468549263285523e+00 -2.7706582885222382e+00 + 6.7125580224879924e+00 -4.1627472650121007e+00 -2.8702011859477130e+00 + 6.6051775660367280e+00 -4.6342966855603036e+00 -2.9343851075645979e+00 + 6.4459071662314802e+00 -5.0498070980056200e+00 -2.9545240414681455e+00 + 6.2743749024353228e+00 -5.4180718120980504e+00 -2.9531315577849253e+00 + 6.2293646773786957e+00 -5.8382128833015354e+00 -3.0109260755483573e+00 + id 14110 + loc 1.0145467519760132e-01 5.9582918882369995e-01 412 + blend 0.0000000000000000e+00 + interp 4.2870546922929087e-01:3.4720198455343765e-01:3.0493708505678341e-02:2.7098538159286539e-01:8.8967339906119369e-01:3.7104261911132919e-01:1.3414641022460247e+00:3.0001824284506595e-01:1.9765713119058321e+00:2.8264114556942199e-01:2.5360674669150693e+00:3.6982773239607802e-01:3.0220648967470711e+00:4.2870118217459857e-01:3.6685941019113124e+00 + CVs 20 + 6.4351778273761040e-01 2.0402057590130418e-01 -8.7475809907546220e-02 + 1.0696258738522899e+00 2.9064421405969282e-01 -1.6066738897997751e-01 + 1.4257038656344179e+00 3.3125298023953220e-01 -2.2115560827774242e-01 + 1.7906764509175375e+00 3.6923707283050000e-01 -2.6661522713990249e-01 + 2.1548689017164002e+00 4.0453053282138729e-01 -2.9984445466096227e-01 + 2.5097455734285519e+00 4.3740790551733461e-01 -3.2438968649456434e-01 + 2.8515942784166577e+00 4.6833632545036363e-01 -3.4234659756418540e-01 + 3.1808599967169062e+00 4.9594257002891651e-01 -3.5409177468829822e-01 + 3.4976801034003659e+00 5.1560586779193995e-01 -3.6027482103624708e-01 + 3.8012680365660820e+00 5.2228927745102116e-01 -3.6101605239595330e-01 + 4.0962224375615710e+00 5.1665258942639980e-01 -3.4400961157414806e-01 + 4.3962244061614602e+00 5.0698034979036821e-01 -2.7370316943002715e-01 + 4.7146882465868796e+00 4.8665950088028764e-01 -1.2693764922114170e-01 + 5.0467015170868299e+00 4.1839697858130931e-01 5.0887135330232591e-02 + 5.3674232115047973e+00 2.7791248498277343e-01 1.9290697901981613e-01 + 5.6572846302620343e+00 7.3211943313701511e-02 2.8542607135313813e-01 + 5.9054459867796147e+00 -1.7911395667889440e-01 3.4388356517433771e-01 + 6.0995243978879188e+00 -4.6165834586811449e-01 3.7139296458752358e-01 + 6.1110650629702015e+00 -7.5568243422648895e-01 2.2764929485625784e-01 + id 14111 + loc 9.7065702080726624e-02 2.9472336173057556e-01 380 + blend 0.0000000000000000e+00 + interp 2.9506524743111279e-01:2.9506229677863849e-01:8.6381433338642566e-03:2.5071535523204391e-01:9.7521380777702726e-01:2.5516115652748184e-01:2.0092520609418716e+00:2.5289514116861145e-01:3.0001007492426019e+00 + CVs 20 + -3.7942042736484016e-01 3.6253739033374732e-01 5.4452095675397549e-01 + -6.5267771689785148e-01 6.0938487336229652e-01 1.0013648846060239e+00 + -8.9440756864492910e-01 7.9280002035174424e-01 1.4394704523645818e+00 + -1.1399620878441448e+00 9.3835468284841816e-01 1.8858611051575476e+00 + -1.3994453007458798e+00 1.0482569649743199e+00 2.3341350943070047e+00 + -1.6830015857009182e+00 1.1184682647703481e+00 2.7803286531748777e+00 + -1.9993447921849015e+00 1.1380096578512759e+00 3.2232774799826869e+00 + -2.3557055315521214e+00 1.0945574475579689e+00 3.6571820151000680e+00 + -2.7558195062684412e+00 9.7756953639407196e-01 4.0683159299927185e+00 + -3.1910219918788303e+00 7.7853081529824486e-01 4.4415595700915631e+00 + -3.6337565611685925e+00 4.9068286032686492e-01 4.7654222398623922e+00 + -4.0456645959717212e+00 1.0924623094621744e-01 5.0254822085643482e+00 + -4.4033175299901481e+00 -3.6815828329585054e-01 5.2117635947327345e+00 + -4.7322833734038205e+00 -9.5018407009977679e-01 5.3486901521537078e+00 + -5.0876778824867426e+00 -1.6194483638929076e+00 5.4867108050255737e+00 + -5.4971108911291875e+00 -2.3214231132483447e+00 5.6941915022029397e+00 + -5.9238409752234951e+00 -2.9866157547736543e+00 6.0554225223153786e+00 + -6.3070452091103686e+00 -3.5672030906725998e+00 6.5589276087709614e+00 + -6.7299745938583024e+00 -4.1072686683728516e+00 6.8626438666083303e+00 + id 14112 + loc 1.3373845815658569e-01 9.8126184940338135e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7737071173027901e-01:3.3549565084486122e-01:5.5665252163243639e-01:4.3437772515871809e-01:1.0286110180338914e+00:1.2572075085028853e-01:1.9770754215382531e+00:3.5311330795049151e-01:2.7989352482524090e+00:4.7736593802316174e-01:3.0164049767437717e+00:4.1927434080701914e-01:3.9904999636121565e+00 + CVs 20 + 1.6691910468539350e-01 4.4473593883768314e-01 1.7257746975997740e-01 + 3.3955188078632514e-01 8.1419038516696096e-01 2.3781570297303548e-01 + 5.1480332807868656e-01 1.1546920167062833e+00 2.6554082771738841e-01 + 6.9083968870864643e-01 1.4719121256075347e+00 2.7433981680828934e-01 + 8.6643187261360599e-01 1.7533252869752050e+00 2.5960068912538237e-01 + 1.0352834493868639e+00 1.9818262476307296e+00 2.1356952528581064e-01 + 1.1877596650253537e+00 2.1466256065892475e+00 1.3347967458250942e-01 + 1.3179333925810506e+00 2.2498123938375443e+00 2.6068529964980436e-02 + 1.4261798068649574e+00 2.3018666069587095e+00 -9.9091300291685447e-02 + 1.5208980251272877e+00 2.3161111489230515e+00 -2.3861498200757414e-01 + 1.6140463852662927e+00 2.3007818105783389e+00 -3.9815052968641107e-01 + 1.7145667711702841e+00 2.2555036758585238e+00 -5.8564939301896091e-01 + 1.8277717640570972e+00 2.1744475186088024e+00 -8.0539956181761385e-01 + 1.9577584979841474e+00 2.0482886754352725e+00 -1.0561444357077652e+00 + 2.1090860592514131e+00 1.8536390683675681e+00 -1.3285339003384236e+00 + 2.2838369811284882e+00 1.5236654044495910e+00 -1.5871644883133644e+00 + 2.4672088438956510e+00 1.0036856486047570e+00 -1.7250068847893361e+00 + 2.6414781034791268e+00 4.3814947278637206e-01 -1.7004533337156325e+00 + 2.8291192768464883e+00 6.6566547096544637e-02 -1.7405803581409423e+00 + id 14113 + loc 6.9162446260452271e-01 8.2032161951065063e-01 402 + blend 0.0000000000000000e+00 + interp 3.5283796262273376e-01:3.5283443424310756e-01:2.5681588517425613e-01:3.2341766287680807e-01:1.0436108715145231e+00:3.0727159478524835e-01:2.0432576862539813e+00:3.0915736022063395e-01:3.0092752885007119e+00:3.0326134238146751e-01:3.8345151092725649e+00 + CVs 20 + -4.7436127792389635e-02 1.0084175259399986e-01 -1.5852411601155519e-01 + -6.8743365080285959e-02 2.0389531800508717e-01 -3.3158808056804834e-01 + -8.5140580578819930e-02 2.9813141477010352e-01 -5.1046168019110705e-01 + -1.0026849425018955e-01 3.7274239002988074e-01 -6.8285769056398860e-01 + -1.1564534338847460e-01 4.2820853007639970e-01 -8.4814124244846223e-01 + -1.2900145931182819e-01 4.6190590505103607e-01 -1.0031001458805564e+00 + -1.3679748679720100e-01 4.6913552566094374e-01 -1.1426308028063292e+00 + -1.4051020308314088e-01 4.4717016509702889e-01 -1.2639452356478280e+00 + -1.5046147219433864e-01 3.9486780843511782e-01 -1.3683093033955536e+00 + -1.9148692741934481e-01 3.0987935902756836e-01 -1.4593490614228404e+00 + -2.9863281685955678e-01 2.0301691746504691e-01 -1.5461260101123970e+00 + -4.6492021794648447e-01 1.0733555936567707e-01 -1.6307982801755010e+00 + -6.4421118046811365e-01 2.2755635014583053e-02 -1.6675617181917879e+00 + -8.2096664791245910e-01 -7.2289427916673754e-02 -1.5775124526939537e+00 + -9.6275221234238917e-01 -1.5956642875784233e-01 -1.3138872323101805e+00 + -1.0111038718581902e+00 -1.9979421872926154e-01 -9.2998567343837646e-01 + -9.3562463426272746e-01 -1.7900165888631792e-01 -5.0586306039725626e-01 + -7.1815250383899565e-01 -1.0561727131858037e-01 -9.8824941842228384e-02 + -7.8105745027428641e-01 -2.0510785807398518e-01 -4.9228899335035575e-02 + id 14114 + loc 9.6622550487518311e-01 9.7338700294494629e-01 373 + blend 0.0000000000000000e+00 + interp 5.9883876280701309e-01:3.4906595329647999e-01:3.1899829867540341e-01:5.9883277441938509e-01:9.7670958769248495e-01:5.0008777792322157e-01:1.2958195218405455e+00:2.4415161767590374e-01:1.9409363447109116e+00:3.4851910093212868e-01:2.7561688865905984e+00:4.5500748971834609e-01:3.0170786915751693e+00:5.3413931528609337e-01:3.7457954908626472e+00 + CVs 20 + -2.4464084126604063e-01 2.9693278356044805e-01 -1.3633987592288682e-01 + -5.0470697341333104e-01 5.9527088783080562e-01 -3.0761410921928622e-01 + -7.8293128542287893e-01 8.7989462438501986e-01 -4.9605784794455760e-01 + -1.0680508750650417e+00 1.1462620903164460e+00 -7.0099779587764388e-01 + -1.3429825446206713e+00 1.3888928692091391e+00 -9.3338363368205024e-01 + -1.5922265617922213e+00 1.5873180176297716e+00 -1.2012590443300484e+00 + -1.8066643612717519e+00 1.7204811404464944e+00 -1.5029162240446374e+00 + -1.9812405272162203e+00 1.7786083225737639e+00 -1.8243671351707231e+00 + -2.1116422004527200e+00 1.7573558115877395e+00 -2.1401530322588647e+00 + -2.1961568754432363e+00 1.6543240560707217e+00 -2.4137688076397663e+00 + -2.2330687398696778e+00 1.4744938408838872e+00 -2.5981918251739380e+00 + -2.2153835589369959e+00 1.2471446177070002e+00 -2.6448243774485145e+00 + -2.1532325888950421e+00 1.0385711830510433e+00 -2.5664132741961163e+00 + -2.1072210252737715e+00 8.6908704759776501e-01 -2.5036711216477272e+00 + -2.1401615243107965e+00 6.6411288319757333e-01 -2.5918107347898434e+00 + -2.2694882078973815e+00 4.0393952269823918e-01 -2.8419890170511426e+00 + -2.5007540765506597e+00 1.4739707087668052e-01 -3.2001614573737456e+00 + -2.8048820282051530e+00 -3.5571246235528209e-02 -3.5754866287787497e+00 + -2.9608750724888075e+00 -9.2450385115545597e-02 -3.7853501840542156e+00 + id 14115 + loc 4.8214459419250488e-01 3.9685219526290894e-01 400 + blend 0.0000000000000000e+00 + interp 3.6464600295998656e-01:3.3683020337920705e-01:5.3869645195614768e-02:3.5555621379853364e-01:9.1792432711832161e-01:3.0746174504718282e-01:1.2870860484940996e+00:3.2169743637453957e-01:1.9984318562056347e+00:3.5333083991311820e-01:2.8989137205224020e+00:3.6464235649995697e-01:3.5287759961076013e+00 + CVs 20 + -9.5995440232310256e-02 2.1140687005874670e-01 2.2472536583377753e-01 + -2.2457959445232079e-01 4.4575665479620313e-01 4.2833700091485138e-01 + -3.7972475449999743e-01 6.8915232677431748e-01 6.2047397139167626e-01 + -5.5929457629629220e-01 9.3424324328587716e-01 8.0394893325700534e-01 + -7.6028211765678466e-01 1.1787871967885004e+00 9.7814325188219509e-01 + -9.7326355628069972e-01 1.4223307742203439e+00 1.1448606843378162e+00 + -1.1912911211478705e+00 1.6662268670801390e+00 1.3085630056131008e+00 + -1.4164368160869474e+00 1.9103805071130924e+00 1.4739915531128469e+00 + -1.6570348120482512e+00 2.1508963700735420e+00 1.6426851762810939e+00 + -1.9244613249908091e+00 2.3813917324818421e+00 1.8128158351505383e+00 + -2.2348566972247204e+00 2.5944028520633218e+00 1.9815127397709060e+00 + -2.6068069429975145e+00 2.7785910324890732e+00 2.1441138098237369e+00 + -3.0500322018751005e+00 2.9158677780595079e+00 2.2917030952919832e+00 + -3.5596577224785868e+00 2.9851244740780101e+00 2.4130711437303010e+00 + -4.1264051079078357e+00 2.9661065771471868e+00 2.4970326111067145e+00 + -4.7382192854911320e+00 2.8383657902289334e+00 2.5293585692898284e+00 + -5.3602711819976587e+00 2.5907924189944622e+00 2.4987722415052334e+00 + -5.9117407592532505e+00 2.2646151739826190e+00 2.4274171487735119e+00 + -6.1045860906474037e+00 2.1811305114070048e+00 2.4738239199558580e+00 + id 14116 + loc 4.7207483649253845e-01 8.4547829627990723e-01 399 + blend 0.0000000000000000e+00 + interp 4.4734043310146338e-01:3.9422394822550511e-01:5.6843153516190492e-01:2.8344341156836933e-01:1.0975469886778744e+00:3.5368070074021246e-01:1.9168661640400928e+00:3.5581410530258395e-01:2.4069660087130851e+00:3.5876140467829243e-01:3.2449759618702565e+00:4.4733595969713236e-01:3.9589108264423261e+00 + CVs 20 + -2.2029877460734645e-01 2.7566235364572245e-01 -1.2988401427678073e-01 + -4.2344112872154543e-01 5.5334457901628531e-01 -2.9673977856130090e-01 + -6.1239671295293296e-01 8.2295082647506668e-01 -4.8998388038230273e-01 + -7.8958053886281454e-01 1.0781336105690642e+00 -7.0478661906235773e-01 + -9.5458420219455298e-01 1.3130446589379645e+00 -9.4244664096525299e-01 + -1.1106701853082315e+00 1.5216210751298367e+00 -1.2059697672396459e+00 + -1.2643742608123041e+00 1.6947063438357466e+00 -1.5008845350552829e+00 + -1.4196919400090100e+00 1.8216572282247967e+00 -1.8302232983106299e+00 + -1.5787092211767739e+00 1.9065998514675380e+00 -2.1867289468630693e+00 + -1.7460321666625291e+00 1.9673741481670004e+00 -2.5583796680587567e+00 + -1.9159689163345657e+00 1.9949065666698200e+00 -2.9421781042173492e+00 + -2.0526450582393756e+00 1.9387179438897491e+00 -3.3396428907845883e+00 + -2.1412851102865065e+00 1.7727029272859585e+00 -3.7521440306267899e+00 + -2.2460625498507900e+00 1.5290382723518052e+00 -4.1861844336802898e+00 + -2.4258367328161570e+00 1.2388011446167668e+00 -4.6296288865014406e+00 + -2.6383010502981996e+00 8.4995660034768206e-01 -5.0367821951816696e+00 + -2.8345484646629986e+00 2.7411817593519583e-01 -5.3691810616932205e+00 + -3.1725925119452802e+00 -3.4776588692843857e-01 -5.6423113762442592e+00 + -3.6029860579033737e+00 -4.0685038372527227e-01 -5.8381523225646044e+00 + id 14117 + loc 5.4369497299194336e-01 4.2849150300025940e-01 1069 + blend 0.0000000000000000e+00 + interp 3.3150819514262092e-01:3.0123413613798072e-01:7.7855828388661452e-02:3.2188433020702040e-01:8.4265748894181647e-01:3.1109234792886714e-01:1.7198839608591325e+00:3.3150488006066953e-01:2.3299587740926091e+00:2.9736368760687021e-01:3.4563773968565386e+00 + CVs 20 + -4.3716865270560429e-02 3.5379146972475778e-01 1.4876853239989951e-01 + -1.1748719529609097e-01 6.9154396873321677e-01 3.0914912685299473e-01 + -2.4066159874821669e-01 9.9788919628196238e-01 4.6914804044578140e-01 + -4.2537232135872705e-01 1.2492319815313875e+00 6.1452983128099792e-01 + -6.3910041655083005e-01 1.4376162857877619e+00 7.1528657993638478e-01 + -8.2863267392508011e-01 1.5935192540207854e+00 7.6702265437852657e-01 + -9.7277243684628123e-01 1.7521885940613600e+00 7.9865764988527066e-01 + -1.0753798407300657e+00 1.9341400674343743e+00 8.4505886818891351e-01 + -1.1344340417100449e+00 2.1362354238738357e+00 9.3628224012939498e-01 + -1.1469210942482233e+00 2.3198051512132656e+00 1.0860005435402424e+00 + -1.1274850112470556e+00 2.4408425994251304e+00 1.2769922828866309e+00 + -1.0968810503062425e+00 2.4863667722755363e+00 1.4772811441241585e+00 + -1.0681643618130372e+00 2.4679699359446849e+00 1.6619708979862373e+00 + -1.0486163598642420e+00 2.4026429714891986e+00 1.8160631277946848e+00 + -1.0468255237645985e+00 2.2975014435406109e+00 1.9259889382005790e+00 + -1.0692358679433691e+00 2.1763568475343256e+00 1.9886879353625107e+00 + -1.1063207679744427e+00 2.0781166783921976e+00 2.0348147882045282e+00 + -1.1581718185095777e+00 2.0044043572340007e+00 2.0851484192177061e+00 + -1.3568925998850503e+00 1.8122203066632436e+00 2.0050552950257607e+00 + id 14118 + loc 2.9807186126708984e-01 3.1264954805374146e-01 403 + blend 0.0000000000000000e+00 + interp 3.9925149906342794e-01:3.8932045136514432e-01:1.3203278101158988e-01:2.6108573908108335e-01:9.5353721736146557e-01:2.6187169320013631e-01:1.8604712276194193e+00:3.7097248651446652e-01:2.1944698990938005e+00:2.6436691131339396e-01:3.1547581793255137e+00:3.9924750654843733e-01:3.8467831542888327e+00 + CVs 20 + -2.1354312464617134e-01 2.3620692296652923e-01 3.3251995111667543e-02 + -3.9110228022064308e-01 4.6096797211833468e-01 8.4257345882100071e-02 + -5.5305377801480127e-01 6.7817752155096689e-01 1.4990854654102381e-01 + -7.0792981721377779e-01 8.8749706406745643e-01 2.2801542798581792e-01 + -8.5595498980376961e-01 1.0860421486471390e+00 3.1726452768801439e-01 + -9.9588031371952601e-01 1.2716363983854813e+00 4.1745303086108715e-01 + -1.1257249911140452e+00 1.4444100334555365e+00 5.3276946409236059e-01 + -1.2427375743582685e+00 1.6035021076255043e+00 6.6919026530928039e-01 + -1.3424122516051411e+00 1.7435970029264236e+00 8.3036478492509691e-01 + -1.4174632073470146e+00 1.8554474926227944e+00 1.0163469854135438e+00 + -1.4573676206201787e+00 1.9308079322590395e+00 1.2227085388984809e+00 + -1.4459638835530646e+00 1.9606667256180876e+00 1.4453790948518295e+00 + -1.3727744858876736e+00 1.9347389466023259e+00 1.6764393568902065e+00 + -1.2521486396844164e+00 1.8535283209914493e+00 1.8988789428988770e+00 + -1.1030390085553479e+00 1.7196438973447070e+00 2.0953520120458653e+00 + -9.1710861949996869e-01 1.5007532785563031e+00 2.2589210221579350e+00 + -6.8195093287711983e-01 1.1350419186314364e+00 2.4163693818805716e+00 + -4.4876273485178741e-01 6.5546573948529652e-01 2.6421856385979443e+00 + -3.3970963160989676e-01 3.7879207241904722e-01 2.8197722925363422e+00 + id 14119 + loc 3.6711864173412323e-02 7.8497391939163208e-01 379 + blend 0.0000000000000000e+00 + interp 5.0658045904276572e-01:5.0657539323817535e-01:2.6814230768340175e-01:2.8042653104258519e-01:1.0438591848479584e+00:4.2528708763949757e-01:2.0008470689348408e+00:3.6141958810623631e-01:2.4865874761656559e+00:2.9621330462853152e-01:2.9800621565361949e+00:3.1265744906373827e-01:3.7764772602393704e+00 + CVs 20 + -2.1689742915075416e-02 5.1742517869123672e-01 3.1718505987580214e-01 + -9.3797108130757034e-03 9.3607714561120858e-01 7.2449952999625755e-01 + 4.1166242162978317e-02 1.2133970247015506e+00 1.2066750517945213e+00 + 1.2225974154743269e-01 1.4203657333185529e+00 1.6760426194183853e+00 + 2.0864650666977735e-01 1.6350724879094169e+00 2.0907073723938669e+00 + 2.6548052343383688e-01 1.8881668801734879e+00 2.4584628477793506e+00 + 2.6592231940854971e-01 2.1807029844706736e+00 2.7813205112401818e+00 + 2.0549185570958639e-01 2.4962053158608750e+00 3.0418123584003283e+00 + 8.8089913790680985e-02 2.8227791794413148e+00 3.2385343557715602e+00 + -9.9351748462380707e-02 3.1679958730436586e+00 3.3839965284283609e+00 + -3.7797216481385010e-01 3.5358258727657397e+00 3.4795228774805853e+00 + -7.6630988102507791e-01 3.9130640185517302e+00 3.5221675646010673e+00 + -1.2732616756172566e+00 4.2580293567703151e+00 3.5044349545366948e+00 + -1.8600961877653335e+00 4.4975225897419389e+00 3.4134747059994233e+00 + -2.4713695825586783e+00 4.5863140813411647e+00 3.2349744877083761e+00 + -3.1222073030872837e+00 4.4720346261698705e+00 2.8993733451812043e+00 + -3.8727898157745861e+00 3.9457150578175306e+00 2.3438752817660147e+00 + -4.5447791201292631e+00 2.8559952351442184e+00 1.9174970701356986e+00 + -4.6028357917244413e+00 2.3691631803968547e+00 1.8484142282041416e+00 + id 14120 + loc 6.5644276142120361e-01 9.1882091760635376e-01 395 + blend 0.0000000000000000e+00 + interp 5.0947061880450772e-01:2.7766543354116074e-01:3.1547684777888962e-01:3.1300723196181213e-01:1.3086970078906206e+00:5.0946552409831969e-01:2.0038441145227370e+00:5.0166500624376487e-01:2.5064028758443109e+00:4.1614622676810947e-01:2.8055690584723250e+00:2.7761796914869030e-01:3.1252123118710764e+00 + CVs 20 + 4.8435292704640670e-01 2.4460320303654032e-01 -3.3381769170917341e-01 + 8.4313331476753728e-01 4.0384240428559293e-01 -6.1139850424581077e-01 + 1.1758366676616852e+00 5.2136286799589859e-01 -8.8336035122048551e-01 + 1.5334515061195904e+00 6.1601937191554401e-01 -1.1703350045931000e+00 + 1.9208840327068497e+00 6.7909775013582840e-01 -1.4655920263793103e+00 + 2.3380453643814452e+00 7.0454415810253668e-01 -1.7635467861872645e+00 + 2.7805142340612816e+00 6.9091793314719874e-01 -2.0633413223554280e+00 + 3.2424072760157094e+00 6.3362278025180330e-01 -2.3629042081904945e+00 + 3.7161273721632253e+00 5.2182542015860078e-01 -2.6546756535431482e+00 + 4.1887396430910302e+00 3.4365618531453612e-01 -2.9324038776924555e+00 + 4.6406013536896600e+00 9.2508438601034193e-02 -3.1961483822078671e+00 + 5.0532211997735548e+00 -2.2626321349562240e-01 -3.4447735637872703e+00 + 5.4187859513462007e+00 -5.9541252588443205e-01 -3.6719339430492166e+00 + 5.7369540076517200e+00 -9.9505371312341229e-01 -3.8750620135066445e+00 + 6.0074316130770971e+00 -1.4082710307882600e+00 -4.0585207865348396e+00 + 6.2284119021073998e+00 -1.8190163196788340e+00 -4.2249196788701449e+00 + 6.3998660503556390e+00 -2.2109488824585219e+00 -4.3722303154333639e+00 + 6.5280722990054754e+00 -2.5690751549567663e+00 -4.5010075502829725e+00 + 6.6325429617997234e+00 -2.8521569948180314e+00 -4.6176246361521356e+00 + id 14121 + loc 1.9403785467147827e-01 1.3745422661304474e-01 396 + blend 0.0000000000000000e+00 + interp 4.1792702228697881e-01:4.0772463120556252e-01:4.9577579355945012e-01:2.9271505025479361e-01:1.2201713509363639e+00:2.9521725618093397e-01:2.0000953192597968e+00:3.3682594047422804e-01:2.7568603316685372e+00:4.1792284301675597e-01:3.2083750259467552e+00:3.3374928297253098e-01:3.9496647087103613e+00 + CVs 20 + -2.6277170946865036e-01 2.1799018190016967e-01 -5.4776288168761866e-01 + -4.7817928419060135e-01 3.2450313475517722e-01 -9.5640949058864655e-01 + -6.7550547186358778e-01 3.8933253412453522e-01 -1.3403264433108111e+00 + -8.6162276627307843e-01 4.4271159905471197e-01 -1.7459162250217279e+00 + -1.0336106461095285e+00 4.8077487672673025e-01 -2.1735944540455683e+00 + -1.1920453592159670e+00 5.0037067733388452e-01 -2.6232807199068411e+00 + -1.3431702667851191e+00 4.9914322558665680e-01 -3.0941666524401712e+00 + -1.4942967063222814e+00 4.7060791630875864e-01 -3.5847283490336590e+00 + -1.6494596789717555e+00 4.0045915459332448e-01 -4.0917664327808243e+00 + -1.8138068445101512e+00 2.6977753843156949e-01 -4.6047421525174839e+00 + -1.9967009670323943e+00 6.1182819342757711e-02 -5.1025867585609967e+00 + -2.2002040273214476e+00 -2.3362682601765172e-01 -5.5620696850833458e+00 + -2.4147387782312433e+00 -6.0640099869338426e-01 -5.9700614023513054e+00 + -2.6343994065568586e+00 -1.0375183207148946e+00 -6.3253502346704202e+00 + -2.8587645347825221e+00 -1.5085831329102506e+00 -6.6268036309797553e+00 + -3.0834444396803131e+00 -2.0051580584302400e+00 -6.8711195480759777e+00 + -3.2965327937475011e+00 -2.5148409429382350e+00 -7.0573325736773391e+00 + -3.4911537569944775e+00 -3.0149786267667622e+00 -7.1956472715733106e+00 + -3.6797498975280676e+00 -3.4015959896208678e+00 -7.3558675190169742e+00 + id 14122 + loc 5.4104858636856079e-01 5.4505777359008789e-01 412 + blend 0.0000000000000000e+00 + interp 4.4577581735377936e-01:2.5232025468472885e-01:1.7402495456620626e-01:3.5300512553091101e-01:1.0003554725440893e+00:4.4577135959560582e-01:1.5846098375922679e+00:3.5252406046275803e-01:2.0022592893775624e+00:3.4431018130498126e-01:2.9257133081265341e+00:3.9988327029277082e-01:3.4131122264084075e+00 + CVs 20 + 7.0285213052379325e-01 9.1275331594469933e-02 -2.2768696300341451e-01 + 1.2035792667364060e+00 6.5940635922185686e-02 -4.2979124793145884e-01 + 1.6820061636959889e+00 5.2952896749067779e-03 -6.0531424859083871e-01 + 2.1987672514181020e+00 -6.8975461552474249e-02 -7.4864844678697562e-01 + 2.7393213425670062e+00 -1.6326348378358424e-01 -8.4721942445530318e-01 + 3.2845541515233574e+00 -2.8118565182654476e-01 -8.8947914789408344e-01 + 3.8116973373970309e+00 -4.2351653354640817e-01 -8.7138450974501858e-01 + 4.2994214579132430e+00 -5.8884337105795836e-01 -8.0005009308925812e-01 + 4.7326832850162823e+00 -7.7198256127037412e-01 -6.8822151644035168e-01 + 5.1026808922887215e+00 -9.6669121207984476e-01 -5.5200784326823626e-01 + 5.4049491666414795e+00 -1.1809597445755018e+00 -4.2409123013112210e-01 + 5.6410931833070332e+00 -1.4390599628096483e+00 -3.5574383712368773e-01 + 5.8159276274143750e+00 -1.7398495792761230e+00 -3.7040835105198561e-01 + 5.9405550478527385e+00 -2.0489654768655305e+00 -4.4276829259949835e-01 + 6.0260870697265299e+00 -2.3437253959339905e+00 -5.5309859513269166e-01 + 6.0750183868718164e+00 -2.6147508177914194e+00 -7.0381080589297229e-01 + 6.0908821743137027e+00 -2.8533802039486416e+00 -8.9314688617493476e-01 + 6.0853291679503592e+00 -3.0539891071366156e+00 -1.1034900545806774e+00 + 6.1254642747033863e+00 -3.2445760791326022e+00 -1.2986940588813205e+00 + id 14123 + loc 8.9205938577651978e-01 2.7964940667152405e-01 378 + blend 0.0000000000000000e+00 + interp 5.7825199602088451e-01:3.7766572907790280e-01:5.5109034077777785e-02:5.7824621350092431e-01:1.0113907723857509e+00:4.5333981268732715e-01:1.9847940915351314e+00:4.3996516196582891e-01:2.4876507500696330e+00:3.6348799634141954e-01:3.0197873364582430e+00:3.6574264185814359e-01:3.7001904522521318e+00 + CVs 20 + -3.5270174824425038e-01 2.0959481484287473e-01 1.1824658771954016e-01 + -6.7426376735741200e-01 3.9745798324105502e-01 2.2544634881251352e-01 + -1.0004329788851343e+00 5.7374606535885797e-01 3.3452210460564979e-01 + -1.3550485501268810e+00 7.5922793397868926e-01 4.4894284642387294e-01 + -1.7271470627254693e+00 9.6836273795472905e-01 5.5144263572022190e-01 + -2.1074816665990550e+00 1.1985477108852884e+00 6.1965033090558053e-01 + -2.5050923720986225e+00 1.4286283697514395e+00 6.3228846953275220e-01 + -2.9215820187226695e+00 1.6310905860947786e+00 5.6822648054606550e-01 + -3.3341836646870715e+00 1.7801232237715632e+00 4.1703051635590627e-01 + -3.7110004224552995e+00 1.8566696743366400e+00 1.8960825505651624e-01 + -4.0299716545323800e+00 1.8503731135832808e+00 -8.4290074183691499e-02 + -4.2801463465643828e+00 1.7557675674696762e+00 -3.7159090782197890e-01 + -4.4649326310342783e+00 1.5635938813371895e+00 -6.5520170466062155e-01 + -4.6126063676846085e+00 1.2551674196969804e+00 -9.4151895796292551e-01 + -4.7691422204608385e+00 8.3476675349258178e-01 -1.2446939051944996e+00 + -4.9977680701381608e+00 3.4391144115896832e-01 -1.5659363695727389e+00 + -5.3593247475054095e+00 -1.6151931147252396e-01 -1.8676009915116425e+00 + -5.8130240703372760e+00 -6.1172122652236149e-01 -2.0998847430075616e+00 + -6.1148490190759857e+00 -9.5654449555765320e-01 -2.2911178830971295e+00 + id 14124 + loc 4.0864485502243042e-01 4.9463605880737305e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1257268133471356e-01:3.9935590793221643e-01:7.6383003233537750e-07:3.5206490177914829e-01:8.0432132165771553e-01:5.1256755560790024e-01:1.1196943934611658e+00:4.2540594568601076e-01:1.8666763596420703e+00:4.9094052222260121e-01:2.2681847165592628e+00:3.2211175597094927e-01:2.9072429012139680e+00:4.2854046459042111e-01:3.5979115991041848e+00 + CVs 20 + 8.6104329005089825e-02 3.8802049959075596e-01 4.6051379036684978e-02 + 1.1149698710663064e-01 7.2975489414461681e-01 6.5678719411421393e-02 + 1.0110968700920031e-01 1.0518836784082533e+00 7.9646528493762581e-02 + 6.8156315514249055e-02 1.3657379574101878e+00 9.8094181532917463e-02 + 1.0825092078033949e-02 1.6622879334639629e+00 1.1683973960780691e-01 + -7.0469662580121550e-02 1.9269632932032086e+00 1.3512162496242602e-01 + -1.7466182495695626e-01 2.1463231542093748e+00 1.5462124873074734e-01 + -2.9846135716339350e-01 2.3152155034226691e+00 1.7764144419800815e-01 + -4.3721103903223701e-01 2.4368518376507078e+00 2.0595590627462124e-01 + -5.8988526227081495e-01 2.5163009751063603e+00 2.3971281855187043e-01 + -7.5687413395791381e-01 2.5543523007287003e+00 2.7832317979980692e-01 + -9.3524013339604772e-01 2.5490048090990158e+00 3.2114703368278713e-01 + -1.1204549345599792e+00 2.4980523779414483e+00 3.6692513617127348e-01 + -1.3082614089532210e+00 2.3999550164747525e+00 4.1340812208886285e-01 + -1.4935757976951578e+00 2.2594410825931641e+00 4.5644179089132486e-01 + -1.6751343010982771e+00 2.1018620581186447e+00 4.8844622550697198e-01 + -1.8721789937729241e+00 1.9546624847412968e+00 5.0280905824534394e-01 + -2.0499474741905432e+00 1.7700846297084163e+00 5.0820815539306707e-01 + -1.9383502546077664e+00 1.5530924834707547e+00 5.2920816928221348e-01 + id 14125 + loc 8.0093502998352051e-01 2.4834712967276573e-02 402 + blend 0.0000000000000000e+00 + interp 4.7874778997236894e-01:3.3935024730103486e-01:1.2114848302537806e-01:4.7874300249446922e-01:8.9515197637665678e-01:4.1754740169496729e-01:1.0503431565104311e+00:1.5573931844379202e-01:1.8729046836977519e+00:3.8314666721243923e-01:2.8333609552334629e+00:3.0881858139768192e-01:3.1781725754851280e+00 + CVs 20 + 3.9333590737548907e-01 3.3108148076646488e-01 1.9542502794183989e-01 + 7.4818436739993899e-01 6.9481032918880248e-01 4.2204070502388696e-01 + 1.0791999431861448e+00 1.0630403575499716e+00 6.6754796250987058e-01 + 1.4149426461628749e+00 1.3946065827258891e+00 9.0315111403065640e-01 + 1.7786424386599071e+00 1.6602113021625744e+00 1.1128820649573790e+00 + 2.1763824445684095e+00 1.8497569547985717e+00 1.3076779449905160e+00 + 2.6039075758616059e+00 1.9574310408995537e+00 1.5129211243522815e+00 + 3.0466578905792856e+00 1.9736278028537551e+00 1.7517003094416717e+00 + 3.4770363024513093e+00 1.8864254840077403e+00 2.0289603538164727e+00 + 3.8635803474854979e+00 1.6881526615216398e+00 2.3317153120698841e+00 + 4.1687780505687169e+00 1.4088305013123983e+00 2.6231347378166419e+00 + 4.3702621091845684e+00 1.1288002867452167e+00 2.8530922984669198e+00 + 4.4778523032851067e+00 8.8864470829174746e-01 3.0016869953870393e+00 + 4.5171004528852725e+00 6.6185331378979739e-01 3.0776775088861248e+00 + 4.5376389928932959e+00 4.0673617918792937e-01 3.0968255201908792e+00 + 4.6250164386521444e+00 1.1038203730641216e-01 3.0703328497978970e+00 + 4.8251332965738474e+00 -2.0562398037671792e-01 3.0136538790492424e+00 + 5.0823279602230711e+00 -5.2864844777923525e-01 2.9819337505305539e+00 + 5.2494138685725975e+00 -8.2542776745791424e-01 3.0753905027840718e+00 + id 14126 + loc 8.0852217972278595e-02 2.2878427803516388e-01 400 + blend 0.0000000000000000e+00 + interp 5.2109387526120710e-01:3.9521568244737343e-01:8.6841257042006503e-01:4.2679257492160189e-01:1.2735905037590409e+00:4.3845038097280065e-01:2.0817289790906557e+00:5.2108866432245449e-01:2.5963269957513369e+00:4.6825924161896748e-01:3.0474759457239204e+00:3.3526660309100864e-01:3.9570279618047270e+00 + CVs 20 + -9.9925230295356104e-02 1.5331177383561917e-01 1.9189529386434787e-01 + -2.2207282476224952e-01 3.1853308218151921e-01 4.0175618979835692e-01 + -3.6443642640100038e-01 4.8401448715436246e-01 6.0836076951603735e-01 + -5.2494866772375604e-01 6.4216751279715212e-01 8.0065807419204882e-01 + -7.0085018716071812e-01 7.8690013490780308e-01 9.7722553154661251e-01 + -8.8610034432132667e-01 9.0844043026734322e-01 1.1357861239211400e+00 + -1.0755647438384721e+00 9.9716318693385952e-01 1.2743593459369456e+00 + -1.2660979774579584e+00 1.0474673720598826e+00 1.3920471334681155e+00 + -1.4590104197303908e+00 1.0573360753787933e+00 1.4914679934316029e+00 + -1.6585559133922247e+00 1.0247655161701152e+00 1.5784032979011393e+00 + -1.8636273577923763e+00 9.4857994832857473e-01 1.6555239148016125e+00 + -2.0676494776952876e+00 8.3506700470665884e-01 1.7179295057727955e+00 + -2.2631305833450841e+00 7.0233982258271377e-01 1.7537508560824415e+00 + -2.4471385809744572e+00 5.6738155079124708e-01 1.7558414366514141e+00 + -2.6302595985709951e+00 4.1723900180119589e-01 1.7327414835256680e+00 + -2.8371517659115146e+00 2.0751625656252004e-01 1.7015665395891739e+00 + -3.1391137768095811e+00 -6.9615147543323319e-02 1.6851524978055279e+00 + -3.5407299743238307e+00 -2.3107777849376920e-01 1.6652398035194684e+00 + -3.7755225473152771e+00 -1.9393516205584471e-01 1.5690134223478531e+00 + id 14127 + loc 3.7888807058334351e-01 3.6734366416931152e-01 401 + blend 0.0000000000000000e+00 + interp 4.9563965628144546e-01:3.7771964293226523e-01:2.0812042597000002e-01:4.9563469988488268e-01:1.0080383971628673e+00:3.0139199503086656e-01:1.3917001266474682e+00:3.8247189187301872e-01:2.0001863236043165e+00:2.6166646426657114e-01:2.4955149835735355e+00:3.8230109822238856e-01:2.9996293306030353e+00:3.2014433362688299e-01:3.6475199528066957e+00 + CVs 20 + -3.2235615079835483e-01 1.5005922217869833e-01 1.5837968675137593e-01 + -6.2848528065276033e-01 3.0288760884858867e-01 2.7979504923138376e-01 + -9.3577705229792740e-01 4.5080391187024010e-01 3.7693282868157618e-01 + -1.2592714719986053e+00 5.9180827988788931e-01 4.6030984947597786e-01 + -1.6040779764842625e+00 7.2688693940267934e-01 5.3584633678283122e-01 + -1.9806580417435613e+00 8.5637038782569141e-01 6.1987102541048722e-01 + -2.3968659496251203e+00 9.7535726153219549e-01 7.4204938443383528e-01 + -2.8484760672021427e+00 1.0705363011313695e+00 9.3793634263818437e-01 + -3.3149891463194279e+00 1.1233025041003990e+00 1.2333592832177092e+00 + -3.7645385819921922e+00 1.1157359562108846e+00 1.6332524386995715e+00 + -4.1661206468087659e+00 1.0347547129542352e+00 2.1201484638309478e+00 + -4.4973686539303701e+00 8.6973899567513879e-01 2.6642500678551229e+00 + -4.7373074906803128e+00 6.1071713184305554e-01 3.2360685191451961e+00 + -4.8530779328301001e+00 2.6228044308201892e-01 3.8177639276293527e+00 + -4.7871077129252111e+00 -1.3230664065411019e-01 4.4070981187231038e+00 + -4.4726340101399584e+00 -4.7867644356840944e-01 4.9793108809808428e+00 + -3.8982592004929710e+00 -6.4676424585105496e-01 5.4588816915295588e+00 + -3.1718519783517003e+00 -5.4696907851346466e-01 5.7390409640901812e+00 + -2.8199155172915549e+00 -5.7174228831917051e-01 5.9935291115099751e+00 + id 14128 + loc 8.7081015110015869e-01 1.9700953364372253e-01 393 + blend 0.0000000000000000e+00 + interp 4.2160122843316805e-01:3.9966365982655511e-01:9.9840074488785069e-03:4.2159701242088377e-01:7.2942506424700992e-01:3.6228483562879282e-01:1.1820925559597393e+00:3.7658464456996926e-01:1.9998772140604939e+00:2.9010995619518432e-01:2.5953663521264874e+00:3.5915715112245689e-01:3.0435459253916268e+00 + CVs 20 + 3.3368090182304655e-01 3.6607030420638381e-01 2.1478333019141860e-01 + 6.4305780715991934e-01 7.4488520446345563e-01 4.2602566419599225e-01 + 9.2295950584168185e-01 1.1472404650480417e+00 6.6354204066863343e-01 + 1.1701034885285710e+00 1.5491668082729397e+00 9.5498458258387608e-01 + 1.3819142008339336e+00 1.9092991330629467e+00 1.3210734830915085e+00 + 1.5566789311649547e+00 2.2060617686900601e+00 1.7691149502032302e+00 + 1.6971311416235828e+00 2.4409096951170897e+00 2.2978293292934762e+00 + 1.8224304908716209e+00 2.6157975259735609e+00 2.9050665868498284e+00 + 1.9788580983500039e+00 2.7107202627903844e+00 3.5815324664391364e+00 + 2.2162280191233172e+00 2.6886054010061766e+00 4.2978762752159225e+00 + 2.5666110582760648e+00 2.5101285950882328e+00 4.9949980433388648e+00 + 3.0288585262902790e+00 2.1544692848230826e+00 5.5898859491094877e+00 + 3.5751509443509608e+00 1.6364613093097415e+00 5.9912071012683263e+00 + 4.1642847877577527e+00 1.0230151807658197e+00 6.1028822990512328e+00 + 4.7441266343948545e+00 4.6719310692229143e-01 5.8623978825661318e+00 + 5.2689602557902520e+00 1.8427158586208225e-01 5.3482940314889982e+00 + 5.6903679377610583e+00 2.5341226754081791e-01 4.7777055054006743e+00 + 6.0107567865212879e+00 4.4241605044779675e-01 4.3206042300982990e+00 + 6.4246730136237931e+00 3.0681433424240145e-01 3.9861780246758873e+00 + id 14129 + loc 4.5168271660804749e-01 5.1351487636566162e-01 380 + blend 0.0000000000000000e+00 + interp 3.2849704718071027e-01:2.6413009902362261e-01:9.8633244649369434e-01:3.2849376221023846e-01:1.9963495038165013e+00:2.6492285101747393e-01:2.7245523004226198e+00:2.7553420476712942e-01:3.8869790143518488e+00 + CVs 20 + -4.4908748156187484e-01 2.7730657036660372e-01 -5.8340787555803830e-01 + -8.0086969435938327e-01 4.5836518238866708e-01 -1.0394309848242602e+00 + -1.1066792167216746e+00 5.9334540115054135e-01 -1.4726984172711552e+00 + -1.3937069525714236e+00 6.9968197530993304e-01 -1.9301013151572135e+00 + -1.6630675885530315e+00 7.6642513638026388e-01 -2.4093060086679654e+00 + -1.9175232638063209e+00 7.7998723161969696e-01 -2.9024276010014338e+00 + -2.1565697817876508e+00 7.2673320563847921e-01 -3.3901831550295651e+00 + -2.3778330673174857e+00 6.0127433853362477e-01 -3.8495062806055946e+00 + -2.5850389217286107e+00 4.0844005512088488e-01 -4.2680686497825011e+00 + -2.7842680606157346e+00 1.5983761860946144e-01 -4.6381465382632232e+00 + -2.9737499506150220e+00 -1.2345776811235964e-01 -4.9428605734845226e+00 + -3.1444390480615101e+00 -4.1235214007867249e-01 -5.1671884785638538e+00 + -3.2971213252645524e+00 -6.9844938039686566e-01 -5.3278687917616923e+00 + -3.4478950446419061e+00 -1.0250733009750643e+00 -5.4701482498579139e+00 + -3.6104085378895414e+00 -1.4357950696968831e+00 -5.6301655736061811e+00 + -3.7945544714302621e+00 -1.9113578775416582e+00 -5.8264213864531635e+00 + -4.0162902827061426e+00 -2.3993754244980270e+00 -6.0516326285626914e+00 + -4.2850192593667078e+00 -2.8371101655649662e+00 -6.2679518290461331e+00 + -4.5223167824851807e+00 -3.1112893954580634e+00 -6.4217592629095144e+00 + id 14130 + loc 6.0478764772415161e-01 7.0265281200408936e-01 403 + blend 0.0000000000000000e+00 + interp 4.3213837629825402e-01:2.6711781446911387e-01:2.7684160836196137e-01:2.8284168347805089e-01:1.0081421053272261e+00:2.6161594079387540e-01:1.9409565444578512e+00:3.5570457383761572e-01:2.5246987231293136e+00:4.3213405491449108e-01:3.0308377195106893e+00:2.5133481801879048e-01:3.6427070298674975e+00 + CVs 20 + -6.7197167620116377e-02 4.1300303638262884e-03 -3.9256367300051298e-03 + -1.2445363614869337e-01 1.7216113383750391e-02 -2.0030738149072729e-04 + -1.6529136472236469e-01 4.2047010731415063e-02 1.3461922196782635e-02 + -2.0525211288587100e-01 6.8768728752329200e-02 3.4485551559012347e-02 + -2.4824706007332925e-01 9.6114034779913746e-02 6.3118873162238354e-02 + -2.9611498255494545e-01 1.2281821418874882e-01 1.0015743331619251e-01 + -3.4937818975409529e-01 1.4677555674389287e-01 1.4665520768436716e-01 + -4.0694651784151042e-01 1.6573421081831735e-01 2.0382262192460118e-01 + -4.6699845873304724e-01 1.7834280980227812e-01 2.7293419781140599e-01 + -5.2747870943280306e-01 1.8399128152861011e-01 3.5493460773441587e-01 + -5.8559037069977560e-01 1.8217481979698699e-01 4.4996856640108496e-01 + -6.3716642360828668e-01 1.7230011023410524e-01 5.5702363165768221e-01 + -6.7614903089896539e-01 1.5386302543656039e-01 6.7358245637587810e-01 + -6.9529465860199569e-01 1.2662829934031489e-01 7.9546376978288369e-01 + -6.8684194571350732e-01 9.0555333997380749e-02 9.1652745959954429e-01 + -6.4348489908972850e-01 4.5687408824607922e-02 1.0284020567726107e+00 + -5.6050843996379962e-01 -7.5594935047186285e-03 1.1208623127296842e+00 + -4.3937028586101601e-01 -6.8285038120979635e-02 1.1838847438375641e+00 + -4.9892375113425524e-01 -7.3974896022136694e-02 1.3707876597801323e+00 + id 14131 + loc 2.7319943904876709e-01 2.8729343414306641e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5631025092397770e-01:2.9202406805451270e-01:4.6138296428901104e-02:3.1598068712078059e-01:1.0267313947179897e+00:3.7399905050575227e-01:1.9079112719828832e+00:4.5630568782146846e-01:2.2244432691128875e+00:3.0680590232233512e-01:2.9424132082078223e+00:3.3825421470435557e-01:3.4329432689727821e+00 + CVs 20 + -2.6015032215510259e-01 3.0918239151318938e-01 -1.6414612016528385e-01 + -4.6745111149961416e-01 6.3455107480905926e-01 -2.6349679237913970e-01 + -6.4477518997220051e-01 9.6365609323164425e-01 -3.2398739176691238e-01 + -8.2076217483088731e-01 1.2916604415741388e+00 -3.7761764900789641e-01 + -1.0282826122445714e+00 1.6137841847139567e+00 -4.6107102400650857e-01 + -1.2908192030071679e+00 1.9085423378158977e+00 -6.0390622544841388e-01 + -1.6095013479496476e+00 2.1373128096776322e+00 -8.2266102813754116e-01 + -1.9565432387985093e+00 2.2572151769575517e+00 -1.1257636271488072e+00 + -2.2771555089128377e+00 2.2390368143904085e+00 -1.5086328410117256e+00 + -2.5146791237202515e+00 2.0864537025690355e+00 -1.9342513019419736e+00 + -2.6514535399188244e+00 1.8280819744045831e+00 -2.3573134989273212e+00 + -2.6904548679087879e+00 1.4806329678995360e+00 -2.7542841863821397e+00 + -2.6375483050510686e+00 1.0773608394934879e+00 -3.0857378243635889e+00 + -2.5573707491723265e+00 7.3521294087790845e-01 -3.2949983349302361e+00 + -2.5429141333137775e+00 5.5481233338229674e-01 -3.3709131543822037e+00 + -2.5970919853475620e+00 4.9637038008044648e-01 -3.3080383509605742e+00 + -2.6630394162596644e+00 4.4544395246414270e-01 -3.0823790092324974e+00 + -2.6607956762792564e+00 2.8847797278110976e-01 -2.8717704586008987e+00 + -2.6786694201391792e+00 2.4608776354842654e-01 -3.1698921457028844e+00 + id 14132 + loc 5.5385631322860718e-01 7.2992169857025146e-01 395 + blend 0.0000000000000000e+00 + interp 4.4383860870476155e-01:4.4383417031867450e-01:1.6906789483647267e-01:2.8691827245074547e-01:9.6065078614947919e-01:3.1527145937612439e-01:1.7168061926798996e+00:2.8568384242322242e-01:2.2617858132427360e+00:3.2672753111186109e-01:2.9984750948062935e+00:2.9849873726531506e-01:3.5720899555070718e+00 + CVs 20 + 4.6555547873237441e-01 1.4970111452142704e-01 -3.8285899881682228e-01 + 8.3451960927387214e-01 2.3291488332116683e-01 -7.1709995349381572e-01 + 1.1794216891426470e+00 2.9558515187863493e-01 -1.0467384501000354e+00 + 1.5310764494610707e+00 3.5454524925471986e-01 -1.3891296608804979e+00 + 1.8874223178248908e+00 4.0376567220025084e-01 -1.7397012211385858e+00 + 2.2422159338664902e+00 4.3864167806564369e-01 -2.0971527203859748e+00 + 2.5874876668716964e+00 4.5620472252922539e-01 -2.4636864203233357e+00 + 2.9182963972721248e+00 4.4964665063732223e-01 -2.8411593115718481e+00 + 3.2297927394731802e+00 4.0695580053803049e-01 -3.2293374782968387e+00 + 3.5048828791331395e+00 3.1690658784263182e-01 -3.6232302449689620e+00 + 3.7216449299393433e+00 1.7797069894693696e-01 -4.0150971122279611e+00 + 3.8759221242870501e+00 -2.9009025433417435e-03 -4.3983533665472603e+00 + 3.9799396043427704e+00 -2.1887897781148080e-01 -4.7675885805843903e+00 + 4.0423145651676631e+00 -4.6049641641672423e-01 -5.1132991214070396e+00 + 4.0668674497740769e+00 -7.1250441777317430e-01 -5.4228414124002846e+00 + 4.0630704915116160e+00 -9.6707883128667316e-01 -5.6876785837210511e+00 + 4.0453546943649377e+00 -1.2290966301763109e+00 -5.9055314164392856e+00 + 4.0260495208705827e+00 -1.4995145117414119e+00 -6.0768473991317098e+00 + 4.0253066312504107e+00 -1.7427150873680013e+00 -6.2082907172349620e+00 + id 14133 + loc 2.2248829901218414e-01 3.0484478920698166e-02 379 + blend 0.0000000000000000e+00 + interp 4.1361366124373800e-01:4.1360952510712556e-01:3.0230060295215511e-01:2.3134151239041303e-01:9.8686112444795382e-01:1.8335539138938636e-01:2.0076476138024453e+00:2.6989555712043589e-01:2.5545665879756791e+00:2.3564274757539205e-01:3.0186970916036984e+00:3.0614497089247411e-01:3.5599392508888297e+00 + CVs 20 + 9.2642654118600246e-02 3.5110078951166745e-01 4.4130729353892562e-01 + 2.5112706511895860e-01 6.1685859406005550e-01 8.4046232837171642e-01 + 4.8872735375667575e-01 7.6741946811576878e-01 1.2340119160458616e+00 + 7.9080283196086654e-01 8.3925083864586036e-01 1.6325319923971653e+00 + 1.1187622760010805e+00 8.9851966956598606e-01 2.0376869282806140e+00 + 1.4264948813328355e+00 9.8244953900795018e-01 2.4709392295980379e+00 + 1.6730793736924403e+00 1.0966591898059108e+00 2.9606008123030869e+00 + 1.8248844401462760e+00 1.2395199270160038e+00 3.5152524368503562e+00 + 1.8576451804086482e+00 1.4010695259479296e+00 4.1132654014068013e+00 + 1.7723148025402589e+00 1.5500143208024273e+00 4.7157583059289179e+00 + 1.5930065270398699e+00 1.6406816557081698e+00 5.2848737284632410e+00 + 1.3494417245825754e+00 1.6273372995595135e+00 5.7809561970893286e+00 + 1.0715017426145801e+00 1.4868459346838456e+00 6.1684323241435575e+00 + 7.8151524281938989e-01 1.2294305257945966e+00 6.4324093507093849e+00 + 5.4488773870096296e-01 8.9245346426995331e-01 6.5551105938547005e+00 + 5.1260536597603801e-01 5.9128222398325203e-01 6.5534470426894158e+00 + 7.8197252307730303e-01 5.7357628202842115e-01 6.4888873477892410e+00 + 1.0346233323865168e+00 7.8463146480335366e-01 6.3971466006873596e+00 + 1.1932525786011818e+00 4.2869310810287065e-01 6.3730208663975336e+00 + id 14134 + loc 2.3963291943073273e-01 9.5337694883346558e-01 373 + blend 0.0000000000000000e+00 + interp 4.2581051361491379e-01:4.2580625550977763e-01:4.8691209357468290e-02:3.0592497714515371e-01:6.7466969305374569e-01:3.9230452922003478e-01:1.0672894854522132e+00:3.9477791157638159e-01:1.7291632192325950e+00:2.8160156720576723e-01:2.3538663232804438e+00:3.4387905120415901e-01:3.4487999740283160e+00 + CVs 20 + -3.9077128937270472e-01 3.3306957274335602e-01 -1.9404215802781191e-02 + -7.5657927610668330e-01 6.7820569457298285e-01 -4.9643012509436563e-02 + -1.0913119604733748e+00 1.0654522243845166e+00 -1.0923234985073599e-01 + -1.3883430247139521e+00 1.5148273073730638e+00 -2.2460967494607456e-01 + -1.6264927910830176e+00 2.0102012855419042e+00 -4.2161124269030509e-01 + -1.7961435786654563e+00 2.5136536491250658e+00 -7.1438409928798519e-01 + -1.9068356993219666e+00 2.9827332222663072e+00 -1.1022646166909749e+00 + -1.9842498754922733e+00 3.3789263748806944e+00 -1.5692933023532887e+00 + -2.0638788780061090e+00 3.6705278716572360e+00 -2.0836615713969708e+00 + -2.1732321085518431e+00 3.8506968229952121e+00 -2.5964373410623898e+00 + -2.3315122563372102e+00 3.9440380179338250e+00 -3.0694350022515393e+00 + -2.5591650816438296e+00 3.9772438724765093e+00 -3.4915635451849978e+00 + -2.8591803889270140e+00 3.9597975675199311e+00 -3.8584390009376301e+00 + -3.2014567467901824e+00 3.8936510796931825e+00 -4.1579212022754044e+00 + -3.5503121821614041e+00 3.7892601512980697e+00 -4.3841190535881340e+00 + -3.9074723858738341e+00 3.6710233558136016e+00 -4.5544209596292795e+00 + -4.3346298503340677e+00 3.5596428039355921e+00 -4.7258456761256022e+00 + -4.9494192879076913e+00 3.3911912417161947e+00 -4.9451440079817282e+00 + -5.2323471551893439e+00 3.1899223525654472e+00 -4.8346936255645021e+00 + id 14135 + loc 5.4099535942077637e-01 1.3383752107620239e-01 412 + blend 0.0000000000000000e+00 + interp 3.7586445083735665e-01:3.2464729663817937e-01:3.7688288038256712e-01:2.8280481816638070e-01:1.0117917248526707e+00:3.7586069219284829e-01:1.6042096434002568e+00:2.3109913606769836e-01:2.1434262643769633e+00:3.6039300982790118e-01:2.9756124168045321e+00:3.6467568689932317e-01:3.7293249809090567e+00 + CVs 20 + -5.2079519440135269e-01 1.5807717275805483e-01 1.8209959441313850e-01 + -9.1219991656920951e-01 2.4156595997933195e-01 3.4645187918759202e-01 + -1.2729164916221121e+00 2.9596861662549701e-01 5.0293815538985931e-01 + -1.6477915173300577e+00 3.3892538281861695e-01 6.5799515846826218e-01 + -2.0311465355732512e+00 3.6809246810565555e-01 8.0766303951763097e-01 + -2.4169471056278873e+00 3.8292332345224012e-01 9.4666362756792766e-01 + -2.7999892941570375e+00 3.8455880842772683e-01 1.0692005380768039e+00 + -3.1759771315588505e+00 3.7454551712264617e-01 1.1711362551807178e+00 + -3.5411818411763907e+00 3.5494479169213888e-01 1.2504598313517039e+00 + -3.8923531722205125e+00 3.2887604793035718e-01 1.3068020675770042e+00 + -4.2276162541434683e+00 2.9652447830153905e-01 1.3449437030924043e+00 + -4.5470487482898827e+00 2.4844655944662453e-01 1.3819585786587667e+00 + -4.8485443729417925e+00 1.7270810600149478e-01 1.4424648473469683e+00 + -5.1300270542587132e+00 6.9900706765170906e-02 1.5396863964302050e+00 + -5.3939409662223374e+00 -5.2983243914094036e-02 1.6744579624717202e+00 + -5.6346386839706000e+00 -1.8640546376970102e-01 1.8444385317650158e+00 + -5.8401744269508651e+00 -3.1585930662478390e-01 2.0433231185851763e+00 + -6.0089321579760835e+00 -4.3075770479993647e-01 2.2617882535107854e+00 + -6.1832987061569042e+00 -5.5093763600360512e-01 2.4909505363405913e+00 + id 14136 + loc 5.4215908050537109e-01 4.5776432752609253e-01 396 + blend 0.0000000000000000e+00 + interp 3.5494070761827101e-01:2.8625575922926855e-01:2.9869776589186436e-04:3.5082486300153976e-01:1.0066578236200114e+00:2.8315463381799100e-01:1.9995051001210773e+00:3.5493715821119487e-01:3.0047300237165717e+00 + CVs 20 + -7.5165394777787309e-01 2.1779445983224940e-01 2.8749750233349508e-01 + -1.2738959308763116e+00 2.6692538576151703e-01 4.9099610690320777e-01 + -1.7259445332579788e+00 2.4082000578148832e-01 6.5692019613529518e-01 + -2.1779743895810086e+00 1.8202289612730671e-01 8.0115265834588212e-01 + -2.6264816330844578e+00 9.2996093473562857e-02 9.2740115140163248e-01 + -3.0687159012523373e+00 -2.3975211506002903e-02 1.0461001136940755e+00 + -3.4965242627373856e+00 -1.6487721494835017e-01 1.1701609023737805e+00 + -3.8917476402444793e+00 -3.2376528078970890e-01 1.3079854108047089e+00 + -4.2371909223880575e+00 -4.9603193356008157e-01 1.4597279661573976e+00 + -4.5275392175272442e+00 -6.8257825758118340e-01 1.6206271681372593e+00 + -4.7559205707632497e+00 -8.8533588764296001e-01 1.7848309173434325e+00 + -4.9137003387895062e+00 -1.0951787945023965e+00 1.9581258621868722e+00 + -5.0024120319830905e+00 -1.3016171768101603e+00 2.1516948184367823e+00 + -5.0382666983185098e+00 -1.4997972144375036e+00 2.3698045883701351e+00 + -5.0424092386582853e+00 -1.6863943537187200e+00 2.6103985035709645e+00 + -5.0322141563744545e+00 -1.8522262264005478e+00 2.8740721946555530e+00 + -5.0208108860563856e+00 -1.9937213565976166e+00 3.1661982186678022e+00 + -5.0112016141851354e+00 -2.1351242562077974e+00 3.4855522508559904e+00 + -4.9073411379500111e+00 -2.4514757837366448e+00 3.8041304186038443e+00 + id 14137 + loc 9.9655523896217346e-02 9.5897424221038818e-01 378 + blend 0.0000000000000000e+00 + interp 4.4599105448522919e-01:3.7382720047260670e-01:3.1259473904666890e-01:3.5631210734344110e-01:9.5541393581489953e-01:2.2748810858239712e-01:1.3354956971987204e+00:3.4539735416790546e-01:2.1326746747516130e+00:4.1221728325815898e-01:2.9043391018704021e+00:4.4598659457468437e-01:3.0389051588194067e+00:2.9369182106719460e-01:3.7892460174278435e+00 + CVs 20 + 6.3774004935213791e-01 3.2264297077043658e-01 3.0631598911455626e-01 + 1.1859995551936251e+00 5.1343779364088893e-01 5.1590623298003524e-01 + 1.7212149538631887e+00 6.3595063546399300e-01 6.8952992361759380e-01 + 2.2718001837066053e+00 7.2972343338850942e-01 8.6947080464741378e-01 + 2.8160994146517551e+00 7.9936305047062350e-01 1.0741012072942464e+00 + 3.3335526261624517e+00 8.3113164169660592e-01 1.3117909183271517e+00 + 3.8132907515932115e+00 8.0829094670792689e-01 1.5827419919823962e+00 + 4.2487369192190352e+00 7.2046319708260786e-01 1.8814981300465241e+00 + 4.6335883022056272e+00 5.6466220804678380e-01 2.1976070824956326e+00 + 4.9648729110172658e+00 3.4210703644124685e-01 2.5152957209368960e+00 + 5.2421282548303578e+00 5.5651341383899045e-02 2.8113119372092470e+00 + 5.4619373217703480e+00 -2.9027227053188387e-01 3.0581996607001893e+00 + 5.6253024854004252e+00 -6.9667592069818296e-01 3.2424214335474613e+00 + 5.7588007439535680e+00 -1.1885274327950968e+00 3.3855322716219707e+00 + 5.9118657930498895e+00 -1.7936719849836296e+00 3.5348231937036232e+00 + 6.1380912148253248e+00 -2.4773837885375962e+00 3.7210855145291273e+00 + 6.4843747138673518e+00 -3.1466606851884515e+00 3.9124583171854992e+00 + 6.9329131860295217e+00 -3.7141098650965430e+00 4.0408052728768631e+00 + 7.2286484692473731e+00 -4.1961666041245831e+00 4.1616743829336418e+00 + id 14138 + loc 9.3416321277618408e-01 2.5194072723388672e-01 400 + blend 0.0000000000000000e+00 + interp 5.4024079881352960e-01:4.9767367567694359e-01:2.8565384798598936e-02:5.4023539640554152e-01:3.9820158140594519e-01:3.4385878846375512e-01:9.9305689128121055e-01:4.8106615555128468e-01:1.2339411110161682e+00:2.8157431276110817e-01:2.1786977453043819e+00:3.2258060747947248e-01:2.9235488871226742e+00:3.2784540369856063e-01:3.8121229061069708e+00 + CVs 20 + 8.6645573342116061e-02 7.3835376422328666e-02 1.8614460570260877e-01 + 1.7326136186958130e-01 1.6855557609178001e-01 3.9435687566155087e-01 + 2.4458340416265767e-01 2.7050511290265006e-01 6.0605956208558287e-01 + 2.9553430480361970e-01 3.7278772985746972e-01 8.1097270690234657e-01 + 3.2822285031409953e-01 4.7529172400684855e-01 1.0049978688473264e+00 + 3.4530314089709574e-01 5.7850663587003603e-01 1.1827551272389969e+00 + 3.4899444606916896e-01 6.8744941387365055e-01 1.3367772295844760e+00 + 3.4192674727652816e-01 8.1227096911557684e-01 1.4630883213112398e+00 + 3.2533784212986649e-01 9.6558480614842690e-01 1.5762687080976061e+00 + 2.9726507977657435e-01 1.1568514358020452e+00 1.7103415074276502e+00 + 2.6018185071892735e-01 1.3823054650558790e+00 1.9027411443245392e+00 + 2.2769598637582439e-01 1.6123665002870948e+00 2.1756330904650438e+00 + 2.1544547299097122e-01 1.8059236117593285e+00 2.5224651919117012e+00 + 2.3198189178518397e-01 1.9403137686406851e+00 2.9240863929294627e+00 + 2.8367918441279283e-01 2.0117468310042756e+00 3.3632839025242376e+00 + 3.8175326055287023e-01 2.0290340708965315e+00 3.8193654398200780e+00 + 5.3420089500341450e-01 2.0038481792427763e+00 4.2697496057255080e+00 + 7.2036783951930805e-01 1.9354934785959128e+00 4.6899329685589777e+00 + 8.2825572186396379e-01 1.8602887646379347e+00 4.9447751515448051e+00 + id 14139 + loc 7.3362451791763306e-01 7.9458463191986084e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7836774057551618e-01:4.7836295689811043e-01:2.9417747954396667e-05:3.6344433136191534e-01:4.6310981887610814e-01:2.7458023055626213e-01:1.0002178687378649e+00:2.9671413721501988e-01:1.7706787721231889e+00:4.4591928480303061e-01:2.5626366340461306e+00:3.3980175315517080e-01:3.4215316338094137e+00 + CVs 20 + 4.0811346997273394e-02 3.0923840395026142e-01 3.4752922734483938e-03 + 8.9108163230809972e-02 6.0832430947238936e-01 -1.1089425444977652e-02 + 1.4067357785285955e-01 9.0178713053397330e-01 -5.0193902813390756e-02 + 1.9429999067766868e-01 1.1939332759439489e+00 -1.1894365624695902e-01 + 2.5385953645934872e-01 1.4858166946273617e+00 -2.2126078663458637e-01 + 3.2328393796697613e-01 1.7743286636929190e+00 -3.6301890982382556e-01 + 4.0438084343953251e-01 2.0456366584480068e+00 -5.5519988993077996e-01 + 4.9301512277475734e-01 2.2786923529609870e+00 -8.0543901384392091e-01 + 5.8012947203827581e-01 2.4565010185305844e+00 -1.1108965050316317e+00 + 6.5598631883083935e-01 2.5681929663220551e+00 -1.4621443188580479e+00 + 7.1273122768769603e-01 2.6063614341875398e+00 -1.8471367666768503e+00 + 7.4541837098583796e-01 2.5657728332503345e+00 -2.2524633880258134e+00 + 7.5268625977993264e-01 2.4419679288663136e+00 -2.6643882248330413e+00 + 7.3784319243013363e-01 2.2293924439879338e+00 -3.0695284911567593e+00 + 7.0972646630041558e-01 1.9179360028650618e+00 -3.4529723232026837e+00 + 6.7919555468630921e-01 1.4815957574967760e+00 -3.7856434332136759e+00 + 6.4302455256379032e-01 8.7696205659473980e-01 -3.9689468641050101e+00 + 5.7487986790188539e-01 2.2850009240029290e-01 -3.8410092033174399e+00 + 5.1481341866047725e-01 -9.2804674225193562e-02 -3.7151359872688552e+00 + id 14140 + loc 8.1227535009384155e-01 4.6858611702919006e-01 380 + blend 0.0000000000000000e+00 + interp 3.5033740943587827e-01:2.6374336858555197e-01:5.8797136091834989e-01:2.9205475838330319e-01:1.5642928130918763e+00:2.5257741662207900e-01:2.1796082876970417e+00:2.5336493171106983e-01:3.2353146698446738e+00:3.5033390606178394e-01:3.9996502734927080e+00 + CVs 20 + 4.7647422365146225e-01 2.1222206432284935e-01 6.7791079087454986e-01 + 8.9974010548918537e-01 2.8767432784376690e-01 1.1491750403966612e+00 + 1.3214864901631309e+00 2.9303145058309543e-01 1.5682386278276625e+00 + 1.7617783305138071e+00 2.5551178868047075e-01 2.0011957539336511e+00 + 2.2001820528503546e+00 1.7641754974702906e-01 2.4495553408608313e+00 + 2.6107018360592873e+00 5.6386958156329214e-02 2.9074979415654427e+00 + 2.9695950092631032e+00 -1.0468456528798198e-01 3.3669209134109064e+00 + 3.2580030855094364e+00 -3.0509616129427419e-01 3.8190881351387191e+00 + 3.4737493923319462e+00 -5.3652773347503002e-01 4.2505114794458265e+00 + 3.6353317448038309e+00 -7.9174029108919486e-01 4.6406274734170205e+00 + 3.7541923327430213e+00 -1.0515510062645266e+00 4.9821633935178529e+00 + 3.8345021731878974e+00 -1.2999320504862206e+00 5.2874370057676963e+00 + 3.8895378535030440e+00 -1.5593683029303236e+00 5.5846856206940156e+00 + 3.9382496868764680e+00 -1.8957741325911766e+00 5.9074803987753555e+00 + 3.9944754816120023e+00 -2.3370359792684767e+00 6.2682978254727848e+00 + 4.0766467714506964e+00 -2.8316818159019141e+00 6.6630721986070318e+00 + 4.2142025626572854e+00 -3.3179158882012416e+00 7.0681345117383314e+00 + 4.4263312924693290e+00 -3.7603349453553645e+00 7.4460475046523236e+00 + 4.6220448996992314e+00 -4.1171356765261322e+00 7.7760303096209382e+00 + id 14141 + loc 1.7924764752388000e-01 1.7417614161968231e-01 399 + blend 0.0000000000000000e+00 + interp 4.8036893401489589e-01:3.7163305756554105e-01:6.6485569251553367e-01:4.8036413032555575e-01:1.2062274856082524e+00:4.0857646835754141e-01:1.9977603361671936e+00:4.5115418656751216e-01:2.2927695995046085e+00:3.8205874760020286e-01:2.8853436837240709e+00:3.4062232429361561e-01:3.2238164607036159e+00:4.1616832212017035e-01:3.9094671746954579e+00 + CVs 20 + -1.1311202099489159e-01 3.1958850622521967e-01 2.1379508562631555e-01 + -2.5431687470945780e-01 6.3233804826184503e-01 4.0418632306589608e-01 + -4.1981768174897827e-01 9.3182250545257406e-01 5.6983252899492287e-01 + -6.0126878725297139e-01 1.2133261225101597e+00 7.1882422589891759e-01 + -7.8979468316317347e-01 1.4750737644916123e+00 8.6384150783102409e-01 + -9.8184937307463149e-01 1.7158180188712739e+00 1.0149474737775359e+00 + -1.1802047260086301e+00 1.9324945893054073e+00 1.1778294126895097e+00 + -1.3896403789440781e+00 2.1189041696962176e+00 1.3569235208681254e+00 + -1.6132297670045397e+00 2.2646458977311932e+00 1.5566496348598491e+00 + -1.8499542393697159e+00 2.3564681226983017e+00 1.7775602907061043e+00 + -2.0929804833715711e+00 2.3762125302294326e+00 2.0096487753991745e+00 + -2.3252928278573011e+00 2.3052316172327734e+00 2.2303268803432594e+00 + -2.5233725919180574e+00 2.1430185692370043e+00 2.4183291903616677e+00 + -2.6638391310992793e+00 1.9031760901891677e+00 2.5638502677640753e+00 + -2.7445627830252386e+00 1.5991804917708929e+00 2.6820434301010194e+00 + -2.8009616989752857e+00 1.2484461929567954e+00 2.8215506636171237e+00 + -2.9082487627389217e+00 8.8263318507058286e-01 3.0155256045072374e+00 + -3.1809315974466985e+00 5.9143113206868847e-01 3.1789026859979699e+00 + -3.5978523783565932e+00 4.7522113758113371e-01 3.1568869415801584e+00 + id 14142 + loc 4.5313686132431030e-01 1.5880228579044342e-01 401 + blend 0.0000000000000000e+00 + interp 4.8079708396830778e-01:3.8791942702920368e-01:6.7780684161204818e-01:3.8938758309317956e-01:1.2600606876523053e+00:4.8079227599746810e-01:1.9811613452742978e+00:3.8254845889082523e-01:2.5321931786003655e+00:3.1313085469055402e-01:3.1093482763707287e+00:3.7078196485261455e-01:3.9494956691056435e+00 + CVs 20 + -2.0861131883538170e-01 2.4471216533709519e-01 1.0204425703870108e-01 + -4.2545958571735110e-01 4.9438225884580350e-01 2.2713637396691999e-01 + -6.3691918485585119e-01 7.4199696746850241e-01 3.6696833266978635e-01 + -8.3577408065462400e-01 9.7636857416245937e-01 5.1462278483054336e-01 + -1.0248670177142587e+00 1.1873472360011224e+00 6.6818171279587935e-01 + -1.2071704713371829e+00 1.3677136629995132e+00 8.2715970512873738e-01 + -1.3901829835147685e+00 1.5129547802132308e+00 9.9785963339353545e-01 + -1.5836944180298154e+00 1.6181045304959141e+00 1.1901282845980459e+00 + -1.7885541810016692e+00 1.6859284486565536e+00 1.4076309370631104e+00 + -2.0054552898898539e+00 1.7222320030401972e+00 1.6494685009432639e+00 + -2.2430374968268603e+00 1.7078960422786442e+00 1.9076313414339574e+00 + -2.4994584992319151e+00 1.6186631310863446e+00 2.1547008571839381e+00 + -2.7642725412461129e+00 1.4802183591005598e+00 2.3728887106216154e+00 + -3.0402671472168459e+00 1.3371141900890462e+00 2.5852783144024429e+00 + -3.3337797636705506e+00 1.1996967064665616e+00 2.8282808454996560e+00 + -3.6260243570803992e+00 1.0747172444647239e+00 3.0845823786059219e+00 + -3.8691704655139159e+00 1.0355870394017126e+00 3.2240904399908406e+00 + -4.0367994330749202e+00 1.0702002702571898e+00 3.1152546995192383e+00 + -4.2896013834434230e+00 1.2355567891907100e+00 3.3849784408157291e+00 + id 14143 + loc 5.5227267742156982e-01 3.7095490097999573e-01 402 + blend 0.0000000000000000e+00 + interp 4.7433177689935535e-01:4.7432703358158640e-01:5.4854678686656522e-01:3.1987639578674737e-01:1.0172256908495907e+00:4.1432337402413050e-01:1.8716043912594988e+00:3.2169588818051315e-01:2.4305010594289027e+00:3.1174868196173583e-01:3.0528015088005582e+00:3.0777848001792768e-01:3.9681910220462764e+00 + CVs 20 + 1.9608099346808786e-01 3.5053706361352271e-01 1.3149880414935955e-01 + 3.9645776579241720e-01 7.2650456114800543e-01 3.2134482001906772e-01 + 5.9344813401598684e-01 1.1008236211779052e+00 5.6034992391266003e-01 + 8.1932185854487394e-01 1.4300653631058484e+00 8.2386420639257341e-01 + 1.1081571024759209e+00 1.6668219272693205e+00 1.0817299807365823e+00 + 1.4529054057733901e+00 1.7769761790275302e+00 1.3162875100523310e+00 + 1.8153547847831368e+00 1.7509489438377057e+00 1.5307205471617809e+00 + 2.1518724926834762e+00 1.5988077642030363e+00 1.7420283578452471e+00 + 2.4135408842496857e+00 1.3332319091725751e+00 1.9547678378281352e+00 + 2.5441044091318625e+00 9.7916465446738110e-01 2.1399918047466926e+00 + 2.5686307366960577e+00 5.8640261115121861e-01 2.2784310932703176e+00 + 2.6241871953728109e+00 1.5148758130771744e-01 2.4222073538465270e+00 + 2.8224510966759997e+00 -3.3872275233310811e-01 2.6170894240677951e+00 + 3.2181969797253775e+00 -8.1145236685953104e-01 2.8616339981421319e+00 + 3.7739822332602868e+00 -1.1661331489199702e+00 3.1419090422045950e+00 + 4.3568730776896620e+00 -1.3852670039695920e+00 3.4689594377975808e+00 + 4.8697481353625651e+00 -1.5157683830057431e+00 3.8620443623044629e+00 + 5.3007938630058202e+00 -1.5798281591874821e+00 4.2789641224810699e+00 + 5.7021528749686441e+00 -1.5941944096019225e+00 4.5901319896989587e+00 + id 14144 + loc 3.2684367895126343e-01 3.7639674544334412e-01 1069 + blend 0.0000000000000000e+00 + interp 3.5005135981072538e-01:3.2354994257143227e-01:9.5818456861595824e-01:3.3825421470435557e-01:1.4221060618025110e+00:2.9927116435828699e-01:2.0177764406054632e+00:3.2485530295619702e-01:2.8270077602972030e+00:3.5004785929712728e-01:3.1284871153688258e+00:2.9917456258208230e-01:3.9927919783816255e+00 + CVs 20 + -2.0961911668446384e-01 2.6667908325561634e-01 2.4195336255430563e-02 + -4.1403063345909852e-01 4.9626592629761612e-01 1.8609390555587385e-02 + -6.0882092496417228e-01 7.0415704932158518e-01 4.2781110419402024e-03 + -7.9278147036019642e-01 8.9723774317577087e-01 -1.1275320490129470e-02 + -9.6348050057840151e-01 1.0679064423954019e+00 -3.7820992787158669e-02 + -1.1063753937253697e+00 1.2060443165118466e+00 -7.8520997760241351e-02 + -1.1947867104685537e+00 1.3133160511121862e+00 -1.2910035711931434e-01 + -1.2099177577429709e+00 1.4185651158678834e+00 -1.8801807527655201e-01 + -1.1746454525802650e+00 1.5709723548995940e+00 -2.5286906922869068e-01 + -1.1757337406653825e+00 1.7762645370493457e+00 -2.9625620757861171e-01 + -1.2811510538900133e+00 1.9593088570023707e+00 -2.7745055724953938e-01 + -1.4868643704307782e+00 2.0513742631985843e+00 -1.8101804436725688e-01 + -1.7687774372249812e+00 2.0309149778260047e+00 -1.4535499480502700e-02 + -2.1130353560118795e+00 1.9037978993512408e+00 1.9870197339194406e-01 + -2.5162347147955417e+00 1.6876367171153783e+00 4.2137323822841233e-01 + -2.9790187685743899e+00 1.4047480384713640e+00 6.1673690584094942e-01 + -3.5003311608666587e+00 1.0696830783287825e+00 7.4848135647540470e-01 + -4.0398752950475902e+00 7.4356148488214657e-01 7.1261718500489224e-01 + -4.3306118463113332e+00 7.3080213682727890e-01 4.0007519367110433e-01 + id 14145 + loc 6.4127284288406372e-01 2.4136008322238922e-01 395 + blend 0.0000000000000000e+00 + interp 3.6927779745531192e-01:2.8306037693594183e-01:7.3660233635143557e-01:3.0338880178220368e-01:1.3165795510649347e+00:3.3016797081529797e-01:2.0009386970813603e+00:3.6927410467733740e-01:2.7802454224550210e+00:3.0585997840585999e-01:3.2371625811363032e+00:3.0795543296469624e-01:3.9936968950085956e+00 + CVs 20 + -4.1049912316013432e-01 3.3474925415459578e-01 3.6019609646137829e-01 + -7.6272345319582491e-01 5.7666357057367301e-01 6.7423673156701991e-01 + -1.1160910092098266e+00 7.6884619981891489e-01 9.7134250677604517e-01 + -1.4998840489554470e+00 9.2651602077099227e-01 1.2647856164150468e+00 + -1.9153638833744679e+00 1.0466264361182365e+00 1.5502287664956391e+00 + -2.3604005434453503e+00 1.1284256760021649e+00 1.8274525675624047e+00 + -2.8333846739293893e+00 1.1683578879067569e+00 2.0985824017700749e+00 + -3.3318853635658692e+00 1.1506656379432381e+00 2.3602654878304916e+00 + -3.8458181651115404e+00 1.0523900189910067e+00 2.6065039644893830e+00 + -4.3548997494733293e+00 8.5738099432618364e-01 2.8379658192545021e+00 + -4.8383829933146423e+00 5.6869573356312175e-01 3.0504948915601813e+00 + -5.2860392722625500e+00 2.0858794450020790e-01 3.2275726748242173e+00 + -5.6975347857138434e+00 -1.9639198397516644e-01 3.3603605501493412e+00 + -6.0748155723980997e+00 -6.3121185252452738e-01 3.4671382812742055e+00 + -6.4116619605073577e+00 -1.0965779079393987e+00 3.5766841933357529e+00 + -6.6833522817467106e+00 -1.5959902030890598e+00 3.6904347814004304e+00 + -6.8622974254545257e+00 -2.1197163096509835e+00 3.7858102181737880e+00 + -6.9632312243779033e+00 -2.6383014492277601e+00 3.8607727055264460e+00 + -7.1528388001418666e+00 -3.0238906637016099e+00 3.9395203120188667e+00 + id 14146 + loc 6.0329145193099976e-01 8.8738042116165161e-01 379 + blend 0.0000000000000000e+00 + interp 5.9023403413430031e-01:3.2485714943319477e-01:1.5038178055733076e-01:4.7841999369975308e-01:8.5649157387756503e-01:4.5497687469523801e-01:1.0418530453649124e+00:4.8543576854258497e-01:1.8846629084789726e+00:5.9022813179395894e-01:2.4091670503489064e+00:4.9699896619304784e-01:2.8959127128237991e+00:4.0200382180812777e-01:3.3117354352419159e+00 + CVs 20 + -2.6369154653043814e-01 3.8864322125242651e-01 2.6994644930210032e-01 + -5.1467373980216602e-01 7.1149155152071508e-01 5.5305814962159316e-01 + -7.7924873054614785e-01 9.8733269110055244e-01 8.6009716130710878e-01 + -1.0743185316267296e+00 1.2492803682340887e+00 1.1790868266482715e+00 + -1.4149148498845447e+00 1.5154558259547806e+00 1.4763424802449228e+00 + -1.8183501426211137e+00 1.7650577482975272e+00 1.7133718161219544e+00 + -2.2864527979012004e+00 1.9536554888011159e+00 1.8605496782387361e+00 + -2.7944747722589534e+00 2.0500969554576827e+00 1.9056280048264378e+00 + -3.3014720802594217e+00 2.0472616174545557e+00 1.8527461155739164e+00 + -3.7670073624531826e+00 1.9559058144811008e+00 1.7180417071246019e+00 + -4.1503651732130304e+00 1.7929015246093534e+00 1.5299399757888181e+00 + -4.4106400192613275e+00 1.5823960315512953e+00 1.3365640287421343e+00 + -4.5537830122977478e+00 1.3670073522977195e+00 1.1815720919513801e+00 + -4.6479556935358364e+00 1.1720975141765195e+00 1.0646688106560009e+00 + -4.7475263967185519e+00 9.8739344068368284e-01 9.6420634759877921e-01 + -4.8767464341089966e+00 7.9159000879863184e-01 8.7297484316959073e-01 + -5.0593681911190380e+00 5.6318441391099006e-01 8.0950652564562586e-01 + -5.2944456004302607e+00 3.3398103168438142e-01 8.1175700551810293e-01 + -5.4358831822343365e+00 2.7469170267680987e-01 8.6870314244695901e-01 + id 14147 + loc 3.4706780314445496e-01 6.2453347444534302e-01 412 + blend 0.0000000000000000e+00 + interp 4.7651660564032039e-01:4.7651184047426398e-01:5.9057210270684779e-02:3.3414904913998561e-01:9.5417397279707761e-01:3.5382539524576750e-01:1.5068662626817551e+00:3.4379542148196585e-01:2.0251595695916302e+00:3.0538565144756724e-01:2.9653601502249982e+00:3.6545475513663944e-01:3.5782671517132396e+00 + CVs 20 + 7.1894813887946807e-01 1.3318227919971687e-01 -1.8525989723150399e-01 + 1.2045935006548514e+00 1.2643709242336262e-01 -3.7356356470887880e-01 + 1.6496497722746049e+00 7.3147032856303529e-02 -5.6069932592184524e-01 + 2.1231006559512182e+00 5.7492236145667563e-03 -7.4610959553792577e-01 + 2.6188347421899736e+00 -7.5097228795440563e-02 -9.2455194899002568e-01 + 3.1325979138368503e+00 -1.6701697158537776e-01 -1.0887222461373947e+00 + 3.6588813434304566e+00 -2.6783733976140756e-01 -1.2322932887469467e+00 + 4.1905105062809165e+00 -3.7698710218379250e-01 -1.3525503833980705e+00 + 4.7221987395434208e+00 -4.9479944516659269e-01 -1.4476072020263298e+00 + 5.2467767478058365e+00 -6.2237560882265686e-01 -1.5163884483136820e+00 + 5.7367547312035878e+00 -7.6527041728948264e-01 -1.5770367028841228e+00 + 6.1438430311621701e+00 -9.3014762089739533e-01 -1.6806295992314972e+00 + 6.4523100427803115e+00 -1.1087074136078421e+00 -1.8577016928819190e+00 + 6.7100852682886112e+00 -1.2955447246735889e+00 -2.0801668668687485e+00 + 6.9548301959352123e+00 -1.4992186470509374e+00 -2.3216253981652493e+00 + 7.1758437054857058e+00 -1.7081582841370537e+00 -2.5803815854243597e+00 + 7.3629344379953610e+00 -1.8981244620704034e+00 -2.8569181381747519e+00 + 7.5398889060144691e+00 -2.0687813716109629e+00 -3.1424992526859956e+00 + 7.8605259692855363e+00 -2.3183156847122803e+00 -3.3821554849216127e+00 + id 14148 + loc 1.0942146927118301e-01 5.8512818813323975e-01 396 + blend 0.0000000000000000e+00 + interp 4.6153220854038002e-01:3.3230806510901889e-01:1.0928653587167769e-03:3.4542473958755560e-01:6.6376847661466931e-01:3.2389732699285817e-01:1.1058094847630651e+00:4.6152759321829462e-01:1.8953476984174746e+00:2.9897700572673702e-01:2.3485600488316001e+00:3.1696544932366422e-01:3.1328948419171594e+00 + CVs 20 + 8.1916707943984102e-01 1.9529229935712339e-01 -2.8603922729569758e-01 + 1.4131132560753281e+00 2.4920408855207940e-01 -5.2832468977806779e-01 + 1.9523033754967252e+00 2.6280205066408091e-01 -7.5618173239364928e-01 + 2.5057347218322601e+00 2.7404543266745596e-01 -9.8457868831343154e-01 + 3.0669306107039742e+00 2.7376439054594059e-01 -1.2151418722804666e+00 + 3.6293858046743526e+00 2.5370337356423545e-01 -1.4528481402757931e+00 + 4.1886932320843648e+00 2.0496254829018135e-01 -1.7033214472549383e+00 + 4.7418002306562688e+00 1.1183237547885594e-01 -1.9673599757798157e+00 + 5.2798583644649488e+00 -4.6274506304873952e-02 -2.2411592091291634e+00 + 5.7786880114257357e+00 -2.8585460063069212e-01 -2.5205883229355317e+00 + 6.2056345160879935e+00 -6.1155710848519695e-01 -2.8005969554041767e+00 + 6.5428535884099253e+00 -1.0186352713131761e+00 -3.0685777044969829e+00 + 6.7901330596310565e+00 -1.4986800895432413e+00 -3.3041997444539719e+00 + 6.9441961030943817e+00 -2.0315865909701389e+00 -3.4886138829643474e+00 + 6.9982002215722261e+00 -2.5839118396159115e+00 -3.6118970506935888e+00 + 6.9541651824030204e+00 -3.1277717766362594e+00 -3.6694796802602161e+00 + 6.8236680463347916e+00 -3.6445618466583332e+00 -3.6571850208196226e+00 + 6.6290757402642777e+00 -4.1103454651775380e+00 -3.5814333335354780e+00 + 6.5033193893919901e+00 -4.5518389484438728e+00 -3.5031241621615274e+00 + id 14149 + loc 9.9326157569885254e-01 2.4190187454223633e-01 393 + blend 0.0000000000000000e+00 + interp 4.2160122843316805e-01:3.9915519351974038e-01:3.0135439852400914e-01:1.9891081443536543e-01:1.0975814151139838e+00:3.4225117592937448e-01:1.9983426136204661e+00:3.7522608986593725e-01:2.0233107255789564e+00:4.2159701242088377e-01:2.7866079779001081e+00:3.6645698465532356e-01:3.2961487716487183e+00:3.4961338865120112e-01:3.9999923820223553e+00 + CVs 20 + 2.1725456926953846e-01 3.0911857664257253e-01 2.6469125288951728e-01 + 4.3416805292207861e-01 6.1760853292379836e-01 4.7520077378585918e-01 + 6.4659169976766506e-01 9.4512556561813754e-01 6.5122233629854676e-01 + 8.5440915472534895e-01 1.2981180292962362e+00 8.0907352532418342e-01 + 1.0650874118614959e+00 1.6663476250608755e+00 9.7537257880717476e-01 + 1.2856545395513561e+00 2.0319844209911895e+00 1.1857266705180458e+00 + 1.5109297398941892e+00 2.3809405192434423e+00 1.4634420100682999e+00 + 1.7304806607705836e+00 2.7069120864498051e+00 1.8175394599443351e+00 + 1.9454109481392010e+00 3.0080063487763833e+00 2.2484276865664361e+00 + 2.1681155228974682e+00 3.2748833003639146e+00 2.7585537725667102e+00 + 2.4165440180108702e+00 3.4811310648226632e+00 3.3504583469776597e+00 + 2.7101634949918036e+00 3.5841966322039536e+00 4.0164933681147463e+00 + 3.0530171560914301e+00 3.5324815502324296e+00 4.7305385311589294e+00 + 3.4258545367619186e+00 3.2836328103305097e+00 5.4440381673608957e+00 + 3.7949306207615843e+00 2.8254429165357631e+00 6.0752206147203101e+00 + 4.1136872745291599e+00 2.2080388115380694e+00 6.5114748736407044e+00 + 4.3713060969874746e+00 1.5414068836749921e+00 6.6876234921975115e+00 + 4.6365021232948962e+00 9.3979470090958328e-01 6.5891521095277561e+00 + 4.9590306485757747e+00 5.3678519435014138e-01 6.1804482266946241e+00 + id 14150 + loc 2.0375308394432068e-01 8.4205979108810425e-01 373 + blend 0.0000000000000000e+00 + interp 4.2581051361491379e-01:4.0636845025510665e-01:7.8048624776682063e-03:2.9087262999784624e-01:8.4421836951793228e-01:2.8762967569338604e-01:1.7045021795649899e+00:4.2580625550977763e-01:2.0504364001472899e+00:3.9516933075255745e-01:2.7844558190574373e+00:2.7272968725388291e-01:3.3404784428858694e+00 + CVs 20 + -3.8184066928013971e-01 4.8319496352577257e-01 -1.4194554558083022e-01 + -6.5587239214775828e-01 9.3333430827866926e-01 -3.0017777374065657e-01 + -8.2700562450061699e-01 1.3678113363001809e+00 -4.7904412387771578e-01 + -9.0905110841025194e-01 1.7986373049992512e+00 -6.8201213155618534e-01 + -9.1083919428428384e-01 2.2217643468220931e+00 -9.1360663416112931e-01 + -8.5737159349744618e-01 2.6311562792037133e+00 -1.1825486470268849e+00 + -7.8375785912808527e-01 3.0248384823020875e+00 -1.5086821230802916e+00 + -7.2796232663653426e-01 3.3952868362759343e+00 -1.9165603404179776e+00 + -7.3338654241890344e-01 3.7156760410843699e+00 -2.4176122131338813e+00 + -8.4101289131887480e-01 3.9580149352748943e+00 -2.9884118198566969e+00 + -1.0836953662957278e+00 4.1203568499898147e+00 -3.5748667867729327e+00 + -1.4850957354486811e+00 4.2161338092865126e+00 -4.1056056736077968e+00 + -2.0393462820685788e+00 4.2420633078358865e+00 -4.5295405597624541e+00 + -2.7072022065691672e+00 4.1701443175833983e+00 -4.8186238414704610e+00 + -3.4409347878573682e+00 3.9891950449718059e+00 -4.9495507643668208e+00 + -4.2129546545603205e+00 3.7161932701227625e+00 -4.9380832609584759e+00 + -5.0207516108233907e+00 3.3603708301983830e+00 -4.8348533156375684e+00 + -5.8073471448581762e+00 2.8839440892845207e+00 -4.6098613342926065e+00 + -6.2139880891819281e+00 2.4614771734678293e+00 -4.1242030757061077e+00 + id 14151 + loc 2.3821832239627838e-01 2.3169265687465668e-01 378 + blend 0.0000000000000000e+00 + interp 4.3056217994982293e-01:3.1744594158362965e-01:7.4050897206725730e-01:3.7411075790502357e-01:1.2087951815728732e+00:3.2508235128236929e-01:2.1065285135820808e+00:4.3055787432802345e-01:3.0223700332980830e+00:3.4457183363151145e-01:3.9933261886972389e+00 + CVs 20 + 2.0578840405425558e-01 3.4122312764567553e-01 -2.9921012986944318e-01 + 3.8246883294982165e-01 6.3874623150936960e-01 -5.6435370253355044e-01 + 5.6100773122943703e-01 9.1055493655580844e-01 -8.2076372285658306e-01 + 7.5550210846051891e-01 1.1692367591581672e+00 -1.0752606572535752e+00 + 9.6767171547852260e-01 1.4214123149934594e+00 -1.3234576912917340e+00 + 1.2035351669617957e+00 1.6693564727064634e+00 -1.5705982434706696e+00 + 1.4672110624395642e+00 1.9009085505842416e+00 -1.8284663996062278e+00 + 1.7590783790045399e+00 2.0969894848490829e+00 -2.1053627572136837e+00 + 2.0828980494451992e+00 2.2396027557673812e+00 -2.4014829187326567e+00 + 2.4408031302152757e+00 2.3105451648261122e+00 -2.7083285440572964e+00 + 2.8153663901968082e+00 2.3005365933601123e+00 -3.0198622045633150e+00 + 3.1759650996813718e+00 2.2093706456450928e+00 -3.3343750219594122e+00 + 3.4874120200604741e+00 2.0299205957890369e+00 -3.6385757717174032e+00 + 3.7031137235711094e+00 1.7507894812208207e+00 -3.9047103837769508e+00 + 3.8027171035294369e+00 1.3820645245474865e+00 -4.1207098003778846e+00 + 3.8332728307648418e+00 9.5957685617970689e-01 -4.2978912983735871e+00 + 3.8596774936980740e+00 5.4260529875733710e-01 -4.4418362562242821e+00 + 3.8993291401071541e+00 1.8855101639544980e-01 -4.5768852971660579e+00 + 3.9055599637347562e+00 -6.6835828701735434e-02 -4.8705649484488607e+00 + id 14152 + loc 2.3900705575942993e-01 7.8354382514953613e-01 401 + blend 0.0000000000000000e+00 + interp 3.8959672337996465e-01:3.8959282741273088e-01:2.7769784006149800e-01:2.5418388613804971e-01:9.0326946761050153e-01:3.6824261940280051e-01:1.5678151477136009e+00:2.9331389838213551e-01:2.0300726231391746e+00:3.8575455283236015e-01:2.9969177255479762e+00:3.4970477964164215e-01:3.7926671018087519e+00 + CVs 20 + -3.8594249911230755e-02 2.9775701757511791e-01 -2.3842755874028429e-01 + -5.8926266101854113e-02 6.0103713261682934e-01 -5.1408717472373677e-01 + -6.8152676117749555e-02 8.9741776210237134e-01 -8.0674701162475526e-01 + -6.9062690224395984e-02 1.1664165112971783e+00 -1.1076966480823118e+00 + -6.9307700075275147e-02 1.4015018099648366e+00 -1.4218190484037747e+00 + -9.1337382486530783e-02 1.6129313814896569e+00 -1.7584933634402609e+00 + -1.6571325181731411e-01 1.8063271316325378e+00 -2.1152404614405702e+00 + -3.1391073253275070e-01 1.9753758872375289e+00 -2.4734343893306208e+00 + -5.3955051178906122e-01 2.1090899607524185e+00 -2.8082395516202108e+00 + -8.2961702888486744e-01 2.2007943637500151e+00 -3.0967278825618560e+00 + -1.1593400547324553e+00 2.2539756871575989e+00 -3.3227719776734226e+00 + -1.5004007882732560e+00 2.2807566173867686e+00 -3.4783344887303120e+00 + -1.8438250865453303e+00 2.2890885740134319e+00 -3.5710240375503854e+00 + -2.2031566542353520e+00 2.2663485074791518e+00 -3.6247951899586615e+00 + -2.5739437755472476e+00 2.1994327701778218e+00 -3.6473488709301560e+00 + -2.9199451712459807e+00 2.0996697070026813e+00 -3.6012737080756891e+00 + -3.2230516616716205e+00 1.9678378157810958e+00 -3.4555572729790645e+00 + -3.5329011352312705e+00 1.7761661979062906e+00 -3.3301876544175517e+00 + -3.8462830893096598e+00 1.5875193443450326e+00 -3.5624706076815760e+00 + id 14153 + loc 6.9674360752105713e-01 1.5739347040653229e-01 402 + blend 0.0000000000000000e+00 + interp 3.8688250394436463e-01:3.1416911555975546e-01:2.6161629747237325e-01:3.8687863511932519e-01:1.0994441032214246e+00:3.1797062736034343e-01:2.0075181868039489e+00:3.1939769322907108e-01:2.9939298716993834e+00:3.8529733563110680e-01:3.7346864184510848e+00 + CVs 20 + 3.1955851547522757e-01 3.4044376460418879e-01 1.4965999509511174e-01 + 6.2796749962368337e-01 6.7927093718412290e-01 3.2152854860311841e-01 + 9.2547066165748948e-01 9.9390286831563057e-01 5.0993801939871430e-01 + 1.2201312180907142e+00 1.2508959180225432e+00 6.9046489498996499e-01 + 1.5218434664842397e+00 1.4314202064201389e+00 8.4376534705895989e-01 + 1.8395387419343217e+00 1.5375932992840242e+00 9.7198597749724847e-01 + 2.1817941307271731e+00 1.5732522601314769e+00 1.0904902396229179e+00 + 2.5505602888489038e+00 1.5318122882659930e+00 1.2204517456535153e+00 + 2.9192434862193957e+00 1.4021898818037311e+00 1.3800300449721563e+00 + 3.2314138487007087e+00 1.1862827004112637e+00 1.5670162074971621e+00 + 3.4393901017679873e+00 9.0100750556485154e-01 1.7599980791956291e+00 + 3.5474465097273105e+00 5.5539468316549256e-01 1.9499468391124122e+00 + 3.6097567004802458e+00 1.5179940599545427e-01 2.1420770977575057e+00 + 3.7032520516395557e+00 -2.9481056899403135e-01 2.3393689704604164e+00 + 3.8884533087800661e+00 -7.5433148961667706e-01 2.5401107457789425e+00 + 4.1797206925375994e+00 -1.1846001215910040e+00 2.7354860499306266e+00 + 4.5439977255494455e+00 -1.5569026849454244e+00 2.9155211536043080e+00 + 4.9284886678307656e+00 -1.8696180852399773e+00 3.0792032652129753e+00 + 5.2222587498506305e+00 -2.0962297418802436e+00 3.2081168525549542e+00 + id 14154 + loc 5.1567620038986206e-01 8.6942994594573975e-01 400 + blend 0.0000000000000000e+00 + interp 3.8850494747319120e-01:3.3324451364560348e-01:6.2095634861973359e-01:3.0050307570805002e-01:1.0302950188115276e+00:3.8850106242371646e-01:1.6526702960353292e+00:3.2690048991897686e-01:2.1147691419448433e+00:3.0616685904117097e-01:3.0404786117342981e+00:2.6788115513717914e-01:3.9718355461504808e+00 + CVs 20 + -8.8151050675286377e-02 4.0031294416586111e-01 -4.0770098973788604e-01 + -1.6938847880273189e-01 7.4427338348526140e-01 -8.1032609497352037e-01 + -2.2065337081438727e-01 1.0178403655294546e+00 -1.2304155316214971e+00 + -2.5832312943111069e-01 1.2220703336565424e+00 -1.6684723560279555e+00 + -2.8778478465773211e-01 1.3504019990317295e+00 -2.1041995447306010e+00 + -3.0163556314809481e-01 1.4005044234392461e+00 -2.5103055791547479e+00 + -2.9435286209811296e-01 1.3795149852868263e+00 -2.8622710718841153e+00 + -2.6959426915919371e-01 1.3050382529772233e+00 -3.1445634738017469e+00 + -2.3908727892731765e-01 1.2023122484426387e+00 -3.3558252185556467e+00 + -2.1817112695278124e-01 1.0944640327345561e+00 -3.5102096090033230e+00 + -2.1936065954892014e-01 9.9391097937804340e-01 -3.6463804271026805e+00 + -2.4060775462935352e-01 8.9638172296732921e-01 -3.8043928659259700e+00 + -2.7045049688475808e-01 7.9752465664367045e-01 -3.9806613190145228e+00 + -2.9612839662961854e-01 7.1128183163057668e-01 -4.1444418087490540e+00 + -3.0114291470655191e-01 6.4551130620329067e-01 -4.2944612108252329e+00 + -2.8183285681073589e-01 5.5901641525229984e-01 -4.4668396501973691e+00 + -2.6838811136052243e-01 3.9936286665431053e-01 -4.6786797037167638e+00 + -3.1042194796624739e-01 1.7025237808911053e-01 -4.9090251144424695e+00 + -5.0060174806521052e-01 -8.5834947150581264e-02 -5.0935251509543589e+00 + id 14155 + loc 6.5564554929733276e-01 7.4032485485076904e-01 395 + blend 0.0000000000000000e+00 + interp 4.3366357167961406e-01:2.7223492399254634e-01:2.4533272562193387e-01:3.2672753111186109e-01:9.9943597635663173e-01:2.9437687429514015e-01:1.6396386562231613e+00:4.3365923504389731e-01:2.3085285575790069e+00:2.8452628456122003e-01:3.0683627508474616e+00:3.3313139255002439e-01:3.8309418544721652e+00 + CVs 20 + 5.2866291165124002e-01 9.8170957157313277e-02 -4.4056896642698928e-01 + 9.8049145581189856e-01 1.2893505275702843e-01 -7.8680403378282604e-01 + 1.4253628298559351e+00 1.4304514065837393e-01 -1.0914379751667820e+00 + 1.8937850798081315e+00 1.5694988497030615e-01 -1.3738996552496172e+00 + 2.3790327750429268e+00 1.6199390882495734e-01 -1.6313780837836565e+00 + 2.8727065484926912e+00 1.4744350099053993e-01 -1.8655549745765416e+00 + 3.3648427254233608e+00 1.0207171861558773e-01 -2.0780977378492498e+00 + 3.8433399605164773e+00 1.4692260505237975e-02 -2.2630067480631348e+00 + 4.2979937013067495e+00 -1.2103081636614643e-01 -2.4108681805473893e+00 + 4.7249144445304720e+00 -3.0554981935371073e-01 -2.5242991699347437e+00 + 5.1244769610853593e+00 -5.3684584199646057e-01 -2.6169226005396711e+00 + 5.4973909561524685e+00 -8.0454262254976960e-01 -2.6924022647819061e+00 + 5.8442607828300250e+00 -1.0889371491706195e+00 -2.7433638804187344e+00 + 6.1677696060168614e+00 -1.3754094062668769e+00 -2.7715721181891704e+00 + 6.4698028471186912e+00 -1.6632359304696327e+00 -2.7915387752173135e+00 + 6.7448982306907421e+00 -1.9513228450509552e+00 -2.8109818526369184e+00 + 6.9834012782354442e+00 -2.2243456910700843e+00 -2.8250553276645620e+00 + 7.1817192757081862e+00 -2.4684296714916458e+00 -2.8331167434353759e+00 + 7.3429266880722830e+00 -2.7114379063869074e+00 -2.8515114618028599e+00 + id 14156 + loc 2.7781876921653748e-01 5.8200705051422119e-01 379 + blend 0.0000000000000000e+00 + interp 4.4248588220831758e-01:2.1929583373055139e-01:4.4560929686077166e-04:3.8503578402177269e-01:9.9395070799598328e-01:2.8443077763858676e-01:1.9809238746058242e+00:4.4248145734949551e-01:2.9175780568535301e+00:2.9636965631391177e-01:3.2724520935336914e+00 + CVs 20 + -2.2034677064244132e-01 4.3589885905631109e-01 2.0039410079104308e-01 + -4.2760464234790602e-01 8.4115620718454964e-01 4.6588689330267641e-01 + -6.2981004335559598e-01 1.1767845893571827e+00 8.0173890538700943e-01 + -8.0985806395236404e-01 1.4627713492016783e+00 1.1476661559431411e+00 + -9.6951297190876540e-01 1.7421445323993816e+00 1.4447015184212906e+00 + -1.1347711758171311e+00 2.0278369168971810e+00 1.6722641951057766e+00 + -1.3217945768744634e+00 2.3086177301611244e+00 1.8296923983173203e+00 + -1.5273876230365855e+00 2.5689547857279740e+00 1.9307661292089442e+00 + -1.7582722059694467e+00 2.8056029857942191e+00 2.0061926812634283e+00 + -2.0293685236984271e+00 3.0187293927232695e+00 2.0806107938780931e+00 + -2.3533576586842173e+00 3.2055276570885414e+00 2.1666568044548513e+00 + -2.7335921434895565e+00 3.3594179234167352e+00 2.2644740466302871e+00 + -3.1541288900953974e+00 3.4647662539463546e+00 2.3667958011513099e+00 + -3.6010552738107604e+00 3.5017814336785573e+00 2.4642543641461505e+00 + -4.0745392380095140e+00 3.4497273783570650e+00 2.5355437456456476e+00 + -4.5256866290146940e+00 3.3041818513246879e+00 2.5508220224647493e+00 + -4.8436100274520815e+00 3.1794380677060907e+00 2.5113312757185264e+00 + -5.0210771185629222e+00 3.1717293516978495e+00 2.4068051992213468e+00 + -5.1434065929027479e+00 2.9229818679366182e+00 2.7109334177731332e+00 + id 14157 + loc 6.6826492547988892e-02 8.1437671184539795e-01 412 + blend 0.0000000000000000e+00 + interp 4.5568876837872596e-01:4.5568421149104221e-01:9.8901428482388920e-02:2.5398981198530513e-01:9.9592858360693437e-01:3.5049391357201670e-01:2.0261425862267801e+00:3.9597209325936600e-01:2.7945336885879044e+00:3.5442055724166643e-01:3.1928780453649144e+00:3.7378694188048289e-01:3.9087103548339108e+00 + CVs 20 + 7.8951326097099772e-01 2.0508590169456803e-01 -1.5535854672414601e-01 + 1.2873869156089321e+00 2.7741775778998007e-01 -3.2470173135428021e-01 + 1.7169452654015547e+00 3.0145558219484392e-01 -4.9864483714831243e-01 + 2.1710828381001779e+00 3.1143900517572243e-01 -6.7283613123429931e-01 + 2.6440370750034923e+00 2.9696209854605632e-01 -8.3784770900345928e-01 + 3.1275640558419382e+00 2.5298994296675559e-01 -9.8073582898818457e-01 + 3.6115123472801582e+00 1.8327131932790630e-01 -1.0882750397952647e+00 + 4.0844177190633726e+00 9.4867014130297633e-02 -1.1507821795435038e+00 + 4.5360585478375173e+00 -7.5955659094804062e-03 -1.1631054805234076e+00 + 4.9576988134082214e+00 -1.1861447850681794e-01 -1.1237524354660844e+00 + 5.3364593956889266e+00 -2.2758352662643588e-01 -1.0333303615936020e+00 + 5.6626706803452223e+00 -3.2190200678340464e-01 -8.9301482170093138e-01 + 5.9549337506176814e+00 -4.1174411148766077e-01 -7.0587456145100214e-01 + 6.2498114018882518e+00 -5.3964522504084944e-01 -4.8940719997132753e-01 + 6.5596493906029183e+00 -7.3646702771362427e-01 -2.6846458421155628e-01 + 6.8751617320048073e+00 -1.0033008226065929e+00 -5.5804652001248289e-02 + 7.1843363053722520e+00 -1.3349222973943282e+00 1.3598765818714564e-01 + 7.4713627283704236e+00 -1.7205353007591702e+00 2.8432606486077217e-01 + 7.6571051030614843e+00 -2.0680996222990449e+00 3.5422841701196695e-01 + id 14158 + loc 8.8046455383300781e-01 4.8373687267303467e-01 399 + blend 0.0000000000000000e+00 + interp 5.4834238374765121e-01:4.1828161345750381e-01:2.7946442164605845e-04:4.2601738557320062e-01:3.3362763442122800e-01:4.2359283815250254e-01:9.2122035959044923e-01:5.4833690032381377e-01:1.1626460554369955e+00:3.5840729735367804e-01:1.9911555886327021e+00:4.2165958796910319e-01:2.7529969324056118e+00:3.6543208334310351e-01:3.6172112036660575e+00 + CVs 20 + 2.3377016124146199e-01 2.6971006315688711e-01 4.9705417495085322e-02 + 4.4469790536880205e-01 5.5095986041852052e-01 1.3161445333784497e-01 + 6.4754590585547744e-01 8.3344724189243280e-01 2.3939121684590983e-01 + 8.5103161736748301e-01 1.1093941195191492e+00 3.7275922272850276e-01 + 1.0576980572467398e+00 1.3742282544949502e+00 5.3723106770661178e-01 + 1.2679230115417526e+00 1.6213236383094611e+00 7.3712163848837986e-01 + 1.4788544073113292e+00 1.8425875062496666e+00 9.7682569486301185e-01 + 1.6836459287498378e+00 2.0287716410365153e+00 1.2594625503186878e+00 + 1.8701746080754580e+00 2.1692776883367286e+00 1.5851107751363460e+00 + 2.0212344053389781e+00 2.2503372446617229e+00 1.9485344002566862e+00 + 2.1184260170732014e+00 2.2586458459141130e+00 2.3383190424601188e+00 + 2.1609604270348055e+00 2.1873655560384160e+00 2.7441794478214390e+00 + 2.1757631489942248e+00 2.0309434062836194e+00 3.1619873769114304e+00 + 2.1997400457360046e+00 1.7726301911649296e+00 3.5699580338022390e+00 + 2.2627571450638757e+00 1.3961944866651752e+00 3.9124159259327365e+00 + 2.3841941014271066e+00 9.2086218795347996e-01 4.1491686664590191e+00 + 2.5874627371059282e+00 3.8983513844817019e-01 4.3041707696142950e+00 + 2.8872335891523182e+00 -1.6213897357117846e-01 4.4143967745425314e+00 + 3.1254259279792604e+00 -7.1781639318548462e-01 4.6113447888984531e+00 + id 14159 + loc 6.2340229749679565e-01 1.2854333221912384e-01 1079 + blend 0.0000000000000000e+00 + interp 3.8897335151648971e-01:3.0426795313308475e-01:7.3232590736726610e-01:3.4727044897151615e-01:1.0266760351118231e+00:2.6004802861591347e-01:1.9866185696096150e+00:2.8016819682161670e-01:2.5894177018707092e+00:3.8896946178297453e-01:3.1956670137553824e+00:3.0439864246401649e-01:3.9962297931513664e+00 + CVs 20 + 9.3489102162319468e-02 4.8850273558281365e-01 -2.3046680693014943e-01 + 1.6168801641085340e-01 9.4768275795934698e-01 -3.4944676347371939e-01 + 2.1112392615799197e-01 1.3847327765987223e+00 -4.1297221302873494e-01 + 2.3187376434875978e-01 1.8182859737570916e+00 -4.2855515205822658e-01 + 2.0554119188424469e-01 2.2477929856462948e+00 -3.8182757017882307e-01 + 1.0733698472595321e-01 2.6659770307297102e+00 -2.5307664000593555e-01 + -8.4537735043650031e-02 3.0418271267062380e+00 -2.7199538573769333e-02 + -3.6662134809382874e-01 3.3240662929515139e+00 2.8334395441923910e-01 + -7.0141495101435813e-01 3.4793306908163881e+00 6.3592971884666771e-01 + -1.0364629031876467e+00 3.5189623721476093e+00 9.8376409701735812e-01 + -1.3432132279407978e+00 3.4785509642746133e+00 1.3060410195359262e+00 + -1.6226695192701492e+00 3.3810725775857930e+00 1.6053691917574402e+00 + -1.8838764655666433e+00 3.2326739631642285e+00 1.8872897028749072e+00 + -2.1383304469824336e+00 3.0283398749514925e+00 2.1538395944726876e+00 + -2.3949259252823283e+00 2.7472961212134526e+00 2.4098331940282169e+00 + -2.6313722445978418e+00 2.4064391272926957e+00 2.6189497631665954e+00 + -2.8690471944300269e+00 2.0466823123693780e+00 2.6886055894317979e+00 + -3.0834508617027043e+00 1.6268648878788003e+00 2.6167961587193971e+00 + -2.9601945600234258e+00 1.5920820778869704e+00 2.6635829769852997e+00 + id 14160 + loc 9.3211144208908081e-01 5.9025999158620834e-02 396 + blend 0.0000000000000000e+00 + interp 4.6417195857720617e-01:4.0486789747473356e-01:5.3048580197541106e-03:2.9495684869644573e-01:6.8077378074439254e-01:2.9945963787937641e-01:1.1072298602780861e+00:3.8208461654886211e-01:2.1751024741844200e+00:4.6416731685762042e-01:2.9156012957592958e+00:4.5614634663302639e-01:3.0057588144403313e+00:3.1008387144046101e-01:3.5841833838650232e+00 + CVs 20 + -6.3479781360888576e-01 2.1535600760294268e-01 4.6775180024807339e-01 + -1.1224801926010870e+00 3.1140226259352333e-01 8.3160115228829112e-01 + -1.5837702011978871e+00 3.5296207283697334e-01 1.1620380408026125e+00 + -2.0660034476263598e+00 3.5886584547475564e-01 1.4811258758008048e+00 + -2.5566206999884109e+00 3.2463879414536878e-01 1.7777230137731683e+00 + -3.0411297006461977e+00 2.5229060150065608e-01 2.0467791877728985e+00 + -3.5055644770677135e+00 1.4943749821957475e-01 2.2880715808430860e+00 + -3.9376123178199651e+00 2.6539599368581301e-02 2.5020052519031868e+00 + -4.3328688225510428e+00 -1.0571092642762925e-01 2.6935775150231440e+00 + -4.6987993752356942e+00 -2.4203516387284441e-01 2.8782089430752458e+00 + -5.0406577383466473e+00 -3.8640435740844659e-01 3.0754621532192088e+00 + -5.3507756119084862e+00 -5.4304672800283038e-01 3.2965585433990032e+00 + -5.6186577673524170e+00 -7.1276067064741611e-01 3.5443494281555594e+00 + -5.8422404764448359e+00 -8.9909652949618701e-01 3.8167505037969227e+00 + -6.0226623893137115e+00 -1.1026452458720661e+00 4.1049339115908445e+00 + -6.1604255200359823e+00 -1.3124641344004222e+00 4.3986487712477444e+00 + -6.2572464306617164e+00 -1.5269707157202181e+00 4.6950768224625676e+00 + -6.3057595702912028e+00 -1.7533235399776079e+00 4.9793200499304424e+00 + -6.2343304058948714e+00 -2.0073985200687083e+00 5.1414617069897837e+00 + id 14161 + loc 8.0509699881076813e-02 2.1026742458343506e-01 393 + blend 0.0000000000000000e+00 + interp 4.1741802724419669e-01:3.2452984584928801e-01:8.2582577702544457e-01:4.1321978946461047e-01:1.2565481797220115e+00:3.1670617153295300e-01:2.0486937491782582e+00:2.7146341213962027e-01:2.9350333397063286e+00:3.6583444723410019e-01:3.1991628416325049e+00:4.1741385306392426e-01:3.9973296163749641e+00 + CVs 20 + -1.9631236994536116e-01 2.0794888563851355e-01 3.2709236112957224e-01 + -3.7843181000831072e-01 4.1908203486497086e-01 5.9627936365935674e-01 + -5.5183256790018997e-01 6.3203388304383346e-01 8.0963706429914151e-01 + -7.1669950984269204e-01 8.4650222035584266e-01 9.7344145177521701e-01 + -8.7111932505290335e-01 1.0663996484413767e+00 1.0919444322617764e+00 + -1.0217990075713979e+00 1.3042251904502460e+00 1.1773245252033417e+00 + -1.1858872647585319e+00 1.5728041833775226e+00 1.2532752018121136e+00 + -1.3918338888422834e+00 1.8684651801428034e+00 1.3560016536903872e+00 + -1.6701583584850705e+00 2.1586861345074624e+00 1.5227256762270960e+00 + -2.0338726523829482e+00 2.3915379786059678e+00 1.7752445337427933e+00 + -2.4630935051285689e+00 2.5186056517031910e+00 2.1154272624958157e+00 + -2.9120644634458928e+00 2.5170327396241308e+00 2.5296038464182029e+00 + -3.3417540095691391e+00 2.4047623782127125e+00 3.0016736683540159e+00 + -3.7375307191835940e+00 2.2136975256686906e+00 3.5241944230301825e+00 + -4.0694471016112113e+00 1.9555917516887005e+00 4.0840882970844969e+00 + -4.2709741977882185e+00 1.6508535968778804e+00 4.6401880944876313e+00 + -4.2963190925981536e+00 1.3657634022987801e+00 5.1418112936988249e+00 + -4.1439150767672759e+00 1.1758687166005684e+00 5.5802562478968607e+00 + -3.7693458170588787e+00 1.0998445029341921e+00 6.0684925674708570e+00 + id 14162 + loc 9.2105835676193237e-01 7.0192891359329224e-01 373 + blend 0.0000000000000000e+00 + interp 5.9023403413430031e-01:5.4227865315173251e-01:4.1874042527473399e-02:2.7220320033335799e-01:7.8208172614657367e-01:3.8783675691519276e-01:1.1588404056919794e+00:2.9227252261892306e-01:1.9453755904116750e+00:3.0764360915493638e-01:2.9886514482200548e+00:5.9022813179395894e-01:3.6081762336563790e+00 + CVs 20 + -2.5246001376154997e-01 2.8606752347540482e-01 -1.1016056255323936e-01 + -4.9264357981094542e-01 5.5779244856619770e-01 -1.9944278728348716e-01 + -7.3469321959643619e-01 8.1734473723537882e-01 -2.8292491216824200e-01 + -9.8327024494658954e-01 1.0743872003599593e+00 -3.7064002297221588e-01 + -1.2320708909655969e+00 1.3503144882449856e+00 -4.7056500554814484e-01 + -1.4714635192474774e+00 1.6630627390851991e+00 -6.0173698285132748e-01 + -1.6911058053708967e+00 1.9993402942250831e+00 -7.9873454725105941e-01 + -1.8784461815954936e+00 2.3160515874745577e+00 -1.0897480016138661e+00 + -2.0202341052833317e+00 2.5699066735866953e+00 -1.4759321844857365e+00 + -2.1056543116976516e+00 2.7332129883797314e+00 -1.9383401815950818e+00 + -2.1264027037349349e+00 2.7975194924435316e+00 -2.4511682227275493e+00 + -2.0758194766951146e+00 2.7679788577887519e+00 -2.9820935119236323e+00 + -1.9605846523510428e+00 2.6376112982583972e+00 -3.4798587048351877e+00 + -1.8143533202527338e+00 2.3905369244547465e+00 -3.8814355169587778e+00 + -1.6910157914929438e+00 2.0484434117474812e+00 -4.1635862307095417e+00 + -1.6530387757007956e+00 1.6703998056743818e+00 -4.3642549446317558e+00 + -1.7502170194541977e+00 1.3282364266833877e+00 -4.5251762824942894e+00 + -1.9936500954115408e+00 1.0960612708765032e+00 -4.6507668724473916e+00 + -2.4000977311228429e+00 8.5853285898567511e-01 -4.8634572917562400e+00 + id 14163 + loc 8.4398984909057617e-02 7.7106177806854248e-01 378 + blend 0.0000000000000000e+00 + interp 3.3338200438698923e-01:2.4308425205526013e-01:2.9479834232948277e-01:2.5872017084326970e-01:1.5022364873952583e+00:2.8893377539747028e-01:2.3067055139941237e+00:3.3337867056694537e-01:2.9869473426974800e+00:2.9341339549006856e-01:3.5287634657442641e+00 + CVs 20 + 5.1333437405439497e-01 3.2419650891045948e-01 3.2009230805732980e-01 + 9.3205570237505753e-01 5.3026951731809158e-01 5.5363652975087185e-01 + 1.3315580008447714e+00 6.7212024796435443e-01 7.5811731574507035e-01 + 1.7399270273550960e+00 7.8120050556088860e-01 9.6096765947418405e-01 + 2.1447900464062553e+00 8.7096248544102617e-01 1.1686299214723450e+00 + 2.5361674961268581e+00 9.4879186127626902e-01 1.3872882297826861e+00 + 2.9154403283148684e+00 1.0093340536126263e+00 1.6212021325055530e+00 + 3.2861416368825207e+00 1.0400400909804155e+00 1.8714422745985715e+00 + 3.6438660895730051e+00 1.0294252566368045e+00 2.1381723258224770e+00 + 3.9778893220797720e+00 9.7312962568313699e-01 2.4187694884391182e+00 + 4.2837314278412624e+00 8.7239139269638022e-01 2.7055187115060884e+00 + 4.5611717516277333e+00 7.2935436148478816e-01 2.9830737940393961e+00 + 4.8145130040162734e+00 5.2387137682656260e-01 3.2405347423324100e+00 + 5.0414528687647273e+00 2.0150769442638561e-01 3.4694117738368293e+00 + 5.2467547402557919e+00 -2.5543899284640759e-01 3.6721802642601284e+00 + 5.4555845813135058e+00 -7.8802437962477168e-01 3.8841111004177584e+00 + 5.6991617790889979e+00 -1.3032994492260959e+00 4.1256735687853352e+00 + 6.0019765887154097e+00 -1.7252532979799517e+00 4.3648634440988667e+00 + 6.3662112359665670e+00 -2.0143387936814197e+00 4.5599196415133179e+00 + id 14164 + loc 9.5345389842987061e-01 4.9034535884857178e-01 401 + blend 0.0000000000000000e+00 + interp 4.4774796909371567e-01:4.4774349161402477e-01:3.5903878153281665e-02:2.0842934512159561e-01:8.5851835452332659e-01:2.5346364459987930e-01:1.9678204111577564e+00:3.8741352320638195e-01:2.2243648909148011e+00:3.3072139490072494e-01:2.9900453893211969e+00:3.6985659618290012e-01:3.6143343492621409e+00 + CVs 20 + 1.2573880924057951e-01 3.8451258083140988e-01 1.0266238882448177e-01 + 2.5095161370376262e-01 7.8043333436876949e-01 2.3095764281532830e-01 + 3.4734522240534532e-01 1.1890367559775656e+00 3.8833115584707445e-01 + 4.0587031393135098e-01 1.5994763673974048e+00 5.7867754908802338e-01 + 4.3230007093432199e-01 1.9987817067438922e+00 8.0375604620893426e-01 + 4.3645220489237346e-01 2.3781304821169025e+00 1.0606762327109334e+00 + 4.2984917228752395e-01 2.7338266572763739e+00 1.3458866348828038e+00 + 4.2597318523518390e-01 3.0643840564308245e+00 1.6588005512862050e+00 + 4.3721240701820119e-01 3.3676506848526251e+00 2.0067760945424911e+00 + 4.6848295660734374e-01 3.6343039255995144e+00 2.4067215185517661e+00 + 5.1731446128883007e-01 3.8389816578423206e+00 2.8771792930358893e+00 + 5.8325921074265719e-01 3.9361545539167699e+00 3.4276128019221153e+00 + 6.7364741372967507e-01 3.8740840803411594e+00 4.0317535107775804e+00 + 8.0468588030284571e-01 3.6581652074517303e+00 4.6085313692527974e+00 + 1.0023718702410489e+00 3.3776374402075535e+00 5.0877724249296623e+00 + 1.2705699356714057e+00 3.1597344175862094e+00 5.4409718083434893e+00 + 1.5282894000484806e+00 3.1358713944187411e+00 5.6599060679726865e+00 + 1.6684655360656349e+00 3.2838645050944075e+00 5.7859438869683730e+00 + 1.9965018919333426e+00 3.3324562031815335e+00 5.9774225935164829e+00 + id 14165 + loc 4.9502176046371460e-01 5.4230356216430664e-01 402 + blend 0.0000000000000000e+00 + interp 3.5336010910464921e-01:3.5335657550355820e-01:6.5665006241178991e-01:2.8551700647781525e-01:1.4272311473376895e+00:3.3690673706139768e-01:2.3045840737328378e+00:2.6574720283334530e-01:3.0315157540765019e+00:2.8540442504430180e-01:3.9475982898459985e+00 + CVs 20 + -7.6103294684522552e-02 3.0030129627323293e-01 -9.3269440349467561e-02 + -1.5474359299093748e-01 6.2633865190267424e-01 -2.2465801305778813e-01 + -2.0920501377924469e-01 9.6953912704744150e-01 -3.8664928528671466e-01 + -2.5106594606162685e-01 1.3202273834005021e+00 -5.7394304046384170e-01 + -3.2716138977973075e-01 1.6682201857037626e+00 -7.8381255468541022e-01 + -4.8628327472347499e-01 1.9926694475685032e+00 -1.0143784479802262e+00 + -7.5342688703765270e-01 2.2543552344094460e+00 -1.2669603952666253e+00 + -1.1117377274071076e+00 2.4097357573211884e+00 -1.5504961991161106e+00 + -1.5151664602751780e+00 2.4263992835225840e+00 -1.8822978298744277e+00 + -1.8990628702938301e+00 2.2721056532401547e+00 -2.2668653090020370e+00 + -2.1928703234472948e+00 1.9530374940343993e+00 -2.6653821495294823e+00 + -2.4133672609354782e+00 1.5535265125890305e+00 -3.0264732442130726e+00 + -2.6517821569298521e+00 1.1696426759079430e+00 -3.3256456523847939e+00 + -2.9563691780886976e+00 8.8632766482353920e-01 -3.5456918816676923e+00 + -3.2933408768940344e+00 7.2871014240890342e-01 -3.6926367110541163e+00 + -3.6232502072692672e+00 6.2125848943213302e-01 -3.8161859449891598e+00 + -3.9487133669634900e+00 4.9605910608063142e-01 -3.9581684504682668e+00 + -4.2689670160218238e+00 3.4137739072246420e-01 -4.1127176008129247e+00 + -4.5728849885209648e+00 1.6345511417288183e-01 -4.2317928478929607e+00 + id 14166 + loc 2.8413835167884827e-01 8.1550872325897217e-01 412 + blend 0.0000000000000000e+00 + interp 3.8016753765653288e-01:3.3868973767336663e-01:2.6595428414749600e-03:3.1986065073416214e-01:8.9019086467813691e-01:3.5352325305971655e-01:1.4207603323824454e+00:3.4363439064103457e-01:2.0084187971164504e+00:3.1653964207361224e-01:2.8942607217839385e+00:3.8016373598115633e-01:3.4356291161735690e+00 + CVs 20 + 8.5922581160103750e-01 1.0612015904235203e-01 -2.2321858508181433e-01 + 1.4331870199855181e+00 6.4369288932362267e-02 -4.2721559207081333e-01 + 1.9557870524547150e+00 -1.8129671724850083e-02 -5.9712401105906754e-01 + 2.5018607844929286e+00 -1.1105883474647038e-01 -7.2515210586438339e-01 + 3.0568183300851035e+00 -2.1927131809325506e-01 -8.0351441076690355e-01 + 3.6056447600359891e+00 -3.4358510704705614e-01 -8.2514584816137704e-01 + 4.1325169070541845e+00 -4.8165557384736890e-01 -7.8766586338360689e-01 + 4.6240797472012343e+00 -6.2978550161178060e-01 -6.9711191848500165e-01 + 5.0731276161905026e+00 -7.8301226250139044e-01 -5.6343191289129346e-01 + 5.4770426959566176e+00 -9.3663326515037615e-01 -3.9822496871747792e-01 + 5.8360143862673617e+00 -1.0955779584632663e+00 -2.2443077274394041e-01 + 6.1598755752059660e+00 -1.2823352417833067e+00 -8.1211492798955343e-02 + 6.4663871163080380e+00 -1.5167168518799916e+00 2.4465022628640254e-03 + 6.7671161850693746e+00 -1.7917374699090227e+00 3.2190900044981374e-02 + 7.0636982460108610e+00 -2.0920265962973650e+00 2.2168448198897850e-02 + 7.3487235865624179e+00 -2.4081577814498565e+00 -3.0634563942806836e-02 + 7.6125038327474748e+00 -2.7285951086889169e+00 -1.3297304144956879e-01 + 7.8500650578188367e+00 -3.0346281532535579e+00 -2.7619207333440798e-01 + 8.0887556481067300e+00 -3.2430163396014882e+00 -3.5699682145853506e-01 + id 14167 + loc 1.9477374851703644e-01 3.3827492594718933e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7193134330859821e-01:2.8534719976231948e-01:1.8326341548210978e-01:3.9055857606563260e-01:9.2617898999604509e-01:4.3860161845446249e-01:1.5781832917254417e+00:3.6644524101278136e-01:1.9999815358151707e+00:4.5944438581123576e-01:2.4089432205293528e+00:4.7192662399516516e-01:3.0028167855884975e+00:4.5959132493178789e-01:3.5241258539216838e+00 + CVs 20 + 1.2110001983287513e-01 3.9932957885789777e-01 1.3298099643985742e-01 + 1.6170077303968811e-01 7.0641405121266077e-01 2.0787192313606223e-01 + 1.6907966656506851e-01 9.7454728992275597e-01 2.5212772000866757e-01 + 1.7680852770838362e-01 1.2223101156024510e+00 2.8839657043344591e-01 + 1.9225928698632833e-01 1.4398613228554065e+00 3.1828890859804732e-01 + 2.3446242649913251e-01 1.6140807097335055e+00 3.4793824371333132e-01 + 3.2659730543056908e-01 1.7508266806482802e+00 3.8184484910187411e-01 + 4.7444525523971903e-01 1.8901029120547519e+00 4.1183050050501790e-01 + 6.3757094698074901e-01 2.0801781568942994e+00 4.1914522303262047e-01 + 7.3696962092196039e-01 2.3185525540473795e+00 3.9327204990857501e-01 + 7.2633142218967073e-01 2.5479540358232886e+00 3.4260852760734328e-01 + 6.1464215555430424e-01 2.7178877226263571e+00 2.8151227138323726e-01 + 4.2893184408882057e-01 2.8079604749188753e+00 2.2004614947442502e-01 + 1.9141648222816254e-01 2.8186994727241901e+00 1.6290338296631224e-01 + -8.9191857251129214e-02 2.7701029647958046e+00 1.0608787847846979e-01 + -4.3583649927012380e-01 2.6984819862384679e+00 3.5651831873036166e-02 + -8.8139477287043966e-01 2.5728229786157732e+00 -5.3786222453953536e-02 + -1.2667789246061907e+00 2.2652195700102808e+00 -1.3968909592907952e-01 + -1.2336834694342222e+00 1.8888895254958447e+00 -2.1292998763081361e-01 + id 14168 + loc 7.3272639513015747e-01 7.5721013545989990e-01 404 + blend 0.0000000000000000e+00 + interp 4.3093998261282973e-01:3.1748789619752299e-01:3.5470531564693264e-02:3.1976079231392646e-01:9.4849432476764617e-01:4.2699776208551188e-01:1.5217043680129534e+00:3.8380185176568610e-01:1.9989554806055772e+00:4.3093567321300363e-01:2.5497042007962540e+00:3.3448374069163755e-01:2.9880104519856516e+00:3.5736320487211370e-01:3.4007344274771829e+00 + CVs 20 + -4.1264820753435932e-03 1.2115462893863371e-01 -5.9392914984173636e-02 + -7.9239063566219209e-03 2.4145041853796820e-01 -8.6055630817271037e-02 + -1.2371931883273901e-02 3.5429988383179667e-01 -9.9313042723291001e-02 + -1.3983463222995152e-02 4.6337272984623296e-01 -1.0535222096136079e-01 + -7.0763614974894140e-03 5.7126909411518878e-01 -1.0615309576596686e-01 + 1.3835825589735840e-02 6.8019115674147979e-01 -1.0301398947046052e-01 + 5.2655591092111376e-02 7.9124395643641954e-01 -9.6187409274861482e-02 + 1.0888967151972284e-01 9.0497317624033435e-01 -8.4101807872045797e-02 + 1.7917762719520686e-01 1.0211936981680290e+00 -6.4981203768931989e-02 + 2.6193488394502734e-01 1.1380404536948006e+00 -4.2141384164368967e-02 + 3.5915349768086996e-01 1.2525159044762963e+00 -2.5747671429499130e-02 + 4.7177126227861332e-01 1.3619861249663057e+00 -2.6233509612437089e-02 + 5.9477326979806111e-01 1.4663324572683720e+00 -4.4617587467395803e-02 + 7.2227970950287546e-01 1.5670372392788776e+00 -7.4541762307475834e-02 + 8.5466223655480156e-01 1.6635245165246557e+00 -1.1179009045290977e-01 + 9.9609046596803807e-01 1.7526513383484963e+00 -1.5856277547426423e-01 + 1.1515186047761583e+00 1.8302697252678553e+00 -2.1865229352710219e-01 + 1.3268128751042814e+00 1.8921448110514039e+00 -2.9025601900382464e-01 + 1.4723198352551670e+00 1.9808065117624896e+00 -3.3383416876207705e-01 + id 14169 + loc 6.4355450868606567e-01 3.3488109707832336e-01 396 + blend 0.0000000000000000e+00 + interp 4.2226584008377038e-01:3.1153652899315726e-01:1.5870313627327159e-02:4.2226161742536955e-01:7.0318878017070574e-01:3.1999497330367410e-01:1.0367192686970290e+00:2.8606069072783680e-01:2.1370596211131501e+00:3.1755133342920216e-01:3.0408312434335816e+00 + CVs 20 + -7.1293503015603821e-01 1.8061477405208659e-01 3.3849961398570710e-01 + -1.2409073715460552e+00 2.1588698483870278e-01 5.9868468931444729e-01 + -1.7404021112980346e+00 1.9109237138910384e-01 8.2606767487761723e-01 + -2.2728820935247005e+00 1.3958890886149322e-01 1.0310049757484725e+00 + -2.8293179023924715e+00 6.0181410167330252e-02 1.2098506926412727e+00 + -3.3985647639703860e+00 -4.6509350211358047e-02 1.3693063817124878e+00 + -3.9650729074858218e+00 -1.8038205348710590e-01 1.5214825485123451e+00 + -4.5085226144623487e+00 -3.4636143860609692e-01 1.6746839885939910e+00 + -5.0115441148827191e+00 -5.5706675599666378e-01 1.8331941553035738e+00 + -5.4607103571067448e+00 -8.3004085412567830e-01 2.0012537386767519e+00 + -5.8392693696829125e+00 -1.1663710283316675e+00 2.1812955895355040e+00 + -6.1361319002216721e+00 -1.5457422943369221e+00 2.3620669729788673e+00 + -6.3610228211745419e+00 -1.9424374358248109e+00 2.5281637999006614e+00 + -6.5316407493579005e+00 -2.3447748423970074e+00 2.6791204511341826e+00 + -6.6616896017102745e+00 -2.7489514401538186e+00 2.8199648580467160e+00 + -6.7575393123035692e+00 -3.1438653991197532e+00 2.9473090517936726e+00 + -6.8256866545783401e+00 -3.5149068605081322e+00 3.0528100887874845e+00 + -6.8771667172558102e+00 -3.8631246644379260e+00 3.1374845873647610e+00 + -6.9378430847390380e+00 -4.2461255046157032e+00 3.2402452741002268e+00 + id 14170 + loc 1.1854162812232971e-01 4.5992875099182129e-01 395 + blend 0.0000000000000000e+00 + interp 4.6950577571173513e-01:3.0620827158500219e-01:1.0904850171976177e-02:3.4861873873369398e-01:7.1210321303963164e-01:2.8552874419610408e-01:1.1228155648994087e+00:4.6950108065397805e-01:1.8881219292876104e+00:3.0837118847725620e-01:2.7591339133737791e+00:2.7749077293272106e-01:3.2693248656629321e+00 + CVs 20 + -2.8038948329674934e-01 1.3992398656511729e-01 -1.8435471475941306e-01 + -5.4478335776299969e-01 2.4647655649197928e-01 -3.4930547383026378e-01 + -8.0864266576679200e-01 3.4179981256398184e-01 -5.2854597219309407e-01 + -1.0739143761797136e+00 4.3921552440329120e-01 -7.3780691455189251e-01 + -1.3357000768800411e+00 5.3534486224299604e-01 -9.7604522797966076e-01 + -1.5913884403254301e+00 6.2470853075040056e-01 -1.2395348987826034e+00 + -1.8430528082581314e+00 7.0352220098715235e-01 -1.5255895812458780e+00 + -2.0932537111250333e+00 7.6537662705605958e-01 -1.8339513757766168e+00 + -2.3363457368711629e+00 7.9588794609289670e-01 -2.1593688883090860e+00 + -2.5608662126892772e+00 7.7813244699241668e-01 -2.4837107259208104e+00 + -2.7641052232647620e+00 7.0018652396001047e-01 -2.7854517603720055e+00 + -2.9538896497057023e+00 5.5267371791557829e-01 -3.0556825195571591e+00 + -3.1319706064838297e+00 3.3101072411793497e-01 -3.2929350080112769e+00 + -3.2884517552286798e+00 4.4322885607943174e-02 -3.4913130612124634e+00 + -3.4154068894315337e+00 -2.9029053467847143e-01 -3.6442295776584066e+00 + -3.5115807870107796e+00 -6.6068518939902954e-01 -3.7500926458536616e+00 + -3.5737724439734810e+00 -1.0610112175019442e+00 -3.8101735222713549e+00 + -3.5960299323959646e+00 -1.4785070844501478e+00 -3.8280892340108528e+00 + -3.6427393253625810e+00 -1.9498643034699898e+00 -3.8791608376087758e+00 + id 14171 + loc 9.0124934911727905e-01 9.8266464471817017e-01 399 + blend 0.0000000000000000e+00 + interp 4.5856179114219281e-01:4.5855720552428142e-01:1.9612463894808618e-01:3.7478607641086953e-01:9.6651192440116551e-01:3.5641485190539246e-01:1.7537766218384783e+00:3.2669647537031948e-01:2.2081172634745747e+00:4.0623219703362229e-01:2.8491018771508045e+00:3.7476219341881456e-01:3.8509670097623996e+00 + CVs 20 + -1.7979732119957464e-01 3.3829716198699883e-01 -1.8412064070568968e-01 + -3.5245133899632552e-01 6.7617805155714084e-01 -3.9022534256137414e-01 + -5.1717166017412608e-01 1.0023686703740131e+00 -6.5059687180051096e-01 + -6.8198544394763383e-01 1.2919835567607179e+00 -9.7601787192271472e-01 + -8.5931423174677857e-01 1.5137963191077874e+00 -1.3592520416608325e+00 + -1.0572725052879028e+00 1.6396227138855850e+00 -1.7806459371033321e+00 + -1.2792538698380627e+00 1.6550630137570277e+00 -2.2117994093583309e+00 + -1.5271857686647918e+00 1.5674500371651301e+00 -2.6243840605194015e+00 + -1.7951726785752919e+00 1.3932998545664419e+00 -2.9924784292702484e+00 + -2.0615137452271517e+00 1.1448117308976009e+00 -3.2896554604669914e+00 + -2.3113141752412676e+00 8.4404779117571715e-01 -3.5032969236651756e+00 + -2.5612172240170463e+00 5.2547041844759557e-01 -3.6482045261164147e+00 + -2.8257585273731327e+00 2.2411077732363771e-01 -3.7391086149586696e+00 + -3.0882215263479589e+00 -3.2288140825978084e-02 -3.7809155404726873e+00 + -3.3345837136672545e+00 -2.4221669605209784e-01 -3.7945856804330012e+00 + -3.5814976450044123e+00 -4.3428479867762648e-01 -3.8119782190938070e+00 + -3.8464055435240190e+00 -6.2220205784091420e-01 -3.8480874712302979e+00 + -4.1471922356142645e+00 -7.5157177945465248e-01 -3.9130964179393830e+00 + -4.4554649842045979e+00 -7.1672848999844796e-01 -4.0172768685788078e+00 + id 14172 + loc 1.4800766110420227e-01 1.6266095638275146e-01 381 + blend 0.0000000000000000e+00 + interp 4.5647523622205394e-01:4.5647067146969172e-01:1.7096994487551076e-01:3.5123329916796436e-01:9.0403980436434828e-01:4.0883164500554814e-01:1.0284898191811294e+00:4.1015749545181196e-01:1.6439636529222730e+00:2.4866376391549563e-01:2.7097031358115897e+00:4.2775776727670772e-01:3.0188228825967629e+00:4.4488802697359636e-01:3.8078988854825773e+00 + CVs 20 + -6.5053091998884882e-01 1.8283351788339142e-01 -7.0403094992827397e-01 + -1.1209110397184583e+00 2.3011319780739781e-01 -1.1481859277538813e+00 + -1.5478154161314117e+00 2.2505076741478502e-01 -1.5436608023042795e+00 + -1.9805404506350741e+00 2.1463687993823199e-01 -1.9826843862412034e+00 + -2.4182058944295286e+00 2.0309650316031347e-01 -2.4662743143984600e+00 + -2.8618817648172907e+00 1.8609083359551992e-01 -2.9903423846684127e+00 + -3.3110502763625189e+00 1.3499934465513574e-01 -3.5470457647959082e+00 + -3.7461977120335930e+00 1.6800894340194272e-03 -4.1215599823508118e+00 + -4.1295844950982872e+00 -2.4671494992186394e-01 -4.6833762446217362e+00 + -4.4263386223962300e+00 -6.0594556721243498e-01 -5.1910436600386216e+00 + -4.6231135454667101e+00 -1.0358480319487828e+00 -5.6081602142756015e+00 + -4.7277217714333473e+00 -1.4785429051053856e+00 -5.9221686737385983e+00 + -4.7652516844811927e+00 -1.8946166078689599e+00 -6.1538944088930156e+00 + -4.7717451053639843e+00 -2.3039382899460015e+00 -6.3328609577553436e+00 + -4.7794185036162302e+00 -2.7536164598016564e+00 -6.4675668427052386e+00 + -4.8128104663561366e+00 -3.2500773955839728e+00 -6.5696987882655344e+00 + -4.8868539969925804e+00 -3.7757718705414529e+00 -6.6726648399915884e+00 + -5.0197716788683548e+00 -4.2916747582591706e+00 -6.7992682881780482e+00 + -5.2719713595912454e+00 -4.6582886637643446e+00 -6.9204909557492407e+00 + id 14173 + loc 3.6405616998672485e-01 3.1338128447532654e-01 379 + blend 0.0000000000000000e+00 + interp 3.8096339329785794e-01:2.7404685141214186e-01:4.5259983298481765e-01:2.9327564255548461e-01:1.0248393605347377e+00:3.2373380147905045e-01:1.5231943359256568e+00:2.9672843000285382e-01:1.9847604999850970e+00:2.1234161536647389e-01:2.6396840468304306e+00:3.1446516025408555e-01:3.1136388653254761e+00:3.8095958366392496e-01:3.9619348377870427e+00 + CVs 20 + 1.0354646617025615e-01 3.0370960402642089e-01 3.4752508844360230e-01 + 2.4875389958784366e-01 5.4059903002081588e-01 6.4465202291116697e-01 + 4.3241729636672649e-01 6.9102351343720780e-01 9.1120624408992901e-01 + 6.5686529200562194e-01 7.6299340834749629e-01 1.1589634487350322e+00 + 9.1907631682523006e-01 7.9514082466947333e-01 1.3802267785875091e+00 + 1.2158425634007293e+00 8.3136836649763812e-01 1.5777580789111971e+00 + 1.5426913888491405e+00 8.9874745727243743e-01 1.7866185730384347e+00 + 1.8828310892904092e+00 1.0138195319289216e+00 2.0469310051579219e+00 + 2.2047323613941083e+00 1.1978885273658924e+00 2.3594065633999275e+00 + 2.4825410657814238e+00 1.4727458691673394e+00 2.6939176764473611e+00 + 2.7147957881767768e+00 1.8493820815763375e+00 3.0490075457447463e+00 + 2.8993215354683226e+00 2.3353329936923002e+00 3.4673625172382936e+00 + 2.9946978809349494e+00 2.9089668719150565e+00 4.0286033371283558e+00 + 2.9170406249293999e+00 3.4479507863733732e+00 4.8127335640500295e+00 + 2.5949907669381012e+00 3.7844790266079205e+00 5.7599437427014735e+00 + 2.0471458147139474e+00 3.9039730512606510e+00 6.6125411802210099e+00 + 1.3088788734469674e+00 3.9931010975120915e+00 7.1832412580581657e+00 + 4.9880046911835452e-01 3.9517472389108832e+00 7.5546303532526951e+00 + 6.0216839382004572e-01 3.6634212737688276e+00 7.9204171466633877e+00 + id 14174 + loc 4.2780539393424988e-01 3.4841336309909821e-02 393 + blend 0.0000000000000000e+00 + interp 3.7509682416422152e-01:2.5671431752248525e-01:6.4626577090065584e-04:2.7609874848968335e-01:6.2093767398906929e-01:3.5068498862496156e-01:1.9367092316493619e+00:2.7592318009110617e-01:2.3009336613966305e+00:3.7509307319597990e-01:2.9994393840191087e+00:3.3140904223711892e-01:3.4456927274990163e+00 + CVs 20 + -8.1021084300356122e-02 4.0854322450122749e-01 4.1281159078814739e-01 + -1.4004114283095906e-01 8.2700163998450582e-01 7.3816322870576301e-01 + -1.8697925446920488e-01 1.2714861478800248e+00 9.9416864064362254e-01 + -2.5431028229695396e-01 1.7518276128892869e+00 1.2082541058607048e+00 + -3.9276695150981356e-01 2.2522685033551020e+00 1.3995123210718967e+00 + -6.3664846204700987e-01 2.7350501403351357e+00 1.5738396047115706e+00 + -9.9386172799836991e-01 3.1687508284757877e+00 1.7303719363822121e+00 + -1.4638319276180698e+00 3.5315810565396335e+00 1.8775481485717445e+00 + -2.0358530853697197e+00 3.7953724759047271e+00 2.0391539231465745e+00 + -2.6813249207045358e+00 3.9283565585134532e+00 2.2455822271794208e+00 + -3.3503107469908744e+00 3.9035726551403300e+00 2.5195574763784472e+00 + -3.9781785871098823e+00 3.7005181767685542e+00 2.8560995317419167e+00 + -4.5024742411364302e+00 3.3169677651895104e+00 3.2195059573405240e+00 + -4.8685462441752447e+00 2.7801365364465358e+00 3.5694178614517549e+00 + -5.0182811481727949e+00 2.1490414288172275e+00 3.8805305035456401e+00 + -4.9236453559016793e+00 1.5127338902940735e+00 4.1472103393319761e+00 + -4.6150205439417853e+00 9.5433400969314053e-01 4.3935752338606333e+00 + -4.1647319859706169e+00 5.2137135687047387e-01 4.6444459646911751e+00 + -3.6862356633024396e+00 1.4761387180491781e-01 4.9039805617870202e+00 + id 14175 + loc 4.9333149194717407e-01 1.1347692459821701e-01 400 + blend 0.0000000000000000e+00 + interp 4.6271735071619996e-01:4.3911165296282401e-01:7.2126777919697349e-02:3.0609558040174900e-01:7.6607766043315351e-01:4.5687589917536514e-01:1.0293122166638760e+00:4.6271272354269283e-01:1.4997610747306969e+00:3.8196885097677669e-01:1.9807049507495447e+00:3.0608492001076909e-01:2.4411624826957974e+00:3.9061701905220514e-01:3.0444927194072289e+00:4.3556654063924266e-01:3.8201122812238948e+00 + CVs 20 + -2.1965354674794518e-01 3.1334313351990800e-01 1.8845103958639309e-01 + -4.1291154143897257e-01 6.2304720074529274e-01 3.7855336343093554e-01 + -6.0169841808322244e-01 9.3301804943093958e-01 5.6480334228401108e-01 + -7.9742728765253446e-01 1.2407623828092995e+00 7.5122178701131870e-01 + -1.0087606828970348e+00 1.5395458928494345e+00 9.4909028438550247e-01 + -1.2460317243116850e+00 1.8183608536433431e+00 1.1753706682702423e+00 + -1.5095972783192722e+00 2.0587811661311068e+00 1.4430988092623760e+00 + -1.7962249706818434e+00 2.2424810902246963e+00 1.7575006001070566e+00 + -2.0988360262455945e+00 2.3523290965363302e+00 2.1122325433255562e+00 + -2.3961836738185736e+00 2.3814121840142448e+00 2.4878868062929329e+00 + -2.6650587353599029e+00 2.3398895709349743e+00 2.8659769236279615e+00 + -2.8965286401129040e+00 2.2424280664860117e+00 3.2381013960310678e+00 + -3.1034645914888426e+00 2.0951225263223305e+00 3.6035437823344116e+00 + -3.3068797933270520e+00 1.8990778369813730e+00 3.9554092419695839e+00 + -3.4792155917547891e+00 1.6722778818019464e+00 4.2588831545207793e+00 + -3.5067025307491662e+00 1.4514450150107878e+00 4.4570955144903071e+00 + -3.2920998758048512e+00 1.1778853764515653e+00 4.5399010858951705e+00 + -3.1326680721371201e+00 7.8892681817476906e-01 4.6359906525542254e+00 + -3.4129010654543830e+00 7.5600721937078452e-01 4.7651245148811618e+00 + id 14176 + loc 5.3304904699325562e-01 7.0940452814102173e-01 373 + blend 0.0000000000000000e+00 + interp 2.8287522056802833e-01:2.6934603517157124e-01:7.7864208371153154e-02:2.7805278692801483e-01:1.1557121982728722e+00:2.8011927759704786e-01:2.0766650986187223e+00:2.8287239181582269e-01:3.0051873329148089e+00 + CVs 20 + -2.9739364717607697e-01 3.1437635661630614e-01 -5.8750958745250499e-02 + -5.6299132830922960e-01 5.9965400016672199e-01 -1.5384053778974183e-01 + -7.9497802528701000e-01 8.6352094933511725e-01 -2.7825288628793865e-01 + -9.9252895567863009e-01 1.1169691281801739e+00 -4.2720643063289648e-01 + -1.1404063857012041e+00 1.3621377606545704e+00 -5.8872770338236757e-01 + -1.2260414845975502e+00 1.5917788273272102e+00 -7.3581093911942941e-01 + -1.2567791515334097e+00 1.8029769273013714e+00 -8.5355428363093933e-01 + -1.2582081279650494e+00 1.9989995108015033e+00 -9.6777449694240159e-01 + -1.2614892031044089e+00 2.1704060943357657e+00 -1.1211782563089687e+00 + -1.2850465583140622e+00 2.3014571536982289e+00 -1.3298473348435813e+00 + -1.3225334381524301e+00 2.4002355863810041e+00 -1.5758035433071769e+00 + -1.3455335674317679e+00 2.4990721242916409e+00 -1.8318967367703456e+00 + -1.3195879318521286e+00 2.5745208031076188e+00 -2.1065713746785293e+00 + -1.2291851884239970e+00 2.5065592733376771e+00 -2.4164367727369225e+00 + -1.1363720490801850e+00 2.2300303243601558e+00 -2.7523667135149426e+00 + -1.1803631519349476e+00 1.8149829137415698e+00 -3.1066403846164996e+00 + -1.4572049068312021e+00 1.4129895885179506e+00 -3.4457526655787554e+00 + -1.9337337964476731e+00 1.1811406458402616e+00 -3.6992915115638301e+00 + -2.4470443574397684e+00 1.1562362325450479e+00 -3.8231863393148844e+00 + id 14177 + loc 4.4064044952392578e-01 3.9685219526290894e-01 402 + blend 0.0000000000000000e+00 + interp 3.3938337881797970e-01:3.1174868196173583e-01:5.0568878036286624e-02:3.2763497595687885e-01:9.1801620447541621e-01:2.8495858989094652e-01:1.2915193546399206e+00:2.9968564191252262e-01:1.9982979960914131e+00:3.2541073843552232e-01:2.8991830430321328e+00:3.3937998498419153e-01:3.5307257154244005e+00 + CVs 20 + -2.3727115208674171e-01 2.8063509104231277e-01 1.9113814647527944e-01 + -4.3550713341454839e-01 5.5351529033905156e-01 3.8543729684813360e-01 + -6.2366086595396730e-01 8.2928899255360589e-01 5.5911727651593146e-01 + -8.0819494422620575e-01 1.1017944743423265e+00 7.0364643154148365e-01 + -9.8509099557883562e-01 1.3681283647819809e+00 8.3577911522989401e-01 + -1.1596277382089166e+00 1.6362792750255721e+00 9.7287404168473746e-01 + -1.3441447903698127e+00 1.9156233807259648e+00 1.1167287333829752e+00 + -1.5561871271648697e+00 2.2108646370738469e+00 1.2598367052736950e+00 + -1.8202137532260994e+00 2.5244346539227092e+00 1.3991470407510616e+00 + -2.1638931972412121e+00 2.8527853258578482e+00 1.5330557239485398e+00 + -2.6049224568540397e+00 3.1810678675976933e+00 1.6322220088184771e+00 + -3.1517409692174385e+00 3.4785571109814537e+00 1.6555300755088398e+00 + -3.7943672543881135e+00 3.6787036191241183e+00 1.5856831612975699e+00 + -4.4713259066681772e+00 3.7080648016805453e+00 1.4227972935600057e+00 + -5.0997899340106105e+00 3.5404648496275044e+00 1.1794970363189108e+00 + -5.6071130348647849e+00 3.1795850003223860e+00 8.8062035789301307e-01 + -5.9909054346959500e+00 2.6300247013579003e+00 5.9611482053187692e-01 + -6.3304102489987786e+00 2.0328567676818015e+00 5.5976897719083496e-01 + -6.5567138572169288e+00 1.8202540891842740e+00 8.8205645842976443e-01 + id 14178 + loc 5.4060769081115723e-01 7.2305500507354736e-02 378 + blend 0.0000000000000000e+00 + interp 5.5457967119104590e-01:3.8640286104367150e-01:1.1555287461861452e-01:5.5457412539433404e-01:9.9559358009328647e-01:4.9143850029773772e-01:1.3783953868290051e+00:3.0845747801714374e-01:1.8884892531057735e+00:4.3372727466767702e-01:2.4618376159485837e+00:3.7671329736319364e-01:2.9968357361603939e+00:3.3087657888618660e-01:3.6823255610563059e+00 + CVs 20 + -2.9505977498758473e-01 2.5514709158063875e-01 -1.1266286091483982e-01 + -5.8150600138107500e-01 4.7165769362844145e-01 -1.9336864623221267e-01 + -8.6842759912604994e-01 6.6127189984276191e-01 -2.5508427392294830e-01 + -1.1631862014578829e+00 8.3974145823586943e-01 -3.0603671484517747e-01 + -1.4603296393018863e+00 1.0200914828491157e+00 -3.5161498946466430e-01 + -1.7547646814835796e+00 1.2088249236933595e+00 -3.9926219180801870e-01 + -2.0545530881383716e+00 1.4030327063536907e+00 -4.5902796649181776e-01 + -2.3687508063853615e+00 1.5963711123420288e+00 -5.4225633462862666e-01 + -2.6924541128054975e+00 1.7842224583800583e+00 -6.5753368550398161e-01 + -3.0101042402245932e+00 1.9660978629161416e+00 -8.0690353885619470e-01 + -3.3150566386133726e+00 2.1482680357703288e+00 -9.8832241406517407e-01 + -3.6205730590397902e+00 2.3315163790921805e+00 -1.2087445763301343e+00 + -3.9387377450341372e+00 2.4727782059923689e+00 -1.4762994758940375e+00 + -4.2420059435397466e+00 2.4919721369197552e+00 -1.7510690784156151e+00 + -4.4820938024379320e+00 2.3780919914662593e+00 -1.9675141977743151e+00 + -4.6225838099148415e+00 2.2130004383240323e+00 -2.1191319256868772e+00 + -4.6211592323565043e+00 2.0876362758998495e+00 -2.2452536014351674e+00 + -4.5268408709831842e+00 2.0171636852960972e+00 -2.3916723461214677e+00 + -4.7664079928958616e+00 1.9954257396802650e+00 -2.5506997175962938e+00 + id 14179 + loc 6.4842349290847778e-01 7.5293171405792236e-01 412 + blend 0.0000000000000000e+00 + interp 5.1218674857663493e-01:3.5757287686568900e-01:5.1263773097314469e-01:3.6306650509233074e-01:1.1944599257929724e+00:3.7032082465627020e-01:2.0235382277304224e+00:2.5729507145326141e-01:2.7587728189367882e+00:3.6230863491786619e-01:3.4230027728608068e+00:5.1218162670914924e-01:3.9873174211502769e+00 + CVs 20 + 7.4428400697004649e-01 1.7311234760656014e-01 -1.7536693636952991e-01 + 1.2440327074239497e+00 2.2560947854410940e-01 -3.3687820887808495e-01 + 1.6877022483092596e+00 2.2300843785245089e-01 -4.9212733646911466e-01 + 2.1661447989443898e+00 1.9042353298706810e-01 -6.4150305163046673e-01 + 2.6699371922036215e+00 1.1734681329807750e-01 -7.7374065246674573e-01 + 3.1869312363202464e+00 -3.4444308545222846e-04 -8.7518023621181951e-01 + 3.7036984143221798e+00 -1.5954303089784705e-01 -9.3411094294215302e-01 + 4.2056787410963379e+00 -3.5726323348559053e-01 -9.4418934763314144e-01 + 4.6783604462225492e+00 -5.9016317741252378e-01 -9.0472490706665243e-01 + 5.1097099697853068e+00 -8.5089017792701638e-01 -8.2025536679874667e-01 + 5.4902487041744941e+00 -1.1370991376260584e+00 -7.0697909391306579e-01 + 5.8144591090860462e+00 -1.4635813189010927e+00 -6.0161091751381113e-01 + 6.0844663950185680e+00 -1.8463759923198830e+00 -5.4065333869271970e-01 + 6.3122874952686221e+00 -2.2787357500201528e+00 -5.2835758948367506e-01 + 6.5099981399339102e+00 -2.7444204752766188e+00 -5.5763014943523070e-01 + 6.6793409978488283e+00 -3.2278898641335130e+00 -6.3808853364511764e-01 + 6.8194387882305083e+00 -3.7126010538138372e+00 -7.8514152603727017e-01 + 6.9354316469455215e+00 -4.1777877102255507e+00 -9.9352326225448939e-01 + 7.1347679924720175e+00 -4.5861849653392017e+00 -1.1504856044785186e+00 + id 14180 + loc 9.8037946224212646e-01 3.5494354367256165e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1960251021936743e-01:3.2181654892246675e-01:7.8013491866398832e-03:4.4064396834133718e-01:4.0335661305618942e-01:3.0970401415856069e-01:1.0159513656397205e+00:4.7824115876273415e-01:1.4835171138366758e+00:5.1959731419426525e-01:1.9755807839816115e+00:4.1021604086940927e-01:2.1777039868471251e+00:4.7581716623338466e-01:2.9143940597120706e+00:4.2614094787948087e-01:3.4448967740808416e+00 + CVs 20 + -1.9931194471349029e-02 4.3293302586768051e-01 -4.7821991428085894e-02 + -4.2276121337912032e-02 8.5669694376021344e-01 -3.7006517849422244e-02 + -9.3374019395393526e-02 1.2685778572209867e+00 1.7760047535490986e-02 + -1.9073132257045811e-01 1.6619900592200629e+00 1.2108319188292488e-01 + -3.4603526919250949e-01 2.0203222524251574e+00 2.8177790661331792e-01 + -5.6510920321603797e-01 2.3180736228348442e+00 5.0086228410421096e-01 + -8.4230430870303963e-01 2.5262417067652505e+00 7.6444701508188662e-01 + -1.1612668785697733e+00 2.6259922490408831e+00 1.0456203645248738e+00 + -1.5009472073411114e+00 2.6147728219771156e+00 1.3167041447267591e+00 + -1.8399567914122836e+00 2.5026156368837462e+00 1.5597812753092517e+00 + -2.1626359271880515e+00 2.3026371169373521e+00 1.7716197436706858e+00 + -2.4565010402355019e+00 2.0225739170962500e+00 1.9578669148678234e+00 + -2.7035583451295180e+00 1.6640734893734337e+00 2.1273055685908293e+00 + -2.8717048189345094e+00 1.2244819965347680e+00 2.2919060328774830e+00 + -2.9027088548342657e+00 7.1636464212092998e-01 2.4643652291557725e+00 + -2.7424633099486035e+00 2.1096789563054896e-01 2.6527178547708177e+00 + -2.3977545333460628e+00 -1.9737405567510313e-01 2.8839427500918582e+00 + -1.9515911709594493e+00 -4.5378921301371578e-01 3.1586448425745095e+00 + -1.6565816722963105e+00 -6.8021124685972012e-01 3.3008085051925478e+00 + id 14181 + loc 7.9138839244842529e-01 9.4174844026565552e-01 401 + blend 0.0000000000000000e+00 + interp 5.2193187922355355e-01:3.8194619010219805e-01:1.9016524846272498e-01:3.6406544824018955e-01:1.0388955905585160e+00:3.3182508842401931e-01:1.6980025745376062e+00:5.2192665990476139e-01:2.0860997043924683e+00:3.5942927750192122e-01:2.9205172344084129e+00:3.8966930071443867e-01:3.7215662700498409e+00 + CVs 20 + 3.7736654891510124e-02 3.0398560615483378e-01 -3.0094753672475555e-01 + 5.6711809351306458e-02 6.1700620461647138e-01 -5.8912656124038654e-01 + 7.0448036711383943e-02 9.4350849830630623e-01 -8.9080288036254640e-01 + 8.1321207689372010e-02 1.2740933057184176e+00 -1.2258598685794007e+00 + 7.6865000726762944e-02 1.5919393532849162e+00 -1.6039535987797557e+00 + 2.6585617056770761e-02 1.8846851746558306e+00 -2.0174301357755713e+00 + -1.0484674268932392e-01 2.1428574801637605e+00 -2.4434250282927827e+00 + -3.3802879174774525e-01 2.3533642057888642e+00 -2.8544968914817255e+00 + -6.7235820697569126e-01 2.5027997253599548e+00 -3.2236895756488151e+00 + -1.0909158894846005e+00 2.5859233563543178e+00 -3.5341434026944167e+00 + -1.5740737650508789e+00 2.5994102757470396e+00 -3.7868511986771560e+00 + -2.1072383491160975e+00 2.5314931517603219e+00 -3.9987234079488330e+00 + -2.6690514877990124e+00 2.3701632904032066e+00 -4.1835419853476594e+00 + -3.2250835847183592e+00 2.1262993423268597e+00 -4.3316042561739350e+00 + -3.7542954732237988e+00 1.8295551352498238e+00 -4.4480820843717712e+00 + -4.2641684317602184e+00 1.5031808242093971e+00 -4.6131669429335194e+00 + -4.7447834658790908e+00 1.1839653548603384e+00 -4.9406194677829918e+00 + -5.1519442211419149e+00 9.2156970066221888e-01 -5.4146726121035291e+00 + -5.5353911342149145e+00 6.7145309489933003e-01 -5.7919540179699904e+00 + id 14182 + loc 7.1074500679969788e-02 9.7426509857177734e-01 396 + blend 0.0000000000000000e+00 + interp 4.8829201616864204e-01:2.5789916688318393e-01:9.5309297829120998e-01:3.6771025067469626e-01:1.7128914206434276e+00:2.4508228323156755e-01:2.4993700857403773e+00:4.8828713324848039e-01:3.1333186814428440e+00:3.2352993854928958e-01:3.9195900725363373e+00 + CVs 20 + 1.0491312826484374e+00 1.8178428658342699e-01 -3.0958814960167735e-01 + 1.7803608030839251e+00 1.8682553480478026e-01 -5.4149739975715483e-01 + 2.4383417980720870e+00 1.4237981585650461e-01 -7.1957200715293645e-01 + 3.1164555519763875e+00 9.1268480964742493e-02 -8.4584181993843588e-01 + 3.8021854505237171e+00 1.8733835739582871e-02 -9.1345925607261957e-01 + 4.4832012334544533e+00 -9.3472233421694195e-02 -9.2689201816378586e-01 + 5.1394915953391092e+00 -2.6420462846612114e-01 -8.9655389997267709e-01 + 5.7417921213929519e+00 -5.0872260079628551e-01 -8.3177672416557547e-01 + 6.2609750784190323e+00 -8.3246172294542164e-01 -7.4009836110088845e-01 + 6.6761306374349951e+00 -1.2268539310268503e+00 -6.2747288029747195e-01 + 6.9773343522096507e+00 -1.6688110243438268e+00 -4.9455489330542179e-01 + 7.1600297255118477e+00 -2.1236344620387131e+00 -3.4856047593084938e-01 + 7.2314957179575874e+00 -2.5519357997977750e+00 -1.9618170345507335e-01 + 7.2136803937267251e+00 -2.9299412326173293e+00 -5.1228772020193269e-02 + 7.1339256502955326e+00 -3.2531299097593380e+00 6.7429329309994013e-02 + 7.0144137342416562e+00 -3.5139896994224129e+00 1.4648647428954875e-01 + 6.8755426793019749e+00 -3.6988956374504385e+00 1.7876713302515901e-01 + 6.7360264395537106e+00 -3.8269031875128450e+00 1.6058300455689589e-01 + 6.5429542918219212e+00 -4.1121642085561625e+00 8.6346523421915400e-02 + id 14183 + loc 2.4451714754104614e-01 5.5823969841003418e-01 405 + blend 0.0000000000000000e+00 + interp 5.1255223078890011e-01:4.1208848078159244e-01:8.1161868086985889e-02:3.0075073530236973e-01:7.3521657523881490e-01:3.9329061303882623e-01:1.0579516693334301e+00:5.1110299707127305e-01:1.8335979939794700e+00:4.2239290033560134e-01:2.1347849415162656e+00:3.9039007284249960e-01:2.9200832412778208e+00:4.2248464247299461e-01:3.1626867466191926e+00:5.1254710526659220e-01:3.7424618542155792e+00 + CVs 20 + 7.5231681106721418e-02 2.0638851096027605e-01 4.5015847861074300e-02 + 5.2846025936815144e-02 3.6432044473568703e-01 7.7257432739341783e-02 + -5.2191270497271847e-03 4.9938420346389167e-01 1.2019972596392758e-01 + -7.0528018738689080e-02 6.2617282372196625e-01 1.8894405895393285e-01 + -1.4442605440543213e-01 7.3649013870035140e-01 2.8722175224510627e-01 + -2.2684304460153268e-01 8.2215111090618975e-01 4.1564003376524794e-01 + -3.1646584137161615e-01 8.7735376101007623e-01 5.7212993150695046e-01 + -4.1127375647109599e-01 8.9955082243720574e-01 7.5399036484906790e-01 + -5.0881092764436342e-01 8.8807153996691823e-01 9.5891532595197959e-01 + -6.0619638528869324e-01 8.4297826274212573e-01 1.1844166373425919e+00 + -6.9990485045813844e-01 7.6434696298464433e-01 1.4265532693887182e+00 + -7.8675045012203126e-01 6.5195452095884010e-01 1.6772370480703569e+00 + -8.6393277147947045e-01 5.0783247372080220e-01 1.9252838200670930e+00 + -9.2572067724346585e-01 3.4200365510174624e-01 2.1664158208029756e+00 + -9.6060822051152417e-01 1.7260952709700600e-01 2.4116176787728172e+00 + -9.5486599109334980e-01 1.7930481850292113e-02 2.6746401869361631e+00 + -9.0183444646995548e-01 -1.1084974771120221e-01 2.9494188515427737e+00 + -8.0672191000879334e-01 -2.1013498960573024e-01 3.2134914183404675e+00 + -7.7169258087269488e-01 -3.0281377882547089e-01 3.3394063503306768e+00 + id 14184 + loc 2.9030963778495789e-01 4.9554440379142761e-01 399 + blend 0.0000000000000000e+00 + interp 5.2350774330818617e-01:3.7409311321592359e-01:1.8240102399185043e-01:2.7766286217287678e-01:9.2812533701149125e-01:4.0755613785990907e-01:1.2014394237710389e+00:5.2350250823075306e-01:1.9287721285924391e+00:3.8525714984899095e-01:2.1856412602882518e+00:3.3071718018987273e-01:2.8828130891760400e+00:3.8084012119810612e-01:3.2051606134316302e+00:3.7884470148591970e-01:3.9146642536430019e+00 + CVs 20 + -1.8767212010557865e-01 3.3177576052530688e-01 8.7972267860007392e-02 + -4.0903712488706895e-01 6.4506979754440252e-01 1.9747010731121617e-01 + -6.6610519175478222e-01 9.2720220257137409e-01 3.0094553703715843e-01 + -9.5398510525816349e-01 1.1755390173399407e+00 3.9417830851230762e-01 + -1.2645786462557684e+00 1.3937461342448674e+00 4.8860008286467688e-01 + -1.5887106714401784e+00 1.5812258978065568e+00 5.9662070030993108e-01 + -1.9174304981493662e+00 1.7281584120353344e+00 7.2711369827745154e-01 + -2.2380052210824264e+00 1.8125074159519949e+00 8.8197649463958872e-01 + -2.5277705027316717e+00 1.8031082572054618e+00 1.0506043631111843e+00 + -2.7511742249824267e+00 1.6770471440225190e+00 1.2027990197766203e+00 + -2.8770900737668383e+00 1.4528712728178395e+00 1.2997987111820424e+00 + -2.9317604733390277e+00 1.1857388429401241e+00 1.3458164691630319e+00 + -2.9845523529760887e+00 8.8887794126431663e-01 1.3907320969635690e+00 + -3.0924013702918902e+00 5.4525032145832852e-01 1.4742947900940899e+00 + -3.3223649052048057e+00 1.6508418005594366e-01 1.6171486396001000e+00 + -3.7408910502938517e+00 -1.8002005038819180e-01 1.7727835185484613e+00 + -4.3450102553225856e+00 -3.6888476503717005e-01 1.7719605977141093e+00 + -4.9415493271354585e+00 -3.6302624276419315e-01 1.5051177587958930e+00 + -5.3754876482026495e+00 -5.3525469207891163e-01 1.4033450537785159e+00 + id 14185 + loc 4.1390806436538696e-01 1.8135191500186920e-01 404 + blend 0.0000000000000000e+00 + interp 4.4754563594561181e-01:2.7933312597221538e-01:2.3581368503060363e-02:4.4754116048925235e-01:1.0176721838862615e+00:3.7056591386891347e-01:1.6481947322049650e+00:2.6072590890880765e-01:2.0481896731062301e+00:2.8494601877546288e-01:2.9560661527588730e+00:3.5803417722315223e-01:3.3102612272000407e+00 + CVs 20 + -1.4479246532937717e-01 1.4669798164269038e-01 -1.0972385431838490e-01 + -2.9365801232592204e-01 3.0450383871071340e-01 -2.0814267428694244e-01 + -4.4614328446252716e-01 4.7419856366167423e-01 -2.9570669281816198e-01 + -6.0214961889917307e-01 6.5673084564309592e-01 -3.7088865743572652e-01 + -7.6201077919461713e-01 8.5075429648174494e-01 -4.2878925036497040e-01 + -9.2804881686696084e-01 1.0512882087892581e+00 -4.6059283472118606e-01 + -1.1014647783230591e+00 1.2488746987325374e+00 -4.5494449030828482e-01 + -1.2778409846094712e+00 1.4318191402411093e+00 -4.0407395119024975e-01 + -1.4478921316202733e+00 1.5895140686334588e+00 -3.0766277882417958e-01 + -1.6019428569735825e+00 1.7141650149592520e+00 -1.7154870055559590e-01 + -1.7348560145192000e+00 1.8025101107095216e+00 -5.7650374366288171e-03 + -1.8413960212248064e+00 1.8537060811543662e+00 1.7728101094790027e-01 + -1.9224623330724819e+00 1.8724586066269642e+00 3.6529982665453331e-01 + -1.9760435640900478e+00 1.8662215440294039e+00 5.4672202748714938e-01 + -1.9935256837550568e+00 1.8461266364445847e+00 7.0739702599888976e-01 + -1.9728509526410389e+00 1.8204598582410956e+00 8.3407988452268977e-01 + -1.9313345290630219e+00 1.7861434774345077e+00 9.2614790436453931e-01 + -1.8927126831217549e+00 1.7359942164243796e+00 9.9831873333874777e-01 + -1.9266110521650506e+00 1.7007355747813264e+00 1.1723929381068556e+00 + id 14186 + loc 2.5228482484817505e-01 7.4801796674728394e-01 381 + blend 0.0000000000000000e+00 + interp 5.1054679493160400e+00:3.1539849073780901e-01:2.4467528659867532e-01:2.6269845650026735e-01:1.0765477967257231e+00:4.2789323542000318e-01:1.6069026866379392e+00:1.0601658855424050e+00:1.6876359840307811e+00:5.1054579493160404e+00:3.6032769102354325e+00:4.3163345966840660e+00:3.6443282188525039e+00:4.0853718126154409e-01:3.7333363352329179e+00 + CVs 20 + 1.0373839011348764e+00 2.7458457118196755e-01 -6.5822819940203936e-01 + 1.7462674928343194e+00 3.4427363829263258e-01 -1.1389388730801795e+00 + 2.3727224744132314e+00 2.9902110815248639e-01 -1.5754142977145484e+00 + 3.0349438195953300e+00 1.6910994248437106e-01 -2.0326993972328058e+00 + 3.7032511659334726e+00 -5.3488883271943122e-02 -2.4981316030621001e+00 + 4.3345414476883990e+00 -3.6501423551900980e-01 -2.9557069805137708e+00 + 4.8805309819818445e+00 -7.4773042846667270e-01 -3.3835991706465394e+00 + 5.3092308670325625e+00 -1.1651975221155995e+00 -3.7578854085131677e+00 + 5.6226061469579989e+00 -1.5710409221445905e+00 -4.0674465974411049e+00 + 5.8521788817074203e+00 -1.9295366651328578e+00 -4.3176323577766738e+00 + 6.0391957574903019e+00 -2.2290073357621205e+00 -4.5203170089829099e+00 + 6.2177309345589480e+00 -2.4873182562568332e+00 -4.6896084480744324e+00 + 6.4002593246761359e+00 -2.7616613893507269e+00 -4.8410297795517137e+00 + 6.5553334079965300e+00 -3.1453358786052963e+00 -4.9830941612428994e+00 + 6.6279741558042460e+00 -3.7025807871195981e+00 -5.1140536161671548e+00 + 6.6098498455198564e+00 -4.4098264179464408e+00 -5.2441458350111043e+00 + 6.5433178809417232e+00 -5.1732534910246866e+00 -5.3956361407315043e+00 + 6.4582155061604203e+00 -5.8802574490963719e+00 -5.5896983488721483e+00 + 6.3590364316646646e+00 -6.4823070186336764e+00 -5.8069437194923239e+00 + id 14187 + loc 8.7168258428573608e-01 3.8621905446052551e-01 1069 + blend 0.0000000000000000e+00 + interp 3.4664207142151360e-01:3.4663860500079940e-01:2.2316455743617136e-01:2.4054002642162772e-01:8.8231970245839964e-01:2.7145001216341152e-01:1.7185886728772612e+00:3.2877949364493186e-01:2.6418634111346750e+00:2.6722712105032614e-01:3.5648504280857165e+00 + CVs 20 + -1.1623583112653475e-01 2.4983039319155939e-01 2.6746615689855058e-01 + -2.7082125011050739e-01 4.7761217952159007e-01 5.1489574528605953e-01 + -4.6972590723096802e-01 6.8085509261918786e-01 7.4812478631422497e-01 + -7.1680539928317999e-01 8.5791074744861340e-01 9.5979767467627530e-01 + -1.0123972992000785e+00 1.0237544032073191e+00 1.1447085044404539e+00 + -1.3361517124460920e+00 1.2276717122987888e+00 1.3172490303176354e+00 + -1.6260194543450903e+00 1.5212797788954058e+00 1.4994234964859363e+00 + -1.8140374848926015e+00 1.8916876453202509e+00 1.7076454636293921e+00 + -1.8735672054023271e+00 2.2714440483492959e+00 1.9651450347017874e+00 + -1.7996366172667151e+00 2.5580750666790113e+00 2.3014279826883230e+00 + -1.6232095458121700e+00 2.6283135916393978e+00 2.6905391174444873e+00 + -1.4220549660543633e+00 2.4716889773567630e+00 3.0425383839312090e+00 + -1.2453167220037666e+00 2.1639063021012137e+00 3.3150509884476480e+00 + -1.1238906452579427e+00 1.7647544119901135e+00 3.5012702716984916e+00 + -1.0766154845042846e+00 1.3164930037135862e+00 3.6049657600453449e+00 + -1.1216203950443342e+00 8.3937753830177897e-01 3.5907246109705504e+00 + -1.2775334728947558e+00 3.9137346226490299e-01 3.3782314479169688e+00 + -1.4835638948989049e+00 5.8907936662831839e-02 2.9974474641549675e+00 + -1.4901648245023402e+00 -4.0083919707869842e-01 2.8571044322691765e+00 + id 14188 + loc 7.3892273008823395e-02 2.2878427803516388e-01 402 + blend 0.0000000000000000e+00 + interp 4.9256790524658794e-01:3.6548358811032067e-01:8.6178213473179155e-01:3.9311776172194596e-01:1.2779101601198675e+00:4.2723193633715700e-01:1.9860606027420333e+00:4.9256297956753547e-01:2.7369855244455716e+00:4.3079153995539360e-01:3.0476659988845016e+00:3.1297283826513594e-01:3.9594001194744646e+00 + CVs 20 + -4.3069263553981926e-02 4.6531987739229769e-01 1.6658222548625584e-01 + -1.2303183252818976e-01 9.1418116365526458e-01 2.9553962954439816e-01 + -2.5111078347212690e-01 1.3392232423896391e+00 3.8944819127927155e-01 + -4.2744938160748736e-01 1.7319500014530889e+00 4.5973137386939977e-01 + -6.4404755397707947e-01 2.0836404923858569e+00 5.1749412486493518e-01 + -8.8886951526967273e-01 2.3891739272400030e+00 5.6892358113499908e-01 + -1.1527066567028053e+00 2.6502538926076604e+00 6.1586935933585329e-01 + -1.4301615937278598e+00 2.8718092036608005e+00 6.5770311262888770e-01 + -1.7158682598108292e+00 3.0601043726857342e+00 6.9741444369505889e-01 + -2.0047574267902561e+00 3.2238814796142323e+00 7.4538577762551550e-01 + -2.3010069721569151e+00 3.3742874487762942e+00 8.0813997426820705e-01 + -2.6273894501639354e+00 3.5203905867359113e+00 8.7600122867572683e-01 + -3.0102797729303874e+00 3.6457345427890568e+00 9.3049476554432575e-01 + -3.4386670616970787e+00 3.6907555953162738e+00 9.4954778076229773e-01 + -3.8617839273484096e+00 3.5972280316904093e+00 9.0902643054578403e-01 + -4.2259007217761875e+00 3.3337380746212237e+00 8.0550326543341721e-01 + -4.4962063222604103e+00 2.8770065979772625e+00 6.7542586152540973e-01 + -4.6764246100842826e+00 2.3275814963846670e+00 6.5380419109579391e-01 + -4.6794618992868440e+00 2.3106084690109019e+00 9.0490018837804054e-01 + id 14189 + loc 9.4123959541320801e-01 4.0816706418991089e-01 395 + blend 0.0000000000000000e+00 + interp 4.4303298841917294e-01:2.7046326981667329e-01:1.2660727728483234e-01:4.4302855808928876e-01:9.9533991848893477e-01:2.8894816249867683e-01:1.5617259289178738e+00:2.6462069136469496e-01:2.2770000017417393e+00:2.8391540193371667e-01:3.1117383384691881e+00 + CVs 20 + -4.3415756575191033e-01 2.3650243262509454e-01 4.3324396390193587e-01 + -7.5695224575569675e-01 3.9517866265595236e-01 7.7359014424770933e-01 + -1.0554431242535545e+00 5.2620348790081728e-01 1.0785546245780522e+00 + -1.3707253380956670e+00 6.5468207909897047e-01 1.3694601234984458e+00 + -1.7074492167758608e+00 7.7563316115277858e-01 1.6400161654984782e+00 + -2.0684674991490701e+00 8.8331142864810819e-01 1.8866713819957501e+00 + -2.4535975502578027e+00 9.7583290358006458e-01 2.1128269197405367e+00 + -2.8605912457473264e+00 1.0527153368033073e+00 2.3262503600575299e+00 + -3.2903636880980831e+00 1.1059836058533046e+00 2.5326128490925561e+00 + -3.7477494544750254e+00 1.1191049700415512e+00 2.7335408570515924e+00 + -4.2306266126420713e+00 1.0774352076223566e+00 2.9298569634446179e+00 + -4.7226251739702825e+00 9.7783585812589191e-01 3.1214561101758038e+00 + -5.2071062921804216e+00 8.2629751016148756e-01 3.3053388608478844e+00 + -5.6893403045379571e+00 6.2192806977825654e-01 3.4806172243453188e+00 + -6.1830979777821122e+00 3.4982399636496408e-01 3.6596437171939664e+00 + -6.6829927960826279e+00 1.9574399628008443e-03 3.8719994480356110e+00 + -7.1600963988629349e+00 -4.2166487644770623e-01 4.1444711436114616e+00 + -7.5532143910251843e+00 -9.1852525673780239e-01 4.4549525489188913e+00 + -7.6497533326873883e+00 -1.2892568706830336e+00 4.5998481708820709e+00 + id 14190 + loc 4.5360985398292542e-01 6.4866775274276733e-01 379 + blend 0.0000000000000000e+00 + interp 4.8808336420865639e-01:3.2944923340900867e-01:1.8718030831684229e-01:4.4248145734949551e-01:8.5604827017321494e-01:4.8807848337501430e-01:1.0497229863850881e+00:3.1103089874874518e-01:2.0009986980290129e+00:3.9496469378128229e-01:2.7117807489942685e+00:3.2038074337238082e-01:3.0663378944580444e+00:3.2808862306928521e-01:3.8963577454108096e+00 + CVs 20 + -2.4517736668156176e-01 2.0182044726031068e-01 1.6470891603520327e-01 + -4.4859800041642672e-01 3.8882089893168570e-01 3.4345193311650180e-01 + -6.3045757539595049e-01 5.3762670112006750e-01 5.5050616510249406e-01 + -8.1353807004038392e-01 6.5285142270671814e-01 8.2124677396513390e-01 + -9.9261103839539033e-01 7.7502762998490082e-01 1.1570746314964269e+00 + -1.1791370770421736e+00 9.5048995413134629e-01 1.5282496471310023e+00 + -1.4200364956383100e+00 1.2048294552065739e+00 1.8936981700965325e+00 + -1.7429897247156316e+00 1.5418171512603354e+00 2.1987106711940640e+00 + -2.1296689994652769e+00 1.9440087186023449e+00 2.3993626089389761e+00 + -2.5585317682753166e+00 2.3761996004294130e+00 2.4816545492775446e+00 + -3.0255805264289357e+00 2.7968745800262429e+00 2.4513940461746340e+00 + -3.5326154516560275e+00 3.1538552699638238e+00 2.3175063706907792e+00 + -4.0656296885526855e+00 3.3719488000402427e+00 2.0854430569970934e+00 + -4.5755813242945012e+00 3.3860438292325834e+00 1.7606120838969859e+00 + -4.9735011691979158e+00 3.1879398893408304e+00 1.3787432882912403e+00 + -5.2072350118496482e+00 2.8487441146516788e+00 1.0526922794181655e+00 + -5.3206780487167640e+00 2.4737352417335514e+00 9.3054793340241138e-01 + -5.3730665041576522e+00 2.1818306750410401e+00 1.0250794591553309e+00 + -5.4504567088637508e+00 1.8676716081874054e+00 1.0171161034000509e+00 + id 14191 + loc 6.5229105949401855e-01 5.3578972816467285e-01 378 + blend 0.0000000000000000e+00 + interp 4.1623279054497314e-01:3.4951726370540981e-01:2.7852179215875483e-01:3.5874288189728804e-01:9.4299059086974379e-01:2.9331598030984823e-01:1.3407999826421191e+00:4.1622862821706769e-01:1.9224277144081166e+00:3.9085230471480625e-01:2.1544322784168890e+00:2.7742946694896298e-01:2.8745550461858156e+00:2.9753171614491991e-01:3.4129953988416255e+00 + CVs 20 + 3.8554058084725701e-01 3.4674680924703205e-01 1.2280863348001805e-01 + 7.1251052743548449e-01 6.5611730031925264e-01 2.3457748368349451e-01 + 1.0234411397562315e+00 9.4722286115368970e-01 3.3425485743903183e-01 + 1.3256687816961588e+00 1.2338466682900284e+00 4.2029064278943223e-01 + 1.6118652960396267e+00 1.5272279227892980e+00 4.9265334087627266e-01 + 1.8984382833584479e+00 1.8387422355535246e+00 5.5780616828739393e-01 + 2.2157245442162319e+00 2.1618338560860275e+00 6.2908451273968746e-01 + 2.5868723839490260e+00 2.4745916988903449e+00 7.2232042557703025e-01 + 3.0232468299253670e+00 2.7536065600772490e+00 8.5812124663807143e-01 + 3.5256048296874187e+00 2.9747633555761994e+00 1.0581278847491995e+00 + 4.0883090942826126e+00 3.1117551077091341e+00 1.3275722011332525e+00 + 4.7026922280097025e+00 3.1342186117240356e+00 1.6496564619910647e+00 + 5.3317986165926090e+00 3.0100985286827395e+00 1.9786726289440884e+00 + 5.8871890714439008e+00 2.7526672891951831e+00 2.2321210185388485e+00 + 6.3001594743714406e+00 2.4474253454406405e+00 2.3602932740505507e+00 + 6.5718189541281244e+00 2.1720868478925262e+00 2.4044378788348353e+00 + 6.7217185545920390e+00 1.9627434149625458e+00 2.4442435234159738e+00 + 6.8158784019166827e+00 1.8110842114679793e+00 2.5190783549638982e+00 + 7.1449338698444791e+00 1.6521623188849319e+00 2.5920610525670544e+00 + id 14192 + loc 8.4719401597976685e-01 1.9352874159812927e-01 373 + blend 0.0000000000000000e+00 + interp 3.1262884548301201e-01:2.0634232666891653e-01:4.6687362515420172e-01:2.0924760625071967e-01:1.3370672157942638e+00:2.2780890030759154e-01:2.0409434233520729e+00:3.1262571919455717e-01:2.6280831149501753e+00:2.9638499796285561e-01:3.0664392036134775e+00:2.1793808021451233e-01:3.8876592949681879e+00 + CVs 20 + 3.8304628888869746e-01 3.6886180627677723e-01 -2.0455185306429549e-02 + 7.8649410406923292e-01 6.4543418170621880e-01 -4.6306206771029035e-02 + 1.2127881884351277e+00 8.1385085540536450e-01 -8.6536319937831951e-02 + 1.6648973740141570e+00 9.5775716075619832e-01 -1.3973820431158018e-01 + 2.1126012753386272e+00 1.1550643374428964e+00 -1.9577285264659244e-01 + 2.5387771969520618e+00 1.4340953292854068e+00 -2.1785439104994386e-01 + 2.9301157753621307e+00 1.7988656324405423e+00 -1.6487582410371515e-01 + 3.2474058463882209e+00 2.2359395865971301e+00 -2.3972639265901208e-02 + 3.4622737534721377e+00 2.7121234252054260e+00 1.9363152674138262e-01 + 3.5839448739365429e+00 3.1892695500576753e+00 4.7463245867957227e-01 + 3.6357945118022643e+00 3.6371893201329835e+00 8.2587299075001153e-01 + 3.6262439901776711e+00 4.0155492969977296e+00 1.2773749957291523e+00 + 3.5404802350635545e+00 4.2556271393500626e+00 1.8339970312467950e+00 + 3.3555831314933728e+00 4.2995640873307543e+00 2.4196026279777003e+00 + 3.0878093858936246e+00 4.1463316253997915e+00 2.9352655118728670e+00 + 2.7945782624624531e+00 3.7942466146446359e+00 3.3732343463313774e+00 + 2.5768968182851753e+00 3.1627556710204026e+00 3.7452214005812015e+00 + 2.5483926562942338e+00 2.4848560567220312e+00 3.9078963359925005e+00 + 2.5199966825036419e+00 2.1936882196487915e+00 3.8121653192037228e+00 + id 14193 + loc 5.4754775762557983e-01 6.6430860757827759e-01 393 + blend 0.0000000000000000e+00 + interp 4.6117265830779564e-01:3.4419102741483554e-01:8.2337405145982756e-02:4.6116804658121258e-01:7.6909064604189614e-01:3.8019982926220836e-01:1.0925979625263222e+00:3.9501304192368142e-01:1.7279495882815010e+00:3.8881812470862481e-01:2.0370013955645887e+00:3.7918248211117472e-01:2.8981280905351356e+00:2.6385714417591843e-01:3.6626877080141118e+00 + CVs 20 + -3.4407984313086792e-01 2.6132202743169597e-01 -1.1676839765270880e-01 + -6.6283793577734040e-01 5.2529236354946240e-01 -2.4023666426316903e-01 + -9.4930217804514971e-01 8.1265069625550812e-01 -3.8713987403596373e-01 + -1.1940927280549005e+00 1.1213349101163039e+00 -5.6311508928590370e-01 + -1.4012668458797166e+00 1.4423942470012889e+00 -7.6746927234062690e-01 + -1.5825293527931947e+00 1.7720109710036762e+00 -1.0002794464931015e+00 + -1.7527482233966780e+00 2.1127789292313075e+00 -1.2635113926939079e+00 + -1.9442155865968558e+00 2.4651011201339816e+00 -1.5602787403692666e+00 + -2.2037246273674946e+00 2.7998661236246773e+00 -1.8847851145736265e+00 + -2.5424736666277807e+00 3.0649984199767157e+00 -2.2190638826483990e+00 + -2.9327925140655902e+00 3.2424087319280481e+00 -2.5607564193797927e+00 + -3.3650986797790643e+00 3.3401878786341057e+00 -2.9292081039729356e+00 + -3.8450829354422975e+00 3.3408616188918314e+00 -3.3172486201899196e+00 + -4.3520996166910910e+00 3.2118427292535365e+00 -3.6714996766745656e+00 + -4.8523756557437396e+00 2.9418197513386941e+00 -3.9631090575198562e+00 + -5.3347404503358984e+00 2.5227141361063934e+00 -4.2244974901920784e+00 + -5.8186682174558308e+00 1.9696539921097991e+00 -4.4473269678604987e+00 + -6.3228230980731555e+00 1.3646235264771764e+00 -4.5099676321333124e+00 + -6.8048813027336372e+00 8.1737478282672660e-01 -4.3325997607481623e+00 + id 14194 + loc 8.1497853994369507e-01 7.3292106389999390e-01 400 + blend 0.0000000000000000e+00 + interp 4.0362862448200976e-01:3.2499167245221949e-01:2.1171900954717615e-01:3.2963549808994869e-01:9.9608496248388667e-01:3.3319541581929379e-01:1.8331902118531653e+00:3.2990418589103793e-01:2.3715729718832153e+00:4.0362458819576497e-01:2.9725959016602284e+00:2.9561232830514456e-01:3.4337879066557804e+00 + CVs 20 + -1.3705110652904376e-01 1.8446640012002374e-01 -2.5377556373841903e-01 + -2.8546462213517887e-01 3.6188236086544012e-01 -4.8564115669951158e-01 + -4.3119988560843592e-01 5.3476404507189768e-01 -7.0180235738768326e-01 + -5.7321677097502544e-01 7.0414924934405276e-01 -9.0239257390627281e-01 + -7.1970572115744980e-01 8.7055064945403027e-01 -1.0872027979652132e+00 + -8.7766387485099095e-01 1.0377748902804129e+00 -1.2620334327177583e+00 + -1.0499413699451030e+00 1.2168885832903187e+00 -1.4397489494676274e+00 + -1.2345209907014649e+00 1.4209809445288997e+00 -1.6410585913217968e+00 + -1.4225964521696448e+00 1.6499355691751825e+00 -1.8887347402473607e+00 + -1.6006555360955368e+00 1.8897195643951261e+00 -2.1984990238423561e+00 + -1.7506012494088339e+00 2.1248049277690710e+00 -2.5769229634902779e+00 + -1.8560258251872692e+00 2.3397729910992542e+00 -3.0293593315007090e+00 + -1.9098647662576731e+00 2.5088110453756607e+00 -3.5693746896565135e+00 + -1.9052250882266553e+00 2.5890239860687889e+00 -4.2061578940186761e+00 + -1.8200443565158244e+00 2.5335583610177563e+00 -4.9193565322880186e+00 + -1.6239805872929933e+00 2.3107769377005392e+00 -5.6490092810541519e+00 + -1.3114751383211587e+00 1.9187866883829723e+00 -6.2988730050202024e+00 + -9.3413594302198044e-01 1.4175760617447870e+00 -6.7553850352741591e+00 + -6.5504515935204899e-01 1.0317292338899939e+00 -6.8708119227128073e+00 + id 14195 + loc 5.2691664546728134e-02 1.7009226977825165e-01 401 + blend 0.0000000000000000e+00 + interp 4.5678259984832825e-01:4.0705217684119255e-01:1.5498571041244835e-01:2.8732617809691402e-01:8.5472822809388282e-01:3.7927765720139928e-01:1.1751968010474043e+00:2.7421145495308374e-01:1.9994796709435305e+00:4.5677803202232981e-01:2.3188503775345106e+00:4.0656905511175800e-01:3.1792533677528527e+00:2.9690122553482018e-01:3.8414686647971354e+00 + CVs 20 + -2.4614911921910126e-01 2.0490188540177459e-01 2.2217396648426224e-01 + -4.8275133899540845e-01 4.2529035001457832e-01 3.9376270690274839e-01 + -7.2135684926478894e-01 6.5059777129593444e-01 5.4983643809404481e-01 + -9.7027693166882789e-01 8.7795250479737219e-01 7.0949486792921845e-01 + -1.2348988132098544e+00 1.1076297076615969e+00 8.7942962681906378e-01 + -1.5203306851344123e+00 1.3365967319152854e+00 1.0726685706678483e+00 + -1.8283911473377865e+00 1.5561276053836717e+00 1.3098167462379009e+00 + -2.1580352625184260e+00 1.7510132646537924e+00 1.6173859361769887e+00 + -2.5002394898957916e+00 1.8989320021833909e+00 2.0155841196456965e+00 + -2.8390035608142954e+00 1.9764738598905236e+00 2.5085624830106816e+00 + -3.1619132946652200e+00 1.9643857573378884e+00 3.0855050799665218e+00 + -3.4617566544874290e+00 1.8421417687982249e+00 3.7278745359520440e+00 + -3.7209280040776616e+00 1.5894157131632030e+00 4.4109714707761025e+00 + -3.8904816664584225e+00 1.2136223415285592e+00 5.1096547232758605e+00 + -3.8815722626532683e+00 7.7673697750727011e-01 5.8095451056070715e+00 + -3.6023942650699823e+00 3.9721188728856921e-01 6.4819941134697725e+00 + -3.0314825149779203e+00 2.1708782367342705e-01 7.0520845251760926e+00 + -2.3139979870588268e+00 2.8611585624017677e-01 7.4449568983054615e+00 + -1.8523708576852378e+00 2.7329161151354742e-01 7.8535685453631903e+00 + id 14196 + loc 1.1819081753492355e-01 6.9760143756866455e-02 412 + blend 0.0000000000000000e+00 + interp 3.8010481513805749e-01:3.4152212366438417e-01:2.0251769602805214e-01:3.8010101408990615e-01:1.0162691699248414e+00:3.2681590220387441e-01:2.0400726082113438e+00:2.9893373432650544e-01:2.7621610552909344e+00:3.1218542653763265e-01:3.3256455096941617e+00 + CVs 20 + -1.0770221208465305e-01 1.6258921149349806e-01 -4.4940074029254984e-01 + -2.1108025068966396e-01 2.5810970120068416e-01 -7.8557944956997794e-01 + -2.9804840276394207e-01 3.3204115400887024e-01 -1.1021067178447665e+00 + -3.5841953277540789e-01 4.0387293310609113e-01 -1.4437878565420290e+00 + -3.8524891200281586e-01 4.6378895176800078e-01 -1.8051205294048662e+00 + -3.7139006794926260e-01 5.0308382483205438e-01 -2.1759131469217041e+00 + -3.1163122656414577e-01 5.1580195732656153e-01 -2.5433182441506430e+00 + -2.0628471380645669e-01 4.9848059733926853e-01 -2.8943878352246344e+00 + -6.1326850319091131e-02 4.5044343304035639e-01 -3.2164525945164586e+00 + 1.1400754854484862e-01 3.7433424067118914e-01 -3.4989938805812435e+00 + 3.0900548077518458e-01 2.7205112524948549e-01 -3.7448538726487026e+00 + 5.1186805169621796e-01 1.3572350409513700e-01 -3.9802672005104998e+00 + 7.0304761547023853e-01 -5.1314892720464966e-02 -4.2297264417351537e+00 + 8.5845653406811606e-01 -2.9240902546546388e-01 -4.4785336132945055e+00 + 9.7211037262459188e-01 -5.7010793703719909e-01 -4.6983518505452970e+00 + 1.0498557888337938e+00 -8.6661581425673595e-01 -4.8839346090475804e+00 + 1.0951378048034184e+00 -1.1715122923566077e+00 -5.0438545146060516e+00 + 1.1110358079213636e+00 -1.4727630632060531e+00 -5.1809900869441163e+00 + 1.1237463296136225e+00 -1.7051389011829763e+00 -5.2421513288038106e+00 + id 14197 + loc 8.5374826192855835e-01 2.5194072723388672e-01 402 + blend 0.0000000000000000e+00 + interp 4.8096345090685444e-01:3.2000179946663504e-01:4.7469664511033183e-01:2.7128674508266415e-01:1.3381407221473833e+00:4.8095864127234539e-01:2.0238427715146221e+00:2.9749463688101219e-01:2.9174191901736215e+00:3.0006920074967336e-01:3.8257764553229996e+00 + CVs 20 + 2.8184525514765246e-01 3.4001527480088267e-01 2.1025222918925993e-01 + 5.4334196428771220e-01 6.9125436734986323e-01 4.3500998388084477e-01 + 7.9229203234598133e-01 1.0348095627861036e+00 6.7746146694754628e-01 + 1.0579937694603920e+00 1.3412053281056875e+00 9.0894343507544961e-01 + 1.3653664625587660e+00 1.5892389164799019e+00 1.1100227195396546e+00 + 1.7266301185086224e+00 1.7719176618580528e+00 1.2873959243372961e+00 + 2.1474858497574725e+00 1.8790194363140846e+00 1.4658411585576963e+00 + 2.6231943091711987e+00 1.8859542093547703e+00 1.6782656541430245e+00 + 3.1215783033092781e+00 1.7550512157604019e+00 1.9483159277772282e+00 + 3.5784451643821149e+00 1.4497681042571371e+00 2.2707442307419905e+00 + 3.9276022647031583e+00 9.9361512754286063e-01 2.5964618123717305e+00 + 4.1983531524987132e+00 5.1193833450681026e-01 2.8662443622139251e+00 + 4.4935212314699156e+00 1.1768766269960818e-01 3.0691236880769446e+00 + 4.8577752403238321e+00 -1.3489446889749734e-01 3.2220910575023209e+00 + 5.2684488024837623e+00 -2.3882151222705028e-01 3.3595484240378011e+00 + 5.7018101037761024e+00 -2.5540552336662525e-01 3.5453372911804832e+00 + 6.1619362546628791e+00 -2.4983744007633280e-01 3.8483347882837675e+00 + 6.6172068296413045e+00 -2.1942075144394102e-01 4.2612032801643442e+00 + 7.0290279087498089e+00 -1.5908705174444915e-01 4.6564402581789919e+00 + id 14198 + loc 6.4063847064971924e-01 7.1405315399169922e-01 399 + blend 0.0000000000000000e+00 + interp 4.1247442242630133e-01:3.6784909806917188e-01:4.5533604597283217e-01:4.1247029768207710e-01:1.0181181441128782e+00:3.6538580390541975e-01:1.7410351233514905e+00:2.6585413511378769e-01:2.3682161930727323e+00:3.7626260171844950e-01:2.9771009061147931e+00:3.3964813110564374e-01:3.5659884151259598e+00 + CVs 20 + -2.0357572802714563e-01 3.6303671054058340e-01 -3.0127478626823406e-01 + -3.8703378145032324e-01 6.9332995548231402e-01 -6.3394750990823212e-01 + -5.7689863927785801e-01 9.7080661367786203e-01 -1.0024065369942350e+00 + -7.7906211596639496e-01 1.1736803983859478e+00 -1.3992251305919150e+00 + -9.8621810012160582e-01 1.2822301782518006e+00 -1.8081457461957633e+00 + -1.1822059795538433e+00 1.2870339891655576e+00 -2.2067540612980148e+00 + -1.3553607478979719e+00 1.2023499121091976e+00 -2.5801840478344245e+00 + -1.5093355488407900e+00 1.0573378259966011e+00 -2.9314869383317257e+00 + -1.6360974046307530e+00 8.7523808661311620e-01 -3.2561787541340523e+00 + -1.7094991116746447e+00 6.8305424797401648e-01 -3.5357773307305349e+00 + -1.7537896829796900e+00 4.9464636669220707e-01 -3.7945095523236629e+00 + -1.8496991467860153e+00 2.6081645668477671e-01 -4.0985767840226126e+00 + -2.0378724882716552e+00 -4.2131330049138271e-02 -4.4592162246843934e+00 + -2.2953438485835211e+00 -3.4680762746379251e-01 -4.8306873809350188e+00 + -2.6162909862172112e+00 -6.3282228132895846e-01 -5.1929782769945962e+00 + -3.0630975720213143e+00 -9.8752495565161613e-01 -5.5510457933854784e+00 + -3.7083601318480874e+00 -1.3985826118714617e+00 -5.8926713152312438e+00 + -4.4243976089377233e+00 -1.5820112796257719e+00 -6.1872621569268809e+00 + -4.8548435490343085e+00 -1.4327257086098841e+00 -6.3983329264588749e+00 + id 14199 + loc 1.5725228190422058e-01 6.3348311185836792e-01 404 + blend 0.0000000000000000e+00 + interp 4.5693960753446194e-01:3.6018488241728586e-01:4.4786396946789964e-01:4.5693503813838660e-01:1.0000429463448290e+00:4.0541554882120662e-01:1.9240592836899864e+00:2.8874370885960088e-01:2.1869526721684842e+00:4.0624413869950343e-01:3.0043545517159695e+00:2.9085798847292160e-01:3.6578985609789276e+00 + CVs 20 + 3.0550166053325552e-02 -7.0549301943791054e-02 3.8771989981117500e-02 + -7.3460123778955902e-02 -1.5007619137278175e-01 9.5277773912069347e-02 + -1.3195274604443133e-01 -2.0206707770336654e-01 1.3783821310010808e-01 + -1.2580163133464531e-01 -2.8667039765913882e-01 1.5530911554876070e-01 + -9.9179410977343396e-02 -3.7387450740580208e-01 1.5911152893727509e-01 + -5.9346537389609239e-02 -4.5562657456056144e-01 1.5564716190591560e-01 + -1.0041384114623519e-02 -5.2855630940467679e-01 1.5079782515479942e-01 + 4.7666649978452935e-02 -5.9086648148202747e-01 1.4893434262886812e-01 + 1.1393914085254192e-01 -6.4059651616442648e-01 1.5360574614772243e-01 + 1.8931987074977058e-01 -6.7494639269116896e-01 1.6811587153399288e-01 + 2.7386192084246552e-01 -6.9031068292115538e-01 1.9517464256384934e-01 + 3.6641528952652613e-01 -6.8256824960983031e-01 2.3675572197355349e-01 + 4.6451943609719248e-01 -6.4793356933942825e-01 2.9240134663602468e-01 + 5.6437742546484082e-01 -5.8371786189461683e-01 3.6043268169010234e-01 + 6.6152769223570895e-01 -4.8964408538799209e-01 4.3660190459014986e-01 + 7.5156802012914314e-01 -3.6789473460363964e-01 5.1663317029838407e-01 + 8.3094564812492777e-01 -2.2361957522329037e-01 5.9535102252197847e-01 + 8.9754878385539438e-01 -6.3339116755368630e-02 6.6844022893879518e-01 + 9.5787705017647551e-01 1.3612292623800498e-01 7.3128158601675419e-01 + id 14200 + loc 6.9272494316101074e-01 6.2445694208145142e-01 395 + blend 0.0000000000000000e+00 + interp 4.5691271833437919e-01:4.5690814920719586e-01:2.7091249604441625e-01:4.3502021210065156e-01:8.6403020450446610e-01:2.7994607826440693e-01:1.0655445808149653e+00:3.3313139255002439e-01:1.8432279762324906e+00:2.6743415635037249e-01:2.2799257919483686e+00:3.5895649961214110e-01:3.0008000431573345e+00:2.9063156079027774e-01:3.6661005888622364e+00 + CVs 20 + 4.4950932626937284e-01 1.3033424145499622e-01 -4.6281890683509563e-01 + 8.0574793589018379e-01 2.0667039062412607e-01 -8.3507205221037850e-01 + 1.1373071363802953e+00 2.7195229269691090e-01 -1.1746712063253828e+00 + 1.4711955661167682e+00 3.4059017472529118e-01 -1.4979696627473904e+00 + 1.8072995861154166e+00 4.0648844844529664e-01 -1.7966172924638983e+00 + 2.1444974087386783e+00 4.6381386247227707e-01 -2.0664231942240070e+00 + 2.4819585053190791e+00 5.0820222977664553e-01 -2.3068901692756301e+00 + 2.8195293759650459e+00 5.3614061023747506e-01 -2.5187949928611895e+00 + 3.1586281276972574e+00 5.4373376219272651e-01 -2.7052974686828613e+00 + 3.5036793505218995e+00 5.2472176850037577e-01 -2.8749746880688378e+00 + 3.8559426177059324e+00 4.6854027382730923e-01 -3.0407604487719277e+00 + 4.2030064860424750e+00 3.6550772602491888e-01 -3.2131724901369840e+00 + 4.5241307712854244e+00 2.1537635096143903e-01 -3.3962350237225483e+00 + 4.8040526040276408e+00 2.4551171409853190e-02 -3.5903806054803553e+00 + 5.0324679227293210e+00 -1.9628576255428110e-01 -3.7954991085549969e+00 + 5.2002704988187167e+00 -4.3096604329835175e-01 -4.0139089350426005e+00 + 5.3017415231968563e+00 -6.6952969190473155e-01 -4.2509134735641068e+00 + 5.3303322495140462e+00 -9.1250213460937912e-01 -4.4999341531173798e+00 + 5.2415686183210592e+00 -1.1880445983412811e+00 -4.6911813175062749e+00 + id 14201 + loc 9.1868990659713745e-01 9.5418155193328857e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4867876478411622e-01:3.8820965545954922e-01:7.2218345980195453e-01:4.4779440187616432e-01:1.4210919385979714e+00:3.1139884434945875e-01:2.0210548347043629e+00:4.4867427799646842e-01:2.7047904561625398e+00:4.1334389605503330e-01:3.2064583242683056e+00:3.1849514309450655e-01:3.7872989592829160e+00 + CVs 20 + 6.6961841360242608e-02 2.5219295025870170e-01 -6.7442597438873847e-02 + 1.4463110455723602e-01 5.1866734833328709e-01 -1.1386793366584552e-01 + 2.4264840333121082e-01 7.9793947436296953e-01 -1.5920512367807260e-01 + 3.6765240551567402e-01 1.0832350124543186e+00 -2.1866496622833026e-01 + 5.2524436826890186e-01 1.3732870190100812e+00 -2.9983762040593293e-01 + 7.2201050868938355e-01 1.6639694449662028e+00 -4.1249751133140239e-01 + 9.6359290898506811e-01 1.9408962206134681e+00 -5.6870971336428811e-01 + 1.2491768516741302e+00 2.1803827336173875e+00 -7.7651542579375110e-01 + 1.5698030284585351e+00 2.3603144613973512e+00 -1.0365701108994319e+00 + 1.9109717794626284e+00 2.4644104846277655e+00 -1.3443307538244571e+00 + 2.2547506732278015e+00 2.4811349961904781e+00 -1.6911858356389642e+00 + 2.5810544327501148e+00 2.4046755981535126e+00 -2.0638643140432045e+00 + 2.8700975828590352e+00 2.2365831617175811e+00 -2.4435597172534926e+00 + 3.1060576486576679e+00 1.9876282760412711e+00 -2.8064848584511819e+00 + 3.2817017985314001e+00 1.6769437897869728e+00 -3.1283744077515840e+00 + 3.4009183924665938e+00 1.3231401488544048e+00 -3.3895336212195146e+00 + 3.4724631441733589e+00 9.4125893641983605e-01 -3.5565962940572988e+00 + 3.4986837869277916e+00 5.7552134238620178e-01 -3.5593999602157549e+00 + 3.4909604929402431e+00 2.6790198553196953e-01 -3.4765148281207066e+00 + id 14202 + loc 7.1028482913970947e-01 2.7076262235641479e-01 379 + blend 0.0000000000000000e+00 + interp 4.0158694478260060e-01:4.0158292891315278e-01:4.4475914911174308e-02:2.7356126927294555e-01:8.6062950399755345e-01:3.2568612580749728e-01:1.6864845589814206e+00:3.8835015120329830e-01:2.0002895262587446e+00:3.6571679889625053e-01:2.2367774392150395e+00:3.9801118612258396e-01:2.7827066229149353e+00:2.7728740655284151e-01:3.1540565543798245e+00 + CVs 20 + 3.6067991392954146e-01 3.8365832458476756e-01 -8.5140648083221068e-02 + 6.7606958095793435e-01 7.1835629232121112e-01 -1.7006318293677739e-01 + 9.9831919289546811e-01 9.9775557180675145e-01 -2.8894731149793607e-01 + 1.3387722210302233e+00 1.2190650920769135e+00 -4.4717231526679202e-01 + 1.6936040019602405e+00 1.4006691912130016e+00 -6.2779430934655855e-01 + 2.0696970268472956e+00 1.5605909507870233e+00 -8.1520806758519293e-01 + 2.4759375423271783e+00 1.6897503381001080e+00 -9.9591724236432688e-01 + 2.9119632839884346e+00 1.7672647792531537e+00 -1.1587640083577810e+00 + 3.3637798142987538e+00 1.7848437110793820e+00 -1.2956374296908020e+00 + 3.8061213530736913e+00 1.7489851898728541e+00 -1.4009201867524668e+00 + 4.2082994413772576e+00 1.6768221324679358e+00 -1.4799160743603501e+00 + 4.5499033579661843e+00 1.5939258287892468e+00 -1.5492482249930228e+00 + 4.8358101150087300e+00 1.5099238314506109e+00 -1.6204468267495906e+00 + 5.0846412440437341e+00 1.3788967371735672e+00 -1.6953678537363073e+00 + 5.3043600168735505e+00 1.1337332753336358e+00 -1.7751504547643542e+00 + 5.5037646082317977e+00 7.8391876649281667e-01 -1.8425133252162764e+00 + 5.6839763564600752e+00 4.1509147072492514e-01 -1.8562045407274472e+00 + 5.8501262152583742e+00 9.7781745409628584e-02 -1.8166547520248326e+00 + 6.1125737338891701e+00 -9.6944044235820037e-02 -1.8535389844990113e+00 + id 14203 + loc 6.3027399778366089e-01 3.3882808685302734e-01 378 + blend 0.0000000000000000e+00 + interp 5.2960817345988709e-01:4.9963474675121156e-01:3.3369604014081056e-01:4.3743714681414664e-01:8.5842366411107984e-01:3.1502161769922948e-01:1.1322582950845508e+00:3.8766450416142095e-01:1.9066190615498069e+00:5.2960287737815248e-01:2.0826083190102493e+00:3.2813019145841449e-01:2.9654912058801468e+00:3.1360772350417598e-01:3.8526997909141603e+00 + CVs 20 + -4.0547613464342774e-01 4.3927053753825934e-01 -1.8398422319173252e-01 + -8.0302621610375480e-01 8.3172979622243648e-01 -3.3701693502236196e-01 + -1.2013477384753486e+00 1.1845039841563452e+00 -4.6801752644187233e-01 + -1.5866421433062190e+00 1.5083805456170127e+00 -5.9333743214346468e-01 + -1.9481713202127620e+00 1.8008179065841650e+00 -7.3054361937968748e-01 + -2.2949947270669693e+00 2.0517695334249799e+00 -8.9204377834363879e-01 + -2.6356054117900762e+00 2.2520967476897300e+00 -1.0799086172249714e+00 + -2.9736665640369488e+00 2.4002526659844019e+00 -1.2849539881497725e+00 + -3.3191395391568506e+00 2.4999566938708022e+00 -1.4996313704181961e+00 + -3.6875027612611011e+00 2.5512247871457947e+00 -1.7238611031287228e+00 + -4.0876604636944904e+00 2.5433199639066388e+00 -1.9589659570725328e+00 + -4.5168662963433688e+00 2.4552134149526088e+00 -2.2002114141513931e+00 + -4.9565295577115549e+00 2.2673366424705472e+00 -2.4282852128999082e+00 + -5.3723628305764191e+00 1.9953520487739800e+00 -2.6069925679780859e+00 + -5.7461200752703423e+00 1.6963765672529805e+00 -2.7208643091138525e+00 + -6.0879402813059578e+00 1.4257192746162271e+00 -2.7963025039110541e+00 + -6.4055158393900964e+00 1.2271853678000433e+00 -2.8556844055192343e+00 + -6.7122972644909424e+00 1.1078251133982175e+00 -2.9028113053721913e+00 + -7.1438761048892943e+00 9.1882852900513479e-01 -3.0113241038081004e+00 + id 14204 + loc 6.5001451969146729e-01 8.7875455617904663e-01 373 + blend 0.0000000000000000e+00 + interp 4.2212134648341748e-01:4.2211712526995265e-01:2.8740087003437720e-01:2.9634151414630278e-01:1.0136350231876396e+00:2.9499136579398616e-01:1.9639469127285762e+00:4.1523602942853249e-01:2.5343541972157784e+00:2.9286460106413276e-01:3.5741552914703085e+00 + CVs 20 + -2.3639489096736965e-01 3.1194287946510951e-01 -1.5594447329928757e-01 + -4.7953687471265671e-01 6.4367515332333924e-01 -3.2007633822219961e-01 + -7.0718653664117670e-01 9.9530910190500821e-01 -4.9245181835346097e-01 + -9.0928667773383187e-01 1.3644101441458247e+00 -6.8399656139182730e-01 + -1.0831945803752223e+00 1.7392838759863791e+00 -9.1247685210808305e-01 + -1.2320518931180036e+00 2.0903313888754949e+00 -1.1970557740706638e+00 + -1.3625507537922492e+00 2.3775356064635362e+00 -1.5481042872215816e+00 + -1.4792024848068410e+00 2.5727063323596040e+00 -1.9563341409613129e+00 + -1.5799145159306947e+00 2.6715161904264502e+00 -2.4005815641800567e+00 + -1.6537843666323242e+00 2.6841623343265604e+00 -2.8627573708216425e+00 + -1.6914962082695486e+00 2.6097848135299828e+00 -3.3228030106579420e+00 + -1.7073170112234550e+00 2.4311790325887737e+00 -3.7355244781663779e+00 + -1.7492162832240012e+00 2.1761132671821040e+00 -4.0410093395765951e+00 + -1.8672409817384850e+00 1.9532135713924383e+00 -4.2203843933616429e+00 + -2.0574134276357952e+00 1.8791306568882247e+00 -4.2764069053669260e+00 + -2.2191120228173493e+00 2.0167758997495620e+00 -4.1885433479518595e+00 + -2.1722695723224392e+00 2.3005183140038938e+00 -3.9732197379257572e+00 + -1.9655966345205185e+00 2.4769073741258643e+00 -3.8131298656820802e+00 + -2.1569621274497575e+00 2.4912242564781906e+00 -3.8737611133139596e+00 + id 14205 + loc 1.0512611269950867e-01 6.5847194194793701e-01 400 + blend 0.0000000000000000e+00 + interp 4.6754597767746109e-01:3.2227420758565239e-01:7.3655430863089144e-01:4.6754130221768436e-01:1.3142411507249963e+00:3.0062711150610777e-01:1.9771147519968566e+00:3.7156114297231302e-01:2.9614297920172259e+00:2.9463189043635185e-01:3.8568553116396433e+00 + CVs 20 + -2.1130947438195669e-01 3.0918243752327673e-01 -7.1836094181724180e-02 + -4.1985113622331921e-01 6.0536452564257848e-01 -1.8474129663813743e-01 + -6.2314981099173150e-01 8.7903041368112977e-01 -3.4934550811855336e-01 + -8.1703920091326376e-01 1.1223587282569749e+00 -5.6918449794374826e-01 + -9.9651628268242931e-01 1.3296305008251628e+00 -8.4194857162240999e-01 + -1.1567959990750454e+00 1.4961932460782756e+00 -1.1606946516566858e+00 + -1.2931184862880489e+00 1.6185061674708596e+00 -1.5157890177306093e+00 + -1.3993143566660542e+00 1.6933903344368644e+00 -1.8946753579828908e+00 + -1.4685030587260144e+00 1.7194246714020196e+00 -2.2859826363571449e+00 + -1.4931506793612344e+00 1.6956741806520594e+00 -2.6799735259964663e+00 + -1.4715888135162223e+00 1.6228652707299669e+00 -3.0712797639794820e+00 + -1.4192858687276055e+00 1.5042332294482714e+00 -3.4670706216939124e+00 + -1.3663763134518589e+00 1.3374728546914394e+00 -3.8712464409336151e+00 + -1.3462698067736931e+00 1.1080076550241116e+00 -4.2569368249401895e+00 + -1.3898629242592178e+00 8.0205077532052638e-01 -4.5843702427994151e+00 + -1.5234016999830724e+00 4.3137288008640473e-01 -4.8544351925496976e+00 + -1.7668191992894708e+00 2.7068169060782576e-02 -5.1007702967019304e+00 + -2.1061357829235297e+00 -3.7542986886965335e-01 -5.3330265479358747e+00 + -2.3461668646462397e+00 -7.4846069137818483e-01 -5.6389289259156463e+00 + id 14206 + loc 3.6062443256378174e-01 4.1411975026130676e-01 381 + blend 0.0000000000000000e+00 + interp 4.3717236951021715e-01:3.8780438571500042e-01:3.2342676192940467e-01:3.9399750427846097e-01:1.0327082923281545e+00:4.3716799778652204e-01:1.8759238994075016e+00:3.5296408767733523e-01:2.3038277161296334e+00:4.0770761887467022e-01:3.0014396434212189e+00 + CVs 20 + -7.2942077426356744e-01 2.0259184899417690e-01 -8.5315709237416648e-01 + -1.2583608789570484e+00 2.6146574369065995e-01 -1.3582855948896673e+00 + -1.7306059848465503e+00 2.5975202591271129e-01 -1.7708975591255125e+00 + -2.1957781472008495e+00 2.3843720993526241e-01 -2.2093519171236502e+00 + -2.6369117873398769e+00 1.9596027641922104e-01 -2.6948765280100409e+00 + -3.0463750428331964e+00 1.3212608541777693e-01 -3.2456621050980003e+00 + -3.4335968984164880e+00 3.7211145145718882e-02 -3.8698027483146320e+00 + -3.8148047495384314e+00 -1.0899489142512198e-01 -4.5589317669545535e+00 + -4.2003241346794775e+00 -3.3183728719052241e-01 -5.2901550457907600e+00 + -4.5955741685221474e+00 -6.5990578959388491e-01 -6.0289076598244442e+00 + -5.0043081120435753e+00 -1.1168667180412855e+00 -6.7238688914917724e+00 + -5.4175632697086495e+00 -1.7138403068455021e+00 -7.3113095863986466e+00 + -5.8109212935310204e+00 -2.4343764743786398e+00 -7.7317413828165922e+00 + -6.1634607414990006e+00 -3.2099138901863302e+00 -7.9599188260285096e+00 + -6.4769377051185817e+00 -3.9485481687024011e+00 -8.0338770821370282e+00 + -6.7654637460957678e+00 -4.6152315804035586e+00 -8.0248094538059593e+00 + -7.0410856560462642e+00 -5.2144650532395049e+00 -7.9866324354003044e+00 + -7.3141468267391669e+00 -5.7583811830744258e+00 -7.9226100818263525e+00 + -7.5344749909286231e+00 -6.3202234148555849e+00 -7.8305841658099649e+00 + id 14207 + loc 7.5167906284332275e-01 5.6594973802566528e-01 401 + blend 0.0000000000000000e+00 + interp 3.9097297171154466e-01:3.6737449331115207e-01:2.6771977351596532e-02:3.7625387515576958e-01:9.0032731080401174e-01:3.8742814971681944e-01:1.1694188976337516e+00:3.5917193226207877e-01:1.8756174396822209e+00:3.7947528792592616e-01:2.3478750647460935e+00:3.6690168843838233e-01:2.9883916930163332e+00:3.9096906198182757e-01:3.5286834512476348e+00 + CVs 20 + -1.2764593963850496e-01 3.4570052918819494e-01 -3.3709858805392084e-01 + -2.3740841859393577e-01 6.8826867639734379e-01 -6.5709307660546379e-01 + -3.5216916123904851e-01 1.0122442843749044e+00 -9.8655090459719608e-01 + -4.8194866307985484e-01 1.3027610083960943e+00 -1.3414876281879704e+00 + -6.3550851021245314e-01 1.5487736551090490e+00 -1.7294243964269369e+00 + -8.3083742584522202e-01 1.7438365337126867e+00 -2.1429806687979687e+00 + -1.0858772825721701e+00 1.8841059709387955e+00 -2.5593763581758457e+00 + -1.4069434720097889e+00 1.9669693045695811e+00 -2.9531016194981778e+00 + -1.7887685720054214e+00 1.9935979186491388e+00 -3.3080077489002218e+00 + -2.2222340491236019e+00 1.9683629658729560e+00 -3.6240187036076290e+00 + -2.6977679702651942e+00 1.8898485438093791e+00 -3.9116091170940388e+00 + -3.2047364403670953e+00 1.7483926962439957e+00 -4.1841970960562911e+00 + -3.7282503895394821e+00 1.5304574172298848e+00 -4.4456813160599449e+00 + -4.2495004971856494e+00 1.2334791591789811e+00 -4.6753977597501164e+00 + -4.7494679758612461e+00 8.7712597176726348e-01 -4.8536205441700391e+00 + -5.2026094716498106e+00 5.0645640487570098e-01 -5.0213292261804376e+00 + -5.5748536989462067e+00 1.8246920188519350e-01 -5.2702170499414809e+00 + -5.8578373430744950e+00 -7.8324052198202931e-02 -5.6026635475388495e+00 + -6.1955740572316635e+00 -4.2243230499207329e-01 -5.7938539208451960e+00 + id 14208 + loc 8.8788354396820068e-01 8.4592801332473755e-01 405 + blend 0.0000000000000000e+00 + interp 5.2036919370162193e-01:3.1361521864264125e-01:2.7627989996276348e-01:3.7583412773411096e-01:9.9994611548193157e-01:4.7023824943975046e-01:1.3217776888188177e+00:3.1332132011244623e-01:1.9899761750349241e+00:5.2036399000968492e-01:2.1890378979794907e+00:2.7748222124430283e-01:3.4460031588592694e+00 + CVs 20 + 2.1185031889748415e-01 3.2314580825177130e-01 -1.0077639745174610e-01 + 2.5671303152335062e-01 5.1822889087254798e-01 -1.9913248921819787e-01 + 2.5343394225918098e-01 6.7015524321217279e-01 -2.9720710760871494e-01 + 2.4798302588645521e-01 8.1634658025952833e-01 -3.9679066572702365e-01 + 2.4248480927635235e-01 9.6208718175158081e-01 -4.9322582114617658e-01 + 2.4498263317052932e-01 1.1218401442490116e+00 -5.8031333871170510e-01 + 2.7777521327449872e-01 1.3267132376517430e+00 -6.3775995706601885e-01 + 3.8558924168126330e-01 1.5987984638078905e+00 -5.9489734751859480e-01 + 5.6515640425952374e-01 1.8330952617286935e+00 -3.8913662339653843e-01 + 7.2717171752489784e-01 1.9426067420436708e+00 -1.3823442269292846e-01 + 8.5640929589581227e-01 1.9910847619154990e+00 8.9081003122895408e-02 + 9.7424703176516547e-01 2.0151436077256837e+00 3.1147983914742561e-01 + 1.0864982120690079e+00 2.0273425570355057e+00 5.3447615449837571e-01 + 1.1823667774420672e+00 2.0526425532111139e+00 7.3392553382768222e-01 + 1.2464759772835587e+00 2.1164402107433071e+00 8.8271316712644832e-01 + 1.2749975125248090e+00 2.2111396482622032e+00 9.8258304631243953e-01 + 1.2813295974675503e+00 2.3084041262310420e+00 1.0588075643988510e+00 + 1.2793199467532850e+00 2.3906443200574250e+00 1.1287741742763360e+00 + 1.3913603004525541e+00 2.4087929120316884e+00 1.3163320185399536e+00 + id 14209 + loc 9.9347311258316040e-01 3.1824433803558350e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1967714201929224e-01:3.1686398933564974e-01:1.2140708291024205e-02:4.1967294524787208e-01:7.9097292573549249e-01:2.7259604411583443e-01:1.3162721929206846e+00:3.1494975306492295e-01:2.2251019293883347e+00:2.6959854327480365e-01:2.9152998503408449e+00:2.9866575821972091e-01:3.6240921146385965e+00 + CVs 20 + -7.9398055490504632e-02 3.4969690655649638e-01 3.0579336492633613e-01 + -2.1352522226425852e-01 6.7832731961236137e-01 5.8407166480523565e-01 + -4.0744736311535390e-01 9.9230995259141608e-01 8.4974686537182209e-01 + -6.6402947556433045e-01 1.2915419026251782e+00 1.0901133532635119e+00 + -9.5328331293369450e-01 1.5867342564141291e+00 1.2872192870198156e+00 + -1.1999584076368621e+00 1.9147362331918343e+00 1.4476447801640624e+00 + -1.3319981826622684e+00 2.2932329782851637e+00 1.5922047597840665e+00 + -1.3383026154451478e+00 2.6976174264380521e+00 1.7536263641334462e+00 + -1.2287414601995217e+00 3.0861970536551970e+00 1.9955780796730784e+00 + -9.7967719733622927e-01 3.3590467140076581e+00 2.3978126424855852e+00 + -6.0821599433686213e-01 3.3535431337708763e+00 2.9230287022917407e+00 + -2.3778080259678092e-01 3.0727153557284130e+00 3.4050805305885543e+00 + 4.6676436200492111e-02 2.6451797650390825e+00 3.7989216777396537e+00 + 2.0930122280764096e-01 2.1502084513146409e+00 4.1360035782654414e+00 + 2.3518059197690211e-01 1.6243517144583941e+00 4.4243446514850682e+00 + 1.2302064374537824e-01 1.0587141071170842e+00 4.6180858041029138e+00 + -1.2759767978282466e-01 4.6446964346935982e-01 4.6445915054186528e+00 + -4.4569626254182437e-01 -3.0379092380002692e-02 4.5311917376605741e+00 + -5.5333720857327351e-01 -2.2567705548809824e-01 4.5980920524233992e+00 + id 14210 + loc 2.5622478127479553e-01 2.9691481590270996e-01 393 + blend 0.0000000000000000e+00 + interp 3.9398786119710816e-01:3.2971711390375708e-01:1.0558675441824084e-01:3.9398392131849619e-01:7.4757530515560944e-01:3.2806793234855752e-01:1.0492585177107410e+00:3.3165477893750006e-01:1.9970239594804602e+00:3.3295434015644720e-01:2.9702373362244656e+00:3.6201544467567459e-01:3.3854098413910525e+00 + CVs 20 + -7.6839245797146599e-02 2.8328773254518153e-01 3.0721422322961783e-01 + -1.6600089442342722e-01 5.7119317539452819e-01 6.0300116069511511e-01 + -2.5084579944241570e-01 8.6456331106975925e-01 8.6690187874462254e-01 + -3.2355885785376720e-01 1.1544768239161411e+00 1.0872512252662883e+00 + -4.0238968491535942e-01 1.4349444183503901e+00 1.2767096581748241e+00 + -5.1732095646098442e-01 1.7046289664362888e+00 1.4540641126759533e+00 + -6.8622027904534422e-01 1.9664973490618300e+00 1.6152779942562083e+00 + -9.1773184844525235e-01 2.2252111481402825e+00 1.7443134104284530e+00 + -1.2237657747816320e+00 2.4751010077892213e+00 1.8438453930750787e+00 + -1.6123685919324917e+00 2.6959445655469820e+00 1.9390215280457994e+00 + -2.0767643496604355e+00 2.8533353827515255e+00 2.0631587426533713e+00 + -2.5919301135124799e+00 2.9023400156841328e+00 2.2396410122876453e+00 + -3.1179582082399522e+00 2.7976990904647212e+00 2.4666734335173066e+00 + -3.5850531541169630e+00 2.5033711013901212e+00 2.7335619169379290e+00 + -3.8787867301159444e+00 2.0201185138158610e+00 3.0401496420653080e+00 + -3.8955568888909888e+00 1.4286470510709424e+00 3.4048356957443708e+00 + -3.6232256240118543e+00 8.8541069486241231e-01 3.8545507210847698e+00 + -3.1681425439142723e+00 5.0696218584400987e-01 4.3639759597937795e+00 + -2.7598047082118171e+00 1.2889754377962448e-01 4.8556309741601078e+00 + id 14211 + loc 6.3902294635772705e-01 3.5336518287658691e-01 412 + blend 0.0000000000000000e+00 + interp 5.1282242907247211e-01:2.9455803615478532e-01:7.8793598154905675e-01:3.9331800641869435e-01:1.1923235180722136e+00:3.4431922450374580e-01:2.0144535910682233e+00:5.1281730084818145e-01:2.7013790850130741e+00:3.8728991520763800e-01:3.0486124989977563e+00:3.2761983514471693e-01:3.9907760974278785e+00 + CVs 20 + -6.3555479131005610e-01 1.8854589091031720e-01 1.9489402617551721e-01 + -1.0848224001267641e+00 2.7292082475016610e-01 3.8033690198568937e-01 + -1.4821216862076099e+00 3.1688770515029241e-01 5.6468068700330665e-01 + -1.8851707344906503e+00 3.3951769470604953e-01 7.5619886844569295e-01 + -2.2904103462286214e+00 3.3914057832797340e-01 9.4829593025523906e-01 + -2.6950458175325762e+00 3.1679717201033075e-01 1.1332725923700138e+00 + -3.0968284684799094e+00 2.7567070240078229e-01 1.3031957792437379e+00 + -3.4917736455452895e+00 2.1989847021342390e-01 1.4512330617422220e+00 + -3.8717953050651044e+00 1.5506940097228261e-01 1.5723876353214901e+00 + -4.2284182095627125e+00 8.7890025636778280e-02 1.6650091311349811e+00 + -4.5530623891111022e+00 2.3167851177267273e-02 1.7330849834154818e+00 + -4.8384596586668902e+00 -3.8089626962494849e-02 1.7869558796001228e+00 + -5.0897217894879736e+00 -9.6446465368267065e-02 1.8361282223420483e+00 + -5.3265908559774440e+00 -1.5611546417568611e-01 1.8858561933025495e+00 + -5.5618717580418497e+00 -2.1970739586117616e-01 1.9386243778612045e+00 + -5.7953193730108126e+00 -2.8149694652198720e-01 1.9907800828850355e+00 + -6.0241651973605510e+00 -3.3718434599075220e-01 2.0387005498723219e+00 + -6.2417408001733277e+00 -3.9007574623991204e-01 2.0928844657296479e+00 + -6.3939057381474580e+00 -4.4395380993802203e-01 2.2040193105080359e+00 + id 14212 + loc 8.8475340604782104e-01 9.7297227382659912e-01 396 + blend 0.0000000000000000e+00 + interp 3.1370200123483399e-01:2.7946372908705730e-01:2.3978639865013807e-02:2.6991831417576484e-01:1.0038608503061177e+00:3.1369886421482168e-01:1.7249602807039797e+00:2.5821913449976946e-01:2.1798772159976338e+00:3.1013176419368832e-01:2.8605782021753399e+00:2.7399341992169979e-01:3.2210670621752731e+00 + CVs 20 + 1.0669390794447420e+00 1.4268986331804689e-01 -4.6873938112914948e-01 + 1.7303925379430216e+00 9.5895059433713181e-02 -8.9558503815451251e-01 + 2.3036825103248111e+00 -1.3873104858781682e-02 -1.3342529363435403e+00 + 2.8874024908230917e+00 -1.4885703387700555e-01 -1.7954000507108776e+00 + 3.4720293786394616e+00 -3.1386069162108976e-01 -2.2588245469060855e+00 + 4.0421005923234530e+00 -5.1628566516452468e-01 -2.7057456513009357e+00 + 4.5760023677374164e+00 -7.6604222301296887e-01 -3.1196719498452308e+00 + 5.0491646658694362e+00 -1.0706603996006399e+00 -3.4863059283044198e+00 + 5.4316852177404789e+00 -1.4261888124096316e+00 -3.7946825008871850e+00 + 5.6927662606766907e+00 -1.8069652497037576e+00 -4.0415879983410896e+00 + 5.8265926188678048e+00 -2.1746035166359543e+00 -4.2324444800405470e+00 + 5.8655997204363555e+00 -2.5019194618403535e+00 -4.3782770513952620e+00 + 5.8601757597493256e+00 -2.7790007982055887e+00 -4.4895900533562507e+00 + 5.8657434028933597e+00 -3.0052817000182639e+00 -4.5695348747933755e+00 + 5.9252583075553193e+00 -3.1932530819634986e+00 -4.6255441631033349e+00 + 6.0611835032218560e+00 -3.3696952716621058e+00 -4.6736514427182554e+00 + 6.2706351854546734e+00 -3.5674600587150174e+00 -4.7346005516867757e+00 + 6.5251652680247743e+00 -3.8168470846656413e+00 -4.8193855708239042e+00 + 6.7418952499988336e+00 -4.1585741760400525e+00 -4.8984038212570855e+00 + id 14213 + loc 2.3825818207114935e-03 1.9857356324791908e-02 399 + blend 0.0000000000000000e+00 + interp 3.7320344453223830e-01:3.3757804257278584e-01:1.7644906642272318e-01:8.2797707966089221e-02:1.1942694994375607e+00:2.2052040114959320e-01:2.6186991897553811e+00:3.2080387020942508e-01:3.0007960202246009e+00:3.7319971249779299e-01:3.7166437260255969e+00 + CVs 20 + -1.3048065149690258e-01 2.1616343716789840e-01 1.8485451216655135e-01 + -2.7867415767900883e-01 4.5314622665435533e-01 3.7218625307771164e-01 + -4.3756741664739518e-01 7.1573562153420145e-01 5.4021826946188523e-01 + -5.9930912140576154e-01 1.0073666918031443e+00 6.7845154704184218e-01 + -7.5684547111127776e-01 1.3317622100287010e+00 7.9671332430938535e-01 + -9.0150923815569306e-01 1.6894850275613016e+00 9.0922494155636202e-01 + -1.0258838745416372e+00 2.0822985263694775e+00 1.0327646619437703e+00 + -1.1234062123090802e+00 2.5107659033095722e+00 1.1969756007539896e+00 + -1.1840067420540688e+00 2.9486129783954040e+00 1.4442543398747030e+00 + -1.2035481198869036e+00 3.3439251460033517e+00 1.7917924265938288e+00 + -1.2109447139405705e+00 3.6752695920842475e+00 2.2276720782319814e+00 + -1.2628468602689689e+00 3.9455292820503596e+00 2.7556760929607735e+00 + -1.3986945487953255e+00 4.1180981664112952e+00 3.3793725935546339e+00 + -1.6114989853562174e+00 4.1272816302164683e+00 4.0504368292004838e+00 + -1.8825574569049959e+00 3.9531371098615424e+00 4.6825013189698250e+00 + -2.1929883740135514e+00 3.6317433669566777e+00 5.2103584263686624e+00 + -2.4771276362956596e+00 3.2203803898395429e+00 5.6329933319837240e+00 + -2.6524141638607071e+00 2.7696103114128903e+00 6.0042853388488275e+00 + -2.7367492772555000e+00 2.2923301224060824e+00 6.3585451072736552e+00 + id 14214 + loc 7.4744164943695068e-01 9.4019353389739990e-01 379 + blend 0.0000000000000000e+00 + interp 5.8183865885662100e-01:4.0834754441928478e-01:9.4851257349256812e-02:4.9699896619304784e-01:8.7783308117952519e-01:3.0764360915493638e-01:1.8920266533619463e+00:4.5072709815698547e-01:2.1266235113993766e+00:5.8183284047003248e-01:2.9973449336744906e+00:5.0654169803243809e-01:3.5838429772498750e+00 + CVs 20 + -2.5564751926085383e-01 4.7025027020312038e-01 1.7770622949762377e-01 + -5.0438285341683886e-01 9.0207862225494317e-01 3.6423234136490662e-01 + -7.5350648510111196e-01 1.2952773688887906e+00 5.5078609260328060e-01 + -9.9895687959874868e-01 1.6575720908102169e+00 7.1528960056010316e-01 + -1.2538758325242707e+00 1.9957332864911130e+00 8.4829904747178575e-01 + -1.5492197413214805e+00 2.3084017552810359e+00 9.5236298602203706e-01 + -1.9026616368725804e+00 2.5790177804845116e+00 1.0270791226399303e+00 + -2.3090069856112554e+00 2.7891396875929138e+00 1.0726061190336837e+00 + -2.7542339451469822e+00 2.9310772624782544e+00 1.0925295159989736e+00 + -3.2220392748887567e+00 3.0059529540960481e+00 1.0917580083473077e+00 + -3.6990261634115793e+00 3.0216224337585875e+00 1.0738432809794336e+00 + -4.1759162664265395e+00 2.9907077971804532e+00 1.0363597102693656e+00 + -4.6189072671865965e+00 2.9311328479600114e+00 9.8195545771338644e-01 + -4.9466353439574977e+00 2.8809465131984355e+00 9.2424029192083457e-01 + -5.0648235090388987e+00 2.8937269346696559e+00 8.3568339923771284e-01 + -4.9371643333879494e+00 2.9486599590632867e+00 6.0924195456115871e-01 + -4.6285150868039997e+00 2.8836870604006708e+00 1.3263340672718660e-01 + -4.3886681993782464e+00 2.5444960571785034e+00 -4.7895717310424879e-01 + -4.4381813218647173e+00 2.5305915249304745e+00 -3.5901506409315109e-01 + id 14215 + loc 9.6513682603836060e-01 3.2832995057106018e-01 404 + blend 0.0000000000000000e+00 + interp 3.5650365070584195e-01:2.8015710211370581e-01:2.7114962810956711e-02:2.7297302278438579e-01:5.8048104034759840e-01:3.5650008566933489e-01:1.5292550855829772e+00:3.2749127711903259e-01:2.0555512223821655e+00:2.9662820388610389e-01:3.0303204744743306e+00 + CVs 20 + 2.6882976147630952e-02 2.6505721474830068e-01 9.6858950282919992e-02 + 7.7469957985941446e-02 5.0568331874667016e-01 1.8692647482948199e-01 + 1.0447130284546868e-01 7.4617606170902195e-01 2.8540427374880134e-01 + 9.8971913421187385e-02 9.8527843192256270e-01 3.9543711227931883e-01 + 6.0032138937017199e-02 1.2171325504779256e+00 5.1691338482508109e-01 + -1.2205984256508096e-02 1.4355489525669860e+00 6.4665014711706914e-01 + -1.1327553889443376e-01 1.6343063721612210e+00 7.7913615657667046e-01 + -2.3426098486658697e-01 1.8087977789732961e+00 9.0874301741694130e-01 + -3.6605345624345553e-01 1.9577576629578293e+00 1.0321097237218657e+00 + -5.0143648101989979e-01 2.0826768646386484e+00 1.1484239428285434e+00 + -6.3518900905135434e-01 2.1862534664867663e+00 1.2568969333072295e+00 + -7.6812458894524782e-01 2.2726367721171536e+00 1.3482402653342793e+00 + -9.1122292749364198e-01 2.3490475523380714e+00 1.4024740240633351e+00 + -1.0814595978636745e+00 2.4233453189523333e+00 1.4208502050697265e+00 + -1.2785437895270171e+00 2.4951390461436285e+00 1.4445722079184324e+00 + -1.4861200753241006e+00 2.5577053606339426e+00 1.5037974563873167e+00 + -1.7031566814322252e+00 2.6055223183614520e+00 1.5964364262606643e+00 + -1.9301381892056333e+00 2.6322296161761649e+00 1.7186103546146012e+00 + -1.9199706553571678e+00 2.6154009181967552e+00 1.8336744679698018e+00 + id 14216 + loc 4.7128561139106750e-01 8.6942994594573975e-01 402 + blend 0.0000000000000000e+00 + interp 4.9399500815700675e-01:3.1200758507157572e-01:6.2028032353173201e-01:3.5948090316391340e-01:1.6582617501678953e+00:3.0590494382950534e-01:2.1184598250916826e+00:2.8252948703451591e-01:3.0365822903497928e+00:4.9399006820692520e-01:3.9992801045240096e+00 + CVs 20 + -7.4380994257135791e-02 1.4813227257735279e-01 -1.5073521456579780e-01 + -1.2101849386425544e-01 2.9959319399208062e-01 -3.1224784119467169e-01 + -1.5699249324717515e-01 4.3984493867489771e-01 -4.8522252928886211e-01 + -1.9236073181007968e-01 5.6393791619223821e-01 -6.6817576117539801e-01 + -2.3288837594491379e-01 6.7196221472029538e-01 -8.5749800958473421e-01 + -2.8470650262278807e-01 7.6198931696839522e-01 -1.0477711496324469e+00 + -3.5143836374339343e-01 8.3059638908860389e-01 -1.2344985548290963e+00 + -4.3430569579766715e-01 8.7512128390528288e-01 -1.4151748475000010e+00 + -5.3300334001551308e-01 8.9418780603013437e-01 -1.5870796374033833e+00 + -6.4576191825573903e-01 8.8734949343391067e-01 -1.7461452155603969e+00 + -7.6770053285466522e-01 8.5411942208768177e-01 -1.8861316024933401e+00 + -8.9399657823681222e-01 7.9587022201536828e-01 -2.0035140355909054e+00 + -1.0216779162214720e+00 7.1677112962563405e-01 -2.0981549112391820e+00 + -1.1543560001195241e+00 6.2087400079419863e-01 -2.1760376333998219e+00 + -1.2945850132442176e+00 5.1363235016372366e-01 -2.2383220155561143e+00 + -1.4183464118512716e+00 4.0862159744643656e-01 -2.2710069017751815e+00 + -1.4852769924520786e+00 3.2384526149656806e-01 -2.2692802461895831e+00 + -1.5150151292565079e+00 2.6165649069149072e-01 -2.2465611132078225e+00 + -1.7103669280069156e+00 1.4496018897246371e-01 -2.1578484109885716e+00 + id 14217 + loc 3.3761486411094666e-01 6.1939376592636108e-01 400 + blend 0.0000000000000000e+00 + interp 3.3911957103296569e-01:3.3331876288473755e-01:2.7178746848445823e-01:3.3911617983725539e-01:1.3070936312271852e+00:3.2769768474019123e-01:2.1848721816115044e+00:3.1639059309030987e-01:3.0287298028363558e+00:2.8330974274642728e-01:3.8726077939486023e+00 + CVs 20 + -2.0558177889638832e-01 3.6635954571985024e-01 -1.9129031754398407e-01 + -4.0261074204930231e-01 7.1582934141361221e-01 -4.1622826451059608e-01 + -5.8745517196670005e-01 1.0304120951476035e+00 -6.9787774725113316e-01 + -7.6020866021737710e-01 1.2963164743666606e+00 -1.0347945436440806e+00 + -9.2218140987222186e-01 1.5029098322710031e+00 -1.4093402727743976e+00 + -1.0762777448477003e+00 1.6455406557027432e+00 -1.7994805677584949e+00 + -1.2235607441522780e+00 1.7240834194578727e+00 -2.1836963981658721e+00 + -1.3623532384219812e+00 1.7434210294945636e+00 -2.5442189508897410e+00 + -1.4914817761194008e+00 1.7154847686375776e+00 -2.8713415499784221e+00 + -1.6124334056067706e+00 1.6563266959144638e+00 -3.1664534616754465e+00 + -1.7303397179606397e+00 1.5807529062975345e+00 -3.4418115069678912e+00 + -1.8510699207021628e+00 1.4984973446821996e+00 -3.7111325810934677e+00 + -1.9765396237637520e+00 1.4147637421827211e+00 -3.9762166637142293e+00 + -2.1047526664575344e+00 1.3349836843882279e+00 -4.2239650373238273e+00 + -2.2325238717047782e+00 1.2634695740764070e+00 -4.4468096398509012e+00 + -2.3637934904652487e+00 1.1887046849947966e+00 -4.6642132213857268e+00 + -2.5185597473236450e+00 1.0861467998776146e+00 -4.9026007608020894e+00 + -2.7228107894381108e+00 9.4194354252304624e-01 -5.1727580414200807e+00 + -3.0113450649785882e+00 6.9975182652433299e-01 -5.5291197166371813e+00 + id 14218 + loc 3.0731180310249329e-01 1.4301764965057373e-01 378 + blend 0.0000000000000000e+00 + interp 4.6005227908165991e-01:3.2079694744442622e-01:4.8121201295085358e-01:4.6004767855886913e-01:1.1395269128168639e+00:3.3792277028568474e-01:1.9679578362274830e+00:3.1744594158362965e-01:2.7384539145408411e+00:3.5179356076724178e-01:3.2648420499046837e+00:4.1538875027073047e-01:3.9629022191326069e+00 + CVs 20 + 2.2727250180723707e-01 2.8804517323598322e-01 -3.1528392410717321e-01 + 4.0722287365490317e-01 5.3222013934100609e-01 -6.0481039365506484e-01 + 5.7312447096319619e-01 7.4872110294372229e-01 -8.8200431770121246e-01 + 7.4472627437797578e-01 9.5080177820763001e-01 -1.1518728924322192e+00 + 9.2732546223272749e-01 1.1413334542681697e+00 -1.4073474860288053e+00 + 1.1241719597919957e+00 1.3181236886910870e+00 -1.6428272966197000e+00 + 1.3374241947917573e+00 1.4743403631101246e+00 -1.8622394343728170e+00 + 1.5677518109980912e+00 1.6020092416489276e+00 -2.0724697024426799e+00 + 1.8160645012309358e+00 1.6965296470764331e+00 -2.2759023286974793e+00 + 2.0839087408764487e+00 1.7566651860346645e+00 -2.4710289092336706e+00 + 2.3652016842015620e+00 1.7837429101911852e+00 -2.6578471336601890e+00 + 2.6455396497636778e+00 1.7800551885343812e+00 -2.8405094328744491e+00 + 2.9139562544541473e+00 1.7314603664926906e+00 -3.0218015944251895e+00 + 3.1573885496216967e+00 1.5847061033290124e+00 -3.1929730636769862e+00 + 3.3538138177598853e+00 1.2884917524418962e+00 -3.3391598840127950e+00 + 3.5169903851425639e+00 8.6344418974614134e-01 -3.4697675190872439e+00 + 3.6944053971254727e+00 3.7959689628862847e-01 -3.6075385294840774e+00 + 3.8958825188877948e+00 -8.1746075140840979e-02 -3.7793856258043323e+00 + 4.0146780597600547e+00 -3.7081147142180182e-01 -4.0243993571157768e+00 + id 14219 + loc 5.6136703491210938e-01 1.1864195764064789e-01 381 + blend 0.0000000000000000e+00 + interp 2.4434954948824124e+00:2.4434854948824123e+00:1.7366873306793638e+00:2.1854799484606544e+00:1.7875120035463239e+00:7.8230958556356811e-01:1.9843811377901992e+00:3.9828846874939683e-01:2.0000683469703207e+00:3.0787283499015183e-01:2.5414562469721127e+00:2.4827523736848117e-01:3.3961497982132749e+00:1.0897098377610781e+00:3.9182344570485634e+00:3.9995550424694937e-01:3.9814943812925723e+00 + CVs 20 + -7.8047007752735109e-01 1.2833607567074262e-01 7.2206521649891486e-01 + -1.2882962585095086e+00 1.1310703649008705e-01 1.2247165613044024e+00 + -1.7378487222985277e+00 4.7860620612546922e-02 1.6692828677263860e+00 + -2.2176483696190088e+00 -2.1995252170468493e-02 2.1101464098682898e+00 + -2.7211649303186047e+00 -1.0089556149974654e-01 2.5404173820222224e+00 + -3.2357279345330783e+00 -1.9695309637266123e-01 2.9631662649197397e+00 + -3.7409430873327341e+00 -3.2359610387469984e-01 3.3886594797251681e+00 + -4.2181311263638825e+00 -4.9508838688988810e-01 3.8205444263632091e+00 + -4.6679143105834582e+00 -7.2004318073848017e-01 4.2501125053961859e+00 + -5.1028022030018700e+00 -1.0054748621856164e+00 4.6658396861583906e+00 + -5.5200780343254339e+00 -1.3626621235532435e+00 5.0596533898795153e+00 + -5.8973405191889690e+00 -1.8047709382891237e+00 5.4214251909288445e+00 + -6.2011243828903426e+00 -2.3462540583626312e+00 5.7357368130210444e+00 + -6.4000875215875226e+00 -2.9897916672204721e+00 5.9901692681143537e+00 + -6.4917994661870733e+00 -3.7064184256676098e+00 6.1929132680080619e+00 + -6.5102802816226806e+00 -4.4503261199687429e+00 6.3796534394810038e+00 + -6.4857310915809965e+00 -5.1842788571953307e+00 6.6109109922810152e+00 + -6.4197515925690247e+00 -5.8525836519507788e+00 6.9261284094347983e+00 + -6.3232311704957853e+00 -6.3770707649915019e+00 7.2356775750956688e+00 + id 14220 + loc 5.7491981424391270e-03 1.5339325368404388e-01 395 + blend 0.0000000000000000e+00 + interp 4.0596044158265038e-01:2.9587593329678719e-01:1.1783453193466298e-02:3.0497047063530941e-01:9.8562591082547624e-01:4.0245167561179696e-01:1.9410011294971634e+00:4.0595638197823458e-01:2.5653072184868271e+00:2.6812363491715824e-01:3.1566059673340301e+00 + CVs 20 + -2.4062541310842472e-01 1.0706231617598812e-01 -1.2926085525351674e-01 + -4.7253122689928184e-01 2.0864499159784833e-01 -2.6070188922491289e-01 + -6.9714277202664976e-01 3.0637442051123021e-01 -3.9683550759035169e-01 + -9.1413685124401400e-01 4.0120998210730452e-01 -5.3824976574329908e-01 + -1.1193579069732673e+00 4.9171977086400631e-01 -6.8372199843422610e-01 + -1.3108029623869644e+00 5.7785753793126171e-01 -8.3175315456797672e-01 + -1.4908739597620502e+00 6.6597965728247033e-01 -9.8144328400771541e-01 + -1.6636917281285974e+00 7.6616541458544996e-01 -1.1340407754029249e+00 + -1.8242030737296182e+00 8.8313151553830482e-01 -1.2933357625858930e+00 + -1.9594076700424050e+00 1.0163425148417331e+00 -1.4635399234573070e+00 + -2.0723568409976139e+00 1.1596654024156345e+00 -1.6530861551302267e+00 + -2.1901558885679417e+00 1.2882811883644445e+00 -1.8731144378808913e+00 + -2.3332324794885855e+00 1.3691786830735595e+00 -2.1241841451654935e+00 + -2.4986558333471076e+00 1.3867372756611795e+00 -2.3987789288970474e+00 + -2.6816018751825799e+00 1.3391221746263406e+00 -2.6892933600524951e+00 + -2.8905700070445368e+00 1.2239192561428835e+00 -2.9877443202725624e+00 + -3.1298565177483262e+00 1.0311530082429283e+00 -3.2807501435049602e+00 + -3.3726999268849545e+00 7.5271995318766649e-01 -3.5448534088214330e+00 + -3.5435746005655013e+00 4.0457916692236040e-01 -3.7168847815742936e+00 + id 14221 + loc 8.1291162967681885e-01 3.6565080285072327e-01 405 + blend 0.0000000000000000e+00 + interp 4.0209240882715164e-01:4.0208838790306339e-01:2.2502986729117347e-01:3.3031247707958672e-01:9.9497738897437582e-01:3.0479140500460250e-01:1.8886763091394836e+00:3.6581253295744792e-01:2.5070991571336858e+00:3.4353246216422628e-01:2.9999631103247077e+00:3.3912495317201558e-01:3.7401191058235326e+00 + CVs 20 + -1.1787521768843415e-02 1.5565213644240528e-01 4.8149905857426192e-02 + 5.4689432120528791e-03 2.8528092142570549e-01 8.5921894160958037e-02 + 3.1437122028170478e-02 3.9451969080628035e-01 1.1506801337700409e-01 + 4.9538355758484337e-02 5.0473845077668367e-01 1.4086159381504859e-01 + 6.4521947765230681e-02 6.1666281876769713e-01 1.6438162233315687e-01 + 8.1660738037942660e-02 7.3132454439589689e-01 1.8618861317408578e-01 + 1.0651759353148099e-01 8.4992937357398846e-01 2.0544259234064882e-01 + 1.4414436452998958e-01 9.7206325323692855e-01 2.1861855922848009e-01 + 1.9697729185309004e-01 1.0943486225842989e+00 2.1960254822932701e-01 + 2.6223818130379045e-01 1.2099206623572658e+00 2.0156393568325187e-01 + 3.3284736435098933e-01 1.3113161038695185e+00 1.6056957154362550e-01 + 4.0126407735578523e-01 1.3941822001465438e+00 9.3962669820561812e-02 + 4.6054441966127196e-01 1.4548376231003810e+00 1.0844629063778213e-03 + 5.0636750870604341e-01 1.4867860689254775e+00 -1.0562707717639655e-01 + 5.4257744300885991e-01 1.4839980008799143e+00 -1.9590488904276496e-01 + 5.8087300311539714e-01 1.4454028657640277e+00 -2.4619423750866021e-01 + 6.2741125262502917e-01 1.3757960810974337e+00 -2.7057598923911158e-01 + 6.7351784899474432e-01 1.2877490688005053e+00 -3.0208876620530467e-01 + 6.1753604827090058e-01 1.2482464307545538e+00 -4.1570574633276797e-01 + id 14222 + loc 6.8902474641799927e-01 7.5721251964569092e-01 401 + blend 0.0000000000000000e+00 + interp 4.6056348659241891e-01:4.5711676227210640e-01:5.6729353251610304e-01:3.7459260011734746e-01:1.0088715759160791e+00:4.3477202665259257e-01:1.7847310507281287e+00:3.6350062855045429e-01:2.2065268540353751e+00:4.6055888095755299e-01:3.0103380784500140e+00:2.8623948825160617e-01:3.3688631387370966e+00:3.4937920408739287e-01:3.9837672753554374e+00 + CVs 20 + -1.1841063990563329e-01 3.1422103246170191e-01 -2.1983134054502051e-01 + -2.5085252703385280e-01 6.4096467284735259e-01 -4.3342447101633075e-01 + -3.9999986721728165e-01 9.8275705277900516e-01 -6.6176507643178750e-01 + -5.6377312378487554e-01 1.3318259731545750e+00 -9.2695617556045240e-01 + -7.3597292588120711e-01 1.6595025843626856e+00 -1.2351683235646163e+00 + -9.2100165201946582e-01 1.9324392348451416e+00 -1.5614286427052333e+00 + -1.1343494448823772e+00 2.1380676338053859e+00 -1.8734848472171901e+00 + -1.3896296633762040e+00 2.2754372687099349e+00 -2.1551311800395427e+00 + -1.6933583283562876e+00 2.3388307836609585e+00 -2.4013773971543957e+00 + -2.0486130792357748e+00 2.3183080643623133e+00 -2.6148090447711136e+00 + -2.4545728946767578e+00 2.2018301305686712e+00 -2.8026513181936448e+00 + -2.9029356212261899e+00 1.9720026339948546e+00 -2.9775009936103953e+00 + -3.3601711887723438e+00 1.6160250750417895e+00 -3.1477699643857697e+00 + -3.7673789874721697e+00 1.1564306656955734e+00 -3.2964857979726316e+00 + -4.1061602884763575e+00 6.3852016326873495e-01 -3.4119727631853940e+00 + -4.4312642221296663e+00 6.5621280159809947e-02 -3.5716809077992653e+00 + -4.7858096518233388e+00 -5.6633783589396203e-01 -3.9427001241080575e+00 + -5.0742954295291147e+00 -1.1534109082106996e+00 -4.5669370367480155e+00 + -5.1924045877240541e+00 -1.6397214306934407e+00 -4.9117600049799677e+00 + id 14223 + loc 8.3514130115509033e-01 1.5515379607677460e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3813531972965519e-01:4.3813093837645789e-01:1.8913201624977449e-02:3.9281538611857092e-01:7.4660360114756097e-01:3.5256901797037454e-01:1.4130406806302638e+00:2.6346137123921237e-01:2.0816592201931052e+00:3.7461466865549697e-01:2.7647220050149084e+00:2.4154199809815699e-01:3.6166230917755882e+00 + CVs 20 + -3.6382658518454944e-02 3.1882040154532165e-01 -4.8394189105850222e-03 + -6.5313096314244395e-02 5.8812813978783995e-01 2.6521995024162887e-02 + -8.3987606924430747e-02 8.2758979136925848e-01 7.0048544927153511e-02 + -8.7503248386689991e-02 1.0444546727177209e+00 1.0390345093971110e-01 + -7.5220804275377029e-02 1.2481487132297133e+00 1.2624568263798602e-01 + -4.9077137487358979e-02 1.4568878812846739e+00 1.3995773077242729e-01 + -2.0999635867910871e-02 1.6903761261782595e+00 1.6272702989770327e-01 + -1.4315673293941344e-02 1.9503142322601195e+00 2.2443960998554335e-01 + -5.3357797067447255e-02 2.2132423184052019e+00 3.4263039972459242e-01 + -1.5356565001956235e-01 2.4440394550725708e+00 5.0500057167584445e-01 + -3.1409951520632207e-01 2.6202114408916835e+00 6.8258878267838141e-01 + -5.2481944682293957e-01 2.7443159580883716e+00 8.5893010694190630e-01 + -7.8354444415803193e-01 2.8285990442497901e+00 1.0309260856353937e+00 + -1.1052253241707666e+00 2.8752918520529356e+00 1.1916454514584767e+00 + -1.5246920740056411e+00 2.8651373797189343e+00 1.3385515171274953e+00 + -2.0342409047490095e+00 2.7345963595657361e+00 1.4712690056621844e+00 + -2.5216518314112930e+00 2.4186373805954298e+00 1.5388949295557177e+00 + -2.8835643095111760e+00 1.9052620160136695e+00 1.4902225760684451e+00 + -2.7474245428408612e+00 1.9010109306834080e+00 1.6122809298675587e+00 + id 14224 + loc 3.9808997511863708e-01 4.2324760556221008e-01 412 + blend 0.0000000000000000e+00 + interp 3.9796445117792989e-01:3.9796047153341813e-01:2.0404009776166054e-01:3.1723215230249213e-01:1.0416771503306690e+00:3.0497723795081871e-01:1.8433928289643868e+00:3.4609926763514837e-01:2.1585611686698893e+00:3.2543021560782509e-01:3.0114913213821453e+00:2.9922424088810379e-01:3.9087236087827972e+00 + CVs 20 + -2.2410686506307792e-01 1.9895018396009140e-01 -4.5528861605209492e-01 + -4.2268413293611168e-01 3.1814676309946044e-01 -7.2334113200710803e-01 + -6.1454707448761792e-01 4.0206057295027314e-01 -9.5667094863629298e-01 + -7.8749744694844415e-01 4.8689753492172733e-01 -1.2270303284923871e+00 + -9.3382311686184649e-01 5.6705098511716789e-01 -1.5382434155178364e+00 + -1.0458031381590087e+00 6.3589705717201350e-01 -1.8909623222699103e+00 + -1.1122573498283592e+00 6.8913200679800912e-01 -2.2811133323182773e+00 + -1.1233696226559851e+00 7.2395521560477882e-01 -2.7003488862005809e+00 + -1.0775752396191742e+00 7.3684823219237905e-01 -3.1373484345042510e+00 + -9.7810678527968453e-01 7.2672800356295919e-01 -3.5795609895353566e+00 + -8.2098326863392534e-01 6.9927772323041104e-01 -4.0245398357599713e+00 + -6.0018492408673052e-01 6.4745258020049323e-01 -4.4970701642901458e+00 + -3.4992419881595493e-01 5.2132347544568791e-01 -5.0276771364101069e+00 + -1.4503735272250062e-01 2.6905205362316464e-01 -5.5964795762735786e+00 + -2.8263036814258458e-02 -1.0862364215065945e-01 -6.1549006787700771e+00 + -7.9445886925454401e-03 -5.8478005230161001e-01 -6.6689137637525882e+00 + -9.1205661116829373e-02 -1.1240490751702548e+00 -7.1129540635705375e+00 + -2.7150107451718153e-01 -1.6761051068554429e+00 -7.4648400530539840e+00 + -4.1646926157586506e-01 -2.0898403833626160e+00 -7.7144725726054721e+00 + id 14225 + loc 8.4351003170013428e-01 3.0982109904289246e-01 379 + blend 0.0000000000000000e+00 + interp 6.0972329940450287e-01:3.8204475195429527e-01:5.8278055382437799e-02:2.8903833449165450e-01:8.8208920804710667e-01:6.0971720217150882e-01:1.4655611560374449e+00:3.7868406245657882e-01:2.0173651224973335e+00:2.7356126927294555e-01:2.8187495772559568e+00:3.3601982789268076e-01:3.6960619380200299e+00 + CVs 20 + 4.6603788079415148e-01 3.5489240368082309e-01 -1.1209067633408726e-01 + 8.7210530646687534e-01 6.6248977365980433e-01 -2.1395760800512176e-01 + 1.2820497505575592e+00 9.4061449456611834e-01 -3.3356452372431566e-01 + 1.7170042950133293e+00 1.2110899207189207e+00 -4.6524659461356055e-01 + 2.1754084770910609e+00 1.4855347896077251e+00 -5.8008233475535553e-01 + 2.6685312479959680e+00 1.7533517349204164e+00 -6.4826800509859328e-01 + 3.2067162875259934e+00 1.9806689660793180e+00 -6.4321267840484841e-01 + 3.7791734239955161e+00 2.1294629093401731e+00 -5.4832807743933554e-01 + 4.3590541462740546e+00 2.1695248162292655e+00 -3.6442984676195400e-01 + 4.9182314649234593e+00 2.0768539139653068e+00 -1.1400054823526207e-01 + 5.4245142012073018e+00 1.8322695232767499e+00 1.6326836101303377e-01 + 5.8306724190436787e+00 1.4346056927990887e+00 4.2362293346213642e-01 + 6.0997482804574394e+00 9.2507075240579439e-01 6.3822175592031627e-01 + 6.2609562759911075e+00 3.7134023772809011e-01 8.1550799355120918e-01 + 6.4001586980121541e+00 -1.8943846416593768e-01 9.8264574677276650e-01 + 6.6051429156403092e+00 -7.6369560114972357e-01 1.1318990420751820e+00 + 6.9313949965862145e+00 -1.3546429753925233e+00 1.2176199559377716e+00 + 7.3075835374416851e+00 -1.9119675727579035e+00 1.2327371240136249e+00 + 7.4796670767678766e+00 -2.3827013200218614e+00 1.2652913651916657e+00 + id 14226 + loc 8.2507354021072388e-01 9.8203057050704956e-01 400 + blend 0.0000000000000000e+00 + interp 4.0541733496418103e-01:3.0350447991041946e-01:2.6271345329042006e-01:4.0541328079083139e-01:9.9953711242233512e-01:1.5573931844379202e-01:1.8766143265927817e+00:3.5518839340519226e-01:2.9803629116442649e+00:3.4726951910502091e-01:3.4243707325725272e+00:3.8950159996149691e-01:3.9808567502744783e+00 + CVs 20 + -2.5702682169446767e-01 2.4236917801698402e-01 -2.3137693350787281e-01 + -4.7610471069575794e-01 4.9340141110438729e-01 -4.7825993405093692e-01 + -6.7802715591937290e-01 7.5471697470026822e-01 -7.4371056061155438e-01 + -8.9052687254976926e-01 1.0178001214593220e+00 -1.0197310417427650e+00 + -1.1484296051594949e+00 1.2641399229669519e+00 -1.2881574999697001e+00 + -1.4757502087147321e+00 1.4692444139583007e+00 -1.5291309854934776e+00 + -1.8745762846837251e+00 1.6077793831662968e+00 -1.7305983318705802e+00 + -2.3320745900842335e+00 1.6552013201468379e+00 -1.8980938019366977e+00 + -2.8236864383005398e+00 1.5872260958323063e+00 -2.0548433139783651e+00 + -3.3099456816074699e+00 1.3843265792488193e+00 -2.2166795883978745e+00 + -3.7369798619745116e+00 1.0419021507995323e+00 -2.3767429918535448e+00 + -4.0841619795885800e+00 6.0028434190136060e-01 -2.5115027851481111e+00 + -4.4032586516204821e+00 1.3187098599520786e-01 -2.6081569352393119e+00 + -4.7574414588201224e+00 -2.9953210781059958e-01 -2.6745947554165799e+00 + -5.1742556982316330e+00 -6.6361208420823581e-01 -2.7361222689457607e+00 + -5.6612227292184203e+00 -9.7660890027328751e-01 -2.8414341621107591e+00 + -6.1961018962205916e+00 -1.2616508170593255e+00 -3.0445186873386216e+00 + -6.7013531716852706e+00 -1.5148457474738450e+00 -3.3543603316595201e+00 + -7.0769468861795684e+00 -1.7115099895206076e+00 -3.6897477516740604e+00 + id 14227 + loc 9.8664081096649170e-01 3.2224339246749878e-01 393 + blend 0.0000000000000000e+00 + interp 3.4961688482004932e-01:2.2065873125747582e-01:1.0039446103496386e+00:3.4961338865120112e-01:1.9998492204125835e+00:3.4128919610270880e-01:2.7988380205949328e+00:2.4388023593686214e-01:3.6513873759649211e+00 + CVs 20 + 1.8742589485944181e-01 3.0277812206326338e-01 2.7045770458625940e-01 + 3.9329014199272494e-01 6.2778384749029914e-01 4.9905517293670387e-01 + 6.0300256129080565e-01 9.8810335748950151e-01 7.0671052691714498e-01 + 8.1009506675833343e-01 1.3779217137839179e+00 9.1816027512844822e-01 + 1.0149488160950746e+00 1.7696124902033379e+00 1.1630094114226477e+00 + 1.2176675776491346e+00 2.1370420317649188e+00 1.4687857431810771e+00 + 1.4158139265952692e+00 2.4680885972830686e+00 1.8460713949294505e+00 + 1.6132578450563444e+00 2.7628222063044383e+00 2.2917373386962252e+00 + 1.8250695920687985e+00 3.0219446096895970e+00 2.7991756347983152e+00 + 2.0710151039882785e+00 3.2362151560251036e+00 3.3645890020885556e+00 + 2.3683895701533020e+00 3.3813650691800596e+00 3.9848308029310688e+00 + 2.7279957831055004e+00 3.4173897596947400e+00 4.6501740111436414e+00 + 3.1486016092865921e+00 3.2933484323282962e+00 5.3342557769821113e+00 + 3.6142029184880888e+00 2.9632230929925489e+00 5.9802361965782502e+00 + 4.0986993630199073e+00 2.4198831497261395e+00 6.4877701444814386e+00 + 4.5648423275579884e+00 1.7568141002055864e+00 6.7331414447411877e+00 + 4.9824224660467484e+00 1.1529727743574476e+00 6.6773732812456137e+00 + 5.3654457566790716e+00 6.9975364963562781e-01 6.3838652133217284e+00 + 5.7579201583883037e+00 2.6401489976744852e-01 5.9459432856534082e+00 + id 14228 + loc 5.4240512847900391e-01 4.8104491829872131e-01 404 + blend 0.0000000000000000e+00 + interp 3.9788812539287083e-01:3.4295902372192572e-01:6.7032709162652404e-01:3.8275476666457586e-01:1.0443344599729911e+00:3.9788414651161691e-01:1.9844632517469762e+00:3.5493158969122174e-01:2.8891283729989370e+00:3.5635540994647408e-01:3.4125057236478034e+00:2.8612310392942980e-01:3.9994436791349921e+00 + CVs 20 + -1.2654020004028574e-01 8.3335505847877384e-02 1.2108271843368086e-01 + -2.0303694104534808e-01 1.3708779230442317e-01 2.2820567633411648e-01 + -2.5553826594065210e-01 1.8646625407774536e-01 3.3656491987723214e-01 + -3.0235832838433807e-01 2.4584438058123489e-01 4.5277595239799734e-01 + -3.4430626571428730e-01 3.1502034202658302e-01 5.7368616443515186e-01 + -3.8089955527476238e-01 3.9051647958862423e-01 6.9088342329208130e-01 + -4.1149530487387753e-01 4.6625943219823596e-01 7.9404959290495047e-01 + -4.3633732169575079e-01 5.3642099749160566e-01 8.7366790131494843e-01 + -4.6075089189233914e-01 5.9948407021005634e-01 9.1733639689845536e-01 + -4.9781238979923426e-01 6.5946551414652532e-01 9.1268696318682352e-01 + -5.6307608199621040e-01 7.3155296988604679e-01 8.5671955001324418e-01 + -6.7804022608288217e-01 8.2639232388207073e-01 7.6385014618476754e-01 + -8.3979768622237216e-01 9.5206897355567666e-01 6.7319438998280123e-01 + -1.0303034585552084e+00 1.0957599038142145e+00 6.2131730939837893e-01 + -1.2451699445597066e+00 1.2271045502155515e+00 6.2439446181910652e-01 + -1.5026616022569521e+00 1.3416591634058359e+00 6.8623972469874117e-01 + -1.8043617488077761e+00 1.4973735407791835e+00 8.1633450794011553e-01 + -2.0960602974962814e+00 1.7628627896890385e+00 1.0234896530911455e+00 + -1.9772723534704246e+00 1.9168575484288453e+00 9.9046012286527385e-01 + id 14229 + loc 1.2536062300205231e-01 4.6127253770828247e-01 399 + blend 0.0000000000000000e+00 + interp 5.2350774330818617e-01:3.9215979841381093e-01:3.2560754707025508e-01:3.4474544739904028e-01:1.0933919577879812e+00:4.7223896929439874e-01:1.8477768093862061e+00:3.4971801825772825e-01:2.1232284607590413e+00:2.9283407157928965e-01:2.8654818065675158e+00:3.4355847519701599e-01:3.2064903140740624e+00:5.2350250823075306e-01:3.9275901737486931e+00 + CVs 20 + -1.3237905356760682e-01 3.2777157050952904e-01 1.2785305845500783e-01 + -3.0606589492218178e-01 6.2885475945674796e-01 2.5418665758460796e-01 + -5.0620387147723311e-01 8.8768598599047910e-01 3.5761926205734818e-01 + -7.2222113672935750e-01 1.1026017478136776e+00 4.3821144115661220e-01 + -9.4789367157136784e-01 1.2799018681020957e+00 5.0669091278524547e-01 + -1.1748878232679840e+00 1.4251285875348767e+00 5.7235398574534335e-01 + -1.3903822494848164e+00 1.5408942613786916e+00 6.3938745696162602e-01 + -1.5755248911807134e+00 1.6303605848607559e+00 7.0160230187048633e-01 + -1.7095636420843163e+00 1.7063780884698618e+00 7.4414605578028414e-01 + -1.7844320810671919e+00 1.8011523302891679e+00 7.5878304642743544e-01 + -1.8289175370233395e+00 1.9279599624377060e+00 7.6966496523615024e-01 + -1.8741313480329131e+00 2.0039027996008980e+00 8.0962343871269848e-01 + -1.8986843471612755e+00 1.9463932140357738e+00 8.6775451506833567e-01 + -1.8747514942159684e+00 1.7232370002436057e+00 9.3878013292051321e-01 + -1.8111032708432357e+00 1.3168827753419703e+00 1.0655789860882556e+00 + -1.7748346823903680e+00 7.5824562704364484e-01 1.3399409982254955e+00 + -1.9219684802334527e+00 1.2369169713946623e-01 1.8034640087011253e+00 + -2.3366063581265091e+00 -3.6776696709407292e-01 2.2120725063563609e+00 + -2.6140985552806320e+00 -5.1382105909428377e-01 2.2759629218427917e+00 + id 14230 + loc 1.6734455525875092e-01 3.5183545947074890e-01 395 + blend 0.0000000000000000e+00 + interp 5.1024312704771158e-01:3.4671378095398742e-01:6.7798829357993984e-01:2.7614052683013818e-01:1.1893222951180318e+00:2.8831584824236761e-01:2.0112569086548873e+00:3.4861873873369398e-01:2.7241282081819342e+00:2.8733219165362939e-01:3.1774061219116883e+00:5.1023802461644108e-01:3.9983253023576490e+00 + CVs 20 + -2.4858603601193213e-01 1.6096960147396092e-01 -3.3215830447436212e-01 + -4.8804313252181386e-01 3.1745385256388448e-01 -6.4936806326645058e-01 + -7.2836337822637254e-01 4.8332383217822711e-01 -9.7137824845074261e-01 + -9.7227810721849195e-01 6.6140212037267199e-01 -1.3082846839876723e+00 + -1.2158274522706121e+00 8.4355597289657680e-01 -1.6582933600364633e+00 + -1.4585079426819629e+00 1.0213875194171593e+00 -2.0172679440980308e+00 + -1.7015252862371351e+00 1.1848934222368954e+00 -2.3833147931932799e+00 + -1.9455511503691694e+00 1.3187557041472173e+00 -2.7602702303932709e+00 + -2.1938411620270224e+00 1.4033156314354807e+00 -3.1511857799689444e+00 + -2.4557388822529376e+00 1.4186941235232076e+00 -3.5484733688217212e+00 + -2.7368608134286490e+00 1.3514031907335591e+00 -3.9346619298839673e+00 + -3.0259920014453661e+00 1.2051143575248366e+00 -4.2936708622362429e+00 + -3.3055478878515325e+00 9.9807046213634543e-01 -4.6194948521859871e+00 + -3.5687619769640042e+00 7.4760898915735519e-01 -4.9102907040245256e+00 + -3.8167452105820732e+00 4.6451080890731111e-01 -5.1638490680469848e+00 + -4.0487697678662915e+00 1.4970501878420883e-01 -5.3814042042002050e+00 + -4.2589028373305871e+00 -2.0012218894162448e-01 -5.5661282236085121e+00 + -4.4384802202965572e+00 -5.6603624154567767e-01 -5.7187697355145737e+00 + -4.5688505873668479e+00 -7.6174670057669935e-01 -5.8517048116991806e+00 + id 14231 + loc 8.8518428802490234e-01 8.4611409902572632e-01 378 + blend 0.0000000000000000e+00 + interp 6.0972329940450287e-01:2.8451143410099600e-01:2.5348802965997286e-02:2.3423941538788051e-01:1.0004540222840821e+00:2.7892050000886148e-01:1.7959134936627941e+00:3.1881405504896509e-01:2.0650980210460581e+00:4.9705866274037314e-01:2.9908227034065491e+00:6.0971720217150882e-01:3.2941286521333875e+00:5.4393533955658491e-01:3.7672626253740207e+00 + CVs 20 + 6.5294935059430714e-01 3.2424062132287623e-01 -5.0163768267749015e-02 + 1.2338612295949314e+00 5.6563677167848780e-01 -1.3404094309100600e-01 + 1.8135114346882657e+00 7.6624937158440898e-01 -2.4452688119338756e-01 + 2.4216472868789349e+00 9.7398019573278116e-01 -3.5234298415252918e-01 + 3.0418322852710058e+00 1.1938735939821092e+00 -4.1785374265202879e-01 + 3.6581129806671160e+00 1.3954850570271478e+00 -4.1090062115939097e-01 + 4.2569210796571193e+00 1.5460187424252876e+00 -3.2193591002972233e-01 + 4.8186137876122359e+00 1.6283143476663140e+00 -1.6104911815785794e-01 + 5.3216293110367028e+00 1.6376584527923945e+00 4.4112600321033257e-02 + 5.7545192272162691e+00 1.5823629934361816e+00 2.5671534383796757e-01 + 6.1241403439410700e+00 1.4844271219984191e+00 4.5320973958609878e-01 + 6.4556086855454122e+00 1.3636289765324241e+00 6.3490811372609213e-01 + 6.7818823722889663e+00 1.2245145197083831e+00 8.1638408273058349e-01 + 7.1200019405356318e+00 1.0676775890497376e+00 1.0054670552023059e+00 + 7.4561168439303511e+00 9.1375258466369935e-01 1.1919168291534052e+00 + 7.7607811163382934e+00 8.0220945584956516e-01 1.3619992495140620e+00 + 8.0100637283396097e+00 7.5461327961032199e-01 1.5160362311884144e+00 + 8.2374536642265923e+00 7.3717397604355561e-01 1.6573838119213791e+00 + 8.6225364763740231e+00 6.4823796908660292e-01 1.7700058264289771e+00 + id 14232 + loc 1.7784482240676880e-01 4.8137682676315308e-01 412 + blend 0.0000000000000000e+00 + interp 4.2870546922929087e-01:3.4338586324781262e-01:7.2031411577450855e-02:3.7703617529766115e-01:9.3594251111983717e-01:3.3730921368217942e-01:1.3478534778411708e+00:3.0747123824106143e-01:2.0003839258046785e+00:4.2870118217459857e-01:2.6606043175911873e+00:3.1858913659855298e-01:3.1337057918586524e+00 + CVs 20 + -1.0992391684451985e-01 1.5971814551009261e-01 -6.4996334051334337e-01 + -2.0847990017154061e-01 2.0098393982095233e-01 -1.1052344478175671e+00 + -2.8344623306915118e-01 2.0051311943555783e-01 -1.5069985218440931e+00 + -3.2937609347551888e-01 1.8873521057697512e-01 -1.9151946150058667e+00 + -3.4163079131010826e-01 1.6286868773085084e-01 -2.3143352007811768e+00 + -3.1692543678157903e-01 1.2388820586878824e-01 -2.6886302666961566e+00 + -2.5608904347243799e-01 7.5854267226139749e-02 -3.0257444665602646e+00 + -1.6491858610579385e-01 2.3964760087787473e-02 -3.3194910782999072e+00 + -5.2554449483448118e-02 -2.6959085800227767e-02 -3.5689600489722455e+00 + 7.1272587549295219e-02 -7.2566716350382698e-02 -3.7761707074828341e+00 + 2.0588878138254041e-01 -1.0766471721717985e-01 -3.9537328834175622e+00 + 3.7320573335397389e-01 -1.2976734953255731e-01 -4.1372986612370459e+00 + 5.9046701708919791e-01 -1.5436420160881648e-01 -4.3661787201004678e+00 + 8.2214068094098924e-01 -2.1023948582205443e-01 -4.6414149962715765e+00 + 1.0219039019947997e+00 -3.0453876494497645e-01 -4.9371201027761318e+00 + 1.1827804318648667e+00 -4.3453791665217012e-01 -5.2460568182773670e+00 + 1.3109239845102256e+00 -6.0637091339737048e-01 -5.5692997428994229e+00 + 1.3970635237921258e+00 -8.1585015576506503e-01 -5.8877199597877787e+00 + 1.3467827839415505e+00 -9.5156074848722549e-01 -6.0077251068857507e+00 + id 14233 + loc 7.3546230792999268e-01 2.2351738810539246e-01 1069 + blend 0.0000000000000000e+00 + interp 3.7457518522694933e-01:3.7457143947509708e-01:4.5074992552495818e-01:2.9110963341948870e-01:1.0659834065937812e+00:3.0388258825840070e-01:2.0618765027288419e+00:2.8394014879635754e-01:3.0469062713557120e+00:2.7325461804489581e-01:3.8730450399016676e+00 + CVs 20 + -7.0622302096729789e-02 1.6418034051656361e-01 2.4289720972977727e-01 + -1.5616017711353447e-01 2.9540319563695566e-01 4.5830751943474146e-01 + -2.5106786129833991e-01 4.0929546006641804e-01 6.5565963057401089e-01 + -3.6651345433888721e-01 5.1571225629471207e-01 8.4217797798555283e-01 + -5.5487179861981406e-01 6.2465238491447550e-01 1.0162445993138531e+00 + -8.4693839990457642e-01 7.7173815535890156e-01 1.1649652314091998e+00 + -1.1668022142249088e+00 1.0202985388301511e+00 1.2778587195474125e+00 + -1.3972765672856844e+00 1.3715949590543124e+00 1.3520990078901900e+00 + -1.5025157377327341e+00 1.7849360922916255e+00 1.3961859429854708e+00 + -1.4831373163435881e+00 2.2369622825702939e+00 1.4420696331107958e+00 + -1.3178888823127644e+00 2.6673702186199320e+00 1.5709824806039407e+00 + -1.0171399516387774e+00 2.9450552738809628e+00 1.8251509044108118e+00 + -6.4289762320571486e-01 3.0023336494079977e+00 2.1414435369616158e+00 + -2.6111334600121205e-01 2.8492031230627926e+00 2.4373656102685173e+00 + 7.8584763852977302e-02 2.5266530281423636e+00 2.6776508726340142e+00 + 3.3496367444405006e-01 2.0692503790615473e+00 2.8533348374415524e+00 + 4.5859702786493550e-01 1.5236598366076355e+00 2.9131866128912098e+00 + 4.4799472334173918e-01 9.9435788229194355e-01 2.8106907068556031e+00 + 4.1587598900236300e-01 5.6750166661745827e-01 2.6436456019904506e+00 + id 14234 + loc 2.2993119060993195e-01 1.0624536871910095e-01 405 + blend 0.0000000000000000e+00 + interp 4.8793869450878308e-01:4.2524223882037188e-01:7.9470452302247607e-01:3.5928156199344491e-01:1.0888451681467468e+00:4.4940845868129603e-01:1.7317469211050556e+00:4.1918000060594818e-01:2.0185982306066133e+00:4.8793381512183803e-01:2.4950525307295792e+00:4.3039880257044644e-01:3.0096556281037463e+00:3.4517602271207543e-01:3.8875401488976555e+00 + CVs 20 + -7.5486266045886458e-02 1.1893674472318937e-02 5.3859444097772109e-02 + -1.6477305246451085e-01 -3.6300551541132098e-02 9.7181669598052994e-02 + -2.8002233625404760e-01 -5.4024447693830746e-02 1.8186320241471438e-01 + -4.0554913333784570e-01 -5.6592879015689115e-02 2.6416323011885168e-01 + -5.4097737568721571e-01 -4.2216142648477867e-02 3.3973352558243874e-01 + -6.8586490182301363e-01 -2.7754351080406248e-03 4.0969434448035147e-01 + -8.3503320747842280e-01 7.3425466396436184e-02 4.8087241275166970e-01 + -9.7572112194713545e-01 1.9348487587215585e-01 5.6334984441799285e-01 + -1.0903915409885045e+00 3.5266628485300988e-01 6.6621826668717110e-01 + -1.1625848858925596e+00 5.3617885782486729e-01 7.9619434123278143e-01 + -1.1810168272306425e+00 7.2625052090606046e-01 9.5474436349682013e-01 + -1.1402276560948550e+00 9.0819468433780060e-01 1.1354880256687740e+00 + -1.0394379885885490e+00 1.0726220628743124e+00 1.3250917512316103e+00 + -8.8266389259323141e-01 1.2150883994708734e+00 1.5051189243605996e+00 + -6.8228741526710224e-01 1.3344685069997222e+00 1.6527256511335617e+00 + -4.5261549045293259e-01 1.4302980842723538e+00 1.7496924384313264e+00 + -1.9516822635080613e-01 1.5000959522792892e+00 1.7906095361957681e+00 + 9.3620686211814769e-02 1.5390104617051059e+00 1.7750459394174463e+00 + 2.8142836635916268e-01 1.5326510619954108e+00 1.6502415596715247e+00 + id 14235 + loc 2.6102753356099129e-02 5.0248521566390991e-01 381 + blend 0.0000000000000000e+00 + interp 4.7050536349002647e-01:4.6523003223329623e-01:1.8423442006919366e-02:2.8321783326164246e-01:8.4876420481094250e-01:4.3569624032970128e-01:1.7174230354610609e+00:4.4565141766466415e-01:2.0101177292393353e+00:4.5388652096750448e-01:2.5130847002784344e+00:4.0185160481874532e-01:2.9995787414479018e+00:4.7050065843639161e-01:3.5487154208012694e+00 + CVs 20 + 9.2721560481971055e-01 2.0839347729629579e-01 -6.1074418431852062e-01 + 1.5202828019645589e+00 3.0401838123521419e-01 -1.0326173675111736e+00 + 2.0326813270997053e+00 3.6697356469362274e-01 -1.3844460696510033e+00 + 2.5730223853979659e+00 4.3248683916103164e-01 -1.7093950610118573e+00 + 3.1393670385409571e+00 4.8799194060004064e-01 -2.0035817914166540e+00 + 3.7335436277321596e+00 5.1995821449237889e-01 -2.2792396154490593e+00 + 4.3527049124828503e+00 5.0926130129599034e-01 -2.5591425072051539e+00 + 4.9841901780826516e+00 4.2848449463460958e-01 -2.8591333360269680e+00 + 5.6117185783454548e+00 2.4726924591950672e-01 -3.1769814887289782e+00 + 6.2179019791496737e+00 -4.9714216407456879e-02 -3.5055478849305191e+00 + 6.7806420559443916e+00 -4.6165353441869628e-01 -3.8392340730530261e+00 + 7.2729444159399668e+00 -9.7761187463212718e-01 -4.1698948953764035e+00 + 7.6612891425680019e+00 -1.5837636764320249e+00 -4.4789739715081112e+00 + 7.9067651438162461e+00 -2.2472349070093491e+00 -4.7450065325534228e+00 + 8.0078553427125279e+00 -2.9065854702453420e+00 -4.9662005899351387e+00 + 8.0182939067171031e+00 -3.5109077224560115e+00 -5.1557984421266028e+00 + 8.0023165294676968e+00 -4.0379119803051067e+00 -5.3170444367059160e+00 + 7.9949155297529231e+00 -4.4848237357081615e+00 -5.4589986677726356e+00 + 7.9819121281662788e+00 -4.8586210911950509e+00 -5.6763659240335107e+00 + id 14236 + loc 4.5086437463760376e-01 1.1347692459821701e-01 402 + blend 0.0000000000000000e+00 + interp 4.2697258481356087e-01:4.0644634751195485e-01:7.3042171541053857e-02:2.8456448472882023e-01:7.6573155766203760e-01:4.2696831508771277e-01:1.5014864262410754e+00:3.5431876116398564e-01:1.9818296411687502e+00:2.8431335305004102e-01:2.4394173326471127e+00:3.6136446734184791e-01:3.0441665679060930e+00:4.0308855320141979e-01:3.8189842083362029e+00 + CVs 20 + -1.2843051983929973e-01 1.8537188931651402e-01 2.7864169360496094e-01 + -2.9428741615746623e-01 4.0342207999790519e-01 5.4908210552847769e-01 + -4.8175643199498619e-01 6.2744739935566962e-01 7.9607582090003326e-01 + -6.6655209810785132e-01 8.2854194820202065e-01 1.0127929469885861e+00 + -8.2538883506188920e-01 9.9090766502650462e-01 1.2083038150594854e+00 + -9.4671849070651670e-01 1.1172964838419610e+00 1.4010617840692656e+00 + -1.0354194805391357e+00 1.2163911798040257e+00 1.6203343222971731e+00 + -1.1106607537008872e+00 1.2838315878800814e+00 1.9020523557166211e+00 + -1.2029684878708831e+00 1.3037907667908593e+00 2.2560055047464851e+00 + -1.3454874341496641e+00 1.2481804214155101e+00 2.6556215957457536e+00 + -1.5685351377839860e+00 1.0594067523820894e+00 3.0578247585494776e+00 + -1.8752442380248051e+00 7.1837397299840711e-01 3.4432918790280627e+00 + -2.2326358441214698e+00 3.1978831361532123e-01 3.8697391703208175e+00 + -2.6023900378898595e+00 7.2386521470121368e-03 4.4036220260712131e+00 + -2.9756968627810312e+00 -1.2769932784568006e-01 5.0306265760106559e+00 + -3.3957328596554235e+00 -1.0625368716516326e-01 5.6849866160799998e+00 + -3.8991933892494135e+00 6.3349075039419445e-03 6.3007902962992075e+00 + -4.4482717421501752e+00 1.5258853163694708e-01 6.8373215437429371e+00 + -4.8973582128144963e+00 2.6398832913548920e-01 7.3850859377175491e+00 + id 14237 + loc 5.9206372499465942e-01 6.1012101173400879e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0588966996248530e-01:4.2670995644346216e-01:2.8729061255600796e-01:3.1568869857431797e-01:9.1920126716516959e-01:4.7516965602973416e-01:1.0686240473109603e+00:5.0588461106578575e-01:1.6168234510683028e+00:4.3421222399953530e-01:1.9945752852466665e+00:3.9261347140445074e-01:2.4532100828067827e+00:2.9449769093447264e-01:3.2365222607685489e+00:4.4351989372693651e-01:3.9395108955720928e+00 + CVs 20 + -3.1887281112379248e-02 3.1897614192618196e-01 9.2675593751041480e-02 + -2.9550900929691593e-02 6.1557676331503552e-01 1.6344876667155150e-01 + -6.4798555160617000e-03 9.0001255460031016e-01 2.1841501000181968e-01 + 2.8701024344150727e-02 1.1872417918213092e+00 2.6201596410689321e-01 + 8.0186259982223784e-02 1.4836841025689331e+00 2.9086480405140291e-01 + 1.5500661580293640e-01 1.7992748980810915e+00 2.9764044309685322e-01 + 2.6188824423184626e-01 2.1323839243364477e+00 2.6262085285742698e-01 + 4.0374245952060661e-01 2.4601337157970207e+00 1.6420539191267769e-01 + 5.7391392704745214e-01 2.7542895382050645e+00 -5.2589002331444590e-03 + 7.5976510174313749e-01 2.9929089925114072e+00 -2.4045096183540604e-01 + 9.4613501648789666e-01 3.1610506396035887e+00 -5.2814984282340172e-01 + 1.1177566361152715e+00 3.2522570476111037e+00 -8.5160427415495799e-01 + 1.2608592490529462e+00 3.2670466382721202e+00 -1.1936644289734115e+00 + 1.3640135659411043e+00 3.2117110471928525e+00 -1.5407078720017346e+00 + 1.4218781224339967e+00 3.0969261556089287e+00 -1.8923755460868801e+00 + 1.4462199153519892e+00 2.9308353538581384e+00 -2.2896675574486278e+00 + 1.4651781405907829e+00 2.6703287982054831e+00 -2.8201881046489556e+00 + 1.4733567886544268e+00 2.1996972155486105e+00 -3.3706233614892032e+00 + 1.3798805670733103e+00 1.9826050500314498e+00 -3.2781226588485550e+00 + id 14238 + loc 3.1935435533523560e-01 4.8741647601127625e-01 396 + blend 0.0000000000000000e+00 + interp 3.8738745752062903e-01:3.2399585580104168e-01:6.8504482867396965e-02:2.7825303614917429e-01:1.2636485397265844e+00:3.8282273122466903e-01:1.9652295987854602e+00:3.8738358364605385e-01:2.2137998808029407e+00:3.1104297723591140e-01:3.0085696575173020e+00 + CVs 20 + -2.8661110460426009e-01 2.4490086890964488e-01 -7.2998164815458810e-01 + -5.1077925063646168e-01 3.4232653015414427e-01 -1.2607176102395030e+00 + -6.9990975960345891e-01 3.8406401789544464e-01 -1.7589420008255341e+00 + -8.5606526300060803e-01 4.0688952089641123e-01 -2.2906813295241837e+00 + -9.7307377728133504e-01 4.0454503915438389e-01 -2.8476554059799812e+00 + -1.0554808275984269e+00 3.7299079509279998e-01 -3.4207456158526739e+00 + -1.1172583927593309e+00 3.0950181859564141e-01 -4.0006682989590576e+00 + -1.1749248998833552e+00 2.0884339115519657e-01 -4.5771977509327506e+00 + -1.2448321901867567e+00 6.0678919590698932e-02 -5.1426124315388710e+00 + -1.3459916409681476e+00 -1.4993171058277022e-01 -5.6902536565877817e+00 + -1.4954366609751693e+00 -4.3370527647112112e-01 -6.2011344515666753e+00 + -1.6964246633341333e+00 -7.8428855968813105e-01 -6.6461600764623805e+00 + -1.9394150510682251e+00 -1.1856569085978359e+00 -7.0104514653116254e+00 + -2.2125991747686444e+00 -1.6290073597947745e+00 -7.2986415473970823e+00 + -2.5026359892635481e+00 -2.1093311913015884e+00 -7.5201238054192938e+00 + -2.7959778000972593e+00 -2.6178633242213829e+00 -7.6761530481499189e+00 + -3.0780292037404271e+00 -3.1443531702304535e+00 -7.7646180380736523e+00 + -3.3312546693097347e+00 -3.6746327657087696e+00 -7.7870467025293433e+00 + -3.5476750117152411e+00 -4.1279901552398286e+00 -7.7924858875894474e+00 + id 14239 + loc 2.0145981013774872e-01 9.5403259992599487e-01 400 + blend 0.0000000000000000e+00 + interp 5.2997751435473406e-01:3.8811052851983285e-01:2.7016839460410802e-01:3.0254981116408508e-01:1.0406427478109517e+00:3.1362450513223405e-01:1.9874229349610066e+00:5.2997221457959054e-01:2.6514778721904948e+00:3.3069405631691212e-01:3.1600769129224329e+00:3.5538019250855735e-01:3.9246268186743718e+00 + CVs 20 + -1.5587424208788075e-01 3.3227573077594991e-01 -5.9354592454037361e-02 + -3.3169461652389343e-01 6.8238545324967537e-01 -1.4227741813816053e-01 + -4.9853939041894346e-01 1.0421929646500767e+00 -2.7837344391342422e-01 + -6.4541532447745997e-01 1.3917044897210042e+00 -4.8353731819864548e-01 + -7.7414201355896650e-01 1.7083624537381881e+00 -7.5985687233720522e-01 + -8.8370677093637739e-01 1.9734734993144429e+00 -1.1002592167933507e+00 + -9.7085764042586575e-01 2.1744270092262266e+00 -1.4922665042640006e+00 + -1.0318641236332875e+00 2.3034403724180459e+00 -1.9209851696638993e+00 + -1.0606911502192056e+00 2.3561445742184928e+00 -2.3705567388815210e+00 + -1.0491698382876136e+00 2.3309534666540785e+00 -2.8208333375236974e+00 + -9.9793482582068305e-01 2.2328781800868640e+00 -3.2461493904398484e+00 + -9.2449820507735125e-01 2.0763663087207727e+00 -3.6262869171673797e+00 + -8.5311066388545453e-01 1.8800113554089506e+00 -3.9473870398045885e+00 + -8.0196208094238886e-01 1.6654399440169310e+00 -4.1897197268351016e+00 + -7.7253711524885682e-01 1.4587329546534367e+00 -4.3464105349652540e+00 + -7.5402236399117295e-01 1.2679791587800058e+00 -4.4554298756649224e+00 + -7.4657238477639387e-01 1.0765753495243675e+00 -4.5637449232435277e+00 + -7.6324988945098249e-01 8.7549245289667699e-01 -4.6904873743191713e+00 + -8.3749411534386364e-01 6.6900629441419501e-01 -4.8319991098108996e+00 + id 14240 + loc 2.5646764039993286e-01 4.7237247228622437e-01 401 + blend 0.0000000000000000e+00 + interp 3.7840448315963054e-01:2.7537888134359195e-01:5.1928726318113083e-01:3.7840069911479896e-01:1.0001598060367174e+00:2.9643232846862227e-01:1.9999835826461156e+00:3.6855233139098742e-01:2.6078066531247286e+00:2.9324285080301016e-01:3.3352930040490323e+00:3.6831264420952259e-01:3.9999974032270220e+00 + CVs 20 + -3.0830588774397594e-01 3.0899709822739918e-01 7.1894695189653884e-02 + -5.9390338366426865e-01 6.1041580055566491e-01 1.2647732616772936e-01 + -8.8758234057138063e-01 8.9703672577872884e-01 1.7980474020005296e-01 + -1.2040075982643481e+00 1.1604685765545668e+00 2.4204529206565389e-01 + -1.5484118597144065e+00 1.3919754789916632e+00 3.2291178069545029e-01 + -1.9215730229405090e+00 1.5816617338818877e+00 4.3705496480270106e-01 + -2.3153187516794733e+00 1.7175013267597306e+00 6.0074344568090843e-01 + -2.7111435526991623e+00 1.7865112221545516e+00 8.2357361912529181e-01 + -3.0844559988425182e+00 1.7791755066228869e+00 1.1023572307668981e+00 + -3.4103249621049385e+00 1.6931954840225372e+00 1.4202918993969944e+00 + -3.6709746331821291e+00 1.5347292398952854e+00 1.7528546831425185e+00 + -3.8610214704382315e+00 1.3130113537524344e+00 2.0814544941338609e+00 + -3.9793172402165133e+00 1.0358099050250387e+00 2.3932584770484122e+00 + -4.0232134943394255e+00 7.0802478075432562e-01 2.6827626072497650e+00 + -3.9807844723674468e+00 3.3896109423999560e-01 2.9530703630359967e+00 + -3.8259208010002879e+00 -3.6131170223469344e-02 3.2015347777404521e+00 + -3.5394198214076882e+00 -3.5716030130720888e-01 3.4072691523047434e+00 + -3.1450479006161802e+00 -5.6402832494506194e-01 3.5283565807363870e+00 + -2.7107046281181106e+00 -7.1591785429717247e-01 3.6069634016919219e+00 + id 14241 + loc 8.8531845808029175e-01 7.7478867769241333e-01 379 + blend 0.0000000000000000e+00 + interp 6.4823649674956019e-01:4.8324027091024746e-01:7.7976438194832798e-02:4.5237926723935235e-01:9.5267489796848248e-01:5.0654169803243809e-01:1.3697911429701064e+00:4.8832781617865068e-01:2.1064803033049055e+00:6.4791208084476404e-01:2.9201190695668142e+00:5.7824621350092431e-01:3.1996676798648664e+00:6.4823001438459271e-01:3.7777862631279922e+00 + CVs 20 + -2.7856808736515370e-01 3.7895005367151979e-01 2.0709553470464448e-01 + -5.6326639964087444e-01 7.3880512471253024e-01 4.0690038418030144e-01 + -8.5266635295746918e-01 1.0722853013203952e+00 6.2369849791522747e-01 + -1.1385058775781602e+00 1.3900574542467365e+00 8.4740421677626854e-01 + -1.4204388959895153e+00 1.7009944127499501e+00 1.0556218054858790e+00 + -1.7142362352240901e+00 2.0027104016785855e+00 1.2361963716226851e+00 + -2.0366719110725420e+00 2.2855813999368952e+00 1.3828517317992632e+00 + -2.3940363932123772e+00 2.5392378894915875e+00 1.4903230575496664e+00 + -2.7800484741304357e+00 2.7519568934428316e+00 1.5546777920488992e+00 + -3.1832979077910668e+00 2.9128211814941065e+00 1.5779364367803872e+00 + -3.5967507632264404e+00 3.0140657582212045e+00 1.5665980423836288e+00 + -4.0177489833864133e+00 3.0495428911209084e+00 1.5266468789895828e+00 + -4.4322417529694818e+00 3.0159624597844230e+00 1.4628959324084683e+00 + -4.7890734057510542e+00 2.9290580962813975e+00 1.3798692676159194e+00 + -5.0204583674043022e+00 2.8272810797863812e+00 1.2787738807039695e+00 + -5.1039825747246956e+00 2.7243871978787717e+00 1.1491154018478289e+00 + -5.0814091895499995e+00 2.5864274369140103e+00 9.5223662571598500e-01 + -5.0476119669649879e+00 2.3789288490058023e+00 6.7375655051203398e-01 + -5.1234026225845932e+00 2.2642591605420690e+00 5.2575753396827718e-01 + id 14242 + loc 2.2825270891189575e-02 1.2865385413169861e-01 404 + blend 0.0000000000000000e+00 + interp 5.1098183930890717e-01:3.7849803480051131e-01:1.1191740200411160e-01:3.6176060541297145e-01:9.9844731511082185e-01:4.0542963830807416e-01:1.5016792064492961e+00:2.1860773343298689e-01:2.0000043560525627e+00:5.1097672949051409e-01:2.8930701974110073e+00:3.2939457100864017e-01:3.6813334772684252e+00 + CVs 20 + -6.0382834726036463e-02 -6.4781266289728662e-02 7.3841212984896973e-02 + -1.3509731247756632e-01 -1.1143542420901487e-01 1.4116969981931393e-01 + -1.9971707124319293e-01 -1.5668454474280630e-01 1.9216719177471692e-01 + -2.6067654138497237e-01 -2.0602168027165446e-01 2.4128921500549338e-01 + -3.1596780126528645e-01 -2.5928914577697038e-01 2.8362316389930620e-01 + -3.6354485216297056e-01 -3.1590539667169043e-01 3.1405977463432522e-01 + -4.0210299530337346e-01 -3.7439683758404335e-01 3.2659006053310091e-01 + -4.3229252616678954e-01 -4.3156130204374427e-01 3.1395857335363675e-01 + -4.6018532259796130e-01 -4.8247705120362822e-01 2.7253351805963622e-01 + -4.9803043205597997e-01 -5.2290027585844678e-01 2.0849535946209538e-01 + -5.5716397168673371e-01 -5.5124610210915448e-01 1.3478396669729745e-01 + -6.4357845327415764e-01 -5.6684997274321025e-01 6.1771041616979688e-02 + -7.5994318732548705e-01 -5.6863959623684623e-01 -3.3504219587005835e-03 + -9.0905272926375469e-01 -5.5721658683498310e-01 -5.2136059955446595e-02 + -1.0937492378076414e+00 -5.3557000448203362e-01 -7.3895800695848293e-02 + -1.3147735458495551e+00 -5.0461638347001925e-01 -5.9672793633597274e-02 + -1.5703512615246280e+00 -4.6001566298483104e-01 -2.9455288773949165e-03 + -1.8504416472046012e+00 -3.9874179400430865e-01 1.0542342875799596e-01 + -1.9283558318731913e+00 -3.7758242858376029e-01 1.9411094262209419e-01 + id 14243 + loc 3.7777507305145264e-01 4.2366310954093933e-02 395 + blend 0.0000000000000000e+00 + interp 4.6205301291066458e-01:4.6204839238053552e-01:1.8878647198099063e-01:3.5645220950529621e-01:7.7149558019198317e-01:3.4267003293280784e-01:1.1609827321839652e+00:3.1416047332575558e-01:2.1447881069306494e+00:3.7426312031203640e-01:3.0389883599180783e+00:2.9198167240020290e-01:3.7755335947515674e+00 + CVs 20 + -2.6199940571913982e-01 2.5131750195047270e-01 -3.7221787645007975e-01 + -5.1723478139940704e-01 4.7530227857154050e-01 -7.0056043426991110e-01 + -7.7012480673227679e-01 6.9247421325425629e-01 -1.0261821094168107e+00 + -1.0205973034956166e+00 9.0745025929326650e-01 -1.3709052384852725e+00 + -1.2631671997597538e+00 1.1115178803149797e+00 -1.7390980899625212e+00 + -1.4981700205950168e+00 1.2979052613351096e+00 -2.1288522909147658e+00 + -1.7291416733995773e+00 1.4582542111527290e+00 -2.5395334151105393e+00 + -1.9595020282234339e+00 1.5772742612495758e+00 -2.9752257858785605e+00 + -2.1962941315392133e+00 1.6388603417937002e+00 -3.4351350234966773e+00 + -2.4513726187131288e+00 1.6321749153721454e+00 -3.9101093676034413e+00 + -2.7313858670959990e+00 1.5530154153753353e+00 -4.3882131730437957e+00 + -3.0321063763814431e+00 1.4030062591449814e+00 -4.8605619664924813e+00 + -3.3506783161858542e+00 1.1851640539691615e+00 -5.3181817581841804e+00 + -3.6973815685900981e+00 9.0067840428182144e-01 -5.7420276109493571e+00 + -4.0861976195208261e+00 5.4314371258631899e-01 -6.1033262649712210e+00 + -4.5124963028990042e+00 8.4821902380848524e-02 -6.3690633868815087e+00 + -4.9418504051954590e+00 -4.9254104293360790e-01 -6.4979529968197127e+00 + -5.3297616133063261e+00 -1.1110353205928334e+00 -6.4831143868121526e+00 + -5.6540341945417092e+00 -1.5144830182727973e+00 -6.5422521235726601e+00 + id 14244 + loc 6.3584601879119873e-01 8.6598026752471924e-01 378 + blend 0.0000000000000000e+00 + interp 3.2410302432831306e-01:2.8006982703105987e-01:1.4191892097578906e-01:3.2409978329806977e-01:8.6110106472412418e-01:2.5001253873799867e-01:1.3219261952748940e+00:2.7843967319585861e-01:2.1325491301567827e+00:2.3966902150274824e-01:3.0383405769866583e+00:3.2338835030056018e-01:3.8065331012809427e+00 + CVs 20 + 5.1999135909563909e-01 3.4061496034767252e-01 1.4029478192826045e-01 + 9.7836675189377298e-01 5.9794689798149725e-01 2.3857208991525189e-01 + 1.4479278030190434e+00 8.0503194693297075e-01 3.0352244642428838e-01 + 1.9595467990990887e+00 9.9159309812061114e-01 3.4993322647835701e-01 + 2.5031034526416693e+00 1.1697911437867028e+00 4.0017638872082839e-01 + 3.0707241225654252e+00 1.3306437559533628e+00 4.8243757775011398e-01 + 3.6582273420334093e+00 1.4464729005940895e+00 6.1264953495456664e-01 + 4.2543859350692692e+00 1.4896035854213834e+00 7.9154554405880939e-01 + 4.8373978463652989e+00 1.4411601000685583e+00 1.0054675721606563e+00 + 5.3806170005876446e+00 1.2916690741857402e+00 1.2229823700794658e+00 + 5.8549637856407006e+00 1.0443376030130551e+00 1.4003002970155700e+00 + 6.2303546427122072e+00 7.2146980081701972e-01 1.4996264492323901e+00 + 6.4928052093563577e+00 3.6692344899928564e-01 1.5086012859714908e+00 + 6.6692436652498337e+00 2.0002853925695785e-02 1.4535978375907435e+00 + 6.8068751475240878e+00 -3.2616680940615295e-01 1.3809187537966408e+00 + 6.9264196756300560e+00 -6.8903320205943297e-01 1.3159433675390462e+00 + 7.0180871524628579e+00 -1.0365710012484937e+00 1.2590218234464636e+00 + 7.0747924538081417e+00 -1.3372140724370030e+00 1.2157593314357344e+00 + 7.1647193803244793e+00 -1.6286047473443834e+00 1.1947326553373852e+00 + id 14245 + loc 9.7340470552444458e-01 4.0270528197288513e-01 412 + blend 0.0000000000000000e+00 + interp 4.2274537313683069e-01:2.8005400414092868e-01:1.5295180450975587e-01:3.1316499637911760e-01:1.0712412781896719e+00:3.2822843236812482e-01:1.9741098129642820e+00:4.2274114568309934e-01:2.5314293726520987e+00:3.4404299614877620e-01:3.0117979408878752e+00:3.0044538874999116e-01:3.8145539749191228e+00 + CVs 20 + -7.5285455859419548e-01 1.8901644210313151e-01 2.0733008884844686e-01 + -1.2636109514662213e+00 2.6759025843538697e-01 4.0794071704323898e-01 + -1.7371932283267413e+00 3.3886483725206851e-01 6.1471900234259547e-01 + -2.2361352495322060e+00 4.4172485447013327e-01 8.2306546452838014e-01 + -2.7559408535813432e+00 5.5715590455269026e-01 1.0313394740058481e+00 + -3.2974749876978251e+00 6.5352539810963151e-01 1.2577452720503153e+00 + -3.8639978367924432e+00 6.9440515015724169e-01 1.5475442064078517e+00 + -4.4513779073997872e+00 6.2803109923898903e-01 1.9514609007059136e+00 + -5.0390048672092487e+00 3.9248797587331752e-01 2.4817604722298516e+00 + -5.5818572257192347e+00 -7.3892941610172125e-02 3.0843370276777744e+00 + -6.0114357379031347e+00 -7.7751047389836048e-01 3.6453635768665129e+00 + -6.2911922364939565e+00 -1.5995536922313260e+00 4.0767580039728779e+00 + -6.4374348071763006e+00 -2.3937007697233925e+00 4.3993068721107234e+00 + -6.4720786814292843e+00 -3.0953301631030077e+00 4.6687658233217268e+00 + -6.4128008019568696e+00 -3.7185935368057574e+00 4.9144792078019917e+00 + -6.2807316191218128e+00 -4.3323672611642223e+00 5.1512642432696545e+00 + -6.1034206528057728e+00 -4.9792452127292348e+00 5.3990363427453838e+00 + -5.9079095909459562e+00 -5.6378464863342224e+00 5.6774533671109237e+00 + -5.6934108304587951e+00 -6.2526865152042896e+00 5.9750494329280750e+00 + id 14246 + loc 7.1792513132095337e-01 6.4594841003417969e-01 399 + blend 0.0000000000000000e+00 + interp 4.7220725933531660e-01:3.5301075227477574e-01:2.5796159157248133e-01:4.7220253726272327e-01:9.9908452479264787e-01:3.3964813110564374e-01:1.5697022393745423e+00:3.4577273981155704e-01:2.1866456941678218e+00:2.5585296918150663e-01:3.0323235715541488e+00:3.9919374377056871e-01:3.6652708941439909e+00 + CVs 20 + -2.2003723259363508e-01 3.4512133896501163e-01 -2.4447472751177834e-01 + -3.8583134081829551e-01 6.8320912983985171e-01 -4.9323909329998095e-01 + -5.3699753169054887e-01 1.0156375025129147e+00 -7.6412802256098622e-01 + -6.9986951100043782e-01 1.3411498825491639e+00 -1.0676282417148253e+00 + -8.9516031391661832e-01 1.6502439752283942e+00 -1.4136692371587072e+00 + -1.1416382836420880e+00 1.9215193139750744e+00 -1.8115048795269921e+00 + -1.4509146695477222e+00 2.1263466045915185e+00 -2.2615916951593369e+00 + -1.8255801675551422e+00 2.2448107365863099e+00 -2.7475186592288470e+00 + -2.2689263883586595e+00 2.2658420939923913e+00 -3.2515878663725202e+00 + -2.7817245230213405e+00 2.1580763563554402e+00 -3.7656945827272881e+00 + -3.3358418793720896e+00 1.8932720002830088e+00 -4.2590240848525278e+00 + -3.8961316745449972e+00 1.5299037027172155e+00 -4.6726535988540876e+00 + -4.4702396818357686e+00 1.1652105851323973e+00 -4.9786767890010974e+00 + -5.0797701914869338e+00 8.0487475944223963e-01 -5.1911965598003764e+00 + -5.7163892129208698e+00 4.2298518530184670e-01 -5.3204878274858967e+00 + -6.3182179440615798e+00 1.7766620799151678e-01 -5.3628184758921060e+00 + -6.7467379980834101e+00 3.7902689155351799e-01 -5.3334118926731993e+00 + -6.8964232377265358e+00 8.8771850746568881e-01 -5.2597846638205983e+00 + -7.5177136335369914e+00 8.8002538480356862e-01 -5.2632638183604357e+00 + id 14247 + loc 9.9632906913757324e-01 9.2113333940505981e-01 393 + blend 0.0000000000000000e+00 + interp 4.2442795792426941e-01:3.9297711175863848e-01:7.3933828291384884e-01:3.6252230706702099e-01:1.1887526999031917e+00:4.2442371364469017e-01:2.0734692802812225e+00:4.2205409473992839e-01:2.4940787637638158e+00:4.0534436684219183e-01:2.9802672075654644e+00:2.4192956800701840e-01:3.4506333279277808e+00 + CVs 20 + -2.5369486137582636e-01 1.7444066115122156e-01 -3.0853958967488618e-02 + -4.9259134682786992e-01 3.5401946867665796e-01 -6.9934402077416413e-02 + -7.1851523045643195e-01 5.3382971976102267e-01 -1.0413904860783829e-01 + -9.3803228356559831e-01 7.1375026558890653e-01 -1.2770894673250605e-01 + -1.1558266338970595e+00 8.9510908157776692e-01 -1.4426057496471714e-01 + -1.3783705059624138e+00 1.0774303708859705e+00 -1.5980503596113382e-01 + -1.6119500513626288e+00 1.2550730187154338e+00 -1.8481517220964971e-01 + -1.8612147374770718e+00 1.4164880266310382e+00 -2.3096914571971372e-01 + -2.1291898627456738e+00 1.5458066966096340e+00 -3.0559092202450627e-01 + -2.4135801662457093e+00 1.6240841269856281e+00 -4.1126909241872034e-01 + -2.7025934848391611e+00 1.6364641207956372e+00 -5.4619444577044851e-01 + -2.9837424743342500e+00 1.5776867852398546e+00 -7.0351973205774532e-01 + -3.2510075268661880e+00 1.4532191374259944e+00 -8.7634197700901950e-01 + -3.4961699718199228e+00 1.2839062025539643e+00 -1.0642548321988903e+00 + -3.7051686137021997e+00 1.0827159925492227e+00 -1.2679217419162230e+00 + -3.8650322797623113e+00 8.0935860557921369e-01 -1.4732065306568085e+00 + -3.9866944645163103e+00 3.7779670417073286e-01 -1.6832012083396342e+00 + -4.1383629100212831e+00 -1.6892259858968117e-01 -2.0386370333889845e+00 + -4.1693041754671993e+00 -2.0830397325056471e-01 -2.3310190363761909e+00 + id 14248 + loc 4.5724064111709595e-01 8.8070011138916016e-01 405 + blend 0.0000000000000000e+00 + interp 5.1796880917550481e-01:3.4689457273597307e-01:8.0932186239108139e-02:3.1979411519088069e-01:8.7571148160868495e-01:4.2185482173773198e-01:1.6224121237486426e+00:3.0561127830601909e-01:2.0355373559037999e+00:3.6713736653631168e-01:3.0470065953335927e+00:5.1796362948741304e-01:3.8007640971040031e+00 + CVs 20 + 2.8751900090455323e-01 3.2688973399761012e-01 -6.7852204636209917e-02 + 4.2044046034052829e-01 5.5293893366784008e-01 -1.2268253619356888e-01 + 5.1718458142141932e-01 7.1516355698276057e-01 -1.5970320857412465e-01 + 6.2170316999846786e-01 8.6591780258831652e-01 -1.7436687544587615e-01 + 7.3219308105869207e-01 1.0072280942103731e+00 -1.5951095030674067e-01 + 8.4767724962250290e-01 1.1364889974892525e+00 -1.0730827946607019e-01 + 9.6532874589617201e-01 1.2434456104321701e+00 -1.7133766798244313e-02 + 1.0804345369763833e+00 1.3181441466110388e+00 9.6702280775443530e-02 + 1.1902705207354536e+00 1.3627178018547152e+00 2.1541365555939371e-01 + 1.2951998215165645e+00 1.3870306862079855e+00 3.2981086002005000e-01 + 1.3973154347230554e+00 1.3998298285376407e+00 4.4126395320547523e-01 + 1.4996703117368684e+00 1.4060801418994417e+00 5.5618314934048230e-01 + 1.6033035049545612e+00 1.4085034375117884e+00 6.7560853055179981e-01 + 1.7029780103698013e+00 1.4103306850348427e+00 7.8695623117211932e-01 + 1.7895702930178143e+00 1.4158079475320413e+00 8.7274568203903824e-01 + 1.8594458044881710e+00 1.4280147940844912e+00 9.2992733630920388e-01 + 1.9178044307569873e+00 1.4478603113504365e+00 9.6919236819150456e-01 + 1.9785544815458473e+00 1.4722142109952607e+00 1.0030979316509214e+00 + 2.1534547339970413e+00 1.5126281487286848e+00 1.1310983387827234e+00 + id 14249 + loc 7.4482327699661255e-01 7.3292106389999390e-01 402 + blend 0.0000000000000000e+00 + interp 3.6993356733756855e-01:3.0330285879788926e-01:2.1815832939419366e-01:3.0333898803915682e-01:9.9431682364277352e-01:3.0326134238146751e-01:1.8451585554870422e+00:3.0835369252547445e-01:2.3715385214712796e+00:3.6992986800189520e-01:2.9643526934986864e+00:2.6564346407134282e-01:3.4341979596922605e+00 + CVs 20 + -1.0954981462751953e-01 7.9330410829286449e-02 -7.5004323141824841e-02 + -1.8229472103711997e-01 1.7318490693176156e-01 -1.5323748926046693e-01 + -2.2913960215287477e-01 2.6548150207929661e-01 -2.2100939786026919e-01 + -2.5971641681122937e-01 3.4797034897134349e-01 -2.7270956629012949e-01 + -2.7613527513482755e-01 4.2226933210853279e-01 -3.1135646281554441e-01 + -2.8641103405735618e-01 4.8734370952852413e-01 -3.3614167597065647e-01 + -3.0246361072444494e-01 5.3982466881208790e-01 -3.4289619231667046e-01 + -3.3451650135198607e-01 5.7374657501620563e-01 -3.3122120364986590e-01 + -3.9991459535921003e-01 5.7005630162461474e-01 -3.0847835075210372e-01 + -5.6428194521297048e-01 5.0031274982159746e-01 -2.8756052546000266e-01 + -9.1628959792939857e-01 4.3899897889564321e-01 -2.9419346004333963e-01 + -1.2503386147518833e+00 5.5834353166957951e-01 -2.8904969064721436e-01 + -1.3234033105739396e+00 7.9878283919656634e-01 -1.7184982811455971e-01 + -1.1357644394520878e+00 1.0929383971604301e+00 1.8393848987692918e-02 + -7.7248481930778701e-01 1.4141019000808210e+00 1.5087491123445890e-01 + -3.2093785038843786e-01 1.7341109717673835e+00 1.4589876839929539e-01 + 1.7195571880889327e-01 2.0291479201047764e+00 -2.3750126001674698e-02 + 6.3681534389155114e-01 2.2688495791709138e+00 -3.5156648247037958e-01 + 6.7319923051220554e-01 2.3488238635623588e+00 -4.3750005102767497e-01 + id 14250 + loc 2.6632341742515564e-01 3.6837819963693619e-02 1069 + blend 0.0000000000000000e+00 + interp 3.9832291421752464e-01:3.9831893098838250e-01:1.8839707029341701e-01:2.6569936233803709e-01:1.0095562819300024e+00:3.0158945091192563e-01:1.8695328336782113e+00:3.0695457621195155e-01:2.4190797988958872e+00:3.6237859281304652e-01:3.0032947862913417e+00:2.9695485150932727e-01:3.8670361416801073e+00 + CVs 20 + -3.0527716048187714e-01 2.1689845586129117e-01 1.8898183205050351e-02 + -5.7787919974457858e-01 4.2734286703836999e-01 7.0073379750898224e-02 + -8.2713566107635972e-01 6.4737484470723028e-01 1.6363101699063037e-01 + -1.0721892540885143e+00 8.8988051300314619e-01 2.8549113624740763e-01 + -1.3407259902727533e+00 1.1471886806421314e+00 3.8815002297303813e-01 + -1.6531236237461493e+00 1.3956799664068245e+00 4.3474101871884163e-01 + -2.0359273696867031e+00 1.6140196672367624e+00 3.9858543913013245e-01 + -2.5108207332636061e+00 1.7555631195387091e+00 2.1655007035238594e-01 + -2.9898560413136503e+00 1.7403589522857565e+00 -1.6124251498718745e-01 + -3.3137393412229668e+00 1.5626833900725396e+00 -6.4112661072417354e-01 + -3.4560805804202901e+00 1.2944620690056765e+00 -1.1122955449091940e+00 + -3.4546973381106092e+00 9.7652581909272651e-01 -1.5354558889460472e+00 + -3.3533434683265355e+00 6.5502163379965395e-01 -1.8445894425692604e+00 + -3.2291567902090303e+00 4.1709359512784278e-01 -1.9791997667199888e+00 + -3.1115262260269865e+00 2.5603176621447898e-01 -1.9717746126823177e+00 + -2.9686099680852709e+00 6.0022849260415928e-02 -1.9329375296806452e+00 + -2.8001125473658552e+00 -1.7851136381998045e-01 -1.9906657615823100e+00 + -2.6579087083046553e+00 -2.9004608357511164e-01 -2.2208300353465571e+00 + -2.5834397626640597e+00 -1.4106039681125393e-01 -2.5992717390082851e+00 + id 14251 + loc 6.4702582359313965e-01 5.2324599027633667e-01 400 + blend 0.0000000000000000e+00 + interp 3.6656261859239975e-01:3.2488957965706500e-01:4.2055971793791003e-01:2.8774553465774771e-01:1.0359831769196925e+00:3.6655895296621382e-01:1.9477207636976095e+00:3.1573692106392803e-01:2.7337012845682995e+00:3.2192753894999371e-01:3.4969912310310978e+00 + CVs 20 + -1.6949062226799710e-01 1.5373534689789070e-01 -1.6705625523673684e-01 + -3.3379662489032480e-01 3.1162835999221639e-01 -3.4955735867800064e-01 + -4.9215378816059668e-01 4.6775769557877889e-01 -5.4875984786137155e-01 + -6.4456957004904514e-01 6.1878044956214795e-01 -7.6468089430736641e-01 + -7.9146295235912900e-01 7.6173988621681965e-01 -9.9488672237321107e-01 + -9.4666072534268542e-01 8.9215546845542826e-01 -1.2354427452870422e+00 + -1.1285854716595105e+00 1.0262236730339733e+00 -1.4860274913972629e+00 + -1.3146855677554963e+00 1.1816106752997155e+00 -1.7554278345172223e+00 + -1.4718543114856233e+00 1.3410686193689365e+00 -2.0456936215386237e+00 + -1.6099187678353934e+00 1.4836450483181329e+00 -2.3662634402702984e+00 + -1.7336727901384081e+00 1.5942248840687996e+00 -2.7231764538377714e+00 + -1.8395014310588063e+00 1.6571900574070446e+00 -3.1173446061958106e+00 + -1.9197158970535666e+00 1.6550006543688376e+00 -3.5438241919391951e+00 + -1.9639104844298858e+00 1.5705869560158503e+00 -3.9893858571532324e+00 + -1.9608187865029754e+00 1.3922725385180650e+00 -4.4309647821216647e+00 + -1.9041186871282549e+00 1.1181604020805729e+00 -4.8344313196553568e+00 + -1.8007886243056230e+00 7.5981487437065276e-01 -5.1589487741140818e+00 + -1.6718608734614673e+00 3.4941885430965369e-01 -5.3760472642064112e+00 + -1.5738091479472667e+00 2.4958618559977719e-02 -5.5405765957040902e+00 + id 14252 + loc 9.7563701868057251e-01 6.1289387941360474e-01 401 + blend 0.0000000000000000e+00 + interp 4.4774796909371567e-01:4.4774349161402477e-01:3.2864655719153091e-02:3.4828430350843120e-01:8.0886880804052375e-01:2.6751315965155636e-01:1.5414303188824490e+00:3.6937027888095841e-01:2.0184461541379846e+00:1.0508672828937361e-01:2.9513136217956886e+00:3.7710053390966036e-01:3.9128484613025005e+00 + CVs 20 + 9.4167522202605269e-02 4.0893646097408748e-01 -3.0149241277501188e-01 + 1.8363007254132585e-01 8.0207923436121875e-01 -6.0902606930768244e-01 + 3.0044463910372121e-01 1.1662182445376943e+00 -9.1913776515725720e-01 + 4.3342896718461299e-01 1.4970735725403679e+00 -1.2412712372143127e+00 + 5.5792115266833342e-01 1.7956074980228975e+00 -1.5829276739412328e+00 + 6.5072325537368914e-01 2.0657965852105487e+00 -1.9448238725823748e+00 + 6.9347580353985594e-01 2.3062562522731902e+00 -2.3225143909268020e+00 + 6.7471973945134944e-01 2.5062965409023072e+00 -2.7067476263279331e+00 + 6.0100824315129875e-01 2.6422467680880777e+00 -3.0778653666661286e+00 + 5.0334673082632286e-01 2.6875347385370310e+00 -3.4091330601720014e+00 + 4.1173624519946028e-01 2.6290750054116554e+00 -3.6789624770529201e+00 + 3.2970438203351504e-01 2.4739123841632358e+00 -3.8717517514523321e+00 + 2.3318843614777529e-01 2.2584483706894272e+00 -3.9979906705731763e+00 + 7.9358130924847670e-02 2.0161795382937622e+00 -4.1087501024939499e+00 + -1.7394613412200854e-01 1.7588505683374041e+00 -4.2276629558413701e+00 + -5.5579874600501911e-01 1.5321753877742712e+00 -4.3410699201364862e+00 + -1.0667299793488862e+00 1.4347466140615182e+00 -4.4296883771736049e+00 + -1.5864301140157997e+00 1.5142004161909348e+00 -4.4573338306596186e+00 + -1.9198829434630673e+00 1.4899381581389108e+00 -4.4626570664871190e+00 + id 14253 + loc 7.4128413200378418e-01 6.1198216676712036e-01 379 + blend 0.0000000000000000e+00 + interp 4.3925151551053154e-01:4.0724198333834644e-01:3.8466501432399047e-02:3.7246125547374898e-01:9.1693444814429914e-01:4.3924712299537644e-01:1.1776254748250734e+00:3.8470466381769691e-01:2.0034999045932977e+00:3.4188411715709638e-01:2.9931875914724118e+00:4.3093441784816933e-01:3.7602331171596499e+00 + CVs 20 + -3.1773722321861664e-01 2.4252909730606559e-01 2.4957745706924295e-01 + -5.8369656756207955e-01 4.4064138213039650e-01 4.5625755145832864e-01 + -8.2737974887920052e-01 6.0897043353585334e-01 6.6750468338012103e-01 + -1.0660459146737837e+00 7.6930670108615029e-01 9.1226873540705111e-01 + -1.2940613189866326e+00 9.4768333211124134e-01 1.1828543794250332e+00 + -1.5164688344586050e+00 1.1655802431430924e+00 1.4656106141636389e+00 + -1.7659187901882112e+00 1.4241355748731763e+00 1.7462141626745222e+00 + -2.0771633160745053e+00 1.7058146502791782e+00 2.0037032982598348e+00 + -2.4605284539284682e+00 1.9876863612463411e+00 2.2103793638934750e+00 + -2.9039575318590756e+00 2.2464990205561048e+00 2.3422161319214188e+00 + -3.3912374332123267e+00 2.4586717052521490e+00 2.3951989032247840e+00 + -3.9148875970258836e+00 2.5932013460283443e+00 2.3847658713194799e+00 + -4.4546681072762890e+00 2.6007751993280728e+00 2.3315333613246469e+00 + -4.9497160892148369e+00 2.4464276004143226e+00 2.2549164153800305e+00 + -5.3498773858346080e+00 2.1626834264865478e+00 2.1661616875835321e+00 + -5.6703222567431624e+00 1.8226534020313663e+00 2.0615022537745955e+00 + -5.9582750960367763e+00 1.4842760960011638e+00 1.9402349832653345e+00 + -6.2672439243905131e+00 1.1674170858196393e+00 1.8356901130743568e+00 + -6.6542712638338744e+00 8.6156098414867133e-01 1.7879346484727723e+00 + id 14254 + loc 3.3908674120903015e-01 6.6408485174179077e-02 381 + blend 0.0000000000000000e+00 + interp 4.5647523622205394e-01:2.5960279247823620e-01:8.1014675379185053e-02:2.9175877765739672e-01:8.6260569145496169e-01:3.6226052331003999e-01:1.4853501896889172e+00:3.3940840345459439e-01:1.8532735846045187e+00:4.5647067146969172e-01:2.2094416511806481e+00:3.8400893503891093e-01:3.0000692311852752e+00:3.9723180379423967e-01:3.4603392790568708e+00 + CVs 20 + -7.2893329455880951e-01 2.0174266303449687e-01 -6.7981969959197031e-01 + -1.2848440981484983e+00 2.7678847819783720e-01 -1.0862974582124347e+00 + -1.8206658484705693e+00 3.1055168829745744e-01 -1.4456250740112488e+00 + -2.3794101678552835e+00 3.4253690141001425e-01 -1.8466237818745164e+00 + -2.9422817829842507e+00 3.7197932580815662e-01 -2.2942473500943343e+00 + -3.4963621016695989e+00 3.9631531377005969e-01 -2.7857831905806916e+00 + -4.0466655108274319e+00 4.0481750479562073e-01 -3.3185806603909573e+00 + -4.6074740925504738e+00 3.7709090765758480e-01 -3.8955475694357951e+00 + -5.1906649880154223e+00 2.7533304887800436e-01 -4.5250268690262487e+00 + -5.8007893977894840e+00 4.6812281143158385e-02 -5.1998993238737512e+00 + -6.4334820756717521e+00 -3.6866617373046418e-01 -5.8824173829128794e+00 + -7.0620603073687453e+00 -1.0221697350316665e+00 -6.5011341443982724e+00 + -7.6314827128265890e+00 -1.8947425376066587e+00 -6.9643782264842287e+00 + -8.1041669573752255e+00 -2.8449637533819385e+00 -7.2366597188125397e+00 + -8.5014563404344159e+00 -3.7091419892784518e+00 -7.3900150248297685e+00 + -8.8686102524014476e+00 -4.3921949326667500e+00 -7.5092632866983582e+00 + -9.2374254340314383e+00 -4.8697689411327332e+00 -7.6179122580095573e+00 + -9.6045159057510912e+00 -5.2439870570261515e+00 -7.7132743983240406e+00 + -9.9319242427923218e+00 -5.7543174837747593e+00 -7.8329623988823673e+00 + id 14255 + loc 4.1719496250152588e-01 6.1830949783325195e-01 395 + blend 0.0000000000000000e+00 + interp 2.9077846567483728e-01:2.8646948213050488e-01:2.9590402755628842e-01:2.9077555789018056e-01:1.3277922844105503e+00:2.6070666115240781e-01:2.3440812244720388e+00:2.8945168484335365e-01:3.2186415689962189e+00 + CVs 20 + 4.3196727677824526e-01 1.6047181855872020e-01 -3.3796534516840698e-01 + 8.0797231424281324e-01 2.6583319314008647e-01 -6.3404275520172315e-01 + 1.1833632386376429e+00 3.5716397980122871e-01 -9.2223654127120613e-01 + 1.5789498986844173e+00 4.4547989851808822e-01 -1.2102321816776962e+00 + 1.9895025784427891e+00 5.2367111173267611e-01 -1.4911178904639266e+00 + 2.4053598366311291e+00 5.8791682853614691e-01 -1.7641034991485742e+00 + 2.8167574349005124e+00 6.3434297176418841e-01 -2.0309357853933356e+00 + 3.2168637516866672e+00 6.5520038573331973e-01 -2.2915394649906071e+00 + 3.6007257372254702e+00 6.4020892191911294e-01 -2.5478497483891047e+00 + 3.9616567817315715e+00 5.8038462197662111e-01 -2.8075970863934296e+00 + 4.2943584761420874e+00 4.7384236431257776e-01 -3.0750969580802447e+00 + 4.6045631924991444e+00 3.2926004421269139e-01 -3.3437224795896707e+00 + 4.9041956006261831e+00 1.5533242873446484e-01 -3.6059768534715850e+00 + 5.2017864858908744e+00 -4.5645312386729753e-02 -3.8591961320334818e+00 + 5.5000745002074787e+00 -2.7860002354609970e-01 -4.1026907069230640e+00 + 5.7966423813364187e+00 -5.5456457949004179e-01 -4.3341813566376075e+00 + 6.0826349838003306e+00 -8.8043572323323094e-01 -4.5467144571177647e+00 + 6.3456223229156157e+00 -1.2371571988604360e+00 -4.7254463644617113e+00 + 6.5747232498109582e+00 -1.5050110761891844e+00 -4.8351145006226828e+00 + id 14256 + loc 8.6757373809814453e-01 2.9573023319244385e-01 412 + blend 0.0000000000000000e+00 + interp 4.2274537313683069e-01:4.2274114568309934e-01:5.1957503277049777e-01:3.6257335035283828e-01:1.0069922189466844e+00:3.9837676004353273e-01:1.4795681724408196e+00:3.2554478238744289e-01:1.9998407705148651e+00:3.4802691405058089e-01:2.5756026940586514e+00:3.5896565067281622e-01:3.0162855680178735e+00:3.2847929273326759e-01:3.9867726638996528e+00 + CVs 20 + -7.1948847830424201e-01 2.5416940302719360e-01 1.6160856734503015e-01 + -1.2111652341775720e+00 4.1399013493255771e-01 3.1817320942017202e-01 + -1.6560858577114475e+00 5.6224873474232395e-01 4.7716422061720593e-01 + -2.1066569967199120e+00 7.2318265146961003e-01 6.3757556990698261e-01 + -2.5508778897493194e+00 8.8726885318046866e-01 7.9812869952368970e-01 + -2.9911439355011922e+00 1.0522110341534190e+00 9.6399814363296088e-01 + -3.4498148717624408e+00 1.2056375147924534e+00 1.1592942739247381e+00 + -3.9476766227204791e+00 1.3113892782273839e+00 1.4387126200341629e+00 + -4.4873031594251893e+00 1.3140447895483938e+00 1.8535338494614655e+00 + -5.0504246706291216e+00 1.1394142580706856e+00 2.4062048111782333e+00 + -5.5689994328931673e+00 7.2286545467681806e-01 3.0032953917631167e+00 + -5.9507301937610775e+00 1.0867532078348496e-01 3.4857373007162984e+00 + -6.1675902591356504e+00 -5.8910608661175212e-01 3.7977217016281810e+00 + -6.2410558350537331e+00 -1.3101557357504756e+00 4.0028177051294396e+00 + -6.2050555694096889e+00 -2.0490683348123788e+00 4.1997871816071859e+00 + -6.1035403871279721e+00 -2.8276235876786870e+00 4.4849151583986675e+00 + -5.9854255576485969e+00 -3.6613305678180081e+00 4.8903392835555746e+00 + -5.8882126769122412e+00 -4.5389520993647627e+00 5.3783869869738243e+00 + -5.7948084654882699e+00 -5.4088842681009073e+00 5.8906833784319579e+00 + id 14257 + loc 5.9174340963363647e-01 1.1592964082956314e-01 405 + blend 0.0000000000000000e+00 + interp 4.5326523025932158e-01:3.2270283535116301e-01:1.0758963208170813e-01:3.8075697796753299e-01:8.8719373942831892e-01:4.5326069760701904e-01:1.3201729819439729e+00:4.2893240832600682e-01:1.9969976586728393e+00:3.3288200129920131e-01:2.4053770866768476e+00:3.4535079980464278e-01:3.0112301265950112e+00:4.1764703008894999e-01:3.8050779508970050e+00 + CVs 20 + 1.3736614944594772e-01 6.5503659409625353e-02 -3.0615638537628543e-02 + 2.8522751194078488e-01 1.1489882123720958e-01 -6.1786872254834244e-02 + 4.3543115090119011e-01 1.5008487053372746e-01 -1.0247961642698190e-01 + 5.8173996448779497e-01 1.6973328310825972e-01 -1.5502415245602286e-01 + 7.2020712139605370e-01 1.7275002756875879e-01 -2.1879044323800106e-01 + 8.4715464755744163e-01 1.5921053872200142e-01 -2.9255292684246875e-01 + 9.6055343454054887e-01 1.2999137369509350e-01 -3.7406018837293764e-01 + 1.0607958497873726e+00 8.6542026878170586e-02 -4.6031829397580348e-01 + 1.1497697096727266e+00 3.0387040210361649e-02 -5.4861162710571854e-01 + 1.2308022640164467e+00 -3.7252113837600187e-02 -6.3742786758876080e-01 + 1.3070089795295523e+00 -1.1613668978589287e-01 -7.2590985393008034e-01 + 1.3789178532485638e+00 -2.0760111014708593e-01 -8.0990776047987434e-01 + 1.4471258722254829e+00 -3.1262577909923350e-01 -8.8282561735936615e-01 + 1.5154513817359505e+00 -4.2854814095681060e-01 -9.4542986605868307e-01 + 1.5907762831736882e+00 -5.5042438004485561e-01 -1.0202021366147562e+00 + 1.6744071265121379e+00 -6.7597376957484645e-01 -1.1439449491912428e+00 + 1.7549690521059969e+00 -8.0198483607023840e-01 -1.3295680950374009e+00 + 1.8195132903238258e+00 -9.2235597604040842e-01 -1.5580492734937867e+00 + 1.8846459932795936e+00 -1.0476311197715855e+00 -1.6156912295464567e+00 + id 14258 + loc 3.7997078895568848e-01 8.8365846872329712e-01 404 + blend 0.0000000000000000e+00 + interp 4.5820505616197693e-01:3.3930698884457050e-01:6.2136580285254972e-01:3.6056947312299409e-01:1.0583398165714228e+00:3.1579983662712174e-01:2.0177591692455383e+00:3.5504618148561345e-01:2.7024939932793473e+00:4.5820047411141535e-01:3.2569537485629265e+00:3.7442968797595960e-01:3.9542851802642671e+00 + CVs 20 + -4.0818072105165151e-02 1.6548329464615930e-02 7.0510080059998481e-02 + -8.4340840867021039e-02 5.1831577086513127e-02 1.4114929080603675e-01 + -1.2590229106185918e-01 1.0981399144130341e-01 2.1516973813349008e-01 + -1.5816848021274024e-01 1.9291909016814596e-01 2.9752126068135187e-01 + -1.7327450045797041e-01 3.0172510637613670e-01 3.8788184377624491e-01 + -1.6336514144389727e-01 4.3413012793083200e-01 4.8480282043437883e-01 + -1.2228684926545492e-01 5.8509761690117601e-01 5.8651860709203196e-01 + -4.7888985047617127e-02 7.4722180742135169e-01 6.9235929916449501e-01 + 5.8832908467458478e-02 9.1406098615129916e-01 8.0498997349843759e-01 + 2.0145165327917519e-01 1.0824978503110403e+00 9.2682220767209766e-01 + 3.8999848853736274e-01 1.2489987531919842e+00 1.0511004693033512e+00 + 6.2820692656740518e-01 1.4064399106074825e+00 1.1634285744465527e+00 + 9.0318318397877773e-01 1.5491644574358108e+00 1.2560076551423491e+00 + 1.1977486482389703e+00 1.6785269839560382e+00 1.3313920942776849e+00 + 1.5073372335109634e+00 1.7980858047327148e+00 1.3858212503342369e+00 + 1.8344820325442603e+00 1.9072912144126954e+00 1.4037003907833205e+00 + 2.1747800867025222e+00 2.0010292073819542e+00 1.3767117931606503e+00 + 2.5169539687481781e+00 2.0740157540987219e+00 1.3152767715152747e+00 + 2.7440252681267632e+00 2.2304655931458988e+00 1.3297487219052218e+00 + id 14259 + loc 2.6112499833106995e-01 7.8404533863067627e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1071289684225674e-01:3.8429985035061626e-01:4.5324043867611119e-01:3.9594569890682046e-01:1.1315600711678480e+00:5.1070778971328834e-01:2.0124965088210391e+00:4.4439342332860055e-01:2.5636183159939532e+00:3.5493219061950837e-01:3.0782458407139899e+00:2.8195617682732010e-01:3.8683154824274064e+00 + CVs 20 + 1.2721648481405418e-01 4.6677015235132369e-01 1.3985972830158594e-01 + 2.7880936347452284e-01 8.7218049454395030e-01 1.8526587972389869e-01 + 4.4411875356455321e-01 1.2504605790121850e+00 1.8733218206863267e-01 + 6.2194124159374908e-01 1.5995137390647971e+00 1.5719640488905628e-01 + 8.1109806950151264e-01 1.8978016271147695e+00 8.6757456201374872e-02 + 1.0001112291284797e+00 2.1145663903948599e+00 -3.4335559460186627e-02 + 1.1691196690318257e+00 2.2255514073277460e+00 -2.0170437517943329e-01 + 1.3002583867158468e+00 2.2306151920731327e+00 -3.8931129656749552e-01 + 1.3868120467076335e+00 2.1498269123553664e+00 -5.6556052698169890e-01 + 1.4366539257537041e+00 2.0129757362542189e+00 -7.1044356086299887e-01 + 1.4661540519842842e+00 1.8468870699761779e+00 -8.2133472215645065e-01 + 1.4910549077299102e+00 1.6671455757105793e+00 -9.0576260170933487e-01 + 1.5231891275843359e+00 1.4799308424238209e+00 -9.7074019704993464e-01 + 1.5703202649451156e+00 1.2891254613503258e+00 -1.0147463521006954e+00 + 1.6313787408528375e+00 1.1088624383669412e+00 -1.0118699046067823e+00 + 1.6949715001875347e+00 9.9491456068834516e-01 -9.1192291878571274e-01 + 1.7604170233181697e+00 1.0076199662179004e+00 -7.6013413752612169e-01 + 1.8460841526194567e+00 9.9651116777008564e-01 -6.6887157297957056e-01 + 1.9500394941963382e+00 7.8283786871454386e-01 -5.7447202201453174e-01 + id 14260 + loc 9.6076607704162598e-02 6.5847194194793701e-01 402 + blend 0.0000000000000000e+00 + interp 3.6446923162690442e-01:3.0079257762962247e-01:7.4045516702424241e-01:3.6446558693458819e-01:1.2704484449863189e+00:2.7920794116392128e-01:1.9768598150352328e+00:3.4775646542678917e-01:2.9614656065700746e+00:2.7327767911835493e-01:3.8532044813340378e+00 + CVs 20 + -3.3325685933645002e-02 3.1710471458371298e-01 -1.0594260537411647e-01 + -8.9222471443324292e-02 6.3549287981375757e-01 -2.1822595887980689e-01 + -1.3422705036579857e-01 9.6981258665394188e-01 -3.5334659421419590e-01 + -1.4979074286013777e-01 1.3143953380711344e+00 -5.2179185603119471e-01 + -1.4006350691401009e-01 1.6542307818085122e+00 -7.3096841785179101e-01 + -1.1582204842403876e-01 1.9746089317020823e+00 -9.8368052264466477e-01 + -9.0431527654972643e-02 2.2646335973352043e+00 -1.2780022615783020e+00 + -7.8034793694519378e-02 2.5149625134096225e+00 -1.6075071905483895e+00 + -9.5049565935393932e-02 2.7179557463300696e+00 -1.9644814258699255e+00 + -1.5316770509608180e-01 2.8647856395090479e+00 -2.3435893579192868e+00 + -2.4564523365940305e-01 2.9380725124018108e+00 -2.7344265402051366e+00 + -3.5302667167162771e-01 2.9155956993211642e+00 -3.1077345394452984e+00 + -4.6402509887856336e-01 2.7901655614103955e+00 -3.4165746275245263e+00 + -5.8320620931674538e-01 2.5880525028614256e+00 -3.6237734047644223e+00 + -7.2187537469363894e-01 2.3658424757362098e+00 -3.7184200953192068e+00 + -8.8313716682846011e-01 2.1827854608375681e+00 -3.7157595933943064e+00 + -1.0566419683076818e+00 2.0733832173902829e+00 -3.6477645463848587e+00 + -1.2354137499868045e+00 2.0369111479050037e+00 -3.5474264476719055e+00 + -1.6034264542444414e+00 2.0133522072854708e+00 -3.4961190152627148e+00 + id 14261 + loc 4.9525365233421326e-01 2.5602564215660095e-01 396 + blend 0.0000000000000000e+00 + interp 3.6703364564826052e-01:3.4073746513637682e-01:4.7787629596809378e-02:2.7314396729727958e-01:1.0719367179280410e+00:3.6702997531180404e-01:1.9278554513394925e+00:3.6637057543151946e-01:2.1675403342286228e+00:2.7997613543143868e-01:3.1898848248764748e+00 + CVs 20 + -3.1038800594570098e-01 2.0666571104718789e-01 -6.7747304656298379e-01 + -5.8521072648156358e-01 2.9150078090958409e-01 -1.1451284218328606e+00 + -8.6279614509590086e-01 3.3633113528931891e-01 -1.5443346698145435e+00 + -1.1567667659656908e+00 3.7252626684291995e-01 -1.9273109729467941e+00 + -1.4572958611103530e+00 3.9686318483008998e-01 -2.2887951325012628e+00 + -1.7521130584936004e+00 4.0827958194017566e-01 -2.6237016751861275e+00 + -2.0309034809120430e+00 4.0955638056598898e-01 -2.9319302795224123e+00 + -2.2869771017799394e+00 4.0494438389670573e-01 -3.2218602884711904e+00 + -2.5114657877748372e+00 3.9597834591743131e-01 -3.5071192162483031e+00 + -2.6923971063889964e+00 3.7951730445361909e-01 -3.8019857928200707e+00 + -2.8336189070227316e+00 3.4053958727975142e-01 -4.1188681008363623e+00 + -2.9603957409360242e+00 2.4893213581985085e-01 -4.4581204725674333e+00 + -3.0893383826023291e+00 7.8937462710300776e-02 -4.8059919377507887e+00 + -3.2135792274973145e+00 -1.7741857443896913e-01 -5.1480624147702123e+00 + -3.3263773247301405e+00 -5.1485920204096969e-01 -5.4722517194575975e+00 + -3.4360569967827388e+00 -9.1852105655122962e-01 -5.7634222732286373e+00 + -3.5453810595868243e+00 -1.3686523089524973e+00 -6.0033038717435865e+00 + -3.6342722907799212e+00 -1.8499984655466748e+00 -6.1740686033120511e+00 + -3.6477970895866796e+00 -2.3775601698007787e+00 -6.2220881621882285e+00 + id 14262 + loc 5.0770592689514160e-01 4.1374552249908447e-01 399 + blend 0.0000000000000000e+00 + interp 4.4614574287623132e-01:3.5047514252415163e-01:5.2445264103391720e-01:4.4614128141880260e-01:9.9843714475644796e-01:2.7843004924531889e-01:1.8320030925059405e+00:3.6520760623276893e-01:2.1550675089620737e+00:4.2381926089825711e-01:2.8607963121316260e+00:3.4799907223889592e-01:3.1893991664320533e+00:2.6779033851926010e-01:3.9777578777838993e+00 + CVs 20 + 1.0901073816262517e-01 2.6685069082887991e-01 2.1253316586221613e-01 + 2.1985335890214636e-01 5.2088742683089329e-01 4.1569064176185028e-01 + 3.1809502499990949e-01 7.5809466874506015e-01 6.2563749203308439e-01 + 4.0089583330887407e-01 9.7852089507043183e-01 8.4771213345125929e-01 + 4.7615091002983806e-01 1.1851345193426501e+00 1.0763152560932001e+00 + 5.5189329116498331e-01 1.3813016492274324e+00 1.3052405245906511e+00 + 6.3273706914292471e-01 1.5692512661552134e+00 1.5320462058407192e+00 + 7.2046720345687199e-01 1.7507582947972367e+00 1.7573899219530866e+00 + 8.1844560953165191e-01 1.9273045892845531e+00 1.9847050344768840e+00 + 9.3464438139746742e-01 2.0976690461195404e+00 2.2214582363867947e+00 + 1.0771616900352285e+00 2.2462248145588064e+00 2.4766259078135477e+00 + 1.2424331682387397e+00 2.3267792994988881e+00 2.7399161538979322e+00 + 1.4104170858595304e+00 2.2992797707421730e+00 2.9695784411594617e+00 + 1.5641214383126245e+00 2.1633017961911691e+00 3.1235200320562511e+00 + 1.7062821335940295e+00 1.9230330137375116e+00 3.1767829145442827e+00 + 1.8877122759499605e+00 1.5788285504944755e+00 3.1512756184710700e+00 + 2.2050452420748092e+00 1.1332423463383134e+00 3.1273904171079456e+00 + 2.6550700062140868e+00 6.3580423708866007e-01 3.2719006582332728e+00 + 2.7137758336598123e+00 5.0845728235748588e-01 3.5072836220786496e+00 + id 14263 + loc 3.8881683349609375e-01 3.6734366416931152e-01 378 + blend 0.0000000000000000e+00 + interp 4.9652243462659634e-01:3.0312784467641452e-01:2.0297450879497037e-01:4.1275120004587063e-01:1.0144519161608634e+00:2.9972973321299323e-01:2.0004908210084178e+00:4.2098312251938602e-01:2.5440416414232354e+00:3.0993700519389039e-01:2.9994876755449180e+00:4.9651746940225011e-01:3.7832384564552983e+00 + CVs 20 + 8.4155263855476461e-02 3.8585474197573155e-01 -2.9467242985687264e-01 + 1.4432598125839030e-01 7.4394233429351997e-01 -5.6192407229714925e-01 + 2.0569471546150875e-01 1.0891989781714990e+00 -8.4300727992352664e-01 + 2.8711082613032113e-01 1.4326408802526762e+00 -1.1515749875416581e+00 + 4.0921462667742148e-01 1.7818029560817410e+00 -1.4852100380175075e+00 + 6.0005603935795715e-01 2.1311118041497643e+00 -1.8482022844822918e+00 + 8.7947907504544498e-01 2.4466879962966002e+00 -2.2391873200752883e+00 + 1.2500609687544384e+00 2.6867367397005513e+00 -2.6431730283172530e+00 + 1.7017349541826896e+00 2.8207097357090403e+00 -3.0389605488462905e+00 + 2.2107358481098438e+00 2.8304838902774572e+00 -3.4090377841814048e+00 + 2.7398265002395985e+00 2.7080762540641947e+00 -3.7464661108793558e+00 + 3.2402834153439528e+00 2.4546899998229019e+00 -4.0416325670209767e+00 + 3.6559474098859193e+00 2.0906732464703777e+00 -4.2686593608442553e+00 + 3.9448583897215217e+00 1.6675218506206262e+00 -4.4038561583039435e+00 + 4.1202657635231912e+00 1.2335501940517082e+00 -4.4642476388636174e+00 + 4.2462937714921374e+00 7.9458400330493895e-01 -4.4989743307441117e+00 + 4.3891783675282552e+00 3.4064002221376732e-01 -4.5585491631021675e+00 + 4.5519662734550641e+00 -9.7220297705819192e-02 -4.6744523513140042e+00 + 4.6196643510880131e+00 -3.7545542855076830e-01 -4.7943393166356003e+00 + id 14264 + loc 3.1027171015739441e-01 6.7789143323898315e-01 393 + blend 0.0000000000000000e+00 + interp 4.2226282998607761e-01:3.2909397617621572e-01:1.1543109915263972e-02:3.4841966125757712e-01:9.6298398970019339e-01:4.2225860735777776e-01:1.1650776997157819e+00:3.4056045060527873e-01:1.8953770390276847e+00:3.3567446685455204e-01:2.2715716482621064e+00:3.3534054833506510e-01:2.9574532158536417e+00:3.9177620649134282e-01:3.4682538194491590e+00 + CVs 20 + -3.2619123599980188e-01 3.6129522408767806e-01 -2.0044666998188365e-01 + -6.3540258865570898e-01 7.1868588712426729e-01 -4.1502743548143750e-01 + -9.3084185653615248e-01 1.0738450522722265e+00 -6.4811655170204274e-01 + -1.2226430344518753e+00 1.4121366577174077e+00 -8.9946468191948814e-01 + -1.5215094130892193e+00 1.7144739409778684e+00 -1.1605916695140723e+00 + -1.8311051993282010e+00 1.9683573270114554e+00 -1.4172803324925594e+00 + -2.1438462759298615e+00 2.1650367685554830e+00 -1.6520714227294486e+00 + -2.4433224433318697e+00 2.2997361901689342e+00 -1.8487655992860113e+00 + -2.7188853326118330e+00 2.3811495578259660e+00 -1.9969237269417566e+00 + -2.9821003702648645e+00 2.4258564508902425e+00 -2.0903550235856114e+00 + -3.2551620383325255e+00 2.4558585199487970e+00 -2.1317087792540601e+00 + -3.5583933180901859e+00 2.5005099877305343e+00 -2.1410824608464560e+00 + -3.9142312932481560e+00 2.5709103004019020e+00 -2.1397177414440685e+00 + -4.3519013797683783e+00 2.6340362292378137e+00 -2.1341362161903854e+00 + -4.8801183062911306e+00 2.6323551234637392e+00 -2.1438936927319006e+00 + -5.4444194915571771e+00 2.5348010515712511e+00 -2.2152323015702877e+00 + -5.9657105092231069e+00 2.3730772680884304e+00 -2.3459684308635240e+00 + -6.4588668036490517e+00 2.1853301178630744e+00 -2.4501415688398023e+00 + -7.0733594254766485e+00 1.8907930213223774e+00 -2.3917784311505952e+00 + id 14265 + loc 8.7343985214829445e-03 4.9664059281349182e-01 401 + blend 0.0000000000000000e+00 + interp 3.5180714655397316e-01:3.5180362848250762e-01:5.2797177380831761e-01:3.3352960868450615e-01:1.0080240726589129e+00:2.6159423810734272e-01:2.0179981455524718e+00:1.4901853495160350e-01:2.9530824390883783e+00:2.9637425321677185e-01:3.7302662877579809e+00 + CVs 20 + -2.6816039081666015e-01 2.5255666391943249e-01 9.0928577790198917e-02 + -5.4435935443817951e-01 5.1420113036723758e-01 1.6111280382212634e-01 + -8.3692327712887737e-01 7.7745425395081436e-01 2.2736564305857973e-01 + -1.1511155530676176e+00 1.0337466455267474e+00 3.0450800161271985e-01 + -1.4886647452734445e+00 1.2730155818435582e+00 4.0808708583240944e-01 + -1.8460179674565049e+00 1.4831225957171168e+00 5.5738559486343497e-01 + -2.2118190545421887e+00 1.6494988543271516e+00 7.6810287405628652e-01 + -2.5692391754020174e+00 1.7586338058696303e+00 1.0429090589668042e+00 + -2.9010676958649806e+00 1.8023364941687858e+00 1.3681673690740537e+00 + -3.1955606674330066e+00 1.7812577948368205e+00 1.7180088221077043e+00 + -3.4479776331250105e+00 1.7063789439141703e+00 2.0693947000945729e+00 + -3.6584431128326758e+00 1.5887626371053356e+00 2.4131183888019576e+00 + -3.8276309933100658e+00 1.4333977709248082e+00 2.7553068396128193e+00 + -3.9529216230182231e+00 1.2370151553756275e+00 3.1149151100345982e+00 + -4.0209159672472499e+00 9.9746426054412196e-01 3.5065515479812377e+00 + -4.0056709085962519e+00 7.3395517679277333e-01 3.9248802908010894e+00 + -3.8841212047682481e+00 4.8140483640080456e-01 4.3541885971717953e+00 + -3.6742693742876198e+00 3.0705570963690332e-01 4.7440493096319800e+00 + -3.5229656776121341e+00 3.6423363262016384e-01 4.9280339378529927e+00 + id 14266 + loc 1.1215522140264511e-01 8.8674455881118774e-01 381 + blend 0.0000000000000000e+00 + interp 8.3447628521463457e-01:4.4046581341708824e-01:4.8890150014414291e-01:3.6896801949465735e-01:9.9967881201105679e-01:6.3493984908272227e-01:1.6919470061489303e+00:4.2789323542000318e-01:3.5551498238836712e+00:8.3446794045178241e-01:3.6199649041109483e+00:2.6114675117157565e-01:3.9872599226376138e+00 + CVs 20 + 1.1516315239696329e+00 1.2873401952740596e-01 -7.0595558416215343e-01 + 1.8688293444285655e+00 9.4121469604457969e-02 -1.1954967164454131e+00 + 2.4775903076092720e+00 1.1957784432322816e-02 -1.6198091675986068e+00 + 3.0990151785489819e+00 -7.7122091153048911e-02 -2.0339272890036462e+00 + 3.7330495033394504e+00 -1.8277450497089259e-01 -2.4373253147819969e+00 + 4.3772410931206460e+00 -3.1761606984253177e-01 -2.8277578418151541e+00 + 5.0168145105486950e+00 -4.9701058116477825e-01 -3.1959934806717527e+00 + 5.6175234886169489e+00 -7.2909761755311275e-01 -3.5227713292711704e+00 + 6.1482652773654722e+00 -1.0049742736014218e+00 -3.7933080152251595e+00 + 6.5955850053964742e+00 -1.3027927879684671e+00 -4.0086985660101115e+00 + 6.9640094997152211e+00 -1.5985217799944869e+00 -4.1832536709941284e+00 + 7.2730866099244729e+00 -1.8795464164062945e+00 -4.3371903888758769e+00 + 7.5422226641071815e+00 -2.1635774939709975e+00 -4.4831584196064522e+00 + 7.7522965701542690e+00 -2.4971203738490226e+00 -4.6102397097372760e+00 + 7.8603992758354577e+00 -2.9051673812772396e+00 -4.7112376609074129e+00 + 7.8793728132978877e+00 -3.3748771883595685e+00 -4.8044569202306384e+00 + 7.8763423140121152e+00 -3.8723714723035974e+00 -4.8902165291972617e+00 + 7.9084174779944698e+00 -4.3526677933672095e+00 -4.9867125909216137e+00 + 7.9475136803677948e+00 -4.7750434312586307e+00 -5.2866176483439498e+00 + id 14267 + loc 2.7110281586647034e-01 9.3149334192276001e-01 379 + blend 0.0000000000000000e+00 + interp 5.2317651496908191e-01:2.7638233095987563e-01:2.4999943561367921e-02:3.7244978435807469e-01:7.4651734880767651e-01:3.8179828054501003e-01:1.0044340949357398e+00:3.9343047940805925e-01:1.2123289563251611e+00:2.5574403377137123e-01:1.8964330522823021e+00:2.0690259472709857e-01:2.5759134049387260e+00:5.2317128320393225e-01:3.1633928748388573e+00 + CVs 20 + -1.7220239458724687e-01 2.0308246000531255e-01 2.4036074136974581e-01 + -3.2582690395988195e-01 3.6794957442325793e-01 4.7385981978937947e-01 + -4.6772071230092299e-01 4.7375117741228562e-01 7.3314983007489931e-01 + -5.9550682129143984e-01 5.2910740976781190e-01 1.0746468937109026e+00 + -6.8921645431779766e-01 5.8119912138223206e-01 1.4743693838174039e+00 + -7.6081234195555680e-01 6.7798407849317555e-01 1.8837128244725638e+00 + -8.5826360387710521e-01 8.5337566504313456e-01 2.2680274993264469e+00 + -9.9884035166662055e-01 1.1166839220406202e+00 2.5909147272891717e+00 + -1.1775975360278319e+00 1.4541905425284081e+00 2.8215071523438642e+00 + -1.3897475368714522e+00 1.8425880889814226e+00 2.9339045543798790e+00 + -1.6253636069485979e+00 2.2511864088922939e+00 2.9344450482943119e+00 + -1.8760305042282037e+00 2.6415730033437850e+00 2.8578751181065729e+00 + -2.1504742503995731e+00 2.9694110439049175e+00 2.7362311244517317e+00 + -2.4529008758652884e+00 3.1888048601219809e+00 2.5819859080544560e+00 + -2.7682369398878754e+00 3.2698564926021740e+00 2.3819455237663019e+00 + -3.1227206482706151e+00 3.1438250107497980e+00 2.1114895464531451e+00 + -3.5040803582038693e+00 2.6808762989163664e+00 1.8968416307957787e+00 + -3.7808791646360489e+00 2.0174149081961854e+00 1.9847565671723550e+00 + -3.9684279092680770e+00 1.5448876467817063e+00 2.1086910450164638e+00 + id 14268 + loc 4.0479654073715210e-01 1.8376165628433228e-01 395 + blend 0.0000000000000000e+00 + interp 4.9337392104434719e-01:4.9336898730513679e-01:1.9770539885241467e-02:2.9293075284192416e-01:6.0270847238460501e-01:3.7426312031203640e-01:1.0366587434158889e+00:4.4041397549328637e-01:1.6791577199112711e+00:3.1085214141788392e-01:2.1593273063087493e+00:2.7334149056071444e-01:3.0363446584104494e+00 + CVs 20 + -3.1534100033434537e-01 1.8927321595363689e-01 -3.1895743621007333e-01 + -5.7732837715326690e-01 3.4281526293457298e-01 -6.3529666831311560e-01 + -8.2696032316444623e-01 4.6974125639189090e-01 -9.5484671171055335e-01 + -1.0755689771535115e+00 5.6898427066757518e-01 -1.2796502286191698e+00 + -1.3194982584138937e+00 6.3358472681504352e-01 -1.6068610705737298e+00 + -1.5580836220252257e+00 6.5850386118797855e-01 -1.9319082565545225e+00 + -1.7902160343400504e+00 6.3957080580828962e-01 -2.2483176180251050e+00 + -2.0084138330797838e+00 5.7119647844915500e-01 -2.5464483265862370e+00 + -2.2021808907026177e+00 4.4897652036723645e-01 -2.8146745606250692e+00 + -2.3659668922131125e+00 2.7375191606076665e-01 -3.0418215521877214e+00 + -2.4978456201459034e+00 5.3457309987837265e-02 -3.2194533906875806e+00 + -2.5958087956494231e+00 -1.9754596722705076e-01 -3.3481619078407494e+00 + -2.6599470954787305e+00 -4.6518990654610426e-01 -3.4394544089879098e+00 + -2.6928916832491137e+00 -7.3982968827679096e-01 -3.5062891749291087e+00 + -2.6973599000920396e+00 -1.0135311571682093e+00 -3.5572818125415404e+00 + -2.6692041892205287e+00 -1.2717260214134229e+00 -3.5939583594310114e+00 + -2.6010431582898033e+00 -1.4918416969589465e+00 -3.6152250381516109e+00 + -2.5035429681457435e+00 -1.6701380029737367e+00 -3.6286083973038403e+00 + -2.4840623767922465e+00 -1.9923985631605929e+00 -3.6938688312300396e+00 + id 14269 + loc 6.2024158239364624e-01 6.0344249010086060e-01 405 + blend 0.0000000000000000e+00 + interp 3.8298339645424362e-01:3.2213447421130714e-01:3.7480797910349417e-01:3.8297956662027910e-01:1.0288067311258886e+00:2.9492843659711671e-01:1.8603716425196262e+00:3.7746321811261191e-01:2.2383287550077000e+00:3.6306689641907558e-01:2.9666461285769739e+00:3.1933695214969721e-01:3.6455156577377417e+00 + CVs 20 + 1.0771696903674950e-01 2.6337681149326508e-01 -6.8903820337962080e-02 + 1.0965077305513748e-01 4.6362267761490428e-01 -1.3494025631124937e-01 + 8.8955811882954372e-02 6.3561392401177597e-01 -1.8827217366012558e-01 + 6.5807284148478751e-02 8.1300316676484008e-01 -2.2071098610233364e-01 + 3.5631808950387589e-02 9.9659052432788964e-01 -2.1633740804634019e-01 + -3.9609035848394702e-03 1.1798352742076736e+00 -1.5417045138298058e-01 + -4.8212579001440270e-02 1.3408584346987160e+00 -1.8287894727294481e-02 + -8.2663613819431547e-02 1.4503524902066953e+00 1.8073803022565149e-01 + -9.3450868334873705e-02 1.4987054276119829e+00 4.0850958496858392e-01 + -7.6015905759815428e-02 1.4978662148100981e+00 6.3913430213381006e-01 + -3.0714456363566733e-02 1.4585059323394405e+00 8.6632247488327563e-01 + 4.1639193333678715e-02 1.3808780333435495e+00 1.0913405238469538e+00 + 1.4282853323676031e-01 1.2643647866260215e+00 1.3107179363020853e+00 + 2.8000433489261572e-01 1.1257541167697118e+00 1.5133239043426729e+00 + 4.6351301989137456e-01 9.9723836744770233e-01 1.6917707852625294e+00 + 6.9932938648655152e-01 8.9967301462008031e-01 1.8460713912052638e+00 + 9.8445855119216008e-01 8.3295182293346881e-01 1.9762047911021314e+00 + 1.3059743726838089e+00 7.8944203149037318e-01 2.0859028288340578e+00 + 1.5994341269043457e+00 6.4438923532469738e-01 2.2874002820818458e+00 + id 14270 + loc 3.0855217576026917e-01 6.1939376592636108e-01 402 + blend 0.0000000000000000e+00 + interp 4.9646289679265138e-01:3.0959431844054813e-01:2.7673093065068766e-01:3.1541799321630326e-01:1.3026285213911455e+00:3.0463913984071433e-01:2.1891526036933415e+00:2.9465353107538589e-01:3.0263425661579015e+00:4.9645793216368345e-01:3.7938700933527980e+00 + CVs 20 + -7.4003271627539335e-02 3.3536065920999164e-01 -1.3040912311983807e-01 + -1.7260541318719522e-01 6.6851118470459536e-01 -2.6156386119913477e-01 + -2.5878363641045243e-01 1.0209881964614553e+00 -4.2530042163645781e-01 + -3.1043366286358798e-01 1.3855342554279060e+00 -6.3450778912258055e-01 + -3.3018574503001841e-01 1.7476646600727781e+00 -8.9156601237703914e-01 + -3.2068583943294915e-01 2.0921819980907195e+00 -1.1976577356399654e+00 + -2.7984631512006242e-01 2.4036454169573576e+00 -1.5534667381223914e+00 + -2.0766485724807660e-01 2.6663808382606353e+00 -1.9578645526748921e+00 + -1.1014143847922864e-01 2.8624087307185926e+00 -2.4094182072481312e+00 + 9.3727871895666892e-03 2.9689758981110987e+00 -2.8963945684460164e+00 + 1.5569290843216621e-01 2.9638589826347101e+00 -3.3884621582835655e+00 + 3.2917648247584053e-01 2.8347415578981261e+00 -3.8488971445095794e+00 + 5.1566001905047165e-01 2.5809243061608598e+00 -4.2510837408637823e+00 + 6.8596705771750155e-01 2.2043530752495140e+00 -4.5961649117323553e+00 + 7.8399841591913610e-01 1.6971412201727107e+00 -4.9134316658365442e+00 + 7.0546444500363881e-01 1.0575314009634498e+00 -5.2403198536774775e+00 + 2.9181233936114059e-01 3.5127005532353506e-01 -5.6103701428401420e+00 + -4.5823075891817855e-01 -1.8662457406547972e-01 -5.9645132027777628e+00 + -7.5288055175661084e-01 -4.4632572212672783e-01 -6.0509530584191875e+00 + id 14271 + loc 8.3322727680206299e-01 5.1724332571029663e-01 400 + blend 0.0000000000000000e+00 + interp 4.3549525375544074e-01:4.3549089880290320e-01:2.9826461206882260e-02:3.5875707435112164e-01:5.7468524126806830e-01:2.7815538692829128e-01:1.3143928099523687e+00:2.8794783694602616e-01:2.0042840268553843e+00:3.1896757753804250e-01:2.6551175073267785e+00:2.7959360548482931e-01:3.6643268620187861e+00 + CVs 20 + -1.3521256472437262e-01 1.9380217354493642e-01 -4.0494961963248222e-01 + -2.4299445656837659e-01 3.8476973358475647e-01 -8.1127995427893818e-01 + -3.2691912839310289e-01 5.6971446978094975e-01 -1.2248362849985481e+00 + -4.0003908750051786e-01 7.4417907630386149e-01 -1.6478992777743255e+00 + -4.6632438558954820e-01 9.0546094776975539e-01 -2.0758518822942529e+00 + -5.1834715974090284e-01 1.0555418896650932e+00 -2.5026421465216098e+00 + -5.4715660306181624e-01 1.1871577126989414e+00 -2.9256502309316748e+00 + -5.4963395280746641e-01 1.2778946847216992e+00 -3.3468894062728811e+00 + -5.2871462321580853e-01 1.3085449615021836e+00 -3.7657751513393807e+00 + -4.9026972011061137e-01 1.2748062875220854e+00 -4.1738888970043053e+00 + -4.4270455541253845e-01 1.1763752287793308e+00 -4.5591086111394592e+00 + -3.9478839271443589e-01 1.0100440391258829e+00 -4.9068653323196711e+00 + -3.4647147417337787e-01 7.8081665616851748e-01 -5.1952937239795833e+00 + -2.8890953995305685e-01 5.1166630646823563e-01 -5.4016214472610571e+00 + -2.2018480299230148e-01 2.3131875989263673e-01 -5.5168092160101070e+00 + -1.5525133896378979e-01 -4.2481224528665429e-02 -5.5487960488552792e+00 + -1.1661813247947930e-01 -2.9946586350754600e-01 -5.5224103120596082e+00 + -1.1538706070235370e-01 -5.2656236352491304e-01 -5.4910001441725731e+00 + -1.5262378283381375e-01 -6.9393278470971165e-01 -5.6540790780254184e+00 + id 14272 + loc 5.9557205438613892e-01 9.5080935955047607e-01 412 + blend 0.0000000000000000e+00 + interp 5.0363992705444560e-01:4.8312575278795672e-01:6.9094150389507947e-02:3.3503376529203877e-01:9.3505155102309334e-01:5.0363489065517508e-01:1.3841306679491745e+00:4.3324679739586086e-01:1.8720693678039351e+00:3.7708448095719949e-01:2.0895281151190788e+00:3.5023599771970382e-01:2.8950713170526026e+00:3.5937655801817719e-01:3.5045879110489428e+00 + CVs 20 + 8.1752119410835100e-01 2.1302617100613572e-01 -1.2906713859984242e-01 + 1.3276022726682108e+00 2.8831230495584770e-01 -2.5966426665961972e-01 + 1.7460024173028483e+00 2.9676621859101265e-01 -3.9940341728251655e-01 + 2.1798757906149500e+00 2.7162597745148809e-01 -5.5055431621916173e-01 + 2.6190762931088223e+00 2.0071653962035335e-01 -7.0945622736591041e-01 + 3.0538499626453612e+00 7.6879535906965280e-02 -8.6959784575814481e-01 + 3.4764122172238268e+00 -9.9262631750846264e-02 -1.0194061353738342e+00 + 3.8791873267979629e+00 -3.1979878633398562e-01 -1.1439401952414490e+00 + 4.2545199303057704e+00 -5.7281833225188339e-01 -1.2322660271540689e+00 + 4.5958303376376781e+00 -8.4321850040609725e-01 -1.2775819443375402e+00 + 4.8909931532095339e+00 -1.1074607941737353e+00 -1.2733921068021052e+00 + 5.1229091354516862e+00 -1.3366208754851665e+00 -1.2149572697059590e+00 + 5.3031536414451086e+00 -1.5298587655311366e+00 -1.1069805522833915e+00 + 5.4775219225718441e+00 -1.7315686955062939e+00 -9.6821538046179245e-01 + 5.6779307355643471e+00 -1.9798478462017697e+00 -8.1775813809830722e-01 + 5.9105152925240976e+00 -2.2804779828394954e+00 -6.6467716511413921e-01 + 6.1714988035164158e+00 -2.6356331646278104e+00 -5.2369684940377903e-01 + 6.4477373627267838e+00 -3.0449884250718329e+00 -4.1967639603978357e-01 + 6.7062008426694506e+00 -3.4874010972736098e+00 -3.7677974426993904e-01 + id 14273 + loc 5.4636424779891968e-01 9.8053731024265289e-02 1069 + blend 0.0000000000000000e+00 + interp 3.5428328014900823e-01:3.5427973731620677e-01:5.0241829896550150e-01:2.6571985571102913e-01:1.2098500340362028e+00:3.4069742918668494e-01:2.3030891892912471e+00:2.7780465003231170e-01:3.0113321667052446e+00:2.9838713046052184e-01:3.9686893680395015e+00 + CVs 20 + 3.2512788484865163e-02 3.0275770109718325e-01 1.8915213027650596e-01 + 1.3812553016932738e-02 5.9521384547134926e-01 3.8446865568422783e-01 + -4.5275253858185593e-02 8.7710094988333775e-01 5.6607391032307808e-01 + -1.5802568977818476e-01 1.1393515706419879e+00 7.2429965546688446e-01 + -3.1492904627700224e-01 1.3815612154214909e+00 8.5472783460345192e-01 + -4.5871047375464868e-01 1.6363238152569064e+00 9.6202528879430171e-01 + -5.2303236127782848e-01 1.9269257625930072e+00 1.0548781284908779e+00 + -4.8677859539397805e-01 2.2376961306104901e+00 1.1524824077708622e+00 + -3.5629131736142550e-01 2.5373324094809497e+00 1.2895570786815060e+00 + -1.3259223798339592e-01 2.7530629340212855e+00 1.5042088272406615e+00 + 1.4464263655977239e-01 2.7641518385360917e+00 1.7931161538070644e+00 + 3.7571834952978356e-01 2.5347883377140188e+00 2.0692638148674409e+00 + 5.0082600537293853e-01 2.1623111803737265e+00 2.2693102485756311e+00 + 5.0880647768085918e-01 1.7392809306346035e+00 2.4092239500258170e+00 + 4.0660569871384311e-01 1.3126817735791270e+00 2.5164401784205706e+00 + 1.9127839543046965e-01 8.9405410347395975e-01 2.5564968118157561e+00 + -1.4872118994784467e-01 5.2380477686573390e-01 2.4506322629743011e+00 + -5.5800067368087880e-01 2.7055282096981687e-01 2.2246865291091877e+00 + -7.5339219613543362e-01 -1.1917370163134483e-01 2.2234007176007666e+00 + id 14274 + loc 1.7894548177719116e-01 3.5507187247276306e-01 404 + blend 0.0000000000000000e+00 + interp 4.7901188959284408e-01:3.9294821131880658e-01:3.4209202299017738e-01:2.9966502860273525e-01:9.9117858146523041e-01:4.1989700702966071e-01:1.4407941574266887e+00:3.3113607036152515e-01:2.0490645225376758e+00:4.7900709947394815e-01:2.9993195475719370e+00:3.7880283382446639e-01:3.7994499285392016e+00 + CVs 20 + -9.7101244153417782e-02 1.6940774947070167e-01 -1.4079922544271198e-01 + -1.8145284228731384e-01 3.4243692570798423e-01 -2.8038794446675858e-01 + -2.7441008781524789e-01 5.1991869100940935e-01 -4.1747965354999944e-01 + -3.8484403552577373e-01 7.0412953170400316e-01 -5.4874448066106618e-01 + -5.2068726147986344e-01 8.9641977343327861e-01 -6.6691296631029962e-01 + -6.8999841956732211e-01 1.0957537287158512e+00 -7.6258191076434834e-01 + -8.9935127389813907e-01 1.2975053731671586e+00 -8.2523581792429046e-01 + -1.1520514748069333e+00 1.4939060593259272e+00 -8.4344017078090805e-01 + -1.4448254287021891e+00 1.6745762613474766e+00 -8.0701180208475587e-01 + -1.7660737842174210e+00 1.8285134959220215e+00 -7.1148247251979679e-01 + -2.0986078003273994e+00 1.9475479793854742e+00 -5.6200634161136287e-01 + -2.4270368969736480e+00 2.0285649361562386e+00 -3.7060044705514361e-01 + -2.7430016786014932e+00 2.0716344352397429e+00 -1.4618105904108880e-01 + -3.0406530512243419e+00 2.0782496740549092e+00 1.0762668489458216e-01 + -3.3125709083960384e+00 2.0527620074490152e+00 3.8862022309771938e-01 + -3.5494335722981449e+00 2.0035454571579279e+00 6.9663682680097572e-01 + -3.7404494909187154e+00 1.9401648397053433e+00 1.0369703804991897e+00 + -3.8722507245746476e+00 1.8647514434853503e+00 1.4239067148423952e+00 + -4.0663326800782444e+00 1.8187338485847171e+00 1.5023073538012297e+00 + id 14275 + loc 1.7945030331611633e-01 3.5446795821189880e-01 396 + blend 0.0000000000000000e+00 + interp 4.0396988969272163e-01:3.3821726598733814e-01:4.1384136941214167e-01:3.1819321247601634e-01:1.0915893478861252e+00:3.0787333815462803e-01:1.9979869617441415e+00:4.0396584999382473e-01:2.6250743047633902e+00:2.7789381033630722e-01:3.0157806923522528e+00:2.9127380444606382e-01:3.8565738857316827e+00 + CVs 20 + -2.5587985050892592e-01 2.1489015416018126e-01 -6.7481929822039743e-01 + -4.7603967413166537e-01 2.8252507627597789e-01 -1.1519128598909292e+00 + -6.8695854612086105e-01 2.9495933473843383e-01 -1.5770324117424777e+00 + -8.9437678563727441e-01 2.9245033676723248e-01 -2.0056115866363151e+00 + -1.0904628841414739e+00 2.7839892678487221e-01 -2.4360549978763451e+00 + -1.2696924636738851e+00 2.5714668989666434e-01 -2.8675864780334486e+00 + -1.4309772362693269e+00 2.3306535957266317e-01 -3.3008886541195595e+00 + -1.5755326794177504e+00 2.0567236287578883e-01 -3.7396045930541497e+00 + -1.7027022323723739e+00 1.6486322988053503e-01 -4.1893793238541788e+00 + -1.8159381213872621e+00 9.8493282933852733e-02 -4.6546648181801276e+00 + -1.9330274798556455e+00 -6.8907088738738853e-03 -5.1364178903304074e+00 + -2.0760788828283405e+00 -1.6944309712425420e-01 -5.6269643720851370e+00 + -2.2480935549642762e+00 -3.9858474606810157e-01 -6.1176664378927104e+00 + -2.4368276574203986e+00 -6.9475222718127627e-01 -6.6020359257329266e+00 + -2.6310059900464950e+00 -1.0549895387920025e+00 -7.0712834073042750e+00 + -2.8259997504639318e+00 -1.4761931045526504e+00 -7.5114496944129154e+00 + -3.0143604730908353e+00 -1.9517415425653222e+00 -7.9042374735380756e+00 + -3.1786225333999560e+00 -2.4541585176193981e+00 -8.2321395506034829e+00 + -3.2722555562394184e+00 -2.8133014280536828e+00 -8.4749326438319610e+00 + id 14276 + loc 5.6483244895935059e-01 3.5291835665702820e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4974431569512685e-01:3.7963285957631782e-01:4.2426709788246530e-01:3.9805799827390226e-01:9.6190655809705838e-01:2.9934236668885661e-01:1.8327850014601581e+00:4.4973981825196990e-01:2.2193587577263671e+00:3.2670839684985253e-01:3.0103188555269793e+00:3.6713754375789609e-01:3.9386738054525465e+00 + CVs 20 + 5.7739096478266846e-02 4.0380917393774352e-01 -6.2330490092783158e-02 + 4.6110359292347497e-02 7.4643067970592036e-01 -7.9165633800147961e-02 + 5.9792373899819617e-04 1.0521931414223962e+00 -7.1365041535341123e-02 + -6.5700732978536902e-02 1.3287710861027073e+00 -4.8945410487815533e-02 + -1.5342877101553187e-01 1.5741845368148750e+00 -1.5307330267638086e-02 + -2.6058938902785139e-01 1.7894205589095717e+00 2.4863318673122969e-02 + -3.8694245935715171e-01 1.9785534958182365e+00 7.4571793363415018e-02 + -5.3568694770262903e-01 2.1432427337144349e+00 1.4605685735888718e-01 + -7.0818527496749062e-01 2.2775605040037257e+00 2.5120138973392758e-01 + -9.0077007296594136e-01 2.3682304085573405e+00 3.9546980374520879e-01 + -1.1047564656518487e+00 2.4008390745201962e+00 5.7482089287464710e-01 + -1.3089476293275832e+00 2.3671489654280062e+00 7.7673418070619904e-01 + -1.5028233640664914e+00 2.2677808357994227e+00 9.8451799378026172e-01 + -1.6788304697961065e+00 2.1139590855124188e+00 1.1814287476988743e+00 + -1.8366080818035821e+00 1.9328026530627320e+00 1.3584150122509389e+00 + -1.9827628258859571e+00 1.7769219796599347e+00 1.5207767225759397e+00 + -2.1189951008895735e+00 1.6737337514797421e+00 1.6751581660919475e+00 + -2.2279784530930700e+00 1.5114869031301159e+00 1.7181769223820247e+00 + -2.2882942739806240e+00 1.1237627555410148e+00 1.4348124747001822e+00 + id 14277 + loc 5.0469809770584106e-01 7.3097193241119385e-01 399 + blend 0.0000000000000000e+00 + interp 4.4734043310146338e-01:3.4107546894380292e-01:6.1677697775471618e-01:4.2718730709772712e-01:1.1783236847144432e+00:4.4733595969713236e-01:1.9603568166809895e+00:3.4159855987416088e-01:2.4224165712988439e+00:4.1247029768207710e-01:3.0174131240694839e+00:3.6422110276208414e-01:3.8038833927901106e+00 + CVs 20 + -2.4206953038779727e-01 2.9077163100644327e-01 -1.5671373496344476e-01 + -4.7135783807810783e-01 5.8256422397603369e-01 -3.4014903234650506e-01 + -7.0858056272773295e-01 8.6611905742194761e-01 -5.4535082311786842e-01 + -9.6883745592296511e-01 1.1314462866797761e+00 -7.6979892668420513e-01 + -1.2607784122990742e+00 1.3636873996700272e+00 -1.0128186884223196e+00 + -1.5918766453385773e+00 1.5411902349561275e+00 -1.2713215109095095e+00 + -1.9650559212002567e+00 1.6406596757377818e+00 -1.5389982273237697e+00 + -2.3779073541453526e+00 1.6500894766094776e+00 -1.8044275641320724e+00 + -2.8252838539186698e+00 1.5670487288058661e+00 -2.0582990596247694e+00 + -3.2899632134447261e+00 1.3726392783069441e+00 -2.2988821912261037e+00 + -3.7350273472852482e+00 1.0502331107384228e+00 -2.5156730991797831e+00 + -4.1505928877848310e+00 6.4930000580744995e-01 -2.6895797582111571e+00 + -4.5752196921799637e+00 2.4472417274284086e-01 -2.8146630581147161e+00 + -5.0184591954767264e+00 -1.5436869869247496e-01 -2.8878146947612024e+00 + -5.4520237919043462e+00 -5.7387660705966881e-01 -2.9122368489348629e+00 + -5.9088192001570485e+00 -9.2881544375880365e-01 -2.9162935879721648e+00 + -6.4968372049102552e+00 -9.4529611039682293e-01 -2.9449002251171010e+00 + -7.0864234147175260e+00 -4.9315755497194425e-01 -3.0055600722191307e+00 + -7.6298046335477903e+00 -6.0001130725911445e-01 -3.1745711755125963e+00 + id 14278 + loc 4.3872077018022537e-02 6.8724775314331055e-01 381 + blend 0.0000000000000000e+00 + interp 4.4565587422340636e-01:4.4565141766466415e-01:6.3105978549818920e-03:2.8623197880517215e-01:9.2155405795976586e-01:2.3824661876308231e-01:1.5254219537673477e+00:2.8259220070439794e-01:2.3799836046986269e+00:3.0753433272491182e-01:3.1538726184284185e+00 + CVs 20 + 1.0506626516392945e+00 1.6603786127498776e-01 -6.2892429927986004e-01 + 1.7492788822939418e+00 1.6101066250433776e-01 -1.0676017917953762e+00 + 2.3584105925160381e+00 1.0749069199288658e-01 -1.4504149200944996e+00 + 2.9881786487026809e+00 6.4027378321606931e-02 -1.8335892166027530e+00 + 3.6314535649746031e+00 4.1469259124865654e-02 -2.2202716901720394e+00 + 4.2841069920911705e+00 3.6564320527531335e-02 -2.6194014442100642e+00 + 4.9458064216588156e+00 2.4693906895796092e-02 -3.0410677819047121e+00 + 5.6176119293373503e+00 -3.8393184856917784e-02 -3.4852642403569698e+00 + 6.2927207712488915e+00 -2.0470123282238162e-01 -3.9350136010227752e+00 + 6.9458541292530835e+00 -5.1577561171888431e-01 -4.3600591275606257e+00 + 7.5349285560493531e+00 -9.8909815017550273e-01 -4.7270070425405848e+00 + 8.0133674422320311e+00 -1.6122841234308760e+00 -5.0084883802002258e+00 + 8.3449673398841195e+00 -2.3355781869554404e+00 -5.1941055439447137e+00 + 8.5243345688284435e+00 -3.0806459605840528e+00 -5.2958586321211989e+00 + 8.5738292673295575e+00 -3.7890728548218728e+00 -5.3101021918642024e+00 + 8.5410329418353061e+00 -4.4450710854566715e+00 -5.2543241002463592e+00 + 8.4694830481571302e+00 -5.0693698307424953e+00 -5.1714551303270992e+00 + 8.3833765759267322e+00 -5.6993843757584957e+00 -5.1207885346992681e+00 + 8.2839756706326035e+00 -6.3002791353501255e+00 -5.1095449359442799e+00 + id 14279 + loc 4.7629299759864807e-01 3.6547169089317322e-01 405 + blend 0.0000000000000000e+00 + interp 3.3224153222347758e-01:3.2909500445612755e-01:4.0465917178744704e-04:2.9518372633450285e-01:6.3774270271325972e-01:3.1998081623723135e-01:1.0849059478716585e+00:3.0997550759250886e-01:2.0003792797234010e+00:3.3139410716068546e-01:2.7481935990959760e+00:3.3223820980815538e-01:3.1568095391166646e+00 + CVs 20 + 8.5891262038419916e-02 2.4716130120688359e-01 -3.7508962211328670e-02 + 1.7917534532884963e-01 4.6534671031933100e-01 1.2490443738485985e-02 + 2.9782341877049595e-01 6.4904755238249789e-01 5.7240699969431652e-02 + 4.4803794154924920e-01 8.0701606013709093e-01 1.0025890285925410e-01 + 6.3078912846323842e-01 9.2815877072466080e-01 1.3606503817674226e-01 + 8.4029581751712323e-01 1.0057593471396806e+00 1.5430746698820053e-01 + 1.0647475388767131e+00 1.0434514865601248e+00 1.4676405599744680e-01 + 1.2927931911486910e+00 1.0530150913411174e+00 1.1152634942367801e-01 + 1.5182086578038450e+00 1.0477737764570942e+00 5.2473632155303651e-02 + 1.7404009422036086e+00 1.0380094529759774e+00 -2.3028876433430101e-02 + 1.9630161471703969e+00 1.0270925300513440e+00 -1.0548410068001318e-01 + 2.1914251648223391e+00 1.0110607047150324e+00 -1.8376310600525986e-01 + 2.4242130952632421e+00 9.9195291891015414e-01 -2.5347132225313290e-01 + 2.6422836826659721e+00 1.0025583641092433e+00 -3.2471018675961533e-01 + 2.8159609705376050e+00 1.0917808679274807e+00 -4.0858697759125046e-01 + 2.9242675417318233e+00 1.2639632006090258e+00 -4.9782502455628030e-01 + 2.9710367080799172e+00 1.4745408248210938e+00 -5.7266941614796463e-01 + 2.9852890932781504e+00 1.6781892934151061e+00 -6.1541045543402784e-01 + 3.1902619034178143e+00 1.7472974556506939e+00 -5.6231847969692295e-01 + id 14280 + loc 2.9058933258056641e-01 6.9742429256439209e-01 401 + blend 0.0000000000000000e+00 + interp 4.0217022302262151e-01:3.1828888641908748e-01:2.7305709740083806e-01:3.6501441884533514e-01:9.9737911425561943e-01:3.4970477964164215e-01:1.7952465279694545e+00:4.0216620132039133e-01:2.3187445053938758e+00:2.7249823661604200e-01:3.0380957639683110e+00:3.5171891353018853e-01:3.8220380870106054e+00 + CVs 20 + -4.9983622691355561e-02 2.9800760028314460e-01 -2.6849503371079908e-01 + -8.1161383617353922e-02 5.9549339009193702e-01 -5.5104882395834487e-01 + -1.0958919321995880e-01 8.7942853383303687e-01 -8.3420459223914223e-01 + -1.3953393231554878e-01 1.1333598533761942e+00 -1.1135915192967323e+00 + -1.7400076148124427e-01 1.3542860395437901e+00 -1.3976860906970452e+00 + -2.2621144891607198e-01 1.5500170695970981e+00 -1.6986098285581164e+00 + -3.1965280828462284e-01 1.7257005370012841e+00 -2.0178683328818519e+00 + -4.7697948116128519e-01 1.8784508792664147e+00 -2.3422989493344892e+00 + -7.1212091442489767e-01 1.9980132662480479e+00 -2.6507409318410140e+00 + -1.0278028146363678e+00 2.0717946169362369e+00 -2.9176210602903985e+00 + -1.4134732722327292e+00 2.0950218467979091e+00 -3.1199349353049901e+00 + -1.8525611906177371e+00 2.0686219918014368e+00 -3.2479894848627091e+00 + -2.3360167051017102e+00 1.9841138040701742e+00 -3.3171884573380042e+00 + -2.8590007729442459e+00 1.8206737443199028e+00 -3.3535070374179425e+00 + -3.4085948616215687e+00 1.5712757204203096e+00 -3.3599735873878900e+00 + -3.9756264577286737e+00 1.2573277474848297e+00 -3.3533773616620026e+00 + -4.5580375503467616e+00 9.2240402540725508e-01 -3.4405151161431999e+00 + -5.1284842058417537e+00 6.3063922745994783e-01 -3.7217506813018488e+00 + -5.6956183938827145e+00 3.4884714675415518e-01 -3.9972330110817675e+00 + id 14281 + loc 7.5404930114746094e-01 9.8203057050704956e-01 402 + blend 0.0000000000000000e+00 + interp 3.7109179504215450e-01:2.8385939547913330e-01:2.6456745714613661e-01:3.7108808412420408e-01:9.9900836758491462e-01:1.6906605151963758e-01:1.8767190206109796e+00:3.2300003263784649e-01:2.9737456282519332e+00:3.1150310334391895e-01:3.4292662845082384e+00 + CVs 20 + -4.0335933798980261e-02 1.0263102252230355e-01 -1.3300314967624260e-01 + -7.6431949734271962e-02 2.1410176086662344e-01 -2.7149965347009686e-01 + -1.1172604092978644e-01 3.2751399668867820e-01 -4.0272923175444275e-01 + -1.5012817103976347e-01 4.3975257813423801e-01 -5.2015699897250012e-01 + -1.9539845540102080e-01 5.5163108715596054e-01 -6.2371975256433476e-01 + -2.5016822503385516e-01 6.6451271172141890e-01 -7.1529364337960710e-01 + -3.1428447608010901e-01 7.8258250263360540e-01 -8.0055013355814686e-01 + -3.8312914928940084e-01 9.1445697543339022e-01 -8.8932964259977099e-01 + -4.4316203001176624e-01 1.0713823537686509e+00 -9.9309164423913399e-01 + -4.7099711428438740e-01 1.2574118339828995e+00 -1.1153740459888595e+00 + -4.4917791066319379e-01 1.4621480284796802e+00 -1.2413245279870795e+00 + -3.8568464314643691e-01 1.6681598872672865e+00 -1.3433474302779849e+00 + -3.0682253172327822e-01 1.8644441227318211e+00 -1.4096819797195801e+00 + -2.3084161734264530e-01 2.0491772914993489e+00 -1.4590542544565164e+00 + -1.6716697571400085e-01 2.2240147571648867e+00 -1.5352910722072532e+00 + -1.2892870315554583e-01 2.3832708697155596e+00 -1.6570699862896123e+00 + -1.2489163577735840e-01 2.5181542244025588e+00 -1.7991902720377773e+00 + -1.5784861032281117e-01 2.6260236843303693e+00 -1.9307059590892051e+00 + -2.7995288614075431e-01 2.6824226147243428e+00 -2.1173096582291238e+00 + id 14282 + loc 2.6816862821578979e-01 7.0239984989166260e-01 412 + blend 0.0000000000000000e+00 + interp 3.6707805237846775e-01:3.3265855661200350e-01:5.5058290707187707e-02:2.4779586512956009e-01:9.0736124614781422e-01:3.6707438159794398e-01:1.3990007884048175e+00:3.3868973767336663e-01:2.0025583014731301e+00:3.1534376669707670e-01:2.9229573610466377e+00:3.5382539524576750e-01:3.5070451963349458e+00 + CVs 20 + 7.0590642234083967e-01 2.0026041957806040e-01 -1.1730754120517974e-01 + 1.1758337558023919e+00 2.6341112391184962e-01 -2.3022738359057149e-01 + 1.5869863694173159e+00 2.6866479905385598e-01 -3.3288795681072669e-01 + 2.0235118608409675e+00 2.5303461056086418e-01 -4.1785414608363480e-01 + 2.4730547483627277e+00 2.1302926362071783e-01 -4.7722117435131378e-01 + 2.9206810454041410e+00 1.4841795981599915e-01 -5.0345115083459890e-01 + 3.3519716808087954e+00 6.2351637753048528e-02 -4.9118045637481433e-01 + 3.7551902839546081e+00 -4.0707471155356889e-02 -4.4020577726956572e-01 + 4.1222280938992428e+00 -1.5658026406901104e-01 -3.5533731259378470e-01 + 4.4499489073961342e+00 -2.8195658072804441e-01 -2.4285764093611567e-01 + 4.7419106725265028e+00 -4.1239703607754685e-01 -1.0692610484036735e-01 + 5.0159012075023961e+00 -5.4846921993056874e-01 5.1915291993793189e-02 + 5.2945131362852189e+00 -7.0630982856315794e-01 2.2619571517142928e-01 + 5.5788103128576267e+00 -9.0235199192356963e-01 3.9103378239122955e-01 + 5.8573181406959733e+00 -1.1341795508306107e+00 5.2839332817014928e-01 + 6.1293136856425452e+00 -1.3957104148044903e+00 6.3960907454141569e-01 + 6.3971900891074105e+00 -1.6891157393316063e+00 7.2503164002252785e-01 + 6.6507821624106098e+00 -2.0089317449978359e+00 7.7566338057179873e-01 + 6.7944034800623774e+00 -2.2594487138913140e+00 7.7170376508909500e-01 + id 14283 + loc 8.0501623451709747e-02 4.4582301378250122e-01 379 + blend 0.0000000000000000e+00 + interp 3.1658211490720356e-01:2.4365847427563164e-01:3.9148185543008496e-01:2.6609350354138595e-01:1.0042796743263112e+00:3.1657894908605450e-01:1.9969783665114780e+00:2.1799112132870677e-01:3.0765676979283683e+00 + CVs 20 + 1.1478388636280529e-01 3.2186606759189262e-01 3.1361599484657326e-01 + 2.8987524136765130e-01 6.4266527388236039e-01 6.1707033105359921e-01 + 5.7065093099796582e-01 8.9110470310108636e-01 9.0952044958665323e-01 + 9.2692412598175622e-01 1.0337046921937179e+00 1.1688131669546582e+00 + 1.2858284671045210e+00 1.1251676218650730e+00 1.3679846572477261e+00 + 1.5979891397627670e+00 1.2184486062359716e+00 1.5069793232379662e+00 + 1.8640460037329938e+00 1.3343804290400922e+00 1.6192042397182740e+00 + 2.0965682427509886e+00 1.4829202485173709e+00 1.7428300655886289e+00 + 2.2907920124714094e+00 1.6721431336038926e+00 1.8954350241602786e+00 + 2.4437607106998076e+00 1.9038637370713629e+00 2.0869853341505280e+00 + 2.5686117454000721e+00 2.1541138932382751e+00 2.3178034847049598e+00 + 2.6887295293852587e+00 2.3817378440449524e+00 2.5715725159413965e+00 + 2.8233902419497188e+00 2.5596216653142858e+00 2.8435466107053053e+00 + 2.9765594205983685e+00 2.6703541689398453e+00 3.1552546668633719e+00 + 3.1282476249120128e+00 2.6939355678028076e+00 3.5310537589854576e+00 + 3.2208990205662387e+00 2.6004507966708656e+00 3.9597688637427075e+00 + 3.2498091424090303e+00 2.4250213897094537e+00 4.3387755120646148e+00 + 3.2997330519371397e+00 2.2772866380852310e+00 4.5913363294486587e+00 + 3.6546300794445665e+00 1.9157965132663386e+00 4.7671198504918522e+00 + id 14284 + loc 4.6501129865646362e-01 1.5880228579044342e-01 378 + blend 0.0000000000000000e+00 + interp 5.2221960376158072e-01:3.3087657888618660e-01:6.8640597612481458e-01:3.5019905368364812e-01:1.2973153032553011e+00:4.1538875027073047e-01:1.9790403103358627e+00:3.1693601925523701e-01:2.5377430366328939e+00:5.2221438156554312e-01:3.0355110334621300e+00:3.3033755867695486e-01:3.9277937307217630e+00 + CVs 20 + 1.2775761067802546e-01 3.1916082534273776e-01 -2.8943069847943143e-01 + 2.2421200689710113e-01 6.1052085157263292e-01 -5.7461360200709755e-01 + 3.1555101897064719e-01 8.8673599545750470e-01 -8.6976101555085461e-01 + 4.2403586534475979e-01 1.1629864185324201e+00 -1.1774999710133476e+00 + 5.7129487877218987e-01 1.4480141084378650e+00 -1.4881825461212914e+00 + 7.8160796868671101e-01 1.7361959781798801e+00 -1.7961433610496216e+00 + 1.0734645188989969e+00 2.0033401130852155e+00 -2.0974928893248106e+00 + 1.4514041523104755e+00 2.2197350661574413e+00 -2.3807278183048401e+00 + 1.9062250132453931e+00 2.3614146873156976e+00 -2.6314693756533649e+00 + 2.4192147803859259e+00 2.4098173775229235e+00 -2.8454091797337204e+00 + 2.9618145633548658e+00 2.3459395682782862e+00 -3.0277683828550850e+00 + 3.4923735351856617e+00 2.1511415896616759e+00 -3.1776266266884772e+00 + 3.9628850069860411e+00 1.8264188982223573e+00 -3.2824091078677049e+00 + 4.3492274944250386e+00 1.4141628401779021e+00 -3.3415245755588905e+00 + 4.6750524846345689e+00 9.6902718041760494e-01 -3.3910467993004936e+00 + 4.9857111668501570e+00 5.0759288939676983e-01 -3.4988408215331548e+00 + 5.3070200161414629e+00 2.0545185103368890e-02 -3.7509118559961863e+00 + 5.5962851658394417e+00 -4.4320729515768065e-01 -4.1608644819848930e+00 + 5.7565351625311791e+00 -7.5755670916505480e-01 -4.4018867853340664e+00 + id 14285 + loc 1.6382667422294617e-01 5.5213999748229980e-01 395 + blend 0.0000000000000000e+00 + interp 3.6545555186702422e-01:2.7749077293272106e-01:2.7013506924774500e-01:2.9698179528401175e-01:1.0114483198354576e+00:3.3760618596975783e-01:1.7411242102647972e+00:2.5688381650598163e-01:2.2551869364235713e+00:3.6545189731150557e-01:3.0067115131036806e+00:3.1340420900727700e-01:3.7383018159693799e+00 + CVs 20 + 4.0033137313959166e-01 1.2625973864537354e-01 -2.6145797801312692e-01 + 7.5526446652815382e-01 2.0305060248236734e-01 -4.9205626803699787e-01 + 1.1049235720113972e+00 2.6208219277187145e-01 -7.0446023322035145e-01 + 1.4636875347369782e+00 3.1287833510410745e-01 -9.0139300396234667e-01 + 1.8282822141874868e+00 3.5095082888837392e-01 -1.0815989176475926e+00 + 2.1952455939861952e+00 3.7239674244213028e-01 -1.2479219484875390e+00 + 2.5598539769202153e+00 3.7238115294272145e-01 -1.4039621520439849e+00 + 2.9152236223067183e+00 3.4491725855084887e-01 -1.5517875977108377e+00 + 3.2547798933792063e+00 2.8416538185309359e-01 -1.6948470749783442e+00 + 3.5718020907381360e+00 1.8416597412467306e-01 -1.8411212594286908e+00 + 3.8572950947798090e+00 4.0493233358428249e-02 -1.9999525467089025e+00 + 4.1066570220780969e+00 -1.4716699865603688e-01 -2.1762250942759729e+00 + 4.3230783115598257e+00 -3.7619875101525269e-01 -2.3716880863673655e+00 + 4.5084778324675820e+00 -6.4278958214755777e-01 -2.5890417514587476e+00 + 4.6586586822272409e+00 -9.4082832779960102e-01 -2.8299051696794781e+00 + 4.7681772121589923e+00 -1.2643447553776177e+00 -3.0878898644765900e+00 + 4.8369999016491558e+00 -1.6110594877635163e+00 -3.3485039832814896e+00 + 4.8759953507813236e+00 -1.9812277162302276e+00 -3.6056311342053347e+00 + 4.9707229411401315e+00 -2.3538783552537472e+00 -3.9194112394589453e+00 + id 14286 + loc 9.2878937721252441e-03 5.3174823522567749e-01 393 + blend 0.0000000000000000e+00 + interp 5.1524508899468358e-01:1.2699533390445453e-01:5.1235750597559027e-01:4.4319956003377081e-01:1.0412350822952927e+00:5.1523993654379363e-01:1.5952733141834727e+00:3.4792600928970113e-01:2.1212072500917500e+00:4.2970658387905580e-01:2.9978431817060116e+00:3.1962245145658952e-01:3.9307120171264240e+00 + CVs 20 + -2.2466662421989392e-01 3.1620084860523667e-01 -9.3655702649075606e-02 + -4.5792882388710265e-01 6.6543042410143327e-01 -1.6872551924619947e-01 + -6.9194847911960866e-01 1.0408688537620654e+00 -2.4335922044304675e-01 + -9.3436276964013543e-01 1.4295202502504567e+00 -3.3159176321148204e-01 + -1.2060036538554830e+00 1.8155666128650134e+00 -4.4395372503381381e-01 + -1.5275049390176960e+00 2.1739673353795608e+00 -5.9202862052004179e-01 + -1.9131795184035423e+00 2.4678099255733912e+00 -7.8743834557960113e-01 + -2.3606717911744384e+00 2.6552762472263987e+00 -1.0368471362176688e+00 + -2.8453605584636819e+00 2.7058895438519648e+00 -1.3329716382343761e+00 + -3.3340363226740077e+00 2.6175158836646206e+00 -1.6531520043090202e+00 + -3.8049010733273940e+00 2.4167665835947032e+00 -1.9733201947470591e+00 + -4.2531561464596646e+00 2.1476989753493498e+00 -2.2803409810948825e+00 + -4.6838991674145705e+00 1.8574944571723708e+00 -2.5601899308769034e+00 + -5.0986021817181344e+00 1.5877549059078357e+00 -2.7657656153985513e+00 + -5.4848556400625439e+00 1.3890935541310550e+00 -2.8207255064562697e+00 + -5.8009834560068780e+00 1.3542467812825658e+00 -2.6801904700776067e+00 + -5.9689135031164984e+00 1.5657059174972188e+00 -2.3993201895177023e+00 + -6.0395856944630832e+00 1.8938303482349683e+00 -2.1359234511025642e+00 + -6.6076221363940881e+00 1.8767691329032674e+00 -2.0077492123313800e+00 + id 14287 + loc 4.1720896959304810e-01 5.7116055488586426e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9356034864871103e-01:2.4992704790395406e-01:2.0840042618712751e-03:3.5313397810052560e-01:5.6144267737299058e-01:2.7679840958321550e-01:1.3906940517612592e+00:3.7244924124130202e-01:2.2641729181788999e+00:3.9355641304522454e-01:2.8937116911893401e+00:2.8387338027756004e-01:3.2951742331092251e+00 + CVs 20 + 1.2342786115211152e-01 2.9909079211334266e-01 -2.3488083474704835e-01 + 2.9242644748694291e-01 5.8380902230487641e-01 -4.4945433715588373e-01 + 4.9536922067536221e-01 8.5780196872952930e-01 -6.4796854225313816e-01 + 7.2752870370785272e-01 1.1175834320735514e+00 -8.4205409253210584e-01 + 9.7893341522376986e-01 1.3692335503688531e+00 -1.0547794750251194e+00 + 1.2199113891949558e+00 1.6187590616994749e+00 -1.3166013707842543e+00 + 1.4085182593829970e+00 1.8436156867660598e+00 -1.6508521060367123e+00 + 1.5181790310286154e+00 1.9895610354050721e+00 -2.0495601013286167e+00 + 1.5552430798792467e+00 2.0114300820918061e+00 -2.4692600694225755e+00 + 1.5450561035374166e+00 1.9161003575609374e+00 -2.8680874892677899e+00 + 1.5093806279055251e+00 1.7442902456941405e+00 -3.2318802990932065e+00 + 1.4630359768923542e+00 1.5384162324040389e+00 -3.5585257857428587e+00 + 1.4176121860963771e+00 1.3377447301979588e+00 -3.8431609304137164e+00 + 1.3782594971698545e+00 1.1745951750593209e+00 -4.0797862837167900e+00 + 1.3396568346417157e+00 1.0665448703926479e+00 -4.2634330590745453e+00 + 1.2864144001255213e+00 1.0214757262071608e+00 -4.3823923379341529e+00 + 1.1814579715151434e+00 1.0210937711874746e+00 -4.4418579978101720e+00 + 1.0484062117393556e+00 9.7222803335508112e-01 -4.5351825919422390e+00 + 1.1220353843130511e+00 8.5102208029448445e-01 -4.7158922557853371e+00 + id 14288 + loc 3.5860347747802734e-01 5.9293919801712036e-01 381 + blend 0.0000000000000000e+00 + interp 4.7154663690387366e+00:4.0770761887467022e-01:1.8687694684638156e-04:3.7599668095245753e-01:6.5679719689869631e-01:3.7468789957340454e-01:1.0604892713580614e+00:8.3446794045178241e-01:1.7117063395252430e+00:1.4680855635465107e+00:1.7407384419548571e+00:4.0853718126154409e-01:1.7721540276121939e+00:4.7154563690387370e+00:3.6376675178823517e+00:6.9739513563093802e-01:3.7910734383785432e+00:1.0897098377610781e+00:3.8574401103505291e+00 + CVs 20 + 9.6837875063077616e-01 2.0588230841710486e-01 -7.3099885029704847e-01 + 1.5415245151217638e+00 2.3415813705121460e-01 -1.2478966330330852e+00 + 2.0033815489847839e+00 1.9713235208704466e-01 -1.7079000265353879e+00 + 2.4668811569472644e+00 1.3891941874528158e-01 -2.1579224407770465e+00 + 2.9390048722720348e+00 5.9597820371176280e-02 -2.5788630054430004e+00 + 3.4177013524722009e+00 -3.8087433181193342e-02 -2.9616819803484740e+00 + 3.8858809862096355e+00 -1.5406789715877256e-01 -3.3163360433007516e+00 + 4.3464608515939398e+00 -2.9368766289995762e-01 -3.6716124251783810e+00 + 4.8182168965463132e+00 -4.8043506320956375e-01 -4.0531464327624258e+00 + 5.3117958883296659e+00 -7.5142038067710870e-01 -4.4703638221532298e+00 + 5.8099586945178157e+00 -1.1438836225786064e+00 -4.9228987147250542e+00 + 6.2638413000307729e+00 -1.6899189960940704e+00 -5.3950768210826929e+00 + 6.6022270012178694e+00 -2.4095081555735152e+00 -5.8493905879010857e+00 + 6.7711088967851483e+00 -3.2824133913039719e+00 -6.2574388411598854e+00 + 6.8028580249822852e+00 -4.2359784699699228e+00 -6.6379892988738547e+00 + 6.7916400555718646e+00 -5.1636250574105409e+00 -7.0363379352549416e+00 + 6.7870972019589946e+00 -5.9431609341657925e+00 -7.4820665121410759e+00 + 6.7737726049211364e+00 -6.5292918062529717e+00 -7.9529718706778478e+00 + 6.7671538937749069e+00 -7.1214124795556311e+00 -8.3417006690268174e+00 + id 14289 + loc 6.5204930305480957e-01 7.5562328100204468e-02 400 + blend 0.0000000000000000e+00 + interp 4.3911604412326521e-01:2.8639242286319061e-01:1.0024764488924343e+00:3.5772940988708773e-01:1.6880837552626926e+00:3.1318593864794242e-01:2.7737217119627915e+00:4.3911165296282401e-01:3.0740860406936408e+00:3.0390582477096251e-01:3.9919141915481138e+00 + CVs 20 + 1.5433459168190888e-01 2.0308024482509751e-01 2.9146079594995677e-01 + 3.0437278409382307e-01 3.7748956959171154e-01 5.4340604079059163e-01 + 4.4839161855590381e-01 5.3784344208741053e-01 7.7706025938601564e-01 + 5.8464778277210794e-01 6.9107257857185289e-01 1.0013908655585255e+00 + 7.1277125626282634e-01 8.3898281028538679e-01 1.2159149779880765e+00 + 8.3498999287066233e-01 9.8377894118452547e-01 1.4236693906258919e+00 + 9.5947766906070087e-01 1.1256065927293928e+00 1.6257053611750294e+00 + 1.0965726124316075e+00 1.2628146870229180e+00 1.8221009727362629e+00 + 1.2535951720861496e+00 1.3855511279607660e+00 2.0211423580927965e+00 + 1.4351673979806217e+00 1.4724636045276582e+00 2.2305196151418487e+00 + 1.6468705858670663e+00 1.5021503658827446e+00 2.4393245035994280e+00 + 1.8941622730514611e+00 1.4659429117112635e+00 2.6256581307912414e+00 + 2.1745137551133742e+00 1.3730197177886483e+00 2.7874520521787156e+00 + 2.4734985731284080e+00 1.2406030901664482e+00 2.9463002432442025e+00 + 2.7655426057111963e+00 1.0550947464611198e+00 3.0926642661777581e+00 + 3.0182977266875572e+00 7.3932544883675644e-01 3.1442694358386123e+00 + 3.2396718597148149e+00 1.6286702521562946e-01 3.0744442902027940e+00 + 3.5073178421810485e+00 -5.5010714450932197e-01 3.1537917991761062e+00 + 3.6853880939370969e+00 -5.7911150961357594e-01 3.4147028905268639e+00 + id 14290 + loc 7.2118294239044189e-01 1.3170826435089111e-01 404 + blend 0.0000000000000000e+00 + interp 4.5303366459316186e-01:4.5302913425651592e-01:4.7705774078944752e-01:3.5243246844111931e-01:1.1445393279382692e+00:3.2107686105199795e-01:2.0006557484240526e+00:2.6902135131461596e-01:3.0161610599999711e+00:3.1629342240243308e-01:3.9933750794285983e+00 + CVs 20 + -4.4385140178930575e-02 4.5169420700506072e-02 9.1257578844769149e-02 + -8.1220978618127271e-02 1.0413528826646559e-01 1.9634053350452058e-01 + -1.1273843586792023e-01 1.7336566534210318e-01 3.0185604475326383e-01 + -1.4249687673225997e-01 2.5248648152595599e-01 3.9801492175094827e-01 + -1.6857590921563409e-01 3.4212518938429903e-01 4.8305925788212623e-01 + -1.8854685702127708e-01 4.4244853546227558e-01 5.5622926299060760e-01 + -2.0152142685346064e-01 5.5455364949638053e-01 6.1888772720020846e-01 + -2.0902978134829536e-01 6.8041831963893795e-01 6.7449991459216430e-01 + -2.1410225909199651e-01 8.2171424244938440e-01 7.2696025642630291e-01 + -2.2244679489423874e-01 9.7986544380541551e-01 7.7943906910772986e-01 + -2.4534762863829968e-01 1.1562258537536065e+00 8.3081276600065479e-01 + -3.0500803362019457e-01 1.3519124288317097e+00 8.6577166071040379e-01 + -4.2133068510515165e-01 1.5652973247530100e+00 8.7316145944993007e-01 + -5.9824775315089584e-01 1.7904481518926627e+00 8.8052004177630228e-01 + -8.0449522001054707e-01 2.0127378324673981e+00 9.4353956986629151e-01 + -9.9430398547244014e-01 2.2143388022699688e+00 1.0844529805280019e+00 + -1.1509965405406182e+00 2.3829562053321589e+00 1.2871245534392441e+00 + -1.2667884328897414e+00 2.5097999241458075e+00 1.5257798001420877e+00 + -1.2435917281348718e+00 2.5793989802820367e+00 1.6863718945080080e+00 + id 14291 + loc 3.9022812247276306e-01 8.5668665170669556e-01 412 + blend 0.0000000000000000e+00 + interp 5.0688384143674869e-01:3.5407958272705475e-01:1.5175624272617538e-03:3.1653964207361224e-01:8.9449961602329719e-01:3.5907406174796891e-01:1.4444437574262043e+00:2.8438755779467528e-01:1.9995353804218432e+00:3.1038561229890221e-01:2.7107539018928981e+00:5.0687877259833436e-01:3.1769057915080103e+00:4.2700296129022297e-01:3.6576026030260165e+00 + CVs 20 + 8.8475155307018272e-01 6.9222889969567603e-02 -2.5215498025629901e-01 + 1.4554468200221806e+00 -1.7528411386843135e-02 -4.7660153123943033e-01 + 1.9547510830683690e+00 -1.4880542885219727e-01 -6.5828948162176415e-01 + 2.4520514077823319e+00 -2.9091746076365310e-01 -7.8687936328460606e-01 + 2.9297795464994749e+00 -4.4250069469482478e-01 -8.5447502276248233e-01 + 3.3737245828170117e+00 -5.9882265235046184e-01 -8.5931165934112941e-01 + 3.7724277641097244e+00 -7.5392584746072977e-01 -8.0788953142971409e-01 + 4.1201520459887249e+00 -9.0284785862488970e-01 -7.1421737909981320e-01 + 4.4189193707282026e+00 -1.0428235263313292e+00 -5.9499296886798092e-01 + 4.6739943844472629e+00 -1.1731231323662272e+00 -4.6596043643867657e-01 + 4.8878263228860881e+00 -1.2928097172584028e+00 -3.4066823434168747e-01 + 5.0644140906991870e+00 -1.3989348046726413e+00 -2.2655873320939363e-01 + 5.2190442554000516e+00 -1.4926504933595981e+00 -1.2344345491098541e-01 + 5.3688657443996544e+00 -1.5860087114049013e+00 -3.8299289744508191e-02 + 5.5129678231623638e+00 -1.6839593510049027e+00 1.2964669065005652e-02 + 5.6440861115694290e+00 -1.7775680329923969e+00 2.9256281663713191e-02 + 5.7609161521209531e+00 -1.8611972753077419e+00 2.4680173543018435e-02 + 5.8612992690740020e+00 -1.9360612241241963e+00 8.7641915852064711e-03 + 5.8580947621338861e+00 -2.0456866848359745e+00 -1.3108764303910836e-01 + id 14292 + loc 1.8411767482757568e-01 9.5403259992599487e-01 402 + blend 0.0000000000000000e+00 + interp 3.6393483802700494e-01:3.6393119867862467e-01:2.6996520659532186e-01:2.8258792197259891e-01:1.0410321994498355e+00:2.1508578185246940e-01:2.3565642983717376e+00:3.0836553206445289e-01:3.1584960232369110e+00 + CVs 20 + -1.5993557437741987e-03 1.1651998285147205e-01 -1.4557784217597300e-01 + 2.4259416858398081e-02 2.4131023547874997e-01 -3.1823738691736658e-01 + 6.0577739724434032e-02 3.5879928171437014e-01 -5.0979461015826000e-01 + 9.8168877860522086e-02 4.5957862089204049e-01 -7.1172691986964165e-01 + 1.3127824297942853e-01 5.4626633040767203e-01 -9.2430145707946010e-01 + 1.5079196377701989e-01 6.2084109180383040e-01 -1.1471514725768366e+00 + 1.4524360681416060e-01 6.8203951658926132e-01 -1.3778387392149731e+00 + 1.0551177933698302e-01 7.2462441673619538e-01 -1.6102987962499669e+00 + 2.9999567757304613e-02 7.4214678747531848e-01 -1.8358580824815314e+00 + -7.4691957890102412e-02 7.2937938405587344e-01 -2.0458048936675404e+00 + -1.9426197942738616e-01 6.8033300822734666e-01 -2.2308599317446518e+00 + -3.1146160918944332e-01 5.9574811004280714e-01 -2.3858548684722161e+00 + -4.1414313493555999e-01 4.8344635476381603e-01 -2.5113126216453461e+00 + -5.0456554648691787e-01 3.5711071970938713e-01 -2.6147974362422022e+00 + -6.1308497713977406e-01 2.3029886869992616e-01 -2.7136866910959907e+00 + -7.6116078690291611e-01 1.0722578668999272e-01 -2.8130255474162649e+00 + -9.0357808572798493e-01 -5.9725852138755031e-03 -2.8954653191078839e+00 + -9.6532726973197180e-01 -8.7775914330327109e-02 -2.9553135872795129e+00 + -1.0546848387112122e+00 -1.9944346526419543e-01 -2.9284419395772137e+00 + id 14293 + loc 8.8026523590087891e-01 6.2081134319305420e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2770178051765206e-01:4.2769750349984692e-01:6.6723665771610818e-03:3.3429601696258648e-01:5.8404732607037002e-01:3.2914537459951676e-01:1.5779563747098391e+00:3.3918611336745824e-01:2.4958842766907448e+00:2.5914371427608823e-01:3.5038374986180312e+00 + CVs 20 + -5.1660915546891020e-02 2.8090953184548917e-01 3.4377702557885637e-03 + -6.7278288910062503e-02 5.5973613971327052e-01 2.0405219368478389e-02 + -5.6776257023231996e-02 8.4106413146398329e-01 3.6130498500869357e-02 + -2.8653868236171887e-02 1.1299408655628558e+00 3.6281121351176837e-02 + 2.0506755966617440e-02 1.4322185211055405e+00 1.3303364672976548e-02 + 9.6360363987090081e-02 1.7537551612661484e+00 -4.3685928322665268e-02 + 2.0463776432033393e-01 2.0824000076739599e+00 -1.5155559424706522e-01 + 3.4442890404723936e-01 2.3880613780776985e+00 -3.2115721222620996e-01 + 5.0661656125337373e-01 2.6446285080484140e+00 -5.5062060290653880e-01 + 6.7709233956029780e-01 2.8359337558486382e+00 -8.3077847566462426e-01 + 8.3831252356883790e-01 2.9525714136573953e+00 -1.1495085127223397e+00 + 9.7101571836287603e-01 2.9921291729727573e+00 -1.4938239762475698e+00 + 1.0572330119552160e+00 2.9577027782206695e+00 -1.8505856224347661e+00 + 1.0828653453513926e+00 2.8567432870545852e+00 -2.2093953935910244e+00 + 1.0439591302224904e+00 2.7033793906457606e+00 -2.5730822447330284e+00 + 9.6020505168631565e-01 2.5247357391591896e+00 -2.9851453275090014e+00 + 8.7744719523594394e-01 2.3164547286216406e+00 -3.5517342799660905e+00 + 8.0233069284635428e-01 1.9292105205659811e+00 -4.1672073540636028e+00 + 6.0177798940959271e-01 1.6935043759892443e+00 -4.0194125870352888e+00 + id 14294 + loc 4.9647691845893860e-01 9.8679316043853760e-01 396 + blend 0.0000000000000000e+00 + interp 3.9736884961040486e-01:3.9688246724002813e-01:4.2299361885081765e-02:2.6416715615350245e-01:8.9424274135115356e-01:3.9736487592190878e-01:1.3957108561545568e+00:2.4496304609649039e-01:2.0418557572677525e+00:2.9856252464368044e-01:3.5270903925541943e+00 + CVs 20 + 9.5645901660719446e-01 3.4457115588813636e-01 -2.2268630015660953e-01 + 1.6237062573229974e+00 5.1988113308917883e-01 -3.8902984074960206e-01 + 2.2247557132233191e+00 6.1084616664803104e-01 -5.4213872806967123e-01 + 2.8770867144899825e+00 6.5461350054570322e-01 -7.0243660932763297e-01 + 3.5624315353789444e+00 6.2458790967585509e-01 -8.6921892658273092e-01 + 4.2521054003102607e+00 5.0303485892128985e-01 -1.0448151085252715e+00 + 4.9111389512878345e+00 2.8642147889130321e-01 -1.2339157528170592e+00 + 5.5029170556341622e+00 -1.5292007695401399e-02 -1.4365458544449587e+00 + 5.9970817644599510e+00 -3.7970419142080947e-01 -1.6462854833672815e+00 + 6.3770689937474128e+00 -7.7294839338729915e-01 -1.8558454356926846e+00 + 6.6431573938784707e+00 -1.1551313795498956e+00 -2.0589167700067534e+00 + 6.8136690473869210e+00 -1.4958252117590878e+00 -2.2509472218727042e+00 + 6.9137611967615316e+00 -1.7909429063943445e+00 -2.4324493890234473e+00 + 6.9582687553647444e+00 -2.0487019164835640e+00 -2.6056521770554779e+00 + 6.9744760199167635e+00 -2.2543984821513714e+00 -2.7642614341259595e+00 + 7.0015283707150884e+00 -2.4012596281257022e+00 -2.9052533960553886e+00 + 7.0719178739405431e+00 -2.5015236661299198e+00 -3.0395450928471792e+00 + 7.1937925939956902e+00 -2.5877907994224243e+00 -3.1735388550142880e+00 + 7.1940982451846320e+00 -2.7414605756774026e+00 -3.2400455460644055e+00 + id 14295 + loc 2.5503650307655334e-02 5.7670718431472778e-01 399 + blend 0.0000000000000000e+00 + interp 4.1262523753328012e-01:3.3240245117085931e-01:4.8245557113031357e-03:1.5798296319243374e-01:1.2144708727964377e+00:2.8524169198932237e-01:1.9312425832066191e+00:3.5383239267757954e-01:2.2965406555387813e+00:4.1262111128090478e-01:2.9276680425763155e+00:2.6764360895333467e-01:3.4599620618785334e+00 + CVs 20 + -2.7638906472432978e-01 2.8099449088055439e-01 -1.4809057837988238e-01 + -5.2563823256602615e-01 5.4489977061353256e-01 -3.1566938942144779e-01 + -7.5157022697195119e-01 7.8913425521018821e-01 -5.1793310382723601e-01 + -9.5281036979886302e-01 1.0107244756937541e+00 -7.6168017318814185e-01 + -1.1209222468629692e+00 1.2128298899505352e+00 -1.0472910316606907e+00 + -1.2545568078086005e+00 1.4085137301826729e+00 -1.3722052808378415e+00 + -1.3698802094419755e+00 1.6261060906051434e+00 -1.7265102556997467e+00 + -1.5032629900701844e+00 1.8940897054934425e+00 -2.1010998334357383e+00 + -1.7397174122762360e+00 2.1772359864657109e+00 -2.4890628105478880e+00 + -2.1333875650891798e+00 2.3555559520397766e+00 -2.8452068149337202e+00 + -2.6221211080302016e+00 2.3669513255007084e+00 -3.1132877938163199e+00 + -3.1020896603268935e+00 2.2405919584454423e+00 -3.2714862069778583e+00 + -3.4936036364780731e+00 2.0328982036043071e+00 -3.3518210136805728e+00 + -3.7517022637764148e+00 1.7790059705499019e+00 -3.4223886002546142e+00 + -3.8702702231060342e+00 1.4914577896229586e+00 -3.5325663055235235e+00 + -3.8846377163945767e+00 1.1724057254251303e+00 -3.6798360640588719e+00 + -3.8272642411306816e+00 7.7178025178017651e-01 -3.8401823261962145e+00 + -3.8715805989313172e+00 4.4628512792633951e-01 -4.0582602970845461e+00 + -4.1089561094762130e+00 9.4099297820836891e-01 -4.3182275357519222e+00 + id 14296 + loc 4.1043159365653992e-01 9.7225445508956909e-01 401 + blend 0.0000000000000000e+00 + interp 3.7147047550349510e-01:3.3699167065622565e-01:1.2773737049711298e-02:3.5519817829959188e-01:7.4443115623654832e-01:3.3144679952573364e-01:1.7356721613655359e+00:2.0800997348607966e-01:2.3691898089961581e+00:3.7146676079874008e-01:3.2629141945678621e+00 + CVs 20 + 1.9070459562009437e-02 3.2545422197764795e-01 -2.6248269968527033e-01 + 1.6363559182590970e-02 6.5960318094766701e-01 -5.2571938644158567e-01 + 1.3922502815496562e-03 9.9902880270457173e-01 -7.8713175035721961e-01 + -2.3360983721845141e-02 1.3281248236088652e+00 -1.0561543403347915e+00 + -6.5182773792621163e-02 1.6288318028641218e+00 -1.3436380348089731e+00 + -1.4360381221701446e-01 1.8867413938099904e+00 -1.6444133191206207e+00 + -2.7883534736219684e-01 2.0891048522165008e+00 -1.9364223897664106e+00 + -4.7307092035868981e-01 2.2239288057071414e+00 -2.1929198443394857e+00 + -7.0808558431682178e-01 2.2848545888619478e+00 -2.3935756811627602e+00 + -9.6089132766156571e-01 2.2768943793336791e+00 -2.5344742133198501e+00 + -1.2189417582185205e+00 2.2100461975717063e+00 -2.6259750702137663e+00 + -1.4803212124482212e+00 2.0900167951549125e+00 -2.6830784019285949e+00 + -1.7407165335213683e+00 1.9169346126985851e+00 -2.7207204919750523e+00 + -1.9843457020745556e+00 1.6947538016839263e+00 -2.7511766180611432e+00 + -2.2157443707464841e+00 1.4249093740185099e+00 -2.7834286912051223e+00 + -2.4916812563834188e+00 1.0777688149969353e+00 -2.8348724679172146e+00 + -2.8681166981566930e+00 6.3265349550492522e-01 -2.9705488111105587e+00 + -3.2838727418525888e+00 1.8797029715264968e-01 -3.2686620382011768e+00 + -3.5573634759928812e+00 -7.5008737720462015e-02 -3.5632970813699938e+00 + id 14297 + loc 2.4527023732662201e-01 7.8354382514953613e-01 378 + blend 0.0000000000000000e+00 + interp 4.0262905325548448e-01:2.8288349308048494e-01:2.4465074322779989e-01:3.3337867056694537e-01:9.9462592666076055e-01:2.6513069074229734e-01:1.6236976869276241e+00:4.0262502696495195e-01:2.1262459214869009e+00:2.5715884892314717e-01:2.9967612623742648e+00:2.6230570558582472e-01:3.8175746674150326e+00 + CVs 20 + 5.4707747742210411e-01 3.3696750261342151e-01 2.1866018830860906e-01 + 1.0189372456040886e+00 5.8443755770172545e-01 3.3785408559165664e-01 + 1.4810265892893637e+00 7.9025185985182522e-01 4.0289963203034257e-01 + 1.9666358016409136e+00 9.9415142345023644e-01 4.4499943335697612e-01 + 2.4726022694146139e+00 1.2117142037252930e+00 4.8798299098354359e-01 + 2.9970599173215442e+00 1.4438807814926249e+00 5.6098439990755544e-01 + 3.5406117401506618e+00 1.6751977808374505e+00 6.9208133310892928e-01 + 4.0958460782533370e+00 1.8818047910733335e+00 9.0303128889689543e-01 + 4.6411817727976139e+00 2.0397032483180157e+00 1.2030696758462471e+00 + 5.1493644860121064e+00 2.1299680462192199e+00 1.5849176575165971e+00 + 5.6077490592881825e+00 2.1377703930311256e+00 2.0321706700378215e+00 + 6.0227884000874949e+00 2.0429737472263385e+00 2.5277342965384468e+00 + 6.3922644733415135e+00 1.8224729481927602e+00 3.0416149875856204e+00 + 6.6809692352941292e+00 1.4871943357920436e+00 3.5152688655145625e+00 + 6.8553567395207207e+00 1.1045689903302689e+00 3.8929761528063627e+00 + 6.9301167376696373e+00 7.3801794656507536e-01 4.1737632972239354e+00 + 6.9467590045698042e+00 4.0318717425400807e-01 4.4002306164755352e+00 + 6.9652155607104635e+00 8.3844862818533095e-02 4.6105406340046553e+00 + 7.1479602851919877e+00 -2.5065638529424472e-01 4.7926197856442529e+00 + id 14298 + loc 5.0806391239166260e-01 2.0316417515277863e-01 379 + blend 0.0000000000000000e+00 + interp 3.9801516627424666e-01:3.0986677528886236e-01:1.5003418158593973e-01:3.9801118612258396e-01:8.4448371449326864e-01:2.1964443158965533e-01:1.4504752480567618e+00:2.7013485895948064e-01:2.6920653029835928e+00:2.7404685141214186e-01:3.2736522656851430e+00 + CVs 20 + 4.7579111506410582e-01 3.0631453244844892e-01 -1.1294896052607861e-01 + 8.8360421486874619e-01 5.4992750788938982e-01 -2.9653710486682588e-01 + 1.2581848246256957e+00 7.2131486142398604e-01 -5.3508073721342164e-01 + 1.6308322553473322e+00 8.7740117003817597e-01 -8.1067693112557693e-01 + 2.0173988159542371e+00 1.0732504921003954e+00 -1.0860207241919002e+00 + 2.4352331603600144e+00 1.3261718507773341e+00 -1.3124197876365751e+00 + 2.8919537033227956e+00 1.6327717481622721e+00 -1.4524136758589266e+00 + 3.3711090949279261e+00 1.9856283484233685e+00 -1.4847144113423956e+00 + 3.8512133903663681e+00 2.3577884361364330e+00 -1.4018418797243786e+00 + 4.3286714591666531e+00 2.7039225427035589e+00 -1.2108419100822398e+00 + 4.8160265515468206e+00 2.9721516371451013e+00 -9.1795772232414685e-01 + 5.3127049543936149e+00 3.1007787805729157e+00 -5.2317283995982988e-01 + 5.7775173709889787e+00 3.0201861492067161e+00 -4.5867929078405423e-02 + 6.1259500146968913e+00 2.7005172686717884e+00 4.4973546845064039e-01 + 6.2897053802512524e+00 2.1869407074456744e+00 8.6774077534553973e-01 + 6.2939730054600460e+00 1.5679975092447473e+00 1.0830016511827329e+00 + 6.2555897766501012e+00 9.7940252156361352e-01 9.2900457336258691e-01 + 6.2487699108095081e+00 7.0693926036722443e-01 3.9003581148715866e-01 + 6.2693353385997721e+00 2.6858279364620463e-01 1.3185703847520774e-01 + id 14299 + loc 1.6945023834705353e-01 3.4882247447967529e-01 381 + blend 0.0000000000000000e+00 + interp 4.7050536349002647e-01:4.1067976905249720e-01:2.9443593163031223e-01:4.2775776727670772e-01:1.0145420733221615e+00:2.8812485936854854e-01:1.4305793281566146e+00:3.9547753897004617e-01:1.9444805597969892e+00:4.7050065843639161e-01:2.5986066444559981e+00:3.6689673351017327e-01:3.0797748335608288e+00:4.3716799778652204e-01:3.8545604399772735e+00 + CVs 20 + -6.4903871803083335e-01 1.7240663132056361e-01 -9.3708734719332398e-01 + -1.1284580135737385e+00 1.8054531080725003e-01 -1.5192595370406299e+00 + -1.5666061794663722e+00 1.2778135117295425e-01 -1.9870835144340846e+00 + -2.0077063931773975e+00 5.6036914067598920e-02 -2.4277362461604306e+00 + -2.4361474036065358e+00 -2.5417555928173852e-02 -2.8435566576194899e+00 + -2.8382064204955766e+00 -1.0200451291194457e-01 -3.2430640252047023e+00 + -3.2113662050826211e+00 -1.6085864496883928e-01 -3.6427287074463148e+00 + -3.5640939621092822e+00 -2.0182770176511089e-01 -4.0682359001468384e+00 + -3.9032973015244834e+00 -2.4503348241747402e-01 -4.5477006258885497e+00 + -4.2314387579131871e+00 -3.2561726669415592e-01 -5.0965348840183644e+00 + -4.5561404977373385e+00 -4.8334254417665390e-01 -5.7047414291007685e+00 + -4.8818434862496671e+00 -7.5567099443085972e-01 -6.3443904450246240e+00 + -5.1908071829771245e+00 -1.1752206484098509e+00 -6.9642720116220200e+00 + -5.4454734484760587e+00 -1.7285136822797369e+00 -7.4767268549926866e+00 + -5.6284499859189729e+00 -2.3255039390041583e+00 -7.8238302705990250e+00 + -5.7527028441870005e+00 -2.8851645505900616e+00 -8.0253754352794004e+00 + -5.8377842099381576e+00 -3.3949633103696035e+00 -8.1397404682932777e+00 + -5.9331290766399665e+00 -3.8625984957343107e+00 -8.2088939569610417e+00 + -6.1736671797965368e+00 -4.2596296027465623e+00 -8.2031532601989472e+00 + id 14300 + loc 4.0948146581649780e-01 6.1187750101089478e-01 393 + blend 0.0000000000000000e+00 + interp 4.6117265830779564e-01:4.4373830479498233e-01:1.1829192158964719e-02:3.2642760545357991e-01:9.6621727154748760e-01:3.9177620649134282e-01:1.4655868416390205e+00:3.3988063180477868e-01:2.0149539594840231e+00:4.6116804658121258e-01:2.7674034948928137e+00:3.2422502050431673e-01:3.1100120510762750e+00 + CVs 20 + -3.6216843544482902e-01 2.9684143938796442e-01 -8.8028506750237878e-02 + -6.8821263177311309e-01 6.0957904538089724e-01 -1.4668901362104989e-01 + -9.8353233307676002e-01 9.5371397767123378e-01 -1.9526210012379663e-01 + -1.2540046550507638e+00 1.3276450026849966e+00 -2.5252626598798905e-01 + -1.5080609882977938e+00 1.7180859287475765e+00 -3.3652042922296538e-01 + -1.7563518492127999e+00 2.1126843165528655e+00 -4.5974080393115502e-01 + -2.0169524326842527e+00 2.5092107334000371e+00 -6.2832486531843434e-01 + -2.3308016902318047e+00 2.8999249408636221e+00 -8.4646537202824645e-01 + -2.7456374420474852e+00 3.2405575141360110e+00 -1.1116769886111064e+00 + -3.2612334664577274e+00 3.4711778258012851e+00 -1.4178294410553551e+00 + -3.8303383967359173e+00 3.5710147842885864e+00 -1.7718852822387992e+00 + -4.4130243961361337e+00 3.5406658579073089e+00 -2.1791122077189642e+00 + -4.9813086291726725e+00 3.3622351663715357e+00 -2.6111973937636463e+00 + -5.4872135427933761e+00 3.0236074506566091e+00 -3.0171340544512195e+00 + -5.8748701051096379e+00 2.5506214515065646e+00 -3.3701926185515370e+00 + -6.1320437183787861e+00 1.9781859216786251e+00 -3.6694617494031001e+00 + -6.3164604042327621e+00 1.3227456620646716e+00 -3.8931518586925358e+00 + -6.4838320357431964e+00 6.1789620570017378e-01 -4.0027139771742561e+00 + -6.5983606000939492e+00 -4.6712348420731908e-02 -4.0359336406877597e+00 + id 14301 + loc 9.6277046203613281e-01 7.4518048763275146e-01 400 + blend 0.0000000000000000e+00 + interp 4.0362862448200976e-01:3.1494130419929800e-01:3.0821253846814267e-01:4.0362458819576497e-01:9.7168362479754300e-01:2.7695106681833664e-01:1.4917193583698782e+00:3.0237148831282101e-01:2.0315455512361869e+00:9.9835077393879090e-02:3.0151630837741283e+00 + CVs 20 + -1.3728757719774101e-01 1.7149194315753846e-01 -2.6626099403992481e-01 + -2.7683038827738804e-01 3.1556562132015398e-01 -5.1867298676841356e-01 + -4.0294178968546063e-01 4.3985247838501129e-01 -7.7391319259416713e-01 + -5.1208823066398002e-01 5.4559160435233545e-01 -1.0342275636239897e+00 + -6.1220601797941832e-01 6.3132931700539352e-01 -1.2970663864749139e+00 + -7.0930979130936223e-01 6.9882947919422922e-01 -1.5647165587093244e+00 + -8.0345914854748146e-01 7.5469433907605776e-01 -1.8402492699963906e+00 + -8.9139902680005256e-01 8.0572849635925303e-01 -2.1254794997657118e+00 + -9.6958876743444666e-01 8.4989704543257749e-01 -2.4255637455765839e+00 + -1.0345199056097329e+00 8.7939105147573771e-01 -2.7467875327917177e+00 + -1.0813789024751903e+00 8.8805887371872050e-01 -3.0898833899099047e+00 + -1.1066882015342874e+00 8.7029601939960255e-01 -3.4517693260322080e+00 + -1.1103660081842610e+00 8.1455232522827514e-01 -3.8318319050941203e+00 + -1.0885521479388629e+00 7.0217650827092837e-01 -4.2283794786665805e+00 + -1.0275902960770638e+00 5.1672089522473730e-01 -4.6252066146373663e+00 + -9.1310532210895423e-01 2.5372053521321858e-01 -4.9857256114292987e+00 + -7.4518673060187479e-01 -7.8801626194985097e-02 -5.2647155043095095e+00 + -5.3730325384733890e-01 -4.6770563777392438e-01 -5.4353865586825165e+00 + -2.7659352227290801e-01 -9.3607258779067282e-01 -5.5628997352031089e+00 + id 14302 + loc 1.9676592946052551e-01 8.8361513614654541e-01 412 + blend 0.0000000000000000e+00 + interp 5.0859562452406892e-01:3.3686911180026002e-01:9.6864411020400887e-03:3.9597209325936600e-01:7.9137584758994750e-01:3.3975155974976978e-01:1.2366292852374927e+00:5.0859053856782366e-01:1.9487650755386854e+00:3.2103370080940014e-01:2.8770072504814466e+00:3.5352325305971655e-01:3.4218219034175670e+00 + CVs 20 + 8.5371794864399630e-01 1.9511067719206035e-01 -1.8723578916494105e-01 + 1.4068247675780952e+00 2.4504820321199389e-01 -3.9881604490381461e-01 + 1.9155110573550145e+00 2.4912248999662229e-01 -6.1216150964654337e-01 + 2.4741354292503051e+00 2.3713892320751728e-01 -8.1600543121719760e-01 + 3.0776885231783258e+00 1.9513963119454480e-01 -9.9160671424599534e-01 + 3.7154627108735814e+00 1.1152562383731335e-01 -1.1172415206540660e+00 + 4.3678181577570347e+00 -2.1132107429693958e-02 -1.1753425052039745e+00 + 5.0094391757002201e+00 -2.0538125482923886e-01 -1.1595121458004392e+00 + 5.6169407737628312e+00 -4.3757000372413346e-01 -1.0725473307142344e+00 + 6.1700616372109405e+00 -7.0996022630402233e-01 -9.2708336932382096e-01 + 6.6466196179319219e+00 -1.0239706317733237e+00 -7.6544129899322166e-01 + 7.0277203259123802e+00 -1.3923095269099073e+00 -6.5863514298461623e-01 + 7.3149997640465179e+00 -1.8092901495128855e+00 -6.3866567443350297e-01 + 7.5354036222733747e+00 -2.2536310676816669e+00 -6.6974100336053166e-01 + 7.7091281646058158e+00 -2.7132746497290396e+00 -7.2283801001877446e-01 + 7.8364341977964562e+00 -3.1738513356846894e+00 -8.0736844232662741e-01 + 7.9157615692761203e+00 -3.6090087635970862e+00 -9.3371279217536240e-01 + 7.9670116546869023e+00 -3.9981314078797103e+00 -1.0813755997326062e+00 + 8.1073639853525705e+00 -4.3454627792167759e+00 -1.1184408720973886e+00 + id 14303 + loc 5.9132832288742065e-01 5.2324599027633667e-01 402 + blend 0.0000000000000000e+00 + interp 3.3668361290191584e-01:3.0276276213447018e-01:4.2420377591175085e-01:2.6574720283334530e-01:1.0331780059610953e+00:3.3668024606578684e-01:1.9517892805227239e+00:2.9436176632435651e-01:2.7277508184963795e+00:2.9368757833017356e-01:3.4952151998598513e+00 + CVs 20 + -5.3557257997458835e-02 3.1354691167270965e-01 -1.9201165522842320e-01 + -1.2481657402866955e-01 6.2288946627050612e-01 -4.1196324498308723e-01 + -1.9928467160060365e-01 9.2428981846209546e-01 -6.5090237503104853e-01 + -2.9290531173511730e-01 1.2073870687523107e+00 -8.9587236000547144e-01 + -4.2834079659643032e-01 1.4518820911922516e+00 -1.1271969445060044e+00 + -6.0770501932687138e-01 1.6387651040729412e+00 -1.3259876645774378e+00 + -8.1751639893774264e-01 1.7603486164728157e+00 -1.4797456775492761e+00 + -1.0536414246904433e+00 1.8215064644345809e+00 -1.5917330961813998e+00 + -1.3190825777564965e+00 1.8274828881647458e+00 -1.6837616482551696e+00 + -1.6041605041778617e+00 1.7746934980431730e+00 -1.7801051888966197e+00 + -1.8867664236619168e+00 1.6319367898070303e+00 -1.9048248371391854e+00 + -2.1340118922113893e+00 1.3624262456450109e+00 -2.0660919590034896e+00 + -2.3547123431682824e+00 9.9865363461562728e-01 -2.2481050250493690e+00 + -2.6076374515957230e+00 6.1447377102456469e-01 -2.4413740107594162e+00 + -2.9483333152967970e+00 2.7244550018255231e-01 -2.6541770150016948e+00 + -3.3957529887715148e+00 3.8254959176702297e-03 -2.9158043121534361e+00 + -3.9112706308051819e+00 -1.9637342473235719e-01 -3.2692233985390766e+00 + -4.4123613309496612e+00 -3.5413659442677536e-01 -3.7322955323096001e+00 + -4.8427588585312868e+00 -5.0163156384207874e-01 -4.2406948348133984e+00 + id 14304 + loc 6.9444906711578369e-01 4.4974997639656067e-01 395 + blend 0.0000000000000000e+00 + interp 3.9182409227816595e-01:2.5072395277021625e-01:3.0443475058585323e-01:2.7026454226781715e-01:1.1972088510340460e+00:3.9182017403724317e-01:1.9388075598095122e+00:2.8036533902899019e-01:2.3780371100823574e+00:2.7721190824177777e-01:3.0518255546857578e+00 + CVs 20 + -3.3307226560997349e-01 1.3083214157649328e-01 4.0757886033405405e-01 + -6.2876721453213880e-01 2.1339590929091812e-01 7.3208890338374966e-01 + -9.3046571946213252e-01 2.7945854503272860e-01 1.0420307340228696e+00 + -1.2538720433454862e+00 3.4072846407000046e-01 1.3606372297695890e+00 + -1.5956825449866177e+00 3.9139970012060799e-01 1.6831531197932481e+00 + -1.9516538767807481e+00 4.2526294405913967e-01 2.0081900828942425e+00 + -2.3159118411595867e+00 4.3636420670147635e-01 2.3371447464674837e+00 + -2.6804896098306132e+00 4.1589002339737324e-01 2.6681680693074261e+00 + -3.0371702653495207e+00 3.5095798150502278e-01 2.9969680778604619e+00 + -3.3747806314017379e+00 2.2708162742995919e-01 3.3229311446323715e+00 + -3.6776250362626106e+00 3.5302360919807096e-02 3.6468518501689204e+00 + -3.9352855642302114e+00 -2.2017803972320715e-01 3.9637941507162120e+00 + -4.1483004566595714e+00 -5.2529069660174388e-01 4.2639573714590169e+00 + -4.3214671316669326e+00 -8.6504397026598090e-01 4.5364087568064235e+00 + -4.4579500665143197e+00 -1.2249219644280318e+00 4.7682592652396156e+00 + -4.5612410492381237e+00 -1.5887921257957132e+00 4.9427356731476433e+00 + -4.6402751400296296e+00 -1.9392240645010705e+00 5.0486794565650941e+00 + -4.7132019392540734e+00 -2.2616508470485734e+00 5.0973197708895537e+00 + -4.8217749057475867e+00 -2.5622903032660580e+00 5.1619214326987031e+00 + id 14305 + loc 1.9918054342269897e-01 1.1767173558473587e-01 1069 + blend 0.0000000000000000e+00 + interp 3.6769206172320407e-01:3.0695457621195155e-01:4.2580807135845633e-01:3.1124724115679342e-01:1.0252197570230095e+00:2.8001382249931178e-01:1.9996714394999380e+00:3.6768838480258687e-01:2.9847409359531363e+00:3.0242811857260427e-01:3.7153284216584881e+00 + CVs 20 + -2.7575300481914378e-01 3.3536640144245650e-01 -1.4139180581568070e-01 + -5.2259656390028275e-01 6.8235789753680232e-01 -2.5885564577932052e-01 + -7.5191387074053184e-01 1.0251870426113003e+00 -3.7005348937598648e-01 + -9.7766472151279460e-01 1.3177237293160022e+00 -5.1916771014334395e-01 + -1.2027539679255561e+00 1.5114138903770207e+00 -7.3137902852170777e-01 + -1.4029429982687045e+00 1.5779011214362217e+00 -9.8884914530973822e-01 + -1.5126888063926174e+00 1.5105059401999592e+00 -1.2403806264341617e+00 + -1.4637828815246634e+00 1.3576578797267282e+00 -1.4057084447353090e+00 + -1.2905110123304315e+00 1.2144623772162944e+00 -1.4260355648031469e+00 + -1.1134062509002867e+00 1.1152244005701624e+00 -1.3646158741645460e+00 + -9.6771345220748328e-01 1.0273616685153106e+00 -1.2931464483850841e+00 + -8.4559426151091399e-01 9.5478053286234499e-01 -1.2073239951992178e+00 + -7.3530185818744886e-01 8.9115396632032640e-01 -1.1301117161276815e+00 + -5.7191231838189982e-01 7.4141351543826983e-01 -1.1273733570986821e+00 + -3.0612762088766404e-01 4.4694461500819815e-01 -1.2549458477836670e+00 + 2.1687297960564400e-02 8.0806758189437722e-02 -1.5982037494434453e+00 + 3.1009213915039235e-01 -1.7429600068570428e-01 -2.2311202512802675e+00 + 4.4207086586271155e-01 -1.6834630114829330e-01 -2.8873505984046117e+00 + 4.9348699781179028e-01 -1.1873510697126877e-01 -3.1550573130017598e+00 + id 14306 + loc 1.3648545742034912e-01 3.5325177013874054e-02 401 + blend 0.0000000000000000e+00 + interp 4.1529177795005534e-01:3.5060918396122526e-01:5.3426392350797491e-02:4.1528762503227584e-01:6.9104296394849807e-01:2.3879901266291639e-01:1.0842239114006633e+00:3.9404362936376880e-01:1.9063347349530910e+00:2.8501806734361551e-01:2.7244925907469453e+00:3.6586302375277557e-01:3.0994572503755364e+00 + CVs 20 + -2.7770856718380732e-01 3.2388537807417384e-01 7.2491228006787381e-02 + -5.1486912914304739e-01 6.4250699985604587e-01 1.9133842229197062e-01 + -7.3062213463650461e-01 9.6071329325273325e-01 3.3054060705266175e-01 + -9.3541138784728561e-01 1.2822816806752950e+00 4.7881279698667278e-01 + -1.1310912093253149e+00 1.6074702209876321e+00 6.3263405003655881e-01 + -1.3109137830165152e+00 1.9323804113286089e+00 7.8523884781170850e-01 + -1.4673728416215666e+00 2.2649143654748021e+00 9.3565819399414918e-01 + -1.6136110169927900e+00 2.6313914965627569e+00 1.1013912914293393e+00 + -1.7812038342900101e+00 3.0183150002294004e+00 1.3666299979383856e+00 + -1.9342235518746171e+00 3.2912194888080295e+00 1.8121392116921251e+00 + -1.9851181981466601e+00 3.3398163671089089e+00 2.3657215620790812e+00 + -1.8937783944350195e+00 3.1695417349180555e+00 2.8971884968223809e+00 + -1.6950897642747011e+00 2.8518953155787803e+00 3.3188836678098412e+00 + -1.4509757310155778e+00 2.4833569256134025e+00 3.5747241856485190e+00 + -1.1757575997053502e+00 2.0973093143086619e+00 3.6283826158739809e+00 + -8.7335542667233124e-01 1.5590843926504601e+00 3.5284104278790904e+00 + -6.5818554307293486e-01 7.4518304657978018e-01 3.5659032957318391e+00 + -6.5108417771303262e-01 2.6733192763034919e-01 3.9838616854919522e+00 + -6.6647175199635234e-01 6.4353630139353424e-01 4.3241860839168158e+00 + id 14307 + loc 9.6657299995422363e-01 5.9031414985656738e-01 404 + blend 0.0000000000000000e+00 + interp 3.6993842568870533e-01:2.6185145058396697e-01:9.4093726163224645e-04:3.1331203130423874e-01:8.1463477815231045e-01:3.6993472630444846e-01:1.4425005470448715e+00:2.7435793784863882e-01:2.0593371336361757e+00:1.6042602458411837e-01:2.9581727276658958e+00 + CVs 20 + -1.9431861895420705e-02 8.7843846480133242e-02 -2.0980187079803667e-01 + -2.2813279055354990e-02 1.9944207270212969e-01 -3.7453075032838701e-01 + -2.0730927556153550e-02 3.0292917643393025e-01 -5.1332373619438698e-01 + -1.6706869280903258e-02 4.0361664186290902e-01 -6.3407469498692759e-01 + -5.6968464826460674e-03 5.0300311179101398e-01 -7.3618893579806299e-01 + 1.7643392804048252e-02 5.9994354431003882e-01 -8.2005027391888397e-01 + 5.8816283207725029e-02 6.9227702198955798e-01 -8.8581581620540684e-01 + 1.2241632107909772e-01 7.7715908619326546e-01 -9.3235865021848374e-01 + 2.0950917838660477e-01 8.5250925726964499e-01 -9.5686811952269180e-01 + 3.1609879044646022e-01 9.1784695365156277e-01 -9.5585790301177620e-01 + 4.3503370079749115e-01 9.6971847833940195e-01 -9.2946186441453249e-01 + 5.5658764894316803e-01 1.0023341898166558e+00 -8.8708793756155802e-01 + 6.7200470190998673e-01 1.0126551285331060e+00 -8.4682280840602875e-01 + 7.7782909045795856e-01 1.0105474954259490e+00 -8.1661521199036757e-01 + 8.7485333189308356e-01 1.0100680312806685e+00 -7.9250588774536046e-01 + 9.6490529645185963e-01 1.0203372504058772e+00 -7.6882174628528621e-01 + 1.0483620663619411e+00 1.0410290219200053e+00 -7.5078817338252390e-01 + 1.1261067786468890e+00 1.0650295298319001e+00 -7.4741594860868521e-01 + 1.1922757070893411e+00 1.1459906770135153e+00 -6.9974480063063438e-01 + id 14308 + loc 3.6711864173412323e-02 8.0499666929244995e-01 1079 + blend 0.0000000000000000e+00 + interp 4.1577597816123790e-01:3.8800300495514672e-01:6.6111131851931626e-02:3.8428602762358938e-01:8.4374239145655949e-01:3.9830074973816160e-01:1.8340044452986326e+00:3.3370237716920964e-01:2.1050369036615932e+00:4.1577182040145633e-01:2.9167525231799400e+00:2.9634773427976563e-01:3.4099998691559268e+00 + CVs 20 + 6.6873330579903453e-02 4.2699981892557859e-01 2.7808525432512154e-01 + 1.7364061180703119e-01 7.7790488984817818e-01 4.3388391374907676e-01 + 3.0475992521756534e-01 1.0954868848892858e+00 5.2554718278169799e-01 + 4.4997058872512286e-01 1.3959857848827113e+00 5.7961453544726338e-01 + 6.0121420370718559e-01 1.6656923249063169e+00 5.9238148454086159e-01 + 7.4284013490510659e-01 1.8843535319083364e+00 5.6434344628168431e-01 + 8.5318460972039900e-01 2.0322210414755446e+00 5.0482733567269999e-01 + 9.1328667931666008e-01 2.1061888352841573e+00 4.3795359638550613e-01 + 9.1680986116735896e-01 2.1280477521069896e+00 3.9476566979136174e-01 + 8.7801276743039480e-01 2.1357275844852985e+00 3.8705535322945728e-01 + 8.2210694630342585e-01 2.1530373525953288e+00 3.9130036066931073e-01 + 7.6165796954307075e-01 2.1739887529840796e+00 3.7526950568772099e-01 + 6.9408144324324328e-01 2.1814237640600780e+00 3.2197013644197836e-01 + 6.1285644178591281e-01 2.1636253261724274e+00 2.2669700200094045e-01 + 5.1546003427488118e-01 2.1222728557242454e+00 8.8966194904144480e-02 + 4.0837493550034448e-01 2.0834643250575176e+00 -9.7026421813108277e-02 + 3.0638880285725789e-01 2.0513116595947172e+00 -3.6036797365504381e-01 + 2.1356948322842897e-01 1.9086623926670923e+00 -6.5769464471302896e-01 + 1.0565793382329655e-01 1.6232869718383027e+00 -7.1692254365289365e-01 + id 14309 + loc 9.4839972257614136e-01 2.1710990369319916e-01 396 + blend 0.0000000000000000e+00 + interp 4.0487194619419548e-01:2.5618234001094015e-01:1.7783783452934399e-01:3.6855401559733764e-01:8.9996071591649884e-01:3.1930916309779528e-01:1.5399813984161981e+00:4.0486789747473356e-01:2.0037646426052609e+00:2.8366366468941934e-01:2.6433726263415789e+00:3.0364890326760752e-01:3.3984431404900564e+00 + CVs 20 + -7.3630751266838335e-01 3.0986793116067579e-01 4.8341027667381087e-01 + -1.2704159133542838e+00 4.9298706559084826e-01 9.0843772953744528e-01 + -1.7430070504587047e+00 6.1479057624328526e-01 1.3298740297326646e+00 + -2.2233647911009053e+00 6.8425550816173664e-01 1.7796742450330822e+00 + -2.7088008084152171e+00 6.8570890403699591e-01 2.2462295950656701e+00 + -3.1902014978520254e+00 6.1192733131284127e-01 2.7173531819088059e+00 + -3.6561327453837462e+00 4.6221132627956418e-01 3.1800318805432122e+00 + -4.0954148856788075e+00 2.3845036042510448e-01 3.6175168220086800e+00 + -4.4923725393314431e+00 -5.1811345422100308e-02 4.0118293118409518e+00 + -4.8265902206352163e+00 -3.8948019709231629e-01 4.3508733960550208e+00 + -5.0914197220816044e+00 -7.4739276764361851e-01 4.6301603293960465e+00 + -5.3058878253396404e+00 -1.1041851309540793e+00 4.8482312626597448e+00 + -5.4957933500491212e+00 -1.4508797348188271e+00 5.0044007787939400e+00 + -5.6745070033853739e+00 -1.7777457363005955e+00 5.1094520001489698e+00 + -5.8462113144893166e+00 -2.0794380966464092e+00 5.1802128897123456e+00 + -6.0245239105040369e+00 -2.3558276881205127e+00 5.2312008983415996e+00 + -6.2221587225608506e+00 -2.6099701105458779e+00 5.2770848776275487e+00 + -6.4381554495813873e+00 -2.8465892900725378e+00 5.3294652232687225e+00 + -6.6331075129234955e+00 -3.0566761478771793e+00 5.3446365931737017e+00 + id 14310 + loc 9.5478743314743042e-01 8.8849729299545288e-01 399 + blend 0.0000000000000000e+00 + interp 5.5333343897705989e-01:4.9268635467727212e-01:2.2903116707372151e-01:3.5380708800662991e-01:9.6798795175363395e-01:3.7476219341881456e-01:1.8555076350283750e+00:5.5332790564267009e-01:2.1773114956058071e+00:5.4171418077363087e-01:2.6155535674003518e+00:5.2211309828366204e-01:3.0118774509887936e+00:4.0397221409225564e-01:3.4195299859902750e+00 + CVs 20 + -1.6908287926550120e-01 3.6153011064352936e-01 -2.6879927340363963e-01 + -3.1353270110821341e-01 6.8235885892001324e-01 -5.5296507542827933e-01 + -4.3632572608317777e-01 9.4761614268401839e-01 -8.7770366458289906e-01 + -5.4312701017582887e-01 1.1444786172469250e+00 -1.2435474010857139e+00 + -6.3672393300627206e-01 1.2610644262723159e+00 -1.6343429025879255e+00 + -7.1772423303864297e-01 1.2937583830136261e+00 -2.0311945413274715e+00 + -7.8874980946292073e-01 1.2493329033883971e+00 -2.4234028235195479e+00 + -8.5796633179461701e-01 1.1399282888823565e+00 -2.8138637120192680e+00 + -9.2709955761383389e-01 9.7952176705977290e-01 -3.1961495106376132e+00 + -9.8129602838739782e-01 7.8873523519924549e-01 -3.5436033015879955e+00 + -1.0175627325029437e+00 5.7564541618493792e-01 -3.8567124620488680e+00 + -1.0749174974689926e+00 2.9403045246069393e-01 -4.1895997487939258e+00 + -1.2062149024019682e+00 -1.0715305378958784e-01 -4.5744082288529411e+00 + -1.4296371198950997e+00 -5.8649015930537540e-01 -4.9745807130512985e+00 + -1.7175328116598276e+00 -1.0765116023232484e+00 -5.3367253483456265e+00 + -2.0956337565787759e+00 -1.5969382245993440e+00 -5.6607483346980700e+00 + -2.7314131564676583e+00 -2.1978154362875291e+00 -5.9890350058614379e+00 + -3.7096405684363534e+00 -2.6534347329517320e+00 -6.3392247275636366e+00 + -4.1483399042929392e+00 -2.7772996510911043e+00 -6.5370091806781350e+00 + id 14311 + loc 5.2062016725540161e-01 3.0502748489379883e-01 381 + blend 0.0000000000000000e+00 + interp 4.0531928925445664e+00:4.0531828925445668e+00:1.6795036407352106e+00:3.2428039238457189e+00:1.7202132847994400e+00:2.8106785227460009e+00:1.7582839353969533e+00:3.9995550424694937e-01:1.9729567738542664e+00:2.7707986149834496e-01:2.2255095993421738e+00:4.2441400889594905e-01:2.8756591627314378e+00:3.8780438571500042e-01:3.3652611841074846e+00:6.9739513563093802e-01:3.8439402281658563e+00 + CVs 20 + -8.1650853552860847e-01 9.5497593779672124e-02 7.3306466837105555e-01 + -1.3126548015135253e+00 5.3026494112354050e-02 1.2729556685078010e+00 + -1.7462460265247908e+00 -2.2130579516867588e-02 1.7992233785490945e+00 + -2.2211162193052036e+00 -7.1391483822915047e-02 2.3723578221454305e+00 + -2.7361686358498876e+00 -9.5802784158159460e-02 2.9787615166553061e+00 + -3.2752441889077253e+00 -1.1254336529553799e-01 3.6041269918855239e+00 + -3.8137650884164409e+00 -1.5726451717468326e-01 4.2372559986638674e+00 + -4.3265062674578587e+00 -2.7007977046289677e-01 4.8583333051367124e+00 + -4.7865941106582248e+00 -4.6904009768829247e-01 5.4367161597743721e+00 + -5.1763247974929687e+00 -7.3080856899155355e-01 5.9500558648601434e+00 + -5.5192679168654557e+00 -1.0092328220346185e+00 6.3999898851005277e+00 + -5.8679363913481861e+00 -1.3043560266095502e+00 6.7958888918861113e+00 + -6.2494989177255302e+00 -1.6581438058477043e+00 7.1407287182859154e+00 + -6.6396545898178658e+00 -2.1015531844910820e+00 7.4088476143892308e+00 + -6.9908171510160040e+00 -2.6176534302593022e+00 7.5641560136819974e+00 + -7.2844615479089327e+00 -3.1671563381434122e+00 7.5959833607613065e+00 + -7.5356971581216747e+00 -3.7417431062651034e+00 7.5298308864984005e+00 + -7.7530155016925981e+00 -4.3758869462324483e+00 7.4451701651409419e+00 + -7.9035915438615794e+00 -5.0738394293202838e+00 7.4665807727433924e+00 + id 14312 + loc 9.7843915224075317e-01 4.9034535884857178e-01 378 + blend 0.0000000000000000e+00 + interp 4.5895228244432640e-01:4.5894769292150195e-01:6.5392848007634008e-02:3.5796425849269625e-01:7.4491551905836229e-01:3.8252792494673060e-01:1.4041641412194763e+00:3.1571880838846855e-01:2.2479188114468740e+00:2.5107502916465352e-01:2.9922995167779902e+00:2.6348497354824635e-01:3.6745867593785482e+00 + CVs 20 + -4.5814250767878045e-01 4.9261134518919208e-01 -8.5328715242584396e-03 + -9.0597517334034350e-01 9.2081164511194979e-01 -1.5864451231624305e-02 + -1.3600838426196824e+00 1.2931404914015623e+00 -1.2216883761564656e-02 + -1.8025311694366688e+00 1.6245201722025238e+00 -1.8132714239396330e-02 + -2.2209683493693064e+00 1.9153530121734730e+00 -5.4534768492635943e-02 + -2.6234399127635517e+00 2.1534430102611779e+00 -1.2784432268238688e-01 + -3.0154536781475310e+00 2.3275126581164503e+00 -2.3327297260859708e-01 + -3.3953208131056574e+00 2.4350734072178799e+00 -3.5987896507989708e-01 + -3.7674570485738439e+00 2.4800456332921912e+00 -4.9634784045730584e-01 + -4.1437055537907987e+00 2.4647941051596649e+00 -6.3545836827416069e-01 + -4.5257362492787454e+00 2.3852700470909074e+00 -7.7082244484173612e-01 + -4.8965920493981265e+00 2.2387859231906062e+00 -8.9136922622530046e-01 + -5.2345369713180201e+00 2.0352646632429057e+00 -9.8502315017124398e-01 + -5.5237138621782726e+00 1.7993058638991068e+00 -1.0432282163235742e+00 + -5.7610322874680282e+00 1.5568560513320526e+00 -1.0665081939990853e+00 + -5.9601776165584344e+00 1.3186591540892438e+00 -1.0728166902251672e+00 + -6.1432158614852401e+00 1.0866013277382192e+00 -1.0924072851159563e+00 + -6.3312240993965121e+00 8.8013913371310171e-01 -1.1248240286622018e+00 + -6.5695878944125754e+00 7.6915173471636589e-01 -1.0915488146816665e+00 + id 14313 + loc 2.3748600482940674e-01 1.8654440343379974e-01 379 + blend 0.0000000000000000e+00 + interp 3.2373703884943894e-01:1.9910960137624870e-01:1.1059600950877579e-01:2.3564274757539205e-01:1.1015369344069967e+00:2.1470281953999540e-01:2.0013280448185222e+00:1.9630276921684114e-01:2.9055858790693891e+00:3.2373380147905045e-01:3.5235949836004683e+00 + CVs 20 + 1.2982350832366593e-01 3.2715823083884765e-01 3.8859383130058878e-01 + 3.0276612399551778e-01 5.8766553776895514e-01 7.4212384820034960e-01 + 5.3495908517122848e-01 7.5824579275252413e-01 1.0888479920534986e+00 + 8.1449900317581159e-01 8.6799702550103652e-01 1.4354466164950594e+00 + 1.0953222813914898e+00 9.7819082154600334e-01 1.7682870993367796e+00 + 1.3274366429446027e+00 1.1242916592570578e+00 2.0841659805770676e+00 + 1.4816216549998877e+00 1.3101749377441645e+00 2.3925166681908734e+00 + 1.5448461200869417e+00 1.5291169790969155e+00 2.6896823825040395e+00 + 1.5168339628720431e+00 1.7740313792805922e+00 2.9559241283579878e+00 + 1.4096264403210017e+00 2.0442760026097808e+00 3.1841084223684453e+00 + 1.2466362459403999e+00 2.3348318180719581e+00 3.3787492478172263e+00 + 1.0597228571558575e+00 2.6355284013290854e+00 3.5490144165423301e+00 + 8.6716445328875968e-01 2.9349004600359145e+00 3.7217624547493031e+00 + 6.6868301747125591e-01 3.2053596437534457e+00 3.9284461418962078e+00 + 4.0602730521054631e-01 3.3952067462130042e+00 4.2004164544508411e+00 + -1.0935523771361488e-01 3.3318646192360375e+00 4.5303232025532134e+00 + -8.9760869229500950e-01 2.6903337774765337e+00 4.8562388297188575e+00 + -1.3216850218113210e+00 1.5789094619920037e+00 5.1064846878755752e+00 + -1.1667117633933528e+00 1.1150291699630306e+00 5.1465273865744905e+00 + id 14314 + loc 4.5219486951828003e-01 6.5212774276733398e-01 412 + blend 0.0000000000000000e+00 + interp 4.4577581735377936e-01:3.4053969121166261e-01:3.5320799179168971e-02:3.0538565144756724e-01:9.6682651093787286e-01:3.7431970241239559e-01:1.5740736318194011e+00:2.9061377495451807e-01:2.0044462479971870e+00:3.0421329535669800e-01:2.9982131930367664e+00:4.4577135959560582e-01:3.5795870366182987e+00 + CVs 20 + 7.1911347980426121e-01 1.3232339530024706e-01 -2.1916025841677078e-01 + 1.1814266661993458e+00 1.6820441216156584e-01 -4.3464995126348410e-01 + 1.5947669522067274e+00 1.8726972114543633e-01 -6.4269407020607472e-01 + 2.0400913441245918e+00 2.2105938743767783e-01 -8.3825560014188027e-01 + 2.5214489366751671e+00 2.6063571095977661e-01 -1.0095694875844721e+00 + 3.0398136122926354e+00 2.9511698223739158e-01 -1.1424451697450961e+00 + 3.5886633147840299e+00 3.1337132517639987e-01 -1.2229879771179613e+00 + 4.1537581508616048e+00 3.0526072273172855e-01 -1.2430550959627618e+00 + 4.7167803225583853e+00 2.6405613986603149e-01 -1.2014014871723055e+00 + 5.2632610864807781e+00 1.8616089335695052e-01 -1.1021503994175945e+00 + 5.7856802970362837e+00 6.1019553993248765e-02 -9.6219873008398604e-01 + 6.2892339549331115e+00 -1.4423575861666427e-01 -8.2292984934722169e-01 + 6.7749814053835289e+00 -4.6214398695265224e-01 -7.3076393955824559e-01 + 7.2274082317478836e+00 -8.8440884120867502e-01 -6.9240710199206890e-01 + 7.6343604092080257e+00 -1.3854271865511008e+00 -6.8794375779894534e-01 + 7.9860153490522503e+00 -1.9448243891571142e+00 -7.1713321357928950e-01 + 8.2748493440436270e+00 -2.5380974141697048e+00 -7.9273916763596475e-01 + 8.5044162465288284e+00 -3.1307530785622952e+00 -9.0456993089025672e-01 + 8.7548716107413629e+00 -3.5808609223401446e+00 -8.6096930185396781e-01 + id 14315 + loc 9.9700409173965454e-01 4.9941095709800720e-01 400 + blend 0.0000000000000000e+00 + interp 4.9561514578246857e-01:2.0789469024242005e-01:6.5989680912505089e-01:4.0597093299333153e-01:1.0345895174470805e+00:4.9561018963101078e-01:1.9376589182385511e+00:4.3873066983421610e-01:2.0951806710958598e+00:3.3118672845349095e-01:2.6761040035627088e+00:2.8727000421358062e-01:3.6231794396636996e+00 + CVs 20 + 2.0302255816205084e-01 1.8754960205608145e-01 3.0420577593758957e-01 + 3.9102748870024928e-01 3.6054099333112122e-01 5.9808962182934422e-01 + 5.6354979306193376e-01 5.2492285060274591e-01 9.0596408026247000e-01 + 7.2320292471239622e-01 6.7736963322488886e-01 1.2351290658463645e+00 + 8.7228655194192706e-01 8.1094910322138059e-01 1.5831673468238625e+00 + 1.0098679186134067e+00 9.2382500985034555e-01 1.9490318874608299e+00 + 1.1324452043405722e+00 1.0139677044194690e+00 2.3347542465924427e+00 + 1.2358418709664207e+00 1.0709693053703138e+00 2.7425069817724146e+00 + 1.3166460576053316e+00 1.0789777916184351e+00 3.1690070058752848e+00 + 1.3731504658283911e+00 1.0257288329832615e+00 3.6033986369943989e+00 + 1.4051393932251932e+00 9.0456370762649452e-01 4.0287275862669372e+00 + 1.4130826671680614e+00 7.1352786658604272e-01 4.4245836019903404e+00 + 1.3958123278306156e+00 4.5795563338695144e-01 4.7713203798046040e+00 + 1.3499964368999509e+00 1.5180054480578509e-01 5.0537149557272585e+00 + 1.2758751187291060e+00 -1.8559876159025057e-01 5.2589291006599215e+00 + 1.1852903677758673e+00 -5.3238462623016325e-01 5.3772610393593521e+00 + 1.0972208826926435e+00 -8.6852524614650717e-01 5.4194876456329482e+00 + 1.0172046458670434e+00 -1.1944896481912690e+00 5.4409246305097234e+00 + 9.2269536141486808e-01 -1.5568757494745413e+00 5.5954934367744436e+00 + id 14316 + loc 9.4107739627361298e-02 4.7111716121435165e-02 395 + blend 0.0000000000000000e+00 + interp 4.6075054330471454e-01:3.0892552616820257e-01:8.9068146828420014e-02:2.8206407930421212e-01:7.6912742150837432e-01:2.9987220483045390e-01:1.1713603485848503e+00:3.0253811709795519e-01:2.0000079428210382e+00:2.6989703933267373e-01:2.9778177378304491e+00:4.6074593579928153e-01:3.8326475760388501e+00 + CVs 20 + -2.2608354300752814e-01 1.5253585019704696e-01 -2.7453835417174044e-01 + -4.3247976774930008e-01 3.0349229309761672e-01 -5.6480917224852667e-01 + -6.3538318089343948e-01 4.5253564801139889e-01 -8.6171850732886801e-01 + -8.3842220953307078e-01 5.9719902268159653e-01 -1.1607157544648667e+00 + -1.0432827401005051e+00 7.3479774648679796e-01 -1.4603508510113210e+00 + -1.2532564474665246e+00 8.6259628329372162e-01 -1.7587301856951076e+00 + -1.4696422419404471e+00 9.7417049045862969e-01 -2.0550720145398573e+00 + -1.6911611525835037e+00 1.0565901913732485e+00 -2.3515657488982948e+00 + -1.9220905824857084e+00 1.0934560734324095e+00 -2.6498993358330081e+00 + -2.1726635490459305e+00 1.0671816892826229e+00 -2.9408038732913715e+00 + -2.4440292235412340e+00 9.6893678959062424e-01 -3.2054751104117050e+00 + -2.7250517350884524e+00 8.1029650843216094e-01 -3.4350597204241744e+00 + -3.0089302295164191e+00 6.1077843907138085e-01 -3.6343442510872630e+00 + -3.2968731872884973e+00 3.8458773931871537e-01 -3.8059995913765947e+00 + -3.5850938625373727e+00 1.3861044743736217e-01 -3.9498985788769927e+00 + -3.8597128252125232e+00 -1.2884164451948710e-01 -4.0707587784146053e+00 + -4.1070632526672277e+00 -4.1669191237232006e-01 -4.1773810355486933e+00 + -4.3262150011991958e+00 -6.9960856687731710e-01 -4.2835142555414665e+00 + -4.5408457822636219e+00 -8.8354415065604419e-01 -4.4166054353665922e+00 + id 14317 + loc 7.8528410196304321e-01 7.5261503458023071e-01 393 + blend 0.0000000000000000e+00 + interp 4.2749663372355018e-01:4.2749235875721298e-01:6.2509169370646633e-01:3.2061489633999363e-01:1.0016088687185396e+00:3.1052092591382835e-01:1.6881309498966819e+00:3.0436816412856388e-01:2.1658587962661042e+00:3.2325247413966152e-01:2.9509545497395449e+00:3.1476216589426131e-01:3.9759434189996572e+00 + CVs 20 + -2.6229861204684446e-01 2.9561420796730808e-01 -2.5213124080509708e-01 + -4.9718145771721534e-01 6.0594257185277223e-01 -4.6734629437999653e-01 + -7.1396931668772279e-01 9.5162586502259883e-01 -6.7764881787556308e-01 + -9.2456692163984555e-01 1.3362629243950546e+00 -8.9457811046917479e-01 + -1.1492104469991404e+00 1.7541411364115853e+00 -1.1171336400619341e+00 + -1.4069351352975419e+00 2.1970514154559169e+00 -1.3471411801471507e+00 + -1.7165871885514012e+00 2.6549169279219322e+00 -1.5919443353336522e+00 + -2.1061879907319065e+00 3.1036687772232918e+00 -1.8659737049529848e+00 + -2.5931215444902977e+00 3.4952156946238526e+00 -2.1824280502384328e+00 + -3.1492371442378162e+00 3.7872009039695591e+00 -2.5491627816121900e+00 + -3.7280623664596826e+00 3.9656879073176943e+00 -2.9834858668795445e+00 + -4.3076724052801483e+00 4.0127597654924791e+00 -3.5000375593679496e+00 + -4.8642645263408157e+00 3.8963048111108725e+00 -4.0763894278686816e+00 + -5.3403568318823496e+00 3.6152141322698785e+00 -4.6530031365749789e+00 + -5.6912023344204563e+00 3.2086552694269175e+00 -5.1815892265014671e+00 + -5.9410253809884725e+00 2.6943408556074235e+00 -5.6517438824989163e+00 + -6.1663805079470455e+00 2.0621101343905397e+00 -6.0455722513066341e+00 + -6.4038704325936129e+00 1.3803862197699552e+00 -6.2915337550757577e+00 + -6.5180258546278402e+00 8.9370055035933360e-01 -6.3250692557777013e+00 + id 14318 + loc 4.7010949254035950e-01 8.1790059804916382e-01 401 + blend 0.0000000000000000e+00 + interp 5.0157355342175680e-01:4.4445913665364745e-01:8.4215133144595056e-03:3.5858926727312690e-01:9.0035219441413439e-01:3.0758087599836736e-01:1.5103499440846069e+00:3.8864900146074760e-01:2.1350540925747516e+00:5.0156853768622256e-01:2.8662455385799008e+00:3.4283649037267583e-01:3.2400679787972781e+00 + CVs 20 + -4.9960467828651392e-02 3.2065029466772305e-01 -2.6784848294198538e-01 + -8.5687082736999848e-02 6.4052946999472493e-01 -5.4438914220076740e-01 + -1.0992617687797801e-01 9.5374793788403367e-01 -8.3222448580510378e-01 + -1.2233949315974574e-01 1.2457136672192686e+00 -1.1414656467945046e+00 + -1.2533057396183811e-01 1.4994890275236044e+00 -1.4873490336989335e+00 + -1.4208709922526819e-01 1.7079234696638783e+00 -1.8781502879946095e+00 + -2.1699682618430749e-01 1.8698183004327067e+00 -2.3048790185485215e+00 + -3.8689505445811134e-01 1.9754594438400985e+00 -2.7391318010418333e+00 + -6.6030402210071026e-01 2.0066722125010545e+00 -3.1414694253568087e+00 + -1.0184739795046469e+00 1.9516644734845481e+00 -3.4765089959049909e+00 + -1.4256838772108815e+00 1.8112132951735900e+00 -3.7277614950184925e+00 + -1.8369818316549156e+00 1.5912398656819744e+00 -3.9035617280539334e+00 + -2.2213602317031982e+00 1.2956848864625399e+00 -4.0293479697007086e+00 + -2.5792794313227523e+00 9.2516963416620168e-01 -4.1202041830912428e+00 + -2.9232759642351089e+00 4.8958451528826019e-01 -4.1853290337993236e+00 + -3.2564257345382899e+00 2.2921108598063622e-02 -4.2977735212656984e+00 + -3.5628267481970850e+00 -4.0329166096557567e-01 -4.5928892961437455e+00 + -3.8147009544678352e+00 -7.3137692098227458e-01 -5.0611839848868874e+00 + -4.1307274804890053e+00 -1.1057257773617504e+00 -5.4295456391311694e+00 + id 14319 + loc 7.6150113344192505e-01 5.1724332571029663e-01 402 + blend 0.0000000000000000e+00 + interp 3.9625795800299241e-01:3.3483006400067705e-01:5.7209730834624639e-01:2.5207586073490829e-01:1.3129260279288406e+00:2.6598811730285599e-01:2.0068638389387257e+00:2.9745263980118769e-01:2.6446412930603653e+00:3.9625399542341239e-01:3.0048141658899818e+00:2.5301739210940472e-01:3.6730070102507932e+00 + CVs 20 + -9.6434760742643025e-02 2.8918857076636006e-01 -2.0450067078378609e-01 + -2.3956236794366159e-01 5.8572063661086149e-01 -4.2534314655232364e-01 + -4.1039450287617285e-01 8.8286630161824409e-01 -6.6397838650954788e-01 + -6.1433711535200475e-01 1.1472616721482904e+00 -8.9746613905513450e-01 + -8.5967508743817911e-01 1.3435448219446857e+00 -1.0970339667283215e+00 + -1.1520700530227128e+00 1.4678330337273449e+00 -1.2699962141191214e+00 + -1.4737946315181605e+00 1.5168237164368841e+00 -1.4619821542899474e+00 + -1.4795736242362520e+00 1.4884485767206841e+00 -1.4037865409976202e+00 + -1.6866295335888752e+00 1.4373026603239625e+00 -1.4130707999229830e+00 + -1.9713033602265047e+00 1.3264369031097145e+00 -1.4568230361419927e+00 + -2.2002900172759179e+00 1.1683902439150637e+00 -1.5153316098191048e+00 + -2.3499874008733141e+00 9.2109949780356759e-01 -1.6052962981392880e+00 + -2.4233594620759304e+00 5.6994577686031844e-01 -1.7378737841809011e+00 + -2.4917366461341235e+00 1.2636417704747449e-01 -1.9344762786329677e+00 + -2.6533350463863075e+00 -3.7018118464391292e-01 -2.2135846606315188e+00 + -2.9652712222160100e+00 -8.4234816016649749e-01 -2.5702815724544457e+00 + -3.3825255096559017e+00 -1.2387837486257738e+00 -2.9970764765966154e+00 + -3.7957314121739945e+00 -1.5551016803253541e+00 -3.5022577394563541e+00 + -4.1148467164343181e+00 -1.7962305168339046e+00 -4.0570134967235090e+00 + id 14320 + loc 4.1755533218383789e-01 2.0442200824618340e-02 1069 + blend 0.0000000000000000e+00 + interp 3.9134247501035285e-01:2.8979344374663835e-01:2.7268328934568098e-02:3.9133856158560276e-01:9.9559890383595728e-01:2.4669752892713748e-01:1.5586165522737501e+00:2.9683203845234252e-01:2.1505830733302669e+00:3.5450345842375192e-01:2.9373146138738355e+00:3.3872057317943710e-01:3.3711933800638847e+00 + CVs 20 + -3.3929767081664386e-01 3.6714680075758566e-01 -8.5437914325641434e-02 + -6.1096580734355466e-01 7.4146456487447332e-01 -1.2625906515392166e-01 + -8.4865977467926257e-01 1.1260460560180272e+00 -1.3164971494890787e-01 + -1.0947902327963810e+00 1.5146837809797891e+00 -1.4747370627490120e-01 + -1.3918205425709853e+00 1.8877441968661963e+00 -2.2235853305556319e-01 + -1.7591955115475866e+00 2.2052826200626328e+00 -3.8241703159730678e-01 + -2.1754811193123063e+00 2.4104363989591149e+00 -6.5106889781296307e-01 + -2.5642822561202734e+00 2.4484789673777390e+00 -1.0528745862545226e+00 + -2.8156283852947728e+00 2.2968429546693070e+00 -1.5634589400686441e+00 + -2.8848316608131448e+00 2.0030254285993170e+00 -2.0827959319155780e+00 + -2.8100541943013106e+00 1.6102166155740392e+00 -2.5482439024020165e+00 + -2.6105051335966349e+00 1.1130545848932654e+00 -2.9256622510956412e+00 + -2.3549976485114734e+00 5.9106530480844022e-01 -3.1807385363912211e+00 + -2.2323147806512842e+00 2.4292219964589312e-01 -3.4116184470204320e+00 + -2.3701523219278990e+00 2.3435554498434363e-01 -3.7091493444883907e+00 + -2.7390560380973721e+00 6.4541391658819158e-01 -3.8980702691947822e+00 + -3.2037957625471711e+00 1.3068883577553561e+00 -3.6613566616164421e+00 + -3.5598642529589357e+00 1.7212637760086356e+00 -3.2931151613358973e+00 + -3.8013221085808144e+00 1.8598519304301595e+00 -3.6921368054872254e+00 + id 14321 + loc 7.7463304996490479e-01 9.1200011968612671e-01 412 + blend 0.0000000000000000e+00 + interp 3.7999059857237105e-01:3.6295823043347925e-01:1.1340564445533030e-01:3.0648891538862344e-01:8.8954701480914755e-01:3.3528096092451809e-01:1.6272752030271822e+00:3.7947802214947118e-01:1.8998948339747188e+00:3.0214102034414231e-01:2.3059839882655919e+00:3.3141291179694654e-01:3.0785313686133717e+00:3.7998679866638535e-01:3.8139491907038865e+00 + CVs 20 + 7.9971088754232522e-01 1.9516946221368092e-01 -1.4871687213617274e-01 + 1.2769258799978136e+00 2.4956032360673325e-01 -2.7842950379624071e-01 + 1.6714864264811535e+00 2.4446737769764068e-01 -4.1846083385586030e-01 + 2.0865252901142992e+00 2.1948011540334950e-01 -5.7923327552308534e-01 + 2.5204976889582431e+00 1.7371776788437171e-01 -7.6236982897287042e-01 + 2.9729053609553899e+00 1.0667451437745701e-01 -9.6351103108306457e-01 + 3.4429888767740322e+00 1.8835834104322435e-02 -1.1705288513322076e+00 + 3.9251650710367865e+00 -8.9658530266628289e-02 -1.3691786068852358e+00 + 4.4084580074759332e+00 -2.1918895896123547e-01 -1.5484510269690137e+00 + 4.8791437336161234e+00 -3.6673077146157484e-01 -1.6990731699652586e+00 + 5.3203958112009797e+00 -5.2208412647348301e-01 -1.8122050248175086e+00 + 5.7156657099921659e+00 -6.8003662209763238e-01 -1.8899982114036775e+00 + 6.0647652841807060e+00 -8.6032026684001184e-01 -1.9539065511575637e+00 + 6.3778046566978013e+00 -1.0915660945964638e+00 -2.0256164570941650e+00 + 6.6537266981370173e+00 -1.3783895546695952e+00 -2.1062577652929617e+00 + 6.8800112408815757e+00 -1.7010563683360140e+00 -2.1849369657701270e+00 + 7.0471502231231051e+00 -2.0354457125118683e+00 -2.2550957647538303e+00 + 7.1572073827891245e+00 -2.3711185288138235e+00 -2.3203104335361688e+00 + 7.2137096391000384e+00 -2.7176726802273929e+00 -2.3970419138173864e+00 + id 14322 + loc 3.3180582523345947e-01 2.4240434169769287e-01 381 + blend 0.0000000000000000e+00 + interp 4.4489247589835534e-01:2.8176354945205773e-01:9.4304563570671296e-02:3.8400893503891093e-01:9.9984161906184821e-01:4.4488802697359636e-01:1.8299975680639968e+00:4.1067976905249720e-01:2.3371072909102755e+00:3.9399750427846097e-01:3.0382512975246545e+00:4.2441400889594905e-01:3.8561133648140680e+00 + CVs 20 + -7.0992461238550741e-01 1.9007344104581589e-01 -7.7072253545639902e-01 + -1.2234970604191229e+00 2.2618124046630425e-01 -1.2627218745736990e+00 + -1.6783018571563026e+00 1.9051251127200691e-01 -1.6947643787759379e+00 + -2.1206537330893638e+00 1.2435020587537893e-01 -2.1631801304187190e+00 + -2.5391228184003340e+00 3.2104041183466325e-02 -2.6655857195554704e+00 + -2.9317795118003152e+00 -7.5415069407084978e-02 -3.1944113222181323e+00 + -3.3103257876851431e+00 -1.8884961659185262e-01 -3.7381027799946742e+00 + -3.6904748211793836e+00 -3.0757001620095581e-01 -4.2877638061676144e+00 + -4.0803378650952284e+00 -4.4721575434789407e-01 -4.8447228871151973e+00 + -4.4721404269784610e+00 -6.4412071166335139e-01 -5.4139794986762055e+00 + -4.8508919918570284e+00 -9.3555906573990111e-01 -5.9857371127877768e+00 + -5.2103891904385762e+00 -1.3427035892716914e+00 -6.5353948863739078e+00 + -5.5337301146555262e+00 -1.8816806264489190e+00 -7.0334199030404463e+00 + -5.7972436446946176e+00 -2.5398600917163150e+00 -7.4410450137801059e+00 + -5.9926371484813101e+00 -3.2533817786155597e+00 -7.7400397564838510e+00 + -6.1430197813492997e+00 -3.9731611986018089e+00 -7.9506673055877544e+00 + -6.2930962995759607e+00 -4.6975771442047458e+00 -8.0962901397294971e+00 + -6.4966470815509556e+00 -5.4325934171141670e+00 -8.1772697212465104e+00 + -6.7086708914951476e+00 -6.1311322644814776e+00 -8.1891749402083587e+00 + id 14323 + loc 8.1212669610977173e-01 9.4174844026565552e-01 378 + blend 0.0000000000000000e+00 + interp 2.7892328924175391e-01:2.6674163883653890e-01:1.3500762213537476e-01:2.2694148157961569e-01:1.0792146428773561e+00:2.7440836438518168e-01:2.2673801105789626e+00:2.1564682340747743e-01:2.9005077839378792e+00:2.7892050000886148e-01:3.7614848353249259e+00 + CVs 20 + 5.7832458758167060e-01 3.2480053304852263e-01 6.8830815369728071e-02 + 1.0734756682200191e+00 5.4301308534789172e-01 1.0531726391529997e-01 + 1.5494373175275356e+00 6.9403328224613148e-01 1.1044547839302327e-01 + 2.0295274187038368e+00 8.1598544053285071e-01 9.3973762462115473e-02 + 2.4937973869621275e+00 9.2921525633201230e-01 6.8367944047645346e-02 + 2.9303584204708151e+00 1.0377555182803002e+00 4.3819015567328701e-02 + 3.3464506521294184e+00 1.1302857437203455e+00 2.6921647942979576e-02 + 3.7480615117935776e+00 1.1917288779703128e+00 2.2673742802355235e-02 + 4.1276687622773007e+00 1.2150663873348784e+00 3.5537724309914198e-02 + 4.4662452174232321e+00 1.2068812426217392e+00 7.1055392172938880e-02 + 4.7460019624932599e+00 1.1874889329927070e+00 1.3188945573152977e-01 + 4.9683535901549050e+00 1.1820513003839761e+00 2.1815101247561686e-01 + 5.1523217478257681e+00 1.1830187035054853e+00 3.3541657451649531e-01 + 5.2996894828768779e+00 1.1040885722928728e+00 4.8249649989771304e-01 + 5.3822502886955839e+00 8.3667936008682364e-01 6.3818535062935067e-01 + 5.4010360371460191e+00 3.6711185932950707e-01 8.1488442184802601e-01 + 5.4049146618756438e+00 -2.3433375363526832e-01 1.0705633964050660e+00 + 5.4786767852911167e+00 -8.6961175589818884e-01 1.3959565535762781e+00 + 5.6862547430838086e+00 -1.2878631786503694e+00 1.6118315300145019e+00 + id 14324 + loc 6.7873078584671021e-01 2.5885608792304993e-01 399 + blend 0.0000000000000000e+00 + interp 4.6820043039821774e-01:4.2588965029242215e-01:1.3965477367952328e-01:4.1103989303809740e-01:7.6724559299484907e-01:4.6819574839391376e-01:1.0255835517145131e+00:3.5451914410516966e-01:1.6398356324216861e+00:3.9304237335890302e-01:2.0220031737231521e+00:3.3813463134683996e-01:2.9999344630135476e+00:3.3011976654396780e-01:3.8749527033146269e+00 + CVs 20 + 9.2320551501229808e-02 2.3197135874091751e-01 2.3901231037213366e-01 + 1.8739316531510330e-01 4.5805676834103176e-01 4.4999421846698712e-01 + 2.8040792411306226e-01 6.8208766576191504e-01 6.6817052996362503e-01 + 3.7518321103736985e-01 9.1136085533347866e-01 9.1910773103337207e-01 + 4.8181139271007711e-01 1.1480770872548258e+00 1.2011635846704878e+00 + 6.0951320777765805e-01 1.3889083277343834e+00 1.5063936510265705e+00 + 7.6295556467812087e-01 1.6244857641564130e+00 1.8321412844295821e+00 + 9.4537834145790678e-01 1.8385517524984123e+00 2.1786552091610787e+00 + 1.1588835047709591e+00 2.0084295304112474e+00 2.5441745999862531e+00 + 1.3985610862300513e+00 2.1107049503453568e+00 2.9233143662794516e+00 + 1.6523900820793176e+00 2.1224997156450538e+00 3.3014895567967795e+00 + 1.8995496334603903e+00 2.0329569704599479e+00 3.6516673582608670e+00 + 2.1165585854713025e+00 1.8593886651636984e+00 3.9497248544062860e+00 + 2.2857634330811329e+00 1.6378451558273233e+00 4.1847961438379890e+00 + 2.4040235115970980e+00 1.4021859268785279e+00 4.3573689041772274e+00 + 2.4939945487075041e+00 1.1764321759286647e+00 4.4746234234412618e+00 + 2.5926771024359034e+00 9.7432852016704552e-01 4.5294167170096307e+00 + 2.7057197942887505e+00 8.0086996763818452e-01 4.5829653611042644e+00 + 2.6404568328535287e+00 7.9426909132470325e-01 4.8878573248034298e+00 + id 14325 + loc 9.5606124401092529e-01 9.8982357978820801e-01 400 + blend 0.0000000000000000e+00 + interp 4.1755157721073938e-01:2.8966357956272853e-01:9.2041965375696644e-02:3.5518839340519226e-01:9.8012280915909566e-01:4.1754740169496729e-01:1.0525748936373540e+00:2.5281782357602772e-01:2.0351757582239012e+00:1.8352730998428907e-01:2.9981169956237803e+00:3.7466461935594469e-01:3.5810370975714449e+00 + CVs 20 + -2.0008575363445694e-01 2.5160422714881825e-01 -3.6455075046888374e-01 + -3.7508615469435785e-01 5.0875237464508993e-01 -7.2234448714058153e-01 + -5.5427105042776037e-01 7.7465787067346958e-01 -1.0875281431526540e+00 + -7.7654919803123001e-01 1.0359867272543957e+00 -1.4580106407835922e+00 + -1.0732818752884017e+00 1.2622981646221858e+00 -1.8141220618716909e+00 + -1.4469739597299345e+00 1.4184866582996696e+00 -2.1325722212847618e+00 + -1.8696292944752453e+00 1.4781912750308046e+00 -2.4022086395421036e+00 + -2.3010683707434900e+00 1.4307137584906715e+00 -2.6307686043010343e+00 + -2.7092866176671380e+00 1.2752211773449642e+00 -2.8356683286142448e+00 + -3.0643904037940444e+00 1.0112096115445297e+00 -3.0254813605244726e+00 + -3.3447797701556419e+00 6.5113116129334081e-01 -3.1964144074126977e+00 + -3.5822759971320486e+00 2.2040468051201856e-01 -3.3495753699785094e+00 + -3.8434000799132182e+00 -2.5435627955271789e-01 -3.4923692617382875e+00 + -4.1772425570051244e+00 -7.2918384562737493e-01 -3.6292821253773275e+00 + -4.5967891079848258e+00 -1.1557624438815157e+00 -3.7666341071234344e+00 + -5.0709075941666581e+00 -1.5178220215399048e+00 -3.9255849517972243e+00 + -5.5463355336357232e+00 -1.8349217909852573e+00 -4.1432246248007605e+00 + -5.9734856856405907e+00 -2.1179219241225891e+00 -4.4367490263974370e+00 + -6.3251396067649726e+00 -2.3668130125780755e+00 -4.7597679415289758e+00 + id 14326 + loc 1.4399663545191288e-02 5.1012450456619263e-01 396 + blend 0.0000000000000000e+00 + interp 3.4542819386949425e-01:2.7336819964194986e-01:2.0501419883335126e-01:3.2222787623920329e-01:1.1352346432294624e+00:3.0666306783626335e-01:1.9923664894890305e+00:3.4542473958755560e-01:2.6578641193253016e+00:3.0083501477038649e-01:3.1871546207164174e+00 + CVs 20 + 7.9791132723114078e-01 1.8721744119228997e-01 -2.8137539287706215e-01 + 1.3937878050969261e+00 2.1691450995538630e-01 -5.3507908071475874e-01 + 1.9481437494786518e+00 1.8906188601520063e-01 -7.7758419821327762e-01 + 2.5121345067105620e+00 1.3618702751284995e-01 -1.0158368929059640e+00 + 3.0663349185086846e+00 5.6690166815258403e-02 -1.2480961220750078e+00 + 3.5915492027234901e+00 -4.6276845633045127e-02 -1.4780413968368786e+00 + 4.0731199243320093e+00 -1.6763146659205908e-01 -1.7091550224770877e+00 + 4.5041381923002497e+00 -3.0335099550905475e-01 -1.9404441842338827e+00 + 4.8828137695687346e+00 -4.4912105862409080e-01 -2.1686427605921108e+00 + 5.2076791458042697e+00 -5.9782687406467239e-01 -2.3901941679434979e+00 + 5.4882763727929378e+00 -7.4539221067073580e-01 -2.6011085146505866e+00 + 5.7521133409677638e+00 -9.0427039899826900e-01 -2.7996931881790665e+00 + 6.0187345013115454e+00 -1.0942304892882635e+00 -2.9845306747551361e+00 + 6.2876687800157116e+00 -1.3240561581817758e+00 -3.1500510698050452e+00 + 6.5513298109264166e+00 -1.5998302111682059e+00 -3.2918813228398163e+00 + 6.7989198996049307e+00 -1.9340864068257972e+00 -3.4118668512400077e+00 + 7.0128753086755360e+00 -2.3373347413099124e+00 -3.5127632581012538e+00 + 7.1716537421029347e+00 -2.7920901338793165e+00 -3.5895326445019480e+00 + 7.2674066763771537e+00 -3.2310682813276808e+00 -3.6351802144759082e+00 + id 14327 + loc 5.6153637170791626e-01 3.9424011111259460e-01 395 + blend 0.0000000000000000e+00 + interp 5.1971837607633009e-01:2.4368900392208662e-01:4.4815797009411440e-01:2.8426761631603947e-01:1.1274522706757701e+00:2.6769007033946052e-01:1.9895319999291434e+00:5.1971317889256941e-01:2.7713510540826700e+00:2.9612430879244384e-01:3.1919047390262416e+00:4.1065468673018057e-01:3.9999230371922696e+00 + CVs 20 + -3.1006760990082682e-01 1.5516429877092297e-01 3.8050282452370221e-01 + -5.9364706460008509e-01 2.6326402541497990e-01 7.0564312673514484e-01 + -8.8418700160315566e-01 3.5325864396804607e-01 1.0204836534802491e+00 + -1.1968847921029018e+00 4.3756962162061563e-01 1.3388858349851320e+00 + -1.5291872927707497e+00 5.1350576283321958e-01 1.6498698346844334e+00 + -1.8750707598063074e+00 5.7797853019018186e-01 1.9457693022514908e+00 + -2.2268157052060600e+00 6.2838347210083367e-01 2.2230629833827744e+00 + -2.5768533473732580e+00 6.6042771388163080e-01 2.4788355070959169e+00 + -2.9192214981906726e+00 6.6813498799150350e-01 2.7122339494303254e+00 + -3.2501137496930861e+00 6.4565835607723199e-01 2.9300963273754244e+00 + -3.5677494314491338e+00 5.8938088962545399e-01 3.1437389810245637e+00 + -3.8719836940154368e+00 5.0129186015432570e-01 3.3592238785356034e+00 + -4.1635032187470191e+00 3.8737307036774959e-01 3.5768436415342570e+00 + -4.4443381027621438e+00 2.5171634843402479e-01 3.7968685501823951e+00 + -4.7158564700538292e+00 9.3369432089617899e-02 4.0200131824854708e+00 + -4.9763474733265998e+00 -9.0571643629783427e-02 4.2433616717423455e+00 + -5.2213325984669172e+00 -3.0151617934996588e-01 4.4582342426117298e+00 + -5.4428323094049116e+00 -5.3265934689390493e-01 4.6491316217653127e+00 + -5.6063903350076076e+00 -7.2949596888858581e-01 4.7508108439122836e+00 + id 14328 + loc 9.4962403178215027e-02 2.3353011906147003e-01 379 + blend 0.0000000000000000e+00 + interp 3.8811597308528906e-01:2.1470281953999540e-01:6.4895470253872878e-02:2.6989555712043589e-01:9.0052502112510813e-01:1.8493570953618510e-01:1.1690153278107573e+00:3.4263456236681622e-01:1.7249095346525918e+00:3.8811209192555823e-01:2.2743568773941791e+00:2.6609350354138595e-01:2.9943667585307638e+00:2.3618684646864219e-01:3.6443943969619093e+00 + CVs 20 + 3.1124131065553690e-01 3.7407062986559853e-01 2.7840771726501229e-01 + 6.5427416637735769e-01 6.4594019363861377e-01 4.8536958976895006e-01 + 1.0413750124014987e+00 7.9736346714594075e-01 6.5549185947284672e-01 + 1.4634989930511932e+00 8.7236019864765613e-01 8.1384386050587509e-01 + 1.8959109376210712e+00 9.3276783993049106e-01 9.8101435680582971e-01 + 2.3111643690136932e+00 1.0152579206634436e+00 1.1839601145638734e+00 + 2.6786824366007620e+00 1.1225273534819344e+00 1.4421557925258295e+00 + 2.9750379774639444e+00 1.2420028833871983e+00 1.7539529516874273e+00 + 3.1895209300310929e+00 1.3644829814079207e+00 2.0971319121828240e+00 + 3.3207750827460245e+00 1.4899710971440441e+00 2.4376661085819782e+00 + 3.3873212587174812e+00 1.6301556944649005e+00 2.7426059755013781e+00 + 3.4311226620341597e+00 1.8140676990379649e+00 2.9969186746064782e+00 + 3.4859190968484830e+00 2.0723166601057987e+00 3.2380528306928711e+00 + 3.5420785251410232e+00 2.3833759604496234e+00 3.5630320359590746e+00 + 3.5371117233350624e+00 2.6746626137448786e+00 4.0380628988310363e+00 + 3.3455200867791666e+00 2.8820367411601899e+00 4.6062743501713506e+00 + 2.8675512008509525e+00 2.9788554726871102e+00 5.1473915389894147e+00 + 2.2717340597432485e+00 2.8091284393866141e+00 5.6271134261677496e+00 + 2.3717153744673398e+00 2.3826493118108174e+00 5.9453961407968619e+00 + id 14329 + loc 8.3739852905273438e-01 6.7440927028656006e-02 401 + blend 0.0000000000000000e+00 + interp 4.6115612245120313e-01:3.4651196409620999e-01:3.3513815458265972e-01:3.2640022899271010e-01:1.0026396291626527e+00:3.5641485190539246e-01:1.7487672349696615e+00:4.2374764686801691e-01:2.1999383656696612e+00:3.5575931957803253e-01:2.9976384577964383e+00:4.6115151088997863e-01:3.8466653907803994e+00 + CVs 20 + 7.4293910715934372e-02 2.9333322251763216e-01 2.2194535425464279e-01 + 1.6270072379914596e-01 5.6617094965411097e-01 4.1596700861249708e-01 + 2.5646427475669142e-01 8.2490687389519957e-01 6.0241016453792140e-01 + 3.5374574173809248e-01 1.0737506086625392e+00 7.9593067500191417e-01 + 4.6008881351599157e-01 1.3099920590012857e+00 1.0071595763937295e+00 + 5.8241829194894690e-01 1.5250003200543956e+00 1.2470461627675316e+00 + 7.2810930591786904e-01 1.6986409945441725e+00 1.5243375210712493e+00 + 9.0525258011673249e-01 1.8086001390436941e+00 1.8351642345573798e+00 + 1.1258488182606625e+00 1.8617875909759571e+00 2.1640425363362294e+00 + 1.4014949684657241e+00 1.8742203141273186e+00 2.5033334875048814e+00 + 1.7157393156182987e+00 1.8117210706000653e+00 2.8459258970063588e+00 + 2.0216782481947289e+00 1.6313423928124611e+00 3.1581186114042019e+00 + 2.3091039963278610e+00 1.3666595914300945e+00 3.4141174225001079e+00 + 2.6195141608361778e+00 1.0861031619213328e+00 3.6192696042071644e+00 + 2.9695368136178821e+00 8.1549343346769776e-01 3.7642064259193826e+00 + 3.2975556580851206e+00 5.5334203307436236e-01 3.8108597468888927e+00 + 3.5129016829014854e+00 3.2773254425240222e-01 3.7499906843578965e+00 + 3.7023607333362185e+00 1.6274976994624191e-01 3.6424702885803679e+00 + 4.1697833132665068e+00 2.0545956880579680e-01 3.5690534966989924e+00 + id 14330 + loc 5.9591937065124512e-01 7.5562328100204468e-02 402 + blend 0.0000000000000000e+00 + interp 4.6948327154131014e-01:2.6369676328127922e-01:1.0024371010341331e+00:3.5829957021882497e-01:1.7021370361645960e+00:4.6947857670859477e-01:2.1035918322023894e+00:2.8923288458054752e-01:2.7731179542845608e+00:4.0644634751195485e-01:3.0759460204154414e+00:2.8251716793011222e-01:3.9922385601172747e+00 + CVs 20 + 2.5150937936581491e-01 2.9515412716060396e-01 1.2949536820821267e-01 + 4.8255376568241054e-01 5.9582760869145523e-01 2.7137109022842776e-01 + 7.0364030908174691e-01 8.9048882552706954e-01 4.1994384816359071e-01 + 9.2512695711893256e-01 1.1642801121006350e+00 5.6403813252790980e-01 + 1.1610426615149601e+00 1.4034752062548383e+00 6.8866954668701608e-01 + 1.4279686328566261e+00 1.6017978319153297e+00 7.8264769924899069e-01 + 1.7456927817266825e+00 1.7557720095320892e+00 8.4280207144178565e-01 + 2.1373931172889749e+00 1.8537356171886277e+00 8.7760373570665540e-01 + 2.6105449301288544e+00 1.8794419648524490e+00 9.1458178897122844e-01 + 3.1444144074233837e+00 1.8135345905266345e+00 9.9096375613150278e-01 + 3.6583643383918325e+00 1.6217893674537165e+00 1.1220462972872454e+00 + 4.0344380679484759e+00 1.3241628418313245e+00 1.2696927146884676e+00 + 4.2655145435032100e+00 1.0024346118627281e+00 1.3970116782654891e+00 + 4.4386384749750265e+00 7.0366846917205983e-01 1.5067042635821484e+00 + 4.6642931601841218e+00 4.3965030073191880e-01 1.6171060242397521e+00 + 5.0577581736904200e+00 2.2788247720926885e-01 1.7526147600565221e+00 + 5.6456645658616562e+00 9.7393042342816760e-02 1.9431367739435279e+00 + 6.3252261181358058e+00 5.9523351080047748e-02 2.2088867799743124e+00 + 6.8939932690968453e+00 1.4032193755054534e-01 2.4987357298336548e+00 + id 14331 + loc 4.3830025196075439e-01 6.7360121011734009e-01 404 + blend 0.0000000000000000e+00 + interp 4.6900755697642138e-01:3.9366065859198934e-01:3.4214490482725735e-03:4.5763425292014825e-01:7.9731274191025814e-01:4.6900286690085163e-01:1.1552687961427546e+00:3.2597794573185079e-01:1.9818206917576147e+00:2.8399327076088265e-01:2.9350915980781220e+00:4.0672111004106187e-01:3.6476429849455156e+00 + CVs 20 + -1.1396099822515160e-04 1.2191471881716093e-01 -5.1235286595677360e-03 + 4.9219164533190751e-02 2.3553702179412461e-01 -3.8936961544693068e-02 + 9.2004370334343277e-02 3.7179702023588634e-01 -5.3377556089206080e-02 + 1.4057889280474498e-01 5.0411084175077947e-01 -6.1769170601167794e-02 + 1.9984596106621488e-01 6.2619585368369346e-01 -6.8656247663151732e-02 + 2.7034804122823047e-01 7.3518833994557775e-01 -7.6391286661578628e-02 + 3.5085457472246823e-01 8.2905235200284344e-01 -8.6593839080913448e-02 + 4.3919651602571330e-01 9.0804763623610463e-01 -9.8152087280415107e-02 + 5.3337429101762812e-01 9.7574841527230216e-01 -1.0616146575955127e-01 + 6.3295937393870783e-01 1.0343891728195311e+00 -1.0760488315491659e-01 + 7.3762065414783473e-01 1.0755166956635893e+00 -1.1229546909602628e-01 + 8.4350596492398555e-01 1.0860500700419400e+00 -1.3648381081363353e-01 + 9.4057882175391561e-01 1.0569398112525967e+00 -1.9238941228914133e-01 + 1.0177669982628710e+00 9.9332862611559780e-01 -2.7460327867802453e-01 + 1.0748246635719894e+00 9.0983110190657346e-01 -3.6373139368773361e-01 + 1.1158153126616606e+00 8.1325826993522998e-01 -4.4910735865519769e-01 + 1.1366013011062772e+00 7.0001028888672079e-01 -5.3255899347336633e-01 + 1.1226141537663707e+00 5.6403548395352265e-01 -6.1981085088560317e-01 + 1.2182274593383080e+00 4.5686396138887642e-01 -6.2619526553064642e-01 + id 14332 + loc 2.2248829901218414e-01 3.1262062489986420e-02 1079 + blend 0.0000000000000000e+00 + interp 4.8955749806615168e-01:4.6824869884928855e-01:8.9683899879877171e-01:4.8955260249117105e-01:1.5028367516492502e+00:2.9315173278102541e-01:1.9774111176359450e+00:2.7369771859126457e-01:2.5684141669900011e+00:4.1216139413593500e-01:3.0346044228070399e+00:2.9330311017516986e-01:3.9018517768365806e+00 + CVs 20 + 2.6843446770350293e-01 4.5502605905022936e-01 4.8406002679665550e-02 + 3.6975893149295669e-01 8.2703415746298925e-01 6.3387109726422419e-02 + 4.0257767843026404e-01 1.1663663854095869e+00 6.3793423099309854e-02 + 4.0963641921562094e-01 1.4760620903684192e+00 6.2206872880980868e-02 + 3.9618752754856046e-01 1.7370899757511584e+00 6.5203932301791223e-02 + 3.7720576990525456e-01 1.9342273826244771e+00 9.0352123225492131e-02 + 3.7677775301658267e-01 2.0877199352487232e+00 1.5926141698999913e-01 + 3.9067057783900228e-01 2.2702110779945999e+00 2.5408911570608916e-01 + 3.5251214886757598e-01 2.4969377892849458e+00 2.9702963018412420e-01 + 2.3917592936355314e-01 2.6772182017344197e+00 2.6167259502191809e-01 + 9.4222039327777951e-02 2.7759086631474386e+00 1.8260589565926422e-01 + -5.0395131579511254e-02 2.8171113468027649e+00 7.9538805201621710e-02 + -1.7679076436838859e-01 2.8319841175859022e+00 -4.8255403696061516e-02 + -2.7731346869139828e-01 2.8461561178973556e+00 -2.2103324903854626e-01 + -3.5797611365200965e-01 2.8622404385181501e+00 -4.7309938224837111e-01 + -4.1337567744143378e-01 2.8274080622223927e+00 -7.9545976797842644e-01 + -3.9623859358995328e-01 2.6872907355428177e+00 -1.1525987111756761e+00 + -3.2031553912225375e-01 2.4188017803915578e+00 -1.4172189248557152e+00 + -4.1530514476050229e-01 2.3537838714435857e+00 -1.0874767594671133e+00 + id 14333 + loc 3.0686259269714355e-01 8.5948988795280457e-02 412 + blend 0.0000000000000000e+00 + interp 4.4489741136685024e-01:3.6449679476763458e-01:7.7586598568491660e-01:2.6576663990211075e-01:1.7405287097444415e+00:4.4489296239273657e-01:2.3872152133451738e+00:2.9208290074926896e-01:3.0004614598623771e+00:3.7923418339729131e-01:3.4997901131660489e+00:3.2202173090109615e-01:3.9997713276502189e+00 + CVs 20 + -1.5587047177713817e-01 1.4955394570732258e-01 -4.2171364408494844e-01 + -3.0471512432454706e-01 2.4424507147920468e-01 -7.4252738015936448e-01 + -4.4734185132948212e-01 3.2391434964726662e-01 -1.0492330928829454e+00 + -5.7942759109536968e-01 4.1403326925205286e-01 -1.3908338266414133e+00 + -6.9471926730447420e-01 5.1115170309351132e-01 -1.7648997378304747e+00 + -7.8529217959295072e-01 6.1137973582497662e-01 -2.1660633319303804e+00 + -8.4435826376355738e-01 7.1072137500152388e-01 -2.5859445465933231e+00 + -8.6936638074145889e-01 8.0462343184014140e-01 -3.0144378366131881e+00 + -8.6224008640874006e-01 8.8872962331380212e-01 -3.4407462535677209e+00 + -8.2704674213532448e-01 9.6039740995512257e-01 -3.8539413721290261e+00 + -7.7211180238376520e-01 1.0152257225504899e+00 -4.2486214650474468e+00 + -7.1833965117684584e-01 1.0364375805051897e+00 -4.6356192463578330e+00 + -6.9918305529565583e-01 9.9931865914388740e-01 -5.0267574988020733e+00 + -7.3544908223184036e-01 9.0221971226882536e-01 -5.4025813714260540e+00 + -8.1887324791292659e-01 7.6550004392952964e-01 -5.7366812716780640e+00 + -9.3484882327327068e-01 6.0610088831180686e-01 -6.0152323402524202e+00 + -1.0704846933225893e+00 4.4102330869692485e-01 -6.2270617337634970e+00 + -1.2083288838220336e+00 2.8768455037365337e-01 -6.3688813804232609e+00 + -1.3160346033843204e+00 1.6975342409544636e-01 -6.4438384735444227e+00 + id 14334 + loc 2.9504176974296570e-01 9.7174113988876343e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1100828170790593e-01:3.3483587362593703e-01:3.2385730137012159e-01:1.1394768320471012e-01:1.6629136691766435e+00:4.1100417162508890e-01:2.1547445686799462e+00:3.1415930102211381e-01:3.0112998055020417e+00:3.0406071749964503e-01:3.8645608683682680e+00 + CVs 20 + 2.5137556937038991e-01 2.3708199852923650e-01 -1.3596907356571913e-01 + 4.9922038666715940e-01 4.8765950398918267e-01 -2.6219242746959065e-01 + 7.5636846165072513e-01 7.5349910212952143e-01 -3.8544526475716123e-01 + 1.0222602049243994e+00 1.0444446752686911e+00 -5.1951155469578869e-01 + 1.2841567568297458e+00 1.3731327849505175e+00 -6.8779687371012987e-01 + 1.5241742624486898e+00 1.7404632378965648e+00 -9.2285863115082645e-01 + 1.7205184711163350e+00 2.1243191800408305e+00 -1.2613311207936502e+00 + 1.8564451588127764e+00 2.4747607179084943e+00 -1.7310728985541894e+00 + 1.9244948542494611e+00 2.7206090722565572e+00 -2.3360186645650831e+00 + 1.9230455180885691e+00 2.7938701066992992e+00 -3.0380938320738218e+00 + 1.8670358492335581e+00 2.6694529099533240e+00 -3.7584008931014443e+00 + 1.8037423985848493e+00 2.3898928554475423e+00 -4.4183316824774703e+00 + 1.7899901475820275e+00 2.0304574611666757e+00 -4.9866031932593122e+00 + 1.8652737750110637e+00 1.6536531707931137e+00 -5.4625563097514505e+00 + 2.0647392025235654e+00 1.3094087493850770e+00 -5.8387503261831908e+00 + 2.4479062718253575e+00 1.0746334454658346e+00 -6.0615119538446462e+00 + 2.9954361754255716e+00 1.0964735263273271e+00 -6.0250384076932351e+00 + 3.4620331685504486e+00 1.2987312268208480e+00 -5.8253108602311467e+00 + 3.8517689334219622e+00 1.1182822386038385e+00 -5.8972527149546323e+00 + id 14335 + loc 3.0310529470443726e-01 2.0880420506000519e-01 400 + blend 0.0000000000000000e+00 + interp 4.1324595995514440e-01:3.0507709056602372e-01:1.9726804555354194e-01:4.1324182749554489e-01:9.0618935618645291e-01:3.1100673888841007e-01:1.1598535097969576e+00:3.1281517940626169e-01:2.1363812065215315e+00:3.1345193680485728e-01:3.2377286539790173e+00 + CVs 20 + -1.6958427874154877e-01 9.0124089856036677e-02 1.8896263379893657e-01 + -3.3830898146379146e-01 1.8141571633634992e-01 3.8785628563940988e-01 + -5.0353094536712040e-01 2.6990293374253749e-01 5.7945264959978759e-01 + -6.6032900982392828e-01 3.5278996911832350e-01 7.4969369814230813e-01 + -7.9952432397713313e-01 4.2960908486180072e-01 8.9164730440715301e-01 + -9.0926160322201866e-01 5.0544228109999234e-01 9.9688853205027650e-01 + -9.8079338098952062e-01 5.9449228861683301e-01 1.0639991994718283e+00 + -1.0202392557069140e+00 7.1478877415138986e-01 1.1104389404926152e+00 + -1.0571002538447152e+00 8.6516400287249406e-01 1.1709145424634764e+00 + -1.1331887655974082e+00 1.0250412909332607e+00 1.2461875525352846e+00 + -1.2710871698241295e+00 1.1749286057903663e+00 1.3082868972440036e+00 + -1.4469455988495459e+00 1.2817623609095348e+00 1.3790564954272990e+00 + -1.6223256958340539e+00 1.3466646929691797e+00 1.4910345928144777e+00 + -1.8079041393172641e+00 1.4028028106737449e+00 1.6314127929746300e+00 + -1.9988122452938413e+00 1.4124674972385998e+00 1.7732001330294951e+00 + -2.0808511721663407e+00 1.2118886912447298e+00 1.8806301751851864e+00 + -1.9765465007133334e+00 5.3766681026484520e-01 1.9697099843524901e+00 + -2.0598797096691217e+00 -3.5293351254828120e-01 2.1545244341088940e+00 + -2.2219780003869793e+00 -2.1219468546972797e-01 2.1723235895889745e+00 + id 14336 + loc 8.4233438968658447e-01 8.6418949067592621e-02 395 + blend 0.0000000000000000e+00 + interp 5.0392453635390622e-01:2.5947157267384113e-01:9.5472095198145812e-04:2.5806150838883135e-01:1.0147796050563116e+00:5.0391949710854267e-01:1.9383266681766123e+00:3.3807460745633938e-01:2.5228883267693840e+00:2.5685655645205796e-01:2.9987521345656338e+00 + CVs 20 + -3.1544676729006377e-01 1.3850387346087054e-01 3.8660141671029313e-01 + -5.6255309889523686e-01 2.2885466945273109e-01 6.9233402276865252e-01 + -7.8855744897685076e-01 3.1326152616041725e-01 9.7816779804172083e-01 + -1.0139528199588148e+00 4.1665050001702464e-01 1.2670362086487974e+00 + -1.2466960192622909e+00 5.4086558612468361e-01 1.5560508443354650e+00 + -1.4985003186333048e+00 6.8312687836573405e-01 1.8435275288515867e+00 + -1.7759885274371310e+00 8.3988142556567502e-01 2.1317628400849946e+00 + -2.0829922866410304e+00 1.0029150311776651e+00 2.4254888784062860e+00 + -2.4295268080812487e+00 1.1495923846183769e+00 2.7279565682867766e+00 + -2.8229093867760113e+00 1.2463471748469335e+00 3.0395632453878934e+00 + -3.2494121443295811e+00 1.2643544641426741e+00 3.3645261028879423e+00 + -3.6756869385208981e+00 1.1925661653216697e+00 3.7119357949461853e+00 + -4.0720030326217724e+00 1.0382170844875098e+00 4.0859617380929665e+00 + -4.4230863524204214e+00 8.1582310118014467e-01 4.4838322152982624e+00 + -4.7155519187114425e+00 5.4246481693916504e-01 4.9060930401577778e+00 + -4.9337181011961206e+00 2.3167238248168909e-01 5.3574182561184287e+00 + -5.0623945436276028e+00 -1.1686610186204183e-01 5.8292090453638847e+00 + -5.0856614055045117e+00 -4.9814255823842535e-01 6.2880149054112175e+00 + -5.0055909099794569e+00 -8.4140572585800566e-01 6.6835174945503653e+00 + id 14337 + loc 2.3861485719680786e-01 1.0151137411594391e-01 393 + blend 0.0000000000000000e+00 + interp 4.5031106842011198e-01:3.0467925101284421e-01:1.2158822270255198e-01:3.8065377291896613e-01:8.0530214229302843e-01:3.0623276941009003e-01:1.4446830240354116e+00:3.2224809766712181e-01:2.1547643609762286e+00:4.5030656530942781e-01:2.9975419385006754e+00:3.0791787269376814e-01:3.7217724534457082e+00 + CVs 20 + -1.2588447268549557e-01 2.4590879880469721e-01 4.0927031999212965e-01 + -2.6864238499479354e-01 5.1273447062250610e-01 7.9848266653175926e-01 + -4.0776651879119069e-01 8.1129695270259061e-01 1.1525092991094379e+00 + -5.3891988267969293e-01 1.1216660640748632e+00 1.4532151535691860e+00 + -6.8578072595431971e-01 1.4218016039318506e+00 1.7011566139314245e+00 + -8.7812725860866669e-01 1.7065390355686672e+00 1.9120957751596084e+00 + -1.1239224330703557e+00 1.9728982885317365e+00 2.0884586318864056e+00 + -1.4098344112216445e+00 2.2149890055751800e+00 2.2304807132941749e+00 + -1.7217200314082917e+00 2.4273702463216971e+00 2.3541640491692739e+00 + -2.0440515859137736e+00 2.6089636951027662e+00 2.4847333813738901e+00 + -2.3616344209041666e+00 2.7628034310311498e+00 2.6484734774669074e+00 + -2.6695285076113442e+00 2.8901501132679179e+00 2.8663544445317126e+00 + -2.9796352494361686e+00 2.9864118272362807e+00 3.1462266577501277e+00 + -3.3141361985709987e+00 3.0353009534716437e+00 3.4828855174127584e+00 + -3.6734978264925440e+00 2.9996861456059580e+00 3.8672287217859367e+00 + -4.0116863529413163e+00 2.8559462329844076e+00 4.2726981088597249e+00 + -4.2862885417519898e+00 2.6462682622823612e+00 4.6667464866386537e+00 + -4.4639219330438031e+00 2.4353114447485211e+00 5.0718466214082696e+00 + -4.4218812441430426e+00 2.3128979036953643e+00 5.5749438534307387e+00 + id 14338 + loc 8.7989294528961182e-01 7.4518048763275146e-01 402 + blend 0.0000000000000000e+00 + interp 3.6993356733756855e-01:2.9436867954044715e-01:3.1174048473386795e-01:3.6992986800189520e-01:9.6579030780894914e-01:2.4741145494931222e-01:1.5021194763344758e+00:2.7452804715871670e-01:2.7501392533610960e+00:3.3849278847084713e-01:3.6448067338616044e+00 + CVs 20 + -3.6852744531255935e-02 1.6771369336198097e-01 -3.3780132873410962e-01 + -2.1113336081808237e-02 3.4340096560755373e-01 -6.6717611889063422e-01 + 2.1308339648417052e-03 5.2291097095646089e-01 -9.9078363653665535e-01 + 2.8328983924913675e-02 7.0002562461233986e-01 -1.2994898883468911e+00 + 5.2836264500204289e-02 8.7437850877430456e-01 -1.5922142678970275e+00 + 9.3231093300492229e-02 1.0362967669988352e+00 -1.8598798832076699e+00 + 1.8089116477092310e-01 1.1686932218057897e+00 -2.0880400198247964e+00 + 3.2592016148035352e-01 1.2607320065144600e+00 -2.2670882021990701e+00 + 5.0150650395264740e-01 1.3335921048085455e+00 -2.4000089322278941e+00 + 7.2829767166649617e-01 1.4209887623968558e+00 -2.4349881612969799e+00 + 1.1119808372130817e+00 1.3338882719017391e+00 -2.1643546434384087e+00 + 1.3994133022217357e+00 9.5887791539536993e-01 -1.6968591633124608e+00 + 1.5217610751443555e+00 6.7982399042803165e-01 -1.5011144625054724e+00 + 1.6596862800862409e+00 5.7039673079536213e-01 -1.6115426248767886e+00 + 1.7922553424873271e+00 5.0924050715468483e-01 -1.9446495288556847e+00 + 1.8565678612542813e+00 4.2981396536209560e-01 -2.3704552736130884e+00 + 1.8391935049466306e+00 3.2159199883862888e-01 -2.8013083049007266e+00 + 1.7414451795391370e+00 1.9002478753635144e-01 -3.2236955353409540e+00 + 1.8167055343655560e+00 1.9723620346079906e-01 -3.3389935211308535e+00 + id 14339 + loc 7.7826821804046631e-01 3.8031405210494995e-01 401 + blend 0.0000000000000000e+00 + interp 4.4284069882462151e-01:4.3675326153279748e-01:2.2961751788444640e-01:3.6170923101713237e-01:9.5734989179624552e-01:4.4283627041763329e-01:1.6502507881282762e+00:3.5111284331529502e-01:2.1973064628725050e+00:3.3845603933819940e-01:3.0628471726856414e+00:3.3135762129274038e-01:3.8687015801383247e+00 + CVs 20 + 9.9550893205088906e-02 3.0752903528424208e-01 1.1245215345761814e-01 + 1.9565819221167630e-01 6.1555939371009460e-01 2.4018420041515864e-01 + 2.8236287858495424e-01 9.2097279049351866e-01 3.7030327284681519e-01 + 3.5743538128607727e-01 1.2215968527611736e+00 5.0026672864713195e-01 + 4.2274957889124282e-01 1.5160213082089788e+00 6.3865772774721652e-01 + 4.8201856427850792e-01 1.8019020516635638e+00 7.9256161778133949e-01 + 5.3949083706451162e-01 2.0772563115291187e+00 9.6593069155223288e-01 + 6.0003707309558041e-01 2.3398368069689122e+00 1.1598535097849418e+00 + 6.7384493878513496e-01 2.5879299529380804e+00 1.3721984530969003e+00 + 7.7482784847018205e-01 2.8202174383053995e+00 1.6015135276869803e+00 + 9.0473067536717233e-01 3.0306824781174169e+00 1.8539908896554147e+00 + 1.0476459205188469e+00 3.2032510776779231e+00 2.1408621916667183e+00 + 1.1859715675752966e+00 3.3043826243017755e+00 2.4626316832554696e+00 + 1.3064049496518422e+00 3.2900813118175956e+00 2.7852783417238580e+00 + 1.4015628884928839e+00 3.1588439321780060e+00 3.0557737266522729e+00 + 1.4830428101606197e+00 2.9537274192896215e+00 3.2516325994175830e+00 + 1.5708272702190786e+00 2.7200013421921998e+00 3.3806391506706257e+00 + 1.7109890020696066e+00 2.5021459555473076e+00 3.4713462941853539e+00 + 2.0501220085885774e+00 2.3930392761404997e+00 3.5438715587891081e+00 + id 14340 + loc 5.4072450846433640e-02 1.7009226977825165e-01 378 + blend 0.0000000000000000e+00 + interp 4.6335504624753970e-01:3.2521817571545081e-01:1.3935739827136429e-01:4.6335041269707727e-01:8.2535513640104807e-01:3.2451011257355167e-01:1.1984808191816281e+00:3.5739299573391015e-01:2.2399985970479808e+00:3.4067098849120342e-01:3.1741903966113423e+00 + CVs 20 + 3.7271094681968842e-01 2.4544592300270751e-01 -4.1723694334393724e-01 + 6.5770458739920856e-01 4.2203818401216170e-01 -8.2384053899322440e-01 + 9.1924892650503576e-01 5.6370254190813140e-01 -1.2257997674064103e+00 + 1.1905437520788986e+00 6.9302959314467738e-01 -1.6189737073736885e+00 + 1.4769529833301303e+00 8.0925995951444862e-01 -1.9793656470058960e+00 + 1.7733511899276326e+00 9.0317330270397989e-01 -2.2859044294585225e+00 + 2.0723431942240529e+00 9.7135991200794036e-01 -2.5292360967332286e+00 + 2.3671443711314173e+00 1.0196210139578108e+00 -2.7078624464570926e+00 + 2.6526164517692141e+00 1.0588863333255862e+00 -2.8261797880123867e+00 + 2.9300083833020736e+00 1.1006485417979015e+00 -2.8953753017514154e+00 + 3.2063573129576675e+00 1.1530871729085135e+00 -2.9337302055950678e+00 + 3.4932298099889221e+00 1.2167491496830793e+00 -2.9657633203841622e+00 + 3.8104202722370681e+00 1.2639171036877435e+00 -3.0139955090061443e+00 + 4.1596314052565626e+00 1.2221487359589305e+00 -3.0781643158223999e+00 + 4.5057838398690802e+00 1.0450687127524443e+00 -3.1348333280220335e+00 + 4.8383767957305270e+00 7.6056123620024030e-01 -3.1733619393667305e+00 + 5.1904611013253428e+00 4.0818384474890523e-01 -3.2050739054138138e+00 + 5.5790820670244869e+00 2.9154187997231684e-02 -3.2783972248635025e+00 + 5.8635502252003295e+00 -1.7381085284824405e-01 -3.4850823266312272e+00 + id 14341 + loc 8.7700426578521729e-01 7.4304813146591187e-01 396 + blend 0.0000000000000000e+00 + interp 3.5165129043256965e-01:3.4468000358424916e-01:5.7665413649304054e-01:2.9182865536339853e-01:1.1630422958020903e+00:3.5164777391966534e-01:1.9835897850370412e+00:2.5312191410888746e-01:2.9574293153550570e+00:2.7033535296909245e-01:3.9150480182839296e+00 + CVs 20 + 9.4922031442883237e-01 1.3117686630891404e-01 -4.1700014706088123e-01 + 1.5621181280512177e+00 9.8772498391490771e-02 -7.1644777608911381e-01 + 2.0757491535867501e+00 1.5763593870848303e-02 -9.7052679414064080e-01 + 2.5694586989236288e+00 -6.3675837625922105e-02 -1.2023010814493824e+00 + 3.0386605575788237e+00 -1.2356425340753807e-01 -1.4201095136179074e+00 + 3.4865920354706956e+00 -1.5288143355677475e-01 -1.6439184466375256e+00 + 3.9212123653601623e+00 -1.4799474769004917e-01 -1.8971571353194192e+00 + 4.3533562814348583e+00 -1.1639754179040773e-01 -2.2015315016919303e+00 + 4.7967355163132899e+00 -8.2100534656008861e-02 -2.5705526079791881e+00 + 5.2558754870296909e+00 -8.1920999143321183e-02 -3.0033347737530285e+00 + 5.7094125474881556e+00 -1.4902749197733955e-01 -3.4878002954629501e+00 + 6.1217934268041585e+00 -3.0333915252548893e-01 -4.0097014454152102e+00 + 6.4739370431830414e+00 -5.6895582643438636e-01 -4.5584141912885787e+00 + 6.7518145796768847e+00 -9.5717850758034539e-01 -5.1061479717363074e+00 + 6.9442008504803399e+00 -1.4592629997714768e+00 -5.6183887396337040e+00 + 7.0444128469352307e+00 -2.0589478736103040e+00 -6.0731189836997981e+00 + 7.0494599873049699e+00 -2.7367310606037432e+00 -6.4531734610332574e+00 + 6.9665295275372499e+00 -3.4515449461780769e+00 -6.7354877708361176e+00 + 6.8550271100412843e+00 -4.0626421653817637e+00 -6.9006857655969922e+00 + id 14342 + loc 5.5199796333909035e-03 5.4221726953983307e-02 381 + blend 0.0000000000000000e+00 + interp 4.9433140939567416e-01:3.0440276971763852e-01:2.5343588541118656e-01:4.2452607221393773e-01:1.2421426265538607e+00:1.9780891404176704e-01:2.0691213579980166e+00:4.0743661357199601e-01:2.7685199714202531e+00:4.9432646608158021e-01:3.1420860706515401e+00:4.1015749545181196e-01:3.6255309837974270e+00 + CVs 20 + -5.7013545904529450e-01 1.9201958543339287e-01 -8.2444230216148939e-01 + -9.7919519261112375e-01 2.6857536223179279e-01 -1.4104643749015919e+00 + -1.3327371436321720e+00 3.1859300126149703e-01 -1.9372143332136180e+00 + -1.6704869382286620e+00 3.7700458834302530e-01 -2.4743728654382298e+00 + -1.9919645085437065e+00 4.4376243969687779e-01 -3.0225278713532053e+00 + -2.3042204475036203e+00 5.1610778316369421e-01 -3.5932830576594372e+00 + -2.6221354685067486e+00 5.7680622292933748e-01 -4.1987921207183865e+00 + -2.9591982115597157e+00 5.8952077321848428e-01 -4.8444873579750576e+00 + -3.3214926631575525e+00 5.0358958499248185e-01 -5.5262063498757463e+00 + -3.7091564240110872e+00 2.6893897568925085e-01 -6.2190606161817739e+00 + -4.1120534065767487e+00 -1.4533605071389211e-01 -6.8661117305653789e+00 + -4.5072940496025700e+00 -7.4929615806350514e-01 -7.3965596252951205e+00 + -4.8589304828076427e+00 -1.5146444522537403e+00 -7.7390799441947511e+00 + -5.1380379301009613e+00 -2.3415270839012670e+00 -7.8551140366841983e+00 + -5.3574533847796166e+00 -3.1264866995798650e+00 -7.7925741750954129e+00 + -5.5563994408424682e+00 -3.8397299616627536e+00 -7.6453491002407077e+00 + -5.7744369655230532e+00 -4.4846658991614303e+00 -7.4795249158794519e+00 + -6.0207264467084922e+00 -5.0546125660702712e+00 -7.3118823306395520e+00 + -6.2143818692279567e+00 -5.5609069462581555e+00 -7.1488835849171473e+00 + id 14343 + loc 2.6962906122207642e-01 8.1547784805297852e-01 399 + blend 0.0000000000000000e+00 + interp 4.7244106334504948e-01:3.2750393464535826e-01:3.1951338892957426e-01:2.9118967304563548e-01:9.9165916315994285e-01:4.4317435804267974e-01:1.2392912162128142e+00:3.2425900499083032e-01:2.0638624740260969e+00:4.1286922330551956e-01:2.7311572903844441e+00:3.5238357602225895e-01:3.1435814668023045e+00:4.7243633893441606e-01:3.9471712449912921e+00 + CVs 20 + -1.0757250958618364e-01 3.6960488728926888e-01 -4.1016861533260335e-01 + -2.5360292130303136e-01 7.4395186037756100e-01 -7.9366447127194317e-01 + -4.3079802178258270e-01 1.1081878566809167e+00 -1.1793174634464108e+00 + -6.4776888179043368e-01 1.4591947618644063e+00 -1.5730882016082521e+00 + -9.2206386001589458e-01 1.7922039437003423e+00 -1.9622902591175542e+00 + -1.2731683365280428e+00 2.0889320090333321e+00 -2.3199653145429919e+00 + -1.7069808754019000e+00 2.3053801473494429e+00 -2.6110665529560482e+00 + -2.1962282744537198e+00 2.3737202408940132e+00 -2.7990473807756873e+00 + -2.6634247439286098e+00 2.2605428491649073e+00 -2.8558036067764232e+00 + -3.0467650647358426e+00 2.0185585887103445e+00 -2.8062412199984794e+00 + -3.3563075159485094e+00 1.6975311976895535e+00 -2.7108170579178483e+00 + -3.6266744961445947e+00 1.3046117345422004e+00 -2.6287399055195411e+00 + -3.8850248793454956e+00 8.5324232930692689e-01 -2.6122476966315267e+00 + -4.1561487117115403e+00 4.1015636477734962e-01 -2.6962424702587513e+00 + -4.4668249515978378e+00 6.2547069889317949e-02 -2.8818509538117687e+00 + -4.8275109721307752e+00 -1.1834754184632194e-01 -3.1464048496771864e+00 + -5.2001564628208632e+00 -6.0744068992019395e-02 -3.4451284936723381e+00 + -5.4906111146638725e+00 1.7838273370412422e-01 -3.7215446874722771e+00 + -5.6970257539176856e+00 3.9323500867659295e-01 -3.9884193856377834e+00 + id 14344 + loc 8.7978845834732056e-01 8.8678979873657227e-01 412 + blend 0.0000000000000000e+00 + interp 4.0308962297611234e-01:2.9368690335274922e-01:2.8720697291144648e-01:3.3141291179694654e-01:1.0855878351272563e+00:3.7618964790653969e-01:1.8483079088317331e+00:2.9539502395284623e-01:2.6851342562617107e+00:4.0308559207988259e-01:3.5208046794839927e+00 + CVs 20 + 8.6033582504392581e-01 8.6133675052887410e-02 -2.4203194521831306e-01 + 1.4376383081331703e+00 4.6155181797284561e-02 -4.3801881262751069e-01 + 1.9507911526285941e+00 -3.2966876348941576e-02 -6.0450624846807666e-01 + 2.4956134741838452e+00 -1.1827804216158466e-01 -7.4248417672222400e-01 + 3.0577503101447876e+00 -2.1416486916782429e-01 -8.4137490354157751e-01 + 3.6202515166728406e+00 -3.2072291976846934e-01 -8.9390655782762507e-01 + 4.1659397523440829e+00 -4.3583000654991466e-01 -8.9898765012075610e-01 + 4.6810064284332418e+00 -5.5790034876031114e-01 -8.6370505062884861e-01 + 5.1566934094178718e+00 -6.8562924324387775e-01 -7.9973782562976381e-01 + 5.5885853811740391e+00 -8.1754064512540303e-01 -7.1898954420683459e-01 + 5.9799974534031062e+00 -9.5982834983367016e-01 -6.3631098589479818e-01 + 6.3495615454181857e+00 -1.1391171856924698e+00 -5.7574132618347629e-01 + 6.7149386879252866e+00 -1.3868763734132550e+00 -5.6315942412326048e-01 + 7.0647821180945689e+00 -1.6992817580762976e+00 -6.0725970648631922e-01 + 7.3803811664210039e+00 -2.0516586122627571e+00 -7.0364797203129670e-01 + 7.6527260763992606e+00 -2.4298937891579717e+00 -8.5081295674105450e-01 + 7.8752875003345508e+00 -2.8208459610564574e+00 -1.0463335144482870e+00 + 8.0435115877424899e+00 -3.1998946884471442e+00 -1.2752891509912936e+00 + 8.1663708447041543e+00 -3.4555572834982122e+00 -1.4427973264497105e+00 + id 14345 + loc 8.7852579355239868e-01 4.5698988437652588e-01 379 + blend 0.0000000000000000e+00 + interp 4.3093872723544169e-01:4.2415502891069357e-01:1.4004969781698073e-02:3.5796425849269625e-01:8.1634197905648587e-01:3.2529476642018929e-01:1.7330934939511966e+00:3.8204475195429527e-01:2.0788930791402356e+00:2.9172212458403352e-01:2.9268825735044395e+00:4.3093441784816933e-01:3.5807661250808485e+00 + CVs 20 + 3.4820344054306457e-01 3.7415105323614944e-01 -7.1394666216291675e-02 + 6.6424088356147659e-01 7.1071507819858315e-01 -1.4087299304556603e-01 + 9.8975720674324041e-01 1.0138273898448296e+00 -2.4468353330026946e-01 + 1.3327426702239971e+00 1.2937855916315855e+00 -3.9060274630317293e-01 + 1.6969595639157862e+00 1.5751673207027790e+00 -5.6250540030071650e-01 + 2.1090606575946893e+00 1.8702139493426879e+00 -7.3575821314221501e-01 + 2.6000324815775198e+00 2.1574978976430290e+00 -8.7592230161582529e-01 + 3.1773589773856670e+00 2.3992885452568098e+00 -9.4839026393485404e-01 + 3.8231536934911068e+00 2.5584849098188966e+00 -9.3087396661539756e-01 + 4.5057706935537141e+00 2.5970268181019831e+00 -8.2793789374669102e-01 + 5.1867631321476715e+00 2.4745925141073073e+00 -6.7559271495391693e-01 + 5.8128596533018335e+00 2.1598378028077367e+00 -5.2687598037579986e-01 + 6.3197868738093117e+00 1.6761638536844923e+00 -4.3015637631248665e-01 + 6.7029749846364535e+00 1.1265813214402400e+00 -4.0016966448790564e-01 + 7.0391201036226576e+00 6.0942445121801869e-01 -4.1747841554618959e-01 + 7.3925148582750211e+00 1.8170117432222721e-01 -4.8650128080176624e-01 + 7.7608748342829426e+00 -1.2497268674577544e-01 -6.4038533655680052e-01 + 8.1084508618396605e+00 -3.5623149233012663e-01 -8.4382817702073754e-01 + 8.4255739239896759e+00 -6.6949383640548321e-01 -9.9077235634680738e-01 + id 14346 + loc 8.4231668710708618e-01 9.7461831569671631e-01 404 + blend 0.0000000000000000e+00 + interp 4.7205810089853328e-01:4.0430719967428086e-01:3.1852420705469342e-04:4.7205338031752431e-01:5.2779728920519764e-01:3.2898881707014171e-01:9.8322811650237696e-01:3.4355771091620729e-01:1.2432002368514845e+00:2.4491591649794725e-01:1.9837819940208892e+00:4.1995300351702108e-01:2.4498522793571178e+00:3.7684823028168513e-01:3.3632779784523414e+00 + CVs 20 + 1.3423856639165765e-01 1.7410692549613260e-01 -7.7228708438416588e-02 + 2.3876569314913570e-01 3.4570224768044011e-01 -1.2214503758348061e-01 + 3.4083477802903378e-01 4.8543807917584536e-01 -1.7710262484196304e-01 + 4.5470669387649348e-01 6.1188765827497982e-01 -2.4181547722460794e-01 + 5.8435924440340237e-01 7.2335652567060782e-01 -3.1320140869120050e-01 + 7.3263893506751143e-01 8.1927427230839245e-01 -3.8742970964578655e-01 + 9.0194365187669845e-01 9.0171946362285016e-01 -4.5854997400266201e-01 + 1.0945193990522539e+00 9.7612543791263706e-01 -5.1746796895889813e-01 + 1.3100761197421578e+00 1.0431780729585691e+00 -5.5729551175393144e-01 + 1.5408184198214538e+00 1.0910569391300546e+00 -5.8618108433624605e-01 + 1.7761525713712765e+00 1.1092156005778444e+00 -6.2304601049098651e-01 + 2.0140760561220183e+00 1.1056846492043382e+00 -6.7120587427239520e-01 + 2.2624780796375363e+00 1.1003050638692182e+00 -7.1188720330155209e-01 + 2.5258831570909233e+00 1.1042140255613009e+00 -7.2938869241307136e-01 + 2.7970783576529357e+00 1.1143118483836334e+00 -7.3042900703433677e-01 + 3.0674176902343846e+00 1.1238801785578554e+00 -7.3167716911588920e-01 + 3.3368631393767125e+00 1.1284318869638177e+00 -7.3109022551359049e-01 + 3.6083543111825120e+00 1.1246939308641548e+00 -7.0741613635401668e-01 + 3.8656687841263229e+00 1.2254967616424806e+00 -6.1967168139729711e-01 + id 14347 + loc 6.0329145193099976e-01 9.1001528501510620e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5245207392471992e-01:4.5244754940398069e-01:6.6568538927799348e-02:3.1480079258409116e-01:9.9998951662488988e-01:2.8163354669772495e-01:1.7659728371458621e+00:3.7506822548057989e-01:2.1501379732266148e+00:2.9845078792852914e-01:3.0369425978467466e+00:3.4839966325241534e-01:3.7993646679806443e+00 + CVs 20 + 1.2260900485167436e-01 3.4835544919575978e-01 1.8030973540854950e-02 + 2.5719115793764380e-01 6.7342391174325433e-01 -3.0089161393031527e-03 + 4.0441862427379438e-01 9.7687442375693767e-01 -5.8285116130898873e-02 + 5.6463597003165866e-01 1.2516450738121543e+00 -1.4592661764658782e-01 + 7.3512668039100815e-01 1.4834372622026797e+00 -2.6404103917157146e-01 + 9.0671596054726955e-01 1.6553325690065621e+00 -4.0664650567063243e-01 + 1.0690379161561878e+00 1.7572662375068142e+00 -5.6423132136878384e-01 + 1.2158817362972791e+00 1.7912161439621093e+00 -7.2455908207617381e-01 + 1.3441629569965083e+00 1.7667248681368382e+00 -8.7330158863567142e-01 + 1.4539772027791886e+00 1.6970519632788073e+00 -9.9777739866813664e-01 + 1.5487457724075369e+00 1.5966746630254713e+00 -1.0897136134880476e+00 + 1.6339282638279438e+00 1.4794526294819075e+00 -1.1460259173544214e+00 + 1.7154409624484985e+00 1.3566234402040487e+00 -1.1697139266297856e+00 + 1.7969072191078173e+00 1.2396369844339412e+00 -1.1652566239981665e+00 + 1.8783446452037622e+00 1.1689831847495198e+00 -1.1285657344336824e+00 + 1.9580259865675387e+00 1.2829360060570774e+00 -1.0677147303589134e+00 + 2.0552753366141676e+00 1.6947590385598010e+00 -1.1282221403455077e+00 + 2.1905944083392370e+00 1.9983712576428658e+00 -1.2951115555374670e+00 + 2.3044986717420262e+00 1.7711993822481067e+00 -9.8845680849264150e-01 + id 14348 + loc 4.2690008878707886e-01 3.3088818192481995e-01 400 + blend 0.0000000000000000e+00 + interp 3.0746481969537975e-01:2.7863365137285695e-01:8.8468407294479245e-02:2.8022321408096224e-01:9.8879891079005588e-01:3.0503664847336820e-01:1.4984444121548475e+00:2.9238275457898744e-01:2.7187219920937347e+00:3.0746174504718282e-01:3.2931704023060355e+00 + CVs 20 + -1.1375918609308755e-01 6.6947476949043544e-02 2.2342012341663972e-01 + -2.6027300864770514e-01 1.4371418491949364e-01 4.1401194636625815e-01 + -4.2565862335228410e-01 2.1976866427819530e-01 5.7799887197557831e-01 + -5.9925315050579631e-01 2.8939326647232000e-01 7.2549596701242203e-01 + -7.8615523113727981e-01 3.5542959772693544e-01 8.5981826529807959e-01 + -9.9143624164482214e-01 4.2177471851708992e-01 9.8612094319145849e-01 + -1.2127109945754040e+00 4.9331294009738719e-01 1.1084283537010200e+00 + -1.4400882060586440e+00 5.7326475585352976e-01 1.2277734250366479e+00 + -1.6663917516087792e+00 6.5959975939807447e-01 1.3425297714403537e+00 + -1.8924518277101590e+00 7.4634109656836001e-01 1.4491353411451522e+00 + -2.1194805855242702e+00 8.2740823342956094e-01 1.5416573530277242e+00 + -2.3456069229002208e+00 8.9705162790597459e-01 1.6118442380309665e+00 + -2.5709318999093673e+00 9.4803834210507776e-01 1.6511253702287942e+00 + -2.7987489936248213e+00 9.7000645656818851e-01 1.6513748406837374e+00 + -3.0258306667393295e+00 9.5183153176951252e-01 1.6046085798399918e+00 + -3.2361939167369020e+00 8.8606602093536813e-01 1.5042838772968752e+00 + -3.4099451978965143e+00 7.6670628366948956e-01 1.3487682074770007e+00 + -3.5374783200579367e+00 5.8373126783985896e-01 1.1401800193383960e+00 + -3.7771811856211706e+00 2.5917991443615196e-01 8.4802358724206317e-01 + id 14349 + loc 1.9844962656497955e-01 7.4560421705245972e-01 395 + blend 0.0000000000000000e+00 + interp 4.5890274335313791e-01:3.4409591872517731e-01:5.9220489716293634e-01:4.5889815432570441e-01:1.0154342398596468e+00:2.8636628654191715e-01:1.7501317542331170e+00:2.4662163667654757e-01:2.8151529057463360e+00:2.8895230851252729e-01:3.9834003345077145e+00 + CVs 20 + 4.9257916469376756e-01 1.3628106397947309e-01 -2.8852370367106067e-01 + 9.2175640509819279e-01 2.1613662773048486e-01 -5.4683085244693641e-01 + 1.3486605977418833e+00 2.8576732286306317e-01 -7.8441599418722763e-01 + 1.7925309311252664e+00 3.5583536877723576e-01 -9.9979384673572569e-01 + 2.2442459748096524e+00 4.1718740150670852e-01 -1.1890083267306730e+00 + 2.6937294870219608e+00 4.6232247135831650e-01 -1.3562533884675601e+00 + 3.1327213895730379e+00 4.8275181447971427e-01 -1.5079270389651289e+00 + 3.5561138451333125e+00 4.6672514433724444e-01 -1.6483704009384665e+00 + 3.9609135040726957e+00 4.0176029825177717e-01 -1.7844539153773376e+00 + 4.3379510097933656e+00 2.7802428172072990e-01 -1.9254649028169031e+00 + 4.6742500514085306e+00 9.3950974220171179e-02 -2.0733176889606924e+00 + 4.9634490660216528e+00 -1.3904153440015765e-01 -2.2162123277046684e+00 + 5.2106568176736490e+00 -4.0426467339297778e-01 -2.3413045890471587e+00 + 5.4192237062889195e+00 -6.9258524279321598e-01 -2.4502378741508251e+00 + 5.5857708844669967e+00 -9.9946675691006792e-01 -2.5498783695919989e+00 + 5.7031506312228215e+00 -1.3166657953103700e+00 -2.6402250164020042e+00 + 5.7663984614775661e+00 -1.6311570521926884e+00 -2.7170935422243847e+00 + 5.7788485680892201e+00 -1.9343166975922079e+00 -2.7827041951463460e+00 + 5.7669613081916307e+00 -2.2387980800950151e+00 -2.8620093850448405e+00 + id 14350 + loc 9.1117966175079346e-01 4.9941095709800720e-01 402 + blend 0.0000000000000000e+00 + interp 5.5432471543242379e-01:5.5431917218526949e-01:1.1623768773280818e-01:5.0343923073952224e-01:9.4062228480909182e-01:4.2090647643192924e-01:1.4073225903645237e+00:2.5047140474241614e-01:1.8421250655749501e+00:3.0855465761296946e-01:2.6659357556793051e+00:3.9625399542341239e-01:3.0058115194840660e+00:2.5772907447319954e-01:3.6382327150795901e+00 + CVs 20 + 1.4133264448420468e-01 3.1404632630600171e-01 2.5630790496116246e-01 + 3.1513154095232382e-01 6.2999019249224719e-01 5.1089421344097563e-01 + 5.0309931989247736e-01 9.5392639410332181e-01 7.7354469775230017e-01 + 7.1258230311460569e-01 1.2660056072836323e+00 1.0241590424825631e+00 + 9.4571138434185231e-01 1.5577966857803693e+00 1.2533228961085103e+00 + 1.1785832173280777e+00 1.7914852843508871e+00 1.5294113738968920e+00 + 1.3843281670149052e+00 1.8234784635244605e+00 1.6949373045312408e+00 + 1.6370657268456961e+00 1.7924099491490599e+00 1.8379062033148030e+00 + 1.9731239535802518e+00 1.6854178418404724e+00 2.0235563978095659e+00 + 2.3093808902249680e+00 1.4738454153221774e+00 2.2211560037326947e+00 + 2.5897988000579728e+00 1.1678386719858209e+00 2.3999173649420347e+00 + 2.8226779665982753e+00 8.1061205942562975e-01 2.5366766624659669e+00 + 3.0527096940263583e+00 4.4018450746874005e-01 2.6299097621692962e+00 + 3.3238402318009990e+00 7.8725492901569938e-02 2.6934746161641652e+00 + 3.6726270508593828e+00 -2.6665565294341997e-01 2.7556728663627981e+00 + 4.1380046923549898e+00 -6.0610407142801614e-01 2.8675885126568592e+00 + 4.7224868308093546e+00 -9.4408694470579213e-01 3.0863223158053059e+00 + 5.3376301618154107e+00 -1.2627634555258225e+00 3.4177506871374121e+00 + 5.8313958536081163e+00 -1.5215177317313469e+00 3.7373640363932941e+00 + id 14351 + loc 2.1732717752456665e-02 6.9536507129669189e-01 401 + blend 0.0000000000000000e+00 + interp 4.8147688714459419e-01:3.7264760068995967e-01:3.6533956007034352e-03:3.7699012623031058e-01:4.8644348054620823e-01:2.4624516987689801e-01:1.0019902374433756e+00:3.4510925730594239e-01:1.9380547799472467e+00:3.3619502036935300e-01:2.3231600001437469e+00:4.8147207237572276e-01:3.0001354510650158e+00:4.0920690651584374e-01:3.4378740696700678e+00 + CVs 20 + -1.8867256911549168e-04 2.6919373024930471e-01 -2.9517030905306768e-01 + -1.2979913122403819e-02 5.2205755544171573e-01 -5.8244983059677502e-01 + -3.8319696059891412e-02 7.6048397986255067e-01 -8.6618511184489888e-01 + -8.1305467555253086e-02 9.8313744583162843e-01 -1.1476975593266172e+00 + -1.5066894390203878e-01 1.1869353620166030e+00 -1.4254613557858498e+00 + -2.5549089900172933e-01 1.3692297528077755e+00 -1.6956727178073241e+00 + -4.0304623304595455e-01 1.5269535123289413e+00 -1.9515887631319013e+00 + -5.9539737016823424e-01 1.6575009912331273e+00 -2.1863288232512925e+00 + -8.2910775416357807e-01 1.7594500992594015e+00 -2.3951017478180625e+00 + -1.0983592838796095e+00 1.8317842550222097e+00 -2.5765092226579696e+00 + -1.3970874040606571e+00 1.8726688705338423e+00 -2.7340745688331878e+00 + -1.7203200112426589e+00 1.8781367397689244e+00 -2.8748034908900704e+00 + -2.0635831985996949e+00 1.8408566960741093e+00 -3.0040473934434937e+00 + -2.4159002104919987e+00 1.7534644996729698e+00 -3.1197792975590262e+00 + -2.7601108411710173e+00 1.6236504364574198e+00 -3.2099978816671801e+00 + -3.0858959557728713e+00 1.4747335115134068e+00 -3.2569877359074204e+00 + -3.3943637749509525e+00 1.3283374741787228e+00 -3.2476861369584618e+00 + -3.6888138382727691e+00 1.2022188699060823e+00 -3.1682059342797775e+00 + -3.9356220902623544e+00 1.1647001122000016e+00 -2.9752421115890333e+00 + id 14352 + loc 6.6268372535705566e-01 7.0582997798919678e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8501953898685063e-01:2.9770671077927430e-01:7.5377113529448980e-03:4.2290588414666636e-01:6.8674055766404885e-01:4.8501468879146076e-01:1.0450261229364513e+00:2.8733622642718326e-01:1.8957780174697363e+00:3.7618166121785118e-01:2.5569081337638684e+00:3.4295355190929527e-01:3.1090842734195396e+00 + CVs 20 + 1.2254313490559382e-01 2.8078747574189855e-01 -1.3814587826022084e-01 + 2.2312706246983535e-01 5.7636191983364671e-01 -2.8633480330427996e-01 + 3.3850910262412842e-01 8.7823864615824820e-01 -4.3821338225007905e-01 + 5.1398429062507933e-01 1.1707762130937520e+00 -5.8900570213760794e-01 + 7.5269474310951789e-01 1.4259032429195893e+00 -7.3366817970656029e-01 + 9.9334435473219285e-01 1.6419049832824220e+00 -8.7752461825219974e-01 + 1.1663025323208180e+00 1.8418608971065280e+00 -1.0270315812833517e+00 + 1.2350326915268885e+00 2.0326944046125268e+00 -1.1736922751298418e+00 + 1.1760936655010235e+00 2.1658067320670660e+00 -1.2873454476901978e+00 + 1.0140377198572375e+00 2.1370247392044557e+00 -1.3126534598321296e+00 + 8.6453137044761164e-01 1.9936558213379962e+00 -1.2627745082897088e+00 + 7.2194927581939783e-01 1.8511122139024554e+00 -1.2566712541833982e+00 + 5.8101418927204651e-01 1.6583190962185212e+00 -1.3077318773794724e+00 + 4.7703303518831741e-01 1.3912216023052575e+00 -1.3856238069351741e+00 + 4.2185063436770948e-01 1.0616410017022793e+00 -1.4804109978744029e+00 + 4.3874423784970540e-01 7.0392182643857226e-01 -1.5401193939951394e+00 + 5.2097884159721874e-01 3.9603466445837049e-01 -1.4937531110410456e+00 + 6.1629791162031999e-01 1.7980072817601017e-01 -1.3649580788126734e+00 + 6.9790945855394448e-01 -1.7758788640456116e-01 -1.4144935661062232e+00 + id 14353 + loc 7.7137684822082520e-01 5.6594973802566528e-01 378 + blend 0.0000000000000000e+00 + interp 2.9539667345873927e-01:2.9115186265310505e-01:2.6617871462047527e-02:2.7742946694896298e-01:9.0903270270768777e-01:2.8176709430713498e-01:1.8955036811770565e+00:2.6783233215928626e-01:2.9834090047737600e+00:2.9539371949200471e-01:3.5343728426618224e+00 + CVs 20 + 4.4961916925265050e-01 3.4202906590780452e-01 2.4027582942440187e-02 + 8.6595521602094461e-01 6.3477903576394468e-01 9.7532542737080175e-03 + 1.2928432323326635e+00 8.8911059324319996e-01 -3.3655035480768980e-02 + 1.7512968958172150e+00 1.1243025213779847e+00 -8.5342473761576110e-02 + 2.2347782792293414e+00 1.3446250870951364e+00 -1.1293637056611594e-01 + 2.7329998922406515e+00 1.5337486361373831e+00 -8.5460696887293963e-02 + 3.2297495851763300e+00 1.6631163847723311e+00 1.4923089258701006e-02 + 3.6972064178144688e+00 1.7116258194431277e+00 1.8749379709904446e-01 + 4.1017580252719466e+00 1.6744997175085843e+00 4.1273310749139092e-01 + 4.4170591443585367e+00 1.5630423800727389e+00 6.5800588615981970e-01 + 4.6312118016122277e+00 1.4016634251724627e+00 8.8980304990068237e-01 + 4.7450066681052299e+00 1.2237663652003032e+00 1.0847244157221512e+00 + 4.7790405234400417e+00 1.0553200342402627e+00 1.2414454336076179e+00 + 4.7757672000868494e+00 8.6815611782060342e-01 1.3819970768491288e+00 + 4.7632684805744976e+00 5.8140066648368682e-01 1.5202685535706477e+00 + 4.7549146885471707e+00 1.4975794576848767e-01 1.6656158609566842e+00 + 4.7925667476196798e+00 -4.1762118922047664e-01 1.8383917671686452e+00 + 4.9227082090141732e+00 -1.0524038556803514e+00 2.0197106090245915e+00 + 4.9965139332349722e+00 -1.4855113871818915e+00 2.0732134728882228e+00 + id 14354 + loc 9.5916651189327240e-02 6.9726216793060303e-01 412 + blend 0.0000000000000000e+00 + interp 3.7379067978728076e-01:2.6728582028086662e-01:9.1493796906837166e-01:3.7378694188048289e-01:1.9050374991040742e+00:2.8715889751654955e-01:2.5057742346277392e+00:2.7336345401479650e-01:3.1489724059863433e+00:3.0001824284506595e-01:3.9784499298983178e+00 + CVs 20 + 7.6939413010562263e-01 1.6634297909858894e-01 -1.4756091308322189e-01 + 1.3022342335752084e+00 1.8010011319012220e-01 -2.8286365383274736e-01 + 1.7940481238266108e+00 1.3710243704804093e-01 -3.9251765163069979e-01 + 2.3173870118097164e+00 6.6913739101582159e-02 -4.6913001944352228e-01 + 2.8553171235502988e+00 -3.5612822809061528e-02 -5.0539224437244346e-01 + 3.3888943838752090e+00 -1.7063327547425078e-01 -4.9401669508866464e-01 + 3.8993691700009201e+00 -3.3431262703092468e-01 -4.3251648984849339e-01 + 4.3711155572736198e+00 -5.2067602634317334e-01 -3.2601223950357694e-01 + 4.7936047683450003e+00 -7.2158560229954483e-01 -1.8285273709097505e-01 + 5.1611494109867708e+00 -9.2904164820163393e-01 -1.3456489555899842e-02 + 5.4732332743240919e+00 -1.1460981547438021e+00 1.5775390784752097e-01 + 5.7376115607967364e+00 -1.3910510827703868e+00 2.8958047835035883e-01 + 5.9641420200390565e+00 -1.6727121285875879e+00 3.5489711133352492e-01 + 6.1584323591014005e+00 -1.9762172117064738e+00 3.6250957895303826e-01 + 6.3216102207975275e+00 -2.2858878296548126e+00 3.2618555206262478e-01 + 6.4482679221212713e+00 -2.5919529730083868e+00 2.4219958047517648e-01 + 6.5316336364346634e+00 -2.8819897919472961e+00 1.0784762290843952e-01 + 6.5723301276074517e+00 -3.1402152154342877e+00 -6.2803162061939921e-02 + 6.6267890926601778e+00 -3.3787891390738043e+00 -2.0973185692120622e-01 + id 14355 + loc 4.5406734943389893e-01 9.6649146080017090e-01 379 + blend 0.0000000000000000e+00 + interp 4.5894165336440673e-01:2.7426964074494509e-01:1.5721101795155956e-02:3.8498893822409602e-01:1.0155403184061458e+00:3.2410506694911090e-01:1.9511292917914225e+00:4.5893706394787309e-01:2.5059742043511242e+00:4.5497687469523801e-01:3.1117109345459855e+00 + CVs 20 + -1.8628000481943910e-01 4.3400947776714838e-01 3.4433486069464081e-01 + -3.8174819443270913e-01 8.0034213927952769e-01 7.0068713382098924e-01 + -5.9976748010476588e-01 1.1059253196860661e+00 1.0864072888827336e+00 + -8.4999377581072899e-01 1.3813485069558689e+00 1.4862507027049785e+00 + -1.1511378028839712e+00 1.6407046784578232e+00 1.8689638973484071e+00 + -1.5281501939003137e+00 1.8578350636205712e+00 2.2008986596945750e+00 + -1.9786753421644165e+00 1.9904322618892294e+00 2.4528189693606657e+00 + -2.4688306701581038e+00 2.0209149072202193e+00 2.6166357967789367e+00 + -2.9601343237540156e+00 1.9582552513902174e+00 2.7028057832346652e+00 + -3.4253377423568425e+00 1.8235661845193070e+00 2.7275309341922771e+00 + -3.8422701537903237e+00 1.6350600288938339e+00 2.7062090403039454e+00 + -4.1738667845694604e+00 1.4039077659680281e+00 2.6632978769123126e+00 + -4.3963822531534467e+00 1.1581594744420463e+00 2.6372304381904028e+00 + -4.5497090284759478e+00 9.3928944640144829e-01 2.6532669615381006e+00 + -4.6823504123810578e+00 7.7229829610677392e-01 2.7212054452837311e+00 + -4.7901167728690250e+00 6.7671075861601926e-01 2.8440456892497430e+00 + -4.8494307940830490e+00 6.6310923809472300e-01 3.0037934905864274e+00 + -4.8650414450708777e+00 6.9969500125355699e-01 3.1683038974620752e+00 + -5.0797193616955507e+00 5.4297603690951401e-01 3.4116767644097905e+00 + id 14356 + loc 2.2535893321037292e-01 2.3836318869143724e-03 404 + blend 0.0000000000000000e+00 + interp 5.4697944799477061e-01:4.7369471943012587e-01:6.0850215992245382e-02:3.3321591375709891e-01:7.8206005732836348e-01:2.1508578185246940e-01:1.3531024753520784e+00:4.2121527649189350e-01:1.9232704752376657e+00:3.5343148118726486e-01:2.6317601376322930e+00:5.0273108753475693e-01:3.3018792486241173e+00:5.4697397820029070e-01:3.8757209018330805e+00 + CVs 20 + -1.1016476104776363e-01 1.9544104563034262e-01 -4.4472336404072089e-02 + -2.2929476584857333e-01 3.9939172799003336e-01 -1.1169951955889622e-01 + -3.5074278274999499e-01 6.0203119917067083e-01 -1.8589418264733518e-01 + -4.6766631724454943e-01 7.9824719432569968e-01 -2.5875605049777300e-01 + -5.8102231854295838e-01 9.9250393253883629e-01 -3.2412033359841858e-01 + -6.9546492125928983e-01 1.1905716806347573e+00 -3.7340884356384491e-01 + -8.1684458326155729e-01 1.3966863789884110e+00 -3.9605485091861714e-01 + -9.4532671816924274e-01 1.6091902116719237e+00 -3.8240637925912541e-01 + -1.0742788294780408e+00 1.8211023477137720e+00 -3.2773691479054201e-01 + -1.1977395743727248e+00 2.0257047406283943e+00 -2.3210502006155820e-01 + -1.3144092184859029e+00 2.2187662303807572e+00 -9.6214845901784085e-02 + -1.4205057120068831e+00 2.3936728299843493e+00 7.4869889706111969e-02 + -1.5131926972375105e+00 2.5453472632097363e+00 2.7420299838865914e-01 + -1.5839012022303183e+00 2.6677167465762150e+00 4.8222693314646459e-01 + -1.6243126284697631e+00 2.7587759361323179e+00 6.6726896779661127e-01 + -1.6439594439020113e+00 2.8262340406767574e+00 8.2639713529223013e-01 + -1.6558414872189808e+00 2.8820250932844091e+00 1.0095537102909906e+00 + -1.6507214182139451e+00 2.9209367011211977e+00 1.2450246442425363e+00 + -1.6078052043126996e+00 2.9049116723541641e+00 1.3966588847944819e+00 + id 14357 + loc 9.9487161636352539e-01 4.0387016534805298e-01 396 + blend 0.0000000000000000e+00 + interp 4.5742106770917584e-01:1.6769933633225281e-01:7.4767481986367512e-02:4.4010653937600647e-01:7.4374439239843348e-01:4.5741649349849878e-01:1.0919258998959902e+00:2.4525806132294675e-01:1.9999901617647939e+00:3.1830119787766276e-01:3.0101488348884540e+00:3.6546330775978153e-01:3.7209845778089825e+00 + CVs 20 + -7.1219210265702482e-01 1.0072862637593705e-01 4.5128180582773447e-01 + -1.1622424757202023e+00 8.1101581916124099e-02 7.9799083108395763e-01 + -1.5537088397165650e+00 2.3377565571034542e-02 1.1228760454445972e+00 + -1.9597970247512160e+00 -3.5814069646597058e-02 1.4395429382709484e+00 + -2.3832758360510509e+00 -1.0190890704802491e-01 1.7350517064981887e+00 + -2.8222469436982882e+00 -1.8285282770889999e-01 2.0068479445149388e+00 + -3.2665289900668966e+00 -2.8207343134116347e-01 2.2646280970690125e+00 + -3.7015737422172865e+00 -3.9601880111910082e-01 2.5221083242424611e+00 + -4.1160054396773154e+00 -5.2445359048656726e-01 2.7897444682422625e+00 + -4.5020231269382434e+00 -6.7359603271758584e-01 3.0764700974310308e+00 + -4.8452912351380046e+00 -8.5218457700488504e-01 3.3950535809388906e+00 + -5.1259948937485644e+00 -1.0645108225903634e+00 3.7567005446384565e+00 + -5.3330972407273105e+00 -1.3071878566786639e+00 4.1614944157461906e+00 + -5.4676106984440729e+00 -1.5715921806367510e+00 4.5984283968691795e+00 + -5.5356400897238336e+00 -1.8444028839137601e+00 5.0532437456202688e+00 + -5.5462023801753908e+00 -2.1151302102993990e+00 5.5152266266812369e+00 + -5.5092346963217800e+00 -2.3877478594866988e+00 5.9737618970081305e+00 + -5.4300453288103059e+00 -2.6746140327101484e+00 6.4105441989139065e+00 + -5.2971556316175565e+00 -2.9569144393960873e+00 6.7685774780160486e+00 + id 14358 + loc 5.4459166526794434e-01 9.1603946685791016e-01 399 + blend 0.0000000000000000e+00 + interp 4.5941928745997801e-01:3.5581410530258395e-01:4.0614926496776371e-01:3.3522771901601650e-01:1.0369343760279472e+00:4.3008161045061577e-01:1.7380752071282763e+00:3.2986280345500163e-01:2.8611948992617107e+00:2.7838343226146151e-01:3.3174050606673351e+00:4.5941469326710344e-01:3.9656087521495111e+00 + CVs 20 + -1.3585615887270008e-01 3.1968222985328426e-01 -2.5265583795373331e-01 + -2.5343594265678870e-01 6.3108681008176315e-01 -5.2671316849143679e-01 + -3.6533925255009914e-01 9.2766172985699880e-01 -8.2150884999055196e-01 + -4.8220685107901229e-01 1.1992408470659570e+00 -1.1396569825569409e+00 + -6.1429901585271895e-01 1.4331650790313464e+00 -1.4865000468661282e+00 + -7.7107412308617973e-01 1.6126827785643714e+00 -1.8629820880526624e+00 + -9.5899077921438136e-01 1.7207556593741933e+00 -2.2640367588411090e+00 + -1.1807743587390029e+00 1.7490876235594854e+00 -2.6779302586722276e+00 + -1.4293802834701606e+00 1.6985498720458614e+00 -3.0838574733459154e+00 + -1.6792771303408887e+00 1.5679323785965393e+00 -3.4560760671411757e+00 + -1.9046149936576964e+00 1.3540050864851598e+00 -3.7789840979170637e+00 + -2.1225340696504076e+00 1.0590507497470003e+00 -4.0609497666037244e+00 + -2.3814836915444957e+00 6.9406482409585901e-01 -4.3131653628058118e+00 + -2.6980183266968232e+00 2.9015951370382420e-01 -4.5199776465453230e+00 + -3.0419852389366793e+00 -1.2625557404514010e-01 -4.6581109983260758e+00 + -3.4189161707116607e+00 -5.3995048514912214e-01 -4.7361079726351658e+00 + -3.9378937001829435e+00 -8.8574804661451423e-01 -4.7946998185108356e+00 + -4.6310209570517360e+00 -9.7819312289511351e-01 -4.8502169414528868e+00 + -5.0343255271062937e+00 -1.0987005139964003e+00 -4.8331878479476824e+00 + id 14359 + loc 8.1313109397888184e-01 4.0091982483863831e-01 400 + blend 0.0000000000000000e+00 + interp 4.3549525375544074e-01:4.3549089880290320e-01:3.5064258010691796e-02:3.1093100299339860e-01:5.9650302502905306e-01:3.7483397872559748e-01:1.0080174047254780e+00:2.7693114213202075e-01:1.7047572584686979e+00:2.9651345033447579e-01:2.5792843288294347e+00:2.7698306987872889e-01:3.5101675137018535e+00 + CVs 20 + 1.1302136148198028e-01 1.3143300177860229e-01 2.5908904411317984e-01 + 2.0221207140200084e-01 2.5285303824837546e-01 5.0329964776762348e-01 + 2.7987971600248568e-01 3.7056853896647168e-01 7.4295197676100355e-01 + 3.5462929475045046e-01 4.8681309518692029e-01 9.8306709529825986e-01 + 4.3173732147147448e-01 5.9867940581322676e-01 1.2243501208580714e+00 + 5.1509012414106947e-01 7.0447310759303572e-01 1.4646660364447999e+00 + 6.0514105330126911e-01 8.1044057026807192e-01 1.7015207683445623e+00 + 7.0017367127947994e-01 9.2495028785366240e-01 1.9374428316298511e+00 + 7.9844955684394847e-01 1.0462550638684016e+00 2.1840877153583271e+00 + 8.9820756299091775e-01 1.1635063345999486e+00 2.4537187437893877e+00 + 9.9714635729484025e-01 1.2664319800341093e+00 2.7520850303295963e+00 + 1.0946723514639918e+00 1.3470745632804098e+00 3.0812450353787790e+00 + 1.1929010272001070e+00 1.3934764717725514e+00 3.4409682252874041e+00 + 1.2909990416798514e+00 1.3896210981182819e+00 3.8286572759697499e+00 + 1.3774599045034845e+00 1.3201331645273735e+00 4.2422785177776454e+00 + 1.4299154894267374e+00 1.1674901711252446e+00 4.6758814037143068e+00 + 1.4292282055307099e+00 9.1300787031376096e-01 5.1048044160519277e+00 + 1.3793206866138825e+00 5.5935543695415024e-01 5.4853439052843775e+00 + 1.3332192939695255e+00 2.0095510507864622e-01 5.7800827338393184e+00 + id 14360 + loc 5.6636470556259155e-01 5.5282223224639893e-01 395 + blend 0.0000000000000000e+00 + interp 4.3502456234627501e-01:3.8454726322305166e-01:4.5331191853354103e-01:2.5772827975389617e-01:1.0570720055820555e+00:2.6787616330184011e-01:2.2371077470389702e+00:4.3502021210065156e-01:2.8542021405502593e+00:2.8375585273520398e-01:3.6421314591295748e+00:4.1065468673018057e-01:3.9995122452069376e+00 + CVs 20 + 2.7198460510828421e-01 2.7865034984816900e-01 -2.6082920620453409e-01 + 4.8917538256892767e-01 5.1031290725064482e-01 -4.5150823181377031e-01 + 7.0175629953566110e-01 7.2127071741170101e-01 -6.2149918559300765e-01 + 9.4244005717026358e-01 9.2861558751295536e-01 -7.9825302066964743e-01 + 1.2202022023112156e+00 1.1258351255625412e+00 -9.8249527081519838e-01 + 1.5414026890536101e+00 1.3024574512791098e+00 -1.1739937232559823e+00 + 1.9077770231058813e+00 1.4491332797723571e+00 -1.3770525656706618e+00 + 2.3161674090731972e+00 1.5577486518971080e+00 -1.5997140291616581e+00 + 2.7628991942320074e+00 1.6161486409005714e+00 -1.8460260476249177e+00 + 3.2443677356472445e+00 1.6046637218949646e+00 -2.1142161447049781e+00 + 3.7412350749777832e+00 1.4995379051425302e+00 -2.4008205809077379e+00 + 4.2083839978271467e+00 1.2878103946418611e+00 -2.6972673014949713e+00 + 4.6027317203046243e+00 9.8009039234123141e-01 -2.9880569372515713e+00 + 4.9113288790015375e+00 5.9840370154211442e-01 -3.2618232682986026e+00 + 5.1404396146176712e+00 1.5931472464277885e-01 -3.5181091659327848e+00 + 5.2949827673211969e+00 -3.2309027580309158e-01 -3.7612246978278718e+00 + 5.3744924155921474e+00 -8.3089510553908852e-01 -3.9881889891879938e+00 + 5.3810784000740401e+00 -1.3483566203419399e+00 -4.1873098828388509e+00 + 5.3360843709998438e+00 -1.8722371162353939e+00 -4.3677684168907858e+00 + id 14361 + loc 8.7376129627227783e-01 9.8982357978820801e-01 402 + blend 0.0000000000000000e+00 + interp 3.9289245810159912e-01:2.6958481113823379e-01:9.8698382089773107e-02:3.2300003263784649e-01:9.7544132427602182e-01:3.9262014753767094e-01:1.0757156527194018e+00:2.8686398898082971e-01:1.9828657112658714e+00:2.9774350026560154e-01:2.4820140910594191e+00:2.4446439904967560e-01:3.0100053091491308e+00:3.9288852917701811e-01:3.7537235073953177e+00 + CVs 20 + -1.0326937340834480e-02 1.1451225935949717e-01 -2.4476533105967824e-01 + -4.3407854094300868e-03 2.3051780537024211e-01 -4.9098515430794298e-01 + 1.9909256664384589e-02 3.4443982452344141e-01 -7.2870102875534548e-01 + 6.0558615563677809e-02 4.5210366742197156e-01 -9.5149042342955004e-01 + 1.1749385792302358e-01 5.4810371998293383e-01 -1.1528971593992567e+00 + 1.9398728710562402e-01 6.2399126964300577e-01 -1.3223703715874058e+00 + 2.8819795614190247e-01 6.7188185766001174e-01 -1.4513624121764290e+00 + 3.8875843877316307e-01 6.8979774569982022e-01 -1.5399604914302294e+00 + 4.8211712110767185e-01 6.8699155509237808e-01 -1.5991058020436804e+00 + 5.6279517668695211e-01 6.8091182452579169e-01 -1.6476153425141364e+00 + 6.3188663575933757e-01 6.8626018719522408e-01 -1.7109871015094127e+00 + 6.8283323212080427e-01 7.0416194388728681e-01 -1.8102894539778451e+00 + 6.8793995552657539e-01 7.1951290733283302e-01 -1.9352543167742720e+00 + 6.3194223202503208e-01 7.2339841740279487e-01 -2.0408788134193099e+00 + 5.3775983009255868e-01 7.2714908614432172e-01 -2.1041946535077201e+00 + 4.2356157214866641e-01 7.4012818436561412e-01 -2.1276569176320566e+00 + 3.0327713566397085e-01 7.6593995217530986e-01 -2.1091921276326766e+00 + 1.8561232079582507e-01 8.0292995156546620e-01 -2.0604812489740976e+00 + -1.4608560033421369e-02 8.0466434453062252e-01 -2.1110119341008691e+00 + id 14362 + loc 2.7106487751007080e-01 5.2485519647598267e-01 393 + blend 0.0000000000000000e+00 + interp 4.4506523368609618e-01:3.1780528233413186e-01:3.8013665094764004e-02:4.4506078303375934e-01:6.5353726428414216e-01:3.3125932317891876e-01:1.0196731092998017e+00:3.1097294202785403e-01:2.0722861173239737e+00:3.6536913042675884e-01:3.0499286931871779e+00 + CVs 20 + -3.9116891739037529e-01 3.5071392646322275e-01 -1.2696865497833626e-01 + -7.3900394230872801e-01 6.6900576573223669e-01 -2.4839188718652111e-01 + -1.0626073844707258e+00 9.7322830788961268e-01 -3.7145690125143349e-01 + -1.3727613076939875e+00 1.2700938664584229e+00 -5.0271436402783642e-01 + -1.6794260423609670e+00 1.5601761365667910e+00 -6.4952595417480485e-01 + -1.9937587538566497e+00 1.8468037911543074e+00 -8.1254703819931584e-01 + -2.3274004891107811e+00 2.1349908819102170e+00 -9.8231335997695712e-01 + -2.7070240104273706e+00 2.4181097705784502e+00 -1.1490920212668398e+00 + -3.1773993991340483e+00 2.6635632245247809e+00 -1.3108202923884187e+00 + -3.7625691543544226e+00 2.8361926204356736e+00 -1.4781207764175366e+00 + -4.4420934701111108e+00 2.9272693572794459e+00 -1.6768326704305090e+00 + -5.1769414680203756e+00 2.9213404698779604e+00 -1.9198148579123828e+00 + -5.9256388451057447e+00 2.7770947934167869e+00 -2.1898398724790544e+00 + -6.6341769101775387e+00 2.4750331908123337e+00 -2.4687397407493701e+00 + -7.2493542926020442e+00 2.0546779731678133e+00 -2.7367545584675486e+00 + -7.7661455429702286e+00 1.6113947612561024e+00 -2.9257387070714893e+00 + -8.2192610319762025e+00 1.2382761421624995e+00 -2.9827752479023308e+00 + -8.6272979772100484e+00 9.4117307679659934e-01 -2.9766547601870523e+00 + -9.0056469742701690e+00 6.7013444152909285e-01 -3.0324868674229757e+00 + id 14363 + loc 4.8582121729850769e-01 5.0416880846023560e-01 401 + blend 0.0000000000000000e+00 + interp 4.8077958865370601e-01:3.2914829258069384e-01:6.3030946179980063e-02:3.7025725523270231e-01:8.8272350241009245e-01:2.9451697601418253e-01:1.2871086831017557e+00:3.5747785879911309e-01:2.1416109702633834e+00:4.8077478085781949e-01:2.9311756676389056e+00:4.7472632119075792e-01:3.0667103730201606e+00:3.3745467600229984e-01:3.5400952524191376e+00 + CVs 20 + -1.7893365293415614e-01 2.7540170521051704e-01 -1.9868234030856297e-01 + -3.0828003172084528e-01 5.7660223079664741e-01 -4.1376817140643146e-01 + -4.1256008765594210e-01 8.9137188142545098e-01 -6.4515178210898816e-01 + -5.0415924961840419e-01 1.2087039684290417e+00 -9.0075685454919030e-01 + -5.8469194256731560e-01 1.5167001305313412e+00 -1.1951781299362263e+00 + -6.6906432518099357e-01 1.8055703754876595e+00 -1.5405065423084372e+00 + -7.9181709012545054e-01 2.0691036374688418e+00 -1.9385524750893208e+00 + -9.9106512307972472e-01 2.2961983358246325e+00 -2.3769338472045982e+00 + -1.2902823287838321e+00 2.4666133582789223e+00 -2.8291803647734239e+00 + -1.6886950685007074e+00 2.5611668192236694e+00 -3.2626717093474666e+00 + -2.1665014291034437e+00 2.5746992810981775e+00 -3.6548155199738770e+00 + -2.6992437304450934e+00 2.5081776657624513e+00 -3.9899517243536766e+00 + -3.2624538955563489e+00 2.3578679859297713e+00 -4.2671800818152281e+00 + -3.8369111386039343e+00 2.1130588894150462e+00 -4.4947919718616767e+00 + -4.3893325936293595e+00 1.7836673361029627e+00 -4.6612016001962511e+00 + -4.8566389608288807e+00 1.4366621314438686e+00 -4.7596032238373196e+00 + -5.1989866610843203e+00 1.1479077535097117e+00 -4.8381844956487665e+00 + -5.4766541678732565e+00 8.9043275010020728e-01 -4.9841465366508331e+00 + -5.8691218260979410e+00 4.8993984879486380e-01 -5.2862355022720200e+00 + id 14364 + loc 2.1395842730998993e-01 5.0024640560150146e-01 381 + blend 0.0000000000000000e+00 + interp 4.0185562337497904e-01:3.6689673351017327e-01:7.4636732185076715e-02:4.0185160481874532e-01:1.0004253972972108e+00:3.1783409334682999e-01:1.9596437579140218e+00:3.7599668095245753e-01:2.6404017149612633e+00:3.5296408767733523e-01:3.2666252304930228e+00 + CVs 20 + 9.1106207519235138e-01 2.8781471611175763e-01 -6.2923010956439929e-01 + 1.4877818531883300e+00 4.2858391813635283e-01 -1.0566824191243733e+00 + 1.9802787006737057e+00 4.9942156063776522e-01 -1.4248966686693576e+00 + 2.4980198384344208e+00 5.3462181378047635e-01 -1.7850041632058160e+00 + 3.0442625546445514e+00 5.2820454030928543e-01 -2.1326786150648132e+00 + 3.6124148061014836e+00 4.7437810943996939e-01 -2.4793495633114837e+00 + 4.1826564345665824e+00 3.6719719187262412e-01 -2.8398136525597399e+00 + 4.7306886244224335e+00 1.9816841934660434e-01 -3.2123073083216749e+00 + 5.2434185946056360e+00 -4.6934543040381804e-02 -3.5638312818791462e+00 + 5.7138400481467357e+00 -3.7090784943758592e-01 -3.8456664879678479e+00 + 6.1363318835719403e+00 -7.4199341734209923e-01 -4.0330973687876019e+00 + 6.5173701571129019e+00 -1.1181307929153146e+00 -4.1321959454414579e+00 + 6.8675851974633453e+00 -1.4980255614119022e+00 -4.1598480359540542e+00 + 7.1624651349155943e+00 -1.9483954176123446e+00 -4.1268375122994039e+00 + 7.3640856623080708e+00 -2.5314569043066752e+00 -4.0549197352790163e+00 + 7.5042572288030414e+00 -3.2585844837850146e+00 -3.9850217565737651e+00 + 7.6604308775018630e+00 -4.1127097217559045e+00 -3.9703509482427455e+00 + 7.8606746938725767e+00 -5.0061926801536414e+00 -4.0887501259038785e+00 + 8.0598459501108817e+00 -5.7073149597195023e+00 -4.3765944392664551e+00 + id 14365 + loc 2.7781876921653748e-01 5.9685260057449341e-01 1079 + blend 0.0000000000000000e+00 + interp 4.9094543167691795e-01:3.9098990021320446e-01:5.6505788548685065e-01:3.7855612357938767e-01:1.4308282714311660e+00:2.8271963069267553e-01:2.0709019033880809e+00:3.2611286644341020e-01:2.9804941506661193e+00:4.9094052222260121e-01:3.2877762015668264e+00:4.1014865497899106e-01:3.9986918727228900e+00 + CVs 20 + -4.1298066543541609e-02 3.5981532209358624e-01 2.1484226401198342e-01 + -4.4481659814388147e-02 6.8512094706991866e-01 3.5523612886055866e-01 + -2.6373131107013170e-02 1.0025371026059959e+00 4.4999474046030474e-01 + 4.3072766855516420e-03 1.3360221593375257e+00 5.1786667596563007e-01 + 5.2671553697880846e-02 1.6833688154576378e+00 5.5159067121449878e-01 + 1.2387067717857903e-01 2.0377727297271182e+00 5.3801329054886537e-01 + 2.1995609236985331e-01 2.3788961603997381e+00 4.5291375688589575e-01 + 3.3274789731150756e-01 2.6702268862977103e+00 2.7640513218675200e-01 + 4.4276831402786448e-01 2.8736051175926485e+00 1.2011066058490005e-02 + 5.2824166195242361e-01 2.9645319934985794e+00 -3.1457419449315394e-01 + 5.7438610714843419e-01 2.9374838017220446e+00 -6.6931123956778027e-01 + 5.7576169257917664e-01 2.8005326856061075e+00 -1.0230723009977156e+00 + 5.3407958817918921e-01 2.5655912617346313e+00 -1.3562750260537360e+00 + 4.5638344225279537e-01 2.2412584172046084e+00 -1.6557550097657878e+00 + 3.5224613333013066e-01 1.8275916397747647e+00 -1.9033975393200449e+00 + 2.2441380968021729e-01 1.3134863796772795e+00 -2.0406012613333573e+00 + 6.2399924628311398e-02 7.3021688193237766e-01 -1.9262598127046249e+00 + -1.3122438439001147e-01 2.5069625943193841e-01 -1.5335469612369330e+00 + -3.1051857233452052e-01 -1.6295667742286757e-01 -1.3734149400633033e+00 + id 14366 + loc 7.2979235649108887e-01 4.0690246224403381e-01 412 + blend 0.0000000000000000e+00 + interp 4.0301111171317650e-01:2.9163144745613240e-01:7.5493050403912187e-02:4.0300708160205939e-01:1.0031848815883679e+00:3.2155464736768519e-01:1.9230096579553855e+00:2.9455803615478532e-01:2.7954650623543138e+00:3.4936357046507571e-01:3.3058073367458181e+00 + CVs 20 + -6.1152300296163664e-01 1.3906304559516974e-01 1.9526481202805968e-01 + -1.0376638273031913e+00 1.8940408889639099e-01 3.5085198147150748e-01 + -1.4073310915729058e+00 2.0298380580971853e-01 4.8933019164339675e-01 + -1.7846658604773538e+00 2.0495210224697857e-01 6.1946470331752634e-01 + -2.1629010105194402e+00 1.9377727172717729e-01 7.3683912740782864e-01 + -2.5347077055187750e+00 1.6888243187534613e-01 8.3773826932055317e-01 + -2.8933705717005731e+00 1.3137115895408868e-01 9.1936717526353195e-01 + -3.2335353355756342e+00 8.3332236729086295e-02 9.8034769252951992e-01 + -3.5508377763823882e+00 2.6891249230091674e-02 1.0209658749274593e+00 + -3.8416892589358498e+00 -3.6008718795921490e-02 1.0424902811200436e+00 + -4.1072650197986249e+00 -1.0282269657940102e-01 1.0447780387663852e+00 + -4.3620039434630229e+00 -1.7014844247283634e-01 1.0237242846103924e+00 + -4.6288197608326520e+00 -2.4429289742439364e-01 9.7737896780813704e-01 + -4.9120689343687589e+00 -3.4915629300143491e-01 9.2079795229004513e-01 + -5.1962602450489443e+00 -5.0440989220256549e-01 8.7285822408670977e-01 + -5.4721842781809764e+00 -7.1387279539881110e-01 8.3557435344746533e-01 + -5.7373744432089939e+00 -9.7652025226103301e-01 8.0544966610309743e-01 + -5.9830584960251816e+00 -1.2849684205630287e+00 7.8670616413888128e-01 + -6.1119509139903005e+00 -1.5709169457219754e+00 7.9536886665914952e-01 + id 14367 + loc 7.0708066225051880e-01 7.5721251964569092e-01 378 + blend 0.0000000000000000e+00 + interp 3.2339158421640235e-01:3.2079265233299381e-01:5.2831872547322267e-01:2.4965331366458723e-01:1.0236456981365740e+00:3.2338835030056018e-01:1.8297651224630376e+00:2.6054640377277505e-01:2.1475784373955600e+00:3.0630198401845848e-01:3.0127251238166055e+00:2.6877279762144296e-01:3.9826176848603327e+00 + CVs 20 + 4.5601230710014223e-01 3.4967650294904856e-01 1.1019305657077363e-01 + 8.6713432180152727e-01 6.3479021346247932e-01 1.7369225107383282e-01 + 1.2934027822469367e+00 8.7525368508482038e-01 1.9704831616412388e-01 + 1.7552360749115825e+00 1.0921143164106448e+00 1.9124652413625692e-01 + 2.2424291882104352e+00 1.2990717214136327e+00 1.7732634931982605e-01 + 2.7524773710916168e+00 1.4964617124398287e+00 1.8128909687496386e-01 + 3.2866711341077188e+00 1.6669046873625990e+00 2.2569419614163055e-01 + 3.8376878942832482e+00 1.7904330472778600e+00 3.2459663609319001e-01 + 4.3875244224730512e+00 1.8542190290668163e+00 4.8133096297907207e-01 + 4.9151974502729932e+00 1.8514528859294630e+00 6.8606079167943290e-01 + 5.4065745313777400e+00 1.7783820714629004e+00 9.1821290033313852e-01 + 5.8568402821607348e+00 1.6299223937442755e+00 1.1565559127156300e+00 + 6.2625753143158391e+00 1.3993214121060125e+00 1.3839020805272335e+00 + 6.6179035445174765e+00 1.0928304859200177e+00 1.5862996480193143e+00 + 6.9266591577094658e+00 7.4293159119162455e-01 1.7599596571031615e+00 + 7.2106393279113323e+00 4.0265123225191202e-01 1.9157468451313235e+00 + 7.4941191262036053e+00 1.3005807673314962e-01 2.0608448194782540e+00 + 7.7963041897335525e+00 -5.7611666884324730e-02 2.1876579703329497e+00 + 8.2055658266458664e+00 -2.7939528507524258e-01 2.3324113770506876e+00 + id 14368 + loc 5.7574081420898438e-01 7.4343687295913696e-01 379 + blend 0.0000000000000000e+00 + interp 4.6545351831343412e-01:2.9543183662298639e-01:2.9286664069607671e-03:3.9496469378128229e-01:6.8822268360431527e-01:3.3807426605504770e-01:1.0717458336030385e+00:3.2485714943319477e-01:2.0947722567128562e+00:4.6544886377825101e-01:2.9404153002832425e+00:4.3924712299537644e-01:3.3473588877060232e+00 + CVs 20 + -3.1871166023717917e-01 3.4172058821129209e-01 2.4614509893316555e-01 + -6.0325637550797973e-01 6.1646136719864231e-01 4.7416191905804178e-01 + -8.9022445742763656e-01 8.5234997118719313e-01 7.0279711267906142e-01 + -1.1959778530657217e+00 1.0784416964430710e+00 9.2540597469912533e-01 + -1.5144945924715647e+00 1.3101236540279100e+00 1.1096603864412737e+00 + -1.8428097097427447e+00 1.5379581749244600e+00 1.2255500767301051e+00 + -2.1904665694511318e+00 1.7329150041020656e+00 1.2568334937475885e+00 + -2.5629337706309636e+00 1.8663091899433264e+00 1.1971404313831833e+00 + -2.9497474094949387e+00 1.9208483801257163e+00 1.0484712163223417e+00 + -3.3334528984147989e+00 1.8913729051577000e+00 8.2312094377642120e-01 + -3.6922467028829837e+00 1.7819564050635268e+00 5.4549633931021568e-01 + -4.0068679186474068e+00 1.5928828382374052e+00 2.5288992100968566e-01 + -4.2983835285547292e+00 1.3039051442949061e+00 -2.0197030552074779e-02 + -4.6485614038441021e+00 8.8088877427603007e-01 -2.3807529550159856e-01 + -5.1376700051562088e+00 3.5020569823813874e-01 -3.0165907824748339e-01 + -5.7639587767323786e+00 -1.3336384812009294e-01 -8.1181724819173517e-02 + -6.4077931954745662e+00 -3.5118050838302617e-01 4.5005798456142121e-01 + -6.8608640130963252e+00 -2.3213394218492756e-01 1.0844071041059087e+00 + -7.1434403502782198e+00 -1.4828510576187304e-01 1.4504871111996986e+00 + id 14369 + loc 7.5514632463455200e-01 4.1024214029312134e-01 1069 + blend 0.0000000000000000e+00 + interp 3.3083578266372687e-01:2.9310780441184275e-01:6.7332824849270256e-01:2.6770878453394359e-01:1.7207074757837637e+00:3.3083247430590024e-01:2.3902925521465983e+00:2.9072988022903823e-01:2.9949994166494789e+00:2.6235686870380492e-01:3.8066736229838005e+00 + CVs 20 + -1.0976381409738303e-01 2.0304309658701591e-01 2.4202916694266491e-01 + -2.4602901419219106e-01 3.8929932538997941e-01 4.7655100180423010e-01 + -4.1931482538431408e-01 5.5716538895445733e-01 6.9917523068278808e-01 + -6.3832225293782052e-01 7.0873407421209667e-01 8.9988033931970968e-01 + -9.1071254286559800e-01 8.6032185194038102e-01 1.0703139838499656e+00 + -1.2197279738614721e+00 1.0570841193399991e+00 1.2146647376833810e+00 + -1.4980185348524822e+00 1.3443638782980640e+00 1.3463382029060413e+00 + -1.6730819385838922e+00 1.7039517496383410e+00 1.4828867664197976e+00 + -1.7253698898140724e+00 2.0722125499361326e+00 1.6479059720123823e+00 + -1.6668638606359312e+00 2.3693464993537958e+00 1.8655035317699076e+00 + -1.5336529148845930e+00 2.5138579549926980e+00 2.1296539247891397e+00 + -1.3750316984338238e+00 2.4930761032712323e+00 2.3989918115908218e+00 + -1.2219292243467552e+00 2.3405000019357169e+00 2.6402572375470177e+00 + -1.1053211913177630e+00 2.0938383640020581e+00 2.8264742225582351e+00 + -1.0469674581660811e+00 1.7945059570287354e+00 2.9488529172305542e+00 + -1.0620951650237240e+00 1.4730795811388786e+00 2.9909954106431043e+00 + -1.1606516071405713e+00 1.1786236964078460e+00 2.9156203588715277e+00 + -1.3101418524501240e+00 9.5778444519287320e-01 2.7399482248900529e+00 + -1.4262289357887996e+00 6.2606670598971614e-01 2.6307345942563694e+00 + id 14370 + loc 1.4071837067604065e-01 8.6745530366897583e-01 404 + blend 0.0000000000000000e+00 + interp 4.4371876664391263e-01:4.2459051536142517e-01:5.5805491564249632e-02:2.9051391334452403e-01:7.7140360192242086e-01:3.4541808224178921e-01:1.9141249716817001e+00:3.8704739862793058e-01:2.7903394236265906e+00:4.4371432945624623e-01:3.0711338911227961e+00:3.2411218838163613e-01:3.7011096895081379e+00 + CVs 20 + 1.0985951207586490e-02 5.1689497476372220e-02 2.5911660815190599e-02 + 1.5856118566216860e-02 1.1270956910559210e-01 4.9408219933046178e-02 + 1.6716802075179629e-02 1.8014160795441125e-01 6.8029354824641716e-02 + 1.6936219110642386e-02 2.5546927961033888e-01 8.0448853391937164e-02 + 1.6767288539682984e-02 3.3870224811918220e-01 8.6522918238490495e-02 + 1.5784575531107486e-02 4.2870286403830293e-01 8.5839447405314143e-02 + 1.3242012333687603e-02 5.2428789028252687e-01 7.8443620344334081e-02 + 8.1911804287592704e-03 6.2429883913340189e-01 6.4844052669689331e-02 + -4.3504610791789133e-04 7.2770004056962478e-01 4.5988723203067336e-02 + -1.3620144966600412e-02 8.3371865167929426e-01 2.3270218907739254e-02 + -3.2055104940589108e-02 9.4187607644804949e-01 -1.8169665841327454e-03 + -5.5935069127383275e-02 1.0520034066151069e+00 -2.8095150279242101e-02 + -8.4802562129351555e-02 1.1642378694489617e+00 -5.5295092317615285e-02 + -1.1763689899387908e-01 1.2792231252464408e+00 -8.4250661532157323e-02 + -1.5275193388720743e-01 1.3976250232573988e+00 -1.1555890495208845e-01 + -1.8755175538555602e-01 1.5191548490595097e+00 -1.4784097413705852e-01 + -2.1857156004828449e-01 1.6434013251557225e+00 -1.7962803163045168e-01 + -2.4256065826292050e-01 1.7691865931583730e+00 -2.1008308590620012e-01 + -2.8156909446518907e-01 1.8848351031265964e+00 -2.3230871413251508e-01 + id 14371 + loc 2.7701330184936523e-01 2.0880420506000519e-01 402 + blend 0.0000000000000000e+00 + interp 3.8229135444783147e-01:2.8412556365050151e-01:1.9491382230641308e-01:3.8228753153428702e-01:9.0252619343086649e-01:2.8638342293701974e-01:1.1608079333960646e+00:2.9212159298531326e-01:2.1343299099677684e+00:2.8923465479410582e-01:3.2404667267897853e+00 + CVs 20 + -1.7039036380532463e-01 2.7178947894481753e-01 2.5077754773385463e-01 + -3.4272787538873217e-01 5.3237740342969386e-01 4.8010353788589777e-01 + -5.3751154759013331e-01 7.8547447142055493e-01 6.7302899835348218e-01 + -7.6356522555990058e-01 1.0275637633494157e+00 8.2219173105649479e-01 + -1.0182746397449531e+00 1.2528941919022207e+00 9.3304334640231246e-01 + -1.3000958251457373e+00 1.4588279223652421e+00 1.0138659987057763e+00 + -1.6090169745016201e+00 1.6438956244476381e+00 1.0655067781450571e+00 + -1.9473494047392481e+00 1.8065448975337020e+00 1.0905618463451385e+00 + -2.3176153433063575e+00 1.9429176494610867e+00 1.1029700941329503e+00 + -2.7133538758699594e+00 2.0448461733811660e+00 1.1164931612907283e+00 + -3.1194793508916137e+00 2.1019569192825958e+00 1.1312741530090287e+00 + -3.5239569622821403e+00 2.1012127754605396e+00 1.1463760578830717e+00 + -3.9246298037602618e+00 2.0195890136344516e+00 1.1786938794868560e+00 + -4.3216033586740208e+00 1.8255937124281467e+00 1.2660879167716463e+00 + -4.6944597719573053e+00 1.5094953721965738e+00 1.4661633892628996e+00 + -5.0011771683806927e+00 1.1254488271118959e+00 1.8454905356308147e+00 + -5.2101117888772830e+00 8.1352537689560678e-01 2.4424079012833801e+00 + -5.3070597671307675e+00 7.3635286663669963e-01 3.1734380964620326e+00 + -5.3583454483023107e+00 6.7340551066023213e-01 3.7917704611651208e+00 + id 14372 + loc 5.6512564420700073e-01 6.0204148292541504e-02 395 + blend 0.0000000000000000e+00 + interp 5.5937416383588767e-01:2.5605235194842246e-01:7.6033246930422682e-01:5.5936857009424934e-01:1.2270244736038525e+00:5.2989954394122563e-01:1.6330833326574643e+00:4.1568299621299376e-01:2.0351265119457782e+00:3.2714659001726037e-01:2.6003686945114231e+00:4.2458492904885808e-01:3.1042297405862502e+00:2.9801910776523671e-01:3.9042830973188138e+00 + CVs 20 + -3.1976591093693152e-01 2.8643943932841698e-01 3.3875878567421736e-01 + -5.9293964160237778e-01 5.0142738647525431e-01 6.5921331307013364e-01 + -8.6048779217446936e-01 6.7363907464376438e-01 9.8530412961658365e-01 + -1.1446103029209724e+00 8.1414937822081834e-01 1.3293034564729982e+00 + -1.4476951943278893e+00 9.1867691477799074e-01 1.6862350005619586e+00 + -1.7657284876865882e+00 9.8482248900574199e-01 2.0515794861130119e+00 + -2.0930579141877321e+00 1.0108453960516806e+00 2.4222895322292728e+00 + -2.4248565600058707e+00 9.8951028567201083e-01 2.7911800276308552e+00 + -2.7509114327308914e+00 9.1011261224867779e-01 3.1458707635974501e+00 + -3.0561792033601725e+00 7.6878634104248889e-01 3.4780567594692764e+00 + -3.3338486051567982e+00 5.6961615020551104e-01 3.7894440024920737e+00 + -3.5936133327720401e+00 3.1466875070556810e-01 4.0881270253002890e+00 + -3.8406538109698882e+00 1.5589827455642080e-03 4.3796446433717353e+00 + -4.0495772962182492e+00 -3.6396630930756890e-01 4.6653982615659020e+00 + -4.1776374844296882e+00 -7.6290975933581606e-01 4.9469743877597052e+00 + -4.1847518653289795e+00 -1.1785499855985639e+00 5.2127151412018717e+00 + -4.0424641127118850e+00 -1.5946581215135591e+00 5.4250650320190115e+00 + -3.7721171222836514e+00 -1.9853891043401461e+00 5.5698678915102491e+00 + -3.6891327659709168e+00 -2.4961975702722703e+00 5.8685110481435645e+00 + id 14373 + loc 9.4801467657089233e-01 5.9581693261861801e-02 401 + blend 0.0000000000000000e+00 + interp 3.5371813094395527e-01:3.5371459376264586e-01:2.7555429282678812e-01:2.6155744839324341e-01:1.2545964239984781e+00:3.2669647537031948e-01:2.2049583196914275e+00:3.2640022899271010e-01:3.0028782652370003e+00:3.2447208228933833e-01:3.8525189509449094e+00 + CVs 20 + 1.2655402635510166e-01 3.3457784319734118e-01 2.1958894375472082e-01 + 2.6384902739066846e-01 6.3912800382253321e-01 4.3748914493174962e-01 + 4.0114506878649214e-01 9.1149864436147099e-01 6.8281125012026933e-01 + 5.4205911983917265e-01 1.1401156835497075e+00 9.6331648866870945e-01 + 6.9770479254066253e-01 1.3090837668682960e+00 1.2690590710276033e+00 + 8.7647787986527170e-01 1.4062978866538633e+00 1.5849050963282640e+00 + 1.0844271144089221e+00 1.4249230355903131e+00 1.8979184643380154e+00 + 1.3287451099607679e+00 1.3660911341366115e+00 2.1987606913383568e+00 + 1.6115274310014767e+00 1.2456420971468933e+00 2.4723876310593731e+00 + 1.9211089919484658e+00 1.0806685708080406e+00 2.7043941783662691e+00 + 2.2410852366026468e+00 8.6585807502876144e-01 2.8984255759826398e+00 + 2.5680131965080779e+00 5.9677389477026133e-01 3.0671805877626852e+00 + 2.9106565097008308e+00 3.1582675102190000e-01 3.2134964886746213e+00 + 3.2682819213445029e+00 7.4901710703366986e-02 3.3342436954466881e+00 + 3.6382856783725357e+00 -1.2769806704251641e-01 3.4388564535739925e+00 + 4.0358088168803281e+00 -2.8237586651933222e-01 3.5484511864617674e+00 + 4.4277703424140364e+00 -2.6364802180842595e-01 3.6678775862660769e+00 + 4.7551315110034817e+00 -6.3845949137700975e-02 3.7975444959418851e+00 + 5.2471092763351139e+00 6.2163498172084997e-02 4.0167172601540280e+00 + id 14374 + loc 1.0135672241449356e-01 1.3339664041996002e-01 396 + blend 0.0000000000000000e+00 + interp 4.9771332196527096e-01:3.0534332392592767e-01:7.2161199601236081e-01:3.8316225090204237e-01:1.4082618774634184e+00:3.0819699619850827e-01:2.0099116487986803e+00:4.9770834483205134e-01:2.4694890242051182e+00:3.1758064570506078e-01:3.1561237990884159e+00:2.9521725618093397e-01:3.9999925748382004e+00 + CVs 20 + -2.4217402049613032e-01 2.1569832306151848e-01 -5.5274547153994846e-01 + -4.3976645357638355e-01 3.3070771979410418e-01 -9.8692975225319146e-01 + -6.1218782710608044e-01 4.0856108782932543e-01 -1.4089243398381150e+00 + -7.6118452399381475e-01 4.7612137655914144e-01 -1.8677083111043997e+00 + -8.8101139971837683e-01 5.2436748266350364e-01 -2.3623450410849083e+00 + -9.7265478309470332e-01 5.4406439724077016e-01 -2.8890126024791289e+00 + -1.0431568156738678e+00 5.2557329542434861e-01 -3.4407513081021612e+00 + -1.0997548077274129e+00 4.5554445840560343e-01 -4.0069653294773380e+00 + -1.1498140362250111e+00 3.1672512604120739e-01 -4.5752926736578825e+00 + -1.2060778570758641e+00 9.1964416734120036e-02 -5.1289355716073199e+00 + -1.2790375313370532e+00 -2.2605651553646222e-01 -5.6394442998016858e+00 + -1.3600441469561799e+00 -6.2124877354941077e-01 -6.0751501211026344e+00 + -1.4301993003005911e+00 -1.0616161074356310e+00 -6.4235722592459013e+00 + -1.4837115984031799e+00 -1.5214399391562945e+00 -6.6908025570445346e+00 + -1.5239151504871842e+00 -1.9829102343513347e+00 -6.8847765423585221e+00 + -1.5455168089918980e+00 -2.4245593844898536e+00 -7.0095241117796849e+00 + -1.5374112738626204e+00 -2.8220036489466764e+00 -7.0736713397579418e+00 + -1.5025973509362027e+00 -3.1643280233975624e+00 -7.0989535483924646e+00 + -1.4731207220934714e+00 -3.4469078651447300e+00 -7.1531939561676525e+00 + id 14375 + loc 9.5149256289005280e-02 3.7432956695556641e-01 412 + blend 0.0000000000000000e+00 + interp 5.0783998722686630e-01:3.0843940045756257e-01:8.3658100462714602e-02:2.9788714252061843e-01:9.9029695240980964e-01:4.1856760978170149e-01:1.3689702113553870e+00:5.0783490882699400e-01:1.9527255907738166e+00:2.9877168511952806e-01:2.8605342369544289e+00:3.3730921368217942e-01:3.3374554449144052e+00 + CVs 20 + -7.1290048877634279e-02 1.2730721649752896e-01 -6.4818500859959527e-01 + -1.5712784374961802e-01 1.3194718544106621e-01 -1.1098044841182861e+00 + -2.3918632417976818e-01 9.2529308067842875e-02 -1.5178130723505583e+00 + -3.1954744546389280e-01 3.5832887117894674e-02 -1.9356060143757507e+00 + -3.9546956610959438e-01 -4.1458207207024311e-02 -2.3604367401302597e+00 + -4.6046862358154439e-01 -1.4134066549774327e-01 -2.7900890224078290e+00 + -5.0692373721955941e-01 -2.6533686937723755e-01 -3.2219226543299824e+00 + -5.3065769733384194e-01 -4.1215996525533094e-01 -3.6513112460874222e+00 + -5.3058746005740376e-01 -5.7786592662715996e-01 -4.0730425908521095e+00 + -5.0790985079981177e-01 -7.5740418895571460e-01 -4.4822618102185467e+00 + -4.7886375262752712e-01 -9.4953012454166608e-01 -4.8661614488634326e+00 + -4.9562785032081780e-01 -1.1596945761657047e+00 -5.1930412983930117e+00 + -6.1583268796896851e-01 -1.3817403755313928e+00 -5.4275274945550800e+00 + -8.3003195436573129e-01 -1.5904786638855335e+00 -5.5775536825652079e+00 + -1.0941819752754740e+00 -1.7748323458862039e+00 -5.6843539236241174e+00 + -1.3918490359828826e+00 -1.9258320639682485e+00 -5.7560167654038938e+00 + -1.7144701377553768e+00 -2.0195441326972201e+00 -5.7773786474105258e+00 + -2.0408359190946017e+00 -2.0425436854573484e+00 -5.7526704351791125e+00 + -2.3455878108768138e+00 -2.1957094774146935e+00 -5.9080483615768369e+00 + id 14376 + loc 9.5367956161499023e-01 3.8589233160018921e-01 400 + blend 0.0000000000000000e+00 + interp 5.2925121918533014e-01:4.3873066983421610e-01:1.0466026703647702e-01:2.6653826162265021e-01:1.0626748379036157e+00:5.2924592667313830e-01:1.7458207519726883e+00:4.9767367567694359e-01:2.0228670982990655e+00:2.9869216017738159e-01:2.5557033106874809e+00:3.7483397872559748e-01:3.0078744981727543e+00:2.6668708567159427e-01:3.7500241569863744e+00 + CVs 20 + 3.3349707205037560e-01 2.0866579389384465e-01 2.7932753765415080e-01 + 6.3547547989399200e-01 3.9297459785024047e-01 5.5839420074743729e-01 + 9.1042243979663584e-01 5.6074082215741017e-01 8.5230127998600569e-01 + 1.1612062204562279e+00 7.1282501517796371e-01 1.1613868180518558e+00 + 1.3877127463900052e+00 8.5032896230225274e-01 1.4801634996528630e+00 + 1.5888510820329891e+00 9.7905475491539473e-01 1.8076424258352930e+00 + 1.7631492177931380e+00 1.1015230986187892e+00 2.1470824170302998e+00 + 1.9098544988091954e+00 1.2123743417388952e+00 2.5039057395774771e+00 + 2.0287214807680130e+00 1.3028112689360745e+00 2.8803508927701618e+00 + 2.1214395918565510e+00 1.3650949009141751e+00 3.2745087723204405e+00 + 2.1916075237676940e+00 1.3916314293756065e+00 3.6842446514539198e+00 + 2.2424451604590141e+00 1.3725153920887159e+00 4.1093103974319458e+00 + 2.2737277338418602e+00 1.2948725107557184e+00 4.5502064384719514e+00 + 2.2787994305481778e+00 1.1440726018831713e+00 5.0039730905838304e+00 + 2.2447882659880602e+00 9.0533932868633471e-01 5.4586468940743336e+00 + 2.1587061537870298e+00 5.6644048100416500e-01 5.8879562022203631e+00 + 2.0189606891583773e+00 1.2733737545096302e-01 6.2513269576921715e+00 + 1.8467009614811964e+00 -3.7688641597763439e-01 6.5153159224884334e+00 + 1.7411950780513976e+00 -7.6241120693722664e-01 6.7371935067883406e+00 + id 14377 + loc 1.9850698113441467e-01 9.4336206093430519e-03 381 + blend 0.0000000000000000e+00 + interp 3.5123681153607972e-01:1.4353715514533624e-01:8.0146346894284370e-01:1.9070855324766850e-01:1.8864007129454246e+00:3.5123329916796436e-01:2.9191752970826079e+00:3.3940840345459439e-01:3.8374223321225278e+00 + CVs 20 + -6.3241745202416944e-01 1.9696866757969131e-01 -7.6373409612921617e-01 + -1.0858246389366055e+00 2.8133765385357179e-01 -1.2853496624257978e+00 + -1.4900961444278542e+00 3.4613217738887414e-01 -1.7549915580121265e+00 + -1.8949937109724553e+00 4.3311805593116681e-01 -2.2517934039634868e+00 + -2.3041998237655266e+00 5.3793960048148226e-01 -2.7780766294114012e+00 + -2.7305669936960255e+00 6.4386876621122835e-01 -3.3358467029890528e+00 + -3.1895531210275747e+00 7.1720863830272530e-01 -3.9205073002567836e+00 + -3.6820958861035411e+00 7.1350555603552301e-01 -4.5183574740022507e+00 + -4.1903696781881372e+00 5.9398673750914588e-01 -5.1082889049800864e+00 + -4.6929435732229363e+00 3.4231547695219944e-01 -5.6616611644071311e+00 + -5.1762762212665194e+00 -3.3746010498608037e-02 -6.1475327692873485e+00 + -5.6189849709758954e+00 -5.1804153496318417e-01 -6.5413541488057785e+00 + -5.9907417270779240e+00 -1.0738086793031498e+00 -6.8227395086254505e+00 + -6.2614243645575876e+00 -1.6333510473501618e+00 -6.9816623958688186e+00 + -6.4251361285590640e+00 -2.1353139566793891e+00 -7.0417718253708843e+00 + -6.4953528512706908e+00 -2.5655886460097030e+00 -7.0591054141084966e+00 + -6.4933161394982601e+00 -2.9571930401849245e+00 -7.0960412817166256e+00 + -6.4858352403186146e+00 -3.3630900731963225e+00 -7.1831361213029403e+00 + -6.6269212909437885e+00 -3.7852642722075496e+00 -7.2787196218432850e+00 + id 14378 + loc 7.4367821216583252e-01 3.8959532976150513e-01 393 + blend 0.0000000000000000e+00 + interp 4.4464445169164540e-01:4.4464000524712849e-01:6.6646544748189873e-02:3.2524021589386132e-01:9.9174647506965086e-01:3.0741181287539115e-01:1.7883161121218845e+00:3.2571028074683633e-01:2.2594035256512761e+00:4.4281298718925294e-01:2.9691766565602711e+00:3.0857610442706945e-01:3.2775652010842755e+00 + CVs 20 + 3.4134660886194296e-01 3.5582317270714137e-01 1.4227924109257059e-01 + 7.0976320638773016e-01 7.1866616359728530e-01 2.6790702992325555e-01 + 1.0916754710002139e+00 1.1027495522483028e+00 4.0370836549774142e-01 + 1.4839499009213157e+00 1.4910304090533730e+00 5.8368781122923763e-01 + 1.8819822537899709e+00 1.8533536103057402e+00 8.4452046943901027e-01 + 2.2694080248076047e+00 2.1680949576449056e+00 1.2059012335054669e+00 + 2.6262975597688332e+00 2.4227258934333378e+00 1.6577501645937081e+00 + 2.9408641162641045e+00 2.6035965187837506e+00 2.1637670436558629e+00 + 3.2147350423659020e+00 2.7033397184284449e+00 2.6877094262790298e+00 + 3.4549695921325845e+00 2.7192778458119702e+00 3.2088102066462874e+00 + 3.6691847655785481e+00 2.6459318101917724e+00 3.7158178790204137e+00 + 3.8649706606590826e+00 2.4708791129284657e+00 4.1991531416130838e+00 + 4.0486543871302434e+00 2.1804057555819489e+00 4.6288879964574630e+00 + 4.2261542940373147e+00 1.7836476406346036e+00 4.9360307383827182e+00 + 4.4046477917381832e+00 1.3426538569905353e+00 5.0375187114640285e+00 + 4.5969565843703766e+00 9.7882828935417177e-01 4.9188354503365819e+00 + 4.8174408598681335e+00 7.8080602854117043e-01 4.6745135644949753e+00 + 5.0673045202121951e+00 6.6425033043221271e-01 4.4160235847745462e+00 + 5.4008577578851922e+00 2.2662421888632078e-01 4.2532821381638497e+00 + id 14379 + loc 2.6318836212158203e-01 4.7237247228622437e-01 378 + blend 0.0000000000000000e+00 + interp 4.4134802387009997e-01:4.2098312251938602e-01:5.2288620723745360e-01:3.0419976088644129e-01:1.0008632988761033e+00:4.2752700495197404e-01:1.9112218165782195e+00:2.8307756894691127e-01:2.6422166745531839e+00:4.4134361038986131e-01:3.1731732621656246e+00:2.7726017534898062e-01:3.9996381461874182e+00 + CVs 20 + 1.9302232537505778e-01 3.6478164354033338e-01 -3.9419248431710907e-01 + 3.6773865795818439e-01 6.6407171445468305e-01 -7.6888990625873310e-01 + 5.5466861398157019e-01 9.2031842466646596e-01 -1.1689459296697222e+00 + 7.7794327897046966e-01 1.1505902428294843e+00 -1.6065039531585352e+00 + 1.0525137220863718e+00 1.3542159692167435e+00 -2.0626891833828389e+00 + 1.3899046721737611e+00 1.5130823628385803e+00 -2.5195446308773426e+00 + 1.7896674160759158e+00 1.5981170752233469e+00 -2.9603931144078905e+00 + 2.2367548881871890e+00 1.5875706074117732e+00 -3.3646805088832563e+00 + 2.7037566540756939e+00 1.4719592074250278e+00 -3.7170790459378029e+00 + 3.1551633343687970e+00 1.2488842003839837e+00 -4.0158981026107314e+00 + 3.5520495612203140e+00 9.2087861454791176e-01 -4.2590504484299530e+00 + 3.8570702431027160e+00 4.9823788729811458e-01 -4.4311063035019878e+00 + 4.0557151338082349e+00 1.4658964056580182e-02 -4.5232019094128804e+00 + 4.2045912555009499e+00 -4.9092657122603400e-01 -4.5801699729220964e+00 + 4.3989511524977853e+00 -1.0064360271712061e+00 -4.6772295432491937e+00 + 4.6742769915964084e+00 -1.5138901138604846e+00 -4.8774156191779809e+00 + 4.9811562449563418e+00 -1.9782323179677941e+00 -5.2300749221842704e+00 + 5.2430123980389354e+00 -2.3555779768499114e+00 -5.6978993885907050e+00 + 5.4803073095184134e+00 -2.6192733293446078e+00 -5.9074618895017448e+00 + id 14380 + loc 3.6405616998672485e-01 3.2137486338615417e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1257268133471356e-01:2.7243202318018006e-01:6.9099457742566428e-01:3.0259317787948253e-01:1.8542261300299798e+00:3.9212284632452332e-01:2.6901404040440955e+00:5.1256755560790024e-01:3.1206749185940845e+00:3.7170138603606545e-01:3.8039513032586290e+00 + CVs 20 + 1.2066172008957052e-01 3.9527082259258300e-01 8.2014113954328324e-02 + 1.9021515447972259e-01 7.1962169548495569e-01 1.0216363680358281e-01 + 2.3932995472474655e-01 1.0081486290845083e+00 9.6543392262225525e-02 + 2.8837654790206241e-01 1.2790006760424373e+00 8.7640917543602648e-02 + 3.3808510087748361e-01 1.5339926979507732e+00 7.6402426853376781e-02 + 3.9069777287653118e-01 1.7818134399117582e+00 6.2804657161039945e-02 + 4.3708641290770689e-01 2.0398695180496169e+00 4.1870818090534390e-02 + 4.4828970310015581e-01 2.3197603129195845e+00 3.6376739101212641e-03 + 3.9005177107448596e-01 2.6100021763677028e+00 -5.7136353059725087e-02 + 2.4487084706689810e-01 2.8790200633492864e+00 -1.3442122851866645e-01 + 2.0068974456926014e-02 3.0942978879095682e+00 -2.1676537000870288e-01 + -2.6309276659471137e-01 3.2371242317451276e+00 -2.9495416513197126e-01 + -5.8266092420993254e-01 3.3010425184452155e+00 -3.6317449779208844e-01 + -9.2237274368991029e-01 3.2860735861412422e+00 -4.1845364300910426e-01 + -1.2789398488682788e+00 3.1939419717451694e+00 -4.6323201944443548e-01 + -1.6839996578237419e+00 3.0156431151418501e+00 -5.1201749548987685e-01 + -2.1774040779802690e+00 2.6852463646315279e+00 -5.7930487081897719e-01 + -2.5864096139055879e+00 2.1455865336986295e+00 -6.4501267577288568e-01 + -2.4843589411642641e+00 1.8500699519811272e+00 -6.8893006382790500e-01 + id 14381 + loc 3.0673819780349731e-01 6.9623911380767822e-01 399 + blend 0.0000000000000000e+00 + interp 4.7244106334504948e-01:3.2535257236607529e-01:5.6014029457467407e-01:3.4958047649664414e-01:1.2963865585020458e+00:4.7243633893441606e-01:1.9482797600477850e+00:3.9208355559450597e-01:2.3101199504659027e+00:3.4506513956614748e-01:3.0360798551781691e+00:4.6032090801766540e-01:3.9410271072607399e+00 + CVs 20 + -1.3490098309290260e-01 3.4843229137458265e-01 -4.0556782919503953e-01 + -2.5817508061877203e-01 6.8016510024194998e-01 -8.0273733787243384e-01 + -3.6973649909175671e-01 9.7604898628402770e-01 -1.2196214075748546e+00 + -4.7981495730359225e-01 1.2292170434085639e+00 -1.6632446325063819e+00 + -6.0660458430471298e-01 1.4378324560147013e+00 -2.1271265481098700e+00 + -7.7398021856574273e-01 1.6007156720253393e+00 -2.6008353383748917e+00 + -9.9660295697174861e-01 1.7079698409580364e+00 -3.0590378245245828e+00 + -1.2595250174870698e+00 1.7438734852907645e+00 -3.4608657142636359e+00 + -1.5215525498240206e+00 1.7068266957747400e+00 -3.7728099552672987e+00 + -1.7555865133295614e+00 1.6128324742024580e+00 -3.9869205752275816e+00 + -1.9578799414366870e+00 1.4823707640653176e+00 -4.1037470615459561e+00 + -2.1359734355979669e+00 1.3205292802426867e+00 -4.1196129879803447e+00 + -2.3136934890336867e+00 1.0809710160730095e+00 -4.0459577320608719e+00 + -2.5318233246281676e+00 6.8053791491425208e-01 -3.9478941349866621e+00 + -2.8613482051550800e+00 1.0363298915712466e-01 -3.9279566530140864e+00 + -3.3973683002557871e+00 -5.1289998853523189e-01 -4.0494445971216715e+00 + -4.1874444406115545e+00 -9.4086931536460328e-01 -4.3140920004634458e+00 + -5.0301712388593138e+00 -8.8877324761010823e-01 -4.6214816903943214e+00 + -5.4342746127443444e+00 -4.8192941774012138e-01 -4.7239519233188663e+00 + id 14382 + loc 3.9015150070190430e-01 3.3088818192481995e-01 402 + blend 0.0000000000000000e+00 + interp 4.5145114117464730e-01:2.5848022725473857e-01:8.5590479364771710e-02:4.5144662666323560e-01:8.0088804412290615e-01:2.8277468300802089e-01:1.5033978658183429e+00:2.7005299252293130e-01:2.7148379336598407e+00:2.8495858989094652e-01:3.2970820911365237e+00 + CVs 20 + -1.6619028176265660e-01 5.0476672097791087e-01 1.6329503805347934e-01 + -3.3175135478004752e-01 9.9958957683104810e-01 3.2569024163202709e-01 + -5.4626553647307874e-01 1.4943584660661020e+00 4.7613110291621136e-01 + -8.2861292504064277e-01 1.9775737272521117e+00 6.3020176086826107e-01 + -1.1832529674748946e+00 2.4246715102413123e+00 8.0108353397328724e-01 + -1.6136255392220091e+00 2.8111733904469798e+00 9.8528399847745318e-01 + -2.1160186820058930e+00 3.1128912795377048e+00 1.1784492719252782e+00 + -2.6729489329495530e+00 3.3080359160193851e+00 1.3821637207396749e+00 + -3.2621740738905434e+00 3.3823243516773895e+00 1.5925970699811254e+00 + -3.8625903565320234e+00 3.3259233883489507e+00 1.7947888686456062e+00 + -4.4353693423549565e+00 3.1308051270876773e+00 1.9811740550908605e+00 + -4.9155915312681708e+00 2.8063258938270210e+00 2.1629304923114754e+00 + -5.2391241810576137e+00 2.4108556333461779e+00 2.3570570148981922e+00 + -5.3866192477823258e+00 2.0507774534914254e+00 2.5736380893208475e+00 + -5.3934332924142447e+00 1.8286466350757196e+00 2.8004360881787109e+00 + -5.3228626745673324e+00 1.8055457613922976e+00 2.9886185152369174e+00 + -5.2297951460092573e+00 1.9588588488765262e+00 3.0583828017871104e+00 + -5.1824970050931780e+00 2.1138100576835983e+00 3.0417028252003462e+00 + -5.2993511373952860e+00 2.1087928897145201e+00 3.3121053963722162e+00 + id 14383 + loc 7.3110949993133545e-01 3.2988169789314270e-01 404 + blend 0.0000000000000000e+00 + interp 4.3350537359017649e-01:3.5102979708678356e-01:2.1679604507723693e-01:3.2628996408444760e-01:9.1085122177918332e-01:3.8468495687081133e-01:1.6243868323129933e+00:3.4307629692552083e-01:2.0889325904553377e+00:2.6782506933031153e-01:2.8399341313151059e+00:4.3350103853644062e-01:3.0224422582851869e+00:3.7991699397506645e-01:3.9391371261339994e+00 + CVs 20 + -7.1112709817823125e-02 1.0016653613733005e-01 7.2027485176776748e-02 + -1.1168585240619489e-01 2.0715425512755201e-01 1.6146194184079843e-01 + -1.4288445264984490e-01 3.2757788868999937e-01 2.6314806892453535e-01 + -1.8299846361550876e-01 4.6572106511409794e-01 3.7259369782310781e-01 + -2.3716091542179210e-01 6.2101247263407033e-01 4.9059593695332526e-01 + -3.1144628491831594e-01 7.9085203067262788e-01 6.1701107090259577e-01 + -4.1295617585523542e-01 9.7106895444194630e-01 7.5003592916101836e-01 + -5.4796864100383869e-01 1.1566282508967007e+00 8.8555256866149135e-01 + -7.2045756479579071e-01 1.3424112520445777e+00 1.0170275466942760e+00 + -9.3170542249274435e-01 1.5241188421472134e+00 1.1365579928545728e+00 + -1.1787831360572638e+00 1.6988005126312751e+00 1.2374577634435033e+00 + -1.4455962630239982e+00 1.8651381269454397e+00 1.3287226443172433e+00 + -1.7037192211904910e+00 2.0235873255235490e+00 1.4476649972111184e+00 + -1.9191127631210758e+00 2.1707371274713805e+00 1.6386416629893481e+00 + -2.0667318640981787e+00 2.2999384816519632e+00 1.9070483744473097e+00 + -2.1524252493181177e+00 2.4101368067455340e+00 2.2209557094404850e+00 + -2.1775011431854443e+00 2.5044499950333332e+00 2.5597083027206624e+00 + -2.1231485003408719e+00 2.5917439087600762e+00 2.9036212953025085e+00 + -2.2072293158300220e+00 2.7459938124873799e+00 3.1414618966086909e+00 + id 14384 + loc 5.7935017347335815e-01 6.7609691619873047e-01 401 + blend 0.0000000000000000e+00 + interp 4.5712133348544126e-01:3.4366443149897147e-01:2.3832854842052131e-01:3.7583225036749801e-01:1.0291986618911924e+00:3.3715080989799961e-01:1.9929228719278724e+00:4.5711676227210640e-01:2.5682767092430483e+00:3.9143349954716833e-01:3.0139813511604610e+00:2.7856384291537795e-01:3.6531777544609780e+00 + CVs 20 + -5.1953656558286959e-02 3.3908620351983010e-01 -3.6486199000120423e-01 + -8.9367975769211294e-02 6.7181908629681941e-01 -7.1154094587789329e-01 + -1.2660167583421744e-01 9.8185905919439398e-01 -1.0429871800506145e+00 + -1.6784895344674955e-01 1.2564474029108588e+00 -1.3630550307877911e+00 + -2.2072662799356990e-01 1.4991164417554794e+00 -1.6836441991302813e+00 + -3.0052085293262720e-01 1.7180933341109774e+00 -2.0143008341861086e+00 + -4.2283886611218657e-01 1.9137765604577046e+00 -2.3495929475275767e+00 + -5.9720732196048032e-01 2.0814947327104876e+00 -2.6769232265126419e+00 + -8.2854544431409582e-01 2.2111742604270948e+00 -2.9817918031205441e+00 + -1.1155466149504598e+00 2.2897447126536847e+00 -3.2453595061755758e+00 + -1.4488263345748746e+00 2.3102556375107151e+00 -3.4488458082284663e+00 + -1.8174408642224638e+00 2.2711479562368675e+00 -3.5790868806613543e+00 + -2.2052968783688014e+00 2.1665307943616821e+00 -3.6453074367305649e+00 + -2.5822294587985111e+00 1.9873677721204812e+00 -3.6756849655885322e+00 + -2.9303285349113208e+00 1.7260076361025471e+00 -3.6649004677820844e+00 + -3.2806336488921510e+00 1.3568676911363022e+00 -3.5683126297191596e+00 + -3.6916981835396960e+00 8.5810699154030556e-01 -3.4368643574867792e+00 + -4.1263940651568012e+00 3.2774153365736536e-01 -3.4585650146000062e+00 + -4.3745079517613918e+00 1.0516463797811682e-03 -3.6894436166569227e+00 + id 14385 + loc 2.9040476679801941e-01 4.3750947713851929e-01 379 + blend 0.0000000000000000e+00 + interp 4.2370832944308767e-01:2.1234161536647389e-01:7.7713578002283967e-01:2.6543875672023692e-01:1.5478313450686452e+00:4.2370409235979328e-01:2.1254326163950670e+00:2.1929583373055139e-01:2.9938449737911594e+00:2.6529675105850975e-01:3.8859328936195756e+00 + CVs 20 + 2.2871555729818094e-01 3.6204565378670506e-01 2.7305161536539180e-01 + 4.9796896971307847e-01 6.6120480107874369e-01 5.0944195235818879e-01 + 8.1218167483316905e-01 8.7447432568644645e-01 7.2869216952797145e-01 + 1.1568339181781333e+00 1.0329585652489213e+00 9.3816960377050007e-01 + 1.5077025038569407e+00 1.1877823818564262e+00 1.1468200145742768e+00 + 1.8422616508449168e+00 1.3688806085331668e+00 1.3805041758837846e+00 + 2.1388243974376433e+00 1.5802888077175736e+00 1.6674863628939061e+00 + 2.3778688722955330e+00 1.8157282468244840e+00 2.0190967568745712e+00 + 2.5458334942594663e+00 2.0660535839162968e+00 2.4302037033567334e+00 + 2.6359305014026946e+00 2.3116504793760368e+00 2.8912102646200126e+00 + 2.6506052121695634e+00 2.5183529698457292e+00 3.3928864118333464e+00 + 2.6062819752374322e+00 2.6417387158595096e+00 3.9162516993168937e+00 + 2.5243776238803157e+00 2.6356892873906452e+00 4.4189020880835628e+00 + 2.4228930363227028e+00 2.4801842030958059e+00 4.8642297626140767e+00 + 2.3190791502387054e+00 2.1811205442862605e+00 5.2269961415066231e+00 + 2.3045065737833381e+00 1.7924364800287105e+00 5.4586973280815165e+00 + 2.5780007608384174e+00 1.5467022745988621e+00 5.5016191160124954e+00 + 3.0398042243639454e+00 1.7190330765701134e+00 5.4049375512837692e+00 + 3.3938414641662531e+00 1.2467755254516391e+00 5.5519096123639393e+00 + id 14386 + loc 2.0893944799900055e-01 6.5791738033294678e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8399217992125012e-01:2.8708525361915005e-01:6.3590932609424344e-01:2.8629580362057055e-01:1.1286903053669437e+00:3.8398833999945092e-01:1.9663930288908624e+00:3.1014660422693513e-01:2.7325330214534471e+00:2.7880709034699125e-01:3.7557340891705988e+00 + CVs 20 + 2.2810202604213389e-01 2.3385620283580486e-01 -2.5038150087213201e-01 + 4.6843189729257395e-01 4.7357817942231578e-01 -5.1383523938254072e-01 + 7.0809916613070389e-01 7.2566429567080615e-01 -7.8307815015471061e-01 + 9.2631651202973575e-01 9.9004653539818466e-01 -1.0650348073165503e+00 + 1.0934016036516447e+00 1.2629150228788020e+00 -1.3743590064636795e+00 + 1.1731890063243804e+00 1.5210509243494084e+00 -1.7173604882478046e+00 + 1.1472803628320820e+00 1.7154326859772699e+00 -2.0816208176199842e+00 + 1.0259218420677580e+00 1.7809057506554433e+00 -2.4359539560152745e+00 + 8.3842402718445364e-01 1.6598233230436348e+00 -2.7209154837265359e+00 + 6.3947458613668351e-01 1.3959833648748317e+00 -2.8894136991380135e+00 + 4.5790409208829475e-01 1.0982541871124734e+00 -2.9996353377900542e+00 + 2.8794040058696346e-01 7.9783176480053108e-01 -3.1337340474493143e+00 + 1.4075775698246956e-01 4.8301365103840488e-01 -3.3299114678304260e+00 + 5.1899810222001741e-02 1.4874510525172491e-01 -3.5973775050975259e+00 + 7.9665674328827651e-02 -1.9620665841831297e-01 -3.9294500370864300e+00 + 3.2962860308123532e-01 -5.2745049020482737e-01 -4.2937409708876064e+00 + 9.2645910198558412e-01 -7.5226311603836993e-01 -4.5887767822399637e+00 + 1.6665276030305731e+00 -7.6064902119788425e-01 -4.6946278988271102e+00 + 1.8556308298332498e+00 -9.0409791784953686e-01 -4.8874535133628250e+00 + id 14387 + loc 8.3352392911911011e-01 5.9645563364028931e-01 400 + blend 0.0000000000000000e+00 + interp 3.5378428946051999e-01:2.8794783694602616e-01:3.0902482281617294e-03:2.8165965575370827e-01:7.7435017709939935e-01:2.6517744759452422e-01:1.5837298572461049e+00:3.5378075161762540e-01:2.3273594556603383e+00:2.5936981732853109e-01:3.1416276801258225e+00 + CVs 20 + -1.8549807141549274e-01 1.5990257836599497e-01 -2.3715008524307596e-01 + -3.7014663032569373e-01 2.9862168189912597e-01 -4.8857238551492949e-01 + -5.4404593059833561e-01 4.1712484207693101e-01 -7.6364838963661630e-01 + -7.0444483115609491e-01 5.1244744289789523e-01 -1.0619663222787579e+00 + -8.5393617479992334e-01 5.8340601803605718e-01 -1.3817726178993697e+00 + -9.9131887490647508e-01 6.3487845298571499e-01 -1.7245597300064952e+00 + -1.1090747222310227e+00 6.7085804280210870e-01 -2.0878129910499892e+00 + -1.1991195593398676e+00 6.8493098954210541e-01 -2.4629640052927861e+00 + -1.2582413069298091e+00 6.6541409639562277e-01 -2.8424692075310998e+00 + -1.2855246434082963e+00 6.0570278545207956e-01 -3.2186158445846162e+00 + -1.2826950078311616e+00 5.0387428786164978e-01 -3.5760835032144174e+00 + -1.2546261813718540e+00 3.6122314560337743e-01 -3.8951620889449998e+00 + -1.2048325647187801e+00 1.8361797069845509e-01 -4.1612898977202377e+00 + -1.1327877193295515e+00 -1.8386552215060803e-02 -4.3665815345840047e+00 + -1.0410967638191078e+00 -2.3025369976497667e-01 -4.5013415356307611e+00 + -9.4338450295946452e-01 -4.3359261604697252e-01 -4.5564659380956050e+00 + -8.5488968100786400e-01 -6.1584653124855682e-01 -4.5447903601963047e+00 + -7.6810461872322888e-01 -7.9738338303260736e-01 -4.5197712614744523e+00 + -6.1628479799075575e-01 -1.0942597319387508e+00 -4.6029177043331435e+00 + id 14388 + loc 7.7107988297939301e-02 1.6431647539138794e-01 412 + blend 0.0000000000000000e+00 + interp 3.4855397450498049e-01:3.2389984208819056e-01:6.7026853216678450e-04:2.9893373432650544e-01:7.7225274353446727e-01:2.6200445820860313e-01:1.4552551929486963e+00:3.4855048896523544e-01:2.3927052446414638e+00:2.6297066622445137e-01:3.0016791339501134e+00 + CVs 20 + -1.4734710669794682e-01 1.8056867065566401e-01 -4.1980676749805745e-01 + -3.0319835161979042e-01 2.7228363413071499e-01 -7.1615478224012108e-01 + -4.6177638448389868e-01 3.2111440254973306e-01 -9.9603198690678219e-01 + -6.0813573043459990e-01 3.5416265099240007e-01 -1.3128620124385295e+00 + -7.3262613854752634e-01 3.6513320745777306e-01 -1.6648206667660306e+00 + -8.2396622315256973e-01 3.4912744915678129e-01 -2.0472068379888935e+00 + -8.6926875232823686e-01 3.0440620400340146e-01 -2.4501667582179829e+00 + -8.5908956920179780e-01 2.3192428256589293e-01 -2.8588956609762954e+00 + -7.9110965678502798e-01 1.3460803277088629e-01 -3.2586693953850721e+00 + -6.6802417023660732e-01 1.7754592555073723e-02 -3.6367543034631757e+00 + -4.9839087509990176e-01 -1.1103413931504091e-01 -3.9769266574635802e+00 + -3.0505645180547492e-01 -2.4755028027126547e-01 -4.2619711340785900e+00 + -1.1875871488050849e-01 -3.9941666680261401e-01 -4.4981832026446540e+00 + 4.5673275672824754e-02 -5.8419153260220180e-01 -4.7220175160361411e+00 + 1.8690590206615576e-01 -8.1444282062868001e-01 -4.9601084137362923e+00 + 3.0022926318226795e-01 -1.0880137431493127e+00 -5.2093780616577234e+00 + 3.7289120111283947e-01 -1.3979363499134256e+00 -5.4575231659274248e+00 + 3.9257801497089639e-01 -1.7376934362380607e+00 -5.6940589436811475e+00 + 4.3913490070103500e-01 -2.0642838637212306e+00 -5.9434950697758753e+00 + id 14389 + loc 1.7845049500465393e-01 6.3324761390686035e-01 381 + blend 0.0000000000000000e+00 + interp 4.5389105987810324e-01:4.5388652096750448e-01:5.2862184618208907e-01:3.0753433272491182e-01:1.1815183912948575e+00:3.5994132826600317e-01:1.9290266587840388e+00:3.1539849073780901e-01:2.2460774266788572e+00:3.7468789957340454e-01:3.0415532054078636e+00:3.1783409334682999e-01:3.9488616101139935e+00 + CVs 20 + 9.5584881056335536e-01 2.3870873952495542e-01 -6.6449342198175232e-01 + 1.5363176040444417e+00 3.6250434597094061e-01 -1.1473509087213642e+00 + 2.0207450531064759e+00 4.5008111238295512e-01 -1.5849765834245855e+00 + 2.5566653198528675e+00 5.4087948424455734e-01 -2.0315886753203216e+00 + 3.1780905980222189e+00 6.1471720319290102e-01 -2.4743033179970446e+00 + 3.9065794407598302e+00 6.3887604586964830e-01 -2.9077840184140729e+00 + 4.7352785770691241e+00 5.6358933048103110e-01 -3.3352534399888043e+00 + 5.6185519745725561e+00 3.3523928230841193e-01 -3.7504491865684413e+00 + 6.4793084378134731e+00 -7.5960162553981192e-02 -4.1331870870858456e+00 + 7.2310242312924569e+00 -6.6182821242130774e-01 -4.4668291903752904e+00 + 7.7957506180445764e+00 -1.3848321733996030e+00 -4.7354797033689433e+00 + 8.1174674137690292e+00 -2.1795523640067560e+00 -4.9117431342987841e+00 + 8.1891575411383410e+00 -2.9457006327082098e+00 -4.9862409542315547e+00 + 8.0717694185171407e+00 -3.5956724243751550e+00 -4.9851095054967649e+00 + 7.8551844348926450e+00 -4.1261114135538524e+00 -4.9530506644294006e+00 + 7.5954726373674131e+00 -4.6071006993527632e+00 -4.9272116485703750e+00 + 7.3184733233420065e+00 -5.0968495259156219e+00 -4.9353109370947621e+00 + 7.0464203309093030e+00 -5.5955281976962663e+00 -4.9941180970455115e+00 + 6.7831893355917803e+00 -6.0014643382238386e+00 -5.1065124497912571e+00 + id 14390 + loc 1.9394701719284058e-01 4.5519816875457764e-01 396 + blend 0.0000000000000000e+00 + interp 3.8282655949026390e-01:2.8707888992291530e-01:3.2546949319791096e-01:2.7789381033630722e-01:1.0141450912586332e+00:2.8559880991669595e-01:2.0214462873853156e+00:2.5261482783042744e-01:3.0129487770337740e+00:3.8282273122466903e-01:3.9593689494193338e+00 + CVs 20 + -2.6420705345415596e-01 2.1346001555246447e-01 -7.5149425096238398e-01 + -5.1398678559181810e-01 2.6914124316226218e-01 -1.2727253449213811e+00 + -7.7259755685171494e-01 2.7573144220802248e-01 -1.7366878406511679e+00 + -1.0454191231784238e+00 2.7482019639726230e-01 -2.2072285352455747e+00 + -1.3205178268800992e+00 2.6644578117610473e-01 -2.6854433285781236e+00 + -1.5880398766255626e+00 2.4830946993796221e-01 -3.1693024384459858e+00 + -1.8425263107160963e+00 2.1539575859687066e-01 -3.6557465533575271e+00 + -2.0812147072142784e+00 1.5744370422102549e-01 -4.1430099229047919e+00 + -2.3023281761610010e+00 6.1088456260813162e-02 -4.6251861769349141e+00 + -2.5090128250360575e+00 -8.2249449188068313e-02 -5.0880108784982276e+00 + -2.7128233791620184e+00 -2.7805488325365957e-01 -5.5185446410107897e+00 + -2.9172432198934386e+00 -5.3982673163464123e-01 -5.9092929735204409e+00 + -3.1053036229867876e+00 -8.7052622597472684e-01 -6.2583511975778183e+00 + -3.2540504165844801e+00 -1.2561543878813639e+00 -6.5608533101113071e+00 + -3.3489490198900560e+00 -1.6773266207246365e+00 -6.8141172826859409e+00 + -3.3871554303022480e+00 -2.1222874891674843e+00 -7.0198601297904748e+00 + -3.3697988926473039e+00 -2.5785049688951611e+00 -7.1797625031821104e+00 + -3.2989237930236199e+00 -3.0232786119968771e+00 -7.2976855100962332e+00 + -3.1753980270341455e+00 -3.4059531355017523e+00 -7.3822509243050973e+00 + id 14391 + loc 7.4313485622406006e-01 4.0091982483863831e-01 402 + blend 0.0000000000000000e+00 + interp 3.4170662602125235e-01:2.9016567329631721e-01:5.8840096966148492e-01:3.4170320895499218e-01:1.0052516446046695e+00:2.5222849024118527e-01:1.7137611305970135e+00:2.7644465282078834e-01:2.5761825039313986e+00:2.5186602513676931e-01:3.5145573288750382e+00 + CVs 20 + 2.6828162740691136e-01 3.9508466328484826e-01 1.6833133134843103e-01 + 5.3920485915318861e-01 8.0920167843398838e-01 3.6607169670694895e-01 + 8.0445982879775446e-01 1.2230369506702210e+00 5.8812794126547574e-01 + 1.0951993111774954e+00 1.5954264629675872e+00 8.1116684285237095e-01 + 1.4402742974343110e+00 1.9047361839471655e+00 1.0378955743834299e+00 + 1.8302688295917711e+00 2.1334333232798692e+00 1.2423408220390009e+00 + 2.2571118877741587e+00 2.2291987448516020e+00 1.3792703363716021e+00 + 2.7789040199274355e+00 2.2013139780379531e+00 1.6296501209528751e+00 + 3.3269193323410260e+00 1.9859292254015792e+00 2.0426180259552056e+00 + 3.7558867104596576e+00 1.5303177125781089e+00 2.5581693335258642e+00 + 3.9898557256776166e+00 9.2112756987345490e-01 3.0694705960779274e+00 + 4.1704685113555415e+00 3.7397185190975368e-01 3.5086334734104394e+00 + 4.4769849859726927e+00 9.8696219410430164e-03 3.8963409652637631e+00 + 4.9322437101463281e+00 -1.2225632108776574e-01 4.2426161570374905e+00 + 5.4435313099667892e+00 -4.4269540048873512e-02 4.5592558280335380e+00 + 5.9168244132457142e+00 9.6706225614557217e-02 4.9207046579927232e+00 + 6.3351162224895488e+00 1.7468264838562697e-01 5.3881112388994081e+00 + 6.7252967168416031e+00 1.6899183028209896e-01 5.8961015238416108e+00 + 7.1915125220734355e+00 3.8159525611857203e-02 6.2759171966731246e+00 + id 14392 + loc 8.9632831513881683e-03 4.9664059281349182e-01 378 + blend 0.0000000000000000e+00 + interp 4.3016620083254520e-01:2.6673848795072941e-01:5.5415593255063178e-01:2.1077296830183051e-01:1.0818774194924412e+00:3.1285871785773833e-01:1.9839420006339141e+00:1.0399120499265628e-01:2.7287043139706584e+00:2.7625812366306968e-01:3.0023311333667011e+00:4.3016189917053688e-01:3.8452806346903676e+00 + CVs 20 + 2.1250752894143127e-01 3.8977602696717500e-01 -3.5278901710004834e-01 + 3.3424427398991308e-01 6.9057149610171731e-01 -6.6852444994583704e-01 + 4.1325855958309959e-01 9.3396560969789655e-01 -9.9946983044963078e-01 + 4.7893408377352825e-01 1.1438137014648235e+00 -1.3735858443366853e+00 + 5.5039354841222277e-01 1.3371092681072949e+00 -1.7920355551970497e+00 + 6.5616931671675771e-01 1.5256713705011569e+00 -2.2504711412058320e+00 + 8.2265804852813806e-01 1.6984239963793617e+00 -2.7438998866212367e+00 + 1.0672380597366948e+00 1.8247660836215700e+00 -3.2612965033535484e+00 + 1.3923105290631941e+00 1.8701214497770728e+00 -3.7715281557142268e+00 + 1.7831347755793159e+00 1.8219585216816512e+00 -4.2279348388028897e+00 + 2.2107013144213719e+00 1.6857962140340441e+00 -4.6059002836004979e+00 + 2.6441870761621247e+00 1.4686140328961010e+00 -4.9058374243411000e+00 + 3.0509371398203369e+00 1.1624596466403974e+00 -5.1214627916871187e+00 + 3.3994280526288185e+00 7.4553262623708472e-01 -5.2352459218174303e+00 + 3.6926141085516324e+00 2.1300570126437046e-01 -5.2561760285274524e+00 + 3.9803545657539408e+00 -3.8974734777562903e-01 -5.2342144555640360e+00 + 4.2996579954864353e+00 -9.8999987255873867e-01 -5.2379095337776889e+00 + 4.6332049143741569e+00 -1.5407942987037484e+00 -5.3369703039425751e+00 + 4.9453521759190355e+00 -2.0197432644613880e+00 -5.5110240181602173e+00 + id 14393 + loc 3.9484718441963196e-01 4.3100714683532715e-01 393 + blend 0.0000000000000000e+00 + interp 4.1994890303566973e-01:3.1542121540717327e-01:1.1238392172035483e-02:3.0626397378900239e-01:8.2874765368294079e-01:3.1120817176987647e-01:1.3088133557314530e+00:4.1994470354663938e-01:2.0246076301367255e+00:2.9962551653917863e-01:3.0000187782367882e+00:3.9338419605033748e-01:3.5996477947279129e+00 + CVs 20 + -1.6023470124002875e-01 1.9447832851732824e-01 2.7348833760369085e-01 + -3.2711092732038083e-01 4.3452449566264206e-01 5.6957724915320918e-01 + -4.8617224700444794e-01 7.1329757334984389e-01 8.4844515556159705e-01 + -6.3611208403006891e-01 9.9847961964719834e-01 1.0849147436596931e+00 + -8.0436832997862151e-01 1.2634105025095397e+00 1.2932091636052374e+00 + -1.0214798812409740e+00 1.4967233506284026e+00 1.4885357347658266e+00 + -1.2880431295363015e+00 1.6934389844034330e+00 1.6584288610499336e+00 + -1.5830983961962932e+00 1.8529470083061066e+00 1.7892033485185852e+00 + -1.8938284839856498e+00 1.9788024959105170e+00 1.8920425742568603e+00 + -2.2216473293651493e+00 2.0759103597576698e+00 1.9921589337972085e+00 + -2.5742528427195648e+00 2.1417558690093204e+00 2.1153999754458148e+00 + -2.9529767335425183e+00 2.1599979239894727e+00 2.2816215850884980e+00 + -3.3440698643491631e+00 2.1011754999191083e+00 2.4995834704209416e+00 + -3.7008100656175444e+00 1.9348631135019470e+00 2.7721007034579479e+00 + -3.9468994089572633e+00 1.6528736836100035e+00 3.1112057320043021e+00 + -4.0245505962398473e+00 1.3087366805917080e+00 3.5500480941803110e+00 + -3.9480905367793202e+00 1.0174120905487256e+00 4.1034185369833143e+00 + -3.8193400226383525e+00 7.9603094238265104e-01 4.7321203525041913e+00 + -3.7966489653630227e+00 4.3996521884498230e-01 5.3758721529426641e+00 + id 14394 + loc 9.6566557884216309e-01 1.3296359777450562e-01 404 + blend 0.0000000000000000e+00 + interp 4.4922062944273239e-01:4.4921613723643800e-01:4.4254796381427786e-01:3.9360901825744782e-01:1.0004281475037888e+00:4.1798746745907500e-01:1.9506417671938658e+00:2.6711518187087663e-01:2.0699905396279039e+00:3.6995894932718149e-01:2.7304604925155669e+00:4.2007680062596753e-01:3.4121817929425733e+00:2.9019594629692830e-01:3.9925889031812947e+00 + CVs 20 + 1.2186717498579025e-02 1.1223570821433501e-01 1.3950577533329583e-01 + 2.7701968000576949e-02 2.1529158534283996e-01 2.7563714150270191e-01 + 3.1803294761662493e-02 3.1545423034370312e-01 4.0964869825413025e-01 + 1.7874797502879125e-02 4.1413431242870280e-01 5.4151944031667387e-01 + -1.3115311285623266e-02 5.0824348176871281e-01 6.6965971259853707e-01 + -5.9481020082153169e-02 5.9498535914483885e-01 7.9210826433527970e-01 + -1.2089720354617844e-01 6.7332534114184395e-01 9.0756314542691330e-01 + -1.9722670554052041e-01 7.4325367812625520e-01 1.0154463379982155e+00 + -2.8622407939745209e-01 8.0474554205822102e-01 1.1156275243172462e+00 + -3.8665539044752173e-01 8.5851915450831562e-01 1.2074205569949439e+00 + -5.0776324775775539e-01 9.0850373361562697e-01 1.2832293312331002e+00 + -6.6941270749695947e-01 9.6130952829002880e-01 1.3306198876042736e+00 + -8.8389899393315019e-01 1.0200631364757551e+00 1.3639668559673892e+00 + -1.1247819078161454e+00 1.0748101020928873e+00 1.4341783766023899e+00 + -1.3458988982378708e+00 1.1112670382849157e+00 1.5656097884525235e+00 + -1.5373297143651072e+00 1.1232118329930343e+00 1.7502356443776965e+00 + -1.6968293953651286e+00 1.1050525317091560e+00 1.9815062074974039e+00 + -1.8013333608635138e+00 1.0559162530454171e+00 2.2396515634685379e+00 + -1.7866710741929546e+00 9.9309796445933940e-01 2.4153112082991770e+00 + id 14395 + loc 4.6184408664703369e-01 1.9573166966438293e-01 381 + blend 0.0000000000000000e+00 + interp 3.9723577615200117e-01:2.4827523736848117e-01:3.7022128891694006e-01:3.6626637620073477e-01:1.0042659460499148e+00:3.9723180379423967e-01:1.4694175593639438e+00:2.8176354945205773e-01:2.1127773442373234e+00:2.7707986149834496e-01:3.2270696382143553e+00 + CVs 20 + -7.5520684002983007e-01 2.0187603347707658e-01 -7.4588338850798164e-01 + -1.3093179682383811e+00 2.7422502405349858e-01 -1.2078355264221807e+00 + -1.8099032265585391e+00 3.0500793271124993e-01 -1.6065080535697982e+00 + -2.3049078124078082e+00 3.3465260976540251e-01 -2.0337740516795453e+00 + -2.7829057500196273e+00 3.5180827347591870e-01 -2.4883574753033866e+00 + -3.2462753937683417e+00 3.4042297716896641e-01 -2.9690770196291107e+00 + -3.7096260510024983e+00 2.7679642914555369e-01 -3.4683417013874127e+00 + -4.1820944076090516e+00 1.3220633855908082e-01 -3.9705803027256144e+00 + -4.6506376437189489e+00 -1.1668765147071092e-01 -4.4568273635997491e+00 + -5.0879348034634075e+00 -4.7474007223670234e-01 -4.9101884569500500e+00 + -5.4870072575574103e+00 -9.1945869888224152e-01 -5.3104651411248369e+00 + -5.8622677760716693e+00 -1.4257723471589010e+00 -5.6295708799475062e+00 + -6.2227991255940891e+00 -1.9811135650322658e+00 -5.8444032685879641e+00 + -6.5768601021355853e+00 -2.5807940099661177e+00 -5.9418949596754507e+00 + -6.9447359712183392e+00 -3.2051306691602375e+00 -5.9384646046503260e+00 + -7.3462565116408545e+00 -3.8021471937260634e+00 -5.8862876528158878e+00 + -7.7759654547524635e+00 -4.2918744234919144e+00 -5.8342261633642929e+00 + -8.2136003559912467e+00 -4.6328540656473276e+00 -5.7957547488103156e+00 + -8.7086379968561136e+00 -4.9937169500273590e+00 -5.7605327883739594e+00 + id 14396 + loc 4.5360985398292542e-01 6.6521364450454712e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7517440777381187e-01:3.3240524502287871e-01:6.9851910213163682e-01:3.6253417770593177e-01:1.3325688255699868e+00:3.0904425108684619e-01:2.2373803660101159e+00:4.7516965602973416e-01:3.0788841305305357e+00:2.6493785253893221e-01:3.6722982056605304e+00 + CVs 20 + 6.0939209631024213e-02 4.0939895834874201e-01 7.9384034515588342e-02 + 1.3957731702649581e-01 7.7360052960555081e-01 1.0037062789303819e-01 + 2.2248986196836401e-01 1.1195588761452022e+00 9.0824455391619541e-02 + 3.0843528047302737e-01 1.4550577867306771e+00 5.8820611701836167e-02 + 4.0264614824022060e-01 1.7747655061143699e+00 -2.5485242719365253e-03 + 5.0717446738013172e-01 2.0668220639744002e+00 -1.0771813677851771e-01 + 6.2040548910334625e-01 2.3136256385825975e+00 -2.7299583684696804e-01 + 7.3505300348285596e-01 2.4980077324349415e+00 -5.0316517489108248e-01 + 8.4089224488064429e-01 2.6073067569871138e+00 -7.9037985455962179e-01 + 9.2952748711702071e-01 2.6338138878278015e+00 -1.1204505395985178e+00 + 9.9584242839372705e-01 2.5738888444869978e+00 -1.4769784322533617e+00 + 1.0378183844679947e+00 2.4268469883304702e+00 -1.8428564398931768e+00 + 1.0574042515867101e+00 2.1941105706392716e+00 -2.2001941155783737e+00 + 1.0612651527342523e+00 1.8762685093171902e+00 -2.5291191946485641e+00 + 1.0546758343748488e+00 1.4595942292875468e+00 -2.7959056531036359e+00 + 1.0278074849855778e+00 9.0378656285992964e-01 -2.9051178605642556e+00 + 9.5707003185316808e-01 2.6600759266263951e-01 -2.6884861810854548e+00 + 8.6121465891089621e-01 -2.0848078819813365e-01 -2.2648933608152482e+00 + 8.0066847733532587e-01 -5.2998155269096947e-01 -2.1255718227058558e+00 + id 14397 + loc 6.6542851924896240e-01 2.2033187747001648e-01 401 + blend 0.0000000000000000e+00 + interp 4.5666428261309888e-01:3.4791417692139476e-01:3.3915393758041534e-01:3.4149433935094509e-01:1.1364795267912067e+00:2.7204486334928663e-01:1.9538854651294004e+00:3.3476460639890543e-01:2.7693479675370667e+00:3.0095419559232578e-01:3.2621141597571230e+00:4.5665971597027277e-01:3.9012988876923127e+00 + CVs 20 + -1.0350033103025541e-02 2.6861409551786142e-01 2.3161634107717027e-01 + -6.5642024317205810e-03 5.2174218712838816e-01 4.4783921140459981e-01 + -8.1873898211206331e-03 7.6074977049103787e-01 6.4332453294608249e-01 + -2.2976648848603898e-02 9.9644695094509839e-01 8.1986619169782304e-01 + -4.5762954629399527e-02 1.2418356507142059e+00 9.9282466392567414e-01 + -6.4751476888980947e-02 1.5041888884351795e+00 1.1906793072564783e+00 + -5.7647942993385909e-02 1.7643981494953969e+00 1.4416715960662103e+00 + -1.0397370446426635e-03 1.9857012372633025e+00 1.7452883246305504e+00 + 1.2469144176322683e-01 2.1726178569197940e+00 2.0751935408416298e+00 + 3.4212382693534787e-01 2.3511414600254734e+00 2.4243166476447806e+00 + 6.4051727466621344e-01 2.4638329399021623e+00 2.7980505757445302e+00 + 9.4061029543228958e-01 2.4150935585814701e+00 3.1579073169757188e+00 + 1.1992544312235585e+00 2.2194811340100342e+00 3.4706147645124341e+00 + 1.4723512131894170e+00 1.9634797984598542e+00 3.7512500198048770e+00 + 1.7899791541766432e+00 1.6813185010963017e+00 3.9831808319023634e+00 + 2.0377893437504522e+00 1.3264410735031498e+00 4.0911691656270497e+00 + 2.0986914645532404e+00 8.3035070491221630e-01 4.0615540534342314e+00 + 2.2610656222296317e+00 3.3363550444903872e-01 4.0105894271334437e+00 + 2.7518341267337947e+00 3.8919094335109028e-01 3.9842355529606515e+00 + id 14398 + loc 5.2991682291030884e-01 4.7420242428779602e-01 379 + blend 0.0000000000000000e+00 + interp 4.2536488356295560e-01:3.0582920108817463e-01:2.8746476518588227e-01:4.2536062991411999e-01:1.0139497255540977e+00:2.4544132591428167e-01:1.9900107869196595e+00:2.4843038677172591e-01:2.9879043421622535e+00:3.2808862306928521e-01:3.7767857349454714e+00 + CVs 20 + 1.8501037297539694e-01 3.4908544942059672e-01 4.2788677455460417e-02 + 3.7987057289663489e-01 7.0979815009477443e-01 4.0132103772883676e-02 + 5.9652767885259739e-01 1.0361655291779992e+00 -1.5894494042404284e-02 + 8.0406105881650047e-01 1.2727048014420674e+00 -1.0764837536645666e-01 + 9.6763433203895111e-01 1.4320088536588136e+00 -2.2354230263765740e-01 + 1.0918679024093947e+00 1.5625184545188848e+00 -3.7222276459401160e-01 + 1.2186968120876362e+00 1.6906523385570436e+00 -5.4926114379381463e-01 + 1.3912714837478153e+00 1.8245915555825634e+00 -7.3060369872383335e-01 + 1.6249629256399989e+00 1.9888267785328384e+00 -8.8749070772024918e-01 + 1.9128486041851964e+00 2.2078065313439597e+00 -9.9520593146982694e-01 + 2.2414751920483460e+00 2.4872068986408857e+00 -1.0456870400997875e+00 + 2.6017427241374511e+00 2.8303352161439621e+00 -1.0450401884182994e+00 + 3.0101576537092711e+00 3.2220347140685845e+00 -9.9011167395271693e-01 + 3.5009733553578366e+00 3.5824619933813153e+00 -8.5418534723107298e-01 + 4.0536333736570480e+00 3.7928538134719982e+00 -5.8158039449299093e-01 + 4.5453520563223737e+00 3.7474671748183570e+00 -1.0386969324180528e-01 + 4.8808947538636804e+00 3.3698842181202364e+00 5.4884320828642086e-01 + 5.1087372672357212e+00 2.6394931331864870e+00 1.0149510583199715e+00 + 5.2218173378596440e+00 2.1406801818455903e+00 8.7226381254181018e-01 + id 14399 + loc 3.7882113456726074e-01 2.1222957968711853e-01 396 + blend 0.0000000000000000e+00 + interp 4.7498648913580582e-01:3.2500058068878535e-01:2.4424278757274398e-01:4.7498173927091447e-01:9.4131856174027839e-01:2.6766773223823687e-01:1.8533804668054135e+00:4.2413145839762101e-01:2.2163007380509723e+00:2.4928602643988074e-01:3.0040011103527231e+00:3.6702997531180404e-01:3.9204523943166261e+00 + CVs 20 + -2.8884206049529659e-01 2.1404637056109171e-01 -6.0150233635942574e-01 + -5.1973016505155978e-01 3.0434526227038883e-01 -1.0574464154767034e+00 + -7.2547179801282169e-01 3.4139580101487882e-01 -1.4906511448206143e+00 + -9.1105439236365870e-01 3.5459479252216586e-01 -1.9531929979755869e+00 + -1.0694596969757340e+00 3.3785541726274082e-01 -2.4388663892273748e+00 + -1.1999449440461571e+00 2.8776292502677703e-01 -2.9397178134363409e+00 + -1.3071607857893746e+00 2.0402644740714315e-01 -3.4441402314378897e+00 + -1.3961461145980394e+00 8.6849396945278379e-02 -3.9377449897803833e+00 + -1.4711828035744479e+00 -6.5187882045935064e-02 -4.4095077432066683e+00 + -1.5405186514624676e+00 -2.5572464200057698e-01 -4.8550998609548657e+00 + -1.6154713141262980e+00 -4.8816796746671876e-01 -5.2684467156036154e+00 + -1.7012918883541457e+00 -7.5826806047871820e-01 -5.6368057447044482e+00 + -1.7952809304493857e+00 -1.0547058698607086e+00 -5.9527337696707532e+00 + -1.8950837869714365e+00 -1.3718845792952266e+00 -6.2212144439898722e+00 + -2.0000682877036455e+00 -1.7101190542439819e+00 -6.4484731990309268e+00 + -2.1056490223856659e+00 -2.0611368634935823e+00 -6.6335004228361587e+00 + -2.2029547250097119e+00 -2.4100532176548581e+00 -6.7741516709065408e+00 + -2.2839373673346031e+00 -2.7550914078550535e+00 -6.8723265341219673e+00 + -2.3421412205911833e+00 -3.1320359024227340e+00 -6.9182038505941348e+00 + id 14400 + loc 6.4643301069736481e-02 8.1493437290191650e-01 400 + blend 0.0000000000000000e+00 + interp 5.6971318654634662e-01:4.4178331972037954e-01:4.5295009983270529e-01:5.6970748941448113e-01:9.1328272758338958e-01:4.0397221409225564e-01:1.4257573269456947e+00:2.9411897186659297e-01:2.5222947218257405e+00:2.9175156673920072e-01:3.1148502231197548e+00:2.9127664620801896e-01:3.9772024639410053e+00 + CVs 20 + -2.0975444490361611e-01 2.3367872740679904e-01 3.0158997466950006e-02 + -4.3240178996041773e-01 4.8848515048082586e-01 1.9032253818724726e-02 + -6.5017564235946090e-01 7.5434099932722598e-01 -4.1200540910794337e-02 + -8.4906691228411224e-01 1.0173550217178549e+00 -1.5276508655262711e-01 + -1.0231264178572153e+00 1.2642176634783981e+00 -3.1229687726977062e-01 + -1.1699716794579149e+00 1.4861314479613355e+00 -5.1063060308855723e-01 + -1.2910864458100240e+00 1.6808368154549616e+00 -7.3709010205966230e-01 + -1.3925444138605232e+00 1.8513253583932037e+00 -9.8272430905229791e-01 + -1.4849171242757353e+00 2.0046150472280142e+00 -1.2422623637416375e+00 + -1.5750828538662955e+00 2.1468540082864980e+00 -1.5151449144209690e+00 + -1.6488776785876380e+00 2.2757009086732172e+00 -1.7998877071885118e+00 + -1.6781159697628085e+00 2.3868701162500776e+00 -2.0858276091141090e+00 + -1.6517148272839621e+00 2.4943874203180898e+00 -2.3642469767047607e+00 + -1.5738214408270514e+00 2.6285532247285883e+00 -2.6460267268003039e+00 + -1.4478861349771934e+00 2.7882304187283973e+00 -2.9610375545764080e+00 + -1.2936427206220975e+00 2.9071307849885368e+00 -3.3229749525703349e+00 + -1.1495690212740532e+00 2.9265825894000002e+00 -3.7039402880497825e+00 + -1.0684603591513850e+00 2.8561978429224402e+00 -4.0740358233663807e+00 + -1.2035229983974234e+00 2.7446438524741348e+00 -4.3560249625224454e+00 + id 14401 + loc 9.6615451574325562e-01 7.3172122240066528e-01 399 + blend 0.0000000000000000e+00 + interp 4.6754597767746109e-01:3.8022666064507660e-01:4.4278550037444153e-01:2.9383303475676203e-01:1.2961535848264107e+00:4.4178331972037954e-01:2.4570189290817783e+00:3.4348452638808546e-01:2.9881574286153390e+00:4.6754130221768436e-01:3.3081305642184611e+00:4.4150875375801846e-01:3.9341238300448760e+00 + CVs 20 + -1.4011828094095438e-01 3.6096923520954960e-01 -1.3599604639789714e-01 + -2.6716918019082625e-01 7.2769504273316388e-01 -2.9676085552381337e-01 + -3.8011550398474930e-01 1.0898757835030537e+00 -4.7998201727463841e-01 + -4.8027325250630754e-01 1.4402427795761492e+00 -6.8598679572351640e-01 + -5.7058164434627789e-01 1.7758301083441899e+00 -9.1561332834382103e-01 + -6.5148566826766285e-01 2.0918347758048541e+00 -1.1660611502225131e+00 + -7.2180614511975705e-01 2.3837638302020783e+00 -1.4329794477281208e+00 + -7.7852740794187969e-01 2.6474677332861454e+00 -1.7110822988839671e+00 + -8.1633166052884387e-01 2.8783047887661040e+00 -1.9946951674272659e+00 + -8.2965102308399008e-01 3.0720501351977507e+00 -2.2790135791156265e+00 + -8.2010942036892254e-01 3.2291392722614005e+00 -2.5653728267446780e+00 + -7.9788201518804436e-01 3.3533891001088185e+00 -2.8674757452561179e+00 + -7.7137315594141076e-01 3.4425019137955317e+00 -3.2032496361280751e+00 + -7.4573298188700321e-01 3.4847791493284372e+00 -3.5907309713675040e+00 + -7.2972133270447515e-01 3.4599724151525137e+00 -4.0429092336771495e+00 + -7.3529882038211181e-01 3.3551882671055506e+00 -4.5221051067379534e+00 + -7.6120895061707383e-01 3.1919307070558030e+00 -4.9541411255721508e+00 + -7.9474054441930719e-01 3.0073052174621639e+00 -5.3050253958925051e+00 + -8.3697677285825856e-01 2.9323544607224776e+00 -5.4272629747560863e+00 + id 14402 + loc 5.9739351272583008e-01 9.4981825351715088e-01 404 + blend 0.0000000000000000e+00 + interp 4.0822479540152684e-01:3.2307219127573295e-01:9.6565593611544598e-01:4.0822071315357283e-01:1.2512970525230693e+00:3.3171496988174820e-01:2.0033374751851678e+00:3.2916565230444972e-01:2.9428220711104172e+00:3.6383199668825683e-01:3.3113409288933147e+00:2.8985012896659362e-01:3.9941515992201868e+00 + CVs 20 + 6.2543266722936308e-02 1.2948283069490463e-01 3.1693192959410928e-02 + 1.0640361375056413e-01 2.3465341803709808e-01 7.5314919520525145e-02 + 1.4395281725831088e-01 3.1862427749868216e-01 1.1901861568943964e-01 + 1.7918308798491867e-01 3.8804397294981396e-01 1.6302715110438720e-01 + 2.1013647434790034e-01 4.4497392658256302e-01 2.0970634114121908e-01 + 2.3521392627431637e-01 4.9307074711364951e-01 2.6168835054704309e-01 + 2.5391843692199434e-01 5.3633976046893750e-01 3.2072216210925886e-01 + 2.6610090743551318e-01 5.7727373785973635e-01 3.8638332528143415e-01 + 2.7077210253825756e-01 6.1760463312578484e-01 4.5791755267192963e-01 + 2.7004256291058742e-01 6.6250984876313490e-01 5.4014264720371230e-01 + 2.7288802780715132e-01 7.1791960172188141e-01 6.4017408012624211e-01 + 2.8660733478091849e-01 7.8144845362417525e-01 7.5221627586560535e-01 + 3.0766039617394264e-01 8.4533801277374554e-01 8.6108106001351858e-01 + 3.3333204815360279e-01 9.0684269538071427e-01 9.6192382915715913e-01 + 3.7142774879790297e-01 9.6736519073321203e-01 1.0615998007998968e+00 + 4.2876259927097032e-01 1.0278115311653655e+00 1.1612321694937568e+00 + 4.9882564377974226e-01 1.0890829267745747e+00 1.2468343129891271e+00 + 5.6764471816087358e-01 1.1503878147218898e+00 1.3018112478746016e+00 + 5.8787589658934580e-01 1.1566013840022991e+00 1.3013287789778130e+00 + id 14403 + loc 4.5753228664398193e-01 2.4663029238581657e-02 381 + blend 0.0000000000000000e+00 + interp 3.6627003890112375e-01:2.9299585953626817e-01:4.1146817725079476e-01:2.4215417083206170e-01:1.3630428519212989e+00:2.5960279247823620e-01:2.0961864051511134e+00:3.6626637620073477e-01:3.0069272775041327e+00:3.0787283499015183e-01:3.5330422131036201e+00 + CVs 20 + -7.4976035730283674e-01 1.7431443876891720e-01 -7.4158999247056090e-01 + -1.3128010796006206e+00 1.7931355842853297e-01 -1.2393772107721397e+00 + -1.8392987064603648e+00 1.1725177613414062e-01 -1.6994872562112142e+00 + -2.3714436375562951e+00 2.5266938079702705e-02 -2.1941193775902126e+00 + -2.8800279574474787e+00 -8.8193889461121722e-02 -2.7097937840313833e+00 + -3.3380292711105177e+00 -2.0908679963904953e-01 -3.2311878833761374e+00 + -3.7319832567710924e+00 -3.2792362431985689e-01 -3.7460965618831272e+00 + -4.0613610526314190e+00 -4.4172123495473747e-01 -4.2499714188352664e+00 + -4.3396195218354148e+00 -5.5892690235146358e-01 -4.7457087810644936e+00 + -4.5901670662877025e+00 -7.0539288078197271e-01 -5.2387913196049114e+00 + -4.8334826675204594e+00 -9.2025791866797713e-01 -5.7235981887832654e+00 + -5.0740019411789881e+00 -1.2453922760886509e+00 -6.1734294643019885e+00 + -5.2883958603316152e+00 -1.7153962598628445e+00 -6.5353100787822918e+00 + -5.4337800593171472e+00 -2.3322030461466126e+00 -6.7370112799229753e+00 + -5.5001136364358620e+00 -3.0593580695111875e+00 -6.7483461927490112e+00 + -5.5481969650747436e+00 -3.8686735222891908e+00 -6.6197026805876069e+00 + -5.6805465337263499e+00 -4.7215380244955067e+00 -6.4252295904131742e+00 + -5.9522813305431352e+00 -5.5217087522745718e+00 -6.1944903168664300e+00 + -6.3090502681922729e+00 -6.1602688272688333e+00 -5.9290589950477433e+00 + id 14404 + loc 3.8642185926437378e-01 1.5214096009731293e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4690339651548383e-01:3.0435635869295041e-01:5.8693248495580774e-02:3.5450345842375192e-01:9.3593968200134414e-01:2.9350933242820065e-01:1.3938289934955916e+00:4.4689892748151872e-01:2.0016467080263833e+00:2.9475685525649331e-01:2.8520449555855238e+00:2.9764170987407834e-01:3.4423750308641883e+00 + CVs 20 + -3.1228104205008217e-01 3.5957914527289359e-01 -2.0096957958535433e-01 + -5.7404360321356518e-01 7.3259773429149488e-01 -3.6311272050544702e-01 + -8.1708620958053380e-01 1.1097122258311070e+00 -5.0411381742425432e-01 + -1.0672044965085699e+00 1.4634190867031958e+00 -6.6359613525040728e-01 + -1.3483920455514413e+00 1.7587228734397859e+00 -8.7632830715865628e-01 + -1.6642336397171202e+00 1.9544430570135436e+00 -1.1522516271815206e+00 + -1.9637806058074780e+00 2.0006434213796851e+00 -1.4841268241151546e+00 + -2.1391955081874388e+00 1.8778174716355123e+00 -1.8424327558004943e+00 + -2.1102548009068016e+00 1.6351492450647496e+00 -2.1605912709086130e+00 + -1.9351142049263845e+00 1.3530137110364659e+00 -2.3895167560510449e+00 + -1.7087460855992778e+00 1.0468052707508479e+00 -2.5451484762233161e+00 + -1.4498606463300554e+00 7.0550552061872374e-01 -2.6217843515492092e+00 + -1.1768122045062370e+00 3.6265932389356581e-01 -2.6259591165226923e+00 + -9.4549668165548895e-01 6.8145872990569178e-02 -2.7006382354076495e+00 + -8.0186379035310407e-01 -1.2815437046350087e-01 -3.0062544481150413e+00 + -7.7315222198459121e-01 -1.0458801166848208e-01 -3.5113312509136652e+00 + -8.9847357790917237e-01 2.7248856214859773e-01 -4.0297497126879680e+00 + -1.1177520140639148e+00 8.0007544381354623e-01 -4.3408161236906233e+00 + -1.0630214486871812e+00 8.0644394764888405e-01 -4.7197259750326932e+00 + id 14405 + loc 8.7158459424972534e-01 3.8589233160018921e-01 402 + blend 0.0000000000000000e+00 + interp 3.4170662602125235e-01:2.7999172342148704e-01:6.9461836128841270e-01:2.6215413163592050e-01:1.7161044196181097e+00:2.7896610897193203e-01:2.5490973434118374e+00:3.4170320895499218e-01:3.0059762308664402e+00:2.4177119108751730e-01:3.7652224071341456e+00 + CVs 20 + 2.2646026548019335e-01 3.3817787309834091e-01 2.2552957786451516e-01 + 4.7347991586323140e-01 6.7879225094707896e-01 4.3957774571442737e-01 + 7.2927100477477735e-01 1.0202319050021309e+00 6.4210178745469249e-01 + 9.9264685269507613e-01 1.3530624419792485e+00 8.2210382904791512e-01 + 1.2719003543904179e+00 1.6750799812184201e+00 1.0405552183111528e+00 + 1.5030971629122545e+00 1.8133724583988338e+00 1.1416531616881611e+00 + 1.7604659625496444e+00 1.8910914310755449e+00 1.1995275377083392e+00 + 2.1366241229716425e+00 1.9368033252029688e+00 1.3008233095265109e+00 + 2.5939078383228154e+00 1.9062708153683781e+00 1.4551347462112489e+00 + 3.0713857025131182e+00 1.7562599857403933e+00 1.6726446779780848e+00 + 3.4849826964592578e+00 1.4844123452587474e+00 1.9233814821428510e+00 + 3.7675909415829660e+00 1.1794561171171849e+00 2.1384174126089084e+00 + 3.9241052426490830e+00 9.2663396711759305e-01 2.2920305693380918e+00 + 3.9864089733096839e+00 7.2419058503745104e-01 2.4067466615846671e+00 + 4.0081168631952062e+00 5.1632401063069955e-01 2.5238398566319771e+00 + 4.0882976233374180e+00 2.6231722755595388e-01 2.6895288775056390e+00 + 4.2821298944672144e+00 -1.1183206428547310e-02 2.9218896551151068e+00 + 4.5195600735277663e+00 -2.5237000075589022e-01 3.2124191693618869e+00 + 4.6634661192882225e+00 -3.9945979612803462e-01 3.5645176816037947e+00 + id 14406 + loc 8.0190396308898926e-01 7.1818053722381592e-02 412 + blend 0.0000000000000000e+00 + interp 4.8846850164485167e-01:3.3844772056203448e-01:2.2893779872199316e-01:3.5414879427270901e-01:1.0052066689203301e+00:4.8613106168195092e-01:1.3659177306978685e+00:4.8846361695983526e-01:1.8711427751976866e+00:2.7319076112155061e-01:2.1384537188404336e+00:3.1858683710460961e-01:3.3601177183279760e+00:4.0793873161823818e-01:3.9310815873132041e+00 + CVs 20 + -6.5510958063940694e-01 2.4678243573271111e-01 1.5871547298827660e-01 + -1.1449358961380383e+00 3.8290913519212227e-01 3.0436119770877157e-01 + -1.6031799308142201e+00 4.8972214479919551e-01 4.3643734482718022e-01 + -2.0585934641095007e+00 5.9129189482544486e-01 5.5543411796358688e-01 + -2.4870682811088174e+00 6.8374927836432220e-01 6.7001725593804884e-01 + -2.8805292947420020e+00 7.6638859307835028e-01 7.9175962026702718e-01 + -3.2469831995490757e+00 8.3499480933028569e-01 9.4037244051928481e-01 + -3.5901189060157646e+00 8.7764628377846399e-01 1.1465338554483078e+00 + -3.9074038386284142e+00 8.8450212224785807e-01 1.4336156449294419e+00 + -4.2073288849077981e+00 8.3779850340519491e-01 1.8083081023900949e+00 + -4.4880744457439627e+00 6.8211512553718756e-01 2.2296488677460311e+00 + -4.7188529369015813e+00 3.6827548300951118e-01 2.5922106561894118e+00 + -4.8820551511337174e+00 -8.9231876484682005e-02 2.8368500985727469e+00 + -4.9905740506606264e+00 -6.6566054670536468e-01 3.0049993389059475e+00 + -5.0768624093973447e+00 -1.3411227844024938e+00 3.1976931845218255e+00 + -5.1853055466641447e+00 -2.0771519091353503e+00 3.5212050058726847e+00 + -5.3594969519980440e+00 -2.8382433499806963e+00 3.9693563624948456e+00 + -5.6200322454429399e+00 -3.6071660076159042e+00 4.4282766048965225e+00 + -5.9447928936395460e+00 -4.3548687492820193e+00 4.8112077819277470e+00 + id 14407 + loc 8.4342575073242188e-01 4.8441338539123535e-01 401 + blend 0.0000000000000000e+00 + interp 4.3675762910908855e-01:3.3778942907460130e-01:8.5260515479007148e-02:3.3072139490072494e-01:9.8963980953278607e-01:3.4080119133075465e-01:1.8162623920911982e+00:4.3675326153279748e-01:2.2257684938984621e+00:3.3762892105608772e-01:2.9493835855980706e+00:3.9096906198182757e-01:3.5355132118936772e+00 + CVs 20 + 1.5029665931085501e-01 3.9910116635405279e-01 9.4774829289333812e-02 + 3.2120424128952418e-01 8.2785337449396557e-01 2.2278768349523798e-01 + 4.8719067731648563e-01 1.2842589364608363e+00 3.8348780020079642e-01 + 6.3964278408841035e-01 1.7491833808629875e+00 5.8533592562018155e-01 + 7.8463729770334367e-01 2.1955584023114798e+00 8.3011885522876616e-01 + 9.3281294046062802e-01 2.5993799274277682e+00 1.1045013302853863e+00 + 1.0932299499305862e+00 2.9447592307294128e+00 1.3883062209675685e+00 + 1.2693627747444221e+00 3.2224957649259549e+00 1.6624333205146140e+00 + 1.4541702112738295e+00 3.4354518447646480e+00 1.9272680394053596e+00 + 1.6350594073065343e+00 3.5942601877847187e+00 2.2143163035562505e+00 + 1.8048418086391611e+00 3.6913265856099118e+00 2.5515670240038029e+00 + 1.9601569577890849e+00 3.6994587874816691e+00 2.9219874593999116e+00 + 2.0956700313330723e+00 3.6205669471882942e+00 3.2583438160386029e+00 + 2.1966402905619757e+00 3.5355203427753170e+00 3.4836869104045149e+00 + 2.2236750722868135e+00 3.5479895092832141e+00 3.5882625295105517e+00 + 2.1001448652039509e+00 3.6818941142483266e+00 3.6173862289130296e+00 + 1.7270394966503686e+00 3.8435513406062904e+00 3.6148247463528818e+00 + 1.2244668014667592e+00 3.8232981578560081e+00 3.6602302133105566e+00 + 1.3367294339829088e+00 3.8042474413608627e+00 3.7954007761343611e+00 + id 14408 + loc 2.9820421338081360e-01 6.9742429256439209e-01 378 + blend 0.0000000000000000e+00 + interp 3.6292067592613836e-01:2.5208283002221610e-01:9.9916642536977995e-01:2.6230570558582472e-01:1.8220443815889880e+00:2.9038486739815317e-01:2.2534620009890971e+00:3.6291704671937913e-01:2.9998772364923152e+00:2.6944370590999334e-01:3.8423402351181561e+00 + CVs 20 + 4.6304181585064758e-01 3.3252137361359169e-01 2.5684936777711015e-01 + 8.5921876629709959e-01 5.6782423222778200e-01 4.6457133166146003e-01 + 1.2487268934899620e+00 7.4206149172503899e-01 6.5287105012604996e-01 + 1.6491869424537196e+00 8.7888647059102176e-01 8.3704694759491916e-01 + 2.0403235325284235e+00 9.8891965478711996e-01 1.0194896932949464e+00 + 2.4051808273367135e+00 1.0790498976702361e+00 1.2012169517230660e+00 + 2.7391524466779038e+00 1.1500790577028979e+00 1.3799995321940850e+00 + 3.0435520025073393e+00 1.2058077242977183e+00 1.5522171880639943e+00 + 3.3203231363739807e+00 1.2580610039524081e+00 1.7214463831189333e+00 + 3.5717197760220412e+00 1.3218688427375653e+00 1.9021757467855518e+00 + 3.8053616285018146e+00 1.4106214029480151e+00 2.1104788481172099e+00 + 4.0486382615819547e+00 1.5256677746243450e+00 2.3600303470923878e+00 + 4.3350938298751043e+00 1.6181829544039896e+00 2.6578864552920556e+00 + 4.6475436992180112e+00 1.5824054330960227e+00 2.9675714956516006e+00 + 4.9344351869485941e+00 1.3687893854962301e+00 3.2210752333303865e+00 + 5.1765959986555536e+00 1.0228450386054475e+00 3.4266306275021785e+00 + 5.3892769068319772e+00 6.2123745351556092e-01 3.6541324751903748e+00 + 5.6456067642318626e+00 2.4518255350791218e-01 3.9057753119395557e+00 + 6.1400622547288091e+00 -2.8123395048167410e-03 4.0537700057775368e+00 + id 14409 + loc 4.7400361299514771e-01 9.1098970174789429e-01 393 + blend 0.0000000000000000e+00 + interp 4.6732851907016659e-01:4.6732384578497593e-01:1.0543011195303864e-01:3.1706123788026830e-01:9.9248102577983932e-01:2.8712506044326758e-01:1.5565659461096018e+00:3.0198786317069753e-01:2.0694913413628688e+00:4.2198452951335780e-01:2.9811448794800919e+00:3.1208059981486969e-01:3.6347111276519959e+00 + CVs 20 + -1.8760222859102432e-01 3.4023602499962752e-01 -2.8255672893500822e-01 + -3.6506768836433312e-01 6.8940354522238612e-01 -5.3011645427271514e-01 + -5.2081957499711806e-01 1.0509396316142348e+00 -7.5606484400238216e-01 + -6.6596339182429309e-01 1.4284630775205702e+00 -9.6126119537946308e-01 + -8.1875004406013852e-01 1.8196330654262760e+00 -1.1393306119539783e+00 + -9.9410389853546222e-01 2.2189558485389491e+00 -1.2880848941243488e+00 + -1.2061076861438369e+00 2.6218083229138696e+00 -1.4115300868269716e+00 + -1.4743309908713162e+00 3.0224571321676210e+00 -1.5186867507946060e+00 + -1.8165425342854824e+00 3.3982287911883660e+00 -1.6171199558327403e+00 + -2.2280111242226397e+00 3.7129346608280178e+00 -1.7131757702085126e+00 + -2.6934663885550409e+00 3.9518849404206833e+00 -1.8326429770742698e+00 + -3.2113542838197060e+00 4.1169704454243199e+00 -2.0213620256687737e+00 + -3.7776533892509172e+00 4.1854516859196647e+00 -2.2988628185814406e+00 + -4.3603891503189249e+00 4.1138411562825166e+00 -2.6356355229857242e+00 + -4.8988696407686829e+00 3.8869191500110638e+00 -3.0029400822551677e+00 + -5.3283283179065579e+00 3.5313420964104232e+00 -3.4023326014746771e+00 + -5.6470074411770161e+00 3.0795013168608749e+00 -3.8141254600335590e+00 + -5.9444169488619654e+00 2.5479974932547167e+00 -4.1493670771956950e+00 + -6.2597890018519298e+00 2.0135926359725342e+00 -4.2790477181642395e+00 + id 14410 + loc 7.1028482913970947e-01 2.7766910195350647e-01 1079 + blend 0.0000000000000000e+00 + interp 3.4563245825106498e-01:2.8975431661181644e-01:4.6237472497674414e-01:2.4739266014304509e-01:1.1698382386927419e+00:2.5898287047010426e-01:2.0335291266067039e+00:3.4562900192648249e-01:2.8982025196131822e+00:2.5745358767064597e-01:3.9271791083750953e+00 + CVs 20 + -1.8152665093781523e-02 4.2160610871790938e-01 -1.4133326060175108e-01 + -7.3070463408655528e-02 8.1588618287286163e-01 -1.8615459932347697e-01 + -1.6697686523499122e-01 1.1788022484793372e+00 -1.7568496346493684e-01 + -3.0128881117713713e-01 1.5021971382384984e+00 -1.2385520832554575e-01 + -4.7062945367914477e-01 1.7629952803698123e+00 -3.2178752221316276e-02 + -6.6107931281793697e-01 1.9383632901990455e+00 8.8387324568337644e-02 + -8.5082974025808722e-01 2.0175008193031143e+00 2.1558393593425429e-01 + -1.0190966033687219e+00 2.0132368350684420e+00 3.2418553054015220e-01 + -1.1564292470725397e+00 1.9546584646256613e+00 4.0003089279675647e-01 + -1.2678321596392670e+00 1.8686623971638312e+00 4.4329853872385239e-01 + -1.3655831748791043e+00 1.7696487042531279e+00 4.5766318719249305e-01 + -1.4588556872447325e+00 1.6680715238591701e+00 4.4193545487541408e-01 + -1.5595588036889909e+00 1.5771522421609174e+00 3.9669186645528909e-01 + -1.6939794380500472e+00 1.4982581597260625e+00 3.2843595703002681e-01 + -1.9012426799611597e+00 1.4062241232048580e+00 2.5296217613373095e-01 + -2.1902898886273658e+00 1.2163979096363182e+00 2.0273538644602704e-01 + -2.4331881200380732e+00 7.9443189241566459e-01 2.0560514221117468e-01 + -2.4102334836368939e+00 1.2895623996574035e-01 2.8095911867125589e-01 + -2.3577875718205097e+00 -4.2203760387144240e-02 2.8969331719172542e-01 + id 14411 + loc 3.1319808959960938e-01 9.5961219072341919e-01 396 + blend 0.0000000000000000e+00 + interp 4.0278328173103439e-01:2.6340692141115296e-01:7.7787175788059748e-01:2.5583253223504016e-01:1.3885911230156651e+00:3.6238607470536560e-01:2.2615586192755250e+00:2.5407681070393173e-01:3.0080692202814525e+00:4.0277925389821712e-01:3.9991362097121188e+00 + CVs 20 + 1.0485875672400096e+00 1.7462756532273430e-01 -3.6751778552087400e-01 + 1.7439549072357212e+00 1.6466402279853115e-01 -6.8258210191390756e-01 + 2.3502489480101945e+00 1.0801694170769449e-01 -9.6930606911714046e-01 + 2.9621184313431179e+00 5.3848892941503745e-02 -1.2257995416540839e+00 + 3.5755193706441890e+00 1.0933614684361936e-03 -1.4332144218514811e+00 + 4.1757467265353441e+00 -4.7107781434762130e-02 -1.5784273024264495e+00 + 4.7502232404675127e+00 -8.8387548573047869e-02 -1.6566720812805493e+00 + 5.2989823628570534e+00 -1.2650196705946848e-01 -1.6707616183484653e+00 + 5.8330681875901353e+00 -1.7245645033255075e-01 -1.6303832141787726e+00 + 6.3699878330386372e+00 -2.4664454465651642e-01 -1.5513826676317497e+00 + 6.9227552724894448e+00 -3.8004892716180239e-01 -1.4550312870489284e+00 + 7.4796035951006994e+00 -6.0093218924446168e-01 -1.3653831399333889e+00 + 8.0059113382297831e+00 -9.1810996526882982e-01 -1.3002597296557454e+00 + 8.4713344287775456e+00 -1.3298109555845401e+00 -1.2656661587041973e+00 + 8.8573409024538101e+00 -1.8337680044189546e+00 -1.2620460601780761e+00 + 9.1502953744929751e+00 -2.4147243008806907e+00 -1.2914859694794023e+00 + 9.3429580488673505e+00 -3.0410075062527877e+00 -1.3499152354503308e+00 + 9.4379945960059004e+00 -3.6822941995202640e+00 -1.4147695278843917e+00 + 9.4084765548499636e+00 -4.2266804055467890e+00 -1.4303713918366840e+00 + id 14412 + loc 1.5128922462463379e-01 8.1928229331970215e-01 379 + blend 0.0000000000000000e+00 + interp 3.7245350889316359e-01:3.4897093030563908e-01:1.3019197429864027e-01:2.9621330462853152e-01:9.5988128647550386e-01:2.2093098046630505e-01:1.9403692230649201e+00:3.7244978435807469e-01:2.7676074855434898e+00:2.9087570527307838e-01:3.1006166204696752e+00 + CVs 20 + -1.3476222038331112e-01 3.3722888284710789e-01 2.6403595450167799e-01 + -2.4870626704581605e-01 6.3386324402739891e-01 5.4004548436679245e-01 + -3.4729812584578584e-01 8.6208934977854879e-01 8.6274334297423794e-01 + -4.2960609669072114e-01 1.0337744075235817e+00 1.2210622972848133e+00 + -4.9297553231378649e-01 1.1930591833491841e+00 1.5635391344738103e+00 + -5.4693327721053420e-01 1.3658291232896620e+00 1.8534111197391643e+00 + -6.1460325936214977e-01 1.5501120871345790e+00 2.0837558498061770e+00 + -7.1697488737819981e-01 1.7380286349748464e+00 2.2597448976549956e+00 + -8.4822600901721112e-01 1.9271091214819209e+00 2.3866344203589556e+00 + -1.0175031506541170e+00 2.1240934665455113e+00 2.4691794710710058e+00 + -1.2195705319467158e+00 2.3358255397453869e+00 2.5117302188961608e+00 + -1.4109668240701321e+00 2.5555847999271899e+00 2.5382345521250689e+00 + -1.5602428336295482e+00 2.7771440547531672e+00 2.5851596781971100e+00 + -1.6904497036048662e+00 3.0006569828432386e+00 2.6788023465366706e+00 + -1.8838814977085745e+00 3.2156667354094823e+00 2.7766661031480337e+00 + -2.2181617430258811e+00 3.3336731360529672e+00 2.7051122340607892e+00 + -2.6662004218020789e+00 3.2067098825030573e+00 2.3770168643105856e+00 + -3.0670020492326771e+00 2.7589440733282347e+00 2.1319875061764599e+00 + -3.1868500648163725e+00 2.4004677362684066e+00 2.3615884111688881e+00 + id 14413 + loc 3.2224404811859131e-01 5.0107216835021973e-01 404 + blend 0.0000000000000000e+00 + interp 4.5727058827924283e-01:3.6230989454106144e-01:7.7094141855995835e-02:4.5726601557336005e-01:9.9122070264753614e-01:3.4270144139281739e-01:1.3104620816623216e+00:3.9754526190204753e-01:1.9872427913710091e+00:3.9238191342454382e-01:2.7380844673765399e+00:3.1577394241059437e-01:3.2164540997392814e+00 + CVs 20 + 6.6888673597231343e-02 1.0914231376240383e-01 -7.8728795736760365e-02 + 1.0955087294978194e-01 2.0758371085807517e-01 -1.2998069449585198e-01 + 1.3923354143114669e-01 3.0586576434294782e-01 -1.7026277018844715e-01 + 1.6504031761759830e-01 4.1424507676051592e-01 -2.1237426192131004e-01 + 1.8632202628927927e-01 5.3339092148800138e-01 -2.5812352679956646e-01 + 2.0155947908376567e-01 6.6305546337138799e-01 -3.0930573492947089e-01 + 2.0844231264938379e-01 8.0197153667849519e-01 -3.6803547715720164e-01 + 2.0367534413128574e-01 9.4772236854423830e-01 -4.3607508667872807e-01 + 1.8347056317598592e-01 1.0968791815716865e+00 -5.1372930256630023e-01 + 1.4423048966704688e-01 1.2452819604901872e+00 -5.9929217369608878e-01 + 8.2919014397019986e-02 1.3886251117041433e+00 -6.8935824120565148e-01 + -1.9075291451571275e-03 1.5232836419482574e+00 -7.7926740445798859e-01 + -1.0779991430094427e-01 1.6463436979295329e+00 -8.6154703368189844e-01 + -2.2956569993099352e-01 1.7564173162824768e+00 -9.2782257124341727e-01 + -3.5946807535940650e-01 1.8532708757553964e+00 -9.6951313188576616e-01 + -4.8666621882897865e-01 1.9378855173280092e+00 -9.7757932684243531e-01 + -5.9760608490980771e-01 2.0130177013129611e+00 -9.4485079123747640e-01 + -6.7984155053273876e-01 2.0830725352412602e+00 -8.7056812502166403e-01 + -8.9025145477278866e-01 2.1434998957018028e+00 -8.4613702711105798e-01 + id 14414 + loc 5.7773511856794357e-02 4.2098724842071533e-01 400 + blend 0.0000000000000000e+00 + interp 5.4834238374765121e-01:3.1873342685853540e-01:8.2942243605206278e-01:4.6184448175100434e-01:1.4239482336349243e+00:4.8729267936203347e-01:1.9257188632413564e+00:5.4833690032381377e-01:2.1673900297644102e+00:3.5303018514148782e-01:2.9306161167049978e+00:2.9939513224234748e-01:3.6217248680447018e+00 + CVs 20 + 5.0377120932603298e-03 4.2127026618682539e-01 2.9139963446899858e-01 + -3.4865835913430010e-02 8.4364464369775671e-01 5.5272855326427162e-01 + -1.2892556079684139e-01 1.2542402084585005e+00 8.0638375828742714e-01 + -2.8020975585397340e-01 1.6381818083097786e+00 1.0548967985929867e+00 + -4.8481955521884557e-01 1.9815343361830218e+00 1.2931905874064564e+00 + -7.3351034328867448e-01 2.2734168025583443e+00 1.5146685763797385e+00 + -1.0138915877915069e+00 2.5081310568437152e+00 1.7120250293550183e+00 + -1.3118739208360695e+00 2.6856713524990830e+00 1.8790219784539832e+00 + -1.6127566940500353e+00 2.8111233878606434e+00 2.0125782839438240e+00 + -1.9033220585615216e+00 2.8937945837119066e+00 2.1145123997245192e+00 + -2.1775240567403369e+00 2.9446520804432903e+00 2.1875202124799582e+00 + -2.4444577087650354e+00 2.9716048276322944e+00 2.2246422124896954e+00 + -2.7300242693509547e+00 2.9827602070736203e+00 2.2124711813281341e+00 + -3.0717450960312567e+00 2.9886180216371505e+00 2.1487829475726095e+00 + -3.4925781769891939e+00 2.9757208805859809e+00 2.0551333562461158e+00 + -3.9685740191424626e+00 2.8921930190360792e+00 1.9593868185761858e+00 + -4.4236365866848857e+00 2.6916014296066217e+00 1.8811268781664716e+00 + -4.7748414521833968e+00 2.4107636766355012e+00 1.8717386275246637e+00 + -4.9823502066908176e+00 2.1380046707724589e+00 1.9605040763940702e+00 + id 14415 + loc 2.5360786914825439e-01 2.6729410886764526e-01 412 + blend 0.0000000000000000e+00 + interp 4.5035761404481928e-01:3.0689627280882636e-01:5.1424782704664840e-01:2.6996377352003453e-01:1.2720617148842073e+00:4.5035311046867887e-01:2.0111581658335091e+00:3.1493400175710579e-01:2.6621049271915389e+00:2.8907037419465292e-01:3.0980096075533465e+00:3.2157251631928196e-01:3.9242192121662911e+00 + CVs 20 + -1.6122549649430767e-01 1.5500618727585855e-01 -5.3127952859722205e-01 + -3.3610291215908844e-01 2.1136008394455832e-01 -9.1059479642398522e-01 + -5.1375248846142374e-01 2.3194958300420665e-01 -1.2720850471132104e+00 + -6.8639001240291031e-01 2.3684283551001012e-01 -1.6671142274057194e+00 + -8.4415110517537051e-01 2.1804524877565001e-01 -2.0926781093784008e+00 + -9.7664112042406392e-01 1.6962045015641602e-01 -2.5448458417055244e+00 + -1.0752712735748668e+00 8.8402336502870105e-02 -3.0118134022489835e+00 + -1.1345276681709511e+00 -2.4537341276930968e-02 -3.4766600630601667e+00 + -1.1525965730707646e+00 -1.6555541747225422e-01 -3.9237574310350181e+00 + -1.1317278007610139e+00 -3.3159569806686018e-01 -4.3361487486492756e+00 + -1.0950565578830576e+00 -5.2056292776478919e-01 -4.6780348861911341e+00 + -1.0898279773048507e+00 -7.2669520650449004e-01 -4.8975603100991076e+00 + -1.1261627028453183e+00 -9.3080073591651091e-01 -4.9863508908128296e+00 + -1.1628747030636841e+00 -1.1268519782445390e+00 -5.0018979616704762e+00 + -1.1740764387272333e+00 -1.3198766597499136e+00 -4.9833845134358938e+00 + -1.1518511736900470e+00 -1.4972807372796206e+00 -4.9325699178665605e+00 + -1.0909886972477751e+00 -1.6523326778071747e+00 -4.8613948445157371e+00 + -9.9987353966840820e-01 -1.8072344247877303e+00 -4.8000483162335197e+00 + -9.4738043403618577e-01 -2.0574552816074085e+00 -4.8052159189383303e+00 + id 14416 + loc 9.2411613464355469e-01 8.1341087818145752e-02 399 + blend 0.0000000000000000e+00 + interp 4.0891531937167480e-01:3.4874500446972789e-01:5.1290213315709199e-01:4.0891123021848108e-01:9.9213364002056503e-01:3.6951690881394023e-01:1.3779513558107763e+00:2.7733427428678303e-01:2.2477122495834880e+00:3.0909093783516928e-01:2.9565110757584887e+00:3.4195189653432229e-01:3.9381877496735940e+00 + CVs 20 + 2.5541379804742420e-01 2.2939604363992921e-01 5.9299988847421888e-02 + 4.9543212494755406e-01 4.7276549425884834e-01 1.5774300378021824e-01 + 7.1348165423613841e-01 7.1381545811329128e-01 2.7626455607642297e-01 + 9.1547316225801578e-01 9.4422269282591009e-01 4.0757871920050970e-01 + 1.1122937377171784e+00 1.1593660502803822e+00 5.5212208349799885e-01 + 1.3108840837409015e+00 1.3508948879934672e+00 7.1011357484354187e-01 + 1.5134948232928662e+00 1.5084524398896297e+00 8.8112081936539732e-01 + 1.7191737778301235e+00 1.6230064412965459e+00 1.0630806115873424e+00 + 1.9252551910381839e+00 1.6880943174365612e+00 1.2522796289637763e+00 + 2.1280383029646610e+00 1.7004003144214566e+00 1.4433915965679303e+00 + 2.3207813775326165e+00 1.6618440249952195e+00 1.6258174963939549e+00 + 2.4954324462775190e+00 1.5820203410405711e+00 1.7846843443888978e+00 + 2.6509137310136150e+00 1.4753928814364290e+00 1.9151703688921287e+00 + 2.7927449752621545e+00 1.3489720316803320e+00 2.0317840646210152e+00 + 2.9167621181520627e+00 1.1889687567298242e+00 2.1402244375183441e+00 + 3.0099192636525207e+00 9.6152456612102455e-01 2.2072517373032099e+00 + 3.0830442136433280e+00 6.0956072287505181e-01 2.2502834982311954e+00 + 3.1755867623221317e+00 2.9550003844440553e-01 2.4638382050868248e+00 + 3.2577787148690280e+00 3.3151714420009437e-01 2.7401212948864120e+00 + id 14417 + loc 1.1233671568334103e-02 6.8120187520980835e-01 393 + blend 0.0000000000000000e+00 + interp 3.1985350103039184e-01:7.4106059471478844e-02:1.0009042514398245e+00:3.1985030249538154e-01:2.5897588185660534e+00:2.6687275146258499e-01:3.0606466580355951e+00:3.0523904934158436e-01:3.8573531675297579e+00 + CVs 20 + -2.7974030248273463e-01 4.2946867879145029e-01 -1.8334958063009643e-01 + -5.3634682388325494e-01 8.6115582309108452e-01 -3.8383691064858805e-01 + -7.9817018890040026e-01 1.3051237657599117e+00 -5.8418961050945550e-01 + -1.0970924603304455e+00 1.7590122403738884e+00 -7.7075484850440334e-01 + -1.4635643145165889e+00 2.2058433716244026e+00 -9.2972113441798721e-01 + -1.9159269190324173e+00 2.6143285257286961e+00 -1.0470459886416510e+00 + -2.4543515756657488e+00 2.9433394486653066e+00 -1.1150417744888517e+00 + -3.0564450269097376e+00 3.1502629171179723e+00 -1.1386122250646926e+00 + -3.6748884632817060e+00 3.2189083278651078e+00 -1.1394832965909223e+00 + -4.2683594578740003e+00 3.1805234516873728e+00 -1.1526486186238694e+00 + -4.8245344191451327e+00 3.0684634830709818e+00 -1.2028621484351603e+00 + -5.3325098270964038e+00 2.8830530735473574e+00 -1.2826900856273511e+00 + -5.7709750958778558e+00 2.6270917348791967e+00 -1.3706421947020824e+00 + -6.1352804796093388e+00 2.3327403886080482e+00 -1.4652712009128930e+00 + -6.4473734926914155e+00 2.0362157174298412e+00 -1.5608375594392629e+00 + -6.7268782645120000e+00 1.7755506983675835e+00 -1.6160419128406038e+00 + -6.9678664312363852e+00 1.5922740049740989e+00 -1.6061301332101290e+00 + -7.1693088837240051e+00 1.4646645760342589e+00 -1.5876986272988969e+00 + -7.4073658527784136e+00 1.2721995490916045e+00 -1.6330392326953913e+00 + id 14418 + loc 1.2672701478004456e-01 7.7880495786666870e-01 381 + blend 0.0000000000000000e+00 + interp 3.5994492771528031e-01:2.8259220070439794e-01:3.8401320055802790e-01:3.4196352223984156e-01:9.7996785095448669e-01:2.6114675117157565e-01:1.9915164878074969e+00:2.6269845650026735e-01:3.0606458777081187e+00:3.5994132826600317e-01:3.9111484884991139e+00 + CVs 20 + 1.0697214273318971e+00 2.1035542581163408e-01 -6.7614313525172154e-01 + 1.7598103635591678e+00 2.2483695986967173e-01 -1.2069610032158249e+00 + 2.3688052912794686e+00 1.5358293806884260e-01 -1.7376216133786153e+00 + 3.0225654295622735e+00 2.3629677167367635e-02 -2.3160968017409100e+00 + 3.7166764047873011e+00 -1.8559231471081272e-01 -2.9036395760007538e+00 + 4.4250012937880170e+00 -4.8874146573004140e-01 -3.4503141029562259e+00 + 5.1059298595371612e+00 -8.8614716591437415e-01 -3.9050698355702633e+00 + 5.7188124356632013e+00 -1.3505178063176935e+00 -4.2285699555950664e+00 + 6.2386883319351680e+00 -1.8292885628865272e+00 -4.4171414069072865e+00 + 6.6662235117540138e+00 -2.2731773521121643e+00 -4.5095330771609241e+00 + 7.0221028452030048e+00 -2.6642835671139768e+00 -4.5608731463097190e+00 + 7.3347561107469277e+00 -3.0204596098889094e+00 -4.6168856616940239e+00 + 7.6380947923796638e+00 -3.3883017296632074e+00 -4.7058206831356291e+00 + 7.9407542979431875e+00 -3.8131577583072538e+00 -4.8422354653704955e+00 + 8.2103353049878383e+00 -4.2621580163829256e+00 -5.0288161976122332e+00 + 8.4195122159817881e+00 -4.6589040923293989e+00 -5.2576753777577583e+00 + 8.5577934645094018e+00 -4.9629234065145136e+00 -5.5097803200604831e+00 + 8.6348167313643103e+00 -5.1793647894270656e+00 -5.7642882059045029e+00 + 8.6458243896055578e+00 -5.3559184068307530e+00 -6.1021219339624491e+00 + id 14419 + loc 3.2649138569831848e-01 8.6924463510513306e-01 1069 + blend 0.0000000000000000e+00 + interp 5.1991532543890939e-01:5.1991012628565503e-01:2.2321431367574540e-01:3.0250366898796271e-01:1.0001755691580749e+00:3.0406071749964503e-01:1.8569096062608770e+00:3.1991570989650120e-01:2.3820557908595630e+00:3.4115300293140555e-01:2.9819369278102785e+00:2.7486283891088292e-01:3.6429146012581559e+00 + CVs 20 + 2.8700230071510274e-01 2.3135683042005128e-01 -2.1037637522103464e-01 + 5.4468661882375480e-01 4.7072208430374379e-01 -4.3617094735359674e-01 + 7.7289227743460320e-01 7.1239538055703555e-01 -6.8269208983391572e-01 + 9.5722803952035695e-01 9.4999383143329486e-01 -9.5374079558818681e-01 + 1.0769618623143464e+00 1.1691986966863275e+00 -1.2465191405439575e+00 + 1.1175626848117290e+00 1.3458670814228424e+00 -1.5477202561374590e+00 + 1.0803359743078000e+00 1.4576772577146879e+00 -1.8365031788866233e+00 + 9.8195299458068752e-01 1.4957222077881487e+00 -2.0931222121191357e+00 + 8.4178225744110924e-01 1.4641575648658207e+00 -2.3010637345582836e+00 + 6.7339265030121520e-01 1.3787706376483531e+00 -2.4510573757908274e+00 + 4.8208324933141966e-01 1.2566923388881310e+00 -2.5582551724513820e+00 + 2.6467799893710159e-01 1.0922556984052820e+00 -2.6649811971928394e+00 + 2.2403255778813469e-02 8.5909488293681613e-01 -2.8068995441865865e+00 + -2.2577190898050536e-01 5.3608140374758873e-01 -3.0014316233566327e+00 + -4.4237796396352230e-01 1.0542556882029708e-01 -3.2691904496693738e+00 + -5.4241801002700529e-01 -4.8095335698256869e-01 -3.6625370091700811e+00 + -3.1284962408212963e-01 -1.2569295431210168e+00 -4.2165591710775123e+00 + 3.1038581244717811e-01 -1.9735269079595017e+00 -4.7105086181098708e+00 + 4.4347573271196139e-01 -2.2588259272098372e+00 -4.8498632041058150e+00 + id 14420 + loc 4.2118695378303528e-01 9.7225445508956909e-01 378 + blend 0.0000000000000000e+00 + interp 3.7986191907651540e-01:2.2720685522990339e-01:7.0694443601127399e-01:2.3953422885242232e-01:1.1580477745329321e+00:3.7985812045732464e-01:2.0043996817247827e+00:2.5808208574103819e-01:2.7126101171763679e+00:2.5011076318945197e-01:3.3296477017889989e+00 + CVs 20 + 5.9261059161218921e-01 3.6108570089930825e-01 2.1423713766443458e-01 + 1.0859255155917231e+00 6.4471563839894730e-01 3.7888776472191998e-01 + 1.5656131620423335e+00 8.9579302926016680e-01 5.2374414095526267e-01 + 2.0554799377561879e+00 1.1467965264244921e+00 6.6999585854750365e-01 + 2.5446965040491940e+00 1.4031982836620520e+00 8.2828067534474736e-01 + 3.0451895389764840e+00 1.6540801132707768e+00 1.0105750928025574e+00 + 3.5796443533399067e+00 1.8704793708737188e+00 1.2293007614905238e+00 + 4.1594949184897194e+00 2.0146070393862283e+00 1.4943653181501846e+00 + 4.7812341845842887e+00 2.0495148263307770e+00 1.8107779040147225e+00 + 5.4298192706044182e+00 1.9435814725723195e+00 2.1697653678145739e+00 + 6.0799801308040546e+00 1.6767348641360242e+00 2.5412546502447078e+00 + 6.6959280468083113e+00 1.2390126807229094e+00 2.8801888624434184e+00 + 7.2360687565479953e+00 6.5039877288648462e-01 3.1358899305942773e+00 + 7.6913611380894924e+00 6.9850515199831875e-04 3.2867680170794156e+00 + 8.1087739149425033e+00 -5.9840646910390571e-01 3.3709140925692123e+00 + 8.5415232846906353e+00 -1.0674138627362662e+00 3.4245163852992020e+00 + 8.9976419798428360e+00 -1.3521400218591664e+00 3.4257237273618926e+00 + 9.4404857267354920e+00 -1.4911041763266599e+00 3.3749555362084140e+00 + 9.8790616023989237e+00 -1.7873945894259720e+00 3.4359708817532524e+00 + id 14421 + loc 7.7260637283325195e-01 8.7612313032150269e-01 396 + blend 0.0000000000000000e+00 + interp 3.7225760088034465e-01:3.7225387830433587e-01:7.5193644674663451e-01:2.6232655595400650e-01:1.1730370781609747e+00:2.7129216668898143e-01:2.0022375087650435e+00:2.4217377568855841e-01:3.0068293973707845e+00:2.5961670485359339e-01:3.9890121508423970e+00 + CVs 20 + 1.0048600978814615e+00 1.9963900944769186e-01 -3.7341119358941305e-01 + 1.6811403760180617e+00 2.6129949557914312e-01 -6.5260610123202734e-01 + 2.2692514842050429e+00 2.9654011391669277e-01 -8.9283870632894724e-01 + 2.8642220503429501e+00 3.4986043183533200e-01 -1.1140655956765717e+00 + 3.4569902819768625e+00 4.0829301534743084e-01 -1.3184671262406793e+00 + 4.0413605880578238e+00 4.5528446497452324e-01 -1.5131040826462789e+00 + 4.6134659347610443e+00 4.7308002849781711e-01 -1.7071027539224040e+00 + 5.1701223108556791e+00 4.4475850382814264e-01 -1.9075985100985966e+00 + 5.7094153304557560e+00 3.5617532646790129e-01 -2.1169772283994872e+00 + 6.2370059051198803e+00 1.9382256885374760e-01 -2.3373131273008649e+00 + 6.7530610361616219e+00 -5.0453058655298033e-02 -2.5737479654890376e+00 + 7.2381115832707028e+00 -3.8500638844943280e-01 -2.8306645126066741e+00 + 7.6510331954506725e+00 -8.1959534333730022e-01 -3.1074564631502417e+00 + 7.9606755305146208e+00 -1.3531884981891413e+00 -3.3914248123610831e+00 + 8.1492116768208653e+00 -1.9740842725948788e+00 -3.6641739255638948e+00 + 8.2067845428047104e+00 -2.6560902998098452e+00 -3.9117745780949686e+00 + 8.1327914295227330e+00 -3.3610823395576408e+00 -4.1177683129082423e+00 + 7.9403843527580724e+00 -4.0472907158436984e+00 -4.2574810561954273e+00 + 7.6612474169714408e+00 -4.6737306527773868e+00 -4.3147075597746696e+00 + id 14422 + loc 5.0955235958099365e-02 8.5559844970703125e-01 401 + blend 0.0000000000000000e+00 + interp 5.1685460164901431e-01:3.0697658137748229e-01:3.3916123778343221e-01:5.1684943310299780e-01:9.2245345291331504e-01:3.8600065462975686e-01:1.7243480260554591e+00:4.0348809520404644e-01:2.1320636209857406e+00:3.4876057169444480e-01:2.9970006124394182e+00:3.2261466482338563e-01:3.9073267930797293e+00 + CVs 20 + 6.2114773555877051e-03 2.8343587561236794e-01 -2.3664235180293550e-01 + -7.4504972164174399e-03 5.5061874467903926e-01 -4.6062467750539871e-01 + -2.4804014404489594e-02 8.1208088983378857e-01 -6.8333446721337887e-01 + -3.9295367746692178e-02 1.0709343183356259e+00 -9.1349915308435103e-01 + -5.7785224287149661e-02 1.3236881293073279e+00 -1.1582018476826401e+00 + -9.3891897252925460e-02 1.5659151885914535e+00 -1.4233905678158743e+00 + -1.6865386308236419e-01 1.7912304096867768e+00 -1.7115289229196877e+00 + -3.0314202590675854e-01 1.9879520160623325e+00 -2.0194360874826338e+00 + -5.0911171970949609e-01 2.1394656919000345e+00 -2.3373392298427613e+00 + -7.8479296695990131e-01 2.2283017170057926e+00 -2.6520309744394570e+00 + -1.1156998517425312e+00 2.2404467449335304e+00 -2.9537027123218205e+00 + -1.4822562676987965e+00 2.1648780314853222e+00 -3.2382786846344103e+00 + -1.8671523298671455e+00 1.9908302211653353e+00 -3.4992817559506766e+00 + -2.2615588041842982e+00 1.7154838667675629e+00 -3.7136508902288630e+00 + -2.6747836226654416e+00 1.3561463482390046e+00 -3.8297341804868057e+00 + -3.1125673682074546e+00 9.6079410888351369e-01 -3.7735274673179129e+00 + -3.5467158163680934e+00 6.0985334861705154e-01 -3.4912127656236818e+00 + -3.9161401567610659e+00 3.9039065296471587e-01 -2.9977101003698627e+00 + -4.1756970968636580e+00 2.0969883348120977e-01 -2.7881826550368687e+00 + id 14423 + loc 7.6177221536636353e-01 5.9645563364028931e-01 402 + blend 0.0000000000000000e+00 + interp 3.3070020141750434e-01:2.6598811730285599e-01:5.1929640345003136e-03:2.6216166687288317e-01:7.6715626351926769e-01:2.3986888121772168e-01:1.5909996942153479e+00:3.3069689441549016e-01:2.3295695101003111e+00:2.3385317002301920e-01:3.1331986820963453e+00 + CVs 20 + -8.1620541793090695e-03 2.8538612419221077e-01 -2.4233962288469402e-01 + -3.0169911104499625e-02 5.8037956846342498e-01 -4.8889693371138065e-01 + -4.3629676411570617e-02 8.9287631098710474e-01 -7.5135030679442660e-01 + -6.8483159611182287e-02 1.2241368571651334e+00 -1.0390309945262712e+00 + -1.4817644118997891e-01 1.5573062518517604e+00 -1.3513588169681667e+00 + -2.9527209310650349e-01 1.8466066319222225e+00 -1.6691467844682704e+00 + -3.4736423322555954e-01 1.9563726496769336e+00 -1.8151547487977138e+00 + -5.0383707344835826e-01 2.1172988842284814e+00 -2.2681029283713343e+00 + -7.3717837627395766e-01 2.1289702993535613e+00 -2.6032157197256947e+00 + -9.5187548140168277e-01 2.0636413960047824e+00 -2.8640738539101163e+00 + -1.1069591768072384e+00 1.9010170510385689e+00 -3.1158360127494760e+00 + -1.2111410173021950e+00 1.6136104325592198e+00 -3.3685272445133165e+00 + -1.3066143463484530e+00 1.1923372327448629e+00 -3.6329205485027960e+00 + -1.4719492109733663e+00 6.8798130292707205e-01 -3.9148537390445783e+00 + -1.7672089680852532e+00 1.8698283344033206e-01 -4.2143889716710632e+00 + -2.1813869100867485e+00 -2.3218437075488896e-01 -4.5199238711378040e+00 + -2.6569019890820678e+00 -5.5819633318255679e-01 -4.8370755248082649e+00 + -3.1601085900376114e+00 -8.3755250283836324e-01 -5.1988160612377321e+00 + -3.7101266665342907e+00 -1.1379263985572128e+00 -5.6039524330245074e+00 + id 14424 + loc 7.4744164943695068e-01 9.6417552232742310e-01 1079 + blend 0.0000000000000000e+00 + interp 3.9998706626958230e-01:3.2142889249914380e-01:4.4234632984778277e-01:3.9998306639891962e-01:1.1627838256339567e+00:3.8468929872711033e-01:1.9945627210111430e+00:3.8770582044089635e-01:2.4488750622114437e+00:3.3490102330361471e-01:3.3836934114169375e+00 + CVs 20 + 1.5811305728736458e-01 3.0038631155041318e-01 -5.4062761871987261e-02 + 3.2401541652696897e-01 5.7499559809697920e-01 -1.2043009565730364e-01 + 4.9783258751152587e-01 8.1210971982610225e-01 -2.0512316059020402e-01 + 6.7561748016466538e-01 1.0023785382028831e+00 -3.0632902652589356e-01 + 8.4881994836020169e-01 1.1384738519747530e+00 -4.1483003676225949e-01 + 1.0051214251296179e+00 1.2171858826804169e+00 -5.1461610651849332e-01 + 1.1358400353375557e+00 1.2458185917155362e+00 -5.8966395150259898e-01 + 1.2413117749663560e+00 1.2403376165486573e+00 -6.3241356313540531e-01 + 1.3252451268557923e+00 1.2184412500321857e+00 -6.4030468557732689e-01 + 1.3907189066023762e+00 1.1983660124533753e+00 -6.1277810253493248e-01 + 1.4413899605222855e+00 1.1970992613140292e+00 -5.5441905445187167e-01 + 1.4815406370275948e+00 1.2283764206804835e+00 -4.7510137669879171e-01 + 1.5134065989849481e+00 1.3010315173419846e+00 -3.8948975543089887e-01 + 1.5333434967489945e+00 1.4208170837636711e+00 -3.1547121115251148e-01 + 1.5308208656940518e+00 1.6019134616713888e+00 -2.7396967974110586e-01 + 1.4995476846664377e+00 1.9237405922454380e+00 -3.0690832721733130e-01 + 1.4634879900666120e+00 2.5892963425055511e+00 -5.9394712086621237e-01 + 1.5056346877428433e+00 3.4924183698147400e+00 -1.4981145106304763e+00 + 1.4066983683785181e+00 3.4080050853408848e+00 -1.3456694454858875e+00 + id 14425 + loc 4.2704087682068348e-03 5.5404007434844971e-01 412 + blend 0.0000000000000000e+00 + interp 5.1804338785915194e-01:3.4305906092074140e-01:5.8765567835690247e-01:5.1803820742527340e-01:1.1450429646645679e+00:3.1015226242111466e-01:1.9780788207055617e+00:2.7098538159286539e-01:2.8890073963273464e+00:3.1846648335648076e-01:3.6245274751663876e+00 + CVs 20 + 7.1020109171284729e-01 1.4042865530845569e-01 -1.6664819031429901e-01 + 1.1778250486016453e+00 1.4272886421152786e-01 -3.1979469164809099e-01 + 1.5915281100708423e+00 1.0093377834414780e-01 -4.4380948815077370e-01 + 2.0063003311963685e+00 4.4352818686092088e-02 -5.2949154872810478e-01 + 2.4090765077370029e+00 -3.1237797040476911e-02 -5.7191823050849044e-01 + 2.7877386886116282e+00 -1.2763061199025350e-01 -5.6862928780427990e-01 + 3.1312461974292365e+00 -2.4392682506217600e-01 -5.2078414024035746e-01 + 3.4320789378648859e+00 -3.7741784851182869e-01 -4.3388922662148355e-01 + 3.6880261916817769e+00 -5.2485456774693340e-01 -3.1655104582245758e-01 + 3.9000943207567977e+00 -6.8185089170492219e-01 -1.7693852994068854e-01 + 4.0692500175812869e+00 -8.3824676418522137e-01 -1.5004600774931431e-02 + 4.2039713716021012e+00 -9.8335543312213236e-01 1.8108251431217293e-01 + 4.3321476214471719e+00 -1.1322452663954807e+00 4.1287138621940689e-01 + 4.4789663231930890e+00 -1.3227551208751074e+00 6.4984242124104097e-01 + 4.6439419735687162e+00 -1.5711989421210586e+00 8.6337008163056850e-01 + 4.8194587113184859e+00 -1.8745893947107062e+00 1.0426158203931077e+00 + 4.9966736378455803e+00 -2.2295979204374321e+00 1.1715172998046630e+00 + 5.1580707489544695e+00 -2.6238959757622151e+00 1.2271106411045833e+00 + 5.2623989426312212e+00 -3.0195833163075565e+00 1.1806226429130176e+00 + id 14426 + loc 1.6237013041973114e-01 7.8501528501510620e-01 400 + blend 0.0000000000000000e+00 + interp 4.4699548047208565e-01:2.9809940804123536e-01:6.0089239124219695e-01:2.9175156673920072e-01:1.1169674155115286e+00:3.0840735024864185e-01:1.9610475743960891e+00:3.7398786074837564e-01:2.4058771449576528e+00:3.0452186821032085e-01:2.9970504155440487e+00:4.4699101051728096e-01:3.8365337792414649e+00 + CVs 20 + -1.5943209563524358e-01 3.8622104887110187e-01 -1.2340072441781930e-01 + -3.2134995040787773e-01 7.5468809876575893e-01 -2.7337826057311987e-01 + -4.7410402097917942e-01 1.0929166361590104e+00 -4.6427341942156175e-01 + -6.1597543921270015e-01 1.3956588531055960e+00 -6.9880805037229876e-01 + -7.5059904567371527e-01 1.6602161621624751e+00 -9.7220756966411315e-01 + -8.8350290573912393e-01 1.8849547951705317e+00 -1.2731979998881593e+00 + -1.0209353485871073e+00 2.0722287551825982e+00 -1.5891870666890604e+00 + -1.1674803991037961e+00 2.2263887449650785e+00 -1.9108960367606702e+00 + -1.3245843477679158e+00 2.3526776445938022e+00 -2.2351971548600145e+00 + -1.4909026365596021e+00 2.4560655773992401e+00 -2.5669380754941469e+00 + -1.6646660673754290e+00 2.5395049658193227e+00 -2.9123477987801096e+00 + -1.8461455620553766e+00 2.6048955714596809e+00 -3.2623421481891830e+00 + -2.0365803406119656e+00 2.6580016285675026e+00 -3.5919720523627587e+00 + -2.2314924710074164e+00 2.7097387550553096e+00 -3.8822858720261055e+00 + -2.4170544499177042e+00 2.7724309446864406e+00 -4.1264227140270444e+00 + -2.5757468828208427e+00 2.8495407995194126e+00 -4.3200716680061921e+00 + -2.6945430296765984e+00 2.9292817142083472e+00 -4.4617209419413166e+00 + -2.7827128530284830e+00 2.9837964582490857e+00 -4.5725331672797864e+00 + -3.0326089474121281e+00 2.8747132530608210e+00 -4.7313985171442106e+00 + id 14427 + loc 7.3515820503234863e-01 9.4011440873146057e-02 379 + blend 0.0000000000000000e+00 + interp 5.7775156825031659e-01:2.2290623949265020e-01:6.1584157191718436e-01:5.7774579073463417e-01:1.0906649801452812e+00:5.1837618899773130e-01:1.9843459818487075e+00:5.5537648164708797e-01:2.4136887075998805e+00:1.8456710730425507e-01:3.0725544962624110e+00:3.8835015120329830e-01:3.9916104177406693e+00 + CVs 20 + 5.2187258703781370e-01 3.3850905526327585e-01 -8.4434647039654184e-02 + 9.7860773500004794e-01 5.9581674134837459e-01 -1.6825124555164023e-01 + 1.4366188423838793e+00 7.8831921164997665e-01 -2.8623386735157319e-01 + 1.9193197942029829e+00 9.4294536546162955e-01 -4.4271104734793554e-01 + 2.4129924592678185e+00 1.0831197734662714e+00 -6.1618899858825271e-01 + 2.9103428636692503e+00 1.2155423593703589e+00 -7.8030497461767845e-01 + 3.4130477398923578e+00 1.3283715537586998e+00 -9.1198342204267691e-01 + 3.9182310002365792e+00 1.4066602766438283e+00 -9.9767681721926993e-01 + 4.4107824492950591e+00 1.4426475519473738e+00 -1.0327553464180839e+00 + 4.8681335448277618e+00 1.4367902309047567e+00 -1.0216717220401017e+00 + 5.2714919085492848e+00 1.3977432345850354e+00 -9.7648502252384595e-01 + 5.6172787519668077e+00 1.3393329330630683e+00 -9.0862288580009831e-01 + 5.9179369374463100e+00 1.2648223497061686e+00 -8.2058162548966440e-01 + 6.1761357234726706e+00 1.1464296140370518e+00 -7.1177100365898716e-01 + 6.3612654070166528e+00 9.5116526018010372e-01 -5.9072002836192750e-01 + 6.4442559168090252e+00 6.8981118737131375e-01 -4.5654081097363308e-01 + 6.4309323083933467e+00 3.8512696058624574e-01 -2.7646443771442686e-01 + 6.3787775438123777e+00 4.7990460417698166e-02 -4.5947681808014729e-02 + 6.4003641464117109e+00 -1.8169390251261985e-01 7.9656493369483994e-02 + id 14428 + loc 7.4914765357971191e-01 5.6789082288742065e-01 404 + blend 0.0000000000000000e+00 + interp 4.5635717446571233e-01:4.4731533833207415e-01:1.9820660905287191e-01:3.1916942755066968e-01:8.4996557226483083e-01:4.1785232049281024e-01:1.1597355578188802e+00:2.9306301383409694e-01:1.9595664484874347e+00:4.5635261089396773e-01:2.3776928250955400e+00:2.7729118333962582e-01:3.0057253376090705e+00:4.3860926657387750e-01:3.4581838669390734e+00:4.5132344036891064e-01:3.9821924665694763e+00 + CVs 20 + -7.2884894321533958e-02 3.6371373911204631e-02 -4.2141924383782441e-02 + -1.3335751104466628e-01 9.6002448808296920e-02 -9.2894442510449871e-02 + -1.8206239443183003e-01 1.7396629404256778e-01 -1.4915302298693878e-01 + -2.2904504502845691e-01 2.6611886011538932e-01 -2.1514227670632743e-01 + -2.6723434365170140e-01 3.7483549370856145e-01 -2.8936632532998452e-01 + -2.8739486985049401e-01 5.0051157592296458e-01 -3.6938180005209559e-01 + -2.8054454155729369e-01 6.4118198762501621e-01 -4.5155189798039364e-01 + -2.4105699471467246e-01 7.9377493492448181e-01 -5.2947765447079975e-01 + -1.7040626058133396e-01 9.5809706517716797e-01 -5.9103080953066223e-01 + -7.4308281214660599e-02 1.1376044521600295e+00 -6.1814671472745508e-01 + 4.5067099941849986e-02 1.3258539961727096e+00 -6.0306158766927898e-01 + 1.9197335739524513e-01 1.5048875199885792e+00 -5.6269728423386256e-01 + 3.7327256021506816e-01 1.6571919217307791e+00 -5.3414676026314245e-01 + 5.7912693136447924e-01 1.7807939708537379e+00 -5.4596763827495831e-01 + 7.8956098490217952e-01 1.8877022187136216e+00 -5.9994952611890529e-01 + 9.9613264858271267e-01 1.9869673500513971e+00 -6.8428582455636300e-01 + 1.2082816690672418e+00 2.0719405332138043e+00 -7.8860837155278551e-01 + 1.4445845021115069e+00 2.1171055028808601e+00 -9.1495785455219347e-01 + 1.6140905874294056e+00 2.2592114268018424e+00 -9.9747919411817465e-01 + id 14429 + loc 1.4642451703548431e-01 4.6087542176246643e-01 393 + blend 0.0000000000000000e+00 + interp 4.4506523368609618e-01:3.0195643079774814e-01:2.8548188493147775e-02:2.9317061190350846e-01:1.0071504844054808e+00:3.1015673652801184e-01:1.9945686012489654e+00:3.1002953315862047e-01:3.0113955385828386e+00:4.4506078303375934e-01:3.6575271933417377e+00 + CVs 20 + -1.6047689645938762e-01 3.6845489887680200e-01 2.3896802336733103e-01 + -3.0798148359344546e-01 7.2578398534449029e-01 4.7399436023312691e-01 + -4.6757962105438755e-01 1.0650661709228939e+00 6.9414023472839781e-01 + -6.5142235875613075e-01 1.3759662316004149e+00 8.9904115937811158e-01 + -8.6050715635132813e-01 1.6495009390410431e+00 1.0925286049067087e+00 + -1.0902542037172887e+00 1.8806955969282051e+00 1.2751533809068765e+00 + -1.3328429669308746e+00 2.0699562564483203e+00 1.4462808715872129e+00 + -1.5841062089088340e+00 2.2215173822150360e+00 1.6093952007303955e+00 + -1.8489723958302211e+00 2.3368419622278345e+00 1.7736128197503529e+00 + -2.1374389732183325e+00 2.4094600395400083e+00 1.9489127781627664e+00 + -2.4530836777125811e+00 2.4290608500639173e+00 2.1419735502790367e+00 + -2.7939203382381468e+00 2.3939750165574001e+00 2.3541489837252092e+00 + -3.1657814251404224e+00 2.3202824983621335e+00 2.5861085978682619e+00 + -3.5911111928097101e+00 2.2314928768408913e+00 2.8472359459847771e+00 + -4.0854145827643595e+00 2.1236392237430639e+00 3.1579514625409706e+00 + -4.6064051014273826e+00 1.9633287362590339e+00 3.5348933265464582e+00 + -5.0667929163230454e+00 1.7539124414589093e+00 3.9714664321505229e+00 + -5.3899593023158179e+00 1.5755579417079453e+00 4.4574245674515618e+00 + -5.4248783549476194e+00 1.6471199752784345e+00 4.9265108009063727e+00 + id 14430 + loc 8.5098296403884888e-02 2.5520077347755432e-01 381 + blend 0.0000000000000000e+00 + interp 4.9433140939567416e-01:2.4866376391549563e-01:6.8786657458201572e-01:4.9432646608158021e-01:1.1390980794600920e+00:3.9531923326892804e-01:1.9331237779429675e+00:2.3143107930813078e-01:2.2814028841475684e+00:2.8812485936854854e-01:3.4233944552908087e+00 + CVs 20 + -6.4401912840452058e-01 1.7299352650095629e-01 -8.3551108798197848e-01 + -1.1501970409642746e+00 1.8998946639446329e-01 -1.3991781991697514e+00 + -1.6261088797826617e+00 1.4400412860830214e-01 -1.8992665577715273e+00 + -2.1064105943823663e+00 7.3738165082051110e-02 -2.4219498973908262e+00 + -2.5659444470149313e+00 -1.9660815788542063e-02 -2.9567647082936834e+00 + -2.9804841166021023e+00 -1.3427138633403513e-01 -3.4872239558302969e+00 + -3.3316500480742133e+00 -2.6601361761924291e-01 -3.9982399993339435e+00 + -3.6094631009254075e+00 -4.0508948199249417e-01 -4.4835911328898073e+00 + -3.8177905061704029e+00 -5.3987792109317279e-01 -4.9484686573252796e+00 + -3.9764141991913409e+00 -6.6932087372188032e-01 -5.4077752929818956e+00 + -4.1107570108348979e+00 -8.0648380688848298e-01 -5.8846856876701565e+00 + -4.2401916469234449e+00 -9.7968483926017336e-01 -6.4096256894072052e+00 + -4.3738107680914915e+00 -1.2502069041740989e+00 -6.9773787126235884e+00 + -4.4890955793120622e+00 -1.6682599452904707e+00 -7.5182723833721994e+00 + -4.5530639278255656e+00 -2.1924522930037655e+00 -7.9385880165963103e+00 + -4.5605263511800169e+00 -2.7312116453132171e+00 -8.2088247976835778e+00 + -4.5280123335587588e+00 -3.2708835564348226e+00 -8.3652647137783038e+00 + -4.5019096355353980e+00 -3.8276612944392054e+00 -8.4554485652307427e+00 + -4.6103608885471203e+00 -4.2068697346227726e+00 -8.4567311702816532e+00 + id 14431 + loc 5.5932301282882690e-01 5.3169971704483032e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8020895192963864e-01:3.0123413613798072e-01:7.4322194097673266e-02:3.1587260221504260e-01:9.1817328640113360e-01:2.6505397194628505e-01:1.5486177628830526e+00:3.0841311135511601e-01:2.1074128936459822e+00:4.8020414984011939e-01:2.7809804228280397e+00:2.6609968748221541e-01:3.3621684500864348e+00 + CVs 20 + 1.9828837275344485e-01 2.7423119841885690e-01 -2.6243313287609982e-01 + 3.9760676382927956e-01 5.4189508359730088e-01 -5.2000024508399867e-01 + 6.2239288818494720e-01 7.6886921531351371e-01 -7.2692628250606761e-01 + 8.8819948542687110e-01 8.9283537985513484e-01 -8.3826968658971590e-01 + 1.1823954927510396e+00 9.7139748416905247e-01 -9.0750949336999365e-01 + 1.5302127863826824e+00 1.1418385901034362e+00 -9.8311710399333108e-01 + 1.8870503880722302e+00 1.4797303315937715e+00 -1.0570553446308857e+00 + 2.1180417279361956e+00 1.9892958568200496e+00 -1.1570178399280069e+00 + 2.0339233901875735e+00 2.5274115214140389e+00 -1.4443875190483464e+00 + 1.7009485858379256e+00 2.7220542349770458e+00 -1.9025424279812109e+00 + 1.4422265024650960e+00 2.6375011713681022e+00 -2.3077204080930653e+00 + 1.4582861418982533e+00 2.4987241018308217e+00 -2.6350439272386019e+00 + 6.5163693131922829e-02 2.0167238971041344e+00 -2.2825823398529064e+00 + 1.8726061287481288e-01 1.4663398217301142e+00 -2.2527456858361754e+00 + 7.0628083466964420e-01 1.4709362180982977e+00 -2.8731197808756925e+00 + 7.9779864222949914e-01 9.8867826566647699e-01 -2.9157908446281429e+00 + 9.6711924020169415e-01 4.7398167486896492e-01 -2.7610756149824591e+00 + 1.1604912386619686e+00 7.0916248190813380e-02 -2.4674339392022402e+00 + 1.1759301580817338e+00 -1.9307662289475302e-01 -2.4142342910120891e+00 + id 14432 + loc 2.1479234099388123e-01 3.2588431239128113e-01 399 + blend 0.0000000000000000e+00 + interp 4.8130331538433585e-01:3.0697020010092751e-01:2.3661837575531863e-02:3.1319177960547923e-01:9.7617310725398010e-01:3.4814049674281589e-01:1.4839168662050803e+00:4.8129850235118204e-01:1.9807831194148515e+00:4.2746564069881099e-01:2.2372721463854761e+00:3.1654316441941682e-01:3.0294028966546951e+00 + CVs 20 + -1.5197662158563341e-01 2.9989050078493168e-01 1.5631181062588076e-01 + -3.4361439231372298e-01 6.0177374097685143e-01 3.0528642766473763e-01 + -5.7680351216051196e-01 8.9219887914741081e-01 4.2907617464036690e-01 + -8.4342041951052016e-01 1.1659185762444442e+00 5.2870304888412356e-01 + -1.1324914338746774e+00 1.4236886826998678e+00 6.1882208419818441e-01 + -1.4360590704153846e+00 1.6614952999881996e+00 7.1523197996859267e-01 + -1.7505559252128702e+00 1.8669293585394551e+00 8.3017834277005598e-01 + -2.0726772402563305e+00 2.0201957333481491e+00 9.6917519098333926e-01 + -2.3946145126213065e+00 2.0976332532306450e+00 1.1287032373966177e+00 + -2.7018142183505538e+00 2.0811162710463851e+00 1.2928593687440877e+00 + -2.9773239326513679e+00 1.9738060815751373e+00 1.4372031763800597e+00 + -3.2199706124614518e+00 1.8064560538664756e+00 1.5471193392047271e+00 + -3.4442407515273659e+00 1.6123619049193927e+00 1.6246718144611441e+00 + -3.6570428118824561e+00 1.4259959255357968e+00 1.6692017097783769e+00 + -3.8427589244966884e+00 1.2917591100243131e+00 1.6653747131456575e+00 + -3.9336865123269229e+00 1.2529275930039157e+00 1.5828081130250546e+00 + -3.7834809469311916e+00 1.2952885990592466e+00 1.4322582137396895e+00 + -3.4846180173669055e+00 1.2882895921779631e+00 1.3580365190367321e+00 + -3.6942846469508370e+00 1.3514399533692829e+00 1.2559075258752035e+00 + id 14433 + loc 5.6321620941162109e-01 6.5524572134017944e-01 396 + blend 0.0000000000000000e+00 + interp 4.5805261396795421e-01:2.5013691055998077e-01:1.8210321673255314e-02:3.3829898309992196e-01:9.4853888010379139e-01:2.6985526664968928e-01:1.6620898351391871e+00:4.5804803344181455e-01:2.2507016673973146e+00:2.8624404796468911e-01:2.9775330862388740e+00:4.3186429198256077e-01:3.3431095446951344e+00 + CVs 20 + 8.1211632199941108e-01 2.4594076150835589e-01 -2.7083360965359110e-01 + 1.3561329464586425e+00 3.4083671828273787e-01 -4.5274507319087753e-01 + 1.8228101412618807e+00 3.8032761390656145e-01 -5.9559810563681004e-01 + 2.3055028470015779e+00 4.1858512909252876e-01 -7.1657316568323659e-01 + 2.8102224737692580e+00 4.5675597363416476e-01 -8.2029259784761643e-01 + 3.3448773054090770e+00 4.9205834734135317e-01 -9.1873740987754737e-01 + 3.9142881603838942e+00 5.1861902848323782e-01 -1.0318093720297610e+00 + 4.5175481008267591e+00 5.2479404349831638e-01 -1.1820215191123027e+00 + 5.1513748544560913e+00 4.8760054919108908e-01 -1.3864170464342280e+00 + 5.8069796442409798e+00 3.7393752829822802e-01 -1.6555373219050507e+00 + 6.4534725645935875e+00 1.5500291017039358e-01 -1.9963869751919139e+00 + 7.0394756861251047e+00 -1.7433147573593222e-01 -2.4071844005400735e+00 + 7.5277387507915501e+00 -5.9936401886052493e-01 -2.8721055726038385e+00 + 7.9017780452637583e+00 -1.1083158629264820e+00 -3.3564509891253884e+00 + 8.1526926499542789e+00 -1.6829080712343618e+00 -3.8189731069560491e+00 + 8.2789391003280866e+00 -2.2961813446213961e+00 -4.2263269016637466e+00 + 8.2874134715982155e+00 -2.9196142104102973e+00 -4.5516834772937456e+00 + 8.1943456906093299e+00 -3.5141159434357019e+00 -4.7741108268621497e+00 + 8.0496259874590645e+00 -3.9289601078384702e+00 -4.8710831358348408e+00 + id 14434 + loc 1.4006206393241882e-01 3.5325177013874054e-02 378 + blend 0.0000000000000000e+00 + interp 4.6335504624753970e-01:2.9228561720237228e-01:3.5167256027385907e-02:2.3318902910731826e-01:1.0158428407412348e+00:3.6247682294550965e-01:2.1207774334215506e+00:4.6335041269707727e-01:2.8155003199833084e+00:3.1835618001408889e-01:3.1070782239536991e+00 + CVs 20 + 3.3119546817421980e-01 2.4838026401254382e-01 -3.2452143333771555e-01 + 5.8365677447672237e-01 4.2952765837809986e-01 -6.4451261588771191e-01 + 8.0331317236842614e-01 5.7090316795731155e-01 -9.6044609729344788e-01 + 1.0097904717327364e+00 6.9379827982719222e-01 -1.2736217263695249e+00 + 1.2025594835905715e+00 8.0814011293395238e-01 -1.5753246379033758e+00 + 1.3795145518705645e+00 9.2080777571442285e-01 -1.8582264052136837e+00 + 1.5451378124357356e+00 1.0393061531280121e+00 -2.1267746202957665e+00 + 1.7127267906541563e+00 1.1700099735030669e+00 -2.3898260415759465e+00 + 1.8993576897102356e+00 1.3136071723772700e+00 -2.6472123401410559e+00 + 2.1175419431093014e+00 1.4657210010519888e+00 -2.8911022599880525e+00 + 2.3746588350005049e+00 1.6199387245930512e+00 -3.1227982979809630e+00 + 2.6805740604933437e+00 1.7578562928136918e+00 -3.3565978663040328e+00 + 3.0346128408410005e+00 1.8231566800134260e+00 -3.5952901312738916e+00 + 3.3845830723234123e+00 1.7377451123148608e+00 -3.8086210059989094e+00 + 3.6623937986700597e+00 1.4941272849869516e+00 -3.9622247205481180e+00 + 3.8655628397705417e+00 1.1685803401880133e+00 -4.0410772733796918e+00 + 4.0317701206715295e+00 8.4875813534686939e-01 -4.0337557833629836e+00 + 4.1988631052183667e+00 5.6466469525642982e-01 -3.9877407469442323e+00 + 4.3692733570848397e+00 3.0779877629646046e-01 -4.1756205520695771e+00 + id 14435 + loc 5.9078648686408997e-02 8.1493437290191650e-01 402 + blend 0.0000000000000000e+00 + interp 4.2378974909230860e-01:4.2378551119481772e-01:2.8512268478598013e-01:4.2349912309212251e-01:9.0696754713720829e-01:2.4085073032040030e-01:1.2166537082644111e+00:2.7514686991232729e-01:2.5227637006442647e+00:2.7271283019520787e-01:3.1130970124119517e+00:2.7138362869908628e-01:3.9768131187839257e+00 + CVs 20 + -1.0441636890093127e-01 3.0492149121630374e-01 -2.0899539677282686e-01 + -2.1619805262939634e-01 6.1691976369846213e-01 -4.0046370189936686e-01 + -3.2799057941406562e-01 9.4573825361820252e-01 -6.2796884426653976e-01 + -4.3383109589388807e-01 1.2721436183563730e+00 -9.1371911766731650e-01 + -5.2863238788551636e-01 1.5577225096804441e+00 -1.2481281919360234e+00 + -6.1013015901148659e-01 1.7681331873924557e+00 -1.6003630672338276e+00 + -6.7999480912618770e-01 1.8964665432044809e+00 -1.9430771879586577e+00 + -7.3858647796317312e-01 1.9543899175981949e+00 -2.2667268814856580e+00 + -7.8931130393305360e-01 1.9545751072209854e+00 -2.5775060421267622e+00 + -8.4831695695876863e-01 1.9050030210694631e+00 -2.8902381672434023e+00 + -9.3873851978517764e-01 1.8154851144289212e+00 -3.2114054801048835e+00 + -1.0834617653176313e+00 1.6974330454677178e+00 -3.5335584337027419e+00 + -1.2814707749905181e+00 1.5547651780965155e+00 -3.8522035001653641e+00 + -1.5106308112690929e+00 1.3792148898581096e+00 -4.1794949521942968e+00 + -1.7760743204162670e+00 1.1415852266620607e+00 -4.4971977586717298e+00 + -2.0994017068935245e+00 7.9859726301999667e-01 -4.7280039277030124e+00 + -2.4633815563181889e+00 3.6838209427764956e-01 -4.8813710906618262e+00 + -2.7882307676615485e+00 -4.2217605776708828e-02 -5.1242175453310130e+00 + -2.9624769886160451e+00 -3.2913812355113148e-01 -5.6436756174975278e+00 + id 14436 + loc 9.3565475940704346e-01 4.9241682887077332e-01 412 + blend 0.0000000000000000e+00 + interp 3.3892698312325931e-01:3.3892359385342807e-01:5.0732451329687422e-01:2.3925695178200590e-01:1.0022389116256656e+00:3.0044538874999116e-01:1.8077747212098152e+00:3.1599843776230413e-01:2.4442798500469181e+00:3.1462997922902158e-01:3.6923077372152471e+00 + CVs 20 + -7.8707966924211015e-01 2.2021186962009551e-01 1.8014823791673079e-01 + -1.3063546060281703e+00 3.1958976970695729e-01 3.4128302037006175e-01 + -1.7787615718720824e+00 3.9356656196847767e-01 4.9441911510902337e-01 + -2.2766900017950098e+00 4.7687283175577233e-01 6.3359591415858685e-01 + -2.7870841695648632e+00 5.5287366943916028e-01 7.5600956842929601e-01 + -3.2963217490500889e+00 6.0025777726288665e-01 8.6912860258637337e-01 + -3.7942615854027606e+00 5.9916152748926088e-01 9.9011384630308097e-01 + -4.2732428536409071e+00 5.3366633902113536e-01 1.1440174008487876e+00 + -4.7224621495767360e+00 3.9866756188541208e-01 1.3460069888369843e+00 + -5.1340522364714127e+00 2.0206953064581512e-01 1.5887986416168789e+00 + -5.4987958125441123e+00 -6.4216364581546781e-02 1.8419092311312792e+00 + -5.7944708295520115e+00 -4.4185595156485769e-01 2.0407440434831949e+00 + -6.0083849328070595e+00 -9.6116902812751714e-01 2.1436534590685565e+00 + -6.1571856090337853e+00 -1.6179167638873335e+00 2.2041684100703813e+00 + -6.2704302035824950e+00 -2.3688506189568623e+00 2.3316146363464365e+00 + -6.3846229645976749e+00 -3.1157193822288662e+00 2.6248963980416993e+00 + -6.5364058547674411e+00 -3.7739820431373281e+00 3.0991365872237018e+00 + -6.7597310005572817e+00 -4.3565211025695660e+00 3.6822957638769109e+00 + -7.0901438212074916e+00 -4.9250710370921240e+00 4.2958604607320447e+00 + id 14437 + loc 8.2233357429504395e-01 6.4945387840270996e-01 401 + blend 0.0000000000000000e+00 + interp 3.7947908271675329e-01:3.7947528792592616e-01:3.4486052828001290e-01:3.5168623006420313e-01:1.0066199263391662e+00:2.5962484116512735e-01:1.5909958713014518e+00:3.3089945164689255e-01:2.0398227812769880e+00:2.8432918059498685e-01:2.9137479772272474e+00:3.0180056774942837e-01:3.7791379681271766e+00 + CVs 20 + -1.3864819705061388e-01 3.1047947522360192e-01 -2.3686645640454657e-01 + -2.5094514052044864e-01 6.2054187763012103e-01 -4.5644544780916552e-01 + -3.4987615073161138e-01 9.3121455259785713e-01 -6.8961532303779705e-01 + -4.4224357699305616e-01 1.2364260094869355e+00 -9.5624471592859495e-01 + -5.2837065971071628e-01 1.5206065648043028e+00 -1.2671596194224199e+00 + -6.1583507309337648e-01 1.7671580200366559e+00 -1.6212800613663827e+00 + -7.2816868721813532e-01 1.9700410724784774e+00 -2.0063295175175457e+00 + -8.9449390519483818e-01 2.1263743379327402e+00 -2.4016865490073478e+00 + -1.1385003139248746e+00 2.2284079812281128e+00 -2.7854357766554330e+00 + -1.4741439824769427e+00 2.2649303257605080e+00 -3.1346398090280649e+00 + -1.9001223194620618e+00 2.2290979981890207e+00 -3.4271858912729285e+00 + -2.4060592177132030e+00 2.1147985219783618e+00 -3.6512845796255817e+00 + -2.9677240075131888e+00 1.9196782002918429e+00 -3.8094086427555123e+00 + -3.5485450849841480e+00 1.6620700978212253e+00 -3.9050502417621278e+00 + -4.1342915952538526e+00 1.3645235464257437e+00 -3.9390560804270915e+00 + -4.7620066078401404e+00 1.0180807535227163e+00 -3.9546904756776744e+00 + -5.4573592309955785e+00 6.1723734086553361e-01 -4.0726124715066110e+00 + -6.1369675490777276e+00 2.4258255502910897e-01 -4.3586746490383454e+00 + -6.6394618612481917e+00 3.4702536290251662e-02 -4.5595430147876446e+00 + id 14438 + loc 3.5628092288970947e-01 1.0553989559412003e-01 400 + blend 0.0000000000000000e+00 + interp 4.2361688099724726e-01:2.7889230593869757e-01:9.6650446008344382e-01:4.2361264482843730e-01:1.2289153610492374e+00:2.7328687445408356e-01:2.1646469444391001e+00:4.1324182749554489e-01:2.9121703006071558e+00:2.9669027368338119e-01:3.2536971720870023e+00:3.8196885097677669e-01:3.9807306051513400e+00 + CVs 20 + -1.2875326837408652e-01 4.1509719193260691e-01 2.1602222795199133e-01 + -2.6034551604530426e-01 8.2212696296179122e-01 4.5017951164839387e-01 + -4.1670480798387716e-01 1.2185348452560296e+00 6.9520432277333544e-01 + -6.1350587815999047e-01 1.5952563587416546e+00 9.5602981354330419e-01 + -8.6199197949426631e-01 1.9355584325629658e+00 1.2437960426054078e+00 + -1.1691389710469400e+00 2.2159229692421993e+00 1.5633289494739626e+00 + -1.5356002374823059e+00 2.4033500759061832e+00 1.9214922200235831e+00 + -1.9486536589307171e+00 2.4632298537590231e+00 2.3085744131096386e+00 + -2.3777380388358704e+00 2.3801076324472668e+00 2.6949644726078454e+00 + -2.7797014152279642e+00 2.1713811302262580e+00 3.0549970383486329e+00 + -3.1339687644196186e+00 1.8800624338030847e+00 3.3693281830253232e+00 + -3.4523863373548007e+00 1.5486915354366948e+00 3.6216544347935709e+00 + -3.7570784677543871e+00 1.1989097019024284e+00 3.8018780606555449e+00 + -4.0547635106092885e+00 8.2670328961612083e-01 3.9119421703157951e+00 + -4.3422302213764015e+00 4.4925030553926115e-01 3.9568385147793346e+00 + -4.6410560599153134e+00 1.8062194760568584e-01 3.9425594279527516e+00 + -4.9637040678987638e+00 2.3800868895826266e-01 3.8672010930023708e+00 + -5.1555047723242504e+00 6.4077424971527286e-01 3.6945222602052779e+00 + -5.5350814492319023e+00 5.8438281781799528e-01 3.6348483724372249e+00 + id 14439 + loc 1.6862647607922554e-02 4.6664789319038391e-01 404 + blend 0.0000000000000000e+00 + interp 5.3430658948493637e-01:3.2349778666781892e-01:8.1369601419298387e-01:2.5465482129783368e-01:1.0619049696431919e+00:2.9562137458570359e-01:1.9972271783147566e+00:5.3430124641904153e-01:2.7720336763451425e+00:3.8390022979633054e-01:3.2726175682023051e+00:4.5874088545004499e-01:3.9327950298885002e+00 + CVs 20 + -4.8649727036308064e-02 1.4682618754340362e-01 -1.2123232854366572e-01 + -1.0310761725828058e-01 2.9204418572126678e-01 -2.3666588544121991e-01 + -1.6095309267448249e-01 4.3462863396393075e-01 -3.5304217787238140e-01 + -2.3323914839851229e-01 5.8380858705298788e-01 -4.6725931153695888e-01 + -3.2698647688152660e-01 7.4136003851584253e-01 -5.6981129884066950e-01 + -4.4643838882347342e-01 9.0412390933683262e-01 -6.5176031842046922e-01 + -5.9374541269791581e-01 1.0662367037655516e+00 -7.0480757148800344e-01 + -7.6887340271387838e-01 1.2210446223253464e+00 -7.1969743659922036e-01 + -9.6731788656338336e-01 1.3604807856728254e+00 -6.8723450034274258e-01 + -1.1769070014053988e+00 1.4753942737302836e+00 -6.0377945997755900e-01 + -1.3808751377418429e+00 1.5593353556279590e+00 -4.7445308743996528e-01 + -1.5660341706387313e+00 1.6102849474128544e+00 -3.0728880950847393e-01 + -1.7240575333089416e+00 1.6282176977927205e+00 -1.0803384000101635e-01 + -1.8467226524207478e+00 1.6144265634752504e+00 1.1811508568625617e-01 + -1.9228296027236729e+00 1.5733652269426723e+00 3.6168081517766493e-01 + -1.9428417241195142e+00 1.5119986457386263e+00 6.1116907222172190e-01 + -1.9019857764276329e+00 1.4321211199279018e+00 8.5647001109575638e-01 + -1.7984545375375562e+00 1.3297276596779999e+00 1.0849402038211979e+00 + -1.7912181781063459e+00 1.2594556923024740e+00 1.1639190187014905e+00 + id 14440 + loc 8.8670410215854645e-02 6.3103580474853516e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4584950220937070e-01:2.9488520026238874e-01:2.2123037452396588e-01:2.9552734506367290e-01:1.0474435815867869e+00:4.4584504371434863e-01:1.9819185063815912e+00:2.9971349695768745e-01:2.5193668354722227e+00:2.5953198560073315e-01:3.0700158018424015e+00:4.0303550146392553e-01:3.6956018685349683e+00 + CVs 20 + 1.2314849643395122e-01 2.4020975114810339e-01 -1.4860828481985436e-01 + 2.6264938080260997e-01 4.7778217358922781e-01 -3.3008334497270247e-01 + 4.1291516661503996e-01 7.1389426620866314e-01 -5.2536133971581978e-01 + 5.6703145805803179e-01 9.4756518864874006e-01 -7.3232679535179646e-01 + 7.1308998565135129e-01 1.1760772088070131e+00 -9.6033199557391824e-01 + 8.2916438221698407e-01 1.3876741439341105e+00 -1.2136879473139850e+00 + 8.9355817847805730e-01 1.5542304705755936e+00 -1.4851361371507044e+00 + 9.0310065057202549e-01 1.6334385496194928e+00 -1.7494839923383319e+00 + 8.7828592126374172e-01 1.5931304524394991e+00 -1.9610224918611785e+00 + 8.4923701404044605e-01 1.4561179987067432e+00 -2.0890558303514148e+00 + 8.2818126108007828e-01 1.2743781539958892e+00 -2.1775146326595549e+00 + 8.1181441893914708e-01 1.0549273772420269e+00 -2.2912961331589443e+00 + 8.1194537018951007e-01 7.9138694069598825e-01 -2.4518323649606653e+00 + 8.5878546639365783e-01 5.0261671613225278e-01 -2.6548332256703508e+00 + 9.9298258828234220e-01 2.3285718468255062e-01 -2.8808348359221929e+00 + 1.2640032369258196e+00 6.5773217272105111e-02 -3.0661452491121959e+00 + 1.6547944524915332e+00 1.3661439298703920e-01 -3.0813164707305192e+00 + 1.9774578177247102e+00 3.9557410966725648e-01 -2.9481062771502407e+00 + 2.3618838766590153e+00 3.4825120505733809e-01 -3.1046758114732742e+00 + id 14441 + loc 8.4351003170013428e-01 3.1772387027740479e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7582192445262916e-01:4.4505708598452204e-01:1.0649015382846994e-01:4.7581716623338466e-01:9.2467549609890165e-01:3.6561973639858053e-01:1.4241643412870593e+00:4.3813093837645789e-01:2.0209964922186434e+00:3.2198034908732120e-01:2.4318623255456879e+00:2.5621723440129485e-01:3.0770090313278491e+00 + CVs 20 + -1.0814826564628784e-01 2.7865267405510985e-01 1.5931762543473491e-02 + -1.9905146713817909e-01 5.2770512629867561e-01 6.4638002940400008e-02 + -2.7620506570574388e-01 7.6039424722051518e-01 1.2547084195456118e-01 + -3.4003077532466519e-01 9.7848958343102765e-01 1.8106057006436121e-01 + -3.9175469070145286e-01 1.1859803824554145e+00 2.3382645033894639e-01 + -4.3768360924160127e-01 1.3903510638603129e+00 2.9082789760713629e-01 + -4.9408987848782826e-01 1.5965185804631390e+00 3.7027799801628625e-01 + -5.8380339535692682e-01 1.7947567988210191e+00 4.9482898106789114e-01 + -7.2511082594735043e-01 1.9596640037587325e+00 6.7282022984874457e-01 + -9.2392035245985471e-01 2.0619682051509369e+00 8.9303447452727092e-01 + -1.1685364856196505e+00 2.0840770526699095e+00 1.1372177500843690e+00 + -1.4349935401372729e+00 2.0232660546110219e+00 1.3928452694709073e+00 + -1.6952550308986232e+00 1.8822915029307083e+00 1.6514091096636174e+00 + -1.9157504595430745e+00 1.6667428609161716e+00 1.9051512946305826e+00 + -2.0499385727318256e+00 1.3950735425108829e+00 2.1474418034731029e+00 + -2.0496496495778658e+00 1.1193036103768033e+00 2.3663233880022871e+00 + -1.9224989948274251e+00 9.2120907482589631e-01 2.5555920602563842e+00 + -1.7369531701352445e+00 8.5189500172043708e-01 2.7279462831133223e+00 + -1.4389078295734796e+00 7.4617062471959028e-01 2.9598048103936740e+00 + id 14442 + loc 2.1157118678092957e-01 9.4411790370941162e-01 399 + blend 0.0000000000000000e+00 + interp 4.1529177795005534e-01:3.4792706234231424e-01:3.7269310744544071e-01:3.2201447154949220e-01:1.1330112078602024e+00:4.1528762503227584e-01:1.6933725820878418e+00:2.8625120335407922e-01:2.1502671958958830e+00:4.0989486710044654e-01:2.9933288375579306e+00:3.1125288125740319e-01:3.3246083679531031e+00 + CVs 20 + -1.0410915477386615e-01 3.3307670628275965e-01 -3.1224296175022997e-01 + -2.4345719971930482e-01 6.5545830154981133e-01 -6.2326697079331350e-01 + -3.9213653645149826e-01 9.5879647620841590e-01 -9.5442869438676647e-01 + -5.3604249801961712e-01 1.2371495081269623e+00 -1.3108811746885107e+00 + -6.7311293841046305e-01 1.4901143778367014e+00 -1.6852910353762778e+00 + -8.0939852561981152e-01 1.7210847465317483e+00 -2.0650658658616337e+00 + -9.5694213297509689e-01 1.9326623786281494e+00 -2.4337869933760805e+00 + -1.1280347326807423e+00 2.1236830481360869e+00 -2.7795703905947762e+00 + -1.3484870844005843e+00 2.2819358491098694e+00 -3.1045814130415499e+00 + -1.6421815269765481e+00 2.3658728897556260e+00 -3.4014539820477911e+00 + -1.9778863972528611e+00 2.3496556969079188e+00 -3.6430399274601135e+00 + -2.2895663123423891e+00 2.2601366476465183e+00 -3.8061368974156276e+00 + -2.5181092323697207e+00 2.1376125684170786e+00 -3.8853763284479492e+00 + -2.6137431562948210e+00 1.9836333608057952e+00 -3.8910340039909297e+00 + -2.5369887860180236e+00 1.7427159813137258e+00 -3.8329001735210708e+00 + -2.3201276533008022e+00 1.2816837104923131e+00 -3.7270828532854448e+00 + -2.1846598469960523e+00 4.2432282724969783e-01 -3.6598480576681145e+00 + -2.4620145941588238e+00 -3.9511515711015388e-01 -3.7821997276468649e+00 + -2.5979293495224218e+00 -2.1935885689770987e-01 -3.8607222133340868e+00 + id 14443 + loc 7.9403293132781982e-01 3.2467713952064514e-01 393 + blend 0.0000000000000000e+00 + interp 4.8947115442801287e-01:3.5323217228921377e-01:2.6537956005602004e-01:4.5332284591563476e-01:7.9269905675020791e-01:3.0139967890316666e-01:1.2520032795373177e+00:4.8946625971646862e-01:2.0737444902988713e+00:3.0740180967762332e-01:2.9993380911318459e+00:3.0741181287539115e-01:3.7869393555093689e+00 + CVs 20 + 3.0324517908410326e-01 3.4568338371332913e-01 1.7463754835015619e-01 + 6.3003573796271417e-01 7.0368034388275069e-01 3.2423056552763563e-01 + 9.6688468980321152e-01 1.0949221002721516e+00 4.7515830890123156e-01 + 1.3065905635940120e+00 1.5113256036742131e+00 6.6639555408236051e-01 + 1.6405031862632744e+00 1.9216555749605750e+00 9.4421207102937099e-01 + 1.9504319601913807e+00 2.2982293491922792e+00 1.3379333083442546e+00 + 2.2152911099365258e+00 2.6230549677788479e+00 1.8463254998872265e+00 + 2.4274097696497363e+00 2.8769267720949170e+00 2.4454815547253208e+00 + 2.5976392428844726e+00 3.0371825765289238e+00 3.1082366043890302e+00 + 2.7448301716655252e+00 3.0761126061119848e+00 3.8097301247812485e+00 + 2.8868151870571577e+00 2.9627746411350500e+00 4.5190208833980945e+00 + 3.0327794937707777e+00 2.6710164444017321e+00 5.1922695943385566e+00 + 3.1836269853530981e+00 2.1927012614006500e+00 5.7668882845734588e+00 + 3.3445234147190739e+00 1.5494051913359277e+00 6.1644261935857836e+00 + 3.5319714116463570e+00 8.0391734822489314e-01 6.3121453155619305e+00 + 3.7872473577775199e+00 6.7738380629485562e-02 6.2009198952579130e+00 + 4.1683360966966196e+00 -5.5674953950895567e-01 5.8946238936522146e+00 + 4.6451035428535681e+00 -1.0395245326080953e+00 5.5057099256135835e+00 + 4.9750515087971738e+00 -1.5260804193058879e+00 5.4226659812430826e+00 + id 14444 + loc 4.8242869973182678e-01 8.1790059804916382e-01 378 + blend 0.0000000000000000e+00 + interp 4.2825888734363932e-01:3.3634481570620278e-01:4.5645422642712763e-03:2.3651577673954796e-01:8.9686094998449184e-01:4.2825460475476590e-01:1.4670295214297291e+00:2.7922186303266666e-01:2.0880593342054761e+00:3.2409978329806977e-01:2.8283694141199986e+00:2.3943995525891729e-01:3.2933875106369408e+00 + CVs 20 + 6.2239581250222553e-01 3.4210723631466239e-01 1.1410121434922627e-01 + 1.1577919972478714e+00 5.9370205063813242e-01 1.7533906602380694e-01 + 1.6769665213009357e+00 7.9753836057579286e-01 2.2650168267151827e-01 + 2.2037645153581353e+00 9.8856992377938968e-01 3.0515905121996989e-01 + 2.7154120931071879e+00 1.1750242827656945e+00 4.3513832721576973e-01 + 3.1903536597398525e+00 1.3517225195609166e+00 6.2342230298219847e-01 + 3.6215589659363951e+00 1.5132619939803349e+00 8.6223225392299041e-01 + 4.0133721250406911e+00 1.6608377838002863e+00 1.1371029025646433e+00 + 4.3803451761046972e+00 1.7969478863106592e+00 1.4347520995561762e+00 + 4.7473860214171903e+00 1.9168426251829205e+00 1.7513107127441692e+00 + 5.1419846227431387e+00 2.0017349280147361e+00 2.0909861869221729e+00 + 5.5835396441398695e+00 2.0167793529864375e+00 2.4561498188376967e+00 + 6.0627503671998708e+00 1.9203969761572921e+00 2.8303577039170884e+00 + 6.5202165266391683e+00 1.7109425252228814e+00 3.1586950853450073e+00 + 6.8881901334628974e+00 1.4555040902057979e+00 3.3847420528135772e+00 + 7.1416043920465304e+00 1.2162530266564029e+00 3.5147899767879895e+00 + 7.2852255529372831e+00 1.0070127084581881e+00 3.6071955078580986e+00 + 7.3753028705458865e+00 8.1063982422629710e-01 3.7031611781128393e+00 + 7.6351358005565135e+00 5.9068459381968985e-01 3.7626245566916694e+00 + id 14445 + loc 5.2800234407186508e-02 4.2098724842071533e-01 402 + blend 0.0000000000000000e+00 + interp 3.5002423551353490e-01:2.9501819089349757e-01:8.2272362702889601e-01:3.5002073527117977e-01:1.4037871281133441e+00:2.3805397993583094e-01:1.9973667189033135e+00:3.2647058460806017e-01:2.9278195282947959e+00:2.7834121792946814e-01:3.6287188076061829e+00 + CVs 20 + -1.1706513937904295e-01 3.8896303710436031e-01 1.0710811528399997e-01 + -2.5991327327852376e-01 7.7875922089274630e-01 1.9819440211820985e-01 + -4.4005550279702121e-01 1.1667740121682246e+00 2.5542184982762617e-01 + -6.6616617001518508e-01 1.5453466215269691e+00 2.8188083753714860e-01 + -9.4214185554982399e-01 1.9031285175877237e+00 2.9279204142424503e-01 + -1.2668732151065367e+00 2.2297969737459455e+00 3.0339975263484892e-01 + -1.6364853615563091e+00 2.5171535329197554e+00 3.2821584779874813e-01 + -2.0433588519992951e+00 2.7553724201981566e+00 3.8332938657208859e-01 + -2.4762881690771579e+00 2.9304073781140048e+00 4.7888037829077557e-01 + -2.9257372248421589e+00 3.0237926963323596e+00 6.0768228510376809e-01 + -3.3790287933742928e+00 3.0107627736187839e+00 7.5356184502716539e-01 + -3.8032509654306419e+00 2.8647954564043068e+00 9.1044051365503365e-01 + -4.1475470116038826e+00 2.5900693858876900e+00 1.0913289915641595e+00 + -4.3781036566366298e+00 2.2449818637576247e+00 1.3342892708371439e+00 + -4.4895482153650548e+00 1.9220041212385957e+00 1.6819640931512896e+00 + -4.5007146600371799e+00 1.7386534925532542e+00 2.1481210939396003e+00 + -4.4361727597029574e+00 1.7990139803110372e+00 2.6737927111127711e+00 + -4.3352772604789589e+00 2.0037000108512171e+00 3.1751899277597331e+00 + -4.3067530010278299e+00 2.0031427306153180e+00 3.7680135046624090e+00 + id 14446 + loc 7.8657937049865723e-01 6.0205209255218506e-01 412 + blend 0.0000000000000000e+00 + interp 4.1745249000137324e-01:2.9034018633724445e-01:3.1587323012301827e-02:3.9170773485756089e-01:9.9689677078889460e-01:2.9961750209190302e-01:1.6827685477981060e+00:4.1744831547647326e-01:2.5557048835608560e+00:3.0929458767516421e-01:3.0868449844571240e+00 + CVs 20 + 7.4427388349190182e-01 5.4873679336605419e-02 -2.7090229629673135e-01 + 1.2397641188441364e+00 8.3536992735466220e-03 -4.9121009090810952e-01 + 1.6797416390012385e+00 -6.8067463827213015e-02 -6.8538121236424177e-01 + 2.1345487634039042e+00 -1.5041593604736547e-01 -8.5809386329867343e-01 + 2.5999811070165730e+00 -2.4440198118715051e-01 -1.0046326826372851e+00 + 3.0725665354134439e+00 -3.5588528744113712e-01 -1.1225583198148994e+00 + 3.5467952167051084e+00 -4.8965373605530971e-01 -1.2109287766008612e+00 + 4.0148236606291059e+00 -6.4866149124826489e-01 -1.2711340678017473e+00 + 4.4686519673108096e+00 -8.3284703806422034e-01 -1.3066340727215966e+00 + 4.8997917595531701e+00 -1.0438710130972906e+00 -1.3193873364349029e+00 + 5.2942612347534634e+00 -1.2871066823541431e+00 -1.3151540288087697e+00 + 5.6276414799011318e+00 -1.5778070651077571e+00 -1.3165055733652309e+00 + 5.8762256077921702e+00 -1.9324501903337996e+00 -1.3537874927591171e+00 + 6.0434854505967674e+00 -2.3460295394434842e+00 -1.4313015009457979e+00 + 6.1475503553221316e+00 -2.8046010339110579e+00 -1.5345290857962874e+00 + 6.1899697114909484e+00 -3.2918535121540300e+00 -1.6593588134123085e+00 + 6.1682302745513642e+00 -3.7846381754281611e+00 -1.8104467921634995e+00 + 6.0968157994463352e+00 -4.2618210279778612e+00 -1.9794694426551289e+00 + 6.1490494960253432e+00 -4.7473111361684888e+00 -2.0699116501207677e+00 + id 14447 + loc 5.3728890419006348e-01 7.9579842090606689e-01 400 + blend 0.0000000000000000e+00 + interp 4.5809656804421156e-01:2.6989115944795383e-01:1.1650795790453805e-02:3.1349091710332644e-01:6.7353233464659135e-01:3.1312376444762552e-01:1.0382870885844147e+00:2.6788115513717914e-01:1.9743853616506231e+00:3.2554171680668803e-01:2.6210437121011760e+00:4.5809198707853116e-01:3.1969013669296498e+00 + CVs 20 + -1.1041445827906540e-01 1.9824306857236917e-01 -1.4624592996057822e-01 + -2.2729298024272671e-01 3.8746995243124965e-01 -3.2589231412643477e-01 + -3.3229557725777981e-01 5.4902202442471704e-01 -5.2901356759472473e-01 + -4.2224859663401204e-01 6.7688346377045150e-01 -7.4622075382774522e-01 + -5.0336019314162161e-01 7.7487000427425701e-01 -9.7144748765357036e-01 + -5.8061500269081379e-01 8.5095990701524737e-01 -1.2004269082598988e+00 + -6.5603954408142684e-01 9.1490302914113442e-01 -1.4296399638896746e+00 + -7.3020695611919029e-01 9.7451636378226403e-01 -1.6523352418498267e+00 + -8.0478282762932796e-01 1.0356192559748443e+00 -1.8631502369701272e+00 + -8.8210126140337264e-01 1.1041479289873903e+00 -2.0649458547367607e+00 + -9.6235065821296395e-01 1.1868453193882784e+00 -2.2662571072053943e+00 + -1.0411852676436621e+00 1.2906698582960465e+00 -2.4761005620519461e+00 + -1.1101180352073008e+00 1.4197950161878459e+00 -2.7054724214307995e+00 + -1.1602275879001291e+00 1.5699803563651997e+00 -2.9728209703645554e+00 + -1.1823836122026938e+00 1.7246265711883408e+00 -3.3023550705836957e+00 + -1.1599815526069446e+00 1.8566632367880960e+00 -3.7101249572547590e+00 + -1.0695426978674960e+00 1.9290977499294852e+00 -4.1886593973353321e+00 + -9.0198930593073456e-01 1.9023493105732623e+00 -4.6799812533554865e+00 + -7.3649461734483868e-01 1.7944760843888625e+00 -4.9202370199542944e+00 + id 14448 + loc 1.5273509919643402e-01 3.6027967929840088e-01 401 + blend 0.0000000000000000e+00 + interp 4.1693787551124839e-01:2.7807010467420962e-01:6.1823732863796410e-01:3.7246765292592843e-01:1.1488641667473800e+00:3.1470231203495902e-01:1.9533176985735661e+00:3.2340132190554055e-01:2.5843704378968111e+00:4.1693370613249331e-01:3.0056705266230153e+00:3.2577434933580729e-01:3.9857535196925209e+00 + CVs 20 + -2.8953928544739710e-01 3.8941408249003923e-01 1.0126093984954394e-01 + -5.7358382294215993e-01 7.8020682323720281e-01 1.7370196604365992e-01 + -8.8031015642124755e-01 1.1580873687723479e+00 2.5436282828882206e-01 + -1.2181486902020318e+00 1.5089675700692851e+00 3.6138708691659893e-01 + -1.5881960747372708e+00 1.8209060181636585e+00 5.1115674727585803e-01 + -1.9848045211417717e+00 2.0805725753015176e+00 7.2293358547676034e-01 + -2.3939776515179614e+00 2.2708880000050087e+00 1.0093410344876159e+00 + -2.7940700658539339e+00 2.3745753376958407e+00 1.3666507441921025e+00 + -3.1636407317312818e+00 2.3816323773593715e+00 1.7767922750965108e+00 + -3.4883026786579516e+00 2.2913446581426768e+00 2.2133222864128843e+00 + -3.7642141247924337e+00 2.1086464353262704e+00 2.6530412379908115e+00 + -3.9924193071998801e+00 1.8379907748043591e+00 3.0826455300840965e+00 + -4.1682590490897207e+00 1.4841738375406868e+00 3.4950507708795278e+00 + -4.2729131357292687e+00 1.0592290794821260e+00 3.8935530883304343e+00 + -4.2652117097496633e+00 5.8784381668065266e-01 4.2984400399855840e+00 + -4.0844454867468354e+00 1.2301326820384140e-01 4.7208546350841338e+00 + -3.6838949374505394e+00 -2.5218737664540003e-01 5.1332013306051989e+00 + -3.1209203199227122e+00 -4.6801634753430021e-01 5.4637987879955521e+00 + -2.7358625902552780e+00 -6.3297838490509506e-01 5.7090487532776546e+00 + id 14449 + loc 5.0947004556655884e-01 6.0843312740325928e-01 1069 + blend 0.0000000000000000e+00 + interp 4.6628390444001783e-01:3.1257261625341365e-01:1.6845336157432511e-01:3.9355641304522454e-01:8.8164342173301757e-01:2.6300824382187254e-01:1.5093491788696949e+00:4.6627924160097345e-01:2.1298247264569450e+00:2.9486027658336128e-01:2.9036641901497715e+00:2.6505397194628505e-01:3.5612892541850831e+00 + CVs 20 + 4.7250841944658992e-02 2.5669570282033533e-01 -4.0479157748750730e-02 + 7.8236917489892394e-02 5.3187037518433045e-01 -9.1209285976343465e-02 + 1.0077080844456060e-01 8.2379924956851480e-01 -1.5155735008370178e-01 + 1.4790347109552182e-01 1.1380300669855155e+00 -2.2531813972650847e-01 + 2.5839151766422597e-01 1.4312564796704093e+00 -2.9390464108134845e-01 + 3.9675678591888441e-01 1.6394134946811030e+00 -3.3388747159966353e-01 + 5.1328297414526436e-01 1.7565083965639343e+00 -3.4976317896334291e-01 + 6.1070062187312057e-01 1.8140838134102406e+00 -3.4154482566290267e-01 + 7.1816401552985121e-01 1.8755612701737041e+00 -2.9452601867614991e-01 + 8.2375630529054134e-01 2.0374376473187876e+00 -2.3349577844260594e-01 + 8.3191960662740039e-01 2.3095188593836613e+00 -2.7629159247120821e-01 + 7.0739641333595304e-01 2.5216522538831634e+00 -4.7356098003042718e-01 + 5.2069713968786646e-01 2.5710160754346245e+00 -7.4971669405359653e-01 + 3.2128003346407241e-01 2.4396064288984691e+00 -1.0401002161896178e+00 + 1.5138581366082315e-01 2.0938301869024869e+00 -1.3327265019234316e+00 + 1.6571542401494210e-01 1.5541363508319552e+00 -1.5639288748283908e+00 + 3.3831012141984884e-01 1.2856522953169129e+00 -1.4625544731675191e+00 + 5.0096754572303159e-01 9.6678105554032778e-01 -1.3877492679898014e+00 + 7.3864575981383362e-01 5.4600350849552437e-01 -1.2955877578879891e+00 + id 14450 + loc 9.6192395687103271e-01 7.6171427965164185e-01 404 + blend 0.0000000000000000e+00 + interp 3.4810185537130905e-01:2.4991351076120574e-01:9.9270208265760806e-01:3.4809837435275537e-01:1.4414347747517700e+00:2.4103588565499670e-01:2.3214682093429966e+00:3.1404462923225535e-01:3.2415525568171462e+00:2.5248764944240437e-01:3.9800715388522940e+00 + CVs 20 + -8.6880552918550930e-02 6.7378420971676359e-02 1.3341245540239424e-02 + -1.9405918541191114e-01 1.1166591520234737e-01 6.0181876374006002e-02 + -3.2650087229472580e-01 1.7764449079200720e-01 1.2139687984221853e-01 + -4.8335380188431037e-01 2.6899123907179923e-01 1.7314634492041145e-01 + -6.5924046609129328e-01 3.9972102640211082e-01 2.0621448347763077e-01 + -8.4176619802514052e-01 5.8124273820768080e-01 2.1084142451718510e-01 + -1.0127577538843868e+00 8.1127187254202560e-01 1.8159312976602993e-01 + -1.1589064448256701e+00 1.0688669564080027e+00 1.2118898096171513e-01 + -1.2755193357122048e+00 1.3373992989207721e+00 3.7429792028497465e-02 + -1.3506225203642681e+00 1.6245897107977125e+00 -5.3151848166716670e-02 + -1.3692463484911166e+00 1.9354313359631206e+00 -1.2531383807481664e-01 + -1.3427332241837227e+00 2.2413758493357645e+00 -1.7025626311662020e-01 + -1.3024995495644429e+00 2.5084254466933884e+00 -1.9854518174040431e-01 + -1.2636718095746369e+00 2.7311271185470738e+00 -2.1995070526270050e-01 + -1.2174920973944461e+00 2.9243144593405344e+00 -2.4052696236196652e-01 + -1.1503312980791844e+00 3.1012600921291757e+00 -2.7325236279861675e-01 + -1.0573145953634886e+00 3.2634296667218581e+00 -3.4026712686160143e-01 + -9.4499614808464227e-01 3.3998858049503986e+00 -4.5481895755042034e-01 + -9.5871316315682287e-01 3.3928258073790545e+00 -4.9660678653310841e-01 + id 14451 + loc 8.2368302345275879e-01 4.2745195329189301e-02 393 + blend 0.0000000000000000e+00 + interp 5.0009277885101000e-01:3.2648580418372625e-01:1.8591275653286543e-01:3.6200616939260455e-01:1.0272282451701968e+00:5.0008777792322157e-01:1.3595724860163980e+00:4.0199606750759304e-01:2.2388325271208931e+00:3.0872520476160048e-01:3.4955214532142991e+00 + CVs 20 + 4.4167503855398915e-01 3.8780976743307727e-01 1.7051346767717523e-01 + 8.5006731649430045e-01 7.7604888859398002e-01 3.0223183524228880e-01 + 1.2392374799293484e+00 1.1880011182721044e+00 4.3531016116489174e-01 + 1.6197536789499027e+00 1.6205586935452545e+00 6.1215563522246041e-01 + 1.9920790751685509e+00 2.0466480078649321e+00 8.7205290170027416e-01 + 2.3461764316108309e+00 2.4368539060678729e+00 1.2350502826402694e+00 + 2.6621975900834318e+00 2.7739619312617370e+00 1.6943501220207278e+00 + 2.9253854976959781e+00 3.0520296884888793e+00 2.2273587781724520e+00 + 3.1365777576074660e+00 3.2705897458137629e+00 2.8157115570558924e+00 + 3.3086808686659621e+00 3.4251171106362062e+00 3.4551480575325897e+00 + 3.4580032764436455e+00 3.4903026541832531e+00 4.1496402216974895e+00 + 3.5972987208327041e+00 3.4154885267453805e+00 4.8925852570617696e+00 + 3.7349543197643000e+00 3.1503280290534219e+00 5.6417573004745005e+00 + 3.8771368644685280e+00 2.6712586800352933e+00 6.3170241091047403e+00 + 4.0367923680394124e+00 1.9983354249216330e+00 6.8212351499694179e+00 + 4.2284649904454712e+00 1.2157851980105274e+00 7.0729100292576526e+00 + 4.4676075864993914e+00 4.3603750470288194e-01 7.0569792715076911e+00 + 4.7501484680920552e+00 -2.6604406777713718e-01 6.8193118698669517e+00 + 4.9118618848687898e+00 -8.2394050569557287e-01 6.5397411625294035e+00 + id 14452 + loc 3.7813255190849304e-01 3.7580198049545288e-01 399 + blend 0.0000000000000000e+00 + interp 4.2382349913324840e-01:3.0613875979060651e-01:3.3543171728768550e-01:3.1863222914785561e-01:1.3700782333787167e+00:2.7418873375801395e-01:2.5465483800282565e+00:3.1968248182189896e-01:3.0618580490230087e+00:4.2381926089825711e-01:3.8599991552763324e+00 + CVs 20 + -2.1143597479000195e-01 3.7127384695900129e-01 1.0231976947458318e-01 + -4.4843472268341428e-01 7.4059729132563334e-01 2.0624659944545315e-01 + -7.2301623477447252e-01 1.0960810066195878e+00 2.9342318539115009e-01 + -1.0289971476887014e+00 1.4350916936322267e+00 3.7196743224908801e-01 + -1.3578457393532597e+00 1.7588934036177872e+00 4.6287097605359473e-01 + -1.7101447279901425e+00 2.0608374885129175e+00 5.8494143665085119e-01 + -2.0935071738758424e+00 2.3217224826935445e+00 7.5394638093125999e-01 + -2.5140409715977379e+00 2.5064784675938077e+00 9.8320651760004418e-01 + -2.9634250773333974e+00 2.5632616752136785e+00 1.2758405698618307e+00 + -3.4072180497070308e+00 2.4357359620404049e+00 1.6102347814920301e+00 + -3.7812055352656886e+00 2.1107693062216044e+00 1.9317408591346426e+00 + -4.0474263411865650e+00 1.6749592392906651e+00 2.1883497243530021e+00 + -4.2475553592235551e+00 1.2360224988376132e+00 2.3830666973190464e+00 + -4.4597264829435366e+00 8.6692453647908518e-01 2.5409286765581118e+00 + -4.7570583608293875e+00 6.3011686707551462e-01 2.6595950994963369e+00 + -5.1595510838811460e+00 5.7660966596661112e-01 2.6545910713249188e+00 + -5.5619079704832037e+00 7.5386757366486656e-01 2.3769483856230456e+00 + -5.7914956549281680e+00 1.0147561488846559e+00 1.9452816651011546e+00 + -6.2053838456724426e+00 9.5320554394063750e-01 1.8691124583538161e+00 + id 14453 + loc 1.4839293062686920e-01 7.8501528501510620e-01 402 + blend 0.0000000000000000e+00 + interp 4.1522659615200486e-01:2.7853086833425017e-01:6.0335849949892228e-01:2.7271283019520787e-01:1.1163618398602360e+00:2.8764952153303180e-01:1.9615734918061900e+00:2.8488926119468977e-01:2.9967436548095550e+00:4.1522244388604335e-01:3.8339137487909460e+00 + CVs 20 + 2.1232002508182635e-02 3.2343220083297503e-01 -1.2651659026615972e-01 + 1.0610434655942691e-03 6.4620890691340171e-01 -2.5053282269540478e-01 + -1.6681012118434091e-02 9.8624122572557238e-01 -3.8956211297092408e-01 + -5.8575542536928316e-03 1.3338163097780300e+00 -5.5110048784032806e-01 + 3.3577880116874792e-02 1.6685284693172515e+00 -7.3769720694363250e-01 + 9.7184599463683963e-02 1.9727639401303414e+00 -9.4790429685543998e-01 + 1.8010335426987378e-01 2.2369796628126117e+00 -1.1774703671624445e+00 + 2.7809354303237177e-01 2.4591834141154099e+00 -1.4202578394433882e+00 + 3.8123106020448050e-01 2.6470279630305726e+00 -1.6709168700738086e+00 + 4.7170045359977042e-01 2.8144449232388924e+00 -1.9251972505879580e+00 + 5.4295277005270182e-01 2.9740395979600245e+00 -2.1784974296738753e+00 + 6.1289622872993954e-01 3.1303479443783448e+00 -2.4358729095986704e+00 + 7.0979819469163707e-01 3.2558965709312138e+00 -2.7132350871652458e+00 + 8.5796821567078507e-01 3.2837959110936321e+00 -3.0114050876886624e+00 + 1.0633774260157778e+00 3.1536862660419391e+00 -3.3156692533438066e+00 + 1.2880559103015512e+00 2.8140774938819439e+00 -3.6144278733685091e+00 + 1.4251908306129706e+00 2.2154638138298073e+00 -3.9111098057003000e+00 + 1.2978186765250961e+00 1.5217594869078277e+00 -4.2263743653530508e+00 + 1.0172068242090508e+00 1.4578188808543124e+00 -4.3286991607566705e+00 + id 14454 + loc 8.8531845808029175e-01 7.9455161094665527e-01 1079 + blend 0.0000000000000000e+00 + interp 4.0403893820388587e-01:3.5876535682852378e-01:5.2284932301992615e-01:3.3013025218271203e-01:1.6630758412892273e+00:3.4373134537296568e-01:2.6889566227767694e+00:4.0403489781450386e-01:2.9978852083622964e+00:3.2365966190338458e-01:3.6436663932810029e+00 + CVs 20 + 6.4131012585715574e-02 2.8824395495033656e-01 -1.0954110244137703e-01 + 1.4620874147009394e-01 5.8692015217484972e-01 -2.2574396226771676e-01 + 2.4410082314255285e-01 8.8408027623223562e-01 -3.6942353006630463e-01 + 3.5981395316870435e-01 1.1677016659801485e+00 -5.5030654996156103e-01 + 4.9698406812690632e-01 1.4235676994742092e+00 -7.7023230038743296e-01 + 6.5546528414249849e-01 1.6306546050499153e+00 -1.0291360007788122e+00 + 8.2943860879051534e-01 1.7675991022046758e+00 -1.3233935026423009e+00 + 1.0083792579544086e+00 1.8224563875188506e+00 -1.6441498284540947e+00 + 1.1798300725382034e+00 1.7924394500606677e+00 -1.9788499506944057e+00 + 1.3318144938948606e+00 1.6803320768135916e+00 -2.3142262111618392e+00 + 1.4556060506318547e+00 1.4912959365151093e+00 -2.6370132016644021e+00 + 1.5478019413399917e+00 1.2307038123725471e+00 -2.9324945852744460e+00 + 1.6106470388192879e+00 9.0510288956055174e-01 -3.1843402954405655e+00 + 1.6525870179512461e+00 5.2335869002697843e-01 -3.3718024075668285e+00 + 1.6813221634834787e+00 9.8138973322095646e-02 -3.4535702980584739e+00 + 1.6820155416605984e+00 -3.2362147009074915e-01 -3.3125046048121689e+00 + 1.6042126123295142e+00 -5.2183904977794349e-01 -2.7777498148916857e+00 + 1.4721174631343157e+00 -3.1312527145309543e-01 -2.1451406245326448e+00 + 1.4388425546083397e+00 -5.8602323709271520e-01 -1.8573084812605254e+00 + id 14455 + loc 4.9886038899421692e-01 4.6336299180984497e-01 412 + blend 0.0000000000000000e+00 + interp 4.1249754324491428e-01:4.1249341826948183e-01:4.0790626991273893e-03:2.7901578201276128e-01:9.4081968369727176e-01:2.9922424088810379e-01:1.9129203161422919e+00:3.4207000633286866e-01:2.4719965333704206e+00:2.5232025468472885e-01:3.1713265900055054e+00 + CVs 20 + -1.5096834035820628e-01 1.3671586528161905e-01 -6.2318783779456244e-01 + -2.8540789084256607e-01 1.9650443802521730e-01 -1.0357516202751518e+00 + -4.0852327731283811e-01 2.3765804351394626e-01 -1.3782585103207199e+00 + -5.2530280611395208e-01 2.9101450315523103e-01 -1.7199453047570346e+00 + -6.3446601500786415e-01 3.5196896123546223e-01 -2.0583792462044328e+00 + -7.3485762205930372e-01 4.1501285146596628e-01 -2.3912154003123440e+00 + -8.2457905373503837e-01 4.7503221698496789e-01 -2.7168647547775606e+00 + -9.0149300482750494e-01 5.2759194697228162e-01 -3.0335249128771000e+00 + -9.6539866917277273e-01 5.6886952054327966e-01 -3.3364114411293970e+00 + -1.0180652223328122e+00 5.9632800686577658e-01 -3.6212656697295835e+00 + -1.0537294107832116e+00 6.1338505641146490e-01 -3.8945268030899416e+00 + -1.0466812450004235e+00 6.3315194888025217e-01 -4.1767032530569344e+00 + -9.7715161004310569e-01 6.5312401059898417e-01 -4.4895154407109308e+00 + -8.8169273429569384e-01 6.3273436528447946e-01 -4.8283039082782366e+00 + -8.1145003370547952e-01 5.4055694983727864e-01 -5.1677071750604924e+00 + -7.7419400307583930e-01 3.7855628876712544e-01 -5.4931550024873976e+00 + -7.5815511308550720e-01 1.5860772525301936e-01 -5.7982672212108062e+00 + -7.6718834903218269e-01 -1.0659351298490050e-01 -6.0716635076868348e+00 + -8.9621360685456330e-01 -3.9123785350868490e-01 -6.1861369988812900e+00 + id 14456 + loc 8.5934257507324219e-01 6.7440927028656006e-02 378 + blend 0.0000000000000000e+00 + interp 4.4019048893484136e-01:3.6475418054018333e-01:3.1439224863576531e-01:3.7359920077029185e-01:9.9130019389204282e-01:4.4018608702995204e-01:1.2952090410638846e+00:3.4196784590426227e-01:2.4020923925033850e+00:3.7186559783733752e-01:2.9972430634562492e+00:4.2448789394006603e-01:3.8332631993039246e+00 + CVs 20 + -2.8747767823505604e-01 3.3672221891606213e-01 -3.8089043548015407e-02 + -5.8121997969482908e-01 6.7163817440556950e-01 -5.4343352003522194e-02 + -8.8065785720388812e-01 9.9717814582171316e-01 -4.4415455119140967e-02 + -1.1827107067275435e+00 1.3183883700661674e+00 -1.8912390907327992e-02 + -1.4920427232556075e+00 1.6416110296894251e+00 1.0133405235064896e-03 + -1.8255878822892559e+00 1.9635028700485080e+00 -8.3748991568862730e-03 + -2.1976960440928694e+00 2.2683697004951822e+00 -6.8270913663344701e-02 + -2.6090597984767170e+00 2.5342454063418018e+00 -1.9225269509143617e-01 + -3.0512016753537670e+00 2.7369352565282936e+00 -3.8302579901639000e-01 + -3.5131309314997505e+00 2.8489224816490579e+00 -6.2837624092468514e-01 + -3.9829370661508472e+00 2.8398598566506150e+00 -9.0325362852118418e-01 + -4.4405282779109783e+00 2.6818982673694318e+00 -1.1751211480708688e+00 + -4.8513784777492210e+00 2.3826570584142575e+00 -1.4036873363350828e+00 + -5.1983915841383546e+00 2.0231292900540638e+00 -1.5689362524905479e+00 + -5.5091934852911777e+00 1.7008198715434966e+00 -1.6999504144397566e+00 + -5.8117163382332979e+00 1.4732783733134065e+00 -1.8176477656860472e+00 + -6.1021524717870381e+00 1.3687104188824106e+00 -1.8935232435354190e+00 + -6.3678761321774644e+00 1.3458961598270394e+00 -1.9225650110233532e+00 + -6.6847427043026393e+00 1.1789959036721114e+00 -2.0591582195226250e+00 + id 14457 + loc 2.4148295819759369e-01 8.5975682735443115e-01 400 + blend 0.0000000000000000e+00 + interp 3.7399160066438225e-01:3.7398786074837564e-01:4.0072681390794906e-01:2.9943621257969943e-01:1.0017556899136051e+00:3.5538019250855735e-01:1.9289204418351933e+00:2.9336285562585318e-01:2.4989825986691065e+00:2.5980216687548308e-01:3.0542080735104284e+00:2.7955186572133300e-01:3.9421182629524703e+00 + CVs 20 + -1.7205210855144004e-01 3.5456018268448097e-01 -1.1074703838928358e-01 + -3.6839000466846533e-01 6.9983023364359698e-01 -2.5144388682408125e-01 + -5.6525063848932477e-01 1.0250596481984973e+00 -4.4752865191863905e-01 + -7.5585484743796094e-01 1.3157138744381720e+00 -7.0779463972360945e-01 + -9.3950301600189356e-01 1.5582792904927354e+00 -1.0284697821787454e+00 + -1.1115937358065451e+00 1.7447947720053150e+00 -1.4015011073643677e+00 + -1.2646394033222590e+00 1.8718024987505082e+00 -1.8179751952834715e+00 + -1.3887332605775604e+00 1.9376092612822622e+00 -2.2689044639045224e+00 + -1.4698969423528283e+00 1.9413199775696812e+00 -2.7452283615522965e+00 + -1.4916155839889433e+00 1.8824758337322378e+00 -3.2336415565358316e+00 + -1.4506120183701554e+00 1.7650795303563585e+00 -3.7114294222163946e+00 + -1.3718717333059376e+00 1.6021778127867645e+00 -4.1558750122407968e+00 + -1.2932730882744286e+00 1.4055026069552163e+00 -4.5515601790593880e+00 + -1.2446971134185412e+00 1.1742735393115604e+00 -4.8760244724319621e+00 + -1.2432264658064915e+00 9.1175856434404889e-01 -5.1069591409790016e+00 + -1.2873717216130689e+00 6.4310582329401256e-01 -5.2689068572188642e+00 + -1.3685306628830787e+00 3.8723349872366719e-01 -5.4257434863406298e+00 + -1.4742043707202133e+00 1.4166996515503416e-01 -5.6126184922340707e+00 + -1.4847952242522391e+00 -1.0327665741687442e-01 -5.8936151461216859e+00 + id 14458 + loc 4.6095469594001770e-01 4.1770422458648682e-01 401 + blend 0.0000000000000000e+00 + interp 3.7076149421206939e-01:3.7075778659712727e-01:9.5528244247833138e-01:3.2014433362688299e-01:1.6479859143806133e+00:3.2728619835667178e-01:2.3453152892340778e+00:3.2914829258069384e-01:3.0641251465901718e+00:3.1934955223244083e-01:3.9521679720897431e+00 + CVs 20 + -2.3149104941294313e-01 3.6561883359988717e-01 1.7282592899344329e-01 + -4.9025059452093478e-01 7.5615516005585948e-01 3.1042557929827430e-01 + -7.8740437468723534e-01 1.1491570397355406e+00 4.6223415937101697e-01 + -1.1368539743311266e+00 1.5166909301645886e+00 6.4462031014674714e-01 + -1.5447488014070736e+00 1.8315797975997656e+00 8.6835178765251797e-01 + -1.9929763171197661e+00 2.0713780419855619e+00 1.1588175636069460e+00 + -2.4457820956905607e+00 2.2189034674013435e+00 1.5423602477715896e+00 + -2.8616372074477563e+00 2.2558303444248988e+00 2.0263234426195949e+00 + -3.2017995461351441e+00 2.1671563051626519e+00 2.5912142609183695e+00 + -3.4432167114958330e+00 1.9527561225763337e+00 3.1989256017729604e+00 + -3.5837903261805533e+00 1.6206951334792508e+00 3.8079602301446043e+00 + -3.6462787417735325e+00 1.1796633866280235e+00 4.3767532447293336e+00 + -3.6556432502735010e+00 6.4316441642595223e-01 4.8723248816652109e+00 + -3.6041336950583172e+00 4.6232916605614682e-02 5.2800018835294562e+00 + -3.5127192581575195e+00 -5.5627300513513611e-01 5.6170689283233166e+00 + -3.5417123614884729e+00 -1.1298562427923049e+00 5.9494139150073009e+00 + -3.9087546300007454e+00 -1.6426846032317783e+00 6.3212430943788798e+00 + -4.5430671533462359e+00 -2.0187589661528906e+00 6.6435659396649491e+00 + -4.7389054089437233e+00 -2.3631681494122052e+00 6.9413712986163043e+00 + id 14459 + loc 1.7224763333797455e-01 7.8386133909225464e-01 393 + blend 0.0000000000000000e+00 + interp 3.1804618261327400e-01:3.1509835661984381e-01:5.2990946887557677e-01:3.0240430365079440e-01:1.3392788305704431e+00:3.1804300215144787e-01:2.2958014504693578e+00:3.1187302549880197e-01:3.1221842458946787e+00:2.5935388411569976e-01:3.9961658826667152e+00 + CVs 20 + -2.7152050108145404e-01 4.4486282818872841e-01 -2.8104914486244853e-01 + -5.3139503581846403e-01 8.8982699487305905e-01 -5.5567020393233502e-01 + -7.9287729760494763e-01 1.3398033854241256e+00 -8.1537236884338471e-01 + -1.0875174147821143e+00 1.7848904912874792e+00 -1.0474309157780572e+00 + -1.4380133856486550e+00 2.1985886208572900e+00 -1.2366029352626102e+00 + -1.8438176018724364e+00 2.5472954764293325e+00 -1.3732966023148983e+00 + -2.2840742901564184e+00 2.7988443062902366e+00 -1.4598118423841706e+00 + -2.7201845699053493e+00 2.9359578545711766e+00 -1.5087388402797408e+00 + -3.1093665739738041e+00 2.9756976646189099e+00 -1.5347972614750978e+00 + -3.4397036369771596e+00 2.9595220299093192e+00 -1.5447635702689992e+00 + -3.7308580308427386e+00 2.9228299137577145e+00 -1.5405234930115848e+00 + -4.0013860681185927e+00 2.8965277379316587e+00 -1.5320289169606671e+00 + -4.2679235727621698e+00 2.9029706654493275e+00 -1.5320383386496830e+00 + -4.5609492892335544e+00 2.9313117013650221e+00 -1.5490971235397124e+00 + -4.8830034301946750e+00 2.9518361544782525e+00 -1.6145901357879824e+00 + -5.1661747052014722e+00 2.9561154540854808e+00 -1.7991865590458493e+00 + -5.3733932637748287e+00 2.9329804564650463e+00 -2.1323740206672639e+00 + -5.6023256978623888e+00 2.8430748132697348e+00 -2.4895873350341460e+00 + -5.9679393644448249e+00 2.7074735427012104e+00 -2.6009298933338525e+00 + id 14460 + loc 3.2561144232749939e-01 1.0553989559412003e-01 402 + blend 0.0000000000000000e+00 + interp 4.8916664934081422e-01:2.5829207990032182e-01:9.6432778599924562e-01:4.8916175767432085e-01:1.7166414004622901e+00:2.5496290638862551e-01:2.1638199249994732e+00:3.8228753153428702e-01:2.9085398718741349e+00:2.7364409294488334e-01:3.2543882372409771e+00:3.5431876116398564e-01:3.9816635677878285e+00 + CVs 20 + -1.1773515658685939e-01 4.5372057045063752e-01 2.5372056251901248e-01 + -2.5148853598678145e-01 8.9008453553684008e-01 4.6368256120595813e-01 + -4.2783030520782506e-01 1.3058723872390310e+00 6.3700189165657983e-01 + -6.4717961534426571e-01 1.6924267635385706e+00 7.8621829609313720e-01 + -8.9825593187840003e-01 2.0405925593171803e+00 9.2109737839298611e-01 + -1.1724094929508451e+00 2.3449721328700459e+00 1.0453118756815629e+00 + -1.4672808440954488e+00 2.6051695749496813e+00 1.1597079337020493e+00 + -1.7849677475771242e+00 2.8208800589090628e+00 1.2684866442600535e+00 + -2.1268142891520290e+00 2.9882017484784145e+00 1.3810685112699848e+00 + -2.4925717711690440e+00 3.1015864579335912e+00 1.5089301662233547e+00 + -2.8854118671779059e+00 3.1558759265148737e+00 1.6522571810307680e+00 + -3.3070800825913733e+00 3.1415893074078980e+00 1.7965140066832923e+00 + -3.7379966271094340e+00 3.0378866175017194e+00 1.9316676446556151e+00 + -4.1299373656904441e+00 2.8232121416897060e+00 2.0606869424023300e+00 + -4.4307595113541431e+00 2.5058566786557992e+00 2.1941072153738217e+00 + -4.6101886166980410e+00 2.1285841238601524e+00 2.3525566914919818e+00 + -4.6723074209839535e+00 1.7514148495131274e+00 2.5613699430994403e+00 + -4.6580429147695463e+00 1.4553090810943246e+00 2.8734267489007368e+00 + -4.6057135443852246e+00 1.3364210325892800e+00 3.4390281756894314e+00 + id 14461 + loc 5.3780265152454376e-03 9.8932065069675446e-02 399 + blend 0.0000000000000000e+00 + interp 3.3023698761248282e-01:3.3023368524260671e-01:1.3644799167032307e-01:3.2080387020942508e-01:1.0007967229062722e+00:2.0678831537930598e-01:1.4931959587256096e+00:2.3726601441484088e-01:2.8380394062973875e+00:3.0923586975756001e-01:3.1419629138367546e+00 + CVs 20 + -1.0672912527558966e-01 3.1592382089793969e-01 1.4608559567027360e-01 + -2.6649573767870044e-01 6.5422617374218561e-01 3.2870142830690185e-01 + -4.7403496295641179e-01 1.0130300669152670e+00 5.1886612897866358e-01 + -7.1666528852045053e-01 1.3867542910124855e+00 7.2063143309424149e-01 + -9.7671616411390849e-01 1.7656774343436199e+00 9.5807572829317289e-01 + -1.2325387504569438e+00 2.1313712496968766e+00 1.2515169650307152e+00 + -1.4624443591336331e+00 2.4519515441527031e+00 1.6136050672746922e+00 + -1.6509419606985729e+00 2.6771595913981083e+00 2.0420171790892363e+00 + -1.8056097766247770e+00 2.7673784461771218e+00 2.5027544132303654e+00 + -1.9646346943782937e+00 2.7388113016511557e+00 2.9442348858444864e+00 + -2.1608754756281643e+00 2.6284830176938683e+00 3.3326074367293819e+00 + -2.3864184577182219e+00 2.4357851918563922e+00 3.6418737047023004e+00 + -2.6123234182427293e+00 2.1611609785442822e+00 3.8422787966127760e+00 + -2.8289382571994075e+00 1.8592342206220440e+00 3.9246442432043467e+00 + -3.0362033782930795e+00 1.5844180098119969e+00 3.9520467922496194e+00 + -3.2056114742882609e+00 1.3036383414640391e+00 4.0799879373403867e+00 + -3.2847612656177896e+00 9.6228435199096540e-01 4.4336191635192401e+00 + -3.2670037352054084e+00 6.5840952350953019e-01 4.9347941726904407e+00 + -3.3354988358731927e+00 5.6238513445435812e-01 5.3191507857361042e+00 + id 14462 + loc 1.1178280413150787e-01 2.5602696463465691e-02 1069 + blend 0.0000000000000000e+00 + interp 3.8278757884570191e-01:2.8937214318317112e-01:2.1686407987923095e-02:2.9347026589623099e-01:7.5183831039983617e-01:3.8278375096991346e-01:1.1318871392401491e+00:3.0916137578601866e-01:2.0001704415939185e+00:2.7060181580232745e-01:3.0508779026656088e+00 + CVs 20 + -2.6239142497398049e-01 1.9033632427398750e-01 3.4142706900928008e-02 + -5.0434147637604476e-01 3.8536241575735258e-01 7.5566696792994631e-02 + -7.1577600166636424e-01 5.9812642375540581e-01 1.4194723676569865e-01 + -8.9716843365225341e-01 8.2666178563961590e-01 2.2543106446090655e-01 + -1.0741851061460352e+00 1.0596382085475078e+00 2.8268475900518819e-01 + -1.2726038135888418e+00 1.2806018761191287e+00 2.7785525414041545e-01 + -1.5072060671274383e+00 1.4715372603165142e+00 2.0295388054846741e-01 + -1.7825698463890789e+00 1.6079775787419703e+00 4.5491981387602354e-02 + -2.0497427374420565e+00 1.6601415056768354e+00 -2.1235043723771119e-01 + -2.2171990579066305e+00 1.6264652753522113e+00 -5.4203811908520805e-01 + -2.2582715701124401e+00 1.5429303886433252e+00 -8.9251296659835322e-01 + -2.1984041401550058e+00 1.4299316437878118e+00 -1.2425926821197404e+00 + -2.0536581241213248e+00 1.2824751771205971e+00 -1.5545218616896135e+00 + -1.8526017491759041e+00 1.1185951381091181e+00 -1.7621505988063721e+00 + -1.6456026755947080e+00 9.7415520776227238e-01 -1.8651964758364972e+00 + -1.4708938813499886e+00 8.5135922351978144e-01 -1.9088574871727704e+00 + -1.3445411306189765e+00 7.2573884354264373e-01 -1.8764267040941394e+00 + -1.2534559071999452e+00 6.1120895011834286e-01 -1.8653402008123381e+00 + -1.3141224147172303e+00 8.1154062617445022e-01 -2.1675251395568953e+00 + id 14463 + loc 9.5452904701232910e-01 2.0493149757385254e-01 412 + blend 0.0000000000000000e+00 + interp 3.9838074385097122e-01:2.5642800281375222e-01:9.0940542595335239e-02:2.7749983552862534e-01:1.1654306183972136e+00:3.8552467288489123e-01:2.0666094843360208e+00:2.8756154421243224e-01:2.9746936616485220e+00:3.9837676004353273e-01:3.4933593881647931e+00 + CVs 20 + -6.8106286438931540e-01 1.9987831507774223e-01 1.9267861257303182e-01 + -1.1796384138339047e+00 3.1085270140966698e-01 3.4907606865725838e-01 + -1.6672733784579177e+00 4.0957528026625412e-01 4.8311722172560573e-01 + -2.1943183044510719e+00 5.0984003478124806e-01 5.9514776601374042e-01 + -2.7476362170588655e+00 5.7991473970808805e-01 7.0064279991822453e-01 + -3.3104685370044340e+00 5.8416241209554454e-01 8.3025703583506427e-01 + -3.8536177536419265e+00 4.9137996875758594e-01 1.0172394334621653e+00 + -4.3332455767415823e+00 2.8557354117622569e-01 1.2742999373639503e+00 + -4.7099117307739613e+00 -2.7048825039267754e-02 1.5806861552149631e+00 + -4.9547396124153318e+00 -4.1369444733242222e-01 1.8885568641742663e+00 + -5.0656545501906720e+00 -8.3955915256693836e-01 2.1610299364198142e+00 + -5.0711738707836602e+00 -1.3109076442795651e+00 2.4043598550539333e+00 + -5.0045989141920231e+00 -1.8277763732539858e+00 2.6466307971487750e+00 + -4.9031469933466729e+00 -2.3576604615024461e+00 2.9154668330094293e+00 + -4.8059611404730180e+00 -2.8666122954545870e+00 3.2300141953774770e+00 + -4.7431746241947099e+00 -3.3263750901410711e+00 3.6139772503404100e+00 + -4.7313118037924102e+00 -3.7397292401624678e+00 4.0811592839156843e+00 + -4.7876759364561092e+00 -4.1375277035622613e+00 4.6047596480136237e+00 + -4.9789987072312876e+00 -4.5371414163174171e+00 5.0924332624734747e+00 + id 14464 + loc 2.1288825571537018e-01 1.8014778196811676e-01 404 + blend 0.0000000000000000e+00 + interp 3.9232920795820275e-01:3.3245718052990814e-01:3.0193679012370922e-01:3.9232528466612321e-01:1.2867482618342529e+00:2.9512793529027415e-01:1.9959935561758257e+00:2.9939181864774161e-01:2.9823061254323475e+00:3.3347787226765985e-01:3.9194149497486541e+00 + CVs 20 + -1.0245356445014436e-01 1.7071120267925297e-01 -1.3227698808273960e-01 + -2.0397098651885776e-01 3.4787051363527405e-01 -2.6370251462072952e-01 + -2.8962322090762138e-01 5.2724941522840374e-01 -3.9497992319135594e-01 + -3.5862054574138269e-01 7.0999937162803839e-01 -5.2541427919264017e-01 + -4.1804053722011358e-01 9.0183371036412296e-01 -6.5353456725242043e-01 + -4.8044031392923719e-01 1.1119630712113540e+00 -7.7637190419135971e-01 + -5.5839586144997733e-01 1.3477058864300948e+00 -8.8687369430878149e-01 + -6.5795274372148094e-01 1.6086886216415159e+00 -9.7429729686908628e-01 + -7.8187086994983823e-01 1.8907713075274863e+00 -1.0277323358908481e+00 + -9.3258016821699996e-01 2.1888975565138624e+00 -1.0366922683479054e+00 + -1.1141300675877377e+00 2.4973103906451821e+00 -9.8888846959647259e-01 + -1.3249195390188782e+00 2.8022477117836759e+00 -8.7410631530847305e-01 + -1.5545669534413364e+00 3.0837866904877171e+00 -6.9276353149244130e-01 + -1.7772105772637889e+00 3.3211916055327078e+00 -4.6793245791216398e-01 + -1.9675282558378822e+00 3.5097538862633346e+00 -2.3228500359998927e-01 + -2.1312819725744685e+00 3.6648863229663284e+00 3.9505924613826515e-02 + -2.2702096027974958e+00 3.7896484260202317e+00 4.3108608654509784e-01 + -2.3554908527651124e+00 3.8481989686452658e+00 9.1830314885845898e-01 + -2.4152641614607067e+00 3.8675534138639183e+00 1.1088220689525661e+00 + id 14465 + loc 7.9866272211074829e-01 3.8031405210494995e-01 378 + blend 0.0000000000000000e+00 + interp 4.3744152122935892e-01:3.5813677447881953e-01:2.0257911498549208e-01:2.9526464492760213e-01:9.2447991942009167e-01:3.6574264185814359e-01:1.6344107197446440e+00:3.0069080515262697e-01:2.2212572223669014e+00:4.3743714681414664e-01:2.9251832367229764e+00:2.6975383309513085e-01:3.8899086572439066e+00 + CVs 20 + -3.9028128377264781e-01 3.7021605027408894e-01 -3.3816621315433101e-02 + -7.4884091994810786e-01 6.9672385419164895e-01 -5.4888658800064327e-02 + -1.1055340600390711e+00 9.8630855010873197e-01 -6.3695191580516231e-02 + -1.4687785411564771e+00 1.2499638505738955e+00 -6.9806353461698833e-02 + -1.8342040302081273e+00 1.4912291255830836e+00 -8.8380412427009891e-02 + -2.2030730855155567e+00 1.7042182390970335e+00 -1.3247049504725605e-01 + -2.5788735811861989e+00 1.8747423064205897e+00 -2.0936389227664404e-01 + -2.9589536223677331e+00 1.9891124717939963e+00 -3.1934445847814230e-01 + -3.3351221320999116e+00 2.0412879231892642e+00 -4.5710383427819512e-01 + -3.6978584455292722e+00 2.0318673446177966e+00 -6.1325404955286933e-01 + -4.0366184980851525e+00 1.9653462883823896e+00 -7.7195202735067414e-01 + -4.3405442589618364e+00 1.8504938897665710e+00 -9.1237714241683543e-01 + -4.6066156277597496e+00 1.6952952256383567e+00 -1.0202717140083299e+00 + -4.8490975048474905e+00 1.4894410229932538e+00 -1.0965356250183571e+00 + -5.0937386292687616e+00 1.2100100632383386e+00 -1.1502877122446171e+00 + -5.3661073429473500e+00 8.7316605305348416e-01 -1.1962271138530141e+00 + -5.6761460597438926e+00 5.4436296075795809e-01 -1.2450917689649939e+00 + -6.0098017179072531e+00 2.9175513603036007e-01 -1.2806271316690663e+00 + -6.3887638322769735e+00 1.1095793158568457e-01 -1.2886107215737421e+00 + id 14466 + loc 7.4128413200378418e-01 6.2759232521057129e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7836774057551618e-01:3.3162723171904740e-01:5.4676158379267004e-01:3.2377958042582328e-01:1.4220174257184621e+00:4.7836295689811043e-01:1.9999984919998979e+00:3.6676680815371815e-01:2.4998636037882136e+00:2.9362888564238310e-01:3.4905454196720682e+00 + CVs 20 + 5.4659426382371118e-02 3.6307479177639235e-01 -5.2624882367859754e-02 + 1.4243664954534876e-01 6.9956054929399381e-01 -1.2237003642512190e-01 + 2.4441607200591359e-01 1.0136903135539712e+00 -2.1303894275816188e-01 + 3.5388173853839577e-01 1.3024916149398096e+00 -3.2543361789616299e-01 + 4.7082716559218346e-01 1.5599101804000655e+00 -4.5985293909017200e-01 + 5.9308437199266018e-01 1.7783179714749198e+00 -6.1709298497526366e-01 + 7.1794686286246567e-01 1.9530426171895625e+00 -7.9888565603517736e-01 + 8.4288280370911295e-01 2.0843448961097586e+00 -1.0061316395046176e+00 + 9.6476795921944347e-01 2.1738593433659279e+00 -1.2373157714189225e+00 + 1.0805447142353248e+00 2.2228045247319201e+00 -1.4897819435223378e+00 + 1.1880999375626196e+00 2.2315866355091649e+00 -1.7611170549948167e+00 + 1.2863763965793988e+00 2.1993891805719517e+00 -2.0487167061115845e+00 + 1.3755499771131272e+00 2.1239745434259478e+00 -2.3491494204232053e+00 + 1.4573651620076111e+00 2.0015640194971942e+00 -2.6575879526218982e+00 + 1.5357587514085094e+00 1.8240472169276545e+00 -2.9683475182280259e+00 + 1.6162367518397265e+00 1.5636835019671456e+00 -3.2739587560516039e+00 + 1.6974590900801656e+00 1.1514751683765316e+00 -3.5277423302035809e+00 + 1.7604700201847665e+00 6.1632120089026543e-01 -3.5871566537283539e+00 + 1.8190684671224573e+00 3.1322389315400612e-01 -3.5517441219856893e+00 + id 14467 + loc 6.7327791452407837e-01 9.1239482164382935e-01 400 + blend 0.0000000000000000e+00 + interp 3.7628581599998451e-01:2.7811535599469517e-01:2.4742807188999649e-01:3.5273863391442506e-01:1.1298427048705846e+00:2.6553116594623050e-01:2.0058224714268702e+00:2.6818061766134910e-01:2.9983650622540456e+00:3.7628205314182450e-01:3.6965491550951550e+00 + CVs 20 + -2.8868454500315799e-01 2.7284587394507420e-01 -1.7955917699534321e-01 + -5.4251061083986374e-01 5.6594353975285094e-01 -3.7354908488685967e-01 + -7.8512233971108936e-01 8.7101476903699571e-01 -5.7946844825963462e-01 + -1.0369586380353930e+00 1.1742472326738906e+00 -7.8948203498131475e-01 + -1.3215685240700434e+00 1.4598529034097765e+00 -9.9506066392127202e-01 + -1.6611511807556540e+00 1.7123690074008857e+00 -1.1927361934304992e+00 + -2.0698375268089286e+00 1.9141368383214656e+00 -1.3870002631072533e+00 + -2.5494112149993517e+00 2.0415329517952090e+00 -1.5923421822924988e+00 + -3.0853777471953503e+00 2.0675998972535616e+00 -1.8346996952705843e+00 + -3.6457997099210271e+00 1.9596213998392580e+00 -2.1372067127685872e+00 + -4.1572969082443185e+00 1.7016779092761656e+00 -2.4882102443605345e+00 + -4.5488488049535079e+00 1.3672432027280399e+00 -2.8333892236672678e+00 + -4.8474023226910408e+00 1.0638194379837811e+00 -3.1298857543586820e+00 + -5.1139952578751604e+00 8.4021509855276344e-01 -3.3637818564808706e+00 + -5.3932019895815886e+00 6.8593459733932161e-01 -3.5366115361757213e+00 + -5.7391532455660244e+00 5.5277108094918370e-01 -3.6647156579771885e+00 + -6.1762577721673830e+00 3.9690782582245965e-01 -3.7701424261213941e+00 + -6.6732010520344707e+00 1.8809818329495442e-01 -3.8728054267120942e+00 + -7.1706238122256059e+00 -8.3994138014516828e-02 -3.9649242073930724e+00 + id 14468 + loc 2.3845294117927551e-01 6.2350875139236450e-01 401 + blend 0.0000000000000000e+00 + interp 3.8405926774385196e-01:3.2204688671042003e-01:3.1186476634109139e-01:3.7484976482846089e-01:9.9908438628430130e-01:3.2112538801288809e-01:1.6188840561820452e+00:3.1828888641908748e-01:2.2730751076241926e+00:3.1822232197606470e-01:3.0223522523237016e+00:3.8405542715117452e-01:3.6691111816991331e+00 + CVs 20 + -8.1947289122290504e-02 2.6523920760482722e-01 -2.5819085081074433e-01 + -1.8298338460195315e-01 5.2368711971911852e-01 -5.0067923155573169e-01 + -3.0372442578012904e-01 7.7166784157368462e-01 -7.5007287518518428e-01 + -4.4650118896109209e-01 9.9757518801656286e-01 -1.0148268887068168e+00 + -6.1337637289062030e-01 1.1850226672139306e+00 -1.2889417734053152e+00 + -8.0536927598737496e-01 1.3178575696489236e+00 -1.5574299487276777e+00 + -1.0230893207751182e+00 1.3870054695952885e+00 -1.8011059405716618e+00 + -1.2666107795685098e+00 1.3921337630567550e+00 -2.0078457232693800e+00 + -1.5334251100270049e+00 1.3368630009116580e+00 -2.1740651376693738e+00 + -1.8189146629308097e+00 1.2247433113790758e+00 -2.3028493249295456e+00 + -2.1148490277754162e+00 1.0574252072935861e+00 -2.4014874058536573e+00 + -2.4004334256922166e+00 8.3681921012239169e-01 -2.4737369956138324e+00 + -2.6434326853796244e+00 5.7184027888001454e-01 -2.5155684695656437e+00 + -2.8213469252417194e+00 2.9058258791520375e-01 -2.5156939549798492e+00 + -2.9377818680823689e+00 4.7063348756645973e-02 -2.4550295225080174e+00 + -3.0074623372379867e+00 -1.0788452661857251e-01 -2.3230182119107656e+00 + -3.0519432513400777e+00 -1.4900386604893789e-01 -2.1330758994352892e+00 + -3.0920843039412409e+00 -8.7341868705057557e-02 -1.9154499396286666e+00 + -3.4132797135163839e+00 -2.8863364751092302e-01 -1.7099272750986909e+00 + id 14469 + loc 3.3224862813949585e-01 8.3512908220291138e-01 393 + blend 0.0000000000000000e+00 + interp 4.6739453837490363e-01:3.7060422093569606e-01:2.4015981372491668e-01:3.0555146261084914e-01:1.0298856230587579e+00:4.6738986442951991e-01:1.7400409536465860e+00:3.0871464488307809e-01:2.1191409940887045e+00:2.9843646590637185e-01:3.1741824828053380e+00:3.7400699454645697e-01:3.9235826873973698e+00 + CVs 20 + -2.7746386037545356e-01 2.7898771221275526e-01 -1.2526930623805518e-01 + -5.5304002889333881e-01 5.4793515446371499e-01 -2.3492150807732615e-01 + -8.1146653083347264e-01 8.1557116323734546e-01 -3.3473184595238947e-01 + -1.0391078418927906e+00 1.0799261963974924e+00 -4.2212556821737524e-01 + -1.2354128787166818e+00 1.3413274352747164e+00 -4.9186685287450166e-01 + -1.4072454209619885e+00 1.6083703215894651e+00 -5.4265989870955789e-01 + -1.5675967871923950e+00 1.8986426839162520e+00 -5.7400242556518000e-01 + -1.7484697401620743e+00 2.2296108575401172e+00 -5.8619242407244587e-01 + -2.0164468086377276e+00 2.5840227018198845e+00 -5.8538065345399670e-01 + -2.4266809566586960e+00 2.8999454684050501e+00 -5.9023189484355099e-01 + -2.9602493841747166e+00 3.1412332515140906e+00 -6.4187800044416443e-01 + -3.5557390535910520e+00 3.3122953580568164e+00 -7.8391202325358733e-01 + -4.1738251462607723e+00 3.3905523486893330e+00 -1.0204494573984766e+00 + -4.7924703508578599e+00 3.3165278255092376e+00 -1.3179071079813827e+00 + -5.3471904091775047e+00 3.0702751911062034e+00 -1.6418530212359235e+00 + -5.7442527114195681e+00 2.7176168659817974e+00 -1.9547673655769513e+00 + -5.9645595015925874e+00 2.3420899374032405e+00 -2.2035016593795613e+00 + -6.1099257149621042e+00 1.9358301163096552e+00 -2.3470074335383697e+00 + -6.3713423591638580e+00 1.3553173328377479e+00 -2.3505290606603810e+00 + id 14470 + loc 6.5695041418075562e-01 4.1513839364051819e-01 399 + blend 0.0000000000000000e+00 + interp 4.4614574287623132e-01:3.2965622477175605e-01:1.2763201349113029e-01:3.1199412326902404e-01:9.3146306896328224e-01:3.0207213920302195e-01:1.5409884146421611e+00:3.1785184942570871e-01:2.0495879497416101e+00:4.2866109586440160e-01:2.6005744063888052e+00:4.4614128141880260e-01:2.9986014429948407e+00:2.9503128390358518e-01:3.5788317565552683e+00 + CVs 20 + 9.4643565120422157e-02 2.6509822204560229e-01 2.2036621498071313e-01 + 1.8876570269829807e-01 5.2464493289673131e-01 4.2673415321759839e-01 + 2.6603097031469558e-01 7.7638384357198842e-01 6.4814348353178330e-01 + 3.2498682878727730e-01 1.0250897346998693e+00 9.0047527473041755e-01 + 3.7636043285384246e-01 1.2765238496735458e+00 1.1822018684844420e+00 + 4.3176052531406706e-01 1.5341939987509279e+00 1.4908516012258590e+00 + 5.0122882082968012e-01 1.7967715414850529e+00 1.8302673636232079e+00 + 5.9660332355972812e-01 2.0567362802852536e+00 2.2099389482975855e+00 + 7.3437417682793138e-01 2.2944400649737089e+00 2.6426624621430754e+00 + 9.3273456413248268e-01 2.4700519499457472e+00 3.1391702683065343e+00 + 1.2012955723976595e+00 2.5232581252459294e+00 3.6852829792137562e+00 + 1.5235212613178621e+00 2.4190602530058678e+00 4.2182284283933171e+00 + 1.8650450657049620e+00 2.2010044304961349e+00 4.6729848032612482e+00 + 2.1891638148538468e+00 1.9676648328096691e+00 5.0300601832682910e+00 + 2.4560080740541830e+00 1.8229166067484450e+00 5.3052151889743246e+00 + 2.6326443527707371e+00 1.8133417698689325e+00 5.5217863725857415e+00 + 2.6902388638811527e+00 1.9295428952211968e+00 5.6735180395056188e+00 + 2.6668282268257446e+00 2.0983250602141155e+00 5.7848169575074353e+00 + 2.7406868178885220e+00 2.1413466183164402e+00 6.2362381574348689e+00 + id 14471 + loc 7.2663944959640503e-01 7.9888248443603516e-01 412 + blend 0.0000000000000000e+00 + interp 3.6557965779074125e-01:2.5729507145326141e-01:7.6240555021170386e-01:2.9219126055679717e-01:1.6763042468578231e+00:3.6295823043347925e-01:2.1150427397838385e+00:2.8608803681871531e-01:3.0000416387147180e+00:3.6557600199416335e-01:3.9815864458880443e+00 + CVs 20 + 7.1771056165506408e-01 2.5625110966361431e-01 -9.3050790250013837e-02 + 1.1785850375339813e+00 4.0013192426760225e-01 -1.5122722160948826e-01 + 1.5734669258213956e+00 4.9415695146121924e-01 -2.0206379781608544e-01 + 2.0063990525803050e+00 5.7456447032333124e-01 -2.5218709746843815e-01 + 2.4707510211384318e+00 6.3431095199427412e-01 -3.0020264036151428e-01 + 2.9563350812821612e+00 6.6859954659021203e-01 -3.4083003434848347e-01 + 3.4559739464615999e+00 6.7628493482573382e-01 -3.6491977237619710e-01 + 3.9632542312139156e+00 6.5762543602892087e-01 -3.6447871422699502e-01 + 4.4671309925947167e+00 6.1363660525024943e-01 -3.3689338516416006e-01 + 4.9640129570173430e+00 5.4490819335184726e-01 -2.8464992964767893e-01 + 5.4906566263436698e+00 4.3796958502102223e-01 -2.0878162442251019e-01 + 6.1027783161994069e+00 2.4207210638580912e-01 -1.2403555119031034e-01 + 6.7751873182293814e+00 -9.7754797922224856e-02 -8.4148031196539852e-02 + 7.4211138264876233e+00 -5.7440623365131960e-01 -1.3813265391051571e-01 + 7.9959966826469318e+00 -1.1541494632673781e+00 -2.9807625864428289e-01 + 8.4814731726638506e+00 -1.8074764882863033e+00 -5.6671428633576204e-01 + 8.8563421906120823e+00 -2.4876188078164057e+00 -9.3936684998279851e-01 + 9.1147789292415702e+00 -3.1246715684013115e+00 -1.3739641983662092e+00 + 9.3168711973827580e+00 -3.5867121733139662e+00 -1.7207976703352998e+00 + id 14472 + loc 4.1692787408828735e-01 3.4826534986495972e-01 404 + blend 0.0000000000000000e+00 + interp 4.3889779439882931e-01:3.0190323838406286e-01:7.3517219956157354e-01:3.0149136535295212e-01:1.1174476247324321e+00:4.3889340542088534e-01:1.6887787248465813e+00:3.7386116691789500e-01:2.1706155604828918e+00:3.4956527113913871e-01:3.0159840702613940e+00:4.2951437758534561e-01:3.9772052243527365e+00 + CVs 20 + -1.4630470597360162e-01 7.0904585440220255e-02 3.3953109808133798e-02 + -2.9710259879361045e-01 1.2804986546848793e-01 8.1842680861934081e-02 + -4.6451540806353403e-01 1.9048190254940406e-01 1.2416061859141597e-01 + -6.4375022875595489e-01 2.5847397851826354e-01 1.5069220031004210e-01 + -8.2432779586179605e-01 3.2666370290832025e-01 1.6144797981233094e-01 + -9.8894135540199923e-01 3.8548973635139427e-01 1.5919063124016786e-01 + -1.1243394755305725e+00 4.2734968609213908e-01 1.4616966318182956e-01 + -1.2260205264017101e+00 4.5149875185760524e-01 1.2174151807690875e-01 + -1.2893738098035223e+00 4.5910015941007920e-01 8.1209563643378724e-02 + -1.3156550280971646e+00 4.5886248184695377e-01 1.8050017308257060e-02 + -1.3139748043399260e+00 4.6190389975397272e-01 -7.5638105766093311e-02 + -1.3174312142949272e+00 4.8090299981261136e-01 -1.9742594078900771e-01 + -1.3707196494053477e+00 5.2019487425407884e-01 -3.2651690719563914e-01 + -1.5067892755512615e+00 5.6776921984034445e-01 -4.3521679952932318e-01 + -1.7260592828546206e+00 6.1560827603420498e-01 -5.0133831759196856e-01 + -1.9888238518063155e+00 6.7578741977356871e-01 -5.2063012012279952e-01 + -2.2548351666783812e+00 7.6024481584959025e-01 -5.0140449652195340e-01 + -2.5176155976925503e+00 8.4959546907466965e-01 -4.1471732357029695e-01 + -2.7442158922735382e+00 8.8375523094822239e-01 -1.8078369949220763e-01 + id 14473 + loc 8.8557857275009155e-01 2.0752541720867157e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9589012090920278e-01:2.7300714092105166e-01:2.2621676627651655e-01:2.3168552660986724e-01:9.7525629516473722e-01:2.7374412811868204e-01:1.8276606328008689e+00:2.4498055600010721e-01:2.9228593569241386e+00:3.9588616200799370e-01:3.5115537095531053e+00 + CVs 20 + -5.7354403537908868e-02 2.1416584075468165e-01 2.7119214860135921e-01 + -1.4970381672367339e-01 3.8473335766394656e-01 5.1110579245269905e-01 + -2.7278973689554742e-01 5.2858261728166567e-01 7.2890905338798717e-01 + -4.2563854958429659e-01 6.5524436939255426e-01 9.2445987657855633e-01 + -6.2991607451924525e-01 7.7478273292659050e-01 1.0937317879339938e+00 + -9.0547907943757622e-01 9.2041796093014550e-01 1.2390385530266734e+00 + -1.2177072922348238e+00 1.1502413610182363e+00 1.3678407295603057e+00 + -1.4812455219784724e+00 1.4852874093700617e+00 1.4838169651170932e+00 + -1.6496112369862366e+00 1.8985815539319235e+00 1.5950993458335474e+00 + -1.7117798882060011e+00 2.3685808942765236e+00 1.7342442797087481e+00 + -1.6441968765229671e+00 2.8546728150326350e+00 1.9683634738490914e+00 + -1.4416252237093403e+00 3.2456469885266808e+00 2.3458218626784628e+00 + -1.1495070515314323e+00 3.4523195420419319e+00 2.8326832931766734e+00 + -8.2396630367554646e-01 3.4615189231604586e+00 3.3563972341202657e+00 + -5.1923930369571747e-01 3.3063405321420261e+00 3.8507767222045000e+00 + -2.6186813089192729e-01 3.0120452350660334e+00 4.3079761124958100e+00 + -7.7140168161211387e-02 2.5371835877615734e+00 4.7409318620847447e+00 + -3.0753911966213465e-02 1.8693277979569998e+00 5.0803078112800550e+00 + -6.7906060172054472e-02 1.5861547544918664e+00 5.1924869548668093e+00 + id 14474 + loc 3.9978331327438354e-01 8.7965124845504761e-01 401 + blend 0.0000000000000000e+00 + interp 4.6203114670759682e-01:3.5559540210855450e-01:1.2104026066493223e-01:4.6202652639612979e-01:9.8011563315432282e-01:3.1001671043486689e-01:1.2529251137857487e+00:3.3699167065622565e-01:2.0133887092160268e+00:3.8503267523745016e-01:2.8615275884008264e+00:3.0758087599836736e-01:3.5062113362012792e+00 + CVs 20 + -9.2407330089497364e-02 3.1174334012176808e-01 -1.7133376601393430e-01 + -1.9649987195074969e-01 6.3798669921036355e-01 -3.6954711255968176e-01 + -3.0918324531836960e-01 9.7856326104132629e-01 -5.9485811464467420e-01 + -4.2490538967596397e-01 1.3187272112933937e+00 -8.5647152105496172e-01 + -5.3929485563631618e-01 1.6197565408262602e+00 -1.1529587878032348e+00 + -6.6144857705497562e-01 1.8475106649472040e+00 -1.4552256939897033e+00 + -8.0917445955066047e-01 1.9965712275842389e+00 -1.7334629841674958e+00 + -9.9244918287911332e-01 2.0733425440259894e+00 -1.9726746298887472e+00 + -1.2124870807252321e+00 2.0803351050127201e+00 -2.1669798657412498e+00 + -1.4726029906969909e+00 2.0175875637720662e+00 -2.3178683689679240e+00 + -1.7742853889516583e+00 1.8819953988405274e+00 -2.4286332265719310e+00 + -2.1078381415683891e+00 1.6647737206423414e+00 -2.5101318042799670e+00 + -2.4420066990169698e+00 1.3602302186167989e+00 -2.5775773794944010e+00 + -2.7447107091976819e+00 9.8658363517656256e-01 -2.6308123066144655e+00 + -3.0413796413181649e+00 5.6024937474139413e-01 -2.6789196285005912e+00 + -3.4143599925177455e+00 5.7784307689993986e-02 -2.8154303685240372e+00 + -3.8813364835428961e+00 -4.9413505345799447e-01 -3.2038809928881884e+00 + -4.2973356245582242e+00 -9.5302863043741470e-01 -3.8081422638629108e+00 + -4.5626811794798376e+00 -1.3051117092420397e+00 -4.1433659356210830e+00 + id 14475 + loc 2.2302223369479179e-02 6.9536507129669189e-01 378 + blend 0.0000000000000000e+00 + interp 4.0015400139045748e-01:2.8260959047821405e-01:4.1490482158602626e-03:3.4338091787773400e-01:5.8182698986441839e-01:2.5516115652748184e-01:1.0145098033130648e+00:4.0014999985044358e-01:1.4871071006268419e+00:3.9072337237430577e-01:1.9764593806411268e+00:2.4308425205526013e-01:2.2730113040352569e+00:3.3349573696865059e-01:3.0000134185116485e+00 + CVs 20 + 6.0416996394639744e-01 3.3557512279380758e-01 2.6883138091620995e-01 + 1.1312103425050715e+00 5.7107740351308445e-01 4.3942783473042579e-01 + 1.6532758874128923e+00 7.5220458678014079e-01 5.8969352994674573e-01 + 2.2063615526275790e+00 9.0574774424917615e-01 7.7195690653748850e-01 + 2.7824696527324102e+00 1.0256266220448857e+00 1.0148023520907503e+00 + 3.3622622290113782e+00 1.0874813272834909e+00 1.3356560212113504e+00 + 3.9226683000237959e+00 1.0596526641595658e+00 1.7376066533653836e+00 + 4.4341535537039247e+00 9.1871140676996088e-01 2.2083643507731425e+00 + 4.8639352773789266e+00 6.5642573337558163e-01 2.7150425238147928e+00 + 5.1890852666999852e+00 2.7979951505667255e-01 3.2055774543593758e+00 + 5.3938412834661378e+00 -1.9467611822054876e-01 3.6246490543773406e+00 + 5.4566205553619564e+00 -7.3797708235510084e-01 3.9274593480251028e+00 + 5.3726696386821331e+00 -1.2971682735844214e+00 4.1018420272420819e+00 + 5.2053334443341992e+00 -1.8255120980502206e+00 4.2157342074600361e+00 + 5.0659932310720368e+00 -2.3388127435409167e+00 4.3948994389199108e+00 + 5.0362636503981779e+00 -2.8654019521701022e+00 4.6923962029045603e+00 + 5.1825584374525064e+00 -3.4022633272795995e+00 5.0506810641372351e+00 + 5.5288136478375147e+00 -3.9210425404889935e+00 5.3774255551906878e+00 + 5.6185806966666760e+00 -4.2956253475050685e+00 5.6509140878043329e+00 + id 14476 + loc 2.7110281586647034e-01 9.5525348186492920e-01 1079 + blend 0.0000000000000000e+00 + interp 5.6020309995882545e-01:5.1070778971328834e-01:1.3300741489051804e-02:5.6019749792782592e-01:5.8203780365652058e-01:4.7736593802316174e-01:1.0130903915381344e+00:2.7029573135053808e-01:1.6461233914054676e+00:3.5253735628913274e-01:2.1927057550285753e+00:3.5033424443735806e-01:2.9307287409632785e+00:3.4956674268566623e-01:3.3776526327357539e+00 + CVs 20 + 1.2928395084836847e-01 4.0075674383633464e-01 1.5204535955306897e-01 + 2.7704253774933968e-01 7.5980180380774653e-01 2.4063123301479622e-01 + 4.4008293047393343e-01 1.1046140007108294e+00 3.0491773945381556e-01 + 6.1948233829682620e-01 1.4419365862370275e+00 3.5588972507930061e-01 + 8.1863871968760682e-01 1.7635120473925936e+00 3.8319280751532792e-01 + 1.0409010734171298e+00 2.0580899605151970e+00 3.6858275089611514e-01 + 1.2849829690659353e+00 2.3106073561266198e+00 2.9249011582929596e-01 + 1.5418258606708357e+00 2.5056366219114810e+00 1.4718606307104964e-01 + 1.7987926848015587e+00 2.6309643245764924e+00 -6.1551493003908941e-02 + 2.0439736121754235e+00 2.6806608704295618e+00 -3.1884214983887538e-01 + 2.2692349361761517e+00 2.6573640675033601e+00 -6.0647408425069194e-01 + 2.4710917739912439e+00 2.5701519414026142e+00 -9.0903387506689104e-01 + 2.6497772872635497e+00 2.4301171277223550e+00 -1.2156669216009022e+00 + 2.8079512051975777e+00 2.2456731060901856e+00 -1.5189062636029020e+00 + 2.9495271830781262e+00 2.0074859096704407e+00 -1.8140308994197516e+00 + 3.0772348570839121e+00 1.6543084288857939e+00 -2.0853389773239854e+00 + 3.1821447308649002e+00 1.1066799731587180e+00 -2.2459905424662066e+00 + 3.2401628282813735e+00 4.9898946913213726e-01 -2.2182148462000475e+00 + 3.2587537088014913e+00 1.7998944389560823e-01 -2.2688016975966505e+00 + id 14477 + loc 1.8255271017551422e-01 6.6948676109313965e-01 412 + blend 0.0000000000000000e+00 + interp 3.1108075677217961e-01:2.8264114556942199e-01:5.3897267176305730e-01:2.7336345401479650e-01:1.1468044116088221e+00:3.1107764596461190e-01:1.9753474008684448e+00:2.4779586512956009e-01:2.9069045282523089e+00:2.9398156198546960e-01:3.7107180195728660e+00 + CVs 20 + 7.0850040467660780e-01 2.2309610322892276e-01 -1.1870529981284619e-01 + 1.1912987374705839e+00 3.2526827638850581e-01 -2.4548982244599651e-01 + 1.6302117909616203e+00 3.8302096340566927e-01 -3.7130532774602465e-01 + 2.1076386422469517e+00 4.2601931180704644e-01 -4.9249696495195372e-01 + 2.6140911426300684e+00 4.4247364879814310e-01 -6.0207382725517267e-01 + 3.1370264068123785e+00 4.2412939038545694e-01 -6.9016742891129368e-01 + 3.6624068951476154e+00 3.6753838807022055e-01 -7.4733731355501476e-01 + 4.1753346225598698e+00 2.7377106766804060e-01 -7.6913256307234090e-01 + 4.6621339176316932e+00 1.4899051932278806e-01 -7.5573454890937874e-01 + 5.1125871255119009e+00 1.9353252109928221e-03 -7.1051924259807941e-01 + 5.5186547174274025e+00 -1.6612868837281414e-01 -6.4566581921970378e-01 + 5.8735369776169657e+00 -3.6093412261474911e-01 -5.8757095600629439e-01 + 6.1744726015112770e+00 -5.8426509900116419e-01 -5.5863106416893671e-01 + 6.4290099120554016e+00 -8.3285571146554993e-01 -5.6041655832464232e-01 + 6.6442425649437116e+00 -1.1019228514100545e+00 -5.8871731542449290e-01 + 6.8200377308041800e+00 -1.3783171908034288e+00 -6.3417727273013413e-01 + 6.9598662558125604e+00 -1.6494481883713299e+00 -6.8413855418089031e-01 + 7.0735030355676143e+00 -1.9125992542647792e+00 -7.3205171228226540e-01 + 7.1747268555082524e+00 -2.1769493355600340e+00 -7.7884224597330731e-01 + id 14478 + loc 6.9343143701553345e-01 4.9268296360969543e-01 399 + blend 0.0000000000000000e+00 + interp 4.2105498875390057e-01:4.2105077820401304e-01:5.8492002528322651e-01:2.9116960514369178e-01:1.6014297574137586e+00:3.2965622477175605e-01:2.1262442963823998e+00:3.2027986195237285e-01:2.9311340961535026e+00:3.0796599160952515e-01:3.9181736997558616e+00 + CVs 20 + 1.1203816452530876e-01 2.9074316362839076e-01 2.2619978624529188e-01 + 2.3731412379737943e-01 5.6985019034390638e-01 4.5162102301087087e-01 + 3.5058206767965688e-01 8.3033926324761964e-01 7.0500295497423404e-01 + 4.4843255051489228e-01 1.0716835412906083e+00 9.9013287809711414e-01 + 5.4255875932506892e-01 1.2983021800368044e+00 1.2949027860443569e+00 + 6.4397171314858770e-01 1.5137074350787447e+00 1.6079686914938229e+00 + 7.6001869222805518e-01 1.7171268627882967e+00 1.9227140117386030e+00 + 8.9558307484967403e-01 1.9050392079482501e+00 2.2359639002692075e+00 + 1.0565086755591093e+00 2.0767252848035889e+00 2.5487445535675182e+00 + 1.2503339549847163e+00 2.2264983823637938e+00 2.8721178015372208e+00 + 1.4825464562409638e+00 2.3323110979171582e+00 3.2161678483236829e+00 + 1.7483845758895862e+00 2.3647402758066960e+00 3.5623666079844813e+00 + 2.0335593348853780e+00 2.3243933159009922e+00 3.8711337936668104e+00 + 2.3195760938897680e+00 2.2447586838950562e+00 4.1115280886281118e+00 + 2.5902989138798120e+00 2.1632197987200228e+00 4.2703573943818665e+00 + 2.8695230365470845e+00 2.0799470179740651e+00 4.3793197264181041e+00 + 3.2074960989878525e+00 1.9690311013585582e+00 4.5365330725634410e+00 + 3.5342765791978961e+00 1.8838548223385660e+00 4.8627581859069124e+00 + 3.6422965776019613e+00 1.9750507323621029e+00 5.2751837327175624e+00 + id 14479 + loc 4.0700909495353699e-01 8.8833338022232056e-01 400 + blend 0.0000000000000000e+00 + interp 3.0050608076885771e-01:2.8724819198201623e-01:5.6370548697887668e-01:2.7292599680534840e-01:1.0824102709839538e+00:2.6993756169647959e-01:2.0601392353934367e+00:3.0050307570805002e-01:3.0294448521575728e+00:2.5958058505937953e-01:3.9829478346994236e+00 + CVs 20 + -2.0342162642037775e-01 2.8142828901048528e-01 -7.0930115487005035e-02 + -4.3423198925831674e-01 5.7439980885189013e-01 -1.5204028681324025e-01 + -6.7086590114704636e-01 8.8455223615176182e-01 -2.7835717776534774e-01 + -8.9643460113791362e-01 1.1946337659116302e+00 -4.6354703038864009e-01 + -1.1129411079380389e+00 1.4878276487973936e+00 -7.0738800546508307e-01 + -1.3206124872923126e+00 1.7531625555093209e+00 -1.0107363788941448e+00 + -1.5126754516439280e+00 1.9826374643537370e+00 -1.3759479702679416e+00 + -1.6777064018121337e+00 2.1665874836444270e+00 -1.8037571620558350e+00 + -1.8021340694469963e+00 2.2934420135948530e+00 -2.2906278215696325e+00 + -1.8709436667195689e+00 2.3530523004705435e+00 -2.8238126956724283e+00 + -1.8735441698931465e+00 2.3404344324299244e+00 -3.3709739396269689e+00 + -1.8194924773803298e+00 2.2620314563261781e+00 -3.8894483120521048e+00 + -1.7388761037917657e+00 2.1325909463579524e+00 -4.3548217873416677e+00 + -1.6640334247139363e+00 1.9632711655328872e+00 -4.7607830297791711e+00 + -1.6180860525602490e+00 1.7601823797814182e+00 -5.0984337115124063e+00 + -1.6113770393561606e+00 1.5311022296484653e+00 -5.3631123648725980e+00 + -1.6479689778708930e+00 1.2836948608048286e+00 -5.5682885616666908e+00 + -1.7326429564235004e+00 1.0191384778413111e+00 -5.7358154180941030e+00 + -1.8814093358247606e+00 6.7267226987592021e-01 -5.9484661119323166e+00 + id 14480 + loc 6.5496402978897095e-01 2.5194695591926575e-01 393 + blend 0.0000000000000000e+00 + interp 4.7515644291045306e-01:3.1044591889559109e-01:9.0741812549181011e-02:3.2341330555864473e-01:1.2526245896397306e+00:4.1815517003270641e-01:2.0047779361165152e+00:2.9620810821858606e-01:2.8438415702959956e+00:4.7515169134602397e-01:3.3483761579263369e+00 + CVs 20 + 2.5204590371833857e-01 3.4130220044315790e-01 1.9015195068898783e-01 + 4.9437707239449058e-01 6.9181718185027274e-01 3.8259414185864460e-01 + 7.1313193032879518e-01 1.0626976251619413e+00 5.8114978263691208e-01 + 9.0137694859761353e-01 1.4381859242681687e+00 8.0081156779916296e-01 + 1.0647571041234793e+00 1.7885858647039741e+00 1.0728665718381551e+00 + 1.2089284549060593e+00 2.1015175400957706e+00 1.4231349769275539e+00 + 1.3344584236421713e+00 2.3835279737821278e+00 1.8596839190085683e+00 + 1.4538705549441022e+00 2.6376579236054969e+00 2.3803529620868749e+00 + 1.5965798087722916e+00 2.8503082285728865e+00 2.9719559519499423e+00 + 1.7935557890101834e+00 2.9957728001313026e+00 3.6089338637211985e+00 + 2.0628365577971941e+00 3.0457291039000558e+00 4.2561009301784649e+00 + 2.4028981049911966e+00 2.9788356906694702e+00 4.8752343985319744e+00 + 2.7989127981552344e+00 2.7844709344589043e+00 5.4354304349535791e+00 + 3.2399844467238061e+00 2.4557360986148895e+00 5.9046781298940809e+00 + 3.7183796071264936e+00 2.0084902959355548e+00 6.2362747803055374e+00 + 4.2131194086157171e+00 1.5282795710826185e+00 6.3959711469417506e+00 + 4.6832891972557888e+00 1.1295420553643880e+00 6.4206822737933864e+00 + 5.1083283869121425e+00 8.4753761254294124e-01 6.3918767997018930e+00 + 5.4654517106902336e+00 7.1503101994925089e-01 6.3661790475052449e+00 + id 14481 + loc 5.8783918619155884e-01 2.3592934012413025e-01 404 + blend 0.0000000000000000e+00 + interp 4.0105379975265559e-01:2.8008740722528785e-01:3.4153636686308864e-01:3.0513295924372080e-01:9.9963464488902953e-01:2.8940557474988216e-01:1.9406318006039078e+00:3.3731560866601945e-01:2.4202214594039062e+00:3.0674144093023975e-01:3.0739680765245443e+00:4.0104978921465806e-01:3.9979173016825111e+00 + CVs 20 + -3.4630534230589247e-02 2.3372208841158493e-01 1.8161108363124950e-01 + -6.4948201963236724e-02 4.5940743365243042e-01 3.5315762376123072e-01 + -1.0533698354987253e-01 6.8704137184169967e-01 5.2806474820437299e-01 + -1.5867627859927275e-01 9.1989622442841879e-01 7.1240250039855701e-01 + -2.2009046398911264e-01 1.1546316636601184e+00 9.0778029198623544e-01 + -2.7935983900529870e-01 1.3848151085949392e+00 1.1173395630766441e+00 + -3.2150938214682312e-01 1.6011235208904933e+00 1.3423607603689425e+00 + -3.3188758529877360e-01 1.7937515567320657e+00 1.5788626526390637e+00 + -2.9881622868925151e-01 1.9534902858110617e+00 1.8163427849715501e+00 + -2.1794843685818743e-01 2.0733718069105214e+00 2.0432034215628097e+00 + -9.2695494448390869e-02 2.1483424750741720e+00 2.2491237379791187e+00 + 6.4035344945071238e-02 2.1794401605278808e+00 2.4225013518498657e+00 + 2.3184549758615502e-01 2.1762068418007621e+00 2.5640878765425583e+00 + 3.9205238311599055e-01 2.1530670957978599e+00 2.6687797687973149e+00 + 5.2827973264769446e-01 2.1238890421435048e+00 2.7276088241726009e+00 + 6.3577602547969270e-01 2.0878727462831068e+00 2.7529709674605178e+00 + 7.3116845141250053e-01 2.0316784491979281e+00 2.7759848149408226e+00 + 8.2610603464549937e-01 1.9553211350285236e+00 2.8126992037489673e+00 + 9.3437342261275247e-01 1.8875635173839531e+00 2.9001154867133532e+00 + id 14482 + loc 1.1924482882022858e-01 6.2096279859542847e-01 401 + blend 0.0000000000000000e+00 + interp 4.0921099862582999e-01:3.1851492578521778e-01:9.0048240467372143e-02:3.4446609313460563e-01:9.1540940421576578e-01:4.0920690651584374e-01:1.4410088073871681e+00:3.1747365132380873e-01:2.3056934783933003e+00:3.7484976482846089e-01:2.9988788715188330e+00:3.2152389969138417e-01:3.6298896626809194e+00 + CVs 20 + -4.6320444970388966e-02 2.6797358740407551e-01 -2.9379757613776375e-01 + -1.1333910115191739e-01 5.1782632325397526e-01 -5.7931026490849813e-01 + -2.0379981045160173e-01 7.4258792705540477e-01 -8.6799638119477551e-01 + -3.1953927984542596e-01 9.3136623546585595e-01 -1.1602571199901164e+00 + -4.6035205296084375e-01 1.0720100628187896e+00 -1.4466414339385447e+00 + -6.2323594541466343e-01 1.1563834227957144e+00 -1.7124039906872512e+00 + -8.0273200728168081e-01 1.1841893289663541e+00 -1.9438313384000512e+00 + -9.9203201321730661e-01 1.1620905590651804e+00 -2.1353167089855716e+00 + -1.1833119216377965e+00 1.0993377895262084e+00 -2.2876359667080686e+00 + -1.3704343850230158e+00 1.0042935891659606e+00 -2.4062691624938042e+00 + -1.5463995961398611e+00 8.8278511814848404e-01 -2.4988417586100060e+00 + -1.6976928608459179e+00 7.4363741204719558e-01 -2.5704813526787968e+00 + -1.8147836324076001e+00 6.0036433813596679e-01 -2.6259795619753192e+00 + -1.9059277787245068e+00 4.5379187839682616e-01 -2.6734553990771306e+00 + -1.9878695542194269e+00 2.9764267434425701e-01 -2.7107513480290546e+00 + -2.0936366097652166e+00 1.1665051138113991e-01 -2.7074308902585771e+00 + -2.2017030293836384e+00 -4.9158624912937321e-02 -2.6625107748624370e+00 + -2.3030926558555107e+00 -1.6268386136345780e-01 -2.5696334048310763e+00 + -2.4841009822032780e+00 -2.4144381768107182e-01 -2.2375677277812187e+00 + id 14483 + loc 7.5423866510391235e-01 8.7874603271484375e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4282879893679011e-01:3.1602673803841058e-01:2.0507190983852430e-01:3.0240874208060303e-01:9.7649465888043130e-01:2.6528495206992914e-01:1.6990864791613283e+00:4.4282437064880076e-01:2.6412926058149395e+00:2.7875057763701572e-01:3.1362707163803361e+00 + CVs 20 + 2.2479609988929403e-01 3.2131077058282759e-01 -1.6554722596452848e-01 + 4.5082622954351215e-01 6.5548652374262018e-01 -3.4870669559212331e-01 + 6.9858534957641383e-01 9.6676786109196866e-01 -5.1046377951287947e-01 + 9.7295787656965294e-01 1.2211614812013867e+00 -6.4478436466361022e-01 + 1.2630363916757694e+00 1.4043137188358190e+00 -7.6656943594499427e-01 + 1.5426505010188232e+00 1.5122868779531775e+00 -8.9273991086503846e-01 + 1.7879685717839644e+00 1.5485720732146362e+00 -1.0297224740903699e+00 + 2.0036793417695518e+00 1.5245720154417186e+00 -1.1738680514052433e+00 + 2.2168967516182709e+00 1.4420955770645953e+00 -1.3212903122020778e+00 + 2.4497505731636902e+00 1.2829595047340152e+00 -1.4671173523394874e+00 + 2.7053328921784887e+00 1.0147357999295368e+00 -1.5973174366858298e+00 + 2.9606912142432020e+00 6.0789342982888006e-01 -1.6803773617668918e+00 + 3.1738100555088242e+00 5.7353953426791893e-02 -1.6622131249050225e+00 + 3.3179245267426931e+00 -5.9385468978148936e-01 -1.4796771814979368e+00 + 3.4278991080872245e+00 -1.2523379285443488e+00 -1.0882793823228005e+00 + 3.5826717281746281e+00 -1.8081570241567677e+00 -4.7520740701746378e-01 + 3.8383048022128232e+00 -2.1415859995163125e+00 2.9487375263877413e-01 + 4.1654101138083686e+00 -2.2025808735436878e+00 1.0265726231110042e+00 + 4.4446240832583497e+00 -2.1121541209491967e+00 1.4404757787589140e+00 + id 14484 + loc 4.9855217337608337e-01 5.0416880846023560e-01 378 + blend 0.0000000000000000e+00 + interp 4.4684769603492863e-01:2.8028290008435219e-01:8.8524733941396871e-01:4.4684322755796829e-01:1.4734364990637387e+00:2.7949484757771081e-01:2.1112853972485000e+00:3.5874288189728804e-01:2.9091425235234794e+00:2.6734158539563085e-01:3.5604515756007267e+00 + CVs 20 + 4.5800746918927454e-01 3.3718171560033816e-01 1.1869730203212425e-01 + 8.8298561687780763e-01 6.1373885316287735e-01 1.7917085527761836e-01 + 1.3184527455225181e+00 8.5337610482578596e-01 2.0582890345998794e-01 + 1.7853721754681551e+00 1.0804028160561643e+00 2.2284387878189083e-01 + 2.2797100705575919e+00 1.3014244090360807e+00 2.5750968174560263e-01 + 2.7978660793863139e+00 1.5044135367378082e+00 3.3798145712010497e-01 + 3.3358050635744148e+00 1.6634997903888489e+00 4.8519104384009848e-01 + 3.8794946151084968e+00 1.7522504898444713e+00 7.0783140081981410e-01 + 4.4037996511761177e+00 1.7481067816026779e+00 9.9570689815230085e-01 + 4.8860072636606882e+00 1.6293939254592935e+00 1.3161929502355303e+00 + 5.3061635489937009e+00 1.3821749363589442e+00 1.6201609344783843e+00 + 5.6402710977352202e+00 1.0077237356017914e+00 1.8543286790577933e+00 + 5.8705646606748259e+00 5.3493989931336161e-01 1.9819551611457573e+00 + 6.0307135314820890e+00 6.2567202069718775e-03 2.0253393749235982e+00 + 6.2051074824128989e+00 -5.6356645202871691e-01 2.0611220308660050e+00 + 6.4617983982153513e+00 -1.1401545211166679e+00 2.1309157330743482e+00 + 6.8189009904909241e+00 -1.6307549789818103e+00 2.1860779469124765e+00 + 7.2225250075479757e+00 -1.9863876839923815e+00 2.1699355085527086e+00 + 7.5074935562975291e+00 -2.4069711326121044e+00 2.2346937028900014e+00 + id 14485 + loc 2.9641163349151611e-01 3.7027084827423096e-01 412 + blend 0.0000000000000000e+00 + interp 3.0498028775369623e-01:2.8703135318161721e-01:4.2969418753382449e-01:2.8907037419465292e-01:1.1041436853524371e+00:2.7413082122621218e-01:1.9968324963650899e+00:2.6117601580705618e-01:2.9771099420169440e+00:3.0497723795081871e-01:3.8375516896075430e+00 + CVs 20 + -1.1992987599573629e-01 1.3882891085988569e-01 -5.7931872553245589e-01 + -2.1078576834850887e-01 1.7103208303327230e-01 -9.7851073368741326e-01 + -2.7301021595718289e-01 1.6238890216928697e-01 -1.3234073594855720e+00 + -3.0269872191186387e-01 1.4327255311136777e-01 -1.6691772826260913e+00 + -2.9830094026894938e-01 1.1417726785924298e-01 -2.0054973225478046e+00 + -2.6115017447772926e-01 7.7647577883661945e-02 -2.3224127452840451e+00 + -1.9491975919555810e-01 3.7921198698657843e-02 -2.6140592663911630e+00 + -1.0549688961037867e-01 -1.1643015839755133e-03 -2.8803123848258574e+00 + -1.2198112336654354e-03 -3.8038212193626020e-02 -3.1235448691063010e+00 + 1.0989671613267099e-01 -7.2581223513751292e-02 -3.3475307840139736e+00 + 2.3172247072147512e-01 -1.0299171909304428e-01 -3.5682041319856062e+00 + 3.8669615227802612e-01 -1.3246497226126408e-01 -3.8257759510948275e+00 + 5.7485289731328570e-01 -1.9140072909742178e-01 -4.1590997667656957e+00 + 7.3574859527366787e-01 -3.2134904900602357e-01 -4.5530223880790466e+00 + 8.1457831984827300e-01 -5.2911586031037761e-01 -4.9616492237415173e+00 + 8.0164778961889149e-01 -8.0449078806701824e-01 -5.3599087513424442e+00 + 6.9901242468327407e-01 -1.1365736531691364e+00 -5.7291017144377694e+00 + 5.0804386555197256e-01 -1.4986526380640941e+00 -6.0405974236867639e+00 + 2.5576265498790141e-01 -1.8035706899685151e+00 -6.2281215412613431e+00 + id 14486 + loc 2.3177911341190338e-01 2.4843384325504303e-01 399 + blend 0.0000000000000000e+00 + interp 3.9296157667720716e-01:2.9350289767160609e-01:3.5505433563883793e-01:3.4062232429361561e-01:1.2240114275787950e+00:2.9650842716821774e-01:2.0402644176103459e+00:3.1319177960547923e-01:2.9763753935961663e+00:3.6572490146776426e-01:3.4867459871076116e+00:3.9295764706144043e-01:3.9899887605277771e+00 + CVs 20 + -1.7970529864414514e-01 1.1679426199509603e-01 2.0839251972474421e-01 + -3.6448879750395574e-01 2.3496704174262809e-01 3.9949612219544295e-01 + -5.6356623745245871e-01 3.5404001802249230e-01 5.6093879317753936e-01 + -7.8632805792565230e-01 4.7607247474754821e-01 6.8523657196239085e-01 + -1.0285801228728650e+00 6.0696204105818619e-01 7.7932206281928484e-01 + -1.2760793791708089e+00 7.5044898669301763e-01 8.5476817687259488e-01 + -1.5171279914135127e+00 9.0455704274854409e-01 9.1638564417596513e-01 + -1.7455926283962326e+00 1.0632157722454481e+00 9.6576432106906251e-01 + -1.9654881250017431e+00 1.2178235529096959e+00 1.0114717773942619e+00 + -2.1893220063557779e+00 1.3545878161657199e+00 1.0672329498342636e+00 + -2.4378056494681370e+00 1.4379265416723446e+00 1.1564074675903557e+00 + -2.7221935121576455e+00 1.4078915588190881e+00 1.3013359737486638e+00 + -3.0271766167860301e+00 1.2419254967098778e+00 1.4947677959587953e+00 + -3.3447160047946434e+00 9.8213994868928800e-01 1.7161298868155730e+00 + -3.6936737987710382e+00 7.2981332706835744e-01 1.9340159539318491e+00 + -4.0577148021522955e+00 6.2246565308322710e-01 2.0598247610890175e+00 + -4.3115486645180043e+00 7.2608762094872403e-01 1.9880654569270046e+00 + -4.4771440335149624e+00 9.1248770412448132e-01 1.8216338554843758e+00 + -4.9848620445433713e+00 1.0556489405177825e+00 1.7449066235928909e+00 + id 14487 + loc 3.7892752885818481e-01 5.4727053642272949e-01 400 + blend 0.0000000000000000e+00 + interp 4.9932921279015030e-01:4.9932421949802241e-01:4.5819990414159062e-01:2.7558239949422897e-01:9.9575373818966928e-01:2.8330974274642728e-01:1.8771412469349198e+00:2.9816751027076382e-01:2.5062367277285937e+00:2.5793935035807408e-01:3.7065715610058656e+00 + CVs 20 + -2.4530232515453995e-01 3.2258032414891102e-01 -1.5013696778407179e-01 + -4.7970609511315243e-01 6.5256197475860478e-01 -2.9896211326832145e-01 + -7.1078510533560224e-01 9.9152982022669556e-01 -4.7795836126687069e-01 + -9.4033688856954412e-01 1.3343585521113741e+00 -7.0159106266022953e-01 + -1.1661902637177384e+00 1.6707598286699710e+00 -9.7176846344964329e-01 + -1.3865394791095040e+00 1.9901238069059692e+00 -1.2871285703827373e+00 + -1.5990695933978285e+00 2.2823438161569114e+00 -1.6478284754654529e+00 + -1.7976930113730583e+00 2.5367732278809805e+00 -2.0565759437831188e+00 + -1.9696032641877490e+00 2.7435305269131014e+00 -2.5150645239716347e+00 + -2.0994559291353649e+00 2.8933325287698994e+00 -3.0197629080950801e+00 + -2.1759846077922567e+00 2.9790350681153401e+00 -3.5568560814431449e+00 + -2.2014272366933580e+00 2.9984937969847496e+00 -4.1072469357465753e+00 + -2.1941289515215918e+00 2.9464984976283213e+00 -4.6680496792214443e+00 + -2.1850371095268826e+00 2.7998670488214166e+00 -5.2517354943087371e+00 + -2.2152342108338896e+00 2.5297609055270813e+00 -5.8436584618484311e+00 + -2.3200290976713633e+00 2.1463522614374808e+00 -6.3866182457637990e+00 + -2.5128273357051518e+00 1.6989788960247401e+00 -6.8382324570755344e+00 + -2.7823789984929457e+00 1.2300121573060920e+00 -7.1967586105139389e+00 + -3.0253738095057785e+00 7.9428951596953867e-01 -7.4888290242053799e+00 + id 14488 + loc 1.0487198829650879e-01 9.8484307527542114e-01 393 + blend 0.0000000000000000e+00 + interp 3.5531510111081122e-01:3.4942025086393919e-01:1.0372555803624692e+00:3.3757804257278584e-01:1.1763848508358086e+00:3.4056471888172729e-01:2.0007938051381977e+00:3.5531154795980013e-01:2.9555152116671310e+00:3.0003606115715964e-01:3.9447969867014647e+00 + CVs 20 + -2.0496447445380234e-01 2.8722469878609735e-01 -9.2585069752407920e-02 + -4.1088904547858174e-01 5.8063668728093032e-01 -1.9382030261881394e-01 + -5.9335295288228052e-01 8.7983139963187273e-01 -3.0212305867506223e-01 + -7.4439748811737427e-01 1.1823519576989230e+00 -4.1374575253784918e-01 + -8.7490634762179353e-01 1.4890763449930637e+00 -5.2491872600108558e-01 + -9.9944256099418283e-01 1.8041388074043436e+00 -6.3278835634273833e-01 + -1.1328319842790209e+00 2.1359807269555486e+00 -7.3398783534839696e-01 + -1.3015596511880154e+00 2.4902861564429180e+00 -8.2118685584491646e-01 + -1.5528501279018041e+00 2.8395430576500864e+00 -8.7925680861130384e-01 + -1.9137053855624178e+00 3.1278364180888198e+00 -9.0067943989853838e-01 + -2.3660283744642130e+00 3.3383913856202998e+00 -9.1776200775167149e-01 + -2.8787852222931396e+00 3.4841241697449337e+00 -9.8157115793481364e-01 + -3.4286257211087259e+00 3.5415930392256572e+00 -1.1032201891993434e+00 + -3.9847641573160506e+00 3.4592595681947640e+00 -1.2559247833098857e+00 + -4.4823469115827566e+00 3.2286534615252203e+00 -1.4275476781259182e+00 + -4.8440030754489785e+00 2.9114840126026307e+00 -1.6077565013395614e+00 + -5.0717565342037760e+00 2.5773001363330716e+00 -1.7492508704470480e+00 + -5.2704040703087118e+00 2.2259095527657577e+00 -1.7945818981750450e+00 + -5.5715235842042308e+00 1.8017698519351959e+00 -1.7035384848703050e+00 + id 14489 + loc 8.0501623451709747e-02 4.5719486474990845e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5944898030103876e-01:4.5944438581123576e-01:4.3044963453564100e-01:2.9560384299802644e-01:1.0044354291031732e+00:3.2932919972823271e-01:1.9997396833616414e+00:3.3702966461614370e-01:2.6200966044282250e+00:4.5004597052516943e-01:3.0603531364987195e+00:4.1768742477911391e-01:3.8356604605215336e+00 + CVs 20 + 2.9347761796357114e-01 4.7990740192624315e-01 -9.9999423858865288e-04 + 4.8356640838374493e-01 8.7800175867527663e-01 -6.8687265526453628e-02 + 6.3633343552532118e-01 1.2467512933104099e+00 -1.6428477307575240e-01 + 7.7030963450486190e-01 1.6046303332461380e+00 -2.7507493455995857e-01 + 8.6976152288684427e-01 1.9457118547513583e+00 -4.0127631370025252e-01 + 9.1082455486748382e-01 2.2633388511581769e+00 -5.4281662942429221e-01 + 8.6410664451278729e-01 2.5427058337922075e+00 -6.9783144402952113e-01 + 7.1122574482120693e-01 2.7539308155447015e+00 -8.5681105518706790e-01 + 4.6785013486064875e-01 2.8577199822528638e+00 -9.9937698630933769e-01 + 1.9090319319357452e-01 2.8415964558137148e+00 -1.1060841860869979e+00 + -7.1495403501910193e-02 2.7359867130901909e+00 -1.1749371964938788e+00 + -3.0717347658726646e-01 2.5733645999187718e+00 -1.2125587582677078e+00 + -5.1667806165952335e-01 2.3699652192212932e+00 -1.2228786445090967e+00 + -6.9822786639701429e-01 2.1312521981474974e+00 -1.2065687617915550e+00 + -8.3936660062294455e-01 1.8513380995026216e+00 -1.1604868471348915e+00 + -8.9746203338021813e-01 1.5232247200196873e+00 -1.0785662230515554e+00 + -8.2320983712222395e-01 1.1908248065403542e+00 -9.5959330447189284e-01 + -6.6477719056728724e-01 9.1459377696361444e-01 -8.0357149336501887e-01 + -5.1470813911765068e-01 6.6674092647027972e-01 -5.9945756927254645e-01 + id 14490 + loc 5.5374348163604736e-01 8.2733944058418274e-02 404 + blend 0.0000000000000000e+00 + interp 4.7544980591199398e-01:3.0352220047679268e-01:4.3221662890677137e-01:4.7544505141393489e-01:1.0705739946906889e+00:3.3933225823663310e-01:1.8019889671673486e+00:4.7398323824094174e-01:2.1284355006277087e+00:4.5285359043261314e-01:2.9098840580751557e+00:2.7336639085972725e-01:3.8938093831157818e+00 + CVs 20 + 6.2301168947568042e-03 1.8371287609942266e-01 2.0538436186655812e-01 + 7.7339628472773425e-03 3.6344642184128240e-01 4.1090469572457616e-01 + 6.6669566930988577e-03 5.3954678023287661e-01 6.2236314408558191e-01 + 5.7953447849898310e-03 7.1378131978513848e-01 8.4139869833446612e-01 + 9.3727639513912497e-03 8.8572845758120211e-01 1.0653950961498215e+00 + 2.5074835033670917e-02 1.0508109018477385e+00 1.2919014100702531e+00 + 6.2774935173368185e-02 1.2013429384580125e+00 1.5181204467727072e+00 + 1.2990867489433533e-01 1.3305155032624452e+00 1.7395746559444145e+00 + 2.2914499485903739e-01 1.4337255038946624e+00 1.9492346902345203e+00 + 3.5927659888115637e-01 1.5076361332280510e+00 2.1387731476906491e+00 + 5.1580563105860633e-01 1.5488906795184225e+00 2.3029927298318080e+00 + 6.9111933052864682e-01 1.5545684047718074e+00 2.4359191064974852e+00 + 8.7564176757644729e-01 1.5281446147054676e+00 2.5424821424693929e+00 + 1.0625610624889057e+00 1.4779847537574822e+00 2.6260096420449193e+00 + 1.2478252715408804e+00 1.4164325457727722e+00 2.6795156323999674e+00 + 1.4260406576325866e+00 1.3471947109892015e+00 2.6942133551153495e+00 + 1.5864022807102083e+00 1.2519884409039719e+00 2.6736261050768944e+00 + 1.7136760672856257e+00 1.1071675826901077e+00 2.6338124834101624e+00 + 1.9212124456702067e+00 9.7957774903182382e-01 2.7150391339757505e+00 + id 14491 + loc 2.8467711526900530e-03 7.6422905921936035e-01 1069 + blend 0.0000000000000000e+00 + interp 4.2030867779187903e-01:4.2030447470510113e-01:2.1888373494704771e-01:3.8289835904014546e-01:9.8042358410937624e-01:3.8655914552108950e-01:1.5641051246852236e+00:3.9980220252886234e-01:2.0022618475462788e+00:2.7653204959576350e-01:2.8896913023852218e+00:2.8438375441377595e-01:3.9902259137946947e+00 + CVs 20 + 2.0031873595184790e-01 2.1616341270627376e-01 -1.4684438155138146e-01 + 3.9244361764702601e-01 4.5721328730960226e-01 -3.1327335856383370e-01 + 5.7709262126980687e-01 7.1518503371185416e-01 -4.7277837632418174e-01 + 7.4654147223173173e-01 9.8345518640641016e-01 -6.2330385327655857e-01 + 8.8783454521272542e-01 1.2570570327324162e+00 -7.7633662408716142e-01 + 9.8446166423920034e-01 1.5225820532485455e+00 -9.4113324967067935e-01 + 1.0251372235458187e+00 1.7572943696840528e+00 -1.1226767872135295e+00 + 1.0114555524764581e+00 1.9345574312326546e+00 -1.3214908077706897e+00 + 9.5373719886243469e-01 2.0300613667819158e+00 -1.5291627772789878e+00 + 8.6540451868378065e-01 2.0369614671306544e+00 -1.7249978685011877e+00 + 7.5738891607510339e-01 1.9725093249488475e+00 -1.8997664462669763e+00 + 6.3417622347318836e-01 1.8469072398355080e+00 -2.0634283301280716e+00 + 5.0466848186011237e-01 1.6573382888781749e+00 -2.2221187185968230e+00 + 3.8829704424998646e-01 1.4033622550351366e+00 -2.3775501718210745e+00 + 3.1287097816808856e-01 1.0880892360717775e+00 -2.5354066097255292e+00 + 3.1923246002443351e-01 7.1819991120005411e-01 -2.7038615479067496e+00 + 4.7041158614872003e-01 3.2863405892377434e-01 -2.8704533118103894e+00 + 7.7161350668368689e-01 2.1924617731344853e-02 -2.9594176489450525e+00 + 1.0508139564818109e+00 -1.4362483967483811e-01 -2.9088611525471859e+00 + id 14492 + loc 9.8052316904067993e-01 3.4841808676719666e-01 401 + blend 0.0000000000000000e+00 + interp 5.0332482746524310e-01:3.5002073527117977e-01:4.0763602032454682e-01:3.4660302261837844e-01:9.9998691331545675e-01:4.9256297956753547e-01:1.7277567584086841e+00:5.0331979421696849e-01:2.1098686312656110e+00:4.2862754255642865e-01:2.6244176509310595e+00:2.9675115149045467e-01:3.3226725431532547e+00:2.5848855224589629e-01:3.9969276267344442e+00 + CVs 20 + 5.4151493824983195e-02 2.9777571162881317e-01 1.6198264869932633e-01 + 8.7861278645650256e-02 5.9790215205917685e-01 3.3887781975078013e-01 + 9.0733950190326262e-02 8.9735312170274384e-01 5.2659391087972052e-01 + 6.3072695237707505e-02 1.1965914166085132e+00 7.2743035246426913e-01 + 1.6251397179948779e-02 1.4946531977551258e+00 9.4982427391647628e-01 + -3.5480191455673993e-02 1.7882690748762500e+00 1.2015296514909284e+00 + -7.8988522317146148e-02 2.0751092700440430e+00 1.4911901559277778e+00 + -9.8870622980712086e-02 2.3487202580297968e+00 1.8247061020086974e+00 + -7.8114350165902624e-02 2.5930427554023781e+00 2.1877897537032478e+00 + -1.2354364644839189e-02 2.7914205763849260e+00 2.5498874938205454e+00 + 8.7664696564286104e-02 2.9374392888210483e+00 2.8988163435488818e+00 + 2.1232989300042804e-01 3.0257179675882089e+00 3.2504389010259329e+00 + 3.6139485041022013e-01 3.0331393663254866e+00 3.6232207409913499e+00 + 5.4290102542592966e-01 2.9277204151803882e+00 4.0090730955352951e+00 + 7.6958936044124127e-01 2.7161324531922686e+00 4.3655262995849409e+00 + 1.0435815629338605e+00 2.4646917108844235e+00 4.6462387764899145e+00 + 1.3337764073868521e+00 2.2527269532477390e+00 4.8336293413214566e+00 + 1.6035630736013879e+00 2.1288922605965257e+00 4.9437296278777456e+00 + 1.8901383488584709e+00 2.1935286911913936e+00 4.9812751629080765e+00 + id 14493 + loc 3.9498069882392883e-01 9.4812965393066406e-01 412 + blend 0.0000000000000000e+00 + interp 3.7159506824774818e-01:2.6531269222974435e-01:9.7043289278216305e-01:3.7159135229706575e-01:1.6021627404559773e+00:3.4094276869483009e-01:2.3235244487083166e+00:2.9237573592096822e-01:3.1589763896648826e+00:2.8438755779467528e-01:3.9994050373193883e+00 + CVs 20 + 8.8724826118396916e-01 1.6731866708994969e-01 -1.8013996841460453e-01 + 1.4548401011446395e+00 2.0552586707816620e-01 -3.4188483899529554e-01 + 1.9502700151614802e+00 2.1169096600376353e-01 -4.7709549906761406e-01 + 2.4711333588887361e+00 2.2326209753873660e-01 -5.7946491318296123e-01 + 3.0111106993727286e+00 2.2932649490379214e-01 -6.4384827253301691e-01 + 3.5648854946273656e+00 2.1674227178453742e-01 -6.6633573782001054e-01 + 4.1254762397673632e+00 1.7144258561945913e-01 -6.4484602275202429e-01 + 4.6834574502631261e+00 7.9794105339945687e-02 -5.8126263395257571e-01 + 5.2259623156303405e+00 -6.7924927841099381e-02 -4.8069171117450227e-01 + 5.7389939855962755e+00 -2.7523189048107044e-01 -3.5025151443693614e-01 + 6.2171334633247488e+00 -5.4970821253974100e-01 -2.0576050589409123e-01 + 6.6634054441178003e+00 -9.1688848133528555e-01 -8.4746539235478813e-02 + 7.0633691088108987e+00 -1.3931013340116101e+00 -3.6283163928862439e-02 + 7.3883117562037377e+00 -1.9482343283374282e+00 -7.7096784482843073e-02 + 7.6282083490780490e+00 -2.5380570118121168e+00 -1.9025965956160040e-01 + 7.7862304435993002e+00 -3.1276371800030667e+00 -3.6639678592149194e-01 + 7.8690186988245472e+00 -3.6826750840473164e+00 -6.0806252460567678e-01 + 7.8955405933195024e+00 -4.1720981905982999e+00 -8.9775965672409408e-01 + 7.9966239994387962e+00 -4.5762358189042116e+00 -1.0962979165264768e+00 + id 14494 + loc 9.7285741567611694e-01 5.9581693261861801e-02 378 + blend 0.0000000000000000e+00 + interp 4.5501203983874444e-01:4.4065997246491001e-01:8.6680420216514287e-01:4.5500748971834609e-01:1.6175040673442471e+00:2.7397898503209006e-01:2.0410429795307126e+00:3.7359920077029185e-01:3.0103731945465722e+00:3.1530284979815554e-01:3.8731502702519425e+00 + CVs 20 + -2.6803032944488203e-01 2.7880296701732865e-01 7.5345531507733682e-02 + -5.3925954288137046e-01 5.3441990409276907e-01 1.5032800378453770e-01 + -8.0971142120791950e-01 7.5985916820362132e-01 2.3867824317923508e-01 + -1.0777659031426898e+00 9.6239685461135294e-01 3.4327648857597171e-01 + -1.3386065381726282e+00 1.1539815895633927e+00 4.5747086326390546e-01 + -1.5902296316091378e+00 1.3427121815743148e+00 5.7493330495335981e-01 + -1.8414282721840545e+00 1.5316625607737682e+00 6.9031497138868203e-01 + -2.1042385075196597e+00 1.7216483597440613e+00 7.9732085882264492e-01 + -2.3813251596023175e+00 1.9138907021441818e+00 8.8675311045228034e-01 + -2.6647251924523765e+00 2.1102682340157988e+00 9.4821088276136123e-01 + -2.9502718074734613e+00 2.3151420000781378e+00 9.7595663568795632e-01 + -3.2555573729481813e+00 2.5268384677328553e+00 9.6625727557444863e-01 + -3.6052793794096845e+00 2.6993985799498068e+00 9.1591007892135834e-01 + -3.9736313725882373e+00 2.7425538409314276e+00 8.4553533158903038e-01 + -4.2986511269082062e+00 2.6265250053408207e+00 7.9030969611294233e-01 + -4.5518857354907265e+00 2.4205094958642341e+00 7.4648781959774591e-01 + -4.7204490529752841e+00 2.2234811990931442e+00 6.8034728484432649e-01 + -4.8531663436898782e+00 2.0751604101073928e+00 5.9294675893206183e-01 + -5.2310267770948542e+00 1.9659715782409961e+00 5.7377400693429625e-01 + id 14495 + loc 6.2170648574829102e-01 8.7319630384445190e-01 399 + blend 0.0000000000000000e+00 + interp 3.4437188046619932e-01:3.2824974859742112e-01:1.9658375019658625e-01:2.7838343226146151e-01:1.3199993792679774e+00:2.8988141695649500e-01:2.0704298257632914e+00:3.4436843674739470e-01:2.8377216644604628e+00:2.8397279666257563e-01:3.2123460776765835e+00 + CVs 20 + -2.2555759977722176e-01 2.7066826898496887e-01 -1.0471858527240488e-01 + -4.5492795072136560e-01 5.4445363548206294e-01 -2.1886236585644850e-01 + -6.8974022434823290e-01 8.1699153827680548e-01 -3.4587990671654101e-01 + -9.3095681505361416e-01 1.0847732495622979e+00 -4.9064424308367288e-01 + -1.1784181536599490e+00 1.3428472899166324e+00 -6.6080075135555028e-01 + -1.4348331662353468e+00 1.5832541144020249e+00 -8.6549508363937977e-01 + -1.7024097348760159e+00 1.7898339265405472e+00 -1.1122597590831989e+00 + -1.9795963967836381e+00 1.9467528470793143e+00 -1.3996928793908807e+00 + -2.2745065050712920e+00 2.0535031331125597e+00 -1.7284156841375578e+00 + -2.6057665845617586e+00 2.0999441936403636e+00 -2.1109161621553989e+00 + -2.9503682442108112e+00 2.0450995619652903e+00 -2.5357194505492036e+00 + -3.2340162778980095e+00 1.8820329417394519e+00 -2.9476495873788862e+00 + -3.4369884098162200e+00 1.6525129389202173e+00 -3.3191836419753757e+00 + -3.6252325563341903e+00 1.3654404824674096e+00 -3.6718175737241339e+00 + -3.8436440095155966e+00 1.0079111025422991e+00 -4.0069317009174350e+00 + -4.0413985538076949e+00 6.1075207151921040e-01 -4.2902089600217970e+00 + -4.1746636917861419e+00 2.4958962164872123e-01 -4.5153425260586131e+00 + -4.3560079634379418e+00 -3.9192626633450467e-02 -4.7293200038557419e+00 + -4.7699325954757947e+00 -2.5411173262744124e-01 -4.9930235250074286e+00 + id 14496 + loc 9.7556102275848389e-01 8.2916980981826782e-01 400 + blend 0.0000000000000000e+00 + interp 3.4889903627944530e-01:3.0237148831282101e-01:2.7705985708478154e-02:2.7157347082302469e-01:8.4717365699237679e-01:3.4151439689478214e-01:1.1391026120639074e+00:3.0134459210358988e-01:1.8804211603493703e+00:3.4889554728908251e-01:2.4192375035720399e+00:1.0297865327569082e-01:3.0113313328305127e+00:3.1315513004808171e-01:3.9756344211384751e+00 + CVs 20 + -1.2461017225303042e-01 1.8183516851312576e-01 -2.3671387810952069e-01 + -2.5976075148100009e-01 3.4968783617503080e-01 -4.5878884774940965e-01 + -3.8655620002484908e-01 5.0615553657337087e-01 -6.8746283249711138e-01 + -4.9586829253803194e-01 6.4654839907816686e-01 -9.2627313525525001e-01 + -5.9522022749862669e-01 7.6368353096340968e-01 -1.1713697229436044e+00 + -6.9137593783898366e-01 8.5494219999771048e-01 -1.4226381133776762e+00 + -7.8548304068901664e-01 9.2473776424943821e-01 -1.6821762440910657e+00 + -8.7474267228452163e-01 9.7923786953193070e-01 -1.9509618215047273e+00 + -9.5637051763033942e-01 1.0167848772910859e+00 -2.2282205547349219e+00 + -1.0294468417605052e+00 1.0302910006901846e+00 -2.5112470716763111e+00 + -1.0927667868185360e+00 1.0172293802311567e+00 -2.7926179988867528e+00 + -1.1454330277466476e+00 9.8135252789108685e-01 -3.0612539713092497e+00 + -1.1937447347359951e+00 9.2886564815022821e-01 -3.3121588192555667e+00 + -1.2499793541638353e+00 8.6153647799039312e-01 -3.5521821453013755e+00 + -1.3198609158520977e+00 7.7962931939960933e-01 -3.7908718628651186e+00 + -1.3952658036599874e+00 6.9281941644961176e-01 -4.0302920196809620e+00 + -1.4596726925876709e+00 6.1625583624411040e-01 -4.2666581974789910e+00 + -1.4922616233475603e+00 5.3993990797179325e-01 -4.4830485967157570e+00 + -1.4126450070227579e+00 2.2374944945701136e-01 -4.4729030521042557e+00 + id 14497 + loc 4.3997582793235779e-01 3.6243638396263123e-01 393 + blend 0.0000000000000000e+00 + interp 4.2692812314742179e-01:2.8820687828550923e-01:3.4543961711013760e-01:4.1385025997790659e-01:9.6491218508287158e-01:4.2692385386619036e-01:1.2399476468700157e+00:3.0034076286835198e-01:2.0035615490872218e+00:3.0626397378900239e-01:2.8233739160092508e+00:3.0842936172443580e-01:3.3604390684095864e+00 + CVs 20 + -7.5150004938737372e-02 4.1502275543639744e-01 2.8900233932462793e-01 + -1.6515996208620620e-01 8.5023635580985923e-01 5.7214453310114100e-01 + -2.8072734707993097e-01 1.3059010875044448e+00 8.3243103266824092e-01 + -4.5624350829252647e-01 1.7572635311115945e+00 1.0791178226812330e+00 + -7.1830105420936108e-01 2.1601349981346898e+00 1.3173402676283783e+00 + -1.0606541534934202e+00 2.4873466797455857e+00 1.5379652999860371e+00 + -1.4638572306107780e+00 2.7343227596139434e+00 1.7367056446225591e+00 + -1.9087888861928339e+00 2.8942822957339418e+00 1.9227535865813299e+00 + -2.3691352759406978e+00 2.9565679684240838e+00 2.1123457045945404e+00 + -2.8102092684215507e+00 2.9190958147473047e+00 2.3182051735695643e+00 + -3.1975887246484818e+00 2.7919919208740804e+00 2.5421407448555589e+00 + -3.5061882901823722e+00 2.5978949102494262e+00 2.7762201193313776e+00 + -3.7220431551683282e+00 2.3683881432200637e+00 3.0088960068290547e+00 + -3.8373890314478918e+00 2.1440252065209835e+00 3.2288068503255842e+00 + -3.8660058377076512e+00 1.9675250828038093e+00 3.4304941117756620e+00 + -3.8538504871457997e+00 1.8470866473668206e+00 3.6275580167745511e+00 + -3.8337934453745879e+00 1.7558556619021737e+00 3.8442297937549599e+00 + -3.7941245001885884e+00 1.6415473236252698e+00 4.1237869402003593e+00 + -3.6588289814913826e+00 1.3907567909389011e+00 4.5697885046744560e+00 + id 14498 + loc 6.8365556001663208e-01 8.7157106399536133e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3485504430475186e-01:3.0285657045534770e-01:5.2896878137394410e-01:3.4756237315112509e-01:1.2038268950464877e+00:4.3485069575430885e-01:1.9635609440729556e+00:3.0889318096921381e-01:2.2574472792671965e+00:3.0240874208060303e-01:2.9802289357739831e+00:2.8224250624981956e-01:3.7073985361607131e+00 + CVs 20 + 7.7020903261396323e-02 2.9148615691020757e-01 -4.4955350667973126e-02 + 1.3153442643513061e-01 6.0309220405689556e-01 -1.0320393964796673e-01 + 2.0745424250639627e-01 9.5071611877053874e-01 -1.8523809876152775e-01 + 3.6212448863786745e-01 1.3138927370624103e+00 -2.8509074838996507e-01 + 6.0668864980021975e-01 1.6247504012661553e+00 -3.7564134975621188e-01 + 8.7956699203554622e-01 1.8432969247558566e+00 -4.4093422834357754e-01 + 1.1192790569491040e+00 1.9971889258532158e+00 -4.9304247842457816e-01 + 1.3066927784672075e+00 2.1364881429437412e+00 -5.4239136354926931e-01 + 1.4495333919278610e+00 2.3057365940337595e+00 -5.8334882638169572e-01 + 1.5474166671764675e+00 2.5438933610035712e+00 -6.3396384644800419e-01 + 1.5292647385031466e+00 2.8433348260228088e+00 -7.9086019809357344e-01 + 1.2992258375641614e+00 3.0641560971841102e+00 -1.1145101365224912e+00 + 8.9064293174874654e-01 3.0595001718013455e+00 -1.5637710390315651e+00 + 4.3832617279774411e-01 2.7542617440755630e+00 -2.0639468117115909e+00 + 9.2851483470155372e-02 2.1885737230565097e+00 -2.5268244944913203e+00 + -7.4229211250513072e-02 1.4411709224095031e+00 -2.8840803453436816e+00 + -5.5296839066174830e-02 6.0827135874012261e-01 -3.0411238528401148e+00 + 5.3814549536358336e-02 -1.2546570317455252e-01 -2.9697026519081917e+00 + 6.5545895378630523e-02 -5.8444728244133692e-01 -2.9309269729455703e+00 + id 14499 + loc 5.0806391239166260e-01 2.0834638178348541e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4974431569512685e-01:4.4973981825196990e-01:2.2224046849181367e-01:3.5538423373025879e-01:8.8029070289017119e-01:3.8896946178297453e-01:1.2172867244178753e+00:3.7610922152731113e-01:1.8910133817090167e+00:3.9621708884278545e-01:2.1327401661417604e+00:2.8478548069657805e-01:3.0145455674362487e+00:4.4539450889249599e-01:3.9356447523111608e+00 + CVs 20 + -1.6933584930598766e-03 4.5703081799651263e-01 -2.5057964513208764e-01 + -4.7711592094680344e-02 8.7445125868275886e-01 -3.9202564497401421e-01 + -1.3135444882273106e-01 1.2695691116250223e+00 -4.8739646304202938e-01 + -2.5836778548763017e-01 1.6508368182925037e+00 -5.4761185102845422e-01 + -4.3790591583834193e-01 2.0024398962946806e+00 -5.5524927779062661e-01 + -6.7757337344732660e-01 2.2930446569493932e+00 -4.9200162765742095e-01 + -9.7005898659493972e-01 2.4732242736489023e+00 -3.5763682517410089e-01 + -1.2835720009864402e+00 2.5062325678842239e+00 -1.8835881797606435e-01 + -1.5825580158245645e+00 2.4019517312150538e+00 -2.8323521991232115e-02 + -1.8519501293149225e+00 2.1943947879397689e+00 1.1011421186961901e-01 + -2.0855297160981792e+00 1.9007069172370823e+00 2.3468935329666812e-01 + -2.2640508461817372e+00 1.5235024146870995e+00 3.4908859880437559e-01 + -2.3499919776337448e+00 1.0657584595968386e+00 4.5588871067320269e-01 + -2.2799811857698984e+00 5.4136242466326412e-01 5.5675204816467805e-01 + -1.9689569183131772e+00 1.4289607973915541e-02 6.4078442288493664e-01 + -1.3984296105250391e+00 -3.9191163762214754e-01 7.2536860322047925e-01 + -6.0463797392748908e-01 -5.5643321838212856e-01 9.0007223274120196e-01 + 2.2716204215308550e-01 -4.3255521291754984e-01 1.1525004723166989e+00 + 7.0105336778952498e-01 -5.4892377999850761e-01 1.2193372884076330e+00 + id 14500 + loc 2.0979392528533936e-01 9.3768322467803955e-01 401 + blend 0.0000000000000000e+00 + interp 3.6308633648240979e-01:3.2151535044389429e-01:2.3212976696345933e-01:3.6308270561904499e-01:1.0436682942399260e+00:3.6122764098776933e-01:1.6795392336615476e+00:3.5132590071560527e-01:2.1561830405341764e+00:3.2931323652272526e-01:3.0203603389353990e+00:3.0264428112444203e-01:3.7920662987773213e+00 + CVs 20 + -1.0108662676427529e-02 3.0765653355580846e-01 -2.0823338135763345e-01 + -4.5985780274102300e-02 6.0229510486435278e-01 -4.4068813034482146e-01 + -1.0269084715637805e-01 8.8631900927473639e-01 -6.7506975460748098e-01 + -1.7787793271544028e-01 1.1518648212291449e+00 -9.0349466226510911e-01 + -2.6957251498983292e-01 1.3886419190819654e+00 -1.1256423144099612e+00 + -3.7616133961937859e-01 1.5871899035227464e+00 -1.3317386598150751e+00 + -4.9504161116810075e-01 1.7442922792687952e+00 -1.5035521449732785e+00 + -6.1654689690520392e-01 1.8675576916258247e+00 -1.6298086958953084e+00 + -7.3512200912194481e-01 1.9709101991402282e+00 -1.7162494437685278e+00 + -8.6737625183339773e-01 2.0647125887366613e+00 -1.7776764503158458e+00 + -1.0402637608563841e+00 2.1516452992087602e+00 -1.8188529697820632e+00 + -1.2817048521403203e+00 2.2237379120682332e+00 -1.8377300621703831e+00 + -1.5961839242071783e+00 2.2540456009056418e+00 -1.8486735038593649e+00 + -1.9454548919280978e+00 2.2119529206196020e+00 -1.8832057058536631e+00 + -2.3107890255747541e+00 2.0697445946414716e+00 -1.9449124544725909e+00 + -2.7309639377498454e+00 1.7854188329855805e+00 -2.0139872317468241e+00 + -3.2124079263110281e+00 1.3857040883291409e+00 -2.1524787673304413e+00 + -3.6411440067738798e+00 1.0303873738101657e+00 -2.4560540366004666e+00 + -3.8751189035392373e+00 8.5259186809314758e-01 -2.8718323594929731e+00 + id 14501 + loc 5.2649605274200439e-01 8.0515015125274658e-01 404 + blend 0.0000000000000000e+00 + interp 4.5820505616197693e-01:3.4196081247658916e-01:8.5820509501249842e-01:4.5820047411141535e-01:1.2702470222932394e+00:4.3684739870558825e-01:1.9568014342708291e+00:3.0936467620694391e-01:2.6202585097870243e+00:3.0097381368745207e-01:3.4007136569104048e+00:3.7394880013970694e-01:3.9997369632177771e+00 + CVs 20 + 6.1193526495693699e-02 1.8037619259530713e-01 -3.4484526291875470e-03 + 1.4552273544436056e-01 3.5907252461223399e-01 -1.4765434421263948e-02 + 2.4869863465097686e-01 5.3222573271484930e-01 -3.6976737427595052e-02 + 3.7311360809269389e-01 6.8676975618700808e-01 -7.7739747331901546e-02 + 5.1602342593778938e-01 8.1498353811989399e-01 -1.4104023661375872e-01 + 6.7033657251877243e-01 9.1384510976683564e-01 -2.2661757614938152e-01 + 8.2825631757574203e-01 9.8643459073127626e-01 -3.2906189406171371e-01 + 9.8596661434496147e-01 1.0460298562501871e+00 -4.3455835586797692e-01 + 1.1454588275875053e+00 1.1064208401135498e+00 -5.2936421523197763e-01 + 1.3029625146437778e+00 1.1633475692570290e+00 -6.1940561305551789e-01 + 1.4388083450823101e+00 1.1963024204662001e+00 -7.3392825147331886e-01 + 1.5267029722620173e+00 1.1944653136333405e+00 -8.9572707608165603e-01 + 1.5631113795280354e+00 1.1780790827921293e+00 -1.0860682266874944e+00 + 1.5752704230709049e+00 1.1753688097342909e+00 -1.2692896742329340e+00 + 1.5788293189706222e+00 1.1925413919648362e+00 -1.4366542799957540e+00 + 1.5569413730308224e+00 1.2208102444710216e+00 -1.6007341099691135e+00 + 1.4863969169260514e+00 1.2549572619322982e+00 -1.7690811454824489e+00 + 1.3751141335159653e+00 1.3000492848729597e+00 -1.9312055152964409e+00 + 1.3816192402325522e+00 1.3970461320441929e+00 -2.0476025339174457e+00 + id 14502 + loc 4.6662276983261108e-01 7.4920248985290527e-01 412 + blend 0.0000000000000000e+00 + interp 4.2700723136253660e-01:2.9061377495451807e-01:4.4065107548776350e-03:2.6371398620074910e-01:9.9941666891455694e-01:4.2700296129022297e-01:1.6618797470427062e+00:2.4857637081966916e-01:2.7178630737631679e+00:3.9716294196383134e-01:3.4862245997213281e+00 + CVs 20 + 7.8620290515384939e-01 1.4780319698995975e-01 -1.7975403800793799e-01 + 1.3449319619663014e+00 1.7040315490709712e-01 -3.3348671461445167e-01 + 1.8652974174009631e+00 1.4915949731800665e-01 -4.5412594064232814e-01 + 2.4296872127628175e+00 1.1196970151375840e-01 -5.3632569647969541e-01 + 3.0196753482502823e+00 5.2584207926938298e-02 -5.7239641506870420e-01 + 3.6121175179686165e+00 -3.0951756748968551e-02 -5.5641293643513434e-01 + 4.1835117363900958e+00 -1.3770460182554856e-01 -4.8920453032999467e-01 + 4.7149029251520380e+00 -2.6592602633750251e-01 -3.8108885235252299e-01 + 5.1931756320463842e+00 -4.1186484751460184e-01 -2.4592362152866720e-01 + 5.6115061054242528e+00 -5.7093816145036591e-01 -9.7494953907218129e-02 + 5.9763690391797724e+00 -7.5283987411942621e-01 4.0722655983473188e-02 + 6.3103575573451494e+00 -9.9290996672472476e-01 1.2791371326057288e-01 + 6.6207974719781992e+00 -1.3127639679387650e+00 1.3038079939335023e-01 + 6.8845781882758237e+00 -1.6786738508873733e+00 5.6458731132027207e-02 + 7.0879520829722988e+00 -2.0512685427321111e+00 -6.6802033701145347e-02 + 7.2319228768184836e+00 -2.4190341093764474e+00 -2.3026249785560493e-01 + 7.3191930700429193e+00 -2.7748599310325792e+00 -4.3075670427609936e-01 + 7.3544740462940688e+00 -3.1041187621125670e+00 -6.5249763497546098e-01 + 7.3891188386370175e+00 -3.3626905274497965e+00 -8.1008663489302335e-01 + id 14503 + loc 6.6270726919174194e-01 1.6222056746482849e-01 399 + blend 0.0000000000000000e+00 + interp 4.7668594118762131e-01:3.9304237335890302e-01:2.2723804119665680e-02:2.9071071078479849e-01:8.7097819872856475e-01:3.1798140519838236e-01:1.3125330984982604e+00:3.0085096017605306e-01:1.9942842583439802e+00:3.6222052220667478e-01:2.4822055614510350e+00:2.8623998771610909e-01:3.0008188475787656e+00:4.7668117432820944e-01:3.6576783969272766e+00 + CVs 20 + 2.2906418081710372e-01 2.9138615696498738e-01 2.2918241372963991e-01 + 4.4279497648083038e-01 5.7858075367374728e-01 4.4610971200802946e-01 + 6.3998848405085362e-01 8.6000975932947044e-01 6.8438255880185295e-01 + 8.2642391426640138e-01 1.1318356577299358e+00 9.5088825832013446e-01 + 1.0118055187784907e+00 1.3902161183589821e+00 1.2383276239642103e+00 + 1.2019585742397436e+00 1.6294625262844220e+00 1.5433862258064874e+00 + 1.3970764854482685e+00 1.8407082222039552e+00 1.8667808294822601e+00 + 1.5961707639202531e+00 2.0140674671428127e+00 2.2086576050783888e+00 + 1.8004849636255729e+00 2.1419063705342500e+00 2.5673362320124622e+00 + 2.0117756410837018e+00 2.2161822785882133e+00 2.9417254085649516e+00 + 2.2270722082829351e+00 2.2270186431511583e+00 3.3251804997598322e+00 + 2.4336706672136463e+00 2.1733985298854730e+00 3.6979082160666916e+00 + 2.6117820101823623e+00 2.0757283606536951e+00 4.0311376908160286e+00 + 2.7361541385867789e+00 1.9710083704915535e+00 4.2831203765913211e+00 + 2.7961203565924873e+00 1.8860891601285639e+00 4.4045644538385478e+00 + 2.8431096104618949e+00 1.8100686918813222e+00 4.3460969937297858e+00 + 2.9927091989546311e+00 1.6809320538379964e+00 4.0978037634456586e+00 + 3.2418869984601280e+00 1.5036016644179735e+00 3.9125712964157509e+00 + 3.2125446458553548e+00 1.5774725459173398e+00 4.1140693476686856e+00 + id 14504 + loc 5.9453207254409790e-01 6.7609691619873047e-01 378 + blend 0.0000000000000000e+00 + interp 4.1623279054497314e-01:2.5910224550300254e-01:2.0725341284979093e-01:2.6159454564423379e-01:1.0520774069174639e+00:2.5904080083711295e-01:1.9914825191290217e+00:3.2079265233299381e-01:2.4881912035888329e+00:2.7251107982823225e-01:3.0167969191340078e+00:4.1622862821706769e-01:3.9123159099134801e+00 + CVs 20 + 4.9548195610138568e-01 3.4058768941600726e-01 1.1362459383380669e-01 + 9.4151877532771322e-01 5.9317823830498817e-01 1.6650617244373445e-01 + 1.3941677612518124e+00 7.9229335820953795e-01 1.7370479995156030e-01 + 1.8763328855280341e+00 9.7038626843786324e-01 1.4985011701386985e-01 + 2.3814272314599454e+00 1.1469948605448823e+00 1.1729232958293179e-01 + 2.9073031049954814e+00 1.3247349492350060e+00 1.0411541650188927e-01 + 3.4575750740155353e+00 1.4900551567141382e+00 1.3865142686904108e-01 + 4.0259489233049495e+00 1.6246658570234311e+00 2.4458098843577647e-01 + 4.5868383208320171e+00 1.7109058337374397e+00 4.3219496676370617e-01 + 5.1080060680492263e+00 1.7345113034135944e+00 6.9071386123432132e-01 + 5.5722666231913909e+00 1.6834941369354515e+00 9.9752784124115468e-01 + 5.9769084329705295e+00 1.5409267466728589e+00 1.3315151399214482e+00 + 6.3150757638446251e+00 1.2923980308079228e+00 1.6715487945582932e+00 + 6.5773477853759852e+00 9.5414297529603154e-01 2.0003319420351922e+00 + 6.7726974195934169e+00 5.7854804538103943e-01 2.3158441480386216e+00 + 6.9281025660932816e+00 2.2209806865324921e-01 2.6160739875003109e+00 + 7.0819459567720475e+00 -9.6309228970727023e-02 2.8863079907224867e+00 + 7.2742252794083022e+00 -4.0387581744331102e-01 3.1206718623309921e+00 + 7.5037322769210064e+00 -7.4260604965483301e-01 3.3388255939142661e+00 + id 14505 + loc 8.9453345537185669e-01 1.8430484831333160e-01 400 + blend 0.0000000000000000e+00 + interp 5.4050431463315296e-01:2.8157431276110817e-01:1.8641455295581000e-01:5.4049890959000668e-01:9.9900165978744249e-01:2.5677006664067265e-01:1.9733258982211712e+00:3.8034305872253732e-01:2.8968967976399393e+00:2.5303231910819846e-01:3.4401781936678892e+00 + CVs 20 + 1.6377987343437833e-01 9.0972042874318995e-02 1.6566700295981190e-01 + 3.3542352639798956e-01 2.0354446166150339e-01 3.6003848188132553e-01 + 5.0691650594857673e-01 3.1889339630675856e-01 5.7046801755085108e-01 + 6.7492898558956282e-01 4.2486984399665001e-01 7.8973365610547153e-01 + 8.4061005091757490e-01 5.1788022409949608e-01 1.0174933978063831e+00 + 1.0045017237611822e+00 5.9559743143312749e-01 1.2529385070864658e+00 + 1.1648144503564415e+00 6.5524738392206561e-01 1.4944683793609532e+00 + 1.3165143460598405e+00 6.8904998865818079e-01 1.7384721750708620e+00 + 1.4535813533042725e+00 6.8449912832686566e-01 1.9775051865369910e+00 + 1.5729290938544733e+00 6.2999702929086954e-01 2.1953317539247816e+00 + 1.6741836052457333e+00 5.2182396000942455e-01 2.3660805963217584e+00 + 1.7584564722182925e+00 3.7059956305414166e-01 2.4736650776293212e+00 + 1.8306957904827850e+00 1.9301013122506250e-01 2.5289183692793742e+00 + 1.8972921548713999e+00 -1.2913700249508331e-03 2.5497756925593178e+00 + 1.9609915926981014e+00 -2.0628703934639181e-01 2.5441226897462386e+00 + 2.0178998212050394e+00 -4.1466014059136080e-01 2.5139039473300313e+00 + 2.0603162686416532e+00 -6.2024413775290366e-01 2.4645880024786608e+00 + 2.0898123753030577e+00 -8.2523500632383329e-01 2.4114557859189842e+00 + 2.1908851264885270e+00 -1.1293201151618293e+00 2.4610086614845024e+00 + id 14506 + loc 5.9284168481826782e-01 3.7123736739158630e-01 393 + blend 0.0000000000000000e+00 + interp 4.4281741536340657e-01:2.9646600167152198e-01:3.3246369767306094e-01:4.4281298718925294e-01:9.6518463806538612e-01:3.3756426068209472e-01:1.3494369206139984e+00:2.9135479141566989e-01:2.4951123067575338e+00:3.2921391486394169e-01:3.4024853224169855e+00 + CVs 20 + 3.1702240423632361e-01 3.5242073756581210e-01 1.2740689482548179e-01 + 6.2446937911328559e-01 7.2058628838699001e-01 2.5025379385015079e-01 + 9.0006001256415658e-01 1.0986685429447274e+00 3.7826855370933454e-01 + 1.1436011160168738e+00 1.4622956487390926e+00 5.3018866008633514e-01 + 1.3639941112775291e+00 1.7835100884660204e+00 7.2251837305352296e-01 + 1.5637335989885459e+00 2.0463653831643498e+00 9.5591540890130688e-01 + 1.7354946689048110e+00 2.2514561647624425e+00 1.2146597736690028e+00 + 1.8690521011483097e+00 2.4089615483729538e+00 1.4758819361694766e+00 + 1.9628607429523135e+00 2.5354142589849631e+00 1.7241657802295332e+00 + 2.0219953490785079e+00 2.6512815715928664e+00 1.9598355832830916e+00 + 2.0559283301651829e+00 2.7738023354732677e+00 2.1995315174232597e+00 + 2.0808134124026347e+00 2.9098011907714216e+00 2.4700619802962662e+00 + 2.1033854997169033e+00 3.0500261107079498e+00 2.8022151668153628e+00 + 2.1099439489785570e+00 3.1693424297671768e+00 3.2299753891604732e+00 + 2.0852226048660292e+00 3.1892137977566630e+00 3.7646160983066546e+00 + 2.0296987048262052e+00 2.9689727794311920e+00 4.3089096948759957e+00 + 2.0028096069426415e+00 2.4840686414166444e+00 4.6833600165447358e+00 + 2.1211601706015526e+00 1.9207582251842612e+00 4.7395965638024258e+00 + 2.4536338322188165e+00 1.5378795955789595e+00 4.3745194266984164e+00 + id 14507 + loc 6.7581015825271606e-01 4.1259935498237610e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1255641744855409e-01:3.1004666447977530e-01:3.3715135887372283e-01:2.9072988022903823e-01:9.9754839169312581e-01:2.5193812669773397e-01:1.9035870606323768e+00:4.1255229188437964e-01:2.5931191011871464e+00:2.3944759251541259e-01:3.3059790808898888e+00 + CVs 20 + -1.2307968132289353e-01 1.0167964527380434e-01 2.0565916169194387e-01 + -2.4439798035850935e-01 2.0518641030542972e-01 3.9011372559462554e-01 + -3.6683576559459696e-01 3.0948084288745992e-01 5.5241511571094060e-01 + -5.0184796048755098e-01 4.1564547219638215e-01 6.9432597943863039e-01 + -6.8683689589084440e-01 5.2485148068371157e-01 8.1173165761108645e-01 + -9.5162025761012070e-01 6.4915735172808331e-01 8.9239523835327783e-01 + -1.2623511210345431e+00 8.3267446875965700e-01 9.2906640434715704e-01 + -1.5273826465782352e+00 1.1075392724531918e+00 9.2245949521798043e-01 + -1.6931161946091957e+00 1.4621188215493877e+00 8.7982662650597709e-01 + -1.7583699691649883e+00 1.8970242125141545e+00 8.2264419427242652e-01 + -1.7026121023306489e+00 2.4205557221491860e+00 8.2038511814737092e-01 + -1.4893962303202564e+00 2.9226378586012611e+00 9.6799531529328331e-01 + -1.1563967434664686e+00 3.2556376307983728e+00 1.2468130156548809e+00 + -7.6344022274603995e-01 3.3848511548434677e+00 1.5751422069551209e+00 + -3.6047863153173010e-01 3.3233723392413137e+00 1.8850666066096058e+00 + 2.1141364785653316e-02 3.1072511556009981e+00 2.1711367487464193e+00 + 3.5886552381205417e-01 2.7541346691659006e+00 2.4649485715844546e+00 + 6.0247706673638390e-01 2.2733596087237533e+00 2.7256853955319893e+00 + 6.2158692363538592e-01 1.9910024389428698e+00 2.6651231177736339e+00 + id 14508 + loc 6.2298452854156494e-01 8.8409483432769775e-02 401 + blend 0.0000000000000000e+00 + interp 5.3490165480134855e-01:3.0353842587595942e-01:4.3520551907814675e-01:2.9740856175480296e-01:1.0657002237127444e+00:3.8396173141672324e-01:1.7213616406341301e+00:5.3489630578480052e-01:1.9902235869023746e+00:3.0232051310996166e-01:2.9505280770910773e+00:3.6725579217162391e-01:3.8302025497541381e+00 + CVs 20 + 4.5993874598435888e-02 2.8247087919649660e-01 2.3602584556960232e-01 + 1.0254067102416062e-01 5.7656372686212576e-01 4.7833994525161172e-01 + 1.6444693402952790e-01 8.8168849880689038e-01 7.3062684402444733e-01 + 2.3606578842424183e-01 1.1918703494055523e+00 1.0049362517332554e+00 + 3.3177565992908653e-01 1.4923830699135920e+00 1.3207850321782941e+00 + 4.6971474161290139e-01 1.7585249214788825e+00 1.6946926206194513e+00 + 6.6689270783822596e-01 1.9583852648346989e+00 2.1275823185185874e+00 + 9.2961546262459627e-01 2.0713783459793715e+00 2.5977063335846240e+00 + 1.2515971176886440e+00 2.0886870509328594e+00 3.0769573646335728e+00 + 1.6126776767586160e+00 1.9826971235087978e+00 3.5454873976045000e+00 + 1.9756836609949142e+00 1.7287700247037430e+00 3.9719568591580021e+00 + 2.3247539015304564e+00 1.3755589450269876e+00 4.3162825092969177e+00 + 2.6858229025859468e+00 9.9788272045332826e-01 4.5632787629697091e+00 + 3.0680316537190531e+00 6.1210630760058593e-01 4.7098162133170680e+00 + 3.4464049637219998e+00 2.1793086731187933e-01 4.7530369828938479e+00 + 3.8149357697807287e+00 -9.1049499957581381e-02 4.7144387088058126e+00 + 4.1914873913478550e+00 -1.3690212267234139e-01 4.6436222160051503e+00 + 4.5000858996218573e+00 4.1934244572705781e-02 4.5622424218013480e+00 + 4.8638795137873361e+00 -5.4353915387562346e-02 4.4867696737676832e+00 + id 14509 + loc 7.7638298273086548e-01 2.0928145945072174e-01 412 + blend 0.0000000000000000e+00 + interp 5.0401376066067127e-01:3.4802691405058089e-01:5.6444080790232198e-01:2.8571839149858003e-01:1.1123858902290449e+00:4.0793873161823818e-01:1.9299245444569477e+00:2.5063427245507996e-01:2.3455206893670804e+00:5.0400872052306467e-01:3.0457253894520488e+00:2.8762103336810857e-01:3.8906477755311242e+00 + CVs 20 + -5.5085783882380102e-01 1.3859302025662423e-01 2.3094272306859129e-01 + -9.4180062220371086e-01 1.9716076797666968e-01 4.0928397281035095e-01 + -1.2910625751150502e+00 2.1962119995554991e-01 5.6709258729035261e-01 + -1.6455517774280715e+00 2.2248538859594102e-01 7.1404251364408755e-01 + -2.0000596810006552e+00 2.0497989145927098e-01 8.4458185330805047e-01 + -2.3485585201347949e+00 1.6874521429813161e-01 9.5352817366250386e-01 + -2.6847070381632463e+00 1.1798491663954080e-01 1.0367656960974152e+00 + -3.0022019619270721e+00 5.8193829972539302e-02 1.0925169122824290e+00 + -3.2946055516248052e+00 -5.4159014354095980e-03 1.1220462412588155e+00 + -3.5569480267487639e+00 -6.8005569581886638e-02 1.1287056814940044e+00 + -3.7946613530036060e+00 -1.2355626840350120e-01 1.1144885987203355e+00 + -4.0344740001661341e+00 -1.6978755488978892e-01 1.0773151490026460e+00 + -4.3049048060572446e+00 -2.2275104709912008e-01 1.0239725563398503e+00 + -4.6033908619236019e+00 -3.0805273237445729e-01 9.7992049403388959e-01 + -4.9137214862072991e+00 -4.3590124587504886e-01 9.6688824619415137e-01 + -5.2276797081171953e+00 -6.0713148895860858e-01 9.9410781253837133e-01 + -5.5319895440752616e+00 -8.1650451737800944e-01 1.0686400225345138e+00 + -5.7979115790755609e+00 -1.0402086132572097e+00 1.1954454455460621e+00 + -5.9515867114644889e+00 -1.2146576576699921e+00 1.3669822596692784e+00 + id 14510 + loc 2.3748600482940674e-01 1.9130268692970276e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4883376628091892e-01:4.2445765045146505e-01:6.2647171816225922e-02:3.7245261643334870e-01:7.0688168794452033e-01:4.1216139413593500e-01:1.0349313342602566e+00:3.2432046843455986e-01:1.6261069554854735e+00:4.4882927794325611e-01:2.0362719339110531e+00:3.9055857606563260e-01:2.9198493162023613e+00:2.9558274515415761e-01:3.2532352746080222e+00 + CVs 20 + 2.0274949850206697e-01 4.4881108422201599e-01 1.1129702663095872e-01 + 3.1318149817941782e-01 8.0020818205280686e-01 1.5532815154656904e-01 + 3.9206393302435649e-01 1.1083579032307935e+00 1.7725504242506010e-01 + 4.6738485596317614e-01 1.3964183684973950e+00 1.9611578141799207e-01 + 5.4032247992443527e-01 1.6675390376670887e+00 2.0925287729613468e-01 + 6.1078151753272614e-01 1.9304467399757663e+00 2.1587530877730365e-01 + 6.6603109934473936e-01 2.2034819522742533e+00 2.1266733544274208e-01 + 6.6927729120717849e-01 2.5006577090399755e+00 1.9321717695168950e-01 + 5.7423098873068512e-01 2.8027059488208170e+00 1.5745014913226041e-01 + 3.6549606289042158e-01 3.0579355047689871e+00 1.1618622402779044e-01 + 6.7035688186841469e-02 3.2273357629857524e+00 8.1172016401343638e-02 + -2.9144917063744002e-01 3.3006108547131134e+00 5.8437995953110611e-02 + -6.9162525133908881e-01 3.2794010424454987e+00 4.9835317525225520e-02 + -1.1255924958363033e+00 3.1633318009972076e+00 5.3916688150570879e-02 + -1.6007863519680861e+00 2.9323449128148265e+00 6.3684963355040647e-02 + -2.1226759040202814e+00 2.4975997848020954e+00 7.2632281809546145e-02 + -2.5461033966438276e+00 1.7471356587524078e+00 9.0719909513896774e-02 + -2.6521082768706719e+00 8.9982800661063234e-01 1.2399892031095205e-01 + -2.6512461388411124e+00 4.2916314996701088e-01 1.3655644469537831e-01 + id 14511 + loc 4.4307774305343628e-01 2.5734385848045349e-01 400 + blend 0.0000000000000000e+00 + interp 3.6535435613771783e-01:2.4595275709822492e-01:4.2802642048919204e-01:3.6535070259415647e-01:1.1122239798493048e+00:2.5287994700287958e-01:2.0649286218116454e+00:2.8022321408096224e-01:2.9903296889881501e+00:3.0689551508991791e-01:3.6005912084691420e+00 + CVs 20 + -1.8920016907057413e-01 3.2342310324249379e-01 1.3701703060211051e-01 + -3.7600593562184043e-01 6.2536969412203314e-01 3.0399598659485716e-01 + -5.7993141634123357e-01 9.0252589789981363e-01 4.7902789438325971e-01 + -8.0740374254486080e-01 1.1485231982218782e+00 6.5765851021832755e-01 + -1.0554339160203656e+00 1.3531712749781690e+00 8.4349432892526321e-01 + -1.3163283441383311e+00 1.5039398025384529e+00 1.0389681752053259e+00 + -1.5765723486391332e+00 1.5879109940940779e+00 1.2423783047767585e+00 + -1.8153722156997856e+00 1.5984200297042062e+00 1.4462436690764653e+00 + -2.0152142695816861e+00 1.5433200842564263e+00 1.6360297171260341e+00 + -2.1688119707215288e+00 1.4412310491990310e+00 1.7952660633477511e+00 + -2.2755432591757621e+00 1.3114761002094901e+00 1.9170275227085258e+00 + -2.3498456369758225e+00 1.1532654433918488e+00 2.0037880592067356e+00 + -2.3901624039745690e+00 9.7334090597397704e-01 2.0870197340183783e+00 + -2.3979449865585081e+00 7.8960051966222178e-01 2.1668362158945298e+00 + -2.3815697396647506e+00 6.1232053574389633e-01 2.2361881450330303e+00 + -2.3474659791331267e+00 3.7016140160997923e-01 2.3016399259997682e+00 + -2.3308197567668811e+00 -1.4712203147268132e-01 2.4037414751143489e+00 + -2.5662740453527619e+00 -1.0253699370650746e+00 2.6391142101970457e+00 + -2.6204023873506186e+00 -1.1809144469832966e+00 2.6748836310908382e+00 + id 14512 + loc 6.8286603689193726e-01 2.2033187747001648e-01 378 + blend 0.0000000000000000e+00 + interp 5.2340430215938027e-01:3.0883506659538473e-01:3.1973893576269274e-01:3.0686808975406382e-01:1.0982138567409339e+00:5.2339906811635872e-01:1.9547482189606606e+00:3.0385528009262347e-01:2.7920110832807130e+00:3.8766450416142095e-01:3.9058568281619070e+00 + CVs 20 + -3.4725925221769527e-01 3.1016092993881783e-01 -6.2379028527952379e-02 + -6.7362495995354932e-01 5.9111808713880065e-01 -1.1763915580767811e-01 + -1.0008288863987775e+00 8.4798037128672998e-01 -1.7310970520414859e-01 + -1.3351154121145983e+00 1.0896557433742360e+00 -2.3967349492467876e-01 + -1.6668214073684329e+00 1.3173257010620076e+00 -3.3084846335475465e-01 + -1.9896001415733537e+00 1.5218294109401467e+00 -4.5816568273250957e-01 + -2.3017625380044349e+00 1.6856488304816921e+00 -6.2699062801002881e-01 + -2.5975433159265253e+00 1.7936885267966218e+00 -8.3334341431814618e-01 + -2.8662008348778296e+00 1.8409519411404194e+00 -1.0654929035717149e+00 + -3.0980191235911452e+00 1.8322325445701138e+00 -1.3071020712193779e+00 + -3.2857465794589387e+00 1.7805727006506946e+00 -1.5361670486190024e+00 + -3.4261759716521416e+00 1.7071974657427300e+00 -1.7309667220276270e+00 + -3.5319835180208479e+00 1.6222793555412867e+00 -1.8906236719675893e+00 + -3.6303169592150910e+00 1.4861379595162680e+00 -2.0337422636310034e+00 + -3.7382535361043878e+00 1.2483728987055405e+00 -2.1687655995277542e+00 + -3.8676791640553114e+00 9.2009421902090605e-01 -2.3112298811317835e+00 + -4.0314829040422859e+00 5.5232001864713487e-01 -2.4911125231246229e+00 + -4.2364534431766394e+00 2.2035154715338878e-01 -2.6928464912596035e+00 + -4.4442401066677188e+00 1.1017033120808151e-01 -2.7735821172596982e+00 + id 14513 + loc 5.0000715255737305e-01 4.9112743139266968e-01 393 + blend 0.0000000000000000e+00 + interp 3.9338812993163680e-01:3.8998870445271894e-01:1.5580131782244488e-02:2.8965241360984412e-01:8.9866077192646254e-01:2.8245930172334355e-01:1.9990438991514470e+00:3.9338419605033748e-01:2.6006703509698701e+00:3.0752978792483904e-01:3.0275699830779041e+00 + CVs 20 + 1.3141157162134859e-01 2.9570105947947523e-01 1.8799359721483916e-01 + 2.8598662575883993e-01 6.3297198906780294e-01 3.7040984928916015e-01 + 4.2695859292745081e-01 1.0130289048239522e+00 5.3880694638333437e-01 + 5.4626827619706986e-01 1.4255657583415045e+00 7.0723055227296472e-01 + 6.5696013742544423e-01 1.8408264439647288e+00 9.0953959867465095e-01 + 7.5880493088612955e-01 2.2326946980397819e+00 1.1708964127012769e+00 + 8.4043534371572060e-01 2.5965370442276132e+00 1.5035843220809926e+00 + 9.0389326875306875e-01 2.9300679778446392e+00 1.9235950229296885e+00 + 9.6884753017290970e-01 3.2125977610802754e+00 2.4426912515981143e+00 + 1.0586500157813983e+00 3.4103021803156572e+00 3.0572240799318529e+00 + 1.1909246982094974e+00 3.4858727329098378e+00 3.7464151219055259e+00 + 1.3728077095453863e+00 3.4025581551319508e+00 4.4730183904170673e+00 + 1.6081741657931874e+00 3.1218885638139886e+00 5.1921009013403197e+00 + 1.9169704056662900e+00 2.5902847087005965e+00 5.8416441376990313e+00 + 2.3311279045723730e+00 1.7905664400329542e+00 6.2908787749963500e+00 + 2.8764193817490775e+00 8.6569998232928569e-01 6.3990471372946196e+00 + 3.5303803348872154e+00 6.6853666780723353e-02 6.1749491350671404e+00 + 4.1530335223831996e+00 -4.4991985223188546e-01 5.8288352648511994e+00 + 4.4884159933355878e+00 -6.9630857227777199e-01 5.7297409274209148e+00 + id 14514 + loc 7.2841304540634155e-01 3.5716211795806885e-01 399 + blend 0.0000000000000000e+00 + interp 4.2589390923151443e-01:3.1877241860678346e-01:9.3376549478271564e-02:2.6514341666633723e-01:8.7160938358372742e-01:2.8114641123912959e-01:1.4869901599047624e+00:4.2588965029242215e-01:2.1379713800401605e+00:2.8904215670212230e-01:2.9096373371666875e+00:3.0207213920302195e-01:3.5440158768482002e+00 + CVs 20 + 2.6361479902530038e-01 3.4751262436784275e-01 1.8792517873228365e-01 + 5.2835843055189247e-01 6.9215149613845606e-01 3.9479481551079043e-01 + 7.7635699079204312e-01 1.0217994325019939e+00 6.6372507551357929e-01 + 1.0069437798905434e+00 1.3192200354996380e+00 9.8359981711238631e-01 + 1.2311621854205412e+00 1.5751705089899199e+00 1.3313655907479240e+00 + 1.4572763557371660e+00 1.7803530781379957e+00 1.6926450151450931e+00 + 1.6883133467752667e+00 1.9208549535338713e+00 2.0549969926143321e+00 + 1.9226072120897262e+00 1.9805634313446530e+00 2.4008117229096824e+00 + 2.1519868541414322e+00 1.9484853405000102e+00 2.7067116195313536e+00 + 2.3604479740438542e+00 1.8275208139949368e+00 2.9454726983938984e+00 + 2.5264749820868300e+00 1.6440544796127745e+00 3.0900416851168542e+00 + 2.6361423540487467e+00 1.4423511656357693e+00 3.1393600449144889e+00 + 2.6980057357499430e+00 1.2398938611599792e+00 3.1311878872228363e+00 + 2.7398854714197234e+00 1.0057432487649294e+00 3.1090781076811052e+00 + 2.8095967657980250e+00 6.7557536044353705e-01 3.1133055146639350e+00 + 2.9699817752374535e+00 2.0202223347802417e-01 3.2063527036551895e+00 + 3.2678066763824907e+00 -4.0039241601928321e-01 3.5077055461599471e+00 + 3.6050916973488119e+00 -9.9985754224720236e-01 4.1091168147287549e+00 + 3.5965838884190644e+00 -1.2298834833044392e+00 4.2917007045792523e+00 + id 14515 + loc 5.7487446069717407e-01 8.5125970840454102e-01 1069 + blend 0.0000000000000000e+00 + interp 3.0956078599261022e-01:3.0955769038475028e-01:2.4053621348076881e-01:2.8648171891220803e-01:1.0950713453535073e+00:2.9297116046878552e-01:2.2697328156062815e+00:2.6269101145272306e-01:3.1946534105570574e+00 + CVs 20 + 2.7087275334617322e-01 2.0857884561994788e-01 -2.0795590729473271e-01 + 5.3233599910364549e-01 4.2593823171170797e-01 -4.2291731517572567e-01 + 8.1164955358920354e-01 6.0351682441555099e-01 -6.1596111229328288e-01 + 1.1176650116392206e+00 7.1082302768928041e-01 -7.7466405998545540e-01 + 1.4523631623422708e+00 7.6708046197360136e-01 -9.1189342245882798e-01 + 1.8301915287045185e+00 8.4057610914597691e-01 -1.0570327755408608e+00 + 2.2418673906092543e+00 1.0085251854818631e+00 -1.2267062505236792e+00 + 2.6288778708130440e+00 1.3133344152114310e+00 -1.4154549367319325e+00 + 2.9057244978663963e+00 1.7283716418117927e+00 -1.6327065405536927e+00 + 2.9888946509804057e+00 2.1443696454244363e+00 -1.9390847840221461e+00 + 2.8330819261560052e+00 2.3554650441483882e+00 -2.3765265721156341e+00 + 2.5564326869233835e+00 2.2112476710000193e+00 -2.7964570444225636e+00 + 2.3532589622409295e+00 1.8578679395578352e+00 -3.0555152579839224e+00 + 2.2932461620098019e+00 1.4503455103626497e+00 -3.1697644384542651e+00 + 2.3801860184284074e+00 1.0907939001811719e+00 -3.1937118713083579e+00 + 2.5683790696756841e+00 8.0625210720818952e-01 -3.1582067112026735e+00 + 2.8170882715687133e+00 5.7615035756531063e-01 -3.0272448539611250e+00 + 3.0644394740845384e+00 3.9571361652143372e-01 -2.8041172295584871e+00 + 3.0995887075601982e+00 1.3576314389293545e-01 -2.8458970677520301e+00 + id 14516 + loc 2.8189682960510254e-01 7.3544543981552124e-01 404 + blend 0.0000000000000000e+00 + interp 4.6900755697642138e-01:2.7651803736463476e-01:8.5412010890680767e-01:2.6522755343430837e-01:1.3550764031453566e+00:3.0879226723247083e-01:2.0171189925127138e+00:4.1095220531642751e-01:2.8785160746154119e+00:4.6900286690085163e-01:3.1459983768451805e+00:3.9139699416471985e-01:3.9951264146408820e+00 + CVs 20 + -2.0288470445217619e-02 -5.5600275005185211e-03 2.0202766188001625e-02 + -3.5347903194078094e-02 -5.8854737539261945e-03 4.4439881366828360e-02 + -3.5337151095693124e-02 -2.6529821966881188e-03 7.9148186782032184e-02 + -2.1474460262382960e-02 4.8024545426362079e-03 1.2281717562564319e-01 + 3.9365594855952854e-03 1.7593604486779921e-02 1.7284258828311705e-01 + 4.1921685527009617e-02 3.7243019332886436e-02 2.2829765517474435e-01 + 9.3640490236192767e-02 6.5168596181263472e-02 2.8739695556316325e-01 + 1.6008077247552366e-01 1.0266408030986250e-01 3.4756682697956148e-01 + 2.4179078134207121e-01 1.5105866307112778e-01 4.0557064522777597e-01 + 3.3865857393195486e-01 2.1152411469310883e-01 4.5747494955864687e-01 + 4.4968268337275075e-01 2.8441770754615348e-01 4.9885467636769615e-01 + 5.7288650459686952e-01 3.6885884562065840e-01 5.2538922635115537e-01 + 7.0527058597043468e-01 4.6231368474227652e-01 5.3396683790542565e-01 + 8.4331458137291537e-01 5.6104351576581091e-01 5.2324425374310901e-01 + 9.8337150841072885e-01 6.6078989163024726e-01 4.9384272947192642e-01 + 1.1223407157570433e+00 7.5665969030365754e-01 4.4789587782788493e-01 + 1.2577431308273423e+00 8.4402854542553496e-01 3.8871267960699224e-01 + 1.3882259097932854e+00 9.1755840206964512e-01 3.2097627383722005e-01 + 1.4971125262539218e+00 9.9181842999184533e-01 3.0398216176932036e-01 + id 14517 + loc 9.2477893829345703e-01 7.8282272815704346e-01 401 + blend 0.0000000000000000e+00 + interp 4.2350335812570372e-01:4.0455721491323177e-01:1.6392905389623236e-02:3.0549557137679223e-01:7.1940316316609654e-01:2.8124032794574433e-01:1.5996647203245591e+00:3.0718155668650660e-01:2.3820187898489156e+00:4.2349912309212251e-01:2.9063382873321064e+00:2.8950345042959919e-01:3.6254407213568691e+00 + CVs 20 + -3.8562241442253953e-02 3.3178993755658642e-01 -3.0530139232308406e-01 + -4.5019679809963603e-02 6.7656241793259619e-01 -5.9473563654099859e-01 + -1.8584193897147383e-02 1.0294186691608893e+00 -9.1159729819235591e-01 + 3.4553674332142681e-02 1.3740557019864830e+00 -1.2829199806278881e+00 + 9.4227411250822568e-02 1.6889056344108071e+00 -1.7257207411714557e+00 + 1.1780469456535603e-01 1.9571914477021100e+00 -2.2474701834509370e+00 + 4.8948839915901265e-02 2.1610626374245325e+00 -2.8352057433816698e+00 + -1.5638645013362473e-01 2.2741873501980328e+00 -3.4487528262500815e+00 + -5.0609722620117925e-01 2.2715918915466902e+00 -4.0249162723735301e+00 + -9.6795220537337423e-01 2.1468479036702530e+00 -4.5043292175324652e+00 + -1.4887451976157466e+00 1.9107041287691215e+00 -4.8562855726187326e+00 + -2.0136111803621226e+00 1.5803204901184431e+00 -5.0838165542607490e+00 + -2.5121102819101178e+00 1.1724526262847799e+00 -5.2117199473353422e+00 + -2.9864935285439427e+00 7.0496118488108539e-01 -5.2478492326400650e+00 + -3.4450662925461253e+00 2.0451536926757696e-01 -5.2016334446858794e+00 + -3.9084513853575764e+00 -3.1769401277610487e-01 -5.1764461708971812e+00 + -4.4044512147915906e+00 -8.6676587980094966e-01 -5.3291409506024578e+00 + -4.9082102585804819e+00 -1.4214255301937762e+00 -5.6497501644071839e+00 + -5.4151866008300358e+00 -1.9686365944773403e+00 -5.8182507303247002e+00 + id 14518 + loc 6.3391613960266113e-01 1.3126380741596222e-01 412 + blend 0.0000000000000000e+00 + interp 2.9840376980524036e-01:2.7240880136119794e-01:1.0035435362747134e+00:2.6523060321164416e-01:2.0317624175307736e+00:2.8280481816638070e-01:3.0140815367534279e+00:2.9840078576754231e-01:3.9301388400618400e+00 + CVs 20 + -5.1073837147017176e-01 1.3341188107167878e-01 2.1143110484418015e-01 + -8.8074573686149904e-01 1.8952546231090414e-01 4.0025655449567821e-01 + -1.2175925608275195e+00 2.1285977604589795e-01 5.9123008312985526e-01 + -1.5654808904345334e+00 2.2137857748378131e-01 7.9562814862976383e-01 + -1.9217481351446724e+00 2.1437418958052101e-01 1.0111387752684180e+00 + -2.2852050695232329e+00 1.9210608078230174e-01 1.2321975350581562e+00 + -2.6561442739308214e+00 1.5578933888127300e-01 1.4491762151576910e+00 + -3.0343123085938211e+00 1.0636914552530685e-01 1.6504983528378820e+00 + -3.4183584098859114e+00 4.4491770768820604e-02 1.8252216546399145e+00 + -3.8045712915698822e+00 -2.8355076025121662e-02 1.9644004242607553e+00 + -4.1770845610567449e+00 -1.1211932412535885e-01 2.0672340711472756e+00 + -4.5000387911922246e+00 -2.1230975368753913e-01 2.1546455854234265e+00 + -4.7466175981637777e+00 -3.3115738832682506e-01 2.2579958911473454e+00 + -4.9329114950564668e+00 -4.6324480638969678e-01 2.3868810127930677e+00 + -5.0816038934291452e+00 -6.0469508300243113e-01 2.5385594652793206e+00 + -5.1867298978614116e+00 -7.4230477440427589e-01 2.7102895214964819e+00 + -5.2386612616299661e+00 -8.5596481921284351e-01 2.8941861064610821e+00 + -5.2528062073435144e+00 -9.4451406571706431e-01 3.0820378855050752e+00 + -5.3270102560243471e+00 -1.0994689252961880e+00 3.3041417126250354e+00 + id 14519 + loc 8.3760678768157959e-01 2.3592649400234222e-01 399 + blend 0.0000000000000000e+00 + interp 4.6820043039821774e-01:3.0372689264516872e-01:8.2712261137585408e-01:3.1052551541242618e-01:1.7965547757200331e+00:3.2517266233030795e-01:2.5916632920399971e+00:4.6819574839391376e-01:3.0267371118849371e+00:2.9161196456445182e-01:3.8798132490867623e+00 + CVs 20 + 2.7159182069207577e-01 3.1134465772662401e-01 2.0572554520374647e-01 + 5.1168980758071059e-01 6.0279341299554023e-01 4.0456353839859827e-01 + 7.1753417908627926e-01 8.7281084900179540e-01 6.3793820320802008e-01 + 8.9129076313548139e-01 1.1171047461189616e+00 9.0836390438248504e-01 + 1.0400735160212173e+00 1.3343507272873478e+00 1.2027712867889280e+00 + 1.1695415423047513e+00 1.5239080190680550e+00 1.5099065906611506e+00 + 1.2814652034417437e+00 1.6851206670081651e+00 1.8205224054000830e+00 + 1.3751311059377140e+00 1.8206060743087189e+00 2.1273654004544533e+00 + 1.4504573688359579e+00 1.9388286385023572e+00 2.4285186333321009e+00 + 1.5115541206472718e+00 2.0527146221648374e+00 2.7316569974424150e+00 + 1.5673856122561405e+00 2.1666870827067344e+00 3.0526655217058805e+00 + 1.6237186926806548e+00 2.2555798540638063e+00 3.3961141844327591e+00 + 1.6720502308322243e+00 2.2814352346200213e+00 3.7335324318671410e+00 + 1.6926854683702308e+00 2.2224731636748691e+00 4.0065501821498053e+00 + 1.6754683854341974e+00 2.0676004934113048e+00 4.1401379972896901e+00 + 1.6765360959420403e+00 1.8227410975315796e+00 4.0863257740061059e+00 + 1.8334477998199834e+00 1.4933184496966161e+00 3.8265274838908416e+00 + 2.2060035692846776e+00 1.0811543743517951e+00 3.5232460967005643e+00 + 2.1312635488046605e+00 1.1004029981904133e+00 3.7849612322974782e+00 + id 14520 + loc 8.6552768945693970e-01 4.8441338539123535e-01 378 + blend 0.0000000000000000e+00 + interp 3.5814035588237836e-01:2.5846714949021909e-01:9.7758758710697835e-02:2.5107502916465352e-01:9.7264877296103758e-01:2.6834810638824591e-01:1.8249901379263291e+00:3.5813677447881953e-01:2.2385122975971692e+00:2.5905355246171402e-01:2.9559164340748341e+00:2.9539371949200471e-01:3.6011602918743595e+00 + CVs 20 + -4.5199087989398812e-01 3.4511895453551811e-01 3.4111142493344002e-02 + -8.9070297488320160e-01 6.4151484048485685e-01 9.9269248444672359e-02 + -1.3540367819017973e+00 9.0142492455079781e-01 2.0057756227201523e-01 + -1.8551289025169040e+00 1.1500208834896091e+00 3.2292036571710964e-01 + -2.3875601526221071e+00 1.3950512063900116e+00 4.3321931348286208e-01 + -2.9505434048446268e+00 1.6178286773957267e+00 4.9822826106823392e-01 + -3.5411261622044643e+00 1.7910368574044795e+00 4.9505877336026771e-01 + -4.1436085083307130e+00 1.8948356380043965e+00 4.1347587770591943e-01 + -4.7316437010262185e+00 1.9131626210369526e+00 2.6030376171356939e-01 + -5.2785419043991650e+00 1.8298021892503893e+00 6.2464920487601217e-02 + -5.7607115762673162e+00 1.6270479033328971e+00 -1.4497779880922590e-01 + -6.1532985237833282e+00 1.2923333715852663e+00 -3.3211102938590076e-01 + -6.4490437590068179e+00 8.4954851151782940e-01 -4.8748618445273173e-01 + -6.7114364169690912e+00 3.6486289039150144e-01 -6.5024035769346222e-01 + -7.0332711250393674e+00 -1.0190431201173267e-01 -8.7303694016388222e-01 + -7.4601159821629501e+00 -4.8139558988146636e-01 -1.1256851458915986e+00 + -7.9821636136385719e+00 -7.2476789122127938e-01 -1.3091016343400337e+00 + -8.5319648625041360e+00 -8.9423100994726701e-01 -1.4318381685055988e+00 + -8.9988334608962077e+00 -1.2083388598493294e+00 -1.6804332176260921e+00 + id 14521 + loc 6.6744081676006317e-02 8.5600547492504120e-02 400 + blend 0.0000000000000000e+00 + interp 4.0891531937167480e-01:4.0190877809684333e-01:1.6277814580425587e-01:3.7556162578113306e-01:9.6940227647538701e-01:2.8773309929404473e-01:1.1648461680578961e+00:4.0891123021848108e-01:1.9927959911688728e+00:2.6021968683954738e-01:2.6373125290049066e+00:2.8969653738020562e-01:3.5245706316155956e+00 + CVs 20 + -1.8749097348756141e-02 4.2116781174908291e-01 2.4543573872941876e-01 + -8.4334212032529637e-02 8.4589959646551649e-01 4.8995499830956485e-01 + -1.9357499199278078e-01 1.2599412796130081e+00 7.3336946400206648e-01 + -3.5277138016712806e-01 1.6519071178620424e+00 9.8956528506785113e-01 + -5.7246468713960263e-01 2.0067071005308037e+00 1.2764138973093584e+00 + -8.6131557178528828e-01 2.2987934860867818e+00 1.6045980543033269e+00 + -1.2174462181034797e+00 2.4956727612976022e+00 1.9698300057633058e+00 + -1.6242368969985104e+00 2.5703662219621930e+00 2.3516416744297555e+00 + -2.0518623461265602e+00 2.5173628803383554e+00 2.7179255758043990e+00 + -2.4696710416652197e+00 2.3596311103997962e+00 3.0381331270210046e+00 + -2.8614302295379037e+00 2.1382968563828997e+00 3.2865725253574558e+00 + -3.2249053222279151e+00 1.9003513338153744e+00 3.4391962354593031e+00 + -3.5629444523806790e+00 1.6694003557308783e+00 3.4922973871873886e+00 + -3.8767052566913653e+00 1.4378576484027266e+00 3.4657891878402385e+00 + -4.1489319727224467e+00 1.2523898116812129e+00 3.3663209183687544e+00 + -4.2980394776801258e+00 1.2900617017860445e+00 3.1743498877639729e+00 + -4.0805918767391063e+00 1.6419506826795431e+00 2.8640713315886428e+00 + -3.6703859841760123e+00 1.8316246770571962e+00 2.5379665319767755e+00 + -3.9596870479048745e+00 1.8660182384851169e+00 2.3522864100882597e+00 + id 14522 + loc 4.6837091445922852e-01 2.6213505864143372e-01 393 + blend 0.0000000000000000e+00 + interp 4.1385439852189176e-01:3.0549989576215808e-01:2.7295938284364307e-01:2.7817805159796161e-01:1.0922003962844926e+00:2.8867842695044010e-01:2.0114764244969772e+00:4.1385025997790659e-01:2.9604704150098797e+00:2.8364093465923379e-01:3.2904430309269754e+00 + CVs 20 + -2.6985746552243450e-02 5.0431397441932002e-01 3.4736093687658537e-01 + -5.8528205785500109e-02 1.0273028967031677e+00 6.6031126945899499e-01 + -1.2089305518927920e-01 1.5704640802636063e+00 9.3416450675994933e-01 + -2.7577737751872988e-01 2.1157541059654950e+00 1.1906020733511677e+00 + -5.5647951538669926e-01 2.6119325231908590e+00 1.4234554319318473e+00 + -9.3221134031505670e-01 3.0202969066608896e+00 1.6051995125731542e+00 + -1.3667037741881809e+00 3.3385482802882409e+00 1.7322223956533847e+00 + -1.8509229103059881e+00 3.5726124043690977e+00 1.8241356070591710e+00 + -2.3841628062787565e+00 3.7187867213199737e+00 1.9021185408777179e+00 + -2.9591797670637034e+00 3.7647293888137261e+00 1.9820009857564780e+00 + -3.5563097131496590e+00 3.6949707889621877e+00 2.0727368339304597e+00 + -4.1399621580783146e+00 3.4997136411771166e+00 2.1716563889431857e+00 + -4.6695410824556811e+00 3.1855241207815910e+00 2.2658705735077138e+00 + -5.1237258440719167e+00 2.7671184600928891e+00 2.3498991489981513e+00 + -5.4933337126204034e+00 2.2474890618221699e+00 2.4351386057850721e+00 + -5.7531149919193858e+00 1.6193065718914856e+00 2.5402227693479782e+00 + -5.8626439313018368e+00 8.9366820373498213e-01 2.6866744727210898e+00 + -5.8149848237033970e+00 1.6836969722613260e-01 2.8783263757641544e+00 + -5.7457890756847174e+00 -1.8556729800062444e-01 2.9319511590051617e+00 + id 14523 + loc 6.5627884864807129e-01 2.5506335496902466e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0893992058178502e-01:2.6439188025711585e-01:4.7717059825806951e-01:2.8394014879635754e-01:1.0532971138589555e+00:4.0893583118257920e-01:1.7694547344679172e+00:2.6377604461330090e-01:2.4444212242698571e+00:2.7580498632242845e-01:3.3998740319108691e+00 + CVs 20 + -6.1401460855604773e-02 1.8279265607796744e-01 2.0923930714417976e-01 + -1.2768828672776372e-01 3.5821898042695383e-01 3.9670613354123913e-01 + -1.9555156932176759e-01 5.3325092401365481e-01 5.6311356477705288e-01 + -2.7179187999559706e-01 7.1228320525697408e-01 7.0973451461700743e-01 + -3.8302576471170252e-01 8.9108891121107059e-01 8.3193740769602265e-01 + -5.3344938713346224e-01 1.0612429123477360e+00 9.1672855387602858e-01 + -6.8826968604254279e-01 1.2368599594812566e+00 9.5937368678012669e-01 + -7.9692299021962587e-01 1.4488507811365587e+00 9.6377382737426287e-01 + -8.3104846966185320e-01 1.7065470058500627e+00 9.3610930158102779e-01 + -7.9101410309433218e-01 2.0058051113493574e+00 8.9085803572601285e-01 + -6.6814248233485463e-01 2.3344057423713633e+00 8.7170663599518372e-01 + -4.4532665309198571e-01 2.6179929243611193e+00 9.3597369261901597e-01 + -1.4800835859313022e-01 2.7682706491683939e+00 1.0723113565778886e+00 + 1.8566276022836781e-01 2.7570770236409037e+00 1.2291235310507678e+00 + 5.1761111214328615e-01 2.5861500498888725e+00 1.3659685900138387e+00 + 8.0717604978298740e-01 2.2998531966517399e+00 1.4645791650630384e+00 + 1.0273006335254640e+00 1.9741671993087500e+00 1.5137416041337399e+00 + 1.1714054784361005e+00 1.6651584148742986e+00 1.4936373428023288e+00 + 1.1764696425960013e+00 1.3677843223079489e+00 1.3088400670034144e+00 + id 14524 + loc 9.4962403178215027e-02 2.3948690295219421e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4883376628091892e-01:4.4882927794325611e-01:4.8617330308838858e-02:3.3816834913467669e-01:7.3193340204265067e-01:4.1053708997677524e-01:1.0928331724335230e+00:3.2975592921692409e-01:1.7990445064546374e+00:3.8526671820538927e-01:2.0193638501916160e+00:2.8513065787889119e-01:2.9903922537430518e+00:4.3860161845446249e-01:3.5956803967937043e+00 + CVs 20 + 2.1749778209821907e-01 4.4668743612119760e-01 1.1724659879342464e-01 + 3.2265208349198476e-01 7.9347002934321642e-01 1.6850481169759149e-01 + 3.8245098990409138e-01 1.0940060044408237e+00 1.8958091790560289e-01 + 4.3724749645357153e-01 1.3677814391088465e+00 2.0331969600753758e-01 + 4.9233780386545212e-01 1.6058866922114681e+00 2.0994139176295770e-01 + 5.5965088195702062e-01 1.7992173204923931e+00 2.1293394991356329e-01 + 6.5669704592668054e-01 1.9538945521482749e+00 2.1564636640957779e-01 + 7.9391560897944591e-01 2.1086239233341240e+00 2.1347175246924172e-01 + 9.3809102456242666e-01 2.3213452125673593e+00 1.9275157075194976e-01 + 1.0016279880340906e+00 2.5957112848225732e+00 1.4759360905107199e-01 + 9.3634950545336615e-01 2.8611960419434412e+00 9.0911479259208394e-02 + 7.6401850119228731e-01 3.0655801023274272e+00 3.7144519109235774e-02 + 5.1595370265237328e-01 3.1988506904813239e+00 -5.8597114484163493e-03 + 2.0797665327957238e-01 3.2677456003803140e+00 -3.3163461533646688e-02 + -1.6525385030648243e-01 3.2806152348714095e+00 -4.3152140034063979e-02 + -6.5272837610621193e-01 3.2258584317331458e+00 -4.2699766552677543e-02 + -1.3119035607715144e+00 2.9944560291196964e+00 -3.6210008679635863e-02 + -1.9518768778902325e+00 2.4629901390209374e+00 -5.0326493041079057e-03 + -2.1357274391547398e+00 2.1732539006974845e+00 4.3043365352729200e-02 + id 14525 + loc 5.6668877601623535e-01 9.8645222187042236e-01 401 + blend 0.0000000000000000e+00 + interp 4.5479510955175750e-01:3.0305971268945658e-01:3.1360726434855457e-01:3.7587601407516519e-01:1.0786250109435680e+00:2.6788667897170154e-01:1.8864838746362094e+00:3.3145139256099648e-01:2.4279491205153945e+00:3.3630407739416968e-01:3.0424365299064382e+00:4.5479056160066200e-01:3.8836636729785128e+00 + CVs 20 + 4.1756945200515955e-02 3.1286203968606791e-01 -2.8485421815773093e-01 + 6.8435560261950690e-02 6.2473488224404450e-01 -5.5811321851909246e-01 + 9.4166835998475584e-02 9.3644373848323370e-01 -8.2727226951579502e-01 + 1.2396319472310685e-01 1.2369681585325880e+00 -1.1062673106859198e+00 + 1.5119083644032749e-01 1.5149569370770051e+00 -1.4120096921023093e+00 + 1.5294435499147851e-01 1.7647860698439175e+00 -1.7507390743223075e+00 + 9.6921817673201516e-02 1.9798369848816026e+00 -2.1096104028283937e+00 + -3.8320850480015101e-02 2.1477885908139056e+00 -2.4647552251330027e+00 + -2.5477168235021586e-01 2.2529032278732064e+00 -2.7900139789259111e+00 + -5.3843873234558581e-01 2.2842963394193871e+00 -3.0630633803727885e+00 + -8.6685674035301441e-01 2.2395474954704375e+00 -3.2715822212389334e+00 + -1.2157471173103287e+00 2.1193192415627733e+00 -3.4152391631047458e+00 + -1.5604751251959401e+00 1.9234826461749281e+00 -3.5044633261954967e+00 + -1.8765494151854987e+00 1.6573683175791756e+00 -3.5489374717691531e+00 + -2.1600607160594278e+00 1.3301494197426407e+00 -3.5535189277995971e+00 + -2.4547454918550775e+00 9.2749296875004150e-01 -3.5462453793735444e+00 + -2.8075569001790992e+00 4.3882877291473910e-01 -3.6120071946118029e+00 + -3.1577697080201008e+00 -5.1403433722080449e-02 -3.8202262316576254e+00 + -3.3467942141125260e+00 -3.9621456943668465e-01 -4.0407510977655399e+00 + id 14526 + loc 8.8288187980651855e-01 4.6314537525177002e-01 404 + blend 0.0000000000000000e+00 + interp 4.3861365271040459e-01:2.7397969378141235e-01:7.2369630271364782e-01:2.4596327820075020e-01:1.2312608626001913e+00:3.7215939185932306e-01:2.0955186649628850e+00:3.0249399679628203e-01:2.7759804497621023e+00:4.3860926657387750e-01:3.4856945062292475e+00:2.7976908617280133e-01:3.9808501796402651e+00 + CVs 20 + -4.7166870371507241e-02 3.0083238315930960e-01 4.0772870259378688e-02 + -4.9356315062846434e-02 5.7976217505306327e-01 8.4644734368338803e-02 + -7.3569527583455918e-02 8.6191995632078622e-01 1.3916078834810480e-01 + -1.3140377399087283e-01 1.1504714784038785e+00 2.0983376737829279e-01 + -2.2629083050226906e-01 1.4408115739064726e+00 2.9931890940919315e-01 + -3.6209283231545186e-01 1.7263358168862213e+00 4.0739208991380604e-01 + -5.3950715297041774e-01 1.9991171910089163e+00 5.3113916315539056e-01 + -7.5422823986515131e-01 2.2515800820297427e+00 6.6620107664815853e-01 + -1.0007947640723036e+00 2.4777138506889225e+00 8.0823958139860808e-01 + -1.2746052232876399e+00 2.6726814858065495e+00 9.5299206065917541e-01 + -1.5679659877735621e+00 2.8329309465078838e+00 1.0992635364471328e+00 + -1.8667378097381040e+00 2.9565036161612497e+00 1.2618349560913309e+00 + -2.1495830634528761e+00 3.0411155997013823e+00 1.4686862931930880e+00 + -2.3884886013823632e+00 3.0842390868529561e+00 1.7332539605743154e+00 + -2.5639099337993345e+00 3.0865471710909502e+00 2.0363693963716800e+00 + -2.6768031431681125e+00 3.0517777246840563e+00 2.3490684976054790e+00 + -2.7284592054789925e+00 2.9871944104065609e+00 2.6500299355858474e+00 + -2.7195087254963179e+00 2.9059743785187022e+00 2.9159512000122922e+00 + -2.7306871932828121e+00 2.8400943418246962e+00 3.0723099579089510e+00 + id 14527 + loc 4.1038823127746582e-01 1.9476762413978577e-01 412 + blend 0.0000000000000000e+00 + interp 3.7923797577704904e-01:2.6878985709497805e-01:9.6647050415475111e-01:3.7923418339729131e-01:1.5176903414144312e+00:2.6284338728494616e-01:2.0117422264931601e+00:3.7452144779529334e-01:2.8074454269247973e+00:2.3669740295588429e-01:3.8034687873140771e+00 + CVs 20 + -2.1798600854402839e-01 1.6052290585711693e-01 -4.1291700217781807e-01 + -4.2411859238517069e-01 2.3564388751278517e-01 -6.9301191491881764e-01 + -6.3016412355975482e-01 2.6985971037958728e-01 -9.5947697926240361e-01 + -8.2633581391585442e-01 2.8702039835148396e-01 -1.2597843607329946e+00 + -1.0009557388640313e+00 2.8436146862483491e-01 -1.5885258060429475e+00 + -1.1425289824669811e+00 2.6150900605597893e-01 -1.9378536966484616e+00 + -1.2396411356486960e+00 2.2159547023657877e-01 -2.2963254512238844e+00 + -1.2852152468029763e+00 1.6958471054607605e-01 -2.6507907822915957e+00 + -1.2796982020257797e+00 1.0982902829454644e-01 -2.9912078158899122e+00 + -1.2279332502612650e+00 4.7514837916184272e-02 -3.3080311235796991e+00 + -1.1310814126744109e+00 -4.3163184717498471e-03 -3.5873889061021447e+00 + -9.8278061482414936e-01 -2.9518275258418658e-02 -3.8242377735993287e+00 + -7.8649136548886678e-01 -4.1607669874885067e-02 -4.0535048480208600e+00 + -5.7488577163879395e-01 -8.7143198435992275e-02 -4.3203762121796219e+00 + -3.7930071554344719e-01 -1.9010898205216953e-01 -4.6305971829483914e+00 + -2.1011630981840418e-01 -3.4723356153236318e-01 -4.9725354731748590e+00 + -7.8731687622466406e-02 -5.5496710317910258e-01 -5.3339241041242493e+00 + -3.2699434661793703e-03 -7.9968633708371240e-01 -5.6887977802924388e+00 + 7.5190229347776860e-03 -1.0025897633179355e+00 -5.9327217985503031e+00 + id 14528 + loc 3.8350424170494080e-01 8.6983138322830200e-01 399 + blend 0.0000000000000000e+00 + interp 4.1287335203903991e-01:3.4860392191757933e-01:6.1191071454245183e-03:4.1286922330551956e-01:7.3214648350472422e-01:2.8880969704207099e-01:1.1198414299001733e+00:3.3146603646226397e-01:1.8749726570179477e+00:3.0089641208631185e-01:2.3069020053386651e+00:2.8344341156836933e-01:3.0962639379489874e+00 + CVs 20 + -1.9519437967979331e-01 3.0374631076766606e-01 -1.7177835857623475e-01 + -3.8759160880977084e-01 5.9160668234211777e-01 -3.6001175280813213e-01 + -5.8886997850961476e-01 8.5509401831295950e-01 -5.5012219472914048e-01 + -8.0478171947929689e-01 1.0885880638707508e+00 -7.3873377690841857e-01 + -1.0360046695425829e+00 1.2851741254005002e+00 -9.2889414416084914e-01 + -1.2832109851412308e+00 1.4344600866810384e+00 -1.1208315587105206e+00 + -1.5500771606267114e+00 1.5224099309420394e+00 -1.3154786915757146e+00 + -1.8405727038398272e+00 1.5358413469442154e+00 -1.5134822662942149e+00 + -2.1534446488352161e+00 1.4742864638404360e+00 -1.7087241114813747e+00 + -2.4711425302107570e+00 1.3378023336460971e+00 -1.8943030904945151e+00 + -2.7634782170199776e+00 1.1097641977568291e+00 -2.0722274725554293e+00 + -3.0308720908363287e+00 7.8340574924428652e-01 -2.2537691867558971e+00 + -3.3142308159563996e+00 3.9172946071666925e-01 -2.4437241323581813e+00 + -3.6304056104499227e+00 -2.0085690810876661e-02 -2.6231369951592169e+00 + -3.9609282059006552e+00 -4.4386233808535869e-01 -2.7758040074071055e+00 + -4.3758732018682185e+00 -8.5175862797201884e-01 -2.9219565134684693e+00 + -5.0416231511089364e+00 -1.0545563749131397e+00 -3.0877529148716301e+00 + -5.7905366267319769e+00 -9.0569811810304546e-01 -3.2519093732444415e+00 + -6.2655717439450234e+00 -1.0146366027142182e+00 -3.4246296967852676e+00 + id 14529 + loc 2.9004737734794617e-01 1.3692924752831459e-02 400 + blend 0.0000000000000000e+00 + interp 4.8512164282728248e-01:2.3347060951336501e-01:9.1724604863269943e-01:3.0065530862863771e-01:1.4072520456700610e+00:2.5889777244845669e-01:2.1189248767005759e+00:4.8511679161085425e-01:2.9920481701593982e+00:4.2361264482843730e-01:3.2357078173158627e+00:2.7190997127462113e-01:3.8760289229504190e+00 + CVs 20 + -8.5988412649634444e-02 3.1646506030433030e-01 2.7008166627234875e-01 + -1.7385516641515175e-01 6.3631762053234542e-01 5.5039000149067452e-01 + -2.7779946970388353e-01 9.5703425420508470e-01 8.4658754125258007e-01 + -4.1430905191639922e-01 1.2689620126020738e+00 1.1661329466315307e+00 + -5.9869714854670053e-01 1.5530175652396805e+00 1.5157508556874872e+00 + -8.4054481519987800e-01 1.7806805697906847e+00 1.8981453396324430e+00 + -1.1391913545939376e+00 1.9187881851027244e+00 2.3067056293044002e+00 + -1.4812977243361798e+00 1.9395197942890281e+00 2.7236108393936673e+00 + -1.8415277558079284e+00 1.8309752784665967e+00 3.1247727829582708e+00 + -2.1909398125115120e+00 1.6042473933543955e+00 3.4900850708147222e+00 + -2.5152265148555113e+00 1.2860539840734728e+00 3.8087384460078320e+00 + -2.8251515620412100e+00 9.0645352040122540e-01 4.0720638165858745e+00 + -3.1380986075177142e+00 4.8951185887071791e-01 4.2707920266503034e+00 + -3.4459378034292092e+00 4.2944897310725150e-02 4.4034850756660155e+00 + -3.7314887375306944e+00 -4.1688641583552832e-01 4.4838373419665150e+00 + -4.0624883975508927e+00 -8.0156797000414359e-01 4.5520618896572405e+00 + -4.6103503449433498e+00 -8.9216411463052170e-01 4.6600939097058953e+00 + -5.2869385688976198e+00 -4.3786296676341596e-01 4.7699239001846321e+00 + -5.6373955720325135e+00 -5.4665443004854897e-01 4.8595617925117836e+00 + id 14530 + loc 1.3415789604187012e-01 8.3022499084472656e-01 405 + blend 0.0000000000000000e+00 + interp 4.6587855585619226e-01:4.6587389707063370e-01:3.4274517236340563e-01:3.0514600596295555e-01:1.1745990556319539e+00:3.5085675589594856e-01:2.1751261978274323e+00:2.8702360530047677e-01:2.9628112402921163e+00:2.9902703295229710e-01:3.5197669130525862e+00 + CVs 20 + 2.4445694624986392e-01 2.9899089433665982e-01 4.1852225193859109e-02 + 3.2458209809517474e-01 5.2459220399987194e-01 8.2861811327652787e-02 + 3.6405034946463677e-01 7.0805456623678076e-01 1.4451041138867912e-01 + 4.0271628502884599e-01 8.8042735133902816e-01 2.4551115550528702e-01 + 4.3563877912806337e-01 1.0315515628580478e+00 3.9024924254975552e-01 + 4.5894713806755216e-01 1.1509857754462729e+00 5.7749307489155444e-01 + 4.7104910399665739e-01 1.2328497939405596e+00 8.0090371478765399e-01 + 4.7306720887093862e-01 1.2776098302990231e+00 1.0538654258802855e+00 + 4.6824996475375380e-01 1.2889912654676912e+00 1.3331440217419106e+00 + 4.6112005801268480e-01 1.2700669572432326e+00 1.6387359061995599e+00 + 4.5651900050944094e-01 1.2201746651134646e+00 1.9712098572687731e+00 + 4.5878574585964665e-01 1.1352934843195763e+00 2.3284735627504252e+00 + 4.7546299625144495e-01 1.0178755267645254e+00 2.7048052885282758e+00 + 5.2271055061968807e-01 8.8907558076252902e-01 3.0938611334827986e+00 + 6.2308567897609002e-01 7.8603892555525612e-01 3.4904436443462572e+00 + 7.9220381535423112e-01 7.3562514618632335e-01 3.8829210036421653e+00 + 1.0305122861210188e+00 7.4360292264829297e-01 4.2505399168151676e+00 + 1.3196839682007708e+00 8.0769764174795333e-01 4.5722445176433331e+00 + 1.5523396541859151e+00 8.1288235876629400e-01 4.8899782051223886e+00 + id 14531 + loc 7.1585848927497864e-02 9.4015103578567505e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1851270362391296e-01:4.1850851849687676e-01:9.7045148893197819e-03:3.0341261850322598e-01:8.7084461844255201e-01:2.8466811392360225e-01:1.3707200147345691e+00:3.7656828787126895e-01:2.2620076941914919e+00:2.6538252771418069e-01:3.1639366602974963e+00 + CVs 20 + 3.1750456227665130e-01 1.6476083987337642e-01 -1.8849013663521094e-01 + 6.0656813486993311e-01 3.4867600772862711e-01 -4.0825465571413966e-01 + 8.7249714631427544e-01 5.4272886469582482e-01 -6.4028626293104707e-01 + 1.1038858409610586e+00 7.4394626207023351e-01 -8.8111075344678946e-01 + 1.2817631290578519e+00 9.4490906208319991e-01 -1.1315392952080274e+00 + 1.3907356834098952e+00 1.1248854422082983e+00 -1.3848215716358283e+00 + 1.4275531946301245e+00 1.2559414347570719e+00 -1.6239255001957948e+00 + 1.4067873908901134e+00 1.3179181783694902e+00 -1.8232559863526991e+00 + 1.3534006840704931e+00 1.3155191679368223e+00 -1.9601440744611309e+00 + 1.2873217741063343e+00 1.2793167366598488e+00 -2.0334431521926342e+00 + 1.2153912211107112e+00 1.2396573486767684e+00 -2.0718317077788839e+00 + 1.1314661678755360e+00 1.1980612451308623e+00 -2.1213270828847528e+00 + 1.0260277707790975e+00 1.1289793116905704e+00 -2.2128216460769679e+00 + 9.0176475134001244e-01 1.0106673604565442e+00 -2.3486368770112986e+00 + 7.7377050158907057e-01 8.3275244294061557e-01 -2.5252765969328341e+00 + 6.6940491068060459e-01 5.8392472664361827e-01 -2.7482350390407402e+00 + 6.5382146898478910e-01 2.4203239457265413e-01 -3.0314617530451327e+00 + 8.3049042719675181e-01 -1.4720723763445742e-01 -3.3371663508198601e+00 + 9.5893921836614404e-01 -3.1315964364109133e-01 -3.5000894605918034e+00 + id 14532 + loc 3.1927755475044250e-01 3.0463632941246033e-01 401 + blend 0.0000000000000000e+00 + interp 3.8855148938289713e-01:2.9605514131621058e-01:7.6306467353175311e-01:3.8854760386800330e-01:1.4993371246497404e+00:3.4710666617681540e-01:1.9977273157321767e+00:3.0868027968957540e-01:2.6057262651389617e+00:3.0139199503086656e-01:3.3917614383610641e+00 + CVs 20 + -2.9851989820918190e-01 1.7889671315878347e-01 1.7594426257483056e-01 + -5.6769007666257709e-01 3.6663476267543421e-01 3.2760049290828569e-01 + -8.2808489099225691e-01 5.5353167607771669e-01 4.7894889909773175e-01 + -1.0940819619035835e+00 7.3259207366403001e-01 6.4739327873023933e-01 + -1.3665659969160064e+00 8.9673388257758180e-01 8.3772532582481385e-01 + -1.6430625047409047e+00 1.0363215886759878e+00 1.0555402351104133e+00 + -1.9153651253763742e+00 1.1409849217399182e+00 1.3080584296271287e+00 + -2.1720746651003577e+00 1.2018396354960119e+00 1.6021256642550386e+00 + -2.4014743583262828e+00 1.2132176783616990e+00 1.9391729996182956e+00 + -2.5951217282098735e+00 1.1735113084828459e+00 2.3148026949696594e+00 + -2.7507503314866115e+00 1.0853956186122478e+00 2.7224277779019217e+00 + -2.8694843246638251e+00 9.5245975322870047e-01 3.1484337547532197e+00 + -2.9494617724161749e+00 7.7990000922738800e-01 3.5704822033157364e+00 + -2.9803624376746085e+00 5.8423035118481437e-01 3.9621314489518737e+00 + -2.9431660544459177e+00 4.1026577926748586e-01 4.2946593003779086e+00 + -2.8315351359604124e+00 3.2259671470248996e-01 4.5360171207041473e+00 + -2.6838991828040455e+00 3.6341183724062937e-01 4.6592648317693008e+00 + -2.5742291636012946e+00 5.1187121404347302e-01 4.6656183510930767e+00 + -2.3526558704618132e+00 4.3304701118365829e-01 4.9281120010961086e+00 + id 14533 + loc 8.7852579355239868e-01 4.6864658594131470e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2470039271535174e-01:4.2769750349984692e-01:5.7772410273621011e-03:3.2555978300919497e-01:4.4052275206203173e-01:3.4774970397309513e-01:9.9272403265084108e-01:4.2614094787948087e-01:1.4642804157365701e+00:4.4505708598452204e-01:2.1075386023568479e+00:5.2469514571142462e-01:2.5581593166252796e+00:4.6141494316994969e-01:2.9709697106882809e+00:3.0495015246789747e-01:3.4711843940246805e+00 + CVs 20 + -1.5638260380420502e-01 2.5269805332434564e-01 3.3983710780866469e-02 + -3.0052240893193505e-01 4.9242239215991862e-01 1.1255471754177968e-01 + -4.4248817647411998e-01 7.1283206487769257e-01 2.1885951323538547e-01 + -5.8460411899601394e-01 8.9929482735463240e-01 3.3586028664289624e-01 + -7.1833657690770369e-01 1.0401280292775421e+00 4.5813215380715000e-01 + -8.3402204908033772e-01 1.1308490441079364e+00 5.7736909383964252e-01 + -9.2920692990107923e-01 1.1788647011166433e+00 6.9071353650722411e-01 + -1.0130998970419254e+00 1.1962620029519424e+00 8.0432915151270579e-01 + -1.0991045223682256e+00 1.1889864352272865e+00 9.2412892773092092e-01 + -1.1984697676473026e+00 1.1566586933643699e+00 1.0506221249495451e+00 + -1.3139515176468495e+00 1.0994106644564179e+00 1.1804483976927420e+00 + -1.4364370544681473e+00 1.0253791970880948e+00 1.3076534898494416e+00 + -1.5534947146745832e+00 9.4913381556538590e-01 1.4257964027927263e+00 + -1.6581204676565662e+00 8.8551253166469057e-01 1.5303681028806875e+00 + -1.7512958642751542e+00 8.4930175585284584e-01 1.6178991698090943e+00 + -1.8429380006967928e+00 8.3617442726350566e-01 1.6917427155102511e+00 + -1.9192208015812593e+00 7.8904275314618333e-01 1.7845716486660994e+00 + -1.9303586158776025e+00 6.9669195714420951e-01 1.9277537227757988e+00 + -1.8175089400601434e+00 6.1571365727975458e-01 2.1777583723471290e+00 + id 14534 + loc 8.2520401477813721e-01 8.1890195608139038e-01 393 + blend 0.0000000000000000e+00 + interp 3.7405963053808905e-01:3.0436816412856388e-01:1.6645106611129568e-01:2.9805423570367467e-01:9.9543660665165179e-01:3.7405588994178368e-01:1.7370655168867284e+00:2.9159699602798772e-01:2.3335074428776830e+00:2.8138551736379624e-01:3.5386993090397865e+00 + CVs 20 + -1.6594486009831430e-01 1.3932357847832105e-01 -1.9781481072993178e-02 + -3.5543837508770421e-01 3.1763462699936174e-01 -8.3013332335597573e-02 + -5.4885118005640443e-01 5.2612177240967195e-01 -1.6187122598145537e-01 + -7.3941761097591185e-01 7.6500718423498437e-01 -2.3840692901613453e-01 + -9.3047554449591496e-01 1.0349199880179119e+00 -3.0957556050611001e-01 + -1.1275581187082173e+00 1.3293124019737075e+00 -3.8254801956776385e-01 + -1.3349939554406833e+00 1.6318403385444660e+00 -4.7595269753721131e-01 + -1.5565643241064309e+00 1.9202053687528760e+00 -6.0572689896039378e-01 + -1.7962582871967170e+00 2.1715553779690309e+00 -7.8179712888403408e-01 + -2.0457444794312090e+00 2.3442947960910208e+00 -1.0296895031025681e+00 + -2.2587645043462894e+00 2.3520493018369475e+00 -1.3701027067348996e+00 + -2.3664866524427435e+00 2.1227236533151985e+00 -1.7239942898882092e+00 + -2.3672005277181714e+00 1.7242756365822614e+00 -1.9681155466240550e+00 + -2.3265285923291481e+00 1.2782868299563763e+00 -2.1238081340868118e+00 + -2.3091287664541991e+00 8.2656469758204687e-01 -2.2760670317220764e+00 + -2.4197844754895810e+00 3.9633493222891225e-01 -2.4437733314021135e+00 + -2.8201926657152483e+00 8.5864787184316338e-02 -2.5807178932570980e+00 + -3.4601861480127725e+00 6.5636930881205480e-03 -2.6236569397216960e+00 + -3.7425097216416008e+00 -3.1410460868531342e-01 -2.8493379151949405e+00 + id 14535 + loc 5.9949970245361328e-01 6.2788087129592896e-01 404 + blend 0.0000000000000000e+00 + interp 4.1785649905780081e-01:2.8428213980785655e-01:4.7450188516007619e-01:2.4935445654709829e-01:1.5999693736749916e+00:3.7685353139031796e-01:2.0394075203303630e+00:3.4555267273128731e-01:2.8681167783565131e+00:4.1785232049281024e-01:3.1476915295612033e+00:3.0385115010566216e-01:3.9052362005499703e+00 + CVs 20 + -5.5205134704070728e-02 3.0560032811998161e-02 6.7355312488424357e-03 + -8.6669758556105148e-02 8.2161829203467915e-02 2.3407704577173921e-02 + -9.8436127214977465e-02 1.4167319145385102e-01 5.0922526158053316e-02 + -1.0270004351837192e-01 2.0159859159721261e-01 8.6060921523826286e-02 + -9.7413219812038682e-02 2.6005227230851596e-01 1.2737189658194770e-01 + -8.0699874391500559e-02 3.1400882249515272e-01 1.7386556717963567e-01 + -5.1938996687374075e-02 3.5835924398195085e-01 2.2446593288969988e-01 + -1.2994190865105101e-02 3.8504581184059850e-01 2.7764604360651246e-01 + 3.2749057200613732e-02 3.8983704046538520e-01 3.3255696558459935e-01 + 8.7067235348472743e-02 3.8146806753078810e-01 3.9190992665900204e-01 + 1.5663424393585690e-01 3.6762405023127831e-01 4.5816500880476929e-01 + 2.4764792869322999e-01 3.5016780223919453e-01 5.2802785846231837e-01 + 3.5904591144274145e-01 3.2675836665000868e-01 5.9291047213172132e-01 + 4.8326794684650920e-01 2.9289079261812756e-01 6.4488018937385716e-01 + 6.1495985332988845e-01 2.4436280639267322e-01 6.7463613668667466e-01 + 7.5000540628709200e-01 1.7765056496470411e-01 6.6837243344652886e-01 + 8.7586079526822291e-01 9.1110317647378369e-02 6.1425989947024862e-01 + 9.7322473441648505e-01 -1.0652614407339056e-02 5.1057230301212930e-01 + 1.1338580654995418e+00 -2.7316459911992608e-02 4.3579482610357173e-01 + id 14536 + loc 5.0504887104034424e-01 5.2470877766609192e-02 412 + blend 0.0000000000000000e+00 + interp 4.5667572345670654e-01:2.3109913606769836e-01:1.3764150911438644e-01:3.3326295564065961e-01:1.0515546836528387e+00:2.5933404806922888e-01:1.9999596561851773e+00:4.5667115669947200e-01:2.8645061779474652e+00:3.1126435008942471e-01:3.2488460169679905e+00 + CVs 20 + -5.0724561623065045e-01 2.1736901859894750e-01 1.5865755016719496e-01 + -8.9852445735886932e-01 3.7151478152580103e-01 2.9257630368285042e-01 + -1.2485222387332144e+00 5.0173351056983817e-01 4.0597939552763485e-01 + -1.6044144186799003e+00 6.2605621245167453e-01 5.0959312128521561e-01 + -1.9637125659132515e+00 7.4254245942194952e-01 6.0263939291174962e-01 + -2.3218861692304822e+00 8.4980426638024120e-01 6.8174935270452997e-01 + -2.6743786443065645e+00 9.4736770729408915e-01 7.4190394198147036e-01 + -3.0178652671508468e+00 1.0350482671617458e+00 7.7887153959640543e-01 + -3.3475713502268643e+00 1.1131269484905151e+00 7.8989433814831966e-01 + -3.6552650280003833e+00 1.1834862892834896e+00 7.7409472668383805e-01 + -3.9418477134298220e+00 1.2474033705158785e+00 7.3468145742379076e-01 + -4.2442880854826939e+00 1.2962250439400385e+00 6.7731493739727666e-01 + -4.6193628409492558e+00 1.3044625621847554e+00 6.0934023167053408e-01 + -5.0612112213213356e+00 1.2482984096899359e+00 5.5377263111891672e-01 + -5.5113577715373445e+00 1.1323409385677570e+00 5.3292936754683728e-01 + -5.9370543102422904e+00 9.7192549894814695e-01 5.4914467728997884e-01 + -6.3283071432787903e+00 7.7649057771502150e-01 5.9913173024710631e-01 + -6.6712086968211270e+00 5.6037866825422533e-01 6.7883596614867725e-01 + -6.8182341331194261e+00 4.7156453243446839e-01 7.2888454355895460e-01 + id 14537 + loc 7.9008257389068604e-01 7.9593241214752197e-01 399 + blend 0.0000000000000000e+00 + interp 3.3949698505080134e-01:2.8288312044488068e-01:8.7736137296062111e-02:3.1664701668214906e-01:8.6560749648482382e-01:2.8498415121951975e-01:1.2700872110513481e+00:3.3949359008095087e-01:2.1955654583238591e+00:2.6940731594206707e-01:3.0583769978122475e+00 + CVs 20 + -1.5325454093529026e-01 3.9586345640073195e-01 -3.6460259386540256e-01 + -2.9519634070698481e-01 7.4821114538930023e-01 -7.4351936594069734e-01 + -4.5325307660053443e-01 1.0353487065882814e+00 -1.1532428645706077e+00 + -6.4128242525113655e-01 1.2352005460134838e+00 -1.5885049710100430e+00 + -8.6012245016022826e-01 1.3248851803482120e+00 -2.0292470953562334e+00 + -1.1003082562124884e+00 1.2913165553388084e+00 -2.4468028667171278e+00 + -1.3537045673277599e+00 1.1463176329523612e+00 -2.8173300103921521e+00 + -1.6213634062360411e+00 9.1931211076766439e-01 -3.1333379081354948e+00 + -1.8863205080856034e+00 6.2832269828697207e-01 -3.3808957797147765e+00 + -2.1050106051176343e+00 2.8748670345854177e-01 -3.5317000230375930e+00 + -2.2805592756768536e+00 -7.7366896006536678e-02 -3.5988774176230991e+00 + -2.4958652797461411e+00 -4.7043524951991844e-01 -3.6482826212180899e+00 + -2.8041724166076207e+00 -9.0273519556175186e-01 -3.6927585330606929e+00 + -3.1593750240000253e+00 -1.3390654892253360e+00 -3.6729509037935060e+00 + -3.5215621565812221e+00 -1.7599715629851849e+00 -3.5698741105710825e+00 + -4.0369424002485639e+00 -2.1945328266309905e+00 -3.4505232071581742e+00 + -4.9557569429769206e+00 -2.5390249231877409e+00 -3.3902593851067233e+00 + -6.0582482049131752e+00 -2.5371829422310213e+00 -3.3567168140163646e+00 + -6.6038901745794236e+00 -2.6331147629931615e+00 -3.2293157224706452e+00 + id 14538 + loc 9.6196877956390381e-01 5.2982531487941742e-02 400 + blend 0.0000000000000000e+00 + interp 4.5011737985298023e-01:4.5011287867918170e-01:7.9083273450124025e-01:2.9505271351328755e-01:1.5618337745933528e+00:4.1114520554158812e-01:2.0336968243537967e+00:2.6304655957733780e-01:2.7967571440548187e+00:2.4644738777756142e-01:3.7990893234175811e+00 + CVs 20 + 2.5500843146549873e-01 1.2268335282938203e-01 1.6449579679542067e-01 + 5.0589762586573539e-01 2.6325037838933335e-01 3.4228672847616254e-01 + 7.4957385003248023e-01 4.0562197637310310e-01 5.1824245550363424e-01 + 9.8485427078096366e-01 5.3975108271625727e-01 6.8534849238243378e-01 + 1.2116207142068269e+00 6.6079716920699916e-01 8.4109372487065048e-01 + 1.4304319413970739e+00 7.6639380797327705e-01 9.8368021830114016e-01 + 1.6433625147737023e+00 8.5764354604143578e-01 1.1143859934855871e+00 + 1.8533298491503614e+00 9.3789702521231733e-01 1.2370279970405449e+00 + 2.0582004389518929e+00 1.0085285763071794e+00 1.3510175780321436e+00 + 2.2468114732491689e+00 1.0702015263678215e+00 1.4455110827254769e+00 + 2.4092029115616778e+00 1.1308193385254148e+00 1.5102937722062653e+00 + 2.5522280401106747e+00 1.1972621282101115e+00 1.5533890275267652e+00 + 2.6922250980053923e+00 1.2614679261927373e+00 1.5900342949710748e+00 + 2.8339329535222793e+00 1.3147032002002215e+00 1.6243642943936576e+00 + 2.9752682171235056e+00 1.3573115703564089e+00 1.6566124360042118e+00 + 3.1285682338688265e+00 1.3879321636864188e+00 1.6925123154219084e+00 + 3.3186257454587937e+00 1.3934703157378954e+00 1.7374358273831401e+00 + 3.5471996310526226e+00 1.3533632697939784e+00 1.7826672641831642e+00 + 3.7195063842233358e+00 1.1950037357189514e+00 1.7346464401035901e+00 + id 14539 + loc 2.8630015254020691e-01 4.8896533250808716e-01 1069 + blend 0.0000000000000000e+00 + interp 3.2485855154171245e-01:3.2485530295619702e-01:8.3173537866560132e-01:3.0226716617906491e-01:1.2912511565561551e+00:2.7552943480931508e-01:1.9722621374179283e+00:2.4250487619114505e-01:2.6926686829492632e+00:2.6241184329918255e-01:3.9871372710944097e+00 + CVs 20 + -1.9163421904381539e-01 2.8208502447506295e-01 -6.4499889932482027e-02 + -3.8541872930365162e-01 5.3440240395890259e-01 -1.5777541887885183e-01 + -5.7770404045355006e-01 7.6644930146084822e-01 -2.6323992056484530e-01 + -7.7256095827881144e-01 9.7818887636276131e-01 -3.7510539966378847e-01 + -9.7813567363924592e-01 1.1659258195893125e+00 -4.9265720138486851e-01 + -1.1948651789299483e+00 1.3257785216777487e+00 -6.0675138548229257e-01 + -1.4019594429106126e+00 1.4480417224099398e+00 -7.0052949378396223e-01 + -1.5618493896399563e+00 1.5246590667205531e+00 -7.6545277099588227e-01 + -1.6543097117603554e+00 1.5725146733668152e+00 -8.1271121050109130e-01 + -1.7192381284814660e+00 1.6141936666002485e+00 -8.4612985618337400e-01 + -1.8101825897571109e+00 1.6285258664051405e+00 -8.4752274488970714e-01 + -1.9353730846166934e+00 1.5836162237374865e+00 -8.0326294855531610e-01 + -2.0819208593783056e+00 1.4727991285315509e+00 -7.1353958327826483e-01 + -2.2425186986284915e+00 1.3053913853054850e+00 -5.8752659406997987e-01 + -2.4180715625829268e+00 1.0932485889797403e+00 -4.3823902347013455e-01 + -2.6090533667347380e+00 8.4918421849946402e-01 -2.7010749835434023e-01 + -2.8259606891766893e+00 5.7120851143280027e-01 -8.6221324298249802e-02 + -3.0772763698724348e+00 2.7984454729105979e-01 -6.0694410268880006e-03 + -3.2014796869583440e+00 1.8596563650867415e-01 -2.7417554603955036e-01 + id 14540 + loc 6.6925036907196045e-01 4.0605354309082031e-01 401 + blend 0.0000000000000000e+00 + interp 4.3471119787193374e-01:3.0534951167051261e-01:4.5822953366806496e-01:3.3845603933819940e-01:1.0610932330702787e+00:4.3470685075995502e-01:1.8415776561714319e+00:3.0555258121592627e-01:2.3253831559871028e+00:3.4146422255732523e-01:3.0824313505859307e+00:2.4152191455376595e-01:3.8410675399793845e+00 + CVs 20 + 1.2385238523659063e-01 3.3969507057885201e-01 9.5183680066384752e-02 + 2.6565165612850661e-01 7.0487780183747795e-01 2.1476189791400366e-01 + 4.1639929648287333e-01 1.0885682901767684e+00 3.4117319287364478e-01 + 5.7148288532106117e-01 1.4811191161504433e+00 4.8171187200366117e-01 + 7.3215403058697626e-01 1.8672216914788480e+00 6.5066000837889904e-01 + 9.0327351823160851e-01 2.2285685325913094e+00 8.5094023270494346e-01 + 1.0902329218029889e+00 2.5490777605312718e+00 1.0770097133247554e+00 + 1.2957013118456984e+00 2.8145321630394715e+00 1.3197740089118939e+00 + 1.5176926997245919e+00 3.0173935996350365e+00 1.5801351433015964e+00 + 1.7470160526549745e+00 3.1498602216962261e+00 1.8767135251673246e+00 + 1.9642268919601209e+00 3.1786419916485693e+00 2.2106204600169712e+00 + 2.1449068010337196e+00 3.0597752518605770e+00 2.5182320487408059e+00 + 2.2769874996649953e+00 2.8247466840557403e+00 2.6929878500892448e+00 + 2.3763288883215550e+00 2.5986084190887322e+00 2.7066768301143447e+00 + 2.4633497747052391e+00 2.4654139615998472e+00 2.6276084988115693e+00 + 2.5399876644055408e+00 2.4423579167035712e+00 2.5236926347274684e+00 + 2.5934840648564688e+00 2.5139557659879714e+00 2.4330938637251371e+00 + 2.6779567554531929e+00 2.5592409337948867e+00 2.3966830453162666e+00 + 2.9857101987509678e+00 2.4071980201597762e+00 2.4684885376247538e+00 + id 14541 + loc 6.5690301358699799e-02 3.4050726890563965e-01 393 + blend 0.0000000000000000e+00 + interp 4.6872249630699964e-01:2.7877180095563220e-01:4.6281077554909877e-01:2.5547875306307932e-01:1.0122790901329597e+00:3.8445300938146515e-01:1.8554206242215372e+00:4.0038459839406232e-01:2.3790370548912172e+00:4.6871780908203658e-01:2.9728196037338206e+00:2.8167449002279366e-01:3.5357780070357192e+00 + CVs 20 + -1.2787454459977532e-01 3.9040763267249068e-01 2.7367974069464795e-01 + -2.4468013306932454e-01 7.7509964076024451e-01 5.2266539293817560e-01 + -3.6882939197227071e-01 1.1502524794509459e+00 7.5137242146529704e-01 + -5.1028158432334647e-01 1.5099189757437017e+00 9.7083871186003656e-01 + -6.7324610136920171e-01 1.8486843590651916e+00 1.1945973250221162e+00 + -8.6037162262366229e-01 2.1613382533014889e+00 1.4359991924154838e+00 + -1.0739325125526979e+00 2.4395090851214758e+00 1.7072280051424114e+00 + -1.3161043031561777e+00 2.6692193357390841e+00 2.0171372876082270e+00 + -1.5852505512949293e+00 2.8322422603378179e+00 2.3659095297739143e+00 + -1.8699215806061362e+00 2.9146825940084478e+00 2.7419143946847360e+00 + -2.1462815184717674e+00 2.9173260719873735e+00 3.1245618508424799e+00 + -2.3873585885973134e+00 2.8578777529759116e+00 3.4910921765092215e+00 + -2.5862032552271259e+00 2.7695885800300455e+00 3.8260702954377943e+00 + -2.7665703376473250e+00 2.6951362126378706e+00 4.1188077386493598e+00 + -2.9575754133402143e+00 2.6626785133015742e+00 4.3419275122218330e+00 + -3.1733416183544860e+00 2.6598288245193444e+00 4.4416448759746219e+00 + -3.4338585923301848e+00 2.6362334613407006e+00 4.3981469860035389e+00 + -3.6943634676942971e+00 2.5621487199322246e+00 4.3609286816204467e+00 + -3.5683695808175453e+00 2.5934143077498306e+00 4.7124300480990238e+00 + id 14542 + loc 9.4984221458435059e-01 6.0048413276672363e-01 405 + blend 0.0000000000000000e+00 + interp 4.3142284512469375e-01:3.1542217559801067e-01:5.1547603950496790e-01:3.1116324307376730e-01:1.0103277570861731e+00:4.3141853089624255e-01:1.9771566266909884e+00:2.7092677814296723e-01:2.3530250165114839e+00:2.2502648699262545e-01:3.4786560816190364e+00:3.1821442464665223e-01:3.9998778165883033e+00 + CVs 20 + 1.5386983102741980e-01 2.9071010066749048e-01 -1.4690889701434365e-01 + 1.7237644372860914e-01 5.3549050250934760e-01 -2.7313007533813632e-01 + 1.7576823202505620e-01 7.5453072656172337e-01 -3.7299777066648887e-01 + 1.7417787801460693e-01 9.8773073625152952e-01 -4.4983318046713505e-01 + 1.6025152416526067e-01 1.2341943273669922e+00 -4.9222759264908678e-01 + 1.2577197933286288e-01 1.4896870561718998e+00 -4.7736568985481387e-01 + 6.4381487276083282e-02 1.7381994460172205e+00 -3.5693691348682854e-01 + -7.6013731158245390e-03 1.9119883724744577e+00 -4.3473925725777379e-02 + 5.4529130932856607e-03 1.8290249672133605e+00 4.7554209597829006e-01 + 1.8817509215261730e-01 1.4717250583328760e+00 8.9668332909616610e-01 + 4.3477717401448668e-01 1.1124336881026811e+00 1.0988949420874794e+00 + 6.7566469862423251e-01 8.1005352715952506e-01 1.2125713963423159e+00 + 9.1671928282373338e-01 5.3322628349630075e-01 1.3007299323745702e+00 + 1.1938428085085608e+00 3.1120819142525247e-01 1.3833607759820583e+00 + 1.5466185277526912e+00 2.1287700278295607e-01 1.4699161586973641e+00 + 1.9787368508489682e+00 2.7389644931894563e-01 1.5354905882265526e+00 + 2.4482868292851938e+00 4.5758639677111690e-01 1.5369044873694895e+00 + 2.9051391789872194e+00 6.9205720515872127e-01 1.4789330747616074e+00 + 3.2621325849213600e+00 6.1235922490533923e-01 1.6221786021856381e+00 + id 14543 + loc 8.2954668998718262e-01 2.2708515822887421e-01 404 + blend 0.0000000000000000e+00 + interp 4.6166168374063071e-01:4.0836436669956805e-01:4.3629572957320839e-02:2.9768049820862352e-01:9.9160857114582257e-01:4.2007680062596753e-01:1.3864175218035459e+00:4.6165706712379334e-01:1.9985270006992502e+00:4.5302913425651592e-01:2.4673291254833871e+00:3.3881293059893386e-01:2.9978817404920211e+00:3.8468495687081133e-01:3.6472393165440984e+00 + CVs 20 + 2.3888304164224092e-02 2.1666530615062102e-01 9.7821229580680721e-02 + 5.7634806448252140e-02 4.2776456287127756e-01 2.0872951712501814e-01 + 6.7042917366445021e-02 6.4402273354869055e-01 3.3090864046707913e-01 + 4.2099504966829959e-02 8.6270676624660703e-01 4.6489921407377588e-01 + -2.2858897446699111e-02 1.0785090643121023e+00 6.1149584982332972e-01 + -1.3395659824142248e-01 1.2840435698689983e+00 7.6742309011627896e-01 + -2.9350751202640346e-01 1.4704976829976093e+00 9.2517792256994347e-01 + -4.9831877277761388e-01 1.6301555024858096e+00 1.0748836570970122e+00 + -7.4238684153193391e-01 1.7579685238409850e+00 1.2058189651949562e+00 + -1.0167146010916788e+00 1.8518439455738163e+00 1.3090615357534752e+00 + -1.3048294036086285e+00 1.9139760981715435e+00 1.3954466743004605e+00 + -1.5851947490660407e+00 1.9502971423545292e+00 1.5170191340585109e+00 + -1.8279854575090120e+00 1.9607964342972364e+00 1.7371262567198917e+00 + -1.9941037613974353e+00 1.9374222198287807e+00 2.0547262534623845e+00 + -2.0788988428375181e+00 1.8808265292467958e+00 2.4068409453197726e+00 + -2.0890453351836480e+00 1.8001296365326986e+00 2.7624349767390353e+00 + -2.0113531041527288e+00 1.7085871671782737e+00 3.1112870862507798e+00 + -1.8556096696504598e+00 1.6248210836999908e+00 3.4301047964691134e+00 + -1.8734755394795679e+00 1.6044108989786166e+00 3.6631191899727202e+00 + id 14544 + loc 4.5406734943389893e-01 9.9114429950714111e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4717696693418918e-01:4.4717249516451985e-01:3.6127975742241691e-03:3.0637720601992258e-01:9.8147730200291317e-01:2.1454490433005560e-01:1.1304551194352959e+00:2.3521657293582107e-01:2.0852362548469450e+00:3.7513008860541930e-01:2.9952747987387345e+00:2.9083193844841604e-01:3.5657692928251454e+00 + CVs 20 + 6.1669778934484970e-02 3.1476054985242075e-01 1.1762146734470480e-01 + 1.3530814940961877e-01 6.1625198452737595e-01 1.9499490311911083e-01 + 2.2193138177491586e-01 9.1574084052957239e-01 2.3986482450873389e-01 + 3.2287003097203071e-01 1.2215543213935935e+00 2.5604513408365748e-01 + 4.3947535994629006e-01 1.5307017065914739e+00 2.3719023215290103e-01 + 5.7282968452405414e-01 1.8380355538257553e+00 1.7647850884470262e-01 + 7.2142202173587355e-01 2.1303167533347453e+00 6.2837693427412855e-02 + 8.7816554380329959e-01 2.3882328644609467e+00 -1.1212887928362048e-01 + 1.0319528622133567e+00 2.5955779796366758e+00 -3.4838449861158383e-01 + 1.1709552676646935e+00 2.7404811515942322e+00 -6.4055642572444138e-01 + 1.2848243372731027e+00 2.8133943019991641e+00 -9.7899514830754775e-01 + 1.3653700416859871e+00 2.8076909607672875e+00 -1.3503953665342210e+00 + 1.4073699722952877e+00 2.7202609041792214e+00 -1.7412131899113856e+00 + 1.4102068639396519e+00 2.5487061596804699e+00 -2.1414771832367765e+00 + 1.3800989149566405e+00 2.2824993727804932e+00 -2.5468526233529327e+00 + 1.3326351260898210e+00 1.8794362665646558e+00 -2.9516832622622138e+00 + 1.2804571637578175e+00 1.2447133160891883e+00 -3.2796675803435749e+00 + 1.1899570568248521e+00 4.4476957660891170e-01 -3.3127888082014270e+00 + 1.0420009139633446e+00 3.2092610387695064e-02 -3.2805430173400545e+00 + id 14545 + loc 5.1902228593826294e-01 6.4724332094192505e-01 400 + blend 0.0000000000000000e+00 + interp 4.1121899637561077e-01:2.6768344261289645e-01:5.2490607653427845e-01:4.0091495292399915e-01:1.1686370805016106e+00:4.1121488418564706e-01:1.8190579629199539e+00:2.8423446334454494e-01:2.0332288991174394e+00:2.5014628110164427e-01:3.1037339450529018e+00:3.8769436611282704e-01:3.9882119452120253e+00 + CVs 20 + -1.4323537661252675e-01 1.8622668181809174e-01 -1.3987207565434168e-01 + -2.8064475658258364e-01 3.8669588125962590e-01 -3.2874444772627326e-01 + -3.9946690759537584e-01 5.8099203372040154e-01 -5.5888613760013484e-01 + -4.9139748610050865e-01 7.6025619380491105e-01 -8.2269558840367096e-01 + -5.5380789563491639e-01 9.2609250957369160e-01 -1.1147506686235911e+00 + -5.8636145312479837e-01 1.0847181240158004e+00 -1.4271992409733310e+00 + -5.9111752749706503e-01 1.2404901402093460e+00 -1.7525396696380788e+00 + -5.7254245318539732e-01 1.3869766488228112e+00 -2.0866228645168481e+00 + -5.3485778716846932e-01 1.5093550880018773e+00 -2.4269386535187820e+00 + -4.7996447582996393e-01 1.5939678692805865e+00 -2.7681341498448448e+00 + -4.0885453844423791e-01 1.6315862389321500e+00 -3.1013448323345774e+00 + -3.2394042290777125e-01 1.6163742468377575e+00 -3.4157732531427216e+00 + -2.2836257576809998e-01 1.5480890602879407e+00 -3.6982577350354742e+00 + -1.2415540842567652e-01 1.4355442925060824e+00 -3.9336244317596880e+00 + -1.4757724511035825e-02 1.2938718577893531e+00 -4.1108466005322395e+00 + 9.2383782871367476e-02 1.1376313275529268e+00 -4.2307764167639004e+00 + 1.9074801854861836e-01 9.7954443430012650e-01 -4.3077467501468050e+00 + 2.8113812325477983e-01 8.2695662848809670e-01 -4.3675816779766787e+00 + 3.7304089474564933e-01 6.7016395340449586e-01 -4.4384736545402070e+00 + id 14546 + loc 5.1171101629734039e-02 8.8459652662277222e-01 399 + blend 0.0000000000000000e+00 + interp 5.2941829604553736e-01:5.2941300186257689e-01:2.8777063667301095e-01:4.0436370636493058e-01:8.4479534532678568e-01:2.4177690207170202e-01:1.2228997879718730e+00:4.0050677662739348e-01:2.2442520347127712e+00:2.8999704533144366e-01:3.0236157802270025e+00:4.1004098723556454e-01:3.9005595107706617e+00 + CVs 20 + -1.1306869772744092e-01 3.6243088682776492e-01 -3.2202765458925281e-01 + -2.6841982757563854e-01 7.2030905809917911e-01 -6.4265757716395067e-01 + -4.5502952501561217e-01 1.0598710137183522e+00 -9.7462415752775533e-01 + -6.7360869281851687e-01 1.3757085242907459e+00 -1.3180431634879024e+00 + -9.3454511361221770e-01 1.6666112973974676e+00 -1.6590446136055788e+00 + -1.2496897161332532e+00 1.9237557686872335e+00 -1.9670922809205933e+00 + -1.6169537213890641e+00 2.1182111116259867e+00 -2.2001969977977827e+00 + -1.9994889833743505e+00 2.2039478689737946e+00 -2.3214470377806395e+00 + -2.3333163175090208e+00 2.1663686863670222e+00 -2.3244142023474570e+00 + -2.6102835830211202e+00 2.0502615133916531e+00 -2.2529412855222466e+00 + -2.8834953283615445e+00 1.8723219259462591e+00 -2.1517121243338471e+00 + -3.1907583273263072e+00 1.6093548847523567e+00 -2.0511922547011503e+00 + -3.5448148432899624e+00 1.2577990503061358e+00 -1.9927023681626177e+00 + -3.9406082094948274e+00 8.9014758191634502e-01 -2.0202055025219199e+00 + -4.3528973827311930e+00 6.4006568641393735e-01 -2.1345409735944449e+00 + -4.7131777784801994e+00 6.1007730445222041e-01 -2.2791375013821185e+00 + -4.8947236111524841e+00 7.9354034203159829e-01 -2.3680235756937944e+00 + -4.8888696360588426e+00 1.0293228081617358e+00 -2.3919366582841715e+00 + -5.0893079508030370e+00 1.4047143324807725e+00 -2.5577167312730866e+00 + id 14547 + loc 1.5356655418872833e-01 6.0057103633880615e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8739696174393817e-01:2.6894423470754791e-01:9.0737375528953113e-03:2.5953198560073315e-01:1.0657229394463499e+00:2.7856553178173626e-01:1.9827211318054263e+00:2.8708525361915005e-01:2.6418808131454128e+00:3.7316236239127309e-01:3.0366710645199801e+00:3.8739308777432074e-01:3.6662548687804781e+00 + CVs 20 + 6.6721960399536498e-02 2.5049359142251543e-01 -1.1208196696065525e-01 + 1.4212240734262943e-01 4.9561683370624232e-01 -2.3986529707554666e-01 + 2.1922041927508462e-01 7.3486865308959060e-01 -3.6870076446459643e-01 + 2.9587958350696880e-01 9.6985390858923093e-01 -4.9367949035785874e-01 + 3.7203140432351806e-01 1.1963230472148880e+00 -6.1558548604721697e-01 + 4.4366203319958464e-01 1.4099356010777910e+00 -7.3195062432517621e-01 + 5.0385732195318567e-01 1.6149703697396334e+00 -8.4134497553639653e-01 + 5.4671193057207934e-01 1.8253013986392705e+00 -9.4785776605641803e-01 + 5.7228198463598812e-01 2.0553620181646450e+00 -1.0666541932752631e+00 + 5.7317090914549418e-01 2.2907578784972311e+00 -1.2346302857806770e+00 + 5.2641988161742459e-01 2.4642178468318874e+00 -1.4696492662309151e+00 + 4.2660683809232847e-01 2.5260402777542108e+00 -1.7397384627759436e+00 + 2.9069659079017063e-01 2.4818876193041399e+00 -2.0138484537379697e+00 + 1.3709287002561510e-01 2.3587353462962946e+00 -2.2808527060311263e+00 + -2.7910738848188399e-02 2.1806137416220133e+00 -2.5417695625156207e+00 + -2.2650871911330805e-01 1.9542732444836255e+00 -2.8149028632744657e+00 + -4.9029742673987931e-01 1.6398424028623562e+00 -3.1531598024224712e+00 + -6.7355012440653073e-01 1.2386207498668347e+00 -3.5733023801021857e+00 + -4.7761989908608177e-01 1.2502222260726332e+00 -3.6723563526345329e+00 + id 14548 + loc 4.8483237624168396e-01 2.3753400146961212e-01 401 + blend 0.0000000000000000e+00 + interp 3.6553289991408922e-01:3.3382622560263742e-01:4.0209021227837738e-01:3.1313085469055402e-01:1.1082937535214976e+00:3.6552924458509012e-01:1.9978420287995633e+00:3.0259592075902592e-01:3.0032557241182247e+00:3.0964938212497922e-01:3.8886695562109663e+00 + CVs 20 + -1.9022309172844051e-01 3.6444308274400405e-01 2.0198130021438804e-02 + -3.9452603482896159e-01 7.2632375841984265e-01 6.8183312318296066e-02 + -6.0935256925456416e-01 1.0783411795080988e+00 1.2354015415535091e-01 + -8.4336024909830209e-01 1.4122220928534885e+00 1.8278771809448577e-01 + -1.1093832922268900e+00 1.7171395762707731e+00 2.5447087505063781e-01 + -1.4160073560203768e+00 1.9808476116529290e+00 3.5095319129072283e-01 + -1.7605282448258799e+00 2.1883755149997257e+00 4.8195374700821270e-01 + -2.1257705354850520e+00 2.3311788165052403e+00 6.4519352924539741e-01 + -2.4994020161002850e+00 2.4145850676173484e+00 8.3476946470568802e-01 + -2.8860160284970622e+00 2.4399496954674018e+00 1.0530712676839489e+00 + -3.2827529259345223e+00 2.3935824280505456e+00 1.2904445225185719e+00 + -3.6592485617106045e+00 2.2811312091886107e+00 1.5073961017021318e+00 + -3.9963980200745888e+00 2.1383917378923805e+00 1.6814229020355240e+00 + -4.3137614045609531e+00 1.9811157159704607e+00 1.8445849363687143e+00 + -4.6281817250328077e+00 1.8057988437271759e+00 2.0455056953268116e+00 + -4.9008214664387451e+00 1.6275339581409551e+00 2.2361848525265864e+00 + -5.0664082582902665e+00 1.4594364488972820e+00 2.2235972709810614e+00 + -5.1326634899498806e+00 1.1573440888859214e+00 1.9511221943018884e+00 + -5.2534655457855814e+00 1.1697867562865842e+00 2.1339861358575853e+00 + id 14549 + loc 2.3584784567356110e-01 3.7879079580307007e-01 393 + blend 0.0000000000000000e+00 + interp 4.4119616471259049e-01:2.8560650038254554e-01:2.5408841197411380e-02:3.3295434015644720e-01:9.7190125211595502e-01:4.4119175275094336e-01:1.3897882247579934e+00:2.8082081336054238e-01:2.0172913887612642e+00:2.8368274156233114e-01:3.0220567926359148e+00 + CVs 20 + -2.0348316894680041e-01 3.2548245738609266e-01 2.7684984908353860e-01 + -3.9692433898569401e-01 6.5956568736895904e-01 5.2489620588277086e-01 + -6.0711428346919227e-01 9.9043599583014541e-01 7.3771708352810061e-01 + -8.5231539030495285e-01 1.3021485295631228e+00 9.1775764574382079e-01 + -1.1403276724329463e+00 1.5770157822396347e+00 1.0707506322140210e+00 + -1.4660456623696514e+00 1.7963351358723199e+00 1.2006181445330588e+00 + -1.8100169337233045e+00 1.9473561263875538e+00 1.3065472318839886e+00 + -2.1486406053629592e+00 2.0286794553595247e+00 1.3867765309700526e+00 + -2.4682237593660550e+00 2.0478099693649265e+00 1.4452753142200512e+00 + -2.7669689372614847e+00 2.0102441637266848e+00 1.4935721301812066e+00 + -3.0446052423433390e+00 1.9134032566391408e+00 1.5468914527521886e+00 + -3.3015185416425039e+00 1.7483308364212724e+00 1.6225157028405346e+00 + -3.5522757058806134e+00 1.5198993576231519e+00 1.7380423930856614e+00 + -3.8321782860222195e+00 1.2542774597168127e+00 1.9064993140998379e+00 + -4.1678330094073228e+00 9.4861658074147048e-01 2.1384437043951867e+00 + -4.5348682713695956e+00 5.4405703806699979e-01 2.4590026970315750e+00 + -4.8401169087321003e+00 4.3898432448757241e-02 2.9078745634074172e+00 + -4.9514501942296931e+00 -3.6291689942053496e-01 3.4521575050777518e+00 + -4.7183824083825527e+00 -3.7533522372148198e-01 3.8960316533131789e+00 + id 14550 + loc 2.8223055414855480e-03 6.3980668783187866e-01 404 + blend 0.0000000000000000e+00 + interp 5.1828507458741624e-01:2.7562539974830880e-01:7.6081839330085621e-01:2.7313241992171994e-01:1.2435625352481003e+00:4.2568373231767603e-01:1.8338482315299327e+00:5.1827989173667044e-01:2.4375716472702145e+00:4.5693503813838660e-01:3.0000008471481676e+00:3.4614253530856748e-01:3.6057994163268035e+00 + CVs 20 + 3.0623748129910675e-02 9.1122972323199880e-02 9.6236618266680972e-03 + 2.9295521357215221e-02 1.6217159340039813e-01 3.4921058732071283e-02 + 7.3334905819272683e-03 2.2971322072001127e-01 6.7079675458344645e-02 + -1.7396012951386042e-02 3.0302738638760818e-01 1.0650552550082007e-01 + -4.0182704863347823e-02 3.8146339758538894e-01 1.5429485748718036e-01 + -5.7403124759257351e-02 4.6583515544399445e-01 2.1015178777764024e-01 + -6.5028176716946468e-02 5.5880459976386865e-01 2.7299591614629415e-01 + -5.8898001988243132e-02 6.6411287071303771e-01 3.4054960233834075e-01 + -3.5697257905736357e-02 7.8463785400721353e-01 4.0762137109175267e-01 + 6.0988801100065881e-03 9.2202812125392164e-01 4.6737916041823235e-01 + 6.6275112904686462e-02 1.0742569544954497e+00 5.1177975499080963e-01 + 1.4212951485623815e-01 1.2348672322082863e+00 5.3314061504673615e-01 + 2.2794198070411759e-01 1.3947928155968043e+00 5.2654859932883480e-01 + 3.1878112748267540e-01 1.5456613046980388e+00 4.9079527802066159e-01 + 4.1083709435447613e-01 1.6799819357644568e+00 4.2731302167371510e-01 + 5.0158482051922593e-01 1.7893554807900234e+00 3.4046609744568263e-01 + 5.9102320249730966e-01 1.8656217472885845e+00 2.3645973027280770e-01 + 6.8108804091044095e-01 1.9044668651419630e+00 1.1901710661093312e-01 + 6.1593338945830822e-01 1.8755410274393394e+00 5.2008480600880702e-02 + id 14551 + loc 3.3281937241554260e-01 8.3972179889678955e-01 400 + blend 0.0000000000000000e+00 + interp 4.3066631740028111e-01:2.8074832747527928e-01:4.3837746721458504e-01:2.5980216687548308e-01:1.0553533716635488e+00:2.7193496068312412e-01:1.9729724348238218e+00:2.8724819198201623e-01:2.5677539586537730e+00:2.5854691424118903e-01:3.0705452623654055e+00:4.3066201073710714e-01:3.5141508281562439e+00 + CVs 20 + -1.4143541434809748e-01 3.8942258222881554e-01 -2.0900313897789502e-01 + -2.7627365622350641e-01 7.5104722973740790e-01 -4.3779927185750511e-01 + -3.8548641023140329e-01 1.0738733742287365e+00 -7.0487401944145001e-01 + -4.7415359740272739e-01 1.3543474486816738e+00 -1.0106751264146259e+00 + -5.4932221944382142e-01 1.5881502103114129e+00 -1.3440186463580766e+00 + -6.1203418425299383e-01 1.7748672627945048e+00 -1.6926965095573898e+00 + -6.6063955729046908e-01 1.9175222699236192e+00 -2.0475890983520366e+00 + -6.9306220352538106e-01 2.0201681235860560e+00 -2.4030121428370661e+00 + -7.0715430681552549e-01 2.0872267185438367e+00 -2.7556271782142199e+00 + -6.9999001858807841e-01 2.1232373460917602e+00 -3.1042314460900498e+00 + -6.6881060717920626e-01 2.1331796876120914e+00 -3.4548012545106270e+00 + -6.1552498877652506e-01 2.1180008481855452e+00 -3.8185289005258776e+00 + -5.4545941005642284e-01 2.0722310328241083e+00 -4.1982286346997135e+00 + -4.6743406198401016e-01 1.9841823318980265e+00 -4.5879439486756182e+00 + -3.9425370253464581e-01 1.8373855802479500e+00 -4.9828834313332342e+00 + -3.4238099608039196e-01 1.6183139994568165e+00 -5.3762850325512614e+00 + -3.2685144341424832e-01 1.3272397918181045e+00 -5.7547297487553690e+00 + -3.5182999307993668e-01 9.8590151419511685e-01 -6.0998172993087456e+00 + -3.5575939674245333e-01 7.0769773378509537e-01 -6.3228447775682479e+00 + id 14552 + loc 9.5262652635574341e-01 2.1670569479465485e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1782296648730299e-01:3.1494975306492295e-01:2.5050575200117142e-01:3.9473776388474330e-01:9.1859580213030434e-01:4.1781878825763813e-01:1.8251697708426891e+00:3.0782480601661977e-01:2.1277826782304650e+00:2.3168552660986724e-01:2.9694214721007279e+00:2.2646549560911425e-01:3.7949415378631186e+00 + CVs 20 + -9.7606609678852249e-02 1.5610369634767912e-01 2.7689532282557833e-01 + -2.1112215722022815e-01 2.6304362467679687e-01 5.0776080771053966e-01 + -3.3468864362139533e-01 3.4186518329022009e-01 7.1794330671678541e-01 + -4.6863798812387886e-01 4.0453393097150253e-01 9.2314449041724345e-01 + -6.6083882430661856e-01 4.6280507974856339e-01 1.1320274479362231e+00 + -9.6657342546013392e-01 5.5075463011965653e-01 1.3498962805265700e+00 + -1.3534355458256786e+00 7.3533490731429196e-01 1.5778685996876165e+00 + -1.6997863407356653e+00 1.0375185710407600e+00 1.8019925444076814e+00 + -1.9386670919361291e+00 1.4043998653501184e+00 2.0028663831228526e+00 + -2.0821401805476749e+00 1.7884959531553970e+00 2.1748979829799819e+00 + -2.1456638443238671e+00 2.1648600052942202e+00 2.3487877635387462e+00 + -2.1156270845239420e+00 2.4752075501178488e+00 2.5960022852044622e+00 + -2.0039364627641723e+00 2.6433749450822344e+00 2.9264609895170119e+00 + -1.8591018155891081e+00 2.6575760255237650e+00 3.2758778027393816e+00 + -1.7297556181582376e+00 2.5540695058268050e+00 3.5915352249379220e+00 + -1.6439289900451961e+00 2.3800390680473207e+00 3.8692914250131194e+00 + -1.6171207044430234e+00 2.1598954974803179e+00 4.1154400517865630e+00 + -1.6677609537556561e+00 1.9012303708674969e+00 4.3012999808185555e+00 + -1.8316251851319210e+00 1.5246357754851052e+00 4.3832835171856468e+00 + id 14553 + loc 4.0470623970031738e-01 5.4843509197235107e-01 401 + blend 0.0000000000000000e+00 + interp 4.2055764385735361e-01:3.0137466338454866e-01:1.0634661448804084e-01:2.9989907604865063e-01:9.7642980660755174e-01:2.9799177533878080e-01:1.5449025346083669e+00:2.8474062677486695e-01:2.1435365953378280e+00:4.2055343828091507e-01:2.8273245780992573e+00:2.9451697601418253e-01:3.2840323802921283e+00 + CVs 20 + -1.1148607092437976e-01 2.9476843803874048e-01 -3.0044838953329472e-01 + -2.1426377288099180e-01 6.0056004297212673e-01 -6.0571619261084009e-01 + -3.3817365228037610e-01 8.9705385130056958e-01 -9.1257046499020522e-01 + -4.8855934038062060e-01 1.1618270617660986e+00 -1.2243262843204641e+00 + -6.6533553779631882e-01 1.3805057943260604e+00 -1.5471349889447477e+00 + -8.7807985441442027e-01 1.5446099829646247e+00 -1.8744535705308401e+00 + -1.1377734417406260e+00 1.6491316483071623e+00 -2.1861525182317920e+00 + -1.4439716966870091e+00 1.6902759786970427e+00 -2.4582344940956755e+00 + -1.7846684879688421e+00 1.6666817051501146e+00 -2.6718900952531168e+00 + -2.1465288536353730e+00 1.5808585222901255e+00 -2.8178627548721540e+00 + -2.5149391137442350e+00 1.4377490444793455e+00 -2.8939354317556334e+00 + -2.8737875513282423e+00 1.2438537267317336e+00 -2.9078787746687529e+00 + -3.2100996562684725e+00 1.0053339393231238e+00 -2.8733067441462774e+00 + -3.5116567570414934e+00 7.3417378816181911e-01 -2.7986217467301548e+00 + -3.7891178008260433e+00 4.3788109117189539e-01 -2.6941638246445350e+00 + -4.1139726749810848e+00 7.4585410712713518e-02 -2.5997640507484223e+00 + -4.5681363878803767e+00 -4.1472596346314194e-01 -2.6128833617183984e+00 + -5.0879880434011797e+00 -9.4652493457232345e-01 -2.8196622056579210e+00 + -5.3639018536239353e+00 -1.2287811868112408e+00 -2.8983089968246785e+00 + id 14554 + loc 5.7574081420898438e-01 7.6240015029907227e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7891133956046616e-01:2.8337009322470119e-01:9.8594600870452487e-01:4.6040969112803087e-01:1.1957110173878496e+00:4.7890655044707059e-01:1.8274926204170057e+00:4.5244754940398069e-01:2.0656767463912789e+00:3.0028959251688331e-01:2.8237440622968144e+00:3.2881441156184538e-01:3.1936859462949574e+00:4.3421222399953530e-01:3.9955704269808328e+00 + CVs 20 + 2.2386601438399323e-02 3.1338920233177697e-01 8.2798071181720501e-02 + 7.2621868597401384e-02 5.9761409321251335e-01 1.3301497913166391e-01 + 1.4471585363232120e-01 8.5854952250801364e-01 1.5837742233610824e-01 + 2.3409946336909501e-01 1.1023388960749310e+00 1.6717652791142157e-01 + 3.4117396219208762e-01 1.3284254794517023e+00 1.6467226549165698e-01 + 4.6592316524388094e-01 1.5403574647771050e+00 1.5836552052867037e-01 + 6.1010596307987686e-01 1.7397204173381187e+00 1.4665406256819113e-01 + 7.7574561857159097e-01 1.9204302318409885e+00 1.1899387118843507e-01 + 9.6070801569332187e-01 2.0744802473453556e+00 6.8359496099369088e-02 + 1.1584346389233284e+00 2.1966840492760400e+00 -5.9837769442061539e-03 + 1.3606902615999665e+00 2.2832668424224067e+00 -1.0118983427976624e-01 + 1.5592298390885380e+00 2.3325043065194180e+00 -2.1188064129860751e-01 + 1.7457601376923886e+00 2.3464021781654223e+00 -3.3165796156113880e-01 + 1.9114200927613834e+00 2.3332076918682070e+00 -4.5519596494078329e-01 + 2.0498030621125412e+00 2.3158510887406480e+00 -5.8344986910840224e-01 + 2.1689899272656841e+00 2.3630339252533292e+00 -7.4865097070022923e-01 + 2.2976363494889309e+00 2.5805280171686595e+00 -1.0773752216229604e+00 + 2.4562664809805743e+00 2.8072263698016720e+00 -1.6535877844494795e+00 + 2.5059367884765273e+00 2.5823924924904231e+00 -1.4742179303154477e+00 + id 14555 + loc 4.4628331065177917e-01 6.1099541187286377e-01 399 + blend 0.0000000000000000e+00 + interp 3.8643595857491536e-01:3.7017054676238736e-01:1.0407617291740401e-01:3.3214130119968521e-01:8.6631715591342440e-01:2.7098849101188544e-01:1.9112591470802478e+00:3.7614965903639214e-01:2.8567899952703382e+00:3.8643209421532965e-01:3.1143175465063466e+00:2.7723729019891519e-01:3.7929089029284535e+00 + CVs 20 + -5.7715114932362532e-02 2.7695230180739061e-01 -2.4709073279758259e-01 + -1.4314992858716485e-01 5.4240514737894729e-01 -5.0552472067625775e-01 + -2.1933258427444433e-01 7.8172044632891668e-01 -7.8232492830548916e-01 + -2.7505966426467843e-01 9.9173979872750395e-01 -1.0772738013119783e+00 + -3.1692642078147015e-01 1.1759478199635489e+00 -1.3834572869676232e+00 + -3.5211913699319702e-01 1.3359309200490845e+00 -1.6911956875981928e+00 + -3.8562382209362805e-01 1.4691442350222530e+00 -1.9901450070631042e+00 + -4.1908868532256699e-01 1.5704367119341873e+00 -2.2690861510772886e+00 + -4.5007452328235575e-01 1.6361961668608129e+00 -2.5150115220132423e+00 + -4.7237205561889745e-01 1.6716585054064812e+00 -2.7154557443062282e+00 + -4.8321721160282000e-01 1.6927152592338337e+00 -2.8738776598196747e+00 + -4.9483013491190608e-01 1.6950395833974312e+00 -3.0233867196730109e+00 + -5.1930345281919255e-01 1.6422440515563257e+00 -3.1836793429210095e+00 + -5.5779244966442820e-01 1.5154101767003021e+00 -3.3402620985177633e+00 + -6.1354062215922944e-01 1.3209020576041155e+00 -3.4713044909257622e+00 + -7.0126994637029094e-01 1.0943528077369282e+00 -3.5607742580720916e+00 + -8.5234556530305305e-01 8.7712219679377201e-01 -3.5923018292242515e+00 + -1.0664208488579192e+00 6.8265588287874746e-01 -3.6407528534112101e+00 + -1.0675623090726956e+00 6.9821905934400497e-01 -3.9178245288154541e+00 + id 14556 + loc 3.4373775124549866e-01 7.4602976441383362e-02 393 + blend 0.0000000000000000e+00 + interp 3.1496464817525982e-01:2.7592318009110617e-01:3.1831593541809589e-01:2.6307589873787823e-01:1.1852092772138683e+00:3.0467925101284421e-01:2.1098779245754642e+00:2.6969762111625917e-01:2.9885637437753072e+00:3.1496149852877808e-01:3.5145761600154275e+00 + CVs 20 + -6.6196091937642629e-02 3.9352094243647517e-01 4.1276762683707346e-01 + -1.3638855945605122e-01 7.8405905772737250e-01 7.5678662051112644e-01 + -2.1609470588321106e-01 1.1836779211689590e+00 1.0443728728459090e+00 + -3.2801288997127009e-01 1.5880329324931899e+00 1.2892581676961110e+00 + -5.0266028735591273e-01 1.9707315307475510e+00 1.4981763351049149e+00 + -7.5306356420985243e-01 2.3044407556255107e+00 1.6747574824116991e+00 + -1.0702949144641969e+00 2.5807409692545371e+00 1.8185823923842288e+00 + -1.4413936864083388e+00 2.8013104694279551e+00 1.9321187068598853e+00 + -1.8566312234056901e+00 2.9599601517866607e+00 2.0257451065940226e+00 + -2.3005268076410039e+00 3.0490006706104635e+00 2.1142826479057089e+00 + -2.7482085089197330e+00 3.0643866386601815e+00 2.2100555354520388e+00 + -3.1707579845793679e+00 3.0098513945929635e+00 2.3163795224650645e+00 + -3.5575121487078376e+00 2.8975108853403153e+00 2.4229512989639721e+00 + -3.9259190451449810e+00 2.7328419659522059e+00 2.5191653166971708e+00 + -4.2877738251672195e+00 2.4837949562759607e+00 2.6098878027960537e+00 + -4.5875357329214177e+00 2.0799879797221656e+00 2.7081672250905107e+00 + -4.7104341220334245e+00 1.5319335253282378e+00 2.8300014321605249e+00 + -4.5930425498119076e+00 1.0200944025652983e+00 2.9880462837549406e+00 + -4.2098451338793099e+00 8.3542837734810615e-01 3.1666074756161628e+00 + id 14557 + loc 4.0136951208114624e-01 5.0411086529493332e-02 404 + blend 0.0000000000000000e+00 + interp 5.4697944799477061e-01:4.0321638315529862e-01:5.7617368491354859e-01:3.1404788721872839e-01:1.0284287710371744e+00:5.4697397820029070e-01:1.8762529838683963e+00:3.2724538725754881e-01:2.4830270541398445e+00:4.4754116048925235e-01:3.0221052796534735e+00:5.2250616188091292e-01:3.4281629771151669e+00:4.5285359043261314e-01:3.9086842971515647e+00 + CVs 20 + -1.5516273506820849e-01 1.4746578172241669e-02 9.5987562678044092e-02 + -3.2224196800755550e-01 3.9587892974829911e-02 1.9025541473547852e-01 + -4.9265286451089252e-01 6.6130185802583633e-02 2.8138043524917850e-01 + -6.6319828954643190e-01 9.0303575725348112e-02 3.6902864498086163e-01 + -8.2232157895225266e-01 1.0843478858612821e-01 4.5035959249468288e-01 + -9.4930308395953567e-01 1.1534335246800287e-01 5.2295314036755436e-01 + -1.0272488270247340e+00 1.0957022768188288e-01 5.8356037342194211e-01 + -1.0598309376851689e+00 9.8080027680746334e-02 6.2968420514552981e-01 + -1.0643164331491282e+00 8.6287185233685726e-02 6.5701279242945809e-01 + -1.0583239299230649e+00 7.6712144826974527e-02 6.6339985340774155e-01 + -1.0496561786207861e+00 7.7449840995995736e-02 6.5768587777811005e-01 + -1.0364388762280607e+00 9.1769226531001918e-02 6.4545884246973473e-01 + -1.0168497657721960e+00 1.2309653944102764e-01 6.3411612204043610e-01 + -1.0025320951168692e+00 1.6214298489381132e-01 6.2683997470265940e-01 + -1.0068132765069606e+00 1.9439205295631745e-01 6.2208627605923561e-01 + -1.0239564974199888e+00 2.2237865343425728e-01 6.0158364842576373e-01 + -1.0358207030068607e+00 2.7599773704704544e-01 5.3347860123638657e-01 + -1.0394051608658588e+00 3.8046593370713239e-01 4.2341153864533149e-01 + -9.4545279484663436e-01 4.0275405091554345e-01 6.7384464705501013e-01 + id 14558 + loc 4.4686862826347351e-01 7.5086778402328491e-01 400 + blend 0.0000000000000000e+00 + interp 4.9587210608333565e-01:2.8172811925940011e-01:4.4719613288415716e-01:4.9586714736227483e-01:1.0428761076068631e+00:4.3066201073710714e-01:1.5232489682700376e+00:2.4545813171948994e-01:1.9605278949939193e+00:3.1349091710332644e-01:2.6776401349094150e+00:2.4495042847444895e-01:3.1356682329207426e+00:4.1121488418564706e-01:3.8107358086211489e+00 + CVs 20 + -1.7477155460201360e-01 3.2923737171763834e-01 -1.9799970444870940e-01 + -3.4634243577118795e-01 6.6376361711845544e-01 -3.9369670398214862e-01 + -5.0832160157632800e-01 1.0011909001044599e+00 -6.2101859274515614e-01 + -6.6295353145533109e-01 1.3320761838843818e+00 -8.9548891604682934e-01 + -8.1389623911833442e-01 1.6411306339888716e+00 -1.2174231406769234e+00 + -9.5954807578856249e-01 1.9151758355018587e+00 -1.5836237602622614e+00 + -1.0939544410691917e+00 2.1443037264043476e+00 -1.9908530967369797e+00 + -1.2078942500506300e+00 2.3204946445866259e+00 -2.4362529182177814e+00 + -1.2906362064535573e+00 2.4384716224194811e+00 -2.9148096092938371e+00 + -1.3339047553251886e+00 2.4966353465614266e+00 -3.4184438242585511e+00 + -1.3366658087311285e+00 2.4956959604660023e+00 -3.9380414362980325e+00 + -1.3134247862346076e+00 2.4382267236980661e+00 -4.4659480890895331e+00 + -1.2897193488923731e+00 2.3251066471966011e+00 -4.9923573407376969e+00 + -1.2898204048022577e+00 2.1474253971311841e+00 -5.5045390917835153e+00 + -1.3340397749509605e+00 1.8953887890178764e+00 -5.9814083201252242e+00 + -1.4323573860564955e+00 1.5902270451993901e+00 -6.3962162201117119e+00 + -1.5725341518774707e+00 1.2797843999331402e+00 -6.7418018803114999e+00 + -1.7241601520566425e+00 9.9101012052174964e-01 -7.0365751398054881e+00 + -1.7724426789266996e+00 7.6667076996449746e-01 -7.3042336692031427e+00 + id 14559 + loc 9.5620173215866089e-01 7.1263682842254639e-01 1069 + blend 0.0000000000000000e+00 + interp 4.6994986383632265e-01:3.1104756959272106e-01:4.6208393847520179e-01:2.4438522289780917e-01:1.7187600056912671e+00:4.6994516433768430e-01:2.7251104590744384e+00:1.4776050321498921e-01:3.3429851080866824e+00 + CVs 20 + 1.3389996776149105e-01 3.3334523517637082e-01 -1.7527037280870036e-01 + 3.1030873335626719e-01 6.7191080506151102e-01 -3.5575159339687379e-01 + 5.4016206331559613e-01 1.0045313614452600e+00 -5.2008314665794841e-01 + 8.3020549718926562e-01 1.3119608729309045e+00 -6.5401208328011096e-01 + 1.1781201248548594e+00 1.5689075243083632e+00 -7.5676265958921618e-01 + 1.5658254286344502e+00 1.7446387207200091e+00 -8.4356862528805654e-01 + 1.9566736105039855e+00 1.7980312991213125e+00 -9.3548749397218711e-01 + 2.2915647956399110e+00 1.6933237210667145e+00 -1.0388083742492380e+00 + 2.5148681849419896e+00 1.4455245637739855e+00 -1.0908813291201165e+00 + 2.6183026882266924e+00 1.1280532770715381e+00 -1.0942858108373832e+00 + 2.6332538330650372e+00 7.7845576522347382e-01 -1.1056653912023267e+00 + 2.5736615596364150e+00 4.0484999792624682e-01 -1.0854541835162326e+00 + 2.4528121284531244e+00 3.4535490461358842e-02 -1.0148763540969552e+00 + 2.3117320795357781e+00 -3.2717303077124993e-01 -8.5955300639063836e-01 + 2.2003808611632660e+00 -6.9445953915136771e-01 -5.6377223282244060e-01 + 2.1413802147728025e+00 -1.0190492735638870e+00 -1.0015219962579014e-01 + 2.1426594588422510e+00 -1.2194760714280573e+00 4.9030354702249324e-01 + 2.1901769661518986e+00 -1.2832593175749567e+00 1.0749300618388642e+00 + 2.2013154581100780e+00 -1.3658732596991139e+00 1.2778811430414134e+00 + id 14560 + loc 8.6101639270782471e-01 1.3465858995914459e-01 405 + blend 0.0000000000000000e+00 + interp 4.1942118262513839e-01:2.6138772238909325e-01:2.2930832343600605e-03:3.2144309938698262e-01:7.7821242315971717e-01:2.6000656447991577e-01:1.5882984181151567e+00:3.1694043038737402e-01:2.0769813195775200e+00:2.7008990354056200e-01:2.8764090747942492e+00:4.1941698841331215e-01:3.6476120574462079e+00 + CVs 20 + -3.3071482962948470e-02 8.3209943597303687e-02 9.9207319684303935e-02 + -4.9292804912759641e-02 1.8071680533637630e-01 1.9438499900087769e-01 + -5.8145651525227937e-02 2.8351418933424843e-01 2.8511261669787219e-01 + -5.3929743516715228e-02 4.0606082441166769e-01 3.8267977223469601e-01 + -2.5922050038391931e-02 5.4996067644690083e-01 4.8787926020883010e-01 + 3.7610349251734121e-02 7.1392974355626859e-01 5.9863224913474455e-01 + 1.4730673226286090e-01 8.9308275962833683e-01 7.0867289437452496e-01 + 3.0971243578959107e-01 1.0792652523006290e+00 8.0718600633157844e-01 + 5.2484478927490752e-01 1.2629632101677375e+00 8.7994608588186196e-01 + 7.8557068359256821e-01 1.4353649267604620e+00 9.1172862470345417e-01 + 1.0816626217880110e+00 1.5908548016044699e+00 8.8794108771836289e-01 + 1.4002468903439182e+00 1.7258943622505709e+00 7.9442467741392464e-01 + 1.7190967881671295e+00 1.8306635983331887e+00 6.2942211653331026e-01 + 2.0084147143543185e+00 1.8875286187631655e+00 4.2855566276110513e-01 + 2.2513229669365624e+00 1.8915432217934021e+00 2.4742184064486566e-01 + 2.4549995117634396e+00 1.8607792215806480e+00 9.6737364220111491e-02 + 2.6231009545719708e+00 1.8303382761839466e+00 -6.4456573754767293e-02 + 2.7410740843868489e+00 1.8368233685073192e+00 -2.6442721072330316e-01 + 2.7618102163957023e+00 1.9251486160489319e+00 -4.6812173923462813e-01 + id 14561 + loc 7.2522336244583130e-01 9.0740388631820679e-01 399 + blend 0.0000000000000000e+00 + interp 3.5632344464539251e-01:2.7685925229474967e-01:5.2134205264312894e-02:3.4436843674739470e-01:8.3793746989675877e-01:2.7671586139043386e-01:1.2590844196051534e+00:3.5631988141094606e-01:1.9410147109421105e+00:2.8442331042935820e-01:2.3344521729787022e+00:3.4751950725920983e-01:3.1014902045602444e+00 + CVs 20 + -1.4414426791061508e-01 3.3803211122404214e-01 -2.5151734764526767e-01 + -2.6677428409279497e-01 6.7315532259830013e-01 -5.1121550580391051e-01 + -3.8308144697526042e-01 9.9877492774643828e-01 -7.9631568931331032e-01 + -5.0714855109791490e-01 1.3031368217253303e+00 -1.1193885963608623e+00 + -6.5152022137453425e-01 1.5679473414153542e+00 -1.4890041424828635e+00 + -8.2541888050946788e-01 1.7700079890183724e+00 -1.9073123790716024e+00 + -1.0338554130646711e+00 1.8882333432326650e+00 -2.3669091875350525e+00 + -1.2782285942082940e+00 1.9133251699688152e+00 -2.8508805689391368e+00 + -1.5533986050341480e+00 1.8396266378958412e+00 -3.3392801052601113e+00 + -1.8386047369111242e+00 1.6474285603324086e+00 -3.8099845990060710e+00 + -2.1071632590823972e+00 1.3257599874580412e+00 -4.2352315972138150e+00 + -2.3740024813771465e+00 9.0575116919548759e-01 -4.6022040703075682e+00 + -2.6867064601575579e+00 4.2936783793570554e-01 -4.9147702449722352e+00 + -3.0521664170000182e+00 -8.2252798022475759e-02 -5.1630916652761307e+00 + -3.4470397662788792e+00 -6.1443215292753040e-01 -5.3390817724420137e+00 + -3.9344085592862386e+00 -1.0900634153891586e+00 -5.4803373676339664e+00 + -4.6461514235080168e+00 -1.2999117278186112e+00 -5.6468817182665774e+00 + -5.3970982479814253e+00 -1.1425126599499393e+00 -5.8249988804070192e+00 + -5.8899751080565599e+00 -1.2234286466264399e+00 -5.9633925018897873e+00 + id 14562 + loc 6.2239056825637817e-01 8.1462615728378296e-01 393 + blend 0.0000000000000000e+00 + interp 2.9044855778849976e-01:2.8914667448206061e-01:2.9067440990189342e-01:2.7395288287358793e-01:1.2518554566404174e+00:2.9044565330292188e-01:2.3274421196848833e+00:2.9025623805671086e-01:2.9972831701621248e+00:2.7173686124773250e-01:3.7185217036764815e+00 + CVs 20 + -2.5519063033262651e-01 3.0595225591492514e-01 -2.2267715814649869e-01 + -5.1400004109712216e-01 6.3785345631388601e-01 -4.1241601250712046e-01 + -7.7309354085985027e-01 1.0026849143785370e+00 -5.9761142094504527e-01 + -1.0379001995434001e+00 1.3907902810050894e+00 -7.9008577135085911e-01 + -1.3226966897055477e+00 1.7828530630423127e+00 -9.9071531786361944e-01 + -1.6398778293868830e+00 2.1560867644881263e+00 -1.2006269322911538e+00 + -1.9973385032493693e+00 2.4856615232324528e+00 -1.4207067793645223e+00 + -2.3989572640656043e+00 2.7436234979043599e+00 -1.6523058537166275e+00 + -2.8393599773902225e+00 2.9065079843166872e+00 -1.9013474160494153e+00 + -3.3002073603980544e+00 2.9708945558011024e+00 -2.1836489364267093e+00 + -3.7554735049771137e+00 2.9471041961397866e+00 -2.5148326486912573e+00 + -4.1840745906220587e+00 2.8386960407115676e+00 -2.8927083247304601e+00 + -4.5757307572438943e+00 2.6382728949141478e+00 -3.3015404913322079e+00 + -4.9165730877591960e+00 2.3422256149855265e+00 -3.7308388380985029e+00 + -5.1969895667256463e+00 1.9609233481800730e+00 -4.1746937443098373e+00 + -5.4607476960120431e+00 1.4924133749278354e+00 -4.6125723258923488e+00 + -5.8102213595075805e+00 9.0734372242528516e-01 -4.9814579501192018e+00 + -6.2859892475055617e+00 2.3312065145832594e-01 -5.1883930497274653e+00 + -6.6864687992870593e+00 -3.4545086343065057e-01 -5.3971002191701558e+00 + id 14563 + loc 5.7922351360321045e-01 2.6364025473594666e-01 401 + blend 0.0000000000000000e+00 + interp 3.3900626083787067e-01:3.0219345310392226e-01:1.4226966089431781e-01:3.0095419559232578e-01:1.2590303732522306e+00:3.1677754504953987e-01:2.0115587045772094e+00:3.0964938212497922e-01:2.8893414497204821e+00:3.3900287077526231e-01:3.3449407387102452e+00 + CVs 20 + 8.5872706215077907e-02 3.7632352985153311e-01 1.9184752162547708e-01 + 1.8794491693065923e-01 7.4153740147394132e-01 4.0676348735896406e-01 + 2.8219805074721754e-01 1.0857820013463932e+00 6.5147174220359949e-01 + 3.6591032522942113e-01 1.3872569943900535e+00 9.3042691864558547e-01 + 4.4835066385788541e-01 1.6226630266772613e+00 1.2418290730626178e+00 + 5.3778248118478889e-01 1.7757348801974757e+00 1.5731084978607921e+00 + 6.3723424271384776e-01 1.8437205452378365e+00 1.9069877780982618e+00 + 7.4466750101834855e-01 1.8376814140833475e+00 2.2306010048115281e+00 + 8.5508053479001189e-01 1.7722128711514020e+00 2.5345396492288752e+00 + 9.5719048277207774e-01 1.6615885294388195e+00 2.8031024977910777e+00 + 1.0410935905965037e+00 1.5207605306829604e+00 3.0250031463182969e+00 + 1.1153665220191502e+00 1.3428264763996536e+00 3.2139232705076415e+00 + 1.1991898020392309e+00 1.1049108971895782e+00 3.3875031622206917e+00 + 1.3140151529972748e+00 8.2397725641350461e-01 3.5452611860890140e+00 + 1.4721283673076904e+00 5.4129489548545207e-01 3.6731398396353914e+00 + 1.6854736446586311e+00 2.3128096858126368e-01 3.7617272085449889e+00 + 2.0152407621251989e+00 -1.8779167871000907e-01 3.8230078707758901e+00 + 2.5717138603165228e+00 -5.8564868034340201e-01 3.8915577405016557e+00 + 2.9529014373008935e+00 -5.8178399103794498e-01 3.8801277481775229e+00 + id 14564 + loc 2.9040476679801941e-01 4.4866925477981567e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5959592089099677e-01:3.9212284632452332e-01:7.0521667459696946e-01:4.4545360427670128e-01:1.0238205826606861e+00:4.5959132493178789e-01:1.5104915801809864e+00:3.4408202578792679e-01:2.1903087612185086e+00:4.1014865497899106e-01:2.9982394225399198e+00:4.2540594568601076e-01:3.8779890495293801e+00 + CVs 20 + 1.5903451602974064e-01 4.0674603866994380e-01 4.2645291350637105e-02 + 2.6413327792444941e-01 7.3785788933976093e-01 3.9212114499760448e-02 + 3.5074765824103499e-01 1.0382795365644419e+00 1.8571407972349852e-02 + 4.3687600427804346e-01 1.3322929550294220e+00 -4.5663595299194615e-03 + 5.1632327987474103e-01 1.6260753531548136e+00 -3.3914773891037031e-02 + 5.7879975839313980e-01 1.9291350899788957e+00 -7.5684548641242189e-02 + 5.9876965217473177e-01 2.2482612406184268e+00 -1.3975592828851258e-01 + 5.3959697696823805e-01 2.5711028076301954e+00 -2.3326594818010637e-01 + 3.7672720671678994e-01 2.8618361303556439e+00 -3.5079488781904911e-01 + 1.1545502452530165e-01 3.0767603829885730e+00 -4.7495848912350425e-01 + -2.1307978453965393e-01 3.1868105766532349e+00 -5.8784062865607856e-01 + -5.7204291870283597e-01 3.1842351797711927e+00 -6.7916014480070164e-01 + -9.3106903969009169e-01 3.0732411192359579e+00 -7.4559165229177227e-01 + -1.2673290929402303e+00 2.8612707098071533e+00 -7.8870243790081496e-01 + -1.5650518547336545e+00 2.5518392982839897e+00 -8.1454672080726231e-01 + -1.8051530633004245e+00 2.1343819708871994e+00 -8.3014287886223703e-01 + -1.9116008006421725e+00 1.6110602960179379e+00 -8.3307356417856893e-01 + -1.7812008198445404e+00 1.1067611146431142e+00 -8.1709582517161894e-01 + -1.5168858337112074e+00 7.5101775365034429e-01 -7.9597847232479302e-01 + id 14565 + loc 1.6526399552822113e-01 4.9519518017768860e-01 404 + blend 0.0000000000000000e+00 + interp 5.1058493085081857e-01:4.6782555150493571e-01:4.2104309165132470e-01:4.7900709947394815e-01:9.9827778833469172e-01:5.1057982500151011e-01:1.3549656735108000e+00:4.5874088545004499e-01:1.9338949943685846e+00:3.1983924932534669e-01:2.4271536443834183e+00:2.8942617724721736e-01:3.3430336548474795e+00:4.5726601557336005e-01:3.9903075774187045e+00 + CVs 20 + -6.6761347769409507e-02 1.0688343644096127e-01 -8.1625969630519088e-02 + -1.2736187277251373e-01 2.0996249066482350e-01 -1.3816644268205164e-01 + -1.8861013279368941e-01 3.1374153296835727e-01 -1.7881904512870578e-01 + -2.5862533900887352e-01 4.2695126470881212e-01 -2.0982627507650758e-01 + -3.3867417351265339e-01 5.4974246961712847e-01 -2.2874187566650939e-01 + -4.2932176641346753e-01 6.8058102961113320e-01 -2.3185061558452635e-01 + -5.3064818789692336e-01 8.1669977499433555e-01 -2.1490588894171564e-01 + -6.4170238820188374e-01 9.5459966435137866e-01 -1.7339828026525655e-01 + -7.5972664962025971e-01 1.0902882385239852e+00 -1.0285844290302515e-01 + -8.7975998358745922e-01 1.2196369942341108e+00 5.6749408995071526e-04 + -9.9510526220733986e-01 1.3396485619276981e+00 1.3891406558803865e-01 + -1.0988737701974522e+00 1.4496197820246748e+00 3.1186530551064129e-01 + -1.1833402937183439e+00 1.5488983459298868e+00 5.1655480109469942e-01 + -1.2397534874498051e+00 1.6366072622167953e+00 7.4814239343080846e-01 + -1.2572806269600636e+00 1.7123107326694302e+00 9.9957023921094112e-01 + -1.2219617775822842e+00 1.7781935666840458e+00 1.2590557688327202e+00 + -1.1192802466189384e+00 1.8390167241179995e+00 1.5094337000566578e+00 + -9.4072517895005048e-01 1.8960431352364280e+00 1.7313042546816901e+00 + -9.5521624131186489e-01 1.9925448652431601e+00 1.9906013939328755e+00 + id 14566 + loc 8.5337376594543457e-01 8.7088692188262939e-01 400 + blend 0.0000000000000000e+00 + interp 3.8950549501644705e-01:3.3378675581116518e-01:6.5350103358446687e-01:2.4397926631438671e-01:1.2757009239704511e+00:3.8950159996149691e-01:1.9845914933848441e+00:2.6335192659020756e-01:2.6470759718709793e+00:3.4151439689478214e-01:3.1356915899398365e+00:2.4290031889610858e-01:3.9215320132252947e+00 + CVs 20 + -2.8790584439433275e-01 1.9827424949837547e-01 -1.9217441974199159e-01 + -5.3201785139832369e-01 4.0465228435079553e-01 -4.0219380614579858e-01 + -7.4539564212890030e-01 6.2340343587500757e-01 -6.3304504879849477e-01 + -9.3977487757610711e-01 8.5132093153042809e-01 -8.7998110908844751e-01 + -1.1396648984808386e+00 1.0838848085151653e+00 -1.1352979284319942e+00 + -1.3814691826025283e+00 1.3145376478769959e+00 -1.3912447894940121e+00 + -1.6950520385764731e+00 1.5292924317359009e+00 -1.6384673400548584e+00 + -2.0951286611889666e+00 1.7050237953642819e+00 -1.8745609182454737e+00 + -2.5809886368303832e+00 1.8133094841049935e+00 -2.1176584740949895e+00 + -3.1396856200462788e+00 1.8146609106494118e+00 -2.3966119278297668e+00 + -3.7183118301493976e+00 1.6539106703282964e+00 -2.7217426728771228e+00 + -4.2255547805914055e+00 1.3335377080744999e+00 -3.0609600588255512e+00 + -4.6485421016555426e+00 9.4897365522615940e-01 -3.3683652491283977e+00 + -5.0523906769059908e+00 5.9148033567133163e-01 -3.6203465476285004e+00 + -5.4908030951461049e+00 2.9893989189774528e-01 -3.8153473130565008e+00 + -5.9987902672243898e+00 4.5727911243687025e-02 -3.9815779565542440e+00 + -6.5828513099645418e+00 -2.2664577368738570e-01 -4.1742533272923747e+00 + -7.1928285954148601e+00 -5.5272177559664981e-01 -4.4329621297935571e+00 + -7.7942827635835501e+00 -9.4208352373678972e-01 -4.7011301178782956e+00 + id 14567 + loc 2.1681123971939087e-01 4.7965022921562195e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8739696174393817e-01:2.3513929050807103e-01:7.9595898041072943e-01:3.6473776904990263e-01:1.3725103847368227e+00:2.5405134873227986e-01:2.0326952302975627e+00:3.8739308777432074e-01:2.6565308476850249e+00:2.8318714783553361e-01:3.2443459484977195e+00:2.7552943480931508e-01:3.9758027194195695e+00 + CVs 20 + -1.6678329762601996e-01 2.6335622929812830e-01 -4.6344811668040900e-02 + -3.1337943021776449e-01 5.1854339038149466e-01 -1.1420615976583942e-01 + -4.3027284332243065e-01 7.7181443448447573e-01 -1.8996920669350748e-01 + -5.2061578951017662e-01 1.0300419775301866e+00 -2.7144373911935310e-01 + -5.9509820227391297e-01 1.2965385693984532e+00 -3.6579390381437032e-01 + -6.6491902334399311e-01 1.5741631021227436e+00 -4.7415027366711404e-01 + -7.4440770908358012e-01 1.8705291849751990e+00 -5.9005357246426660e-01 + -8.6174827176634883e-01 2.2060338306656848e+00 -7.0301902653642490e-01 + -1.0793940881118651e+00 2.5975997741928829e+00 -7.8908137344391172e-01 + -1.4509830226146989e+00 2.9792011761894135e+00 -8.0210847889810633e-01 + -1.9125289341061209e+00 3.2400644656860393e+00 -7.3298849863560944e-01 + -2.3664366875533345e+00 3.3684862679851184e+00 -6.1978804663637854e-01 + -2.7653650503938665e+00 3.4089514472208085e+00 -4.9093103438691998e-01 + -3.0884303456455711e+00 3.4019413186818865e+00 -3.5060001191529633e-01 + -3.3267277863113454e+00 3.3703392137462069e+00 -1.7718105210323754e-01 + -3.4960038404890055e+00 3.3113727536825892e+00 1.0007386641395355e-01 + -3.6719170149042846e+00 3.1579429596559763e+00 6.0431683687623883e-01 + -3.9860455481124073e+00 2.8126540465262853e+00 1.1934430450609432e+00 + -4.0350081708828958e+00 2.8517323540225288e+00 9.9977589020033730e-01 + id 14568 + loc 3.3966448903083801e-01 1.2866818904876709e-01 399 + blend 0.0000000000000000e+00 + interp 4.0146483855287707e-01:4.0146082390449156e-01:3.9548416497361849e-01:3.9643939555622515e-01:9.6805955984455572e-01:2.9276204932042649e-01:1.8184268229912002e+00:3.1413957109765839e-01:2.9312589697828817e+00:2.7332393822889550e-01:3.9981267517739942e+00 + CVs 20 + -1.7075863236781430e-01 2.9672243544161786e-01 2.3068717272810471e-01 + -3.6428125938316458e-01 5.7525434104076378e-01 4.4614882163158986e-01 + -5.8560543566978474e-01 8.3409312714858641e-01 6.4875924494268644e-01 + -8.2827984825378032e-01 1.0713696336062215e+00 8.4722033587952550e-01 + -1.0772856384461043e+00 1.2864116387951763e+00 1.0542610359484583e+00 + -1.3194924556390810e+00 1.4763295908879226e+00 1.2788223948326429e+00 + -1.5493833578327416e+00 1.6336018463635442e+00 1.5225442514269913e+00 + -1.7680944514315684e+00 1.7489337797401872e+00 1.7828419868226517e+00 + -1.9782842609058746e+00 1.8144085787829338e+00 2.0551253653296024e+00 + -2.1781967889677678e+00 1.8239851360483301e+00 2.3331940363725332e+00 + -2.3662182886412038e+00 1.7759750936546952e+00 2.6143922600908676e+00 + -2.5508160678384675e+00 1.6754835828333612e+00 2.9066799839923814e+00 + -2.7457433343962800e+00 1.5353952515942353e+00 3.2178139637555137e+00 + -2.9653491327685448e+00 1.3846277493950754e+00 3.5425561083633799e+00 + -3.2189945489569789e+00 1.2710612150938969e+00 3.8587295513078432e+00 + -3.5067482216207608e+00 1.2302236329541218e+00 4.1371859601212471e+00 + -3.8223165149901015e+00 1.2687735235865003e+00 4.3522032025574777e+00 + -4.1295176055613458e+00 1.3832503417696433e+00 4.4879587821843154e+00 + -4.3943684938804628e+00 1.5579263523349556e+00 4.5556160810475399e+00 + id 14569 + loc 6.7410945892333984e-01 7.5783026218414307e-01 393 + blend 0.0000000000000000e+00 + interp 3.2061810252101880e-01:2.7514575877399489e-01:3.6632234568830802e-03:3.0033809705872316e-01:9.9816416229288829e-01:2.7173686124773250e-01:1.7195564776422312e+00:2.8543138075822849e-01:2.2615937153774861e+00:3.2061489633999363e-01:3.0013212317281801e+00 + CVs 20 + -2.6665423819752621e-01 2.9805245987711437e-01 -2.5384333909915030e-01 + -5.2475245313701402e-01 5.8452566419219965e-01 -4.8844025987055179e-01 + -7.8428662177558262e-01 8.7243173694383480e-01 -7.3615865673360359e-01 + -1.0562731550191975e+00 1.1564540756426613e+00 -1.0096417611490534e+00 + -1.3540285624009181e+00 1.4196239589658466e+00 -1.3040796614643102e+00 + -1.6847658689695686e+00 1.6418311226278044e+00 -1.6078974502237147e+00 + -2.0422917213181258e+00 1.8009490191885431e+00 -1.9015204112669852e+00 + -2.4071104906738472e+00 1.8750347112301045e+00 -2.1613913688229056e+00 + -2.7661908892720453e+00 1.8577656771992999e+00 -2.3785447741441921e+00 + -3.1284762459097886e+00 1.7630741033391137e+00 -2.5708789016048388e+00 + -3.4886441717255976e+00 1.6093348404006251e+00 -2.7597819392428602e+00 + -3.8059358157894092e+00 1.4112469625320623e+00 -2.9400082037874182e+00 + -4.0467270559700168e+00 1.1801987559796632e+00 -3.0877430982452263e+00 + -4.2162410720094687e+00 9.3047467897755443e-01 -3.1924099071256586e+00 + -4.3376550833541474e+00 6.7602524342307424e-01 -3.2652576260503161e+00 + -4.4346567632165552e+00 4.1993182774063564e-01 -3.3222246251195147e+00 + -4.5189277641370449e+00 1.6102707806581340e-01 -3.3768651301890653e+00 + -4.6002031361382549e+00 -9.5786960352859385e-02 -3.4222030307273963e+00 + -4.7420255562415043e+00 -3.7889755589616603e-01 -3.3774815942782515e+00 + id 14570 + loc 1.9214780628681183e-01 5.2330124378204346e-01 400 + blend 0.0000000000000000e+00 + interp 4.9853605672697809e-01:2.8020447533327703e-01:3.3950342549582990e-01:4.9853107136641084e-01:9.7848692832449180e-01:2.5555297185428305e-01:1.8112220542375410e+00:2.7024618713232818e-01:2.8635274734069935e+00:3.1232753443327865e-01:3.6389799159264715e+00 + CVs 20 + -2.6904191571722869e-01 3.2291250068552552e-01 -6.7540328425853585e-02 + -5.1478077653820575e-01 6.3790142904868685e-01 -1.6604496216970488e-01 + -7.4710139223493199e-01 9.3715872571885328e-01 -3.1083294383734739e-01 + -9.6925566828200926e-01 1.2135597477879581e+00 -5.0600810648979877e-01 + -1.1805651502110950e+00 1.4615165771780263e+00 -7.4784422176665910e-01 + -1.3814677597158969e+00 1.6773733714023820e+00 -1.0301839927663490e+00 + -1.5738729221722929e+00 1.8582691104336695e+00 -1.3476095879831385e+00 + -1.7581262012443013e+00 2.0012375170066252e+00 -1.6966061746074357e+00 + -1.9308149188552748e+00 2.1028779231416417e+00 -2.0760734156400189e+00 + -2.0841501004969372e+00 2.1590278886572873e+00 -2.4862666198031240e+00 + -2.2092216537930436e+00 2.1649324377490942e+00 -2.9250878167626251e+00 + -2.3095971226787624e+00 2.1174145909542483e+00 -3.3819613094018495e+00 + -2.4139494830356423e+00 2.0141526650164678e+00 -3.8317155614042306e+00 + -2.5619307100936339e+00 1.8511185054897108e+00 -4.2446270083535920e+00 + -2.7723572253655835e+00 1.6235437032648532e+00 -4.6155680579049534e+00 + -3.0573650770262928e+00 1.3452429955016303e+00 -4.9411667212731594e+00 + -3.4286637135727038e+00 1.0617750706004934e+00 -5.2020042837134186e+00 + -3.8724051140127518e+00 7.9980736624390025e-01 -5.4111625937479140e+00 + -4.3294153161545843e+00 4.8959983700765752e-01 -5.7234049316657885e+00 + id 14571 + loc 5.2991682291030884e-01 4.8629814386367798e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2671422358569799e-01:4.2670995644346216e-01:2.9103626564760099e-01:3.4483174404818634e-01:1.0425930578388667e+00:3.6713754375789609e-01:1.9437738209888902e+00:3.9843212954911922e-01:2.3556996570144211e+00:3.9935590793221643e-01:2.9996939614891884e+00:2.8039349437219474e-01:3.9324837578727068e+00 + CVs 20 + 6.4250987052153333e-02 4.6096998417491919e-01 -1.4095030735265990e-01 + 6.3361189010557512e-02 9.0677774140224421e-01 -2.2713203726940048e-01 + 2.8213338564380852e-02 1.3483116470048198e+00 -2.7227483407638209e-01 + -4.0448271555381443e-02 1.7975473080172673e+00 -2.6940080523662513e-01 + -1.5136539090144407e-01 2.2456244663702076e+00 -1.9513706755330107e-01 + -3.1103269226269703e-01 2.6703739128879525e+00 -1.2932207793893369e-02 + -5.1328938359465959e-01 3.0238659960021597e+00 3.0439067923297136e-01 + -7.3264353126687420e-01 3.2517953093841765e+00 7.4321409216194945e-01 + -9.3843259692230596e-01 3.3239040546987004e+00 1.2590281306038955e+00 + -1.1093216627422553e+00 3.2383239762966376e+00 1.7999700947730006e+00 + -1.2375340900765608e+00 3.0134584707405159e+00 2.3210972748581340e+00 + -1.3268676322580435e+00 2.6755124442893927e+00 2.7908952541324115e+00 + -1.3894278992270435e+00 2.2503277401768309e+00 3.1885174779382939e+00 + -1.4425539205470643e+00 1.7580818647592209e+00 3.4983411240951110e+00 + -1.4999688687807708e+00 1.1982193188324277e+00 3.6978422471119234e+00 + -1.5521960690869205e+00 5.2023995742973095e-01 3.7102348265447063e+00 + -1.5620061973745489e+00 -2.8668507451148750e-01 3.3285396820845667e+00 + -1.5348882879850683e+00 -8.9313982108267598e-01 2.5631254406466475e+00 + -1.5879595183625042e+00 -1.1696923200937088e+00 2.4456161093923736e+00 + id 14572 + loc 8.4642052650451660e-01 6.7721688747406006e-01 404 + blend 0.0000000000000000e+00 + interp 4.5635717446571233e-01:4.5635261089396773e-01:3.6067504982849108e-01:3.4707650940185286e-01:9.4840596511860997e-01:3.5736320487211370e-01:1.4206806365680145e+00:2.6866089825981060e-01:2.0519070352126554e+00:3.4356683226389306e-01:2.9930210397528487e+00:3.6993472630444846e-01:3.4176539911156545e+00:3.8094919201944860e-01:3.9999449005339183e+00 + CVs 20 + -1.7934244125733065e-02 1.0780269590639185e-01 -1.2468482041147486e-01 + -1.7273563679630011e-02 2.3054243187620344e-01 -2.1829024791612822e-01 + -2.8424813145360717e-03 3.4869134438553329e-01 -2.9736626154312051e-01 + 2.7970829056915114e-02 4.6172691831228230e-01 -3.6432926998551318e-01 + 8.1144720439034923e-02 5.6369878330168399e-01 -4.1561359582136381e-01 + 1.5938197565453266e-01 6.4634712169151176e-01 -4.4790108923418481e-01 + 2.5993451492744080e-01 7.0125429628970215e-01 -4.5797125316429688e-01 + 3.7262062200135604e-01 7.2635665889239864e-01 -4.4328229293616012e-01 + 4.8413151516733877e-01 7.2853048870937220e-01 -4.0307756108988035e-01 + 5.8399878731235655e-01 7.1638683783230050e-01 -3.4082712625056366e-01 + 6.6627938415683430e-01 6.9362628950723482e-01 -2.6802291222505742e-01 + 7.3097369795665834e-01 6.6480777621894915e-01 -1.9901020846897752e-01 + 7.8329245221376509e-01 6.4125083174150566e-01 -1.3678929010875199e-01 + 8.2898726128144895e-01 6.3470909975619971e-01 -7.5407151945621309e-02 + 8.7111735012312286e-01 6.5071721070145938e-01 -1.0449614086006309e-02 + 9.1052211063804656e-01 6.8761751070711941e-01 5.6353315410181959e-02 + 9.4694154655301943e-01 7.4071784141474395e-01 1.2271994040385598e-01 + 9.7694261832149043e-01 8.0742729454489059e-01 1.9151344709743434e-01 + 9.7813820237994964e-01 9.0236011352515422e-01 2.7900388064845372e-01 + id 14573 + loc 8.9256651699542999e-02 5.3825211524963379e-01 401 + blend 0.0000000000000000e+00 + interp 4.0968497314336866e-01:4.0968087629363725e-01:9.0456087483270498e-04:2.9637425321677185e-01:7.3207006146488618e-01:2.8566337585883994e-01:9.9924424841983450e-01:3.1017560732029004e-01:1.4306219328091692e+00:3.1851492578521778e-01:2.0899388518555932e+00:2.9518902220028820e-01:2.9728237638051596e+00:3.3052487667285907e-01:3.5281633327234712e+00 + CVs 20 + -2.1150723203249525e-02 2.7230302094809816e-01 -3.5071735538173837e-01 + -2.6656146758374993e-02 5.3033879844763776e-01 -6.9135734831392504e-01 + -3.1324131396519711e-02 7.6735170045045498e-01 -1.0345732418313855e+00 + -4.6918960526399184e-02 9.7801671454775885e-01 -1.3845348344558375e+00 + -8.5581330625414731e-02 1.1595107314693240e+00 -1.7406898799886361e+00 + -1.6172272018848799e-01 1.3113396042214962e+00 -2.1003975597190503e+00 + -2.8589004632655651e-01 1.4313755728859834e+00 -2.4539936629351362e+00 + -4.5886050712759874e-01 1.5176636671301911e+00 -2.7860240895619315e+00 + -6.7160909109009670e-01 1.5722366388123876e+00 -3.0802187042885034e+00 + -9.0953265478844225e-01 1.6023699244444369e+00 -3.3232285658499294e+00 + -1.1625318741812358e+00 1.6190290719354496e+00 -3.5112734446796114e+00 + -1.4329324373575767e+00 1.6302084324445705e+00 -3.6538835798593685e+00 + -1.7320635559690953e+00 1.6294985204194543e+00 -3.7709052044477365e+00 + -2.0654804180165383e+00 1.5836338803162833e+00 -3.8866286428317744e+00 + -2.4200986502688546e+00 1.4540423208580990e+00 -4.0137676116657648e+00 + -2.7808765164571283e+00 1.2344645930937479e+00 -4.1331683687228233e+00 + -3.1592021206458294e+00 9.4929212094406590e-01 -4.2070674325376727e+00 + -3.5490452382551001e+00 6.9249363796374808e-01 -4.1598915749026517e+00 + -3.7238756610244068e+00 7.6509936580564641e-01 -3.8594921024891962e+00 + id 14574 + loc 9.5774716138839722e-01 3.3461478352546692e-01 399 + blend 0.0000000000000000e+00 + interp 5.2109387526120710e-01:4.6184448175100434e-01:4.2748011846310641e-01:4.3649177690433522e-01:9.8195176430297049e-01:5.2108866432245449e-01:1.5875226716825024e+00:2.9093477939953927e-01:2.0885513520074044e+00:4.8249129812820873e-01:2.9257772522635124e+00:4.4620104955522155e-01:3.1279327562782946e+00:2.7505311609651151e-01:3.6296820878402700e+00 + CVs 20 + 2.2611726852520758e-01 3.2372658143844557e-01 2.3951506134593298e-01 + 4.3328458398618391e-01 6.3837212778885022e-01 4.8748096134909369e-01 + 6.0502780194200478e-01 9.3360000125991294e-01 8.0069079276224231e-01 + 7.4210283659934628e-01 1.2047329922284944e+00 1.1892238982632608e+00 + 8.5709886498023313e-01 1.4537895222905690e+00 1.6436517451473227e+00 + 9.6164861717707861e-01 1.6817447962090513e+00 2.1569816575194674e+00 + 1.0661078743968870e+00 1.8809609388977071e+00 2.7246357244818693e+00 + 1.1829717885770585e+00 2.0299012594361212e+00 3.3418056032535954e+00 + 1.3257988317889855e+00 2.0908001283583419e+00 3.9987015669845767e+00 + 1.5030765494815170e+00 2.0138404753089354e+00 4.6720036859417045e+00 + 1.7125226066053498e+00 1.7659530220490147e+00 5.3139426763072342e+00 + 1.9396478047282959e+00 1.3841606659539314e+00 5.8701885090056312e+00 + 2.1663410598671584e+00 9.6886068206962150e-01 6.3253504898076089e+00 + 2.3698640956194792e+00 6.4189523139215998e-01 6.7062794477805578e+00 + 2.5015902582764022e+00 5.0898802227018081e-01 7.0428618094974382e+00 + 2.4774806194762049e+00 5.9814258819264721e-01 7.3081579571335578e+00 + 2.2456193133029974e+00 8.6531213367802828e-01 7.3885795714850246e+00 + 1.9719111875207316e+00 1.1201340733953087e+00 7.2469026539272514e+00 + 1.9615956399232242e+00 1.0290193879507872e+00 7.4562609425246755e+00 + id 14575 + loc 4.1918787360191345e-01 4.8032194375991821e-01 1069 + blend 0.0000000000000000e+00 + interp 4.6177660107638535e-01:4.6177198331037461e-01:6.6740468845699552e-01:2.9229915670721951e-01:1.0658152489964035e+00:2.5366563068027265e-01:2.0037894170446093e+00:2.4992704790395406e-01:3.0020309416377882e+00:2.6732310246511842e-01:3.8722469928245054e+00 + CVs 20 + -1.8230052799137936e-01 3.9732485228874864e-01 -1.4927416572080371e-01 + -3.3252125740376054e-01 7.4894869120840701e-01 -3.2997106916221747e-01 + -4.6310591928698741e-01 1.0693141242861808e+00 -5.2543357952355252e-01 + -5.9297938814401197e-01 1.3636694822609980e+00 -7.3563004849908731e-01 + -7.5150566979031130e-01 1.6497787179300183e+00 -9.5763994589079837e-01 + -9.7339938999607867e-01 1.9444940266147728e+00 -1.1747594402333070e+00 + -1.2870551094749512e+00 2.2364683941413941e+00 -1.3573299774977663e+00 + -1.6970689618084180e+00 2.4812570381376782e+00 -1.4790572391424097e+00 + -2.1753916846257733e+00 2.6287091172979080e+00 -1.5353653403345953e+00 + -2.6692034031612502e+00 2.6621443430034692e+00 -1.5453933214514071e+00 + -3.1352367497610585e+00 2.6101862247436376e+00 -1.5382864831211354e+00 + -3.5533724432344198e+00 2.5211612285278453e+00 -1.5371724779430378e+00 + -3.9094951490390142e+00 2.4451197354382890e+00 -1.5530583613842341e+00 + -4.1859608791675704e+00 2.4256312371808266e+00 -1.5786898581662887e+00 + -4.3633060312519731e+00 2.4903748336586302e+00 -1.5802315371168465e+00 + -4.4149980692302053e+00 2.6543501713236561e+00 -1.4769746517634381e+00 + -4.3490165788699127e+00 2.8807970229379540e+00 -1.1209113083567348e+00 + -4.3524057859592347e+00 2.9991755512996372e+00 -5.8250269754320394e-01 + -4.5256210154919074e+00 3.0528733554371890e+00 -7.6669494277333050e-01 + id 14576 + loc 6.6359555721282959e-01 9.7964376211166382e-01 393 + blend 0.0000000000000000e+00 + interp 4.8291122119848917e-01:2.7732907965926407e-01:2.7384475306427669e-01:4.8290639208627723e-01:9.9998092644261127e-01:2.5749417343362463e-01:1.7071150915454243e+00:4.4115600394587207e-01:2.0090732861186749e+00:2.9663253227103814e-01:2.9644508901244606e+00:4.1071304919001272e-01:3.6151593119682368e+00 + CVs 20 + -2.7154291834513700e-01 3.1388011407310101e-01 -2.9001083646299697e-01 + -4.8396197934518553e-01 5.9378878370495713e-01 -5.7294861228889271e-01 + -6.6163305417656004e-01 8.4406211861298786e-01 -8.6674899931832894e-01 + -8.2674441023464684e-01 1.0698951950271200e+00 -1.1769563113605945e+00 + -9.9597417721632442e-01 1.2727699327848105e+00 -1.4998253833178004e+00 + -1.1799321461539720e+00 1.4493896529305061e+00 -1.8307216627140308e+00 + -1.3833693643262714e+00 1.5933038796554864e+00 -2.1673957528637353e+00 + -1.6078834042672940e+00 1.6945970567666158e+00 -2.5081011666742086e+00 + -1.8513529490327758e+00 1.7386338647335176e+00 -2.8464670919409101e+00 + -2.1040899772407906e+00 1.7121055016816706e+00 -3.1696615683370770e+00 + -2.3563795131201664e+00 1.6146928842193935e+00 -3.4615778276812463e+00 + -2.6091792350721108e+00 1.4635647977873858e+00 -3.7097601713131914e+00 + -2.8664502041937938e+00 1.2848708803802920e+00 -3.9076245288388707e+00 + -3.1272753746614894e+00 1.1082248960159466e+00 -4.0498221225025004e+00 + -3.3877084755309093e+00 9.5297921176395173e-01 -4.1288938317002826e+00 + -3.6589437272298482e+00 8.1533242531405836e-01 -4.1369098216743758e+00 + -3.9932423733681137e+00 6.5422630698779849e-01 -4.0882468989854841e+00 + -4.4222880762034178e+00 4.4507004141670947e-01 -4.0980115482287705e+00 + -4.6544915661694564e+00 4.5149296713504961e-01 -4.2220996829539494e+00 + id 14577 + loc 9.2953515052795410e-01 2.1957990527153015e-01 401 + blend 0.0000000000000000e+00 + interp 5.0332482746524310e-01:5.0331979421696849e-01:1.1469976897251921e-01:4.2723193633715700e-01:9.8561682310378995e-01:3.5705096343375420e-01:1.6291966538364298e+00:3.0256750397652271e-01:2.0941282408781676e+00:4.9771237020064124e-01:2.9106198480117929e+00:2.7300881061003657e-01:3.6111519040488251e+00 + CVs 20 + 1.2474964801559126e-01 3.1129703140636827e-01 1.4479811809769966e-01 + 2.3772674191705528e-01 6.4782990008232910e-01 3.1056009401010642e-01 + 3.3208540761632654e-01 1.0069305310362264e+00 4.9772346664451483e-01 + 4.0485103931075694e-01 1.3806664886755158e+00 7.1285334565996239e-01 + 4.6020523509165856e-01 1.7581435184233265e+00 9.6526976524962937e-01 + 5.0679500921155318e-01 2.1275496453713485e+00 1.2597290846108660e+00 + 5.5712249462158192e-01 2.4806114332014770e+00 1.5997041531202432e+00 + 6.2900885887214897e-01 2.8078034108253522e+00 1.9861329312972811e+00 + 7.3451790657868687e-01 3.0895089652771244e+00 2.4116954968440378e+00 + 8.6761183508093920e-01 3.2987470705367081e+00 2.8690923685914882e+00 + 1.0223219595787756e+00 3.4046069062333180e+00 3.3635389264099942e+00 + 1.2108928839368205e+00 3.3605487308351059e+00 3.8965054376825510e+00 + 1.4511725318905717e+00 3.1301952721583115e+00 4.4151808668473764e+00 + 1.7649879123858008e+00 2.7657302806558413e+00 4.8316287497616672e+00 + 2.1728424619560744e+00 2.4029390122980647e+00 5.0974359184234626e+00 + 2.6472846430095074e+00 2.2030895615726616e+00 5.2132514134804913e+00 + 3.0738445855844736e+00 2.2471790030402516e+00 5.2122439540021999e+00 + 3.3869880607378979e+00 2.3927207102035597e+00 5.1542776145857854e+00 + 3.7362170389509801e+00 2.4378006551445619e+00 5.0891886269812652e+00 + id 14578 + loc 8.4857332706451416e-01 8.4344708919525146e-01 404 + blend 0.0000000000000000e+00 + interp 4.3093998261282973e-01:4.3093567321300363e-01:5.3486710776821667e-01:3.4499534650882863e-01:1.0673917373941169e+00:4.0430719967428086e-01:2.0022592702623170e+00:3.5510010416963833e-01:2.7769662990834978e+00:3.9810754678257326e-01:3.0035526966230091e+00:3.4809837435275537e-01:3.4193074517390638e+00:2.5284516752429431e-01:3.9956047997761992e+00 + CVs 20 + -4.6795059210048132e-02 6.7262169798781163e-02 1.6104282897711208e-02 + -1.0009316774942281e-01 1.1591401669449237e-01 4.3209114038307794e-02 + -1.5744567473048598e-01 1.8053969258803526e-01 7.7981576478899930e-02 + -2.1102479624249387e-01 2.6035002794781192e-01 1.0298474795859762e-01 + -2.5558386589489057e-01 3.5615632672245906e-01 1.1694815040504249e-01 + -2.8481956102959588e-01 4.6442063787008048e-01 1.1876106013757373e-01 + -2.9354290940074401e-01 5.7497105635985213e-01 1.0744335783708189e-01 + -2.8083417164041968e-01 6.7408135659493484e-01 8.2092076886205179e-02 + -2.4849825015404992e-01 7.5612829820606675e-01 4.5288541356891393e-02 + -1.9559672797831168e-01 8.2630126447552765e-01 7.9123085908142654e-03 + -1.2084137101175013e-01 8.8535348667850378e-01 -1.9885150262953205e-02 + -2.8241217646075567e-02 9.2187498675575363e-01 -4.4243029233301534e-02 + 7.4732143870807566e-02 9.2600243208387600e-01 -8.0430204352172990e-02 + 1.8306992322433746e-01 8.9979825218163034e-01 -1.3610925482387176e-01 + 2.9508915577177808e-01 8.5137146856267687e-01 -2.0896886849798008e-01 + 4.0946735151177266e-01 7.8621737191993724e-01 -2.9661186954413871e-01 + 5.2516573295328139e-01 7.0572285119127642e-01 -4.0298331778598728e-01 + 6.4398212565744661e-01 6.0897144439744255e-01 -5.3200793831750470e-01 + 7.8938695980699325e-01 4.7835893050373246e-01 -6.8462579340519247e-01 + id 14579 + loc 1.5128922462463379e-01 8.4018015861511230e-01 1079 + blend 0.0000000000000000e+00 + interp 5.6020309995882545e-01:3.5347689687163769e-01:2.2229823825216977e-01:4.1577182040145633e-01:9.0998195924003378e-01:3.4978495704336293e-01:1.3021462984778669e+00:4.1927434080701914e-01:1.9894418514064851e+00:5.6019749792782592e-01:2.5911661755468200e+00:3.9594569890682046e-01:3.1409541665758263e+00:4.4167863377613370e-01:3.9443092816347898e+00 + CVs 20 + 9.7707431162910155e-02 4.1992877701183590e-01 2.1524057083357359e-01 + 2.2498845481777352e-01 7.5551258115984687e-01 3.2886586300410525e-01 + 3.6738159964023798e-01 1.0490168023329729e+00 3.9401856500992466e-01 + 5.1498913329613427e-01 1.3139267149044238e+00 4.3294794074597565e-01 + 6.6071761514406901e-01 1.5434397394863244e+00 4.4670065203450676e-01 + 7.9308524466454444e-01 1.7285656103715898e+00 4.4115438992822043e-01 + 9.0127475532198886e-01 1.8660698947630392e+00 4.2565096108958078e-01 + 9.8255511157978281e-01 1.9656489855934995e+00 4.0982394709859415e-01 + 1.0422705862245580e+00 2.0447504918153214e+00 3.9801046382103356e-01 + 1.0902179146261273e+00 2.1164602111598230e+00 3.8158258558306712e-01 + 1.1332680349738078e+00 2.1786951360723013e+00 3.4282487213851487e-01 + 1.1701111636557138e+00 2.2174999877163426e+00 2.6943554682857285e-01 + 1.1938705021918623e+00 2.2181924465607752e+00 1.5934342370088384e-01 + 1.1976376657339567e+00 2.1723873490225936e+00 1.6937262128617570e-02 + 1.1799860731712226e+00 2.0888333496857436e+00 -1.5059409741175134e-01 + 1.1485547756910872e+00 2.0076180319590446e+00 -3.4120155687287779e-01 + 1.1153809916544530e+00 1.9403774033942187e+00 -5.6167424395105847e-01 + 1.0771621916881928e+00 1.7688245183862596e+00 -7.1890555805429113e-01 + 1.0111356410208154e+00 1.3885751072974064e+00 -5.7857412239549477e-01 + id 14580 + loc 7.5464677810668945e-01 1.1585547029972076e-01 399 + blend 0.0000000000000000e+00 + interp 4.5121630581820749e-01:2.8226602585241339e-01:9.1739684985092662e-04:4.5121179365514935e-01:7.8003554341206149e-01:2.6074774218300295e-01:1.5048963096193304e+00:2.7012510680716489e-01:2.7976709736766505e+00:3.1798140519838236e-01:3.3153881271763446e+00 + CVs 20 + 3.6096697647795328e-01 3.3690343160765873e-01 2.1041306744809368e-01 + 6.6624500885029492e-01 6.6529008889456631e-01 4.2201003076054294e-01 + 9.1787177450246304e-01 9.8151564663399993e-01 6.6406796910577193e-01 + 1.1226836625495913e+00 1.2812892591650740e+00 9.3064757860900849e-01 + 1.2921707778422395e+00 1.5662331343799709e+00 1.2134390242606414e+00 + 1.4377737141045390e+00 1.8390685119092138e+00 1.5169035641783049e+00 + 1.5705289316458815e+00 2.0976301350094460e+00 1.8523667362479062e+00 + 1.7042859376101793e+00 2.3325950404094868e+00 2.2343191035885472e+00 + 1.8550394303092221e+00 2.5241203074524856e+00 2.6755702820679508e+00 + 2.0356457685817415e+00 2.6403350152930352e+00 3.1788975323626811e+00 + 2.2420404416092334e+00 2.6448551150343338e+00 3.7194695502719868e+00 + 2.4410735008083773e+00 2.5278101323247455e+00 4.2353175389509445e+00 + 2.5884766594633151e+00 2.3308875604278354e+00 4.6582243936471350e+00 + 2.6470937248265511e+00 2.1231907020372285e+00 4.9323698860124079e+00 + 2.6051459360971263e+00 1.9451968660357539e+00 5.0123506882455997e+00 + 2.5175952693670145e+00 1.7762205001351588e+00 4.8567553877431244e+00 + 2.5212983118689962e+00 1.5383358865685948e+00 4.4403752438640369e+00 + 2.6938152535513229e+00 1.1661906633441175e+00 4.0215350360957594e+00 + 2.5994120172744424e+00 9.9315013334847024e-01 4.1263458754780329e+00 + id 14581 + loc 4.0826079249382019e-01 8.7892949581146240e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1808669423307199e-01:3.1794028260261392e-01:2.9017134721951188e-01:3.4115300293140555e-01:9.7933258445030047e-01:2.4893835835956160e-01:1.6735270016768191e+00:3.5811402616823368e-01:2.3305212152058599e+00:4.1808251336612967e-01:2.9833666959978058e+00:2.5258376871778432e-01:3.5979187835378510e+00 + CVs 20 + 1.9662888897898764e-01 2.5392521003971558e-01 -1.7107471040167982e-01 + 3.7487037640267989e-01 4.9760373958952003e-01 -3.3204203616018685e-01 + 5.4554981487114007e-01 7.2942423092039843e-01 -4.9076826890628844e-01 + 7.1066490391607173e-01 9.4650271949489628e-01 -6.5025130538914011e-01 + 8.6751546231242715e-01 1.1479898201333778e+00 -8.0871610095030855e-01 + 1.0142013163556789e+00 1.3365490424027939e+00 -9.6312746079550338e-01 + 1.1465319724409557e+00 1.5220491225693920e+00 -1.1168103585078770e+00 + 1.2556637472633423e+00 1.7169704868708286e+00 -1.2820214747369350e+00 + 1.3362727292185266e+00 1.9225974196965281e+00 -1.4753053539033569e+00 + 1.3884498668293923e+00 2.1163249301095433e+00 -1.7138259844651729e+00 + 1.4062669877628227e+00 2.2552338234450171e+00 -1.9989394796334103e+00 + 1.3792415781707632e+00 2.3039570815692345e+00 -2.3037298125250283e+00 + 1.3078112855031883e+00 2.2605290095274322e+00 -2.5940638622510015e+00 + 1.2008413361308596e+00 2.1434970741930393e+00 -2.8570439133503802e+00 + 1.0565453654359165e+00 1.9698801334700371e+00 -3.1003956095523133e+00 + 8.3877524352671018e-01 1.7475367076314687e+00 -3.3538543417958397e+00 + 5.1238015971014905e-01 1.4436211154506304e+00 -3.6804674800060928e+00 + 2.6788714356731835e-01 1.0557051623855400e+00 -4.0932442380024767e+00 + 5.4770803121219647e-01 1.0094622321835289e+00 -4.1953071982941017e+00 + id 14582 + loc 6.9417512416839600e-01 5.2221381664276123e-01 393 + blend 0.0000000000000000e+00 + interp 4.7685782085335865e-01:4.1032556132088027e-01:9.7915538527364565e-02:2.9072157533991538e-01:9.7753579245865985e-01:2.8037401156931485e-01:1.9986638906397254e+00:4.7685305227515012e-01:2.7309773722483794e+00:2.7780163564162758e-01:3.1966319803867256e+00 + CVs 20 + -1.5062205686074137e-01 3.6152734568718714e-01 -2.8531961504092718e-01 + -3.1146887288102038e-01 7.5256545354683790e-01 -5.3894431889035543e-01 + -4.4499006869830704e-01 1.1554279380301646e+00 -7.7404686516075949e-01 + -5.4955238312621313e-01 1.5413291419397144e+00 -1.0137748665228110e+00 + -6.3062136062933805e-01 1.8776875755337361e+00 -1.2746660644739904e+00 + -6.8700161562431339e-01 2.1482170319640552e+00 -1.5594128874493491e+00 + -7.1961805549364521e-01 2.3578123510266416e+00 -1.8694384351892248e+00 + -7.3364343973695545e-01 2.5154738460862363e+00 -2.2144542078386720e+00 + -7.3543697552264375e-01 2.6184801378969831e+00 -2.6014302001407197e+00 + -7.3099513284011253e-01 2.6546532893371593e+00 -3.0268196853111524e+00 + -7.2385535410723523e-01 2.6112764692055142e+00 -3.4768678584818966e+00 + -7.1382629650790552e-01 2.4846263658223497e+00 -3.9254043147416322e+00 + -7.0323135123042813e-01 2.2722005524819089e+00 -4.3626252011754421e+00 + -7.0002230840453616e-01 1.9530744608619695e+00 -4.7859515049282875e+00 + -7.2707421397373939e-01 1.4799911086432185e+00 -5.1692505510729152e+00 + -8.4361408285386152e-01 7.8378474446784385e-01 -5.4287613034168229e+00 + -1.1469166113187945e+00 -1.2379372993091353e-01 -5.4146473327529305e+00 + -1.6514697434360803e+00 -1.0193555322414183e+00 -5.0604056789909677e+00 + -2.0033243015858542e+00 -1.6582748984953732e+00 -4.7839638025338864e+00 + id 14583 + loc 5.4773841053247452e-02 3.4223383665084839e-01 401 + blend 0.0000000000000000e+00 + interp 5.4497927347513808e-01:3.2048186074986534e-01:7.3767028886559771e-01:5.4497382368240332e-01:1.4989279128593356e+00:3.8723145729261993e-01:1.9578005694957636e+00:2.9572505366544322e-01:2.6549341665683768e+00:3.3030448056451106e-01:3.0879996300453998e+00:3.1470231203495902e-01:3.9523248016498069e+00 + CVs 20 + -2.5655359064362121e-01 2.2686859954488658e-01 1.6305532470873560e-01 + -4.9893416909160343e-01 4.5555915935146513e-01 3.0324723100745948e-01 + -7.3497543948897315e-01 6.7410271677060363e-01 4.3905633508219377e-01 + -9.6828589394755860e-01 8.7667446823903161e-01 5.7794316229833520e-01 + -1.1990908466620771e+00 1.0618218423172863e+00 7.1790377364048152e-01 + -1.4285963878531303e+00 1.2308195937504169e+00 8.5965274938743397e-01 + -1.6597103931391530e+00 1.3867395015369375e+00 1.0108718009254274e+00 + -1.8951762850077183e+00 1.5304410586245913e+00 1.1847239578934774e+00 + -2.1332895457063645e+00 1.6593291846598615e+00 1.3938447379743883e+00 + -2.3668083069935943e+00 1.7694908293081921e+00 1.6466175054011503e+00 + -2.5899672064176920e+00 1.8597551398257832e+00 1.9447368751317406e+00 + -2.8067297144379206e+00 1.9293426653021095e+00 2.2872278674892463e+00 + -3.0291714076853542e+00 1.9671223734321996e+00 2.6713427844557169e+00 + -3.2723686865637518e+00 1.9466924759208082e+00 3.0790501428114387e+00 + -3.5437664347484352e+00 1.8462823603635936e+00 3.4854773419520595e+00 + -3.8194403896297935e+00 1.6604135388373162e+00 3.8925095001555619e+00 + -4.0425350690510253e+00 1.3992602978028086e+00 4.3281148780733174e+00 + -4.1055361424002887e+00 1.1393829032520919e+00 4.7902463363856356e+00 + -3.8566065763793556e+00 1.1714113334806640e+00 5.0812010312268718e+00 + id 14584 + loc 6.8339532613754272e-01 4.4721183180809021e-01 404 + blend 0.0000000000000000e+00 + interp 4.5161939810630475e-01:4.4731533833207415e-01:2.1314998643572269e-01:2.6347902874016338e-01:1.0383761209169258e+00:3.7991699397506645e-01:1.9279025737923390e+00:4.5161488191232368e-01:2.5275719298976886e+00:3.8275476666457586e-01:3.0493080230218599e+00:2.9275774851229630e-01:3.9054677320053401e+00 + CVs 20 + -9.9357617177815119e-02 2.8419484258529276e-01 1.4901675744007647e-01 + -1.8413517684561001e-01 5.4822928567515250e-01 2.8932519409549717e-01 + -2.9644542712648358e-01 8.1370218743700584e-01 4.4321048902597932e-01 + -4.4849072136176221e-01 1.0887344152958809e+00 6.2075718240429356e-01 + -6.3505715983612521e-01 1.3679319596357151e+00 8.2366902697953526e-01 + -8.4339147692062011e-01 1.6446518203537701e+00 1.0577620889036066e+00 + -1.0520786410343173e+00 1.9117280225237163e+00 1.3311177914015808e+00 + -1.2361956310972892e+00 2.1608437663274125e+00 1.6487044572685303e+00 + -1.3682842527976278e+00 2.3828817612908413e+00 2.0102068100886026e+00 + -1.4240255130240134e+00 2.5674944841853442e+00 2.4119287871764721e+00 + -1.3818644127724438e+00 2.7036710284970780e+00 2.8418671152964121e+00 + -1.2325341391919697e+00 2.7907902248023504e+00 3.2663860237885900e+00 + -1.0006877997238042e+00 2.8397192685144810e+00 3.6510723954440802e+00 + -7.1900393784688132e-01 2.8779849236319590e+00 3.9648803003153206e+00 + -4.0516965740811450e-01 2.9316143157198935e+00 4.1848243393076272e+00 + -5.6178773779065772e-02 2.9842052920362616e+00 4.3161677155838039e+00 + 3.4909178778059480e-01 2.9750796268732471e+00 4.3928422279285098e+00 + 7.8771902406744365e-01 2.8846234285608414e+00 4.4223699544018942e+00 + 9.5437992380991621e-01 2.8750339539026459e+00 4.5797182489296731e+00 + id 14585 + loc 3.7385575473308563e-02 7.0911478996276855e-01 399 + blend 0.0000000000000000e+00 + interp 3.3715862481927689e-01:2.6702564311514987e-01:1.7630869147434636e-01:1.5017615668210843e-01:9.8388329993979229e-01:3.3346558674364535e-01:1.4820669868369023e+00:3.3715525323302870e-01:2.2641777242509535e+00:2.8878471927974975e-01:2.9962402822897420e+00:2.7000116606918628e-01:3.6689407138412382e+00 + CVs 20 + -2.3837179586223972e-01 3.3646570272531962e-01 -2.2326575264645671e-01 + -4.9719405294304619e-01 6.6627423596905122e-01 -4.3900097280297840e-01 + -7.7191899967093180e-01 9.8517331319258483e-01 -6.6403962505546599e-01 + -1.0573926562639684e+00 1.2875415807799184e+00 -9.0225204832132677e-01 + -1.3456783253121201e+00 1.5628880734919817e+00 -1.1413949585873318e+00 + -1.6282461917944453e+00 1.7953294341241191e+00 -1.3545860806856098e+00 + -1.8939150359325847e+00 1.9759918310514775e+00 -1.5127449722487238e+00 + -2.1167789850643186e+00 2.1091529541461314e+00 -1.6005684595366776e+00 + -2.3120427725170276e+00 2.1995471365508794e+00 -1.6326575286196465e+00 + -2.5383767112726368e+00 2.2041223600442619e+00 -1.6139917045837839e+00 + -2.8007216932234411e+00 2.0648798760629932e+00 -1.5216809676165644e+00 + -3.0752280824476319e+00 1.7277198303977537e+00 -1.3500056645631680e+00 + -3.3463275596855202e+00 1.1746832756441086e+00 -1.1636788390512816e+00 + -3.6444680551996775e+00 4.5871683185626144e-01 -1.0692528121974487e+00 + -4.0721184552407568e+00 -3.0840119687776435e-01 -1.1365010432538685e+00 + -4.7695699390373036e+00 -9.6617510904030035e-01 -1.3919779375019172e+00 + -5.7482471943472131e+00 -1.2157396674675671e+00 -1.7944008485616150e+00 + -6.4994613674155204e+00 -9.4741226905414677e-01 -2.0882041592763807e+00 + -6.7000299949672151e+00 -5.8211146900368582e-01 -2.1537426172578416e+00 + id 14586 + loc 7.6141762733459473e-01 5.6596535444259644e-01 1069 + blend 0.0000000000000000e+00 + interp 3.7379638183927300e-01:2.7607804452650303e-01:4.4020360387599933e-01:3.7379264387545463e-01:1.0233772111672013e+00:2.5467113517500428e-01:1.9888748464256800e+00:2.6735671187347637e-01:2.8641342590318288e+00:3.2075283003695704e-01:3.7070185468304260e+00 + CVs 20 + 3.1311385772221173e-02 2.9295272989795429e-01 -1.3889974047912060e-01 + 5.1114643415134275e-02 5.9099608572890205e-01 -2.7678791328838109e-01 + 8.7213229931228098e-02 9.0782229814940074e-01 -4.2624896611390450e-01 + 1.7723179161100572e-01 1.2372123436004034e+00 -5.8394924880400778e-01 + 3.2451839429403484e-01 1.5281518244361203e+00 -7.1399226002382721e-01 + 4.7179281580840726e-01 1.7332518020799761e+00 -7.8777785137651379e-01 + 5.8113085544811771e-01 1.8582955012749101e+00 -8.0983376647865757e-01 + 6.6104848202557942e-01 1.9402082262739859e+00 -7.9998305168220762e-01 + 7.2530658606723730e-01 1.9929602563979361e+00 -7.6642650961763970e-01 + 7.6530852031620611e-01 2.1282354381421080e+00 -7.1663769766060248e-01 + 7.2057838790702700e-01 2.4178959947416261e+00 -7.1758042905157304e-01 + 5.6456839207636000e-01 2.6708705687646566e+00 -8.5431190843466287e-01 + 3.0778413355027767e-01 2.7364913086193816e+00 -1.1114942032677120e+00 + -2.0213048998915184e-02 2.5626292144264253e+00 -1.4567618668193361e+00 + -3.2456012996974137e-01 2.1623236211230061e+00 -1.8360857091382075e+00 + -5.1361978176781786e-01 1.5972261957410523e+00 -2.1756722227396654e+00 + -5.4051900460238378e-01 9.4477691912036965e-01 -2.3712454647539642e+00 + -4.3947987843263375e-01 3.2400669565328677e-01 -2.3736474417476261e+00 + -3.6986505969197414e-01 -1.7355398318282056e-01 -2.3823429095466597e+00 + id 14587 + loc 4.2530158162117004e-01 1.3094577193260193e-01 393 + blend 0.0000000000000000e+00 + interp 3.7509682416422152e-01:2.6343813897932200e-01:2.4637421126924419e-01:3.7509307319597990e-01:9.9984078702298018e-01:3.1496149852877808e-01:1.5070684941594883e+00:2.5938190176474996e-01:2.0325788370271565e+00:2.6048327127837351e-01:3.0202063524910701e+00:3.0440604251219600e-01:3.8165414344547366e+00 + CVs 20 + -9.5660615418475550e-02 3.8042423202458897e-01 3.9471149789391669e-01 + -1.9303378676359761e-01 7.7576512444234780e-01 7.2069407154206355e-01 + -2.9330149235317915e-01 1.1932571366295777e+00 9.7970096900375814e-01 + -4.1818179019895418e-01 1.6244405368731845e+00 1.1847351624787368e+00 + -6.0251303497081765e-01 2.0444354963134170e+00 1.3509761546057923e+00 + -8.6187747978989926e-01 2.4311532444956336e+00 1.4844970086008553e+00 + -1.1951609145515047e+00 2.7861257526829246e+00 1.5832086789182713e+00 + -1.6077818187959301e+00 3.1203007756105108e+00 1.6501413236217770e+00 + -2.1120247019610017e+00 3.4314854694555361e+00 1.7061548711465733e+00 + -2.7180173602116193e+00 3.6988362199606879e+00 1.7885221448749433e+00 + -3.4194673039212224e+00 3.8814003797121686e+00 1.9395460312003587e+00 + -4.1860011453652071e+00 3.9249332513578388e+00 2.1883553829820386e+00 + -4.9763739600939720e+00 3.7675819654537230e+00 2.5430439132214366e+00 + -5.7214778335780991e+00 3.3429741232645629e+00 3.0041478593719324e+00 + -6.2766409839221184e+00 2.6431094737820073e+00 3.5509997374856392e+00 + -6.4991296543662145e+00 1.8127475166691389e+00 4.1219311428426559e+00 + -6.3908967999962654e+00 1.0599417126852773e+00 4.6599021601775377e+00 + -6.0649176941053424e+00 5.2470150298069473e-01 5.1129598319609162e+00 + -5.6586972160143461e+00 2.4831464302221562e-01 5.4023021569581751e+00 + id 14588 + loc 7.3515820503234863e-01 9.6409440040588379e-02 1079 + blend 0.0000000000000000e+00 + interp 4.1179041075180939e-01:4.1178629284770191e-01:1.9831877481632443e-01:3.7461466865549697e-01:7.7708168209186768e-01:2.6201414536549555e-01:1.0808364644984643e+00:3.7524156824380311e-01:2.0840496231683456e+00:3.7182019152812346e-01:2.6841409240859240e+00:3.4727044897151615e-01:3.0195697764809912e+00:2.2935844955196050e-01:3.8553983178258280e+00 + CVs 20 + -1.1636909283707669e-02 3.6621299308614075e-01 -5.4890271679180619e-02 + -3.7419647758089869e-02 6.8291150861616257e-01 -5.3866520564397891e-02 + -6.9249394182072710e-02 9.7328498064485658e-01 -2.8647597921073575e-02 + -1.0131545532371067e-01 1.2386304528371554e+00 1.4120452633961666e-03 + -1.3293017960465847e-01 1.4749751645328704e+00 3.5938414050365741e-02 + -1.6229255582919644e-01 1.6859158806636736e+00 7.3148148629604726e-02 + -1.9278813508105386e-01 1.8830446331482120e+00 1.1918685875023538e-01 + -2.3771937358395767e-01 2.0731957572874196e+00 1.9041847349701913e-01 + -3.1458588946049948e-01 2.2463186584537942e+00 2.9797319466298300e-01 + -4.3463814871425377e-01 2.3813783003308258e+00 4.3460908970462520e-01 + -5.9463824776522389e-01 2.4667876542588494e+00 5.8335175588759480e-01 + -7.8471788753806437e-01 2.5071954060447927e+00 7.3453052059295032e-01 + -1.0021237421298417e+00 2.5099722584179505e+00 8.8463141576992088e-01 + -1.2557545246961985e+00 2.4729895767799901e+00 1.0299290047817000e+00 + -1.5618341196524126e+00 2.3782696571526949e+00 1.1715982695479172e+00 + -1.8896692206264287e+00 2.1826326745085134e+00 1.3013700004784354e+00 + -2.1542365630867546e+00 1.8590932884073659e+00 1.3694766397107154e+00 + -2.2831298231012891e+00 1.4314499461964432e+00 1.3605891224325846e+00 + -2.0963122983160956e+00 1.4364564859582134e+00 1.4610436153609483e+00 + id 14589 + loc 1.9633467495441437e-01 3.3365455269813538e-01 405 + blend 0.0000000000000000e+00 + interp 4.4176607129353163e-01:4.4176165363281872e-01:5.8029824477551784e-02:4.1349816996988220e-01:8.8018897789536255e-01:2.7151729554514453e-01:1.3222799508891776e+00:3.8067422390757411e-01:2.0146683736882722e+00:2.9333300001154300e-01:2.6593454422621852e+00:4.1494680341949119e-01:3.0108966644892878e+00:2.7739668871126699e-01:3.7828057475555861e+00 + CVs 20 + -8.7664643946604920e-02 3.5002677085457110e-02 5.5552287379646584e-02 + -2.1697110105990580e-01 2.6196146401389751e-02 9.5219667738528274e-02 + -3.6980434675605611e-01 5.4025018763832811e-02 1.9868998265642338e-01 + -5.2158304781556142e-01 1.0869599827467943e-01 3.1523261833706262e-01 + -6.6399007181792402e-01 1.8868791312711747e-01 4.5036929954606741e-01 + -7.8720721600341903e-01 2.8834020416488015e-01 6.1122321129693447e-01 + -8.8203068604852519e-01 3.9775685630797786e-01 8.0117285924739012e-01 + -9.4114043099829503e-01 5.0714399480548100e-01 1.0200274132219758e+00 + -9.5894237507668578e-01 6.0923426834264294e-01 1.2639923957056745e+00 + -9.3138403205353859e-01 6.9912065255854139e-01 1.5253673354740531e+00 + -8.5581522906621077e-01 7.7591345533509037e-01 1.7936297581094958e+00 + -7.3254202329933826e-01 8.4480128042332436e-01 2.0537985287314804e+00 + -5.6278978910904220e-01 9.1015457958921142e-01 2.2928535461251234e+00 + -3.4365684052514223e-01 9.5533600254742523e-01 2.5107319679672164e+00 + -6.9869278671539498e-02 9.4261040783989858e-01 2.7161039164939806e+00 + 2.6341996037811949e-01 8.5410938602850406e-01 2.9086774288904436e+00 + 6.5823492159748165e-01 7.2380007970699856e-01 3.0704749218580312e+00 + 1.1031403670634887e+00 6.0485674102564513e-01 3.1777254111155107e+00 + 1.3805363481534612e+00 6.6115670433127272e-01 3.0989989920725280e+00 + id 14590 + loc 6.3431507349014282e-01 6.1259800195693970e-01 401 + blend 0.0000000000000000e+00 + interp 3.8743202403705979e-01:2.7824519432207617e-01:8.2154663972322517e-05:3.4011300285415763e-01:9.5336840931868794e-01:2.7856384291537795e-01:1.6572267955947693e+00:2.8711341551265412e-01:2.6164257476136386e+00:3.8742814971681944e-01:3.1655082166627571e+00 + CVs 20 + -1.6999359598840164e-01 3.1354117148645239e-01 -2.1879932916026956e-01 + -3.2005827743899395e-01 6.4805260057539316e-01 -4.4527392886184430e-01 + -4.6108456313310098e-01 9.9025872105367940e-01 -6.9889824504411191e-01 + -5.9417345682943390e-01 1.3205715377288891e+00 -9.9653364221933982e-01 + -7.1621691437833501e-01 1.6125601134478484e+00 -1.3419470065928958e+00 + -8.3986878913308871e-01 1.8501981706314385e+00 -1.7211036586957786e+00 + -9.9343690122601036e-01 2.0331804934530529e+00 -2.1168400891682344e+00 + -1.2039707095992613e+00 2.1622180103058319e+00 -2.5122364024454260e+00 + -1.4865404841010363e+00 2.2316580013909775e+00 -2.8863900824968649e+00 + -1.8415842566893934e+00 2.2361238843348890e+00 -3.2171403397725062e+00 + -2.2573712222325186e+00 2.1759465272038172e+00 -3.4867452766140792e+00 + -2.7179687236529215e+00 2.0528172458891154e+00 -3.6874471688025987e+00 + -3.2023971444407251e+00 1.8679901110075159e+00 -3.8209547201363527e+00 + -3.6806246824166484e+00 1.6341145130738863e+00 -3.8858733652192603e+00 + -4.1386248256496332e+00 1.3708687872250367e+00 -3.8804443726262283e+00 + -4.6034548092362080e+00 1.0738944549817304e+00 -3.8316082685668440e+00 + -5.1101000515100177e+00 7.3112304231352443e-01 -3.8251177350984764e+00 + -5.6155432652763499e+00 4.0362283567625479e-01 -3.9396998244290842e+00 + -5.9829704767706149e+00 2.2460805677361917e-01 -4.0844845625350699e+00 + id 14591 + loc 3.1598642468452454e-01 4.2759516835212708e-01 399 + blend 0.0000000000000000e+00 + interp 4.5566946139786735e-01:2.7418873375801395e-01:5.4498743024937535e-01:4.5566490470325338e-01:1.0003513397257178e+00:2.7491792953929262e-01:1.8769846474865755e+00:2.7766286217287678e-01:2.9287507794770620e+00:2.8495505056247999e-01:3.8580214138748525e+00 + CVs 20 + -1.8965746943202566e-01 2.2881917569122712e-01 1.2782569909905381e-01 + -3.7290575010695576e-01 4.5176814398129805e-01 2.5309392766575645e-01 + -5.5250239259968204e-01 6.6719153821175414e-01 3.6114359937572499e-01 + -7.3058262618982150e-01 8.7763890540790979e-01 4.4591587454350695e-01 + -9.0422558720914015e-01 1.0896422567578563e+00 5.1196331473366119e-01 + -1.0686031792036290e+00 1.3113967380707918e+00 5.6659061642360065e-01 + -1.2242658207892150e+00 1.5520935248366803e+00 6.1806830539139457e-01 + -1.3810008381974475e+00 1.8218855399657705e+00 6.7643024698536935e-01 + -1.5618632287886636e+00 2.1264539870927330e+00 7.6145373813888972e-01 + -1.8021579846126019e+00 2.4510197427561335e+00 9.0896032900263579e-01 + -2.1269049742126223e+00 2.7321306465201598e+00 1.1513668551133189e+00 + -2.4957376051307540e+00 2.8732189911610773e+00 1.4655879371327967e+00 + -2.8257716636706833e+00 2.8552626472996523e+00 1.7818955437679100e+00 + -3.0660368504651667e+00 2.7379632127996718e+00 2.0525945180294585e+00 + -3.1904516273008547e+00 2.5844677164083034e+00 2.2602825888960720e+00 + -3.2112436828653337e+00 2.4158610844136552e+00 2.4464218029926097e+00 + -3.1952207625825602e+00 2.2106421149335578e+00 2.7015808379414530e+00 + -3.3034272523212720e+00 1.9958747050410697e+00 3.0072433653078567e+00 + -3.6650700986035072e+00 1.9937501522181833e+00 3.0530623633273093e+00 + id 14592 + loc 2.9321333765983582e-01 2.8203085064888000e-01 404 + blend 0.0000000000000000e+00 + interp 4.3889779439882931e-01:2.6370798697448894e-01:2.2203168189632860e-02:2.7306602753884834e-01:9.3441595765270669e-01:2.9849918826402100e-01:1.9526469405016851e+00:3.9294821131880658e-01:2.3538071306635748e+00:3.9990169279772270e-01:3.0039154466764066e+00:4.3889340542088534e-01:3.6919560623537619e+00 + CVs 20 + -8.7090235833667595e-02 1.3415344452397210e-01 -1.1680729631792278e-01 + -1.8490275064735243e-01 2.7922609315711072e-01 -2.2251610661921567e-01 + -2.8713052153732543e-01 4.4000839250443075e-01 -3.2635335238921936e-01 + -3.9239712769644397e-01 6.2070798174303343e-01 -4.2950742638607053e-01 + -5.0211518322071980e-01 8.2204103260083350e-01 -5.2603977866618479e-01 + -6.2065332064938539e-01 1.0417261432027547e+00 -6.0638237792388083e-01 + -7.5225319405040658e-01 1.2732078710879979e+00 -6.5790276326642383e-01 + -8.9601516833620487e-01 1.5059435243019330e+00 -6.6944849337164947e-01 + -1.0464283577916498e+00 1.7277558566028353e+00 -6.3421679922551044e-01 + -1.1977329536271526e+00 1.9279387959132099e+00 -5.5122187362649966e-01 + -1.3449628253264310e+00 2.0974448169038431e+00 -4.2355374324357009e-01 + -1.4799541614351996e+00 2.2284806438354474e+00 -2.5854238935155049e-01 + -1.5909310910094026e+00 2.3190069435379392e+00 -6.9085443152546722e-02 + -1.6518719805506534e+00 2.3751736948707767e+00 1.2183826164233991e-01 + -1.6393375502392935e+00 2.4090116657607168e+00 2.8099047046388259e-01 + -1.5712525615401620e+00 2.4243037361280835e+00 3.8925238748734103e-01 + -1.4936976193133678e+00 2.4198748576531006e+00 4.6607328079190902e-01 + -1.4275070341009886e+00 2.4013891408400276e+00 5.2851184962073905e-01 + -1.3763426521628486e+00 2.3612894981041985e+00 6.2387543764794984e-01 + id 14593 + loc 3.2775756716728210e-01 2.1144084632396698e-01 393 + blend 0.0000000000000000e+00 + interp 3.9398786119710816e-01:3.1703750769922784e-01:3.9604550418081752e-02:2.6873995249760851e-01:9.9710178663425841e-01:2.7154153862588792e-01:2.0041337965117365e+00:3.9398392131849619e-01:2.7369944596293312e+00:2.5977612030311398e-01:3.1827415904878400e+00 + CVs 20 + -4.6818661927160013e-02 3.8134027361026013e-01 3.4605723335894456e-01 + -1.0015246399491300e-01 7.6268236117996657e-01 6.4373590485957977e-01 + -1.5562274749305655e-01 1.1492830047805409e+00 8.9226313616338238e-01 + -2.2729445105912111e-01 1.5403808241352996e+00 1.1037107148526424e+00 + -3.4437866880518808e-01 1.9224511145704741e+00 1.2936202474429399e+00 + -5.2753329216213674e-01 2.2789350122823251e+00 1.4711723982154590e+00 + -7.8263555782610050e-01 2.6071067385540680e+00 1.6334388958130872e+00 + -1.1130229881560771e+00 2.9108900522684840e+00 1.7774296382724919e+00 + -1.5219142871078304e+00 3.1821523243141265e+00 1.9162459812418033e+00 + -2.0053071270779190e+00 3.3989595034662674e+00 2.0769858596245676e+00 + -2.5446731824961497e+00 3.5287292593137325e+00 2.2891493828234091e+00 + -3.1054552828725281e+00 3.5339967643095922e+00 2.5695693104940251e+00 + -3.6433409482726402e+00 3.3831047921471722e+00 2.9074437253609813e+00 + -4.1009047028795056e+00 3.0636165252813488e+00 3.2727296150806993e+00 + -4.4024826317342294e+00 2.6023664317700144e+00 3.6352655756554180e+00 + -4.4951564808999134e+00 2.0816949086943941e+00 3.9770104631264607e+00 + -4.4018807486988774e+00 1.6020456838350405e+00 4.3047901004751949e+00 + -4.1934622645373203e+00 1.2126437095124070e+00 4.6351706451660570e+00 + -3.9467872709358711e+00 8.7545205807472892e-01 4.9720163848098817e+00 + id 14594 + loc 9.3470746278762817e-01 4.1146677732467651e-01 1069 + blend 0.0000000000000000e+00 + interp 3.2317361110382764e-01:2.3184809902621792e-01:8.8338819542283065e-01:2.9866575821972091e-01:1.6233570258568706e+00:3.2317037936771664e-01:2.0533402368243943e+00:2.4054002642162772e-01:2.8669250531132642e+00:2.3152091572604372e-01:3.9153917888117249e+00 + CVs 20 + -9.6528213143876468e-02 3.4422481444735664e-01 2.7467264945398895e-01 + -2.2015638906110835e-01 6.8089133952003567e-01 5.2385406649471644e-01 + -3.8665165014720321e-01 1.0076591054564576e+00 7.6001900642648335e-01 + -6.0118929994723802e-01 1.3184578040135038e+00 9.7380175829181348e-01 + -8.3356082435982348e-01 1.6079337209474416e+00 1.1444579850073864e+00 + -1.0141046982662785e+00 1.8812278982379023e+00 1.2655296495375885e+00 + -1.0903515234229619e+00 2.1360716978018246e+00 1.3469890487767964e+00 + -1.0745138723459655e+00 2.3666393244898805e+00 1.4117606279077721e+00 + -9.9706452238830479e-01 2.5795256187078657e+00 1.4928678754340279e+00 + -8.5971394475685092e-01 2.7600269257429124e+00 1.6204568046262329e+00 + -6.6101299781798573e-01 2.8524418559004929e+00 1.7908470906592120e+00 + -4.3356371342211086e-01 2.8297786322262350e+00 1.9514135671496595e+00 + -2.0174870461088701e-01 2.7197841879027269e+00 2.0799241301498914e+00 + 3.4164112267429658e-02 2.5292836296680949e+00 2.1858682006606198e+00 + 2.6593211154121743e-01 2.2538673189462441e+00 2.2673354163957815e+00 + 4.7020476655789556e-01 1.9166313703350348e+00 2.3086782811199713e+00 + 6.2886426547620933e-01 1.5839725272423399e+00 2.2949380617730988e+00 + 7.4987383423911502e-01 1.3168412315764768e+00 2.2313502722726439e+00 + 7.7963688052573721e-01 1.0847307185198467e+00 2.0468532588613404e+00 + id 14595 + loc 2.5426152348518372e-01 8.6300009489059448e-01 401 + blend 0.0000000000000000e+00 + interp 4.6203114670759682e-01:2.9331389838213551e-01:2.9700151755628457e-02:2.9313534029501498e-01:9.9842355716140774e-01:3.0264428112444203e-01:1.7942798484620988e+00:2.9111822396644216e-01:2.4195820507400936e+00:4.6202652639612979e-01:2.9790273632482331e+00:4.2807341630398438e-01:3.3889300946604868e+00 + CVs 20 + -8.6916177497909003e-02 2.8928467173889733e-01 -1.2823339764444031e-01 + -1.7406773900778261e-01 5.8896341192902124e-01 -2.6889049568116541e-01 + -2.5764712759071468e-01 9.0367012837217264e-01 -4.0780332534125557e-01 + -3.3232464096970837e-01 1.2364667834960448e+00 -5.5030544561576611e-01 + -3.8785082059693937e-01 1.5715676382170012e+00 -7.1198405706788248e-01 + -4.2264442010586811e-01 1.8889857462573132e+00 -9.0013930416943366e-01 + -4.6089383122086169e-01 2.1875634363819048e+00 -1.1214077739605433e+00 + -5.4391946144740677e-01 2.4692982089371318e+00 -1.3830379528875203e+00 + -7.1259539956236817e-01 2.7145683999150716e+00 -1.6791856477078866e+00 + -9.8966237900197807e-01 2.8883544530933865e+00 -1.9863272657903035e+00 + -1.3707665543368921e+00 2.9623359433073997e+00 -2.2777388344054308e+00 + -1.8281673089583776e+00 2.9157336694496099e+00 -2.5377431583936128e+00 + -2.3124619863161913e+00 2.7325196239618137e+00 -2.7635152630235833e+00 + -2.7322063821799047e+00 2.4160999063465689e+00 -2.9539981636482655e+00 + -3.0337373639293226e+00 2.0065542203448032e+00 -3.1384115755270039e+00 + -3.2651388718447349e+00 1.5359524124679784e+00 -3.3344490362404309e+00 + -3.4435702070299463e+00 1.0575268254475896e+00 -3.5795532872578826e+00 + -3.5727746691680777e+00 5.9987024348937867e-01 -3.9257988866644000e+00 + -3.7139418879382822e+00 9.4067755762530902e-02 -4.3449503619969168e+00 + id 14596 + loc 1.3086062669754028e-01 7.1331077814102173e-01 399 + blend 0.0000000000000000e+00 + interp 4.3025869264663830e-01:2.7304253669971817e-01:2.3833449783910421e-01:2.8878471927974975e-01:9.9646030599098279e-01:2.9481773031821201e-01:1.8493936660023964e+00:2.7799997296906404e-01:2.7837873880412953e+00:4.0603408247948758e-01:3.4642625109288909e+00:4.3025439005971183e-01:3.9726075520871102e+00 + CVs 20 + -1.9673134999312122e-01 3.3570279888377347e-01 -2.6917524622459799e-01 + -3.8092592498473582e-01 6.5985760693611362e-01 -5.3648011859326428e-01 + -5.4321795200772294e-01 9.6591860361835158e-01 -8.2223748643223493e-01 + -6.7999142292819115e-01 1.2531607315476667e+00 -1.1334636496193320e+00 + -7.9599117092017035e-01 1.5277691296572014e+00 -1.4755540395904005e+00 + -9.1242382388653187e-01 1.8008984159495987e+00 -1.8573423336604993e+00 + -1.0743561775005974e+00 2.0818698102179383e+00 -2.2806790614181174e+00 + -1.3449779127675323e+00 2.3518074592948528e+00 -2.7350402906992697e+00 + -1.7702837104311002e+00 2.5144161869071424e+00 -3.1763330294075951e+00 + -2.2887313519983752e+00 2.4602483614419972e+00 -3.5253807360604057e+00 + -2.7687555217466397e+00 2.1956347199830359e+00 -3.7393542646313978e+00 + -3.1138377480753854e+00 1.8037976571290066e+00 -3.8338594447808956e+00 + -3.3235351624061593e+00 1.3403121795502240e+00 -3.8698616730088036e+00 + -3.4891838552113588e+00 7.9997133840333556e-01 -3.9264666272331761e+00 + -3.7662598544355754e+00 2.1965021615476085e-01 -4.0762219082371622e+00 + -4.2806314716757861e+00 -2.2151984566243521e-01 -4.3521712410945979e+00 + -4.9829980543660088e+00 -2.3777456210558801e-01 -4.7059601981961388e+00 + -5.5954749863828388e+00 1.7960256825502782e-01 -4.9977469448631258e+00 + -6.0983990194529980e+00 4.9502803618229035e-01 -5.2294345333970238e+00 + id 14597 + loc 1.1218722164630890e-01 7.4854761362075806e-01 404 + blend 0.0000000000000000e+00 + interp 5.1828507458741624e-01:5.1827989173667044e-01:4.3039962659203346e-01:5.1621953906186480e-01:9.9995279472917242e-01:3.1443170870619813e-01:1.7674689520699896e+00:4.2459051536142517e-01:2.0613815973567613e+00:3.1129920599618577e-01:2.8039580166949269e+00:2.6960166630789772e-01:3.2187658497814033e+00:4.0541554882120662e-01:3.9166796028476139e+00 + CVs 20 + -5.5321494688971393e-02 -6.5179624620624196e-02 2.2703687274333917e-02 + -1.1440459403323208e-01 -1.1351486593943164e-01 7.9673617405803004e-02 + -1.6162869237615782e-01 -1.6254936704102876e-01 1.2576461943632858e-01 + -2.0423538218582801e-01 -2.1043605016802130e-01 1.7624130379263114e-01 + -2.4379806717146890e-01 -2.5259239544308221e-01 2.3755593565507460e-01 + -2.8126752598120142e-01 -2.8539308572894451e-01 3.1015550958549837e-01 + -3.1818370080395836e-01 -3.0531923757917495e-01 3.9264049704591891e-01 + -3.5576093943893600e-01 -3.0966767845524268e-01 4.8257793564888868e-01 + -3.9469819019614938e-01 -2.9748916110340762e-01 5.7601519210201946e-01 + -4.3540917860609740e-01 -2.6942554494832194e-01 6.6859082167110206e-01 + -4.7815036289703694e-01 -2.2709308915151150e-01 7.5656260119245178e-01 + -5.2273103091237105e-01 -1.7196899937995280e-01 8.3787837209570815e-01 + -5.6972236483650318e-01 -1.0562044693387945e-01 9.1134836658405893e-01 + -6.2243186930697281e-01 -2.8639768549496125e-02 9.7731134581093260e-01 + -6.8379487700074504e-01 6.0921772762420168e-02 1.0382522820514526e+00 + -7.5545496675918233e-01 1.6690264411310807e-01 1.0973494035552518e+00 + -8.3652577150441876e-01 2.9309634749145946e-01 1.1580781612662780e+00 + -9.2407033338339983e-01 4.3664984676505525e-01 1.2233926341067232e+00 + -1.0556138922726694e+00 4.6566064064540080e-01 1.2463932162762186e+00 + id 14598 + loc 4.7118988633155823e-01 6.7692026495933533e-02 1079 + blend 0.0000000000000000e+00 + interp 4.2632616887490382e-01:3.3189167797347402e-01:2.8871348504514349e-01:2.7502631326399479e-01:1.5807499535010856e+00:2.7608953769691591e-01:1.7510064547193385e+00:3.2915652574123194e-01:2.2158846989076006e+00:4.2632190561321509e-01:2.8947833327775601e+00:3.9621708884278545e-01:3.1330017750864867e+00:2.6881364311533701e-01:3.9973747012452101e+00 + CVs 20 + 3.0450072315563137e-01 4.8635787429217503e-01 -6.5204101334042947e-02 + 4.8789350155585293e-01 9.2821266440664263e-01 -1.6573263303860092e-01 + 6.1829217020794369e-01 1.3390563772838511e+00 -2.8384542368670884e-01 + 7.0706561705931503e-01 1.7284792276892271e+00 -4.2309198305009144e-01 + 7.3697535174755591e-01 2.0785539596975524e+00 -5.9585369689577294e-01 + 6.9040472413463250e-01 2.3580129314548253e+00 -8.1411343158903138e-01 + 5.6943270670305268e-01 2.5162635693249538e+00 -1.0749800241584784e+00 + 4.2091027408577675e-01 2.5170471803991288e+00 -1.3430962134099151e+00 + 3.0064223350674568e-01 2.3934528951610607e+00 -1.5748855754551530e+00 + 2.0876473849685429e-01 2.2135811660800497e+00 -1.7642406323599531e+00 + 1.1458739676457802e-01 2.0037070969386357e+00 -1.9254959840880186e+00 + 4.9605477090562122e-03 1.7579400137454471e+00 -2.0564638863371427e+00 + -1.2139836163810297e-01 1.4685847045795715e+00 -2.1396796687556283e+00 + -2.6597474216178540e-01 1.1319489564576013e+00 -2.1475358421017461e+00 + -4.2287873777247131e-01 7.5844797845781597e-01 -2.0373416344589286e+00 + -5.8085407273731648e-01 4.0058883722974070e-01 -1.7811252900656422e+00 + -7.5370045608563718e-01 1.2488526776211772e-01 -1.3910722572003005e+00 + -9.5745787934687709e-01 -6.0643291282658218e-03 -9.1129237478755343e-01 + -1.0399207194134812e+00 -1.2647369399798269e-02 -7.0459677860134196e-01 + id 14599 + loc 7.9656976461410522e-01 1.5297335386276245e-01 393 + blend 0.0000000000000000e+00 + interp 4.4025687275894521e-01:2.9010995619518432e-01:5.5754762575438488e-01:2.9809091978580587e-01:1.3776455520016000e+00:2.7122318182756833e-01:2.2257936819173842e+00:4.4025247019021763e-01:2.9997610821633973e+00:2.8904950480346464e-01:3.7744839892002542e+00 + CVs 20 + 4.5678928465749119e-01 3.8886606594027184e-01 1.3285769059713001e-01 + 8.8630717080957955e-01 7.8397261127853302e-01 2.5417751889385393e-01 + 1.2849585179841152e+00 1.2047561973909373e+00 4.0481345062784307e-01 + 1.6485092898269129e+00 1.6350291384748954e+00 6.2846516588214596e-01 + 1.9643952965832838e+00 2.0368047265354385e+00 9.5575105174834729e-01 + 2.2140763106686245e+00 2.3817770052187131e+00 1.3872984182687293e+00 + 2.3856010121780873e+00 2.6575844923484797e+00 1.8995073171911019e+00 + 2.4875819841011770e+00 2.8608018250332790e+00 2.4646974167045341e+00 + 2.5492011513902044e+00 2.9909453708950653e+00 3.0686448943673392e+00 + 2.6103786436067162e+00 3.0397060664470388e+00 3.7074209900370141e+00 + 2.7134602066821252e+00 2.9861645079779016e+00 4.3709596996600890e+00 + 2.8927775823230983e+00 2.8030346629180141e+00 5.0282220867569674e+00 + 3.1680654559583195e+00 2.4713609647881833e+00 5.6237646345262302e+00 + 3.5540617363306075e+00 1.9828550162996330e+00 6.0922679765966317e+00 + 4.0529879366724035e+00 1.3694452991431723e+00 6.3424548239021767e+00 + 4.6472030836243654e+00 7.5882730271676735e-01 6.3061397339100251e+00 + 5.3052122645588788e+00 3.3161216456607079e-01 6.0222246803242454e+00 + 5.9695354773467777e+00 1.3643112253464285e-01 5.6256496158104961e+00 + 6.6049782923356517e+00 -1.6291986326875296e-01 5.3569451017268124e+00 + id 14600 + loc 3.0991283059120178e-01 5.3692191839218140e-01 401 + blend 0.0000000000000000e+00 + interp 4.0346724912025655e-01:2.9324285080301016e-01:3.3537427719365698e-01:4.0346321444776539e-01:1.0143705863879235e+00:3.8405542715117452e-01:1.6724858324513818e+00:2.8255276717565331e-01:2.1123548322457850e+00:2.9989907604865063e-01:2.9757807189863619e+00:3.1026879634411969e-01:3.5906001841670303e+00 + CVs 20 + -5.4108003476874542e-02 2.6498217742112001e-01 -3.3223884032011008e-01 + -9.7994701906860132e-02 5.4349178854768099e-01 -6.3101418222700123e-01 + -1.4416208142377288e-01 8.2818921969510217e-01 -9.2348049572910162e-01 + -2.0402546087459189e-01 1.1134658763507959e+00 -1.2265595608235906e+00 + -2.9042521978667085e-01 1.3922349315429288e+00 -1.5484275422206801e+00 + -4.2007021284544022e-01 1.6533815797484472e+00 -1.8902104598306577e+00 + -6.0888454561951466e-01 1.8830702025365806e+00 -2.2409357991319303e+00 + -8.6311354322888034e-01 2.0687455611295915e+00 -2.5806986316479468e+00 + -1.1750972408999587e+00 2.2029572694248616e+00 -2.8891809338079293e+00 + -1.5274500585627990e+00 2.2839405387286167e+00 -3.1528520215212104e+00 + -1.9012459757937596e+00 2.3136649696821774e+00 -3.3680525602803919e+00 + -2.2824326800389763e+00 2.2945814477132593e+00 -3.5397152515690160e+00 + -2.6587025776141653e+00 2.2289590552210981e+00 -3.6755277557474630e+00 + -3.0069493471232049e+00 2.1244833486174857e+00 -3.7815289186887164e+00 + -3.2873263744268293e+00 2.0007559712087479e+00 -3.8704364799939310e+00 + -3.4758685416023170e+00 1.8748554485933240e+00 -3.9749350927448948e+00 + -3.5898889770361833e+00 1.7323501294830388e+00 -4.1310746946997368e+00 + -3.6959692123995511e+00 1.5284232806261013e+00 -4.3343063558126245e+00 + -3.8032167731585678e+00 1.4421711752586370e+00 -4.1815671435492563e+00 + id 14601 + loc 2.5184229016304016e-01 5.7488518953323364e-01 399 + blend 0.0000000000000000e+00 + interp 3.3072048739474669e-01:2.7551244392613489e-01:7.2276750339615958e-01:3.1689203131737975e-01:1.1280959476480519e+00:2.6942634978853375e-01:1.9335669798507769e+00:2.8714272540671443e-01:2.9896033883144919e+00:3.3071718018987273e-01:3.8818143369351157e+00 + CVs 20 + -2.2491326928181116e-01 3.2334440757000371e-01 -2.8246240925395871e-01 + -4.3339605252224983e-01 6.4122451835708860e-01 -5.3443972349858726e-01 + -6.3829419557752287e-01 9.5485264564658379e-01 -7.9119957061565316e-01 + -8.4815041325794049e-01 1.2635102492347410e+00 -1.0678889265564706e+00 + -1.0693960867150958e+00 1.5651943374061683e+00 -1.3665493953436221e+00 + -1.3124748284714600e+00 1.8534026271003412e+00 -1.6840950635160410e+00 + -1.5971187477785167e+00 2.1179793355318028e+00 -2.0123441263395443e+00 + -1.9453344558441210e+00 2.3305253023454431e+00 -2.3379162983143642e+00 + -2.3665712007621291e+00 2.4241687097057021e+00 -2.6324648405398108e+00 + -2.8248144779238844e+00 2.3364729342913995e+00 -2.8565818664085452e+00 + -3.2474279658446195e+00 2.0702460378118115e+00 -2.9936352418048253e+00 + -3.5751067192248107e+00 1.6737957382781279e+00 -3.0630053488255915e+00 + -3.7919132864809248e+00 1.2020002068406572e+00 -3.1149637943162349e+00 + -3.9262293196978586e+00 6.8442337195661584e-01 -3.2024972804361882e+00 + -4.0473962769876453e+00 1.1840411422640440e-01 -3.3673226396214608e+00 + -4.2734488426281336e+00 -4.9483626510484757e-01 -3.6424746922382880e+00 + -4.7585317992679776e+00 -1.0577872339073364e+00 -4.0632192065796007e+00 + -5.3653136294855717e+00 -1.2805270664100101e+00 -4.5504041333372394e+00 + -5.5515985974318660e+00 -1.2146446889181717e+00 -4.8675271965152556e+00 + id 14602 + loc 5.6918901205062866e-01 3.5904985666275024e-01 404 + blend 0.0000000000000000e+00 + interp 4.7338277846868876e-01:4.5161488191232368e-01:5.3633126928570451e-01:4.3350103853644062e-01:1.0188147486172601e+00:2.5132980533418431e-01:1.4562692959358421e+00:4.0104978921465806e-01:1.9957806503065576e+00:4.2095657306980744e-01:2.4135867964018809e+00:4.2951437758534561e-01:2.9786718324819867e+00:4.7337804464090411e-01:3.3596227915127641e+00:3.9788414651161691e-01:3.9889520031742984e+00 + CVs 20 + -8.1540321861090698e-02 2.4492816967104478e-01 1.5027212676702437e-01 + -1.5438015438697755e-01 4.7401321773277999e-01 3.0484649690932264e-01 + -2.4393240787546241e-01 7.0237874949675838e-01 4.7473118464530151e-01 + -3.5682715576212071e-01 9.3663362784632520e-01 6.6663483975576709e-01 + -4.8690570608977390e-01 1.1736173454539527e+00 8.8120604409885495e-01 + -6.2174711163541307e-01 1.4070060469622963e+00 1.1211564122500357e+00 + -7.4298309022633680e-01 1.6280208833892307e+00 1.3890175836091956e+00 + -8.3134661952867273e-01 1.8272737039485674e+00 1.6829290550911589e+00 + -8.6812082432914606e-01 1.9953817489717240e+00 1.9955946579764059e+00 + -8.3856219570865720e-01 2.1227365776205489e+00 2.3166848040672603e+00 + -7.3628401485432304e-01 2.1986050570131241e+00 2.6340288616918519e+00 + -5.6359356561231344e-01 2.2212127997509952e+00 2.9249543124046413e+00 + -3.4718121144411263e-01 2.2022420269844898e+00 3.1767570335182089e+00 + -1.1128183190023733e-01 2.1679240781664424e+00 3.3821583703234808e+00 + 1.3760806657348290e-01 2.1472600232888714e+00 3.5307155125096155e+00 + 4.0280290745875225e-01 2.1371471084964155e+00 3.6183051658421888e+00 + 6.8690974212125733e-01 2.0897519085656162e+00 3.6607905592354895e+00 + 9.7753342459932990e-01 1.9752337881108564e+00 3.6775262915598939e+00 + 1.1289326152981927e+00 1.9406453584289194e+00 3.8606547472716146e+00 + id 14603 + loc 8.5685014724731445e-02 7.8638538718223572e-02 393 + blend 0.0000000000000000e+00 + interp 2.7160601494940256e-01:2.4875871280361678e-01:3.1142001428818666e-01:2.5291154463143400e-01:1.3559759301220409e+00:2.7160329888925311e-01:2.3292769655169403e+00:2.4994672371300894e-01:3.2388219925076438e+00 + CVs 20 + -6.9055285547556994e-02 4.3837420621165790e-01 2.8736126072274709e-01 + -1.7748826327570530e-01 8.8332593865224307e-01 5.5700339030869139e-01 + -3.3199816820384948e-01 1.3338920889478849e+00 7.8872296073480319e-01 + -5.5415012661558316e-01 1.7818906247266624e+00 9.8261214597230073e-01 + -8.6204010440853696e-01 2.1980236897015453e+00 1.1437353237694308e+00 + -1.2530204616983709e+00 2.5465189817959617e+00 1.2816592004033112e+00 + -1.7041038292484827e+00 2.7985056949541818e+00 1.4087486683743138e+00 + -2.1776517922585019e+00 2.9376091831948297e+00 1.5403979983263723e+00 + -2.6369462768032075e+00 2.9700845581976747e+00 1.6946901977410982e+00 + -3.0548217815898924e+00 2.9219364562235937e+00 1.8883610014388412e+00 + -3.4052214315907174e+00 2.8196061221318178e+00 2.1270070187957417e+00 + -3.6759397671271015e+00 2.6781082873601250e+00 2.3951923704136777e+00 + -3.8848110957391788e+00 2.5016511080689998e+00 2.6766319441477386e+00 + -4.0664231779717088e+00 2.2884871642702409e+00 2.9852017802004527e+00 + -4.2432158660394883e+00 2.0313089053988413e+00 3.3472638935914332e+00 + -4.3969157712411180e+00 1.7214552370379177e+00 3.7456497165387539e+00 + -4.4550013563758348e+00 1.3432594378542519e+00 4.0705466762342279e+00 + -4.3519809488880536e+00 8.9244576272100740e-01 4.1888371979842418e+00 + -4.3877485257719853e+00 3.3908218002566115e-01 4.5074270132897123e+00 + id 14604 + loc 9.1195660829544067e-01 6.7016494274139404e-01 401 + blend 0.0000000000000000e+00 + interp 4.0456126052583702e-01:3.7321777802087719e-01:1.2166490615504455e-01:2.8432918059498685e-01:9.1422971676617670e-01:3.1665840776700976e-01:1.5789244579275881e+00:4.0455721491323177e-01:2.0184115814210211e+00:2.8650997252995414e-01:2.6460300533752772e+00:2.6751315965155636e-01:3.5357714560139812e+00 + CVs 20 + -1.4057077897531034e-01 3.0235497515489768e-01 -2.3844708192538094e-01 + -2.5785686983970657e-01 6.0453614942760170e-01 -4.9078616389195556e-01 + -3.5397860168464890e-01 8.9448386006979241e-01 -7.8550968296926615e-01 + -4.3128538259049198e-01 1.1512726554763173e+00 -1.1307388182103550e+00 + -4.9370027499894498e-01 1.3557806568716368e+00 -1.5187307172555236e+00 + -5.5664905808928511e-01 1.5014271085578836e+00 -1.9368585409817041e+00 + -6.4732785742441179e-01 1.5955785379729326e+00 -2.3679262499628742e+00 + -7.9278966084093450e-01 1.6497231983224510e+00 -2.7903230758446047e+00 + -1.0099431790068498e+00 1.6730562023099129e+00 -3.1809440233549306e+00 + -1.3042449331074901e+00 1.6743349289395295e+00 -3.5213993113003514e+00 + -1.6696974560748070e+00 1.6633286876196069e+00 -3.7994169753268476e+00 + -2.0950133007946308e+00 1.6442509409840893e+00 -4.0125754523616255e+00 + -2.5668237088026329e+00 1.6075093206696507e+00 -4.1688792050205850e+00 + -3.0647986389799899e+00 1.5482767841258356e+00 -4.2768025232470732e+00 + -3.5711815715892410e+00 1.4733716314682490e+00 -4.3379004687328537e+00 + -4.0944921474981237e+00 1.3673729512169395e+00 -4.3471868408238317e+00 + -4.6652124651674525e+00 1.1891606691568333e+00 -4.3183890173531481e+00 + -5.2742309893544803e+00 9.3962098695000151e-01 -4.3308649522671523e+00 + -5.7047659693771768e+00 8.0997713292649465e-01 -4.4117529093924226e+00 + id 14605 + loc 9.3605840206146240e-01 2.2080378234386444e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2984505896780661e-01:4.1021604086940927e-01:1.7786236400859057e-01:2.9069766691037102e-01:1.2366482383089559e+00:4.2984076051721698e-01:2.0218219062482850e+00:3.9281538611857092e-01:2.7349755346382825e+00:3.6561973639858053e-01:3.4047019746406848e+00 + CVs 20 + -8.8895770926659762e-02 2.7340578807541216e-01 5.1759403656559733e-02 + -1.8145288215073613e-01 5.0015709427947752e-01 1.3230007741941066e-01 + -2.7405784318261439e-01 6.8937426492658238e-01 2.2064693383604200e-01 + -3.5788774902473819e-01 8.3890800173551550e-01 2.9340290240603861e-01 + -4.2270199347212278e-01 9.5232716625295522e-01 3.4004875560820946e-01 + -4.5954925609173725e-01 1.0447110209231034e+00 3.5338241015005512e-01 + -4.7136052380068616e-01 1.1388424848590630e+00 3.4258408061015388e-01 + -4.7709310034194546e-01 1.2477267720484959e+00 3.3158840333921602e-01 + -5.0503471277933554e-01 1.3647099981352353e+00 3.3695304937919612e-01 + -5.8686073351983015e-01 1.4667581403724610e+00 3.5731520894869034e-01 + -7.3857750283957513e-01 1.5317920322361767e+00 3.7994283690258568e-01 + -9.5583387472763492e-01 1.5541531852956305e+00 3.9506580167242739e-01 + -1.2352648532956800e+00 1.5309780056035902e+00 4.0051500038808496e-01 + -1.5836182643954075e+00 1.4342089532630045e+00 4.0411862008759425e-01 + -1.9901826319173561e+00 1.2000069995088056e+00 4.3056102874857233e-01 + -2.3429176726723862e+00 7.2683532295921038e-01 5.2066651564911060e-01 + -2.4085196584234296e+00 -2.1125516334554284e-02 7.1551526868510973e-01 + -2.0468305334312222e+00 -8.3426348173431886e-01 1.0640935486129901e+00 + -1.8587201283049084e+00 -1.1412907928533551e+00 1.2459931473251014e+00 + id 14606 + loc 7.1587795019149780e-01 8.7923789024353027e-01 404 + blend 0.0000000000000000e+00 + interp 4.7205810089853328e-01:2.9262852349666818e-01:9.2176478246685789e-01:3.6383199668825683e-01:1.3251947546206322e+00:2.8223710910328687e-01:2.0060454405523149e+00:4.7205338031752431e-01:2.5463992875278234e+00:3.4499534650882863e-01:3.0624155049535409e+00:3.8380185176568610e-01:3.9968130100682746e+00 + CVs 20 + -3.1212895218772498e-02 6.4049738490094085e-02 2.4509853340641794e-02 + -8.3397788773918513e-02 1.1418327106219724e-01 5.5117430532794727e-02 + -1.5310539781954421e-01 1.7672881534678217e-01 9.5992031983122200e-02 + -2.3224309700984092e-01 2.6147758661463477e-01 1.3780272705958679e-01 + -3.1297904578164959e-01 3.7698759537734905e-01 1.8151124364095794e-01 + -3.8419544126660721e-01 5.2681855444590941e-01 2.2646083120930119e-01 + -4.3558221712951917e-01 7.0542480622167647e-01 2.6981661125653683e-01 + -4.6343333945298898e-01 8.9915914005830899e-01 3.0784524210903796e-01 + -4.6769202797039244e-01 1.0992887877120849e+00 3.4220632581043214e-01 + -4.3925422785218404e-01 1.3097855904147560e+00 3.8606629649393054e-01 + -3.6303213949555202e-01 1.5312087429855594e+00 4.5077298716201053e-01 + -2.3995065551525430e-01 1.7462439548020634e+00 5.2590264349491123e-01 + -9.0769498680464689e-02 1.9346696289944301e+00 5.9187183491949713e-01 + 6.9257238086053885e-02 2.0902754421570728e+00 6.4263741798116958e-01 + 2.4346157427256954e-01 2.2159235567093472e+00 6.8409544290346613e-01 + 4.3949208500689474e-01 2.3127852226104326e+00 7.1907003257793911e-01 + 6.5331104130664863e-01 2.3780277145482454e+00 7.4029863826304265e-01 + 8.6971467144189396e-01 2.4076976141270876e+00 7.4069459568726459e-01 + 9.8029946102531329e-01 2.3754709806314396e+00 7.4000654642989461e-01 + id 14607 + loc 5.4777938127517700e-01 3.4894844889640808e-01 399 + blend 0.0000000000000000e+00 + interp 4.2866538251822678e-01:4.2866109586440160e-01:6.0078064355196048e-01:2.6429785849124549e-01:1.0218092159488010e+00:3.5391319602521748e-01:1.9863520743864682e+00:2.7056216295042684e-01:2.9098477909780298e+00:2.7843004924531889e-01:3.8335246204988485e+00 + CVs 20 + 1.9050072168737422e-01 3.0260853876607607e-01 1.8567373011413724e-01 + 3.8681871430039849e-01 5.8922866179432698e-01 3.8155104806883117e-01 + 5.7593293942885748e-01 8.5227584892776065e-01 6.1171324811322259e-01 + 7.5785986273735551e-01 1.0826348036031030e+00 8.7173561111837705e-01 + 9.4123423930317185e-01 1.2771156812018898e+00 1.1490251441518149e+00 + 1.1314709413906310e+00 1.4333351904733460e+00 1.4370609658712112e+00 + 1.3278203138076941e+00 1.5442449329377657e+00 1.7306283896511405e+00 + 1.5243436266062129e+00 1.5981323318520233e+00 2.0181377154959486e+00 + 1.7107507315724875e+00 1.5838031204045353e+00 2.2804902223825834e+00 + 1.8710767259368846e+00 1.4979512846016891e+00 2.4932902969479227e+00 + 1.9853472394907485e+00 1.3532464716167862e+00 2.6343309109305881e+00 + 2.0505085720515517e+00 1.1708767353559435e+00 2.7138874394996586e+00 + 2.0939022848112749e+00 9.4580920545481040e-01 2.7774485834759952e+00 + 2.1536713913709642e+00 6.4885811090239753e-01 2.8677884119365076e+00 + 2.2744414454046735e+00 2.5306143042854146e-01 3.0343257747753665e+00 + 2.4758923172598477e+00 -2.1654140300631919e-01 3.3430664612870231e+00 + 2.7056995906918835e+00 -6.6983733932209855e-01 3.8667131413021218e+00 + 2.8170619293384389e+00 -9.7365773920687160e-01 4.5877435022184727e+00 + 2.7752592566112679e+00 -1.1177573948437463e+00 4.9329050326903667e+00 + id 14608 + loc 1.4967325329780579e-01 6.0550063848495483e-01 393 + blend 0.0000000000000000e+00 + interp 4.3580585341200279e-01:2.8911119277420722e-01:1.0074833402406047e+00:2.8307931209533133e-01:1.7348040077400539e+00:2.6550544863802555e-01:2.2357740260392975e+00:4.3580149535346868e-01:3.0043584495946498e+00:2.8029088675895608e-01:3.9939491812208869e+00 + CVs 20 + -3.5119886178962789e-01 3.5409074757031761e-01 -1.1699102221792443e-01 + -6.6040037253344874e-01 6.9443065504829782e-01 -2.6508327341828175e-01 + -9.3905155159186471e-01 1.0322657283466798e+00 -4.3724197734185977e-01 + -1.1996418103375208e+00 1.3689209347383779e+00 -6.2618613044596327e-01 + -1.4600801480726635e+00 1.7017206480057647e+00 -8.2392190266435972e-01 + -1.7403949174277376e+00 2.0281352442269491e+00 -1.0176117721358704e+00 + -2.0568316216075608e+00 2.3427825769269983e+00 -1.1897989346045272e+00 + -2.4236289852887483e+00 2.6307055356973401e+00 -1.3248220999865292e+00 + -2.8524485080827757e+00 2.8620051302492961e+00 -1.4134096336944015e+00 + -3.3443201608715727e+00 3.0144874216714692e+00 -1.4591799120728846e+00 + -3.8950790621980853e+00 3.0997091545484756e+00 -1.4918949911348063e+00 + -4.4988653875575730e+00 3.1356174616378540e+00 -1.5517377612305210e+00 + -5.1497209698299349e+00 3.1088454083035990e+00 -1.6445303482716775e+00 + -5.8389611208415308e+00 2.9881442058348622e+00 -1.7574056366888171e+00 + -6.5353176575749501e+00 2.7638868325777342e+00 -1.8903510489140485e+00 + -7.1819598562129929e+00 2.4882052799768575e+00 -2.0125116529953480e+00 + -7.7505752411733715e+00 2.2510755989751843e+00 -2.0583104583474974e+00 + -8.2849127044131503e+00 2.0514798868369777e+00 -2.0229761931560004e+00 + -8.8755995045970355e+00 1.7676035175543610e+00 -1.9675092967153895e+00 + id 14609 + loc 4.3791472911834717e-01 6.2021625041961670e-01 401 + blend 0.0000000000000000e+00 + interp 3.1193431796582016e-01:2.8474062677486695e-01:1.4260927249132860e-01:3.1193119862264052e-01:9.8019126508870535e-01:2.9047251542757024e-01:1.5793969272443755e+00:2.8465837517620041e-01:2.0633567605670144e+00:2.8860856527171502e-01:3.0936358857798951e+00 + CVs 20 + -8.3121262146066410e-02 2.9918937029419046e-01 -2.9971240083123341e-01 + -1.3780869009636426e-01 6.0620039300899509e-01 -6.1130332779157326e-01 + -1.8534948131398721e-01 9.0361651521101916e-01 -9.3068079209257504e-01 + -2.3218673448570298e-01 1.1703049245237693e+00 -1.2581752666344297e+00 + -2.8456532340888990e-01 1.3970988006225511e+00 -1.6029186470458201e+00 + -3.6318005165515799e-01 1.5852166041209741e+00 -1.9744654918282303e+00 + -4.9597539482456221e-01 1.7327099685531411e+00 -2.3682165061080158e+00 + -7.0122308321375448e-01 1.8294782744302391e+00 -2.7629339307248464e+00 + -9.7914532628358220e-01 1.8622489747317625e+00 -3.1314584710589299e+00 + -1.3140628646424388e+00 1.8219921218915744e+00 -3.4503804238720686e+00 + -1.6783155314145819e+00 1.7092620276404937e+00 -3.7056425707072917e+00 + -2.0365768762204892e+00 1.5337354229417342e+00 -3.8951058259386544e+00 + -2.3633992629147071e+00 1.3061693840090545e+00 -4.0338471385383041e+00 + -2.6591499889141916e+00 1.0264304120227867e+00 -4.1475214565037666e+00 + -2.9348390197748939e+00 6.9466391601594912e-01 -4.2476135538128332e+00 + -3.1925006710647299e+00 3.4528255200578900e-01 -4.3319244859718662e+00 + -3.4215971804726331e+00 3.9034609582804913e-02 -4.4244155677732708e+00 + -3.6255527123704265e+00 -1.8572925983829425e-01 -4.5669489502346039e+00 + -3.8987997504871048e+00 -3.9305120245334246e-01 -4.8393554435770740e+00 + id 14610 + loc 1.9334864616394043e-01 5.1138007640838623e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0630840311746839e-01:4.7192662399516516e-01:3.2460220493536474e-03:4.1768742477911391e-01:8.2295346267463243e-01:3.8049296748354478e-01:1.4755076956539548e+00:5.0630334003343724e-01:2.0006931045081209e+00:3.9098990021320446e-01:2.5752037140556676e+00:3.4408202578792679e-01:3.2036019743567401e+00 + CVs 20 + 3.0210615255843440e-02 4.6590003874586416e-01 2.1515087552475071e-01 + 1.1172483704278094e-01 8.3423307972098781e-01 3.4157225335801433e-01 + 2.1500383601809336e-01 1.1566520705392473e+00 4.3555769353379259e-01 + 3.3017867300734960e-01 1.4476452882506776e+00 5.1764368571910202e-01 + 4.5736032259348663e-01 1.7045679365591384e+00 5.8674568501813928e-01 + 5.9471961335279322e-01 1.9287159532663809e+00 6.4146755052938664e-01 + 7.4264664085222232e-01 2.1287062387466369e+00 6.7547961665246059e-01 + 9.0606318693832399e-01 2.3155203119781800e+00 6.7379368528153682e-01 + 1.0881671264725603e+00 2.4871947082191479e+00 6.1628664466140270e-01 + 1.2833765516657478e+00 2.6236456090049494e+00 4.9354190372971241e-01 + 1.4817042871417916e+00 2.7048283973890808e+00 3.1617035116361092e-01 + 1.6759048955312110e+00 2.7244088102025144e+00 1.0345214194885410e-01 + 1.8616594473340957e+00 2.6875741568200251e+00 -1.2747524176962821e-01 + 2.0359177315746959e+00 2.6059405686467212e+00 -3.6575433530715118e-01 + 2.1990640476960048e+00 2.4897364973044489e+00 -6.1910715421326068e-01 + 2.3545676370034982e+00 2.3241900072300505e+00 -9.2235412686495466e-01 + 2.4960245759120698e+00 2.0367932571911500e+00 -1.2532287355344192e+00 + 2.6009835870828075e+00 1.6323264514185447e+00 -1.4321987305795947e+00 + 2.6590694430544768e+00 1.2921629461398236e+00 -1.3471120359493329e+00 + id 14611 + loc 2.9774820804595947e-01 6.1911672353744507e-01 404 + blend 0.0000000000000000e+00 + interp 4.5763882930844130e-01:3.1470797785461913e-01:5.6463684919676482e-01:4.0624413869950343e-01:1.0052076766598994e+00:4.0139154283659023e-01:1.5180746851822786e+00:3.9139699416471985e-01:1.9969779406237880e+00:4.5763425292014825e-01:2.7994759015507817e+00:4.2844831184871102e-01:3.1926740015965906e+00:3.9754526190204753e-01:3.9835350204422144e+00 + CVs 20 + -2.1766547132251058e-02 5.5420068579912246e-02 -6.1929171298355998e-02 + 1.5935041304243835e-02 1.2249876596984036e-01 -1.1175449076492555e-01 + 2.6431978233748793e-02 2.0906686028720387e-01 -1.6966779242848165e-01 + 2.1238899647627429e-02 3.0231937279263965e-01 -2.3372321445323946e-01 + 7.7074799654485715e-03 3.9602873835568586e-01 -3.0658575377930575e-01 + -1.1944201385149789e-02 4.8838457528144374e-01 -3.9146728893082405e-01 + -3.8070298130625846e-02 5.7834540739022777e-01 -4.9082547324130865e-01 + -7.2375294156596381e-02 6.6344231260440434e-01 -6.0690119168353607e-01 + -1.1661227302893717e-01 7.3964662604052989e-01 -7.4099226303560939e-01 + -1.7189285785078690e-01 8.0252399204877189e-01 -8.9208159984331337e-01 + -2.3848045875369261e-01 8.4858292773909438e-01 -1.0561667664636094e+00 + -3.1551659591302561e-01 8.7653538780123363e-01 -1.2264679793193698e+00 + -4.0017849755603779e-01 8.8648044748209998e-01 -1.3952825963258011e+00 + -4.8675301340631089e-01 8.7500887861354892e-01 -1.5571006471223066e+00 + -5.6860358302050407e-01 8.3824309499630556e-01 -1.7071167551798134e+00 + -6.4148070239185906e-01 7.7521903901093370e-01 -1.8401659840149831e+00 + -7.0989655913443217e-01 6.9144327507403391e-01 -1.9493825331214700e+00 + -7.8728370273165804e-01 5.9366686711080141e-01 -2.0273984964124674e+00 + -9.2452053732949968e-01 5.3930179577916926e-01 -2.0532978185058957e+00 + id 14612 + loc 5.7971608638763428e-01 9.9283955991268158e-02 399 + blend 0.0000000000000000e+00 + interp 4.5324018790338405e-01:3.6222052220667478e-01:4.8223120893684646e-01:2.7707122431072206e-01:1.0201951085490273e+00:2.7896699892284466e-01:1.8869932030833807e+00:2.7133602333198847e-01:2.3322095938801688e+00:4.2616548395841003e-01:2.8798038177977019e+00:4.5323565550150502e-01:3.0663036059772448e+00:2.7103298120455610e-01:3.9837066699763217e+00 + CVs 20 + 1.0859378737116268e-01 2.3188402935655661e-01 2.5483278701643308e-01 + 1.9273191622654379e-01 4.4530209537748539e-01 4.8418173933919484e-01 + 2.6559009827213537e-01 6.4798822862437899e-01 7.0825294735438726e-01 + 3.4384716362843892e-01 8.5065041607279845e-01 9.4693867278055965e-01 + 4.4473283535776498e-01 1.0575893668396201e+00 1.1990948768917120e+00 + 5.8281820222029190e-01 1.2662568971763046e+00 1.4514735608996829e+00 + 7.6499067022223111e-01 1.4725457859297724e+00 1.6958679500240375e+00 + 9.9356968526806932e-01 1.6709673654027783e+00 1.9323190366890981e+00 + 1.2707426432392668e+00 1.8499490182591387e+00 2.1652762683945705e+00 + 1.5973282931651742e+00 1.9916328140343689e+00 2.3993254189528512e+00 + 1.9671386066207290e+00 2.0685987906244732e+00 2.6327539330176379e+00 + 2.3628270885088578e+00 2.0481536260576423e+00 2.8450389268967671e+00 + 2.7613081256526342e+00 1.9206628302913558e+00 3.0011563569668480e+00 + 3.1462721137982781e+00 1.6992651637414693e+00 3.0807778571141649e+00 + 3.5273940935132075e+00 1.3916282461341389e+00 3.1018996791164808e+00 + 3.9581751091794191e+00 9.9498431939399046e-01 3.1448118755847791e+00 + 4.4912849412250164e+00 5.1556396527089254e-01 3.3671185640888877e+00 + 5.0020636744005786e+00 8.7935895406343390e-02 3.8858541515694345e+00 + 5.1892900754245090e+00 -2.8580340326968434e-02 4.2137355306292905e+00 + id 14613 + loc 5.2324408292770386e-01 1.6423407196998596e-01 393 + blend 0.0000000000000000e+00 + interp 3.5530020248606503e-01:2.5873320488543744e-01:1.6095236352103737e-01:3.5463065481780653e-01:1.0297960754994560e+00:3.5529664948404016e-01:1.6418594348249331e+00:2.6520919692397910e-01:2.0274863871786990e+00:3.0440604251219600e-01:2.8094209379441759e+00:2.7000783634033837e-01:3.2153334081892559e+00 + CVs 20 + 4.6244684703027295e-01 3.7497944601785849e-01 7.5018483482303472e-02 + 9.2282546891384776e-01 7.6545882949480126e-01 1.5092909039899499e-01 + 1.3694486943247315e+00 1.1828562119601855e+00 2.5114075524969087e-01 + 1.7949766927449380e+00 1.5960875419306053e+00 4.2242858049709364e-01 + 2.1876875557488398e+00 1.9615011420873913e+00 6.9443705837065250e-01 + 2.5326884461555212e+00 2.2657959297802321e+00 1.0528757366630390e+00 + 2.8169752278431579e+00 2.5095768339281053e+00 1.4498791924033989e+00 + 3.0381179034431200e+00 2.6944595090244050e+00 1.8243070111851389e+00 + 3.1995924369293149e+00 2.8342875460747918e+00 2.1384809866211079e+00 + 3.3023139505091228e+00 2.9546798313894183e+00 2.3933265826123824e+00 + 3.3525611252446552e+00 3.0803237025247898e+00 2.6234593119989533e+00 + 3.3738901992544141e+00 3.2168701869440666e+00 2.8806014121968628e+00 + 3.3904745778187828e+00 3.3464938690590160e+00 3.2021146252821069e+00 + 3.4033735806194532e+00 3.4401750251599008e+00 3.6089029312939327e+00 + 3.4044870789526396e+00 3.4417959816010599e+00 4.1092526785137196e+00 + 3.3838516983069704e+00 3.2533551419295690e+00 4.6421348642674758e+00 + 3.3483315190535432e+00 2.8200948468137526e+00 5.0733725952893360e+00 + 3.3874039921087977e+00 2.2203605972444929e+00 5.2690000976140254e+00 + 3.6332526189455865e+00 1.7430416635921975e+00 5.0378611001614688e+00 + id 14614 + loc 1.6184540092945099e-01 4.7262451052665710e-01 401 + blend 0.0000000000000000e+00 + interp 4.7673577509809245e-01:4.7673100774034149e-01:6.2364452369977297e-01:4.1693370613249331e-01:1.0055264125395971e+00:2.9314261185359142e-01:1.6687264127626515e+00:3.3052487667285907e-01:2.5306617199308605e+00:2.9587963250298316e-01:3.0480653228862633e+00:2.9643232846862227e-01:3.9999580258990926e+00 + CVs 20 + -2.7112556955059025e-01 2.2630822707469531e-01 1.1508330122664787e-01 + -5.0470717584470570e-01 4.5198931718536034e-01 2.2744084661353620e-01 + -7.1771743355335482e-01 6.7161265130527370e-01 3.4815854515535682e-01 + -9.2112636335670017e-01 8.8079649663994197e-01 4.8346295490730440e-01 + -1.1185451247080480e+00 1.0747224570008891e+00 6.3185151557604602e-01 + -1.3107326397854746e+00 1.2479314000346859e+00 7.9111942135870483e-01 + -1.4962357778715487e+00 1.3976343266004929e+00 9.6372060853079011e-01 + -1.6737956843700850e+00 1.5234943178494147e+00 1.1588674002657633e+00 + -1.8417799448857788e+00 1.6236335191083697e+00 1.3871228517465406e+00 + -1.9971190121108851e+00 1.6935763023439787e+00 1.6575411965894373e+00 + -2.1369971107069321e+00 1.7276002231110754e+00 1.9733373368086748e+00 + -2.2610357635593994e+00 1.7218347892555053e+00 2.3248423163845988e+00 + -2.3692859594667697e+00 1.6751263373444001e+00 2.6886874396268894e+00 + -2.4588724721744373e+00 1.5942917661980189e+00 3.0253486380298824e+00 + -2.5305055526632154e+00 1.5097693989353025e+00 3.2830686579247832e+00 + -2.6029281425664426e+00 1.4601021576985800e+00 3.4323896115344268e+00 + -2.7128678548870875e+00 1.4477551855786266e+00 3.4859538688748128e+00 + -2.8612435671053560e+00 1.4305949049821014e+00 3.5067057079832122e+00 + -2.5990227788393074e+00 1.3663472893565243e+00 3.6881282973815472e+00 + id 14615 + loc 8.8566750288009644e-02 2.6791346073150635e-01 404 + blend 0.0000000000000000e+00 + interp 5.0045055161491925e-01:3.1005036499413502e-01:9.6685114204474087e-01:3.8573091439199059e-01:1.9989601926655882e+00:5.0044554710940314e-01:2.7621946911459543e+00:3.8980132202401047e-01:2.9883783854809138e+00:4.1989700702966071e-01:3.4464277720204359e+00:3.0727959989050518e-01:3.9979574219521998e+00 + CVs 20 + -1.1843838215450730e-01 2.7415158681604623e-01 -1.5791943415277590e-01 + -2.1687608240801254e-01 5.5536306503496125e-01 -3.3431478516571905e-01 + -3.3445757412736221e-01 8.4715381209222329e-01 -5.0326217633742842e-01 + -4.7077308200939938e-01 1.1454069636579265e+00 -6.5632653405888897e-01 + -6.3732786604153113e-01 1.4519242456881729e+00 -7.7838178116370249e-01 + -8.4344812363922128e-01 1.7656453448643796e+00 -8.5130528194044464e-01 + -1.0950234959717657e+00 2.0814216394302352e+00 -8.5369771241042192e-01 + -1.3914848051977662e+00 2.3883692520854365e+00 -7.6166806991859759e-01 + -1.7154660497214764e+00 2.6685459010242267e+00 -5.6142029730509568e-01 + -2.0317992519726151e+00 2.9039612806232760e+00 -2.6663083066674820e-01 + -2.3089310996733925e+00 3.0865781833438222e+00 8.9949184091404399e-02 + -2.5323385410479071e+00 3.2166450721059134e+00 4.8208060885769943e-01 + -2.6956091144143750e+00 3.2977810785977364e+00 8.9271070430598765e-01 + -2.7917780152792337e+00 3.3386898383971717e+00 1.3043211872459091e+00 + -2.8138511937544317e+00 3.3517850863964371e+00 1.7036009109535795e+00 + -2.7572540272023423e+00 3.3427274780089400e+00 2.0936587566751461e+00 + -2.6147942915131193e+00 3.3069951179268875e+00 2.4875143366899604e+00 + -2.3864746370884236e+00 3.2428631539382158e+00 2.8719239002064905e+00 + -2.4005147918870291e+00 3.2246923840541215e+00 2.9897997725620153e+00 + id 14616 + loc 1.5485183894634247e-01 6.0445272922515869e-01 399 + blend 0.0000000000000000e+00 + interp 4.3025869264663830e-01:3.5472705057209614e-01:3.2221905709320975e-01:4.1262111128090478e-01:9.2882365846821391e-01:2.7645067823520447e-01:1.4539301129670557e+00:4.3025439005971183e-01:1.9729925428860664e+00:2.6992012351277123e-01:2.7019776874387320e+00:3.1689203131737975e-01:3.1268065318245677e+00:2.6572198300757649e-01:3.9452964390831720e+00 + CVs 20 + -2.2171515032725522e-01 3.3336801937277433e-01 -2.5989835739190104e-01 + -3.9958747865470562e-01 6.7887211644831413e-01 -5.2323159381252238e-01 + -5.3997014649607711e-01 1.0360035505381398e+00 -8.1399594167280753e-01 + -6.5190035332818430e-01 1.4058143289176033e+00 -1.1409823106835473e+00 + -7.5584218041439954e-01 1.7938709799693977e+00 -1.5075391647581748e+00 + -8.9682178928237044e-01 2.2050585574459682e+00 -1.9200460754947850e+00 + -1.1516185864643058e+00 2.6317793960491787e+00 -2.3828857775339554e+00 + -1.6189988817107162e+00 3.0165016245800640e+00 -2.8871306698211132e+00 + -2.3229584116707627e+00 3.2154613049438594e+00 -3.3608377239138258e+00 + -3.1187198817060082e+00 3.1382362089346074e+00 -3.7049329061015341e+00 + -3.8408979820752829e+00 2.8536803868442915e+00 -3.9040277482139656e+00 + -4.3934238691865994e+00 2.5026987252589170e+00 -3.9983735075133060e+00 + -4.7492646692937148e+00 2.2021047807184226e+00 -4.0279185405201039e+00 + -4.9075393962409128e+00 1.9993565921859617e+00 -4.0060285553415902e+00 + -4.8769669889804144e+00 1.8605951711301416e+00 -3.9176479614354984e+00 + -4.6672471933047062e+00 1.6807965250001633e+00 -3.7437349521748735e+00 + -4.3574522073732043e+00 1.2948689932875947e+00 -3.5177500109685265e+00 + -4.3843690288330217e+00 9.3310163533615276e-01 -3.4131032823016683e+00 + -4.8816491809756881e+00 1.2033150337239444e+00 -3.4281668177921620e+00 + id 14617 + loc 5.2137327194213867e-01 3.3774625509977341e-02 393 + blend 0.0000000000000000e+00 + interp 4.2788563549517805e-01:3.1948036909754018e-01:4.6132793260965577e-01:2.7979222055707281e-01:1.0010831121845341e+00:4.2788135663882310e-01:1.5287839047595020e+00:2.2811932134565743e-01:2.1314782600779796e+00:2.5671431752248525e-01:3.0000489801636796e+00:2.5570677824327104e-01:3.9755229968877464e+00 + CVs 20 + 4.9497171446324650e-01 4.0857174674973068e-01 9.8978100241022257e-02 + 9.6028599990571006e-01 8.4678442488082495e-01 2.1141765417184552e-01 + 1.3979244639268866e+00 1.3250813797547858e+00 3.6552634739856410e-01 + 1.8096555080700405e+00 1.8112594117651375e+00 6.1548140103374083e-01 + 2.1843687732032344e+00 2.2398299973411047e+00 9.9809773742050600e-01 + 2.5120710718184727e+00 2.5630029537572785e+00 1.4974281040179909e+00 + 2.7973867591991297e+00 2.7582716846139257e+00 2.0631762995865861e+00 + 3.0612248831651181e+00 2.8095788233367442e+00 2.6334389002776804e+00 + 3.3213743934172122e+00 2.7122243300837567e+00 3.1487056527488617e+00 + 3.5756382096767347e+00 2.4781322586167036e+00 3.5577447953356796e+00 + 3.8007662988895685e+00 2.1385173939289577e+00 3.8240997371553771e+00 + 3.9650439450798767e+00 1.7426418985492134e+00 3.9397720365404894e+00 + 4.0472378043899218e+00 1.3493654463307811e+00 3.9160151959218266e+00 + 4.0401951195716821e+00 1.0241032645908921e+00 3.7704720869342538e+00 + 3.9549837971358643e+00 8.1739172261761839e-01 3.5551752897142266e+00 + 3.8491059336842954e+00 6.8938074818465056e-01 3.3609897764474339e+00 + 3.8033605217146649e+00 5.1892848427785809e-01 3.2121573858368118e+00 + 3.8700682310923895e+00 2.4507801182405231e-01 3.0613394081267380e+00 + 4.0973592170724951e+00 -2.0100396399612452e-01 2.8987321254337757e+00 + id 14618 + loc 1.2876478955149651e-02 6.7737692594528198e-01 1079 + blend 0.0000000000000000e+00 + interp 3.8800688502399694e-01:3.3960643795493878e-01:3.1718246342977707e-03:3.6800601440878522e-01:9.4559360959044270e-01:3.3740669485938962e-01:1.4374052069421928e+00:3.8800300495514672e-01:2.0664776706460253e+00:3.7610523994936296e-01:2.7583351708243393e+00:3.4704330732089339e-01:3.2463228973719231e+00 + CVs 20 + 1.1512210242567800e-01 5.4085390626884355e-01 2.5272315653731592e-01 + 2.5057481211616717e-01 9.8310464550009180e-01 3.5824980153946684e-01 + 3.8209467244084083e-01 1.3867031458176733e+00 4.0263371846939033e-01 + 5.0147750210486663e-01 1.7596516649888290e+00 4.0502811382283976e-01 + 6.0651589175614107e-01 2.0827730143859773e+00 3.5577063544288146e-01 + 6.8592462035599611e-01 2.3226930325372246e+00 2.4487890800044654e-01 + 7.1632669415006545e-01 2.4416280396048444e+00 8.1835796251732651e-02 + 6.6814296799332418e-01 2.4242883183190838e+00 -8.5013064928395776e-02 + 5.2682323791348973e-01 2.3059679922235881e+00 -1.8225660777679664e-01 + 3.2441216203496748e-01 2.1760736546421899e+00 -1.7766458159318754e-01 + 1.1750366646041160e-01 2.0985863607641160e+00 -1.2624426766702923e-01 + -6.9944316520810401e-02 2.0632908110350843e+00 -9.7149888872380519e-02 + -2.4366938684345263e-01 2.0335739411961025e+00 -1.1914331438405423e-01 + -4.1474674067538481e-01 1.9804223204371036e+00 -1.9331327947626209e-01 + -5.9093051139231945e-01 1.8927089816485587e+00 -3.0400818696998655e-01 + -7.7448681162183719e-01 1.7853700681497902e+00 -4.2651975596255265e-01 + -9.6072301298154439e-01 1.6623400834950193e+00 -5.5275520861514937e-01 + -1.1484151916553529e+00 1.4660007287458501e+00 -6.5466073684671122e-01 + -1.3405408576960314e+00 1.2054905945641297e+00 -6.4123987074997879e-01 + id 14619 + loc 6.8698847293853760e-01 1.4818765223026276e-01 401 + blend 0.0000000000000000e+00 + interp 3.6732760866371761e-01:2.9409958643647766e-01:7.7806052884473964e-01:3.1657768882478410e-01:1.9233280043922365e+00:3.0353842587595942e-01:2.4339128251422317e+00:3.6732393538763097e-01:3.0834505357844821e+00:2.7204486334928663e-01:3.9553784443626423e+00 + CVs 20 + 2.3515920538975922e-02 2.7459163948221593e-01 2.2922412020735411e-01 + 5.3124250993416916e-02 5.3924738359639424e-01 4.5327831064725460e-01 + 7.9515948564593653e-02 7.9249717193278357e-01 6.7692773078537649e-01 + 1.0180395391793828e-01 1.0338139661648433e+00 9.0777366557811534e-01 + 1.2941550107196517e-01 1.2578992209859763e+00 1.1567884737046512e+00 + 1.7432966871623265e-01 1.4540160560627307e+00 1.4356830819926942e+00 + 2.5074991220843873e-01 1.6009006516267146e+00 1.7511865637143977e+00 + 3.7056799633080695e-01 1.6736728909797305e+00 2.0947688273582332e+00 + 5.3539160710034717e-01 1.6716339019457096e+00 2.4370674424154166e+00 + 7.3299230275380378e-01 1.6172384956144894e+00 2.7447478381526609e+00 + 9.4260467605304998e-01 1.5109578159066879e+00 3.0052621730258280e+00 + 1.1453200561127643e+00 1.3134476419226750e+00 3.2261577389488960e+00 + 1.3374890118678089e+00 1.0102809485097102e+00 3.4125200472755481e+00 + 1.5321751212967334e+00 6.6074695914379267e-01 3.5594835000151237e+00 + 1.7289193097994662e+00 3.3317128409827457e-01 3.6566124052946232e+00 + 1.9268133168573891e+00 -7.0408501233761300e-03 3.7070866960853608e+00 + 2.1933959373032628e+00 -4.9905866351382266e-01 3.7371474179542918e+00 + 2.7069914728956395e+00 -1.0943936435426975e+00 3.7974986865700227e+00 + 2.9656353475166162e+00 -1.2004005732978582e+00 3.7534036549111862e+00 + id 14620 + loc 4.0904903411865234e-01 5.2211499214172363e-01 399 + blend 0.0000000000000000e+00 + interp 3.7884848997081938e-01:2.7147543736128832e-01:8.0827305025052976e-03:3.7884470148591970e-01:9.1544947423612077e-01:2.9731300561065016e-01:1.5939791660583116e+00:3.7017054676238736e-01:2.1048377654153292e+00:2.6649314628539189e-01:2.8500764621293055e+00:2.9348440819102062e-01:3.2827049435344935e+00 + CVs 20 + -1.2637402647101936e-01 2.6055452192474082e-01 -1.5220679966051759e-01 + -2.7580881285037662e-01 5.4054598397057385e-01 -3.2154298437464196e-01 + -4.2077906296283635e-01 8.3212396785419562e-01 -5.2515033291809665e-01 + -5.4427822125113701e-01 1.1228930088458136e+00 -7.6373499068299999e-01 + -6.5074033127406927e-01 1.4089676361291597e+00 -1.0276339624629138e+00 + -7.5113529888309549e-01 1.6896403433494349e+00 -1.3077619863658430e+00 + -8.5830174172242057e-01 1.9607267520204137e+00 -1.6014574516885538e+00 + -9.8564064093911397e-01 2.2080261086155928e+00 -1.9141024926210690e+00 + -1.1473728422170888e+00 2.4041110808041175e+00 -2.2558063085730788e+00 + -1.3536641676850147e+00 2.5065575406874423e+00 -2.6328391164778795e+00 + -1.5945710071861121e+00 2.4673966045325040e+00 -3.0250499318296526e+00 + -1.8289965599817977e+00 2.2888064963510137e+00 -3.3770697975782817e+00 + -2.0215914641198829e+00 2.0444879453452747e+00 -3.6610297345470815e+00 + -2.1639456245957973e+00 1.8102110797761981e+00 -3.8968757027258212e+00 + -2.2486961893910427e+00 1.6440622272220307e+00 -4.1091661330957931e+00 + -2.2615068492035704e+00 1.5656460725817942e+00 -4.3047398000895702e+00 + -2.1880608409858264e+00 1.5596770138013532e+00 -4.4589255307699789e+00 + -2.0588229704662075e+00 1.5816980590288963e+00 -4.5323983955417466e+00 + -1.9448477628104566e+00 1.5422228110200458e+00 -4.7683554985215979e+00 + id 14621 + loc 4.3750128149986267e-01 5.5539160966873169e-01 404 + blend 0.0000000000000000e+00 + interp 4.2845259637467475e-01:3.5241328103550373e-01:2.5668818241280089e-02:3.9238191342454382e-01:7.3542983002305151e-01:4.2844831184871102e-01:1.2031771044458002e+00:3.9366065859198934e-01:2.0056435584345098e+00:2.7241040129234395e-01:2.9495950337066659e+00:3.5635540994647408e-01:3.3978566359585218e+00 + CVs 20 + -5.0838996875954813e-02 -1.1733688388060499e-02 1.4837965444081735e-02 + -8.0087937955785352e-02 2.7182906941055768e-03 2.3856278735529479e-02 + -8.8428008515348197e-02 2.1584052219641665e-02 2.7385090467635341e-02 + -9.6284797285078688e-02 3.3736244904686158e-02 2.8304425870000663e-02 + -1.0479633622601950e-01 4.0210650061650283e-02 2.4411555073465589e-02 + -1.1437998825941682e-01 4.2184708862536544e-02 1.3796313212670868e-02 + -1.2575510245270624e-01 4.1379584070908124e-02 -6.4105136756662812e-03 + -1.4052551622319459e-01 4.2066634463850422e-02 -4.2086254928748443e-02 + -1.6287115458529466e-01 5.1260630257480663e-02 -9.7314677633802679e-02 + -2.0117894109122328e-01 7.2208262807003487e-02 -1.6523015168738669e-01 + -2.6764898536164572e-01 1.0501421897155722e-01 -2.3547435060526506e-01 + -3.6869646609189238e-01 1.5163784223619353e-01 -2.9798078070411083e-01 + -4.9706621615739299e-01 2.1871140123841615e-01 -3.4669416458751245e-01 + -6.3702878258009299e-01 3.1310634763553657e-01 -3.8078186156027921e-01 + -7.8156453465864695e-01 4.3192721064887701e-01 -3.9539428076450761e-01 + -9.3648199521785813e-01 5.7072943451290403e-01 -3.8000213545470302e-01 + -1.0988299086467952e+00 7.3669671955788862e-01 -3.2359887658573333e-01 + -1.2434773108865382e+00 9.4187899906791095e-01 -2.2526581957020184e-01 + -1.2423594454416023e+00 1.0120395756647571e+00 -2.8427402553651565e-01 + id 14622 + loc 8.7998732924461365e-02 9.9534712731838226e-02 401 + blend 0.0000000000000000e+00 + interp 4.2749576765018982e-01:2.8501806734361551e-01:7.2313073373957726e-01:4.2749149269251335e-01:1.2771029447964517e+00:2.7958390928705684e-01:1.9210584985547232e+00:2.8732617809691402e-01:2.8555260054040836e+00:2.8486002158565826e-01:3.8640521088872948e+00 + CVs 20 + -2.8562101949999874e-01 1.9882259677572864e-01 1.0640203537401932e-01 + -5.5184711947126064e-01 3.9440829474930922e-01 2.5297734093773155e-01 + -8.1534394721633441e-01 5.9252292953997798e-01 4.1135423208020289e-01 + -1.0857697302541880e+00 7.9103191731709066e-01 5.6225223919486711e-01 + -1.3662336531618462e+00 9.8577325983045971e-01 6.9859404379982626e-01 + -1.6444632837279125e+00 1.1691119427069758e+00 8.1195339017612422e-01 + -1.8840462757811962e+00 1.3368872567163150e+00 8.8832500544513326e-01 + -2.0477399248066290e+00 1.5055992295389189e+00 8.8280381775740602e-01 + -2.1678382702101504e+00 1.7265471099739840e+00 8.0886268456530452e-01 + -2.2944578958181281e+00 1.9475670567703975e+00 8.2392754473131491e-01 + -2.3802956301717910e+00 2.0157041485225240e+00 9.8102158720516819e-01 + -2.3752346644514777e+00 1.8456166172890605e+00 1.2050947735972688e+00 + -2.3171376716056473e+00 1.4313093016724370e+00 1.4395845054140954e+00 + -2.3062748308366534e+00 7.9908942716359743e-01 1.7086532629723714e+00 + -2.4409520832551679e+00 3.3249426309747976e-02 2.1416826476023436e+00 + -2.7981530744807368e+00 -6.3170509623430160e-01 2.9311836027249472e+00 + -3.3386388318192339e+00 -7.2585530480642579e-01 4.0313291525330497e+00 + -3.7310316542036164e+00 -2.3979160943243932e-01 4.8198010603673183e+00 + -3.8736626050431946e+00 1.5858240071231394e-01 5.1461614727422438e+00 + id 14623 + loc 9.8519986867904663e-01 7.8769820928573608e-01 393 + blend 0.0000000000000000e+00 + interp 5.2599941324381061e-01:5.2599415324967824e-01:5.1965557188883627e-02:2.7920447474720667e-01:8.8343027055381496e-01:4.4852689492116865e-01:1.6070680961782537e+00:4.5120021329236654e-01:2.2742909697867368e+00:3.3916793206378082e-01:2.8574611737657234e+00:2.7472091263286863e-01:3.3679281496433773e+00:5.1703343354268883e-01:3.9984944332028238e+00 + CVs 20 + -1.6413355024266491e-01 1.5818930869436665e-01 -6.3478700416528797e-02 + -3.3814654174576053e-01 3.3829186579545156e-01 -1.4407751719034251e-01 + -5.0895810199913738e-01 5.3011189363015576e-01 -2.2297937307318882e-01 + -6.7378819107226295e-01 7.3099018024734619e-01 -2.9137570208897406e-01 + -8.3670109951373228e-01 9.4154287503073886e-01 -3.4882693468409381e-01 + -1.0018732857143338e+00 1.1598489948944990e+00 -3.9839092778501750e-01 + -1.1699966140935714e+00 1.3757841214712285e+00 -4.5164311722153772e-01 + -1.3382095934027041e+00 1.5736578034239026e+00 -5.2046246939860707e-01 + -1.5088845046718431e+00 1.7501001309795301e+00 -6.0195308010902193e-01 + -1.6941878061992592e+00 1.9185048957397297e+00 -6.8561361136508958e-01 + -1.9007312248726596e+00 2.0842628128256573e+00 -7.7906586840802583e-01 + -2.1099495230870176e+00 2.2234970249805244e+00 -9.0362639846933424e-01 + -2.2952524543365262e+00 2.3002948565282928e+00 -1.0587624432442651e+00 + -2.4441173627322250e+00 2.2801031463536749e+00 -1.2202183905368140e+00 + -2.5438265552596224e+00 2.1643288998658403e+00 -1.3492108951642701e+00 + -2.5703352778159774e+00 2.0173356727860527e+00 -1.4123769736020031e+00 + -2.4913179469448368e+00 1.9046345594372971e+00 -1.4018916812539119e+00 + -2.3593074695439435e+00 1.7912817675977533e+00 -1.3662490131620393e+00 + -2.5412765295999087e+00 1.5903021313390946e+00 -1.3631762919213954e+00 + id 14624 + loc 6.3412004709243774e-01 4.5304593443870544e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4352432897022620e-01:3.2268011271598068e-01:2.0145361854037902e-01:3.5795940943348437e-01:9.9613667196363254e-01:2.5439319269021821e-01:1.6771140815448158e+00:3.7963285957631782e-01:2.4177240921305847e+00:3.4483174404818634e-01:3.0360740013142418e+00:4.4351989372693651e-01:3.9337351099853990e+00 + CVs 20 + -2.7710964093610582e-02 3.0020670348766576e-01 4.3654941870690231e-02 + -7.8169651618893721e-02 5.4696550831050339e-01 1.1043329093831789e-01 + -1.3165888828538089e-01 7.6487148082769374e-01 1.8881977951735998e-01 + -1.6930063036077633e-01 9.5754900955217004e-01 2.6551201377886563e-01 + -1.9072643811821069e-01 1.1252074531267398e+00 3.3283324633799249e-01 + -1.9459562091569710e-01 1.2704940490306025e+00 3.7874926864487085e-01 + -1.8443180332031206e-01 1.4056230878393627e+00 4.0048209737076412e-01 + -1.7154138621998877e-01 1.5446078228391165e+00 4.1460700081343316e-01 + -1.6605290267044071e-01 1.6909305377195731e+00 4.4185154513465918e-01 + -1.7169490170469603e-01 1.8385932897315889e+00 4.9716242062336113e-01 + -1.8647427188175264e-01 1.9758033988552115e+00 5.9049324851038154e-01 + -2.0371400266972139e-01 2.0901316919705071e+00 7.2543194359717722e-01 + -2.1516154551142769e-01 2.1711988445459127e+00 9.0018580484730260e-01 + -2.1345971986160467e-01 2.2123211799819318e+00 1.1095999091754685e+00 + -1.9529216950399891e-01 2.2170000737439737e+00 1.3483647412794189e+00 + -1.6912625153935806e-01 2.2183930091033828e+00 1.6246698930735595e+00 + -1.5746116007931901e-01 2.2673796852219468e+00 2.0022404944845547e+00 + -1.6720686792386055e-01 2.2524496299384662e+00 2.5103233054501217e+00 + -1.2005477546832112e-01 2.0332224661199927e+00 2.4560748593224266e+00 + id 14625 + loc 5.7876646518707275e-02 3.0981630086898804e-01 399 + blend 0.0000000000000000e+00 + interp 4.8130331538433585e-01:2.9765259763648244e-01:3.7770751818030734e-01:2.9905609529324884e-01:1.0025357739116822e+00:4.2126716447654045e-01:1.7341417739148826e+00:2.0372001077132601e-01:2.1331938571395472e+00:2.9367265329006048e-01:3.1224316813886799e+00:4.8129850235118204e-01:3.9802498460257620e+00 + CVs 20 + -7.7954036823339901e-02 3.1022017612179714e-01 1.7625846575006762e-01 + -1.8888981618772524e-01 6.2426411698704842e-01 3.4166688650326260e-01 + -3.2592948840425273e-01 9.3465109566563265e-01 4.8541307904287700e-01 + -4.8231369835340177e-01 1.2377883963168399e+00 6.0860696249009005e-01 + -6.5138840837508427e-01 1.5332810248738735e+00 7.2173030779955782e-01 + -8.2926022659184218e-01 1.8203489218259894e+00 8.3841429578170446e-01 + -1.0193363091929726e+00 2.0954114242100315e+00 9.7339653112528035e-01 + -1.2309990023209298e+00 2.3489280723901378e+00 1.1436384115986067e+00 + -1.4747300690341463e+00 2.5587508806888857e+00 1.3674384218930429e+00 + -1.7539559706832237e+00 2.6848973935763421e+00 1.6548748734222101e+00 + -2.0477557629353749e+00 2.6795992606253076e+00 1.9835520600646930e+00 + -2.3107304248303371e+00 2.5400913801822629e+00 2.2888353480417991e+00 + -2.5226614196009267e+00 2.3217370322510535e+00 2.5249233270214355e+00 + -2.6919304198002600e+00 2.0841494627958750e+00 2.6843237135644777e+00 + -2.8314676579079583e+00 1.8702459575039267e+00 2.7744054561094136e+00 + -2.9535222526336158e+00 1.6949508392607453e+00 2.8132127375940912e+00 + -3.0566378468262720e+00 1.5607282909533025e+00 2.8132232434891309e+00 + -3.1810991241310327e+00 1.4516766967037942e+00 2.7857359888211306e+00 + -3.5023960535605210e+00 1.3755219320411443e+00 2.7031893638458149e+00 + id 14626 + loc 9.7779124975204468e-01 9.2440569400787354e-01 401 + blend 0.0000000000000000e+00 + interp 4.5995841546444755e-01:4.5843432152165697e-01:6.0096882396559193e-01:2.5623170712330767e-01:1.3063849219314116e+00:3.9887725803703045e-01:2.1989245724510380e+00:3.8383809184113948e-01:2.7596710466854502e+00:4.5995381588029294e-01:3.1527412469465617e+00:2.6284473282298743e-01:3.9978498543671179e+00 + CVs 20 + -1.0455040513854583e-02 2.9134741203022768e-01 -2.3682678165753654e-01 + -1.3805377626363580e-02 5.7591004831977455e-01 -4.5101054052052747e-01 + 4.7963812639923997e-03 8.7007529165045649e-01 -6.8635686192932943e-01 + 5.2215372550755201e-02 1.1684664180339512e+00 -9.6613683073959478e-01 + 1.2494278426608396e-01 1.4515222154256757e+00 -1.3017305200505063e+00 + 2.0438660659888419e-01 1.7024100702683049e+00 -1.7002117745158434e+00 + 2.5027334929208489e-01 1.9152903943553587e+00 -2.1622732827277655e+00 + 2.1451949002465498e-01 2.0829127224140702e+00 -2.6733352983502745e+00 + 6.2069362268850847e-02 2.1893793788564357e+00 -3.1953428537378610e+00 + -2.1431815362450735e-01 2.2235614630917850e+00 -3.6756480644832932e+00 + -5.9382758591173768e-01 2.1911491376002603e+00 -4.0684408127241563e+00 + -1.0432118637360630e+00 2.1068688314474668e+00 -4.3512185505021259e+00 + -1.5278484445839671e+00 1.9816411218386421e+00 -4.5313397435672913e+00 + -2.0096084059336734e+00 1.8241124735604761e+00 -4.6311426731809888e+00 + -2.4650293283277942e+00 1.6462016757007891e+00 -4.6599779635934695e+00 + -2.9262312457363251e+00 1.4436625059380113e+00 -4.6185797564554871e+00 + -3.4443222846488251e+00 1.1913719607958038e+00 -4.5530520779014791e+00 + -3.9803556194490151e+00 9.3882656119095653e-01 -4.5692914953670645e+00 + -4.3379838358133549e+00 8.5541353879386417e-01 -4.6980721426519878e+00 + id 14627 + loc 8.4906196594238281e-01 8.0556631088256836e-02 404 + blend 0.0000000000000000e+00 + interp 4.6166168374063071e-01:3.6995894932718149e-01:7.3185585238418560e-01:2.5409386243249876e-01:1.0673581634669957e+00:2.8686398898082971e-01:1.9782814072725565e+00:3.8284837710900682e-01:2.7745834415671098e+00:3.5243246844111931e-01:3.1558212269980563e+00:4.6165706712379334e-01:3.9998625965796837e+00 + CVs 20 + 1.0135074222881374e-02 9.1241774301548811e-02 1.1225975239143321e-01 + 1.0541608704849492e-02 1.8932911642680228e-01 2.2818595649830040e-01 + -7.2176392408696277e-03 2.9259299679662137e-01 3.4021277136693229e-01 + -4.9191249400670073e-02 3.9880621318413179e-01 4.4178804359105472e-01 + -1.1666046239902700e-01 5.0497389072028143e-01 5.2898672123319979e-01 + -2.0868545038587119e-01 6.0639047152265779e-01 5.9597316191850125e-01 + -3.2213722060999411e-01 6.9811625625726281e-01 6.3601650096289408e-01 + -4.5235209454719177e-01 7.7717884481986943e-01 6.4417720234197473e-01 + -5.9210229307148976e-01 8.4178172137545726e-01 6.1709474438526091e-01 + -7.3079858461324654e-01 8.9024929862108748e-01 5.5237950256143153e-01 + -8.6085620426913068e-01 9.2503430621958227e-01 4.5206740493460573e-01 + -1.0111006190019503e+00 9.6780550439241841e-01 3.3387328210909195e-01 + -1.2651804592979494e+00 1.0564099666452140e+00 2.3918413718576992e-01 + -1.6974265323555406e+00 1.2109762652919356e+00 2.5499661297559373e-01 + -2.2423988861395108e+00 1.3924071775550373e+00 4.7390496852714992e-01 + -2.7421456375533495e+00 1.5398219450825152e+00 8.6461512072844227e-01 + -3.1382429745128047e+00 1.6357907381574468e+00 1.3703148764673243e+00 + -3.4161183203684251e+00 1.6759590923200731e+00 1.9848247324902506e+00 + -3.5639994680422671e+00 1.7304391702794037e+00 2.1653982895150246e+00 + id 14628 + loc 3.6900532245635986e-01 7.4721783399581909e-01 393 + blend 0.0000000000000000e+00 + interp 3.7401073465380347e-01:3.3567446685455204e-01:2.7243665397622441e-01:2.8730630402550011e-01:1.0157576623982774e+00:3.7400699454645697e-01:1.9230523806453004e+00:2.8865277100248810e-01:2.3370551879968589e+00:3.0930921998535632e-01:2.9998520552164871e+00:2.6587887007852995e-01:3.6688647955111939e+00 + CVs 20 + -2.7878061498724110e-01 3.8383187100403537e-01 -2.7473685472963782e-01 + -5.2878230455133646e-01 7.5596594086712965e-01 -5.4367181295208522e-01 + -7.5713306862899932e-01 1.1189848416824870e+00 -8.1800939854091470e-01 + -9.8403144678566168e-01 1.4674231081418372e+00 -1.1013576288681213e+00 + -1.2291700687765705e+00 1.7909142244386123e+00 -1.3895009504346358e+00 + -1.5035129168260255e+00 2.0809417057944595e+00 -1.6746242136986071e+00 + -1.8077616366873399e+00 2.3292080778942781e+00 -1.9467692895073676e+00 + -2.1330870223393776e+00 2.5241201812543119e+00 -2.1961249558903480e+00 + -2.4649030236943910e+00 2.6537608199636953e+00 -2.4156086015743892e+00 + -2.7930846184021387e+00 2.7200198987488511e+00 -2.6069071932529591e+00 + -3.1286126374604608e+00 2.7439512371881936e+00 -2.7932591719617328e+00 + -3.4963417474924192e+00 2.7372626879330015e+00 -3.0106068656744949e+00 + -3.9013854289415448e+00 2.6784794758633321e+00 -3.2687937789938677e+00 + -4.3193372136738750e+00 2.5370646962233510e+00 -3.5520897488344936e+00 + -4.7363831444133453e+00 2.2855398145418908e+00 -3.8668271804080461e+00 + -5.1892586615281262e+00 1.8732844261070507e+00 -4.2274542378898223e+00 + -5.7356487342322460e+00 1.2938932495477198e+00 -4.5613684696578458e+00 + -6.3484123867687590e+00 6.7215330856946665e-01 -4.7643862071870480e+00 + -6.8481965201678801e+00 2.1943697500115933e-01 -4.9409741049697002e+00 + id 14629 + loc 8.7702560424804688e-01 5.9173530340194702e-01 399 + blend 0.0000000000000000e+00 + interp 4.1828579631546692e-01:4.1828161345750381e-01:1.2488637697538607e-04:2.6741365981329551e-01:7.5492575975557752e-01:2.5669737547479232e-01:1.3284777959049345e+00:2.6444042983019073e-01:2.0109384661547582e+00:2.4922022342156455e-01:3.0768418563340392e+00 + CVs 20 + -2.2228105702865128e-01 2.9200398623509827e-01 -6.7478313100594337e-02 + -4.5473826117705241e-01 5.9245133486717882e-01 -1.7623188449938321e-01 + -7.0229464497778427e-01 8.8769598414044015e-01 -3.2415906573086151e-01 + -9.6332724833032191e-01 1.1662434790721028e+00 -5.1555752036318947e-01 + -1.2321970387028107e+00 1.4180907434854038e+00 -7.5527238793723450e-01 + -1.5008099928881558e+00 1.6316739289257438e+00 -1.0437291443827952e+00 + -1.7600000247099621e+00 1.7952168579074776e+00 -1.3786546155935042e+00 + -1.9976010327242644e+00 1.8981718863371864e+00 -1.7556005301767823e+00 + -2.1918840583429371e+00 1.9323663104481679e+00 -2.1685914293734334e+00 + -2.3151789005434691e+00 1.8886357761809012e+00 -2.6044475800272804e+00 + -2.3587113828214186e+00 1.7644434055145617e+00 -3.0331822127564823e+00 + -2.3588236239123881e+00 1.5734556581273458e+00 -3.4246855834719714e+00 + -2.3627038782660863e+00 1.3242465600970981e+00 -3.7589215271652097e+00 + -2.3929022173567116e+00 1.0086084901606713e+00 -3.9937949238210266e+00 + -2.4564640126938699e+00 6.4561109589757493e-01 -4.0981434691183116e+00 + -2.5627534900683377e+00 2.8751513858875266e-01 -4.1373985534205957e+00 + -2.7308231933837752e+00 -4.5140584701986342e-02 -4.2110822337581872e+00 + -2.9455040263865091e+00 -3.6039777640752957e-01 -4.3677555706068594e+00 + -3.0529614015211299e+00 -6.8502117290257969e-01 -4.7012748773079922e+00 + id 14630 + loc 3.6298555135726929e-01 7.4446588754653931e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5081350730751946e-01:2.8906003978967704e-01:6.6805833597337161e-01:3.5493219061950837e-01:1.0714360879657050e+00:3.9283482126706348e-01:1.9990579725065203e+00:4.3650152996766139e-01:2.5424509833649180e+00:4.5080899917244638e-01:2.9851563217081871e+00:3.6253417770593177e-01:3.3453030449268519e+00:3.9195058794775828e-01:3.9989022168242419e+00 + CVs 20 + 1.2429852799963453e-01 4.4567701469612292e-01 8.2871157531648143e-02 + 2.7153134143690116e-01 8.2695504112640938e-01 7.3841297154322194e-02 + 4.2549828223920888e-01 1.1749959177820910e+00 1.2527984080358490e-02 + 5.7930471018692198e-01 1.4860405810398234e+00 -8.9951793590597018e-02 + 7.2639618290977759e-01 1.7376290876195579e+00 -2.3317467009327797e-01 + 8.4958988246627865e-01 1.8969861889979065e+00 -4.1099140759718344e-01 + 9.2893739893350136e-01 1.9478865913062084e+00 -6.0091241414966545e-01 + 9.5647336364722679e-01 1.9089730245002128e+00 -7.7163275026209344e-01 + 9.3916846419674938e-01 1.8157224525593598e+00 -9.0201706954818273e-01 + 8.9475097552626748e-01 1.7016366340839237e+00 -9.9104438861080357e-01 + 8.4281427809542731e-01 1.5865924151850130e+00 -1.0535474372949045e+00 + 7.9858049781575891e-01 1.4752071000101883e+00 -1.1080618971542848e+00 + 7.7300086864237705e-01 1.3622006246153786e+00 -1.1684133758017541e+00 + 7.7385800888328549e-01 1.2398546645206292e+00 -1.2374544009535033e+00 + 8.0235023151036211e-01 1.1149726261256672e+00 -1.2907717120103761e+00 + 8.5040139873638776e-01 1.0372810940709405e+00 -1.2764009735699249e+00 + 9.1535825897788203e-01 1.0518523650375462e+00 -1.2163089147907984e+00 + 1.0132838308035204e+00 1.0071264653115948e+00 -1.1860691153920260e+00 + 1.1520126047168473e+00 7.4584282790900747e-01 -1.1195221397312833e+00 + id 14631 + loc 4.6963548660278320e-01 1.4667268842458725e-02 401 + blend 0.0000000000000000e+00 + interp 5.8107633196483743e-01:5.8107052120151781e-01:1.7657135138625324e-01:4.3008161045061577e-01:7.3424201964278302e-01:3.2387257923874019e-01:1.1102983736805594e+00:4.6265601412321677e-01:1.7162779066321439e+00:3.1635038932202586e-01:2.4288216500455864e+00:2.8477556939714227e-01:3.3982736284059580e+00 + CVs 20 + -2.1639356347400154e-01 2.8925179356347530e-01 1.4230114394274307e-01 + -4.6496578421655138e-01 5.8471915823442833e-01 2.9384118538664333e-01 + -7.3273808706227050e-01 8.7743220878319439e-01 4.5430910169747751e-01 + -1.0159914948964217e+00 1.1538267808760445e+00 6.2548209761843554e-01 + -1.3184086177328465e+00 1.3981937943184726e+00 8.1327651140327450e-01 + -1.6410698973008502e+00 1.5933244846486940e+00 1.0267547534488823e+00 + -1.9817003951470447e+00 1.7260829503368025e+00 1.2750064103905243e+00 + -2.3328768257022032e+00 1.7956530231592387e+00 1.5616767516028780e+00 + -2.6845097747428035e+00 1.8024120887334518e+00 1.8780686592194415e+00 + -3.0331077160068221e+00 1.7255043652504751e+00 2.2024545467764787e+00 + -3.3724111226782050e+00 1.5523559126298281e+00 2.5138288399281565e+00 + -3.6871519141100451e+00 1.3332503179648962e+00 2.8208987808916643e+00 + -3.9636639047298292e+00 1.1295442784430589e+00 3.1505154140484462e+00 + -4.1934438906765807e+00 9.3581231645009444e-01 3.5069531949410360e+00 + -4.3714465860088172e+00 7.2805445639795185e-01 3.8779753328731190e+00 + -4.4833268576738012e+00 6.0324563490079464e-01 4.2186549118273220e+00 + -4.5112856301361361e+00 7.4251282399322327e-01 4.3867346194634331e+00 + -4.4790669075051044e+00 9.7395755113345805e-01 4.3040831593163231e+00 + -4.5154567557011909e+00 1.0058971790429532e+00 4.5949234675179627e+00 + id 14632 + loc 2.5573498010635376e-01 9.1486203670501709e-01 404 + blend 0.0000000000000000e+00 + interp 4.7081024747906908e-01:3.8704739862793058e-01:7.8823032319550046e-01:4.7080553937659431e-01:1.1041694324095472e+00:3.7184931200578164e-01:2.0095369987492377e+00:4.5234843764652727e-01:2.7445413065185353e+00:3.6056947312299409e-01:3.0551610496845547e+00:3.0711104643300996e-01:3.9244873078447999e+00 + CVs 20 + 5.2300157392887563e-02 7.8446259464148210e-02 9.7815695776643889e-03 + 1.0407445401654375e-01 1.4187343957484644e-01 3.7021006275858144e-02 + 1.6303760301375111e-01 1.8174001030327191e-01 6.3579926340437146e-02 + 2.3435505720742766e-01 2.0434748910977424e-01 8.7136086961956710e-02 + 3.1588821848412579e-01 2.0826232214231169e-01 1.0640347699071863e-01 + 4.0486584950651955e-01 1.9228471193479496e-01 1.2064511222055606e-01 + 4.9854741958863658e-01 1.5585317376708524e-01 1.2998353151063696e-01 + 5.9431429713812411e-01 9.8748034403066953e-02 1.3537665717116065e-01 + 6.8971387066575307e-01 2.1169251628807562e-02 1.3862378881544662e-01 + 7.8260819741466570e-01 -7.5629127531262774e-02 1.4116307271044659e-01 + 8.7079765569694034e-01 -1.8965966965634601e-01 1.4381555987634001e-01 + 9.5137172965883710e-01 -3.1866645641185737e-01 1.4712485393387065e-01 + 1.0204015196959899e+00 -4.6008652866261351e-01 1.5182701112165209e-01 + 1.0736782254750949e+00 -6.1042417221314760e-01 1.5926761236143733e-01 + 1.1097552100288783e+00 -7.6386775070337798e-01 1.7060409847836824e-01 + 1.1364469219226108e+00 -9.1095501797854850e-01 1.8271656044000936e-01 + 1.1680675423762212e+00 -1.0420740892287161e+00 1.8630013722213154e-01 + 1.2156897591151339e+00 -1.1504353205824966e+00 1.6998280957120579e-01 + 1.2633072321090542e+00 -1.2358098457788027e+00 1.3966084650830157e-01 + id 14633 + loc 9.9575519561767578e-02 6.6510832309722900e-01 393 + blend 0.0000000000000000e+00 + interp 3.2477416321509839e-01:2.5999773632064349e-01:3.0137925631600837e-01:2.6687275146258499e-01:1.0593130406626472e+00:2.7088117240135123e-01:1.9974219720067068e+00:3.2477091547346626e-01:2.5088150282141384e+00:2.7489224497932219e-01:3.0016408714679756e+00:2.8307931209533133e-01:3.7367357842099294e+00 + CVs 20 + -3.1068013503157871e-01 3.8861460362548345e-01 -1.3073468728074236e-01 + -5.7569588300942620e-01 7.9083058620208224e-01 -2.6181891396445678e-01 + -8.0680707452489564e-01 1.2149908342278448e+00 -3.8436254602580922e-01 + -1.0248846298629208e+00 1.6633970259955519e+00 -4.9186413664488154e-01 + -1.2575020438952136e+00 2.1313436404828150e+00 -5.7959808110681665e-01 + -1.5328378177928159e+00 2.6078398968086436e+00 -6.4272250825829269e-01 + -1.8799996560286685e+00 3.0768452469812964e+00 -6.7954234183093876e-01 + -2.3272690019674700e+00 3.5101641304055136e+00 -6.9406234637885245e-01 + -2.8751551063838248e+00 3.8600604451669724e+00 -6.9430646375449268e-01 + -3.4882943945319052e+00 4.0899668519404049e+00 -6.9612881991776121e-01 + -4.1408015732561516e+00 4.1962839677443213e+00 -7.3118922061744729e-01 + -4.8205654283102701e+00 4.1787234938000779e+00 -8.3333629616701832e-01 + -5.4928206260849928e+00 4.0203634488270703e+00 -1.0055715514864094e+00 + -6.1011053553449592e+00 3.7122802687782928e+00 -1.2227467375933128e+00 + -6.5831807372843567e+00 3.2898542626404099e+00 -1.4607361126075693e+00 + -6.8871517924345484e+00 2.8406690036103308e+00 -1.6896506705220502e+00 + -7.0366362155331306e+00 2.4290262373344715e+00 -1.8846139603338854e+00 + -7.1351955643880940e+00 2.0220349220096350e+00 -2.0373753786594957e+00 + -7.2780442376890244e+00 1.5504983358415310e+00 -2.1217596999545680e+00 + id 14634 + loc 1.3979034125804901e-01 2.0119850337505341e-01 401 + blend 0.0000000000000000e+00 + interp 3.1154844529187037e-01:2.9647932665335491e-01:8.8313988889836459e-01:2.9690122553482018e-01:1.8428396674747778e+00:2.6943322462642488e-01:2.8630821839198086e+00:3.1154532980741745e-01:3.8596340723843001e+00 + CVs 20 + -2.6942182423826772e-01 2.5822182620657658e-01 2.0794527515313219e-01 + -5.2836213898696005e-01 5.3401968255974874e-01 3.7732873187360494e-01 + -7.9969122081374511e-01 8.0900486790880466e-01 5.4727727850730934e-01 + -1.0944779327858487e+00 1.0692289114182763e+00 7.3579394202485493e-01 + -1.4150184414114308e+00 1.3016239158296747e+00 9.4952106167623584e-01 + -1.7574874217107015e+00 1.4908427138965754e+00 1.1972524669224403e+00 + -2.1113340507733089e+00 1.6214640469230306e+00 1.4867185075955922e+00 + -2.4628002370727531e+00 1.6817693053034277e+00 1.8190205876531100e+00 + -2.7993868784378315e+00 1.6668159783965664e+00 2.1865291363474615e+00 + -3.1144090805187896e+00 1.5792294106101579e+00 2.5755044757573167e+00 + -3.4066528257539326e+00 1.4249373682822823e+00 2.9705488425437103e+00 + -3.6741070483942684e+00 1.2085606305702672e+00 3.3576988353449848e+00 + -3.9085037797557347e+00 9.3147189605372449e-01 3.7316013467833038e+00 + -4.0899873783311786e+00 5.9217408662432103e-01 4.1046373058750625e+00 + -4.1764334945096353e+00 1.9436952416377518e-01 4.5019690232540572e+00 + -4.1046453960026898e+00 -2.2963989718612676e-01 4.9329923325482152e+00 + -3.8220271374298833e+00 -6.1096840508241557e-01 5.3695044464727637e+00 + -3.3779459677083192e+00 -8.6648287607139363e-01 5.7266709361746475e+00 + -3.0768444519315317e+00 -9.9490369986610017e-01 5.9047090051636086e+00 + id 14635 + loc 8.0344223976135254e-01 6.3181209564208984e-01 399 + blend 0.0000000000000000e+00 + interp 3.7215254758334299e-01:2.8034718338764586e-01:5.7085133702139412e-03:2.5585296918150663e-01:1.0329797733512558e+00:3.7214882605786714e-01:1.9255154521721356e+00:2.6470380157965340e-01:2.8059459708434997e+00:2.5669737547479232e-01:3.3256582216457899e+00 + CVs 20 + -2.6943812172022175e-01 3.0014329869449452e-01 -1.9347049297125624e-01 + -5.1038661389060147e-01 5.6473853286462161e-01 -3.9782290462916015e-01 + -7.4644544792085399e-01 7.8870280539966564e-01 -6.2629661787729529e-01 + -9.8485099372246654e-01 9.6756734534630762e-01 -8.7481131627083863e-01 + -1.2219752710583431e+00 1.1003933024018548e+00 -1.1308852728693455e+00 + -1.4548228605284965e+00 1.1908967954310219e+00 -1.3858360821739528e+00 + -1.6856600170061518e+00 1.2426470614761937e+00 -1.6433737937424306e+00 + -1.9227851774328115e+00 1.2561426549832948e+00 -1.9152191875246363e+00 + -2.1741273163894732e+00 1.2418871275509664e+00 -2.2044511226771499e+00 + -2.4448249346415785e+00 1.2109372350011951e+00 -2.5105973004910473e+00 + -2.7317844715110176e+00 1.1335050687112678e+00 -2.8415627369346552e+00 + -3.0200248948068578e+00 9.6303110712684470e-01 -3.1956656447791278e+00 + -3.3171968402119965e+00 7.1229181334428515e-01 -3.5567840309496677e+00 + -3.6583978264206962e+00 4.2928729733220028e-01 -3.9081727877238754e+00 + -4.0502537867439816e+00 1.2397995847170373e-01 -4.2256177891937146e+00 + -4.4465604846234656e+00 -2.0614876221204470e-01 -4.4733951057437729e+00 + -4.8057417742307651e+00 -4.9815192102407235e-01 -4.6365404736639126e+00 + -5.1876088532334084e+00 -6.6618416158293325e-01 -4.7447649687354989e+00 + -5.7166946813940962e+00 -6.6852597111001799e-01 -4.8322648559550645e+00 + id 14636 + loc 1.8888688087463379e-01 6.9068127870559692e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0630840311746839e-01:5.0630334003343724e-01:9.5256570797974671e-04:3.7790067910060898e-01:5.8879186629523961e-01:2.9523736101014908e-01:1.1524818311851246e+00:4.4167863377613370e-01:1.9406436621704670e+00:3.8429985035061626e-01:2.4596694111610238e+00:3.6163965433819945e-01:2.9972292808356014e+00:3.7855612357938767e-01:3.4447815342951058e+00 + CVs 20 + 4.5571108885321232e-02 4.1298636360800106e-01 2.2535364539251496e-01 + 1.3951854279580464e-01 7.4227011419492683e-01 3.6432726130135384e-01 + 2.6162847925763355e-01 1.0328009783009500e+00 4.6607564067017349e-01 + 4.0178857075170554e-01 1.3014996940548369e+00 5.5113562577821518e-01 + 5.5640996155082834e-01 1.5455079182978426e+00 6.1848739945910514e-01 + 7.2012342262507301e-01 1.7627065746976402e+00 6.6829495719885879e-01 + 8.8957647201223233e-01 1.9529849194622855e+00 6.9575717198961740e-01 + 1.0648935775728861e+00 2.1169203884516286e+00 6.9157492852848124e-01 + 1.2447359092969514e+00 2.2506846338321127e+00 6.4715533859280661e-01 + 1.4226197717816420e+00 2.3430322922384930e+00 5.5911729242223285e-01 + 1.5892688361537770e+00 2.3818306582552249e+00 4.3342829076699474e-01 + 1.7366529599158453e+00 2.3620774674591924e+00 2.8257399570726749e-01 + 1.8593059865529940e+00 2.2879152378470335e+00 1.1981334830584434e-01 + 1.9551137085089518e+00 2.1722986078340938e+00 -4.4386687094868371e-02 + 2.0278615217171172e+00 2.0433843268927596e+00 -2.0579015329388628e-01 + 2.0867981511035794e+00 1.9492162359318321e+00 -3.7384888691208001e-01 + 2.1391700142644434e+00 1.8724701573427938e+00 -5.6420652569158614e-01 + 2.1733208266971364e+00 1.6726862853059479e+00 -6.7786801795872254e-01 + 2.1727124179684933e+00 1.2965593930082320e+00 -5.6332638871895391e-01 + id 14637 + loc 4.0788418054580688e-01 9.6421414613723755e-01 393 + blend 0.0000000000000000e+00 + interp 4.8662337617726314e-01:2.7193633559156605e-01:2.0951321599683492e-01:4.8661850994350142e-01:9.2966246933216390e-01:3.0060880705267740e-01:1.8359104264037946e+00:4.2905115179671488e-01:2.0779010014745687e+00:2.8155849363397412e-01:2.9245057391975662e+00:2.8712506044326758e-01:3.5557025503958308e+00 + CVs 20 + -1.7025656902330200e-01 3.4055334914741420e-01 -2.8648318650465182e-01 + -3.4194602537200269e-01 6.8678959985390842e-01 -5.6511231295832853e-01 + -5.0520083646272518e-01 1.0474424681020145e+00 -8.4460777494711903e-01 + -6.8144789312665133e-01 1.4308685609378402e+00 -1.1175901349973048e+00 + -9.0048142375257445e-01 1.8307694625625786e+00 -1.3636825400042496e+00 + -1.1828506234258160e+00 2.2282188853129292e+00 -1.5645208277933105e+00 + -1.5379092140738218e+00 2.5946283562307233e+00 -1.7102093319468936e+00 + -1.9616907409977882e+00 2.8946208448819331e+00 -1.8022658374411000e+00 + -2.4266923333355335e+00 3.1060966380848187e+00 -1.8524444923733139e+00 + -2.8930214440356012e+00 3.2360038671128080e+00 -1.9232527382543272e+00 + -3.3616972867859229e+00 3.2843881701613835e+00 -2.0524983797840193e+00 + -3.8679916611500436e+00 3.2585047460753636e+00 -2.1678658631053827e+00 + -4.4244289623686939e+00 3.1486709905196593e+00 -2.2597744020266433e+00 + -4.9919661445655734e+00 2.9355655753306822e+00 -2.3592611604215645e+00 + -5.5258533420031215e+00 2.6300753259113590e+00 -2.4733987460063762e+00 + -5.9705996022461072e+00 2.3011141596802194e+00 -2.5509866429483838e+00 + -6.2804404250783286e+00 2.0560313697211789e+00 -2.5299632534030110e+00 + -6.4770825809181840e+00 1.8903450606413172e+00 -2.4596811505213241e+00 + -6.7577472102088869e+00 1.5405426607744628e+00 -2.4592263230740308e+00 + id 14638 + loc 1.5520061366260052e-02 6.2341731786727905e-01 405 + blend 0.0000000000000000e+00 + interp 3.8264286411637477e-01:3.2619242908809032e-01:2.6277480012441012e-03:1.1328431853100697e-01:4.9905129363357592e-01:3.5335054005937083e-01:1.4183551231460227e+00:3.8263903768773361e-01:2.0844223082689526e+00:2.9871840555281376e-01:2.8452128176371150e+00:3.7853806625944736e-01:3.1295685408722651e+00 + CVs 20 + 1.2895009901549179e-01 2.1893542466306543e-01 1.0060458060460324e-01 + 1.5213881037960936e-01 3.7568709133214184e-01 1.6162636828719873e-01 + 1.4830414704753153e-01 5.0533809064324453e-01 2.1936299611969140e-01 + 1.4933223924474004e-01 6.2972153800115416e-01 2.9267626109460970e-01 + 1.5254058329608849e-01 7.4862112129300207e-01 3.8365833642280395e-01 + 1.5623998608770362e-01 8.6084557349154656e-01 4.9360914050542892e-01 + 1.5943302427119838e-01 9.6453179959106761e-01 6.2235419691315075e-01 + 1.6163565044814915e-01 1.0579315825429447e+00 7.6830885042318031e-01 + 1.6279073703680158e-01 1.1396765068408947e+00 9.2921840987515636e-01 + 1.6299016464603056e-01 1.2088049046100449e+00 1.1029495413608332e+00 + 1.6298546563538796e-01 1.2649251943074049e+00 1.2889500633436861e+00 + 1.6419179939131878e-01 1.3069216807627413e+00 1.4875134624803970e+00 + 1.6538076456976747e-01 1.3289649041036358e+00 1.6923850967512473e+00 + 1.6029259358792736e-01 1.3201749872986386e+00 1.8862838577579317e+00 + 1.4349008122238516e-01 1.2745099111351370e+00 2.0567468223762750e+00 + 1.1755197827641189e-01 1.2000983547435728e+00 2.2134760185508537e+00 + 9.0180955200800661e-02 1.1130867842715080e+00 2.3745504023438255e+00 + 7.5835906672761022e-02 1.0272886378445292e+00 2.5475157444469478e+00 + 1.4917133937239913e-01 1.0014602223532876e+00 2.7524876203442856e+00 + id 14639 + loc 1.4590835571289063e-01 8.6980156600475311e-02 404 + blend 0.0000000000000000e+00 + interp 5.0991181175189360e-01:3.5343148118726486e-01:6.2084921118966574e-01:4.4068472005544107e-01:1.1779927598564253e+00:4.1515267817670393e-01:1.6872064910532982e+00:3.7849803480051131e-01:2.1169782432406730e+00:3.2382536512547050e-01:2.9355254682289935e+00:3.9232528466612321e-01:3.2933498155938694e+00:5.0990671263377607e-01:3.9192226071405090e+00 + CVs 20 + -1.1026295632082400e-01 1.3436997845930998e-01 -2.1292414881045330e-02 + -2.3480995171736868e-01 2.7390199732795584e-01 -4.5602825353311172e-02 + -3.5948253197719560e-01 4.0620043196991235e-01 -6.5141848663462398e-02 + -4.7914403807207112e-01 5.2549867435279485e-01 -7.6311004897026774e-02 + -5.9395055328572810e-01 6.2981738371829676e-01 -7.9218739328237614e-02 + -7.0111897286597613e-01 7.1544486027064225e-01 -7.5080006401563593e-02 + -7.9818164028304839e-01 7.7943006934371739e-01 -6.5744318466249452e-02 + -8.8650761175722126e-01 8.2178255071068729e-01 -5.2847815243552365e-02 + -9.6861451546730093e-01 8.4491250703819731e-01 -3.8330067905208820e-02 + -1.0460618986610464e+00 8.5317243625946393e-01 -2.3472928424334683e-02 + -1.1179803627379137e+00 8.5057454839522506e-01 -1.2729467543180439e-02 + -1.1835714957432482e+00 8.4066423717537186e-01 -8.1793396145478092e-03 + -1.2502358793774642e+00 8.2396488264571177e-01 -9.4984096335903878e-03 + -1.3395905628136393e+00 7.9259631400772723e-01 -8.5886336415392783e-03 + -1.4774747542645015e+00 7.3567649614337860e-01 1.3854989580590782e-02 + -1.6503198880810768e+00 6.6720964068435451e-01 6.4458541756448662e-02 + -1.8177263710860718e+00 6.2189033240784541e-01 1.1187699073590623e-01 + -1.9571940752835337e+00 5.9587279906725121e-01 1.5742973864063481e-01 + -1.9718251375270417e+00 4.1870946402493175e-01 3.8504887421332440e-01 + id 14640 + loc 1.6081560403108597e-02 3.8074511103332043e-03 401 + blend 0.0000000000000000e+00 + interp 4.2749576765018982e-01:3.2430317355748278e-01:1.0916913435528031e-01:3.5732788914792168e-01:1.0859119063646134e+00:2.8083941867359735e-01:2.1436709440952839e+00:2.8817206084427960e-01:2.9770173436592220e+00:4.2749149269251335e-01:3.2758856544639317e+00:3.9404362936376880e-01:3.9048331880330029e+00 + CVs 20 + -2.5366544480898795e-01 4.0749397749374972e-01 5.3862075755115188e-02 + -5.2294033363157111e-01 8.3202513078904494e-01 1.4666874528210455e-01 + -8.2317245668654593e-01 1.2649767296990664e+00 2.5331515278127453e-01 + -1.1615883337778756e+00 1.6982816487623260e+00 3.7080628127151211e-01 + -1.5347171176015562e+00 2.1253184657382476e+00 5.2054486375569753e-01 + -1.9270593115660526e+00 2.5343631820622350e+00 7.4825206961980628e-01 + -2.3150134125271573e+00 2.8865435260998025e+00 1.1141803107111699e+00 + -2.6628264610306376e+00 3.0806840821857553e+00 1.6699109664177878e+00 + -2.8927300239224634e+00 2.9671175102346270e+00 2.3661418390210427e+00 + -2.9491942852191064e+00 2.5409696457279036e+00 2.9899922073508209e+00 + -2.8977353962040397e+00 1.9717515396114329e+00 3.4152614776088077e+00 + -2.8484467771100070e+00 1.3992994359151121e+00 3.6832683619045916e+00 + -2.8749137974748700e+00 8.9651441289606748e-01 3.8927027104261351e+00 + -2.9826904183296397e+00 5.1886941699850420e-01 4.1390361132813833e+00 + -3.1375883170201497e+00 3.5919351138022138e-01 4.4884714716547931e+00 + -3.2901817738011112e+00 5.4588454150490828e-01 4.8948710750254083e+00 + -3.3359988888728895e+00 1.1594642346471926e+00 5.1192689269470835e+00 + -3.2178576095724800e+00 1.8435635053352777e+00 5.0048909767377889e+00 + -3.3230998494714781e+00 2.1153345280199076e+00 5.3462930818770316e+00 + id 14641 + loc 4.7472757101058960e-01 7.4699503183364868e-01 393 + blend 0.0000000000000000e+00 + interp 4.6914583120005127e-01:2.7083474590090778e-01:3.3334147416438775e-01:3.0930921998535632e-01:9.9986309038404542e-01:2.7121181431651187e-01:1.7275204043727714e+00:4.6914113974173927e-01:2.1791876498295251e+00:2.8432072032862910e-01:2.9757447658884355e+00:3.9501304192368142e-01:3.7288604261500944e+00 + CVs 20 + -2.7664808962168930e-01 3.4903152465501713e-01 -2.6047621773100504e-01 + -5.4055370129705560e-01 6.8779528720386685e-01 -4.9165975693838826e-01 + -7.8989075967612499e-01 1.0262069368371711e+00 -7.0888458016295752e-01 + -1.0294787780800470e+00 1.3651333625321209e+00 -9.1738692072749184e-01 + -1.2664221338273067e+00 1.7021608685180007e+00 -1.1159879384018021e+00 + -1.5080228572368179e+00 2.0392789136713141e+00 -1.3049656746555360e+00 + -1.7658166743238617e+00 2.3819778900660178e+00 -1.4874648881422901e+00 + -2.0649050336921846e+00 2.7306161105117974e+00 -1.6710118572349719e+00 + -2.4385274221635043e+00 3.0646255945022740e+00 -1.8646591128734613e+00 + -2.8967821394403206e+00 3.3517193502989828e+00 -2.0793676757769810e+00 + -3.4281600816449846e+00 3.5774525937563548e+00 -2.3418143538423077e+00 + -4.0314319663162985e+00 3.7241420440573023e+00 -2.6866719403703412e+00 + -4.6978133710307164e+00 3.7398241474052658e+00 -3.1160925410453508e+00 + -5.3684394412884195e+00 3.5799765184387438e+00 -3.5873810944500315e+00 + -5.9683501749432040e+00 3.2555501738768968e+00 -4.0534756386995889e+00 + -6.4797338544259597e+00 2.8033326363854547e+00 -4.4661179952220555e+00 + -6.9390489768668857e+00 2.2666794432995947e+00 -4.7507839866782824e+00 + -7.3512554439042841e+00 1.7207675728119551e+00 -4.8593534784401786e+00 + -7.6049303520056108e+00 1.2959016636731930e+00 -4.8830418088493106e+00 + id 14642 + loc 9.7018235921859741e-01 8.9154559373855591e-01 404 + blend 0.0000000000000000e+00 + interp 5.3880283601883827e-01:3.5510010416963833e-01:7.6912663603692855e-01:3.7684823028168513e-01:1.3838732607965432e+00:5.3879744799047813e-01:1.9998236686761468e+00:4.1096626053024166e-01:2.3895459215133603e+00:5.2843733468467258e-01:3.0013816427067836e+00:2.0917328297958535e-01:3.8300240215720058e+00 + CVs 20 + 4.3608984633564864e-02 1.2651618518615887e-01 -7.3247646709933528e-02 + 7.6367987311207960e-02 2.4721623697087419e-01 -1.0695091634147941e-01 + 1.1327408396048047e-01 3.6276735670939697e-01 -1.2288274275332264e-01 + 1.6726481967874701e-01 4.8088112549955314e-01 -1.3544437424315911e-01 + 2.4307699130902213e-01 5.9861116785564661e-01 -1.4459801934241368e-01 + 3.4423153066842582e-01 7.1170361550498118e-01 -1.4994741748684304e-01 + 4.7209674651744993e-01 8.1537519436425643e-01 -1.5080019697604091e-01 + 6.2452135928330399e-01 9.0637736752838405e-01 -1.4530169773163076e-01 + 7.9679739582706355e-01 9.8310855471678726e-01 -1.3144070946955949e-01 + 9.8577646919001638e-01 1.0431414807439496e+00 -1.1220330528795669e-01 + 1.1928923272594116e+00 1.0820724181799022e+00 -1.0028702930251004e-01 + 1.4198528493596414e+00 1.0962174928276953e+00 -1.1293912994229260e-01 + 1.6601635962170753e+00 1.0877050414984097e+00 -1.5688154855134456e-01 + 1.9025354222538140e+00 1.0623729778254736e+00 -2.2627952553566461e-01 + 2.1383751178278296e+00 1.0221940653846575e+00 -3.1441433684165249e-01 + 2.3622702039362014e+00 9.6428451651430114e-01 -4.2080713112292023e-01 + 2.5693810763921037e+00 8.8427699825353667e-01 -5.4750698202095438e-01 + 2.7544806407030227e+00 7.7955772380697308e-01 -6.8821298174736634e-01 + 2.9226112402614843e+00 7.3028069170466203e-01 -8.2950252659727985e-01 + id 14643 + loc 1.4175695832818747e-04 1.1137957125902176e-01 405 + blend 0.0000000000000000e+00 + interp 4.2917793367598889e-01:4.2917364189665214e-01:3.3564128527864068e-01:3.3360904931346508e-01:9.8529255499295354e-01:3.5636377205383407e-01:1.9766712057380591e+00:2.5370836157775611e-01:2.5751631986260515e+00:2.8566710569616277e-01:3.1659305139193856e+00:3.2002338770109073e-01:3.9835068256987358e+00 + CVs 20 + -6.3018650206525355e-03 7.3457048989738510e-02 1.9020922643896356e-02 + -4.6346784036869780e-02 9.9648028823476148e-02 5.2855148191314483e-02 + -9.5843415505492385e-02 1.5160544856141162e-01 1.1790756931893231e-01 + -1.3675348583074823e-01 2.1097055517037328e-01 1.8400593585146663e-01 + -1.6898999977182880e-01 2.7299834027710901e-01 2.4972745083386053e-01 + -1.9229125619499687e-01 3.3476225902567758e-01 3.1561312898179272e-01 + -2.0535827889875485e-01 3.9338652360248866e-01 3.8295989406627923e-01 + -2.0636288905895736e-01 4.4584029444412943e-01 4.5286600845981012e-01 + -1.9319111163519431e-01 4.8891983029369124e-01 5.2601162290647252e-01 + -1.6289761835492780e-01 5.1909488296953255e-01 6.0320487285897284e-01 + -1.1187084784062913e-01 5.3291158056737908e-01 6.8442392791032836e-01 + -3.6718898711073651e-02 5.2722917861002461e-01 7.6701923917966819e-01 + 6.4522777844505275e-02 4.9965367111862441e-01 8.4466772862788875e-01 + 1.9044857508239668e-01 4.4990195668087196e-01 9.0713546995908823e-01 + 3.3430255289078398e-01 3.8080149661134705e-01 9.4122318413917072e-01 + 4.8622941299068495e-01 2.9792163733998045e-01 9.3591512584756065e-01 + 6.3871812330522326e-01 2.0864912191863771e-01 8.8852522876532292e-01 + 7.8587375084284294e-01 1.2129481741786452e-01 8.0291475198895357e-01 + 9.0532942967207886e-01 2.9333335716093201e-02 6.4196536759931344e-01 + id 14644 + loc 6.9241052865982056e-01 7.6793432235717773e-01 399 + blend 0.0000000000000000e+00 + interp 3.6226067401675000e-01:2.6585413511378769e-01:3.6699503791322430e-01:3.6225705141000986e-01:1.0805829128726603e+00:2.6906391452510275e-01:2.0359729951826200e+00:3.1664701668214906e-01:2.8654446075899713e+00:2.6111760377811399e-01:3.3481530777901529e+00 + CVs 20 + -1.9281125769816959e-01 3.1540528844451965e-01 -2.1668092147530957e-01 + -3.5478972912240547e-01 6.0610621795156783e-01 -4.4871539978225777e-01 + -5.0562155158847244e-01 8.6337700365226433e-01 -7.0587926431440629e-01 + -6.5582721757148832e-01 1.0769786737831297e+00 -9.8796544615419379e-01 + -8.0777014145454107e-01 1.2363246565924895e+00 -1.2874703385302193e+00 + -9.5970373659252040e-01 1.3329120386635247e+00 -1.5915195705298533e+00 + -1.1105420798854437e+00 1.3635388743740371e+00 -1.8910826985214220e+00 + -1.2654325278436946e+00 1.3277772040854559e+00 -2.1866009031002727e+00 + -1.4277542554550642e+00 1.2338313672988128e+00 -2.4719661417469707e+00 + -1.5913139030335506e+00 1.1037146698809535e+00 -2.7263813924075380e+00 + -1.7537342442732169e+00 9.3827013669355175e-01 -2.9399968575467010e+00 + -1.9307117689447462e+00 6.8274752350943768e-01 -3.1346512690045190e+00 + -2.1545394765009185e+00 2.9173515538244232e-01 -3.3213249054539244e+00 + -2.4537874334873533e+00 -1.8029477295628493e-01 -3.4723984872526659e+00 + -2.8169531231510669e+00 -6.5674673694353847e-01 -3.5531191805091695e+00 + -3.2607612163732291e+00 -1.1629542757487101e+00 -3.5718538799145034e+00 + -3.9415880107147019e+00 -1.7338725850098196e+00 -3.5805877035192624e+00 + -4.9754553353975650e+00 -2.1016700714839756e+00 -3.6156053633295309e+00 + -5.6162394997234850e+00 -2.2264742116454395e+00 -3.5776208292524001e+00 + id 14645 + loc 9.2802500724792480e-01 5.9255030006170273e-02 1079 + blend 0.0000000000000000e+00 + interp 4.2984505896780661e-01:4.2984076051721698e-01:1.9495568180409095e-02:4.2566431135897653e-01:5.4811574241407257e-01:3.1059463688922850e-01:1.0248283642932641e+00:3.0944983009156657e-01:1.9988954387532090e+00:3.4630588200226375e-01:2.9905143554464804e+00:3.5256901797037454e-01:3.3909893170139433e+00 + CVs 20 + 5.1329920706123730e-02 4.0117922507903508e-01 -2.7691167731275182e-02 + 8.2044632590113853e-02 7.8034470660030786e-01 -1.3271180900942564e-02 + 9.7610678374084769e-02 1.1486086052316065e+00 2.7045399297714934e-02 + 9.4114763986053229e-02 1.5115746085078832e+00 9.5467826429094682e-02 + 5.9409615353184564e-02 1.8630571780891436e+00 2.0707224372948496e-01 + -2.0817090726026444e-02 2.1903024619614975e+00 3.7551292869562913e-01 + -1.5937027694196226e-01 2.4698911577904772e+00 6.0714684086622295e-01 + -3.5993598817866168e-01 2.6723395546802600e+00 8.9322681641840851e-01 + -6.1271595115716837e-01 2.7744811891156482e+00 1.2121176872987531e+00 + -8.9357880276503188e-01 2.7680584212568653e+00 1.5402179873515074e+00 + -1.1723358500429442e+00 2.6589339422035776e+00 1.8652855434324007e+00 + -1.4213861426712882e+00 2.4554712534136898e+00 2.1868409482176006e+00 + -1.6094817568730566e+00 2.1661738615754706e+00 2.5055080856496184e+00 + -1.6931812311879302e+00 1.8127299212464918e+00 2.8163884213702244e+00 + -1.6235048253959667e+00 1.4471576557068602e+00 3.1022671453773238e+00 + -1.3943956727793931e+00 1.1779375577625140e+00 3.3343504361633101e+00 + -1.1053106359175284e+00 1.1128278257486810e+00 3.5020599626894011e+00 + -8.7252190923776984e-01 1.2355884427555170e+00 3.6192071995788639e+00 + -4.8140748935564348e-01 1.1250815952429023e+00 3.8442434449091030e+00 + id 14646 + loc 6.0187304019927979e-01 6.1172157526016235e-01 393 + blend 0.0000000000000000e+00 + interp 4.1236079759948296e-01:4.1235667399150699e-01:4.5755370417798202e-03:2.7696593762242239e-01:8.2696199800009151e-01:2.6385714417591843e-01:1.6617014839061341e+00:3.9399627912869739e-01:2.2728151786223454e+00:2.6554897368490887e-01:3.1112036625875845e+00 + CVs 20 + -3.4055630701101502e-01 2.8293685816259145e-01 -1.4478622456758602e-01 + -6.3942745138865364e-01 5.5680023633259013e-01 -2.5316747109555776e-01 + -9.1714963549630457e-01 8.4643416835319907e-01 -3.5043923484636574e-01 + -1.1865720085359166e+00 1.1559339399734347e+00 -4.5277168892449032e-01 + -1.4644940302575191e+00 1.4718087819956722e+00 -5.6921105249815196e-01 + -1.7644986185378979e+00 1.7759890198372821e+00 -7.0118245588826866e-01 + -2.0881884354596805e+00 2.0553904295076926e+00 -8.3766541638848735e-01 + -2.4405704309730201e+00 2.2960860976983173e+00 -9.6260274731986806e-01 + -2.8539505057290597e+00 2.4689496019628292e+00 -1.0653036436266878e+00 + -3.3662398402561573e+00 2.5365996734467871e+00 -1.1493678159802205e+00 + -3.9597948312550328e+00 2.4905259154433428e+00 -1.2361293830155309e+00 + -4.5666775334401839e+00 2.3552902628231096e+00 -1.3394458315618967e+00 + -5.1405080841342121e+00 2.1487685085678940e+00 -1.4494955560448728e+00 + -5.6851385834681167e+00 1.8618530972829987e+00 -1.5627862514414370e+00 + -6.1860686926052617e+00 1.5012718327347272e+00 -1.6833059882245975e+00 + -6.5762966103474989e+00 1.1552346390071555e+00 -1.7780603949793670e+00 + -6.8224291883503581e+00 9.3157302441667000e-01 -1.8026514933914601e+00 + -6.9993487979114697e+00 7.8759796591939835e-01 -1.7775056701141276e+00 + -7.3724516680977761e+00 4.2576051957137784e-01 -1.7521250439001455e+00 + id 14647 + loc 2.0812426507472992e-01 3.0107793211936951e-01 401 + blend 0.0000000000000000e+00 + interp 3.4711013727818818e-01:2.6823885312216639e-01:9.2643058696151537e-01:3.3934551237895055e-01:1.8656376723678645e+00:2.7807010467420962e-01:2.6202289784836790e+00:2.9883140560537103e-01:3.2593732554264285e+00:3.4710666617681540e-01:3.9974784255359852e+00 + CVs 20 + -2.7853433354762935e-01 9.7481895756234144e-02 1.9554401950810521e-01 + -5.3084642385658687e-01 2.1386619676463386e-01 3.4111205741120926e-01 + -7.6673753071481332e-01 3.4530994166730677e-01 4.5290741971694398e-01 + -1.0010266661313698e+00 4.9672444411641459e-01 5.4814660978288821e-01 + -1.2454182363572861e+00 6.7417657727205316e-01 6.3583688096307012e-01 + -1.5168943453074319e+00 8.7815587959282793e-01 7.3509063443877209e-01 + -1.8281997687801379e+00 1.0982610224175506e+00 8.7880828855247806e-01 + -2.1795739230394369e+00 1.3116746223866931e+00 1.1038406473436231e+00 + -2.5583628814906705e+00 1.4904103147828276e+00 1.4328457130463044e+00 + -2.9424113786312627e+00 1.6063019650906076e+00 1.8688146098112326e+00 + -3.3095036935510840e+00 1.6350921596768262e+00 2.3945277895347026e+00 + -3.6447226428957253e+00 1.5566105071922318e+00 2.9787068647428918e+00 + -3.9286334740684437e+00 1.3543795654010293e+00 3.5854865161068536e+00 + -4.1225011708568573e+00 1.0340861150283973e+00 4.1826279356535290e+00 + -4.1637061655127683e+00 6.4479262831794115e-01 4.7504894844596119e+00 + -3.9923143396369567e+00 2.7501819421767959e-01 5.2670995481499912e+00 + -3.5987718112704421e+00 2.2676179915375960e-02 5.6873204737987084e+00 + -3.0759764445206090e+00 -7.3279141577684004e-02 5.9585130717866290e+00 + -2.7414837352571690e+00 -2.2017721764649223e-01 6.1630704160594192e+00 + id 14648 + loc 3.4367588162422180e-01 9.5146781206130981e-01 399 + blend 0.0000000000000000e+00 + interp 4.7849324300295865e-01:2.6030640107396558e-01:3.4654529631187581e-01:4.0989486710044654e-01:9.9373109372075574e-01:3.7630162265027856e-01:1.3773320742417832e+00:4.6942316681710416e-01:1.9460253945676311e+00:4.7848845807052864e-01:2.1008993054222991e+00:4.6265601412321677e-01:2.7154864282359616e+00:2.9005516735303788e-01:3.0411179141042428e+00:3.3146603646226397e-01:3.8733403600374179e+00 + CVs 20 + -1.5049637815709058e-01 3.2498399361075003e-01 -2.2371168288984505e-01 + -3.0943884463612092e-01 6.2955424113533553e-01 -5.0030065878256114e-01 + -4.8565212094324500e-01 8.9588748738163104e-01 -8.0954053018443750e-01 + -6.8028887445004160e-01 1.1005287252213714e+00 -1.1378692172320322e+00 + -8.9014303150092389e-01 1.2211685889782140e+00 -1.4728367567178764e+00 + -1.1059936970640558e+00 1.2402881271100863e+00 -1.7924443582428593e+00 + -1.3171408788545607e+00 1.1580426584887660e+00 -2.0769100988420144e+00 + -1.5239448021539590e+00 9.9362646781523067e-01 -2.3218994928273142e+00 + -1.7068906286839360e+00 7.6627411537561585e-01 -2.5147646607416099e+00 + -1.8034263793656709e+00 5.0312965475213611e-01 -2.6252310323732582e+00 + -1.8193247805948167e+00 2.3433878879019887e-01 -2.6673256504068998e+00 + -1.8894695624085538e+00 -8.5496506727282207e-02 -2.7264067550890694e+00 + -2.1035522325155154e+00 -5.0165428404235346e-01 -2.8383153722216283e+00 + -2.4158291692412321e+00 -9.4597016235982812e-01 -2.9377858434311306e+00 + -2.7591935146562969e+00 -1.3659434728943269e+00 -2.9767268787959327e+00 + -3.2758891703978152e+00 -1.7971918828125515e+00 -3.0155079530136373e+00 + -4.3011748140274451e+00 -2.1222893968198160e+00 -3.1335532233478074e+00 + -5.5759174408808123e+00 -1.9251718771888278e+00 -3.2568191954746872e+00 + -6.0433764320560108e+00 -1.9084603982461688e+00 -3.2419480391283986e+00 + id 14649 + loc 2.9315704107284546e-01 3.9971369504928589e-01 404 + blend 0.0000000000000000e+00 + interp 4.6783022980723377e-01:3.7386116691789500e-01:1.6225998295684418e-01:3.9990169279772270e-01:1.0023711861994331e+00:3.7880283382446639e-01:1.7987092935720437e+00:4.6782555150493571e-01:2.4361943172248841e+00:3.6230989454106144e-01:3.0832225449145767e+00:4.2998760192758428e-01:3.7907012001871245e+00 + CVs 20 + -5.2629072289223755e-02 1.3382679861754379e-01 -1.5289342806110473e-01 + -1.2946479343591255e-01 2.5934096611391233e-01 -2.9323515480437595e-01 + -2.2661310121705802e-01 3.8288747606235851e-01 -4.3997118460981399e-01 + -3.4835188728765731e-01 5.1153914428829028e-01 -6.0348110683447220e-01 + -4.9867837390109909e-01 6.4485235362803850e-01 -7.8084731567406229e-01 + -6.8254921344264874e-01 7.8007986290115472e-01 -9.6435217746999491e-01 + -9.0423679330100915e-01 9.1169296480200279e-01 -1.1408733813871084e+00 + -1.1632172897553168e+00 1.0314741430812711e+00 -1.2951362959914443e+00 + -1.4532261093614389e+00 1.1292599615829455e+00 -1.4128089435701272e+00 + -1.7644041019347254e+00 1.1933891694948997e+00 -1.4810560048225168e+00 + -2.0804548096085851e+00 1.2069010428017690e+00 -1.4941460351900442e+00 + -2.3820165247180065e+00 1.1610072374299811e+00 -1.4516254302793870e+00 + -2.6512436074174381e+00 1.0601358450843563e+00 -1.3663836336120088e+00 + -2.8892222818135163e+00 9.3118899619088780e-01 -1.2471278612161041e+00 + -3.1196431521536514e+00 8.1339059049515794e-01 -1.0749918532753642e+00 + -3.3437172427588964e+00 7.2034083006994920e-01 -8.2223784669937428e-01 + -3.5140266576937966e+00 6.2537206713233950e-01 -5.1674778792374088e-01 + -3.5965578427423264e+00 4.9790733817499944e-01 -2.4689525814115731e-01 + -3.7036230136764519e+00 4.3111237288042625e-01 -1.4619742573310968e-01 + id 14650 + loc 4.0745460987091064e-01 6.9116842746734619e-01 405 + blend 0.0000000000000000e+00 + interp 4.5941542502054944e-01:4.0248901120694547e-01:1.4407420678912086e-01:3.8253227711824395e-01:9.4511154806858078e-01:4.5941083086629925e-01:1.3603335990857759e+00:3.5505611393569952e-01:2.0406315901823393e+00:4.5516433105655474e-01:2.7758709023064325e+00:3.7514685222057359e-01:3.3928912641906055e+00 + CVs 20 + 6.4353784185889121e-02 2.0087735972906912e-01 5.5151260926942315e-02 + 4.2147089664177600e-02 2.9146879715963747e-01 9.5936142130576177e-02 + -3.1285313710218532e-02 3.5867338512749047e-01 1.2712562249053455e-01 + -1.0169509514303991e-01 4.1062540924659846e-01 1.4447043652673225e-01 + -1.7002954733641112e-01 4.4924274976890871e-01 1.4098214676926529e-01 + -2.3847901025120521e-01 4.8652632623451675e-01 1.1554237931008665e-01 + -3.1101432837662291e-01 5.3809161302042285e-01 8.3185341552861045e-02 + -3.9211581311501509e-01 6.0841741629715351e-01 7.1511848951137755e-02 + -4.8317728076775673e-01 6.8788774637592731e-01 1.0213131868885732e-01 + -5.8210469301374546e-01 7.6462718155964682e-01 1.8216908421323541e-01 + -6.8481845863403934e-01 8.3310731646340441e-01 3.0789804222439698e-01 + -7.8644606582508403e-01 8.9418781591646013e-01 4.6994110130060690e-01 + -8.8455376751625048e-01 9.4732280447785122e-01 6.6177200390827540e-01 + -9.8077358907224332e-01 9.8175331380949782e-01 8.8484772427713076e-01 + -1.0766028947514275e+00 9.8813075826038599e-01 1.1406708882421013e+00 + -1.1681049267332848e+00 9.7823895123604410e-01 1.4242997158532975e+00 + -1.2477445800012950e+00 9.7862999757224056e-01 1.7272983419595898e+00 + -1.3096345226578059e+00 1.0097457786015003e+00 2.0328711205148049e+00 + -1.3345466208678110e+00 1.1606315251014097e+00 2.2229546210078106e+00 + id 14651 + loc 4.6355086565017700e-01 3.7509679794311523e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4539896288212477e-01:3.2670839684985253e-01:1.4207366245733488e-02:4.4539450889249599e-01:9.4287589937175520e-01:4.3118211100547593e-01:1.1661439955329735e+00:3.7170138603606545e-01:1.7917404266067138e+00:3.5206490177914829e-01:2.7939696632947175e+00:3.9843212954911922e-01:3.3616327204169716e+00 + CVs 20 + 1.4142111075321212e-01 4.6414576977321026e-01 -1.0278602052470331e-03 + 1.9723153583758052e-01 8.9198473074962659e-01 -7.1282830393897295e-02 + 1.9553653645623598e-01 1.3080765729928290e+00 -1.7035487387449000e-01 + 1.3708039852100562e-01 1.7092408400103767e+00 -2.9140882697207843e-01 + 7.6035867133894541e-03 2.0709027368558814e+00 -4.3843662560033275e-01 + -2.0992605890429050e-01 2.3514139349930812e+00 -6.0842810603505948e-01 + -5.1079876647631728e-01 2.5009346260703316e+00 -7.8546399880346951e-01 + -8.5457637378259610e-01 2.4949983564508234e+00 -9.4436782876600556e-01 + -1.1887380097037286e+00 2.3452212290303507e+00 -1.0663365342232018e+00 + -1.4738667610933034e+00 2.0864377829191643e+00 -1.1474690828683347e+00 + -1.6924879367235615e+00 1.7572746522035452e+00 -1.1949307718837316e+00 + -1.8407537591825245e+00 1.3879062861757161e+00 -1.2200333450011687e+00 + -1.9177778668809558e+00 1.0005473337034698e+00 -1.2353893657850041e+00 + -1.9164617042425829e+00 6.1352940348865692e-01 -1.2530297473120635e+00 + -1.7966856618736493e+00 2.4665178017269607e-01 -1.2731832295319490e+00 + -1.4405878530488041e+00 -2.8174347572407443e-02 -1.2745735392677928e+00 + -8.2300425401457966e-01 -6.1093699478147467e-03 -1.2488512399833933e+00 + -3.1912317258079620e-01 2.2317717937995146e-01 -1.2377792214402878e+00 + -1.1417156352114477e-01 -1.9298945514341748e-02 -1.2284199076094018e+00 + id 14652 + loc 5.9910172224044800e-01 9.3676462769508362e-02 393 + blend 0.0000000000000000e+00 + interp 4.4476702098803783e-01:2.6190384711443671e-01:2.5264884145510347e-01:4.4476257331782798e-01:1.0000456683994228e+00:2.5158996974445985e-01:1.9365233269990698e+00:3.1948036909754018e-01:2.4583333568725050e+00:2.5762818853152730e-01:3.0045235216906234e+00:3.5529664948404016e-01:3.6202004073417311e+00 + CVs 20 + 4.0530660932238372e-01 3.7235645419125107e-01 1.5846263996828114e-01 + 7.8920521026551416e-01 7.3208146102810989e-01 3.4318963547121595e-01 + 1.1515573003852624e+00 1.0884141852698237e+00 5.6201949938875129e-01 + 1.4846459387566280e+00 1.4114147474943080e+00 8.2672979436487060e-01 + 1.7837051206478438e+00 1.6670661258999051e+00 1.1443423522847977e+00 + 2.0533167551342317e+00 1.8570700584417210e+00 1.5161605203361899e+00 + 2.2953990758673015e+00 1.9979389132766021e+00 1.9320700768039789e+00 + 2.5148861724498586e+00 2.0995921544908054e+00 2.3684464668796537e+00 + 2.7250663161148942e+00 2.1648229319569094e+00 2.8035213766911480e+00 + 2.9371251801782248e+00 2.1872108005355861e+00 3.2235399239291738e+00 + 3.1600764886532815e+00 2.1571304419148798e+00 3.6217843529547897e+00 + 3.4114726274948364e+00 2.0726766706827791e+00 3.9973797444887520e+00 + 3.7049845483603407e+00 1.9212110186124240e+00 4.3406597292869096e+00 + 4.0472561211965861e+00 1.6927956962288948e+00 4.6101224983606945e+00 + 4.4412229562495362e+00 1.4041163915902097e+00 4.7491587190845364e+00 + 4.8913817259424031e+00 1.1180777802004012e+00 4.7333273181323445e+00 + 5.3838117960928580e+00 9.0703680697232691e-01 4.5915779640943679e+00 + 5.8960362578134156e+00 7.2286619584464606e-01 4.3766990637571572e+00 + 6.4358230325039267e+00 3.6157370412121415e-01 4.1455630149836944e+00 + id 14653 + loc 5.6767022609710693e-01 5.7525956630706787e-01 399 + blend 0.0000000000000000e+00 + interp 4.0124094239856167e-01:2.6440554859870491e-01:8.0898033238594602e-01:3.8643209421532965e-01:1.1160864803304378e+00:2.7340842231045576e-01:1.9971072303705451e+00:2.7845547491964229e-01:3.0036439359687037e+00:4.0123692998913768e-01:3.9786259123565380e+00 + CVs 20 + -3.1475108542594554e-02 3.0908313378638119e-01 -3.5077808003383687e-01 + -9.2882754266292680e-02 5.8635716893843093e-01 -7.1104168183092464e-01 + -1.4565207363280430e-01 8.1241958984333440e-01 -1.0934261546444541e+00 + -1.9389246984100073e-01 9.9729327817495306e-01 -1.5004502302530356e+00 + -2.5347706539315129e-01 1.1522409521129333e+00 -1.9231365367539877e+00 + -3.3560607155248157e-01 1.2782398342265910e+00 -2.3474145720735908e+00 + -4.4661224800291344e-01 1.3657047341035160e+00 -2.7568264795791038e+00 + -5.8807326285724226e-01 1.3956340967888698e+00 -3.1308254893379339e+00 + -7.5080682976099300e-01 1.3440392087975275e+00 -3.4406396937498256e+00 + -9.1028031857903469e-01 1.1976074056594992e+00 -3.6498748935385028e+00 + -1.0439497586918915e+00 9.8337890512006598e-01 -3.7378610740743676e+00 + -1.1661848721978512e+00 7.6081904612289741e-01 -3.7527522130281410e+00 + -1.3170903922333119e+00 5.4895033248675840e-01 -3.7802439989609584e+00 + -1.5224290356623098e+00 3.3654429188388735e-01 -3.8789211575903004e+00 + -1.7839055484496689e+00 1.3311460643213124e-01 -4.0970341795879621e+00 + -2.0475496181061450e+00 -1.9069737762091865e-02 -4.4708473142509035e+00 + -2.1965815795810943e+00 -6.3029021550092157e-02 -5.0087917004108835e+00 + -2.1778950584933168e+00 2.4849493897119324e-02 -5.5785120351303128e+00 + -2.2899011004384358e+00 4.1665125207306919e-02 -5.9178464737597594e+00 + id 14654 + loc 3.2309267669916153e-02 2.4660063907504082e-02 404 + blend 0.0000000000000000e+00 + interp 4.4651245118516047e-01:2.3027512367684633e-01:5.3042362193798231e-01:3.9887725803703045e-01:1.1935471137518012e+00:4.4650798606064862e-01:1.7622418836639666e+00:3.1061526400640266e-01:2.0630532564536121e+00:3.6176060541297145e-01:2.9991007023307805e+00:4.1515267817670393e-01:3.6891862700898295e+00 + CVs 20 + -7.5779416965680219e-02 1.4920119500291501e-01 -6.3863812523264341e-03 + -1.8138696558462483e-01 3.1254488353279053e-01 -4.0742353685088759e-02 + -2.9770598049206465e-01 4.7485251517808558e-01 -9.0181044259132565e-02 + -4.1360047305547232e-01 6.2637306736705989e-01 -1.4734171507385355e-01 + -5.3023023407277670e-01 7.6946624741099678e-01 -2.0835354174683182e-01 + -6.5068917166083451e-01 9.0982086695851661e-01 -2.6598794940396975e-01 + -7.7892102677394948e-01 1.0540566031765604e+00 -3.0989419767367155e-01 + -9.1598836729706934e-01 1.2047114457344126e+00 -3.2926623564799884e-01 + -1.0585522786007111e+00 1.3585939313660473e+00 -3.1707298061183647e-01 + -1.2018951635116535e+00 1.5100852566538929e+00 -2.7232541788694625e-01 + -1.3435726042435212e+00 1.6550210337596138e+00 -1.9751715844435902e-01 + -1.4809344172178607e+00 1.7887924087733724e+00 -9.8738565587039195e-02 + -1.6138194300623709e+00 1.9103713655930934e+00 1.8406930050980153e-02 + -1.7431955885920885e+00 2.0204528429690991e+00 1.5044034306162768e-01 + -1.8727382302833511e+00 2.1202985474465890e+00 2.9967039478112478e-01 + -2.0050119383681175e+00 2.2137884308896951e+00 4.7760962076476543e-01 + -2.1310958491643648e+00 2.3104594970100392e+00 7.0112892152103423e-01 + -2.2314159784152925e+00 2.4124151985934614e+00 9.7751967626473235e-01 + -2.2819258850324142e+00 2.4581448076556787e+00 1.1321823801301014e+00 + id 14655 + loc 6.6416251659393311e-01 7.9143375158309937e-01 405 + blend 0.0000000000000000e+00 + interp 4.7830860993403718e-01:4.7830382684793787e-01:3.0483496144524136e-01:4.4937471363002401e-01:8.7562029509540884e-01:3.6716214570780031e-01:1.3738661002216506e+00:4.4440255144330698e-01:2.0108721739644571e+00:3.8830891811002366e-01:2.7084566682416877e+00:2.7579298379845030e-01:3.1345411297948442e+00:3.4237546814585368e-01:3.9923013652862420e+00 + CVs 20 + 2.4013520900668173e-01 3.2138866704733587e-01 -1.0794558196894172e-01 + 3.4186337822880347e-01 5.5580001728828543e-01 -2.1143712005357915e-01 + 4.1670296772398813e-01 7.3258093667471402e-01 -3.0123571293236417e-01 + 4.9661257850544005e-01 9.0764148825963242e-01 -3.7646910990432264e-01 + 5.8020821534848843e-01 1.0909807946876913e+00 -4.2362148968610946e-01 + 6.7048170643278793e-01 1.2918026322929164e+00 -4.1714710477173594e-01 + 7.7234248447738940e-01 1.5001542630207654e+00 -3.2075766017584267e-01 + 8.8462588879733417e-01 1.6684403342146719e+00 -1.2794510192497061e-01 + 9.9725487415335845e-01 1.7635563956064482e+00 1.0138793085306264e-01 + 1.1028755415391713e+00 1.8113338680900699e+00 3.1339576662539004e-01 + 1.1995166912475008e+00 1.8443327336509916e+00 5.0610705053369309e-01 + 1.2857983984921639e+00 1.8740352941278973e+00 6.9835125324338221e-01 + 1.3584005221927591e+00 1.9053842670815115e+00 8.9745486761765392e-01 + 1.4082981719714869e+00 1.9572732714141372e+00 1.0830453168738110e+00 + 1.4205925160680102e+00 2.0536142663195212e+00 1.2243772129505293e+00 + 1.3841792844913403e+00 2.1906640004262381e+00 1.3154862115703518e+00 + 1.3032733634747036e+00 2.3410673530592381e+00 1.3809183996558241e+00 + 1.1949077765056302e+00 2.4835667720938481e+00 1.4484427454531743e+00 + 1.1850432455230893e+00 2.5884785844637337e+00 1.6595390107713206e+00 + id 14656 + loc 3.0608865618705750e-01 7.2204835712909698e-02 401 + blend 0.0000000000000000e+00 + interp 4.6942786109571510e-01:2.6102130501169024e-01:5.9693654169135080e-05:4.6942316681710416e-01:9.4462322218409711e-01:2.9342151014618584e-01:1.4069493172786576e+00:4.5884897433019106e-01:2.1957449858464972e+00:2.6714691788193190e-01:2.9959804502465337e+00 + CVs 20 + -1.5862700470121197e-01 3.9400109932200877e-01 8.5334496633376000e-02 + -3.6006426642521766e-01 7.8111550115620221e-01 1.8278871199965882e-01 + -5.8233479159506640e-01 1.1475393927207267e+00 2.9362152624302168e-01 + -8.2333017663872665e-01 1.4813610370902375e+00 4.2322049406932261e-01 + -1.0866998765084817e+00 1.7700513934255471e+00 5.8138623031038361e-01 + -1.3694977668067949e+00 1.9990547086183272e+00 7.7822465298564802e-01 + -1.6588478272617400e+00 2.1548695855701703e+00 1.0139004765191499e+00 + -1.9351884129145032e+00 2.2363268083038581e+00 1.2751208158944540e+00 + -2.1882182206235252e+00 2.2550437711324132e+00 1.5503738716939219e+00 + -2.4214480536331773e+00 2.2181525766033738e+00 1.8375005468808441e+00 + -2.6341747008787650e+00 2.1246669642536711e+00 2.1216433458439186e+00 + -2.8115318699052869e+00 1.9895380733415915e+00 2.3713421285486080e+00 + -2.9508116628883925e+00 1.8408774713616696e+00 2.5830523292431580e+00 + -3.0744267764204443e+00 1.6925459391735205e+00 2.7989746511860347e+00 + -3.1906226220014950e+00 1.5482974788961592e+00 3.0528710202162324e+00 + -3.2612426534053740e+00 1.4223320761792841e+00 3.2657449293201841e+00 + -3.2441645247486282e+00 1.3144503246576043e+00 3.2329395193911163e+00 + -3.1834012345259057e+00 1.1284052392341759e+00 3.0461708924948292e+00 + -3.1834913041254498e+00 1.2912566637561960e+00 3.3558883358520166e+00 + id 14657 + loc 3.5402107238769531e-01 8.7914812564849854e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4439786730727360e-01:4.4439342332860055e-01:5.5616561769761752e-01:3.4956674268566623e-01:1.3675877730536925e+00:3.1321360842827728e-01:2.0355673591436769e+00:3.4741990645015858e-01:3.0809947079576863e+00:3.9283482126706348e-01:3.9993306055711866e+00 + CVs 20 + 1.6210925020429415e-01 4.2529071112339645e-01 8.5334476074785892e-02 + 3.3678058032803604e-01 7.9205286501131322e-01 9.4270219740929528e-02 + 5.1351114794309816e-01 1.1263466480497879e+00 5.9719828310277057e-02 + 6.8480525062639086e-01 1.4273738045139217e+00 -9.3954766149059177e-03 + 8.4301572005206749e-01 1.6807234641908375e+00 -1.1487606145302309e-01 + 9.7394856434180688e-01 1.8667559529088043e+00 -2.5476445626696220e-01 + 1.0629491081854476e+00 1.9765753124269665e+00 -4.1627010320728164e-01 + 1.1049501303109930e+00 2.0234075582586191e+00 -5.7982596686206656e-01 + 1.1049292238793553e+00 2.0306705301118733e+00 -7.3119671625436611e-01 + 1.0744643255222952e+00 2.0200194483825094e+00 -8.6820008268996995e-01 + 1.0263530899106539e+00 2.0048173013331754e+00 -9.9899310714059308e-01 + 9.7026120071190902e-01 1.9888976227846746e+00 -1.1350183910904823e+00 + 9.1273952897384336e-01 1.9686440469697124e+00 -1.2871751378176772e+00 + 8.5792621959636017e-01 1.9352507342067398e+00 -1.4635319645522706e+00 + 8.0835978504998640e-01 1.8789677241711247e+00 -1.6671798222250360e+00 + 7.6836655690432210e-01 1.7889978070924488e+00 -1.9037782696694070e+00 + 7.4512555403990777e-01 1.6194127049904552e+00 -2.1853292903608219e+00 + 7.3066027034697056e-01 1.3276499801467283e+00 -2.4320006830598944e+00 + 6.9986849288893538e-01 1.1645670988181973e+00 -2.4839891160484076e+00 + id 14658 + loc 1.7569263279438019e-01 8.0926686525344849e-01 399 + blend 0.0000000000000000e+00 + interp 2.9119258497148520e-01:2.7449288221086138e-01:8.6488934684790497e-01:2.6182763610255694e-01:1.8626911859374413e+00:2.9118967304563548e-01:2.9913414049220677e+00:2.6516132813129206e-01:3.8424905890607932e+00 + CVs 20 + -1.2336958949978818e-01 3.5034467341636971e-01 -3.6789247093879202e-01 + -2.7664347890340141e-01 6.7888315398139443e-01 -7.2543910097392661e-01 + -4.5320434951772243e-01 9.7704464819084447e-01 -1.0882581672304843e+00 + -6.5799898368378662e-01 1.2466261541078871e+00 -1.4578537668361524e+00 + -9.0303922215344778e-01 1.4914745220631631e+00 -1.8223806631501960e+00 + -1.1997295694219190e+00 1.7067734109148707e+00 -2.1563329998100400e+00 + -1.5423409173593587e+00 1.8692887674085252e+00 -2.4189392716203901e+00 + -1.8878516677295727e+00 1.9458754005823620e+00 -2.5690644399926197e+00 + -2.1778909817410179e+00 1.9380636442282291e+00 -2.6001401672633442e+00 + -2.4238074905714266e+00 1.8814509142679809e+00 -2.5547542899125482e+00 + -2.6810572276003652e+00 1.7723755501403566e+00 -2.4669023292750376e+00 + -2.9777821710524006e+00 1.5741674876049887e+00 -2.3526443466892579e+00 + -3.3129353907215546e+00 1.2620603033142703e+00 -2.2425890049154500e+00 + -3.6684279460264637e+00 8.7135259692436973e-01 -2.1882798020994807e+00 + -4.0256989932020684e+00 4.9356719381182035e-01 -2.2198941116096034e+00 + -4.3783887891406712e+00 2.0205657131599769e-01 -2.3219500074663126e+00 + -4.7301197298254865e+00 1.3867346770876001e-02 -2.4623314573771582e+00 + -5.0716012269995874e+00 -1.6844978677252081e-02 -2.6100656774097590e+00 + -5.2782075371724142e+00 2.5726059290135495e-01 -2.6913530568827135e+00 + id 14659 + loc 9.0836995840072632e-01 6.1211574077606201e-01 393 + blend 0.0000000000000000e+00 + interp 3.9194056161410745e-01:2.6116091853774021e-01:6.8710178087122420e-01:3.9193664220849134e-01:1.4646400708742162e+00:2.6400045756711682e-01:2.2263611398384482e+00:3.5014839335711095e-01:2.5752227323314356e+00:2.5133621399065459e-01:3.5229089103703428e+00 + CVs 20 + -2.0071908712392172e-01 1.8100050670798742e-01 -8.2342845527549668e-02 + -3.9979509579353090e-01 3.7730528946145503e-01 -1.9795909142497531e-01 + -5.9761991398764547e-01 5.8643773936307009e-01 -3.2046988438513901e-01 + -7.9669658558746459e-01 8.0655961281375577e-01 -4.3697099906209386e-01 + -9.9822178245089443e-01 1.0297572369987256e+00 -5.4790641639595994e-01 + -1.2020413063080300e+00 1.2427273447506730e+00 -6.5782135994250268e-01 + -1.4042372092308786e+00 1.4308483606248681e+00 -7.7388261569547212e-01 + -1.5989177923405351e+00 1.5821240686791147e+00 -8.9991832790890447e-01 + -1.7789786401386585e+00 1.6879332244792014e+00 -1.0279659545056874e+00 + -1.9286520900115576e+00 1.7402298419700122e+00 -1.1360371406088512e+00 + -2.0238351541620085e+00 1.7427660529335758e+00 -1.1956894080555243e+00 + -2.0604239712321633e+00 1.7272931813883812e+00 -1.1970648638253230e+00 + -2.0704937702752853e+00 1.7160357076574089e+00 -1.1777615987714700e+00 + -2.0830183071890267e+00 1.6753171147963624e+00 -1.1876427133114147e+00 + -2.0968171928612374e+00 1.5640270389225848e+00 -1.2355002689986965e+00 + -2.1052158551631290e+00 1.3650167815635337e+00 -1.3132705046479327e+00 + -2.1322427479241113e+00 1.0661125441859967e+00 -1.4202409574624100e+00 + -2.2350722250536781e+00 7.1335706558962753e-01 -1.5376386286101229e+00 + -2.3679359642788658e+00 4.7689198908901209e-01 -1.6010095482635216e+00 + id 14660 + loc 4.0257248282432556e-01 2.0061364769935608e-01 405 + blend 0.0000000000000000e+00 + interp 4.2515882922715548e-01:3.5571286880766551e-01:5.1396298344285818e-01:3.2279518025203180e-01:1.4953326619746943e+00:2.6389506403112351e-01:2.1301696081078347e+00:4.2515457763886322e-01:2.7284795223734895e+00:3.2344027907608541e-01:3.2144716416138852e+00:4.1285175376849476e-01:3.9581330809436115e+00 + CVs 20 + 4.2611086003607773e-02 1.0936129090510424e-01 4.8737898232729823e-02 + 7.5068795238904654e-02 2.0458809416703988e-01 1.1973030941216442e-01 + 1.1660215825602312e-01 2.9018211691842627e-01 1.9386604265757326e-01 + 1.7455829247942853e-01 3.6967277978872459e-01 2.6567313866632425e-01 + 2.4865899686130077e-01 4.4187308896829386e-01 3.3452390623563238e-01 + 3.3890188424958223e-01 5.0582301874166835e-01 3.9903795315582613e-01 + 4.4579235838484615e-01 5.6075854026836136e-01 4.5776487189688903e-01 + 5.6983393009750194e-01 6.0544528505871520e-01 5.0874746716268626e-01 + 7.1131186393915247e-01 6.3775317686938204e-01 5.4908306574932197e-01 + 8.6991532624073153e-01 6.5515044865036287e-01 5.7569794383289663e-01 + 1.0454301889043838e+00 6.5504819200050068e-01 5.8665420819727154e-01 + 1.2377446977534881e+00 6.3384230010062026e-01 5.8109319873002718e-01 + 1.4415897736611938e+00 5.8817611306660744e-01 5.5762448001141574e-01 + 1.6453970259663100e+00 5.2220820472195528e-01 5.1368355089638840e-01 + 1.8424888037052249e+00 4.5104117672917737e-01 4.4742657690390719e-01 + 2.0364592308998000e+00 3.9018894011918842e-01 3.5882703689881046e-01 + 2.2327727964237942e+00 3.4681404475632949e-01 2.4947070249156350e-01 + 2.4388220069780604e+00 3.2166638037770923e-01 1.2420126744367160e-01 + 2.7361967163396028e+00 2.7975066953104816e-01 1.6307390397425656e-02 + id 14661 + loc 1.0076515376567841e-01 9.6509444713592529e-01 404 + blend 0.0000000000000000e+00 + interp 5.2888999922611202e-01:4.9370786091472074e-01:9.0613451937649137e-02:4.8466752627613580e-01:7.2473279457131645e-01:2.5703380248747476e-01:1.2234898542992059e+00:3.8649884680908386e-01:2.1171807584523781e+00:5.2888471032611983e-01:2.8226195422333156e+00:4.7080553937659431e-01:3.0984589507534954e+00:3.4541808224178921e-01:3.9075619545378872e+00 + CVs 20 + 6.2324164949824179e-02 1.2334267150812424e-01 2.0055887625836270e-02 + 1.0560563594936935e-01 2.4905967217030944e-01 5.8445159754414278e-02 + 1.6214844541449491e-01 3.6453856598501655e-01 9.4560066422300110e-02 + 2.3794231724612364e-01 4.7989949878842808e-01 1.3124963365007553e-01 + 3.3324787137881023e-01 5.9429296153730493e-01 1.6494169111150597e-01 + 4.4670069317653965e-01 7.0696615447148026e-01 1.9145083059178097e-01 + 5.7570049705770987e-01 8.1713698508436550e-01 2.0670269414524814e-01 + 7.1657016748425029e-01 9.2371123883027040e-01 2.0723330184756561e-01 + 8.6470710910486803e-01 1.0252393451598230e+00 1.9046404381328935e-01 + 1.0149338439714006e+00 1.1197671254712795e+00 1.5419912578104222e-01 + 1.1617552488601459e+00 1.2044657246674626e+00 9.5543545192814050e-02 + 1.2991810664745933e+00 1.2756221107595291e+00 1.0888504762106954e-02 + 1.4206019805248045e+00 1.3303750505385905e+00 -1.0068370402506052e-01 + 1.5189366301945062e+00 1.3703396433175321e+00 -2.3431014806841427e-01 + 1.5851816486164678e+00 1.4052241202211289e+00 -3.8153529856961804e-01 + 1.6091034230855341e+00 1.4494183986202498e+00 -5.3352191777169478e-01 + 1.5808924014931789e+00 1.5122681367022806e+00 -6.8352714500726464e-01 + 1.4934435004992754e+00 1.5915286433573370e+00 -8.2591623330569619e-01 + 1.4951068429424319e+00 1.6884910079420825e+00 -8.8720626936972757e-01 + id 14662 + loc 3.7620180845260620e-01 6.8174630403518677e-01 401 + blend 0.0000000000000000e+00 + interp 3.8719581335619607e-01:2.9106895037772684e-01:1.6871416219879953e-01:2.7249823661604200e-01:1.0391476659882370e+00:3.8719194139806251e-01:1.9898204952876803e+00:2.6563577011910455e-01:2.9566262241652694e+00:2.9047251542757024e-01:3.5759585279160300e+00 + CVs 20 + -6.5562931305004929e-02 3.1758882989229337e-01 -3.0289315406389994e-01 + -1.2818479883723444e-01 6.5599498104596299e-01 -6.1851433576159331e-01 + -2.0442974323719909e-01 9.9745273896815800e-01 -9.3647352159477637e-01 + -2.9648252841509765e-01 1.3178483762566962e+00 -1.2604929899402009e+00 + -4.1207713897850845e-01 1.6009794623244669e+00 -1.5975506354330717e+00 + -5.7337670705963706e-01 1.8411400095613157e+00 -1.9367505630888577e+00 + -7.9746540138679045e-01 2.0365736811660957e+00 -2.2525924942157727e+00 + -1.0820915874221424e+00 2.1862917936990161e+00 -2.5220693892818002e+00 + -1.4125511408288440e+00 2.2937795151105176e+00 -2.7352746350797381e+00 + -1.7755559820979980e+00 2.3667625129177905e+00 -2.8971871848249102e+00 + -2.1569296527304287e+00 2.4117341710400542e+00 -3.0182535445853738e+00 + -2.5467781976120616e+00 2.4321740276477755e+00 -3.1138838160261120e+00 + -2.9345334985709668e+00 2.4291303353122728e+00 -3.2002746015572874e+00 + -3.2974961160881486e+00 2.4063086644957457e+00 -3.2927521027069870e+00 + -3.6138642963431145e+00 2.3642372557331504e+00 -3.3824582858615737e+00 + -3.8672574443392516e+00 2.2925745040239649e+00 -3.3900629925786139e+00 + -4.0706486308651124e+00 2.1632943957240265e+00 -3.2418912359027869e+00 + -4.2583685359950856e+00 1.9828664607086393e+00 -3.0929777493774488e+00 + -4.3141585282044534e+00 1.9171795553797326e+00 -3.2776151797253266e+00 + id 14663 + loc 8.1171703338623047e-01 3.7910249829292297e-01 399 + blend 0.0000000000000000e+00 + interp 4.4620551161033761e-01:2.5612263867673729e-01:9.4542083643160102e-01:4.4620104955522155e-01:1.1248303330504330e+00:2.9481750641735593e-01:2.0246262238132697e+00:2.6514341666633723e-01:2.8719119673607141e+00:2.5692898849751300e-01:3.6591616211582463e+00 + CVs 20 + 2.6869928017794154e-01 3.4919145257297257e-01 1.8964681836252389e-01 + 5.3623679974832805e-01 6.8593532713129146e-01 3.8114856723711205e-01 + 7.8240882979043080e-01 1.0064003187280686e+00 6.2282631944195965e-01 + 9.9960714756140490e-01 1.2989843035859205e+00 9.0516234262301909e-01 + 1.1907979105305273e+00 1.5609301848967290e+00 1.2060153130669031e+00 + 1.3580531892679424e+00 1.7929435454531408e+00 1.5136300087802508e+00 + 1.5011149022626586e+00 1.9949694143680583e+00 1.8241036294079545e+00 + 1.6198182724289365e+00 2.1670053784576484e+00 2.1391104309300819e+00 + 1.7176815771410303e+00 2.3100006144047116e+00 2.4679997591881548e+00 + 1.8048263022710778e+00 2.4216398528385366e+00 2.8271298672384360e+00 + 1.8937269304591129e+00 2.4872198217516095e+00 3.2263342271163458e+00 + 1.9862096243997667e+00 2.4795818081732923e+00 3.6466789099696819e+00 + 2.0713652599815626e+00 2.3838913665139385e+00 4.0446331685444035e+00 + 2.1379241698723592e+00 2.2134018188420361e+00 4.3767567450144149e+00 + 2.1804275899336534e+00 1.9963806528474464e+00 4.6061344439568463e+00 + 2.2261021673184334e+00 1.7543426921392729e+00 4.7306484824400101e+00 + 2.3341771134197646e+00 1.4990289698715127e+00 4.7755448626136747e+00 + 2.5180893153276118e+00 1.2403839158762344e+00 4.8174441122772205e+00 + 2.5164864499251069e+00 1.1431930168077074e+00 5.1789133095776281e+00 + id 14664 + loc 7.6096808910369873e-01 6.2395763397216797e-01 393 + blend 0.0000000000000000e+00 + interp 3.7407131098016544e-01:2.5814837617259301e-01:6.6562716467051442e-01:3.7406757026705567e-01:1.5423425013397307e+00:2.6397005367269244e-01:2.2573126368244392e+00:2.7785358028371065e-01:3.4444698930905009e+00 + CVs 20 + -3.1937488785490026e-01 3.2285323250022258e-01 -2.8498867198583683e-01 + -6.2064995279991897e-01 6.4879104007683930e-01 -5.4108369995597361e-01 + -9.1884696452175785e-01 9.9875284514338891e-01 -8.0511054572228025e-01 + -1.2293410880930873e+00 1.3668418181166360e+00 -1.0931371930393483e+00 + -1.5711547656398097e+00 1.7324168587605926e+00 -1.4036947004393956e+00 + -1.9622537435481067e+00 2.0730575471795891e+00 -1.7251934848239303e+00 + -2.4163397716700450e+00 2.3588450367366849e+00 -2.0353596212843859e+00 + -2.9391348672828745e+00 2.5489466073059477e+00 -2.3081229870933884e+00 + -3.5209271967188487e+00 2.6165467985123616e+00 -2.5337738781160679e+00 + -4.1473750750820235e+00 2.5675873262416955e+00 -2.7327662169360680e+00 + -4.8003782816006000e+00 2.4083238247735554e+00 -2.9211078431926065e+00 + -5.4425857806739151e+00 2.1278106453709702e+00 -3.0770815488045185e+00 + -6.0296355024046990e+00 1.7243415144131120e+00 -3.1779792098406316e+00 + -6.5387471113397009e+00 1.2182268981132278e+00 -3.2485856462335301e+00 + -6.9657849219805579e+00 6.4709092800970147e-01 -3.3089769750642075e+00 + -7.3227029947842883e+00 9.2563115496703041e-02 -3.2963696714019539e+00 + -7.6422113553228570e+00 -3.6503623648097916e-01 -3.1533045661795933e+00 + -7.9684585762587234e+00 -7.8140073802943455e-01 -2.9699629907622658e+00 + -8.4205238979501758e+00 -1.3899245041828416e+00 -3.0238702610506336e+00 + id 14665 + loc 1.2890697456896305e-02 5.5803811550140381e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5972124003723985e-01:2.9669475016974611e-01:1.7681255236789872e-01:4.5971664282483948e-01:9.5830837382707601e-01:4.2286418314484425e-01:1.3567961672929643e+00:3.3960643795493878e-01:2.0030020337546319e+00:3.6119219259569041e-01:2.7856565967870193e+00:3.3702966461614370e-01:3.6314505401115214e+00 + CVs 20 + -3.0920251580618896e-02 4.3980614435422932e-01 3.2466683585997441e-01 + -3.7018352355068618e-02 8.0873324339114738e-01 5.3623399297872931e-01 + -4.0465302678733162e-02 1.1571568986549696e+00 6.9964412359963357e-01 + -4.8847123855011443e-02 1.5148847071821616e+00 8.4565237152013939e-01 + -5.3448276200947331e-02 1.8818700191322302e+00 9.6684561196469199e-01 + -4.3080075924717132e-02 2.2595459946951375e+00 1.0498873961727517e+00 + -4.5124158194304043e-03 2.6462497851726710e+00 1.0669712716510136e+00 + 7.0946137294128686e-02 3.0253415844958438e+00 9.7785180132335814e-01 + 1.7497095065920565e-01 3.3508893047331076e+00 7.4715323876172812e-01 + 2.7200177830994532e-01 3.5561251206762634e+00 3.8851868530287614e-01 + 3.2596818409141837e-01 3.6157830768816086e+00 -2.8961764409787483e-02 + 3.2979629489044221e-01 3.5540341147657637e+00 -4.5213961907207634e-01 + 2.9317657565337507e-01 3.3949324594724071e+00 -8.6534702707887234e-01 + 2.2923593387345895e-01 3.1423189284287689e+00 -1.2685140360339733e+00 + 1.5104206076173021e-01 2.7654589539986585e+00 -1.6643993294920532e+00 + 6.5873329147732113e-02 2.1682163799381047e+00 -2.0247125777866808e+00 + -3.0786665102548877e-02 1.2957740477837352e+00 -2.1900603106550189e+00 + -1.3363267808938833e-01 4.3259383706211496e-01 -2.0527552399405042e+00 + -2.0457398592650594e-01 1.8444462438641729e-02 -1.9862396282087751e+00 + id 14666 + loc 9.9309056997299194e-01 4.3492183089256287e-01 405 + blend 0.0000000000000000e+00 + interp 4.0056469905110187e-01:2.9511362509562744e-01:7.8751607235965249e-01:4.0056069340411138e-01:1.2345988868389317e+00:3.3039717195759255e-01:2.4842491897930308e+00:3.8059676516889129e-01:3.0598736416139025e+00:2.7652141161615995e-01:3.8483402482785185e+00 + CVs 20 + -8.2930680729743633e-02 1.5277665919219807e-01 9.1635155071872768e-02 + -1.0373192549427093e-01 2.8409439500732797e-01 1.7525308850095878e-01 + -9.5621461343385672e-02 3.9773221572750772e-01 2.5400824796506999e-01 + -8.3731138378209280e-02 5.2370639994448009e-01 3.3814143902757671e-01 + -5.9911739135384001e-02 6.6310751779423194e-01 4.2396242670384787e-01 + -1.2182185026338332e-02 8.1770957090169660e-01 5.0421859353384380e-01 + 7.5691069813294487e-02 9.8765178225355665e-01 5.6448951490095356e-01 + 2.1973715600734461e-01 1.1651795189259477e+00 5.7645338708152993e-01 + 4.1724112687001752e-01 1.3243902372591028e+00 4.9763939242041266e-01 + 6.1947141480261081e-01 1.4243068020761884e+00 3.0412765771578049e-01 + 7.5989495072851510e-01 1.4468618153416606e+00 2.9411852505704147e-02 + 8.1771856516948604e-01 1.4075201024297512e+00 -2.7175026125233698e-01 + 8.0556747677868712e-01 1.3305014386267324e+00 -5.6958995900532361e-01 + 7.2510884269592002e-01 1.2572879438393425e+00 -8.5145467244775341e-01 + 5.6368734454148905e-01 1.2534716959120413e+00 -1.1020474942377911e+00 + 3.2190008473267351e-01 1.3680465780573416e+00 -1.2876836368460438e+00 + 3.0656350182814429e-02 1.5821223528666557e+00 -1.3771565596824904e+00 + -2.7388796845733698e-01 1.8345054936012144e+00 -1.3816995347913945e+00 + -5.3671317279829878e-01 1.9341616165245539e+00 -1.5570346032426163e+00 + id 14667 + loc 3.1288605928421021e-01 1.2159448117017746e-01 404 + blend 0.0000000000000000e+00 + interp 5.0991181175189360e-01:3.2724538725754881e-01:4.7118987114646893e-01:5.0273108753475693e-01:1.2926764583808472e+00:5.0990671263377607e-01:1.9203856735590090e+00:3.3245718052990814e-01:2.3112925278510907e+00:2.8047086228193874e-01:3.0255911991753255e+00:3.7056591386891347e-01:3.6513843129819641e+00 + CVs 20 + -1.3590933389694212e-01 1.2160497048424043e-01 -5.4749039027129361e-02 + -2.7029203480286212e-01 2.4650901945363865e-01 -1.1096822930615211e-01 + -4.0091947290435070e-01 3.7155517770634711e-01 -1.6726003913129597e-01 + -5.2794899461210587e-01 4.9562640276501257e-01 -2.2308113457696357e-01 + -6.5416087733986272e-01 6.2039043912365455e-01 -2.7925481888962644e-01 + -7.8269619690000236e-01 7.4792639164034946e-01 -3.3500343518508652e-01 + -9.1863256265123350e-01 8.8039386586549073e-01 -3.8558512858461053e-01 + -1.0681754177166345e+00 1.0186361947501608e+00 -4.2173792725313164e-01 + -1.2351715601190711e+00 1.1611120458475521e+00 -4.3314386690069429e-01 + -1.4201020201198524e+00 1.3045108782337578e+00 -4.1102145687288161e-01 + -1.6227910937426868e+00 1.4441974158560080e+00 -3.4802489399971182e-01 + -1.8392413886158454e+00 1.5709968157366561e+00 -2.3963772427855456e-01 + -2.0653206520284551e+00 1.6746368414378969e+00 -8.4178772086848319e-02 + -2.2945792891295631e+00 1.7473096754164854e+00 1.1756118561933593e-01 + -2.5140944193341959e+00 1.7908301172942696e+00 3.6785249279323429e-01 + -2.7021753564821265e+00 1.8158909222373663e+00 6.7563333490144406e-01 + -2.8349289097541321e+00 1.8188457242548206e+00 1.0439621059468080e+00 + -2.9022967319586535e+00 1.7653379262217892e+00 1.4546172015100343e+00 + -3.0271498159929995e+00 1.7483628639001929e+00 1.8019593410244397e+00 + id 14668 + loc 3.1825530529022217e-01 4.1786777973175049e-01 401 + blend 0.0000000000000000e+00 + interp 2.7538163515994352e-01:2.6166646426657114e-01:4.9288565833807085e-01:2.6583424420912372e-01:1.5443530316172576e+00:2.7537888134359195e-01:2.5218893850360593e+00:2.6658979572656943e-01:3.4454343702155770e+00 + CVs 20 + -3.0734126374461124e-01 1.8029728002289688e-01 1.3950842908478892e-01 + -5.9002637954050718e-01 3.6086868113218334e-01 2.5981174154635928e-01 + -8.6805284698337803e-01 5.3507164365274718e-01 3.7542598498092095e-01 + -1.1538699122613976e+00 6.9732126868435018e-01 4.9651945297286587e-01 + -1.4469550646851552e+00 8.4182080470687926e-01 6.2599658240870371e-01 + -1.7454373612845400e+00 9.6252264702106061e-01 7.6963180680814958e-01 + -2.0436725761692083e+00 1.0541635023314848e+00 9.3799078070187614e-01 + -2.3329045654240885e+00 1.1122154896137935e+00 1.1437758071030917e+00 + -2.6021866906801732e+00 1.1330042450179689e+00 1.3951733590865389e+00 + -2.8400872204759491e+00 1.1138378677409275e+00 1.6927222376105158e+00 + -3.0379991486356732e+00 1.0531021288618718e+00 2.0291323716762895e+00 + -3.1916056850194008e+00 9.5005718146714813e-01 2.3888133597524797e+00 + -3.2977639506559360e+00 8.0445876614679279e-01 2.7499928363612969e+00 + -3.3501130259040197e+00 6.2119627214392237e-01 3.0897307030608689e+00 + -3.3363558248769167e+00 4.2399976273751233e-01 3.3853188743556926e+00 + -3.2482941876098170e+00 2.5988459345060416e-01 3.6118986569523974e+00 + -3.1035073729477598e+00 1.7143510062206418e-01 3.7480002595955155e+00 + -2.9451401081535540e+00 1.6359119278254081e-01 3.7885405590113685e+00 + -2.6342094164570726e+00 6.0978149280611071e-02 3.9558106042481973e+00 + id 14669 + loc 6.7741328477859497e-01 8.7147510051727295e-01 393 + blend 0.0000000000000000e+00 + interp 4.1552703843203337e-01:2.9044565330292188e-01:3.2835838948690144e-01:4.1552288316164909e-01:9.4174350511171245e-01:2.6830637852976319e-01:1.5858815623918292e+00:2.5621390184595760e-01:2.7854291997181302e+00:2.5503689355489778e-01:3.7656864963784793e+00 + CVs 20 + -2.2933404101147969e-01 2.8172931409813851e-01 -2.3763733171231216e-01 + -4.6721428163053541e-01 5.6084470944407450e-01 -4.3891677898212339e-01 + -7.0285946491828910e-01 8.4758494957438990e-01 -6.3448252380310688e-01 + -9.2801664315036381e-01 1.1372494154177368e+00 -8.3236400360601559e-01 + -1.1408345393318842e+00 1.4209922694346102e+00 -1.0261057767371367e+00 + -1.3380385740173435e+00 1.6932021705767497e+00 -1.2118813872014571e+00 + -1.5150639970113517e+00 1.9566174069031610e+00 -1.3892880472453251e+00 + -1.6757471509466109e+00 2.2232629090457552e+00 -1.5604452578256580e+00 + -1.8491800075285285e+00 2.4970553735022438e+00 -1.7281703751431556e+00 + -2.0729101684054050e+00 2.7535677808111645e+00 -1.8906397800143160e+00 + -2.3516508333322408e+00 2.9750383616002383e+00 -2.0553179396543504e+00 + -2.6731729202946273e+00 3.1748280421924493e+00 -2.2540331293182740e+00 + -3.0415248484057820e+00 3.3460943194138704e+00 -2.5071185896616917e+00 + -3.4627764400173096e+00 3.4352916197342780e+00 -2.7871268851209496e+00 + -3.8992950492435803e+00 3.3915534485478762e+00 -3.0708520411675311e+00 + -4.2523558943017488e+00 3.1983412188029723e+00 -3.4022897808877879e+00 + -4.4566625264647621e+00 2.8586126238226841e+00 -3.8180248880566330e+00 + -4.5929602702072625e+00 2.3789386534657768e+00 -4.2163708206500337e+00 + -4.7950024943238914e+00 1.8494644570056518e+00 -4.2168314698987750e+00 + id 14670 + loc 1.0937234619632363e-03 6.4697724580764771e-01 399 + blend 0.0000000000000000e+00 + interp 3.2953801686975476e-01:2.1235929206109613e-01:9.4046622830684101e-02:3.2953472148958607e-01:1.0946118641929876e+00:2.2629554903544968e-01:1.9732764496265542e+00:2.6702564311514987e-01:2.1757961544753126e+00:2.6832678809380622e-01:2.9934760155035334e+00:2.8524169198932237e-01:3.9309848370091518e+00 + CVs 20 + -2.3842853812567572e-01 3.6248627873965711e-01 -2.6785875264667408e-01 + -4.7220320387981068e-01 7.1657714480555879e-01 -5.3677609470562804e-01 + -7.0763573938450508e-01 1.0564297438615107e+00 -8.2609332725647411e-01 + -9.5072995811862349e-01 1.3814859796398502e+00 -1.1414702436663711e+00 + -1.2129302905934662e+00 1.6932882937012173e+00 -1.4753883373177823e+00 + -1.5171032927448740e+00 1.9845717732179990e+00 -1.8050255240228468e+00 + -1.8869229607159272e+00 2.2296289592154332e+00 -2.0963102513600052e+00 + -2.3233828182738523e+00 2.3775063295522871e+00 -2.3163914757342527e+00 + -2.7961489704497806e+00 2.3784536191039192e+00 -2.4450200617827722e+00 + -3.2650231815462627e+00 2.2283823422480227e+00 -2.4878785927944564e+00 + -3.6995398020557930e+00 1.9597972830337840e+00 -2.4761725461376920e+00 + -4.0861031305444682e+00 1.6232471580952919e+00 -2.4603636040697747e+00 + -4.4232496884660257e+00 1.2915246491663324e+00 -2.4893261890727558e+00 + -4.6941680712831237e+00 1.0547183038920085e+00 -2.5716416777313231e+00 + -4.8445667185830565e+00 9.5379946334391519e-01 -2.6631780077500036e+00 + -4.7944947074332029e+00 9.0122053423943427e-01 -2.7049444764935102e+00 + -4.5741352393412500e+00 6.8300061539746815e-01 -2.7099728994649723e+00 + -4.4742163275210061e+00 4.7606990653404907e-01 -2.8053564026248754e+00 + -4.4270848996442540e+00 7.8699125300682071e-01 -2.9449701572701130e+00 + id 14671 + loc 4.1483876109123230e-01 7.7192658185958862e-01 404 + blend 0.0000000000000000e+00 + interp 4.1095631487957629e-01:4.1095220531642751e-01:8.7782433745715815e-01:3.8127695998362049e-01:1.1818121785713123e+00:3.7442968797595960e-01:1.9609265678757555e+00:3.4196081247658916e-01:2.8596164879977799e+00:4.0530928106200131e-01:3.3678990312525920e+00:3.2597794573185079e-01:3.9776977345148365e+00 + CVs 20 + 3.4771588477637318e-03 7.3188634797992397e-02 4.5860377973783041e-02 + 1.7575919904143283e-02 1.5308600152008239e-01 8.4063548549755562e-02 + 3.5096331565051486e-02 2.4068406496542710e-01 1.2687224993981605e-01 + 5.5441784281992701e-02 3.2855995525515430e-01 1.7212600576759429e-01 + 8.1080614172757734e-02 4.1519111529043096e-01 2.1827761225236403e-01 + 1.1352704473491607e-01 4.9913816600787864e-01 2.6442278624819632e-01 + 1.5320016830976974e-01 5.7856467128994293e-01 3.0966672243338095e-01 + 1.9928012474957774e-01 6.5169835203853510e-01 3.5368966786370448e-01 + 2.4964398594574866e-01 7.1727198336740516e-01 3.9759688551490896e-01 + 3.0175760568302951e-01 7.7430392496630918e-01 4.4206046089974943e-01 + 3.5392234231655056e-01 8.2142098509993433e-01 4.8316605684429487e-01 + 4.0462367103010571e-01 8.5756624390916136e-01 5.1424855083849907e-01 + 4.5003848674909985e-01 8.8357892462647292e-01 5.3085619619046953e-01 + 4.8389633334259008e-01 9.0451657070931046e-01 5.3648336965633414e-01 + 5.0230998443061636e-01 9.2793979958300477e-01 5.3906129564750471e-01 + 5.0406792990865446e-01 9.6051843163982975e-01 5.4388620470645310e-01 + 4.8805848911689065e-01 1.0070096445408330e+00 5.5369595869619292e-01 + 4.5374406415764623e-01 1.0717598533878829e+00 5.7351147169915095e-01 + 4.0081823542869205e-01 1.1460672502282991e+00 5.9414056057781695e-01 + id 14672 + loc 9.7193747758865356e-01 4.2027452588081360e-01 401 + blend 0.0000000000000000e+00 + interp 3.5945732104507205e-01:3.5945372647186163e-01:1.7280637569967916e-01:2.3805397993583094e-01:9.9720153597934325e-01:2.5848855224589629e-01:1.9963231635490613e+00:2.4669183399075587e-01:2.8648913861074572e+00:2.5346364459987930e-01:3.9696705235689582e+00 + CVs 20 + 1.5464111780552459e-01 3.8893976721310897e-01 1.0782167795121055e-01 + 2.8681326045478173e-01 7.9026987203215693e-01 2.5946657704081921e-01 + 3.7004943979110827e-01 1.1923188131696134e+00 4.6042146722461508e-01 + 3.9936168246538012e-01 1.5726673642410636e+00 7.1344000667096097e-01 + 3.8482247828342964e-01 1.9105294579036876e+00 1.0160611465399099e+00 + 3.4014197176139543e-01 2.1934453312253250e+00 1.3599073929276715e+00 + 2.8053320796652070e-01 2.4175094922473455e+00 1.7359858778908870e+00 + 2.2284606796291484e-01 2.5823485507822568e+00 2.1368411173726232e+00 + 1.7784139308868685e-01 2.6818795342643771e+00 2.5495306072203645e+00 + 1.3975385957679520e-01 2.7025354933578858e+00 2.9466644227280043e+00 + 9.4974062015972804e-02 2.6368292719634310e+00 3.2936681001513914e+00 + 4.0440010595431231e-02 2.4925839888815808e+00 3.5644619013935723e+00 + -8.4758488420580980e-03 2.2873301199183533e+00 3.7664331338204713e+00 + -1.1095735909877003e-02 2.0106037124555418e+00 3.9564398606659030e+00 + 1.0138898300094756e-01 1.6210210845771944e+00 4.1718737413578211e+00 + 4.2545907561017970e-01 1.1290784252346016e+00 4.3976319363630267e+00 + 1.0523943466552326e+00 6.5890724242941601e-01 4.5991207592520595e+00 + 1.8441193834828766e+00 4.1357174621598147e-01 4.7116843708166964e+00 + 2.2201370487004768e+00 3.1177824480706029e-01 4.6907226659882237e+00 + id 14673 + loc 8.2618474960327148e-01 8.9027625322341919e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2099877096144309e-01:5.2099356097373350e-01:1.9420389254989567e-02:4.4591928480303061e-01:5.5634955395110874e-01:4.7774213857627024e-01:9.9389578696703085e-01:3.3490102330361471e-01:1.3743212743360611e+00:4.9520215601007306e-01:1.9997546975112794e+00:3.8820965545954922e-01:2.7280693463188701e+00:4.8305363427547526e-01:3.0282834526766385e+00:3.3013025218271203e-01:3.6715546282358411e+00 + CVs 20 + 1.0544552049025022e-01 2.7490193356108444e-01 -1.0140652548291440e-01 + 2.2130856188557652e-01 5.4485763754363115e-01 -2.0409444228005763e-01 + 3.4919621233358150e-01 8.0008482562301475e-01 -3.1875107512043982e-01 + 4.8991128215996499e-01 1.0326059961909115e+00 -4.4845867124479227e-01 + 6.4247518168078710e-01 1.2350252734523623e+00 -5.9072621254804725e-01 + 8.0353731346973900e-01 1.3991268938102492e+00 -7.4257172256758697e-01 + 9.7101003607249781e-01 1.5202469934809861e+00 -9.0258128083980416e-01 + 1.1449930043586392e+00 1.5985877939441175e+00 -1.0704953244472102e+00 + 1.3244274569660224e+00 1.6362222076408295e+00 -1.2446980435758117e+00 + 1.5062684114587466e+00 1.6357397089763024e+00 -1.4230218905950582e+00 + 1.6866466556323714e+00 1.5997408559648840e+00 -1.6041643503461853e+00 + 1.8606886628924293e+00 1.5312271731676625e+00 -1.7860649649036873e+00 + 2.0232924948342976e+00 1.4348508050670969e+00 -1.9649402672905856e+00 + 2.1707341836009029e+00 1.3189646656521989e+00 -2.1354981189314408e+00 + 2.3002381070635831e+00 1.1975005576107045e+00 -2.2915914560643862e+00 + 2.4093275927435194e+00 1.1006675609821348e+00 -2.4274134948055917e+00 + 2.4942226514067096e+00 1.0969828930494148e+00 -2.5541551480707070e+00 + 2.5695463717042637e+00 1.1782514000580506e+00 -2.7411122212386170e+00 + 2.6425166843266386e+00 9.5137991837004343e-01 -2.6771491377143901e+00 + id 14674 + loc 6.4336335659027100e-01 2.8604692220687866e-01 405 + blend 0.0000000000000000e+00 + interp 4.4443629514768385e-01:3.5026652040708633e-01:2.9863936875985708e-01:2.7686527422548096e-01:9.8064439743713205e-01:4.4443185078473241e-01:1.1559053704228339e+00:3.1035658141080064e-01:2.0504423968868144e+00:4.3015983201043506e-01:2.7021869696371055e+00:3.4500085853887508e-01:3.0111328917351856e+00:3.2559437043856571e-01:3.6593847832214981e+00 + CVs 20 + 9.3571122363827031e-02 1.4390397129717070e-01 -1.5791362750916405e-02 + 2.1593617209335200e-01 2.3632224702143903e-01 -3.7745868215113172e-02 + 3.4437556533743324e-01 3.1162791307283771e-01 -6.7300660430384018e-02 + 4.6357258155526770e-01 3.6781343212735412e-01 -1.0785034170090955e-01 + 5.6898642200394145e-01 4.0052928985665104e-01 -1.6039441809740057e-01 + 6.5510228190709396e-01 4.0801638122219486e-01 -2.2327023179913502e-01 + 7.1740803477605342e-01 3.9205823370498749e-01 -2.9157069690014970e-01 + 7.5544628432654815e-01 3.5858187236645844e-01 -3.5859563982594339e-01 + 7.7299835576168352e-01 3.1533751099840807e-01 -4.1895048336996193e-01 + 7.7655024657111360e-01 2.6945119684424618e-01 -4.7057164022267822e-01 + 7.7236579652478343e-01 2.2562821479851858e-01 -5.1430298996277213e-01 + 7.6446014815730612e-01 1.8601475378951582e-01 -5.5139657811163456e-01 + 7.5507543902668661e-01 1.5182485387970068e-01 -5.8315850915265588e-01 + 7.4612245565222113e-01 1.2381733242601922e-01 -6.1528253175405245e-01 + 7.3936901455800652e-01 9.8871730384876788e-02 -6.6281517124198142e-01 + 7.3304437479818640e-01 7.0033644984970056e-02 -7.4189139091294387e-01 + 7.2008558901175646e-01 3.7447769884835724e-02 -8.5508626415755262e-01 + 6.9253176378245529e-01 1.1152786134011605e-02 -9.9274157633575244e-01 + 6.3564967669033767e-01 1.4147992835682688e-02 -1.1234808526488693e+00 + id 14675 + loc 9.3326276540756226e-01 3.6905285716056824e-01 393 + blend 0.0000000000000000e+00 + interp 6.6538068665775818e-01:6.6537403285089158e-01:5.1107459584350701e-01:5.8344821277340686e-01:9.8528654482338662e-01:4.2073922306829969e-01:1.2353992737782171e+00:2.4388023593686214e-01:1.6342364721967131e+00:3.8515651800016526e-01:2.1615211729333366e+00:4.5332284591563476e-01:2.8191291345061451e+00:2.4169520456969429e-01:3.1842319761324016e+00:4.7534015447368794e-01:3.9992952420690866e+00 + CVs 20 + 3.3625838948240927e-01 3.7769526308205048e-01 1.8339856079235092e-01 + 6.5185930390808133e-01 7.7040984036729099e-01 3.1965178011730916e-01 + 9.3985555857811576e-01 1.1951079323307923e+00 4.5259663502055864e-01 + 1.2060167584995285e+00 1.6481956546031882e+00 6.2065680469272300e-01 + 1.4576050933873652e+00 2.1101414470094308e+00 8.5828376623045288e-01 + 1.6950591498437011e+00 2.5578990713043006e+00 1.1846694058791285e+00 + 1.9181156192837685e+00 2.9770634880397546e+00 1.6054173333983357e+00 + 2.1341552982177738e+00 3.3523589280463684e+00 2.1232557640809189e+00 + 2.3609821182839754e+00 3.6559087714285696e+00 2.7429693949619383e+00 + 2.6198044799007953e+00 3.8410908059636606e+00 3.4605948041846437e+00 + 2.9263070532610005e+00 3.8487564971185422e+00 4.2463299177900753e+00 + 3.2820753491389114e+00 3.6252535898473770e+00 5.0376729235085591e+00 + 3.6673237365239295e+00 3.1482019882363463e+00 5.7372622959466142e+00 + 4.0499599513653273e+00 2.4546728115090763e+00 6.2249364593319028e+00 + 4.3975647731173151e+00 1.6715610820285676e+00 6.3903992111602808e+00 + 4.6855105278899938e+00 1.0106791744188546e+00 6.2254734969454821e+00 + 4.9099862396593288e+00 5.9309941398923360e-01 5.8725090012956898e+00 + 5.0874575299065281e+00 3.0834080306160017e-01 5.4780501664794956e+00 + 5.2546229456243667e+00 -9.9393874420969475e-02 5.1428609597689547e+00 + id 14676 + loc 8.9757137000560760e-02 5.3039240837097168e-01 399 + blend 0.0000000000000000e+00 + interp 3.5473059787807493e-01:2.6611671109059332e-01:6.8303639426522644e-01:2.6764360895333467e-01:1.4612177018860526e+00:3.5472705057209614e-01:2.3215153569954996e+00:2.6564130758952492e-01:2.9837451743367565e+00:2.9283407157928965e-01:3.8648875180691085e+00 + CVs 20 + -2.6522883666762370e-01 3.2264452905336494e-01 -2.4555512809172300e-01 + -5.2477098784495979e-01 6.2427996188145662e-01 -5.0234750811455364e-01 + -7.9312310705250322e-01 8.9778208138361204e-01 -7.9642912206660166e-01 + -1.0785158696014081e+00 1.1376720411702312e+00 -1.1362539616708656e+00 + -1.3863038433230619e+00 1.3380189120176742e+00 -1.5126153333266157e+00 + -1.7238821343989299e+00 1.4846815168864802e+00 -1.8975305899362724e+00 + -2.0837375509341518e+00 1.5483126518076336e+00 -2.2424739708885397e+00 + -2.4122431183139725e+00 1.4936839294697057e+00 -2.4928658245524082e+00 + -2.6562944069392675e+00 1.3300974582289176e+00 -2.6390211306808236e+00 + -2.8362490091429744e+00 1.0937973372343102e+00 -2.7193293298687378e+00 + -2.9833553872034337e+00 8.0330272643867817e-01 -2.7634719264626892e+00 + -3.1258073479981574e+00 4.5815352989951663e-01 -2.7923887693499037e+00 + -3.3165872584897835e+00 3.6555220721149778e-02 -2.8391467016614271e+00 + -3.6430946918887597e+00 -4.7923011111150887e-01 -2.9617112658410267e+00 + -4.1901236380485205e+00 -1.0065536639056776e+00 -3.2164685920106457e+00 + -4.9859031334234816e+00 -1.3379252583088543e+00 -3.6110833866385827e+00 + -5.9142199760000711e+00 -1.2220541518628105e+00 -4.0707231960538079e+00 + -6.5506312554700710e+00 -7.2357325165460329e-01 -4.4058437730437943e+00 + -6.7391026630768360e+00 -3.1735424065755741e-01 -4.5863593421894810e+00 + id 14677 + loc 8.4791451692581177e-01 3.5262307524681091e-01 404 + blend 0.0000000000000000e+00 + interp 4.2773097071778327e-01:3.7215939185932306e-01:1.0738994403027857e-01:4.0598034959986934e-01:6.8184917458004612e-01:2.9662820388610389e-01:1.0261556014281423e+00:4.2772669340807612e-01:1.7370783046258813e+00:4.0836436669956805e-01:2.0351042743487087e+00:3.2628996408444760e-01:2.9123569644949381e+00:2.5950198860384344e-01:3.6777991048687197e+00 + CVs 20 + -7.2816844779028292e-02 1.1371825928455395e-01 8.2783176375890166e-02 + -1.2365757317077938e-01 2.1897509569745011e-01 1.6184704807756645e-01 + -1.7277871877808992e-01 3.2254804486379490e-01 2.3665999876037364e-01 + -2.3810657859183104e-01 4.3065850666053684e-01 3.0617683327108058e-01 + -3.2076330153697707e-01 5.4158410008129965e-01 3.6957244947024603e-01 + -4.2074860308155615e-01 6.5226019338219210e-01 4.2532114498797124e-01 + -5.3794602017396831e-01 7.5939138041450271e-01 4.7139260468846350e-01 + -6.7213583874523319e-01 8.6012663234857056e-01 5.0582391069695509e-01 + -8.2107439908142543e-01 9.5196481071932781e-01 5.2664352816056503e-01 + -9.8032192649835292e-01 1.0330388878003574e+00 5.3207830362835851e-01 + -1.1486840043077540e+00 1.1035717120850252e+00 5.2178289754830631e-01 + -1.3458887819128411e+00 1.1693927092761851e+00 5.0001708502908238e-01 + -1.6131025548023603e+00 1.2374018201319528e+00 4.8394047403763601e-01 + -1.9734441902955357e+00 1.3051538924399022e+00 5.1638987341963838e-01 + -2.3841610083399480e+00 1.3578242982091271e+00 6.4366867541559070e-01 + -2.7714954044082889e+00 1.3827095534143390e+00 8.6576612905596484e-01 + -3.1081548361320772e+00 1.3751344062113380e+00 1.1685628541340687e+00 + -3.3842900247280547e+00 1.3301584029587459e+00 1.5520678546752644e+00 + -3.4958915418121737e+00 1.3059702232375385e+00 1.7081198093484284e+00 + id 14678 + loc 1.6245764493942261e-01 7.6226109266281128e-01 401 + blend 0.0000000000000000e+00 + interp 3.5652039555925363e-01:2.5455453128243866e-01:1.0150013832488709e+00:3.5651683035529808e-01:1.9999878754183835e+00:2.5418388613804971e-01:2.9021599272425007e+00:2.5464733113248700e-01:3.9792245483688036e+00 + CVs 20 + 5.3141652118952720e-02 2.9782786408188711e-01 -3.8985668491413072e-01 + 8.1020794262836954e-02 5.9705648767269648e-01 -7.4957844619137404e-01 + 9.0082713271770920e-02 8.9313707836760081e-01 -1.0991103637517339e+00 + 7.0320225903111877e-02 1.1795515765182638e+00 -1.4537894937583999e+00 + -2.2316900111279958e-04 1.4464595325286087e+00 -1.8200808393563885e+00 + -1.4813526263208077e-01 1.6815045776345094e+00 -2.1914196009629725e+00 + -3.8761532387065800e-01 1.8678326704028285e+00 -2.5449848513101636e+00 + -7.0962382482823649e-01 1.9928897091336686e+00 -2.8543170838111815e+00 + -1.0892395729827129e+00 2.0522430204635125e+00 -3.1034007661035510e+00 + -1.4974939310461455e+00 2.0476237717196462e+00 -3.2919692775543843e+00 + -1.9126401281604737e+00 1.9804603156792893e+00 -3.4309011949460837e+00 + -2.3211646427942174e+00 1.8466569790718261e+00 -3.5292397322084592e+00 + -2.7105078312284814e+00 1.6470176483120902e+00 -3.5805311810756089e+00 + -3.0641159691138333e+00 1.4118983767227031e+00 -3.5565711279413028e+00 + -3.3566214762763953e+00 1.2047900219128602e+00 -3.4289235705383567e+00 + -3.5586839042193521e+00 1.0862401854553239e+00 -3.2140762149591904e+00 + -3.6553076405006535e+00 1.0722015340546640e+00 -2.9737096117290225e+00 + -3.6854432443588436e+00 1.0945289516238768e+00 -2.7662400344635452e+00 + -3.7760323396717150e+00 9.9424113822910043e-01 -2.5565736773514476e+00 + id 14679 + loc 4.5481872558593750e-01 5.2444332838058472e-01 405 + blend 0.0000000000000000e+00 + interp 3.8771432578674719e-01:3.0056724838105836e-01:1.2933790840018833e-01:2.8984274315071795e-01:9.5929290836766734e-01:3.6888692946014850e-01:1.3632968281392901e+00:3.8771044864348936e-01:2.1527913207106866e+00:3.3407034638749855e-01:2.9875474482255675e+00:3.2194096208475381e-01:3.6530320308704542e+00 + CVs 20 + 1.1999464980122566e-01 2.8604307924279815e-01 -6.8729631550355733e-02 + 1.2040307421264129e-01 5.5511170950009336e-01 -1.2049072905306751e-01 + 1.1313048976645790e-01 7.9820404956564528e-01 -1.3684832337717079e-01 + 9.6704310365531954e-02 1.0477782743687609e+00 -9.9095227649962342e-02 + 6.6899147397983305e-02 1.2920746745568568e+00 1.0526230167631226e-02 + 2.8504879333926425e-02 1.5075573778620943e+00 2.0260653075525437e-01 + -3.8098079904856919e-03 1.6668801397143307e+00 4.6870577685322695e-01 + -1.1428467749635685e-02 1.7547253656017410e+00 7.8062817010516983e-01 + 1.7560121264798778e-02 1.7741730942153939e+00 1.1067111560172309e+00 + 8.5070378954473891e-02 1.7377599726173605e+00 1.4252002738891925e+00 + 1.8641705446063894e-01 1.6554815729448420e+00 1.7264051601247030e+00 + 3.1146581816925711e-01 1.5288531284151579e+00 2.0088235358963304e+00 + 4.4995209820952120e-01 1.3578086476923443e+00 2.2689786514234269e+00 + 5.9923212779935842e-01 1.1632924546218688e+00 2.4921085140350159e+00 + 7.6337209318532651e-01 9.9151368854893951e-01 2.6633340748673988e+00 + 9.4377471955792414e-01 8.7612622147523433e-01 2.7812059500762056e+00 + 1.1330357118753016e+00 8.0433874975702346e-01 2.8545901992771681e+00 + 1.3178503109074722e+00 7.4320723889569262e-01 2.8983993692299368e+00 + 1.4007526096230831e+00 5.3831808501973177e-01 3.0614378053162019e+00 + id 14680 + loc 4.9234914779663086e-01 4.8108232021331787e-01 399 + blend 0.0000000000000000e+00 + interp 2.9593351150218150e-01:2.9464368436793814e-01:5.8639187138109783e-03:2.6779033851926010e-01:9.7724505153096275e-01:2.9593055216706649e-01:1.8521683072906661e+00:2.9348440819102062e-01:2.2845887372850164e+00:2.5923117878124552e-01:2.9999216176540209e+00 + CVs 20 + -2.2332109061528352e-01 1.9666649769443839e-01 1.2252154522701302e-01 + -4.4012017206241194e-01 3.8706214116070592e-01 2.4232306989877087e-01 + -6.6444117425183002e-01 5.6526034895610333e-01 3.3777639435372586e-01 + -9.0560895678447006e-01 7.2947957065210478e-01 3.9669605802175084e-01 + -1.1623459780824570e+00 8.8358928596646524e-01 4.2316257604851892e-01 + -1.4279395098949217e+00 1.0323588353992892e+00 4.2517696061175081e-01 + -1.6951770989246178e+00 1.1788375719660105e+00 4.1025695763879227e-01 + -1.9574930668702164e+00 1.3252137982186118e+00 3.8389678338181144e-01 + -2.2113520533962894e+00 1.4750081729824192e+00 3.5280622788583155e-01 + -2.4606891482015278e+00 1.6322994434955418e+00 3.2803832217475792e-01 + -2.7233686856589987e+00 1.7858231599845595e+00 3.2405641975194144e-01 + -3.0177634206132797e+00 1.8752323625662612e+00 3.5468378990336724e-01 + -3.3190346741372680e+00 1.8329534125920377e+00 4.1618223867047410e-01 + -3.5822944494919429e+00 1.6546674429112003e+00 4.9452012946619844e-01 + -3.7827672529419982e+00 1.3757778635743509e+00 5.8209527380412651e-01 + -3.9220570768160021e+00 1.0679120519687137e+00 6.8282108049749135e-01 + -3.9771140965109444e+00 8.1197659115351994e-01 7.9683025398972818e-01 + -3.9809362316929287e+00 6.1739697340005373e-01 9.1608932148980315e-01 + -4.3866186020797775e+00 5.8525257859653557e-01 8.4450173183302357e-01 + id 14681 + loc 5.5707558989524841e-02 2.7675712108612061e-01 393 + blend 0.0000000000000000e+00 + interp 3.4453521881237908e-01:2.7146341213962027e-01:9.3663247321156851e-01:3.0749068112638422e-01:1.6109284658648038e+00:3.4453177346019098e-01:2.0979235986192069e+00:2.5547875306307932e-01:3.0123641500799350e+00:2.4133538977944191e-01:3.9293417636285284e+00 + CVs 20 + -1.6068683132995151e-01 2.8469872082482711e-01 3.1921127204490285e-01 + -3.0641647233733360e-01 5.5772373252320073e-01 6.1719958209101111e-01 + -4.5386914367705794e-01 8.2326448261635266e-01 8.9276674085930363e-01 + -6.1419089180648023e-01 1.0798753738332203e+00 1.1459330636215266e+00 + -7.9491535679212011e-01 1.3219901694383940e+00 1.3765799241062786e+00 + -1.0016816330676024e+00 1.5411651083954756e+00 1.5892896335670466e+00 + -1.2388866307471882e+00 1.7239550907137660e+00 1.7948565682735751e+00 + -1.5151873214071292e+00 1.8550152859300013e+00 2.0039292239295987e+00 + -1.8438027164005082e+00 1.9149861693978709e+00 2.2239862311768137e+00 + -2.2335071343899977e+00 1.8830580567625819e+00 2.4579776366603747e+00 + -2.6819167332482601e+00 1.7463894244948170e+00 2.7079837946524914e+00 + -3.1793300141618404e+00 1.5110534246924761e+00 2.9823537129436772e+00 + -3.7044706590642900e+00 1.2087311519170476e+00 3.3045248964470106e+00 + -4.2134886249204451e+00 8.6292423455063494e-01 3.7162504750739584e+00 + -4.6345748362748385e+00 4.7489597585943155e-01 4.2728711597972451e+00 + -4.8734171395303445e+00 9.1058198694391468e-02 5.0132609357718785e+00 + -4.8624349679590813e+00 -1.6434608610307055e-01 5.8802722013827191e+00 + -4.6688907644301256e+00 -2.2076509544969358e-01 6.7059762394005986e+00 + -4.5303576977027085e+00 -1.9879824063341145e-01 7.3511054203566299e+00 + id 14682 + loc 9.8221063613891602e-01 4.7157675027847290e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5499960186694460e-01:3.3381864829388619e-01:1.4659784360457495e-01:2.5217176322369961e-01:9.9447876914024047e-01:4.5499505187092598e-01:1.6289121733107463e+00:3.2181654892246675e-01:2.0086487526838535e+00:3.4774970397309513e-01:2.9901459516298763e+00:2.5043945382752109e-01:3.7166099864719717e+00 + CVs 20 + -4.9433217525585466e-02 4.5066716537966506e-01 -6.8639958248242428e-02 + -8.4905590454014634e-02 9.0220473544959190e-01 -7.6795073316485801e-02 + -1.4154801594881611e-01 1.3493136955551313e+00 -3.2871531058463022e-02 + -2.3692680612797073e-01 1.7851533566627125e+00 7.2418926650788640e-02 + -3.8214080206033130e-01 2.1967818882684611e+00 2.5283356787372124e-01 + -5.8526574927870734e-01 2.5624062191749792e+00 5.1635498682761038e-01 + -8.4473149753787147e-01 2.8540058464633833e+00 8.5735852673395729e-01 + -1.1491779419581767e+00 3.0494453927647638e+00 1.2567048135764551e+00 + -1.4818616413249512e+00 3.1389517450750581e+00 1.6908482462996650e+00 + -1.8172921350941975e+00 3.1264889403360643e+00 2.1355792860805476e+00 + -2.1291978587449472e+00 3.0284054457128731e+00 2.5734700277446971e+00 + -2.4015475218044107e+00 2.8623824084597884e+00 2.9972311972515380e+00 + -2.6219427220907234e+00 2.6455447016398299e+00 3.4007966465287800e+00 + -2.7753299726190850e+00 2.4074586353554799e+00 3.7706872857267633e+00 + -2.8598792278041891e+00 2.1974613177978717e+00 4.0853704478172164e+00 + -2.9196773038494030e+00 2.0987084602122863e+00 4.2970215667414466e+00 + -3.1050706641274060e+00 2.1677563529617396e+00 4.3137024763727787e+00 + -3.4982464302871721e+00 2.2248747535898263e+00 4.1272401315802512e+00 + -3.4084988227895563e+00 2.2471295692200215e+00 4.3053259858896533e+00 + id 14683 + loc 6.3566917181015015e-01 4.6743452548980713e-01 401 + blend 0.0000000000000000e+00 + interp 4.7473106850144292e-01:2.4875417180981618e-01:7.0729757112941716e-04:3.0298066684574132e-01:9.9979110924962378e-01:2.4152191455376595e-01:1.8384628522683442e+00:2.6173057956906809e-01:2.7747108960222318e+00:4.7472632119075792e-01:3.0692235153256497e+00 + CVs 20 + 2.5516174915231515e-01 3.4975204697385354e-01 2.3786913040267665e-01 + 4.6574673795363586e-01 7.2396291846184135e-01 4.9004325048141184e-01 + 6.5622601990260332e-01 1.0948338409782272e+00 7.7139377069473658e-01 + 8.3134781246483946e-01 1.4392852320260137e+00 1.0921214623210176e+00 + 9.9266796987756645e-01 1.7379549914391501e+00 1.4462481976868715e+00 + 1.1525155419284674e+00 1.9849183306280500e+00 1.8163013339597165e+00 + 1.3273612687057212e+00 2.1822270659110239e+00 2.1946481894599574e+00 + 1.5338375604982857e+00 2.3277158212788036e+00 2.5844117392895627e+00 + 1.7863211276256186e+00 2.4092804427341070e+00 2.9846640612662481e+00 + 2.0913008684933034e+00 2.4097665782823783e+00 3.3827211512075359e+00 + 2.4439651429162517e+00 2.3158139987301292e+00 3.7569210960299015e+00 + 2.8276998564193359e+00 2.1226399424158506e+00 4.0826440917486790e+00 + 3.2172871026336938e+00 1.8319932845574347e+00 4.3464216373981417e+00 + 3.5913576385458077e+00 1.4483491205507066e+00 4.5449290282874015e+00 + 3.9319624361680150e+00 9.9233046692234450e-01 4.6592428338887446e+00 + 4.2270286301906852e+00 5.0769451540813149e-01 4.6801780508449049e+00 + 4.5027199166427492e+00 2.6114412580631241e-02 4.6826040325136171e+00 + 4.7976142358176475e+00 -4.4409171014043858e-01 4.7935657049179445e+00 + 5.1240636285162857e+00 -9.0736894629652287e-01 5.0269253609969677e+00 + id 14684 + loc 7.2670084238052368e-01 3.2448839396238327e-02 404 + blend 0.0000000000000000e+00 + interp 4.7544980591199398e-01:3.2107686105199795e-01:1.7167060408395107e-03:3.8284837710900682e-01:7.7529423318725088e-01:3.9262014753767094e-01:1.0679785720709785e+00:1.6906605151963758e-01:1.8706207022126824e+00:3.5487050707886786e-01:2.7631240661624696e+00:4.7544505141393489e-01:3.0788521028764171e+00:4.3927756923912437e-01:3.6682629850615411e+00 + CVs 20 + 9.6101120334163598e-02 1.7496287136049762e-01 1.1231963356048458e-01 + 1.7299046956031655e-01 3.6242879404436379e-01 2.3781957441075907e-01 + 2.2827876005483247e-01 5.5336388694242888e-01 3.6201940437529956e-01 + 2.6269115846333274e-01 7.4134339587941844e-01 4.7964046985345626e-01 + 2.7560820207703135e-01 9.2530777897896099e-01 5.9440726923119269e-01 + 2.6114218959411634e-01 1.1049066323721219e+00 7.1091257963736543e-01 + 2.1050098110608906e-01 1.2772437086136030e+00 8.3014411791963694e-01 + 1.1542574650305859e-01 1.4350639452228044e+00 9.4736616555611364e-01 + -2.8179685464394533e-02 1.5670855154259264e+00 1.0525823250394364e+00 + -2.1339772415765468e-01 1.6613544215984042e+00 1.1339372154675256e+00 + -4.2116104128505460e-01 1.7141987485903203e+00 1.1918720914556327e+00 + -6.3234446130996202e-01 1.7378096819497464e+00 1.2658001131716790e+00 + -8.3186900833302269e-01 1.7431397432244176e+00 1.4126578799587706e+00 + -9.7646976944507680e-01 1.7201233859793292e+00 1.6576601105441977e+00 + -1.0172179573569653e+00 1.6507301981926179e+00 1.9528561274487530e+00 + -9.5862928228094513e-01 1.5369565102002420e+00 2.2240022775505111e+00 + -8.1748413469288816e-01 1.3939737761256490e+00 2.4365499419374310e+00 + -6.0578303972443914e-01 1.2436569593604216e+00 2.5673122436235478e+00 + -5.0274997630868667e-01 1.1511130111179231e+00 2.7097036648552173e+00 + id 14685 + loc 8.9479140937328339e-02 4.7064745426177979e-01 405 + blend 0.0000000000000000e+00 + interp 5.4580009171922206e-01:3.9002531172769955e-01:3.9025524418521584e-02:3.0374953704390517e-01:6.9160390256543469e-01:4.4707739908631872e-01:1.0069210326331663e+00:5.4579463371830494e-01:1.7707134471708659e+00:3.8654425222975985e-01:2.0347012653163050e+00:3.3830290149467712e-01:2.4370414294047644e+00:4.2813566117666735e-01:3.0742851004031526e+00:2.9113812185953042e-01:3.6869896320332849e+00 + CVs 20 + 2.0103285929674969e-01 1.9983663827187276e-01 -1.0870567420305617e-01 + 3.8183666150885875e-01 3.6119017931237474e-01 -1.0708786123863881e-01 + 5.6423778731507079e-01 4.5983485320085482e-01 -1.1195723146538800e-01 + 7.6293727675901546e-01 5.2181095830653967e-01 -1.2246096908248136e-01 + 9.7229709369008499e-01 5.4716533322036565e-01 -1.3814164369515808e-01 + 1.1869282001913022e+00 5.3997883208209840e-01 -1.6064225585844999e-01 + 1.4031470347495725e+00 5.0741408311493896e-01 -1.9201890607923774e-01 + 1.6182764301819459e+00 4.5690372595986523e-01 -2.3435145362544363e-01 + 1.8297247119562894e+00 3.9518690412843838e-01 -2.8883608456558590e-01 + 2.0344548580344064e+00 3.2812621725245283e-01 -3.5519562774908692e-01 + 2.2289338534545764e+00 2.5960028482370573e-01 -4.3076008140661115e-01 + 2.4103947135332482e+00 1.9167751113479192e-01 -5.1006728347146346e-01 + 2.5776633726547304e+00 1.3039087470170024e-01 -5.8898820695010135e-01 + 2.7316980921983056e+00 9.2018475673889044e-02 -6.6838151238706245e-01 + 2.8718991062180437e+00 9.3243760916458807e-02 -7.4962328911042264e-01 + 2.9911092163950044e+00 1.3366780993702698e-01 -8.2799957037187677e-01 + 3.0841381334457170e+00 1.9937730372501677e-01 -8.9493873755594577e-01 + 3.1586918291708179e+00 2.7635760942093079e-01 -9.4436942123639012e-01 + 3.3125251003991307e+00 3.2751513339658789e-01 -9.7764028791441648e-01 + id 14686 + loc 3.6139291524887085e-01 2.5686463713645935e-01 399 + blend 0.0000000000000000e+00 + interp 4.2850684743601108e-01:2.5250349833378444e-01:1.6714367765256788e-01:2.6454949478319095e-01:1.3458413283147810e+00:3.9295764706144043e-01:1.9902798654288323e+00:2.6082735010904895e-01:2.7302454492152086e+00:4.2850256236753675e-01:3.5167583022440798e+00 + CVs 20 + -1.9085139087956651e-01 3.7727475806459515e-01 1.1528038607771360e-01 + -4.1904493605310461e-01 7.4026245260561385e-01 2.0385763424342723e-01 + -6.8837881751238095e-01 1.0780851103965985e+00 2.6560550129384142e-01 + -9.8857323493029881e-01 1.3913314357959803e+00 3.2324194189678490e-01 + -1.3087603243699026e+00 1.6824257393690829e+00 4.0514205926436953e-01 + -1.6445481331550014e+00 1.9440025735675244e+00 5.2947061226075698e-01 + -1.9957201382698091e+00 2.1586934609870503e+00 7.0515458361022265e-01 + -2.3592073067014794e+00 2.2999528111736667e+00 9.3513689026269176e-01 + -2.7204056631973694e+00 2.3354962160549735e+00 1.2118193310730534e+00 + -3.0489861104742055e+00 2.2400944321699527e+00 1.5118279361446409e+00 + -3.3053157096936894e+00 2.0162190842064818e+00 1.7959230043306482e+00 + -3.4683282283481849e+00 1.7102134450539852e+00 2.0285540279303214e+00 + -3.5581551939076514e+00 1.3771989684468939e+00 2.2082507077209224e+00 + -3.6172633129602603e+00 1.0466482790535188e+00 2.3575179813976881e+00 + -3.6966544951736058e+00 7.2878317923607572e-01 2.5052699172200223e+00 + -3.8443885762021739e+00 4.3133289160497201e-01 2.6629218124183702e+00 + -4.0970529821403838e+00 1.8467839950019671e-01 2.7960858840632805e+00 + -4.4443736291752423e+00 2.3081793710689413e-02 2.8522811813988382e+00 + -4.7227009817173764e+00 -1.5873119574895533e-01 2.9286074269898288e+00 + id 14687 + loc 1.7820861935615540e-01 7.2059947252273560e-01 393 + blend 0.0000000000000000e+00 + interp 4.2226282998607761e-01:3.2477091547346626e-01:5.0755223803169280e-01:2.4913568817834711e-01:1.0292702425045723e+00:2.5935388411569976e-01:1.9960778918911548e+00:3.1416523283068215e-01:2.7719935807441991e+00:4.2225860735777776e-01:3.1669687050133688e+00:2.4257546108762593e-01:3.9681202560647444e+00 + CVs 20 + -3.3072602847002952e-01 3.4417623944713505e-01 -1.2317560554678209e-01 + -6.4594169272816937e-01 6.9947741644977501e-01 -2.6447164085905361e-01 + -9.4330669102508347e-01 1.0749264046047973e+00 -4.2138557168209800e-01 + -1.2327296350156731e+00 1.4652317154274979e+00 -5.8707730847530026e-01 + -1.5352477941125429e+00 1.8576828709486557e+00 -7.5167068178764906e-01 + -1.8707692849720141e+00 2.2377340612265342e+00 -9.0362449430119396e-01 + -2.2538038920210934e+00 2.5868752400084034e+00 -1.0343343188738894e+00 + -2.6935469703679651e+00 2.8792302697642622e+00 -1.1444422522949722e+00 + -3.1863135165300225e+00 3.0904766111779418e+00 -1.2460323155325470e+00 + -3.7118348463543116e+00 3.2159342941863267e+00 -1.3606392602512334e+00 + -4.2488102868204241e+00 3.2612690195884300e+00 -1.5082146544084147e+00 + -4.7856181976126164e+00 3.2166181401000604e+00 -1.6925803719339365e+00 + -5.3062212741233594e+00 3.0605598086708161e+00 -1.9011572248265323e+00 + -5.7825420442942903e+00 2.7894566617685892e+00 -2.1196331475764723e+00 + -6.1948805691912279e+00 2.4298830319735503e+00 -2.3326401894666851e+00 + -6.5460279227665561e+00 2.0285984724833162e+00 -2.4965816010743449e+00 + -6.8539184690859170e+00 1.6299816425967102e+00 -2.5599456028581242e+00 + -7.1427783839731589e+00 1.2339703920441540e+00 -2.5393736777870468e+00 + -7.4424079985995535e+00 7.8056182305581534e-01 -2.5238796713972262e+00 + id 14688 + loc 7.8410494327545166e-01 5.4101216793060303e-01 405 + blend 0.0000000000000000e+00 + interp 3.6680390347263370e-01:3.3977625058158145e-01:9.0090870055373862e-02:3.2134409490302251e-01:9.7720953916757425e-01:3.1119475323017515e-01:1.7713349557362181e+00:3.3013088895119330e-01:2.3955638101857764e+00:2.9065017236972018e-01:2.9996494068107777e+00:3.6680023543359896e-01:3.4940406372276778e+00 + CVs 20 + 5.4518723101677921e-02 2.1588815349411075e-01 -2.7267169627105112e-02 + 4.9285390622186953e-02 3.7270586337138240e-01 -4.6935830300088424e-02 + 2.5227519818163791e-02 5.0554117727104253e-01 -6.3570507470736698e-02 + 1.2077839175205329e-02 6.3604916141745238e-01 -7.7995337361054254e-02 + 5.4405968990173248e-03 7.6141999794014825e-01 -8.6389223406567434e-02 + 1.0719324266266206e-03 8.7942003713730299e-01 -8.3146449052825339e-02 + -3.6274660081554444e-03 9.8704152934918432e-01 -6.0764247441764480e-02 + -7.1856598767994218e-03 1.0788354986858277e+00 -1.2701965094120457e-02 + -3.9777405869566573e-03 1.1504300989368736e+00 6.0786455926135671e-02 + 1.0250340071601194e-02 1.2050164376185102e+00 1.5493660992980579e-01 + 3.6136363176067055e-02 1.2488388699949957e+00 2.6968085619523152e-01 + 7.3071242910459910e-02 1.2833084706790798e+00 4.1050286407990849e-01 + 1.2109558703018947e-01 1.3065676015928123e+00 5.7876683052536260e-01 + 1.8054912163066045e-01 1.3269915682687539e+00 7.5961019089091109e-01 + 2.4931710174734839e-01 1.3690831696947925e+00 9.2590094849770832e-01 + 3.2054229195171119e-01 1.4513639985964260e+00 1.0559249994007651e+00 + 3.8699724067420543e-01 1.5666193310737588e+00 1.1478510229540841e+00 + 4.4754280238160815e-01 1.6951559119758430e+00 1.2170859068349587e+00 + 5.4649882782586101e-01 1.7679925189753734e+00 1.4062953498794883e+00 + id 14689 + loc 6.1671626567840576e-01 7.4118852615356445e-01 404 + blend 0.0000000000000000e+00 + interp 3.8126877495439954e-01:3.7685353139031796e-01:3.2521461486129000e-02:2.9170896314640293e-01:6.1736618482475125e-01:3.0097381368745207e-01:1.4135380980959980e+00:3.8126496226665002e-01:2.0017034346943179e+00:3.1976079231392646e-01:2.9482430165824205e+00:3.4715193317361370e-01:3.4744704447849060e+00 + CVs 20 + -2.7746397249992401e-02 6.0078569879843599e-02 1.0618377366244547e-02 + -3.9557519968407451e-02 1.3451726767341685e-01 3.7334285388957451e-02 + -3.5429322332534610e-02 2.2032771602462284e-01 7.7788074111956151e-02 + -1.6650567006341738e-02 3.1089695975155773e-01 1.2602288524143845e-01 + 2.1464397518879130e-02 4.0125408600077106e-01 1.7823822149449647e-01 + 8.2042846319490575e-02 4.8550638522530165e-01 2.3029528455881881e-01 + 1.6464642456470180e-01 5.5733480506315969e-01 2.7865887698891856e-01 + 2.6423574676469230e-01 6.1156590284594503e-01 3.2231485877750010e-01 + 3.7235050411842391e-01 6.4590714523066595e-01 3.6402829429963873e-01 + 4.8148410031181316e-01 6.6035375538307950e-01 4.0754719343082269e-01 + 5.9057215927303197e-01 6.5485327272599303e-01 4.4960674810256729e-01 + 7.0149482057023183e-01 6.2829523916407015e-01 4.7988621082622784e-01 + 8.1267349599654182e-01 5.8089381049103894e-01 4.8869996358208651e-01 + 9.1640763895541255e-01 5.1722671664282016e-01 4.7663115308207582e-01 + 1.0043876409642962e+00 4.4384563342794203e-01 4.5367580480077252e-01 + 1.0723440644730879e+00 3.6318910156953299e-01 4.2561382844333284e-01 + 1.1164728844882776e+00 2.7450488255868338e-01 3.9167724933730985e-01 + 1.1307367827238053e+00 1.7767998461284229e-01 3.4955657376852534e-01 + 1.1580367647420946e+00 1.1301169305224629e-01 3.2316179674963746e-01 + id 14690 + loc 6.1384791135787964e-01 3.3809963613748550e-02 399 + blend 0.0000000000000000e+00 + interp 4.0721015839767127e-01:2.8714646995392734e-01:3.9682363848249391e-01:2.5749417343362463e-01:1.7052752902349790e+00:4.0720608629608729e-01:2.7100859787878138e+00:2.5349932120405011e-01:3.0267049783890014e+00:2.7896699892284466e-01:3.8881187342376702e+00 + CVs 20 + 3.8463208685355610e-01 3.2284031230783128e-01 1.7963175766240158e-01 + 7.3112818807843682e-01 6.3140555105206342e-01 3.8313780505900663e-01 + 1.0483723852641713e+00 9.1322445573553412e-01 6.3003494099423241e-01 + 1.3455453707854417e+00 1.1540145423878716e+00 9.1343843620027598e-01 + 1.6291259907198357e+00 1.3441555956954112e+00 1.2187850660377972e+00 + 1.8995622539044759e+00 1.4787471116597881e+00 1.5408415166909992e+00 + 2.1493396114759133e+00 1.5516196896451282e+00 1.8767966082286940e+00 + 2.3669014934904724e+00 1.5561755175685321e+00 2.2199668605128933e+00 + 2.5399733266171833e+00 1.4913307460177740e+00 2.5610001034244196e+00 + 2.6580231792781994e+00 1.3648986603769022e+00 2.8911443790341496e+00 + 2.7197669635551915e+00 1.1931236492477266e+00 3.2089961563080536e+00 + 2.7424942656841802e+00 9.9233993185142677e-01 3.5322971260424110e+00 + 2.7505401746349203e+00 7.6589997578644775e-01 3.8889794395951243e+00 + 2.7526787244757394e+00 5.2007771834450955e-01 4.2952827988263174e+00 + 2.7408918830044242e+00 2.9810238454071869e-01 4.7509119208486901e+00 + 2.6722553839845609e+00 1.8379159568091774e-01 5.2166304099572853e+00 + 2.4612935041428328e+00 2.6569134427770336e-01 5.5586060745810251e+00 + 2.1216678027228077e+00 5.0462492370063572e-01 5.6060816441021206e+00 + 1.9464079047024527e+00 5.9057585960286119e-01 6.0445681368453865e+00 + id 14691 + loc 8.1317794322967529e-01 7.1366310119628906e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2099877096144309e-01:4.6761373047192700e-01:1.0116481494994112e-02:3.6676680815371815e-01:4.9431779445384272e-01:3.3980175315517080e-01:1.4101592069492304e+00:5.2099356097373350e-01:2.0182224579188053e+00:3.5876535682852378e-01:2.5280442080369174e+00:4.5270622297651225e-01:3.0009997943229103e+00:3.2914537459951676e-01:3.5890280358911739e+00 + CVs 20 + 2.8767473872946703e-02 3.2072362984576280e-01 -3.7433071101510007e-02 + 7.9829743276254306e-02 6.5228487242283439e-01 -8.7245780669931633e-02 + 1.4736759582116293e-01 9.9035219755537351e-01 -1.6749763941547507e-01 + 2.3211864971069773e-01 1.3285756620818825e+00 -2.9157172929740233e-01 + 3.4063466722034869e-01 1.6552812167099540e+00 -4.6892074176875242e-01 + 4.7604716615344200e-01 1.9501152390789964e+00 -7.0947412780521257e-01 + 6.3439687025067160e-01 2.1849381149588738e+00 -1.0178544884407474e+00 + 8.0432574806650559e-01 2.3366040208994217e+00 -1.3858581766682934e+00 + 9.7199720994084582e-01 2.3938982505295354e+00 -1.7962162258700318e+00 + 1.1254623707260132e+00 2.3543692794532554e+00 -2.2291782832730931e+00 + 1.2571923002709195e+00 2.2211155862297138e+00 -2.6659368072648242e+00 + 1.3652502451139834e+00 1.9998608605806969e+00 -3.0893082551111357e+00 + 1.4536157858486758e+00 1.6973215961023256e+00 -3.4830149951859104e+00 + 1.5324137080124562e+00 1.3197083173691619e+00 -3.8303369385140629e+00 + 1.6146433605667310e+00 8.6629332471928677e-01 -4.1068761976805641e+00 + 1.7004295490495469e+00 3.0991501359255724e-01 -4.2456350892776271e+00 + 1.7545739138937209e+00 -3.7641566002075622e-01 -4.0505179426985105e+00 + 1.7410456162696741e+00 -9.5512491108157893e-01 -3.3834388213036526e+00 + 1.8181090314428547e+00 -1.3130461026213549e+00 -3.3164654932457074e+00 + id 14692 + loc 7.6517379283905029e-01 7.0665019750595093e-01 401 + blend 0.0000000000000000e+00 + interp 2.8624235067511289e-01:2.5150563816866334e-01:5.3327612434301042e-01:2.8623948825160617e-01:1.3735300425404626e+00:2.6340492117845415e-01:2.7718210517386890e+00:2.5962484116512735e-01:3.5861774235714625e+00 + CVs 20 + -7.5446206499440019e-02 3.2368007414306799e-01 -2.9160581730596563e-01 + -1.0830767324744001e-01 6.3963045505430915e-01 -5.7689907107253313e-01 + -1.0721218015394751e-01 9.3750227625811411e-01 -8.8052497293467824e-01 + -7.9796421916119409e-02 1.2018876640218157e+00 -1.2166151165015731e+00 + -3.7296585987281639e-02 1.4201204139924373e+00 -1.5981220532916423e+00 + -6.2407562469591893e-03 1.5866952125600302e+00 -2.0374144363167241e+00 + -2.9436509169320946e-02 1.6976797226501323e+00 -2.5306183303749559e+00 + -1.4742125911339954e-01 1.7435579118424092e+00 -3.0482772960575617e+00 + -3.7799837366948985e-01 1.7110434073629628e+00 -3.5395455352354883e+00 + -7.0949134273619474e-01 1.5955535658673843e+00 -3.9503415762927485e+00 + -1.1071832129832084e+00 1.4096729243086616e+00 -4.2416140040955366e+00 + -1.5295118146940510e+00 1.1767744836364737e+00 -4.3998198868558847e+00 + -1.9551187422517504e+00 9.1357775008525410e-01 -4.4446072130202703e+00 + -2.3843380552281115e+00 6.2478736953447433e-01 -4.4080486511601222e+00 + -2.8221557643633455e+00 3.1617019895418152e-01 -4.3129353735922455e+00 + -3.3020770481322952e+00 -2.5224985102451913e-02 -4.2075743049631651e+00 + -3.8656002392822923e+00 -4.2317093109432546e-01 -4.2076221212927525e+00 + -4.4489668994787719e+00 -8.1186384233830533e-01 -4.3973512111739490e+00 + -4.8909495570491925e+00 -1.0438439315040566e+00 -4.5810435986827258e+00 + id 14693 + loc 8.0928391218185425e-01 9.9158346652984619e-01 405 + blend 0.0000000000000000e+00 + interp 4.5423033740260116e-01:2.9054659211022293e-01:3.0022744567293891e-01:3.9175897154264783e-01:1.1364578099037299e+00:2.2728507704590931e-01:1.9395241484159880e+00:4.2914353992391785e-01:2.5332280328191725e+00:4.5422579509922717e-01:3.0065182454717592e+00:2.7711406092588964e-01:3.4979152151036086e+00 + CVs 20 + 3.2661698540886686e-01 3.4697722265097497e-01 -1.0490422089159762e-01 + 4.7861325480574080e-01 5.5310598358256391e-01 -1.8427148750300670e-01 + 5.7035606096636104e-01 6.7739378615874457e-01 -2.4317522605142988e-01 + 6.5994790141313375e-01 7.7444745473609444e-01 -2.8797928053190586e-01 + 7.4243579140889826e-01 8.4476697062672690e-01 -3.2087733545490016e-01 + 8.1231928811348642e-01 8.8974850613404644e-01 -3.4799833372896649e-01 + 8.6321845793737517e-01 9.1498927608295377e-01 -3.8161469238511769e-01 + 8.9221584638141793e-01 9.3710915385861948e-01 -4.3761082169549448e-01 + 9.1215313195834824e-01 9.7833870679550305e-01 -5.1344256762552076e-01 + 9.3763754371273778e-01 1.0324599930729570e+00 -5.7986901770269161e-01 + 9.6294834418109465e-01 1.0778711314359919e+00 -6.2267668274164512e-01 + 9.8015698739905677e-01 1.1097116356563144e+00 -6.4608568190762239e-01 + 9.8646112083646731e-01 1.1292491138469671e+00 -6.5401189147546601e-01 + 9.7654735334213727e-01 1.1229218701406660e+00 -6.4602585791268741e-01 + 9.4163179197870917e-01 1.0641405935694066e+00 -6.1998644010250903e-01 + 8.8198980320461762e-01 9.3934998743099030e-01 -5.6922755629463240e-01 + 8.1354356365872960e-01 7.6328652764087923e-01 -4.8318959799947869e-01 + 7.6009614994930308e-01 5.6298464527852199e-01 -3.5914083079598058e-01 + 7.7659483952832042e-01 4.8892836394023126e-01 -2.6587401326112203e-01 + id 14694 + loc 4.2414340376853943e-01 4.5176339149475098e-01 404 + blend 0.0000000000000000e+00 + interp 4.7338277846868876e-01:4.7337804464090411e-01:3.4110247430953866e-01:3.4956527113913871e-01:1.0127587207099142e+00:4.2998760192758428e-01:1.7893326437063743e+00:3.1577394241059437e-01:2.2249101836180780e+00:3.5241328103550373e-01:3.0302019470549366e+00:3.5493158969122174e-01:3.8887863233061282e+00 + CVs 20 + -7.8178348123995531e-02 1.4223736842511420e-01 -1.1990383020471673e-01 + -1.5345172714514127e-01 2.5895412807879520e-01 -2.1613885401779379e-01 + -2.3246730466685259e-01 3.6603770487465626e-01 -3.1295818331433284e-01 + -3.1814189150677663e-01 4.7138034029561232e-01 -4.2519792289476460e-01 + -4.0951244189657343e-01 5.7372525713078670e-01 -5.5335169391737804e-01 + -5.0510691501122162e-01 6.7175307398409045e-01 -6.9673728573884197e-01 + -6.0483193537731583e-01 7.6478620723309243e-01 -8.5349886973616251e-01 + -7.1100973560813552e-01 8.5335945149682724e-01 -1.0204886089173237e+00 + -8.2753079844747202e-01 9.3906946538160807e-01 -1.1939502709284473e+00 + -9.6058784918109352e-01 1.0246899001877701e+00 -1.3705554055125753e+00 + -1.1180759141441685e+00 1.1128380328215832e+00 -1.5437156838744646e+00 + -1.3115445342298315e+00 1.2033112222923137e+00 -1.7060113843581468e+00 + -1.5493645283726711e+00 1.2918981890966077e+00 -1.8428988238531865e+00 + -1.8347270602810593e+00 1.3704680039635204e+00 -1.9388000581372591e+00 + -2.1705829883930621e+00 1.4321576799872637e+00 -1.9786525663945194e+00 + -2.5547053774344048e+00 1.4820138893087984e+00 -1.9425581412362953e+00 + -2.9604601494598199e+00 1.5387299179844807e+00 -1.8113115063692724e+00 + -3.3412875259776009e+00 1.6126703092772701e+00 -1.5822769263103340e+00 + -3.5090796118201895e+00 1.6499592097033504e+00 -1.4262354784146236e+00 + id 14695 + loc 4.4578582048416138e-01 6.4939320087432861e-02 399 + blend 0.0000000000000000e+00 + interp 4.2905544235113835e-01:2.5434768346701669e-01:8.3867009029612416e-02:3.6709759807857678e-01:8.3065473527688882e-01:4.2905115179671488e-01:1.0777626149486728e+00:2.7774091865396061e-01:1.7559551889532603e+00:4.0146082390449156e-01:2.3971265961436448e+00:2.6715313971893417e-01:2.9790959852563592e+00:4.2616548395841003e-01:3.8788935127544120e+00 + CVs 20 + -1.8191078167543481e-01 2.2848932607708833e-01 2.4814115111216403e-01 + -3.6333120684591008e-01 4.1769754728225106e-01 4.6254248156662542e-01 + -5.4896703506102740e-01 5.7141565277267270e-01 6.5163172765002297e-01 + -7.3926031847033424e-01 6.9438796141470993e-01 8.2184480145888128e-01 + -9.2710094170846113e-01 7.9300917786482794e-01 9.7713442854434240e-01 + -1.0998852128573806e+00 8.7597211734079106e-01 1.1236670224682492e+00 + -1.2451555448147225e+00 9.5410576306875172e-01 1.2631830924465459e+00 + -1.3549056370891817e+00 1.0418261942492126e+00 1.3932113946330134e+00 + -1.4321557571957573e+00 1.1550732751719459e+00 1.5175923767344222e+00 + -1.4943065517611029e+00 1.3025367671299346e+00 1.6533522952490509e+00 + -1.5675786129078815e+00 1.4695129761448422e+00 1.8267695276818299e+00 + -1.6710270547113169e+00 1.5970120396279022e+00 2.0637980421477362e+00 + -1.7925212432875064e+00 1.6114773985785367e+00 2.3718492639389601e+00 + -1.9072781667225731e+00 1.4758375077799397e+00 2.7461271252983845e+00 + -2.0176262968462972e+00 1.1831379195508087e+00 3.1925931774596497e+00 + -2.1874817346515112e+00 7.7896702914064764e-01 3.7319784647001506e+00 + -2.5414081141290508e+00 3.3598009062060741e-01 4.3835528372422745e+00 + -3.2092665883183655e+00 -2.1391743501174343e-02 5.0427850361817974e+00 + -3.6249786403652222e+00 3.1396720375778786e-02 5.3179958835875425e+00 + id 14696 + loc 1.5870249271392822e-01 1.2115151435136795e-01 1079 + blend 0.0000000000000000e+00 + interp 3.3817173085198521e-01:2.7369771859126457e-01:5.8566633754658559e-01:2.7345907636471350e-01:1.1750992404582177e+00:3.1685728068649122e-01:1.8870071043362737e+00:3.3816834913467669e-01:2.7179840020159731e+00:3.2432046843455986e-01:3.6413864436228374e+00 + CVs 20 + 2.5053510346249708e-01 4.3854573943814679e-01 8.1398143429750935e-02 + 3.4497926835111070e-01 7.8998657809324291e-01 1.6117060918066989e-01 + 3.8225976456334926e-01 1.1172678669976661e+00 2.4293243396464398e-01 + 4.1325408877232939e-01 1.4318054701453595e+00 3.3446352842249655e-01 + 4.4688647171632712e-01 1.7318250796198487e+00 4.3516416593193114e-01 + 4.9884018950389319e-01 2.0339942590801048e+00 5.4660656120530726e-01 + 5.6941222464714858e-01 2.4031137384145875e+00 6.4443646604926019e-01 + 5.8332342830109019e-01 2.8982392664537513e+00 6.3061407905585121e-01 + 4.3390998766347444e-01 3.3936055658464488e+00 4.2471736307847946e-01 + 1.6594289439620025e-01 3.7122868349084026e+00 1.1488433800735853e-01 + -1.2217145459690748e-01 3.8558007618425991e+00 -2.0792943087407834e-01 + -3.9302510213030373e-01 3.8778009827351259e+00 -5.3208429317500749e-01 + -6.3332865546747641e-01 3.8096702587538096e+00 -8.7033913890852788e-01 + -8.4895032731068054e-01 3.6532828298906699e+00 -1.2457264869627480e+00 + -1.0602630039731555e+00 3.3767115472199927e+00 -1.6617212475567036e+00 + -1.2295289407380685e+00 2.9712629923766363e+00 -2.0498178089759929e+00 + -1.2690385475674566e+00 2.4633068975219361e+00 -2.3881088600034368e+00 + -1.2079773911765832e+00 1.8768132611015163e+00 -2.5623835834973532e+00 + -1.2465861470359911e+00 1.7123503359525181e+00 -2.2624569471852483e+00 + id 14697 + loc 7.9881000518798828e-01 6.9466865062713623e-01 405 + blend 0.0000000000000000e+00 + interp 4.0318561655248802e-01:3.4329184705357479e-01:3.7514111657302207e-01:3.8319547126609227e-01:9.9952508840213405e-01:2.7739698233553484e-01:1.6877686273638048e+00:3.0313659920988079e-01:2.1757279553735489e+00:4.0318158469632254e-01:2.9234514687378734e+00:3.2058756154923568e-01:3.7917469507927737e+00 + CVs 20 + 1.7913323279453358e-01 2.8452673459150335e-01 -1.0697364775364160e-01 + 2.3821692717293907e-01 4.9670513314171777e-01 -2.0512541070851217e-01 + 2.6757907546283866e-01 6.5412020339932764e-01 -2.8930689067347903e-01 + 2.9519888927053184e-01 8.0572075097151497e-01 -3.6453601741624703e-01 + 3.1778812752033092e-01 9.5777473990267736e-01 -4.2557723356876231e-01 + 3.3401546094527534e-01 1.1194685284113381e+00 -4.6102602495162243e-01 + 3.4447870378367840e-01 1.3011308263132348e+00 -4.4591255952148817e-01 + 3.5406430828766899e-01 1.4928849566426940e+00 -3.3903923091609589e-01 + 3.7338046214684462e-01 1.6369106036442562e+00 -1.3267864980407362e-01 + 4.0602161153427652e-01 1.6978875173010080e+00 9.5421171969097482e-02 + 4.4288375679799441e-01 1.7140706846328726e+00 2.9327186777981468e-01 + 4.7566973784166833e-01 1.7165573373766803e+00 4.7230032664210708e-01 + 5.0101362532241267e-01 1.7130039679960971e+00 6.5072022774742311e-01 + 5.1748783480945360e-01 1.7123290160813927e+00 8.2847349313574425e-01 + 5.2235341498963006e-01 1.7351668405277878e+00 9.8912215254606362e-01 + 5.1001859200749933e-01 1.7987396627621863e+00 1.1146269828718314e+00 + 4.7712780779890307e-01 1.8952728953111670e+00 1.2044287917389751e+00 + 4.2884224821514494e-01 2.0041989870120638e+00 1.2737905774751761e+00 + 4.3535685068412644e-01 2.0870144036477374e+00 1.4215815165130041e+00 + id 14698 + loc 4.8231062293052673e-01 9.3738973140716553e-01 404 + blend 0.0000000000000000e+00 + interp 4.3685176722326047e-01:3.5504618148561345e-01:6.9715514997397943e-01:2.8195249237833264e-01:1.1747361910421263e+00:2.6689063074716057e-01:1.9820587932764462e+00:3.2307219127573295e-01:2.9657525175796140e+00:4.0965303024748234e-01:3.3131852158927071e+00:4.3684739870558825e-01:3.9475760910327646e+00 + CVs 20 + 1.2353803314954531e-01 2.0346230519365366e-01 2.0555004992505448e-02 + 2.3968269665802930e-01 4.0249345454543006e-01 5.1812635651090511e-02 + 3.6642093824769117e-01 5.8026247813296450e-01 6.7169694540347463e-02 + 5.0651644907149596e-01 7.3994904864815159e-01 6.8569859089121998e-02 + 6.5858868032573936e-01 8.7835270572474911e-01 5.4819917417961328e-02 + 8.1897454441680251e-01 9.9447508757667025e-01 2.6738761720852655e-02 + 9.8327466980348588e-01 1.0901872713967649e+00 -1.1941989247198470e-02 + 1.1479044397056377e+00 1.1720502101416292e+00 -5.2219973971675437e-02 + 1.3116025403546272e+00 1.2485426827088517e+00 -8.2856782885977531e-02 + 1.4733274501937195e+00 1.3224841108658012e+00 -1.0093724310611435e-01 + 1.6264365502995768e+00 1.3850265031108870e+00 -1.2586673789582592e-01 + 1.7601089339285947e+00 1.4273231730541860e+00 -1.8023664136324680e-01 + 1.8672856671049429e+00 1.4520686663561908e+00 -2.6217330388698767e-01 + 1.9525359833893647e+00 1.4709615322022613e+00 -3.4546328336963467e-01 + 2.0268275990291840e+00 1.4916715703506989e+00 -4.0566195729486143e-01 + 2.0870197047861141e+00 1.5102709403376773e+00 -4.4552753711327264e-01 + 2.1207568349872874e+00 1.5206887031758785e+00 -4.7742654343827817e-01 + 2.1240652375484230e+00 1.5196643849482185e+00 -5.0233712661994889e-01 + 2.1500333184242506e+00 1.5442417358904870e+00 -4.5272804090610813e-01 + id 14699 + loc 6.9271397590637207e-01 9.9979954957962036e-01 399 + blend 0.0000000000000000e+00 + interp 3.8396557107243395e-01:2.5481464625019484e-01:3.4982192597276118e-01:3.8396173141672324e-01:1.7257267510209420e+00:2.6384915248556035e-01:2.1062922421244230e+00:2.7552257898105775e-01:3.1665267321619668e+00:3.5631988141094606e-01:3.9388432284406774e+00 + CVs 20 + -1.2421774281037942e-01 3.1976026836223226e-01 -2.5581264916680818e-01 + -2.6419122044083254e-01 6.1515874407824800e-01 -5.0499266419345457e-01 + -4.2039347136388427e-01 8.7773530339832107e-01 -7.4810723987822014e-01 + -5.9212899011626474e-01 1.0998092714641947e+00 -9.8335093351074276e-01 + -7.7636395006893688e-01 1.2764112275934485e+00 -1.2063762164509793e+00 + -9.6703050575593730e-01 1.4089922493128391e+00 -1.4112003950623504e+00 + -1.1588728894103255e+00 1.5033980601700634e+00 -1.5966672335482004e+00 + -1.3480282450561769e+00 1.5648114993351476e+00 -1.7652054607774736e+00 + -1.5334265537760456e+00 1.6119458752591025e+00 -1.9155746542351446e+00 + -1.7260219642108519e+00 1.6814691646869198e+00 -2.0533866301136730e+00 + -1.9333017334612821e+00 1.7726583550737287e+00 -2.2012982870111197e+00 + -2.1097965787682784e+00 1.8153605211758399e+00 -2.3653908427388899e+00 + -2.1992224166969705e+00 1.7672703033821358e+00 -2.5306450465297718e+00 + -2.2416953353516256e+00 1.6662654551175824e+00 -2.7136064696128344e+00 + -2.3143395530600053e+00 1.5522801659492989e+00 -2.9300885769876217e+00 + -2.3707456714019259e+00 1.3391304593421929e+00 -3.1320267848618242e+00 + -2.2798875475564433e+00 8.1573277476993411e-01 -3.2466740622622483e+00 + -2.2736009519487448e+00 -4.0091410430311225e-02 -3.3135028472192900e+00 + -2.6383685268147992e+00 -9.2602192142062167e-02 -3.4080825354833726e+00 + id 14700 + loc 6.6513484716415405e-01 7.0708936452865601e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3353786736976363e-01:4.3353353199108996e-01:1.0438674569357431e-04:3.9261347140445074e-01:4.4755285434059200e-01:3.2881441156184538e-01:1.1841640646265796e+00:2.7169450686339314e-01:1.9908743740209380e+00:3.6344433136191534e-01:2.4678645638849872e+00:3.2377958042582328e-01:3.4339469669198293e+00 + CVs 20 + 6.6425676518854143e-02 3.5676880105896486e-01 -3.6937004881040791e-03 + 1.5775462823937203e-01 6.9911070701967659e-01 -2.7497930915200641e-02 + 2.6440740223997683e-01 1.0328121734130686e+00 -7.1283486254208328e-02 + 3.8447161281564801e-01 1.3571110332919720e+00 -1.3676356353395414e-01 + 5.2165292674392105e-01 1.6653614324516433e+00 -2.3009436227862190e-01 + 6.7761492844046922e-01 1.9473241829444345e+00 -3.6161126566615209e-01 + 8.5047139689455120e-01 2.1894500824230780e+00 -5.4187517401834417e-01 + 1.0334661120574675e+00 2.3797801889482626e+00 -7.7304878755330209e-01 + 1.2170563208634300e+00 2.5110460314396099e+00 -1.0488089202730189e+00 + 1.3918552835373377e+00 2.5798068155771743e+00 -1.3588566778379547e+00 + 1.5501202698033918e+00 2.5857843512589040e+00 -1.6914476145791741e+00 + 1.6861049840798832e+00 2.5311607292948630e+00 -2.0345510826226021e+00 + 1.7960906652392761e+00 2.4200900025367336e+00 -2.3762885183139026e+00 + 1.8785030660579753e+00 2.2576438441236220e+00 -2.7058060353374951e+00 + 1.9336917791168826e+00 2.0446642517644098e+00 -3.0154330317980604e+00 + 1.9634154755362538e+00 1.7577828216796942e+00 -3.3035143253561898e+00 + 1.9685639874366558e+00 1.3238993298476089e+00 -3.5475579792872138e+00 + 1.9367918260187342e+00 7.4201231345625063e-01 -3.6293370128355669e+00 + 1.8658279951596970e+00 5.3513669869972968e-01 -3.6364556634966574e+00 + id 14701 + loc 6.2659764289855957e-01 4.4715809822082520e-01 405 + blend 0.0000000000000000e+00 + interp 3.9893805786499542e-01:3.4851147449116943e-01:2.7638591427818271e-01:3.9893406848441682e-01:9.9736595263346173e-01:3.5850816210711051e-01:1.5875234133547975e+00:3.4212119318009471e-01:2.1946112379588651e+00:3.4851901598906215e-01:3.0001747805930301e+00:3.6373848166398720e-01:3.6851096419970344e+00 + CVs 20 + -2.5234846940488012e-02 1.7672011927522308e-01 2.0277820964312569e-02 + -7.5857136102105427e-03 3.1245951684232282e-01 2.8039581150255021e-02 + 2.5420701668572993e-02 4.2102442672145363e-01 2.3414049653845526e-02 + 5.0285036800083588e-02 5.2305956736225512e-01 7.2098334352336327e-03 + 6.8606002370283442e-02 6.1642409372394402e-01 -1.9974801147457446e-02 + 8.1254120274696695e-02 6.9846151371830034e-01 -5.6746406528810994e-02 + 8.8200868773847918e-02 7.6676262176770860e-01 -1.0106538753488602e-01 + 8.9404136575690685e-02 8.1953673628406820e-01 -1.5109430654404193e-01 + 8.5385682825209808e-02 8.5568431723236371e-01 -2.0646081063077193e-01 + 7.7149599466417529e-02 8.7381197502018881e-01 -2.6936692866728756e-01 + 6.5446312820584329e-02 8.7133508758885092e-01 -3.4345256972747751e-01 + 5.0578427436124784e-02 8.4463293520242033e-01 -4.3303490059897620e-01 + 3.2876154742870090e-02 7.8848607970049711e-01 -5.4168398527968942e-01 + 1.3405259314191176e-02 6.9675782631704841e-01 -6.6998664523764639e-01 + -7.8851736242229187e-03 5.6807903653311254e-01 -8.1961451364792703e-01 + -3.8292640717439333e-02 4.1407834771119983e-01 -1.0029624570659221e+00 + -9.4415036952132089e-02 2.6008469246911603e-01 -1.2357695568243310e+00 + -1.9291790725085151e-01 1.3333960088035127e-01 -1.5194569319238231e+00 + -2.6367822849801081e-01 -2.2456294228780520e-02 -1.8569411456319427e+00 + id 14702 + loc 8.7936711311340332e-01 2.3008283227682114e-02 399 + blend 0.0000000000000000e+00 + interp 4.2965336759395667e-01:2.7733427428678303e-01:2.4897567764494977e-01:4.2964907106028077e-01:9.9912619804753200e-01:2.4274826070519651e-01:2.0015825457891565e+00:3.6897200184460677e-01:2.8526957160228537e+00:2.4080234647585469e-01:3.5360753359182238e+00 + CVs 20 + 1.6658180864870151e-01 2.0847224585063054e-01 1.0869587203128990e-01 + 3.2910961584936221e-01 4.2581825485139913e-01 2.5128893853936562e-01 + 4.9081644199683377e-01 6.4319797909388465e-01 4.0849125570152267e-01 + 6.5766789314105001e-01 8.5303064105170701e-01 5.6738917338879069e-01 + 8.3558481551014652e-01 1.0480379952998433e+00 7.2413666000732380e-01 + 1.0228586043450072e+00 1.2159287201621511e+00 8.7469181956436159e-01 + 1.2119036440465827e+00 1.3455730056507655e+00 1.0181928411010124e+00 + 1.3938248204783776e+00 1.4304938576157078e+00 1.1549179549642783e+00 + 1.5626802777168882e+00 1.4679107273097771e+00 1.2821828076389821e+00 + 1.7169067474801802e+00 1.4562780491286795e+00 1.3976566755061066e+00 + 1.8557287608973070e+00 1.3969355972330622e+00 1.4966190901940370e+00 + 1.9781386885330956e+00 1.2979424459025852e+00 1.5675808857261280e+00 + 2.0872081814329770e+00 1.1782059925792665e+00 1.6025127691671655e+00 + 2.1907925901578835e+00 1.0587070156688423e+00 1.6129917921431061e+00 + 2.2948291265853666e+00 9.1719090030902684e-01 1.6216385005402685e+00 + 2.4005558704282883e+00 6.4371565863764735e-01 1.6376958192751152e+00 + 2.5391657082923094e+00 7.6869754546556313e-02 1.7562584664972141e+00 + 2.7478528717074866e+00 -5.1492355245376698e-01 2.2191090577370645e+00 + 2.8279252640472285e+00 -5.1784851347962324e-01 2.4483893526960392e+00 + id 14703 + loc 2.7566093206405640e-01 1.7543345689773560e-01 394 + blend 0.0000000000000000e+00 + interp 5.3568975917702044e-01:2.6945380306660477e-01:8.3128104526714097e-01:3.2185027975853414e-01:1.6416100736878638e+00:5.0329922806836702e-01:2.4429119888110020e+00:3.1385271331718911e-01:2.9721167707325362e+00:4.7008854877946243e-01:3.3672764747227815e+00:5.3568440227942871e-01:3.9504937925047892e+00 + CVs 20 + -1.1865407875772328e-01 2.6439459022388861e-01 1.7731832777630299e-01 + -2.2326958141588710e-01 5.3551204786240236e-01 3.8386425078638414e-01 + -3.1492555374981918e-01 8.0329895468271095e-01 5.9765908064576134e-01 + -3.9980866349110439e-01 1.0691006259160505e+00 8.0786780898458421e-01 + -4.8748342009619905e-01 1.3390004468999090e+00 1.0115885051686844e+00 + -5.8967517974916261e-01 1.6148644027621590e+00 1.2110516644948079e+00 + -7.1873960573952911e-01 1.8922407041319813e+00 1.4138222576386721e+00 + -8.8478279308204988e-01 2.1628081169287960e+00 1.6262057329846993e+00 + -1.0953406463597262e+00 2.4174095389449990e+00 1.8499982291598966e+00 + -1.3562277444792030e+00 2.6444242628287884e+00 2.0850166857206927e+00 + -1.6713242918479567e+00 2.8267356746249090e+00 2.3343831874862930e+00 + -2.0417818274482817e+00 2.9366874378616403e+00 2.6050547960332469e+00 + -2.4483570551155784e+00 2.9351812446490806e+00 2.8928217503160614e+00 + -2.8284722068342791e+00 2.8144413050709258e+00 3.1662023275628486e+00 + -3.1253567714263752e+00 2.6373302911035257e+00 3.3930401960842613e+00 + -3.3412792283923629e+00 2.4744519095163882e+00 3.5661595689072998e+00 + -3.5054474571605492e+00 2.3586934751774917e+00 3.6849649686888641e+00 + -3.6496255269662203e+00 2.2831357432588928e+00 3.7748939606948202e+00 + -3.8690946123581256e+00 2.1649064254239607e+00 4.0451050182089823e+00 + id 14704 + loc 7.9274505376815796e-02 5.5898821353912354e-01 404 + blend 0.0000000000000000e+00 + interp 4.7708332931034331e-01:3.8390022979633054e-01:2.6666937807171354e-01:4.7707855847705022e-01:1.0851326902259633e+00:3.4614253530856748e-01:1.6158061854506878e+00:3.6018488241728586e-01:2.4529923793137218e+00:4.1233599924006104e-01:2.9948738358263958e+00:3.1983924932534669e-01:3.4178109987731125e+00 + CVs 20 + -1.8796565183009858e-02 1.1872417240592728e-01 4.2708420350373658e-02 + -3.7928190134110418e-02 2.1688283403912795e-01 8.8406612718424760e-02 + -5.1070516960790291e-02 3.0538933093924092e-01 1.2581079516070795e-01 + -4.1400593878929970e-02 3.8665666860309722e-01 1.5395710837478113e-01 + -6.2271178170350827e-03 4.5911544010421756e-01 1.7228317601882615e-01 + 5.4712430239358123e-02 5.2519012619413608e-01 1.7799695716466779e-01 + 1.3989074398258730e-01 5.8809502254479140e-01 1.6663759923782873e-01 + 2.4579194138803581e-01 6.4973009352472122e-01 1.3261089892228520e-01 + 3.6663981705223009e-01 7.1044379379373179e-01 7.0336950870460657e-02 + 4.9351558805778745e-01 7.6805393050000026e-01 -2.4996723852217212e-02 + 6.1478681508846222e-01 8.1747022505849154e-01 -1.5618558212510608e-01 + 7.2085219623821462e-01 8.5384911137772090e-01 -3.2293426487464982e-01 + 8.0545023706408092e-01 8.7485536061629199e-01 -5.2362256848798894e-01 + 8.6113251260006263e-01 8.7895051976871597e-01 -7.5578621164564475e-01 + 8.7803035939422802e-01 8.6354188289884426e-01 -1.0154310405866056e+00 + 8.4324732105321110e-01 8.2750889646690751e-01 -1.2962813934190642e+00 + 7.4178494131544814e-01 7.7439103551610189e-01 -1.5859276569011629e+00 + 5.6142937216487776e-01 7.0814455361578743e-01 -1.8625968769674741e+00 + 4.2119205763473350e-01 6.1731335191943582e-01 -2.0224294202570459e+00 + id 14705 + loc 6.1003667116165161e-01 2.4658374488353729e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4141606007442585e-01:4.4141164591382515e-01:3.5663632256643774e-01:3.4562900192648249e-01:9.0757567966681474e-01:3.1509787447223120e-01:1.2229541483152628e+00:3.0439864246401649e-01:1.9972482737603485e+00:3.5538423373025879e-01:2.8690484642913887e+00:2.9934236668885661e-01:3.8231311352148176e+00 + CVs 20 + -2.5921066036071999e-02 4.3291538755058206e-01 -1.8461430384030628e-01 + -1.0012245231287520e-01 8.3477887472564083e-01 -2.7699896329461587e-01 + -2.2204850702106038e-01 1.2137012765473096e+00 -3.2636264419454841e-01 + -3.9598580089722424e-01 1.5661569967147324e+00 -3.4139514857541137e-01 + -6.2304276999020669e-01 1.8661538519440266e+00 -3.1000520532393316e-01 + -8.9553738401412208e-01 2.0762493330431617e+00 -2.2769189601629602e-01 + -1.1899688973092091e+00 2.1594130566994729e+00 -1.1196970365254844e-01 + -1.4725379324532755e+00 2.1088190391081159e+00 -2.3999544448570775e-03 + -1.7217655417429258e+00 1.9552875580955382e+00 7.2740394983784984e-02 + -1.9406559080464207e+00 1.7346536806536133e+00 1.2081413528853324e-01 + -2.1343352602057108e+00 1.4592184049653274e+00 1.6281600738899413e-01 + -2.2885576937238299e+00 1.1291906957544966e+00 2.0952703301929942e-01 + -2.3729892308331832e+00 7.4449717618515510e-01 2.6874257467203994e-01 + -2.3384930682550191e+00 3.0903109202535883e-01 3.4955920255543038e-01 + -2.1101634282717949e+00 -1.4150738710247113e-01 4.4810137213581036e-01 + -1.6481691663909865e+00 -5.2693003731029708e-01 5.7459892490552156e-01 + -9.4976093093695058e-01 -7.5412255953963214e-01 8.0327111989465239e-01 + -1.4366315605535318e-01 -7.0580868351773329e-01 1.1348647684786273e+00 + 2.2772263111242075e-01 -7.8084542451467664e-01 1.2400130839770052e+00 + id 14706 + loc 5.6506085395812988e-01 9.9349611997604370e-01 405 + blend 0.0000000000000000e+00 + interp 4.8918954347653748e-01:3.1334223860536020e-01:8.7805280950625009e-01:3.9118160372718253e-01:1.0449404486583773e+00:2.1245963460898706e-01:2.0146293724419841e+00:4.3292057650889809e-01:2.8675831934286728e+00:4.3517857477327176e-01:3.3815270705720817e+00:4.8918465158110275e-01:3.9997827541267164e+00 + CVs 20 + 2.6729577689469181e-01 3.4822922796669398e-01 -2.7252759927882040e-02 + 3.7272017951889858e-01 5.6008284283693843e-01 -5.0038532288310518e-02 + 4.3213114822557108e-01 7.2061102342369754e-01 -6.6314394966144372e-02 + 5.0473869016139461e-01 8.6561969907636371e-01 -7.5482206945886754e-02 + 5.8581730201014159e-01 9.9126518632900518e-01 -7.3289185522967565e-02 + 6.7187072014692473e-01 1.0951695787595734e+00 -5.6089677389235065e-02 + 7.6085762118848632e-01 1.1753606356582504e+00 -2.1026792061343613e-02 + 8.5180141955287147e-01 1.2289394631663664e+00 3.2623065878184740e-02 + 9.4479432232424654e-01 1.2528939488998418e+00 1.0190089399130492e-01 + 1.0410844116544831e+00 1.2461545882053437e+00 1.8095479816503635e-01 + 1.1422671952532042e+00 1.2099709078342491e+00 2.6271034358059331e-01 + 1.2490408439301670e+00 1.1472502954319324e+00 3.3961728192996454e-01 + 1.3598605606687888e+00 1.0613405707602941e+00 4.0382921309852698e-01 + 1.4707687952379003e+00 9.5380148344716154e-01 4.4844925356729359e-01 + 1.5773454315473150e+00 8.2524673720679298e-01 4.6987816391542703e-01 + 1.6754156408393204e+00 6.8007487004191680e-01 4.6893221787805672e-01 + 1.7625971153363711e+00 5.2542320062501657e-01 4.4967730272484174e-01 + 1.8461166882512750e+00 3.6156519104489049e-01 4.2051640238025517e-01 + 1.9744115225537624e+00 2.4648821374921032e-01 3.8002755577643221e-01 + id 14707 + loc 5.3158547729253769e-02 2.3528015613555908e-01 399 + blend 0.0000000000000000e+00 + interp 4.5115869815449366e-01:4.5115418656751216e-01:2.9159418589996644e-01:2.6496935038396663e-01:1.0114769153555541e+00:4.1038973743663409e-01:1.3431631471685965e+00:3.5534008453816457e-01:2.0525053613893500e+00:2.9905609529324884e-01:3.0025381337607318e+00:2.7535925244509180e-01:3.8233988649403101e+00 + CVs 20 + -7.3162364073568256e-02 2.8585256560110378e-01 2.0051485417254244e-01 + -1.8164989138447055e-01 5.6274731451248905e-01 3.8936397568570225e-01 + -3.1529544358197209e-01 8.2375810541922789e-01 5.6106068595744130e-01 + -4.6319713809503199e-01 1.0650074292160703e+00 7.1792209960011910e-01 + -6.1576110446821075e-01 1.2850842349651592e+00 8.6656411832646052e-01 + -7.6337013901555284e-01 1.4832606878375891e+00 1.0127633751283711e+00 + -9.0033548479475745e-01 1.6591376124916550e+00 1.1580263966870672e+00 + -1.0241560747450023e+00 1.8141375624867757e+00 1.3004385227061079e+00 + -1.1357157616463867e+00 1.9529539565763354e+00 1.4396756806889766e+00 + -1.2406815404026925e+00 2.0817859109978505e+00 1.5808797746553074e+00 + -1.3496174308685902e+00 2.1985509718351741e+00 1.7332987368894885e+00 + -1.4683514409453087e+00 2.2722709447929477e+00 1.9018483073485424e+00 + -1.5825146149342801e+00 2.2622476760789412e+00 2.0728347762696400e+00 + -1.6656928503645101e+00 2.1512673492763286e+00 2.2286433753324020e+00 + -1.6940141121479488e+00 1.9237507945087513e+00 2.3700476506568484e+00 + -1.6819121597016853e+00 1.5706137556198665e+00 2.5421451856260395e+00 + -1.7049852593221326e+00 1.1024895158658274e+00 2.8372839900093210e+00 + -1.9191988960488084e+00 6.0621694043502994e-01 3.2470576263884179e+00 + -2.1694970385410359e+00 5.1542407801131362e-01 3.2512107474065619e+00 + id 14708 + loc 2.4843560159206390e-01 7.7198743820190430e-01 394 + blend 0.0000000000000000e+00 + interp 4.8200467603188452e-01:2.6581383467457576e-01:9.5578469327212479e-01:3.9491514276364009e-01:1.8122145572413468e+00:4.6568121700274506e-01:2.0607253751450285e+00:4.8199985598512424e-01:2.8266161965201868e+00:4.2961646076082322e-01:3.3422712691609577e+00:4.1100415451103312e-01:3.9998584749521697e+00 + CVs 20 + -1.7769709945240098e-01 1.6628167522280762e-01 -1.0616899139377911e-01 + -3.7641914536546162e-01 3.3321287725233018e-01 -2.1082681610777310e-01 + -5.8738543649341601e-01 5.0802934849914683e-01 -3.0993938236302643e-01 + -8.0491137688827519e-01 6.9759308891615790e-01 -4.0163619750662399e-01 + -1.0273655606669339e+00 9.0690052332078452e-01 -4.8797378437265670e-01 + -1.2521357536882600e+00 1.1330883930000939e+00 -5.7786405553029530e-01 + -1.4733396154069491e+00 1.3570127825709317e+00 -6.8734707217459934e-01 + -1.6839520318480097e+00 1.5564722164334661e+00 -8.2347090885299556e-01 + -1.8892109134981676e+00 1.7333561611804715e+00 -9.8296621319600375e-01 + -2.1044535147204702e+00 1.9002779613668914e+00 -1.1712407303866383e+00 + -2.3258042094552271e+00 2.0402612548968015e+00 -1.4013329574280093e+00 + -2.5214216812795174e+00 2.1160374709508574e+00 -1.6635979761182327e+00 + -2.6666567150353990e+00 2.1096978227738354e+00 -1.9270684739190687e+00 + -2.7550663115254062e+00 2.0149622508910534e+00 -2.1657790949339653e+00 + -2.7817996973995713e+00 1.8521624234741787e+00 -2.3564052311852919e+00 + -2.7426457264976087e+00 1.6854098582717341e+00 -2.4818970494974746e+00 + -2.6414838157881162e+00 1.5575441923212092e+00 -2.5500366836551756e+00 + -2.5446076615664928e+00 1.4136975794026672e+00 -2.6085088671267966e+00 + -2.6703289292404224e+00 1.1573641157410717e+00 -2.7079302895031536e+00 + id 14709 + loc 3.4033281262964010e-03 1.9091586768627167e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4208729051182127e-01:2.9648722945620509e-01:6.9104735283910612e-01:4.4208286963891619e-01:1.0007428287968061e+00:4.0987482974976663e-01:1.4442380180014878e+00:3.6248283532530629e-01:2.0054409401383864e+00:2.1928648957441310e-01:2.8571266520597334e+00:3.2975592921692409e-01:3.8143433989393878e+00 + CVs 20 + 1.9586803304838943e-01 4.4093373928638746e-01 1.9246908563521722e-01 + 2.6194737106962196e-01 7.5428733192755115e-01 3.1788752608696458e-01 + 2.7789713204729322e-01 1.0175564384193057e+00 4.0909639124375086e-01 + 2.8729746997582373e-01 1.2468786219784760e+00 4.8960064053818847e-01 + 2.9955211488401268e-01 1.4215385758207137e+00 5.5880760976954047e-01 + 3.4864023100779096e-01 1.5095131750189030e+00 6.2259407758353258e-01 + 5.0496695438080474e-01 1.4973978416350360e+00 6.8778221667496808e-01 + 8.6890536241406879e-01 1.4570899521532279e+00 7.4524773544494172e-01 + 1.4269050526671947e+00 1.5877309840666456e+00 7.6173034499987513e-01 + 1.8998728132404117e+00 1.9558216732366545e+00 7.2404646797163408e-01 + 2.1249754450483396e+00 2.3584080458967058e+00 6.6467913077538765e-01 + 2.1668606760915159e+00 2.6609672441393584e+00 6.0728508766718581e-01 + 2.1037867121889136e+00 2.8448973872463110e+00 5.5867361711881802e-01 + 1.9752460329420090e+00 2.9343015580116587e+00 5.1911879133466121e-01 + 1.7802456364626704e+00 3.0070680503501972e+00 4.7182275313013500e-01 + 1.4425679195335859e+00 3.1887924694366996e+00 3.8941593973989852e-01 + 9.0491680736796853e-01 3.3842640391247576e+00 2.7851500729758449e-01 + 5.0300910525731046e-01 3.2687099220877447e+00 1.7382903021995622e-01 + 7.0150352461033305e-01 2.7751747140031999e+00 5.3098010961193709e-02 + id 14710 + loc 9.4447451829910278e-01 2.2724735736846924e-01 404 + blend 0.0000000000000000e+00 + interp 4.2773097071778327e-01:3.2749127711903259e-01:6.4418433106335438e-02:3.2705924758631472e-01:9.7398884708822964e-01:2.9019594629692830e-01:1.9888927756193207e+00:2.9768049820862352e-01:2.9929373584699270e+00:4.2772669340807612e-01:3.7634732038157566e+00 + CVs 20 + 4.2524472276253625e-02 2.1019122557757505e-01 1.1821036331219600e-01 + 9.5742933431756133e-02 4.1183050044778757e-01 2.3338045470641341e-01 + 1.2580812505930494e-01 6.2109569122513497e-01 3.5404469399876248e-01 + 1.2105344005786772e-01 8.3765853083069963e-01 4.8179554646501316e-01 + 7.5953241553886164e-02 1.0565492601189292e+00 6.1569702751057032e-01 + -1.4579631766167389e-02 1.2709704606723589e+00 7.5083587516077366e-01 + -1.5100486047074824e-01 1.4727483373809185e+00 8.7865949695147272e-01 + -3.2784047440340935e-01 1.6547683625200851e+00 9.8986633113168465e-01 + -5.3664200429184528e-01 1.8124388678115875e+00 1.0761715586978724e+00 + -7.6730148657369890e-01 1.9437595090176236e+00 1.1312363037034405e+00 + -1.0131178225845994e+00 2.0512448742395257e+00 1.1610577955963814e+00 + -1.2869918932171831e+00 2.1429513417911696e+00 1.1987587190561069e+00 + -1.6117559174416687e+00 2.2227148502030691e+00 1.3004670314339308e+00 + -1.9659741520447649e+00 2.2786198578481081e+00 1.5065411085319063e+00 + -2.2947556222742760e+00 2.2963555619568896e+00 1.7987081135484693e+00 + -2.5738505458112444e+00 2.2724166949911959e+00 2.1515891934832738e+00 + -2.7918766558880144e+00 2.2059625909795337e+00 2.5618028934330570e+00 + -2.9340028076912930e+00 2.1021216258344166e+00 3.0060208401141528e+00 + -3.0667985368505803e+00 2.0483347770345697e+00 3.1719964559079434e+00 + id 14711 + loc 9.4646096229553223e-01 2.7894473075866699e-01 405 + blend 0.0000000000000000e+00 + interp 6.1989180640520525e-01:6.1988560748714128e-01:6.8437254747346699e-01:4.9252116268285040e-01:1.0029986316511086e+00:5.6522880434577427e-01:1.4433435867911173e+00:3.5966743423495356e-01:1.9996818737790778e+00:3.6650301008900582e-01:2.5254738787394979e+00:2.9865236215139163e-01:3.0001050527761333e+00:3.1904469838775779e-01:3.9545353350210228e+00 + CVs 20 + -2.3741003212519984e-02 1.0183484365356038e-01 7.7265615428761814e-02 + -7.1955964603476613e-03 1.9176923423238251e-01 1.6088623833423621e-01 + 3.8004941108104429e-02 2.6131289177215433e-01 2.4736075896995274e-01 + 9.6937058245905539e-02 3.3226270457557605e-01 3.4535379401716704e-01 + 1.7492044769453832e-01 4.0641575433288429e-01 4.5128064085275954e-01 + 2.7949299134745398e-01 4.8368746200440016e-01 5.5875413512129901e-01 + 4.1930303690188814e-01 5.6230811574106376e-01 6.5778347406557169e-01 + 6.0155458518814831e-01 6.3785754721382115e-01 7.3347852007484349e-01 + 8.2757560387804729e-01 7.0302719346060738e-01 7.6640897775479666e-01 + 1.0875862410071313e+00 7.4828147793980748e-01 7.3655643285301386e-01 + 1.3600690998926466e+00 7.6438782782069259e-01 6.3020787497248687e-01 + 1.6172467066286087e+00 7.4401259767792594e-01 4.4452465190816526e-01 + 1.8309599869206425e+00 6.8061843733311400e-01 1.9223531900001722e-01 + 1.9823233109343135e+00 5.7465908311797287e-01 -1.0150602468176512e-01 + 2.0649383848478604e+00 4.4870034683074411e-01 -4.2631040278361310e-01 + 2.0691419260503929e+00 3.4950415610965480e-01 -7.9782017059371357e-01 + 1.9716444570409428e+00 3.3589668917966953e-01 -1.2210144385773263e+00 + 1.7621491055707224e+00 4.3685291242622093e-01 -1.6415009916985168e+00 + 1.7162975737497170e+00 4.1607834702045110e-01 -1.8631099865308944e+00 + id 14712 + loc 9.6510732173919678e-01 8.5582190752029419e-01 1079 + blend 0.0000000000000000e+00 + interp 4.8305846486012383e-01:3.4373134537296568e-01:6.8325318350505637e-01:4.8305363427547526e-01:1.0236606488052820e+00:3.1849514309450655e-01:1.7812846035094889e+00:2.4073718881219539e-01:2.8399213274304600e+00:2.0965571804815766e-01:3.6756997643276392e+00 + CVs 20 + 3.2048123625690754e-02 2.5822193452524289e-01 -6.4009975379279882e-02 + 9.0485124964615971e-02 5.4113148467345251e-01 -1.0302365568833685e-01 + 1.8033302695036665e-01 8.4400087773745391e-01 -1.4451542290913594e-01 + 3.0233539185218050e-01 1.1534944995374756e+00 -2.0791414872028224e-01 + 4.5690772117134215e-01 1.4620110932512240e+00 -3.0116527914150293e-01 + 6.4389210260297569e-01 1.7602338982097554e+00 -4.3167099708110612e-01 + 8.6109831077824051e-01 2.0313384663058867e+00 -6.0459139325290645e-01 + 1.1004430920702133e+00 2.2556064969443108e+00 -8.1794662874719382e-01 + 1.3488519325763364e+00 2.4215178199173217e+00 -1.0640135837867972e+00 + 1.5922009552882161e+00 2.5268917256206853e+00 -1.3338031822489196e+00 + 1.8170205954444418e+00 2.5753923793932092e+00 -1.6187514617953211e+00 + 2.0105266434061031e+00 2.5755878512304013e+00 -1.9112120249490814e+00 + 2.1605777351972901e+00 2.5398364495006760e+00 -2.2049530128148906e+00 + 2.2554452975284303e+00 2.4828584360420014e+00 -2.4973645263582482e+00 + 2.2885467846903804e+00 2.4207051072950048e+00 -2.7995711389335463e+00 + 2.2728812868222708e+00 2.3699191199411787e+00 -3.1670896602023770e+00 + 2.2573745191419308e+00 2.3044953521154712e+00 -3.7552348722045457e+00 + 2.2969505880702474e+00 1.9795416312579852e+00 -4.5960394496923458e+00 + 2.1852142813398290e+00 1.8475084572513261e+00 -4.5924444020548716e+00 + id 14713 + loc 8.7271517515182495e-01 2.3186263442039490e-01 394 + blend 0.0000000000000000e+00 + interp 4.4689575572417983e-01:4.4689128676662260e-01:7.4244994240988960e-02:3.6574138488745489e-01:5.3144047438658870e-01:3.0732474816663491e-01:9.9257964130179899e-01:3.4336361715010738e-01:1.9809912504253231e+00:2.9086528051110239e-01:2.8363771269154672e+00:3.0037475166625949e-01:3.5324662650319509e+00 + CVs 20 + 3.9030304065855193e-01 2.5509858425881748e-01 2.3758686466736104e-01 + 7.0508727378969960e-01 4.5108516347346833e-01 4.4494446037149432e-01 + 9.9325189544690273e-01 6.1098362272217699e-01 6.4510083096867277e-01 + 1.2742624029189975e+00 7.4518393260470883e-01 8.4750813027161864e-01 + 1.5441970856966751e+00 8.5143121858055015e-01 1.0506962953367747e+00 + 1.8012562906755605e+00 9.2994666031719220e-01 1.2535563352950865e+00 + 2.0470784445416945e+00 9.8677262183051107e-01 1.4529176919048106e+00 + 2.2855293963080907e+00 1.0303311579484706e+00 1.6408473569503412e+00 + 2.5220521059475036e+00 1.0625625895938984e+00 1.8118667465253995e+00 + 2.7592709445104440e+00 1.0790656386049655e+00 1.9696429977970475e+00 + 3.0013340263104689e+00 1.0712398943585364e+00 2.1155198653172191e+00 + 3.2591320046354681e+00 1.0294845877876333e+00 2.2417107258688787e+00 + 3.5384456038700156e+00 9.4882722580686307e-01 2.3424558698107445e+00 + 3.8243110896829409e+00 8.3705295817509362e-01 2.4227500524288970e+00 + 4.0941192186325299e+00 7.1877405085173374e-01 2.4894881731635570e+00 + 4.3469745267955222e+00 6.3472570769334569e-01 2.5457458042516090e+00 + 4.6021701917436300e+00 6.1456025985643370e-01 2.6000315657561615e+00 + 4.8741494994453625e+00 6.1427463792838033e-01 2.6517069743453936e+00 + 5.1628267484010646e+00 3.2923754858326371e-01 2.5450967139683196e+00 + id 14714 + loc 6.4103370904922485e-01 5.3594541549682617e-01 404 + blend 0.0000000000000000e+00 + interp 3.4296245334645914e-01:3.4295902372192572e-01:6.6599049960876733e-01:3.0099902883149715e-01:1.0851633383054342e+00:3.0385115010566216e-01:1.9149548644395775e+00:3.1916942755066968e-01:2.8506079591525411e+00:2.9275774851229630e-01:3.8952957737919145e+00 + CVs 20 + -7.4315129635115329e-02 -1.7640649295890473e-03 1.7744078104834214e-02 + -1.5528530572109045e-01 7.2613703412097302e-03 3.5763171084566225e-02 + -2.1237296773541087e-01 1.8243976435760492e-02 6.5522292902305934e-02 + -2.7159096754918555e-01 1.9980314982851077e-02 9.8544305571693636e-02 + -3.3773902267286715e-01 1.3794862718491202e-02 1.2877086129381859e-01 + -4.1170082233243604e-01 1.7198115789144597e-03 1.5184828974970044e-01 + -4.9401682146178066e-01 -1.3837123358270836e-02 1.6418545308358712e-01 + -5.8404455221559159e-01 -3.0982003842328243e-02 1.6240851327923550e-01 + -6.7858189101422239e-01 -5.1879110199807288e-02 1.4033574609691812e-01 + -7.7648869706461721e-01 -7.4680835870741369e-02 9.0773473107286271e-02 + -8.8176875964680146e-01 -8.2133373929579923e-02 1.9356519157649937e-02 + -1.0015997890969262e+00 -4.8820565240963565e-02 -4.6846710039243761e-02 + -1.1380117024039957e+00 4.0833641819596200e-02 -7.8633798677865602e-02 + -1.2776451885452758e+00 1.8169724321868547e-01 -6.6003571242794157e-02 + -1.4048610417541734e+00 3.6043775734737893e-01 -1.9900624712085729e-02 + -1.5114528403797038e+00 5.6453753556900466e-01 3.8662916270587933e-02 + -1.5951269003187978e+00 7.9985733047105767e-01 1.0612289898838245e-01 + -1.6455837280836461e+00 1.0808289919889884e+00 1.9468407063167498e-01 + -1.7090804283408783e+00 1.2596045083436762e+00 1.8775516467994569e-01 + id 14715 + loc 2.8310993313789368e-01 8.9937371015548706e-01 405 + blend 0.0000000000000000e+00 + interp 4.6628891700214492e-01:2.8076651063075875e-01:5.0884754805456844e-01:3.4069234076582733e-01:1.0387674849516397e+00:4.5728955068364641e-01:1.9524382443810333e+00:4.4393797589900202e-01:2.1245811221240576e+00:4.0356007367896113e-01:2.5383228145356886e+00:3.1028815023439216e-01:3.3057283318491288e+00:4.6628425411297492e-01:3.9978311518520462e+00 + CVs 20 + 3.2129140936211231e-01 3.3387755598210866e-01 -4.4495479066521293e-02 + 4.8032047504387126e-01 5.9559546231780813e-01 -8.7381911786506325e-02 + 6.0791984067696681e-01 8.0285266881568051e-01 -1.1232254097869571e-01 + 7.4950696939525407e-01 1.0122964931910823e+00 -1.0008400304606879e-01 + 9.0268894185393100e-01 1.2210052901571045e+00 -3.2372535400824416e-02 + 1.0638543674386591e+00 1.4156693146325745e+00 1.0453428859261234e-01 + 1.2273711362442761e+00 1.5771080748240709e+00 3.0603691023093071e-01 + 1.3891385143965183e+00 1.6956593796810273e+00 5.4838813789945351e-01 + 1.5490756741415845e+00 1.7780310303198441e+00 8.0702011635207405e-01 + 1.7092981644628749e+00 1.8374603437702897e+00 1.0691204401028016e+00 + 1.8715481777791454e+00 1.8827781596154658e+00 1.3339929340452317e+00 + 2.0362498451954605e+00 1.9149096814698559e+00 1.6070389575889037e+00 + 2.2005027712040679e+00 1.9365602404221305e+00 1.8832978594188181e+00 + 2.3546949185204578e+00 1.9694594906700229e+00 2.1329143437423133e+00 + 2.4839398572674249e+00 2.0439690874388088e+00 2.3184235313397186e+00 + 2.5741123168643902e+00 2.1630744650888998e+00 2.4320789027094434e+00 + 2.6196817505502428e+00 2.3039578412366093e+00 2.4965548129581059e+00 + 2.6244091075822866e+00 2.4446997851813594e+00 2.5412020248655520e+00 + 2.6874310080994452e+00 2.5133171664479175e+00 2.7605159079947210e+00 + id 14716 + loc 8.0798882246017456e-01 5.5005550384521484e-01 1079 + blend 0.0000000000000000e+00 + interp 4.6761840665599352e-01:3.7027150141647058e-01:4.0863710062469227e-01:4.5507385758895808e-01:9.9744639858660733e-01:2.9362888564238310e-01:1.4790463974940500e+00:4.6761373047192700e-01:2.0090765837570443e+00:3.3429601696258648e-01:2.5904640255103510e+00:3.0495015246789747e-01:3.4840089808829067e+00 + CVs 20 + -1.0798257531505104e-01 2.8371075762014902e-01 5.8470955323988633e-02 + -1.8432845930783603e-01 5.7516493951929348e-01 1.1209934187534873e-01 + -2.4418073752225505e-01 8.7880784331171180e-01 1.4852369425281198e-01 + -2.9722501283456254e-01 1.2037452834549329e+00 1.5443353840122415e-01 + -3.3659898669689370e-01 1.5557595481733950e+00 1.2071251413079198e-01 + -3.5222065139559411e-01 1.9383665915548678e+00 3.4840551639994555e-02 + -3.3561529598710521e-01 2.3295200195836760e+00 -1.1983725398675649e-01 + -2.8821136891466592e-01 2.6896976630982423e+00 -3.4710858762554797e-01 + -2.1973283287210688e-01 2.9912724639864212e+00 -6.3517309354140283e-01 + -1.4282656566115304e-01 3.2205675171038886e+00 -9.6738491760419687e-01 + -7.1053783877630616e-02 3.3723656087001297e+00 -1.3302484420790857e+00 + -1.7152422485623098e-02 3.4457691647965065e+00 -1.7157514527131019e+00 + 8.2223231267642971e-03 3.4398564516465537e+00 -2.1196073690883290e+00 + -1.8734335978073946e-03 3.3523227818196366e+00 -2.5434746468384790e+00 + -4.0657321049583750e-02 3.1825040993439506e+00 -3.0125890196779830e+00 + -7.5337061323560772e-02 2.9097022995628876e+00 -3.6151512756132322e+00 + -7.9791741488361850e-02 2.3808795760793928e+00 -4.3801217553833620e+00 + -1.2298696457840153e-01 1.6349712609016509e+00 -4.8343819718814327e+00 + -2.5097019734362275e-01 1.4142961394969134e+00 -4.6337075958102858e+00 + id 14717 + loc 5.9597802162170410e-01 5.3668153285980225e-01 394 + blend 0.0000000000000000e+00 + interp 4.7697199774456722e-01:4.5267712083310407e-01:6.4540896702304562e-02:3.0504594828858705e-01:5.1315137281178969e-01:3.5143271922973157e-01:9.9945640491100507e-01:4.0930991646025200e-01:1.6039827625551060e+00:4.7387433214941582e-01:2.1131335796024993e+00:4.7696722802458980e-01:2.6070146075109273e+00:4.6767017704919905e-01:2.9829621373860356e+00:3.7661205226618610e-01:3.4395280623932525e+00 + CVs 20 + -2.8847631752783254e-01 1.4773310870633954e-01 -5.1221048845110181e-02 + -5.4886979649956302e-01 2.8735553898581501e-01 -1.0480975650566482e-01 + -7.9743403927874867e-01 4.2870324975899249e-01 -1.6272050311142716e-01 + -1.0501939015954638e+00 5.8410810070479924e-01 -2.2953837838553953e-01 + -1.3032934987505664e+00 7.5676925659394634e-01 -3.1244394430097383e-01 + -1.5499554025702291e+00 9.4378098564378421e-01 -4.1934465798966314e-01 + -1.7907481552174567e+00 1.1447873505398567e+00 -5.5690708311044723e-01 + -2.0329864579384682e+00 1.3622602225348781e+00 -7.3123766791604405e-01 + -2.2781201036471033e+00 1.5884678270196975e+00 -9.5194279251031433e-01 + -2.5179597346603475e+00 1.7980315383574836e+00 -1.2298512550411276e+00 + -2.7494478228557675e+00 1.9595838291552066e+00 -1.5676668070209696e+00 + -2.9755150834637796e+00 2.0461852243585459e+00 -1.9580112901460560e+00 + -3.1868756198313619e+00 2.0452088009310438e+00 -2.3864386590225477e+00 + -3.3640287143615475e+00 1.9606794427244705e+00 -2.8383670033731798e+00 + -3.5042003270247450e+00 1.7994864807445510e+00 -3.3047345670314918e+00 + -3.6325058447707397e+00 1.5594777323959246e+00 -3.7772169407147360e+00 + -3.7681567395445446e+00 1.2322794830079653e+00 -4.2313070815758564e+00 + -3.8850575734809514e+00 8.2021310736178510e-01 -4.6247146939866326e+00 + -3.8963661856760772e+00 3.8668274688758730e-01 -4.8993510932463433e+00 + id 14718 + loc 3.2700368762016296e-01 4.3411433696746826e-01 405 + blend 0.0000000000000000e+00 + interp 5.1255223078890011e-01:2.8339031957493188e-01:6.7479477013663969e-01:2.9345338262518011e-01:1.3573304032303568e+00:3.8030218394229098e-01:2.0161856466785357e+00:5.1254710526659220e-01:2.7466543041607325e+00:2.9924943217957850e-01:3.1824288903649576e+00:3.0750643195415339e-01:3.9749929886168176e+00 + CVs 20 + 8.0548658681410507e-02 1.8981099107913252e-01 -4.8796304862401343e-02 + 1.5532765798223705e-01 3.3090149048339840e-01 -1.8400573842288187e-02 + 2.4063255694685223e-01 4.3225721555422331e-01 2.0381824046360131e-02 + 3.4173884941557836e-01 5.0685515339105369e-01 5.4237005441177294e-02 + 4.5406272239787759e-01 5.5136732084682616e-01 8.2041466582704031e-02 + 5.7244771676719608e-01 5.6617333848610685e-01 1.0299336621688815e-01 + 6.9398654019794415e-01 5.5509234013307651e-01 1.1832643289243724e-01 + 8.1882338707556634e-01 5.2223545742625654e-01 1.3098070245999896e-01 + 9.4921439213109315e-01 4.7017756605819983e-01 1.4473447016076393e-01 + 1.0882370379098829e+00 3.9985328695472239e-01 1.6355118267552146e-01 + 1.2382155926514089e+00 3.1076478907540517e-01 1.9131249892795774e-01 + 1.3998976462848736e+00 2.0165279554389506e-01 2.3190069726164581e-01 + 1.5766493717714678e+00 7.3450519349872817e-02 2.8784169306304302e-01 + 1.7851952555100123e+00 -6.6498665468385371e-02 3.5615471430189127e-01 + 2.0511897432675990e+00 -2.0295869116165768e-01 4.2420639092666057e-01 + 2.3808462937804640e+00 -3.1648895673218325e-01 4.7416841300053153e-01 + 2.7549463227325668e+00 -3.9302066767090238e-01 4.9418261591142554e-01 + 3.1471202662390998e+00 -4.2861259686619479e-01 4.8582485425538424e-01 + 3.4593120282606562e+00 -4.8353393384782711e-01 5.5243926472112592e-01 + id 14719 + loc 6.7654564976692200e-02 3.8051992654800415e-01 404 + blend 0.0000000000000000e+00 + interp 5.2713981425265111e-01:3.3113607036152515e-01:4.6326077545276623e-02:3.8980132202401047e-01:9.8578207394386896e-01:5.2713454285450856e-01:1.4135405940817449e+00:2.0793469761303790e-01:2.0513913406216719e+00:3.2349778666781892e-01:2.8212685895824801e+00:5.1057982500151011e-01:3.3628890922915096e+00 + CVs 20 + -8.6628908858701434e-02 2.2363166104228723e-03 6.1411480811405739e-02 + -1.7039382793773467e-01 3.5465618239775287e-03 1.3248828742219748e-01 + -2.5018725171506573e-01 3.4269034923580730e-03 2.0933769701905205e-01 + -3.2386314139168854e-01 -2.4888408235864690e-03 2.8641662982672095e-01 + -3.8476992193913695e-01 -1.9566342923161256e-02 3.5953123845491897e-01 + -4.2835839120667607e-01 -4.9540352032124008e-02 4.2565123998228527e-01 + -4.5273443067365460e-01 -9.1509148909842936e-02 4.8138723090506208e-01 + -4.5830525155997237e-01 -1.4364969305226891e-01 5.2227177558549465e-01 + -4.4743859701542610e-01 -2.0303549285367981e-01 5.4381063679109576e-01 + -4.2578113637710674e-01 -2.6449948967786391e-01 5.4460655727988327e-01 + -4.0295106214842352e-01 -3.2196087704836401e-01 5.2984521604257395e-01 + -3.8687443837051422e-01 -3.7116399004799555e-01 5.0773981946354763e-01 + -3.7882560186352487e-01 -4.1010585400490529e-01 4.8218083101893616e-01 + -3.7749769459133153e-01 -4.3751183613916350e-01 4.5398240934992823e-01 + -3.8274609707853757e-01 -4.5310844422307295e-01 4.2445579078201434e-01 + -3.9545499012429269e-01 -4.5784361661318385e-01 3.9648471798241208e-01 + -4.1445181138579179e-01 -4.5240978219991745e-01 3.7040715634160420e-01 + -4.3674596607421906e-01 -4.3426385181739857e-01 3.3756596576679010e-01 + -4.3369180949736891e-01 -4.1261713968370872e-01 4.8710907181927221e-01 + id 14720 + loc 6.3941232860088348e-02 9.1026210784912109e-01 1079 + blend 0.0000000000000000e+00 + interp 3.4978845492791222e-01:3.3370237716920964e-01:1.0460943748431961e-01:2.7464033498527862e-01:1.0304451458858572e+00:3.4599191698072529e-01:1.7401669598841978e+00:3.3549565084486122e-01:2.5616931079814469e+00:3.4978495704336293e-01:3.3121702651018392e+00 + CVs 20 + 1.7585340615888762e-01 4.9402490837576640e-01 1.9793593383103311e-01 + 3.6551365662181445e-01 9.1641644094259267e-01 2.6598636394892383e-01 + 5.6297342013267493e-01 1.3146966072185804e+00 2.7859369650398735e-01 + 7.6659059753084802e-01 1.6930127138648245e+00 2.5231968731643217e-01 + 9.7454033412323637e-01 2.0298247402818741e+00 1.7534013229894385e-01 + 1.1741278485280424e+00 2.2893936151213756e+00 2.9590325236887538e-02 + 1.3386413703309890e+00 2.4304235802750820e+00 -1.9162415041230474e-01 + 1.4339838140644370e+00 2.4290694930496688e+00 -4.6219329521113472e-01 + 1.4326171592351271e+00 2.2924626276962763e+00 -7.2892799155584409e-01 + 1.3331061381578246e+00 2.0640773525264731e+00 -9.3822698768757828e-01 + 1.1711987761728186e+00 1.8068043232400584e+00 -1.0733587821208241e+00 + 9.9324777999791747e-01 1.5589871797351900e+00 -1.1603683682392736e+00 + 8.3034976607343747e-01 1.3213458095120385e+00 -1.2352309501714929e+00 + 6.9738167126756145e-01 1.0730725488335213e+00 -1.3180274030758410e+00 + 5.9910637595282312e-01 7.8501245726077307e-01 -1.3990446709713382e+00 + 5.2409550153734075e-01 4.2453628119456588e-01 -1.4025137708094149e+00 + 4.4386754868913186e-01 3.2486858698979049e-03 -1.1763454249371579e+00 + 3.4755419662792481e-01 -3.5008969592140260e-01 -7.3793991774222500e-01 + 3.2924936372624702e-01 -7.4069748270884084e-01 -7.4996148694406606e-01 + id 14721 + loc 1.7814634740352631e-01 6.8860834836959839e-01 405 + blend 0.0000000000000000e+00 + interp 5.1110810815235452e-01:4.1028250041954017e-01:1.7542784583574111e-01:2.7615242975200288e-01:8.1586568710048923e-01:4.3204626261210233e-01:1.0916983301147138e+00:2.9959575846393177e-01:2.0524970159465310e+00:3.7089322313648476e-01:3.0379602425605863e+00:5.1110299707127305e-01:3.8306894156405042e+00 + CVs 20 + 2.0642608711003657e-01 2.9019795301632234e-01 9.9394570999512891e-03 + 2.7639167419608057e-01 5.4337582727238987e-01 1.2533249290859109e-02 + 3.2447957656294574e-01 7.6105544280245374e-01 3.1789589972046978e-02 + 3.7345160312817077e-01 9.8236100523194403e-01 9.3004493332982774e-02 + 4.1926462932592756e-01 1.2000508074637171e+00 2.0619022536358356e-01 + 4.6041365072319190e-01 1.4020974471311354e+00 3.7208119094283043e-01 + 4.9785114999751834e-01 1.5783654171914798e+00 5.7981345062118661e-01 + 5.3365004272017769e-01 1.7261223731191995e+00 8.1268152469484489e-01 + 5.6866253812415801e-01 1.8491841623180190e+00 1.0559728135839856e+00 + 6.0144414792926526e-01 1.9534975954000937e+00 1.3000732455125419e+00 + 6.2841447380799753e-01 2.0435503334972887e+00 1.5419393553652145e+00 + 6.4507776163491193e-01 2.1212818685841284e+00 1.7845234281102416e+00 + 6.4750668080537244e-01 2.1903649590333845e+00 2.0252180303084355e+00 + 6.2980921836280324e-01 2.2635784643692451e+00 2.2392475872350310e+00 + 5.8093106377738601e-01 2.3516437053798236e+00 2.3917967059052074e+00 + 4.9146906049704264e-01 2.4469754828838517e+00 2.4787466261763540e+00 + 3.6387515929863412e-01 2.5319417272678195e+00 2.5304209442826697e+00 + 2.1219197909972687e-01 2.5959183928593292e+00 2.5763330399291124e+00 + 1.5372326692670324e-01 2.6693982030803096e+00 2.7229075566046923e+00 + id 14722 + loc 6.8542122840881348e-01 9.1654479503631592e-01 394 + blend 0.0000000000000000e+00 + interp 4.6243540956084467e-01:3.1360342699218446e-01:6.5357518823114025e-02:4.5265648388607516e-01:6.8099352804216773e-01:3.4748346210239583e-01:1.0816860201714471e+00:3.3392773787911739e-01:2.1972037463295027e+00:4.6243078520674907e-01:2.8872632048101075e+00:4.0501544917489335e-01:3.1415041025678443e+00 + CVs 20 + -1.6782060059517007e-01 1.6357351915446650e-01 -2.1659200873034096e-01 + -3.5630925950019193e-01 3.2167037917673069e-01 -4.4166362664148345e-01 + -5.4876890437811610e-01 4.7244367345351679e-01 -6.8179329582691306e-01 + -7.3586789281713272e-01 6.1243812810120790e-01 -9.4023609629836657e-01 + -9.1624642836949866e-01 7.3899594164490767e-01 -1.2179162594109880e+00 + -1.0907880787007282e+00 8.5198132510308100e-01 -1.5138664268510853e+00 + -1.2608474227216093e+00 9.5012108923440564e-01 -1.8241672228348946e+00 + -1.4246591017844452e+00 1.0236217792671443e+00 -2.1426720755727047e+00 + -1.5790657081914465e+00 1.0559967050695296e+00 -2.4624241720219442e+00 + -1.7254982410694062e+00 1.0344109018917707e+00 -2.7746751336199802e+00 + -1.8686168577668263e+00 9.5494805246191317e-01 -3.0680718940808034e+00 + -2.0100349303073308e+00 8.2210818883008807e-01 -3.3352247606290852e+00 + -2.1495335150912007e+00 6.4432265200549366e-01 -3.5755743719583171e+00 + -2.2888909483931723e+00 4.3122185256022894e-01 -3.7821494801391240e+00 + -2.4321144120049158e+00 1.9614177176786640e-01 -3.9367144220900974e+00 + -2.5707983782960055e+00 -4.6817622648198221e-02 -4.0194813090244033e+00 + -2.6761050262668538e+00 -2.8626705022027221e-01 -4.0206356099623584e+00 + -2.7375928087361885e+00 -5.1545610092439365e-01 -3.9649532331691661e+00 + -2.8912905515458140e+00 -8.4547798647435046e-01 -4.0782519860487767e+00 + id 14723 + loc 8.0304764211177826e-02 3.4836223721504211e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2390442382690308e-01:3.6644524101278136e-01:2.8372579435398393e-04:2.8513065787889119e-01:9.9116166131167727e-01:4.2179988627068293e-01:1.7064347099801511e+00:3.3318677674992231e-01:2.0063817845178571e+00:4.2390018478266484e-01:2.4651855096091504e+00:2.9560384299802644e-01:3.0042675332880968e+00 + CVs 20 + 3.4907611319130405e-01 5.0020945609765011e-01 -1.2338145893825675e-02 + 5.7381462398344563e-01 9.0976406041321289e-01 -9.3016357451083054e-02 + 7.4842396408378398e-01 1.2803105939070170e+00 -1.9422743285501681e-01 + 8.9442196619991010e-01 1.6331221858609144e+00 -3.0216831594598526e-01 + 1.0010714669619940e+00 1.9661298083393752e+00 -4.1767534985723520e-01 + 1.0505069555340083e+00 2.2804901296914188e+00 -5.4210781800233498e-01 + 1.0162148969577496e+00 2.5722994053680703e+00 -6.7702524155710320e-01 + 8.7187638007924528e-01 2.8209425226554972e+00 -8.1911815259464582e-01 + 6.1741727431997695e-01 2.9816251329940560e+00 -9.5358863483536205e-01 + 3.0957475890672170e-01 3.0213089930665049e+00 -1.0598301236971699e+00 + 1.1984990741927604e-02 2.9625246755018866e+00 -1.1311060537293689e+00 + -2.5588933089629573e-01 2.8437532658108715e+00 -1.1716227804846280e+00 + -4.9656690397342029e-01 2.6875049341581438e+00 -1.1848548059064690e+00 + -7.1497903880407943e-01 2.5029969129960121e+00 -1.1718364406220787e+00 + -9.1801520503175837e-01 2.2820280037367597e+00 -1.1317211914865026e+00 + -1.1065476377044279e+00 1.9869310239062452e+00 -1.0634599391564872e+00 + -1.2357893006216620e+00 1.5848750684999982e+00 -9.6801219611400935e-01 + -1.2442486553326206e+00 1.1531005572507442e+00 -8.4464835109758318e-01 + -1.1963978327995921e+00 8.6951843735459944e-01 -6.9535684174283563e-01 + id 14724 + loc 7.1735465526580811e-01 6.6005319356918335e-01 404 + blend 0.0000000000000000e+00 + interp 3.4715540472766099e-01:3.4555267273128731e-01:8.6727619616286555e-01:3.4715193317361370e-01:1.4924021410586290e+00:3.1748789619752299e-01:2.0424075304892728e+00:3.4707650940185286e-01:2.9476788699164920e+00:2.9306301383409694e-01:3.9519310629376707e+00 + CVs 20 + -1.0573487417000806e-01 -3.8646747785940294e-02 1.0864309387612484e-01 + -2.3381173631961225e-01 -7.2401444592684772e-02 2.1357902775161164e-01 + -3.5062976899469378e-01 -9.1797368618639352e-02 3.3385586018454327e-01 + -4.8157801879860029e-01 -9.4090668447461112e-02 4.5308360067869768e-01 + -6.3030726709853968e-01 -6.7098222130553609e-02 5.6674645106203514e-01 + -7.9095151506116679e-01 6.1413091974427125e-04 6.7301404649435170e-01 + -9.5082060047214179e-01 1.1315556988234177e-01 7.7040794863253215e-01 + -1.0952814171256424e+00 2.5770212407084947e-01 8.5596802431878805e-01 + -1.2191427030200441e+00 4.0090098004919628e-01 9.2236070138724713e-01 + -1.3306937655093156e+00 5.1614977320858946e-01 9.6107118927332735e-01 + -1.4312263220157837e+00 6.1391424649671822e-01 9.7575632475862029e-01 + -1.5042730625232044e+00 7.2938070394035692e-01 9.8783723245777266e-01 + -1.5242363247224435e+00 8.9153419116997623e-01 1.0246144629386658e+00 + -1.4796879058892880e+00 1.0877792298168776e+00 1.0864683910089883e+00 + -1.3840314930065429e+00 1.2872328886259583e+00 1.1466263893400717e+00 + -1.2613960990999280e+00 1.4711305702116011e+00 1.1796164527559876e+00 + -1.1237018988362828e+00 1.6441855011457243e+00 1.1764226750521369e+00 + -9.5673020607203674e-01 1.8250658149021053e+00 1.1431471553382200e+00 + -8.4070805813960758e-01 1.9346838808407787e+00 1.0664449009836607e+00 + id 14725 + loc 4.0381512045860291e-01 5.6659400463104248e-02 405 + blend 0.0000000000000000e+00 + interp 4.6828449693632623e-01:3.8518824047716382e-01:7.8186183111265128e-03:4.6827981409135688e-01:4.4468320095897906e-01:2.5210003867951170e-01:1.1354777638738780e+00:4.1404527211578496e-01:1.7506161489478878e+00:3.6391627927827258e-01:2.6232856503694575e+00:3.6113276342655531e-01:3.4856756255529571e+00 + CVs 20 + -3.7317767832145923e-02 4.5675354968555924e-02 5.2574599411277789e-03 + -8.6240703227129956e-02 8.0546000441928362e-02 -8.6928168102814313e-04 + -1.5004038852956558e-01 1.1907091336040183e-01 -5.0901737935297175e-03 + -2.2445977145325743e-01 1.6980960765969666e-01 -2.3432058923283081e-02 + -3.0811847880814530e-01 2.3563945865819386e-01 -5.3176057295927170e-02 + -3.9994929411809893e-01 3.2049461298696158e-01 -8.7914625202176411e-02 + -4.9827246702516004e-01 4.3075933262735000e-01 -1.1805267670138261e-01 + -5.9847210944609963e-01 5.7483505348744512e-01 -1.3062944431833184e-01 + -6.8966738747177314e-01 7.6029567692989497e-01 -1.1013920809606959e-01 + -7.5261221899546060e-01 9.8801506325545907e-01 -4.2788742988481565e-02 + -7.6361107826882646e-01 1.2464768781328326e+00 7.4301830423879056e-02 + -7.0588065017798418e-01 1.5144775252877314e+00 2.2561530977790056e-01 + -5.7996290382555415e-01 1.7720139754060305e+00 3.8225497396337693e-01 + -4.0158530313578661e-01 2.0090914002062403e+00 5.1678558449940282e-01 + -1.8993574194113397e-01 2.2244118383991816e+00 6.1326789179681485e-01 + 4.1141983568752108e-02 2.4183388891707662e+00 6.6734820240668014e-01 + 2.8302738016135565e-01 2.5880085227531926e+00 6.8106308303761287e-01 + 5.3183485511027562e-01 2.7269309735699170e+00 6.5777853255507546e-01 + 6.8627467173163614e-01 2.8420158410077199e+00 6.2767499430463203e-01 + id 14726 + loc 3.7368786334991455e-01 6.0697329044342041e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3083600424420004e-01:3.2611286644341020e-01:9.7678444240220141e-01:3.3587960012952589e-01:1.4439699606148069e+00:3.9195058794775828e-01:1.9985212447424328e+00:3.3240524502287871e-01:2.7064516491297761e+00:4.3083169588415759e-01:3.0079909321942315e+00:3.2211175597094927e-01:3.9120965307684896e+00 + CVs 20 + -3.5347994293691426e-03 3.6448649485105400e-01 1.5765330302663028e-01 + 2.8248495201917245e-02 6.8114050442357121e-01 2.6458479078947067e-01 + 7.9438487205104463e-02 9.7562181740815279e-01 3.4665718335048334e-01 + 1.4165962584748520e-01 1.2691702399677998e+00 4.2091415623484230e-01 + 2.1955265903659033e-01 1.5674506917700857e+00 4.8441202994583410e-01 + 3.2049612173547504e-01 1.8795922707764379e+00 5.2791644509895552e-01 + 4.5457898226052640e-01 2.2083006314003213e+00 5.2569015969607580e-01 + 6.2681935347437956e-01 2.5356555747377127e+00 4.4347357385885244e-01 + 8.2977011993579852e-01 2.8276399508152812e+00 2.6056213753355761e-01 + 1.0463102752306082e+00 3.0488589652346896e+00 -2.1014794427760775e-02 + 1.2581267198028068e+00 3.1736647778053726e+00 -3.8051909150310936e-01 + 1.4523876122794417e+00 3.1908028201098775e+00 -7.8981460863472353e-01 + 1.6226116543052167e+00 3.0997138350704860e+00 -1.2218762849527049e+00 + 1.7684261825648715e+00 2.9046338619018242e+00 -1.6540426305650255e+00 + 1.8955719439048118e+00 2.6048658916462060e+00 -2.0689995200820057e+00 + 2.0123270434904224e+00 2.1647791239328926e+00 -2.4520453607997035e+00 + 2.1135955486944935e+00 1.4961266406575324e+00 -2.7226291827889493e+00 + 2.1764921908748978e+00 6.7190313152242487e-01 -2.6774914509698435e+00 + 2.2441173122736395e+00 2.3425915527755725e-01 -2.6103674163726751e+00 + id 14727 + loc 7.0118433237075806e-01 2.3036363720893860e-01 404 + blend 0.0000000000000000e+00 + interp 3.7022654161292867e-01:3.4307629692552083e-01:9.7638011689041071e-02:3.3881293059893386e-01:9.9708592876604130e-01:3.1629342240243308e-01:1.9903454703057522e+00:3.7022283934751254e-01:2.4074977218941043e+00:3.0513295924372080e-01:2.9998435091778255e+00:2.6270711667562135e-01:3.7165810768499723e+00 + CVs 20 + -5.7227603611218682e-02 7.5681333538098444e-02 7.4915876650112623e-02 + -9.5042171094275180e-02 1.6384730502755965e-01 1.5490516514243816e-01 + -1.2502753133474664e-01 2.6463011868419489e-01 2.2860245613385211e-01 + -1.5724916319328033e-01 3.8050769078148905e-01 2.9059329598701955e-01 + -1.9291312398357569e-01 5.1299106595240840e-01 3.4337021391856376e-01 + -2.3391677592913893e-01 6.6242352600369236e-01 3.9047885596300358e-01 + -2.8423195542826207e-01 8.2764783487036508e-01 4.3621850762613229e-01 + -3.4891976347617298e-01 1.0052723047137726e+00 4.8416133004387257e-01 + -4.3298870946074941e-01 1.1901191118875110e+00 5.3577750457176687e-01 + -5.4242780035063576e-01 1.3764404734525382e+00 5.9012307806335529e-01 + -6.8924081423241756e-01 1.5606124044193186e+00 6.4491610795546528e-01 + -8.9362558061938613e-01 1.7421688312209740e+00 7.0599930142144807e-01 + -1.1600086132563834e+00 1.9157789274164068e+00 8.0764774530017380e-01 + -1.4433849354081283e+00 2.0626008561106408e+00 1.0000481934514849e+00 + -1.6725404090957912e+00 2.1605143417872750e+00 1.2887532358473694e+00 + -1.8111845872105736e+00 2.2006804707261978e+00 1.6401596034616359e+00 + -1.8415933965850066e+00 2.1859344560755209e+00 2.0152141666418908e+00 + -1.7584608693907910e+00 2.1314413030849058e+00 2.3660097260844077e+00 + -1.6903852424744938e+00 2.0803304323461846e+00 2.6236972907224256e+00 + id 14728 + loc 1.2032224982976913e-01 2.0199792087078094e-01 405 + blend 0.0000000000000000e+00 + interp 4.8793869450878308e-01:4.8793381512183803e-01:4.9063076427153063e-01:2.9420842634402872e-01:1.0523498412685246e+00:2.7587896280707996e-01:1.9424850326017102e+00:2.8159723394315295e-01:2.6149109544223128e+00:2.6747817193363399e-01:3.1166974423244551e+00:3.9811093903075051e-01:3.9524744008790407e+00 + CVs 20 + -3.0852158726613257e-02 8.3061330807818523e-02 -8.5113900028396805e-04 + -9.3253027092967775e-02 1.0207951194233150e-01 2.2238979628346291e-02 + -1.7618920817487002e-01 1.4288750341413106e-01 8.1729018295688544e-02 + -2.6679056126151557e-01 1.9896952810945120e-01 1.4064760340849689e-01 + -3.6376632488119348e-01 2.7260014995781717e-01 1.9567326536486562e-01 + -4.6450453810095083e-01 3.6937099702879927e-01 2.4517157212775889e-01 + -5.6313100866641652e-01 4.9475887937451973e-01 2.8863072137356882e-01 + -6.5075672023777020e-01 6.5033335750759924e-01 3.2789799581736356e-01 + -7.1844935013991951e-01 8.3108045713589285e-01 3.6769178796665186e-01 + -7.6058600213906069e-01 1.0264579899525210e+00 4.1543222386578982e-01 + -7.7595122744678802e-01 1.2243878361613765e+00 4.7953589086321607e-01 + -7.6591990059512849e-01 1.4151121917608465e+00 5.6678587723854412e-01 + -7.3193409928744602e-01 1.5920935457927965e+00 6.8072597696103165e-01 + -6.7362010240551318e-01 1.7518285908819033e+00 8.2156438877020177e-01 + -5.9060192506098463e-01 1.8936060294731809e+00 9.8321452512605734e-01 + -4.8411296358385453e-01 2.0179231655931655e+00 1.1565939650876158e+00 + -3.5386605929861847e-01 2.1252585048786687e+00 1.3376445805450532e+00 + -1.9595584812989358e-01 2.2154376974908199e+00 1.5285142779792595e+00 + -1.4388438503746492e-01 2.2615208836602712e+00 1.6535111996288312e+00 + id 14729 + loc 9.4089917838573456e-02 4.7137963771820068e-01 394 + blend 0.0000000000000000e+00 + interp 6.6538068665775818e-01:3.8058197668124766e-01:2.7611375524866555e-01:4.0769805562421013e-01:9.4746424610522295e-01:6.6537403285089158e-01:1.5364352826172505e+00:4.8838298000779040e-01:2.0021139749418890e+00:4.0421654759881304e-01:2.6850500695559356e+00:2.9404572523121947e-01:3.2821250475618324e+00:4.5609748580183862e-01:3.9713412389771525e+00 + CVs 20 + -1.0482364708870777e-01 3.3089642496523464e-01 2.4324174575254093e-01 + -2.2501947776090148e-01 6.5063586980381316e-01 4.3336795499492919e-01 + -3.4394782782716565e-01 9.6511483111705099e-01 5.9249493167552503e-01 + -4.6384908415744086e-01 1.2790652283034756e+00 7.3432392165691041e-01 + -5.9599324404073295e-01 1.5923378860865520e+00 8.6638233366449491e-01 + -7.5325331592151690e-01 1.9001003819794628e+00 9.9526714014885298e-01 + -9.4558685738136417e-01 2.1931574647375482e+00 1.1255616233710315e+00 + -1.1767618841411980e+00 2.4626862403705418e+00 1.2620163916009686e+00 + -1.4490763979516916e+00 2.7047667436750515e+00 1.4149076567115935e+00 + -1.7640867127175843e+00 2.9085017031308116e+00 1.5925626422621115e+00 + -2.1228372844977912e+00 3.0478650157569587e+00 1.7915292063896628e+00 + -2.5259786424114012e+00 3.0865511115711888e+00 1.9986157655756240e+00 + -2.9522102005017139e+00 2.9920962928700892e+00 2.1882862882098575e+00 + -3.3522197688211364e+00 2.7709619983478921e+00 2.3302111773233136e+00 + -3.7033662712055593e+00 2.4557641290540388e+00 2.4273854431147521e+00 + -4.0187333694049201e+00 2.0572006557775540e+00 2.5240277002781619e+00 + -4.3019258306838557e+00 1.5995509054440604e+00 2.6934597463721279e+00 + -4.5288355472488320e+00 1.1804195610924804e+00 2.9689916985851594e+00 + -4.6805147009403996e+00 9.0421551145235246e-01 3.2344147450761924e+00 + id 14730 + loc 6.7201471328735352e-01 5.5386757850646973e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5507840837304181e-01:3.2268011271598068e-01:2.0034957500912465e-01:2.9449769093447264e-01:1.2258192046909047e+00:4.3353353199108996e-01:2.0000146838320205e+00:3.3162723171904740e-01:2.5529796611619524e+00:4.5507385758895808e-01:2.9989608759475681e+00:3.4045161243407096e-01:3.6091244662424331e+00 + CVs 20 + -6.1769238712089065e-02 3.0374412367790804e-01 6.1546459950505353e-02 + -9.0262607336323492e-02 5.8914336774764697e-01 9.1898520942432116e-02 + -9.9854020801295934e-02 8.6040211693719459e-01 9.3511416286760018e-02 + -1.0242476673801273e-01 1.1262274672748398e+00 7.0278354715219982e-02 + -9.5490140523425693e-02 1.3864887070731493e+00 2.4935511180755765e-02 + -7.6059026550943210e-02 1.6438115488296883e+00 -3.8041754539614447e-02 + -3.9898553519982838e-02 1.8949096483015375e+00 -1.2130033405354779e-01 + 1.6233848830164321e-02 2.1258750911940703e+00 -2.3233212247151747e-01 + 9.1230983177025049e-02 2.3221038430124858e+00 -3.7275069461300958e-01 + 1.8027003314875212e-01 2.4739006842632563e+00 -5.3868255070802673e-01 + 2.7609517481461893e-01 2.5731356221675958e+00 -7.2468027199288465e-01 + 3.6907872261539532e-01 2.6132100591540062e+00 -9.2377136077265309e-01 + 4.4854325726528527e-01 2.5898626582251612e+00 -1.1264203308886207e+00 + 5.0443609526227595e-01 2.5030906686054939e+00 -1.3211579243778613e+00 + 5.3056739433795119e-01 2.3642792163527555e+00 -1.4978390420258725e+00 + 5.3314078321267111e-01 2.2227316171803015e+00 -1.6591165541512423e+00 + 5.3329956673484746e-01 2.1925369917739603e+00 -1.8565605150882436e+00 + 5.4680611331926920e-01 2.2809405040764257e+00 -2.1621524995748480e+00 + 4.8866250513430631e-01 2.0262919671145534e+00 -1.8607394242305317e+00 + id 14731 + loc 4.7807604074478149e-01 2.6706904172897339e-01 404 + blend 0.0000000000000000e+00 + interp 4.2096078267763420e-01:3.0674144093023975e-01:6.9111692534705615e-02:3.4871387081812250e-01:9.4790739588254780e-01:3.5803417722315223e-01:1.3022900431497511e+00:2.5979356195468190e-01:1.9935040328981786e+00:3.0190323838406286e-01:2.7469853562683033e+00:4.2095657306980744e-01:3.4226551419817923e+00 + CVs 20 + -1.4429933768596481e-01 1.1022772097213662e-01 -3.4877510635153770e-02 + -2.8056454863065611e-01 2.1033163465102131e-01 -5.4489106921364147e-02 + -4.1820363181153841e-01 3.1146871617245453e-01 -7.2320054531581024e-02 + -5.5866781772063367e-01 4.1755870787957183e-01 -9.6332667352313717e-02 + -6.9750173527591286e-01 5.2710039620843774e-01 -1.2888232894875537e-01 + -8.2713319596560653e-01 6.3645893122643749e-01 -1.7112541715844914e-01 + -9.4336948596232872e-01 7.4230050785857771e-01 -2.2305408636650692e-01 + -1.0483354350428047e+00 8.4419727609125794e-01 -2.8375203604881977e-01 + -1.1456895350356200e+00 9.4345119234328445e-01 -3.5305142229938741e-01 + -1.2422685126747679e+00 1.0451808407843139e+00 -4.2953513681844296e-01 + -1.3477007022722991e+00 1.1552392059062297e+00 -5.0913008651716973e-01 + -1.4752717800041109e+00 1.2744393436498909e+00 -5.8095217823216005e-01 + -1.6378352881546947e+00 1.3989041052003974e+00 -6.2660638316572403e-01 + -1.8401536236315952e+00 1.5163265616368737e+00 -6.3427204790932246e-01 + -2.0790870726424657e+00 1.6192079095909262e+00 -5.9997732207270338e-01 + -2.3406160326599448e+00 1.7218801389930349e+00 -5.1152986208305951e-01 + -2.6001837954582676e+00 1.8446560857187717e+00 -3.4283600008475112e-01 + -2.8281052772653896e+00 1.9677172330767412e+00 -7.4650667462757836e-02 + -2.9594584987425212e+00 2.0335317542440761e+00 2.3048678519992327e-01 + id 14732 + loc 8.6965307593345642e-02 9.6599483489990234e-01 405 + blend 0.0000000000000000e+00 + interp 4.4729482752139482e-01:3.8144374618255339e-01:1.1005491602317730e-01:4.4729035457311961e-01:9.8952843927100520e-01:2.4819724113298447e-01:1.2863777610967846e+00:4.0294493016102062e-01:2.1432923099252550e+00:2.6365521430167244e-01:2.7445432587759258e+00:3.4091750108770763e-01:3.2412449882591217e+00 + CVs 20 + 2.2502469246737145e-01 2.7702038784090105e-01 8.8681196866828085e-02 + 2.8050520851750316e-01 4.2052237646335411e-01 1.3930882687913046e-01 + 2.7142067185754892e-01 5.3314622930673417e-01 1.8195977827632448e-01 + 2.6682506646277893e-01 6.3850231398107438e-01 2.1938872528851208e-01 + 2.6688800077729791e-01 7.4088738603288451e-01 2.5166904912171456e-01 + 2.7329258463568351e-01 8.4581211406775925e-01 2.8508129252763675e-01 + 2.8743412382827210e-01 9.5473774862598293e-01 3.3223709554298986e-01 + 3.0903799920666009e-01 1.0627306763935760e+00 4.0630321710607287e-01 + 3.3761007245261371e-01 1.1613829924006502e+00 5.1488337919052107e-01 + 3.7411264352697293e-01 1.2436765952134894e+00 6.5956309444713013e-01 + 4.2195971769796126e-01 1.3068239043969734e+00 8.3841888836580492e-01 + 4.8664864552733111e-01 1.3511057514123792e+00 1.0484965475507033e+00 + 5.7104430308361320e-01 1.3734634911676964e+00 1.2867619048812384e+00 + 6.7067324998601285e-01 1.3630131624616890e+00 1.5456324988727477e+00 + 7.7901696643104545e-01 1.3144647811780878e+00 1.8119292473406485e+00 + 8.9669247493150550e-01 1.2433166435481129e+00 2.0778005601998593e+00 + 1.0281290611105356e+00 1.1742492248267333e+00 2.3423005373160444e+00 + 1.1764063049187503e+00 1.1229629956948455e+00 2.6005693769113445e+00 + 1.3903258144173545e+00 1.1191635004627805e+00 2.8713968871306950e+00 + id 14733 + loc 5.9285670518875122e-01 9.9686361849308014e-02 394 + blend 0.0000000000000000e+00 + interp 3.5918011117987453e-01:3.3474152190703865e-01:3.8742358121623965e-07:3.5917651937876277e-01:4.9382347344974542e-01:3.4678963979961192e-01:1.1638470161381504e+00:3.1195270958504995e-01:2.1364440502178521e+00:2.6240637658675542e-01:3.1461322554040212e+00 + CVs 20 + 2.8564065803065142e-01 2.9294446307487709e-01 1.9001087856329216e-01 + 5.8055975871994148e-01 5.7288134637615473e-01 3.3519376672276285e-01 + 8.7094860946146979e-01 8.5480417298419886e-01 4.6834544245414600e-01 + 1.1482916739308009e+00 1.1517449463685248e+00 6.1036694477241060e-01 + 1.4084778827208182e+00 1.4669861253354726e+00 7.7740858412044112e-01 + 1.6550895735684859e+00 1.7931000399009966e+00 9.8671379414802096e-01 + 1.8969519922804077e+00 2.1160310033580081e+00 1.2546956074372231e+00 + 2.1387335334461257e+00 2.4165387330967016e+00 1.5924068821857102e+00 + 2.3810846265008361e+00 2.6713129635611330e+00 2.0021651938528597e+00 + 2.6269785966177590e+00 2.8534579961450035e+00 2.4781904824269514e+00 + 2.8834125361401002e+00 2.9306257296682690e+00 3.0101296039804208e+00 + 3.1524973168715862e+00 2.8627504749076227e+00 3.5800436578448549e+00 + 3.4169829670034604e+00 2.6261547170789070e+00 4.1416062411314130e+00 + 3.6453404548999373e+00 2.2829349131721881e+00 4.6258984485323307e+00 + 3.8306548729999337e+00 1.9638805902091754e+00 5.0073983470837060e+00 + 3.9958203152981264e+00 1.7444502885710698e+00 5.3026044998168409e+00 + 4.1685665008296926e+00 1.6253300213403423e+00 5.5198413726502542e+00 + 4.3676993129386030e+00 1.5690267570940999e+00 5.6654763163066040e+00 + 4.6271417370053278e+00 1.4039754083862088e+00 5.8660745080623187e+00 + id 14734 + loc 9.4632178544998169e-01 7.0087164640426636e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5271075008401307e-01:4.2843250230407859e-01:1.5953441243976796e-02:3.3918611336745824e-01:4.9091280443955587e-01:4.5270622297651225e-01:1.0002578603829873e+00:3.2365966190338458e-01:1.6343237686103564e+00:3.4877290363845348e-01:2.3548321647259343e+00:4.1224150125511994e-01:2.9999842484078290e+00:3.9185078250583361e-01:3.7175555985805326e+00 + CVs 20 + 1.0461481780508347e-01 2.9190040974740356e-01 -1.9521340917458463e-01 + 2.3814987892112655e-01 5.5752475643620669e-01 -3.8496682906276719e-01 + 3.8711319776339925e-01 7.7863985636815047e-01 -5.8745032167823852e-01 + 5.4500530520926904e-01 9.4433303521195167e-01 -8.0160367048002035e-01 + 7.0579741375130656e-01 1.0457306940904203e+00 -1.0135940353767259e+00 + 8.5835040832016629e-01 1.0763134931437903e+00 -1.2031787577212165e+00 + 9.9207307520028942e-01 1.0445048447906442e+00 -1.3532213416848773e+00 + 1.1039592385405432e+00 9.7332318086997549e-01 -1.4599752816516840e+00 + 1.1965080062736646e+00 8.8609267423644522e-01 -1.5283905131794040e+00 + 1.2744683410734789e+00 8.0063063391043154e-01 -1.5670920788607479e+00 + 1.3434263380404909e+00 7.2851756487537123e-01 -1.5880610232520547e+00 + 1.4066369868002295e+00 6.7608042266526081e-01 -1.6034880806357601e+00 + 1.4638301138463963e+00 6.4577654559287545e-01 -1.6249454433399964e+00 + 1.5107042779071653e+00 6.3758546873070776e-01 -1.6625585267974226e+00 + 1.5394933204884658e+00 6.5962509338009745e-01 -1.7201309452711389e+00 + 1.5422462181382592e+00 7.6905310713665664e-01 -1.7924756294587441e+00 + 1.5180617635187998e+00 1.1275531562834304e+00 -1.9270528931631330e+00 + 1.5092503977967489e+00 1.6883532518003614e+00 -2.3395837021570531e+00 + 1.5045963412017131e+00 1.4378105305561080e+00 -2.2780758378243466e+00 + id 14735 + loc 8.5748326778411865e-01 5.5387705564498901e-01 404 + blend 0.0000000000000000e+00 + interp 3.8095300154946410e-01:2.7729118333962582e-01:1.0069978837164202e+00:3.8094919201944860e-01:2.0003607791123050e+00:3.1331203130423874e-01:2.8163185397160411e+00:3.0257506883009117e-01:3.1774892583351440e+00:2.7976908617280133e-01:3.9749593125627811e+00 + CVs 20 + -1.1322032075364807e-01 8.2058542876579585e-03 3.7123025919118043e-02 + -2.0794612863685658e-01 2.9408816833376511e-02 8.0315909732524060e-02 + -2.7820874299012976e-01 6.8828795683525387e-02 1.3173085106525728e-01 + -3.4447319510215152e-01 1.1501705486167538e-01 1.7741957715192364e-01 + -4.0793472413344367e-01 1.6735403624464462e-01 2.1631815508350671e-01 + -4.6977322233555963e-01 2.2505589911059243e-01 2.4769932065342395e-01 + -5.3023465677223036e-01 2.8572158809427339e-01 2.7085305613914396e-01 + -5.8687112424507470e-01 3.4165122696451733e-01 2.8513330378822194e-01 + -6.3711245846850562e-01 3.8105970078109630e-01 2.8983249481783924e-01 + -6.7995579037716358e-01 4.0654482551996529e-01 2.8745863271297833e-01 + -7.0867007849982555e-01 4.3707003330873828e-01 2.8954508394634659e-01 + -7.1500937866559233e-01 4.7806455288525984e-01 3.0537279606372891e-01 + -6.9799685726423055e-01 5.1307249662460785e-01 3.3053241347178364e-01 + -6.5976087674002182e-01 5.2760588819468379e-01 3.5967972217341315e-01 + -5.9754600860501483e-01 5.2552950055608805e-01 3.9797986332362079e-01 + -5.1308064152800925e-01 5.1682920182613656e-01 4.4770143295860765e-01 + -4.3012950720908183e-01 4.9945575753964522e-01 4.9331401539824998e-01 + -3.8240355790806174e-01 4.6473863291572975e-01 5.1808475578472912e-01 + -3.2527725635558458e-01 3.3240034012602848e-01 5.0792188827466966e-01 + id 14736 + loc 7.1348839998245239e-01 4.0555644780397415e-02 405 + blend 0.0000000000000000e+00 + interp 4.5326523025932158e-01:3.2748178832111036e-01:4.1843370909247557e-01:3.7813609092558170e-01:9.8901126917705662e-01:2.8200443052085128e-01:1.9269065527483737e+00:3.9002650597058602e-01:2.8118163152321993e+00:4.5326069760701904e-01:3.3272886765259222e+00:3.8461142885197563e-01:3.9990133336401104e+00 + CVs 20 + 8.5267051660693649e-02 6.8147476065569687e-02 4.4409506642096523e-02 + 1.7467991802253238e-01 1.4706360621442371e-01 9.3862243177784771e-02 + 2.7586269984363976e-01 2.3825935431058728e-01 1.4730523986098282e-01 + 3.9563262255600251e-01 3.4162113713972098e-01 2.0218343552010887e-01 + 5.3992485719255801e-01 4.5729729994201657e-01 2.5376622234646379e-01 + 7.1420124141847452e-01 5.8429218317911580e-01 2.9468379351672852e-01 + 9.2185753651256275e-01 7.2024065521014802e-01 3.1475541754166281e-01 + 1.1625867505424927e+00 8.6146695403436713e-01 3.0205868834573579e-01 + 1.4315681970674983e+00 1.0035046829896419e+00 2.4435312333448878e-01 + 1.7189869697504634e+00 1.1416739357321535e+00 1.3085561393892015e-01 + 2.0117812727184563e+00 1.2711573096235202e+00 -4.6284558254818822e-02 + 2.2974955142525024e+00 1.3847711085736583e+00 -2.9096059066570035e-01 + 2.5638515282543612e+00 1.4734564105435672e+00 -6.0038865571142230e-01 + 2.7903445538234064e+00 1.5424008877434137e+00 -9.5606231585666612e-01 + 2.9492768771140940e+00 1.6296163578742942e+00 -1.3194547654930946e+00 + 3.0254694060433867e+00 1.7825482534339714e+00 -1.6452370183547731e+00 + 3.0319372960789202e+00 2.0058185885819233e+00 -1.9083515425334752e+00 + 2.9958406587219173e+00 2.2658911647520070e+00 -2.1161168804952193e+00 + 3.0922217745746838e+00 2.4085038704741031e+00 -2.3413895110411067e+00 + id 14737 + loc 9.0285527706146240e-01 4.6518689393997192e-01 394 + blend 0.0000000000000000e+00 + interp 4.1568715308452459e-01:2.6722585850386693e-01:5.7637020918662540e-01:4.1568299621299376e-01:1.0381763691371331e+00:3.9895268537396428e-01:2.0017611361800731e+00:3.1312670901593126e-01:2.7380755435452513e+00:2.4066346553723569e-01:3.8901541208409149e+00 + CVs 20 + 2.9841341965861246e-01 2.4658537208346565e-01 2.8224952889195482e-01 + 5.5051665489985369e-01 4.6637130338361599e-01 5.5431700224322322e-01 + 7.8115636832173518e-01 6.7982184534276602e-01 8.4242663510387406e-01 + 9.9713057642157599e-01 8.9412606694449970e-01 1.1584447938637252e+00 + 1.1964492813985750e+00 1.1036873454602636e+00 1.5042834558040326e+00 + 1.3868911265173198e+00 1.3040870798361932e+00 1.8820360927366941e+00 + 1.5823058033573281e+00 1.4886628311161414e+00 2.2926761296057059e+00 + 1.7940634214097928e+00 1.6396196168387798e+00 2.7373410046046023e+00 + 2.0324117233469510e+00 1.7288614617041671e+00 3.2183320527518364e+00 + 2.3091096794161206e+00 1.7279128438317852e+00 3.7287282474904422e+00 + 2.6237568655085863e+00 1.6206868356151314e+00 4.2410391243647370e+00 + 2.9557065144777859e+00 1.4155894227794290e+00 4.7236542800694243e+00 + 3.2890673772099301e+00 1.1333530939329921e+00 5.1636255658244696e+00 + 3.6356457858233684e+00 7.8028253453514473e-01 5.5458348919628424e+00 + 4.0071340404735096e+00 3.5548984111160076e-01 5.8398636915236271e+00 + 4.3811932478377358e+00 -1.4163211583088353e-01 6.0065688461780358e+00 + 4.7104321135800058e+00 -6.8525552645726950e-01 6.0192552088939753e+00 + 4.9703891474534228e+00 -1.1905798921810842e+00 5.9098539905825564e+00 + 5.1897605093971100e+00 -1.5136191236151144e+00 5.8420418490737154e+00 + id 14738 + loc 3.1184864044189453e-01 6.1021856963634491e-02 1079 + blend 0.0000000000000000e+00 + interp 5.5027758768405211e-01:2.5978336815943925e-01:9.8084836440824774e-02:3.0099435680838671e-01:1.6621261969559054e-01:5.5027208490817525e-01:1.0448719639208401e+00:2.9330311017516986e-01:1.8891302212721819e+00:3.7245261643334870e-01:2.6877133646831179e+00:2.9419313910168060e-01:3.4854503878700127e+00 + CVs 20 + 2.6830533370354109e-01 4.4724311128862226e-01 2.4702196307192725e-02 + 4.0473201234854989e-01 8.3172610760021626e-01 2.2326984184296850e-02 + 4.8448464951229953e-01 1.1902951589999016e+00 4.0607336609417288e-03 + 5.3675746194955332e-01 1.5304051430924113e+00 -2.7386655534406446e-02 + 5.5398749626304400e-01 1.8352917083261318e+00 -7.5994354504212103e-02 + 5.3297546307320132e-01 2.0850610574755692e+00 -1.3879528670428831e-01 + 4.7872637521180850e-01 2.2669008216072606e+00 -2.0588051089949955e-01 + 4.0087585014837812e-01 2.3867744295006306e+00 -2.6992854097961472e-01 + 3.0189990352978580e-01 2.4544445704396134e+00 -3.3576568835287235e-01 + 1.8715672330643640e-01 2.4643040285962439e+00 -4.0518884871212169e-01 + 7.3535995336281412e-02 2.4175276502167486e+00 -4.6666989878859277e-01 + -2.1926919703785464e-02 2.3335653770788678e+00 -5.0732314629682163e-01 + -8.4041487570754692e-02 2.2440439588463184e+00 -5.2223580280936033e-01 + -9.8258471126777103e-02 2.1900890771817449e+00 -5.2507780717214569e-01 + -5.5569762033996217e-02 2.2153525425543306e+00 -5.6729515998946911e-01 + 3.8176116163467722e-02 2.2944757914199663e+00 -7.1760031645345812e-01 + 1.9139898302255598e-01 2.3063789882166561e+00 -9.7528892541553958e-01 + 4.0981943183063180e-01 2.1508974947816140e+00 -1.2290202550175051e+00 + 4.8940766187540014e-01 2.1938073448789068e+00 -1.0159250812765257e+00 + id 14739 + loc 6.1169677972793579e-01 8.5950481891632080e-01 404 + blend 0.0000000000000000e+00 + interp 4.2700203210583293e-01:3.8126496226665002e-01:4.2693449687458696e-04:3.0936467620694391e-01:6.1339518163478957e-01:4.0965303024748234e-01:1.3273888909803191e+00:2.8985012896659362e-01:1.9963364129833931e+00:2.9262852349666818e-01:2.9226189925787178e+00:4.2699776208551188e-01:3.4998116808404656e+00 + CVs 20 + 1.1009123000561627e-01 2.0376082452534947e-01 -3.7852609618413843e-02 + 2.2901464238163949e-01 3.9200832834272092e-01 -5.3413740599339371e-02 + 3.6756173069844067e-01 5.4201807628261145e-01 -7.6915626559256003e-02 + 5.2542979686400659e-01 6.4973152146057211e-01 -1.0823180368590204e-01 + 6.9614405769837362e-01 7.0788834926647526e-01 -1.4830955775989396e-01 + 8.6908742145326878e-01 7.1526807957623639e-01 -1.9520304677635383e-01 + 1.0337866811571690e+00 6.7924676720935251e-01 -2.4307748776191992e-01 + 1.1860297795586985e+00 6.1794458004871999e-01 -2.8098531796488829e-01 + 1.3274142239355871e+00 5.4630165548184073e-01 -3.0185773835503066e-01 + 1.4520784982896062e+00 4.6168362611331537e-01 -3.1622449901908406e-01 + 1.5438964281085172e+00 3.5466296028425448e-01 -3.4663079117160617e-01 + 1.5932418273327484e+00 2.2992690736881483e-01 -4.0210662295629163e-01 + 1.6168406819178081e+00 1.0958324107474615e-01 -4.6448172706468283e-01 + 1.6438164616090436e+00 1.0349611151467819e-02 -5.1540344556688744e-01 + 1.6807497569540502e+00 -6.9174947397788289e-02 -5.5894623302942836e-01 + 1.7152817765137800e+00 -1.3623215930713706e-01 -6.0918600154029567e-01 + 1.7393925202529537e+00 -1.9528839644252505e-01 -6.7248643172638101e-01 + 1.7603142921056256e+00 -2.4867820708761668e-01 -7.4283942594690200e-01 + 1.9034318097177649e+00 -2.4942826749761282e-01 -7.8915409173001516e-01 + id 14740 + loc 2.9131892323493958e-01 7.6932996511459351e-01 405 + blend 0.0000000000000000e+00 + interp 4.6628891700214492e-01:3.6538509683550741e-01:5.7747671451169325e-05:2.9728416163287102e-01:9.9998927861534437e-01:3.4876272093656746e-01:1.5972633454409970e+00:4.6628425411297492e-01:1.9980559527725799e+00:3.7766100439221112e-01:2.3957290626050431e+00:4.4480978349215966e-01:2.9722184292480538e+00:4.5941083086629925e-01:3.3557745875940728e+00 + CVs 20 + 8.0289366837284146e-02 1.9428073655018208e-01 1.0129441767319963e-01 + 7.9297897766086659e-02 2.5670218926480681e-01 1.8223457957753705e-01 + 2.3248088195745378e-02 2.9062515413730833e-01 2.4950186934032426e-01 + -2.0810482266979555e-02 2.9976017947128525e-01 2.9380526106633320e-01 + -5.4034149670449637e-02 2.8792624424054131e-01 3.0212943292240424e-01 + -7.6975642945660769e-02 2.7086053931504100e-01 2.7118529853985701e-01 + -8.9432469280328164e-02 2.6690107745521269e-01 2.1766391741796129e-01 + -9.1537734088397910e-02 2.8202615956811999e-01 1.7221116893836524e-01 + -8.2066737386061600e-02 3.0767513929103085e-01 1.6020815416131065e-01 + -5.7569452067140287e-02 3.3180414744111469e-01 1.9302051741762655e-01 + -1.3371192415823463e-02 3.4800295812209331e-01 2.7027362297113816e-01 + 5.5335505160532497e-02 3.5674604037729918e-01 3.8543332479833048e-01 + 1.4950283158831978e-01 3.5747118806657791e-01 5.3510456323582456e-01 + 2.6432983329956572e-01 3.3780239765282322e-01 7.2495931293665072e-01 + 3.9425322232836579e-01 2.8540900180934492e-01 9.5929189937216341e-01 + 5.3762987978753918e-01 2.1260357726382689e-01 1.2287969983888398e+00 + 6.9376286838592960e-01 1.4893674339223428e-01 1.5137526533193242e+00 + 8.5970897302489158e-01 1.1396163391088748e-01 1.7958927244991496e+00 + 1.0437717609791757e+00 1.2629421345249814e-01 2.0585962149644241e+00 + id 14741 + loc 6.4078521728515625e-01 2.5095757097005844e-02 1079 + blend 0.0000000000000000e+00 + interp 3.7182390976722113e-01:3.7182019152812346e-01:6.9737184320970114e-01:2.4905595534746283e-01:1.3775204002368846e+00:2.5449627350137588e-01:2.7947927832440924e+00:2.5749240006953145e-01:3.0876090211474905e+00:2.6004802861591347e-01:3.9842007075139922e+00 + CVs 20 + 1.2315767114721043e-02 4.0035991626838596e-01 -9.9547705054081254e-02 + -2.0654781959876911e-02 7.5144544890958542e-01 -1.1833151274327330e-01 + -8.3200285903437921e-02 1.0765137898539110e+00 -9.5295022112986127e-02 + -1.6627525651838682e-01 1.3709818278065005e+00 -5.2441616751173481e-02 + -2.6733191367225156e-01 1.6142976559943467e+00 9.9470195213017254e-03 + -3.7788277030864059e-01 1.7854006336019546e+00 8.4214278500430950e-02 + -4.8357013626582857e-01 1.8744792167086337e+00 1.5536417619899623e-01 + -5.7358627335839807e-01 1.8959398444651221e+00 2.1067590936338532e-01 + -6.5363263258678872e-01 1.8765012169851025e+00 2.5295850269066295e-01 + -7.4461458319929585e-01 1.8285148095442629e+00 2.9937151995322009e-01 + -8.6027372728615714e-01 1.7448574731285769e+00 3.6444128101605888e-01 + -9.9198489012604840e-01 1.6180205671835017e+00 4.5119950028357447e-01 + -1.1189864632091888e+00 1.4469300852318809e+00 5.5936296222344306e-01 + -1.2151338551644151e+00 1.2312675991646949e+00 6.9286371814592562e-01 + -1.2400865590762500e+00 9.7804077667024603e-01 8.5467392986090052e-01 + -1.1483729985270055e+00 7.1354070749668519e-01 1.0445246403316177e+00 + -9.2018105912199744e-01 4.8272592244421553e-01 1.2819352248489593e+00 + -5.7599440187592121e-01 3.7029883759847804e-01 1.5930587706875026e+00 + -3.4811678191464546e-01 2.3361214874347802e-01 1.8812452490823763e+00 + id 14742 + loc 5.1791435480117798e-01 3.1069543957710266e-01 394 + blend 0.0000000000000000e+00 + interp 5.0475180239947270e-01:4.6316026201413663e-01:1.3488702781070261e-01:3.2631279274316533e-01:8.9748256940722271e-01:2.6134929858940653e-01:1.3338605055862458e+00:4.3344454179724218e-01:1.8877352363629070e+00:4.9561230339866152e-01:2.1738692561991333e+00:5.0474675488144871e-01:2.8263246808341114e+00:3.2438373619239419e-01:3.3956507748353841e+00 + CVs 20 + 1.7767334849065672e-01 2.3261150502106914e-01 2.7190372545122132e-01 + 3.1922833875380563e-01 4.3651103828470972e-01 5.2943117695680741e-01 + 4.6018686410490506e-01 6.3926658113581702e-01 7.8748465942435675e-01 + 6.1176752912900656e-01 8.5572511422593256e-01 1.0444404011726185e+00 + 7.6558676921406976e-01 1.0893073873361980e+00 1.2938236187059202e+00 + 9.1789958985707920e-01 1.3387070582483098e+00 1.5384012475225770e+00 + 1.0766192488901900e+00 1.5944107926221069e+00 1.7948008839682463e+00 + 1.2563791865185419e+00 1.8424377812342292e+00 2.0823323591702865e+00 + 1.4682168546528098e+00 2.0695950549626811e+00 2.4044204760624086e+00 + 1.7159030008728657e+00 2.2584714003790816e+00 2.7537294107586767e+00 + 1.9973678618622623e+00 2.3757960305418528e+00 3.1314238015344342e+00 + 2.3046846842364808e+00 2.3720215924218642e+00 3.5435160639127128e+00 + 2.6146682282984690e+00 2.2020349946393809e+00 3.9684148654045464e+00 + 2.8923323630599480e+00 1.8643016384993423e+00 4.3559369790178524e+00 + 3.1308358465860060e+00 1.4013373752040348e+00 4.6800791416755549e+00 + 3.3831808527395082e+00 8.5223564597149126e-01 4.9511486562926557e+00 + 3.7502489944603714e+00 2.6873547887415405e-01 5.1708288224168477e+00 + 4.2641162284671328e+00 -2.4432181352207882e-01 5.3163382148898188e+00 + 4.6302829729355661e+00 -6.3646024213505070e-01 5.4380312721467341e+00 + id 14743 + loc 2.8974941372871399e-01 8.2581466436386108e-01 404 + blend 0.0000000000000000e+00 + interp 4.4371876664391263e-01:3.0879226723247083e-01:1.4372590261171991e-02:2.9346919169745544e-01:7.3584400419447471e-01:4.4371432945624623e-01:1.0757264391886130e+00:3.0711104643300996e-01:1.9306505553088544e+00:3.3930698884457050e-01:2.6266429393726218e+00:3.8127695998362049e-01:3.1737797750024193e+00 + CVs 20 + 1.7014920862023775e-01 1.6462291723448880e-01 -5.9789457394171928e-02 + 3.4455949309900380e-01 3.4537216338529958e-01 -7.6380372942359123e-02 + 5.3020519817062284e-01 4.9419462477508269e-01 -1.3385945318349268e-01 + 7.2589539918974755e-01 6.1106014704367062e-01 -2.2862565415619218e-01 + 9.2578792982732860e-01 6.9008438232219604e-01 -3.5776588451974112e-01 + 1.1215777243954879e+00 7.2479206286594400e-01 -5.1994503189272157e-01 + 1.3039063077320381e+00 7.1183384361277180e-01 -7.0978410984075424e-01 + 1.4639651664932880e+00 6.5088112215170069e-01 -9.1890903959140458e-01 + 1.5951249144273552e+00 5.4462430788591698e-01 -1.1364827553146051e+00 + 1.6942029032509585e+00 3.9946024012502046e-01 -1.3501433259418829e+00 + 1.7620829172796988e+00 2.2501242729944848e-01 -1.5479208667036179e+00 + 1.8021796795847844e+00 3.0547877391344569e-02 -1.7206925302356020e+00 + 1.8169540331076783e+00 -1.7866726890524665e-01 -1.8630297931351516e+00 + 1.8082577396201693e+00 -3.9909490505788336e-01 -1.9705797267540235e+00 + 1.7773969138836145e+00 -6.2734063751331059e-01 -2.0382807878065590e+00 + 1.7287044320875165e+00 -8.5307339557766615e-01 -2.0623395730437970e+00 + 1.6700795243781084e+00 -1.0564462995520276e+00 -2.0468537774104409e+00 + 1.6116926347514227e+00 -1.2146138802792166e+00 -2.0053173990668762e+00 + 1.6540873522814601e+00 -1.2309457336410439e+00 -1.9779647384731296e+00 + id 14744 + loc 9.5635324716567993e-01 9.7710424661636353e-01 405 + blend 0.0000000000000000e+00 + interp 6.6012262778870801e-01:6.5415210038726823e-01:6.3796684814765303e-04:5.2036399000968492e-01:1.8536233948040548e-01:3.0160653648090685e-01:7.2529924693818648e-01:4.5422579509922717e-01:1.0070251852340886e+00:3.5806390843121172e-01:1.8508419449588693e+00:2.6567401725728162e-01:2.4616130159154919e+00:4.9745388522832762e-01:3.0888845479616105e+00:6.6011602656243018e-01:3.7105335739672123e+00 + CVs 20 + 2.1566764062248267e-01 3.2702791599461822e-01 -3.6963929272261088e-02 + 2.8905423916555062e-01 5.1572964090736217e-01 -6.9427011746189413e-02 + 2.9450113028256947e-01 6.5638764158878660e-01 -1.1162210347387122e-01 + 3.0850184105477779e-01 7.8486744988844537e-01 -1.6718005115577894e-01 + 3.2853165717946392e-01 8.9915239731980356e-01 -2.3343917806331987e-01 + 3.5127476153021853e-01 1.0017237252523841e+00 -3.0901561744415518e-01 + 3.7625095344921478e-01 1.1025560208739926e+00 -3.9534696563709348e-01 + 4.1345265035369649e-01 1.2246639095308771e+00 -4.9503493761194722e-01 + 4.9851881323796188e-01 1.3931724058679631e+00 -5.9313856297668677e-01 + 6.5888999944756221e-01 1.5705814621939349e+00 -6.3874090003277639e-01 + 8.4445547221209627e-01 1.6820066448820472e+00 -6.2317296825401503e-01 + 1.0172713948332512e+00 1.7241602821450885e+00 -5.8535844248500279e-01 + 1.1813707223005496e+00 1.7177176750392924e+00 -5.4628691974331989e-01 + 1.3396405026057114e+00 1.6732980741264973e+00 -5.1730616100275806e-01 + 1.4825422244960229e+00 1.5974485292734228e+00 -5.1216230380492722e-01 + 1.5984714948927119e+00 1.4978654305599732e+00 -5.3952298834964585e-01 + 1.6866113894504113e+00 1.3828671945316859e+00 -5.9223160520835738e-01 + 1.7550996542658495e+00 1.2585611719620524e+00 -6.5538289253604209e-01 + 1.9066939921479458e+00 1.1560918959197082e+00 -6.7809906240872997e-01 + id 14745 + loc 4.1747263073921204e-01 2.3107990622520447e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4509235354092291e-01:2.8478548069657805e-01:1.9291797726961990e-02:4.2632190561321509e-01:9.0608533041989270e-01:2.9338354239703612e-01:1.2895115339994605e+00:4.4508790261738751e-01:2.0556463237976130e+00:2.7243202318018006e-01:2.6785798962235710e+00:4.3118211100547593e-01:3.1680135131384537e+00 + CVs 20 + 2.8178188672524118e-01 4.1607335799194933e-01 -7.9037847498453273e-02 + 4.6384311945664752e-01 7.6932972450595150e-01 -1.6873741160352035e-01 + 6.1064932540892491e-01 1.0866396345451270e+00 -2.6341413304344602e-01 + 7.4638281963531161e-01 1.3878399144420821e+00 -3.6471531936009749e-01 + 8.6173348101669534e-01 1.6770989716128071e+00 -4.7978326733758025e-01 + 9.4358185272606276e-01 1.9588818721258821e+00 -6.2060277110992046e-01 + 9.7321005174912989e-01 2.2264007172315168e+00 -8.0162394455609887e-01 + 9.3877901643480188e-01 2.4523965959127754e+00 -1.0263911447415173e+00 + 8.4854769273875275e-01 2.6081678481130535e+00 -1.2825855236030710e+00 + 7.1861579464305203e-01 2.6822033256433904e+00 -1.5571914386565375e+00 + 5.5784290611035248e-01 2.6743625843138994e+00 -1.8423278624199551e+00 + 3.6667251487180152e-01 2.5857967830837847e+00 -2.1300744021349027e+00 + 1.4077958621425068e-01 2.4102512560667417e+00 -2.4104667228831893e+00 + -1.2709118580738815e-01 2.1291844319787878e+00 -2.6657466339350067e+00 + -4.4557658836868042e-01 1.7162155392786866e+00 -2.8538996610858858e+00 + -7.9462622868939170e-01 1.1896135861602717e+00 -2.8848835273717466e+00 + -1.1206252173846603e+00 6.6496186001407565e-01 -2.6955842823339671e+00 + -1.4011042133290548e+00 2.7873261065180643e-01 -2.3396599955313264e+00 + -1.5837258864275650e+00 2.8649748564683053e-01 -2.1170238198271161e+00 + id 14746 + loc 5.3225070238113403e-01 7.4945169687271118e-01 405 + blend 0.0000000000000000e+00 + interp 5.1796880917550481e-01:4.6348706104177989e-01:5.5387444173502165e-02:4.5516433105655474e-01:7.7690952571960892e-01:3.5488222048796636e-01:1.1398421522696147e+00:5.1796362948741304e-01:1.8050944084826910e+00:4.0439948925585367e-01:2.1023044794705310e+00:4.4937471363002401e-01:2.8746720625026638e+00:2.8669716793940192e-01:3.7012686579803713e+00 + CVs 20 + 1.2345271767783400e-01 2.5899726217680574e-01 -6.7240281416448382e-03 + 1.3645320152216012e-01 4.1118729405803284e-01 -2.0594177537405164e-02 + 1.0672104482774947e-01 5.3358265698365148e-01 -3.8367954149753421e-02 + 8.2041416449149696e-02 6.5210990984504003e-01 -5.9819567729411660e-02 + 6.1251537490470243e-02 7.7171888788165832e-01 -8.1460925485824287e-02 + 4.3723259959842053e-02 9.0179815060821999e-01 -9.4158082591467157e-02 + 2.9279828577498945e-02 1.0485850830053383e+00 -7.8463467941235793e-02 + 1.8199835241937357e-02 1.2029590495731095e+00 -1.2715918717375839e-02 + 1.2518804185931209e-02 1.3463696459446783e+00 1.0974595186458097e-01 + 1.6375516879186036e-02 1.4685735959924886e+00 2.8356074393149250e-01 + 3.5308507533484912e-02 1.5686473271610519e+00 5.0448664813668431e-01 + 7.4811852684798619e-02 1.6465101924020753e+00 7.7242597331915197e-01 + 1.3767780363620452e-01 1.6991844372981999e+00 1.0850411843697987e+00 + 2.2297457338157944e-01 1.7309135423176114e+00 1.4257375350154109e+00 + 3.2958406152252495e-01 1.7661250894758880e+00 1.7666522711834323e+00 + 4.5894821951268649e-01 1.8333332600659964e+00 2.0887729789539855e+00 + 6.1266406208707191e-01 1.9426695146326107e+00 2.3865150231349910e+00 + 7.8466823395668839e-01 2.0904338183636746e+00 2.6559612156522494e+00 + 9.7430468636609313e-01 2.1895905667673778e+00 3.0029656689291668e+00 + id 14747 + loc 7.8334742784500122e-01 4.2428210377693176e-01 404 + blend 0.0000000000000000e+00 + interp 4.5132795364844713e-01:3.0249399679628203e-01:7.7755094100537270e-01:2.5950198860384344e-01:1.6616192813720883e+00:3.5102979708678356e-01:2.2054134348815797e+00:2.6347902874016338e-01:3.0420002438781708e+00:4.5132344036891064e-01:3.9889456292482599e+00 + CVs 20 + -6.4531174006226905e-02 2.8429184022132425e-01 3.6562339306626238e-02 + -9.2892246872897488e-02 5.5390286062418537e-01 8.8833355635353869e-02 + -1.4672937318562390e-01 8.2458086154677490e-01 1.5115924472918410e-01 + -2.3736254349680880e-01 1.0963431256059009e+00 2.2797218103523209e-01 + -3.6958130621519275e-01 1.3622601604646021e+00 3.2144876280395607e-01 + -5.4781596730618465e-01 1.6126428632762633e+00 4.3023127681972961e-01 + -7.7165372069376570e-01 1.8369394263799190e+00 5.4939551892430538e-01 + -1.0358380436838819e+00 2.0263278947509771e+00 6.7190172452721986e-01 + -1.3333663730256777e+00 2.1743824424827078e+00 7.9008743242029011e-01 + -1.6550579174673534e+00 2.2781433983986528e+00 8.9910205398013865e-01 + -1.9876809472852477e+00 2.3405261251835161e+00 1.0176065015548856e+00 + -2.3136835136985128e+00 2.3660985750663883e+00 1.1997285558878288e+00 + -2.5960501206441426e+00 2.3522838730949336e+00 1.4936809978496004e+00 + -2.7862280594233511e+00 2.2940452431406215e+00 1.8785047297992388e+00 + -2.8718062981452617e+00 2.1954152207641329e+00 2.2900850278127187e+00 + -2.8507405567522199e+00 2.0701419249770501e+00 2.6943279130011355e+00 + -2.7140758200909763e+00 1.9422583919497365e+00 3.0648129730494631e+00 + -2.4942063566936521e+00 1.8384800825725731e+00 3.3680747735890937e+00 + -2.4523094633213098e+00 1.7657025609639541e+00 3.6030134609638251e+00 + id 14748 + loc 1.0676714032888412e-01 7.3623609542846680e-01 1079 + blend 0.0000000000000000e+00 + interp 3.7610900103937334e-01:3.5802929980276971e-01:3.8742747633954133e-03:3.7610523994936296e-01:7.4900588948100266e-01:2.9634773427976563e-01:1.4005461941955777e+00:3.5347689687163769e-01:2.2246801854512093e+00:2.9523736101014908e-01:3.1606227696535401e+00 + CVs 20 + 7.5625237101679579e-02 4.5259367530269767e-01 2.2938464729593708e-01 + 1.6534550784227769e-01 8.0870350324253404e-01 3.4415336403329411e-01 + 2.5447511865495059e-01 1.1175674640423545e+00 4.0678106530427455e-01 + 3.3480480918408684e-01 1.3943250346074496e+00 4.4308913866093247e-01 + 4.0399648023794571e-01 1.6325973711053632e+00 4.5709084362883723e-01 + 4.5469778060362415e-01 1.8248351421516062e+00 4.6084229466779936e-01 + 4.8002999225653220e-01 1.9735424631336913e+00 4.7286499038606422e-01 + 4.8358398623874971e-01 2.1006909091932013e+00 5.0880749195461961e-01 + 4.8168255456677872e-01 2.2386469773987665e+00 5.6651327757310399e-01 + 4.9412574514738417e-01 2.4033510941167400e+00 6.1479687718301890e-01 + 5.2603138454927101e-01 2.5750802742987196e+00 6.1570447873380707e-01 + 5.6536398401085153e-01 2.7192813308447561e+00 5.5671540335071323e-01 + 5.9573139687800913e-01 2.8119504322114599e+00 4.4658826630715232e-01 + 6.0483632065815551e-01 2.8442886671221972e+00 2.9758323366733030e-01 + 5.9129394862452100e-01 2.8300077819984981e+00 1.0912424115010588e-01 + 5.7121261699744852e-01 2.8142898029958858e+00 -1.6010663693899874e-01 + 5.6397389588869773e-01 2.7845740655677371e+00 -5.6321743339125219e-01 + 5.5424533800501641e-01 2.6092883485415288e+00 -9.0801098933421542e-01 + 4.9923706102197629e-01 2.3245640313207381e+00 -7.0606509615493807e-01 + id 14749 + loc 3.8005360402166843e-03 7.9222694039344788e-02 394 + blend 0.0000000000000000e+00 + interp 5.5197609417342741e-01:3.7256661583315953e-01:9.5180422056038982e-01:3.2435292035716823e-01:1.5957548047335250e+00:4.3361468660467722e-01:2.1794947680228560e+00:3.7528595454887631e-01:2.9831717451581001e+00:3.9920019435628762e-01:3.0034623807630569e+00:5.5197057441248565e-01:3.3935598690716233e+00:5.2818970318938119e-01:3.9799865929369265e+00 + CVs 20 + -7.7545003031065429e-02 2.1783511980492873e-01 2.4116128335637382e-01 + -1.7360722579810078e-01 4.6238295614313252e-01 5.0323890425431050e-01 + -2.7065218395819979e-01 7.1988394724504334e-01 7.7515848438277590e-01 + -3.6561161317824609e-01 9.8698001354909193e-01 1.0489010391333933e+00 + -4.6887699159987695e-01 1.2616808578738152e+00 1.3145899170210180e+00 + -5.9313657807506537e-01 1.5339314654712246e+00 1.5672623632058555e+00 + -7.5026784156831949e-01 1.7911162915114565e+00 1.8103344049664518e+00 + -9.4541488812028862e-01 2.0208921240170938e+00 2.0461956824197243e+00 + -1.1743305992302191e+00 2.2095936048455487e+00 2.2723773817553172e+00 + -1.4242968803781353e+00 2.3419996343333653e+00 2.4860416640362848e+00 + -1.6770852379522516e+00 2.4033056653832885e+00 2.6859490929959864e+00 + -1.9144110046070026e+00 2.3841149623158286e+00 2.8700168721979802e+00 + -2.1271498151536132e+00 2.2914368812777193e+00 3.0379700097635958e+00 + -2.3226441918833172e+00 2.1505566093989721e+00 3.1964266716679077e+00 + -2.5079304132388827e+00 1.9939557435883315e+00 3.3481827553892796e+00 + -2.6766680306500592e+00 1.8541050598192004e+00 3.4859343991158678e+00 + -2.8223872822843190e+00 1.7447744015640732e+00 3.6010951933975788e+00 + -2.9542814569862643e+00 1.6553305488691950e+00 3.7032295273220699e+00 + -3.0892851772223588e+00 1.5794310614150451e+00 3.8471987502738090e+00 + id 14750 + loc 7.7607989311218262e-01 2.3286901414394379e-01 405 + blend 0.0000000000000000e+00 + interp 4.9454561038196720e-01:2.9226283062375913e-01:6.1450696923777470e-01:2.7241501286277464e-01:1.0739083255993291e+00:4.1941698841331215e-01:1.6389159728599814e+00:4.3246150102256992e-01:2.0000000008328342e+00:3.7555862698329701e-01:2.3604180368565366e+00:4.9454066492586340e-01:2.9370781491810636e+00:4.4443185078473241e-01:3.1603977490985740e+00:2.5256891270374127e-01:3.7234616531655833e+00 + CVs 20 + 1.4294754675501237e-01 1.3932714696542436e-01 -4.9561563731307648e-03 + 3.1507899114679561e-01 2.2971604742423996e-01 -7.2407880186395220e-03 + 4.9794790134413536e-01 3.0431361648864735e-01 -4.7396564668865521e-03 + 6.8186117194025453e-01 3.6044910089645488e-01 -5.1543941952591626e-03 + 8.6638929675404497e-01 3.9401129839399346e-01 -1.6879048961769415e-02 + 1.0489734926303906e+00 4.0213751862060682e-01 -4.7975439203575831e-02 + 1.2254136787569121e+00 3.8384536512752221e-01 -1.0512109141757224e-01 + 1.3908538402464590e+00 3.4034769502559792e-01 -1.9297664515058310e-01 + 1.5407905869748713e+00 2.7458830127285994e-01 -3.1370786952128360e-01 + 1.6716407066993941e+00 1.9010974136884529e-01 -4.6706875727935337e-01 + 1.7795736777233861e+00 8.7282046922822709e-02 -6.4834373809121659e-01 + 1.8634116641276128e+00 -3.6534283948819302e-02 -8.4523141383812861e-01 + 1.9267288099845543e+00 -1.7309848269976336e-01 -1.0568868832150418e+00 + 1.9645435590475770e+00 -2.8772138961397564e-01 -1.3246039669009348e+00 + 1.9472617480169161e+00 -3.2758270512118770e-01 -1.6978181824070580e+00 + 1.8419833383748101e+00 -2.5373215716860897e-01 -2.1483040666850672e+00 + 1.6554573783591335e+00 -7.3312805485541865e-02 -2.5870493413147475e+00 + 1.4373488361322933e+00 1.6951714993007971e-01 -2.9496220341685744e+00 + 1.4313646488428249e+00 2.5574692203874871e-01 -3.1720520618909762e+00 + id 14751 + loc 9.7283679246902466e-01 4.1794866323471069e-01 404 + blend 0.0000000000000000e+00 + interp 4.0598440944396375e-01:2.6284268688470680e-01:6.6894723790102972e-03:1.8997765813840742e-01:1.2579448974257355e+00:2.8015710211370581e-01:2.0214595160974538e+00:4.0598034959986934e-01:2.6770505786293430e+00:2.4596327820075020e-01:3.2442519811065855e+00 + CVs 20 + -1.3676384107899753e-01 -1.4190419962585771e-02 1.2897166332159063e-01 + -2.2280003671285858e-01 -5.6146882401137771e-02 2.3683988505369172e-01 + -2.5914965058456207e-01 -1.1363044564260674e-01 3.2806268526442689e-01 + -2.7234044720463446e-01 -1.6487785811739170e-01 4.0841134592440415e-01 + -2.6139253079589214e-01 -2.0241078306571952e-01 4.8127057795835237e-01 + -2.2865057676446626e-01 -2.1837702981322182e-01 5.5421228962675828e-01 + -1.8670789000341131e-01 -2.0676581518788337e-01 6.3455201813946305e-01 + -1.5274888360980957e-01 -1.6626798534847390e-01 7.2515897283540665e-01 + -1.3859744139795960e-01 -9.8609891930526050e-02 8.2669490007591406e-01 + -1.5317177392853931e-01 -6.9826300612221281e-03 9.3688340288178507e-01 + -2.0972526963709537e-01 1.0416440822195727e-01 1.0288962951139091e+00 + -3.2440853813680914e-01 2.3297343058966530e-01 1.0386156369853237e+00 + -5.2072760995959588e-01 3.8144952481433114e-01 9.2577976509521243e-01 + -8.1490410422200465e-01 5.4529611509750275e-01 7.6543464783396309e-01 + -1.1717193445471754e+00 7.0780374562718484e-01 6.7716837609688851e-01 + -1.5558145018137088e+00 8.5087229153363908e-01 6.9333898296560537e-01 + -1.9583962081880353e+00 9.5464091873353873e-01 8.0488471493837643e-01 + -2.3439971421843762e+00 1.0034451056929079e+00 1.0112892590586977e+00 + -2.4034828069021632e+00 1.0020468491796395e+00 1.2647723514601732e+00 + id 14752 + loc 2.7860519289970398e-01 2.8595995903015137e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4664081837600994e-01:4.4508790261738751e-01:6.9439380513847349e-02:4.4663635196782620e-01:6.4974670598708162e-01:2.9558274515415761e-01:1.2483983577752014e+00:2.8534719976231948e-01:2.1703672758051735e+00:4.4545360427670128e-01:3.0230626417634734e+00:3.0259317787948253e-01:3.8643876553791010e+00 + CVs 20 + 1.9479915315544749e-01 4.5144527475355906e-01 5.4298112599035164e-02 + 3.0460630959798496e-01 8.2375966374255394e-01 2.2651188576386316e-02 + 3.8149288905812528e-01 1.1625301699688484e+00 -4.8646513555359150e-02 + 4.4534509819273216e-01 1.4817283054862540e+00 -1.4188534152765081e-01 + 4.9236302441947127e-01 1.7768140098052316e+00 -2.5583030426019510e-01 + 5.1455397136533343e-01 2.0463168189398817e+00 -3.8728229774185918e-01 + 4.9504636408680158e-01 2.2926632539652978e+00 -5.3399601043016753e-01 + 4.1041676721522902e-01 2.5147168852560005e+00 -6.9517297784338161e-01 + 2.4495713265068086e-01 2.6949104570826226e+00 -8.6653194599168260e-01 + 7.4755684309195658e-03 2.8077844477215486e+00 -1.0394212126800175e+00 + -2.7750276657475392e-01 2.8417407492873732e+00 -1.2068574441262241e+00 + -5.8771679446900127e-01 2.8000799728446668e+00 -1.3653163979510232e+00 + -9.0714899501832491e-01 2.6926963346661905e+00 -1.5128000185419950e+00 + -1.2251570945060943e+00 2.5298823712399909e+00 -1.6477533688360333e+00 + -1.5436619549492645e+00 2.3029359808199970e+00 -1.7682988068562784e+00 + -1.8624452436633026e+00 1.9466506797907626e+00 -1.8688812034988964e+00 + -2.0854392084780438e+00 1.3898223538218932e+00 -1.9363279355282290e+00 + -2.0970225657116233e+00 7.8908636780252839e-01 -1.9635020775995220e+00 + -2.0594840761258739e+00 4.2231602426100023e-01 -1.9619213010129015e+00 + id 14753 + loc 5.3273367881774902e-01 7.4011904001235962e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927576418733897e-01:4.7927097142969710e-01:8.5342221282283526e-02:4.6517645452911538e-01:8.5298328828240355e-01:4.3198223648149287e-01:1.3985432847606871e+00:2.7499973622931190e-01:2.3543492009265119e+00:3.5689424246167939e-01:2.9726176643172235e+00:4.1654641716155344e-01:3.5732617721744417e+00 + CVs 20 + -2.1087373921694602e-01 1.5107615563274240e-01 -1.5650625521073191e-01 + -4.3230195103583424e-01 3.0495561209011879e-01 -3.2218072670984166e-01 + -6.6643501072286548e-01 4.6210622306683535e-01 -4.9271420868961469e-01 + -9.1370557032157329e-01 6.2253358663408132e-01 -6.7076411067352804e-01 + -1.1710252111385970e+00 7.8417383345699254e-01 -8.6321844974539674e-01 + -1.4355224779589337e+00 9.4272713613604830e-01 -1.0725067533154260e+00 + -1.7074845068774867e+00 1.0929248019442754e+00 -1.2976803326636788e+00 + -1.9853356577946184e+00 1.2228274011496825e+00 -1.5417933739761538e+00 + -2.2594517202846252e+00 1.3102218012479907e+00 -1.8074377424199148e+00 + -2.5160567288679543e+00 1.3336758003676104e+00 -2.0847857704691863e+00 + -2.7456017628015892e+00 1.2864280237247612e+00 -2.3563569348512807e+00 + -2.9433239098802342e+00 1.1757090908291161e+00 -2.6123690311464873e+00 + -3.1044962190813767e+00 1.0150072774739864e+00 -2.8486206243233090e+00 + -3.2243193891429272e+00 8.2293891507911798e-01 -3.0530978163681541e+00 + -3.3014950531166236e+00 6.2186591138963454e-01 -3.2088583532316513e+00 + -3.3349055404309840e+00 4.2441244849214765e-01 -3.3174622100121800e+00 + -3.3200834606081164e+00 2.3066575649820997e-01 -3.4007220173864670e+00 + -3.2673696957439589e+00 3.6223775989997709e-02 -3.4885053186349158e+00 + -3.2775278480288490e+00 -2.5414760305975448e-01 -3.6625648643122464e+00 + id 14754 + loc 6.7512536048889160e-01 9.1554528474807739e-01 405 + blend 0.0000000000000000e+00 + interp 4.4440699551326207e-01:4.4440255144330698e-01:1.0049238735146626e-02:4.0092899712553814e-01:7.0227593911870256e-01:4.3517857477327176e-01:1.3862208796478686e+00:4.3063190470364299e-01:2.0215013499247285e+00:2.7089484288401366e-01:2.9800016447085733e+00:3.6416737814995126e-01:3.4027353220560190e+00 + CVs 20 + 2.2060042372961897e-01 3.1139245658507897e-01 -7.4690630899830503e-03 + 3.1449247402082342e-01 4.9935347189890600e-01 2.0003186342205950e-02 + 3.5272760018497229e-01 6.2989021311933668e-01 6.5978746938626862e-02 + 3.9430898178563845e-01 7.3710888449906387e-01 1.2789290884200111e-01 + 4.2930246307332365e-01 8.0850334423820680e-01 2.0041160158141419e-01 + 4.4354253766941243e-01 8.2786599624595980e-01 2.6987129444506341e-01 + 4.1999857520125494e-01 7.8500727786490709e-01 3.0744473802941019e-01 + 3.5200911004495855e-01 7.0203602912991525e-01 2.8087511300901441e-01 + 2.6178409724420659e-01 6.2888080277935832e-01 2.0627918502194670e-01 + 1.7767567271548337e-01 5.7736350386223567e-01 1.4566694212269488e-01 + 1.0629917862671637e-01 5.2192522946832376e-01 1.3268875877020478e-01 + 4.3883876344393918e-02 4.4510810458420347e-01 1.6365833439684035e-01 + -1.0668867292670262e-02 3.4152783764986844e-01 2.2914036485704883e-01 + -4.8531684318800006e-02 1.9995365618321451e-01 3.3802633674914390e-01 + -4.9202722600090378e-02 4.4800605247723793e-03 5.1481492809451679e-01 + 1.3255986906067802e-02 -2.3766923045842051e-01 7.7382993145105872e-01 + 1.5515799157729507e-01 -4.8650315200637390e-01 1.0978050707304332e+00 + 3.7205354730603157e-01 -6.9940829965328744e-01 1.4480925177249202e+00 + 5.1573590176292694e-01 -8.2849751200987032e-01 1.6620670191623559e+00 + id 14755 + loc 6.8884050846099854e-01 8.8635158538818359e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7774691604543068e-01:2.8858391498132641e-01:2.1697020495300656e-01:2.9845078792852914e-01:1.0335794703368837e+00:4.2923274616093426e-01:1.8761226788887666e+00:3.2142889249914380e-01:2.4453955110126238e+00:4.7774213857627024e-01:2.9957869338642542e+00:2.9671413721501988e-01:3.7770134140112823e+00 + CVs 20 + 1.1964589066869197e-01 3.2555085714765375e-01 -1.9735540289014836e-02 + 2.5174186095577328e-01 6.4209895511794224e-01 -7.0324435139475422e-02 + 3.9563684067710653e-01 9.5033660550091359e-01 -1.5735675928951864e-01 + 5.5198449356031665e-01 1.2461649489470836e+00 -2.8537094916132683e-01 + 7.2112900858540696e-01 1.5179360527144814e+00 -4.5989827163174857e-01 + 8.9792809412360797e-01 1.7443833862321796e+00 -6.8738536455913302e-01 + 1.0717886010777993e+00 1.9016060669592865e+00 -9.7085657337707065e-01 + 1.2304299285924056e+00 1.9753294231573473e+00 -1.3045216014384113e+00 + 1.3622170550402359e+00 1.9600830164706693e+00 -1.6747245479623818e+00 + 1.4577021725824584e+00 1.8541637617596598e+00 -2.0632230968406877e+00 + 1.5110415087690279e+00 1.6590057291427782e+00 -2.4505044430543843e+00 + 1.5191764396384135e+00 1.3787345931044390e+00 -2.8169629323600884e+00 + 1.4835419905073666e+00 1.0199501275727756e+00 -3.1438486430349872e+00 + 1.4148003218185357e+00 5.9036888779558727e-01 -3.4131365652814525e+00 + 1.3292368068685139e+00 9.2383753824549775e-02 -3.5978448963118330e+00 + 1.2275630869752638e+00 -4.8163610211387531e-01 -3.6082612882445257e+00 + 1.0710973476369787e+00 -1.0808457919238041e+00 -3.1992907671751860e+00 + 8.3256770838668648e-01 -1.3913875374385647e+00 -2.2748743728399794e+00 + 7.5704314252342220e-01 -1.8512961286231306e+00 -2.1864673558862022e+00 + id 14756 + loc 3.8799276947975159e-01 9.7729432582855225e-01 404 + blend 0.0000000000000000e+00 + interp 4.5235296117613899e-01:3.1579983662712174e-01:1.4510912306866408e-02:4.5234843764652727e-01:7.3970684037031975e-01:3.8114485102389445e-01:1.1340142477112938e+00:3.6216584270825763e-01:1.9799234034551330e+00:2.6467946851487378e-01:2.6861304186534767e+00:2.8195249237833264e-01:3.1690885672487092e+00 + CVs 20 + 9.0763352486694968e-02 1.5156699364227677e-01 4.0990817273082521e-02 + 1.8241734488192318e-01 2.9602774090536454e-01 8.2061826991221123e-02 + 2.9274289197769454e-01 4.2046952974483059e-01 1.0908020908509153e-01 + 4.2475313175954932e-01 5.2723835271062769e-01 1.2299168651816839e-01 + 5.7508896958659139e-01 6.1212151120047675e-01 1.2096273433234062e-01 + 7.3852778393298346e-01 6.7275459857791053e-01 1.0187280547583477e-01 + 9.0945951154584037e-01 7.0965416827456518e-01 6.7209579582411499e-02 + 1.0844305291900538e+00 7.2801930162729478e-01 2.3170581374972188e-02 + 1.2626390338175746e+00 7.3397307341136642e-01 -2.3384592799918669e-02 + 1.4395990402844878e+00 7.2748566238865964e-01 -7.5305478973462459e-02 + 1.6019396023560695e+00 7.0341409105634656e-01 -1.4756104248204743e-01 + 1.7342729627160802e+00 6.6093764648533404e-01 -2.5163577538146176e-01 + 1.8380455381438505e+00 6.0883944606665130e-01 -3.7375353048713728e-01 + 1.9307639305616788e+00 5.5588059360204511e-01 -4.8975764227714103e-01 + 2.0192429574070410e+00 5.0197646346226388e-01 -5.9114335295891751e-01 + 2.0898078686693893e+00 4.4324856280736824e-01 -6.8494761793367021e-01 + 2.1273093684368045e+00 3.7732459320976242e-01 -7.7786064742500904e-01 + 2.1356672424341099e+00 3.0156144562936438e-01 -8.6468050922576656e-01 + 2.2874922898697343e+00 2.2720586706179180e-01 -8.6948522727036837e-01 + id 14757 + loc 9.5686823129653931e-01 8.7338489294052124e-01 394 + blend 0.0000000000000000e+00 + interp 3.9082390375941206e-01:2.6414459614149638e-01:3.9030896632854639e-01:3.4499035084628399e-01:9.8763357192373669e-01:3.9081999552037450e-01:1.4749684300493831e+00:2.6088021092042735e-01:1.9919528320073188e+00:2.8206407930421212e-01:2.7763237079864931e+00:2.2240203926093743e-01:3.5218876902894642e+00 + CVs 20 + -2.2176816501359825e-01 1.5391882539490989e-01 -2.6218921383888616e-01 + -4.1961015708915189e-01 2.9865395845702419e-01 -5.3896335542304208e-01 + -6.1496091689445587e-01 4.2800723724129264e-01 -8.1702733391861360e-01 + -8.1105732256641361e-01 5.3577354083773421e-01 -1.0887945076803032e+00 + -1.0093814744881651e+00 6.1959342039752185e-01 -1.3532391262948149e+00 + -1.2124670650365776e+00 6.7822865862744897e-01 -1.6082441084702206e+00 + -1.4199278700553304e+00 7.0854983884953571e-01 -1.8498274221863769e+00 + -1.6260177951120296e+00 7.0346872908842317e-01 -2.0718084748689130e+00 + -1.8251044542064883e+00 6.5598365568587691e-01 -2.2668635354249975e+00 + -2.0151398215036291e+00 5.6297145170479634e-01 -2.4240851376443104e+00 + -2.1930250917152905e+00 4.2839826747166865e-01 -2.5293407352141171e+00 + -2.3575470210683398e+00 2.6496861378894376e-01 -2.5807198554289306e+00 + -2.5160446874691784e+00 8.2977470614817417e-02 -2.5925654544984305e+00 + -2.6763457473458496e+00 -1.1472546183299048e-01 -2.5753442712015788e+00 + -2.8389238993223942e+00 -3.2512875953613474e-01 -2.5283434665488649e+00 + -2.9956590843548954e+00 -5.4172709141464748e-01 -2.4454545369752796e+00 + -3.1365962995209951e+00 -7.5950657545475342e-01 -2.3247347021820666e+00 + -3.2641276209331740e+00 -9.8564623021188702e-01 -2.1792124603243672e+00 + -3.4637504041537897e+00 -1.3234177898105211e+00 -2.0847633015279210e+00 + id 14758 + loc 3.3098277449607849e-01 3.0262789130210876e-01 405 + blend 0.0000000000000000e+00 + interp 4.4176607129353163e-01:3.7901584787100645e-01:3.8421634641442326e-02:4.2515457763886322e-01:7.2401115079380651e-01:2.6879093900362755e-01:1.0074882376146022e+00:4.0098720209254579e-01:1.5109511272020426e+00:4.4176165363281872e-01:2.0598754537924453e+00:2.9858168257725842e-01:2.6269121497655767e+00:2.8351177631095076e-01:3.2975784510046187e+00 + CVs 20 + 2.2233711760781830e-02 1.0958054516808943e-01 1.8022424153363747e-02 + 1.5402213686022093e-02 1.9516049551256981e-01 7.4116095840707302e-02 + -6.2863300599109127e-04 2.7694989861940689e-01 1.5587067530663809e-01 + -1.2178199940535815e-02 3.6266426530271129e-01 2.4890421181958869e-01 + -1.4763720132564044e-02 4.5267046261487509e-01 3.5734593919519303e-01 + -2.8450360418640483e-03 5.4642220337312175e-01 4.8478253919661962e-01 + 2.9240558158958145e-02 6.4217651951034149e-01 6.3286383950614189e-01 + 8.6253132290370932e-02 7.3755413978016204e-01 8.0109282868276266e-01 + 1.7165324797998041e-01 8.2978366115627189e-01 9.8697257597789845e-01 + 2.8721747959130012e-01 9.1579387330740702e-01 1.1860905317675836e+00 + 4.3293125968784624e-01 9.9298285976316547e-01 1.3922439410363214e+00 + 6.0600010381616709e-01 1.0591792793161732e+00 1.5977800666031963e+00 + 8.0069995651820236e-01 1.1112698340220573e+00 1.7956833394532941e+00 + 1.0083684231148320e+00 1.1419118497653251e+00 1.9821305502167417e+00 + 1.2191358990933305e+00 1.1412869866273394e+00 2.1561474843730486e+00 + 1.4306048064598780e+00 1.1065331911413043e+00 2.3164456212761184e+00 + 1.6455461434611198e+00 1.0470277243828199e+00 2.4589152604040061e+00 + 1.8592877146998923e+00 9.7597190391691802e-01 2.5793729918707022e+00 + 1.9340775059194806e+00 9.6589855397186908e-01 2.6285866838799237e+00 + id 14759 + loc 6.2067258358001709e-01 1.4825525879859924e-01 404 + blend 0.0000000000000000e+00 + interp 4.3928196205874492e-01:3.7022283934751254e-01:4.1597889809679178e-01:2.6902135131461596e-01:1.0142703305267884e+00:4.3927756923912437e-01:1.6464668821735748e+00:3.0352220047679268e-01:2.4259908456451509e+00:2.9011774484539665e-01:3.0092949513607556e+00:2.8940557474988216e-01:3.9473634001961719e+00 + CVs 20 + -6.0222185937276823e-02 8.6309290126558136e-02 1.8024711528645754e-01 + -1.1422394317805809e-01 1.5944998851262504e-01 3.3199221103292093e-01 + -1.6554684898850400e-01 2.2766220733541986e-01 4.6953176019192266e-01 + -2.1614466922450065e-01 2.9515658878483547e-01 6.0049361437082560e-01 + -2.6794851573433520e-01 3.6342660592583376e-01 7.2456123745080436e-01 + -3.2550688349962881e-01 4.3417301481487797e-01 8.3944384373887360e-01 + -3.9407026601545070e-01 5.0824434815975339e-01 9.4483046200691778e-01 + -4.7639087966730748e-01 5.8551853339223148e-01 1.0443273164690390e+00 + -5.7534487245797894e-01 6.6638972864781931e-01 1.1440679454323117e+00 + -6.8954769751316092e-01 7.5524460306798125e-01 1.2517428908421671e+00 + -8.1345853195781903e-01 8.5841659426854233e-01 1.3757989554717689e+00 + -9.2789345629029074e-01 9.7332714020946764e-01 1.5239732831502888e+00 + -1.0083174444097251e+00 1.0856767080339689e+00 1.6974551757694170e+00 + -1.0507727667962508e+00 1.1676502272000380e+00 1.9010283270086998e+00 + -1.0679806653294361e+00 1.2037473416560929e+00 2.1453019471387282e+00 + -1.0657802912420751e+00 1.2312732760644685e+00 2.4237230726995724e+00 + -1.0378719437865158e+00 1.3227969357939364e+00 2.7061651917105434e+00 + -9.6436100495216259e-01 1.4756783255456734e+00 2.9564868578754764e+00 + -8.1383429101807647e-01 1.4585770449515483e+00 2.9112930574557145e+00 + id 14760 + loc 3.2648602128028870e-01 5.8949196338653564e-01 394 + blend 0.0000000000000000e+00 + interp 4.0864460795550717e-01:3.1628411178698357e-01:7.6855821349740450e-01:3.5034473220643336e-01:1.7810551490817956e+00:2.8815479396189475e-01:2.5389334744021044e+00:4.0864052150942765e-01:3.1453792422327309e+00:3.0177869056927387e-01:3.9902323973868370e+00 + CVs 20 + -1.6538945179042774e-01 2.2714119065205274e-01 -2.6451809411916272e-01 + -3.0327048024797398e-01 4.5559695476754847e-01 -5.0745925652645285e-01 + -4.2164191075410101e-01 6.9658771430719191e-01 -7.2904697210528813e-01 + -5.2505354217452904e-01 9.5104768545710494e-01 -9.2977895104158359e-01 + -6.1728472346666097e-01 1.2129009697031830e+00 -1.1126576698887423e+00 + -7.0548883764757975e-01 1.4741584207459684e+00 -1.2848828250751709e+00 + -7.9966632131915993e-01 1.7256984024042210e+00 -1.4584021779394927e+00 + -9.0910760724675632e-01 1.9577413335856353e+00 -1.6425612558273808e+00 + -1.0386708421351634e+00 2.1658737409324700e+00 -1.8326450069864040e+00 + -1.1944947054975779e+00 2.3560296854256491e+00 -2.0491373011209495e+00 + -1.3836064969510300e+00 2.5012137401383399e+00 -2.3004188845096811e+00 + -1.6023784293955972e+00 2.5739247386174200e+00 -2.5631838122150019e+00 + -1.8302167958321340e+00 2.5517655428027384e+00 -2.8225214294297394e+00 + -2.0343687242933410e+00 2.4144014809904299e+00 -3.0510455665848326e+00 + -2.1949995748721847e+00 2.1727579837695883e+00 -3.2119564564090020e+00 + -2.3032172283776950e+00 1.8509955493078816e+00 -3.3073325106942923e+00 + -2.3661017565846705e+00 1.4662354761430287e+00 -3.3628840475569604e+00 + -2.4655177573674250e+00 1.0623740609150658e+00 -3.3843419778430608e+00 + -2.6884039620292706e+00 7.4612006655323748e-01 -3.3299091810755304e+00 + id 14761 + loc 5.1228022575378418e-01 9.1502511501312256e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7891133956046616e-01:3.1549857776326556e-01:4.7150798671591909e-01:2.9083193844841604e-01:1.5580124891983116e+00:3.0515372341701896e-01:2.3507339351586505e+00:3.1480079258409116e-01:3.0000334887283540e+00:4.7890655044707059e-01:3.8360756276358208e+00 + CVs 20 + 1.8880606017170809e-01 3.8424627623243202e-01 7.2965078856455923e-03 + 3.8606158239957911e-01 7.1106832229439965e-01 -2.4128861417032743e-02 + 5.8845720148992398e-01 9.9722192926940134e-01 -7.4856924689254534e-02 + 7.9243681694179513e-01 1.2427215317568421e+00 -1.3854899765629358e-01 + 9.9272286453774305e-01 1.4404110375030674e+00 -2.1496675496801154e-01 + 1.1803726036649471e+00 1.5826702436822417e+00 -3.0197325195444719e-01 + 1.3505853966164396e+00 1.6727353359131492e+00 -3.9634864513060508e-01 + 1.5056785035841922e+00 1.7226984622823551e+00 -4.9709373387175998e-01 + 1.6488096223394435e+00 1.7420978060238161e+00 -6.0469286274773326e-01 + 1.7813855187521415e+00 1.7355865113783733e+00 -7.1966139329611178e-01 + 1.9038324679963041e+00 1.7042890459907345e+00 -8.4281501516267610e-01 + 2.0154008407211674e+00 1.6467127884576436e+00 -9.7415059189723452e-01 + 2.1139562172390924e+00 1.5604279355374364e+00 -1.1112078489678683e+00 + 2.1964985742985226e+00 1.4451982595880306e+00 -1.2472249283014130e+00 + 2.2597179615870306e+00 1.3126797707998688e+00 -1.3665830942511927e+00 + 2.2993176368718720e+00 1.2136518707128503e+00 -1.4405603192715715e+00 + 2.3168805819557927e+00 1.2296827387855611e+00 -1.4721187759282508e+00 + 2.3268198244768983e+00 1.2522121040703642e+00 -1.4963898287856701e+00 + 2.3124805067216374e+00 9.4563238291256257e-01 -1.3183740629300438e+00 + id 14762 + loc 5.3009176254272461e-01 2.2220560908317566e-01 405 + blend 0.0000000000000000e+00 + interp 4.3016413365177159e-01:2.7169231583140546e-01:4.1655719463825625e-03:4.3015983201043506e-01:7.0280514325450549e-01:2.9849525063697668e-01:1.0517155664390818e+00:4.1764703008894999e-01:1.7996447302158929e+00:3.7363367585604312e-01:2.1760235434775286e+00:4.1285175376849476e-01:2.9589564714795218e+00:3.2487295227494367e-01:3.3893685539671474e+00 + CVs 20 + 1.4112427766378619e-01 1.0862010127765924e-01 -6.4936145868888573e-02 + 3.1601860725067166e-01 1.7766127804225881e-01 -1.3117060736489106e-01 + 5.0121643186871245e-01 2.3267553289925083e-01 -2.1834968416825590e-01 + 6.8307811817001374e-01 2.6202591950847404e-01 -3.3227507212498641e-01 + 8.5359924729177994e-01 2.5791008396134990e-01 -4.7537955625805650e-01 + 1.0027617168151244e+00 2.1673680364286757e-01 -6.4777747707135480e-01 + 1.1217856223329070e+00 1.3984382888154157e-01 -8.4600532944181084e-01 + 1.2049935890074703e+00 3.2484132943616739e-02 -1.0642439192795499e+00 + 1.2477739413313587e+00 -9.8721998597464333e-02 -1.2961312669837803e+00 + 1.2464005360389652e+00 -2.4636553661974725e-01 -1.5346434717279740e+00 + 1.1982787484278294e+00 -4.0383883294833189e-01 -1.7707490916833448e+00 + 1.1045018642251525e+00 -5.6802638252997206e-01 -1.9906825669647987e+00 + 9.7155836773812920e-01 -7.3414094102592753e-01 -2.1816661314111951e+00 + 8.0630695240625394e-01 -8.8002327441351047e-01 -2.3505906448911689e+00 + 6.0738596218260610e-01 -9.6271681495022943e-01 -2.5298751959235797e+00 + 3.6469389363563659e-01 -9.4175799571426544e-01 -2.7400762784181603e+00 + 7.6465836341119586e-02 -8.1319806081934698e-01 -2.9465205508276271e+00 + -2.3757136212717594e-01 -6.0882950921754508e-01 -3.0950884319594834e+00 + -3.7889266851623904e-01 -5.1308081679215545e-01 -3.2573503289144425e+00 + id 14763 + loc 1.6916950698941946e-04 6.6141468286514282e-01 394 + blend 0.0000000000000000e+00 + interp 5.1703860392872814e-01:4.4661932047765790e-01:5.8247082615925372e-05:4.2011602770276663e-01:5.4280854098523346e-02:3.5014839335711095e-01:5.8955144913271562e-01:1.4002983268425631e-01:1.0018598604210522e+00:5.1703343354268883e-01:1.9992319433539461e+00:4.0227993676783741e-01:2.2526894944586315e+00:4.2606481613693958e-01:2.8405132522713119e+00:4.6310516703220678e-01:3.2789287901088886e+00 + CVs 20 + -1.6341571639475155e-01 2.1223819443017200e-01 -1.7074369388018681e-01 + -3.2813984513688932e-01 4.5082729271511973e-01 -3.6741792331569262e-01 + -4.9347467219378061e-01 7.2097137288806201e-01 -5.6551469102948881e-01 + -6.6159896881781433e-01 1.0195623277926620e+00 -7.5564645088609428e-01 + -8.3675946075234942e-01 1.3333607090389239e+00 -9.4382951803329429e-01 + -1.0210557566973597e+00 1.6382687615414628e+00 -1.1451220808533826e+00 + -1.2177942737492495e+00 1.9101088900434324e+00 -1.3747534051428976e+00 + -1.4377255882269475e+00 2.1343488395720618e+00 -1.6348933018856373e+00 + -1.6838470540722645e+00 2.2856992873272484e+00 -1.9204298881543926e+00 + -1.9190254870750678e+00 2.3026307954033243e+00 -2.2278326372779302e+00 + -2.0737635031755097e+00 2.1255997442324057e+00 -2.5260206758110408e+00 + -2.1204443645499542e+00 1.7762531090427274e+00 -2.7397409764807832e+00 + -2.1045308646475385e+00 1.3452558518469233e+00 -2.8302014515016620e+00 + -2.0916302154916711e+00 9.0545387896678164e-01 -2.8456185955994711e+00 + -2.1513088624543815e+00 4.6829934779402493e-01 -2.8534719017248800e+00 + -2.3976641951355924e+00 3.3263372250785350e-02 -2.8771149350604883e+00 + -2.9389219464215453e+00 -3.1759626856675838e-01 -2.8800784702422018e+00 + -3.6191088256330439e+00 -4.8268350519526737e-01 -2.8146744818024905e+00 + -3.9953945150126522e+00 -7.3041269444816992e-01 -2.8038488193709865e+00 + id 14764 + loc 5.1419216394424438e-01 1.6272665560245514e-01 404 + blend 0.0000000000000000e+00 + interp 5.2251138699478283e-01:3.3731560866601945e-01:4.2722893017261798e-01:2.9011774484539665e-01:1.0079946881187833e+00:2.7336639085972725e-01:1.8857648658197506e+00:5.2250616188091292e-01:2.4183283810415159e+00:2.7933312597221538e-01:3.0256634683426915e+00:3.4871387081812250e-01:3.9547573426375227e+00 + CVs 20 + -5.5438000026439394e-02 1.2078517158696049e-01 1.6783666337455516e-01 + -9.5839385630618237e-02 2.3284226311779430e-01 3.1968367077147686e-01 + -1.2574350755923591e-01 3.4092749532476274e-01 4.6205821463513191e-01 + -1.4788514276533427e-01 4.4763551138171059e-01 5.9836959428234759e-01 + -1.6423350566115291e-01 5.5285651055979534e-01 7.2678789774454677e-01 + -1.7767227173089201e-01 6.5538105454681483e-01 8.4273866246248752e-01 + -1.9110534240907634e-01 7.5336420708526874e-01 9.4257281813798155e-01 + -2.0582766428385946e-01 8.4562137533193504e-01 1.0269232187223984e+00 + -2.2279634578943758e-01 9.3195377535003110e-01 1.0982266517176522e+00 + -2.4292436237879433e-01 1.0145787922918845e+00 1.1598855918409212e+00 + -2.6455094376210520e-01 1.0987034074411830e+00 1.2166564501583648e+00 + -2.8203468045058144e-01 1.1848780978741384e+00 1.2738360809238345e+00 + -2.8138068792163318e-01 1.2681037118909229e+00 1.3374725246485824e+00 + -2.6115334238878662e-01 1.3308662524283963e+00 1.4095191656593422e+00 + -2.3952276668261707e-01 1.3522923402660718e+00 1.4918066455486443e+00 + -2.3389637691312948e-01 1.3399254382075567e+00 1.5842495370953293e+00 + -2.4426555856656451e-01 1.3379105904691577e+00 1.6784019274174309e+00 + -2.5514746493197149e-01 1.3730730559517177e+00 1.7618023814132342e+00 + -5.4125880221904010e-02 1.2774051701099345e+00 1.6945264045280439e+00 + id 14765 + loc 3.6724033951759338e-01 9.8182141780853271e-01 1079 + blend 0.0000000000000000e+00 + interp 4.9013169891923181e-01:3.1321360842827728e-01:3.6201824277534267e-02:3.5033424443735806e-01:9.2646682027937688e-01:2.8978117600595360e-01:1.5923984100316488e+00:1.5782492111622429e-01:2.4373543736812331e+00:3.0637720601992258e-01:2.9834871696676242e+00:4.9012679760224265e-01:3.6889852046276816e+00 + CVs 20 + 2.4171910747903502e-01 4.2801165361708837e-01 2.7303022069848859e-02 + 4.9101097375932984e-01 7.8037361010211703e-01 -1.9809831827594993e-02 + 7.4470382056123219e-01 1.0805817253504824e+00 -1.0218076816533445e-01 + 9.9368017855883428e-01 1.3185145540479364e+00 -2.1114221496932079e-01 + 1.2214531317114019e+00 1.4748059165755665e+00 -3.4457241479894790e-01 + 1.4007840530502809e+00 1.5289311020981429e+00 -4.9124109635506852e-01 + 1.5084154408754833e+00 1.4854189222300827e+00 -6.2313870350039791e-01 + 1.5412367459418208e+00 1.3810536149986605e+00 -7.0983380144030650e-01 + 1.5121881372207293e+00 1.2614518161981740e+00 -7.3537635600285289e-01 + 1.4435020885267600e+00 1.1662782591694587e+00 -7.0510506294283770e-01 + 1.3589854285597855e+00 1.1194683713172662e+00 -6.4402992083696853e-01 + 1.2755442856766457e+00 1.1251001626148769e+00 -5.8533769264304125e-01 + 1.1993859089462762e+00 1.1727900343060527e+00 -5.5872135941180423e-01 + 1.1267191505875775e+00 1.2485970748264463e+00 -5.8487419972406451e-01 + 1.0464537886872807e+00 1.3615155623018373e+00 -6.7324165274207970e-01 + 9.5287034474853538e-01 1.5701575938471082e+00 -8.5685334564520454e-01 + 8.7194678730519659e-01 1.8258579189726702e+00 -1.2441151556328296e+00 + 8.1085580632551291e-01 1.8198878257111912e+00 -1.6973584465623095e+00 + 6.8445259833792382e-01 1.5590161322453340e+00 -1.7891782536178966e+00 + id 14766 + loc 9.2328298091888428e-01 7.2293847799301147e-01 405 + blend 0.0000000000000000e+00 + interp 4.6430250298037939e-01:4.6429785995534961e-01:2.7020173202571240e-01:4.0318158469632254e-01:9.2381460869427334e-01:3.0751187314938738e-01:1.2838937238841919e+00:2.6727746393659030e-01:2.1746269844565393e+00:3.0763059597118603e-01:3.4517958577179302e+00:4.3141853089624255e-01:3.9747940217036994e+00 + CVs 20 + 2.1013677445477041e-01 2.8754844587935458e-01 -1.1315802549909681e-01 + 3.1488160811636079e-01 4.8969178098479327e-01 -2.1770663643152274e-01 + 4.0302715892982333e-01 6.3378230861386231e-01 -3.0881506175759865e-01 + 5.0651563888311912e-01 7.6706453524247908e-01 -3.9406146566729694e-01 + 6.1844641219899932e-01 8.9448961607175725e-01 -4.6982827736767308e-01 + 7.3408302687810512e-01 1.0240231554879304e+00 -5.2894936486228716e-01 + 8.5252717778089870e-01 1.1653320696062708e+00 -5.5319462477085191e-01 + 9.8008583373438318e-01 1.3110581259542387e+00 -4.9962987993079966e-01 + 1.1237270785336086e+00 1.3807578455538714e+00 -3.5360725196455323e-01 + 1.2679530959587209e+00 1.3477439856495108e+00 -2.4250594018225280e-01 + 1.4085443431868638e+00 1.3021847046468493e+00 -1.9173600080194930e-01 + 1.5530689472736037e+00 1.2594276319179183e+00 -1.5079235559729026e-01 + 1.7025970288483463e+00 1.2127371193538974e+00 -1.0254666231319370e-01 + 1.8505094974029406e+00 1.1779911486448980e+00 -5.8020950607164223e-02 + 1.9850728723992503e+00 1.1847373750418702e+00 -3.3697076572117735e-02 + 2.0933928430583295e+00 1.2428629533699125e+00 -3.3885196933096884e-02 + 2.1709971285719027e+00 1.3343184936831833e+00 -4.3299808039453547e-02 + 2.2306042481915478e+00 1.4362384291616537e+00 -2.6794778172050282e-02 + 2.3782750928551541e+00 1.4472152830785563e+00 1.9001179868706464e-01 + id 14767 + loc 7.8794139623641968e-01 6.6412830352783203e-01 394 + blend 0.0000000000000000e+00 + interp 4.3683622452174903e-01:2.8251466994201913e-01:4.1874928669893119e-01:4.0680995989348201e-01:9.6578320936698281e-01:4.3683185615950382e-01:1.4682976621743977e+00:2.7859833970814513e-01:2.0839798471371718e+00:3.5703349088269287e-01:2.9906505005264776e+00:2.6746293735610199e-01:3.8643925475760121e+00 + CVs 20 + -2.4554541168263458e-01 2.0986350224254774e-01 -2.4498460977738357e-01 + -4.9594362766754396e-01 3.9915937949824731e-01 -4.6813270752831948e-01 + -7.5542652992377357e-01 5.7965472162373222e-01 -6.8720777059754545e-01 + -1.0250665150117286e+00 7.5823718177317578e-01 -9.1487251983435613e-01 + -1.3003690323194705e+00 9.3349156348172124e-01 -1.1569476446988025e+00 + -1.5786141695606069e+00 1.1021978481123953e+00 -1.4138924952681000e+00 + -1.8604304340129127e+00 1.2604147351089576e+00 -1.6849786452136510e+00 + -2.1459756216939980e+00 1.3984693377781381e+00 -1.9746099114746758e+00 + -2.4313743777780505e+00 1.4978324548187225e+00 -2.2852715350918382e+00 + -2.7108552211191430e+00 1.5399588798157904e+00 -2.6070273566396009e+00 + -2.9811625934134525e+00 1.5171692404993511e+00 -2.9281884374405296e+00 + -3.2395858838926332e+00 1.4300307394243519e+00 -3.2500640177347968e+00 + -3.4780547369942534e+00 1.2825824900422536e+00 -3.5733573266288303e+00 + -3.6867019102190879e+00 1.0859881629215189e+00 -3.8804325127673169e+00 + -3.8650071616737831e+00 8.5428003044061329e-01 -4.1470819127506466e+00 + -4.0177311184565854e+00 5.8911248863233823e-01 -4.3628833844655697e+00 + -4.1396273593074415e+00 2.8287390795110223e-01 -4.5316647994509678e+00 + -4.2217299718684007e+00 -5.9479863733380878e-02 -4.6605207199999068e+00 + -4.2927714748263064e+00 -3.9005310639279722e-01 -4.8488541989927487e+00 + id 14768 + loc 7.1607208251953125e-01 9.6811753511428833e-01 404 + blend 0.0000000000000000e+00 + interp 3.9237990106283072e-01:2.8223710910328687e-01:3.6388226328072371e-03:3.2916565230444972e-01:9.4185538108993905e-01:3.9237597726382012e-01:1.4120531190990859e+00:2.1375254927008666e-01:2.0164479417560921e+00:3.2898881707014171e-01:2.9833790513817862e+00 + CVs 20 + 6.3149253794989896e-02 1.2787226437333180e-01 -4.8073417555546949e-04 + 1.0443046934517425e-01 2.3840959017077484e-01 1.1580437509606564e-02 + 1.3984524292201633e-01 3.3507230862622517e-01 2.1836132818608064e-02 + 1.8022768822404209e-01 4.2725793821267510e-01 2.5639338464184702e-02 + 2.2733260416622791e-01 5.1475919232205070e-01 2.4124730636038261e-02 + 2.8242377992000406e-01 5.9727254204440827e-01 1.8625268852930504e-02 + 3.4642490954027094e-01 6.7461797106289323e-01 1.0817949850893821e-02 + 4.1983587161266600e-01 7.4688584847974759e-01 2.9880287288742702e-03 + 5.0134707535960343e-01 8.1367982442710796e-01 -2.2149669146865336e-03 + 5.8664575650808515e-01 8.7351349466352368e-01 -2.9534294882130885e-03 + 6.7188746009044020e-01 9.2492950839725641e-01 1.0459060759033245e-03 + 7.5758014569457344e-01 9.6833819864305171e-01 9.6986742373006973e-03 + 8.4669975984746648e-01 1.0046504287261957e+00 2.3491376876359549e-02 + 9.3908065923052020e-01 1.0340965187376057e+00 4.3861000713869225e-02 + 1.0314027082569670e+00 1.0571650720125141e+00 7.3267602980818358e-02 + 1.1224487182559011e+00 1.0748269142360187e+00 1.1383783245086276e-01 + 1.2142727704992458e+00 1.0878046385983222e+00 1.6555475182881257e-01 + 1.3076295800479065e+00 1.0967079339604906e+00 2.2654782836813575e-01 + 1.3818044311180049e+00 1.0926604211378586e+00 2.9501814454112241e-01 + id 14769 + loc 5.0299537181854248e-01 5.8542078733444214e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3083600424420004e-01:4.2854046459042111e-01:5.8767372515323113e-01:4.3083169588415759e-01:1.0050761554998886e+00:2.6493785253893221e-01:1.6637593144900760e+00:3.1568869857431797e-01:2.9250841843966939e+00:2.8039349437219474e-01:3.9361204775668877e+00 + CVs 20 + -3.1163457826525146e-02 3.3923324706533919e-01 1.1012466472812732e-01 + -3.0211280038746430e-02 6.5445445945620395e-01 1.6511046850583913e-01 + -9.4502279291558411e-03 9.5534015640713066e-01 1.7851252041443977e-01 + 2.3690863367160309e-02 1.2519546077066430e+00 1.6128069025129310e-01 + 7.2899614815924607e-02 1.5375877489669130e+00 1.1416120065713020e-01 + 1.3910201186733073e-01 1.8031478085001824e+00 3.9155005479189486e-02 + 2.2074876103508939e-01 2.0358672607490256e+00 -6.5216638669713833e-02 + 3.1465907583225755e-01 2.2225443624444416e+00 -2.0142961930564285e-01 + 4.1605164512012371e-01 2.3546045115664649e+00 -3.6706491224626625e-01 + 5.1981015814131537e-01 2.4282169886305827e+00 -5.5603349537853108e-01 + 6.2230595753541351e-01 2.4412288718258641e+00 -7.6148146941474248e-01 + 7.2176338970796317e-01 2.3926221267705965e+00 -9.7585665259681409e-01 + 8.1803649211455176e-01 2.2824546680322388e+00 -1.1914318825759744e+00 + 9.1292322246182367e-01 2.1124417755861833e+00 -1.4000131262657507e+00 + 1.0109643627228684e+00 1.8886334719180649e+00 -1.5905126274445323e+00 + 1.1183161200875718e+00 1.6311462378797579e+00 -1.7422907525909013e+00 + 1.2339463159257351e+00 1.3873938429160588e+00 -1.8175059497804915e+00 + 1.3504580565271815e+00 1.1951989876683100e+00 -1.7889968198576653e+00 + 1.4724295397856826e+00 8.2792732357327459e-01 -1.6541844617690189e+00 + id 14770 + loc 8.6573058366775513e-01 3.4924149513244629e-02 394 + blend 0.0000000000000000e+00 + interp 4.7333923633630998e-01:3.4375168778160969e-01:9.8326507923442219e-02:3.2669402816985754e-01:9.4414132078805302e-01:4.7333450294394663e-01:1.5523624485752254e+00:2.3318902910731826e-01:2.0117818452645162e+00:3.6233017130481232e-01:2.7477547872792685e+00:3.8914544564835851e-01:3.0062492685894653e+00:3.9693150841953084e-01:3.6447525005491412e+00 + CVs 20 + 2.4473628338444764e-01 2.6776108742975618e-01 3.0587966462824390e-01 + 4.9135957080348158e-01 5.0513810243833057e-01 5.5007562308052982e-01 + 7.3879408916192180e-01 7.2223836679426556e-01 7.7122453446915262e-01 + 9.8815170495078386e-01 9.2690003268060728e-01 9.9144001781041302e-01 + 1.2391573844346693e+00 1.1171989268650595e+00 1.2154659729283095e+00 + 1.4928459385958726e+00 1.2864971700073804e+00 1.4486300434651849e+00 + 1.7514137482362693e+00 1.4222192116807308e+00 1.6918824872060152e+00 + 2.0130344039120489e+00 1.5124168596160761e+00 1.9412926598273439e+00 + 2.2676246821519497e+00 1.5521795227195490e+00 2.1893049043817001e+00 + 2.5039142003421233e+00 1.5418987745347152e+00 2.4211441726887113e+00 + 2.7142568287113882e+00 1.4937738699758789e+00 2.6158062745028619e+00 + 2.8989263324791459e+00 1.4343143740900453e+00 2.7568894753994404e+00 + 3.0636525742654763e+00 1.3824522105485164e+00 2.8464607460924367e+00 + 3.2088991461027652e+00 1.2980749221396222e+00 2.8990437609094677e+00 + 3.3265114962934339e+00 1.0829471339989278e+00 2.9127836012209962e+00 + 3.4127128939934828e+00 6.9915012252351927e-01 2.8964777232350136e+00 + 3.4579041819355991e+00 2.1747180799292209e-01 2.8921852848363701e+00 + 3.4561964686064233e+00 -2.5255953698870037e-01 2.9245804554662902e+00 + 3.6481347929592798e+00 -5.9877773150899749e-01 2.9627884387292296e+00 + id 14771 + loc 1.1210976541042328e-01 1.7883217334747314e-01 404 + blend 0.0000000000000000e+00 + interp 5.2989265484371739e-01:3.2382536512547050e-01:9.3045561184714298e-01:3.2939457100864017e-01:1.6797795282372987e+00:5.2988735591716896e-01:2.3128122020320898e+00:3.1005036499413502e-01:2.9701362337982768e+00:4.0536850147187575e-01:3.3912436580733525e+00:2.9512793529027415e-01:3.9955581163863791e+00 + CVs 20 + -9.5080446596611898e-02 8.6269218712468732e-02 6.1996137696339049e-03 + -1.7142657399003422e-01 1.8957840272905083e-01 -6.6473929451839331e-03 + -2.4303775491758617e-01 3.0674502882096905e-01 -2.0491776189586669e-02 + -3.0885598830902905e-01 4.3130585187103565e-01 -2.7396381264456954e-02 + -3.6971306079054633e-01 5.6307115588723111e-01 -2.4900783478921384e-02 + -4.2662807390367019e-01 7.0184525084664162e-01 -1.0043763056950872e-02 + -4.8013508090148449e-01 8.4720375478682941e-01 2.0373120442618631e-02 + -5.3030468295117406e-01 9.9856458088268840e-01 6.9896040180940644e-02 + -5.7569765538252249e-01 1.1540548587395258e+00 1.4168143536002753e-01 + -6.1170645170628224e-01 1.3101115019889742e+00 2.3646658877507953e-01 + -6.3149956153171738e-01 1.4627099140232003e+00 3.5129506103261421e-01 + -6.2943093893615198e-01 1.6088167093449763e+00 4.8096787559982068e-01 + -6.0328425517403084e-01 1.7462957876300125e+00 6.2052211841839955e-01 + -5.5318070395163854e-01 1.8724782304999312e+00 7.6466778646385258e-01 + -4.8012411857496951e-01 1.9833979107818263e+00 9.0499298029613751e-01 + -3.8724416856127175e-01 2.0746498182190516e+00 1.0304818012654298e+00 + -2.8170801188219674e-01 2.1427190963651275e+00 1.1329965258966523e+00 + -1.7304839199957872e-01 2.1851414931361282e+00 1.2092694017768739e+00 + -7.1663684964635960e-02 2.2022661501991116e+00 1.4019480190610558e+00 + id 14772 + loc 2.9139930009841919e-01 2.7114665135741234e-04 405 + blend 0.0000000000000000e+00 + interp 5.1222135350929465e-01:2.6734575128986604e-01:1.0487738762322341e-02:2.7492488461470205e-01:1.0783974557697742e+00:3.0188444090289157e-01:2.0153466678967589e+00:4.2524223882037188e-01:2.7981936441050732e+00:5.1221623129575955e-01:3.0692260115729368e+00:4.1404527211578496e-01:3.7497976643818918e+00 + CVs 20 + -2.2499711331605964e-02 1.9859607738901761e-02 3.0671757868271293e-02 + -4.7286195479934519e-02 1.1178882311056647e-02 6.6401019371523068e-02 + -8.0547169040746047e-02 -5.3791511923097640e-03 1.2039029482430835e-01 + -1.1305516289030715e-01 -3.1786419601853202e-02 1.7258839751837524e-01 + -1.4703676099001248e-01 -6.8224470199281712e-02 2.1860031675359587e-01 + -1.8641577739621540e-01 -1.1223466119314984e-01 2.5756102793292834e-01 + -2.3525196734826673e-01 -1.5928401339529552e-01 2.9305980608490545e-01 + -2.9556113728528494e-01 -2.0475682662688438e-01 3.3080381565588779e-01 + -3.6590128601034405e-01 -2.4531668410767785e-01 3.7715146331333044e-01 + -4.4114388393401549e-01 -2.7926258974867707e-01 4.4063762325678613e-01 + -5.1261195220810762e-01 -3.0661070108560234e-01 5.3024947852281845e-01 + -5.6884390187859379e-01 -3.2844226123260839e-01 6.5159491696033944e-01 + -5.9722230164892642e-01 -3.4573942265789248e-01 8.0437993613431946e-01 + -5.8710961118142180e-01 -3.5793787644467079e-01 9.8114730740851852e-01 + -5.3492797637100176e-01 -3.6209826370158216e-01 1.1659840724618082e+00 + -4.4431171319685780e-01 -3.5395639488148245e-01 1.3421545314951233e+00 + -3.1808175531194571e-01 -3.2954806490035449e-01 1.5027629296838296e+00 + -1.5536939733596522e-01 -2.8711509448599748e-01 1.6466905226664330e+00 + -4.0556665024524069e-02 -2.4555623800849158e-01 1.6993409309779213e+00 + id 14773 + loc 1.9332771003246307e-01 2.6746276021003723e-01 404 + blend 0.0000000000000000e+00 + interp 4.1241899744539784e-01:4.1241487325542342e-01:2.3122808256519822e-01:2.9939181864774161e-01:9.7957097772115775e-01:4.0536850147187575e-01:1.3852139374546542e+00:3.0727959989050518e-01:1.9982773983530970e+00:2.9966502860273525e-01:2.9929214182701349e+00:2.9849918826402100e-01:3.9517888819934441e+00 + CVs 20 + -8.4719880726369282e-02 1.0317915246095927e-01 -6.3844010213576413e-02 + -1.8646957413892518e-01 2.1403117262078769e-01 -1.2151033103954162e-01 + -2.9687205244198467e-01 3.3504549072504863e-01 -1.8011332680022274e-01 + -4.0743295630011067e-01 4.6674740955095806e-01 -2.4207427098946982e-01 + -5.1532054062137655e-01 6.0928987309156946e-01 -3.0379615325487580e-01 + -6.1718498221645290e-01 7.6107890197411265e-01 -3.6009745147872951e-01 + -7.1054952159077867e-01 9.1902803475607575e-01 -4.0526758080406922e-01 + -7.9407814890024531e-01 1.0800319633446487e+00 -4.3501644264041406e-01 + -8.6620737585112761e-01 1.2413040787879868e+00 -4.4789360937471029e-01 + -9.2527242146358946e-01 1.4008539486449381e+00 -4.4528471496065086e-01 + -9.7229216028964116e-01 1.5601725999826743e+00 -4.2966944749775676e-01 + -1.0094107517520532e+00 1.7207733677474590e+00 -4.0352474069310207e-01 + -1.0414887899173730e+00 1.8860082761043848e+00 -3.6644824089645522e-01 + -1.0714941126571000e+00 2.0558516568266487e+00 -3.1854626797779428e-01 + -1.0955064284131382e+00 2.2223620932708466e+00 -2.7050093865537861e-01 + -1.1098382362488148e+00 2.3793726469533700e+00 -2.4386405263026656e-01 + -1.1264124498692165e+00 2.5407841904396884e+00 -2.3530425448921255e-01 + -1.1565973903696016e+00 2.7353527346165123e+00 -1.8946075360299242e-01 + -1.1051247633509504e+00 2.8778453600760434e+00 -1.0236421093706305e-01 + id 14774 + loc 1.0975252091884613e-01 4.2156592011451721e-02 405 + blend 0.0000000000000000e+00 + interp 4.4941295281082411e-01:2.9838535961484897e-01:1.3507452035349721e-01:2.7975720523151393e-01:1.0322045913499813e+00:3.2012489884279721e-01:1.9351930857460540e+00:4.2917364189665214e-01:2.3387937102244267e+00:2.9153021666637285e-01:2.9883712420147592e+00:4.4940845868129603e-01:3.7300507888938643e+00 + CVs 20 + 2.1057734735703151e-01 1.7364254615730051e-01 -1.1447940829478007e-01 + 3.9120688413158283e-01 3.9004320567777850e-01 -1.4194894869303565e-01 + 5.9141356492042141e-01 5.2924421427197366e-01 -1.9235201806982269e-01 + 8.0901823261881090e-01 6.3845635806046142e-01 -2.3428383794164956e-01 + 1.0400318941395408e+00 7.1830007437977794e-01 -2.6218796172752468e-01 + 1.2791182695220269e+00 7.6541097059250562e-01 -2.7985513138257356e-01 + 1.5185463560855392e+00 7.7908568867086647e-01 -2.9692546855293811e-01 + 1.7503984681864837e+00 7.6358227410564372e-01 -3.2187524586102567e-01 + 1.9676715234002489e+00 7.2576785664772103e-01 -3.6023704936918438e-01 + 2.1631907468925107e+00 6.7395016307567879e-01 -4.1736739285467456e-01 + 2.3294614109242140e+00 6.1680587637576756e-01 -4.9748673351098482e-01 + 2.4593983173876297e+00 5.6226137995696601e-01 -6.0028242661251097e-01 + 2.5475086205062119e+00 5.1637470053242418e-01 -7.1912258728930833e-01 + 2.5923332555344203e+00 4.8136941733850547e-01 -8.4109433470473760e-01 + 2.6006398442018415e+00 4.5462942634649078e-01 -9.4648532887864456e-01 + 2.5855738910230674e+00 4.3087538149799154e-01 -1.0176518298594566e+00 + 2.5560062370552648e+00 4.0436368619003182e-01 -1.0518170821900072e+00 + 2.5152181488099385e+00 3.7059505163461504e-01 -1.0568611312692560e+00 + 2.5806170131366137e+00 3.4859569922735634e-01 -9.5068719760903431e-01 + id 14775 + loc 6.8327176570892334e-01 3.7249094247817993e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4141606007442585e-01:3.1439917237239245e-01:4.4697830295021346e-01:2.6881958264449213e-01:1.0197399970442218e+00:2.5745358767064597e-01:1.9317874282792036e+00:4.4141164591382515e-01:2.3506776398921230e+00:3.9805799827390226e-01:2.9546154840340844e+00:2.5439319269021821e-01:3.6667522968754511e+00 + CVs 20 + -3.5104850821581352e-02 4.1108033467477711e-01 -1.6268594036565798e-01 + -6.0376342735683375e-02 7.9318273654233706e-01 -2.4385276278113791e-01 + -9.1458639843567502e-02 1.1555853085494709e+00 -2.8551246134112285e-01 + -1.4227622752507335e-01 1.5097099934413858e+00 -2.9921362186704742e-01 + -2.2480096752686274e-01 1.8568456973672687e+00 -2.7609156119053724e-01 + -3.5188767889535777e-01 2.1934815523864413e+00 -2.0461220779287403e-01 + -5.3214078315806601e-01 2.5033789397664137e+00 -7.3592405578320252e-02 + -7.6207824991736772e-01 2.7603768217560556e+00 1.1764577357204220e-01 + -1.0272402512517422e+00 2.9433405532440409e+00 3.5415716562810773e-01 + -1.3072256705934777e+00 3.0466414994674587e+00 6.1087865778152650e-01 + -1.5857397492519323e+00 3.0816836757329922e+00 8.6765596456277416e-01 + -1.8594079177871019e+00 3.0658486219335179e+00 1.1185722297845511e+00 + -2.1376790742554439e+00 3.0103606975166839e+00 1.3639929438642218e+00 + -2.4408779906248652e+00 2.9138965814261022e+00 1.6022467025659741e+00 + -2.8013384241755368e+00 2.7497698489156250e+00 1.8382625310648395e+00 + -3.2080308179392025e+00 2.4729851781918093e+00 2.0563759422063175e+00 + -3.6031264487186592e+00 2.0716887169110167e+00 2.1633319066197547e+00 + -3.9214174202047185e+00 1.5331854950726942e+00 2.1183861416005034e+00 + -3.8612734446908341e+00 1.5614968737569832e+00 2.2036400808123116e+00 + id 14776 + loc 2.8140306472778320e-01 3.5388472676277161e-01 394 + blend 0.0000000000000000e+00 + interp 4.2794084696338458e-01:3.7343624035079354e-01:7.2225446009107541e-01:4.2793656755491499e-01:1.0994272817454243e+00:3.1160557857206939e-01:1.7374631310260469e+00:2.9417489796821744e-01:2.6597577769036880e+00:3.0971424612080251e-01:3.2437156076706666e+00:4.1004782498922304e-01:3.9407290357899312e+00 + CVs 20 + -1.3860905913422372e-01 3.3779194814416280e-01 2.9278577311419318e-01 + -2.8887287692061242e-01 6.5332058045738461e-01 5.3845246670282199e-01 + -4.4843437250841728e-01 9.6050768597234448e-01 7.6203183154807463e-01 + -6.2090112799120900e-01 1.2682637828157652e+00 9.7272533995790911e-01 + -8.1298737681927424e-01 1.5746537295552849e+00 1.1699423834710061e+00 + -1.0345269807393531e+00 1.8717058253778018e+00 1.3580378395943431e+00 + -1.2929474613779137e+00 2.1472187378564729e+00 1.5437243555841047e+00 + -1.5876036530956479e+00 2.3903362227785410e+00 1.7344133632017686e+00 + -1.9143934882116871e+00 2.5917886184024028e+00 1.9388746467195985e+00 + -2.2712806683328268e+00 2.7333114714368594e+00 2.1597250698255634e+00 + -2.6531309537186947e+00 2.7850297986578436e+00 2.3847013297014361e+00 + -3.0449303393115832e+00 2.7213089366998391e+00 2.5930898004513256e+00 + -3.4199613630599082e+00 2.5354094067898534e+00 2.7677851477082367e+00 + -3.7427083897325386e+00 2.2507394877877149e+00 2.8909256013682327e+00 + -3.9952606019134094e+00 1.9131269287715491e+00 2.9636106045893538e+00 + -4.1924674618663857e+00 1.5367331222462117e+00 3.0237397814029743e+00 + -4.3557423474578725e+00 1.1014411519791365e+00 3.1347962771039488e+00 + -4.4800210397339502e+00 6.2901235814986922e-01 3.3492497881575547e+00 + -4.5135861156019041e+00 3.1674027251315318e-01 3.4857284864974463e+00 + id 14777 + loc 3.7428170442581177e-01 9.7479897737503052e-01 405 + blend 0.0000000000000000e+00 + interp 4.4731861237454201e-01:4.4731413918841828e-01:7.2855482467769628e-03:4.0356007367896113e-01:5.3989759527101078e-01:1.9836418956203317e-01:1.5080191837920989e+00:2.7829300594269230e-01:2.6669698157172093e+00:3.1848567084006563e-01:3.0096514960230474e+00:4.2185482173773198e-01:3.6182139696144318e+00 + CVs 20 + 2.5350501142613613e-01 3.2487145452335564e-01 -4.2397104860076133e-03 + 3.2459111658466033e-01 5.1120613278678184e-01 -1.7549688060498107e-02 + 3.3671793175989972e-01 6.5782290656819364e-01 -3.2003293217953019e-02 + 3.4893102279561639e-01 8.0060806805192497e-01 -4.8339522212006922e-02 + 3.6218930910185854e-01 9.4753696710215141e-01 -6.4541683004200295e-02 + 3.8092545644745307e-01 1.1094907179676978e+00 -7.2370733602633117e-02 + 4.0883711141270157e-01 1.2907211321779164e+00 -5.4546471691867743e-02 + 4.4270776705080883e-01 1.4808786155754194e+00 5.4121728272457648e-03 + 4.7342081261219382e-01 1.6638417566446264e+00 1.1039561730381163e-01 + 4.9226761980688938e-01 1.8312514551231101e+00 2.5382176355223907e-01 + 4.9490468057601222e-01 1.9834001796939866e+00 4.3016901676002550e-01 + 4.7991193747075178e-01 2.1219626817369623e+00 6.3734347563805727e-01 + 4.3988296679254513e-01 2.2403795282980510e+00 8.6741450212239191e-01 + 3.5532952798456918e-01 2.3214999117043407e+00 1.0973043158926381e+00 + 2.0950619438925888e-01 2.3487085223717212e+00 1.3082181194826745e+00 + 1.1699251315297254e-02 2.3183668210005721e+00 1.5148552464657064e+00 + -2.0687876121887971e-01 2.2394719359304749e+00 1.7442131787928863e+00 + -4.1237821831600968e-01 2.1256829330770888e+00 1.9883718923616651e+00 + -5.0639635241578929e-01 2.1044966581171831e+00 2.2132728839783584e+00 + id 14778 + loc 9.7129464149475098e-01 5.0394999980926514e-01 404 + blend 0.0000000000000000e+00 + interp 4.2299067838602378e-01:2.6284268688470680e-01:3.9364585207195546e-03:2.7397969378141235e-01:7.2069017144440095e-01:3.0257506883009117e-01:1.1908903258032035e+00:2.6185145058396697e-01:2.0025712527388748e+00:3.3761182053092631e-01:2.2564396506542117e+00:4.2298644847923994e-01:2.9891210353666988e+00:3.8555613979832848e-01:3.8506881488460944e+00 + CVs 20 + 2.7880189437247127e-02 1.7838789070749458e-01 -1.1704033975061971e-02 + 1.0399310297233733e-02 3.3903096501812940e-01 -2.0805641474543765e-02 + -1.1695321212817217e-02 5.2164090020005660e-01 -5.3448781260192701e-02 + -5.4948799898780210e-03 7.3081915339904169e-01 -1.1594044002535317e-01 + 3.6990320074250627e-02 9.6004519490541451e-01 -2.1383818992706732e-01 + 1.2340238867587661e-01 1.1987279694460438e+00 -3.5070719768844882e-01 + 2.6017169352435932e-01 1.4327730100029374e+00 -5.2498453071816220e-01 + 4.4889992403207701e-01 1.6484988047404951e+00 -7.3153585131854537e-01 + 6.8667407554694482e-01 1.8358374522336558e+00 -9.6480294768077957e-01 + 9.6812779494006374e-01 1.9873773823446590e+00 -1.2175137662928490e+00 + 1.2794432524029118e+00 2.0975485021181424e+00 -1.4785545146287356e+00 + 1.5832195444753050e+00 2.1642317617438533e+00 -1.7420112101520933e+00 + 1.8234618145301269e+00 2.1912033695601125e+00 -2.0144559123616248e+00 + 1.9672438090381204e+00 2.1863049245746029e+00 -2.3031801646055108e+00 + 2.0171754194692988e+00 2.1555111323274181e+00 -2.6047845897951358e+00 + 1.9738440124691592e+00 2.1084574473987199e+00 -2.8892490873285501e+00 + 1.8401611272404756e+00 2.0651423768817128e+00 -3.1091804100074119e+00 + 1.6480703296039763e+00 2.0415919395243667e+00 -3.2462204251091640e+00 + 1.4851343128061738e+00 1.9710160373546133e+00 -3.5269909408305509e+00 + id 14779 + loc 1.2685334682464600e-01 2.3748688399791718e-02 1079 + blend 0.0000000000000000e+00 + interp 3.5839871252078304e-01:3.0666842252115062e-01:1.0449813979111822e+00:3.5839512853365785e-01:1.9738029325669504e+00:2.3229699497915168e-01:2.3786683897617515e+00:2.7345907636471350e-01:3.1799502134440827e+00:2.9315173278102541e-01:3.9840845141825545e+00 + CVs 20 + 3.8930103746112193e-01 4.8276528925884998e-01 2.1846620612509610e-02 + 6.3144917197671457e-01 8.8934475389156675e-01 1.4703397209235691e-02 + 8.2753153779769173e-01 1.2636685310053228e+00 -4.2952757421441112e-03 + 1.0105169038072188e+00 1.6225614519446305e+00 -3.4478104609242055e-02 + 1.1656352329331148e+00 1.9605702166477363e+00 -8.7314587965623414e-02 + 1.2748541195160215e+00 2.2770857724200884e+00 -1.7832047328420297e-01 + 1.3130921981844710e+00 2.5676994316377666e+00 -3.3233793794776978e-01 + 1.2556905251795385e+00 2.7927262266103980e+00 -5.7022533229778405e-01 + 1.1254503318093971e+00 2.8869748925793646e+00 -8.5375610366919974e-01 + 9.8222176424538499e-01 2.8603450272344455e+00 -1.1202386956955355e+00 + 8.4526136852492206e-01 2.7543295104193053e+00 -1.3605293730596209e+00 + 7.1148893138068403e-01 2.5835423139855784e+00 -1.5786894983942463e+00 + 5.7645308264582673e-01 2.3473521564093525e+00 -1.7702785685847311e+00 + 4.3395641623201986e-01 2.0352349000850642e+00 -1.9221909308119978e+00 + 2.8198229250997342e-01 1.6392155840612752e+00 -2.0028136408084878e+00 + 1.4373728689449455e-01 1.1888031579939695e+00 -1.9623014131307197e+00 + 4.7587130203156566e-02 7.2820799547722392e-01 -1.7650567058939752e+00 + -2.1026805850004882e-03 3.5257968213709062e-01 -1.4216027811972969e+00 + 1.9736848912241506e-02 3.3882418801463082e-01 -1.2018903254301214e+00 + id 14780 + loc 1.3784117996692657e-01 9.2993885278701782e-01 394 + blend 0.0000000000000000e+00 + interp 4.1608302198223063e-01:3.1207257360551877e-01:5.1074802854708357e-01:4.0534436684219183e-01:9.8155433660341362e-01:2.6478794158842850e-01:1.8473348089601214e+00:2.8138092980431340e-01:2.7988113535926935e+00:4.1607886115201081e-01:3.1500694397563249e+00:2.8077854222979698e-01:3.8737798365740588e+00 + CVs 20 + -2.6101895273281284e-01 2.1863154261512899e-01 -9.0415663654853373e-02 + -4.9593233360714456e-01 4.4430693538352650e-01 -1.9487940328167885e-01 + -7.1395085750654963e-01 6.7685596015763116e-01 -3.0715455060932528e-01 + -9.2195670917806738e-01 9.1293802354040521e-01 -4.2650211773727631e-01 + -1.1241991715647941e+00 1.1456757069818833e+00 -5.5720481525185095e-01 + -1.3247009265455674e+00 1.3655010228982745e+00 -7.0405382979439346e-01 + -1.5275707044064319e+00 1.5610233186177329e+00 -8.7275835770163823e-01 + -1.7350037963189027e+00 1.7203147167658805e+00 -1.0659357251386381e+00 + -1.9446867724904893e+00 1.8313085845955341e+00 -1.2789513262327574e+00 + -2.1488622325829567e+00 1.8832413895860052e+00 -1.5018281219444996e+00 + -2.3364426903796693e+00 1.8706008367787241e+00 -1.7187551564002908e+00 + -2.4986020949233794e+00 1.7975485889775058e+00 -1.9082961613035057e+00 + -2.6362085587257535e+00 1.6805643521323426e+00 -2.0625875832042597e+00 + -2.7541564904917406e+00 1.5365011094286398e+00 -2.1980648962644773e+00 + -2.8391332273421472e+00 1.3434698672185776e+00 -2.3086562899454557e+00 + -2.8633588817280078e+00 9.9911282784430222e-01 -2.3224798342080830e+00 + -2.8667669927948403e+00 3.4100864306576728e-01 -2.2810311757739434e+00 + -2.9587836750010186e+00 -3.6474693154858828e-01 -2.5227032135863992e+00 + -2.9893302133468169e+00 -4.4767002929179012e-01 -2.8585636909744703e+00 + id 14781 + loc 2.4191969633102417e-01 2.2530533373355865e-01 405 + blend 0.0000000000000000e+00 + interp 4.3040310660151243e-01:4.2152420616766184e-01:5.4706322597436319e-01:4.3039880257044644e-01:1.0091845288785073e+00:3.9811093903075051e-01:1.9535537294072449e+00:3.3967521850784432e-01:2.2370044643681966e+00:4.1349816996988220e-01:2.8823351630380891e+00:4.0098720209254579e-01:3.5108584475174558e+00:2.6365143150807402e-01:3.9976951838253600e+00 + CVs 20 + -3.1917185501782734e-02 8.7889283222580994e-02 -2.5605362509493121e-02 + -7.2066220386315494e-02 1.2180720336935436e-01 -3.3370445890721433e-02 + -1.2011286872900412e-01 1.5847532383664498e-01 -2.2944068713238189e-02 + -1.6846509982941194e-01 1.9890907503580618e-01 -2.8110818081280700e-02 + -2.1861560234042998e-01 2.4494812692131090e-01 -4.8433742803047408e-02 + -2.7190479845142140e-01 3.0319445104027298e-01 -8.3501171991448242e-02 + -3.2556316553377290e-01 3.8421840978948640e-01 -1.3353362083821183e-01 + -3.6841453673858904e-01 4.9628466283327655e-01 -1.9758386872012620e-01 + -3.8397273931027903e-01 6.3407908422747883e-01 -2.7101761224006338e-01 + -3.6455315863119647e-01 7.7583640708042689e-01 -3.4652876847687636e-01 + -3.1853657153656301e-01 8.9931114842855475e-01 -4.1987488310393972e-01 + -2.6002396816283851e-01 9.9495755576753608e-01 -4.9157815761313728e-01 + -1.9886919469217051e-01 1.0639411451494949e+00 -5.6285901938410587e-01 + -1.3736114822082940e-01 1.1118743490194842e+00 -6.3435215278878276e-01 + -7.3059715115193019e-02 1.1439921610607808e+00 -7.0361495464097046e-01 + -5.2383968979876558e-03 1.1638818317485466e+00 -7.6046745924527848e-01 + 6.3552642387419894e-02 1.1741396077977382e+00 -7.8845393314528689e-01 + 1.3401516132359165e-01 1.1758128382948998e+00 -7.7531741661411169e-01 + 2.2759041126377708e-01 1.1497032969144703e+00 -7.6273591051410539e-01 + id 14782 + loc 9.8380970954895020e-01 6.7732036113739014e-01 404 + blend 0.0000000000000000e+00 + interp 3.6503425502358111e-01:2.7435793784863882e-01:5.0288059574331689e-02:3.4356683226389306e-01:9.9397123956378108e-01:3.6503060468103088e-01:1.4130561095696246e+00:2.5248764944240437e-01:1.9856670228841733e+00:2.5630324067669930e-01:2.8757626959539433e+00:2.5010123293373288e-01:3.8561887400717150e+00 + CVs 20 + -2.4467908485339696e-02 7.6858611804060506e-02 -8.6666942171519240e-02 + -2.3644427214826944e-02 1.5028099376631643e-01 -1.2971179197511562e-01 + -5.3984873247671372e-03 2.1990400845934646e-01 -1.4126079818740683e-01 + 2.2970823437127114e-02 2.8211900558706754e-01 -1.3491046910566160e-01 + 5.6190990645864858e-02 3.3306061970442924e-01 -1.1058914996935926e-01 + 8.7104419968866351e-02 3.6991600262666641e-01 -6.8476263874032883e-02 + 1.0696424594520132e-01 3.9147271924705074e-01 -1.0079298110858378e-02 + 1.0736694347879977e-01 3.9893612927103739e-01 6.0726174432174568e-02 + 8.3075401430342477e-02 3.9543664792545902e-01 1.3729031709761741e-01 + 3.3517064715175682e-02 3.8509184725241685e-01 2.1175630903993081e-01 + -3.6606627393504246e-02 3.7814440557162743e-01 2.7985909013619964e-01 + -1.1324551242001153e-01 3.9125125255281973e-01 3.4433810138274090e-01 + -1.7727676349327093e-01 4.3497103842291879e-01 4.1121426346117551e-01 + -2.1751437606430288e-01 5.0349151715698359e-01 4.8038211106141904e-01 + -2.3445999860048658e-01 5.8206169497456717e-01 5.4581369058590645e-01 + -2.2792909346904722e-01 6.6456810919424425e-01 6.0568375016858178e-01 + -1.9706718299574164e-01 7.5211068307419882e-01 6.6012890250754985e-01 + -1.4772621394972013e-01 8.4744884820665534e-01 7.0551846075923930e-01 + -1.4270237142965364e-01 8.8664782382178253e-01 7.1481420886058622e-01 + id 14783 + loc 9.6926689147949219e-03 1.2814401648938656e-02 1079 + blend 0.0000000000000000e+00 + interp 4.4208729051182127e-01:3.7628386832995403e-01:4.4326193816496862e-01:2.8359472733828112e-01:1.1834698963788175e+00:2.9451334931888418e-01:2.2134291619134494e+00:4.4208286963891619e-01:3.0007130211183779e+00:2.6354134078371710e-01:3.4496154877980159e+00:3.5839512853365785e-01:3.9828517587032723e+00 + CVs 20 + 2.9777606849125565e-01 4.6063968932300320e-01 1.2071294612417718e-01 + 4.4316518934207338e-01 8.2409637769968236e-01 1.9844188812775271e-01 + 5.4235800374706600e-01 1.1659325310908417e+00 2.4870183415846672e-01 + 6.4507995763077552e-01 1.4986984736067264e+00 2.8525559833800751e-01 + 7.4236179093545251e-01 1.8126258150070911e+00 3.1101684703175042e-01 + 8.2983413290550456e-01 2.1025936911221397e+00 3.3360981327341660e-01 + 9.0753722086874478e-01 2.3940521871145859e+00 3.5357755189115775e-01 + 9.4715814249732755e-01 2.7440258011332119e+00 3.1768385785324316e-01 + 8.6259613661076306e-01 3.0849800804346037e+00 1.3814665187017416e-01 + 6.7070486653105243e-01 3.2504819232021047e+00 -1.1532328685237736e-01 + 4.5595347661404140e-01 3.2458662827146005e+00 -3.5253886614637342e-01 + 2.5029285011813762e-01 3.1236141054257494e+00 -5.5571326025380907e-01 + 6.8620947582870295e-02 2.9186907961851358e+00 -7.1628673215804439e-01 + -7.8260286360633202e-02 2.6587854612222257e+00 -8.2422996599989462e-01 + -1.7669176645385709e-01 2.3796955461642302e+00 -8.6732533121456845e-01 + -1.9772335790446294e-01 2.1373754763918651e+00 -8.4365517179058747e-01 + -1.2057177399427021e-01 1.9722394535262335e+00 -8.0583529733127524e-01 + 2.8457628292895887e-02 1.8463292202207144e+00 -7.5401965185332187e-01 + 1.4691130173320932e-01 1.7628593428320642e+00 -3.4940864499041674e-01 + id 14784 + loc 4.3085509538650513e-01 9.2755359411239624e-01 394 + blend 0.0000000000000000e+00 + interp 4.7470514368242595e-01:4.5792330778007589e-01:5.0709390098791385e-02:4.7470039663098912e-01:8.2173209533406522e-01:3.1550154645652567e-01:1.0868548181532298e+00:4.2480858851753844e-01:1.9323175953669534e+00:3.1318206769207591e-01:2.1879860409151108e+00:3.7178998601404162e-01:2.9241792742933526e+00:4.0543135747297276e-01:3.3882792393977734e+00 + CVs 20 + -2.5205975728528801e-01 2.5111953247401503e-01 -2.4416267417618945e-01 + -5.0992912410009827e-01 4.8976329846799116e-01 -4.7982961360982584e-01 + -7.8034125768976281e-01 7.2022460985849568e-01 -7.2098794873897420e-01 + -1.0653785273308087e+00 9.3584238859787350e-01 -9.7688460257870668e-01 + -1.3634635068658287e+00 1.1199996700570591e+00 -1.2502376308840488e+00 + -1.6716836981402337e+00 1.2511541122937215e+00 -1.5384472011845785e+00 + -1.9817225669613054e+00 1.3074315025027472e+00 -1.8332703570151141e+00 + -2.2797098641441442e+00 1.2752257237920133e+00 -2.1219176994518976e+00 + -2.5552424676990149e+00 1.1571774767072320e+00 -2.3897306463869255e+00 + -2.8089725898759168e+00 9.7077401578997780e-01 -2.6260986246340137e+00 + -3.0452325136268068e+00 7.3987292588003184e-01 -2.8295863827108731e+00 + -3.2650328736113710e+00 4.8789427492286874e-01 -3.0076208315849593e+00 + -3.4687347360018781e+00 2.3096783920071884e-01 -3.1664599690005573e+00 + -3.6600444368330161e+00 -2.3600735071353185e-02 -3.3033141172599918e+00 + -3.8533319697549890e+00 -2.6865522889609972e-01 -3.4286323390484794e+00 + -4.0748322671513160e+00 -4.9177158287528910e-01 -3.5957784118339799e+00 + -4.3363888763977005e+00 -6.4652530769394145e-01 -3.8765158103911732e+00 + -4.5949204898506775e+00 -6.5508589074587165e-01 -4.2232440444681352e+00 + -4.8021690434158772e+00 -6.4254434596221377e-01 -4.3973532176676722e+00 + id 14785 + loc 5.0008144229650497e-02 7.2524577379226685e-01 405 + blend 0.0000000000000000e+00 + interp 5.5448500505843590e-01:3.8263903768773361e-01:8.4678793299314381e-02:4.0471287822359231e-01:8.8489281988278112e-01:4.9928940919991782e-01:1.2457895658958302e+00:5.5447946020838534e-01:1.7621323243964175e+00:5.0516474635209574e-01:1.9998815333895266e+00:4.6587389707063370e-01:2.3410346909339466e+00:5.0654924553074732e-01:2.8966204876950834e+00:4.3204626261210233e-01:3.0892882020659549e+00:2.9750036235283939e-01:3.6985203030582485e+00 + CVs 20 + 2.1243701442567514e-01 2.7571555347319110e-01 7.2309151664042018e-02 + 2.7560072920483208e-01 4.8518028775001054e-01 1.4118326622540533e-01 + 3.0368485204530737e-01 6.4111731922612536e-01 2.2603346515581973e-01 + 3.2674620135233645e-01 7.7053966936235341e-01 3.4471591860519391e-01 + 3.4123895293833173e-01 8.6516733082836517e-01 4.9194858296568911e-01 + 3.4548092719834339e-01 9.1917346688006740e-01 6.5838112867048537e-01 + 3.3924931356148691e-01 9.3099760045656299e-01 8.3391012624541383e-01 + 3.2298905927037580e-01 9.0222615483583657e-01 1.0109384128027916e+00 + 2.9710229689679535e-01 8.3543293087874082e-01 1.1853122798228763e+00 + 2.6186753763286497e-01 7.3304190662147883e-01 1.3552529720690576e+00 + 2.1748447707747068e-01 5.9761893490069817e-01 1.5195235235714122e+00 + 1.6378658267237836e-01 4.3311363636776545e-01 1.6760963004160105e+00 + 9.9899668219209786e-02 2.4469434050863734e-01 1.8265694659779679e+00 + 2.5943212823010646e-02 3.3737585449159044e-02 1.9882840798573562e+00 + -5.2265706123396982e-02 -2.0212439069811827e-01 2.1933455063192393e+00 + -1.2249965586095110e-01 -4.5377257475790284e-01 2.4635676220051610e+00 + -1.7162518355021100e-01 -6.9900421455684092e-01 2.7977987450178654e+00 + -1.9062813163452508e-01 -9.1696234112865127e-01 3.1803503137521862e+00 + -2.3569743901595364e-01 -1.0701453131834111e+00 3.4632674572162849e+00 + id 14786 + loc 8.1821948289871216e-01 5.9389352798461914e-02 1079 + blend 0.0000000000000000e+00 + interp 4.5882951604215794e-01:2.6346137123921237e-01:8.0023893283504566e-02:3.4630588200226375e-01:9.9402185381151409e-01:4.4924279047597659e-01:1.3959712857332878e+00:4.2224249024485139e-01:1.9972755752196010e+00:4.5882492774699751e-01:2.5969912382869591e+00:2.6201414536549555e-01:3.0711622288275482e+00 + CVs 20 + 2.4451382081891487e-02 3.8422577929534596e-01 -3.8442653666567073e-02 + 1.5455977834056583e-02 7.1515350221075957e-01 -5.9360463080674053e-03 + -1.8504349761120475e-02 1.0034838306454947e+00 6.4013814255418522e-02 + -7.0081314960386221e-02 1.2425830046550810e+00 1.4897814212160504e-01 + -1.3058872135690280e-01 1.4196173003803507e+00 2.3624123107572031e-01 + -1.8221822368626267e-01 1.5330837295435522e+00 3.0617656870953253e-01 + -2.0641903453496746e-01 1.6019503575040897e+00 3.4444132450194009e-01 + -1.9869119548471864e-01 1.6575380441234693e+00 3.5610541640833182e-01 + -1.7389510475450132e-01 1.7203381471369390e+00 3.5743339660946416e-01 + -1.5994239882445982e-01 1.7880517238896352e+00 3.5569659204911064e-01 + -1.7719854017807657e-01 1.8514705782318290e+00 3.4319675716343434e-01 + -2.3293726778990176e-01 1.9165849612502752e+00 3.1169770035334110e-01 + -3.4225847777843221e-01 1.9963257693999155e+00 2.5840564258790233e-01 + -5.4311166477284467e-01 2.0855860707916221e+00 1.8253779097923961e-01 + -8.8918389886099081e-01 2.1449447632098702e+00 9.2294578590496390e-02 + -1.3546860877022251e+00 2.0445933828343872e+00 9.4017777610554409e-03 + -1.7385407733224976e+00 1.6322747347837558e+00 -7.1272477867379336e-02 + -1.8177543923818873e+00 9.5475901704271804e-01 -1.2634988794181326e-01 + -1.6077199029761651e+00 8.6884320252167047e-01 -7.4800630347057098e-02 + id 14787 + loc 5.3618609905242920e-01 6.9036149978637695e-01 404 + blend 0.0000000000000000e+00 + interp 4.0531333419534327e-01:4.0099708948152996e-01:6.9028441949717800e-03:2.8399327076088265e-01:9.3540144780405654e-01:4.0530928106200131e-01:1.3831666515370680e+00:3.7394880013970694e-01:2.0000048212456578e+00:2.9170896314640293e-01:2.6230323991551971e+00:2.4935445654709829e-01:3.5879297897649551e+00 + CVs 20 + -1.8411948622411557e-02 5.4807951063050628e-02 -1.0893489904732930e-02 + -1.2493265321187629e-02 1.0634402498309894e-01 -3.4112616050625919e-02 + 7.6791920223809318e-03 1.5198124077502184e-01 -6.9381381319975510e-02 + 3.2627798232205768e-02 1.8316130504212455e-01 -1.1592472999808059e-01 + 5.8514765454415682e-02 1.9983640916780043e-01 -1.7394955482289587e-01 + 8.1292729444914627e-02 2.0351381666791055e-01 -2.4329943875163201e-01 + 9.7919923324106303e-02 1.9783947801734278e-01 -3.2356477125267552e-01 + 1.1042975158881185e-01 1.9226893158818037e-01 -4.1569636536755128e-01 + 1.2471158071423265e-01 1.9787036793380897e-01 -5.2063548598293374e-01 + 1.3707911584305349e-01 2.1323848533900858e-01 -6.3355747218619574e-01 + 1.2464200064376263e-01 2.2294062952825644e-01 -7.4499395598964113e-01 + 6.1007030811994545e-02 2.1692670681525184e-01 -8.4477062199529296e-01 + -5.1046923009203965e-02 2.0050405580875963e-01 -9.2201426215225135e-01 + -1.8208241546304704e-01 1.8758010353799540e-01 -9.7470583497667396e-01 + -3.1854601951001399e-01 1.8361630966866896e-01 -1.0024031785121941e+00 + -4.7434423419071503e-01 1.9016295618430817e-01 -9.9247887312070193e-01 + -6.6242024616091133e-01 2.1440749562022826e-01 -9.2409648902587260e-01 + -8.6541137842798244e-01 2.6929353490519553e-01 -7.8908020808175183e-01 + -8.9851085147396526e-01 2.1869058808255384e-01 -7.2208550313979825e-01 + id 14788 + loc 7.2820585966110229e-01 3.7124863266944885e-01 394 + blend 0.0000000000000000e+00 + interp 4.6891223849926694e-01:3.0953800334037218e-01:5.2145670050956217e-01:4.6890754937688195e-01:1.0047653428099252e+00:2.8726473147318571e-01:1.7482492309122546e+00:3.2661699391195292e-01:2.7466802573715112e+00:4.5905552933344557e-01:3.1177972712960074e+00:3.3497571093629547e-01:3.9926122446138868e+00 + CVs 20 + 3.8894541120088610e-01 2.5090047181043085e-01 1.7938448028223114e-01 + 7.3799706424873990e-01 4.6453544829410498e-01 3.3242477817571203e-01 + 1.0808889110596600e+00 6.5126103252202605e-01 4.7511372991154721e-01 + 1.4316061117876053e+00 8.1614925748255129e-01 6.2355372225302386e-01 + 1.7835119487848337e+00 9.5224235902884824e-01 7.8811735092663082e-01 + 2.1290253037174982e+00 1.0503561634837155e+00 9.7286057543850113e-01 + 2.4635792941371770e+00 1.1031416475096938e+00 1.1768170120835117e+00 + 2.7810337317909299e+00 1.1048052343709727e+00 1.3946579612783725e+00 + 3.0681951911271970e+00 1.0504806194233098e+00 1.6141176261607799e+00 + 3.3104387636581931e+00 9.4089690383979852e-01 1.8186272323163939e+00 + 3.5054288798536501e+00 7.8390601592417419e-01 1.9984520454585946e+00 + 3.6658768702323625e+00 5.8616083187924106e-01 2.1560784153025114e+00 + 3.8022859359216725e+00 3.5117655793257274e-01 2.2943631785002987e+00 + 3.9111040317728181e+00 8.6950039651785049e-02 2.4062743890572191e+00 + 3.9817872520986590e+00 -1.8918555460384656e-01 2.4803793730650012e+00 + 4.0007067925507300e+00 -4.4511704403477625e-01 2.5027928717760584e+00 + 3.9601392770332704e+00 -6.3783179892950059e-01 2.4660481598515109e+00 + 3.8922287507245086e+00 -7.8860388872815368e-01 2.3927513533467462e+00 + 3.9931518452112869e+00 -1.2532618122049817e+00 2.3307220019754133e+00 + id 14789 + loc 8.7093925476074219e-01 4.6508923172950745e-01 405 + blend 0.0000000000000000e+00 + interp 4.0209240882715164e-01:2.6491664818287719e-01:1.3999889519807796e-02:3.0722806344637860e-01:7.1943397053167102e-01:3.8059676516889129e-01:1.0577734715616143e+00:3.5846879384951857e-01:1.8463050265375487e+00:4.0208838790306339e-01:2.2206249610804090e+00:3.6885857531664407e-01:2.9698152379182892e+00:3.6680023543359896e-01:3.5002409350383275e+00 + CVs 20 + 3.9762957204964131e-02 2.4877673040231926e-01 8.4429351617169839e-03 + 1.5150247004739167e-01 4.0080034431196382e-01 -1.8874554415238918e-03 + 2.7429101798584399e-01 5.2958287029633988e-01 -1.9111022423705978e-02 + 3.8741806290477876e-01 6.3374304239796031e-01 -4.9890205572259379e-02 + 4.8785059022950317e-01 7.0409486658626630e-01 -1.0025297986003005e-01 + 5.6815717644294139e-01 7.2981689759153623e-01 -1.7290019921654992e-01 + 6.1374904574941203e-01 6.9737990836583785e-01 -2.6320402202585724e-01 + 6.0381640039464979e-01 5.9716513243111691e-01 -3.5057458906628064e-01 + 5.2416971750513996e-01 4.3903778617693989e-01 -3.9406902515877662e-01 + 3.9452908452988472e-01 2.6633444626318081e-01 -3.5783439894655356e-01 + 2.6197398241124131e-01 1.2493755075942935e-01 -2.5327491097920557e-01 + 1.5485415017425649e-01 2.5304693892832089e-02 -1.1816003997366820e-01 + 7.4533488110500340e-02 -4.2404885741985247e-02 2.4031255074600237e-02 + 1.4184912165692780e-02 -8.9907540571440930e-02 1.5902155478502497e-01 + -3.2544752708181766e-02 -1.3701615124298577e-01 2.6466081175082451e-01 + -7.1314041818700755e-02 -2.1089139503600859e-01 3.2213631809549664e-01 + -1.0594726545056893e-01 -3.2224892149804574e-01 3.3338225547960404e-01 + -1.3647919583052376e-01 -4.6057685860706543e-01 3.1260492641065579e-01 + -1.7728883658491718e-01 -5.4781536495733008e-01 3.4651857331342473e-01 + id 14790 + loc 7.8348517417907715e-01 2.3283396661281586e-01 1079 + blend 0.0000000000000000e+00 + interp 4.1179041075180939e-01:3.2198034908732120e-01:4.3719007669178966e-01:2.4154199809815699e-01:1.6296061641703645e+00:4.1178629284770191e-01:2.1978048184353511e+00:3.1259016343767182e-01:2.7486619581853118e+00:2.4739266014304509e-01:3.1588770938008137e+00:3.1565258594815487e-01:3.9891202133278001e+00 + CVs 20 + -1.8238992637824997e-02 4.0284357108454338e-01 -9.1037931476911499e-02 + -6.2025736030256795e-02 7.8665202082089225e-01 -1.1481562112187887e-01 + -1.3693693256526218e-01 1.1572422506280926e+00 -1.0129249760258807e-01 + -2.5058719469873103e-01 1.5109095448279235e+00 -5.4990212009899397e-02 + -4.1022518600606717e-01 1.8293059278369865e+00 3.4549633599765484e-02 + -6.1917109935753833e-01 2.0858909954777989e+00 1.7228647801972474e-01 + -8.7241969069420289e-01 2.2516950447737614e+00 3.5008402332681188e-01 + -1.1562757586174590e+00 2.3102804209798511e+00 5.4551987880168451e-01 + -1.4548622917545615e+00 2.2644759443483369e+00 7.3684854468138861e-01 + -1.7556022002653737e+00 2.1281327105763488e+00 9.1977237884054919e-01 + -2.0466789879541190e+00 1.9114997920572554e+00 1.1044397096645728e+00 + -2.3082314998436138e+00 1.6162033118032941e+00 1.3010812219083652e+00 + -2.5061749789614414e+00 1.2391622210800308e+00 1.5192968411086296e+00 + -2.5836504266028468e+00 7.8079852585481546e-01 1.7730208629606485e+00 + -2.4486071809103636e+00 2.7190510449349947e-01 2.0687660568202757e+00 + -2.0444615784887041e+00 -1.6299534311188024e-01 2.4011071931442993e+00 + -1.4576694450363112e+00 -3.4531842856995176e-01 2.7987521312522832e+00 + -8.8811163519379743e-01 -1.9826214374668472e-01 3.2548042181303267e+00 + -6.1365658004995560e-01 -2.8183765982240772e-01 3.5690134289617319e+00 + id 14791 + loc 2.0881979167461395e-01 4.4847330451011658e-01 405 + blend 0.0000000000000000e+00 + interp 4.1495095292902046e-01:3.8030218394229098e-01:1.5403811115290988e-02:3.4806653180322317e-01:6.6107102595015887e-01:4.1494680341949119e-01:1.0105291939284331e+00:2.7650864656618646e-01:1.6001239259393798e+00:3.9002531172769955e-01:2.0403178991235245e+00:2.7829166202394373e-01:2.7461750010025199e+00:4.1208848078159244e-01:3.0818016296729844e+00 + CVs 20 + 1.7151854004301476e-01 2.1329962229345512e-01 -9.9598146366447343e-02 + 3.3216832650465267e-01 3.9851484216541277e-01 -9.3512885144144187e-02 + 4.9840963867878263e-01 5.2219555804094264e-01 -1.0046814569668577e-01 + 6.8087471091912533e-01 6.1084348814659395e-01 -1.1600173199625111e-01 + 8.7365277944308284e-01 6.6314394303777369e-01 -1.3929958448695129e-01 + 1.0694711531037535e+00 6.8238962550394433e-01 -1.7162017510844671e-01 + 1.2624291814944864e+00 6.7667883663811490e-01 -2.1332156194635044e-01 + 1.4490999119044052e+00 6.5531359971203118e-01 -2.6336243494118261e-01 + 1.6283322920346983e+00 6.2600421596959710e-01 -3.1902447437052939e-01 + 1.8011893079179002e+00 5.9409275757346358e-01 -3.7587819276955736e-01 + 1.9695112527795828e+00 5.6142420328096176e-01 -4.2872258249915918e-01 + 2.1361786205586326e+00 5.2589779230922251e-01 -4.7122020235984763e-01 + 2.3034452105943597e+00 4.8563934690791444e-01 -4.9936556350542077e-01 + 2.4697094830302380e+00 4.4937867138983800e-01 -5.1661849587800845e-01 + 2.6311634405832702e+00 4.3673411079827013e-01 -5.3219831288935482e-01 + 2.7829865317787883e+00 4.6092187998418988e-01 -5.5224951665583322e-01 + 2.9212831686757630e+00 5.1776386856815759e-01 -5.7524839472477751e-01 + 3.0473419609853503e+00 5.9516553930457072e-01 -5.9787417352480021e-01 + 3.2594769808642496e+00 6.3142131278647406e-01 -5.8981786866406771e-01 + id 14792 + loc 8.6182564496994019e-01 7.6091814041137695e-01 404 + blend 0.0000000000000000e+00 + interp 3.6503425502358111e-01:2.6866089825981060e-01:4.4364110360055165e-02:3.3448374069163755e-01:9.8870438079135681e-01:2.5284516752429431e-01:1.9977341933769095e+00:2.4991351076120574e-01:2.9921607805539203e+00:3.6503060468103088e-01:3.3892843636751522e+00 + CVs 20 + -7.3704091350224071e-02 5.0105494518831721e-02 1.2997535487054127e-02 + -1.6233559198085343e-01 8.5835675787679921e-02 3.9075696668820284e-02 + -2.6734497760271303e-01 1.4108869512195638e-01 7.3937612170402581e-02 + -3.8693328530264559e-01 2.2315813812136973e-01 9.7584172257310073e-02 + -5.1220178234774949e-01 3.4494399336244630e-01 1.0556176628299457e-01 + -6.2771379873663014e-01 5.1525322493583026e-01 9.4087438444863836e-02 + -7.1425179100556546e-01 7.3177516047669311e-01 6.2187208530513668e-02 + -7.5905232476631523e-01 9.7656182432585625e-01 1.3885877608048026e-02 + -7.6044889546675543e-01 1.2320938844199785e+00 -4.2716089701478374e-02 + -7.1450610065986975e-01 1.4965100090606049e+00 -9.6269491576726818e-02 + -6.1209420242648505e-01 1.7700414957746844e+00 -1.3810358063864858e-01 + -4.5556567640697421e-01 2.0389505495584981e+00 -1.7258377617349036e-01 + -2.6614936634540931e-01 2.2848295004052543e+00 -2.1268530447099948e-01 + -6.4604526778048177e-02 2.5013172016932028e+00 -2.6476254015159917e-01 + 1.4859498400664228e-01 2.6924775178316773e+00 -3.2797937912986053e-01 + 3.8528843350981679e-01 2.8602258872931787e+00 -4.0213360556344574e-01 + 6.5563547449474924e-01 2.9995622999627205e+00 -4.8848747435665757e-01 + 9.6558812327556431e-01 3.1005320067208415e+00 -5.8359213349267769e-01 + 1.1760814446525261e+00 3.1802106728506274e+00 -6.2729945795567765e-01 + id 14793 + loc 5.6116789579391479e-01 9.9514931440353394e-01 1079 + blend 0.0000000000000000e+00 + interp 3.7513383994381871e-01:3.0515372341701896e-01:3.4874945764057974e-01:3.7513008860541930e-01:9.9388116955979589e-01:3.6473254587590159e-01:1.2896699801539762e+00:2.0255043837271614e-01:1.9999246835861790e+00:2.9853685482675496e-01:2.8933581783072508e+00:2.8163354669772495e-01:3.7715271497995291e+00 + CVs 20 + 2.8789535758517087e-01 3.9036210975071362e-01 -9.1778179992637016e-02 + 5.7785801108763124e-01 7.2378967257341298e-01 -2.2605160722639447e-01 + 8.6951414458001675e-01 1.0045798935481867e+00 -3.8610423991841258e-01 + 1.1564268100872395e+00 1.2214737261145330e+00 -5.6556251189991957e-01 + 1.4256290556407805e+00 1.3569782834478559e+00 -7.6058805350348324e-01 + 1.6552970684017887e+00 1.3905284789833516e+00 -9.6224746953024110e-01 + 1.8283233535003889e+00 1.3245987329816733e+00 -1.1500946329798347e+00 + 1.9440416588058380e+00 1.1883786410559540e+00 -1.3024265050298860e+00 + 2.0112407355007855e+00 1.0132473294500923e+00 -1.4043873851271962e+00 + 2.0426993930360506e+00 8.2559964251149176e-01 -1.4486308244349415e+00 + 2.0540331308476021e+00 6.4778770727067325e-01 -1.4386705470872054e+00 + 2.0606933306115391e+00 4.9467209663820388e-01 -1.3881352676727490e+00 + 2.0734648723286635e+00 3.7133802100989954e-01 -1.3130783953953340e+00 + 2.0957994437422349e+00 2.7965199939901753e-01 -1.2208829211819656e+00 + 2.1189002896006013e+00 2.4091044818540797e-01 -1.0946358252209190e+00 + 2.1151460959816237e+00 3.6064870749171707e-01 -8.8726173839115496e-01 + 2.0678187222080422e+00 8.5066654549545950e-01 -6.6838452077236576e-01 + 2.0496254081853054e+00 1.4857690066374454e+00 -7.2094444540307878e-01 + 2.0720430274877959e+00 1.3368218570423676e+00 -5.9899226108622705e-01 + id 14794 + loc 3.1350353360176086e-01 2.4175388738512993e-02 394 + blend 0.0000000000000000e+00 + interp 4.9259912268081651e-01:2.8472489286902425e-01:1.6351935018037445e-03:4.9143850029773772e-01:3.7832982399916082e-01:3.7732775565950000e-01:1.1934087665406901e+00:3.7681822964729333e-01:1.8966766619516311e+00:4.4492749647912422e-01:2.0791488103357523e+00:4.9259419668958970e-01:2.6167740312496131e+00:3.1068990481809394e-01:3.0351097359079291e+00 + CVs 20 + -8.7754670560700548e-02 3.3107341578279753e-01 2.4633125194911704e-01 + -1.4516980110316008e-01 6.7444514326262939e-01 5.0708946629769036e-01 + -1.8256160166812521e-01 1.0254144799090168e+00 7.7407938516752561e-01 + -2.1791411348409262e-01 1.3890709685947604e+00 1.0431432622720109e+00 + -2.7845105551018762e-01 1.7698867236570464e+00 1.3195959264204213e+00 + -3.9628138166121896e-01 2.1595025078666019e+00 1.6185090374907698e+00 + -5.9661453637814688e-01 2.5320995300287614e+00 1.9472607700476074e+00 + -8.8917964984955000e-01 2.8552342376686575e+00 2.2965867897208665e+00 + -1.2686807003390812e+00 3.0998254061007695e+00 2.6511331737432222e+00 + -1.7161655833019946e+00 3.2366803774477848e+00 3.0036865632761871e+00 + -2.2043249225108790e+00 3.2342953107565866e+00 3.3537078095720196e+00 + -2.6959083332765204e+00 3.0634067156808769e+00 3.6912902892086783e+00 + -3.1277956382541170e+00 2.7358152336115493e+00 3.9819127565677768e+00 + -3.4439566815598823e+00 2.3559155018182718e+00 4.1908075120864261e+00 + -3.6548406115705410e+00 2.0329626893870638e+00 4.3237995355825438e+00 + -3.7969209122608136e+00 1.7842533021673184e+00 4.4124251204486811e+00 + -3.8964402656015720e+00 1.5747352231461713e+00 4.4924718876974783e+00 + -3.9793298972547566e+00 1.3648781582207068e+00 4.5934546269059000e+00 + -4.0811340579593365e+00 1.1043231687644304e+00 4.7212252239755053e+00 + id 14795 + loc 5.3220200538635254e-01 5.6874465942382813e-01 404 + blend 0.0000000000000000e+00 + interp 4.0672517729283481e-01:2.7241040129234395e-01:9.5027768009492219e-01:4.0672111004106187e-01:1.6654876665412122e+00:4.0099708948152996e-01:2.0103511371441263e+00:2.8428213980785655e-01:2.4813736468919521e+00:3.0099902883149715e-01:3.0798488246261124e+00:2.8612310392942980e-01:3.9986040794527682e+00 + CVs 20 + -4.4331826336269649e-02 3.6808252471639227e-02 -3.0791451062854826e-02 + -5.5805823520839300e-02 9.7573850911552074e-02 -5.7127406532981359e-02 + -6.4955953966921345e-02 1.7537163833637195e-01 -7.5258124752335898e-02 + -7.6774853175460830e-02 2.5443156192114569e-01 -7.9039367316649456e-02 + -8.8762855660402068e-02 3.3292321573180134e-01 -6.6393778188389568e-02 + -9.9695876848890030e-02 4.0862907963342532e-01 -3.6138276371478449e-02 + -1.0950666307977025e-01 4.7864470437990730e-01 1.2567547708637300e-02 + -1.1898607745289050e-01 5.3803400089899234e-01 8.1711388632827467e-02 + -1.2866184336523373e-01 5.7885042604620895e-01 1.7229559905905623e-01 + -1.3753480601050919e-01 5.9692774229164292e-01 2.8063629347641667e-01 + -1.4237051250074709e-01 5.9511723482771495e-01 4.0306086917483358e-01 + -1.3961371969087352e-01 5.7860192372075248e-01 5.3875297326000915e-01 + -1.2890440701198416e-01 5.5033886659438269e-01 6.8776338580634611e-01 + -1.1415561908641769e-01 5.0628591140117873e-01 8.4839841912704950e-01 + -9.6831937797118614e-02 4.4474221034306072e-01 1.0196916731128576e+00 + -7.0479018731348472e-02 3.6964059576722391e-01 1.2028374601659797e+00 + -2.7277963589844606e-02 2.8374973798799463e-01 1.3975141559737301e+00 + 3.0509562508858251e-02 1.8427815757670457e-01 1.5987389803756256e+00 + 1.7109960033104998e-02 9.0825058174397455e-02 1.8115127697471032e+00 + id 14796 + loc 7.8183934092521667e-02 3.4680840373039246e-01 405 + blend 0.0000000000000000e+00 + interp 4.7869714032246580e-01:3.8067422390757411e-01:1.3936147094550599e-02:3.5033836154511511e-01:5.8929298536506436e-01:3.0308349954634639e-01:1.0187711066043648e+00:3.3111454774379190e-01:1.6524317951641252e+00:4.7869235335106258e-01:2.1482575186283479e+00:4.4707739908631872e-01:3.0070667176676205e+00:2.8212527917981250e-01:3.5333652312769344e+00 + CVs 20 + 1.1690898727211263e-01 1.6154033276635452e-01 -1.9760857639429705e-01 + 2.3258210322394648e-01 3.0596464207543977e-01 -3.2362902385041975e-01 + 3.5305832076993032e-01 3.8503559033467594e-01 -4.3754004096933174e-01 + 4.8970958647540602e-01 4.3758364010905876e-01 -5.5894750768639700e-01 + 6.4082070553353876e-01 4.5905008685482368e-01 -6.8133732643430045e-01 + 8.0375315403178360e-01 4.4297304787470965e-01 -7.9695068726165519e-01 + 9.7461218988850629e-01 3.8486071798818322e-01 -8.9764047280828796e-01 + 1.1471195643972962e+00 2.8364084151437169e-01 -9.7757703150746600e-01 + 1.3131288412380246e+00 1.4355628244237623e-01 -1.0361931127651340e+00 + 1.4660269540646853e+00 -2.4419381853426736e-02 -1.0803404171932027e+00 + 1.6043063524568197e+00 -2.0583546578867151e-01 -1.1226668213180258e+00 + 1.7308848914735913e+00 -3.8799068205940945e-01 -1.1762431643335418e+00 + 1.8484464788495105e+00 -5.6128739674184747e-01 -1.2504646977681917e+00 + 1.9565681206993841e+00 -7.1906729496767685e-01 -1.3478636638933408e+00 + 2.0529436322763757e+00 -8.5643099614729312e-01 -1.4619909108866032e+00 + 2.1352358497801034e+00 -9.6804299198179855e-01 -1.5824078803810702e+00 + 2.1994907161085342e+00 -1.0471411386743767e+00 -1.7032484970910944e+00 + 2.2426740042006856e+00 -1.0870434044586395e+00 -1.8220300575757524e+00 + 2.3546132644902951e+00 -1.0678546534289923e+00 -1.8967575016319276e+00 + id 14797 + loc 7.6609176397323608e-01 3.5180726647377014e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2470039271535174e-01:5.2469514571142462e-01:5.6937993348750726e-01:2.5621723440129485e-01:1.0845146646543347e+00:3.1565258594815487e-01:1.9908925598083664e+00:2.8975431661181644e-01:2.4569981488397659e+00:2.6881958264449213e-01:3.0160411048161357e+00:2.7724608696407921e-01:3.9536949410080435e+00 + CVs 20 + -8.0296274464127307e-02 3.5847414156515889e-01 -6.5235939549077443e-02 + -1.6532714454800509e-01 7.0268767415368560e-01 -6.0105606062568179e-02 + -2.6758957128772781e-01 1.0347608785363485e+00 -1.1440641174947197e-02 + -3.9442670534845986e-01 1.3428086164568871e+00 7.2063800302597514e-02 + -5.4695403886169924e-01 1.6037213407329474e+00 1.9608737348846605e-01 + -7.1937387417291054e-01 1.7910710881491829e+00 3.5859438322445902e-01 + -8.9973903287142731e-01 1.8862528472403119e+00 5.4784346668627903e-01 + -1.0758473399211157e+00 1.8877004733221396e+00 7.4670721560335906e-01 + -1.2374482172448502e+00 1.8060012432770065e+00 9.4026388449838916e-01 + -1.3737055674707657e+00 1.6574009027012173e+00 1.1210451465489404e+00 + -1.4705449560709027e+00 1.4609326306619681e+00 1.2866544670004467e+00 + -1.5098254961781719e+00 1.2397193117221907e+00 1.4318315968797330e+00 + -1.4728792788418614e+00 1.0261875368968316e+00 1.5465714088635254e+00 + -1.3491322339654654e+00 8.6791655135847823e-01 1.6177887634995669e+00 + -1.1531661570227498e+00 8.3484052153654731e-01 1.6230265366728662e+00 + -9.6456058829215985e-01 9.7101275489185834e-01 1.5523440931591861e+00 + -8.6544571087440936e-01 1.2001700158976973e+00 1.4466087867472395e+00 + -8.4007586806781498e-01 1.4224401641404472e+00 1.3419231235523283e+00 + -5.5847099705830050e-01 1.4773068290283862e+00 1.4179731637459732e+00 + id 14798 + loc 4.1371202468872070e-01 4.6068355441093445e-01 394 + blend 0.0000000000000000e+00 + interp 4.1892416914386066e-01:4.1891997990216923e-01:6.6128167365841928e-02:3.5065444304245674e-01:1.0005750983765169e+00:3.1781948195208565e-01:1.6545724650211939e+00:2.6052383043183286e-01:2.5497943382321537e+00:3.7183861704152071e-01:3.2278603231879686e+00:3.2857021337510156e-01:3.8679029090233890e+00 + CVs 20 + -2.2100145346518951e-01 1.6938690523617894e-01 2.4659089391632122e-01 + -4.3003986878827982e-01 3.3580267618505932e-01 4.6671688160692332e-01 + -6.3578023617296975e-01 5.1835385824050439e-01 6.8436742123571392e-01 + -8.3769789365241376e-01 7.2660939044797068e-01 9.0743362501618074e-01 + -1.0329446314409316e+00 9.5595935270399268e-01 1.1300099032188364e+00 + -1.2237884782995860e+00 1.1933784151111231e+00 1.3506105789812592e+00 + -1.4207489671630693e+00 1.4218964509110705e+00 1.5780270418337070e+00 + -1.6313577323280282e+00 1.6257244501014332e+00 1.8241730538847709e+00 + -1.8484499808506343e+00 1.7907795792381664e+00 2.0949931216802313e+00 + -2.0609873761414033e+00 1.8996273287699335e+00 2.3880698760083741e+00 + -2.2664778044123173e+00 1.9292142577267706e+00 2.6945767860010261e+00 + -2.4592202453010543e+00 1.8578991542597914e+00 3.0009894561971953e+00 + -2.6201254220707515e+00 1.6763809211015595e+00 3.2930046157602852e+00 + -2.7340010166686617e+00 1.3908306949166422e+00 3.5652786383015602e+00 + -2.7945879871687289e+00 1.0294981006412494e+00 3.8257560752046746e+00 + -2.7900214918509185e+00 6.6672538273735871e-01 4.1021362954829499e+00 + -2.7120022842752354e+00 4.0313133931680145e-01 4.4279693312403205e+00 + -2.5908657513817892e+00 2.3237689300453734e-01 4.7996621487665889e+00 + -2.5620312336963567e+00 -1.3238472331690376e-01 5.2345460555786865e+00 + id 14799 + loc 2.0520624518394470e-01 7.8510373830795288e-01 404 + blend 0.0000000000000000e+00 + interp 3.2411542953593148e-01:2.6705231737116175e-01:2.2947040737750446e-02:3.1129920599618577e-01:8.0293109918955086e-01:3.2411218838163613e-01:1.7111349098426725e+00:2.9346919169745544e-01:2.7381350774191349e+00:2.6522755343430837e-01:3.3473239261420136e+00 + CVs 20 + -3.9222330247062752e-02 -1.3514604853527509e-02 3.4493391704494905e-02 + -7.3302909251055204e-02 -2.2021986013680134e-02 7.8326317116663477e-02 + -9.9396571610094214e-02 -2.6217624424048874e-02 1.3213993862524170e-01 + -1.1718768521745500e-01 -2.3595030330459343e-02 1.9493939030098412e-01 + -1.2426700003947756e-01 -1.1751857579580957e-02 2.6537028635163235e-01 + -1.1831649082519591e-01 1.1039131681455469e-02 3.4034216624412211e-01 + -9.7660132059741375e-02 4.5739276047359556e-02 4.1563959964792502e-01 + -6.1831145350616179e-02 9.1809810629894628e-02 4.8580628326803160e-01 + -1.2028041394849108e-02 1.4660107098528813e-01 5.4500986703843501e-01 + 4.9102345675698864e-02 2.0581473331541211e-01 5.8871516898507292e-01 + 1.1835593270018299e-01 2.6493028544796932e-01 6.1479432300273684e-01 + 1.9210093138692302e-01 3.1891375087079255e-01 6.2303072686002081e-01 + 2.6618444326719326e-01 3.6185887832176716e-01 6.1506291485939524e-01 + 3.3615874037874943e-01 3.8828695750450759e-01 5.9450706611279225e-01 + 3.9824074786037944e-01 3.9499488238672664e-01 5.6610133999419388e-01 + 4.5143835035560997e-01 3.8225821985874203e-01 5.3365621844459921e-01 + 4.9894785579622858e-01 3.5335435130729420e-01 4.9816149412704630e-01 + 5.4412103741476125e-01 3.1327712366577698e-01 4.5964431405722717e-01 + 5.6895543570804130e-01 2.5531271798603977e-01 4.1753163508503044e-01 + id 14800 + loc 7.6672548055648804e-01 8.4815835952758789e-01 405 + blend 0.0000000000000000e+00 + interp 4.6640684566995033e-01:3.1865705496598912e-01:4.8531501225117957e-02:3.8830891811002366e-01:7.0834379299261552e-01:3.6416737814995126e-01:1.4069379728382090e+00:2.6973053944625897e-01:1.9979894253781716e+00:4.6640218160149366e-01:2.5429949992066323e+00:3.7583412773411096e-01:2.9999077918236301e+00:3.3795485915081297e-01:3.6082032514990026e+00 + CVs 20 + 2.2343845624695508e-01 3.2602477059113200e-01 -7.2559924748791832e-02 + 3.0449732001829699e-01 5.4609606472379335e-01 -1.3338675568441974e-01 + 3.4911622393158859e-01 7.1942452685048330e-01 -1.8181403021657258e-01 + 4.0258715856498872e-01 8.8671451915818178e-01 -2.1695029519312464e-01 + 4.6284261547455852e-01 1.0446519537597383e+00 -2.2967901337051089e-01 + 5.2955085776560673e-01 1.1866469393453207e+00 -2.0625313210101226e-01 + 6.0285141425764077e-01 1.2948176829614837e+00 -1.2875445201320332e-01 + 6.7631970971731636e-01 1.3343247618683918e+00 3.6614604655938743e-03 + 7.3768656259067145e-01 1.2962109407954556e+00 1.4827415633281127e-01 + 7.9003688144424056e-01 1.2199030421479922e+00 2.7776815491735979e-01 + 8.4288160189247840e-01 1.1259621291027999e+00 4.0455221370191968e-01 + 8.9843404575805597e-01 1.0104514096775010e+00 5.4025864823660563e-01 + 9.5741088052526313e-01 8.7057543063941978e-01 6.8769841004690702e-01 + 1.0289270441509812e+00 7.1799011208709895e-01 8.5077003732633238e-01 + 1.1308472260993634e+00 5.7476812716768722e-01 1.0369956716554929e+00 + 1.2764805853522860e+00 4.5883962423086866e-01 1.2444781355060923e+00 + 1.4661627618177793e+00 3.7627871270374014e-01 1.4600745989058017e+00 + 1.6878431197332588e+00 3.2686605499778021e-01 1.6762637592174512e+00 + 1.8541706788601027e+00 2.0766757192916446e-01 1.9014245896210764e+00 + id 14801 + loc 5.5840700864791870e-01 6.5149359405040741e-02 1079 + blend 0.0000000000000000e+00 + interp 3.7611298265713766e-01:2.8016819682161670e-01:5.9876448284318107e-01:2.5749240006953145e-01:1.0993111336655419e+00:1.9242977590604010e-01:1.9937846871104905e+00:2.6881364311533701e-01:2.9950592716136279e+00:3.7610922152731113e-01:3.8795757649493199e+00 + CVs 20 + 1.2136309042713662e-01 5.0490690825138973e-01 -2.7663103239748810e-01 + 2.0117958656016918e-01 9.9304075962642291e-01 -4.3822635704509805e-01 + 2.4990983706137176e-01 1.4704129577130951e+00 -5.4265758832255429e-01 + 2.5376024299183764e-01 1.9610703532583695e+00 -5.9169787062904367e-01 + 1.8584152457006509e-01 2.4579340027871437e+00 -5.5783830181445671e-01 + 9.7916815938069446e-03 2.9344500707235399e+00 -4.0413424952559518e-01 + -3.0408913608151777e-01 3.3199019328706338e+00 -1.0637799592078023e-01 + -7.3866655677828652e-01 3.5167394133638235e+00 3.0077950983267043e-01 + -1.2181959016573287e+00 3.4832613492072300e+00 7.3168160077181732e-01 + -1.6573065198009735e+00 3.2695810824805687e+00 1.1256766519622325e+00 + -2.0158642888548521e+00 2.9438708533831188e+00 1.4817270398478315e+00 + -2.2834567269859973e+00 2.5331180149478394e+00 1.8186546462692910e+00 + -2.4379107129001851e+00 2.0421060001426037e+00 2.1496368972170927e+00 + -2.4279952006017904e+00 1.4851537680392843e+00 2.4818802076605864e+00 + -2.1753771599973262e+00 9.1012488065950481e-01 2.8076679090182886e+00 + -1.6706856962389165e+00 4.8080839553272603e-01 3.0998200974322820e+00 + -1.0986388451882221e+00 3.9892664421121871e-01 3.3663472964916332e+00 + -7.0857164245999760e-01 6.5950036306051474e-01 3.6135348489688255e+00 + -5.1616069698443878e-01 5.9708534332606233e-01 3.8025258933051909e+00 + id 14802 + loc 7.6752883195877075e-01 7.9756683111190796e-01 394 + blend 0.0000000000000000e+00 + interp 4.1828916178261882e-01:3.6208189187194634e-01:6.8006056489820044e-01:3.0459138413988518e-01:1.1985087539402408e+00:3.3520636356061406e-01:2.3047099963926447e+00:3.7567709367769536e-01:2.9168157818666245e+00:4.1828497889100102e-01:3.1126068007186349e+00:2.5124053249032757e-01:3.8377156330683500e+00 + CVs 20 + -1.8364588925507691e-01 1.9187956181147475e-01 -2.9848521527999661e-01 + -3.6857849225378103e-01 3.7282289952415093e-01 -5.9706971199927672e-01 + -5.4557611991091781e-01 5.4903080720344066e-01 -9.0481434602808242e-01 + -7.1038647758037299e-01 7.2326382825303037e-01 -1.2263484592125284e+00 + -8.6327720999856128e-01 8.9667017183471742e-01 -1.5618887119663158e+00 + -1.0099449791355719e+00 1.0723827508869750e+00 -1.9104555778796208e+00 + -1.1557283802064555e+00 1.2469792714756687e+00 -2.2703986108558163e+00 + -1.3016699543584074e+00 1.4027013107508250e+00 -2.6442149186309205e+00 + -1.4512408371567154e+00 1.5146416054489398e+00 -3.0384031005347167e+00 + -1.6182500195239464e+00 1.5654768411623032e+00 -3.4526084563303066e+00 + -1.8169252692300053e+00 1.5491055037830908e+00 -3.8749081392301594e+00 + -2.0480495949045769e+00 1.4693392461056636e+00 -4.2895850322735161e+00 + -2.3110354357732117e+00 1.3366226622919943e+00 -4.6859144689334817e+00 + -2.6206631868005315e+00 1.1567619964846276e+00 -5.0517400886058539e+00 + -2.9947789078572100e+00 9.2949509750833359e-01 -5.3624893262351438e+00 + -3.4255125508804003e+00 6.4325304889083945e-01 -5.5884808738920206e+00 + -3.8776675424705118e+00 2.7293869544033589e-01 -5.7075876408275992e+00 + -4.3151476880858537e+00 -1.6082443735468122e-01 -5.7136295474218235e+00 + -4.7147625069325994e+00 -3.9775566090332770e-01 -5.7865027079671778e+00 + id 14803 + loc 5.6500207632780075e-02 8.3033263683319092e-01 404 + blend 0.0000000000000000e+00 + interp 4.9371279804270113e-01:4.5903376194951334e-01:6.2139511980947448e-01:3.4135321060407703e-01:1.4142585257409337e+00:4.9370786091472074e-01:2.0979828044121764e+00:2.9051391334452403e-01:2.7726518315456197e+00:3.1443170870619813e-01:3.7589538195646526e+00 + CVs 20 + -2.3390118391849766e-02 -7.3561573473896868e-03 3.1437367069282171e-02 + -5.5644605396660447e-02 -2.0616134643173724e-02 7.1535540845302323e-02 + -9.6379854832104317e-02 -3.7427277798593006e-02 1.1742424146944178e-01 + -1.4507403163537766e-01 -5.7110583537412343e-02 1.7363593411798503e-01 + -2.0091248909674514e-01 -7.7773286724329288e-02 2.4491657450295989e-01 + -2.6244726698974208e-01 -9.6855619556979133e-02 3.3349005770301776e-01 + -3.2745309932804012e-01 -1.1135763021350614e-01 4.4082703644733939e-01 + -3.9280734983543819e-01 -1.1808116149465220e-01 5.6757028646952534e-01 + -4.5452256929035384e-01 -1.1398976268002775e-01 7.1322254640903271e-01 + -5.0790320384156040e-01 -9.6491296124511960e-02 8.7597496094086336e-01 + -5.4781700018486656e-01 -6.3749700300191670e-02 1.0526112652300388e+00 + -5.6899610365464381e-01 -1.4927178198706259e-02 1.2385964091181649e+00 + -5.6624985627525426e-01 4.9833739303532298e-02 1.4284202649817828e+00 + -5.3506507799395542e-01 1.2886544420679008e-01 1.6155090496437097e+00 + -4.7332628729802728e-01 2.1753595970280537e-01 1.7917805124788586e+00 + -3.8164946207607697e-01 3.0908993624882192e-01 1.9489836292337281e+00 + -2.6339677652804450e-01 3.9558535454227728e-01 2.0798357123112932e+00 + -1.2441854271868920e-01 4.6905064265920882e-01 2.1788260970083382e+00 + -7.1022884422999283e-02 4.6391768220457286e-01 2.2259725942268265e+00 + id 14804 + loc 1.2533345818519592e-01 5.8513748645782471e-01 405 + blend 0.0000000000000000e+00 + interp 4.2813994257609311e-01:4.2813566117666735e-01:7.4146730968939201e-02:4.1556086231407624e-01:7.9472075425704158e-01:3.7853806625944736e-01:1.1318730916916451e+00:2.6563651444107073e-01:1.9145724602696725e+00:4.1028250041954017e-01:2.1753173232058653e+00:3.9329061303882623e-01:3.0563206982888120e+00:2.7846856280730015e-01:3.7994931785449704e+00 + CVs 20 + 1.0192550364473130e-01 2.1871283722546686e-01 7.1668949232089135e-02 + 1.0195475272782142e-01 3.9140987474446987e-01 1.1706086862799701e-01 + 7.4250181804261350e-02 5.4482510482087232e-01 1.6974181747282960e-01 + 4.6400574825134544e-02 6.9690300164020835e-01 2.4963857199158454e-01 + 1.6146071006537699e-02 8.4226844488763031e-01 3.6187063043427009e-01 + -1.6697333074500831e-02 9.7512013116038854e-01 5.0842073552469613e-01 + -5.0230155068946791e-02 1.0911439195512711e+00 6.8794563147899657e-01 + -8.0984034153610829e-02 1.1886106007801216e+00 8.9696470474482248e-01 + -1.0482286555102771e-01 1.2681879390358062e+00 1.1309312484847009e+00 + -1.1782924856196908e-01 1.3324027982169724e+00 1.3847210674223656e+00 + -1.1723251107345556e-01 1.3845502111233594e+00 1.6535653215238264e+00 + -1.0199496635254390e-01 1.4262905825045158e+00 1.9333704045040030e+00 + -7.2045919892306132e-02 1.4598977991193074e+00 2.2163610040223425e+00 + -2.7864854231902103e-02 1.4953697974086335e+00 2.4823896323066816e+00 + 2.6501033119327944e-02 1.5482732624617752e+00 2.7029850496593113e+00 + 8.2066508542731897e-02 1.6223637692629609e+00 2.8634438326779401e+00 + 1.2994326337240958e-01 1.7063421226781312e+00 2.9707814604358673e+00 + 1.6543538364023913e-01 1.7867022636958727e+00 3.0402631450412292e+00 + 2.3760729643248235e-01 1.8534670149600228e+00 3.1746193827894893e+00 + id 14805 + loc 4.9359464645385742e-01 7.5641119480133057e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0588966996248530e-01:3.0904425108684619e-01:2.3570367178989826e-01:4.5080899917244638e-01:9.8134419362161840e-01:2.7128721250160448e-01:1.7723730308110475e+00:2.8337009322470119e-01:2.9880252201290514e+00:5.0588461106578575e-01:3.6332158119373603e+00 + CVs 20 + 9.6474735936121242e-02 3.7562227132848214e-01 4.3996588624867272e-02 + 2.0333307877517365e-01 6.9444412135682898e-01 2.8614905641301869e-02 + 3.0661583275441762e-01 9.7416849704786324e-01 -2.4152351896933433e-02 + 3.9664370907349933e-01 1.2185300258053311e+00 -1.0027838102479647e-01 + 4.6830936155070335e-01 1.4230415173777315e+00 -1.9106520334585586e-01 + 5.1397571661612662e-01 1.5838427957649297e+00 -2.8207547325825977e-01 + 5.3033758595282332e-01 1.7077952034166000e+00 -3.5953162707140562e-01 + 5.2418879153043330e-01 1.8131839812489159e+00 -4.2140186233777510e-01 + 5.0591350258774548e-01 1.9166373553622669e+00 -4.7613798082569581e-01 + 4.8339864783205733e-01 2.0265838757466836e+00 -5.3725930496509067e-01 + 4.6101648811956819e-01 2.1416280483920991e+00 -6.2041443242719840e-01 + 4.3937902689669345e-01 2.2524247041384569e+00 -7.3791315009991743e-01 + 4.1556108754998439e-01 2.3446633980708445e+00 -8.9762957919885211e-01 + 3.8392756179649973e-01 2.4020516819036377e+00 -1.1037583587984783e+00 + 3.3966262110158774e-01 2.4121467243565977e+00 -1.3584223040671062e+00 + 2.8841150940278665e-01 2.3835185424866001e+00 -1.6742780547276908e+00 + 2.4858025918495852e-01 2.3206306810415391e+00 -2.1000049519805848e+00 + 2.2012400976206348e-01 2.1149793702600141e+00 -2.5834726489923927e+00 + 1.1659671713669559e-01 1.8474876397802926e+00 -2.5340831970599371e+00 + id 14806 + loc 6.8952262401580811e-01 2.3983910679817200e-01 394 + blend 0.0000000000000000e+00 + interp 3.6283289242038080e-01:3.6282926409145660e-01:6.1401828213951348e-01:2.4352447394567348e-01:1.2046761761608895e+00:2.5880604468045137e-01:2.0345819411058583e+00:3.5764180277304175e-01:2.7228659610801351e+00:2.4536820682195276e-01:3.0790372889132134e+00:3.5268357516547122e-01:3.8448893141410383e+00 + CVs 20 + 2.3577405635711818e-01 2.8447823935297256e-01 2.4450183158818184e-01 + 5.0962095899741411e-01 5.5768547041909144e-01 4.4436147787223829e-01 + 7.9255854255134728e-01 8.3293588272923824e-01 6.3972505094096965e-01 + 1.0673942753989594e+00 1.1163674480133026e+00 8.5012916889016577e-01 + 1.3260605918477628e+00 1.4032125495042198e+00 1.0870929843558561e+00 + 1.5658070524988015e+00 1.6762507267033164e+00 1.3586033613869284e+00 + 1.7871324980411214e+00 1.9171369277046773e+00 1.6682429822628424e+00 + 1.9876200862893076e+00 2.1123585828592990e+00 2.0127828986613285e+00 + 2.1637576375231125e+00 2.2529558479919896e+00 2.3801356184036475e+00 + 2.3156068207314524e+00 2.3354970817553222e+00 2.7532166642864562e+00 + 2.4473820352128319e+00 2.3617714848541471e+00 3.1205480736722713e+00 + 2.5647143555074319e+00 2.3339202814150397e+00 3.4815806787815275e+00 + 2.6707338142800561e+00 2.2515287741513590e+00 3.8361526200335296e+00 + 2.7595891039933100e+00 2.1221172562756432e+00 4.1660310326651464e+00 + 2.8197000810154069e+00 1.9720839513543744e+00 4.4410823042786483e+00 + 2.8451475814619105e+00 1.8287198744646915e+00 4.6526882359431720e+00 + 2.8275322085545995e+00 1.7031022140908867e+00 4.8232571279293017e+00 + 2.7728258280972793e+00 1.5881101968420084e+00 4.9947484034214824e+00 + 2.8999347952600614e+00 1.4938256174599585e+00 5.2073690774787895e+00 + id 14807 + loc 2.1927776932716370e-01 5.6161892414093018e-01 404 + blend 0.0000000000000000e+00 + interp 4.1234012264128744e-01:2.8942617724721736e-01:3.3782165726156033e-01:4.1233599924006104e-01:9.9547966859096282e-01:2.9085798847292160e-01:1.6673489721532255e+00:3.1470797785461913e-01:2.5688188357692932e+00:3.4270144139281739e-01:3.3005535544474220e+00 + CVs 20 + 4.0126033362829119e-02 1.0642441830584884e-01 -2.6173012238539153e-02 + 6.1716439520719452e-02 1.8207821618349737e-01 -4.6459449680576845e-02 + 7.5207131989886433e-02 2.4030607532802509e-01 -6.7369151294230226e-02 + 9.4097266815388811e-02 2.8555684969216250e-01 -9.5177735139576725e-02 + 1.2047470084349379e-01 3.1479805077911632e-01 -1.2645583455326093e-01 + 1.5679371661944974e-01 3.2681572683538640e-01 -1.5674431632176344e-01 + 2.0673030838198786e-01 3.2234006227016038e-01 -1.8232637052701156e-01 + 2.7485682588387994e-01 3.0386381440571536e-01 -2.0203618746325436e-01 + 3.6587005615722312e-01 2.7550230072887272e-01 -2.1772877012028757e-01 + 4.8315887941101693e-01 2.4238566871235176e-01 -2.3459162557540406e-01 + 6.2604580401516163e-01 2.0886732807923303e-01 -2.6145766625639766e-01 + 7.8865714669170583e-01 1.7712058820634441e-01 -3.0837888347561426e-01 + 9.6545083906021101e-01 1.4859245695596479e-01 -3.8378334822952065e-01 + 1.1504489937732267e+00 1.2488519337404580e-01 -4.9533236619768817e-01 + 1.3357357667368950e+00 1.0672252854109954e-01 -6.5099451885096860e-01 + 1.5095234824930308e+00 9.1911630588180304e-02 -8.5942475634054483e-01 + 1.6561671419679094e+00 7.7386902149163328e-02 -1.1277962407373909e+00 + 1.7589517200716789e+00 6.6642093058726370e-02 -1.4568603562181035e+00 + 1.7806807147142747e+00 3.2101825540200135e-02 -1.5854028716232424e+00 + id 14808 + loc 3.9580065011978149e-01 2.0715801045298576e-02 1079 + blend 0.0000000000000000e+00 + interp 2.9531744703303925e-01:5.0063859191231866e-02:6.6304577602135373e-01:2.5978336815943925e-01:2.0855302334811383e+00:2.9531449385856895e-01:2.9736098572434262e+00:2.7608953769691591e-01:3.7637265952357892e+00 + CVs 20 + 3.0279811370944548e-01 4.6491649367618970e-01 -2.5369909983402578e-02 + 4.7697864588590427e-01 8.7237861407212614e-01 -8.2769264129659847e-02 + 5.9293064448926069e-01 1.2478819679815343e+00 -1.5194195264573740e-01 + 6.7332915794655968e-01 1.6038226961391735e+00 -2.2990340343038707e-01 + 7.0815646216799044e-01 1.9263290819441841e+00 -3.2395200688914261e-01 + 6.8729020733738722e-01 2.1959765507257067e+00 -4.4082252071432471e-01 + 6.0874650017227627e-01 2.3854381183712103e+00 -5.8109100853170814e-01 + 4.9375909727124245e-01 2.4732413637228943e+00 -7.3038564833024799e-01 + 3.7548409673617023e-01 2.4735517595953791e+00 -8.6808754300742152e-01 + 2.6207504096452572e-01 2.4235060301467088e+00 -9.9141838025452134e-01 + 1.4356649947900468e-01 2.3408272560301175e+00 -1.1079081698076001e+00 + 1.7430955907075441e-02 2.2287150442711998e+00 -1.2175715477928430e+00 + -1.1292631843852985e-01 2.0904903323831294e+00 -1.3164413928830501e+00 + -2.4440022904010883e-01 1.9286155607203550e+00 -1.4025468782342916e+00 + -3.7589014260574127e-01 1.7409319485041408e+00 -1.4762939509205386e+00 + -5.0525196964896257e-01 1.5195856363538527e+00 -1.5305172948573684e+00 + -6.1980956125967868e-01 1.2565713990331475e+00 -1.5380149667949057e+00 + -7.0485068946523532e-01 9.5598829099380167e-01 -1.4660434022357141e+00 + -7.6664133174071170e-01 8.8510248922716317e-01 -1.3316303382563797e+00 + id 14809 + loc 3.6120706796646118e-01 5.8773440122604370e-01 405 + blend 0.0000000000000000e+00 + interp 4.6569839704878063e-01:3.9039007284249960e-01:9.2126135187945912e-01:3.5766889120259504e-01:1.6261553534233784e+00:4.0248901120694547e-01:2.1452061227637818e+00:4.6569374006481018e-01:2.9142257755500744e+00:3.6888692946014850e-01:3.3594308103093806e+00:2.8100146033704626e-01:3.9983048103803176e+00 + CVs 20 + 9.9397400114335288e-02 2.3286469018620110e-01 1.2544886676942278e-03 + 9.3220227973486142e-02 4.0624136690619361e-01 3.5777628755523719e-04 + 5.5035368231060700e-02 5.4730168762539200e-01 9.7280493735796836e-03 + 1.0065890441343872e-02 6.7992096603413832e-01 3.7980283113678348e-02 + -4.3882074270605032e-02 8.0107003797890408e-01 8.8223850332698750e-02 + -1.0769368969238596e-01 9.0686522044941342e-01 1.6161716037401014e-01 + -1.8148317241866413e-01 9.9420013756158432e-01 2.5655454642911557e-01 + -2.6566455872891437e-01 1.0624289033297905e+00 3.7015260627803703e-01 + -3.6146972585151671e-01 1.1130406368562860e+00 5.0056538335939826e-01 + -4.7049791201435748e-01 1.1483254527314510e+00 6.4762588716224334e-01 + -5.9378982577370887e-01 1.1707415552460021e+00 8.1177746098656978e-01 + -7.3110119138220742e-01 1.1831376089502337e+00 9.9246821197138002e-01 + -8.8096758959352905e-01 1.1886482350373822e+00 1.1879376819406249e+00 + -1.0412984060314543e+00 1.1884916369933840e+00 1.3970734934780704e+00 + -1.2089326678623042e+00 1.1811843891736840e+00 1.6201090053289624e+00 + -1.3775744807332324e+00 1.1678431416985893e+00 1.8586880876822836e+00 + -1.5375134185421571e+00 1.1566432715618515e+00 2.1146366277783413e+00 + -1.6797499363515680e+00 1.1590891543804871e+00 2.3816009733997308e+00 + -1.7952198779215045e+00 1.2438369678953558e+00 2.5358811754453394e+00 + id 14810 + loc 1.3278341293334961e-01 2.6514989137649536e-01 394 + blend 0.0000000000000000e+00 + interp 5.4056867390083985e-01:3.2429223521679412e-01:1.7832469288447950e-04:5.0329922806836702e-01:3.7879024308636600e-01:5.4056326821410083e-01:9.2103590779441014e-01:4.4842044467955394e-01:1.0513670784735689e+00:3.0344745853412453e-01:1.6001534182101254e+00:2.7251213456673373e-01:2.5475720074653054e+00:3.1043004496818871e-01:3.3873917752838762e+00 + CVs 20 + -1.2261485583005854e-01 1.7618355197718949e-01 1.6521109711126064e-01 + -2.6099666783023506e-01 3.6254436888678415e-01 3.6765732428532366e-01 + -4.0457508330960107e-01 5.4114939993169342e-01 5.7928652620063636e-01 + -5.4811554390972905e-01 7.0407820062018067e-01 7.8685854195614113e-01 + -6.8922704771656829e-01 8.4687783612214329e-01 9.8286970635103210e-01 + -8.2117564184227443e-01 9.6333355934887988e-01 1.1570405711386198e+00 + -9.3822605266669656e-01 1.0523627899748178e+00 1.3069318585773591e+00 + -1.0351899718489466e+00 1.1199948446222339e+00 1.4352185625463882e+00 + -1.1024712778689358e+00 1.1781380029630666e+00 1.5398700766958098e+00 + -1.1277042423069767e+00 1.2472149513374675e+00 1.6120570996804817e+00 + -1.1012198057991494e+00 1.3628468109614795e+00 1.6437512271517847e+00 + -1.0388935675644919e+00 1.5729694482676186e+00 1.6440526722423936e+00 + -1.0215512071898862e+00 1.8565289019400613e+00 1.6554371912445807e+00 + -1.1116199635958339e+00 2.0313073487286144e+00 1.7156158623756914e+00 + -1.2598417710074963e+00 1.9613169136854629e+00 1.8131388868953793e+00 + -1.4332247972090972e+00 1.7071098794550403e+00 1.9182932116891305e+00 + -1.6455759806538832e+00 1.4040272353816110e+00 1.9914419813534239e+00 + -1.8811101066488902e+00 1.1669013416827561e+00 2.0518579574231577e+00 + -2.0218813001617448e+00 1.1778569099915401e+00 2.2905992065803362e+00 + id 14811 + loc 6.5341168642044067e-01 8.0130827426910400e-01 1079 + blend 0.0000000000000000e+00 + interp 3.4840314728388816e-01:3.0028959251688331e-01:8.1813698216394826e-01:3.4839966325241534e-01:1.7924320062314523e+00:2.8858391498132641e-01:2.2177274240785381e+00:2.7458023055626213e-01:3.0005570792411063e+00:2.7169450686339314e-01:3.9917024663061182e+00 + CVs 20 + 1.1209061072220619e-01 3.4843665243562694e-01 -1.0795979599113464e-02 + 2.4972628950734765e-01 6.7411186962735758e-01 -4.6470676352833001e-02 + 4.0730936478979207e-01 9.8134632532945298e-01 -1.0626607630964485e-01 + 5.8329709354863113e-01 1.2667901575224838e+00 -1.9059478937775676e-01 + 7.7815444158591152e-01 1.5205772240565771e+00 -3.0273028188507584e-01 + 9.8843069142142159e-01 1.7277212046110051e+00 -4.4739204580046582e-01 + 1.2077069275895469e+00 1.8738270817304035e+00 -6.2760756968669740e-01 + 1.4291243132655438e+00 1.9522236932709469e+00 -8.4039000641154882e-01 + 1.6459200348831553e+00 1.9614956318006156e+00 -1.0768570661702894e+00 + 1.8520166590313418e+00 1.9023557038887831e+00 -1.3241238316967401e+00 + 2.0436452568571091e+00 1.7781346565514016e+00 -1.5678837621586585e+00 + 2.2194593824044722e+00 1.5948845250311996e+00 -1.7935498794030484e+00 + 2.3807762889772692e+00 1.3618696165659019e+00 -1.9861874109784425e+00 + 2.5317906427909236e+00 1.0925380990054878e+00 -2.1293075249100264e+00 + 2.6772938068559600e+00 8.0636574784938220e-01 -2.2002406876187779e+00 + 2.8131298524551691e+00 5.3951498272808851e-01 -2.1512519404957215e+00 + 2.9205426187983301e+00 4.0090719718612799e-01 -1.9057681344102830e+00 + 3.0070460044126248e+00 5.1911812576464322e-01 -1.5589324425606972e+00 + 3.1386396209542289e+00 2.8056142243794535e-01 -1.3810926825225667e+00 + id 14812 + loc 9.4631350040435791e-01 5.2349731326103210e-02 404 + blend 0.0000000000000000e+00 + interp 2.9774647773037882e-01:2.6711518187087663e-01:7.6902965602078099e-02:2.2189547141116020e-01:1.4702277986688628e+00:2.4149081579288759e-01:1.9752415901286322e+00:2.9774350026560154e-01:2.4759656976929771e+00:2.5409386243249876e-01:3.0730426180797066e+00 + CVs 20 + 2.5806815121796466e-02 8.5061680430200445e-02 1.3996649376145523e-01 + 5.2831596548932644e-02 1.6625317266071737e-01 2.8949852478029514e-01 + 7.2118697896769252e-02 2.4695416848571286e-01 4.4650730123710197e-01 + 7.7116597680906812e-02 3.2824136871719650e-01 6.0883325546622991e-01 + 6.5596197313256055e-02 4.0804984551817336e-01 7.7373145172818003e-01 + 3.5911455496694056e-02 4.8402904044297812e-01 9.3732843313518643e-01 + -1.3499420929047712e-02 5.5501673210887359e-01 1.0952758616081082e+00 + -8.2918867739871505e-02 6.2132462389424092e-01 1.2438150165547481e+00 + -1.6988453418243660e-01 6.8439678780194579e-01 1.3800425526927060e+00 + -2.7051897581055950e-01 7.4673879086063866e-01 1.5017846739953218e+00 + -3.8048311905132470e-01 8.1126732176260508e-01 1.6064939112938397e+00 + -4.9212053716353754e-01 8.7984525010170866e-01 1.6899334787010361e+00 + -5.9578708064207930e-01 9.5388623750801727e-01 1.7507586064840042e+00 + -6.9010582112110730e-01 1.0366142389446682e+00 1.7993610888811071e+00 + -7.7775187110804167e-01 1.1317900936443681e+00 1.8605140757382055e+00 + -8.5407085949269013e-01 1.2408514771102377e+00 1.9496498763911267e+00 + -9.1870720489177959e-01 1.3632010284378486e+00 2.0645394053561810e+00 + -9.7294322008549261e-01 1.4956536525662978e+00 2.2006877430053500e+00 + -9.3966017395122203e-01 1.6196584264656286e+00 2.3231171218111353e+00 + id 14813 + loc 7.0580625534057617e-01 1.4952765405178070e-01 405 + blend 0.0000000000000000e+00 + interp 3.8461527500472564e-01:3.7555862698329701e-01:3.6408612273680085e-01:2.6126852486519009e-01:1.2591496487336957e+00:3.8461142885197563e-01:1.9984999531477632e+00:3.8075697796753299e-01:2.8876668819228506e+00:3.0854458441282789e-01:3.3296940123091812e+00 + CVs 20 + 1.9964923152293418e-01 9.2831501872307876e-02 -4.0539316888259333e-02 + 4.0939675052789648e-01 1.5720520488385992e-01 -8.5185211245079634e-02 + 6.2031462869267195e-01 2.1057030699498058e-01 -1.3701946329141101e-01 + 8.2118494422976007e-01 2.4793477127121533e-01 -2.0252697029867131e-01 + 1.0053291574453831e+00 2.6590625565086329e-01 -2.8647356687178127e-01 + 1.1649996974894932e+00 2.6293648036377959e-01 -3.9152592814204135e-01 + 1.2922510606729554e+00 2.3951719496496104e-01 -5.1703189114898496e-01 + 1.3811170538339677e+00 1.9900276677578277e-01 -6.5834755890462660e-01 + 1.4286920410699753e+00 1.4677709376779569e-01 -8.0778940318137082e-01 + 1.4375185648715916e+00 8.9809757864966810e-02 -9.5572279795851811e-01 + 1.4153947654601522e+00 3.4515792640454457e-02 -1.0933967691436111e+00 + 1.3742667882862070e+00 -1.6729780497344415e-02 -1.2134568260562728e+00 + 1.3293184031000163e+00 -6.3802321020699493e-02 -1.3126324811676509e+00 + 1.2943521749644327e+00 -9.9724885357504012e-02 -1.3997481842168700e+00 + 1.2742566130960282e+00 -1.0471910822550712e-01 -1.4995912775013038e+00 + 1.2626328403478393e+00 -5.7673338648852712e-02 -1.6342425945590990e+00 + 1.2514155106478819e+00 4.2214772587480631e-02 -1.7961808342259782e+00 + 1.2421932700848002e+00 1.7612323241441241e-01 -1.9655183678063259e+00 + 1.3581149844274352e+00 2.2259151147012801e-01 -2.1230395994608737e+00 + id 14814 + loc 4.5440140366554260e-01 1.9493657350540161e-01 394 + blend 0.0000000000000000e+00 + interp 5.4996240006655417e-01:2.3850090955727835e-01:7.7447762516360164e-01:4.1192541485399548e-01:1.0399873824492936e+00:5.4995690044255352e-01:1.5417163118537645e+00:5.3568440227942871e-01:1.9422728833000846e+00:3.4820336521788486e-01:2.5173176877415901e+00:4.9561230339866152e-01:3.2067739029581297e+00:3.5436696004047080e-01:3.9940916836467468e+00 + CVs 20 + -1.7329537232854941e-01 3.0665980772406015e-01 1.6090323194789763e-01 + -3.0724823973242466e-01 6.0461944414793045e-01 3.5302045121344700e-01 + -4.1490692518948252e-01 8.9245685579160938e-01 5.5022057769365562e-01 + -5.0764300683008945e-01 1.1761584305134878e+00 7.4299257858453238e-01 + -5.9839796041863513e-01 1.4645224333701177e+00 9.3280233812321656e-01 + -7.0451604009271651e-01 1.7628209753362365e+00 1.1260331207314072e+00 + -8.4366751477096247e-01 2.0662931628336638e+00 1.3307182385002392e+00 + -1.0299017713359762e+00 2.3621459078277094e+00 1.5507225482548832e+00 + -1.2739441461081646e+00 2.6357127810886731e+00 1.7833898767549263e+00 + -1.5826098009336980e+00 2.8705947775505583e+00 2.0220440989948387e+00 + -1.9582765110227003e+00 3.0475764584106901e+00 2.2643606704099302e+00 + -2.3974067831241475e+00 3.1394816661517337e+00 2.5138299968262108e+00 + -2.8645050334497508e+00 3.1076166186682359e+00 2.7581177732328470e+00 + -3.2678101870073633e+00 2.9420872534699614e+00 2.9527677195300326e+00 + -3.5383959389925730e+00 2.6907418756865065e+00 3.0635478838055055e+00 + -3.7026621482910720e+00 2.4010023080590868e+00 3.0958061677472299e+00 + -3.8345889164809748e+00 2.0972253089338326e+00 3.0687810364540766e+00 + -3.9904317158043012e+00 1.7915708747494592e+00 3.0399498965115272e+00 + -4.1560750949529321e+00 1.5248382684964916e+00 3.2117762728236001e+00 + id 14815 + loc 9.3827515840530396e-01 5.5144464969635010e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2843678667194529e-01:3.2555978300919497e-01:4.3589995676059012e-01:2.5914371427608823e-01:1.4939924038605161e+00:4.2843250230407859e-01:2.0148832800031915e+00:2.7831512159863986e-01:2.8856262998972242e+00:2.5043945382752109e-01:3.7245765029853501e+00 + CVs 20 + 1.8494524441315768e-01 3.2572679167520552e-01 -2.8158450224173640e-02 + 3.5448727806702679e-01 6.3232427917242262e-01 -9.4694302159790245e-02 + 5.3279889491431676e-01 9.0640994942349906e-01 -1.8175840150132347e-01 + 7.2758418842813732e-01 1.1370152365092783e+00 -2.8181301435085593e-01 + 9.3424344047674290e-01 1.3149259425452988e+00 -3.9355072532527108e-01 + 1.1461781314180735e+00 1.4337323322428690e+00 -5.1230589752537570e-01 + 1.3585008887354872e+00 1.4935999008786729e+00 -6.3276074513139724e-01 + 1.5707315250792653e+00 1.4997770909716690e+00 -7.5141832616081339e-01 + 1.7849866719067169e+00 1.4572221305620996e+00 -8.6626716379910884e-01 + 2.0054432586015865e+00 1.3677091169602862e+00 -9.7888567171317309e-01 + 2.2343707592292885e+00 1.2286956306356032e+00 -1.0946341171217278e+00 + 2.4638812280149911e+00 1.0376043516253235e+00 -1.2161652231922409e+00 + 2.6771042055759522e+00 7.9335152565622358e-01 -1.3437293650967219e+00 + 2.8482674599870208e+00 4.9095687413517763e-01 -1.4835889867264180e+00 + 2.9300370630569388e+00 1.2512100661592918e-01 -1.6507276125169419e+00 + 2.8415091882020262e+00 -2.8257444287032385e-01 -1.8638239163981221e+00 + 2.5194545870409533e+00 -6.5802117456131981e-01 -2.1692333207386545e+00 + 1.9801345552099363e+00 -8.5507757457845179e-01 -2.6273819506374161e+00 + 1.7602296977850065e+00 -1.0884418825726421e+00 -2.9043425896691115e+00 + id 14816 + loc 5.7037514448165894e-01 8.5624849796295166e-01 405 + blend 0.0000000000000000e+00 + interp 4.8918954347653748e-01:4.0439948925585367e-01:1.0086012002522637e-01:3.6713736653631168e-01:1.0484887181880178e+00:4.8439147436326413e-01:1.6179483573312108e+00:4.8918465158110275e-01:1.9998809042588737e+00:4.0092899712553814e-01:2.7017739855627232e+00:3.6716214570780031e-01:3.3697909481487365e+00 + CVs 20 + 1.4709189020681968e-01 2.7491474861021653e-01 2.3101548647978254e-03 + 1.6619479637739437e-01 4.0474709180678398e-01 -5.1251693052380351e-03 + 1.2552860479413672e-01 4.9994431038560594e-01 -2.6308812520085000e-02 + 8.5747204951107936e-02 5.8674274935521442e-01 -6.7827755420073729e-02 + 4.6955108431712245e-02 6.7568081885742348e-01 -1.3569735724791612e-01 + 1.3004428744892382e-02 7.9128435722527990e-01 -2.3216363317457936e-01 + -7.0929130525320683e-03 9.6578107014479886e-01 -3.3571515397322410e-01 + -6.4078451247555623e-03 1.2007771884139045e+00 -3.9348759609992645e-01 + 1.0810216199328981e-02 1.4499524240022144e+00 -3.7026563369140403e-01 + 3.6704901261703893e-02 1.6724998897352212e+00 -2.7553772511033980e-01 + 7.0756170308316602e-02 1.8595025575932334e+00 -1.2980331432828790e-01 + 1.1853644676804209e-01 2.0150141832636144e+00 5.4838813384499294e-02 + 1.7978942094842332e-01 2.1361705525875090e+00 2.6683476231920911e-01 + 2.3774610801576079e-01 2.2098824128344492e+00 4.7774385576839307e-01 + 2.6964891352683651e-01 2.2306855265456322e+00 6.5227933128297189e-01 + 2.7036787009411889e-01 2.2105376618981709e+00 7.8466456405266949e-01 + 2.5519960727451985e-01 2.1676594386713406e+00 8.9588173974805807e-01 + 2.4591830795513048e-01 2.1177392881696178e+00 9.9420025171831650e-01 + 3.7417379385867711e-01 2.1592280276479010e+00 1.1135048838962420e+00 + id 14817 + loc 6.4192903041839600e-01 3.0235728621482849e-01 404 + blend 0.0000000000000000e+00 + interp 2.8009020812736912e-01:2.6782506933031153e-01:8.3984676275530001e-01:2.6270711667562135e-01:1.7033148204314916e+00:2.8008740722528785e-01:2.3343992028564653e+00:2.5132980533418431e-01:3.4684877126316991e+00 + CVs 20 + -6.3538611213645457e-02 2.0580302039101456e-01 1.6794325621638909e-01 + -1.2647655291237675e-01 3.8924544095325442e-01 3.1919015946024965e-01 + -2.0774709381110407e-01 5.6391159885701037e-01 4.6750057456042166e-01 + -3.1486801877243997e-01 7.3617065818942096e-01 6.1916398010328488e-01 + -4.4531374536164070e-01 9.0472517462945634e-01 7.7365260254553303e-01 + -5.9440592179359508e-01 1.0686603166423394e+00 9.3323862642162914e-01 + -7.5535878625066333e-01 1.2277079515139726e+00 1.1036633957391828e+00 + -9.1893114894906458e-01 1.3823186702154842e+00 1.2926178805062121e+00 + -1.0736333340967268e+00 1.5327495375015940e+00 1.5083865582730116e+00 + -1.2058298452134175e+00 1.6784515560814384e+00 1.7599649548987752e+00 + -1.2996854779150409e+00 1.8161518497188491e+00 2.0554934614867322e+00 + -1.3368339667481810e+00 1.9385277758024766e+00 2.3939973364031921e+00 + -1.3062754212507957e+00 2.0372177638323894e+00 2.7601113257920766e+00 + -1.2079570812249600e+00 2.1095801206346421e+00 3.1312836935527049e+00 + -1.0428358043557362e+00 2.1619771444772491e+00 3.4891666738081426e+00 + -8.0261422469423582e-01 2.2028802459481978e+00 3.8210941719824474e+00 + -4.7347074544350432e-01 2.2304996595548827e+00 4.1134297514120153e+00 + -6.1355888654404112e-02 2.2285019725551485e+00 4.3428073511008609e+00 + 1.5218125091212320e-01 2.2324116425804315e+00 4.4700886216499045e+00 + id 14818 + loc 9.2861098051071167e-01 5.8494645357131958e-01 394 + blend 0.0000000000000000e+00 + interp 3.5645577406303680e-01:2.6656381908824911e-01:4.1247611743576862e-01:2.5780976592286520e-01:1.0075977718737130e+00:3.0779315702427085e-01:1.9999424585264434e+00:3.5645220950529621e-01:2.7673934790401797e+00:2.7020635004262145e-01:3.8236740208887072e+00 + CVs 20 + -3.0757779054223100e-01 1.9039339556695101e-01 -1.4247074109880378e-01 + -5.9084691048075522e-01 3.4948336119673540e-01 -2.5746381551746433e-01 + -8.6859231839708950e-01 5.0028966000758601e-01 -3.8227814005043292e-01 + -1.1443356390085264e+00 6.5537081069392311e-01 -5.3803558786582240e-01 + -1.4066760813936170e+00 8.1131275460198082e-01 -7.3351429981002858e-01 + -1.6445008537447166e+00 9.6363553551313952e-01 -9.7238264163178001e-01 + -1.8606313081054879e+00 1.1177196231727227e+00 -1.2563703797011860e+00 + -2.0643517947689896e+00 1.2775052627731578e+00 -1.5899175346860361e+00 + -2.2540028178203242e+00 1.4228254877480744e+00 -1.9798722003763918e+00 + -2.4254353683561325e+00 1.5181196052087136e+00 -2.4265204173404493e+00 + -2.5901253851948089e+00 1.5313173710612407e+00 -2.9192925898425273e+00 + -2.7588052034168724e+00 1.4419960433589618e+00 -3.4379537008071162e+00 + -2.9224084544938549e+00 1.2495399048214726e+00 -3.9588393203718160e+00 + -3.0736302622798446e+00 9.6594799017167299e-01 -4.4608249055796989e+00 + -3.2282580736645570e+00 6.0030478580065028e-01 -4.9218932606414940e+00 + -3.4015851706869205e+00 1.5516501509235159e-01 -5.3081253522660639e+00 + -3.5788987203813076e+00 -3.6218250421523823e-01 -5.5760267741041689e+00 + -3.7392998879715349e+00 -9.2141972619767731e-01 -5.7135164102865659e+00 + -3.9023333785619334e+00 -1.4434356480207788e+00 -5.8336247199908833e+00 + id 14819 + loc 2.9564374685287476e-01 6.9129389524459839e-01 1079 + blend 0.0000000000000000e+00 + interp 3.6164327077090713e-01:2.8271963069267553e-01:7.0961434878980434e-02:3.6163965433819945e-01:9.9563214900885277e-01:2.8195617682732010e-01:1.8638423039706531e+00:2.8906003978967704e-01:2.6743939283049061e+00:3.3587960012952589e-01:3.4564449401388710e+00 + CVs 20 + 6.4667244869025420e-02 4.1525526643415511e-01 1.6318111164874982e-01 + 1.5943875434898508e-01 7.7367052891828036e-01 2.7209844505547676e-01 + 2.6798896764700708e-01 1.1099261614639366e+00 3.6190568712523008e-01 + 3.8541839133122330e-01 1.4404916515805233e+00 4.4745195950737421e-01 + 5.1737122050195561e-01 1.7672497097224888e+00 5.2041908252000968e-01 + 6.7306639377682542e-01 2.0943414711962296e+00 5.6197456038745519e-01 + 8.6328522475146974e-01 2.4199884454980207e+00 5.4015770029364385e-01 + 1.0908742179957316e+00 2.7258173063719005e+00 4.2364241794306345e-01 + 1.3458711955186831e+00 2.9805120714957010e+00 1.9853105669021986e-01 + 1.6102227217580161e+00 3.1530991764879928e+00 -1.2556577001378000e-01 + 1.8665498770868703e+00 3.2261964309270166e+00 -5.2083283890400534e-01 + 2.1047324940433549e+00 3.1987954805816505e+00 -9.5614290436816274e-01 + 2.3218906304983951e+00 3.0794057540396489e+00 -1.4054055277970217e+00 + 2.5202341738716356e+00 2.8778735337625414e+00 -1.8488513783843550e+00 + 2.7043238859377294e+00 2.5899748826986806e+00 -2.2744183661762754e+00 + 2.8756145874714329e+00 2.1479010498229236e+00 -2.6756535178944221e+00 + 3.0204746799364925e+00 1.4045946926259896e+00 -2.9681468457647213e+00 + 3.1111556249061767e+00 4.6632570246830185e-01 -2.9410853551099390e+00 + 3.1904766325236711e+00 1.3211076854484793e-01 -2.9723051818019783e+00 + id 14820 + loc 5.0040000677108765e-01 6.2375408411026001e-01 405 + blend 0.0000000000000000e+00 + interp 4.6569839704878063e-01:3.8771044864348936e-01:1.5111928479520376e-01:4.6569374006481018e-01:9.1540979564101577e-01:3.7514685222057359e-01:1.3969654129435056e+00:4.6348706104177989e-01:2.0569472434221376e+00:3.3895107837973337e-01:2.6181279084633671e+00:3.8297956662027910e-01:3.0277077843005711e+00:3.6697119339059497e-01:3.7561483508850593e+00 + CVs 20 + 1.2672322640628847e-01 2.3582744856137650e-01 -2.5090014043482236e-02 + 1.8217402365499388e-01 4.1641027453622348e-01 -4.2485936066130728e-02 + 2.2314308290135840e-01 5.5350261058143224e-01 -4.8759470533542973e-02 + 2.7989360285501935e-01 6.8410945391285860e-01 -4.1666027033653054e-02 + 3.4751678172260231e-01 8.1023525321869949e-01 -1.8751405607167641e-02 + 4.2247826449403686e-01 9.3170834176530959e-01 2.2928965798838172e-02 + 5.0382329944001758e-01 1.0444142024599898e+00 8.4531902982932131e-02 + 5.9346897833415690e-01 1.1414356913582397e+00 1.6129899126817915e-01 + 6.9421693207459501e-01 1.2192693178718894e+00 2.4425710739769702e-01 + 8.0737162168749066e-01 1.2791125696689174e+00 3.2614494152366175e-01 + 9.3191425231293623e-01 1.3237700689539134e+00 4.0389406120179322e-01 + 1.0652906901028658e+00 1.3551585680856357e+00 4.8095518944664761e-01 + 1.2036745043490109e+00 1.3724257956698904e+00 5.6142595574634524e-01 + 1.3389811040547748e+00 1.3732705492433215e+00 6.3599289701864392e-01 + 1.4570554465587717e+00 1.3578281497682902e+00 6.8147326867905700e-01 + 1.5433432176468798e+00 1.3275610980961923e+00 6.8314783484379116e-01 + 1.5941426664795486e+00 1.2823825593694966e+00 6.5436374594912095e-01 + 1.6204961304694054e+00 1.2235622450574914e+00 6.2306405743883841e-01 + 1.7583904765675773e+00 1.1605933904625410e+00 7.5974718084033532e-01 + id 14821 + loc 3.2256075739860535e-01 2.0272341370582581e-01 404 + blend 0.0000000000000000e+00 + interp 4.1241899744539784e-01:2.6072590890880765e-01:4.5561877444746268e-02:2.8047086228193874e-01:1.0227851887378421e+00:3.3347787226765985e-01:1.9202184723211735e+00:4.1241487325542342e-01:2.2414404445448355e+00:2.7306602753884834e-01:2.9394929262312455e+00:2.9474236672344434e-01:3.4296221125262658e+00 + CVs 20 + -1.2467889683728534e-01 1.3584441476200748e-01 -1.1537769922431156e-01 + -2.7017498028647569e-01 2.8199537970619160e-01 -2.2776983751277310e-01 + -4.3081078051439237e-01 4.4046679211506023e-01 -3.3925346744154905e-01 + -6.0415908779673511e-01 6.1487667923013600e-01 -4.4812406613464434e-01 + -7.9072522564227898e-01 8.0782249522594995e-01 -5.4722484080188472e-01 + -9.9404087858168877e-01 1.0178909126327684e+00 -6.2277462231408642e-01 + -1.2176930997967026e+00 1.2378661533819930e+00 -6.5561400528122959e-01 + -1.4582342522018701e+00 1.4560232553410888e+00 -6.2968698319298688e-01 + -1.7046126832043154e+00 1.6591493028974091e+00 -5.3766125093918393e-01 + -1.9439017665519809e+00 1.8332729062292648e+00 -3.7905832489897606e-01 + -2.1661722330030964e+00 1.9653474838803857e+00 -1.6156022865726061e-01 + -2.3609723761201358e+00 2.0420183991522896e+00 1.0335286855010861e-01 + -2.5211647491525708e+00 2.0586652557745073e+00 3.9682102183427070e-01 + -2.6360171050822392e+00 2.0235038844705402e+00 7.0280674513204655e-01 + -2.6830158146390755e+00 1.9652869455946438e+00 1.0127425826800680e+00 + -2.6388517844238666e+00 1.9101817409578179e+00 1.3208880805734831e+00 + -2.5073333593726561e+00 1.8380136109375553e+00 1.6081164924078424e+00 + -2.3255002811059873e+00 1.6985751616395772e+00 1.8469432707928990e+00 + -2.3240313322298531e+00 1.6711089677080548e+00 2.0609328911137501e+00 + id 14822 + loc 1.4375844597816467e-01 5.9582918882369995e-01 394 + blend 0.0000000000000000e+00 + interp 4.6875655282186929e-01:2.7530898873591497e-01:3.6734653147628693e-03:4.4511535799269664e-01:8.1028740857945869e-01:4.6310516703220678e-01:1.2977205266022982e+00:4.1463610925409666e-01:2.0002115634621047e+00:4.6875186525634110e-01:2.5322409669755599e+00:2.7499215158478518e-01:3.2693853437647786e+00 + CVs 20 + -2.3608551708131603e-01 1.5108909482787955e-01 -1.5429675974648047e-02 + -4.7117582678178593e-01 3.1163548360950633e-01 -2.8700603434371391e-02 + -6.9994717889495650e-01 4.8342557856281237e-01 -2.6178129514211335e-02 + -9.2607262484665231e-01 6.8015680193699890e-01 -1.9234576529840730e-03 + -1.1555929764574835e+00 9.1692342185401066e-01 4.0046287031979044e-02 + -1.3995907225725701e+00 1.2079716149260138e+00 8.3703538574076697e-02 + -1.6604215376399731e+00 1.5418964858457571e+00 9.9326527237487694e-02 + -1.9261105938753369e+00 1.8796833011261478e+00 6.7140267620772853e-02 + -2.2058999276234670e+00 2.2092625634749514e+00 -1.9248442882097705e-02 + -2.5535539533811109e+00 2.5450355767248825e+00 -1.9415412689004308e-01 + -3.0037961426166557e+00 2.8392706031095765e+00 -5.1872677663707600e-01 + -3.4913943306402277e+00 2.9730910762417579e+00 -9.9154566128279242e-01 + -3.9114249545329161e+00 2.8877733422239933e+00 -1.5089672505846274e+00 + -4.2194204290999835e+00 2.6316427534021805e+00 -1.9664555730574864e+00 + -4.4248223213700495e+00 2.3059100907276404e+00 -2.3199319366102453e+00 + -4.5508790348524810e+00 2.0514142568270257e+00 -2.5489777151253756e+00 + -4.6116961892020321e+00 1.9951839712427990e+00 -2.6532717383276543e+00 + -4.6482812975214900e+00 2.0369506528022527e+00 -2.7180949043995275e+00 + -4.9156428799829754e+00 1.7570300376996215e+00 -2.9307551964077905e+00 + id 14823 + loc 2.9160967469215393e-01 6.6739541292190552e-01 405 + blend 0.0000000000000000e+00 + interp 4.6849666667635526e-01:4.2239290033560134e-01:1.3412223681913127e-01:3.7089322313648476e-01:1.0392798597485515e+00:4.6849198170968853e-01:1.6066701975812712e+00:3.6538509683550741e-01:2.0000920121983068e+00:3.8253227711824395e-01:2.9440392826501389e+00:3.5766889120259504e-01:3.6227048795554526e+00 + CVs 20 + 1.3522861214040596e-01 2.4363484444987241e-01 2.5595012477197119e-02 + 1.5901863453254783e-01 4.1081704960353360e-01 4.3677491392071992e-02 + 1.5507888538766978e-01 5.4458518433528991e-01 6.9752026105775161e-02 + 1.5664111347842738e-01 6.6849769905499656e-01 1.1221555395340110e-01 + 1.6153581760669189e-01 7.8083205848731341e-01 1.7328845895361017e-01 + 1.6886096518791321e-01 8.7941836100548820e-01 2.5459072787483905e-01 + 1.7902875120148021e-01 9.6166680657435477e-01 3.5642484698221322e-01 + 1.9377116029377145e-01 1.0254971753980995e+00 4.7766847095726073e-01 + 2.1593078766119705e-01 1.0699015879245639e+00 6.1660194850466643e-01 + 2.4897863532222297e-01 1.0948166676619973e+00 7.7151056078834712e-01 + 2.9675546185392931e-01 1.1007403395012876e+00 9.4141329523543105e-01 + 3.6275735160286443e-01 1.0875219588145950e+00 1.1258000720221530e+00 + 4.4828842080547815e-01 1.0534419166631750e+00 1.3208120147940028e+00 + 5.5227693780140819e-01 9.9897203159707515e-01 1.5167248767077650e+00 + 6.7459534229554197e-01 9.3321625631246619e-01 1.7045988666061420e+00 + 8.1818485617033687e-01 8.7197981181215278e-01 1.8830597816072188e+00 + 9.8640874937478029e-01 8.2817739514344413e-01 2.0534736969215119e+00 + 1.1817152595666018e+00 8.0704011948003385e-01 2.2202367610730440e+00 + 1.4264447308060879e+00 7.9347238398245168e-01 2.4507564732353995e+00 + id 14824 + loc 7.0196700096130371e-01 1.8192620575428009e-01 1079 + blend 0.0000000000000000e+00 + interp 3.1510102548248603e-01:2.5898287047010426e-01:3.2198639839138510e-02:3.1259016343767182e-01:7.5857309850934085e-01:2.2935844955196050e-01:1.8633274979880379e+00:3.0426795313308475e-01:2.7218401917810020e+00:3.1509787447223120e-01:3.2064229184545541e+00 + CVs 20 + -1.5756210357036615e-02 3.8323466135181483e-01 -9.2666146790062520e-02 + -3.2952204021770015e-02 7.2561750817219606e-01 -1.1915995436253940e-01 + -5.2243747591944834e-02 1.0525933468696405e+00 -1.1634786715288375e-01 + -7.7223797352955481e-02 1.3733023507727662e+00 -9.6193771144592155e-02 + -1.1855627991101103e-01 1.6859963682463097e+00 -4.7736247333823312e-02 + -1.9015982309950374e-01 1.9836086987117794e+00 4.2428351610117376e-02 + -3.0712836520371112e-01 2.2482238321368779e+00 1.8836196523770299e-01 + -4.7766841404083038e-01 2.4503548983230092e+00 3.9346074541568032e-01 + -6.9595067376259689e-01 2.5611425083391639e+00 6.4238680589581265e-01 + -9.4081081374526665e-01 2.5668995018399619e+00 9.0929861731828110e-01 + -1.1846834376475961e+00 2.4725047636283830e+00 1.1755767478798704e+00 + -1.4009121528181110e+00 2.2894568957484642e+00 1.4324541153137427e+00 + -1.5596564166288638e+00 2.0327162787308262e+00 1.6711727462144061e+00 + -1.6252900190140751e+00 1.7292264225988361e+00 1.8800671111626501e+00 + -1.5643704873085416e+00 1.4343189755170762e+00 2.0413549002286429e+00 + -1.3874028201761561e+00 1.2302559509975199e+00 2.1390529995281367e+00 + -1.1671522724698895e+00 1.1682966910721482e+00 2.1831592452774720e+00 + -9.4039033872787958e-01 1.2032998305973612e+00 2.2097764138241556e+00 + -5.3088031199665275e-01 1.1291789871025195e+00 2.3138763078807942e+00 + id 14825 + loc 1.9537554681301117e-01 7.0814764499664307e-01 404 + blend 0.0000000000000000e+00 + interp 4.0139555679215816e-01:2.8874370885960088e-01:1.8148022456212065e-01:2.6960166630789772e-01:1.2245026925578599e+00:2.6705231737116175e-01:2.0255582914014441e+00:2.7651803736463476e-01:2.8545775346860065e+00:4.0139154283659023e-01:3.5043298146992510e+00 + CVs 20 + 3.9386167661178972e-02 7.6848103292241732e-02 -5.0305432610368607e-03 + 9.2483035336049804e-02 1.4544253925476483e-01 -2.6701867050034786e-02 + 1.3914809071424500e-01 2.2738683375938351e-01 -3.9614492643746377e-02 + 1.7578521066618535e-01 3.1079075617073204e-01 -5.4243554890440908e-02 + 1.9979905870764242e-01 3.9344247518534592e-01 -7.5063839110760727e-02 + 2.0844006893427300e-01 4.7427010963438326e-01 -1.0399347389501137e-01 + 1.9964644627566766e-01 5.5103593814939611e-01 -1.4192424805447784e-01 + 1.7277328880752599e-01 6.2108857333719270e-01 -1.8772084158207242e-01 + 1.2954866359756534e-01 6.8475940844423089e-01 -2.3495684523657440e-01 + 7.3816414967534827e-02 7.4494053973929619e-01 -2.7604817539689736e-01 + 1.0229739511028790e-02 8.0430609573841849e-01 -3.0697401447148670e-01 + -5.6171606596171986e-02 8.6346463124256845e-01 -3.2870396486025621e-01 + -1.2008647270327999e-01 9.2581950287952686e-01 -3.4060678099474068e-01 + -1.7663733762819983e-01 9.9346866429182135e-01 -3.4413572440742901e-01 + -2.2034493391547888e-01 1.0675048484380549e+00 -3.4179480562879272e-01 + -2.4543098594704943e-01 1.1480827349536709e+00 -3.3614694125344924e-01 + -2.5352567057120057e-01 1.2290425137079160e+00 -3.3241110516448436e-01 + -2.5583759622698854e-01 1.3009305918759795e+00 -3.3429679089543118e-01 + -3.1521008364817060e-01 1.3399280803629399e+00 -3.2556868047678950e-01 + id 14826 + loc 7.6665079593658447e-01 5.4505777359008789e-01 394 + blend 0.0000000000000000e+00 + interp 4.6767485379773699e-01:3.5986458494130025e-01:2.4086808940261473e-01:4.6767017704919905e-01:9.7852250396509377e-01:2.5510397726009576e-01:1.8588805863912370e+00:2.7096064853746071e-01:2.4653493040490986e+00:2.6613433916544682e-01:3.0134737695353286e+00:4.2881685658411212e-01:3.9642517533006054e+00 + CVs 20 + -2.8466132368602148e-01 2.4040823319504123e-01 -2.5847556899697943e-01 + -5.6166462696956776e-01 4.5879861678694117e-01 -4.9886420319656033e-01 + -8.5174432950222168e-01 6.6731241942684427e-01 -7.3897517808286572e-01 + -1.1626977249004367e+00 8.7066581567373857e-01 -9.9325929105972999e-01 + -1.4923237508301948e+00 1.0636754782168931e+00 -1.2708008390011989e+00 + -1.8421990045122345e+00 1.2390256644238824e+00 -1.5741256669942731e+00 + -2.2158076222830494e+00 1.3855729583887064e+00 -1.9028778903788877e+00 + -2.6111301974786736e+00 1.4812168228828742e+00 -2.2583266083593787e+00 + -3.0206585953181539e+00 1.4972901388460755e+00 -2.6308705682158204e+00 + -3.4371807794128153e+00 1.4173973693951203e+00 -2.9912261701178924e+00 + -3.8518866236411400e+00 1.2492353914637517e+00 -3.3160203916020023e+00 + -4.2520163802318294e+00 1.0156498549371804e+00 -3.6096987183496010e+00 + -4.6277196449456639e+00 7.4157474735246831e-01 -3.8757803866700056e+00 + -4.9789792722947119e+00 4.5579120706208176e-01 -4.0885990960904746e+00 + -5.3080287764421907e+00 1.8038357026387697e-01 -4.2188761031017936e+00 + -5.6020775324192034e+00 -9.6087606924209812e-02 -4.2640331203213462e+00 + -5.8438566027900407e+00 -3.9796245353335857e-01 -4.2421340427689973e+00 + -6.0478927518180647e+00 -7.0405813885197688e-01 -4.2014501837401790e+00 + -6.3088641422511929e+00 -9.1584254638265206e-01 -4.3413571558510977e+00 + id 14827 + loc 4.8217132687568665e-01 1.2797074019908905e-01 405 + blend 0.0000000000000000e+00 + interp 4.7582456570526749e-01:3.4535079980464278e-01:1.0557267547973370e-02:3.2137952057519309e-01:8.3036787104105314e-01:3.6113276342655531e-01:1.4846215232221445e+00:4.7581980745961044e-01:2.0034420004518068e+00:3.5571286880766551e-01:2.5188003113678166e+00:3.7363367585604312e-01:3.1784542405448901e+00 + CVs 20 + 8.5706971825258341e-02 1.6636644518015628e-01 8.6221962686342593e-02 + 1.5744286731678206e-01 3.2104682953028446e-01 1.9176162452294010e-01 + 2.3838707979946250e-01 4.5735834090507360e-01 2.9388649272828715e-01 + 3.3116267971346380e-01 5.7692090655201134e-01 3.9343294585521810e-01 + 4.3435037479069954e-01 6.7820702243097530e-01 4.8563703145965076e-01 + 5.4479934666114638e-01 7.6089136304530003e-01 5.6422447930212360e-01 + 6.5697404959813577e-01 8.2636549922517355e-01 6.2499492377369892e-01 + 7.6388237205813958e-01 8.7685495212057962e-01 6.6688445010640363e-01 + 8.5822818263068057e-01 9.1443370016864134e-01 6.9130507525378271e-01 + 9.3357592461276939e-01 9.4085352481276430e-01 7.0259747365307434e-01 + 9.8624766812650966e-01 9.5729487735431595e-01 7.0832401547444546e-01 + 1.0181139939959110e+00 9.6465022410978674e-01 7.1884226355875969e-01 + 1.0339418863815679e+00 9.6390321644166899e-01 7.4205422740025417e-01 + 1.0313344931773749e+00 9.5265169280108197e-01 7.7749141510983855e-01 + 9.9979989212367004e-01 9.1983475503862289e-01 8.2454977420245035e-01 + 9.4113234872613594e-01 8.4695112257934324e-01 8.8848807787512907e-01 + 8.8283890646391938e-01 7.2460748851374568e-01 9.7105354454886095e-01 + 8.5703309373325098e-01 5.6343032105008106e-01 1.0607849922982731e+00 + 9.1891662172816835e-01 4.7168531562722726e-01 1.0277731054461781e+00 + id 14828 + loc 7.6657533645629883e-01 1.3383752107620239e-01 394 + blend 0.0000000000000000e+00 + interp 3.9693547777430854e-01:2.4725474418367338e-01:2.5172985148612437e-02:3.4444742420576596e-01:9.9907490263845578e-01:3.9693150841953084e-01:1.6372999009122871e+00:3.2520062143765416e-01:2.2102656800789555e+00:2.5101064628618891e-01:3.1724872301039868e+00 + CVs 20 + 2.9526917167676203e-01 2.9821090605124134e-01 2.4634337224323721e-01 + 5.9633954955246415e-01 5.6653934647665249e-01 4.2096470753928206e-01 + 8.9161747478650732e-01 8.2335934938956501e-01 5.7466997601013126e-01 + 1.1769325114954872e+00 1.0792124468969251e+00 7.3271305813555820e-01 + 1.4525098399504799e+00 1.3357282205287093e+00 9.0908616633910277e-01 + 1.7195320001470316e+00 1.5857720106784396e+00 1.1151369453514857e+00 + 1.9812219620629192e+00 1.8165711038812593e+00 1.3587060646768150e+00 + 2.2389540059825466e+00 2.0141476067665840e+00 1.6430120332695974e+00 + 2.4907909866162528e+00 2.1664987800082010e+00 1.9683170978809306e+00 + 2.7314453487848915e+00 2.2625350482681452e+00 2.3275590179337335e+00 + 2.9610231895860664e+00 2.2933425058687251e+00 2.7112457451996557e+00 + 3.1856761737935448e+00 2.2462463263792509e+00 3.1103051407935660e+00 + 3.4033713148083224e+00 2.0992935883969182e+00 3.5024597472643761e+00 + 3.5988679659259448e+00 1.8400577731768109e+00 3.8431873316364089e+00 + 3.7692640085510467e+00 1.4927430487083932e+00 4.1084433703189642e+00 + 3.9352609223885029e+00 1.1166569449118926e+00 4.3251680400732013e+00 + 4.1147399704523906e+00 7.9794108750216974e-01 4.5125383500635881e+00 + 4.3162893193023137e+00 5.9502364574490407e-01 4.6531186491198948e+00 + 4.6600551272968032e+00 3.2492966646631727e-01 4.8841480400723274e+00 + id 14829 + loc 3.8589736819267273e-01 2.6559755206108093e-01 404 + blend 0.0000000000000000e+00 + interp 3.0149438029675507e-01:2.8494601877546288e-01:9.5108535517619863e-01:2.9474236672344434e-01:1.4244462769455495e+00:2.6370798697448894e-01:2.0238772599937276e+00:3.0149136535295212e-01:3.1235987970132943e+00:2.5979356195468190e-01:3.9929091965339767e+00 + CVs 20 + -9.7865776042190572e-02 1.6112871611310453e-01 -1.5703158058336322e-01 + -1.9464181018194493e-01 3.1392506961962169e-01 -2.9786109699812702e-01 + -2.8861967157960944e-01 4.6394877923446087e-01 -4.3120553049722643e-01 + -3.8256624863483940e-01 6.1674892321038344e-01 -5.5899102807888590e-01 + -4.7947241227147297e-01 7.7491470469233292e-01 -6.7844924755743674e-01 + -5.8435675263882558e-01 9.4062514422718146e-01 -7.8605698803567592e-01 + -7.0078756466291114e-01 1.1132726035453226e+00 -8.7686788294986029e-01 + -8.2817343205478011e-01 1.2887832091441100e+00 -9.4586066599867613e-01 + -9.6436170889043815e-01 1.4632484996642767e+00 -9.9070186979414465e-01 + -1.1078863190551378e+00 1.6347367237824391e+00 -1.0111065226932325e+00 + -1.2585596384466657e+00 1.8026659565851861e+00 -1.0077197480504485e+00 + -1.4137199722670779e+00 1.9634388097220299e+00 -9.8176924843858759e-01 + -1.5683562646312998e+00 2.1112400922304628e+00 -9.3673951519258458e-01 + -1.7170496062365688e+00 2.2343045017102785e+00 -8.8623697191696293e-01 + -1.8640408237971018e+00 2.3231790570856452e+00 -8.5022539467485270e-01 + -2.0291965890756289e+00 2.3939361111394390e+00 -8.2392437575922239e-01 + -2.2213667525620635e+00 2.4872509116792636e+00 -7.6423177832597566e-01 + -2.4136565843249156e+00 2.5999900186764204e+00 -6.4886437509304207e-01 + -2.4192340786834374e+00 2.5809733248463140e+00 -5.8237125509679544e-01 + id 14830 + loc 7.0215374231338501e-01 3.6771735548973083e-01 405 + blend 0.0000000000000000e+00 + interp 3.8249684306112042e-01:3.3976889915964925e-01:2.4999351790058610e-01:3.4353246216422628e-01:9.9992777105675068e-01:2.6791076881148035e-01:1.9026121281940305e+00:3.5026652040708633e-01:2.2956751253441063e+00:3.8249301809268982e-01:2.9937981387828092e+00:3.5850816210711051e-01:3.5931162680663258e+00 + CVs 20 + 6.2796304506978179e-02 1.7484966712528441e-01 3.4803558629186689e-03 + 1.7143500137076190e-01 2.7483711781281528e-01 -3.7582758617977947e-03 + 2.9273317836626200e-01 3.4322792209036945e-01 -1.7080563703597968e-02 + 4.0419529969920381e-01 3.8420361668688169e-01 -3.4915855099715801e-02 + 5.0037790287848405e-01 3.9571336791773171e-01 -5.3046131649888272e-02 + 5.7722426317088871e-01 3.8007965183430059e-01 -6.3725904216624843e-02 + 6.3588531381369306e-01 3.4588197594796738e-01 -5.7523740987795127e-02 + 6.8659864815564320e-01 3.0719962286838531e-01 -2.9131326840065759e-02 + 7.4626944709944931e-01 2.7749243096505061e-01 1.6449266986690969e-02 + 8.3025760463031206e-01 2.6316273301230936e-01 6.4232962754468159e-02 + 9.4531088446101807e-01 2.6331525024261465e-01 9.8293563978421733e-02 + 1.0894438211976498e+00 2.7522374561470725e-01 1.1026890454724661e-01 + 1.2598284621622866e+00 2.9476176020179867e-01 9.4454239988498834e-02 + 1.4573219339594479e+00 3.0660537303994062e-01 3.1852537656014979e-02 + 1.6783386070868560e+00 2.8351052057126680e-01 -1.0714838597838743e-01 + 1.9050306166595230e+00 2.1597047385114121e-01 -3.4152602077301297e-01 + 2.1105679230453602e+00 1.3528655322633742e-01 -6.6216246059068806e-01 + 2.2778295855745356e+00 8.5533782991239926e-02 -1.0306726576809089e+00 + 2.4306401982854857e+00 1.6633171445675643e-01 -1.1694110076878390e+00 + id 14831 + loc 4.9178537726402283e-01 6.2453347444534302e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927576418733897e-01:3.3942209084615926e-01:6.8573073624793923e-02:2.5733197226422949e-01:1.0082171472032231e+00:4.0282294070824165e-01:1.5033132956548099e+00:4.7927097142969710e-01:2.0970276777800030e+00:4.3618419578518153e-01:2.9048655065171660e+00:4.0930991646025200e-01:3.5893199527497499e+00 + CVs 20 + -1.5527998178050084e-01 2.4409333280458623e-01 -3.7224526201784036e-01 + -3.0529335052339102e-01 4.8716474239685725e-01 -7.1521444198638873e-01 + -4.4943338179279080e-01 7.4809665012911286e-01 -1.0376310189506315e+00 + -5.8743470255663155e-01 1.0330398675941517e+00 -1.3434518723469466e+00 + -7.1828683984210817e-01 1.3330035526879080e+00 -1.6369596075048558e+00 + -8.4614287833180990e-01 1.6320808111774729e+00 -1.9308779989638460e+00 + -9.7978112327249012e-01 1.9165549229426846e+00 -2.2404545119830952e+00 + -1.1303746453983441e+00 2.1790543292830629e+00 -2.5746764094552317e+00 + -1.3027705687414532e+00 2.4034072117582230e+00 -2.9389845377630559e+00 + -1.4851965498815189e+00 2.5494513806947046e+00 -3.3428939886100455e+00 + -1.6560927253288842e+00 2.5693101927597617e+00 -3.7885601638043043e+00 + -1.8056836773067868e+00 2.4388773923289726e+00 -4.2546446250181251e+00 + -1.9362556934750355e+00 2.1598748405557129e+00 -4.7043471678712283e+00 + -2.0482585417471495e+00 1.7743595061958410e+00 -5.1005183127305251e+00 + -2.1626072528356790e+00 1.3603150246897711e+00 -5.4388707956356921e+00 + -2.3385774848897078e+00 9.6724270219122443e-01 -5.7396660764859995e+00 + -2.6506638061832319e+00 6.3467540735028560e-01 -6.0055701206467145e+00 + -3.0814837355295301e+00 4.2236979464376612e-01 -6.2165806632046916e+00 + -3.3195423062789251e+00 2.6958060000031603e-01 -6.4188058917208313e+00 + id 14832 + loc 4.2802557349205017e-01 7.8814244270324707e-01 405 + blend 0.0000000000000000e+00 + interp 4.4481423163447598e-01:3.5505611393569952e-01:3.9852405370042199e-02:4.4480978349215966e-01:9.7326779562046994e-01:2.9755082195483934e-01:1.5470453031208558e+00:3.4689457273597307e-01:2.0817503107258206e+00:3.5488222048796636e-01:3.1373587364358020e+00 + CVs 20 + 6.3215364895715997e-02 2.1180129029328665e-01 8.0188125839449870e-02 + 2.7346689487636119e-02 2.7350668057272071e-01 1.3855024760544185e-01 + -7.2318521216460097e-02 3.1681919387283775e-01 1.7414715736114164e-01 + -1.6945912762193202e-01 3.4505196734052751e-01 1.7479087710754304e-01 + -2.6468698042219324e-01 3.6727460546759300e-01 1.2657020028755508e-01 + -3.5715152821492091e-01 4.0999590178328915e-01 2.7299687616096011e-02 + -4.4521054821766348e-01 5.0340745904838868e-01 -9.0675846033724805e-02 + -5.2892269682569792e-01 6.4809905234542131e-01 -1.6891774223951719e-01 + -6.0765685919383294e-01 8.1300317163409030e-01 -1.6650109044743819e-01 + -6.7692354731638849e-01 9.6765546700847127e-01 -7.4542587536265595e-02 + -7.2738266580417588e-01 1.0980802952627922e+00 9.8702771364687122e-02 + -7.4755155660766059e-01 1.1998253025032295e+00 3.4123923737740158e-01 + -7.3081086415475038e-01 1.2617006891982767e+00 6.4492223930480852e-01 + -6.7639896618903406e-01 1.2645972411618560e+00 1.0009671662954227e+00 + -5.7980170545038601e-01 1.2120885386525730e+00 1.3926997165371078e+00 + -4.2926249411287071e-01 1.1433486310184009e+00 1.7992811500571977e+00 + -2.1801501329407519e-01 1.0982566477133637e+00 2.1968894602183635e+00 + 4.4087836062746577e-02 1.0948791529498363e+00 2.5561312918272279e+00 + 3.2271907510503517e-01 1.1241573050444871e+00 2.8574699856675077e+00 + id 14833 + loc 9.4691276550292969e-02 8.1437671184539795e-01 394 + blend 0.0000000000000000e+00 + interp 3.3917132377701859e-01:3.0978820669380863e-01:9.8497770092099590e-02:3.3916793206378082e-01:8.6123419476929597e-01:2.6783616827192142e-01:1.9188322440749417e+00:3.2346527306413764e-01:2.5788530883173553e+00:2.5973226143739714e-01:3.6101520875777453e+00 + CVs 20 + -1.3452932838554027e-01 1.9609536698347180e-01 -1.5255148451897427e-01 + -2.7222569698142468e-01 4.0896579707608727e-01 -3.1150644310483777e-01 + -3.9889885313328682e-01 6.3187880658984441e-01 -4.6280269446982658e-01 + -5.1135109142103197e-01 8.5877013249907608e-01 -6.0152368122356259e-01 + -6.1210042330871040e-01 1.0831797429815821e+00 -7.2890725879126683e-01 + -7.0272170066650930e-01 1.2963463306792136e+00 -8.4729749630664597e-01 + -7.8505014114885407e-01 1.4914809448097293e+00 -9.6356664560828276e-01 + -8.6193249981924591e-01 1.6661028966523770e+00 -1.0862782167712979e+00 + -9.3667297846773090e-01 1.8216922322005091e+00 -1.2087878145734599e+00 + -1.0134184895529785e+00 1.9679784378645602e+00 -1.3045723745955522e+00 + -1.1001530367600372e+00 2.1266220564541305e+00 -1.3640711807621275e+00 + -1.2042488405978524e+00 2.3085896100410190e+00 -1.4302227163788559e+00 + -1.3203350117055479e+00 2.4801009685864774e+00 -1.5545647894009540e+00 + -1.4303663244658256e+00 2.5712144137033697e+00 -1.7325251107308357e+00 + -1.5055596346444244e+00 2.5440452634602653e+00 -1.9151967082257673e+00 + -1.5026049058666542e+00 2.4148587036912423e+00 -2.0744012362464623e+00 + -1.3855710403068309e+00 2.1992240580707136e+00 -2.2148956367643566e+00 + -1.2482396298678888e+00 1.9168081884309833e+00 -2.3457034031567350e+00 + -1.4282300442487310e+00 1.7868052345707266e+00 -2.3604669149055564e+00 + id 14834 + loc 6.7619389295578003e-01 6.9510686397552490e-01 405 + blend 0.0000000000000000e+00 + interp 3.8319930325912482e-01:3.7746321811261191e-01:2.3603998054222775e-01:2.9970332984155523e-01:9.6429963133115060e-01:3.4237546814585368e-01:1.9929890417850364e+00:3.2992941378292034e-01:2.4755013718263301e+00:3.8319547126609227e-01:2.9994167645766625e+00:3.1469921520953026e-01:3.6963240784065245e+00 + CVs 20 + 1.2798954444899197e-01 2.6963270609353807e-01 -4.2137703202403350e-02 + 1.4155978335502337e-01 4.3523913503981149e-01 -6.7894584782237366e-02 + 1.1865700410465052e-01 5.5989091520100154e-01 -8.2739687887512833e-02 + 9.5237719453590997e-02 6.7020141048795745e-01 -8.8298369647761332e-02 + 7.0335517189176910e-02 7.6324416645803383e-01 -8.5868128581905734e-02 + 4.3747512765910324e-02 8.3763648723209949e-01 -7.9672676509967122e-02 + 1.4708271783317295e-02 8.9770517488203971e-01 -7.3624629655447943e-02 + -1.8791165097593099e-02 9.5104283521526889e-01 -6.0361516767851058e-02 + -5.7486046568421711e-02 9.9342283066876369e-01 -2.3090588069590065e-02 + -9.9590170289002078e-02 1.0119959425474292e+00 4.5128284595516571e-02 + -1.4194510397959936e-01 9.9929283275937564e-01 1.4045048401967103e-01 + -1.8135889447733688e-01 9.5269079671687162e-01 2.5633939192348687e-01 + -2.1566551447376439e-01 8.6668397533300490e-01 3.9068505111158613e-01 + -2.4002432498174919e-01 7.3033895617536637e-01 5.5189211739784461e-01 + -2.4014260806855306e-01 5.4199414906408039e-01 7.5613476779456223e-01 + -1.9584400821790598e-01 3.2446447180134191e-01 1.0115532319542564e+00 + -9.5617305895128721e-02 1.0966010937451406e-01 1.3076619691379185e+00 + 5.5623650248397882e-02 -8.1132603907603698e-02 1.6222637910724480e+00 + 1.6423112674825860e-01 -2.4447787892859729e-01 1.8564935087387833e+00 + id 14835 + loc 4.0261614322662354e-01 8.1550872325897217e-01 394 + blend 0.0000000000000000e+00 + interp 5.0135244526253808e-01:4.6074092730963079e-01:3.7334070323025381e-02:4.8199985598512424e-01:8.2548504303933856e-01:4.0918285293680939e-01:1.3740249961135713e+00:4.5792330778007589e-01:2.0570370993067719e+00:4.6260112220519545e-01:2.8355933692478392e+00:5.0134743173808549e-01:3.0081773483889998e+00:4.3198223648149287e-01:3.3862326617010488e+00 + CVs 20 + -1.6329626940462755e-01 1.9522885595632539e-01 -2.2224937063801664e-01 + -3.2953198376434034e-01 4.0571061680892850e-01 -4.6290644309355811e-01 + -4.9214276554766623e-01 6.1696078448629654e-01 -7.0611612535904178e-01 + -6.4326091291513787e-01 8.1476626524632356e-01 -9.4697861740600964e-01 + -7.8082428263562464e-01 9.9256095078830142e-01 -1.1873126603894699e+00 + -9.0580253225913721e-01 1.1482558826620921e+00 -1.4265313286191001e+00 + -1.0188474749339504e+00 1.2791352462894399e+00 -1.6613158769242704e+00 + -1.1193527234687464e+00 1.3788364682153222e+00 -1.8863023649765063e+00 + -1.2087218530549757e+00 1.4430445448895506e+00 -2.0971487238352582e+00 + -1.2931053098735359e+00 1.4735398816220042e+00 -2.2955670544392461e+00 + -1.3795359393173938e+00 1.4728998242715750e+00 -2.4859035178196458e+00 + -1.4739137751829572e+00 1.4437213119641252e+00 -2.6673983329557389e+00 + -1.5812011865507261e+00 1.3889462408330444e+00 -2.8392728481852116e+00 + -1.7039084094663304e+00 1.3113080560052297e+00 -3.0039091618711447e+00 + -1.8398736394662973e+00 1.2196063498007184e+00 -3.1537215451331839e+00 + -1.9839158037443179e+00 1.1418881981953857e+00 -3.2671453931850198e+00 + -2.1385588048170532e+00 1.1049619603668281e+00 -3.3386707397265596e+00 + -2.3180723716648899e+00 1.0726463769523360e+00 -3.3721958516614783e+00 + -2.5299123715207514e+00 8.9561659352996736e-01 -3.2937724699809845e+00 + id 14836 + loc 7.5400161743164063e-01 4.4990557432174683e-01 405 + blend 0.0000000000000000e+00 + interp 3.9893805786499542e-01:3.3977625058158145e-01:9.2693115847767071e-02:3.6885857531664407e-01:9.6934651414639217e-01:3.3912495317201558e-01:1.7345657702039410e+00:3.3976889915964925e-01:2.2468972518044765e+00:3.9893406848441682e-01:2.9976108385254197e+00:3.4993222747923103e-01:3.6244084326486572e+00 + CVs 20 + -7.2261137177353163e-02 1.5454379208241753e-01 7.6343128841799654e-02 + -1.0199466872793041e-01 2.9015355566146239e-01 1.5562323681171561e-01 + -1.0637674990300949e-01 4.0164177901692999e-01 2.3248658504352432e-01 + -1.1008272894601701e-01 5.2863138496522166e-01 3.0927719958489036e-01 + -1.0607037646370071e-01 6.7820507027321031e-01 3.8136411177546503e-01 + -8.4358203891437555e-02 8.5665451037374019e-01 4.3974396081182332e-01 + -3.4236597072988095e-02 1.0658711478171123e+00 4.6764630663849238e-01 + 4.7409888995280203e-02 1.2944835141313444e+00 4.4157991853848760e-01 + 1.4574532547880181e-01 1.5161412114747077e+00 3.4508486376430536e-01 + 2.3116827439644216e-01 1.7041363457395688e+00 1.8528502008915085e-01 + 2.7906383570722837e-01 1.8494802573982991e+00 -1.4284074889007098e-02 + 2.7890715590330739e-01 1.9574146696887684e+00 -2.3653970118434348e-01 + 2.2729225457372604e-01 2.0339806511811012e+00 -4.7136907157479357e-01 + 1.2373043659487404e-01 2.0872092483791302e+00 -6.9184488664480093e-01 + -2.3441315504118876e-02 2.1396151907704435e+00 -8.4242715604346252e-01 + -1.8966253915798115e-01 2.2179488491177501e+00 -8.6643953292907383e-01 + -3.4273343402546164e-01 2.3193859088022428e+00 -7.5487628924302697e-01 + -4.6353155141467561e-01 2.4169363221890441e+00 -5.4446940707602387e-01 + -7.1808420145082297e-01 2.4913179205267673e+00 -5.4194924262496202e-01 + id 14837 + loc 9.1879796981811523e-01 7.5293171405792236e-01 394 + blend 0.0000000000000000e+00 + interp 4.4534835952226076e-01:3.1691996384486382e-01:1.7718681003443537e-03:3.0624743456360887e-01:9.1328100308179305e-01:4.1828497889100102e-01:1.1114369602710314e+00:2.5098754953806884e-01:1.9808098187625141e+00:4.0544296772603583e-01:2.4933023829845506e+00:4.4534390603866558e-01:3.1223694088063789e+00 + CVs 20 + -1.5618135677702766e-01 2.4676423912874848e-01 -4.7743038317151898e-01 + -2.9036511991806874e-01 4.6277109430248781e-01 -9.1604504872615156e-01 + -3.9926175278312720e-01 6.5843528879534241e-01 -1.3285820698923116e+00 + -4.9221479668724222e-01 8.3760049085356114e-01 -1.7169764332183663e+00 + -5.8538584456076004e-01 1.0037070103441517e+00 -2.0788732425975667e+00 + -6.9912549643306576e-01 1.1633804352870820e+00 -2.4146581144198422e+00 + -8.4479498337859704e-01 1.3146281603624339e+00 -2.7219692898012786e+00 + -1.0275328051650601e+00 1.4502237620359895e+00 -3.0030338532707823e+00 + -1.2564686293129039e+00 1.5679905513358448e+00 -3.2716621108836570e+00 + -1.5381370785309996e+00 1.6662505164378640e+00 -3.5389667141708503e+00 + -1.8674323827225696e+00 1.7425860600564316e+00 -3.8017969896001027e+00 + -2.2359732995603037e+00 1.7958773702725503e+00 -4.0574844216525472e+00 + -2.6360860424604358e+00 1.8213334995108428e+00 -4.3108073224225496e+00 + -3.0532625877081583e+00 1.8150341484837849e+00 -4.5586217683737553e+00 + -3.4781920146118637e+00 1.7744864225022483e+00 -4.7912461463110505e+00 + -3.9254791833464848e+00 1.6793381457924057e+00 -5.0140083460621021e+00 + -4.4038600180170970e+00 1.4958902450321450e+00 -5.2200875925491133e+00 + -4.8654561701775760e+00 1.2420571268196214e+00 -5.3516481011800021e+00 + -5.2189571411622504e+00 1.0303705374693131e+00 -5.3263631164547487e+00 + id 14838 + loc 5.1597386598587036e-01 4.5042428374290466e-01 405 + blend 0.0000000000000000e+00 + interp 3.6895800468143353e-01:3.2972553981284386e-01:1.8963458494278185e-01:3.4851901598906215e-01:1.0001153008133554e+00:3.6895431510138671e-01:1.7111979437437141e+00:3.3223820980815538e-01:2.1550117947827934e+00:2.9839452495218366e-01:2.9958928437765850e+00:3.2194096208475381e-01:3.6568718116642338e+00 + CVs 20 + 2.8864902266760251e-02 2.0100629024735014e-01 -2.9196732318645450e-02 + 1.3493594341387893e-01 3.2140850072887683e-01 -6.0673191404427909e-02 + 2.6482471881213032e-01 4.1783320656230405e-01 -1.0382115134027826e-01 + 3.9721023215077467e-01 4.8502462690392634e-01 -1.6297845713554557e-01 + 5.2757860645829835e-01 5.1191623228802252e-01 -2.3781190002625244e-01 + 6.4982169032022630e-01 4.9205045102846434e-01 -3.2292893015042973e-01 + 7.6023245289904895e-01 4.2807370649475218e-01 -4.0957435526810193e-01 + 8.6119982671093753e-01 3.3141686488741651e-01 -4.9246658885239036e-01 + 9.5899706981060673e-01 2.1384052247938962e-01 -5.7360829998740492e-01 + 1.0590884664697504e+00 8.1909489778133115e-02 -6.5912778309721387e-01 + 1.1628814934303515e+00 -6.3113305411178544e-02 -7.5308073498482764e-01 + 1.2683306194351862e+00 -2.2212541259064150e-01 -8.5060096322099477e-01 + 1.3725872158934209e+00 -3.9286369137827665e-01 -9.4412584123859522e-01 + 1.4708781436715088e+00 -5.6886092861124216e-01 -1.0486667624956179e+00 + 1.5500156314027134e+00 -7.4596064718768829e-01 -1.2122065923951792e+00 + 1.5856515572758521e+00 -9.1790953268742237e-01 -1.4781375847313245e+00 + 1.5557316374428143e+00 -1.0631685228493588e+00 -1.8325145915785337e+00 + 1.4578328968256473e+00 -1.1572422556211166e+00 -2.2179199141559760e+00 + 1.4376595922659514e+00 -1.2049685403651185e+00 -2.3473810208138657e+00 + id 14839 + loc 9.2008095979690552e-01 3.6917045712471008e-01 405 + blend 0.0000000000000000e+00 + interp 5.8191819090159380e-01:3.3039717195759255e-01:4.8769025608619954e-01:5.8191237171968480e-01:9.9500423857244746e-01:3.1904469838775779e-01:1.9513865980722258e+00:3.8525630525931565e-01:2.3513029579012681e+00:3.3031247707958672e-01:2.9952498826447136e+00:3.5846879384951857e-01:3.8517341044233322e+00 + CVs 20 + 6.5942210485156499e-02 2.0140797370369370e-01 -2.0676718140471180e-03 + 1.8685292510567236e-01 3.1280012097420268e-01 -3.3978551276157481e-02 + 3.2389900638650204e-01 4.0224750818075750e-01 -7.1791041430906616e-02 + 4.5618973046999928e-01 4.6456102453340775e-01 -1.1733492226972600e-01 + 5.7827512354178556e-01 4.9190306946410040e-01 -1.7293582118584278e-01 + 6.8026311625786873e-01 4.7776638978078190e-01 -2.3915056258873463e-01 + 7.4721455172924733e-01 4.1683798368985070e-01 -3.1290592507885706e-01 + 7.6245681440383506e-01 3.0943306084654532e-01 -3.8346415688297725e-01 + 7.1551322992878919e-01 1.6616890373584459e-01 -4.3080649059160114e-01 + 6.1552631475702646e-01 1.0044895908382201e-02 -4.3302008498705491e-01 + 4.9389588329800521e-01 -1.3322840974819067e-01 -3.8339299903460744e-01 + 3.8432856100817175e-01 -2.5010752592091401e-01 -2.9599366436444596e-01 + 3.0594924875609852e-01 -3.4055649142498789e-01 -1.9317206599280295e-01 + 2.6595056442395437e-01 -4.1070150582241516e-01 -1.0184459460013924e-01 + 2.6355123457484630e-01 -4.7130670219147164e-01 -6.5612974861333467e-02 + 2.8152543694023036e-01 -5.3122345325488463e-01 -1.3106058258392544e-01 + 2.8596865138391503e-01 -5.7679357312437585e-01 -3.1454333894738112e-01 + 2.4940583142614844e-01 -5.7439547241837585e-01 -5.7984553444879772e-01 + 2.8005927074873360e-01 -5.6522305619461766e-01 -7.6851668587951116e-01 + id 14840 + loc 1.6747309267520905e-01 6.9760143756866455e-02 394 + blend 0.0000000000000000e+00 + interp 6.2164618206702049e-01:4.4492749647912422e-01:7.5453905821856515e-02:2.5606983825767887e-01:9.2134488628227129e-01:6.2163996560519985e-01:1.6539320514637081e+00:5.2818970318938119e-01:2.0001323726233395e+00:3.9655959978668143e-01:2.9083072050128607e+00:2.8861961206815667e-01:3.1730701200899936e+00 + CVs 20 + -9.6468686440869908e-02 1.9648408145305873e-01 2.3498880437896374e-01 + -1.8514418662956972e-01 3.9312297682035069e-01 4.8521339014960252e-01 + -2.6107881194075144e-01 5.8043261009906288e-01 7.4346007734187958e-01 + -3.2509325214311102e-01 7.6052572778436578e-01 1.0076818392575086e+00 + -3.8377718681973971e-01 9.3771800518243364e-01 1.2680729971084783e+00 + -4.4349784088884636e-01 1.1100449588429246e+00 1.5160038002989369e+00 + -5.1215552221316729e-01 1.2711641493148509e+00 1.7573301339209495e+00 + -5.9654850822496130e-01 1.4130083660811903e+00 1.9999660068318748e+00 + -6.9614600583883135e-01 1.5280831534442143e+00 2.2391265130876397e+00 + -7.9952551436286168e-01 1.6127856219315688e+00 2.4593878815540382e+00 + -8.8432995093504529e-01 1.6745863714362290e+00 2.6464111175133169e+00 + -9.3504983011770704e-01 1.7313419030578123e+00 2.7991772708026001e+00 + -9.7034644942637616e-01 1.7643498520721390e+00 2.9419409213415326e+00 + -1.0169385440393186e+00 1.6743672312818165e+00 3.1074436660881908e+00 + -1.0751079683958102e+00 1.3961955495721501e+00 3.3087116718109160e+00 + -1.1515709747984906e+00 9.9596992186983013e-01 3.5435534368578496e+00 + -1.2361649895709965e+00 6.0549698570992971e-01 3.7918765412347790e+00 + -1.2922903787094637e+00 3.0232626443267407e-01 4.0559290347265433e+00 + -1.3065018486980451e+00 8.4740364537728929e-02 4.4147644354992011e+00 + id 14841 + loc 5.8061504364013672e-01 3.6167708039283752e-01 405 + blend 0.0000000000000000e+00 + interp 3.8249684306112042e-01:3.4212119318009471e-01:1.9705299192709558e-01:3.8249301809268982e-01:9.9343662078950046e-01:3.2559437043856571e-01:1.6544630010876196e+00:2.7457825125990659e-01:2.3060107306526594e+00:3.2909500445612755e-01:3.0005087348071875e+00:3.6895431510138671e-01:3.7159263449032141e+00 + CVs 20 + 2.4904065520335257e-02 1.5992634540963088e-01 1.0912607657106426e-02 + 1.0241518878939369e-01 2.7888726610397296e-01 3.0956884038835966e-02 + 2.0265196212761050e-01 3.8633680937607329e-01 5.3595683329781978e-02 + 3.1323957048638990e-01 4.9036671767728957e-01 7.1968441419782064e-02 + 4.3826620379034914e-01 5.8819850319008005e-01 7.7869058134560645e-02 + 5.8044834032778136e-01 6.7689374034058958e-01 6.1630193124451484e-02 + 7.3973073318735594e-01 7.5296492802326076e-01 1.4419388698112528e-02 + 9.1317255584996149e-01 8.1321687434936885e-01 -6.9168096384026656e-02 + 1.0962951285635918e+00 8.5552746943149272e-01 -1.9098889943088052e-01 + 1.2844409017131277e+00 8.7881239064715944e-01 -3.5030131726845948e-01 + 1.4732388452157137e+00 8.8154775839146149e-01 -5.4509642666741231e-01 + 1.6586906587854822e+00 8.5956648109308387e-01 -7.7051521522075084e-01 + 1.8367085046284468e+00 8.0862402376681686e-01 -1.0206186768823933e+00 + 1.9992082478910569e+00 7.3307934261303054e-01 -1.2973812422919462e+00 + 2.1297817340260394e+00 6.5023009892534323e-01 -1.6145855113937142e+00 + 2.2052838664955021e+00 5.8376851410640340e-01 -1.9856427107026862e+00 + 2.2060342534312976e+00 5.5167974772596340e-01 -2.4026955323465131e+00 + 2.1267899952401170e+00 5.6001532542380528e-01 -2.8377067096770907e+00 + 2.1376722233021375e+00 5.1670618549920533e-01 -3.1150292329678635e+00 + id 14842 + loc 9.0547770261764526e-01 3.5336518287658691e-01 394 + blend 0.0000000000000000e+00 + interp 5.5557965209024529e-01:3.9895268537396428e-01:3.9955255622886598e-03:5.2989954394122563e-01:6.6169173731204167e-01:5.5557409629372445e-01:9.7861897382123442e-01:2.3075053318794259e-01:1.5780700605907962e+00:4.4689128676662260e-01:2.0600985240083065e+00:3.8916031761763564e-01:2.6805731704725808e+00:4.6890754937688195e-01:3.0032753930478298e+00:3.4704132864197246e-01:3.4928765223219247e+00 + CVs 20 + 3.0913303730579911e-01 2.3862874290251396e-01 2.7981236928877246e-01 + 5.5752663113158940e-01 4.2055057333911200e-01 5.2746687640511558e-01 + 7.8176146879109543e-01 5.7611513748104981e-01 7.6589108284005225e-01 + 9.9306445067800819e-01 7.2129350764483569e-01 9.9969647108894377e-01 + 1.1883883457755493e+00 8.6124878491059698e-01 1.2267734732084730e+00 + 1.3705457804918764e+00 1.0022870604634213e+00 1.4493397399061376e+00 + 1.5481508022927091e+00 1.1543727303755396e+00 1.6662244320942174e+00 + 1.7334560843626319e+00 1.3290431885122711e+00 1.8765377976331954e+00 + 1.9386664904244606e+00 1.5266564874239177e+00 2.0970561626895590e+00 + 2.1712734386930759e+00 1.7286121663893930e+00 2.3544398380506095e+00 + 2.4387630182578635e+00 1.9048697329552600e+00 2.6533577643106590e+00 + 2.7477423707939455e+00 2.0271164759526830e+00 2.9732547686255431e+00 + 3.0880330609781703e+00 2.0785151896031415e+00 3.3007826705889554e+00 + 3.4318498959319581e+00 2.0533339081105693e+00 3.6409016690362499e+00 + 3.7694852435678046e+00 1.9581228123759304e+00 3.9972233448461747e+00 + 4.1313468312918236e+00 1.8038905726976577e+00 4.3642761109115842e+00 + 4.5328913133901647e+00 1.5814114532445718e+00 4.7109900173291344e+00 + 4.9143890451709700e+00 1.2815207165732541e+00 4.9524902007636893e+00 + 5.1401037068233393e+00 9.5352543977344562e-01 4.9169443388506160e+00 + id 14843 + loc 1.7914070188999176e-01 9.1876262426376343e-01 405 + blend 0.0000000000000000e+00 + interp 4.6511216878673761e-01:3.5085675589594856e-01:1.7554361023752052e-01:4.6510751766504976e-01:8.3166775276684668e-01:3.4091750108770763e-01:1.2445556558935329e+00:3.0860537884056655e-01:1.9510641295592688e+00:4.4570048315873056e-01:2.2727576758932719e+00:3.4069234076582733e-01:3.0373525078129915e+00:2.9578943078744685e-01:3.7926674370046811e+00 + CVs 20 + 2.2379924700401627e-01 2.7603488167512280e-01 6.6168538124453571e-02 + 2.9597627244493918e-01 4.2633226348111952e-01 1.1637135916101175e-01 + 3.1306172229531337e-01 5.3327960954545106e-01 1.6522135706479094e-01 + 3.3681489554211358e-01 6.2248087423709964e-01 2.1449873464496341e-01 + 3.6516204020098397e-01 6.9571460744864688e-01 2.6091984147672620e-01 + 3.9811944977701952e-01 7.5782844890766854e-01 3.0582395890788300e-01 + 4.3706256863029841e-01 8.1241445401067902e-01 3.5754156778945712e-01 + 4.8319757265003521e-01 8.5763136790921712e-01 4.2753372461171829e-01 + 5.3766970940453040e-01 8.8717000408508473e-01 5.2397888998934528e-01 + 6.0191366520319234e-01 8.9442454204463129e-01 6.4959878251684011e-01 + 6.7749831063535959e-01 8.7522024875030990e-01 8.0264017974804591e-01 + 7.6527195513100899e-01 8.2759180671396271e-01 9.7893414027032222e-01 + 8.6268485306219334e-01 7.4792163959139613e-01 1.1745251323719093e+00 + 9.6378519103906868e-01 6.2928789225677118e-01 1.3874523721769316e+00 + 1.0648193429033908e+00 4.7213312434301152e-01 1.6171232275317811e+00 + 1.1674392916298204e+00 2.9402472217599251e-01 1.8616584504658951e+00 + 1.2741506960680795e+00 1.1748086627361681e-01 2.1157131047960389e+00 + 1.3856977761077580e+00 -4.4249938003173450e-02 2.3731768814857221e+00 + 1.4933442488398887e+00 -1.7432846407773217e-01 2.6073100274871743e+00 + id 14844 + loc 5.6408238410949707e-01 4.2324760556221008e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927260421233370e-01:4.5267712083310407e-01:7.8752380713622339e-02:4.3924847521507804e-01:8.3746032567358775e-01:4.5905552933344557e-01:1.1165311716417452e+00:3.5467436880606451e-01:1.8222186429932763e+00:4.6316026201413663e-01:2.1135169516790895e+00:4.7926781148629161e-01:2.7486282051205810e+00:4.1891997990216923e-01:3.0693434022126049e+00:2.4764476344446970e-01:3.8457150630981687e+00 + CVs 20 + 3.6172647835481786e-01 2.6310905566762410e-01 2.0175556385164994e-01 + 6.9790836499490316e-01 4.7798593355630359e-01 3.6344024383078877e-01 + 1.0243549536675176e+00 6.7443996077528667e-01 5.0653050353946272e-01 + 1.3478840372480925e+00 8.7238488975875594e-01 6.4551544467523270e-01 + 1.6627059673458393e+00 1.0756595199779613e+00 7.8760732903324360e-01 + 1.9632987593358777e+00 1.2793205551757165e+00 9.4015257742320402e-01 + 2.2467117629814046e+00 1.4733250162274845e+00 1.1098972408165921e+00 + 2.5110968446152633e+00 1.6476231867186515e+00 1.2999246458025955e+00 + 2.7575760422431790e+00 1.7970743269720750e+00 1.5115161069577538e+00 + 2.9934656475118624e+00 1.9177860020461348e+00 1.7510032390689914e+00 + 3.2249628292699204e+00 1.9940249934229919e+00 2.0272077087542133e+00 + 3.4437942078772616e+00 1.9981233557231231e+00 2.3369445143255190e+00 + 3.6315059560398542e+00 1.9100854595713095e+00 2.6608203407463153e+00 + 3.7733640373462394e+00 1.7262337884618359e+00 2.9755116958727332e+00 + 3.8603239175022583e+00 1.4633794767227166e+00 3.2635615254444397e+00 + 3.8942742223213207e+00 1.1649167926417445e+00 3.5213151636440223e+00 + 3.9008940617859027e+00 8.7645648129821119e-01 3.7566629992316831e+00 + 3.9286799220403883e+00 6.0459243361595982e-01 3.9870971987684038e+00 + 4.0076576195195326e+00 2.8266389184966423e-01 4.2544095628101317e+00 + id 14845 + loc 2.5200113654136658e-01 4.8137682676315308e-01 394 + blend 0.0000000000000000e+00 + interp 4.5610204682230682e-01:3.0217121549553305e-01:5.9329616345603220e-01:3.0429262924189043e-01:1.1838355779007450e+00:4.5609748580183862e-01:1.9768482160239573e+00:3.4001969580437674e-01:2.2711264045911093e+00:3.0356928855236737e-01:2.9869063570490408e+00:3.0791424771226322e-01:3.7680022101807742e+00 + CVs 20 + -1.8712256258055371e-01 1.4205845186280383e-01 2.3023910099567280e-01 + -3.8797804269406605e-01 2.7012361018057796e-01 4.3568749223615694e-01 + -6.0104752187955923e-01 4.0092892817451398e-01 6.3465887021865464e-01 + -8.1962794507552750e-01 5.4336993806781753e-01 8.3633184049250064e-01 + -1.0358763395875552e+00 6.9424006046674669e-01 1.0357897874064907e+00 + -1.2435121275432324e+00 8.4222087256967304e-01 1.2249566902143159e+00 + -1.4456147032788444e+00 9.7550528015659643e-01 1.4005175407751957e+00 + -1.6554018739807017e+00 1.0878238008934922e+00 1.5674529597673783e+00 + -1.8754393868385264e+00 1.1725809463368093e+00 1.7284584678812900e+00 + -2.0784047066357862e+00 1.2188186375436383e+00 1.8688001472422651e+00 + -2.2279382396335770e+00 1.2211762575141725e+00 1.9590975405388982e+00 + -2.3137504645166880e+00 1.1949931936081519e+00 1.9865037832902124e+00 + -2.3590100813846013e+00 1.1593765897333759e+00 1.9703679942291448e+00 + -2.4065890930355840e+00 1.1006554015243573e+00 1.9474923057524751e+00 + -2.4986687256904343e+00 9.6341388847315090e-01 1.9495546689579504e+00 + -2.6497210373087992e+00 6.9870017912039217e-01 1.9989823393015245e+00 + -2.8564809227731911e+00 2.8533368250246105e-01 2.1534518394493687e+00 + -3.0799822727617272e+00 -2.0335398030239094e-01 2.4800381521061752e+00 + -3.2538114370990665e+00 -5.1668756825669937e-01 2.7102202786883720e+00 + id 14846 + loc 8.4390896558761597e-01 9.5080935955047607e-01 394 + blend 0.0000000000000000e+00 + interp 4.6243540956084467e-01:3.1335472545879772e-01:3.3922596057820664e-02:4.6243078520674907e-01:8.8191963556716768e-01:3.2137040417761054e-01:1.1941715644832742e+00:2.9990314291168441e-01:2.1244347312127241e+00:2.5998540783766072e-01:3.0009043296765139e+00:3.9081999552037450e-01:3.4686137994019974e+00 + CVs 20 + -2.1395041583342933e-01 1.4856421317400476e-01 -2.2473356931084196e-01 + -4.1439467452105305e-01 3.3220045725238906e-01 -4.7543759782795381e-01 + -6.1435655491403374e-01 5.3333039387863967e-01 -7.2917438374274557e-01 + -8.1490103113836732e-01 7.4005596625578329e-01 -9.7776142915953645e-01 + -1.0197761787994490e+00 9.4755686782804793e-01 -1.2224879023772985e+00 + -1.2328882636599541e+00 1.1514244546793446e+00 -1.4643426726530393e+00 + -1.4567872586744381e+00 1.3431563937388622e+00 -1.7095053663235795e+00 + -1.6936481179444773e+00 1.5065936500367696e+00 -1.9721205605284755e+00 + -1.9520351727039094e+00 1.6192567757073468e+00 -2.2642033354700049e+00 + -2.2464173080831102e+00 1.6518638596886157e+00 -2.5811630637087464e+00 + -2.5780066198454379e+00 1.5780380973494657e+00 -2.8977317472974047e+00 + -2.9276129426833295e+00 1.3984154135732447e+00 -3.1837431606139517e+00 + -3.2796951821347533e+00 1.1355518786553469e+00 -3.4224693518486342e+00 + -3.6324988889153058e+00 8.0917737899263464e-01 -3.6043281800235816e+00 + -3.9806815057237355e+00 4.2715314153271100e-01 -3.7247466268796723e+00 + -4.3026432589456070e+00 -1.6435424623042927e-02 -3.7913876151264536e+00 + -4.5726361710427241e+00 -5.2012295326658275e-01 -3.8188270729291292e+00 + -4.7927950264719321e+00 -1.0425235432365088e+00 -3.8329828805566182e+00 + -5.0581100547487372e+00 -1.4477265739738923e+00 -3.8963588252912569e+00 + id 14847 + loc 3.7998744845390320e-01 7.0239984989166260e-01 394 + blend 0.0000000000000000e+00 + interp 4.6518110634017878e-01:3.7879678379812243e-01:8.3312142236449216e-01:4.2961646076082322e-01:1.3560680668798011e+00:4.6074092730963079e-01:2.0438265631455175e+00:4.6517645452911538e-01:2.8560731926393395e+00:4.0282294070824165e-01:3.4878760717852515e+00:2.6387195247784534e-01:3.9855746958844973e+00 + CVs 20 + -1.4630372933674318e-01 2.0095371020291433e-01 -2.3044683876077116e-01 + -2.8281189789439298e-01 4.2042731557059931e-01 -4.3852552412920065e-01 + -4.0801835229512662e-01 6.6530498965056573e-01 -6.2430185286837347e-01 + -5.2249447296748597e-01 9.3710021674368271e-01 -7.9012107397094189e-01 + -6.3008614382649630e-01 1.2343520403326287e+00 -9.4351101905952628e-01 + -7.3740181343318900e-01 1.5551220104090620e+00 -1.1016511332781240e+00 + -8.5103132360145406e-01 1.8923929938258821e+00 -1.2864176272537899e+00 + -9.7686140508098429e-01 2.2346786075851792e+00 -1.5124304434928519e+00 + -1.1245765089181614e+00 2.5727210493670554e+00 -1.7911758147484615e+00 + -1.3069492213296443e+00 2.8899428816768618e+00 -2.1492741098056514e+00 + -1.5235253802304713e+00 3.1369140066451733e+00 -2.6232103678432459e+00 + -1.7494255485952253e+00 3.2352496992988335e+00 -3.2191478155255395e+00 + -1.9493410305889727e+00 3.1200899153712580e+00 -3.8865814075897962e+00 + -2.0894289916158115e+00 2.8021375576179448e+00 -4.5247699302805886e+00 + -2.1664512533613589e+00 2.3825779337922688e+00 -5.0631120896059878e+00 + -2.2290119341401997e+00 1.9465147349503424e+00 -5.5079240421212319e+00 + -2.3601542521813830e+00 1.5405806214497542e+00 -5.8803188438417244e+00 + -2.6042752187944105e+00 1.2004757012703604e+00 -6.1899020086861576e+00 + -2.7402326334025116e+00 8.9290973904275539e-01 -6.4747706022775651e+00 + id 14848 + loc 7.3359954357147217e-01 6.1955428123474121e-01 405 + blend 0.0000000000000000e+00 + interp 3.6340752400893389e-01:3.6340388993369382e-01:2.1187196618013482e-01:3.6306689641907558e-01:9.6719088422408217e-01:3.1469921520953026e-01:1.7004636168302385e+00:3.4329184705357479e-01:2.3775004857757911e+00:3.5679844095043289e-01:3.0017220298876870e+00:3.1119475323017515e-01:3.7671059605984105e+00 + CVs 20 + 5.0512595659743184e-02 2.1455144405904741e-01 -6.9281221997037363e-03 + 3.0182928195417902e-02 3.3614853631873465e-01 -1.8500112029524132e-02 + -2.9208796903341494e-02 4.3137784436930338e-01 -4.0201459495533373e-02 + -8.2087089344086622e-02 5.1747663460421478e-01 -7.2370141314747491e-02 + -1.2936552917272393e-01 5.9370493924801615e-01 -1.1420752836324419e-01 + -1.7344373104004487e-01 6.6566914709520475e-01 -1.6609972555147778e-01 + -2.1997113237032143e-01 7.4894537615377199e-01 -2.2405763123479261e-01 + -2.7855021072248609e-01 8.6163292600062502e-01 -2.6526027973213717e-01 + -3.5216294756353261e-01 9.9613483119803692e-01 -2.5250561753957002e-01 + -4.3065208195294419e-01 1.1235146724958749e+00 -1.7269914437977971e-01 + -5.0265829068020307e-01 1.2301586130322206e+00 -3.7372653996138108e-02 + -5.6127053566241603e-01 1.3181407621053176e+00 1.4085721919957600e-01 + -6.0422903654728266e-01 1.3901830715567476e+00 3.5377705894105216e-01 + -6.3393867794989522e-01 1.4453510507660345e+00 5.8946022218726857e-01 + -6.5562784203840374e-01 1.4887561749318043e+00 8.2626790409907891e-01 + -6.7440070304009203e-01 1.5325717124525882e+00 1.0435679128903115e+00 + -6.9264010654187236e-01 1.5839213506571250e+00 1.2339596667031263e+00 + -7.1102144704188930e-01 1.6414675777419807e+00 1.3956550437227064e+00 + -6.9645107940051898e-01 1.7361529131256432e+00 1.5196383493974670e+00 + id 14849 + loc 5.5294233560562134e-01 8.5668665170669556e-01 394 + blend 0.0000000000000000e+00 + interp 4.6260574826267803e-01:4.6260112220519545e-01:8.3219217301232484e-01:4.0543135747297276e-01:1.3980060396696057e+00:3.5719677405205941e-01:2.0150949816266905e+00:4.5265648388607516e-01:2.6897692180278963e+00:2.9722036601400664e-01:3.0286982918894862e+00:2.4505198616729687e-01:3.8998952144510257e+00 + CVs 20 + -2.0196392769247096e-01 1.3086705907009513e-01 -8.8344885444310281e-02 + -4.0683216996221100e-01 2.6778596259415810e-01 -1.9757784297188138e-01 + -6.0417458127500068e-01 4.0886542906213608e-01 -3.2520476599080655e-01 + -7.8596384078793080e-01 5.5275074637429500e-01 -4.7036696938321698e-01 + -9.4558339152900683e-01 6.9765655819681305e-01 -6.3489904325417790e-01 + -1.0779459743796251e+00 8.4281870518686719e-01 -8.1931658021519438e-01 + -1.1851240346903675e+00 9.9505080934572654e-01 -1.0207974780824438e+00 + -1.2742714314355348e+00 1.1645680168953900e+00 -1.2359715617304157e+00 + -1.3506586424232623e+00 1.3516878385299957e+00 -1.4704352229653408e+00 + -1.4171868948482911e+00 1.5425427376354102e+00 -1.7400801114333435e+00 + -1.4829071268892253e+00 1.7169426512725185e+00 -2.0580396307003204e+00 + -1.5638036910983060e+00 1.8531268922730855e+00 -2.4246999347390874e+00 + -1.6687189620860901e+00 1.9332012606229108e+00 -2.8318231833566450e+00 + -1.7975282829673320e+00 1.9475919068939858e+00 -3.2737537177967093e+00 + -1.9595632009952719e+00 1.8889262368610227e+00 -3.7432609685544591e+00 + -2.1805531635371640e+00 1.7495863299876240e+00 -4.2191849464544386e+00 + -2.4757347462569239e+00 1.5144461635883542e+00 -4.6690977345595615e+00 + -2.8189859747543942e+00 1.1694398868204905e+00 -5.0517342828052874e+00 + -3.0938426397051408e+00 8.8866753005057575e-01 -5.3124241672522547e+00 + id 14850 + loc 2.7881184220314026e-01 8.8361513614654541e-01 394 + blend 0.0000000000000000e+00 + interp 4.7470514368242595e-01:4.6568121700274506e-01:5.5046473599477230e-02:3.0137191862752860e-01:8.9241743933796092e-01:4.1607886115201081e-01:1.1563182938687599e+00:3.1627087590534098e-01:1.8321031915324912e+00:3.2038296407126077e-01:2.1634293839568928e+00:4.7470039663098912e-01:2.8235225922393083e+00:4.0918285293680939e-01:3.3632326403973170e+00 + CVs 20 + -2.4660184230537346e-01 2.5156671903131805e-01 -2.0300645009585880e-01 + -4.8075322175221979e-01 4.9315718564468419e-01 -3.9500462771116551e-01 + -7.1432085776269627e-01 7.2963319341218547e-01 -5.7524095463202363e-01 + -9.4954699767643236e-01 9.5751042419716170e-01 -7.4686509780775712e-01 + -1.1849154703600107e+00 1.1698518035078216e+00 -9.1490058220383441e-01 + -1.4220615102828682e+00 1.3605380068692288e+00 -1.0851954312401542e+00 + -1.6672123442834514e+00 1.5249213336002172e+00 -1.2646242308764077e+00 + -1.9289250517058225e+00 1.6576531051664238e+00 -1.4597104312210032e+00 + -2.2136451318145767e+00 1.7502632632335029e+00 -1.6740932180977042e+00 + -2.5230513153519940e+00 1.7921638015716228e+00 -1.9078411322415720e+00 + -2.8525557079085440e+00 1.7756345020038542e+00 -2.1566243848949771e+00 + -3.1918599558464495e+00 1.7002747875036865e+00 -2.4115332071725843e+00 + -3.5296556422105336e+00 1.5699410981079018e+00 -2.6649741903538908e+00 + -3.8574420585187745e+00 1.3864137863745101e+00 -2.9176982339238826e+00 + -4.1596151186597625e+00 1.1546065950424138e+00 -3.1582181941862997e+00 + -4.4048296528506716e+00 9.1617089631462334e-01 -3.3368977136462163e+00 + -4.5641156194923624e+00 7.3626016361738733e-01 -3.3822984857390304e+00 + -4.6753577551266794e+00 5.7509688862074948e-01 -3.3299200097984745e+00 + -4.8911951500681337e+00 5.0298685232843399e-01 -3.5534537831213120e+00 + id 14851 + loc 6.8260669708251953e-01 5.2965617179870605e-01 405 + blend 0.0000000000000000e+00 + interp 3.8731917183330666e-01:3.4851147449116943e-01:2.7385465274854726e-01:3.8731529864158837e-01:1.0000854872573526e+00:3.1933695214969721e-01:1.6498981670413477e+00:3.6340388993369382e-01:2.2146277692279930e+00:3.2134409490302251e-01:2.9767935696758361e+00:3.4993222747923103e-01:3.6189601625651280e+00 + CVs 20 + 3.4603425260531270e-02 2.1705434611289481e-01 -1.9679526910765049e-02 + -1.2111156409296886e-02 3.6503720936868056e-01 -2.7644512736987172e-02 + -8.6596180120297711e-02 4.9264590308900413e-01 -2.6687169612773256e-02 + -1.6026489007584399e-01 6.1250877637384205e-01 -1.3528161177388129e-02 + -2.3228213537530754e-01 7.1552978490363650e-01 1.7589189067901495e-02 + -2.9966124336237443e-01 7.9080783063492399e-01 7.1559118989713053e-02 + -3.5680245601810145e-01 8.2939957034753375e-01 1.4872837187169488e-01 + -3.9861849841676855e-01 8.3192730894326228e-01 2.4450326479667164e-01 + -4.2445402387166375e-01 8.0907090214876776e-01 3.5705780397017162e-01 + -4.3499798935999595e-01 7.7063642396086729e-01 4.9086913373458901e-01 + -4.2865257074603785e-01 7.1910661511369867e-01 6.4893233148092067e-01 + -4.0340764351964686e-01 6.5320956350701609e-01 8.2919291821798924e-01 + -3.5482334802269239e-01 5.7724089927154676e-01 1.0314409059829865e+00 + -2.7243808049468760e-01 5.1457203379198690e-01 1.2626199942251108e+00 + -1.4484055599608814e-01 5.0425560960507110e-01 1.5211005649439322e+00 + 2.3087802797401705e-02 5.7332294772670389e-01 1.7790192028829981e+00 + 2.0676016439658193e-01 7.1812070311469245e-01 2.0045702685478366e+00 + 3.7116735602137202e-01 9.1841306996051286e-01 2.1904015838711657e+00 + 4.5312951525159595e-01 1.0638109836879186e+00 2.4031288009936413e+00 + id 14852 + loc 6.4074754714965820e-01 6.5212774276733398e-01 394 + blend 0.0000000000000000e+00 + interp 4.7387907094012521e-01:4.7387433214941582e-01:9.8894826835229432e-02:4.3618419578518153e-01:9.0029080311896648e-01:4.1654641716155344e-01:1.5861903817322900e+00:3.8277586004185044e-01:2.0490609952144894e+00:4.0680995989348201e-01:2.9692459571043384e+00:2.5832091321148887e-01:3.3034224688588347e+00 + CVs 20 + -2.1943649709212301e-01 2.1922129601049384e-01 -2.5726967920445598e-01 + -4.2788178077731148e-01 4.4529034154411307e-01 -5.2513754062652152e-01 + -6.3228035173384967e-01 6.7935776624973154e-01 -8.0592777473700616e-01 + -8.3051481370133573e-01 9.1688403523040629e-01 -1.1041689967654094e+00 + -1.0209633263597286e+00 1.1493318833915929e+00 -1.4244725406879450e+00 + -1.2119231517051907e+00 1.3687544004190100e+00 -1.7687511893635510e+00 + -1.4139333690894940e+00 1.5626325683476185e+00 -2.1369390106231609e+00 + -1.6309711112583458e+00 1.7064112744963724e+00 -2.5285404095795192e+00 + -1.8651346364275678e+00 1.7709807597400946e+00 -2.9375328858721987e+00 + -2.1222953931039634e+00 1.7382516439785147e+00 -3.3456983852911870e+00 + -2.4005107794179503e+00 1.6094272208557199e+00 -3.7266640921314593e+00 + -2.6837035023317437e+00 1.4057086963581984e+00 -4.0612036069984274e+00 + -2.9623297631714025e+00 1.1545329840309551e+00 -4.3436197412348019e+00 + -3.2487722844754554e+00 8.7241094273963382e-01 -4.5650468576912013e+00 + -3.5549264206700744e+00 5.6740070702209389e-01 -4.7063294332588281e+00 + -3.8607444312217920e+00 2.4114562192159772e-01 -4.7485618534749330e+00 + -4.1242060386340436e+00 -1.0244348790658098e-01 -4.6882036886584801e+00 + -4.3329389407065033e+00 -4.3285683810303155e-01 -4.5572029015861633e+00 + -4.5775486503963050e+00 -6.7434955969546406e-01 -4.5252371408067908e+00 + id 14853 + loc 1.0279191657900810e-02 5.3283411264419556e-01 405 + blend 0.0000000000000000e+00 + interp 4.4280091622105505e-01:1.9710720428745021e-01:4.0587902948126875e-01:4.4279648821189288e-01:1.2591773619724862e+00:2.5361502916546325e-01:1.9378093333676993e+00:3.2619242908809032e-01:2.0026545249395649e+00:4.1556086231407624e-01:2.7924960799033212e+00:3.3830290149467712e-01:3.4345103211260630e+00 + CVs 20 + 9.2818238044260731e-02 1.9656549289191383e-01 1.0671152498442747e-01 + 9.4177458077434245e-02 3.4329431916407316e-01 1.6896800779543619e-01 + 7.1735786864547124e-02 4.6870845138385564e-01 2.2758674993964925e-01 + 5.0409974028151949e-02 5.8996111644106053e-01 3.0234053495799046e-01 + 2.8074782546229027e-02 7.0604851239763611e-01 3.9474882774552261e-01 + 3.7487585767344012e-03 8.1516192194345871e-01 5.0531575811180107e-01 + -2.2712207074484569e-02 9.1503226291551520e-01 6.3311420795149853e-01 + -5.0975802186552788e-02 1.0035557224757614e+00 7.7612581544646320e-01 + -8.0443287581450806e-02 1.0789519893933615e+00 9.3179688278200024e-01 + -1.1064719213698321e-01 1.1401774894459751e+00 1.0977869964962577e+00 + -1.4100918936497975e-01 1.1879978902755806e+00 1.2735360172912396e+00 + -1.7103960842489302e-01 1.2247566871271198e+00 1.4599731972267400e+00 + -2.0344227875188453e-01 1.2490456880908978e+00 1.6532167486705382e+00 + -2.4620696147592314e-01 1.2519133717576476e+00 1.8399762578908712e+00 + -3.0713180461093831e-01 1.2273487240941112e+00 2.0108497605883398e+00 + -3.8527108716733188e-01 1.1841171962497523e+00 2.1757716259247024e+00 + -4.7095473813226973e-01 1.1388748018664456e+00 2.3506362727900667e+00 + -5.4729759364889186e-01 1.1048853919160568e+00 2.5387297459282907e+00 + -5.3231255710241354e-01 1.1516443976225961e+00 2.7435076182092843e+00 + id 14854 + loc 3.3188733458518982e-01 1.3747660815715790e-01 405 + blend 0.0000000000000000e+00 + interp 5.1222135350929465e-01:4.7581980745961044e-01:2.9890148207911693e-03:3.6391627927827258e-01:6.1880257745034584e-01:5.1221623129575955e-01:1.0676241759455085e+00:3.4517602271207543e-01:1.8885886299614381e+00:4.2152420616766184e-01:2.5515951464991140e+00:3.2505811842036042e-01:2.9966442412045837e+00:3.2279518025203180e-01:3.4957896312848060e+00 + CVs 20 + -8.3377975083996206e-02 -4.2347529116485740e-03 5.7471967575769459e-02 + -1.6064387786454104e-01 -8.4554148059456588e-02 7.7834183551202807e-02 + -2.5896222892532528e-01 -1.5106017886853090e-01 1.3763445191057114e-01 + -3.6711323328394480e-01 -2.1290429479253065e-01 1.9211352164403805e-01 + -4.8487161802771089e-01 -2.7068700964172410e-01 2.3247056894266521e-01 + -6.1702540883187562e-01 -3.1872432578259513e-01 2.5652932092983444e-01 + -7.7241378266252059e-01 -3.4385641733598671e-01 2.6442281146680674e-01 + -9.5959941768945090e-01 -3.2397339364034999e-01 2.6050917237256171e-01 + -1.1771337764361298e+00 -2.3127430588583658e-01 2.5603315967950002e-01 + -1.4025099363106868e+00 -4.6519719041429486e-02 2.7023569771724487e-01 + -1.5952139390165019e+00 2.1963009942633477e-01 3.2619651428177460e-01 + -1.7213891655630045e+00 5.2279509876782870e-01 4.3383491589664636e-01 + -1.7733288326423544e+00 8.1388639556044784e-01 5.8376852912506427e-01 + -1.7614670492009947e+00 1.0643008746660374e+00 7.5866163840646084e-01 + -1.6983461708321932e+00 1.2663083151096979e+00 9.4368867533507050e-01 + -1.5944087656898314e+00 1.4237957306059355e+00 1.1234766605224364e+00 + -1.4590301168892239e+00 1.5426586004515839e+00 1.2867073312075115e+00 + -1.2990159751724888e+00 1.6272538834628854e+00 1.4332239187049465e+00 + -1.2377192213718562e+00 1.6240800505171373e+00 1.4663725424813450e+00 + id 14855 + loc 4.3481573462486267e-01 8.5948988795280457e-02 394 + blend 0.0000000000000000e+00 + interp 4.1192953414933697e-01:3.8069273520664554e-01:3.0139258175858485e-01:2.7006048031171920e-01:1.0820983883554869e+00:3.2391943972794923e-01:2.0192979351382521e+00:4.1192541485399548e-01:3.0584300057648637e+00:2.7530584652172629e-01:3.5476915755384546e+00 + CVs 20 + -1.7359428499530441e-01 2.0413747735138177e-01 2.2349692705947652e-01 + -3.1696411717526118e-01 3.9583873846357975e-01 4.7757231078637274e-01 + -4.3860190489944340e-01 5.7946200033474282e-01 7.5892552731075114e-01 + -5.4739581273574112e-01 7.6731902546431496e-01 1.0679333297404461e+00 + -6.5251326635992191e-01 9.6759935548698506e-01 1.3985471601633508e+00 + -7.6803207202627255e-01 1.1750882877711344e+00 1.7438530623750488e+00 + -9.1332194636753750e-01 1.3754662055887346e+00 2.1067276867134495e+00 + -1.1070210129964613e+00 1.5511764456466297e+00 2.4875585584850235e+00 + -1.3542404190671173e+00 1.6800549849257278e+00 2.8716894060539477e+00 + -1.6363569845396491e+00 1.7378292702167832e+00 3.2350164202627494e+00 + -1.9174769044513928e+00 1.7073981251951866e+00 3.5563492927302449e+00 + -2.1625369770143941e+00 1.5841599697614970e+00 3.8199222942388440e+00 + -2.3569474986936196e+00 1.3805316614493353e+00 4.0196689517838688e+00 + -2.5342873500602483e+00 1.1201905932940408e+00 4.1758554753122841e+00 + -2.7530738416675327e+00 8.2641476676964709e-01 4.3214301844747709e+00 + -3.0207613753872398e+00 5.5375676389473361e-01 4.4704586513992437e+00 + -3.2753126961890375e+00 3.7353900015922958e-01 4.6201179287326486e+00 + -3.4721765985260458e+00 2.8283631561984546e-01 4.7542944907580935e+00 + -3.7363921521257288e+00 1.1013792564106240e-01 4.8539989366052758e+00 + id 14856 + loc 5.5940955877304077e-01 5.3304535150527954e-01 405 + blend 0.0000000000000000e+00 + interp 3.8731917183330666e-01:3.2972553981284386e-01:1.8777610055483851e-01:3.3407034638749855e-01:9.8797591120275408e-01:3.6697119339059497e-01:1.7601002637907703e+00:3.2213447421130714e-01:2.3763770340110604e+00:3.8731529864158837e-01:3.0000431263126961e+00:3.6373848166398720e-01:3.6802977498299780e+00 + CVs 20 + 1.9959869468326452e-02 1.6744856496331961e-01 2.4021822104195262e-02 + -1.7790832942203239e-02 2.3771710371787652e-01 5.8404004591459058e-02 + -8.8483216442415399e-02 2.6551912573201791e-01 9.4663515717152438e-02 + -1.4676125448116223e-01 2.5999764576537249e-01 1.2239091189765373e-01 + -1.8709896211363858e-01 2.2034410170036633e-01 1.2271836236157781e-01 + -2.0950819402510207e-01 1.5829970783873984e-01 7.3923547773367043e-02 + -2.2630410578001314e-01 9.9149622481470648e-02 -3.0956938789376429e-02 + -2.5859481788886751e-01 6.3230448811356213e-02 -1.6983274320985597e-01 + -3.2017747463593815e-01 4.7679046887840359e-02 -3.0648451776265945e-01 + -4.1124643416211765e-01 3.4907637405420799e-02 -4.1617839826211345e-01 + -5.2360105881741115e-01 1.2097600684577464e-02 -4.9319564950729639e-01 + -6.4677804289170648e-01 -2.2891755814213710e-02 -5.4197856450806248e-01 + -7.7745822603857118e-01 -7.9105810348943317e-02 -5.5729495085750025e-01 + -9.2032936207782934e-01 -1.9875046548504843e-01 -5.0571818448452810e-01 + -1.0685134925365383e+00 -4.2804920026012977e-01 -3.3966251563940530e-01 + -1.1912513599239196e+00 -7.4471963815211817e-01 -3.6860913004522031e-02 + -1.2549153249567806e+00 -1.0737855874501667e+00 3.8101637899543317e-01 + -1.2406014583503688e+00 -1.3555580348648590e+00 8.6341905490940996e-01 + -1.2111442055041808e+00 -1.4718766414644020e+00 1.1209182514457350e+00 + id 14857 + loc 1.3591121137142181e-01 6.9726216793060303e-01 394 + blend 0.0000000000000000e+00 + interp 4.2606907682770784e-01:4.1463610925409666e-01:1.0054282704174966e-06:4.2606481613693958e-01:8.4605361629835274e-01:2.5891359808616776e-01:1.4783223426472323e+00:2.7660362942250855e-01:2.0709210910220137e+00:3.4883534012223627e-01:3.0656570871012381e+00 + CVs 20 + -1.1213162739841065e-01 2.2010732334852856e-01 -2.6839872282565252e-01 + -2.2397850387186688e-01 4.6070315424786051e-01 -5.4223738474441319e-01 + -3.3564428808986729e-01 7.2925709733446220e-01 -8.0441330190037164e-01 + -4.4728967504325723e-01 1.0196867523295723e+00 -1.0499354538841381e+00 + -5.5712241002435681e-01 1.3124948788663411e+00 -1.2856045690938496e+00 + -6.6108672999604079e-01 1.5798636270762310e+00 -1.5251703579225540e+00 + -7.6316467957214462e-01 1.8095778023895142e+00 -1.7824231157665209e+00 + -8.7841829176935926e-01 2.0085027216077145e+00 -2.0651500160711920e+00 + -1.0045900204729641e+00 2.1609310877440024e+00 -2.3680251950294604e+00 + -1.0978708473591903e+00 2.2180165006452022e+00 -2.6684814139303188e+00 + -1.1162973594889358e+00 2.1559936406982665e+00 -2.9359297186414479e+00 + -1.0768247037894958e+00 1.9988309629655079e+00 -3.1610560999792945e+00 + -1.0152003416732107e+00 1.7689611322694410e+00 -3.3566660831355564e+00 + -9.5525433997310283e-01 1.4860642032237434e+00 -3.5483424314862022e+00 + -9.3824155714307822e-01 1.1438802177375558e+00 -3.7781861182370484e+00 + -1.0588322182554304e+00 6.9675257258092493e-01 -4.0791227429934480e+00 + -1.4408255698355765e+00 1.6865084497917771e-01 -4.4297415770841218e+00 + -1.9929593427031818e+00 -2.6082076311002167e-01 -4.7419945401508938e+00 + -2.1913180265901424e+00 -4.9434236176815061e-01 -4.9861282117005263e+00 + id 14858 + loc 5.2574867010116577e-01 4.5115444809198380e-02 405 + blend 0.0000000000000000e+00 + interp 3.8519209239808777e-01:3.3288200129920131e-01:4.0741837593189612e-01:2.9130696340886142e-01:1.3491296226573830e+00:2.8034929413045151e-01:2.0161713818560045e+00:3.8518824047716382e-01:3.0084626010514981e+00:3.2137952057519309e-01:3.8341045239422975e+00 + CVs 20 + -2.4655985874329909e-02 7.3929868025569973e-02 3.0351644226622246e-02 + -4.1001549580777716e-02 1.4672378573113512e-01 4.3044865533017465e-02 + -5.3935887637379179e-02 2.1513610879270384e-01 3.6991946275779106e-02 + -7.1325117458819823e-02 2.9394883954269413e-01 1.5534609349512930e-02 + -8.9667982712013983e-02 3.8428511357421113e-01 -1.8261825366336047e-02 + -1.0620241852926413e-01 4.8470557306158402e-01 -6.0508697703591414e-02 + -1.2050239909621152e-01 5.9039034565207049e-01 -1.0838889387267064e-01 + -1.3484156707310646e-01 6.9485755949138917e-01 -1.6085314970327358e-01 + -1.5444133954429151e-01 7.9099080804670430e-01 -2.1710259880266361e-01 + -1.9019420512834334e-01 8.6880137350216302e-01 -2.7399470831339190e-01 + -2.5941271629599433e-01 9.1728327101812901e-01 -3.2011370996560196e-01 + -3.7660490555446996e-01 9.3177401141778748e-01 -3.2930116242421859e-01 + -5.3244429894716261e-01 9.2207540349499528e-01 -2.7042214704128958e-01 + -6.8845602588072285e-01 9.0827340042652660e-01 -1.4179827039896001e-01 + -8.1167897341781747e-01 9.0308001028087936e-01 1.4341556032285235e-02 + -9.0055649442646779e-01 9.0369963013438781e-01 1.5530438460275933e-01 + -9.6307480127638123e-01 9.0276661908924805e-01 2.7738600496260213e-01 + -9.9660210414603734e-01 8.9811961356195902e-01 3.9286884423747664e-01 + -1.0542148169709573e+00 8.6883508992678526e-01 3.5508770756104963e-01 + id 14859 + loc 8.4860378503799438e-01 6.1229246854782104e-01 405 + blend 0.0000000000000000e+00 + interp 4.6430250298037939e-01:3.3013088895119330e-01:3.9285784503233312e-01:3.5679844095043289e-01:1.0019370807513288e+00:3.2058756154923568e-01:1.7959755400900979e+00:4.6429785995534961e-01:2.2745540558596535e+00:3.1116324307376730e-01:3.0098330249645264e+00:2.6455286543739465e-01:3.8999403446943397e+00 + CVs 20 + 5.9222132729166030e-02 2.1501345509964950e-01 -6.0909912500217503e-03 + 5.5659445792760442e-02 3.5545372586194740e-01 1.6192770196807926e-02 + 1.0929956277581143e-02 4.6826951080037088e-01 5.2652542100297073e-02 + -2.4715864096620521e-02 5.7319844678628817e-01 1.0359809591263995e-01 + -4.8492179410350694e-02 6.5904505253340917e-01 1.6966201404820255e-01 + -5.7307984573861881e-02 7.0797010792595327e-01 2.4772824960463907e-01 + -4.3586784578626164e-02 6.9265881093199522e-01 3.2417761689205649e-01 + 5.3417669254416933e-03 5.8393863387242539e-01 3.5869694058778429e-01 + 9.3240779297804388e-02 3.9541054502323641e-01 2.8014399800116951e-01 + 1.8752696439886432e-01 2.2270525244472056e-01 8.1539651903529742e-02 + 2.5936759044129387e-01 1.1747517579009850e-01 -1.3071691693145582e-01 + 3.2261938999284828e-01 4.2952398931044897e-02 -2.9415837465315942e-01 + 3.9870569460992911e-01 -3.3453953994067143e-02 -4.1432268279997203e-01 + 4.9964261695173506e-01 -1.2579934265900289e-01 -5.0313265147045216e-01 + 6.3418828235515445e-01 -2.4855394699443176e-01 -5.5102161634898117e-01 + 8.1470324832359586e-01 -4.0881837592699904e-01 -5.4045342178175826e-01 + 1.0523592187285782e+00 -5.8351918919703250e-01 -4.7298196289896438e-01 + 1.3444805894636640e+00 -7.3006533014153696e-01 -3.7730694162534539e-01 + 1.6356982549350287e+00 -8.5599529751795400e-01 -2.8468789660779675e-01 + id 14860 + loc 1.3482384383678436e-01 3.7432956695556641e-01 394 + blend 0.0000000000000000e+00 + interp 5.8345404731387995e-01:2.5829666343337282e-01:6.6235989491523029e-01:3.4662029861377114e-01:1.4209146064142359e+00:5.8344821277340686e-01:1.9949739138959142e+00:4.0769805562421013e-01:2.9584006166973946e+00:3.0300189933514254e-01:3.6034469517695773e+00 + CVs 20 + -1.0640036496221575e-01 2.7318312664258637e-01 2.9141910090907730e-01 + -2.0928121492381097e-01 5.5651849839612710e-01 5.2810364418096711e-01 + -2.9574932789501468e-01 8.5858456162330909e-01 7.3364028554833960e-01 + -3.6140624227184670e-01 1.1834155245750193e+00 9.1987765517640074e-01 + -4.1183221397908437e-01 1.5294506866737780e+00 1.0940597677424790e+00 + -4.6028781775582195e-01 1.8955962609720043e+00 1.2706025032235861e+00 + -5.2407479750188801e-01 2.2770447760873855e+00 1.4660768744034294e+00 + -6.1538155577012166e-01 2.6612224518165135e+00 1.6926453798650298e+00 + -7.4617231076417889e-01 3.0397198907868668e+00 1.9705830468951806e+00 + -9.4744295156748770e-01 3.4034509471705419e+00 2.3409216889699787e+00 + -1.2639767366252372e+00 3.7032060500809219e+00 2.8346657153277217e+00 + -1.7072301136575159e+00 3.8427156082077869e+00 3.4231917521759785e+00 + -2.2058533014765689e+00 3.7508982334375514e+00 4.0147541056815363e+00 + -2.6323640846400398e+00 3.4718336376345520e+00 4.5034200121718655e+00 + -2.9097527693241894e+00 3.1406888613478494e+00 4.8370820491752768e+00 + -3.0276318526702899e+00 2.8937829190012314e+00 4.9971529677683453e+00 + -3.0272286303371363e+00 2.7683169392587343e+00 4.9896341750244257e+00 + -2.9883655663650126e+00 2.6250346798579818e+00 4.9556917347913734e+00 + -2.9663306060309171e+00 2.2860074499128218e+00 5.1973370750983072e+00 + id 14861 + loc 9.5241397619247437e-01 1.7531467974185944e-01 405 + blend 0.0000000000000000e+00 + interp 4.1557697527461707e-01:4.1557281950486435e-01:1.0024352854044782e+00:3.5633833959649619e-01:1.8407720635008777e+00:3.6969621851383033e-01:2.0989713895247091e+00:3.2144309938698262e-01:2.7773008636661602e+00:2.9238566993262743e-01:3.1400558897850748e+00:3.5966743423495356e-01:3.9999151467504630e+00 + CVs 20 + -2.1007471084328128e-02 7.5092855074222739e-02 8.3752625001139613e-02 + -2.9339830257917643e-02 1.3571156272511065e-01 1.5964309716758054e-01 + -3.8864530909680298e-02 1.7499785249956387e-01 2.2582166665757356e-01 + -5.6708037113804441e-02 2.1354233343151882e-01 2.9730571320042926e-01 + -7.9266497430257515e-02 2.5853155170812281e-01 3.7843296333392362e-01 + -9.9832659231399279e-02 3.1618610240965650e-01 4.7481464250271865e-01 + -1.0795987979663602e-01 3.9016877183575660e-01 5.9168196205270929e-01 + -9.0596604397585268e-02 4.8003229159227134e-01 7.3079305885850065e-01 + -3.5547833897422276e-02 5.8195272382653196e-01 8.8772180917692234e-01 + 6.4571659262431302e-02 6.9089956842462308e-01 1.0515731372515249e+00 + 2.1366876156216780e-01 8.0509996214445079e-01 1.2098104936199034e+00 + 4.1098653098742960e-01 9.2923383384287894e-01 1.3466463646866202e+00 + 6.4509672524623918e-01 1.0589152990260164e+00 1.4453666248315609e+00 + 9.0414984411997346e-01 1.1457810158983390e+00 1.5119756729467928e+00 + 1.1938328004427339e+00 1.1077165900315440e+00 1.5740652385527938e+00 + 1.5290612581487844e+00 9.0333073952566745e-01 1.6184847138942875e+00 + 1.8812025248695525e+00 5.9874812396154642e-01 1.5818301484206407e+00 + 2.1781193437573081e+00 3.1365670330757933e-01 1.4564226831909426e+00 + 2.1060802340538940e+00 3.2041749477367754e-01 1.4796090650945237e+00 + id 14862 + loc 1.0925986617803574e-01 1.6431647539138794e-01 394 + blend 0.0000000000000000e+00 + interp 5.5197609417342741e-01:2.6648007847770006e-01:1.1940790722088646e-01:3.9655959978668143e-01:8.4625258918310742e-01:5.5197057441248565e-01:1.4515968141881461e+00:3.2430525388360892e-01:1.9985680911944157e+00:2.7886373684991367e-01:2.8034995984184539e+00:4.4842044467955394e-01:3.0703136865829515e+00 + CVs 20 + -1.2663961531412626e-01 1.1922216602803090e-01 1.9227317240555827e-01 + -2.6195726595423474e-01 2.6519074953090988e-01 3.9122054544837626e-01 + -3.9524466034328459e-01 4.2495491034632932e-01 5.8019390122706282e-01 + -5.1741976799460654e-01 5.9048622157435804e-01 7.4872959509649739e-01 + -6.2615457561214605e-01 7.6001321141733946e-01 8.8700313808267350e-01 + -7.2118101420946323e-01 9.3378150864135046e-01 9.8493901934773032e-01 + -8.0922057225631949e-01 1.1147530742103877e+00 1.0464383365100636e+00 + -9.0197763074195181e-01 1.3040283296981223e+00 1.0836425971091721e+00 + -1.0080438136618364e+00 1.5015111363972689e+00 1.1030040129439582e+00 + -1.1358442078871669e+00 1.7110110505273306e+00 1.1039815829977184e+00 + -1.2964338953144510e+00 1.9405883200678740e+00 1.0873932372488446e+00 + -1.5041965925516005e+00 2.1970136443169874e+00 1.0645807937574239e+00 + -1.7851797596118280e+00 2.4523471833050601e+00 1.0593052517420665e+00 + -2.1424223099554913e+00 2.5964098423063451e+00 1.0791201403199793e+00 + -2.5087621259556929e+00 2.5328385531597517e+00 1.0901021557630015e+00 + -2.8474820649832782e+00 2.2888825594676816e+00 1.0734355963237563e+00 + -3.2250786251489569e+00 1.9148850646511888e+00 1.0559703763660095e+00 + -3.7077551158411186e+00 1.4687577208519447e+00 1.1106223925362662e+00 + -3.9995986919788393e+00 1.3439845254299794e+00 1.1869174880952591e+00 + id 14863 + loc 4.4836485385894775e-01 2.8019329905509949e-01 405 + blend 0.0000000000000000e+00 + interp 3.7994376201961483e-01:3.2487295227494367e-01:3.8514271907823905e-01:3.2344027907608541e-01:1.2128817969168177e+00:3.7901584787100645e-01:2.0397619497859956e+00:3.7993996258199464e-01:2.6771628440982354e+00:3.1998081623723135e-01:3.0864120213616650e+00:2.7986692816027980e-01:3.9381536206389129e+00 + CVs 20 + -9.3399033468265849e-03 8.4556995811178745e-02 3.4297417737144412e-02 + -2.9850941078354298e-02 1.4173026284281434e-01 9.6096783497771496e-02 + -5.1081573642709009e-02 1.8910316081722739e-01 1.7762674293961070e-01 + -6.5705274929113877e-02 2.3168768934826339e-01 2.6132390790160176e-01 + -7.2947785072216442e-02 2.6795709738122608e-01 3.4852698993771608e-01 + -7.1334931573928256e-02 2.9571306499922928e-01 4.4054647108875222e-01 + -5.8785999555710476e-02 3.1132070504306614e-01 5.3727359930261209e-01 + -3.4281087858907669e-02 3.1032125351831630e-01 6.3688411719695037e-01 + 1.1328206874183060e-03 2.8853970021910685e-01 7.3627921041663247e-01 + 4.4249845179940135e-02 2.4316144309736548e-01 8.3159850816168901e-01 + 8.8888361966612067e-02 1.7481093595797970e-01 9.1774855507312525e-01 + 1.2609367437387853e-01 8.9212305658133040e-02 9.8860515853356712e-01 + 1.5196457137309022e-01 -1.0575448079665317e-02 1.0441035862740058e+00 + 1.8132655792907926e-01 -1.4166663967694942e-01 1.0963965027842080e+00 + 2.4464400878517528e-01 -3.3234015681421569e-01 1.1572889682155680e+00 + 3.6099040779950625e-01 -5.7634805656786370e-01 1.2209490900242685e+00 + 5.2128708374149679e-01 -8.3241648029493898e-01 1.2716689407497535e+00 + 6.9774037639653663e-01 -1.0634207056802367e+00 1.2946320174249362e+00 + 7.0666073943241958e-01 -1.1438341518145416e+00 1.1907434923283176e+00 + id 14864 + loc 8.3522248268127441e-01 4.8533592373132706e-02 405 + blend 0.0000000000000000e+00 + interp 4.3205040821609481e-01:3.1694043038737402e-01:8.0253872981505103e-02:2.7556091335804489e-01:8.5895721100256217e-01:3.9966112264894493e-01:1.2140189746946564e+00:3.0111878951611992e-01:1.9533985963592517e+00:4.3204608771201264e-01:2.4838836900722927e+00:3.7813609092558170e-01:2.9895331179633535e+00:2.6664042707357055e-01:3.6233172568215788e+00 + CVs 20 + 1.4138637702394680e-01 5.9375035109531168e-02 -7.8714317635918511e-03 + 2.8258228278771313e-01 1.2179750016981565e-01 -3.1875479657003443e-02 + 4.2667823253959752e-01 1.8793602727170328e-01 -6.2424774427839926e-02 + 5.7030141934587508e-01 2.5569448896430047e-01 -9.9740106565755493e-02 + 7.1027196842890827e-01 3.2391298188529949e-01 -1.4661431122465979e-01 + 8.4258761721906217e-01 3.9212197194072129e-01 -2.0515885630800770e-01 + 9.6285567814476936e-01 4.6064044496130713e-01 -2.7593415390030179e-01 + 1.0671281966168036e+00 5.3062710518018652e-01 -3.5723936531909700e-01 + 1.1524373951524280e+00 6.0350015625907361e-01 -4.4521105925226617e-01 + 1.2179988300723184e+00 6.8038498694704286e-01 -5.3425357543570184e-01 + 1.2658455372772337e+00 7.6115469708033756e-01 -6.1849727370993124e-01 + 1.3029073187058051e+00 8.4345441928668830e-01 -6.9424708558803794e-01 + 1.3396606329426557e+00 9.2439255142507593e-01 -7.6186283299780078e-01 + 1.3783138664456671e+00 1.0056501012424806e+00 -8.1797832980619356e-01 + 1.4072053384326548e+00 1.0948153587800047e+00 -8.3860425656813842e-01 + 1.4240091362996090e+00 1.1895259891146586e+00 -7.8840090105951643e-01 + 1.4564852449799013e+00 1.2625933009438892e+00 -6.6724494442072135e-01 + 1.5365879142669185e+00 1.2928593521111791e+00 -5.2603333138109354e-01 + 1.6399843152090361e+00 1.3410246451798522e+00 -5.1841336320951914e-01 + id 14865 + loc 3.5935527086257935e-01 2.6729410886764526e-01 394 + blend 0.0000000000000000e+00 + interp 5.0475180239947270e-01:3.4820336521788486e-01:4.9606213225888007e-01:4.7008854877946243e-01:1.3300723218290860e+00:3.4338994292511055e-01:1.9489672699067055e+00:3.7343624035079354e-01:2.7519687896519698e+00:4.6296639351468011e-01:3.2155256174922093e+00:5.0474675488144871e-01:3.8413631110289059e+00 + CVs 20 + -1.7694231462242666e-01 1.3272676071254885e-01 1.4392364087706394e-01 + -3.3669662492308572e-01 2.6743544356825272e-01 3.1572310124397668e-01 + -4.7546989477726492e-01 3.9767915824555888e-01 4.9475139425828257e-01 + -5.8981166663658424e-01 5.2541528205544163e-01 6.7026925543483040e-01 + -6.7155434463480446e-01 6.5918154892798086e-01 8.3262344032610269e-01 + -7.1588301628911899e-01 8.1060699083933829e-01 9.6793861728631159e-01 + -7.3284896431421787e-01 9.9315072248662495e-01 1.0789687205786036e+00 + -7.4487778468381893e-01 1.2174619893307557e+00 1.1794968527250413e+00 + -7.7753127295580715e-01 1.4904529982111285e+00 1.2754736574013870e+00 + -8.5957870160802308e-01 1.8148703402467286e+00 1.3622192316955775e+00 + -1.0227995493241124e+00 2.1869572972891063e+00 1.4408868906446721e+00 + -1.3031137903900563e+00 2.5850404264593867e+00 1.5310422622211333e+00 + -1.7242378647364578e+00 2.9262682602985741e+00 1.6516421524787823e+00 + -2.2221854752825188e+00 3.0672936778384026e+00 1.7766670592116762e+00 + -2.6655329916697945e+00 2.9548307711332344e+00 1.8528286088721710e+00 + -3.0233252397736368e+00 2.6663537549742724e+00 1.8653414490473454e+00 + -3.3723366980949496e+00 2.2893574943194985e+00 1.8303983884635955e+00 + -3.7728265420423561e+00 1.8882913615219168e+00 1.8223495109763628e+00 + -4.0936204694045646e+00 1.6550258115182266e+00 2.0263077591291574e+00 + id 14866 + loc 1.2744967825710773e-02 1.9620131701231003e-02 405 + blend 0.0000000000000000e+00 + interp 4.8030542354592726e-01:3.2370573205539843e-01:3.5594023029148358e-01:2.6627733502688639e-01:1.0613063067404824e+00:4.7109067819963307e-01:1.9966515052311447e+00:4.8030062049169181e-01:2.3321873073435930e+00:3.3360904931346508e-01:2.9854385869032245e+00:3.2012489884279721e-01:3.9340331081609685e+00 + CVs 20 + -4.4884332218480177e-02 1.9124684554560412e-01 -5.3219593714216626e-02 + -1.0331038784014507e-01 3.5234102075696766e-01 -5.7273604223046920e-02 + -1.7170450722308953e-01 5.1457895727196157e-01 -3.9626047850672308e-02 + -2.4156696597845884e-01 6.8807433746780955e-01 -2.5577156880860930e-02 + -3.1109948729384501e-01 8.6816768703580205e-01 -1.3012847619314316e-02 + -3.7694918915030567e-01 1.0508525491517235e+00 1.8175880840155534e-03 + -4.3371534104537079e-01 1.2331486209269984e+00 2.3911633589339343e-02 + -4.7505270498735275e-01 1.4132163477332815e+00 5.8047635001966191e-02 + -4.9447999428319778e-01 1.5889483387740597e+00 1.0772467479331216e-01 + -4.8622366575087839e-01 1.7554324973595645e+00 1.7629988569489130e-01 + -4.4592176072715117e-01 1.9028933240280939e+00 2.6847335950147089e-01 + -3.7288968225730662e-01 2.0155644727252033e+00 3.8833271114763768e-01 + -2.7518387178638931e-01 2.0765718162612297e+00 5.3214805082697525e-01 + -1.6747903420886806e-01 2.0823072777246074e+00 6.8545717159826491e-01 + -5.8020376974301402e-02 2.0480110008134096e+00 8.3305015062317267e-01 + 5.5024268124282308e-02 1.9940572177995346e+00 9.6782475691028680e-01 + 1.7166296376881701e-01 1.9310236104331395e+00 1.0889049312328722e+00 + 2.8254273288262327e-01 1.8650108321900292e+00 1.1961036894026444e+00 + 3.6336723953410632e-01 1.8398573959749984e+00 1.2824992566769566e+00 + id 14867 + loc 6.0510500334203243e-03 5.5404007434844971e-01 394 + blend 0.0000000000000000e+00 + interp 4.4662378671552505e-01:4.0680171769707718e-01:3.8972973533720823e-01:1.0185020775744986e-01:1.1460132458862577e+00:4.4661932047765790e-01:2.0002811315042446e+00:4.4511535799269664e-01:2.8014700556177674e+00:3.9242275692552081e-01:3.0382100276010697e+00:4.0421654759881304e-01:3.6639171534690860e+00 + CVs 20 + -2.2551199517689022e-01 1.5967805553233447e-01 -3.1737599722271664e-02 + -4.3985426988519721e-01 3.4079748657430675e-01 -8.6662847893818395e-02 + -6.4019072999814830e-01 5.4200854281079880e-01 -1.4771366122339724e-01 + -8.3145520825069186e-01 7.6839241570166339e-01 -2.0445554270857158e-01 + -1.0162264680763842e+00 1.0207776487551581e+00 -2.5899462777394328e-01 + -1.2001998971661099e+00 1.2957368317878803e+00 -3.1995718130094053e-01 + -1.3876722051402932e+00 1.5834631732287971e+00 -4.0227984395748528e-01 + -1.5790040494349615e+00 1.8668397253170856e+00 -5.1945910546654828e-01 + -1.7782116355164970e+00 2.1319183419947736e+00 -6.7559175172330388e-01 + -1.9995701439431643e+00 2.3702938944995000e+00 -8.7478654452271198e-01 + -2.2530540129790868e+00 2.5566406364665899e+00 -1.1319672490893362e+00 + -2.5187831464091044e+00 2.6382603340401136e+00 -1.4539453215699676e+00 + -2.7535577094543680e+00 2.5740384544881065e+00 -1.8102333678159312e+00 + -2.9284769638654549e+00 2.3742014637784887e+00 -2.1494083017462127e+00 + -3.0490131994078533e+00 2.0867147431969819e+00 -2.4408554129668802e+00 + -3.1466169672615689e+00 1.7646141347577142e+00 -2.6756869946228412e+00 + -3.2700052907855559e+00 1.4662027552468482e+00 -2.8489163530166843e+00 + -3.4543696232508250e+00 1.2381495893800403e+00 -2.9666652301883176e+00 + -3.6301827981283736e+00 9.7171956161945627e-01 -3.1022846840892688e+00 + id 14868 + loc 6.2316858768463135e-01 2.0121145248413086e-01 405 + blend 0.0000000000000000e+00 + interp 4.9454561038196720e-01:3.1035658141080064e-01:5.2286913808760382e-02:4.9454066492586340e-01:9.3632418256069538e-01:3.0854458441282789e-01:1.3250114098185453e+00:3.2270283535116301e-01:2.1051667512290266e+00:2.9849525063697668e-01:3.0531444060818371e+00 + CVs 20 + 1.0044025239473778e-01 1.0881311339043778e-01 -1.0763123420178787e-02 + 2.1738251674415826e-01 2.0102959545208579e-01 -2.3177130972816734e-02 + 3.3824592066680703e-01 2.9127572046602940e-01 -4.3315272430750527e-02 + 4.5553936029405151e-01 3.7842764216246227e-01 -7.6476401927488169e-02 + 5.6785348458998253e-01 4.5881820114928445e-01 -1.2672545311406710e-01 + 6.7167852428675889e-01 5.2996502167854498e-01 -1.9716357229016321e-01 + 7.6226757527426692e-01 5.9121544788803648e-01 -2.8845911240720784e-01 + 8.3494497853165139e-01 6.4417037504119401e-01 -3.9833826670811556e-01 + 8.8528388012269521e-01 6.9174940118077055e-01 -5.2242749669167710e-01 + 9.0991759521755156e-01 7.3645854016550583e-01 -6.5467709959923204e-01 + 9.0718886431736245e-01 7.7991410273377182e-01 -7.8774112645617889e-01 + 8.7900966583510698e-01 8.2213858152235897e-01 -9.1450723911239840e-01 + 8.3001924917132541e-01 8.6266973280790105e-01 -1.0295317936733426e+00 + 7.6278620614117576e-01 9.0414734196605329e-01 -1.1241460728487498e+00 + 6.7823586236759659e-01 9.5223492115799679e-01 -1.1778398779865105e+00 + 5.8537132632255751e-01 1.0044408431543399e+00 -1.1635329100299039e+00 + 5.0475594980900917e-01 1.0403133030673255e+00 -1.0753421035857726e+00 + 4.5329837518638760e-01 1.0371411863975450e+00 -9.3895203784568082e-01 + 3.5497702148040799e-01 1.0361769712729008e+00 -9.3357588342629227e-01 + id 14869 + loc 7.0687127113342285e-01 4.6336299180984497e-01 394 + blend 0.0000000000000000e+00 + interp 4.3925286774375544e-01:3.5986458494130025e-01:2.6570707631389756e-01:2.7921672188267799e-01:1.1693492421735436e+00:3.3497571093629547e-01:1.9891136158454115e+00:4.3924847521507804e-01:2.8254263433063653e+00:3.7661205226618610e-01:3.4514420696550285e+00 + CVs 20 + 3.2356961560444308e-01 2.3034427915451419e-01 2.0057566495176354e-01 + 6.1273745146921699e-01 4.3564299872431078e-01 3.9212007608934629e-01 + 8.8592915578602027e-01 6.3057099119888593e-01 5.8063242108883717e-01 + 1.1473006826755332e+00 8.2536176186561061e-01 7.7216561286326013e-01 + 1.3882854667544713e+00 1.0211389669450697e+00 9.6935088069300845e-01 + 1.6055042896047607e+00 1.2186774791369821e+00 1.1737844529826724e+00 + 1.8022638281233521e+00 1.4210674982558502e+00 1.3872300540916060e+00 + 1.9860425633177550e+00 1.6322424492490279e+00 1.6143153471740597e+00 + 2.1664107093566964e+00 1.8523857592087998e+00 1.8659412579936965e+00 + 2.3525093109545372e+00 2.0733713792282025e+00 2.1569584613236499e+00 + 2.5535540562672976e+00 2.2789778850121687e+00 2.4966840869802809e+00 + 2.7763821587492243e+00 2.4498232542465428e+00 2.8797294743731285e+00 + 3.0194585908844802e+00 2.5708641665680689e+00 3.2939338494345112e+00 + 3.2752135144356043e+00 2.6308834722523677e+00 3.7370219154902165e+00 + 3.5437977794556579e+00 2.6154511586371099e+00 4.2146215320515186e+00 + 3.8526301014390683e+00 2.5026612720472485e+00 4.7281909088843577e+00 + 4.2409283248036509e+00 2.2580492861661039e+00 5.2578275609099077e+00 + 4.6831071328645715e+00 1.8609544455651013e+00 5.7329851544457879e+00 + 4.8930491042697657e+00 1.5605121811873852e+00 5.9318336374133835e+00 + id 14870 + loc 4.7352215647697449e-01 9.6442246437072754e-01 405 + blend 0.0000000000000000e+00 + interp 4.8439631832644736e-01:3.0561127830601909e-01:3.4999158311855405e-02:3.1848567084006563e-01:1.0102764209880295e+00:2.1179396220544378e-01:1.8232257577922184e+00:3.1334223860536020e-01:2.8768568351144213e+00:4.8439147436326413e-01:3.6128407130427620e+00 + CVs 20 + 3.7648848154113551e-01 3.5964192981183002e-01 -1.2239873743265578e-01 + 5.8527383911254272e-01 6.4135841837532570e-01 -2.4266458002774338e-01 + 7.6151809421021643e-01 8.5185338785993459e-01 -3.4174159751594202e-01 + 9.5687355511794991e-01 1.0651290028520819e+00 -4.0770528353153568e-01 + 1.1736039681633221e+00 1.2837882514204959e+00 -4.1526898672952162e-01 + 1.4140198475409262e+00 1.4962523516531869e+00 -3.3245396223299151e-01 + 1.6710994093515144e+00 1.6683467468170849e+00 -1.4038931864236617e-01 + 1.9252074800409866e+00 1.7616420893049343e+00 1.3388968531953768e-01 + 2.1600864561737607e+00 1.7754906631235863e+00 4.3093953423322673e-01 + 2.3742324522397515e+00 1.7420660273264810e+00 7.1175410344423762e-01 + 2.5721235839202947e+00 1.6887946895896517e+00 9.7227448329923116e-01 + 2.7549020498696724e+00 1.6244172484284902e+00 1.2262363641450507e+00 + 2.9204078100345394e+00 1.5532846091804808e+00 1.4807530238384774e+00 + 3.0674772806804196e+00 1.5032234769861919e+00 1.7203634624811786e+00 + 3.1970269692914304e+00 1.5205673811160152e+00 1.9185669462729076e+00 + 3.3065313944416252e+00 1.6251405060487445e+00 2.0588676762036733e+00 + 3.3859704339297765e+00 1.7904454929234961e+00 2.1432033803633344e+00 + 3.4285104970205440e+00 1.9771228515377663e+00 2.1912961289809334e+00 + 3.4960075950528782e+00 2.0350794228661107e+00 2.4098231349034420e+00 + id 14871 + loc 2.5867208838462830e-01 6.6948676109313965e-01 394 + blend 0.0000000000000000e+00 + interp 4.7544964497096004e-01:4.7544489047451033e-01:4.9281458490306962e-02:4.6875186525634110e-01:5.2934843964636924e-01:3.4883534012223627e-01:1.0712237838170644e+00:4.4289526852246153e-01:1.6566971086684805e+00:4.1100415451103312e-01:2.0000079028968631e+00:3.7879678379812243e-01:2.8336006357871533e+00:3.9235881338205908e-01:3.0751063183746981e+00:3.5034473220643336e-01:3.7668588423688560e+00 + CVs 20 + -5.1552226963778064e-02 2.2298194392135434e-01 -3.8469212820738635e-01 + -1.0859370414128769e-01 4.7996903135442071e-01 -7.4709721355236236e-01 + -1.7331207259120815e-01 7.7629575376197724e-01 -1.0698030200708362e+00 + -2.4086962667479092e-01 1.0904961577325656e+00 -1.3497418991188974e+00 + -3.0436494765643363e-01 1.3862898300823583e+00 -1.5984473310560019e+00 + -3.5923900287523514e-01 1.6314868253567696e+00 -1.8308770846463440e+00 + -4.1246788336294360e-01 1.8269904910031269e+00 -2.0552985226699843e+00 + -4.7955966331161237e-01 1.9951432955015205e+00 -2.2771796472898549e+00 + -5.5600878799114795e-01 2.1340696895239604e+00 -2.4876391596833640e+00 + -6.1264856835565373e-01 2.2299667438377040e+00 -2.6558347363154091e+00 + -6.4266043101373937e-01 2.3040082711263263e+00 -2.7684610125456119e+00 + -6.8112184030842648e-01 2.3870899434291442e+00 -2.8725744249076595e+00 + -7.5205441874817280e-01 2.4632562862972018e+00 -3.0251144235026448e+00 + -8.4755144036288588e-01 2.4895732979219662e+00 -3.2267258043273639e+00 + -9.4512240856136120e-01 2.4306750752957158e+00 -3.4480607179473877e+00 + -1.0168075286895506e+00 2.2529585850365850e+00 -3.6828298847430432e+00 + -1.0553991534545146e+00 1.9287034636802391e+00 -3.9346809946046335e+00 + -1.1260955606124023e+00 1.5316175626550872e+00 -4.1676746384872585e+00 + -1.2927532828014221e+00 1.4154053389668761e+00 -4.2297400038141735e+00 + id 14872 + loc 3.6425605416297913e-01 8.5043668746948242e-01 405 + blend 0.0000000000000000e+00 + interp 4.4731861237454201e-01:3.7766100439221112e-01:3.9616941630027802e-01:3.1028815023439216e-01:1.3087642175712837e+00:4.4731413918841828e-01:2.0076428634072343e+00:3.1979411519088069e-01:2.8744736255377576e+00:2.9755082195483934e-01:3.5439506370941882e+00 + CVs 20 + 3.2424698424459569e-01 3.5791060114664730e-01 -8.9153232077542638e-02 + 4.7392804293628066e-01 6.7030808508405815e-01 -1.6096000588697812e-01 + 6.0170135456288809e-01 9.2660784526001372e-01 -1.9743300483988607e-01 + 7.3697580910557503e-01 1.1883815050547706e+00 -1.7410312609877243e-01 + 8.7642207750203727e-01 1.4452721659748153e+00 -6.4830091796457670e-02 + 1.0150683284606936e+00 1.6694259796634752e+00 1.4772418593218109e-01 + 1.1457544474902512e+00 1.8251867874780672e+00 4.4856262656145396e-01 + 1.2644708892022238e+00 1.8989251073950992e+00 7.9085061671312762e-01 + 1.3725760238196685e+00 1.9087891039246112e+00 1.1330715591842235e+00 + 1.4733978453508159e+00 1.8807152089184833e+00 1.4603133695845281e+00 + 1.5684502633428556e+00 1.8289952435927499e+00 1.7757854912805369e+00 + 1.6564067805789955e+00 1.7560928957071744e+00 2.0876306909800681e+00 + 1.7362502277786980e+00 1.6677965914418451e+00 2.3924506168394108e+00 + 1.8095115251580409e+00 1.5941040690990573e+00 2.6665307006500272e+00 + 1.8756703293438919e+00 1.5745224673595075e+00 2.8840910512485278e+00 + 1.9267977800059302e+00 1.6081200346072495e+00 3.0393936718424897e+00 + 1.9556148916187375e+00 1.6575521104641777e+00 3.1459947596184792e+00 + 1.9571036979745473e+00 1.6908464026653718e+00 3.2257691580776626e+00 + 1.9266917891270827e+00 1.6026678515106401e+00 3.4007703028935117e+00 + id 14873 + loc 4.2000699043273926e-01 3.7027084827423096e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927260421233370e-01:3.2438373619239419e-01:3.8258942516128680e-01:4.6296639351468011e-01:1.1888903146614813e+00:4.1004782498922304e-01:1.9411980358040579e+00:2.9778306610897581e-01:2.3251645571986153e+00:3.5065444304245674e-01:3.0023574505087716e+00:4.7926781148629161e-01:3.7646000794094987e+00 + CVs 20 + -2.0474503127004121e-01 1.9624676444440814e-01 2.8942138898794267e-01 + -3.9623463104653078e-01 3.4997654367339776e-01 5.6373315138716662e-01 + -5.8145170093506882e-01 4.8105743658904515e-01 8.4928194823767322e-01 + -7.6088461369997007e-01 6.0249198607046206e-01 1.1564899112298201e+00 + -9.2873206748205916e-01 7.1384229478121874e-01 1.4729740571683585e+00 + -1.0774328237278759e+00 8.0579461217912840e-01 1.7810015113284030e+00 + -1.2046288104245080e+00 8.6992174592435090e-01 2.0696465960234294e+00 + -1.3141606893290465e+00 9.0627147500528971e-01 2.3358256560648782e+00 + -1.4007158895870258e+00 9.2214666688148850e-01 2.5724558414807155e+00 + -1.4450859670990579e+00 9.3413802915004140e-01 2.7655542887124911e+00 + -1.4401663664696134e+00 9.6778431078735072e-01 2.9096296265740111e+00 + -1.4109630796278507e+00 1.0427384056570173e+00 3.0165655462278798e+00 + -1.4020414892700044e+00 1.1524446572871114e+00 3.1101542118403320e+00 + -1.4572589656612793e+00 1.2382594379268390e+00 3.2174059444051304e+00 + -1.5860105159925797e+00 1.2223403648497313e+00 3.3324087846289689e+00 + -1.7661409531006802e+00 1.0903259772261600e+00 3.4165936593134583e+00 + -1.9775517766872830e+00 8.6828624370123952e-01 3.4559754750325866e+00 + -2.2042936668632569e+00 5.9105474520894230e-01 3.5105570529115071e+00 + -2.4072838615103289e+00 3.2858643923832309e-01 3.7156208575697489e+00 + id 14874 + loc 8.3703994750976563e-01 7.7171128988265991e-01 405 + blend 0.0000000000000000e+00 + interp 3.8019158714171675e-01:3.0313659920988079e-01:1.7342877986652949e-01:2.8565090101219032e-01:9.7407684144306395e-01:3.3795485915081297e-01:1.6126933038384093e+00:3.1361521864264125e-01:2.2786113683867537e+00:3.8018778522584534e-01:2.9551970211170948e+00:3.0751187314938738e-01:3.2803316370831048e+00 + CVs 20 + 1.5549177258948882e-01 2.9850263824907697e-01 -5.7587301551679390e-02 + 1.7319557149630610e-01 5.0324746360351513e-01 -9.6541999264173312e-02 + 1.4268540877542918e-01 6.7293710135711371e-01 -1.2447783519045622e-01 + 1.0849417148075724e-01 8.3888855110032257e-01 -1.4095161862353739e-01 + 7.0252498834576071e-02 9.9435560550530067e-01 -1.4020050936354023e-01 + 2.8502829767054205e-02 1.1308831639537851e+00 -1.1487881462901930e-01 + -1.5165613036972003e-02 1.2356153966457415e+00 -5.5618753705006650e-02 + -5.9161511368146125e-02 1.2874483764862135e+00 4.2784859877193236e-02 + -1.0521530819434788e-01 1.2730400938818422e+00 1.6072042650731766e-01 + -1.5412627897774112e-01 1.2236835057169166e+00 2.7476010611037416e-01 + -2.0333533999300996e-01 1.1644360624000305e+00 3.9616267923622267e-01 + -2.5464819004927575e-01 1.0913533010267036e+00 5.3233130933986761e-01 + -3.1043198659535215e-01 9.9900781184889165e-01 6.8054881872321915e-01 + -3.6607458338348714e-01 8.8715592928913134e-01 8.4314797843436196e-01 + -4.0756069893823521e-01 7.5763772073903524e-01 1.0314692397092668e+00 + -4.1687949397139068e-01 6.1489551116479069e-01 1.2553540980778566e+00 + -3.8255822107056553e-01 4.6842677099412688e-01 1.5108436824029086e+00 + -3.0744044838635576e-01 3.2971497561130059e-01 1.7807885714116638e+00 + -3.3074057490523240e-01 2.1311923339810468e-01 1.9341893169987934e+00 + id 14875 + loc 5.5967664718627930e-01 9.4812965393066406e-01 394 + blend 0.0000000000000000e+00 + interp 5.2108042668191212e-01:3.5719677405205941e-01:1.2235960240313815e-02:3.7178998601404162e-01:9.2310813226783872e-01:2.8541931710634222e-01:1.3952237019339058e+00:3.5731026822480377e-01:2.0004756545970244e+00:5.2107521587764538e-01:2.8503101300255977e+00:3.4748346210239583e-01:3.0799136383882928e+00 + CVs 20 + -2.5767259562633282e-01 2.0858520079598386e-01 -1.6932242257223484e-01 + -5.0410432451807474e-01 4.0466813463572049e-01 -3.1172181868575005e-01 + -7.4729955550940053e-01 6.0079092319324756e-01 -4.5141236349121711e-01 + -9.8654661353026296e-01 7.9776144417893369e-01 -6.0200534478963175e-01 + -1.2180259522756343e+00 9.8761072640485548e-01 -7.6751406881003637e-01 + -1.4400266537448765e+00 1.1624453703494315e+00 -9.4910536110295429e-01 + -1.6559871523569274e+00 1.3163672044063299e+00 -1.1468489368482855e+00 + -1.8700265660326552e+00 1.4418957871899551e+00 -1.3623799162534374e+00 + -2.0787023043977371e+00 1.5258364954820200e+00 -1.5974487407746305e+00 + -2.2739939451187920e+00 1.5538976628995198e+00 -1.8506997413042063e+00 + -2.4541765210582693e+00 1.5174226396484116e+00 -2.1134802632856049e+00 + -2.6227953715735972e+00 1.4173298984856753e+00 -2.3702975872836163e+00 + -2.7791587802282134e+00 1.2700312949749328e+00 -2.6136616953047884e+00 + -2.9186114920039259e+00 1.0999647833732042e+00 -2.8540510611169996e+00 + -3.0338741501440332e+00 9.0338982295683401e-01 -3.0909469009103612e+00 + -3.1076123945816470e+00 6.2488118338038401e-01 -3.2698901707353216e+00 + -3.1381705321105464e+00 1.7815435368444343e-01 -3.3324247032418786e+00 + -3.1907830933248924e+00 -3.6709618973761193e-01 -3.4371065036264343e+00 + -3.1978586702686482e+00 -3.2113746855255632e-01 -3.7832242225296522e+00 + id 14876 + loc 9.5431756973266602e-01 5.0921595096588135e-01 405 + blend 0.0000000000000000e+00 + interp 3.8813634936647129e-01:3.0722806344637860e-01:7.1818690114284500e-01:2.5021673269539357e-01:1.1597586431025872e+00:3.1821442464665223e-01:1.9999757388729371e+00:2.2732240594790268e-01:2.4951293170412705e+00:3.8813246800297763e-01:3.0898526440104321e+00:2.7652141161615995e-01:3.8439416525095180e+00 + CVs 20 + 1.0940893410461890e-01 2.4040937091094039e-01 -1.5479068057275566e-01 + 1.0926526446353604e-01 4.3285363232725360e-01 -3.0285742899371354e-01 + 9.6290516730798581e-02 5.7865430788978478e-01 -4.3350567554088665e-01 + 8.0638441991473853e-02 7.1597195572494554e-01 -5.5439344640212407e-01 + 5.7101587990769476e-02 8.5104511743233857e-01 -6.6237260845218637e-01 + 1.9080455665497098e-02 9.9236431383389601e-01 -7.5312388855853840e-01 + -4.4926219455931227e-02 1.1521281912563799e+00 -8.1747732527507433e-01 + -1.5216489090660168e-01 1.3424000568868577e+00 -8.3234243853260748e-01 + -3.1740752017453644e-01 1.5594861109786162e+00 -7.4827422664500776e-01 + -5.1269650895324281e-01 1.7499314363397918e+00 -5.1593936248185690e-01 + -6.5625259539958203e-01 1.8455712207501804e+00 -1.8601666645134421e-01 + -7.1681854861224692e-01 1.8596369042055638e+00 1.3207551623502409e-01 + -7.2392685783043254e-01 1.8374221059288633e+00 4.0115518281778639e-01 + -7.0174652302648144e-01 1.8050403162716155e+00 6.2727925106660498e-01 + -6.5888198127010145e-01 1.7878910465048086e+00 8.0765293409200756e-01 + -6.0325768073641250e-01 1.8110101862440402e+00 9.3185023387955523e-01 + -5.4719003964708479e-01 1.8775148843849871e+00 9.9881721398491252e-01 + -4.9733516305345321e-01 1.9683585674569155e+00 1.0268342987921073e+00 + -4.1201284094736751e-01 2.0192674727894580e+00 1.1446584203121941e+00 + id 14877 + loc 6.6119146347045898e-01 7.4920248985290527e-01 394 + blend 0.0000000000000000e+00 + interp 4.3683622452174903e-01:3.8277586004185044e-01:4.2193603145005976e-02:3.5689424246167939e-01:9.7162841381472231e-01:2.4832764754901498e-01:1.4222863217297896e+00:3.4143548147236269e-01:2.0074159479753009e+00:3.6208189187194634e-01:2.6897013571529111e+00:4.0056773813330393e-01:3.0053674712306839e+00:4.3683185615950382e-01:3.4611798961899236e+00 + CVs 20 + -2.0882470627335548e-01 1.8099072877144962e-01 -2.3647399104995917e-01 + -4.2089699814479409e-01 3.6014792604134643e-01 -4.7448110667391341e-01 + -6.3232330695408789e-01 5.4265643549841291e-01 -7.1948709976879066e-01 + -8.3817157399551356e-01 7.3165976498615315e-01 -9.7725971082974417e-01 + -1.0347867134171782e+00 9.2915480619994495e-01 -1.2517825616749585e+00 + -1.2235251863144423e+00 1.1378484185370090e+00 -1.5427394072930061e+00 + -1.4089481592586548e+00 1.3563781497261118e+00 -1.8503770437824620e+00 + -1.5947432845421552e+00 1.5711842849896263e+00 -2.1843470138719692e+00 + -1.7852165709941743e+00 1.7581084728699690e+00 -2.5584178730149425e+00 + -1.9892502562240417e+00 1.8934679203763787e+00 -2.9757770680180884e+00 + -2.2148334051051095e+00 1.9616534335036864e+00 -3.4268516864122440e+00 + -2.4591909647354546e+00 1.9588564040364069e+00 -3.8970757368332896e+00 + -2.7180946814203777e+00 1.8913409880001633e+00 -4.3715546868067126e+00 + -3.0033767424055853e+00 1.7639440994553373e+00 -4.8317590035758773e+00 + -3.3353494088882165e+00 1.5721461762204409e+00 -5.2546391985787437e+00 + -3.7171089539658313e+00 1.2902329239779888e+00 -5.6206846305147948e+00 + -4.1244773155781367e+00 8.8123076940621869e-01 -5.9092326862888038e+00 + -4.5099311264755482e+00 3.8555789601304369e-01 -6.0986889053142228e+00 + -4.7786567078187812e+00 1.7883407560666686e-01 -6.2837578666953062e+00 + id 14878 + loc 5.8319163322448730e-01 6.8104606866836548e-01 405 + blend 0.0000000000000000e+00 + interp 4.7830860993403718e-01:3.3895107837973337e-01:6.1791586940392573e-01:2.8669716793940192e-01:1.7044211155821216e+00:4.7830382684793787e-01:2.3070202339718793e+00:2.9970332984155523e-01:2.9637893803521518e+00:2.9492843659711671e-01:3.8577179805993311e+00 + CVs 20 + 1.8855392349190192e-01 2.9829041326181965e-01 -9.3093933735460238e-02 + 2.5072646124391040e-01 5.4583751433955108e-01 -1.7103314392875479e-01 + 2.9314811704371846e-01 7.4481277343042507e-01 -2.2447153954987670e-01 + 3.3430059125052947e-01 9.4646781324466767e-01 -2.4678098081484084e-01 + 3.6925564876787303e-01 1.1521155813921546e+00 -2.2207176312534177e-01 + 3.9609471106368127e-01 1.3524926866819120e+00 -1.2870862537121608e-01 + 4.1772341332589713e-01 1.5192516680386832e+00 4.6549440685837828e-02 + 4.4271031503061020e-01 1.6165801876897254e+00 2.8155934779748998e-01 + 4.7743140512866011e-01 1.6381129172578339e+00 5.2720328907846503e-01 + 5.2001731073393942e-01 1.6066262549397119e+00 7.5188557300942949e-01 + 5.6432681882884839e-01 1.5411178732617565e+00 9.5225975909582605e-01 + 6.0301394832560440e-01 1.4451030482115943e+00 1.1356913760289327e+00 + 6.3043859951416159e-01 1.3169364512328283e+00 1.3038061116946142e+00 + 6.4560023719649706e-01 1.1671857369787246e+00 1.4477510555673911e+00 + 6.5224253881819494e-01 1.0169384212879879e+00 1.5620176193219293e+00 + 6.5585218958138813e-01 8.7583472665633733e-01 1.6552915125154641e+00 + 6.6038301428430024e-01 7.3437092561283235e-01 1.7441477992717740e+00 + 6.6649014071248924e-01 5.8135040343582256e-01 1.8427898546962445e+00 + 6.2947423655177592e-01 3.8222242737052692e-01 1.9538187168538532e+00 + id 14879 + loc 8.9824146032333374e-01 1.3126380741596222e-01 394 + blend 0.0000000000000000e+00 + interp 5.0392453635390622e-01:4.4868279136764311e-01:3.5019828445243328e-01:5.0391949710854267e-01:9.5197691356685399e-01:4.7518350429763412e-01:1.0929092740646296e+00:3.2564517621780703e-01:1.5592097064539447e+00:3.4375168778160969e-01:2.0830815537720948e+00:3.4444742420576596e-01:2.9976232951232338e+00:3.8423453857842843e-01:3.3523783755412322e+00:3.4336361715010738e-01:3.9856595219373037e+00 + CVs 20 + 2.3066814174617478e-01 2.6659592167206753e-01 3.2220795462910112e-01 + 4.7458211668742600e-01 5.0611438257696517e-01 5.7655344435246947e-01 + 7.1705957192687197e-01 7.3503946775930262e-01 8.1133273438601661e-01 + 9.5013687227781629e-01 9.6515236337806853e-01 1.0498674405258441e+00 + 1.1679724055767919e+00 1.1984675002221499e+00 1.2974415504739523e+00 + 1.3683876363385976e+00 1.4320754168038019e+00 1.5604093114972664e+00 + 1.5543911602323135e+00 1.6589070066879241e+00 1.8456872949925258e+00 + 1.7280538707538415e+00 1.8702328591941804e+00 2.1584962608718392e+00 + 1.8870235820913424e+00 2.0580140139161118e+00 2.5022152333221088e+00 + 2.0289258197610671e+00 2.2161177261775356e+00 2.8804789117574439e+00 + 2.1612727485820811e+00 2.3370944359506605e+00 3.3037104574438763e+00 + 2.2987831405252321e+00 2.4007785033966051e+00 3.7835310841218570e+00 + 2.4434288781301543e+00 2.3648697998466175e+00 4.3106120909104071e+00 + 2.5690567709809016e+00 2.1966231779776240e+00 4.8212806817345619e+00 + 2.6516227597104098e+00 1.9303053851437024e+00 5.2447770552598083e+00 + 2.6978669116172131e+00 1.6297478007166020e+00 5.5916067772933342e+00 + 2.7300249743948752e+00 1.3305734423574878e+00 5.9252743588304346e+00 + 2.8027739752010250e+00 1.0483250122518672e+00 6.2886333271171280e+00 + 3.0398389995289956e+00 8.3378391316960920e-01 6.6502386503505200e+00 + id 14880 + loc 4.2216190695762634e-01 4.4644543528556824e-01 405 + blend 0.0000000000000000e+00 + interp 3.3139742113489679e-01:3.3139410716068546e-01:7.4461072953679919e-01:3.1521103692125058e-01:1.2043664613913401e+00:3.0750643195415339e-01:1.9755523571109244e+00:2.8313468573869438e-01:2.6162835299191682e+00:3.0056724838105836e-01:3.1305971316486056e+00:2.9839452495218366e-01:3.9956440495575150e+00 + CVs 20 + 1.4028440622515740e-02 1.6989676148641664e-01 -3.2651880918342785e-02 + 2.2935216802266442e-02 2.9764642928500146e-01 -9.4886637386442652e-03 + 3.6976645995061522e-02 4.0653119787567754e-01 2.9104712856580894e-02 + 6.2765371546212617e-02 5.1261396251621094e-01 6.2116675886711575e-02 + 1.0280563237606069e-01 6.1506371191807419e-01 9.2283763881191527e-02 + 1.5994759283190285e-01 7.1239906831530830e-01 1.2128365374493491e-01 + 2.3660824511525450e-01 8.0227508252097457e-01 1.4917272459394912e-01 + 3.3369309896868732e-01 8.8210675649230752e-01 1.7454780029168326e-01 + 4.5057492416632883e-01 9.4990253477870257e-01 1.9541342253386013e-01 + 5.8580687104515150e-01 1.0043855247987807e+00 2.1022567445612966e-01 + 7.3816501421385250e-01 1.0446410250185292e+00 2.1862697813610799e-01 + 9.0755051569240941e-01 1.0690998429832157e+00 2.2163538114398529e-01 + 1.0911332181416034e+00 1.0747159998557403e+00 2.2155680908896619e-01 + 1.2770859433129294e+00 1.0598848865236985e+00 2.2195901377030047e-01 + 1.4516816535880650e+00 1.0290669921966575e+00 2.2699444997231624e-01 + 1.6153144210108039e+00 9.9006534206444308e-01 2.3880485031046533e-01 + 1.7812330844483428e+00 9.4901256881535578e-01 2.5490879724608284e-01 + 1.9616773489869317e+00 9.1017977515332338e-01 2.6920608288601766e-01 + 2.1870182534052183e+00 8.7673383315176645e-01 2.6487740237380458e-01 + id 14881 + loc 5.8150869607925415e-01 1.9476762413978577e-01 394 + blend 0.0000000000000000e+00 + interp 4.3344887628600504e-01:2.6621201499748226e-01:7.9398638383391340e-02:3.5764180277304175e-01:7.4498273467618270e-01:2.6432479933255593e-01:1.0751008974067069e+00:3.3474152190703865e-01:1.9993274244311210e+00:3.3739867370157145e-01:2.4908118534424974e+00:3.5436696004047080e-01:2.9915207901290204e+00:4.3344454179724218e-01:3.9042891854909385e+00 + CVs 20 + 2.2410672523847067e-01 2.7950901541943063e-01 2.1516051164911487e-01 + 4.8714564418946993e-01 5.6023928134994461e-01 3.9850915721665059e-01 + 7.6099925044536865e-01 8.4688778597831793e-01 5.7870510484764282e-01 + 1.0282228608227129e+00 1.1436306654263306e+00 7.7508048058266865e-01 + 1.2796533402815993e+00 1.4432920867072245e+00 1.0032374029300848e+00 + 1.5139310407039606e+00 1.7249827957586681e+00 1.2768401919037335e+00 + 1.7283249952383484e+00 1.9675372361642443e+00 1.6040688972710699e+00 + 1.9137669688867098e+00 2.1557498652744851e+00 1.9845626761666839e+00 + 2.0614739214876967e+00 2.2787992149501055e+00 2.4099723647902467e+00 + 2.1691749067660093e+00 2.3268936818179391e+00 2.8644835981931518e+00 + 2.2413303910213376e+00 2.2890832172933990e+00 3.3307394778767287e+00 + 2.2816469463246918e+00 2.1521778751878937e+00 3.7893270660011127e+00 + 2.2911722868480262e+00 1.9181380438579949e+00 4.2187190301127568e+00 + 2.2782495278600425e+00 1.6297907933363029e+00 4.6163414945002046e+00 + 2.2634441010281705e+00 1.3507937589703234e+00 5.0063610946247703e+00 + 2.2772975504718254e+00 1.1180591982052150e+00 5.4064104685511278e+00 + 2.3681493136344232e+00 9.1997646636954356e-01 5.8208477710373181e+00 + 2.5704212994459112e+00 7.4221009167429797e-01 6.2357529958019819e+00 + 2.6798746550423038e+00 6.4661432662905893e-01 6.5603473256788254e+00 + id 14882 + loc 1.9700975716114044e-01 1.1248648166656494e-02 405 + blend 0.0000000000000000e+00 + interp 3.7459735692249885e-01:3.0188444090289157e-01:1.4682842375444705e-02:3.7459361094892962e-01:6.4447116388254366e-01:3.5870257467728728e-01:1.0452725917178589e+00:3.6712193223533662e-01:1.7988129186401567e+00:2.9838535961484897e-01:2.1369759362556233e+00:3.5928156199344491e-01:3.0895500997733683e+00 + CVs 20 + -6.9983722524265615e-02 -1.6372409547463967e-02 5.1086238991667685e-02 + -1.4839674307899609e-01 -7.6592642325028326e-02 7.4689406566777999e-02 + -2.5481085057495517e-01 -1.1684881718014138e-01 1.1977186165003775e-01 + -3.6792065263817986e-01 -1.4968157200691309e-01 1.5259071359614818e-01 + -4.8674472272127317e-01 -1.7235325148707728e-01 1.7017978307212356e-01 + -6.1068443083174773e-01 -1.7927814331169104e-01 1.7746165241669629e-01 + -7.3713650196121694e-01 -1.6618807914284667e-01 1.8516099782924950e-01 + -8.6098981293344701e-01 -1.3300417574397513e-01 2.0271449632775246e-01 + -9.7574093462717981e-01 -8.3454673553257752e-02 2.3569966429185574e-01 + -1.0746213452019457e+00 -2.4417499160972772e-02 2.8852633888296331e-01 + -1.1517686966710965e+00 3.5741974753898592e-02 3.6355013095979666e-01 + -1.2032151029755913e+00 8.9016939398002731e-02 4.5841267637395733e-01 + -1.2284993314342603e+00 1.2946877328120079e-01 5.6565264481467536e-01 + -1.2303471216805244e+00 1.5533941526180278e-01 6.7443509787377232e-01 + -1.2101131641246434e+00 1.7016267621896602e-01 7.7085827921179317e-01 + -1.1680240079188193e+00 1.7885497075245954e-01 8.4238953900678593e-01 + -1.1005828671529978e+00 1.8425156810066334e-01 8.9071025127210945e-01 + -1.0016825283571609e+00 1.8502238551299260e-01 9.2469558123046247e-01 + -8.8179645339273216e-01 1.2760570955078399e-01 7.8226071049215573e-01 + id 14883 + loc 4.8042286187410355e-02 8.6583870649337769e-01 405 + blend 0.0000000000000000e+00 + interp 5.0516979805007622e-01:2.6569739101499246e-01:9.9360626398637442e-01:4.4717092784627011e-01:1.4921009497234823e+00:3.8144374618255339e-01:2.1095908934725278e+00:4.6510751766504976e-01:2.8285260286816847e+00:3.0514600596295555e-01:3.1721167273926123e+00:5.0516474635209574e-01:3.9998586480136060e+00 + CVs 20 + 1.9698434798455899e-01 2.6218166160491763e-01 9.6557740010077456e-02 + 2.3071537281018925e-01 4.1108412504746894e-01 1.5458361370292767e-01 + 2.1061377809901027e-01 5.3309243061740264e-01 2.1021553175344121e-01 + 1.9193066015678420e-01 6.4812326571620593e-01 2.7092775775862887e-01 + 1.7397250696967287e-01 7.5787460344843383e-01 3.3822227882231409e-01 + 1.5701096871160442e-01 8.6456716625659769e-01 4.1766380432434574e-01 + 1.4155715404065833e-01 9.6811036995631605e-01 5.1774977934209854e-01 + 1.2861979932213957e-01 1.0654612275508764e+00 6.4563819269074885e-01 + 1.2080190787174794e-01 1.1525983479425783e+00 8.0382116079432298e-01 + 1.2255663146338869e-01 1.2271082682355581e+00 9.9010784947900710e-01 + 1.4006053219179621e-01 1.2894974286925867e+00 1.1987848437603976e+00 + 1.7956711431444539e-01 1.3415669297717696e+00 1.4225737397517491e+00 + 2.4269033550530245e-01 1.3807175455596821e+00 1.6523359907972290e+00 + 3.2296397043046865e-01 1.3987453267199728e+00 1.8716192238159972e+00 + 4.1016099205623607e-01 1.3925786078576423e+00 2.0603102652462963e+00 + 4.9797000237600658e-01 1.3712329094964750e+00 2.2105248022548474e+00 + 5.8411476665308659e-01 1.3459363194553076e+00 2.3254232404990938e+00 + 6.7186880854963271e-01 1.3204048839680163e+00 2.4056283691624873e+00 + 8.4747359813682244e-01 1.3574392848291845e+00 2.4832506064196802e+00 + id 14884 + loc 7.1564012765884399e-01 5.2470877766609192e-02 394 + blend 0.0000000000000000e+00 + interp 4.5742522140502900e-01:3.2520062143765416e-01:2.3433828693974790e-01:3.8914544564835851e-01:1.0101252344625751e+00:2.2540892720912387e-01:1.9037027258391390e+00:4.5742064715281500e-01:2.8878650133538750e+00:3.4678963979961192e-01:3.1578523156840861e+00:4.0111235469020878e-01:3.9714042456036855e+00 + CVs 20 + 2.1985364970966215e-01 2.5677192272422378e-01 2.7224673074834232e-01 + 4.3812458550097205e-01 4.7104469095728763e-01 5.0459738205851146e-01 + 6.4980283845474784e-01 6.5318091037401449e-01 7.2667940979970336e-01 + 8.5289642203316907e-01 8.1263796958642842e-01 9.5248002527029774e-01 + 1.0406208903000624e+00 9.5405797977373563e-01 1.1810151056534133e+00 + 1.2074992690649684e+00 1.0796007326039418e+00 1.4113955256304489e+00 + 1.3565763819339161e+00 1.1861779393989100e+00 1.6441616801167274e+00 + 1.4922229700121672e+00 1.2696447382471834e+00 1.8807801363506413e+00 + 1.6113533101911843e+00 1.3292013933208024e+00 2.1262157528067545e+00 + 1.7056220109842202e+00 1.3649502564291871e+00 2.3852100652180335e+00 + 1.7688524867702018e+00 1.3775563574867038e+00 2.6492423324143006e+00 + 1.8013725549785100e+00 1.3708845037255240e+00 2.9001355353354237e+00 + 1.8104002865891426e+00 1.3219838128236123e+00 3.1384054881631478e+00 + 1.8051850605277862e+00 1.1417012784129024e+00 3.3787489846003256e+00 + 1.7986807453648610e+00 7.5928949965429116e-01 3.6276729195877300e+00 + 1.8242550518464389e+00 2.0414096987191677e-01 3.9192556299542214e+00 + 1.9401188238469784e+00 -4.4375197351357065e-01 4.2940971710144220e+00 + 2.1930496534598798e+00 -1.0654731615766579e+00 4.7045056761376198e+00 + 2.3819339541243982e+00 -1.4037406776163890e+00 4.9134718550456578e+00 + id 14885 + loc 1.9882206618785858e-01 7.6972788572311401e-01 405 + blend 0.0000000000000000e+00 + interp 5.0655431107385807e-01:2.9959575846393177e-01:5.2261240941077647e-02:5.0654924553074732e-01:8.9910691559537770e-01:2.9902703295229710e-01:1.5225215993716308e+00:2.8094984708337528e-01:2.0716194612592842e+00:2.9728416163287102e-01:2.9999647247524832e+00:4.6849198170968853e-01:3.6024553932194068e+00 + CVs 20 + 1.1758744769021695e-01 2.1371138367789771e-01 8.5111241221709932e-02 + 1.2048297152126816e-01 3.0483687874643983e-01 1.3556265103599804e-01 + 7.3840605479471300e-02 3.6884260495548643e-01 1.7165491913177958e-01 + 3.4657922136245078e-02 4.2002388075455510e-01 1.9008155688678580e-01 + 2.9329429359742643e-03 4.6760236004964695e-01 1.8724493120387894e-01 + -2.1056165453164410e-02 5.2416320769904079e-01 1.7053259371752391e-01 + -3.8018987892020017e-02 5.9600981750969295e-01 1.5818145073653067e-01 + -4.8977391157167066e-02 6.7894213791393798e-01 1.6836881228088441e-01 + -5.2888015812045330e-02 7.6383495489948650e-01 2.1045902813424994e-01 + -4.6333150648742716e-02 8.4416778730706521e-01 2.8516330858806094e-01 + -2.3442117223431980e-02 9.1980129443597036e-01 3.8798187209166823e-01 + 2.2124630670231127e-02 9.9374343530543208e-01 5.1393259228537624e-01 + 8.9993465708050668e-02 1.0587935179358745e+00 6.5981057389791542e-01 + 1.6915330127974726e-01 1.0918801725007632e+00 8.1679066731611871e-01 + 2.4698225711691901e-01 1.0787030167653870e+00 9.6830016019570675e-01 + 3.2018944247886949e-01 1.0357717148125849e+00 1.1034830445414752e+00 + 3.8992778814558710e-01 9.8942844202939984e-01 1.2196386270112363e+00 + 4.6498908463086353e-01 9.5118082870086740e-01 1.3130421962142220e+00 + 6.5113245825947830e-01 1.0186937961260083e+00 1.3951301668672578e+00 + id 14886 + loc 7.8873354196548462e-01 2.9856356978416443e-01 394 + blend 0.0000000000000000e+00 + interp 4.3453830007639044e-01:3.8916031761763564e-01:7.0164167898957086e-01:3.0037475166625949e-01:1.5273861338433719e+00:3.4219628265845881e-01:2.0296710836104799e+00:3.6282926409145660e-01:2.5902490765997292e+00:4.3453395469338968e-01:3.0415216077290324e+00:2.8726473147318571e-01:3.7573937539148021e+00 + CVs 20 + 3.9824869886758762e-01 2.6368099822872854e-01 2.1209977716952197e-01 + 7.6312872375866436e-01 4.9344312542026497e-01 3.9738814830008878e-01 + 1.1357239740297016e+00 7.0440353097495878e-01 5.7560710050975206e-01 + 1.5290095699235291e+00 9.0191192440404011e-01 7.6354604987568653e-01 + 1.9320757872312009e+00 1.0762174758771148e+00 9.7159060397700969e-01 + 2.3346016360162878e+00 1.2150338933480964e+00 1.2028375791098851e+00 + 2.7294392797791458e+00 1.3067086453781407e+00 1.4550657600124908e+00 + 3.1083629584212433e+00 1.3357591936530384e+00 1.7221948675085541e+00 + 3.4569599297526441e+00 1.2876250641154150e+00 1.9879502269839657e+00 + 3.7591899219406688e+00 1.1611258920687031e+00 2.2269827818206895e+00 + 4.0075011649048928e+00 9.7024687431557277e-01 2.4231276740278687e+00 + 4.2044465635129580e+00 7.3331773782730458e-01 2.5786558377438347e+00 + 4.3489002400874313e+00 4.7125011099660474e-01 2.6966132977405595e+00 + 4.4340586158173707e+00 2.1141882438899673e-01 2.7778268716706092e+00 + 4.4546571894299989e+00 -1.6585536724510241e-02 2.8302378552693250e+00 + 4.4111938233542975e+00 -1.8007999462306445e-01 2.8704479179287175e+00 + 4.3204596385288703e+00 -2.5602586477488742e-01 2.9255707753387146e+00 + 4.2303490009459281e+00 -3.0009026037099673e-01 3.0197476949578297e+00 + 4.2128723129705365e+00 -5.7961266039539039e-01 3.0928276826589425e+00 + id 14887 + loc 8.4860658645629883e-01 2.8265479207038879e-01 405 + blend 0.0000000000000000e+00 + interp 3.8526015786089424e-01:3.8525630525931565e-01:3.5582718212167530e-01:2.9865236215139163e-01:1.0000613824061784e+00:2.5763551868055590e-01:1.9830510344869698e+00:2.9226283062375913e-01:2.6127281711799575e+00:3.6343570153566335e-01:3.0081150244730583e+00:3.0479140500460250e-01:3.8926626604065464e+00 + CVs 20 + -3.1959561512918878e-02 1.0446333523784249e-01 7.3859165089768170e-02 + -4.2627955671379711e-02 2.0625342449553807e-01 1.4970879366345480e-01 + -3.9668257246728789e-02 2.9341041892312936e-01 2.2223989239236283e-01 + -3.5011719064353769e-02 3.9558156081964441e-01 2.9836615065697158e-01 + -2.0870602140061645e-02 5.1932530062075499e-01 3.7714009541828597e-01 + 1.3066003758956501e-02 6.6819808610364073e-01 4.5508466849429347e-01 + 7.8061253746952830e-02 8.4243521442026492e-01 5.2491105060653731e-01 + 1.8258406944725158e-01 1.0367590371312161e+00 5.7426267501858408e-01 + 3.2749883170676541e-01 1.2405817950863227e+00 5.8764448115547052e-01 + 5.0282454088137585e-01 1.4403029530515374e+00 5.5099576894230806e-01 + 6.8996959366581656e-01 1.6237432317172404e+00 4.5734916909676576e-01 + 8.6941550318554106e-01 1.7838257870975986e+00 3.0697625386383870e-01 + 1.0246482346221115e+00 1.9169646549847206e+00 1.0285908479354780e-01 + 1.1406238051123725e+00 2.0195344032854350e+00 -1.4172295849535479e-01 + 1.2022882757855686e+00 2.0941227994052833e+00 -3.8243398786637112e-01 + 1.2061278579897499e+00 2.1586228667262670e+00 -5.5384379592253641e-01 + 1.1701471954606024e+00 2.2272772230921034e+00 -6.1089557800528471e-01 + 1.1203823575068621e+00 2.2904672575745741e+00 -5.6513281244868507e-01 + 9.8474207070337383e-01 2.3553827296768093e+00 -6.7007047502377493e-01 + id 14888 + loc 4.6742036938667297e-01 5.4178631305694580e-01 394 + blend 0.0000000000000000e+00 + interp 4.0864460795550717e-01:3.7183861704152071e-01:2.1277234158659819e-01:3.7674954002874189e-01:8.6202832627089832e-01:4.0864052150942765e-01:1.1548454002357436e+00:3.8876255689774919e-01:1.8273972070741917e+00:3.3942209084615926e-01:2.0772549969171070e+00:3.5143271922973157e-01:2.9995496680994123e+00:2.4396270810849760e-01:3.7056212020790911e+00 + CVs 20 + -1.9990353465003438e-01 2.6551866346152364e-01 -3.1315007249396332e-01 + -3.8646117706789529e-01 5.2221974140232597e-01 -5.9205777644870139e-01 + -5.7215035984490215e-01 7.8768236528026658e-01 -8.4650046663161260e-01 + -7.6023125868305974e-01 1.0679008863880033e+00 -1.0810361317550403e+00 + -9.5099032719691845e-01 1.3570307490482105e+00 -1.3029276487054045e+00 + -1.1506224672162646e+00 1.6440108037267369e+00 -1.5274331093113656e+00 + -1.3691530954924898e+00 1.9156474188996706e+00 -1.7703459259344947e+00 + -1.6153749953671555e+00 2.1578094242755914e+00 -2.0390335548649796e+00 + -1.8931978070973654e+00 2.3500327080663395e+00 -2.3375004902483987e+00 + -2.1974233246053152e+00 2.4552504767556873e+00 -2.6752019089939676e+00 + -2.5075917777791199e+00 2.4269428602400467e+00 -3.0483603713932022e+00 + -2.7924377430192395e+00 2.2368259765148895e+00 -3.4198050777929927e+00 + -3.0214420992209075e+00 1.8979971637758444e+00 -3.7338236508893594e+00 + -3.1821372469889742e+00 1.4721712258264137e+00 -3.9568020720613299e+00 + -3.2995592460840824e+00 1.0290873452471807e+00 -4.0971400617238150e+00 + -3.4353606257243547e+00 6.2083078341591813e-01 -4.1731309649293813e+00 + -3.6492380987791817e+00 2.8538532228204172e-01 -4.1961967432262437e+00 + -3.9192654847005497e+00 -5.8656216278540896e-04 -4.1862857274636944e+00 + -4.1011951203866515e+00 -3.9935217261093214e-01 -4.2225709185467792e+00 + id 14889 + loc 8.7439745664596558e-01 9.3457973003387451e-01 405 + blend 0.0000000000000000e+00 + interp 4.6640684566995033e-01:4.6640218160149366e-01:5.4149354895301371e-01:3.5869664006166901e-01:9.8329314890938779e-01:2.7711406092588964e-01:1.5012277140526731e+00:3.0160653648090685e-01:2.7256795654662138e+00:3.1332132011244623e-01:3.9891493998698984e+00 + CVs 20 + 1.7540861361088406e-01 3.0543570347047733e-01 -2.9050130159584547e-03 + 2.3975414531321920e-01 4.8199164440189479e-01 -1.1364879927925411e-03 + 2.3929312533340519e-01 6.1916716288667661e-01 -7.8104272726235782e-03 + 2.5064371704819682e-01 7.4915075233201711e-01 -2.3901974514609743e-02 + 2.7042501941497415e-01 8.6708237241126507e-01 -4.5933140258490913e-02 + 2.9291913370304590e-01 9.6950773134329271e-01 -7.2016055921701377e-02 + 3.1158351953334112e-01 1.0563471269006155e+00 -1.0391634345113261e-01 + 3.2212485601844765e-01 1.1369169503269692e+00 -1.4737802389971766e-01 + 3.3474195773747056e-01 1.2304827354907453e+00 -1.9847132793762376e-01 + 3.7219680965746599e-01 1.3302330584550166e+00 -2.2259111791228897e-01 + 4.3339400349871615e-01 1.3943271729127573e+00 -1.9974650177276709e-01 + 5.0704449682518415e-01 1.4050389160274661e+00 -1.4633185172349675e-01 + 5.9001299522588135e-01 1.3652068263930937e+00 -8.0893861725023414e-02 + 6.7985787087056315e-01 1.2778449630575914e+00 -1.6432416767199809e-02 + 7.7241859065856466e-01 1.1431194308042549e+00 3.8503219829534877e-02 + 8.6733802323329701e-01 9.6434406422417329e-01 8.3117208057537653e-02 + 9.7025688227750995e-01 7.5390415113652542e-01 1.2376242228453774e-01 + 1.0868239990802036e+00 5.2874009680655232e-01 1.6584855781775781e-01 + 1.2053566189370399e+00 3.3627941559470709e-01 1.7773709031987539e-01 + id 14890 + loc 8.2905220985412598e-01 8.6927902698516846e-01 394 + blend 0.0000000000000000e+00 + interp 4.7973452531719724e-01:3.3520636356061406e-01:2.9335700418012478e-01:4.7972972797194408e-01:9.0292176111744915e-01:4.0501544917489335e-01:1.1438310163349046e+00:3.1335472545879772e-01:2.0384168142396994e+00:3.4499035084628399e-01:2.9889212211701777e+00:2.4456787550039294e-01:3.4773496370672889e+00 + CVs 20 + -1.6296940610336202e-01 1.9076480294755555e-01 -2.9666928891800093e-01 + -3.1438627464664742e-01 3.8402139126516310e-01 -5.6946300712349029e-01 + -4.4268328791544048e-01 5.8319809290220692e-01 -8.3331063805137129e-01 + -5.4671271481017292e-01 7.8737158493101655e-01 -1.0944507896296192e+00 + -6.3089452730252682e-01 9.9244714742838402e-01 -1.3531062641336762e+00 + -7.0177613093485458e-01 1.1962307506466079e+00 -1.6092163269373918e+00 + -7.6830829130376954e-01 1.3995586871124597e+00 -1.8638725027817853e+00 + -8.4009637142954940e-01 1.6033591886012266e+00 -2.1244987784510481e+00 + -9.2271183145006097e-01 1.8016905034977528e+00 -2.4063540609317999e+00 + -1.0163634028008053e+00 1.9807040293855529e+00 -2.7227583439217944e+00 + -1.1206658976645543e+00 2.1262841991535719e+00 -3.0722313356375781e+00 + -1.2356710325051021e+00 2.2310118027318815e+00 -3.4406091663633527e+00 + -1.3568199094135145e+00 2.2919777816202620e+00 -3.8201145570733317e+00 + -1.4703133272844160e+00 2.3025735857562655e+00 -4.2190760642465328e+00 + -1.5763374662913368e+00 2.2565441685079208e+00 -4.6503660920348731e+00 + -1.7097338302241210e+00 2.1506212137673737e+00 -5.1196492469153503e+00 + -1.8999493747624658e+00 1.9733494396949287e+00 -5.6028800586061243e+00 + -2.0950875816553833e+00 1.7208237234573867e+00 -6.0108030679028879e+00 + -2.1237656765436359e+00 1.5117004079524547e+00 -6.0837911927947887e+00 + id 14891 + loc 9.9540412425994873e-02 1.2255984544754028e-01 405 + blend 0.0000000000000000e+00 + interp 4.1918419244787264e-01:4.1918000060594818e-01:1.7651444180458387e-02:2.9153021666637285e-01:9.8810807186135519e-01:3.2002338770109073e-01:1.9841250269617940e+00:2.9782457254275263e-01:2.5470992285461849e+00:2.9420842634402872e-01:3.0525500103022623e+00 + CVs 20 + 8.9264348834241725e-02 1.1602600754565594e-01 -6.1112506022819757e-02 + 1.6471755483833755e-01 2.1001085118736623e-01 -6.6547903401707645e-02 + 2.4719562282910723e-01 2.6903285115822018e-01 -6.0285158892758206e-02 + 3.4310307824142916e-01 3.0485167871679741e-01 -4.6875840255774626e-02 + 4.4643936092369335e-01 3.1248045780501588e-01 -2.5065061250504256e-02 + 5.4992774167723857e-01 2.8836846841922853e-01 4.2955921093673355e-03 + 6.4711496787885481e-01 2.3289813895301087e-01 3.9580555959922506e-02 + 7.3441275080147939e-01 1.4988618460467729e-01 8.0127500215424252e-02 + 8.1200591089368213e-01 4.4663499637239687e-02 1.2677257594384950e-01 + 8.8390247185209836e-01 -7.7578832954768542e-02 1.8158859502762137e-01 + 9.5674261995450971e-01 -2.1284938121984151e-01 2.4749404799060076e-01 + 1.0386043628124619e+00 -3.5784198559720337e-01 3.2733983676692913e-01 + 1.1371936695835174e+00 -5.0915455830299328e-01 4.2247639690424110e-01 + 1.2566480022326625e+00 -6.6277476206854580e-01 5.3265689964465335e-01 + 1.3972598846064959e+00 -8.1343377766175085e-01 6.5550372935816137e-01 + 1.5561242337940633e+00 -9.5498641363181425e-01 7.8361793286527803e-01 + 1.7295215619856721e+00 -1.0823353394424133e+00 9.0575867711238600e-01 + 1.9096706366547267e+00 -1.1929153733895006e+00 1.0147268847991073e+00 + 2.0631820536711167e+00 -1.2728807913305731e+00 1.1487910191130664e+00 + id 14892 + loc 7.3273450136184692e-01 9.9343019723892212e-01 394 + blend 0.0000000000000000e+00 + interp 5.2108042668191212e-01:3.3392773787911739e-01:1.8833269672624608e-01:5.2107521587764538e-01:8.4479938601154259e-01:4.9764601712076850e-01:1.0935154162547682e+00:3.5772940988708773e-01:1.6967975989915214e+00:2.9531700857850368e-01:2.0906444832535618e+00:4.1804005431018748e-01:2.8872289968138296e+00:3.2137040417761054e-01:3.1916384216350098e+00 + CVs 20 + -2.0646485457157066e-01 1.4376014262233902e-01 -2.0362352692228899e-01 + -4.0188405000147948e-01 3.2159452351099399e-01 -4.4892255081291577e-01 + -5.9586291943594261e-01 5.0636172780315447e-01 -7.0676707202757727e-01 + -7.8442306618808888e-01 6.8252666164430109e-01 -9.6519196990606471e-01 + -9.6887268396166748e-01 8.4613506820532192e-01 -1.2234916610908826e+00 + -1.1501513185574925e+00 9.9454575808393075e-01 -1.4800451915181188e+00 + -1.3253260414462558e+00 1.1203568995086011e+00 -1.7351280268858134e+00 + -1.4884768908083139e+00 1.2094757764127462e+00 -1.9916932247910526e+00 + -1.6427203397170298e+00 1.2479693541107841e+00 -2.2518523840637479e+00 + -1.8013307840229991e+00 1.2223402387419291e+00 -2.5106497403579962e+00 + -1.9675392960518301e+00 1.1230489086121671e+00 -2.7511513390338926e+00 + -2.1306972302765033e+00 9.6137365589390722e-01 -2.9566175366010601e+00 + -2.2870816574297419e+00 7.6113735590580545e-01 -3.1247605205269231e+00 + -2.4437192411545947e+00 5.3807927007977652e-01 -3.2587483050070043e+00 + -2.5997781828569031e+00 3.0200003301514688e-01 -3.3582680511012013e+00 + -2.7399129745652808e+00 6.3668124101532220e-02 -3.4250332130940180e+00 + -2.8555895294285518e+00 -1.6454534170956525e-01 -3.4692618189729592e+00 + -2.9625052658339670e+00 -3.7104319822352871e-01 -3.5105443064460271e+00 + -3.1068119839761792e+00 -5.4142131024025475e-01 -3.5775052274574879e+00 + id 14893 + loc 7.4680942296981812e-01 7.6092642545700073e-01 405 + blend 0.0000000000000000e+00 + interp 3.2993271311005146e-01:3.2992941378292034e-01:4.7410368399202651e-01:2.7579298379845030e-01:1.1364972340656667e+00:3.1865705496598912e-01:2.0499224883239084e+00:2.8565090101219032e-01:2.9737048487239717e+00:2.7739698233553484e-01:3.6840542800093643e+00 + CVs 20 + 8.5839713529964973e-02 2.5349398214411761e-01 2.0938665430016334e-02 + 8.3769483441549192e-02 3.8896303432744678e-01 5.0111675564141853e-02 + 3.2905469619719352e-02 4.9813383968154712e-01 7.4036876930740958e-02 + -6.4176355752605385e-03 5.9398898767554364e-01 9.3406289513169094e-02 + -3.7121587292839375e-02 6.6578870856917782e-01 1.0668456803784392e-01 + -6.4639414407437756e-02 7.0334259675660005e-01 1.0423015296215593e-01 + -9.5715472721136619e-02 7.0616554788030117e-01 6.3780000478104032e-02 + -1.3467392446069887e-01 7.0602439248740056e-01 -3.0333687688411114e-02 + -1.7463972692290661e-01 7.4380006151190814e-01 -1.3210472536846452e-01 + -2.0224110903972695e-01 7.9715665029406502e-01 -1.7536094743946865e-01 + -2.0870725267140808e-01 8.2508612674841653e-01 -1.5578069909773762e-01 + -1.8844264312097458e-01 8.1480098803804346e-01 -9.8892411505337785e-02 + -1.3903475074960536e-01 7.6455511867296788e-01 -2.4132162617470421e-02 + -6.0307803752445294e-02 6.6462482227746489e-01 6.4182667570892984e-02 + 5.0384784973700997e-02 5.0520372558660820e-01 1.7012314105418835e-01 + 1.9994531621132600e-01 2.9811335831649011e-01 2.9447734597692787e-01 + 3.9260055159397073e-01 7.4953259051070184e-02 4.2568890181869096e-01 + 6.2389819774437050e-01 -1.3834843097580860e-01 5.4429423016079781e-01 + 8.4429268973130833e-01 -3.0472719142044202e-01 5.7550250908177691e-01 + id 14894 + loc 9.2073655128479004e-01 6.6779315471649170e-01 394 + blend 0.0000000000000000e+00 + interp 4.5960910232971119e-01:3.8230007522686354e-01:4.3901071649519552e-01:3.5703349088269287e-01:9.8812767925970046e-01:3.5957775185192886e-01:1.4048189688391832e+00:3.1691996384486382e-01:2.0025473896167170e+00:4.5960450623868793e-01:2.8829822650610120e+00:3.4267003293280784e-01:3.1541670561274007e+00:3.0779315702427085e-01:3.9998622636559160e+00 + CVs 20 + -2.5325946187068055e-01 2.1046599070312078e-01 -2.6397998102454101e-01 + -4.7687488852959958e-01 3.7421421208814137e-01 -5.0456304652461781e-01 + -6.7596107164846098e-01 5.0974840025127932e-01 -7.4841478866167355e-01 + -8.4813566510849081e-01 6.2361141896522165e-01 -1.0052292969155827e+00 + -9.8606346738032702e-01 7.1313010575617575e-01 -1.2747180912690816e+00 + -1.0861557998230618e+00 7.7803040551447677e-01 -1.5554239023159344e+00 + -1.1498873215316130e+00 8.2490861166727436e-01 -1.8388739780941921e+00 + -1.1783822647792292e+00 8.6451056161374251e-01 -2.1115280593872710e+00 + -1.1705543306177890e+00 9.0344348499155380e-01 -2.3754628825557225e+00 + -1.1312311761090850e+00 9.3887499809941311e-01 -2.6507501589420119e+00 + -1.0796706972228567e+00 9.5887569400849437e-01 -2.9461495413958287e+00 + -1.0360943536896634e+00 9.5144623774123049e-01 -3.2526273151004075e+00 + -1.0025891424248401e+00 9.0966269850707837e-01 -3.5782454136017039e+00 + -9.7431824474647155e-01 8.1928631263974983e-01 -3.9565212671943271e+00 + -9.6416724529809339e-01 6.7182992237472461e-01 -4.4023746503471539e+00 + -9.9907719261279804e-01 4.8733330156770371e-01 -4.8874509954303909e+00 + -1.0894703513376200e+00 2.6119484739341425e-01 -5.3634301244414404e+00 + -1.2122423055260558e+00 -7.3241137368778020e-02 -5.7561013611487972e+00 + -1.3094928591304087e+00 -5.3581503663801922e-01 -5.9301640354198817e+00 + id 14895 + loc 3.6593401432037354e-01 5.0924152135848999e-01 405 + blend 0.0000000000000000e+00 + interp 4.2248886736166819e-01:2.9924943217957850e-01:1.8154117930991742e-01:4.2248464247299461e-01:1.1656991227749165e+00:2.8100146033704626e-01:1.9984830607819875e+00:2.8984274315071795e-01:2.9586787400376613e+00:2.8313468573869438e-01:3.6131776368248012e+00 + CVs 20 + 9.2397715204971365e-02 2.4540904300093713e-01 -1.0368445089192508e-02 + 9.2319522455773295e-02 4.5504965928041380e-01 -1.3833085737063745e-02 + 8.4007521172573318e-02 6.3469753766749082e-01 3.8708760950059568e-03 + 7.8443229322032793e-02 8.0842412791577689e-01 5.4321059042321027e-02 + 7.3887435210287122e-02 9.7054506437771948e-01 1.4131827305220337e-01 + 7.2865238024664547e-02 1.1129028900455500e+00 2.6352640126055760e-01 + 8.1121511988282546e-02 1.2288311169752588e+00 4.1237879544137490e-01 + 1.0463730507561109e-01 1.3169742010449670e+00 5.7481893593633659e-01 + 1.4675598005909318e-01 1.3810872361590014e+00 7.3877827461274526e-01 + 2.0797600935706551e-01 1.4267802203449942e+00 8.9600362599182570e-01 + 2.8712147036324198e-01 1.4588820044879083e+00 1.0429424283845050e+00 + 3.8217423999130301e-01 1.4815166587794080e+00 1.1811005733962430e+00 + 4.8923011942513950e-01 1.4979595176627412e+00 1.3081730974704862e+00 + 5.9973570675997301e-01 1.5135763469439225e+00 1.4023939008798951e+00 + 6.9664817627934172e-01 1.5334031053839170e+00 1.4308249497619472e+00 + 7.5821402601782206e-01 1.5516964029086699e+00 1.3834801921643174e+00 + 7.7024356695596730e-01 1.5551265683813420e+00 1.2842695023632158e+00 + 7.3479793707014451e-01 1.5350812537545178e+00 1.1711616222542056e+00 + 7.9688306165055844e-01 1.5435475343101044e+00 1.2060235153104442e+00 + id 14896 + loc 9.8960506916046143e-01 2.3436288535594940e-01 394 + blend 0.0000000000000000e+00 + interp 4.4868727824042548e-01:2.2479761213898219e-01:9.9662436301873270e-01:3.3807460745633938e-01:1.5193750384932037e+00:4.4868279136764311e-01:2.3191109700152195e+00:3.0732474816663491e-01:2.9899300333824748e+00:2.2732346741792125e-01:3.9647258328971544e+00 + CVs 20 + 3.2414919965869382e-01 2.5050651196895096e-01 3.1777896200074568e-01 + 5.9454856521426025e-01 4.5113121596474814e-01 6.0572037967643200e-01 + 8.5653656305395642e-01 6.3332502725372919e-01 8.9296940461784247e-01 + 1.1275356333631454e+00 8.1419541379152371e-01 1.1916032708715338e+00 + 1.4046810655268334e+00 9.9231202133894003e-01 1.5011206474831056e+00 + 1.6921281160437018e+00 1.1642534214596925e+00 1.8221577919408336e+00 + 1.9990604154921328e+00 1.3246117202236010e+00 2.1515449892948419e+00 + 2.3332257788090205e+00 1.4615297395147702e+00 2.4846853824773580e+00 + 2.6995472006404659e+00 1.5550613355472880e+00 2.8208239766706651e+00 + 3.0997528935249115e+00 1.5834553009385284e+00 3.1550281121447332e+00 + 3.5289835614827609e+00 1.5337754288871250e+00 3.4669566520243564e+00 + 3.9762192837138448e+00 1.4083930736972436e+00 3.7305169690900346e+00 + 4.4285074167073164e+00 1.2192784909656758e+00 3.9319804114683672e+00 + 4.8699104694352648e+00 9.8289061916393550e-01 4.0668727577037691e+00 + 5.2825027501152046e+00 7.2085380616444183e-01 4.1311212895881750e+00 + 5.6555158952840721e+00 4.4953604603233632e-01 4.1284372085411727e+00 + 5.9819899858772310e+00 1.7386425652482940e-01 4.0698501251179193e+00 + 6.2477189573624763e+00 -1.0403898551914947e-01 3.9626029805610701e+00 + 6.4607243673734782e+00 -4.4125066257705159e-01 3.8027461416283370e+00 + id 14897 + loc 2.2149088978767395e-01 8.4501433372497559e-01 405 + blend 0.0000000000000000e+00 + interp 3.4876620859865343e-01:2.8094984708337528e-01:7.1428991373964856e-02:2.8702360530047677e-01:9.6379736273654870e-01:2.9578943078744685e-01:1.7945585601580492e+00:2.8076651063075875e-01:2.5077355390066378e+00:3.4876272093656746e-01:3.5940352124029227e+00 + CVs 20 + 1.9257501585245090e-01 2.6533502818966614e-01 5.6001702123580389e-02 + 2.5368021802876883e-01 4.2364077976277642e-01 9.4485486470034796e-02 + 2.7281859849835921e-01 5.4657837407618515e-01 1.3381765373652843e-01 + 3.0355967279759921e-01 6.5812806094182619e-01 1.7971719132094624e-01 + 3.4273725018780610e-01 7.5799069691910581e-01 2.3426283982080040e-01 + 3.8862651981752416e-01 8.4702300947466802e-01 3.0223661241728694e-01 + 4.4066070279447100e-01 9.2462055141802346e-01 3.9067997627664713e-01 + 4.9902996736471272e-01 9.8766572193441904e-01 5.0536731720836359e-01 + 5.6470131073786201e-01 1.0327423385092958e+00 6.4818830134502881e-01 + 6.3877851082817383e-01 1.0584978143813606e+00 8.1766732619818272e-01 + 7.2162952203699948e-01 1.0659739543982059e+00 1.0107521820793968e+00 + 8.1185987861586550e-01 1.0570137093743397e+00 1.2244169124800470e+00 + 9.0517945021882995e-01 1.0328403671779030e+00 1.4546256852767123e+00 + 9.9519892314917291e-01 9.9701633017469316e-01 1.6932047178604845e+00 + 1.0764479893324783e+00 9.5994646191215294e-01 1.9294043985457028e+00 + 1.1465214392958363e+00 9.3428240386540828e-01 2.1570214060808652e+00 + 1.2055682893237534e+00 9.2588018741144162e-01 2.3758935313624003e+00 + 1.2556246955247774e+00 9.3305153349546432e-01 2.5878543344394966e+00 + 1.3213679567226626e+00 9.4793044271895655e-01 2.8280108906217079e+00 + id 14898 + loc 5.5643570423126221e-01 1.8620461225509644e-02 394 + blend 0.0000000000000000e+00 + interp 5.0462952847579368e-01:3.1195270958504995e-01:1.5971384423931234e-01:4.5742064715281500e-01:9.1260014476416162e-01:5.0462448218050893e-01:1.0262921201521416e+00:3.0790891184879349e-01:1.8985754872453797e+00:4.3372727466767702e-01:2.4057560223745504e+00:3.9867125698223704e-01:2.9843612781902040e+00:3.8069273520664554e-01:3.3013370929692574e+00:4.1039622346159532e-01:3.9222895646558382e+00 + CVs 20 + 1.0144492349835471e-01 2.3043829736313898e-01 2.6548415901603895e-01 + 2.2295965217368363e-01 4.5197003399841990e-01 5.1036146079274047e-01 + 3.6263490712811614e-01 6.5581670703215500e-01 7.3850090609441832e-01 + 5.1888423654887650e-01 8.4300611872329467e-01 9.5362868670332912e-01 + 6.8439671553065162e-01 1.0197812682383804e+00 1.1535653560003776e+00 + 8.5590084901774421e-01 1.1939995739740790e+00 1.3452851277311733e+00 + 1.0394792053482342e+00 1.3605086136564746e+00 1.5400329716954388e+00 + 1.2412105590801523e+00 1.5067250301667801e+00 1.7478959180497351e+00 + 1.4593692833321450e+00 1.6237680587854653e+00 1.9783973166977571e+00 + 1.6869080727946137e+00 1.7044517993295178e+00 2.2388081114655489e+00 + 1.9160587496828843e+00 1.7390039904099133e+00 2.5206393524047672e+00 + 2.1404172539544550e+00 1.7173798659307022e+00 2.7976646935702405e+00 + 2.3577460648352191e+00 1.6239642499576032e+00 3.0458777433956659e+00 + 2.5740867982824938e+00 1.4259423097972970e+00 3.2580113871868264e+00 + 2.8044469955760842e+00 1.1007437858264562e+00 3.4389355150531582e+00 + 3.0694087124212772e+00 6.8414124418742039e-01 3.6084883858673491e+00 + 3.3871744877686578e+00 2.5147060741372140e-01 3.7827401633072624e+00 + 3.7581906124690061e+00 -1.1584461758307807e-01 3.9318942522720284e+00 + 4.0947303054295237e+00 -3.7296925700631700e-01 4.0031755218345451e+00 + id 14899 + loc 6.5395407378673553e-02 2.6342093944549561e-01 405 + blend 0.0000000000000000e+00 + interp 3.0308653041165051e-01:2.8159723394315295e-01:6.1295507683869843e-01:3.0167975697078553e-01:1.0940886005380734e+00:2.4911647717235341e-01:2.1778647732585825e+00:3.0308349954634639e-01:3.0188808026257892e+00:2.6784854668061214e-01:3.9864936797058457e+00 + CVs 20 + 1.3170383274205291e-01 1.5538773166144115e-01 -1.7904997369639311e-01 + 2.4770296530335317e-01 2.9521820569594504e-01 -2.8172752200605372e-01 + 3.6593589758110912e-01 3.7236824553989839e-01 -3.7576566559186808e-01 + 4.9727972979970753e-01 4.2575225231314440e-01 -4.6760085060234230e-01 + 6.4098472383980476e-01 4.5273362754076990e-01 -5.5112546369241200e-01 + 7.9516233308195139e-01 4.4952240257858606e-01 -6.2079854285890046e-01 + 9.5613214782680234e-01 4.1493038046047126e-01 -6.7270091857367453e-01 + 1.1190161871473896e+00 3.5204815736708417e-01 -7.0619816547102887e-01 + 1.2798983517596434e+00 2.6866804516896792e-01 -7.2481119315631792e-01 + 1.4382178560537568e+00 1.7591568887984893e-01 -7.3568022575919745e-01 + 1.5972258843125917e+00 8.4408541521491576e-02 -7.4658919913583177e-01 + 1.7621258843553869e+00 1.8921245442223844e-03 -7.6287840090340531e-01 + 1.9372302056410329e+00 -6.7712097761885803e-02 -7.8643321313179648e-01 + 2.1256482046605440e+00 -1.2435127093414028e-01 -8.1311625668731780e-01 + 2.3289126049070572e+00 -1.6981947190940638e-01 -8.3579288699928189e-01 + 2.5445227665801489e+00 -2.0473614937619961e-01 -8.5394770793021835e-01 + 2.7676730356967343e+00 -2.2342066314125153e-01 -8.7664250400704691e-01 + 2.9969369071536964e+00 -2.1699156568778705e-01 -9.0959109035474994e-01 + 3.2721766221812620e+00 -1.4994502538899468e-01 -8.7288231167362751e-01 + id 14900 + loc 9.8801106214523315e-01 5.4137308150529861e-02 394 + blend 0.0000000000000000e+00 + interp 4.2887092438053170e-01:2.5616627968951799e-01:8.5454373974045827e-01:3.8132271321102734e-01:1.5045624672474989e+00:4.2886663567128791e-01:1.9995165272680371e+00:3.2669402816985754e-01:2.9330255773384710e+00:3.2564517621780703e-01:3.5629850414727589e+00 + CVs 20 + 2.5583872585562006e-01 2.6451894281813920e-01 3.4921569118918921e-01 + 5.3710755615613692e-01 4.9872015958414351e-01 6.1777809964762131e-01 + 8.3666592483499658e-01 7.2179065917929330e-01 8.6645524616172120e-01 + 1.1501908754072221e+00 9.4802803309180961e-01 1.1319302843639272e+00 + 1.4678000184941644e+00 1.1758639843590868e+00 1.4299215698502437e+00 + 1.7799640584332617e+00 1.3916305112869281e+00 1.7737823846006815e+00 + 2.0789326069209553e+00 1.5727509136044246e+00 2.1723598712037395e+00 + 2.3518832402995562e+00 1.6947702187878739e+00 2.6251613028218710e+00 + 2.5835658377380266e+00 1.7394358605796261e+00 3.1151677564313141e+00 + 2.7675894996338344e+00 1.7011072468059258e+00 3.6118049932421972e+00 + 2.9038737013974458e+00 1.5785898573996011e+00 4.0848674090514443e+00 + 2.9908772649456168e+00 1.3745546735532637e+00 4.5089169980245192e+00 + 3.0272735088650995e+00 1.1057721913252232e+00 4.8663059847604249e+00 + 3.0223199566591941e+00 8.0849647813366632e-01 5.1626612524530326e+00 + 2.9939303172819178e+00 5.1860838931242004e-01 5.4241612251272624e+00 + 2.9596946321965882e+00 2.5449605864559643e-01 5.6668586064866560e+00 + 2.9375976870827731e+00 1.0259157574896705e-02 5.8986419439709739e+00 + 2.9458012110079519e+00 -2.3117827391896473e-01 6.1321545858760400e+00 + 2.9704686246428182e+00 -3.8483726882205804e-01 6.3098120783785241e+00 + id 14901 + loc 3.7858492136001587e-01 3.6843857169151306e-01 405 + blend 0.0000000000000000e+00 + interp 3.7994376201961483e-01:3.0997550759250886e-01:2.9509545907202561e-04:3.7993996258199464e-01:6.7277727763052786e-01:2.8351177631095076e-01:1.2967537954710482e+00:3.3700893720625658e-01:1.9999812550544123e+00:2.8339031957493188e-01:2.6776893325290922e+00:3.1521103692125058e-01:3.2056130379025851e+00 + CVs 20 + 4.0958879840241803e-02 1.6095819057592284e-01 -1.2296209057675991e-02 + 6.1151664485739575e-02 2.8762260641570692e-01 3.4878651332261534e-02 + 8.0078028559624093e-02 4.0003423969475577e-01 9.7556447217801601e-02 + 1.0818083370462384e-01 5.1098381646128432e-01 1.6685499261770226e-01 + 1.5081109581849458e-01 6.2052992939602580e-01 2.4729317648806115e-01 + 2.1397304624216404e-01 7.2790899987566726e-01 3.4191144389649242e-01 + 3.0330988579084300e-01 8.3167093910580892e-01 4.5204497388236203e-01 + 4.2383690679445823e-01 9.2998984711542876e-01 5.7738895684928615e-01 + 5.8020353544956116e-01 1.0206485329846775e+00 7.1600394009998114e-01 + 7.7685834586220093e-01 1.1007470693184409e+00 8.6431255903237492e-01 + 1.0178735762429290e+00 1.1656211847264857e+00 1.0174202735674753e+00 + 1.3046695884371502e+00 1.2082105757393957e+00 1.1692725920122240e+00 + 1.6311101010180058e+00 1.2249609219289403e+00 1.3108494526224610e+00 + 1.9827865679432635e+00 1.2287072321446839e+00 1.4281899444148478e+00 + 2.3459344050845110e+00 1.2480194193483820e+00 1.5053106577590190e+00 + 2.7134556574102762e+00 1.3050310664926963e+00 1.5309079729821322e+00 + 3.0780835026573934e+00 1.4060869058332426e+00 1.5026838192812946e+00 + 3.4247142030166433e+00 1.5481570072784943e+00 1.4356130547602346e+00 + 3.7601903993824877e+00 1.6576767916042323e+00 1.4166076829128160e+00 + id 14902 + loc 6.2758111953735352e-01 3.3271831274032593e-01 394 + blend 0.0000000000000000e+00 + interp 4.3453830007639044e-01:3.2661699391195292e-01:7.6123281419707456e-01:4.3453395469338968e-01:1.0441968843010403e+00:3.5268357516547122e-01:1.8321909925893476e+00:2.7283054181066690e-01:2.1140701277224054e+00:3.2631279274316533e-01:2.8886523576364618e+00:3.5467436880606451e-01:3.8361351511441342e+00 + CVs 20 + 3.4215789210428538e-01 2.6649073502732357e-01 2.3035448875508055e-01 + 6.2461888149063161e-01 4.8610523227134261e-01 4.3020492534541577e-01 + 8.7301658818879724e-01 6.9060300721445977e-01 6.2191297459875117e-01 + 1.0967334270682221e+00 8.9856098148445274e-01 8.1483357083199337e-01 + 1.2910292840053108e+00 1.1116084639214445e+00 1.0076037401967237e+00 + 1.4548941361086025e+00 1.3284298078058312e+00 1.2020569309732889e+00 + 1.5942365019551605e+00 1.5475198310785450e+00 1.4042404303028946e+00 + 1.7192489026429185e+00 1.7658141593578318e+00 1.6235793062743655e+00 + 1.8433649222762614e+00 1.9829446704729681e+00 1.8667894945118166e+00 + 1.9859648360894533e+00 2.2029250853086744e+00 2.1370844434991376e+00 + 2.1680601663986763e+00 2.4166198149059319e+00 2.4441963065245487e+00 + 2.3980348268912697e+00 2.5846152383821757e+00 2.8042501446484547e+00 + 2.6638122097199903e+00 2.6512217515121765e+00 3.2143049747042145e+00 + 2.9323912800941923e+00 2.5742334270326177e+00 3.6281764108387087e+00 + 3.1577992055931992e+00 2.3536363790866917e+00 3.9821044889042310e+00 + 3.3053832860738845e+00 2.0219166589940896e+00 4.2515710026510511e+00 + 3.3693548068634112e+00 1.6064122593148795e+00 4.4480917863483125e+00 + 3.4198951466843530e+00 1.1371486379737932e+00 4.5864811656252105e+00 + 3.6185129977704351e+00 7.7467899229145099e-01 4.6001154737626777e+00 + id 14903 + loc 2.7283486723899841e-01 3.6904191970825195e-01 405 + blend 0.0000000000000000e+00 + interp 3.4807001250334818e-01:2.9858168257725842e-01:6.2390512621005800e-01:2.7739668871126699e-01:1.7836979869915157e+00:3.4806653180322317e-01:2.6640835880300768e+00:2.9345338262518011e-01:3.3576866487073334e+00:3.3700893720625658e-01:3.9999538163864736e+00 + CVs 20 + 2.9398153853710540e-02 1.2660792115217789e-01 -2.7566999146595578e-03 + 3.0214243307262311e-02 2.2393637585751910e-01 4.2964993665954215e-02 + 2.8838577972229339e-02 3.2031997006349033e-01 1.1772411949550529e-01 + 4.1431803500830755e-02 4.2346117273613121e-01 2.0302915301323424e-01 + 7.4912017789934754e-02 5.3113255574142493e-01 3.0369193119222271e-01 + 1.3694610529910503e-01 6.3909101355662590e-01 4.2310263365936074e-01 + 2.3470129967368078e-01 7.4163004988272963e-01 5.6231413807441444e-01 + 3.7430656806198082e-01 8.3266056614923967e-01 7.2008170835223306e-01 + 5.6078441117799294e-01 9.0590527474389659e-01 8.9272451140268461e-01 + 7.9771923609832518e-01 9.5481766080075026e-01 1.0741514831792123e+00 + 1.0861244429059833e+00 9.7200699758459419e-01 1.2562459128872510e+00 + 1.4220263913752911e+00 9.4843650669400748e-01 1.4300270013337946e+00 + 1.7966380722448558e+00 8.7747271325448450e-01 1.5857907495033485e+00 + 2.2031328159836372e+00 7.6776533058180907e-01 1.7092880203235845e+00 + 2.6422095712222338e+00 6.4855624923852151e-01 1.7800597564951670e+00 + 3.1113255452225999e+00 5.4946334406505082e-01 1.7791793669748124e+00 + 3.5934789826274884e+00 4.8300153289024628e-01 1.6982236034721958e+00 + 4.0601618385820455e+00 4.4769193271703611e-01 1.5479692886626659e+00 + 4.4208695005215173e+00 3.3777770548437547e-01 1.4859144558730035e+00 + id 14904 + loc 2.4484254419803619e-01 2.5558340549468994e-01 394 + blend 0.0000000000000000e+00 + interp 4.2794084696338458e-01:3.1385271331718911e-01:9.5767831458816255e-01:3.2429223521679412e-01:2.0015523163559954e+00:2.7986806948041304e-01:2.8020275583938394e+00:4.2793656755491499e-01:3.1198616338014866e+00:3.4338994292511055e-01:3.9486636137875548e+00 + CVs 20 + -1.3966612442905116e-01 2.0359756228745940e-01 1.6306203199203684e-01 + -2.6504741730845505e-01 4.3317009186507449e-01 3.8125784443060362e-01 + -3.6793832260997084e-01 6.7655468527961449e-01 6.2959235672173763e-01 + -4.5139958306532685e-01 9.3550100394115721e-01 8.9771847302376917e-01 + -5.2868155323987986e-01 1.2141617173876438e+00 1.1825210033179188e+00 + -6.1947966639142438e-01 1.5061884977451792e+00 1.4858059278657172e+00 + -7.4722783588098352e-01 1.7982903446345295e+00 1.8159461815506681e+00 + -9.3196401459328815e-01 2.0725201832780500e+00 2.1761814952162544e+00 + -1.1811273860364373e+00 2.3020082209788288e+00 2.5585467396683059e+00 + -1.4809087067177313e+00 2.4514998765679703e+00 2.9486713186985076e+00 + -1.8011235381845250e+00 2.4866417346326228e+00 3.3326612506689548e+00 + -2.1050204204322758e+00 2.3829008445194639e+00 3.6958683706705582e+00 + -2.3540313172139911e+00 2.1558792782523502e+00 4.0222415165834615e+00 + -2.5515328246265465e+00 1.8821848068141573e+00 4.3130591523832269e+00 + -2.7377802477841779e+00 1.6428763185082687e+00 4.5816536758687167e+00 + -2.8927734268213539e+00 1.5199235355164089e+00 4.8218282103143491e+00 + -2.9355419162912844e+00 1.5631439960204441e+00 4.9981144094716967e+00 + -2.9198927980313267e+00 1.6532456920310290e+00 5.1108600662748227e+00 + -3.1457094216262274e+00 1.5037860857943550e+00 5.3489052011129008e+00 + id 14905 + loc 1.4230668544769287e-01 4.0015378594398499e-01 405 + blend 0.0000000000000000e+00 + interp 3.0375257456965088e-01:2.9333300001154300e-01:6.5709053897751057e-01:2.8212527917981250e-01:1.5343517620342972e+00:3.0374953704390517e-01:2.6935930055740442e+00:2.7650864656618646e-01:3.5992727538531004e+00 + CVs 20 + 7.4926831600397564e-02 1.3685735918368119e-01 -2.9830583103299932e-02 + 1.2719718260769058e-01 2.4207349004392326e-01 -8.7537147940534160e-03 + 1.8259746815268807e-01 3.3079293841522500e-01 3.3282274050215249e-02 + 2.5862635601147371e-01 4.1151873803064831e-01 7.2539794248947881e-02 + 3.5573839622230735e-01 4.8104746560974865e-01 1.0910076644783678e-01 + 4.7409662912743467e-01 5.3662702580143606e-01 1.4216868311015365e-01 + 6.1363922450971697e-01 5.7626499151503896e-01 1.6997183362034549e-01 + 7.7337136508374660e-01 5.9868862531956113e-01 1.8998126198205798e-01 + 9.5078685762733595e-01 6.0335759347747686e-01 1.9932411880944656e-01 + 1.1421587674012939e+00 5.9062049707934228e-01 1.9563423827602658e-01 + 1.3429213330251786e+00 5.6167846374593666e-01 1.7763609119044935e-01 + 1.5486682533377918e+00 5.1817525091634298e-01 1.4545358434352829e-01 + 1.7555053377259258e+00 4.6209097125056553e-01 9.9867594491698700e-02 + 1.9598005168390125e+00 3.9773685635714900e-01 4.0014937178795201e-02 + 2.1580668832843926e+00 3.3229927434412887e-01 -3.4451904029411062e-02 + 2.3469783375905351e+00 2.7295795026223013e-01 -1.1981713065253474e-01 + 2.5245573090811924e+00 2.2428481147083612e-01 -2.1186847246356261e-01 + 2.6916031925652484e+00 1.8584647687294717e-01 -3.0663578252321222e-01 + 2.9152616606939521e+00 1.3746162555541713e-01 -4.0192567580986460e-01 + id 14906 + loc 6.6252839565277100e-01 8.3827960491180420e-01 394 + blend 0.0000000000000000e+00 + interp 4.7973452531719724e-01:3.4143548147236269e-01:5.2659972496197360e-03:2.8205128869503920e-01:5.8484572965354387e-01:2.9722036601400664e-01:1.0293146951609098e+00:3.1360342699218446e-01:2.0711837049107986e+00:4.7972972797194408e-01:2.9079601815096363e+00:3.0459138413988518e-01:3.1957209607079120e+00 + CVs 20 + -1.5972665074088421e-01 1.9198590062288490e-01 -2.7987859695536260e-01 + -3.0505054403012111e-01 3.9006407620946981e-01 -5.6304804108701723e-01 + -4.2383218889608465e-01 5.8922621157119881e-01 -8.5317065757352284e-01 + -5.1316100040585966e-01 7.8443597083699612e-01 -1.1535745264781037e+00 + -5.7736122993725791e-01 9.7303749909105708e-01 -1.4674855037287822e+00 + -6.2563933740102051e-01 1.1556875240676114e+00 -1.7985221541681278e+00 + -6.6683210964833006e-01 1.3287135272134498e+00 -2.1481680469887250e+00 + -7.0489926795750302e-01 1.4763312450460102e+00 -2.5162286825197455e+00 + -7.4413593989062077e-01 1.5766779642061912e+00 -2.9054401249798598e+00 + -7.9659171890216540e-01 1.6118040217161975e+00 -3.3212342970124515e+00 + -8.7520800098721407e-01 1.5662896773574153e+00 -3.7583489551070715e+00 + -9.8078390004592486e-01 1.4314660461109385e+00 -4.1917436412928533e+00 + -1.1102438756897783e+00 1.2120169839928194e+00 -4.5971721807112678e+00 + -1.2781715826088635e+00 9.1213377546134788e-01 -4.9669669489270944e+00 + -1.5085886877406067e+00 5.2988664818978704e-01 -5.2860109838855820e+00 + -1.7879495662920071e+00 7.5050513643404759e-02 -5.5043387482471609e+00 + -2.0475013400581248e+00 -4.2018379557712526e-01 -5.5655527742745061e+00 + -2.2366166178127944e+00 -9.0265906554128028e-01 -5.4739922959752541e+00 + -2.4365711770177509e+00 -1.2662518132919538e+00 -5.4868143399992331e+00 + id 14907 + loc 7.6034450531005859e-01 9.2430096864700317e-01 405 + blend 0.0000000000000000e+00 + interp 4.7024295186926912e-01:2.7089484288401366e-01:9.8041595332852061e-01:4.3852054186151945e-01:1.7827954973939748e+00:2.9054659211022293e-01:2.3014971313969785e+00:3.5869664006166901e-01:2.9828472132260617e+00:4.7023824943975046e-01:3.3166418107806850e+00:2.6973053944625897e-01:3.9977131288138326e+00 + CVs 20 + 2.0678643399380209e-01 3.0777601732425225e-01 -2.0185965078680711e-02 + 2.7910742822314660e-01 4.6225463569457292e-01 -2.9181389100823359e-02 + 2.9249543482225454e-01 5.6293200962541823e-01 -4.1457042858778513e-02 + 3.0960034242077877e-01 6.4249100449425423e-01 -6.2975759438190379e-02 + 3.2388585634136141e-01 7.0195370826184278e-01 -1.0004930197598480e-01 + 3.2842254798947712e-01 7.4971769474828021e-01 -1.6599208825223422e-01 + 3.2136960698788847e-01 8.1250999423936365e-01 -2.7884752563979809e-01 + 3.2073269365975909e-01 9.3645507914504100e-01 -4.2989512827162429e-01 + 3.5675022298434594e-01 1.1204655224926485e+00 -5.4977650879816209e-01 + 4.2514678170845982e-01 1.2935624259612954e+00 -5.9351551469441444e-01 + 5.0828317035740822e-01 1.4185626703602896e+00 -5.8031663534829048e-01 + 6.0433356191502807e-01 1.4993320544422117e+00 -5.3302772587680580e-01 + 7.1299873241155942e-01 1.5386496323976013e+00 -4.6304701306945728e-01 + 8.2102189464309205e-01 1.5232991847475350e+00 -3.8281965129950679e-01 + 9.1178337145915089e-01 1.4436901425820090e+00 -3.0483356803192396e-01 + 9.8513573253082076e-01 1.3153374613506612e+00 -2.2697096421466423e-01 + 1.0554759615729452e+00 1.1675924941968017e+00 -1.3869128428763777e-01 + 1.1419175077052437e+00 1.0199391881005822e+00 -3.7407818581248170e-02 + 1.3211249384483448e+00 9.5337185910844902e-01 8.0052237380411839e-02 + id 14908 + loc 4.7364240884780884e-01 9.9812680482864380e-01 394 + blend 0.0000000000000000e+00 + interp 4.5688046798004495e-01:3.1318206769207591e-01:1.8181246006618912e-01:2.7755521875014355e-01:1.2062290398412003e+00:4.5687589917536514e-01:2.0338451212845317e+00:2.9050254094458100e-01:2.6192644592231802e+00:2.8541931710634222e-01:3.3891678234778335e+00 + CVs 20 + -2.1598847307974431e-01 2.6270341139784670e-01 -3.0741045093105335e-01 + -4.3989903888797233e-01 5.0437067152878301e-01 -6.0399315888380189e-01 + -6.7034194508751677e-01 7.2818261076292967e-01 -9.0314446472248089e-01 + -9.1166316249282686e-01 9.2910078728708811e-01 -1.2119779883101494e+00 + -1.1694758579428042e+00 1.0941568288083230e+00 -1.5288185307068942e+00 + -1.4468081928807632e+00 1.2055171558668105e+00 -1.8466508045927497e+00 + -1.7361500977076210e+00 1.2418921415684698e+00 -2.1540385836628984e+00 + -2.0213820708734636e+00 1.1884595991714413e+00 -2.4378442106684135e+00 + -2.2914583082079125e+00 1.0478998272679401e+00 -2.6866278842161391e+00 + -2.5486448975191891e+00 8.3843851966150784e-01 -2.8958429853101579e+00 + -2.7971348953980280e+00 5.8210725793411200e-01 -3.0714365469308325e+00 + -3.0333316072649339e+00 2.9776882240815650e-01 -3.2307752818291924e+00 + -3.2500152811716805e+00 -4.8507042053269611e-03 -3.3907105519424170e+00 + -3.4412027838794561e+00 -3.2506753981368952e-01 -3.5497709648401226e+00 + -3.6138846856409637e+00 -6.5681607342722614e-01 -3.7121252340184583e+00 + -3.8039890955700222e+00 -9.6987917204646346e-01 -3.9526082274739460e+00 + -4.0541445068000943e+00 -1.1545615568499974e+00 -4.4164942921011692e+00 + -4.3125698429114427e+00 -1.0221721339496810e+00 -5.0480171742294893e+00 + -4.5145085482798573e+00 -1.0889023613421671e+00 -5.3384494744324442e+00 + id 14909 + loc 3.6584950983524323e-02 1.8373517692089081e-01 405 + blend 0.0000000000000000e+00 + interp 4.1422193729126211e-01:2.9782457254275263e-01:5.4499854655212543e-01:2.8566710569616277e-01:1.1663908975271220e+00:2.8991277930396964e-01:1.9445448351794177e+00:4.1421779507188922e-01:2.8961997806235749e+00:3.0167975697078553e-01:3.0939955368474292e+00:2.7587896280707996e-01:3.9415882306380974e+00 + CVs 20 + 2.9322848871729056e-02 1.0626288389553050e-01 -3.2866858282998075e-02 + 3.0519983484145804e-02 1.7309583817206731e-01 -1.8547581491516835e-02 + 3.0429257018585183e-02 2.4438764775937988e-01 2.1163595194794146e-02 + 4.2773571989879598e-02 3.1680920275025981e-01 6.3608006663887259e-02 + 6.7108006747232357e-02 3.8587778366288444e-01 1.0965746268637036e-01 + 1.0257489889387288e-01 4.4772061664580598e-01 1.6040850762234646e-01 + 1.4880472830924793e-01 4.9899816069341979e-01 2.1703190106619757e-01 + 2.0632418162721888e-01 5.3679610567871494e-01 2.8077733338135136e-01 + 2.7688405623500267e-01 5.5831713099173141e-01 3.5294036808096224e-01 + 3.6400230428547831e-01 5.6077036365984889e-01 4.3464363159091285e-01 + 4.7243668324793203e-01 5.4139386687301805e-01 5.2598859329256420e-01 + 6.0653868437512393e-01 4.9778616322861158e-01 6.2529241333286156e-01 + 7.6850474423773518e-01 4.2893775310355664e-01 7.2948761184091970e-01 + 9.5510821790114708e-01 3.3628241706069073e-01 8.3563115895640039e-01 + 1.1583794981492115e+00 2.2435721975247158e-01 9.4295968609706038e-01 + 1.3721441104495458e+00 1.0042924490336480e-01 1.0527863279117069e+00 + 1.5953910429894527e+00 -2.7117554952942546e-02 1.1651081756944546e+00 + 1.8255631232399010e+00 -1.4995747386296865e-01 1.2777670734326039e+00 + 1.9929094895396509e+00 -2.4530330245791243e-01 1.4117599813427946e+00 + id 14910 + loc 3.2087561488151550e-01 1.0702168941497803e-01 394 + blend 0.0000000000000000e+00 + interp 5.4996240006655417e-01:3.2391943972794923e-01:2.1699456416122254e-02:3.8920505123476762e-01:6.1742539047339096e-01:3.1068990481809394e-01:1.0200384013368005e+00:3.7225098671328488e-01:2.0302718470978776e+00:2.6945380306660477e-01:2.8546987880047969e+00:5.4995690044255352e-01:3.5921222281667400e+00 + CVs 20 + -1.4436069524947398e-01 2.2327931152254873e-01 2.0622995996185128e-01 + -2.8526376731196151e-01 4.4977477240205443e-01 4.3198673561637896e-01 + -4.2523498291560669e-01 6.7500113113594340e-01 6.6637288107057202e-01 + -5.6883730907186236e-01 9.0083913423996398e-01 9.0261198515897179e-01 + -7.2220419034944960e-01 1.1267105479469981e+00 1.1328133978508790e+00 + -8.9252524732890481e-01 1.3432488078525249e+00 1.3529957919755777e+00 + -1.0863943073361972e+00 1.5354079858740255e+00 1.5684361315360091e+00 + -1.3051731853451032e+00 1.6882475871084193e+00 1.7839069621014430e+00 + -1.5419800818844560e+00 1.7902477504402503e+00 1.9970724409982052e+00 + -1.7815764156120177e+00 1.8342053233773763e+00 2.2015776258016624e+00 + -1.9997963701207042e+00 1.8192225087689182e+00 2.3897213586576065e+00 + -2.1708086987161908e+00 1.7549542749894373e+00 2.5538307648346952e+00 + -2.2906695340412644e+00 1.6526125759164159e+00 2.6988667258398631e+00 + -2.3907036578533019e+00 1.4947883752324540e+00 2.8520654134610330e+00 + -2.5004395584680146e+00 1.2529635709920472e+00 3.0414847869389634e+00 + -2.6274235913849422e+00 9.5776376143845221e-01 3.2757334300585947e+00 + -2.7556820846236350e+00 6.8782381406400273e-01 3.5402414037620629e+00 + -2.8503341189682816e+00 5.0315022887017591e-01 3.8024790318056274e+00 + -2.9083826140805096e+00 3.9903997146629688e-01 4.0810810018524464e+00 + id 14911 + loc 9.1782063245773315e-01 7.5695142149925232e-02 405 + blend 0.0000000000000000e+00 + interp 3.6969991551298542e-01:3.6969621851383033e-01:1.0355086079719567e-01:2.5958228846848591e-01:9.9269670229356277e-01:3.0486281222009831e-01:1.8945170096734900e+00:2.7556091335804489e-01:2.8588882239012348e+00:2.6000656447991577e-01:3.5944090128244155e+00 + CVs 20 + 9.6641329960446387e-02 6.4619552147788972e-02 1.6253416684912557e-02 + 1.9913681910801112e-01 1.1170484176500955e-01 2.0015901734963419e-02 + 3.0757139973122644e-01 1.4758125287833912e-01 2.5423439096896372e-02 + 4.1636257499809615e-01 1.7257982388173118e-01 3.6712938270023913e-02 + 5.2360517213120439e-01 1.8808726005623286e-01 5.2563653499416461e-02 + 6.2836827282006413e-01 1.9709924071211568e-01 7.2020787991671303e-02 + 7.3121947124008435e-01 2.0395825270998963e-01 9.4348370439063411e-02 + 8.3471520528684717e-01 2.1386748177705073e-01 1.1860150339438844e-01 + 9.4279693384688312e-01 2.3201053612909894e-01 1.4303249636874160e-01 + 1.0596392791206715e+00 2.6275899788922902e-01 1.6481941204231923e-01 + 1.1885592400370217e+00 3.0910938968677010e-01 1.8023708143988598e-01 + 1.3315828156136420e+00 3.7229149703068876e-01 1.8477196749274569e-01 + 1.4892325636002393e+00 4.5197940806268277e-01 1.7157914950822975e-01 + 1.6606593734013937e+00 5.4680127276262180e-01 1.3258508819634407e-01 + 1.8401430044697711e+00 6.5611150973921739e-01 6.2983540869062021e-02 + 2.0115045265859499e+00 7.8333346707561113e-01 -2.7697714388242201e-02 + 2.1570425479392519e+00 9.3397452170393402e-01 -1.1268924755105103e-01 + 2.2733503729174904e+00 1.1088763927891612e+00 -1.6706130682362361e-01 + 2.3425120723657291e+00 1.3254331659772212e+00 -1.7473091423768300e-01 + id 14912 + loc 3.1890997290611267e-01 9.5585697889328003e-01 394 + blend 0.0000000000000000e+00 + interp 3.7021646158786820e-01:3.2038296407126077e-01:1.5840653014936124e-01:2.5914099894591353e-01:9.9941226379690662e-01:2.3347060951336501e-01:1.9206549720607187e+00:3.7021275942325232e-01:2.2615834040601501e+00:3.1550154645652567e-01:3.0841719572679120e+00 + CVs 20 + -2.6249889065127974e-01 2.0036775934530138e-01 -1.0270397746248486e-01 + -5.1897099042414452e-01 3.9958471331353679e-01 -2.1847804450069347e-01 + -7.7584076534765545e-01 6.0112464280459488e-01 -3.5412268233244687e-01 + -1.0351120358780195e+00 8.0030859925066344e-01 -5.1613969192020626e-01 + -1.2949568717135882e+00 9.8411513924640726e-01 -7.0896539114958812e-01 + -1.5523780919442791e+00 1.1344498960590657e+00 -9.3356171975157531e-01 + -1.8033136596619905e+00 1.2320363385952160e+00 -1.1860168949764480e+00 + -2.0417177950784353e+00 1.2621669875698727e+00 -1.4571096755616195e+00 + -2.2610701098939239e+00 1.2185006897449870e+00 -1.7341117551145007e+00 + -2.4587680332412263e+00 1.1034770759218779e+00 -2.0051735134597934e+00 + -2.6356800195787322e+00 9.2665057097664949e-01 -2.2607939180920256e+00 + -2.7915220587668244e+00 7.0404262844400201e-01 -2.4942502191800893e+00 + -2.9245271104178281e+00 4.5520057143689230e-01 -2.7025658576406855e+00 + -3.0353435385775893e+00 1.9582588832647274e-01 -2.8829756213976148e+00 + -3.1344158574388814e+00 -7.0612823693463111e-02 -3.0397014243389506e+00 + -3.2483011636259587e+00 -3.6013015849530139e-01 -3.2135999501011456e+00 + -3.4127552816754498e+00 -6.7540431792497690e-01 -3.5109211978025021e+00 + -3.6239759510799723e+00 -8.8347884846774072e-01 -3.9971665980378086e+00 + -3.7478618633229899e+00 -9.7654327467107249e-01 -4.2333564498623986e+00 + id 14913 + loc 7.7963256835937500e-01 1.0983257740736008e-01 405 + blend 0.0000000000000000e+00 + interp 4.3246582568082670e-01:4.3246150102256992e-01:7.4249737192610965e-05:2.7008990354056200e-01:8.7632238619117864e-01:2.6664042707357055e-01:1.6175149760151313e+00:3.2748178832111036e-01:2.4153242179357792e+00:2.6126852486519009e-01:3.2630601291054817e+00 + CVs 20 + 1.1450849598101275e-01 8.0325007897832992e-02 1.3668522227314319e-02 + 2.4119609938200742e-01 1.4770960321524707e-01 1.4591590223834329e-02 + 3.7542245668715246e-01 2.0809196691718637e-01 3.7584351960458125e-03 + 5.1157459208596689e-01 2.6309986329487944e-01 -2.0754137241513912e-02 + 6.4631843461318361e-01 3.1185629933464820e-01 -6.2934580819705876e-02 + 7.7440953561307158e-01 3.5325572166200947e-01 -1.2615023399206993e-01 + 8.8892845634153117e-01 3.8659649403590451e-01 -2.1236239705704751e-01 + 9.8238395628019781e-01 4.1234235499393462e-01 -3.2146672214179284e-01 + 1.0471253181844911e+00 4.3209759513429724e-01 -4.5073919284632763e-01 + 1.0768388756794409e+00 4.4857705165653272e-01 -5.9495638473023749e-01 + 1.0666296907432107e+00 4.6470055313073999e-01 -7.4752236714859643e-01 + 1.0152942614810665e+00 4.8228754129966156e-01 -9.0110658092847318e-01 + 9.2628069082169362e-01 5.0329143373852037e-01 -1.0505084875139905e+00 + 8.0010976983037452e-01 5.3720067028028451e-01 -1.1892573409415261e+00 + 6.3069831263422704e-01 6.0600989059274468e-01 -1.2969043761592245e+00 + 4.1855861999390487e-01 7.2744457230764281e-01 -1.3347906676338810e+00 + 1.8542555720825779e-01 8.8683462795506185e-01 -1.2742285316576707e+00 + -4.0076854866883449e-02 1.0507667766025657e+00 -1.1299536438014723e+00 + -2.4700799065412271e-01 1.2058009475938256e+00 -1.2438295485545092e+00 + id 14914 + loc 8.0522245168685913e-01 4.2653501033782959e-01 394 + blend 0.0000000000000000e+00 + interp 4.3104795092031828e-01:4.3104364044080912e-01:2.0453653616788992e-01:3.1312670901593126e-01:7.5107742721390813e-01:3.4704132864197246e-01:1.4868535102523925e+00:3.0953800334037218e-01:2.5039818378663634e+00:2.7921672188267799e-01:3.1702896004425183e+00:4.2881685658411212e-01:3.9745922231033814e+00 + CVs 20 + 3.5035770834164892e-01 2.4664828261900523e-01 2.3220610203699121e-01 + 6.6009873679123876e-01 4.5977188395365853e-01 4.5903480423057408e-01 + 9.5595249163202856e-01 6.6083830282930300e-01 6.9699251398472639e-01 + 1.2437827440829974e+00 8.6373045560892137e-01 9.5721241043857641e-01 + 1.5151417139564991e+00 1.0708592753004611e+00 1.2428749335302598e+00 + 1.7691673201788589e+00 1.2842269456359223e+00 1.5549647535164532e+00 + 2.0131862236291180e+00 1.5048300024327728e+00 1.8951458792969829e+00 + 2.2572995719254783e+00 1.7255378250778586e+00 2.2699380737976513e+00 + 2.5141403265669275e+00 1.9282614967308389e+00 2.6901938745638274e+00 + 2.7994184328654970e+00 2.0877725065162944e+00 3.1628731638227596e+00 + 3.1228660446687231e+00 2.1786203240941151e+00 3.6815096810316930e+00 + 3.4802901166144018e+00 2.1875916414827223e+00 4.2255990564602079e+00 + 3.8620756071786086e+00 2.1116099114764491e+00 4.7733611838969940e+00 + 4.2717282863987203e+00 1.9452968752803153e+00 5.3041725160673927e+00 + 4.7235382725080317e+00 1.6720159715786802e+00 5.7937959531785932e+00 + 5.2226513553384244e+00 1.2525075260915788e+00 6.2149171935697600e+00 + 5.7394998097786143e+00 6.4859260445603972e-01 6.5253354488416324e+00 + 6.1965504593813847e+00 -6.7238267563902276e-02 6.6842090372046794e+00 + 6.4720136703694617e+00 -4.5131613880908539e-01 6.8094697700640499e+00 + id 14915 + loc 1.6448892652988434e-01 5.1562285423278809e-01 405 + blend 0.0000000000000000e+00 + interp 3.0075374283979811e-01:2.9113812185953042e-01:6.8827793645257418e-01:2.7846856280730015e-01:1.8010340804335361e+00:3.0075073530236973e-01:2.7340624920362764e+00:2.7829166202394373e-01:3.7442616551154062e+00 + CVs 20 + -4.0606263280986987e-03 8.5968056189874353e-02 1.0681667588672028e-01 + -5.4184758990050937e-02 1.0124252320279556e-01 1.5644058203836173e-01 + -1.4367742032595879e-01 1.1356837266096192e-01 1.8068287989240367e-01 + -2.2555789930840853e-01 1.3221610979524084e-01 1.9049684473560491e-01 + -3.0418741544422123e-01 1.6472310911869859e-01 1.9403724518400411e-01 + -3.8561250756411758e-01 2.1650807080788048e-01 2.0700448413041372e-01 + -4.7470539933209910e-01 2.8743394856630666e-01 2.4868805056037771e-01 + -5.7229578012074089e-01 3.7272207472303831e-01 3.3584981593121871e-01 + -6.7394754706275606e-01 4.6585257670225266e-01 4.7957393774782769e-01 + -7.7119831543859729e-01 5.6099003969354855e-01 6.8454058162718512e-01 + -8.5326701029609797e-01 6.5384750340450526e-01 9.4839052097703080e-01 + -9.1065765415516098e-01 7.3932824913532191e-01 1.2636765129798289e+00 + -9.3849144701795673e-01 8.0830713068545579e-01 1.6215660890833021e+00 + -9.3358910433061060e-01 8.5553608395124670e-01 2.0078124219586453e+00 + -8.9113959664149922e-01 8.9363889767590410e-01 2.3974992093019520e+00 + -8.0884944732747344e-01 9.4322238543878678e-01 2.7636365877972322e+00 + -6.9130003425678277e-01 1.0113415965402148e+00 3.0872322005608965e+00 + -5.5065324925025072e-01 1.0913242919213186e+00 3.3562171188189884e+00 + -4.0961473050805786e-01 1.1543773103123092e+00 3.5905252609301255e+00 + id 14916 + loc 2.7497125789523125e-02 2.9907722491770983e-03 394 + blend 0.0000000000000000e+00 + interp 6.2164618206702049e-01:4.4018608702995204e-01:2.6138164259819019e-01:2.7397898503209006e-01:9.9916819070830620e-01:3.4851910093212868e-01:2.0006813233999488e+00:3.6745724951715902e-01:2.4341149796963264e+00:3.7256661583315953e-01:3.0031239441840576e+00:6.2163996560519985e-01:3.7663668160033090e+00:5.8685467687613313e-01:3.9934124783531866e+00 + CVs 20 + -6.2142882979037181e-02 1.6572475718566027e-01 2.5770555082355934e-01 + -1.1280588731405176e-01 3.4847886199178757e-01 5.0506488493833857e-01 + -1.3369369078474627e-01 5.3706508121117613e-01 7.4066733350144087e-01 + -1.1289124153896407e-01 7.2927762636506532e-01 9.6289726101795015e-01 + -5.3261873225962930e-02 9.3519747305544609e-01 1.1621879656156695e+00 + 3.5736697499378800e-02 1.1692748892288296e+00 1.3396420462638834e+00 + 1.3411670513339152e-01 1.4397790243535535e+00 1.5189442222609779e+00 + 2.1684386210330509e-01 1.7440607882363408e+00 1.7236414247442449e+00 + 2.5851115025491861e-01 2.0760951648925094e+00 1.9594897444481525e+00 + 2.3535091515327677e-01 2.4308947604693558e+00 2.2214123758174940e+00 + 1.2843685771472668e-01 2.8044177981083012e+00 2.5165774413541784e+00 + -8.1141314125998787e-02 3.1702886150767715e+00 2.8761387515842873e+00 + -3.8046638239937836e-01 3.4349170932056907e+00 3.2982676781172819e+00 + -6.7552900724206599e-01 3.5202562365046952e+00 3.6813726097045358e+00 + -8.8901558762350963e-01 3.4808545246091258e+00 3.9262792488043132e+00 + -1.0487858500543208e+00 3.4079936959193668e+00 3.9967765284161678e+00 + -1.2350585130481817e+00 3.3412591540582159e+00 3.9089383153708557e+00 + -1.4550668861647404e+00 3.3016003181208697e+00 3.8233553609031228e+00 + -1.6102817852760039e+00 3.4045107126595018e+00 4.0354484575064493e+00 + id 14917 + loc 9.5703226327896118e-01 7.9119604825973511e-01 405 + blend 0.0000000000000000e+00 + interp 6.5415864197368789e-01:2.6727746393659030e-01:1.7222481925561062e-01:3.8018778522584534e-01:9.5560963794846976e-01:2.7748222124430283e-01:1.4498066468322242e+00:6.5415210038726823e-01:2.0011654555709311e+00:3.8413176452636583e-01:2.9400500596063686e+00:5.5568938022151715e-01:3.3093191575342682e+00:4.6431295074810769e-01:3.9358936525360946e+00 + CVs 20 + 1.0631989579892094e-01 2.5971375071183433e-01 1.4522874865655334e-02 + 1.2344427782502400e-01 4.0208877759764605e-01 7.6168154309425501e-02 + 7.4723255909862923e-02 5.1125606372518284e-01 1.4896636921769132e-01 + 3.1659638080513364e-02 6.0740811157293984e-01 2.3352373202822491e-01 + -6.6581154266308895e-03 6.7985491110270579e-01 3.2680376482058515e-01 + -4.7719814431052748e-02 7.1348522794908875e-01 4.2068489973954026e-01 + -1.0784065558049985e-01 6.8358318634748216e-01 4.9471175156393216e-01 + -2.2509495521179293e-01 5.5787509197368035e-01 4.8961174734042479e-01 + -4.6640565091623376e-01 3.6527533685669505e-01 2.5416928319190424e-01 + -7.8959328764697956e-01 3.7433310560006883e-01 -2.3852085130731276e-01 + -1.0155426551375555e+00 5.9264590912704418e-01 -5.8268983518520223e-01 + -1.1642600435952790e+00 7.6011448229061074e-01 -7.1788352401447397e-01 + -1.2825890360781926e+00 8.4222105573480710e-01 -7.6423320061847211e-01 + -1.3811630795789340e+00 8.5024563690675858e-01 -7.7110237303343820e-01 + -1.4595966429577378e+00 7.5162112949060800e-01 -7.3644239804550971e-01 + -1.5046258086361908e+00 5.0442991206130405e-01 -6.3787168459258703e-01 + -1.4824021685732933e+00 1.2485899990919358e-01 -4.5344801468497004e-01 + -1.3571289392010766e+00 -3.0936705753982396e-01 -1.8601907642079166e-01 + -1.2258903570658126e+00 -4.9934935726879914e-01 -1.1142052051033591e-01 + id 14918 + loc 2.3076745867729187e-01 5.5657297372817993e-01 394 + blend 0.0000000000000000e+00 + interp 4.7544964497096004e-01:2.8427474627606758e-01:7.9517010248575326e-01:2.7499215158478518e-01:1.2815839601627577e+00:4.7544489047451033e-01:2.0568444605477931e+00:3.1628411178698357e-01:2.7687364589639207e+00:3.4095194247085225e-01:3.1890745796822531e+00:3.0356928855236737e-01:3.9829416231628594e+00 + CVs 20 + -2.1263450409491882e-01 2.0042208343891774e-01 -1.5546596619556596e-01 + -4.2119472312549744e-01 4.0773876633879369e-01 -3.1484052314462657e-01 + -6.3133336876498003e-01 6.2934767323105023e-01 -4.7190115462274934e-01 + -8.4602018158205095e-01 8.6873917861458627e-01 -6.2580913782743552e-01 + -1.0619225421284675e+00 1.1201583444854573e+00 -7.8222472717813951e-01 + -1.2757983209987804e+00 1.3701771263986686e+00 -9.5163086672866448e-01 + -1.4851998726323181e+00 1.6005019036054169e+00 -1.1448513842581027e+00 + -1.6885325187538036e+00 1.7956279251958587e+00 -1.3646852302124501e+00 + -1.8850831787480931e+00 1.9470469036409246e+00 -1.6057031065269647e+00 + -2.0690268753763812e+00 2.0445483271891156e+00 -1.8608473163101378e+00 + -2.2223911326043249e+00 2.0718291841209400e+00 -2.1194985290033492e+00 + -2.3246069404842666e+00 2.0234918477132839e+00 -2.3626186622958643e+00 + -2.3712483826211379e+00 1.9157739746053064e+00 -2.5749615085005546e+00 + -2.3753429577451541e+00 1.7690845294125883e+00 -2.7622863908041468e+00 + -2.3563594506723691e+00 1.5873249479089817e+00 -2.9461842707443862e+00 + -2.3340840147798763e+00 1.3608173803840513e+00 -3.1412129438726071e+00 + -2.3430657370646957e+00 1.0703515348995372e+00 -3.3549612090268690e+00 + -2.4275953670939510e+00 7.1863296337071692e-01 -3.5805139161252111e+00 + -2.4648817360320807e+00 4.7162306518416153e-01 -3.7576280161948370e+00 + id 14919 + loc 1.0082822293043137e-01 6.5590345859527588e-01 405 + blend 0.0000000000000000e+00 + interp 2.9872139276674142e-01:2.9871840555281376e-01:8.4684422505469636e-01:2.9750036235283939e-01:1.7004468998543136e+00:2.7615242975200288e-01:2.8144497948768876e+00:2.6563651444107073e-01:3.9137700664013253e+00 + CVs 20 + 1.8783320632210010e-01 2.8530922378474521e-01 4.5079745077897374e-02 + 2.3475557604464173e-01 5.3686874901233550e-01 8.2287900850274653e-02 + 2.5748891251677708e-01 7.5332813532545240e-01 1.3990093423629968e-01 + 2.7557129976638606e-01 9.6453436890826350e-01 2.4385146595732968e-01 + 2.8589751746312114e-01 1.1600486190429460e+00 3.9817810475392568e-01 + 2.8838664502208444e-01 1.3290161449526348e+00 5.9843620402869824e-01 + 2.8553104721948996e-01 1.4653659917913067e+00 8.3319668650951462e-01 + 2.8118685252753339e-01 1.5697289824699494e+00 1.0892414786975630e+00 + 2.7879675135507764e-01 1.6476921106874927e+00 1.3557854408173757e+00 + 2.8076059762255745e-01 1.7060617127530113e+00 1.6255220321685715e+00 + 2.8840963033116107e-01 1.7488227576595019e+00 1.8947390988393693e+00 + 3.0208539372051202e-01 1.7765254514424580e+00 2.1624213402973518e+00 + 3.2289840160446159e-01 1.7904155311096233e+00 2.4229276587855253e+00 + 3.5243958048833524e-01 1.8008879699248195e+00 2.6547227733634626e+00 + 3.8839354155926964e-01 1.8222870165534593e+00 2.8288486243154436e+00 + 4.2427505084462902e-01 1.8537529109226298e+00 2.9363262831514270e+00 + 4.5568568219476591e-01 1.8810981976722563e+00 2.9930992242753653e+00 + 4.8295429652771871e-01 1.8933870148207641e+00 3.0197096757365158e+00 + 5.6890074405760394e-01 1.8889981070652972e+00 3.1211939056003728e+00 + id 14920 + loc 3.2670190930366516e-01 4.1882383823394775e-01 394 + blend 0.0000000000000000e+00 + interp 3.8875354084509273e-01:2.9778306610897581e-01:3.0948863298577745e-01:3.0971424612080251e-01:1.2304548059949107e+00:3.2589744846230329e-01:1.9881788536374132e+00:3.0217121549553305e-01:2.6137752856466840e+00:3.8874965330968431e-01:3.0479623574591184e+00:3.1781948195208565e-01:3.6616903077441316e+00 + CVs 20 + -1.9787216095575039e-01 7.0803242701324778e-02 2.5427309739420495e-01 + -3.8796735357551293e-01 1.1363518589080568e-01 4.8156813008868860e-01 + -5.8018228714701214e-01 1.5020216947278420e-01 7.0451429666886389e-01 + -7.7098922591700769e-01 1.9462934131835757e-01 9.3237482069809363e-01 + -9.4718816668531591e-01 2.4999604025395727e-01 1.1491452207037944e+00 + -1.0922835772080250e+00 3.1390882707364698e-01 1.3316539118727184e+00 + -1.2063787160214481e+00 3.8634589491581084e-01 1.4691904549145183e+00 + -1.3112043866266261e+00 4.7188509548733382e-01 1.5674863101071261e+00 + -1.4118790075605920e+00 5.7830683412106310e-01 1.6309614473599565e+00 + -1.4765054614336508e+00 7.2488113364938656e-01 1.6554926580248397e+00 + -1.4867995944492860e+00 9.4242218653417886e-01 1.6470923342947426e+00 + -1.4905085154889499e+00 1.2442632637170898e+00 1.6362310930518513e+00 + -1.5660466347135100e+00 1.5891717210398224e+00 1.6600968174103068e+00 + -1.7512053031015096e+00 1.8698991721895510e+00 1.7383795300093523e+00 + -2.0221297034254162e+00 1.9738008091126584e+00 1.8418192688631447e+00 + -2.3462943937465148e+00 1.8579267479251613e+00 1.9135086522166640e+00 + -2.7105847884761882e+00 1.5149871227150016e+00 1.9404803278201945e+00 + -3.0736024331445728e+00 1.0360774858473232e+00 2.0186351689241464e+00 + -3.2608880829455202e+00 8.3854525872045294e-01 2.2466433702649828e+00 + id 14921 + loc 7.3104298114776611e-01 2.9488626122474670e-01 405 + blend 0.0000000000000000e+00 + interp 3.6581619111935909e-01:3.6581253295744792e-01:5.0981575464856288e-01:3.6343570153566335e-01:1.0075236846821964e+00:2.5256891270374127e-01:1.7190194344166607e+00:2.7686527422548096e-01:2.9810295268672640e+00:2.6791076881148035e-01:3.9054828860893185e+00 + CVs 20 + -3.6690116993533591e-02 1.1282821821092426e-01 7.2239637897649478e-02 + -4.4827141341278257e-02 2.1410525380437573e-01 1.2822732823120500e-01 + -3.5365983231993220e-02 2.9101139105391094e-01 1.6668002018014777e-01 + -2.3190778022098402e-02 3.7039303870054441e-01 1.9397996235607259e-01 + -7.7209277795857179e-03 4.5414417760827219e-01 2.1343619613114784e-01 + 1.1559101032785679e-02 5.4247878481483836e-01 2.2831514490341492e-01 + 3.5143699888101787e-02 6.3421450839297966e-01 2.4098115846174101e-01 + 6.3217759532093243e-02 7.2602343529784608e-01 2.5184969551260705e-01 + 9.4592213019194626e-02 8.1323336894537068e-01 2.5965766654921274e-01 + 1.2549532555735277e-01 8.9052764766110859e-01 2.6135350723912520e-01 + 1.4993464229269188e-01 9.5463420985095582e-01 2.5384586840373669e-01 + 1.6015726046758411e-01 1.0077452248159964e+00 2.3273394791890811e-01 + 1.4858322519428274e-01 1.0520150496743501e+00 1.9490146712930684e-01 + 1.1397072217659077e-01 1.0776484578997203e+00 1.5025998522181078e-01 + 6.5869675824338170e-02 1.0658070506411716e+00 1.2493346097374797e-01 + 1.9678963201634092e-02 1.0081648420471634e+00 1.3893329659023188e-01 + -1.7042277947800111e-02 9.2188017349770934e-01 1.8244331886146900e-01 + -4.9844681905200749e-02 8.3729390082959976e-01 2.3298374160111338e-01 + -2.5409498692748278e-01 8.7528549396317434e-01 1.3652127726777125e-01 + id 14922 + loc 3.2459309697151184e-01 2.2801153361797333e-01 405 + blend 0.0000000000000000e+00 + interp 3.2506136903405075e-01:2.6389506403112351e-01:1.2832727595875071e-01:3.2505811842036042e-01:9.9629517400415823e-01:2.6365143150807402e-01:1.9978738678607670e+00:2.6879093900362755e-01:3.0078443983345613e+00 + CVs 20 + -3.7777538781987405e-02 3.8217408633099380e-02 4.9059133790148590e-02 + -1.0695629234511651e-01 6.2233882079845496e-02 1.0459289875978905e-01 + -1.9645297527670152e-01 1.0035950374582106e-01 1.9447230962085615e-01 + -2.8614945028331040e-01 1.5369926556085428e-01 3.0123627131755493e-01 + -3.6909543830753133e-01 2.2234319927466628e-01 4.3255187001970713e-01 + -4.3569702617045819e-01 3.0399327351105276e-01 5.9600384589297362e-01 + -4.7455737615402843e-01 3.9341073193587778e-01 7.9496459358072968e-01 + -4.7455204143747548e-01 4.8396860032991029e-01 1.0277937751086030e+00 + -4.2612087639324259e-01 5.6867311645175733e-01 1.2880196228621159e+00 + -3.2269741546735642e-01 6.4024905181971470e-01 1.5642513719406459e+00 + -1.6247649261769817e-01 6.9221725783237309e-01 1.8411607868293807e+00 + 4.9132014498905571e-02 7.2076274594052958e-01 2.0995685952669252e+00 + 3.0098771459702184e-01 7.2209909162671571e-01 2.3225251595185936e+00 + 5.8361625177607312e-01 6.8666427463572144e-01 2.5017801687294057e+00 + 8.9240103810192539e-01 6.0498181752369029e-01 2.6336287821758968e+00 + 1.2233991345241511e+00 4.8465398783935720e-01 2.7116778317898445e+00 + 1.5653867701286606e+00 3.5184656418702143e-01 2.7282456629285265e+00 + 1.8960805320736458e+00 2.3121747151491290e-01 2.6824022858450922e+00 + 2.0386822883603450e+00 1.7650511009457115e-01 2.5573442105992581e+00 + id 14923 + loc 1.7843408882617950e-01 8.6303764581680298e-01 394 + blend 0.0000000000000000e+00 + interp 4.2121825464411899e-01:4.2121404246157257e-01:3.9280643532515480e-02:3.2346527306413764e-01:5.7789007369676459e-01:3.2577376168512651e-01:1.0204105610280638e+00:2.8077854222979698e-01:1.8786869031819373e+00:3.0137191862752860e-01:2.8918129893894120e+00:3.9491514276364009e-01:3.8021138838728405e+00 + CVs 20 + -2.6133447709754226e-01 2.3162582329486714e-01 -1.5205566748718022e-01 + -5.1746930517596401e-01 4.6314676285249451e-01 -3.1620529554809274e-01 + -7.8392129241288511e-01 6.9664217531775052e-01 -4.8210884822993005e-01 + -1.0651240287944526e+00 9.2339710101307049e-01 -6.4848961557168339e-01 + -1.3565710725225890e+00 1.1267605952391133e+00 -8.2040843254637819e-01 + -1.6509272575853244e+00 1.2877251077614891e+00 -1.0035285391423967e+00 + -1.9421423313538464e+00 1.3930843180332018e+00 -1.2005076616941817e+00 + -2.2277072924377102e+00 1.4389101276859018e+00 -1.4091023678543357e+00 + -2.5056438643211685e+00 1.4275413445515697e+00 -1.6243567143256610e+00 + -2.7752128001725898e+00 1.3657424543929684e+00 -1.8435996601908022e+00 + -3.0385261145137399e+00 1.2627137600113525e+00 -2.0683043715098282e+00 + -3.2955708563254231e+00 1.1293697873510484e+00 -2.3014390539961602e+00 + -3.5407389684544928e+00 9.7743489125570582e-01 -2.5451389920903464e+00 + -3.7674418170198178e+00 8.1269335344820770e-01 -2.8006268408378707e+00 + -3.9713927351178016e+00 6.3757629739158217e-01 -3.0685606913575070e+00 + -4.1420058451779482e+00 4.8669615867507776e-01 -3.3409617850827491e+00 + -4.2481231978342340e+00 4.5816688661109684e-01 -3.5689014808794068e+00 + -4.2616092528612830e+00 5.6808987265063782e-01 -3.6656099775051731e+00 + -4.3489733065926455e+00 6.4960622766420717e-01 -3.9654280228378962e+00 + id 14924 + loc 8.7817031145095825e-01 5.3995037078857422e-01 405 + blend 0.0000000000000000e+00 + interp 3.1542532985130917e-01:2.6491664818287719e-01:1.2938948861212052e-02:2.9065017236972018e-01:9.9971415669952179e-01:2.6455286543739465e-01:1.9027982105059738e+00:3.1542217559801067e-01:2.5179999575190060e+00:2.5021673269539357e-01:3.1572770015737941e+00 + CVs 20 + 7.5441174401678274e-02 2.4187852584414726e-01 -7.5333946596058660e-02 + 5.9348134470651209e-02 4.3394919107888952e-01 -1.3993507144420744e-01 + 2.0550469873815369e-02 6.0446770649048309e-01 -1.9183188355553751e-01 + -2.1096493247739989e-02 7.7667596256672256e-01 -2.2837002125503272e-01 + -7.1004264967318875e-02 9.4415776922189232e-01 -2.3898394595209180e-01 + -1.3226672346613821e-01 1.0970603827493415e+00 -2.0957916029338292e-01 + -2.0142739735531345e-01 1.2169132057626089e+00 -1.2180167308201900e-01 + -2.5832080586603529e-01 1.2692927512220129e+00 3.6486571061016847e-02 + -2.6391243924272473e-01 1.2198251123921862e+00 2.3456131705709615e-01 + -2.0402366712023978e-01 1.0935714585441620e+00 3.9919386861589762e-01 + -1.1001900515219126e-01 9.4885060667045984e-01 5.0622005071193255e-01 + -9.6867317447230650e-03 8.0257505385500005e-01 5.7559116655396836e-01 + 8.8957479634805464e-02 6.5105674392086477e-01 6.2050421261495281e-01 + 1.9121198261902128e-01 5.0406219638050409e-01 6.4880553346587355e-01 + 3.0749250819213902e-01 3.7961542539328652e-01 6.7302015356955169e-01 + 4.4173342811180705e-01 2.8461258196545869e-01 7.0002572777370453e-01 + 5.8450287645562482e-01 2.0857138054779678e-01 7.2490940929637127e-01 + 7.2034894055305354e-01 1.3428888360283162e-01 7.4708949463244234e-01 + 7.8644033546709058e-01 -6.2970925031412550e-03 7.8577127485273646e-01 + id 14925 + loc 9.7692602872848511e-01 5.1806652545928955e-01 394 + blend 0.0000000000000000e+00 + interp 4.6205301291066458e-01:2.6722585850386693e-01:5.2303170954160549e-01:2.8757182125061770e-01:1.0173976781560923e+00:2.7020635004262145e-01:1.8157179457724144e+00:4.6204839238053552e-01:2.1772357918385068e+00:3.7450673770643583e-01:2.8080951201375228e+00:3.2714659001726037e-01:3.5550522790060533e+00 + CVs 20 + -2.6384663974616857e-01 2.4161152876329028e-01 -3.7764939040549644e-01 + -4.9524952071227257e-01 4.2539797206281299e-01 -7.2818486193586807e-01 + -7.1160380046461347e-01 5.7207250134204546e-01 -1.0738723003813111e+00 + -9.2367648060467744e-01 6.8982101382090799e-01 -1.4233171752851708e+00 + -1.1353982105453846e+00 7.7661548107247313e-01 -1.7719487024425580e+00 + -1.3562908769898063e+00 8.3397770268431226e-01 -2.1158102045489411e+00 + -1.5939342790854987e+00 8.6210718579153944e-01 -2.4465262731513553e+00 + -1.8453225167815663e+00 8.5553141636341090e-01 -2.7468807743545653e+00 + -2.1040484021146577e+00 8.1097853267761555e-01 -3.0008013290942293e+00 + -2.3669590450288673e+00 7.3473368983272591e-01 -3.1987951198043940e+00 + -2.6304079008764711e+00 6.4157304457092601e-01 -3.3363530160239314e+00 + -2.8917035412413932e+00 5.4810473376054847e-01 -3.4204220195914106e+00 + -3.1504792608184653e+00 4.6464423154691836e-01 -3.4686789209343880e+00 + -3.3960987632711652e+00 3.9984998981542486e-01 -3.4954897446114401e+00 + -3.6055579207469233e+00 3.6848820966253459e-01 -3.5106018188935586e+00 + -3.7652997322778914e+00 3.8863888182188910e-01 -3.5321400577701443e+00 + -3.8896468868838543e+00 4.6797977065640550e-01 -3.5933807967118541e+00 + -4.0070790841151371e+00 5.6476706083545070e-01 -3.7174937844626035e+00 + -4.1515522170549843e+00 4.0276924116105706e-01 -3.7427003084850359e+00 + id 14926 + loc 8.6203879117965698e-01 2.0926879346370697e-01 405 + blend 0.0000000000000000e+00 + interp 3.6650667515575736e-01:3.6650301008900582e-01:5.2895593636811267e-01:2.9238566993262743e-01:1.1367274651468462e+00:2.6138772238909325e-01:2.0017820792915240e+00:2.7241501286277464e-01:3.0758168216861996e+00:2.5763551868055590e-01:3.9844811108538098e+00 + CVs 20 + 2.9058367065833132e-02 1.0188999528535536e-01 5.3767866612053850e-02 + 8.9367099576372303e-02 1.8126946458361948e-01 1.0430231270475111e-01 + 1.6830700005521518e-01 2.3932532648065608e-01 1.5515513684431850e-01 + 2.5572312589735863e-01 2.8556906207102073e-01 2.1113528173883797e-01 + 3.5219578289883868e-01 3.1933530098068602e-01 2.7057464813894244e-01 + 4.5875697388166420e-01 3.4037173605149557e-01 3.3174338823500565e-01 + 5.7741407658519939e-01 3.4888558776550327e-01 3.9281126004572714e-01 + 7.1165021643842952e-01 3.4485001398416282e-01 4.5054754444717421e-01 + 8.6531469161041463e-01 3.2747585087676434e-01 4.9956695251609928e-01 + 1.0400270876994002e+00 2.9481833977313637e-01 5.3246890956110926e-01 + 1.2335463136762397e+00 2.4431627176793119e-01 5.4182098117428712e-01 + 1.4372868856145802e+00 1.7376503526374820e-01 5.2434562905309656e-01 + 1.6396011203661760e+00 8.1520898831776822e-02 4.8364025392961829e-01 + 1.8391154271526164e+00 -3.7075228499311996e-02 4.1573795234829303e-01 + 2.0458942466516201e+00 -1.9543617709390482e-01 2.8255197287331507e-01 + 2.2534951204199327e+00 -3.9880711431753280e-01 1.8787167638173452e-02 + 2.4191491108910919e+00 -6.0720327756803305e-01 -3.9901805677635815e-01 + 2.5026998845629120e+00 -7.6383326425855946e-01 -9.1335537358134156e-01 + 2.5832262512871575e+00 -8.9260770282366964e-01 -1.0672023194414297e+00 + id 14927 + loc 2.9127798043191433e-03 1.6487905383110046e-01 394 + blend 0.0000000000000000e+00 + interp 3.9920418639815158e-01:3.9920019435628762e-01:1.0016242886280475e+00:7.6845392508005927e-02:1.8698133443004399e+00:3.4225117592937448e-01:2.9993842827856598e+00:3.3004701002665093e-01:3.2956327979664888e+00:3.2430525388360892e-01:3.9867074780062772e+00 + CVs 20 + -4.9278120230742239e-02 2.8102783048333629e-01 2.0067489101263516e-01 + -1.1973313672807559e-01 5.9214311855559021e-01 4.0472384790578259e-01 + -1.9657438104237640e-01 9.1251249411808100e-01 5.9166620769833678e-01 + -2.7956769672102794e-01 1.2292163830839262e+00 7.5649615669749792e-01 + -3.7727546939896867e-01 1.5359524590997946e+00 9.0193861106072326e-01 + -4.9636108455538175e-01 1.8271711754951814e+00 1.0328757858448523e+00 + -6.4021737966836179e-01 2.0976072685350928e+00 1.1552411491481847e+00 + -8.0747301805285487e-01 2.3418365629768805e+00 1.2726744565280046e+00 + -9.9403708086561660e-01 2.5577443024176016e+00 1.3871622596145943e+00 + -1.1988258320005349e+00 2.7485664870311211e+00 1.5013346973510648e+00 + -1.4287687120643775e+00 2.9209024713182066e+00 1.6208179624076777e+00 + -1.6997988440978253e+00 3.0765790399452722e+00 1.7569779165745119e+00 + -2.0204663264039704e+00 3.1916218221091821e+00 1.9186022744155471e+00 + -2.3406806939899298e+00 3.2194970264883547e+00 2.0788079119156411e+00 + -2.5670833655812562e+00 3.1596019252820540e+00 2.1840912335231684e+00 + -2.6769628174871132e+00 3.0428613572002572e+00 2.2140169780268333e+00 + -2.7375856470993178e+00 2.8681487817434288e+00 2.1680884080152700e+00 + -2.8357029784374679e+00 2.6379703308681730e+00 2.0794290415897700e+00 + -2.9149071116301792e+00 2.5652669520752216e+00 2.1976474404929771e+00 + id 14928 + loc 5.3380572795867920e-01 2.9828023910522461e-01 405 + blend 0.0000000000000000e+00 + interp 3.4500430858196091e-01:2.7457825125990659e-01:3.0775857294555886e-01:3.4500085853887508e-01:1.0105065470842940e+00:2.7169231583140546e-01:2.0037381866412627e+00:2.7986692816027980e-01:2.9387126045047798e+00:2.9518372633450285e-01:3.6416741724226691e+00 + CVs 20 + 6.8297667434114806e-02 1.3694015945079660e-01 -2.3721033756563363e-02 + 1.7635227881950272e-01 2.3006094507625433e-01 -3.8966841023977072e-02 + 2.9875287617090351e-01 3.1104952614537540e-01 -5.6164230392023874e-02 + 4.2449728346541959e-01 3.7964250113297165e-01 -8.1105517101790744e-02 + 5.5468686472234419e-01 4.3300677571213653e-01 -1.1784353672498214e-01 + 6.8993694976196807e-01 4.7017766858218224e-01 -1.7069953103357022e-01 + 8.3107183875877066e-01 4.9197108924841815e-01 -2.4367692249705275e-01 + 9.7920383943507838e-01 5.0008672179297398e-01 -3.4073702884430279e-01 + 1.1344384335250752e+00 4.9543760522936359e-01 -4.6650073337980824e-01 + 1.2949531887259100e+00 4.7755772235704991e-01 -6.2569664592570517e-01 + 1.4565161376571505e+00 4.4378158056689576e-01 -8.2161896471295637e-01 + 1.6136184979053896e+00 3.8787709547894678e-01 -1.0524440513040894e+00 + 1.7612496223528993e+00 3.0377159564560563e-01 -1.3129339767740165e+00 + 1.8925378079138888e+00 1.9808751075292053e-01 -1.6076804221134715e+00 + 1.9933432960343827e+00 9.8004482580643204e-02 -1.9589321055095374e+00 + 2.0427784355487826e+00 4.1621261683556510e-02 -2.3858021609612119e+00 + 2.0248567896069045e+00 5.3563501655764734e-02 -2.8732299525283982e+00 + 1.9379734029061586e+00 1.3093976244058991e-01 -3.3765933201887717e+00 + 2.0151063289426148e+00 1.0588747933032883e-01 -3.7161978385097298e+00 + id 14929 + loc 6.7779606580734253e-01 1.6882164776325226e-01 394 + blend 0.0000000000000000e+00 + interp 4.0111636585386728e-01:2.5880604468045137e-01:4.2112729030958973e-02:3.0191037335828902e-01:7.8843225711665232e-01:2.5101064628618891e-01:1.1754513783980731e+00:4.0111235469020878e-01:1.9625838905984621e+00:3.5917651937876277e-01:2.4613812969780371e+00:2.6432479933255593e-01:3.0721615757123533e+00 + CVs 20 + 1.8674740908585485e-01 2.5284238264402420e-01 2.6480857450982886e-01 + 4.0196628940856943e-01 4.8409063535845326e-01 4.9228364670612135e-01 + 6.2805042996041283e-01 7.0016749820621083e-01 7.1017447330278727e-01 + 8.5765828879742501e-01 9.0920003282205075e-01 9.3373598233178390e-01 + 1.0855574595448871e+00 1.1125789633865906e+00 1.1679117043161451e+00 + 1.3096634483139922e+00 1.3036692830553898e+00 1.4177551259511636e+00 + 1.5339758530729852e+00 1.4705797594241554e+00 1.6878884473714120e+00 + 1.7606668207262663e+00 1.6018660024548270e+00 1.9798923286421719e+00 + 1.9857270659829109e+00 1.6886155883424205e+00 2.2893217340150844e+00 + 2.2035942503748704e+00 1.7248718498053153e+00 2.6042389870670775e+00 + 2.4118301012053003e+00 1.7079246656942286e+00 2.9078093688573832e+00 + 2.6096374017378210e+00 1.6361596086224817e+00 3.1849483985700831e+00 + 2.7987395256786423e+00 1.5009975595469049e+00 3.4341128206469094e+00 + 2.9871148316159761e+00 1.2828528899436811e+00 3.6690104268666452e+00 + 3.1865995546871595e+00 9.8542729401276397e-01 3.9062992443016848e+00 + 3.4103153924379921e+00 6.6990766562171666e-01 4.1554294391360154e+00 + 3.6658156435048772e+00 4.2522285773884727e-01 4.3922319234142293e+00 + 3.9491494219635586e+00 2.8800760258021141e-01 4.5797577340559705e+00 + 4.2968434695483477e+00 1.2041696133065605e-01 4.8181894095656288e+00 + id 14930 + loc 1.4854654669761658e-01 2.7173897624015808e-01 405 + blend 0.0000000000000000e+00 + interp 3.5034186496376474e-01:3.3967521850784432e-01:2.3434225694403299e-01:2.6747817193363399e-01:1.1165186473688558e+00:2.6784854668061214e-01:1.9869416387967311e+00:3.5033836154511511e-01:2.5918831663585378e+00:2.7151729554514453e-01:3.3221573662810635e+00 + CVs 20 + 2.6787197638605768e-03 1.2862446515812626e-01 -5.3837444224984148e-02 + -1.6436205741832442e-02 2.1038089953337241e-01 -4.4593603012284336e-02 + -3.9446772478500078e-02 2.9982188002361354e-01 -7.5545651397346814e-03 + -5.5964585932108846e-02 4.0218996514406602e-01 2.9032767607550442e-02 + -6.2876790260853674e-02 5.1631513849763899e-01 6.4440258885945650e-02 + -5.5832993269104583e-02 6.4092583744863296e-01 9.8301713637007321e-02 + -2.8888663158825417e-02 7.7349627575255453e-01 1.3122006325816971e-01 + 2.4423216356350530e-02 9.0919215597392045e-01 1.6553867095586300e-01 + 1.0860739981069643e-01 1.0408603800670819e+00 2.0497296266975784e-01 + 2.2500695471769633e-01 1.1615160577720072e+00 2.5270879659797646e-01 + 3.7388604955139093e-01 1.2670093462312844e+00 3.0910357680415973e-01 + 5.5607975792284781e-01 1.3555743844330954e+00 3.7087088433431875e-01 + 7.7295994862411399e-01 1.4261237890058436e+00 4.3156866277907296e-01 + 1.0229216499407212e+00 1.4768633896796737e+00 4.8353260831007322e-01 + 1.2994379740195325e+00 1.5053312066465208e+00 5.2110157004402224e-01 + 1.5940913779653116e+00 1.5092228612867638e+00 5.4167622160008255e-01 + 1.8990832128442601e+00 1.4877608180782582e+00 5.4453580293574255e-01 + 2.2032041382284273e+00 1.4430391527202171e+00 5.3017521638567489e-01 + 2.4318477440686546e+00 1.4064459548292445e+00 5.4465264543064107e-01 + id 14931 + loc 3.4457513689994812e-01 5.1322793960571289e-01 394 + blend 0.0000000000000000e+00 + interp 3.8875354084509273e-01:3.8874965330968431e-01:3.9057566493730156e-02:3.0791424771226322e-01:7.6743380152835239e-01:3.4095194247085225e-01:1.2016531520499476e+00:3.0177869056927387e-01:1.9931795462976512e+00:3.7674954002874189e-01:2.8643449182726597e+00:2.6052383043183286e-01:3.5352688078764518e+00 + CVs 20 + -2.5454763886704540e-01 1.9258492915216838e-01 -1.2317646042376620e-01 + -4.8928580399425525e-01 3.8532384915987261e-01 -2.5191860764507301e-01 + -7.1351366215484024e-01 5.9232676610234480e-01 -3.9076361264388237e-01 + -9.3179421653345118e-01 8.2399300764018246e-01 -5.4150500663449963e-01 + -1.1411436442033718e+00 1.0799731577605216e+00 -7.0565595758091160e-01 + -1.3414860423620327e+00 1.3503961717185122e+00 -8.9012811286995586e-01 + -1.5368208690579834e+00 1.6146248059597705e+00 -1.1063526031728668e+00 + -1.7322669564549666e+00 1.8508916791441896e+00 -1.3593870697995141e+00 + -1.9341675777426683e+00 2.0456610421696109e+00 -1.6445679419882255e+00 + -2.1449983964524351e+00 2.1829402894039269e+00 -1.9550028120839495e+00 + -2.3510835447667580e+00 2.2351183868406261e+00 -2.2810947738938228e+00 + -2.5257988267542153e+00 2.1803214878158497e+00 -2.6021482081680762e+00 + -2.6481464655451523e+00 2.0221408320337795e+00 -2.8889374884979824e+00 + -2.7119797412373998e+00 1.7861846463717390e+00 -3.1217467529600427e+00 + -2.7283092985279289e+00 1.4997729120811121e+00 -3.3027546263689960e+00 + -2.7282929185310008e+00 1.1712210318786682e+00 -3.4490069675800026e+00 + -2.7656411189714705e+00 7.9329991098332586e-01 -3.5777527037643022e+00 + -2.8788812637994674e+00 3.9366125534405083e-01 -3.6854282970135692e+00 + -2.9691444767463726e+00 7.8508684566406917e-02 -3.7427449208098813e+00 + id 14932 + loc 8.1088495254516602e-01 7.3423010110855103e-01 394 + blend 0.0000000000000000e+00 + interp 4.0057174385074240e-01:2.7859833970814513e-01:7.7993725862290475e-02:4.0056773813330393e-01:1.0048647449685533e+00:2.5124053249032757e-01:1.8429278434301022e+00:3.0624743456360887e-01:2.9183884588005204e+00:3.5957775185192886e-01:3.4058746760617851e+00 + CVs 20 + -2.3187484770448186e-01 1.8772052523662255e-01 -2.2315135587109147e-01 + -4.5835506902941781e-01 3.4456615361912751e-01 -4.2686919038414206e-01 + -6.8195346056741812e-01 4.8485276397187788e-01 -6.3047193433581927e-01 + -9.0088595486212719e-01 6.1534184786306911e-01 -8.4567488928404755e-01 + -1.1082758531575490e+00 7.3480114309610711e-01 -1.0789911741856391e+00 + -1.2985495021091460e+00 8.4187131507809709e-01 -1.3339447921186605e+00 + -1.4711573913465541e+00 9.3919351943520202e-01 -1.6095103292639348e+00 + -1.6247580097289740e+00 1.0262707619403542e+00 -1.9029023395532467e+00 + -1.7530971313536767e+00 1.0911710902028890e+00 -2.2150099786972852e+00 + -1.8545270475559632e+00 1.1165755908793038e+00 -2.5495762557361985e+00 + -1.9404591734302685e+00 1.0866425445020087e+00 -2.9083869074495694e+00 + -2.0216570051820910e+00 9.8972071361405600e-01 -3.2874930512047316e+00 + -2.0965189445032220e+00 8.2362274847890493e-01 -3.6782532131596399e+00 + -2.1666003609480420e+00 5.9205486573571164e-01 -4.0719232377134462e+00 + -2.2462070032623607e+00 2.9993045915448580e-01 -4.4522382508914458e+00 + -2.3391868569678635e+00 -4.1433739856272300e-02 -4.7820919085071889e+00 + -2.4266933857396680e+00 -4.1681142296286300e-01 -5.0261835683515486e+00 + -2.5059213854329281e+00 -8.2308391496005839e-01 -5.1914024487572519e+00 + -2.6194570446287342e+00 -1.2594670154087364e+00 -5.3647242372511066e+00 + id 14933 + loc 1.9689898192882538e-01 2.7698315680027008e-03 394 + blend 0.0000000000000000e+00 + interp 5.8686054548158795e-01:2.8956135502241853e-01:6.1587455470620389e-01:3.4196784590426227e-01:1.3015462990683804e+00:5.8685467687613313e-01:1.9781078654827398e+00:2.5606983825767887e-01:2.9495281188128919e+00:3.7681822964729333e-01:3.9256325369403573e+00 + CVs 20 + -3.3898996004038839e-02 3.4600311061081418e-01 2.7091718270222015e-01 + -7.8030652395983974e-02 6.8375129930801126e-01 5.7006074544785479e-01 + -1.2955729553514683e-01 1.0041341259999399e+00 8.8739787242415180e-01 + -1.9937465108438163e-01 1.3098627329149977e+00 1.2127416786972451e+00 + -3.0524637035355151e-01 1.5969098941901161e+00 1.5389270163673228e+00 + -4.6091183312947082e-01 1.8460131323490236e+00 1.8630163316423083e+00 + -6.6814391844900678e-01 2.0339585844701831e+00 2.1766455217155825e+00 + -9.1462404358493110e-01 2.1465077437503020e+00 2.4635667991163182e+00 + -1.1771688641060776e+00 2.1806716169918090e+00 2.7071013460582343e+00 + -1.4278002123086586e+00 2.1446919164861873e+00 2.8957346851533252e+00 + -1.6421165876182358e+00 2.0587093634600002e+00 3.0219608975595582e+00 + -1.8080992469207242e+00 1.9554506547312722e+00 3.0842428065532212e+00 + -1.9441716851777682e+00 1.8628404174265700e+00 3.1034327551765530e+00 + -2.0911136357296605e+00 1.7559098469676744e+00 3.1177742373720987e+00 + -2.2633524859570677e+00 1.5867532685703787e+00 3.1444220057755432e+00 + -2.4668099591124042e+00 1.3498071157753593e+00 3.1894799342477382e+00 + -2.7241800907963758e+00 1.0678915706889749e+00 3.2712763484926901e+00 + -3.0140237215643388e+00 8.0417395345620468e-01 3.4130162617537581e+00 + -3.1956120143576978e+00 7.2876419111322321e-01 3.5693239535322610e+00 + id 14934 + loc 4.1343170404434204e-01 1.4808909967541695e-02 394 + blend 0.0000000000000000e+00 + interp 3.9867524373467439e-01:3.0845747801714374e-01:8.7440735238092826e-01:2.8472489286902425e-01:2.0003608067745020e+00:3.8920505123476762e-01:2.6418350497468630e+00:2.7006048031171920e-01:3.1017349047953897e+00:3.9867125698223704e-01:3.9917477434736965e+00 + CVs 20 + -1.6165198885235521e-01 1.9720426017598669e-01 2.4577442595603233e-01 + -2.8952248863373886e-01 3.8316567560302550e-01 4.9048886183482637e-01 + -3.8801973036372123e-01 5.5738288058738394e-01 7.3423379546395617e-01 + -4.5957803197010749e-01 7.2571547081467702e-01 9.7858108189739923e-01 + -5.0355805171128554e-01 8.9561711600794913e-01 1.2171319371737488e+00 + -5.2334215753600111e-01 1.0752922533263378e+00 1.4460564129208264e+00 + -5.2969722702847144e-01 1.2686224548375493e+00 1.6780986419745356e+00 + -5.3709815082280832e-01 1.4746503758836365e+00 1.9322389476218331e+00 + -5.6010814302192524e-01 1.6921740993598939e+00 2.2157223063296487e+00 + -6.1151233327768562e-01 1.9208191807728330e+00 2.5201044731053690e+00 + -6.9875186391407440e-01 2.1639866360286590e+00 2.8367996623408418e+00 + -8.3294019917770823e-01 2.4220528454360348e+00 3.1737849719955875e+00 + -1.0261097615218544e+00 2.6497942746099827e+00 3.5423961666769461e+00 + -1.2388402910074128e+00 2.7407843880558547e+00 3.9131259350166152e+00 + -1.3884781603511707e+00 2.6371335046277791e+00 4.2262630340795262e+00 + -1.4639391499092484e+00 2.4048536753015854e+00 4.4421607357541477e+00 + -1.5143912605233119e+00 2.1726767603539225e+00 4.5113544599338695e+00 + -1.5854074147234223e+00 2.0081265769450067e+00 4.4425442577996161e+00 + -1.7316725490161733e+00 1.8693887389345436e+00 4.7517982544515931e+00 + id 14935 + loc 7.2457951307296753e-01 6.1017566919326782e-01 394 + blend 0.0000000000000000e+00 + interp 4.7697199774456722e-01:4.7696722802458980e-01:5.8630800816058060e-01:2.5832091321148887e-01:1.3056259225834670e+00:2.8251466994201913e-01:2.4309805119382450e+00:2.8325950065070404e-01:3.0168631986596672e+00:2.5510397726009576e-01:3.8551835592948271e+00 + CVs 20 + -2.6788112656835472e-01 1.9659484194164281e-01 -1.8724412247324468e-01 + -5.3069533429751137e-01 3.7566162181525775e-01 -3.6951621927622785e-01 + -7.9844820451029297e-01 5.4721245983550171e-01 -5.5835039076105586e-01 + -1.0735263793970113e+00 7.1735499246183865e-01 -7.6367953088988627e-01 + -1.3487178303083065e+00 8.8392608900853764e-01 -9.9120429335699312e-01 + -1.6194051321418084e+00 1.0430186571002307e+00 -1.2422018014795704e+00 + -1.8867510530038114e+00 1.1915989661067750e+00 -1.5158411706675192e+00 + -2.1526650753305967e+00 1.3225971466870377e+00 -1.8141084568925732e+00 + -2.4164706659315960e+00 1.4203280854799694e+00 -2.1398841462069118e+00 + -2.6787180420826395e+00 1.4664230198837975e+00 -2.4897708532958358e+00 + -2.9454393599291051e+00 1.4487710830503029e+00 -2.8590666826788178e+00 + -3.2210874861755725e+00 1.3618024707140273e+00 -3.2490793321591904e+00 + -3.5019637404373327e+00 1.2051912328562746e+00 -3.6573845967374083e+00 + -3.7869181182527818e+00 9.8381091704190293e-01 -4.0639497834522222e+00 + -4.0878040348828373e+00 7.0057146379242496e-01 -4.4354455360854708e+00 + -4.4105033001171394e+00 3.4050531449469768e-01 -4.7369505727740551e+00 + -4.7299168712413966e+00 -1.2415827075179742e-01 -4.9330735506684782e+00 + -5.0104022983035179e+00 -6.7441063335848517e-01 -5.0098276993544379e+00 + -5.3088715394999877e+00 -1.1056104899960704e+00 -5.1995911509838875e+00 + id 14936 + loc 6.3082642853260040e-02 3.1536233425140381e-01 394 + blend 0.0000000000000000e+00 + interp 4.2074343050260471e-01:2.7251213456673373e-01:5.1121048291275906e-01:3.9689629902918078e-01:1.0089059686795803e+00:3.9915519351974038e-01:1.3184411019629285e+00:2.2065873125747582e-01:2.0082650361198118e+00:4.2073922306829969e-01:2.2756694615014381e+00:3.4662029861377114e-01:3.4168747316209958e+00:3.7875168290969952e-01:3.9788602564487596e+00 + CVs 20 + -2.7762056785593819e-01 2.1107986123584474e-01 2.7278361618709240e-01 + -5.1400121814331723e-01 4.1446346319032856e-01 5.4987857535367812e-01 + -7.2687731800553823e-01 6.3472921584171471e-01 8.2495621081144743e-01 + -9.1418012350683742e-01 8.7519819260176690e-01 1.0879479078479599e+00 + -1.0847190101703206e+00 1.1349198882825700e+00 1.3416615993984280e+00 + -1.2804917569197676e+00 1.4213315915940119e+00 1.5989677838806631e+00 + -1.5451954692501628e+00 1.7404623963679824e+00 1.8584083234192703e+00 + -1.9027883130288594e+00 2.0908373764570949e+00 2.1053624571650946e+00 + -2.3644290382094626e+00 2.4590009934092887e+00 2.3360072479152576e+00 + -2.9363891895015213e+00 2.8135721187998506e+00 2.5617497952968793e+00 + -3.6162786013925619e+00 3.1022724420506438e+00 2.8022512636610846e+00 + -4.3838077817400567e+00 3.2588889853725069e+00 3.0765372731503557e+00 + -5.1932033518900571e+00 3.2161468093975984e+00 3.3892769800990639e+00 + -5.9622936766946975e+00 2.9380078888876646e+00 3.7249054444611991e+00 + -6.5850218768253210e+00 2.4595190869701375e+00 4.0515055087719078e+00 + -6.9882220218465720e+00 1.8889133027819236e+00 4.3266005367595115e+00 + -7.1857211929367253e+00 1.3427069196454764e+00 4.5372430942236948e+00 + -7.1945933538161562e+00 8.9508117207277405e-01 4.7247656366809601e+00 + -6.9338543714940188e+00 7.2786562449776815e-01 4.8917379498143054e+00 + id 14937 + loc 8.3084756135940552e-01 5.9555274248123169e-01 394 + blend 0.0000000000000000e+00 + interp 3.8230389826584621e-01:2.7096064853746071e-01:4.5170426591309887e-01:2.8325950065070404e-01:1.0148114860537314e+00:2.6746293735610199e-01:1.8673592362311564e+00:3.8230007522686354e-01:2.4558725437691171e+00:2.5780976592286520e-01:3.0100308387273760e+00:2.4240521220732236e-01:3.8837857674995275e+00 + CVs 20 + -2.6894583112701048e-01 2.1966810583875135e-01 -2.4335708802676462e-01 + -5.0806528736289625e-01 4.1133114997625642e-01 -4.7731978588652990e-01 + -7.2566375152998008e-01 5.8633373165153724e-01 -7.1856511426068992e-01 + -9.2211966737022832e-01 7.4794320118503932e-01 -9.7313110750061849e-01 + -1.0925404343553078e+00 8.9127177774706856e-01 -1.2386157522175245e+00 + -1.2373759012205170e+00 1.0137546219752664e+00 -1.5116460422142415e+00 + -1.3615037649541759e+00 1.1165887466410858e+00 -1.7857381222870858e+00 + -1.4691779564885681e+00 1.2024756222673587e+00 -2.0518384366760705e+00 + -1.5621417219840656e+00 1.2721415384007329e+00 -2.3083475607146506e+00 + -1.6422038297609072e+00 1.3212914148605170e+00 -2.5634137715551359e+00 + -1.7155152370291669e+00 1.3396380015073033e+00 -2.8182778024695665e+00 + -1.7894696446968497e+00 1.3157122582475853e+00 -3.0602886310612751e+00 + -1.8618105425164073e+00 1.2440302974860664e+00 -3.2835653647439007e+00 + -1.9189522903221463e+00 1.1223085145309175e+00 -3.5032188121138939e+00 + -1.9535641390551457e+00 9.5519300083374326e-01 -3.7348590480372126e+00 + -1.9776335832254821e+00 7.7342925295906850e-01 -3.9723991143381499e+00 + -2.0061960387090640e+00 6.1266534007858020e-01 -4.1973485618567494e+00 + -2.0395965900706976e+00 4.3452677743726564e-01 -4.3770987440161653e+00 + -2.0704014656763903e+00 2.1549535152259214e-02 -4.3419770351653639e+00 + id 14938 + loc 7.7417361736297607e-01 2.0393833518028259e-01 394 + blend 0.0000000000000000e+00 + interp 3.8423838096223806e-01:3.4219628265845881e-01:3.7981581678480758e-02:2.9086528051110239e-01:8.4964692975410872e-01:3.8423453857842843e-01:1.3526922661615053e+00:2.4725474418367338e-01:2.0199283259926810e+00:3.0191037335828902e-01:2.7707052375106134e+00:2.4352447394567348e-01:3.2034387090765049e+00 + CVs 20 + 2.8300098053166445e-01 3.0589393607826143e-01 2.6778262040566048e-01 + 5.9810421305626926e-01 5.8800798175537916e-01 4.7311883720711939e-01 + 9.2163453250844685e-01 8.6057088312269991e-01 6.7228980980344399e-01 + 1.2438472604084030e+00 1.1286477305129536e+00 8.9180080292066999e-01 + 1.5609220206376380e+00 1.3841077250594234e+00 1.1468682914263064e+00 + 1.8714646749107020e+00 1.6058289374693211e+00 1.4461073941260785e+00 + 2.1743051205436381e+00 1.7712720040922860e+00 1.7925305838535173e+00 + 2.4629954242051140e+00 1.8616345165473618e+00 2.1804605594003443e+00 + 2.7269228569695061e+00 1.8619043848537544e+00 2.5873638209105545e+00 + 2.9576786295981590e+00 1.7654693852730492e+00 2.9759360569134845e+00 + 3.1506464698998142e+00 1.5762830414502422e+00 3.3081831425341806e+00 + 3.3005360985081023e+00 1.3077666961614691e+00 3.5515937464279057e+00 + 3.4048847821450785e+00 9.8753384623742724e-01 3.6936563555636570e+00 + 3.4773706924774279e+00 6.3142747555435674e-01 3.7823606903551141e+00 + 3.5419688196529906e+00 2.2600344614869083e-01 3.8909559367043487e+00 + 3.6207730239043929e+00 -1.9638772177355079e-01 4.0465531409938666e+00 + 3.7312515349775044e+00 -5.5357206327345843e-01 4.2105235760017958e+00 + 3.8629655202755915e+00 -8.2673584625779428e-01 4.3466005204168860e+00 + 3.9650839349140075e+00 -1.1535560898793151e+00 4.5517717059484131e+00 + id 14939 + loc 2.1268238127231598e-01 4.1626268625259399e-01 394 + blend 0.0000000000000000e+00 + interp 4.0997120152570360e-01:2.9417489796821744e-01:6.3565545632211196e-01:4.0996710181368834e-01:1.0439612912290710e+00:3.0300189933514254e-01:1.6051748745591310e+00:3.8058197668124766e-01:2.3014086098413897e+00:3.0429262924189043e-01:3.1923151554155385e+00:3.2589744846230329e-01:3.9859524562382940e+00 + CVs 20 + -1.5724990926117355e-01 2.1772800300458467e-01 2.6581038467334805e-01 + -3.3100418337947896e-01 4.2697209457935237e-01 4.9629654512643295e-01 + -5.1660220816242775e-01 6.4151611376997075e-01 7.1235926223933888e-01 + -7.1065383935951321e-01 8.6731953713741894e-01 9.2427587247988907e-01 + -9.1157967433228126e-01 1.0986908133968607e+00 1.1305469109003701e+00 + -1.1192687267146761e+00 1.3229811068016217e+00 1.3298126717009202e+00 + -1.3359984934862217e+00 1.5270324615206143e+00 1.5247491797705988e+00 + -1.5634981511428361e+00 1.7036001739198998e+00 1.7237835894491667e+00 + -1.7954436532473321e+00 1.8466624744107962e+00 1.9338529373008939e+00 + -2.0156185349012210e+00 1.9430993364659681e+00 2.1485307514072902e+00 + -2.2085772071033438e+00 1.9794512654587908e+00 2.3510997614632654e+00 + -2.3695535600651532e+00 1.9536720345939960e+00 2.5340300925438779e+00 + -2.5010197954020787e+00 1.8696403538653554e+00 2.7046735029517626e+00 + -2.6075199365852093e+00 1.7277513883346431e+00 2.8766480248087252e+00 + -2.6941363867498058e+00 1.5243604124734715e+00 3.0653457185810433e+00 + -2.7559191488122101e+00 1.2721788136062340e+00 3.2836425546799899e+00 + -2.7767497079708647e+00 1.0212917985733920e+00 3.5424656882076500e+00 + -2.7421086271731983e+00 8.3824722826876119e-01 3.8315550845231572e+00 + -2.6796597090899255e+00 6.8274557450883999e-01 4.1501241240554627e+00 + id 14940 + loc 8.6723214387893677e-01 5.3284531831741333e-01 394 + blend 0.0000000000000000e+00 + interp 4.3104795092031828e-01:4.3104364044080912e-01:1.6989220529692328e-01:2.6613433916544682e-01:1.0104432894035360e+00:2.4240521220732236e-01:1.8837246793896987e+00:2.6656381908824911e-01:2.4254245798566338e+00:2.8757182125061770e-01:3.0241272228250202e+00:2.4066346553723569e-01:3.8708382464113815e+00 + CVs 20 + -2.9362228658260020e-01 2.0813029585279180e-01 -2.0213955406605372e-01 + -5.4663812204268669e-01 3.7461215610880327e-01 -3.6781577012826755e-01 + -7.8234494050503578e-01 5.2225457838096867e-01 -5.2013831853228065e-01 + -1.0122985865495930e+00 6.6471039122260112e-01 -6.7042726652032036e-01 + -1.2349625036736942e+00 8.0354965410589707e-01 -8.2440489332919487e-01 + -1.4472146241820081e+00 9.3850531268646575e-01 -9.8861245225668903e-01 + -1.6530166261980268e+00 1.0760148857767979e+00 -1.1665184839952578e+00 + -1.8613127860548979e+00 1.2260920695131601e+00 -1.3621596857140585e+00 + -2.0719321165146205e+00 1.3832292110641409e+00 -1.5874443084229197e+00 + -2.2755930734018257e+00 1.5229260342127295e+00 -1.8545314568612681e+00 + -2.4758425696467037e+00 1.6148120647893389e+00 -2.1621594504926476e+00 + -2.6873250272806248e+00 1.6312602721308738e+00 -2.4952036854725481e+00 + -2.9033835681286586e+00 1.5600320419486100e+00 -2.8367991168559734e+00 + -3.0942196574431913e+00 1.4095251086909517e+00 -3.1763980449522662e+00 + -3.2461555107421161e+00 1.2003226427892693e+00 -3.5054612989584593e+00 + -3.3766541780077430e+00 9.5845411463287533e-01 -3.8120272905939845e+00 + -3.4981444513313695e+00 6.9994720212081374e-01 -4.0760743913981345e+00 + -3.5960376313375435e+00 4.0336087634318529e-01 -4.2645279872706974e+00 + -3.6622167465220992e+00 -5.0801459469346444e-02 -4.2870121391809191e+00 + id 14941 + loc 6.2460385262966156e-02 8.7868982553482056e-01 394 + blend 0.0000000000000000e+00 + interp 5.1858311377955801e-01:4.5120021329236654e-01:2.7332160271229833e-01:5.1857792794842028e-01:9.9534770302246400e-01:2.4192956800701840e-01:1.4563139225291546e+00:3.1207257360551877e-01:2.5119602035612978e+00:3.2577376168512651e-01:3.0187454083513083e+00:2.6783616827192142e-01:3.9151008361956152e+00 + CVs 20 + -2.6430424275761627e-01 2.3994114051019769e-01 -1.2421827458707341e-01 + -5.1841535517480519e-01 4.9043263864605724e-01 -2.6120895204236827e-01 + -7.8072199734329473e-01 7.4922816091395061e-01 -3.9128699583243437e-01 + -1.0612112578626576e+00 1.0052450492976179e+00 -5.1013339723610573e-01 + -1.3645166782670404e+00 1.2405627596638407e+00 -6.2558942021962372e-01 + -1.6912803891365860e+00 1.4314792410592931e+00 -7.4963001639629989e-01 + -2.0361720500861988e+00 1.5542165434875064e+00 -8.9050046560549345e-01 + -2.3876044892906085e+00 1.5926655586198002e+00 -1.0445383480756303e+00 + -2.7296798871254637e+00 1.5426393278372108e+00 -1.2011976727816960e+00 + -3.0491514802703921e+00 1.4128844425789056e+00 -1.3508735841327815e+00 + -3.3403104823498730e+00 1.2206770513391845e+00 -1.4889171834381476e+00 + -3.6025626408604752e+00 9.8459724662913106e-01 -1.6162887747585457e+00 + -3.8333778002900787e+00 7.2163336633980024e-01 -1.7355055420513601e+00 + -4.0268392423623931e+00 4.4879121533347544e-01 -1.8444699860460032e+00 + -4.1900870272842790e+00 1.7261389440764274e-01 -1.9516404370353237e+00 + -4.3576246089979955e+00 -1.3746821237460471e-01 -2.1120983473752517e+00 + -4.5836297390259633e+00 -4.9374285324203826e-01 -2.4531595911215005e+00 + -4.8387639420800239e+00 -7.0606260985447511e-01 -2.9637354635307576e+00 + -4.9207280087362761e+00 -7.4030333916163205e-01 -3.1423930705769081e+00 + id 14942 + loc 6.0033339262008667e-01 2.6440900564193726e-01 394 + blend 0.0000000000000000e+00 + interp 2.7283327014336833e-01:2.7283054181066690e-01:1.2721777693214376e-01:2.4536820682195276e-01:1.0807458994385002e+00:2.6621201499748226e-01:2.0680864249332660e+00:2.6134929858940653e-01:3.3392341096160267e+00 + CVs 20 + 9.5974399539287769e-02 2.1092249561085152e-01 2.5849173462292863e-01 + 2.3116372673916838e-01 4.0533343992163368e-01 4.8241077052944842e-01 + 3.7865534585668914e-01 5.7964560836271228e-01 6.8612418547775333e-01 + 5.2820077654097131e-01 7.4050131727677115e-01 8.7857039196941678e-01 + 6.7293545982983705e-01 8.9662039230818880e-01 1.0592966276325531e+00 + 8.0632562352069470e-01 1.0550852259741581e+00 1.2306913539204074e+00 + 9.3196605500301999e-01 1.2161755002094972e+00 1.4011458613604122e+00 + 1.0552456151593814e+00 1.3761716702447173e+00 1.5826938187489972e+00 + 1.1726767997572418e+00 1.5322786432933899e+00 1.7882433132412427e+00 + 1.2772070832017843e+00 1.6819725442058497e+00 2.0279715411097086e+00 + 1.3706126150592364e+00 1.8196146150201642e+00 2.3038879305144500e+00 + 1.4633544962937244e+00 1.9287257942086042e+00 2.6153256711099360e+00 + 1.5607130074697610e+00 1.9493606726838881e+00 2.9641104239201326e+00 + 1.6563742840113420e+00 1.7911740637337614e+00 3.3270620149929870e+00 + 1.7536957450688546e+00 1.4498951959281334e+00 3.6821594415443402e+00 + 1.8761769209844732e+00 1.0144960640883105e+00 4.0562483856008864e+00 + 2.0626016776551346e+00 5.8437917249216120e-01 4.4669318300902159e+00 + 2.3492192639763529e+00 2.3809956873031135e-01 4.8650687877612446e+00 + 2.6652012625246480e+00 2.0900252823550680e-02 5.1696101181767027e+00 + id 14943 + loc 5.0127106904983521e-01 1.3389211893081665e-01 394 + blend 0.0000000000000000e+00 + interp 4.1040032746486993e-01:3.3739867370157145e-01:5.2103107727037745e-01:2.6240637658675542e-01:1.1489202928508069e+00:4.1039622346159532e-01:1.9063096869224316e+00:2.7530584652172629e-01:2.5194567372236287e+00:2.3850090955727835e-01:3.7866514018290491e+00 + CVs 20 + 2.3563999433371968e-01 2.7465075330890881e-01 1.8595675681706852e-01 + 4.9241348170826738e-01 5.3482674101224781e-01 3.4581561733921712e-01 + 7.5116063048610260e-01 7.8454536348830906e-01 5.0021228775435289e-01 + 1.0011191261241019e+00 1.0294971024346151e+00 6.6388016487646773e-01 + 1.2328918461820697e+00 1.2669211691108111e+00 8.4702055561835654e-01 + 1.4409624132448098e+00 1.4843533826746043e+00 1.0566349724323663e+00 + 1.6246910645957970e+00 1.6665857422547621e+00 1.2941901672958998e+00 + 1.7818379578637404e+00 1.8025193737261009e+00 1.5524096999133865e+00 + 1.9073282756529657e+00 1.8894353125726946e+00 1.8166306173353250e+00 + 1.9977674927033080e+00 1.9348107327344795e+00 2.0704340597796449e+00 + 2.0553385971109468e+00 1.9566150256481172e+00 2.2989879752026940e+00 + 2.0895918225781203e+00 1.9785636325676512e+00 2.4969457016982863e+00 + 2.1150755313453873e+00 1.9937415556518427e+00 2.6798330532487422e+00 + 2.1353264431833829e+00 1.9291227253878318e+00 2.8508790238010757e+00 + 2.1421729907055149e+00 1.7282721887059125e+00 2.9863849395966384e+00 + 2.1301421526562772e+00 1.4063918005541778e+00 3.1078744559571314e+00 + 2.0971315760306135e+00 1.0146741312658141e+00 3.2798000360424648e+00 + 2.0886983715580563e+00 6.4699834220571484e-01 3.5012307743916109e+00 + 2.2144763527295899e+00 5.3526263418263298e-01 3.5691476475735322e+00 + id 14944 + loc 9.6714299917221069e-01 3.0009996891021729e-01 394 + blend 0.0000000000000000e+00 + interp 5.5937416383588767e-01:5.5936857009424934e-01:2.5656962413420381e-01:4.7502409213763552e-01:7.1221935323431551e-01:3.3988950360675302e-01:1.3723919870664947e+00:2.2732346741792125e-01:1.9607752367770264e+00:3.6574138488745489e-01:2.5070168554848058e+00:2.3075053318794259e-01:3.5821749823176274e+00 + CVs 20 + 3.3075913187016825e-01 2.4412050807198735e-01 2.8431850900362116e-01 + 6.0152569915458043e-01 4.3349479372817579e-01 5.2264953108323442e-01 + 8.5509963299450842e-01 5.9784763589282675e-01 7.4438319752419946e-01 + 1.1119419902263048e+00 7.5446985796643029e-01 9.6248294131690226e-01 + 1.3736573372563818e+00 9.0562361002639458e-01 1.1805484418845027e+00 + 1.6437986683568369e+00 1.0526380543334461e+00 1.4054527243997166e+00 + 1.9297264780343109e+00 1.1981502604703471e+00 1.6419586709085301e+00 + 2.2398273034612846e+00 1.3430480630373489e+00 1.8946923734894376e+00 + 2.5774970100429346e+00 1.4764723867257210e+00 2.1743089201415544e+00 + 2.9382464960585315e+00 1.5749403190712714e+00 2.4887748796022975e+00 + 3.3155723127333019e+00 1.6155684354038593e+00 2.8289823691049585e+00 + 3.7033903737698113e+00 1.5865821599170125e+00 3.1732832338529939e+00 + 4.0883522088022355e+00 1.4905698925372546e+00 3.5042412055723942e+00 + 4.4485261097417608e+00 1.3434531147812363e+00 3.8120293872252913e+00 + 4.7697436772972930e+00 1.1671728660671157e+00 4.0909338461336837e+00 + 5.0625470823547234e+00 9.7524805367645628e-01 4.3440031829989767e+00 + 5.3504919335803294e+00 7.6569093002076150e-01 4.5766365157159168e+00 + 5.6338999955643638e+00 5.3504983285176477e-01 4.7742717567869200e+00 + 5.8188424299323724e+00 3.2577831272604785e-01 4.8264327184857967e+00 + id 14945 + loc 1.9225710630416870e-01 3.2007020711898804e-01 394 + blend 0.0000000000000000e+00 + interp 4.0997120152570360e-01:2.7986806948041304e-01:7.7563182256360852e-01:3.1043004496818871e-01:1.3814742742853563e+00:3.7875168290969952e-01:1.9867539054328061e+00:2.5829666343337282e-01:2.6873691307296608e+00:4.0996710181368834e-01:3.0548396533720932e+00:3.1160557857206939e-01:3.7375935295048239e+00 + CVs 20 + -1.3324252103554596e-01 1.8891267640807757e-01 3.0963506280772446e-01 + -2.7073601153039512e-01 3.6101772726405146e-01 5.9738929558751419e-01 + -4.0998083118968365e-01 5.3401269703256127e-01 8.9205473364901755e-01 + -5.4761789532057459e-01 7.1873785647505761e-01 1.2087346095668083e+00 + -6.8480843611244946e-01 9.1234626111605266e-01 1.5419002538927662e+00 + -8.2604936984503607e-01 1.1012266835400872e+00 1.8835228092459337e+00 + -9.7805671366410984e-01 1.2658230591922641e+00 2.2286633989980782e+00 + -1.1425363090547349e+00 1.3887482676234368e+00 2.5768445072784081e+00 + -1.3102676095453152e+00 1.4543963883717832e+00 2.9254776311404327e+00 + -1.4658246546357221e+00 1.4410256306911928e+00 3.2581222254089335e+00 + -1.5905037154270181e+00 1.3274675722187570e+00 3.5402664873254532e+00 + -1.6545050118855111e+00 1.1173637526560627e+00 3.7360505653149350e+00 + -1.6311427331902806e+00 8.5088684298179551e-01 3.8361203548712299e+00 + -1.5419203555861434e+00 5.6879554576559421e-01 3.8779605859970832e+00 + -1.4425962562610017e+00 2.6656813856526296e-01 3.9234170165667610e+00 + -1.3540262541571944e+00 -6.5062989779492986e-02 4.0227376141973554e+00 + -1.2657160389794604e+00 -3.9663068638848231e-01 4.2341686379752845e+00 + -1.1652068987789899e+00 -6.7922155884586699e-01 4.5682614732309679e+00 + -1.1476889188614146e+00 -1.0412959778140629e+00 4.8317583375791315e+00 + id 14946 + loc 1.9470220804214478e-01 1.3390074670314789e-01 394 + blend 0.0000000000000000e+00 + interp 5.4056867390083985e-01:3.7225098671328488e-01:2.6795528050843842e-02:4.9259419668958970e-01:5.6115470148154811e-01:2.8861961206815667e-01:1.1374401194709154e+00:2.6648007847770006e-01:2.1509757852412816e+00:5.4056326821410083e-01:2.9611008948805742e+00:3.2185027975853414e-01:3.6621102641967616e+00 + CVs 20 + -1.1798067004187646e-01 1.7831247617869539e-01 1.9846000205176276e-01 + -2.3690562904489587e-01 3.5507135608581414e-01 4.1166961879139463e-01 + -3.4590799808549522e-01 5.2139737853232737e-01 6.2486902891460461e-01 + -4.3676792274582932e-01 6.7730160351300683e-01 8.2963909825417081e-01 + -5.0421456477687221e-01 8.2816447168556895e-01 1.0163050702356400e+00 + -5.4462054665635562e-01 9.8092551236067171e-01 1.1751692158877245e+00 + -5.6231719952414738e-01 1.1439256704712686e+00 1.3120187959561438e+00 + -5.7017531187657233e-01 1.3229754238113001e+00 1.4417823991663321e+00 + -5.8214287962305766e-01 1.5223038308238626e+00 1.5721278633588867e+00 + -6.1272504825120655e-01 1.7473211579509136e+00 1.6994582000002501e+00 + -6.7566497222360755e-01 2.0058406311161274e+00 1.8200481095023349e+00 + -7.8711777924291970e-01 2.3039231850683608e+00 1.9457301220724377e+00 + -9.7076421515751243e-01 2.6042850526456771e+00 2.1008187828378562e+00 + -1.2086459389365434e+00 2.7794342799402605e+00 2.2798674522602171e+00 + -1.4104160523849834e+00 2.7164359715813213e+00 2.4331980711710712e+00 + -1.5399569026284128e+00 2.4350130484909616e+00 2.5311980839782833e+00 + -1.6621049247979474e+00 2.0239728398086791e+00 2.5648979779486383e+00 + -1.8331711207588923e+00 1.5782096836474644e+00 2.5674260206542812e+00 + -1.9193468230394966e+00 1.3382775126332653e+00 2.7921999593005431e+00 + id 14947 + loc 3.9770340919494629e-01 6.3526237010955811e-01 394 + blend 0.0000000000000000e+00 + interp 3.9236273700942914e-01:2.8815479396189475e-01:5.3285211515778808e-01:3.9235881338205908e-01:1.0810886989957320e+00:2.6387195247784534e-01:1.9883080981824341e+00:2.5733197226422949e-01:3.0076512199851209e+00:3.8876255689774919e-01:3.8122984879339112e+00 + CVs 20 + -1.7369240634422073e-01 2.1630038311476565e-01 -2.6440980361541166e-01 + -3.3982125184188838e-01 4.4080427166339742e-01 -5.2107773842259353e-01 + -4.9799424945873683e-01 6.8582895322520676e-01 -7.7015302015794473e-01 + -6.4614000980275310e-01 9.5236928459275916e-01 -1.0103096680804828e+00 + -7.8223745461577576e-01 1.2298484587794301e+00 -1.2418755091670268e+00 + -9.0834407938707540e-01 1.5024963717805060e+00 -1.4708232737902622e+00 + -1.0303499211574270e+00 1.7571684042946307e+00 -1.7039300907079054e+00 + -1.1558627519825200e+00 1.9879827298591601e+00 -1.9420911404023888e+00 + -1.2891126755498257e+00 2.1907229882806347e+00 -2.1806526762549336e+00 + -1.4289006952631167e+00 2.3599273433138026e+00 -2.4159583849327881e+00 + -1.5767263511334981e+00 2.4935769245904416e+00 -2.6551090284713039e+00 + -1.7387174083369807e+00 2.5861448431000302e+00 -2.9182062722837729e+00 + -1.9133953526982110e+00 2.6210456493103300e+00 -3.2138738116205632e+00 + -2.0866253150523026e+00 2.5900888455616222e+00 -3.5125147581561555e+00 + -2.2361366727003791e+00 2.5133715394042273e+00 -3.7703885906583681e+00 + -2.3191657105038024e+00 2.4201007857579331e+00 -3.9706925494641161e+00 + -2.2771180389064800e+00 2.3170824756567558e+00 -4.1249780264764526e+00 + -2.1613229873345308e+00 2.1899765088805840e+00 -4.2511621788722778e+00 + -2.2872845697040094e+00 2.1678677993142044e+00 -4.2796165361924627e+00 + id 14948 + loc 5.2121776342391968e-01 4.8546397686004639e-01 394 + blend 0.0000000000000000e+00 + interp 3.2857349911009265e-01:3.0504594828858705e-01:5.2725355223831194e-01:2.4764476344446970e-01:1.8360159192390924e+00:3.2857021337510156e-01:2.8633821338384773e+00:2.4396270810849760e-01:3.7163227939104773e+00 + CVs 20 + 3.5150398038383612e-01 2.8207503756753571e-01 2.1625403492338000e-01 + 6.8401323741607545e-01 5.4396168097966036e-01 4.0102419117564392e-01 + 1.0078672820641770e+00 8.1502728651157430e-01 5.7137612649393099e-01 + 1.3228081730210026e+00 1.1118423524495200e+00 7.3899551940679820e-01 + 1.6239352073035864e+00 1.4317728761595059e+00 9.1547368030059795e-01 + 1.9150275883041616e+00 1.7602000394450352e+00 1.1192600957075436e+00 + 2.2032107880112406e+00 2.0769171890456959e+00 1.3636164850612194e+00 + 2.4939013517720441e+00 2.3638787287745426e+00 1.6473226552997668e+00 + 2.7983974460786696e+00 2.6035922040074357e+00 1.9783191063585737e+00 + 3.1314030017240766e+00 2.7597941351921742e+00 2.3859784515299913e+00 + 3.4866714220635746e+00 2.7742726715116373e+00 2.8779900321879150e+00 + 3.8322915095061640e+00 2.6041956123636547e+00 3.4093577698363542e+00 + 4.1331814544920631e+00 2.2582484281653454e+00 3.9139606058236867e+00 + 4.3686439764708869e+00 1.8148284396452992e+00 4.3469814544951166e+00 + 4.5587021012389197e+00 1.3910806252697747e+00 4.7026262868835795e+00 + 4.7598689337256790e+00 1.1079609612350678e+00 4.9805439220347711e+00 + 4.9966936823663035e+00 1.0390146333135859e+00 5.1856349905588868e+00 + 5.2332805067237906e+00 1.0652059355964814e+00 5.3784995726460476e+00 + 5.4808420658065549e+00 8.5115813290237075e-01 5.6994573437940552e+00 + id 14949 + loc 8.9936655759811401e-01 8.2062798738479614e-01 394 + blend 0.0000000000000000e+00 + interp 3.7568085048620020e-01:3.7567709367769536e-01:9.1186237470519971e-01:2.4456787550039294e-01:1.4811362178853593e+00:2.6414459614149638e-01:2.4000436415750594e+00:3.2203044998427027e-01:2.9826632182903237e+00:2.5098754953806884e-01:3.9787666478020665e+00 + CVs 20 + -1.7115708801169668e-01 2.0308184307166155e-01 -3.4561371465064827e-01 + -3.3476576983296258e-01 3.8649374215403165e-01 -6.5609805203128102e-01 + -4.8324357570028581e-01 5.6255779176283260e-01 -9.5252541397045354e-01 + -6.1758194550900458e-01 7.3667734204233493e-01 -1.2447104109067009e+00 + -7.4233287377180313e-01 9.0919780322726695e-01 -1.5358444024004783e+00 + -8.6507287744379668e-01 1.0813814496591039e+00 -1.8293566482209733e+00 + -9.9423168766771286e-01 1.2529909548353693e+00 -2.1279187885336528e+00 + -1.1373968134310983e+00 1.4182830707193546e+00 -2.4387988346596980e+00 + -1.3013112903829149e+00 1.5630628547988881e+00 -2.7749036382242140e+00 + -1.4930888865964320e+00 1.6671365400331790e+00 -3.1420315322651460e+00 + -1.7192421338997845e+00 1.7117707451063351e+00 -3.5297788047257876e+00 + -1.9795098133844009e+00 1.6846229362637812e+00 -3.9205598739587977e+00 + -2.2662332027085705e+00 1.5822215141062292e+00 -4.2997160192861212e+00 + -2.5709308663697863e+00 1.4085401239349831e+00 -4.6501009842446024e+00 + -2.8915573901745315e+00 1.1709520900530856e+00 -4.9494737832239437e+00 + -3.2284344322710732e+00 8.6712464669533285e-01 -5.1782376172937106e+00 + -3.5660601294786316e+00 4.9229935259140989e-01 -5.3120673370547582e+00 + -3.8712462037816970e+00 7.9782723959528123e-02 -5.3323443177270065e+00 + -4.1311454231123594e+00 -2.9882228600783334e-01 -5.2978003019628872e+00 + id 14950 + loc 9.6127271652221680e-02 9.9208968877792358e-01 394 + blend 0.0000000000000000e+00 + interp 4.2205831532308158e-01:4.2205409473992839e-01:4.9291900272208189e-01:2.1147356277429449e-01:1.2615378850859740e+00:3.7556162578113306e-01:1.9718862569252680e+00:3.6649958082432271e-01:2.6861195031963012e+00:3.7387513429169095e-01:3.0951175355696980e+00:2.6478794158842850e-01:3.8428768760770389e+00 + CVs 20 + -2.4840128285391372e-01 2.1584221553656116e-01 -8.7869518860740445e-02 + -4.8816544305427778e-01 4.4041833921720536e-01 -2.0057324275845945e-01 + -7.2245059170229076e-01 6.7056317438676472e-01 -3.3029218708623126e-01 + -9.5663511210163621e-01 9.0088793409267010e-01 -4.7407778882542451e-01 + -1.1967647052185220e+00 1.1232743654160819e+00 -6.3447817191994316e-01 + -1.4472764062372341e+00 1.3244783728124598e+00 -8.1412626331144722e-01 + -1.7110988599797698e+00 1.4889111140185445e+00 -1.0154394621059317e+00 + -1.9918369899623747e+00 1.6022531079747924e+00 -1.2401433471668417e+00 + -2.2904877360214728e+00 1.6513406781601674e+00 -1.4869126697437445e+00 + -2.6048236180391822e+00 1.6272609615184890e+00 -1.7515740080762332e+00 + -2.9300912327690787e+00 1.5291818062292584e+00 -2.0286100069555397e+00 + -3.2569088001843167e+00 1.3665445025429162e+00 -2.3147073479660345e+00 + -3.5723202758917809e+00 1.1552165480995003e+00 -2.6140182631046409e+00 + -3.8668633266823695e+00 9.0129365819329155e-01 -2.9327953521439065e+00 + -4.1383449034500543e+00 6.0775697212893287e-01 -3.2692256990267738e+00 + -4.3918767725598205e+00 3.5129651777680704e-01 -3.6308095312805833e+00 + -4.6247584989926365e+00 3.7396361171860781e-01 -4.0314209149918865e+00 + -4.7752962869985875e+00 8.8754016352049936e-01 -4.2874670196782265e+00 + -5.0284807653708876e+00 9.4144244814570621e-01 -4.6437444601820248e+00 + id 14951 + loc 6.5452784299850464e-02 7.4348121881484985e-01 394 + blend 0.0000000000000000e+00 + interp 4.0228395960743346e-01:4.0227993676783741e-01:2.5135656158056019e-01:2.7472091263286863e-01:1.3774566939801096e+00:3.0978820669380863e-01:2.1012844292136830e+00:2.7496950262456732e-01:2.8927910939261832e+00:2.5891359808616776e-01:3.4689071097739688e+00 + CVs 20 + -1.8304948152461134e-01 1.4115468506413761e-01 -2.5827453687309473e-02 + -3.6143551277801067e-01 3.0116759933687837e-01 -5.6941018412189993e-02 + -5.2151074994666058e-01 4.7350907348736193e-01 -7.6567771719622257e-02 + -6.5929540110015994e-01 6.6223246592717033e-01 -7.4307527101510229e-02 + -7.7986779503889359e-01 8.8084464570998477e-01 -4.6042992364272561e-02 + -8.9440955453117499e-01 1.1480290423183312e+00 6.0859997993075177e-03 + -1.0116203720363137e+00 1.4670947805385621e+00 6.1989101560161852e-02 + -1.1312967776531875e+00 1.8179978454375956e+00 9.5769733029819171e-02 + -1.2689183328637883e+00 2.2017090956706538e+00 9.5262808624363760e-02 + -1.4841094180161529e+00 2.6608547976419969e+00 3.3730341205286396e-02 + -1.8384964210438430e+00 3.1986863663891336e+00 -1.7511132559442222e-01 + -2.3021517099983009e+00 3.6974100197073256e+00 -6.2407172414840439e-01 + -2.7712208892154031e+00 4.0028092006178140e+00 -1.2845329274246713e+00 + -3.1585035882989398e+00 4.0565015977994570e+00 -1.9944637473208666e+00 + -3.4179585541955477e+00 3.9490945673897619e+00 -2.5894557481543066e+00 + -3.5165898487895619e+00 3.8433105327871555e+00 -3.0101042531945605e+00 + -3.3912325873900340e+00 3.8671150473808091e+00 -3.2532454973123714e+00 + -3.0846115917068260e+00 3.9530731159269927e+00 -3.4059925967501457e+00 + -3.3134429229635356e+00 3.8238790166060168e+00 -3.6277221731858953e+00 + id 14952 + loc 5.8331962674856186e-02 2.2420148551464081e-01 394 + blend 0.0000000000000000e+00 + interp 3.9690026803186107e-01:2.7886373684991367e-01:7.5835421168209072e-01:3.3004701002665093e-01:1.3171109644843357e+00:1.9891081443536543e-01:2.1221747250861145e+00:3.9689629902918078e-01:3.0133079451888767e+00:3.0344745853412453e-01:3.5853024776813465e+00 + CVs 20 + -9.6957075235616738e-02 2.2568664962104612e-01 1.9027756805127605e-01 + -2.2011967062448964e-01 4.9917154386290624e-01 4.0812035427223137e-01 + -3.5444604351051956e-01 8.0327509683179554e-01 6.2160219994443278e-01 + -5.0006758815471841e-01 1.1262972820068473e+00 8.1737968428014596e-01 + -6.6841659095596817e-01 1.4585685932419323e+00 9.9206316401266204e-01 + -8.7114093039951601e-01 1.7868867089541749e+00 1.1481126131804940e+00 + -1.1167481851598291e+00 2.0978554157003200e+00 1.2932483412872602e+00 + -1.4072222722601442e+00 2.3779141026074861e+00 1.4335997464194401e+00 + -1.7398255066364952e+00 2.6111623285030952e+00 1.5740884355414371e+00 + -2.1107622225808340e+00 2.7761772698759097e+00 1.7239371408305968e+00 + -2.5147302426591143e+00 2.8389664192277291e+00 1.8950827103245544e+00 + -2.9325844056681625e+00 2.7548402992108358e+00 2.0893997185497293e+00 + -3.3169171538472488e+00 2.5279606659669609e+00 2.2900555210467273e+00 + -3.6404695025502680e+00 2.2752132062138428e+00 2.4877668596473428e+00 + -3.9215391104567652e+00 2.1182862436010543e+00 2.6954827559444925e+00 + -4.1557644018061701e+00 2.0924464911576699e+00 2.9249710720858517e+00 + -4.3174960404932259e+00 2.1681288689930822e+00 3.1790179020891465e+00 + -4.4148608212270517e+00 2.2857023046896847e+00 3.4332954019601667e+00 + -4.5451114025262234e+00 2.3332009694516791e+00 3.7026022872228141e+00 + id 14953 + loc 1.4361616969108582e-01 5.2919322252273560e-01 394 + blend 0.0000000000000000e+00 + interp 3.9242668119233270e-01:2.9404572523121947e-01:2.8017524172130870e-01:3.9242275692552081e-01:1.0465219520727247e+00:2.7530898873591497e-01:2.0049517559980528e+00:2.8427474627606758e-01:2.7921792797718195e+00:3.4001969580437674e-01:3.2537175154738454e+00 + CVs 20 + -2.4319418420485084e-01 1.7176508018912698e-01 -8.9606435676190532e-02 + -4.7769344794844060e-01 3.2151833232195526e-01 -1.9545833884953923e-01 + -7.0895771816936759e-01 4.5824947169808727e-01 -3.0857456570823216e-01 + -9.3976579664567716e-01 5.9048357848904265e-01 -4.2214962133381018e-01 + -1.1630938621199136e+00 7.1885264245116542e-01 -5.3038297677772905e-01 + -1.3697061191400604e+00 8.3977164861203757e-01 -6.2612873767417931e-01 + -1.5505374924431550e+00 9.4700622858038608e-01 -7.1017972588113265e-01 + -1.6991250135735880e+00 1.0343101616219341e+00 -7.9176140180096632e-01 + -1.8143615044062587e+00 1.1062388241010481e+00 -8.6373226592829111e-01 + -1.8969938759715501e+00 1.1903607130825309e+00 -8.9300194973974167e-01 + -1.9521765648320939e+00 1.3260262994384013e+00 -8.6104642226869921e-01 + -1.9910901854357621e+00 1.5346892298285244e+00 -8.0707462451542611e-01 + -2.0304025263943362e+00 1.7786451902211524e+00 -8.0413605593985205e-01 + -2.0698860770192233e+00 1.9435815247130699e+00 -8.9372216509747160e-01 + -2.0692222735227506e+00 1.9385061138588302e+00 -1.0575377139674487e+00 + -1.9890244849700254e+00 1.7366607624502095e+00 -1.2766146736804638e+00 + -1.8800084755344697e+00 1.3240124569571767e+00 -1.5461102614858819e+00 + -1.9079205432825805e+00 8.0327487798736585e-01 -1.8232276223209478e+00 + -2.1158491716959973e+00 4.8582571827262799e-01 -2.0127538799898916e+00 + id 14954 + loc 2.2548127174377441e-01 9.5804840326309204e-01 394 + blend 0.0000000000000000e+00 + interp 3.7387887308042173e-01:2.8138092980431340e-01:7.9886796157381967e-01:3.7387513429169095e-01:1.0989368737169523e+00:3.2478393353358925e-01:1.9763529976025305e+00:3.0065530862863771e-01:2.4110151985922941e+00:2.5914099894591353e-01:2.9992984206437345e+00:3.1627087590534098e-01:3.8254291639985256e+00 + CVs 20 + -2.6557563046747712e-01 2.2934876830765943e-01 -1.0481127584184360e-01 + -5.1501698674847174e-01 4.6757267527452118e-01 -2.2451977872027024e-01 + -7.5481180825681693e-01 7.1276691424069483e-01 -3.5778482733744382e-01 + -9.8756828712098954e-01 9.5904832203138901e-01 -5.0730040772273854e-01 + -1.2139796049794833e+00 1.1985538247480449e+00 -6.7833407335163221e-01 + -1.4366362214207360e+00 1.4228290377672854e+00 -8.7631916247564579e-01 + -1.6614171005882543e+00 1.6234369010057259e+00 -1.1070529179261388e+00 + -1.8955616565051632e+00 1.7918648661362981e+00 -1.3745210813767699e+00 + -2.1440453204525984e+00 1.9183464831718304e+00 -1.6783782918787089e+00 + -2.4068309431606103e+00 1.9939044382583515e+00 -2.0130424329824135e+00 + -2.6766700981090663e+00 2.0167605051198172e+00 -2.3647308769155777e+00 + -2.9408451779026477e+00 1.9975567261851648e+00 -2.7137742182462952e+00 + -3.1950453729473440e+00 1.9485298965115971e+00 -3.0543537989579894e+00 + -3.4451704827433955e+00 1.8645575651193433e+00 -3.4007197718280144e+00 + -3.6706902925071181e+00 1.7565231052784149e+00 -3.7247262902683622e+00 + -3.8045539939102322e+00 1.7259507858259697e+00 -3.8739251647382780e+00 + -3.7769089699021423e+00 1.8157154861287306e+00 -3.5953859410044910e+00 + -3.7110788912041484e+00 1.7655023284941245e+00 -3.1369288086936074e+00 + -3.8685927390577901e+00 1.9043667386868404e+00 -3.4322307150605456e+00 + id 14955 + loc 1.5636412799358368e-01 7.6192075014114380e-01 394 + blend 0.0000000000000000e+00 + interp 4.4289969751943670e-01:2.7660362942250855e-01:6.7816158923512893e-02:2.7496950262456732e-01:8.9493921601685789e-01:2.5973226143739714e-01:1.6182521355569475e+00:4.2121404246157257e-01:2.0430656636797089e+00:2.6581383467457576e-01:2.9545488339889454e+00:4.4289526852246153e-01:3.6400810906642267e+00 + CVs 20 + -1.2850071737723237e-01 1.9330889621729289e-01 -1.7121986602372707e-01 + -2.5708971081758375e-01 4.1135721339143888e-01 -3.3674793534920966e-01 + -3.7770266955663367e-01 6.5266092732959924e-01 -4.8148585951991840e-01 + -4.8885768174889543e-01 9.1258065865830451e-01 -5.9865036487109236e-01 + -5.9554382593424915e-01 1.1869024429185600e+00 -6.9158283898767059e-01 + -7.0541840579935544e-01 1.4718302151876270e+00 -7.7181985920464691e-01 + -8.2715901347839471e-01 1.7620923110049460e+00 -8.5712992686465872e-01 + -9.6721249808941956e-01 2.0478718968194038e+00 -9.6060539675896550e-01 + -1.1319599863124696e+00 2.3217914388202203e+00 -1.0853931546309841e+00 + -1.3340138400191108e+00 2.5844945421908396e+00 -1.2413744545969010e+00 + -1.5851950605160221e+00 2.8263887266347134e+00 -1.4597540141791527e+00 + -1.8748865725724346e+00 3.0050603790470394e+00 -1.7704263783188887e+00 + -2.1712177018427017e+00 3.0673596364625788e+00 -2.1587275072339911e+00 + -2.4446793071559569e+00 2.9952009593846776e+00 -2.5587106193952063e+00 + -2.6807707053641932e+00 2.8326628701933259e+00 -2.8896429871112526e+00 + -2.8759612496736580e+00 2.6637241343896179e+00 -3.1096202999414491e+00 + -2.9994125805027405e+00 2.5883882666306564e+00 -3.1980435606116737e+00 + -2.9813582489565529e+00 2.6569308362385513e+00 -3.1653170766653913e+00 + -3.1818590834455733e+00 2.5894373563923345e+00 -3.1601758818635401e+00 + id 14956 + loc 9.4154924154281616e-01 9.4437658786773682e-01 394 + blend 0.0000000000000000e+00 + interp 4.1114931703475843e-01:2.5998540783766072e-01:1.0007558562694991e+00:3.2700048363266582e-01:1.7760023297946859e+00:4.1114520554158812e-01:2.0396737590021736e+00:3.2680966480997703e-01:2.7011438605444691e+00:2.9987220483045390e-01:3.1708008389886779e+00:2.6088021092042735e-01:3.9902388820001069e+00 + CVs 20 + -2.3659379342520551e-01 1.0103199128659927e-01 -1.2566191059474630e-01 + -4.6871965992274545e-01 2.2219760073448491e-01 -2.8293864057063922e-01 + -6.9842834446035518e-01 3.5337404222161828e-01 -4.5676060567855259e-01 + -9.2713799564155253e-01 4.8791803347996765e-01 -6.4153079059362694e-01 + -1.1521410083808439e+00 6.2095184571537432e-01 -8.3722132506555424e-01 + -1.3722995743018611e+00 7.4824457337420403e-01 -1.0426383601206179e+00 + -1.5882215934972095e+00 8.6705336012344880e-01 -1.2575943921245114e+00 + -1.7997495869543694e+00 9.7147086236443259e-01 -1.4847784862697948e+00 + -2.0030744875135680e+00 1.0489239171608338e+00 -1.7253451951230971e+00 + -2.1942190899208907e+00 1.0842214178971983e+00 -1.9713938323007163e+00 + -2.3744335465897781e+00 1.0664573380158242e+00 -2.2094999985105908e+00 + -2.5485858260458860e+00 9.9176707595944369e-01 -2.4329095531152634e+00 + -2.7192757184261467e+00 8.6198627828058205e-01 -2.6417041112465247e+00 + -2.8857866646442316e+00 6.8321571516371971e-01 -2.8344221353036736e+00 + -3.0470079439615354e+00 4.6254975624357364e-01 -3.0075622043031673e+00 + -3.1993260697252479e+00 2.0411762190316329e-01 -3.1589174745704685e+00 + -3.3341643960904270e+00 -8.8631756726997857e-02 -3.2885372365959151e+00 + -3.4470758754290500e+00 -4.0658755509757927e-01 -3.4021625659738293e+00 + -3.5724984343917203e+00 -7.2448170925017163e-01 -3.5326142609192774e+00 + id 14957 + loc 5.8701407909393311e-01 7.9478991031646729e-01 394 + blend 0.0000000000000000e+00 + interp 5.0135244526253808e-01:2.7499973622931190e-01:3.4592020383124378e-01:5.0134743173808549e-01:1.0089348242619958e+00:2.4505198616729687e-01:1.9052355302852964e+00:2.8205128869503920e-01:2.5920881058287493e+00:2.4832764754901498e-01:3.4163319067648108e+00 + CVs 20 + -2.4478488012027064e-01 1.2366117856502101e-01 -4.3860403978577392e-02 + -5.0218680009318728e-01 2.5905022805660466e-01 -9.7110766877242682e-02 + -7.6786978940784201e-01 4.0757331707898964e-01 -1.6382366677089519e-01 + -1.0364309317326017e+00 5.6934537983106437e-01 -2.5139880505373402e-01 + -1.2947954968757971e+00 7.3758068309609803e-01 -3.6577147225462747e-01 + -1.5296425492202339e+00 9.0496133180125793e-01 -5.0510081469022794e-01 + -1.7425527559280496e+00 1.0792508334455664e+00 -6.6582366976882912e-01 + -1.9427520823063651e+00 1.2715837762997886e+00 -8.5002371425367285e-01 + -2.1270184161739669e+00 1.4704465870398287e+00 -1.0622428085690119e+00 + -2.2805299407914355e+00 1.6518492441638000e+00 -1.3011991739105075e+00 + -2.4017503403455378e+00 1.8005739366828801e+00 -1.5638131843973184e+00 + -2.5020589822422155e+00 1.9063061068765359e+00 -1.8483279120769052e+00 + -2.5767215900170140e+00 1.9663138767994650e+00 -2.1479363714357111e+00 + -2.6044032398023456e+00 1.9911562963754177e+00 -2.4588096922754428e+00 + -2.5912638368988063e+00 1.9918570808306320e+00 -2.7938353641782747e+00 + -2.5931954728567277e+00 1.9706125520594269e+00 -3.1697632504813607e+00 + -2.6573684810317064e+00 1.9086384155043765e+00 -3.5730656033985913e+00 + -2.7525712336734323e+00 1.7568125186920633e+00 -3.9358417133264698e+00 + -2.7721833122971367e+00 1.4596318620204385e+00 -4.0834399662809195e+00 +endObject +endPatches diff --git a/Gems/AtomTressFX/Assets/TestData/StrandAlbedo.png b/Gems/AtomTressFX/Assets/TestData/StrandAlbedo.png new file mode 100644 index 0000000000..59054de0a2 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/StrandAlbedo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42c7f063e1e87aef6293e08b0b9e6bdf205fc2f79a8fb2cb70db03524ac547d3 +size 143015 diff --git a/Gems/AtomTressFX/Assets/TestData/test_hair_basecolor.png b/Gems/AtomTressFX/Assets/TestData/test_hair_basecolor.png new file mode 100644 index 0000000000..3210503ad1 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/test_hair_basecolor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df138ab3b88ce7678370ae589c8e28741e33f6f9aa9fba9f6c28705b0f3a02e7 +size 3626 diff --git a/Gems/AtomTressFX/Assets/TestData/test_hair_skin_basecolor.png b/Gems/AtomTressFX/Assets/TestData/test_hair_skin_basecolor.png new file mode 100644 index 0000000000..3210503ad1 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/test_hair_skin_basecolor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df138ab3b88ce7678370ae589c8e28741e33f6f9aa9fba9f6c28705b0f3a02e7 +size 3626 diff --git a/Gems/AtomTressFX/CMakeLists.txt b/Gems/AtomTressFX/CMakeLists.txt index 7a325ca97e..3138eb1ea0 100644 --- a/Gems/AtomTressFX/CMakeLists.txt +++ b/Gems/AtomTressFX/CMakeLists.txt @@ -5,3 +5,157 @@ # SPDX-License-Identifier: Apache-2.0 OR MIT # # + +if(PAL_TRAIT_BUILD_HOST_TOOLS) + + # Declare ATOMTRESSFX_EDITOR only when tools pipeline is built + # This is in order to allow AzToolsFramework to properly link across + # platforms that support editor mode, while in the rest, not include + # this module and avoide compiling the editor components. + set_source_files_properties( + Code/HairModule.cpp + Code/Components/EditorHairComponent.h + Code/Components/EditorHairComponent.cpp + PROPERTIES + COMPILE_DEFINITIONS + ATOMTRESSFX_EDITOR + ) + + ly_add_target( + NAME AtomTressFX.Static STATIC + NAMESPACE Gem + FILES_CMAKE + Hair_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + AZ::AzToolsFramework + Gem::LmbrCentral + Gem::Atom_RHI.Public + Gem::Atom_RPI.Public + Gem::Atom_Feature_Common.Static + Gem::AtomLyIntegration_CommonFeatures.Static + Gem::EMotionFXStaticLib + ) + + ly_add_target( + NAME AtomTressFX ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE} + NAMESPACE Gem + FILES_CMAKE + Hair_shared_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code/AssetPipeline + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + AZ::AzToolsFramework + Gem::Atom_Utils.Static + Gem::EMotionFXStaticLib + Gem::AtomTressFX.Static + ) + +else() + + ly_add_target( + NAME AtomTressFX.Static STATIC + NAMESPACE Gem + FILES_CMAKE + Hair_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + Gem::LmbrCentral + Gem::Atom_RHI.Public + Gem::Atom_RPI.Public + Gem::Atom_Feature_Common.Static + Gem::AtomLyIntegration_CommonFeatures.Static + Gem::EMotionFXStaticLib + ) + + ly_add_target( + NAME AtomTressFX ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE} + NAMESPACE Gem + FILES_CMAKE + Hair_shared_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code/AssetPipeline + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + Gem::Atom_Utils.Static + Gem::EMotionFXStaticLib + Gem::AtomTressFX.Static + ) +endif() + +# Clients and servers use the AtomTressFX module +ly_create_alias(NAME AtomTressFX.Clients NAMESPACE Gem TARGETS Gem::AtomTressFX) +ly_create_alias(NAME AtomTressFX.Servers NAMESPACE Gem TARGETS Gem::AtomTressFX) + +if(PAL_TRAIT_BUILD_HOST_TOOLS) + + ly_add_target( + NAME AtomTressFX.Builders.Static STATIC + NAMESPACE Gem + FILES_CMAKE + Hair_builders_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PUBLIC + AZ::AssetBuilderSDK + Gem::AtomTressFX.Static + ) + + ly_add_target( + NAME AtomTressFX.Builders GEM_MODULE + NAMESPACE Gem + FILES_CMAKE + Hair_builders_shared_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + Gem::AtomTressFX.Builders.Static + ) + + # builders and tools use the AtomTressFX.Builders and AtomTressFX modules + ly_create_alias(NAME AtomTressFX.Tools NAMESPACE Gem TARGETS Gem::AtomTressFX Gem::AtomTressFX.Builders) + +endif() diff --git a/Gems/AtomTressFX/Code/Assets/HairAsset.cpp b/Gems/AtomTressFX/Code/Assets/HairAsset.cpp new file mode 100644 index 0000000000..f863ad1daa --- /dev/null +++ b/Gems/AtomTressFX/Code/Assets/HairAsset.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairAssetHandler::HairAssetHandler() + : AzFramework::GenericAssetHandler(HairAsset::DisplayName, HairAsset::Group, HairAsset::Extension) + { + } + + Data::AssetHandler::LoadResult HairAssetHandler::LoadAssetData( + const Data::Asset& asset, AZStd::shared_ptr stream, + [[maybe_unused]]const Data::AssetFilterCB& assetLoadFilterCB) + { + HairAsset* assetData = asset.GetAs(); + assetData->m_tressFXAsset.reset(new AMD::TressFXAsset()); + if(assetData->m_tressFXAsset->LoadCombinedHairData(stream.get())) + { + return Data::AssetHandler::LoadResult::LoadComplete; + } + else + { + assetData->m_tressFXAsset.release(); + } + return Data::AssetHandler::LoadResult::Error; + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Assets/HairAsset.h b/Gems/AtomTressFX/Code/Assets/HairAsset.h new file mode 100644 index 0000000000..b7dd94bda1 --- /dev/null +++ b/Gems/AtomTressFX/Code/Assets/HairAsset.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + //! HairAsset is a simple AssetData wrapper around the TressFXAsset used by the AP. + //! Is comprises of the hair vertices data file, the hair bone skinning information file + //! and the collision data file. + //! The plan is to separate the collision data as it can have the relation of 1:1, 1:N or N:1 + //! meaning that the hair can have multiple collision handling (not only single mesh), and at + //! the other end multiple hairs can have the same collision (hairdo and fur for example). + class HairAsset final + : public AZ::Data::AssetData + { + public: + static constexpr inline const char* DisplayName = "HairAsset"; + static constexpr inline const char* Extension = "tfxhair"; + static constexpr inline const char* Group = "Hair"; + + AZ_RTTI(HairAsset, "{52842B73-8F75-4620-8231-31EBCC74DD85}", AZ::Data::AssetData); + AZ_CLASS_ALLOCATOR(HairAsset, AZ::SystemAllocator, 0); + + AZStd::unique_ptr m_tressFXAsset; + }; + + // HairAssetHandler + // This handler class help to load the .tfxhair file (which is a combined file of .tfx, .tfxbone and .tfxmesh) + // from an AssetDataStream. + class HairAssetHandler final + : public AzFramework::GenericAssetHandler + { + public: + HairAssetHandler(); + + private: + Data::AssetHandler::LoadResult LoadAssetData( + const Data::Asset& asset, AZStd::shared_ptr stream, + const Data::AssetFilterCB& assetLoadFilterCB) override; + }; + } + } +} diff --git a/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.cpp b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.cpp new file mode 100644 index 0000000000..7629aedea3 --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.cpp @@ -0,0 +1,173 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void HairAssetBuilder::RegisterBuilder() + { + // Setup the builder descriptor + AssetBuilderSDK::AssetBuilderDesc builderDesc; + builderDesc.m_name = "HairAssetBuilder"; + + builderDesc.m_patterns.emplace_back(AssetBuilderSDK::AssetBuilderPattern( + AZStd::string::format("*.%s", AMD::TFXFileExtension), AssetBuilderSDK::AssetBuilderPattern::PatternType::Wildcard)); + builderDesc.m_busId = azrtti_typeid(); + builderDesc.m_version = 3; + builderDesc.m_createJobFunction = + AZStd::bind(&HairAssetBuilder::CreateJobs, this, AZStd::placeholders::_1, AZStd::placeholders::_2); + builderDesc.m_processJobFunction = + AZStd::bind(&HairAssetBuilder::ProcessJob, this, AZStd::placeholders::_1, AZStd::placeholders::_2); + + BusConnect(builderDesc.m_busId); + + AssetBuilderSDK::AssetBuilderBus::Broadcast( + &AssetBuilderSDK::AssetBuilderBusTraits::RegisterBuilderInformation, builderDesc); + } + + void HairAssetBuilder::ShutDown() + { + m_isShuttingDown = true; + } + + void HairAssetBuilder::CreateJobs( + const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response) + { + if (m_isShuttingDown) + { + response.m_result = AssetBuilderSDK::CreateJobsResultCode::ShuttingDown; + return; + } + + for (const AssetBuilderSDK::PlatformInfo& info : request.m_enabledPlatforms) + { + AssetBuilderSDK::JobDescriptor descriptor; + descriptor.m_jobKey = AMD::TFXFileExtension; + descriptor.m_critical = false; + descriptor.SetPlatformIdentifier(info.m_identifier.c_str()); + response.m_createJobOutputs.push_back(descriptor); + } + + // Set the tfx bone and tfx mesh file as source dependency. This way when tfxbone or tfxmesh file reloaded it will + // also trigger the rebuild of the hair asset. + AssetBuilderSDK::SourceFileDependency sourceFileDependency; + sourceFileDependency.m_sourceFileDependencyPath = request.m_sourceFile; + AZ::StringFunc::Path::ReplaceExtension(sourceFileDependency.m_sourceFileDependencyPath, AMD::TFXBoneFileExtension); + response.m_sourceFileDependencyList.push_back(sourceFileDependency); + + sourceFileDependency.m_sourceFileDependencyPath = request.m_sourceFile; + AZ::StringFunc::Path::ReplaceExtension(sourceFileDependency.m_sourceFileDependencyPath, AMD::TFXMeshFileExtension); + response.m_sourceFileDependencyList.push_back(sourceFileDependency); + + response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success; + } + + void HairAssetBuilder::ProcessJob( + const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response) + { + AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "HairAssetBuilder Starting Job for %s.\n", request.m_fullPath.c_str()); + + if (m_isShuttingDown) + { + AZ_TracePrintf( + AssetBuilderSDK::WarningWindow, "Cancelled job %s because shutdown was requested.\n", request.m_fullPath.c_str()); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Cancelled; + return; + } + + // There are 3 source files for TressFX asset - .tfx, .tfxbone and .tfxmesh. + // We read all the 3 source files and combine them to 1 output file .tfxhair in the cache. + AZStd::string tfxFileName; + AzFramework::StringFunc::Path::GetFullFileName(request.m_fullPath.c_str(), tfxFileName); + + // Create the path to the result .tfxhair file inside the tempDirPath. + AZStd::string destPath; + AzFramework::StringFunc::Path::ConstructFull(request.m_tempDirPath.c_str(), tfxFileName.c_str(), destPath, true); + AZ::StringFunc::Path::ReplaceExtension(destPath, AMD::TFXCombinedFileExtension); + + // Create and open the .tfxhair we are writing to. + AZ::IO::FileIOStream outStream(destPath.data(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeCreatePath); + if (!outStream.IsOpen()) + { + AZ_TracePrintf( + AssetBuilderSDK::ErrorWindow, "Error: Failed job %s because .tfxhair file cannot be created.\n", request.m_fullPath.c_str()); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Failed; + return; + } + + // Write the .tfxhair file header as a placeholder + AMD::TressFXCombinedHairFileHeader header; + outStream.Write(sizeof(AMD::TressFXCombinedHairFileHeader), &header); + + // Combine .tfx, .tfxbone, .tfxmesh file into .tfxhair file + auto writeToStream = [](const AZStd::string& fullpath, AZ::IO::FileIOStream& outStream, bool required) { + IO::FileIOStream inStream; + if (!inStream.Open(fullpath.c_str(), IO::OpenMode::ModeRead)) + { + if (required) + { + AZ_TracePrintf(AssetBuilderSDK::ErrorWindow, + "Error: Failed job %s because the file is either missing or cannot be opened.\n", fullpath.c_str()); + } + return (AZ::IO::SizeType)0; + } + const AZ::IO::SizeType dataSize = inStream.GetLength(); + AZStd::vector fileBuffer(dataSize); + inStream.Read(dataSize, fileBuffer.data()); + return outStream.Write(dataSize, fileBuffer.data()); + }; + + // Write .tfx file to the combined .tfxhair file. + AZStd::string sourcePath = request.m_fullPath; + const AZ::IO::SizeType tfxSize = writeToStream(sourcePath, outStream, true); + + // Move on to .tfxbone file. + AZ::StringFunc::Path::ReplaceExtension(sourcePath, AMD::TFXBoneFileExtension); + const AZ::IO::SizeType tfxBoneSize = writeToStream(sourcePath, outStream, true); + + // Move on to .tfxmesh file. + AZ::StringFunc::Path::ReplaceExtension(sourcePath, AMD::TFXMeshFileExtension); + writeToStream(sourcePath, outStream, false); + + if (tfxSize == 0 || tfxBoneSize == 0) + { + // Fail the job if the .tfx file or the .tfxbone file is missing. + AZ_TracePrintf(AssetBuilderSDK::ErrorWindow, + "Error: Failed job %s because tfxSize=%d or tfxBoneSize=%d.\n", + request.m_fullPath.c_str(), tfxSize, tfxBoneSize); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Failed; + return; + } + + // Write the header file with correct data + header.offsetTFX = sizeof(AMD::TressFXCombinedHairFileHeader); + header.offsetTFXBone = header.offsetTFX + tfxSize; + header.offsetTFXMesh = header.offsetTFXBone + tfxBoneSize; + outStream.Seek(0, AZ::IO::FileIOStream::SeekMode::ST_SEEK_BEGIN); + outStream.Write(sizeof(AMD::TressFXCombinedHairFileHeader), &header); + + // Send the .tfxhair as the final job product product. + AssetBuilderSDK::JobProduct jobProduct(destPath, azrtti_typeid(), 0); + jobProduct.m_dependenciesHandled = true; + response.m_outputProducts.push_back(jobProduct); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success; + + AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "HairAssetBuilder successfully finished Job for %s.\n", request.m_fullPath.c_str()); + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.h b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.h new file mode 100644 index 0000000000..1af2261a60 --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairAssetBuilder final + : public AssetBuilderSDK::AssetBuilderCommandBus::Handler + { + public: + AZ_RTTI(AnimGraphBuilderWorker, "{7D77A133-115E-4A14-860D-C1DB9422C190}"); + + void RegisterBuilder(); + + //! AssetBuilderSDK::AssetBuilderCommandBus interface + void ShutDown() override; + + void CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response); + + void ProcessJob(const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response); + + private: + bool m_isShuttingDown = false; + }; + } + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.cpp b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.cpp new file mode 100644 index 0000000000..f80261f4b5 --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void HairBuilderComponent::Reflect(ReflectContext* context) + { + if (SerializeContext* serialize = azrtti_cast(context)) + { + serialize->Class() + ->Version(1)->Attribute( + AZ::Edit::Attributes::SystemComponentTags, + AZStd::vector({AssetBuilderSDK::ComponentTags::AssetBuilder})); + ; + } + } + + void HairBuilderComponent::GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("HairBuilderService")); + } + + void HairBuilderComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("HairBuilderService")); + } + + void HairBuilderComponent::Activate() + { + m_hairAssetBuilder.RegisterBuilder(); + m_hairAssetHandler.Register(); + + // Add asset types and extensions to AssetCatalog. + auto assetCatalog = AZ::Data::AssetCatalogRequestBus::FindFirstHandler(); + if (assetCatalog) + { + assetCatalog->EnableCatalogForAsset(azrtti_typeid()); + assetCatalog->AddExtension(AMD::TFXCombinedFileExtension); + } + } + + void HairBuilderComponent::Deactivate() + { + m_hairAssetBuilder.BusDisconnect(); + m_hairAssetHandler.Unregister(); + } + } // namespace Hair + } // End Render namespace +} // End AZ namespace + diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.h b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.h new file mode 100644 index 0000000000..fb5e7c20ad --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairBuilderComponent final + : public Component + { + public: + AZ_COMPONENT(HairBuilderComponent, "{88233F79-98DA-4DC6-A60B-0405BD810479}"); + HairBuilderComponent() = default; + ~HairBuilderComponent() = default; + + static void Reflect(ReflectContext* context); + + static void GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided); + static void GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible); + + private: + HairBuilderComponent(const HairBuilderComponent&) = delete; + + //////////////////////////////////////////////////////////////////////// + // Component interface implementation + void Activate() override; + void Deactivate() override; + //////////////////////////////////////////////////////////////////////// + + HairAssetBuilder m_hairAssetBuilder; + HairAssetHandler m_hairAssetHandler; + }; + } // namespace Hair + } // End Render namespace +} // End AZ namespace diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderModule.cpp b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.cpp new file mode 100644 index 0000000000..3be0d53e0a --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairBuilderModule::HairBuilderModule() + : AZ::Module() + { + m_descriptors.push_back(HairBuilderComponent::CreateDescriptor()); + } + + AZ::ComponentTypeList HairBuilderModule::GetRequiredSystemComponents() const + { + return AZ::ComponentTypeList{azrtti_typeid()}; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderModule.h b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.h new file mode 100644 index 0000000000..ef90d88bcf --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairBuilderModule : public AZ::Module + { + public: + AZ_RTTI(HairBuilderModule, "{44440BE8-48AC-46AA-9643-2BD866709E27}", AZ::Module); + AZ_CLASS_ALLOCATOR(HairBuilderModule, AZ::SystemAllocator, 0); + + HairBuilderModule(); + + //! Add required SystemComponents to the SystemEntity. + AZ::ComponentTypeList GetRequiredSystemComponents() const override; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ + +AZ_DECLARE_MODULE_CLASS(Gem_AtomTressFX_Builder, AZ::Render::Hair::HairBuilderModule) diff --git a/Gems/AtomTressFX/Code/Components/EditorHairComponent.cpp b/Gems/AtomTressFX/Code/Components/EditorHairComponent.cpp new file mode 100644 index 0000000000..9271400d2b --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/EditorHairComponent.cpp @@ -0,0 +1,149 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#if defined (ATOMTRESSFX_EDITOR) + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void EditorHairComponent::Reflect(AZ::ReflectContext* context) + { + BaseClass::Reflect(context); + + if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(1); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class( + "Atom Hair", "Controls Hair Properties") + ->ClassElement(Edit::ClassElements::EditorData, "") + ->Attribute(Edit::Attributes::Category, "Atom") + ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/Component_Placeholder.svg") + ->Attribute(AZ::Edit::Attributes::ViewportIcon, "editor/icons/components/viewport/component_placeholder.png") + ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) + ->Attribute(Edit::Attributes::AutoExpand, true) + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/gems/reference/rendering/amd/atom-tressfx/") + ; + + editContext->Class( + "HairComponentController", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + ->DataElement(AZ::Edit::UIHandlers::Default, &HairComponentController::m_configuration, "Configuration", "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ; + + editContext->Class( + "HairComponentConfig", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->DataElement( + AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_hairAsset, "Hair Asset", + "TressFX asset to be assigned to this entity.") + ->DataElement( + AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_simulationSettings, "TressFX Sim Settings", + "TressFX simulation settings to be applied on this entity.") + ->DataElement( + AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_renderingSettings, "TressFX Render Settings", + "TressFX rendering settings to be applied on this entity.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_hairGlobalSettings) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HairComponentConfig::OnHairGlobalSettingsChanged) + ; + } + } + + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class()->RequestBus("HairRequestsBus"); + + behaviorContext->ConstantProperty("EditorHairComponentTypeId", BehaviorConstant(Uuid(Hair::EditorHairComponentTypeId))) + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); + } + } + + EditorHairComponent::EditorHairComponent(const HairComponentConfig& config) + : BaseClass(config) + { + m_prevHairAssetId = config.m_hairAsset.GetId(); + } + + void EditorHairComponent::Activate() + { + BaseClass::Activate(); + AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(GetEntityId()); + } + + void EditorHairComponent::Deactivate() + { + BaseClass::Deactivate(); + AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); + } + + u32 EditorHairComponent::OnConfigurationChanged() + { + // Since any of the hair config and hair asset change will trigger this call, we use the prev loaded hair assetId + // to check which config actually got changed. + // This is because an asset change is a heavy operation and we don't want to trigger that when it's not needed. + if (m_prevHairAssetId == m_controller.GetConfiguration().m_hairAsset.GetId()) + { + m_controller.OnHairConfigChanged(); + } + else + { + m_controller.OnHairAssetChanged(); + m_prevHairAssetId = m_controller.GetConfiguration().m_hairAsset.GetId(); + } + return Edit::PropertyRefreshLevels::AttributesAndValues; + } + + void EditorHairComponent::DisplayEntityViewport( + [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) + { + // Only render debug information when selected. + if (!IsSelected()) + { + return; + } + + // Only render debug information after render object got created. + if (!m_controller.m_renderObject) + { + return; + } + + float x = 40.0; + float y = 20.0f; + float size = 1.00f; + bool center = false; + + AZStd::string debugString = AZStd::string::format( + "Hair component stats:\n" + " Total number of hairs: %d\n" + " Total number of guide hairs: %d\n" + " Amount of follow hair per guide hair: %d\n", + m_controller.m_renderObject->GetNumTotalHairStrands(), + m_controller.m_renderObject->GetNumGuideHairs(), + m_controller.m_renderObject->GetNumFollowHairsPerGuideHair()); + + debugDisplay.Draw2dTextLabel(x, y, size, debugString.c_str(), center); + } + } // namespace Hair + } // namespace Render +} // namespace AZ + +#endif // ATOMTRESSFX_EDITOR diff --git a/Gems/AtomTressFX/Code/Components/EditorHairComponent.h b/Gems/AtomTressFX/Code/Components/EditorHairComponent.h new file mode 100644 index 0000000000..7af5f5ebaa --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/EditorHairComponent.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if defined (ATOMTRESSFX_EDITOR) + +#include +#include + +#include +#include +#include + + +namespace AZ +{ + namespace Render + { + namespace Hair + { + //! Visual editor representation of the hair that can be created for an entity + //! that have an Actor component. + //! The config data itself is held by the 'HairComponentConfig' that reflects the 'TressFXSettings' + //! and by the 'HairGlobalSettings' that mainly controls the shader options. + //! The hair data is held by the 'HairRenderObject' and the connection between the component + //! and the handling of the data is done by the 'HairComponentController'. + static constexpr const char* const EditorHairComponentTypeId = + "{822A8253-4662-41B1-8623-7B2D047A4D68}"; + + class EditorHairComponent final + : public AzToolsFramework::Components::EditorComponentAdapter + , private AzFramework::EntityDebugDisplayEventBus::Handler + { + public: + + using BaseClass = AzToolsFramework::Components::EditorComponentAdapter; + AZ_EDITOR_COMPONENT(AZ::Render::Hair::EditorHairComponent, Hair::EditorHairComponentTypeId, BaseClass); + + static void Reflect(AZ::ReflectContext* context); + + EditorHairComponent() = default; + EditorHairComponent(const HairComponentConfig& config); + + void Activate() override; + void Deactivate() override; + + // AzFramework::DebugDisplayRequestBus::Handler interface + void DisplayEntityViewport( + const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) override; + private: + + //! EditorRenderComponentAdapter overrides... + AZ::u32 OnConfigurationChanged() override; + + Data::AssetId m_prevHairAssetId; // Previous loaded hair asset id. + }; + } // namespace Hair + } // namespace Render +} // namespace AZ + +#endif // ATOMTRESSFX_EDITOR diff --git a/Gems/AtomTressFX/Code/Components/HairBus.h b/Gems/AtomTressFX/Code/Components/HairBus.h new file mode 100644 index 0000000000..bf713c2638 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairBus.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + class HairRequests + : public ComponentBus + { + public: + AZ_RTTI(AZ::Render::HairRequests, "{923D6B94-C6AD-4B03-B8CC-DB7E708FB9F4}"); + + /// Overrides the default AZ::EBusTraits handler policy to allow one listener only. + static const EBusHandlerPolicy HandlerPolicy = EBusHandlerPolicy::Single; + virtual ~HairRequests() {} + + // Add required getter and setter functions - matching the interface methods + }; + + typedef AZ::EBus HairRequestsBus; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponent.cpp b/Gems/AtomTressFX/Code/Components/HairComponent.cpp new file mode 100644 index 0000000000..920b349ae4 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponent.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include + +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairComponent::HairComponent(const HairComponentConfig& config) + : BaseClass(config) + { + } + + HairComponent::~HairComponent() + { + } + + void HairComponent::Reflect(AZ::ReflectContext* context) + { + BaseClass::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class(); + } + + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class()->RequestBus("HairRequestsBus"); + + behaviorContext->ConstantProperty("HairComponentTypeId", BehaviorConstant(Uuid(Hair::HairComponentTypeId))) + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common); + } + } + + void HairComponent::Activate() + { + BaseClass::Activate(); + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + + diff --git a/Gems/AtomTressFX/Code/Components/HairComponent.h b/Gems/AtomTressFX/Code/Components/HairComponent.h new file mode 100644 index 0000000000..6fd8555712 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponent.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +// Hair specific +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairRenderObject; + + static constexpr const char* const HairComponentTypeId = "{9556883B-6F3C-4010-BB3F-EBB480515D68}"; + + //! Parallel to the 'EditorHairComponent' this class is used in game mode. + class HairComponent final + : public AzFramework::Components::ComponentAdapter + { + public: + using BaseClass = AzFramework::Components::ComponentAdapter; + AZ_COMPONENT(AZ::Render::Hair::HairComponent, Hair::HairComponentTypeId, BaseClass); + + HairComponent() = default; + HairComponent(const HairComponentConfig& config); + ~HairComponent(); + + static void Reflect(AZ::ReflectContext* context); + + void Activate() override; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponentConfig.cpp b/Gems/AtomTressFX/Code/Components/HairComponentConfig.cpp new file mode 100644 index 0000000000..3fa98ce95d --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentConfig.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + void HairComponentConfig::Reflect(ReflectContext* context) + { + AMD::TressFXSimulationSettings::Reflect(context); + AMD::TressFXRenderingSettings::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(4) + ->Field("HairAsset", &HairComponentConfig::m_hairAsset) + ->Field("SimulationSettings", &HairComponentConfig::m_simulationSettings) + ->Field("RenderingSettings", &HairComponentConfig::m_renderingSettings) + ->Field("HairGlobalSettings", &HairComponentConfig::m_hairGlobalSettings) + ; + } + } + + void HairComponentConfig::OnHairGlobalSettingsChanged() + { + HairGlobalSettingsRequestBus::Broadcast(&HairGlobalSettingsRequests::SetHairGlobalSettings, m_hairGlobalSettings); + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Components/HairComponentConfig.h b/Gems/AtomTressFX/Code/Components/HairComponentConfig.h new file mode 100644 index 0000000000..8f0fe5ed66 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentConfig.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + class EditorHairComponent; + + //! Reflects the TressFX settings and configuration data of the current hair object. + class HairComponentConfig final : + public ComponentConfig + { + friend class EditorHairComponent; + + public: + AZ_RTTI(AZ::Render::HairComponentConfig, "{AF2C2F26-0C01-4EAD-A81C-4304BD751EDF}", AZ::ComponentConfig); + + static void Reflect(ReflectContext* context); + + void OnHairGlobalSettingsChanged(); + + void SetEnabled(bool value) + { + m_enabled = value; + } + bool GetIsEnabled() + { + return m_enabled; + } + + // TressFX settings + AMD::TressFXSimulationSettings m_simulationSettings; + AMD::TressFXRenderingSettings m_renderingSettings; + + Data::Asset m_hairAsset; + HairGlobalSettings m_hairGlobalSettings; + + private: + bool m_enabled = true; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponentController.cpp b/Gems/AtomTressFX/Code/Components/HairComponentController.cpp new file mode 100644 index 0000000000..7097c48f14 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentController.cpp @@ -0,0 +1,374 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include + +#include + +#include +#include +#include +#include + +// Hair Specific +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairComponentController::~HairComponentController() + { + RemoveHairObject(); + } + + void HairComponentController::Reflect(ReflectContext* context) + { + HairComponentConfig::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(2) + ->Field("Configuration", &HairComponentController::m_configuration) + ; + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("HairRequestsBus") + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + + // Insert auto-gen behavior context here... + ; + } + } + + void HairComponentController::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("HairService")); + } + + void HairComponentController::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("HairService")); + } + + void HairComponentController::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required) + { + // Dependency in the Actor due to the need to get the bone / joint matrices + required.push_back(AZ_CRC_CE("EMotionFXActorService")); + } + + HairComponentController::HairComponentController(const HairComponentConfig& config) + : m_configuration(config) + { + } + + + void HairComponentController::Activate(EntityId entityId) + { + m_entityId = entityId; + + m_featureProcessor = RPI::Scene::GetFeatureProcessorForEntity(m_entityId); + if (m_featureProcessor) + { + m_featureProcessor->SetHairGlobalSettings(m_configuration.m_hairGlobalSettings); + if (!m_renderObject) + { + // Call this function if object doesn't exist to trigger the load of the existing asset + OnHairAssetChanged(); + } + } + + EMotionFX::Integration::ActorComponentNotificationBus::Handler::BusConnect(m_entityId); + HairRequestsBus::Handler::BusConnect(m_entityId); + TickBus::Handler::BusConnect(); + HairGlobalSettingsNotificationBus::Handler::BusConnect(); + } + + void HairComponentController::Deactivate() + { + HairRequestsBus::Handler::BusDisconnect(m_entityId); + EMotionFX::Integration::ActorComponentNotificationBus::Handler::BusDisconnect(m_entityId); + Data::AssetBus::MultiHandler::BusDisconnect(); + TickBus::Handler::BusDisconnect(); + HairGlobalSettingsNotificationBus::Handler::BusDisconnect(); + + RemoveHairObject(); + m_entityId.SetInvalid(); + } + + void HairComponentController::SetConfiguration(const HairComponentConfig& config) + { + m_configuration = config; + OnHairConfigChanged(); + } + + const HairComponentConfig& HairComponentController::GetConfiguration() const + { + return m_configuration; + } + + void HairComponentController::OnHairAssetChanged() + { + Data::AssetBus::MultiHandler::BusDisconnect(); + if (m_configuration.m_hairAsset.GetId().IsValid()) + { + Data::AssetBus::MultiHandler::BusConnect(m_configuration.m_hairAsset.GetId()); + m_configuration.m_hairAsset.QueueLoad(); + } + else + { + RemoveHairObject(); + } + } + + void HairComponentController::OnHairGlobalSettingsChanged(const HairGlobalSettings& hairGlobalSettings) + { + m_configuration.m_hairGlobalSettings = hairGlobalSettings; + } + + void HairComponentController::RemoveHairObject() + { + if (m_featureProcessor) + { + m_featureProcessor->RemoveHairRenderObject(m_renderObject); + } + m_renderObject.reset(); + } + + void HairComponentController::OnHairConfigChanged() + { + // The actual config change to render object happens in the onTick function. We do this to make sure it + // always happens pre-rendering. There is no need to do it before render object created, because the object + // will always be created with the updated configuration. + if (m_renderObject) + { + m_configChanged = true; + } + } + + void HairComponentController::OnAssetReady(Data::Asset asset) + { + if (asset.GetId() == m_configuration.m_hairAsset.GetId()) + { + m_configuration.m_hairAsset = asset; + CreateHairObject(); + } + } + + void HairComponentController::OnAssetReloaded(Data::Asset asset) + { + OnAssetReady(asset); + } + + void HairComponentController::OnActorInstanceCreated([[maybe_unused]]EMotionFX::ActorInstance* actorInstance) + { + CreateHairObject(); + } + + void HairComponentController::OnActorInstanceDestroyed([[maybe_unused]]EMotionFX::ActorInstance* actorInstance) + { + RemoveHairObject(); + } + + void HairComponentController::OnTick([[maybe_unused]]float deltaTime, [[maybe_unused]]AZ::ScriptTimePoint time) + { + if (!m_renderObject) + { + return; + } + + // Config change to renderObject happens on the OnTick, so we know the it occurs before render update. + if (m_configChanged) + { + const float MAX_SIMULATION_TIME_STEP = 0.033f; // Assuming minimal of 30 fps + float currentDeltaTime = AZStd::min(deltaTime, MAX_SIMULATION_TIME_STEP); + m_renderObject->UpdateSimulationParameters(&m_configuration.m_simulationSettings, currentDeltaTime); + + // [To Do] Hair - Allow update of the following settings to control dynamic LOD + const float distanceFromCamera = 1.0f; + const float updateShadows = false; + m_renderObject->UpdateRenderingParameters( + &m_configuration.m_renderingSettings, RESERVED_PIXELS_FOR_OIT, distanceFromCamera, updateShadows); + m_configChanged = false; + + // Only load the image asset when the dirty flag has been set on the settings. + if (m_configuration.m_renderingSettings.m_imgDirty) + { + m_renderObject->LoadImageAsset(&m_configuration.m_renderingSettings); + m_configuration.m_renderingSettings.m_imgDirty = false; + } + } + + // Update the enable flag for hair render object + // The enable flag depends on the visibility of render actor instance and the flag of hair configuration. + bool actorVisible = false; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorVisible, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetRenderActorVisible); + m_renderObject->SetEnabled(actorVisible); + + UpdateActorMatrices(); + } + + int HairComponentController::GetTickOrder() + { + return AZ::TICK_PRE_RENDER; + } + + bool HairComponentController::UpdateActorMatrices() + { + if (!m_renderObject->IsEnabled()) + { + return false; + } + + EMotionFX::ActorInstance* actorInstance = nullptr; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); + if (!actorInstance) + { + return false; + } + + const EMotionFX::TransformData* transformData = actorInstance->GetTransformData(); + if (!transformData) + { + AZ_WarningOnce("Hair Gem", false, "Error getting the transformData from the actorInstance."); + return false; + } + + // In EMotionFX the skinning matrices is stored as a 3x4. The conversion to 4x4 matrices happens at the update bone matrices function. + // In here we use the boneIndexMap to find the correct EMotionFX bone index (also as the global bone index), and passing the + // matrices of those bones to the hair render object. We do this for both hair and collision bone matrices. + const AZ::Matrix3x4* matrices = transformData->GetSkinningMatrices(); + for (AZ::u32 tressFXBoneIndex = 0; tressFXBoneIndex < m_cachedHairBoneMatrices.size(); ++tressFXBoneIndex) + { + const AZ::u32 emfxBoneIndex = m_hairBoneIndexLookup[tressFXBoneIndex]; + m_cachedHairBoneMatrices[tressFXBoneIndex] = matrices[emfxBoneIndex]; + } + for (AZ::u32 tressFXBoneIndex = 0; tressFXBoneIndex < m_cachedCollisionBoneMatrices.size(); ++tressFXBoneIndex) + { + const AZ::u32 emfxBoneIndex = m_collisionBoneIndexLookup[tressFXBoneIndex]; + m_cachedCollisionBoneMatrices[tressFXBoneIndex] = matrices[emfxBoneIndex]; + } + + m_entityWorldMatrix = Matrix3x4::CreateFromTransform(actorInstance->GetWorldSpaceTransform().ToAZTransform()); + m_renderObject->UpdateBoneMatrices(m_entityWorldMatrix, m_cachedHairBoneMatrices); + return true; + } + + bool HairComponentController::GenerateLocalToGlobalBoneIndex( + EMotionFX::ActorInstance* actorInstance, AMD::TressFXAsset* hairAsset) + { + // Generate local TressFX to global EMFX bone index lookup. + AMD::BoneNameToIndexMap globalNameToIndexMap; + const EMotionFX::Skeleton* skeleton = actorInstance->GetActor()->GetSkeleton(); + if (!skeleton) + { + AZ_Error("Hair Gem", false, "Actor could not retrieve his skeleton."); + return false; + } + + const uint32_t numBones = uint32_t(skeleton->GetNumNodes()); + globalNameToIndexMap.reserve(size_t(numBones)); + for (uint32_t i = 0; i < numBones; ++i) + { + const char* boneName = skeleton->GetNode(i)->GetName(); + globalNameToIndexMap[boneName] = i; + } + + if (!hairAsset->GenerateLocaltoGlobalHairBoneIndexLookup(globalNameToIndexMap, m_hairBoneIndexLookup) || + !hairAsset->GenerateLocaltoGlobalCollisionBoneIndexLookup(globalNameToIndexMap, m_collisionBoneIndexLookup)) + { + AZ_Error("Hair Gem", false, "Cannot convert local bone index to global bone index. The hair asset may not be compatible with the actor."); + return false; + } + + return true; + } + + // The hair object will only be created if both conditions are met: + // 1. The hair asset is loaded + // 2. The actor instance is created + bool HairComponentController::CreateHairObject() + { + // Do not create a hairRenderObject when actor instance hasn't been created. + EMotionFX::ActorInstance* actorInstance = nullptr; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); + + if (!actorInstance) + { + return false; + } + + if (!m_featureProcessor) + { + AZ_Error("Hair Gem", false, "Required feature processor does not exist yet"); + return false; + } + + if (!m_configuration.m_hairAsset.GetId().IsValid() || !m_configuration.m_hairAsset.IsReady()) + { + AZ_Warning("Hair Gem", false, "Hair Asset was not ready - second attempt will be made when ready"); + return false; + } + + AMD::TressFXAsset* hairAsset = m_configuration.m_hairAsset.Get()->m_tressFXAsset.get(); + if (!hairAsset) + { + AZ_Error("Hair Gem", false, "Hair asset could not be loaded"); + return false; + } + + if (!GenerateLocalToGlobalBoneIndex(actorInstance, hairAsset)) + { + return false; + } + + // First remove the existing hair object - this can happen if the configuration + // or the hair asset selected changes. + RemoveHairObject(); + + // create a new instance - will remove the old one. + m_renderObject.reset(new HairRenderObject()); + AZStd::string hairName; + AzFramework::StringFunc::Path::GetFileName(m_configuration.m_hairAsset.GetHint().c_str(), hairName); + if (!m_renderObject->Init( m_featureProcessor, hairName.c_str(), hairAsset, + &m_configuration.m_simulationSettings, &m_configuration.m_renderingSettings)) + { + AZ_Warning("Hair Gem", false, "Hair object was not initialize succesfully"); + m_renderObject.reset(); // no instancing yet - remove manually + return false; + } + + // Resize the bone matrices array. The size should equal to the number of bones in the tressFXAsset. + m_cachedHairBoneMatrices.resize(m_hairBoneIndexLookup.size()); + m_cachedCollisionBoneMatrices.resize(m_collisionBoneIndexLookup.size()); + + // Feature processor registration that will hold an instance. + // Remark: DO NOT remove the TressFX asset - it's data might be required for + // more instance hair objects. + m_featureProcessor->AddHairRenderObject(m_renderObject); + return true; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponentController.h b/Gems/AtomTressFX/Code/Components/HairComponentController.h new file mode 100644 index 0000000000..9520a28f57 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentController.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include +#include + +// Hair specific +#include +#include +#include +#include + +// EMotionFX +#include + +namespace AMD +{ + class TressFXSimulationSettings; + class TressFXRenderingSettings; + class TressFXAsset; +} + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairFeatureProcessor; + + //! This is the controller class for both EditorComponent and in game Component. + //! It is responsible for the creation and activation of the hair object itself + //! and the update and synchronization of any changed configuration. + //! It also responsible to the connection with the entity's Actor to whom the hair + //! is associated and gets the skinning matrices and visibility. + class HairComponentController final + : public HairRequestsBus::Handler + , public HairGlobalSettingsNotificationBus::Handler + , private AZ::Data::AssetBus::MultiHandler + , private AZ::TickBus::Handler + , private EMotionFX::Integration::ActorComponentNotificationBus::Handler + { + public: + friend class EditorHairComponent; + + AZ_TYPE_INFO(AZ::Render::HairComponentController, "{81D3EA93-7EAC-44B7-B8CB-0B573DD8D634}"); + static void Reflect(AZ::ReflectContext* context); + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required); + + HairComponentController() = default; + HairComponentController(const HairComponentConfig& config); + ~HairComponentController(); + + void Activate(EntityId entityId); + void Deactivate(); + void SetConfiguration(const HairComponentConfig& config); + const HairComponentConfig& GetConfiguration() const; + + HairFeatureProcessor* GetFeatureProcessor() { return m_featureProcessor; } + + private: + AZ_DISABLE_COPY(HairComponentController); + + void OnHairConfigChanged(); + void OnHairAssetChanged(); + + // AZ::Render::Hair::HairGlobalSettingsNotificationBus Overrides + void OnHairGlobalSettingsChanged(const HairGlobalSettings& hairGlobalSettings) override; + + // AZ::Data::AssetBus::Handler + void OnAssetReady(AZ::Data::Asset asset) override; + void OnAssetReloaded(AZ::Data::Asset asset) override; + + // EMotionFX::Integration::ActorComponentNotificationBus::Handler + void OnActorInstanceCreated(EMotionFX::ActorInstance* actorInstance) override; + void OnActorInstanceDestroyed(EMotionFX::ActorInstance* actorInstance) override; + + // AZ::TickBus::Handler + void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; + int GetTickOrder() override; + + bool GenerateLocalToGlobalBoneIndex( EMotionFX::ActorInstance* actorInstance, AMD::TressFXAsset* hairAsset); + + bool CreateHairObject(); + void RemoveHairObject(); + + // Extract actor matrix from the actor instance. + bool UpdateActorMatrices(); + + HairFeatureProcessor* m_featureProcessor = nullptr; + + bool m_configChanged = false; // Flag used to defer the configuration change to onTick. + HairComponentConfig m_configuration; // Settings per hair component + + //! Hair render object for connecting to the skeleton and connecting to the feature processor. + Data::Instance m_renderObject; // unique to this component - this is the data source. + + EntityId m_entityId; + + // Store a cache of the bone index lookup we generated during the creation of hair object. + AMD::LocalToGlobalBoneIndexLookup m_hairBoneIndexLookup; + AMD::LocalToGlobalBoneIndexLookup m_collisionBoneIndexLookup; + + // Cache the bone matrices array to avoid frequent allocation. + AZStd::vector m_cachedHairBoneMatrices; + AZStd::vector m_cachedCollisionBoneMatrices; + + AZ::Matrix3x4 m_entityWorldMatrix; + }; + } // namespace Hair + } +} diff --git a/Gems/AtomTressFX/Code/Components/HairSystemComponent.cpp b/Gems/AtomTressFX/Code/Components/HairSystemComponent.cpp new file mode 100644 index 0000000000..66ac3d2e09 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairSystemComponent.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include + +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairSystemComponent::HairSystemComponent() = default; + HairSystemComponent::~HairSystemComponent() = default; + + void HairSystemComponent::Reflect(ReflectContext* context) + { + if (SerializeContext* serialize = azrtti_cast(context)) + { + serialize->Class() + ->Version(0) + ; + } + + Hair::HairFeatureProcessor::Reflect(context); + } + + void HairSystemComponent::GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("HairService")); + } + + void HairSystemComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("HairService")); + } + + void HairSystemComponent::GetRequiredServices([[maybe_unused]] ComponentDescriptor::DependencyArrayType& required) + { + required.push_back(AZ_CRC("ActorSystemService", 0x5e493d6c)); + required.push_back(AZ_CRC("EMotionFXAnimationService", 0x3f8a6369)); + } + + void HairSystemComponent::LoadPassTemplateMappings() + { + auto* passSystem = RPI::PassSystemInterface::Get(); + AZ_Assert(passSystem, "Cannot get the pass system."); + + const char* passTemplatesFile = "Passes/AtomTressFX_PassTemplates.azasset"; + passSystem->LoadPassTemplateMappings(passTemplatesFile); + } + + void HairSystemComponent::Init() + { + } + + void HairSystemComponent::Activate() + { + // Feature processor + AZ::RPI::FeatureProcessorFactory::Get()->RegisterFeatureProcessor(); + + auto* passSystem = RPI::PassSystemInterface::Get(); + AZ_Assert(passSystem, "Cannot get the pass system."); + + // Setup handler for load pass templates mappings + m_loadTemplatesHandler = RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler([this]() { this->LoadPassTemplateMappings(); }); + passSystem->ConnectEvent(m_loadTemplatesHandler); + + // Load the AtomTressFX pass classes + passSystem->AddPassCreator(Name("HairSkinningComputePass"), &HairSkinningComputePass::Create); + passSystem->AddPassCreator(Name("HairPPLLRasterPass"), &HairPPLLRasterPass::Create); + passSystem->AddPassCreator(Name("HairPPLLResolvePass"), &HairPPLLResolvePass::Create); + } + + void HairSystemComponent::Deactivate() + { + AZ::RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); + m_loadTemplatesHandler.Disconnect(); + } + } // namespace Hair + } // End Render namespace +} // End AZ namespace + diff --git a/Gems/AtomTressFX/Code/Components/HairSystemComponent.h b/Gems/AtomTressFX/Code/Components/HairSystemComponent.h new file mode 100644 index 0000000000..16ba0f5bae --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairSystemComponent.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + class SharedBuffer; + + namespace Hair + { + class HairSystemComponent final + : public Component + { + public: + AZ_COMPONENT(HairSystemComponent, "{F3A56326-1D2F-462D-A9E8-0405A76601A5}"); + + HairSystemComponent(); + ~HairSystemComponent(); + + static void Reflect(ReflectContext* context); + + static void GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided); + static void GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible); + static void GetRequiredServices(ComponentDescriptor::DependencyArrayType& required); + + private: + //! Loads the pass templates mapping file + void LoadPassTemplateMappings(); + + //////////////////////////////////////////////////////////////////////// + // Component interface implementation + void Init() override; + void Activate() override; + void Deactivate() override; + //////////////////////////////////////////////////////////////////////// + + //! Used for loading the pass templates of the hair gem. + RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler m_loadTemplatesHandler; + }; + } // namespace Hair + } // End Render namespace +} // End AZ namespace diff --git a/Gems/AtomTressFX/Code/HairModule.cpp b/Gems/AtomTressFX/Code/HairModule.cpp new file mode 100644 index 0000000000..21b2d188b1 --- /dev/null +++ b/Gems/AtomTressFX/Code/HairModule.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#if defined (ATOMTRESSFX_EDITOR) + #include +#endif // ATOMTRESSFX_EDITOR + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairModule::HairModule() + : AZ::Module() + { + m_descriptors.insert( + m_descriptors.end(), + { + HairSystemComponent::CreateDescriptor(), + HairComponent::CreateDescriptor(), +#if defined (ATOMTRESSFX_EDITOR) + // Prevent adding editor component when editor and tools are not built + EditorHairComponent::CreateDescriptor(), +#endif // ATOMTRESSFX_EDITOR + }); + } + + AZ::ComponentTypeList HairModule::GetRequiredSystemComponents() const + { + // add required SystemComponents to the SystemEntity + return AZ::ComponentTypeList{ + azrtti_typeid() + }; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/HairModule.h b/Gems/AtomTressFX/Code/HairModule.h new file mode 100644 index 0000000000..416398d445 --- /dev/null +++ b/Gems/AtomTressFX/Code/HairModule.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairModule + : public AZ::Module + { + public: + AZ_RTTI(HairModule, "{0EF06CF0-8011-4668-A31F-A6851583EBDC}", AZ::Module); + AZ_CLASS_ALLOCATOR(HairModule, AZ::SystemAllocator, 0); + + HairModule(); + + //! Add required SystemComponents to the SystemEntity. + AZ::ComponentTypeList GetRequiredSystemComponents() const override; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ + +AZ_DECLARE_MODULE_CLASS(Gem_AtomTressFX, AZ::Render::Hair::HairModule) + diff --git a/Gems/AtomTressFX/Code/HairModuleUnsupported.cpp b/Gems/AtomTressFX/Code/HairModuleUnsupported.cpp new file mode 100644 index 0000000000..b3b5ea7c06 --- /dev/null +++ b/Gems/AtomTressFX/Code/HairModuleUnsupported.cpp @@ -0,0 +1,11 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +//AZ_DECLARE_MODULE_CLASS(Gem_AtomTressFX, AZ::Module) + diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.cpp b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.cpp new file mode 100644 index 0000000000..746a3c2640 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.cpp @@ -0,0 +1,320 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +//#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + // --- Creation & Initialization --- + RPI::Ptr HairPPLLRasterPass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew HairPPLLRasterPass(descriptor); + return pass; + } + + HairPPLLRasterPass::HairPPLLRasterPass(const RPI::PassDescriptor& descriptor) + : RasterPass(descriptor), + m_passDescriptor(descriptor) + { + } + + HairPPLLRasterPass::~HairPPLLRasterPass() + { + } + + bool HairPPLLRasterPass::AcquireFeatureProcessor() + { + if (m_featureProcessor) + { + return true; + } + + RPI::Scene* scene = GetScene(); + if (scene) + { + m_featureProcessor = scene->GetFeatureProcessor(); + } + else + { + return false; + } + + if (!m_featureProcessor) + { + AZ_Warning("Hair Gem", false, + "HairPPLLRasterPass [%s] - Failed to retrieve Hair feature processor from the scene", + GetName().GetCStr()); + return false; + } + return true; + } + + void HairPPLLRasterPass::InitializeInternal() + { + if (GetScene()) + { + RasterPass::InitializeInternal(); + } + } + + void HairPPLLRasterPass::BuildInternal() + { + RasterPass::BuildInternal(); + + if (!AcquireFeatureProcessor()) + { + return; + } + + if (!LoadShaderAndPipelineState()) + { + return; + } + + // Output + AttachBufferToSlot(Name{ "PerPixelLinkedList" }, m_featureProcessor->GetPerPixelListBuffer()); + } + + bool HairPPLLRasterPass::IsEnabled() const + { + return (RPI::RasterPass::IsEnabled() && m_initialized) ? true : false; + } + + bool HairPPLLRasterPass::LoadShaderAndPipelineState() + { + RPI::ShaderReloadNotificationBus::Handler::BusDisconnect(); + + const RPI::RasterPassData* passData = RPI::PassUtils::GetPassData(m_passDescriptor); + + // If we successfully retrieved our custom data, use it to set the DrawListTag + if (!passData) + { + AZ_Error("Hair Gem", false, "Missing pass raster data"); + return false; + } + + // Load Shader + const char* shaderFilePath = "Shaders/hairrenderingfillppll.azshader"; + Data::Asset shaderAsset = + RPI::AssetUtils::LoadAssetByProductPath(shaderFilePath, RPI::AssetUtils::TraceLevel::Error); + + if (!shaderAsset.GetId().IsValid()) + { + AZ_Error("Hair Gem", false, "Invalid shader asset for shader '%s'!", shaderFilePath); + return false; + } + + m_shader = RPI::Shader::FindOrCreate(shaderAsset); + if (m_shader == nullptr) + { + AZ_Error("Hair Gem", false, "Pass failed to load shader '%s'!", shaderFilePath); + return false; + } + + // Per Pass Srg + { + // Using 'PerPass' naming since currently RasterPass assumes that the pass Srg is always named 'PassSrg' + // [To Do] - RasterPass should use srg slot index and not name - currently this will + // result in a crash in one of the Atom existing MSAA passes that requires further dive. + // m_shaderResourceGroup = UtilityClass::CreateShaderResourceGroup(m_shader, "HairPerPassSrg", "Hair Gem"); + m_shaderResourceGroup = UtilityClass::CreateShaderResourceGroup(m_shader, "PassSrg", "Hair Gem"); + if (!m_shaderResourceGroup) + { + AZ_Error("Hair Gem", false, "Failed to create the per pass srg"); + return false; + } + } + + const RPI::ShaderVariant& shaderVariant = m_shader->GetVariant(RPI::ShaderAsset::RootShaderVariantStableId); + RHI::PipelineStateDescriptorForDraw pipelineStateDescriptor; + shaderVariant.ConfigurePipelineState(pipelineStateDescriptor); + + RPI::Scene* scene = GetScene(); + if (!scene) + { + AZ_Error("Hair Gem", false, "Scene could not be acquired" ); + return false; + } + RHI::DrawListTag drawListTag = m_shader->GetDrawListTag(); + scene->ConfigurePipelineState(drawListTag, pipelineStateDescriptor); + + pipelineStateDescriptor.m_renderAttachmentConfiguration = GetRenderAttachmentConfiguration(); + pipelineStateDescriptor.m_inputStreamLayout.SetTopology(AZ::RHI::PrimitiveTopology::TriangleList); + pipelineStateDescriptor.m_inputStreamLayout.Finalize(); + + m_pipelineState = m_shader->AcquirePipelineState(pipelineStateDescriptor); + if (!m_pipelineState) + { + AZ_Error("Hair Gem", false, "Pipeline state could not be acquired"); + return false; + } + + RPI::ShaderReloadNotificationBus::Handler::BusConnect(shaderAsset.GetId()); + + m_initialized = true; + return true; + } + + void HairPPLLRasterPass::SchedulePacketBuild(HairRenderObject* hairObject) + { + m_newRenderObjects.insert(hairObject); + } + + bool HairPPLLRasterPass::BuildDrawPacket(HairRenderObject* hairObject) + { + if (!m_initialized) + { + return false; + } + + RHI::DrawPacketBuilder::DrawRequest drawRequest; + drawRequest.m_listTag = m_drawListTag; + drawRequest.m_pipelineState = m_pipelineState; +// drawRequest.m_streamBufferViews = // no explicit vertex buffer. shader is using the srg buffers + drawRequest.m_stencilRef = 0; + drawRequest.m_sortKey = 0; + + // Seems that the PerView and PerScene are gathered through RenderPass::CollectSrgs() + // The PerPass is gathered through the RasterPass::m_shaderResourceGroup + AZStd::lock_guard lock(m_mutex); + + return hairObject->BuildPPLLDrawPacket(drawRequest); + } + + bool HairPPLLRasterPass::AddDrawPackets(AZStd::list>& hairRenderObjects) + { + bool overallSuccess = true; + + if (!m_currentView && + (!(m_currentView = GetView()) || !m_currentView->HasDrawListTag(m_drawListTag))) + { + m_currentView = nullptr; // set it to nullptr to prevent further attempts this frame + AZ_Warning("Hair Gem", false, "HairPPLLRasterPass failed to acquire or match the DrawListTag - check that your pass and shader tag name match"); + return false; + } + + for (auto& renderObject : hairRenderObjects) + { + const RHI::DrawPacket* drawPacket = renderObject->GetFillDrawPacket(); + if (!drawPacket) + { // might not be an error - the object might have just been added and the DrawPacket is + // scheduled to be built when the render frame begins + AZ_Warning("Hair Gem", !m_newRenderObjects.empty(), "HairPPLLRasterPass - DrawPacket wasn't built"); + overallSuccess = false; + continue; + } + + m_currentView->AddDrawPacket(drawPacket); + } + return overallSuccess; + } + + void HairPPLLRasterPass::FrameBeginInternal(FramePrepareParams params) + { + { + AZStd::lock_guard lock(m_mutex); + if (!m_initialized && AcquireFeatureProcessor()) + { + LoadShaderAndPipelineState(); + m_featureProcessor->ForceRebuildRenderData(); + } + } + + if (!m_initialized) + { + return; + } + + // Bind the Per Object resources and trigger the RHI validation that will use attachment + // for its validation. The attachments are invalidated outside the render begin/end frame. + for (HairRenderObject* newObject : m_newRenderObjects) + { + newObject->BindPerObjectSrgForRaster(); + BuildDrawPacket(newObject); + } + + // Clear the new added objects - BuildDrawPacket should only be carried out once per + // object/shader lifetime + m_newRenderObjects.clear(); + + // Refresh current view every frame + if (!(m_currentView = GetView()) || !m_currentView->HasDrawListTag(m_drawListTag)) + { + m_currentView = nullptr; // set it to null if view exists but no tag match + AZ_Warning("Hair Gem", false, "HairPPLLRasterPass failed to acquire or match the DrawListTag - check that your pass and shader tag name match"); + return; + } + + RPI::RasterPass::FrameBeginInternal(params); + } + + void HairPPLLRasterPass::CompileResources(const RHI::FrameGraphCompileContext& context) + { + AZ_PROFILE_FUNCTION(AzRender); + + if (!m_featureProcessor) + { + return; + } + + // Compilation of remaining srgs will be done by the parent class + RPI::RasterPass::CompileResources(context); + } + + void HairPPLLRasterPass::BuildShaderAndRenderData() + { + AZStd::lock_guard lock(m_mutex); + m_initialized = false; // make sure we initialize it even if not in this frame + if (AcquireFeatureProcessor()) + { + LoadShaderAndPipelineState(); + m_featureProcessor->ForceRebuildRenderData(); + } + } + + void HairPPLLRasterPass::OnShaderReinitialized([[maybe_unused]] const RPI::Shader & shader) + { + BuildShaderAndRenderData(); + } + + void HairPPLLRasterPass::OnShaderAssetReinitialized([[maybe_unused]] const Data::Asset& shaderAsset) + { + BuildShaderAndRenderData(); + } + + void HairPPLLRasterPass::OnShaderVariantReinitialized([[maybe_unused]] const AZ::RPI::ShaderVariant& shaderVariant) + { + BuildShaderAndRenderData(); + } + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.h b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.h new file mode 100644 index 0000000000..ef7167897f --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#include + +#include +#include +#include +#include + +namespace AZ +{ + namespace RHI + { + struct DrawItem; + } + + namespace Render + { + namespace Hair + { + class HairRenderObject; + class HairFeatureProcessor; + + //! A HairPPLLRasterPass is used for the hair fragments fill render after the data + //! went through the skinning and simulation passes. + //! The output of this pass is the general list of fragment data that can now be + //! traversed for depth resolve and lighting. + //! The Fill pass uses the following Srgs: + //! - PerPassSrg shared by all hair passes for the shared dynamic buffer and the PPLL buffers + //! - PerMaterialSrg - used solely by this pass to alter the vertices and apply the visual + //! hair properties to each fragment. + //! - HairDynamicDataSrg (PerObjectSrg) - shared buffers views for this hair object only. + //! - PerViewSrg and PerSceneSrg - as per the data from Atom. + class HairPPLLRasterPass + : public RPI::RasterPass + , private RPI::ShaderReloadNotificationBus::Handler + { + AZ_RPI_PASS(HairPPLLRasterPass); + + public: + AZ_RTTI(HairPPLLRasterPass, "{6614D7DD-24EE-4A2B-B314-7C035E2FB3C4}", RasterPass); + AZ_CLASS_ALLOCATOR(HairPPLLRasterPass, SystemAllocator, 0); + virtual ~HairPPLLRasterPass(); + + //! Creates a HairPPLLRasterPass + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + bool AddDrawPackets(AZStd::list>& hairObjects); + + //! The following will be called when an object was added or shader has been compiled + void SchedulePacketBuild(HairRenderObject* hairObject); + + Data::Instance GetShader() { return m_shader; } + + void SetFeatureProcessor(HairFeatureProcessor* featureProcessor) + { + m_featureProcessor = featureProcessor; + } + + virtual bool IsEnabled() const override; + protected: + // ShaderReloadNotificationBus::Handler overrides... + void OnShaderReinitialized(const RPI::Shader& shader) override; + void OnShaderAssetReinitialized(const Data::Asset& shaderAsset) override; + void OnShaderVariantReinitialized(const AZ::RPI::ShaderVariant& shaderVariant) override; + + private: + explicit HairPPLLRasterPass(const RPI::PassDescriptor& descriptor); + + bool LoadShaderAndPipelineState(); + bool AcquireFeatureProcessor(); + void BuildShaderAndRenderData(); + bool BuildDrawPacket(HairRenderObject* hairObject); + + // Pass behavior overrides + void InitializeInternal() override; + void BuildInternal() override; + void FrameBeginInternal(FramePrepareParams params) override; + + // Scope producer functions... + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + + private: + HairFeatureProcessor* m_featureProcessor = nullptr; + + // The shader that will be used by the pass + Data::Instance m_shader = nullptr; + + // To help create the pipeline state + RPI::PassDescriptor m_passDescriptor; + + const RHI::PipelineState* m_pipelineState = nullptr; + RPI::ViewPtr m_currentView = nullptr; + + AZStd::mutex m_mutex; + + //! List of new render objects introduced this frame so that their + //! Per Object (dynamic) Srg should be bound to the resources. + //! Done once per every new object introduced / requires update. + AZStd::unordered_set m_newRenderObjects; + + bool m_initialized = false; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp new file mode 100644 index 0000000000..fa643a5488 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp @@ -0,0 +1,141 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + HairPPLLResolvePass::HairPPLLResolvePass(const RPI::PassDescriptor& descriptor) + : RPI::FullscreenTrianglePass(descriptor) + { + } + + void HairPPLLResolvePass::UpdateGlobalShaderOptions() + { + RPI::ShaderOptionGroup shaderOption = m_shader->CreateShaderOptionGroup(); + + m_featureProcessor->GetHairGlobalSettings(m_hairGlobalSettings); + + shaderOption.SetValue(AZ::Name("o_enableShadows"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableShadows }); + shaderOption.SetValue(AZ::Name("o_enableDirectionalLights"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableDirectionalLights }); + shaderOption.SetValue(AZ::Name("o_enablePunctualLights"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enablePunctualLights }); + shaderOption.SetValue(AZ::Name("o_enableAreaLights"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableAreaLights }); + shaderOption.SetValue(AZ::Name("o_enableIBL"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableIBL }); + shaderOption.SetValue(AZ::Name("o_hairLightingModel"), AZ::Name{ "HairLightingModel::" + AZStd::string(HairLightingModelNamespace::ToString(m_hairGlobalSettings.m_hairLightingModel)) }); + shaderOption.SetValue(AZ::Name("o_enableMarschner_R"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_R }); + shaderOption.SetValue(AZ::Name("o_enableMarschner_TRT"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_TRT }); + shaderOption.SetValue(AZ::Name("o_enableMarschner_TT"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_TT }); + shaderOption.SetValue(AZ::Name("o_enableLongtitudeCoeff"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableLongtitudeCoeff }); + shaderOption.SetValue(AZ::Name("o_enableAzimuthCoeff"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableAzimuthCoeff }); + + m_shaderOptions = shaderOption.GetShaderVariantKeyFallbackValue(); + } + + RPI::Ptr HairPPLLResolvePass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew HairPPLLResolvePass(descriptor); + + return AZStd::move(pass); + } + + void HairPPLLResolvePass::InitializeInternal() + { + if (GetScene()) + { + FullscreenTrianglePass::InitializeInternal(); + } + } + + bool HairPPLLResolvePass::AcquireFeatureProcessor() + { + if (m_featureProcessor) + { + return true; + } + + RPI::Scene* scene = GetScene(); + if (scene) + { + m_featureProcessor = scene->GetFeatureProcessor(); + } + else + { + return false; + } + + if (!m_featureProcessor || !m_featureProcessor->IsInitialized()) + { + AZ_Warning("Hair Gem", m_featureProcessor, + "HairPPLLResolvePass [%s] - Failed to retrieve Hair feature processor from the scene", + GetName().GetCStr()); + m_featureProcessor = nullptr; // set it as null if not initialized to repeat this check. + return false; + } + return true; + } + + void HairPPLLResolvePass::CompileResources(const RHI::FrameGraphCompileContext& context) + { + if (!m_shaderResourceGroup || !AcquireFeatureProcessor()) + { + AZ_Error("Hair Gem", m_shaderResourceGroup, "HairPPLLResolvePass: PPLL list data was not bound - missing Srg"); + return; // no error message due to FP - initialization not complete yet, wait for the next frame + } + + UpdateGlobalShaderOptions(); + + if (m_shaderResourceGroup->HasShaderVariantKeyFallbackEntry()) + { + m_shaderResourceGroup->SetShaderVariantKeyFallbackValue(m_shaderOptions); + } + + + SrgBufferDescriptor descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, RHI::Format::Unknown, + PPLL_NODE_SIZE, RESERVED_PIXELS_FOR_OIT, + Name{ "LinkedListNodesPPLL" }, Name{ "m_linkedListNodes" }, 0, 0 + ); + if (!UtilityClass::BindBufferToSrg("Hair Gem", m_featureProcessor->GetPerPixelListBuffer(), descriptor, m_shaderResourceGroup)) + { + AZ_Error("Hair Gem", false, "HairPPLLResolvePass: PPLL list data could not be bound."); + } + + // Update the material array constant buffer within the per pass srg + descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, RHI::Format::Unknown, + sizeof(AMD::TressFXShadeParams), 1, + Name{ "HairMaterialsArray" }, Name{ "m_hairParams" }, 0, 0 + ); + + m_featureProcessor->GetMaterialsArray().UpdateGPUData(m_shaderResourceGroup, descriptor); + + // All remaining srgs should compile here + FullscreenTrianglePass::CompileResources(context); + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.h b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.h new file mode 100644 index 0000000000..bf1a3f768e --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#include +#include +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairFeatureProcessor; + + //! The hair PPLL resolve pass is a full screen pass that runs over the hair fragments list + //! that were computed in the raster fill pass and resolves their depth order, transparency + //! and lighting values to be output to display. + //! Each pixel on the screen will be processed only once and will iterate through the fragments + //! list associated with the pixel's location. + //! The full screen resolve pass is using the following Srgs: + //! - PerPassSrg: hair vertex data data, PPLL buffers and material array + //! shared by all passes. + class HairPPLLResolvePass final + : public RPI::FullscreenTrianglePass + { + AZ_RPI_PASS(HairPPLLResolvePass); + + public: + AZ_RTTI(HairPPLLResolvePass, "{240940C1-4A47-480D-8B16-176FF3359B01}", RPI::FullscreenTrianglePass); + AZ_CLASS_ALLOCATOR(HairPPLLResolvePass, SystemAllocator, 0); + ~HairPPLLResolvePass() = default; + + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + bool AcquireFeatureProcessor(); + + void SetFeatureProcessor(HairFeatureProcessor* featureProcessor) + { + m_featureProcessor = featureProcessor; + } + + //! Override pass behavior methods + void InitializeInternal() override; + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + + private: + HairPPLLResolvePass(const RPI::PassDescriptor& descriptor); + + private: + void UpdateGlobalShaderOptions(); + + HairGlobalSettings m_hairGlobalSettings; + HairFeatureProcessor* m_featureProcessor = nullptr; + AZ::RPI::ShaderVariantKey m_shaderOptions; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairParentPass.cpp b/Gems/AtomTressFX/Code/Passes/HairParentPass.cpp new file mode 100644 index 0000000000..24cd6465dd --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairParentPass.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace AZ +{ + namespace Render + { + HairParentPass::HairParentPass(const RPI::PassDescriptor& descriptor) + : Base(descriptor) + { + } + + HairParentPass::~HairParentPass() + { + } + + RPI::Ptr HairParentPass::Create(const RPI::PassDescriptor& descriptor) + { + return aznew HairParentPass(descriptor); + } + + // The following two methods are here as the mean to allow usage of different hair passes in + // the active pipeline due to different hair options activations. + // For example - one might want to use short resolve render method vs' the complete full buffers + // that is used currently (but cost much memory), or to enable/disable collisions by removing + // the collision passes. + // [To Do] - The parent pass class can be removed if this is not done. + void HairParentPass::UpdateChildren() + { + if (!m_updateChildren) + { + return; + } + m_updateChildren = false; + } + + void HairParentPass::BuildAttachmentsInternal() + { + UpdateChildren(); + + Base::BuildAttachmentsInternal(); + } + + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairParentPass.h b/Gems/AtomTressFX/Code/Passes/HairParentPass.h new file mode 100644 index 0000000000..e494e92e1d --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairParentPass.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + //! HairParentPass owns the hair passes. + //! Currently they are all defined via the pipeline configuration, making the HairParent + //! class somewhat redundant, but moving forward, such class can be required to control + //! passes activation and usage based on user activation options. + class HairParentPass final + : public RPI::ParentPass + { + using Base = RPI::ParentPass; + AZ_RPI_PASS(HairParentPass); + + public: + AZ_RTTI(HairParentPass, "80C7E869-2513-4201-8C1E-D2E39DDE1244", Base); + AZ_CLASS_ALLOCATOR(HairParentPass, SystemAllocator, 0); + + virtual ~HairParentPass(); + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + private: + HairParentPass() = delete; + explicit HairParentPass(const RPI::PassDescriptor& descriptor); + + // RPI::Pass overrides... + void BuildAttachmentsInternal() override; + + void UpdateChildren(); + + bool m_updateChildren = true; + }; + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.cpp b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.cpp new file mode 100644 index 0000000000..2be3d66c01 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.cpp @@ -0,0 +1,269 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Hair Specific +#include +#include +#include +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + Data::Instance HairSkinningComputePass::GetShader() + { + return m_shader; + } + + bool HairSkinningComputePass::AcquireFeatureProcessor() + { + if (m_featureProcessor) + { + return true; + } + + RPI::Scene* scene = GetScene(); + if (scene) + { + m_featureProcessor = scene->GetFeatureProcessor(); + } + else + { + return false; + } + + if (!m_featureProcessor) + { + AZ_Warning("Hair Gem", false, + "HairSkinningComputePass [%s] - Failed to retrieve Hair feature processor from the scene", + GetName().GetCStr()); + return false; + } + return true; + } + + RPI::Ptr HairSkinningComputePass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew HairSkinningComputePass(descriptor); + return pass; + } + + HairSkinningComputePass::HairSkinningComputePass(const RPI::PassDescriptor& descriptor) + : RPI::ComputePass(descriptor) + { + } + + void HairSkinningComputePass::InitializeInternal() + { + if (GetScene()) + { + ComputePass::InitializeInternal(); + } + } + + void HairSkinningComputePass::BuildInternal() + { + ComputePass::BuildInternal(); + + if (!AcquireFeatureProcessor()) + { + return; + } + + // Output + // This is the buffer that is shared between all objects and dispatches and contains + // the dynamic data that can be changed between passes. + Name bufferName = Name{ "SkinnedHairSharedBuffer" }; + RPI::PassAttachmentBinding* localBinding = FindAttachmentBinding(bufferName); + if (localBinding && !localBinding->m_attachment) + { + AttachBufferToSlot(Name{ "SkinnedHairSharedBuffer" }, HairSharedBufferInterface::Get()->GetBuffer()); + } + } + + void HairSkinningComputePass::FrameBeginInternal(FramePrepareParams params) + { + if (m_buildShaderAndData) + { // Shader rebuild is required - the async callback did not succeed (missing FP?) + if (AcquireFeatureProcessor()) + { // FP exists or can be acquired + LoadShader(); // this will happen in this frame + // Flag the FP not to add any more dispatches until shader rebuild was done + m_featureProcessor->SetAddDispatchEnable(false); + // The following will force rebuild in the next frame keeping this frame clean. + m_featureProcessor->ForceRebuildRenderData(); + m_buildShaderAndData = false; + } + + // Clear the dispatch items, they will be re-populated next frame + m_dispatchItems.clear(); + } + + // This will bind the Per Object resources since the binding is triggering + // the RHI validation that will use attachment for its validation. The attachments + // are invalidated outside the render begin / end frame. + for (HairRenderObject* newObject : m_newRenderObjects) + { + newObject->BindPerObjectSrgForCompute(); + } + // Clear the objects, hence this is only done once per object/shader lifetime + m_newRenderObjects.clear(); + + RPI::ComputePass::FrameBeginInternal(params); + } + + void HairSkinningComputePass::CompileResources([[maybe_unused]] const RHI::FrameGraphCompileContext& context) + { + if (!m_featureProcessor) + { + return; + } + + // DON'T call the ComputePass:CompileResources as it will try to compile perDraw srg + // under the assumption that this is a single dispatch compute. Here we have dispatch + // per hair object and each has its own perDraw srg. + if (m_shaderResourceGroup != nullptr) + { + BindPassSrg(context, m_shaderResourceGroup); + m_shaderResourceGroup->Compile(); + } + } + + bool HairSkinningComputePass::IsEnabled() const + { + return RPI::ComputePass::IsEnabled();// (m_dispatchItems.size() ? true : false); + } + + bool HairSkinningComputePass::BuildDispatchItem(HairRenderObject* hairObject, DispatchLevel dispatchLevel) + { + m_newRenderObjects.insert(hairObject); + return hairObject->BuildDispatchItem(m_shader.get(), dispatchLevel); + } + + void HairSkinningComputePass::AddDispatchItems(AZStd::list>& hairRenderObjects) + { + // The following mutex is used for blocking the shader switch when a hot load occurs, hence ensuring + // the shader exists and the same shader, data and dispatch items are used across all hair objects + // during this frame. + // Several cases exist: + // 1. Hot reload was invoked first - either finished before this method or the mutex in this method + // is waited upon. The flag for hot reload was set already resulting in exit without add of dispatches. + // 2. Hot reload was invoked after this method - the BuildCommandListInternal will test for the flag and + // clear if required. + // 3. Hot reload was invoked after send to the GPU (BuildCommandListInternal) - the data sent is valid + // and it is safe to change the shader and create new dispatches. + // Remark: BuildCommandListInternal does not need to be synched as well since if the data was already + // inserted it is consistent and valid using the existing shader and data with instance counting. + AZStd::lock_guard lock(m_mutex); + + if (m_buildShaderAndData) + { // mutex was held by the hot reload and released - abort render until done. List is empty. + return; + } + + for (auto& renderObject : hairRenderObjects) + { + if (!renderObject->IsEnabled()) + { + continue; + } + + const RHI::DispatchItem* dispatchItem = renderObject->GetDispatchItem(m_shader.get()); + if (!dispatchItem) + { + continue; + } + + uint32_t iterations = m_allowSimIterations ? AZ::GetMax(renderObject->GetCPULocalShapeIterations(), 1) : 1; + for (uint32_t j = 0; j < iterations; ++j) + { + m_dispatchItems.insert(dispatchItem); + } + } + } + + void HairSkinningComputePass::BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) + { + if (m_buildShaderAndData) + { // Protect against shader and data async change that were not carried out + m_dispatchItems.clear(); + return; + } + + RHI::CommandList* commandList = context.GetCommandList(); + + // The following will bind all registered Srgs set in m_shaderResourceGroupsToBind + // and sends them to the command list ahead of the dispatch. + // This includes the PerView, PerScene and PerPass srgs (what about per draw?) + SetSrgsForDispatch(commandList); + + for (const RHI::DispatchItem* dispatchItem : m_dispatchItems) + { + commandList->Submit(*dispatchItem); + } + + // Clear the dispatch items. They will need to be re-populated next frame + m_dispatchItems.clear(); + } + + void HairSkinningComputePass::BuildShaderAndRenderData() + { + AZStd::lock_guard lock(m_mutex); + m_buildShaderAndData = true; + if (AcquireFeatureProcessor()) + { + // Flag the FP not to add any more dispatches until shader rebuild was done + m_featureProcessor->SetAddDispatchEnable(false); + } + } + + // Before reloading shaders, we want to wait for existing dispatches to finish + // so shader reloading does not interfere in any way. Because AP reloads are async, there might + // be a case where dispatch resources are destructed and will most certainly cause a GPU crash. + // If we flag the need for rebuild, the build will be made at the start of the next frame - at + // this stage the dispatch items should have been cleared - now we can load the shader and data. + void HairSkinningComputePass::OnShaderReinitialized([[maybe_unused]] const AZ::RPI::Shader& shader) + { + BuildShaderAndRenderData(); + } + + void HairSkinningComputePass::OnShaderAssetReinitialized([[maybe_unused]] const Data::Asset& shaderAsset) + { + BuildShaderAndRenderData(); + } + + void HairSkinningComputePass::OnShaderVariantReinitialized([[maybe_unused]] const AZ::RPI::ShaderVariant& shaderVariant) + { + BuildShaderAndRenderData(); + } + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.h b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.h new file mode 100644 index 0000000000..35fcfe9c37 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#include + +#include +#include +#include + +namespace AZ +{ + namespace RHI + { + struct DispatchItem; + } + + namespace Render + { + namespace Hair + { + class HairDispatchItem; + class HairFeatureProcessor; + class HairRenderObject; + enum class DispatchLevel; + + // This pass class serves for all skinning and simulation hair compute passes. + //! The Skinning Compute passes are all using the following Srgs via the dispatchItem: + //! - PerPassSrg: shared by all hair passes for the shared dynamic buffer and the PPLL buffers + //! - HairGenerationSrg: dictates how to construct the hair vertices and skinning + //! - HairSimSrg: defines vertices and tangent data shared between all passes + class HairSkinningComputePass final + : public RPI::ComputePass + { + AZ_RPI_PASS(HairSkinningComputePass); + + public: + AZ_RTTI(HairSkinningComputePass, "{DC8D323E-41FF-4FED-89C6-A254FD6809FC}", RPI::ComputePass); + AZ_CLASS_ALLOCATOR(HairSkinningComputePass, SystemAllocator, 0); + ~HairSkinningComputePass() = default; + + // Creates a HairSkinningComputePass + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + bool BuildDispatchItem(HairRenderObject* hairObject, DispatchLevel dispatchLevel ); + + //! Thread-safe function for adding the frame's dispatch items + void AddDispatchItems(AZStd::list>& renderObjects); + + // Pass behavior overrides + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + + virtual bool IsEnabled() const override; + + //! Returns the shader held by the ComputePass + Data::Instance GetShader(); + + void SetFeatureProcessor(HairFeatureProcessor* featureProcessor) + { + m_featureProcessor = featureProcessor; + } + void SetAllowIterations(bool allowIterations) + { + m_allowSimIterations = allowIterations; + } + + protected: + HairSkinningComputePass(const RPI::PassDescriptor& descriptor); + + void BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) override; + + // Attach here all the pass buffers + void InitializeInternal() override; + void BuildInternal() override; + void FrameBeginInternal(FramePrepareParams params) override; + + // ShaderReloadNotificationBus::Handler overrides... + void OnShaderReinitialized(const AZ::RPI::Shader& shader) override; + void OnShaderAssetReinitialized(const Data::Asset& shaderAsset) override; + void OnShaderVariantReinitialized(const AZ::RPI::ShaderVariant& shaderVariant) override; + + bool AcquireFeatureProcessor(); + void BuildShaderAndRenderData(); + + private: + HairFeatureProcessor* m_featureProcessor = nullptr; + + bool m_allowSimIterations = false; + bool m_initialized = false; + bool m_buildShaderAndData = false; // If shader is updated, mark it for build + + AZStd::mutex m_mutex; + + //! list of dispatch items, each represents a single hair object that + //! will be used by the skinning compute shader. + AZStd::unordered_set m_dispatchItems; + + //! List of new render objects that their Per Object (dynamic) Srg should be bound + //! to the resources. Done once per pass per object only. + AZStd::unordered_set m_newRenderObjects; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Rendering/HairBuffersSemantics.h b/Gems/AtomTressFX/Code/Rendering/HairBuffersSemantics.h new file mode 100644 index 0000000000..31e3000a89 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairBuffersSemantics.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +namespace AZ +{ + namespace RPI + { + class BufferAsset; + class Buffer; + } + + namespace Render + { + namespace Hair + { + enum class HairDynamicBuffersSemantics : uint8_t + { + Position = 0, + PositionsPrev, + PositionsPrevPrev, + Tangent, + StrandLevelData, + NumBufferStreams + }; + + enum class HairGenerationBuffersSemantics : uint8_t + { + InitialHairPositions = 0, + HairRestLengthSRV, + HairStrandType, + FollowHairRootOffset, + BoneSkinningData, + TressFXSimulationConstantBuffer, + NumBufferStreams + }; + + enum class HairRenderBuffersSemantics : uint8_t + { + HairVertexRenderParams = 0, + HairTexCoords, + BaseAlbedo, + StrandAlbedo, + RenderCB, + StrandCB, + NumBufferStreams + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp b/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp new file mode 100644 index 0000000000..9b5fbc9333 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp @@ -0,0 +1,195 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include + +// Hair specific +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + //!===================================================================================== + //! + //! Utility Functions + //! + //!===================================================================================== + + // [To Do] examine if most of these functions can become global in RPI + + //! Utility function to generate the Srg given the shader and the desired Srg name to be associated to. + //! If several shaders are sharing the same Srg (for example perView, perScene), it is enough to + //! create the Srg by associating it with a single shader and since the GPU signature and the data + //! are referring to the same shared description (preferable set in an [SrgDeclaration].aszli file) + //! The association with all shaders will work properly. + Data::Instance UtilityClass::CreateShaderResourceGroup( + Data::Instance shader, + const char* shaderResourceGroupId, + [[maybe_unused]] const char* moduleName) + { + Data::Instance srg = RPI::ShaderResourceGroup::Create(shader->GetAsset(), AZ::Name{ shaderResourceGroupId }); + if (!srg) + { + AZ_Error(moduleName, false, "Failed to create shader resource group"); + return nullptr; + } + return srg; + } + + + //! If srg is nullptr the index handle will NOT be set. + //! This can be useful when creating a constant buffer or an image. + Data::Instance UtilityClass::CreateBuffer( + [[maybe_unused]] const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg) + { + // If srg is provided, match the shader Srg bind index (returned via the descriptor) + if (srg) + { // Not always do we want to associate Srg when creating a buffer + bufferDesc.m_resourceShaderIndex = srg->FindShaderInputBufferIndex(bufferDesc.m_paramNameInSrg).GetIndex(); + if (bufferDesc.m_resourceShaderIndex == uint32_t(-1)) + { + AZ_Error(warningHeader, false, "Failed to find shader input index for [%s] in the SRG.", + bufferDesc.m_paramNameInSrg.GetCStr()); + return nullptr; + } + } + + // Descriptor setting + RPI::CommonBufferDescriptor desc; + desc.m_elementFormat = bufferDesc.m_elementFormat; + desc.m_poolType = bufferDesc.m_poolType;; + desc.m_elementSize = bufferDesc.m_elementSize; + desc.m_bufferName = bufferDesc.m_bufferName.GetCStr(); + desc.m_byteCount = (uint64_t)bufferDesc.m_elementCount * bufferDesc.m_elementSize; + desc.m_bufferData = nullptr; // set during asset load - use Update + + // Buffer creation + return RPI::BufferSystemInterface::Get()->CreateBufferFromCommonPool(desc); + } + + bool UtilityClass::BindBufferToSrg( + [[maybe_unused]] const char* warningHeader, + Data::Instance buffer, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg) + { + if (!buffer) + { + AZ_Error(warningHeader, false, "Trying to bind a null buffer"); + return false; + } + + RHI::ShaderInputBufferIndex bufferIndex = srg->FindShaderInputBufferIndex(bufferDesc.m_paramNameInSrg); + if (!bufferIndex.IsValid()) + { + AZ_Error(warningHeader, false, "Failed to find shader input index for [%s] in the SRG.", + bufferDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + if (!srg->SetBufferView(bufferIndex, buffer->GetBufferView())) + { + AZ_Error(warningHeader, false, "Failed to bind buffer view for [%s]", bufferDesc.m_bufferName.GetCStr()); + return false; + } + + return true; + } + + Data::Instance UtilityClass::CreateBufferAndBindToSrg( + const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg) + { + // Buffer creation + Data::Instance buffer = CreateBuffer(warningHeader, bufferDesc, srg); + + if (!BindBufferToSrg(warningHeader, buffer, bufferDesc, srg)) + { + return nullptr; + } + + return buffer; + } + + Data::Instance UtilityClass::CreateImagePool(RHI::ImagePoolDescriptor& imagePoolDesc) + { + RHI::Ptr device = RHI::GetRHIDevice(); + Data::Instance imagePool = RHI::Factory::Get().CreateImagePool(); + RHI::ResultCode result = imagePool->Init(*device, imagePoolDesc); + if (result != RHI::ResultCode::Success) + { + AZ_Error("CreateImagePool", false, "Failed to create or initialize image pool"); + return nullptr; + } + return imagePool; + } + + Data::Instance UtilityClass::CreateImage2D(RHI::ImagePool* imagePool, RHI::ImageDescriptor& imageDesc) + { + Data::Instance rhiImage = RHI::Factory::Get().CreateImage(); + RHI::ImageInitRequest request; + request.m_image = rhiImage.get(); + request.m_descriptor = imageDesc; + RHI::ResultCode result = imagePool->InitImage(request); + if (result != RHI::ResultCode::Success) + { + AZ_Error("CreateImage2D", false, "Failed to create or initialize image"); + return nullptr; + } + return rhiImage; + } + + Data::Instance UtilityClass::LoadStreamingImage( + const char* textureFilePath, [[maybe_unused]] const char* sampleName) + { + Data::AssetId streamingImageAssetId; + Data::AssetCatalogRequestBus::BroadcastResult( + streamingImageAssetId, &Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, + textureFilePath, azrtti_typeid(), false); + + if (!streamingImageAssetId.IsValid()) + { + AZ_Error(sampleName, false, "Failed to get streaming image asset id with path %s", textureFilePath); + return nullptr; + } + + auto streamingImageAsset = Data::AssetManager::Instance().GetAsset( + streamingImageAssetId, + Data::AssetLoadBehavior::PreLoad); + streamingImageAsset.BlockUntilLoadComplete(); + + if (!streamingImageAsset.IsReady()) + { + AZ_Error(sampleName, false, "Failed to get streaming image asset '%s'", textureFilePath); + return nullptr; + } + + auto image = RPI::StreamingImage::FindOrCreate(streamingImageAsset); + if (!image) + { + AZ_Error(sampleName, false, "Failed to find or create an image instance from image asset '%s'", textureFilePath); + return nullptr; + } + return image; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairCommon.h b/Gems/AtomTressFX/Code/Rendering/HairCommon.h new file mode 100644 index 0000000000..115fa73a2c --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairCommon.h @@ -0,0 +1,208 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +#include +#include +#include +#include + +// Hair specific +#include + +namespace AZ +{ + namespace RHI + { + class BufferAssetView; + } + + namespace RPI + { + class Buffer; + } + + namespace Data + { + /** + * This is an alias of intrusive_ptr designed for any class which inherits from + * InstanceData. You're not required to use Instance<> over AZStd::intrusive_ptr<>, + * but it provides symmetry with Asset<>. + */ + template + using Instance = AZStd::intrusive_ptr; + } + + namespace Render + { + namespace Hair + { + class UtilityClass + { + public: + UtilityClass() = default; + + static Data::Instance CreateShaderResourceGroup( + Data::Instance shader, + const char* shaderResourceGroupId, + const char* moduleName + ); + + static Data::Instance CreateBuffer( + const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg + ); + + static Data::Instance CreateBufferAndBindToSrg( + const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg + ); + + static bool BindBufferToSrg( + const char* warningHeader, + Data::Instance buffer, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg=nullptr + ); + + static Data::Instance LoadStreamingImage( + const char* textureFilePath, [[maybe_unused]] const char* sampleName + ); + + static Data::Instance CreateImagePool( + RHI::ImagePoolDescriptor& imagePoolDesc); + + static Data::Instance CreateImage2D( + RHI::ImagePool* imagePool, RHI::ImageDescriptor& imageDesc); + }; + + //! The following class matches between a constant buffer structure in CPU and its counter + //! part on the GPU. It is the equivalent Atom class for TressFXUniformBuffer. + template + class HairUniformBuffer + { + public: + TYPE* operator->() + { + return &m_cpuBuffer; + } + + TYPE* get() + { + return &m_cpuBuffer; + } + + Render::SrgBufferDescriptor& GetBufferDescriptor() { return m_bufferDesc; } + + //! Use this method only if the buffer will be attached to a single Srg. + //! If this is not the case use InitForUndefinedSrg + bool InitForUniqueSrg( + Data::Instance srg, + Render::SrgBufferDescriptor& srgDesc) + { + m_srg = srg; + m_bufferDesc = srgDesc; + + AZ_Error("HairUniformBuffer", m_srg, "Critical Error - no Srg was provided to bind buffer to [%s]", + m_bufferDesc.m_bufferName.GetCStr()); + + RHI::ShaderInputConstantIndex indexHandle = m_srg->FindShaderInputConstantIndex(m_bufferDesc.m_paramNameInSrg); + if (indexHandle.IsNull()) + { + AZ_Error("HairUniformBuffer", false, + "Failed to find shader constant buffer index for [%s] in the SRG.", + m_bufferDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + m_bufferDesc.m_resourceShaderIndex = indexHandle.GetIndex(); + return true; + } + + //! Updates and binds the data to the Srg and copies it to the GPU side. + //! Assumes that the buffer is uniquely attached to the saved srg. + bool UpdateGPUData() + { + if (!m_srg.get()) + { + AZ_Error("HairUniformBuffer", false, "Critical Error - no Srg was provided to bind buffer to [%s]", + m_bufferDesc.m_bufferName.GetCStr()); + return false; + } + + RHI::ShaderInputConstantIndex constantIndex = RHI::ShaderInputConstantIndex(m_bufferDesc.m_resourceShaderIndex); + if (constantIndex.IsNull()) + { + AZ_Error("HairUniformBuffer", false, "Critical Error - Srg index is not valide for [%s]", + m_bufferDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + if (!m_srg->SetConstantRaw(constantIndex, &m_cpuBuffer, m_bufferDesc.m_elementSize)) + { + AZ_Error("HairUniformBuffer", false, "Failed to bind Constant Buffer for [%s]", m_bufferDesc.m_bufferName.GetCStr()); + return false; + } + return true; + } + + //! Updates Binds the data to the Srg and copies it to the GPU side. + //! Assumes that the buffer can be associated with various srgs. + bool UpdateGPUData( + Data::Instance srg, + Render::SrgBufferDescriptor& srgDesc) + { + if (!srg) + { + AZ_Error("HairUniformBuffer", srg, "Critical Error - no Srg was provided to bind buffer to [%s]", + srgDesc.m_bufferName.GetCStr()); + return false; + } + + RHI::ShaderInputConstantIndex indexHandle = srg->FindShaderInputConstantIndex(srgDesc.m_paramNameInSrg); + if (indexHandle.IsNull()) + { + AZ_Error("HairUniformBuffer", false, + "Failed to find shader constant buffer index for [%s] in the SRG.", + srgDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + if (!srg->SetConstantRaw(indexHandle, &m_cpuBuffer, srgDesc.m_elementSize)) + { + AZ_Error("HairUniformBuffer", false, "Failed to bind Constant Buffer for [%s]", srgDesc.m_bufferName.GetCStr()); + return false; + } + return true; + } + + + private: + TYPE m_cpuBuffer; + + //! When this srg is set as nullptr, we assume that the buffer can be shared + //! between several passes (as done for PerView and PerScene). + Data::Instance m_srg = nullptr; + + Render::SrgBufferDescriptor m_bufferDesc = Render::SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, + RHI::Format::Unknown, sizeof(TYPE), 1, + Name{"BufferNameUndefined"}, Name{"BufferNameUndefined"}, 0, 0 + ); + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.cpp b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.cpp new file mode 100644 index 0000000000..21dfaaafd6 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + HairDispatchItem::~HairDispatchItem() + { + } + + // Reference in the code above that tackles handling of the different dispatches possible + // This one is targeting the per vertex dispatches for now. + void HairDispatchItem::InitSkinningDispatch( + RPI::Shader* shader, + RPI::ShaderResourceGroup* hairGenerationSrg, + RPI::ShaderResourceGroup* hairSimSrg, + uint32_t elementsAmount ) + { + m_shader = shader; + RHI::DispatchDirect dispatchArgs( + elementsAmount, 1, 1, + TRESSFX_SIM_THREAD_GROUP_SIZE, 1, 1 + ); + m_dispatchItem.m_arguments = dispatchArgs; + RHI::PipelineStateDescriptorForDispatch pipelineDesc; + m_shader->GetVariant(RPI::ShaderAsset::RootShaderVariantStableId).ConfigurePipelineState(pipelineDesc); + m_dispatchItem.m_pipelineState = m_shader->AcquirePipelineState(pipelineDesc); + m_dispatchItem.m_shaderResourceGroupCount = 2; // the per pass will be added by each pass. + m_dispatchItem.m_shaderResourceGroups = { + hairGenerationSrg->GetRHIShaderResourceGroup(), // Static generation data + hairSimSrg->GetRHIShaderResourceGroup() // Dynamic data changed between passes + }; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.h b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.h new file mode 100644 index 0000000000..aa63884444 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace RHI + { + class BufferView; + class PipelineState; + } + + namespace RPI + { + class Buffer; + class ModelLod; + class Shader; + class ShaderResourceGroup; + } + + namespace Render + { + namespace Hair + { + class HairSkinningComputePass; + class HairRenderObject; + + enum class DispatchLevel + { + DISPATCHLEVEL_VERTEX, + DISPATCHLEVEL_STRAND + }; + + //! Holds and manages an RHI DispatchItem for a specific skinned mesh, and the resources that are + //! needed to build and maintain it. + class HairDispatchItem + : public Data::InstanceData + { + public: + AZ_CLASS_ALLOCATOR(HairDispatchItem, AZ::SystemAllocator, 0); + + HairDispatchItem() = default; + + //! One dispatch item per hair object per computer pass. + //! The amount of dispatches depends on the amount of vertices required to be created + + ~HairDispatchItem(); + + void InitSkinningDispatch( + RPI::Shader* shader, + RPI::ShaderResourceGroup* hairGenerationSrg, + RPI::ShaderResourceGroup* hairSimSrg, + uint32_t elementsAmount + ); + + RHI::DispatchItem* GetDispatchItem() { return &m_dispatchItem; } + + private: + RHI::DispatchItem m_dispatchItem; + RPI::Shader* m_shader; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp new file mode 100644 index 0000000000..7c8ce74f8e --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp @@ -0,0 +1,541 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// Hair specific +#include +#include +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + uint32_t HairFeatureProcessor::s_instanceCount = 0; + + HairFeatureProcessor::HairFeatureProcessor() + { + HairParentPassName = Name{ "HairParentPass" }; + + HairPPLLRasterPassName = Name{ "HairPPLLRasterPass" }; + HairPPLLResolvePassName = Name{ "HairPPLLResolvePass" }; + + GlobalShapeConstraintsPassName = Name{ "HairGlobalShapeConstraintsComputePass" }; + CalculateStrandDataPassName = Name{ "HairCalculateStrandLevelDataComputePass" }; + VelocityShockPropagationPassName = Name{ "HairVelocityShockPropagationComputePass" }; + LocalShapeConstraintsPassName = Name{ "HairLocalShapeConstraintsComputePass" }; + LengthConstriantsWindAndCollisionPassName = Name{ "HairLengthConstraintsWindAndCollisionComputePass" }; + UpdateFollowHairPassName = Name{ "HairUpdateFollowHairComputePass" }; + + ++s_instanceCount; + + if (!CreatePerPassResources()) + { // this might not be an error - if the pass system is still empty / minimal + // and these passes are not part of the minimal pipeline, they will not + // be created. + AZ_Error("Hair Gem", false, "Failed to create the hair shared buffer resource"); + } + } + + HairFeatureProcessor::~HairFeatureProcessor() + { + m_linkedListNodesBuffer.reset(); + m_sharedDynamicBuffer.reset(); + } + + void HairFeatureProcessor::Reflect(ReflectContext* context) + { + HairGlobalSettings::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext + ->Class() + ->Version(0); + } + } + + void HairFeatureProcessor::Activate() + { + m_hairFeatureProcessorRegistryName = { "AZ::Render::Hair::HairFeatureProcessor" }; + + EnableSceneNotification(); + TickBus::Handler::BusConnect(); + HairGlobalSettingsRequestBus::Handler::BusConnect(); + } + + void HairFeatureProcessor::Deactivate() + { + DisableSceneNotification(); + TickBus::Handler::BusDisconnect(); + HairGlobalSettingsRequestBus::Handler::BusDisconnect(); + } + + void HairFeatureProcessor::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) + { + const float MAX_SIMULATION_TIME_STEP = 0.033f; // Assuming minimal of 30 fps + m_currentDeltaTime = AZStd::min(deltaTime, MAX_SIMULATION_TIME_STEP); + for (auto& object : m_hairRenderObjects) + { + object->SetFrameDeltaTime(m_currentDeltaTime); + } + } + + int HairFeatureProcessor::GetTickOrder() + { + return AZ::TICK_PRE_RENDER; + } + + void HairFeatureProcessor::AddHairRenderObject(Data::Instance renderObject) + { + if (!m_initialized) + { + Init(m_renderPipeline); + } + + m_hairRenderObjects.push_back(renderObject); + + BuildDispatchAndDrawItems(renderObject); + + EnablePasses(true); + } + + void HairFeatureProcessor::EnablePasses(bool enable) + { + if (!m_initialized) + { + return; + } + + for (auto& [passName, pass] : m_computePasses) + { + pass->SetEnabled(enable); + } + + m_hairPPLLRasterPass->SetEnabled(enable); + m_hairPPLLResolvePass->SetEnabled(enable); + } + + bool HairFeatureProcessor::RemoveHairRenderObject(Data::Instance renderObject) + { + for (auto objIter = m_hairRenderObjects.begin(); objIter != m_hairRenderObjects.end(); ++objIter) + { + if (objIter->get() == renderObject) + { + m_hairRenderObjects.erase(objIter); + if (m_hairRenderObjects.empty()) + { + EnablePasses(false); + } + return true; + } + } + return false; + } + + void HairFeatureProcessor::UpdateHairSkinning() + { + // Copying CPU side m_SimCB content to the GPU buffer (matrices, wind parameters..) + + for (auto objIter = m_hairRenderObjects.begin(); objIter != m_hairRenderObjects.end(); ++objIter) + { + if (!objIter->get()->IsEnabled()) + { + return; + } + objIter->get()->Update(); + } + } + + //! Assumption: the hair is being updated per object before this method is called and + //! therefore the parameters that were calculated per object can be directly copied + //! without need to recalculate as in the original code. + //! Make sure there are no more than (currently) 16 hair objects or update dynamic handling. + //! This DOES NOT do the srg binding since it can be shared but by pass itself when compiling resources. + void HairFeatureProcessor::FillHairMaterialsArray(std::vector& renderSettings) + { + // Update Render Parameters + for (int i = 0; i < renderSettings.size(); ++i) + { + AMD::ShadeParams& hairMaterial = m_hairObjectsMaterialsCB->HairShadeParams[i]; + hairMaterial.FiberRadius = renderSettings[i]->FiberRadius; + hairMaterial.ShadowAlpha = renderSettings[i]->ShadowAlpha; + hairMaterial.FiberSpacing = renderSettings[i]->FiberSpacing; + hairMaterial.HairEx2 = renderSettings[i]->HairEx2; + hairMaterial.HairKs2 = renderSettings[i]->HairKs2; + hairMaterial.MatKValue = renderSettings[i]->MatKValue; + hairMaterial.Roughness = renderSettings[i]->Roughness; + hairMaterial.CuticleTilt = renderSettings[i]->CuticleTilt; + } + } + + //========================================================================================== + void HairFeatureProcessor::Simulate(const FeatureProcessor::SimulatePacket& packet) + { + AZ_PROFILE_FUNCTION(AzRender); + AZ_UNUSED(packet); + + if (m_hairRenderObjects.empty()) + { // there might not be are no render objects yet, indicating that scene data might not be ready + // to initialize just yet. + return; + } + + if (m_forceRebuildRenderData) + { + for (auto& hairRenderObject : m_hairRenderObjects) + { + BuildDispatchAndDrawItems(hairRenderObject); + } + m_forceRebuildRenderData = false; + m_addDispatchEnabled = true; + } + + // Prepare materials array for the per pass srg + std::vector hairObjectsRenderMaterials; + uint32_t objectIndex = 0; + for (auto& renderObject : m_hairRenderObjects) + { + if (!renderObject->IsEnabled()) + { + continue; + } + + renderObject->SetRenderIndex(objectIndex); + + // [To Do] Hair - update the following parameters for dynamic LOD control + // should change or when parameters are being changed on the editor side. +// float Distance = sqrtf( m_activeScene.scene->GetCameraPos().x * m_activeScene.scene->GetCameraPos().x + +// m_activeScene.scene->GetCameraPos().y * m_activeScene.scene->GetCameraPos().y + +// m_activeScene.scene->GetCameraPos().z * m_activeScene.scene->GetCameraPos().z); + const float distanceFromCamera = 1.0f; // fixed distance until LOD mechanism is worked on + const float updateShadows = false; // same here - currently cheap self shadow approx + renderObject->UpdateRenderingParameters( nullptr, RESERVED_PIXELS_FOR_OIT, distanceFromCamera, updateShadows); + + // this will be used in the constant buffer to set the material array used by the resolve pass + hairObjectsRenderMaterials.push_back(renderObject->GetHairRenderParams()); + + // The data update for the GPU bind - this should be the very last thing done after the + // data has been read and / or altered on the CPU side. + renderObject->Update(); + ++objectIndex; + } + + FillHairMaterialsArray(hairObjectsRenderMaterials); + } + + + void HairFeatureProcessor::Render([[maybe_unused]] const FeatureProcessor::RenderPacket& packet) + { + AZ_PROFILE_FUNCTION(AzRender); + + if (!m_initialized || !m_addDispatchEnabled) + { // Skip adding dispatches / Draw packets for this frame until initialized and the shaders are ready + return; + } + + // [To Do] - no culling scheme applied yet. + // Possibly setup the hair culling work group to be re-used for each view. + // See SkinnedMeshFeatureProcessor::Render for more details + + // Add dispatch per hair object per Compute passes + for (auto& [passName, pass] : m_computePasses) + { + pass->AddDispatchItems(m_hairRenderObjects); + } + + // Add all hair objects to the Render / Raster Pass + m_hairPPLLRasterPass->AddDrawPackets(m_hairRenderObjects); + } + + void HairFeatureProcessor::ClearPasses() + { + m_initialized = false; // Avoid simulation or render + m_computePasses.clear(); + m_hairPPLLRasterPass = nullptr; + m_hairPPLLResolvePass = nullptr; + + // Mark for all passes to evacuate their render data and recreate it. + m_forceRebuildRenderData = true; + m_forceClearRenderData = true; + } + + void HairFeatureProcessor::OnRenderPipelineAdded(RPI::RenderPipelinePtr renderPipeline) + { + // Proceed only if this is the main pipeline that contains the parent pass + if (!renderPipeline.get()->GetRootPass()->FindPassByNameRecursive(HairParentPassName)) + { + return; + } + + Init(renderPipeline.get()); + + // Mark for all passes to evacuate their render data and recreate it. + m_forceRebuildRenderData = true; + } + + void HairFeatureProcessor::OnRenderPipelineRemoved(RPI::RenderPipeline* renderPipeline) + { + // Proceed only if this is the main pipeline that contains the parent pass + if (!renderPipeline->GetRootPass()->FindPassByNameRecursive(HairParentPassName)) + { + return; + } + + m_renderPipeline = nullptr; + ClearPasses(); + } + + void HairFeatureProcessor::OnRenderPipelinePassesChanged(RPI::RenderPipeline* renderPipeline) + { + // Proceed only if this is the main pipeline that contains the parent pass + if (!renderPipeline->GetRootPass()->FindPassByNameRecursive(HairParentPassName)) + { + return; + } + + Init(renderPipeline); + + // Mark for all passes to evacuate their render data and recreate it. + m_forceRebuildRenderData = true; + } + + bool HairFeatureProcessor::Init(RPI::RenderPipeline* renderPipeline) + { + m_renderPipeline = renderPipeline; + + ClearPasses(); + + // Compute Passes - populate the passes map + bool resultSuccess = InitComputePass(GlobalShapeConstraintsPassName); + resultSuccess &= InitComputePass(CalculateStrandDataPassName); + resultSuccess &= InitComputePass(VelocityShockPropagationPassName); + resultSuccess &= InitComputePass(LocalShapeConstraintsPassName, true); // restore shape over several iterations + resultSuccess &= InitComputePass(LengthConstriantsWindAndCollisionPassName); + resultSuccess &= InitComputePass(UpdateFollowHairPassName); + + // Rendering Passes + resultSuccess &= InitPPLLFillPass(); + resultSuccess &= InitPPLLResolvePass(); + + m_initialized = resultSuccess; + + // Don't enable passes if no hair object was added yet (depending on activation order) + if (m_initialized && m_hairRenderObjects.empty()) + { + EnablePasses(false); + } + + // this might not be an error - if the pass system is still empty / minimal + // and these passes are not part of the minimal pipeline, they will not + // be created. + AZ_Error("Hair Gem", resultSuccess, "Passes could not be retrieved."); + + return m_initialized; + } + + bool HairFeatureProcessor::CreatePerPassResources() + { + if (m_sharedResourcesCreated) + { + return true; + } + + SrgBufferDescriptor descriptor; + AZStd::string instanceNumber = AZStd::to_string(s_instanceCount); + + // Shared buffer - this is a persistent buffer that needs to be created manually. + { + AZStd::vector hairDynamicDescriptors; + DynamicHairData::PrepareSrgDescriptors(hairDynamicDescriptors, 1, 1); + Name sharedBufferName = Name{ "HairSharedDynamicBuffer" + instanceNumber }; + if (!HairSharedBufferInterface::Get()) + { // Since there can be several pipelines, allocate the shared buffer only for the + // first one and from that moment on it will be used through its interface + m_sharedDynamicBuffer = AZStd::make_unique(sharedBufferName.GetCStr(), hairDynamicDescriptors); + } + } + + // PPLL nodes buffer + { + descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, RHI::Format::Unknown, + PPLL_NODE_SIZE, RESERVED_PIXELS_FOR_OIT, + Name{ "LinkedListNodesPPLL" + instanceNumber }, Name{ "m_linkedListNodes" }, 0, 0 + ); + m_linkedListNodesBuffer = UtilityClass::CreateBuffer("Hair Gem", descriptor, nullptr); + if (!m_linkedListNodesBuffer) + { + AZ_Error("Hair Gem", false, "Failed to bind buffer view for [%s]", descriptor.m_bufferName.GetCStr()); + return false; + } + } + + m_sharedResourcesCreated = true; + return true; + } + + void HairFeatureProcessor::GetHairGlobalSettings(HairGlobalSettings& hairGlobalSettings) + { + AZStd::lock_guard lock(m_hairGlobalSettingsMutex); + hairGlobalSettings = m_hairGlobalSettings; + } + + void HairFeatureProcessor::SetHairGlobalSettings(const HairGlobalSettings& hairGlobalSettings) + { + { + AZStd::lock_guard lock(m_hairGlobalSettingsMutex); + m_hairGlobalSettings = hairGlobalSettings; + } + HairGlobalSettingsNotificationBus::Broadcast(&HairGlobalSettingsNotifications::OnHairGlobalSettingsChanged, m_hairGlobalSettings); + } + + bool HairFeatureProcessor::InitComputePass(const Name& passName, bool allowIterations) + { + m_computePasses[passName] = nullptr; + if (!m_renderPipeline) + { + AZ_Error("Hair Gem", false, "%s does NOT have render pipeline set yet", passName.GetCStr()); + return false; + } + + RPI::Ptr desiredPass = m_renderPipeline->GetRootPass()->FindPassByNameRecursive(passName); + if (desiredPass) + { + m_computePasses[passName] = static_cast(desiredPass.get()); + m_computePasses[passName]->SetFeatureProcessor(this); + m_computePasses[passName]->SetAllowIterations(allowIterations); + } + else + { + AZ_Error("Hair Gem", false, + "%s does not exist in this pipeline. Check your game project's .pass assets.", + passName.GetCStr()); + return false; + } + + return true; + } + + bool HairFeatureProcessor::InitPPLLFillPass() + { + m_hairPPLLRasterPass = nullptr; // reset it to null, just in case it fails to load the assets properly + if (!m_renderPipeline) + { + AZ_Error("Hair Gem", false, "Hair Fill Pass does NOT have render pipeline set yet"); + return false; + } + + RPI::Ptr desiredPass = m_renderPipeline->GetRootPass()->FindPassByNameRecursive(HairPPLLRasterPassName); + if (desiredPass) + { + m_hairPPLLRasterPass = static_cast(desiredPass.get()); + m_hairPPLLRasterPass->SetFeatureProcessor(this); + } + else + { + AZ_Error("Hair Gem", false, "HairPPLLRasterPass does not have any valid passes. Check your game project's .pass assets."); + return false; + } + return true; + } + + bool HairFeatureProcessor::InitPPLLResolvePass() + { + m_hairPPLLResolvePass = nullptr; // reset it to null, just in case it fails to load the assets properly + if (!m_renderPipeline) + { + AZ_Error("Hair Gem", false, "Hair Fill Pass does NOT have render pipeline set yet"); + return false; + } + + RPI::Ptr desiredPass = m_renderPipeline->GetRootPass()->FindPassByNameRecursive(HairPPLLResolvePassName); + if (desiredPass) + { + m_hairPPLLResolvePass = static_cast(desiredPass.get()); + m_hairPPLLResolvePass->SetFeatureProcessor(this); + } + else + { + AZ_Error("Hair Gem", false, "HairPPLLResolvePassTemplate does not have valid passes. Check your game project's .pass assets."); + return false; + } + return true; + } + + void HairFeatureProcessor::BuildDispatchAndDrawItems(Data::Instance renderObject) + { + HairRenderObject* renderObjectPtr = renderObject.get(); + + // Dispatches for Compute passes + m_computePasses[GlobalShapeConstraintsPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + m_computePasses[CalculateStrandDataPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_STRAND); + m_computePasses[VelocityShockPropagationPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + m_computePasses[LocalShapeConstraintsPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_STRAND); + m_computePasses[LengthConstriantsWindAndCollisionPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + m_computePasses[UpdateFollowHairPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + + // Render / Raster pass - adding the object will schedule Srgs binding + // and DrawItem build. + m_hairPPLLRasterPass->SchedulePacketBuild(renderObjectPtr); + } + + Data::Instance HairFeatureProcessor::GetHairSkinningComputegPass() + { + if (!m_computePasses[GlobalShapeConstraintsPassName]) + { + Init(m_renderPipeline); + } + return m_computePasses[GlobalShapeConstraintsPassName]; + } + + Data::Instance HairFeatureProcessor::GetHairPPLLRasterPass() + { + if (!m_hairPPLLRasterPass) + { + Init(m_renderPipeline); + } + return m_hairPPLLRasterPass; + } + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.h b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.h new file mode 100644 index 0000000000..c56dc5c921 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.h @@ -0,0 +1,206 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +#include + +#include +#include + +// Hair specific +#include + +#include +#include +#include + +#include +#include +#include +#include + +namespace AZ +{ + namespace RHI + { + struct ImageDescriptor; + } + + namespace Render + { + namespace Hair + { + //! The following lines dictate the overall memory consumption reserved for the + //! PPLL fragments. The memory consumption using this technique is quite large (can + //! grow far above 1GB in GPU/CPU data and in extreme cases of zoom up with dense hair + //! might still not be enough. For this reason it is recommended to utilize the + //! approximated lighting scheme originally suggested by Eidos Montreal and do OIT using + //! several frame buffer layers for storing closest fragments data. + //! Using the approximated technique, the OIT buffers will consume roughly 256MB for 4K + //! resolution render with 4 OIT layers. + static const size_t PPLL_NODE_SIZE = 16; + static const size_t AVE_FRAGS_PER_PIXEL = 24; + static const size_t SCREEN_WIDTH = 1920; + static const size_t SCREEN_HEIGHT = 1080; + static const size_t RESERVED_PIXELS_FOR_OIT = SCREEN_WIDTH * SCREEN_HEIGHT * AVE_FRAGS_PER_PIXEL; + + class HairSkinningPass; + class HairRenderObject; + + //! The HairFeatureProcessor (FP) is the glue between the various hair components / entities in + //! the scene and their passes / shaders. + //! The FP will keep track of all active hair objects, will run their skinning update iteration + //! and will then populate them into each of the passes to be computed and rendered. + //! The overall process involves update, skinning, collision, and simulation compute, fragment + //! raster fill, and final frame buffer OIT resolve. + //! The last part can be switched to support the smaller foot print pass version that instead + //! of fragments list (PPLL) will use fill screen buffers to approximate OIT layer resolve. + class HairFeatureProcessor final + : public RPI::FeatureProcessor + , public HairGlobalSettingsRequestBus::Handler + , private AZ::TickBus::Handler + { + Name HairParentPassName; + + Name HairPPLLRasterPassName; + Name HairPPLLResolvePassName; + + Name GlobalShapeConstraintsPassName; + Name CalculateStrandDataPassName; + Name VelocityShockPropagationPassName; + Name LocalShapeConstraintsPassName; + Name LengthConstriantsWindAndCollisionPassName; + Name UpdateFollowHairPassName; + + public: + AZ_RTTI(AZ::Render::Hair::HairFeatureProcessor, "{5F9DDA81-B43F-4E30-9E56-C7C3DC517A4C}", RPI::FeatureProcessor); + + static void Reflect(AZ::ReflectContext* context); + + HairFeatureProcessor(); + virtual ~HairFeatureProcessor(); + + + void UpdateHairSkinning(); + + bool Init(RPI::RenderPipeline* pipeline); + bool IsInitialized() { return m_initialized; } + + // FeatureProcessor overrides ... + void Activate() override; + void Deactivate() override; + void Simulate(const FeatureProcessor::SimulatePacket& packet) override; + void Render(const FeatureProcessor::RenderPacket& packet) override; + + // AZ::TickBus::Handler overrides + void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; + int GetTickOrder() override; + + void AddHairRenderObject(Data::Instance renderObject); + bool RemoveHairRenderObject(Data::Instance renderObject); + + // RPI::SceneNotificationBus overrides ... + void OnRenderPipelineAdded(RPI::RenderPipelinePtr renderPipeline) override; + void OnRenderPipelineRemoved(RPI::RenderPipeline* renderPipeline) override; + void OnRenderPipelinePassesChanged(RPI::RenderPipeline* renderPipeline) override; + + Data::Instance GetHairSkinningComputegPass(); + Data::Instance GetHairPPLLRasterPass(); + + //! Update the hair objects materials array. + void FillHairMaterialsArray(std::vector& renderSettings); + + Data::Instance GetPerPixelListBuffer() { return m_linkedListNodesBuffer; } + HairUniformBuffer& GetMaterialsArray() { return m_hairObjectsMaterialsCB; } + + void ForceRebuildRenderData() { m_forceRebuildRenderData = true; } + void SetAddDispatchEnable(bool enable) { m_addDispatchEnabled = enable; } + void SetEnable(bool enable) + { + m_isEnabled = enable; + EnablePasses(enable); + } + + bool CreatePerPassResources(); + + void GetHairGlobalSettings(HairGlobalSettings& hairGlobalSettings) override; + void SetHairGlobalSettings(const HairGlobalSettings& hairGlobalSettings) override; + + private: + AZ_DISABLE_COPY_MOVE(HairFeatureProcessor); + + void ClearPasses(); + + bool InitPPLLFillPass(); + bool InitPPLLResolvePass(); + bool InitComputePass(const Name& passName, bool allowIterations = false); + + void BuildDispatchAndDrawItems(Data::Instance renderObject); + + void EnablePasses(bool enable); + + //! The following will serve to register the FP in the Thumbnail system + AZStd::vector m_hairFeatureProcessorRegistryName; + + //! The render pipeline is acquired and set when a pipeline is created or changed + //! and accordingly the passes and the feature processor are associated. + //! Notice that scene can contain several pipelines all using the same feature + //! processor. On the pass side, it will acquire the scene and request the FP, + //! but on the FP side, it will only associate to the latest pass hence such a case + //! might still be a problem. If needed, it can be resolved using a map for each + //! pass name per pipeline. + RPI::RenderPipeline* m_renderPipeline = nullptr; + + //! The Hair Objects in the scene (one per hair component) + AZStd::list> m_hairRenderObjects; + + //! Simulation Compute Passes + AZStd::unordered_map > m_computePasses; + + // Render Passes + Data::Instance m_hairPPLLRasterPass = nullptr; + Data::Instance m_hairPPLLResolvePass = nullptr; + + //-------------------------------------------------------------- + // Per Pass Resources + //-------------------------------------------------------------- + //! The shared buffer used by all dynamic buffer views for the hair skinning / simulation + AZStd::unique_ptr m_sharedDynamicBuffer; // used for the hair data changed between passes. + + //! The constant buffer structure containing an array of all hair objects materials + //! to be used by the full screen resolve pass. + HairUniformBuffer m_hairObjectsMaterialsCB; + + //! PPLL single buffer containing all the PPLL elements + Data::Instance m_linkedListNodesBuffer = nullptr; + //-------------------------------------------------------------- + + //! Per frame delta time for the physics simulation - updated every frame + float m_currentDeltaTime = 0.02f; + //! flag to disable/enable feature processor adding dispatch calls to compute passes. + bool m_addDispatchEnabled = true; + bool m_sharedResourcesCreated = false; + //! reload / pipeline changes force build dispatches and render items + bool m_forceRebuildRenderData = false; + bool m_forceClearRenderData = false; + bool m_initialized = false; + bool m_isEnabled = true; + static uint32_t s_instanceCount; + + HairGlobalSettings m_hairGlobalSettings; + AZStd::mutex m_hairGlobalSettingsMutex; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp new file mode 100644 index 0000000000..d26ca12336 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void HairGlobalSettings::Reflect(ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(3) + ->Field("EnableShadows", &HairGlobalSettings::m_enableShadows) + ->Field("EnableDirectionalLights", &HairGlobalSettings::m_enableDirectionalLights) + ->Field("EnablePunctualLights", &HairGlobalSettings::m_enablePunctualLights) + ->Field("EnableAreaLights", &HairGlobalSettings::m_enableAreaLights) + ->Field("EnableIBL", &HairGlobalSettings::m_enableIBL) + ->Field("HairLightingModel", &HairGlobalSettings::m_hairLightingModel) + ->Field("EnableMarschner_R", &HairGlobalSettings::m_enableMarschner_R) + ->Field("EnableMarschner_TRT", &HairGlobalSettings::m_enableMarschner_TRT) + ->Field("EnableMarschner_TT", &HairGlobalSettings::m_enableMarschner_TT) + ->Field("EnableLongtitudeCoeff", &HairGlobalSettings::m_enableLongtitudeCoeff) + ->Field("EnableAzimuthCoeff", &HairGlobalSettings::m_enableAzimuthCoeff) + ; + + if (auto editContext = serializeContext->GetEditContext()) + { + editContext->Class("Hair Global Settings", "Shared settings across all hair components") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableShadows, "Enable Shadows", "Enable shadows for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableDirectionalLights, "Enable Directional Lights", "Enable directional lights for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enablePunctualLights, "Enable Punctual Lights", "Enable punctual lights for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableAreaLights, "Enable Area Lights", "Enable area lights for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableIBL, "Enable IBL", "Enable imaged-based lighting for hair.") + ->DataElement(AZ::Edit::UIHandlers::ComboBox, &HairGlobalSettings::m_hairLightingModel, "Hair Lighting Model", "Determines which lighting equation to use") + ->EnumAttribute(Hair::HairLightingModel::GGX, "GGX") + ->EnumAttribute(Hair::HairLightingModel::Marschner, "Marschner") + ->EnumAttribute(Hair::HairLightingModel::Kajiya, "Kajiya") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_R, "Enable Marschner R", "Enable Marschner R.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_TRT, "Enable Marschner TRT", "Enable Marschner TRT.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_TT, "Enable Marschner TT", "Enable Marschner TT.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableLongtitudeCoeff, "Enable Longtitude", "Enable Longtitude Contribution") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableAzimuthCoeff, "Enable Azimuth", "Enable Azimuth Contribution") + ; + } + } + } + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h new file mode 100644 index 0000000000..1297f8f1bc --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + //! Used by all hair components to control the shader options flags used by the hair + //! rendering for lighting and various display features such as the Marschner lighting + //! model components. + struct HairGlobalSettings + { + AZ_TYPE_INFO(AZ::Render::Hair::HairGlobalSettings, "{B4175C42-9F4D-4824-9563-457A84C4983D}"); + + static void Reflect(ReflectContext* context); + + bool m_enableShadows = true; + bool m_enableDirectionalLights = true; + bool m_enablePunctualLights = true; + bool m_enableAreaLights = true; + bool m_enableIBL = true; + HairLightingModel m_hairLightingModel = HairLightingModel::Marschner; + bool m_enableMarschner_R = true; + bool m_enableMarschner_TRT = true; + bool m_enableMarschner_TT = true; + bool m_enableLongtitudeCoeff = true; + bool m_enableAzimuthCoeff = true; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettingsBus.h b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettingsBus.h new file mode 100644 index 0000000000..e1fd815aea --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettingsBus.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + #pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairGlobalSettingsNotifications + : public AZ::EBusTraits + { + public: + // EBusTraits + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + + virtual void OnHairGlobalSettingsChanged(const HairGlobalSettings& hairGlobalSettings) = 0; + }; + + typedef AZ::EBus HairGlobalSettingsNotificationBus; + + class HairGlobalSettingsRequests + : public AZ::EBusTraits + { + public: + // EBusTraits + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + + virtual void GetHairGlobalSettings(HairGlobalSettings& hairGlobalSettings) = 0; + virtual void SetHairGlobalSettings(const HairGlobalSettings& hairGlobalSettings) = 0; + }; + + typedef AZ::EBus HairGlobalSettingsRequestBus; + } //namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairLightingModels.h b/Gems/AtomTressFX/Code/Rendering/HairLightingModels.h new file mode 100644 index 0000000000..4f42114c0c --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairLightingModels.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + AZ_ENUM(HairLightingModel, + GGX, + Marschner, + Kajiya); + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp new file mode 100644 index 0000000000..baf986daf6 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp @@ -0,0 +1,1213 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include + +#include + +#include +#include + +#include + +// Hair Specific +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + uint32_t HairRenderObject::s_objectCounter = 0; + + AMD::float4 ToAMDFloat4(const AZ::Vector4& vec4) + { + AMD::float4 f4; + f4.x = vec4.GetX(); + f4.y = vec4.GetY(); + f4.z = vec4.GetZ(); + f4.w = vec4.GetW(); + return f4; + } + + AMD::float4 ToAMDFloat4(const AZ::Color& color) + { + AMD::float4 f4; + f4.x = color.GetR(); + f4.y = color.GetG(); + f4.z = color.GetB(); + f4.w = color.GetA(); + return f4; + } + + //!===================================================================================== + //! + //! DynamicHairData + //! + //!===================================================================================== + //! Preparation of the descriptors table of all the dynamic stream buffers within the class. + //! Do not call this method manually as it is called from CreateAndBindGPUResources. + void DynamicHairData::PrepareSrgDescriptors( + AZStd::vector& descriptorArray, + int32_t vertexCount, uint32_t strandsCount) + { + descriptorArray.resize(uint8_t(HairDynamicBuffersSemantics::NumBufferStreams)); + + descriptorArray[uint8_t(HairDynamicBuffersSemantics::Position)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexPositions"}, Name{"m_hairVertexPositions"}, 0, 0 + ); + descriptorArray[uint8_t(HairDynamicBuffersSemantics::PositionsPrev)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexPositionsPrev"}, Name{"m_hairVertexPositionsPrev"}, 1, 0 + ); + descriptorArray[uint8_t(HairDynamicBuffersSemantics::PositionsPrevPrev)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexPositionsPrevPrev"}, Name{"m_hairVertexPositionsPrevPrev"}, 2, 0 + ); + descriptorArray[uint8_t(HairDynamicBuffersSemantics::Tangent)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexTangents"}, Name{"m_hairVertexTangents"}, 3, 0 + ); + + // Notice the following Format::Unknown that indicates StructuredBuffer + // For more info review BufferViewDescriptor.h + descriptorArray[uint8_t(HairDynamicBuffersSemantics::StrandLevelData)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::Unknown, sizeof(TressFXStrandLevelData), strandsCount, + Name{"StrandLevelData"}, Name{"m_strandLevelData"}, 4, 0 + ); + } + + bool DynamicHairData::BindPerObjectSrgForRaster() + { + uint8_t streams[2] = { + uint8_t(HairDynamicBuffersSemantics::Position), + uint8_t(HairDynamicBuffersSemantics::Tangent) + }; + Name offsetNames[2] = { + Name("m_positionBufferOffset"), + Name("m_tangentBufferOffset") + }; + + m_readBuffersViews.resize(2); + + RHI::Buffer* rhiBuffer = SharedBuffer::Get()->GetBuffer()->GetRHIBuffer(); + for (uint8_t index = 0; index < 2 ; ++index) + { + // Buffer view creation from the shared buffer + uint8_t stream = streams[index]; + SrgBufferDescriptor streamDesc = m_dynamicBuffersDescriptors[stream]; + + streamDesc.m_viewOffsetInBytes = uint32_t(m_dynamicViewAllocators[stream]->GetVirtualAddress().m_ptr); + AZ_Assert(streamDesc.m_viewOffsetInBytes % streamDesc.m_elementSize == 0, "Offset of buffer within The SharedBuffer is NOT aligned."); + const RHI::BufferViewDescriptor viewDescriptor = SharedBuffer::CreateResourceViewWithDifferentFormat( + streamDesc.m_viewOffsetInBytes, streamDesc.m_elementCount, streamDesc.m_elementSize, + streamDesc.m_elementFormat, RHI::BufferBindFlags::ShaderRead // No need for ReadWrite in the raster fill + ); + + m_readBuffersViews[index] = RHI::Factory::Get().CreateBufferView(); + RHI::ResultCode resultCode = m_readBuffersViews[index]->Init(*rhiBuffer, viewDescriptor); + if (resultCode != RHI::ResultCode::Success) + { + AZ_Error("Hair Gem", false, "Read BufferView could not be retrieved for [%s]", streamDesc.m_bufferName.GetCStr()); + return false; + } + + // Buffer binding into the raster srg + RHI::ShaderInputBufferIndex indexHandle = m_simSrgForRaster->FindShaderInputBufferIndex(streamDesc.m_paramNameInSrg); + if (!m_simSrgForRaster->SetBufferView(indexHandle, m_readBuffersViews[index].get())) + { + AZ_Error("Hair Gem", false, "Failed to bind raster buffer view for %s", streamDesc.m_bufferName.GetCStr()); + return false; + } + + // And now for the offsets (if using offsets rather than BufferView) + RHI::ShaderInputConstantIndex indexConstHandle = m_simSrgForRaster->FindShaderInputConstantIndex(offsetNames[index]); + if (!m_simSrgForRaster->SetConstant(indexConstHandle, streamDesc.m_viewOffsetInBytes)) + { + AZ_Error("Hair Gem", false, "Failed to bind Raster Constant [%s]", offsetNames[index].GetCStr()); + return false; + } + } + + return true; + } + + //! Matching between the buffers Srg and its buffers descriptors, this method fills the Srg with + //! the views of the buffers to be used by the hair instance. + //! Do not call this method manually as it is called from CreateAndBindGPUResources. + bool DynamicHairData::BindPerObjectSrgForCompute() + { + //! Get the SRG indices for each input stream and set it in the Srg. + //! There are two methods to use the shared buffer: + //! 1. Use a the same buffer with pass sync point and use offset to the data + //! structures inside. The problem there is offset overhead + complex conversions + //! 2. Use buffer views into the original shared buffer and treat them as buffers + //! with the desired data type. It seems that Atom still requires single shared buffer + //! usage within the shader in order to support the sync point. + + // In Atom the usage of BufferView is what permits the usage of different 'buffers' + // allocated from within the originally bound single buffer. + // This allows us to have a single sync point (barrier) between passes only for this + // buffer, while indirectly it is used as multiple buffers used by multiple objects in + // this pass. + for (uint8_t buffer = 0; buffer < uint8_t(HairDynamicBuffersSemantics::NumBufferStreams); ++buffer) + { + SrgBufferDescriptor& streamDesc = m_dynamicBuffersDescriptors[buffer]; + RHI::ShaderInputBufferIndex indexHandle = m_simSrgForCompute->FindShaderInputBufferIndex(streamDesc.m_paramNameInSrg); + streamDesc.m_resourceShaderIndex = indexHandle.GetIndex(); + + if (!m_simSrgForCompute->SetBufferView(indexHandle, m_dynamicBuffersViews[buffer].get())) + { + AZ_Error("Hair Gem", false, "Failed to bind compute buffer view for %s", streamDesc.m_bufferName.GetCStr()); + return false; + } + } + + // Setting the specific per object buffer offsets within the global shared buffer + Name offsetNames[5] = { + // Notice: order must match HairDynamicBuffersSemantics order + Name("m_positionBufferOffset"), + Name("m_positionPrevBufferOffset"), + Name("m_positionPrevPrevBufferOffset"), + Name("m_tangentBufferOffset"), + Name("m_strandLevelDataOffset") + }; + + for (uint8_t buffer=0 ; buffer < uint8_t(HairDynamicBuffersSemantics::NumBufferStreams) ; ++buffer) + { + uint32_t viewOffsetInBytes = uint32_t(m_dynamicViewAllocators[buffer]->GetVirtualAddress().m_ptr); + RHI::ShaderInputConstantIndex indexHandle = m_simSrgForCompute->FindShaderInputConstantIndex(offsetNames[buffer]); + if (!m_simSrgForCompute->SetConstant(indexHandle, viewOffsetInBytes)) + { + AZ_Error("Hair Gem", false, "Failed to bind Compute Constant [%s]", offsetNames[buffer].GetCStr()); + return false; + } + } + + return true; + } + + //! Creates the GPU dynamic buffers of a single hair object + //! Equivalent to TressFXDynamicHairData::CreateGPUResources + bool DynamicHairData::CreateDynamicGPUResources( + Data::Instance computeShader, + Data::Instance rasterShader, + uint32_t vertexCount, uint32_t strandsCount ) + { + AZ_Assert(vertexCount <= std::numeric_limits().max(), "Hair vertex count exceeds uint32_t size."); + + // Create the dynamic shared buffers Srg. + m_simSrgForCompute = UtilityClass::CreateShaderResourceGroup(computeShader, "HairDynamicDataSrg", "Hair Gem"); + m_simSrgForRaster = UtilityClass::CreateShaderResourceGroup(rasterShader, "HairDynamicDataSrg", "Hair Gem"); + if (!m_simSrgForCompute || !m_simSrgForRaster) + { + AZ_Error("Hair Gem", false, "Failed to create the Per Object shader resource group [HairDynamicDataSrg]"); + return false; + } + + // Buffers preparation and creation. + // The shared buffer must already be created and initialized at this point. + PrepareSrgDescriptors(vertexCount, strandsCount); + + m_dynamicBuffersViews.resize(uint8_t(HairDynamicBuffersSemantics::NumBufferStreams)); + m_dynamicViewAllocators.resize(uint8_t(HairDynamicBuffersSemantics::NumBufferStreams)); + + RHI::Buffer* rhiBuffer = SharedBuffer::Get()->GetBuffer()->GetRHIBuffer(); + for (int stream=0; stream< uint8_t(HairDynamicBuffersSemantics::NumBufferStreams) ; ++stream) + { + SrgBufferDescriptor& streamDesc = m_dynamicBuffersDescriptors[stream]; + size_t requiredSize = (uint64_t)streamDesc.m_elementCount * streamDesc.m_elementSize; + m_dynamicViewAllocators[stream] = HairSharedBufferInterface::Get()->Allocate(requiredSize); + if (!m_dynamicViewAllocators[stream]) + { + // Allocated memory will be cleared using the underlying allocator system and + // indirectly the garbage collection. + // Since the garbage collection is ran with delay of 3 frames due to CPU-GPU + // latency, this might result in over allocation at reset / back from game mode. + AZ_Error("Hair Gem", false, "Dynamic Buffer out of memory"); + return false; + } + + // Create the buffer view into the shared buffer - it will be used as a separate buffer + // by the PerObject Srg. + streamDesc.m_viewOffsetInBytes = uint32_t(m_dynamicViewAllocators[stream]->GetVirtualAddress().m_ptr); + AZ_Assert(streamDesc.m_viewOffsetInBytes % streamDesc.m_elementSize == 0, "Offset of buffer within The SharedBuffer is NOT aligned."); + const RHI::BufferViewDescriptor viewDescriptor = SharedBuffer::CreateResourceViewWithDifferentFormat( + streamDesc.m_viewOffsetInBytes, streamDesc.m_elementCount, streamDesc.m_elementSize, + streamDesc.m_elementFormat, RHI::BufferBindFlags::ShaderReadWrite + ); + + m_dynamicBuffersViews[stream] = RHI::Factory::Get().CreateBufferView(); + RHI::ResultCode resultCode = m_dynamicBuffersViews[stream]->Init(*rhiBuffer, viewDescriptor); + if (resultCode != RHI::ResultCode::Success) + { + AZ_Error("Hair Gem", false, "Dynamic BufferView could not be retrieved for [%s]", streamDesc.m_bufferName.GetCStr()); + return false; + } + } + + m_initialized = true; + return true; + } + + //! Data upload - copy the hair mesh asset data (positions and tangents) into the buffers. + //! This is equivalent to: TressFXDynamicHairData::UploadGPUData + bool DynamicHairData::UploadGPUData( + [[maybe_unused]] const char* name, [[maybe_unused]] void* positions, [[maybe_unused]] void* tangents) + { + AZ_Error("Hair Gem", m_initialized, "Attempt to load Hair dynamic data for [%s] without views being properly initilized", name); + + const SrgBufferDescriptor* streamDesc = &m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Position)]; + uint32_t requiredSize = streamDesc->m_elementSize * streamDesc->m_elementCount; + Data::Instance sharedBuffer = HairSharedBufferInterface::Get()->GetBuffer(); + AZ_Error("Hair Gem", sharedBuffer, "Attempt to load Hair dynamic data for [%s] without initialize shared buffer", name); + + bool uploadSuccess = true; + uploadSuccess &= sharedBuffer->UpdateData(positions, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Position)].m_viewOffsetInBytes); + uploadSuccess &= sharedBuffer->UpdateData(positions, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::PositionsPrev)].m_viewOffsetInBytes); + uploadSuccess &= sharedBuffer->UpdateData(positions, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::PositionsPrevPrev)].m_viewOffsetInBytes); + + streamDesc = &m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Tangent)]; + requiredSize = streamDesc->m_elementSize * streamDesc->m_elementCount; + uploadSuccess &= sharedBuffer->UpdateData(tangents, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Tangent)].m_viewOffsetInBytes); + + return uploadSuccess; + } + + + //!===================================================================================== + //! + //! HairRenderObject - Equivalent to TressFXHairObject + //! + //!===================================================================================== + HairRenderObject::~HairRenderObject() + { + Release(); + } + + void HairRenderObject::Release() + { + + } + + void HairRenderObject::PrepareHairGenerationSrgDescriptors(uint32_t vertexCount, uint32_t strandsCount) + { + m_hairGenerationDescriptors.resize(uint8_t(HairGenerationBuffersSemantics::NumBufferStreams)); + AZStd::string objectNumber = AZStd::to_string(s_objectCounter); + // static StructuredBuffers for the various hair strands and bones static data. + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::InitialHairPositions)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"InitialHairPositions" + objectNumber }, Name{"m_initialHairPositions"}, 0, 0 + }; + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::HairRestLengthSRV)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32_FLOAT, sizeof(float), vertexCount, + Name{"HairRestLengthSRV" + objectNumber }, Name{"m_hairRestLengthSRV"}, 1, 0 + }; + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::HairStrandType)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32_UINT, sizeof(uint32_t), strandsCount, + Name{"HairStrandType" + objectNumber }, Name{"m_hairStrandType"}, 2, 0 + }; + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::FollowHairRootOffset)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), strandsCount, + Name{"FollowHairRootOffset" + objectNumber }, Name{"m_followHairRootOffset"}, 3, 0 + }; + // StructuredBuffer with strandsCount elements specifying hair blend bones and their weight + // Format set to Format::Unknown to avoid set size by type but follow the specified size. + // This is specifically required for StructuredBuffers. + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::BoneSkinningData)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::Unknown, sizeof(AMD::TressFXBoneSkinningData), strandsCount, + Name{"BoneSkinningData" + objectNumber }, Name{"m_boneSkinningData"}, 4, 0 + }; + + // Constant Buffer. RHI::Format::Unknown will create is as structured buffer per + // 'BufferSystemInterface' and the pool type will set it as constant buffer. + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::TressFXSimulationConstantBuffer)] = { + RPI::CommonBufferPoolType::Constant, + RHI::Format::Unknown, sizeof(AMD::TressFXSimulationParams), 1, + Name{"TressFXSimConstantBuffer" + objectNumber }, Name{"m_tressfxSimParameters"}, 5, 0 + }; + } + + bool HairRenderObject::CreateAndBindHairGenerationBuffers(uint32_t vertexCount, uint32_t strandsCount) + { + PrepareHairGenerationSrgDescriptors(vertexCount, strandsCount); + + m_hairGenerationBuffers.resize(uint8_t(HairGenerationBuffersSemantics::NumBufferStreams)); + for (uint8_t buffer = 0; buffer < uint8_t(HairGenerationBuffersSemantics::NumBufferStreams); ++buffer) + { + SrgBufferDescriptor& bufferDesc = m_hairGenerationDescriptors[buffer]; + if (buffer == uint8_t(HairGenerationBuffersSemantics::TressFXSimulationConstantBuffer)) + { + if (!m_simCB.InitForUniqueSrg(m_hairGenerationSrg, bufferDesc)) + { + return false; + } + } + else + { + m_hairGenerationBuffers[buffer] = UtilityClass::CreateBufferAndBindToSrg("Hair Gem", bufferDesc, m_hairGenerationSrg); + if (!m_hairGenerationBuffers[buffer]) + { + return false; // No need for error message as it was done already. + } + } + } + return true; + } + + //! Updates the buffers data for the hair generation. + //! Notice: does not update the bone matrices that will be updated every frame. + bool HairRenderObject::UploadGPUData([[maybe_unused]] const char* name, AMD::TressFXAsset* asset) + { + // The following must correlate the order in HairGenerationBuffersSemantics + void* buffersData[uint8_t(HairGenerationBuffersSemantics::NumBufferStreams)] = { + (void*)asset->m_positions.data(), + (void*)asset->m_restLengths.data(), + (void*)asset->m_strandTypes.data(), + (void*)asset->m_followRootOffsets.data(), + (void*)asset->m_boneSkinningData.data(), + nullptr, // updated by the HairUniformBuffer class + }; + + // The data update of the constant buffer is NOT done here but via the class update + for (uint8_t buffer = 0; buffer < uint8_t(HairGenerationBuffersSemantics::NumBufferStreams) ; ++buffer) + { + const SrgBufferDescriptor& streamDesc = m_hairGenerationDescriptors[buffer]; + uint32_t requiredSize = streamDesc.m_elementSize * streamDesc.m_elementCount; + + if (buffer == uint8_t(HairGenerationBuffersSemantics::TressFXSimulationConstantBuffer)) + { + if (!m_simCB.UpdateGPUData()) + { + return false; + } + } + else + { + if (!m_hairGenerationBuffers[buffer]->UpdateData(buffersData[buffer], requiredSize, 0)) + { + AZ_Error("Hair Gem", false, "[%s] Failed to upload data to GPU buffer [%s]", name, streamDesc.m_bufferName.GetCStr()); + return false; + } + } + } + return true; + } + + void HairRenderObject::PrepareRenderSrgDescriptors() + { + AZ_Error("Hair Gem", m_hairRenderSrg, "Error - m_hairRenderSrg was not created yet"); + + m_hairRenderDescriptors.resize(uint8_t(HairRenderBuffersSemantics::NumBufferStreams)); + AZStd::string objectNumber = AZStd::to_string(s_objectCounter); + + // Rendering constant buffers creation + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::RenderCB)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, RHI::Format::Unknown, + sizeof(AMD::TressFXRenderParams), 1, + Name{ "TressFXRenderConstantBuffer" + objectNumber }, Name{ "m_tressFXRenderParameters" }, 0, 0 + ); + + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandCB)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, RHI::Format::Unknown, + sizeof(AMD::TressFXStrandParams), 1, + Name{ "TressFXStrandConstantBuffer" + objectNumber}, Name{ "m_tressFXStrandParameters" }, 0, 0 + ); + + // Albedo texture Srg binding indices + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Invalid, RHI::Format::R32_UINT, sizeof(uint32_t), 1, + Name{"HairBaseAlbedo" + objectNumber}, Name{"m_baseAlbedoTexture"}, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputImageIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)].m_paramNameInSrg).GetIndex(); + + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Invalid, RHI::Format::R32_UINT, sizeof(uint32_t), 1, + Name{"HairStrandAlbedo" + objectNumber}, Name{"m_strandAlbedoTexture"}, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputImageIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)].m_paramNameInSrg).GetIndex(); + + // Vertices Data creation and bind: vertex thickness and texture coordinates. + // Vertex thickness + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32_FLOAT, sizeof(float), m_NumTotalVertices, + Name{ "HairVertRenderParams" + objectNumber}, Name{ "m_hairThicknessCoeffs" }, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputBufferIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)].m_paramNameInSrg).GetIndex(); + + // Texture coordinates + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32G32_FLOAT, 2 * sizeof(float), m_NumTotalStrands, + Name{"HairTexCoords" + objectNumber}, Name{"m_hairStrandTexCd"}, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputBufferIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)].m_paramNameInSrg).GetIndex(); + } + + + //! This is the binding method - not the actual content update that will happen every frame update. + bool HairRenderObject::BindRenderSrgResources() + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + // Constant buffer structures - the bind and update come together. + bool bindSuccess = true; + + bindSuccess &= m_renderCB.UpdateGPUData(); + bindSuccess &= m_strandCB.UpdateGPUData(); + + // Albedo textures + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_baseAlbedo)) + { + bindSuccess = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_strandAlbedo)) + { + bindSuccess = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + + // Vertex streams: thickness and texture coordinates + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)]; + if (!m_hairRenderSrg->SetBufferView(RHI::ShaderInputBufferIndex(desc->m_resourceShaderIndex), m_hairVertexRenderParams->GetBufferView())) + { + bindSuccess = false; + AZ_Error("Hair Gem", false, "Failed to bind buffer view for [%s]", desc->m_bufferName.GetCStr()); + } + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)]; + if (!m_hairRenderSrg->SetBufferView(RHI::ShaderInputBufferIndex(desc->m_resourceShaderIndex), m_hairTexCoords->GetBufferView())) + { + AZ_Error("Hair Gem", false, "Failed to bind buffer view for [%s]", desc->m_bufferName.GetCStr()); + bindSuccess = false; + } + return bindSuccess; + } + + + //! Creation of the render Srg m_hairRenderSrg, followed by creation and binding of the + //! GPU render resources: vertex thickness, vertex UV, hair albedo maps and two constant buffers. + bool HairRenderObject::CreateRenderingGPUResources( + Data::Instance shader, AMD::TressFXAsset& asset, [[maybe_unused]] const char* assetName) + { + //-------------------- Render Srg Creation --------------------- + m_hairRenderSrg = UtilityClass::CreateShaderResourceGroup(shader, "HairRenderingMaterialSrg", "Hair Gem"); + if (!m_hairRenderSrg) + { + AZ_Error("Hair Gem", false, + "Failed to create the hair render resource group [m_hairRenderSrg] for model [%s]", assetName ); + return false; + } + + //------------------- Resource Descriptors --------------------- + // Prepare descriptors for the various data creation including Srg index. + // This method should not bind the descriptors as binding will be done after we + // update the data (before the pass dispatch) + PrepareRenderSrgDescriptors(); + + //-------------------- Constant Buffers Creation ------------------- + // Remark: the albedo images will not be created here but during asset load. + // Constant buffer structures + bool bindSuccess = true; + bindSuccess &= m_renderCB.InitForUniqueSrg(m_hairRenderSrg, + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::RenderCB)]); + bindSuccess &= m_strandCB.InitForUniqueSrg(m_hairRenderSrg, + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandCB)]); + + if (!bindSuccess) + { + AZ_Error("Hair Gem", false, "Failed to InitForUniqueSrg hair render for model [%s]", assetName); + return false; + } + + // Vertices Data creation and bind: vertex thickness and texture coordinates. + m_hairVertexRenderParams = UtilityClass::CreateBuffer("Hair Gem", + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)], nullptr); + if (!m_hairVertexRenderParams.get()) + { + AZ_Error("Hair Gem", false, "Failed to create hair vertex buffer for model [%s]", assetName); + return false; + } + + if (asset.m_strandUV.data()) + { + m_hairTexCoords = UtilityClass::CreateBuffer("Hair Gem", m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)], nullptr); + } + + //------------ Index Buffer ------------ + m_TotalIndices = asset.GetNumHairTriangleIndices(); + + RHI::BufferInitRequest request; + uint32_t indexBufferSize = m_TotalIndices * sizeof(uint32_t); + m_indexBuffer = RHI::Factory::Get().CreateBuffer(); + request.m_buffer = m_indexBuffer.get(); + request.m_descriptor = RHI::BufferDescriptor{ + RHI::BufferBindFlags::ShaderRead | RHI::BufferBindFlags::InputAssembly, + indexBufferSize + }; + request.m_initialData = (void*)asset.m_triangleIndices.data(); + + RHI::Ptr bufferPool = RPI::BufferSystemInterface::Get()->GetCommonBufferPool(RPI::CommonBufferPoolType::StaticInputAssembly); + if (!bufferPool) + { + AZ_Error("Hair Gem", false, "Common buffer pool for index buffer could not be created"); + return false; + } + + [[maybe_unused]] RHI::ResultCode result = bufferPool->InitBuffer(request); + AZ_Error("Hair Gem", result == RHI::ResultCode::Success, "Failed to initialize index buffer - error [%d]", result); + + // create index buffer view + m_indexBufferView = RHI::IndexBufferView(*m_indexBuffer.get(), 0, indexBufferSize, RHI::IndexFormat::Uint32 ); + + return true; + } + + + //! Bind Render Srg (m_hairRenderSrg) resources. No resources data update should be doe here + //! Notice that this also loads the images and is slower if a new asset is required. + //! If the image was not changed it should only bind without the retrieve operation. + bool HairRenderObject::PopulateDrawStrandsBindSet(AMD::TressFXRenderingSettings* pRenderSettings) + { + // First, Directly loading from the asset stored in the render settings. + if (pRenderSettings) + { + m_baseAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_baseAlbedoAsset); + m_strandAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_strandAlbedoAsset); + } + + // Fallback using the texture name stored in the render settings. + // This method should only called when there is an update in the parameters + // and / or reload textures only when it is specifically required! + if (!m_baseAlbedo) + { + AZStd::string baseAlbedoName = "defaultwhite.png.streamingimage"; + if (pRenderSettings && pRenderSettings->m_BaseAlbedoName != "") + { + baseAlbedoName = pRenderSettings->m_BaseAlbedoName; + } + m_baseAlbedo = UtilityClass::LoadStreamingImage(baseAlbedoName.c_str(), "Hair Gem"); + } + if (!m_strandAlbedo) + { + AZStd::string strandAlbedoName = "defaultwhite.png.streamingimage"; + if (pRenderSettings && pRenderSettings->m_StrandAlbedoName != "") + { + strandAlbedoName = pRenderSettings->m_StrandAlbedoName; + } + m_strandAlbedo = UtilityClass::LoadStreamingImage(strandAlbedoName.c_str(), "Hair Gem"); + } + + // Bind the Srg resources + return BindRenderSrgResources(); + } + + bool HairRenderObject::LoadImageAsset(AMD::TressFXRenderingSettings* pRenderSettings) + { + Data::Instance baseAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_baseAlbedoAsset); + Data::Instance strandAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_strandAlbedoAsset); + + // Protect Update and Render if on async threads. + AZStd::lock_guard lock(m_mutex); + + // Set albedo textures on shader resources. + m_baseAlbedo = baseAlbedo; + m_strandAlbedo = strandAlbedo; + + bool success = true; + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_baseAlbedo)) + { + success = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_strandAlbedo)) + { + success = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + return success; + } + + bool HairRenderObject::UploadRenderingGPUResources(AMD::TressFXAsset& asset) + { + bool updateSuccess = true; + + // When the CBs data is changed, this is updating the CPU memory - it will be reflected to the GPU + // only after binding and compiling stage in the pass. + updateSuccess &= m_renderCB.UpdateGPUData(); + updateSuccess &= m_strandCB.UpdateGPUData(); + + // This should be called once on creation and separate method should apply the CBs update. + // Vertex streams data update + if (asset.m_strandUV.data()) + { + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)]; + updateSuccess &= m_hairTexCoords->UpdateData( (void*)asset.m_strandUV.data(), desc->m_elementCount * desc->m_elementSize, 0); + } + + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)]; + updateSuccess &= m_hairVertexRenderParams->UpdateData((void*)asset.m_thicknessCoeffs.data(), desc->m_elementCount * desc->m_elementSize, 0); + + // No need to update index buffer data unless we go to dynamic reduction + return updateSuccess; + } + + //!===================================================================================== + //! + //! Update Methods + //! + //!------------------------------------------------------------------------------------- + + // [To Do] Possibly move wind settings to Simulation Parameters or alike. + + // Wind is in a pyramid around the main wind direction. + // To add a random appearance, the shader will sample some direction + // within this cone based on the strand index. + // This function computes the vector for each edge of the pyramid. + // [To Do] Requires more testing + static void SetWindCorner( + Quaternion rotFromXAxisToWindDir, Vector3 rotAxis, + float angleToWideWindCone, float windMagnitude, AMD::float4& outVec) + { + static const Vector3 XAxis(1.0f, 0, 0); + Quaternion rot(rotAxis, angleToWideWindCone); + // original code: Vector3 newWindDir = rotFromXAxisToWindDir * rot * XAxis; + Vector3 newWindDir = (rotFromXAxisToWindDir * rot).TransformVector(XAxis); + outVec.x = newWindDir.GetX() * windMagnitude; + outVec.y = newWindDir.GetY() * windMagnitude; + outVec.z = newWindDir.GetZ() * windMagnitude; + outVec.w = 0; // unused. + } + + void HairRenderObject::SetWind(const Vector3& windDir, float windMag, int frame) + { + // Based on the original AMD code for pleasing wind rate simulation. + // [To Do] - production can add user control over velocity if required. + float windMagnitude = windMag * (pow(sin(frame * 0.01f), 2.0f) + 0.5f); + + Vector3 windDirN(windDir); + windDirN.Normalize(); + + Vector3 XAxis(1.0f, 0, 0); + Vector3 xCrossW = XAxis.Cross(windDirN); + + // Adi: this part is now using AZ::Quaternion - verify correctness + Quaternion rotFromXAxisToWindDir; + rotFromXAxisToWindDir.CreateIdentity(); + + float angle = asin(xCrossW.GetLength()); + + if (angle > 0.001) + { + // original code: rotFromXAxisToWindDir.SetRotation(xCrossW.Normalize(), angle); + rotFromXAxisToWindDir.CreateFromVector3AndValue(xCrossW.GetNormalized(), angle); + } + + const float angleToWideWindCone = AZ::DegToRad(40.f); + + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, 1.0, 0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind); + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, -1.0, 0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind1); + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, 0, 1.0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind2); + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, 0, -1.0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind3); + // fourth component unused. (used to store frame number, but no longer used). + } + + void HairRenderObject::InitBoneMatricesPlaceHolder(int numBoneMatrices) + { + float identityValues[16] = { + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + }; + int numMatrices = AZStd::min(numBoneMatrices, AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + memcpy(m_simCB->m_BoneSkinningMatrix[i].m, identityValues, 16 * sizeof(float)); + } + } + + //! Updating the bone matrices in the simulation constant buffer. + void HairRenderObject::UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + int numMatrices = AZStd::min(numBoneMatrices, AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + m_simCB->m_BoneSkinningMatrix[i] = pBoneMatricesInWS[i]; + } + } + + void HairRenderObject::UpdateBoneMatrices( + const AZ::Matrix3x4& entityWorldMatrix, + const AZStd::vector& boneMatrices + ) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + const int numMatrices = AZStd::min(static_cast(boneMatrices.size()), AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + AZ::Matrix3x4 boneMatrixWS = entityWorldMatrix * boneMatrices[i]; + + // [rhhong-TODO] - switch to AZ::Matrix4x4 later. + m_simCB->m_BoneSkinningMatrix[i].m[0] = boneMatrixWS(0, 0); + m_simCB->m_BoneSkinningMatrix[i].m[1] = boneMatrixWS(1, 0); + m_simCB->m_BoneSkinningMatrix[i].m[2] = boneMatrixWS(2, 0); + m_simCB->m_BoneSkinningMatrix[i].m[3] = 0.0f; + m_simCB->m_BoneSkinningMatrix[i].m[4] = boneMatrixWS(0, 1); + m_simCB->m_BoneSkinningMatrix[i].m[5] = boneMatrixWS(1, 1); + m_simCB->m_BoneSkinningMatrix[i].m[6] = boneMatrixWS(2, 1); + m_simCB->m_BoneSkinningMatrix[i].m[7] = 0.0f; + m_simCB->m_BoneSkinningMatrix[i].m[8] = boneMatrixWS(0, 2); + m_simCB->m_BoneSkinningMatrix[i].m[9] = boneMatrixWS(1, 2); + m_simCB->m_BoneSkinningMatrix[i].m[10] = boneMatrixWS(2, 2); + m_simCB->m_BoneSkinningMatrix[i].m[11] = 0.0f; + m_simCB->m_BoneSkinningMatrix[i].m[12] = boneMatrixWS(0, 3); + m_simCB->m_BoneSkinningMatrix[i].m[13] = boneMatrixWS(1, 3); + m_simCB->m_BoneSkinningMatrix[i].m[14] = boneMatrixWS(2, 3); + m_simCB->m_BoneSkinningMatrix[i].m[15] = 1.0f; + } + } + + // [To Do] Change only parameters that require per frame update such as time. + // The rest should be changed only when changed (per editor or script) + //! Update of simulation constant buffer. + //! The bone matrices are set elsewhere and should be updated before GPU submit. + void HairRenderObject::UpdateSimulationParameters(const AMD::TressFXSimulationSettings* settings, float timeStep) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + m_simCB->SetVelocityShockPropogation(settings->m_vspCoeff); + m_simCB->SetVSPAccelThreshold(settings->m_vspAccelThreshold); + m_simCB->SetDamping(settings->m_damping); + m_simCB->SetLocalStiffness(settings->m_localConstraintStiffness); + m_simCB->SetGlobalStiffness(settings->m_globalConstraintStiffness); + m_simCB->SetGlobalRange(settings->m_globalConstraintsRange); + m_simCB->SetGravity(settings->m_gravityMagnitude); + m_simCB->SetTimeStep(timeStep); + m_simCB->SetCollision(false); + m_simCB->SetVerticesPerStrand(m_NumVerticesPerStrand); + m_simCB->SetFollowHairsPerGuidHair(m_NumFollowHairsPerGuideHair); + m_simCB->SetTipSeperation(settings->m_tipSeparation); + + // use 1.0 for now, this needs to be maxVelocity * timestep + m_simCB->g_ClampPositionDelta = 20.0f; + + // Right now, we do all local constraint iterations on the CPU. + if (m_NumVerticesPerStrand >= TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION) + { + m_simCB->SetLocalIterations((int)settings->m_localConstraintsIterations); + m_CPULocalShapeIterations = 1; + } + else + { + m_simCB->SetLocalIterations(1); + m_CPULocalShapeIterations = (int)settings->m_localConstraintsIterations; + } + + m_simCB->SetLengthIterations((int)settings->m_lengthConstraintsIterations); + + // Set wind parameters + const Vector3& windDir = settings->m_windDirection; + float windMag = settings->m_windMagnitude; + SetWind(windDir, windMag, m_SimulationFrame); + +#if TRESSFX_COLLISION_CAPSULES + m_simCB->m_numCollisionCapsules.x = 0; + + // Below is an example showing how to pass capsule collision objects. + /* + mSimCB.m_numCollisionCapsules.x = 1; + mSimCB.m_centerAndRadius0[0] = { 0, 0.f, 0.f, 50.f }; + mSimCB.m_centerAndRadius1[0] = { 0, 100.f, 0, 10.f }; + */ +#endif + // make sure we start of with a correct pose + if (m_SimulationFrame < 2) + ResetPositions(); + } + + // [To Do] - Change only parameters that require per frame update such as distance. + // The rest should be changed only when changed (per editor or script) + void HairRenderObject::UpdateRenderingParameters( + const AMD::TressFXRenderingSettings* parameters, const int nodePoolSize, + float distance, bool shadowUpdate /*= false*/) + { + if (!parameters) + { + parameters = m_renderSettings; + } + + // Update Render Parameters + // If you alter FiberRadius make sure to change it also in the material properties + // passed by the Feature Processor for the shading. + m_renderCB->FiberRadius = parameters->m_FiberRadius; + + m_renderCB->ShadowAlpha = parameters->m_HairShadowAlpha; + m_renderCB->FiberSpacing = parameters->m_HairFiberSpacing; + + // original TressFX lighting parameters - two specular lobes approximating + // the Marschner R and and TRT lobes + diffuse component. + m_renderCB->MatKValue = { {{0.f, parameters->m_HairKDiffuse, parameters->m_HairKSpec1, parameters->m_HairSpecExp1}} }; + m_renderCB->HairKs2 = parameters->m_HairKSpec2; + m_renderCB->HairEx2 = parameters->m_HairSpecExp2; + + m_renderCB->CuticleTilt = parameters->m_HairCuticleTilt; + m_renderCB->Roughness = parameters->m_HairRoughness; + + m_renderCB->MaxShadowFibers = parameters->m_HairMaxShadowFibers; + + // Update Strand Parameters (per hair object) + m_strandCB->MatBaseColor = ToAMDFloat4(parameters->m_HairMatBaseColor); + m_strandCB->MatTipColor = ToAMDFloat4(parameters->m_HairMatTipColor); + m_strandCB->TipPercentage = parameters->m_TipPercentage; + m_strandCB->StrandUVTilingFactor = parameters->m_StrandUVTilingFactor; + m_strandCB->FiberRatio = parameters->m_FiberRatio; + m_strandCB->EnableThinTip = parameters->m_EnableThinTip; + m_strandCB->EnableStrandUV = parameters->m_EnableStrandUV; + + // Reset LOD hair density for the frame + m_LODHairDensity = 1.f; + float fiberRadius = parameters->m_FiberRadius; + + if (parameters->m_EnableHairLOD) + { + float MinLODDist = shadowUpdate ? + AZStd::min(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : + AZStd::min(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + float MaxLODDist = shadowUpdate ? + AZStd::max(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : + AZStd::max(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + + if (distance > MinLODDist) + { + float DistanceRatio = AZStd::min((distance - MinLODDist) / AZStd::max(MaxLODDist - MinLODDist, 0.00001f), 1.f); + + // Lerp: x + s(y-x) + float MaxLODFiberRadius = fiberRadius * (shadowUpdate ? parameters->m_ShadowLODWidthMultiplier : parameters->m_LODWidthMultiplier); + fiberRadius = fiberRadius + (DistanceRatio * (MaxLODFiberRadius - fiberRadius)); + + // Lerp: x + s(y-x) + m_LODHairDensity = 1.f + (DistanceRatio * ((shadowUpdate ? parameters->m_ShadowLODPercent : parameters->m_LODPercent) - 1.f)); + } + } + + m_strandCB->FiberRadius = fiberRadius; + m_strandCB->NumVerticesPerStrand = m_NumVerticesPerStrand; // Constant through the run per object + m_strandCB->NodePoolSize = nodePoolSize; + m_strandCB->RenderParamsIndex = m_RenderIndex; // Per Objects specific according to its index in the FP + } + + //!===================================================================================== + //! + //! Generic non tressFX Specific Methods + //! + //!------------------------------------------------------------------------------------- + //! This is the equivalent method to the TressFXObject constructor. + //! It prepares all dynamic and static buffers and load the data into them, then + //! creates all the Srgs associated with the buffers and the remaining structures + //! that drive skinning, simulation and rendering of the hair. + //!--------------------------------------------------------------------- + bool HairRenderObject::Init( + HairFeatureProcessor* featureProcessor, + const char* assetName, AMD::TressFXAsset* asset, + AMD::TressFXSimulationSettings* simSettings, AMD::TressFXRenderingSettings* renderSettings) + { + AZ_TRACE_METHOD(); + + ++s_objectCounter; + + AZ_Error("Hair Gem", featureProcessor, "Feature processor initialized as null hence preventing proper creation of hair"); + m_featureProcessor = featureProcessor; + + m_NumTotalVertices = asset->m_numTotalVertices; + m_NumTotalStrands = asset->m_numTotalStrands; + m_numGuideVertices = asset->m_numGuideVertices; + m_NumVerticesPerStrand = asset->m_numVerticesPerStrand; + m_NumFollowHairsPerGuideHair = asset->m_numFollowStrandsPerGuide; + + // dummy method - replace with the bone matrices at init pose and the real bones amount + InitBoneMatricesPlaceHolder(AMD_TRESSFX_MAX_NUM_BONES); + + // First time around, make sure all parameters are properly filled + const float SIMULATION_TIME_STEP = 0.0166667f; // 60 fps to start with nominal step + UpdateSimulationParameters(simSettings, SIMULATION_TIME_STEP); + + // [To Do] Hair - change to be dynamically calculated + const float distanceFromCamera = 1.0f; + const float updateShadows = false; + m_renderSettings = renderSettings; + m_simSettings = simSettings; + UpdateRenderingParameters(renderSettings, RESERVED_PIXELS_FOR_OIT, distanceFromCamera, updateShadows); + + if (!GetShaders()) + { + return false; + } + + //------------------------------------- + // Dynamic buffers, data and Srg creation - shared between passes and changed on the GPU + if (!m_dynamicHairData.CreateDynamicGPUResources( + m_skinningShader, m_PPLLFillShader, + m_NumTotalVertices, m_NumTotalStrands)) + { + AZ_Error("Hair Gem", false, "Hair - Error creating dynamic resources [%s]", assetName ); + return false; + } + m_dynamicHairData.UploadGPUData(assetName, asset->m_positions.data(), asset->m_tangents.data()); + + //------------------------------------- + // Static buffer, data and Srg creation + + m_hairGenerationSrg = UtilityClass::CreateShaderResourceGroup(m_skinningShader, "HairGenerationSrg", "Hair Gem"); + if (!m_hairGenerationSrg) + { + AZ_Error("Hair Gem", false, "Failed to create the hair generation resource group [m_hairGenerationSrg]"); + return false; + } + + if (!CreateAndBindHairGenerationBuffers(m_NumTotalVertices, m_NumTotalStrands)) + { + AZ_Error("Hair Gem", false, "Hair - Error creating static resources for asset [%s]", assetName); + return false; + } + + if (!UploadGPUData(assetName, asset)) + { + AZ_Error("Hair Gem", false, "Hair - Error copying hair generation static buffers [%s]", assetName); + return false; + } + + // Set up with defaults. + ResetPositions(); + + // Rendering setup + bool renderResourcesSuccess; + renderResourcesSuccess = CreateRenderingGPUResources(m_PPLLFillShader, *asset, assetName); + renderResourcesSuccess &= PopulateDrawStrandsBindSet(renderSettings); + renderResourcesSuccess &= UploadRenderingGPUResources(*asset); + + return renderResourcesSuccess; + } + + bool HairRenderObject::GetShaders() + { + { + // The skinning shader is used for generating the shared per Object srg + // Unlike per pass Srg that is uniquely bound to its shader, the other srgs can be + // used by multiple shaders - for example PerView, PerMaterial and PerScene + Data::Instance skinningPass = m_featureProcessor->GetHairSkinningComputegPass(); + if (!skinningPass.get()) + { + AZ_Error("Hair Gem", false, "Failed to get Skinning Pass."); + return false; + } + + m_skinningShader = skinningPass->GetShader(); + if (!m_skinningShader) + { + AZ_Error("Hair Gem", false, "Failed to get hair skinning shader from skinning pass"); + return false; + } + } + + { + Data::Instance rasterPass = m_featureProcessor->GetHairPPLLRasterPass(); + if (!rasterPass.get()) + { + AZ_Error("Hair Gem", false, "Failed to get PPLL raster fill Pass."); + return false; + } + + m_PPLLFillShader = rasterPass->GetShader(); + if (!m_PPLLFillShader) + { + AZ_Error("Hair Gem", false, "Failed to get hair raster fill shader from raster pass"); + return false; + } + } + + return true; + } + + void HairRenderObject::SetFrameDeltaTime(float deltaTime) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + m_frameDeltaTime = deltaTime; + m_simCB->SetTimeStep(deltaTime); + } + + bool HairRenderObject::Update() + { + bool updatedCB; + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + updatedCB = m_simCB.UpdateGPUData(); + updatedCB &= m_renderCB.UpdateGPUData(); + updatedCB &= m_strandCB.UpdateGPUData(); + } + + RPI::ShaderResourceGroup* simSrgForCompute = m_dynamicHairData.GetSimSrgForCompute().get(); + RPI::ShaderResourceGroup* simSrgForRaster= m_dynamicHairData.GetSimSrgForRaster().get(); + RPI::ShaderResourceGroup* generationSrg = m_hairGenerationSrg.get(); + RPI::ShaderResourceGroup* renderMaterialSrg = m_hairRenderSrg.get(); + if (!simSrgForCompute || !simSrgForRaster || !generationSrg || !renderMaterialSrg) + { + AZ_Error("Hair Gem", false, "Failed to get one of the Hair Object Srgs."); + return false; + } + + // Single compilation per frame + simSrgForCompute->Compile(); + simSrgForRaster->Compile(); + generationSrg->Compile(); + renderMaterialSrg->Compile(); + + IncreaseSimulationFrame(); + + return updatedCB; + } + + bool HairRenderObject::BuildPPLLDrawPacket(RHI::DrawPacketBuilder::DrawRequest& drawRequest) + { + RHI::DrawPacketBuilder drawPacketBuilder; + RHI::DrawIndexed drawIndexed; + + uint32_t numPrimsToRender = m_TotalIndices; + if (m_LODHairDensity < 1.0f) + { + numPrimsToRender /= 3; + numPrimsToRender = uint32_t(float(numPrimsToRender) * m_LODHairDensity); + + // Calculate a new number of Primitives to draw. Keep it aligned to number of primitives per strand (i.e. don't cut strands in half or anything) + uint32_t numPrimsPerStrand = (m_NumVerticesPerStrand - 1) * 2; + uint32_t remainderPrims = numPrimsToRender % numPrimsPerStrand; + + numPrimsToRender = (remainderPrims > 0) ? numPrimsToRender + numPrimsPerStrand - remainderPrims : numPrimsToRender; + + // Force prims to be on (guide hair + its follow hairs boundary... no partial groupings) + numPrimsToRender = numPrimsToRender - (numPrimsToRender % (numPrimsPerStrand * (m_NumFollowHairsPerGuideHair + 1))); + numPrimsToRender *= 3; + } + + drawIndexed.m_indexCount = numPrimsToRender; + drawIndexed.m_indexOffset = 0; + drawIndexed.m_vertexOffset = 0; + + drawPacketBuilder.Begin(nullptr); + drawPacketBuilder.SetDrawArguments(drawIndexed); + drawPacketBuilder.SetIndexBufferView(m_indexBufferView); + + RPI::ShaderResourceGroup* renderMaterialSrg = m_hairRenderSrg.get(); + RPI::ShaderResourceGroup* simSrg = m_dynamicHairData.GetSimSrgForRaster().get(); + + if (!renderMaterialSrg || !simSrg) + { + AZ_Error("Hair Gem", false, "Failed to get thre hair material Srg for the raster pass."); + return false; + } + // No need to compile the simSrg since it was compiled already by the Compute pass this frame + drawPacketBuilder.AddShaderResourceGroup(renderMaterialSrg->GetRHIShaderResourceGroup()); + drawPacketBuilder.AddShaderResourceGroup(simSrg->GetRHIShaderResourceGroup()); + drawPacketBuilder.AddDrawItem(drawRequest); + + if (m_fillDrawPacket) + { + delete m_fillDrawPacket; + } + m_fillDrawPacket = drawPacketBuilder.End(); + + if (!m_fillDrawPacket) + { + AZ_Error("Hair Gem", false, "Failed to build the hair DrawPacket."); + return false; + } + + return true; + } + + const RHI::DispatchItem* HairRenderObject::GetDispatchItem(RPI::Shader* computeShader) + { + auto dispatchIter = m_dispatchItems.find(computeShader); + if (dispatchIter == m_dispatchItems.end()) + { + AZ_Error("Hair Gem", false, "GetDispatchItem could not find the dispatch item based on the given shader resource group"); + return nullptr; + } + return dispatchIter->second->GetDispatchItem(); + } + + bool HairRenderObject::BuildDispatchItem(RPI::Shader* computeShader, DispatchLevel dispatchLevel) + { + RPI::ShaderResourceGroup* simSrg = m_dynamicHairData.GetSimSrgForCompute().get(); + RPI::ShaderResourceGroup* hairGenerationSrg = m_hairGenerationSrg.get(); + if (!simSrg || !hairGenerationSrg || !computeShader) + { + AZ_Error("Hair Gem", false, "Failed to get Skinning Pass or one of the Srgs."); + return false; + } + + uint32_t elementsAmount = + (dispatchLevel == DispatchLevel::DISPATCHLEVEL_VERTEX) ? + m_numGuideVertices : + m_NumTotalStrands; + + m_dispatchItems[computeShader] = aznew HairDispatchItem; + m_dispatchItems[computeShader]->InitSkinningDispatch( + computeShader, hairGenerationSrg, simSrg, elementsAmount ); + + return true; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h new file mode 100644 index 0000000000..fa4095eed0 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h @@ -0,0 +1,393 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include +#include + +// Hair specific +#include +#include +#include + +#include +#include +#include +#include + +#define TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION 64 + +namespace AMD +{ + struct float4x4; + + class TressFXAsset; + class TressFXRenderingSettings; + class TressFXSimulationSettings; +} + +namespace AZ +{ + namespace RHI + { + class DrawPacket; + } + + namespace RPI + { + class Model; + class Scene; + class Shader; + } + + namespace Render + { + + namespace Hair + { + class HairFeatureProcessor; + + //! TressFXStrandLevelData represents blended bone data per hair strand that once calculated + //! is passed between the skinning pass and the simulation shape constraints pass + struct TressFXStrandLevelData + { + AMD::float4 skinningQuat; + AMD::float4 vspQuat; + AMD::float4 vspTranslation; + }; + + //!----------------------------------------------------------------------------------------- + //! + //! DynamicHairData + //! + //!----------------------------------------------------------------------------------------- + //! Contains the writable data that is passed and used by 3 modules: + //! simulation, signed distance field (collisions), and rendering. + //! Rendering uses current position and tangent as SRVs in VS for computing creation and skinning. + //! Since this data is per object (hence per object dispatch) and requires sync point (barrier) between the + //! the passes, a single buffer is allocated and is shared by all hair objects and their 'streams' + //! where each have buffer view so that it points to its own portion of the original buffer's data. + //! The shared buffer is therefore declared in the pass Srg to result in an execution dependency + //! so that a barrier will be created. It also represents less overhead since we are using a single + //! coordinated / shared buffer sync point rather than many barriers (per object per buffer). + //!----------------------------------------------------------------------------------------- + class DynamicHairData + { + friend class HairRenderObject; + + public: + //! Creates the GPU dynamic buffers of a single hair object + //! Equivalent to TressFXDynamicHairData::CreateGPUResources + bool CreateDynamicGPUResources( + Data::Instance computeShader, + Data::Instance rasterShader, + uint32_t vertexCount, uint32_t strandsCount); + + //! Data upload - copy the hair mesh asset data (positions and tangents) into the buffers. + //! In the following line I assume that positions and tangents are of the same size. + //! Equivalent to: TressFXDynamicHairData::UploadGPUData + bool UploadGPUData(const char* name, void* positions, void* tangents); + + //! Preparation of the descriptors table of all the dynamic stream buffers within the class. + //! Do not call this method before calling CreateAndBindGPUResources as it is already called + //! from CreateAndBindGPUResources. + //! This method can be called also for retrieving the descriptors table (SharedBuffer) + static void PrepareSrgDescriptors( + AZStd::vector& descriptorArray, + int32_t vertexCount, uint32_t strandsCount); + + void PrepareSrgDescriptors(int32_t vertexCount, uint32_t strandsCount) + { + PrepareSrgDescriptors(m_dynamicBuffersDescriptors, vertexCount, strandsCount); + } + + Data::Instance GetSimSrgForCompute() { return m_simSrgForCompute; } + Data::Instance GetSimSrgForRaster() { return m_simSrgForRaster; } + + bool IsInitialized() { return m_initialized; } + + + private: + //! Matching between the buffers Srg and its buffers descriptors, this method fills the Srg with + //! the views of the buffers to be used by the hair instance. + bool BindPerObjectSrgForCompute(); + bool BindPerObjectSrgForRaster(); + + //! The descriptors required to allocate and associate the dynamic buffers with the SRGs + //! Each descriptor also contains the byte offsets of the sub-buffers in the global dynamic + //! array for the data copy. + AZStd::vector m_dynamicBuffersDescriptors; + + //! The following dynamic buffer views are views 'sub-buffers' located within a global large + //! dynamic buffer exposed and connected as an attachment between the passes and therefore + //! creates both dependency order between passes execution and sync point barrier. + //! This indirectly forces the sync to be applied to all 'sub-buffers' used by each of the + //! HairObjects / HairDispatches and therefore allows us to change their data in the shader + //! between passes. + AZStd::vector> m_dynamicBuffersViews; // RW used for the Compute + AZStd::vector> m_readBuffersViews; // Read only used for the Raster fill + + //! The following vector is required in order to keep the allocators 'alive' or + //! else they are cleared from the buffer via the reference mechanism. + AZStd::vector> m_dynamicViewAllocators; + + //------------------------------------------------------------------ + //! The following SRGs are the ones represented by this class' data. + //! These Srgs are required for the changed dynamic data passed between the + //! skinning, simulation and rendering passes / shaders. + //! It is the TressFX equivalent of the set: + //! - pSimPosTanLayout / m_pSimBindSets + //------------------------------------------------------------------ + Data::Instance m_simSrgForCompute; //! TressFX equivalent: pSimPosTanLayout / m_pSimBindSets + Data::Instance m_simSrgForRaster; //! Targeting only the Fill pass / shader + + bool m_initialized = false; + }; + + + //!----------------------------------------------------------------------------------------- + //! + //! HairRenderObject + //! + //!----------------------------------------------------------------------------------------- + //! This class is equivalent to TressFXHairObject and HairStrands (the later is mainly a wrapper). + //! This is the class that holds all the raw data used by all the hair passes and shaders. + //!----------------------------------------------------------------------------------------- + class HairRenderObject final + : public Data::InstanceData + { + friend HairFeatureProcessor; + + public: + AZ_RTTI(HairRenderObject, "{58F48A58-C5B9-4CAE-9AFD-9B3AF3A01C73}"); + HairRenderObject() = default; + ~HairRenderObject(); + + void Release(); + + bool Init( + HairFeatureProcessor* featureProcessor, const char* assetName, AMD::TressFXAsset* asset, + AMD::TressFXSimulationSettings* simSettings, AMD::TressFXRenderingSettings* renderSettings + ); + + //! Creates and fill the draw item associated with the PPLL render of the + //! current hair object + const RHI::DrawPacket* GetFillDrawPacket() + { + return m_fillDrawPacket; + } + + bool BuildPPLLDrawPacket(RHI::DrawPacketBuilder::DrawRequest& drawRequest); + + //! Creates and fill the dispatch item associated with the compute shader + bool BuildDispatchItem(RPI::Shader* computeShader, DispatchLevel dispatchLevel); + + const RHI::DispatchItem* GetDispatchItem(RPI::Shader* computeShader); + + void PrepareHairGenerationSrgDescriptors(uint32_t vertexCount, uint32_t numStrands); + + // Based on SkinnedMeshInputLod::CreateStaticBuffer + bool CreateAndBindHairGenerationBuffers(uint32_t vertexCount, uint32_t strandsCount); + + //! Updates the buffers data for the hair generation. + //! Does NOT update the bone matrices - they will be updated every frame. + bool UploadGPUData(const char* name, AMD::TressFXAsset* asset); + + Data::Instance GetHairGenerationSrg() + { + return m_hairGenerationSrg; + } + + bool BindPerObjectSrgForCompute() + { + return m_dynamicHairData.IsInitialized() ? m_dynamicHairData.BindPerObjectSrgForCompute() : false; + } + + bool BindPerObjectSrgForRaster() + { + return m_dynamicHairData.IsInitialized() ? m_dynamicHairData.BindPerObjectSrgForRaster() : false; + } + + //!----------------------------------------------------------------- + //! Methods partially imported from TressFXHairObject + //!----------------------------------------------------------------- + int GetNumTotalHairVertices() const { return m_NumTotalVertices; } + int GetNumTotalHairStrands() const { return m_NumTotalStrands; } + int GetNumVerticesPerStrand() const { return m_NumVerticesPerStrand; } + int GetCPULocalShapeIterations() const { return m_CPULocalShapeIterations; } + int GetNumFollowHairsPerGuideHair() const { return m_NumFollowHairsPerGuideHair; } + int GetNumGuideHairs() const + { + return GetNumTotalHairStrands() / (GetNumFollowHairsPerGuideHair() + 1); + } + //! This method is mainly a wrapper around BindRenderSrgResources to keep the + //! connection in code to the TressFX method. + //! Bind Render Srg (m_hairRenderSrg) resources. No resources data update should be doe here + //! Notice that this also loads the images and is slower if a new asset is required. + //! If the image was not changed it should only bind without the retrieve operation. + bool PopulateDrawStrandsBindSet(AMD::TressFXRenderingSettings* pRenderSettings/*=nullptr*/); + + // This function will be called when the image asset changed for the component. + bool LoadImageAsset(AMD::TressFXRenderingSettings* pRenderSettings); + + bool UploadRenderingGPUResources(AMD::TressFXAsset& asset); + + //! Creation of the render Srg m_hairRenderSrg, followed by creation and binding of the + //! GPU render resources: vertex thickness, vertex UV, hair albedo maps and two constant buffers. + bool CreateRenderingGPUResources( + Data::Instance shader, AMD::TressFXAsset& asset, const char* assetName); + + bool Update(); + + //! This method needs to be called in order to fill the bone matrices before the skinning + void UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices); + //! update of the skinning matrices per frame. The matrices are in model / local space + //! which is why the entity world matrix is also passed. + void UpdateBoneMatrices(const AZ::Matrix3x4& entityWorldMatrix, const AZStd::vector& boneMatrices); + void InitBoneMatricesPlaceHolder(int numBoneMatrices); + + void SetFrameDeltaTime(float deltaTime); + //! Updating the bone matrices for the skinning in the simulation constant buffer. + //! pBoneMatricesInWS constraints array of column major bone matrices in world space. + void UpdateRenderingParameters( + const AMD::TressFXRenderingSettings* parameters, const int nodePoolSize, + float distance, bool shadowUpdate /*= false*/); + + AMD::TressFXRenderParams* GetHairRenderParams() { return m_renderCB.get(); }; + + //! Update of simulation constant buffer. + //! Notice that the bone matrices are set elsewhere and should be updated before GPU submit. + void UpdateSimulationParameters(const AMD::TressFXSimulationSettings* settings, float timeStep); + + void SetWind(const Vector3& windDir, float windMag, int frame); + void SetRenderIndex(uint32_t renderIndex) { m_RenderIndex = renderIndex; } + + void ResetPositions() { m_simCB->g_ResetPositions = 1.0f; } + void IncreaseSimulationFrame() + { + m_simCB->g_ResetPositions = (m_SimulationFrame < 2) ? 1.0f : 0.0f; + m_SimulationFrame++; + } + + bool IsEnabled() + { + return m_enabled; + } + + void SetEnabled(bool enable) + { + m_enabled = enable; + } + //!----------------------------------------------------------------- + + private: + //----------------------- Private Methods -------------------------- + bool BindRenderSrgResources(); + void PrepareRenderSrgDescriptors(); + bool GetShaders(); + + //------------------------------ Data ------------------------------ + static uint32_t s_objectCounter; + + //! The feature processor is the centralized class that gathers all render nodes and + //! responsible for the various stages and passes' updates + HairFeatureProcessor* m_featureProcessor = nullptr; + + //! The dispatch item used for the skinning + HairDispatchItem m_skinningDispatchItem; + + //! Compute dispatch items map per the existing passes + AZStd::map> m_dispatchItems; + + //! Skinning compute shader used for creation of the compute Srgs and dispatch item + Data::Instance m_skinningShader = nullptr; + + //! PPLL fill shader used for creation of the raster Srgs and draw item + Data::Instance m_PPLLFillShader = nullptr; + + float m_frameDeltaTime = 0.02; + + //! The following are the configuration settings that might be required during the update. + AMD::TressFXSimulationSettings* m_simSettings = nullptr; + AMD::TressFXRenderingSettings* m_renderSettings = nullptr; + + //! Hair asset information + uint32_t m_TotalIndices = 0; + uint32_t m_NumTotalVertices = 0; + uint32_t m_numGuideVertices = 0; + uint32_t m_NumTotalStrands = 0; + uint32_t m_NumVerticesPerStrand = 0; + uint32_t m_CPULocalShapeIterations = 0; + uint32_t m_NumFollowHairsPerGuideHair = 0; + + // LOD calculations factor + float m_LODHairDensity = 1.0f; + + bool m_enabled = true; + + //! Controls reset / copy base hair state + uint32_t m_SimulationFrame = 0; + //! The index used as a look up into the material array during the resolve pass + uint32_t m_RenderIndex = 0; + + //!----------------------------------------------------------------- + //! The hair dynamic per instance buffers such as vertices, tangents, etc.. + //! The data of these buffers is read/write and will change between passes. + DynamicHairData m_dynamicHairData; + + //!----------------------------------------------------------------- + //! Static buffers & Srg: Initial position, bones transform skinning + //! data, physical hair properties.. + //!----------------------------------------------------------------- + AZStd::vector> m_hairGenerationBuffers; + AZStd::vector m_hairGenerationDescriptors; + //! The simulation parameters constant buffer. + HairUniformBuffer m_simCB; + Data::Instance m_hairGenerationSrg; + + //!----------------------------------------------------------------- + //! TressFXRenderParams Srg buffers and declarations + //! The rendering buffers and structures required for the render draw + //! calls and are sent to the GPU using TressFXRenderParams Srg. + //!----------------------------------------------------------------- + //! Vertex and UV buffers. + //! Naming was not changed to preserve correlation to TressFXHairObject.h + Data::Instance m_hairVertexRenderParams; + Data::Instance m_hairTexCoords; + + //! Base color of the hair root and per strand texture. + Data::Instance m_baseAlbedo; + Data::Instance m_strandAlbedo; + + HairUniformBuffer m_renderCB; + HairUniformBuffer m_strandCB; + + AZStd::vector m_hairRenderDescriptors; + // Equivalent to m_pRenderLayoutBindSet in TressFX. + Data::Instance m_hairRenderSrg; + + //! Index buffer for the render pass via draw calls - naming was kept + Data::Instance m_indexBuffer; + RHI::IndexBufferView m_indexBufferView; + + //! DrawPacket for the multi object raster fill pass. + const RHI::DrawPacket* m_fillDrawPacket = nullptr; + //------------------------------------------------------------------- + + AZStd::mutex m_mutex; + }; + + } // namespace Hair + + } // namespace Render + +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairSharedBufferInterface.h b/Gems/AtomTressFX/Code/Rendering/HairSharedBufferInterface.h new file mode 100644 index 0000000000..9b45e56742 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairSharedBufferInterface.h @@ -0,0 +1,128 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace AZ +{ + namespace RHI + { + class Buffer; + class BufferView; + } + + namespace RPI + { + class BufferAsset; + class Buffer; + } + + namespace Render + { + class HairSharedBufferAllocation; + + //! A class for allocating memory for skinning buffers + class HairSharedBufferInterface + { + public: + AZ_RTTI(AZ::Render::HairSharedBufferInterface, "{3CCB13CB-16FF-43F5-98DC-F36B2A9F8E5E}"); + + HairSharedBufferInterface() + { + Interface::Register(this); + } + + virtual ~HairSharedBufferInterface() + { + Interface::Unregister(this); + } + + static HairSharedBufferInterface* Get() + { + return Interface::Get(); + } + + //! Returns the shared buffer asset used for all Hair objects and passes + virtual Data::Asset GetBufferAsset() const = 0; + + //! Returns the buffer that is used for all skinned mesh outputs + virtual Data::Instance GetBuffer() = 0; + + //! If the allocation succeeds, returns a ref-counted pointer to a VirtualAddress which will be automatically freed if the ref-count drops to zero + //! If the allocation fails, returns nullptr + virtual AZStd::intrusive_ptr Allocate(size_t byteCount) = 0; + + //! Mark the memory as available and queue garbage collection to recycle it later (see RHI::Allocator::DeAllocate) + //! After garbage collection is done signal handlers that memory has been freed + virtual void DeAllocate(RHI::VirtualAddress allocation) = 0; + + //! Same as DeAllocate, but the signal after garbage collection is ignored + //! If multiple allocations succeeded before one failed, use this to release the successful allocations + //! without triggering new events indicating that new memory has been freed + virtual void DeAllocateNoSignal(RHI::VirtualAddress allocation) = 0; + + //! Update buffer's content with sourceData at an offset of bufferByteOffset + virtual bool UpdateData(const void* sourceData, uint64_t sourceDataSizeInBytes, uint64_t bufferByteOffset = 0) = 0; + + // Note that you have to delete these for safety reasons, you will trip a static_assert if you do not + AZ_DISABLE_COPY_MOVE(HairSharedBufferInterface); + }; + + class HairSharedBufferNotifications + : public AZ::EBusTraits + { + public: + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + + //! This event will fire if memory is freed up, so a listener can wait for there to be free space + //! and attempt to allocate memory again if it failed initially + virtual void OnSharedBufferMemoryAvailable() = 0; + }; + using SharedBufferNotificationBus = AZ::EBus; + + //! An intrusive_ptr wrapper around an RHI::Allocation that will automatically free the memory + //! from the SharedBuffer when the ref count drops to zero + class HairSharedBufferAllocation + : public AZStd::intrusive_base + { + public: + AZ_CLASS_ALLOCATOR(HairSharedBufferAllocation, AZ::SystemAllocator, 0); + explicit HairSharedBufferAllocation(RHI::VirtualAddress virtualAddress) + : m_virtualAddress(virtualAddress) + {} + + ~HairSharedBufferAllocation() + { + if (!m_suppressSignalOnDeallocate) + { + HairSharedBufferInterface::Get()->DeAllocate(m_virtualAddress); + } + else + { + HairSharedBufferInterface::Get()->DeAllocateNoSignal(m_virtualAddress); + } + } + + //! If this function is called, the SharedBuffer will not signal when the memory is freed + void SuppressSignalOnDeallocate() { m_suppressSignalOnDeallocate = true; } + RHI::VirtualAddress GetVirtualAddress() const { return m_virtualAddress; } + private: + RHI::VirtualAddress m_virtualAddress; + bool m_suppressSignalOnDeallocate = false; + }; + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/SharedBuffer.cpp b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.cpp new file mode 100644 index 0000000000..dd5b23907e --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.cpp @@ -0,0 +1,258 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + //! Setting the constructor as private will create compile error to remind the developer to set + //! the buffer Init in the FeatureProcessor and initialize properly + + SharedBuffer::SharedBuffer() + { + AZ_Warning("SharedBuffer", false, "Missing information to properly create SharedBuffer. Init is required"); + } + + SharedBuffer::SharedBuffer(AZStd::string bufferName, AZStd::vector& buffersDescriptors) + { + m_bufferName = bufferName; + Init(bufferName, buffersDescriptors); + } + + SharedBuffer::~SharedBuffer() + { + m_bufferAsset = {}; + } + + //! Crucial method that will ensure that the alignment for the BufferViews is always kept. + //! This is important when requesting a BufferView as the offset needs to be aligned according + //! to the element type of the buffer. + void SharedBuffer::CalculateAlignment(AZStd::vector& buffersDescriptors) + { + m_alignment = 1; + for (uint8_t bufferIndex = 0; bufferIndex < buffersDescriptors.size() ; ++bufferIndex) + { + // Using the least common multiple enables resource views to be typed and ensures they can get + // an offset in bytes that is a multiple of an element count + m_alignment = std::lcm(m_alignment, buffersDescriptors[bufferIndex].m_elementSize); + } + } + + void SharedBuffer::InitAllocator() + { + RHI::FreeListAllocator::Descriptor allocatorDescriptor; + allocatorDescriptor.m_alignmentInBytes = m_alignment; + allocatorDescriptor.m_capacityInBytes = m_sizeInBytes; + allocatorDescriptor.m_policy = RHI::FreeListAllocatorPolicy::BestFit; + allocatorDescriptor.m_garbageCollectLatency = 0; + m_freeListAllocator.Init(allocatorDescriptor); + } + + void SharedBuffer::CreateBuffer() + { + SrgBufferDescriptor descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, RHI::Format::Unknown, + sizeof(float), uint32_t(m_sizeInBytes / sizeof(float)), + Name{ "HairSharedDynamicBuffer" }, Name{ "m_skinnedHairSharedBuffer" }, 0, 0 + ); + m_buffer = Hair::UtilityClass::CreateBuffer("Hair Gem", descriptor, nullptr); + } + + void SharedBuffer::CreateBufferAsset() + { + // Create the shared buffer pool + { + auto bufferPoolDesc = AZStd::make_unique(); + // Output buffers are both written to during skinning and used as input assembly buffers + bufferPoolDesc->m_bindFlags = RHI::BufferBindFlags::ShaderReadWrite | RHI::BufferBindFlags::Indirect; + bufferPoolDesc->m_heapMemoryLevel = RHI::HeapMemoryLevel::Device; + bufferPoolDesc->m_hostMemoryAccess = RHI::HostMemoryAccess::Write; + + RPI::ResourcePoolAssetCreator creator; + creator.Begin(Uuid::CreateRandom()); + creator.SetPoolDescriptor(AZStd::move(bufferPoolDesc)); + creator.SetPoolName("SharedBufferPool"); + creator.End(m_bufferPoolAsset); + } + + // Create the shared buffer + { + RPI::BufferAssetCreator creator; + Uuid uuid = Uuid::CreateRandom(); + creator.Begin(uuid); + creator.SetBufferName(m_bufferName); + creator.SetPoolAsset(m_bufferPoolAsset); + + RHI::BufferDescriptor bufferDescriptor; + bufferDescriptor.m_bindFlags = RHI::BufferBindFlags::ShaderReadWrite | RHI::BufferBindFlags::Indirect; + bufferDescriptor.m_byteCount = m_sizeInBytes; + bufferDescriptor.m_alignment = m_alignment; + creator.SetBuffer(nullptr, 0, bufferDescriptor); + + RHI::BufferViewDescriptor viewDescriptor; + viewDescriptor.m_elementFormat = RHI::Format::Unknown; + + // [To Do] - set this as AZ::Vector4 for offset approach shader code optimization + viewDescriptor.m_elementSize = sizeof(float); + viewDescriptor.m_elementCount = aznumeric_cast(m_sizeInBytes) / sizeof(float); + viewDescriptor.m_elementOffset = 0; + creator.SetBufferViewDescriptor(viewDescriptor); + + creator.End(m_bufferAsset); + } + } + + void SharedBuffer::Init(AZStd::string bufferName, AZStd::vector& buffersDescriptors) + { + m_bufferName = bufferName; + // m_sizeInBytes = 256u * (1024u * 1024u); + // + // [To Do] replace this with max size request for allocation that can be given by the calling function + // This has the following problems: + // 1. The need to have this aggregated size in advance + // 2. The size might grow dynamically between frames + // 3. Due to having several stream buffers (position, tangent, structured), alignment padding + // size calculation must be added. + // Requirement: the buffer already has an assert on allocation beyond the memory. In the future it should + // support greedy memory allocation when memory has reached its end. This must not invalidate the buffer during + // the current frame, hence allocation of second buffer, fence and a copy must take place. + + CalculateAlignment(buffersDescriptors); + + InitAllocator(); + + CreateBuffer(); + + SystemTickBus::Handler::BusConnect(); + } + + AZStd::intrusive_ptr SharedBuffer::Allocate(size_t byteCount) + { + RHI::VirtualAddress result; + { + AZStd::lock_guard lock(m_allocatorMutex); + result = m_freeListAllocator.Allocate(byteCount, m_alignment); + } + + if (result.IsValid()) + { + return aznew HairSharedBufferAllocation(result); + } + + return nullptr; + } + + void SharedBuffer::DeAllocate(RHI::VirtualAddress allocation) + { + if (allocation.IsValid()) + { + { + AZStd::lock_guard lock(m_allocatorMutex); + m_freeListAllocator.DeAllocate(allocation); + } + + m_memoryWasFreed = true; + m_broadcastMemoryAvailableEvent = true; + } + } + + void SharedBuffer::DeAllocateNoSignal(RHI::VirtualAddress allocation) + { + if (allocation.IsValid()) + { + { + AZStd::lock_guard lock(m_allocatorMutex); + m_freeListAllocator.DeAllocate(allocation); + } + m_memoryWasFreed = true; + } + } + + Data::Asset SharedBuffer::GetBufferAsset() const + { + return m_bufferAsset; + } + + Data::Instance SharedBuffer::GetBuffer() + { + if (!m_buffer) + { + m_buffer = RPI::Buffer::FindOrCreate(m_bufferAsset); + } + return m_buffer; + } + + //! Update buffer's content with sourceData at an offset of bufferByteOffset + bool SharedBuffer::UpdateData(const void* sourceData, uint64_t sourceDataSizeInBytes, uint64_t bufferByteOffset) + { + AZStd::lock_guard lock(m_allocatorMutex); + if (m_buffer.get()) + { + return m_buffer->UpdateData(sourceData, sourceDataSizeInBytes, bufferByteOffset); + } + AZ_Assert(false, "SharedBuffer error in data allocation - the buffer doesn't exist yet"); + return false; + } + + void SharedBuffer::OnSystemTick() + { + GarbageCollect(); + } + + void SharedBuffer::GarbageCollect() + { + if (m_memoryWasFreed) + { + m_memoryWasFreed = false; + { + AZStd::lock_guard lock(m_allocatorMutex); + m_freeListAllocator.GarbageCollect(); + } + if (m_broadcastMemoryAvailableEvent) + { + SharedBufferNotificationBus::Broadcast(&SharedBufferNotificationBus::Events::OnSharedBufferMemoryAvailable); + m_broadcastMemoryAvailableEvent = false; + } + } + } + + //! Utility function to create a resource view of different type than the shared buffer data. + //! Since this class is sub-buffer container, this method should be used after creating + //! a new allocation to be used as a sub-buffer. + //! Notice the alignment required according to the element size - this might need + RHI::BufferViewDescriptor SharedBuffer::CreateResourceViewWithDifferentFormat( + uint32_t offsetInBytes, uint32_t elementCount, uint32_t elementSize, + RHI::Format format, RHI::BufferBindFlags overrideBindFlags) + { + RHI::BufferViewDescriptor viewDescriptor; + + // In the following line I use the element size and not the size based of the + // element format since in the more interesting case of structured buffer, the + // size will result in an error. + uint32_t elementOffset = offsetInBytes / elementSize; + viewDescriptor.m_elementOffset = elementOffset; + viewDescriptor.m_elementCount = elementCount; + viewDescriptor.m_elementFormat = format; + viewDescriptor.m_elementSize = elementSize; + viewDescriptor.m_overrideBindFlags = overrideBindFlags; + return viewDescriptor; + } + + }// namespace Render +}// namespace AZ + diff --git a/Gems/AtomTressFX/Code/Rendering/SharedBuffer.h b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.h new file mode 100644 index 0000000000..8cf6620d78 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include +#include +#include + +#include + +// Hair specific +#include + +namespace AZ +{ + namespace RPI + { + class BufferAsset; + class Buffer; + } + + namespace Render + { + //! This structure contains information regarding the naming of the buffer on both the CPU + //! and the GPU + //! This structure is also used to determine the maximum alignment required for the buffer + //! when allocating sub-buffers + struct SrgBufferDescriptor + { + //! Pool type to determine how a resource pool should be generated. + RPI::CommonBufferPoolType m_poolType; + //! The format used for the buffer + //! Should be Unknown for structured buffers, or R32 for raw buffers. + RHI::Format m_elementFormat; + //! The size in bytes of each element in the stream + uint32_t m_elementSize; + //! Amount of elements required to create the buffer + uint32_t m_elementCount; + //! The name used for the buffer view + Name m_bufferName; + //! The name used by the shader Srg in the GPU for this shader parameter + Name m_paramNameInSrg; + //! The assigned SRG slot in the CPU / GPU for this shader resource + uint32_t m_resourceShaderIndex; + //! If using a buffer view within a shared buffer, this represents + //! the view offset from the shared buffer origin in bytes. + uint32_t m_viewOffsetInBytes; + + SrgBufferDescriptor() = default; + SrgBufferDescriptor( + RPI::CommonBufferPoolType poolType, + RHI::Format elementFormat, + uint32_t elementSize, + uint32_t elementCount, + Name bufferName, + Name paramNameInSrg, + uint32_t resourceShaderIndex, + uint32_t viewOffsetInBytes + ) : m_poolType(poolType), m_elementFormat(elementFormat), + m_elementSize(elementSize), m_elementCount(elementCount), + m_bufferName(bufferName), m_paramNameInSrg(paramNameInSrg), + m_resourceShaderIndex(resourceShaderIndex), m_viewOffsetInBytes(viewOffsetInBytes) + {}; + }; + + //! This class represents a single RPI::Buffer used to allocate sub-buffers from the + //! existing buffer that can then be used per draw. In a way, this buffer is used as a memory + //! pool from which sub-buffers are being created. + //! This is very useful when we want to synchronize the use of these buffers via barriers + //! so we declare and pass the entire buffer between passes and therefore we are creating + //! a dependency and barrier for this single buffer, yet as a result all sub-buffers are + //! now getting synced between passes. + //! + // Adopted from SkinnedMeshOutputStreamManager in order to make it more generic and context free usage + class SharedBuffer + : public HairSharedBufferInterface + , private SystemTickBus::Handler + { + public: + SharedBuffer(); + SharedBuffer(AZStd::string bufferName, AZStd::vector& buffersDescriptors); + + AZ_RTTI(AZ::Render::SharedBuffer, "{D910C301-99F7-41B6-A2A6-D566F3B2C030}", AZ::Render::HairSharedBufferInterface); + + ~SharedBuffer(); + void Init(AZStd::string bufferName, AZStd::vector& buffersDescriptors); + + // SharedBufferInterface + AZStd::intrusive_ptr Allocate(size_t byteCount) override; + void DeAllocate(RHI::VirtualAddress allocation) override; + void DeAllocateNoSignal(RHI::VirtualAddress allocation) override; + Data::Asset GetBufferAsset() const override; + + Data::Instance GetBuffer() override; + + //! Update buffer's content with sourceData at an offset of bufferByteOffset + bool UpdateData(const void* sourceData, uint64_t sourceDataSizeInBytes, uint64_t bufferByteOffset = 0) override; + + //! Utility function to create a resource view of different type than the shared buffer data. + //! Since this class is sub-buffer container, this method should be used after creating + //! a new allocation to be used as a sub-buffer. + static RHI::BufferViewDescriptor CreateResourceViewWithDifferentFormat( + uint32_t offsetInBytes, uint32_t elementCount, uint32_t elementSize, + RHI::Format format, RHI::BufferBindFlags overrideBindFlags); + + private: + // SystemTickBus + void OnSystemTick() override; + + void GarbageCollect(); + void CalculateAlignment(AZStd::vector& buffersDescriptors); + void InitAllocator(); + void CreateBufferAsset(); + void CreateBuffer(); + + + AZStd::string m_bufferName = "GenericSharedBuffer"; + Data::Asset m_bufferPoolAsset; + Data::Instance m_buffer = nullptr; + Data::Asset m_bufferAsset = {}; + + RHI::FreeListAllocator m_freeListAllocator; + AZStd::mutex m_allocatorMutex; + uint64_t m_alignment = 16; // This will be overridden by the size of the largest allocated element + //! Currently the shared buffer size is fixed. Going towards dynamic size can be a better + //! solution but requires using re-allocations and proper synchronizing between all existing buffers. + //! This amount of memory should be enough for 2-3 very details cinematic hair or for 4-6 high + //! fidelity hair objects. + //! Additional attention should be given to the fact that because the buffers in Atom are NOT triple + //! buffered but instead they are delayed via garbage collection mechanism, during reallocation + //! the amount of memory required might reach close to double of the run-time. + size_t m_sizeInBytes = 256u * (1024u * 1024u); + bool m_memoryWasFreed = false; + bool m_broadcastMemoryAvailableEvent = false; + }; + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/External/Assets/Objects/MissingAssets.txt b/Gems/AtomTressFX/External/Assets/Objects/MissingAssets.txt new file mode 100644 index 0000000000..1b5ce35bcf --- /dev/null +++ b/Gems/AtomTressFX/External/Assets/Objects/MissingAssets.txt @@ -0,0 +1,2 @@ +The assets in this folder (HairAsset and RatBoy folders) were removed and can be downloaded from GitHub: +https://github.com/GPUOpen-Effects/TressFX/tree/master/bin/Objects diff --git a/Gems/AtomTressFX/External/CMakeLists.txt b/Gems/AtomTressFX/External/CMakeLists.txt new file mode 100644 index 0000000000..e6ed29a910 --- /dev/null +++ b/Gems/AtomTressFX/External/CMakeLists.txt @@ -0,0 +1,2 @@ +#add_subdirectory(Code) + diff --git a/Gems/AtomTressFX/External/Code/CMakeLists.txt b/Gems/AtomTressFX/External/Code/CMakeLists.txt new file mode 100644 index 0000000000..002b099c88 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/CMakeLists.txt @@ -0,0 +1,8 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# +#add_subdirectory(src) +#add_subdirectory(LYIntegration) diff --git a/Gems/AtomTressFX/External/Code/README.md b/Gems/AtomTressFX/External/Code/README.md new file mode 100644 index 0000000000..4f532b77b4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/README.md @@ -0,0 +1,117 @@ +# AMD TressFX + +![AMD TressFX](http://gpuopen.com/GitHub_Media/TressFX4.1-wideshot1.jpg) + +The TressFX library is AMD's hair/fur rendering and simulation technology. TressFX is designed to use the GPU to simulate and render high-quality, realistic hair and fur. +The TressFX/Radeon® Cauldron sample is built on top of Radeon® Cauldron, which is an open sourced framework used at AMD for sample creation. It supports both DirectX® 12 and Vulkan® through a custom wrapper layer. For more information about Radeon® Cauldron, or to download the source/examples, please refer to https://gpuopen.com/gamingproduct/caudron-framework/. + +With this release we aim to make it easier for developers to integrate TressFX into an existing codebase. +Additionally, TressFX 4.1 provides some performance and feature updates compared to TressFX 4.0 including faster Velocity Shock Propagation, simplified Local Shape Constraints, a reorganization of dispatches, new rendering features, extensive documentation and tutorials as well as an updated TressFX Exporter for Autodesk® Maya®. + +This release also demonstrates TressFX integration with Epic Games Unreal Engine (4.22), a minimal integration but with multiple TressFX components, features, and rendering and simulation materials to help ease-of-use within Unreal engine. Developers wishing to further the integration or customize it for their own requirements should find this basic level of integration a helpful first step in that process. + +
+ Latest release +
+ +### Highlights include the following: +* Designed for optimized rendering and simulation +* Hair and fur support, with high quality anti-aliasing +* Animation/skinning support +* Epic Games Unreal 4.22 engine integration (engine patch available) +* TressFX/Radeon® Cauldron implementation +* Autodesk® Maya® plugin provided for hair/fur and collision authoring +* Full source code provided + +![AMD TressFX](http://gpuopen.com/GitHub_Media/TressFX4.1-wideshot2.jpg) + +### New in TressFX 4.1 +* TressFX/Radeon® Cauldron implementation with full source code (DirectX® 12 and Vulkan®) +* Optimized physics simulation shaders allowing more hair to be simulated in real-time + * faster Velocity Shock Propagation, simplified Local Shape Constraints, reorganization of dispatches +* New rendering features + * StrandUV and Hair Parameter Blending* +* New Level of Detail (LOD) system +* Extensive documentation and tutorials +* Updated Autodesk® Maya® Exporter with new UI and new features/error checking +* TressFX/Epic Games Unreal 4.22 engine integration (patch under Epic Games Unreal GitHub repository) (See https://github.com/GPUOpenSoftware/UnrealEngine/tree/TressFX-4.22) + +*Hair Parameter Blending currently only available under TressFX/Unreal. Please see included documentation for more details. + + +### New in TressFX 4.0 +* Hair is skinned directly, rather than through triangle stream-out. +* Signed distance field (SDF) collision, including compute shaders to generate the SDF from a dynamic mesh. +* New system for handling fast motion. +* Refactored to be more engine / API agnostic. +* Example code includes compute-based skinning and marching cubes generation. +* DirectX® 12 support + +### Integrating TressFX + +With this release we aim to provide two things: + +* A self-contained solution for hair simulation +* A reference renderer for hair + +This is to provide an easy starting point for developers that want to integrate TressFX with their own technology. To that end, this update iterates on the "Engine Interface" that was introduced with TressFX 4.0. Both the renderer and the simulation go through this interface. +Developers that wish to implement their own hair rendering solution can use this interface to integrate into their own pipeline. They can use the renderer we provide as a guide. The hair simulation consists of asset loading code and the TressFX compute shaders which should be self contained enough to be integrated into another codebase without substantial changes to the source files. +To do this, a developer can implement all necessary functions using our Engine Interface, or replace it with their own calls and data structures (the latter method would be similar to the AMD TressFX/Epic Games Unreal integration, which is tightly bound to Unreal engine architecture). + +For more information, please consult the included documentation (for both TressFX/Radeon® Cauldron and TressFX/Epic Games Unreal engine integration). + +### Prerequisites +* AMD Radeon™ GCN-based GPU (HD 7000 series or newer) or AMD Radeon™ RDNA-based GPU (5000 series or newer) + * Or other DirectX® 12 or Vulkan® compatible GPU with Shader Model 6** support +* 64-bit Windows® 7 (SP1 with the [Platform Update](https://msdn.microsoft.com/en-us/library/windows/desktop/jj863687.aspx)), Windows 8.1, or Windows 10 +* Visual Studio 2019 or Visual Studio 2017 +* Windows® 10 required for DirectX® 12 +* CMake 3.4 (for Cauldron compatibility) +* Vulkan® SDK 1.1.106 (for Cauldron compatibility) +* TressFX/Epic Games Unreal engine integration dependent upon Unreal 4.22 prerequisites (and will compile and run under DirectX® 11 and DirectX® 12) + + +** For the Cauldron framework to take advantage of DXIL support across DirectX® 12 and Vulkan®, Shader Model 6 was used. Shader Model 5 should work but was not explicitly tested. + +### Getting started + +#### Running the demo +* Install CMake 3.4 if you haven't already +* Install the Vulkan® SDK for the Vulkan solution +* Visual Studio solutions for VS2019, VS2017, DirectX® 12 or Vulkan®, can be generated by running "GenerateSolutions.bat" in the "build folder. +* Compile the solution +* Run `TressFX_DX12.exe` or `TressFX_VK.exe` in `bin`. + +#### Folder Structure +* src/ AMD Radeon® Cauldron specific TressFX code shared between DirectX® 12 and Vulkan® + * src/Math TressFX math libraries + * src/Shaders Shader sources in HLSL are here. Cauldron supports HLSL for both DirectX® 12 and Vulkan®. + * src/TressFX Platform agnostic TressFX files + * src/Common Cauldron specific, but rendering API agnostic, implementation + * src/VK Cauldron/Vulkan® specific code (contains an engine interface implementation for Vulkan®) + * src/DX12 Cauldron/DirectX® 12 specific code (contains an engine interface implementation for DirectX® 12) +* maya-plugin/ Contains the python Autodesk® Maya® plugin. It is identical to the Exporter plugin used in Unreal +* doc/ Contains documentation including developer guide (shared by AMD Radeon® Cauldron and Epic Games Unreal engine TressFX implementations) +* libs/cauldron/ Contains AMD Radeon® Cauldron open source library for demo creation + +### Previous releases +TressFX 4.1 is a substantial change from the prior TressFX 4.0 release. +A separate branch for TressFX 4.0 and 3.1.1 has been created for the convenience of users that have +been working with TressFX 3. +* [TressFX 4.0 branch](https://github.com/GPUOpen-Effects/TressFX/tree/4.0) +* [TressFX 3.1.1 branch](https://github.com/GPUOpen-Effects/TressFX/tree/3.1.1) + +  +  +  + +**© 2020 Advanced Micro Devices, Inc. All Rights Reserved.** + +### Attribution +* AMD, the AMD Arrow logo, AMD Radeon, and combinations thereof are trademarks of Advanced Micro Devices, Inc. +* Microsoft, Windows, DirectX, and combinations thereof are either trademarks or registered trademarks of Microsoft Corporation in the US and/or other countries. Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc. +* Other product names used in this publication are for identification purposes only and may be trademarks of their respective companies. + +**Disclaimer** + +The information contained herein is for informational purposes only, and is subject to change without notice. While every precaution has been taken in the preparation of this document, it may contain technical inaccuracies, omissions and typographical errors, and AMD is under no obligation to update or otherwise correct this information. Advanced Micro Devices, Inc. makes no representations or warranties with respect to the accuracy or completeness of the contents of this document, and assumes no liability of any kind, including the implied warranties of noninfringement, merchantability or fitness for particular purposes, with respect to the operation or use of AMD hardware, software or other products described herein. No license, including implied or arising by estoppel, to any intellectual property rights is granted by this document. Terms and limitations applicable to the purchase or use of AMD’s products are as set forth in a signed agreement between the parties or in AMD's Standard Terms and Conditions of Sale. diff --git a/Gems/AtomTressFX/External/Code/libs/Cauldron - read me.txt b/Gems/AtomTressFX/External/Code/libs/Cauldron - read me.txt new file mode 100644 index 0000000000..8e47040460 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/libs/Cauldron - read me.txt @@ -0,0 +1,4 @@ +Library source files from: + https://github.com/GPUOpen-LibrariesAndSDKs/Cauldron/tree/5acc12602c55e469cc1f9181967dbcb122f8e6c7 + + \ No newline at end of file diff --git a/Gems/AtomTressFX/Code/license.txt b/Gems/AtomTressFX/External/Code/license.txt similarity index 100% rename from Gems/AtomTressFX/Code/license.txt rename to Gems/AtomTressFX/External/Code/license.txt diff --git a/Gems/AtomTressFX/External/Code/src/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/CMakeLists.txt new file mode 100644 index 0000000000..3d434ec948 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/CMakeLists.txt @@ -0,0 +1,8 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# +#add_subdirectory(Math) +#add_subdirectory(TressFX) diff --git a/Gems/AtomTressFX/External/Code/src/DX12/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/DX12/CMakeLists.txt new file mode 100644 index 0000000000..7515a65979 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/DX12/CMakeLists.txt @@ -0,0 +1,5 @@ +project (TressFX_DX12) + +set(sources + DX12/DX12EngineInterfaceImpl.cpp + DX12/DX12EngineInterfaceImpl.h PARENT_SCOPE) \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.cpp b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.cpp new file mode 100644 index 0000000000..188a8b7adb --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.cpp @@ -0,0 +1,1658 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "EngineInterface.h" + +#include +#include +using namespace DirectX; +#include "d3dcompiler.h" + +#include +#include "Base/ShaderCompilerHelper.h" +#include "Base/Helper.h" +#include "GLTF/GltfHelpers.h" +#include "GLTF/GltfCommon.h" +#include "GLTF/GLTFTexturesAndBuffers.h" +#include "GLTF/GltfPbrPass.h" +#include "GLTF/GltfDepthPass.h" +#include "Misc/Error.h" +#include "TressFXLayouts.h" + +// Inline operators for general state data +inline D3D12_COMPARISON_FUNC operator* (EI_CompareFunc Enum) +{ + if (Enum == EI_CompareFunc::Never) return D3D12_COMPARISON_FUNC_NEVER; + if (Enum == EI_CompareFunc::Less) return D3D12_COMPARISON_FUNC_LESS; + if (Enum == EI_CompareFunc::Equal) return D3D12_COMPARISON_FUNC_EQUAL; + if (Enum == EI_CompareFunc::LessEqual) return D3D12_COMPARISON_FUNC_LESS_EQUAL; + if (Enum == EI_CompareFunc::Greater) return D3D12_COMPARISON_FUNC_GREATER; + if (Enum == EI_CompareFunc::NotEqual) return D3D12_COMPARISON_FUNC_NOT_EQUAL; + if (Enum == EI_CompareFunc::GreaterEqual) return D3D12_COMPARISON_FUNC_GREATER_EQUAL; + if (Enum == EI_CompareFunc::Always) return D3D12_COMPARISON_FUNC_ALWAYS; + assert(false && "Using an EI_CompareFunc that has not been mapped to DX12 yet!"); + return D3D12_COMPARISON_FUNC_NEVER; +} + +inline D3D12_BLEND_OP operator* (EI_BlendOp Enum) +{ + if (Enum == EI_BlendOp::Add) return D3D12_BLEND_OP_ADD; + if (Enum == EI_BlendOp::Subtract) return D3D12_BLEND_OP_SUBTRACT; + if (Enum == EI_BlendOp::ReverseSubtract) return D3D12_BLEND_OP_REV_SUBTRACT; + if (Enum == EI_BlendOp::Min) return D3D12_BLEND_OP_MIN; + if (Enum == EI_BlendOp::Max) return D3D12_BLEND_OP_MAX; + assert(false && "Using an EI_BlendOp that has not been mapped to DX12 yet!"); + return D3D12_BLEND_OP_ADD; +}; + +inline D3D12_STENCIL_OP operator* (EI_StencilOp Enum) +{ + if (Enum == EI_StencilOp::Keep) return D3D12_STENCIL_OP_KEEP; + if (Enum == EI_StencilOp::Zero) return D3D12_STENCIL_OP_ZERO; + if (Enum == EI_StencilOp::Replace) return D3D12_STENCIL_OP_REPLACE; + if (Enum == EI_StencilOp::IncrementClamp) return D3D12_STENCIL_OP_INCR_SAT; + if (Enum == EI_StencilOp::DecrementClamp) return D3D12_STENCIL_OP_DECR_SAT; + if (Enum == EI_StencilOp::Invert) return D3D12_STENCIL_OP_INVERT; + if (Enum == EI_StencilOp::IncrementWrap) return D3D12_STENCIL_OP_INCR; + if (Enum == EI_StencilOp::DecrementWrap) return D3D12_STENCIL_OP_DECR; + assert(false && "Using an EI_StencilOp that has not been mapped to DX12 yet!"); + return D3D12_STENCIL_OP_KEEP; +} + +inline D3D12_BLEND operator* (EI_BlendFactor Enum) +{ + if (Enum == EI_BlendFactor::Zero) return D3D12_BLEND_ZERO; + if (Enum == EI_BlendFactor::One) return D3D12_BLEND_ONE; + if (Enum == EI_BlendFactor::SrcColor) return D3D12_BLEND_SRC_COLOR; + if (Enum == EI_BlendFactor::InvSrcColor) return D3D12_BLEND_INV_SRC_COLOR; + if (Enum == EI_BlendFactor::DstColor) return D3D12_BLEND_DEST_COLOR; + if (Enum == EI_BlendFactor::InvDstColor) return D3D12_BLEND_INV_DEST_COLOR; + if (Enum == EI_BlendFactor::SrcAlpha) return D3D12_BLEND_SRC_ALPHA; + if (Enum == EI_BlendFactor::InvSrcAlpha) return D3D12_BLEND_INV_SRC_ALPHA; + if (Enum == EI_BlendFactor::DstAlpha) return D3D12_BLEND_DEST_ALPHA; + if (Enum == EI_BlendFactor::InvDstAlpha) return D3D12_BLEND_INV_DEST_ALPHA; + assert(false && "Using an EI_BlendFactor that has not been mapped to DX12 yet!"); + return D3D12_BLEND_ZERO; +}; + +inline D3D12_PRIMITIVE_TOPOLOGY operator* (EI_Topology Enum) +{ + if (Enum == EI_Topology::TriangleList) return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + if (Enum == EI_Topology::TriangleStrip) return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; + assert(false && "Using an EI_Topology that has not been mapped to DX12 yet!"); + return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; +} + +EI_Device::EI_Device() : + m_currentImageIndex(0), + m_pFullscreenIndexBuffer() +{ +} + +EI_Device::~EI_Device() +{ +} + +void EI_Device::AllocateCPUVisibleView(CAULDRON_DX12::ResourceView* pResourceView) +{ + // Check that both heaps can be allocated into in general (worst case, we allocate 2 descriptors on a heap) + if (m_CPUDescriptorIndex + 1 >= 256) + { + assert(false && "AllocateResourceView: heap ran of memory, increase its size"); + } + + D3D12_CPU_DESCRIPTOR_HANDLE CPUView = m_CPUDescriptorHeap->GetCPUDescriptorHandleForHeapStart(); + CPUView.ptr += m_CPUDescriptorIndex * m_DescriptorSize; + + D3D12_GPU_DESCRIPTOR_HANDLE GPUView = m_CPUDescriptorHeap->GetGPUDescriptorHandleForHeapStart(); + GPUView.ptr += m_CPUDescriptorIndex * m_DescriptorSize; + + m_CPUDescriptorIndex++; + + // Override the resource view internal pointers + // This is a bit of a hack, but Cauldron doesn't currently support the ability to allocate descriptor handles from different heaps. + pResourceView->SetResourceView(1, m_DescriptorSize, CPUView, GPUView); +} + +struct DX12Resource +{ + DX12Resource(CAULDRON_DX12::Device* pDevice) : pDevice(pDevice) {} + + void CreateTex2D(DXGI_FORMAT Format, const int width, const int height, const int depthOrArray, const unsigned int flags, const char* name) + { + CD3DX12_RESOURCE_DESC desc = CD3DX12_RESOURCE_DESC::Tex2D(Format, width, height, depthOrArray, 1); + CreateResource(desc, flags, name); + } + void CreateBuffer(const int structSize, const int structCount, const unsigned int flags, const char* name) + { + m_structSize = structSize; + m_structCount = structCount; + m_totalMemSize = m_structSize * m_structCount; + + if (flags & EI_BF_UNIFORMBUFFER) + { + //size of DX12 constant buffers must be multiple of 256 + if (m_totalMemSize % 256 != 0) + m_totalMemSize += 256 - m_totalMemSize % 256; + } + + CD3DX12_RESOURCE_DESC desc = CD3DX12_RESOURCE_DESC::Buffer(m_totalMemSize); + CreateResource(desc, flags, name); + } + + void CreateResource(CD3DX12_RESOURCE_DESC desc, const unsigned int flags, const char* name) + { + D3D12_RESOURCE_FLAGS resourceFlags = D3D12_RESOURCE_FLAG_NONE; + D3D12_RESOURCE_STATES initialState = (D3D12_RESOURCE_STATES)D3D12_RESOURCE_STATE_COPY_DEST; + + + if (flags & EI_BF_NEEDSUAV) + { + resourceFlags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + initialState = (D3D12_RESOURCE_STATES)D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + + desc.Flags = resourceFlags; + m_ResourceDesc = desc; + + wchar_t uniName[1024]; + swprintf(uniName, 1024, L"%S", name); + + if (flags & EI_BF_NEEDSCPUMEMORY) { + CD3DX12_RESOURCE_DESC cpuDesc = desc; + cpuDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + ThrowIfFailed(pDevice->GetDevice()->CreateCommittedResource( + &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), + D3D12_HEAP_FLAG_NONE, + &cpuDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, + nullptr, + IID_PPV_ARGS(&cpuBuffer))); + + cpuBuffer->SetName(uniName); + } + + ThrowIfFailed(pDevice->GetDevice()->CreateCommittedResource( + &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT), + D3D12_HEAP_FLAG_NONE, + &desc, + initialState, + nullptr, + IID_PPV_ARGS(&gpuBuffer))); + + gpuBuffer->SetName(uniName); + + if (flags & EI_BF_INDEXBUFFER) + { + indexBufferView.BufferLocation = gpuBuffer->GetGPUVirtualAddress(); + indexBufferView.Format = DXGI_FORMAT_R32_UINT; + indexBufferView.SizeInBytes = m_totalMemSize; + } + } + + void FreeCPUMemory() + { + if (cpuBuffer) + cpuBuffer->Release(); + } + + void Free() { + FreeCPUMemory(); + if (gpuBuffer) + gpuBuffer->Release(); + } + + void CreateCBV(uint32_t index, CAULDRON_DX12::CBV_SRV_UAV* pRV) + { + // Describe and create a constant buffer view (CBV). + D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {}; + cbvDesc.BufferLocation = gpuBuffer->GetGPUVirtualAddress(); + cbvDesc.SizeInBytes = m_totalMemSize; + pDevice->GetDevice()->CreateConstantBufferView(&cbvDesc, pRV->GetCPU(index)); + } + + void CreateSRV(uint32_t index, CAULDRON_DX12::ResourceView* pRV) + { + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + srvDesc.Format = m_ResourceDesc.Format; + srvDesc.ViewDimension = (m_ResourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) ? + D3D12_SRV_DIMENSION_BUFFER : + (m_ResourceDesc.DepthOrArraySize > 1) ? D3D12_SRV_DIMENSION_TEXTURE2DARRAY : D3D12_SRV_DIMENSION_TEXTURE2D; + + if (srvDesc.ViewDimension == D3D12_UAV_DIMENSION_BUFFER) + { + srvDesc.Buffer.FirstElement = 0; + srvDesc.Buffer.NumElements = m_structCount; + srvDesc.Buffer.StructureByteStride = m_structSize; + srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + } + else + { + if (m_ResourceDesc.DepthOrArraySize > 1) + { + srvDesc.Texture2DArray.ArraySize = m_ResourceDesc.DepthOrArraySize; + srvDesc.Texture2DArray.FirstArraySlice = 0; + srvDesc.Texture2DArray.MipLevels = m_ResourceDesc.MipLevels; + srvDesc.Texture2DArray.MostDetailedMip = 0; + } + else + { + srvDesc.Texture2D.MipLevels = m_ResourceDesc.MipLevels; + srvDesc.Texture2D.MostDetailedMip = 0; + } + } + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + // For SRV, we can use the existing mapping that was made from Cauldron + GetDevice()->GetDX12Device()->CreateShaderResourceView(gpuBuffer, &srvDesc, pRV->GetCPU(index)); + } + + void CreateUAV(uint32_t index, CAULDRON_DX12::ResourceView* pRV) + { + // Allocate CPU/GPU handles for the UAV + m_pUnorderedAccessView = std::unique_ptr(new CAULDRON_DX12::ResourceView); + GetDevice()->AllocateCPUVisibleView(m_pUnorderedAccessView.get()); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAViewDesc = {}; + UAViewDesc.Format = m_ResourceDesc.Format; + UAViewDesc.ViewDimension = (m_ResourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) ? + D3D12_UAV_DIMENSION_BUFFER : + (m_ResourceDesc.DepthOrArraySize > 1) ? D3D12_UAV_DIMENSION_TEXTURE2DARRAY : D3D12_UAV_DIMENSION_TEXTURE2D; + + if (UAViewDesc.ViewDimension == D3D12_UAV_DIMENSION_BUFFER) + { + UAViewDesc.Buffer.FirstElement = 0; + UAViewDesc.Buffer.NumElements = m_structCount; + UAViewDesc.Buffer.StructureByteStride = m_structSize; + UAViewDesc.Buffer.CounterOffsetInBytes = 0; + UAViewDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + } + else + { + if (m_ResourceDesc.DepthOrArraySize > 1) + { + UAViewDesc.Texture2DArray.ArraySize = m_ResourceDesc.DepthOrArraySize; + UAViewDesc.Texture2DArray.FirstArraySlice = 0; + UAViewDesc.Texture2DArray.MipSlice = 0; + } + else + { + UAViewDesc.Texture2D.MipSlice = 0; + } + } + + // For UAVs, we need one we can use to clear with that is CPU read/write, and one that will map back to what Cauldron expects (CPU write only) + pDevice->GetDevice()->CreateUnorderedAccessView(gpuBuffer, nullptr, &UAViewDesc, m_pUnorderedAccessView->GetCPU()); + pDevice->GetDevice()->CreateUnorderedAccessView(gpuBuffer, nullptr, &UAViewDesc, pRV->GetCPU(index)); + } + + int m_totalMemSize = 0; + int m_structCount = 0; + int m_structSize = 0; + CAULDRON_DX12::Device* pDevice = nullptr; + ID3D12Resource* cpuBuffer = nullptr; + ID3D12Resource* gpuBuffer = nullptr; + D3D12_INDEX_BUFFER_VIEW indexBufferView; + + CD3DX12_RESOURCE_DESC m_ResourceDesc; + std::unique_ptr m_pUnorderedAccessView; +}; + +void EI_Device::DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets) +{ + // Set everything + commandContext.BindSets(&pso, numBindSets, bindSets); + + EI_IndexedDrawParams drawParams; + drawParams.pIndexBuffer = m_pFullscreenIndexBuffer.get(); + drawParams.numIndices = 4; + drawParams.numInstances = 1; + + commandContext.DrawIndexedInstanced(pso, drawParams); +} + +std::unique_ptr EI_Device::CreateBufferResource(int structSize, const int structCount, const unsigned int flags, const char* name) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Buffer; + res->m_pBuffer = new DX12Resource(&m_device); + res->m_pBuffer->CreateBuffer(structSize, structCount, flags | EI_BF_NEEDSCPUMEMORY, name); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateUint32Resource(const int width, const int height, const int arraySize, const char* name, uint32_t ClearValue /*= 0*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Buffer; + res->m_pBuffer = new DX12Resource(&m_device); + + res->m_pBuffer->CreateTex2D(DXGI_FORMAT_R32_UINT, width, height, arraySize, EI_BF_NEEDSUAV, name); + + return std::unique_ptr(res); +} + +#ifdef TRESSFX_DEBUG_UAV +std::unique_ptr EI_Device::CreateDebugUAVResource(const int width, const int height, const size_t channels, const int arraySize, const char* name, float ClearValue /*= 0.f*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Buffer; + res->m_pBuffer = new DX12Resource(&m_device); + + DXGI_FORMAT format = DXGI_FORMAT_R32_UINT; + switch (channels) + { + case 4: + format = DXGI_FORMAT_R32G32B32A32_FLOAT; + break; + + default: + // Unsupported ... add whatever you need + assert(false); + break; + } + + res->m_pBuffer->CreateTex2D(format, width, height, arraySize, EI_BF_NEEDSUAV, name); + + return std::unique_ptr(res); +} +#endif // TRESSFX_DEBUG_UAV + +std::unique_ptr EI_Device::CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues /*= nullptr*/) +{ + EI_Resource* res = new EI_Resource; + + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_DX12::Texture(); + + CD3DX12_RESOURCE_DESC resourceDesc = {}; + resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + resourceDesc.Alignment = 0; + resourceDesc.Width = width; + resourceDesc.Height = height; + resourceDesc.DepthOrArraySize = 1; + resourceDesc.MipLevels = 1; + resourceDesc.SampleDesc.Count = 1; + resourceDesc.SampleDesc.Quality = 0; + resourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; + resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + + if (channels == 1) + { + resourceDesc.Format = DXGI_FORMAT_R16_FLOAT; + } + else if (channels == 2) + { + resourceDesc.Format = DXGI_FORMAT_R16G16_FLOAT; + } + else if (channels == 4) + { + if (channelSize == 1) + resourceDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + else + resourceDesc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + } + + if (ClearValues) + { + D3D12_CLEAR_VALUE ClearParams; + ClearParams.Format = resourceDesc.Format; + ClearParams.Color[0] = ClearValues->x; + ClearParams.Color[1] = ClearValues->y; + ClearParams.Color[2] = ClearValues->z; + ClearParams.Color[3] = ClearValues->w; + + // Makes initial barriers easier to deal with + res->m_pTexture->Init(&m_device, name, &resourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearParams); + } + else + res->m_pTexture->InitRenderTarget(&m_device, name, &resourceDesc, D3D12_RESOURCE_STATE_RENDER_TARGET); + + res->RTView = new CAULDRON_DX12::RTV(); + m_resourceViewHeaps.AllocRTVDescriptor(1, res->RTView); + res->m_pTexture->CreateRTV(0, res->RTView); + + res->SRView = new CAULDRON_DX12::CBV_SRV_UAV(); + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + srvDesc.Format = resourceDesc.Format; + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + srvDesc.TextureCube.MostDetailedMip = 0; + srvDesc.TextureCube.ResourceMinLODClamp = 0; + srvDesc.TextureCube.MipLevels = 1; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, res->SRView); + res->m_pTexture->CreateSRV(0, res->SRView, &srvDesc); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateDepthResource(const int width, const int height, const char* name) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_DX12::Texture(); + + res->m_pTexture->InitDepthStencil(&m_device, name, &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_TYPELESS, width, height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + + res->DSView = new CAULDRON_DX12::DSV(); + m_resourceViewHeaps.AllocDSVDescriptor(1, res->DSView); + res->m_pTexture->CreateDSV(0, res->DSView); + + res->SRView = new CAULDRON_DX12::CBV_SRV_UAV(); + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + srvDesc.Format = DXGI_FORMAT_R32_FLOAT; + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + srvDesc.TextureCube.MostDetailedMip = 0; + srvDesc.TextureCube.ResourceMinLODClamp = 0; + srvDesc.TextureCube.MipLevels = 1; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, res->SRView); + res->m_pTexture->CreateSRV(0, res->SRView, &srvDesc); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateResourceFromFile(const char* szFilename, bool useSRGB/*= false*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_DX12::Texture(); + + res->m_pTexture->InitFromFile(GetDevice()->GetCauldronDevice(), &m_uploadHeap, szFilename, useSRGB); + + m_uploadHeap.FlushAndFinish(); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Sampler; + + D3D12_FILTER Filter; + + if (MinFilter == EI_Filter::Linear) + { + if (MaxFilter == EI_Filter::Linear) + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT; + } + else + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT; + } + } + else + { + if (MaxFilter == EI_Filter::Linear) + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT; + } + else + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + } + } + + D3D12_SAMPLER_DESC SamplerDesc = {}; + SamplerDesc.Filter = Filter; + SamplerDesc.AddressU = (AddressMode == EI_AddressMode::Wrap) ? D3D12_TEXTURE_ADDRESS_MODE_WRAP : D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.AddressV = (AddressMode == EI_AddressMode::Wrap) ? D3D12_TEXTURE_ADDRESS_MODE_WRAP : D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.AddressW = (AddressMode == EI_AddressMode::Wrap) ? D3D12_TEXTURE_ADDRESS_MODE_WRAP : D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.MipLODBias = 0; + SamplerDesc.MaxAnisotropy = 1; + SamplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_NEVER; + SamplerDesc.BorderColor[0] = 0.f; + SamplerDesc.BorderColor[1] = 0.f; + SamplerDesc.BorderColor[2] = 0.f; + SamplerDesc.BorderColor[3] = 0.f; + SamplerDesc.MinLOD = 0.f; + SamplerDesc.MaxLOD = D3D12_FLOAT32_MAX; + + res->m_pSampler = new CAULDRON_DX12::SAMPLER(); + m_resourceViewHeaps.AllocSamplerDescriptor(1, res->m_pSampler); + + m_device.GetDevice()->CreateSampler(&SamplerDesc, res->m_pSampler->GetCPU()); + res->samplerDesc = SamplerDesc; + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateBindSet(EI_BindLayout* layout, EI_BindSetDescription& bindSet) +{ + EI_BindSet* result = new EI_BindSet; + assert(layout->layoutBindings.size() == bindSet.resources.size()); + + UINT numTotalSlotsNeededInDeScriptorTable = 0; + int numBindings = (int)layout->layoutBindings.size(); + + // On DX12, we can't mix samplers with other resource types, so validate that all resources in the bind set are all samplers, or all other + bool IsSamplerBindSet = (bindSet.resources[0]->m_ResourceType == EI_ResourceType::Sampler); + + for (int i = 0; i < numBindings; i++) + { + UINT numSlotsNeededInDeScriptorTable = layout->layoutBindings[i].BaseShaderRegister + layout->layoutBindings[i].NumDescriptors; + if (numSlotsNeededInDeScriptorTable > numTotalSlotsNeededInDeScriptorTable) + numTotalSlotsNeededInDeScriptorTable = numSlotsNeededInDeScriptorTable; + assert(!IsSamplerBindSet || (IsSamplerBindSet && bindSet.resources[i]->m_ResourceType == EI_ResourceType::Sampler) && "Samplers cannot be mixed with other resource types. Please re-organize your layout/bindset"); + } + + if (!IsSamplerBindSet) + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(numTotalSlotsNeededInDeScriptorTable, static_cast(&result->descriptorTable)); + else + m_resourceViewHeaps.AllocSamplerDescriptor(numTotalSlotsNeededInDeScriptorTable, static_cast(&result->descriptorTable)); + + for (int i = 0; i < numBindings; i++) + { + assert(layout->layoutBindings[i].NumDescriptors == 1); + UINT descriptorIdx = i; + switch (layout->description.resources[i].type) + { + case EI_RESOURCETYPE_BUFFER_RW: + bindSet.resources[i]->m_pBuffer->CreateUAV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_BUFFER_RO: + bindSet.resources[i]->m_pBuffer->CreateSRV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_IMAGE_RW: + if (bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer) + bindSet.resources[i]->m_pBuffer->CreateUAV(descriptorIdx, &result->descriptorTable); // Override the descriptor pointers used with our own which are properly allocated for clearing/writing + else + bindSet.resources[i]->m_pTexture->CreateUAV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_IMAGE_RO: + if (bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer) + bindSet.resources[i]->m_pBuffer->CreateSRV(descriptorIdx, &result->descriptorTable); // Override the descriptor pointers used with our own which are properly allocated for clearing/writing + else + bindSet.resources[i]->m_pTexture->CreateSRV(descriptorIdx, static_cast(&result->descriptorTable), 0); + break; + case EI_RESOURCETYPE_UNIFORM: + bindSet.resources[i]->m_pBuffer->CreateCBV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_SAMPLER: + m_device.GetDevice()->CreateSampler(&bindSet.resources[i]->samplerDesc, static_cast(&result->descriptorTable)->GetCPU()); + break; + default: + assert(0); + break; + } + } + + return std::unique_ptr(result); +} + +EI_BindSet::~EI_BindSet() +{ + // Should we move the descriptor allocation/deallocation to the bindset? + //GetDevice()->GetResourceViewHeaps().FreeDescriptor(m_descriptorSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + assert(numResources < MaxRenderAttachments && "Number of resources exceeds maximum allowable. Please grow MaxRenderAttachments value."); + + // Create the render pass set + EI_RenderTargetSet* pNewRenderTargetSet = new EI_RenderTargetSet; + + int currentClearValueRef = 0; + for (uint32_t i = 0; i < numResources; i++) + { + // Check size consistency + assert(!(AttachmentParams[i].Flags & EI_RenderPassFlags::Depth && (i != (numResources - 1))) && "Only the last attachment can be specified as depth target"); + + // Setup a clear value if needed + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Clear) + { + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + pNewRenderTargetSet->m_ClearValues[i].DepthStencil.Depth = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].DepthStencil.Stencil = (uint32_t)clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Format = DXGI_FORMAT_D32_FLOAT; + pNewRenderTargetSet->m_HasDepth = true; + pNewRenderTargetSet->m_ClearDepth = true; + } + else + { + pNewRenderTargetSet->m_ClearValues[i].Color[0] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Color[1] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Color[2] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Color[3] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Format = pResourceFormats[i]; + pNewRenderTargetSet->m_ClearColor[i] = true; + } + } + else if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + pNewRenderTargetSet->m_HasDepth = true; + + pNewRenderTargetSet->m_RenderResourceFormats[i] = pResourceFormats[i]; + } + + // Tag the number of resources this render pass set is setting/clearing + pNewRenderTargetSet->m_NumResources = numResources; + + return std::unique_ptr(pNewRenderTargetSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + std::vector FormatArray(numResources); + + for (uint32_t i = 0; i < numResources; ++i) + { + assert(pResourcesArray[i]->m_ResourceType == EI_ResourceType::Texture); + FormatArray[i] = pResourcesArray[i]->m_pTexture->GetFormat(); + if (FormatArray[i] == DXGI_FORMAT_R32_TYPELESS) + { + FormatArray[i] = DXGI_FORMAT_D32_FLOAT; + } + } + std::unique_ptr result = CreateRenderTargetSet(FormatArray.data(), numResources, AttachmentParams, clearValues); + result->SetResources(pResourcesArray); + return result; +} + +std::unique_ptr EI_Device::CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon) +{ + EI_GLTFTexturesAndBuffers* GLTFBuffersAndTextures = new CAULDRON_DX12::GLTFTexturesAndBuffers(); + GLTFBuffersAndTextures->OnCreate(GetCauldronDevice(), pGLTFCommon, &m_uploadHeap, &m_vidMemBufferPool, &m_constantBufferRing); + + return std::unique_ptr(GLTFBuffersAndTextures); +} + +std::unique_ptr EI_Device::CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfPbrPass* GLTFPbr = new CAULDRON_DX12::GltfPbrPass(); + GLTFPbr->OnCreate(GetCauldronDevice(), &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, + pGLTFTexturesAndBuffers, nullptr, false, GetColorBufferFormat(), 1); + + return std::unique_ptr(GLTFPbr); +} + +std::unique_ptr EI_Device::CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfDepthPass* GLTFDepth = new CAULDRON_DX12::GltfDepthPass(); + assert(renderTargetSet); + + GLTFDepth->OnCreate(GetCauldronDevice(), &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, + pGLTFTexturesAndBuffers); + + return std::unique_ptr(GLTFDepth); +} + +void EI_RenderTargetSet::SetResources(const EI_Resource** pResourcesArray) +{ + for (uint32_t i = 0; i < m_NumResources; ++i) + m_RenderResources[i] = pResourcesArray[i]; +} + +EI_RenderTargetSet::~EI_RenderTargetSet() +{ + // Nothing to clean up +} + +void EI_Device::BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderTargetSet, const wchar_t* pPassName, uint32_t width /*= 0*/, uint32_t height /*= 0*/) +{ + D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle[MaxRenderAttachments]; + D3D12_CPU_DESCRIPTOR_HANDLE* depthCpuHandle = nullptr; + uint32_t numRenderTargets = 0; + const D3D12_CLEAR_VALUE* pDepthClearValue = nullptr; + + using namespace DirectX::Detail; + UINT size = static_cast((wcslen(pPassName) + 1) * sizeof(wchar_t)); + commandContext.commandBuffer.Get()->BeginEvent(PIX_EVENT_UNICODE_VERSION, pPassName, size); + + assert(pRenderTargetSet->m_NumResources == 1 || (pRenderTargetSet->m_NumResources == 2 && pRenderTargetSet->m_HasDepth) && "Currently only support 1 render target with (or without) depth"); + + // This is a depth render + if (pRenderTargetSet->m_NumResources == 1 && pRenderTargetSet->m_HasDepth) + { + cpuHandle[0] = pRenderTargetSet->m_RenderResources[0]->DSView->GetCPU(); + depthCpuHandle = &cpuHandle[0]; + if (pRenderTargetSet->m_ClearDepth) + pDepthClearValue = &pRenderTargetSet->m_ClearValues[0]; + } + else + { + cpuHandle[0] = pRenderTargetSet->m_RenderResources[0]->RTView->GetCPU(); + ++numRenderTargets; + } + + if (pRenderTargetSet->m_HasDepth && pRenderTargetSet->m_NumResources > 1) + { + cpuHandle[1] = pRenderTargetSet->m_RenderResources[1]->DSView->GetCPU(); + depthCpuHandle = &cpuHandle[1]; + if (pRenderTargetSet->m_ClearDepth) + pDepthClearValue = &pRenderTargetSet->m_ClearValues[1]; + } + + commandContext.commandBuffer->OMSetRenderTargets(numRenderTargets, numRenderTargets? cpuHandle : nullptr, FALSE, depthCpuHandle); + + // Do we need to clear? + if (numRenderTargets && pRenderTargetSet->m_ClearColor[0]) + commandContext.commandBuffer->ClearRenderTargetView(cpuHandle[0], pRenderTargetSet->m_ClearValues[0].Color, 0, nullptr); + + if (depthCpuHandle && pDepthClearValue) + commandContext.commandBuffer->ClearDepthStencilView(*depthCpuHandle, D3D12_CLEAR_FLAG_DEPTH, pDepthClearValue->DepthStencil.Depth, pDepthClearValue->DepthStencil.Stencil, 0, nullptr); + + SetViewportAndScissor(commandContext, 0, 0, width ? width : m_width, height ? height : m_height); +} + +void EI_Device::EndRenderPass(EI_CommandContext& commandContext) +{ + // End of tracing event + commandContext.commandBuffer.Get()->EndEvent(); + + // Unset all OMS RenderTargets + GetDevice()->EndRenderPass(); +} + +void EI_Device::SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height) +{ + CAULDRON_DX12::SetViewportAndScissor(commandContext.commandBuffer.Get(), topX, topY, width, height); +} + +void EI_Device::OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName) +{ + // Create Device + m_device.OnCreate(appName, "TressFX 4.1 (DX12)", enableValidation, hWnd); + m_device.CreatePipelineCache(); + + //init the shader compiler + CAULDRON_DX12::CreateShaderCache(); + + // Create Swap chain + m_swapChain.OnCreate(&m_device, numBackBuffers, hWnd, CAULDRON_DX12::DISPLAYMODE_SDR); + + m_resourceViewHeaps.OnCreate(&m_device, 256, 256, 256, 256, 256, 256); + + // Create our own resource heaps (needed for more complex UAV behaviors) + m_CPUDescriptorIndex = 0; + m_DescriptorSize = m_device.GetDevice()->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + D3D12_DESCRIPTOR_HEAP_DESC descHeap; + descHeap.NumDescriptors = 256; + descHeap.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + descHeap.NodeMask = 0; + + // CPU read/write Descriptor heap + descHeap.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + ThrowIfFailed(m_device.GetDevice()->CreateDescriptorHeap(&descHeap, IID_PPV_ARGS(m_CPUDescriptorHeap.GetAddressOf()))); + m_CPUDescriptorHeap->SetName(L"DX12EngineInterface_CPUDescriptorHeap"); + + // Create a command list ring for the Direct queue + D3D12_COMMAND_QUEUE_DESC CommandQueueDesc = {}; + CommandQueueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; + CommandQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; + CommandQueueDesc.NodeMask = 0; + m_commandListRing.OnCreate(&m_device, numBackBuffers, 8, CommandQueueDesc); + // async compute + // Cauldron doesn't currently support a compute queue (TODO), so reuse the direct queue for these + CommandQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_COMPUTE; + m_computeCommandListRing.OnCreate(&m_device, numBackBuffers, 8, CommandQueueDesc); + BeginNewCommandBuffer(); + + // Create fences + m_computeDoneFence.OnCreate(&m_device, "Compute Done Fence"); + m_lastFrameGraphicsCommandBufferFence.OnCreate(&m_device, "Last Frame Graphics Command Buffer Fence"); + + // Create a 'dynamic' constant buffers ring + m_constantBufferRing.OnCreate(&m_device, numBackBuffers, 20 * 1024 * 1024, &m_resourceViewHeaps); + + // Create a 'static' constant buffer pool + m_vidMemBufferPool.OnCreate(&m_device, 128 * 1024 * 1024, USE_VID_MEM, "StaticGeom"); + m_sysMemBufferPool.OnCreate(&m_device, 32 * 1024, false, "PostProcGeom"); + + // initialize the GPU time stamps module + m_gpuTimer.OnCreate(&m_device, numBackBuffers); + + // Quick helper to upload resources, it has it's own commandList and uses sub-allocation. + // for 4K textures we'll need 100Megs + m_uploadHeap.OnCreate(&m_device, 100 * 1024 * 1024); + + // Create tonemapping pass + m_toneMapping.OnCreate(&m_device, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, m_swapChain.GetFormat()); + + // Initialize UI rendering resources + m_ImGUI.OnCreate(&m_device, &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, DXGI_FORMAT_R8G8B8A8_UNORM); + + // Create a render pass for our main buffer as it's needed earlier than other stuff is created + //VkFormat backbufferFormats[] = { VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_D32_SFLOAT }; + + // Create index buffer for full screen passes + m_pFullscreenIndexBuffer = CreateBufferResource(sizeof(uint32_t), 4, EI_BF_INDEXBUFFER, "FullScreenIndexBuffer"); + + // Create shadow buffer. Because GLTF only allows us 1 buffer, we are going to create a HUGE one and divy it up as needed. + m_shadowBuffer = CreateDepthResource(4096, 4096, "Shadow Buffer"); + + // Create layout and PSO for resolve to swap chain + EI_LayoutDescription desc = { { {"ColorTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, }, EI_PS }; + m_pEndFrameResolveBindLayout = CreateLayout(desc); + + // Recreate a PSO for full screen resolve to swap chain + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::Always; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { m_pEndFrameResolveBindLayout.get() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = nullptr; // Will go to swap chain + m_pEndFrameResolvePSO = CreateGraphicsPSO("FullScreenRender.hlsl", "FullScreenVS", "FullScreenRender.hlsl", "FullScreenPS", psoParams); + + // Create default white texture to use + m_DefaultWhiteTexture = CreateResourceFromFile("DefaultWhite.png", true); + + // Create some samplers to use + m_LinearWrapSampler = CreateSampler(EI_Filter::Linear, EI_Filter::Linear, EI_Filter::Linear, EI_AddressMode::Wrap); + + // finish creating the index buffer + uint32_t indexArray[] = { 0, 1, 2, 3 }; + m_currentCommandBuffer.UpdateBuffer(m_pFullscreenIndexBuffer.get(), indexArray); + + EI_Barrier copyToResource[] = { + { m_pFullscreenIndexBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_INDEX_BUFFER } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(copyToResource), copyToResource); + +} + +void EI_Device::OnResize(uint32_t width, uint32_t height) +{ + m_width = width; + m_height = height; + + // if a previous resize event from this frame hasnt already opened a command buffer + if (!m_recording) + { + BeginNewCommandBuffer(); + } + + // If resizing but no minimizing + if (width > 0 && height > 0) + { + // Re/Create color buffer + m_colorBuffer = CreateRenderTargetResource(width, height, 4, 1, "Color Buffer"); + + m_depthBuffer = CreateDepthResource(width, height, "Depth Buffer"); + m_swapChain.OnCreateWindowSizeDependentResources(width, height, m_vSync, CAULDRON_DX12::DISPLAYMODE_SDR); + +#ifdef TRESSFX_DEBUG_UAV + m_pDebugUAV = CreateDebugUAVResource(width, height, 4, 2, "DebugUAV", 0.f); +#endif // TRESSFX_DEBUG_UAV + + // Create resources we need to resolve out render target back to swap chain + EI_BindSetDescription bindSet = { { m_colorBuffer.get() } }; + m_pEndFrameResolveBindSet = CreateBindSet(m_pEndFrameResolveBindLayout.get(), bindSet); + + // Create a bind set for any samplers we need (Doing it here because the layouts aren't yet initialized during OnCreate() call) + EI_BindSetDescription bindSetDesc = { { m_LinearWrapSampler.get(), } }; + m_pSamplerBindSet = CreateBindSet(GetSamplerLayout(), bindSetDesc); + + // update tonemapping + m_toneMapping.UpdatePipelines(m_swapChain.GetFormat()); + } +} + +void EI_Device::OnDestroy() +{ + m_device.GPUFlush(); + + // Remove linear wrap sampler + m_LinearWrapSampler.reset(); + + // Remove default white texture + m_DefaultWhiteTexture.reset(); + + // Wipe all the local resources we were using + m_pSamplerBindSet.reset(); + m_pEndFrameResolveBindSet.reset(); + m_pEndFrameResolvePSO.reset(); + m_pEndFrameResolveBindLayout.reset(); + + m_pFullscreenIndexBuffer.reset(); + + m_depthBuffer.reset(); + m_colorBuffer.reset(); + +#if TRESSFX_DEBUG_UAV + m_pDebugUAV.reset(); +#endif // TRESSFX_DEBUG_UAV + + m_toneMapping.OnDestroy(); + m_ImGUI.OnDestroy(); + + m_uploadHeap.OnDestroy(); + m_gpuTimer.OnDestroy(); + m_vidMemBufferPool.OnDestroy(); + m_sysMemBufferPool.OnDestroy(); + m_constantBufferRing.OnDestroy(); + m_resourceViewHeaps.OnDestroy(); + m_commandListRing.OnDestroy(); + m_computeCommandListRing.OnDestroy(); + + // Full screen state should always be false before exiting the app. + m_swapChain.SetFullScreen(false); + m_swapChain.OnDestroyWindowSizeDependentResources(); + m_swapChain.OnDestroy(); + + // shut down the shader compiler + DestroyShaderCache(&m_device); + m_device.DestroyPipelineCache(); + m_device.OnDestroy(); +} + +D3D12_SHADER_VISIBILITY GetShaderVisibility(EI_ShaderStage stage) +{ + switch (stage) + { + case EI_VS: + return D3D12_SHADER_VISIBILITY_VERTEX; + case EI_PS: + return D3D12_SHADER_VISIBILITY_PIXEL; + case EI_CS: + return D3D12_SHADER_VISIBILITY_ALL; + case EI_ALL: + return D3D12_SHADER_VISIBILITY_ALL; + default: + return D3D12_SHADER_VISIBILITY_ALL; + } +} + +std::unique_ptr EI_Device::CreateComputeShaderPSO(const char* shaderName, const char* entryPoint, EI_BindLayout** layouts, int numLayouts) +{ + EI_PSO* result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["AMD_TRESSFX_DX12"] = "1"; + +#ifdef TRESSFX_DEBUG_UAV + defines["TRESSFX_DEBUG_UAV"] = "1"; +#endif // TRESSFX_DEBUG_UAV + + D3D12_SHADER_BYTECODE computeShader; + CAULDRON_DX12::CompileShaderFromFile(shaderName, &defines, entryPoint, "cs_6_0", D3DCOMPILE_DEBUG | D3DCOMPILE_OPTIMIZATION_LEVEL0 | D3DCOMPILE_SKIP_OPTIMIZATION, &computeShader); + + CD3DX12_ROOT_PARAMETER descSetLayouts[16]; + assert(numLayouts < 16); + for (int i = 0; i < numLayouts; ++i) + { + // i dont like this since it has a side effect on the layout that gets passed - i'd just get rid of the spaces + for (int j = 0; j < layouts[i]->layoutBindings.size(); ++j) + { + layouts[i]->layoutBindings[j].RegisterSpace = i; + } + descSetLayouts[i].InitAsDescriptorTable((uint32_t)layouts[i]->layoutBindings.size(), layouts[i]->layoutBindings.data(), GetShaderVisibility(layouts[i]->description.stage)); + } + + CD3DX12_ROOT_SIGNATURE_DESC descRootSignature = CD3DX12_ROOT_SIGNATURE_DESC(); + descRootSignature.NumParameters = numLayouts; + descRootSignature.pParameters = descSetLayouts; + descRootSignature.NumStaticSamplers = 0; + descRootSignature.pStaticSamplers = 0; + + // deny uneccessary access to certain pipeline stages + descRootSignature.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE + | D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT + | D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS; + + ID3DBlob* signature; + ID3DBlob* error; + HRESULT hr = D3D12SerializeRootSignature(&descRootSignature, D3D_ROOT_SIGNATURE_VERSION_1, &signature, &error); + m_device.GetDevice()->CreateRootSignature( + 0, + signature->GetBufferPointer(), + signature->GetBufferSize(), + __uuidof(ID3D12RootSignature), + (void**)&result->m_pipelineLayout); + + signature->Release(); + if (error) + error->Release(); + + // Describe and create the compute pipeline state object (PSO). + D3D12_COMPUTE_PIPELINE_STATE_DESC computePsoDesc = {}; + computePsoDesc.pRootSignature = result-> m_pipelineLayout.Get(); + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(computeShader); + ThrowIfFailed(m_device.GetDevice()->CreateComputePipelineState(&computePsoDesc, IID_PPV_ARGS(&result->m_pipeline))); + + wchar_t uniName[1024]; + swprintf(uniName, 1024, L"%hs%hs", shaderName, entryPoint); + result->m_pipelineLayout->SetName(uniName); + result->m_pipeline->SetName(uniName); + + result->m_bp = EI_BP_COMPUTE; + return std::unique_ptr(result); +} + +EI_PSO::~EI_PSO() +{ + // Everything will auto release when going out of scope +} + +std::unique_ptr EI_Device::CreateGraphicsPSO(const char* vertexShaderName, const char* vertexEntryPoint, const char* fragmentShaderName, const char* fragmentEntryPoint, EI_PSOParams& psoParams) +{ + EI_PSO* result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["AMD_TRESSFX_DX12"] = "1"; + +#ifdef TRESSFX_DEBUG_UAV + defines["TRESSFX_DEBUG_UAV"] = "1"; +#endif // TRESSFX_DEBUG_UAV + + // Compile and create shaders + D3D12_SHADER_BYTECODE vertexShader, fragmentShader; + + CAULDRON_DX12::CompileShaderFromFile(vertexShaderName, &defines, vertexEntryPoint, "vs_6_0", D3DCOMPILE_DEBUG | D3DCOMPILE_OPTIMIZATION_LEVEL0 | D3DCOMPILE_SKIP_OPTIMIZATION, &vertexShader); + CAULDRON_DX12::CompileShaderFromFile(fragmentShaderName, &defines, fragmentEntryPoint, "ps_6_0", D3DCOMPILE_DEBUG | D3DCOMPILE_OPTIMIZATION_LEVEL0 | D3DCOMPILE_SKIP_OPTIMIZATION, &fragmentShader); + + CD3DX12_ROOT_PARAMETER descSetLayouts[16]; + for (int i = 0; i < psoParams.numLayouts; ++i) + { + // i dont like this since it has a side effect on the layout that gets passed - i'd just get rid of the spaces + for (int j = 0; j < psoParams.layouts[i]->layoutBindings.size(); ++j) + { + psoParams.layouts[i]->layoutBindings[j].RegisterSpace = i; + } + descSetLayouts[i].InitAsDescriptorTable((uint32_t)psoParams.layouts[i]->layoutBindings.size(), psoParams.layouts[i]->layoutBindings.data(), GetShaderVisibility(psoParams.layouts[i]->description.stage)); + } + + CD3DX12_ROOT_SIGNATURE_DESC descRootSignature = CD3DX12_ROOT_SIGNATURE_DESC(); + descRootSignature.NumParameters = psoParams.numLayouts; + descRootSignature.pParameters = descSetLayouts; + descRootSignature.NumStaticSamplers = 0; + descRootSignature.pStaticSamplers = 0; + + // deny uneccessary access to certain pipeline stages + descRootSignature.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE + | D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT + | D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS; + + ID3DBlob* signature; + ID3DBlob* error; + HRESULT hr = D3D12SerializeRootSignature(&descRootSignature, D3D_ROOT_SIGNATURE_VERSION_1, &signature, &error); + m_device.GetDevice()->CreateRootSignature( + 0, + signature->GetBufferPointer(), + signature->GetBufferSize(), + __uuidof(ID3D12RootSignature), + (void**)&result->m_pipelineLayout); + + signature->Release(); + if (error) + error->Release(); + + // Setup blending + D3D12_BLEND_DESC blendDesc; + blendDesc.AlphaToCoverageEnable = false; + blendDesc.IndependentBlendEnable = false; + blendDesc.RenderTarget[0].LogicOpEnable = false; + blendDesc.RenderTarget[0].BlendEnable = psoParams.colorBlendParams.colorBlendEnabled; + blendDesc.RenderTarget[0].SrcBlend = *psoParams.colorBlendParams.colorSrcBlend; + blendDesc.RenderTarget[0].DestBlend = *psoParams.colorBlendParams.colorDstBlend; + blendDesc.RenderTarget[0].BlendOp = *psoParams.colorBlendParams.colorBlendOp; + blendDesc.RenderTarget[0].SrcBlendAlpha = *psoParams.colorBlendParams.alphaSrcBlend; + blendDesc.RenderTarget[0].DestBlendAlpha = *psoParams.colorBlendParams.alphaDstBlend; + blendDesc.RenderTarget[0].BlendOpAlpha = *psoParams.colorBlendParams.alphaBlendOp; + blendDesc.RenderTarget[0].LogicOp = D3D12_LOGIC_OP_NOOP; + blendDesc.RenderTarget[0].RenderTargetWriteMask = psoParams.colorWriteEnable ? D3D12_COLOR_WRITE_ENABLE_ALL : 0; + + bool depthOnly = (psoParams.renderTargetSet && psoParams.renderTargetSet->m_NumResources == 1 && psoParams.renderTargetSet->m_HasDepth); + bool hasDepth = (psoParams.renderTargetSet && psoParams.renderTargetSet->m_HasDepth); + + // Describe and create the graphics pipeline state object (PSO). + D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = {}; + psoDesc.InputLayout = { nullptr, 0 }; // Don't even need a vertex buffer right now + psoDesc.pRootSignature = result->m_pipelineLayout.Get(); + psoDesc.VS = vertexShader; + psoDesc.PS = fragmentShader; + psoDesc.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT); + psoDesc.RasterizerState.FrontCounterClockwise = true; + // hack, the fullscreen quad doesnt show up without this even if i reverse the index order + if (psoParams.primitiveTopology == EI_Topology::TriangleStrip) + { + psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE; + } + psoDesc.BlendState = blendDesc; + psoDesc.DepthStencilState.DepthEnable = psoParams.depthTestEnable; + psoDesc.DepthStencilState.StencilEnable = psoParams.stencilTestEnable; + psoDesc.DepthStencilState.DepthFunc = *psoParams.depthCompareOp; + psoDesc.DepthStencilState.DepthWriteMask = psoParams.depthWriteEnable ? D3D12_DEPTH_WRITE_MASK_ALL : D3D12_DEPTH_WRITE_MASK_ZERO; + psoDesc.DepthStencilState.StencilReadMask = psoParams.stencilReadMask; + psoDesc.DepthStencilState.StencilWriteMask = psoParams.stencilWriteMask; + psoDesc.DepthStencilState.BackFace.StencilDepthFailOp = *psoParams.backDepthFailOp; + psoDesc.DepthStencilState.BackFace.StencilFailOp = *psoParams.backFailOp; + psoDesc.DepthStencilState.BackFace.StencilFunc = *psoParams.backCompareOp; + psoDesc.DepthStencilState.BackFace.StencilPassOp = *psoParams.backPassOp; + psoDesc.DepthStencilState.FrontFace.StencilDepthFailOp = *psoParams.frontDepthFailOp; + psoDesc.DepthStencilState.FrontFace.StencilFailOp = *psoParams.frontFailOp; + psoDesc.DepthStencilState.FrontFace.StencilFunc = *psoParams.frontCompareOp; + psoDesc.DepthStencilState.FrontFace.StencilPassOp = *psoParams.frontPassOp; + psoDesc.SampleMask = UINT_MAX; + psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + psoDesc.NumRenderTargets = depthOnly ? 0 : 1; + psoDesc.RTVFormats[0] = (psoParams.renderTargetSet) ? ( depthOnly ? DXGI_FORMAT_UNKNOWN : psoParams.renderTargetSet->m_RenderResourceFormats[0] ) : m_swapChain.GetFormat(); + psoDesc.DSVFormat = hasDepth ? psoParams.renderTargetSet->m_RenderResourceFormats[psoParams.renderTargetSet->m_NumResources-1] : DXGI_FORMAT_UNKNOWN; + psoDesc.SampleDesc.Count = 1; + ThrowIfFailed(m_device.GetDevice()->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(&result->m_pipeline))); + + // Store the prim type as well + result->m_primitiveTopology = *psoParams.primitiveTopology; + + wchar_t uniName[1024]; + swprintf(uniName, 1024, L"%hs%hs", vertexShaderName, vertexEntryPoint); + result->m_pipelineLayout->SetName(uniName); + result->m_pipeline->SetName(uniName); + + result->m_bp = EI_BP_GRAPHICS; + return std::unique_ptr(result); +} + +void EI_Device::WaitForCompute() +{ + m_computeDoneFence.GpuWaitForFence(m_device.GetGraphicsQueue()); +} + +void EI_Device::SignalComputeStart() +{ +} + +void EI_Device::WaitForLastFrameGraphics() +{ + m_lastFrameGraphicsCommandBufferFence.CpuWaitForFence(1); +} + +void EI_Device::SubmitComputeCommandList() +{ + m_currentComputeCommandBuffer.commandBuffer->Close(); + + // Execute the command list. + ID3D12CommandList* ppCommandLists[] = { m_currentComputeCommandBuffer.commandBuffer.Get() }; + m_device.GetComputeQueue()->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); + m_computeDoneFence.IssueFence(m_device.GetComputeQueue()); +} + +void EI_CommandContext::DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams) +{ + commandBuffer->IASetIndexBuffer(&drawParams.pIndexBuffer->m_pBuffer->indexBufferView); + commandBuffer->IASetPrimitiveTopology(pso.m_primitiveTopology); + commandBuffer->SetPipelineState(pso.m_pipeline.Get()); + commandBuffer->DrawIndexedInstanced(drawParams.numIndices, 1, 0, 0, 0); +} + +void EI_CommandContext::DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams) +{ + commandBuffer->SetPipelineState(pso.m_pipeline.Get()); + commandBuffer->IASetPrimitiveTopology(pso.m_primitiveTopology); + commandBuffer->DrawInstanced(drawParams.numVertices, drawParams.numInstances, 0, 0); +} + +void EI_CommandContext::PushConstants(EI_PSO* pso, int size, void* data) +{ + assert(false && "Not yet implemented!"); + //vkCmdPushConstants(commandBuffer, pso->m_pipelineLayout, VK_SHADER_STAGE_ALL, 0, size, data); +} + +void EI_Device::BeginNewCommandBuffer() +{ + m_currentCommandBuffer.commandBuffer = m_commandListRing.GetNewCommandList(); + m_recording = true; +} + +void EI_Device::BeginNewComputeCommandBuffer() +{ + m_currentComputeCommandBuffer.commandBuffer = m_computeCommandListRing.GetNewCommandList(); +} + +void EI_Device::EndAndSubmitCommandBuffer() +{ + m_currentCommandBuffer.commandBuffer->Close(); + + // Execute the command list. + ID3D12CommandList* ppCommandLists[] = { m_currentCommandBuffer.commandBuffer.Get() }; + m_device.GetGraphicsQueue()->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); + m_recording = false; +} + +void EI_Device::EndAndSubmitCommandBufferWithFence() +{ + m_currentCommandBuffer.commandBuffer->Close(); + + // Execute the command list. + ID3D12CommandList* ppCommandLists[] = { m_currentCommandBuffer.commandBuffer.Get() }; + m_device.GetGraphicsQueue()->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); + m_lastFrameGraphicsCommandBufferFence.IssueFence(m_device.GetGraphicsQueue()); + m_recording = false; +} + +void EI_Device::BeginBackbufferRenderPass() +{ + using namespace DirectX::Detail; + const wchar_t pPassName[] = L"BackBufferRenderPass"; + UINT size = static_cast((wcslen(pPassName) + 1) * sizeof(wchar_t)); + m_currentCommandBuffer.commandBuffer.Get()->BeginEvent(PIX_EVENT_UNICODE_VERSION, pPassName, size); + + // First transition the current back buffer to render target from present resource + CD3DX12_RESOURCE_BARRIER barrier = CD3DX12_RESOURCE_BARRIER::Transition(m_swapChain.GetCurrentBackBufferResource(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET); + m_currentCommandBuffer.commandBuffer->ResourceBarrier(1, &barrier); + + D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle[MaxRenderAttachments]; + + cpuHandle[0] = *m_swapChain.GetCurrentBackBufferRTV(); + cpuHandle[1] = m_depthBuffer->DSView->GetCPU(); + + m_currentCommandBuffer.commandBuffer->OMSetRenderTargets(1, cpuHandle, FALSE, &cpuHandle[1]); + + // Setup fast clear + D3D12_CLEAR_VALUE clearValues[2]; + clearValues[0].Format = m_swapChain.GetFormat(); + clearValues[0].Color[0] = 0.0f; + clearValues[0].Color[1] = 0.0f; + clearValues[0].Color[2] = 0.0f; + clearValues[0].Color[3] = 1.0f; + + clearValues[1].Format = DXGI_FORMAT_D32_FLOAT; + clearValues[1].DepthStencil.Depth = 1.0f; + clearValues[1].DepthStencil.Stencil = 0; + + // Do a clear before rendering everything out to the swap chain buffer + m_currentCommandBuffer.commandBuffer->ClearRenderTargetView(cpuHandle[0], clearValues[0].Color, 0, nullptr); + // Only clear depth as we don't currently have a stencil + m_currentCommandBuffer.commandBuffer->ClearDepthStencilView(cpuHandle[1], D3D12_CLEAR_FLAG_DEPTH, clearValues[1].DepthStencil.Depth, clearValues[1].DepthStencil.Stencil, 0, nullptr); + + CAULDRON_DX12::SetViewportAndScissor(m_currentCommandBuffer.commandBuffer.Get(), 0, 0, m_width, m_height); +} + +void EI_Device::EndRenderPass() +{ + // Unbind all render targets/depth/stencil buffers + m_currentCommandBuffer.commandBuffer->OMSetRenderTargets(0, nullptr, FALSE, nullptr); +} + +void EI_Device::GetTimeStamp(char* name) +{ + m_gpuTimer.GetTimeStamp(m_currentCommandBuffer.commandBuffer.Get(), name); +} + +D3D12_DESCRIPTOR_RANGE_TYPE GetDescriptorRangeType(EI_ResourceTypeEnum type) +{ + switch (type) + { + case EI_RESOURCETYPE_BUFFER_RW: + return D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + case EI_RESOURCETYPE_BUFFER_RO: + return D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + case EI_RESOURCETYPE_IMAGE_RW: + return D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + case EI_RESOURCETYPE_IMAGE_RO: + return D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + case EI_RESOURCETYPE_UNIFORM: + return D3D12_DESCRIPTOR_RANGE_TYPE_CBV; + case EI_RESOURCETYPE_SAMPLER: + return D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER; + default: + assert(0); + } + return D3D12_DESCRIPTOR_RANGE_TYPE_UAV; +} + +CD3DX12_DESCRIPTOR_RANGE DX12DescriptorSetBinding(int binding, EI_ShaderStage stage, EI_ResourceTypeEnum type) { + + CD3DX12_DESCRIPTOR_RANGE b; + D3D12_DESCRIPTOR_RANGE_TYPE rangeType; + + if (type == EI_RESOURCETYPE_BUFFER_RO) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + } + if (type == EI_RESOURCETYPE_BUFFER_RW) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + } + if (type == EI_RESOURCETYPE_IMAGE_RW) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + } + if (type == EI_RESOURCETYPE_IMAGE_RO) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + } + if (type == EI_RESOURCETYPE_UNIFORM) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_CBV; + } + if (type == EI_RESOURCETYPE_SAMPLER) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER; + } + b.Init(rangeType, 1, binding, 0); + return b; +} + +std::unique_ptr EI_Device::CreateLayout(const EI_LayoutDescription& description) +{ + std::vector layoutBindings; + + EI_BindLayout* pLayout = new EI_BindLayout; + + int numResources = (int)description.resources.size(); + + for (int i = 0; i < numResources; ++i) + { + int binding = description.resources[i].binding; + if (binding >= 0) { + layoutBindings.push_back(DX12DescriptorSetBinding(binding, description.stage, description.resources[i].type)); + } + } + + pLayout->layoutBindings = layoutBindings; + pLayout->description = description; + return std::unique_ptr(pLayout); +} + +EI_BindLayout::~EI_BindLayout() +{ + // Nothing to do here ... +} + +void EI_Device::OnBeginFrame(bool bDoAsync) +{ + // This needs to be called prior to getting a command list because it's done differently on DX12 than Vulkan + if (bDoAsync) + m_computeCommandListRing.OnBeginFrame(); + + // Let our resource managers do some house keeping + m_constantBufferRing.OnBeginFrame(); + + // Timing values + UINT64 gpuTicksPerSecond; + m_device.GetGraphicsQueue()->GetTimestampFrequency(&gpuTicksPerSecond); + m_gpuTimer.OnBeginFrame(gpuTicksPerSecond, &m_timeStamps); + + // if a resize event already started a the command buffer - we need to do it this way, + // because multiple resizes in one frame could overflow the command buffer pool if we open a new + // command buffer everytime we resize + if (m_recording) + { + EndAndSubmitCommandBuffer(); + FlushGPU(); + } + + WaitForLastFrameGraphics(); + BeginNewCommandBuffer(); + + if (bDoAsync) + BeginNewComputeCommandBuffer(); + + std::map timeStampMap; + for (int i = 0; i < (int)m_timeStamps.size() - 1; ++i) + { + timeStampMap[m_timeStamps[i + 1].m_label] += m_timeStamps[i + 1].m_microseconds - m_timeStamps[i].m_microseconds; + } + int i = 0; + m_sortedTimeStamps.resize(timeStampMap.size()); + for (std::map::iterator it = timeStampMap.begin(); it != timeStampMap.end(); ++it) + { + m_sortedTimeStamps[i].m_label = it->first; + m_sortedTimeStamps[i].m_microseconds = it->second; + ++i; + } + if (m_timeStamps.size() > 0) + { + //scrolling data and average computing + static float values[128]; + values[127] = (float)(m_timeStamps.back().m_microseconds - m_timeStamps.front().m_microseconds); + float average = values[0]; + for (uint32_t i = 0; i < 128 - 1; i++) { values[i] = values[i + 1]; average += values[i]; } + average /= 128; + m_averageGpuTime = average; + } +} + +void EI_Device::OnEndFrame() +{ + // Transition the color buffer to read before rendering into the swapchain + EI_Barrier barrier = { m_colorBuffer.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV }; + m_currentCommandBuffer.SubmitBarrier(1, &barrier); + + EndAndSubmitCommandBuffer(); + + m_swapChain.WaitForSwapChain(); + + m_commandListRing.OnBeginFrame(); + + BeginNewCommandBuffer(); + // Start by resolving render to swap chain + BeginBackbufferRenderPass(); + + // Tonemapping + { + m_currentCommandBuffer.commandBuffer->OMSetRenderTargets(1, m_swapChain.GetCurrentBackBufferRTV(), true, NULL); + + float exposure = 1.0f; + int toneMapper = 0; + m_toneMapping.Draw(m_currentCommandBuffer.commandBuffer.Get(), m_colorBuffer.get()->SRView, exposure, toneMapper); + GetTimeStamp("Tone mapping"); + } + + // Do UI render over top + RenderUI(); + + // Wrap up + EndRenderPass(); + + // When we are done, transition it back for the next frame + barrier = { m_colorBuffer.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET }; + m_currentCommandBuffer.SubmitBarrier(1, &barrier); + + + // Make swap chain buffer presentable again + CD3DX12_RESOURCE_BARRIER presentBarrier = CD3DX12_RESOURCE_BARRIER::Transition(m_swapChain.GetCurrentBackBufferResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT); + m_currentCommandBuffer.commandBuffer->ResourceBarrier(1, &presentBarrier); + + m_gpuTimer.OnEndFrame(); + // Get the stats from the GPU + m_gpuTimer.CollectTimings(m_currentCommandBuffer.commandBuffer.Get()); + + EndAndSubmitCommandBufferWithFence(); + + m_swapChain.Present(); +} + +void EI_Device::RenderUI() +{ + m_ImGUI.Draw(m_currentCommandBuffer.commandBuffer.Get()); +} + +static EI_Device* g_device = NULL; + +EI_Device* GetDevice() { + if (g_device == NULL) { + g_device = new EI_Device(); + } + return g_device; +} + +void EI_CommandContext::BindSets(EI_PSO* pso, int numBindSets, EI_BindSet** bindSets) +{ + assert(numBindSets < 8); + ID3D12DescriptorHeap* heaps[] = { GetDevice()->GetResourceViewHeaps().GetCBV_SRV_UAVHeap(), GetDevice()->GetResourceViewHeaps().GetSamplerHeap() }; + commandBuffer->SetDescriptorHeaps(2, heaps); + + if (pso->m_bp == EI_BP_GRAPHICS) + { + commandBuffer->SetGraphicsRootSignature(pso->m_pipelineLayout.Get()); + for (int i = 0; i < numBindSets; i++) + commandBuffer->SetGraphicsRootDescriptorTable(i, bindSets[i]->descriptorTable.GetGPU()); + } + else + { + commandBuffer->SetComputeRootSignature(pso->m_pipelineLayout.Get()); + + for (int i = 0; i < numBindSets; i++) + commandBuffer->SetComputeRootDescriptorTable(i, bindSets[i]->descriptorTable.GetGPU()); + } +} + +EI_Resource::EI_Resource() : + m_ResourceType(EI_ResourceType::Undefined), + m_pTexture(nullptr) +{ +} + +EI_Resource::~EI_Resource() +{ + if (m_ResourceType == EI_ResourceType::Buffer && m_pBuffer != nullptr) + { + m_pBuffer->Free(); + delete m_pBuffer; + } + else if (m_ResourceType == EI_ResourceType::Texture) + { + m_pTexture->OnDestroy(); + delete m_pTexture; + } + else if (m_ResourceType == EI_ResourceType::Sampler) + { + delete m_pSampler; + } + else + { + assert(false && "Trying to destroy an undefined resource"); + } +} + +D3D12_RESOURCE_STATES DX12AccessFlags(EI_ResourceState state) +{ + switch (state) + { + case EI_STATE_UNDEFINED: + return D3D12_RESOURCE_STATE_COMMON; + case EI_STATE_SRV: + return D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; + case EI_STATE_UAV: + return D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + case EI_STATE_COPY_DEST: + return D3D12_RESOURCE_STATE_COPY_DEST; + case EI_STATE_COPY_SOURCE: + return D3D12_RESOURCE_STATE_COPY_SOURCE; + case EI_STATE_RENDER_TARGET: + return D3D12_RESOURCE_STATE_RENDER_TARGET; + case EI_STATE_DEPTH_STENCIL: + return D3D12_RESOURCE_STATE_DEPTH_WRITE; + case EI_STATE_INDEX_BUFFER: + return D3D12_RESOURCE_STATE_INDEX_BUFFER; + case EI_STATE_CONSTANT_BUFFER: + return D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER; + default: + assert(0); + return D3D12_RESOURCE_STATE_COMMON; + } +} + +void EI_CommandContext::SubmitBarrier(int numBarriers, EI_Barrier* barriers) +{ + assert(numBarriers < 16); + CD3DX12_RESOURCE_BARRIER b[16]; + int actualNumBarriers = 0; + for (int i = 0; i < numBarriers; ++i) + { + ID3D12Resource* pResource = nullptr; + if (barriers[i].pResource->m_ResourceType == EI_ResourceType::Buffer) + pResource = barriers[i].pResource->m_pBuffer->gpuBuffer; + else + pResource = barriers[i].pResource->m_pTexture->GetResource(); + D3D12_RESOURCE_STATES from = DX12AccessFlags(barriers[i].from); + D3D12_RESOURCE_STATES to = DX12AccessFlags(barriers[i].to); + if (from != to) + { + b[actualNumBarriers++] = CD3DX12_RESOURCE_BARRIER::Transition(pResource, from, to); + } + else if (from == D3D12_RESOURCE_STATE_UNORDERED_ACCESS && to == D3D12_RESOURCE_STATE_UNORDERED_ACCESS) + { + b[actualNumBarriers++] = CD3DX12_RESOURCE_BARRIER::UAV(pResource); + } + } + if (actualNumBarriers != 0) + { + commandBuffer->ResourceBarrier(actualNumBarriers, b); + } +} + +void EI_CommandContext::BindPSO(EI_PSO* pso) +{ + commandBuffer->SetPipelineState(pso->m_pipeline.Get()); + if (pso->m_bp == EI_BP_GRAPHICS) + { + commandBuffer->IASetPrimitiveTopology(pso->m_primitiveTopology); + } +} + +void EI_CommandContext::Dispatch(int numGroups) +{ + commandBuffer->Dispatch(numGroups, 1, 1); +} + +void EI_CommandContext::UpdateBuffer(EI_Resource* res, void* data) +{ + D3D12_SUBRESOURCE_DATA subResData = {}; + subResData.pData = data; + subResData.RowPitch = res->m_pBuffer->m_totalMemSize; + subResData.SlicePitch = res->m_pBuffer->m_totalMemSize; + UpdateSubresources<1>(commandBuffer.Get(), res->m_pBuffer->gpuBuffer, res->m_pBuffer->cpuBuffer, 0, 0, 1, &subResData); +} + +void EI_CommandContext::ClearUint32Image(EI_Resource* res, uint32_t value) +{ + assert(res->m_ResourceType == EI_ResourceType::Buffer && "Trying to clear a non-UAV resource"); + + UINT32 values[4] = { value, value, value, value }; + commandBuffer->ClearUnorderedAccessViewUint(res->m_pBuffer->m_pUnorderedAccessView->GetGPU(), res->m_pBuffer->m_pUnorderedAccessView->GetCPU(), res->m_pBuffer->gpuBuffer, values, 0, nullptr); + } diff --git a/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.h b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.h new file mode 100644 index 0000000000..94b30cd823 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.h @@ -0,0 +1,338 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef DX12_ENGINE_INTERFACE_IMPL +#define DX12_ENGINE_INTERFACE_IMPL + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include +// C RunTime Header Files +#include +#include +#include +#include +#include +#include + +#include "Base/Device.h" +#include "Base/SwapChain.h" +#include "Base/Texture.h" +#include "Base/StaticBufferPool.h" +#include "Base/DynamicBufferRing.h" +#include "Base/CommandListRing.h" +#include "Base/GPUTimestamps.h" +#include "Base/Imgui.h" +#include "Base/UserMarkers.h" + +#include "PostProc/Tonemapping.h" + +#include "EngineInterface.h" +#include "TressFXCommon.h" + +#include +#include + +// Enable to have access to debug UAV +//#define TRESSFX_DEBUG_UAV 1 +#define USE_VID_MEM true + +typedef DXGI_FORMAT EI_ResourceFormat; + +typedef CAULDRON_DX12::CBV_SRV_UAV EI_UAV; +typedef CAULDRON_DX12::CBV_SRV_UAV EI_SRV; +typedef CAULDRON_DX12::RTV EI_RTV; +typedef CAULDRON_DX12::DSV EI_DSV; +typedef CAULDRON_DX12::RTV EI_RTV; + +struct EI_BindEntry +{ + int Binding = 0; + EI_ResourceTypeEnum ResourceType = EI_ResourceTypeEnum::EI_RESOURCETYPE_UNDEFINED; + EI_Resource* pResource; +}; + +class EI_BindSet +{ +public: + ~EI_BindSet(); + CAULDRON_DX12::ResourceView descriptorTable; +}; + +class EI_CommandContext +{ +public: + void SubmitBarrier(int numBarriers, EI_Barrier* barriers); + void BindPSO(EI_PSO* pso); + void BindSets(EI_PSO* pso, int numBindSets, EI_BindSet** bindSets); + void Dispatch(int numGroups); + void UpdateBuffer(EI_Resource* res, void* data); + void ClearUint32Image(EI_Resource* res, uint32_t value); + void DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams); + void DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams); + void PushConstants(EI_PSO* pso, int size, void* data); + Microsoft::WRL::ComPtr commandBuffer = nullptr; +}; + +namespace CAULDRON_DX12 +{ + class GLTFTexturesAndBuffers; + class GltfPbrPass; + class GltfDepthPass; +} + +typedef CAULDRON_DX12::GLTFTexturesAndBuffers EI_GLTFTexturesAndBuffers; +typedef CAULDRON_DX12::GltfPbrPass EI_GltfPbrPass; +typedef CAULDRON_DX12::GltfDepthPass EI_GltfDepthPass; + +struct EI_RenderTargetSet; +class GLTFCommon; + +class EI_Marker +{ +public: + EI_Marker(EI_CommandContext& ctx, const char * string) : marker(ctx.commandBuffer.Get(), string) {} +private: + CAULDRON_DX12::UserMarker marker; +}; + +class EI_Device +{ +public: + EI_Device(); + ~EI_Device(); + // interface + EI_CommandContext& GetCurrentCommandContext() { return m_currentCommandBuffer; } + std::unique_ptr CreateBufferResource(const int structSize, const int structCount, const unsigned int flags, const char* name); + std::unique_ptr CreateUint32Resource(const int width, const int height, const int arraySize, const char* name, uint32_t ClearValue = 0); +#ifdef TRESSFX_DEBUG_UAV + std::unique_ptr CreateDebugUAVResource(const int width, const int height, const size_t channels, const int arraySize, const char* name, float ClearValue = 0.f); +#endif // TRESSFX_DEBUG_UAV + std::unique_ptr CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues = nullptr); + std::unique_ptr CreateDepthResource(const int width, const int height, const char* name); + std::unique_ptr CreateResourceFromFile(const char* szFilename, bool useSRGB = false); + std::unique_ptr CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode); + + std::unique_ptr CreateLayout(const EI_LayoutDescription& description); + + std::unique_ptr CreateBindSet(EI_BindLayout* layout, EI_BindSetDescription& bindSet); + + std::unique_ptr CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + std::unique_ptr CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + + std::unique_ptr CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon); + std::unique_ptr CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + std::unique_ptr CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + + void BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderPassSet, const wchar_t* pPassName, uint32_t width = 0, uint32_t height = 0); + void EndRenderPass(EI_CommandContext& commandContext); + void SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height); + + std::unique_ptr CreateComputeShaderPSO(const char* shaderName, const char* entryPoint, EI_BindLayout** layouts, int numLayouts); + std::unique_ptr CreateGraphicsPSO(const char* vertexShaderName, const char* vertexEntryPoint, const char* fragmentShaderName, const char* fragmentEntryPoint, EI_PSOParams& psoParams); + + /* async compute */ + EI_CommandContext& GetComputeCommandContext() { return m_currentComputeCommandBuffer; } + void WaitForCompute(); + void SignalComputeStart(); + void WaitForLastFrameGraphics(); + void SubmitComputeCommandList(); + /* /async compute */ + + // internals + void OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName); + void OnResize(uint32_t width, uint32_t height); + void FlushGPU() { m_device.GPUFlush(); } + void OnDestroy(); + void OnBeginFrame(bool bDoAsync); + void OnEndFrame(); + void BeginNewCommandBuffer(); + void BeginNewComputeCommandBuffer(); + void EndAndSubmitCommandBuffer(); + void BeginBackbufferRenderPass(); + void EndRenderPass(); + void RenderUI(); + + void SetVSync(bool vSync) { m_vSync = vSync; } + + CAULDRON_DX12::Device* GetCauldronDevice() { return &m_device; } + + CAULDRON_DX12::UploadHeap* GetUploadHeap() { return &m_uploadHeap; } + CAULDRON_DX12::StaticBufferPool* GetVidMemBufferPool() { return &m_vidMemBufferPool; } + CAULDRON_DX12::DynamicBufferRing* GetConstantBufferRing() { return &m_constantBufferRing; } + + // Find a better place to put this ... + EI_Resource* GetDepthBufferResource() { return m_depthBuffer.get(); } + EI_ResourceFormat GetDepthBufferFormat() { return DXGI_FORMAT_D32_FLOAT; } + EI_Resource* GetColorBufferResource() { return m_colorBuffer.get(); } + EI_ResourceFormat GetColorBufferFormat() { return DXGI_FORMAT_R8G8B8A8_UNORM; } + EI_Resource* GetShadowBufferResource() { return m_shadowBuffer.get(); } + EI_ResourceFormat GetShadowBufferFormat() { return GetDepthBufferFormat(); } + EI_Resource* GetDefaultWhiteTexture() { return m_DefaultWhiteTexture.get(); } + EI_BindSet* GetSamplerBindSet() { return m_pSamplerBindSet.get(); } + +#ifdef TRESSFX_DEBUG_UAV + EI_Resource* GetDebugUAVResource() { return m_pDebugUAV.get(); } +#endif // TRESSFX_DEBUG_UAV + + // for the client code to set timestamps + void GetTimeStamp(char* name); + int GetNumTimeStamps() { return (int)m_sortedTimeStamps.size(); } + const char* GetTimeStampName(const int i) { return m_sortedTimeStamps[i].m_label.c_str(); } + int GetTimeStampValue(const int i) { return (int)m_sortedTimeStamps[i].m_microseconds; } + void DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets); + float GetAverageGpuTime() const { return m_averageGpuTime; } + + // only to call by implementation internals + ID3D12Device* GetDX12Device() { return m_device.GetDevice(); } + CAULDRON_DX12::ResourceViewHeaps& GetResourceViewHeaps() { return m_resourceViewHeaps; } + + void AllocateCPUVisibleView(CAULDRON_DX12::ResourceView* pResourceView); +private: + void EndAndSubmitCommandBufferWithFence(); + CAULDRON_DX12::Device m_device; + CAULDRON_DX12::SwapChain m_swapChain; + int m_currentImageIndex; + + // We need to be able to get access to the depth buffer from within the demo + // so store as an agnostic resource. We will also store a color target for all our sample's works + std::unique_ptr m_depthBuffer; + std::unique_ptr m_colorBuffer; + std::unique_ptr m_shadowBuffer; + +#ifdef TRESSFX_DEBUG_UAV + std::unique_ptr m_pDebugUAV; // Debug UAV +#endif // TRESSFX_DEBUG_UAV + + // Default resource to use when a resource is missing + std::unique_ptr m_DefaultWhiteTexture; + + std::unique_ptr m_pEndFrameResolveBindLayout = nullptr; + std::unique_ptr m_pEndFrameResolveBindSet = nullptr; + std::unique_ptr m_pSamplerBindSet = nullptr; + std::unique_ptr m_pEndFrameResolvePSO = nullptr; + std::unique_ptr m_pFullscreenIndexBuffer; + + int m_width; + int m_height; + bool m_vSync = false; + + bool m_recording = false; + + CAULDRON_DX12::ToneMapping m_toneMapping; + + // vulkan specific imgui stuff + CAULDRON_DX12::ImGUI m_ImGUI; + + // resource allocators + CAULDRON_DX12::ResourceViewHeaps m_resourceViewHeaps; + CAULDRON_DX12::UploadHeap m_uploadHeap; + CAULDRON_DX12::StaticBufferPool m_vidMemBufferPool; + CAULDRON_DX12::StaticBufferPool m_sysMemBufferPool; + CAULDRON_DX12::DynamicBufferRing m_constantBufferRing; // "dynamic" uniform buffers + CAULDRON_DX12::CommandListRing m_commandListRing; + + CAULDRON_DX12::GPUTimestamps m_gpuTimer; + std::vector m_timeStamps; + std::vector m_sortedTimeStamps; + float m_averageGpuTime; + + EI_CommandContext m_currentCommandBuffer; + + // async compute + CAULDRON_DX12::CommandListRing m_computeCommandListRing; + EI_CommandContext m_currentComputeCommandBuffer; + + CAULDRON_DX12::Fence m_computeDoneFence; + CAULDRON_DX12::Fence m_lastFrameGraphicsCommandBufferFence; + std::unique_ptr m_LinearWrapSampler; + + // Need to manage discreet heaps ourselves + uint32_t m_DescriptorSize = 0; + Microsoft::WRL::ComPtr< ID3D12DescriptorHeap> m_CPUDescriptorHeap = nullptr; + uint32_t m_CPUDescriptorIndex = 0; +}; + +struct DX12Resource; + +class EI_Resource +{ +public: + // need this for automatic destruction + EI_Resource(); + ~EI_Resource(); + + int GetHeight() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetHeight() : 0; } + int GetWidth() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetWidth() : 0; } + + EI_ResourceType m_ResourceType = EI_ResourceType::Undefined; + + union + { + DX12Resource* m_pBuffer; + CAULDRON_DX12::Texture* m_pTexture; + CAULDRON_DX12::SAMPLER* m_pSampler; + }; + + // Needed since we will allocate samplers directly in the table range + D3D12_SAMPLER_DESC samplerDesc = {}; + + EI_RTV* RTView = nullptr; + EI_DSV* DSView = nullptr; + EI_SRV* SRView = nullptr; +private: +}; + +struct EI_BindLayout +{ + ~EI_BindLayout(); + + EI_LayoutDescription description; + std::vector layoutBindings; +}; + +const static int MaxRenderAttachments = 5; +struct EI_RenderTargetSet +{ + ~EI_RenderTargetSet(); + void SetResources(const EI_Resource** pResourcesArray); + + const EI_Resource* m_RenderResources[MaxRenderAttachments] = { nullptr }; + EI_ResourceFormat m_RenderResourceFormats[MaxRenderAttachments]; // Needed for PS0 creation when we don't have resources yet (i.e gltf) + D3D12_CLEAR_VALUE m_ClearValues[MaxRenderAttachments]; + bool m_ClearColor[MaxRenderAttachments] = { false }; + uint32_t m_NumResources = 0; + bool m_HasDepth = false; + bool m_ClearDepth = false; +}; + +class EI_PSO +{ +public: + ~EI_PSO(); + + Microsoft::WRL::ComPtr m_pipeline; + Microsoft::WRL::ComPtr m_pipelineLayout; + D3D12_PRIMITIVE_TOPOLOGY m_primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + EI_BindPoint m_bp; +}; + +EI_Device* GetDevice(); + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/EngineInterface.h b/Gems/AtomTressFX/External/Code/src/EngineInterface.h new file mode 100644 index 0000000000..e35b0a4d09 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/EngineInterface.h @@ -0,0 +1,286 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once + +#include "AMD_Types.h" +#include + +// tressfx gpu interface implementation +class EI_Device; // ID3D11Device +class EI_CommandContext; // ID3D11DeviceContext +class EI_Resource; // ID3D11Texture2D + UAV + SRV + RTV or ID3D11Buffer + UAV + SRV (see details below) +class EI_LayoutManager; // Anything you might use to assign shader slots. +struct EI_BindLayout; // Array of resources to bind. +class EI_PSO; // Pipeline state (raster state, etc) +struct EI_RenderTargetSet; // Render set + +enum EI_ShaderStage +{ + EI_UNINITIALIZED = 0, // we will always specify shader stage. "all" is never used. + EI_VS, + EI_PS, + EI_CS, + EI_ALL + }; + +enum EI_ResourceState +{ + EI_STATE_UNDEFINED, + EI_STATE_SRV, + EI_STATE_UAV, + EI_STATE_COPY_DEST, + EI_STATE_COPY_SOURCE, + EI_STATE_RENDER_TARGET, + EI_STATE_DEPTH_STENCIL, + EI_STATE_INDEX_BUFFER, + EI_STATE_CONSTANT_BUFFER, +}; + +enum EI_ResourceTypeEnum +{ + EI_RESOURCETYPE_UNDEFINED = 0, + EI_RESOURCETYPE_BUFFER_RW = 0x01, + EI_RESOURCETYPE_BUFFER_RO = 0x02, + EI_RESOURCETYPE_IMAGE_RW = 0x03, + EI_RESOURCETYPE_IMAGE_RO = 0x04, + EI_RESOURCETYPE_UNIFORM = 0x05, + EI_RESOURCETYPE_SAMPLER = 0x06, +}; + +struct EI_ResourceDescription { + const char * name; + int binding; + EI_ResourceTypeEnum type; +}; + +struct EI_LayoutDescription +{ + std::vector resources; + EI_ShaderStage stage; +}; + +struct EI_IndexedDrawParams +{ + EI_Resource* pIndexBuffer; + int numIndices; + int numInstances; +}; + +struct EI_DrawParams +{ + int numVertices; + int numInstances; +}; + +struct EI_Barrier +{ + EI_Resource* pResource; + EI_ResourceState from; + EI_ResourceState to; +}; + +struct EI_BindSetDescription +{ + std::vector resources; +}; + +// Add more pso control enums as necessary +enum class EI_CompareFunc +{ + Never = 0, + Less, + Equal, + LessEqual, + Greater, + NotEqual, + GreaterEqual, + Always, +}; + +enum class EI_BlendOp +{ + Add = 0, + Subtract, + ReverseSubtract, + Min, + Max +}; + +enum class EI_StencilOp +{ + Keep = 0, + Zero, + Replace, + IncrementClamp, + DecrementClamp, + Invert, + IncrementWrap, + DecrementWrap, +}; + +enum class EI_BlendFactor +{ + Zero = 0, + One, + SrcColor, + InvSrcColor, // 1 - SrcColor + DstColor, + InvDstColor, // 1 - DstColor + SrcAlpha, + InvSrcAlpha, // 1 - SrcAlpha + DstAlpha, + InvDstAlpha, // 1 - DstAlpha +}; + +enum class EI_Topology +{ + TriangleList = 0, + TriangleStrip, +}; + +struct EI_ColorBlendParams +{ + bool colorBlendEnabled = false; + EI_BlendOp colorBlendOp = EI_BlendOp::Add; + EI_BlendFactor colorSrcBlend = EI_BlendFactor::One; + EI_BlendFactor colorDstBlend = EI_BlendFactor::Zero; + EI_BlendOp alphaBlendOp = EI_BlendOp::Add; + EI_BlendFactor alphaSrcBlend = EI_BlendFactor::Zero; + EI_BlendFactor alphaDstBlend = EI_BlendFactor::One; +}; + +// Add as needed +enum EI_LayoutState { + Undefined = 0, + RenderColor, + RenderDepth, + ReadOnly, + Present, +}; + +enum EI_RenderPassFlags +{ + None = 0, + Load = 0x01, + Clear = 0x02, + Store = 0x04, + Depth = 0x08, +}; + +inline EI_RenderPassFlags operator| (EI_RenderPassFlags a, EI_RenderPassFlags b) +{ + return static_cast(static_cast(a) | static_cast(b)); +} + +struct EI_AttachmentParams +{ + EI_RenderPassFlags Flags = EI_RenderPassFlags::None; +}; + +enum class EI_ResourceType +{ + Undefined = 0, + Buffer, + Texture, + Sampler, +}; + +enum class EI_Filter +{ + Point = 0, + Linear, + // Add more as needed +}; + +enum class EI_AddressMode +{ + Wrap = 0, + ClampEdge, + // Add more as needed +}; + +struct EI_PSOParams +{ + EI_Topology primitiveTopology = EI_Topology::TriangleList; + bool colorWriteEnable = true; + bool depthTestEnable = false; + bool depthWriteEnable = false; + EI_CompareFunc depthCompareOp = EI_CompareFunc::Always; + + EI_ColorBlendParams colorBlendParams; + + bool stencilTestEnable = false; + EI_StencilOp backFailOp = EI_StencilOp::Keep; + EI_StencilOp backPassOp = EI_StencilOp::Keep; + EI_StencilOp backDepthFailOp = EI_StencilOp::Keep; + EI_CompareFunc backCompareOp = EI_CompareFunc::Always; + + EI_StencilOp frontFailOp = EI_StencilOp::Keep; + EI_StencilOp frontPassOp = EI_StencilOp::Keep; + EI_StencilOp frontDepthFailOp = EI_StencilOp::Keep; + EI_CompareFunc frontCompareOp = EI_CompareFunc::Always; + + uint32_t stencilReadMask = 0x00; + uint32_t stencilWriteMask = 0x00; + uint32_t stencilReference = 0x00; + + EI_BindLayout** layouts = nullptr; + int numLayouts = 0; + + EI_RenderTargetSet* renderTargetSet = nullptr; +}; + +enum EI_BindPoint { + EI_BP_COMPUTE, + EI_BP_GRAPHICS +}; + +enum EI_BufferFlags { + EI_BF_NEEDSUAV = 1u << 0, + EI_BF_NEEDSCPUMEMORY = 1u << 1, + EI_BF_UNIFORMBUFFER = 1u << 2, + EI_BF_VERTEXBUFFER = 1u << 3, + EI_BF_INDEXBUFFER = 1u << 4 +}; + +/////////////////////////////////////////////////////////////// +// We use 4 kinds of resources. +// 2D RW buffer +// Structured buffers. +// Index buffer. +// Constant buffers +// + +#ifndef TRESSFX_ASSERT +#include +#define TRESSFX_ASSERT assert +#endif + +#include + +#define EI_Read(ptr, size, pFile) fread(ptr, size, 1, pFile) +#define EI_Seek(pFile, offset) fseek(pFile, offset, SEEK_SET) +#define EI_LogWarning(msg) printf("%s", msg) + +#ifdef TRESSFX_VK + #include "VK/VKEngineInterfaceImpl.h" +#else + #include "DX12/DX12EngineInterfaceImpl.h" +#endif + +#include "SceneGLTFImpl.h" \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/HairStrands.cpp b/Gems/AtomTressFX/External/Code/src/HairStrands.cpp new file mode 100644 index 0000000000..8c7b9e2d02 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/HairStrands.cpp @@ -0,0 +1,103 @@ +//--------------------------------------------------------------------------------------- +// Example code that encapsulates three related objects. +// 1. The TressFXHairObject +// 2. An interface to get the current set of bones in world space that drive the hair object. +// 3. An interface to set up for drawing the strands, such as setting lighting parmeters, etc. +// +// Normally, you'd probably contain the TressFXObject in the engine wrapper, but we've arranged it this +// way to focus on the important aspects of integration. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "HairStrands.h" +#include "TressFXSimulation.h" +#include "TressFXHairObject.h" +#include "TressFXAsset.h" +#include "EngineInterface.h" +#include +using namespace DirectX; + +void HairStrands::TransitionSimToRendering(EI_CommandContext& context) +{ + m_pStrands->GetDynamicState().TransitionSimToRendering(context); +} + +void HairStrands::TransitionRenderingToSim(EI_CommandContext& context) +{ + m_pStrands->GetDynamicState().TransitionRenderingToSim(context); +} + +void HairStrands::UpdateBones(EI_CommandContext& context) +{ + std::vector boneMatrices = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber); + const AMD::float4x4* pBoneMatricesInWS = (const AMD::float4x4*)&boneMatrices[0]; + + // update bone matrices for bone skinning of first two vertices of hair strands + m_pStrands->UpdateBoneMatrices(pBoneMatricesInWS, (int)boneMatrices.size()); +} + +HairStrands::HairStrands( + EI_Scene * scene, + const char * tfxFilePath, + const char * tfxboneFilePath, + const char * hairObjectName, + int numFollowHairsPerGuideHair, + float tipSeparationFactor, + int skinNumber, + int renderIndex +) +{ + EI_Device* pDevice = GetDevice(); + EI_CommandContext& uploadCommandContext = pDevice->GetCurrentCommandContext(); + + TressFXAsset* asset = new TressFXAsset(); + size_t memOffset = 0; + + // Load *.tfx + FILE * fp = fopen(tfxFilePath, "rb"); + asset->LoadHairData(fp); + fclose(fp); + + asset->GenerateFollowHairs(numFollowHairsPerGuideHair, tipSeparationFactor, 0.012f); + asset->ProcessAsset(); + + // Load *.tfxbone + fp = fopen(tfxboneFilePath, "rb"); + asset->LoadBoneData(fp, skinNumber, scene); + fclose(fp); + + TressFXHairObject* hairObject = new TressFXHairObject(asset, pDevice, uploadCommandContext, hairObjectName, renderIndex); + + m_pStrands.reset(hairObject); + m_pScene = scene; + m_skinNumber = skinNumber; + + delete asset; +} + + + + + + + diff --git a/Gems/AtomTressFX/External/Code/src/HairStrands.h b/Gems/AtomTressFX/External/Code/src/HairStrands.h new file mode 100644 index 0000000000..f8753230b4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/HairStrands.h @@ -0,0 +1,69 @@ + + +//--------------------------------------------------------------------------------------- +// Example code that encapsulates three related objects. +// 1. The TressFXHairObject +// 2. An interface to get the current set of bones in world space that drive the hair object. +// 3. An interface to set up for drawing the strands, such as setting lighting parmeters, etc. +// Normally, you'd probably contain the TressFXObject in the engine wrapper, but we've arranged it this +// way to focus on the important aspects of integration. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include "AMD_TressFX.h" + +#include + +class EngineTressFXObject; +class TressFXSimulation; +class EI_Scene; +class EI_Resource; +class EI_CommandContext; +class TressFXHairObject; + +class HairStrands +{ +public: + HairStrands( + EI_Scene * scene, + const char * tfxFilePath, + const char * tfxboneFilePath, + const char * hairObjectName, + int numFollowHairsPerGuideHair, + float tipSeparationFactor, + int skinNumber, + int renderIndex); + + TressFXHairObject* GetTressFXHandle() { return m_pStrands.get(); } + void TransitionSimToRendering(EI_CommandContext& context); + void TransitionRenderingToSim(EI_CommandContext& context); + void UpdateBones(EI_CommandContext& context); +private: + std::unique_ptr m_pStrands; + EI_Scene * m_pScene = nullptr; + int m_skinNumber; +}; + + diff --git a/Gems/AtomTressFX/External/Code/src/MarchingCubesTables.h b/Gems/AtomTressFX/External/Code/src/MarchingCubesTables.h new file mode 100644 index 0000000000..2712eabb5e --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/MarchingCubesTables.h @@ -0,0 +1,235 @@ +//--------------------------------------------------------------------------------------- +// MARCHING_CUBES_EDGE_TABLE[] and MARCHING_CUBES_TRIANGLE_TABLE[] from: +// http://paulbourke.net/geometry/polygonise/ +// http://paulbourke.net/geometry/polygonise/marchingsource.cpp (public domain) +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef MARCHING_CUBES_TABLES_H +#define MARCHING_CUBES_TABLES_H + +// Contains 12-bit numbers, with one bit for each edge of a cube +// For each bit: +// 0 == do not generate a vertex at that edge +// 1 == generate a vertex at that edge +static const int MARCHING_CUBES_EDGE_TABLE[256] = { + 0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, + 0xd03, 0xe09, 0xf00, 0x190, 0x099, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, + 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, 0x230, 0x339, 0x033, 0x13a, 0x636, 0x73f, 0x435, + 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, 0x3a0, 0x2a9, 0x1a3, 0x0aa, + 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, 0x460, + 0x569, 0x663, 0x76a, 0x066, 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, + 0xa69, 0xb60, 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0x0ff, 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, + 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x055, 0x15c, + 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, + 0x2cf, 0x1c5, 0x0cc, 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, 0x8c0, 0x9c9, + 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0x0cc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, + 0x7c0, 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x055, 0x35f, 0x256, + 0x55a, 0x453, 0x759, 0x650, 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, + 0x3f5, 0x0ff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, + 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x066, 0x76a, 0x663, 0x569, 0x460, 0xca0, 0xda9, 0xea3, + 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0x0aa, 0x1a3, 0x2a9, 0x3a0, + 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, + 0x033, 0x339, 0x230, 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, + 0x49f, 0x596, 0x29a, 0x393, 0x099, 0x190, 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, + 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000 +}; + +// Contains triangle indicies for the (at most 12) vertices generated from EDGE_TABLE +// each line is 16 elements, and contains up to 15 indicies, or 5 triangles +// -1 == invalid index +static const int MARCHING_CUBES_TRIANGLE_TABLE[256 * 16] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 8, 3, 2, 10, 8, 10, 9, + 8, -1, -1, -1, -1, -1, -1, -1, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, + 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 10, 1, 0, 8, 10, 8, 11, + 10, -1, -1, -1, -1, -1, -1, -1, 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, + 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 7, 8, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 1, 9, 4, 7, 1, 7, 3, + 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, 9, 2, 10, 9, 0, 2, 8, 4, + 7, -1, -1, -1, -1, -1, -1, -1, 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1, + 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 4, 7, 11, 2, 4, 2, 0, + 4, -1, -1, -1, -1, -1, -1, -1, 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, + 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1, 3, 10, 1, 3, 11, 10, 7, 8, + 4, -1, -1, -1, -1, -1, -1, -1, 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1, + 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1, 4, 7, 11, 4, 11, 9, 9, 11, + 10, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 5, 4, 1, 5, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, + 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 10, 4, 9, + 5, -1, -1, -1, -1, -1, -1, -1, 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, + 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1, 9, 5, 4, 2, 3, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, + 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 2, 1, 5, 2, 5, 8, 2, 8, + 11, 4, 8, 5, -1, -1, -1, -1, 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, + 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1, 5, 4, 0, 5, 0, 11, 5, 11, + 10, 11, 0, 3, -1, -1, -1, -1, 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, + 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 3, 0, 9, 5, 3, 5, 7, + 3, -1, -1, -1, -1, -1, -1, -1, 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, + 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 7, 8, 9, 5, 7, 10, 1, + 2, -1, -1, -1, -1, -1, -1, -1, 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1, + 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1, 2, 10, 5, 2, 5, 3, 3, 5, + 7, -1, -1, -1, -1, -1, -1, -1, 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, + 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1, 2, 3, 11, 0, 1, 8, 1, 7, + 8, 1, 5, 7, -1, -1, -1, -1, 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1, + 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1, 5, 7, 0, 5, 0, 9, 7, 11, + 0, 1, 0, 10, 11, 10, 0, -1, 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1, + 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 8, 3, 1, 9, 8, 5, 10, + 6, -1, -1, -1, -1, -1, -1, -1, 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1, 9, 6, 5, 9, 0, 6, 0, 2, + 6, -1, -1, -1, -1, -1, -1, -1, 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1, + 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 0, 8, 11, 2, 0, 10, 6, + 5, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, + 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1, 6, 3, 11, 6, 5, 3, 5, 1, + 3, -1, -1, -1, -1, -1, -1, -1, 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1, + 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1, 6, 5, 9, 6, 9, 11, 11, 9, + 8, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 5, 10, 6, 8, 4, + 7, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1, + 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, 1, 2, 5, 5, 2, 6, 3, 0, + 4, 3, 4, 7, -1, -1, -1, -1, 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1, + 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1, 3, 11, 2, 7, 8, 4, 10, 6, + 5, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1, + 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, 9, 2, 1, 9, 11, 2, 9, 4, + 11, 7, 11, 4, 5, 10, 6, -1, 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1, + 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1, 0, 5, 9, 0, 6, 5, 0, 3, + 6, 11, 6, 3, 8, 4, 7, -1, 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1, + 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 10, 6, 4, 9, 10, 0, 8, + 3, -1, -1, -1, -1, -1, -1, -1, 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, + 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1, 1, 4, 9, 1, 2, 4, 2, 6, + 4, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1, + 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 3, 2, 8, 2, 4, 4, 2, + 6, -1, -1, -1, -1, -1, -1, -1, 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1, + 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1, 3, 11, 2, 0, 1, 6, 0, 6, + 4, 6, 1, 10, -1, -1, -1, -1, 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1, + 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1, 8, 11, 1, 8, 1, 0, 11, 6, + 1, 9, 1, 4, 6, 4, 1, -1, 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1, + 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 10, 6, 7, 8, 10, 8, 9, + 10, -1, -1, -1, -1, -1, -1, -1, 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1, + 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1, 10, 6, 7, 10, 7, 1, 1, 7, + 3, -1, -1, -1, -1, -1, -1, -1, 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1, + 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1, 7, 8, 0, 7, 0, 6, 6, 0, + 2, -1, -1, -1, -1, -1, -1, -1, 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1, 2, 0, 7, 2, 7, 11, 0, 9, + 7, 6, 7, 10, 9, 10, 7, -1, 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1, + 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1, 8, 9, 6, 8, 6, 7, 9, 1, + 6, 11, 6, 3, 1, 3, 6, -1, 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1, 7, 11, 6, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 11, 7, 6, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, + 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 8, 6, 11, + 7, -1, -1, -1, -1, -1, -1, -1, 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, + 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1, 7, 2, 3, 6, 2, 7, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, + 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, 1, 6, 2, 1, 8, 6, 1, 9, + 8, 8, 7, 6, -1, -1, -1, -1, 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1, + 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1, 0, 3, 7, 0, 7, 10, 0, 10, + 9, 6, 10, 7, -1, -1, -1, -1, 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1, + 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 6, 11, 3, 0, 6, 0, 4, + 6, -1, -1, -1, -1, -1, -1, -1, 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1, + 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1, 6, 8, 4, 6, 11, 8, 2, 10, + 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1, + 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1, 10, 9, 3, 10, 3, 2, 9, 4, + 3, 11, 3, 6, 4, 6, 3, -1, 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, + 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 4, 2, 4, + 6, 4, 3, 8, -1, -1, -1, -1, 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1, + 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1, 10, 1, 0, 10, 0, 6, 6, 0, + 4, -1, -1, -1, -1, -1, -1, -1, 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1, + 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 5, 7, 6, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, + 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 11, 7, 6, 8, 3, 4, 3, 5, + 4, 3, 1, 5, -1, -1, -1, -1, 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, + 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1, 7, 6, 11, 5, 4, 10, 4, 2, + 10, 4, 0, 2, -1, -1, -1, -1, 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1, + 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, 0, 8, 6, 0, 6, + 2, 6, 8, 7, -1, -1, -1, -1, 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1, + 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1, 9, 5, 4, 10, 1, 6, 1, 7, + 6, 1, 3, 7, -1, -1, -1, -1, 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1, + 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1, 7, 6, 10, 7, 10, 8, 5, 4, + 10, 4, 8, 10, -1, -1, -1, -1, 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1, + 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1, 0, 11, 8, 0, 5, 11, 0, 1, + 5, 5, 6, 11, -1, -1, -1, -1, 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1, + 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1, 0, 11, 3, 0, 6, 11, 0, 9, + 6, 5, 6, 9, 1, 2, 10, -1, 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1, + 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1, 5, 8, 9, 5, 2, 8, 5, 6, + 2, 3, 8, 2, -1, -1, -1, -1, 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1, + 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1, 1, 5, 6, 2, 1, 6, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1, + 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1, 0, 3, 8, 5, 6, 10, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 5, 10, 11, 7, 5, 8, 3, + 0, -1, -1, -1, -1, -1, -1, -1, 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1, + 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1, 11, 1, 2, 11, 7, 1, 7, 5, + 1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1, + 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1, 7, 5, 2, 7, 2, 11, 5, 9, + 2, 3, 2, 8, 9, 8, 2, -1, 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, + 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1, 9, 0, 1, 5, 10, 3, 5, 3, + 7, 3, 10, 2, -1, -1, -1, -1, 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1, + 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 7, 0, 7, 1, 1, 7, + 5, -1, -1, -1, -1, -1, -1, -1, 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1, + 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 8, 4, 5, 10, 8, 10, 11, + 8, -1, -1, -1, -1, -1, -1, -1, 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1, + 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1, 10, 11, 4, 10, 4, 5, 11, 3, + 4, 9, 4, 1, 3, 1, 4, -1, 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1, + 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1, 0, 2, 5, 0, 5, 9, 2, 11, + 5, 4, 5, 8, 11, 8, 5, -1, 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1, 5, 10, 2, 5, 2, 4, 4, 2, + 0, -1, -1, -1, -1, -1, -1, -1, 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1, + 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1, 8, 4, 5, 8, 5, 3, 3, 5, + 1, -1, -1, -1, -1, -1, -1, -1, 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1, 9, 4, 5, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, + 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1, 1, 10, 11, 1, 11, 4, 1, 4, + 0, 7, 4, 11, -1, -1, -1, -1, 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1, + 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1, 9, 7, 4, 9, 11, 7, 9, 1, + 11, 2, 11, 1, 0, 8, 3, -1, 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1, + 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1, 2, 9, 10, 2, 7, 9, 2, 3, + 7, 7, 4, 9, -1, -1, -1, -1, 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1, + 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1, 1, 10, 2, 8, 7, 4, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1, + 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1, 4, 0, 3, 7, 4, 3, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 11, 9, + 10, -1, -1, -1, -1, -1, -1, -1, 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1, + 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 11, 1, 11, 9, 9, 11, + 8, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1, + 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 2, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1, + 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 0, 1, + 8, 1, 10, 8, -1, -1, -1, -1, 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 9, 1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 +}; + +#endif diff --git a/Gems/AtomTressFX/External/Code/src/Math/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/Math/CMakeLists.txt new file mode 100644 index 0000000000..54de3e9847 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/CMakeLists.txt @@ -0,0 +1,14 @@ +project (TressFX_${GFX_API}) + +set(math_sources + Math/Color.h + Math/Matrix33.h + Math/Matrix33.cpp + Math/Matrix44.h + Math/Matrix44.cpp + Math/Quaternion.h + Math/Quaternion.cpp + Math/Transform.h + Math/Transform.cpp + Math/Vector3D.h + Math/Vector3D.cpp PARENT_SCOPE) diff --git a/Gems/AtomTressFX/External/Code/src/Math/Color.h b/Gems/AtomTressFX/External/Code/src/Math/Color.h new file mode 100644 index 0000000000..854621a69d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Color.h @@ -0,0 +1,70 @@ +//-------------------------------------------------------------------------------------- +// File: Color.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#pragma once + + +#include + +class Color +{ +public: + union + { + struct + { + float m[4]; + }; // r, g, b, a + struct + { + float r, g, b, a; + }; + }; + + Color() : + r(0), g(0), b(0), a(1) + {} + + Color(float r, float g, float b, float a = 1.f) : + m{ r, g, b, a } + {} + + Color(const Color& other) : + m{ other.r, other.g, other.b, other.a } + {} + + ~Color(){} + + const float& operator[](unsigned int i) const { return m[i]; } + float& operator[](unsigned int i) { return m[i]; } + + Color& operator=(const Color& other) + { + r = other.r; g = other.g; + b = other.b; a = other.a; + return *this; + } +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix33.cpp b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.cpp new file mode 100644 index 0000000000..ffbcc85dfa --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.cpp @@ -0,0 +1,378 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix33.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#include + +#include +#include + +namespace AMD +{ + const Matrix3 Matrix3::IDENTITY = + Matrix3(1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + const Matrix3 Matrix3::ZERO = + Matrix3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); + + Matrix3::Matrix3(void) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = 0; + } + + Matrix3::Matrix3(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = other.m[i][j]; + } + + Matrix3::Matrix3(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22) + { + m[0][0] = e00; + m[0][1] = e01; + m[0][2] = e02; + + m[1][0] = e10; + m[1][1] = e11; + m[1][2] = e12; + + m[2][0] = e20; + m[2][1] = e21; + m[2][2] = e22; + } + + Matrix3::~Matrix3(void) {} + + void Matrix3::SetIdentity() + { + m[0][0] = 1.0; + m[0][1] = 0.0; + m[0][2] = 0.0; + + m[1][0] = 0.0; + m[1][1] = 1.0; + m[1][2] = 0.0; + + m[2][0] = 0.0; + m[2][1] = 0.0; + m[2][2] = 1.0; + } + + float Matrix3::GetElement(int i, int j) const + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + return m[i][j]; + } + + void Matrix3::SetElement(int i, int j, float val) + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + m[i][j] = val; + } + + void Matrix3::Set(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22) + { + m[0][0] = e00; + m[0][1] = e01; + m[0][2] = e02; + + m[1][0] = e10; + m[1][1] = e11; + m[1][2] = e12; + + m[2][0] = e20; + m[2][1] = e21; + m[2][2] = e22; + } + + void Matrix3::SetRotation(const Vector3& axis, float ang) + { +#define vsin(x) ((1.0f) - cos(x)) + + float nx = axis.x; + float ny = axis.y; + float nz = axis.z; + + m[0][0] = nx * nx * vsin(ang) + cos(ang); + m[0][1] = nx * ny * vsin(ang) - nz * sin(ang); + m[0][2] = nx * nz * vsin(ang) + ny * sin(ang); + + m[1][0] = nx * ny * vsin(ang) + nz * sin(ang); + m[1][1] = ny * ny * vsin(ang) + cos(ang); + m[1][2] = ny * nz * vsin(ang) - nx * sin(ang); + + m[2][0] = nx * nz * vsin(ang) - ny * sin(ang); + m[2][1] = ny * nz * vsin(ang) + nx * sin(ang); + m[2][2] = nz * nz * vsin(ang) + cos(ang); + +#undef vsin + } + + void Matrix3::Inverse() + { + float det = m[0][0] * (m[2][2] * m[1][1] - m[2][1] * m[1][2]) - + m[1][0] * (m[2][2] * m[0][1] - m[2][1] * m[0][2]) + + m[2][0] * (m[1][2] * m[0][1] - m[1][1] * m[0][2]); + + m[0][0] = m[2][2] * m[1][1] - m[2][1] * m[1][2]; + m[0][1] = -m[2][2] * m[0][1] - m[2][1] * m[0][2]; + m[0][2] = m[1][2] * m[0][1] - m[1][1] * m[0][2]; + + m[1][0] = -m[2][2] * m[1][0] - m[2][0] * m[1][2]; + m[1][1] = m[2][2] * m[0][0] - m[2][0] * m[0][2]; + m[1][2] = -m[1][2] * m[0][0] - m[1][0] * m[0][2]; + + m[2][0] = m[2][1] * m[1][0] - m[2][0] * m[1][1]; + m[2][1] = -m[2][1] * m[0][0] - m[2][0] * m[0][1]; + m[2][2] = m[1][1] * m[0][0] - m[1][0] * m[0][1]; + + (*this) *= 1 / det; + } + + Matrix3 Matrix3::InverseOther() const + { + Matrix3 other(*this); + other.Inverse(); + return other; + } + + void Matrix3::Transpose() { *this = TransposeOther(); } + + Matrix3 Matrix3::TransposeOther() const + { + Matrix3 other; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + other.m[i][j] = m[j][i]; + + return other; + } + + Vector3 Matrix3::operator*(const Vector3& vec) const + { + Vector3 ret; + + ret.x = m[0][0] * vec.x + m[0][1] * vec.y + m[0][2] * vec.z; + ret.y = m[1][0] * vec.x + m[1][1] * vec.y + m[1][2] * vec.z; + ret.z = m[2][0] * vec.x + m[2][1] * vec.y + m[2][2] * vec.z; + + return ret; + } + + Matrix3 Matrix3::operator*(const Matrix3& other) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = + m[i][0] * other.m[0][j] + m[i][1] * other.m[1][j] + m[i][2] * other.m[2][j]; + + return ret; + } + + Matrix3 Matrix3::operator+(const Matrix3& other) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] + other.m[i][j]; + + return ret; + } + + Matrix3 Matrix3::operator-(const Matrix3& other) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] - other.m[i][j]; + + return ret; + } + + Matrix3 Matrix3::operator*(float val) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] * val; + + return ret; + } + + Matrix3 Matrix3::operator/(float val) const + { + Matrix3 ret; + + // assert(val != 0); + + float eps = 1e-10f; + + if (0 <= val && val <= eps) + val += eps; + else if (-eps <= val && val <= 0) + val -= eps; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] / val; + + return ret; + } + + Matrix3& Matrix3::operator*=(float val) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = val * m[i][j]; + + return (*this); + } + + Matrix3& Matrix3::operator-=(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = m[i][j] - other.m[i][j]; + + return (*this); + } + + Matrix3& Matrix3::operator+=(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = m[i][j] + other.m[i][j]; + + return (*this); + } + + Matrix3& Matrix3::operator=(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = other.m[i][j]; + + return (*this); + } + + // Matrix3& Matrix3::operator=(float a) + //{ + // for ( int i = 0; i < 3; i++ ) + // for ( int j = 0; j < 3; j++ ) + // m[i][j] = a; + // + // return (*this); + //} + + bool Matrix3::operator==(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + { + if (m[i][j] != other.m[i][j]) + return false; + } + + return true; + } + + bool Matrix3::operator!=(const Matrix3& other) + { + return !(*this).operator==(other); + } + + bool Matrix3::operator==(float a) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + { + if (m[i][j] != a) + return false; + } + + return true; + } + + bool Matrix3::operator!=(float a) { return !(*this).operator==(a); } + + float& Matrix3::operator()(int i, int j) + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + return m[i][j]; + } + + const float& Matrix3::operator()(int i, int j) const + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + return m[i][j]; + } + + Matrix3 operator*(float val, const Matrix3& other) { return other * val; } + + Matrix3 operator-(const Matrix3& other) + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = -other.m[i][j]; + + return ret; + } + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix33.h b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.h new file mode 100644 index 0000000000..75d262ba65 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.h @@ -0,0 +1,103 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix33.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +namespace AMD +{ + class Vector3; + + class Matrix3 + { + friend class Vector3; + friend class Quaternion; + + public: + Matrix3(void); + Matrix3(const Matrix3& other); + Matrix3(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22); + ~Matrix3(void); + + private: + float m[3][3]; + + public: + static const Matrix3 IDENTITY; + static const Matrix3 ZERO; + + public: + void SetIdentity(); + void Set(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22); + float GetElement(int i, int j) const; + void SetElement(int i, int j, float val); + void SetRotation(const Vector3& axis, float ang); + void Inverse(); + Matrix3 InverseOther() const; + void Transpose(); + Matrix3 TransposeOther() const; + + Vector3 operator*(const Vector3& vec) const; + Matrix3 operator*(const Matrix3& other) const; + Matrix3 operator*(float val) const; + Matrix3 operator+(const Matrix3& other) const; + Matrix3 operator-(const Matrix3& other) const; + Matrix3 operator/(float val) const; + Matrix3& operator*=(float val); + Matrix3& operator-=(const Matrix3& other); + Matrix3& operator+=(const Matrix3& other); + Matrix3& operator=(const Matrix3& other); + + bool operator==(const Matrix3& other); + bool operator!=(const Matrix3& other); + + bool operator==(float a); + bool operator!=(float a); + + float& operator()(int i, int j); + const float& operator()(int i, int j) const; + + friend Matrix3 operator*(float val, const Matrix3& other); + friend Matrix3 operator-(const Matrix3& other); + }; + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix44.cpp b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.cpp new file mode 100644 index 0000000000..5652c528b4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.cpp @@ -0,0 +1,244 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix44.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#include "Math/Matrix44.h" +#include "Math/Vector3D.h" +#include + +const Matrix4 Matrix4::IDENTITY = Matrix4(1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f); +const Matrix4 Matrix4::ZERO = Matrix4(0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f); + +Matrix4::Matrix4() +{ + int i = 0; + int j = 0; + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + m[i][j] = 0.0f; + } +} + +Matrix4::Matrix4(const Matrix4& other) +{ + int i = 0; + int j = 0; + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + m[i][j] = other.m[i][j]; + } +} + +Matrix4::Matrix4(float R1[4], float R2[4], float R3[4], float R4[4]) +{ + int i; + + for (i = 0; i < 4; i++) + { + m[0][i] = R1[i]; + } + + for (i = 0; i < 4; i++) + { + m[1][i] = R2[i]; + } + + for (i = 0; i < 4; i++) + { + m[2][i] = R3[i]; + } + + for (i = 0; i < 4; i++) + { + m[3][i] = R4[i]; + } +} + +Matrix4::Matrix4(float e00, + float e01, + float e02, + float e03, + float e10, + float e11, + float e12, + float e13, + float e20, + float e21, + float e22, + float e23, + float e30, + float e31, + float e32, + float e33) +{ + m[0][0] = e00; + m[0][1] = e01; + m[0][2] = e02; + m[0][3] = e03; + m[1][0] = e10; + m[1][1] = e11; + m[1][2] = e12; + m[1][3] = e13; + m[2][0] = e20; + m[2][1] = e21; + m[2][2] = e22; + m[2][3] = e23; + m[3][0] = e30; + m[3][1] = e31; + m[3][2] = e32; + m[3][3] = e33; +} + +Matrix4::~Matrix4() {} + +void Matrix4::SetIdentity() +{ + m[0][0] = 1.0f; + m[0][1] = 0.0f; + m[0][2] = 0.0f; + m[0][3] = 0.0f; + m[1][0] = 0.0f; + m[1][1] = 1.0f; + m[1][2] = 0.0f; + m[1][3] = 0.0f; + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = 1.0f; + m[2][3] = 0.0f; + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = 0.0f; + m[3][3] = 1.0f; +} + +void Matrix4::SetRotation(const Vector3& axis, float ang) +{ +#define vsin(x) ((1.0f) - cos(x)) + + float nx = axis.x; + float ny = axis.y; + float nz = axis.z; + + m[0][0] = nx * nx * vsin(ang) + cos(ang); + m[0][1] = nx * ny * vsin(ang) - nz * sin(ang); + m[0][2] = nx * nz * vsin(ang) + ny * sin(ang); + + m[1][0] = nx * ny * vsin(ang) + nz * sin(ang); + m[1][1] = ny * ny * vsin(ang) + cos(ang); + m[1][2] = ny * nz * vsin(ang) - nx * sin(ang); + + m[2][0] = nx * nz * vsin(ang) - ny * sin(ang); + m[2][1] = ny * nz * vsin(ang) + nx * sin(ang); + m[2][2] = nz * nz * vsin(ang) + cos(ang); + + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = 0.0f; + m[3][3] = 1.0f; + +#undef vsin +} + +void Matrix4::SetTranslate(float x, float y, float z) +{ + m[0][3] = x; + m[1][3] = y; + m[2][3] = z; +} + +float Matrix4::GetElement(int i, int j) const { return m[i][j]; } + +Vector3 Matrix4::operator*(const Vector3& vec) const +{ + Vector3 retVal; + + retVal.x = m[0][0] * vec.x + m[0][1] * vec.y + m[0][2] * vec.z + m[0][3]; + retVal.y = m[1][0] * vec.x + m[1][1] * vec.y + m[1][2] * vec.z + m[1][3]; + retVal.z = m[2][0] * vec.x + m[2][1] * vec.y + m[2][2] * vec.z + m[2][3]; + + return retVal; +} + +Matrix4 Matrix4::operator*(const Matrix4& other) const +{ + Matrix4 retMat; + + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + retMat.m[i][j] = m[i][0] * other.m[0][j] + m[i][1] * other.m[1][j] + + m[i][2] * other.m[2][j] + m[i][3] * other.m[3][j]; + } + + return retMat; +} + +Matrix4& Matrix4::operator=(const Matrix4& other) +{ + int i = 0; + int j = 0; + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + m[i][j] = other.m[i][j]; + } + + return *this; +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix44.h b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.h new file mode 100644 index 0000000000..fe8d0e2c8d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.h @@ -0,0 +1,79 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix44.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +namespace AMD +{ + class Vector3; + + class Matrix4 + { + public: + Matrix4(); + Matrix4(const Matrix4& other); + Matrix4(float r1[4], float r2[4], float r3[4], float r4[4]); + Matrix4(float e00, + float e01, + float e02, + float e03, + float e10, + float e11, + float e12, + float e13, + float e20, + float e21, + float e22, + float e23, + float e30, + float e31, + float e32, + float e33); + ~Matrix4(); + + float m[4][4]; + + public: + static const Matrix4 IDENTITY; + static const Matrix4 ZERO; + + public: + void SetIdentity(); + void SetRotation(const Vector3& axis, float ang); + void SetTranslate(float x, float y, float z); + + float GetElement(int i, int j) const; + + Vector3 operator*(const Vector3& vec) const; + Matrix4 operator*(const Matrix4& other) const; + Matrix4& operator=(const Matrix4& other); + + operator float* () const { return (float*)m; } + operator const float* () const { return (const float*)m; } + }; + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Quaternion.cpp b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.cpp new file mode 100644 index 0000000000..584c42a08a --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.cpp @@ -0,0 +1,291 @@ +//-------------------------------------------------------------------------------------- +// File: Quaternion.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#include +#include +#include +#include + +namespace AMD +{ + Quaternion::Quaternion(float x /* = 0.0*/, + float y /* = 0.0*/, + float z /* = 0.0*/, + float w /* = 1.0*/) + : x(x), y(y), z(z), w(w) + { + } + + Quaternion::~Quaternion(void) {} + + Quaternion::Quaternion(const Quaternion& other) + { + x = other.x; + y = other.y; + z = other.z; + w = other.w; + } + + Quaternion::Quaternion(const Matrix3& rotMat) { SetRotation(rotMat); } + + Quaternion::Quaternion(const Vector3& axis, float angle_radian) + { + SetRotation(axis, angle_radian); + } + + Quaternion::Quaternion(float* xyz) { memcpy(m, xyz, sizeof(Quaternion)); } + + Quaternion& Quaternion::Normalize() + { + float n = w * w + x * x + y * y + z * z; + + if (n == 0) + { + w = 1; + return (*this); + } + + n = 1.0f / sqrt(n); + + w *= n; + x *= n; + y *= n; + z *= n; + + return (*this); + } + + void Quaternion::SetRotation(const Vector3& axis, float angle_radian) + { + // This function assumes that the axis vector has been normalized. + float halfAng = 0.5f * angle_radian; + float sinHalf = sin(halfAng); + w = cos(halfAng); + + x = sinHalf * axis.x; + y = sinHalf * axis.y; + z = sinHalf * axis.z; + } + + void Quaternion::SetRotation(const Matrix3& rotMat) + { + float fTrace = rotMat.m[0][0] + rotMat.m[1][1] + rotMat.m[2][2]; + float fRoot; + + if (fTrace > 0.0f) + { + // |w| > 1/2, may as well choose w > 1/2 + fRoot = sqrt(fTrace + 1.0f); // 2w + w = 0.5f * fRoot; + fRoot = 0.5f / fRoot; // 1/(4w) + x = (rotMat.m[2][1] - rotMat.m[1][2]) * fRoot; + y = (rotMat.m[0][2] - rotMat.m[2][0]) * fRoot; + z = (rotMat.m[1][0] - rotMat.m[0][1]) * fRoot; + } + else + { + // |w| <= 1/2 + static size_t s_iNext[3] = { 1, 2, 0 }; + size_t i = 0; + if (rotMat.m[1][1] > rotMat.m[0][0]) + { + i = 1; + } + if (rotMat.m[2][2] > rotMat.m[i][i]) + { + i = 2; + } + size_t j = s_iNext[i]; + size_t k = s_iNext[j]; + + fRoot = sqrt(rotMat.m[i][i] - rotMat.m[j][j] - rotMat.m[k][k] + 1.0f); + float* apkQuat[3] = { &x, &y, &z }; + *apkQuat[i] = 0.5f * fRoot; + fRoot = 0.5f / fRoot; + w = (rotMat.m[k][j] - rotMat.m[j][k]) * fRoot; + *apkQuat[j] = (rotMat.m[j][i] + rotMat.m[i][j]) * fRoot; + *apkQuat[k] = (rotMat.m[k][i] + rotMat.m[i][k]) * fRoot; + } + } + + void Quaternion::SetRotation(const Quaternion& quaternion) { *this = quaternion; } + + void Quaternion::GetRotation(Vector3* pAxis, float* pAngle_radian) const + { + *pAngle_radian = 2.0f * acos(w); + + float scale = sqrt(x * x + y * y + z * z); + + if (scale > 0) + { + pAxis->x = x / scale; + pAxis->y = y / scale; + pAxis->z = z / scale; + } + else + { + pAxis->x = 0; + pAxis->y = 0; + pAxis->z = 0; + } + } + + void Quaternion::GetRotation(Matrix3* pMat33) const + { + float nQ = x * x + y * y + z * z + w * w; + float s = 0.0; + + if (nQ > 0.0) + { + s = 2.0f / nQ; + } + + float xs = x * s; + float ys = y * s; + float zs = z * s; + float wxs = w * xs; + float wys = w * ys; + float wzs = w * zs; + float xxs = x * xs; + float xys = x * ys; + float xzs = x * zs; + float yys = y * ys; + float yzs = y * zs; + float zzs = z * zs; + + pMat33->Set(1.0f - yys - zzs, + xys - wzs, + xzs + wys, + xys + wzs, + 1.0f - xxs - zzs, + yzs - wxs, + xzs - wys, + yzs + wxs, + 1.0f - xxs - yys); + } + + Matrix3 Quaternion::GetMatrix33() const + { + Matrix3 mat; + GetRotation(&mat); + return mat; + } + + float Quaternion::Length() const { return sqrt(x * x + y * y + z * z + w * w); } + + void Quaternion::SetIdentity() + { + x = y = z = 0.0; + w = 1.0; + } + + void Quaternion::Inverse() + { + float lengthSqr = x * x + y * y + z * z + w * w; + + assert(lengthSqr != 0.0); + + x = -x / lengthSqr; + y = -y / lengthSqr; + z = -z / lengthSqr; + w = w / lengthSqr; + } + + Quaternion Quaternion::InverseOther() const + { + Quaternion q(*this); + q.Inverse(); + return q; + } + + Quaternion& Quaternion::operator=(const Quaternion& other) + { + w = other.w; + x = other.x; + y = other.y; + z = other.z; + + return (*this); + } + + Quaternion& Quaternion::operator=(float* xyz) + { + memcpy(m, xyz, sizeof(Quaternion)); + return *this; + } + + Quaternion Quaternion::operator+(const Quaternion& other) const + { + Quaternion q; + + q.w = w + other.w; + q.x = x + other.x; + q.y = y + other.y; + q.z = z + other.z; + + return q; + } + + Quaternion Quaternion::operator+(const Vector3& vec) const + { + Quaternion q; + + q.w = w; + q.x = x + vec.x; + q.y = y + vec.y; + q.z = z + vec.z; + + return q; + } + + Quaternion Quaternion::operator*(const Quaternion& other) const + { + Quaternion q(*this); + + q.w = w * other.w - x * other.x - y * other.y - z * other.z; + q.x = w * other.x + x * other.w + y * other.z - z * other.y; + q.y = w * other.y + y * other.w + z * other.x - x * other.z; + q.z = w * other.z + z * other.w + x * other.y - y * other.x; + + return q; + } + + Vector3 Quaternion::operator*(const Vector3& vec) const + { + Vector3 uv, uuv; + Vector3 qvec(x, y, z); + uv = qvec.Cross(vec); + uuv = qvec.Cross(uv); + uv *= (2.0f * w); + uuv *= 2.0f; + + return vec + uv + uuv; + } + + Vector3 operator*(const Vector3& vec, const Quaternion& q) { return q * vec; } + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Quaternion.h b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.h new file mode 100644 index 0000000000..0d0b95e623 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.h @@ -0,0 +1,90 @@ +//-------------------------------------------------------------------------------------- +// File: Quaternion.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +#include +#include + +#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4201) // disable warning C4201: nonstandard extension used : nameless struct/union +#endif + +namespace AMD +{ + class Quaternion + { + public: + Quaternion(float x = 0.0, float y = 0.0, float z = 0.0, float w = 1.0); + Quaternion(const Quaternion& other); + Quaternion(const Matrix3& rotMat); + Quaternion(const Vector3& axis, float angle_radian); + Quaternion(float* xyz); + ~Quaternion(void); + + public: + union + { + struct + { + float m[4]; + }; // x, y, z, w + struct + { + float x, y, z, w; + }; + }; + + Quaternion& Normalize(); + + void SetRotation(const Vector3& axis, float angle_radian); + void SetRotation(const Matrix3& rotMat); + void SetRotation(const Quaternion& quaternion); + void GetRotation(Vector3* pAxis, float* pAngle_radian) const; + void GetRotation(Matrix3* pMat33) const; + Matrix3 GetMatrix33() const; + float Length() const; + + void SetIdentity(); + void Inverse(); + Quaternion InverseOther() const; + + Quaternion& operator=(const Quaternion& other); + Quaternion& operator=(float* xyz); + Quaternion operator+(const Quaternion& other) const; + Quaternion operator+(const Vector3& vec) const; + Quaternion operator*(const Quaternion& other) const; + Vector3 operator*(const Vector3& vec) const; + + friend Vector3 operator*(const Vector3& vec, const Quaternion& q); + }; + +} // namespace AMD + +#ifdef _MSC_VER + #pragma warning(pop) +#endif diff --git a/Gems/AtomTressFX/External/Code/src/Math/Transform.cpp b/Gems/AtomTressFX/External/Code/src/Math/Transform.cpp new file mode 100644 index 0000000000..0e1af066c2 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Transform.cpp @@ -0,0 +1,86 @@ +//-------------------------------------------------------------------------------------- +// File: Transform.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#include + +namespace AMD +{ + TransformSet::TransformSet(void) {} + + TransformSet::TransformSet(const TransformSet& other) + { + m_Translation = other.m_Translation; + m_Rotation = other.m_Rotation; + } + + TransformSet::TransformSet(const Vector3& translation, + const Quaternion& rotation) + { + m_Translation = translation; + m_Rotation = rotation; + } + + TransformSet::~TransformSet(void) {} + + void TransformSet::Inverse() + { + m_Rotation.Inverse(); + m_Translation = m_Rotation * (-m_Translation); + } + + TransformSet TransformSet::InverseOther() const + { + TransformSet other(*this); + other.Inverse(); + return other; + } + + Vector3 TransformSet::operator*(const Vector3& vector) const + { + return m_Rotation * vector + m_Translation; + } + + TransformSet TransformSet::operator*(const TransformSet& transform) const + { + return TransformSet(m_Rotation * transform.GetTranslation() + m_Translation, + m_Rotation * transform.GetRotation()); + } + + TransformSet& TransformSet::operator=(const TransformSet& other) + { + if (this == &other) + { + return (*this); + } + + m_Translation = other.m_Translation; + m_Rotation = other.m_Rotation; + + return (*this); + } + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Transform.h b/Gems/AtomTressFX/External/Code/src/Math/Transform.h new file mode 100644 index 0000000000..e33752b2ea --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Transform.h @@ -0,0 +1,59 @@ +//-------------------------------------------------------------------------------------- +// File: Transform.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +#include +#include + +namespace AMD +{ + class TransformSet + { + public: + TransformSet(void); + TransformSet(const TransformSet& other); + TransformSet(const Vector3& translation, const Quaternion& rotation); + ~TransformSet(void); + + private: + Vector3 m_Translation; + Quaternion m_Rotation; + + public: + const Vector3& GetTranslation() const { return m_Translation; } + const Quaternion& GetRotation() const { return m_Rotation; } + Vector3& GetTranslation() { return m_Translation; } + Quaternion& GetRotation() { return m_Rotation; } + void Inverse(); + TransformSet InverseOther() const; + + Vector3 operator*(const Vector3& vector) const; + TransformSet operator*(const TransformSet& transform) const; + TransformSet& operator=(const TransformSet& other); + }; +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Vector3D.cpp b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.cpp new file mode 100644 index 0000000000..e9795cff21 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.cpp @@ -0,0 +1,191 @@ +//-------------------------------------------------------------------------------------- +// File: Vector3D.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#include +#include +#include + +namespace AMD +{ + Vector3::Vector3(const Vector3& other) + { + x = other.x; + y = other.y; + z = other.z; + w = other.w; + } + + Vector3::Vector3(const Vector3& begin, const Vector3& end) + { + x = end.x - begin.x; + y = end.y - begin.y; + z = end.z - begin.z; + } + + Vector3::Vector3(float* xyz) { memcpy(m, xyz, sizeof(Vector3)); } + + Vector3& Vector3::Normalize() + { + float d = sqrt(x * x + y * y + z * z); + + if (d == 0) + { + return *this; + } + + x = x / d; + y = y / d; + z = z / d; + + return *this; + } + + Vector3 Vector3::NormalizeOther() const + { + Vector3 n(*this); + return n.Normalize(); + } + + Vector3 Vector3::operator-(const Vector3& other) const + { + return Vector3(x - other.x, y - other.y, z - other.z); + } + + Vector3 Vector3::operator+(const Vector3& other) const + { + return Vector3(x + other.x, y + other.y, z + other.z); + } + + Vector3 Vector3::operator/(float val) const + { + if (val != 0.0f) + { + return Vector3(x / val, y / val, z / val); + } + else + { + return Vector3(0.0f, 0.0f, 0.0f); + } + } + + Vector3& Vector3::operator=(const Vector3& other) + { + x = other.x; + y = other.y; + z = other.z; + w = other.w; + + return *this; + } + + Vector3& Vector3::operator=(float val) + { + x = val; + y = val; + z = val; + + return *this; + } + + Vector3& Vector3::operator=(float* xyz) + { + memcpy(m, xyz, sizeof(Vector3)); + return *this; + } + + bool Vector3::operator<(float val) const { return (LengthSqr() < val * val); } + + bool Vector3::operator>(float val) const { return (LengthSqr() > val * val); } + + bool Vector3::operator!=(float val) const { return (x != val || y != val || z != val); } + + bool Vector3::operator==(float val) const { return (x == val && y == val && z == val); } + + bool Vector3::operator==(const Vector3& other) const + { + return (x == other.x && y == other.y && z == other.z); + } + + bool Vector3::operator!=(const Vector3& other) const + { + return (x != other.x || y != other.y || z != other.z); + } + + Vector3& Vector3::operator-=(const Vector3& other) + { + x -= other.x; + y -= other.y; + z -= other.z; + + return *this; + } + + Vector3& Vector3::operator+=(const Vector3& other) + { + x += other.x; + y += other.y; + z += other.z; + + return *this; + } + + Vector3& Vector3::operator*=(float val) + { + x *= val; + y *= val; + z *= val; + + return *this; + } + + Vector3 Vector3::operator*(float val) const + { + Vector3 vec(*this); + + vec.x *= val; + vec.y *= val; + vec.z *= val; + + return vec; + } + + float Vector3::operator*(const Vector3& other) const { return Dot(other); } + + + Vector3 operator*(float val, const Vector3& other) { return other * val; } + + Vector3 operator-(const Vector3& other) + { + Vector3 vec(other); + + vec.x = -vec.x; + vec.y = -vec.y; + vec.z = -vec.z; + + return vec; + } + +} // namespace AMD diff --git a/Gems/AtomTressFX/External/Code/src/Math/Vector3D.h b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.h new file mode 100644 index 0000000000..e43699c14b --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.h @@ -0,0 +1,116 @@ +//-------------------------------------------------------------------------------------- +// File: Vector3D.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4201) // disable warning C4201: nonstandard extension used : nameless struct/union +#endif + +#include + +namespace AMD +{ + class Vector3 + { + public: + union + { + struct + { + float m[4]; + }; // x, y, z, w + struct + { + float x, y, z, w; + }; + }; + + Vector3() + { + x = y = z = 0; + w = 1.f; + } + + Vector3(float x, float y, float z) + { + m[0] = x; + m[1] = y; + m[2] = z; + }; + Vector3(float* xyz); + Vector3(const Vector3& other); + Vector3(const Vector3& begin, const Vector3& end); + ~Vector3() {}; + + public: + Vector3& Normalize(); + Vector3 NormalizeOther() const; + Vector3 Cross(const Vector3& v) const + { + return Vector3(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); + }; + float Dot(const Vector3& v) const { return x * v.x + y * v.y + z * v.z; }; + float Length() const { return sqrt(x * x + y * y + z * z); }; + float LengthSqr() const { return (x * x + y * y + z * z); }; + void Set(float xIn, float yIn, float zIn) + { + m[0] = xIn; + m[1] = yIn; + m[2] = zIn; + }; + + const float& operator[](unsigned int i) const { return m[i]; } + float& operator[](unsigned int i) { return m[i]; } + + Vector3& operator=(const Vector3& other); + Vector3& operator=(float val); + Vector3& operator=(float* xyz); + bool operator!=(float val) const; + bool operator<(float val) const; + bool operator>(float val) const; + bool operator==(float val) const; + bool operator==(const Vector3& other) const; + bool operator!=(const Vector3& other) const; + Vector3& operator-=(const Vector3& other); + Vector3& operator+=(const Vector3& other); + Vector3& operator*=(float val); + Vector3 operator-(const Vector3& other) const; + Vector3 operator+(const Vector3& other) const; + Vector3 operator/(float val) const; + Vector3 operator*(float val) const; + float operator*(const Vector3& other) const; + + friend Vector3 operator*(float val, const Vector3& other); + friend Vector3 operator-(const Vector3& other); + }; +} // namespace AMD + +#ifdef _MSC_VER + #pragma warning(pop) +#endif + diff --git a/Gems/AtomTressFX/External/Code/src/SDF.cpp b/Gems/AtomTressFX/External/Code/src/SDF.cpp new file mode 100644 index 0000000000..e225461fb4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SDF.cpp @@ -0,0 +1,96 @@ + +///--------------------------------------------------------------------------------------- +// Example code for managing objects for signed-distance fields (SDFs) +// +// This includes the TressFXSDFCollision objects. Associated with each is a system +// for skinning the model on the GPU (since that is input to TressFXSDFCollision) and +// visualizing the SDFs using marching cubes. The GPU skinning and marching cubes +// systems could be packaged as library code as well, but are not there yet. +// +// The skinned meshes are loaded through this interface as well. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "SDF.h" + +#include "TressFXBoneSkinning.h" +#include "TressFXSDFMarchingCubes.h" +#include "TressFXSDFCollision.h" +#include "EngineInterface.h" + +CollisionMesh::CollisionMesh( + EI_Scene * gltfImplementation, + EI_RenderTargetSet * renderPass, + const char * name, + const char * tfxmeshFilePath, + int numCellsInXAxis, + float SDFCollMargin, + int skinNumber, + const char * followBone) +{ + m_pBoneSkinning.reset(new TressFXBoneSkinning); + m_pSDFMachingCubes.reset(new TressFXSDFMarchingCubes); + + EI_Device* pDevice = GetDevice(); + EI_CommandContext& uploadCommandContext = GetDevice()->GetCurrentCommandContext(); + + m_pBoneSkinning->LoadTressFXCollisionMeshData(gltfImplementation, tfxmeshFilePath, skinNumber, followBone); + m_pBoneSkinning->Initialize(renderPass, pDevice, uploadCommandContext, name); + + m_pCollisionMesh.reset(new TressFXSDFCollision(pDevice, m_pBoneSkinning.get(), name, numCellsInXAxis, SDFCollMargin)); +#if ENABLE_MARCHING_CUBES + m_pSDFMachingCubes->SetSDF(m_pCollisionMesh.get()); + m_pSDFMachingCubes->SetSDFIsoLevel(m_pCollisionMesh->GetSDFCollisionMargin()); + m_pSDFMachingCubes->Initialize(name, gltfImplementation, renderPass); +#endif +} + +void CollisionMesh::SkinTheMesh(EI_CommandContext& context, double fTime) +{ + m_pBoneSkinning->Update(context, fTime); +} + +void CollisionMesh::AccumulateSDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem) +{ + m_pCollisionMesh->Update(context, sdfCollisionSystem); +} + +void CollisionMesh::ApplySDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem, TressFXHairObject* strands) +{ + m_pCollisionMesh->CollideWithHair(context, sdfCollisionSystem, *strands); +} + +void CollisionMesh::GenerateIsoSurface(EI_CommandContext& context) +{ + m_pSDFMachingCubes->Update(context); +} +void CollisionMesh::DrawIsoSurface(EI_CommandContext& context) +{ + (void)context; + m_pSDFMachingCubes->Draw(); +} + +void CollisionMesh::DrawMesh(EI_CommandContext& context) +{ + m_pBoneSkinning->DrawMesh(context); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/SDF.h b/Gems/AtomTressFX/External/Code/src/SDF.h new file mode 100644 index 0000000000..4adc343b49 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SDF.h @@ -0,0 +1,70 @@ +//--------------------------------------------------------------------------------------- +// Example code for managing objects for signed-distance fields (SDFs) +// +// This includes the TressFXSDFCollision objects. Associated with each is a system +// for skinning the model on the GPU (since that is input to TressFXSDFCollision) and +// visualizing the SDFs using marching cubes. The GPU skinning and marching cubes +// systems could be packaged as library code as well, but are not there yet. +// +// The skinned meshes are loaded through this interface as well. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#define ENABLE_MARCHING_CUBES 1 + +#include "AMD_TressFX.h" +#include "TressFXSDFMarchingCubes.h" +#include "TressFXBoneSkinning.h" + +class TressFXSDFCollisionSystem; +class TressFXSDFCollision; +class EI_Scene; +class TressFXHairObject; + +class CollisionMesh +{ +public: + CollisionMesh( + EI_Scene* gltfImplementation, + EI_RenderTargetSet* renderPass, + const char* name, + const char* tfxmeshFilePath, + int numCellsInXAxis, + float SDFCollMargin, + int skinNumber, + const char* followBone); + + void SkinTheMesh(EI_CommandContext& context, double fTime); + void AccumulateSDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem); + void ApplySDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem, TressFXHairObject* strands); + void GenerateIsoSurface(EI_CommandContext& context); + void DrawIsoSurface(EI_CommandContext& context); + void DrawMesh(EI_CommandContext& context); +private: + std::unique_ptr m_pCollisionMesh; + // Adi: this structure is required to for computing the per-frame SDF + std::unique_ptr m_pBoneSkinning; + std::unique_ptr m_pSDFMachingCubes; +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.cpp b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.cpp new file mode 100644 index 0000000000..6bcfcb08f8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.cpp @@ -0,0 +1,228 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "EngineInterface.h" +#include "GLTF/GltfCommon.h" +#include "GLTF/GltfHelpers.h" +#include + +void EI_Scene::OnCreate(EI_Device* pDevice, EI_RenderTargetSet * renderTargetSet, EI_RenderTargetSet* shadowRenderTargetSet, const std::string& path, const std::string& fileName, const std::string& bonePrefix, float startOffset) +{ + if (m_pGLTFCommon == nullptr) + { + m_pGLTFCommon = new GLTFCommon(); + m_pGLTFCommon->Load(path, fileName); + } + + m_pDevice = pDevice; + + m_startOffset = startOffset; + + m_pGLTFTexturesAndBuffers = m_pDevice->CreateGLTFTexturesAndBuffers(m_pGLTFCommon); + // here we are loading onto the GPU all the textures and the inverse matrices + // this data will be used to create the PBR and Depth passes + m_pGLTFTexturesAndBuffers->LoadTextures(); + + // same thing as above but for the PBR pass + m_gltfPBR = m_pDevice->CreateGLTFPbrPass(m_pGLTFTexturesAndBuffers.get(), renderTargetSet); + + m_pDevice->GetVidMemBufferPool()->UploadData(m_pDevice->GetUploadHeap()->GetCommandList()); + m_pDevice->GetUploadHeap()->FlushAndFinish(); + + // Create a depth GLTF pass to render shadows + m_gltfDepth = m_pDevice->CreateGLTFDepthPass(m_pGLTFTexturesAndBuffers.get(), shadowRenderTargetSet); + + m_pDevice->GetVidMemBufferPool()->UploadData(m_pDevice->GetUploadHeap()->GetCommandList()); + m_pDevice->GetUploadHeap()->FlushAndFinish(); + + // Init Camera, looking at the origin + m_roll = 0.0f; + m_pitch = 0.0f; + m_distance = 2.0f; + m_animationTime = 0.0f; + + // init GUI state + m_state.iblFactor = 2.0f; + m_state.emmisiveFactor = 1.0f; + + m_bonePrefix = bonePrefix; + m_state.camera.SetSpeed(0.5f); + ComputeGlobalIdxToSkinIdx(); +} + +void EI_Scene::OnDestroy() +{ + if (m_pGLTFTexturesAndBuffers) + m_pGLTFTexturesAndBuffers->OnDestroy(); + + if (m_pGLTFCommon) + { + delete m_pGLTFCommon; + m_pGLTFCommon = nullptr; + } + + if (m_gltfDepth) + m_gltfDepth->OnDestroy(); + + if (m_gltfPBR) + m_gltfPBR->OnDestroy(); +} + +void EI_Scene::OnBeginFrame(float deltaTime, float aspect) +{ + // update gltf data + m_animationTime += deltaTime; + m_animationTime = fmod(m_animationTime, m_pGLTFCommon->m_animations[0].m_duration - m_startOffset); + m_pGLTFCommon->SetAnimationTime(0, m_startOffset + m_animationTime); + m_pGLTFCommon->TransformScene(0, XMMatrixIdentity()); + + //m_ConstantBufferRing.OnBeginFrame(); + + const char * cameraControl[] = { "Animated", "WASD", "Orbit" }; + static int cameraControlSelected = 0; + ImGui::Combo("Camera", &cameraControlSelected, cameraControl, _countof(cameraControl)); + + ImGuiIO& io = ImGui::GetIO(); + // If the mouse was not used by the GUI then it's for the camera + // + if (io.WantCaptureMouse == false) + { + if ((io.KeyCtrl == false) && (io.MouseDown[0] == true)) + { + m_roll -= io.MouseDelta.x / 100.f; + m_pitch += io.MouseDelta.y / 100.f; + } + + // Choose camera movement depending on setting + // + if (cameraControlSelected == 0) + { + if (m_pGLTFCommon->m_cameras.size()) + { + XMMATRIX* pMats = m_pGLTFCommon->m_pCurrentFrameTransformedData->m_worldSpaceMats.data(); + XMMATRIX cameraMat = pMats[m_pGLTFCommon->m_cameras[0].m_nodeIndex]; + m_state.camera.SetMatrix(cameraMat); + m_state.camera.LookAt(m_state.camera.GetPosition(), m_state.camera.GetPosition() - DirectX::XMVector3Normalize(m_state.camera.GetDirection()) * m_distance); + m_pitch = m_state.camera.GetPitch(); + m_roll = m_state.camera.GetYaw(); + m_distance = m_state.camera.GetDistance(); + } + } + if (cameraControlSelected == 1) + { + // WASD + m_state.camera.UpdateCameraWASD(m_roll, m_pitch, io.KeysDown, io.DeltaTime); + } + else if (cameraControlSelected == 2) + { + // Orbiting + m_distance -= (float)io.MouseWheel * 0.5f; + m_distance = std::max(m_distance, 0.1f); + + bool panning = (io.KeyCtrl == true) && (io.MouseDown[0] == true); + + m_state.camera.LookAt(m_state.camera.GetPosition(), DirectX::XMVectorSet(-0.1f, 0.5f, 0.4f, 0.0f)); + m_state.camera.UpdateCameraPolar(m_roll, m_pitch, panning ? -io.MouseDelta.x / 100.0f : 0.0f, panning ? io.MouseDelta.y / 100.0f : 0.0f, m_distance); + } + } + + // transform geometry and skinning matrices + upload them as buffers -------------- + per_frame *pPerFrame = NULL; + if (m_pGLTFTexturesAndBuffers) + { + pPerFrame = m_pGLTFTexturesAndBuffers->m_pGLTFCommon->SetPerFrameData(0, 1280.0f / 720.0f); + pPerFrame->mCameraViewProj = m_state.camera.GetView() * m_state.camera.GetProjection(); + pPerFrame->cameraPos = m_state.camera.GetPosition(); + pPerFrame->iblFactor = m_state.iblFactor; + pPerFrame->emmisiveFactor = m_state.emmisiveFactor; + + // Store the light information for the frame (as it will be needed later) + if (pPerFrame->lightCount != m_SceneLightInfo.size()) + m_SceneLightInfo.resize(pPerFrame->lightCount); + + // For now, divide up the shadow map into 4 2k x 2k quadrants. This will change once we decide what shadow scheme we want to support + // Also, until we can get light exports working well, just support spots as shadow casters for now + uint32_t shadowMapIndex = 0; + for (uint32_t i = 0; i < pPerFrame->lightCount; i++) + { + assert(shadowMapIndex < 4 && "Too many shadows are enabled, ignoring all shadows after 4th shadow casting light."); + if ((shadowMapIndex < 4) && (pPerFrame->lights[i].type == LightType_Spot || pPerFrame->lights[i].type == LightType_Directional)) + pPerFrame->lights[i].shadowMapIndex = shadowMapIndex++; //set the shadow map index so the color pass knows which shadow map to use + else + pPerFrame->lights[i].shadowMapIndex = -1; + + // Store this information + m_SceneLightInfo[i] = pPerFrame->lights[i]; + } + + m_pGLTFTexturesAndBuffers->SetPerFrameConstants(); + m_pGLTFTexturesAndBuffers->SetSkinningMatricesForSkeletons(); + } +} + +void EI_Scene::OnRender() +{ +#if TRESSFX_VK + m_gltfPBR->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer); +#else + m_gltfPBR->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer.Get(), GetDevice()->GetShadowBufferResource()->SRView); +#endif // TRESSFX_VK +} + +void EI_Scene::OnRenderLight(uint32_t LightIndex) +{ + // Set per frame constant buffer values +#if TRESSFX_VK + CAULDRON_VK::GltfDepthPass::per_frame* cbPerFrame = m_gltfDepth->SetPerFrameConstants(); + cbPerFrame->mViewProj = m_SceneLightInfo[LightIndex].mLightViewProj; + m_gltfDepth->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer); +#else + CAULDRON_DX12::GltfDepthPass::per_frame* cbPerFrame = m_gltfDepth->SetPerFrameConstants(); + cbPerFrame->mViewProj = m_SceneLightInfo[LightIndex].mLightViewProj; + m_gltfDepth->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer.Get()); +#endif // TRESSFX_VK +} + +void EI_Scene::OnResize(uint32_t width, uint32_t height) +{ + m_state.camera.SetFov(XM_PI / 4, width, height, 0.1f, 1000.0f); +} + +void EI_Scene::ComputeGlobalIdxToSkinIdx() +{ + m_globalIdxToSkinIdx.resize(m_pGLTFCommon->m_skins.size()); + for (int skin = 0; skin < m_pGLTFCommon->m_skins.size(); ++skin) + { + m_globalIdxToSkinIdx[skin].resize(m_pGLTFCommon->m_nodes.size()); + for (int i = 0; i < m_pGLTFCommon->m_skins[skin].m_jointsNodeIdx.size(); ++i) + { + m_globalIdxToSkinIdx[skin][m_pGLTFCommon->m_skins[skin].m_jointsNodeIdx[i]] = i; + } + } +} + +int EI_Scene::GetBoneIdByName(int skinNumber, const char * name) +{ + std::string completeString = m_bonePrefix + name; + for (int i = 0; i < m_pGLTFCommon->m_nodes.size(); ++i) + { + if (completeString == m_pGLTFCommon->m_nodes[i].m_name) { + return m_globalIdxToSkinIdx[skinNumber][i]; + } + } + return -1; +} diff --git a/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.h b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.h new file mode 100644 index 0000000000..b4c84b1f6d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.h @@ -0,0 +1,106 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include +#include +using namespace DirectX; +class GLTFCommon; + +// C RunTime Header Files +#include +#include +#include +#include +#include +#include +#include +#include "GLTF/GLTFTexturesAndBuffers.h" +#include "Base/DynamicBufferRing.h" +#include "Base/StaticBufferPool.h" +#include "Base/ShaderCompiler.h" +#include "GLTF/GltfPbrPass.h" +#include "GLTF/GltfDepthPass.h" + +#include "TressFXCommon.h" + +struct EI_RenderTargetSet; + +class EI_Scene +{ +public: + + struct State + { + float time; + Camera camera; + + float iblFactor; + float emmisiveFactor; + }; + + EI_Scene() : m_pGLTFTexturesAndBuffers(nullptr), m_pGLTFCommon(nullptr) {} + ~EI_Scene() { OnDestroy(); } + void OnCreate(EI_Device* device, EI_RenderTargetSet* renderTargetSet, EI_RenderTargetSet* shadowRenderTargetSet, const std::string& path, const std::string& fileName, const std::string& bonePrefix, float startOffset); + void OnDestroy(); + void OnBeginFrame(float deltaTime, float aspect); + void OnRender(); + void OnRenderLight(uint32_t LightIndex); + void OnResize(uint32_t width, uint32_t height); + + uint32_t GetSceneLightCount() const { return static_cast(m_SceneLightInfo.size()); } + const Light& GetSceneLightInfo(uint32_t Index) const { return m_SceneLightInfo[Index]; } + + AMD::float4x4 GetMV() const { return *(AMD::float4x4*)&m_state.camera.GetView(); } + AMD::float4x4 GetMVP() const { return *(AMD::float4x4*)&(m_state.camera.GetView() * m_state.camera.GetProjection()); } + AMD::float4x4 GetInvViewProjMatrix() const { return *(AMD::float4x4*) & (XMMatrixInverse(nullptr, m_state.camera.GetView() * m_state.camera.GetProjection())); } + AMD::float4 GetCameraPos() const { return *(AMD::float4*)&m_state.camera.GetPosition(); } + std::vector GetWorldSpaceSkeletonMats(int skinNumber) const { return m_pGLTFCommon->m_pCurrentFrameTransformedData->m_worldSpaceSkeletonMats[skinNumber]; } + + int GetBoneIdByName(int skinNumber, const char * name); + +private: + void ComputeGlobalIdxToSkinIdx(); + EI_Device* m_pDevice; + std::unique_ptr m_pGLTFTexturesAndBuffers; + + GLTFCommon* m_pGLTFCommon; + + std::unique_ptr m_gltfPBR; + std::unique_ptr m_gltfDepth; + + State m_state; + + std::string m_bonePrefix; + float m_startOffset = 0; + + // cache inverse index mapping because cauldron doesnt do that + std::vector> m_globalIdxToSkinIdx; + + std::vector m_SceneLightInfo; + + float m_animationTime; + float m_roll; + float m_pitch; + float m_distance; +}; diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/FullScreenRender.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/FullScreenRender.hlsl new file mode 100644 index 0000000000..b7eb3ae119 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/FullScreenRender.hlsl @@ -0,0 +1,61 @@ +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +////////////////////////////////////////////////////////////// +// Fullscreen Quad VS +struct VS_OUTPUT_SCREENQUAD +{ + float4 vPosition : SV_POSITION; + float2 vTex : TEXCOORD; +}; + +static const float2 Positions[] = { {-1, -1,}, {1, -1}, {-1, 1}, {1, 1} }; + +VS_OUTPUT_SCREENQUAD FullScreenVS(uint vertexID : SV_VertexID) +{ + VS_OUTPUT_SCREENQUAD output; + + // Output vert positions + output.vPosition = float4(Positions[vertexID].xy, 0, 1); + + // And tex-coords +#ifdef AMD_TRESSFX_DX12 + output.vTex = float2(Positions[vertexID].x, Positions[vertexID].y) * 0.5 + 0.5; +#else + output.vTex = float2(Positions[vertexID].x, -Positions[vertexID].y) * 0.5 + 0.5; +#endif // AMD_TRESSFX_DX12 + + return output; +} + +////////////////////////////////////////////////////////////// +// FullScreen PS +[[vk::binding(0, 0)]] Texture2D ColorTexture : register(t0, space0); + +// Second pass of ShortCut. +// Full-screen pass that writes the farthest of the near depths for depth culling. +float4 FullScreenPS(VS_OUTPUT_SCREENQUAD input) : SV_Target0 +{ + // Output the color + return float4( ColorTexture[input.vPosition.xy].xyz, 1.f ); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinning.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinning.hlsl new file mode 100644 index 0000000000..99243ceafa --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinning.hlsl @@ -0,0 +1,140 @@ +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +// Adi: this shader file is only required for applying physics and and debug render. +// If physics is not applied (during first iterations) it is not used and can be skipped. + +[[vk::binding(3, 0)]] cbuffer ConstBufferCS_BoneMatrix : register(b3, space0) +{ + float4 cColor; + float4 vLightDir; + int4 g_NumMeshVertices; + float4x4 mMW; + float4x4 mMVP; + row_major float4x4 g_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +} + +struct BoneSkinningData +{ + float4 boneIndex; // x, y, z and w component are four bone indices per strand + float4 boneWeight; // x, y, z and w component are four bone weights per strand +}; + +struct StandardVertex +{ + float4 position; + float4 normal; +}; + +// UAVs +[[vk::binding(0, 0)]] RWStructuredBuffer bs_collMeshVertexPositions : register(u0, space0); + +// SRVs +[[vk::binding(1, 0)]] StructuredBuffer bs_boneSkinningData : register(t1, space0); +[[vk::binding(2, 0)]] StructuredBuffer bs_initialVertexPositions : register(t2, space0); + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void BoneSkinning(uint GIndex : SV_GroupIndex, uint3 GId : SV_GroupID, uint3 DTid : SV_DispatchThreadID) +{ + uint local_id = GIndex; + uint group_id = GId.x; + uint global_id = local_id + group_id * THREAD_GROUP_SIZE; + + if (global_id >= g_NumMeshVertices.x) + return; + + float3 pos = bs_initialVertexPositions[global_id].position.xyz; + float3 n = bs_initialVertexPositions[global_id].normal.xyz; + + // compute a bone skinning transform + BoneSkinningData skinning = bs_boneSkinningData[global_id]; + + // Interpolate world space bone matrices using weights. + row_major float4x4 bone_matrix = g_BoneSkinningMatrix[skinning.boneIndex[0]] * skinning.boneWeight[0]; + float weight_sum = skinning.boneWeight[0]; + + // Each vertex gets influence from four bones. In case there are less than four bones, boneIndex and boneWeight would be zero. + // This number four was set in Maya exporter and also used in loader. So it should not be changed unless you have a very strong reason and are willing to go through all spots. + for (int i = 1; i < 4; i++) + { + if (skinning.boneWeight[i] > 0) + { + bone_matrix += g_BoneSkinningMatrix[skinning.boneIndex[i]] * skinning.boneWeight[i]; + weight_sum += skinning.boneWeight[i]; + } + } + + bone_matrix /= weight_sum; + + pos.xyz = mul(float4(pos.xyz, 1), bone_matrix).xyz; + n.xyz = mul(float4(n.xyz, 0), bone_matrix).xyz; + bs_collMeshVertexPositions[global_id].position.xyz = pos; + bs_collMeshVertexPositions[global_id].normal.xyz = n; +} + +// visualization + +struct VsOutput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +VsOutput BoneSkinningVisualizationVS( uint vertexId : SV_VertexID ) +{ + VsOutput output; + + output.vNormal_ = mul(bs_collMeshVertexPositions[vertexId].normal.xyz, (float3x3)mMW); + float4 inputVertexPos = float4(bs_collMeshVertexPositions[vertexId].position.xyz, 1.0); + + output.vPositionSS = mul(mMVP, float4(inputVertexPos.xyz, 1.0f)); + output.vPos_ = inputVertexPos.xyz; + return output; +} + +struct PSOutput +{ + float4 vColor : SV_TARGET; +}; + +PSOutput BoneSkinningVisualizationPS(VsOutput input) : SV_Target +{ + PSOutput output = (PSOutput)0; + float4 vDiffuse = float4(cColor.xyz, 1.0); + float fAmbient = 0.2; + float3 vLightDir1 = float3(-1., 0., -1.); + + //float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)); + float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)) + 0.7*saturate(dot(normalize(vLightDir1), input.vNormal_)); + fLighting = max(fLighting, fAmbient); + + output.vColor = vDiffuse * fLighting; + return output; +} + +//EndHLSL \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinningVisualization.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinningVisualization.hlsl new file mode 100644 index 0000000000..479d99c661 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinningVisualization.hlsl @@ -0,0 +1,88 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to visualizing skining +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +[[vk::binding(0, 0)]] cbuffer boneSkinningVisualizationConstants { + float4x4 mMW; + float4x4 mWVP; + float3 cColor; + float3 vLightDir; + float3 g_vEye; +}; + +struct VertexData +{ + float3 position; + float3 normal; +}; + +[[vk::binding(1, 0)]] StructuredBuffer vertices; + +struct VsOutput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +VsOutput BoneSkinningVisualizationVS( uint vertexId : SV_VertexID ) +{ + VsOutput output; + + output.vNormal_ = mul(vertices[vertexId].normal.xyz, (float3x3)mMW); + float4 inputVertexPos = float4(vertices[vertexId].position.xyz, 1.0); + + float4 vPos = mul(mMW, float4(inputVertexPos.xyz, 1.0f)); + output.vPos_ = inputVertexPos.xyz; + output.vPositionSS = mul(mWVP, vPos); + return output; +} + + +struct PSInput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +struct PSOutput +{ + float4 vColor : SV_TARGET; +}; + +PSOutput BoneSkinningVisualizationPS(PSInput input) +{ + PSOutput output = (PSOutput)0; + float4 vDiffuse = float4(cColor.xyz, 1.0); + float fAmbient = 0.2; + float3 vLightDir1 = float3(-1., 0., -1.); + + //float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)); + float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)) + 0.7*saturate(dot(normalize(vLightDir1), input.vNormal_)); + fLighting = max(fLighting, fAmbient); + + output.vColor = vDiffuse * fLighting; + return output; +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXLighting.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXLighting.hlsl new file mode 100644 index 0000000000..cdedd595c7 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXLighting.hlsl @@ -0,0 +1,303 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + + +// If you change this, you MUST also change TressFXLightParams in TressFXConstantBuffers.h +#define AMD_TRESSFX_MAX_LIGHTS 10 + +// These come from GltfCommon (just re-using them) +#define LightType_Directional 0 +#define LightType_Point 1 +#define LightType_Spot 2 + +struct LightParams +{ + // nLightShape (ignored) for volumes and stuff ... + // nLightIndex (not used in Sushi) + float LightIntensity; // fLightIntensity in Sushi + float LightOuterConeCos; // vLightConeAngles.x in Sushi + float LightInnerConeCos; // vLightConeAngles.y in Sushi + float LightRange; // vLightConeAngles.z in Sushi + + float4 LightPositionWS; // vLightPosWS in Sushi + float4 LightDirWS; // vLightDirWS in Sushi + float4 LightColor; // vLightColor in Sushi + + float4x4 ShadowProjection; + + float4 ShadowParams; // Bias, near, far, range + + // vScaleWS (not used) + int LightType; // vLightParams.x in Sushi + // vLightParams.y is falloff exponent and always 1.f in Sushi + // vLightParams.zw are Diffuse and Spec mask in Sushi and are always 1.f + // vLightOrientation (not used) + int ShadowMapIndex; + + int ShadowMapSize; // Dimension of the shadow slice we are sampling from + int Padding2; +}; + +[[vk::binding(0, 3)]] cbuffer LightConstants : register(b0, space3) +{ + int NumLights; + int UseDepthApproximation; + int Padding4; + int Padding5; + LightParams LightData[AMD_TRESSFX_MAX_LIGHTS]; +}; + +[[vk::binding(1, 3)]] Texture2D ShadowTexture : register(t1, space3); + +// https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual/README.md#inner-and-outer-cone-angles +float SpotAttenuation(float3 pointToLight, float3 spotDirection, float outerConeCos, float innerConeCos) +{ + float actualCos = dot(normalize(spotDirection), normalize(-pointToLight)); + if (actualCos > outerConeCos) + { + if (actualCos < innerConeCos) + { + return smoothstep(outerConeCos, innerConeCos, actualCos); + } + return 1.0; + } + return 0.0; +} + +// https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual/README.md#range-property +float RangeAttenuation(float range, float distance) +{ + if (range < 0.0) + { + // negative range means unlimited + return 1.0; + } + return max(lerp(1, 0, distance / range), 0);//max(min(1.0 - pow(distance / range, 4.0), 1.0), 0.0) / pow(distance, 2.0); +} + +// ============================================================================================================================= +// Reduces light to a direction and intensity (taking attenuation and light strength into account) +void GetLightParams(float3 WorldPosition, uint lightIndex, inout float3 LightVector, inout float LightIntensity, HairShadeParams params) +{ + LightIntensity = LightData[lightIndex].LightIntensity; + + // Spot and Directionals use the light direction directly + LightVector = LightData[lightIndex].LightDirWS; + if (LightData[lightIndex].LightType == LightType_Directional) + return; + + // Normalized light vector and squared distance for radial source calculations + float3 vLightVecWS = LightData[lightIndex].LightPositionWS - WorldPosition; + float distToLight = length(vLightVecWS); + + // Set the LightVector to actual direction to light + LightVector = normalize(vLightVecWS); + + // Calculate radial falloff + LightIntensity *= RangeAttenuation(LightData[lightIndex].LightRange, distToLight); + + // Modulate with spot falloff if needed + if (LightData[lightIndex].LightType == LightType_Spot) + { + // Need to inverse the direction going in (as it's direction to light) as Unreal with negate it again under the hood. + LightIntensity *= SpotAttenuation(LightVector, -LightData[lightIndex].LightDirWS, LightData[lightIndex].LightOuterConeCos, LightData[lightIndex].LightInnerConeCos); + } +} + +// Returns a float3 which is the scale for diffuse, spec term, and colored spec term. +// +// The diffuse term is from Kajiya. +// +// The spec term is what Marschner calls "R", reflecting directly off the surface of the hair, +// taking the color of the light like a dielectric specular term. This highlight is shifted +// towards the root of the hair. +// +// The colored spec term is caused by light passing through the hair, bouncing off the back, and +// coming back out. It therefore picks up the color of the light. +// Marschner refers to this term as the "TRT" term. This highlight is shifted towards the +// tip of the hair. +// +// vEyeDir, vLightDir and vTangentDir are all pointing out. +// coneAngleRadians explained below. +// +// +// hair has a tiled-conical shape along its lenght. Sort of like the following. +// +// \ / +// \ / +// \ / +// \ / +// +// The angle of the cone is the last argument, in radians. +// It's typically in the range of 5 to 10 degrees +float3 ComputeDiffuseSpecFactors(float3 vEyeDir, float3 vLightDir, float3 vTangentDir, HairShadeParams params, float coneAngleRadians = 10 * AMD_PI / 180) +{ + // in Kajiya's model: diffuse component: sin(t, l) + float cosTL = (dot(vTangentDir, vLightDir)); + float sinTL = sqrt(1 - cosTL * cosTL); + float diffuse = sinTL; // here sinTL is apparently larger than 0 + + float cosTRL = -cosTL; + float sinTRL = sinTL; + float cosTE = (dot(vTangentDir, vEyeDir)); + float sinTE = sqrt(1 - cosTE * cosTE); + + // primary highlight: reflected direction shift towards root (2 * coneAngleRadians) + float cosTRL_root = cosTRL * cos(2 * coneAngleRadians) - sinTRL * sin(2 * coneAngleRadians); + float sinTRL_root = sqrt(1 - cosTRL_root * cosTRL_root); + float specular_root = max(0, cosTRL_root * cosTE + sinTRL_root * sinTE); + + // secondary highlight: reflected direction shifted toward tip (3*coneAngleRadians) + float cosTRL_tip = cosTRL * cos(-3 * coneAngleRadians) - sinTRL * sin(-3 * coneAngleRadians); + float sinTRL_tip = sqrt(1 - cosTRL_tip * cosTRL_tip); + float specular_tip = max(0, cosTRL_tip * cosTE + sinTRL_tip * sinTE); + + return float3(params.Kd * diffuse, params.Ks1 * pow(specular_root, params.Ex1), params.Ks2 * pow(specular_tip, params.Ex2)); +} + +float LinearizeDepth(float depthNDC, float fNear, float fFar) +{ + return fNear * fFar / (fFar - depthNDC * (fFar - fNear)); +} + +// fDepthDistanceWS is the world space distance between the point on the surface and the point in the shadow map. +// fFiberSpacing is the assumed, average, world space distance between hair fibers. +// fFiberRadius in the assumed average hair radius. +// fHairAlpha is the alpha value for the hair (in terms of translucency, not coverage.) +// Output is a number between 0 (totally shadowed) and 1 (lets everything through) +float ComputeShadowAttenuation(float fDepthDistanceWS, float fFiberSpacing, float fFiberRadius, float fHairAlpha) +{ + float numFibers = fDepthDistanceWS / (fFiberSpacing * fFiberRadius); // fiberSpacing + fiberRadius is total distance from 1 fiber to another + + // if occluded by hair, there is at least one fiber + [flatten] if (fDepthDistanceWS > 1e-5) + numFibers = max(numFibers, 1); + + return pow(abs(1 - fHairAlpha), numFibers); +} + +float ComputeLightShadow(int lightIndex, float3 vPositionWS, in HairShadeParams params) +{ + if (LightData[lightIndex].ShadowMapIndex < 0) + return 1.f; + + float4 shadowTexCoord = MatrixMult( LightData[lightIndex].ShadowProjection, float4(vPositionWS, 1.f) ); + shadowTexCoord.xyz /= shadowTexCoord.w; + + // remember we are splitting the shadow map in 4 quarters + // and at this point, everything's in -1 to 1 + // So bring back to 0 -> 0.5 and flip the Y coordinate + shadowTexCoord.x = (1.0 + shadowTexCoord.x) * 0.25; + shadowTexCoord.y = (1.0 - shadowTexCoord.y) * 0.25; + + // Bias the depth value (note, we need better depth bias settings) + shadowTexCoord.z -= LightData[lightIndex].ShadowParams.x; + + float LinearZ = LinearizeDepth(shadowTexCoord.z, LightData[lightIndex].ShadowParams.y, LightData[lightIndex].ShadowParams.z); + + if ((shadowTexCoord.y < 0) || (shadowTexCoord.y > .5)) return 1.f; + if ((shadowTexCoord.x < 0) || (shadowTexCoord.x > .5)) return 1.f; + + // offsets of the center of the shadow map atlas + float offsetsX[4] = { 0.0, 1.0, 0.0, 1.0 }; + float offsetsY[4] = { 0.0, 0.0, 1.0, 1.0 }; + shadowTexCoord.x += offsetsX[LightData[lightIndex].ShadowMapIndex] * .5; + shadowTexCoord.y += offsetsY[LightData[lightIndex].ShadowMapIndex] * .5; + + // Sample shadow map + float shadow = 0.0; + + static const int kernelLevel = 2; + static const int kernelWidth = 2 * kernelLevel + 1; + [unroll] for (int i = -kernelLevel; i <= kernelLevel; i++) + { + [unroll] for (int j = -kernelLevel; j <= kernelLevel; j++) + { + float distToLight = ShadowTexture.Sample(LinearWrapSampler, shadowTexCoord.xy, int2(i, j)).r; + float LinearSample = LinearizeDepth(distToLight, LightData[lightIndex].ShadowParams.y, LightData[lightIndex].ShadowParams.z); + bool isLit = UseDepthApproximation ? LinearZ < LinearSample : shadowTexCoord.z < distToLight; + + if (isLit) + shadow += 1.f; + else + { + shadow += UseDepthApproximation ? ComputeShadowAttenuation(LinearZ - LinearSample, params.FiberSpacing, params.FiberRadius, params.HairShadowAlpha) : 0.f; + } + } + } + + // Average the values according to number of samples + shadow /= (kernelWidth * kernelWidth); + + return shadow; +} + +float3 AccumulateHairLight(float3 vTangent, float3 vPositionWS, float3 vViewDirWS, in HairShadeParams params, float3 vNDC) +{ + // Initialize information needed for all lights + float3 V = normalize(vViewDirWS); + float3 T = normalize(vTangent); + + float3 color = float3(0.0, 0.0, 0.0); + + // Needed for each light calculation + float3 LightVector; + float LightIntensity; + + // Start with non-shadowed lights + uint lightCount = min(NumLights, AMD_TRESSFX_MAX_LIGHTS); + for (uint i = 0; i < lightCount; i++) + { + GetLightParams(vPositionWS, i, LightVector, LightIntensity, params); + + if (LightIntensity) + { + // Compute shadow term (if we've got one) + float fShadowTerm = ComputeLightShadow(i, vPositionWS, params); + + if (fShadowTerm > 0.f) + { + float3 L = LightVector; + float3 LightColor = LightData[i].LightColor; + + float3 reflection = ComputeDiffuseSpecFactors(V, L, T, params); + + float3 ReflectedLight = reflection.x * LightColor * params.Color; + ReflectedLight += reflection.y * LightColor; + ReflectedLight += reflection.z * LightColor * params.Color; + ReflectedLight *= fShadowTerm * LightIntensity; + + color += max(float3(0, 0, 0), ReflectedLight); + } + } + } + + return color; +} + diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXMarchingCubes.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXMarchingCubes.hlsl new file mode 100644 index 0000000000..3de9fb19c3 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXMarchingCubes.hlsl @@ -0,0 +1,313 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to Marching Cubes +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + + +//StartHLSL TressFXMarchingCubesCS + +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +struct StandardVertex +{ + float4 position; + float4 normal; +}; + +[[vk::binding(5, 0)]] cbuffer ConstBuffer_MC : register(b5, space0) +{ + // rendering + float4x4 mMW; + float4x4 mWVP; + float4 cColor; + float4 vLightDir; + + //simulation + float4 g_Origin; + float g_CellSize; + int g_NumCellsX; + int g_NumCellsY; + int g_NumCellsZ; + + int g_MaxMarchingCubesVertices; + float g_MarchingCubesIsolevel; +} + +//Actually contains floats; make sure to use asfloat() when accessing. uint is used to allow atomics. +[[vk::binding(0, 0)]] RWStructuredBuffer g_MarchingCubesSignedDistanceField : register(u0, space0); + +// UAV for MC +[[vk::binding(1, 0)]] RWStructuredBuffer g_MarchingCubesTriangleVertices : register(u1, space0); +[[vk::binding(2, 0)]] RWStructuredBuffer g_NumMarchingCubesVertices : register(u2, space0); + +// SRV for MC +[[vk::binding(3, 0)]] StructuredBuffer g_MarchingCubesEdgeTable : register(t3, space0); +[[vk::binding(4, 0)]] StructuredBuffer g_MarchingCubesTriangleTable : register(t4, space0); + +int3 GetSdfCellPositionFromIndex(uint sdfCellIndex) +{ + uint cellsPerLine = (uint)g_NumCellsX; + uint cellsPerPlane = (uint)(g_NumCellsX * g_NumCellsY); + + uint numPlanesZ = sdfCellIndex / cellsPerPlane; + uint remainder = sdfCellIndex % cellsPerPlane; + + uint numLinesY = remainder / cellsPerLine; + uint numCellsX = remainder % cellsPerLine; + + return int3((int)numCellsX, (int)numLinesY, (int)numPlanesZ); +} + +float3 GetSdfCellPosition(int3 gridPosition) +{ + float3 cellCenter = float3(gridPosition.x, gridPosition.y, gridPosition.z) * g_CellSize; + cellCenter += g_Origin.xyz; + + return cellCenter; +} + +int GetSdfCellIndex(int3 gridPosition) +{ + int cellsPerLine = g_NumCellsX; + int cellsPerPlane = g_NumCellsX * g_NumCellsY; + + return cellsPerPlane*gridPosition.z + cellsPerLine*gridPosition.y + gridPosition.x; +} + +//Relative vertex positions: +// +// 4-------5 +// /| /| +// / | / | +// 7-------6 | +// | 0----|--1 +// | / | / +// |/ |/ +// 3-------2 +struct MarchingCube +{ + float4 m_vertices[8]; + float m_scalars[8]; +}; + +float3 VertexLerp(float isolevel, float scalar1, float scalar2, float4 p1, float4 p2) +{ + //Given 2 points p1, p2 with associated values scalar1, scalar2, + //we want the linearly interpolated position of a point in between p1 and p2 with a value equal to isolevel. + //Isolevel should be between scalar1 and scalar2. + // + //p = p1 + (p2 - p1) * (isolevel - scalar1) / (scalar2 - scalar1) + + float interp = (isolevel - scalar1) / (scalar2 - scalar1); + return (p1 + (p2 - p1) * interp).xyz; +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void InitializeMCVertices(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int index = GId.x * THREAD_GROUP_SIZE + GIndex; + + if (index < g_MaxMarchingCubesVertices) + { + StandardVertex v; + v.position = float4(0, 0, 0, 0); + v.normal = float4(0, 0, 0, 0); + + g_MarchingCubesTriangleVertices[index] = v; + } + + if (index == 0) + g_NumMarchingCubesVertices[0] = 0; +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void RunMarchingCubesOnSdf(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int numSdfCells = g_NumCellsX * g_NumCellsY * g_NumCellsZ; + + int sdfCellIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + if(sdfCellIndex >= numSdfCells) + return; + + int3 gridPosition = GetSdfCellPositionFromIndex( (uint)sdfCellIndex ); + + if( !(0 <= gridPosition.x && gridPosition.x < g_NumCellsX - 1) + || !(0 <= gridPosition.y && gridPosition.y < g_NumCellsY - 1) + || !(0 <= gridPosition.z && gridPosition.z < g_NumCellsZ - 1) ) return; + + int3 offset[8]; + offset[0] = int3(0, 0, 0); + offset[1] = int3(1, 0, 0); + offset[2] = int3(1, 0, 1); + offset[3] = int3(0, 0, 1); + offset[4] = int3(0, 1, 0); + offset[5] = int3(1, 1, 0); + offset[6] = int3(1, 1, 1); + offset[7] = int3(0, 1, 1); + + int3 cellCoordinates[8]; + + for(int i = 0; i < 8; ++i) + cellCoordinates[i] = gridPosition + offset[i]; + + MarchingCube C; + + for(int j = 0; j < 8; ++j) + C.m_vertices[j].xyz = GetSdfCellPosition(cellCoordinates[j]); + + for(int k = 0; k < 8; ++k) + { + int sdfIndex = GetSdfCellIndex(cellCoordinates[k]); + float dist = asfloat(g_MarchingCubesSignedDistanceField[sdfIndex]); + + C.m_scalars[k] = dist; + } + + + //appendTrianglesMarchingCubes(C); + { + //Compare floats at vertices 0-7 with g_MarchingCubesIsolevel + //to determine which of the 256 possible configurations is present + uint cubeIndex = 0; + if( C.m_scalars[0] < g_MarchingCubesIsolevel ) cubeIndex |= 1; + if( C.m_scalars[1] < g_MarchingCubesIsolevel ) cubeIndex |= 2; + if( C.m_scalars[2] < g_MarchingCubesIsolevel ) cubeIndex |= 4; + if( C.m_scalars[3] < g_MarchingCubesIsolevel ) cubeIndex |= 8; + if( C.m_scalars[4] < g_MarchingCubesIsolevel ) cubeIndex |= 16; + if( C.m_scalars[5] < g_MarchingCubesIsolevel ) cubeIndex |= 32; + if( C.m_scalars[6] < g_MarchingCubesIsolevel ) cubeIndex |= 64; + if( C.m_scalars[7] < g_MarchingCubesIsolevel ) cubeIndex |= 128; + + if( !g_MarchingCubesEdgeTable[cubeIndex] ) + return; //All vertices are above or below isolevel + + //Generate vertices for edges 0-11; interpolate between the edge's vertices + float3 vertices[12]; + if( g_MarchingCubesEdgeTable[cubeIndex] & 1 ) vertices[0] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[0], C.m_scalars[1], C.m_vertices[0], C.m_vertices[1]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 2 ) vertices[1] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[1], C.m_scalars[2], C.m_vertices[1], C.m_vertices[2]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 4 ) vertices[2] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[2], C.m_scalars[3], C.m_vertices[2], C.m_vertices[3]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 8 ) vertices[3] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[3], C.m_scalars[0], C.m_vertices[3], C.m_vertices[0]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 16 ) vertices[4] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[4], C.m_scalars[5], C.m_vertices[4], C.m_vertices[5]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 32 ) vertices[5] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[5], C.m_scalars[6], C.m_vertices[5], C.m_vertices[6]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 64 ) vertices[6] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[6], C.m_scalars[7], C.m_vertices[6], C.m_vertices[7]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 128 ) vertices[7] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[7], C.m_scalars[4], C.m_vertices[7], C.m_vertices[4]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 256 ) vertices[8] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[0], C.m_scalars[4], C.m_vertices[0], C.m_vertices[4]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 512 ) vertices[9] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[1], C.m_scalars[5], C.m_vertices[1], C.m_vertices[5]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 1024 ) vertices[10] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[2], C.m_scalars[6], C.m_vertices[2], C.m_vertices[6]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 2048 ) vertices[11] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[3], C.m_scalars[7], C.m_vertices[3], C.m_vertices[7]); + + //Store triangles + uint numVerticesFromThisCube = 0; + + for(int i = 0; i < 16 && g_MarchingCubesTriangleTable[cubeIndex * 16 + i] != -1; ++i) + ++numVerticesFromThisCube; + + int vertexIndexOffset; + InterlockedAdd(g_NumMarchingCubesVertices[0], numVerticesFromThisCube, vertexIndexOffset); + + if(vertexIndexOffset + numVerticesFromThisCube < g_MaxMarchingCubesVertices) + { + uint numTriangles = numVerticesFromThisCube / 3; + + for(uint tri = 0; tri < numTriangles; ++tri) + { + uint offset0 = tri * 3 + 0; + uint offset1 = tri * 3 + 1; + uint offset2 = tri * 3 + 2; + + StandardVertex v0; + StandardVertex v1; + StandardVertex v2; + + v0.position = float4(vertices[ g_MarchingCubesTriangleTable[cubeIndex * 16 + offset0] ], 0); + v1.position = float4(vertices[ g_MarchingCubesTriangleTable[cubeIndex * 16 + offset1] ], 0); + v2.position = float4(vertices[ g_MarchingCubesTriangleTable[cubeIndex * 16 + offset2] ], 0); + + float3 normal = normalize( cross(v1.position.xyz - v0.position.xyz, v2.position.xyz - v0.position.xyz) ); + + v0.normal = float4(normal.xyz, 0); + v1.normal = float4(normal.xyz, 0); + v2.normal = float4(normal.xyz, 0); + + uint index0 = vertexIndexOffset + offset0; + uint index1 = vertexIndexOffset + offset1; + uint index2 = vertexIndexOffset + offset2; + + g_MarchingCubesTriangleVertices[index0] = v0; + g_MarchingCubesTriangleVertices[index1] = v1; + g_MarchingCubesTriangleVertices[index2] = v2; + } + } + } + +} + +//EndHLSL + +// rendering stuff ( from oSDF.sufx ) + +struct VsOutput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +VsOutput MarchingCubesVS(uint vertexId : SV_VertexID) +{ + VsOutput output; + + output.vNormal_ = mul(g_MarchingCubesTriangleVertices[vertexId].normal.xyz, (float3x3)mMW); + float4 inputVertexPos = float4(g_MarchingCubesTriangleVertices[vertexId].position.xyz, 1.0); + + output.vPositionSS = mul(mWVP, float4(inputVertexPos.xyz, 1.0f)); + output.vPos_ = inputVertexPos.xyz; + return output; +} + +struct PSOutput +{ + float4 vColor : SV_TARGET; +}; + +PSOutput MarchingCubesPS(VsOutput input) +{ + PSOutput output = (PSOutput)0; + float4 vDiffuse = float4(cColor.xyz, 1.0); + float fAmbient = 0.2; + float3 vLightDir1 = float3(-1., 0., -1.); + + //float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)); + float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)) + 0.7 * saturate(dot(normalize(vLightDir1), input.vNormal_)); + fLighting = max(fLighting, fAmbient); + + output.vColor = vDiffuse * fLighting; + return output; +} diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXPPLL.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXPPLL.hlsl new file mode 100644 index 0000000000..8e6a2f5919 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXPPLL.hlsl @@ -0,0 +1,395 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to per-pixel linked lists. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + +#include "TressFXRendering.hlsl" +#include "TressFXStrands.hlsl" + +#define FRAGMENT_LIST_NULL 0xffffffff + +[[vk::binding(0, 2)]] cbuffer viewConstants : register(b0, space2) +{ + float4x4 g_mVP; + float4 g_vEye; + float4 g_vViewport; + float4x4 cInvViewProjMatrix; +}; + +// Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; + float4 Tangent : Tangent; + float4 p0p1 : TEXCOORD0; + float4 StrandColor : TEXCOORD1; +}; + +////////////////////////////////////////////////////////////// +// Hair Render VS +PS_INPUT_HAIR RenderHairVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = tressfxVert.Tangent; + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = tressfxVert.StrandColor; + + return Output; +} + +struct PPLL_STRUCT +{ + uint depth; + uint data; + uint color; + uint uNext; +}; + +[[vk::binding(0, 3)]] RWTexture2D RWFragmentListHead : register(u0, space3); +[[vk::binding(1, 3)]] RWStructuredBuffer LinkedListUAV : register(u1, space3); +[[vk::binding(2, 3)]] RWStructuredBuffer LinkedListCounter : register(u2, space3); + +// Allocate a new fragment location in fragment color, depth, and link buffers +int AllocateFragment(int2 vScreenAddress) +{ + uint newAddress; + InterlockedAdd(LinkedListCounter[0], 1, newAddress); + + if (newAddress < 0 || newAddress >= NodePoolSize) + newAddress = FRAGMENT_LIST_NULL; + return newAddress; +} + +// Insert a new fragment at the head of the list. The old list head becomes the +// the second fragment in the list and so on. Return the address of the *old* head. +int MakeFragmentLink(int2 vScreenAddress, int nNewHeadAddress) +{ + int nOldHeadAddress; + InterlockedExchange(RWFragmentListHead[vScreenAddress], nNewHeadAddress, nOldHeadAddress); + return nOldHeadAddress; +} + +// Write fragment attributes to list location. +void WriteFragmentAttributes(int nAddress, int nPreviousLink, float4 vData, float3 vColor3, float fDepth) +{ + PPLL_STRUCT element; + element.data = PackFloat4IntoUint(vData); + element.color = PackFloat3ByteIntoUint(vColor3, RenderParamsIndex); + element.depth = asuint(saturate(fDepth)); + element.uNext = nPreviousLink; + LinkedListUAV[nAddress] = element; +} + +////////////////////////////////////////////////////////////// +// PPLL Fill PS +// First pass of PPLL implementation +// Builds up the linked list of hair fragments +[earlydepthstencil] +void PPLLFillPS(PS_INPUT_HAIR input) +{ + // Strand Color read in is either the BaseMatColor, or BaseMatColor modulated with a color read from texture on vertex shader for base color; + //along with modulation by the tip color + float4 strandColor = float4(input.StrandColor.rgb, MatBaseColor.a); + + // Grab the uv in case we need it + float2 uv = float2(input.Tangent.w, input.StrandColor.w); + + // Apply StrandUVTiling + // strandUV.y = (uv.y * StrandUVTilingFactor) % 1.f + float2 strandUV = float2(uv.x, (uv.y * StrandUVTilingFactor) - floor(uv.y * StrandUVTilingFactor)); + + // If we are supporting strand UV texturing, further blend in the texture color/alpha + // Do this while computing NDC and coverage to hide latency from texture lookup + if (EnableStrandUV) + strandColor.rgb *= StrandAlbedoTexture.Sample(LinearWrapSampler, strandUV).rgb; + + float3 vNDC = ScreenPosToNDC(input.Position.xyz, g_vViewport); + float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, g_vViewport.zw - g_vViewport.xy); + float3 vPositionWS = NDCToWorld(vNDC, cInvViewProjMatrix); + float alpha = coverage; + + // Update the alpha to have proper value (accounting for coverage, base alpha, and strand alpha) + alpha *= strandColor.w; + + // Early out + if (alpha < 1.f/255.f) + return; + + // Get the screen address + int2 vScreenAddress = int2(input.Position.xy); + + // Allocate a new fragment + int nNewFragmentAddress = AllocateFragment(vScreenAddress); + + int nOldFragmentAddress = MakeFragmentLink(vScreenAddress, nNewFragmentAddress); + WriteFragmentAttributes(nNewFragmentAddress, nOldFragmentAddress, float4(input.Tangent.xyz * 0.5 + float3(0.5, 0.5, 0.5), alpha), strandColor.xyz, input.Position.z); +} + +////////////////////////////////////////////////////////////// +// Fullscreen Quad VS +struct VS_OUTPUT_SCREENQUAD +{ + float4 vPosition : SV_POSITION; + float2 vTex : TEXCOORD; +}; + +static const float2 Positions[] = { {-1, -1,}, {1, -1}, {-1, 1}, {1, 1} }; + +VS_OUTPUT_SCREENQUAD FullScreenVS(uint vertexID : SV_VertexID) +{ + VS_OUTPUT_SCREENQUAD output; + + // Output vert positions + output.vPosition = float4(Positions[vertexID].xy, 0, 1); + + // And tex-coords +#ifdef AMD_TRESSFX_DX12 + output.vTex = float2(Positions[vertexID].x, Positions[vertexID].y) * 0.5 + 0.5; +#else + output.vTex = float2(Positions[vertexID].x, -Positions[vertexID].y) * 0.5 + 0.5; +#endif // AMD_TRESSFX_DX12 + return output; +} + +////////////////////////////////////////////////////////////// +// Bind data for PPLLResolvePS + +#include "TressFXLighting.hlsl" + +#define KBUFFER_SIZE 8 +#define MAX_FRAGMENTS 512 + +[[vk::binding(0, 0)]] Texture2D FragmentListHead : register(t0, space0); +[[vk::binding(1, 0)]] StructuredBuffer LinkedListNodes : register(t1, space0); + +#define NODE_DATA(x) LinkedListNodes[x].data +#define NODE_NEXT(x) LinkedListNodes[x].uNext +#define NODE_DEPTH(x) LinkedListNodes[x].depth +#define NODE_COLOR(x) LinkedListNodes[x].color + +#define GET_DEPTH_AT_INDEX(uIndex) kBuffer[uIndex].x +#define GET_DATA_AT_INDEX(uIndex) kBuffer[uIndex].y +#define GET_COLOR_AT_INDEX(uIndex) kBuffer[uIndex].z +#define STORE_DEPTH_AT_INDEX(uIndex, uValue) kBuffer[uIndex].x = uValue +#define STORE_DATA_AT_INDEX( uIndex, uValue) kBuffer[uIndex].y = uValue +#define STORE_COLOR_AT_INDEX( uIndex, uValue ) kBuffer[uIndex].z = uValue + +// If you change this, you MUST also change TressFXShadeParams in TressFXConstantBuffers.h and ShadeParams in TressFXShortcut.hlsl +struct ShadeParams +{ + // General information + float FiberRadius; + // For deep approximated shadow lookup + float ShadowAlpha; + float FiberSpacing; + // For lighting/shading + float HairEx2; + float4 MatKValue; // KAmbient, KDiffuse, KSpec1, Exp1 + float HairKs2; + float fPadding0; + float fPadding1; + float fPadding2; +}; + +[[vk::binding(0, 1)]] cbuffer TressFXShadeParams : register(b0, space1) +{ + ShadeParams HairParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; +}; + +float3 TressFXShading(float2 pixelCoord, float depth, float3 vTangentCoverage, float3 baseColor, int shaderParamIndex) +{ + float3 vNDC = ScreenPosToNDC(float3(pixelCoord, depth), g_vViewport); + float3 vPositionWS = NDCToWorld(vNDC, cInvViewProjMatrix); + float3 vViewDirWS = g_vEye - vPositionWS; + + // Need to expand the tangent that was compressed to store in the buffer + float3 vTangent = vTangentCoverage.xyz * 2.f - 1.f; + + HairShadeParams params; + params.Color = baseColor; + params.HairShadowAlpha = HairParams[shaderParamIndex].ShadowAlpha; + params.FiberRadius = HairParams[shaderParamIndex].FiberRadius; + params.FiberSpacing = HairParams[shaderParamIndex].FiberSpacing; + + params.Ka = HairParams[shaderParamIndex].MatKValue.x; + params.Kd = HairParams[shaderParamIndex].MatKValue.y; + params.Ks1 = HairParams[shaderParamIndex].MatKValue.z; + params.Ex1 = HairParams[shaderParamIndex].MatKValue.w; + params.Ks2 = HairParams[shaderParamIndex].HairKs2; + params.Ex2 = HairParams[shaderParamIndex].HairEx2; + + return AccumulateHairLight(vTangent, vPositionWS, vViewDirWS, params, vNDC); +} + +float4 GatherLinkedList(float2 vfScreenAddress) +{ + uint2 vScreenAddress = uint2(vfScreenAddress); + uint pointer = FragmentListHead[vScreenAddress]; + + if (pointer == FRAGMENT_LIST_NULL) + discard; + + uint4 kBuffer[KBUFFER_SIZE]; + + // Init kbuffer to large values + [unroll] + for (int t = 0; t < KBUFFER_SIZE; ++t) + { + STORE_DEPTH_AT_INDEX(t, asuint(100000.0)); + STORE_DATA_AT_INDEX(t, 0); + } + + // Get first K elements from the top (top to bottom) + // And store them in the kbuffer for later + for (int p = 0; p < KBUFFER_SIZE; ++p) + { + if (pointer != FRAGMENT_LIST_NULL) + { + STORE_DEPTH_AT_INDEX(p, NODE_DEPTH(pointer)); + STORE_DATA_AT_INDEX(p, NODE_DATA(pointer)); + STORE_COLOR_AT_INDEX(p, NODE_COLOR(pointer)); + pointer = NODE_NEXT(pointer); + } + } + + float4 fcolor = float4(0, 0, 0, 1); + + // Go through the remaining layers of hair + [allow_uav_condition] + for (int iFragment = 0; iFragment < MAX_FRAGMENTS && pointer != FRAGMENT_LIST_NULL; ++iFragment) + { + if (pointer == FRAGMENT_LIST_NULL) break; + + int id = 0; + float max_depth = 0; + + // Find the current furthest sample in the KBuffer + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (max_depth < fDepth) + { + max_depth = fDepth; + id = i; + } + } + + // Fetch the node data + uint data = NODE_DATA(pointer); + uint color = NODE_COLOR(pointer); + uint nodeDepth = NODE_DEPTH(pointer); + float fNodeDepth = asfloat(nodeDepth); + + // If the node in the linked list is nearer than the furthest one in the local array, exchange the node + // in the local array for the one in the linked list. + if (max_depth > fNodeDepth) + { + uint tmp = GET_DEPTH_AT_INDEX(id); + STORE_DEPTH_AT_INDEX(id, nodeDepth); + fNodeDepth = asfloat(tmp); + + tmp = GET_DATA_AT_INDEX(id); + STORE_DATA_AT_INDEX(id, data); + data = tmp; + + tmp = GET_COLOR_AT_INDEX(id); + STORE_COLOR_AT_INDEX(id, color); + color = tmp; + } + + // Calculate color contribution from whatever sample we are using + float4 vData = UnpackUintIntoFloat4(data); + float3 vTangent = vData.xyz; + float alpha = vData.w; + uint shadeParamIndex; // So we know what settings to shade with + float3 vColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + + // Shade the bottom hair layers (cheap shading, just uses scalp base color) + // Just blend in the color for cheap underhairs + fcolor.xyz = fcolor.xyz * (1.f - alpha) + (vColor * alpha) * alpha; + fcolor.w *= (1.f - alpha); + + pointer = NODE_NEXT(pointer); + } + + // Make sure we are blending the correct number of strands (don't blend more than we have) + float maxAlpha = 0; + + // Blend the top-most entries + for (int j = 0; j < KBUFFER_SIZE; j++) + { + int id = 0; + float max_depth = 0; + + // find the furthest node in the array + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (max_depth < fDepth) + { + max_depth = fDepth; + id = i; + } + } + + // take this node out of the next search + uint nodeDepth = GET_DEPTH_AT_INDEX(id); + uint data = GET_DATA_AT_INDEX(id); + uint color = GET_COLOR_AT_INDEX(id); + + // take this node out of the next search + STORE_DEPTH_AT_INDEX(id, 0); + + // Use high quality shading for the nearest k fragments + float fDepth = asfloat(nodeDepth); + float4 vData = UnpackUintIntoFloat4(data); + float3 vTangent = vData.xyz; + float alpha = vData.w; + uint shadeParamIndex; // So we know what settings to shade with + float3 vColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + float3 fragmentColor = TressFXShading(vfScreenAddress, fDepth, vTangent, vColor, shadeParamIndex); + + // Blend in the fragment color + fcolor.xyz = fcolor.xyz * (1.f - alpha) + (fragmentColor * alpha) * alpha; + fcolor.w *= (1.f - alpha); + } + + return fcolor; +} + +////////////////////////////////////////////////////////////// +// PPLL Resolve PS +// Full-screen pass that sorts through the written samples and shades the hair +[earlydepthstencil] +float4 PPLLResolvePS(VS_OUTPUT_SCREENQUAD input) : SV_Target +{ + return GatherLinkedList(input.vPosition.xy); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXRendering.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXRendering.hlsl new file mode 100644 index 0000000000..c28b95938f --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXRendering.hlsl @@ -0,0 +1,133 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + +// StartHLSL TressFXRendering +#define AMD_PI 3.1415926 +#define AMD_e 2.71828183 + +#define AMD_TRESSFX_KERNEL_SIZE 5 + +// We might break this down further. +// If you change this, you MUST also change TressFXRenderParams in TressFXConstantBuffers.h +// Binding (0-1, 0) are in TressFXStrands.hlsl +[[vk::binding(3, 0)]] cbuffer TressFXParameters : register(b3, space0) +{ + // General information + float HairFiberRadius; + + // For deep approximated shadow lookup + float ShadowAlpha; + float FiberSpacing; + + // For lighting/shading + float HairKs2; + float HairEx2; + float3 fPadding0; + + float4 MatKValue; + + int MaxShadowFibers; + int3 iPadding0; +} + +// Separate strand params from pixel render params (so we can index for PPLL) +// If you change this, you MUST also change TressFXStrandParams in TressFXConstantBuffers.h +[[vk::binding(4, 0)]] cbuffer TressFXStrandParameters : register(b4, space0) +{ + float4 MatBaseColor; + float4 MatTipColor; + + float TipPercentage; + float StrandUVTilingFactor; + float FiberRatio; + float FiberRadius; + + int NumVerticesPerStrand; + int EnableThinTip; + int NodePoolSize; + int RenderParamsIndex; + + // Other params + int EnableStrandUV; + int EnableStrandTangent; + int2 iPadding1; +} + +// NOTE, we may have to split bindings to TressFXStrands and those to TressFXRendering when implementing PPLL +[[vk::binding(5, 0)]] Texture2D StrandAlbedoTexture : register(t5, space0); + +struct HairShadeParams +{ + float3 Color; + float HairShadowAlpha; + float FiberRadius; + float FiberSpacing; + float Ka; + float Kd; + float Ks1; + float Ex1; + float Ks2; + float Ex2; +}; + +//-------------------------------------------------------------------------------------- +// ComputeCoverage +// +// Calculate the pixel coverage of a hair strand by computing the hair width +//-------------------------------------------------------------------------------------- +float ComputeCoverage(float2 p0, float2 p1, float2 pixelLoc, float2 winSize) +{ + // p0, p1, pixelLoc are in d3d clip space (-1 to 1)x(-1 to 1) + + // Scale positions so 1.f = half pixel width + p0 *= winSize; + p1 *= winSize; + pixelLoc *= winSize; + + float p0dist = length(p0 - pixelLoc); + float p1dist = length(p1 - pixelLoc); + float hairWidth = length(p0 - p1); + + // will be 1.f if pixel outside hair, 0.f if pixel inside hair + float outside = any(float2(step(hairWidth, p0dist), step(hairWidth, p1dist))); + + // if outside, set sign to -1, else set sign to 1 + float sign = outside > 0.f ? -1.f : 1.f; + + // signed distance (positive if inside hair, negative if outside hair) + float relDist = sign * saturate(min(p0dist, p1dist)); + + // returns coverage based on the relative distance + // 0, if completely outside hair edge + // 1, if completely inside hair edge + return (relDist + 1.f) * 0.5f; +} + +// EndHLSL + diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSDFCollision.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSDFCollision.hlsl new file mode 100644 index 0000000000..a2ed2413a8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSDFCollision.hlsl @@ -0,0 +1,717 @@ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +#define INITIAL_DISTANCE 1e10f +#define MARGIN g_CellSize +#define GRID_MARGIN int3(1, 1, 1) + +struct StandardVertex +{ + float4 position; + float4 normal; +}; + +[[vk::binding(3, 0)]] cbuffer ConstBuffer_SDF : register(b3, space0) +{ + //row_major float4x4 g_ModelTransformForHead; + //row_major float4x4 g_ModelInvTransformForHead; + + float4 g_Origin; + float g_CellSize; + int g_NumCellsX; + int g_NumCellsY; + int g_NumCellsZ; + int g_MaxMarchingCubesVertices; + float g_MarchingCubesIsolevel; + float g_CollisionMargin; + int g_NumHairVerticesPerStrand; + int g_NumTotalHairVertices; + float pad1; + float pad2; + float pad3; +} + +// bindsets: 0 -> GenerateSDFLayout +// 1 -> ApplySDFLayout +// 2 -> + +//Actually contains floats; make sure to use asfloat() when accessing. uint is used to allow atomics. +[[vk::binding(1, 0)]] RWStructuredBuffer g_SignedDistanceField : register(u1, space0); +[[vk::binding(0, 1)]] RWStructuredBuffer g_HairVertices : register(u0, space1); +[[vk::binding(1, 1)]] RWStructuredBuffer g_PrevHairVertices : register(u1, space1); + +//Triangle input to SDF builder +// [[vk::binding(0, 0)]] StructuredBuffer g_TrimeshVertices; +[[vk::binding(0, 0)]] StructuredBuffer g_TrimeshVertexIndices : register(t0, space0); +[[vk::binding(2, 0)]] RWStructuredBuffer collMeshVertexPositions : register(u2, space0); + +//When building the SDF we want to find the lowest distance at each SDF cell. In order to allow multiple threads to write to the same +//cells, it is necessary to use atomics. However, there is no support for atomics with 32-bit floats so we convert the float into unsigned int +//and use atomic_min() / InterlockedMin() as a workaround. +// +//When used with atomic_min, both FloatFlip2() and FloatFlip3() will store the float with the lowest magnitude. +//The difference is that FloatFlip2() will preper negative values ( InterlockedMin( FloatFlip2(1.0), FloatFlip2(-1.0) ) == -1.0 ), +//while FloatFlip3() prefers positive values ( InterlockedMin( FloatFlip3(1.0), FloatFlip3(-1.0) ) == 1.0 ). +//Using FloatFlip3() seems to result in a SDF with higher quality compared to FloatFlip2(). +uint FloatFlip2(float fl) +{ + uint f = asuint(fl); + return (f << 1) | (f >> 31 ^ 0x00000001); //Rotate sign bit to least significant and Flip sign bit so that (0 == negative) +} +uint IFloatFlip2(uint f2) +{ + return (f2 >> 1) | (f2 << 31 ^ 0x80000000); +} +uint FloatFlip3(float fl) +{ + uint f = asuint(fl); + return (f << 1) | (f >> 31); //Rotate sign bit to least significant +} +uint IFloatFlip3(uint f2) +{ + return (f2 >> 1) | (f2 << 31); +} + +// Get SDF cell index coordinates (x, y and z) from a point position in world space +int3 GetSdfCoordinates(float3 positionInWorld) +{ + float3 sdfPosition = (positionInWorld - g_Origin.xyz) / g_CellSize; + + int3 result; + result.x = (int)sdfPosition.x; + result.y = (int)sdfPosition.y; + result.z = (int)sdfPosition.z; + + return result; +} + +float3 GetSdfCellPosition(int3 gridPosition) +{ + float3 cellCenter = float3(gridPosition.x, gridPosition.y, gridPosition.z) * g_CellSize; + cellCenter += g_Origin.xyz; + + return cellCenter; +} + +int GetSdfCellIndex(int3 gridPosition) +{ + int cellsPerLine = g_NumCellsX; + int cellsPerPlane = g_NumCellsX * g_NumCellsY; + + return cellsPerPlane*gridPosition.z + cellsPerLine*gridPosition.y + gridPosition.x; +} + +float DistancePointToEdge2(float3 p, float3 x0, float3 x1, out float3 pointOnEdge) +{ + float3 x10 = x1 - x0; + + float t = dot(x1 - p, x10) / dot(x10, x10); + t = max( 0.0f, min(t, 1.0f) ); + + pointOnEdge = (t*x0 + (1.0f - t)*x1); + + float3 a = p - pointOnEdge; + float d = length(a); + float3 n = a / (d + 1e-30f); + + return d; +} + +float DistancePointToEdge(float3 p, float3 x0, float3 x1, out float3 n) +{ + float3 x10 = x1 - x0; + + float t = dot(x1 - p, x10) / dot(x10, x10); + t = max(0.0f, min(t, 1.0f)); + + float3 a = p - (t*x0 + (1.0f - t)*x1); + float d = length(a); + n = a / (d + 1e-30f); + + return d; +} + +// Check if p is in the positive or negative side of triangle (x0, x1, x2) +// Positive side is where the normal vector of triangle ( (x1-x0) x (x2-x0) ) is pointing to. +float SignedDistancePointToTriangle(float3 p, float3 x0, float3 x1, float3 x2) +{ + float d = 0; + float3 x02 = x0 - x2; + float l0 = length(x02) + 1e-30f; + x02 = x02 / l0; + float3 x12 = x1 - x2; + float l1 = dot(x12, x02); + x12 = x12 - l1*x02; + float l2 = length(x12) + 1e-30f; + x12 = x12 / l2; + float3 px2 = p - x2; + + float b = dot(x12, px2) / l2; + float a = (dot(x02, px2) - l1*b) / l0; + float c = 1 - a - b; + + // normal vector of triangle. Don't need to normalize this yet. + float3 nTri = cross((x1 - x0), (x2 - x0)); + float3 n; + + float tol = 1e-8f; + + if (a >= -tol && b >= -tol && c >= -tol) + { + n = p - (a*x0 + b*x1 + c*x2); + d = length(n); + + float3 n1 = n / d; + float3 n2 = nTri / (length(nTri) + 1e-30f); // if d == 0 + + n = (d > 0) ? n1 : n2; + } + else + { + float3 n_12; + float3 n_02; + d = DistancePointToEdge(p, x0, x1, n); + + float d12 = DistancePointToEdge(p, x1, x2, n_12); + float d02 = DistancePointToEdge(p, x0, x2, n_02); + + d = min(d, d12); + d = min(d, d02); + + n = (d == d12) ? n_12 : n; + n = (d == d02) ? n_02 : n; + } + + d = (dot(p - x0, nTri) < 0.f) ? -d : d; + + return d; +} + + +float SignedDistancePointToTriangle2(float3 p, float3 x0, float3 x1, float3 x2, + float3 vertexNormal0, float3 vertexNormal1, float3 vertexNormal2, + float3 edgeNormal01, float3 edgeNormal12, float3 edgeNormal20) +{ + float d = 0; + float3 x02 = x0 - x2; + float l0 = length(x02) + 1e-30f; + x02 = x02 / l0; + float3 x12 = x1 - x2; + float l1 = dot(x12, x02); + x12 = x12 - l1*x02; + float l2 = length(x12) + 1e-30f; + x12 = x12 / l2; + float3 px2 = p - x2; + + float b = dot(x12, px2) / l2; + float a = ( dot(x02, px2) - l1*b ) / l0; + float c = 1 - a - b; + + // normal vector of triangle. Don't need to normalize this yet. + float3 nTri = cross( (x1 - x0), (x2 - x0) ); + float3 n; + + float tol = 1e-8f; + + //Check if triangle is in the Voronoi face region + if ( a >= -tol && b >= -tol && c >= -tol ) + { + n = p - (a*x0 + b*x1 + c*x2); + d = length(n); + + float3 n1 = n / d; + float3 n2 = nTri / ( length(nTri) + 1e-30f ); // if d == 0 + + n = (d > 0) ? n1 : n2; + d = ( dot(p - x0, nTri) < 0.f ) ? -d : d; + } + else + { + //Otherwise find the nearest edge/vertex + float3 normals[6]; + normals[0] = vertexNormal0; + normals[1] = vertexNormal1; + normals[2] = vertexNormal2; + normals[3] = edgeNormal01; + normals[4] = edgeNormal12; + normals[5] = edgeNormal20; + + float3 nearestPoint[6]; + nearestPoint[0] = x0; + nearestPoint[1] = x1; + nearestPoint[2] = x2; + + float distances[6]; + distances[0] = length(p - x0); + distances[1] = length(p - x1); + distances[2] = length(p - x2); + distances[3] = DistancePointToEdge2(p, x0, x1, nearestPoint[3]); + distances[4] = DistancePointToEdge2(p, x1, x2, nearestPoint[4]); + distances[5] = DistancePointToEdge2(p, x0, x2, nearestPoint[5]); + + float minDistance = distances[0]; + for(int i = 1; i < 6; ++i) minDistance = min(minDistance, distances[i]); + + float3 pointOnPlane = nearestPoint[0]; + float3 normal = normals[0]; + + for(int j = 1; j < 6; ++j) + { + int isMin = (minDistance == distances[j]); + + pointOnPlane = (isMin) ? nearestPoint[j] : pointOnPlane; + normal = (isMin) ? normals[j] : normal; + } + + d = ( dot(p - pointOnPlane, normal) < 0.f ) ? -minDistance : minDistance; + } + + + return d; +} + +// One thread for each cell. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void InitializeSignedDistanceField(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int numSdfCells = g_NumCellsX * g_NumCellsY * g_NumCellsZ; + + int sdfCellIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + if(sdfCellIndex >= numSdfCells) return; + + g_SignedDistanceField[sdfCellIndex] = FloatFlip3(INITIAL_DISTANCE); +} + +int3 GetLocalCellPositionFromIndex(uint localCellIndex, int3 cellsPerDimensionLocal) +{ + uint cellsPerLine = (uint)cellsPerDimensionLocal.x; + uint cellsPerPlane = (uint)(cellsPerDimensionLocal.x * cellsPerDimensionLocal.y); + + uint numPlanesZ = localCellIndex / cellsPerPlane; + uint remainder = localCellIndex % cellsPerPlane; + + uint numLinesY = remainder / cellsPerLine; + uint numCellsX = remainder % cellsPerLine; + + return int3((int)numCellsX, (int)numLinesY, (int)numPlanesZ); +} + +// One thread per each triangle +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void ConstructSignedDistanceField(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int triangleIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + uint numTriangleIndices, stride; + g_TrimeshVertexIndices.GetDimensions(numTriangleIndices, stride); + uint numTriangles = numTriangleIndices / 3; + + if (triangleIndex >= (int)numTriangles) + return; + + uint index0 = g_TrimeshVertexIndices[triangleIndex * 3 + 0]; + uint index1 = g_TrimeshVertexIndices[triangleIndex * 3 + 1]; + uint index2 = g_TrimeshVertexIndices[triangleIndex * 3 + 2]; + + float3 tri0 = collMeshVertexPositions[index0].position; + float3 tri1 = collMeshVertexPositions[index1].position; + float3 tri2 = collMeshVertexPositions[index2].position; + + float3 aabbMin = min(tri0, min(tri1, tri2)) - float3(MARGIN, MARGIN, MARGIN); + float3 aabbMax = max(tri0, max(tri1, tri2)) + float3(MARGIN, MARGIN, MARGIN); + + int3 gridMin = GetSdfCoordinates(aabbMin) - GRID_MARGIN; + int3 gridMax = GetSdfCoordinates(aabbMax) + GRID_MARGIN; + + gridMin.x = max(0, min(gridMin.x, g_NumCellsX - 1)); + gridMin.y = max(0, min(gridMin.y, g_NumCellsY - 1)); + gridMin.z = max(0, min(gridMin.z, g_NumCellsZ - 1)); + + gridMax.x = max(0, min(gridMax.x, g_NumCellsX - 1)); + gridMax.y = max(0, min(gridMax.y, g_NumCellsY - 1)); + gridMax.z = max(0, min(gridMax.z, g_NumCellsZ - 1)); + + + + //for (int z = gridMin.z; z <= gridMax.z; ++z) + // for (int y = gridMin.y; y <= gridMax.y; ++y) + // for (int x = gridMin.x; x <= gridMax.x; ++x) + // { + // int3 gridCellCoordinate = int3(x, y, z); + + // int gridCellIndex = GetSdfCellIndex(gridCellCoordinate); + // float3 cellPosition = GetSdfCellPosition(gridCellCoordinate); + + // float distance = SignedDistancePointToTriangle(cellPosition, tri0, tri1, tri2); + // //distance -= MARGIN; + + // uint distanceAsUint = FloatFlip3(distance); + // InterlockedMin(g_SignedDistanceField[gridCellIndex], distanceAsUint); + // } + + + for (int z = gridMin.z; z <= gridMax.z; ++z) + for (int y = gridMin.y; y <= gridMax.y; ++y) + for (int x = gridMin.x; x <= gridMax.x; ++x) + { + int3 gridCellCoordinate = int3(x, y, z); + int gridCellIndex = GetSdfCellIndex(gridCellCoordinate); + float3 cellPosition = GetSdfCellPosition(gridCellCoordinate); + + float distance = SignedDistancePointToTriangle(cellPosition, tri0, tri1, tri2); + //distance -= MARGIN; + uint distanceAsUint = FloatFlip3(distance); + InterlockedMin(g_SignedDistanceField[gridCellIndex], distanceAsUint); + } +} + +// One thread per each cell. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void FinalizeSignedDistanceField(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int numSdfCells = g_NumCellsX * g_NumCellsY * g_NumCellsZ; + + int sdfCellIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + if (sdfCellIndex >= numSdfCells) return; + + uint distance = g_SignedDistanceField[sdfCellIndex]; + g_SignedDistanceField[sdfCellIndex] = IFloatFlip3(distance); +} + +float LinearInterpolate(float a, float b, float t) +{ + return a * (1.0f - t) + b * t; +} + +// bilinear interpolation +// +// p : 1-p +// c------------+----d +// | | | +// | | | +// | 1-q | | +// | | | +// | x | +// | | | +// | q | | +// a------------+----b +// p : 1-p +// +// x = BilinearInterpolate(a, b, c, d, p, q) +// = LinearInterpolate(LinearInterpolate(a, b, p), LinearInterpolate(c, d, p), q) +float BilinearInterpolate(float a, float b, float c, float d, float p, float q) +{ + return LinearInterpolate( LinearInterpolate(a, b, p), LinearInterpolate(c, d, p), q ); +} + +// trilinear interpolation +// +// c p 1-p d +// ------------------+---------- +// /| | /| +// / | / | +// / | |1-q / | +// / | / | +// / | | / | +// g ------------------+---------- h | +// | | | | | | +// | | + | | +// | | | r/| | | +// | | / |q | | +// | | | x | | | +// | a - - - - - - | / - + - |- - -| b +// | / |/1-r | / +// | + | / +// | / | | / +// | | | / +// |/ | | / +// ------------------+---------- +// e f +// +// x = TrilinearInterpolate(a, b, c, d, e, f, g, h, p, q, r) +// = LinearInterpolate(BilinearInterpolate(a, b, c, d, p, q), BilinearInterpolate(e, f, g, h, p, q), r) +float TrilinearInterpolate(float a, float b, float c, float d, float e, float f, float g, float h, float p, float q, float r) +{ + return LinearInterpolate(BilinearInterpolate(a, b, c, d, p, q), BilinearInterpolate(e, f, g, h, p, q), r); +} + +// Get signed distance at the position in world space +float GetSignedDistance(float3 positionInWorld) +{ + int3 gridCoords = GetSdfCoordinates(positionInWorld); + + if( !(0 <= gridCoords.x && gridCoords.x < g_NumCellsX - 2) + || !(0 <= gridCoords.y && gridCoords.y < g_NumCellsY - 2) + || !(0 <= gridCoords.z && gridCoords.z < g_NumCellsZ - 2) ) + return INITIAL_DISTANCE; + + int sdfIndices[8]; + { + int index = GetSdfCellIndex(gridCoords); + for(int i = 0; i < 8; ++i) sdfIndices[i] = index; + + int x = 1; + int y = g_NumCellsX; + int z = g_NumCellsY * g_NumCellsX; + + sdfIndices[1] += x; + sdfIndices[2] += y; + sdfIndices[3] += y + x; + + sdfIndices[4] += z; + sdfIndices[5] += z + x; + sdfIndices[6] += z + y; + sdfIndices[7] += z + y + x; + } + + float distances[8]; + + for(int j = 0; j < 8; ++j) + { + int sdfCellIndex = sdfIndices[j]; + float dist = asfloat(g_SignedDistanceField[sdfCellIndex]); + + if(dist == INITIAL_DISTANCE) + return INITIAL_DISTANCE; + + distances[j] = dist; + } + + float distance_000 = distances[0]; // X, Y, Z + float distance_100 = distances[1]; //+X, Y, Z + float distance_010 = distances[2]; // X, +Y, Z + float distance_110 = distances[3]; //+X, +Y, Z + float distance_001 = distances[4]; // X, Y, +Z + float distance_101 = distances[5]; //+X, Y, +Z + float distance_011 = distances[6]; // X, +Y, +Z + float distance_111 = distances[7]; //+X, +Y, +Z + + float3 cellPosition = GetSdfCellPosition(gridCoords); + float3 interp = (positionInWorld - cellPosition) / g_CellSize; + return TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y, interp.z); +} + +//SDF-Hair collision using forward differences only +// One thread per one hair vertex +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CollideHairVerticesWithSdf_forward(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int hairVertexGlobalIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + if(hairVertexGlobalIndex >= g_NumTotalHairVertices) + return; + + int hairVertexLocalIndex = hairVertexGlobalIndex % g_NumHairVerticesPerStrand; + + // We don't run collision check on the first two vertices in the strand. They are fixed on the skin mesh. + if (hairVertexLocalIndex == 0 || hairVertexLocalIndex == 1) + return; + + float4 hairVertex = g_HairVertices[hairVertexGlobalIndex]; + float4 vertexInSdfLocalSpace = hairVertex; + + float distance = GetSignedDistance(vertexInSdfLocalSpace.xyz); + + // early exit if the distance is larger than collision margin + if(distance > g_CollisionMargin) + return; + + // small displacement. + float h = 0.1f * g_CellSize; + + float3 sdfGradient; + { + //Compute gradient using forward difference + float3 offset[3]; + offset[0] = float3(1, 0, 0); + offset[1] = float3(0, 1, 0); + offset[2] = float3(0, 0, 1); + + float3 neighborCellPositions[3]; + + for(int i = 0; i < 3; ++i) + neighborCellPositions[i] = vertexInSdfLocalSpace.xyz + offset[i] * h; + + //Use trilinear interpolation to get distances + float neighborCellDistances[3]; + + for(int j = 0; j < 3; ++j) + neighborCellDistances[j] = GetSignedDistance(neighborCellPositions[j]); + + float3 forwardDistances; + forwardDistances.x = neighborCellDistances[0]; + forwardDistances.y = neighborCellDistances[1]; + forwardDistances.z = neighborCellDistances[2]; + + sdfGradient = ( forwardDistances - float3(distance, distance, distance) ) / h; + } + + //Project hair vertex out of SDF + float3 normal = normalize(sdfGradient); + + if(distance < g_CollisionMargin) + { + float3 projectedVertex = hairVertex.xyz + normal * (g_CollisionMargin - distance); + g_HairVertices[hairVertexGlobalIndex].xyz = projectedVertex; + g_PrevHairVertices[hairVertexGlobalIndex].xyz = projectedVertex; + } +} + +//Faster SDF-Hair collision mixing forward and backward differences +// One thread per one hair vertex +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CollideHairVerticesWithSdf(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + //When using forward differences to compute the SDF gradient, + //we need to use trilinear interpolation to look up 4 points in the SDF. + //In the worst case, this involves reading the distances in 4 different cubes (reading 32 floats from the SDF). + //In the ideal case, only 1 cube needs to be read (reading 8 floats from the SDF). + //The number of distance lookups varies depending on whether the 4 points cross cell boundaries. + // + //If we assume that (h < g_CellSize), where h is the distance between the points used for finite difference, + //we can mix forwards and backwards differences to ensure that the points never cross cell boundaries (always read 8 floats). + //By default we use forward differences, and switch to backwards differences for each dimension that crosses a cell boundary. + // + //This is much faster than using forward differences only, but it could also be less stable. + //In particular, it has the effect of making the gradient less accurate. The amount of inaccuracy is + //proportional to the size of h, so it is recommended keep h as low as possible. + + int hairVertexIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + uint numHairVertices, stride; + g_HairVertices.GetDimensions(numHairVertices, stride); + + if(hairVertexIndex >= (int)numHairVertices) + return; + + float4 hairVertex = g_HairVertices[hairVertexIndex]; + float4 vertexInSdfLocalSpace = hairVertex; + + int3 gridCoords = GetSdfCoordinates(vertexInSdfLocalSpace.xyz); + + if( !(0 <= gridCoords.x && gridCoords.x < g_NumCellsX - 2) + || !(0 <= gridCoords.y && gridCoords.y < g_NumCellsY - 2) + || !(0 <= gridCoords.z && gridCoords.z < g_NumCellsZ - 2) ) + return; + + // + float distances[8]; + { + int sdfIndices[8]; + { + int index = GetSdfCellIndex(gridCoords); + for(int i = 0; i < 8; ++i) sdfIndices[i] = index; + + int x = 1; + int y = g_NumCellsX; + int z = g_NumCellsY * g_NumCellsX; + + sdfIndices[1] += x; + sdfIndices[2] += y; + sdfIndices[3] += y + x; + + sdfIndices[4] += z; + sdfIndices[5] += z + x; + sdfIndices[6] += z + y; + sdfIndices[7] += z + y + x; + } + + for(int j = 0; j < 8; ++j) + { + int sdfCellIndex = sdfIndices[j]; + float dist = asfloat(g_SignedDistanceField[sdfCellIndex]); + if(dist == INITIAL_DISTANCE) return; + + distances[j] = dist; + } + } + + float distance_000 = distances[0]; // X, Y, Z + float distance_100 = distances[1]; //+X, Y, Z + float distance_010 = distances[2]; // X, +Y, Z + float distance_110 = distances[3]; //+X, +Y, Z + float distance_001 = distances[4]; // X, Y, +Z + float distance_101 = distances[5]; //+X, Y, +Z + float distance_011 = distances[6]; // X, +Y, +Z + float distance_111 = distances[7]; //+X, +Y, +Z + + float3 cellPosition = GetSdfCellPosition(gridCoords); + float3 interp = (vertexInSdfLocalSpace.xyz - cellPosition) / g_CellSize; + float distanceAtVertex = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y, interp.z); + + //Compute gradient with finite differences + float3 sdfGradient; + { + float h = 0.1f * g_CellSize; + float3 direction; + direction.x = (interp.x + h < 1.0f) ? 1.0f : -1.0f; + direction.y = (interp.y + h < 1.0f) ? 1.0f : -1.0f; + direction.z = (interp.z + h < 1.0f) ? 1.0f : -1.0f; + + float3 neighborDistances; + neighborDistances.x = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x + h * direction.x, interp.y, interp.z); + neighborDistances.y = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y + h * direction.y, interp.z); + neighborDistances.z = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y, interp.z + h * direction.z); + + sdfGradient = ( direction * ( neighborDistances - float3(distanceAtVertex, distanceAtVertex, distanceAtVertex) ) ) / h; + } + + //Project hair vertex out of SDF + float3 normal = normalize(sdfGradient); + + if(distanceAtVertex < g_CollisionMargin) + { + float3 projectedVertex = hairVertex.xyz + normal * (g_CollisionMargin - distanceAtVertex); + g_HairVertices[hairVertexIndex].xyz = projectedVertex; + g_PrevHairVertices[hairVertexIndex].xyz = projectedVertex; + } +} + +// EndHLSL diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShadow.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShadow.hlsl new file mode 100644 index 0000000000..650db2ae72 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShadow.hlsl @@ -0,0 +1,59 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to shadowing for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "TressFXRendering.hlsl" +#include "TressFXStrands.hlsl" + +[[vk::binding(0, 2)]] cbuffer shadowViewConstants : register(b0, space2) +{ + float4x4 g_mVP; + float4 g_vEye; + float4 g_vViewport; + float4x4 cInvViewProjMatrix; +}; + + +// Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; +}; + +////////////////////////////////////////////////////////////// +// Hair Render VS (for depth alpha and color fill passes) +PS_INPUT_HAIR HairShadowVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXShadowVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + return Output; +} + +[earlydepthstencil] +void HairShadowPS(PS_INPUT_HAIR input) : SV_Target +{ +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShortCut.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShortCut.hlsl new file mode 100644 index 0000000000..9a3f30b0c0 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShortCut.hlsl @@ -0,0 +1,281 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to TressFX Shortcut method +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "TressFXRendering.hlsl" +#include "TressFXStrands.hlsl" + +[[vk::binding(0, 2)]] cbuffer viewConstants : register(b0, space2) +{ + float4x4 g_mVP; + float4 g_vEye; + float4 g_vViewport; + float4x4 cInvViewProjMatrix; +}; + +// Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; + float4 Tangent : Tangent; + float4 p0p1 : TEXCOORD0; + float4 StrandColor : TEXCOORD1; +}; + +////////////////////////////////////////////////////////////// +// Hair Render VS (for depth alpha and color fill passes) +PS_INPUT_HAIR RenderHairDepthAlphaVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = float4(1, 1, 1, tressfxVert.Tangent.w); // Only need to preserve the Strand U coordinate as the tangent is not used in this pass. Operations should be compiled out + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = float4(1, 1, 1, tressfxVert.StrandColor.a); // Don't use the color as it's not needed. This way we can compile out the computation of strand color (Just need the Strand V coordinate) + + return Output; +} + +PS_INPUT_HAIR RenderHairColorVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = tressfxVert.Tangent; + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = tressfxVert.StrandColor; + + return Output; +} + +[[vk::binding(0, 3)]] RWTexture2DArray RWFragmentDepthsTexture : register(u0, space3); + +////////////////////////////////////////////////////////////// +// Depth Alpha PS +// First pass of ShortCut. +// Geometry pass that stores the 3 front fragment depths, and accumulates product of 1-alpha values in the render target. +[earlydepthstencil] +float DepthsAlphaPS(PS_INPUT_HAIR input) : SV_Target +{ + float3 vNDC = ScreenPosToNDC(input.Position.xyz, g_vViewport); + float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, g_vViewport.zw); + float alpha = coverage * MatBaseColor.a; + + if (alpha < SHORTCUT_MIN_ALPHA) + return 1.0; + + int2 vScreenAddress = int2(input.Position.xy); + + uint uDepth = asuint(input.Position.z); + uint uDepth0Prev, uDepth1Prev; + + // Min of depth 0 and input depth + // Original value is uDepth0Prev + InterlockedMin(RWFragmentDepthsTexture[uint3(vScreenAddress, 0)], uDepth, uDepth0Prev); + + // Min of depth 1 and greater of the last compare + // If fragment opaque, always use input depth (don't need greater depths) + uDepth = (alpha > 0.98) ? uDepth : max(uDepth, uDepth0Prev); + + InterlockedMin(RWFragmentDepthsTexture[uint3(vScreenAddress, 1)], uDepth, uDepth1Prev); + + uint uDepth2Prev; + + // Min of depth 2 and greater of the last compare + // If fragment opaque, always use input depth (don't need greater depths) + uDepth = (alpha > 0.98) ? uDepth : max(uDepth, uDepth1Prev); + + InterlockedMin(RWFragmentDepthsTexture[uint3(vScreenAddress, 2)], uDepth, uDepth2Prev); + + return 1.0 - alpha; +} + +////////////////////////////////////////////////////////////// +// Fullscreen Quad VS +struct VS_OUTPUT_SCREENQUAD +{ + float4 vPosition : SV_POSITION; + float2 vTex : TEXCOORD; +}; + +static const float2 Positions[] = { {-1, -1,}, {1, -1}, {-1, 1}, {1, 1} }; + +VS_OUTPUT_SCREENQUAD FullScreenVS(uint vertexID : SV_VertexID) +{ + VS_OUTPUT_SCREENQUAD output; + + // Output vert positions + output.vPosition = float4(Positions[vertexID].xy, 0, 1); + + // And tex-coords +#ifdef AMD_TRESSFX_DX12 + output.vTex = float2(Positions[vertexID].x, Positions[vertexID].y) * 0.5 + 0.5; +#else + output.vTex = float2(Positions[vertexID].x, -Positions[vertexID].y) * 0.5 + 0.5; +#endif // AMD_TRESSFX_DX12 + + return output; +} + +////////////////////////////////////////////////////////////// +// Resolve Depth PS +[[vk::binding(0, 0)]] Texture2DArray FragmentDepthsTexture : register(t0, space0); + +// Second pass of ShortCut. +// Full-screen pass that writes the farthest of the near depths for depth culling. +float ResolveDepthPS(VS_OUTPUT_SCREENQUAD input) : SV_Depth +{ + // Blend the layers of fragments from back to front + int2 vScreenAddress = int2(input.vPosition.xy); + + // Write farthest depth value for culling in the next pass. + // It may be the initial value of 1.0 if there were not enough fragments to write all depths, but then culling not important. + uint uDepth = FragmentDepthsTexture[uint3(vScreenAddress, 2)]; + + return asfloat(uDepth); +} + +////////////////////////////////////////////////////////////// +// HairColorPS + +#include "TressFXLighting.hlsl" + +// If you change this, you MUST also change TressFXShadeParams in TressFXConstantBuffers.h and ShadeParams in TressFXPPLL.hlsl +struct ShadeParams +{ + // General information + float FiberRadius; + // For deep approximated shadow lookup + float ShadowAlpha; + float FiberSpacing; + // For lighting/shading + float HairEx2; + float4 MatKValue; // KAmbient, KDiffuse, KSpec1, Exp1 + float HairKs2; + float fPadding0; + float fPadding1; + float fPadding2; +}; + +[[vk::binding(0, 5)]] cbuffer TressFXShadeParams : register(b0, space5) +{ + ShadeParams HairParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; +}; + +float3 TressFXShading(float3 WorldPos, float3 vNDC, float3 vTangentCoverage, float2 uv, float2 strandUV, float3 baseColor, PS_INPUT_HAIR input) +{ + float3 vTangent = vTangentCoverage.xyz; + float3 vPositionWS = WorldPos.xyz; + float3 vViewDirWS = g_vEye - vPositionWS; + + HairShadeParams params; + params.Color = baseColor; + params.HairShadowAlpha = HairParams[RenderParamsIndex].ShadowAlpha; + params.FiberRadius = HairParams[RenderParamsIndex].FiberRadius; + params.FiberSpacing = HairParams[RenderParamsIndex].FiberSpacing; + + params.Ka = HairParams[RenderParamsIndex].MatKValue.x; + params.Kd = HairParams[RenderParamsIndex].MatKValue.y; + params.Ks1 = HairParams[RenderParamsIndex].MatKValue.z; + params.Ex1 = HairParams[RenderParamsIndex].MatKValue.w; + params.Ks2 = HairParams[RenderParamsIndex].HairKs2; + params.Ex2 = HairParams[RenderParamsIndex].HairEx2; + + return AccumulateHairLight(vTangent, vPositionWS, vViewDirWS, params, vNDC); +} + +// Third pass of ShortCut. +// Geometry pass that shades pixels passing early depth test. Limited to near fragments due to previous depth write pass. +// Colors are accumulated in render target for a weighted average in final pass. +[earlydepthstencil] +float4 HairColorPS(PS_INPUT_HAIR input) : SV_Target +{ + // Strand Color read in is either the BaseMatColor, or BaseMatColor modulated with a color read from texture on vertex shader for base color; + //along with modulation by the tip color + float4 strandColor = float4(input.StrandColor.rgb, MatBaseColor.a); + + // Grab the uv in case we need it + float2 uv = float2(input.Tangent.w, input.StrandColor.w); + + // Apply StrandUVTiling + // strandUV.y = (uv.y * StrandUVTilingFactor) % 1.f + float2 strandUV = float2(uv.x, (uv.y * StrandUVTilingFactor) - floor(uv.y * StrandUVTilingFactor)); + + // If we are supporting strand UV texturing, further blend in the texture color/alpha + // Do this while computing NDC and coverage to hide latency from texture lookup + if (EnableStrandUV) + strandColor.rgb *= StrandAlbedoTexture.Sample(LinearWrapSampler, strandUV).rgb; + + float3 vNDC = ScreenPosToNDC(input.Position.xyz, g_vViewport); + float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, g_vViewport.zw - g_vViewport.xy); + float3 vPositionWS = NDCToWorld(vNDC, cInvViewProjMatrix); + float alpha = coverage; + + // Update the alpha to have proper value (accounting for coverage, base alpha, and strand alpha) + alpha *= strandColor.w; + +#ifndef TRESSFX_DEBUG_UAV + + // Early out + if (alpha < SHORTCUT_MIN_ALPHA) + return float4(0, 0, 0, 0); + +#endif // TRESSFX_DEBUG_UAV + + float3 color = TressFXShading(vPositionWS, vNDC, input.Tangent.xyz, uv, strandUV, strandColor.rgb, input); + return float4(color * alpha, alpha); +} + +[[vk::binding(0, 0)]] Texture2D HaiColorTexture : register(t0, space0); +[[vk::binding(1, 0)]] Texture2D AccumInvAlpha : register(t1, space0); + +// Fourth pass of ShortCut. +// Full-screen pass that finalizes the weighted average, and blends using the accumulated 1-alpha product. +[earlydepthstencil] +float4 ResolveHairPS(VS_OUTPUT_SCREENQUAD input) : SV_Target +{ + int2 vScreenAddress = int2(input.vPosition.xy); + + float fInvAlpha = AccumInvAlpha[vScreenAddress]; + float fAlpha = 1.0 - fInvAlpha; + + if (fAlpha < SHORTCUT_MIN_ALPHA) + return float4(0, 0, 0, 1); + + float4 fcolor; + float colorSumX = HaiColorTexture[vScreenAddress].x; + float colorSumY = HaiColorTexture[vScreenAddress].y; + float colorSumZ = HaiColorTexture[vScreenAddress].z; + float colorSumW = HaiColorTexture[vScreenAddress].w; + fcolor.x = colorSumX / colorSumW; + fcolor.y = colorSumY / colorSumW; + fcolor.z = colorSumZ / colorSumW; + fcolor.xyz *= fAlpha; + fcolor.w = fInvAlpha; + return fcolor; +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSimulation.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSimulation.hlsl new file mode 100644 index 0000000000..b45a20d622 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSimulation.hlsl @@ -0,0 +1,1199 @@ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + +// StartHLSL TressFXSimulationCS + +//-------------------------------------------------------------------------------------- +// File: TresFXSimulation.hlsl +// +// Physics simulation of hair using compute shaders +//-------------------------------------------------------------------------------------- + +#define USE_MESH_BASED_HAIR_TRANSFORM 0 + +// Whether bones are specified by dual quaternion. +// This option is not currently functional. +#define TRESSFX_DQ 0 + +// Toggle capsule collisions +#define TRESSFX_COLLISION_CAPSULES 0 + +//constants that change frame to frame +[[vk::binding(13, 0)]] cbuffer tressfxSimParameters : register( b13, space0 ) +{ + float4 g_Wind; + float4 g_Wind1; + float4 g_Wind2; + float4 g_Wind3; + + float4 g_Shape; // damping, local stiffness, global stiffness, global range. + float4 g_GravTimeTip; // gravity maginitude (assumed to be in negative y direction.) + int4 g_SimInts; // Length iterations, local iterations, collision flag. + int4 g_Counts; // num strands per thread group, num follow hairs per guid hair, num verts per strand. + float4 g_VSP; // VSP parmeters + + float g_ResetPositions; + float g_ClampPositionDelta; + float g_pad1; + float g_pad2; + +#if TRESSFX_DQ + float4 g_BoneSkinningDQ[AMD_TRESSFX_MAX_NUM_BONES * 2]; +#else + row_major float4x4 g_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +#endif + +#if TRESSFX_COLLISION_CAPSULES + float4 g_centerAndRadius0[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + float4 g_centerAndRadius1[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + int4 g_numCollisionCapsules; +#endif + +} + +#define g_NumOfStrandsPerThreadGroup g_Counts.x +#define g_NumFollowHairsPerGuideHair g_Counts.y +#define g_NumVerticesPerStrand g_Counts.z + +#define g_NumLocalShapeMatchingIterations g_SimInts.y + +#define g_GravityMagnitude g_GravTimeTip.x +#define g_TimeStep g_GravTimeTip.y +#define g_TipSeparationFactor g_GravTimeTip.z + + +// We no longer support groups (indirection). +int GetStrandType(int globalThreadIndex) +{ + return 0; +} + +float GetDamping(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.x; +} + +float GetLocalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.y; +} + +float GetGlobalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.z; +} + +float GetGlobalRange(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.w; +} + +float GetVelocityShockPropogation() +{ + return g_VSP.x; +} + +float GetVSPAccelThreshold() +{ + return g_VSP.y; +} + +int GetLocalConstraintIterations() +{ + return (int)g_SimInts.y; +} + +int GetLengthConstraintIterations() +{ + return (int)g_SimInts.x; +} + +struct Transforms +{ + row_major float4x4 tfm; + float4 quat; +}; + +struct HairToTriangleMapping +{ + uint meshIndex; // index to the mesh + uint triangleIndex; // index to triangle in the skinned mesh that contains this hair + float3 barycentricCoord; // barycentric coordinate of the hair within the triangle + uint reserved; // for future use +}; + +struct BoneSkinningData +{ + float4 boneIndex; // x, y, z and w component are four bone indices per strand + float4 boneWeight; // x, y, z and w component are four bone weights per strand +}; + +struct StrandLevelData +{ + float4 skinningQuat; + float4 vspQuat; + float4 vspTranslation; +}; + +// UAVs +[[vk::binding(0, 1)]] RWStructuredBuffer g_HairVertexPositions : register(u0, space1); +[[vk::binding(1, 1)]] RWStructuredBuffer g_HairVertexPositionsPrev : register(u1, space1); +[[vk::binding(2, 1)]] RWStructuredBuffer g_HairVertexPositionsPrevPrev : register(u2, space1); +[[vk::binding(3, 1)]] RWStructuredBuffer g_HairVertexTangents : register(u3, space1); +[[vk::binding(4, 1)]] RWStructuredBuffer g_StrandLevelData : register(u4, space1); + +#if USE_MESH_BASED_HAIR_TRANSFORM == 1 +RWStructuredBuffer g_Transforms; +#endif + +// SRVs +[[vk::binding(4, 0)]] StructuredBuffer g_InitialHairPositions : register(t4, space0); +[[vk::binding(5, 0)]] StructuredBuffer g_HairRestLengthSRV : register(t5, space0); +[[vk::binding(6, 0)]] StructuredBuffer g_HairStrandType : register(t6, space0); +[[vk::binding(7, 0)]] StructuredBuffer g_FollowHairRootOffset : register(t7, space0); +[[vk::binding(10, 0)]] StructuredBuffer g_MeshVertices : register(t10, space0); +[[vk::binding(11, 0)]] StructuredBuffer g_TransformedVerts : register(t11, space0); +[[vk::binding(12, 0)]] StructuredBuffer g_BoneSkinningData : register(t12, space0); + +// If you change the value below, you must change it in TressFXAsset.h as well. +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +groupshared float4 sharedPos[THREAD_GROUP_SIZE]; +groupshared float4 sharedTangent[THREAD_GROUP_SIZE]; +groupshared float sharedLength[THREAD_GROUP_SIZE]; + +//-------------------------------------------------------------------------------------- +// +// Helper Functions for the main simulation shaders +// +//-------------------------------------------------------------------------------------- +bool IsMovable(float4 particle) +{ + if ( particle.w > 0 ) + return true; + return false; +} + +float2 ConstraintMultiplier(float4 particle0, float4 particle1) +{ + if (IsMovable(particle0)) + { + if (IsMovable(particle1)) + return float2(0.5, 0.5); + else + return float2(1, 0); + } + else + { + if (IsMovable(particle1)) + return float2(0, 1); + else + return float2(0, 0); + } +} + +float4 MakeQuaternion(float angle_radian, float3 axis) +{ + // create quaternion using angle and rotation axis + float4 quaternion; + float halfAngle = 0.5f * angle_radian; + float sinHalf = sin(halfAngle); + + quaternion.w = cos(halfAngle); + quaternion.xyz = sinHalf * axis.xyz; + + return quaternion; +} + +// Makes a quaternion from a 4x4 column major rigid transform matrix. Rigid transform means that rotational 3x3 sub matrix is orthonormal. +// Note that this function does not check the orthonormality. +float4 MakeQuaternion(column_major float4x4 m) +{ + float4 q; + float trace = m[0][0] + m[1][1] + m[2][2]; + + if (trace > 0.0f) + { + float r = sqrt(trace + 1.0f); + q.w = 0.5 * r; + r = 0.5 / r; + q.x = (m[1][2] - m[2][1])*r; + q.y = (m[2][0] - m[0][2])*r; + q.z = (m[0][1] - m[1][0])*r; + } + else + { + int i = 0, j = 1, k = 2; + + if (m[1][1] > m[0][0]) + { + i = 1; j = 2; k = 0; + } + if (m[2][2] > m[i][i]) + { + i = 2; j = 0; k = 1; + } + + float r = sqrt(m[i][i] - m[j][j] - m[k][k] + 1.0f); + + float qq[4]; + + qq[i] = 0.5f * r; + r = 0.5f / r; + q.w = (m[j][k] - m[k][j])*r; + qq[j] = (m[j][i] + m[i][j])*r; + qq[k] = (m[k][i] + m[i][k])*r; + + q.x = qq[0]; q.y = qq[1]; q.z = qq[2]; + } + + return q; +} + +float4 InverseQuaternion(float4 q) +{ + float lengthSqr = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if ( lengthSqr < 0.001 ) + return float4(0, 0, 0, 1.0f); + + q.x = -q.x / lengthSqr; + q.y = -q.y / lengthSqr; + q.z = -q.z / lengthSqr; + q.w = q.w / lengthSqr; + + return q; +} + +float3 MultQuaternionAndVector(float4 q, float3 v) +{ + float3 uv, uuv; + float3 qvec = float3(q.x, q.y, q.z); + uv = cross(qvec, v); + uuv = cross(qvec, uv); + uv *= (2.0f * q.w); + uuv *= 2.0f; + + return v + uv + uuv; +} + +float4 MultQuaternionAndQuaternion(float4 qA, float4 qB) +{ + float4 q; + + q.w = qA.w * qB.w - qA.x * qB.x - qA.y * qB.y - qA.z * qB.z; + q.x = qA.w * qB.x + qA.x * qB.w + qA.y * qB.z - qA.z * qB.y; + q.y = qA.w * qB.y + qA.y * qB.w + qA.z * qB.x - qA.x * qB.z; + q.z = qA.w * qB.z + qA.z * qB.w + qA.x * qB.y - qA.y * qB.x; + + return q; +} + +float4 NormalizeQuaternion(float4 q) +{ + float4 qq = q; + float n = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if (n < 1e-10f) + { + qq.w = 1; + return qq; + } + + qq *= 1.0f / sqrt(n); + return qq; +} + +// Compute a quaternion which rotates u to v. u and v must be unit vector. +float4 QuatFromTwoUnitVectors(float3 u, float3 v) +{ + float r = 1.f + dot(u, v); + float3 n; + + // if u and v are parallel + if (r < 1e-7) + { + r = 0.0f; + n = abs(u.x) > abs(u.z) ? float3(-u.y, u.x, 0.f) : float3(0.f, -u.z, u.y); + } + else + { + n = cross(u, v); + } + + float4 q = float4(n.x, n.y, n.z, r); + return NormalizeQuaternion(q); +} + +// Make the inpute 4x4 matrix be identity +float4x4 MakeIdentity() +{ + float4x4 m; + m._m00 = 1; m._m01 = 0; m._m02 = 0; m._m03 = 0; + m._m10 = 0; m._m11 = 1; m._m12 = 0; m._m13 = 0; + m._m20 = 0; m._m21 = 0; m._m22 = 1; m._m23 = 0; + m._m30 = 0; m._m31 = 0; m._m32 = 0; m._m33 = 1; + + return m; +} + +void ApplyDistanceConstraint(inout float4 pos0, inout float4 pos1, float targetDistance, float stiffness = 1.0) +{ + float3 delta = pos1.xyz - pos0.xyz; + float distance = max(length(delta), 1e-7); + float stretching = 1 - targetDistance / distance; + delta = stretching * delta; + float2 multiplier = ConstraintMultiplier(pos0, pos1); + + pos0.xyz += multiplier[0] * delta * stiffness; + pos1.xyz -= multiplier[1] * delta * stiffness; +} + +void CalcIndicesInVertexLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInVertexLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInStrandLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +void CalcIndicesInStrandLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +//-------------------------------------------------------------------------------------- +// +// Integrate +// +// Uses Verlet integration to calculate the new position for the current time step +// +//-------------------------------------------------------------------------------------- +float3 Integrate(float3 curPosition, float3 oldPosition, float3 initialPos, float dampingCoeff = 1.0f) +{ + float3 force = g_GravityMagnitude * float3(0, -1.0f, 0); + // float decay = exp(-g_TimeStep/decayTime) + float decay = exp(-dampingCoeff * g_TimeStep * 60.0f); + return curPosition + decay * (curPosition - oldPosition) + force * g_TimeStep * g_TimeStep; +} + + +struct CollisionCapsule +{ + float4 p0; // xyz = position of capsule 0, w = radius 0 + float4 p1; // xyz = position of capsule 1, w = radius 1 +}; + +//-------------------------------------------------------------------------------------- +// +// CapsuleCollision +// +// Moves the position based on collision with capsule +// +//-------------------------------------------------------------------------------------- +bool CapsuleCollision(float4 curPosition, float4 oldPosition, inout float3 newPosition, CollisionCapsule cc, float friction = 0.4f) +{ + const float radius0 = cc.p0.w; + const float radius1 = cc.p1.w; + newPosition = curPosition.xyz; + + if ( !IsMovable(curPosition) ) + return false; + + float3 segment = cc.p1.xyz - cc.p0.xyz; + float3 delta0 = curPosition.xyz - cc.p0.xyz; + float3 delta1 = cc.p1.xyz - curPosition.xyz; + + float dist0 = dot(delta0, segment); + float dist1 = dot(delta1, segment); + + // colliding with sphere 1 + if (dist0 < 0.f ) + { + if ( dot(delta0, delta0) < radius0 * radius0) + { + float3 n = normalize(delta0); + newPosition = radius0 * n + cc.p0.xyz; + return true; + } + + return false; + } + + // colliding with sphere 2 + if (dist1 < 0.f ) + { + if ( dot(delta1, delta1) < radius1 * radius1) + { + float3 n = normalize(-delta1); + newPosition = radius1 * n + cc.p1.xyz; + return true; + } + + return false; + } + + // colliding with middle cylinder + float3 x = (dist0 * cc.p1.xyz + dist1 * cc.p0.xyz) / (dist0 + dist1); + float3 delta = curPosition.xyz - x; + + float radius_at_x = (dist0 * radius1 + dist1 * radius0) / (dist0 + dist1); + + if ( dot(delta, delta) < radius_at_x * radius_at_x) + { + float3 n = normalize(delta); + float3 vec = curPosition.xyz - oldPosition.xyz; + float3 segN = normalize(segment); + float3 vecTangent = dot(vec, segN) * segN; + float3 vecNormal = vec - vecTangent; + newPosition = oldPosition.xyz + friction * vecTangent + (vecNormal + radius_at_x * n - delta); + return true; + } + + return false; +} + +float3 ApplyVertexBoneSkinning(float3 vertexPos, BoneSkinningData skinningData, inout float4 bone_quat) +{ + float3 newVertexPos; + +#if TRESSFX_DQ + { + // weighted rotation part of dual quaternion + float4 nq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2] * skinningData.boneWeight.x + g_BoneSkinningDQ[skinningData.boneIndex.y * 2] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2] * skinningData.boneWeight.z + g_BoneSkinningDQ[skinningData.boneIndex.w * 2] * skinningData.boneWeight.w; + + // weighted tranlation part of dual quaternion + float4 dq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2 + 1] * skinningData.boneWeight.x + g_BoneSkinningDQ[skinningData.boneIndex.y * 2 + 1] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2 + 1] * skinningData.boneWeight.z + g_BoneSkinningDQ[skinningData.boneIndex.w * 2 + 1] * skinningData.boneWeight.w; + + float len = rsqrt(dot(nq, nq)); + nq *= len; + dq *= len; + + bone_quat = nq; + + //convert translation part of dual quaternion to translation vector: + float3 translation = (nq.w*dq.xyz - dq.w*nq.xyz + cross(nq.xyz, dq.xyz)) * 2; + + newVertexPos = MultQuaternionAndVector(nq, vertexPos) + translation.xyz; + } +#else + { + // Interpolate world space bone matrices using weights. + row_major float4x4 bone_matrix = g_BoneSkinningMatrix[skinningData.boneIndex[0]] * skinningData.boneWeight[0]; + float weight_sum = skinningData.boneWeight[0]; + + for (int i = 1; i < 4; i++) + { + if (skinningData.boneWeight[i] > 0) + { + bone_matrix += g_BoneSkinningMatrix[skinningData.boneIndex[i]] * skinningData.boneWeight[i]; + weight_sum += skinningData.boneWeight[i]; + } + } + + bone_matrix /= weight_sum; + bone_quat = MakeQuaternion(bone_matrix); + + newVertexPos = mul(float4(vertexPos, 1), bone_matrix).xyz; + } +#endif + + return newVertexPos; +} + +//-------------------------------------------------------------------------------------- +// +// UpdateFinalVertexPositions +// +// Updates the hair vertex positions based on the physics simulation +// +//-------------------------------------------------------------------------------------- +void UpdateFinalVertexPositions(float4 oldPosition, float4 newPosition, int globalVertexIndex, int localVertexIndex, int numVerticesInTheStrand) +{ + g_HairVertexPositionsPrevPrev[globalVertexIndex] = g_HairVertexPositionsPrev[globalVertexIndex]; + g_HairVertexPositionsPrev[globalVertexIndex] = oldPosition; + g_HairVertexPositions[globalVertexIndex] = newPosition; +} + + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void TestShader(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + // Copy data into shared memory + g_HairVertexPositions[0] = g_InitialHairPositions[0]; // rest position + +} + +//------------------------------------------------------------------------------ +// Adi: this method will update the hair vertices according to the bone matrices +// and will not apply any physics interaction and response. +// Use for testing of a single pass. +//------------------------------------------------------------------------------ +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void SkinHairVerticesTest(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // Copy data into shared memory + float4 initialPos = g_InitialHairPositions[globalVertexIndex]; // rest position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + float4 currentPos = float4(ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat), 1.0); // Apply bone skinning to initial position + +// UpdateFinalVertexPositions( g_HairVertexPositions[globalVertexIndex], currentPos, globalVertexIndex, localVertexIndex, numVerticesInTheStrand); + g_HairVertexPositions[globalVertexIndex] = currentPos; +// UpdateFinalVertexPositions( currentPos, currentPos, globalVertexIndex, localVertexIndex, numVerticesInTheStrand); + + GroupMemoryBarrierWithGroupSync(); + + //------------------- + // Compute tangent + //------------------- + // If this is the last vertex in the strand, we can't get tangent from subtracting from the next vertex, need to use last vertex to current + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedTangent[indexForSharedMem] = g_HairVertexTangents[globalVertexIndex]; + uint numOfStrandsPerThreadGroup = g_NumOfStrandsPerThreadGroup; + uint indexForTangent = (localVertexIndex == numVerticesInTheStrand - 1) ? indexForSharedMem - numOfStrandsPerThreadGroup : indexForSharedMem; + float3 tangent = sharedPos[indexForTangent + numOfStrandsPerThreadGroup].xyz - sharedPos[indexForTangent].xyz; + g_HairVertexTangents[globalVertexIndex].xyz = normalize(tangent); + + //------------------- + // Compute follow hair + //------------------- + // Adi - the following barrier might not be required + // GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + int globalFollowStrandIndex = globalStrandIndex + i + 1; + float factor = g_TipSeparationFactor*((float)localVertexIndex / (float)numVerticesInTheStrand) + 1.0f; + float3 followPos = sharedPos[indexForSharedMem].xyz + factor*g_FollowHairRootOffset[globalFollowStrandIndex].xyz; + g_HairVertexPositions[globalFollowVertexIndex].xyz = followPos; + g_HairVertexTangents[globalFollowVertexIndex] = sharedTangent[indexForSharedMem]; + } + + return; +} + + +//-------------------------------------------------------------------------------------- +// +// IntegrationAndGlobalShapeConstraints +// +// Compute shader to simulate the gravitational force with integration and to maintain the +// global shape constraints. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void IntegrationAndGlobalShapeConstraints(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // Copy data into shared memory + float4 initialPos = g_InitialHairPositions[globalVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + + // position when this step starts. In other words, a position from the last step. + float4 currentPos = sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + + GroupMemoryBarrierWithGroupSync(); + + // Integrate + float dampingCoeff = GetDamping(strandType); + float4 oldPos; + oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + + // reset if we got teleported + if (g_ResetPositions != 0.0f) + { + currentPos = initialPos; + oldPos = initialPos; + } + + if ( IsMovable(currentPos) ) + sharedPos[indexForSharedMem].xyz = Integrate(currentPos.xyz, oldPos.xyz, initialPos.xyz, dampingCoeff); + else + sharedPos[indexForSharedMem] = initialPos; + + // Global Shape Constraints + float stiffnessForGlobalShapeMatching = GetGlobalStiffness(strandType); + float globalShapeMatchingEffectiveRange = GetGlobalRange(strandType); + + if ( stiffnessForGlobalShapeMatching > 0 && globalShapeMatchingEffectiveRange ) + { + if ( IsMovable(sharedPos[indexForSharedMem]) ) + { + if ( (float)localVertexIndex < globalShapeMatchingEffectiveRange * (float)numVerticesInTheStrand ) + { + float factor = stiffnessForGlobalShapeMatching; + float3 del = factor * (initialPos - sharedPos[indexForSharedMem]).xyz; + sharedPos[indexForSharedMem].xyz += del; + } + } + } + + // update global position buffers + UpdateFinalVertexPositions(currentPos, sharedPos[indexForSharedMem], globalVertexIndex, localVertexIndex, numVerticesInTheStrand); +} + +//-------------------------------------------------------------------------------------- +// +// Calculate Strand Level Data +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CalculateStrandLevelData(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + float4 pos_old_old[2]; // previous previous positions for vertex 0 (root) and vertex 1. + float4 pos_old[2]; // previous positions for vertex 0 (root) and vertex 1. + float4 pos_new[2]; // current positions for vertex 0 (root) and vertex 1. + + pos_old_old[0] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex]; + pos_old_old[1] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex + 1]; + + pos_old[0] = g_HairVertexPositionsPrev[globalRootVertexIndex]; + pos_old[1] = g_HairVertexPositionsPrev[globalRootVertexIndex + 1]; + + pos_new[0] = g_HairVertexPositions[globalRootVertexIndex]; + pos_new[1] = g_HairVertexPositions[globalRootVertexIndex + 1]; + + float3 u = normalize(pos_old[1].xyz - pos_old[0].xyz); + float3 v = normalize(pos_new[1].xyz - pos_new[0].xyz); + + // Compute rotation and translation which transform pos_old to pos_new. + // Since the first two vertices are immovable, we can assume that there is no scaling during tranform. + float4 rot = QuatFromTwoUnitVectors(u, v); + float3 trans = pos_new[0].xyz - MultQuaternionAndVector(rot, pos_old[0].xyz); + + float vspCoeff = GetVelocityShockPropogation(); + float restLength0 = g_HairRestLengthSRV[globalRootVertexIndex]; + float vspAccelThreshold = GetVSPAccelThreshold(); + + // Increate the VSP coefficient by checking pseudo-acceleration to handle over-stretching when the character moves very fast + float accel = length(pos_new[1] - 2.0 * pos_old[1] + pos_old_old[1]); + + if (accel > vspAccelThreshold) // TODO: expose this value? + vspCoeff = 1.0f; + g_StrandLevelData[globalStrandIndex].vspQuat = rot; + g_StrandLevelData[globalStrandIndex].vspTranslation = float4(trans, vspCoeff); + + // skinning + + // Copy data into shared memory + float4 initialPos = g_InitialHairPositions[globalRootVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + g_StrandLevelData[globalStrandIndex].skinningQuat = bone_quat; +} + +//-------------------------------------------------------------------------------------- +// +// VelocityShockPropagation +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void VelocityShockPropagation(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + if (localVertexIndex < 2) + return; + + float4 vspQuat = g_StrandLevelData[globalStrandIndex].vspQuat; + float4 vspTrans = g_StrandLevelData[globalStrandIndex].vspTranslation; + float vspCoeff = vspTrans.w; + + float4 pos_new_n = g_HairVertexPositions[globalVertexIndex]; + float4 pos_old_n = g_HairVertexPositionsPrev[globalVertexIndex]; + + pos_new_n.xyz = (1.f - vspCoeff) * pos_new_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_new_n.xyz) + vspTrans.xyz); + pos_old_n.xyz = (1.f - vspCoeff) * pos_old_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_old_n.xyz) + vspTrans.xyz); + + g_HairVertexPositions[globalVertexIndex].xyz = pos_new_n.xyz; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = pos_old_n.xyz; +} + +//-------------------------------------------------------------------------------------- +// +// LocalShapeConstraints +// +// Compute shader to maintain the local shape constraints. +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LocalShapeConstraints(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // stiffness for local shape constraints + float stiffnessForLocalShapeMatching = GetLocalStiffness(strandType); + + //1.0 for stiffness makes things unstable sometimes. + stiffnessForLocalShapeMatching = 0.5f*min(stiffnessForLocalShapeMatching, 0.95f); + + //-------------------------------------------- + // Local shape constraint for bending/twisting + //-------------------------------------------- + { + float4 boneQuat = g_StrandLevelData[globalStrandIndex].skinningQuat; + + // vertex 1 through n-1 + for (uint localVertexIndex = 1; localVertexIndex < numVerticesInTheStrand - 1; localVertexIndex++) + { + uint globalVertexIndex = globalRootVertexIndex + localVertexIndex; + + float4 pos = g_HairVertexPositions[globalVertexIndex]; + float4 pos_plus_one = g_HairVertexPositions[globalVertexIndex + 1]; + float4 pos_minus_one = g_HairVertexPositions[globalVertexIndex - 1]; + + float3 bindPos = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex].xyz); + float3 bindPos_plus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex + 1].xyz); + float3 bindPos_minus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex - 1].xyz); + + float3 lastVec = pos.xyz - pos_minus_one.xyz; + + float4 invBone = InverseQuaternion(boneQuat); + float3 vecBindPose = bindPos_plus_one - bindPos; + float3 lastVecBindPose = bindPos - bindPos_minus_one; + float4 rotGlobal = QuatFromTwoUnitVectors(normalize(lastVecBindPose), normalize(lastVec)); + + float3 orgPos_i_plus_1_InGlobalFrame = MultQuaternionAndVector(rotGlobal, vecBindPose) + pos.xyz; + float3 del = stiffnessForLocalShapeMatching * (orgPos_i_plus_1_InGlobalFrame - pos_plus_one.xyz); + + if (IsMovable(pos)) + pos.xyz -= del.xyz; + + if (IsMovable(pos_plus_one)) + pos_plus_one.xyz += del.xyz; + + + g_HairVertexPositions[globalVertexIndex].xyz = pos.xyz; + g_HairVertexPositions[globalVertexIndex + 1].xyz = pos_plus_one.xyz; + } + } + + return; +} + +// Resolve hair vs capsule collisions. To use this, set TRESSFX_COLLISION_CAPSULES to 1 in both hlsl and cpp sides. +bool ResolveCapsuleCollisions(inout float4 curPosition, float4 oldPos, float friction = 0.4f) +{ + bool bAnyColDetected = false; + +#if TRESSFX_COLLISION_CAPSULES + if (g_numCollisionCapsules.x > 0) + { + float3 newPos; + + for (int i = 0; i < g_numCollisionCapsules.x; i++) + { + float3 center0 = g_centerAndRadius0[i].xyz; + float3 center1 = g_centerAndRadius1[i].xyz; + + CollisionCapsule cc; + cc.p0.xyz = center0; + cc.p0.w = g_centerAndRadius0[i].w; + cc.p1.xyz = center1; + cc.p1.w = g_centerAndRadius1[i].w; + + bool bColDetected = CapsuleCollision(curPosition, oldPos, newPos, cc, friction); + + if (bColDetected) + curPosition.xyz = newPos; + + bAnyColDetected = bColDetected ? true : bAnyColDetected; + } + } +#endif + + return bAnyColDetected; +} + +//-------------------------------------------------------------------------------------- +// +// LengthConstriantsWindAndCollision +// +// Compute shader to move the vertex position based on wind, maintain the lenght constraints +// and handles collisions. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LengthConstriantsWindAndCollision(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + uint numOfStrandsPerThreadGroup = g_NumOfStrandsPerThreadGroup; + + //------------------------------ + // Copy data into shared memory + //------------------------------ + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedLength[indexForSharedMem] = g_HairRestLengthSRV[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + //------------ + // Wind + //------------ + if ( g_Wind.x != 0 || g_Wind.y != 0 || g_Wind.z != 0 ) + { + float4 force = float4(0, 0, 0, 0); + + float frame = g_Wind.w; + + if ( localVertexIndex >= 2 && localVertexIndex < numVerticesInTheStrand-1 ) + { + // combining four winds. + float a = ((float)(globalStrandIndex % 20))/20.0f; + float3 w = a*g_Wind.xyz + (1.0f-a)*g_Wind1.xyz + a*g_Wind2.xyz + (1.0f-a)*g_Wind3.xyz; + + uint sharedIndex = localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + float3 v = sharedPos[sharedIndex].xyz - sharedPos[sharedIndex+numOfStrandsPerThreadGroup].xyz; + float3 force = -cross(cross(v, w), v); + sharedPos[sharedIndex].xyz += force*g_TimeStep*g_TimeStep; + } + } + + GroupMemoryBarrierWithGroupSync(); + + //---------------------------- + // Enforce length constraints + //---------------------------- + uint a = floor(numVerticesInTheStrand/2.0f); + uint b = floor((numVerticesInTheStrand-1)/2.0f); + + int nLengthContraintIterations = GetLengthConstraintIterations(); + + for ( int iterationE=0; iterationE < nLengthContraintIterations; iterationE++ ) + { + uint sharedIndex = 2*localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + if( localVertexIndex < a ) + ApplyDistanceConstraint(sharedPos[sharedIndex], sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedLength[sharedIndex].x); + + GroupMemoryBarrierWithGroupSync(); + + if( localVertexIndex < b ) + ApplyDistanceConstraint(sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedPos[sharedIndex+numOfStrandsPerThreadGroup*2], sharedLength[sharedIndex+numOfStrandsPerThreadGroup].x); + + GroupMemoryBarrierWithGroupSync(); + } + + //------------------------------------------ + // Collision handling with capsule objects + //------------------------------------------ + float4 oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + + bool bAnyColDetected = ResolveCapsuleCollisions(sharedPos[indexForSharedMem], oldPos); + GroupMemoryBarrierWithGroupSync(); + + //------------------- + // Compute tangent + //------------------- + // If this is the last vertex in the strand, we can't get tangent from subtracting from the next vertex, need to use last vertex to current + uint indexForTangent = (localVertexIndex == numVerticesInTheStrand - 1) ? indexForSharedMem - numOfStrandsPerThreadGroup : indexForSharedMem; + float3 tangent = sharedPos[indexForTangent + numOfStrandsPerThreadGroup].xyz - sharedPos[indexForTangent].xyz; + g_HairVertexTangents[globalVertexIndex].xyz = normalize(tangent); + + //--------------------------------------- + // clamp velocities, rewrite history + //--------------------------------------- + float3 positionDelta = sharedPos[indexForSharedMem].xyz - oldPos; + float speedSqr = dot(positionDelta, positionDelta); + if (speedSqr > g_ClampPositionDelta * g_ClampPositionDelta) { + positionDelta *= g_ClampPositionDelta * g_ClampPositionDelta / speedSqr; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = sharedPos[indexForSharedMem].xyz - positionDelta; + } + + //--------------------------------------- + // update global position buffers + //--------------------------------------- + g_HairVertexPositions[globalVertexIndex] = sharedPos[indexForSharedMem]; + + if (bAnyColDetected) + g_HairVertexPositionsPrev[globalVertexIndex] = sharedPos[indexForSharedMem]; + + return; +} + +// One thread computes one vertex. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void UpdateFollowHairVertices(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedTangent[indexForSharedMem] = g_HairVertexTangents[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + int globalFollowStrandIndex = globalStrandIndex + i + 1; + float factor = g_TipSeparationFactor*((float)localVertexIndex / (float)numVerticesInTheStrand) + 1.0f; + float3 followPos = sharedPos[indexForSharedMem].xyz + factor*g_FollowHairRootOffset[globalFollowStrandIndex].xyz; + g_HairVertexPositions[globalFollowVertexIndex].xyz = followPos; + g_HairVertexTangents[globalFollowVertexIndex] = sharedTangent[indexForSharedMem]; + } + + return; +} + +// One thread computes one vertex. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void PrepareFollowHairBeforeTurningIntoGuide(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + g_HairVertexPositionsPrev[globalFollowVertexIndex].xyz = g_HairVertexPositions[globalFollowVertexIndex].xyz; + } + + return; +} + +//-------------------------------------------------------------------------------------- +// +// GenerateTransforms +// +// This was the method of fur in TressFX 3.x. It may no longer work, and is not +// currently supported. We're including it, because it should be possible to +// get it working again without a whole lot of trouble, assuming the need arises. +// +// In this TressFX 3.x method, each strand has a triangle index assigned on export from +// Maya. It derives its transform from the post-skinned triangle. The advantage of this +// approach is that it can work independently of skinning method, blendshapes, etc. +// +// It relies on the triangle index being correct at runtime, though, which can be tricky. +// The engine would need to either maintain the original Maya triangles, or a mapping from +// the original Maya triangles to the runtime set. +// +// It's also a bit more expensive, given that it must calculate a transform from the triangle. +// +//-------------------------------------------------------------------------------------- +#if USE_MESH_BASED_HAIR_TRANSFORM == 1 + [numthreads(THREAD_GROUP_SIZE, 1, 1)] + void GenerateTransforms(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) + { + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // get the index for the mesh triangle + uint triangleIndex = g_HairToMeshMapping[globalStrandIndex].triangleIndex * 3; + + // get the barycentric coordinate for this hair strand + float a = g_HairToMeshMapping[globalStrandIndex].barycentricCoord[0]; + float b = g_HairToMeshMapping[globalStrandIndex].barycentricCoord[1]; + float c = g_HairToMeshMapping[globalStrandIndex].barycentricCoord[2]; + + // get the un-transformed triangle + float3 vert1 = g_MeshVertices[triangleIndex].xyz; + float3 vert2 = g_MeshVertices[triangleIndex+1].xyz; + float3 vert3 = g_MeshVertices[triangleIndex+2].xyz; + + // get the transfomed (skinned) triangle + float3 skinnedVert1 = g_TransformedVerts[triangleIndex].xyz; + float3 skinnedVert2 = g_TransformedVerts[triangleIndex+1].xyz; + float3 skinnedVert3 = g_TransformedVerts[triangleIndex+2].xyz; + + // calculate original hair position for the strand using the barycentric coordinate + //float3 pos = mul(a, vert1) + mul (b, vert2) + mul(c, vert3); + + // calculate the new hair position for the strand using the barycentric coordinate + float3 tfmPos = mul(a, skinnedVert1) + mul (b, skinnedVert2) + mul(c, skinnedVert3); + float3 initialPos = g_InitialHairPositions[globalRootVertexIndex].xyz; + + //------------------------------------------------- + // Calculate transformation matrix for the hair + //------------------------------------------------- + + // create a coordinate system from the untransformed triangle + // Note: this part only needs to be done once. We could pre-calculate it + // for every hair and save it in a buffer. + float3 normal; + float3 tangent = normalize(vert1 - vert3); + float3 tangent2 = vert2 - vert3; + normal = normalize(cross(tangent, tangent2)); + float3 binormal = normalize(cross(normal, tangent)); + + row_major float4x4 triangleMtx; + triangleMtx._m00 = tangent.x; triangleMtx._m01 = tangent.y; triangleMtx._m02 = tangent.z; triangleMtx._m03 = 0; + triangleMtx._m10 = normal.x; triangleMtx._m11 = normal.y; triangleMtx._m12 = normal.z; triangleMtx._m13 = 0; + triangleMtx._m20 = binormal.x; triangleMtx._m21 = binormal.y; triangleMtx._m22 = binormal.z; triangleMtx._m23 = 0; + triangleMtx._m30 = 0; triangleMtx._m31 = 0; triangleMtx._m32 = 0; triangleMtx._m33 = 1; + + // create a coordinate system from the transformed triangle + tangent = normalize(skinnedVert1 - skinnedVert3); + tangent2 = skinnedVert2 - skinnedVert3; + normal = normalize(cross(tangent, tangent2)); + binormal = normalize(cross(normal, tangent)); + + row_major float4x4 tfmTriangleMtx; + tfmTriangleMtx._m00 = tangent.x; tfmTriangleMtx._m01 = tangent.y; tfmTriangleMtx._m02 = tangent.z; tfmTriangleMtx._m03 = 0; + tfmTriangleMtx._m10 = normal.x; tfmTriangleMtx._m11 = normal.y; tfmTriangleMtx._m12 = normal.z; tfmTriangleMtx._m13 = 0; + tfmTriangleMtx._m20 = binormal.x; tfmTriangleMtx._m21 = binormal.y; tfmTriangleMtx._m22 = binormal.z; tfmTriangleMtx._m23 = 0; + tfmTriangleMtx._m30 = 0; tfmTriangleMtx._m31 = 0; tfmTriangleMtx._m32 = 0; tfmTriangleMtx._m33 = 1; + + // Find the rotation transformation from the untransformed triangle to the transformed triangle + // rotation = inverse(triangleMtx) x tfmTriangleMtx = transpose(triangleMtx) x tfmTriangleMtx, since triangelMtx is orthonormal + row_major float4x4 rotationMtx = mul(transpose(triangleMtx), tfmTriangleMtx); + + // translation matrix from hair to origin since we want to rotate the hair at it's root + row_major float4x4 translationMtx; + translationMtx._m00 = 1; translationMtx._m01 = 0; translationMtx._m02 = 0; translationMtx._m03 = 0; + translationMtx._m10 = 0; translationMtx._m11 = 1; translationMtx._m12 = 0; translationMtx._m13 = 0; + translationMtx._m20 = 0; translationMtx._m21 = 0; translationMtx._m22 = 1; translationMtx._m23 = 0; + translationMtx._m30 = -initialPos.x; translationMtx._m31 = -initialPos.y; translationMtx._m32 = -initialPos.z; translationMtx._m33 = 1; + + // final rotation matrix + rotationMtx = mul(translationMtx, rotationMtx); + + // translate back to the final position (as determined by the skinned mesh position) + translationMtx._m30 = tfmPos.x; translationMtx._m31 = tfmPos.y; translationMtx._m32 = tfmPos.z; translationMtx._m33 = 1; + + // combine the rotation and translation + row_major float4x4 tfmMtx = mul(rotationMtx, translationMtx); + + // apply the global transformation for the model + //tfmMtx = mul(tfmMtx, g_ModelTransformForHead); + + // calculate the quaternion from the matrix + float4 quaternion; + quaternion.w = sqrt(1 + tfmMtx._m00 + tfmMtx._m11 + tfmMtx._m22) / 2; + quaternion.x = (tfmMtx._m21 - tfmMtx._m12)/( 4 * quaternion.w); + quaternion.y = (tfmMtx._m02 - tfmMtx._m20)/( 4 * quaternion.w); + quaternion.z = (tfmMtx._m10 - tfmMtx._m01)/( 4 * quaternion.w); + + g_Transforms[globalStrandIndex].tfm = tfmMtx; + g_Transforms[globalStrandIndex].quat = quaternion; + return; + } +#endif +// EndHLSL diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXStrands.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXStrands.hlsl new file mode 100644 index 0000000000..255ff984c6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXStrands.hlsl @@ -0,0 +1,161 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to hair strands in the graphics pipeline. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "TressFXUtilities.hlsl" + +//-------------------------------------------------------------------------------------- +// +// Structured buffers with hair vertex info +// Accessors to allow changes to how they are accessed. +// +//-------------------------------------------------------------------------------------- +[[vk::binding(0, 1)]] StructuredBuffer g_GuideHairVertexPositions : register(t0, space1); +[[vk::binding(1, 1)]] StructuredBuffer g_GuideHairVertexTangents : register(t1, space1); + +[[vk::binding(0, 0)]] StructuredBuffer g_HairThicknessCoeffs : register(t0, space0); +[[vk::binding(1, 0)]] StructuredBuffer g_HairStrandTexCd : register(t1, space0); +[[vk::binding(2, 0)]] Texture2D BaseAlbedoTexture : register(t2, space0); + +[[vk::binding(0, 4)]] SamplerState LinearWrapSampler : register(s0, space4); + + +inline float4 GetPosition(int index) +{ + return g_GuideHairVertexPositions[index]; +} +inline float4 GetTangent(int index) +{ + return g_GuideHairVertexTangents[index]; +} +inline float GetThickness(int index) +{ + return g_HairThicknessCoeffs[index]; +} + +float3 GetStrandColor(int index, float fractionOfStrand) +{ + float3 rootColor; + float3 tipColor; + + float2 texCd = g_HairStrandTexCd[index / NumVerticesPerStrand].xy; + rootColor = BaseAlbedoTexture.SampleLevel(LinearWrapSampler, texCd, 0).rgb; + tipColor = MatTipColor.rgb; + + // Multiply with Base Material color + rootColor *= MatBaseColor.rgb; + + // Update the color based on position along the strand (vertex level) and lerp between tip and root if within the tipPercentage requested + float rootRange = 1.f - TipPercentage; + return (fractionOfStrand > rootRange) ? lerp(rootColor, tipColor, fractionOfStrand) : rootColor; +} + +struct TressFXVertex +{ + float4 Position; + float4 Tangent; + float4 p0p1; + float4 StrandColor; +}; + +TressFXVertex GetExpandedTressFXVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + + // Access the current line segment + uint index = vertexId / 2; // vertexId is actually the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result + float3 v = g_GuideHairVertexPositions[index].xyz; + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; //need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 0.71; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v + -1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[1] = float4(v + 1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Gonna hi-jack Tangent.w (unused) and add a .w component to strand color to store a strand UV + float2 strandUV; + strandUV.x = (vertexId & 0x01) ? 0.f : 1.f; + strandUV.y = fractionOfStrand; + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + Output.Tangent = float4(t, strandUV.x); + Output.p0p1 = float4(hairEdgePositions[0].xy / max(hairEdgePositions[0].w, TRESSFX_FLOAT_EPSILON), hairEdgePositions[1].xy / max(hairEdgePositions[1].w, TRESSFX_FLOAT_EPSILON)); + Output.StrandColor = float4(GetStrandColor(index, fractionOfStrand), strandUV.y); + return Output; +} + +TressFXVertex GetExpandedTressFXShadowVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + + // Access the current line segment + uint index = vertexId / 2; // vertexId is actually the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result + float3 v = g_GuideHairVertexPositions[index].xyz; + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; //need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 1.f; // Disable for shadows 0.71; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v + -1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[1] = float4(v + 1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + return Output; +} + +// EndHLSL + diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXUtilities.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXUtilities.hlsl new file mode 100644 index 0000000000..39a25b46a8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXUtilities.hlsl @@ -0,0 +1,119 @@ +//--------------------------------------------------------------------------------------- +// Shader code utilities for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// Cutoff to not render hair +#define SHORTCUT_MIN_ALPHA 0.02 + +#define TRESSFX_FLOAT_EPSILON 1e-7 + +//-------------------------------------------------------------------------------------- +// +// Controls whether you do mul(M,v) or mul(v,M) +// i.e., row major vs column major +// +//-------------------------------------------------------------------------------------- +float4 MatrixMult(float4x4 m, float4 v) +{ + return mul(m, v); +} + +// Calculate screen UV from XY NDC pair +float2 NDCToScreenUV(float2 vNDC) +{ + float2 ScreenUV = (vNDC + 1) / 2; + ScreenUV.y = 1 - ScreenUV.y; + return ScreenUV; +} + +// Get world position from NDC coordinates +float3 NDCToWorld(float3 vNDC, float4x4 mInvViewProj) +{ + float4 pos = MatrixMult(mInvViewProj, float4(vNDC, 1)); + return pos.xyz / pos.w; +} + +// Get NDC from screen position (and depth) +float3 ScreenPosToNDC(float3 vScreenPos, float4 viewport) +{ + float2 xy = vScreenPos.xy; + + // add viewport offset. + xy += viewport.xy; + + // scale by viewport to put in 0 to 1 + xy /= viewport.zw; + + // shift and scale to put in -1 to 1. y is also being flipped. + xy.x = (2 * xy.x) - 1; + xy.y = 1 - (2 * xy.y); + + return float3(xy, vScreenPos.z); +} + +// Pack a float4 into an uint +uint PackFloat4IntoUint(float4 vValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | (uint)(vValue.w * 255); +} + +// Unpack a uint into a float4 value +float4 UnpackUintIntoFloat4(uint uValue) +{ + return float4(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0, ((uValue & 0x000000FF)) / 255.0); +} + +// Pack a float3 and a uint8 into an uint +uint PackFloat3ByteIntoUint(float3 vValue, uint uByteValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | uByteValue; +} + +// Unpack a uint into a float3 and a uint8 value +float3 UnpackUintIntoFloat3Byte(uint uValue, out uint uByteValue) +{ + uByteValue = uValue & 0x000000FF; + return float3(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float2 +// +//-------------------------------------------------------------------------------------- +float2 Safe_normalize(float2 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float2(0, 0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float3 +// +//-------------------------------------------------------------------------------------- +float3 Safe_normalize(float3 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float3(0, 0, 0); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Simulation.cpp b/Gems/AtomTressFX/External/Code/src/Simulation.cpp new file mode 100644 index 0000000000..9d5ca9fd3d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Simulation.cpp @@ -0,0 +1,146 @@ +//--------------------------------------------------------------------------------------- +// Example code for managing simulation +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "Simulation.h" + +#include "AMD_TressFX.h" + +#include "TressFXLayouts.h" +#include "TressFXSimulation.h" + +#include "HairStrands.h" +#include "SDF.h" + +#define DEFINE_TO_STRING(x) #x +#define DEFINE_VALUE_TO_STRING(x) DEFINE_TO_STRING(x) + +Simulation::Simulation() + : mSimulation() + , mSDFCollisionSystem() +{ + EI_Device* pDevice = GetDevice(); + + // mSimulation = new TressFXSimulation(); + mSimulation.Initialize(pDevice); + mSDFCollisionSystem.Initialize(pDevice); +} + +void Simulation::StartSimulation( + double fTime, + SimulationContext& ctx, + bool bUpdateCollMesh, + bool bSDFCollisionResponse, + bool bAsync + ) +{ + // When we are done submitting sim commands, we will restore this as the default command list. + // TODO Maybe pass this explicitly, rather than setting as default and retrieving from there. + EI_CommandContext* renderContext = &GetDevice()->GetCurrentCommandContext(); + + + // When running async, we are getting a command list for submission on the async compute queue. + // We are only accumulating commands for submission now. There will be a wait for actual + // submission after this. + EI_CommandContext* simContext = renderContext; + if (bAsync) + { + simContext = &GetDevice()->GetComputeCommandContext(); + } + + if (bUpdateCollMesh) + { + // Updates the skinned version of the mesh, + // which is input to SDF. + // We are using a compute-based skinning system here, + // which is not part of the TressFX library. + for (size_t i = 0; i < ctx.collisionMeshes.size(); i++) + ctx.collisionMeshes[i]->SkinTheMesh(*simContext, fTime); + + UpdateCollisionMesh(*simContext, ctx); + } + + RunSimulation(*simContext, ctx); + + if (bSDFCollisionResponse) + RunCollision(*simContext, ctx); + + + for (size_t i = 0; i < ctx.hairStrands.size(); i++) + ctx.hairStrands[i]->TransitionSimToRendering(*renderContext); + + +} + +void Simulation::WaitOnSimulation() +{ + GetDevice()->WaitForCompute(); +} + +void Simulation::UpdateCollisionMesh(EI_CommandContext& simContext, SimulationContext& ctx) +{ + for (size_t i = 0; i < ctx.collisionMeshes.size(); i++) + ctx.collisionMeshes[i]->AccumulateSDF(simContext, mSDFCollisionSystem); +} + +void Simulation::RunCollision(EI_CommandContext& simContext, SimulationContext& ctx) +{ + // We will apply every collision mesh to every set of strands. + // This is of course not necessary in general - a BB check, for example, + // could check for overlaps first. + for (size_t i = 0; i < ctx.hairStrands.size(); i++) + { + TressFXHairObject* pHair = ctx.hairStrands[i]->GetTressFXHandle(); + + for (size_t j = 0; j < ctx.collisionMeshes.size(); j++) + ctx.collisionMeshes[j]->ApplySDF(simContext, mSDFCollisionSystem, pHair); + } +} + +void Simulation::RunSimulation(EI_CommandContext& simContext, SimulationContext& ctx) +{ + std::vector hairObjects(ctx.hairStrands.size()); + // Adi: the following part is required for both simulation and render since it updates + // the skinning matrices + for (size_t i = 0; i < ctx.hairStrands.size(); i++) + { + // update bone matrices for bone skinning of first two vertices of hair strands + ctx.hairStrands[i]->UpdateBones(simContext); + hairObjects[i] = ctx.hairStrands[i]->GetTressFXHandle(); + } + +// Adi: use the skin method only for initial testing with single compute pass +#define _SKIN_HAIR_NO_PHYSICS_ +#ifdef _SKIN_HAIR_NO_PHYSICS_ + mSimulation.UpdateHairSkinning(simContext, hairObjects); +#else + // Adi: this part involves the physics simulation: gravity, collisions and response and + // runs the compute shaders for that. + // Since it also contains the initial skinning of the hair and the final stage of adding + // follow hair, it must be replaced (as per the above) if we want to skip the simulation + // part for now. + // Run simulation + mSimulation.Simulate(simContext, hairObjects); +#endif +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Simulation.h b/Gems/AtomTressFX/External/Code/src/Simulation.h new file mode 100644 index 0000000000..ed7b3ef0b8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Simulation.h @@ -0,0 +1,59 @@ +//--------------------------------------------------------------------------------------- +// Example code for managing simulation +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include "TressFXSDFCollision.h" +#include "TressFXSimulation.h" +#include "EngineInterface.h" +#include + +class HairStrands; +class CollisionMesh; + +struct SimulationContext +{ + std::vector hairStrands; + std::vector collisionMeshes; +}; + +class Simulation +{ +public: + Simulation(); + void StartSimulation( + double fTime, + SimulationContext& ctx, + bool bUpdateCollMesh, bool bSDFCollisionResponse, bool bAsync + ); + void WaitOnSimulation(); +private: + void UpdateCollisionMesh(EI_CommandContext& simContext, SimulationContext& ctx); + void RunCollision(EI_CommandContext& simContext, SimulationContext& ctx); + void RunSimulation(EI_CommandContext& simContext, SimulationContext& ctx); + + TressFXSimulation mSimulation; + TressFXSDFCollisionSystem mSDFCollisionSystem; +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.cpp new file mode 100644 index 0000000000..071600f970 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.cpp @@ -0,0 +1,37 @@ + +//--------------------------------------------------------------------------------------- +// Hooks interface to TressFX functionality. +// +// AMD_TressFX.h is the interface. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#if AMD_TRESSFX_COMPILE_DYNAMIC_LIB +#define AMD_DLL_EXPORTS +#endif + +#include "AMD_TressFX.h" + +#include "TressFXAsset.h" +#include "TressFXHairObject.h" + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.h b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.h new file mode 100644 index 0000000000..9faec13520 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.h @@ -0,0 +1,55 @@ +//--------------------------------------------------------------------------------------- +// Main header file for TressFX +// This will eventually contain the C interface to all functionality. +// +// In the meantime, users need to use the individual headers for the components they +// require. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once +//#ifndef AMD_TRESSFX_H +//#define AMD_TRESSFX_H + +#define AMD_TRESSFX_VERSION_MAJOR 4 +#define AMD_TRESSFX_VERSION_MINOR 0 +#define AMD_TRESSFX_VERSION_PATCH 0 + +#include + +#ifndef TRESSFX_ASSERT +#include +#define TRESSFX_ASSERT assert +#endif + +// Max number of bones in a skeleton +#ifndef AMD_TRESSFX_MAX_NUM_BONES + #define AMD_TRESSFX_MAX_NUM_BONES 512 +#endif + +// Max number of hair render groups (bump up as needed) +#ifndef AMD_TRESSFX_MAX_HAIR_GROUP_RENDER + #define AMD_TRESSFX_MAX_HAIR_GROUP_RENDER 16 +#endif + +//#endif // AMD_TRESSFX_H diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/AMD_Types.h b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_Types.h new file mode 100644 index 0000000000..b2df762ae2 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_Types.h @@ -0,0 +1,91 @@ +//--------------------------------------------------------------------------------------- +// Type definitions and a few convenient macros +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once +//#ifndef AMD_LIB_TYPES_H +//#define AMD_LIB_TYPES_H + +namespace AMD +{ + typedef long long int64; + typedef int int32; + typedef short int16; + typedef char int8; + typedef char byte; + + typedef long long sint64; + typedef int sint32; + typedef short sint16; + typedef char sint8; + typedef int sint; + typedef short sshort; + typedef char sbyte; + typedef char schar; + + typedef unsigned long long uint64; + typedef unsigned int uint32; + typedef unsigned short uint16; + typedef unsigned char uint8; + + typedef float real32; + typedef double real64; + + typedef unsigned long long ulong; + typedef unsigned int uint; + typedef unsigned short ushort; + typedef unsigned char ubyte; + typedef unsigned char uchar; + + // The common return codes + typedef enum RETURN_CODE_t { + RETURN_CODE_SUCCESS, + RETURN_CODE_FAIL, + RETURN_CODE_INVALID_DEVICE, + RETURN_CODE_INVALID_DEVICE_CONTEXT, + RETURN_CODE_COUNT, + } RETURN_CODE; +} // namespace AMD + + +#define AMD_FUNCTION_WIDEN2(x) L##x +#define AMD_FUNCTION_WIDEN(x) AMD_FUNCTION_WIDEN2(x) +#define AMD_FUNCTION_WIDE_NAME AMD_FUNCTION_WIDEN(__FUNCTION__) +#define AMD_FUNCTION_NAME __FUNCTION__ + +#define AMD_PITCHED_SIZE(x, y) ((x + y - 1) / y) + +#define AMD_ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) + +#define AMD_PI 3.141592654f +#define AMD_ROT_ANGLE (AMD_PI / 180.f) + +#ifdef AMD_TRESSFX_DEBUG +#define AMD_COMPILE_TIME_ASSERT(condition, name) \ + unsigned char g_AMD_CompileTimeAssertExpression##name[(condition) ? 1 : -1]; +#else +#define AMD_COMPILE_TIME_ASSERT(condition, name) +#endif + +//#endif // AMD_LIB_TYPES_H diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/TressFX/CMakeLists.txt new file mode 100644 index 0000000000..b54fddca1e --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/CMakeLists.txt @@ -0,0 +1,29 @@ +project (TressFX_${GFX_API}) + +set(tressfx_sources + TressFX/AMD_TressFX.h + TressFX/AMD_TressFX.cpp + TressFX/AMD_Types.h + TressFX/TressFXAsset.h + TressFX/TressFXAsset.cpp + TressFX/TressFXCommon.h + TressFX/TressFXConstantBuffers.h + TressFX/TressFXFileFormat.h + TressFX/TressFXHairObject.h + TressFX/TressFXHairObject.cpp + TressFX/TressFXLayouts.h + TressFX/TressFXLayouts.cpp + TressFX/TressFXPPLL.h + TressFX/TressFXPPLL.cpp + TressFX/TressFXSDFCollision.cpp + TressFX/TressFXSDFCollision.h + TressFX/TressFXSDFInputMeshInterface.h + TressFX/TressFXSettings.h + TressFX/TressFXBoneSkinning.cpp + TressFX/TressFXBoneSkinning.h + TressFX/TressFXSDFMarchingCubes.cpp + TressFX/TressFXSDFMarchingCubes.h + TressFX/TressFXShortcut.h + TressFX/TressFXShortcut.cpp + TressFX/TressFXSimulation.cpp + TressFX/TressFXSimulation.h PARENT_SCOPE) diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp new file mode 100644 index 0000000000..58c66c3b8c --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp @@ -0,0 +1,990 @@ +//--------------------------------------------------------------------------------------- +// Loads and processes TressFX files. +// Inputs are binary files/streams/blobs +// Outputs are raw data that will mostly end up on the GPU. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +//#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace AMD +{ + static void GetTangentVectors(const Vector3& n, Vector3& t0, Vector3& t1) + { + if (fabsf(n[2]) > 0.707f) + { + float a = n[1] * n[1] + n[2] * n[2]; + float k = 1.0f / sqrtf(a); + t0[0] = 0; + t0[1] = -n[2] * k; + t0[2] = n[1] * k; + + t1[0] = a * k; + t1[1] = -n[0] * t0[2]; + t1[2] = n[0] * t0[1]; + } + else + { + float a = n[0] * n[0] + n[1] * n[1]; + float k = 1.0f / sqrtf(a); + t0[0] = -n[1] * k; + t0[1] = n[0] * k; + t0[2] = 0; + + t1[0] = -n[2] * t0[1]; + t1[1] = n[2] * t0[0]; + t1[2] = a * k; + } + } + + static float GetRandom(float Min, float Max) + { + return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min; + } + + // This function is mimicking LoadTressFXCollisionMeshData in TressFXBoneSkinning with a few tweaks. + // 1) It reads from an asset data stream instead of a std file stream. + // 2) Reading all data to an array of strings at once instead of reading line by line. + bool TressFXCollisionMesh::LoadMeshData(AZ::Data::AssetDataStream* stream) + { + if (!stream->IsOpen()) + { + return false; + } + + int numOfBones; + AZStd::vector boneNames; + + // Read the stream to a buffer and parse it line by line + AZStd::vector charBuffer; + charBuffer.resize_no_construct(stream->GetLength() + 1); + stream->Read(stream->GetLength(), charBuffer.data()); + + AZStd::vector sTokens; + AZStd::vector fileLines; + AzFramework::StringFunc::Tokenize(charBuffer.data(), fileLines, "\r\n"); + + for (int lineIdx = 0; lineIdx < fileLines.size(); ++lineIdx) + { + const AZStd::string& line = fileLines[lineIdx]; + + if (line.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (line[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(line.data(), sTokens, " "); + + AZStd::string token; + if (!sTokens.empty()) + { + token = sTokens[0]; + } + else + { + token = line; + } + + // Load bone names. + if (token.find("numOfBones") != std::string::npos) + { + numOfBones = atoi(sTokens[1].c_str()); + int countBone = 0; + + // Continue reading the file. + for (++lineIdx; lineIdx < fileLines.size(); ++lineIdx) + { + // Next line + const AZStd::string& sLine = fileLines[lineIdx]; + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(sLine.data(), sTokens, " "); + m_boneNames.push_back(sTokens[1].c_str()); + countBone++; + + if (countBone == numOfBones) + break; + } + } + + if (token.find("numOfVertices") != std::string::npos) // load bone indices and weights for each strand + { + const int numVertices = (AMD::uint32)atoi(sTokens[1].c_str()); + m_boneSkinningData.resize(numVertices); + m_vertices.resize(numVertices); + m_normals.resize(numVertices); + memset(m_boneSkinningData.data(), 0, sizeof(TressFXBoneSkinningData) * numVertices); + + // Continue reading the file. + int index = 0; + for (++lineIdx; lineIdx < fileLines.size(); ++lineIdx) + { + // Next line + const AZStd::string& sLine = fileLines[lineIdx]; + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(sLine.data(), sTokens, " "); + assert(sTokens.size() == 15); + + int vertexIndex = atoi(sTokens[0].c_str()); + AZ_UNUSED(vertexIndex); + assert(vertexIndex == index); + + AMD::float3& pos = m_vertices[index]; + pos.x = (float)atof(sTokens[1].c_str()); + pos.y = (float)atof(sTokens[2].c_str()); + pos.z = (float)atof(sTokens[3].c_str()); + + AMD::float3& normal = m_normals[index]; + normal.x = (float)atof(sTokens[4].c_str()); + normal.y = (float)atof(sTokens[5].c_str()); + normal.z = (float)atof(sTokens[6].c_str()); + + TressFXBoneSkinningData skinData; + + // Those indices stored in the skin data refer to local bones specific to this TressFX asset, not emotionFx/global bones. + // Bone indices are local to the skinning data (start from 0), while global bone indices are mapped to the entire skeleton. + int boneIndex = atoi(sTokens[7].c_str()); + skinData.boneIndex[0] = (float)boneIndex; + + boneIndex = atoi(sTokens[8].c_str()); + skinData.boneIndex[1] = (float)boneIndex; + + boneIndex = atoi(sTokens[9].c_str()); + skinData.boneIndex[2] = (float)boneIndex; + + boneIndex = atoi(sTokens[10].c_str()); + skinData.boneIndex[3] = (float)boneIndex; + + skinData.weight[0] = (float)atof(sTokens[11].c_str()); + skinData.weight[1] = (float)atof(sTokens[12].c_str()); + skinData.weight[2] = (float)atof(sTokens[13].c_str()); + skinData.weight[3] = (float)atof(sTokens[14].c_str()); + + m_boneSkinningData[index] = skinData; + + ++index; + + if (index == numVertices) + break; + } + } + else if (token.find("numOfTriangles") != std::string::npos) // triangle indices + { + const int numTriangles = atoi(sTokens[1].c_str()); + int numIndices = numTriangles * 3; + m_indices.resize(numIndices); + int index = 0; + + // Continue reading the file. + for (++lineIdx; lineIdx < fileLines.size(); ++lineIdx) + { + // next line + const AZStd::string& sLine = fileLines[lineIdx]; + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(sLine.data(), sTokens, " "); + assert(sTokens.size() == 4); + + int triangleIndex = atoi(sTokens[0].c_str()); + AZ_UNUSED(triangleIndex); + assert(triangleIndex == index); + + m_indices[index * 3 + 0] = atoi(sTokens[1].c_str()); + m_indices[index * 3 + 1] = atoi(sTokens[2].c_str()); + m_indices[index * 3 + 2] = atoi(sTokens[3].c_str()); + + ++index; + + if (index == numTriangles) + break; + } + } + } + + // [To Do] - check if the follow bone is required for the collision mesh. + // m_pScene = scene; + // m_followBone = scene->GetBoneIdByName(skinNumber, followBone); + + return true; + } + + TressFXAsset::TressFXAsset() + : m_numTotalStrands(0) + , m_numTotalVertices(0) + , m_numVerticesPerStrand(0) + , m_numGuideStrands(0) + , m_numGuideVertices(0) + , m_numFollowStrandsPerGuide(0) + { + } + + TressFXAsset::~TressFXAsset() + { + } + + bool TressFXAsset::LoadHairData(FILE* ioObject) + { + TressFXTFXFileHeader header = {}; + + // read the header + EI_Seek(ioObject, 0); // make sure the stream pos is at the beginning. + EI_Read((void*)&header, sizeof(TressFXTFXFileHeader), ioObject); + + // If the tfx version is lower than the current major version, exit. + if (header.version < AMD_TRESSFX_VERSION_MAJOR) + { + return false; + } + + unsigned int numStrandsInFile = header.numHairStrands; + + // We make the number of strands be multiple of TRESSFX_SIM_THREAD_GROUP_SIZE. + m_numGuideStrands = (numStrandsInFile - numStrandsInFile % TRESSFX_SIM_THREAD_GROUP_SIZE) + TRESSFX_SIM_THREAD_GROUP_SIZE; + + m_numVerticesPerStrand = header.numVerticesPerStrand; + + // Make sure number of vertices per strand is greater than two and less than or equal to + // thread group size (64). Also thread group size should be a mulitple of number of + // vertices per strand. So possible number is 4, 8, 16, 32 and 64. + TRESSFX_ASSERT(m_numVerticesPerStrand > 2 && m_numVerticesPerStrand <= TRESSFX_SIM_THREAD_GROUP_SIZE && TRESSFX_SIM_THREAD_GROUP_SIZE % m_numVerticesPerStrand == 0); + + m_numFollowStrandsPerGuide = 0; + m_numTotalStrands = m_numGuideStrands; // Until we call GenerateFollowHairs, the number of total strands is equal to the number of guide strands. + m_numGuideVertices = m_numGuideStrands * m_numVerticesPerStrand; + m_numTotalVertices = m_numGuideVertices; // Again, the total number of vertices is equal to the number of guide vertices here. + + TRESSFX_ASSERT(m_numTotalVertices % TRESSFX_SIM_THREAD_GROUP_SIZE == 0); // number of total vertices should be multiple of thread group size. + // This assert is actually redundant because we already made m_numGuideStrands + // and m_numTotalStrands are multiple of thread group size. + // Just demonstrating the requirement for number of vertices here in case + // you are to make your own loader. + + m_positions.resize(m_numTotalVertices); // size of m_positions = number of total vertices * sizeo of each position vector. + + // Read position data from the io stream. + EI_Seek(ioObject, header.offsetVertexPosition); + EI_Read((void*)m_positions.data(), numStrandsInFile * m_numVerticesPerStrand * sizeof(AMD::float4), ioObject); // note that the position data in io stream contains only guide hairs. If we call GenerateFollowHairs + // to generate follow hairs, m_positions will be re-allocated. + + // We need to make up some strands to fill up the buffer because the number of strands from stream is not necessarily multile of thread size. + AMD::int32 numStrandsToMakeUp = m_numGuideStrands - numStrandsInFile; + + for (AMD::int32 i = 0; i < numStrandsToMakeUp; ++i) + { + for (AMD::int32 j = 0; j < m_numVerticesPerStrand; ++j) + { + AMD::int32 indexLastVertex = (numStrandsInFile - 1) * m_numVerticesPerStrand + j; + AMD::int32 indexVertex = (numStrandsInFile + i) * m_numVerticesPerStrand + j; + m_positions[indexVertex] = m_positions[indexLastVertex]; + } + } + + // Read strand UVs + EI_Seek(ioObject, header.offsetStrandUV); + m_strandUV.resize(m_numTotalStrands); // If we call GenerateFollowHairs to generate follow hairs, + // m_strandUV will be re-allocated. + + EI_Read((void*)m_strandUV.data(), numStrandsInFile * sizeof(AMD::float2), ioObject); + + // Fill up the last empty space + AMD::int32 indexLastStrand = (numStrandsInFile - 1); + + for (int i = 0; i < numStrandsToMakeUp; ++i) + { + AMD::int32 indexStrand = (numStrandsInFile + i); + m_strandUV[indexStrand] = m_strandUV[indexLastStrand]; + } + + m_followRootOffsets.resize(m_numTotalStrands); + + // Fill m_followRootOffsets with zeros + memset(m_followRootOffsets.data(), 0, m_numTotalStrands * sizeof(AMD::float4)); + + return true; + } + + bool TressFXAsset::LoadHairData(AZ::Data::AssetDataStream* stream) + { + TressFXTFXFileHeader header = {}; + + // read the header + stream->Read(sizeof(TressFXTFXFileHeader), (void*)&header); + + // If the tfx version is lower than the current major version, exit. + if (header.version < AMD_TRESSFX_VERSION_MAJOR) + { + return false; + } + + unsigned int numStrandsInFile = header.numHairStrands; + + // We make the number of strands be multiple of TRESSFX_SIM_THREAD_GROUP_SIZE. + m_numGuideStrands = (numStrandsInFile - numStrandsInFile % TRESSFX_SIM_THREAD_GROUP_SIZE) + TRESSFX_SIM_THREAD_GROUP_SIZE; + + m_numVerticesPerStrand = header.numVerticesPerStrand; + + // Make sure number of vertices per strand is greater than two and less than or equal to + // thread group size (64). Also thread group size should be a mulitple of number of + // vertices per strand. So possible number is 4, 8, 16, 32 and 64. + TRESSFX_ASSERT( + m_numVerticesPerStrand > 2 && m_numVerticesPerStrand <= TRESSFX_SIM_THREAD_GROUP_SIZE && + TRESSFX_SIM_THREAD_GROUP_SIZE % m_numVerticesPerStrand == 0); + + m_numFollowStrandsPerGuide = 0; + m_numTotalStrands = + m_numGuideStrands; // Until we call GenerateFollowHairs, the number of total strands is equal to the number of guide strands. + m_numGuideVertices = m_numGuideStrands * m_numVerticesPerStrand; + m_numTotalVertices = m_numGuideVertices; // Again, the total number of vertices is equal to the number of guide vertices here. + + TRESSFX_ASSERT( + m_numTotalVertices % TRESSFX_SIM_THREAD_GROUP_SIZE == 0); // number of total vertices should be multiple of thread group size. + // This assert is actually redundant because we already made + // m_numGuideStrands and m_numTotalStrands are multiple of thread + // group size. Just demonstrating the requirement for number of + // vertices here in case you are to make your own loader. + + m_positions.resize(m_numTotalVertices); // size of m_positions = number of total vertices * sizeo of each position vector. + + // Read position data from the io stream. + stream->Seek(header.offsetVertexPosition + sizeof(TressFXCombinedHairFileHeader), AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + stream->Read(numStrandsInFile * m_numVerticesPerStrand * sizeof(AMD::float4), (void*)m_positions.data()); + // note that the position data in io stream contains only guide hairs. If we call GenerateFollowHairs + // to generate follow hairs, m_positions will be re-allocated. + + // We need to make up some strands to fill up the buffer because the number of strands from stream is not necessarily multile of + // thread size. + AMD::int32 numStrandsToMakeUp = m_numGuideStrands - numStrandsInFile; + + for (AMD::int32 i = 0; i < numStrandsToMakeUp; ++i) + { + for (AMD::int32 j = 0; j < m_numVerticesPerStrand; ++j) + { + AMD::int32 indexLastVertex = (numStrandsInFile - 1) * m_numVerticesPerStrand + j; + AMD::int32 indexVertex = (numStrandsInFile + i) * m_numVerticesPerStrand + j; + m_positions[indexVertex] = m_positions[indexLastVertex]; + } + } + + // Calculate bounding box and check if it exported in meters. + AZ::Aabb bbox = AZ::Aabb::CreateNull(); + for (AMD::int32 i = 0; i < m_numTotalVertices; ++i) + { + bbox.AddPoint(AZ::Vector3(m_positions[i].x, m_positions[i].y, m_positions[i].z)); + } + AZ_Error("TressFXAsset", bbox.GetXExtent() < s_hairBoundingBoxMaxExtent && + bbox.GetYExtent() < s_hairBoundingBoxMaxExtent && bbox.GetZExtent() < s_hairBoundingBoxMaxExtent, + "Hair units seem to be in cm, creating extremely large hair - please export again using meters"); + + // Read strand UVs + stream->Seek(header.offsetStrandUV + sizeof(TressFXCombinedHairFileHeader), AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + m_strandUV.resize(m_numTotalStrands); // If we call GenerateFollowHairs to generate follow hairs, + // m_strandUV will be re-allocated. + + stream->Read(numStrandsInFile * sizeof(AMD::float2), (void*)m_strandUV.data()); + + // Fill up the last empty space + AMD::int32 indexLastStrand = (numStrandsInFile - 1); + + for (int i = 0; i < numStrandsToMakeUp; ++i) + { + AMD::int32 indexStrand = (numStrandsInFile + i); + m_strandUV[indexStrand] = m_strandUV[indexLastStrand]; + } + + m_followRootOffsets.resize(m_numTotalStrands); + + // Fill m_followRootOffsets with zeros + memset(m_followRootOffsets.data(), 0, m_numTotalStrands * sizeof(AMD::float4)); + + return true; + } + + // This generates follow hairs around loaded guide hairs procedually with random distribution within the max radius input. + // Calling this is optional. + bool TressFXAsset::GenerateFollowHairs(int numFollowHairsPerGuideHair, float tipSeparationFactor, float maxRadiusAroundGuideHair) + { + TRESSFX_ASSERT(numFollowHairsPerGuideHair >= 0); + + m_numFollowStrandsPerGuide = numFollowHairsPerGuideHair; + + // Nothing to do, just exit. + if (numFollowHairsPerGuideHair == 0) + return false; + + // Recompute total number of hair strands and vertices with considering number of follow hairs per a guide hair. + m_numTotalStrands = m_numGuideStrands * (m_numFollowStrandsPerGuide + 1); + m_numTotalVertices = m_numTotalStrands * m_numVerticesPerStrand; + + // keep the old buffers until the end of this function. + std::vector positionsGuide = m_positions; + std::vector strandUVGuide = m_strandUV; + + // re-allocate all buffers + m_positions.resize(m_numTotalVertices); + m_strandUV.resize(m_numTotalStrands); + + m_followRootOffsets.resize(m_numTotalStrands); + + // type-cast to Vector3 to handle data easily. + Vector3* pos = m_positions.data(); + Vector3* followOffset = m_followRootOffsets.data(); + + // Generate follow hairs + for (int i = 0; i < m_numGuideStrands; i++) + { + int indexGuideStrand = i * (m_numFollowStrandsPerGuide + 1); + int indexRootVertMaster = indexGuideStrand * m_numVerticesPerStrand; + + memcpy(&pos[indexRootVertMaster], &positionsGuide[i * m_numVerticesPerStrand], sizeof(Vector3) * m_numVerticesPerStrand); + m_strandUV[indexGuideStrand] = strandUVGuide[i]; + + followOffset[indexGuideStrand].Set(0, 0, 0); + followOffset[indexGuideStrand].w = (float)indexGuideStrand; + Vector3 v01 = pos[indexRootVertMaster + 1] - pos[indexRootVertMaster]; + v01.Normalize(); + + // Find two orthogonal unit tangent vectors to v01 + Vector3 t0, t1; + GetTangentVectors(v01, t0, t1); + + for (int j = 0; j < m_numFollowStrandsPerGuide; j++) + { + int indexStrandFollow = indexGuideStrand + j + 1; + int indexRootVertFollow = indexStrandFollow * m_numVerticesPerStrand; + + m_strandUV[indexStrandFollow] = m_strandUV[indexGuideStrand]; + + // offset vector from the guide strand's root vertex position + Vector3 offset = GetRandom(-maxRadiusAroundGuideHair, maxRadiusAroundGuideHair) * t0 + GetRandom(-maxRadiusAroundGuideHair, maxRadiusAroundGuideHair) * t1; + followOffset[indexStrandFollow] = offset; + followOffset[indexStrandFollow].w = (float)indexGuideStrand; + + for (int k = 0; k < m_numVerticesPerStrand; k++) + { + const Vector3* guideVert = &pos[indexRootVertMaster + k]; + Vector3* followVert = &pos[indexRootVertFollow + k]; + + float factor = tipSeparationFactor * ((float)k / ((float)m_numVerticesPerStrand)) + 1.0f; + *followVert = *guideVert + offset * factor; + (*followVert).w = guideVert->w; + } + } + } + + return true; + } + + bool TressFXAsset::ProcessAsset() + { + m_strandTypes.resize(m_numTotalStrands); + m_tangents.resize(m_numTotalVertices); + m_restLengths.resize(m_numTotalVertices); + m_thicknessCoeffs.resize(m_numTotalVertices); + m_triangleIndices.resize(GetNumHairTriangleIndices()); + + // compute tangent vectors + ComputeStrandTangent(); + + // compute thickness coefficients + ComputeThicknessCoeffs(); + + // compute rest lengths + ComputeRestLengths(); + + // triangle index + FillTriangleIndexArray(); + + for (int i = 0; i < m_numTotalStrands; i++) + m_strandTypes[i] = 0; + + return true; + } + + void TressFXAsset::FillTriangleIndexArray() + { + TRESSFX_ASSERT(m_numTotalVertices == m_numTotalStrands * m_numVerticesPerStrand); + TRESSFX_ASSERT(m_triangleIndices.size() != 0); + + AMD::int32 id = 0; + int iCount = 0; + + for (int i = 0; i < m_numTotalStrands; i++) + { + for (int j = 0; j < m_numVerticesPerStrand - 1; j++) + { + m_triangleIndices[iCount++] = 2 * id; + m_triangleIndices[iCount++] = 2 * id + 1; + m_triangleIndices[iCount++] = 2 * id + 2; + m_triangleIndices[iCount++] = 2 * id + 2; + m_triangleIndices[iCount++] = 2 * id + 1; + m_triangleIndices[iCount++] = 2 * id + 3; + + id++; + } + + id++; + } + + TRESSFX_ASSERT(iCount == 6 * m_numTotalStrands * (m_numVerticesPerStrand - 1)); // iCount == GetNumHairTriangleIndices() + } + + void TressFXAsset::ComputeStrandTangent() + { + Vector3* pos = (Vector3*)m_positions.data(); + Vector3* tan = (Vector3*)m_tangents.data(); + + for (int iStrand = 0; iStrand < m_numTotalStrands; ++iStrand) + { + int indexRootVertMaster = iStrand * m_numVerticesPerStrand; + + // vertex 0 + { + Vector3& vert_0 = pos[indexRootVertMaster]; + Vector3& vert_1 = pos[indexRootVertMaster + 1]; + + Vector3 tangent = vert_1 - vert_0; + tangent.Normalize(); + tan[indexRootVertMaster] = tangent; + } + + // vertex 1 through n-1 + for (int i = 1; i < (int)m_numVerticesPerStrand - 1; i++) + { + Vector3& vert_i_minus_1 = pos[indexRootVertMaster + i - 1]; + Vector3& vert_i = pos[indexRootVertMaster + i]; + Vector3& vert_i_plus_1 = pos[indexRootVertMaster + i + 1]; + + Vector3 tangent_pre = vert_i - vert_i_minus_1; + tangent_pre.Normalize(); + + Vector3 tangent_next = vert_i_plus_1 - vert_i; + tangent_next.Normalize(); + + Vector3 tangent = tangent_pre + tangent_next; + tangent = tangent.Normalize(); + + tan[indexRootVertMaster + i] = tangent; + } + } + } + + void TressFXAsset::ComputeThicknessCoeffs() + { + Vector3* pos = (Vector3*)m_positions.data(); + + int index = 0; + + for (int iStrand = 0; iStrand < m_numTotalStrands; ++iStrand) + { + int indexRootVertMaster = iStrand * m_numVerticesPerStrand; + float strandLength = 0; + float tVal = 0; + + // vertex 1 through n + for (int i = 1; i < (int)m_numVerticesPerStrand; ++i) + { + Vector3& vert_i_minus_1 = pos[indexRootVertMaster + i - 1]; + Vector3& vert_i = pos[indexRootVertMaster + i]; + + Vector3 vec = vert_i - vert_i_minus_1; + float disSeg = vec.Length(); + + tVal += disSeg; + strandLength += disSeg; + } + + for (int i = 0; i < (int)m_numVerticesPerStrand; ++i) + { + tVal /= strandLength; + m_thicknessCoeffs[index++] = sqrt(1.f - tVal * tVal); + } + } + } + + void TressFXAsset::ComputeRestLengths() + { + Vector3* pos = (Vector3*)m_positions.data(); + float* restLen = (float*)m_restLengths.data(); + + int index = 0; + + // Calculate rest lengths + for (int i = 0; i < m_numTotalStrands; i++) + { + int indexRootVert = i * m_numVerticesPerStrand; + + for (int j = 0; j < m_numVerticesPerStrand - 1; j++) + { + restLen[index++] = + (pos[indexRootVert + j] - pos[indexRootVert + j + 1]).Length(); + } + + // Since number of edges are one less than number of vertices in hair strand, below + // line acts as a placeholder. + restLen[index++] = 0; + } + } + + void TressFXAsset::GetBonesNames(FILE* ioObject, std::vector& boneNames) + { + AMD::int32 numOfBones = 0; + EI_Seek(ioObject, 0); + EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); + + // boneNames.reserve(numOfBones); + boneNames.resize(numOfBones); + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + + AMD::int32 charLen = 0; + EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. + + char boneName[128]; + EI_Read(boneName, sizeof(char) * charLen, ioObject); + boneName[charLen] = '\0'; // adding 0 termination to be on the safe side. + boneNames[i] = std::string(boneName); + } + } + + void TressFXAsset::GetBonesNames(AZ::Data::AssetDataStream* stream, std::vector& boneNames) + { + AMD::int32 numOfBones = 0; + stream->Read(sizeof(AMD::int32), &numOfBones); + + boneNames.resize(numOfBones); + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + stream->Read(sizeof(AMD::int32), &boneIndex); + + AMD::int32 charLen = 0; + stream->Read(sizeof(AMD::int32), &charLen); // character length includes null termination already. + + char boneName[128]; + stream->Read(sizeof(char) * charLen, &boneName); + boneName[charLen] = '\0'; // adding 0 termination to be on the safe side. + boneNames[i] = std::string(boneName); + } + } + + + bool TressFXAsset::LoadBoneData(FILE* ioObject, std::vector skeletonBoneIndices) + { + m_boneSkinningData.resize(0); + + AMD::int32 numOfBones = 0; + EI_Seek(ioObject, 0); + EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); + + if (skeletonBoneIndices.size() != numOfBones) + { + TRESSFX_ASSERT(skeletonBoneIndices.size() != numOfBones); + return false; + } + + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + + AMD::int32 charLen = 0; + EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. + + char boneName[128]; + EI_Read(boneName, sizeof(char) * charLen, ioObject); + } + + // Reading the number of strands + AMD::int32 numOfStrandsInStream = 0; + EI_Read((char*)&numOfStrandsInStream, sizeof(AMD::int32), ioObject); + + //If the number of strands from the input stream (tfxbone) is bigger than what we already know from tfx, something is wrong. + if (m_numGuideStrands < numOfStrandsInStream) + return 0; + + m_boneSkinningData.resize(m_numTotalStrands); + + TressFXBoneSkinningData skinData = TressFXBoneSkinningData(); + for (int i = 0; i < numOfStrandsInStream; ++i) + { + AMD::int32 index = 0; // Well, we don't really use this here. + EI_Read((char*)&index, sizeof(AMD::int32), ioObject); + + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + AMD::int32 boneIndex; + EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + assert(boneIndex >= 0); + skinData.boneIndex[j] = (float)skeletonBoneIndices[boneIndex]; // Change the joint index to be what the engine wants + EI_Read((char*)&skinData.weight[j], sizeof(AMD::real32), ioObject); + } + +#if defined(AZ_ENABLE_TRACING) + float weightSum = skinData.weight[0] + skinData.weight[1] + skinData.weight[2] + skinData.weight[3]; + AZ_Assert(weightSum > 0.0f, "Weight sum should be greater than 0"); +#endif // AZ_ENABLE_TRACING + + assert(skinData.weight[0] != 0.0f); + + // If bone index is -1, then it means that there is no bone associated to this. In this case we simply replace it with zero. + // This is safe because the corresponding weight should be zero anyway. + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + if (skinData.boneIndex[j] == -1.f) + { + skinData.boneIndex[j] = 0; + skinData.weight[j] = 0; + } + } + + // Setting the data for the leading strand of each group + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + // Once the entire skinning data was filled, fill skinning info for markup hair + // found at the end of the array + for (int i = numOfStrandsInStream; i < m_numGuideStrands; ++i) + { + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + return true; + } + + bool TressFXAsset::LoadBoneData(AZ::Data::AssetDataStream* stream) + { + m_boneSkinningData.resize(0); + + AMD::int32 numOfBones = 0; + stream->Read(sizeof(AMD::int32), &numOfBones); + + m_boneNames.resize(numOfBones); + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + stream->Read(sizeof(AMD::int32), &boneIndex); + + AMD::int32 charLen = 0; + stream->Read(sizeof(AMD::int32), &charLen); // character length includes null termination already. + + char boneName[128]; + stream->Read(sizeof(char) * charLen, &boneName); + boneName[charLen] = '\0'; // adding 0 termination to be on the safe side. + m_boneNames[i] = std::string(boneName); + } + + // Reading the number of strands + AMD::int32 numOfStrandsInStream = 0; + stream->Read(sizeof(AMD::int32), &numOfStrandsInStream); + + // If the number of strands from the input stream (tfxbone) is bigger than what we already know from tfx, something is wrong. + if (m_numGuideStrands < numOfStrandsInStream) + return 0; + + //AMD::int32 boneSkinningMemSize = m_numTotalStrands * sizeof(TressFXBoneSkinningData); + m_boneSkinningData.resize(m_numTotalStrands); + + TressFXBoneSkinningData skinData = TressFXBoneSkinningData(); + for (int i = 0; i < numOfStrandsInStream; ++i) + { + AMD::int32 index = 0; // Well, we don't really use this here. + stream->Read(sizeof(AMD::int32), &index); + + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + AMD::int32 boneIndex; + stream->Read(sizeof(AMD::int32), &boneIndex); + assert(boneIndex >= 0); + skinData.boneIndex[j] = (float)boneIndex; // Stores the bone index from tfx directly + stream->Read(sizeof(AMD::real32), &skinData.weight[j]); + } + +#if defined(AZ_ENABLE_TRACING) + float weightSum = skinData.weight[0] + skinData.weight[1] + skinData.weight[2] + skinData.weight[3]; + AZ_Assert(weightSum > 0.0f, "Weight sum should be greater than 0"); +#endif // AZ_ENABLE_TRACING + + assert(skinData.weight[0] != 0.0f); + + // If bone index is -1, then it means that there is no bone associated to this. In this case we simply replace it with zero. + // This is safe because the corresponding weight should be zero anyway. + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + if (skinData.boneIndex[j] == -1.f) + { + skinData.boneIndex[j] = 0; + skinData.weight[j] = 0; + } + } + + // Setting the data for the leading strand of each group + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + // Once the entire skinning data was filled, fill skinning info for markup hair + // found at the end of the array + for (int i = numOfStrandsInStream; i < m_numGuideStrands; ++i) + { + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + return true; + } + + bool TressFXAsset::LoadCombinedHairData(AZ::Data::AssetDataStream* stream) + { + // Seek to the beginning of the file + stream->Seek(0, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + + // Read the header of .tfxhair file + TressFXCombinedHairFileHeader header; + stream->Read(sizeof(TressFXCombinedHairFileHeader), (void*)&header); + + // Load the hair data + stream->Seek(header.offsetTFX, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + bool success = LoadHairData(stream); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Error in Guide Hair asset data"); + return false; + } + + // Adi: Hack code + const int numFollowHairs = 2; + const float tipSeparationFactor = 2.0f; + const float maxRadiusAroundGuideHair = 0.012f; + + success = GenerateFollowHairs(numFollowHairs, tipSeparationFactor, maxRadiusAroundGuideHair); + success &= ProcessAsset(); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Error in Follow Hair asset data"); + return false; + } + + // Seek to the beginning of tfxbone file + stream->Seek(header.offsetTFXBone, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + + // Load the bones data + success &= LoadBoneData(stream); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Error in Hair Bones asset data"); + return false; + } + + // Since the tfxmesh file could be optional, check if we need to export it. + if (header.offsetTFXMesh != stream->GetLength()) + { + // Seek to the beginning of tfxmesh file + stream->Seek(header.offsetTFXMesh, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + m_collisionMesh = std::make_unique(); + success &= m_collisionMesh->LoadMeshData(stream); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Possibly Error in Hair collision object data - this file is optional"); + return false; + } + } + + return true; + } + + bool TressFXAsset::GenerateLocaltoGlobalHairBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup) + { + return GenerateLocaltoGlobalBoneIndexLookup(globalBoneIndexMap, m_boneNames, outLookup); + } + + bool TressFXAsset::GenerateLocaltoGlobalCollisionBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup) + { + if (m_collisionMesh) + { + return GenerateLocaltoGlobalBoneIndexLookup(globalBoneIndexMap, m_collisionMesh->m_boneNames, outLookup); + } + return true; // do not touch outlookUp, simply return true if there is no associated collision mesh + } + + bool TressFXAsset::GenerateLocaltoGlobalBoneIndexLookup( const BoneNameToIndexMap& boneIndicesMap, + const std::vector& boneNames, LocalToGlobalBoneIndexLookup& outLookup) + { + uint32 numMismatchedBone = 0; + outLookup.resize(boneNames.size()); + for (int i = 0; i < m_boneNames.size(); ++i) + { + const std::string& boneName = m_boneNames[i]; + if (boneIndicesMap.find(boneName) == boneIndicesMap.end()) + { + // Error handling. + numMismatchedBone++; + continue; + } + outLookup[i] = boneIndicesMap.at(boneName); + } + + if (numMismatchedBone > 0) + { + AZ_Error( "Hair Gem", false, "%zu bones cannot be found under the emotionfx actor. " + "It is likely that the hair asset is incompatible with the actor asset.", numMismatchedBone); + return false; + } + return true; + } +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.h new file mode 100644 index 0000000000..8d90b25e0b --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.h @@ -0,0 +1,187 @@ +//--------------------------------------------------------------------------------------- +// Loads and processes TressFX files. +// Inputs are binary files/streams/blobs +// Outputs are raw data that will mostly end up on the GPU. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#pragma once + +#include +#include +#include + +#include + + +#include +#include +#include +#include +#include + +#include + +namespace AZ::Data +{ + class AssetDataStream; +} + +namespace AMD +{ +#define TRESSFX_MAX_INFLUENTIAL_BONE_COUNT 4 + + static constexpr char TFXFileExtension[] = "tfx"; // Contains the hair vertices data. + static constexpr char TFXBoneFileExtension[] = "tfxbone"; // Contains the hair skinning data. + static constexpr char TFXMeshFileExtension[] = "tfxmesh"; // Contains the hair collision object. + static constexpr char TFXCombinedFileExtension[] = "tfxhair"; // A container file with all the above data. + static constexpr float s_hairBoundingBoxMaxExtent = 10.0f; // Value used to check if the scale of the hair exceed usual. + + // The header struct for the .tfxhair file generated in cache. The .tfxhair file is a combined file of .tfx, .tfxbone + // and .tfxmesh. + struct TressFXCombinedHairFileHeader + { + uint64 offsetTFX = 0; + uint64 offsetTFXBone = 0; + uint64 offsetTFXMesh = 0; + }; + + struct TressFXBoneSkinningData + { // Possible improvement can be to use int 32 with high / low bits encoding + float boneIndex[TRESSFX_MAX_INFLUENTIAL_BONE_COUNT]; + float weight[TRESSFX_MAX_INFLUENTIAL_BONE_COUNT]; + }; + + #define EI_Read(ptr, size, pFile) fread(ptr, size, 1, pFile) + #define EI_Seek(pFile, offset) fseek(pFile, offset, SEEK_SET) + + using LocalToGlobalBoneIndexLookup = std::vector; // Index -> TressFX Bone Index (Local set of bones) + // Value -> EmotionFX Bone Index (Global set of bones) + using BoneNameToIndexMap = std::unordered_map; + + class TressFXCollisionMesh + { + public: + std::vector m_vertices; + std::vector m_normals; + std::vector m_indices; + + // The skinning for the collision mesh only. Do not confuse it with hair skinning or the object skinning. + std::vector m_boneSkinningData; + + std::vector m_boneNames; + + // This function is mimicking LoadTressFXCollisionMeshData in TressFXBoneSkinnin + bool LoadMeshData(AZ::Data::AssetDataStream* stream); + }; + + class TressFXAsset + { + public: + TressFXAsset(); + ~TressFXAsset(); + + // Hair data from *.tfx + std::vector m_positions; // Inspite of the confusing name, this is actually Vector4 with w=1.0 + std::vector m_strandUV; + std::vector m_tangents; + std::vector m_followRootOffsets; + std::vector m_strandTypes; + std::vector m_thicknessCoeffs; + std::vector m_restLengths; + std::vector m_triangleIndices; + + + // Bone skinning data from *.tfxbone - this represents the bones Id affecting hairs (not that actual bone structure) + std::vector m_boneSkinningData; + + // Stores a mapping of the bone index to actual bone names. + std::vector m_boneNames; + + // counts on hair data + AMD::int32 m_numTotalStrands; + AMD::int32 m_numTotalVertices; + AMD::int32 m_numVerticesPerStrand; + AMD::int32 m_numGuideStrands; + AMD::int32 m_numGuideVertices; + AMD::int32 m_numFollowStrandsPerGuide; + + // Currently we only deal with a single collision mesh assumed to be the skinned mesh. + // This might not always be the case and a new scheme might be required. + std::unique_ptr m_collisionMesh; + + // Loads *.tfx hair data + bool LoadHairData(FILE* ioObject); + + // Generates follow hairs procedurally. If numFollowHairsPerGuideHair is zero, then this function won't do anything. + bool GenerateFollowHairs(int numFollowHairsPerGuideHair = 0, float tipSeparationFactor = 0, float maxRadiusAroundGuideHair = 0); + + // Computes various parameters for simulation and rendering. After calling this function, data is ready to be passed to hair object. + bool ProcessAsset(); + + //! Given the *.tfxbon file that contains bones hair skinning data, this method returns + //! the used bones names array of the current hair object so it can be matched with + //! the skeleton bones names to get the indices in the global skeleton array. + void GetBonesNames(FILE* ioObject, std::vector& boneNames); + //! Given the bones hair skinning data file and the pairing local indices to skeleton indices array, + //! this method convert all bones indices per vertex and creates the skinning data array. + bool LoadBoneData(FILE* ioObject, std::vector skeletonBoneIndices); + + // This function load the combined hair data (.tfxhair file) generated in the cache using the custom builder. + // Inside the function it will call LoadHairData, LoadBoneData and LoadCollisionData function. The TressFX asset + // will be fully populated after this function return true. + bool LoadCombinedHairData(AZ::Data::AssetDataStream* stream); + + // Similar function to the above but read the assetDataStream instead. Those function will eventually replacing their counterpart. + // Notice: The loadCombineHairData will control the seek position of the stream, which guaranteed those stream will be at the correct + // position when entering those function. + bool LoadHairData(AZ::Data::AssetDataStream* stream); + void GetBonesNames(AZ::Data::AssetDataStream* stream, std::vector& boneNames); + bool LoadBoneData(AZ::Data::AssetDataStream* stream); + + inline AMD::uint32 GetNumHairSegments() { return m_numTotalStrands * (m_numVerticesPerStrand - 1); } + inline AMD::uint32 GetNumHairTriangleIndices() { return 6 * GetNumHairSegments(); } + inline AMD::uint32 GetNumHairLineIndices() { return 2 * GetNumHairSegments(); } + + // Generates a local to global bone index lookup for hair and collision. We are passing only a subset of the full bone information found in an + // emfx actor to the shader. The purpose of the index lookup is to map an emfx actor bone to the subset consisting of + // TressFX bones. Essentially, the full set of bones found in an emfx actor are the global bones, while the bones in a + // TressFX asset are the local bones. + bool GenerateLocaltoGlobalHairBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup); + bool GenerateLocaltoGlobalCollisionBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup); + private: + + // Generates a local to global bone index lookup for specified bones only. This can be called if we only need information + // for certain bones such as ones contained in a collision mesh. + bool GenerateLocaltoGlobalBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap /*Global BoneNames to BoneIndex*/, + const std::vector& boneNames /*BoneNames used by this skinning data*/, LocalToGlobalBoneIndexLookup& outLookup); + + // Helper functions for ProcessAsset. + void ComputeThicknessCoeffs(); + void ComputeStrandTangent(); + void ComputeRestLengths(); + void FillTriangleIndexArray(); + }; + // #endif // AMD_TRESSFX_ASSET_H + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.cpp new file mode 100644 index 0000000000..911ccf4719 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.cpp @@ -0,0 +1,522 @@ +// ---------------------------------------------------------------------------- +// Compute-based skinning. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "TressFXBoneSkinning.h" + +// TressFX +#include "EngineInterface.h" // Engine and GLTF API-specific implementation pull ins +#include "TressFXHairObject.h" +#include "TressFXLayouts.h" +#include +#include +#include + +int static SuStringTokenizer(const std::string& input, + const std::string& delimiter, + std::vector& results, + bool includeEmpties) +{ + int iPos = 0; + int newPos = -1; + int sizeS2 = (int)delimiter.length(); + int isize = (int)input.length(); + + if (isize == 0 || sizeS2 == 0) + return 0; + + std::vector positions; + newPos = (int)input.find(delimiter, 0); + + if (newPos == std::string::npos) + return 0; + + int numFound = 0; + + while (newPos >= iPos) + { + numFound++; + positions.push_back(newPos); + iPos = newPos; + newPos = (int)input.find(delimiter, iPos + sizeS2); + } + + if (numFound == 0) + return 0; + + for (int i = 0; i <= (int)positions.size(); ++i) + { + std::string s(""); + + if (i == 0) + { + s = input.c_str() + i; + s = s.substr(0, positions[i]); + } + else + { + int offset = positions[i - 1] + sizeS2; + + if (offset < isize) + { + if (i == (int)positions.size()) + s = input.c_str() + offset; + else if (i > 0) + { + s = input.c_str() + positions[i - 1] + sizeS2; + s = s.substr(0, positions[i] - positions[i - 1] - sizeS2); + } + } + } + + if (includeEmpties || (s.length() > 0)) + results.push_back(s); + } + + return ++numFound; +} + +bool TressFXBoneSkinning::LoadTressFXCollisionMeshData( + EI_Scene * scene, + const char* filePath, + int skinNumber, + const char* followBone) +{ + m_skinNumber = skinNumber; + + m_pTempIndices.clear(); + m_pTempNormals.clear(); + m_pTempVertices.clear(); + + std::ifstream stream(filePath); + + if (!stream.is_open()) + return false; + + std::string sLine; + std::vector sTokens; + + int numOfBones; + + std::vector boneNames; + while (std::getline(stream, sLine)) + { + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + + std::string token; + + if (numFound > 0) + { + token = sTokens[0]; + } + else + { + token = sLine; + } + + // load bone names. + if (token.find("numOfBones") != std::string::npos) + { + numOfBones = atoi(sTokens[1].c_str()); + int countBone = 0; + + while (1) + { + // next line + std::getline(stream, sLine); + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + boneNames.push_back(sTokens[1]); + countBone++; + + if (countBone == numOfBones) + break; + } + } + if (token.find("numOfVertices") != std::string::npos) // load bone indices and weights for each strand + { + m_NumVertices = (AMD::uint32)atoi(sTokens[1].c_str()); + boneSkinningData.resize(m_NumVertices); + m_pTempVertices.resize(m_NumVertices); + m_pTempNormals.resize(m_NumVertices); + memset(boneSkinningData.data(), 0, sizeof(TressFXBoneSkinningData) * m_NumVertices); + + int index = 0; + + while (1) + { + // next line + std::getline(stream, sLine); + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + assert(numFound == 15); + + int vertexIndex = atoi(sTokens[0].c_str()); + assert(vertexIndex == index); + + AMD::float3& pos = m_pTempVertices[index]; + pos.x = (float)atof(sTokens[1].c_str()); + pos.y = (float)atof(sTokens[2].c_str()); + pos.z = (float)atof(sTokens[3].c_str()); + + AMD::float3& normal = m_pTempNormals[index]; + normal.x = (float)atof(sTokens[4].c_str()); + normal.y = (float)atof(sTokens[5].c_str()); + normal.z = (float)atof(sTokens[6].c_str()); + + TressFXBoneSkinningData skinData; + + + int boneIndex = atoi(sTokens[7].c_str()); + int engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[0] = (float)engineIndex; + + boneIndex = atoi(sTokens[8].c_str()); + engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[1] = (float)engineIndex; + + boneIndex = atoi(sTokens[9].c_str()); + engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[2] = (float)engineIndex; + + boneIndex = atoi(sTokens[10].c_str()); + engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[3] = (float)engineIndex; + + skinData.weight[0] = (float)atof(sTokens[11].c_str()); + skinData.weight[1] = (float)atof(sTokens[12].c_str()); + skinData.weight[2] = (float)atof(sTokens[13].c_str()); + skinData.weight[3] = (float)atof(sTokens[14].c_str()); + + boneSkinningData[index] = skinData; + + ++index; + + if (index == m_NumVertices) + break; + } + } + else if (token.find("numOfTriangles") != std::string::npos) // triangle indices + { + m_NumTriangles = atoi(sTokens[1].c_str()); + int numIndices = m_NumTriangles * 3; + m_pTempIndices.resize(numIndices); + int index = 0; + + while (1) + { + // next line + std::getline(stream, sLine); + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + assert(numFound == 4); + + int triangleIndex = atoi(sTokens[0].c_str()); + assert(triangleIndex == index); + + m_pTempIndices[index * 3 + 0] = atoi(sTokens[1].c_str()); + m_pTempIndices[index * 3 + 1] = atoi(sTokens[2].c_str()); + m_pTempIndices[index * 3 + 2] = atoi(sTokens[3].c_str()); + + + ++index; + + if (index == m_NumTriangles) + break; + } + } + } + m_pScene = scene; + m_followBone = scene->GetBoneIdByName(skinNumber, followBone); + return true; +} + +void TressFXBoneSkinning::Initialize(EI_RenderTargetSet * renderTargetSet, EI_Device* pDevice, + EI_CommandContext& commandContext, const char * name) +{ + // TODO: Following code should be moved to TransarencyPlugin.cpp. + + // load an effect for rendering + EI_BindLayout * layouts[] = { GetBoneSkinningMeshLayout() }; + //std::vector inputs; + + EI_PSOParams psoParams; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcColor; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::SrcAlpha; + + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = renderTargetSet; + m_pRenderEffect = pDevice->CreateGraphicsPSO("TressFXBoneSkinning.hlsl", "BoneSkinningVisualizationVS", "TressFXBoneSkinning.hlsl", "BoneSkinningVisualizationPS", psoParams); + + // create a vertex and normal buffer + size_t vertexBlockSize = GetSizeOfMeshElement(); + std::vector dataVB((AMD::uint32)(vertexBlockSize * m_NumVertices)); //position + normal + + for (size_t i = 0; i < m_NumVertices; ++i) + { + // position + memcpy(&dataVB[i * vertexBlockSize], &m_pTempVertices[i], sizeof(AMD::float3)); + + // normal + memcpy(&dataVB[i * vertexBlockSize + sizeof(AMD::float4)], &m_pTempNormals[i], sizeof(AMD::float3)); + } + + // create an index buffer + m_numIndices = (int)m_pTempIndices.size(); + m_pIndexBuffer = pDevice->CreateBufferResource(sizeof(AMD::int32), m_numIndices, EI_BF_INDEXBUFFER, "IndexBuffer"); + commandContext.UpdateBuffer(m_pIndexBuffer.get(), m_pTempIndices.data()); + + // UAV + m_CollMeshVertPositionsUAV = pDevice->CreateBufferResource((int)vertexBlockSize, (int)m_NumVertices, EI_BF_NEEDSUAV, "CollMesh"); + + EI_Barrier prepareMeshVertPositions[] = + { + { m_CollMeshVertPositionsUAV.get(), EI_STATE_UAV, EI_STATE_COPY_DEST } + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(prepareMeshVertPositions), prepareMeshVertPositions); + commandContext.UpdateBuffer(m_CollMeshVertPositionsUAV.get(), dataVB.data()); + + // SRV + { + m_BoneSkinningDataSRV = pDevice->CreateBufferResource(sizeof(TressFXBoneSkinningData), m_NumVertices, 0, "BoneSkinningData"); + commandContext.UpdateBuffer(m_BoneSkinningDataSRV.get(), boneSkinningData.data()); + + boneSkinningData.resize(0); + } + + { + m_InitialVertexPositionsSRV = pDevice->CreateBufferResource((AMD::uint32)vertexBlockSize, m_NumVertices, 0, "InitialVertexPositions"); + commandContext.UpdateBuffer(m_InitialVertexPositionsSRV.get(), dataVB.data()); + } + + { + m_TrimeshVertexIndicesSRV = pDevice->CreateBufferResource(sizeof(AMD::int32), (int)m_pTempIndices.size(), 0, "CSSkinningMeshIndices"); + commandContext.UpdateBuffer(m_TrimeshVertexIndicesSRV.get(), m_pTempIndices.data()); + } + + // constant buffer + m_pUniformBuffer = pDevice->CreateBufferResource(sizeof(TressFXBoneSkinningUniformBuffer), 1, EI_BF_UNIFORMBUFFER, "TressFXBoneSkinningUniformBuffer"); + + EI_Barrier finishUpload[] = + { + { m_CollMeshVertPositionsUAV.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_BoneSkinningDataSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_InitialVertexPositionsSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_TrimeshVertexIndicesSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(finishUpload), finishUpload); + + // Bind set + EI_BindSetDescription bindSet = { { m_BoneSkinningDataSRV.get(), m_InitialVertexPositionsSRV.get(), m_CollMeshVertPositionsUAV.get(), m_pUniformBuffer.get() } }; + m_pBindSet = pDevice->CreateBindSet(GetBoneSkinningMeshLayout(), bindSet); + + // update bbox + Vector3 center = Vector3(0.0f, 0.0f, 0.0f); + for (int i = 0; i < m_pTempVertices.size(); ++i) + { + center = center + Vector3(&m_pTempVertices[i].x); + } + center = center / (float)m_pTempVertices.size(); + float radius = 0.0f; + for (int i = 0; i < m_pTempVertices.size(); ++i) { + Vector3 distance = Vector3(&m_pTempVertices[i].x) - center; + radius = fmaxf(radius, distance.Length()); + } + m_bbMin = { center.x - radius, center.y - radius, center.z - radius }; + m_bbMax = { center.x + radius, center.y + radius, center.z + radius }; + + // release vertex and index arrays on CPU. + m_pTempVertices.clear(); + m_pTempNormals.clear(); + m_pTempIndices.clear(); + + // set color + m_MeshColor = { 1.f, 0.0f, 0.0f }; + + // load a compute shader + m_pComputeEffectSkinning = pDevice->CreateComputeShaderPSO("TressFXBoneSkinning.hlsl", "BoneSkinning", layouts, 1); +} + +Vector3 TressFXBoneSkinning::SkinPosition( int i ) +{ + int global_id = 0; + + AMD::float3 vert = m_pTempVertices[global_id]; + XMVECTOR pos = { vert.x, vert.y, vert.z, 1.0f }; + AMD::float3 normal = m_pTempNormals[global_id]; + XMVECTOR n = { normal.x, normal.y, normal.z, 0.0f }; + + // compute a bone skinning transform + TressFXBoneSkinningData skinning = boneSkinningData[global_id]; + + std::vector& skinningMatrices = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber); + // Interpolate world space bone matrices using weights. + XMMATRIX bone_matrix = skinningMatrices[(int)skinning.boneIndex[0]] * skinning.weight[0]; + float weight_sum = skinning.weight[0]; + + // Each vertex gets influence from four bones. In case there are less than four bones, boneIndex and boneWeight would be zero. + // This number four was set in Maya exporter and also used in loader. So it should not be changed unless you have a very strong reason and are willing to go through all spots. + for (int i = 1; i < 4; i++) + { + if (skinning.weight[i] > 0) + { + bone_matrix += skinningMatrices[(int)skinning.boneIndex[i]] * skinning.weight[i]; + weight_sum += skinning.weight[i]; + } + } + + bone_matrix /= weight_sum; + + pos = XMVector4Transform( pos, bone_matrix); + //n = mul(float4(n.xyz, 0), bone_matrix).xyz; + return Vector3(0.0f, 0.0f, 0.0f); +} + +void TressFXBoneSkinning::GetBoundingBox(Vector3& min, Vector3& max) +{ + XMMATRIX m = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber)[m_followBone]; // root matrix + XMVECTOR minvec = { m_bbMin.x, m_bbMin.y, m_bbMin.z, 1.0f }; + XMVECTOR maxvec = { m_bbMax.x, m_bbMax.y, m_bbMax.z, 1.0f }; + XMVECTOR center = (maxvec + minvec) / 2.0; + XMVECTOR newcenter = XMVector4Transform(center, m); + + minvec += newcenter - center; + maxvec += newcenter - center; + + XMStoreFloat3((XMFLOAT3*)&min, minvec); + XMStoreFloat3((XMFLOAT3*)&max, maxvec); +} + +void TressFXBoneSkinning::GetInitialBoundingBox(Vector3& min, Vector3& max) +{ + min = m_bbMin; + max = m_bbMax; +} + +void TressFXBoneSkinning::Update(EI_CommandContext& commandContext, double fTime) +{ + if (!m_pComputeEffectSkinning || !m_pScene || !m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber).size()) + return; + + EI_Marker marker(commandContext, "BoneSkinningUpdate"); + + // update animation model before getting the skinning matrices. + //m_pModel->UpdateObject(fTime); + std::vector boneMatrices = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber); + const float* pBoneMatricesInWS = (const float*)&boneMatrices[0]; + + //----------------------------- + // 1. BoneSkinning + //----------------------------- + //const SuArray& m_BoneMatricesPerFrame = m_pModel->GetSkinningMatrices(); + + for (int i = 0; i < boneMatrices.size(); ++i) + { + m_uniformBufferData.g_BoneSkinningMatrix[i] = *((AMD::float4x4*)&boneMatrices[i]); + } + m_uniformBufferData.g_NumMeshVertices = { (int)m_NumVertices, 0, 0, 0 }; + m_uniformBufferData.cColor = m_MeshColor; + m_uniformBufferData.vLightDir = { 1.0f, 1.0f, 1.0f }; + m_uniformBufferData.mMW = m_pScene->GetMV(); + m_uniformBufferData.mMVP = m_pScene->GetMVP(); + + commandContext.UpdateBuffer(m_pUniformBuffer.get(), &m_uniformBufferData); + + commandContext.BindPSO(m_pComputeEffectSkinning.get()); + EI_BindSet* bindSets[] = { m_pBindSet.get() }; + commandContext.BindSets(m_pComputeEffectSkinning.get(), 1, bindSets); + + // Run BoneSkinning + { + int numDispatchSize = + (int)ceil((float)m_NumVertices / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("BoneSkinning"); + } + + // State transition for DX12 + EI_Barrier flushSkinnedVerts[] = { { m_CollMeshVertPositionsUAV.get(), EI_STATE_UAV, EI_STATE_UAV } }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(flushSkinnedVerts), flushSkinnedVerts); +} + +// Adi: this is only the mesh debug render - not the actual skinned mesh +void TressFXBoneSkinning::DrawMesh(EI_CommandContext& commandContext) +{ + // draw the collision mesh + if (m_NumVertices > 0) + { + EI_Marker marker(commandContext, "BoneSkinningDrawMesh"); + // commandContext.BindPSO(m_pRenderEffect); + EI_BindSet* bindSets[] = { m_pBindSet.get() }; + commandContext.BindSets(m_pRenderEffect.get(), 1, bindSets); + EI_IndexedDrawParams drawParams; + drawParams.numIndices = m_numIndices; + drawParams.numInstances = 1; + drawParams.pIndexBuffer = m_pIndexBuffer.get(); + commandContext.DrawIndexedInstanced(*m_pRenderEffect.get(), drawParams); + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.h new file mode 100644 index 0000000000..5d45655822 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.h @@ -0,0 +1,138 @@ +// ---------------------------------------------------------------------------- +// Compute-based skinning. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef TRESSFXBONESKINNING_H_ +#define TRESSFXBONESKINNING_H_ + +// TressFX interfaces +#include "TressFXSDFInputMeshInterface.h" + +// TressFX +#include "TressFXAsset.h" +#include "TressFXCommon.h" +#include "AMD_Types.h" + +#include + +class EI_Scene; + +struct TressFXBoneSkinningUniformBuffer { + AMD::float4 cColor; + AMD::float4 vLightDir; + AMD::sint4 g_NumMeshVertices; + AMD::float4x4 mMW; + AMD::float4x4 mMVP; + AMD::float4x4 g_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +}; + +// Adi: this structure is required to for computing the per-frame SDF +class TressFXBoneSkinning : public TressFXSDFInputMeshInterface +{ +public: + + // Initialize effects and buffers. + void Initialize(EI_RenderTargetSet * renderPass, EI_Device* pDevice, EI_CommandContext& commandContext, const char * name); + + // Draw the mesh for debug purpose + void DrawMesh(EI_CommandContext& commandContext); + + // Update and animate the mesh + void Update(EI_CommandContext& commandContext, double fTime); + + Vector3 SkinPosition(int i); + + //inline SuAnimatedModel* GetModel() { return m_pModel; } + + bool LoadTressFXCollisionMeshData(EI_Scene * scene, const char* filePath, int skinNumber, const char* followBone); + + // TressFXSDFInputMeshInterface + virtual EI_Resource& GetMeshBuffer() { return *m_CollMeshVertPositionsUAV; } + virtual EI_Resource& GetTrimeshVertexIndicesBuffer() + { + return *m_TrimeshVertexIndicesSRV; + } + virtual int GetNumMeshVertices() { return m_NumVertices; } + virtual int GetNumMeshTriangle() { return m_NumTriangles; } + virtual void GetBoundingBox(Vector3& min, Vector3& max); + virtual void GetInitialBoundingBox(Vector3& min, Vector3& max); + virtual size_t GetSizeOfMeshElement() + { + return 4 * sizeof(float) + 4 * sizeof(float); + } // position + normal + +private: + EI_Scene * m_pScene; + + std::vector m_pTempVertices; + std::vector m_pTempNormals; + std::vector m_pTempIndices; + + std::vector boneSkinningData; + + // shader for rendering + //SuEffectPtr m_pRenderEffect; + std::unique_ptr m_pRenderEffect; + + // compute shader for bone skinning + std::unique_ptr m_pComputeEffectSkinning; + + // color to render the mesh for debug purpose + AMD::float4 m_MeshColor; + + // Stats for mesh topology + AMD::uint32 m_NumVertices; + AMD::uint32 m_NumTriangles; // the size of indices buffer is 3 time of this. + + // UAV + std::unique_ptr m_CollMeshVertPositionsUAV; + + // SRV + std::unique_ptr m_TrimeshVertexIndicesSRV; + std::unique_ptr m_BoneSkinningDataSRV; + std::unique_ptr m_InitialVertexPositionsSRV; + + // uniform buffers + std::unique_ptr m_pUniformBuffer; + TressFXBoneSkinningUniformBuffer m_uniformBufferData; + + // Binding + std::unique_ptr m_pBindSet; + + // bounding box + Vector3 m_bbMin; + Vector3 m_bbMax; + + // GPU buffers + std::unique_ptr m_pIndexBuffer; + int m_numIndices; + + int m_skinNumber; + int m_followBone; + + // animated model associated to this hair. + //SuAnimatedModel* m_pModel; +}; + +#endif // TRESSFXBONESKINNING_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXCommon.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXCommon.h new file mode 100644 index 0000000000..76168515ee --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXCommon.h @@ -0,0 +1,258 @@ +//--------------------------------------------------------------------------------------- +// Constant buffer layouts. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#pragma once + +//#ifndef TRESSFXCOMMON_H_ +//#define TRESSFXCOMMON_H_ + +#include + +#define TRESSFX_COLLISION_CAPSULES 0 +#define TRESSFX_MAX_NUM_COLLISION_CAPSULES 8 + +#define TRESSFX_SIM_THREAD_GROUP_SIZE 64 + +#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4201) // disable warning C4201: nonstandard extension used : nameless struct/union +#endif + +namespace AMD +{ + struct float2 + { + union + { + struct + { + float x, y; + }; + float v[2]; + }; + }; + struct float3 + { + union + { + struct + { + float x, y, z; + }; + float v[3]; + }; + }; + struct float4 + { + union + { + struct + { + float x, y, z, w; + }; + float v[4]; + }; + }; + struct float4x4 + { + union + { + float4 r[4]; + float m[16]; + }; + }; + struct uint2 + { + union + { + struct + { + unsigned int x, y; + }; + unsigned int v[2]; + }; + }; + struct uint3 + { + union + { + struct + { + unsigned int x, y, z; + }; + unsigned int v[3]; + }; + }; + struct uint4 + { + union + { + struct + { + unsigned int x, y, z, w; + }; + unsigned int v[4]; + }; + }; + struct sint2 + { + union + { + struct + { + int x, y; + }; + int v[2]; + }; + }; + struct sint3 + { + union + { + struct + { + int x, y, z; + }; + int v[3]; + }; + }; + struct sint4 + { + union + { + struct + { + int x, y, z, w; + }; + int v[4]; + }; + }; + struct sshort2 + { + union + { + struct + { + short x, y; + }; + short v[2]; + }; + }; + struct sshort3 + { + union + { + struct + { + short x, y, z; + }; + short v[3]; + }; + }; + struct sshort4 + { + union + { + struct + { + short x, y, z, w; + }; + short v[4]; + }; + }; + struct sbyte2 + { + union + { + struct + { + signed char x, y; + }; + signed char v[2]; + }; + }; + struct sbyte3 + { + union + { + struct + { + signed char x, y, z; + }; + signed char v[3]; + }; + }; + struct sbyte4 + { + union + { + struct + { + signed char x, y, z, w; + }; + signed char v[4]; + }; + }; + +} // namespace AMD + +#ifdef _MSC_VER + #pragma warning(pop) +#endif + +#ifdef TRESSFX_NON_COPYABLE_MODERN_CPP + +class TressFXNonCopyable +{ +public: + TressFXNonCopyable() = default; + ~TressFXNonCopyable() = default; + +protected: + TressFXNonCopyable(const TressFXNonCopyable&) = delete; + void operator=(const TressFXNonCopyable&) = delete; +}; + +#else + +class TressFXNonCopyable +{ +public: + TressFXNonCopyable() {} + ~TressFXNonCopyable() {} + + TressFXNonCopyable(TressFXNonCopyable const&) = delete; + TressFXNonCopyable& operator=(TressFXNonCopyable const&) = delete; +}; + +#endif + +/// Computes the minimum +template +inline Type TressFXMin(Type a, Type b) +{ + return (a < b) ? a : b; +} + +//#endif // TRESSFXCOMMON_H_ diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXConstantBuffers.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXConstantBuffers.h new file mode 100644 index 0000000000..e434660ac6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXConstantBuffers.h @@ -0,0 +1,258 @@ +//--------------------------------------------------------------------------------------- +// Constant buffer layouts. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include +#include + +// Contains data typically passed through constant buffers. + +namespace AMD +{ + struct TressFXViewParams + { + float4x4 mVP; + float4 vEye; + float4 vViewport; + float4x4 mInvViewProj; + }; + + struct TressFXSimulationParams + { + float4 m_Wind; + float4 m_Wind1; + float4 m_Wind2; + float4 m_Wind3; + + float4 m_Shape; // damping, local stiffness, global stiffness, global range. + // float m_Damping; + // float m_StiffnessForLocalShapeMatching; + // float m_StiffnessForGlobalShapeMatching; + // float m_GlobalShapeMatchingEffectiveRange; + + float4 m_GravTimeTip; // gravity, time step size, + // float m_GravityMagnitude; + // float m_TimeStep; + // float m_TipSeparationFactor; + // float m_velocityShockPropogation; + + sint4 m_SimInts; // 4th component unused. + // int m_NumLengthConstraintIterations; + // int m_NumLocalShapeMatchingIterations; + // int m_bCollision; + // int m_CPULocalIterations; + + sint4 m_Counts; + // int m_NumOfStrandsPerThreadGroup; + // int m_NumFollowHairsPerGuideHair; + // int m_NumVerticesPerStrand; // should be 2^n (n is integer and greater than 2) and less than + // or equal to TRESSFX_SIM_THREAD_GROUP_SIZE. i.e. 8, 16, 32 or 64 + + float4 m_VSP; + + float g_ResetPositions; + float g_ClampPositionDelta; + float g_pad1; + float g_pad2; + + float4x4 m_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; + +#if TRESSFX_COLLISION_CAPSULES + float4 m_centerAndRadius0[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + float4 m_centerAndRadius1[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + sint4 m_numCollisionCapsules; +#endif + + + void SetDamping(float d) { m_Shape.x = d; } + void SetLocalStiffness(float s) { m_Shape.y = s; } + void SetGlobalStiffness(float s) { m_Shape.z = s; } + void SetGlobalRange(float r) { m_Shape.w = r; } + + void SetGravity(float g) { m_GravTimeTip.x = g; } + void SetTimeStep(float dt) { m_GravTimeTip.y = dt; } + void SetTipSeperation(float ts) { m_GravTimeTip.z = ts; } + + void SetVelocityShockPropogation(float vsp) { m_VSP.x = vsp; } + void SetVSPAccelThreshold(float vspAccelThreshold) { m_VSP.y = vspAccelThreshold; } + + void SetLengthIterations(int i) { m_SimInts.x = i; } + void SetLocalIterations(int i) { m_SimInts.y = i; } + void SetCollision(bool on) { m_SimInts.z = on ? 1 : 0; } + + void SetVerticesPerStrand(int n) + { + m_Counts.x = TRESSFX_SIM_THREAD_GROUP_SIZE / n; + m_Counts.z = n; + } + void SetFollowHairsPerGuidHair(int n) { m_Counts.y = n; } + }; + + struct TressFXCapsuleCollisionConstantBuffer + { + float4 m_centerAndRadius[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + float4 m_centerAndRadiusSquared[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + int m_numCollisionCapsules; + }; + + struct TressFXSDFCollisionParams + { + float4 m_Origin; + float m_CellSize; + int m_NumCellsX; + int m_NumCellsY; + int m_NumCellsZ; + int m_MaxMarchingCubesVertices; + float m_MarchingCubesIsolevel; + float m_CollisionMargin; + int m_NumHairVerticesPerStrand; + int m_NumTotalHairVertices; + float pad1; + float pad2; + float pad3; + }; + + // If you change this, you MUST also change TressFXParameters in HairRenderingSrgs.azsli + struct TressFXRenderParams // TressFXParameters + { + // General information + float FiberRadius = 0.0021f; + + // For deep approximated shadow lookup + float ShadowAlpha = 0.35f; + float FiberSpacing = 0.4f; + + // Original TressFX Kajiya lighting model parameters + float HairKs2 = 0.072f; + float HairEx2 = 11.80f; + float3 fPadding0; + + float4 MatKValue = {{{0.f, 0.07f, 0.0017f, 14.40f}}}; // KAmbient, KDiffuse, KSpec1, Exp1 + + int MaxShadowFibers = 50; + + // Marschner lighting model parameters + float Roughness; + float CuticleTilt; // tile angle in radians + + float fPadding1; + }; + + // If you change this, you MUST also change TressFXStrandParameters in HairRenderingSrgs.azsli + struct TressFXStrandParams // TressFXStrandParameters + { + // For lighting/shading + float4 MatBaseColor = {{{1.f, 1.f, 1.f, 0.63f}}}; + float4 MatTipColor = {{{0.5f, 0.5f, 1.f, 0.63f}}}; + + // General information + float TipPercentage = 0.5f; + float StrandUVTilingFactor = 1.f; + float FiberRatio = 0.463f; + float FiberRadius = 0.0021f; + + int NumVerticesPerStrand = 32; + int EnableThinTip = 0; + + // For PPLL + int NodePoolSize = 0; + int RenderParamsIndex = 0; + + // Other params + int EnableStrandUV = 0; + int EnableStrandTangent = 0; + sint2 iPadding1; + }; + + //-------------------------------------------------------------------------- + //! This structure is used as the per object material. + //! It is filled per hair object and set in an array that represents the + //! materials of all hair objects in the scene. + //! The per draw raster pass will write per pixel data with index of the + //! material so that the resolve pass can use it a lookup table to shade + //! the pixel per the hair object it belongs to. + struct ShadeParams + { + // General information + float FiberRadius = 0.002f; + // For deep approximated shadow lookup + float ShadowAlpha = 0.35f; + float FiberSpacing = 0.4f; + + // Original TressFX Kajiya lighting model parameters + float HairEx2 = 11.80f; + float4 MatKValue = {{{0.f, 0.07f, 0.0017f, 14.40f}}}; // KAmbient, KDiffuse, KSpec1, Exp1 + float HairKs2 = 0.072f; + + // Marschner lighting model parameters + float Roughness; + float CuticleTilt; // tile angle in radians + + float fPadding0; + }; + + //! Hair objects material array - passed as a constant structure used by + //! the resolve pass to shader hair pixels given the index via the PPLL. + struct TressFXShadeParams + { + ShadeParams HairShadeParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; + }; + //-------------------------------------------------------------------------- + + + // If you change this, you MUST also change TressFXLightParameters in TressFXRendering.hlsl +#define AMD_TRESSFX_MAX_LIGHTS 10 + + struct LightParams + { + float LightIntensity = 1.f; // fLightIntensity in Sushi + float LightOuterConeCos = 0.70710678f; // vLightConeAngles.x in Sushi + float LightInnerConeCos = 0.70710678f; // vLightConeAngles.y in Sushi + float LightRange = 100.f; // vLightConeAngles.z in Sushi + + float4 LightPositionWS = {{{0.f, 0.f, 0.f, 0.f}}};// vLightPosWS in Sushi + float4 LightDirWS = {{{0.f, -1.f, 0.f, 0.f}}}; // vLightDirWS in Sushi + float4 LightColor = {{{1.f, 1.f, 1.f, 0.f}}}; // vLightColor in Sushi + + float4x4 ShadowProjection; + float4 ShadowParams = {{{0.0007f, 0.f, 0.f, 0.f}}}; + + int LightType = 3; // vLightParams.x in Sushi + int ShadowMapIndex = -1; + int ShadowMapSize = 2048; + int Padding; + }; + + struct TressFXLightParams + { + int NumLights; + int UseDepthApproximation; + sint2 Padding; + LightParams LightInfo[AMD_TRESSFX_MAX_LIGHTS]; + }; + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXFileFormat.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXFileFormat.h new file mode 100644 index 0000000000..7e5f854c07 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXFileFormat.h @@ -0,0 +1,66 @@ +//--------------------------------------------------------------------------------------- +// Header file that defines the .tfx binary file format. This is the format that will +// be exported by authoring tools, and is the standard file format for hair data. The game +// can either read this file directly, or further procsessing can be done offline to improve +// load times. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +namespace AMD +{ + // TressFXTFXFileHeader Structure + // + // This structure defines the header of the file. The actual vertex data follows this as specified by the offsets. + struct TressFXTFXFileHeader + { + float version; // Specifies TressFX version number + unsigned int numHairStrands; // Number of hair strands in this file. All strands in this file are guide strands. + // Follow hair strands are generated procedurally. + unsigned int numVerticesPerStrand; // From 4 to 64 inclusive (POW2 only). This should be a fixed value within tfx value. + // The total vertices from the tfx file is numHairStrands * numVerticesPerStrand. + + // Offsets to array data starts here. Offset values are in bytes, aligned on 8 bytes boundaries, + // and relative to beginning of the .tfx file + unsigned int offsetVertexPosition; // Array size: FLOAT4[numHairStrands] + unsigned int offsetStrandUV; // Array size: FLOAT2[numHairStrands], if 0 no texture coordinates + unsigned int offsetVertexUV; // Array size: FLOAT2[numHairStrands * numVerticesPerStrand], if 0, no per vertex texture coordinates + unsigned int offsetStrandThickness; // Array size: float[numHairStrands] + unsigned int offsetVertexColor; // Array size: FLOAT4[numHairStrands * numVerticesPerStrand], if 0, no vertex colors + + unsigned int reserved[32]; // Reserved for future versions + }; + + struct TressFXTFXBoneFileHeader + { + float version; + unsigned int numHairStrands; + unsigned int numInfluenceBones; + unsigned int offsetBoneNames; + unsigned int offsetSkinningData; + unsigned int reserved[32]; + }; +} // namespace AMD + + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.cpp new file mode 100644 index 0000000000..c4f6d55576 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.cpp @@ -0,0 +1,607 @@ +// ---------------------------------------------------------------------------- +// Interface to strands of hair. Both in terms of rendering, and the data +// required for simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "TressFXHairObject.h" + +// TressFX +#include "Math/Matrix44.h" +#include "Math/Vector3D.h" +#include "TressFXAsset.h" +#include "TressFXLayouts.h" +#include "EngineInterface.h" + +#include + +using namespace AMD; + +#define TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION 64 + +// Load simulation compute shader and create all buffers +// command context used to upload initial data. +TressFXHairObject::TressFXHairObject(TressFXAsset* asset, + EI_Device* pDevice, + EI_CommandContext& commandContext, + const char * name, int RenderIndex) : + m_NumTotalVertices(0), + m_NumTotalStrands(0), + m_NumVerticesPerStrand(0), + m_CPULocalShapeIterations(0), + m_SimulationFrame(0), + m_RenderIndex(RenderIndex), + m_pRenderLayoutBindSet(nullptr) +{ + m_NumTotalVertices = asset->m_numTotalVertices; + m_NumTotalStrands = asset->m_numTotalStrands; + m_NumVerticesPerStrand = asset->m_numVerticesPerStrand; + + // Create buffers for simulation + { + m_DynamicState.CreateGPUResources(pDevice, m_NumTotalVertices, m_NumTotalStrands, name, asset); + + m_SimCB[0].CreateBufferResource("TressFXSimulationConstantBuffer"); + m_SimCB[1].CreateBufferResource("TressFXSimulationConstantBuffer"); + m_RenderCB.CreateBufferResource("TressFXRenderConstantBuffer"); + m_StrandCB.CreateBufferResource("TressFXStrandConstantBuffer"); + + // initial hair positions + m_InitialHairPositionsBuffer = + pDevice->CreateBufferResource( + sizeof(AMD::float4), + m_NumTotalVertices, + 0, + "InitialPosition" + ); + + // rest lengths + m_HairRestLengthSRVBuffer = + pDevice->CreateBufferResource( + sizeof(float), + m_NumTotalVertices, + 0, + "RestLength"); + + + + // strand types + m_HairStrandTypeBuffer = pDevice->CreateBufferResource( + sizeof(int), + m_NumTotalStrands, + 0, + "StrandType"); + + // follow hair root offsets + m_FollowHairRootOffsetBuffer = + pDevice->CreateBufferResource( + sizeof(AMD::float4), + m_NumTotalStrands, + 0, + "RootOffset"); + + + // bone skinning data + m_BoneSkinningDataBuffer = pDevice->CreateBufferResource(sizeof(TressFXBoneSkinningData), m_NumTotalStrands, 0, "SkinningData"); + + } + + // UPLOAD INITIAL DATA + // UAVs must first be transitioned for copy dest, since they start with UAV state. + // When done, we transition to appropriate state for start of first frame. + + m_DynamicState.UploadGPUData( + commandContext, asset->m_positions.data(), asset->m_tangents.data(), m_NumTotalVertices); + + commandContext.UpdateBuffer(m_InitialHairPositionsBuffer.get(), asset->m_positions.data()); + commandContext.UpdateBuffer(m_HairRestLengthSRVBuffer.get(), asset->m_restLengths.data()); + commandContext.UpdateBuffer(m_HairStrandTypeBuffer.get(), asset->m_strandTypes.data()); + commandContext.UpdateBuffer(m_FollowHairRootOffsetBuffer.get(), asset->m_followRootOffsets.data()); + commandContext.UpdateBuffer(m_BoneSkinningDataBuffer.get(), asset->m_boneSkinningData.data()); + + EI_Barrier copyBarriers[] = + { + { m_InitialHairPositionsBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_HairRestLengthSRVBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_HairStrandTypeBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_FollowHairRootOffsetBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_BoneSkinningDataBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(copyBarriers), (EI_Barrier*)copyBarriers); + + m_NumVerticesPerStrand = asset->m_numVerticesPerStrand; + m_NumFollowHairsPerGuideHair = asset->m_numFollowStrandsPerGuide; + + // Bind set + for (int i = 0; i < 2; ++i) + { + EI_BindSetDescription bindSet = + { + { + // SRVs + m_InitialHairPositionsBuffer.get(), + m_HairRestLengthSRVBuffer.get(), + m_HairStrandTypeBuffer.get(), + m_FollowHairRootOffsetBuffer.get(), + m_BoneSkinningDataBuffer.get(), + // CB + m_SimCB[i].GetBufferResource() + } + }; + + m_pSimBindSet[i] = pDevice->CreateBindSet(GetSimLayout(), bindSet); + + } + + // Set up with defaults. + ResetPositions(); + + // Rendering setup + CreateRenderingGPUResources(pDevice, *asset, name); + PopulateDrawStrandsBindSet(pDevice, nullptr); // Null at the beginning + UploadRenderingGPUResources(commandContext, *asset); + +} + +// TODO Move wind settings to Simulation Parameters or whatever. + +// Wind is in a pyramid around the main wind direction. +// To add a random appearance, the shader will sample some direction +// within this cone based on the strand index. +// This function computes the vector for each edge of the pyramid. +static void SetWindCorner(Quaternion rotFromXAxisToWindDir, + Vector3 rotAxis, + float angleToWideWindCone, + float wM, + AMD::float4& outVec) +{ + static const Vector3 XAxis(1.0f, 0, 0); + Quaternion rot(rotAxis, angleToWideWindCone); + Vector3 newWindDir = rotFromXAxisToWindDir * rot * XAxis; + outVec.x = newWindDir.x * wM; + outVec.y = newWindDir.y * wM; + outVec.z = newWindDir.z * wM; + outVec.w = 0; // unused. +} + +const float MATH_PI2 = 3.14159265359f; +#define DEG_TO_RAD2(d) (d * MATH_PI2 / 180) + + +void TressFXHairObject::SetWind(const Vector3& windDir, float windMag, int frame) +{ + float wM = windMag * (pow(sin(frame * 0.01f), 2.0f) + 0.5f); + + Vector3 windDirN(windDir); + windDirN.Normalize(); + + Vector3 XAxis(1.0f, 0, 0); + Vector3 xCrossW = XAxis.Cross(windDirN); + + Quaternion rotFromXAxisToWindDir; + rotFromXAxisToWindDir.SetIdentity(); + + float angle = asin(xCrossW.Length()); + + if (angle > 0.001) + { + rotFromXAxisToWindDir.SetRotation(xCrossW.Normalize(), angle); + } + + float angleToWideWindCone = DEG_TO_RAD2(40.f); + + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, 1.0, 0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind); + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, -1.0, 0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind1); + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, 0, 1.0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind2); + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, 0, -1.0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind3); + + // fourth component unused. (used to store frame number, but no longer used). +} + +void TressFXHairObject::UpdatePerObjectRenderParams(EI_CommandContext& commandContext) +{ + m_RenderCB.Update(commandContext); + m_StrandCB.Update(commandContext); +} + +void TressFXHairObject::DrawStrands(EI_CommandContext& commandContext, + EI_PSO& pso, + EI_BindSet** extraBindSets, + uint32_t numExtraBindSets) +{ + // at some point, should probably pass these in to EI_BindAndDrawIndexedInstanced. + static const uint32_t MaxSetsToBind = 10; // Grow as needed + EI_BindSet* sets[MaxSetsToBind]; + + // First 2 sets are always the RenderLayout and PosTanCollection + sets[0] = m_pRenderLayoutBindSet.get(); sets[1] = &m_DynamicState.GetRenderBindSet(); + + for (uint32_t i = 0; i < numExtraBindSets; ++i) + sets[2+i] = extraBindSets[i]; + + commandContext.BindSets(&pso, 2 + numExtraBindSets, sets); + AMD::uint32 nStrandCopies = 1; + + uint32_t NumPrimsToRender = (m_TotalIndices / 3); + + if (m_LODHairDensity != 1.f) + { + NumPrimsToRender = uint32_t(float(NumPrimsToRender) * m_LODHairDensity); + + // Calculate a new number of Primitives to draw. Keep it aligned to number of primitives per strand (i.e. don't cut strands in half or anything) + uint32 NumPrimsPerStrand = (m_NumVerticesPerStrand - 1) * 2; + uint32 RemainderPrims = NumPrimsToRender % NumPrimsPerStrand; + + NumPrimsToRender = (RemainderPrims > 0) ? NumPrimsToRender + NumPrimsPerStrand - RemainderPrims : NumPrimsToRender; + + // Force prims to be on (guide hair + its follow hairs boundary... no partial groupings) + NumPrimsToRender = NumPrimsToRender - (NumPrimsToRender % (NumPrimsPerStrand * (m_NumFollowHairsPerGuideHair + 1))); + } + + EI_IndexedDrawParams drawParams; + drawParams.pIndexBuffer = m_pIndexBuffer.get(); + drawParams.numIndices = NumPrimsToRender * 3; + drawParams.numInstances = nStrandCopies; + + commandContext.DrawIndexedInstanced(pso, drawParams); +} + +void TressFXHairObject::CreateRenderingGPUResources(EI_Device* pDevice, + TressFXAsset& asset, + const char * name) +{ + // If rendering is seperated, we might be copying the asset count to the local member variable. + // But since this is currently loaded after simulation right now, we'll just make sure + // it's already set. + TRESSFX_ASSERT(asset.m_numTotalStrands == m_NumTotalStrands); + TRESSFX_ASSERT(asset.m_numTotalVertices == m_NumTotalVertices); + m_TotalIndices = asset.GetNumHairTriangleIndices(); // asset.GetNumHairTriangleIndices(); + + if (asset.m_strandUV.data()) + { + m_HairTexCoords = pDevice->CreateBufferResource( + 2 * sizeof(AMD::real32), + m_NumTotalStrands, + 0, + "TexCoords"); + } + + m_HairVertexRenderParams = pDevice->CreateBufferResource( + sizeof(AMD::real32), + m_NumTotalVertices, + 0, + "VertRenderParams"); + + // TODO seperate creation from upload. Go through a real interface. + m_pIndexBuffer = pDevice->CreateBufferResource( sizeof(AMD::int32), m_TotalIndices, EI_BF_INDEXBUFFER, name); +} + +void TressFXHairObject::UploadRenderingGPUResources(EI_CommandContext& commandContext, + TressFXAsset& asset) +{ + TRESSFX_ASSERT(asset.m_numTotalStrands == m_NumTotalStrands); + TRESSFX_ASSERT(asset.m_numTotalVertices == m_NumTotalVertices); + TRESSFX_ASSERT(m_TotalIndices == asset.GetNumHairTriangleIndices()); + + if (asset.m_strandUV.data()) + { + commandContext.UpdateBuffer(m_HairTexCoords.get(), asset.m_strandUV.data()); + } + + commandContext.UpdateBuffer(m_HairVertexRenderParams.get(), asset.m_thicknessCoeffs.data()); + commandContext.UpdateBuffer(m_pIndexBuffer.get(), asset.m_triangleIndices.data()); + + EI_Barrier copyToVS[] = + { + { m_HairTexCoords.get(), EI_STATE_COPY_DEST, EI_STATE_SRV}, + { m_HairVertexRenderParams.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_pIndexBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_INDEX_BUFFER } + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(copyToVS), copyToVS); + +} + +void TressFXHairObject::PopulateDrawStrandsBindSet(EI_Device* pDevice, TressFXRenderingSettings* pRenderSettings/*=nullptr*/) +{ + if (pRenderSettings) + { + if (pRenderSettings->m_BaseAlbedoName != "") + { + m_BaseAlbedo = GetDevice()->CreateResourceFromFile(pRenderSettings->m_BaseAlbedoName.c_str(), true); + } + if (pRenderSettings->m_StrandAlbedoName != "") + { + m_StrandAlbedo = GetDevice()->CreateResourceFromFile(pRenderSettings->m_BaseAlbedoName.c_str(), true); + } + } + EI_BindSetDescription bindSetDesc = + { + { + m_HairVertexRenderParams.get(), + m_HairTexCoords.get(), + m_BaseAlbedo.get() ? m_BaseAlbedo.get() : pDevice->GetDefaultWhiteTexture(), + m_RenderCB.GetBufferResource(), + m_StrandCB.GetBufferResource(), + m_StrandAlbedo.get() ? m_StrandAlbedo.get() : pDevice->GetDefaultWhiteTexture(), + } + }; + m_pRenderLayoutBindSet = pDevice->CreateBindSet(GetTressFXParamLayout(), bindSetDesc); +} + +void TressFXHairObject::UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices) +{ + int numMatrices = min(numBoneMatrices, AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + m_SimCB[m_SimulationFrame%2]->m_BoneSkinningMatrix[i] = pBoneMatricesInWS[i]; + } +} + +void TressFXHairObject::UpdateConstantBuffer(EI_CommandContext& commandContext) +{ + m_SimCB[m_SimulationFrame%2].Update(commandContext); +} + +void TressFXHairObject::UpdateSimulationParameters(const TressFXSimulationSettings* settings, float timeStep) +{ + m_SimCB[m_SimulationFrame%2]->SetVelocityShockPropogation(settings->m_vspCoeff); + m_SimCB[m_SimulationFrame%2]->SetVSPAccelThreshold(settings->m_vspAccelThreshold); + m_SimCB[m_SimulationFrame%2]->SetDamping(settings->m_damping); + m_SimCB[m_SimulationFrame%2]->SetLocalStiffness(settings->m_localConstraintStiffness); + m_SimCB[m_SimulationFrame%2]->SetGlobalStiffness(settings->m_globalConstraintStiffness); + m_SimCB[m_SimulationFrame%2]->SetGlobalRange(settings->m_globalConstraintsRange); + m_SimCB[m_SimulationFrame%2]->SetLocalStiffness(settings->m_localConstraintStiffness); + m_SimCB[m_SimulationFrame%2]->SetGravity(settings->m_gravityMagnitude); + m_SimCB[m_SimulationFrame%2]->SetTimeStep(timeStep); + m_SimCB[m_SimulationFrame%2]->SetCollision(false); + m_SimCB[m_SimulationFrame%2]->SetVerticesPerStrand(m_NumVerticesPerStrand); + m_SimCB[m_SimulationFrame%2]->SetFollowHairsPerGuidHair(m_NumFollowHairsPerGuideHair); + m_SimCB[m_SimulationFrame%2]->SetTipSeperation(settings->m_tipSeparation); + + // use 1.0 for now, this needs to be maxVelocity * timestep + m_SimCB[m_SimulationFrame % 2]->g_ClampPositionDelta = 20.0f; + + // Right now, we do all local contraint iterations on the CPU. + // It's actually a bit faster to + + if (m_NumVerticesPerStrand >= TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION) + { + m_SimCB[m_SimulationFrame % 2]->SetLocalIterations((int)settings->m_localConstraintsIterations); + m_CPULocalShapeIterations = 1; + } + else + { + m_SimCB[m_SimulationFrame % 2]->SetLocalIterations(1); + m_CPULocalShapeIterations = (int)settings->m_localConstraintsIterations; + } + + m_SimCB[m_SimulationFrame % 2]->SetLengthIterations((int)settings->m_lengthConstraintsIterations); + + // Set wind parameters + Vector3 windDir( + settings->m_windDirection[0], settings->m_windDirection[1], settings->m_windDirection[2]); + float windMag = settings->m_windMagnitude; + SetWind(windDir, windMag, m_SimulationFrame); + + +#if TRESSFX_COLLISION_CAPSULES + m_SimCB.m_numCollisionCapsules.x = 0; + + // Below is an example showing how to pass capsule collision objects. + /* + mSimCB.m_numCollisionCapsules.x = 1; + mSimCB.m_centerAndRadius0[0] = { 0, 0.f, 0.f, 50.f }; + mSimCB.m_centerAndRadius1[0] = { 0, 100.f, 0, 10.f }; + */ +#endif + // make sure we start of with a correct pose + if (m_SimulationFrame < 2) + ResetPositions(); + + // Bone matrix set elsewhere. It is not dependent on the settings passed in here. +} + +void TressFXHairObject::UpdateRenderingParameters(const TressFXRenderingSettings* parameters, const int NodePoolSize, float timeStep, float Distance, bool ShadowUpdate /*= false*/) +{ + // Update Render Parameters + m_RenderCB->FiberRadius = parameters->m_FiberRadius; // Don't modify radius by LOD multiplier as this one is used to calculate shadowing and that calculation should remain unaffected + + m_RenderCB->ShadowAlpha = parameters->m_HairShadowAlpha; + m_RenderCB->FiberSpacing = parameters->m_HairFiberSpacing; + + m_RenderCB->HairKs2 = parameters->m_HairKSpec2; + m_RenderCB->HairEx2 = parameters->m_HairSpecExp2; + m_RenderCB->MatKValue = { 0.f, parameters->m_HairKDiffuse, parameters->m_HairKSpec1, parameters->m_HairSpecExp1 }; // no ambient + + // Marschner lighting model parameters + m_RenderCB->Roughness = parameters->m_HairRoughness; + m_RenderCB->CuticleTilt = parameters->m_HairCuticleTilt; + + m_RenderCB->MaxShadowFibers = parameters->m_HairMaxShadowFibers; + + // Update Strand Parameters (per hair object) + m_StrandCB->MatBaseColor = parameters->m_HairMatBaseColor; + m_StrandCB->MatTipColor = parameters->m_HairMatTipColor; + m_StrandCB->TipPercentage = parameters->m_TipPercentage; + m_StrandCB->StrandUVTilingFactor = parameters->m_StrandUVTilingFactor; + m_StrandCB->FiberRatio = parameters->m_FiberRatio; + + // Reset LOD hair density for the frame + m_LODHairDensity = 1.f; + + float FiberRadius = parameters->m_FiberRadius; + if (parameters->m_EnableHairLOD) + { + float MinLODDist = ShadowUpdate? min(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : min(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + float MaxLODDist = ShadowUpdate? max(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : max(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + + if (Distance > MinLODDist) + { + float DistanceRatio = min((Distance - MinLODDist) / max(MaxLODDist - MinLODDist, 0.00001f), 1.f); + + // Lerp: x + s(y-x) + float MaxLODFiberRadius = FiberRadius * (ShadowUpdate? parameters->m_ShadowLODWidthMultiplier : parameters->m_LODWidthMultiplier); + FiberRadius = FiberRadius + (DistanceRatio * (MaxLODFiberRadius - FiberRadius)); + + // Lerp: x + s(y-x) + m_LODHairDensity = 1.f + (DistanceRatio * ((ShadowUpdate ? parameters->m_ShadowLODPercent : parameters->m_LODPercent) - 1.f)); + } + } + + m_StrandCB->FiberRadius = FiberRadius; + + m_StrandCB->NumVerticesPerStrand = m_NumVerticesPerStrand; // Always constant + m_StrandCB->EnableThinTip = parameters->m_EnableThinTip; + m_StrandCB->NodePoolSize = NodePoolSize; + m_StrandCB->RenderParamsIndex = m_RenderIndex; // Always constant + + m_StrandCB->EnableStrandUV = parameters->m_EnableStrandUV; + m_StrandCB->EnableStrandTangent = parameters->m_EnableStrandTangent; +} + +// Positions and tangents are handled in the following order, from the point of view of each +// buffer. +// +// Positions updated from previous sim output by copy. (COPY_DEST) +// Simulate updates mPositions and mPositionsPrev (UAVs) also updates mTangents (this might move) +// SDF updates mPositions and mPositionsPrev (UAVs) +// Render with mPositions and mTangnets (PS SRVs) + +void TressFXDynamicState::CreateGPUResources(EI_Device* pDevice, int numVertices, int numStrands, const char * name, TressFXAsset* asset) +{ + m_PositionsPrev = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "PosPrev"); + m_PositionsPrevPrev = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "PosPrevPrev"); + m_Positions = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "Pos"); + m_Tangents = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "Tan"); + m_StrandLevelData = pDevice->CreateBufferResource(sizeof(TressFXStrandLevelData), numStrands, EI_BF_NEEDSUAV, "StrandLevelData"); + + EI_BindSetDescription bindSet; + + bindSet = { + {m_Positions.get(), m_PositionsPrev.get(), m_PositionsPrevPrev.get(), m_Tangents.get(), m_StrandLevelData.get() } + }; + m_pSimBindSets = pDevice->CreateBindSet(GetSimPosTanLayout(), bindSet); + + bindSet = { + {m_Positions.get(), m_PositionsPrev.get()} + }; + m_pApplySDFBindSets = pDevice->CreateBindSet(GetApplySDFLayout(), bindSet); + + bindSet = { + {m_Positions.get(), m_Tangents.get()} + }; + m_pRenderBindSets = pDevice->CreateBindSet(GetRenderPosTanLayout(), bindSet); +} + +void TressFXDynamicState::UploadGPUData(EI_CommandContext& commandContext, void* pos, void* tan, int numVertices) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_Tangents != nullptr); + TRESSFX_ASSERT(m_PositionsPrev != nullptr); + TRESSFX_ASSERT(m_PositionsPrevPrev != nullptr); + + EI_Barrier uavToUpload[] = + { + { m_Positions.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_Tangents.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_PositionsPrev.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_PositionsPrevPrev.get(), EI_STATE_UAV, EI_STATE_COPY_DEST } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavToUpload), uavToUpload); + + + commandContext.UpdateBuffer(m_Positions.get(), pos); + commandContext.UpdateBuffer(m_Tangents.get(), tan); + commandContext.UpdateBuffer(m_PositionsPrev.get(), pos); + commandContext.UpdateBuffer(m_PositionsPrevPrev.get(), pos); + + EI_Barrier uploadToUAV[] = + { + { m_Positions.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_Tangents.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_PositionsPrev.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_PositionsPrevPrev.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uploadToUAV), uploadToUAV); +} + +void TressFXDynamicState::TransitionSimToRendering(EI_CommandContext& commandContext) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_Tangents != nullptr); + + EI_Barrier simToRender[] = + { + { m_Positions.get(), EI_STATE_UAV, EI_STATE_SRV }, + { m_Tangents.get(), EI_STATE_UAV, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(simToRender), simToRender); +} + +void TressFXDynamicState::TransitionRenderingToSim(EI_CommandContext& commandContext) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_Tangents != nullptr); + + EI_Barrier renderToSim[] = + { + { m_Positions.get(), EI_STATE_SRV, EI_STATE_UAV }, + { m_Tangents.get(), EI_STATE_SRV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(renderToSim), renderToSim); +} + +void TressFXDynamicState::UAVBarrier(EI_CommandContext& commandContext) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_PositionsPrev != nullptr); + TRESSFX_ASSERT(m_PositionsPrevPrev != nullptr); + + EI_Barrier uav[] = + { + { m_Positions.get(), EI_STATE_UAV, EI_STATE_UAV }, + { m_PositionsPrev.get(), EI_STATE_UAV, EI_STATE_UAV }, + { m_PositionsPrevPrev.get(), EI_STATE_UAV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uav), uav); + + // Assuming tangent is only written by one kernel, so will get caught with transition to SRV + // for rendering. +} diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.h new file mode 100644 index 0000000000..f5a1d60038 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.h @@ -0,0 +1,193 @@ +// ---------------------------------------------------------------------------- +// Interface to strands of hair. Both in terms of rendering, and the data +// required for simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef TRESSFXHAIROBJECT_H_ +#define TRESSFXHAIROBJECT_H_ + +// AMD +#include "AMD_Types.h" + +// TressFX +#include "TressFXAsset.h" +#include "TressFXConstantBuffers.h" +#include "AMD_Types.h" +#include "AMD_TressFX.h" +#include "TressFXCommon.h" +#include "TressFXSettings.h" +#include "EngineInterface.h" + +// Contains the dynamic data +// which is used by 3 modules: +// simulation, sigend distance field, and rendering. +// Rendering uses current position and tangent as SRVs in VS. +class TressFXDynamicState +{ +public: + void CreateGPUResources(EI_Device* pDevice, int numVertices, int numStrands, const char * name, TressFXAsset* asset); + void UploadGPUData(EI_CommandContext& commandContext, void* pos, void* tan, int numVertices); + + // UAV Barriers on buffers used in simulation. + void UAVBarrier(EI_CommandContext& commandContext); + + // Transitions to move between simulation (UAV) and rendering (SRV). + void TransitionSimToRendering(EI_CommandContext& commandContext); + void TransitionRenderingToSim(EI_CommandContext& commandContext); + + EI_BindSet& GetSimBindSet() { return *m_pSimBindSets; } + EI_BindSet& GetApplySDFBindSet() + { + return *m_pApplySDFBindSets; + } + EI_BindSet& GetRenderBindSet() { return *m_pRenderBindSets; } + +private: + std::unique_ptr m_Positions; + std::unique_ptr m_Tangents; + std::unique_ptr m_PositionsPrev; + std::unique_ptr m_PositionsPrevPrev; + std::unique_ptr m_StrandLevelData; + + std::unique_ptr m_pSimBindSets; + std::unique_ptr m_pApplySDFBindSets; // updated by + std::unique_ptr m_pRenderBindSets; // used for rendering. +}; + +struct TressFXStrandLevelData +{ + AMD::float4 skinningQuat; + AMD::float4 vspQuat; + AMD::float4 vspTranslation; +}; + +class TressFXHairObject : private TressFXNonCopyable +{ +public: + TressFXHairObject(TressFXAsset* asset, + EI_Device* pDevice, + EI_CommandContext& commandContext, + const char * name, int RenderIndex); + + // pBoneMatricesInWS constains array of column major bone matrices in world space. + void UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices); + + void UpdateConstantBuffer(EI_CommandContext& commandContext); + + // update collision capsules + void UpdateCapsuleCollisions(); + + void UpdateSimulationParameters(const TressFXSimulationSettings* parameters, float timeStep); + void UpdateRenderingParameters(const TressFXRenderingSettings* parameters, const int NodePoolSize, float timeStep, float Distance, bool ShadowUpdate = false); + + void ResetPositions() { m_SimCB[m_SimulationFrame%2]->g_ResetPositions = 1.0f; } + + // Rendering + void DrawStrands(EI_CommandContext& commandContext, + EI_PSO& pso, + EI_BindSet** extraBindSets = nullptr, + uint32_t numExtraBindSets = 0); + + TressFXDynamicState& GetDynamicState() { return m_DynamicState; } + + int GetNumTotalHairVertices() const { return m_NumTotalVertices; } + int GetNumTotalHairStrands() const { return m_NumTotalStrands; } + int GetNumVerticesPerStrand() const { return m_NumVerticesPerStrand; } + int GetCPULocalShapeIterations() const { return m_CPULocalShapeIterations; } + int GetNumFollowHairsPerGuideHair() const { return m_NumFollowHairsPerGuideHair; } + + EI_BindSet* GetRenderLayoutBindSet() const { return m_pRenderLayoutBindSet.get(); } + + // Get hair asset info + int GetNumTotalHairVertices() { return m_NumTotalVertices; } + int GetNumTotalHairStrands() { return m_NumTotalStrands; } + int GetNumVerticesPerStrand() { return m_NumVerticesPerStrand; } + + EI_BindSet * GetSimBindSet() { return m_pSimBindSet[m_SimulationFrame%2].get(); } + void UpdatePerObjectRenderParams(EI_CommandContext& commandContext); + void IncreaseSimulationFrame() { m_SimCB[m_SimulationFrame%2]->g_ResetPositions = 0.0f; m_SimulationFrame++; } + + void PopulateDrawStrandsBindSet(EI_Device* pDevice, TressFXRenderingSettings* pRenderSettings=nullptr); +private: + // Turn raw data into GPU resources for rendering. + void CreateRenderingGPUResources(EI_Device* pDevice, + TressFXAsset& asset, + const char * name); + void UploadRenderingGPUResources(EI_CommandContext& commandContext, TressFXAsset& asset); + + + // set wind parameters for simulation + void SetWind(const Vector3& windDir, float windMag, int frame); + + // hair asset information + int m_NumTotalVertices; + int m_NumTotalStrands; + int m_NumVerticesPerStrand; + int m_CPULocalShapeIterations; + int m_NumFollowHairsPerGuideHair; + + // frame counter for wind effect + int m_SimulationFrame; + + // for parameter indexing + int m_RenderIndex; + + // For LOD calculations + float m_LODHairDensity = 1.0f; + + // simulation control params + TressFXUniformBuffer m_SimCB[2]; + TressFXUniformBuffer m_RenderCB; + TressFXUniformBuffer m_StrandCB; + + // position and tangent + TressFXDynamicState m_DynamicState; + + std::unique_ptr m_InitialHairPositionsBuffer; + std::unique_ptr m_HairRestLengthSRVBuffer; + std::unique_ptr m_HairStrandTypeBuffer; + std::unique_ptr m_FollowHairRootOffsetBuffer; + std::unique_ptr m_BoneSkinningDataBuffer; + + // Textures + std::unique_ptr m_BaseAlbedo = nullptr; + std::unique_ptr m_StrandAlbedo = nullptr; + + // SRVs for rendering + std::unique_ptr m_HairVertexRenderParams; + std::unique_ptr m_HairTexCoords; + + + std::unique_ptr m_pRenderLayoutBindSet; + + // For simulation compute shader + std::unique_ptr m_pSimBindSet[2]; + + // index buffer + std::unique_ptr m_pIndexBuffer; + AMD::uint32 m_TotalIndices; + +}; + +#endif // TRESSFXHAIROBJECT_H_ diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.cpp new file mode 100644 index 0000000000..7b15755da6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.cpp @@ -0,0 +1,332 @@ +// ---------------------------------------------------------------------------- +// Layouts describe resources for each type of shader in TressFX. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "TressFXLayouts.h" +#include "EngineInterface.h" + +using namespace AMD; + +// By default, app allocates space for each of these, and TressFX uses it. +// These are globals, because there should really just be one instance. +TressFXLayouts* g_TressFXLayouts = nullptr; + +void CreateSimPosTanLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_HairVertexPositions", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"g_HairVertexPositionsPrev", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"g_HairVertexPositionsPrevPrev", 2, EI_RESOURCETYPE_BUFFER_RW }, + {"g_HairVertexTangents", 3, EI_RESOURCETYPE_BUFFER_RW }, + {"g_StrandLevelData", 4, EI_RESOURCETYPE_BUFFER_RW }, + }, + EI_CS + }; + + g_TressFXLayouts->pSimPosTanLayout = pDevice->CreateLayout(desc); +} + +void CreateRenderPosTanLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_GuideHairVertexPositions", 0, EI_RESOURCETYPE_BUFFER_RO }, + {"g_GuideHairVertexTangents", 1, EI_RESOURCETYPE_BUFFER_RO }, + }, + EI_ALL + }; + + g_TressFXLayouts->pRenderPosTanLayout = pDevice->CreateLayout(desc); +} + +void CreateRenderLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_HairThicknessCoeffs", 0, EI_RESOURCETYPE_BUFFER_RO }, + {"g_HairStrandTexCd", 1, EI_RESOURCETYPE_BUFFER_RO }, + {"BaseAlbedoTexture", 2, EI_RESOURCETYPE_IMAGE_RO }, + {"TressFXParameters", 3, EI_RESOURCETYPE_UNIFORM }, + {"TressFXStrandParameters", 4, EI_RESOURCETYPE_UNIFORM }, + {"StrandAlbedoTexture", 5, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_ALL + }; + + g_TressFXLayouts->pTressFXParamLayout = pDevice->CreateLayout(desc); +} + +void CreateSamplerLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"LinearWrapSampler", 0, EI_RESOURCETYPE_SAMPLER }, + }, + EI_ALL + }; + + g_TressFXLayouts->pSamplerLayout = pDevice->CreateLayout(desc); +} + +void CreateGenerateSDFLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_TrimeshVertexIndices", 0, EI_RESOURCETYPE_BUFFER_RO }, + {"g_SignedDistanceField", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"collMeshVertexPositions", 2, EI_RESOURCETYPE_BUFFER_RW }, + {"ConstBuffer_SDF", 3, EI_RESOURCETYPE_UNIFORM }, + }, + EI_CS + }; + + g_TressFXLayouts->pGenerateSDFLayout = pDevice->CreateLayout(desc); +} + +void CreateSimLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_InitialHairPositions", 4, EI_RESOURCETYPE_BUFFER_RO }, + {"g_HairRestLengthSRV", 5, EI_RESOURCETYPE_BUFFER_RO }, + {"g_HairStrandType", 6, EI_RESOURCETYPE_BUFFER_RO }, + {"g_FollowHairRootOffset", 7, EI_RESOURCETYPE_BUFFER_RO }, + {"g_BoneSkinningData", 12, EI_RESOURCETYPE_BUFFER_RO }, + {"tressfxSimParameters", 13, EI_RESOURCETYPE_UNIFORM }, + }, + EI_CS + }; + + g_TressFXLayouts->pSimLayout = pDevice->CreateLayout(desc); +} + +void CreateApplySDFLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_HairVertices", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"g_PrevHairVertices", 1, EI_RESOURCETYPE_BUFFER_RW }, + }, + EI_CS + }; + + g_TressFXLayouts->pApplySDFLayout = pDevice->CreateLayout(desc); +} + +void CreateBoneSkinningLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"bs_boneSkinningData", 1, EI_RESOURCETYPE_BUFFER_RO }, + {"bs_initialVertexPositions", 2, EI_RESOURCETYPE_BUFFER_RO }, + {"bs_collMeshVertexPositions", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"ConstBufferCS_BoneMatrix", 3, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pBoneSkinningLayout = pDevice->CreateLayout(desc); + +} + +void CreateSDFMarchingCubesLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_MarchingCubesEdgeTable", 3, EI_RESOURCETYPE_BUFFER_RO }, + {"g_MarchingCubesTriangleTable", 4, EI_RESOURCETYPE_BUFFER_RO }, + {"g_MarchingCubesSignedDistanceField", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"g_MarchingCubesTriangleVertices", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"g_NumMarchingCubesVertices", 2, EI_RESOURCETYPE_BUFFER_RW }, + {"ConstBuffer_MC", 5, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pSDFMarchingCubesLayout = pDevice->CreateLayout(desc); +} + +void CreatePPLLFillLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"RWFragmentListHead", 0, EI_RESOURCETYPE_IMAGE_RW }, + {"LinkedListUAV", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"LinkedListCounter", 2, EI_RESOURCETYPE_BUFFER_RW }, + }, + EI_PS + }; + + g_TressFXLayouts->pPPLLFillLayout = pDevice->CreateLayout(desc); + } + +void CreatePPLLResolveLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"FragmentListHead", 0, EI_RESOURCETYPE_IMAGE_RO }, + {"LinkedListNodes", 1, EI_RESOURCETYPE_BUFFER_RO }, + }, + EI_PS + }; + + g_TressFXLayouts->pPPLLResolveLayout = pDevice->CreateLayout(desc); +} + +void CreatePPLLShadeParamLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"TressFXShadeParams", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_PS + }; + + g_TressFXLayouts->pPPLLShadeParamLayout = pDevice->CreateLayout(desc); +} + +void CreateShortcutDepthsAlphaLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"RWFragmentDepthsTexture", 0, EI_RESOURCETYPE_IMAGE_RW }, + }, + EI_PS + }; + g_TressFXLayouts->pShortcutDepthsAlphaLayout = pDevice->CreateLayout(desc); +} + +void CreateShortcutDepthReadLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"FragmentDepthsTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_PS + }; + + g_TressFXLayouts->pShortcutDepthReadLayout = pDevice->CreateLayout(desc); +} + +void CreateShortCutShadeParamLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"TressFXShadeParams", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_PS + }; + + g_TressFXLayouts->pShortcutShadeParamLayout = pDevice->CreateLayout(desc); +} + +void CreateShortCutColorReadLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"HaiColorTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, + {"AccumInvAlpha", 1, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_PS + }; + g_TressFXLayouts->pShortCutColorReadLayout = pDevice->CreateLayout(desc); +} + +void CreateViewLayout(EI_Device * pDevice) +{ + EI_LayoutDescription desc = { + { + {"viewConstants", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pViewLayout = pDevice->CreateLayout(desc); +} + +void CreateShadowViewLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"shadowViewConstants", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pShadowViewLayout = pDevice->CreateLayout(desc); +} + +void CreateLightLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"LightConstants", 0, EI_RESOURCETYPE_UNIFORM }, + {"ShadowTexture", 1, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_PS + }; + + g_TressFXLayouts->pLightLayout = pDevice->CreateLayout(desc); +} + +void InitializeAllLayouts(EI_Device* pDevice) +{ + // See TressFXLayouts.h + // Global storage for layouts. + + if (g_TressFXLayouts == 0) + g_TressFXLayouts = new TressFXLayouts; + + CreateSimPosTanLayout(pDevice); + CreateRenderPosTanLayout(pDevice); + CreateRenderLayout(pDevice); + CreateSamplerLayout(pDevice); + CreateGenerateSDFLayout(pDevice); + CreateSimLayout(pDevice); + CreateApplySDFLayout(pDevice); + CreateBoneSkinningLayout(pDevice); + CreateSDFMarchingCubesLayout(pDevice); + + CreateShortcutDepthsAlphaLayout(pDevice); + CreateShortcutDepthReadLayout(pDevice); + CreateShortCutShadeParamLayout(pDevice); + CreateShortCutColorReadLayout(pDevice); + + CreatePPLLFillLayout(pDevice); + CreatePPLLResolveLayout(pDevice); + CreatePPLLShadeParamLayout(pDevice); + + CreateViewLayout(GetDevice()); + CreateShadowViewLayout(GetDevice()); + CreateLightLayout(GetDevice()); +} + +void DestroyAllLayouts(EI_Device* pDevice) +{ + if (g_TressFXLayouts != nullptr) + { + delete g_TressFXLayouts; + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.h new file mode 100644 index 0000000000..e187fc3bb3 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.h @@ -0,0 +1,91 @@ +// ---------------------------------------------------------------------------- +// Layouts describe resources for each type of shader in TressFX. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include "EngineInterface.h" +#include "TressFXConstantBuffers.h" + +#define TRESSFX_GET_16BYTE_INDEX(s, m) (offsetof(s, m) / 16) + +struct TressFXLayouts +{ + std::unique_ptr pTressFXParamLayout = nullptr; + std::unique_ptr pRenderPosTanLayout = nullptr; + std::unique_ptr pSimPosTanLayout = nullptr; + std::unique_ptr pGenerateSDFLayout = nullptr; + std::unique_ptr pSimLayout = nullptr; + std::unique_ptr pApplySDFLayout = nullptr; + std::unique_ptr pBoneSkinningLayout = nullptr; + std::unique_ptr pSDFMarchingCubesLayout = nullptr; + + std::unique_ptr pShortcutDepthsAlphaLayout = nullptr; + std::unique_ptr pShortcutDepthReadLayout = nullptr; + std::unique_ptr pShortcutShadeParamLayout = nullptr; + std::unique_ptr pShortCutColorReadLayout = nullptr; + + std::unique_ptr pPPLLFillLayout = nullptr; + std::unique_ptr pPPLLResolveLayout = nullptr; + std::unique_ptr pPPLLShadeParamLayout = nullptr; + + std::unique_ptr pViewLayout = nullptr; + std::unique_ptr pShadowViewLayout = nullptr; + std::unique_ptr pLightLayout = nullptr; + std::unique_ptr pSamplerLayout = nullptr; +}; + +// by default, we just get layouts from a global. +// Layouts should be reusable for all instances. +// These should be allocated by the user. e.g g_TressFXSlots = new +// TressFXSlots::SlotArraysForAllLayouts; +extern TressFXLayouts* g_TressFXLayouts; + +void InitializeAllLayouts(EI_Device* pDevice); +void DestroyAllLayouts(EI_Device* pDevice); + +inline EI_BindLayout* GetSimPosTanLayout() { return g_TressFXLayouts->pSimPosTanLayout.get(); } +inline EI_BindLayout* GetRenderPosTanLayout() { return g_TressFXLayouts->pRenderPosTanLayout.get(); } +inline EI_BindLayout* GetTressFXParamLayout() { return g_TressFXLayouts->pTressFXParamLayout.get(); } +inline EI_BindLayout* GetGenerateSDFLayout() { return g_TressFXLayouts->pGenerateSDFLayout.get(); } +inline EI_BindLayout* GetApplySDFLayout() { return g_TressFXLayouts->pApplySDFLayout.get(); } +inline EI_BindLayout* GetSimLayout() { return g_TressFXLayouts->pSimLayout.get(); } +inline EI_BindLayout* GetBoneSkinningMeshLayout() { return g_TressFXLayouts->pBoneSkinningLayout.get(); } +inline EI_BindLayout* GetSDFMarchingCubesLayout() { return g_TressFXLayouts->pSDFMarchingCubesLayout.get(); } + +// Shortcut layouts +inline EI_BindLayout* GetShortCutDepthsAlphaLayout() { return g_TressFXLayouts->pShortcutDepthsAlphaLayout.get(); } +inline EI_BindLayout* GetShortCutDepthReadLayout() { return g_TressFXLayouts->pShortcutDepthReadLayout.get(); } +inline EI_BindLayout* GetShortCutShadeParamLayout() { return g_TressFXLayouts->pShortcutShadeParamLayout.get(); } +inline EI_BindLayout* GetShortCutColorReadLayout() { return g_TressFXLayouts->pShortCutColorReadLayout.get(); } + +// PPLL layouts +inline EI_BindLayout* GetPPLLFillLayout() { return g_TressFXLayouts->pPPLLFillLayout.get(); } +inline EI_BindLayout* GetPPLLResolveLayout() { return g_TressFXLayouts->pPPLLResolveLayout.get(); } +inline EI_BindLayout* GetPPLLShadeParamLayout() { return g_TressFXLayouts->pPPLLShadeParamLayout.get(); } + +inline EI_BindLayout* GetViewLayout() { return g_TressFXLayouts->pViewLayout.get(); } +inline EI_BindLayout* GetShadowViewLayout() { return g_TressFXLayouts->pShadowViewLayout.get(); } +inline EI_BindLayout* GetLightLayout() { return g_TressFXLayouts->pLightLayout.get(); } +inline EI_BindLayout* GetSamplerLayout() { return g_TressFXLayouts->pSamplerLayout.get(); } \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.cpp new file mode 100644 index 0000000000..1d9a6fc9b6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.cpp @@ -0,0 +1,315 @@ +// ---------------------------------------------------------------------------- +// Interface for TressFX OIT using per-pixel linked lists. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include + +//#include "AMD_TressFX.h" + +#include "TressFXLayouts.h" +#include "TressFXPPLL.h" +#include "EngineInterface.h" +#include "HairStrands.h" +#include "TressFXHairObject.h" + +using namespace AMD; + +TressFXPPLL::TressFXPPLL() : + m_nScreenWidth(0), + m_nScreenHeight(0), + m_nNodes(0), + m_nNodeSize(0), + m_PPLLHeads(nullptr), + m_PPLLNodes(nullptr), + m_PPLLCounter(nullptr), + m_pPPLLFillBindSet(nullptr), + m_pPPLLResolveBindSet(nullptr), + m_PPLLRenderTargetSet(nullptr), + m_PPLLFillPSO(nullptr), + m_ShadeParamsBindSet(nullptr) +{ +} + +void TressFXPPLL::Initialize(int width, int height, int nNodes, int nodeSize) +{ + Create(GetDevice(), width, height, nNodes, nodeSize); + + // Create constant buffer and bind set + m_ShadeParamsConstantBuffer.CreateBufferResource("TressFXShadeParams"); + EI_BindSetDescription set = { { m_ShadeParamsConstantBuffer.GetBufferResource() } }; + m_ShadeParamsBindSet = GetDevice()->CreateBindSet(GetShortCutShadeParamLayout(), set); + + // Setup PSOs + + // Hair Fill Pass + { + //std::vector FillDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = false; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + + EI_BindLayout* HairColorLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetViewLayout(), GetPPLLFillLayout(), GetSamplerLayout() }; + psoParams.layouts = HairColorLayouts; + psoParams.numLayouts = 5; + psoParams.renderTargetSet = m_PPLLRenderTargetSet.get(); + + m_PPLLFillPSO = GetDevice()->CreateGraphicsPSO("TressFXPPLL.hlsl", "RenderHairVS", "TressFXPPLL.hlsl", "PPLLFillPS", psoParams); + } + + // Hair Resolve + { + //std::vector ResolveDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + // sushi code was: + /* + // Blending matches SDK Sample, which + // works in terms of (1-a) and otherwise premultiplied. + BlendEnable = true + SrcBlend = ONE + DstBlend = SRCALPHA + BlendOp = ADD + SrcBlendAlpha = ZERO + DstBlendAlpha = ZERO + BlendOpAlpha = ADD + */ + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::One; //::One; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcAlpha; //::SrcAlpha; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { GetPPLLResolveLayout(), GetPPLLShadeParamLayout(), GetViewLayout(), GetLightLayout(), GetSamplerLayout() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 5; + psoParams.renderTargetSet = m_PPLLRenderTargetSet.get(); + m_PPLLResolvePSO = GetDevice()->CreateGraphicsPSO("TressFXPPLL.hlsl", "FullScreenVS", "TressFXPPLL.hlsl", "PPLLResolvePS", psoParams); + } +} + +bool TressFXPPLL::Create(EI_Device* pDevice, int width, int height, int nNodes, int nodeSize) +{ + m_nNodes = nNodes; + m_nNodeSize = nodeSize; + m_nScreenWidth = width; + m_nScreenHeight = height; + + // Create required resources + m_PPLLHeads = pDevice->CreateUint32Resource(width, height, 1, "PPLLHeads", TRESSFX_PPLL_NULL_PTR); + m_PPLLNodes = pDevice->CreateBufferResource(nodeSize, nNodes, EI_BF_NEEDSUAV, "PPLLNodes"); + m_PPLLCounter = pDevice->CreateBufferResource(sizeof(uint32_t), 1, EI_BF_NEEDSUAV, "PPLLNodes"); + + // Create bind sets + CreateFillBindSet(pDevice); + CreateResolveBindSet(pDevice); + + // Create RenderPasss sets + CreatePPLLRenderTargetSet(pDevice); + return true; +} + +// return the set? +void TressFXPPLL::CreateFillBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_PPLLHeads.get(), m_PPLLNodes.get(), m_PPLLCounter.get() } + }; + + m_pPPLLFillBindSet = pDevice->CreateBindSet(GetPPLLFillLayout(), bindSet); +} + +void TressFXPPLL::CreateResolveBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_PPLLHeads.get(), m_PPLLNodes.get() } + }; + + m_pPPLLResolveBindSet = pDevice->CreateBindSet(GetPPLLResolveLayout(), bindSet); +} + +void TressFXPPLL::CreatePPLLRenderTargetSet(EI_Device* pDevice) +{ + const EI_Resource* ResourceArray[] = { pDevice->GetColorBufferResource(), pDevice->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + m_PPLLRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, nullptr); +} + +void TressFXPPLL::Clear(EI_CommandContext& context) +{ + // Consider being explicit on values here. + // In DX, UAV counter clears are actually done when UAV is set, which makes this a bit weird, I + // suppose. + // Also try clearing in shader during fullscreen pass (although can't miss frames, and makes + // reads slower) + // or look at 0-based for fast clears. + + // Transition and clear any resources we need to + + if (m_firstRun) + { + // The first time we use the resource, we need to transition it out of UNDEFINED state to COPY_DEST. + // Doing from PS_SRV causes validation errors. + EI_Barrier readToClear[] = + { +#ifdef TRESSFX_VK + { m_PPLLHeads.get(), EI_STATE_UNDEFINED, EI_STATE_COPY_DEST }, +#endif // TRESSFX_VK + { m_PPLLCounter.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_PPLLNodes.get(), EI_STATE_UAV, EI_STATE_SRV }, // Just need to do this on the first frame so our usual transition doesn't bug out. + }; + + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); + } + else + { + EI_Barrier readToClear[] = + { +#ifdef TRESSFX_VK + { m_PPLLHeads.get(), EI_STATE_SRV, EI_STATE_COPY_DEST }, +#else + { m_PPLLHeads.get(), EI_STATE_SRV, EI_STATE_UAV }, +#endif // TRESSFX_VK + { m_PPLLCounter.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + }; + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); + } + + context.ClearUint32Image(m_PPLLHeads.get(), TRESSFX_PPLL_NULL_PTR); + + uint32_t clearCounter = 0; + context.UpdateBuffer(m_PPLLCounter.get(), &clearCounter); +} + +void TressFXPPLL::BeginFill(EI_CommandContext& commandContext) +{ + // Begin the render pass and transition any resources to write if needed + EI_Barrier readToWrite[] = + { +#ifdef TRESSFX_VK + { m_PPLLHeads.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, +#endif // TRESSFX_VK + { m_PPLLNodes.get(), EI_STATE_SRV, EI_STATE_UAV }, + { m_PPLLCounter.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_PPLLRenderTargetSet.get(), L"BeginFill Pass"); +} + +void TressFXPPLL::EndFill(EI_CommandContext& commandContext) +{ + // End the render pass so we can transition the UAVs + GetDevice()->EndRenderPass(commandContext); + + EI_Barrier writeToRead[] = + { + { m_PPLLHeads.get(), EI_STATE_UAV, EI_STATE_SRV }, + { m_PPLLNodes.get(), EI_STATE_UAV, EI_STATE_SRV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(writeToRead), writeToRead); +} + +void TressFXPPLL::BeginResolve(EI_CommandContext& commandContext) +{ + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_PPLLRenderTargetSet.get(), L"BeginResolve Pass"); +} + +void TressFXPPLL::EndResolve(EI_CommandContext& commandContext) +{ + // End the PPLL render pass + GetDevice()->EndRenderPass(commandContext); +} + +void TressFXPPLL::DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets) +{ + // Loop through all hair strands and render them + for (size_t i = 0; i < numHairStrands; i++) + { + if (hairStrands[i]->GetTressFXHandle()) + hairStrands[i]->GetTressFXHandle()->DrawStrands(commandContext, *pPSO, extraBindSets, numExtraBindSets); + } +} + +void TressFXPPLL::Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet) +{ + // Clear out resources + Clear(commandContext); + + // Render the fill pass + BeginFill(commandContext); + { + EI_BindSet* ExtraBindSets[] = { viewBindSet, m_pPPLLFillBindSet.get(), GetDevice()->GetSamplerBindSet() }; + DrawHairStrands(commandContext, numHairStrands, hairStrands, m_PPLLFillPSO.get(), ExtraBindSets, 3); + } + EndFill(commandContext); + GetDevice()->GetTimeStamp("PPLL Fill"); + + // Hair Resolve pass + BeginResolve(commandContext); + { + EI_BindSet* BindSets[] = { m_pPPLLResolveBindSet.get(), m_ShadeParamsBindSet.get(), viewBindSet, lightBindSet, GetDevice()->GetSamplerBindSet() }; + GetDevice()->DrawFullScreenQuad(commandContext, *m_PPLLResolvePSO, BindSets, 5); + } + EndResolve(commandContext); + GetDevice()->GetTimeStamp("PPLL Resolve"); + + m_firstRun = false; +} + +void TressFXPPLL::UpdateShadeParameters(std::vector& renderSettings) +{ + // Update Render Parameters + for (int i = 0; i < renderSettings.size(); ++i) + { + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberRadius = renderSettings[i]->m_FiberRadius; // Don't modify radius by LOD multiplier as this one is used to calculate shadowing and that calculation should remain unaffected + m_ShadeParamsConstantBuffer->HairShadeParams[i].ShadowAlpha = renderSettings[i]->m_HairShadowAlpha; + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberSpacing = renderSettings[i]->m_HairFiberSpacing; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairEx2 = renderSettings[i]->m_HairSpecExp2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairKs2 = renderSettings[i]->m_HairKSpec2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].MatKValue = { 0.f, renderSettings[i]->m_HairKDiffuse, renderSettings[i]->m_HairKSpec1, renderSettings[i]->m_HairSpecExp1 }; // no ambient + } + + m_ShadeParamsConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.h new file mode 100644 index 0000000000..5479fdc688 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.h @@ -0,0 +1,98 @@ +// ---------------------------------------------------------------------------- +// Interface for TressFX OIT using per-pixel linked lists. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef AMD_TRESSFXPPLL_H +#define AMD_TRESSFXPPLL_H + +#include "EngineInterface.h" +#include "TressFXSettings.h" + +#include + +// By default, TressFX node sizes are 16 bytes. 4 bytes for each of: tangentcoverage, depth, +// baseColor, next pointer +#define TRESSFX_DEFAULT_NODE_SIZE 16 + +// The special value meaning "end of list" in the PPLL. +// So the UAV of head pointers gets cleared to this. +#define TRESSFX_PPLL_NULL_PTR 0xffffffff + +class HairStrands; + +class TressFXPPLL +{ +public: + TressFXPPLL(); + + void Initialize(int width, int height, int nNodes, int nodeSize); + void Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet); + + void UpdateShadeParameters(std::vector& renderSettings); + +private: + // Node size should include room for UINT next pointer. + void Clear(EI_CommandContext& context); + bool Create(EI_Device* pDevice, int width, int height, int nNodes, int nodeSize = TRESSFX_DEFAULT_NODE_SIZE); + + void DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets); + + // Begin/End for various stages of hair application/rendering + void BeginFill(EI_CommandContext& context); + void EndFill(EI_CommandContext& context); + + void BeginResolve(EI_CommandContext& context); + void EndResolve(EI_CommandContext& context); + + // Bind set creation functions + void CreateFillBindSet(EI_Device* pDevice); + void CreateResolveBindSet(EI_Device* pDevice); + + // RenderPass set creation functions + void CreatePPLLRenderTargetSet(EI_Device* pDevice); + + int m_nScreenWidth; + int m_nScreenHeight; + int m_nNodes; + int m_nNodeSize; + + bool m_firstRun = true; + + std::unique_ptr m_PPLLHeads; + std::unique_ptr m_PPLLNodes; + std::unique_ptr m_PPLLCounter; + + std::unique_ptr m_pPPLLFillBindSet; + std::unique_ptr m_pPPLLResolveBindSet; + + std::unique_ptr m_PPLLRenderTargetSet = nullptr; + + std::unique_ptr m_PPLLFillPSO = nullptr; + std::unique_ptr m_PPLLResolvePSO = nullptr; + + TressFXUniformBuffer m_ShadeParamsConstantBuffer; + std::unique_ptr m_ShadeParamsBindSet = nullptr; +}; + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.cpp new file mode 100644 index 0000000000..dfbb40672c --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.cpp @@ -0,0 +1,221 @@ +// ---------------------------------------------------------------------------- +// This wraps a single signed distance field, used for TressFX collision. +// it provides the interface to generate the signed distance field, as well +// as apply that signed distance field to a TressFX simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + + +// TressFX +#include "TressFXAsset.h" +#include "TressFXHairObject.h" +#include "TressFXLayouts.h" +#include "TressFXSDFCollision.h" +#include "TressFXSDFInputMeshInterface.h" + +#include + +TressFXSDFCollision::TressFXSDFCollision( + EI_Device* pDevice, + TressFXSDFInputMeshInterface* pCollMesh, + const char * modelName, + int numCellsInX, + float collisionMargin) + : m_CollisionMargin(collisionMargin) + , m_NumCellsInXAxis(numCellsInX) + , m_GridAllocationMutliplier(1.4f) + , m_NumTotalCells(INT_MAX) + , m_pSimBindSet(nullptr) + +{ + m_pInputCollisionMesh = pCollMesh; + + // initialize SDF grid using the associated model's bounding box + Vector3 bmin, bmax; + m_pInputCollisionMesh->GetInitialBoundingBox(bmin, bmax); + m_CellSize = (bmax.x - bmin.x) / m_NumCellsInXAxis; + int numExtraPaddingCells = (int)(0.8f * (float)m_NumCellsInXAxis); + m_PaddingBoundary = numExtraPaddingCells * m_CellSize, numExtraPaddingCells * m_CellSize, + numExtraPaddingCells * m_CellSize; + + UpdateSDFGrid(bmin, bmax); + + bmin -= m_PaddingBoundary; + bmax += m_PaddingBoundary; + + m_NumCellsX = (int)((bmax.x - bmin.x) / m_CellSize); + m_NumCellsY = (int)((bmax.y - bmin.y) / m_CellSize); + m_NumCellsZ = (int)((bmax.z - bmin.z) / m_CellSize); + m_NumTotalCells = + TressFXMin(m_NumTotalCells, + (int)(m_GridAllocationMutliplier * m_NumCellsX * m_NumCellsY * m_NumCellsZ)); + + // UAV + m_SignedDistanceFieldUAV = + pDevice->CreateBufferResource(sizeof(int), m_NumTotalCells, EI_BF_NEEDSUAV, "SDF"); + + // constant buffer + m_pConstantBufferResource = pDevice->CreateBufferResource(sizeof(TressFXSDFCollisionParams), 1, EI_BF_UNIFORMBUFFER, "TressFXSDFCollisionConstantBuffer"); + + // Bind set + EI_BindSetDescription bindSet = + { + { &m_pInputCollisionMesh->GetTrimeshVertexIndicesBuffer(), m_SignedDistanceFieldUAV.get(), &m_pInputCollisionMesh->GetMeshBuffer(), m_pConstantBufferResource.get() } + }; + m_pSimBindSet = pDevice->CreateBindSet(GetGenerateSDFLayout(), bindSet); +} + +void TressFXSDFCollision::UpdateSDFGrid(const Vector3& tight_bbox_min, + const Vector3& tight_bbox_max) +{ + Vector3 bmin = tight_bbox_min - m_PaddingBoundary; + m_Origin = bmin; +} + +void TressFXSDFCollision::Update(EI_CommandContext& commandContext, + TressFXSDFCollisionSystem& system) +{ + if (!m_pInputCollisionMesh) + return; + + EI_Marker marker(commandContext, "SDFUpdate"); + + // Update the grid data based on the current bounding box + Vector3 min, max; + m_pInputCollisionMesh->GetBoundingBox(min, max); + UpdateSDFGrid(min, max); + + // Set the constant buffer parameters + m_ConstBuffer.m_Origin.x = m_Origin.x; + m_ConstBuffer.m_Origin.y = m_Origin.y; + m_ConstBuffer.m_Origin.z = m_Origin.z; + m_ConstBuffer.m_Origin.w = 0; + m_ConstBuffer.m_CellSize = m_CellSize; + m_ConstBuffer.m_NumCellsX = m_NumCellsX; + m_ConstBuffer.m_NumCellsY = m_NumCellsY; + m_ConstBuffer.m_NumCellsZ = m_NumCellsZ; + + commandContext.UpdateBuffer(m_pConstantBufferResource.get(), &m_ConstBuffer); + + // Binding UAVs, SRVs and CBs + + // Run InitializeSignedDistanceField. One thread per one cell. + { + int numDispatchSize = + (int)ceil((float)m_NumTotalCells / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_InitializeSignedDistanceFieldPSO.get()); + EI_BindSet* bindSets[] = { m_pSimBindSet.get() }; + commandContext.BindSets(system.m_InitializeSignedDistanceFieldPSO.get(), 1, bindSets); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("InitializeSignedDistanceField"); + } + + + EI_Barrier uavMeshAndSDF[] = + { + { & (m_pInputCollisionMesh->GetMeshBuffer()), EI_STATE_UAV, EI_STATE_UAV }, + { m_SignedDistanceFieldUAV.get(), EI_STATE_UAV, EI_STATE_UAV } + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavMeshAndSDF), uavMeshAndSDF); + + // Run ConstructSignedDistanceField. One thread per each triangle + { + int numDispatchSize = (int)ceil((float)m_pInputCollisionMesh->GetNumMeshTriangle() / + (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_ConstructSignedDistanceFieldPSO.get()); + EI_BindSet* bindSets[] = { m_pSimBindSet.get() }; + commandContext.BindSets(system.m_ConstructSignedDistanceFieldPSO.get(), 1, bindSets); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("ConstructSignedDistanceField"); + } + + // State transition for DX12 + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavMeshAndSDF), uavMeshAndSDF); + + // Run FinalizeSignedDistanceField. One thread per each triangle + { + int numDispatchSize = + (int)ceil((float)m_NumTotalCells / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_FinalizeSignedDistanceFieldPSO.get()); + EI_BindSet* bindSets[] = { m_pSimBindSet.get() }; + commandContext.BindSets(system.m_FinalizeSignedDistanceFieldPSO.get(), 1, bindSets); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("FinalizeSignedDistanceField"); + } + + // State transition for DX12 + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavMeshAndSDF), uavMeshAndSDF); +} + +void TressFXSDFCollision::CollideWithHair(EI_CommandContext& commandContext, + TressFXSDFCollisionSystem& system, + TressFXHairObject& hairObject) +{ + if (!m_pInputCollisionMesh) + return; + + EI_Marker marker(commandContext, "CollideWithHair"); + + int numTotalHairVertices = hairObject.GetNumTotalHairVertices(); + + // Get vertex buffers from the hair object. + TressFXDynamicState& state = hairObject.GetDynamicState(); + + // Set the constant buffer parameters + m_ConstBuffer.m_Origin.x = m_Origin.x; + m_ConstBuffer.m_Origin.y = m_Origin.y; + m_ConstBuffer.m_Origin.z = m_Origin.z; + m_ConstBuffer.m_Origin.w = 0; + m_ConstBuffer.m_CellSize = m_CellSize; + m_ConstBuffer.m_NumCellsX = m_NumCellsX; + m_ConstBuffer.m_NumCellsY = m_NumCellsY; + m_ConstBuffer.m_NumCellsZ = m_NumCellsZ; + m_ConstBuffer.m_CollisionMargin = m_CollisionMargin * m_CellSize; + m_ConstBuffer.m_NumTotalHairVertices = hairObject.GetNumTotalHairVertices(); + m_ConstBuffer.m_NumHairVerticesPerStrand = hairObject.GetNumVerticesPerStrand(); + + commandContext.UpdateBuffer(m_pConstantBufferResource.get(), &m_ConstBuffer); + + + // Run CollideHairVerticesWithSdf. One thread per one hair vertex. + { + int numDispatchSize = + (int)ceil((float)numTotalHairVertices / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_CollideHairVerticesWithSdfPSO.get()); + EI_BindSet * bindSets[] = { m_pSimBindSet.get(), &state.GetApplySDFBindSet() }; + commandContext.BindSets(system.m_CollideHairVerticesWithSdfPSO.get(), 2, bindSets ); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("CollideHairVerticesWithSdf"); + } + + // State transition for DX12 + state.UAVBarrier(commandContext); + + //EI_SB_Transition(commandContext, m_SignedDistanceFieldUAV, EI_STATE_UAV, EI_STATE_UAV); + EI_Barrier uavSDF[] = + { + { m_SignedDistanceFieldUAV.get(), EI_STATE_UAV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(1, uavSDF); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.h new file mode 100644 index 0000000000..753c8b9dc3 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.h @@ -0,0 +1,126 @@ +// ---------------------------------------------------------------------------- +// This wraps a single signed distance field, used for TressFX collision. +// it provides the interface to generate the signed distance field, as well +// as apply that signed distance field to a TressFX simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef TRESSFXSDFCOLLIION_H_ +#define TRESSFXSDFCOLLIION_H_ + +#include "TressFXCommon.h" +#include "TressFXHairObject.h" +#include "EngineInterface.h" +#include "TressFXLayouts.h" + +class TressFXHairObject; +class TressFXAsset; +class TressFXSDFInputMeshInterface; + +class TressFXSDFCollisionSystem +{ +public: + void Initialize(EI_Device* pDevice) + { + EI_BindLayout * layouts[] = { GetGenerateSDFLayout(), GetApplySDFLayout() }; + m_InitializeSignedDistanceFieldPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "InitializeSignedDistanceField", layouts, 2); + m_ConstructSignedDistanceFieldPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "ConstructSignedDistanceField", layouts, 2); + m_FinalizeSignedDistanceFieldPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "FinalizeSignedDistanceField", layouts, 2); + m_CollideHairVerticesWithSdfPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "CollideHairVerticesWithSdf_forward", layouts, 2); + } + + std::unique_ptr m_InitializeSignedDistanceFieldPSO; + std::unique_ptr m_ConstructSignedDistanceFieldPSO; + std::unique_ptr m_FinalizeSignedDistanceFieldPSO; + std::unique_ptr m_CollideHairVerticesWithSdfPSO; +}; + +class TressFXSDFCollision : private TressFXNonCopyable +{ +public: + TressFXSDFCollision( + EI_Device* pDevice, + TressFXSDFInputMeshInterface* pCollMesh, + const char * modelName, + int numCellsInX, + float collisionMargin); + + // Update and animate the collision mesh + void Update(EI_CommandContext& commandContext, TressFXSDFCollisionSystem& system); + + // Run collision checking and response with hair + void CollideWithHair(EI_CommandContext& commandContext, + TressFXSDFCollisionSystem& system, + TressFXHairObject& hairObject); + + float GetSDFCollisionMargin() const { return m_CollisionMargin; } + + + const EI_Resource& GetSDFDataGPUBuffer() const { return *m_SignedDistanceFieldUAV; } + EI_Resource& GetSDFDataGPUBuffer() { return *m_SignedDistanceFieldUAV; } + + // Grid + float GetGridCellSize() const { return m_CellSize; } + Vector3 GetGridOrigin() const { return m_Origin; } + void GetGridNumCells(int& x, int& y, int& z) const + { + x = m_NumCellsX; + y = m_NumCellsY; + z = m_NumCellsZ; + } + int GetGridNumTotalCells() const { return m_NumTotalCells; } + + TressFXSDFCollisionParams& GetConstantBufferData() { return m_ConstBuffer; } +private: + TressFXSDFCollisionParams m_ConstBuffer; + std::unique_ptr m_pConstantBufferResource; + TressFXSDFInputMeshInterface* m_pInputCollisionMesh; + + // UAV + std::unique_ptr m_SignedDistanceFieldUAV; + + std::unique_ptr m_pSimBindSet; + + // SDF grid + Vector3 m_Origin; + float m_CellSize; + int m_NumCellsX; + int m_NumCellsY; + int m_NumCellsZ; + int m_NumTotalCells; + Vector3 m_Min; + Vector3 m_Max; + Vector3 m_PaddingBoundary; + float m_GridAllocationMutliplier; + + // number of cells in X axis + int m_NumCellsInXAxis; + + // SDF collision margin. + float m_CollisionMargin; + + void UpdateSDFGrid(const Vector3& tight_bbox_min, + const Vector3& tight_bbox_max); +}; + +#endif // TRESSFXSDFCOLLIION_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFInputMeshInterface.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFInputMeshInterface.h new file mode 100644 index 0000000000..adc0170310 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFInputMeshInterface.h @@ -0,0 +1,57 @@ +// ---------------------------------------------------------------------------- +// Signed distance fields are generated from triangle meshes. +// This is the interface to a triangle mesh for use by TressFXSDFCollision +// to generate the SDF. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include "Math/Vector3D.h" +#include "EngineInterface.h" + +class TressFXSDFInputMeshInterface +{ +public: + virtual ~TressFXSDFInputMeshInterface() {} + + // Returns the GPU buffer containing the mesh data. It will be an input to SDF generator. + virtual EI_Resource& GetMeshBuffer() = 0; + + // Return the GPU index buffer of the mesh. + virtual EI_Resource& GetTrimeshVertexIndicesBuffer() = 0; + + // Returns the number of vertices of the mesh + virtual int GetNumMeshVertices() = 0; + + // Returns the number of triangles of the mesh + virtual int GetNumMeshTriangle() = 0; + + // Returns the byte size of mesh buffer data element. + virtual size_t GetSizeOfMeshElement() = 0; + + // Returns the bounding box of the current mesh. + virtual void GetBoundingBox(Vector3& min, Vector3& max) = 0; + + virtual void GetInitialBoundingBox(Vector3& min, Vector3& max) = 0; +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.cpp new file mode 100644 index 0000000000..7bb210aed5 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.cpp @@ -0,0 +1,233 @@ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "MarchingCubesTables.h" +#include "TressFXSDFMarchingCubes.h" +#include "TressFXSDFCollision.h" +#include "EngineInterface.h" + +TressFXSDFMarchingCubes::TressFXSDFMarchingCubes() + : m_MaxMarchingCubesVertices(128 * 1024) + , m_MarchingCubesTriangleVerticesUAV(nullptr) + , m_NumMarchingCubesVerticesUAV(nullptr) + , m_MarchingCubesEdgeTableSRV(nullptr) + , m_MarchingCubesTriangleTableSRV(nullptr) +{} + +void TressFXSDFMarchingCubes::Initialize(const char * name, EI_Scene* gltfImplementation, EI_RenderTargetSet * renderPass) +{ + m_pGLTFImplementation = gltfImplementation; + + EI_Device* pDevice = GetDevice(); + + // load a compute shader + EI_BindLayout * layouts[] = { GetSDFMarchingCubesLayout() }; + m_pComputeEffectInitializeMCVertices = GetDevice()->CreateComputeShaderPSO("TressFXMarchingCubes.hlsl", "InitializeMCVertices", layouts, 1); + m_pComputeEffectRunMarchingCubesOnSdf = GetDevice()->CreateComputeShaderPSO("TressFXMarchingCubes.hlsl", "RunMarchingCubesOnSdf", layouts, 1); + + EI_PSOParams psoParams; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcColor; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::SrcAlpha; + + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = renderPass; + m_pRenderEffect = GetDevice()->CreateGraphicsPSO("TressFXMarchingCubes.hlsl", "MarchingCubesVS", "TressFXMarchingCubes.hlsl", "MarchingCubesPS", psoParams); + + AMD::uint32 vertexBlockSize = sizeof(VertexData); + const int NUM_ELEMENTS_EDGE_TABLE = 256; + const int NUM_ELEMENTS_TRI_TABLE = 256 * 16; + + m_MarchingCubesTriangleVerticesUAV = pDevice->CreateBufferResource(vertexBlockSize, m_MaxMarchingCubesVertices, EI_BF_NEEDSUAV, "MCTriVerts"); + m_NumMarchingCubesVerticesUAV = pDevice->CreateBufferResource(sizeof(int), 1, EI_BF_NEEDSUAV, "NumMCVerts"); + m_MarchingCubesEdgeTableSRV = pDevice->CreateBufferResource(sizeof(int), NUM_ELEMENTS_EDGE_TABLE, 0, "MCEdgeTable"); + m_MarchingCubesTriangleTableSRV = pDevice->CreateBufferResource(sizeof(int), NUM_ELEMENTS_TRI_TABLE, 0, "MCTriTable"); + + m_pUniformBuffer = pDevice->CreateBufferResource(sizeof(TressFXMarchingCubesUniformBuffer), 1, EI_BF_UNIFORMBUFFER, "ConstantBuffer_MC"); + //------------------ + // Initial data. + // + // Just need tables for generating marching cubes. + // edge and triangle table should probably be combined at some point. + //------------------ + + EI_CommandContext& commandContext = pDevice->GetCurrentCommandContext(); + + EI_Barrier uavToCopy[] = + { + { m_MarchingCubesTriangleVerticesUAV.get() , EI_STATE_UAV, EI_STATE_COPY_DEST}, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_UAV, EI_STATE_COPY_DEST } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavToCopy), uavToCopy); + + // write zero for the number of vertices. + int zero = 0; + commandContext.UpdateBuffer(m_NumMarchingCubesVerticesUAV.get(), &zero); + + // Fill in the edge table. + commandContext.UpdateBuffer(m_MarchingCubesEdgeTableSRV.get(), (void*)MARCHING_CUBES_EDGE_TABLE); + + // Fill in the triangle table. + commandContext.UpdateBuffer(m_MarchingCubesTriangleTableSRV.get(), (void*)MARCHING_CUBES_TRIANGLE_TABLE); + + EI_Barrier uploadDone[] = + { + { m_MarchingCubesTriangleVerticesUAV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_MarchingCubesEdgeTableSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_MarchingCubesTriangleTableSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uploadDone), uploadDone); + + assert(m_pSDF); + // Create bindet + EI_Resource& sdfDataBuffer = m_pSDF->GetSDFDataGPUBuffer(); + EI_BindSetDescription desc = + { + { m_MarchingCubesEdgeTableSRV.get(), m_MarchingCubesTriangleTableSRV.get(), &sdfDataBuffer, m_MarchingCubesTriangleVerticesUAV.get(), m_NumMarchingCubesVerticesUAV.get(), m_pUniformBuffer.get() } + }; + m_pBindSet = pDevice->CreateBindSet(GetSDFMarchingCubesLayout(), desc); +} + +void TressFXSDFMarchingCubes::Draw() +{ + //---------------------------- + // Draw marching cubes mesh + //---------------------------- + m_uniformBufferData.cColor = { 1.0f, 1.0f, 0.0f }; + m_uniformBufferData.vLightDir = { 1.0f, 1.0f, 1.0f }; + m_uniformBufferData.mMW = m_pGLTFImplementation->GetMV(); + m_uniformBufferData.mMWP = m_pGLTFImplementation->GetMVP(); + + + EI_CommandContext& context = GetDevice()->GetCurrentCommandContext(); + + EI_BindSet* bindSets[] = { m_pBindSet.get() }; + context.BindSets(m_pRenderEffect.get(), 1, bindSets); + EI_DrawParams drawParams; + drawParams.numVertices = m_MaxMarchingCubesVertices; + drawParams.numInstances = 1; + context.DrawInstanced(*m_pRenderEffect, drawParams); +} + +void TressFXSDFMarchingCubes::DrawGrid() +{ + /* + // Render SDF grid + m_LineRenderer.SetColor(SuVector4(0.f, 0.f, 1.f, 0)); + + for (int j = 0; j <= m_NumCellsY; ++j) + { + for (int k = 0; k <= m_NumCellsZ; ++k) + { + SuVector3 p0 = m_Origin + SuVector3(0, j * m_CellSize, k * m_CellSize); + SuVector3 p1 = p0 + SuVector3(m_NumCellsX * m_CellSize, 0, 0); + + m_LineRenderer.DrawLine((SuPoint3&)p0, (SuPoint3&)p1); + } + + for (int i = 0; i <= m_NumCellsX; ++i) + { + SuVector3 p0 = m_Origin + SuVector3(i * m_CellSize, j * m_CellSize, 0); + SuVector3 p1 = p0 + SuVector3(0, 0, m_NumCellsZ * m_CellSize); + + m_LineRenderer.DrawLine((SuPoint3&)p0, (SuPoint3&)p1); + } + } + */ +} + +void TressFXSDFMarchingCubes::Update(EI_CommandContext& commandContext) +{ + assert(m_pSDF); + + m_Origin = { m_pSDF->GetGridOrigin().x, m_pSDF->GetGridOrigin().y, m_pSDF->GetGridOrigin().z }; + m_CellSize = m_pSDF->GetGridCellSize(); + m_pSDF->GetGridNumCells(m_NumCellsX, m_NumCellsY, m_NumCellsZ); + m_NumTotalCells = m_pSDF->GetGridNumTotalCells(); + + EI_Barrier barrier1[] = + { + { m_MarchingCubesTriangleVerticesUAV.get(), EI_STATE_SRV, EI_STATE_UAV }, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_SRV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(barrier1), barrier1); + + //------------------------------- + // RunMarchingCubesOnSdf + //------------------------------- + { + // Set the constant buffer parameters + TressFXMarchingCubesUniformBuffer& constBuffer = m_uniformBufferData; + constBuffer.g_MaxMarchingCubesVertices = m_MaxMarchingCubesVertices; + constBuffer.g_MarchingCubesIsolevel = m_CellSize * m_SDFIsoLevel; + + // Set the constant buffer parameters + constBuffer.g_Origin = { m_Origin.x, m_Origin.y, m_Origin.z, 0.0f }; + constBuffer.g_CellSize = m_CellSize; + constBuffer.g_NumCellsX = m_NumCellsX; + constBuffer.g_NumCellsY = m_NumCellsY; + constBuffer.g_NumCellsZ = m_NumCellsZ; + + commandContext.UpdateBuffer(m_pUniformBuffer.get(), &constBuffer); + + EI_Barrier copyToResource = { m_pUniformBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_CONSTANT_BUFFER }; + commandContext.SubmitBarrier(1, ©ToResource); + + EI_BindSet* bindSets = { m_pBindSet.get() }; + commandContext.BindSets(m_pComputeEffectInitializeMCVertices.get(), 1, &bindSets); + + // Run InitializeMCVertices. One thread per each cell + { + int numDispatchSize = (int)ceil((float)m_MaxMarchingCubesVertices / + (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(m_pComputeEffectInitializeMCVertices.get()); + commandContext.Dispatch(numDispatchSize); + } + + commandContext.BindSets(m_pComputeEffectRunMarchingCubesOnSdf.get(), 1, &bindSets); + + // Run RunMarchingCubesOnSdf. One thread per each cell + { + int numDispatchSize = + (int)ceil((float)m_NumTotalCells / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(m_pComputeEffectRunMarchingCubesOnSdf.get()); + commandContext.Dispatch(numDispatchSize); + } + EI_Resource& sdfDataBuffer = m_pSDF->GetSDFDataGPUBuffer(); + } + EI_Barrier barrier[] = + { + { m_MarchingCubesTriangleVerticesUAV.get(), EI_STATE_UAV, EI_STATE_SRV }, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_UAV, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(barrier), barrier); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.h new file mode 100644 index 0000000000..44da09ca71 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.h @@ -0,0 +1,119 @@ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef TRESSFXSDFMARCHINGCUBES_H_ +#define TRESSFXSDFMARCHINGCUBES_H_ + +#include "TressFXCommon.h" +#include "EngineInterface.h" + +class TressFXSDFCollision; +class EI_Scene; + +struct TressFXMarchingCubesUniformBuffer { + AMD::float4x4 mMW; + AMD::float4x4 mMWP; + AMD::float4 cColor; + AMD::float4 vLightDir; + AMD::float4 g_Origin; + float g_CellSize; + int g_NumCellsX; + int g_NumCellsY; + int g_NumCellsZ; + int g_MaxMarchingCubesVertices; + float g_MarchingCubesIsolevel; +}; + +class TressFXSDFMarchingCubes : private TressFXNonCopyable +{ +public: + TressFXSDFMarchingCubes(); + + void Initialize(const char * name, EI_Scene* gltfImplementation, EI_RenderTargetSet * renderTargetSet); + + // Draw the SDF using marching cubes for debug purpose + void Draw(); + + // Draw the grid + void DrawGrid(); + + // Update mesh by running marching cubes + void Update(EI_CommandContext& commandContext); + + void SetSDF(TressFXSDFCollision* SDF) + { + assert(SDF); + m_pSDF = SDF; + } + + // Setting the SDF ISO level for drawing. + void SetSDFIsoLevel(float isoLevel) { m_SDFIsoLevel = isoLevel; } + +private: + // SDF grid + AMD::float3 m_Origin; + float m_CellSize; + int m_NumCellsX; + int m_NumCellsY; + int m_NumCellsZ; + int m_NumTotalCells; + + EI_Scene* m_pGLTFImplementation; + + TressFXSDFCollision* m_pSDF; + + TressFXMarchingCubesUniformBuffer m_uniformBufferData; + std::unique_ptr m_pUniformBuffer; + + std::unique_ptr m_pBindSet; + + // For drawing lines + // SuBatchLineRenderer m_LineRenderer; + + struct VertexData + { + float position[4]; + float normal[4]; + }; + + // SDF ISO level. This value will be multiplied with the cell size before be passed to the + // compute shader. + float m_SDFIsoLevel; + + const int m_MaxMarchingCubesVertices; + int m_NumMCVertices; + + std::unique_ptr m_MarchingCubesTriangleVerticesUAV; + std::unique_ptr m_NumMarchingCubesVerticesUAV; + + std::unique_ptr m_MarchingCubesEdgeTableSRV; + std::unique_ptr m_MarchingCubesTriangleTableSRV; + + // compute shader + std::unique_ptr m_pComputeEffectInitializeMCVertices; + std::unique_ptr m_pComputeEffectRunMarchingCubesOnSdf; + + // shader for rendering + std::unique_ptr m_pRenderEffect; +}; + +#endif // TRESSFXSDFMARCHINGCUBES_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp new file mode 100644 index 0000000000..8c7e8a39cd --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp @@ -0,0 +1,341 @@ +// ---------------------------------------------------------------------------- +// Wrappers for setting values that end up in constant buffers. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +#include + +#include +#include + +#include + +namespace AMD +{ + void TressFXSimulationSettings::Reflect(AZ::ReflectContext* context) + { + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("vspCoeff", &TressFXSimulationSettings::m_vspCoeff) + ->Field("vspAccelThreshold", &TressFXSimulationSettings::m_vspAccelThreshold) + ->Field("localConstraintStiffness", &TressFXSimulationSettings::m_localConstraintStiffness) + ->Field("localConstraintsIterations", &TressFXSimulationSettings::m_localConstraintsIterations) + ->Field("globalConstraintStiffness", &TressFXSimulationSettings::m_globalConstraintStiffness) + ->Field("globalConstraintsRange", &TressFXSimulationSettings::m_globalConstraintsRange) + ->Field("lengthConstraintsIterations", &TressFXSimulationSettings::m_lengthConstraintsIterations) + ->Field("damping", &TressFXSimulationSettings::m_damping) + ->Field("gravityMagnitude", &TressFXSimulationSettings::m_gravityMagnitude) + ->Field("tipSeparation", &TressFXSimulationSettings::m_tipSeparation) + ->Field("windMagnitude", &TressFXSimulationSettings::m_windMagnitude) + ->Field("windDirection", &TressFXSimulationSettings::m_windDirection) + ->Field("windAngleRadians", &TressFXSimulationSettings::m_windAngleRadians) + ->Field("clampPositionDelta", &TressFXSimulationSettings::m_clampPositionDelta); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("TressFXSimulationSettings", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_vspCoeff, "Vsp Coeffs", + "VSP (Velocity Shock Propagation) value. VSP makes the root vertex velocity propagate through the rest " + "of vertices in the hair strand.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_vspAccelThreshold, "Vsp Accel Threshold", + "VSP acceleration threshold makes the VSP value increase when the pseudo-acceleration of the root " + "vertex is greater than the threshold value.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_localConstraintStiffness, "Local Constraint Stiffness", + "Controls the stiffness of a strand, meaning both global and local stiffness are used to keep the original " + "(imported) hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_localConstraintsIterations, + "Local Constraint Iterations", "Allocates more simulation time (iterations) toward keeping the local hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 1) + ->Attribute(AZ::Edit::Attributes::Max, 10) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_globalConstraintStiffness, + "Global Constraint Stiffness", "Controls the stiffness of a strand, meaning both global and local stiffness are used " + "to keep the original(imported) hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_globalConstraintsRange, "Global Constraint Range", + "Controls how much of the hair strand is affected by the global shape stiffness requirement.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_lengthConstraintsIterations, + "Length Constraint Iterations", "Allocates more simulation time (iterations) toward keeping the global hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 1) + ->Attribute(AZ::Edit::Attributes::Max, 10) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_damping, "Damping", + "Damping smooths out the motion of the hair. It also slows down the hair movement.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_gravityMagnitude, "Gravity Magnitude", + "Gravity pseudo value. A value of 10 closely approximates regular gravity in common game engine.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_tipSeparation, "Tip Separation", + "Forces the tips of the strands away from each other.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_windMagnitude, "Wind Magnitude", + "Wind multiplier value. It allows you to see the effect of wind on the hair.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXSimulationSettings::m_windDirection, "Wind Direction", + "xyz-vector (world space) for the wind direction.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->Attribute(AZ::Edit::Attributes::Step, 0.1f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_windAngleRadians, "Wind Angle Radians", + "Wind angle in radians") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_clampPositionDelta, "Clamp Velocity", + "To increase stability at low or unstable framerates, this parameter limits the displacement of hair segments per frame.") + ->Attribute(AZ::Edit::Attributes::Min, 1.0f) + ->Attribute(AZ::Edit::Attributes::Max, 24.0f) + ; + } + } + } + + void TressFXRenderingSettings::Reflect(AZ::ReflectContext* context) + { + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(3) + // Albedo assets + ->Field("BaseAlbedoAsset", &TressFXRenderingSettings::m_baseAlbedoAsset) + ->Field("StrandAlbedoAsset", &TressFXRenderingSettings::m_strandAlbedoAsset) + + // LOD Settings + ->Field("LODStartDistance", &TressFXRenderingSettings::m_LODStartDistance) + ->Field("LODEndDistance", &TressFXRenderingSettings::m_LODEndDistance) + ->Field("LODPercent", &TressFXRenderingSettings::m_LODPercent) + ->Field("LODWidthMultiplier", &TressFXRenderingSettings::m_LODWidthMultiplier) + + // General information + ->Field("FiberRadius", &TressFXRenderingSettings::m_FiberRadius) + ->Field("TipPercentage", &TressFXRenderingSettings::m_TipPercentage) + ->Field("StrandUVTilingFactor", &TressFXRenderingSettings::m_StrandUVTilingFactor) + ->Field("FiberRatio", &TressFXRenderingSettings::m_FiberRatio) + + // Lighting/shading - Original TressFX Kajiya lighting model + ->Field("HairMatBaseColor", &TressFXRenderingSettings::m_HairMatBaseColor) + ->Field("HairMatTipColor", &TressFXRenderingSettings::m_HairMatTipColor) + ->Field("HairKDiffuse", &TressFXRenderingSettings::m_HairKDiffuse) + ->Field("HairKSpec1", &TressFXRenderingSettings::m_HairKSpec1) + ->Field("HairSpecExp1", &TressFXRenderingSettings::m_HairSpecExp1) + ->Field("HairKSpec2", &TressFXRenderingSettings::m_HairKSpec2) + ->Field("HairSpecExp2", &TressFXRenderingSettings::m_HairSpecExp2) + // Lighting/shading - modified Marschner lighting model + ->Field("HairRoughness", &TressFXRenderingSettings::m_HairRoughness) + ->Field("HairCuticleTilt", &TressFXRenderingSettings::m_HairCuticleTilt) + + // shadow lookup + ->Field("HairShadowAlpha", &TressFXRenderingSettings::m_HairShadowAlpha) + ->Field("HairFiberSpacing", &TressFXRenderingSettings::m_HairFiberSpacing) + ->Field("HairMaxShadowFibers", &TressFXRenderingSettings::m_HairMaxShadowFibers) + ->Field("ShadowLODStartDistance", &TressFXRenderingSettings::m_ShadowLODStartDistance) + ->Field("ShadowLODEndDistance", &TressFXRenderingSettings::m_ShadowLODEndDistance) + ->Field("ShadowLODPercent", &TressFXRenderingSettings::m_ShadowLODPercent) + ->Field("ShadowLODWidthMultiplier", &TressFXRenderingSettings::m_ShadowLODWidthMultiplier) + + // others + ->Field("EnableStrandUV", &TressFXRenderingSettings::m_EnableStrandUV) + ->Field("EnableStrandTangent", &TressFXRenderingSettings::m_EnableStrandTangent) + ->Field("EnableThinTip", &TressFXRenderingSettings::m_EnableThinTip) + ->Field("EnableHairLOD", &TressFXRenderingSettings::m_EnableHairLOD) + ->Field("EnableShadowLOD", &TressFXRenderingSettings::m_EnableShadowLOD) + ; + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("TressFXRenderingSettings", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_baseAlbedoAsset, "Base Albedo Asset", + "This texture is the UV mapped color texture to use for the 'scalp'.") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &TressFXRenderingSettings::OnImgChanged) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_strandAlbedoAsset, "Strand Albedo Asset", + "Albedo texture to use along the strand.") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &TressFXRenderingSettings::OnImgChanged) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_LODStartDistance, "LOD Start Distance", + "Distance to begin LOD. Distance is in centimeters between the camera and hair.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_LODEndDistance, "LOD End Distance", + "Distance where LOD should be at its maximum reduction/multiplier values, in centimeters.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_LODPercent, "Max LOD Reduction", + "Maximum amount of reduction as a percentage of the original.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_LODWidthMultiplier, "Max LOD Strand Width Multiplier", + "Maximum amount the strand width would be multiplied by.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_FiberRadius, "Fiber Radius", "Diameter of the fiber.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_TipPercentage, "Tip Percentage", + "Dictates the amount of lerp blend between Base Scalp Albedo and Mat Tip Color.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_StrandUVTilingFactor, "Strand UVTiling Factor", + "Amount of tiling to use (1D) along the strand.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_FiberRatio, "Fiber ratio", + "Used with thin tip. Sets the extent to which the hair strand will taper.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Color, &TressFXRenderingSettings::m_HairMatBaseColor, "Base Color", + "RGB color to be used for the base color of the hair.") + ->Attribute(AZ_CRC("AlphaChannel", 0xa0cab5cf), true) + ->DataElement( + AZ::Edit::UIHandlers::Color, &TressFXRenderingSettings::m_HairMatTipColor, "Mat Tip Color", + "RGB color to use for a blend from root to tip.") + ->Attribute(AZ_CRC("AlphaChannel", 0xa0cab5cf), true) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_HairKDiffuse, "Hair Kdiffuse", + "Diffuse coefficient, think of it as a gain value. The Kajiya-Kay model diffuse component is proportional to " + "the sine between the light and tangent vectors.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairKSpec1, "Hair Ks1", + "Primary specular reflection coefficient (shifted toward the root).") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairSpecExp1, "Hair Ex1", + "Specular power to use for the calculated specular root value (primary highlight that is shifted toward the root.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 100.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairKSpec2, "Hair Ks2", + "Secondary specular reflection coefficient (shifted toward the tip).") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairSpecExp2, "Hair Ex2", + "Specular power to use for the calculated specular tip value.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 100.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairRoughness, "Hair Roughness", + "Roughness of the hair - effective value is between 0.5 and 0.7") + ->Attribute(AZ::Edit::Attributes::Min, 0.4f) + ->Attribute(AZ::Edit::Attributes::Max, 0.9f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairCuticleTilt, "Hair Cuticle Angle", + "Cutical angle in radians determeaning how the light refraction behaves. Suggested value is 5-8 degrees --> 0.07") + ->Attribute(AZ::Edit::Attributes::Min, -0.05f) + ->Attribute(AZ::Edit::Attributes::Max, 0.15f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairShadowAlpha, "Hair Shadow Alpha", + "Used to attenuate hair shadows based on distance (depth into the strands of hair).") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairFiberSpacing, "Fiber Spacing", + "How much spacing between the fibers (should include fiber radius when setting this value). ") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairMaxShadowFibers, "Max Shadow Fibers", + "Used as a cutoff value for the shadow attenuation calculation.") + ->Attribute(AZ::Edit::Attributes::Min, 0) + ->Attribute(AZ::Edit::Attributes::Max, 100) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_ShadowLODStartDistance, "Shadow LOD Start Distance ", + "(Shadow)Distance to begin LOD.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_ShadowLODEndDistance, "Shadow LOD End Distance", + "(Shadow)Distance where LOD should be at its maximum reduction/multiplier values.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_ShadowLODPercent, "Shadow Max LOD Reduction", + "Maximum amount of reduction as a percentage of the original. ") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_ShadowLODWidthMultiplier, + "Shadow Max LOD Strand Width Multiplier", + "Maximum amount the shadow width cast by the strand would be multiplied by.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableStrandUV, "Enable Strand UV", + "Turns on usage of Strand Albedo.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableStrandTangent, "Enable Strand Tangent", + "Turns on usage of Strand Tangent.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableThinTip, "Enable Thin Tip", + "If selected, the very end of the hair will narrow to a tip, otherwise it will stay squared.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableHairLOD, "Enable Hair LOD", + "Turn on Level of Detail usage for the hair.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableShadowLOD, "Enable Hair LOD(Shadow)", + "Turn on Level of Detail usage for the shadow fo the hair.") + ; + } + } + } + + void TressFXRenderingSettings::OnImgChanged() + { + m_imgDirty = true; + } +} // namespace AMD diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.h new file mode 100644 index 0000000000..963e2165bf --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.h @@ -0,0 +1,146 @@ +// ---------------------------------------------------------------------------- +// Wrappers for setting values that end up in constant buffers. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + + +//#ifndef _TRESSFXSIMULATIONPARAMS_H_ +//#define _TRESSFXSIMULATIONPARAMS_H_ +/* +#pragma once +*/ +#include +#include +#include +#include +#include +#include + +// Atom +#include + +#include + +namespace AMD +{ + class TressFXSimulationSettings + { + public: + AZ_TYPE_INFO(AZ::Render::TressFXSimulationSettings, "{B16E92B3-C859-4421-9170-65C2C6A60062}"); + static void Reflect(AZ::ReflectContext* context); + + // VSPf + float m_vspCoeff = 0.758f; + float m_vspAccelThreshold = 1.208f; + + // local constraint + float m_localConstraintStiffness = 0.908f; + int m_localConstraintsIterations = 3; + + // global constraint + float m_globalConstraintStiffness = 0.408f; + float m_globalConstraintsRange = 0.308f; + + // length constraint + int m_lengthConstraintsIterations = 3; + + // damping + float m_damping = 0.08f; + + // gravity + float m_gravityMagnitude = 0.19f; + + // tip separation for follow hair from its guide + float m_tipSeparation = 0.1f; + + // wind + float m_windMagnitude = 0.0f; + AZ::Vector3 m_windDirection{1.0f, 0.0f, 0.0f}; + float m_windAngleRadians = 3.1415926f / 180.0f * 40.0f; + float m_clampPositionDelta = 20.0f; + }; + + class TressFXRenderingSettings + { + public: + AZ_TYPE_INFO(AZ::Render::TressFXRenderingSettings, "{7EFD9317-4DE8-455D-A2E5-B5B62FF1F5D7}"); + static void Reflect(AZ::ReflectContext* context); + + // LOD settings + float m_LODStartDistance = 1.f; + float m_LODEndDistance = 5.f; + float m_LODPercent = 0.5f; + float m_LODWidthMultiplier = 2.f; + + // General information + float m_FiberRadius = 0.002f; + float m_TipPercentage = 0.0f; + float m_StrandUVTilingFactor = 1.f; + float m_FiberRatio = 0.06f; + + // Original TressFX Kajiya lighting model parameters + AZ::Color m_HairMatBaseColor{ 1.f, 1.f, 1.f, 0.63f }; + AZ::Color m_HairMatTipColor{1.f, 1.f, 1.f, 0.63f}; + float m_HairKDiffuse = 0.22f; + float m_HairKSpec1 = 0.0012f; + float m_HairSpecExp1 = 14.40f; + + float m_HairKSpec2 = 0.136f; + float m_HairSpecExp2 = 11.80f; + + // Marschner lighting model parameters + float m_HairRoughness = 0.65f; + float m_HairCuticleTilt = 0.08; // Tilt angle in radians roughly 5-6 degrees tilt + + // For deep approximated shadow lookup + float m_HairShadowAlpha = 0.35f; + float m_HairFiberSpacing = 0.4f; + int m_HairMaxShadowFibers = 50; + float m_ShadowLODStartDistance = 1.f; + float m_ShadowLODEndDistance = 5.f; + float m_ShadowLODPercent = 0.5f; + float m_ShadowLODWidthMultiplier = 2.f; + + bool m_EnableStrandUV = false; + bool m_EnableStrandTangent = false; + bool m_EnableThinTip = true; + bool m_EnableHairLOD = false; + bool m_EnableShadowLOD = false; + + // Legacy settings, replaced by assets. Only reserved as a fallback option. + AZStd::string m_BaseAlbedoName = ""; + AZStd::string m_StrandAlbedoName = ""; + + AZ::Data::Asset m_baseAlbedoAsset; + AZ::Data::Asset m_strandAlbedoAsset; + bool m_imgDirty = false; // marks if the image assets require update + + private: + void OnImgChanged(); // Per image asset handling callback + }; + +} // namespace AMD + +//#endif // _TRESSFXSIMULATIONPARAMS_H_ diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.cpp new file mode 100644 index 0000000000..4c84e5ba1a --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.cpp @@ -0,0 +1,488 @@ +// ---------------------------------------------------------------------------- +// Interface for the shortcut method. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include + +#include "EngineInterface.h" +#include "TressFXLayouts.h" +#include "TressFXShortCut.h" +#include "HairStrands.h" +#include "TressFXHairObject.h" + +using namespace AMD; + +TressFXShortCut::TressFXShortCut() : + m_nScreenWidth(0), + m_nScreenHeight(0), + m_pDepths(), + m_pInvAlpha(), + m_pColors(), + // Bind Sets + m_pShortCutDepthsAlphaBindSet(nullptr), + m_pShortCutDepthReadBindSet(nullptr), + m_pShortCutColorReadBindSet(nullptr), + // Render Pass Sets + m_pShortCutDepthsAlphaRenderTargetSet(nullptr), + m_pShortCutDepthResolveRenderTargetSet(nullptr), + m_pShortCutHairColorRenderTargetSet(nullptr), + m_pColorResolveRenderTargetSet(nullptr), + // PSOs + m_pDepthsAlphaPSO(nullptr), + m_pDepthResolvePSO(nullptr), + m_pHairColorPSO(nullptr), + m_pHairResolvePSO(nullptr), + // Bindsets + m_ShadeParamsBindSet(nullptr) +{ +} + +TressFXShortCut::~TressFXShortCut() +{ + m_ShadeParamsConstantBuffer.Reset(); +} + +void TressFXShortCut::Initialize(int width, int height) +{ + Create(GetDevice(), width, height); + + // Create constant buffer and bind set + m_ShadeParamsConstantBuffer.CreateBufferResource("TressFXShadeParams"); + EI_BindSetDescription set = { { m_ShadeParamsConstantBuffer.GetBufferResource() } }; + m_ShadeParamsBindSet = GetDevice()->CreateBindSet(GetShortCutShadeParamLayout(), set); + + // Depth Alpha Pass + { + //std::vector DepthAlphaDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcColor; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::SrcAlpha; + + EI_BindLayout* DepthAlphaLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetViewLayout(), GetShortCutDepthsAlphaLayout(), GetSamplerLayout() }; + psoParams.layouts = DepthAlphaLayouts; + psoParams.numLayouts = 5; + psoParams.renderTargetSet = m_pShortCutDepthsAlphaRenderTargetSet.get(); + + m_pDepthsAlphaPSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "RenderHairDepthAlphaVS", "TressFXShortCut.hlsl", "DepthsAlphaPS", psoParams); + } + + // Depth resolve pass + { + //std::vector DepthResolveDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = false; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + + EI_BindLayout* DepthResolveLayouts[] = { GetShortCutDepthReadLayout() }; + psoParams.layouts = DepthResolveLayouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = m_pShortCutDepthResolveRenderTargetSet.get(); + + m_pDepthResolvePSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "FullScreenVS", "TressFXShortCut.hlsl", "ResolveDepthPS", psoParams); + } + + // Hair Color Pass + { + //std::vector HairColorDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + + EI_BindLayout* HairColorLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetViewLayout(), GetLightLayout(), GetSamplerLayout(), GetShortCutShadeParamLayout() }; + psoParams.layouts = HairColorLayouts; + psoParams.numLayouts = 6; + psoParams.renderTargetSet = m_pShortCutHairColorRenderTargetSet.get(); + + m_pHairColorPSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "RenderHairColorVS", "TressFXShortCut.hlsl", "HairColorPS", psoParams); + } + + // Hair Resolve + { + //std::vector descs; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcAlpha; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { GetShortCutColorReadLayout() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = m_pColorResolveRenderTargetSet.get(); + m_pHairResolvePSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "FullScreenVS", "TressFXShortCut.hlsl", "ResolveHairPS", psoParams); + } +} + +bool TressFXShortCut::Create(EI_Device* pDevice, int width, int height) +{ + m_nScreenWidth = width; + m_nScreenHeight = height; + + // Create required resources + m_pDepths = pDevice->CreateUint32Resource(width, height, TRESSFX_SHORTCUT_K, "ShortCutDepthsTexture", TRESSFX_SHORTCUT_INITIAL_DEPTH); + AMD::float4 clearValues = { 1.f, 1.f, 1.f, 1.f }; + m_pInvAlpha = pDevice->CreateRenderTargetResource(width, height, 1, 4, "ShortCutInvAlphaTexture", &clearValues); + clearValues = { 0.f, 0.f, 0.f, 1.f }; + m_pColors = pDevice->CreateRenderTargetResource(width, height, 4, 4, "ShortCutColorsTexture", &clearValues); + + // Create bind sets + CreateDepthsAlphaBindSet(pDevice); + CreateDepthReadBindSet(pDevice); + CreateColorReadBindSet(pDevice); + + // Create RenderPasss sets + CreateDepthsAlphaRenderTargetSet(pDevice); + CreateDepthResolveRenderTargetSet(pDevice); + CreateHairColorRenderTargetSet(pDevice); + CreateColorResolveRenderTargetSet(pDevice); + + return true; +} + +void TressFXShortCut::CreateDepthsAlphaBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_pDepths.get() } + }; + m_pShortCutDepthsAlphaBindSet = pDevice->CreateBindSet(GetShortCutDepthsAlphaLayout(), bindSet); +} + +void TressFXShortCut::CreateDepthReadBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_pDepths.get() } + }; + m_pShortCutDepthReadBindSet = pDevice->CreateBindSet(GetShortCutDepthReadLayout(), bindSet); +} + +void TressFXShortCut::CreateColorReadBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_pColors.get(), m_pInvAlpha.get() } + }; + m_pShortCutColorReadBindSet = pDevice->CreateBindSet(GetShortCutColorReadLayout(), bindSet); +} + +void TressFXShortCut::CreateDepthsAlphaRenderTargetSet(EI_Device* pDevice) +{ + // For shortcut depth alpha render pass, we need InvAlphaTexture bound with Depth buffer. + const EI_Resource* ResourceArray[] = { m_pInvAlpha.get(), GetDevice()->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + + float clearValues[] = { 1.f, 1.f, 1.f, 1.f }; // Color + m_pShortCutDepthsAlphaRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, clearValues); +} + +void TressFXShortCut::CreateDepthResolveRenderTargetSet(EI_Device* pDevice) +{ + // For shortcut depth resolve render pass, we just need the depth buffer bound + const EI_Resource* ResourceArray[] = { GetDevice()->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + m_pShortCutDepthResolveRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 1, AttachmentParams, nullptr); +} + +void TressFXShortCut::CreateHairColorRenderTargetSet(EI_Device* pDevice) +{ + // For shortcut hair color render pass, we need the color texture bound with Depth buffer. + const EI_Resource* ResourceArray[] = { m_pColors.get(), GetDevice()->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + + float clearValues[] = { 0.f, 0.f, 0.f, 1.f }; // Clear Color + m_pShortCutHairColorRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, clearValues); +} + +void TressFXShortCut::CreateColorResolveRenderTargetSet(EI_Device* pDevice) +{ + const EI_Resource* ResourceArray[] = { pDevice->GetColorBufferResource(), pDevice->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + m_pColorResolveRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, nullptr); +} + +void TressFXShortCut::Clear(EI_CommandContext& context) +{ + // Consider being explicit on values here. + // In DX, UAV counter clears are actually done when UAV is set, which makes this a bit weird, I + // suppose. + // Also try clearing in shader during fullscreen pass (although can't miss frames, and makes + // reads slower) + // or look at 0-based for fast clears. + + // Begin the render pass and transition any resources to write if needed + + if (m_firstRun) + { + // The first time we use the resource, we need to transition it out of UNDEFINED state to COPY_DEST. + // Doing from PS_SRV causes validation errors. +#ifdef TRESSFX_VK + EI_Barrier readToClear[] = + { + { m_pDepths.get(), EI_STATE_UNDEFINED, EI_STATE_COPY_DEST }, + }; + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); +#endif // TRESSFX_VK + } + else + { + EI_Barrier readToClear[] = + { +#ifdef TRESSFX_VK + { m_pDepths.get(), EI_STATE_SRV, EI_STATE_COPY_DEST }, +#else + { m_pDepths.get(), EI_STATE_SRV, EI_STATE_UAV }, +#endif // TRESSFX_VK + }; + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); + } + + context.ClearUint32Image(m_pDepths.get(), TRESSFX_SHORTCUT_INITIAL_DEPTH); +} + +void TressFXShortCut::BeginDepthsAlpha(EI_CommandContext& commandContext) +{ + // Begin the render pass and transition any resources to write if needed + if (m_firstRun) + { + EI_Barrier readToWrite[] = + { + { m_pInvAlpha.get(), EI_STATE_UNDEFINED, EI_STATE_RENDER_TARGET }, +#ifdef TRESSFX_VK + { m_pDepths.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, +#endif // TRESSFX + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + else + { + EI_Barrier readToWrite[] = + { + { m_pInvAlpha.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET }, +#ifdef TRESSFX_VK + { m_pDepths.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, +#endif // TRESSFX + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pShortCutDepthsAlphaRenderTargetSet.get(), L"BeginDepthsAlpha Pass"); +} + +void TressFXShortCut::EndDepthsAlpha(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); + + EI_Barrier writeToRead[] = + { + { m_pInvAlpha.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV }, + { m_pDepths.get(), EI_STATE_UAV, EI_STATE_SRV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(writeToRead), writeToRead); +} + +void TressFXShortCut::BeginDepthResolve(EI_CommandContext& commandContext) +{ + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pShortCutDepthResolveRenderTargetSet.get(), L"BeginDepthResolve Pass"); +} + +void TressFXShortCut::EndDepthResolve(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); +} + +void TressFXShortCut::BeginHairColor(EI_CommandContext& commandContext) +{ + // Begin the render pass and transition any resources to write if needed + if (m_firstRun) + { + EI_Barrier readToWrite[] = + { + { m_pColors.get(), EI_STATE_UNDEFINED, EI_STATE_RENDER_TARGET }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + else + { + EI_Barrier readToWrite[] = + { + { m_pColors.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pShortCutHairColorRenderTargetSet.get(), L"BeginHairColor Pass"); +} + +void TressFXShortCut::EndHairColor(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); + + // Transition resources to read for next pass + EI_Barrier writeToRead[] = + { + { m_pColors.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(writeToRead), writeToRead); +} + +void TressFXShortCut::BeginColorResolve(EI_CommandContext& commandContext) +{ + // Color/Depth should already be in a write state + // hair colors and inv alpha should also already be in a read state + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pColorResolveRenderTargetSet.get(), L"BeginColorResolve"); +} + +void TressFXShortCut::EndColorResolve(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); +} + +void TressFXShortCut::DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets) +{ + // Loop through all hair strands and render them + for (size_t i = 0; i < numHairStrands; i++) + { + if (hairStrands[i]->GetTressFXHandle()) + hairStrands[i]->GetTressFXHandle()->DrawStrands(commandContext, *pPSO, extraBindSets, numExtraBindSets); + } +} + +void TressFXShortCut::Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet) +{ + // Clear out depth texture array + Clear(commandContext); + + // Render the DepthAlpha pass + BeginDepthsAlpha(commandContext); + { + EI_BindSet* ExtraBindSets[] = { viewBindSet, m_pShortCutDepthsAlphaBindSet.get(), GetDevice()->GetSamplerBindSet() }; + DrawHairStrands(commandContext, numHairStrands, hairStrands, m_pDepthsAlphaPSO.get(), ExtraBindSets, 3); + } + EndDepthsAlpha(commandContext); + GetDevice()->GetTimeStamp("Shortcut DepthAlpha"); + + // Depth Resolve pass + BeginDepthResolve(commandContext); + { + EI_BindSet* BindSets[] = { m_pShortCutDepthReadBindSet.get() }; + GetDevice()->DrawFullScreenQuad(commandContext, *m_pDepthResolvePSO, BindSets, 1); + } + EndDepthResolve(commandContext); + GetDevice()->GetTimeStamp("Shortcut DepthAlpha Resolve"); + + // Render the color pass (hair render) + BeginHairColor(commandContext); + { + EI_BindSet* ExtraBindSets[] = { viewBindSet, lightBindSet, GetDevice()->GetSamplerBindSet(), m_ShadeParamsBindSet.get() }; + DrawHairStrands(commandContext, numHairStrands, hairStrands, m_pHairColorPSO.get(), ExtraBindSets, 4); + } + EndHairColor(commandContext); + GetDevice()->GetTimeStamp("Shortcut Hair Pass"); + + // Apply hair to main target + BeginColorResolve(commandContext); + { + EI_BindSet* BindSets[] = { m_pShortCutColorReadBindSet.get() }; + GetDevice()->DrawFullScreenQuad(commandContext, *m_pHairResolvePSO, BindSets, 1); + } + EndColorResolve(commandContext); + GetDevice()->GetTimeStamp("Shortcut Hair Apply"); + + m_firstRun = false; +} + +void TressFXShortCut::UpdateShadeParameters(std::vector& renderSettings) +{ + // Update Render Parameters + for (int i = 0; i < renderSettings.size(); ++i) + { + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberRadius = renderSettings[i]->m_FiberRadius; // Don't modify radius by LOD multiplier as this one is used to calculate shadowing and that calculation should remain unaffected + m_ShadeParamsConstantBuffer->HairShadeParams[i].ShadowAlpha = renderSettings[i]->m_HairShadowAlpha; + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberSpacing = renderSettings[i]->m_HairFiberSpacing; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairEx2 = renderSettings[i]->m_HairSpecExp2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairKs2 = renderSettings[i]->m_HairKSpec2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].MatKValue = { 0.f, renderSettings[i]->m_HairKDiffuse, renderSettings[i]->m_HairKSpec1, renderSettings[i]->m_HairSpecExp1 }; // no ambient + } + + m_ShadeParamsConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.h new file mode 100644 index 0000000000..e1a8b425e1 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.h @@ -0,0 +1,110 @@ + +// ---------------------------------------------------------------------------- +// Interface for the shortcut method. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef AMD_TRESSFXSHORTCUT_H +#define AMD_TRESSFXSHORTCUT_H + +#include "EngineInterface.h" +#include "TressFXConstantBuffers.h" +#include "TressFXSettings.h" + +#include + +#define TRESSFX_SHORTCUT_DEPTH_NODE_SIZE 4 +#define TRESSFX_SHORTCUT_K 3 +#define TRESSFX_SHORTCUT_INITIAL_DEPTH 0x3f800000 + +class HairStrands; + +class TressFXShortCut +{ +public: + TressFXShortCut(); + ~TressFXShortCut(); + + void Initialize(int width, int height); + void Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet); + void UpdateShadeParameters(std::vector& renderSettings); + +private: + // node size should include room for UINT next pointer. + bool Create(EI_Device* pDevice, int width, int height); + void Clear(EI_CommandContext& context); + + void DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets); + + // Begin/End for various stages of hair application/rendering + void BeginDepthsAlpha(EI_CommandContext& context); + void EndDepthsAlpha(EI_CommandContext& context); + + void BeginDepthResolve(EI_CommandContext& context); + void EndDepthResolve(EI_CommandContext& context); + + void BeginHairColor(EI_CommandContext& context); + void EndHairColor(EI_CommandContext& context); + + void BeginColorResolve(EI_CommandContext& context); + void EndColorResolve(EI_CommandContext& context); + + // Bind set creation functions + void CreateDepthsAlphaBindSet(EI_Device* pDevice); + void CreateDepthReadBindSet(EI_Device* pDevice); + void CreateColorReadBindSet(EI_Device* pDevice); + + // RenderPass set creation functions + void CreateDepthsAlphaRenderTargetSet(EI_Device* pDevice); + void CreateDepthResolveRenderTargetSet(EI_Device* pDevice); + void CreateHairColorRenderTargetSet(EI_Device* pDevice); + void CreateColorResolveRenderTargetSet(EI_Device* pDevice); + + int m_nScreenWidth; + int m_nScreenHeight; + + bool m_firstRun = true; + + std::unique_ptr m_pDepths; + std::unique_ptr m_pInvAlpha; + std::unique_ptr m_pColors; + + std::unique_ptr m_pShortCutDepthsAlphaBindSet = nullptr; + std::unique_ptr m_pShortCutDepthReadBindSet = nullptr; + std::unique_ptr m_pShortCutColorReadBindSet = nullptr; + + std::unique_ptr m_pShortCutDepthsAlphaRenderTargetSet = nullptr; + std::unique_ptr m_pShortCutDepthResolveRenderTargetSet = nullptr; + std::unique_ptr m_pShortCutHairColorRenderTargetSet = nullptr; + std::unique_ptr m_pColorResolveRenderTargetSet = nullptr; + + std::unique_ptr m_pDepthsAlphaPSO = nullptr; + std::unique_ptr m_pDepthResolvePSO = nullptr; + std::unique_ptr m_pHairColorPSO = nullptr; + std::unique_ptr m_pHairResolvePSO = nullptr; + + TressFXUniformBuffer m_ShadeParamsConstantBuffer; + std::unique_ptr m_ShadeParamsBindSet = nullptr; +}; + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.cpp new file mode 100644 index 0000000000..1862c7f7b7 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.cpp @@ -0,0 +1,141 @@ +// ---------------------------------------------------------------------------- +// Invokes simulation compute shaders. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "AMD_TressFX.h" +#include "TressFXSimulation.h" + +// TressFX +#include "TressFXLayouts.h" +#include "TressFXHairObject.h" +#include "EngineInterface.h" + +void TressFXSimulation::Initialize(EI_Device* pDevice) +{ + EI_BindLayout * layouts[] = { GetSimLayout(), GetSimPosTanLayout() }; + mVelocityShockPropagationPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "VelocityShockPropagation", layouts, 2); + mIntegrationAndGlobalShapeConstraintsPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "IntegrationAndGlobalShapeConstraints", layouts, 2); + mCalculateStrandLevelDataPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "CalculateStrandLevelData", layouts, 2); + mLocalShapeConstraintsPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "LocalShapeConstraints", layouts, 2); + mLengthConstriantsWindAndCollisionPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "LengthConstriantsWindAndCollision", layouts, 2); + mUpdateFollowHairVerticesPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "UpdateFollowHairVertices", layouts, 2); + + // Adi - skins the hair vertices and follow hair, avoids any simulation + mSkinHairVerticesTestPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "SkinHairVerticesOnly", layouts, 2); +} + +enum DispatchLevel +{ + DISPATCHLEVEL_VERTEX, + DISPATCHLEVEL_STRAND +}; + +void DispatchComputeShader(EI_CommandContext& ctx, EI_PSO * pso, DispatchLevel level, std::vector& hairObjects, const bool iterate = false) +{ + ctx.BindPSO(pso); + for (int i = 0; i < hairObjects.size(); ++i) + { + int numGroups = (int)((float)hairObjects[i]->GetNumTotalHairVertices() / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + if (level == DISPATCHLEVEL_STRAND) + { + numGroups = (int)(((float)(hairObjects[i]->GetNumTotalHairStrands()) / (float)TRESSFX_SIM_THREAD_GROUP_SIZE)); + } + EI_BindSet* bindSets[] = { hairObjects[i]->GetSimBindSet(), &hairObjects[i]->GetDynamicState().GetSimBindSet() }; + ctx.BindSets(pso, 2, bindSets); + + int iterations = 1; + if (iterate) + { + iterations = hairObjects[i]->GetCPULocalShapeIterations(); + } + for (int j = 0; j < iterations; ++j) + { + ctx.Dispatch(numGroups); + } + hairObjects[i]->GetDynamicState().UAVBarrier(ctx); + } +} + +// Adi: this method handles the skinning of the hair and update the follow hair. +// It avoid any physics and simulation response and should be used for initial integration testing +void TressFXSimulation::UpdateHairSkinning(EI_CommandContext& commandContext, std::vector& hairObjects) +{ + // Adi: binding the m_SimCB buffers (matrices, wind parameters..) to the GPU + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->UpdateConstantBuffer(commandContext); + } + + // Adi: only skin hair vertices without any physics. + DispatchComputeShader(commandContext, mSkinHairVerticesTestPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("SkinHairVerticesTestPSO"); + + + // UpdateFollowHairVertices - This part is embedded in the single pass shader +// DispatchComputeShader(commandContext, mUpdateFollowHairVerticesPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); +// GetDevice()->GetTimeStamp("UpdateFollowHairVertices"); + + // Adi: make sure the dual buffers are updated properly - advance the current frame + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->IncreaseSimulationFrame(); + } +} + +void TressFXSimulation::Simulate(EI_CommandContext& commandContext, std::vector& hairObjects) +{ + // Binding the bones' matrices + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->UpdateConstantBuffer(commandContext); + } + + // IntegrationAndGlobalShapeConstraints + DispatchComputeShader(commandContext, mIntegrationAndGlobalShapeConstraintsPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("IntegrationAndGlobalShapeContraints"); + + // Calculate Strand Level Data + DispatchComputeShader(commandContext, mCalculateStrandLevelDataPSO.get(), DISPATCHLEVEL_STRAND, hairObjects); + GetDevice()->GetTimeStamp("CalculateStrandLevelData"); + + // VelocityShockPropagation + DispatchComputeShader(commandContext, mVelocityShockPropagationPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("VelocityShockPropagation"); + + DispatchComputeShader(commandContext, mLocalShapeConstraintsPSO.get(), DISPATCHLEVEL_STRAND, hairObjects, true); + GetDevice()->GetTimeStamp("LocalShapeConstraints"); + + // LengthConstriantsWindAndCollision + DispatchComputeShader(commandContext, mLengthConstriantsWindAndCollisionPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("LengthConstriantsWindAndCollision"); + + // UpdateFollowHairVertices + DispatchComputeShader(commandContext, mUpdateFollowHairVerticesPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("UpdateFollowHairVertices"); + + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->IncreaseSimulationFrame(); + } +} diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.h new file mode 100644 index 0000000000..793700a284 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.h @@ -0,0 +1,54 @@ +// ---------------------------------------------------------------------------- +// Invokes simulation compute shaders. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#ifndef TRESSFXSIMULATION_H_ +#define TRESSFXSIMULATION_H_ + +#include "TressFXCommon.h" +#include "EngineInterface.h" + +class TressFXHairObject; + +class TressFXSimulation : private TressFXNonCopyable +{ +public: + void Initialize(EI_Device* pDevice); + void Simulate(EI_CommandContext& commandContext, std::vector& hairObjects); + void UpdateHairSkinning(EI_CommandContext& commandContext, std::vector& hairObjects); + +private: + // Maybe these just need to be compute shader references. + std::unique_ptr mVelocityShockPropagationPSO; + std::unique_ptr mIntegrationAndGlobalShapeConstraintsPSO; + std::unique_ptr mCalculateStrandLevelDataPSO; + std::unique_ptr mLocalShapeConstraintsPSO; + std::unique_ptr mLengthConstriantsWindAndCollisionPSO; + std::unique_ptr mUpdateFollowHairVerticesPSO; + + // Adi: only skin the vertices - no physics is applied + std::unique_ptr mSkinHairVerticesTestPSO; +}; + +#endif // TRESSFXSIMULATION_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFXSample.cpp b/Gems/AtomTressFX/External/Code/src/TressFXSample.cpp new file mode 100644 index 0000000000..9356e946c5 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFXSample.cpp @@ -0,0 +1,960 @@ +// ---------------------------------------------------------------------------- +// Brings together all the TressFX components. +// ---------------------------------------------------------------------------- +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include "stdafx.h" + +#include "TressFXSample.h" + +#include "TressFXPPLL.h" +#include "TressFXShortCut.h" + +#include "AMD_TressFX.h" + +#include "TressFXLayouts.h" + +#include "HairStrands.h" +#include "SDF.h" +#include "Simulation.h" +#include "Base/Imgui.h" +#include "Base/ImguiHelper.h" +#include "Misc/Misc.h" + +#include "EngineInterface.h" + +#include +#include + +const bool VALIDATION_ENABLED = false; +const uint32_t NUMBER_OF_BACK_BUFFERS = 3; + +// This could instead be retrieved as a variable from the +// script manager, or passed as an argument. +static const size_t AVE_FRAGS_PER_PIXEL = 12; +static const size_t PPLL_NODE_SIZE = 16; + +TressFXSample::TressFXSample(LPCSTR name) + : FrameworkWindows(name), + m_eOITMethod(OIT_METHOD_SHORTCUT), // OIT_METHOD_PPLL + m_nScreenWidth(0), + m_nScreenHeight(0), + m_nPPLLNodes(0) +{ + m_lastFrameTime = 0.0f; + m_time = 0; + m_deltaTime = 0.0f; + m_pShortCut = nullptr; + m_pPPLL = nullptr; + m_pSimulation = nullptr; +} + +void TressFXSample::Simulate(double fTime, bool bUpdateCollMesh, bool bSDFCollisionResponse, bool bAsyncCompute) +{ + SimulationContext ctx; + ctx.hairStrands.resize(m_activeScene.objects.size()); + ctx.collisionMeshes.resize(m_activeScene.collisionMeshes.size()); + for (size_t i = 0; i < m_activeScene.objects.size(); ++i) + { + ctx.hairStrands[i] = m_activeScene.objects[i].hairStrands.get(); + } + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); ++i) + { + ctx.collisionMeshes[i] = m_activeScene.collisionMeshes[i].get(); + } + m_pSimulation->StartSimulation(fTime, ctx, bUpdateCollMesh, bSDFCollisionResponse, bAsyncCompute); +} + +void TressFXSample::WaitSimulateDone() +{ + m_pSimulation->WaitOnSimulation(); +} + +void TressFXSample::ToggleShortCut() +{ + OITMethod newMethod; + if (m_eOITMethod == OIT_METHOD_PPLL) + newMethod = OIT_METHOD_SHORTCUT; + else + newMethod = OIT_METHOD_PPLL; + SetOITMethod(newMethod); +} + +void TressFXSample::DrawCollisionMesh() +{ + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); i++) + m_activeScene.collisionMeshes[i]->DrawMesh(commandList); +} + +void TressFXSample::GenerateMarchingCubes() +{ +#if ENABLE_MARCHING_CUBES + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); i++) + m_activeScene.collisionMeshes[i]->GenerateIsoSurface(commandList); +#endif +} + +void TressFXSample::DrawSDF() +{ +#if ENABLE_MARCHING_CUBES + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); i++) + m_activeScene.collisionMeshes[i]->DrawIsoSurface(commandList); +#endif +} + +void TressFXSample::InitializeLayouts() +{ + InitializeAllLayouts(GetDevice()); +} + +void TressFXSample::DestroyLayouts() +{ + DestroyAllLayouts(GetDevice()); +} + +// TODO: Loading asset function should be called from OnAssetReload? +void TressFXSample::LoadScene(TressFXSceneDescription& desc) +{ + // Since GLTF is the first thing we render, we want to clear on load + m_activeScene.scene->OnCreate(GetDevice(), m_pGLTFRenderTargetSet.get(), m_pShadowRenderTargetSet.get(), desc.gltfFilePath, desc.gltfFileName, desc.gltfBonePrefix, desc.startOffset); + + // TODO Why? + DestroyLayouts(); + + InitializeLayouts(); + + m_pPPLL.reset(new TressFXPPLL); + m_pShortCut.reset(new TressFXShortCut); + m_pSimulation.reset(new Simulation); + + EI_Device* pDevice = GetDevice(); + + // Used for uploading initial data + EI_CommandContext& uploadCommandContext = pDevice->GetCurrentCommandContext(); + + for (size_t i = 0; i < desc.objects.size(); ++i) + { + HairStrands* hair = new HairStrands( + m_activeScene.scene.get(), + desc.objects[i].tfxFilePath.c_str(), + desc.objects[i].tfxBoneFilePath.c_str(), + desc.objects[i].hairObjectName.c_str(), + desc.objects[i].numFollowHairs, + desc.objects[i].tipSeparationFactor, + desc.objects[i].mesh, (int)i); + hair->GetTressFXHandle()->PopulateDrawStrandsBindSet(GetDevice(), &desc.objects[i].initialRenderingSettings); + m_activeScene.objects.push_back({ std::unique_ptr(hair), desc.objects[i].initialSimulationSettings, desc.objects[i].initialRenderingSettings, desc.objects[i].name.c_str() }); + } + + for (size_t i = 0; i < desc.collisionMeshes.size(); ++i) + { + CollisionMesh* mesh = new CollisionMesh( + m_activeScene.scene.get(), m_pDebugRenderTargetSet.get(), + desc.collisionMeshes[i].name.c_str(), + desc.collisionMeshes[i].tfxMeshFilePath.c_str(), + desc.collisionMeshes[i].numCellsInXAxis, + desc.collisionMeshes[i].collisionMargin, + desc.collisionMeshes[i].mesh, + desc.collisionMeshes[i].followBone.c_str() + ); + m_activeScene.collisionMeshes.push_back(std::unique_ptr(mesh)); + } + } + +void TressFXSample::UpdateSimulationParameters() +{ + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdateSimulationParameters(&m_activeScene.objects[i].simulationSettings, m_deltaTime); + } +} + +void TressFXSample::UpdateRenderingParameters() +{ + std::vector RenderSettings; + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + // For now, just using distance of camera to 0, 0, 0, but should be passing in a root position for the hair object we want to LOD + float Distance = sqrtf(m_activeScene.scene->GetCameraPos().x * m_activeScene.scene->GetCameraPos().x + m_activeScene.scene->GetCameraPos().y * m_activeScene.scene->GetCameraPos().y + m_activeScene.scene->GetCameraPos().z * m_activeScene.scene->GetCameraPos().z); + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdateRenderingParameters(&m_activeScene.objects[i].renderingSettings, m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL, m_deltaTime, Distance); + RenderSettings.push_back(&m_activeScene.objects[i].renderingSettings); + } + + // Update shade parameters for correct implementation + switch (m_eOITMethod) + { + case OIT_METHOD_SHORTCUT: + m_pShortCut->UpdateShadeParameters(RenderSettings); + break; + case OIT_METHOD_PPLL: + m_pPPLL->UpdateShadeParameters(RenderSettings); + break; + default: + break; + } +} + +void TressFXSample::UpdateRenderShadowParameters(AMD::float4& CameraPos) +{ + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + // For now, just using distance of camera to 0, 0, 0, but should be passing in a root position for the hair object we want to LOD + float Distance = sqrtf(CameraPos.x * CameraPos.x + CameraPos.y * CameraPos.y + CameraPos.z * CameraPos.z); + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdateRenderingParameters(&m_activeScene.objects[i].renderingSettings, m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL, m_deltaTime, Distance, true); + } +} + +void TressFXSample::OnResize(uint32_t width, uint32_t height) +{ + if (m_nScreenWidth != width || m_nScreenHeight != height) + { + m_nScreenWidth = width; + m_nScreenHeight = height; + RecreateSizeDependentResources(); + } + EI_Device* pDevice = GetDevice(); + + // Create PSO for the hair shadow pass (doesn't matter if it's shortcut or PPLL) if it hasn't been done yet + if (!m_pHairShadowPSO) + { + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = false; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + psoParams.colorBlendParams.colorBlendEnabled = false; + + EI_BindLayout* ShadowPassLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetShadowViewLayout() }; + psoParams.layouts = ShadowPassLayouts; + psoParams.numLayouts = 3; + psoParams.renderTargetSet = m_pShadowRenderTargetSet.get(); + + m_pHairShadowPSO = GetDevice()->CreateGraphicsPSO("TressFXShadow.hlsl", "HairShadowVS", "TressFXShadow.hlsl", "HairShadowPS", psoParams); + } +} + +void TressFXSample::RecreateSizeDependentResources() +{ + GetDevice()->FlushGPU(); + GetDevice()->OnResize(m_nScreenWidth, m_nScreenHeight); + + // Whenever there is a resize, we need to re-create on render pass set as it depends on + // the main color/depth buffers which get resized + const EI_Resource* ResourceArray[] = { GetDevice()->GetColorBufferResource(), GetDevice()->GetDepthBufferResource() }; + m_pGLTFRenderTargetSet->SetResources(ResourceArray); + m_pDebugRenderTargetSet->SetResources(ResourceArray); + + m_activeScene.scene->OnResize(m_nScreenWidth, m_nScreenHeight); + + // Needs to be created in OnResize in case we have debug buffers bound which vary by screen width/height + EI_BindSetDescription lightSet = + { + { m_activeScene.lightConstantBuffer.GetBufferResource(), GetDevice()->GetShadowBufferResource() } + }; + m_activeScene.lightBindSet = GetDevice()->CreateBindSet(GetLightLayout(), lightSet); + + // TressFX Usage + switch (m_eOITMethod) + { + case OIT_METHOD_PPLL: + m_nPPLLNodes = m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL; + m_pPPLL.reset(new TressFXPPLL); + m_pPPLL->Initialize(m_nScreenWidth, m_nScreenHeight, m_nPPLLNodes, PPLL_NODE_SIZE); + break; + case OIT_METHOD_SHORTCUT: + m_pShortCut.reset(new TressFXShortCut); + m_pShortCut->Initialize(m_nScreenWidth, m_nScreenHeight); + break; + }; +} + +void TressFXSample::DrawHairShadows() +{ + int numHairStrands = (int)m_activeScene.objects.size(); + std::vector hairStrands(numHairStrands); + EI_BindSet* ExtraBindSets[] = { m_activeScene.shadowViewBindSet.get() }; + + for (int i = 0; i < numHairStrands; ++i) + { + hairStrands[i] = m_activeScene.objects[i].hairStrands.get(); + if (hairStrands[i]->GetTressFXHandle()) + hairStrands[i]->GetTressFXHandle()->DrawStrands(GetDevice()->GetCurrentCommandContext(), *m_pHairShadowPSO.get(), ExtraBindSets, 1); + } + EI_CommandContext& pRenderCommandList = GetDevice()->GetCurrentCommandContext(); +} + +void TressFXSample::DrawHair() +{ + int numHairStrands = (int)m_activeScene.objects.size(); + std::vector hairStrands(numHairStrands); + for (int i = 0; i < numHairStrands; ++i) + { + hairStrands[i] = m_activeScene.objects[i].hairStrands.get(); + } + + EI_CommandContext& pRenderCommandList = GetDevice()->GetCurrentCommandContext(); + + switch (m_eOITMethod) + { + case OIT_METHOD_PPLL: + m_pPPLL->Draw(pRenderCommandList, numHairStrands, hairStrands.data(), m_activeScene.viewBindSet.get(), m_activeScene.lightBindSet.get()); + break; + case OIT_METHOD_SHORTCUT: + m_pShortCut->Draw(pRenderCommandList, numHairStrands, hairStrands.data(), m_activeScene.viewBindSet.get(), m_activeScene.lightBindSet.get()); + break; + }; + + for (size_t i = 0; i < hairStrands.size(); i++) + hairStrands[i]->TransitionRenderingToSim(pRenderCommandList); +} + +void TressFXSample::SetOITMethod(OITMethod method) +{ + if (method == m_eOITMethod) + return; + + // Flush the GPU before switching + GetDevice()->FlushGPU(); + + // Destroy old resources + DestroyOITResources(m_eOITMethod); + + m_eOITMethod = method; + RecreateSizeDependentResources(); +} + +void TressFXSample::DestroyOITResources(OITMethod method) +{ + // TressFX Usage + switch (m_eOITMethod) + { + case OIT_METHOD_PPLL: + m_pPPLL.reset(); + break; + case OIT_METHOD_SHORTCUT: + m_pShortCut.reset(); + break; + }; +} + +void TressFXSample::OnCreate(HWND hWnd) +{ + GetDevice()->SetVSync(m_vSync); + GetDevice()->OnCreate(hWnd, NUMBER_OF_BACK_BUFFERS, VALIDATION_ENABLED, "TressFX"); + + m_activeScene.scene.reset(new EI_Scene); + + // Create a renderpass for GLTF (needed for PSO creation) + const EI_ResourceFormat FormatArray[] = { GetDevice()->GetColorBufferFormat(), GetDevice()->GetDepthBufferFormat() }; + { + const EI_AttachmentParams AttachmentParams[] = { { EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store }, + { EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store } }; + float ClearValues[] = { 0.f, 0.f, 0.f, 0.f, // Color + 1.f, 0.f }; // Depth + + m_pGLTFRenderTargetSet = GetDevice()->CreateRenderTargetSet(FormatArray, 2, AttachmentParams, ClearValues); + } + + // Create a renderpass for shadow rendering (needed for PSO creation) + { + const EI_Resource* ResourceArray[] = { GetDevice()->GetShadowBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { { EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store } }; + float ClearValues[] = { 1.f, 0.f }; // Depth Clear + m_pShadowRenderTargetSet = GetDevice()->CreateRenderTargetSet(ResourceArray, 1, AttachmentParams, ClearValues); + } + // Create a debug render pass + { + const EI_AttachmentParams AttachmentParams[] = { { EI_RenderPassFlags::Load | EI_RenderPassFlags::Store }, + { EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store } }; + + m_pDebugRenderTargetSet = GetDevice()->CreateRenderTargetSet(FormatArray, 2, AttachmentParams, nullptr); + } + + // init GUI (non gfx stuff) + ImGUI_Init((void *)hWnd); + LoadScene(0); + + m_activeScene.viewConstantBuffer.CreateBufferResource("viewConstants"); + EI_BindSetDescription set = { { m_activeScene.viewConstantBuffer.GetBufferResource() } }; + m_activeScene.viewBindSet = GetDevice()->CreateBindSet(GetViewLayout(), set); + + m_activeScene.shadowViewConstantBuffer.CreateBufferResource("shadowViewConstants"); + EI_BindSetDescription shadowSet = { { m_activeScene.shadowViewConstantBuffer.GetBufferResource() } }; + m_activeScene.shadowViewBindSet = GetDevice()->CreateBindSet(GetViewLayout(), shadowSet); + + m_activeScene.lightConstantBuffer.CreateBufferResource("LightConstants"); + + GetDevice()->EndAndSubmitCommandBuffer(); + GetDevice()->FlushGPU(); +} + +void TressFXSample::LoadScene(int sceneNumber) +{ + TressFXSceneDescription sds[2]; + { + sds[0].gltfFilePath = "../../Assets/Objects/RatBoy/"; + sds[0].gltfFileName = "babylon.gltf"; + sds[0].gltfBonePrefix = ""; + sds[0].startOffset = 2.3f; + + // initialize settings with default settings + TressFXSimulationSettings mohawkSettings; + TressFXSimulationSettings furSettings; + mohawkSettings.m_vspCoeff = 0.758f; + mohawkSettings.m_vspAccelThreshold = 1.208f; + mohawkSettings.m_localConstraintStiffness = 0.908f; + mohawkSettings.m_localConstraintsIterations = 3; + mohawkSettings.m_globalConstraintStiffness = 0.408f; + mohawkSettings.m_globalConstraintsRange = 0.308f; + mohawkSettings.m_lengthConstraintsIterations = 3; + mohawkSettings.m_damping = 0.068f; + mohawkSettings.m_gravityMagnitude = 0.09f; + furSettings.m_vspCoeff = 0.758f; + furSettings.m_vspAccelThreshold = 1.208f; + furSettings.m_localConstraintStiffness = 0.908f; + furSettings.m_localConstraintsIterations = 2; + furSettings.m_globalConstraintStiffness = 0.408f; + furSettings.m_globalConstraintsRange = 0.308f; + furSettings.m_lengthConstraintsIterations = 2; + furSettings.m_damping = 0.068f; + furSettings.m_gravityMagnitude = 0.09f; + + TressFXRenderingSettings mohawkRenderSettings; + mohawkRenderSettings.m_BaseAlbedoName = "..\\..\\Assets\\Objects\\RatBoy\\ratBoySubstanceReady_main_BaseColor.png"; + mohawkRenderSettings.m_EnableThinTip = true; + mohawkRenderSettings.m_FiberRadius = 0.002f; + mohawkRenderSettings.m_FiberRatio = 0.06f; + mohawkRenderSettings.m_HairKDiffuse = 0.22f; + mohawkRenderSettings.m_HairKSpec1 = 0.012f; + mohawkRenderSettings.m_HairSpecExp1 = 14.40f; + mohawkRenderSettings.m_HairKSpec2 = 0.136f; + mohawkRenderSettings.m_HairSpecExp2 = 11.80f; + + TressFXRenderingSettings furRenderSettings; + furRenderSettings.m_BaseAlbedoName = "..\\..\\Assets\\Objects\\RatBoy\\ratBoySubstanceReady_main_BaseColor.png"; + furRenderSettings.m_EnableThinTip = true; + furRenderSettings.m_FiberRadius = 0.001f; + furRenderSettings.m_FiberRatio = 0.16f; + furRenderSettings.m_HairKDiffuse = 0.22f; + furRenderSettings.m_HairKSpec1 = 0.02f; + furRenderSettings.m_HairSpecExp1 = 14.40f; + furRenderSettings.m_HairKSpec2 = 0.3f; + furRenderSettings.m_HairSpecExp2 = 11.80f; + furRenderSettings.m_HairShadowAlpha = 0.034f; + + TressFXObjectDescription mohawkDesc = + { + "Mohawk", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_mohawk.tfx", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_mohawk.tfxbone", + "mohawk", + 2, // This is number of follow hairs per one guide hair. It could be zero if there is no follow hair at all. + 2.0f, + 0, // mesh number + mohawkSettings, + mohawkRenderSettings + }; + + TressFXObjectDescription furDesc = + { + "Fur", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_short.tfx", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_short.tfxbone", + "hairShort", + 1, // Filling out a little more fur. + 1.0f, + 0, + furSettings, + furRenderSettings + }; + sds[0].objects.push_back(mohawkDesc); + sds[0].objects.push_back(furDesc); + + TressFXCollisionMeshDescription collisionMeshBody = + { + "RatBoy_body", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_body.tfxmesh", + 50, + 0.0f, + 0, + "frenchHornMonster_root_JNT" + }; + TressFXCollisionMeshDescription collisionMeshLeftHand = + { + "RatBoy_left_hand", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_left_hand.tfxmesh", + 32, + 0.5f, + 0, + "frenchHornMonster_L_LowerArm_JNT" + }; + TressFXCollisionMeshDescription collisionMeshRightHand = + { + "RatBoy_right_hand", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_right_hand.tfxmesh", + 32, + 0.5f, + 0, + "frenchHornMonster_R_LowerArm_JNT" + }; + sds[0].collisionMeshes.push_back(collisionMeshBody); + sds[0].collisionMeshes.push_back(collisionMeshLeftHand); + sds[0].collisionMeshes.push_back(collisionMeshRightHand); + } + LoadScene(sds[sceneNumber]); +} + +void TressFXSample::OnDestroy() +{ + // Get everything out of the pipeline before we start nuking everything. + GetDevice()->FlushGPU(); + + // Destroy hair resources based on what method we are using + DestroyOITResources(m_eOITMethod); + + EI_Device* pDevice = GetDevice(); + m_activeScene.collisionMeshes.clear(); + m_activeScene.objects.clear(); + m_activeScene.scene.reset(); + m_activeScene.viewConstantBuffer.Reset(); + m_activeScene.viewBindSet.reset(); + m_activeScene.shadowViewConstantBuffer.Reset(); + m_activeScene.shadowViewBindSet.reset(); + m_activeScene.lightConstantBuffer.Reset(); + m_activeScene.lightBindSet.reset(); + + m_pPPLL.reset(); + m_pShortCut.reset(); + m_pSimulation.reset(); + + m_pGLTFRenderTargetSet.reset(); + m_pDebugRenderTargetSet.reset(); + m_pShadowRenderTargetSet.reset(); + + m_pHairShadowPSO.reset(); + + DestroyLayouts(); + + // Need to properly shut everything down + GetDevice()->OnDestroy(); +} + +bool TressFXSample::OnEvent(MSG msg) +{ + if (ImGUI_WndProcHandler(msg.hwnd, msg.message, msg.wParam, msg.lParam)) + return true; + return true; +} + +void TressFXSample::SetFullScreen(bool fullscreen) +{ +} + +void TressFXSample::DisplaySimulationParameters(const char* name, TressFXSimulationSettings* simulationSettings) +{ + // Rendering params + bool opened = true; + std::string title = std::string(name) + " Simulation Parameters"; + { + ImGui::SliderFloat("VSP Coefficient", &simulationSettings->m_vspCoeff, 0.0f, 1.0f); + ImGui::SliderFloat("VSP Threshold", &simulationSettings->m_vspAccelThreshold, 0.0f, 1.0f); + + ImGui::SliderFloat("Damping", &simulationSettings->m_damping, 0.0f, 1.0f); + ImGui::SliderFloat("Local Constraint Stiffness", &simulationSettings->m_localConstraintStiffness, 0.0f, 1.0f); + ImGui::SliderInt("Local Constraint Iterations", &simulationSettings->m_localConstraintsIterations, 1, 4); + ImGui::SliderFloat("Global Constraints Stiffness", &simulationSettings->m_globalConstraintStiffness, 0.0f, 1.0f); + ImGui::SliderFloat("Global Constraints Range", &simulationSettings->m_globalConstraintsRange, 0.0f, 1.0f); + + ImGui::SliderFloat("Gravity Magnitude", &simulationSettings->m_gravityMagnitude, 0.0f, 1.0f); + ImGui::SliderFloat("Tip Separation", &simulationSettings->m_tipSeparation, 0.0f, 2.0f); + ImGui::SliderFloat("Clamp Position Delta", &simulationSettings->m_clampPositionDelta, 0.0f, 20.0f); + } +} + +bool TextureSelectionButton(char* Title, std::string& DisplayString) +{ + bool HasChanged = false; + + if (ImGui::Button(Title)) + { + // Popup windows file selection dialog + OPENFILENAME ofn; + char fileName[1024]; + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = NULL; + ofn.lpstrFile = fileName; + ofn.lpstrFile[0] = '\0'; + ofn.nMaxFile = sizeof(fileName); + ofn.lpstrFilter = "Images\0*.png\0"; + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + if (GetOpenFileName(&ofn)) + { + // If we got a valid file name, try to load in the texture + DisplayString = fileName; + HasChanged = true; + } + } + ImGui::SameLine(); ImGui::Text(DisplayString.c_str()); + + return HasChanged; +} + +void TressFXSample::DisplayRenderingParameters(const char* name, TressFXHairObject * object, TressFXRenderingSettings* RenderSettings) +{ + // Rendering params + bool opened = true; + std::string title = std::string(name) + " Rendering Parameters"; + { + // Geometry + if (ImGui::CollapsingHeader("Geometry Params", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + ImGui::Checkbox("Enable Hair LOD", &RenderSettings->m_EnableHairLOD); + ImGui::SliderFloat("LOD Start Distance", &RenderSettings->m_LODStartDistance, 0.0f, 25.0f); + ImGui::SliderFloat("LOD End Distance", &RenderSettings->m_LODEndDistance, 0.0f, 25.0f); + ImGui::SliderFloat("LOD Strand Reduction", &RenderSettings->m_LODPercent, 0.0f, 1.0f); + ImGui::SliderFloat("LOD Width Multiplier", &RenderSettings->m_LODWidthMultiplier, 1.0f, 5.0f); + + ImGui::SliderFloat("Fiber Radius", &RenderSettings->m_FiberRadius, 0.0005f, 0.005f); + ImGui::Checkbox("Enable Thin Tip", &RenderSettings->m_EnableThinTip); + ImGui::SliderFloat("Fiber Ratio", &RenderSettings->m_FiberRatio, 0.0f, 1.0f); + } + // Shading + if (ImGui::CollapsingHeader("Shading", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + ImGui::ColorEdit4("Hair Base Color", RenderSettings->m_HairMatBaseColor.v, ImGuiColorEditFlags__OptionsDefault); + ImGui::ColorEdit4("Hair Tip Color", RenderSettings->m_HairMatTipColor.v, ImGuiColorEditFlags__OptionsDefault); + ImGui::SliderFloat("Tip Percentage", &RenderSettings->m_TipPercentage, 0.0f, 1.0f); + ImGui::SliderFloat("Diffuse Factor", &RenderSettings->m_HairKDiffuse, 0.0f, 1.0f); + ImGui::SliderFloat("Spec1 Factor", &RenderSettings->m_HairKSpec1, 0.0f, 1.0f); + ImGui::SliderFloat("Spec Exponent 1", &RenderSettings->m_HairSpecExp1, 1.0f, 32.0f, "%.1f", 1.f); + ImGui::SliderFloat("Spec2 Factor", &RenderSettings->m_HairKSpec2, 0.0f, 1.0f); + ImGui::SliderFloat("Spec Exponent 2", &RenderSettings->m_HairSpecExp2, 1.0f, 32, "%.1f", 1.f); + } + // Shadowing + if (ImGui::CollapsingHeader("Shadowing", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + ImGui::SliderFloat("Shadow Alpha", &RenderSettings->m_HairShadowAlpha, 0.0f, 1.0f); + ImGui::SliderFloat("Fiber Spacing", &RenderSettings->m_HairFiberSpacing, 0.000001f, 1.f, "%.6f", 2.f); + + ImGui::Checkbox("Enable Hair Shadow LOD", &RenderSettings->m_EnableShadowLOD); + ImGui::SliderFloat("Shadow LOD Start Distance", &RenderSettings->m_ShadowLODStartDistance, 0.0f, 25.0f); + ImGui::SliderFloat("Shadow LOD End Distance", &RenderSettings->m_ShadowLODEndDistance, 0.0f, 25.0f); + ImGui::SliderFloat("Shadow LOD Strand Reduction", &RenderSettings->m_ShadowLODPercent, 0.0f, 1.0f); + ImGui::SliderFloat("Shadow LOD Width Multiplier", &RenderSettings->m_ShadowLODWidthMultiplier, 1.0f, 5.0f); + } + // Texturing + if (ImGui::CollapsingHeader("Texturing", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + // Base Albedo texture picking + if (TextureSelectionButton("Base Albedo Texture", RenderSettings->m_BaseAlbedoName)) + { + GetDevice()->FlushGPU(); + object->PopulateDrawStrandsBindSet(GetDevice(), RenderSettings); + } + + ImGui::Checkbox("Enable Strand UV", &RenderSettings->m_EnableStrandUV); + ImGui::SliderFloat("Strand UV Tiling Factor", &RenderSettings->m_StrandUVTilingFactor, 0.0f, 30.0f); + + // Strand Albedo texture picking + if (TextureSelectionButton("Strand Albedo Texture", RenderSettings->m_StrandAlbedoName)) + { + GetDevice()->FlushGPU(); + object->PopulateDrawStrandsBindSet(GetDevice(), RenderSettings); + } + + ImGui::Checkbox("Enable Strand Tangent", &RenderSettings->m_EnableStrandTangent); + } + } +} + +void TressFXSample::OnRender() +{ + // Get timings + double timeNow = MillisecondsNow(); + if (m_lastFrameTime == 0.0f) + { + m_lastFrameTime = timeNow; + } + m_deltaTime = float(timeNow - m_lastFrameTime) / 1000.0f; + m_lastFrameTime = timeNow; + m_time += m_deltaTime; + // clamp deltatime so that sim doesnt freak out + m_deltaTime = std::min(m_deltaTime, 0.05f); + + ImGUI_UpdateIO(); + ImGui::NewFrame(); + + bool opened = false; + ImGui::Begin("Menu", &opened); + ImGui::Checkbox("Pause Animation", &m_PauseAnimation); + ImGui::Checkbox("Pause Simulation", &m_PauseSimulation); + ImGui::Checkbox("Draw Hair", &m_drawHair); + ImGui::Checkbox("Draw Model", &m_drawModel); + ImGui::Checkbox("Generate SDF", &m_generateSDF); + ImGui::Checkbox("Collision Response", &m_collisionResponse); + ImGui::Checkbox("Draw Collision Mesh", &m_drawCollisionMesh); + ImGui::Checkbox("Draw Marching Cubes", &m_drawMarchingCubes); + ImGui::Checkbox("Use Depth Approximation", &m_useDepthApproximation); + if (ImGui::Checkbox("Use Vsync", &m_vSync)) + { + GetDevice()->SetVSync(m_vSync); + RecreateSizeDependentResources(); + } + + if (ImGui::Button("Reset Positions")) + { + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->ResetPositions(); + } + } + + const char * drawingControl[] = { "ShortCut", "PPLL" }; + static int drawingControlSelected = 0; + int oldDrawingControlSelected = drawingControlSelected; + ImGui::Combo("Drawing Method", &drawingControlSelected, drawingControl, _countof(drawingControl)); + if (drawingControlSelected != oldDrawingControlSelected) { + ToggleShortCut(); + } + + GetDevice()->OnBeginFrame(m_AsyncCompute); + + // Set all the data to render out the scene + m_activeScene.scene->OnBeginFrame(m_PauseAnimation ? 0.f : m_deltaTime, (float)m_nScreenWidth / m_nScreenHeight); + + std::vector objectNames(m_activeScene.objects.size()); + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + objectNames[i] = m_activeScene.objects[i].name.c_str(); + } + if (ImGui::CollapsingHeader("Rendering Parameters")) + { + static int objectSelected = 0; + ImGui::Combo("Object", &objectSelected, objectNames.data(), (int)objectNames.size()); + DisplayRenderingParameters(m_activeScene.objects[objectSelected].name.c_str(), m_activeScene.objects[objectSelected].hairStrands->GetTressFXHandle(), &m_activeScene.objects[objectSelected].renderingSettings); + } + if (ImGui::CollapsingHeader("Simulation Parameters")) + { + static int objectSelected = 0; + ImGui::Combo("Object", &objectSelected, objectNames.data(), (int)objectNames.size()); + DisplaySimulationParameters(m_activeScene.objects[objectSelected].name.c_str(), &m_activeScene.objects[objectSelected].simulationSettings); + } + + if (ImGui::CollapsingHeader("Stats", 0)) { + for (int i = 0; i < GetDevice()->GetNumTimeStamps(); ++i) { + ImGui::Text("%s: %.1f ms\n", GetDevice()->GetTimeStampName(i), (float)GetDevice()->GetTimeStampValue(i) / 1000.0f); + } + ImGui::Text("%s: %.1f ms", "TotalGPUTime", (float)GetDevice()->GetAverageGpuTime() / 1000.0f); + + { + static float values[16]; + for (uint32_t i = 0; i < 16 - 1; i++) { values[i] = values[i + 1]; } + values[15] = 1.0f / m_deltaTime; + float average = 0; + for (uint32_t i = 0; i < 16; i++) { average += values[i]; } + average /= 16.0f; + + ImGui::Text("Framerate: %.0f", average); + } + + } + ImGui::End(); + GetDevice()->GetTimeStamp("Gui Updates"); + + UpdateSimulationParameters(); + m_activeScene.viewConstantBuffer->vEye = m_activeScene.scene->GetCameraPos(); + m_activeScene.viewConstantBuffer->mVP = m_activeScene.scene->GetMVP(); + m_activeScene.viewConstantBuffer->mInvViewProj = m_activeScene.scene->GetInvViewProjMatrix(); + m_activeScene.viewConstantBuffer-> vViewport = { 0, 0, (float)m_nScreenWidth, (float)m_nScreenHeight }; + m_activeScene.viewConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); + + // Signal from graphics queue that compute can start. + // Must call before Simulate() and before submitting + // graphics commands to overlap with compute. + if (m_AsyncCompute) + GetDevice()->SignalComputeStart(); + + if (!m_PauseSimulation) { + Simulate(m_deltaTime, m_generateSDF, m_collisionResponse, m_AsyncCompute); + } + // Have compute work wait for signal from graphics queue that we can start + // issuing the sim commands. + if (m_AsyncCompute) + { + GetDevice()->SubmitComputeCommandList(); + WaitSimulateDone(); // Waiting on this to be done really defies the point of doing this on another queue. + // TODO: Double buffer needed resources to avoid synchronization issues in the middle of the frame + // and don't wait on the queue. + } + + // Update lighting constants for active scene + m_activeScene.lightConstantBuffer->NumLights = m_activeScene.scene->GetSceneLightCount(); + for (int i = 0; i < m_activeScene.lightConstantBuffer->NumLights; ++i) + { + const Light& lightInfo = m_activeScene.scene->GetSceneLightInfo(i); + m_activeScene.lightConstantBuffer->LightInfo[i].LightColor = { lightInfo.color[0], lightInfo.color[1], lightInfo.color[2] }; + m_activeScene.lightConstantBuffer->LightInfo[i].LightDirWS = { lightInfo.direction[0], lightInfo.direction[1], lightInfo.direction[2] }; + m_activeScene.lightConstantBuffer->LightInfo[i].LightInnerConeCos = lightInfo.innerConeCos; + m_activeScene.lightConstantBuffer->LightInfo[i].LightIntensity = lightInfo.intensity; + m_activeScene.lightConstantBuffer->LightInfo[i].LightOuterConeCos = lightInfo.outerConeCos; + m_activeScene.lightConstantBuffer->LightInfo[i].LightPositionWS = { lightInfo.position[0], lightInfo.position[1], lightInfo.position[2] }; + m_activeScene.lightConstantBuffer->LightInfo[i].LightRange = lightInfo.range; + m_activeScene.lightConstantBuffer->LightInfo[i].LightType = lightInfo.type; + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowMapIndex = lightInfo.shadowMapIndex; + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowProjection = *(AMD::float4x4*)&lightInfo.mLightViewProj; // ugh .. need a proper math library + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowParams = { lightInfo.depthBias, .1f, 100.0f, 0.f }; // Near and Far are currently hard-coded because we are hard-coding them elsewhere + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowMapSize = GetDevice()->GetShadowBufferResource()->GetWidth() / 2; + m_activeScene.lightConstantBuffer->UseDepthApproximation = m_useDepthApproximation; + } + m_activeScene.lightConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); + + // Render shadow passes to shadow buffer (and clear) + uint32_t shadowMapIndex = 0; + uint32_t sceneLightCount = m_activeScene.scene->GetSceneLightCount(); + for (uint32_t i = 0; i < sceneLightCount; i++) + { + const Light& LightInfo = m_activeScene.scene->GetSceneLightInfo(i); + if (LightInfo.type != LightType_Spot && LightInfo.type != LightType_Directional &&(shadowMapIndex < 4)) + continue; + + uint32_t viewportOffsetsX[4] = { 0, 1, 0, 1 }; + uint32_t viewportOffsetsY[4] = { 0, 0, 1, 1 }; + uint32_t viewportWidth = GetDevice()->GetShadowBufferResource()->GetWidth() / 2; + uint32_t viewportHeight = GetDevice()->GetShadowBufferResource()->GetHeight() / 2; + + // Setup shadow constants for this light + m_activeScene.shadowViewConstantBuffer->vEye = { LightInfo.position[0], LightInfo.position[1], LightInfo.position[2], 0 }; + m_activeScene.shadowViewConstantBuffer->mVP = *(AMD::float4x4*) & LightInfo.mLightViewProj; + m_activeScene.shadowViewConstantBuffer->vViewport = { 0, 0, (float)viewportWidth, (float)viewportHeight }; + m_activeScene.shadowViewConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); + + // Update parameters (updates LOD shadow params) + AMD::float4 ShadowCam = { LightInfo.position[0], LightInfo.position[1], LightInfo.position[2], 0 }; + UpdateRenderShadowParameters(ShadowCam); + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + if (m_activeScene.objects[i].hairStrands->GetTressFXHandle()) + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdatePerObjectRenderParams(GetDevice()->GetCurrentCommandContext()); + } + GetDevice()->BeginRenderPass(GetDevice()->GetCurrentCommandContext(), m_pShadowRenderTargetSet.get(), L"ShadowPass", GetDevice()->GetShadowBufferResource()->GetWidth(), GetDevice()->GetShadowBufferResource()->GetHeight()); + + // Set the RT's quadrant where to render the shadow map (these viewport offsets need to match the ones in shadowFiltering.h) + GetDevice()->SetViewportAndScissor(GetDevice()->GetCurrentCommandContext(), viewportOffsetsX[shadowMapIndex] * viewportWidth, viewportOffsetsY[shadowMapIndex] * viewportHeight, viewportWidth, viewportHeight); + + // Render GLTF + if (m_drawModel) + m_activeScene.scene->OnRenderLight(i); + + GetDevice()->GetTimeStamp("Render GLTF Shadows"); + + // Render Hair + if (m_drawHair) + DrawHairShadows(); + + GetDevice()->GetTimeStamp("Render Hair Shadows"); + + GetDevice()->EndRenderPass(GetDevice()->GetCurrentCommandContext()); + shadowMapIndex++; + } + + // Transition shadow map to read + EI_Barrier writeToRead = { GetDevice()->GetShadowBufferResource(), EI_STATE_DEPTH_STENCIL, EI_STATE_SRV }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &writeToRead); + + // Render GLTF passes to main render target (and clear) + GetDevice()->BeginRenderPass(GetDevice()->GetCurrentCommandContext(), m_pGLTFRenderTargetSet.get(), L"GLTFRender Pass"); + if (m_drawModel) + { + m_activeScene.scene->OnRender(); + } + GetDevice()->EndRenderPass(GetDevice()->GetCurrentCommandContext()); + GetDevice()->GetTimeStamp("glTF Render"); + + // Update rendering parameters (updates hair LOD params) + UpdateRenderingParameters(); + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + if (m_activeScene.objects[i].hairStrands->GetTressFXHandle()) + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdatePerObjectRenderParams(GetDevice()->GetCurrentCommandContext()); + } + + // Do hair draw - will pick correct render approach + if (m_drawHair) + { + DrawHair(); + } + // Render debug collision mesh if needed + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + + if (m_drawCollisionMesh || m_drawMarchingCubes) + { + if (m_drawMarchingCubes) + { + GenerateMarchingCubes(); + } + + GetDevice()->BeginRenderPass(commandList, m_pDebugRenderTargetSet.get(), L"DrawCollisionMesh Pass"); + if (m_drawCollisionMesh) + { + DrawCollisionMesh(); + } + if (m_drawMarchingCubes) + { + DrawSDF(); + } + GetDevice()->EndRenderPass(GetDevice()->GetCurrentCommandContext()); + } + + // Transition shadow map to write + EI_Barrier readToWrite = { GetDevice()->GetShadowBufferResource(), EI_STATE_SRV, EI_STATE_DEPTH_STENCIL }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &readToWrite); + GetDevice()->OnEndFrame(); +} + +int WINAPI WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ +#if defined(TRESSFX_DX12) + LPCSTR Name = "TressFX v4.1 DX12"; +#else + LPCSTR Name = "TressFX v4.1 Vulkan"; +#endif + uint32_t Width = 1280; + uint32_t Height = 800; + + // create new DX sample + return RunFramework(hInstance, lpCmdLine, nCmdShow, Width, Height, new TressFXSample(Name)); +} diff --git a/Gems/AtomTressFX/External/Code/src/TressFXSample.h b/Gems/AtomTressFX/External/Code/src/TressFXSample.h new file mode 100644 index 0000000000..fe8a1d3078 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFXSample.h @@ -0,0 +1,192 @@ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once + +#include "Misc/FrameworkWindows.h" +#include "Misc/Camera.h" +#include "EngineInterface.h" +#include "GLTF/GltfCommon.h" + +#include "TressFXAsset.h" +#include "AMD_Types.h" +#include "AMD_TressFX.h" +#include "TressFXCommon.h" +#include "TressFXSDFCollision.h" +#include "TressFXSettings.h" + +#include + +class TressFXPPLL; +class TressFXShortCut; +class CollisionMesh; +class HairStrands; +class Simulation; +class EI_Scene; + +// scene description - no live objects +struct TressFXObjectDescription +{ + std::string name; + std::string tfxFilePath; + std::string tfxBoneFilePath; + std::string hairObjectName; + int numFollowHairs; + float tipSeparationFactor; + int mesh; + TressFXSimulationSettings initialSimulationSettings; + TressFXRenderingSettings initialRenderingSettings; +}; + +struct TressFXCollisionMeshDescription +{ + std::string name; + std::string tfxMeshFilePath; + int numCellsInXAxis; + float collisionMargin; + int mesh; + std::string followBone; +}; + +struct TressFXSceneDescription +{ + std::vector objects; + std::vector collisionMeshes; + + std::string gltfFilePath; + std::string gltfFileName; + std::string gltfBonePrefix; + + float startOffset; +}; + +// in-memory scene +struct TressFXObject +{ + std::unique_ptr hairStrands; + TressFXSimulationSettings simulationSettings; + TressFXRenderingSettings renderingSettings; + std::string name; +}; + +struct TressFXScene +{ + std::vector objects; + std::vector> collisionMeshes; + + TressFXUniformBuffer viewConstantBuffer; + std::unique_ptr viewBindSet; + + TressFXUniformBuffer shadowViewConstantBuffer; + std::unique_ptr shadowViewBindSet; + + TressFXUniformBuffer lightConstantBuffer; + std::unique_ptr lightBindSet; + + std::unique_ptr scene; +}; + +class TressFXSample : public FrameworkWindows +{ +public: + TressFXSample(LPCSTR name); + + void LoadScene(TressFXSceneDescription& desc); + + void DrawHairShadows(); + + void OnCreate(HWND hWnd); + void OnDestroy(); + void OnRender(); + bool OnEvent(MSG msg); + void OnResize(uint32_t Width, uint32_t Height); + void RecreateSizeDependentResources(); + void SetFullScreen(bool fullscreen); + void DrawHair(); + // Simulation and collision + void Simulate(double fTime, bool bUpdateCollMesh, bool bSDFCollisionResponse, bool bAsyncCompute); + void WaitSimulateDone(); + void SetSDFCollisionMargin(float collisionMargin); + void UpdateSimulationParameters(); + void UpdateRenderingParameters(); + void UpdateRenderShadowParameters(AMD::float4& CameraPos); + void ToggleShortCut(); + + // debug drawing + void DrawCollisionMesh(); + void DrawSDFGrid(); + void DrawSDF(); + void GenerateMarchingCubes(); + void SetSDFIsoLevel(float isoLevel); + + void LoadScene(int sceneNumber); + + int GetNumTressFXObjects() { return static_cast(m_activeScene.objects.size()); } +private: + void DisplayRenderingParameters(const char* name, TressFXHairObject * object, TressFXRenderingSettings* RenderSettings); + void DisplaySimulationParameters(const char* name, TressFXSimulationSettings* simulationSettings); + + // available scene descriptions (not necessary in memory) + std::vector m_scenes; + TressFXScene m_activeScene; + + std::unique_ptr m_pPPLL; + std::unique_ptr m_pShortCut; + std::unique_ptr m_pSimulation; + + std::unique_ptr m_pGLTFRenderTargetSet = nullptr; + std::unique_ptr m_pShadowRenderTargetSet = nullptr; + std::unique_ptr m_pDebugRenderTargetSet = nullptr; + + std::unique_ptr m_pHairShadowPSO = nullptr; + + enum OITMethod + { + OIT_METHOD_PPLL, + OIT_METHOD_SHORTCUT + }; + + OITMethod m_eOITMethod; + int m_nScreenWidth; + int m_nScreenHeight; + int m_nPPLLNodes; + + void InitializeLayouts(); + void DestroyLayouts(); + void SetOITMethod(OITMethod method); + void DestroyOITResources(OITMethod method); + + float m_time; // WallClock in seconds. + float m_deltaTime; // The elapsed time in milliseconds since the previous frame. + double m_lastFrameTime; + bool m_PauseAnimation = false; + bool m_PauseSimulation = false; + bool m_AsyncCompute = false; + bool m_drawHair = true; + bool m_drawModel = true; + bool m_drawCollisionMesh = false; + bool m_drawMarchingCubes = false; + bool m_generateSDF = true; + bool m_collisionResponse = true; + bool m_useDepthApproximation = true; + bool m_vSync = false; +}; diff --git a/Gems/AtomTressFX/External/Code/src/VK/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/VK/CMakeLists.txt new file mode 100644 index 0000000000..4300589522 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/VK/CMakeLists.txt @@ -0,0 +1,5 @@ +project (TressFX_VK) + +set(sources + VK/VKEngineInterfaceImpl.cpp + VK/VKEngineInterfaceImpl.h PARENT_SCOPE) diff --git a/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.cpp b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.cpp new file mode 100644 index 0000000000..3dd6f1ce31 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.cpp @@ -0,0 +1,1623 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "EngineInterface.h" + +#include +using namespace DirectX; + +#include +#include "Base/ShaderCompilerHelper.h" +#include "Base/Helper.h" +#include "GLTF/GltfHelpers.h" +#include "GLTF/GltfCommon.h" +#include "GLTF/GLTFTexturesAndBuffers.h" +#include "GLTF/GltfPbrPass.h" +#include "GLTF/GltfDepthPass.h" +#include "TressFXLayouts.h" + +// Inline operators for general state data +inline VkCompareOp operator* (EI_CompareFunc Enum) +{ + if (Enum == EI_CompareFunc::Never) return VK_COMPARE_OP_NEVER; + if (Enum == EI_CompareFunc::Less) return VK_COMPARE_OP_LESS; + if (Enum == EI_CompareFunc::Equal) return VK_COMPARE_OP_EQUAL; + if (Enum == EI_CompareFunc::LessEqual) return VK_COMPARE_OP_LESS_OR_EQUAL; + if (Enum == EI_CompareFunc::Greater) return VK_COMPARE_OP_GREATER; + if (Enum == EI_CompareFunc::NotEqual) return VK_COMPARE_OP_NOT_EQUAL; + if (Enum == EI_CompareFunc::GreaterEqual) return VK_COMPARE_OP_GREATER_OR_EQUAL; + if (Enum == EI_CompareFunc::Always) return VK_COMPARE_OP_ALWAYS; + assert(false && "Using an EI_CompareFunc that has not been mapped to Vulkan yet!"); + return VK_COMPARE_OP_NEVER; +} + +inline VkBlendOp operator* (EI_BlendOp Enum) +{ + if (Enum == EI_BlendOp::Add) return VK_BLEND_OP_ADD; + if (Enum == EI_BlendOp::Subtract) return VK_BLEND_OP_SUBTRACT; + if (Enum == EI_BlendOp::ReverseSubtract) return VK_BLEND_OP_REVERSE_SUBTRACT; + if (Enum == EI_BlendOp::Min) return VK_BLEND_OP_MIN; + if (Enum == EI_BlendOp::Max) return VK_BLEND_OP_MAX; + assert(false && "Using an EI_BlendOp that has not been mapped to Vulkan yet!"); + return VK_BLEND_OP_ADD; +}; + +inline VkStencilOp operator* (EI_StencilOp Enum) +{ + if (Enum == EI_StencilOp::Keep) return VK_STENCIL_OP_KEEP; + if (Enum == EI_StencilOp::Zero) return VK_STENCIL_OP_ZERO; + if (Enum == EI_StencilOp::Replace) return VK_STENCIL_OP_REPLACE; + if (Enum == EI_StencilOp::IncrementClamp) return VK_STENCIL_OP_INCREMENT_AND_CLAMP; + if (Enum == EI_StencilOp::DecrementClamp) return VK_STENCIL_OP_DECREMENT_AND_CLAMP; + if (Enum == EI_StencilOp::Invert) return VK_STENCIL_OP_INVERT; + if (Enum == EI_StencilOp::IncrementWrap) return VK_STENCIL_OP_INCREMENT_AND_WRAP; + if (Enum == EI_StencilOp::DecrementWrap) return VK_STENCIL_OP_DECREMENT_AND_WRAP; + assert(false && "Using an EI_StencilOp that has not been mapped to Vulkan yet!"); + return VK_STENCIL_OP_KEEP; +} + +inline VkBlendFactor operator* (EI_BlendFactor Enum) +{ + if (Enum == EI_BlendFactor::Zero) return VK_BLEND_FACTOR_ZERO; + if (Enum == EI_BlendFactor::One) return VK_BLEND_FACTOR_ONE; + if (Enum == EI_BlendFactor::SrcColor) return VK_BLEND_FACTOR_SRC_COLOR; + if (Enum == EI_BlendFactor::InvSrcColor) return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR; + if (Enum == EI_BlendFactor::DstColor) return VK_BLEND_FACTOR_DST_COLOR; + if (Enum == EI_BlendFactor::InvDstColor) return VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR; + if (Enum == EI_BlendFactor::SrcAlpha) return VK_BLEND_FACTOR_SRC_ALPHA; + if (Enum == EI_BlendFactor::InvSrcAlpha) return VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + if (Enum == EI_BlendFactor::DstAlpha) return VK_BLEND_FACTOR_DST_ALPHA; + if (Enum == EI_BlendFactor::InvDstAlpha) return VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA; + assert(false && "Using an EI_BlendFactor that has not been mapped to Vulkan yet!"); + return VK_BLEND_FACTOR_ZERO; +}; + +inline VkPrimitiveTopology operator* (EI_Topology Enum) +{ + if (Enum == EI_Topology::TriangleList) return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + if (Enum == EI_Topology::TriangleStrip) return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; + assert(false && "Using an EI_Topology that has not been mapped to Vulkan yet!"); + return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; +} + +inline VkImageLayout operator* (EI_LayoutState Enum) +{ + if (Enum == EI_LayoutState::Undefined) return VK_IMAGE_LAYOUT_UNDEFINED; + if (Enum == EI_LayoutState::RenderColor) return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + if (Enum == EI_LayoutState::RenderDepth) return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + if (Enum == EI_LayoutState::ReadOnly) return VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + if (Enum == EI_LayoutState::Present) return VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + assert(false && "Using an EI_LayoutState that has not been mapped to Vulkan yet!"); + return VK_IMAGE_LAYOUT_UNDEFINED; +}; + +EI_Device::EI_Device() : + m_currentImageIndex(0), + m_pFullscreenIndexBuffer() +{ +} + +EI_Device::~EI_Device() +{ + +} + +VkPipelineBindPoint VulkanBindPoint(EI_BindPoint bp) { + return (bp == EI_BP_COMPUTE) ? VK_PIPELINE_BIND_POINT_COMPUTE : VK_PIPELINE_BIND_POINT_GRAPHICS; +} + +struct VulkanBuffer +{ + VulkanBuffer(CAULDRON_VK::Device * pDevice) : pDevice(pDevice) {} + + void Create(const int structSize, const int structCount, const unsigned int flags, const char* name) { + + totalMemSize = structSize * structCount; + + VkBufferUsageFlags usage = 0; + if (flags & EI_BF_UNIFORMBUFFER) + usage |= VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + //if ( flags & EI_BF_NEEDSUAV) + usage |= VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; + if (flags & EI_BF_VERTEXBUFFER) + usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + if (flags & EI_BF_INDEXBUFFER) + usage |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT; + + if (flags & EI_BF_NEEDSCPUMEMORY) { + VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; + bufferInfo.size = totalMemSize; + bufferInfo.usage = usage | VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + + VmaAllocationCreateInfo allocInfo = {}; + allocInfo.usage = VMA_MEMORY_USAGE_CPU_TO_GPU; + allocInfo.flags = VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT; + allocInfo.pUserData = (void*)name; + + vmaCreateBuffer(pDevice->GetAllocator(), &bufferInfo, &allocInfo, &cpuBuffer, &cpuBufferAlloc, nullptr); + vmaMapMemory(pDevice->GetAllocator(), cpuBufferAlloc, &cpuMappedMemory); + + } + + VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; + bufferInfo.size = totalMemSize; + bufferInfo.usage = usage | VK_BUFFER_USAGE_TRANSFER_DST_BIT; + + VmaAllocationCreateInfo allocInfo = {}; + allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; + allocInfo.flags = VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT; + allocInfo.pUserData = (void*)name; + + vmaCreateBuffer(pDevice->GetAllocator(), &bufferInfo, &allocInfo, &gpuBuffer, &gpuBufferAlloc, nullptr); + + // fill descriptor info + info.buffer = gpuBuffer; + info.offset = 0; + info.range = totalMemSize; + } + + void FreeCPUMemory() + { + vmaUnmapMemory(pDevice->GetAllocator(), cpuBufferAlloc); + if (cpuBuffer != VK_NULL_HANDLE) + vmaDestroyBuffer(pDevice->GetAllocator(), cpuBuffer, cpuBufferAlloc); + } + + void Free() { + FreeCPUMemory(); + if ( gpuBuffer != VK_NULL_HANDLE) + vmaDestroyBuffer(pDevice->GetAllocator(), gpuBuffer, gpuBufferAlloc); + } + + int totalMemSize = 0; + CAULDRON_VK::Device *pDevice = nullptr; + VkDescriptorBufferInfo info = {}; + VkBuffer cpuBuffer = VK_NULL_HANDLE; + VkBuffer gpuBuffer = VK_NULL_HANDLE; + VmaAllocation cpuBufferAlloc = VK_NULL_HANDLE; + VmaAllocation gpuBufferAlloc = VK_NULL_HANDLE; + + void * cpuMappedMemory = nullptr; +}; + +void EI_Device::DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets) +{ + // Set everything + commandContext.BindSets(&pso, numBindSets, bindSets); + + EI_IndexedDrawParams drawParams; + drawParams.pIndexBuffer = m_pFullscreenIndexBuffer.get(); + drawParams.numIndices = 4; + drawParams.numInstances = 1; + + commandContext.DrawIndexedInstanced(pso, drawParams); +} + +std::unique_ptr EI_Device::CreateBufferResource(int structSize, const int structCount, const unsigned int flags, const char* name) +{ + EI_Resource* result = new EI_Resource; + result->m_ResourceType = EI_ResourceType::Buffer; + result->m_pBuffer = new VulkanBuffer(&m_device); + result->m_pBuffer->Create(structSize, structCount, flags | EI_BF_NEEDSCPUMEMORY, name); + + return std::unique_ptr(result); +} + +std::unique_ptr EI_Device::CreateUint32Resource(const int width, const int height, const size_t arraySize, const char* name, uint32_t ClearValue /* Ignored on Vulkan */) +{ + EI_Resource * res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + VkImageCreateInfo image_info = {}; + image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + image_info.pNext = NULL; + image_info.imageType = VK_IMAGE_TYPE_2D; + image_info.format = VK_FORMAT_R32_UINT; + image_info.extent.width = width; + image_info.extent.height = height; + image_info.extent.depth = 1; + image_info.mipLevels = 1; + image_info.arrayLayers = (uint32_t)arraySize; + image_info.samples = VK_SAMPLE_COUNT_1_BIT; + image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + image_info.queueFamilyIndexCount = 0; + image_info.pQueueFamilyIndices = NULL; + image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + image_info.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + image_info.flags = 0; + image_info.tiling = VK_IMAGE_TILING_OPTIMAL; + + + res->m_pTexture->Init(GetDevice()->GetCauldronDevice(), &image_info, const_cast(name)); // Note, Init should really be changed to take a const char* instead of char. + + // Need to make my own CreateSRV & RTV that will take an array (current functions only assume 2D Textures - hard coded) + res->m_pTexture->CreateSRV(&res->srv, 0); + res->m_pTexture->CreateRTV(&res->rtv, 0); + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues /*ignored in Vulkan*/) +{ + EI_Resource * res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + VkFormat format; + if (channels == 1) + { + format = VK_FORMAT_R16_SFLOAT; + } + else if (channels == 2) + { + format = VK_FORMAT_R16G16_SFLOAT; + } + else if (channels == 4) + { + if (channelSize == 1) + format = VK_FORMAT_R8G8B8A8_SRGB; + else + format = VK_FORMAT_R16G16B16A16_SFLOAT; + } + + res->m_pTexture->InitRendertarget(&m_device, width, height, format, VK_SAMPLE_COUNT_1_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, (char*)name); + res->m_pTexture->CreateSRV(&res->srv, 0); + res->m_pTexture->CreateRTV(&res->rtv, 0); + + EI_Barrier barrier = { res, EI_STATE_UNDEFINED, EI_STATE_RENDER_TARGET }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &barrier); + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateDepthResource(const int width, const int height, const char* name) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + VkImageCreateInfo image_info = {}; + image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + image_info.pNext = NULL; + image_info.imageType = VK_IMAGE_TYPE_2D; + image_info.format = VK_FORMAT_D32_SFLOAT; + image_info.extent.width = width; + image_info.extent.height = height; + image_info.extent.depth = 1; + image_info.mipLevels = 1; + image_info.arrayLayers = 1; + image_info.samples = VK_SAMPLE_COUNT_1_BIT; + image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + image_info.queueFamilyIndexCount = 0; + image_info.pQueueFamilyIndices = NULL; + image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + image_info.usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; //TODO + image_info.flags = 0; + image_info.tiling = VK_IMAGE_TILING_OPTIMAL; // VK_IMAGE_TILING_LINEAR should never be used and will never be faster + + res->m_pTexture->Init(GetDevice()->GetCauldronDevice(), &image_info, const_cast(name)); // Note, Init should really be changed to take a const char* instead of char. + res->m_pTexture->CreateSRV(&res->srv); + res->m_pTexture->CreateDSV(&res->rtv); + + EI_Barrier barrier = { res, EI_STATE_UNDEFINED, EI_STATE_DEPTH_STENCIL }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &barrier); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateResourceFromFile(const char* szFilename, bool useSRGB/*= false*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + res->m_pTexture->InitFromFile(GetDevice()->GetCauldronDevice(), &m_uploadHeap, szFilename, useSRGB); + res->m_pTexture->CreateSRV(&res->srv, 0); + m_uploadHeap.FlushAndFinish(); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Sampler; + res->m_pSampler = new VkSampler; + + VkSamplerCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; + info.magFilter = (MinFilter == EI_Filter::Linear)? VK_FILTER_LINEAR : VK_FILTER_NEAREST; + info.minFilter = (MaxFilter == EI_Filter::Linear)? VK_FILTER_LINEAR : VK_FILTER_NEAREST;; + info.mipmapMode = (MipFilter == EI_Filter::Linear)? VK_SAMPLER_MIPMAP_MODE_LINEAR : VK_SAMPLER_MIPMAP_MODE_NEAREST; + info.addressModeU = (AddressMode == EI_AddressMode::Wrap)? VK_SAMPLER_ADDRESS_MODE_REPEAT : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + info.addressModeV = (AddressMode == EI_AddressMode::Wrap) ? VK_SAMPLER_ADDRESS_MODE_REPEAT : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;; + info.addressModeW = (AddressMode == EI_AddressMode::Wrap) ? VK_SAMPLER_ADDRESS_MODE_REPEAT : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;; + info.minLod = -1000; + info.maxLod = 1000; + info.maxAnisotropy = 1.0f; + VkResult result = vkCreateSampler(GetCauldronDevice()->GetDevice(), &info, NULL, res->m_pSampler); + assert(result == VK_SUCCESS); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateBindSet(EI_BindLayout * layout, EI_BindSetDescription& bindSet) +{ + EI_BindSet * result = new EI_BindSet; + m_resourceViewHeaps.AllocDescriptor(layout->m_descriptorSetLayout, &result->m_descriptorSet); + + std::vector writes; + std::vector> DescriptorImageInfos; + + int numResources = (int)bindSet.resources.size(); + for (int i = 0; i < numResources; ++i) + { + VkWriteDescriptorSet w = {}; + w.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + w.dstSet = result->m_descriptorSet; + w.dstBinding = layout->description.resources[i].binding; + w.dstArrayElement = 0; + w.descriptorCount = 1; + + switch (layout->description.resources[i].type) + { + case EI_RESOURCETYPE_BUFFER_RW: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer); + w.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + w.pBufferInfo = &bindSet.resources[i]->m_pBuffer->info; + break; + } + case EI_RESOURCETYPE_BUFFER_RO: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer); + w.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + w.pBufferInfo = &bindSet.resources[i]->m_pBuffer->info; + break; + } + case EI_RESOURCETYPE_IMAGE_RW: + { + w.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + DescriptorImageInfos.push_back(std::make_unique()); + VkDescriptorImageInfo* pImageInfo = DescriptorImageInfos[DescriptorImageInfos.size() - 1].get(); + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Texture); + pImageInfo->imageView = bindSet.resources[i]->srv; + pImageInfo->imageLayout = VK_IMAGE_LAYOUT_GENERAL; + w.pImageInfo = pImageInfo; + break; + } + case EI_RESOURCETYPE_IMAGE_RO: + { + w.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; + DescriptorImageInfos.push_back(std::make_unique()); + VkDescriptorImageInfo* pImageInfo = DescriptorImageInfos[DescriptorImageInfos.size() - 1].get(); + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Texture); + pImageInfo->imageView = bindSet.resources[i]->srv; + pImageInfo->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + w.pImageInfo = pImageInfo; + break; + } + case EI_RESOURCETYPE_UNIFORM: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer); + w.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + w.pBufferInfo = &bindSet.resources[i]->m_pBuffer->info; + break; + } + case EI_RESOURCETYPE_SAMPLER: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Sampler); + w.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; + DescriptorImageInfos.push_back(std::make_unique()); + VkDescriptorImageInfo* pImageInfo = DescriptorImageInfos[DescriptorImageInfos.size() - 1].get(); + pImageInfo->sampler = *bindSet.resources[i]->m_pSampler; + w.pImageInfo = pImageInfo; + break; + } + default: + assert(0); + break; + } + writes.push_back(w); + } + + assert(writes.size() == layout->layoutBindings.size()); + + vkUpdateDescriptorSets(m_device.GetDevice(), (uint32_t)writes.size(), writes.data(), 0, nullptr); + + return std::unique_ptr(result); +} + +EI_BindSet::~EI_BindSet() +{ + GetDevice()->GetResourceViewHeaps()->FreeDescriptor(m_descriptorSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + // Create the render pass set + EI_RenderTargetSet* pNewRenderTargetSet = new EI_RenderTargetSet; + + int currentClearValueRef = 0; + for (uint32_t i = 0; i < numResources; i++) + { + // Check size consistency + assert(!(AttachmentParams[i].Flags & EI_RenderPassFlags::Depth && (i != (numResources - 1))) && "Only the last attachment can be specified as depth target"); + + // Setup a clear value if needed + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Clear) + { + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + pNewRenderTargetSet->m_ClearValues[i].depthStencil.depth = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].depthStencil.stencil = (uint32_t)clearValues[currentClearValueRef++]; + } + else + { + pNewRenderTargetSet->m_ClearValues[i].color.float32[0] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].color.float32[1] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].color.float32[2] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].color.float32[3] = clearValues[currentClearValueRef++]; + } + } + } + + // Tag the number of resources this render pass set is setting/clearing + pNewRenderTargetSet->m_NumResources = numResources; + + // Setup the render pass + pNewRenderTargetSet->m_RenderPass = CreateRenderPass(pResourceFormats, numResources, AttachmentParams); + + return std::unique_ptr(pNewRenderTargetSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + std::vector FormatArray(numResources); + + for (uint32_t i = 0; i < numResources; ++i) + { + assert(pResourcesArray[i]->m_ResourceType == EI_ResourceType::Texture); + FormatArray[i] = pResourcesArray[i]->m_pTexture->GetFormat(); + } + std::unique_ptr result = CreateRenderTargetSet(FormatArray.data(), numResources, AttachmentParams, clearValues); + result->SetResources(pResourcesArray); + return result; +} + +std::unique_ptr EI_Device::CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon) +{ + EI_GLTFTexturesAndBuffers* GLTFBuffersAndTextures = new CAULDRON_VK::GLTFTexturesAndBuffers(); + GLTFBuffersAndTextures->OnCreate(GetCauldronDevice(), pGLTFCommon, &m_uploadHeap, &m_vidMemBufferPool, &m_constantBufferRing); + + return std::unique_ptr(GLTFBuffersAndTextures); +} + +std::unique_ptr EI_Device::CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfPbrPass* GLTFPbr = new CAULDRON_VK::GltfPbrPass(); + GLTFPbr->OnCreate(GetCauldronDevice(), renderTargetSet != nullptr ? renderTargetSet->m_RenderPass : GetSwapChainRenderPass(), + &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, pGLTFTexturesAndBuffers, + NULL, GetShadowBufferResource()->srv, VK_SAMPLE_COUNT_1_BIT); + + return std::unique_ptr(GLTFPbr); +} + +std::unique_ptr EI_Device::CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfDepthPass* GLTFDepth = new CAULDRON_VK::GltfDepthPass(); + assert(renderTargetSet); + + GLTFDepth->OnCreate(GetCauldronDevice(), renderTargetSet->m_RenderPass, &m_uploadHeap, &m_resourceViewHeaps, + &m_constantBufferRing, &m_vidMemBufferPool, pGLTFTexturesAndBuffers); + + return std::unique_ptr(GLTFDepth); +} + +void EI_RenderTargetSet::SetResources(const EI_Resource** pResourcesArray) +{ + if (m_FrameBuffer) { + + vkDestroyFramebuffer(GetDevice()->GetVulkanDevice(), m_FrameBuffer, nullptr); + } + + // Now setup up the needed frame buffers + VkImageView viewAttachments[MaxRenderAttachments]; + + // We need the SRVs for all the things ... + for (uint32_t i = 0; i < m_NumResources; ++i) + viewAttachments[i] = pResourcesArray[i]->rtv; + + VkFramebufferCreateInfo fb_info = {}; + fb_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; + fb_info.pNext = NULL; + fb_info.renderPass = m_RenderPass; + fb_info.attachmentCount = m_NumResources; + fb_info.pAttachments = viewAttachments; + + // Use the width and height from the first entry (they should ALL be the same) + fb_info.width = pResourcesArray[0]->GetWidth(); + fb_info.height = pResourcesArray[0]->GetHeight(); + fb_info.layers = 1; + + vkCreateFramebuffer(GetDevice()->GetVulkanDevice(), &fb_info, nullptr, &m_FrameBuffer); +} + +VkRenderPass EI_Device::CreateRenderPass(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams) +{ + VkAttachmentDescription attachments[MaxRenderAttachments]; + VkAttachmentReference colorRefs[MaxRenderAttachments]; + VkAttachmentReference depthRef; + int numColorRefs = 0; + + assert(numResources < MaxRenderAttachments && "Creating a RenderPass with more attachments than currently supportable. Please increase MaxRenderAttachments static variable in VKEngineInterfaceImpl.cpp"); + + // Start by figuring out render pass buffers + for (uint32_t i = 0; i < numResources; ++i) + { + assert(!(AttachmentParams[i].Flags & EI_RenderPassFlags::Depth && (i != (numResources - 1))) && "Only the last attachment can be specified as depth target"); + + attachments[i].format = pResourceFormats[i]; + attachments[i].samples = VK_SAMPLE_COUNT_1_BIT; // We should probably find a better way to query/set this in the future + attachments[i].storeOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Store? VK_ATTACHMENT_STORE_OP_STORE : VK_ATTACHMENT_STORE_OP_DONT_CARE; + + VkImageLayout imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + imageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + } + attachments[i].initialLayout = imageLayout; + attachments[i].finalLayout = imageLayout; + assert(attachments[i].initialLayout == attachments[i].finalLayout); + attachments[i].flags = 0; + VkAttachmentLoadOp loadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Load ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachments[i].loadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Clear ? VK_ATTACHMENT_LOAD_OP_CLEAR : loadOp; + + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + loadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Load ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachments[i].stencilLoadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Clear? VK_ATTACHMENT_LOAD_OP_CLEAR : loadOp; + attachments[i].stencilStoreOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Store? VK_ATTACHMENT_STORE_OP_STORE : VK_ATTACHMENT_STORE_OP_DONT_CARE; + depthRef = { i, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL }; + } + else + { + attachments[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachments[i].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + colorRefs[numColorRefs++] = { i, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL }; + } + } + + VkSubpassDescription subpass = {}; + subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; + subpass.flags = 0; + subpass.inputAttachmentCount = 0; + subpass.pInputAttachments = NULL; + subpass.colorAttachmentCount = numColorRefs; + subpass.pColorAttachments = colorRefs; + subpass.pResolveAttachments = NULL; + subpass.pDepthStencilAttachment = numColorRefs != numResources? &depthRef : nullptr; // If we don't have the same number of color resources as total resources, one is depth + subpass.preserveAttachmentCount = 0; + subpass.pPreserveAttachments = NULL; + + VkRenderPassCreateInfo rp_info = {}; + rp_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; + rp_info.pNext = NULL; + rp_info.attachmentCount = numResources; + rp_info.pAttachments = attachments; + rp_info.subpassCount = 1; + rp_info.pSubpasses = &subpass; + rp_info.dependencyCount = 0; + rp_info.pDependencies = NULL; + + // Create the Vulkan render pass + VkRenderPass pass; + vkCreateRenderPass(m_device.GetDevice(), &rp_info, NULL, &pass); + return pass; +} + +EI_RenderTargetSet::~EI_RenderTargetSet() +{ + vkDestroyFramebuffer(GetDevice()->GetVulkanDevice(), m_FrameBuffer, nullptr); + vkDestroyRenderPass(GetDevice()->GetVulkanDevice(), m_RenderPass, nullptr); +} + +void EI_Device::BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderTargetSet, const wchar_t* pPassName, uint32_t width /*= 0*/, uint32_t height /*= 0*/) +{ + VkRenderPassBeginInfo rp_begin = {}; + + rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rp_begin.pNext = NULL; + rp_begin.renderPass = pRenderTargetSet->m_RenderPass; + rp_begin.framebuffer = pRenderTargetSet->m_FrameBuffer; + rp_begin.renderArea.offset.x = 0; + rp_begin.renderArea.offset.y = 0; + rp_begin.renderArea.extent.width = width? width : m_width; + rp_begin.renderArea.extent.height = height? height : m_height; + rp_begin.clearValueCount = pRenderTargetSet->m_NumResources; + rp_begin.pClearValues = pRenderTargetSet->m_ClearValues; + + vkCmdBeginRenderPass(commandContext.commandBuffer, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); + + // NOTE: This should probably in it's own stand-alone call + CAULDRON_VK::SetViewportAndScissor(commandContext.commandBuffer, 0, 0, width ? width : m_width, height ? height : m_height); +} + +void EI_Device::EndRenderPass(EI_CommandContext& commandContext) +{ + vkCmdEndRenderPass(commandContext.commandBuffer); +} + +void EI_Device::SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height) +{ + CAULDRON_VK::SetViewportAndScissor(commandContext.commandBuffer, topX, topY, width, height); +} + +void EI_Device::OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName) +{ + // Create Device + m_device.OnCreate(appName, "Cauldron", enableValidation, hWnd); + m_device.CreatePipelineCache(); + + //init the shader compiler + CAULDRON_VK::CreateShaderCache(); + + // Create Swapchain + m_swapChain.OnCreate(&m_device, numBackBuffers, hWnd, CAULDRON_VK::DISPLAYMODE_SDR); + + m_resourceViewHeaps.OnCreate(&m_device, 256, 256, 256, 256); + + // Create a commandlist ring for the Direct queue + m_commandListRing.OnCreate(&m_device, numBackBuffers, 8); + // async compute + m_computeCommandListRing.OnCreate(&m_device, numBackBuffers, 8, true); + BeginNewCommandBuffer(); + + VkFenceCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + info.flags = 0; + vkCreateFence(GetVulkanDevice(), &info, nullptr, &m_computeDoneFence); + + + // Create a 'dynamic' constant buffers ring + m_constantBufferRing.OnCreate(&m_device, numBackBuffers, 20 * 1024 * 1024, "Uniforms"); + + // Create a 'static' constant buffer pool + m_vidMemBufferPool.OnCreate(&m_device, 128 * 1024 * 1024, USE_VID_MEM, "StaticGeom"); + m_sysMemBufferPool.OnCreate(&m_device, 32 * 1024, false, "PostProcGeom"); + + // initialize the GPU time stamps module + m_gpuTimer.OnCreate(&m_device, numBackBuffers); + + // Quick helper to upload resources, it has it's own commandList and uses suballocation. + // for 4K textures we'll need 100Megs + m_uploadHeap.OnCreate(&m_device, 100 * 1024 * 1024); + + // Create tonemapping pass + m_toneMapping.OnCreate(&m_device, m_swapChain.GetRenderPass(), &m_resourceViewHeaps, &m_sysMemBufferPool, &m_constantBufferRing); + + // Initialize UI rendering resources + m_ImGUI.OnCreate(&m_device, m_swapChain.GetRenderPass(), &m_uploadHeap, &m_constantBufferRing); + + // Create a render pass for our main buffer as it's needed earlier than other stuff is created + VkFormat backbufferFormats[] = { VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_D32_SFLOAT }; + + // Create index buffer for full screen passes + m_pFullscreenIndexBuffer = CreateBufferResource(sizeof(uint32_t), 4, EI_BF_INDEXBUFFER, "FullScreenIndexBuffer"); + + // Create shadow buffer. Because GLTF only allows us 1 buffer, we are going to create a HUGE one and divy it up as needed. + m_shadowBuffer = CreateDepthResource(4096, 4096, "Shadow Buffer"); + + // Create layout and PSO for resolve to swap chain + EI_LayoutDescription desc = { { {"ColorTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, }, EI_PS }; + m_pEndFrameResolveBindLayout = CreateLayout(desc); + + // Recreate a PSO for full screen resolve to swap chain + //std::vector descs; + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::Always; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { m_pEndFrameResolveBindLayout.get() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = nullptr; // Will go to swapchain + m_pEndFrameResolvePSO = CreateGraphicsPSO("FullScreenRender.hlsl", "FullScreenVS", "FullScreenRender.hlsl", "FullScreenPS", psoParams); + + // Create default white texture to use + m_DefaultWhiteTexture = CreateResourceFromFile("DefaultWhite.png", true); + + // Create some samplers to use + m_LinearWrapSampler = CreateSampler(EI_Filter::Linear, EI_Filter::Linear, EI_Filter::Linear, EI_AddressMode::Wrap); + + // finish creating the index buffer + uint32_t indexArray[] = { 0, 1, 2, 3 }; + m_currentCommandBuffer.UpdateBuffer(m_pFullscreenIndexBuffer.get(), indexArray); + + EI_Barrier copyToResource[] = { + { m_pFullscreenIndexBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_INDEX_BUFFER } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(copyToResource), copyToResource); +} + +void EI_Device::OnResize(uint32_t width, uint32_t height) +{ + m_width = width; + m_height = height; + + // if a previous resize event from this frame hasnt already opened a command buffer + if (!m_recording) + { + BeginNewCommandBuffer(); + } + + // If resizing but no minimizing + if (width > 0 && height > 0) + { + // Re/Create color buffer + m_colorBuffer = CreateRenderTargetResource(width, height, 4, 1, "Color Buffer"); + m_depthBuffer = CreateDepthResource(width, height, "Depth Buffer"); + m_swapChain.OnCreateWindowSizeDependentResources(width, height, m_vSync, CAULDRON_VK::DISPLAYMODE_SDR); + + // Create resources we need to resolve out render target back to swap chain + EI_BindSetDescription bindSet = { { m_colorBuffer.get() } }; + m_pEndFrameResolveBindSet = CreateBindSet(m_pEndFrameResolveBindLayout.get(), bindSet); + + // Create a bind set for any samplers we need (Doing it here because the layouts aren't yet initialized during OnCreate() call) + EI_BindSetDescription bindSetDesc = { { m_LinearWrapSampler.get(), } }; + m_pSamplerBindSet = CreateBindSet(GetSamplerLayout(), bindSetDesc); + + // update tonemapping + m_toneMapping.UpdatePipelines(m_swapChain.GetRenderPass()); + } +} + +void EI_Device::OnDestroy() +{ + m_device.GPUFlush(); + + // Remove linear wrap sampler + m_LinearWrapSampler.reset(); + + // Remove default white texture + m_DefaultWhiteTexture.reset(); + + // Wipe all the local resources we were using + m_pSamplerBindSet.reset(); + m_pEndFrameResolveBindSet.reset(); + m_pEndFrameResolvePSO.reset(); + m_pEndFrameResolveBindLayout.reset(); + + m_pFullscreenIndexBuffer.reset(); + m_shadowBuffer.reset(); + m_depthBuffer.reset(); + m_colorBuffer.reset(); + +#if TRESSFX_DEBUG_UAV + m_pDebugUAV.reset(); +#endif // TRESSFX_DEBUG_UAV + + m_toneMapping.OnDestroy(); + m_ImGUI.OnDestroy(); + + m_uploadHeap.OnDestroy(); + m_gpuTimer.OnDestroy(); + m_vidMemBufferPool.OnDestroy(); + m_sysMemBufferPool.OnDestroy(); + m_constantBufferRing.OnDestroy(); + m_resourceViewHeaps.OnDestroy(); + m_commandListRing.OnDestroy(); + m_computeCommandListRing.OnDestroy(); + + // Fullscreen state should always be false before exiting the app. + m_swapChain.SetFullScreen(false); + m_swapChain.OnDestroyWindowSizeDependentResources(); + m_swapChain.OnDestroy(); + + // shut down the shader compiler + DestroyShaderCache(&m_device); + m_device.DestroyPipelineCache(); + vkDestroyFence(GetVulkanDevice(), m_computeDoneFence, nullptr); + + m_device.OnDestroy(); +} + +std::unique_ptr EI_Device::CreateComputeShaderPSO(const char * shaderName, const char * entryPoint, EI_BindLayout ** layouts, int numLayouts) +{ + EI_PSO * result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["AMD_TRESSFX_VULKAN"] = "1"; + + VkPipelineShaderStageCreateInfo computeShader; + CAULDRON_VK::VKCompileFromFile(m_device.GetDevice(), VK_SHADER_STAGE_COMPUTE_BIT, shaderName, entryPoint, &defines, &computeShader); + + VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = {}; + + VkDescriptorSetLayout descSetLayouts[16]; + for (int i = 0; i < numLayouts; ++i) + { + descSetLayouts[i] = layouts[i]->m_descriptorSetLayout; + } + pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + pipelineLayoutCreateInfo.pSetLayouts = descSetLayouts; + pipelineLayoutCreateInfo.setLayoutCount = numLayouts; + vkCreatePipelineLayout(m_device.GetDevice(), &pipelineLayoutCreateInfo, nullptr, &result->m_pipelineLayout); + VkComputePipelineCreateInfo computePipelineCreateInfo = {}; + computePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO; + computePipelineCreateInfo.layout = result->m_pipelineLayout; + computePipelineCreateInfo.stage = computeShader; + vkCreateComputePipelines(m_device.GetDevice(), m_device.GetPipelineCache(), 1, &computePipelineCreateInfo, NULL, &result->m_pipeline); + + result->m_bp = EI_BP_COMPUTE; + return std::unique_ptr(result); +} + +EI_PSO::~EI_PSO() +{ + vkDestroyPipeline(GetDevice()->GetVulkanDevice(), m_pipeline, NULL); + vkDestroyPipelineLayout(GetDevice()->GetVulkanDevice(), m_pipelineLayout, NULL); +} + +std::unique_ptr EI_Device::CreateGraphicsPSO(const char * vertexShaderName, const char * vertexEntryPoint, const char * fragmentShaderName, const char * fragmentEntryPoint, EI_PSOParams& psoParams) +{ + EI_PSO * result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["TRESSFX_VULKAN"] = "1"; + + // Compile and create shaders + VkPipelineShaderStageCreateInfo vertexShader = {}, fragmentShader = {}; + + CAULDRON_VK::VKCompileFromFile(m_device.GetDevice(), VK_SHADER_STAGE_VERTEX_BIT, vertexShaderName, vertexEntryPoint, &defines, &vertexShader); + CAULDRON_VK::VKCompileFromFile(m_device.GetDevice(), VK_SHADER_STAGE_FRAGMENT_BIT, fragmentShaderName, fragmentEntryPoint, &defines, &fragmentShader); + + VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = {}; + + VkDescriptorSetLayout descSetLayouts[16]; + for (int i = 0; i < psoParams.numLayouts; ++i) + { + descSetLayouts[i] = psoParams.layouts[i]->m_descriptorSetLayout; + } + pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + pipelineLayoutCreateInfo.pSetLayouts = descSetLayouts; + pipelineLayoutCreateInfo.setLayoutCount = psoParams.numLayouts; + vkCreatePipelineLayout(m_device.GetDevice(), &pipelineLayoutCreateInfo, nullptr, &result->m_pipelineLayout); + + std::vector shaderStages = { vertexShader, fragmentShader }; + + // Create pipeline + + // vertex input state (never need any) + std::vector vi_binding(0); + + VkPipelineVertexInputStateCreateInfo vi = {}; + vi.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + vi.pNext = NULL; + vi.flags = 0; + vi.vertexBindingDescriptionCount = (uint32_t)vi_binding.size(); + vi.pVertexBindingDescriptions = vi_binding.data(); + vi.vertexAttributeDescriptionCount = 0; + vi.pVertexAttributeDescriptions = nullptr; + + // input assembly state + VkPipelineInputAssemblyStateCreateInfo ia; + ia.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + ia.pNext = NULL; + ia.flags = 0; + ia.primitiveRestartEnable = VK_FALSE; + ia.topology = *psoParams.primitiveTopology; + + // rasterizer state + VkPipelineRasterizationStateCreateInfo rs; + rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; + rs.pNext = NULL; + rs.flags = 0; + rs.polygonMode = VK_POLYGON_MODE_FILL; + rs.cullMode = VK_CULL_MODE_BACK_BIT; + rs.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; + rs.depthClampEnable = VK_FALSE; + rs.rasterizerDiscardEnable = VK_FALSE; + rs.depthBiasEnable = VK_FALSE; + rs.depthBiasConstantFactor = 0; + rs.depthBiasClamp = 0; + rs.depthBiasSlopeFactor = 0; + rs.lineWidth = 1.0f; + + VkPipelineColorBlendAttachmentState att_state[1]; + att_state[0].colorWriteMask = psoParams.colorWriteEnable ? VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT : 0; + att_state[0].blendEnable = psoParams.colorBlendParams.colorBlendEnabled; + att_state[0].colorBlendOp = *psoParams.colorBlendParams.colorBlendOp; + att_state[0].srcColorBlendFactor = *psoParams.colorBlendParams.colorSrcBlend; + att_state[0].dstColorBlendFactor = *psoParams.colorBlendParams.colorDstBlend; + att_state[0].alphaBlendOp = *psoParams.colorBlendParams.alphaBlendOp; + att_state[0].srcAlphaBlendFactor = *psoParams.colorBlendParams.alphaSrcBlend; + att_state[0].dstAlphaBlendFactor = *psoParams.colorBlendParams.alphaDstBlend; + + // Color blend state + VkPipelineColorBlendStateCreateInfo cb; + cb.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + cb.flags = 0; + cb.pNext = NULL; + cb.attachmentCount = 1; + cb.pAttachments = att_state; + cb.logicOpEnable = VK_FALSE; + cb.logicOp = VK_LOGIC_OP_NO_OP; + cb.blendConstants[0] = 0; + cb.blendConstants[1] = 0; + cb.blendConstants[2] = 0; + cb.blendConstants[3] = 0; + + std::vector dynamicStateEnables = { + VK_DYNAMIC_STATE_VIEWPORT, + VK_DYNAMIC_STATE_SCISSOR + }; + VkPipelineDynamicStateCreateInfo dynamicState = {}; + dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; + dynamicState.pNext = NULL; + dynamicState.pDynamicStates = dynamicStateEnables.data(); + dynamicState.dynamicStateCount = (uint32_t)dynamicStateEnables.size(); + + // view port state + VkPipelineViewportStateCreateInfo vp = {}; + vp.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + vp.pNext = NULL; + vp.flags = 0; + vp.viewportCount = 1; + vp.scissorCount = 1; + vp.pScissors = NULL; + vp.pViewports = NULL; + + // depth stencil state + VkPipelineDepthStencilStateCreateInfo ds; + ds.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; + ds.pNext = NULL; + ds.flags = 0; + ds.depthTestEnable = psoParams.depthTestEnable; + ds.depthWriteEnable = psoParams.depthWriteEnable; + ds.depthCompareOp = *psoParams.depthCompareOp; + ds.stencilTestEnable = psoParams.stencilTestEnable; + + ds.back.failOp = *psoParams.backFailOp; + ds.back.passOp = *psoParams.backPassOp; + ds.back.depthFailOp = *psoParams.backDepthFailOp; + ds.back.compareOp = *psoParams.backCompareOp; + + ds.front.failOp = *psoParams.frontFailOp; + ds.front.passOp = *psoParams.frontPassOp; + ds.front.depthFailOp = *psoParams.frontDepthFailOp; + ds.front.compareOp = *psoParams.frontCompareOp; + + ds.back.compareMask = ds.front.compareMask = psoParams.stencilReadMask; + ds.back.reference = ds.front.reference = psoParams.stencilReference; + ds.back.writeMask = ds.front.writeMask = psoParams.stencilWriteMask; + + ds.depthBoundsTestEnable = VK_FALSE; + ds.minDepthBounds = 0; + ds.maxDepthBounds = 0; + + // multi sample state + VkPipelineMultisampleStateCreateInfo ms; + ms.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + ms.pNext = NULL; + ms.flags = 0; + ms.pSampleMask = NULL; + ms.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + ms.sampleShadingEnable = VK_FALSE; + ms.alphaToCoverageEnable = VK_FALSE; + ms.alphaToOneEnable = VK_FALSE; + ms.minSampleShading = 0.0; + + // create pipeline + VkGraphicsPipelineCreateInfo pipeline = {}; + pipeline.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + pipeline.pNext = NULL; + pipeline.layout = result->m_pipelineLayout; + pipeline.basePipelineHandle = VK_NULL_HANDLE; + pipeline.basePipelineIndex = 0; + pipeline.flags = 0; + pipeline.pVertexInputState = &vi; + pipeline.pInputAssemblyState = &ia; + pipeline.pRasterizationState = &rs; + pipeline.pColorBlendState = &cb; + pipeline.pTessellationState = NULL; + pipeline.pMultisampleState = &ms; + pipeline.pDynamicState = &dynamicState; + pipeline.pViewportState = &vp; + pipeline.pDepthStencilState = &ds; + pipeline.pStages = shaderStages.data(); + pipeline.stageCount = (uint32_t)shaderStages.size(); + pipeline.renderPass = psoParams.renderTargetSet != nullptr ? psoParams.renderTargetSet->m_RenderPass : GetSwapChainRenderPass(); + pipeline.subpass = 0; + + vkCreateGraphicsPipelines(m_device.GetDevice(), m_device.GetPipelineCache(), 1, &pipeline, NULL, &result->m_pipeline); + + result->m_bp = EI_BP_GRAPHICS; + return std::unique_ptr(result); +} + +void EI_Device::WaitForCompute() +{ + vkWaitForFences(GetVulkanDevice(), 1, &m_computeDoneFence, true, UINT64_MAX); +} + +void EI_Device::SignalComputeStart() +{ + // TODO + vkResetFences(GetVulkanDevice(), 1, &m_computeDoneFence); +} + +void EI_Device::WaitForLastFrameGraphics() +{ + // TODO - not sure if this is necessary + if ( m_lastFrameGraphicsCommandBufferFence != VK_NULL_HANDLE) + { + vkWaitForFences(GetVulkanDevice(), 1, &m_lastFrameGraphicsCommandBufferFence, true, UINT64_MAX); + } +} + +void EI_Device::SubmitComputeCommandList() +{ + vkEndCommandBuffer(m_currentComputeCommandBuffer.commandBuffer); + + VkPipelineStageFlags submitWaitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + const VkCommandBuffer cmd_bufs[] = { m_currentComputeCommandBuffer.commandBuffer }; + VkSubmitInfo submit_info; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submit_info.pNext = NULL; + submit_info.waitSemaphoreCount = 0; + submit_info.pWaitSemaphores = nullptr; + submit_info.pWaitDstStageMask = &submitWaitStage; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = cmd_bufs; + submit_info.signalSemaphoreCount = 0; + submit_info.pSignalSemaphores = nullptr; + + vkQueueSubmit(m_device.GetComputeQueue(), 1, &submit_info, m_computeDoneFence); +} + +void EI_CommandContext::DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams) +{ + assert(drawParams.pIndexBuffer->m_ResourceType == EI_ResourceType::Buffer); + vkCmdBindIndexBuffer(commandBuffer, drawParams.pIndexBuffer->m_pBuffer->gpuBuffer, 0, VK_INDEX_TYPE_UINT32); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pso.m_pipeline); + vkCmdDrawIndexed(commandBuffer, drawParams.numIndices, 1, 0, 0, 0); +} + +void EI_CommandContext::DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams) +{ + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pso.m_pipeline); + vkCmdDraw(commandBuffer, drawParams.numVertices, drawParams.numInstances, 0, 0); +} + +void EI_CommandContext::PushConstants(EI_PSO * pso, int size, void * data) +{ + vkCmdPushConstants(commandBuffer, pso->m_pipelineLayout, VK_SHADER_STAGE_ALL, 0, size, data); +} + +void EI_Device::BeginNewCommandBuffer() +{ + assert(m_recording == false); + m_currentCommandBuffer.commandBuffer = m_commandListRing.GetNewCommandList(); + + VkCommandBufferBeginInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + vkBeginCommandBuffer(m_currentCommandBuffer.commandBuffer, &info); + m_recording = true; +} + +void EI_Device::BeginNewComputeCommandBuffer() +{ + m_currentComputeCommandBuffer.commandBuffer = m_computeCommandListRing.GetNewCommandList(); + + VkCommandBufferBeginInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + vkBeginCommandBuffer(m_currentComputeCommandBuffer.commandBuffer, &info); +} + +void EI_Device::EndAndSubmitCommandBuffer() +{ + vkEndCommandBuffer(m_currentCommandBuffer.commandBuffer); + + // Close & Submit the command list + VkSemaphore imageAvailableSemaphore; + VkSemaphore renderFinishedSemaphore; + VkFence cmdBufExecutedFence; + m_swapChain.GetSemaphores(&imageAvailableSemaphore, &renderFinishedSemaphore, &cmdBufExecutedFence); + m_lastFrameGraphicsCommandBufferFence = cmdBufExecutedFence; + + VkPipelineStageFlags submitWaitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + const VkCommandBuffer cmd_bufs[] = { m_currentCommandBuffer.commandBuffer }; + VkSubmitInfo submit_info; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submit_info.pNext = NULL; + submit_info.waitSemaphoreCount = 0; + submit_info.pWaitSemaphores = NULL; + submit_info.pWaitDstStageMask = &submitWaitStage; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = cmd_bufs; + submit_info.signalSemaphoreCount = 0; + submit_info.pSignalSemaphores = NULL; + + vkQueueSubmit(m_device.GetGraphicsQueue(), 1, &submit_info, VK_NULL_HANDLE); + m_recording = false; +} + +void EI_Device::EndAndSubmitCommandBufferWithFences() +{ + vkEndCommandBuffer(m_currentCommandBuffer.commandBuffer); + + // Close & Submit the command list + VkSemaphore imageAvailableSemaphore; + VkSemaphore renderFinishedSemaphore; + VkFence cmdBufExecutedFence; + m_swapChain.GetSemaphores(&imageAvailableSemaphore, &renderFinishedSemaphore, &cmdBufExecutedFence); + m_lastFrameGraphicsCommandBufferFence = cmdBufExecutedFence; + + VkPipelineStageFlags submitWaitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + const VkCommandBuffer cmd_bufs[] = { m_currentCommandBuffer.commandBuffer }; + VkSubmitInfo submit_info; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submit_info.pNext = NULL; + submit_info.waitSemaphoreCount = 1; + submit_info.pWaitSemaphores = &imageAvailableSemaphore; + submit_info.pWaitDstStageMask = &submitWaitStage; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = cmd_bufs; + submit_info.signalSemaphoreCount = 1; + submit_info.pSignalSemaphores = &renderFinishedSemaphore; + + vkQueueSubmit(m_device.GetGraphicsQueue(), 1, &submit_info, cmdBufExecutedFence); + m_recording = false; +} + +void EI_Device::BeginBackbufferRenderPass() +{ + // THIS FUNCTION SHOULD ONLY EVER BE CALLED ONCE PER FRAME AT THE END OF THE FRAME + // AS IT RELIES ON A BUNCH OF HARDCODED THINGS SETUP IN THE SWAP CHAIN OF CAULDRON'S + // INITIALIZATION + VkClearValue ClearValues[2]; + + // Setup clear values + ClearValues[0].color.float32[0] = 0.0f; + ClearValues[0].color.float32[1] = 0.0f; + ClearValues[0].color.float32[2] = 0.0f; + ClearValues[0].color.float32[3] = 0.0f; + ClearValues[1].depthStencil.depth = 1.0f; + ClearValues[1].depthStencil.stencil = 0; + + VkRenderPassBeginInfo rp_begin = {}; + rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rp_begin.pNext = NULL; + rp_begin.renderPass = m_swapChain.GetRenderPass(); + rp_begin.framebuffer = m_swapChain.GetFramebuffer(m_currentImageIndex); + rp_begin.renderArea.offset.x = 0; + rp_begin.renderArea.offset.y = 0; + rp_begin.renderArea.extent.width = m_width; + rp_begin.renderArea.extent.height = m_height; + rp_begin.pClearValues = ClearValues; + rp_begin.clearValueCount = 2; + vkCmdBeginRenderPass(m_currentCommandBuffer.commandBuffer, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); + + CAULDRON_VK::SetViewportAndScissor(m_currentCommandBuffer.commandBuffer, 0, 0, m_width, m_height); +} + +void EI_Device::EndRenderPass() +{ + vkCmdEndRenderPass(m_currentCommandBuffer.commandBuffer); +} + +void EI_Device::GetTimeStamp(char * name) +{ + m_gpuTimer.GetTimeStamp(m_currentCommandBuffer.commandBuffer, name); +} + +VkDescriptorSetLayoutBinding VulkanDescriptorSetBinding(int binding, EI_ShaderStage stage, EI_ResourceTypeEnum type) { + + VkDescriptorSetLayoutBinding b; + + b.stageFlags = VK_SHADER_STAGE_ALL; + switch (stage) { + case EI_VS: + b.stageFlags = VK_SHADER_STAGE_VERTEX_BIT; + break; + case EI_PS: + b.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; + break; + case EI_CS: + b.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT; + break; + case EI_ALL: + b.stageFlags = VK_SHADER_STAGE_ALL; + default: + b.stageFlags = VK_SHADER_STAGE_ALL; + } + b.binding = binding; + if (type == EI_RESOURCETYPE_BUFFER_RO || type == EI_RESOURCETYPE_BUFFER_RW) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + } + if (type == EI_RESOURCETYPE_IMAGE_RW) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + } + if (type == EI_RESOURCETYPE_IMAGE_RO) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; + } + if (type == EI_RESOURCETYPE_UNIFORM ) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + } + if (type == EI_RESOURCETYPE_SAMPLER) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; + } + b.descriptorCount = 1; + b.pImmutableSamplers = nullptr; + return b; +} + +std::unique_ptr EI_Device::CreateLayout(const EI_LayoutDescription& description) +{ + std::vector layoutBindings; + + EI_BindLayout* pLayout = new EI_BindLayout; + + int numResources = (int)description.resources.size(); + + for (int i = 0; i < numResources; ++i) + { + int binding = description.resources[i].binding; + if (binding >= 0) { + layoutBindings.push_back(VulkanDescriptorSetBinding(binding, description.stage, description.resources[i].type)); + } + } + + VkDescriptorSetLayoutCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + info.bindingCount = (uint32_t)layoutBindings.size(); + info.pBindings = layoutBindings.data(); + vkCreateDescriptorSetLayout(m_device.GetDevice(), &info, NULL, &pLayout->m_descriptorSetLayout); + + pLayout->layoutBindings = layoutBindings; + pLayout->description = description; + return std::unique_ptr(pLayout); +} + +EI_BindLayout::~EI_BindLayout() +{ + vkDestroyDescriptorSetLayout(GetDevice()->GetVulkanDevice(), m_descriptorSetLayout, NULL); +} + +void EI_Device::OnBeginFrame(bool bDoAsync) +{ + // Let our resource managers do some house keeping + m_computeCommandListRing.OnBeginFrame(); + m_constantBufferRing.OnBeginFrame(); + + // if a resize event already started a the command buffer - we need to do it this way, + // because multiple resizes in one frame could overflow the command buffer pool if we open a new + // command buffer everytime we resize + if (m_recording) + { + EndAndSubmitCommandBuffer(); + FlushGPU(); + } + BeginNewCommandBuffer(); + + if (bDoAsync) + BeginNewComputeCommandBuffer(); + + m_gpuTimer.OnBeginFrame(m_currentCommandBuffer.commandBuffer, &m_timeStamps); + + std::map timeStampMap; + for (int i = 0; i < (int)m_timeStamps.size() - 1; ++i) + { + timeStampMap[m_timeStamps[i + 1].m_label] += m_timeStamps[i + 1].m_microseconds - m_timeStamps[i].m_microseconds; + } + int i = 0; + m_sortedTimeStamps.resize(timeStampMap.size()); + for (std::map::iterator it = timeStampMap.begin(); it != timeStampMap.end(); ++it) + { + m_sortedTimeStamps[i].m_label = it->first; + m_sortedTimeStamps[i].m_microseconds = it->second; + ++i; + } + + if (m_timeStamps.size() > 0) + { + //scrolling data and average computing + static float values[128]; + values[127] = (float)(m_timeStamps.back().m_microseconds - m_timeStamps.front().m_microseconds); + float average = values[0]; + for (uint32_t i = 0; i < 128 - 1; i++) { values[i] = values[i + 1]; average += values[i]; } + average /= 128; + m_averageGpuTime = average; + } +} + +void EI_Device::OnEndFrame() +{ + EI_Barrier barrier[] = { + { m_colorBuffer.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(barrier), barrier); + + WaitForLastFrameGraphics(); + EndAndSubmitCommandBuffer(); + + m_currentImageIndex = m_swapChain.WaitForSwapChain(); + + m_commandListRing.OnBeginFrame(); + + BeginNewCommandBuffer(); + BeginBackbufferRenderPass(); + + // Tonemapping ------------------------------------------------------------------------ + { + float exposure = 1.0f; + int toneMapper = 0; + m_toneMapping.Draw(GetCurrentCommandContext().commandBuffer, m_colorBuffer.get()->srv, exposure, toneMapper, true); + GetTimeStamp("Tone Mapping"); + } + + // Start by resolving render to swap chain + // Do UI render over top + RenderUI(); + + // Wrap up + EndRenderPass(); + + { + EI_Barrier barrier[] = { + { m_colorBuffer.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(barrier), barrier); + } + + m_gpuTimer.OnEndFrame(); + EndAndSubmitCommandBufferWithFences(); + m_swapChain.Present(); +} + +void EI_Device::RenderUI() +{ + m_ImGUI.Draw(m_currentCommandBuffer.commandBuffer); +} + +static EI_Device * g_device = NULL; + +EI_Device * GetDevice() { + if (g_device == NULL) { + g_device = new EI_Device(); + } + return g_device; +} + +void EI_CommandContext::BindSets(EI_PSO * pso, int numBindSets, EI_BindSet ** bindSets) +{ + assert(numBindSets < 8); + VkDescriptorSet descSets[8]; + for (int i = 0; i < numBindSets; ++i) { + descSets[i] = bindSets[i]->m_descriptorSet; + } + + vkCmdBindDescriptorSets(commandBuffer, VulkanBindPoint(pso->m_bp), pso->m_pipelineLayout, 0, numBindSets, descSets, 0, NULL); +} + +VkAccessFlags VulkanAccessFlags(EI_ResourceState state) +{ + switch (state) + { + case EI_STATE_SRV: + return VK_ACCESS_SHADER_READ_BIT; + case EI_STATE_UAV: + return VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; + case EI_STATE_COPY_DEST: + return VK_ACCESS_TRANSFER_WRITE_BIT; + case EI_STATE_COPY_SOURCE: + return VK_ACCESS_TRANSFER_READ_BIT; + case EI_STATE_RENDER_TARGET: + return VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + case EI_STATE_DEPTH_STENCIL: + return VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + case EI_STATE_INDEX_BUFFER: + return VK_ACCESS_INDEX_READ_BIT; + case EI_STATE_CONSTANT_BUFFER: + return VK_ACCESS_SHADER_READ_BIT; + default: + assert(0); + return 0; + } +} + +EI_Resource::EI_Resource() : + m_ResourceType(EI_ResourceType::Undefined), + m_pBuffer(nullptr) +{ +} + +EI_Resource::~EI_Resource() +{ + if (m_ResourceType == EI_ResourceType::Buffer && m_pBuffer != nullptr) + { + m_pBuffer->Free(); + delete m_pBuffer; + } + else if (m_ResourceType == EI_ResourceType::Texture) + { + m_pTexture->OnDestroy(); + delete m_pTexture; + } + else if (m_ResourceType == EI_ResourceType::Sampler) + { + vkDestroySampler(GetDevice()->GetCauldronDevice()->GetDevice(), *m_pSampler, nullptr); + delete m_pSampler; + } + else + { + assert(false && "Trying to destroy an undefined resource"); + } +} + +VkImageLayout VulkanImageLayout(EI_ResourceState state) +{ + switch (state) + { + case EI_STATE_SRV: + return VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + case EI_STATE_UAV: + return VK_IMAGE_LAYOUT_GENERAL; + case EI_STATE_COPY_DEST: + return VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + case EI_STATE_COPY_SOURCE: + return VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + case EI_STATE_RENDER_TARGET: + return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + case EI_STATE_DEPTH_STENCIL: + return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + case EI_STATE_UNDEFINED: + default: + return VK_IMAGE_LAYOUT_UNDEFINED; + } +} + +void EI_CommandContext::SubmitBarrier(int numBarriers, EI_Barrier * barriers) +{ + assert(numBarriers < 16); + VkBufferMemoryBarrier bb[16]; + VkImageMemoryBarrier ib[16]; + int numBufferBarriers = 0; + int numImageBarriers = 0; + for (int i = 0; i < numBarriers; ++i) + { + if (barriers[i].pResource->m_ResourceType == EI_ResourceType::Buffer) + { + bb[numBufferBarriers] = {}; + bb[numBufferBarriers].sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; + bb[numBufferBarriers].buffer = barriers[i].pResource->m_pBuffer->gpuBuffer; + bb[numBufferBarriers].srcAccessMask = VulkanAccessFlags(barriers[i].from); + bb[numBufferBarriers].dstAccessMask = VulkanAccessFlags(barriers[i].to); + bb[numBufferBarriers].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + bb[numBufferBarriers].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + bb[numBufferBarriers].offset = 0; + bb[numBufferBarriers].size = barriers[i].pResource->m_pBuffer->totalMemSize; + numBufferBarriers++; + } + else { + assert(barriers[i].pResource->m_ResourceType == EI_ResourceType::Texture); + ib[numImageBarriers] = {}; + ib[numImageBarriers].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + ib[numImageBarriers].image = barriers[i].pResource->m_pTexture->Resource(); + + // Resources NEED to be created as undefined, but we need to transition them out to actually use them + if (barriers[i].from == EI_STATE_UNDEFINED) + ib[numImageBarriers].srcAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; // VulkanAccessFlags(barriers[i].from); + else + ib[numImageBarriers].srcAccessMask = VulkanAccessFlags(barriers[i].from); + + ib[numImageBarriers].dstAccessMask = VulkanAccessFlags(barriers[i].to); + ib[numImageBarriers].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + ib[numImageBarriers].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + ib[numImageBarriers].oldLayout = VulkanImageLayout(barriers[i].from); + ib[numImageBarriers].newLayout = VulkanImageLayout(barriers[i].to); + + bool isDepthImage = barriers[i].pResource->m_pTexture->GetFormat() == VK_FORMAT_D32_SFLOAT; + + VkImageSubresourceRange subresourceRange = {}; + subresourceRange.aspectMask = isDepthImage ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; + subresourceRange.baseMipLevel = 0; + subresourceRange.levelCount = 1; + subresourceRange.layerCount = barriers[i].pResource->m_pTexture->GetArraySize(); + + ib[numImageBarriers].subresourceRange = subresourceRange; + numImageBarriers++; + } + } + vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, numBufferBarriers, bb, numImageBarriers, ib); +} + +void EI_CommandContext::BindPSO( EI_PSO * pso) +{ + vkCmdBindPipeline(commandBuffer, VulkanBindPoint(pso->m_bp), pso->m_pipeline); +} + +void EI_CommandContext::Dispatch(int numGroups) +{ + vkCmdDispatch(commandBuffer, numGroups, 1, 1); +} + +void EI_CommandContext::UpdateBuffer(EI_Resource * res, void * data) +{ + assert(res->m_ResourceType == EI_ResourceType::Buffer); + memcpy(res->m_pBuffer->cpuMappedMemory, data, res->m_pBuffer->totalMemSize); + VkBufferCopy region; + region.srcOffset = 0; + region.dstOffset = 0; + region.size = res->m_pBuffer->totalMemSize; + + vkCmdCopyBuffer(commandBuffer, res->m_pBuffer->cpuBuffer, res->m_pBuffer->gpuBuffer, 1, ®ion); +} + +void EI_CommandContext::ClearUint32Image(EI_Resource* res, uint32_t value) +{ + assert(res->m_ResourceType == EI_ResourceType::Texture); + VkClearColorValue clearValue; + clearValue.uint32[0] = value; + clearValue.uint32[1] = value; + clearValue.uint32[2] = value; + clearValue.uint32[3] = value; + VkImageSubresourceRange range; + range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + range.baseArrayLayer = 0; + range.baseMipLevel = 0; + range.layerCount = res->m_pTexture->GetArraySize(); + range.levelCount = 1; + vkCmdClearColorImage(commandBuffer, res->m_pTexture->Resource(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue, 1, &range); +} + +void EI_CommandContext::ClearFloat32Image(EI_Resource* res, float value) +{ + assert(res->m_ResourceType == EI_ResourceType::Texture); + VkClearColorValue clearValue; + clearValue.float32[0] = value; + clearValue.float32[1] = value; + clearValue.float32[2] = value; + clearValue.float32[3] = value; + VkImageSubresourceRange range; + range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + range.baseArrayLayer = 0; + range.baseMipLevel = 0; + range.layerCount = res->m_pTexture->GetArraySize(); + range.levelCount = 1; + vkCmdClearColorImage(commandBuffer, res->m_pTexture->Resource(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue, 1, &range); +} diff --git a/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.h b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.h new file mode 100644 index 0000000000..23dc06609c --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.h @@ -0,0 +1,305 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef VKRENDERER_H +#define VKRENDERER_H + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include +// C RunTime Header Files +#include +#include +#include +#include +#include +#include + +#include "Base/Device.h" +#include "Base/SwapChain.h" +#include "Base/Texture.h" +#include "Base/StaticBufferPool.h" +#include "Base/DynamicBufferRing.h" +#include "Base/CommandListRing.h" +#include "Base/GPUTimestamps.h" +#include "Base/Imgui.h" +#include "Base/ExtDebugMarkers.h" + +#include "PostProc/Tonemapping.h" + +#include "EngineInterface.h" +#include "TressFXCommon.h" + +#define USE_VID_MEM true + +typedef VkFormat EI_ResourceFormat; + +class EI_BindSet +{ +public: + ~EI_BindSet(); + VkDescriptorSet m_descriptorSet = VK_NULL_HANDLE; +}; + +class EI_CommandContext +{ +public: + void SubmitBarrier(int numBarriers, EI_Barrier * barriers); + void BindPSO(EI_PSO * pso); + void BindSets(EI_PSO * pso, int numBindSets, EI_BindSet ** bindSets); + void Dispatch(int numGroups); + void UpdateBuffer(EI_Resource * res, void * data); + void ClearUint32Image(EI_Resource* res, uint32_t value); + void ClearFloat32Image(EI_Resource* res, float value); + void DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams); + void DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams); + void PushConstants(EI_PSO * pso, int size, void * data); + VkCommandBuffer commandBuffer = VK_NULL_HANDLE; +}; + +namespace CAULDRON_VK +{ + class GLTFTexturesAndBuffers; + class GltfPbrPass; + class GltfDepthPass; +} + +typedef CAULDRON_VK::GLTFTexturesAndBuffers EI_GLTFTexturesAndBuffers; +typedef CAULDRON_VK::GltfPbrPass EI_GltfPbrPass; +typedef CAULDRON_VK::GltfDepthPass EI_GltfDepthPass; + +struct EI_RenderTargetSet; +class GLTFCommon; + +class EI_Marker +{ +public: + EI_Marker(EI_CommandContext& ctx, char * string) : m_ctx(ctx) + { + CAULDRON_VK::SetPerfMarkerBegin(ctx.commandBuffer, string); + } + ~EI_Marker() + { + CAULDRON_VK::SetPerfMarkerEnd(m_ctx.commandBuffer); + } +private: + EI_CommandContext& m_ctx; +}; + +class EI_Device +{ +public: + EI_Device(); + ~EI_Device(); + // interface + EI_CommandContext& GetCurrentCommandContext() { return m_currentCommandBuffer; } + std::unique_ptr CreateBufferResource(const int structSize, const int structCount, const unsigned int flags, const char* name); + std::unique_ptr CreateUint32Resource(const int width, const int height, const size_t arraySize, const char* name, uint32_t ClearValue = 0); + std::unique_ptr CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues = nullptr); + std::unique_ptr CreateDepthResource(const int width, const int height, const char* name); + std::unique_ptr CreateResourceFromFile(const char* szFilename, bool useSRGB = false); + std::unique_ptr CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode); + + std::unique_ptr CreateLayout(const EI_LayoutDescription& description); + + std::unique_ptr CreateBindSet(EI_BindLayout * layout, EI_BindSetDescription& bindSet); + + std::unique_ptr CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + std::unique_ptr CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + + std::unique_ptr CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon); + std::unique_ptr CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + std::unique_ptr CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + + void BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderPassSet, const wchar_t* pPassName, uint32_t width = 0, uint32_t height = 0); + void EndRenderPass(EI_CommandContext& commandContext); + void SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height); + + std::unique_ptr CreateComputeShaderPSO(const char * shaderName, const char * entryPoint, EI_BindLayout ** layouts, int numLayouts); + std::unique_ptr CreateGraphicsPSO(const char * vertexShaderName, const char * vertexEntryPoint, const char * fragmentShaderName, const char * fragmentEntryPoint, EI_PSOParams& psoParams); + + /* async compute */ + EI_CommandContext& GetComputeCommandContext() { return m_currentComputeCommandBuffer; } + void WaitForCompute(); + void SignalComputeStart(); + void WaitForLastFrameGraphics(); + void SubmitComputeCommandList(); + /* /async compute */ + + // internals + void OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName); + void OnResize(uint32_t width, uint32_t height); + void SetVSync(bool vSync) { m_vSync = vSync; } + void FlushGPU() { m_device.GPUFlush(); } + void OnDestroy(); + void OnBeginFrame(bool bDoAsync); + void OnEndFrame(); + void BeginNewCommandBuffer(); + void BeginNewComputeCommandBuffer(); + void BeginBackbufferRenderPass(); + void EndRenderPass(); + void RenderUI(); + + CAULDRON_VK::Device* GetCauldronDevice() { return &m_device; } + VkRenderPass GetSwapChainRenderPass() { return m_swapChain.GetRenderPass(); } + + CAULDRON_VK::UploadHeap* GetUploadHeap() { return &m_uploadHeap; } + CAULDRON_VK::StaticBufferPool* GetVidMemBufferPool() { return &m_vidMemBufferPool; } + CAULDRON_VK::DynamicBufferRing* GetConstantBufferRing() { return &m_constantBufferRing; } + + // Find a better place to put this ... + EI_Resource* GetDepthBufferResource() { return m_depthBuffer.get(); } + EI_ResourceFormat GetDepthBufferFormat() { return VK_FORMAT_D32_SFLOAT; } + EI_Resource* GetColorBufferResource() { return m_colorBuffer.get(); } + EI_ResourceFormat GetColorBufferFormat() { return VK_FORMAT_R8G8B8A8_SRGB; } + EI_Resource* GetShadowBufferResource() { return m_shadowBuffer.get(); } + EI_ResourceFormat GetShadowBufferFormat() { return GetDepthBufferFormat(); } + EI_Resource* GetDefaultWhiteTexture() { return m_DefaultWhiteTexture.get(); } + EI_BindSet* GetSamplerBindSet() { return m_pSamplerBindSet.get(); } + + // for the client code to set timestamps + void GetTimeStamp(char * name); + int GetNumTimeStamps() { return (int)m_sortedTimeStamps.size(); } + const char* GetTimeStampName(const int i) { return m_sortedTimeStamps[i].m_label.c_str(); } + int GetTimeStampValue(const int i) { return (int)m_sortedTimeStamps[i].m_microseconds; } + void DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets); + float GetAverageGpuTime() const { return m_averageGpuTime; } + + // only to call by implementation internals + VkDevice GetVulkanDevice() { return m_device.GetDevice(); } + CAULDRON_VK::ResourceViewHeaps* GetResourceViewHeaps() { return &m_resourceViewHeaps; } + void EndAndSubmitCommandBuffer(); +private: + VkRenderPass CreateRenderPass(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams); + + void EndAndSubmitCommandBufferWithFences(); + CAULDRON_VK::Device m_device; + CAULDRON_VK::SwapChain m_swapChain; + int m_currentImageIndex; + + // We need to be able to get access to the depth buffer from within the demo + // so store as an agnostic resource. We will also store a color target for all our sample's works + std::unique_ptr m_depthBuffer; + std::unique_ptr m_colorBuffer; + std::unique_ptr m_shadowBuffer; + + // Default resource to use when a resource is missing + std::unique_ptr m_DefaultWhiteTexture; + + std::unique_ptr m_pEndFrameResolveBindLayout = nullptr; + std::unique_ptr m_pEndFrameResolveBindSet = nullptr; + std::unique_ptr m_pSamplerBindSet = nullptr; + std::unique_ptr m_pEndFrameResolvePSO = nullptr; + std::unique_ptr m_pFullscreenIndexBuffer; + + int m_width; + int m_height; + bool m_vSync = false; + + bool m_recording = false; + + CAULDRON_VK::ToneMapping m_toneMapping; + + // vulkan specific imgui stuff + CAULDRON_VK::ImGUI m_ImGUI; + + // resource allocators + CAULDRON_VK::ResourceViewHeaps m_resourceViewHeaps; + CAULDRON_VK::UploadHeap m_uploadHeap; + CAULDRON_VK::StaticBufferPool m_vidMemBufferPool; + CAULDRON_VK::StaticBufferPool m_sysMemBufferPool; + CAULDRON_VK::DynamicBufferRing m_constantBufferRing; // "dynamic" uniform buffers + CAULDRON_VK::CommandListRing m_commandListRing; + + CAULDRON_VK::GPUTimestamps m_gpuTimer; + std::vector m_timeStamps; + std::vector m_sortedTimeStamps; + float m_averageGpuTime; + + EI_CommandContext m_currentCommandBuffer; + + // async compute + CAULDRON_VK::CommandListRing m_computeCommandListRing; + EI_CommandContext m_currentComputeCommandBuffer; + VkFence m_computeDoneFence = VK_NULL_HANDLE; + VkFence m_lastFrameGraphicsCommandBufferFence = VK_NULL_HANDLE; + + std::unique_ptr m_LinearWrapSampler; +}; + +struct VulkanBuffer; + +class EI_Resource +{ +public: + // need this for automatic destruction + EI_Resource(); + ~EI_Resource(); + + int GetHeight() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetHeight() : 0; } + int GetWidth() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetWidth() : 0; } + + EI_ResourceType m_ResourceType = EI_ResourceType::Undefined; + + union + { + VulkanBuffer* m_pBuffer; + CAULDRON_VK::Texture* m_pTexture; + VkSampler* m_pSampler; + }; + + VkImageView srv = VK_NULL_HANDLE; + VkImageView rtv = VK_NULL_HANDLE; // This can be both RTV/DSV on Vulkan +private: +}; + +struct EI_BindLayout +{ + ~EI_BindLayout(); + + EI_LayoutDescription description; + std::vector layoutBindings; + VkDescriptorSetLayout m_descriptorSetLayout = VK_NULL_HANDLE; +}; + +const static int MaxRenderAttachments = 5; +struct EI_RenderTargetSet +{ + ~EI_RenderTargetSet(); + void SetResources(const EI_Resource** pResourcesArray); + + VkRenderPass m_RenderPass = VK_NULL_HANDLE; + VkFramebuffer m_FrameBuffer = VK_NULL_HANDLE; + VkClearValue m_ClearValues[MaxRenderAttachments]; + uint32_t m_NumResources = 0; +}; + +class EI_PSO +{ +public: + ~EI_PSO(); + + VkPipeline m_pipeline = VK_NULL_HANDLE; + VkPipelineLayout m_pipelineLayout = VK_NULL_HANDLE; + EI_BindPoint m_bp; +}; + +EI_Device * GetDevice(); + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/org_CMakeLists_org.txt b/Gems/AtomTressFX/External/Code/src/org_CMakeLists_org.txt new file mode 100644 index 0000000000..f7d8130bc4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/org_CMakeLists_org.txt @@ -0,0 +1,78 @@ +project (TressFX_${GFX_API}) + +add_subdirectory(Math) +add_subdirectory(TressFX) + +if(GFX_API STREQUAL DX12) + add_compile_definitions(TRESSFX_DX12) + add_subdirectory(DX12) +elseif(GFX_API STREQUAL VK) + add_compile_definitions(TRESSFX_VK) + find_package(Vulkan REQUIRED) + add_subdirectory(VK) +else() + message(STATUS "----------------------------------------------------------------------------------------") + message(STATUS "") + message(STATUS "** Almost there!!") + message(STATUS "") + message(STATUS " This framework supports DX12 or VULKAN, you need to invoke cmake in one of these ways:") + message(STATUS "") + message(STATUS " Examples:") + message(STATUS " cmake -DGFX_API=DX12") + message(STATUS " cmake -DGFX_API=VK") + message(STATUS "") + message(STATUS "----------------------------------------------------------------------------------------") + message(FATAL_ERROR "") +endif() + +set(common_sources + EngineInterface.h + SceneGLTFImpl.cpp + SceneGLTFImpl.h + TressFXSample.cpp + TressFXSample.h + Simulation.cpp + Simulation.h + HairStrands.cpp + HairStrands.h + SDF.cpp + SDF.h) + + + +set(shaders_sources + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/FullScreenRender.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXPPLL.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXLighting.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXRendering.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXSDFCollision.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXShadow.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXShortCut.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXSimulation.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXStrands.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXBoneSkinning.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXMarchingCubes.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXUtilities.hlsl) + +source_group("Math Sources" FILES ${math_sources}) +source_group("TressFX Sources" FILES ${tressfx_sources}) +source_group("Common Sources" FILES ${common_sources}) +source_group("${GFX_API} Sources" FILES ${sources}) +source_group("Shader Sources" FILES ${shaders_sources}) + +add_executable(${PROJECT_NAME} WIN32 ${sources} ${common_sources} ${tressfx_sources} ${math_sources} ${shaders_sources}) + +if(GFX_API STREQUAL DX12) + target_link_libraries (${PROJECT_NAME} LINK_PUBLIC Framework_${GFX_API} ImGUI amd_ags DXC d3dcompiler D3D12) +elseif(GFX_API STREQUAL VK) + target_link_libraries (${PROJECT_NAME} LINK_PUBLIC Framework_${GFX_API} ImGUI Vulkan::Vulkan) +endif() + +set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin") + +if(GFX_API STREQUAL DX12) + copyCommand("${shaders_sources}" ${CMAKE_HOME_DIRECTORY}/bin/ShaderLibDX) +elseif(GFX_API STREQUAL VK) + copyCommand("${shaders_sources}" ${CMAKE_HOME_DIRECTORY}/bin/ShaderLibVK) +endif() + diff --git a/Gems/AtomTressFX/External/Tools/Maya/TressFX_Exporter.py b/Gems/AtomTressFX/External/Tools/Maya/TressFX_Exporter.py new file mode 100644 index 0000000000..cffabcda47 --- /dev/null +++ b/Gems/AtomTressFX/External/Tools/Maya/TressFX_Exporter.py @@ -0,0 +1,2084 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +#------------------------------------------------------------------------------------- +# +# Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +#------------------------------------------------------------------------------------- +# +# 1. Copy tressFX_Exporter.py into Maya plug-in path. The easy place would be C:\Users\YOUR_USER_NAME\Documents\maya\plug-ins\ +# 2. If you want to install TressFX menu, go to Windows->Plug-in Managers menu and check Loaded and Auto load for TressFX_Exporter.py. +# 3. Then TressFX menu would appear in the top menu bar. +# 4. Within it, there should be export menu item. Click it and it will bring up TressFX Exporter window. +# 5. Alternatively, without loading TressFX plugin in Plug-in Managers, you can simply run the following python script commands in Script Editor +# and bring up TressFX Exporter window. +# +# import TressFX_Exporter +# reload(TressFX_Exporter) +# TressFX_Exporter.UI() +# +# Or, it's easy to run this method for loading from a script, from python (python tab of script editor) +# +# Following is a script to unload and load this plugin. It may be useful to reload the plugin quickly during the development. +# import maya.cmds as cmds +# cmds.unloadPlugin('TressFX_Exporter.py') +# cmds.loadPlugin('TressFX_Exporter.py') + +from functools import partial +import maya.cmds as cmds +import maya.OpenMaya as OpenMaya +import maya.OpenMayaAnim as OpenMayaAnim +import maya.OpenMayaMPx as OpenMayaMPx +import maya.mel as mel +import pymel.core as pymel +import ctypes +import random +import sys +import re +from maya.OpenMaya import MIntArray, MDagPathArray + + +selected_mesh_shape_name = '' +joint_sel_list_names = [] +singleItemGroup_Select = '' +customRootGroup_Select = '' +jointSubsetGroup_Select = '' +hairTab_Select_Joints = '' +hairTab_Custom_Root = '' +defaultJointRootIndex = 0 +defaultJointRootWeight = 0.0 +customUVRange_Select = '' +customUVRange_Values = '' + +tressfx_exporter_version = '4.1.23' + +# Don't change the following maximum joints per vertex value. It must match the one in TressFX loader and simulation +TRESSFX_MAX_INFLUENTIAL_BONE_COUNT = 4 + + +import TressFX_Exporter + +bReload = True +if(bReload): + reload(TressFX_Exporter) + +def InstallShelf(): + #---------------------- + # Add a shelf + #---------------------- + shelfName = "TressFX" + + layout = mel.eval('$tmp=$gShelfTopLevel') + + if cmds.shelfLayout(shelfName, query=True, exists=True): # If the shelf exists, delete buttons and delete shelf + for buttons in cmds.shelfLayout(shelfName, query=True, childArray=True) or []: + cmds.deleteUI(buttons) + + cmds.setParent(layout + '|' + shelfName) + else: # If the shelf doesn't exist, create a new one + cmds.setParent(layout) + cmds.shelfLayout(shelfName) + + # create a button + cmds.shelfButton( label='Export', + command='import TressFX_Exporter\nTressFX_Exporter.UI()', + #command='TressFX_Exporter.UI()', + sourceType='python', + annotation='Launch TressFX exporter', + #image='', # This empty icon image will cause a warning message like 'Pixmap file not found, using default.'. + style='textOnly') + + +def initializePlugin(mobject): + mplugin = OpenMayaMPx.MFnPlugin(mobject, "TressFX", tressfx_exporter_version, "Any") + + # install menu + gMainWindow = mel.eval('$temp1=$gMainWindow') + + if cmds.menu('TressFX', exists=True): + cmds.deleteUI('TressFX') + + tressfx_top_menu = cmds.menu('TressFX', parent=gMainWindow, tearOff=False, label='TressFX') + cmds.menuItem(parent = tressfx_top_menu, + label='Export Hair/Fur', + command = 'import TressFX_Exporter\nTressFX_Exporter.UI()') + cmds.menuItem(parent = tressfx_top_menu, + label='Export Collision Mesh', + command = 'import TressFX_Exporter\nTressFX_Exporter.CollisionUI()') + # install shelf + #InstallShelf() + +def uninitializePlugin(mobject): + mplugin = OpenMayaMPx.MFnPlugin(mobject) + try: + # Close TressFX plugin windows if it is already open. + if cmds.window("TressFXExporterUI", exists = True): + cmds.deleteUI("TressFXExporterUI") + + if cmds.window("TressFXCollisionMeshUI", exists = True): + cmds.deleteUI("TressFXCollisionMeshUI") + + # uninstall menu + if cmds.menu('TressFX', exists=True): + cmds.deleteUI('TressFX') + + except: + sys.stderr.write("Failed to uninitialize TressFX plugin") + raise + + return + +# Helper class to show progress bar for lengthy process +class ProgressBar: + def __init__ (self,title,steps): + self.window = pymel.window(title, sizeable=False) + pymel.columnLayout() + + self.progressControls = [] + self.progressbar = pymel.progressBar(maxValue=steps, width=300) + pymel.showWindow( self.window ) + self.progressbar.step(0) + + def Kill(self): + pymel.deleteUI(self.window) + + def Increment(self): + self.progressbar.step(1) + +def GetAllDAGObjects(mFnType, maxDepth = 1): + #dagIterator = OpenMaya.MItDag( OpenMaya.MItDag.kBreadthFirst, OpenMaya.MFn.kJoint ) #could use kBreadthFirst to find top of each 'type' (curve, bones, xgen) + dagIterator = OpenMaya.MItDag( OpenMaya.MItDag.kBreadthFirst, mFnType ) #could use kBreadthFirst to find top of each 'type' (curve, bones, xgen) + + #todo: Notes for making it easier to use Xgen directly + # kJoint + #kNurbsCurve (parent is kTransform) + #kTransform for mesh (like sphere, and shpae is kPluginShape but not helpful since xgGuides are kTransform and kPluginShape too!) + #and xgen collection is kPluginTransformNode (depth1), description is kTransform again + #and the other sub items are both kTransform + # Will need to find better way to identify xgen, mesh/skinclusters, for joints + #perhaps joints have connection?? + + # This reference to the MFnDagNode function set will be needed + # to obtain information about the DAG objects. + dagNodeFn = OpenMaya.MFnDagNode() + + listOfDagNodes = [] + # Traverse the scene. + while( not dagIterator.isDone() ): + + # Obtain the current item. + dagObject = dagIterator.currentItem() + + # Extract the depth of the DAG object. + depth = dagIterator.depth() + + if depth > maxDepth: + return listOfDagNodes + else: + listOfDagNodes.append(dagObject) + + # Make our MFnDagNode function set operate on the current DAG object. + dagNodeFn.setObject( dagObject ) + + # Extract the DAG object's name. + name = dagNodeFn.name() + + #print name + ' (' + dagObject.apiTypeStr() + ') depth: ' + str( depth ) + + # Iterate to the next item. + dagIterator.next() + + return listOfDagNodes + +def GetNurbCurvesByGroup(): + return GetAllDAGObjects(OpenMaya.MFn.kNurbsCurve, 4) + +def GetAvailableRigs(): + return GetAllDAGObjects(OpenMaya.MFn.kJoint, 1) + +def GetSkinClustersByRig(): + return + +#currently undefined. Maya doesn't seem to have a python api for getting to the +#Utilities (tab) of Xgen, or rendering. both are needed to render out guides, +# then convert guides to nurbs curves. +#def GetXGenGroups(): +# return + +def GetSkinClusterInfluenceObjectsNames(): + #------------------------- + # Get skin cluster object + #------------------------- + if selected_mesh_shape_name == '': + cmds.warning("TressFX: Cannot retrieve skin cluster, base mesh must be set.\n") + return + + skinClusterName = '' + skinClusters = cmds.listHistory(selected_mesh_shape_name) + skinClusters = cmds.ls(skinClusters, type="skinCluster") + if skinClusters: + skinClusterName = skinClusters[0] + else: + cmds.warning('TressFX: No skin cluster found on '+ selected_mesh_shape_name) + return + + # get the MFnSkinCluster using skinClusterName + selList = OpenMaya.MSelectionList() + selList.add(skinClusterName) + skinClusterNode = OpenMaya.MObject() + selList.getDependNode(0, skinClusterNode) + skinFn = OpenMayaAnim.MFnSkinCluster(skinClusterNode) + + dagPaths = MDagPathArray() + skinFn.influenceObjects(dagPaths) + skInfluenceNames = [] + + # get joint names + for i in range(dagPaths.length()): + influenceName = dagPaths[i].partialPathName() + skInfluenceNames.append(influenceName) #we want the partial path, even if it includes NS here (for comparision with user selected list) + + return skInfluenceNames + + +def UI(): + # prevents multiple windows + if cmds.window("TressFXExporterUI", exists = True): + cmds.deleteUI("TressFXExporterUI") + global joint_sel_list_names + joint_sel_list_names = [] #clear joint list, can't guarantee clear() method will be present (need python 3.3 minimum) + + window_width = 550 + window_height = 525 + + windowTitle = 'TressFX Hair/Fur' + window = cmds.window("TressFXExporterUI", title = windowTitle, w=window_width, h = window_height, mnb=False, sizeable=False) + + mainLayout = cmds.columnLayout(columnAlign = 'center') # In case you want to see the area of the main layout, use backgroundColor = (1, 1, 1) as an argument + #cmds.separator(h=10) + mainTabs = cmds.tabLayout(imw = 5, imh = 5) + + #cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,10),(2,window_width-10) ]) + #cmds.separator(style='none', width=10) + + hairTab_SelectTarget = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,300),(2,10),(3,170) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = mainTabs ) + hairTab_SetOptions = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,300),(2,10),(3,170) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = mainTabs ) + hairTab_Export = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,300),(2,10),(3,170) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = mainTabs ) + cmds.tabLayout( mainTabs, edit=True, tabLabel=((hairTab_SelectTarget, 'Select Hair/Mesh/Rig'), (hairTab_SetOptions, 'Choose Options'), (hairTab_Export, 'Export Files')) ) + +#Selection tab items - selecting the rig, xgen, curves, skincluster/meshes + cmds.setParent(hairTab_SelectTarget) + global singleItemGroup_Select + singleItemGroup_Select = cmds.columnLayout(columnAlign = 'center', parent = hairTab_SelectTarget) + + cmds.separator(style='none',h=50) + cmds.button(label="Set the base mesh", w=200, h=25, command=SetBaseMesh) + cmds.separator(style='none',h=20) + cmds.textField("MeshNameLabel", w=200, editable=False) + + cmds.separator(style='none',h=10) + global customRootGroup_Select + customRootGroup_Select = cmds.columnLayout(columnAlign = 'center', parent = singleItemGroup_Select) + cmds.checkBox("UseCustomJointRootLabel", label='Use Custom Joint Root', align='left', enable=False, changeCommand=UseCustomJointRoot, parent = customRootGroup_Select ) + + cmds.separator(style='none',h=10) #renormalize so weights add up to one + cmds.checkBox("RenormalizeFinalPairs", label='Re-Normalize Final Weights (sumMaxInfluences=1)', align='left', enable=False) + + cmds.separator(style='none',h=10) + global jointSubsetGroup_Select + jointSubsetGroup_Select = cmds.columnLayout(columnAlign = 'center', parent = singleItemGroup_Select) + cmds.checkBox("UseJointSubsetLabel", label='Use Joints Subset Only', align='left', enable=False, changeCommand=UseJointSubset, parent = jointSubsetGroup_Select ) + + cmds.separator(style='none',h=10) + + +#Options tab items - vertices per strand, sampling, random, unreal/directx/special formats + #cmds.intField("numVerticesPerStrand", w=30, minValue=4, maxValue=64, value=16 ) + cmds.setParent(hairTab_SetOptions) + + cmds.separator(style='none',h=50) + cmds.separator(style='none',h=50) + cmds.separator(style='none',h=50) + + cmds.text(label='Number of vertices per strand:', align='left', parent = hairTab_SetOptions) + cmds.separator(style='none', width=10) + + cmds.optionMenu("numberOfStrandsOptionMenu", label='') + cmds.menuItem(label='4') + cmds.menuItem(label='8') + cmds.menuItem(label='16') + cmds.menuItem(label='32') + cmds.menuItem(label='64') + + cmds.text(label='Minimum curve length:', align='left') + cmds.separator(style='none',h=30) + cmds.floatField("minCurveLength", minValue=0, value=0, w=70) + + cmds.text(label='Sample every N curves:', align='left') + cmds.separator(style='none', width=10) + cmds.optionMenu("samplingOptionMenu", label='') + cmds.menuItem(label='1') + cmds.menuItem(label='2') + cmds.menuItem(label='4') + cmds.menuItem(label='8') + cmds.menuItem(label='16') + cmds.menuItem(label='32') + cmds.menuItem(label='64') + cmds.menuItem(label='128') + + cmds.text(label='Sample start offset[0-32]:', align='left') + cmds.separator(style='none',h=30) + cmds.intField("curveOffset", w=70, minValue=0, maxValue=32, value=0 ) + + cmds.text(label='Scale Scene:', align='left') + cmds.separator(style='none', width=10) + cmds.optionMenu('scalingOptionMenu', label='') #TressFX does not know about the auto-scaling an engine might do (such as FBX cm->m) but you can manually set scaling here to adjust for what the engine will want + cmds.menuItem(label='0.001') + cmds.menuItem(label='0.01') + cmds.menuItem(label='0.1') + cmds.menuItem(label='1.0') + cmds.menuItem(label='10.0') + cmds.menuItem(label='100.0') + cmds.menuItem(label='1000.0') + cmds.optionMenu('scalingOptionMenu', edit=True, value='1.0') + + singleItemGroup_Options = cmds.columnLayout(columnAlign = 'center', parent = hairTab_SetOptions) + + cmds.separator(style='none',h=50) + cmds.checkBox("bothEndsImmovable", label='Both ends immovable') + cmds.separator (style='none', width=10) + cmds.checkBox("InvertZ", label='Invert Z-axis of Hairs', value = False) + cmds.checkBox("randomStrandCheckBox", label='Randomize strands for LOD', value = False) + + + cmds.separator(style='none',h=30) + cmds.text(label='Unreal 4.x Options', align='center') + cmds.checkBox("useZUp", label='Make Z-Up Direction', value = True) #if user requests z-up, and maya not using Z (but Y as up), will swap y and z coordinates of point + + cmds.separator(style='none',h=30) + cmds.text(label='DirectX 11/12 Options', align='center') + cmds.checkBox("InvertYForUVs", label='Invert Y-axis of UV coordinates', value = True, changeCommand=AllowCustomUV ) + global customUVRange_Select + customUVRange_Select = cmds.columnLayout(columnAlign = 'center', parent = singleItemGroup_Options) + cmds.checkBox("useNonUniformUVRange", label='Using Non-Uniform UV Range', value = False, align='left', enable=True, changeCommand=UseCustomUV, parent = customUVRange_Select ) + cmds.separator(style='none',h=10) + + +#Export Specific Items + cmds.setParent(hairTab_Export) + singleItemGroup_Export = cmds.columnLayout(columnAlign = 'center', parent = hairTab_Export) + + cmds.separator(style='none',h=50) + cmds.text(label='Export (TressFX 4.x)', align='center') + cmds.checkBox("exportHairCheckBox", label='Export hair data (*.tfx)', value = True) + cmds.checkBox("exportBoneCheckBox", label='Export bone data (*.tfxbone)', value = True) + + cmds.separator(style='none',h=30) + + cmds.text(label='ErrorMode (TressFX 4.x)', align='center') + cmds.checkBox("ignoreUVErrorsCheckBox", label='ignore TFX UVcoord Errors', value = True) + cmds.checkBox("removeNamespace", label='remove Namespace from bones', value = True) #key when importing one .ma/.mb into another + + cmds.separator(style='none',h=30) + + cmds.text(label='Export (TressFX 3.0, deprecated)', align='center') + cmds.checkBox("exportSkinCheckBox", label='Export skin data (*.tfxskin)', value = False) + + cmds.separator(style='none',h=30) + cmds.button(label="Export!", w=300, h=50, command=DoExport) + + #cmds.separator(style='none',h=15) + #cmds.button(label="Export collision mesh", w=170, h=30, command=DoExportCollisionMesh) + + #cmds.button(label="Goto Bind Pose", w=220, h=30, command=GotoBindPose) + + cmds.separator(h=20) + + cmds.setParent(mainLayout) + version_text = 'v' + tressfx_exporter_version + cmds.text(label=version_text, width=window_width-25, align='right') + + cmds.separator(style='none',h=20) + + + global selected_mesh_shape_name + selected_mesh_shape_name = '' + + cmds.showWindow(window) + + # After showWindow, resize the window to enforce its size. This is a workaround of Maya's bug. + cmds.window(window, edit=True, widthHeight=(window_width, window_height)) + +def CollisionUI(): + # prevents multiple windows + if cmds.window("TressFXCollisionMeshUI", exists = True): + cmds.deleteUI("TressFXExporterUI") + + window_width = 320 + window_height = 300 + + windowTitle = 'TressFX Collision' + window = cmds.window("TressFXCollisionMeshUI", title = windowTitle, w=window_width, h = window_height, mnb=False, sizeable=False) + + mainLayout = cmds.columnLayout(columnAlign = 'center') # In case you want to see the area of the main layout, use backgroundColor = (1, 1, 1) as an argument + + cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,10),(2,window_width-20), (3, 10) ], rowSpacing = (1,10), parent=mainLayout) + + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.button(label="Set the collision mesh", w=120, h=25, command=partial(SetBaseMesh, True)) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.textField("MeshNameLabel", w=220, editable=False) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10, height=20) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + subwidth = (300 - 20)/4 + cmds.rowColumnLayout( numberOfColumns=4, columnWidth=[ (1,10),(2, subwidth), (3, subwidth), (4, 10) ], rowSpacing = (1,10), parent=mainLayout) + cmds.separator(style='none', width=10) + cmds.text(label='Scale Scene:', align='left') + cmds.optionMenu('scalingCollisionOptionMenu', label='') #TressFX does not know about the auto-scaling an engine might do (such as FBX cm->m) but you can manually set scaling here to adjust for what the engine will want + cmds.menuItem(label='0.001') + cmds.menuItem(label='0.01') + cmds.menuItem(label='0.1') + cmds.menuItem(label='1.0') + cmds.menuItem(label='10.0') + cmds.menuItem(label='100.0') + cmds.menuItem(label='1000.0') + cmds.optionMenu('scalingCollisionOptionMenu', edit=True, value='1.0') + cmds.separator(style='none', width=10) + + #cmds.setParent('..') + #cmds.rowColumnLayout( numberOfColumns=1, columnWidth=[ (1,window_width-20) ], rowSpacing = (1,10), parent=mainLayout) + cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,10),(2,window_width-20), (3, 10) ], rowSpacing = (1,10), parent=mainLayout) + + cmds.separator(style='none', width=10, height=20) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.text(label='ErrorMode (TressFX 4.x)', align='center') + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + cmds.checkBox("removeNamespaceCM", label='remove Namespace from bones', value = True) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + cmds.checkBox("RenormalizeFinalPairs", label='Re-Normalize Final Weights (sumMaxInfluences=1)', align='left', enable=True) + cmds.separator(style='none', width=10) + #cmds.checkBox("noDupBoneWts", label='test:no dup nonzero bone wts per vtx', value = False) #error checking. todo: may want this, or may not need it + + cmds.separator(style='none', width=10) + cmds.button(label="Export", w=170, h=30, command=DoExportCollisionMesh) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + version_text = 'v' + tressfx_exporter_version + cmds.text(label=version_text, width=window_width-25, align='right', parent=mainLayout) + + global selected_mesh_shape_name + selected_mesh_shape_name = '' + + cmds.showWindow(window) + + # After showWindow, resize the window to enforce its size. This is a workaround of a Maya bug. + cmds.window(window, edit=True, widthHeight=(window_width, window_height)) + +def AllowCustomUV(*args): + bEnableCustomUV = cmds.checkBox("InvertYForUVs", q = True, v = True) + if (bEnableCustomUV): + cmds.checkBox("useNonUniformUVRange", edit = True, enable = True) + else: + cmds.checkBox("useNonUniformUVRange", edit = True, enable = False) + return + +def UseCustomUV(*args): + #if using DirectX invert-y option, means we are inverting the v of uv coordinates, and allow the user the option of specifying + #a custom uv range other than 0-1. This means that they have an actual non-uniform range. We do not check to see if that is true or not. + #mainly because I couldn't find a way for Maya to tell me that info + bUseCustomUV = cmds.checkBox("useNonUniformUVRange", q = True, v = True) + + global customUVRange_Values + if (bUseCustomUV): + if cmds.rowColumnLayout(customUVRange_Values, exists = True): + cmds.deleteUI(customUVRange_Values, layout=True) + + customUVRange_Values = cmds.rowColumnLayout( numberOfColumns=4, columnWidth=[ (1,50),(2,80),(3,50),(4,80) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center'),(4,'center') ], parent = customUVRange_Select ) + cmds.setParent(customUVRange_Values) + cmds.text( "U min:", w=20) + cmds.floatField( "uMin", w=50, edit=False, pre=2, value = 0.0) + cmds.text( "U max:", w=20) + cmds.floatField( "uMax", w=50, edit=False, pre=2, value = 1.0) + + cmds.text( "V min:", w=20) + cmds.floatField( "vMin", w=50, edit=False, pre=2, value = 0.0) + cmds.text( "V max:", w=20) + cmds.floatField( "vMax", w=50, edit=False, pre=2, value = 1.0) + else: + if cmds.rowColumnLayout(customUVRange_Values, exists = True): + cmds.deleteUI(customUVRange_Values, layout=True) + + return + +def CreateCustomRootUI(jointNameRoot): + global defaultJointRootIndex + global defaultJointRootWeight + global hairTab_Custom_Root + + hairTab_Custom_Root = cmds.columnLayout(columnAlign = 'center', parent = customRootGroup_Select ) + hairTab_Custom_Root1 = cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,100),(2,100) ], columnAlign = [ (1,'center'),(2,'center') ], parent = hairTab_Custom_Root ) + cmds.setParent(hairTab_Custom_Root1) + cmds.button("Set Joint", w=50, h=25, enable=True, visible=True, command=SetRootJoint) + cmds.button("Clear Joint", w=50, h=25, enable=True, visible=True, command=ClearRootJoint) + + hairTab_Custom_Root2 = cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,100),(2,100) ], columnAlign = [ (1,'center'),(2,'center') ], parent = hairTab_Custom_Root ) + cmds.setParent(hairTab_Custom_Root2) + cmds.text( "New Root:", w=50) + cmds.text( "JointRootName", w=50, label=jointNameRoot) + + hairTab_Custom_Root3 = cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,100),(2,100) ], columnAlign = [ (1,'center'),(2,'center') ], parent = hairTab_Custom_Root ) + cmds.setParent(hairTab_Custom_Root2) + cmds.text( "Weight (0-1)", w=50) + cmds.floatField( "JointRootWeightFloat", w=50, edit=False, minValue = 0.0, maxValue = 1.0, pre=2, value = defaultJointRootWeight, changeCommand=SetRootWeight) + return + +def DeleteCustomRootUI(): + global hairTab_Custom_Root + #destroy the panel/float input with the root joint selection and weight (includes all children) + if cmds.columnLayout(hairTab_Custom_Root, exists = True): + cmds.deleteUI(hairTab_Custom_Root, layout=True) + return + +def UseCustomJointRoot(*args): + #todo: automatically add the custom root to the joint subset (only if a joint subset is being used) + #create UI for setting a custom root (joint) and its weight (only used when hit a 0-weight case) + bUseCustomRoot = cmds.checkBox("UseCustomJointRootLabel", q = True, v = True) + global defaultJointRootIndex + global defaultJointRootWeight + + if (bUseCustomRoot): + rootName = GetJointNameFromListByIndex(0) + CreateCustomRootUI(rootName) + else: + DeleteCustomRootUI() + defaultJointRootIndex = 0 + defaultJointRootWeight = 0.0 + return + +def GetJointNameFromListByIndex(index): + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Could not retrieve joint name by index. Base mesh has no skin cluster influencers (check to see if skin is bound)") + return "none" + if (index < 0) or (index >= len(skinClusterJointList)): + cmds.warning("TressFX: Could not retrieve joint name by index. Index out of bounds.") + return "none" + return skinClusterJointList[index] + + +def GetJointIndexFromList(jointName): + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + jointIndex = 0 + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Could not retrieve joint index (ret joint index=0). Base mesh has no skin cluster influencers (check to see if skin is bound)") + + for i in range(len(skinClusterJointList)): + if (jointName == skinClusterJointList[i]): + jointIndex = i + return jointIndex + +def SetRootWeight(value): + global defaultJointRootWeight + defaultJointRootWeight = value #the value is already constrained to be between 0 and 1, when the user hits or eventually hits another button, etc to force a return, we get notified. + return + +def SetRootJoint(*args): + #------------------------------ + # Set joint to be used as the default 'root joint' used when there are 0 weights during influence (for hair strands) calculations + #------------------------------- + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To select custom root joint, base mesh must be set.\n") + return + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + if sel_list.length() > 1: + cmds.warning("TressFX: Can only select one joint to be *root*") + return + + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Base mesh has no skin cluster influencers (check to see if skin is bound)") + return + + dagPath = OpenMaya.MDagPath() + sel_list.getDagPath(0, dagPath) #index 0, first item in the selection list + jointFn = OpenMaya.MFnDagNode(dagPath) + joint_name = jointFn.name() + + if dagPath.apiType() != OpenMaya.MFn.kJoint: #must be a joint, nothing else + cmds.warning('TressFX: Not a joint, root must be a joint: objectname = ' + joint_name) + return + elif not (joint_name in skinClusterJointList): + cmds.warning('TressFX: Joint not in influencer list for skin cluster/base mesh: joint = ' + joint_name) + return + else: + global defaultJointRootIndex + global defaultJointRootWeight + DeleteCustomRootUI() + defaultJointRootIndex = 0 + defaultJointRootWeight = 0.0 + + defaultJointRootIndex = GetJointIndexFromList(joint_name) + CreateCustomRootUI(joint_name) + cmds.showWindow("TressFXExporterUI") + return + +def ClearRootJoint(*args): + global defaultJointRootIndex + global defaultJointRootWeight + + DeleteCustomRootUI() + defaultJointRootIndex = 0 + defaultJointRootWeight = 0.0 + + defaultName = GetJointNameFromListByIndex(defaultJointRootIndex) + CreateCustomRootUI(defaultName) + cmds.showWindow("TressFXExporterUI") + return + +def CreateJointSubsetUI(): + #adds ability to only look at (allow) a subset of the joints for the hair influencers + # (good when you have a lot of joints that are 0, like facial weights, to prevent situation with a zero weight/hair that will not track) + global hairTab_Select_Joints + + hairTab_Select_Joints = cmds.columnLayout(columnAlign = 'center', parent = jointSubsetGroup_Select ) + hairTab_Select_Joints1 = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,100),(2,100),(3,100) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = hairTab_Select_Joints ) + cmds.setParent(hairTab_Select_Joints1) + cmds.button("Add joints", w=50, h=25, enable=True, visible=True, command=AddJointSet) + cmds.button("Delete joints", w=50, h=25, enable=True, visible=True, command=DeleteJointSet) + cmds.button("Clear All joints", w=50, h=25, enable=True, visible=True, command=ClearJointSet) + + pane_list = cmds.paneLayout("JointNamePane", parent=hairTab_Select_Joints) + cmds.textScrollList( "JointNameScrollList", w=300, numberOfRows=8, e=False, allowMultiSelection=True, parent = pane_list, append=joint_sel_list_names) + + return + +def DeleteJointSubsetUI(): + #delete the UI, but not responsible for clearing the joints selected to joint_sel_list_names + global hairTab_Select_Joints + #destroy the panel/float input with the root subset selection controls (includes all children) + if cmds.columnLayout(hairTab_Select_Joints, exists = True): + cmds.deleteUI(hairTab_Select_Joints, layout=True) + return + +def UseJointSubset(*args): + bUseJointSubset = cmds.checkBox("UseJointSubsetLabel", q = True, v = True) + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To select custom joint subset, base mesh must be set.\n") + bUseJointSubset = False + cmds.checkBox("UseJointSubsetLabel", editable=True, v=False) + return + + if (bUseJointSubset): + CreateJointSubsetUI() + cmds.warning("TressFX: Using a subset can result in loss of hair tracking accuracy.\n Use with caution and only on bones that should never have affect on that skin subsection. \n Useful for masking out dead weights and non-skin joints like weaponry.") + else: + #destroy the panels with the joints/controls and clear the joint set list + DeleteJointSubsetUI() + return + +def ClearJointSet(*args): + global joint_sel_list_names + joint_sel_list_names = [] + DeleteJointSubsetUI() + CreateJointSubsetUI() + return + +def DeleteJointSet(*args): + global joint_sel_list_names + + if cmds.columnLayout(hairTab_Select_Joints, exists = True): + numSelectedItems = cmds.textScrollList( "JointNameScrollList", query=True, nsi=True) + if numSelectedItems > 0: + selectedItems = cmds.textScrollList( "JointNameScrollList", query=True, si=True) + else: + print('TressFX: Nothing deleted: no joints selected from joint subset list') + return + for item in selectedItems: + if item in joint_sel_list_names: + joint_sel_list_names.remove(item) + DeleteJointSubsetUI() + CreateJointSubsetUI() + + return + + +def AddJointSet(*args): + #------------------------------ + # Create a list of joints to be used in the mapping (and exclude those not in this list) + #------------------------------- + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To select joint subset, base mesh must be set.\n") + return + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Base mesh has no skin cluster influencers (check to see if skin is bound)") + return + + # Create iterator through list of selected object + selection_iter = OpenMaya.MItSelectionList(sel_list) + obj = OpenMaya.MObject() + + # Loop though iterator objects + global joint_sel_list_names + while not selection_iter.isDone(): + selection_iter.getDependNode(obj) + dagPath = OpenMaya.MDagPath.getAPathTo(obj) + #print dagPath.fullPathName() + jointFn = OpenMaya.MFnDagNode(dagPath) + joint_name = jointFn.name() + if not (joint_name in skinClusterJointList): + cmds.warning('TressFX: Joint not in influencer list for skin cluster/base mesh: joint = ' + joint_name) + elif joint_name in joint_sel_list_names: + cmds.warning('TressFX: Joint already in list: joint = ' + joint_name) #skip it but continue iterating + elif dagPath.apiType() != OpenMaya.MFn.kJoint: #must be a joint, nothing else + cmds.warning('TressFX: Not a joint, can only add joints to this list: objectname = ' + joint_name) #skip it but continue iterating + else: + joint_sel_list_names.append(joint_name) + selection_iter.next() + + DeleteJointSubsetUI() + CreateJointSubsetUI() + cmds.showWindow("TressFXExporterUI") + return + + +def GetIndicesSubsetInfluenceObjects(skinFn, dagPaths ): + #get the joints, but if we are limiting to a subset of joints use that, otherwise use full joint set attached to skincluster + # we also will check the subset and reject any bones that are not contained in dagPaths (which lists the bones for that skincluster) + boneSubsetIndices = [] + numberItems = 0 + if len(joint_sel_list_names) != 0: + jointList = joint_sel_list_names + numberItems = len(joint_sel_list_names) + else: + cmds.warning("TressFX: Joint Subset Activated, but no items in subset. Using full joints.") + return boneSubsetIndices + + for k in range(numberItems): + influenceName = jointList[k] + for i in range(dagPaths.length()): + if (influenceName == dagPaths[i].partialPathName() ): + boneSubsetIndices.append(skinFn.indexForInfluenceObject(dagPaths[i])) + + return boneSubsetIndices + +def GetInfluenceObjects(dagPaths ): + #get all the joints (influence objects)..currently TressFX 4.x needs all the bone names and indices exported, not just a subset + boneNames = [] + #do we need to remove the namespace if present? + bRemoveNS = cmds.checkBox("removeNamespace", q = True, v = True) + + numberItems = 0 + jointList = dagPaths + numberItems = jointList.length() + + # get joint names + for i in range(numberItems): + influenceName = jointList[i].partialPathName() + if bRemoveNS: + influenceNameList = re.split("[:]", influenceName) + if len(influenceNameList) != 1: #has a namespace prefix + boneNames.append(influenceNameList[-1]) + else: + boneNames.append(influenceNameList[0]) + else: + boneNames.append(influenceName) # Need to remove namespace? + + return boneNames + +def SetBaseMesh(bCollision = False, *args): + #------------------------------ + # Find the selected mesh shape + #------------------------------- + #collision also uses this, need to differentiate (currently col should not have same options available) + # i.e. doesn't hide/disable controls like the Hair side + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + + dagPath = OpenMaya.MDagPath() + sel_list.getDagPath(0, dagPath) + + if not dagPath.hasFn(OpenMaya.MFn.kMesh): #if the node along this path doesn't support kMesh, we reject it and let the user know + cmds.warning('TressFX: Selection not a kMesh') + #note: in this case, we are not resetting the base mesh or any controls from current values (empty or not) + return + + global selected_mesh_shape_name + + #is it already open and we are just changing base meshes? (Currently, export of hair only) + if (selected_mesh_shape_name != '') and not (bCollision == True): + #subcontrols may already be enabled, so reset them to defaults for this base mesh, or if the selected object isn't a mesh + cmds.checkBox("RenormalizeFinalPairs", edit=True, value=False) + cmds.checkBox("UseCustomJointRootLabel", edit=True, value =False) + cmds.checkBox("UseJointSubsetLabel", edit=True, value=False) + UseCustomJointRoot() + UseJointSubset() + + #proceed as normal to set the new mesh and get its name + cmds.textField("MeshNameLabel", edit=True, text='') + selected_mesh_shape_name = '' + dagPath.extendToShape() + meshFn = OpenMaya.MFnMesh(dagPath) + selected_mesh_shape_name = meshFn.name() + cmds.textField("MeshNameLabel", edit=True, text=meshFn.name()) + + #enable options + if not (bCollision == True): + cmds.checkBox("RenormalizeFinalPairs", edit=True, enable=True) + cmds.checkBox("UseCustomJointRootLabel", edit=True, enable=True) + cmds.checkBox("UseJointSubsetLabel", edit=True, enable=True) + + return + +def DoExport(*args): + # TODO: Set the time frame to the first one or go to the bind pose? + # first_frame = cmds.playbackOptions(minTime=True, query=True) + # cmds.currentTime(first_frame) + + bExportHairCheckBox = cmds.checkBox("exportHairCheckBox", q = True, v = True) + bExportSkinCheckBox = cmds.checkBox("exportSkinCheckBox", q = True, v = True) + bExportBoneCheckBox = cmds.checkBox("exportBoneCheckBox", q = True, v = True) + + #---------------------------------------- + # collect selected nurbs spline curves. + #---------------------------------------- + minCurveLength = cmds.floatField("minCurveLength",q = True, v = True) + curves = GetSelectedNurbsCurves(minCurveLength) + + if len(curves) == 0: + cmds.warning("TressFX: No nurbs curves were selected!") + return + else: + print("TressFX: %d curves were selected.\n" % len(curves)) + + #------------------------------- + # Find the selected mesh shape + #------------------------------- + meshShapedagPath = OpenMaya.MDagPath() + + if selected_mesh_shape_name == '': + meshShapedagPath = None + else: + allObject = cmds.ls(selected_mesh_shape_name) + cmds.select(allObject) # TODO: This selection makes hair curves unselected. This is not a problem but just inconvenient for users if they want to keep the curves selected. + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + meshShapedagPath = None + else: + sel_list.getDagPath(0, meshShapedagPath) + meshShapedagPath.extendToShape() # get mesh shape + + # if none of export checkboxes were selected, then exit. + if bExportHairCheckBox == 0 and bExportSkinCheckBox == 0 and bExportBoneCheckBox == 0: + cmds.warning("TressFX: Please select checkbox for exporting data") + return + + rootPositions = [] + + #------------------- + # Export a tfx file + #------------------- + if bExportHairCheckBox: + basicFilter = "*.tfx" + filepath = cmds.fileDialog2(fileFilter=basicFilter, dialogStyle=2, caption="Save a tfx binary file(*.tfx)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + bRandomize = cmds.checkBox("randomStrandCheckBox", q = True, v = True) + + if bRandomize: + random.shuffle(curves) + + rootPositions = SaveTFXBinaryFile(filepath[0], curves, meshShapedagPath) + + #------------------------------------------------------------------------------------ + # collect root positions for tfxskin or tfxbone in case SaveTFXBinaryFile was not run + #------------------------------------------------------------------------------------ + if bExportHairCheckBox == 0 and (bExportSkinCheckBox == 1 or bExportBoneCheckBox == 1): + for i in xrange(len(curves)): + curveFn = curves[i] + rootPos = OpenMaya.MPoint() + curveFn.getPointAtParam(0, rootPos, OpenMaya.MSpace.kObject) # kWorld? + rootPositions.append(rootPos) + + if bExportSkinCheckBox == 1 or bExportBoneCheckBox == 1: + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To export skin or bone data, base mesh must be set.\n") + return + + #-------------------- + # Save tfxskin file + #-------------------- + if bExportSkinCheckBox == 1: + basicFilter_tfxskin = "*.tfxskin" + filepath = cmds.fileDialog2(fileFilter=basicFilter_tfxskin, dialogStyle=2, caption="Save a tfxskin file(*.tfxskin)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + SaveTFXSkinBinaryFile(filepath[0], meshShapedagPath, rootPositions) + + #------------------------ + # Save the tfxbone file. + #------------------------ + if bExportBoneCheckBox == 1: + basicFilter = "*.tfxbone" + filepath = cmds.fileDialog2(fileFilter=basicFilter, dialogStyle=2, caption="Save a tfx bone file(*.tfxbone)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + #we will check for a joint subset in the save tfxbone function + SaveTFXBoneBinaryFile(filepath[0], selected_mesh_shape_name, meshShapedagPath, rootPositions) + + return + +# TODO: Do we need to enforce to go to the bind pose or let user do it? +def GotoBindPose(*args): + joints = cmds.ls(type='joint') + rootJoints = [] + + for j in joints: + while cmds.listRelatives(j, p=True): + parent = cmds.listRelatives(j, p=True) + j = parent[0] + rootJoints.append(j) + + rootJoints = set(rootJoints) + + for rootJoint in rootJoints: + cmds.select(rootJoint) + bindpose = cmds.dagPose(q=True, bindPose=True) + cmds.dagPose(bindpose[0] , restore=True) + cmds.select(cl=True) + + return + +class WeightJointIndexPair: + weight = 0 + joint_index = -1 + + # For sorting + def __lt__(self, other): + return self.weight > other.weight + +# vertexIndices is three vertex indices belong to one triangle +def GetSortedWeightsFromTriangleVertices(_maxJointsPerVertex, vertexIndices, jointIndexArray, weightArray, baryCoord): + final_pairs = [] + + for j in range(_maxJointsPerVertex): + for i in range(3): + vertex_index = vertexIndices[i] + bary = baryCoord[i] + + weight = weightArray[vertex_index*_maxJointsPerVertex + j] * bary + joint_index = jointIndexArray[vertex_index*_maxJointsPerVertex + j] + + bFound = False + for k in range(len(final_pairs)): + if final_pairs[k].joint_index == joint_index: + final_pairs[k].weight += weight + bFound = True + break + + if bFound == False: + pair = WeightJointIndexPair() + pair.weight = weight + pair.joint_index = joint_index + final_pairs.append(pair) + + # Set joint index zero if the weight is zero. (old way) + # User can now selected (new UI) to define their own 'root' joint and have it be non-zero (0-1 float range) + # (often if there is an issue with a strand anchoring and not moving (all weights 0) or if they + # are using a subset of joints and masking out the rest..and want a root from that group) + # Needed with complex real world skeletal rigs where you often have weights purposely set to 0 + # (like in a facial rig) on the main skincluster + final_pairs_sum = 0 + for i in xrange(len(final_pairs)): + final_pairs_sum += final_pairs[i].weight + if final_pairs[i].weight == 0: + final_pairs[i].joint_index = defaultJointRootIndex + final_pairs[i].weight = defaultJointRootWeight + + final_pairs.sort() + + # TODO: Is it needed to make the sum of weight equal to 1? + # New UI: now has checkbox option to let you re-normalize the weights to 1 (optional only) + bReNormalizeFinalPairs = cmds.checkBox("RenormalizeFinalPairs", q = True, v = True) + if (bReNormalizeFinalPairs == True) and (final_pairs_sum > 0): + for i in xrange(len(final_pairs)): + final_pairs[i].weight /= final_pairs_sum + + # number of elements of final_pairs could be more than _maxJointsPerVertex but it should be at least _maxJointsPerVertex. + # If you really want it to be exactly _maxJointsPerVertex, you can try to pop out elements. + return final_pairs + +# p0, p1, p2 are three vertices of a triangle and p is inside the triangle +def ComputeBarycentricCoordinates(p0, p1, p2, p): + v0 = p1 - p0 + v1 = p2 - p0 + v2 = p - p0 + + v00 = v0 * v0 + v01 = v0 * v1 + v11 = v1 * v1 + v20 = v2 * v0 + v21 = v2 * v1 + d = v00 * v11 - v01 * v01 + v = (v11 * v20 - v01 * v21) / d # TODO: Do I need to care about divide-by-zero case? + w = (v00 * v21 - v01 * v20) / d + u = 1.0 - v - w + + # make sure u, v, w are non-negative. It could happen sometimes. + u = max(u, 0) + v = max(v, 0) + w = max(w, 0) + + # normalize barycentric coordinates so that their sum is equal to 1 + sum = u + v + w + u /= sum + v /= sum + w /= sum + + return [u, v, w] + +def SaveTFXBoneBinaryFile(filepath, selected_mesh_shape_name, meshShapedagPath, rootPositions): + #--------------------------------------------------------------------------- + # Build a face/triangle index list to convert face index into triangle index + #--------------------------------------------------------------------------- + faceIter = OpenMaya.MItMeshPolygon(meshShapedagPath) + triangleCount = 0 + faceTriaIndexList = [] + index = 0 + + util = OpenMaya.MScriptUtil() + util.createFromInt(0) + + while not faceIter.isDone(): + faceTriaIndexList.append(triangleCount) + + if faceIter.hasValidTriangulation(): + numTrianglesPtr = util.asIntPtr() + faceIter.numTriangles(numTrianglesPtr) + numTriangles = util.getInt(numTrianglesPtr) + triangleCount += numTriangles + + faceIter.next() + + #print "TressFX: Triangle count:%d\n" % triangleCount + + #---------------------- + # Find the closest face + #---------------------- + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) + + triangleCounts = OpenMaya.MIntArray() + triangleVertexIndices = OpenMaya.MIntArray() # the size of this array is three times of the number of total triangles + meshFn.getTriangles(triangleCounts, triangleVertexIndices) + + vertexTriangleList = [] + + triangleIdForStrandsList = [] + baryCoordList = [] + uvCoordList = [] + pointOnMeshList = [] + + progressBar = ProgressBar('Collecting bone data', len(rootPositions)) + + for i in range(len(rootPositions)): + rootPoint = rootPositions[i] + + # Find the closest point info + meshPt = OpenMaya.MPointOnMesh() + meshIntersector.getClosestPoint(rootPoint, meshPt) + pt = meshPt.getPoint() + + pointOnMesh = OpenMaya.MPoint() + pointOnMesh.x = pt.x + pointOnMesh.y = pt.y + pointOnMesh.z = pt.z + pointOnMeshList.append(pointOnMesh) + + # Find face index + faceId = meshPt.faceIndex() + + # Find triangle index + triangleId = faceTriaIndexList[faceId] + meshPt.triangleIndex() + + dummy = OpenMaya.MScriptUtil() + dummyIntPtr = dummy.asIntPtr() + triangleId_local = meshPt.triangleIndex() # This values is either 0 or 1. It is not a global triangle index. triangleId is the global triangle index. + pointArray = OpenMaya.MPointArray() + vertIdList = OpenMaya.MIntArray() + faceIter.setIndex(faceId, dummyIntPtr) + faceIter.getTriangle(triangleId_local, pointArray, vertIdList, OpenMaya.MSpace.kWorld ) + + vertexTriangleList.append((vertIdList[0], vertIdList[1], vertIdList[2])) + triangleIdForStrandsList.append(triangleId) + + # Find three vertex indices for the triangle. Following two lines should give us three correct vertex indices for the triangle. + # I haven't really verified though. + #vertexIndex = [triangleVertexIndices[triangleId*3], triangleVertexIndices[triangleId*3+1], triangleVertexIndices[triangleId*3+2]] + vertexIndex = [vertIdList[0], vertIdList[1], vertIdList[2]] + + # Find barycentric coordinates + uvw = OpenMaya.MPoint() + + # Somehow, below code gives me negative barycentric coordinates sometimes. + # uPtr = OpenMaya.MScriptUtil().asFloatPtr() + # vPtr = OpenMaya.MScriptUtil().asFloatPtr() + # meshPt.getBarycentricCoords(uPtr,vPtr) + # uvw.x = OpenMaya.MScriptUtil(uPtr).asFloat() + # uvw.y = OpenMaya.MScriptUtil(vPtr).asFloat() + # uvw.z = 1.0 - uvw.x - uvw.y + + # Instead getting barycentric coords from getBarycentricCoords, we compute it by the following function. + uvw_a = ComputeBarycentricCoordinates(pointArray[0], pointArray[1], pointArray[2], pointOnMesh) + + uvw.x = uvw_a[0] + uvw.y = uvw_a[1] + uvw.z = uvw_a[2] + + # barycentric coordinates should be non-zero + #uvw.x = max(uvw.x, 0) + #uvw.y = max(uvw.y, 0) + #uvw.z = max(uvw.z, 0) + + # normalize barycentric coordinates so that their sum is equal to 1 + #sum = uvw.x + uvw.y + uvw.z + #uvw.x /= sum + #uvw.y /= sum + #uvw.z /= sum + + baryCoordList.append(uvw) + + # Find UV coordinates - We don't really use UV coords for tfxbone file. + # util = OpenMaya.MScriptUtil() + # util.createFromList([0.0, 0.0], 2) + # uv_ptr = util.asFloat2Ptr() + # meshFn.getUVAtPoint(rootPoint, uv_ptr) + # u = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 0) + # v = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 1) + # uv_coord = OpenMaya.MPoint() + # uv_coord.x = u + # uv_coord.y = v + # uv_coord.z = 0 + # uvCoordList.append(uv_coord) + + # update progress gui + progressBar.Increment() + + progressBar.Kill() + + #------------------------- + # Get skin cluster object + #------------------------- + skinClusterName = '' + skinClusters = cmds.listHistory(selected_mesh_shape_name) + skinClusters = cmds.ls(skinClusters, type="skinCluster") + if skinClusters: + skinClusterName = skinClusters[0] + else: + cmds.warning('TressFX: No skin cluster found on '+ selected_mesh_shape_name) + return + + #print skinClusterName + + #--------------------------------------------------------------------------------------------------- + # TODO: Try the following method. + # skins = filter(lambda skin: mesh.getShape() in skin.getOutputGeometry(), ls(type='skinCluster')) + + # if len(skins) > 0 : + # skin = skins[0] + # skinJoints = skin.influenceObjects(); + # root = skinJoints[0] + + # while root.getParent() : + # root = root.getParent() + + # skin.getWeights(mesh.verts[index]) + + # select(root, hierarchy=True, replace=True) + # joints = ls(selection=True, transforms=True, type='joint') + #--------------------------------------------------------------------------------------------------- + + # get the MFnSkinCluster using skinClusterName + selList = OpenMaya.MSelectionList() + selList.add(skinClusterName) + skinClusterNode = OpenMaya.MObject() + selList.getDependNode(0, skinClusterNode) + skinFn = OpenMayaAnim.MFnSkinCluster(skinClusterNode) + + dagPaths = MDagPathArray() + skinFn.influenceObjects(dagPaths) + + # influence object is a joint + influenceObjectsNames = [] + influenceObjectsNames = GetInfluenceObjects(dagPaths) + + influenceSubsetIndices = [] + #check to see if using subset and got the indices to match + bUseJointSubset = cmds.checkBox("UseJointSubsetLabel", q = True, v = True) + if (bUseJointSubset == True): + influenceSubsetIndices = GetIndicesSubsetInfluenceObjects(skinFn, dagPaths ) + if (len(influenceSubsetIndices) == 0): + cmds.warning("TressFX: Joint Subset activated but failed to get matching indices, defaulting to full joint set") + bUseJointSubset = False + + + #do we have bones? + if (len(influenceObjectsNames) == 0): + cmds.warning('TressFX: NO INFLUENCES FOR SKINCLUSTER FOUND! ') + else: #how many bones? + numBonesNeeded = len(influenceObjectsNames) + cmds.warning('TressFX: NOTICE: Make sure TressFX Max Allowed Bones (in a skeleton) is set to greater than: ' + str(numBonesNeeded)) + + skinMeshes = cmds.skinCluster(skinClusterName, query=1, geometry=1) + geoIter = OpenMaya.MItGeometry(meshShapedagPath) + infCount = OpenMaya.MScriptUtil() + infCountPtr = infCount.asUintPtr() + numVertices = geoIter.count() + + weightArray = [0] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint weight array for all vertices. Each vertex will have TRESSFX_MAX_INFLUENTIAL_BONE_COUNT weights. + # It is initialized with zero for empty weight in case there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + jointIndexArray = [-1] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint index array for all vertices. It is initialized with -1 for an empty element in case + # there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + + # collect bone weights for all vertices in the mesh + index = 0 + while geoIter.isDone() == False: + weights = OpenMaya.MDoubleArray() + skinFn.getWeights(meshShapedagPath, geoIter.currentItem(), weights, infCountPtr) + weightJointIndexPairs = [] + + sumWtsThisVertex = 0.0 + + for i in range(len(weights)): + sumWtsThisVertex += weights[i] + + pair = WeightJointIndexPair() + pair.weight = weights[i] + if (bUseJointSubset == True) and (i not in influenceSubsetIndices) and (pair.weight > 0.0): + #print("JointSubset: Setting pair weight:%5.2f to zero for bone index: %d (%s)\n" % (pair.weight, i, influenceObjectsNames[i])) + pair.weight = 0.0 #don't use this weight, not in subset of joints we want + + pair.joint_index = i + weightJointIndexPairs.append(pair) + + weightJointIndexPairs.sort() + + a = 0 + sumWtAdjusted = 0.0 + for j in range(min(len(weightJointIndexPairs), TRESSFX_MAX_INFLUENTIAL_BONE_COUNT )): + weightArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].weight + jointIndexArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].joint_index + a += 1 + sumWtAdjusted += weightJointIndexPairs[j].weight + + index += 1 + geoIter.next() + + #------------------------ + # Save the tfxbone file. + #------------------------ + progressBar = ProgressBar('Saving a tfxbone file', len(influenceObjectsNames) + len(triangleIdForStrandsList)) + f = open(filepath, "wb") + # Number of Bones + f.write(ctypes.c_int(len(influenceObjectsNames))) + + # Write all bone (joint) names + for i in range(len(influenceObjectsNames)): + # Bone Joint Index + f.write(ctypes.c_int(i)) + # Size of the string, add 1 to leave room for the nullterminate. + f.write(ctypes.c_int(len(influenceObjectsNames[i]) + 1)) + # Print the characters of the string 1 by 1. + for j in range(len(influenceObjectsNames[i])): + f.write(ctypes.c_byte(ord(influenceObjectsNames[i][j]))) + # Add a zero to null terminate the string. + f.write(ctypes.c_byte(0)) + progressBar.Increment() + + # Number of Strands + f.write(ctypes.c_int(len(triangleIdForStrandsList))) + + for i in range(len(triangleIdForStrandsList)): + triangleId = triangleIdForStrandsList[i] + + # three vertex indices from one triangle - Following two lines should work equally but I haven't verified it yet. + #vertexIndices = [triangleVertexIndices[triangleId*3], triangleVertexIndices[triangleId*3+1], triangleVertexIndices[triangleId*3+2]] + vertexIndices = vertexTriangleList[i] + + baryCoord = baryCoordList[i] + #todo: Investigate if we are getting outlier case where a baryCoord is causing a strand to go to zero? + # We should be using sorted (i.e. of all weights, only top 4 and + # which will multiply barycoord against the weight and if we get a weight with 0 in the final four, it is set to the default root, + # which is joint0 at wt0 (which, if there are no other non-zero influences, would freeze the hair in place) + # This is why a custom root setting was added, with a settable weight (i.e. non zero), just in case we get tiny barycoords that force + # a resulting weight to zero (and have few bones influencing that hair, such that all the weight goes to zero) + + #get final pairs (post adjustment by baryCoord) + weightJointIndexPairs = GetSortedWeightsFromTriangleVertices(TRESSFX_MAX_INFLUENTIAL_BONE_COUNT , vertexIndices, jointIndexArray, weightArray, baryCoord) + + # Index, the rest should be self explanatory. + f.write(ctypes.c_int(i)) + for j in range(4): + joint_index = 0 + weight = 0.0 + + try: + joint_index = weightJointIndexPairs[j].joint_index + weight = weightJointIndexPairs[j].weight + except: + print("TressFX: Saving Bone file, exception getting joint_index/bone weight for triangleId %d in StrandsList" % i) #big error: throw exception to stop + pass + + f.write(ctypes.c_int(joint_index)) + f.write(ctypes.c_float(weight)) + progressBar.Increment() + + f.close() + progressBar.Kill() + return + +def RecursiveSearchCurve(curves, objNode, minCurveLength): + if objNode.hasFn(OpenMaya.MFn.kNurbsCurve): + curveFn = OpenMaya.MFnNurbsCurve(objNode) + curveLength = curveFn.length() + + # We only export open type curves. + if curveFn.form() == OpenMaya.MFnNurbsCurve.kOpen: + if curveLength >= minCurveLength: + curves.append(curveFn) + + elif objNode.hasFn(OpenMaya.MFn.kTransform): + objFn = OpenMaya.MFnTransform(objNode) + + for j in range(objFn.childCount()): + childObjNode = objFn.child(j) + RecursiveSearchCurve(curves, childObjNode, minCurveLength) + +def GetSelectedNurbsCurves(minCurveLength): + slist = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList( slist ) + iter = OpenMaya.MItSelectionList(slist) + curves = [] + + # Find all nurbs curves under the selected node recursively. + #TODO. Confirm that this should be doing a 'select hierarachy' so user doesn't have to... + for i in range(slist.length()): + selObj = OpenMaya.MObject() + slist.getDependNode(i, selObj) + RecursiveSearchCurve(curves, selObj, minCurveLength) + + return curves + +class TressFXTFXFileHeader(ctypes.Structure): + _fields_ = [('version', ctypes.c_float), + ('numHairStrands', ctypes.c_uint), + ('numVerticesPerStrand', ctypes.c_uint), + ('offsetVertexPosition', ctypes.c_uint), + ('offsetStrandUV', ctypes.c_uint), + ('offsetVertexUV', ctypes.c_uint), + ('offsetStrandThickness', ctypes.c_uint), + ('offsetVertexColor', ctypes.c_uint), + ('reserved', ctypes.c_uint * 32)] + +class tressfx_float4(ctypes.Structure): + _fields_ = [('x', ctypes.c_float), + ('y', ctypes.c_float), + ('z', ctypes.c_float), + ('w', ctypes.c_float)] + +class tressfx_float2(ctypes.Structure): + _fields_ = [('x', ctypes.c_float), + ('y', ctypes.c_float)] + +def SaveTFXBinaryFile(filepath, curves, meshShapedagPath): + numCurves = len(curves) + numVerticesPerStrand = cmds.optionMenu("numberOfStrandsOptionMenu", query=True, value=True) + numVerticesPerStrand = int(numVerticesPerStrand) + + #check to see if we need to scale the points + sceneScale = cmds.optionMenu('scalingOptionMenu', query=True, value=True) + sceneScale = float(sceneScale) + print("TressFX: Saving TFX Binary:scene scale multiplier = %f" % sceneScale) #todo: make sure scaling doesn't affect uv issues (if there is an issue, that is) + + #sampling options + curveSample = cmds.optionMenu("samplingOptionMenu", query=True, value=True) + curveSample = int(curveSample) + curveIndex_Offset = cmds.intField("curveOffset",q = True, v = True) + #sanity check + if curveIndex_Offset >= numCurves: + cmds.warning('TressFX: Curve Offset requested Greater or Equal to actual Number of Curves - Please Lower Offset Value') + return + + bothEndsImmovable = cmds.checkBox("bothEndsImmovable",q = True, v = True) + invertZ = cmds.checkBox("InvertZ",q = True, v = True) + useZUp = cmds.checkBox("useZUp",q = True, v = True) + bChangeUpToZ = False + if (useZUp == True): + #query current up axis in use + currentAxis = cmds.upAxis(q = True, axis = True) + if (currentAxis == 'y'): + bChangeUpToZ = True + cmds.warning("TressFX: Maya currently using Y axis as UP, Z up requested: doing y/z swap") + elif (currentAxis != 'z'): + cmds.warning("TressFX: Problem detected, attempt to detect Maya UP axis setting failed. No change to default UP axis (no y/z swap)") + + + ignoreUVErrors = cmds.checkBox("ignoreUVErrorsCheckBox", q = True, v = True) + + #useCurl = cmds.checkBox("useCurl",q = True, v = True) + rootPositions = [] + + tfxHeader = TressFXTFXFileHeader() + tfxHeader.version = 4.0 + tfxHeader.numHairStrands = int(numCurves//curveSample) #number of curves may be a subset if we are sampling a subset only + tfxHeader.numVerticesPerStrand = numVerticesPerStrand + tfxHeader.offsetVertexPosition = ctypes.sizeof(TressFXTFXFileHeader) + tfxHeader.offsetStrandUV = 0 + tfxHeader.offsetVertexUV = 0 + tfxHeader.offsetStrandThickness = 0 + tfxHeader.offsetVertexColor = 0 + + meshFn = None + meshIntersector = None + + #if sampling at a lower amount than the full curve set, div by sample over entire set, then mult by sample to jump + #if offseting, subtract offset amount from full range of loop, so when it's added to the index + #it won't overshoot the actual number of curves range + adjustedCurveRange = int(numCurves//curveSample) - curveIndex_Offset #floor division is // + #sanity check 2 + if curveIndex_Offset >= adjustedCurveRange: + cmds.warning('TressFX: Curve Offset requested Greater or Equal to subset:Sampled Curves - Please Lower Offset Value') + return + + # if meshShapedagPath is passed then let's get strand texture coords. To do this, we need MFnMesh and MMeshIntersector objects. + if meshShapedagPath != None: + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) +# tfxHeader.offsetStrandUV = tfxHeader.offsetVertexPosition + numCurves * numVerticesPerStrand * ctypes.sizeof(tressfx_float4) + tfxHeader.offsetStrandUV = tfxHeader.offsetVertexPosition + adjustedCurveRange * numVerticesPerStrand * ctypes.sizeof(tressfx_float4) + + bInvertYForUVs = cmds.checkBox("InvertYForUVs",q = True, v = True) + + + #totalProgress = numCurves*numVerticesPerStrand #old, non adjusted for sampling of curves + totalProgress = adjustedCurveRange*numVerticesPerStrand + + if meshFn != None: + #totalProgress = numCurves*numVerticesPerStrand + numCurves #old, non adjusted for sampling of curves + totalProgress = adjustedCurveRange*numVerticesPerStrand + adjustedCurveRange + + progressBar = ProgressBar('Saving a tfx file', totalProgress) + + f = open(filepath, "wb") + f.write(tfxHeader) + + #if sampling at a lower amount than the full curve set, div by sample over entire set, then mult by sample to jump + #if offseting, subtract offset amount from full range of loop, so when it's added to the index + #it won't overshoot the actual number of curves range + #adjustedCurveRange = int(numCurves//curveSample) - curveIndex_Offset #floor division is // + for i in xrange(adjustedCurveRange): + curveFn = curves[(i*curveSample) + curveIndex_Offset] #adjusted curve range to accomodate sampling and offsetting into the curve set + + # getting Min/Max value of the nurbs curve + min = OpenMaya.MScriptUtil() + min.createFromDouble(0) + minPtr = min.asDoublePtr() + max = OpenMaya.MScriptUtil() + max.createFromDouble(0) + maxPtr = max.asDoublePtr() + curveFn.getKnotDomain(minPtr, maxPtr) + min_val = OpenMaya.MScriptUtil(minPtr).asDouble() + max_val = OpenMaya.MScriptUtil(maxPtr).asDouble() + + for j in range(0, numVerticesPerStrand): + param = j/ float(numVerticesPerStrand-1) + pos = OpenMaya.MPoint() + + param = param * (max_val - min_val) + curveFn.getPointAtParam(param, pos, OpenMaya.MSpace.kObject) # kObject + + p = tressfx_float4() + p.x = pos.x + p.y = pos.y + + if invertZ: + p.z = -pos.z # flip in z-axis + else: + p.z = pos.z + + #if invertY: #no use case currently + # p.y = -pos.y + #else: + # p.y = pos.y + + if (bChangeUpToZ == True): #Unreal uses Z as up (not Y), and Maya is currently using Y (so we need to swap values) + temp = p.y + p.y = p.z + p.z = temp #not sure if can use p.yz = p.zy (or if supported on all possible python builds used with this exporter) so will use old fashioned way + + + # w component is an inverse mass + if j == 0 or j == 1: # the first two vertices are immovable always. + p.w = 0 + else: + p.w = 1.0 + + if j == (numVerticesPerStrand-1) and bothEndsImmovable: #fix the last vertice of strand + p.w = 0 + + if (sceneScale != 1.0): + #print('tfx scaling doing it...not 1.0') + p.x = p.x * sceneScale + p.y = p.y * sceneScale + p.z = p.z * sceneScale + + f.write(p) + progressBar.Increment() + + + # # find face index + rootPos = OpenMaya.MPoint() + curveFn.getPointAtParam(0, rootPos, OpenMaya.MSpace.kObject) # must be kObject + rootPositions.append(rootPos) + + + # if meshShapedagPath is passed then let's get strand texture coords by using raycasting to the mesh from each root position of hair strand. + if meshFn != None: + #last known good u,v + #in case we hit bad uv points, we can at least try to set them closer to the + #last u,v set (versus 0,0) + u_lkg = 0.0 + v_lkg = 0.0 + + uMin = 0.0 + uMax = 1.0 + vMin = 0.0 + vMax = 1.0 + #query to see if we have a user defined custom uv bounding box + bCustomUVRange = cmds.checkBox("useNonUniformUVRange",q = True, v = True) + if (bCustomUVRange == True) and (bInvertYForUVs == True): + #only need the min and max of v (currently) + uMin = cmds.floatField("uMin", q = True, v = True) + uMax = cmds.floatField("uMax", q = True, v = True) + vMin = cmds.floatField("vMin", q = True, v = True) + vMax = cmds.floatField("vMax", q = True, v = True) + cmds.warning("TressFX: Using custom UV range. This v range (%5.2f, %5.2f) will be used during DirectX y-flipping ('v' reflect) for uv coordinates." % (vMin, vMax)) + print ("TressFX: UV bounding box is: u[%5.2f, %5.2f], v[%5.2f, %5.2f]" % (uMin, uMax, vMin, vMax)) + + for i in range(len(rootPositions)): + rootPoint = rootPositions[i] + + # Find UV coordinates + util = OpenMaya.MScriptUtil() + util.createFromList([0.0, 0.0], 2) + uv_ptr = util.asFloat2Ptr() + + try: + meshFn.getUVAtPoint(rootPoint, uv_ptr) + u = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 0) + v = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 1) + u_lkg = u + v_lkg = v + except: + #if NOT strict mode' then ok to give point a default 0,0 uv point value, else kill the file + #cmds.warning('Exception Hit! meshFn.getUVAtPoint failed for rootPoint') + if ignoreUVErrors: + cmds.warning('TressFX: UV point error Exception (strict mode off): UV point failed for rootPoint->Ignoring Exception, using last known good (lkg) as uv instead') + u = u_lkg + v = v_lkg + else: + f.close() + progressBar.Kill() + cmds.warning('TressFX: UV point error Exception (strict mode on): UV point failed for rootPoint->Failing to create TFX. Deleting the open TFX file: ' + filepath) + cmds.sysFile(filepath, delete=True) #remove the damaged file + return + + uv_coord = tressfx_float2() + uv_coord.x = u + uv_coord.y = v + + if (bInvertYForUVs == True): + uv_coord.y = vMax - uv_coord.y + vMin #uv_coord.y = 1.0 - uv_coord.y # DirectX has it inverted, uniform means a typical bounding box of 0-1 u and v, so we would actually use 1- v + 0 to invert + + #print "uv:%g, %g\n" % (uv_coord.x, uv_coord.y) + f.write(uv_coord) + progressBar.Increment() + + f.close() + progressBar.Kill() + + return rootPositions + +class TressFXSkinFileObject(ctypes.Structure): + _fields_ = [('version', ctypes.c_uint), + ('numHairs', ctypes.c_uint), + ('numTriangles', ctypes.c_uint), + ('reserved1', ctypes.c_uint * 31), + ('hairToMeshMap_Offset', ctypes.c_uint), + ('perStrandUVCoordniate_Offset', ctypes.c_uint), + ('reserved1', ctypes.c_uint * 31)] + +class HairToTriangleMapping(ctypes.Structure): + _fields_ = [('mesh', ctypes.c_uint), + ('triangle', ctypes.c_uint), + ('barycentricCoord_x', ctypes.c_float), + ('barycentricCoord_y', ctypes.c_float), + ('barycentricCoord_z', ctypes.c_float), + ('reserved', ctypes.c_uint)] + +def SaveTFXSkinBinaryFile(filepath, meshShapedagPath, rootPositions): + #--------------------------------------------------------------------------- + # Build a face/triangle index list to convert face index into triangle index + #--------------------------------------------------------------------------- + faceIter = OpenMaya.MItMeshPolygon(meshShapedagPath) + triangleCount = 0 + faceTriaIndexList = [] + index = 0 + bInvertYForUVs = cmds.checkBox("InvertYForUVs",q = True, v = True) + + util = OpenMaya.MScriptUtil() + util.createFromInt(0) + + while not faceIter.isDone(): + faceTriaIndexList.append(triangleCount) + + if faceIter.hasValidTriangulation(): + numTrianglesPtr = util.asIntPtr() + faceIter.numTriangles(numTrianglesPtr) + numTriangles = util.getInt(numTrianglesPtr) + triangleCount += numTriangles + + faceIter.next() + + #---------------------- + # Find the closest face + #---------------------- + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) + + faceIdList = [] + baryCoordList = [] + uvCoordList = [] + progressBar = ProgressBar('Collecting skin data', len(rootPositions)) + + for i in range(len(rootPositions)): + rootPoint = rootPositions[i] + + # Find the closest point info + meshPt = OpenMaya.MPointOnMesh() + meshIntersector.getClosestPoint(rootPoint, meshPt) + pt = meshPt.getPoint() + + pointOnMesh = OpenMaya.MPoint() + pointOnMesh = pt + + # Find face index + faceId = meshPt.faceIndex() + + # Find triangle index + triangleId = faceTriaIndexList[faceId] + meshPt.triangleIndex() + faceIdList.append(triangleId) + + # Find barycentric coordinates + uPtr = OpenMaya.MScriptUtil().asFloatPtr() + vPtr = OpenMaya.MScriptUtil().asFloatPtr() + meshPt.getBarycentricCoords(uPtr,vPtr) + uvw = OpenMaya.MPoint() + uvw.x = OpenMaya.MScriptUtil(uPtr).asFloat() + uvw.y = OpenMaya.MScriptUtil(vPtr).asFloat() + uvw.z = 1.0 - uvw.x - uvw.y + baryCoordList.append(uvw) + + # TODO: Why are there negative barycentric coords? + #if uvw.x < 0 or uvw.y < 0 or uvw.z < 0: + # print 'uvw:', uvw.x, uvw.y, uvw.z + + # Find UV coordinates + util = OpenMaya.MScriptUtil() + util.createFromList([0.0, 0.0], 2) + uv_ptr = util.asFloat2Ptr() + meshFn.getUVAtPoint(rootPoint, uv_ptr) + u = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 0) + v = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 1) + uv_coord = OpenMaya.MPoint() + uv_coord.x = u + uv_coord.y = v + uv_coord.z = 0 + uvCoordList.append(uv_coord) + + # update progress gui + progressBar.Increment() + + progressBar.Kill() + + #-------------------- + # Save a tfxskin file + #-------------------- + tfxSkinObj = TressFXSkinFileObject() + tfxSkinObj.version = 1 + tfxSkinObj.numHairs = len(faceIdList) + tfxSkinObj.numTriangles = 0 + tfxSkinObj.hairToMeshMap_Offset = ctypes.sizeof(TressFXSkinFileObject) + tfxSkinObj.perStrandUVCoordniate_Offset = tfxSkinObj.hairToMeshMap_Offset + len(faceIdList) * ctypes.sizeof(HairToTriangleMapping) + + f = open(filepath, "wb") + f.write(tfxSkinObj) + + progressBar = ProgressBar('Saving a tfxskin file', len(faceIdList) + len(uvCoordList)) + + for i in xrange(len(faceIdList)): + mapping = HairToTriangleMapping() + mapping.mesh = 0 + mapping.triangle = faceIdList[i] + + uvw = baryCoordList[i] + mapping.barycentricCoord_x = uvw.x + mapping.barycentricCoord_y = uvw.y + mapping.barycentricCoord_z = uvw.z + + f.write(mapping) + progressBar.Increment() + + # per strand uv coordinate + for i in xrange(len(uvCoordList)): + uv_coord = uvCoordList[i] + p = Point() + p.x = uv_coord.x + + if bInvertYForUVs: + p.y = 1.0 - uv_coord.y # DirectX has it inverted + + p.z = uv_coord.z + f.write(p) + progressBar.Increment() + + f.close() + progressBar.Kill() + + return + +def GetSortedWeightsFromOneVertex(_maxJointsPerVertex, vertexIndex, jointIndexArray, weightArray): + final_pairs = [] + sumFinal = 0.0 + + #noDupNonzeroWts = cmds.checkBox("noDupBoneWts", q = True, v = True) + + for j in range(_maxJointsPerVertex): + weight = weightArray[vertexIndex*_maxJointsPerVertex + j] + joint_index = jointIndexArray[vertexIndex*_maxJointsPerVertex + j] + + bFound = False + for k in range(len(final_pairs)): + if final_pairs[k].joint_index == joint_index: + #if noDupNonzeroWts: + # if final_pairs[k].weight == 0: #no dup bones case + # final_pairs[k].weight += weight + #else: + # final_pairs[k].weight += weight + final_pairs[k].weight += weight + bFound = True + break + + if bFound == False: + pair = WeightJointIndexPair() + pair.weight = weight + pair.joint_index = joint_index + final_pairs.append(pair) + + #Set joint index to the user defined root/root weight (default is joint 0 with 0 weight) if the weight is zero. + for i in xrange(len(final_pairs)): + if final_pairs[i].weight == 0: + final_pairs[i].joint_index = defaultJointRootIndex + final_pairs[i].weight = defaultJointRootWeight + sumFinal += final_pairs[i].weight + + #Normalize so that the sum of the final pairs weight is 1.0 (must be done after we have a final summation of the total weight) + bNormalizeVtWts = cmds.checkBox("RenormalizeFinalPairs", q = True, v = True) + if (bNormalizeVtWts == True): + if (sumFinal > 0.0): + for i in xrange(len(final_pairs)): + final_pairs[i].weight /= sumFinal + else: + cmds.warning("TressFX: problem with final weights for vertex: %d, total weight <= 0.0: Try using joint subset + custom root joint/weight to compensate." % vertexIndex) + + final_pairs.sort() + + # number of elements of final_pairs could be more than _maxJointsPerVertex but it should be at least _maxJointsPerVertex. + # If you really want it to be exactly _maxJointsPerVertex, you can try to pop out elements. + return final_pairs + + +def is_match(regex, text): + pattern = re.compile(regex, text) + return pattern.search(text) is not None + +def ExportMesh(filepath, meshShapedagPath): + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) + + faceIdList = [] + baryCoordList = [] + + points = OpenMaya.MPointArray() + meshFn.getPoints(points, OpenMaya.MSpace.kWorld) + + normals = OpenMaya.MFloatVectorArray() + meshFn.getVertexNormals(False, normals, OpenMaya.MSpace.kWorld) + + triangleCounts = OpenMaya.MIntArray() + triangleVertexIndices = OpenMaya.MIntArray() # the size of this array is three times of the number of total triangles + meshFn.getTriangles(triangleCounts, triangleVertexIndices) + + #------------------------- + # Get skin cluster object + #------------------------- + skinClusterName = '' + mesh_shape_name = meshFn.name() + skinClusters = cmds.listHistory(mesh_shape_name) + skinClusters = cmds.ls(skinClusters, type="skinCluster") + if skinClusters: + skinClusterName = skinClusters[0] + else: + cmds.warning('TressFX: No skin cluster found on '+ mesh_shape_name) + return + + #print skinClusterName + + # get the MFnSkinCluster using skinClusterName + selList = OpenMaya.MSelectionList() + selList.add(skinClusterName) + skinClusterNode = OpenMaya.MObject() + selList.getDependNode(0, skinClusterNode) + skinFn = OpenMayaAnim.MFnSkinCluster(skinClusterNode) + + dagPaths = MDagPathArray() + skinFn.influenceObjects(dagPaths) + + # influence object is a joint + influenceObjectsNames = [] + + #do we need to remove the namespace if present? + bRemoveNSColMesh = cmds.checkBox("removeNamespaceCM", q = True, v = True) + + #check if we need to scale the points + sceneScaleCol = cmds.optionMenu('scalingCollisionOptionMenu', query=True, value=True) + sceneScaleCol = float(sceneScaleCol) + print("TressFX: Exporting Collision Mesh:scene scale multiplier = %f" % sceneScaleCol) #Scaling, must apply to collision and hair exporting + + + # get joint names + #currently a collision mesh will parse through all the joints for that skinCluster (no limiting to a subset at this time) + for i in range(dagPaths.length()): + influenceName = dagPaths[i].partialPathName() + if bRemoveNSColMesh: + influenceNameList = re.split("[:]", influenceName) + if len(influenceNameList) != 1: #has a namespace prefix + influenceObjectsNames.append(influenceNameList[-1]) + else: + influenceObjectsNames.append(influenceNameList[0]) + else: + influenceObjectsNames.append(influenceName) # Need to remove namespace? + #influenceObjectsNames.append(influenceName) # Need to remove namespace? + + skinMeshes = cmds.skinCluster(skinClusterName, query=1, geometry=1) + geoIter = OpenMaya.MItGeometry(meshShapedagPath) + infCount = OpenMaya.MScriptUtil() + infCountPtr = infCount.asUintPtr() + numVertices = geoIter.count() + + weightArray = [0] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint weight array for all vertices. Each vertex will have TRESSFX_MAX_INFLUENTIAL_BONE_COUNT weights. + # It is initialized with zero for empty weight in case there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + jointIndexArray = [-1] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint index array for all vertices. It is initialized with -1 for an empty element in case + # there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + + # collect bone weights for all vertices in the mesh + index = 0 + + progressBar = ProgressBar('Collect data', numVertices) + + while geoIter.isDone() == False: + weights = OpenMaya.MDoubleArray() + skinFn.getWeights(meshShapedagPath, geoIter.currentItem(), weights, infCountPtr) + + weightJointIndexPairs = [] + + for i in range(len(weights)): + pair = WeightJointIndexPair() + pair.weight = weights[i] + pair.joint_index = i + weightJointIndexPairs.append(pair) + + + weightJointIndexPairs.sort() + + a = 0 + + for j in range(min(len(weightJointIndexPairs), TRESSFX_MAX_INFLUENTIAL_BONE_COUNT )): + weightArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].weight + jointIndexArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].joint_index + a += 1 + + index += 1 + progressBar.Increment() + geoIter.next() + + progressBar.Kill() + + #---------------------------------------------------------- + # We collected all necessary data. Now save them in file. + #---------------------------------------------------------- + totalProgress = points.length() + triangleVertexIndices.length() / 3 + len(influenceObjectsNames) + progressBar = ProgressBar('Export collision mesh', totalProgress) + + f = open(filepath, "w") + f.write("# TressFX collision mesh exported by TressFX Exporter in Maya\n") + + # Write all bone (joint) names + f.write("numOfBones %g\n" % (len(influenceObjectsNames))) + f.write("# bone index, bone name\n") + for i in range(len(influenceObjectsNames)): + f.write("%d %s\n" % (i, influenceObjectsNames[i])) + progressBar.Increment() + + # write vertex positions and skinning data + f.write("numOfVertices %g\n" % (points.length())) + f.write("# vertex index, vertex position x, y, z, normal x, y, z, joint index 0, joint index 1, joint index 2, joint index 3, weight 0, weight 1, weight 2, weight 3\n") + for vertexIndex in xrange(points.length()): + point = points[vertexIndex] + #do we have any scaling? + if (sceneScaleCol != 1.0): + #print("export: doing scaling..not 1.0") + point.x = point.x * sceneScaleCol + point.y = point.y * sceneScaleCol + point.z = point.z * sceneScaleCol + + normal = normals[vertexIndex] + weightJointIndexPairs = GetSortedWeightsFromOneVertex(TRESSFX_MAX_INFLUENTIAL_BONE_COUNT , vertexIndex, jointIndexArray, weightArray) + f.write("%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g\n" % (vertexIndex, point.x, point.y, point.z, normal.x, normal.y, normal.z, weightJointIndexPairs[0].joint_index, weightJointIndexPairs[1].joint_index, weightJointIndexPairs[2].joint_index, weightJointIndexPairs[3].joint_index, + weightJointIndexPairs[0].weight, weightJointIndexPairs[1].weight, weightJointIndexPairs[2].weight, weightJointIndexPairs[3].weight)) + #todo: make this error checking optional, most of the time, it is unneeded + sumWts = 0.0 + sumWts = weightJointIndexPairs[0].weight + weightJointIndexPairs[1].weight + weightJointIndexPairs[2].weight+ weightJointIndexPairs[3].weight + if sumWts <= 0.0: + cmds.warning('TressFX: this vertex(%d) has zero total weight or negative weights' % vertexIndex) + if sumWts > 1.001: #python seems to think 1 is greater than 1.0, so adding a threshold + cmds.warning('TressFX: this vertex(%d) has bone weights that total > 1 [%f]' % (vertexIndex, sumWts)) + + progressBar.Increment() + + # write triangle face indices + f.write("numOfTriangles %g\n" % (triangleVertexIndices.length() / 3)) + f.write("# triangle index, vertex index 0, vertex index 1, vertex index 2\n") + for i in range(triangleVertexIndices.length() / 3): + f.write("%g %d %d %d\n" % (i, triangleVertexIndices[i * 3 + 0], triangleVertexIndices[i * 3 + 1], triangleVertexIndices[i * 3 + 2])) + progressBar.Increment() + + f.close() + progressBar.Kill() + return + +def DoExportCollisionMesh(*args): + #------------------------------ + # Find the selected mesh shape + #------------------------------ + meshShapedagPath = OpenMaya.MDagPath() + + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To export skin or bone data, base mesh must be set.\n") + return + + allObject = cmds.ls(selected_mesh_shape_name) + cmds.select(allObject) # TODO: This selection makes hair curves unselected. This is not a problem but just inconvenient for users if they want to keep the curves selected. + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + + sel_list.getDagPath(0, meshShapedagPath) + meshShapedagPath.extendToShape() # get mesh shape + + basicFilter = "*.tfxmesh" + filepath = cmds.fileDialog2(fileFilter=basicFilter, dialogStyle=2, caption="Save a tfx collision mesh file(*.tfxmesh)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + ExportMesh(filepath[0], meshShapedagPath) + return + diff --git a/Gems/AtomTressFX/External/license.txt b/Gems/AtomTressFX/External/license.txt new file mode 100644 index 0000000000..6adade0178 --- /dev/null +++ b/Gems/AtomTressFX/External/license.txt @@ -0,0 +1,19 @@ +Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Gems/AtomTressFX/Hair_builders_files.cmake b/Gems/AtomTressFX/Hair_builders_files.cmake new file mode 100644 index 0000000000..8245e93fdb --- /dev/null +++ b/Gems/AtomTressFX/Hair_builders_files.cmake @@ -0,0 +1,14 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Code/Builders/HairAssetBuilder.h + Code/Builders/HairAssetBuilder.cpp + Code/Builders/HairBuilderComponent.h + Code/Builders/HairBuilderComponent.cpp +) diff --git a/Gems/AtomTressFX/Hair_builders_shared_files.cmake b/Gems/AtomTressFX/Hair_builders_shared_files.cmake new file mode 100644 index 0000000000..228f0130ed --- /dev/null +++ b/Gems/AtomTressFX/Hair_builders_shared_files.cmake @@ -0,0 +1,12 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Code/Builders/HairBuilderModule.h + Code/Builders/HairBuilderModule.cpp +) diff --git a/Gems/AtomTressFX/Hair_files.cmake b/Gems/AtomTressFX/Hair_files.cmake new file mode 100644 index 0000000000..c726d931f7 --- /dev/null +++ b/Gems/AtomTressFX/Hair_files.cmake @@ -0,0 +1,149 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +#set(tressfx_sources +set(FILES + External/Code/src/Math/Vector3D.h + External/Code/src/Math/Vector3D.cpp + External/Code/src/Math/Transform.h + External/Code/src/Math/Transform.cpp + External/Code/src/Math/Quaternion.h + External/Code/src/Math/Quaternion.cpp + External/Code/src/Math/Matrix33.h + External/Code/src/Math/Matrix33.cpp + + External/Code/src/TressFX/AMD_Types.h + External/Code/src/TressFX/AMD_TressFX.h + External/Code/src/TressFX/TressFXCommon.h + External/Code/src/TressFX/TressFXAsset.h + External/Code/src/TressFX/TressFXAsset.cpp + External/Code/src/TressFX/TressFXConstantBuffers.h + External/Code/src/TressFX/TressFXFileFormat.h + External/Code/src/TressFX/TressFXSettings.h + External/Code/src/TressFX/TressFXSettings.cpp +# External/Code/src/Math/Quaternion.h +#) +# +#set(atom_hair_sources + Code/HairModule.h + Code/Rendering/HairCommon.h + Code/Rendering/HairCommon.cpp + Code/Rendering/HairDispatchItem.h + Code/Rendering/HairDispatchItem.cpp + Code/Rendering/HairFeatureProcessor.cpp + Code/Rendering/HairFeatureProcessor.h + Code/Rendering/HairRenderObject.cpp + Code/Rendering/HairRenderObject.h + Code/Rendering/SharedBuffer.cpp + Code/Rendering/SharedBuffer.h + Code/Rendering/HairLightingModels.h + Code/Rendering/HairGlobalSettings.h + Code/Rendering/HairGlobalSettings.cpp + Code/Rendering/HairGlobalSettingsBus.h +#) +# +#set(atom_hair_components + Code/Components/HairSystemComponent.h + Code/Components/HairSystemComponent.cpp + Code/Components/EditorHairComponent.h + Code/Components/EditorHairComponent.cpp + Code/Components/HairComponent.h + Code/Components/HairComponent.cpp + Code/Components/HairComponentController.h + Code/Components/HairComponentController.cpp + Code/Components/HairComponentConfig.h + Code/Components/HairComponentConfig.cpp +#) +# +#set(atom_hair_passes + Code/Passes/HairSkinningComputePass.h + Code/Passes/HairSkinningComputePass.cpp + Code/Passes/HairPPLLRasterPass.h + Code/Passes/HairPPLLRasterPass.cpp + Code/Passes/HairPPLLResolvePass.h + Code/Passes/HairPPLLResolvePass.cpp +#) +# +#set(atom_hair_interfaces + Code/Rendering/HairBuffersSemantics.h + Code/Rendering/HairSharedBufferInterface.h + Code/Components/HairBus.h + + Code/Assets/HairAsset.h + Code/Assets/HairAsset.cpp +#) +#set(shaders_sources + # Srgs and Utility files + Assets/Shaders/HairSrgs.azsli + Assets/Shaders/HairSimulationSrgs.azsli + Assets/Shaders/HairRenderingSrgs.azsli + Assets/Shaders/HairSimulationCommon.azsli + Assets/Shaders/HairStrands.azsli + Assets/Shaders/HairUtilities.azsli + Assets/Shaders/HairLighting.azsli + Assets/Shaders/HairLightingEquations.azsli + Assets/Shaders/HairLightTypes.azsli + Assets/Shaders/HairSurface.azsli + + # Simulation Compute shaders + Assets/Shaders/HairSimulationCompute.azsl + + # Collision shaders - to be included soon +# Assets/Shaders/HairCollisionPrepareSDF.azsl +# Assets/Shaders/HairCollisionWithSDF.azsl + + # Rendering shaders + Assets/Shaders/HairRenderingFillPPLL.azsl + Assets/Shaders/HairRenderingResolvePPLL.azsl + + # Simulation .shader files + Assets/Shaders/HairGlobalShapeConstraintsCompute.shader + Assets/Shaders/HairCalculateStrandLevelDataCompute.shader + Assets/Shaders/HairVelocityShockPropagationCompute.shader + Assets/Shaders/HairLocalShapeConstraintsCompute.shader + Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader + Assets/Shaders/HairUpdateFollowHairCompute.shader + + # Rendering .shader file + Assets/Shaders/HairRenderingFillPPLL.shader + Assets/Shaders/HairRenderingResolvePPLL.shader + + # Colisions .shader files - to be included soon +# Assets/Shaders/HairCollisionInitializeSDF.shader +# Assets/Shaders/HairCollisionConstructSDF.shader +# Assets/Shaders/HairCollisionFinalizeSDF.shader +# Assets/Shaders/HairCollisionWithSDF.shader +#) +# +#set(atom_hair_passes + Assets/Passes/HairParentPass.pass + Assets/Passes/HairGlobalShapeConstraintsCompute.pass + Assets/Passes/HairCalculateStrandLevelDataCompute.pass + Assets/Passes/HairVelocityShockPropagationCompute.pass + Assets/Passes/HairLocalShapeConstraintsCompute.pass + Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass + Assets/Passes/HairUpdateFollowHairCompute.pass + Assets/Passes/HairFillPPLL.pass + Assets/Passes/HairResolvePPLL.pass +) + +set(SKIP_UNITY_BUILD_INCLUSION_FILES +#Add files that are in the shared here. +) + +#include_directories(src src/TressFX) +#add_subdirectory(src) + +source_group("Math Sources" FILES ${math_sources}) +source_group("TressFX Sources" FILES ${tressfx_sources}) +source_group("Atom Hair Sources" FILES ${atom_hair_sources}) +source_group("Atom Hair Components" FILES ${atom_hair_components}) +source_group("Atom Hair Passes" FILES ${atom_hair_passes}) +source_group("Atom Hair Interfaces" FILES ${atom_hair_interfaces}) +source_group("Common Sources" FILES ${common_sources}) +source_group("Shader Sources" FILES ${shaders_sources}) \ No newline at end of file diff --git a/Gems/AtomTressFX/Hair_shared_files.cmake b/Gems/AtomTressFX/Hair_shared_files.cmake new file mode 100644 index 0000000000..c5ae2861bd --- /dev/null +++ b/Gems/AtomTressFX/Hair_shared_files.cmake @@ -0,0 +1,17 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Code/Rendering/HairBuffersSemantics.h + Code/Rendering/HairSharedBufferInterface.h + Code/Components/HairBus.h + Code/Components/HairSystemComponent.h + Code/HairModule.h + Code/HairModule.cpp + Code/HairModuleUnsupported.cpp +) diff --git a/Gems/AtomTressFX/Tools/Launch_Cmd.bat b/Gems/AtomTressFX/Tools/Launch_Cmd.bat new file mode 100644 index 0000000000..2a45d0cf2c --- /dev/null +++ b/Gems/AtomTressFX/Tools/Launch_Cmd.bat @@ -0,0 +1,43 @@ +@echo off + +REM +REM Copyright (c) Contributors to the Open 3D Engine Project. +REM For complete copyright and license terms please see the LICENSE at the root of this distribution. +REM +REM SPDX-License-Identifier: Apache-2.0 OR MIT +REM +REM + +:: Set up and run project CMD prompt for TAtomTressFX Gem +:: Puts you in the CMD within the dev environment + +:: Set up window +TITLE AtomTressFX (Hair) Interface Cmd +:: Use obvious color to prevent confusion (Grey with Yellow Text) +COLOR 8E + +%~d0 +cd %~dp0 +PUSHD %~dp0 + +:: Keep changes local +SETLOCAL enableDelayedExpansion + +CALL %~dp0\Project_Env.bat + +echo. +echo _____________________________________________________________________ +echo. +echo ~ AtomTressFX (Hair) Interface CMD ... +echo _____________________________________________________________________ +echo. + +:: Create command prompt with environment +CALL %windir%\system32\cmd.exe + +ENDLOCAL + +:: Return to starting directory +POPD + +:END_OF_FILE \ No newline at end of file diff --git a/Gems/AtomTressFX/Tools/Launch_Maya_2020.bat b/Gems/AtomTressFX/Tools/Launch_Maya_2020.bat new file mode 100644 index 0000000000..d5b002851d --- /dev/null +++ b/Gems/AtomTressFX/Tools/Launch_Maya_2020.bat @@ -0,0 +1,80 @@ +@echo off + +REM +REM Copyright (c) Contributors to the Open 3D Engine Project. +REM For complete copyright and license terms please see the LICENSE at the root of this distribution. +REM +REM SPDX-License-Identifier: Apache-2.0 OR MIT +REM +REM + +:: Launches maya with a bunch of local hooks for AtomTressFX (Hair) plugins +:: ToDo: move all of this to a .json data driven boostrapping system + +@echo off + +%~d0 +cd %~dp0 +PUSHD %~dp0 + +echo ________________________________ +echo ~ calling PROJ_Env.bat + +:: Keep changes local +SETLOCAL enableDelayedExpansion + +:: PY version Major +set DCCSI_PY_VERSION_MAJOR=2 +echo DCCSI_PY_VERSION_MAJOR = %DCCSI_PY_VERSION_MAJOR% + +:: PY version Major +set DCCSI_PY_VERSION_MINOR=7 +echo DCCSI_PY_VERSION_MINOR = %DCCSI_PY_VERSION_MINOR% + +:: Maya Version +set MAYA_VERSION=2020 +echo MAYA_VERSION = %MAYA_VERSION% + +:: if a local customEnv.bat exists, run it +IF EXIST "%~dp0Project_Env.bat" CALL %~dp0Project_Env.bat + +echo ________________________________ +echo Launching Maya %MAYA_VERSION% for Lumberyard... + +:::: Set Maya native project acess to this project +set MAYA_PROJECT=%LY_PROJECT_PATH% +echo MAYA_PROJECT = %LY_PROJECT_PATH% + +:: DX11 Viewport +Set MAYA_VP2_DEVICE_OVERRIDE = VirtualDeviceDx11 + +:: add plug-in path to AtomTressFX +set TRESSFX_PLUG_IN_PATH=%LY_DEV%\Gems\AtomTressFX\Tools\Maya +:: also attached to maya's built-it env var +set MAYA_PLUG_IN_PATH=%TRESSFX_PLUG_IN_PATH%;%MAYA_PLUG_IN_PATH% +echo MAYA_PLUG_IN_PATH = %MAYA_PLUG_IN_PATH% + +:: configure local xgen data so we can store it with test data +:: https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2020/ENU/Maya-CharEffEnvBuild/files/GUID-6ED517C7-7346-4A6E-A9CF-37D2B8511C36-htm.html +Set XGEN_CONFIG_PATH=%LY_PROJECT_PATH%\AssetData +echo XGEN_CONFIG_PATH = %XGEN_CONFIG_PATH% + +:: Default to the right version of Maya if we can detect it... and launch +IF EXIST "%MAYA_LOCATION%\bin\Maya.exe" ( + start "" "%MAYA_LOCATION%\bin\Maya.exe" %* +) ELSE ( + Where maya.exe 2> NUL + IF ERRORLEVEL 1 ( + echo Maya.exe could not be found + pause + ) ELSE ( + start "" Maya.exe %* + ) +) + +:: Return to starting directory +POPD + +:END_OF_FILE + +exit /b 0 \ No newline at end of file diff --git a/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py b/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py index 0af3729b69..c44eae2ec1 100755 --- a/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py +++ b/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py @@ -1,7 +1,8 @@ -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. # -# SPDX-License-Identifier: Apache-2.0 OR MIT +# Modifications Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT # # diff --git a/Gems/AtomTressFX/Tools/Project_Env.bat b/Gems/AtomTressFX/Tools/Project_Env.bat new file mode 100644 index 0000000000..69b71e2149 --- /dev/null +++ b/Gems/AtomTressFX/Tools/Project_Env.bat @@ -0,0 +1,82 @@ +@echo off + +REM +REM Copyright (c) Contributors to the Open 3D Engine Project. +REM For complete copyright and license terms please see the LICENSE at the root of this distribution. +REM +REM SPDX-License-Identifier: Apache-2.0 OR MIT +REM +REM + +:: Sets up local project env for AtomTressFX + +:: Store current dir +%~d0 +cd %~dp0 +PUSHD %~dp0 + +:: Put you project env vars and overrides here + +:: chanhe the relative path up to dev +set DEV_REL_PATH=../.. +set ABS_PATH=%~dp0 + +CD /D .. +set LY_PROJECT_PATH=%CD% +for %%a in (%CD%) do set LY_PROJECT=%%~na + +echo. +echo _____________________________________________________________________ +echo. +echo ~ %LY_PROJECT% Project Environment ... +echo _____________________________________________________________________ +echo. + +:: for this tool environment and it's assets this Gem is the Maya project +echo LY_PROJECT = %LY_PROJECT% +:: this Gem is the Maya project path +echo LY_PROJECT_PATH = %LY_PROJECT_PATH% + +:: Change to root Lumberyard dev dir +CD /D %LY_PROJECT_PATH%\%DEV_REL_PATH% +set LY_DEV=%CD% +echo LY_DEV = %LY_DEV% + +:: Override the default maya version +set MAYA_VERSION=2020 +echo MAYA_VERSION = %MAYA_VERSION% + +:: now runt the DCCsi env +CALL %LY_DEV%\Gems\AtomLyIntegration\TechnicalArt\DccScriptingInterface\Launchers\Windows\Env_Maya.bat + +rem :: Constant Vars (Global) +rem SET LYPY_GDEBUG=0 +rem echo LYPY_GDEBUG = %LYPY_GDEBUG% +rem SET LYPY_DEV_MODE=0 +rem echo LYPY_DEV_MODE = %LYPY_DEV_MODE% +rem SET LYPY_DEBUGGER=WING +rem echo LYPY_DEBUGGER = %LYPY_DEBUGGER% + +:: DCCsi Maya plugins access +:: set DCCSI_MAYA_PLUG_IN_PATH=%DCCSI_SDK_MAYA_PATH%\plugins +:: add plug-in path to AtomTressFX +set TRESSFX_PLUG_IN_PATH=%LY_PROJECT_PATH%\Tools\Maya +:: also attached to maya's built-it env var +set MAYA_PLUG_IN_PATH=%TRESSFX_PLUG_IN_PATH%;%MAYA_PLUG_IN_PATH% +echo MAYA_PLUG_IN_PATH = %MAYA_PLUG_IN_PATH% + +:: Restore original directory +popd + +:: Change to root dir +CD /D %ABS_PATH% + +:: if the user has set up a custom env call it +IF EXIST "%~dp0User_Env.bat" CALL %~dp0User_Env.bat + +GOTO END_OF_FILE + +:: Return to starting directory +POPD + +:END_OF_FILE \ No newline at end of file diff --git a/Gems/AtomTressFX/gem.json b/Gems/AtomTressFX/gem.json index f6ff2b41d5..d3e1294568 100644 --- a/Gems/AtomTressFX/gem.json +++ b/Gems/AtomTressFX/gem.json @@ -4,7 +4,7 @@ "license": "Apache-2.0 Or MIT", "origin": "Open 3D Engine - o3de.org", "type": "Code", - "summary": "The Atom TressFX Gem provides realistic hair and fur simulation and rendering in Atom and Open 3D Engine with AMD TressFX.", + "summary": "Atom TressFX Gem provides a cutting edge hair and fur simulation and rendering in Atom enhancing the AMD TressFX 4.1. The open source TressFX can be found here: https://github.com/GPUOpen-Effects/TressFX", "canonical_tags": ["Gem"], "user_tags": ["Rendering", "Physics", "Animation"], "requirements": "", diff --git a/Gems/AtomTressFX/workspace.mel b/Gems/AtomTressFX/workspace.mel new file mode 100644 index 0000000000..d7ebf26b04 --- /dev/null +++ b/Gems/AtomTressFX/workspace.mel @@ -0,0 +1,89 @@ +//Maya 2020 Project Definition + +workspace -fr "fluidCache" ""; +workspace -fr "images" ".maya_data/images"; +workspace -fr "JT_ATF" ""; +workspace -fr "offlineEdit" ".maya_data/scenes/edits"; +workspace -fr "STEP_ATF Export" ""; +workspace -fr "furShadowMap" ""; +workspace -fr "SVG" ""; +workspace -fr "scripts" "Tools/Maya/Scripts"; +workspace -fr "DAE_FBX" ""; +workspace -fr "shaders" "Tools/Maya/Shaders"; +workspace -fr "NX_ATF" ""; +workspace -fr "furFiles" ""; +workspace -fr "CATIAV5_ATF Export" ""; +workspace -fr "OBJ" ".maya_data/obj"; +workspace -fr "PARASOLID_ATF Export" ""; +workspace -fr "FBX export" "Assets/Objects"; +workspace -fr "furEqualMap" ""; +workspace -fr "textures" "Assets/textures"; +workspace -fr "BIF" ""; +workspace -fr "lights" ".maya_data/renderData/shaders"; +workspace -fr "DAE_FBX export" ""; +workspace -fr "aliasWire" ".maya_data/data"; +workspace -fr "CATIAV5_ATF" ""; +workspace -fr "SAT_ATF Export" ""; +workspace -fr "movie" ".maya_data/movies"; +workspace -fr "ASS Export" ""; +workspace -fr "autoSave" ".maya_data/autoSave"; +workspace -fr "move" ".maya_data/move"; +workspace -fr "mayaAscii" ""; +workspace -fr "NX_ATF Export" ""; +workspace -fr "sound" ".maya_data/sound"; +workspace -fr "mayaBinary" ""; +workspace -fr "timeEditor" ""; +workspace -fr "RIBexport" ".maya_data/data"; +workspace -fr "DWG_ATF" ""; +workspace -fr "mentalray" ".maya_data/renderData/mentalray"; +workspace -fr "Arnold-USD" ""; +workspace -fr "JT_ATF Export" ""; +workspace -fr "iprImages" ".maya_data/renderData/iprImages"; +workspace -fr "FBX" "Assets/Objects"; +workspace -fr "renderData" ".maya_data/renderData"; +workspace -fr "CATIAV4_ATF" ""; +workspace -fr "fileCache" ""; +workspace -fr "eps" ""; +workspace -fr "Fbx" "Assets/Objects"; +workspace -fr "IGESexport" ".maya_data/data"; +workspace -fr "3dPaintTextures" ".maya_data/3dPaintTextures"; +workspace -fr "translatorData" ""; +workspace -fr "mel" ".maya_data/mel"; +workspace -fr "DXF_ATF Export" ""; +workspace -fr "IGES" ".maya_data/data"; +workspace -fr "particles" ".maya_data/particles"; +workspace -fr "DXFexport" ".maya_data/data"; +workspace -fr "DXF_ATF" ""; +workspace -fr "scene" "Assets/Objects"; +workspace -fr "renderScenes" ".maya_data/renderScenes"; +workspace -fr "SAT_ATF" ""; +workspace -fr "PROE_ATF" ""; +workspace -fr "WIRE_ATF Export" ""; +workspace -fr "sourceImages" "ArtSource/Images"; +workspace -fr "RIB" ".maya_data/data"; +workspace -fr "furImages" ""; +workspace -fr "clips" ".maya_data/clips"; +workspace -fr "Adobe(R) Illustrator(R)" ".maya_data/data"; +workspace -fr "animExport" ".maya_data/data"; +workspace -fr "mentalRay" ".maya_data/mentalRay"; +workspace -fr "STEP_ATF" ""; +workspace -fr "DWG_ATF Export" ""; +workspace -fr "depth" ".maya_data/renderData/depth"; +workspace -fr "sceneAssembly" ""; +workspace -fr "IGES_ATF Export" ""; +workspace -fr "teClipExports" ""; +workspace -fr "IGES_ATF" ""; +workspace -fr "PARASOLID_ATF" ""; +workspace -fr "ASS" ""; +workspace -fr "Substance" ".maya_data/data"; +workspace -fr "audio" ".maya_data/sound"; +workspace -fr "EPS" ".maya_data/data"; +workspace -fr "Alembic" "Assets/Objects"; +workspace -fr "diskCache" ".maya_data/cache"; +workspace -fr "illustrator" ""; +workspace -fr "WIRE_ATF" ""; +workspace -fr "templates" "ArtSource/SceneTemplates"; +workspace -fr "animImport" ".maya_data/data"; +workspace -fr "OBJexport" "Assets/Objects"; +workspace -fr "furAttrMap" ""; +workspace -fr "DXF" ".maya_data/data"; diff --git a/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp b/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp index a31885cc69..2fe5d749cf 100644 --- a/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp +++ b/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp @@ -105,7 +105,7 @@ namespace AudioControlBuilder Audio::ATLXmlTags::ATLPreloadRequestTag, "preload request")); } - // For each preload request in the control file, determine which config group is used for this platform and register each + // For each preload request in the control file, determine which config group is used for this platform and register each // bank listed in that preload request as a dependency. while (preloadRequestNode) { @@ -163,7 +163,7 @@ namespace AudioControlBuilder const AZ::rapidxml::xml_node* configGroupNode = configGroupMap[configGroupName]; if (!configGroupNode) { - // The config group this platform uses isn't defined in the control file. This might be intentional, so just + // The config group this platform uses isn't defined in the control file. This might be intentional, so just // generate a warning and keep going to the next preload node. AZ_TracePrintf("Audio Control Builder", "%s node for config group %s is not defined, so no banks are referenced.", Audio::ATLXmlTags::ATLConfigGroupTag, configGroupName.c_str()); @@ -188,7 +188,7 @@ namespace AudioControlBuilder } // Prepend the bank name with the relative path to the wwise sounds folder to get relative path to the bank from - // the @assets@ alias and push that into the list of banks referenced. + // the @products@ alias and push that into the list of banks referenced. AZStd::string soundsPrefix = Audio::Wwise::DefaultBanksPath; banksReferenced.emplace_back(soundsPrefix + bankNameAttribute->value()); @@ -496,7 +496,7 @@ namespace AudioControlBuilder pathDependencies.emplace(relativeBankPath, AssetBuilderSDK::ProductPathDependencyType::ProductFile); } - // For each bank figure out what events are included in the bank, then run through every event referenced in the file and + // For each bank figure out what events are included in the bank, then run through every event referenced in the file and // make sure it is in the list gathered from the banks. const auto triggersNode = node->first_node(Audio::ATLXmlTags::TriggersNodeTag); if (!triggersNode) @@ -520,7 +520,7 @@ namespace AudioControlBuilder AZStd::set wwiseEventsInReferencedBanks; - // Load all bankdeps files for all banks referenced and aggregate the list of events in those files. + // Load all bankdeps files for all banks referenced and aggregate the list of events in those files. for (const AZStd::string& relativeBankPath : banksReferenced) { // Create the full path to the bankdeps file from the bank file. diff --git a/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp b/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp index 3a1916edc3..22fa4cab7d 100644 --- a/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp +++ b/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp @@ -52,7 +52,7 @@ namespace WwiseBuilder { fileNames.push_back(dependenciesArray[dependencyIndex].GetString()); } - + // The dependency array is empty, which likely means it was modified by hand. However, every bank is dependent // on init.bnk (other than itself), so just force add it as a dependency here. and emit a warning. if (fileNames.size() == 0) @@ -93,7 +93,7 @@ namespace WwiseBuilder void WwiseBuilderWorker::Initialize() { - AZ::IO::Path configFile("@devassets@"); + AZ::IO::Path configFile("@projectroot@"); configFile /= Audio::Wwise::DefaultBanksPath; configFile /= Audio::Wwise::ConfigFile; @@ -180,7 +180,7 @@ namespace WwiseBuilder { AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "Starting Job.\n"); AZ::IO::PathView fullPath(request.m_fullPath); - + if (m_isShuttingDown) { AZ_TracePrintf(AssetBuilderSDK::ErrorWindow, "Cancelled job %s because shutdown was requested.\n", request.m_fullPath.c_str()); @@ -204,7 +204,7 @@ namespace WwiseBuilder AZ::Outcome gatherProductDependenciesResponse = GatherProductDependencies(request.m_fullPath, request.m_sourceFile, dependencyPaths); if (!gatherProductDependenciesResponse.IsSuccess()) { - AZ_Error(WwiseBuilderWindowName, false, "Dependency gathering for %s failed. %s", + AZ_Error(WwiseBuilderWindowName, false, "Dependency gathering for %s failed. %s", request.m_fullPath.c_str(), gatherProductDependenciesResponse.GetError().c_str()); } else diff --git a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp index 2387588f31..e65dbcce9f 100644 --- a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp +++ b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp @@ -28,7 +28,7 @@ protected: { m_app.Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -39,7 +39,7 @@ protected: assetRoot /= "Cache"; AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); } void TearDown() override @@ -158,7 +158,7 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_InitBank_NoMetadata_NoDependencies) TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoMetadata_NoDependencies) { - // Should generate a warning after trying to find metadata for the given bank, when the bank is not the init bank. + // Should generate a warning after trying to find metadata for the given bank, when the bank is not the init bank. // Warning should be about not being able to generate full dependency information without the metadata file. TestSuccessCaseNoDependencies("test_doesNotExist.bnk", true); } @@ -180,15 +180,15 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_MultipleDependencies) TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_DependencyArrayNonexistent_NoDependencies) { - // Should generate a warning when trying to get dependency info from metadata file, but the dependency field does - // not an empty array. Warning should be describing that a dependency on the init bank was added by default, but + // Should generate a warning when trying to get dependency info from metadata file, but the dependency field does + // not an empty array. Warning should be describing that a dependency on the init bank was added by default, but // the full dependency list could not be generated. TestSuccessCaseNoDependencies("test_bank7.bnk", true); } TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoElementsInDependencyArray_NoDependencies) { - // Should generate a warning when trying to get dependency info from metadata file, but the dependency field is + // Should generate a warning when trying to get dependency info from metadata file, but the dependency field is // an empty array. Warning should be describing that a dependency on the init bank was added by default, but the // full dependency list could not be generated. TestSuccessCaseNoDependencies("test_bank8.bnk", true); @@ -196,8 +196,8 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoElementsInDependencyArray_N TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_MissingInitBankDependency_MultipleDependencies) { - // Should generate a warning when trying to get dependency info from metadata file, but the dependency info in the - // metadata doesn't include the init bank. Warning should be describing that a dependency on the init bank was + // Should generate a warning when trying to get dependency info from metadata file, but the dependency info in the + // metadata doesn't include the init bank. Warning should be describing that a dependency on the init bank was // added by default. AZStd::vector expectedPaths = { "Sounds/wwise/init.bnk", diff --git a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp index 3724069045..4ee816b048 100644 --- a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp +++ b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp @@ -231,7 +231,7 @@ namespace UnitTest m_app.Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -253,10 +253,10 @@ namespace UnitTest AZ_TEST_ASSERT(serializeContext != nullptr); Audio::Wwise::ConfigurationSettings::Reflect(serializeContext); - // Set the @assets@ alias to the path where *this* cpp file lives. + // Set the @products@ alias to the path where *this* cpp file lives. AZStd::string rootFolder(AZ::Test::GetCurrentExecutablePath()); AZ::StringFunc::Path::Join(rootFolder.c_str(), "Test.Assets/Gems/AudioEngineWwise", rootFolder); - m_fileIO->SetAlias("@assets@", rootFolder.c_str()); + m_fileIO->SetAlias("@products@", rootFolder.c_str()); // So we don't have to compute it in each test... AZStd::string defaultBanksPath(Audio::Wwise::DefaultBanksPath); @@ -303,26 +303,12 @@ namespace UnitTest m_mapEntry.m_bankSubPath = "soundbanks"; config.m_platformMappings.push_back(m_mapEntry); - // Unfortunately we are writing to the config file that is simulated to be in the @assets@ subfolder - // This will cause an issue during save. Since 'm_configFilePath' is an absolute path, we need to - // reset the @assets@ alias to a meaningful assets path that does not contain any root of the m_configFilePath - // in order to write to the config file and proceed - //AZStd::string rootFolder(AZ::Test::GetCurrentExecutablePath()); - //AZ::IO::Path tempAssetPath(rootFolder); - //tempAssetPath /= "Cache"; - - //AZStd::string previousAlias = m_fileIO->GetAlias("@assets@"); - //m_fileIO->SetAlias("@assets@", tempAssetPath.c_str()); - config.Save(m_configFilePath); - //m_fileIO->SetAlias("@assets@", previousAlias.c_str()); m_wwiseImpl.SetBankPaths(); - //m_fileIO->SetAlias("@assets@", tempAssetPath.c_str()); m_fileIO->Remove(m_configFilePath.c_str()); - //m_fileIO->SetAlias("@assets@", previousAlias.c_str()); EXPECT_STREQ(m_wwiseImpl.m_soundbankFolder.c_str(), "sounds/wwise/soundbanks/"); } diff --git a/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp b/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp index 996a2a80b6..aa93a2bc12 100644 --- a/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp +++ b/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp @@ -977,7 +977,7 @@ namespace Audio , m_rPreloadRequests(rPreloadRequests) , m_nTriggerImplIDCounter(AUDIO_TRIGGER_IMPL_ID_NUM_RESERVED) , m_rFileCacheMgr(rFileCacheMgr) - , m_rootPath("@assets@") + , m_rootPath("@products@") #if !defined(AUDIO_RELEASE) , m_pDebugNameStore(nullptr) #endif // !AUDIO_RELEASE diff --git a/Gems/AudioSystem/Code/Source/Engine/AudioSystem.cpp b/Gems/AudioSystem/Code/Source/Engine/AudioSystem.cpp index 5f3603c956..67c5325be9 100644 --- a/Gems/AudioSystem/Code/Source/Engine/AudioSystem.cpp +++ b/Gems/AudioSystem/Code/Source/Engine/AudioSystem.cpp @@ -56,7 +56,7 @@ namespace Audio threadDesc.m_cpuId = AZ_TRAIT_AUDIOSYSTEM_AUDIO_THREAD_AFFINITY; auto threadFunc = AZStd::bind(&CAudioThread::Run, this); - m_thread = AZStd::thread(threadFunc, &threadDesc); + m_thread = AZStd::thread(threadDesc, threadFunc); } /////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/BarrierInput/Code/Source/BarrierInputClient.cpp b/Gems/BarrierInput/Code/Source/BarrierInputClient.cpp index e6d5399561..ec4cbcfbd1 100644 --- a/Gems/BarrierInput/Code/Source/BarrierInputClient.cpp +++ b/Gems/BarrierInput/Code/Source/BarrierInputClient.cpp @@ -347,7 +347,7 @@ namespace BarrierInput { AZStd::thread_desc threadDesc; threadDesc.m_name = "BarrierInputClientThread"; - m_threadHandle = AZStd::thread(AZStd::bind(&BarrierClient::Run, this), &threadDesc); + m_threadHandle = AZStd::thread(threadDesc, AZStd::bind(&BarrierClient::Run, this)); } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/Blast/Code/Source/Components/BlastFamilyComponent.cpp b/Gems/Blast/Code/Source/Components/BlastFamilyComponent.cpp index c2fb81e86a..8c6c0a8e05 100644 --- a/Gems/Blast/Code/Source/Components/BlastFamilyComponent.cpp +++ b/Gems/Blast/Code/Source/Components/BlastFamilyComponent.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -208,7 +209,7 @@ namespace Blast itr.second.Disconnect(); } m_collisionHandlers.clear(); - + BlastFamilyDamageRequestBus::MultiHandler::BusDisconnect(); BlastFamilyComponentRequestBus::Handler::BusDisconnect(); @@ -546,7 +547,7 @@ namespace Blast } m_solver->notifyActorCreated(*actor.GetTkActor().getActorLL()); - + if (auto* physicsSystem = AZ::Interface::Get()) { AZStd::pair foundBody = physicsSystem->FindAttachedBodyHandleFromEntityId(actor.GetEntity()->GetId()); diff --git a/Gems/Blast/Code/Source/Components/BlastMeshDataComponent.cpp b/Gems/Blast/Code/Source/Components/BlastMeshDataComponent.cpp index 17848a53d3..a9f079dd65 100644 --- a/Gems/Blast/Code/Source/Components/BlastMeshDataComponent.cpp +++ b/Gems/Blast/Code/Source/Components/BlastMeshDataComponent.cpp @@ -7,6 +7,7 @@ */ #include +#include #include namespace Blast diff --git a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp index 851cb4460b..b7ee805b3c 100644 --- a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp +++ b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -285,13 +286,16 @@ namespace Blast DefaultConfigurationPath, globalConfiguration); AZ_Warning("Blast", loaded, "Failed to load Blast configuration, initializing with default configs."); - SetGlobalConfiguration(globalConfiguration); - SaveConfiguration(); + ApplyGlobalConfiguration(globalConfiguration); + if (!loaded) + { + SaveConfiguration(); + } } void BlastSystemComponent::SaveConfiguration() { - auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); if (!assetRoot) { @@ -308,7 +312,7 @@ namespace Blast void BlastSystemComponent::CheckoutConfiguration() { - const auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + const auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); AZStd::string fullPath; AzFramework::StringFunc::Path::Join(assetRoot, DefaultConfigurationPath, fullPath); @@ -393,8 +397,13 @@ namespace Blast void BlastSystemComponent::SetGlobalConfiguration(const BlastGlobalConfiguration& globalConfiguration) { - m_configuration = globalConfiguration; + ApplyGlobalConfiguration(globalConfiguration); SaveConfiguration(); + } + + void BlastSystemComponent::ApplyGlobalConfiguration(const BlastGlobalConfiguration& globalConfiguration) + { + m_configuration = globalConfiguration; { AZ::Data::Asset& materialLibrary = m_configuration.m_materialLibrary; diff --git a/Gems/Blast/Code/Source/Components/BlastSystemComponent.h b/Gems/Blast/Code/Source/Components/BlastSystemComponent.h index a43bc17aca..8f6c200870 100644 --- a/Gems/Blast/Code/Source/Components/BlastSystemComponent.h +++ b/Gems/Blast/Code/Source/Components/BlastSystemComponent.h @@ -93,6 +93,7 @@ namespace Blast void InitPhysics(); void DeactivatePhysics(); + void ApplyGlobalConfiguration(const BlastGlobalConfiguration& materialLibrary); void RegisterCommands(); // Internal helper functions & classes diff --git a/Gems/Blast/Code/Source/Editor/EditorBlastFamilyComponent.cpp b/Gems/Blast/Code/Source/Editor/EditorBlastFamilyComponent.cpp index 3bc6da4297..90f530895a 100644 --- a/Gems/Blast/Code/Source/Editor/EditorBlastFamilyComponent.cpp +++ b/Gems/Blast/Code/Source/Editor/EditorBlastFamilyComponent.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include diff --git a/Gems/Blast/Code/Source/Editor/EditorBlastMeshDataComponent.cpp b/Gems/Blast/Code/Source/Editor/EditorBlastMeshDataComponent.cpp index 9d0e4fe2ff..83085b5f9c 100644 --- a/Gems/Blast/Code/Source/Editor/EditorBlastMeshDataComponent.cpp +++ b/Gems/Blast/Code/Source/Editor/EditorBlastMeshDataComponent.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp b/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp index 21b0b28c47..85c9c696a2 100644 --- a/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp +++ b/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp @@ -16,7 +16,7 @@ namespace CertificateManager { static bool ReadFileIntoString(const char* filename, AZStd::vector& outBuffer) { - AZStd::string certificatePath = "@assets@/certificates/"; + AZStd::string certificatePath = "@products@/certificates/"; certificatePath.append(filename); AZ::IO::FileIOBase* fileBase = AZ::IO::FileIOBase::GetInstance(); @@ -58,7 +58,7 @@ namespace CertificateManager return true; } - FileDataSource::FileDataSource() + FileDataSource::FileDataSource() : m_privateKeyPEM(nullptr) , m_certificatePEM(nullptr) , m_certificateAuthorityCertPEM(nullptr) @@ -73,13 +73,13 @@ namespace CertificateManager azfree(m_privateKeyPEM); azfree(m_certificatePEM); azfree(m_certificateAuthorityCertPEM); - } + } void FileDataSource::ConfigureDataSource(const char* keyPath, const char* certPath, const char* caPath) { ConfigurePrivateKey(keyPath); ConfigureCertificate(certPath); - ConfigureCertificateAuthority(caPath); + ConfigureCertificateAuthority(caPath); } void FileDataSource::ConfigurePrivateKey(const char* path) @@ -107,7 +107,7 @@ namespace CertificateManager if (path != nullptr) { LoadGenericFile(path,m_certificatePEM); - } + } } void FileDataSource::ConfigureCertificateAuthority(const char* path) @@ -133,7 +133,7 @@ namespace CertificateManager { return m_certificateAuthorityCertPEM; } - + bool FileDataSource::HasPublicKey() const { return m_certificatePEM != nullptr; @@ -143,7 +143,7 @@ namespace CertificateManager { return m_certificatePEM; } - + bool FileDataSource::HasPrivateKey() const { return m_privateKeyPEM != nullptr; diff --git a/Gems/EMotionFX/Code/CMakeLists.txt b/Gems/EMotionFX/Code/CMakeLists.txt index ed5447ba25..dace02b2ae 100644 --- a/Gems/EMotionFX/Code/CMakeLists.txt +++ b/Gems/EMotionFX/Code/CMakeLists.txt @@ -36,6 +36,7 @@ ly_add_target( PUBLIC AZ::AtomCore Gem::Atom_RPI.Public + Gem::AtomLyIntegration_CommonFeatures.Static Gem::LmbrCentral COMPILE_DEFINITIONS PUBLIC diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphFollowerParameterAction.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphFollowerParameterAction.cpp index 1355e2b0e5..3d8add320a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphFollowerParameterAction.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphFollowerParameterAction.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp index 605810c5cc..16f192615d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphSymbolicFollowerParameterAction.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphSymbolicFollowerParameterAction.cpp index fda679b8d0..e1f15c1ab2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphSymbolicFollowerParameterAction.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphSymbolicFollowerParameterAction.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp index 300543c896..d5fa3867e0 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp @@ -50,7 +50,7 @@ namespace EMotionFX // Create EMotion FX allocators Allocators::Create(); - + // create the new object gEMFX = AZ::Environment::CreateVariable(kEMotionFXInstanceVarName); gEMFX.Set(EMotionFXManager::Create()); @@ -166,11 +166,11 @@ namespace EMotionFX delete m_debugDraw; m_debugDraw = nullptr; - + m_eventManager->Destroy(); m_eventManager = nullptr; - + // delete the thread datas for (uint32 i = 0; i < m_threadDatas.size(); ++i) { @@ -341,7 +341,7 @@ namespace EMotionFX void EMotionFXManager::InitAssetFolderPaths() { // Initialize the asset source folder path. - const char* assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + const char* assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); if (assetSourcePath) { m_assetSourceFolder = assetSourcePath; @@ -361,12 +361,12 @@ namespace EMotionFX } else { - AZ_Warning("EMotionFX", false, "Failed to set asset source path for alias '@devassets@'."); + AZ_Warning("EMotionFX", false, "Failed to set asset source path for alias '@projectroot@'."); } // Initialize the asset cache folder path. - const char* assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + const char* assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); if (assetCachePath) { m_assetCacheFolder = assetCachePath; @@ -386,7 +386,7 @@ namespace EMotionFX } else { - AZ_Warning("EMotionFX", false, "Failed to set asset cache path for alias '@assets@'."); + AZ_Warning("EMotionFX", false, "Failed to set asset cache path for alias '@products@'."); } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionSet.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionSet.cpp index d8880f6fcc..56f7ee567e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionSet.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionSet.cpp @@ -726,10 +726,12 @@ namespace EMotionFX { MCore::LockGuardRecursive lock(m_mutex); - return AZStd::accumulate(begin(m_childSets), end(m_childSets), size_t{0}, [](size_t total, const MotionSet* motionSet) + size_t result = 0; + for (const MotionSet* motionSet : m_childSets) { - return total + motionSet->GetIsOwnedByRuntime(); - }); + result += !motionSet->GetIsOwnedByRuntime(); + } + return result; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp index 129d005f80..2d65a228b7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp @@ -72,13 +72,13 @@ namespace EMStudio { AZStd::string filename; - AZStd::string assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + AZStd::string assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::AssetDatabasePath::Normalize(assetCachePath); AZStd::string relativePath; EBUS_EVENT_RESULT(relativePath, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, assetId); AzFramework::StringFunc::AssetDatabasePath::Join(assetCachePath.c_str(), relativePath.c_str(), filename); - + return filename; } @@ -243,7 +243,7 @@ namespace EMStudio void FileManager::SourceFileChanged(AZStd::string relativePath, AZStd::string scanFolder, [[maybe_unused]] AZ::TypeId sourceTypeId) { AZStd::string filename; - AZStd::string assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + AZStd::string assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); AzFramework::StringFunc::AssetDatabasePath::Normalize(assetSourcePath); AzFramework::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), relativePath.c_str(), filename); @@ -373,7 +373,7 @@ namespace EMStudio const ProductAssetBrowserEntry* product = azrtti_cast(assetBrowserEntry); filename.clear(); - AZStd::string cachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + AZStd::string cachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath); AzFramework::StringFunc::AssetDatabasePath::Join(cachePath.c_str(), product->GetRelativePath().c_str(), filename); @@ -395,7 +395,7 @@ namespace EMStudio { return AZStd::string(); } - + return filenames[0]; } @@ -435,12 +435,12 @@ namespace EMStudio AZStd::string result; if (EMStudio::GetCommandManager()->ExecuteCommand(command, result)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Actor successfully saved"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Actor failed to save

%s", result.c_str()).c_str()); } } @@ -574,12 +574,12 @@ namespace EMStudio AZStd::string result; if (GetCommandManager()->ExecuteCommand(command, result) == false) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("MotionSet failed to save

%s", result.c_str()).c_str()); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "MotionSet successfully saved"); } } @@ -608,7 +608,7 @@ namespace EMStudio } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - + AZStd::string FileManager::LoadAnimGraphFileDialog([[maybe_unused]] QWidget* parent) { GetManager()->SetAvoidRendering(true); @@ -618,7 +618,7 @@ namespace EMStudio { return AZStd::string(); } - + return filenames[0]; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp index 8ca4e1de81..002634ea90 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp @@ -69,6 +69,9 @@ AZ_PUSH_DISABLE_WARNING(4267, "-Wconversion") AZ_POP_DISABLE_WARNING #include +#include +#include + namespace EMStudio { class SaveDirtyWorkspaceCallback @@ -257,10 +260,10 @@ namespace EMStudio m_saveWorkspaceCallback = nullptr; } - - // destructor MainWindow::~MainWindow() { + DisableUpdatingPlugins(); + if (m_nativeEventFilter) { QAbstractEventDispatcher::instance()->removeNativeEventFilter(m_nativeEventFilter); @@ -375,7 +378,7 @@ namespace EMStudio // reset action m_resetAction = menu->addAction(tr("&Reset"), this, &MainWindow::OnReset, QKeySequence::New); m_resetAction->setObjectName("EMFX.MainWindow.ResetAction"); - + // save all m_saveAllAction = menu->addAction(tr("Save All..."), this, &MainWindow::OnSaveAll, QKeySequence::Save); m_saveAllAction->setObjectName("EMFX.MainWindow.SaveAllAction"); @@ -464,7 +467,7 @@ namespace EMStudio menu->addAction("Documentation", this, [] { QDesktopServices::openUrl(QUrl("https://o3de.org/docs/")); - }); + }); menu->addAction("Forums", this, [] { @@ -488,7 +491,7 @@ namespace EMStudio // load preferences PluginOptionsNotificationsBus::Router::BusRouterConnect(); - LoadPreferences(); + LoadPreferences(); m_autosaveTimer->setInterval(m_options.GetAutoSaveInterval() * 60 * 1000); // Create the dirty file manager and register the workspace callback. @@ -577,6 +580,8 @@ namespace EMStudio AZ_Assert(!m_nativeEventFilter, "Double initialization?"); m_nativeEventFilter = new NativeEventFilter(this); QAbstractEventDispatcher::instance()->installNativeEventFilter(m_nativeEventFilter); + + EnableUpdatingPlugins(); } MainWindow::MainWindowCommandManagerCallback::MainWindowCommandManagerCallback() @@ -1067,7 +1072,7 @@ namespace EMStudio // get only the version number of EMotion FX AZStd::string emfxVersionString = EMotionFX::GetEMotionFX().GetVersionString(); AzFramework::StringFunc::Replace(emfxVersionString, "EMotion FX ", "", true /* case sensitive */); - + // set the window title // only set the EMotion FX version if the filename is empty AZStd::string windowTitle; @@ -1354,7 +1359,7 @@ namespace EMStudio void MainWindow::LoadCharacter(const AZ::Data::AssetId& actorAssetId, const AZ::Data::AssetId& animgraphId, const AZ::Data::AssetId& motionSetId) { m_characterFiles.clear(); - AZStd::string cachePath = gEnv->pFileIO->GetAlias("@assets@"); + AZStd::string cachePath = gEnv->pFileIO->GetAlias("@products@"); AZStd::string filename; AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath); @@ -1538,12 +1543,12 @@ namespace EMStudio AZStd::string result; if (EMStudio::GetCommandManager()->ExecuteCommand(command, result)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Workspace successfully saved"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Workspace failed to save

%s", result.c_str()).c_str()); } } @@ -1570,12 +1575,12 @@ namespace EMStudio AZStd::string result; if (EMStudio::GetCommandManager()->ExecuteCommand(command, result)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Workspace successfully saved"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Workspace failed to save

%s", result.c_str()).c_str()); } } @@ -1639,7 +1644,7 @@ namespace EMStudio Workspace* workspace = GetManager()->GetWorkspace(); workspace->SetDirtyFlag(true); - } + } void MainWindow::OnReset() { @@ -2307,7 +2312,7 @@ namespace EMStudio void MainWindow::Activate(const AZ::Data::AssetId& actorAssetId, const EMotionFX::AnimGraph* animGraph, const EMotionFX::MotionSet* motionSet) { - AZStd::string cachePath = gEnv->pFileIO->GetAlias("@assets@"); + AZStd::string cachePath = gEnv->pFileIO->GetAlias("@products@"); AZStd::string filename; AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath); @@ -2771,17 +2776,17 @@ namespace EMStudio AZStd::string result; if (GetCommandManager()->ExecuteCommandGroup(commandGroup, result, false)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Autosave completed"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Autosave failed

%s", result.c_str()).c_str()); } } - + void MainWindow::moveEvent(QMoveEvent* event) { MCORE_UNUSED(event); @@ -2813,6 +2818,53 @@ namespace EMStudio } } -} // namespace EMStudio + void MainWindow::UpdatePlugins(float timeDelta) + { + EMStudio::PluginManager* pluginManager = EMStudio::GetPluginManager(); + if (!pluginManager) + { + return; + } + + const size_t numPlugins = pluginManager->GetNumActivePlugins(); + for (size_t i = 0; i < numPlugins; ++i) + { + EMStudio::EMStudioPlugin* plugin = pluginManager->GetActivePlugin(i); + plugin->ProcessFrame(timeDelta); + } + } + + void MainWindow::EnableUpdatingPlugins() + { + AZ::TickBus::Handler::BusConnect(); + } + + void MainWindow::DisableUpdatingPlugins() + { + AZ::TickBus::Handler::BusDisconnect(); + } + + void MainWindow::OnTick(float delta, AZ::ScriptTimePoint timePoint) + { + AZ_UNUSED(timePoint); -#include + // Check if we are in game mode. + IEditor* editor = nullptr; + AzToolsFramework::EditorRequestBus::BroadcastResult(editor, &AzToolsFramework::EditorRequests::GetEditor); + const bool inGameMode = editor ? editor->IsInGameMode() : false; + + // Update all the animation editor plugins (redraw viewports, timeline, and graph windows etc). + // But only update this when the main window is visible and we are in game mode. + const bool isEditorActive = !visibleRegion().isEmpty() && !inGameMode; + + if (isEditorActive) + { + UpdatePlugins(delta); + } + } + + int MainWindow::GetTickOrder() + { + return AZ::TICK_UI; + } +} // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h index a11f11c6a8..585101f7d2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h @@ -9,6 +9,7 @@ #pragma once #if !defined(Q_MOC_RUN) +#include #include #include #include @@ -99,8 +100,9 @@ namespace EMStudio : public AzQtComponents::DockMainWindow , private PluginOptionsNotificationsBus::Router , public EMotionFX::ActorEditorRequestBus::Handler + , private AZ::TickBus::Handler { - Q_OBJECT + Q_OBJECT // AUTOMOC MCORE_MEMORYOBJECTCATEGORY(MainWindow, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_EMSTUDIOSDK) public: @@ -304,6 +306,16 @@ namespace EMStudio MainWindowCommandManagerCallback m_mainWindowCommandManagerCallback; + private: + // AZ::TickBus::Handler overrides + void OnTick(float delta, AZ::ScriptTimePoint timePoint) override; + int GetTickOrder() override; + + void UpdatePlugins(float timeDelta); + + void EnableUpdatingPlugins(); + void DisableUpdatingPlugins(); + public slots: void OnFileOpenActor(); void OnFileSaveSelectedActors(); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp index 4cdf645b16..ea7c92b742 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp @@ -428,7 +428,7 @@ namespace EMStudio continue; } - AzFramework::StringFunc::Replace(commands[i], "@assets@/", assetCacheFolder.c_str(), true /* case sensitive */); + AzFramework::StringFunc::Replace(commands[i], "@products@/", assetCacheFolder.c_str(), true /* case sensitive */); // add the command to the command group commandGroup->AddCommandString(commands[i]); diff --git a/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h b/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h index 658f15786f..6000873db1 100644 --- a/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h +++ b/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h @@ -91,6 +91,7 @@ namespace EMotionFX /// Enables rendering of the actor. virtual bool GetRenderCharacter() const = 0; virtual void SetRenderCharacter(bool enable) = 0; + virtual bool GetRenderActorVisible() const = 0; /// Returns skinning method used by the actor. virtual SkinningMethod GetSkinningMethod() const = 0; diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp index 3e459d31d6..3593f58ff2 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp @@ -6,6 +6,8 @@ * */ +#include + #include #include #include @@ -66,14 +68,10 @@ namespace EMotionFX // through this method. Once EMotionFX is integrated to the asset system this can go away. AZStd::string assetFilename; EBUS_EVENT_RESULT(assetFilename, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, asset.GetId()); - const char* devAssetsPath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); - if (devAssetsPath) + AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath(); + if (!projectPath.empty()) { - AZStd::string assetSourcePath = devAssetsPath; - - AzFramework::StringFunc::AssetDatabasePath::Normalize(assetSourcePath); - AZStd::string filename; - AzFramework::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), assetFilename.c_str(), filename); + AZ::IO::FixedMaxPathString filename{ (projectPath / assetFilename).LexicallyNormal().FixedMaxPathStringAsPosix() }; assetData->m_emfxAnimGraph->SetFileName(filename.c_str()); } @@ -81,7 +79,7 @@ namespace EMotionFX { if (GetEMotionFX().GetIsInEditorMode()) { - AZ_Warning("EMotionFX", false, "Failed to retrieve asset source path with alias '@devassets@'. Cannot set absolute filename for '%s'", assetFilename.c_str()); + AZ_Warning("EMotionFX", false, "Failed to retrieve project root path . Cannot set absolute filename for '%s'", assetFilename.c_str()); } assetData->m_emfxAnimGraph->SetFileName(assetFilename.c_str()); } diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp index 5ca9a34e72..280cedd06a 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -46,7 +47,7 @@ namespace EMotionFX const char* motionFile = entry->GetFilename(); AZ::Data::AssetId motionAssetId; EBUS_EVENT_RESULT(motionAssetId, AZ::Data::AssetCatalogRequestBus, GetAssetIdByPath, motionFile, azrtti_typeid(), false); - + // if it failed to find it, it might be still compiling - try forcing an immediate compile: if (!motionAssetId.IsValid()) { @@ -149,14 +150,11 @@ namespace EMotionFX // through this method. Once EMotionFX is integrated to the asset system this can go away. AZStd::string assetFilename; EBUS_EVENT_RESULT(assetFilename, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, asset.GetId()); - const char* devAssetsPath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); - if (devAssetsPath) - { - AZStd::string assetSourcePath = devAssetsPath; - AZ::StringFunc::AssetDatabasePath::Normalize(assetSourcePath); - AZStd::string filename; - AZ::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), assetFilename.c_str(), filename); + AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath(); + if (!projectPath.empty()) + { + AZ::IO::FixedMaxPathString filename{ (projectPath / assetFilename).LexicallyNormal().FixedMaxPathStringAsPosix() }; assetData->m_emfxMotionSet->SetFilename(filename.c_str()); } @@ -164,11 +162,11 @@ namespace EMotionFX { if (GetEMotionFX().GetIsInEditorMode()) { - AZ_Warning("EMotionFX", false, "Failed to retrieve asset source path with alias '@devassets@'. Cannot set absolute filename for '%s'", assetFilename.c_str()); + AZ_Warning("EMotionFX", false, "Failed to retrieve project root path . Cannot set absolute filename for '%s'", assetFilename.c_str()); } assetData->m_emfxMotionSet->SetFilename(assetFilename.c_str()); } - + // now load them in: const EMotionFX::MotionSet::MotionEntries& motionEntries = assetData->m_emfxMotionSet->GetMotionEntries(); // Get the motions in the motion set. Escalate them to the top of the build queue first so that they can be done in parallel. @@ -179,7 +177,7 @@ namespace EMotionFX const char* motionFilename = motionEntry->GetFilename(); AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, motionFilename); } - + // now that they're all escalated, the asset processor will be processing them across all threads, and we can request them one by one: for (const auto& item : motionEntries) { diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp index da4c72b70a..206cae3f59 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -211,6 +212,7 @@ namespace EMotionFX ->Event("DebugDrawRoot", &ActorComponentRequestBus::Events::DebugDrawRoot) ->Event("GetRenderCharacter", &ActorComponentRequestBus::Events::GetRenderCharacter) ->Event("SetRenderCharacter", &ActorComponentRequestBus::Events::SetRenderCharacter) + ->Event("GetRenderActorVisible", &ActorComponentRequestBus::Events::GetRenderActorVisible) ->VirtualProperty("RenderCharacter", "GetRenderCharacter", "SetRenderCharacter") ; @@ -366,6 +368,14 @@ namespace EMotionFX } ////////////////////////////////////////////////////////////////////////// + bool ActorComponent::GetRenderActorVisible() const + { + if (m_renderActorInstance) + { + return m_renderActorInstance->IsVisible(); + } + return false; + } SkinningMethod ActorComponent::GetSkinningMethod() const { return m_configuration.m_skinningMethod; diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h index f834456e45..b376fa891d 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h @@ -119,6 +119,7 @@ namespace EMotionFX void DebugDrawRoot(bool enable) override; bool GetRenderCharacter() const override; void SetRenderCharacter(bool enable) override; + bool GetRenderActorVisible() const override; SkinningMethod GetSkinningMethod() const override; ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp index 704b746e3f..c47c18ba7d 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp index 5db0fae842..aa17058adf 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp @@ -142,12 +142,31 @@ namespace EMotionFX { ActorComponentNotificationBus::Handler::BusConnect(GetEntityId()); AZ::TickBus::Handler::BusConnect(); + + // Remember the lod type and level so that we can set it back to the previous one on deactivation of the component. + AZ::Render::MeshComponentRequestBus::EventResult(m_previousLodType, + GetEntityId(), + &AZ::Render::MeshComponentRequestBus::Events::GetLodType); + + if (m_actorInstance) + { + m_previousLodLevel = m_actorInstance->GetLODLevel(); + } } void SimpleLODComponent::Deactivate() { AZ::TickBus::Handler::BusDisconnect(); ActorComponentNotificationBus::Handler::BusDisconnect(); + + AZ::Render::MeshComponentRequestBus::Event(GetEntityId(), + &AZ::Render::MeshComponentRequestBus::Events::SetLodType, + m_previousLodType); + + if (m_actorInstance) + { + m_actorInstance->SetLODLevel(m_previousLodLevel); + } } void SimpleLODComponent::OnActorInstanceCreated(EMotionFX::ActorInstance* actorInstance) @@ -183,7 +202,7 @@ namespace EMotionFX return max - 1; } - void SimpleLODComponent::UpdateLodLevelByDistance(EMotionFX::ActorInstance * actorInstance, const Configuration& configuration, AZ::EntityId entityId) + void SimpleLODComponent::UpdateLodLevelByDistance(EMotionFX::ActorInstance* actorInstance, const Configuration& configuration, AZ::EntityId entityId) { if (actorInstance) { @@ -201,15 +220,30 @@ namespace EMotionFX AZ::RPI::ViewportContextPtr defaultViewportContext = viewportContextManager->GetViewportContextByName(viewportContextManager->GetDefaultViewportContextName()); const float distance = worldPos.GetDistance(defaultViewportContext->GetCameraTransform().GetTranslation()); - const size_t lodByDistance = GetLodByDistance(configuration.m_lodDistances, distance); - actorInstance->SetLODLevel(lodByDistance); + const size_t requestedLod = GetLodByDistance(configuration.m_lodDistances, distance); + actorInstance->SetLODLevel(requestedLod); if (configuration.m_enableLodSampling) { - const float animGraphSampleRate = configuration.m_lodSampleRates[lodByDistance]; + const float animGraphSampleRate = configuration.m_lodSampleRates[requestedLod]; const float updateRateInSeconds = animGraphSampleRate > 0.0f ? 1.0f / animGraphSampleRate : 0.0f; actorInstance->SetMotionSamplingRate(updateRateInSeconds); } + + // Disable the automatic mesh LOD level adjustment based on screen space in case a simple LOD component is present. + // The simple LOD component overrides the mesh LOD level and syncs the skeleton with the mesh LOD level. + AZ::Render::MeshComponentRequestBus::Event(entityId, + &AZ::Render::MeshComponentRequestBus::Events::SetLodType, + AZ::RPI::Cullable::LodType::SpecificLod); + + // When setting the actor instance LOD level, a change is just requested and with the next update it will get applied. + // This means that the current LOD level might differ from the requested one. We need to sync the Atom LOD level with the + // current LOD level of the actor instance to avoid skinning artifacts. The requested LOD level will be present and applied + // the following frame. + const size_t currentLod = actorInstance->GetLODLevel(); + AZ::Render::MeshComponentRequestBus::Event(entityId, + &AZ::Render::MeshComponentRequestBus::Events::SetLodOverride, + static_cast(currentLod)); } } } // namespace integration diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h index 96bebdc660..a00918e7c0 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h @@ -17,7 +17,7 @@ #include #include - +#include namespace EMotionFX { @@ -93,6 +93,9 @@ namespace EMotionFX Configuration m_configuration; // Component configuration. EMotionFX::ActorInstance* m_actorInstance; // Associated actor instance (retrieved from Actor Component). + + AZ::RPI::Cullable::LodType m_previousLodType = AZ::RPI::Cullable::LodType::Default; + size_t m_previousLodLevel = 0; }; } // namespace Integration diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleMotionComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleMotionComponent.cpp index dd7fdeea50..6876051c63 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleMotionComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleMotionComponent.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp index ed4edda891..cf0ceab25d 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -243,6 +244,14 @@ namespace EMotionFX } ////////////////////////////////////////////////////////////////////////// + bool EditorActorComponent::GetRenderActorVisible() const + { + if (m_renderActorInstance) + { + return m_renderActorInstance->IsVisible(); + } + return false; + } size_t EditorActorComponent::GetNumJoints() const { const Actor* actor = m_actorAsset->GetActor(); diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h index 10c75860cf..e8f76bdd49 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h @@ -57,6 +57,7 @@ namespace EMotionFX ActorInstance* GetActorInstance() override { return m_actorInstance.get(); } bool GetRenderCharacter() const override; void SetRenderCharacter(bool enable) override; + bool GetRenderActorVisible() const override; size_t GetNumJoints() const override; SkinningMethod GetSkinningMethod() const override; diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp index 8721acbf3d..9833fcc87a 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp index 56c22bb1ff..08e99f97d0 100644 --- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp @@ -62,7 +62,6 @@ #if defined(EMOTIONFXANIMATION_EDITOR) // EMFX tools / editor includes -# include // Qt # include // EMStudio tools and main window registration @@ -488,9 +487,9 @@ namespace EMotionFX return; } - SetMediaRoot("@assets@"); - // \todo Right now we're pointing at the @devassets@ location (source) and working from there, because .actor and .motion (motion) aren't yet processed through - // the scene pipeline. Once they are, we'll need to update various segments of the Tool to always read from the @assets@ cache, but write to the @devassets@ data/metadata. + SetMediaRoot("@products@"); + // \todo Right now we're pointing at the @projectroot@ location (source) and working from there, because .actor and .motion (motion) aren't yet processed through + // the scene pipeline. Once they are, we'll need to update various segments of the Tool to always read from the @products@ cache, but write to the @projectroot@ data/metadata. EMotionFX::GetEMotionFX().InitAssetFolderPaths(); // Register EMotionFX event handler @@ -603,31 +602,6 @@ namespace EMotionFX #endif } - ////////////////////////////////////////////////////////////////////////// -#if defined (EMOTIONFXANIMATION_EDITOR) - void SystemComponent::UpdateAnimationEditorPlugins(float delta) - { - if (!EMStudio::GetManager()) - { - return; - } - - EMStudio::PluginManager* pluginManager = EMStudio::GetPluginManager(); - if (!pluginManager) - { - return; - } - - // Process the plugins. - const size_t numPlugins = pluginManager->GetNumActivePlugins(); - for (size_t i = 0; i < numPlugins; ++i) - { - EMStudio::EMStudioPlugin* plugin = pluginManager->GetActivePlugin(i); - plugin->ProcessFrame(delta); - } - } -#endif - ////////////////////////////////////////////////////////////////////////// void SystemComponent::OnTick(float delta, AZ::ScriptTimePoint timePoint) { @@ -635,36 +609,9 @@ namespace EMotionFX #if defined (EMOTIONFXANIMATION_EDITOR) AZ_UNUSED(delta); - const float realDelta = m_updateTimer.StampAndGetDeltaTimeInSeconds(); - - // Flush events prior to updating EMotion FX. - ActorNotificationBus::ExecuteQueuedEvents(); - - if (CVars::emfx_updateEnabled) - { - // Main EMotionFX runtime update. - GetEMotionFX().Update(realDelta); - } - - // Check if we are in game mode. - IEditor* editor = nullptr; - EBUS_EVENT_RESULT(editor, AzToolsFramework::EditorRequests::Bus, GetEditor); - const bool inGameMode = editor ? editor->IsInGameMode() : false; - - // Update all the animation editor plugins (redraw viewports, timeline, and graph windows etc). - // But only update this when the main window is visible and we are in game mode. - const bool isEditorActive = - EMotionFX::GetEMotionFX().GetIsInEditorMode() && - EMStudio::GetManager() && - EMStudio::HasMainWindow() && - !EMStudio::GetMainWindow()->visibleRegion().isEmpty() && - !inGameMode; + delta = m_updateTimer.StampAndGetDeltaTimeInSeconds(); +#endif - if (isEditorActive) - { - UpdateAnimationEditorPlugins(realDelta); - } -#else // Flush events prior to updating EMotion FX. ActorNotificationBus::ExecuteQueuedEvents(); @@ -673,9 +620,7 @@ namespace EMotionFX // Main EMotionFX runtime update. GetEMotionFX().Update(delta); } -#endif - const float timeDelta = delta; const ActorManager* actorManager = GetEMotionFX().GetActorManager(); const size_t numActorInstances = actorManager->GetNumActorInstances(); for (size_t i = 0; i < numActorInstances; ++i) @@ -704,7 +649,7 @@ namespace EMotionFX // If we have a physics controller. if (hasCustomMotionExtractionController || hasPhysicsController) { - const float deltaTimeInv = (timeDelta > 0.0f) ? (1.0f / timeDelta) : 0.0f; + const float deltaTimeInv = (delta > 0.0f) ? (1.0f / delta) : 0.0f; AZ::Transform currentTransform = AZ::Transform::CreateIdentity(); AZ::TransformBus::EventResult(currentTransform, entityId, &AZ::TransformBus::Events::GetWorldTM); @@ -719,7 +664,7 @@ namespace EMotionFX } else if (hasCustomMotionExtractionController) { - MotionExtractionRequestBus::Event(entityId, &MotionExtractionRequestBus::Events::ExtractMotion, positionDelta, timeDelta); + MotionExtractionRequestBus::Event(entityId, &MotionExtractionRequestBus::Events::ExtractMotion, positionDelta, delta); AZ::TransformBus::EventResult(currentTransform, entityId, &AZ::TransformBus::Events::GetWorldTM); } @@ -884,7 +829,7 @@ namespace EMotionFX // Register EMotionFX window with the main editor. AzToolsFramework::ViewPaneOptions emotionFXWindowOptions; - emotionFXWindowOptions.isPreview = true; + emotionFXWindowOptions.isPreview = false; emotionFXWindowOptions.isDeletable = true; emotionFXWindowOptions.isDockable = false; #if AZ_TRAIT_EMOTIONFX_MAIN_WINDOW_DETACHED diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h index a716f0aa9b..5e30820ca3 100644 --- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h @@ -108,7 +108,6 @@ namespace EMotionFX void SetMediaRoot(const char* alias); #if defined (EMOTIONFXANIMATION_EDITOR) - void UpdateAnimationEditorPlugins(float delta); void NotifyRegisterViews() override; bool IsSystemActive(EditorAnimationSystemRequests::AnimationSystem systemType) override; diff --git a/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp b/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp index 25cd840cda..44453ed70f 100644 --- a/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp +++ b/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp @@ -25,11 +25,11 @@ namespace EMotionFX ExecuteCommands({ R"str(CreateMotionSet -name MotionSet0)str", R"str(CreateMotionSet -name MotionSet1)str", - R"str(MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", - R"str(MotionSetAddMotion -motionSetID 1 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", + R"str(MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", + R"str(MotionSetAddMotion -motionSetID 1 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", R"str(MotionSetRemoveMotion -motionSetID 0 -motionIds rin_idle)str", R"str(RemoveMotionSet -motionSetID 0)str", - R"str(RemoveMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion)str", + R"str(RemoveMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion)str", }); EMStudio::MotionSetsWindowPlugin* motionSetsWindowPlugin = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMStudio::MotionSetsWindowPlugin::CLASS_ID)); diff --git a/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp b/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp index ce0b586bfe..e4e58fa01d 100644 --- a/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp +++ b/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp @@ -33,7 +33,7 @@ namespace EMotionFX ASSERT_TRUE(motionSet) << "Motion set with id 0 does not exist"; motionSetsWindowPlugin->SetSelectedSet(motionSet); - const std::string filename = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"; + const std::string filename = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"; ExecuteCommands({ "ImportMotion -filename " + filename, "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds " + filename + ";rin_idle", diff --git a/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp b/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp index acdd78fc0f..7b9f23f094 100644 --- a/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp +++ b/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -54,7 +55,7 @@ namespace EMotionFX // By using this mock catalog, we can pretend to load the specific referenced assets without actually loading anything. UnitTest::MockLoadAssetCatalogAndHandler testAssetCatalog({ referencedAnimGraph, referencedMotionSet }); - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExample.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExample.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -67,7 +68,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_NoDependency_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExampleNoDependency.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExampleNoDependency.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -77,7 +78,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_InvalidFilePath_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -87,7 +88,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_EmptyFile_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyAnimGraphExample.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyAnimGraphExample.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -99,7 +100,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_HasReferenceNode_OutputProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; @@ -111,7 +112,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_NoDependency_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExampleNoDependency.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExampleNoDependency.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; @@ -121,7 +122,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_InvalidFilePath_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; @@ -131,7 +132,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_EmptyFile_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyMotionSetExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyMotionSetExample.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; diff --git a/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp b/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp index b1650ce0c6..905c4a825b 100644 --- a/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp +++ b/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp @@ -124,7 +124,7 @@ namespace EMotionFX { using testing::_; - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; MockAssetSystemRequests assetSystem; EXPECT_CALL(assetSystem, CompileAssetSync(_)) diff --git a/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp b/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp index ff7ead3800..36abf2b1d2 100644 --- a/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp +++ b/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp @@ -302,7 +302,7 @@ namespace EMotionFX GetEMotionFX().SetMediaRootFolder(assetFolder.c_str()); GetEMotionFX().InitAssetFolderPaths(); - const char* actorFilename = "@assets@\\animationsamples\\advanced_rinlocomotion\\actor\\rinactor.actor"; + const char* actorFilename = "@products@\\animationsamples\\advanced_rinlocomotion\\actor\\rinactor.actor"; Importer* importer = GetEMotionFX().GetImporter(); importer->SetLoggingEnabled(false); @@ -402,9 +402,9 @@ namespace EMotionFX // This path points to assets in the advance rin demo. // To test different assets, change the path here. - const char* actorFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; - const char* motionSetFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; - const char* animGraphFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; + const char* actorFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; + const char* motionSetFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; + const char* animGraphFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; Importer* importer = GetEMotionFX().GetImporter(); importer->SetLoggingEnabled(false); @@ -714,9 +714,9 @@ namespace EMotionFX // This path points to assets in the advance rin demo. // To test different assets, change the path here. - const char* actorFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; - const char* motionSetFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; - const char* animGraphFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; + const char* actorFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; + const char* motionSetFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; + const char* animGraphFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; Importer* importer = GetEMotionFX().GetImporter(); importer->SetLoggingEnabled(false); @@ -772,13 +772,13 @@ namespace EMotionFX TEST_F(PerformanceTestFixture, DISABLED_MotionSamplingPerformanceNonUniform) { // Make sure that the motion is set to use NonUniform sampling! Change this in the scene settings! Otherwise you get wrong results. - TestMotionSamplingPerformance("@assets@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_idle.motion"); + TestMotionSamplingPerformance("@products@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_idle.motion"); } TEST_F(PerformanceTestFixture, DISABLED_MotionSamplingPerformanceUniform) { // Make sure that the motion is set to use Uniform sampling! Change this in the scene settings! Otherwise you get wrong results. - TestMotionSamplingPerformance("@assets@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_walk_kick_01.motion"); + TestMotionSamplingPerformance("@products@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_walk_kick_01.motion"); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp index 9b18ca5862..31e1f75d29 100644 --- a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp +++ b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp @@ -33,7 +33,7 @@ namespace EMotionFX ASSERT_EQ(GetActorManager().GetNumActors(), 0); // Load an Actor - const char* actorCmd{ "ImportActor -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor" }; + const char* actorCmd{ "ImportActor -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor" }; { AZStd::string result; EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand(actorCmd, result)) << result.c_str(); diff --git a/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp b/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp index cccf744cfc..27692a90ff 100644 --- a/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp +++ b/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp @@ -297,16 +297,16 @@ namespace EMotionFX INSTANTIATE_TEST_CASE_P(Integ_TestPoses, INTEG_PoseComparisonFixture, ::testing::Values( PoseComparisonFixtureParams ( - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" ), PoseComparisonFixtureParams ( - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.actor", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.animgraph", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.motionset", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.emfxrecording" + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.actor", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.animgraph", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.motionset", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.emfxrecording" ) ) ); @@ -314,10 +314,10 @@ namespace EMotionFX INSTANTIATE_TEST_CASE_P(Integ_TestPoseComparison, INTEG_TestPoseComparisonFixture, ::testing::Values( PoseComparisonFixtureParams ( - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" ) ) ); diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp index 287c34723f..16b223914e 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp @@ -30,12 +30,12 @@ namespace EMotionFX motionSetsWindowPlugin->SetSelectedSet(motionSet); ExecuteCommands({ - "ImportMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", - "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle" + "ImportMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", + "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle" }); char resolvedPath[AZ::IO::MaxPathLength]; - EXPECT_TRUE(AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", resolvedPath, AZ_ARRAY_SIZE(resolvedPath))); + EXPECT_TRUE(AZ::IO::FileIOBase::GetInstance()->ResolvePath("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", resolvedPath, AZ_ARRAY_SIZE(resolvedPath))); m_motionFileName = resolvedPath; AzFramework::ApplicationRequests::Bus::Broadcast([](AzFramework::ApplicationRequests* requests, AZStd::string& path) { requests->NormalizePathKeepCase(path); }, m_motionFileName); m_motionName = "rin_idle"; diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp index 1f9a78a413..d53ddcc924 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp @@ -44,7 +44,7 @@ namespace EMotionFX RecordProperty("test_case_id", "C16302179"); - const AZStd::string motionAsset("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); + const AZStd::string motionAsset("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); const AZStd::string createAnimGraphCmd("CreateAnimGraph"); const AZStd::string motionSetName("TestMotionSet"); const AZStd::string createMotionSetCmd("CreateMotionSet -motionSetID 42 -name " + motionSetName); diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp index 82bfeba557..bb8368b17e 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp @@ -36,7 +36,7 @@ namespace EMotionFX RecordProperty("test_case_id", "C1559124"); const QString assetName = "rin_idle"; // Asset name to appear in table - const AZStd::string motionCmd = AZStd::string::format("ImportMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); + const AZStd::string motionCmd = AZStd::string::format("ImportMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); auto motionWindowPlugin = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMStudio::MotionWindowPlugin::CLASS_ID)); ASSERT_TRUE(motionWindowPlugin) << "Could not find the Motion Window Plugin"; diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp index 6804d351cf..14d27ed60f 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp @@ -38,7 +38,7 @@ namespace EMotionFX EXPECT_EQ(table->rowCount(), 1) << "Expected the table to have no rows yet"; // Create actor and actor instance. - const char* actorFilename = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor"; + const char* actorFilename = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor"; AZStd::unique_ptr m_actor = EMotionFX::GetImporter().LoadActor(actorFilename); EXPECT_TRUE(m_actor.get() != nullptr) << "Actor not loaded."; EMotionFX::ActorInstance* m_actorInstance = ActorInstance::Create(m_actor.get()); diff --git a/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp b/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp index 4eb44a54ab..bdbc50fe9c 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp @@ -26,7 +26,7 @@ namespace EMotionFX EMStudio::GetMainWindow()->ApplicationModeChanged("AnimGraph"); // Load Rin anim graph. - const char* rinGraph = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph"; + const char* rinGraph = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph"; const AZStd::string rinGraphPath = ResolvePath(rinGraph); AZStd::string command = AZStd::string::format("LoadAnimGraph -filename \"%s\"", rinGraphPath.c_str()); AZStd::string result; diff --git a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp index b24971bfde..73a0f1c865 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp @@ -551,7 +551,7 @@ namespace EMotionFX QString GetTestMotionFileName() const { - AZStd::string resolvedAssetPath = this->ResolvePath("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); + AZStd::string resolvedAssetPath = this->ResolvePath("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); return QString::fromUtf8(resolvedAssetPath.data(), aznumeric_cast(resolvedAssetPath.size())); } diff --git a/Gems/EditorPythonBindings/Assets/release_notes.md b/Gems/EditorPythonBindings/Assets/release_notes.md index 4a4b5bc71f..59192e1fdc 100644 --- a/Gems/EditorPythonBindings/Assets/release_notes.md +++ b/Gems/EditorPythonBindings/Assets/release_notes.md @@ -59,7 +59,7 @@ The API: - ExecuteByString(string) – runs a string buffer in the Python VM; it returns no value - ExecuteByFilename(string) – loads a file off of the disk to execute in the Python VM; the call returns no value. The filename can contain an alias such as - ‘\@devroot\@’ to execute a project relative file inside the Editor + ‘\@projectroot\@’ to execute a project relative file inside the Editor #### New Console Commands diff --git a/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp index 4ca40a5bab..81476bdd7f 100644 --- a/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp +++ b/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp @@ -38,7 +38,7 @@ namespace EditorPythonBindings static constexpr const char* s_default = "default"; static constexpr const char* s_globals = "globals"; - // a structure for pybind11 to bind to hold constants, properties, and enums from the Behavior Context + // a structure for pybind11 to bind to hold constants, properties, and enums from the Behavior Context struct StaticPropertyHolder final { AZ_CLASS_ALLOCATOR(StaticPropertyHolder, AZ::SystemAllocator, 0); @@ -54,7 +54,7 @@ namespace EditorPythonBindings if (m_behaviorContext == nullptr) { return false; - } + } m_fullName = PyModule_GetName(scope.ptr()); @@ -199,12 +199,10 @@ namespace EditorPythonBindings } }); - RegisterAliasIfExists(pathsModule, "@devroot@", "devroot"); RegisterAliasIfExists(pathsModule, "@engroot@", "engroot"); - RegisterAliasIfExists(pathsModule, "@assets@", "assets"); - RegisterAliasIfExists(pathsModule, "@devassets@", "devassets"); + RegisterAliasIfExists(pathsModule, "@products@", "products"); + RegisterAliasIfExists(pathsModule, "@projectroot@", "projectroot"); RegisterAliasIfExists(pathsModule, "@log@", "log"); - RegisterAliasIfExists(pathsModule, "@root@", "root"); const char* executableFolder = nullptr; AZ::ComponentApplicationBus::BroadcastResult(executableFolder, &AZ::ComponentApplicationBus::Events::GetExecutableFolder); @@ -363,7 +361,7 @@ namespace EditorPythonBindings m_staticPropertyHolderMap.reset(); EditorPythonBindings::EditorPythonBindingsNotificationBus::Handler::BusDisconnect(); } - + void PythonReflectionComponent::OnImportModule(PyObject* module) { pybind11::module parentModule = pybind11::cast(module); diff --git a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp index cecbf15c5a..876ef19803 100644 --- a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp +++ b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp @@ -524,7 +524,7 @@ namespace EditorPythonBindings { AZ::IO::Path newSourcePath = jsonSourcePathPointer; // Resolve any file aliases first - Do not use ResolvePath() as that assumes - // any relative path is underneath the @assets@ alias + // any relative path is underneath the @products@ alias if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { AZ::IO::FixedMaxPath replacedAliasPath; @@ -803,7 +803,7 @@ namespace EditorPythonBindings return Result::Error_InvalidFilename; } - // support the alias version of a script such as @devroot@/Editor/Scripts/select_story_anim_objects.py + // support the alias version of a script such as @engroot@/Editor/Scripts/select_story_anim_objects.py AZStd::string theFilename(filename); { char resolvedPath[AZ_MAX_PATH_LEN] = { 0 }; diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonAssetTypesTests.cpp b/Gems/EditorPythonBindings/Code/Tests/PythonAssetTypesTests.cpp index 9940a01b7a..688eff7671 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonAssetTypesTests.cpp +++ b/Gems/EditorPythonBindings/Code/Tests/PythonAssetTypesTests.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp b/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp index 12d7d696d3..5aa4921287 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp +++ b/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp @@ -268,7 +268,7 @@ print ('entityId invalid is ' + str(entityId.id)) { Skip = 0, ImportModule, - TestCallHit, + TestCallHit, TestTypeDoCall1 }; @@ -302,7 +302,7 @@ print ('entityId invalid is ' + str(entityId.id)) pybind11::exec(R"( import sys, os import azlmbr.paths - sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests')) + sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests')) from test_package import import_test as itest print('ImportModule') itest.test_call() @@ -401,8 +401,8 @@ print ('entityId invalid is ' + str(entityId.id)) pybind11::exec(R"( import sys, os import azlmbr.paths - sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests')) - sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests','test_package')) + sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests')) + sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests','test_package')) from test_package import import_many import_many.test_many_entity_id() diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp b/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp index 8d472945cc..96619997bc 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp +++ b/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -160,7 +161,7 @@ namespace UnitTest ->Method("accept_vector_of_floats", &PythonReflectionContainerSimpleTypes::AcceptVectorOfFloats, nullptr, "") ->Method("return_vector_of_doubles", &PythonReflectionContainerSimpleTypes::ReturnVectorOfDoubles, nullptr, "") ->Method("accept_vector_of_doubles", &PythonReflectionContainerSimpleTypes::AcceptVectorOfDoubles, nullptr, "") - ->Property("vector_of_s8", + ->Property("vector_of_s8", [](PythonReflectionContainerSimpleTypes* self) { return self->m_s8ValueValues.ReturnValues(); }, [](PythonReflectionContainerSimpleTypes* self, const AZStd::vector& values) { return self->m_s8ValueValues.AcceptValues(values); }) ->Property("vector_of_u8", @@ -791,7 +792,7 @@ namespace UnitTest theAsset = reflectAny.access_any_ref() if( reflectAny.compare_asset_ids(theAsset,testObject.theAsset) ): print ('MutateAssetId') - + )"); } catch ([[maybe_unused]] const std::exception& e) @@ -1428,7 +1429,6 @@ namespace UnitTest { Skip = 0, EngrootIs, - DevrootIs, pathResolvedTo, }; @@ -1441,10 +1441,6 @@ namespace UnitTest { return static_cast(LogTypes::EngrootIs); } - else if (AzFramework::StringFunc::StartsWith(message, "devroot is ")) - { - return static_cast(LogTypes::DevrootIs); - } else if (AzFramework::StringFunc::StartsWith(message, "path resolved to ")) { return static_cast(LogTypes::pathResolvedTo); @@ -1469,9 +1465,6 @@ namespace UnitTest if (len(azlmbr.paths.engroot) != 0): print ('engroot is {}'.format(azlmbr.paths.engroot)) - if (len(azlmbr.paths.devroot) != 0): - print ('devroot is {}'.format(azlmbr.paths.devroot)) - path = azlmbr.paths.resolve_path('@engroot@/engineassets/texturemsg/defaultsolids.mtl') if (path.find('@engroot@') == -1): print ('path resolved to {}'.format(path)) @@ -1486,7 +1479,6 @@ namespace UnitTest e.Deactivate(); EXPECT_EQ(m_testSink.m_evaluationMap[(int)LogTypes::EngrootIs], 1); - EXPECT_EQ(m_testSink.m_evaluationMap[(int)LogTypes::DevrootIs], 1); EXPECT_EQ(m_testSink.m_evaluationMap[(int)LogTypes::pathResolvedTo], 1); } } diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h b/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h index a0109f8029..143863b4c8 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h +++ b/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h @@ -81,7 +81,6 @@ namespace UnitTest } m_fileIOHelper = AZStd::make_unique(); - m_fileIOHelper->m_fileIO.SetAlias("@devroot@", m_engineRoot.c_str()); m_fileIOHelper->m_fileIO.SetAlias("@engroot@", m_engineRoot.c_str()); AzFramework::Application::Descriptor appDesc; diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl index 38747553a9..7dbe516aa5 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl @@ -27,7 +27,7 @@ namespace GameStateSamples IConsole* iConsole = iSystem ? iSystem->GetIConsole() : nullptr; if (iConsole) { - iConsole->GetCVar("level_load_screen_uicanvas_path")->Set("@assets@/ui/canvases/defaultlevelloadingscreen.uicanvas"); + iConsole->GetCVar("level_load_screen_uicanvas_path")->Set("@products@/ui/canvases/defaultlevelloadingscreen.uicanvas"); iConsole->GetCVar("level_load_screen_sequence_to_auto_play")->Set("DefaultLevelLoadingAnimatedSequence"); } } diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl index 63fea35224..4227e45fe9 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl @@ -182,7 +182,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateLevelPaused::GetPauseMenuCanvasAssetPath() { - return "@assets@/ui/canvases/defaultpausemenuscreen.uicanvas"; + return "@products@/ui/canvases/defaultpausemenuscreen.uicanvas"; } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl index f9ec19581c..a4af32feb8 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl @@ -206,6 +206,6 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateLevelRunning::GetPauseButtonCanvasAssetPath() { - return "@assets@/ui/canvases/defaultpausebuttonfortouchscreens.uicanvas"; + return "@products@/ui/canvases/defaultpausebuttonfortouchscreens.uicanvas"; } } diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl index dc658611b5..4a4fbac93a 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl @@ -223,7 +223,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateLocalUserLobby::GetSignedInUserOverlayCanvasAssetPath() { - return "@assets@/ui/canvases/defaultsignedinusersoverlay.uicanvas"; + return "@products@/ui/canvases/defaultsignedinusersoverlay.uicanvas"; } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -282,7 +282,7 @@ namespace GameStateSamples } // ...sort them by index and then go through to check whether they have been - // assigned a local user id. If so, auto-assign their local user id into the + // assigned a local user id. If so, auto-assign their local user id into the // first available local player slot (unless they've already been assigned). AZStd::sort(gamepadInputDevices.begin(), gamepadInputDevices.end(), [](const AzFramework::InputDevice* lhs, const AzFramework::InputDevice* rhs) diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl index 41ee034844..98147756f4 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl @@ -257,7 +257,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateMainMenu::GetMainMenuCanvasAssetPath() { - return "@assets@/ui/canvases/defaultmainmenuscreen.uicanvas"; + return "@products@/ui/canvases/defaultmainmenuscreen.uicanvas"; } diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl index 64269d223f..4389f5f0b7 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl @@ -215,7 +215,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateOptionsMenu::GetOptionsMenuCanvasAssetPath() { - return "@assets@/ui/canvases/defaultoptionsmenuscreen.uicanvas"; + return "@products@/ui/canvases/defaultoptionsmenuscreen.uicanvas"; } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl index bf50913ef9..42ad2290e1 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl @@ -168,6 +168,6 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStatePrimaryUserSelection::GetPrimaryUserSelectionCanvasAssetPath() { - return "@assets@/ui/canvases/defaultprimaryuserselectionscreen.uicanvas"; + return "@products@/ui/canvases/defaultprimaryuserselectionscreen.uicanvas"; } } diff --git a/Gems/GradientSignal/Code/Source/Components/ImageGradientComponent.cpp b/Gems/GradientSignal/Code/Source/Components/ImageGradientComponent.cpp index 9e01b690e0..6fe8d32484 100644 --- a/Gems/GradientSignal/Code/Source/Components/ImageGradientComponent.cpp +++ b/Gems/GradientSignal/Code/Source/Components/ImageGradientComponent.cpp @@ -8,6 +8,7 @@ #include "ImageGradientComponent.h" #include +#include #include #include #include diff --git a/Gems/GraphCanvas/Code/Source/Translation/TranslationAsset.cpp b/Gems/GraphCanvas/Code/Source/Translation/TranslationAsset.cpp index fbd7bdfd22..a461866c46 100644 --- a/Gems/GraphCanvas/Code/Source/Translation/TranslationAsset.cpp +++ b/Gems/GraphCanvas/Code/Source/Translation/TranslationAsset.cpp @@ -8,6 +8,8 @@ #include +#include + #include #include diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp index 56f6e84332..0b4691ecf5 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp @@ -74,10 +74,10 @@ namespace m_paletteSwatches.push_back(QColor(0, 0, 0)); m_sourcePixmap = new QPixmap(16, 16); m_sourcePixmap->fill(Qt::transparent); - + QPainter painter(m_sourcePixmap); painter.setRenderHint(QPainter::RenderHint::Antialiasing); - + QPen pen; pen.setWidth(4); pen.setColor(QColor(0, 0, 0)); @@ -257,7 +257,7 @@ namespace GraphCanvas QBitmap mask = m_sourcePixmap->createMaskFromColor(m_paletteSwatches[i], Qt::MaskOutColor); painter.setClipRegion(QRegion(mask)); - QtDrawingUtils::FillArea(painter, drawRect, (*palettes[i%palettes.size()])); + QtDrawingUtils::FillArea(painter, drawRect, (*palettes[i%palettes.size()])); } return pixmap; @@ -317,7 +317,7 @@ namespace GraphCanvas void StyleManager::LoadStyleSheet() { - AZStd::string file = AZStd::string::format("@assets@/%s", m_assetPath.c_str()); + AZStd::string file = AZStd::string::format("@products@/%s", m_assetPath.c_str()); AZ::IO::FileIOBase* fileBase = AZ::IO::FileIOBase::GetInstance(); @@ -448,7 +448,7 @@ namespace GraphCanvas auto mapIter = m_dataPaletteMapping.find(dataType); if (mapIter == m_dataPaletteMapping.end()) - { + { return "ObjectDataColorPalette"; } else @@ -852,7 +852,7 @@ namespace GraphCanvas return icon; } - + void StyleManager::ClearStyles() { StyleManagerNotificationBus::Event(m_editorId, &StyleManagerNotifications::OnStylesUnloaded); diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Utils/StateControllers/StateController.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Utils/StateControllers/StateController.h index 053ed98978..54dccb8ae0 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Utils/StateControllers/StateController.h +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Utils/StateControllers/StateController.h @@ -8,6 +8,7 @@ #pragma once #include +#include // A configurable queue that allows for multiple sources to try to control a single value in a configurable way // such that each object can control the object independently of the other systems, while still maintaining a reasonable state. diff --git a/Gems/HttpRequestor/Code/Source/HttpRequestManager.cpp b/Gems/HttpRequestor/Code/Source/HttpRequestManager.cpp index d33f37a2d7..06cf018f76 100644 --- a/Gems/HttpRequestor/Code/Source/HttpRequestManager.cpp +++ b/Gems/HttpRequestor/Code/Source/HttpRequestManager.cpp @@ -37,7 +37,7 @@ namespace HttpRequestor m_runThread = true; AWSNativeSDKInit::InitializationManager::InitAwsApi(); auto function = AZStd::bind(&Manager::ThreadFunction, this); - m_thread = AZStd::thread(function, &desc); + m_thread = AZStd::thread(desc, function); } Manager::~Manager() diff --git a/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYEntityOutliner.cpp b/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYEntityOutliner.cpp index 2df6c9984b..1bf9d26fdf 100644 --- a/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYEntityOutliner.cpp +++ b/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYEntityOutliner.cpp @@ -11,6 +11,7 @@ #ifdef IMGUI_ENABLED #include +#include #include #include #include diff --git a/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp b/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp index bd13e91dc6..d0d7160a73 100644 --- a/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp +++ b/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp @@ -58,7 +58,7 @@ namespace InAppPurchases } PurchasedProductDetailsAndroid* purchasedProductDetails = new PurchasedProductDetailsAndroid(); - + purchasedProductDetails->SetProductId(AZ::Android::JNI::ConvertJstringToString(static_cast(env->GetObjectField(jpurchasedProduct, fid[0])))); purchasedProductDetails->SetOrderId(AZ::Android::JNI::ConvertJstringToString(static_cast(env->GetObjectField(jpurchasedProduct, fid[1])))); purchasedProductDetails->SetPackageName(AZ::Android::JNI::ConvertJstringToString(static_cast(env->GetObjectField(jpurchasedProduct, fid[2])))); @@ -75,7 +75,7 @@ namespace InAppPurchases int numProducts = env->GetArrayLength(jproductDetails); InAppPurchasesInterface::GetInstance()->GetCache()->ClearCachedProductDetails(); - + const int NUM_FIELDS_PRODUCTS = 7; jfieldID fid[NUM_FIELDS_PRODUCTS]; jclass cls; @@ -224,7 +224,7 @@ namespace InAppPurchases AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; AZ::u64 fileSize = 0; - if (!fileReader->Open("@assets@/product_ids.json", AZ::IO::OpenMode::ModeRead, fileHandle)) + if (!fileReader->Open("@products@/product_ids.json", AZ::IO::OpenMode::ModeRead, fileHandle)) { AZ_TracePrintf("LumberyardInAppBilling", "Unable to open file product_ids.json\n"); return; @@ -319,10 +319,10 @@ namespace InAppPurchases env->DeleteLocalRef(billingClass); } - + void InAppPurchasesAndroid::RestorePurchasedProducts() const { - + } void InAppPurchasesAndroid::ConsumePurchase(const AZStd::string& purchaseToken) const diff --git a/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp b/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp index 22be22265a..da7181ae04 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp @@ -253,10 +253,12 @@ namespace BenchmarkAssetBuilder // and 2 bytes of storage for text-based formats. // This is just an approximate total size because there's a bit of additional overhead // for asset headers and the other fields in the generated asset. +#if defined(AZ_ENABLE_TRACING) uint64_t approximateTotalStorageBytes = (settingsPtr->m_assetStorageType == AZ::DataStream::StreamType::ST_BINARY) ? UINT64_C(1) * totalGeneratedBytes : UINT64_C(2) * totalGeneratedBytes; +#endif AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "Benchmark asset generation will generate %" PRIu64 " assets " diff --git a/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp b/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp index 82c07f9f73..3dd7d5501e 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp @@ -63,13 +63,13 @@ namespace CopyDependencyBuilder charBuffer.back() = 0; /* File Contents of EMFX Workspace file looks like - startScript="ImportActor -filename \"@assets@/animationsamples/advanced_rinlocomotion/actor/rinactor.actor\"\nCreateActorInstance + startScript="ImportActor -filename \"@products@/animationsamples/advanced_rinlocomotion/actor/rinactor.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.020660 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000, - 0.00000000,0.00000000,0.99997193\n LoadMotionSet -filename \"@assets@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.motionset\" - \nLoadAnimGraph -filename \"@assets@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.animgraph\" + 0.00000000,0.00000000,0.99997193\n LoadMotionSet -filename \"@products@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.motionset\" + \nLoadAnimGraph -filename \"@products@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.animgraph\" \nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" */ - AZStd::regex pathRegex(R"(\s+-filename\s+\\\"(?:@assets@\/)?(\S+)\\\")"); + AZStd::regex pathRegex(R"(\s+-filename\s+\\\"(?:@products@\/)?(\S+)\\\")"); AZStd::smatch matches; AZStd::string::const_iterator searchStart = charBuffer.begin(); while (AZStd::regex_search(searchStart, matches, pathRegex)) diff --git a/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp b/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp index 95a908b20c..00e9eaf0fe 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -29,7 +30,7 @@ namespace LevelBuilder { const char s_materialExtension[] = ".mtl"; - const char s_audioControlFilesLevelPath[] = "@devassets@/libs/gameaudio/wwise/levels/%s"; + const char s_audioControlFilesLevelPath[] = "@projectroot@/libs/gameaudio/wwise/levels/%s"; const char s_audioControlFilter[] = "*.xml"; AZ::u64 readXmlDataLength(AZ::IO::GenericStream* stream, int& charSize) @@ -155,35 +156,17 @@ namespace LevelBuilder { PopulateOptionalLevelDependencies(sourceRelativeFile, productPathDependencies); - AZStd::binary_semaphore extractionCompleteSemaphore; - auto extractResponseLambda = [&]([[maybe_unused]] bool success) { - AZStd::string levelsubfolder; - AzFramework::StringFunc::Path::Join(tempDirectory.c_str(), "level", levelsubfolder); + std::future extractResult; + AzToolsFramework::ArchiveCommandsBus::BroadcastResult( + extractResult, &AzToolsFramework::ArchiveCommandsBus::Events::ExtractArchive, levelPakFile, tempDirectory); - PopulateLevelSliceDependencies(levelsubfolder, productDependencies, productPathDependencies); - PopulateMissionDependencies(levelPakFile, levelsubfolder, productPathDependencies); - PopulateLevelAudioControlDependencies(levelPakFile, productPathDependencies); + extractResult.wait(); - extractionCompleteSemaphore.release(); - }; + auto levelsubfolder = AZ::IO::Path(tempDirectory) / "level"; - AZ::Uuid handle = AZ::Uuid::Create(); - AzToolsFramework::ArchiveCommands::Bus::Broadcast( - &AzToolsFramework::ArchiveCommands::ExtractArchive, - levelPakFile, - tempDirectory, - handle, - extractResponseLambda); - - const int archiveExtractSleepMS = 20; - bool extractionCompleted = false; - while (!extractionCompleted) - { - extractionCompleted = extractionCompleteSemaphore.try_acquire_for(AZStd::chrono::milliseconds(archiveExtractSleepMS)); - // When the archive extraction is completed, the response lambda is queued on the the tick bus. - // This loop will keep executing queued events on the tickbus until the response unlocks the semaphore. - AZ::TickBus::ExecuteQueuedEvents(); - } + PopulateLevelSliceDependencies(levelsubfolder.Native(), productDependencies, productPathDependencies); + PopulateMissionDependencies(levelPakFile, levelsubfolder.Native(), productPathDependencies); + PopulateLevelAudioControlDependencies(levelPakFile, productPathDependencies); } AZStd::string GetLastFolderFromPath(const AZStd::string& path) diff --git a/Gems/LmbrCentral/Code/Source/Builders/LuaBuilder/LuaBuilderWorker.h b/Gems/LmbrCentral/Code/Source/Builders/LuaBuilder/LuaBuilderWorker.h index 1d3a61626b..6f2aeecb8f 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/LuaBuilder/LuaBuilderWorker.h +++ b/Gems/LmbrCentral/Code/Source/Builders/LuaBuilder/LuaBuilderWorker.h @@ -7,10 +7,14 @@ */ #pragma once -#include -#include #include #include +#include +#include +namespace AZ +{ + class ScriptContext; +} namespace LuaBuilder { @@ -39,6 +43,10 @@ namespace LuaBuilder JobStepOutcome RunCompileJob(const AssetBuilderSDK::ProcessJobRequest& request); JobStepOutcome RunCopyJob(const AssetBuilderSDK::ProcessJobRequest& request); - JobStepOutcome WriteAssetInfo(const AssetBuilderSDK::ProcessJobRequest& request, AZStd::string_view destFileName, AZStd::string_view debugName, AZ::ScriptContext& scriptContext); + JobStepOutcome WriteAssetInfo( + const AssetBuilderSDK::ProcessJobRequest& request, + AZStd::string_view destFileName, + AZStd::string_view debugName, + AZ::ScriptContext& scriptContext); }; -} +} // namespace LuaBuilder diff --git a/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp b/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp index c06b21337b..48973b2779 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp @@ -28,7 +28,7 @@ namespace MaterialBuilder const char g_nodeNameTexture[] = "Texture"; const char g_nodeNameTextures[] = "Textures"; const char g_attributeFileName[] = "File"; - + const int g_numSourceImageFormats = 9; const char* g_sourceImageFormats[g_numSourceImageFormats] = { ".tif", ".tiff", ".bmp", ".gif", ".jpg", ".jpeg", ".tga", ".png", ".dds" }; bool IsSupportedImageExtension(const AZStd::string& extension) @@ -66,7 +66,7 @@ namespace MaterialBuilder return actualFileName; } - // Parses the material XML for all texture paths + // Parses the material XML for all texture paths AZ::Outcome GetTexturePathsFromMaterial(AZ::rapidxml::xml_node* materialNode, AZStd::vector& paths) { AZ::Outcome resultOutcome = AZ::Failure(AZStd::string("")); @@ -94,7 +94,7 @@ namespace MaterialBuilder // do an initial clean-up of the path taken from the file, similar to MaterialHelpers::SetTexturesFromXml AZStd::string texturePath = CleanLegacyPathingFromTexturePath(rawTexturePath); paths.emplace_back(AZStd::move(texturePath)); - } + } textureNode = textureNode->next_sibling(g_nodeNameTexture); } while (textureNode); @@ -112,7 +112,7 @@ namespace MaterialBuilder return AZ::Failure(AZStd::string("SubMaterials node exists but does not have any child Material nodes.")); } - do + do { // grab the texture paths from the submaterial, or error out if necessary AZ::Outcome subMaterialTexturePathsResult = GetTexturePathsFromMaterial(subMaterialNode, paths); @@ -142,7 +142,7 @@ namespace MaterialBuilder } // find a sequence of digits with a string starting from lastDigitIndex, and try to parse that sequence to and int - // and store it in outAnimIndex. + // and store it in outAnimIndex. bool ParseFilePathForCompleteNumber(const AZStd::string& filePath, int& lastDigitIndex, int& outAnimIndex) { int firstAnimIndexDigit = lastDigitIndex; @@ -162,7 +162,7 @@ namespace MaterialBuilder AZ::Outcome GetAllTexturesInTextureSequence(const AZStd::string& path, AZStd::vector& texturesInSequence) { // Taken from CShaderMan::mfReadTexSequence - // All comments next to variable declarations in this function are the original variable names in + // All comments next to variable declarations in this function are the original variable names in // CShaderMan::mfReadTexSequence, to help keep track of how these variables relate to the original function AZStd::string prefix; AZStd::string postfix; @@ -172,7 +172,7 @@ namespace MaterialBuilder AzFramework::StringFunc::Path::GetExtension(filePath.c_str(), extension); AzFramework::StringFunc::Path::StripExtension(filePath); - // unsure if it is actually possible to enter here or the original version with '$' as the indicator + // unsure if it is actually possible to enter here or the original version with '$' as the indicator // for texture sequences, but they check for both just in case, so this will match the behavior. char separator = '#'; // chSep int firstSeparatorIndex = static_cast(filePath.find(separator)); @@ -186,7 +186,7 @@ namespace MaterialBuilder separator = '$'; } - // we don't actually care about getting the speed of the animation, so just remove everything from the + // we don't actually care about getting the speed of the animation, so just remove everything from the // end of the string starting with the last open parenthesis size_t speedStartIndex = filePath.find_last_of('('); if (speedStartIndex != AZStd::string::npos) @@ -195,7 +195,7 @@ namespace MaterialBuilder AzFramework::StringFunc::Append(filePath, '\0'); } - // try to find where the digits start after the separator (there can be any number of separators + // try to find where the digits start after the separator (there can be any number of separators // between the texture name prefix and where the digit range starts) int firstAnimIndexDigit = -1; // m int numSeparators = 0; // j @@ -219,7 +219,7 @@ namespace MaterialBuilder { return AZ::Failure(AZStd::string("Failed to find separator '#' or '$' in texture path.")); } - + // store off everything before the separator prefix = AZStd::move(filePath.substr(0, firstSeparatorIndex)); @@ -242,7 +242,7 @@ namespace MaterialBuilder // reset to the start of the next index ++lastDigitIndex; - + // find the length of the end index, then parse that to an int if (!ParseFilePathForCompleteNumber(filePath, lastDigitIndex, endAnimIndex)) { @@ -262,8 +262,8 @@ namespace MaterialBuilder return AZ::Success(); } - - // Determine which product path to use based on the path stored in the texture, and make it relative to + + // Determine which product path to use based on the path stored in the texture, and make it relative to // the cache. bool ResolveMaterialTexturePath(const AZStd::string& path, AZStd::string& outPath) { @@ -272,7 +272,7 @@ namespace MaterialBuilder //if its a source image format try to load the dds AZStd::string extension; bool hasExtension = AzFramework::StringFunc::Path::GetExtension(path.c_str(), extension); - + // Replace all supported extensions with DDS if it has an extension. If the extension exists but is not supported, fail out. if (hasExtension && IsSupportedImageExtension(extension)) { @@ -286,17 +286,17 @@ namespace MaterialBuilder AZStd::to_lower(aliasedPath.begin(), aliasedPath.end()); AzFramework::StringFunc::Path::Normalize(aliasedPath); - + AZStd::string currentFolderSpecifier = AZStd::string::format(".%c", AZ_CORRECT_FILESYSTEM_SEPARATOR); if (AzFramework::StringFunc::StartsWith(aliasedPath, currentFolderSpecifier)) { AzFramework::StringFunc::Strip(aliasedPath, currentFolderSpecifier.c_str(), false, true); } - + AZStd::string resolvedPath; char fullPathBuffer[AZ_MAX_PATH_LEN] = {}; - // if there is an alias already at the front of the path, resolve it, and try to make it relative to the - // cache (@assets@). If it can't, then error out. + // if there is an alias already at the front of the path, resolve it, and try to make it relative to the + // cache (@products@). If it can't, then error out. // This case handles the possibility of aliases existing in texture paths in materials that is still supported // by the legacy loading code, however it is not currently used, so the else path is always taken. if (aliasedPath[0] == '@') @@ -308,7 +308,7 @@ namespace MaterialBuilder } resolvedPath = fullPathBuffer; AzFramework::StringFunc::Path::Normalize(resolvedPath); - if (!AzFramework::StringFunc::Replace(resolvedPath, AZ::IO::FileIOBase::GetDirectInstance()->GetAlias("@assets@"), "")) + if (!AzFramework::StringFunc::Replace(resolvedPath, AZ::IO::FileIOBase::GetDirectInstance()->GetAlias("@products@"), "")) { AZ_Warning(s_materialBuilder, false, "Failed to resolve aliased texture path %s to be relative to the asset cache. Please make sure this alias resolves to a path within the asset cache.", aliasedPath.c_str()); return false; @@ -318,7 +318,7 @@ namespace MaterialBuilder { resolvedPath = AZStd::move(aliasedPath); } - + // AP deferred path resolution requires UNIX separators and no leading separators, so clean up and convert here if (AzFramework::StringFunc::StartsWith(resolvedPath, AZ_CORRECT_FILESYSTEM_SEPARATOR_STRING)) { @@ -357,7 +357,7 @@ namespace MaterialBuilder // (optimization) this builder does not emit source dependencies: builderDescriptor.m_flags |= AssetBuilderSDK::AssetBuilderDesc::BF_EmitsNoDependencies; - + m_materialBuilder.BusConnect(builderDescriptor.m_busId); EBUS_EVENT(AssetBuilderSDK::AssetBuilderBus, RegisterBuilderInformation, builderDescriptor); @@ -548,10 +548,10 @@ namespace MaterialBuilder } } - // for each texture in the file + // for each texture in the file for (const AZStd::string& texPath : texturePaths) { - // if the texture path starts with a '$' then it is a special runtime defined texture, so it it doesn't have + // if the texture path starts with a '$' then it is a special runtime defined texture, so it it doesn't have // an actual asset on disk to depend on. If the texture path doesn't have an extension, then it is a texture // that is determined at runtime (such as 'nearest_cubemap'), so also ignore those, as other things pull in // those dependencies. @@ -567,7 +567,7 @@ namespace MaterialBuilder AZ_Warning(s_materialBuilder, false, "Failed to resolve texture path %s to a product path when gathering dependencies for %s. Registering dependencies on this texture path will be skipped.", texPath.c_str(), path.c_str()); continue; } - + resolvedPaths.emplace_back(AZStd::move(resolvedPath)); } diff --git a/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp b/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp index 20386e0628..c9fc656488 100644 --- a/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp @@ -22,7 +22,7 @@ namespace LmbrCentral { - const char bundleRoot[] = "@assets@"; + const char bundleRoot[] = "@products@"; void BundlingSystemComponent::Activate() { @@ -178,7 +178,7 @@ namespace LmbrCentral // Not already opened, new entry m_openedBundles[bundleName] = AZStd::make_unique(); - AZStd::shared_ptr nextCatalog; // Not all bundles will have catalogs - some are legacy. + AZStd::shared_ptr nextCatalog; // Not all bundles will have catalogs - some are legacy. if (nextBundle == nullptr) { // Added to the end diff --git a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp index 31cf68e9a0..a5884ccce9 100644 --- a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp +++ b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp @@ -484,7 +484,7 @@ namespace LmbrCentral } // load the catalog from disk (supported over VFS). - EBUS_EVENT(AZ::Data::AssetCatalogRequestBus, LoadCatalog, AZStd::string::format("@assets@/%s", s_assetCatalogFilename).c_str()); + EBUS_EVENT(AZ::Data::AssetCatalogRequestBus, LoadCatalog, AZStd::string::format("@products@/%s", s_assetCatalogFilename).c_str()); } void LmbrCentralSystemComponent::OnCrySystemShutdown([[maybe_unused]] ISystem& system) diff --git a/Gems/LmbrCentral/Code/Source/Scripting/EditorSpawnerComponent.cpp b/Gems/LmbrCentral/Code/Source/Scripting/EditorSpawnerComponent.cpp index 315480c869..f43b69f703 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/EditorSpawnerComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Scripting/EditorSpawnerComponent.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include diff --git a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp index 5305a68d84..f79dc3f598 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include diff --git a/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp b/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp index 65847a7fef..8b697f35f2 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp @@ -69,7 +69,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); SerializeContext* serializeContext; ComponentApplicationBus::BroadcastResult(serializeContext, &ComponentApplicationRequests::GetSerializeContext); @@ -114,7 +114,7 @@ namespace UnitTest { AssetBuilderSDK::ProductPathDependencySet resolvedPaths; AZStd::vector productDependencies; - + AssetBuilderSDK::ProcessJobRequest request; request.m_fullPath = GetFullPath(fileName); request.m_sourceFile = fileName; @@ -211,8 +211,6 @@ namespace UnitTest ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::AssetSystem::AssetSystemRequestBus::Handler overrides - const char* GetAbsoluteDevGameFolderPath() override { return ""; } - const char* GetAbsoluteDevRootFolderPath() override { return ""; } bool GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath) override { return true; } bool GenerateRelativeSourcePath( [[maybe_unused]] const AZStd::string& sourcePath, [[maybe_unused]] AZStd::string& relativePath, @@ -428,7 +426,7 @@ namespace UnitTest "Fonts/fontexample-bolditalic.font" }; - AZStd::string fileName = "Fonts/FontFamilyExample.fontfamily"; + AZStd::string fileName = "Fonts/FontFamilyExample.fontfamily"; FontBuilderWorker builderWorker; @@ -445,7 +443,7 @@ namespace UnitTest AZStd::string fileName = "Fonts/FontExample.font"; FontBuilderWorker builderWorker; - + TestSuccessCase(&builderWorker, fileName, "Fonts/FontExample.ttf"); } @@ -667,7 +665,7 @@ namespace UnitTest builderWorker.AddSchemaFileDirectory(GetFullPath("Xmls/Schema/WithoutVersionConstraints/OptionalAttribute")); AZStd::vector expectedProductDependencies; - + TestSuccessCase(&builderWorker, fileName, expectedPaths, expectedProductDependencies); } @@ -896,7 +894,7 @@ namespace UnitTest AssetBuilderSDK::CreateJobsResponse response; request.m_sourceFile = "Tests/Xmls/XmlExampleWithoutVersion.xml"; - request.m_watchFolder = "@root@/../Gems/LmbrCentral/Code/"; + request.m_watchFolder = "@engroot@/Gems/LmbrCentral/Code/"; XmlBuilderWorker builderWorker; builderWorker.AddSchemaFileDirectory(GetFullPath("Xmls/Schema/WithoutVersionConstraints/FullFeatured")); diff --git a/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp b/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp index 1fd17e25ce..e50fbbe56c 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp @@ -104,7 +104,7 @@ namespace UnitTest m_app.Start(m_descriptor); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); AZ::Debug::TraceMessageBus::Handler::BusConnect(); @@ -114,7 +114,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); auto* serializeContext = m_app.GetSerializeContext(); @@ -142,7 +142,7 @@ namespace UnitTest AZStd::string GetTestFileAliasedPath(AZStd::string_view fileName) { - constexpr char testFileFolder[] = "@devroot@/Gems/LmbrCentral/Code/Tests/Levels/"; + constexpr char testFileFolder[] = "@engroot@/Gems/LmbrCentral/Code/Tests/Levels/"; return AZStd::string::format("%s%.*s", testFileFolder, aznumeric_cast(fileName.size()), fileName.data()); } diff --git a/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp index 9e077c113c..a9b36d4624 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp @@ -36,7 +36,7 @@ namespace UnitTest m_app.Start(m_descriptor); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -45,7 +45,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); } void TearDown() override diff --git a/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp index 225168ecaa..3786ef7565 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp @@ -35,7 +35,7 @@ namespace UnitTest m_app.reset(aznew AzToolsFramework::ToolsApplication); m_app->Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); AZ::Debug::TraceMessageBus::Handler::BusConnect(); @@ -45,8 +45,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); } void TearDown() override @@ -128,8 +127,8 @@ namespace UnitTest TEST_F(MaterialBuilderTests, MaterialBuilder_MalformedMaterial_NoChildren_ExpectFailure) { - // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling - // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when both a Textures node and a + // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling + // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when both a Textures node and a // SubMaterials node are not found. No other AZ_Errors should be generated. TestFailureCase("test_mat2.mtl", 1); } @@ -141,7 +140,7 @@ namespace UnitTest TEST_F(MaterialBuilderTests, MaterialBuilder_MalformedMaterial_EmptySubMaterialNode_ExpectFailure) { - // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling + // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when a SubMaterials node is present, // but has no children Material node. No other AZ_Errors should be generated. TestFailureCase("test_mat4.mtl", 1); @@ -154,9 +153,9 @@ namespace UnitTest TEST_F(MaterialBuilderTests, MaterialBuilder_MalformedMaterial_EmptyMaterialInSubMaterial_ExpectFailure) { - // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling + // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when a SubMaterials node is present, - // but a child Material node has no child Textures node and no child SubMaterials node. No other AZ_Errors should + // but a child Material node has no child Textures node and no child SubMaterials node. No other AZ_Errors should // be generated. TestFailureCase("test_mat6.mtl", 1); } @@ -235,7 +234,7 @@ namespace UnitTest AZStd::vector expectedPaths = { "engineassets/textures/hex.dds", // resolved from "/engineassets/textures/hex.dds" "engineassets/textures/hex_ddn.dds", // resolved from "./engineassets/textures/hex_ddn.dds" - "engineassets/textures/hex_spec.dds" // resolved from "@assets@/engineassets/textures/hex_spec.dds" + "engineassets/textures/hex_spec.dds" // resolved from "@products@/engineassets/textures/hex_spec.dds" }; TestSuccessCase("test_mat17.mtl", expectedPaths); } diff --git a/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp index 0d70e34701..f679a3502d 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp @@ -24,16 +24,16 @@ class SeedBuilderTests AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path"; registry->Set(projectPathKey, "AutomatedTesting"); AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry); - + m_app.Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); const char* dir = m_app.GetExecutableFolder(); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", dir); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", dir); AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); } @@ -49,7 +49,7 @@ TEST_F(SeedBuilderTests, SeedBuilder_SourceDependency_Valid) { DependencyBuilder::SeedBuilderWorker seedBuilderWorker; AssetBuilderSDK::CreateJobsRequest request; - constexpr char testSeedFolder[] = "@root@/../Gems/LmbrCentral/Code/Tests/Seed"; + constexpr char testSeedFolder[] = "@engroot@/Gems/LmbrCentral/Code/Tests/Seed"; char resolvedPath[AZ_MAX_PATH_LEN]; AZ::IO::FileIOBase::GetInstance()->ResolvePath(testSeedFolder, resolvedPath, AZ_MAX_PATH_LEN); request.m_watchFolder = resolvedPath; @@ -78,7 +78,7 @@ TEST_F(SeedBuilderTests, SeedBuilder_EmptySourceDependency_Valid) { DependencyBuilder::SeedBuilderWorker seedBuilderWorker; AssetBuilderSDK::CreateJobsRequest request; - constexpr char testSeedFolder[] = "@root@/../Gems/LmbrCentral/Code/Tests/Seed"; + constexpr char testSeedFolder[] = "@engroot@/Gems/LmbrCentral/Code/Tests/Seed"; char resolvedPath[AZ_MAX_PATH_LEN]; AZ::IO::FileIOBase::GetInstance()->ResolvePath(testSeedFolder, resolvedPath, AZ_MAX_PATH_LEN); request.m_watchFolder = resolvedPath; diff --git a/Gems/LmbrCentral/Code/Tests/Builders/SliceBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/SliceBuilderTests.cpp index 647a5dedef..73ef7143c8 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/SliceBuilderTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/SliceBuilderTests.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp b/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp index 08251eb716..7275909908 100644 --- a/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp @@ -52,7 +52,7 @@ namespace UnitTest { return false; } - + AZ::Data::AssetInfo assetInfo; AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, testAssetId); return assetInfo.m_relativePath == assetPath; @@ -61,7 +61,7 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, HasBundle_LoadBundles_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below const char testAssetPath[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; @@ -74,7 +74,7 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, HasBundle_LoadBundlesCatalogChecks_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testAssetPath[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; @@ -94,34 +94,34 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, BundleSystemComponent_SingleUnloadCheckCatalog_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testCSVAsset[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; const char testCSVAssetPak[] = "test/bundle/staticdata.pak"; - // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak + // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak const char testDDSAsset[] = "textures/test/ping.dds"; const char testDDSAssetPak[] = "test/bundle/ping.pak"; EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testDDSAsset)); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testCSVAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testCSVAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testDDSAsset)); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testDDSAsset)); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testCSVAssetPak)); @@ -134,7 +134,7 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, BundleSystemComponent_SingleLoadAndBundleMode_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testCSVAsset[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; @@ -143,7 +143,7 @@ namespace UnitTest const char testMTLAssetPak[] = "test/TestMaterials.pak"; EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testMTLAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testMTLAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testMTLAssetPak)); EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testMTLAsset)); LmbrCentral::BundlingSystemRequestBus::Broadcast(&LmbrCentral::BundlingSystemRequestBus::Events::LoadBundles, "test/bundle", ".pak"); @@ -159,35 +159,35 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, BundleSystemComponent_OpenClosePackCount_Match) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testCSVAsset[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; const char testCSVAssetPak[] = "test/bundle/staticdata.pak"; - // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak + // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak const char testDDSAssetPak[] = "test/bundle/ping.pak"; size_t bundleCount{ 0 }; LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount,&LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 0); EXPECT_FALSE(TestAssetId(testCSVAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 1); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 0); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testCSVAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testCSVAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 1); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 1); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testCSVAssetPak)); @@ -208,7 +208,7 @@ namespace UnitTest LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 0); EXPECT_FALSE(TestAssetId(testDDSAsset_split)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(TestAssetId(testDDSAsset_split)); @@ -217,7 +217,7 @@ namespace UnitTest EXPECT_EQ(bundleCount, 0); EXPECT_FALSE(TestAssetId(testDDSAsset_split)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(TestAssetId(testDDSAsset_split)); @@ -240,7 +240,7 @@ namespace UnitTest EXPECT_FALSE(TestAssetId(testGamePropertiesAsset)); EXPECT_FALSE(TestAssetId(testUserRequestAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testGamePropertiesAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testGamePropertiesAssetPak)); EXPECT_TRUE(TestAssetId(testGamePropertiesAsset)); EXPECT_FALSE(TestAssetId(testUserRequestAsset)); AZ::Data::AssetId testAssetId; @@ -253,7 +253,7 @@ namespace UnitTest EXPECT_NE(assetInfo.m_sizeBytes, 0); AZ::u64 assetSize1 = assetInfo.m_sizeBytes; - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testUserRequestAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testUserRequestAssetPak)); EXPECT_TRUE(TestAssetId(testGamePropertiesAsset)); EXPECT_TRUE(TestAssetId(testUserRequestAsset)); @@ -271,13 +271,13 @@ namespace UnitTest EXPECT_FALSE(TestAssetId(testGamePropertiesAsset)); EXPECT_FALSE(TestAssetId(testUserRequestAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testUserRequestAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testUserRequestAssetPak)); AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, testAssetId); AZ::u64 assetSize3 = assetInfo.m_sizeBytes; EXPECT_EQ(assetSize3, assetSize2); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testGamePropertiesAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testGamePropertiesAssetPak)); AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, testAssetId); AZ::u64 assetSize4 = assetInfo.m_sizeBytes; EXPECT_EQ(assetSize4, assetSize1); diff --git a/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace b/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace index 6c7f7d3d87..0e92f9e83c 100644 --- a/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace +++ b/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/foo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00015891\nLoadMotionSet -filename \"@assets@/foo.motionset\"\nLoadAnimGraph -filename \"@assets@/foo.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" +startScript="ImportActor -filename \"@products@/foo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00015891\nLoadMotionSet -filename \"@products@/foo.motionset\"\nLoadAnimGraph -filename \"@products@/foo.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" diff --git a/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl b/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl index 099e006f4c..c3d0ddcf61 100644 --- a/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl +++ b/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl @@ -2,7 +2,7 @@ - +
diff --git a/Gems/LmbrCentral/gem.json b/Gems/LmbrCentral/gem.json index 36de4c4ed3..9fca421538 100644 --- a/Gems/LmbrCentral/gem.json +++ b/Gems/LmbrCentral/gem.json @@ -15,6 +15,6 @@ ], "icon_path": "preview.png", "requirements": "", - "documentation_url": "https://o3de.org/docs/user-guide/gems/reference/core/lmbr-central/", + "documentation_url": "https://o3de.org/docs/user-guide/gems/reference/o3de-core/", "dependencies": [] } diff --git a/Gems/LyShine/Code/Editor/EditorMenu.cpp b/Gems/LyShine/Code/Editor/EditorMenu.cpp index 8a6c93de6b..0eeec9a06e 100644 --- a/Gems/LyShine/Code/Editor/EditorMenu.cpp +++ b/Gems/LyShine/Code/Editor/EditorMenu.cpp @@ -606,7 +606,7 @@ void EditorWindow::AddMenu_View() [this]([[maybe_unused]] bool checked) { // Clear guides - AZStd::string canvasUndoXml = CanvasHelpers::BeginUndoableCanvasChange(GetCanvas()); + AZStd::string canvasUndoXml = CanvasHelpers::BeginUndoableCanvasChange(GetCanvas()); EBUS_EVENT_ID(GetCanvas(), UiEditorCanvasBus, RemoveAllGuides); CanvasHelpers::EndUndoableCanvasChange(this, "clear guides", canvasUndoXml); }); @@ -724,7 +724,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) // Iterate through the subdirectories of the localization folder. Each // directory corresponds to a different language containing localization // translations for that language. - AZStd::string fullLocPath(AZStd::string(gEnv->pFileIO->GetAlias("@assets@")) + "/" + AZStd::string(m_startupLocFolderName.toUtf8().constData())); + AZStd::string fullLocPath(AZStd::string(gEnv->pFileIO->GetAlias("@products@")) + "/" + AZStd::string(m_startupLocFolderName.toUtf8().constData())); QDir locDir(fullLocPath.c_str()); locDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); locDir.setSorting(QDir::Name); @@ -733,7 +733,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) { QString directoryName(subDirectory.fileName().toLower()); - // The loc system expects XML assets stored in a language-specific + // The loc system expects XML assets stored in a language-specific // folder with an "_xml" suffix in the name. Truncate the displayed // name so the user just sees the language name (this isn't required // though). @@ -754,7 +754,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) { // First try to locate the directory by name, without the "_xml" // suffix (in case it actually exists by this name). - QString fullLocPath(QString(gEnv->pFileIO->GetAlias("@assets@")) + "/" + m_startupLocFolderName + "/" + directoryName); + QString fullLocPath(QString(gEnv->pFileIO->GetAlias("@products@")) + "/" + m_startupLocFolderName + "/" + directoryName); QDir locDir(fullLocPath); // Try the directory with the expected suffix @@ -780,7 +780,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) "This used to be set to CSystem::OnLocalizationFolderCVarChanged but is now missing. " "UI Editor language-switching features are no longer working."); } - + // Update the language setting; this will allow font families to // load language-specific font assets ICVar* languageCvar = gEnv->pConsole->GetCVar("g_language"); diff --git a/Gems/LyShine/Code/Editor/UiSliceManager.cpp b/Gems/LyShine/Code/Editor/UiSliceManager.cpp index 97e9a51e11..a8fdad5343 100644 --- a/Gems/LyShine/Code/Editor/UiSliceManager.cpp +++ b/Gems/LyShine/Code/Editor/UiSliceManager.cpp @@ -138,7 +138,7 @@ void UiSliceManager::MakeSliceFromEntities(AzToolsFramework::EntityIdList& entit // expand the list of entities to include all child entities AzToolsFramework::EntityIdSet entitiesAndDescendants = GatherEntitiesAndAllDescendents(entities); - const AZStd::string slicesAssetsPath = "@devassets@/UI/Slices"; + const AZStd::string slicesAssetsPath = "@projectroot@/UI/Slices"; if (!gEnv->pFileIO->Exists(slicesAssetsPath.c_str())) { @@ -991,13 +991,13 @@ AZStd::string UiSliceManager::MakeTemporaryFilePathForSave(const char* targetFil AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); AZ_Assert(fileIO, "File IO is not initialized."); - AZStd::string devAssetPath = fileIO->GetAlias("@devassets@"); + AZStd::string devAssetPath = fileIO->GetAlias("@projectroot@"); AZStd::string userPath = fileIO->GetAlias("@user@"); AZStd::string tempPath = targetFilename; EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, devAssetPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, userPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, tempPath); - AzFramework::StringFunc::Replace(tempPath, "@devassets@", devAssetPath.c_str()); + AzFramework::StringFunc::Replace(tempPath, "@projectroot@", devAssetPath.c_str()); AzFramework::StringFunc::Replace(tempPath, devAssetPath.c_str(), userPath.c_str()); tempPath.append(".slicetemp"); diff --git a/Gems/LyShine/Code/Source/UiCanvasManager.cpp b/Gems/LyShine/Code/Source/UiCanvasManager.cpp index a71c46d45e..f2397248b6 100644 --- a/Gems/LyShine/Code/Source/UiCanvasManager.cpp +++ b/Gems/LyShine/Code/Source/UiCanvasManager.cpp @@ -67,7 +67,7 @@ namespace // Check if extension needs to be fixed up const AZStd::string canvasExtension("uicanvas"); - bool validExtension = AzFramework::StringFunc::Path::IsExtension(assetPath.c_str(), canvasExtension.c_str(), true); + bool validExtension = AzFramework::StringFunc::Path::IsExtension(assetPath.c_str(), canvasExtension.c_str(), true); if (!validExtension) { // Fix extension @@ -79,7 +79,7 @@ namespace // Normalize path EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePathKeepCase, assetPath); - // Check for any leading slashes as the specified path should be a relative path to the @assets@ alias. + // Check for any leading slashes as the specified path should be a relative path to the @products@ alias. // This eliminates inconsistencies between lower level file opens on different platforms int numCharsToErase = 0; for (; numCharsToErase < assetPath.length(); ++numCharsToErase) @@ -581,7 +581,7 @@ void UiCanvasManager::UpdateLoadedCanvases(float deltaTime) // Update all the canvases loaded in game. // It is unlikely this will call out to client code that could remove a canvas but we have no - // control over what custom components do so we increment the count that will defer all canvas deletion + // control over what custom components do so we increment the count that will defer all canvas deletion m_recursionGuardCount++; if (m_generateMousePositionInputEvent) { @@ -1087,7 +1087,7 @@ void UiCanvasManager::DebugDisplayCanvasData(int setting) const } const char* enabledString = isCanvasEnabled ? "Y" : "N"; totalEnabled += isCanvasEnabled ? 1 : 0; - + bool posEnabled = canvas->GetIsPositionalInputSupported(); const char* posEnabledString = posEnabled ? "Y" : "N"; totalPositionalInputs += posEnabled ? 1 : 0; @@ -1178,7 +1178,7 @@ void UiCanvasManager::DebugDisplayDrawCallData() const const AZ::Vector3 blue(0.3f,0.3f,1); const AZ::Vector3 green(0.3f,1,0.3f); const AZ::Vector3 yellow(0.7f,0.7f,0.2f); - + // local function to write a line of text (with a background rect) and increment Y offset AZStd::function WriteLine = [&](const char* buffer, const AZ::Vector3& color) { @@ -1191,7 +1191,7 @@ void UiCanvasManager::DebugDisplayDrawCallData() const draw2d->DrawText(buffer, AZ::Vector2(xOffset, yOffset), 16, textOpacity, &textOptions); yOffset += lineSpacing; }; - + char buffer[200]; sprintf_s(buffer, "NN: %20s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s", diff --git a/Gems/LyShine/Code/Source/UiSpawnerComponent.cpp b/Gems/LyShine/Code/Source/UiSpawnerComponent.cpp index e9e4e4539f..6eb04b3684 100644 --- a/Gems/LyShine/Code/Source/UiSpawnerComponent.cpp +++ b/Gems/LyShine/Code/Source/UiSpawnerComponent.cpp @@ -7,6 +7,7 @@ */ #include "UiSpawnerComponent.h" +#include #include #include #include diff --git a/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp b/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp index ff4e054ac7..60074ac0a0 100644 --- a/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp +++ b/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp @@ -60,7 +60,7 @@ AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); using namespace AZ; using ::testing::NiceMock; -class LyShineSystemTestComponent +class LyShineSystemTestComponent : public LyShine::LyShineSystemComponent { friend class LyShineEditorTest; @@ -90,18 +90,18 @@ protected: m_app.Start(m_descriptor); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); const AZStd::string engineRoot = AZ::Test::GetEngineRootPath(); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@engroot@", engineRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@engroot@", engineRoot.c_str()); AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); AZ::SerializeContext* context = nullptr; ComponentApplicationBus::BroadcastResult(context, &ComponentApplicationBus::Events::GetSerializeContext); diff --git a/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp b/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp index 104118e4bf..40fed3448b 100644 --- a/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp +++ b/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp @@ -127,21 +127,21 @@ namespace MessagePopup switch (_buttons) { case EPopupButtons::EPopupButtons_NoButtons: - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/defaultmessagepopup.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/defaultmessagepopup.uicanvas"); break; case EPopupButtons::EPopupButtons_Confirm: - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/defaultmessagepopup_confirm.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/defaultmessagepopup_confirm.uicanvas"); isNavigationSupported = true; break; case EPopupButtons::EPopupButtons_YesNo: - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/defaultmessagepopup_yesno.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/defaultmessagepopup_yesno.uicanvas"); isNavigationSupported = true; break; } } else if (_kind == EPopupKind_Toaster) { - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/toaster.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/toaster.uicanvas"); } if (canvasEntityId.IsValid()) diff --git a/Gems/Microphone/Code/Source/Platform/Windows/MicrophoneSystemComponent_Windows.cpp b/Gems/Microphone/Code/Source/Platform/Windows/MicrophoneSystemComponent_Windows.cpp index c182ec4f3b..e0b1f1ae36 100644 --- a/Gems/Microphone/Code/Source/Platform/Windows/MicrophoneSystemComponent_Windows.cpp +++ b/Gems/Microphone/Code/Source/Platform/Windows/MicrophoneSystemComponent_Windows.cpp @@ -225,7 +225,7 @@ namespace Audio AZStd::thread_desc threadDesc; threadDesc.m_name = "MicrophoneCapture-WASAPI"; auto captureFunc = AZStd::bind(&MicrophoneSystemComponentWindows::RunAudioCapture, this); - m_captureThread = AZStd::thread(captureFunc, &threadDesc); + m_captureThread = AZStd::thread(threadDesc, captureFunc); return true; } diff --git a/Gems/Multiplayer/Code/CMakeLists.txt b/Gems/Multiplayer/Code/CMakeLists.txt index 49b404fb1c..909590a25d 100644 --- a/Gems/Multiplayer/Code/CMakeLists.txt +++ b/Gems/Multiplayer/Code/CMakeLists.txt @@ -179,6 +179,10 @@ if (PAL_TRAIT_BUILD_TESTS_SUPPORTED) ly_add_googletest( NAME Gem::Multiplayer.Tests ) + ly_add_googlebenchmark( + NAME Gem::Multiplayer.Benchmarks + TARGET Gem::Multiplayer.Tests + ) if (PAL_TRAIT_BUILD_HOST_TOOLS) ly_add_target( diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Header.jinja b/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Header.jinja index 41f0fa1b02..5cfeb250fa 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Header.jinja +++ b/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Header.jinja @@ -403,6 +403,8 @@ namespace {{ Component.attrib['Namespace'] }} : public Multiplayer::MultiplayerController { public: + using ComponentType = {{ ComponentName }}; + {{ ControllerBaseName }}({{ ComponentName }}& owner); ~{{ ControllerBaseName }}() override = default; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h index 397406f3b5..bcbea6542f 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h @@ -83,8 +83,8 @@ namespace Multiplayer AZ::ScheduledEvent m_autonomousUpdateEvent; // Drives autonomous input collection AZ::ScheduledEvent m_updateBankedTimeEvent; // Drives authority bank time updates - EntityMigrationStartEvent::Handler m_migrateStartHandler; - EntityMigrationEndEvent::Handler m_migrateEndHandler; + ClientMigrationStartEvent::Handler m_migrateStartHandler; + ClientMigrationEndEvent::Handler m_migrateEndHandler; double m_moveAccumulator = 0.0; double m_clientBankedTime = 0.0; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h index c4ded8cc1c..8cc507c0a2 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h @@ -67,6 +67,9 @@ namespace Multiplayer //! @return reference to the requested component data, an empty container will be returned if the NetComponentId does not exist const ComponentData& GetMultiplayerComponentData(NetComponentId netComponentId) const; + //! This releases all owned memory, should only be called during multiplayer shutdown. + void Reset(); + private: NetComponentId m_nextNetComponentId = NetComponentId{ 0 }; AZStd::unordered_map m_componentData; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h index 743315e8bc..265137a078 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h @@ -32,9 +32,7 @@ namespace Multiplayer using EntityStopEvent = AZ::Event; using EntityDirtiedEvent = AZ::Event<>; using EntitySyncRewindEvent = AZ::Event<>; - using EntityMigrationStartEvent = AZ::Event; - using EntityMigrationEndEvent = AZ::Event<>; - using EntityServerMigrationEvent = AZ::Event; + using EntityServerMigrationEvent = AZ::Event; using EntityPreRenderEvent = AZ::Event; using EntityCorrectionEvent = AZ::Event<>; @@ -115,17 +113,13 @@ namespace Multiplayer void MarkDirty(); void NotifyLocalChanges(); void NotifySyncRewindState(); - void NotifyMigrationStart(ClientInputId migratedInputId); - void NotifyMigrationEnd(); - void NotifyServerMigration(HostId hostId, AzNetworking::ConnectionId connectionId); + void NotifyServerMigration(const HostId& hostId, AzNetworking::ConnectionId connectionId); void NotifyPreRender(float deltaTime); void NotifyCorrection(); void AddEntityStopEventHandler(EntityStopEvent::Handler& eventHandler); void AddEntityDirtiedEventHandler(EntityDirtiedEvent::Handler& eventHandler); void AddEntitySyncRewindEventHandler(EntitySyncRewindEvent::Handler& eventHandler); - void AddEntityMigrationStartEventHandler(EntityMigrationStartEvent::Handler& eventHandler); - void AddEntityMigrationEndEventHandler(EntityMigrationEndEvent::Handler& eventHandler); void AddEntityServerMigrationEventHandler(EntityServerMigrationEvent::Handler& eventHandler); void AddEntityPreRenderEventHandler(EntityPreRenderEvent::Handler& eventHandler); void AddEntityCorrectionEventHandler(EntityCorrectionEvent::Handler& handler); @@ -174,8 +168,6 @@ namespace Multiplayer EntityStopEvent m_entityStopEvent; EntityDirtiedEvent m_dirtiedEvent; EntitySyncRewindEvent m_syncRewindEvent; - EntityMigrationStartEvent m_entityMigrationStartEvent; - EntityMigrationEndEvent m_entityMigrationEndEvent; EntityServerMigrationEvent m_entityServerMigrationEvent; EntityPreRenderEvent m_entityPreRenderEvent; EntityCorrectionEvent m_entityCorrectionEvent; @@ -201,6 +193,7 @@ namespace Multiplayer friend class EntityReplicationManager; friend class HierarchyTests; + friend class HierarchyBenchmarkBase; }; bool NetworkRoleHasController(NetEntityRole networkRole); diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h index 9af22b1fdf..f0768f33f1 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h @@ -33,7 +33,6 @@ namespace Multiplayer }; typedef AZ::EBus NetworkCharacterRequestBus; - //! NetworkCharacterComponent //! Provides multiplayer support for game-play player characters. @@ -47,20 +46,11 @@ namespace Multiplayer AZ_MULTIPLAYER_COMPONENT(Multiplayer::NetworkCharacterComponent, s_networkCharacterComponentConcreteUuid, Multiplayer::NetworkCharacterComponentBase) static void Reflect(AZ::ReflectContext* context); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); NetworkCharacterComponent(); - static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) - { - incompatible.push_back(AZ_CRC_CE("NetworkRigidBodyService")); - } - - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - NetworkCharacterComponentBase::GetRequiredServices(required); - required.push_back(AZ_CRC_CE("PhysXCharacterControllerService")); - } - // AZ::Component void OnInit() override {} void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h index 4c9f94c004..674dc6114d 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h @@ -96,5 +96,7 @@ namespace Multiplayer //! Set to false when deactivating or otherwise not to be included in hierarchy considerations. bool m_isHierarchyEnabled = true; + + friend class HierarchyBenchmarkBase; }; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h index cec73b1b71..72fd00cad9 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h @@ -5,6 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + #pragma once #include @@ -60,10 +61,11 @@ namespace Multiplayer { public: NetworkRigidBodyComponentController(NetworkRigidBodyComponent& parent); - void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; - void HandleSendApplyImpulse(AzNetworking::IConnection* invokingConnection, const AZ::Vector3& impulse, const AZ::Vector3& worldPoint) override; + private: + void OnTransformUpdate(); + AZ::TransformChangedEvent::Handler m_transformChangedHandler; }; } // namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h index 35bf6e9f50..b0370e9027 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h @@ -50,7 +50,7 @@ namespace Multiplayer void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; private: - void OnTransformChangedEvent(const AZ::Transform& worldTm); + void OnTransformChangedEvent(const AZ::Transform& localTm, const AZ::Transform& worldTm); void OnParentIdChangedEvent(AZ::EntityId oldParent, AZ::EntityId newParent); AZ::TransformChangedEvent::Handler m_transformChangedHandler; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h index 66a7a1175a..e6c07ee847 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h @@ -40,8 +40,7 @@ namespace Multiplayer virtual EntityReplicationManager& GetReplicationManager() = 0; //! Creates and manages sending updates to the remote endpoint. - //! @param hostTimeMs current server game time in milliseconds - virtual void Update(AZ::TimeMs hostTimeMs) = 0; + virtual void Update() = 0; //! Returns whether update messages can be sent to the connection. //! @return true if update messages can be sent @@ -50,5 +49,13 @@ namespace Multiplayer //! Sets the state of connection whether update messages can be sent or not. //! @param canSendUpdates the state value virtual void SetCanSendUpdates(bool canSendUpdates) = 0; + + //! Fetches the state of connection whether handshake logic has completed + //! @return true if handshake has completed + virtual bool DidHandshake() const = 0; + + //! Sets the state of connection whether handshake logic has completed + //! @param didHandshake if handshake logic has completed + virtual void SetDidHandshake(bool didHandshake) = 0; }; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h b/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h index 66e39419e7..fc41a9b4d0 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h @@ -21,6 +21,14 @@ namespace Multiplayer virtual ~IEntityDomain() = default; + //! For domains that operate on a region of space, this sets the area the domain is responsible for. + //! @param aabb the aabb associated with this entity domain + virtual void SetAabb(const AZ::Aabb& aabb) = 0; + + //! Retrieves the aabb representing the domain area, an invalid aabb will be returned for non-spatial domains. + //! @return the aabb associated with this entity domain + virtual const AZ::Aabb& GetAabb() const = 0; + //! Returns whether or not an entity should be owned by an entity manager. //! @param entityHandle the handle of the netbound entity to check //! @return false if this entity should not belong to the entity manger, true if it could be owned by the entity manager @@ -31,8 +39,7 @@ namespace Multiplayer virtual void ActivateTracking(const INetworkEntityManager::OwnedEntitySet& ownedEntitySet) = 0; //! Return the set of netbound entities not included in this domain. - //! @param outEntitiesNotInDomain the set of known networked entities not included in this domain - virtual void RetrieveEntitiesNotInDomain(EntitiesNotInDomain& outEntitiesNotInDomain) const = 0; + virtual const EntitiesNotInDomain& RetrieveEntitiesNotInDomain() const = 0; //! Debug draw to visualize host entity domains. virtual void DebugDraw() const = 0; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h index e32a5bd0f3..19289e1e42 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h @@ -42,7 +42,11 @@ namespace Multiplayer AzNetworking::ByteBuffer<2048> m_userData; }; + using ClientMigrationStartEvent = AZ::Event; + using ClientMigrationEndEvent = AZ::Event<>; using ClientDisconnectedEvent = AZ::Event<>; + using NotifyClientMigrationEvent = AZ::Event; + using NotifyEntityMigrationEvent = AZ::Event; using ConnectionAcquiredEvent = AZ::Event; using ServerAcceptanceReceivedEvent = AZ::Event<>; using SessionInitEvent = AZ::Event; @@ -79,26 +83,42 @@ namespace Multiplayer //! @param state The state of this connection virtual void InitializeMultiplayer(MultiplayerAgentType state) = 0; - //! Starts hosting a server + //! Starts hosting a server. //! @param port The port to listen for connection on //! @param isDedicated Whether the server is dedicated or client hosted //! @return if the application successfully started hosting virtual bool StartHosting(uint16_t port, bool isDedicated = true) = 0; - //! Connects to the specified IP as a Client + //! Connects to the specified IP as a Client. //! @param remoteAddress The domain or IP to connect to //! @param port The port to connect to //! @result if a connection was successfully created - virtual bool Connect(AZStd::string remoteAddress, uint16_t port) = 0; + virtual bool Connect(const AZStd::string& remoteAddress, uint16_t port) = 0; - // Disconnects all multiplayer connections, stops listening on the server and invokes handlers appropriate to network context + // Disconnects all multiplayer connections, stops listening on the server and invokes handlers appropriate to network context. //! @param reason The reason for terminating connections virtual void Terminate(AzNetworking::DisconnectReason reason) = 0; - //! Adds a ClientDisconnectedEvent Handler which is invoked on the client when a disconnection occurs + //! Adds a ClientMigrationStartEvent Handler which is invoked at the start of a client migration. + //! @param handler The ClientMigrationStartEvent Handler to add + virtual void AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) = 0; + + //! Adds a ClientMigrationEndEvent Handler which is invoked when a client completes migration. + //! @param handler The ClientMigrationEndEvent Handler to add + virtual void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) = 0; + + //! Adds a ClientDisconnectedEvent Handler which is invoked on the client when a disconnection occurs. //! @param handler The ClientDisconnectedEvent Handler to add virtual void AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) = 0; + //! Adds a NotifyClientMigrationEvent Handler which is invoked when a client migrates from one host to another. + //! @param handler The NotifyClientMigrationEvent Handler to add + virtual void AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) = 0; + + //! Adds a NotifyEntityMigrationEvent Handler which is invoked when an entity migrates from one host to another. + //! @param handler The NotifyEntityMigrationEvent Handler to add + virtual void AddNotifyEntityMigrationEventHandler(NotifyEntityMigrationEvent::Handler& handler) = 0; + //! Adds a ConnectionAcquiredEvent Handler which is invoked when a new endpoint connects to the session. //! @param handler The ConnectionAcquiredEvent Handler to add virtual void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) = 0; @@ -115,7 +135,18 @@ namespace Multiplayer //! @param handler The SessionShutdownEvent handler to add virtual void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) = 0; - //! Sends a packet telling if entity update messages can be sent + //! Signals a NotifyClientMigrationEvent with the provided parameters. + //! @param hostId the host id of the host the client is migrating to + //! @param userIdentifier the user identifier the client will provide the new host to validate identity + //! @param lastClientInputId the last processed clientInputId by the current host + virtual void SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) = 0; + + //! Signals a NotifyEntityMigrationEvent with the provided parameters. + //! @param entityHandle the network entity handle of the entity being migrated + //! @param remoteHostId the host id of the host the entity is migrating to + virtual void SendNotifyEntityMigrationEvent(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) = 0; + + //! Sends a packet telling if entity update messages can be sent. //! @param readyForEntityUpdates Ready for entity updates or not virtual void SendReadyForEntityUpdates(bool readyForEntityUpdates) = 0; @@ -127,7 +158,7 @@ namespace Multiplayer //! @return the current server time in milliseconds virtual AZ::TimeMs GetCurrentHostTimeMs() const = 0; - //! Returns the current blend factor for client side interpolation + //! Returns the current blend factor for client side interpolation. //! This value is only relevant on the client and is used to smooth between host frames //! @return the current blend factor virtual float GetCurrentBlendFactor() const = 0; @@ -146,9 +177,21 @@ namespace Multiplayer //! @param entityFilter non-owning pointer, the caller is responsible for memory management. virtual void SetFilterEntityManager(IFilterEntityManager* entityFilter) = 0; - //! @return pointer to the user-defined filtering manager of entities. By default, this isn't set and returns nullptr. + //! Returns a pointer to the user-defined filtering manager of entities. + //! @return pointer to the filtered entity manager, or nullptr if not set virtual IFilterEntityManager* GetFilterEntityManager() = 0; + //! Enables or disables automatic instantiation of netbound entities. + //! This setting is controlled by the networking layer and should not be touched + //! If enabled, netbound entities will instantiate as spawnables are loaded into the game world, generally true for the server + //! If disabled, netbound entities will only stream from a host, always true for a client + //! @param value boolean value controlling netbound entity instantiation behaviour + virtual void SetShouldSpawnNetworkEntities(bool value) = 0; + + //! Retrieves the current network entity instantiation behaviour. + //! @return boolean true if netbound entities should be auto instantiated, false if not + virtual bool GetShouldSpawnNetworkEntities() const = 0; + //! Retrieve the stats object bound to this multiplayer instance. //! @return the stats object bound to this multiplayer instance MultiplayerStats& GetStats() { return m_stats; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h b/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h index 4ac20abc83..96035083d8 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -25,8 +26,8 @@ namespace Multiplayer //! The default blend factor for ScopedAlterTime static constexpr float DefaultBlendFactor = 1.f; - AZ_TYPE_SAFE_INTEGRAL(HostId, uint32_t); - static constexpr HostId InvalidHostId = static_cast(-1); + using HostId = AzNetworking::IpAddress; + static const HostId InvalidHostId = HostId(); AZ_TYPE_SAFE_INTEGRAL(NetEntityId, uint32_t); static constexpr NetEntityId InvalidNetEntityId = static_cast(-1); @@ -105,9 +106,11 @@ namespace Multiplayer struct EntityMigrationMessage { - NetEntityId m_entityId; + NetEntityId m_netEntityId; PrefabEntityId m_prefabEntityId; AzNetworking::PacketEncodingBuffer m_propertyUpdateData; + bool operator!=(const EntityMigrationMessage& rhs) const; + bool Serialize(AzNetworking::ISerializer& serializer); }; inline PrefabEntityId::PrefabEntityId(AZ::Name name, uint32_t entityOffset) @@ -133,9 +136,23 @@ namespace Multiplayer serializer.Serialize(m_entityOffset, "entityOffset"); return serializer.IsValid(); } + + inline bool EntityMigrationMessage::operator!=(const EntityMigrationMessage& rhs) const + { + return m_netEntityId != rhs.m_netEntityId + || m_prefabEntityId != rhs.m_prefabEntityId + || m_propertyUpdateData != rhs.m_propertyUpdateData; + } + + inline bool EntityMigrationMessage::Serialize(AzNetworking::ISerializer& serializer) + { + serializer.Serialize(m_netEntityId, "netEntityId"); + serializer.Serialize(m_prefabEntityId, "prefabEntityId"); + serializer.Serialize(m_propertyUpdateData, "propertyUpdateData"); + return serializer.IsValid(); + } } -AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::HostId); AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::NetEntityId); AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::NetComponentId); AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::PropertyIndex); @@ -145,7 +162,6 @@ AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::HostFrameId); namespace AZ { - AZ_TYPE_INFO_SPECIALIZE(Multiplayer::HostId, "{D04B3363-8E1B-4193-8B2B-D2140389C9D5}"); AZ_TYPE_INFO_SPECIALIZE(Multiplayer::NetEntityId, "{05E4C08B-3A1B-4390-8144-3767D8E56A81}"); AZ_TYPE_INFO_SPECIALIZE(Multiplayer::NetComponentId, "{8AF3B382-F187-4323-9014-B380638767E3}"); AZ_TYPE_INFO_SPECIALIZE(Multiplayer::PropertyIndex, "{F4460210-024D-4B3B-A10A-04B669C34230}"); diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h similarity index 89% rename from Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h rename to Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h index ef05e22e3e..2e1f83ae38 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h @@ -8,7 +8,8 @@ #pragma once -#include +#include +#include #include #include #include @@ -35,7 +36,9 @@ namespace Multiplayer { class IEntityDomain; class EntityReplicator; - + + using SendMigrateEntityEvent = AZ::Event; + //! @class EntityReplicationManager //! @brief Handles replication of relevant entities for one connection. class EntityReplicationManager final @@ -54,11 +57,11 @@ namespace Multiplayer EntityReplicationManager(AzNetworking::IConnection& connection, AzNetworking::IConnectionListener& connectionListener, Mode mode); ~EntityReplicationManager() = default; - void SetRemoteHostId(HostId hostId); - HostId GetRemoteHostId() const; + void SetRemoteHostId(const HostId& hostId); + const HostId& GetRemoteHostId() const; void ActivatePendingEntities(); - void SendUpdates(AZ::TimeMs hostTimeMs); + void SendUpdates(); void Clear(bool forMigration); bool SetEntityRebasing(NetworkEntityHandle& entityHandle); @@ -69,8 +72,8 @@ namespace Multiplayer bool HasRemoteAuthority(const ConstNetworkEntityHandle& entityHandle) const; - void SetEntityDomain(AZStd::unique_ptr entityDomain); - IEntityDomain* GetEntityDomain(); + void SetRemoteEntityDomain(AZStd::unique_ptr entityDomain); + IEntityDomain* GetRemoteEntityDomain(); void SetReplicationWindow(AZStd::unique_ptr replicationWindow); IReplicationWindow* GetReplicationWindow(); @@ -79,7 +82,8 @@ namespace Multiplayer void AddDeferredRpcMessage(NetworkEntityRpcMessage& rpcMessage); - void AddAutonomousEntityReplicatorCreatedHandle(AZ::Event::Handler& handler); + void AddAutonomousEntityReplicatorCreatedHandler(AZ::Event::Handler& handler); + void AddSendMigrateEntityEventHandler(SendMigrateEntityEvent::Handler& handler); bool HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message); bool HandleEntityDeleteMessage(EntityReplicator* entityReplicator, const AzNetworking::IPacketHeader& packetHeader, const NetworkEntityUpdateMessage& updateMessage); @@ -117,14 +121,12 @@ namespace Multiplayer using EntityReplicatorList = AZStd::deque; EntityReplicatorList GenerateEntityUpdateList(); - void SendEntityUpdatesPacketHelper(AZ::TimeMs hostTimeMs, EntityReplicatorList& toSendList, uint32_t maxPayloadSize, AzNetworking::IConnection& connection); - - void SendEntityUpdates(AZ::TimeMs hostTimeMs); - void SendEntityRpcs(RpcMessages& deferredRpcs, bool reliable); + void SendEntityUpdateMessages(EntityReplicatorList& replicatorList); + void SendEntityRpcs(RpcMessages& rpcMessages, bool reliable); void MigrateEntityInternal(NetEntityId entityId); void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle); - void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId); + void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId); EntityReplicator* AddEntityReplicator(const ConstNetworkEntityHandle& entityHandle, NetEntityRole netEntityRole); @@ -153,7 +155,6 @@ namespace Multiplayer { public: OrphanedEntityRpcs(EntityReplicationManager& replicationManager); - virtual ~OrphanedEntityRpcs() = default; void Update(); bool DispatchOrphanedRpcs(EntityReplicator& entityReplicator); void AddOrphanedRpc(NetEntityId entityId, NetworkEntityRpcMessage& entityRpcMessage); @@ -192,6 +193,8 @@ namespace Multiplayer AZ::Event m_autonomousEntityReplicatorCreated; EntityExitDomainEvent::Handler m_entityExitDomainEventHandler; + SendMigrateEntityEvent m_sendMigrateEntityEvent; + NotifyEntityMigrationEvent::Handler m_notifyEntityMigrationHandler; AZ::ScheduledEvent m_clearRemovedReplicators; AZ::ScheduledEvent m_updateWindow; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h similarity index 97% rename from Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.h rename to Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h index e4dc62bc26..d239682c93 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h @@ -66,6 +66,7 @@ namespace Multiplayer bool IsReadyToActivate() const; NetworkEntityUpdateMessage GenerateUpdatePacket(); + void FinalizeSerialization(AzNetworking::PacketId sentId); AZ::TimeMs GetResendTimeoutTimeMs() const; @@ -141,4 +142,4 @@ namespace Multiplayer }; } -#include +#include diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.inl b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.inl similarity index 100% rename from Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.inl rename to Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.inl diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h index 5bcf038eff..43915127ed 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h @@ -21,6 +21,7 @@ namespace Multiplayer class NetworkEntityAuthorityTracker; class NetworkEntityRpcMessage; class MultiplayerComponentRegistry; + class IEntityDomain; using EntityExitDomainEvent = AZ::Event; using ControllersActivatedEvent = AZ::Event; @@ -38,6 +39,19 @@ namespace Multiplayer virtual ~INetworkEntityManager() = default; + //! Configures the NetworkEntityManager to operate as an authoritative host. + //! @param hostId the hostId of this NetworkEntityManager + //! @param entityDomain the entity domain used to determine which entities this manager has authority over + virtual void Initialize(const HostId& hostId, AZStd::unique_ptr entityDomain) = 0; + + //! Returns whether or not the network entity manager has been initialized to host. + //! @return boolean true if this network entity manager has been intialized to host + virtual bool IsInitialized() const = 0; + + //! Returns the entity domain associated with this network entity manager, this will be nullptr on clients. + //! @return boolean the entity domain for this network entity manager + virtual IEntityDomain* GetEntityDomain() const = 0; + //! Returns the NetworkEntityTracker for this INetworkEntityManager instance. //! @return the NetworkEntityTracker for this INetworkEntityManager instance virtual NetworkEntityTracker* GetNetworkEntityTracker() = 0; @@ -52,7 +66,7 @@ namespace Multiplayer //! Returns the HostId for this INetworkEntityManager instance. //! @return the HostId for this INetworkEntityManager instance - virtual HostId GetHostId() const = 0; + virtual const HostId& GetHostId() const = 0; //! Creates new entities of the given archetype //! @param prefabEntryId the name of the spawnable to spawn @@ -166,5 +180,8 @@ namespace Multiplayer //! Handle a local rpc message. //! @param entityRpcMessage the local rpc message to handle virtual void HandleLocalRpcMessage(NetworkEntityRpcMessage& message) = 0; + + //! Visualization of network entity manager state. + virtual void DebugDraw() const = 0; }; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h index 8deb3d92ce..3281bd40e9 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h @@ -30,18 +30,8 @@ namespace Multiplayer //! Constructs a ConstNetworkEntityHandle given an entity, an entity tracker //! @param entity pointer to the entity to construct a ConstNetworkEntityHandle for //! @param entityTracker pointer to the entity tracker that tracks the entity - ConstNetworkEntityHandle(AZ::Entity* entity, const NetworkEntityTracker* entityTracker); - - //! Constructs a ConstNetworkEntityHandle given an entity, a networkEntityId, and an entity tracker - //! @param entity pointer to the entity to construct a ConstNetworkEntityHandle for - //! @param netEntityId the networkEntityId of the entity - //! @param entityTracker pointer to the entity tracker that tracks the entity - ConstNetworkEntityHandle(AZ::Entity* entity, NetEntityId netEntityId, const NetworkEntityTracker* entityTracker); - - //! Constructs a ConstNetworkEntityHandle given an entity, a networked entityId, an entity tracker, and a dirty version - //! @param netBindComponent pointer to the entities NetBindComponent - //! @param entityTracker pointer to the entity tracker that tracks the entity - ConstNetworkEntityHandle(NetBindComponent* netBindComponent, const NetworkEntityTracker* entityTracker); + //! can optionally be null in which case the entity tracker will be looked up + ConstNetworkEntityHandle(AZ::Entity* entity, const NetworkEntityTracker* entityTracker = nullptr); ConstNetworkEntityHandle(const ConstNetworkEntityHandle&) = default; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h index 9720de81eb..3f1d8e346c 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h @@ -103,6 +103,7 @@ namespace Multiplayer // Non-serialized RPC metadata ReliabilityType m_isReliable = ReliabilityType::Reliable; }; + using NetworkEntityRpcVector = AZStd::fixed_vector; struct IRpcParamStruct { diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h index 3c400d5a13..90f622a8ae 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h @@ -118,4 +118,5 @@ namespace Multiplayer // This is to prevent blowing out stack memory if we declare an array of these EntityUpdateMessages AZStd::unique_ptr m_data; }; + using NetworkEntityUpdateVector = AZStd::fixed_vector; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h b/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h index e2e4c5abfe..018d90eef3 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h @@ -10,10 +10,14 @@ #include #include +#include +#include #include namespace Multiplayer { + class EntityReplicator; + struct EntityReplicationData { EntityReplicationData() = default; @@ -21,6 +25,8 @@ namespace Multiplayer float m_priority = 0.0f; }; using ReplicationSet = AZStd::map; + using RpcMessages = AZStd::list; + using EntityReplicatorList = AZStd::deque; class IReplicationWindow { @@ -33,6 +39,8 @@ namespace Multiplayer virtual uint32_t GetMaxProxyEntityReplicatorSendCount() const = 0; virtual bool IsInWindow(const ConstNetworkEntityHandle& entityPtr, NetEntityRole& outNetworkRole) const = 0; virtual void UpdateWindow() = 0; + virtual AzNetworking::PacketId SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) = 0; + virtual void SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) = 0; virtual void DebugDraw() const = 0; }; } diff --git a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml index c553bc5351..091043f034 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml +++ b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml @@ -13,10 +13,9 @@ - - + @@ -32,16 +31,16 @@ - + - + - - + + diff --git a/Gems/Multiplayer/Code/Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml b/Gems/Multiplayer/Code/Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml new file mode 100644 index 0000000000..eff1b5e9cf --- /dev/null +++ b/Gems/Multiplayer/Code/Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml b/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml index b6cdfca9c2..a85f8c833f 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml +++ b/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml @@ -10,9 +10,11 @@ + + + - diff --git a/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp b/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp index c5f9b265f9..747f53d37b 100644 --- a/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp @@ -123,8 +123,8 @@ namespace Multiplayer if (IsAutonomous()) { m_autonomousUpdateEvent.Enqueue(AZ::TimeMs{ 1 }, true); - GetParent().GetNetBindComponent()->AddEntityMigrationStartEventHandler(m_migrateStartHandler); - GetParent().GetNetBindComponent()->AddEntityMigrationEndEventHandler(m_migrateEndHandler); + GetMultiplayer()->AddClientMigrationStartEventHandler(m_migrateStartHandler); + GetMultiplayer()->AddClientMigrationEndEventHandler(m_migrateEndHandler); } } diff --git a/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp b/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp index e0e180431c..d92f95f6d2 100644 --- a/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp +++ b/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp @@ -57,4 +57,9 @@ namespace Multiplayer } return nullComponentData; } + + void MultiplayerComponentRegistry::Reset() + { + m_componentData.clear(); + } } diff --git a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp index 634cac74b2..fbf83b6e6c 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp @@ -13,9 +13,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -58,7 +60,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity-> FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning( "NetBindComponent", false, "NetBindComponent IsNetEntityRoleAuthority failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -75,7 +77,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning("NetBindComponent", false, "NetBindComponent IsNetEntityRoleAutonomous failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -92,7 +94,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning("NetBindComponent", false, "NetBindComponent IsNetEntityRoleClient failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -109,7 +111,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning("NetBindComponent", false, "NetBindComponent IsNetEntityRoleServer failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -171,6 +173,8 @@ namespace Multiplayer { GetNetworkEntityManager()->NotifyControllersDeactivated(m_netEntityHandle, EntityIsMigrating::False); } + + GetNetworkEntityTracker()->UnregisterNetBindComponent(this); } NetEntityRole NetBindComponent::GetNetEntityRole() const @@ -390,17 +394,7 @@ namespace Multiplayer m_syncRewindEvent.Signal(); } - void NetBindComponent::NotifyMigrationStart(ClientInputId migratedInputId) - { - m_entityMigrationStartEvent.Signal(migratedInputId); - } - - void NetBindComponent::NotifyMigrationEnd() - { - m_entityMigrationEndEvent.Signal(); - } - - void NetBindComponent::NotifyServerMigration(HostId hostId, AzNetworking::ConnectionId connectionId) + void NetBindComponent::NotifyServerMigration(const HostId& hostId, AzNetworking::ConnectionId connectionId) { m_entityServerMigrationEvent.Signal(m_netEntityHandle, hostId, connectionId); } @@ -430,16 +424,6 @@ namespace Multiplayer eventHandler.Connect(m_syncRewindEvent); } - void NetBindComponent::AddEntityMigrationStartEventHandler(EntityMigrationStartEvent::Handler& eventHandler) - { - eventHandler.Connect(m_entityMigrationStartEvent); - } - - void NetBindComponent::AddEntityMigrationEndEventHandler(EntityMigrationEndEvent::Handler& eventHandler) - { - eventHandler.Connect(m_entityMigrationEndEvent); - } - void NetBindComponent::AddEntityServerMigrationEventHandler(EntityServerMigrationEvent::Handler& eventHandler) { eventHandler.Connect(m_entityServerMigrationEvent); @@ -522,6 +506,9 @@ namespace Multiplayer m_netEntityId = netEntityId; m_netEntityRole = netEntityRole; m_prefabEntityId = prefabEntityId; + + GetNetworkEntityTracker()->RegisterNetBindComponent(entity, this); + m_netEntityHandle = GetNetworkEntityManager()->AddEntityToEntityMap(m_netEntityId, entity); for (AZ::Component* component : entity->GetComponents()) diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp index 33eb26653a..7041f3ae9e 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -19,7 +20,7 @@ namespace Multiplayer { - + bool CollisionLayerBasedControllerFilter(const physx::PxController& controllerA, const physx::PxController& controllerB) { PHYSX_SCENE_READ_LOCK(controllerA.getActor()->getScene()); @@ -82,7 +83,7 @@ namespace Multiplayer return physx::PxQueryHitType::eNONE; } - + void NetworkCharacterComponent::Reflect(AZ::ReflectContext* context) { AZ::SerializeContext* serializeContext = azrtti_cast(context); @@ -95,6 +96,17 @@ namespace Multiplayer NetworkCharacterComponentController::Reflect(context); } + void NetworkCharacterComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) + { + NetworkCharacterComponentBase::GetRequiredServices(required); + required.push_back(AZ_CRC_CE("PhysXCharacterControllerService")); + } + + void NetworkCharacterComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("NetworkRigidBodyService")); + } + NetworkCharacterComponent::NetworkCharacterComponent() : m_translationEventHandler([this](const AZ::Vector3& translation) { OnTranslationChangedEvent(translation); }) { @@ -116,7 +128,7 @@ namespace Multiplayer callbackManager->SetObjectPreFilter(CollisionLayerBasedObjectPreFilter); } } - + if (!HasController()) { GetNetworkTransformComponent()->TranslationAddEvent(m_translationEventHandler); @@ -134,7 +146,7 @@ namespace Multiplayer } void NetworkCharacterComponent::OnSyncRewind() - { + { if (m_physicsCharacter == nullptr) { return; @@ -195,7 +207,7 @@ namespace Multiplayer // Ensure any entities that we might interact with are properly synchronized to their rewind state if (IsAuthority()) { - const AZ::Aabb entityStartBounds = AZ::Interface::Get()->GetEntityLocalBoundsUnion(GetEntity()->GetId()); + const AZ::Aabb entityStartBounds = AZ::Interface::Get()->GetEntityWorldBoundsUnion(GetEntity()->GetId()); const AZ::Aabb entityFinalBounds = entityStartBounds.GetTranslated(velocity); AZ::Aabb entitySweptBounds = entityStartBounds; entitySweptBounds.AddAabb(entityFinalBounds); diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp index 725ebc024c..7e25c8d34b 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp @@ -57,16 +57,13 @@ namespace Multiplayer NetworkRigidBodyRequestBus::Handler::BusConnect(GetEntityId()); GetNetBindComponent()->AddEntitySyncRewindEventHandler(m_syncRewindHandler); - GetEntity()->FindComponent()->BindTransformChangedEventHandler(m_transformChangedHandler); + GetEntity()->GetTransform()->BindTransformChangedEventHandler(m_transformChangedHandler); m_physicsRigidBodyComponent = Physics::RigidBodyRequestBus::FindFirstHandler(GetEntity()->GetId()); AZ_Assert(m_physicsRigidBodyComponent, "PhysX Rigid Body Component is required on entity %s", GetEntity()->GetName().c_str()); - - if (!HasController()) - { - m_physicsRigidBodyComponent->SetKinematic(true); - } + // By default we're kinematic, activating a controller will allow us to simulate + m_physicsRigidBodyComponent->SetKinematic(true); } void NetworkRigidBodyComponent::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) @@ -121,18 +118,26 @@ namespace Multiplayer NetworkRigidBodyComponentController::NetworkRigidBodyComponentController(NetworkRigidBodyComponent& parent) : NetworkRigidBodyComponentControllerBase(parent) + , m_transformChangedHandler([this](const AZ::Transform&, const AZ::Transform&) { OnTransformUpdate(); }) { ; } void NetworkRigidBodyComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) { - ; + GetParent().m_physicsRigidBodyComponent->SetKinematic(false); + if (IsAuthority()) + { + AzPhysics::RigidBody* rigidBody = GetParent().m_physicsRigidBodyComponent->GetRigidBody(); + rigidBody->SetLinearVelocity(GetLinearVelocity()); + rigidBody->SetAngularVelocity(GetAngularVelocity()); + GetEntity()->GetTransform()->BindTransformChangedEventHandler(m_transformChangedHandler); + } } void NetworkRigidBodyComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) { - ; + GetParent().m_physicsRigidBodyComponent->SetKinematic(true); } void NetworkRigidBodyComponentController::HandleSendApplyImpulse @@ -145,4 +150,11 @@ namespace Multiplayer AzPhysics::RigidBody* rigidBody = GetParent().m_physicsRigidBodyComponent->GetRigidBody(); rigidBody->ApplyLinearImpulseAtWorldPoint(impulse, worldPoint); } + + void NetworkRigidBodyComponentController::OnTransformUpdate() + { + AzPhysics::RigidBody* rigidBody = GetParent().m_physicsRigidBodyComponent->GetRigidBody(); + SetLinearVelocity(rigidBody->GetLinearVelocity()); + SetAngularVelocity(rigidBody->GetAngularVelocity()); + } } // namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp index d284f100ff..bd1e1bf0d9 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp @@ -14,7 +14,7 @@ namespace Multiplayer { - void NetworkTransformComponent::NetworkTransformComponent::Reflect(AZ::ReflectContext* context) + void NetworkTransformComponent::Reflect(AZ::ReflectContext* context) { AZ::SerializeContext* serializeContext = azrtti_cast(context); if (serializeContext) @@ -43,6 +43,11 @@ namespace Multiplayer GetNetBindComponent()->AddEntityPreRenderEventHandler(m_entityPreRenderEventHandler); GetNetBindComponent()->AddEntityCorrectionEventHandler(m_entityCorrectionEventHandler); ParentEntityIdAddEvent(m_parentChangedEventHandler); + + if (!HasController()) + { + OnParentChanged(GetParentEntityId()); + } } void NetworkTransformComponent::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) @@ -77,9 +82,20 @@ namespace Multiplayer } } - if (!GetTransformComponent()->GetWorldTM().IsClose(blendTransform)) + AzFramework::TransformComponent* transformComponent = GetTransformComponent(); + if (GetParentEntityId() == InvalidNetEntityId) + { + if (!transformComponent->GetWorldTM().IsClose(blendTransform)) + { + transformComponent->SetWorldTM(blendTransform); + } + } + else { - GetTransformComponent()->SetWorldTM(blendTransform); + if (!transformComponent->GetLocalTM().IsClose(blendTransform)) + { + transformComponent->SetLocalTM(blendTransform); + } } } } @@ -93,31 +109,45 @@ namespace Multiplayer targetTransform.SetUniformScale(GetScale()); // Hard set the entities transform - if (!GetTransformComponent()->GetWorldTM().IsClose(targetTransform)) + AzFramework::TransformComponent* transformComponent = GetTransformComponent(); + if (GetParentEntityId() == InvalidNetEntityId) + { + if (!transformComponent->GetWorldTM().IsClose(targetTransform)) + { + transformComponent->SetWorldTM(targetTransform); + } + } + else { - GetTransformComponent()->SetWorldTM(targetTransform); + if (!transformComponent->GetLocalTM().IsClose(targetTransform)) + { + transformComponent->SetLocalTM(targetTransform); + } } } void NetworkTransformComponent::OnParentChanged(NetEntityId parentId) { - const ConstNetworkEntityHandle parentEntityHandle = GetNetworkEntityManager()->GetEntity(parentId); - if (parentEntityHandle.Exists()) + if (AZ::TransformInterface* transformComponent = GetEntity()->GetTransform()) { - if (const AZ::Entity* parentEntity = parentEntityHandle.GetEntity()) + const ConstNetworkEntityHandle parentEntityHandle = GetNetworkEntityManager()->GetEntity(parentId); + if (parentEntityHandle.Exists()) { - GetEntity()->GetTransform()->SetParent(parentEntity->GetId()); + if (const AZ::Entity* parentEntity = parentEntityHandle.GetEntity()) + { + transformComponent->SetParent(parentEntity->GetId()); + } + } + else + { + transformComponent->SetParent(AZ::EntityId()); } - } - else - { - GetEntity()->GetTransform()->SetParent(AZ::EntityId()); } } NetworkTransformComponentController::NetworkTransformComponentController(NetworkTransformComponent& parent) : NetworkTransformComponentControllerBase(parent) - , m_transformChangedHandler([this](const AZ::Transform&, const AZ::Transform& worldTm) { OnTransformChangedEvent(worldTm); }) + , m_transformChangedHandler([this](const AZ::Transform& localTm, const AZ::Transform& worldTm) { OnTransformChangedEvent(localTm, worldTm); }) , m_parentIdChangedHandler([this](AZ::EntityId oldParent, AZ::EntityId newParent) { OnParentIdChangedEvent(oldParent, newParent); }) { ; @@ -125,11 +155,14 @@ namespace Multiplayer void NetworkTransformComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) { - GetParent().GetTransformComponent()->BindTransformChangedEventHandler(m_transformChangedHandler); - OnTransformChangedEvent(GetParent().GetTransformComponent()->GetWorldTM()); + if (AzFramework::TransformComponent* parentTransform = GetParent().GetTransformComponent()) + { + parentTransform->BindTransformChangedEventHandler(m_transformChangedHandler); + OnTransformChangedEvent(parentTransform->GetLocalTM(), parentTransform->GetWorldTM()); - GetParent().GetTransformComponent()->BindParentChangedEventHandler(m_parentIdChangedHandler); - OnParentIdChangedEvent(AZ::EntityId(), GetParent().GetTransformComponent()->GetParentId()); + parentTransform->BindParentChangedEventHandler(m_parentIdChangedHandler); + OnParentIdChangedEvent(AZ::EntityId(), parentTransform->GetParentId()); + } } void NetworkTransformComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) @@ -137,11 +170,12 @@ namespace Multiplayer ; } - void NetworkTransformComponentController::OnTransformChangedEvent(const AZ::Transform& worldTm) + void NetworkTransformComponentController::OnTransformChangedEvent(const AZ::Transform& localTm, const AZ::Transform& worldTm) { - SetRotation(worldTm.GetRotation()); - SetTranslation(worldTm.GetTranslation()); - SetScale(worldTm.GetUniformScale()); + const AZ::Transform& localOrWorld = GetParentEntityId() == InvalidNetEntityId ? worldTm : localTm; + SetRotation(localOrWorld.GetRotation()); + SetTranslation(localOrWorld.GetTranslation()); + SetScale(localOrWorld.GetUniformScale()); } void NetworkTransformComponentController::OnParentIdChangedEvent([[maybe_unused]] AZ::EntityId oldParent, AZ::EntityId newParent) @@ -150,7 +184,10 @@ namespace Multiplayer if (parentEntity) { const ConstNetworkEntityHandle parentHandle(parentEntity, GetNetworkEntityTracker()); - SetParentEntityId(parentHandle.GetNetEntityId()); + if (parentHandle.Exists()) + { + SetParentEntityId(parentHandle.GetNetEntityId()); + } } } } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp index 7ac28fc078..392b020748 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp @@ -13,6 +13,7 @@ namespace Multiplayer // This can be used to help mitigate client side performance when large numbers of entities are created off the network AZ_CVAR(uint32_t, cl_ClientMaxRemoteEntitiesPendingCreationCount, AZStd::numeric_limits::max(), nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Maximum number of entities that we have sent to the client, but have not had a confirmation back from the client"); AZ_CVAR(AZ::TimeMs, cl_ClientEntityReplicatorPendingRemovalTimeMs, AZ::TimeMs{ 10000 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "How long should wait prior to removing an entity for the client through a change in the replication window, entity deletes are still immediate"); + AZ_CVAR(AZ::TimeMs, cl_DefaultNetworkEntityActivationTimeSliceMs, AZ::TimeMs{ 0 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Max Ms to use to activate entities coming from the network, 0 means instantiate everything"); ClientToServerConnectionData::ClientToServerConnectionData ( @@ -26,6 +27,7 @@ namespace Multiplayer { m_entityReplicationManager.SetMaxRemoteEntitiesPendingCreationCount(cl_ClientMaxRemoteEntitiesPendingCreationCount); m_entityReplicationManager.SetEntityPendingRemovalMs(cl_ClientEntityReplicatorPendingRemovalTimeMs); + m_entityReplicationManager.SetEntityActivationTimeSliceMs(cl_DefaultNetworkEntityActivationTimeSliceMs); } ClientToServerConnectionData::~ClientToServerConnectionData() @@ -48,9 +50,9 @@ namespace Multiplayer return m_entityReplicationManager; } - void ClientToServerConnectionData::Update(AZ::TimeMs hostTimeMs) + void ClientToServerConnectionData::Update() { m_entityReplicationManager.ActivatePendingEntities(); - m_entityReplicationManager.SendUpdates(hostTimeMs); + m_entityReplicationManager.SendUpdates(); } } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h index e5f1d0edfc..55510a2098 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include namespace Multiplayer { @@ -30,9 +30,11 @@ namespace Multiplayer ConnectionDataType GetConnectionDataType() const override; AzNetworking::IConnection* GetConnection() const override; EntityReplicationManager& GetReplicationManager() override; - void Update(AZ::TimeMs hostTimeMs) override; + void Update() override; bool CanSendUpdates() const override; void SetCanSendUpdates(bool canSendUpdates) override; + bool DidHandshake() const override; + void SetDidHandshake(bool didHandshake) override; //! @} const AZStd::string& GetProviderTicket() const; @@ -43,6 +45,7 @@ namespace Multiplayer AZStd::string m_providerTicket; AzNetworking::IConnection* m_connection = nullptr; bool m_canSendUpdates = true; + bool m_didHandshake = false; }; } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl index 9d6a3ca744..8874fbbabc 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl @@ -27,4 +27,14 @@ namespace Multiplayer { m_providerTicket = ticket; } + + inline bool ClientToServerConnectionData::DidHandshake() const + { + return m_didHandshake; + } + + inline void ClientToServerConnectionData::SetDidHandshake(bool didHandshake) + { + m_didHandshake = didHandshake; + } } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp index 5a9e8b4d4b..a9b8e03126 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp @@ -7,7 +7,10 @@ */ #include +#include +#include #include +#include namespace Multiplayer { @@ -25,7 +28,7 @@ namespace Multiplayer ) : m_connection(connection) , m_controlledEntityRemovedHandler([this](const ConstNetworkEntityHandle&) { OnControlledEntityRemove(); }) - , m_controlledEntityMigrationHandler([this](const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId) { OnControlledEntityMigration(entityHandle, remoteHostId, connectionId); }) + , m_controlledEntityMigrationHandler([this](const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, AzNetworking::ConnectionId connectionId) { OnControlledEntityMigration(entityHandle, remoteHostId, connectionId); }) , m_controlledEntity(controlledEntity) , m_entityReplicationManager(*connection, connectionListener, EntityReplicationManager::Mode::LocalServerToRemoteClient) { @@ -66,7 +69,7 @@ namespace Multiplayer return m_entityReplicationManager; } - void ServerToClientConnectionData::Update(AZ::TimeMs hostTimeMs) + void ServerToClientConnectionData::Update() { m_entityReplicationManager.ActivatePendingEntities(); @@ -76,7 +79,7 @@ namespace Multiplayer // potentially false if we just migrated the player, if that is the case, don't send any more updates if (netBindComponent != nullptr && (netBindComponent->GetNetEntityRole() == NetEntityRole::Authority)) { - m_entityReplicationManager.SendUpdates(hostTimeMs); + m_entityReplicationManager.SendUpdates(); } } } @@ -91,40 +94,32 @@ namespace Multiplayer void ServerToClientConnectionData::OnControlledEntityMigration ( [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, - [[maybe_unused]] HostId remoteHostId, + [[maybe_unused]] const HostId& remoteHostId, [[maybe_unused]] AzNetworking::ConnectionId connectionId ) { - //Multiplayer::ServerAddrInfo serverAddr; - //if (gNovaGame->GetMultiplayerworkAgent().GetServerToServerNetwork().GetServerAddrInfoFromConnectionId(newConnectionId, serverAddr) == false) - //{ - // AZLOG_WARN("MigrateClient::Failed to find servershard address, userID:%d", static_cast(GetUserId())); - // return; - //} - // - //Multiplayer::GameTimePoint migratedClientGameTimePoint; - // - //if (m_ControlledEntity != nullptr) - //{ - // if (const PlayerNetworkInputComponent::Authority* pComponent = Multiplayer::FindController(m_ControlledEntity)) - // { - // migratedClientGameTimePoint = pComponent->GetLastInputId().GetServerGameTimePoint(); - // } - //} - // - // generate crypto-rand user identifier, send to both server and client so they can negotiate the autonomous entity to assume predictive control over after migration - //const uint64_t randomUserIdentifier = 0; - // - //// Tell the server a new client is about to join - //MultiplayerPackets::NotifyClientMigration notifyClientMigration(randomUserIdentifier); - //gNovaGame->GetMultiplayerworkAgent().GetServerToServerNetwork().SendReliablePacket(newConnectionId, notifyClientMigration); - // - //// Tell the client who to join - //MultiplayerPackets::ClientMigration clientMigration(randomUserIdentifier, serverAddr, migratedClientGameTimePoint); - //GetConnection()->SendReliablePacket(clientMigration); - // - //m_controlledEntity = nullptr; - //m_canSendUpdates = false; + ClientInputId migratedClientInputId = ClientInputId{ 0 }; + if (m_controlledEntity != nullptr) + { + auto controller = m_controlledEntity.FindController(); + if (controller != nullptr) + { + migratedClientInputId = controller->GetLastInputId(); + } + } + + // Generate crypto-rand user identifier, send to both server and client so they can negotiate the autonomous entity to assume predictive control over after migration + const uint64_t randomUserIdentifier = AzNetworking::CryptoRand64(); + + // Tell the new host that a client is about to (re)join + GetMultiplayer()->SendNotifyClientMigrationEvent(remoteHostId, randomUserIdentifier, migratedClientInputId); + + // Tell the client who to join + MultiplayerPackets::ClientMigration clientMigration(remoteHostId, randomUserIdentifier, migratedClientInputId); + GetConnection()->SendReliablePacket(clientMigration); + + m_controlledEntity = NetworkEntityHandle(); + m_canSendUpdates = false; } void ServerToClientConnectionData::OnGameplayStarted() diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h index 9e9afc4413..1b4ee2cc04 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include namespace Multiplayer { @@ -30,9 +30,11 @@ namespace Multiplayer ConnectionDataType GetConnectionDataType() const override; AzNetworking::IConnection* GetConnection() const override; EntityReplicationManager& GetReplicationManager() override; - void Update(AZ::TimeMs hostTimeMs) override; + void Update() override; bool CanSendUpdates() const override; void SetCanSendUpdates(bool canSendUpdates) override; + bool DidHandshake() const override; + void SetDidHandshake(bool didHandshake) override; //! @} NetworkEntityHandle GetPrimaryPlayerEntity(); @@ -42,7 +44,7 @@ namespace Multiplayer private: void OnControlledEntityRemove(); - void OnControlledEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId); + void OnControlledEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, AzNetworking::ConnectionId connectionId); void OnGameplayStarted(); EntityReplicationManager m_entityReplicationManager; @@ -52,6 +54,7 @@ namespace Multiplayer AZStd::string m_providerTicket; AzNetworking::IConnection* m_connection = nullptr; bool m_canSendUpdates = false; + bool m_didHandshake = false; }; } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl index 53ba51f36a..e4348fe539 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl @@ -38,4 +38,14 @@ namespace Multiplayer { m_providerTicket = ticket; } + + inline bool ServerToClientConnectionData::DidHandshake() const + { + return m_didHandshake; + } + + inline void ServerToClientConnectionData::SetDidHandshake(bool didHandshake) + { + m_didHandshake = didHandshake; + } } diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp index 24858e6412..a30ab207b4 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp @@ -32,7 +32,7 @@ namespace Multiplayer { m_networkEditorInterface = AZ::Interface::Get()->CreateNetworkInterface( AZ::Name(MpEditorInterfaceName), ProtocolType::Tcp, TrustZone::ExternalClientToServer, *this); - m_networkEditorInterface->SetTimeoutEnabled(false); + m_networkEditorInterface->SetTimeoutMs(AZ::TimeMs{ 0 }); // Disable timeouts on this network interface if (editorsv_isDedicated) { uint16_t editorServerPort = DefaultServerEditorPort; diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h index ca815d5c48..b93c830cd0 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h @@ -33,7 +33,6 @@ namespace Multiplayer MultiplayerEditorConnection(); ~MultiplayerEditorConnection() = default; - bool IsHandshakeComplete() const { return true; }; bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerEditorPackets::EditorServerInit& packet); bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerEditorPackets::EditorServerReady& packet); diff --git a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp index b63ce65da7..9d53990fb4 100644 --- a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp +++ b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp @@ -10,6 +10,17 @@ namespace Multiplayer { + void FullOwnershipEntityDomain::SetAabb([[maybe_unused]] const AZ::Aabb& aabb) + { + ; // Do nothing, by definition we own everything + } + + const AZ::Aabb& FullOwnershipEntityDomain::GetAabb() const + { + static AZ::Aabb nullAabb = AZ::Aabb::CreateNull(); + return nullAabb; + } + bool FullOwnershipEntityDomain::IsInDomain([[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) const { return true; @@ -20,9 +31,9 @@ namespace Multiplayer ; } - void FullOwnershipEntityDomain::RetrieveEntitiesNotInDomain([[maybe_unused]] EntitiesNotInDomain& outEntitiesNotInDomain) const + const IEntityDomain::EntitiesNotInDomain& FullOwnershipEntityDomain::RetrieveEntitiesNotInDomain() const { - ; + return m_entitiesNotInDomain; } void FullOwnershipEntityDomain::DebugDraw() const diff --git a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h index 3fe164a31f..ae80c16ab8 100644 --- a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h +++ b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h @@ -21,10 +21,15 @@ namespace Multiplayer //! IEntityDomain overrides. //! @{ + void SetAabb(const AZ::Aabb& aabb) override; + const AZ::Aabb& GetAabb() const override; bool IsInDomain(const ConstNetworkEntityHandle& entityHandle) const override; void ActivateTracking(const INetworkEntityManager::OwnedEntitySet& ownedEntitySet) override; - void RetrieveEntitiesNotInDomain(EntitiesNotInDomain& outEntitiesNotInDomain) const override; + const EntitiesNotInDomain& RetrieveEntitiesNotInDomain() const override; void DebugDraw() const override; //! @} + + private: + EntitiesNotInDomain m_entitiesNotInDomain; }; } diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index d05139cb41..35174e31fb 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -71,7 +72,7 @@ namespace Multiplayer AZ_CVAR(uint16_t, cl_clientport, 0, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The port to bind to for game traffic when connecting to a remote host, a value of 0 will select any available port"); - AZ_CVAR(AZ::CVarFixedString, cl_serveraddr, AZ::CVarFixedString(LocalHost), nullptr, AZ::ConsoleFunctorFlags::DontReplicate, + AZ_CVAR(AZ::CVarFixedString, cl_serveraddr, AZ::CVarFixedString(LocalHost), nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The address of the remote server or host to connect to"); AZ_CVAR(uint16_t, cl_serverport, DefaultServerPort, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The port of the remote host to connect to for game traffic"); AZ_CVAR(uint16_t, sv_port, DefaultServerPort, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The port that this multiplayer gem will bind to for game traffic"); @@ -79,14 +80,13 @@ namespace Multiplayer AZ_CVAR(ProtocolType, sv_protocol, ProtocolType::Udp, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "This flag controls whether we use TCP or UDP for game networking"); AZ_CVAR(bool, sv_isDedicated, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Whether the host command creates an independent or client hosted server"); AZ_CVAR(bool, sv_isTransient, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Whether a dedicated server shuts down if all existing connections disconnect."); - AZ_CVAR(AZ::TimeMs, cl_defaultNetworkEntityActivationTimeSliceMs, AZ::TimeMs{ 0 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, - "Max Ms to use to activate entities coming from the network, 0 means instantiate everything"); AZ_CVAR(AZ::TimeMs, sv_serverSendRateMs, AZ::TimeMs{ 50 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Minimum number of milliseconds between each network update"); AZ_CVAR(AZ::CVarFixedString, sv_defaultPlayerSpawnAsset, "prefabs/player.network.spawnable", nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The default spawnable to use when a new player connects"); AZ_CVAR(float, cl_renderTickBlendBase, 0.15f, nullptr, AZ::ConsoleFunctorFlags::Null, "The base used for blending between network updates, 0.1 will be quite linear, 0.2 or 0.3 will " "slow down quicker and may be better suited to connections with highly variable latency"); + AZ_CVAR(bool, bg_multiplayerDebugDraw, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enables debug draw for the multiplayer gem"); void MultiplayerSystemComponent::Reflect(AZ::ReflectContext* context) { @@ -94,9 +94,6 @@ namespace Multiplayer { serializeContext->Class() ->Version(1); - - serializeContext->Class() - ->Version(1); serializeContext->Class() ->Version(1); serializeContext->Class() @@ -112,7 +109,6 @@ namespace Multiplayer } else if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) { - behaviorContext->Class(); behaviorContext->Class(); behaviorContext->Class(); behaviorContext->Class(); @@ -173,7 +169,12 @@ namespace Multiplayer AZ::ConsoleInvokedFrom invokedFrom ) { OnConsoleCommandInvoked(command, args, flags, invokedFrom); }) { - ; + AZ::Interface::Register(this); + } + + MultiplayerSystemComponent::~MultiplayerSystemComponent() + { + AZ::Interface::Unregister(this); } void MultiplayerSystemComponent::Activate() @@ -185,7 +186,6 @@ namespace Multiplayer { m_consoleCommandHandler.Connect(AZ::Interface::Get()->GetConsoleCommandInvokedEvent()); } - AZ::Interface::Register(this); AZ::Interface::Register(this); //! Register our gems multiplayer components to assign NetComponentIds @@ -195,11 +195,12 @@ namespace Multiplayer void MultiplayerSystemComponent::Deactivate() { AZ::Interface::Unregister(this); - AZ::Interface::Unregister(this); m_consoleCommandHandler.Disconnect(); AZ::Interface::Get()->DestroyNetworkInterface(AZ::Name(MpNetworkInterfaceName)); AzFramework::SessionNotificationBus::Handler::BusDisconnect(); AZ::TickBus::Handler::BusDisconnect(); + + m_networkEntityManager.Reset(); } bool MultiplayerSystemComponent::StartHosting(uint16_t port, bool isDedicated) @@ -208,7 +209,7 @@ namespace Multiplayer return m_networkInterface->Listen(port); } - bool MultiplayerSystemComponent::Connect(AZStd::string remoteAddress, uint16_t port) + bool MultiplayerSystemComponent::Connect(const AZStd::string& remoteAddress, uint16_t port) { InitializeMultiplayer(MultiplayerAgentType::Client); const IpAddress address(remoteAddress.c_str(), port, m_networkInterface->GetType()); @@ -310,7 +311,6 @@ namespace Multiplayer void MultiplayerSystemComponent::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) { const AZ::TimeMs deltaTimeMs = aznumeric_cast(static_cast(deltaTime * 1000.0f)); - const AZ::TimeMs hostTimeMs = AZ::GetElapsedTimeMs(); const AZ::TimeMs serverRateMs = static_cast(sv_serverSendRateMs); const float serverRateSeconds = static_cast(serverRateMs) / 1000.0f; @@ -347,12 +347,12 @@ namespace Multiplayer // Send out the game state update to all connections { - auto sendNetworkUpdates = [hostTimeMs, &stats](IConnection& connection) + auto sendNetworkUpdates = [&stats](IConnection& connection) { if (connection.GetUserData() != nullptr) { IConnectionData* connectionData = reinterpret_cast(connection.GetUserData()); - connectionData->Update(hostTimeMs); + connectionData->Update(); if (connectionData->GetConnectionDataType() == ConnectionDataType::ServerToClient) { stats.m_clientConnectionCount++; @@ -394,6 +394,11 @@ namespace Multiplayer { m_networkInterface->GetConnectionSet().VisitConnections(visitor); } + + if (bg_multiplayerDebugDraw) + { + m_networkEntityManager.DebugDraw(); + } } int MultiplayerSystemComponent::GetTickOrder() @@ -441,9 +446,9 @@ namespace Multiplayer MultiplayerPackets::SyncConsole m_syncPacket; }; - bool MultiplayerSystemComponent::IsHandshakeComplete() const + bool MultiplayerSystemComponent::IsHandshakeComplete(AzNetworking::IConnection* connection) const { - return m_didHandshake; + return reinterpret_cast(connection->GetUserData())->DidHandshake(); } bool MultiplayerSystemComponent::HandleRequest @@ -459,7 +464,7 @@ namespace Multiplayer AzFramework::PlayerConnectionConfig config; config.m_playerConnectionId = aznumeric_cast(connection->GetConnectionId()); config.m_playerSessionId = packet.GetTicket(); - if(!AZ::Interface::Get()->ValidatePlayerJoinSession(config)) + if (!AZ::Interface::Get()->ValidatePlayerJoinSession(config)) { auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); }; m_networkInterface->GetConnectionSet().VisitConnections(visitor); @@ -468,9 +473,9 @@ namespace Multiplayer } reinterpret_cast(connection->GetUserData())->SetProviderTicket(packet.GetTicket().c_str()); - if (connection->SendReliablePacket(MultiplayerPackets::Accept(InvalidHostId, sv_map))) + if (connection->SendReliablePacket(MultiplayerPackets::Accept(sv_map))) { - m_didHandshake = true; + reinterpret_cast(connection->GetUserData())->SetDidHandshake(true); // Sync our console ConsoleReplicator consoleReplicator(connection); @@ -487,11 +492,9 @@ namespace Multiplayer [[maybe_unused]] MultiplayerPackets::Accept& packet ) { - m_didHandshake = true; - + reinterpret_cast(connection->GetUserData())->SetDidHandshake(true); AZ::CVarFixedString commandString = "sv_map " + packet.GetMap(); AZ::Interface::Get()->PerformCommand(commandString.c_str()); - AZ::CVarFixedString loadLevelString = "LoadLevel " + packet.GetMap(); AZ::Interface::Get()->PerformCommand(loadLevelString.c_str()); @@ -608,7 +611,22 @@ namespace Multiplayer [[maybe_unused]] MultiplayerPackets::ClientMigration& packet ) { - return false; + if (GetAgentType() != MultiplayerAgentType::Client) + { + // Only clients are allowed to migrate from one server to another + return false; + } + + // Store the temporary user identifier so we can transmit it with our next Connect packet + // The new server will use this to re-attach our set of autonomous entities + + // Disconnect our existing server connection + auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::ClientMigrated, TerminationEndpoint::Local); }; + m_networkInterface->GetConnectionSet().VisitConnections(visitor); + AZLOG_INFO("Migrating to new server shard"); + m_clientMigrationStartEvent.Signal(packet.GetLastClientInputId()); + m_networkInterface->Connect(packet.GetRemoteServerAddress()); + return true; } ConnectResult MultiplayerSystemComponent::ValidateConnect @@ -642,7 +660,7 @@ namespace Multiplayer else { AZLOG_INFO("New incoming connection from remote address: %s", connection->GetRemoteAddress().GetString().c_str()); - m_connAcquiredEvent.Signal(datum); + m_connectionAcquiredEvent.Signal(datum); } // Hosts will spawn a new default player prefab for the user that just connected @@ -656,27 +674,14 @@ namespace Multiplayer } controlledEntity.Activate(); - if (connection->GetUserData() == nullptr) // Only add user data if the connect event handler has not already done so - { - connection->SetUserData(new ServerToClientConnectionData(connection, *this, controlledEntity)); - } - + connection->SetUserData(new ServerToClientConnectionData(connection, *this, controlledEntity)); AZStd::unique_ptr window = AZStd::make_unique(controlledEntity, connection); reinterpret_cast(connection->GetUserData())->GetReplicationManager().SetReplicationWindow(AZStd::move(window)); } else { - if (connection->GetUserData() == nullptr) // Only add user data if the connect event handler has not already done so - { - connection->SetUserData(new ClientToServerConnectionData(connection, *this, providerTicket)); - } - else - { - reinterpret_cast(connection->GetUserData())->SetProviderTicket(providerTicket); - } - - AZStd::unique_ptr window = AZStd::make_unique(); - reinterpret_cast(connection->GetUserData())->GetReplicationManager().SetEntityActivationTimeSliceMs(cl_defaultNetworkEntityActivationTimeSliceMs); + connection->SetUserData(new ClientToServerConnectionData(connection, *this, providerTicket)); + AZStd::unique_ptr window = AZStd::make_unique(connection); reinterpret_cast(connection->GetUserData())->GetReplicationManager().SetReplicationWindow(AZStd::move(window)); } } @@ -755,13 +760,21 @@ namespace Multiplayer if (m_agentType == MultiplayerAgentType::Uninitialized) { + m_spawnNetboundEntities = false; if (multiplayerType == MultiplayerAgentType::ClientServer || multiplayerType == MultiplayerAgentType::DedicatedServer) { + m_spawnNetboundEntities = true; m_initEvent.Signal(m_networkInterface); - //const AZ::Aabb worldBounds = AZ::Interface.Get()->GetWorldBounds(); - AZStd::unique_ptr newDomain = AZStd::make_unique(); - m_networkEntityManager.Initialize(InvalidHostId, AZStd::move(newDomain)); + if (!m_networkEntityManager.IsInitialized()) + { + // Set up a full ownership domain if we didn't construct a domain during the initialize event + const AZ::CVarFixedString serverAddr = cl_serveraddr; + const uint16_t serverPort = cl_serverport; + const AzNetworking::ProtocolType serverProtocol = sv_protocol; + const AzNetworking::IpAddress hostId = AzNetworking::IpAddress(serverAddr.c_str(), serverPort, serverProtocol); + m_networkEntityManager.Initialize(hostId, AZStd::make_unique()); + } } } m_agentType = multiplayerType; @@ -780,14 +793,34 @@ namespace Multiplayer AZLOG_INFO("Multiplayer operating in %s mode", GetEnumString(m_agentType)); } + void MultiplayerSystemComponent::AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) + { + handler.Connect(m_clientMigrationStartEvent); + } + + void MultiplayerSystemComponent::AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) + { + handler.Connect(m_clientMigrationEndEvent); + } + void MultiplayerSystemComponent::AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) { handler.Connect(m_clientDisconnectedEvent); } + void MultiplayerSystemComponent::AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) + { + handler.Connect(m_notifyClientMigrationEvent); + } + + void MultiplayerSystemComponent::AddNotifyEntityMigrationEventHandler(NotifyEntityMigrationEvent::Handler& handler) + { + handler.Connect(m_notifyEntityMigrationEvent); + } + void MultiplayerSystemComponent::AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) { - handler.Connect(m_connAcquiredEvent); + handler.Connect(m_connectionAcquiredEvent); } void MultiplayerSystemComponent::AddServerAcceptanceReceivedHandler(ServerAcceptanceReceivedEvent::Handler& handler) @@ -805,6 +838,16 @@ namespace Multiplayer handler.Connect(m_shutdownEvent); } + void MultiplayerSystemComponent::SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) + { + m_notifyClientMigrationEvent.Signal(hostId, userIdentifier, lastClientInputId); + } + + void MultiplayerSystemComponent::SendNotifyEntityMigrationEvent(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) + { + m_notifyEntityMigrationEvent.Signal(entityHandle, remoteHostId); + } + void MultiplayerSystemComponent::SendReadyForEntityUpdates(bool readyForEntityUpdates) { IConnectionSet& connectionSet = m_networkInterface->GetConnectionSet(); @@ -851,6 +894,16 @@ namespace Multiplayer return m_filterEntityManager; } + void MultiplayerSystemComponent::SetShouldSpawnNetworkEntities(bool value) + { + m_spawnNetboundEntities = value; + } + + bool MultiplayerSystemComponent::GetShouldSpawnNetworkEntities() const + { + return m_spawnNetboundEntities; + } + void MultiplayerSystemComponent::DumpStats([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments) { const MultiplayerStats& stats = GetStats(); @@ -910,7 +963,7 @@ namespace Multiplayer // Unfortunately necessary, as NotifyPreRender can update transforms and thus cause a deadlock inside the vis system AZStd::vector gatheredEntities; AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(viewFrustum, - [&gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) + [this, &gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) { gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size()); for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) @@ -918,7 +971,7 @@ namespace Multiplayer if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) { AZ::Entity* entity = static_cast(visEntry->m_userData); - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = m_networkEntityManager.GetNetworkEntityTracker()->GetNetBindComponent(entity); if (netBindComponent != nullptr) { gatheredEntities.push_back(netBindComponent); @@ -938,7 +991,7 @@ namespace Multiplayer for (auto& iter : *(m_networkEntityManager.GetNetworkEntityTracker())) { AZ::Entity* entity = iter.second; - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = m_networkEntityManager.GetNetworkEntityTracker()->GetNetBindComponent(entity); if (netBindComponent != nullptr) { netBindComponent->NotifyPreRender(deltaTime); @@ -997,7 +1050,10 @@ namespace Multiplayer void host([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments) { - AZ::Interface::Get()->StartHosting(sv_port, sv_isDedicated); + if (!AZ::Interface::Get()->StartHosting(sv_port, sv_isDedicated)) + { + AZLOG_ERROR("Failed to start listening on port %u, port is in use?", static_cast(sv_port)); + } } AZ_CONSOLEFREEFUNC(host, AZ::ConsoleFunctorFlags::DontReplicate, "Opens a multiplayer connection as a host for other clients to connect to"); diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index 4a4cdd4265..e46bbb59bc 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -57,7 +57,7 @@ namespace Multiplayer static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); MultiplayerSystemComponent(); - ~MultiplayerSystemComponent() override = default; + ~MultiplayerSystemComponent() override; //! AZ::Component overrides. //! @{ @@ -78,7 +78,7 @@ namespace Multiplayer int GetTickOrder() override; //! @} - bool IsHandshakeComplete() const; + bool IsHandshakeComplete(AzNetworking::IConnection* connection) const; bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::Connect& packet); bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::Accept& packet); bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::ReadyForEntityUpdates& packet); @@ -107,14 +107,20 @@ namespace Multiplayer //! @{ MultiplayerAgentType GetAgentType() const override; void InitializeMultiplayer(MultiplayerAgentType state) override; + bool StartHosting(uint16_t port, bool isDedicated = true) override; + bool Connect(const AZStd::string& remoteAddress, uint16_t port) override; + void Terminate(AzNetworking::DisconnectReason reason) override; + void AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) override; + void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) override; void AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) override; + void AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) override; + void AddNotifyEntityMigrationEventHandler(NotifyEntityMigrationEvent::Handler& handler) override; void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) override; void AddSessionInitHandler(SessionInitEvent::Handler& handler) override; void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) override; void AddServerAcceptanceReceivedHandler(ServerAcceptanceReceivedEvent::Handler& handler) override; - bool StartHosting(uint16_t port, bool isDedicated = true) override; - bool Connect(AZStd::string remoteAddress, uint16_t port) override; - void Terminate(AzNetworking::DisconnectReason reason) override; + void SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) override; + void SendNotifyEntityMigrationEvent(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) override; void SendReadyForEntityUpdates(bool readyForEntityUpdates) override; AZ::TimeMs GetCurrentHostTimeMs() const override; float GetCurrentBlendFactor() const override; @@ -122,6 +128,8 @@ namespace Multiplayer INetworkEntityManager* GetNetworkEntityManager() override; void SetFilterEntityManager(IFilterEntityManager* entityFilter) override; IFilterEntityManager* GetFilterEntityManager() override; + void SetShouldSpawnNetworkEntities(bool value) override; + bool GetShouldSpawnNetworkEntities() const override; //! @} //! Console commands. @@ -151,9 +159,13 @@ namespace Multiplayer SessionInitEvent m_initEvent; SessionShutdownEvent m_shutdownEvent; - ConnectionAcquiredEvent m_connAcquiredEvent; + ConnectionAcquiredEvent m_connectionAcquiredEvent; ServerAcceptanceReceivedEvent m_serverAcceptanceReceivedEvent; ClientDisconnectedEvent m_clientDisconnectedEvent; + ClientMigrationStartEvent m_clientMigrationStartEvent; + ClientMigrationEndEvent m_clientMigrationEndEvent; + NotifyClientMigrationEvent m_notifyClientMigrationEvent; + NotifyEntityMigrationEvent m_notifyEntityMigrationEvent; AZStd::queue m_pendingConnectionTickets; @@ -163,7 +175,7 @@ namespace Multiplayer double m_serverSendAccumulator = 0.0; float m_renderBlendFactor = 0.0f; float m_tickFactor = 0.0f; - bool m_didHandshake = false; + bool m_spawnNetboundEntities = true; #if !defined(AZ_RELEASE_BUILD) MultiplayerEditorConnection m_editorConnectionListener; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp index b45c05cda7..6f65d01e50 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp @@ -6,11 +6,10 @@ * */ -#include -#include +#include +#include #include #include -#include #include #include #include @@ -46,6 +45,7 @@ namespace Multiplayer , m_clearRemovedReplicators([this]() { ClearRemovedReplicators(); }, AZ::Name("EntityReplicationManager::ClearRemovedReplicators")) , m_updateWindow([this]() { UpdateWindow(); }, AZ::Name("EntityReplicationManager::UpdateWindow")) , m_entityExitDomainEventHandler([this](const ConstNetworkEntityHandle& entityHandle) { OnEntityExitDomain(entityHandle); }) + , m_notifyEntityMigrationHandler([this](const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) { OnPostEntityMigration(entityHandle, remoteHostId); }) { // Our max payload size is whatever is passed in, minus room for a udp packetheader m_maxPayloadSize = connection.GetConnectionMtu() - UdpPacketHeaderSerializeSize - ReplicationManagerPacketOverhead; @@ -61,14 +61,16 @@ namespace Multiplayer { networkEntityManager->AddEntityExitDomainHandler(m_entityExitDomainEventHandler); } + + GetMultiplayer()->AddNotifyEntityMigrationEventHandler(m_notifyEntityMigrationHandler); } - void EntityReplicationManager::SetRemoteHostId(HostId hostId) + void EntityReplicationManager::SetRemoteHostId(const HostId& hostId) { m_remoteHostId = hostId; } - HostId EntityReplicationManager::GetRemoteHostId() const + const HostId& EntityReplicationManager::GetRemoteHostId() const { return m_remoteHostId; } @@ -107,10 +109,34 @@ namespace Multiplayer } } - void EntityReplicationManager::SendUpdates(AZ::TimeMs hostTimeMs) + void EntityReplicationManager::SendUpdates() { m_frameTimeMs = AZ::GetElapsedTimeMs(); - SendEntityUpdates(hostTimeMs); + + { + EntityReplicatorList toSendList = GenerateEntityUpdateList(); + + AZLOG + ( + NET_ReplicationInfo, + "Sending %zd updates from %s to %s", + toSendList.size(), + GetNetworkEntityManager()->GetHostId().GetString().c_str(), + GetRemoteHostId().GetString().c_str() + ); + + // Prep a replication record for send, at this point, everything needs to be sent + for (EntityReplicator* replicator : toSendList) + { + replicator->GetPropertyPublisher()->PrepareSerialization(); + } + + // While our to send list is not empty, build up another packet to send + do + { + SendEntityUpdateMessages(toSendList); + } while (!toSendList.empty()); + } SendEntityRpcs(m_deferredRpcMessagesReliable, true); SendEntityRpcs(m_deferredRpcMessagesUnreliable, false); @@ -120,9 +146,9 @@ namespace Multiplayer AZLOG ( NET_ReplicationInfo, - "Sending from %u to %u, replicator count %u orphan count %u deferred reliable count %u deferred unreliable count %u", - aznumeric_cast(GetNetworkEntityManager()->GetHostId()), - aznumeric_cast(GetRemoteHostId()), + "Sending from %s to %s, replicator count %u orphan count %u deferred reliable count %u deferred unreliable count %u", + GetNetworkEntityManager()->GetHostId().GetString().c_str(), + GetRemoteHostId().GetString().c_str(), aznumeric_cast(m_entityReplicatorMap.size()), aznumeric_cast(m_orphanedEntityRpcs.Size()), aznumeric_cast(m_deferredRpcMessagesReliable.size()), @@ -130,65 +156,6 @@ namespace Multiplayer ); } - void EntityReplicationManager::SendEntityUpdatesPacketHelper - ( - AZ::TimeMs hostTimeMs, - EntityReplicatorList& toSendList, - uint32_t maxPayloadSize, - AzNetworking::IConnection& connection - ) - { - uint32_t pendingPacketSize = 0; - EntityReplicatorList replicatorUpdatedList; - MultiplayerPackets::EntityUpdates entityUpdatePacket; - entityUpdatePacket.SetHostTimeMs(hostTimeMs); - entityUpdatePacket.SetHostFrameId(GetNetworkTime()->GetHostFrameId()); - // Serialize everything - while (!toSendList.empty()) - { - EntityReplicator* replicator = toSendList.front(); - NetworkEntityUpdateMessage updateMessage(replicator->GenerateUpdatePacket()); - - const uint32_t nextMessageSize = updateMessage.GetEstimatedSerializeSize(); - - // Check if we are over our limits - const bool payloadFull = (pendingPacketSize + nextMessageSize > maxPayloadSize); - const bool capacityReached = (entityUpdatePacket.GetEntityMessages().size() >= entityUpdatePacket.GetEntityMessages().capacity()); - const bool largeEntityDetected = (payloadFull && replicatorUpdatedList.empty()); - if (capacityReached || (payloadFull && !largeEntityDetected)) - { - break; - } - - pendingPacketSize += nextMessageSize; - entityUpdatePacket.ModifyEntityMessages().push_back(updateMessage); - replicatorUpdatedList.push_back(replicator); - toSendList.pop_front(); - - if (largeEntityDetected) - { - AZLOG_WARN("\n\n*******************************"); - AZLOG_WARN - ( - "Serializing extremely large entity (%u) - MaxPayload: %d NeededSize %d", - aznumeric_cast(replicator->GetEntityHandle().GetNetEntityId()), - maxPayloadSize, - nextMessageSize - ); - AZLOG_WARN("*******************************"); - break; - } - } - - const AzNetworking::PacketId sentId = connection.SendUnreliablePacket(entityUpdatePacket); - - // Update the sent things with the packet id - for (EntityReplicator* replicator : replicatorUpdatedList) - { - replicator->GetPropertyPublisher()->FinalizeSerialization(sentId); - } - } - EntityReplicationManager::EntityReplicatorList EntityReplicationManager::GenerateEntityUpdateList() { if (m_replicationWindow == nullptr) @@ -260,69 +227,92 @@ namespace Multiplayer return toSendList; } - void EntityReplicationManager::SendEntityUpdates(AZ::TimeMs hostTimeMs) + void EntityReplicationManager::SendEntityUpdateMessages(EntityReplicatorList& replicatorList) { - EntityReplicatorList toSendList = GenerateEntityUpdateList(); + uint32_t pendingPacketSize = 0; + EntityReplicatorList replicatorUpdatedList; + NetworkEntityUpdateVector entityUpdates; + // Serialize everything + while (!replicatorList.empty()) + { + EntityReplicator* replicator = replicatorList.front(); + NetworkEntityUpdateMessage updateMessage(replicator->GenerateUpdatePacket()); - AZLOG(NET_ReplicationInfo, "Sending %zd updates from %d to %d", toSendList.size(), (uint8_t)GetNetworkEntityManager()->GetHostId(), (uint8_t)GetRemoteHostId()); + const uint32_t nextMessageSize = updateMessage.GetEstimatedSerializeSize(); - // prep a replication record for send, at this point, everything needs to be sent - for (EntityReplicator* replicator : toSendList) - { - replicator->GetPropertyPublisher()->PrepareSerialization(); + // Check if we are over our limits + const bool payloadFull = (pendingPacketSize + nextMessageSize > m_maxPayloadSize); + const bool capacityReached = (entityUpdates.size() >= entityUpdates.capacity()); + const bool largeEntityDetected = (payloadFull && replicatorUpdatedList.empty()); + if (capacityReached || (payloadFull && !largeEntityDetected)) + { + break; + } + + pendingPacketSize += nextMessageSize; + entityUpdates.push_back(updateMessage); + replicatorUpdatedList.push_back(replicator); + replicatorList.pop_front(); + + if (largeEntityDetected) + { + AZLOG_WARN + ( + "Serializing extremely large entity (%u) - MaxPayload: %d NeededSize %d", + aznumeric_cast(replicator->GetEntityHandle().GetNetEntityId()), + m_maxPayloadSize, + nextMessageSize + ); + break; + } } - // While our to send list is not empty, build up another packet to send - do + const AzNetworking::PacketId sentId = m_replicationWindow->SendEntityUpdateMessages(entityUpdates); + + // Update the sent things with the packet id + for (EntityReplicator* replicator : replicatorUpdatedList) { - SendEntityUpdatesPacketHelper(hostTimeMs, toSendList, m_maxPayloadSize, m_connection); - } while (!toSendList.empty()); + replicator->FinalizeSerialization(sentId); + } } - void EntityReplicationManager::SendEntityRpcs(RpcMessages& deferredRpcs, bool reliable) + void EntityReplicationManager::SendEntityRpcs(RpcMessages& rpcMessages, bool reliable) { - while (!deferredRpcs.empty()) + while (!rpcMessages.empty()) { - MultiplayerPackets::EntityRpcs entityRpcsPacket; + NetworkEntityRpcVector entityRpcs; uint32_t pendingPacketSize = 0; - while (!deferredRpcs.empty()) + while (!rpcMessages.empty()) { - NetworkEntityRpcMessage& message = deferredRpcs.front(); + NetworkEntityRpcMessage& message = rpcMessages.front(); const uint32_t nextRpcSize = message.GetEstimatedSerializeSize(); if ((pendingPacketSize + nextRpcSize) > m_maxPayloadSize) { // We're over our limit, break and send an Rpc packet - if (entityRpcsPacket.GetEntityRpcs().size() == 0) + if (entityRpcs.size() == 0) { AZLOG(NET_Replicator, "Encountered an RPC that is above our MTU, message will be segmented (object size %u, max allowed size %u)", nextRpcSize, m_maxPayloadSize); - entityRpcsPacket.ModifyEntityRpcs().push_back(message); - deferredRpcs.pop_front(); + entityRpcs.push_back(message); + rpcMessages.pop_front(); } break; } pendingPacketSize += nextRpcSize; - if (entityRpcsPacket.GetEntityRpcs().full()) + if (entityRpcs.full()) { // Packet was full, send what we've accumulated so far - AZLOG(NET_Replicator, "We've hit our RPC message limit (RPC count %u, packet size %u)", aznumeric_cast(entityRpcsPacket.GetEntityRpcs().size()), pendingPacketSize); + AZLOG(NET_Replicator, "We've hit our RPC message limit (RPC count %u, packet size %u)", aznumeric_cast(entityRpcs.size()), pendingPacketSize); break; } - entityRpcsPacket.ModifyEntityRpcs().push_back(message); - deferredRpcs.pop_front(); + entityRpcs.push_back(message); + rpcMessages.pop_front(); } - if (reliable) - { - m_connection.SendReliablePacket(entityRpcsPacket); - } - else - { - m_connection.SendUnreliablePacket(entityRpcsPacket); - } + m_replicationWindow->SendEntityRpcs(entityRpcs, reliable); } } @@ -368,10 +358,11 @@ namespace Multiplayer entityReplicator = GetEntityReplicator(entityHandle); if (entityReplicator) { - // Check if we changed our remote role - this can happen during server entity migration. After we migrate ownership to the new server, we hold onto our entity replicator until we are sure - // the other side has received all the packets (and we haven't had to do resends). At this point, it is possible hear back from the remote side we migrated to on the old replicator prior to the timeout and cleanup on the old one + // Check if we changed our remote role - this can happen during server entity migration. + // Retain our replicator after migration until we are sure the other side has received all the packets (and we haven't had to do resends). + // At this point, the remote host should inform us we've migrated prior to the timeout and cleanup of the old replicator const bool changedRemoteRole = (remoteNetworkRole != entityReplicator->GetRemoteNetworkRole()); - // check if we've changed our bound local role - this can occur when we gain Autonomous or lose Autonomous on a client + // Check if we've changed our bound local role - this can occur when we gain Autonomous or lose Autonomous on a client bool changedLocalRole(false); if (AZ::Entity* localEnt = entityReplicator->GetEntityHandle().GetEntity()) { @@ -391,19 +382,33 @@ namespace Multiplayer // Reset our replicator, we are establishing a new one entityReplicator->Reset(remoteNetworkRole); } - // else case is when an entity had left relevancy and come back (but it was still pending a removal) + // Else case is when an entity had left relevancy and come back (but it was still pending a removal) entityReplicator->Initialize(entityHandle); - AZLOG(NET_RepDeletes, "Reinited replicator for %u from remote manager id %d role %d", entityHandle.GetNetEntityId(), aznumeric_cast(GetRemoteHostId()), aznumeric_cast(remoteNetworkRole)); + AZLOG + ( + NET_RepDeletes, + "Reinited replicator for %u from remote host %s role %d", + entityHandle.GetNetEntityId(), + GetRemoteHostId().GetString().c_str(), + aznumeric_cast(remoteNetworkRole) + ); } else { - // haven't seen him before, let's add him + // Haven't seen him before, let's add him AZ_Assert(entityHandle.GetNetBindComponent(), "No NetBindComponent"); AZStd::unique_ptr newEntityReplicator = AZStd::make_unique(*this, &m_connection, remoteNetworkRole, entityHandle); newEntityReplicator->Initialize(entityHandle); entityReplicator = newEntityReplicator.get(); m_entityReplicatorMap.emplace(entityHandle.GetNetEntityId(), AZStd::move(newEntityReplicator)); - AZLOG(NET_RepDeletes, "Added replicator for %u from remote manager id %d role %d", entityHandle.GetNetEntityId(), aznumeric_cast(GetRemoteHostId()), aznumeric_cast(remoteNetworkRole)); + AZLOG + ( + NET_RepDeletes, + "Added replicator for %u from remote host %s role %d", + entityHandle.GetNetEntityId(), + GetRemoteHostId().GetString().c_str(), + aznumeric_cast(remoteNetworkRole) + ); } } else @@ -453,11 +458,16 @@ namespace Multiplayer } // @nt: TODO - delete once dropped RPC problem fixed - void EntityReplicationManager::AddAutonomousEntityReplicatorCreatedHandle(AZ::Event::Handler& handler) + void EntityReplicationManager::AddAutonomousEntityReplicatorCreatedHandler(AZ::Event::Handler& handler) { handler.Connect(m_autonomousEntityReplicatorCreated); } + void EntityReplicationManager::AddSendMigrateEntityEventHandler(SendMigrateEntityEvent::Handler& handler) + { + handler.Connect(m_sendMigrateEntityEvent); + } + const EntityReplicator* EntityReplicationManager::GetEntityReplicator(NetEntityId netEntityId) const { auto it = m_entityReplicatorMap.find(netEntityId); @@ -492,18 +502,18 @@ namespace Multiplayer { if (entityReplicator->IsMarkedForRemoval()) { - AZLOG(NET_RepDeletes, "Got a replicator delete message that is a duplicate id %u remote manager id %d", updateMessage.GetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Got a replicator delete message that is a duplicate id %u remote host %s", updateMessage.GetEntityId(), GetRemoteHostId().GetString().c_str()); } else if (entityReplicator->OwnsReplicatorLifetime()) { // This can occur if we migrate entities quickly - if this is a replicator from C to A, A migrates to B, B then migrates to C, and A's delete replicator has not arrived at C - AZLOG(NET_RepDeletes, "Got a replicator delete message for a replicator we own id %u remote manager id %d", updateMessage.GetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Got a replicator delete message for a replicator we own id %u remote host %s", updateMessage.GetEntityId(), GetRemoteHostId().GetString().c_str()); } else { shouldDeleteEntity = true; entityReplicator->MarkForRemoval(); - AZLOG(NET_RepDeletes, "Deleting replicater for entity id %u remote manager id %d", updateMessage.GetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Deleting replicater for entity id %u remote host %s", updateMessage.GetEntityId(), GetRemoteHostId().GetString().c_str()); } } else @@ -519,17 +529,17 @@ namespace Multiplayer { if (updateMessage.GetWasMigrated()) { - AZLOG(NET_RepDeletes, "Leaving id %u using timeout remote manager id %d", entity.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Leaving id %u using timeout remote host %s", entity.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); } else { - AZLOG(NET_RepDeletes, "Deleting entity id %u remote manager id %d", entity.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Deleting entity id %u remote host %s", entity.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); GetNetworkEntityManager()->MarkForRemoval(entity); } } else { - AZLOG(NET_RepDeletes, "Trying to delete entity id %u remote manager id %d, but it has been removed", entity.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Trying to delete entity id %u remote host %s, but it has been removed", entity.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); } } @@ -698,8 +708,8 @@ namespace Multiplayer AZLOG_WARN ( "Dropping Packet and LocalServerToRemoteClient connection, unexpected packet " - "LocalShard=%u EntityId=%u RemoteNetworkRole=%u BoundLocalNetworkRole=%u ActualNetworkRole=%u IsMarkedForRemoval=%s", - aznumeric_cast(GetNetworkEntityManager()->GetHostId()), + "LocalShard=%s EntityId=%u RemoteNetworkRole=%u BoundLocalNetworkRole=%u ActualNetworkRole=%u IsMarkedForRemoval=%s", + GetNetworkEntityManager()->GetHostId().GetString().c_str(), aznumeric_cast(entityReplicator->GetEntityHandle().GetNetEntityId()), aznumeric_cast(entityReplicator->GetRemoteNetworkRole()), aznumeric_cast(entityReplicator->GetBoundLocalNetworkRole()), @@ -750,13 +760,13 @@ namespace Multiplayer result = UpdateValidationResult::DropMessage; if (updateMessage.GetIsDelete()) { - AZLOG(NET_RepDeletes, "EntityReplicationManager: Received old DeleteProxy message for entity id %u, sequence %d latest sequence %d from remote manager id %d", - updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "EntityReplicationManager: Received old DeleteProxy message for entity id %u, sequence %d latest sequence %d from remote host %s", + updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), GetRemoteHostId().GetString().c_str()); } else { - AZLOG(NET_RepUpdate, "EntityReplicationManager: Received old PropertyChangeMessage message for entity id %u, sequence %d latest sequence %d from remote manager id %d", - updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepUpdate, "EntityReplicationManager: Received old PropertyChangeMessage message for entity id %u, sequence %d latest sequence %d from remote host %s", + updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), GetRemoteHostId().GetString().c_str()); } } } @@ -1062,12 +1072,12 @@ namespace Multiplayer return false; } - void EntityReplicationManager::SetEntityDomain(AZStd::unique_ptr entityDomain) + void EntityReplicationManager::SetRemoteEntityDomain(AZStd::unique_ptr entityDomain) { m_remoteEntityDomain = AZStd::move(entityDomain); } - IEntityDomain* EntityReplicationManager::GetEntityDomain() + IEntityDomain* EntityReplicationManager::GetRemoteEntityDomain() { return m_remoteEntityDomain.get(); } @@ -1108,7 +1118,7 @@ namespace Multiplayer bool didSucceed = true; EntityMigrationMessage message; - message.m_entityId = replicator->GetEntityHandle().GetNetEntityId(); + message.m_netEntityId = replicator->GetEntityHandle().GetNetEntityId(); message.m_prefabEntityId = netBindComponent->GetPrefabEntityId(); if (localEnt->GetState() == AZ::Entity::State::Active) @@ -1133,9 +1143,12 @@ namespace Multiplayer message.m_propertyUpdateData.Resize(inputSerializer.GetSize()); } AZ_Assert(didSucceed, "Failed to migrate entity from server"); - // TODO: Move this to an event - //m_connection.SendReliablePacket(message); - AZLOG(NET_RepDeletes, "Migration packet sent %u to remote manager id %d", netEntityId, aznumeric_cast(GetRemoteHostId())); + + m_sendMigrateEntityEvent.Signal(m_connection, message); + AZLOG(NET_RepDeletes, "Migration packet sent %u to remote host %s", netEntityId, GetRemoteHostId().GetString().c_str()); + + // Notify all other EntityReplicationManagers that this entity has migrated so they can adjust their own replicators given our new proxy status + GetMultiplayer()->SendNotifyEntityMigrationEvent(entityHandle, GetRemoteHostId()); // Immediately add a new replicator so that we catch RPC invocations, the remote side will make us a new one, and then remove us if needs be AddEntityReplicator(entityHandle, NetEntityRole::Authority); @@ -1144,7 +1157,7 @@ namespace Multiplayer bool EntityReplicationManager::HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message) { - EntityReplicator* replicator = GetEntityReplicator(message.m_entityId); + EntityReplicator* replicator = GetEntityReplicator(message.m_netEntityId); { if (message.m_propertyUpdateData.GetSize() > 0) { @@ -1154,7 +1167,7 @@ namespace Multiplayer invokingConnection, replicator, AzNetworking::InvalidPacketId, - message.m_entityId, + message.m_netEntityId, NetEntityRole::Server, outputSerializer, message.m_prefabEntityId @@ -1168,7 +1181,7 @@ namespace Multiplayer // The HandlePropertyChangeMessage will have made a replicator if we didn't have one already if (!replicator) { - replicator = GetEntityReplicator(message.m_entityId); + replicator = GetEntityReplicator(message.m_netEntityId); } AZ_Assert(replicator, "Do not have replicator after handling migration message"); @@ -1188,7 +1201,7 @@ namespace Multiplayer // Change the role on the replicator AddEntityReplicator(entityHandle, NetEntityRole::Server); - AZLOG(NET_RepDeletes, "Handle Migration %u new authority from remote manager id %d", entityHandle.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Handle Migration %u new authority from remote host %s", entityHandle.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); return true; } @@ -1200,11 +1213,11 @@ namespace Multiplayer } } - void EntityReplicationManager::OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, [[maybe_unused]] AzNetworking::ConnectionId connectionId) + void EntityReplicationManager::OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) { if (remoteHostId == GetRemoteHostId()) { - // don't handle self sent messages + // Don't handle self sent messages return; } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp index b684473ea3..05001b5960 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp @@ -12,11 +12,10 @@ #include #include #include -#include +#include +#include #include #include -#include -#include #include #include @@ -55,7 +54,7 @@ namespace Multiplayer { if (auto localEnt = m_entityHandle.GetEntity()) { - m_netBindComponent = localEnt->FindComponent(); + m_netBindComponent = m_entityHandle.GetNetBindComponent(); m_boundLocalNetworkRole = m_netBindComponent->GetNetEntityRole(); } } @@ -95,7 +94,7 @@ namespace Multiplayer m_entityHandle = entityHandle; if (auto localEntity = m_entityHandle.GetEntity()) { - m_netBindComponent = localEntity->FindComponent(); + m_netBindComponent = m_entityHandle.GetNetBindComponent(); AZ_Assert(m_netBindComponent, "No Multiplayer::NetBindComponent"); m_boundLocalNetworkRole = m_netBindComponent->GetNetEntityRole(); SetPrefabEntityId(m_netBindComponent->GetPrefabEntityId()); @@ -126,7 +125,8 @@ namespace Multiplayer !RemoteManagerOwnsEntityLifetime() ? PropertyPublisher::OwnsLifetime::True : PropertyPublisher::OwnsLifetime::False, m_netBindComponent, *m_connection - ); + ); + m_onEntityDirtiedHandler.Disconnect(); m_netBindComponent->AddEntityDirtiedEventHandler(m_onEntityDirtiedHandler); } else @@ -147,8 +147,9 @@ namespace Multiplayer // Prepare event handlers if (auto localEntity = m_entityHandle.GetEntity()) { - NetBindComponent* netBindComponent = localEntity->FindComponent(); + NetBindComponent* netBindComponent = m_entityHandle.GetNetBindComponent(); AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); + m_onEntityStopHandler.Disconnect(); netBindComponent->AddEntityStopEventHandler(m_onEntityStopHandler); AttachRPCHandlers(); } @@ -169,7 +170,7 @@ namespace Multiplayer if (auto localEntity = m_entityHandle.GetEntity()) { - NetBindComponent* netBindComponent = localEntity->FindComponent(); + NetBindComponent* netBindComponent = m_entityHandle.GetNetBindComponent(); AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); switch (GetBoundLocalNetworkRole()) @@ -471,19 +472,19 @@ namespace Multiplayer AZLOG ( NET_RepDeletes, - "Sending delete replicator id %u migrated %d to remote manager id %d", + "Sending delete replicator id %u migrated %d to remote host %s", aznumeric_cast(GetEntityHandle().GetNetEntityId()), WasMigrated() ? 1 : 0, - aznumeric_cast(m_replicationManager.GetRemoteHostId()) + m_replicationManager.GetRemoteHostId().GetString().c_str() ); return NetworkEntityUpdateMessage(GetEntityHandle().GetNetEntityId(), WasMigrated(), m_propertyPublisher->IsRemoteReplicatorEstablished()); } NetBindComponent* netBindComponent = GetNetBindComponent(); - const bool sendSliceName = !m_propertyPublisher->IsRemoteReplicatorEstablished(); + //const bool sendSliceName = !m_propertyPublisher->IsRemoteReplicatorEstablished(); NetworkEntityUpdateMessage updateMessage(GetRemoteNetworkRole(), GetEntityHandle().GetNetEntityId()); - if (sendSliceName) + //if (sendSliceName) { updateMessage.SetPrefabEntityId(netBindComponent->GetPrefabEntityId()); } @@ -495,6 +496,11 @@ namespace Multiplayer return updateMessage; } + void EntityReplicator::FinalizeSerialization(AzNetworking::PacketId sentId) + { + m_propertyPublisher->FinalizeSerialization(sentId); + } + void EntityReplicator::DeferRpcMessage(NetworkEntityRpcMessage& entityRpcMessage) { // Received rpc metrics, log rpc sent, number of bytes, and the componentId/rpcId for bandwidth metrics diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp index 43815da6c5..4247377629 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp @@ -336,7 +336,6 @@ namespace Multiplayer case PropertyPublisher::EntityReplicatorState::Deleting: { AZ_Assert(m_serializationPhase == PropertyPublisher::EntityReplicatorSerializationPhase::Prepared, "Unexpected serialization phase"); - FinalizeDeleteEntityRecord(sentId); } break; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp index 1541885620..c0e5c09c7b 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp @@ -7,7 +7,7 @@ */ #include -#include +#include #include namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp index 947d303278..0a99f4b0d4 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp @@ -24,7 +24,7 @@ namespace Multiplayer ; } - bool NetworkEntityAuthorityTracker::AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId newOwner) + bool NetworkEntityAuthorityTracker::AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& newOwner) { bool ret = false; auto timeoutData = m_timeoutDataMap.find(entityHandle.GetNetEntityId()); @@ -33,10 +33,10 @@ namespace Multiplayer AZLOG ( NET_AuthTracker, - "AuthTracker: Removing timeout for networkEntityId %u from %u, new owner is %u", + "AuthTracker: Removing timeout for networkEntityId %u from %s, new owner is %s", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(timeoutData->second.m_previousOwner), - aznumeric_cast(newOwner) + timeoutData->second.m_previousOwner.GetString().c_str(), + newOwner.GetString().c_str() ); m_timeoutDataMap.erase(timeoutData); ret = true; @@ -48,10 +48,10 @@ namespace Multiplayer AZLOG ( NET_AuthTracker, - "AuthTracker: Assigning networkEntityId %u from %u to %u", + "AuthTracker: Assigning networkEntityId %u from %s to %s", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(iter->second.back()), - aznumeric_cast(newOwner) + iter->second.back().GetString().c_str(), + newOwner.GetString().c_str() ); } else @@ -59,9 +59,9 @@ namespace Multiplayer AZLOG ( NET_AuthTracker, - "AuthTracker: Assigning networkEntityId %u to %u", + "AuthTracker: Assigning networkEntityId %u to %s", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(newOwner) + newOwner.GetString().c_str() ); } @@ -69,7 +69,7 @@ namespace Multiplayer return ret; } - void NetworkEntityAuthorityTracker::RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId previousOwner) + void NetworkEntityAuthorityTracker::RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner) { auto mapIter = m_entityAuthorityMap.find(entityHandle.GetNetEntityId()); if (mapIter != m_entityAuthorityMap.end()) @@ -87,7 +87,7 @@ namespace Multiplayer } } - AZLOG(NET_AuthTracker, "AuthTracker: Removing networkEntityId %u from %u", aznumeric_cast(entityHandle.GetNetEntityId()), aznumeric_cast(previousOwner)); + AZLOG(NET_AuthTracker, "AuthTracker: Removing networkEntityId %u from %s", aznumeric_cast(entityHandle.GetNetEntityId()), previousOwner.GetString().c_str()); if (auto localEnt = entityHandle.GetEntity()) { if (authorityStack.empty()) @@ -167,7 +167,7 @@ namespace Multiplayer return InvalidHostId; } - NetworkEntityAuthorityTracker::TimeoutData::TimeoutData(ConstNetworkEntityHandle entityHandle, HostId previousOwner) + NetworkEntityAuthorityTracker::TimeoutData::TimeoutData(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner) : m_entityHandle(entityHandle) , m_previousOwner(previousOwner) { @@ -205,9 +205,9 @@ namespace Multiplayer { AZLOG_ERROR ( - "Timed out entity id %u during migration previous owner %u, removing it", + "Timed out entity id %u during migration previous owner %s, removing it", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(timeoutData->second.m_previousOwner) + timeoutData->second.m_previousOwner.GetString().c_str() ); m_networkEntityManager.MarkForRemoval(entityHandle); } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h index d69edcf55b..0f4ff5665a 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h @@ -24,8 +24,8 @@ namespace Multiplayer NetworkEntityAuthorityTracker(INetworkEntityManager& networkEntityManager); bool DoesEntityHaveOwner(ConstNetworkEntityHandle entityHandle) const; - bool AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId newOwner); - void RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId previousOwner); + bool AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& newOwner); + void RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner); HostId GetEntityAuthorityManager(ConstNetworkEntityHandle entityHandle) const; private: @@ -37,7 +37,7 @@ namespace Multiplayer struct TimeoutData final { TimeoutData() = default; - TimeoutData(ConstNetworkEntityHandle entityHandle, HostId previousOwner); + TimeoutData(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner); ConstNetworkEntityHandle m_entityHandle; HostId m_previousOwner = InvalidHostId; }; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp index 6f5819eaa3..ef338840f9 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp @@ -20,43 +20,29 @@ namespace Multiplayer : m_entity(entity) , m_networkEntityTracker(networkEntityTracker) { - if (m_networkEntityTracker) + if (m_networkEntityTracker == nullptr) { - m_changeDirty = m_networkEntityTracker->GetChangeDirty(m_entity); + m_networkEntityTracker = GetNetworkEntityTracker(); } - if (entity) - { - AZ_Assert(networkEntityTracker, "NetworkEntityTracker is not valid"); - NetBindComponent* netBindComponent = m_entity->template FindComponent(); - AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); - m_netBindComponent = netBindComponent; - m_netEntityId = netBindComponent->GetNetEntityId(); - } - } - - ConstNetworkEntityHandle::ConstNetworkEntityHandle(AZ::Entity* entity, NetEntityId netEntityId, const NetworkEntityTracker* networkEntityTracker) - : m_entity(entity) - , m_netEntityId(netEntityId) - , m_networkEntityTracker(networkEntityTracker) - { if (m_networkEntityTracker) { m_changeDirty = m_networkEntityTracker->GetChangeDirty(m_entity); } - } - ConstNetworkEntityHandle::ConstNetworkEntityHandle(NetBindComponent* netBindComponent, const NetworkEntityTracker* networkEntityTracker) - : m_entity(netBindComponent->GetEntity()) - , m_netBindComponent(netBindComponent) - , m_networkEntityTracker(networkEntityTracker) - , m_netEntityId(netBindComponent->GetNetEntityId()) - { - if (m_networkEntityTracker) + if (entity) { - m_changeDirty = m_networkEntityTracker->GetChangeDirty(m_entity); + AZ_Assert(networkEntityTracker, "NetworkEntityTracker is not valid"); + m_netBindComponent = networkEntityTracker->GetNetBindComponent(entity); + if (m_netBindComponent != nullptr) + { + m_netEntityId = m_netBindComponent->GetNetEntityId(); + } + else + { + *this = ConstNetworkEntityHandle(); + } } - AZ_Assert(networkEntityTracker, "NetworkEntityTracker is not valid"); } bool ConstNetworkEntityHandle::Exists() const @@ -144,7 +130,7 @@ namespace Multiplayer } if (m_netBindComponent == nullptr) { - m_netBindComponent = m_entity->template FindComponent(); + m_netBindComponent = m_networkEntityTracker->GetNetBindComponent(m_entity); } return m_netBindComponent; } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index bcd4c9aad8..db7f7243cc 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -41,11 +43,22 @@ namespace Multiplayer AZ::Interface::Unregister(this); } - void NetworkEntityManager::Initialize(HostId hostId, AZStd::unique_ptr entityDomain) + void NetworkEntityManager::Initialize(const HostId& hostId, AZStd::unique_ptr entityDomain) { m_hostId = hostId; m_entityDomain = AZStd::move(entityDomain); m_updateEntityDomainEvent.Enqueue(net_EntityDomainUpdateMs, true); + m_entityDomain->ActivateTracking(m_ownedEntities); + } + + bool NetworkEntityManager::IsInitialized() const + { + return m_entityDomain != nullptr; + } + + IEntityDomain* NetworkEntityManager::GetEntityDomain() const + { + return m_entityDomain.get(); } NetworkEntityTracker* NetworkEntityManager::GetNetworkEntityTracker() @@ -63,7 +76,7 @@ namespace Multiplayer return &m_multiplayerComponentRegistry; } - HostId NetworkEntityManager::GetHostId() const + const HostId& NetworkEntityManager::GetHostId() const { return m_hostId; } @@ -86,7 +99,7 @@ namespace Multiplayer NetworkEntityHandle NetworkEntityManager::AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) { m_networkEntityTracker.Add(netEntityId, entity); - return NetworkEntityHandle(entity, netEntityId, &m_networkEntityTracker); + return NetworkEntityHandle(entity, &m_networkEntityTracker); } void NetworkEntityManager::MarkForRemoval(const ConstNetworkEntityHandle& entityHandle) @@ -96,8 +109,6 @@ namespace Multiplayer if (net_DebugCheckNetworkEntityManager) { AZ_Assert(entityHandle.GetNetBindComponent(), "No NetBindComponent found on networked entity"); - [[maybe_unused]] const bool isClientOnlyEntity = false;// (ServerIdFromEntityId(it->first) == InvalidHostId); - AZ_Assert(entityHandle.GetNetBindComponent()->IsNetEntityRoleAuthority() || isClientOnlyEntity, "Trying to delete a proxy entity, this will lead to issues deserializing entity updates"); } m_removeList.push_back(entityHandle.GetNetEntityId()); m_removeEntitiesEvent.Enqueue(AZ::TimeMs{ 0 }); @@ -204,6 +215,29 @@ namespace Multiplayer m_localDeferredRpcMessages.emplace_back(AZStd::move(message)); } + void NetworkEntityManager::DebugDraw() const + { + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId); + AzFramework::DebugDisplayRequests* debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + + for (NetworkEntityTracker::const_iterator it = m_networkEntityTracker.begin(); it != m_networkEntityTracker.end(); ++it) + { + AZ::Entity* entity = it->second; + NetBindComponent* netBindComponent = m_networkEntityTracker.GetNetBindComponent(entity); + if (netBindComponent->GetNetEntityRole() == NetEntityRole::Authority) + { + const AZ::Aabb entityBounds = AZ::Interface::Get()->GetEntityWorldBoundsUnion(entity->GetId()); + debugDisplay->DrawWireBox(entityBounds.GetMin(), entityBounds.GetMax()); + } + } + + if (m_entityDomain != nullptr) + { + m_entityDomain->DebugDraw(); + } + } + void NetworkEntityManager::DispatchLocalDeferredRpcMessages() { for (NetworkEntityRpcMessage& rpcMessage : m_localDeferredRpcMessages) @@ -211,7 +245,7 @@ namespace Multiplayer AZ::Entity* entity = m_networkEntityTracker.GetRaw(rpcMessage.GetEntityId()); if (entity != nullptr) { - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = m_networkEntityTracker.GetNetBindComponent(entity); AZ_Assert(netBindComponent != nullptr, "Attempting to send an RPC to an entity with no NetBindComponent"); netBindComponent->HandleRpcMessage(nullptr, NetEntityRole::Server, rpcMessage); } @@ -226,9 +260,8 @@ namespace Multiplayer return; } - m_entitiesNotInDomain.clear(); - m_entityDomain->RetrieveEntitiesNotInDomain(m_entitiesNotInDomain); - for (NetEntityId exitingId : m_entitiesNotInDomain) + const IEntityDomain::EntitiesNotInDomain& entitiesNotInDomain = m_entityDomain->RetrieveEntitiesNotInDomain(); + for (NetEntityId exitingId : entitiesNotInDomain) { OnEntityExitDomain(exitingId); } @@ -239,18 +272,6 @@ namespace Multiplayer bool safeToExit = true; NetworkEntityHandle entityHandle = m_networkEntityTracker.Get(entityId); - // ClientAutonomous entities need special handling here. When we migrate a player's entity the player's client must tell the new server which - // entity they were controlling. If we tell them to migrate before they know which entity they control it results in them requesting a new entity - // from the new server, resulting in an orphaned PlayerChar. PlayerControllerComponentServerAuthority::PlayerClientHasControlledEntity() - // will tell us whether the client sent an RPC acknowledging that they now know which entity is theirs. - if (AZ::Entity* entity = entityHandle.GetEntity()) - { - //if (PlayerComponent::Authority* playerController = FindController(nonConstExitingEntityPtr)) - //{ - // safeToExit = playerController->PlayerClientHasControlledEntity(); - //} - } - // We also need special handling for the EntityHierarchyComponent as well, since related entities need to be migrated together //auto* hierarchyController = FindController(nonConstExitingEntityPtr); //if (hierarchyController) @@ -279,6 +300,21 @@ namespace Multiplayer } } + void NetworkEntityManager::Reset() + { + m_multiplayerComponentRegistry.Reset(); + m_removeList.clear(); + m_entityDomain = nullptr; + m_updateEntityDomainEvent.RemoveFromQueue(); + m_ownedEntities.clear(); + m_entityExitDomainEvent.DisconnectAllHandlers(); + m_onEntityMarkedDirty.DisconnectAllHandlers(); + m_onEntityNotifyChanges.DisconnectAllHandlers(); + m_controllersActivatedEvent.DisconnectAllHandlers(); + m_controllersDeactivatedEvent.DisconnectAllHandlers(); + m_localDeferredRpcMessages.clear(); + } + void NetworkEntityManager::RemoveEntities() { AZStd::vector removeList; @@ -330,6 +366,7 @@ namespace Multiplayer originalToCloneIdMap[originalEntity->GetId()] = clone->GetId(); + // Can't use NetworkEntityTracker to do the lookup since the entity has not activated yet NetBindComponent* netBindComponent = clone->FindComponent(); if (netBindComponent != nullptr) { @@ -366,7 +403,6 @@ namespace Multiplayer &AzFramework::GameEntityContextRequestBus::Events::AddGameEntity, clone); returnList.push_back(netBindComponent->GetEntityHandle()); - } else { diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h index 50e6beedad..133c35dce0 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h @@ -31,15 +31,15 @@ namespace Multiplayer NetworkEntityManager(); ~NetworkEntityManager(); - //! Only invoked for authoritative hosts - void Initialize(HostId hostId, AZStd::unique_ptr entityDomain); - //! INetworkEntityManager overrides. //! @{ + void Initialize(const HostId& hostId, AZStd::unique_ptr entityDomain) override; + bool IsInitialized() const override; + IEntityDomain* GetEntityDomain() const override; NetworkEntityTracker* GetNetworkEntityTracker() override; NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() override; MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() override; - HostId GetHostId() const override; + const HostId& GetHostId() const override; ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const override; NetEntityId GetNetEntityIdById(const AZ::EntityId& entityId) const override; @@ -62,9 +62,7 @@ namespace Multiplayer AZStd::unique_ptr RequestNetSpawnableInstantiation( const AZ::Data::Asset& netSpawnable, const AZ::Transform& transform) override; - void SetupNetEntity(AZ::Entity* netEntity, PrefabEntityId prefabEntityId, NetEntityRole netEntityRole) override; - uint32_t GetEntityCount() const override; NetworkEntityHandle AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) override; void MarkForRemoval(const ConstNetworkEntityHandle& entityHandle) override; @@ -81,17 +79,22 @@ namespace Multiplayer void NotifyControllersActivated(const ConstNetworkEntityHandle& entityHandle, EntityIsMigrating entityIsMigrating) override; void NotifyControllersDeactivated(const ConstNetworkEntityHandle& entityHandle, EntityIsMigrating entityIsMigrating) override; void HandleLocalRpcMessage(NetworkEntityRpcMessage& message) override; + void DebugDraw() const override; //! @} void DispatchLocalDeferredRpcMessages(); void UpdateEntityDomain(); void OnEntityExitDomain(NetEntityId entityId); + //! RootSpawnableNotificationBus //! @{ void OnRootSpawnableAssigned(AZ::Data::Asset rootSpawnable, uint32_t generation) override; void OnRootSpawnableReleased(uint32_t generation) override; //! @} + //! Used to release all memory prior to shutdown. + void Reset(); + private: void RemoveEntities(); NetEntityId NextId(); @@ -105,7 +108,6 @@ namespace Multiplayer AZStd::unique_ptr m_entityDomain; AZ::ScheduledEvent m_updateEntityDomainEvent; - IEntityDomain::EntitiesNotInDomain m_entitiesNotInDomain; OwnedEntitySet m_ownedEntities; EntityExitDomainEvent m_entityExitDomainEvent; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp index e31907461b..928f5b4f80 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -21,16 +22,26 @@ namespace Multiplayer m_netEntityIdMap[entity->GetId()] = netEntityId; } + void NetworkEntityTracker::RegisterNetBindComponent(AZ::Entity* entity, NetBindComponent* component) + { + m_netBindingMap[entity] = component; + } + + void NetworkEntityTracker::UnregisterNetBindComponent(NetBindComponent* component) + { + m_netBindingMap.erase(component->GetEntity()); + } + NetworkEntityHandle NetworkEntityTracker::Get(NetEntityId netEntityId) { AZ::Entity* entity = GetRaw(netEntityId); - return NetworkEntityHandle(entity, netEntityId, this); + return NetworkEntityHandle(entity, this); } ConstNetworkEntityHandle NetworkEntityTracker::Get(NetEntityId netEntityId) const { AZ::Entity* entity = GetRaw(netEntityId); - return ConstNetworkEntityHandle(entity, netEntityId, this); + return ConstNetworkEntityHandle(entity, this); } NetEntityId NetworkEntityTracker::Get(const AZ::EntityId& entityId) const diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h index 0e632dc7b4..a7f5b9e585 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h @@ -15,6 +15,8 @@ namespace Multiplayer { + class NetBindComponent; + //! @class NetworkEntityTracker //! @brief The responsibly of this class is to allow entity netEntityId's to be looked up. class NetworkEntityTracker @@ -23,16 +25,26 @@ namespace Multiplayer using EntityMap = AZStd::unordered_map; using NetEntityIdMap = AZStd::unordered_map; + using NetBindingMap = AZStd::unordered_map; using iterator = EntityMap::iterator; using const_iterator = EntityMap::const_iterator; NetworkEntityTracker() = default; - //! Adds a networked entity to the tracker + //! Adds a networked entity to the tracker. //! @param netEntityId the networkId of the entity to add //! @param entity pointer to the entity corresponding to the networkId void Add(NetEntityId netEntityId, AZ::Entity* entity); + //! Registers a new NetBindComponent with the NetworkEntityTracker. + //! @param entity pointer to the entity we are registering the NetBindComponent for + //! @param component pointer to the NetBindComponent being registered + void RegisterNetBindComponent(AZ::Entity* entity, NetBindComponent* component); + + //! Unregisters a NetBindComponent from the NetworkEntityTracker. + //! @param component pointer to the NetBindComponent being removed + void UnregisterNetBindComponent(NetBindComponent* component); + //! Returns an entity handle which can validate entity existence. NetworkEntityHandle Get(NetEntityId netEntityId); ConstNetworkEntityHandle Get(NetEntityId netEntityId) const; @@ -46,9 +58,14 @@ namespace Multiplayer //! Get a raw pointer of an entity. AZ::Entity *GetRaw(NetEntityId netEntityId) const; - //! Moves the given iterator out of the entity holder and returns the ptr + //! Moves the given iterator out of the entity holder and returns the ptr. AZ::Entity *Move(EntityMap::iterator iter); + //! Retrieves the NetBindComponent for the provided AZ::Entity, nullptr if the entity does not have netbinding. + //! @param entity pointer to the entity to retrieve the NetBindComponent for + //! @return pointer to the entities NetBindComponent, or nullptr if the entity doesn't exist or does not have netbinding + NetBindComponent* GetNetBindComponent(AZ::Entity* rawEntity) const; + //! Container overloads //!@{ iterator begin(); @@ -79,6 +96,7 @@ namespace Multiplayer EntityMap m_entityMap; NetEntityIdMap m_netEntityIdMap; + NetBindingMap m_netBindingMap; uint32_t m_deleteChangeDirty = 0; uint32_t m_addChangeDirty = 0; }; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl index 44098336be..e9210e7a9f 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl @@ -10,6 +10,16 @@ namespace Multiplayer { + inline NetBindComponent* NetworkEntityTracker::GetNetBindComponent(AZ::Entity* rawEntity) const + { + auto found = m_netBindingMap.find(rawEntity); + if (found != m_netBindingMap.end()) + { + return found->second; + } + return nullptr; + } + inline NetworkEntityTracker::iterator NetworkEntityTracker::begin() { return m_entityMap.begin(); diff --git a/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp b/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp index b37f485ff4..59dddf5652 100644 --- a/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp @@ -13,10 +13,12 @@ #include #include #include +#include namespace Multiplayer { AZ_CVAR(float, sv_RewindVolumeExtrudeDistance, 50.0f, nullptr, AZ::ConsoleFunctorFlags::Null, "The amount to increase rewind volume checks to account for fast moving entities"); + AZ_CVAR(bool, bg_RewindDebugDraw, false, nullptr, AZ::ConsoleFunctorFlags::Null, "If true enables debug draw of rewind operations"); NetworkTime::NetworkTime() { @@ -94,21 +96,46 @@ namespace Multiplayer // Since the vis system doesn't support rewound queries, first query with an expanded volume to catch any fast moving entities const AZ::Aabb expandedVolume = rewindVolume.GetExpanded(AZ::Vector3(sv_RewindVolumeExtrudeDistance)); + AzFramework::DebugDisplayRequests* debugDisplay = nullptr; + if (bg_RewindDebugDraw) + { + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId); + debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + } + + if (debugDisplay) + { + debugDisplay->SetColor(AZ::Colors::Red); + debugDisplay->DrawWireBox(expandedVolume.GetMin(), expandedVolume.GetMax()); + } + + NetworkEntityTracker* networkEntityTracker = GetNetworkEntityTracker(); AzFramework::IEntityBoundsUnion* entityBoundsUnion = AZ::Interface::Get(); - AZStd::vector gatheredEntities; AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(expandedVolume, - [entityBoundsUnion, rewindVolume, &gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) + [this, debugDisplay, networkEntityTracker, entityBoundsUnion, rewindVolume](const AzFramework::IVisibilityScene::NodeData& nodeData) { - gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size()); + m_rewoundEntities.reserve(m_rewoundEntities.size() + nodeData.m_entries.size()); for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) { if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) { AZ::Entity* entity = static_cast(visEntry->m_userData); - const AZ::Aabb currentBounds = entityBoundsUnion->GetEntityLocalBoundsUnion(entity->GetId()); - const AZ::Vector3 currentCenter = currentBounds.GetCenter(); + NetworkEntityHandle entityHandle(entity, networkEntityTracker); + if (entityHandle.GetNetBindComponent() == nullptr) + { + // Not a net-bound entity, terminate processing of this entity + return; + } + const AZ::Aabb currentBounds = entityBoundsUnion->GetEntityWorldBoundsUnion(entity->GetId()); + const AZ::Vector3 currentCenter = currentBounds.GetCenter(); NetworkTransformComponent* networkTransform = entity->template FindComponent(); + if (debugDisplay) + { + debugDisplay->SetColor(AZ::Colors::White); + debugDisplay->DrawWireBox(currentBounds.GetMin(), currentBounds.GetMax()); + } if (networkTransform != nullptr) { @@ -123,24 +150,20 @@ namespace Multiplayer } const AZ::Vector3 rewindOffset = rewindCenter - currentCenter; // Compute offset between rewound and current positions const AZ::Aabb rewoundAabb = currentBounds.GetTranslated(rewindOffset); // Apply offset to the entity aabb + if (debugDisplay) + { + debugDisplay->SetColor(AZ::Colors::Grey); + debugDisplay->DrawWireBox(rewoundAabb.GetMin(), rewoundAabb.GetMax()); + } if (AZ::ShapeIntersection::Overlaps(rewoundAabb, rewindVolume)) // Validate the rewound aabb intersects our rewind volume { - // Due to component constraints, netBindComponent must exist if networkTransform exists - NetBindComponent* netBindComponent = entity->template FindComponent(); - gatheredEntities.push_back(netBindComponent); + m_rewoundEntities.push_back(entityHandle); } } } } }); - - NetworkEntityTracker* networkEntityTracker = GetNetworkEntityTracker(); - for (NetBindComponent* netBindComponent : gatheredEntities) - { - netBindComponent->NotifySyncRewindState(); - m_rewoundEntities.push_back(NetworkEntityHandle(netBindComponent, networkEntityTracker)); - } } void NetworkTime::ClearRewoundEntities() diff --git a/Gems/Multiplayer/Code/Source/Pipeline/NetworkSpawnableHolderComponent.cpp b/Gems/Multiplayer/Code/Source/Pipeline/NetworkSpawnableHolderComponent.cpp index 5d677c6101..af99d832e5 100644 --- a/Gems/Multiplayer/Code/Source/Pipeline/NetworkSpawnableHolderComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Pipeline/NetworkSpawnableHolderComponent.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -37,20 +38,19 @@ namespace Multiplayer void NetworkSpawnableHolderComponent::Activate() { - const auto agentType = GetMultiplayer()->GetAgentType(); - const bool shouldSpawnNetEntities = - (agentType == MultiplayerAgentType::ClientServer || agentType == MultiplayerAgentType::DedicatedServer); + IMultiplayer* multiplayer = GetMultiplayer(); + const bool shouldSpawnNetEntities = multiplayer->GetShouldSpawnNetworkEntities(); - if(shouldSpawnNetEntities) + if (shouldSpawnNetEntities) { AZ::Transform rootEntityTransform = AZ::Transform::CreateIdentity(); - if(auto* transformInterface = GetEntity()->GetTransform()) + if (auto* transformInterface = GetEntity()->GetTransform()) { rootEntityTransform = transformInterface->GetWorldTM(); } - INetworkEntityManager* networkEntityManager = GetNetworkEntityManager(); + INetworkEntityManager* networkEntityManager = multiplayer->GetNetworkEntityManager(); AZ_Assert(networkEntityManager != nullptr, "Network Entity Manager must be initialized before NetworkSpawnableHolderComponent is activated"); diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp index 7c9ee2a667..e4e5a7bc53 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp @@ -7,9 +7,16 @@ */ #include +#include namespace Multiplayer { + NullReplicationWindow::NullReplicationWindow(AzNetworking::IConnection* connection) + : m_connection(connection) + { + ; + } + bool NullReplicationWindow::ReplicationSetUpdateReady() { return true; @@ -36,6 +43,29 @@ namespace Multiplayer ; } + AzNetworking::PacketId NullReplicationWindow::SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) + { + MultiplayerPackets::EntityUpdates entityUpdatePacket; + entityUpdatePacket.SetHostTimeMs(GetNetworkTime()->GetHostTimeMs()); + entityUpdatePacket.SetHostFrameId(GetNetworkTime()->GetHostFrameId()); + entityUpdatePacket.SetEntityMessages(entityUpdateVector); + return m_connection->SendUnreliablePacket(entityUpdatePacket); + } + + void NullReplicationWindow::SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) + { + MultiplayerPackets::EntityRpcs entityRpcsPacket; + entityRpcsPacket.SetEntityRpcs(entityRpcVector); + if (reliable) + { + m_connection->SendReliablePacket(entityRpcsPacket); + } + else + { + m_connection->SendUnreliablePacket(entityRpcsPacket); + } + } + void NullReplicationWindow::DebugDraw() const { // Nothing to draw diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h index 91788a6b15..39e373f164 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h @@ -9,6 +9,7 @@ #pragma once #include +#include namespace Multiplayer { @@ -16,7 +17,7 @@ namespace Multiplayer : public IReplicationWindow { public: - NullReplicationWindow() = default; + NullReplicationWindow(AzNetworking::IConnection* connection); //! IReplicationWindow interface //! @{ @@ -25,10 +26,13 @@ namespace Multiplayer uint32_t GetMaxProxyEntityReplicatorSendCount() const override; bool IsInWindow(const ConstNetworkEntityHandle& entityPtr, NetEntityRole& outNetworkRole) const override; void UpdateWindow() override; + AzNetworking::PacketId SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) override; + void SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) override; void DebugDraw() const override; //! @} private: ReplicationSet m_emptySet; + AzNetworking::IConnection* m_connection = nullptr; }; } diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp index 3677eb8b5c..9d9cc74d2b 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -50,7 +51,7 @@ namespace Multiplayer return m_priority < rhs.m_priority; } - ServerToClientReplicationWindow::ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, const AzNetworking::IConnection* connection) + ServerToClientReplicationWindow::ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, AzNetworking::IConnection* connection) : m_controlledEntity(controlledEntity) , m_entityActivatedEventHandler([this](AZ::Entity* entity) { OnEntityActivated(entity); }) , m_entityDeactivatedEventHandler([this](AZ::Entity* entity) { OnEntityDeactivated(entity); }) @@ -106,7 +107,7 @@ namespace Multiplayer void ServerToClientReplicationWindow::UpdateWindow() { - // clear the candidate queue, we're going to rebuild it + // Clear the candidate queue, we're going to rebuild it ReplicationCandidateQueue::container_type clearQueueContainer; clearQueueContainer.reserve(sv_MaxEntitiesToTrackReplication); // Move the clearQueueContainer into the ReplicationCandidateQueue to maintain the reserved memory @@ -117,7 +118,7 @@ namespace Multiplayer NetBindComponent* netBindComponent = m_controlledEntity.GetNetBindComponent(); if (!netBindComponent || !netBindComponent->HasController()) { - // if we don't have a controlled entity, or we no longer have control of the entity, don't run the update + // If we don't have a controlled entity, or we no longer have control of the entity, don't run the update return; } @@ -148,24 +149,25 @@ namespace Multiplayer for (AzFramework::VisibilityEntry* visEntry : gatheredEntries) { AZ::Entity* entity = static_cast(visEntry->m_userData); - - if (filterEntityManager && filterEntityManager->IsEntityFiltered(entity, m_controlledEntity, m_connection->GetConnectionId())) + NetworkEntityHandle entityHandle(entity, networkEntityTracker); + if (entityHandle.GetNetBindComponent() == nullptr) { + // Entity does not have netbinding, skip this entity continue; } - NetBindComponent* entryNetBindComponent = entity->template FindComponent(); - if (entryNetBindComponent != nullptr) + if (filterEntityManager && filterEntityManager->IsEntityFiltered(entity, m_controlledEntity, m_connection->GetConnectionId())) { - // We want to find the closest extent to the player and prioritize using that distance - const AZ::Vector3 supportNormal = controlledEntityPosition - visEntry->m_boundingVolume.GetCenter(); - const AZ::Vector3 closestPosition = visEntry->m_boundingVolume.GetSupport(supportNormal); - const float gatherDistanceSquared = controlledEntityPosition.GetDistanceSq(closestPosition); - const float priority = (gatherDistanceSquared > 0.0f) ? 1.0f / gatherDistanceSquared : 0.0f; - - NetworkEntityHandle entityHandle(entryNetBindComponent, networkEntityTracker); - AddEntityToReplicationSet(entityHandle, priority, gatherDistanceSquared); + continue; } + + // We want to find the closest extent to the player and prioritize using that distance + const AZ::Vector3 supportNormal = controlledEntityPosition - visEntry->m_boundingVolume.GetCenter(); + const AZ::Vector3 closestPosition = visEntry->m_boundingVolume.GetSupport(supportNormal); + const float gatherDistanceSquared = controlledEntityPosition.GetDistanceSq(closestPosition); + const float priority = (gatherDistanceSquared > 0.0f) ? 1.0f / gatherDistanceSquared : 0.0f; + + AddEntityToReplicationSet(entityHandle, priority, gatherDistanceSquared); } // Add in Autonomous Entities @@ -179,6 +181,29 @@ namespace Multiplayer //} } + AzNetworking::PacketId ServerToClientReplicationWindow::SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) + { + MultiplayerPackets::EntityUpdates entityUpdatePacket; + entityUpdatePacket.SetHostTimeMs(GetNetworkTime()->GetHostTimeMs()); + entityUpdatePacket.SetHostFrameId(GetNetworkTime()->GetHostFrameId()); + entityUpdatePacket.SetEntityMessages(entityUpdateVector); + return m_connection->SendUnreliablePacket(entityUpdatePacket); + } + + void ServerToClientReplicationWindow::SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) + { + MultiplayerPackets::EntityRpcs entityRpcsPacket; + entityRpcsPacket.SetEntityRpcs(entityRpcVector); + if (reliable) + { + m_connection->SendReliablePacket(entityRpcsPacket); + } + else + { + m_connection->SendUnreliablePacket(entityRpcsPacket); + } + } + void ServerToClientReplicationWindow::DebugDraw() const { //static const float BoundaryStripeHeight = 1.0f; @@ -204,11 +229,10 @@ namespace Multiplayer void ServerToClientReplicationWindow::OnEntityActivated(AZ::Entity* entity) { - NetBindComponent* netBindComponent = entity->FindComponent(); + ConstNetworkEntityHandle entityHandle(entity); + NetBindComponent* netBindComponent = entityHandle.GetNetBindComponent(); if (netBindComponent != nullptr) { - ConstNetworkEntityHandle entityHandle(netBindComponent, GetNetworkEntityTracker()); - if (netBindComponent->HasController()) { if (IFilterEntityManager* filter = GetMultiplayer()->GetFilterEntityManager()) @@ -237,10 +261,9 @@ namespace Multiplayer void ServerToClientReplicationWindow::OnEntityDeactivated(AZ::Entity* entity) { - NetBindComponent* netBindComponent = entity->FindComponent(); - if (netBindComponent != nullptr) + ConstNetworkEntityHandle entityHandle(entity); + if (entityHandle.GetNetBindComponent() != nullptr) { - ConstNetworkEntityHandle entityHandle(netBindComponent, GetNetworkEntityTracker()); m_replicationSet.erase(entityHandle); } } diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h index bfaa351095..b034bde90c 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h @@ -38,7 +38,7 @@ namespace Multiplayer // we sort lowest priority first, so that we can easily keep the biggest N priorities using ReplicationCandidateQueue = AZStd::priority_queue; - ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, const AzNetworking::IConnection* connection); + ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, AzNetworking::IConnection* connection); //! IReplicationWindow interface //! @{ @@ -47,6 +47,8 @@ namespace Multiplayer uint32_t GetMaxProxyEntityReplicatorSendCount() const override; bool IsInWindow(const ConstNetworkEntityHandle& entityPtr, NetEntityRole& outNetworkRole) const override; void UpdateWindow() override; + AzNetworking::PacketId SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) override; + void SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) override; void DebugDraw() const override; //! @} @@ -75,7 +77,7 @@ namespace Multiplayer //NetBindComponent* m_controlledNetBindComponent = nullptr; - const AzNetworking::IConnection* m_connection = nullptr; + AzNetworking::IConnection* m_connection = nullptr; // Cached values to detect a poor network connection uint32_t m_lastCheckedSentPackets = 0; diff --git a/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp b/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp index 316f85c214..d6dd068c3f 100644 --- a/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp +++ b/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include namespace Multiplayer { diff --git a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h new file mode 100644 index 0000000000..7f98d22702 --- /dev/null +++ b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h @@ -0,0 +1,659 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#ifdef HAVE_BENCHMARK +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Multiplayer +{ + class BenchmarkComponentApplicationRequests : public AZ::ComponentApplicationRequests + { + public: + void RegisterComponentDescriptor([[maybe_unused]] const AZ::ComponentDescriptor* descriptor) override {} + void UnregisterComponentDescriptor([[maybe_unused]] const AZ::ComponentDescriptor* descriptor) override {} + AZ::ComponentApplication* GetApplication() override { return {}; } + void RegisterEntityAddedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void RegisterEntityRemovedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void RegisterEntityActivatedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void RegisterEntityDeactivatedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void SignalEntityActivated([[maybe_unused]] AZ::Entity* entity) override {} + void SignalEntityDeactivated([[maybe_unused]] AZ::Entity* entity) override {} + bool RemoveEntity([[maybe_unused]] AZ::Entity* entity) override { return {}; } + bool DeleteEntity([[maybe_unused]] const AZ::EntityId& id) override { return {}; } + void EnumerateEntities([[maybe_unused]] const EntityCallback& callback) override {} + AZ::SerializeContext* GetSerializeContext() override { return {}; } + AZ::BehaviorContext* GetBehaviorContext() override { return {}; } + AZ::JsonRegistrationContext* GetJsonRegistrationContext() override { return {}; } + const char* GetAppRoot() const override { return {}; } + const char* GetEngineRoot() const override { return {}; } + const char* GetExecutableFolder() const override { return {}; } + void QueryApplicationType([[maybe_unused]] AZ::ApplicationTypeQuery& appType) const override {} + + AZStd::map m_entities; + + bool AddEntity(AZ::Entity* entity) override + { + m_entities[entity->GetId()] = entity; + return true; + } + + AZ::Entity* FindEntity(const AZ::EntityId& id) override + { + const auto iterator = m_entities.find(id); + if (iterator != m_entities.end()) + { + return iterator->second; + } + + return nullptr; + } + }; + + + class BenchmarkConnectionListener : public AzNetworking::IConnectionListener + { + public: + ConnectResult ValidateConnect([[maybe_unused]] const IpAddress& remoteAddress, [[maybe_unused]] const IPacketHeader& packetHeader, [[maybe_unused]] ISerializer& serializer) override + { + return {}; + } + + void OnConnect([[maybe_unused]] IConnection* connection) override + { + } + + PacketDispatchResult OnPacketReceived([[maybe_unused]] IConnection* connection, [[maybe_unused]] const IPacketHeader& packetHeader, [[maybe_unused]] ISerializer& serializer) override + { + return {}; + } + + void OnPacketLost([[maybe_unused]] IConnection* connection, [[maybe_unused]] PacketId packetId) override + { + } + + void OnDisconnect([[maybe_unused]] IConnection* connection, [[maybe_unused]] DisconnectReason reason, [[maybe_unused]] TerminationEndpoint endpoint) override + { + } + }; + + class BenchmarkTime : public AZ::ITime + { + public: + AZ::TimeMs GetElapsedTimeMs() const override + { + return {}; + } + + AZ::TimeUs GetElapsedTimeUs() const override + { + return {}; + } + }; + + class BenchmarkNetworkTime : public Multiplayer::INetworkTime + { + public: + bool IsTimeRewound() const override + { + return false; + } + + HostFrameId GetHostFrameId() const override + { + return {}; + } + + HostFrameId GetUnalteredHostFrameId() const override + { + return {}; + } + + void IncrementHostFrameId() override + { + } + + AZ::TimeMs GetHostTimeMs() const override + { + return {}; + } + + float GetHostBlendFactor() const override + { + return 0; + } + + AzNetworking::ConnectionId GetRewindingConnectionId() const override + { + return {}; + } + + void ForceSetTime([[maybe_unused]] HostFrameId frameId, [[maybe_unused]] AZ::TimeMs timeMs) override + { + } + + void SyncEntitiesToRewindState([[maybe_unused]] const AZ::Aabb& rewindVolume) override + { + } + + void ClearRewoundEntities() override + { + } + + void AlterTime([[maybe_unused]] HostFrameId frameId, [[maybe_unused]] AZ::TimeMs timeMs, [[maybe_unused]] float blendFactor, [[maybe_unused]] AzNetworking::ConnectionId rewindConnectionId) override + { + } + }; + + class BenchmarkMultiplayerConnection : public IConnection + { + public: + BenchmarkMultiplayerConnection(ConnectionId connectionId, const IpAddress& address, [[maybe_unused]] ConnectionRole connectionRole) + : IConnection(connectionId, address) + { + ; + } + + ~BenchmarkMultiplayerConnection() override = default; + + bool SendReliablePacket([[maybe_unused]] const IPacket& packet) override + { + return false; + } + + PacketId SendUnreliablePacket([[maybe_unused]] const IPacket& packet) override + { + return {}; + } + + bool WasPacketAcked([[maybe_unused]] PacketId packetId) const override + { + return false; + } + + ConnectionState GetConnectionState() const override + { + return {}; + } + + ConnectionRole GetConnectionRole() const override + { + return {}; + } + + bool Disconnect([[maybe_unused]] DisconnectReason reason, [[maybe_unused]] TerminationEndpoint endpoint) override + { + return false; + } + + void SetConnectionMtu([[maybe_unused]] uint32_t connectionMtu) override + { + } + + uint32_t GetConnectionMtu() const override + { + return 0; + } + }; + + class BenchmarkNetworkEntityManager : public Multiplayer::INetworkEntityManager + { + public: + BenchmarkNetworkEntityManager() : m_authorityTracker(*this) {} + + NetworkEntityTracker* GetNetworkEntityTracker() override { return &m_tracker; } + NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() override { return &m_authorityTracker; } + MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() override { return &m_multiplayerComponentRegistry; } + const HostId& GetHostId() const override { return m_hostId; } + EntityList CreateEntitiesImmediate( + [[maybe_unused]] const PrefabEntityId& prefabEntryId, + [[maybe_unused]] NetEntityRole netEntityRole, + [[maybe_unused]] const AZ::Transform& transform, + [[maybe_unused]] AutoActivate autoActivate) override { + return {}; + } + EntityList CreateEntitiesImmediate( + [[maybe_unused]] const PrefabEntityId& prefabEntryId, + [[maybe_unused]] NetEntityId netEntityId, + [[maybe_unused]] NetEntityRole netEntityRole, + [[maybe_unused]] AutoActivate autoActivate, + [[maybe_unused]] const AZ::Transform& transform) override { + return {}; + } + void SetupNetEntity( + [[maybe_unused]] AZ::Entity* netEntity, + [[maybe_unused]] PrefabEntityId prefabEntityId, + [[maybe_unused]] NetEntityRole netEntityRole) override {} + uint32_t GetEntityCount() const override { return {}; } + void MarkForRemoval( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) override {} + bool IsMarkedForRemoval( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) const override { + return {}; + } + void ClearEntityFromRemovalList( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) override {} + void ClearAllEntities() override {} + void AddEntityMarkedDirtyHandler( + [[maybe_unused]] AZ::Event<>::Handler& entityMarkedDirtyHandle) override {} + void AddEntityNotifyChangesHandler( + [[maybe_unused]] AZ::Event<>::Handler& entityNotifyChangesHandle) override {} + void AddEntityExitDomainHandler( + [[maybe_unused]] EntityExitDomainEvent::Handler& entityExitDomainHandler) override {} + void AddControllersActivatedHandler( + [[maybe_unused]] ControllersActivatedEvent::Handler& controllersActivatedHandler) override {} + void AddControllersDeactivatedHandler( + [[maybe_unused]] ControllersDeactivatedEvent::Handler& controllersDeactivatedHandler) override {} + void NotifyEntitiesDirtied() override {} + void NotifyEntitiesChanged() override {} + void NotifyControllersActivated( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, + [[maybe_unused]] EntityIsMigrating entityIsMigrating) override {} + void NotifyControllersDeactivated( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, + [[maybe_unused]] EntityIsMigrating entityIsMigrating) override {} + void HandleLocalRpcMessage( + [[maybe_unused]] NetworkEntityRpcMessage& message) override {} + + mutable AZStd::map m_networkEntityMap; + + NetworkEntityHandle AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) override + { + m_networkEntityMap[netEntityId] = entity; + return NetworkEntityHandle(entity, &m_tracker); + } + + ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const override + { + AZ::Entity* entity = m_networkEntityMap[netEntityId]; + return ConstNetworkEntityHandle(entity, &m_tracker); + } + + NetEntityId GetNetEntityIdById(const AZ::EntityId& entityId) const override + { + for (const auto& pair : m_networkEntityMap) + { + if (pair.second->GetId() == entityId) + { + return pair.first; + } + } + + return InvalidNetEntityId; + } + + [[nodiscard]] AZStd::unique_ptr RequestNetSpawnableInstantiation( + [[maybe_unused]] const AZ::Data::Asset& netSpawnable, + [[maybe_unused]] const AZ::Transform& transform) override + { + return {}; + } + + void Initialize([[maybe_unused]] const HostId& hostId, [[maybe_unused]] AZStd::unique_ptr entityDomain) override {} + bool IsInitialized() const override { return true; } + IEntityDomain* GetEntityDomain() const override { return nullptr; } + void DebugDraw() const override {} + + NetworkEntityTracker m_tracker; + NetworkEntityAuthorityTracker m_authorityTracker; + MultiplayerComponentRegistry m_multiplayerComponentRegistry; + HostId m_hostId; + }; + + class BenchmarkMultiplayer : public Multiplayer::IMultiplayer + { + public: + BenchmarkMultiplayer(BenchmarkNetworkEntityManager& manager) : m_manager(manager) {} + + MultiplayerAgentType GetAgentType() const override { return {}; } + void InitializeMultiplayer([[maybe_unused]] MultiplayerAgentType state) override {} + bool StartHosting([[maybe_unused]] uint16_t port, [[maybe_unused]] bool isDedicated) override { return {}; } + bool Connect([[maybe_unused]] const AZStd::string& remoteAddress, [[maybe_unused]] uint16_t port) override { return {}; } + void Terminate([[maybe_unused]] AzNetworking::DisconnectReason reason) override {} + void AddClientDisconnectedHandler([[maybe_unused]] ClientDisconnectedEvent::Handler& handler) override {} + void AddConnectionAcquiredHandler([[maybe_unused]] ConnectionAcquiredEvent::Handler& handler) override {} + void AddSessionInitHandler([[maybe_unused]] SessionInitEvent::Handler& handler) override {} + void AddSessionShutdownHandler([[maybe_unused]] SessionShutdownEvent::Handler& handler) override {} + void SendReadyForEntityUpdates([[maybe_unused]] bool readyForEntityUpdates) override {} + AZ::TimeMs GetCurrentHostTimeMs() const override { return {}; } + float GetCurrentBlendFactor() const override { return {}; } + INetworkTime* GetNetworkTime() override { return {}; } + INetworkEntityManager* GetNetworkEntityManager() override { return &m_manager; } + void SetFilterEntityManager([[maybe_unused]] IFilterEntityManager* entityFilter) override {} + IFilterEntityManager* GetFilterEntityManager() override { return {}; } + void AddClientMigrationStartEventHandler([[maybe_unused]] ClientMigrationStartEvent::Handler& handler) override {} + void AddClientMigrationEndEventHandler([[maybe_unused]] ClientMigrationEndEvent::Handler& handler) override {} + void AddNotifyClientMigrationHandler([[maybe_unused]] NotifyClientMigrationEvent::Handler& handler) override {} + void AddNotifyEntityMigrationEventHandler([[maybe_unused]] NotifyEntityMigrationEvent::Handler& handler) override {} + void SendNotifyClientMigrationEvent([[maybe_unused]] const HostId& hostId, [[maybe_unused]] uint64_t userIdentifier, [[maybe_unused]] ClientInputId lastClientInputId) override {} + void SendNotifyEntityMigrationEvent([[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, [[maybe_unused]] const HostId& remoteHostId) override {} + void SetShouldSpawnNetworkEntities([[maybe_unused]] bool value) override {} + bool GetShouldSpawnNetworkEntities() const override { return true; } + + BenchmarkNetworkEntityManager& m_manager; + }; + + class HierarchyBenchmarkBase + : public benchmark::Fixture + , public AllocatorsBase + { + public: + void SetUp(const benchmark::State&) override + { + internalSetUp(); + } + void SetUp(benchmark::State&) override + { + internalSetUp(); + } + + void TearDown(const benchmark::State&) override + { + internalTearDown(); + } + void TearDown(benchmark::State&) override + { + internalTearDown(); + } + + virtual void internalSetUp() + { + SetupAllocator(); + AZ::NameDictionary::Create(); + + m_ComponentApplicationRequests = AZStd::make_unique(); + AZ::Interface::Register(m_ComponentApplicationRequests.get()); + + // register components involved in testing + m_serializeContext = AZStd::make_unique(); + + m_transformDescriptor.reset(AzFramework::TransformComponent::CreateDescriptor()); + m_transformDescriptor->Reflect(m_serializeContext.get()); + + m_netBindDescriptor.reset(NetBindComponent::CreateDescriptor()); + m_netBindDescriptor->Reflect(m_serializeContext.get()); + + m_hierarchyRootDescriptor.reset(NetworkHierarchyRootComponent::CreateDescriptor()); + m_hierarchyRootDescriptor->Reflect(m_serializeContext.get()); + + m_hierarchyChildDescriptor.reset(NetworkHierarchyChildComponent::CreateDescriptor()); + m_hierarchyChildDescriptor->Reflect(m_serializeContext.get()); + + m_netTransformDescriptor.reset(NetworkTransformComponent::CreateDescriptor()); + m_netTransformDescriptor->Reflect(m_serializeContext.get()); + + m_NetworkEntityManager = AZStd::make_unique(); + + m_Multiplayer = AZStd::make_unique(*m_NetworkEntityManager); + AZ::Interface::Register(m_Multiplayer.get()); + + // Create space for replication stats + // Without Multiplayer::RegisterMultiplayerComponents() the stats go to invalid id, which is fine for unit tests + GetMultiplayer()->GetStats().ReserveComponentStats(Multiplayer::InvalidNetComponentId, 50, 0); + + m_Time = AZStd::make_unique(); + AZ::Interface::Register(m_Time.get()); + + m_NetworkTime = AZStd::make_unique(); + AZ::Interface::Register(m_NetworkTime.get()); + + EXPECT_NE(AZ::Interface::Get()->GetNetworkEntityManager(), nullptr); + + const IpAddress address("localhost", 1, ProtocolType::Udp); + m_Connection = AZStd::make_unique(ConnectionId{ 1 }, address, ConnectionRole::Connector); + m_ConnectionListener = AZStd::make_unique(); + + m_entityReplicationManager = AZStd::make_unique(*m_Connection, *m_ConnectionListener, EntityReplicationManager::Mode::LocalClientToRemoteServer); + + m_console.reset(aznew AZ::Console()); + AZ::Interface::Register(m_console.get()); + m_console->LinkDeferredFunctors(AZ::ConsoleFunctorBase::GetDeferredHead()); + + RegisterMultiplayerComponents(); + } + + virtual void internalTearDown() + { + AZ::Interface::Unregister(m_console.get()); + m_console.reset(); + + m_entityReplicationManager.reset(); + + m_Connection.reset(); + m_ConnectionListener.reset(); + + AZ::Interface::Unregister(m_NetworkTime.get()); + AZ::Interface::Unregister(m_Time.get()); + AZ::Interface::Unregister(m_Multiplayer.get()); + AZ::Interface::Unregister(m_ComponentApplicationRequests.get()); + + m_Time.reset(); + + m_NetworkEntityManager.reset(); + m_Multiplayer.reset(); + + m_transformDescriptor.reset(); + m_netTransformDescriptor.reset(); + m_hierarchyRootDescriptor.reset(); + m_hierarchyChildDescriptor.reset(); + m_netBindDescriptor.reset(); + m_serializeContext.reset(); + m_ComponentApplicationRequests.reset(); + + AZ::NameDictionary::Destroy(); + TeardownAllocator(); + } + + AZStd::unique_ptr m_console; + + AZStd::unique_ptr m_ComponentApplicationRequests; + AZStd::unique_ptr m_serializeContext; + AZStd::unique_ptr m_transformDescriptor; + AZStd::unique_ptr m_netBindDescriptor; + AZStd::unique_ptr m_hierarchyRootDescriptor; + AZStd::unique_ptr m_hierarchyChildDescriptor; + AZStd::unique_ptr m_netTransformDescriptor; + + AZStd::unique_ptr m_Multiplayer; + AZStd::unique_ptr m_NetworkEntityManager; + AZStd::unique_ptr m_Time; + AZStd::unique_ptr m_NetworkTime; + + AZStd::unique_ptr m_Connection; + AZStd::unique_ptr m_ConnectionListener; + + AZStd::unique_ptr m_entityReplicationManager; + + void SetupEntity(const AZStd::unique_ptr& entity, NetEntityId netId, NetEntityRole role) + { + const auto netBindComponent = entity->FindComponent(); + EXPECT_NE(netBindComponent, nullptr); + netBindComponent->PreInit(entity.get(), PrefabEntityId{ AZ::Name("test"), 1 }, netId, role); + entity->Init(); + } + + static void StopEntity(const AZStd::unique_ptr& entity) + { + const auto netBindComponent = entity->FindComponent(); + EXPECT_NE(netBindComponent, nullptr); + netBindComponent->StopEntity(); + } + + static void StopAndDeactivateEntity(AZStd::unique_ptr& entity) + { + if (entity) + { + StopEntity(entity); + entity->Deactivate(); + entity.reset(); + } + } + + void CreateEntityWithRootHierarchy(AZStd::unique_ptr& rootEntity) + { + rootEntity->CreateComponent(); + rootEntity->CreateComponent(); + rootEntity->CreateComponent(); + rootEntity->CreateComponent(); + } + + void CreateEntityWithChildHierarchy(AZStd::unique_ptr& childEntity) + { + childEntity->CreateComponent(); + childEntity->CreateComponent(); + childEntity->CreateComponent(); + childEntity->CreateComponent(); + } + + void SetParentIdOnNetworkTransform(const AZStd::unique_ptr& entity, NetEntityId netParentId) + { + /* Derived from NetworkTransformComponent.AutoComponent.xml */ + constexpr int totalBits = 6 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::Count*/; + constexpr int parentIdBit = 4 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::parentEntityId_DirtyFlag*/; + + ReplicationRecord currentRecord; + currentRecord.m_authorityToClient.AddBits(totalBits); + currentRecord.m_authorityToClient.SetBit(parentIdBit, true); + + constexpr uint32_t bufferSize = 100; + AZStd::array buffer = {}; + NetworkInputSerializer inSerializer(buffer.begin(), bufferSize); + inSerializer.Serialize(reinterpret_cast(netParentId), + "parentEntityId", /* Derived from NetworkTransformComponent.AutoComponent.xml */ + AZStd::numeric_limits::min(), AZStd::numeric_limits::max()); + + NetworkOutputSerializer outSerializer(buffer.begin(), bufferSize); + + ReplicationRecord notifyRecord = currentRecord; + entity->FindComponent()->SerializeStateDeltaMessage(currentRecord, outSerializer); + entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); + } + + template + void SetHierarchyRootFieldOnNetworkHierarchyChild(const AZStd::unique_ptr& entity, NetEntityId value) + { + /* Derived from NetworkHierarchyChildComponent.AutoComponent.xml */ + constexpr int totalBits = 1 /*NetworkHierarchyChildComponentInternal::AuthorityToClientDirtyEnum::Count*/; + constexpr int inHierarchyBit = 0 /*NetworkHierarchyChildComponentInternal::AuthorityToClientDirtyEnum::hierarchyRoot_DirtyFlag*/; + + ReplicationRecord currentRecord; + currentRecord.m_authorityToClient.AddBits(totalBits); + currentRecord.m_authorityToClient.SetBit(inHierarchyBit, true); + + constexpr uint32_t bufferSize = 100; + AZStd::array buffer = {}; + NetworkInputSerializer inSerializer(buffer.begin(), bufferSize); + inSerializer.Serialize(reinterpret_cast(value), + "hierarchyRoot", /* Derived from NetworkHierarchyChildComponent.AutoComponent.xml */ + AZStd::numeric_limits::min(), AZStd::numeric_limits::max()); + + NetworkOutputSerializer outSerializer(buffer.begin(), bufferSize); + + ReplicationRecord notifyRecord = currentRecord; + entity->FindComponent()->SerializeStateDeltaMessage(currentRecord, outSerializer); + entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); + } + + struct EntityInfo + { + enum class Role + { + Root, + Child, + None + }; + + EntityInfo(AZ::u64 entityId, const char* entityName, NetEntityId netId, Role role) + : m_entity(AZStd::make_unique(AZ::EntityId(entityId), entityName)) + , m_netId(netId) + , m_role(role) + { + } + + ~EntityInfo() + { + StopAndDeactivateEntity(m_entity); + } + + AZStd::unique_ptr m_entity; + NetEntityId m_netId; + AZStd::unique_ptr m_replicator; + Role m_role = Role::None; + }; + + void PopulateHierarchicalEntity(const EntityInfo& entityInfo) + { + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + switch (entityInfo.m_role) + { + case EntityInfo::Role::Root: + entityInfo.m_entity->CreateComponent(); + break; + case EntityInfo::Role::Child: + entityInfo.m_entity->CreateComponent(); + break; + case EntityInfo::Role::None: + break; + } + } + + void CreateParent(EntityInfo& parent) + { + PopulateHierarchicalEntity(parent); + + SetupEntity(parent.m_entity, parent.m_netId, NetEntityRole::Authority); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(parent.m_entity.get(), m_NetworkEntityManager->GetNetworkEntityTracker()); + parent.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_Connection.get(), NetEntityRole::Client, childHandle); + parent.m_replicator->Initialize(childHandle); + + parent.m_entity->Activate(); + } + + void CreateChildForParent(EntityInfo& child, EntityInfo& parent) + { + PopulateHierarchicalEntity(child); + + SetupEntity(child.m_entity, child.m_netId, NetEntityRole::Authority); + + // we need a parent-id value to be present in NetworkTransformComponent (which is in client mode and doesn't have a controller) + SetParentIdOnNetworkTransform(child.m_entity, parent.m_netId); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(child.m_entity.get(), m_NetworkEntityManager->GetNetworkEntityTracker()); + child.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_Connection.get(), NetEntityRole::Client, childHandle); + child.m_replicator->Initialize(childHandle); + + child.m_entity->Activate(); + } + + void ForceRebuildHierarchy(const AZStd::unique_ptr& rootEntity) + { + if (NetworkHierarchyRootComponent* root = rootEntity->FindComponent()) + { + root->RebuildHierarchy(); + } + } + }; +} + +#endif diff --git a/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h b/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h index 2deac1aa27..d6f65918c0 100644 --- a/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h +++ b/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -25,10 +26,10 @@ #include #include #include +#include +#include #include #include -#include -#include namespace Multiplayer { @@ -205,7 +206,7 @@ namespace Multiplayer NetworkEntityHandle AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) { m_networkEntityMap[netEntityId] = entity; - return NetworkEntityHandle(entity, netEntityId, m_networkEntityTracker.get()); + return NetworkEntityHandle(entity, m_networkEntityTracker.get()); } ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const @@ -248,17 +249,19 @@ namespace Multiplayer void SetupEntity(const AZStd::unique_ptr& entity, NetEntityId netId, NetEntityRole role) { - const auto netBindComponent = entity->FindComponent(); - EXPECT_NE(netBindComponent, nullptr); - netBindComponent->PreInit(entity.get(), PrefabEntityId{ AZ::Name("test"), 1 }, netId, role); - entity->Init(); + if (const auto netBindComponent = entity->FindComponent()) + { + netBindComponent->PreInit(entity.get(), PrefabEntityId{ AZ::Name("test"), 1 }, netId, role); + entity->Init(); + } } static void StopEntity(const AZStd::unique_ptr& entity) { - const auto netBindComponent = entity->FindComponent(); - EXPECT_NE(netBindComponent, nullptr); - netBindComponent->StopEntity(); + if (const auto netBindComponent = entity->FindComponent()) + { + netBindComponent->StopEntity(); + } } static void StopAndDeactivateEntity(AZStd::unique_ptr& entity) @@ -311,6 +314,29 @@ namespace Multiplayer entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); } + void SetTranslationOnNetworkTransform(const AZStd::unique_ptr& entity, AZ::Vector3 translation) + { + /* Derived from NetworkTransformComponent.AutoComponent.xml */ + constexpr int totalBits = 6 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::Count*/; + constexpr int translationBit = 1 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::translation_DirtyFlag*/; + + ReplicationRecord currentRecord; + currentRecord.m_authorityToClient.AddBits(totalBits); + currentRecord.m_authorityToClient.SetBit(translationBit, true); + + constexpr uint32_t bufferSize = 100; + AZStd::array buffer = {}; + NetworkInputSerializer inSerializer(buffer.begin(), bufferSize); + static_cast(&inSerializer)->Serialize(translation, + "translation" /* Derived from NetworkTransformComponent.AutoComponent.xml */); + + NetworkOutputSerializer outSerializer(buffer.begin(), bufferSize); + + ReplicationRecord notifyRecord = currentRecord; + entity->FindComponent()->SerializeStateDeltaMessage(currentRecord, outSerializer); + entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); + } + template void SetHierarchyRootFieldOnNetworkHierarchyChild(const AZStd::unique_ptr& entity, NetEntityId value) { diff --git a/Gems/Multiplayer/Code/Tests/MockInterfaces.h b/Gems/Multiplayer/Code/Tests/MockInterfaces.h index 42e034d234..44024f67ab 100644 --- a/Gems/Multiplayer/Code/Tests/MockInterfaces.h +++ b/Gems/Multiplayer/Code/Tests/MockInterfaces.h @@ -19,42 +19,53 @@ namespace UnitTest class MockMultiplayer : public Multiplayer::IMultiplayer { public: - MOCK_CONST_METHOD0(GetCurrentBlendFactor, float ()); MOCK_CONST_METHOD0(GetAgentType, Multiplayer::MultiplayerAgentType()); MOCK_METHOD1(InitializeMultiplayer, void(Multiplayer::MultiplayerAgentType)); MOCK_METHOD2(StartHosting, bool(uint16_t, bool)); - MOCK_METHOD2(Connect, bool(AZStd::string, uint16_t)); + MOCK_METHOD2(Connect, bool(const AZStd::string&, uint16_t)); MOCK_METHOD1(Terminate, void(AzNetworking::DisconnectReason)); + MOCK_METHOD1(AddClientMigrationStartEventHandler, void(Multiplayer::ClientMigrationStartEvent::Handler&)); + MOCK_METHOD1(AddClientMigrationEndEventHandler, void(Multiplayer::ClientMigrationEndEvent::Handler&)); MOCK_METHOD1(AddClientDisconnectedHandler, void(AZ::Event<>::Handler&)); + MOCK_METHOD1(AddNotifyClientMigrationHandler, void(Multiplayer::NotifyClientMigrationEvent::Handler&)); + MOCK_METHOD1(AddNotifyEntityMigrationEventHandler, void(Multiplayer::NotifyEntityMigrationEvent::Handler&)); MOCK_METHOD1(AddConnectionAcquiredHandler, void(AZ::Event::Handler&)); MOCK_METHOD1(AddSessionInitHandler, void(AZ::Event::Handler&)); MOCK_METHOD1(AddSessionShutdownHandler, void(AZ::Event::Handler&)); + MOCK_METHOD3(SendNotifyClientMigrationEvent, void(const Multiplayer::HostId&, uint64_t, Multiplayer::ClientInputId)); + MOCK_METHOD2(SendNotifyEntityMigrationEvent, void(const Multiplayer::ConstNetworkEntityHandle&, const Multiplayer::HostId&)); MOCK_METHOD1(SendReadyForEntityUpdates, void(bool)); MOCK_CONST_METHOD0(GetCurrentHostTimeMs, AZ::TimeMs()); + MOCK_CONST_METHOD0(GetCurrentBlendFactor, float()); MOCK_METHOD0(GetNetworkTime, Multiplayer::INetworkTime* ()); MOCK_METHOD0(GetNetworkEntityManager, Multiplayer::INetworkEntityManager* ()); MOCK_METHOD1(SetFilterEntityManager, void(Multiplayer::IFilterEntityManager*)); MOCK_METHOD0(GetFilterEntityManager, Multiplayer::IFilterEntityManager* ()); + MOCK_METHOD1(SetShouldSpawnNetworkEntities, void(bool)); + MOCK_CONST_METHOD0(GetShouldSpawnNetworkEntities, bool()); }; class MockNetworkEntityManager : public Multiplayer::INetworkEntityManager { public: - MOCK_METHOD2(RequestNetSpawnableInstantiation, AZStd::unique_ptr (const AZ::Data::Asset&, const AZ::Transform&)); - MOCK_METHOD4( - CreateEntitiesImmediate, - EntityList (const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityRole, const AZ::Transform&, Multiplayer::AutoActivate)); - MOCK_CONST_METHOD1(GetNetEntityIdById, Multiplayer::NetEntityId (const AZ::EntityId&)); + MOCK_METHOD2(Initialize, void(const Multiplayer::HostId&, AZStd::unique_ptr)); + MOCK_CONST_METHOD0(IsInitialized, bool()); + MOCK_CONST_METHOD0(GetEntityDomain, Multiplayer::IEntityDomain*()); MOCK_METHOD0(GetNetworkEntityTracker, Multiplayer::NetworkEntityTracker* ()); MOCK_METHOD0(GetNetworkEntityAuthorityTracker, Multiplayer::NetworkEntityAuthorityTracker* ()); MOCK_METHOD0(GetMultiplayerComponentRegistry, Multiplayer::MultiplayerComponentRegistry* ()); - MOCK_CONST_METHOD0(GetHostId, Multiplayer::HostId()); + MOCK_CONST_METHOD0(GetHostId, const Multiplayer::HostId&()); + MOCK_CONST_METHOD1(GetEntity, Multiplayer::ConstNetworkEntityHandle(Multiplayer::NetEntityId)); + MOCK_CONST_METHOD1(GetNetEntityIdById, Multiplayer::NetEntityId(const AZ::EntityId&)); MOCK_METHOD3(CreateEntitiesImmediate, EntityList(const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityRole, const AZ:: Transform&)); + MOCK_METHOD4( + CreateEntitiesImmediate, + EntityList(const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityRole, const AZ::Transform&, Multiplayer::AutoActivate)); MOCK_METHOD5(CreateEntitiesImmediate, EntityList(const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityId, Multiplayer:: NetEntityRole, Multiplayer::AutoActivate, const AZ::Transform&)); + MOCK_METHOD2(RequestNetSpawnableInstantiation, AZStd::unique_ptr(const AZ::Data::Asset&, const AZ::Transform&)); MOCK_METHOD3(SetupNetEntity, void(AZ::Entity*, Multiplayer::PrefabEntityId, Multiplayer::NetEntityRole)); - MOCK_CONST_METHOD1(GetEntity, Multiplayer::ConstNetworkEntityHandle(Multiplayer::NetEntityId)); MOCK_CONST_METHOD0(GetEntityCount, uint32_t()); MOCK_METHOD2(AddEntityToEntityMap, Multiplayer::NetworkEntityHandle(Multiplayer::NetEntityId, AZ::Entity*)); MOCK_METHOD1(MarkForRemoval, void(const Multiplayer::ConstNetworkEntityHandle&)); @@ -73,6 +84,7 @@ namespace UnitTest MOCK_METHOD2(NotifyControllersActivated, void(const Multiplayer::ConstNetworkEntityHandle&, Multiplayer::EntityIsMigrating)); MOCK_METHOD2(NotifyControllersDeactivated, void(const Multiplayer::ConstNetworkEntityHandle&, Multiplayer::EntityIsMigrating)); MOCK_METHOD1(HandleLocalRpcMessage, void(Multiplayer::NetworkEntityRpcMessage&)); + MOCK_CONST_METHOD0(DebugDraw, void()); }; class MockConnectionListener : public AzNetworking::IConnectionListener @@ -88,6 +100,7 @@ namespace UnitTest class MockTime : public AZ::ITime { public: + MOCK_CONST_METHOD0(GetElapsedTimeUs, AZ::TimeUs()); MOCK_CONST_METHOD0(GetElapsedTimeMs, AZ::TimeMs()); }; diff --git a/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp b/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp index 2463a8e4cb..d6c3117d6f 100644 --- a/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp +++ b/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp @@ -95,8 +95,9 @@ namespace UnitTest TEST_F(MultiplayerSystemTests, TestConnectionDatum) { - IMultiplayerConnectionMock connMock1 = IMultiplayerConnectionMock(aznumeric_cast(10), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); - IMultiplayerConnectionMock connMock2 = IMultiplayerConnectionMock(aznumeric_cast(15), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); + using namespace testing; + NiceMock connMock1(aznumeric_cast(10), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); + NiceMock connMock2(aznumeric_cast(15), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); m_mpComponent->OnConnect(&connMock1); m_mpComponent->OnConnect(&connMock2); diff --git a/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp new file mode 100644 index 0000000000..359c8003a4 --- /dev/null +++ b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp @@ -0,0 +1,320 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Multiplayer +{ + using namespace testing; + using namespace ::UnitTest; + + /* + * (Networked) Parent -> (Networked) Child + */ + class ServerNetTransformTests : public HierarchyTests + { + public: + void SetUp() override + { + HierarchyTests::SetUp(); + + m_root = AZStd::make_unique(1, "root", NetEntityId{ 1 }, EntityInfo::Role::Root); + m_child = AZStd::make_unique(2, "child", NetEntityId{ 2 }, EntityInfo::Role::Child); + + CreateNetworkParentChild(*m_root, *m_child); + + AZ::Transform rootTransform = AZ::Transform::CreateIdentity(); + rootTransform.SetTranslation(AZ::Vector3::CreateOne()); + m_root->m_entity->FindComponent()->SetWorldTM(rootTransform); + m_child->m_entity->FindComponent()->SetWorldTM(rootTransform); + + m_child->m_entity->FindComponent()->SetParent(m_root->m_entity->GetId()); + m_child->m_entity->FindComponent()->SetLocalTM(AZ::Transform::CreateIdentity()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + } + + void TearDown() override + { + m_child.reset(); + m_root.reset(); + + HierarchyTests::TearDown(); + } + + void PopulateNetworkEntity(const EntityInfo& entityInfo) + { + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + } + + void CreateNetworkParentChild(EntityInfo& root, EntityInfo& child) + { + PopulateNetworkEntity(root); + SetupEntity(root.m_entity, root.m_netId, NetEntityRole::Authority); + + PopulateNetworkEntity(child); + SetupEntity(child.m_entity, child.m_netId, NetEntityRole::Authority); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(child.m_entity.get(), m_networkEntityTracker.get()); + child.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Client, childHandle); + child.m_replicator->Initialize(childHandle); + + // Create an entity replicator for the root entity + const NetworkEntityHandle rootHandle(root.m_entity.get(), m_networkEntityTracker.get()); + root.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Client, rootHandle); + root.m_replicator->Initialize(rootHandle); + + root.m_entity->Activate(); + child.m_entity->Activate(); + } + + AZStd::unique_ptr m_root; + AZStd::unique_ptr m_child; + + void MultiplayerTick() + { + m_root->m_entity->FindComponent()->NotifyPreRender(0.1f); + m_child->m_entity->FindComponent()->NotifyPreRender(0.1f); + } + }; + + TEST_F(ServerNetTransformTests, SanityCheck) + { + EXPECT_EQ( + m_root->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() + ); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ServerNetTransformTests, NetTransformSavesLocalTransformWhenParentSet) + { + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ServerNetTransformTests, NetTransformSavesWorldTransformWhenParentIsNotSet) + { + m_child->m_entity->FindComponent()->SetParent(AZ::EntityId()); + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateOne() // back at the parent translation + ); + } + + TEST_F(ServerNetTransformTests, ParentMovesChildNetTransformDoesntChange) + { + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateZero() + ); + + // move the parent + AZ::Transform rootTransform = AZ::Transform::CreateIdentity(); + rootTransform.SetTranslation(AZ::Vector3::CreateOne() * 10.f); + m_root->m_entity->FindComponent()->SetWorldTM(rootTransform); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() * 10.f + ); + // child local tm doesn't change + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + /* + * (Networked) Parent -> (Networked) Child + */ + class ClientNetTransformTests : public HierarchyTests + { + public: + void SetUp() override + { + HierarchyTests::SetUp(); + + m_root = AZStd::make_unique(1, "root", NetEntityId{ 1 }, EntityInfo::Role::Root); + m_child = AZStd::make_unique(2, "child", NetEntityId{ 2 }, EntityInfo::Role::Child); + + CreateNetworkParentChild(*m_root, *m_child); + } + + void TearDown() override + { + m_child.reset(); + m_root.reset(); + + HierarchyTests::TearDown(); + } + + void PopulateNetworkEntity(const EntityInfo& entityInfo) + { + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + } + + void CreateNetworkParentChild(EntityInfo& root, EntityInfo& child) + { + PopulateNetworkEntity(root); + SetupEntity(root.m_entity, root.m_netId, NetEntityRole::Client); + + PopulateNetworkEntity(child); + SetupEntity(child.m_entity, child.m_netId, NetEntityRole::Client); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(child.m_entity.get(), m_networkEntityTracker.get()); + child.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Authority, childHandle); + child.m_replicator->Initialize(childHandle); + + // Create an entity replicator for the root entity + const NetworkEntityHandle rootHandle(root.m_entity.get(), m_networkEntityTracker.get()); + root.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Authority, rootHandle); + root.m_replicator->Initialize(rootHandle); + } + + AZStd::unique_ptr m_root; + AZStd::unique_ptr m_child; + + void MultiplayerTick() + { + m_root->m_entity->FindComponent()->NotifyPreRender(0.1f); + m_child->m_entity->FindComponent()->NotifyPreRender(0.1f); + } + }; + + TEST_F(ClientNetTransformTests, ClientSetsLocalTmWhenParentIsSet) + { + m_root->m_entity->Activate(); + m_child->m_entity->Activate(); + + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + + SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ClientNetTransformTests, ClientSetsWorldTmWhenParentIsNotSet) + { + m_root->m_entity->Activate(); + m_child->m_entity->Activate(); + + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ClientNetTransformTests, ChildFollowsWhenParentMovesOnServer) + { + m_root->m_entity->Activate(); + m_child->m_entity->Activate(); + + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + + SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + // now parent moves + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne() * 2.f); + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() * 2.f + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ClientNetTransformTests, ChildAttachesToParentIfParentIdIsSetBeforeActivation) + { + m_root->m_entity->Activate(); + + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + + SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + m_child->m_entity->Activate(); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetParentId(), + AZ::EntityId(1) + ); + } +} diff --git a/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp b/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp new file mode 100644 index 0000000000..f6f82ebe2b --- /dev/null +++ b/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp @@ -0,0 +1,119 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#ifdef HAVE_BENCHMARK +#include +#include + +namespace Multiplayer +{ + /* + * Hierarchy of 16 entities: Parent -> Child_2 -> .. -> Child_16 + * By default the maximum size of a hierarchy is defined by bg_hierarchyEntityMaxLimit (16). + */ + class ServerDeepHierarchyBenchmark : public HierarchyBenchmarkBase + { + public: + const NetEntityId RootNetEntityId = NetEntityId{ 1 }; + const NetEntityId ChildNetEntityId = NetEntityId{ 2 }; + const NetEntityId ChildOfChildNetEntityId = NetEntityId{ 3 }; + + void internalSetUp() override + { + HierarchyBenchmarkBase::internalSetUp(); + + m_root = AZStd::make_unique((1), "root", RootNetEntityId, EntityInfo::Role::Root); + CreateParent(*m_root); + + m_children = AZStd::make_unique>>(); + + EntityInfo* parent = m_root.get(); + for (int i = 0; i < 15; ++i) + { + m_children->push_back(AZStd::make_shared((i + 2), "child", ChildNetEntityId, EntityInfo::Role::Child)); + CreateChildForParent(*m_children->back(), *parent); + + m_children->back()->m_entity->FindComponent()->SetParent(parent->m_entity->GetId()); + parent = m_children->back().get(); + } + } + + void internalTearDown() override + { + m_children.reset(); + m_root.reset(); + + HierarchyBenchmarkBase::internalTearDown(); + } + + AZStd::unique_ptr m_root; + AZStd::unique_ptr>> m_children; + }; + + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchy)(benchmark::State& state) + { + for ([[maybe_unused]] auto value : state) + { + ForceRebuildHierarchy(m_root->m_entity); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchy) + ->Unit(benchmark::kMicrosecond) + ; + + // Should be roughly twice the time of @RebuildHierarchy benchmark + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddLastChild)(benchmark::State& state) + { + const AZ::EntityId parentOfLastChild = m_children->at(m_children->size() - 2)->m_entity->GetId(); + + for ([[maybe_unused]] auto value : state) + { + m_children->back()->m_entity->FindComponent()->SetParent(AZ::EntityId()); + m_children->back()->m_entity->FindComponent()->SetParent(parentOfLastChild); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddLastChild) + ->Unit(benchmark::kMicrosecond) + ; + + // Should be roughly twice the time of @RebuildHierarchy benchmark + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddMiddleChild)(benchmark::State& state) + { + const AZ::EntityId parentOfMiddleChild = m_children->at(4)->m_entity->GetId(); + + for ([[maybe_unused]] auto value : state) + { + m_children->at(5)->m_entity->FindComponent()->SetParent(AZ::EntityId()); + m_children->at(5)->m_entity->FindComponent()->SetParent(parentOfMiddleChild); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddMiddleChild) + ->Unit(benchmark::kMicrosecond) + ; + + // Should be roughly twice the time of @RebuildHierarchy benchmark + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddFirstChild)(benchmark::State& state) + { + const AZ::EntityId rootId = m_children->front()->m_entity->GetId(); + + for ([[maybe_unused]] auto value : state) + { + m_children->at(1)->m_entity->FindComponent()->SetParent(AZ::EntityId()); + m_children->at(1)->m_entity->FindComponent()->SetParent(rootId); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddFirstChild) + ->Unit(benchmark::kMicrosecond) + ; +} + +#endif diff --git a/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp b/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp index 385a4b83ae..b8e892e71a 100644 --- a/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp +++ b/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include namespace Multiplayer { diff --git a/Gems/Multiplayer/Code/multiplayer_files.cmake b/Gems/Multiplayer/Code/multiplayer_files.cmake index 7782444a6e..f16483e663 100644 --- a/Gems/Multiplayer/Code/multiplayer_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_files.cmake @@ -33,6 +33,9 @@ set(FILES Include/Multiplayer/MultiplayerConstants.h Include/Multiplayer/MultiplayerStats.h Include/Multiplayer/MultiplayerTypes.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.inl Include/Multiplayer/NetworkEntity/EntityReplication/ReplicationRecord.h Include/Multiplayer/NetworkEntity/IFilterEntityManager.h Include/Multiplayer/NetworkEntity/INetworkEntityManager.h @@ -60,6 +63,7 @@ set(FILES Source/AutoGen/Multiplayer.AutoPackets.xml Source/AutoGen/MultiplayerEditor.AutoPackets.xml Source/AutoGen/NetworkCharacterComponent.AutoComponent.xml + Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml Source/AutoGen/NetworkHitVolumesComponent.AutoComponent.xml Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml Source/AutoGen/NetworkTransformComponent.AutoComponent.xml @@ -90,10 +94,7 @@ set(FILES Source/MultiplayerSystemComponent.cpp Source/MultiplayerSystemComponent.h Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp - Source/NetworkEntity/EntityReplication/EntityReplicationManager.h Source/NetworkEntity/EntityReplication/EntityReplicator.cpp - Source/NetworkEntity/EntityReplication/EntityReplicator.h - Source/NetworkEntity/EntityReplication/EntityReplicator.inl Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp Source/NetworkEntity/EntityReplication/PropertyPublisher.h Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp diff --git a/Gems/Multiplayer/Code/multiplayer_tests_files.cmake b/Gems/Multiplayer/Code/multiplayer_tests_files.cmake index 3f4fcc9efa..2114143b68 100644 --- a/Gems/Multiplayer/Code/multiplayer_tests_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_tests_files.cmake @@ -7,13 +7,16 @@ # set(FILES - Tests/Main.cpp - Tests/MockInterfaces.h Tests/ClientHierarchyTests.cpp - Tests/ServerHierarchyTests.cpp + Tests/ServerHierarchyBenchmarks.cpp Tests/CommonHierarchySetup.h + Tests/CommonBenchmarkSetup.h Tests/IMultiplayerConnectionMock.h + Tests/Main.cpp + Tests/MockInterfaces.h Tests/MultiplayerSystemTests.cpp + Tests/NetworkTransformTests.cpp Tests/RewindableContainerTests.cpp Tests/RewindableObjectTests.cpp + Tests/ServerHierarchyTests.cpp ) diff --git a/Gems/NvCloth/Code/Source/Components/ClothComponent.cpp b/Gems/NvCloth/Code/Source/Components/ClothComponent.cpp index 0bbe52faf1..b252d3b5e6 100644 --- a/Gems/NvCloth/Code/Source/Components/ClothComponent.cpp +++ b/Gems/NvCloth/Code/Source/Components/ClothComponent.cpp @@ -8,6 +8,7 @@ #include #include +#include #include diff --git a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp index ecf2bd0a54..9a211290e3 100644 --- a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp +++ b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp @@ -27,6 +27,9 @@ #include #include #include +#include +#include +#include namespace NvCloth { diff --git a/Gems/NvCloth/Code/Source/Components/EditorClothComponent.cpp b/Gems/NvCloth/Code/Source/Components/EditorClothComponent.cpp index 113d660b32..420c6f3a5c 100644 --- a/Gems/NvCloth/Code/Source/Components/EditorClothComponent.cpp +++ b/Gems/NvCloth/Code/Source/Components/EditorClothComponent.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include diff --git a/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.cpp b/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.cpp index d42277ebb4..9f874f7765 100644 --- a/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.cpp +++ b/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include diff --git a/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.h b/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.h index 76161aa838..be4ac2ae36 100644 --- a/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.h +++ b/Gems/NvCloth/Code/Source/Editor/MeshNodeHandler.h @@ -10,6 +10,7 @@ #if !defined(Q_MOC_RUN) #include +#include #include #include #endif diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp index c95c8896ab..b72a5594e8 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp @@ -7,6 +7,7 @@ */ #include +#include #include diff --git a/Gems/PhysX/Code/CMakeLists.txt b/Gems/PhysX/Code/CMakeLists.txt index e2c3896356..1acfae3bfd 100644 --- a/Gems/PhysX/Code/CMakeLists.txt +++ b/Gems/PhysX/Code/CMakeLists.txt @@ -11,6 +11,7 @@ add_subdirectory(NumericalMethods) ly_get_list_relative_pal_filename(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME}) include(${pal_source_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_PHYSX_SUPPORTED +set(PHYSX_ENABLE_RUNNING_BENCHMARKS OFF CACHE BOOL "Adds a target to allow running of the physx benchmarks.") if(PAL_TRAIT_PHYSX_SUPPORTED) set(physx_dependency 3rdParty::PhysX) @@ -150,9 +151,6 @@ endif() # Tests ################################################################################ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) - - - ly_add_target( NAME PhysX.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} NAMESPACE Gem @@ -183,10 +181,16 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) ly_add_googletest( NAME Gem::PhysX.Tests ) - ly_add_googlebenchmark( - NAME Gem::PhysX.Benchmarks - TARGET Gem::PhysX.Tests - ) + + # Only add the physx benchmarks if this flag is set. The benchmark code is still built, as it is part of the PhysX.Tests project. + # Currently jenkins has a 1500sec(25min) timeout, our benchmarks can sometimes take over 1500sec and cause a build failure for timeout. + # Jenkins currently doesn't upload the results of the benchmarks, so this is ok. + if(PHYSX_ENABLE_RUNNING_BENCHMARKS) + ly_add_googlebenchmark( + NAME Gem::PhysX.Benchmarks + TARGET Gem::PhysX.Tests + ) + endif() list(APPEND testTargets PhysX.Tests) diff --git a/Gems/PhysX/Code/Editor/ColliderAssetScaleMode.h b/Gems/PhysX/Code/Editor/ColliderAssetScaleMode.h index 4659bf3677..24e33ea584 100644 --- a/Gems/PhysX/Code/Editor/ColliderAssetScaleMode.h +++ b/Gems/PhysX/Code/Editor/ColliderAssetScaleMode.h @@ -8,21 +8,20 @@ #pragma once -#include "ColliderSubComponentMode.h" +#include #include namespace PhysX { /// Sub component mode for modifying the asset scale on a collider in the viewport. - class ColliderAssetScaleMode - : public PhysX::ColliderSubComponentMode + class ColliderAssetScaleMode : public PhysXSubComponentModeBase { public: AZ_CLASS_ALLOCATOR_DECL ColliderAssetScaleMode(); - // ColliderSubComponentMode ... + // PhysXSubComponentModeBase ... void Setup(const AZ::EntityComponentIdPair& idPair) override; void Refresh(const AZ::EntityComponentIdPair& idPair) override; void Teardown(const AZ::EntityComponentIdPair& idPair) override; diff --git a/Gems/PhysX/Code/Editor/ColliderBoxMode.h b/Gems/PhysX/Code/Editor/ColliderBoxMode.h index a8e0c03a3a..75ce928d80 100644 --- a/Gems/PhysX/Code/Editor/ColliderBoxMode.h +++ b/Gems/PhysX/Code/Editor/ColliderBoxMode.h @@ -8,19 +8,18 @@ #pragma once -#include "ColliderSubComponentMode.h" +#include #include namespace PhysX { /// Sub component mode for modifying the box dimensions on a collider. - class ColliderBoxMode - : public PhysX::ColliderSubComponentMode + class ColliderBoxMode : public PhysXSubComponentModeBase { public: AZ_CLASS_ALLOCATOR_DECL - // ColliderSubComponentMode ... + // PhysXSubComponentModeBase ... void Setup(const AZ::EntityComponentIdPair& idPair) override; void Refresh(const AZ::EntityComponentIdPair& idPair) override; void Teardown(const AZ::EntityComponentIdPair& idPair) override; diff --git a/Gems/PhysX/Code/Editor/ColliderCapsuleMode.h b/Gems/PhysX/Code/Editor/ColliderCapsuleMode.h index b152801988..ceedd84a35 100644 --- a/Gems/PhysX/Code/Editor/ColliderCapsuleMode.h +++ b/Gems/PhysX/Code/Editor/ColliderCapsuleMode.h @@ -8,7 +8,7 @@ #pragma once -#include "ColliderSubComponentMode.h" +#include #include #include @@ -16,13 +16,13 @@ namespace PhysX { /// Sub component mode for modifying the height and radius on a capsule collider. class ColliderCapsuleMode - : public PhysX::ColliderSubComponentMode + : public PhysXSubComponentModeBase , private AzFramework::EntityDebugDisplayEventBus::Handler { public: AZ_CLASS_ALLOCATOR_DECL - // ColliderSubComponentMode ... + // PhysXSubComponentModeBase ... void Setup(const AZ::EntityComponentIdPair& idPair) override; void Refresh(const AZ::EntityComponentIdPair& idPair) override; void Teardown(const AZ::EntityComponentIdPair& idPair) override; diff --git a/Gems/PhysX/Code/Editor/ColliderComponentMode.cpp b/Gems/PhysX/Code/Editor/ColliderComponentMode.cpp index 994811b8d1..5de625f679 100644 --- a/Gems/PhysX/Code/Editor/ColliderComponentMode.cpp +++ b/Gems/PhysX/Code/Editor/ColliderComponentMode.cpp @@ -7,7 +7,6 @@ */ #include "ColliderComponentMode.h" -#include "ColliderSubComponentMode.h" #include "ColliderOffsetMode.h" #include "ColliderRotationMode.h" #include "ColliderBoxMode.h" @@ -15,6 +14,7 @@ #include "ColliderCapsuleMode.h" #include "ColliderAssetScaleMode.h" +#include #include #include diff --git a/Gems/PhysX/Code/Editor/ColliderComponentMode.h b/Gems/PhysX/Code/Editor/ColliderComponentMode.h index 420e621054..b4ca060065 100644 --- a/Gems/PhysX/Code/Editor/ColliderComponentMode.h +++ b/Gems/PhysX/Code/Editor/ColliderComponentMode.h @@ -15,7 +15,7 @@ namespace PhysX { - class ColliderSubComponentMode; + class PhysXSubComponentModeBase; //! ComponentMode for the Collider Component - Manages a list of Sub-Component Modes and //! is responsible for switching between and activating them. @@ -53,7 +53,7 @@ namespace PhysX void CreateSubModes(); void ResetCurrentMode(); - AZStd::unordered_map> m_subModes; + AZStd::unordered_map> m_subModes; SubMode m_subMode = SubMode::Dimensions; //! Create the Viewport UI cluster for sub mode selection. diff --git a/Gems/PhysX/Code/Editor/ColliderOffsetMode.h b/Gems/PhysX/Code/Editor/ColliderOffsetMode.h index bcf140a5e3..6a2e6a8a12 100644 --- a/Gems/PhysX/Code/Editor/ColliderOffsetMode.h +++ b/Gems/PhysX/Code/Editor/ColliderOffsetMode.h @@ -8,21 +8,20 @@ #pragma once -#include "ColliderSubComponentMode.h" +#include #include namespace PhysX { /// Sub component mode for modifying offset on a collider in the viewport. - class ColliderOffsetMode - : public PhysX::ColliderSubComponentMode + class ColliderOffsetMode : public PhysXSubComponentModeBase { public: AZ_CLASS_ALLOCATOR_DECL ColliderOffsetMode(); - // ColliderSubComponentMode ... + // PhysXSubComponentModeBase ... void Setup(const AZ::EntityComponentIdPair& idPair) override; void Refresh(const AZ::EntityComponentIdPair& idPair) override; void Teardown(const AZ::EntityComponentIdPair& idPair) override; diff --git a/Gems/PhysX/Code/Editor/ColliderRotationMode.h b/Gems/PhysX/Code/Editor/ColliderRotationMode.h index e1f578aed7..dc37e23b0e 100644 --- a/Gems/PhysX/Code/Editor/ColliderRotationMode.h +++ b/Gems/PhysX/Code/Editor/ColliderRotationMode.h @@ -8,7 +8,7 @@ #pragma once -#include "ColliderSubComponentMode.h" +#include #include #include @@ -16,7 +16,7 @@ namespace PhysX { /// Sub component mode for modifying the rotation on a collider in the viewport. class ColliderRotationMode - : public PhysX::ColliderSubComponentMode + : public PhysXSubComponentModeBase , private AzFramework::EntityDebugDisplayEventBus::Handler { public: @@ -24,7 +24,7 @@ namespace PhysX ColliderRotationMode(); - // ColliderSubComponentMode ... + // PhysXSubComponentModeBase ... void Setup(const AZ::EntityComponentIdPair& idPair) override; void Refresh(const AZ::EntityComponentIdPair& idPair) override; void Teardown(const AZ::EntityComponentIdPair& idPair) override; diff --git a/Gems/PhysX/Code/Editor/ColliderSphereMode.h b/Gems/PhysX/Code/Editor/ColliderSphereMode.h index 08ee813cd0..7d255d598b 100644 --- a/Gems/PhysX/Code/Editor/ColliderSphereMode.h +++ b/Gems/PhysX/Code/Editor/ColliderSphereMode.h @@ -8,7 +8,7 @@ #pragma once -#include "ColliderSubComponentMode.h" +#include #include #include @@ -16,13 +16,13 @@ namespace PhysX { /// Sub component mode for modifying the box dimensions on a collider. class ColliderSphereMode - : public PhysX::ColliderSubComponentMode + : public PhysXSubComponentModeBase , private AzFramework::EntityDebugDisplayEventBus::Handler { public: AZ_CLASS_ALLOCATOR_DECL - // ColliderSubComponentMode ... + // PhysXSubComponentModeBase ... void Setup(const AZ::EntityComponentIdPair& idPair) override; void Refresh(const AZ::EntityComponentIdPair& idPair) override; void Teardown(const AZ::EntityComponentIdPair& idPair) override; diff --git a/Gems/PhysX/Code/Editor/ColliderSubComponentMode.h b/Gems/PhysX/Code/Editor/ColliderSubComponentMode.h deleted file mode 100644 index 4711a20c86..0000000000 --- a/Gems/PhysX/Code/Editor/ColliderSubComponentMode.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -namespace AZ -{ - class EntityComponentIdPair; -} - -namespace PhysX -{ - /// Interface to implement when adding a new editing mode - /// for collider component mode. - class ColliderSubComponentMode - { - public: - virtual ~ColliderSubComponentMode() {}; - - /// Called when the mode is entered to initialise the mode. - /// @param idPair The entity/component id pair. - virtual void Setup(const AZ::EntityComponentIdPair& idPair) = 0; - - /// Called when the mode needs to refresh it's values. - /// @param idPair The entity/component id pair. - virtual void Refresh(const AZ::EntityComponentIdPair& idPair) = 0; - - /// Called when the mode exits to perform cleanup. - /// @param idPair The entity/component id pair. - virtual void Teardown(const AZ::EntityComponentIdPair& idPair) = 0; - - /// Called when reset hotkey is pressed. - /// Should reset values in the sub component mode to sensible defaults. - /// @param idPair The entity/component id pair. - virtual void ResetValues(const AZ::EntityComponentIdPair& idPair) = 0; - }; -} diff --git a/Gems/PhysX/Code/Editor/EditorClassConverters.cpp b/Gems/PhysX/Code/Editor/EditorClassConverters.cpp index e55ac6bbda..c9f5626dab 100644 --- a/Gems/PhysX/Code/Editor/EditorClassConverters.cpp +++ b/Gems/PhysX/Code/Editor/EditorClassConverters.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include diff --git a/Gems/PhysX/Code/Editor/EditorJointCommon.h b/Gems/PhysX/Code/Editor/EditorJointCommon.h new file mode 100644 index 0000000000..031b293942 --- /dev/null +++ b/Gems/PhysX/Code/Editor/EditorJointCommon.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace PhysX +{ + //! Pair of floating point values for angular limits. + using AngleLimitsFloatPair = AZStd::pair; +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorJointComponentMode.cpp b/Gems/PhysX/Code/Editor/EditorJointComponentMode.cpp deleted file mode 100644 index 39b028bef3..0000000000 --- a/Gems/PhysX/Code/Editor/EditorJointComponentMode.cpp +++ /dev/null @@ -1,577 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace PhysX -{ - namespace - { - //! Uri's for shortcut actions. - const AZ::Crc32 GoToNextModeActionUri = AZ_CRC("com.o3de.action.physx.joint.nextmode", 0xe9cf4ed6); - const AZ::Crc32 GoToPrevModeActionUri = AZ_CRC("com.o3de.action.physx.joint.prevmode", 0xe70f8daa); - } - - const AZStd::string EditorJointComponentMode::s_parameterAngularPair = "Twist Limits"; - const AZStd::string EditorJointComponentMode::s_parameterDamping = "Damping"; - const AZStd::string EditorJointComponentMode::s_parameterMaxForce = "Maximum Force"; - const AZStd::string EditorJointComponentMode::s_parameterMaxTorque = "Maximum Torque"; - const AZStd::string EditorJointComponentMode::s_parameterPosition = "Position"; - const AZStd::string EditorJointComponentMode::s_parameterRotation = "Rotation"; - const AZStd::string EditorJointComponentMode::s_parameterSnapPosition = "Snap Position"; - const AZStd::string EditorJointComponentMode::s_parameterSnapRotation = "Snap Rotation"; - const AZStd::string EditorJointComponentMode::s_parameterStiffness = "Stiffness"; - const AZStd::string EditorJointComponentMode::s_parameterSwingLimit = "Swing Limits"; - const AZStd::string EditorJointComponentMode::s_parameterTolerance = "Tolerance"; - const AZStd::string EditorJointComponentMode::s_parameterTransform = "Transform"; - const AZStd::string EditorJointComponentMode::s_parameterComponentMode = "Component Mode"; - const AZStd::string EditorJointComponentMode::s_parameterLeadEntity = "Lead Entity"; - const AZStd::string EditorJointComponentMode::s_parameterSelectOnSnap = "Select on Snap"; - - EditorSubComponentModeConfig::EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type) - : m_name(name), m_type(type) - { - } - - EditorSubComponentModeConfig::EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type - , float exponent - , float max - , float min) - : m_name(name), m_type(type), m_exponent(exponent), m_max(max), m_min(min) - { - } - - EditorSubComponentModeConfig::EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type - , const AZ::Vector3& axis - , float max - , float min) - : m_name(name), m_type(type), m_axis(axis), m_max(max), m_min(min) - { - } - - EditorSubComponentModeConfig::EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type - , float max - , float min) - : m_name(name), m_type(type), m_max(max), m_min(min) - { - } - - EditorJointComponentMode::EditorJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType) - : EditorBaseComponentMode(entityComponentIdPair, componentType) - , m_entityComponentIdPair(entityComponentIdPair) - , m_componentType(componentType) - { - EditorJointRequestBus::Event( - m_entityComponentIdPair - , &EditorJointRequests::SetBoolValue - , EditorJointComponentMode::s_parameterComponentMode - , true); - } - - EditorJointComponentMode::~EditorJointComponentMode() - { - EditorJointRequestBus::Event( - m_entityComponentIdPair - , &EditorJointRequests::SetBoolValue - , EditorJointComponentMode::s_parameterComponentMode - , false); - } - - bool EditorJointComponentMode::HandleMouseInteraction( - const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) - { - if (mouseInteraction.m_mouseEvent == AzToolsFramework::ViewportInteraction::MouseEvent::Wheel && - mouseInteraction.m_mouseInteraction.m_keyboardModifiers.Ctrl()) - { - NextMode(); - return true; - } - - // Propagate mouse interaction to sub-component mode. - if (m_currentSubComponentMode) - { - m_currentSubComponentMode->HandleMouseInteraction(mouseInteraction); - } - - return false; - } - - AZStd::vector EditorJointComponentMode::PopulateActionsImpl() - { - AzToolsFramework::ActionOverride goToNextMode; - goToNextMode.SetUri(GoToNextModeActionUri); - goToNextMode.SetKeySequence(QKeySequence(Qt::Key_Tab)); - goToNextMode.SetTitle("Next Mode"); - goToNextMode.SetTip("Go to next mode"); - goToNextMode.SetEntityComponentIdPair(GetEntityComponentIdPair()); - goToNextMode.SetCallback([this]() - { - NextMode(); - }); - - AzToolsFramework::ActionOverride goToPrevMode; - goToPrevMode.SetUri(GoToPrevModeActionUri); - goToPrevMode.SetKeySequence(QKeySequence(Qt::SHIFT + Qt::Key_Tab)); - goToPrevMode.SetTitle("Previous Mode"); - goToPrevMode.SetTip("Go to previous mode"); - goToPrevMode.SetEntityComponentIdPair(GetEntityComponentIdPair()); - goToPrevMode.SetCallback([this]() - { - PreviousMode(); - }); - - return {goToNextMode, goToPrevMode}; - } - - void EditorJointComponentMode::NextMode() - { - const bool isForwardChange = true; - ChangeMode(isForwardChange); - } - - void EditorJointComponentMode::PreviousMode() - { - const bool isForwardChange = false; - ChangeMode(isForwardChange); - } - - void EditorJointComponentMode::ChangeMode(bool forwardChange) - { - if (m_configMap.empty()) - { - return; - } - - AZStd::string previousModeName; - if (m_currentSubComponentMode) - { - previousModeName = m_currentSubComponentMode->m_name; - m_currentSubComponentMode.reset(); - } - - ConfigMapIter configIter = m_configMap.begin(); - if (!previousModeName.empty()) - { - configIter = m_configMap.find(previousModeName); - } - - AZ::u32 iterCount = 0; - do - { - if (forwardChange) - { - ++configIter; - if (configIter == m_configMap.end()) - { - configIter = m_configMap.begin(); - } - } - else - { - if (configIter == m_configMap.begin()) - { - configIter = m_configMap.end(); - } - --configIter; - } - ++iterCount; - } while (!IsSubComponentModeUsed(configIter->second.m_name) && iterCount != m_configMap.size()); - - if (iterCount == m_configMap.size()) // All sub component modes are not in use. - { - return; - } - - SetCurrentSubComponentMode(configIter->second.m_name); - } - - void EditorJointComponentMode::SetCurrentSubComponentMode(const AZStd::string& subComponentModeName) - { - ConfigMapIter configIter = m_configMap.find(subComponentModeName); - if (configIter == m_configMap.end()) - { - AZ_Warning("EditorJointComponentMode" - , false - , "Attempt to set sub component mode which does not exist: %s" - , subComponentModeName.c_str()); - return; - } - EditorSubComponentModeConfig config = configIter->second; - - EditorJointRequestBus::EventResult( - config.m_selectLeadOnSnap, m_entityComponentIdPair - , &EditorJointRequests::GetBoolValue - , s_parameterSelectOnSnap); - - m_currentSubComponentMode.reset(); - - switch (config.m_type) - { - case EditorSubComponentModeType::Linear: - SetSubComponentModeLinear(config); - break; - case EditorSubComponentModeType::AnglePair: - SetSubComponentModeAnglePair(config); - break; - case EditorSubComponentModeType::AngleCone: - SetSubComponentModeAngleCone(config); - break; - case EditorSubComponentModeType::Vec3: - SetSubComponentModeVec3(config); - break; - case EditorSubComponentModeType::Rotation: - SetSubComponentModeRotation(config); - break; - case EditorSubComponentModeType::SnapPosition: - SetSubComponentModeSnapPosition(config); - break; - case EditorSubComponentModeType::SnapRotation: - SetSubComponentModeSnapRotation(config); - break; - default: - AZ_Error("EditorJointComponentMode::SetCurrentSubComponentMode" - , false - , "Unsupported sub-component mode type."); - } - } - - bool EditorJointComponentMode::IsSubComponentModeUsed(const AZStd::string& subComponentModeName) - { - bool isUsed = false; - EditorJointRequestBus::EventResult( - isUsed, m_entityComponentIdPair - , &EditorJointRequests::IsParameterUsed - , subComponentModeName); - return isUsed; - } - - void EditorJointComponentMode::SetSubComponentModeAngleCone(const EditorSubComponentModeConfig& config) - { - m_currentSubComponentMode = AZStd::make_shared(m_entityComponentIdPair - , m_componentType - , config.m_name - , config.m_max - , config.m_min); - } - - void EditorJointComponentMode::SetSubComponentModeAnglePair(const EditorSubComponentModeConfig& config) - { - m_currentSubComponentMode = AZStd::make_shared(m_entityComponentIdPair - , m_componentType - , config.m_name - , config.m_axis - , config.m_max - , config.m_min - , config.m_min - , -config.m_max); - } - - void EditorJointComponentMode::SetSubComponentModeLinear(const EditorSubComponentModeConfig& config) - { - m_currentSubComponentMode = AZStd::make_shared(m_entityComponentIdPair - , m_componentType - , config.m_name - , config.m_exponent - , config.m_max - , config.m_min); - } - - void EditorJointComponentMode::SetSubComponentModeVec3(const EditorSubComponentModeConfig& config) - { - m_currentSubComponentMode = AZStd::make_shared(m_entityComponentIdPair - , m_componentType - , config.m_name); - } - - void EditorJointComponentMode::SetSubComponentModeRotation(const EditorSubComponentModeConfig& config) - { - m_currentSubComponentMode = AZStd::make_shared(m_entityComponentIdPair - , m_componentType - , config.m_name); - } - - void EditorJointComponentMode::SetSubComponentModeSnapPosition(const EditorSubComponentModeConfig& config) - { - m_currentSubComponentMode = AZStd::make_shared(m_entityComponentIdPair - , m_componentType - , config.m_name - , config.m_selectLeadOnSnap); - } - - void EditorJointComponentMode::SetSubComponentModeSnapRotation(const EditorSubComponentModeConfig& config) - { - m_currentSubComponentMode = AZStd::make_shared(m_entityComponentIdPair - , m_componentType - , config.m_name); - } - - EditorBallJointComponentMode::EditorBallJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType) - : EditorJointComponentMode(entityComponentIdPair, componentType) - { - m_configMap = Configure(); - NextMode(); - } - - EditorBallJointComponentMode::~EditorBallJointComponentMode() - { - if (m_currentSubComponentMode) - { - m_currentSubComponentMode.reset(); - } - } - - void EditorJointComponentMode::Refresh() - { - if (m_currentSubComponentMode) - { - m_currentSubComponentMode->Refresh(); - } - } - - AZStd::map EditorBallJointComponentMode::Configure() - { - AZStd::map configMap; - - configMap.emplace( - EditorJointComponentMode::s_parameterPosition - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterPosition - , EditorSubComponentModeType::Vec3) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterRotation - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterRotation - , EditorSubComponentModeType::Rotation) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterSnapPosition - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterSnapPosition - , EditorSubComponentModeType::SnapPosition) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterSnapRotation - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterSnapRotation - , EditorSubComponentModeType::SnapRotation) - ); - - const float exponentBreakage = 1.0f; - - configMap.emplace( - EditorJointComponentMode::s_parameterMaxForce - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterMaxForce - , EditorSubComponentModeType::Linear - , exponentBreakage - , PhysX::EditorJointConfig::s_breakageMax - , PhysX::EditorJointConfig::s_breakageMin) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterMaxTorque - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterMaxTorque - , EditorSubComponentModeType::Linear - , exponentBreakage - , PhysX::EditorJointConfig::s_breakageMax - , PhysX::EditorJointConfig::s_breakageMin) - ); - - const float exponentSpring = 2.0f; - - configMap.emplace( - EditorJointComponentMode::s_parameterDamping - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterDamping - , EditorSubComponentModeType::Linear - , exponentSpring - , PhysX::EditorJointLimitConeConfig::s_springMax - , PhysX::EditorJointLimitConeConfig::s_springMin) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterStiffness - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterStiffness - , EditorSubComponentModeType::Linear - , exponentSpring - , PhysX::EditorJointLimitConeConfig::s_springMax - , PhysX::EditorJointLimitConeConfig::s_springMin) - ); - - // Cone tip to base is always X-axis. - //The angle cone defines the limitations for rotation about the Y and Z axes. - configMap.emplace( - EditorJointComponentMode::s_parameterSwingLimit - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterSwingLimit - , EditorSubComponentModeType::AngleCone - , PhysX::EditorJointLimitConeConfig::s_angleMax - , PhysX::EditorJointLimitConeConfig::s_angleMin) - ); - - return configMap; - } - - EditorFixedJointComponentMode::EditorFixedJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType) - : EditorJointComponentMode(entityComponentIdPair, componentType) - { - m_configMap = Configure(); - NextMode(); - } - - EditorFixedJointComponentMode::~EditorFixedJointComponentMode() - { - if (m_currentSubComponentMode) - { - m_currentSubComponentMode.reset(); - } - } - - AZStd::map EditorFixedJointComponentMode::Configure() - { - AZStd::map configMap; - - configMap.emplace( - EditorJointComponentMode::s_parameterPosition - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterPosition - , EditorSubComponentModeType::Vec3) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterRotation - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterRotation - , EditorSubComponentModeType::Rotation) - ); - - const float exponentBreakage = 1.0f; - - configMap.emplace( - EditorJointComponentMode::s_parameterMaxForce - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterMaxForce - , EditorSubComponentModeType::Linear - , exponentBreakage - , PhysX::EditorJointConfig::s_breakageMax - , PhysX::EditorJointConfig::s_breakageMin) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterMaxTorque - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterMaxTorque - , EditorSubComponentModeType::Linear - , exponentBreakage - , PhysX::EditorJointConfig::s_breakageMax - , PhysX::EditorJointConfig::s_breakageMin) - ); - - return configMap; - } - - EditorHingeJointComponentMode::EditorHingeJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType) - : EditorJointComponentMode(entityComponentIdPair, componentType) - { - m_configMap = Configure(); - NextMode(); - } - - EditorHingeJointComponentMode::~EditorHingeJointComponentMode() - { - if (m_currentSubComponentMode) - { - m_currentSubComponentMode.reset(); - } - } - - AZStd::map EditorHingeJointComponentMode::Configure() - { - AZStd::map configMap; - - configMap.emplace( - EditorJointComponentMode::s_parameterPosition - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterPosition - , EditorSubComponentModeType::Vec3) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterRotation - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterRotation - , EditorSubComponentModeType::Rotation) - ); - - const float exponentBreakage = 1.0f; - - configMap.emplace( - EditorJointComponentMode::s_parameterMaxForce - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterMaxForce - , EditorSubComponentModeType::Linear - , exponentBreakage - , PhysX::EditorJointConfig::s_breakageMax - , PhysX::EditorJointConfig::s_breakageMin) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterMaxTorque - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterMaxTorque - , EditorSubComponentModeType::Linear - , exponentBreakage - , PhysX::EditorJointConfig::s_breakageMax - , PhysX::EditorJointConfig::s_breakageMin) - ); - - const float exponentSpring = 2.0f; - - configMap.emplace( - EditorJointComponentMode::s_parameterDamping - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterDamping - , EditorSubComponentModeType::Linear - , exponentSpring - , PhysX::EditorJointLimitPairConfig::s_springMax - , PhysX::EditorJointLimitPairConfig::s_springMin) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterStiffness - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterStiffness - , EditorSubComponentModeType::Linear - , exponentSpring - , PhysX::EditorJointLimitPairConfig::s_springMax - , PhysX::EditorJointLimitPairConfig::s_springMin) - ); - - AZ::Vector3 axis = AZ::Vector3::CreateAxisX(); // PhysX revolute joints uses the x-axis by default - configMap.emplace( - EditorJointComponentMode::s_parameterAngularPair - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterAngularPair - , EditorSubComponentModeType::AnglePair - , axis - , PhysX::EditorJointLimitPairConfig::s_angleMax - , PhysX::EditorJointLimitPairConfig::s_angleMin) - ); - - configMap.emplace( - EditorJointComponentMode::s_parameterSnapPosition - , EditorSubComponentModeConfig(EditorJointComponentMode::s_parameterSnapPosition - , EditorSubComponentModeType::SnapPosition) - ); - - return configMap; - } -} // namespace LmbrCentral diff --git a/Gems/PhysX/Code/Editor/EditorJointComponentMode.h b/Gems/PhysX/Code/Editor/EditorJointComponentMode.h deleted file mode 100644 index 023edcc24b..0000000000 --- a/Gems/PhysX/Code/Editor/EditorJointComponentMode.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include - -#include - -namespace PhysX -{ - enum class EditorSubComponentModeType : AZ::u8 - { - Linear, /// sub-component mode to modify a single linear value, e.g. a float value. - AnglePair, /// sub-component mode to modify a pair of float values representing angles. - AngleCone, /// sub-component mode to modify a constraint's swing limits and local transformation. - Rotation, /// sub-component mode to modify local transformation. - SnapPosition, /// sub-component mode to modify local position using a point-and-snap feature in the viewport. - SnapRotation, /// sub-component mode to modify local rotation using a point-and-snap feature in the viewport. - Vec3 /// sub-component mode to modify a Vector3 value. - }; - - /// Contains configuration of a sub-component mode. Shared by different types of sub-component mode. - /// Alternative implementation of this struct using AZStd::Variant is pending the development of the rest of the joint types. - struct EditorSubComponentModeConfig - { - EditorSubComponentModeConfig() = default; - - EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type); - - EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type - , float exponent - , float max - , float min); - - EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type - , const AZ::Vector3& axis - , float max - , float min); - - EditorSubComponentModeConfig(const AZStd::string& name - , EditorSubComponentModeType type - , float max - , float min); - - AZStd::string m_name; - EditorSubComponentModeType m_type; - AZ::Vector3 m_axis = AZ::Vector3::CreateAxisX(); - float m_exponent = 1.0f; - float m_max = FLT_MAX; - float m_min = -FLT_MAX; - bool m_selectLeadOnSnap = true; ///< A user may use the snap-to-position component mode to snap the position of a joint to an entity. This flag indicates if the snapped-to entity would be selected as a joint's lead when that happens. - }; - - /// Generic component mode that supports multiple sub-component modes. - class EditorJointComponentMode - : public AzToolsFramework::ComponentModeFramework::EditorBaseComponentMode - { - public: - static const AZStd::string s_parameterAngularPair; - static const AZStd::string s_parameterDamping; - static const AZStd::string s_parameterMaxForce; - static const AZStd::string s_parameterMaxTorque; - static const AZStd::string s_parameterPosition; - static const AZStd::string s_parameterRotation; - static const AZStd::string s_parameterSnapPosition; - static const AZStd::string s_parameterSnapRotation; - static const AZStd::string s_parameterStiffness; - static const AZStd::string s_parameterSwingLimit; - static const AZStd::string s_parameterTolerance; - static const AZStd::string s_parameterTransform; - static const AZStd::string s_parameterComponentMode; - static const AZStd::string s_parameterLeadEntity; - static const AZStd::string s_parameterSelectOnSnap; - - EditorJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType); - ~EditorJointComponentMode(); - - // EditorBaseComponentMode - void Refresh() override; - - /// Returns map of sub-component mode configurations required by this component mode. - virtual AZStd::map Configure() = 0; - - protected: - /// AzToolsFramework::ViewportInteraction::MouseViewportRequests - bool HandleMouseInteraction( - const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) override; - - /// EditorBaseComponentMode - AZStd::vector PopulateActionsImpl() override; - - /// Changes to the next sub-component mode found in m_configMap. - void NextMode(); - - /// Changes to the previous sub-component mode found in m_configMap. - void PreviousMode(); - - /// Changes to the next or previous sub-component mode found in m_configMap. - void ChangeMode(bool forwardChange); - - /// Replaces m_currentSubComponentMode with a new one instantiated using the configuration identified by the input subComponentModeName. - void SetCurrentSubComponentMode(const AZStd::string& subComponentModeName); - - AZStd::shared_ptr m_currentSubComponentMode = nullptr; ///< The active sub-component mode in this component mode. - AZ::Uuid m_componentType = AZ::Uuid::CreateNull(); - AZStd::map m_configMap; ///< Contains sub-component mode configurations supported by this component mode. - AZ::EntityComponentIdPair m_entityComponentIdPair; - - private: - bool IsSubComponentModeUsed(const AZStd::string& subComponentModeName); - - void SetSubComponentModeAngleCone(const EditorSubComponentModeConfig& config); - void SetSubComponentModeAnglePair(const EditorSubComponentModeConfig& config); - void SetSubComponentModeLinear(const EditorSubComponentModeConfig& config); - void SetSubComponentModeVec3(const EditorSubComponentModeConfig& config); - void SetSubComponentModeRotation(const EditorSubComponentModeConfig& config); - void SetSubComponentModeSnapPosition(const EditorSubComponentModeConfig& config); - void SetSubComponentModeSnapRotation(const EditorSubComponentModeConfig& config); - }; - - /// Ball joint specific component mode. Configure() is overriden to set up the required sub-component modes. - class EditorBallJointComponentMode - : public EditorJointComponentMode - { - public: - EditorBallJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType); - ~EditorBallJointComponentMode(); - - // EditorJointComponentMode - AZStd::map Configure() override; - }; - - /// Fixed joint specific component mode. Configure() is overriden to set up the required sub-component modes. - class EditorFixedJointComponentMode - : public EditorJointComponentMode - { - public: - EditorFixedJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType); - ~EditorFixedJointComponentMode(); - - // EditorJointComponentMode - AZStd::map Configure() override; - }; - - /// Hinge joint specific component mode. Configure() is overriden to set up the required sub-component modes. - class EditorHingeJointComponentMode - : public EditorJointComponentMode - { - public: - EditorHingeJointComponentMode( - const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Uuid& componentType); - ~EditorHingeJointComponentMode(); - - // EditorJointComponentMode - AZStd::map Configure() override; - }; - - using ConfigMap = AZStd::map; - using ConfigMapIter = ConfigMap::iterator; - using ConfigMapReverseIter = ConfigMap::reverse_iterator; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorJointTypeDrawer.cpp b/Gems/PhysX/Code/Editor/EditorJointTypeDrawer.cpp deleted file mode 100644 index 53b27f6cde..0000000000 --- a/Gems/PhysX/Code/Editor/EditorJointTypeDrawer.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include - -namespace PhysX -{ - EditorJointTypeDrawer::EditorJointTypeDrawer(EditorJointType jointType, - AzFramework::EntityContextId entityContextId, - const AZStd::string& subComponentModeName): - m_subComponentModeName(subComponentModeName) - { - AzFramework::ViewportDebugDisplayEventBus::Handler::BusConnect(entityContextId); - EditorJointTypeDrawerBus::Handler::BusConnect(EditorJointTypeDrawerId(jointType, - EditorSubComponentModeNameCrc(subComponentModeName))); - } - - EditorJointTypeDrawer::~EditorJointTypeDrawer() - { - EditorJointTypeDrawerBus::Handler::BusDisconnect(); - AzFramework::ViewportDebugDisplayEventBus::Handler::BusDisconnect(); - } - - void EditorJointTypeDrawer::DisplayViewport2d( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) - { - const AZ::u32 stateBefore = debugDisplay.GetState(); - - const AzFramework::CameraState cameraState = AzToolsFramework::GetCameraState(viewportInfo.m_viewportId); - - const float xOffsetCurrentMode = 125.0f; - const float yOffsetCurrentMode = 55.0f; - - const float xOffsetHotKeys = 125.0f; - const float yOffsetHotKeys = 30.0f; - - const float viewportWidthHalf = cameraState.m_viewportSize.GetX() / 2.0f; - const float viewportHeight = cameraState.m_viewportSize.GetY(); - - debugDisplay.SetColor(AZ::Color(1.0f, 1.0f, 1.0f, 1.0f)); - - AZStd::string screenTextCurrentMode = "Edit mode: " + m_subComponentModeName; - float xPos = viewportWidthHalf - xOffsetCurrentMode; - float yPos = viewportHeight - yOffsetCurrentMode; - float textSize = 2.0f; - debugDisplay.Draw2dTextLabel(xPos, yPos, textSize, screenTextCurrentMode.c_str()); - - AZStd::string screenTextHotKeys = " or to change modes"; - xPos = viewportWidthHalf - xOffsetHotKeys; - yPos = viewportHeight - yOffsetHotKeys; - textSize = 1.2f; - debugDisplay.Draw2dTextLabel(xPos, yPos, textSize, screenTextHotKeys.c_str()); - - debugDisplay.SetState(stateBefore); - } - - AZStd::shared_ptr EditorJointTypeDrawer::GetEditorJointTypeDrawer() - { - return shared_from_this(); - } - -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorJointTypeDrawer.h b/Gems/PhysX/Code/Editor/EditorJointTypeDrawer.h deleted file mode 100644 index 4172424f00..0000000000 --- a/Gems/PhysX/Code/Editor/EditorJointTypeDrawer.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include -#include - -namespace PhysX -{ - /// This class enables drawing in the viewport once for the component modes of multiple components in one entity. - /// Until the component mode framework allows a way to do this, a work-around like this class is necessary. - /// An instance of this class is created for each pair of component type and sub-component mode. - class EditorJointTypeDrawer - : public EditorJointTypeDrawerBus::Handler - , public AZStd::enable_shared_from_this - , private AzFramework::ViewportDebugDisplayEventBus::Handler - { - public: - EditorJointTypeDrawer(EditorJointType id, - AzFramework::EntityContextId entityContextId, - const AZStd::string& subComponentModeName); - ~EditorJointTypeDrawer(); - - private: - // AzFramework::ViewportDebugDisplayEventBus - void DisplayViewport2d( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - // PhysX::EditorJointTypeDrawerBus - AZStd::shared_ptr GetEditorJointTypeDrawer() override; - - AZStd::string m_subComponentModeName;///< Name of the sub component mode. E.g. Position, Rotation, Snap Position, etc. - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorJointTypeDrawerBus.h b/Gems/PhysX/Code/Editor/EditorJointTypeDrawerBus.h deleted file mode 100644 index e47c447fe2..0000000000 --- a/Gems/PhysX/Code/Editor/EditorJointTypeDrawerBus.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace PhysX -{ - class EditorJointTypeDrawer; - - using EditorJointType = AZ::Uuid; - using EditorSubComponentModeNameCrc = AZ::Crc32; - using EditorJointTypeDrawerId = AZStd::pair; - - /// The sub-component mode of a component type uses this bus (by invoking GetEditorJointTypeDrawer) to retrieve a drawer. - /// If nothing is returned, it creates an instance of the drawer that will be shared by other instances of the same component type. - class EditorJointTypeDrawerRequests : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = EditorJointTypeDrawerId; - - virtual AZStd::shared_ptr GetEditorJointTypeDrawer() = 0; - }; - using EditorJointTypeDrawerBus = AZ::EBus; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeAngleCone.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeAngleCone.cpp deleted file mode 100644 index 43b9fd77f3..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeAngleCone.cpp +++ /dev/null @@ -1,453 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace -{ - const float ArrowLength = 2.0f; - const float ConeHeight = 3.0f; - const float XRotationManipulatorRadius = 2.0f; - const float XRotationManipulatorWidth = 0.05f; -} - -namespace PhysX -{ - struct SharedRotationState - { - AZ::Vector3 m_axis; - AZ::Quaternion m_savedOrientation = AZ::Quaternion::CreateIdentity(); - AngleLimitsFloatPair m_valuePair; - }; - - EditorSubComponentModeAngleCone::EditorSubComponentModeAngleCone( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , float max - , float min) - : EditorSubComponentModeBase(entityComponentIdPair, componentType, name) - , m_max(max) - , m_min(min) - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - const AZ::Quaternion localRotation = localTransform.GetRotation(); - - // Initialize manipulators used to resize the base of the cone. - m_yLinearManipulator = AzToolsFramework::LinearManipulator::MakeShared(worldTransform); - m_yLinearManipulator->AddEntityComponentIdPair(m_entityComponentId); - m_yLinearManipulator->SetAxis(AZ::Vector3::CreateAxisZ()); - - m_zLinearManipulator = AzToolsFramework::LinearManipulator::MakeShared(worldTransform); - m_zLinearManipulator->AddEntityComponentIdPair(m_entityComponentId); - m_zLinearManipulator->SetAxis(AZ::Vector3::CreateAxisY()); - - m_yzPlanarManipulator = AzToolsFramework::PlanarManipulator::MakeShared(worldTransform); - m_yzPlanarManipulator->AddEntityComponentIdPair(m_entityComponentId); - m_yzPlanarManipulator->SetAxes(AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); - - ConfigureLinearView(ArrowLength - , AZ::Color(1.0f, 0.0f, 0.0f, 1.0f) - , AZ::Color(0.0f, 1.0f, 0.0f, 1.0f) - , AZ::Color(0.0f, 0.0f, 1.0f, 1.0f)); - - ConfigurePlanarView(AZ::Color(0.0f, 1.0f, 0.0f, 1.0f) - , AZ::Color(0.0f, 0.0f, 1.0f, 1.0f)); - - // Position and orientate manipulators - AZ::Transform displacementTransform = localTransform; - AZ::Vector3 displacementTranslate = localRotation.TransformVector(AZ::Vector3(ConeHeight, 0.0f, 0.0f)); - displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); - - m_yLinearManipulator->SetLocalTransform(displacementTransform); - m_zLinearManipulator->SetLocalTransform(displacementTransform); - m_yzPlanarManipulator->SetLocalTransform(displacementTransform); - - // Initialize rotation manipulator for rotating cone - m_xRotationManipulator = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); - m_xRotationManipulator->AddEntityComponentIdPair(m_entityComponentId); - m_xRotationManipulator->SetAxis(AZ::Vector3::CreateAxisX()); - m_xRotationManipulator->SetLocalTransform(localTransform); - - const AZ::Color xRotationManipulatorColor = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); - m_xRotationManipulator->SetView(AzToolsFramework::CreateManipulatorViewCircle( - *m_xRotationManipulator, xRotationManipulatorColor, - XRotationManipulatorRadius, XRotationManipulatorWidth, AzToolsFramework::DrawHalfDottedCircle)); - - AZStd::shared_ptr sharedRotationState = - AZStd::make_shared(); - - struct SharedState - { - AngleLimitsFloatPair m_startValues; - }; - auto sharedState = AZStd::make_shared(); - - m_yLinearManipulator->InstallLeftMouseDownCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable - { - AngleLimitsFloatPair currentValue; - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - sharedState->m_startValues = currentValue; - }); - - m_yLinearManipulator->InstallMouseMoveCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& action) - { - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - const AZ::Quaternion localRotation = localTransform.GetRotation(); - const float axisDisplacement = action.LocalPositionOffset().Dot(localRotation.TransformVector(action.m_fixed.m_axis)); - const float originalBaseY = tan(AZ::DegToRad(sharedState->m_startValues.first)) * ConeHeight; - const float newBaseY = originalBaseY + axisDisplacement; - const float newAngle = AZ::GetClamp(AZ::RadToDeg(atan(newBaseY / ConeHeight)), m_min, m_max); - - EditorJointRequestBus::Event( - m_entityComponentId - , &EditorJointRequests::SetLinearValuePair - , m_name - , AngleLimitsFloatPair(newAngle, sharedState->m_startValues.second)); - - m_yLinearManipulator->SetBoundsDirty(); - }); - - m_zLinearManipulator->InstallLeftMouseDownCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable - { - AngleLimitsFloatPair currentValue; - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - sharedState->m_startValues = currentValue; - }); - - m_zLinearManipulator->InstallMouseMoveCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& action) - { - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - const AZ::Quaternion localRotation = localTransform.GetRotation(); - const float axisDisplacement = action.LocalPositionOffset().Dot(localRotation.TransformVector(action.m_fixed.m_axis)); - const float originalBaseZ = tan(AZ::DegToRad(sharedState->m_startValues.second)) * ConeHeight; - const float newBaseZ = originalBaseZ + axisDisplacement; - const float newAngle = AZ::GetClamp(AZ::RadToDeg(atan(newBaseZ / ConeHeight)), m_min, m_max); - - EditorJointRequestBus::Event( - m_entityComponentId - , &EditorJointRequests::SetLinearValuePair - , m_name - , AngleLimitsFloatPair(sharedState->m_startValues.first, newAngle)); - - m_zLinearManipulator->SetBoundsDirty(); - }); - - m_yzPlanarManipulator->InstallLeftMouseDownCallback( - [this, sharedState](const AzToolsFramework::PlanarManipulator::Action& /*action*/) mutable - { - AngleLimitsFloatPair currentValue; - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - sharedState->m_startValues = currentValue; - }); - - m_yzPlanarManipulator->InstallMouseMoveCallback( - [this, sharedState](const AzToolsFramework::PlanarManipulator::Action& action) - { - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - const AZ::Quaternion localRotation = localTransform.GetRotation(); - - const float axisDisplacementY = action.LocalPositionOffset().Dot(localRotation.TransformVector(AZ::Vector3::CreateAxisY())); - const float axisDisplacementZ = action.LocalPositionOffset().Dot(localRotation.TransformVector(AZ::Vector3::CreateAxisZ())); - const float axisDisplacement = axisDisplacementZ > axisDisplacementY? axisDisplacementZ : axisDisplacementY; - - const float originalBaseY = tan(AZ::DegToRad(sharedState->m_startValues.first)) * ConeHeight; - const float newBaseY = originalBaseY + axisDisplacement; - const float newAngleY = AZ::GetClamp(AZ::RadToDeg(atan(newBaseY / ConeHeight)), m_min, m_max); - - const float originalBaseZ = tan(AZ::DegToRad(sharedState->m_startValues.second)) * ConeHeight; - const float newBaseZ = originalBaseZ + axisDisplacement; - const float newAngleZ = AZ::GetClamp(AZ::RadToDeg(atan(newBaseZ / ConeHeight)), m_min, m_max); - - EditorJointRequestBus::Event( - m_entityComponentId - , &EditorJointRequests::SetLinearValuePair - , m_name - , AngleLimitsFloatPair(newAngleY, newAngleZ)); - - m_yzPlanarManipulator->SetBoundsDirty(); - }); - - struct SharedStateXRotate - { - AZ::Transform m_startTM; - }; - auto sharedStateXRotate = AZStd::make_shared(); - - auto mouseDownCallback = [this, sharedRotationState](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - AZ::Quaternion normalizedStart = action.m_start.m_rotation.GetNormalized(); - sharedRotationState->m_axis = AZ::Vector3(normalizedStart.GetX(), normalizedStart.GetY(), normalizedStart.GetZ()); - sharedRotationState->m_savedOrientation = AZ::Quaternion::CreateIdentity(); - - AngleLimitsFloatPair currentValue; - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - - sharedRotationState->m_valuePair = currentValue; - }; - - auto mouseDownRotateXCallback = [this, sharedStateXRotate]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - PhysX::EditorJointRequestBus::EventResult(sharedStateXRotate->m_startTM - , m_entityComponentId - , &PhysX::EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - }; - - m_xRotationManipulator->InstallLeftMouseDownCallback(mouseDownRotateXCallback); - - m_xRotationManipulator->InstallMouseMoveCallback( - [this, sharedStateXRotate] - (const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; - - AZ::Transform newTransform = AZ::Transform::CreateIdentity(); - newTransform = sharedStateXRotate->m_startTM * AZ::Transform::CreateFromQuaternion(action.m_current.m_delta); - - PhysX::EditorJointRequestBus::Event(m_entityComponentId - , &PhysX::EditorJointRequests::SetVector3Value - , PhysX::EditorJointComponentMode::s_parameterPosition - , newTransform.GetTranslation()); - PhysX::EditorJointRequestBus::Event(m_entityComponentId - , &PhysX::EditorJointRequests::SetVector3Value - , PhysX::EditorJointComponentMode::s_parameterRotation - , newTransform.GetRotation().GetEulerDegrees()); - - m_yLinearManipulator->SetLocalOrientation(manipulatorOrientation); - m_zLinearManipulator->SetLocalOrientation(manipulatorOrientation); - m_yLinearManipulator->SetAxis(action.m_current.m_delta.TransformVector(AZ::Vector3::CreateAxisY())); - m_zLinearManipulator->SetAxis(action.m_current.m_delta.TransformVector(AZ::Vector3::CreateAxisZ())); - m_xRotationManipulator->SetLocalOrientation(manipulatorOrientation); - - m_yLinearManipulator->SetBoundsDirty(); - m_zLinearManipulator->SetBoundsDirty(); - m_xRotationManipulator->SetBoundsDirty(); - }); - - m_xRotationManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - m_yLinearManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - m_zLinearManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - m_yzPlanarManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(m_entityComponentId.GetEntityId()); - - Refresh(); - } - - EditorSubComponentModeAngleCone::~EditorSubComponentModeAngleCone() - { - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); - - m_xRotationManipulator->Unregister(); - m_yLinearManipulator->Unregister(); - m_zLinearManipulator->Unregister(); - m_yzPlanarManipulator->Unregister(); - } - - void EditorSubComponentModeAngleCone::Refresh() - { - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - float coneHeight = ConeHeight; - AngleLimitsFloatPair yzSwingAngleLimits; - EditorJointRequestBus::EventResult( - yzSwingAngleLimits, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - - // Draw inverted cone (negative cone height) if angles are larger than 90 deg. - if (yzSwingAngleLimits.first > 90.0f || yzSwingAngleLimits.second > 90.0f) - { - coneHeight = -ConeHeight; - } - - // reposition manipulators - const AZ::Quaternion localRotation = localTransform.GetRotation(); - const AZ::Vector3 linearManipulatorOffset = localTransform.GetTranslation() + localRotation.TransformVector(AZ::Vector3(coneHeight, 0.0f, 0.0f)); - - m_xRotationManipulator->SetLocalTransform(localTransform); - m_xRotationManipulator->SetBoundsDirty(); - - localTransform.SetTranslation(linearManipulatorOffset); - - m_yLinearManipulator->SetLocalTransform(localTransform); - m_zLinearManipulator->SetLocalTransform(localTransform); - m_yzPlanarManipulator->SetLocalTransform(localTransform); - m_yLinearManipulator->SetBoundsDirty(); - m_zLinearManipulator->SetBoundsDirty(); - m_yzPlanarManipulator->SetBoundsDirty(); - } - - void EditorSubComponentModeAngleCone::ConfigureLinearView( - float axisLength, [[maybe_unused]] const AZ::Color& axis1Color, const AZ::Color& axis2Color, - const AZ::Color& axis3Color) - { - const float coneLength = 0.28f; - const float coneRadius = 0.07f; - - const auto configureLinearView = [coneLength, axisLength, coneRadius]( - AzToolsFramework::LinearManipulator* linearManipulator, const AZ::Color& color) - { - AzToolsFramework::ManipulatorViews views; - views.emplace_back(CreateManipulatorViewLine( - *linearManipulator, color, axisLength, AzToolsFramework::ManipulatorLineBoundWidth())); - views.emplace_back(CreateManipulatorViewCone( - *linearManipulator, color, linearManipulator->GetAxis() * (axisLength - coneLength), - coneLength, coneRadius)); - linearManipulator->SetViews(AZStd::move(views)); - }; - - configureLinearView(m_yLinearManipulator.get(), axis2Color); - configureLinearView(m_zLinearManipulator.get(), axis3Color); - } - - void EditorSubComponentModeAngleCone::ConfigurePlanarView(const AZ::Color& planeColor, - const AZ::Color& plane2Color) - { - const float planeSize = 0.6f; - AzToolsFramework::ManipulatorViews views; - views.emplace_back(CreateManipulatorViewQuad( - *m_yzPlanarManipulator - , planeColor - , plane2Color - , planeSize)); - m_yzPlanarManipulator->SetViews(AZStd::move(views)); - } - - void EditorSubComponentModeAngleCone::DisplayEntityViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - AZ::u32 stateBefore = debugDisplay.GetState(); - debugDisplay.CullOff(); - - debugDisplay.PushMatrix(worldTransform); - debugDisplay.PushMatrix(localTransform); - - const float xAxisArrowLength = 2.0f; - debugDisplay.SetColor(AZ::Color(1.0f, 0.0f, 0.0f, 1.0f)); - debugDisplay.DrawArrow(AZ::Vector3(0.0f, 0.0f, 0.0f), AZ::Vector3(xAxisArrowLength, 0.0f, 0.0f)); - - AngleLimitsFloatPair yzSwingAngleLimits; - EditorJointRequestBus::EventResult( - yzSwingAngleLimits, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - - const AZ::u32 numEllipseSamples = 16; - AZ::Vector3 ellipseSamples[numEllipseSamples]; - float coneHeight = ConeHeight; - - // Draw inverted cone if angles are larger than 90 deg. - if (yzSwingAngleLimits.first > 90.0f || yzSwingAngleLimits.second > 90.0f) - { - coneHeight = -ConeHeight; - } - - // Compute points along perimeter of cone base - const float coney = tanf(AZ::DegToRad(yzSwingAngleLimits.first)) * coneHeight; - const float conez = tanf(AZ::DegToRad(yzSwingAngleLimits.second)) * coneHeight; - const float step = AZ::Constants::TwoPi / numEllipseSamples; - for (size_t i = 0; i < numEllipseSamples; ++i) - { - const float angleStep = step * i; - ellipseSamples[i].SetX(coneHeight); - ellipseSamples[i].SetY(conez * sin(angleStep)); - ellipseSamples[i].SetZ(coney * cos(angleStep)); - } - - // draw cone - for (size_t i = 0; i < numEllipseSamples; ++i) - { - size_t nextIndex = i + 1; - if (i == numEllipseSamples - 1) - { - nextIndex = 0; - } - - // draw cone sides - debugDisplay.SetColor(AZ::Color(1.0f, 1.0f, 1.0f, 0.2f)); - debugDisplay.DrawTri(AZ::Vector3(0.0f, 0.0f, 0.0f), ellipseSamples[i], ellipseSamples[nextIndex]); - - // draw parameter of cone base - debugDisplay.SetColor(AZ::Color(0.4f, 0.4f, 0.4f, 0.4f)); - debugDisplay.DrawLine(ellipseSamples[i], ellipseSamples[nextIndex]); - } - - // draw axis lines at base of cone, and from tip to base. - debugDisplay.SetColor(AZ::Color(0.5f, 0.5f, 0.5f, 0.6f)); - debugDisplay.DrawLine(ellipseSamples[0], ellipseSamples[numEllipseSamples/2]); - debugDisplay.DrawLine(ellipseSamples[numEllipseSamples*3/4], ellipseSamples[numEllipseSamples/4]); - debugDisplay.DrawLine(AZ::Vector3(0.0f, 0.0f, 0.0f), AZ::Vector3(coneHeight, 0.0f, 0.0f)); - - debugDisplay.PopMatrix();//pop local transform - debugDisplay.PopMatrix();//pop world transform - debugDisplay.SetState(stateBefore); - - // reposition and reorientate manipulators - Refresh(); - } -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeAngleCone.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeAngleCone.h deleted file mode 100644 index bf113b4be1..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeAngleCone.h +++ /dev/null @@ -1,63 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include -#include -#include - -namespace AzToolsFramework -{ - class AngularManipulator; - class LinearManipulator; - class PlanarManipulator; -} - -namespace PhysX -{ - class EditorSubComponentModeAngleCone - : public PhysX::EditorSubComponentModeBase - , private AzFramework::EntityDebugDisplayEventBus::Handler - { - public: - EditorSubComponentModeAngleCone( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , float max - , float min); - ~EditorSubComponentModeAngleCone(); - - // PhysX::EditorSubComponentModeBase - void Refresh() override; - - private: - // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - void ConfigureLinearView( - float axisLength, - const AZ::Color& axis1Color, const AZ::Color& axis2Color, - const AZ::Color& axis3Color = AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)); - - void ConfigurePlanarView(const AZ::Color& planeColor = AZ::Color(0.0f, 1.0f, 0.0f, 0.5f) - , const AZ::Color& plane2Color = AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)); - - AZStd::shared_ptr m_xRotationManipulator; - AZStd::shared_ptr m_yLinearManipulator; - AZStd::shared_ptr m_zLinearManipulator; - AZStd::shared_ptr m_yzPlanarManipulator; - - float m_max = FLT_MAX; - float m_min = 0.0f; - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeAnglePair.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeAnglePair.cpp deleted file mode 100644 index 6fa74a3f05..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeAnglePair.cpp +++ /dev/null @@ -1,318 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include - -#include -#include -#include - -namespace -{ - const float Alpha = 0.6f; - const AZ::Color ColorDefault = AZ::Color(1.0f, 1.0f, 1.0f, Alpha); - const AZ::Color ColorFirst = AZ::Color(1.0f, 0.0f, 0.0f, Alpha); - const AZ::Color ColorSecond = AZ::Color(0.0f, 1.0f, 0.0f, Alpha); - const AZ::Color ColorSweepArc = AZ::Color(1.0f, 1.0f, 1.0f, Alpha); - - const float SweepLineDisplaceFactor = 0.5f; - const float SweepLineThickness = 1.0f; - const float SweepLineGranularity = 1.0f; -} - -namespace PhysX -{ - EditorSubComponentModeAnglePair::EditorSubComponentModeAnglePair( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , const AZ::Vector3& axis - , float firstMax - , float firstMin - , float secondMax - , float secondMin) - : EditorSubComponentModeBase(entityComponentIdPair, componentType, name) - , m_axis(axis) - , m_firstMax(firstMax) - , m_firstMin(firstMin) - , m_secondMax(secondMax) - , m_secondMin(secondMin) - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - const AZ::Quaternion localRotation = localTransform.GetRotation(); - - AZ::Vector3 displacement = m_axis; - AZ::Transform displacementTransform = localTransform; - AZ::Vector3 displacementTranslate = localRotation.TransformVector(displacement); - displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); - - m_firstManipulator = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); - m_firstManipulator->AddEntityComponentIdPair(m_entityComponentId); - m_firstManipulator->SetAxis(m_axis); - m_firstManipulator->SetLocalTransform(displacementTransform); - - displacement = -m_axis; - displacementTranslate = localRotation.TransformVector(displacement); - displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); - m_secondManipulator = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); - m_secondManipulator->AddEntityComponentIdPair(m_entityComponentId); - m_secondManipulator->SetAxis(m_axis); - m_secondManipulator->SetLocalTransform(displacementTransform); - - const float manipulatorRadius = 2.0f; - const float manipulatorWidth = 0.05f; - m_firstManipulator->SetView(AzToolsFramework::CreateManipulatorViewCircle( - *m_firstManipulator, ColorFirst, - manipulatorRadius, manipulatorWidth, AzToolsFramework::DrawHalfDottedCircle)); - - m_secondManipulator->SetView(AzToolsFramework::CreateManipulatorViewCircle( - *m_secondManipulator, ColorSecond, - manipulatorRadius, manipulatorWidth, AzToolsFramework::DrawHalfDottedCircle)); - - Refresh(); - - AZStd::shared_ptr sharedRotationState = - AZStd::make_shared(); - - auto mouseDownCallback = [this, sharedRotationState](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - const AZ::Quaternion normalizedStart = action.m_start.m_rotation.GetNormalized(); - sharedRotationState->m_axis = AZ::Vector3(normalizedStart.GetX(), normalizedStart.GetY(), normalizedStart.GetZ()); - sharedRotationState->m_savedOrientation = AZ::Quaternion::CreateIdentity(); - - AngleLimitsFloatPair currentValue; - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - - sharedRotationState->m_valuePair = currentValue; - }; - - m_firstManipulator->InstallLeftMouseDownCallback(mouseDownCallback); - - m_secondManipulator->InstallLeftMouseDownCallback(mouseDownCallback); - - m_firstManipulator->InstallMouseMoveCallback( - [this, sharedRotationState] - (const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - float angleDelta; - AZ::Quaternion manipulatorOrientation; - const float newValue = MouseMove(sharedRotationState, action, true, angleDelta, manipulatorOrientation); - if (newValue > m_firstMax || newValue < m_firstMin) - { - return; - } - m_firstManipulator->SetLocalOrientation(manipulatorOrientation); - const float newFirstValue = AZ::GetClamp(sharedRotationState->m_valuePair.first + angleDelta, m_firstMin, m_firstMax); - - EditorJointRequestBus::Event( - m_entityComponentId - , &EditorJointRequests::SetLinearValuePair - , m_name - , AngleLimitsFloatPair(newFirstValue, sharedRotationState->m_valuePair.second)); - - m_firstManipulator->SetBoundsDirty(); - }); - - m_secondManipulator->InstallMouseMoveCallback( - [this, sharedRotationState] - (const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - float angleDelta; - AZ::Quaternion manipulatorOrientation; - const float newValue = MouseMove(sharedRotationState, action, false, angleDelta, manipulatorOrientation); - if (newValue > m_secondMax || newValue < m_secondMin) - { - return; //Not handling values exceeding limits - } - - m_secondManipulator->SetLocalOrientation(manipulatorOrientation); - float newSecondValue = AZ::GetClamp(sharedRotationState->m_valuePair.second + angleDelta, m_secondMin, m_secondMax); - - EditorJointRequestBus::Event( - m_entityComponentId - , &EditorJointRequests::SetLinearValuePair - , m_name - , AngleLimitsFloatPair(sharedRotationState->m_valuePair.first, newSecondValue)); - - m_secondManipulator->SetBoundsDirty(); - }); - - - m_firstManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - m_secondManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(m_entityComponentId.GetEntityId()); - } - - EditorSubComponentModeAnglePair::~EditorSubComponentModeAnglePair() - { - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); - - m_firstManipulator->Unregister(); - m_secondManipulator->Unregister(); - } - - void EditorSubComponentModeAnglePair::Refresh() - { - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - const AZ::Quaternion localRotation = localTransform.GetRotation(); - - AZ::Transform displacementTransform = localTransform; - AZ::Vector3 displacement = m_axis; - AZ::Vector3 displacementTranslate = localRotation.TransformVector(displacement); - displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); - m_firstManipulator->SetLocalTransform(displacementTransform); - - displacement = -m_axis; - displacementTranslate = localRotation.TransformVector(displacement); - displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); - m_secondManipulator->SetLocalTransform(displacementTransform); - - m_firstManipulator->SetBoundsDirty(); - m_secondManipulator->SetBoundsDirty(); - } - - void EditorSubComponentModeAnglePair::DisplayEntityViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) - { - AngleLimitsFloatPair currentValue; - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , m_name); - - const float size = 2.0f; - AZ::Vector3 axisPoint = m_axis * size * 0.5f; - - AZStd::array points = { - -axisPoint - , axisPoint - , axisPoint - , -axisPoint - }; - - if (abs(m_axis.GetX() - 1.0f) < FLT_EPSILON) - { - points[2].SetZ(size); - points[3].SetZ(size); - } - else if (abs(m_axis.GetY() - 1.0f) < FLT_EPSILON) - { - points[2].SetX(size); - points[3].SetX(size); - } - else if (abs(m_axis.GetZ() - 1.0f) < FLT_EPSILON) - { - points[2].SetX(size); - points[3].SetX(size); - } - - AZ::u32 stateBefore = debugDisplay.GetState(); - debugDisplay.CullOff(); - debugDisplay.SetAlpha(Alpha); - - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - debugDisplay.PushMatrix(worldTransform); - debugDisplay.PushMatrix(localTransform); - - debugDisplay.SetColor(ColorSweepArc); - - const AZ::Vector3 zeroVector = AZ::Vector3::CreateZero(); - const AZ::Vector3 posPosition = m_axis * SweepLineDisplaceFactor; - const AZ::Vector3 negPosition = -posPosition; - debugDisplay.DrawArc(posPosition, SweepLineThickness, -currentValue.first, currentValue.first, SweepLineGranularity, -m_axis); - debugDisplay.DrawArc(zeroVector, SweepLineThickness, -currentValue.first, currentValue.first, SweepLineGranularity, -m_axis); - debugDisplay.DrawArc(negPosition, SweepLineThickness, -currentValue.first, currentValue.first, SweepLineGranularity, -m_axis); - debugDisplay.DrawArc(posPosition, SweepLineThickness, 0.0f, abs(currentValue.second), SweepLineGranularity, -m_axis); - debugDisplay.DrawArc(zeroVector, SweepLineThickness, 0.0f, abs(currentValue.second), SweepLineGranularity, -m_axis); - debugDisplay.DrawArc(negPosition, SweepLineThickness, 0.0f, abs(currentValue.second), SweepLineGranularity, -m_axis); - - AZ::Quaternion firstRotate = AZ::Quaternion::CreateFromAxisAngle(m_axis, AZ::DegToRad(currentValue.first)); - AZ::Transform firstTM = AZ::Transform::CreateFromQuaternion(firstRotate); - debugDisplay.PushMatrix(firstTM); - debugDisplay.SetColor(ColorFirst); - debugDisplay.DrawQuad(points[0], points[1], points[2], points[3]); - debugDisplay.PopMatrix(); - - AZ::Quaternion secondRotate = AZ::Quaternion::CreateFromAxisAngle(m_axis, AZ::DegToRad(currentValue.second)); - AZ::Transform secondTM = AZ::Transform::CreateFromQuaternion(secondRotate); - debugDisplay.PushMatrix(secondTM); - debugDisplay.SetColor(ColorSecond); - debugDisplay.DrawQuad(points[0], points[1], points[2], points[3]); - debugDisplay.PopMatrix(); - - debugDisplay.SetColor(ColorDefault); - debugDisplay.DrawQuad(points[0], points[1], points[2], points[3]); - - debugDisplay.PopMatrix(); // pop local transform - debugDisplay.PopMatrix(); // pop global transform - debugDisplay.SetState(stateBefore); - - // reposition and reorientate manipulators - Refresh(); - } - - float EditorSubComponentModeAnglePair::MouseMove(AZStd::shared_ptr& sharedRotationState - , const AzToolsFramework::AngularManipulator::Action& action - , bool isFirstValue - , float& angleDelta - , AZ::Quaternion& manipulatorOrientation) - { - sharedRotationState->m_savedOrientation = action.m_current.m_delta.GetInverseFull(); - angleDelta = 0.0f; - AZ::Vector3 axis = m_axis; - sharedRotationState->m_savedOrientation.ConvertToAxisAngle(axis, angleDelta); - // Polarity of axis is switched by ConvertToAxisAngle call depending on direction of rotation - if (abs(m_axis.GetX() - 1.0f) < FLT_EPSILON) - { - angleDelta = AZ::RadToDeg(angleDelta) * axis.GetX(); - } - else if (abs(m_axis.GetY() - 1.0f) < FLT_EPSILON) - { - angleDelta = AZ::RadToDeg(angleDelta) * axis.GetY(); - } - else if (abs(m_axis.GetZ() - 1.0f) < FLT_EPSILON) - { - angleDelta = AZ::RadToDeg(angleDelta) * axis.GetZ(); - } - - manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; - - if (isFirstValue) - { - return sharedRotationState->m_valuePair.first + angleDelta; - } - else - { - return sharedRotationState->m_valuePair.second + angleDelta; - } - } -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeAnglePair.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeAnglePair.h deleted file mode 100644 index cb96570ebe..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeAnglePair.h +++ /dev/null @@ -1,66 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include - -#include -#include - -namespace PhysX -{ - class EditorSubComponentModeAnglePair - : public PhysX::EditorSubComponentModeBase - , private AzFramework::EntityDebugDisplayEventBus::Handler - { - public: - EditorSubComponentModeAnglePair( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , const AZ::Vector3& axis - , float firstMax - , float firstMin - , float secondMax - , float secondMin); - ~EditorSubComponentModeAnglePair(); - - // PhysX::EditorSubComponentModeBase - void Refresh() override; - - private: - struct SharedRotationState - { - AZ::Vector3 m_axis; - AZ::Quaternion m_savedOrientation = AZ::Quaternion::CreateIdentity(); - AngleLimitsFloatPair m_valuePair; - }; - - // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - float MouseMove(AZStd::shared_ptr& sharedRotationState - , const AzToolsFramework::AngularManipulator::Action& action - , bool isFirstValue - , float& angleDelta - , AZ::Quaternion& manipulatorOrientation); - - AZStd::shared_ptr m_firstManipulator; - AZStd::shared_ptr m_secondManipulator; - - AZ::Vector3 m_axis = AZ::Vector3::CreateAxisX(); - float m_firstMax = FLT_MAX; - float m_firstMin = -FLT_MAX; - float m_secondMax = FLT_MAX; - float m_secondMin = -FLT_MAX; - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeBase.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeBase.cpp deleted file mode 100644 index 1e02d52859..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeBase.cpp +++ /dev/null @@ -1,37 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include -#include - -namespace PhysX -{ - EditorSubComponentModeBase::EditorSubComponentModeBase( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name) - : m_entityComponentId(entityComponentIdPair), - m_name(name) - { - // The first time this is called, no object will respond to this bus call as no object is connected at the address, - // and m_jointTypeDrawer will remain as a nullptr. - EditorJointTypeDrawerBus::EventResult(m_jointTypeDrawer, - EditorJointTypeDrawerId(componentType, EditorSubComponentModeNameCrc(name)), - &EditorJointTypeDrawerBus::Events::GetEditorJointTypeDrawer); - - if (!m_jointTypeDrawer) - { - // Once this is called, the bus call to GetEditorJointTypeDrawer above will no longer get a null response, until m_jointTypeDrawer is destroyed. - m_jointTypeDrawer = AZStd::make_shared(componentType, - AzToolsFramework::GetEntityContextId(), - m_name); - } - } -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeBase.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeBase.h deleted file mode 100644 index 09e06927f3..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeBase.h +++ /dev/null @@ -1,55 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace AzFramework -{ - class DebugDisplayRequests; - struct ViewportInfo; -} - -namespace AzToolsFramework -{ - namespace ViewportInteraction - { - struct MouseInteractionEvent; - } -} - -namespace PhysX -{ - class EditorJointTypeDrawer; - - /// Base class for (joints) sub-component modes. - class EditorSubComponentModeBase - { - public: - EditorSubComponentModeBase( - const AZ::EntityComponentIdPair& entityComponentIdPair, - const AZ::Uuid& componentType, - const AZStd::string& name); - virtual ~EditorSubComponentModeBase() = default; - - /// Additional mouse handling by sub-component mode. Does not absorb mouse event. - virtual void HandleMouseInteraction( - [[maybe_unused]] const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) {}; - - virtual void Refresh() = 0; - - AZStd::string m_name;///< Name of sub-component mode. - - protected: - AZ::EntityComponentIdPair m_entityComponentId;///< Entity Id and component pair. - - private: - AZStd::shared_ptr m_jointTypeDrawer;///< Drawer that draws component type specific objects in the viewport. - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeLinear.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeLinear.cpp deleted file mode 100644 index 378e1fb982..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeLinear.cpp +++ /dev/null @@ -1,133 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include - -#include -#include - -#include -#include -#include -#include - -namespace PhysX -{ - EditorSubComponentModeLinear::EditorSubComponentModeLinear( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , float exponent - , float max - , float min) - : EditorSubComponentModeBase(entityComponentIdPair, componentType, name) - , m_exponent(exponent) - , m_inverseExponent(1.0f/exponent) - , m_max(max) - , m_min(min) - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - m_manipulator = AzToolsFramework::LinearManipulator::MakeShared(worldTransform); - m_manipulator->AddEntityComponentIdPair(m_entityComponentId); - m_manipulator->SetAxis(AZ::Vector3::CreateAxisX()); - m_manipulator->SetLocalTransform(localTransform); - - Refresh(); - - const AZ::Color manipulatorColor(0.3f, 0.3f, 0.3f, 1.0f); - const float manipulatorSize = 0.05f; - - AzToolsFramework::ManipulatorViews views; - views.emplace_back(AzToolsFramework::CreateManipulatorViewQuadBillboard(manipulatorColor - , manipulatorSize)); - m_manipulator->SetViews(AZStd::move(views)); - - struct SharedState - { - float m_startingValue = 0.0f; - }; - auto sharedState = AZStd::make_shared(); - - m_manipulator->InstallLeftMouseDownCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable - { - float currentValue = 0.0f; - - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValue - , m_name); - sharedState->m_startingValue = currentValue; - }); - - m_manipulator->InstallMouseMoveCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& action) - { - const float axisDisplacement = action.LocalPositionOffset().Dot(action.m_fixed.m_axis); - - float newValue = AZ::GetClamp(sharedState->m_startingValue + DisplacementToDeltaValue(axisDisplacement), m_min, m_max); - EditorJointRequestBus::Event( - m_entityComponentId - , &EditorJointRequests::SetLinearValue - , m_name - , newValue); - - const AZ::Vector3 localPosition = action.LocalPosition().GetMax(AZ::Vector3(0.01f, 0.0f, 0.0f)); - m_manipulator->SetLocalTransform(AZ::Transform::CreateTranslation(localPosition)); - m_manipulator->SetBoundsDirty(); - }); - - m_manipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - } - - EditorSubComponentModeLinear::~EditorSubComponentModeLinear() - { - m_manipulator->Unregister(); - } - - void EditorSubComponentModeLinear::Refresh() - { - float currentValue = 0.0f; - - EditorJointRequestBus::EventResult( - currentValue, m_entityComponentId - , &EditorJointRequests::GetLinearValue - , m_name); - - m_manipulator->SetLocalTransform(AZ::Transform::CreateTranslation(AZ::Vector3::CreateAxisX() * ValueToDisplacement(currentValue))); - } - - float EditorSubComponentModeLinear::DisplacementToDeltaValue(float displacement) const - { - if (displacement > 0.0f) - { - return powf(displacement, m_exponent); - } - else if (displacement < 0.0f) - { - return -powf(fabsf(displacement), m_exponent); - } - else - { - return 0.0f; - } - } - - float EditorSubComponentModeLinear::ValueToDisplacement(float value) const - { - return powf(value, m_inverseExponent); - } -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeLinear.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeLinear.h deleted file mode 100644 index 4d44d4aad4..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeLinear.h +++ /dev/null @@ -1,46 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace AzToolsFramework -{ - class LinearManipulator; -} - -namespace PhysX -{ - class EditorSubComponentModeLinear - : public PhysX::EditorSubComponentModeBase - { - public: - EditorSubComponentModeLinear( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , float exponent - , float max - , float min); - ~EditorSubComponentModeLinear(); - - // PhysX::EditorSubComponentModeBase - void Refresh() override; - - private: - float DisplacementToDeltaValue(float displacement) const; - float ValueToDisplacement(float value) const; - - float m_exponent = 1.0f; - float m_inverseExponent = 1.0f; - AZStd::shared_ptr m_manipulator; - float m_max = FLT_MAX; - float m_min = -FLT_MAX; - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeRotation.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeRotation.cpp deleted file mode 100644 index 7586ecc955..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeRotation.cpp +++ /dev/null @@ -1,151 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace PhysX -{ - EditorSubComponentModeRotation::EditorSubComponentModeRotation( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name) - : EditorSubComponentModeBase(entityComponentIdPair, componentType, name) - { - CreateManipulators(); - RegisterManipulators(); - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(m_entityComponentId.GetEntityId()); - } - - EditorSubComponentModeRotation::~EditorSubComponentModeRotation() - { - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); - UnregisterManipulators(); - } - - void EditorSubComponentModeRotation::Refresh() - { - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - for (auto rotationManipulator : m_rotationManipulators) - { - rotationManipulator->SetLocalTransform(localTransform); - rotationManipulator->SetBoundsDirty(); - } - } - - void EditorSubComponentModeRotation::DisplayEntityViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - [[maybe_unused]] AzFramework::DebugDisplayRequests& debugDisplay) - { - Refresh(); //Update position and orientation of manipulators. - } - - void EditorSubComponentModeRotation::CreateManipulators() - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - const AZ::Quaternion worldRotation = worldTransform.GetRotation(); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - const AZStd::array axes = { AZ::Vector3::CreateAxisX() - , AZ::Vector3::CreateAxisY() - , AZ::Vector3::CreateAxisZ()}; - - const AZStd::array colors = { AZ::Color(1.0f, 0.0f, 0.0f, 1.0f) - , AZ::Color(0.0f, 1.0f, 0.0f, 1.0f) - , AZ::Color(0.0f, 0.0f, 1.0f, 1.0f)}; - - for (AZ::u32 i = 0; i < 3; ++i) - { - m_rotationManipulators[i] = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); - m_rotationManipulators[i]->AddEntityComponentIdPair(m_entityComponentId); - m_rotationManipulators[i]->SetAxis(axes[i]); - m_rotationManipulators[i]->SetLocalTransform(localTransform); - const float manipulatorRadius = 2.0f; - m_rotationManipulators[i]->SetView(AzToolsFramework::CreateManipulatorViewCircle( - *m_rotationManipulators[i], colors[i], manipulatorRadius, - AzToolsFramework::ManipulatorCicleBoundWidth(), AzToolsFramework::DrawHalfDottedCircle)); - } - - Refresh(); - InstallManipulatorMouseCallbacks(); - } - - void EditorSubComponentModeRotation::InstallManipulatorMouseCallbacks() - { - struct SharedState - { - AZ::Transform m_startTM; - }; - auto sharedState = AZStd::make_shared(); - - auto mouseDownRotateXCallback = [this, sharedState]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - PhysX::EditorJointRequestBus::EventResult(sharedState->m_startTM - , m_entityComponentId - , &PhysX::EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - }; - - for (AZ::u32 index = 0; index < 3; ++index) - { - m_rotationManipulators[index]->InstallLeftMouseDownCallback(mouseDownRotateXCallback); - - m_rotationManipulators[index]->InstallMouseMoveCallback( - [this, index, sharedState] - (const AzToolsFramework::AngularManipulator::Action& action) mutable -> void - { - const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; - - AZ::Transform newTransform = AZ::Transform::CreateIdentity(); - newTransform = sharedState->m_startTM * AZ::Transform::CreateFromQuaternion(action.m_current.m_delta); - - PhysX::EditorJointRequestBus::Event(m_entityComponentId - , &PhysX::EditorJointRequests::SetVector3Value - , PhysX::EditorJointComponentMode::s_parameterRotation - , newTransform.GetRotation().GetEulerDegrees()); - - m_rotationManipulators[index]->SetLocalOrientation(manipulatorOrientation); - m_rotationManipulators[index]->SetBoundsDirty(); - }); - } - } - - void EditorSubComponentModeRotation::RegisterManipulators() - { - for (auto rotationManipulator : m_rotationManipulators) - { - rotationManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - } - } - - void EditorSubComponentModeRotation::UnregisterManipulators() - { - for (auto rotationManipulator : m_rotationManipulators) - { - rotationManipulator->Unregister(); - } - } -} diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeRotation.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeRotation.h deleted file mode 100644 index 349738909a..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeRotation.h +++ /dev/null @@ -1,48 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include - -namespace AzToolsFramework -{ - class AngularManipulator; -} - -namespace PhysX -{ - class EditorSubComponentModeRotation - : public PhysX::EditorSubComponentModeBase - , private AzFramework::EntityDebugDisplayEventBus::Handler - { - public: - EditorSubComponentModeRotation( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name); - ~EditorSubComponentModeRotation(); - - // PhysX::EditorSubComponentModeBase - void Refresh() override; - - private: - // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - void CreateManipulators(); - void InstallManipulatorMouseCallbacks(); - void RegisterManipulators(); - void UnregisterManipulators(); - - AZStd::array, 3> m_rotationManipulators; - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapPosition.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapPosition.cpp deleted file mode 100644 index b086eb64ff..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapPosition.cpp +++ /dev/null @@ -1,97 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace PhysX -{ - EditorSubComponentModeSnapPosition::EditorSubComponentModeSnapPosition( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , bool selectLeadOnSnap) - : EditorSubComponentModeSnap(entityComponentIdPair, componentType, name) - , m_selectLeadOnSnap(selectLeadOnSnap) - { - InitMouseDownCallBack(); - m_manipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(m_entityComponentId.GetEntityId()); - } - - EditorSubComponentModeSnapPosition::~EditorSubComponentModeSnapPosition() - { - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); - m_manipulator->Unregister(); - } - - void EditorSubComponentModeSnapPosition::DisplaySpecificSnapType( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay, - const AZ::Vector3& jointPosition, - const AZ::Vector3& snapDirection, - const float snapLength) - { - const float arrowLength = 1.0f; - const float iconGap = 1.0f; - const AZ::Vector3 iconPosition = jointPosition + - (snapDirection * (snapLength + arrowLength + iconGap)); - - debugDisplay.SetColor(AZ::Colors::Red); - debugDisplay.DrawArrow(iconPosition, iconPosition + AZ::Vector3(arrowLength, 0.0f, 0.0f)); - debugDisplay.SetColor(AZ::Colors::Green); - debugDisplay.DrawArrow(iconPosition, iconPosition + AZ::Vector3(0.2f, arrowLength, 0.2f)); - debugDisplay.SetColor(AZ::Colors::Blue); - debugDisplay.DrawArrow(iconPosition, iconPosition + AZ::Vector3(0.0f, 0.0f, arrowLength)); - } - - void EditorSubComponentModeSnapPosition::InitMouseDownCallBack() - { - m_manipulator->InstallLeftMouseDownCallback( - [this](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable - { - if (!m_pickedEntity.IsValid()) - { - return; - } - - const AZ::Vector3 newLocalPosition = PhysX::Utils::ComputeJointLocalTransform( - PhysX::Utils::GetEntityWorldTransformWithScale(m_pickedEntity), - PhysX::Utils::GetEntityWorldTransformWithScale(m_entityComponentId.GetEntityId())).GetTranslation(); - - PhysX::EditorJointRequestBus::Event(m_entityComponentId - , &PhysX::EditorJointRequests::SetVector3Value - , PhysX::EditorJointComponentMode::s_parameterPosition - , newLocalPosition); - - const bool selectedEntityIsNotJointEntity = m_pickedEntity != m_entityComponentId.GetEntityId(); - - AZ_Error("EditorSubComponentModeSnapPosition", - selectedEntityIsNotJointEntity, - "Joint's lead entity cannot be the same as the entity in which the joint resides. Select lead entity on snap failed."); - - if (m_selectLeadOnSnap && - selectedEntityIsNotJointEntity) - { - PhysX::EditorJointRequestBus::Event(m_entityComponentId - , &PhysX::EditorJointRequests::SetEntityIdValue - , PhysX::EditorJointComponentMode::s_parameterLeadEntity - , m_pickedEntity); - } - - m_manipulator->SetBoundsDirty(); - }); - } -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapPosition.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapPosition.h deleted file mode 100644 index d2fe803431..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapPosition.h +++ /dev/null @@ -1,42 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace PhysX -{ - /// This sub-component mode gets an entity position from its base class on mouse down - /// and sets a position (AZ::Vector3) value in the component that uses it. - class EditorSubComponentModeSnapPosition - : public EditorSubComponentModeSnap - { - public: - EditorSubComponentModeSnapPosition( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name - , bool selectLeadOnSnap); - ~EditorSubComponentModeSnapPosition() override; - - protected: - // PhysX::EditorSubComponentModeSnap - void DisplaySpecificSnapType( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay, - const AZ::Vector3& jointPosition, - const AZ::Vector3& snapDirection, - float snapLength) override; - - void InitMouseDownCallBack() override; - - private: - bool m_selectLeadOnSnap = true; - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapRotation.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapRotation.cpp deleted file mode 100644 index c68e058e29..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapRotation.cpp +++ /dev/null @@ -1,122 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include - -#include -#include -#include -#include - -namespace PhysX -{ - EditorSubComponentModeSnapRotation::EditorSubComponentModeSnapRotation( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name) - : EditorSubComponentModeSnap(entityComponentIdPair, componentType, name) - { - InitMouseDownCallBack(); - m_manipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(m_entityComponentId.GetEntityId()); - } - - EditorSubComponentModeSnapRotation::~EditorSubComponentModeSnapRotation() - { - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); - m_manipulator->Unregister(); - } - - void EditorSubComponentModeSnapRotation::DisplaySpecificSnapType( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay, - const AZ::Vector3& jointPosition, - const AZ::Vector3& snapDirection, - const float snapLength) - { - const float circleRadius = 0.5f; - const float iconGap = 1.0f; - - const AZ::Vector3 iconPosition = jointPosition + - (snapDirection * (snapLength + circleRadius * 2.0f + iconGap)); - - debugDisplay.SetColor(AZ::Colors::Red); - debugDisplay.DrawCircle(iconPosition, circleRadius, 0); - debugDisplay.SetColor(AZ::Colors::Green); - debugDisplay.DrawCircle(iconPosition, circleRadius, 1); - debugDisplay.SetColor(AZ::Colors::Blue); - debugDisplay.DrawCircle(iconPosition, circleRadius, 2); - } - - void EditorSubComponentModeSnapRotation::InitMouseDownCallBack() - { - m_manipulator->InstallLeftMouseDownCallback( - [this]([[maybe_unused]] const AzToolsFramework::LinearManipulator::Action& action) mutable - { - if (!m_pickedEntity.IsValid()) - { - return; - } - - AZ::EntityId leadEntityId; - PhysX::EditorJointRequestBus::EventResult(leadEntityId, - m_entityComponentId, - &PhysX::EditorJointRequests::GetEntityIdValue, - PhysX::EditorJointComponentMode::s_parameterLeadEntity); - - if (leadEntityId.IsValid() && m_pickedEntity == leadEntityId) - { - AZ_Warning("EditorsubComponentModeSnapRotation", - false, - "The entity %s is the lead of the joint. Please snap rotation (or orientation) of joint to another entity that is not the lead entity.", - GetPickedEntityName().c_str()); - return; - } - - AZ::Transform worldTransform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult( - worldTransform, m_entityComponentId.GetEntityId(), &AZ::TransformInterface::GetWorldTM); - worldTransform.ExtractUniformScale(); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - AZ::Transform pickedEntityTransform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult( - pickedEntityTransform, m_pickedEntity, &AZ::TransformInterface::GetWorldTM); - - const AZ::Transform worldTransformInv = worldTransform.GetInverse(); - const AZ::Vector3 pickedLocalPosition = worldTransformInv.TransformVector(pickedEntityTransform.GetTranslation()) - localTransform.GetTranslation(); - - if (abs(pickedLocalPosition.GetLength()) < FLT_EPSILON) - { - AZ_Warning("EditorsubComponentModeSnapRotation", - false, - "The entity %s is too close to the joint position. Please snap rotation to an entity that is not at the position of the joint.", - GetPickedEntityName().c_str()); - return; - } - - const AZ::Vector3 targetDirection = pickedLocalPosition.GetNormalized(); - const AZ::Vector3 sourceDirection = AZ::Vector3::CreateAxisX(); - const AZ::Quaternion newLocalRotation = AZ::Quaternion::CreateShortestArc(sourceDirection, targetDirection); - - PhysX::EditorJointRequestBus::Event(m_entityComponentId - , &PhysX::EditorJointRequests::SetVector3Value - , PhysX::EditorJointComponentMode::s_parameterRotation //using rotation parameter name to set the local rotation value - , newLocalRotation.GetEulerDegrees()); - - m_manipulator->SetBoundsDirty(); - }); - } -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapRotation.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapRotation.h deleted file mode 100644 index 06d41df206..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnapRotation.h +++ /dev/null @@ -1,38 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace PhysX -{ - /// TThis sub-component mode gets an entity position from its base class on mouse down - /// and sets a rotation (AZ::Quaternion) value in the component that uses it. - class EditorSubComponentModeSnapRotation - : public EditorSubComponentModeSnap - { - public: - EditorSubComponentModeSnapRotation( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name); - ~EditorSubComponentModeSnapRotation() override; - - protected: - // PhysX::EditorSubComponentModeSnap - void DisplaySpecificSnapType( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay, - const AZ::Vector3& jointPosition, - const AZ::Vector3& snapDirection, - float snapLength) override; - - void InitMouseDownCallBack() override; - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeVec3.cpp b/Gems/PhysX/Code/Editor/EditorSubComponentModeVec3.cpp deleted file mode 100644 index 7e8affb086..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeVec3.cpp +++ /dev/null @@ -1,91 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include - -#include -#include -#include - -namespace PhysX -{ - EditorSubComponentModeVec3::EditorSubComponentModeVec3( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name) - : EditorSubComponentModeBase(entityComponentIdPair, componentType, name) - , m_translationManipulators(AzToolsFramework::TranslationManipulators::Dimensions::Three, - AZ::Transform::Identity(), AZ::Vector3::CreateOne()) - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Vector3 localTranslation; - EditorJointRequestBus::EventResult( - localTranslation, m_entityComponentId - , &EditorJointRequests::GetVector3Value - , m_name); - - m_translationManipulators.SetSpace(worldTransform); - m_translationManipulators.SetLocalPosition(localTranslation); - m_translationManipulators.AddEntityComponentIdPair(m_entityComponentId); - - m_translationManipulators.Register(AzToolsFramework::g_mainManipulatorManagerId); - - AzToolsFramework::ConfigureTranslationManipulatorAppearance3d(&m_translationManipulators); - - m_translationManipulators.InstallLinearManipulatorMouseMoveCallback([this]( - const AzToolsFramework::LinearManipulator::Action& action) - { - OnManipulatorMoved(action.LocalPosition()); - }); - - m_translationManipulators.InstallPlanarManipulatorMouseMoveCallback([this]( - const AzToolsFramework::PlanarManipulator::Action& action) - { - OnManipulatorMoved(action.LocalPosition()); - }); - - m_translationManipulators.InstallSurfaceManipulatorMouseMoveCallback([this]( - const AzToolsFramework::SurfaceManipulator::Action& action) - { - OnManipulatorMoved(action.LocalPosition()); - }); - } - - EditorSubComponentModeVec3::~EditorSubComponentModeVec3() - { - m_translationManipulators.Unregister(); - } - - void EditorSubComponentModeVec3::Refresh() - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Vector3 localTranslation; - EditorJointRequestBus::EventResult( - localTranslation, m_entityComponentId - , &EditorJointRequests::GetVector3Value - , m_name); - - m_translationManipulators.SetSpace(worldTransform); - m_translationManipulators.SetLocalPosition(localTranslation); - m_translationManipulators.SetBoundsDirty(); - } - - void EditorSubComponentModeVec3::OnManipulatorMoved(const AZ::Vector3& position) - { - m_translationManipulators.SetLocalPosition(position); - EditorJointRequestBus::Event( - m_entityComponentId - , &EditorJointRequests::SetVector3Value - , m_name - , position); - } -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeVec3.h b/Gems/PhysX/Code/Editor/EditorSubComponentModeVec3.h deleted file mode 100644 index 849125eb1c..0000000000 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeVec3.h +++ /dev/null @@ -1,34 +0,0 @@ - -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include - -namespace PhysX -{ - class EditorSubComponentModeVec3 - : public PhysX::EditorSubComponentModeBase - { - public: - EditorSubComponentModeVec3( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name); - ~EditorSubComponentModeVec3(); - - // PhysX::EditorSubComponentModeBase - void Refresh() override; - - private: - void OnManipulatorMoved(const AZ::Vector3& position); - - AzToolsFramework::TranslationManipulators m_translationManipulators; - }; -} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentMode.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentMode.cpp new file mode 100644 index 0000000000..ce95e27db3 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentMode.cpp @@ -0,0 +1,601 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsComponentMode, AZ::SystemAllocator, 0); + + namespace SubModeData + { + const AZ::Crc32 SwitchToTranslationSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtotranslationsubmode"); + static const char* TranslationTitle = "Switch to Position Mode"; + static const char* TranslationToolTip = "Position Mode - Change the position of the joint."; + + const AZ::Crc32 SwitchToRotationSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtorotationsubmode"); + static const char* RotationTitle = "Switch to Rotation Mode"; + static const char* RotationToolTip = "Rotation Mode- Change the rotation of the joint."; + + const AZ::Crc32 SwitchToMaxForceSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtomaxforce"); + static const char* MaxForceTitle = "Switch to Max Force Mode"; + static const char* MaxForceToolTip = "Max Force Mode - Change the maximum force allowed before the joint breaks."; + + const AZ::Crc32 SwitchToMaxTorqueSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtomaxtorque"); + static const char* MaxTorqueTitle = "Switch to Max Torque Mode"; + static const char* MaxTorqueToolTip = "Max Torque Mode - Change the maximum torque allowed before the joint breaks."; + + const AZ::Crc32 SwitchToDampingSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtodamping"); + static const char* DampingTitle = "Switch to Damping Mode"; + static const char* DampingToolTip = "Damping Mode - Change the damping strength of the joint when beyond the limit."; + + const AZ::Crc32 SwitchToStiffnessSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtostiffness"); + static const char* StiffnessTitle = "Switch to Stiffness Mode"; + static const char* StiffnessToolTip = "Stiffness Mode - Change the stiffness strength of the joint when beyond the limit."; + + const AZ::Crc32 SwitchToTwistLimitsSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtotwistlimits"); + static const char* TwistLimitsTitle = "Switch to Twist Limits Mode"; + static const char* TwistLimitsToolTip = "Twist Limits Mode - Change the limits of the joint."; + + const AZ::Crc32 SwitchToSwingLimitsSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtoswinglimits"); + static const char* SwingLimitsTitle = "Switch to Swing Limits Mode"; + static const char* SwingLimitsToolTip = "Swing Limits Mode - Change the limits of the joint."; + + const AZ::Crc32 SwitchToSnapPositionSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtosnapposition"); + static const char* SnapPositionTitle = "Switch to Snap Position Mode"; + static const char* SnapPositionToolTip = "Snap Position Mode - Snap the position of the joint to another Entity."; + + const AZ::Crc32 SwitchToSnapRotationSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.switchtosnaprotation"); + static const char* SnapRotationTitle = "Switch to Snap Rotation Mode"; + static const char* SnapRotationToolTip = "Snap Rotation Mode - Snap the rotation of the joint toward another Entity."; + + const AZ::Crc32 ResetSubMode = AZ_CRC_CE("com.o3de.action.physx.joints.resetsubmode"); + static const char* ResetTitle = "Reset Current Mode"; + static const char* ResetToolTip = "Reset changes made during this mode edit."; + + } // namespace ActionData + + namespace Internal + { + static AzToolsFramework::ViewportUi::ButtonId RegisterClusterButton( + AzToolsFramework::ViewportUi::ClusterId clusterId, const char* iconName, const char* tooltip) + { + AzToolsFramework::ViewportUi::ButtonId buttonId; + AzToolsFramework::ViewportUi::ViewportUiRequestBus::EventResult( + buttonId, AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::CreateClusterButton, clusterId, + AZStd::string::format(":/stylesheet/img/UI20/toolbar/%s.svg", iconName)); + + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterButtonTooltip, clusterId, buttonId, tooltip); + + return buttonId; + } + + void RefreshUI() + { + // The reason this is in a free function is because ColliderComponentMode + // privately inherits from ToolsApplicationNotificationBus. Trying to invoke + // the bus inside the class scope causes the compiler to complain it's not accessible + // to due private inheritance. + // Using the global namespace operator :: should have fixed that, except there + // is a bug in the Microsoft compiler meaning it doesn't work. So this is a work around. + AzToolsFramework::ToolsApplicationNotificationBus::Broadcast( + &AzToolsFramework::ToolsApplicationNotificationBus::Events::InvalidatePropertyDisplay, AzToolsFramework::Refresh_Values); + } + } // namespace Internal + + JointsComponentMode::JointsComponentMode(const AZ::EntityComponentIdPair& entityComponentIdPair, AZ::Uuid componentType) + : AzToolsFramework::ComponentModeFramework::EditorBaseComponentMode(entityComponentIdPair, componentType) + { + m_modeSelectionClusterIds.assign(static_cast(ClusterGroups::GroupCount), AzToolsFramework::ViewportUi::InvalidClusterId); + SetupSubModes(entityComponentIdPair); + + EditorJointRequestBus::Event( + entityComponentIdPair, &EditorJointRequests::SetBoolValue, JointsComponentModeCommon::ParamaterNames::ComponentMode, true); + } + + JointsComponentMode::~JointsComponentMode() + { + EditorJointRequestBus::Event( + GetEntityComponentIdPair(), &EditorJointRequests::SetBoolValue, JointsComponentModeCommon::ParamaterNames::ComponentMode, + false); + + TeardownSubModes(); + m_subModes[m_subMode]->Teardown(GetEntityComponentIdPair()); + } + + void JointsComponentMode::Refresh() + { + m_subModes[m_subMode]->Refresh(GetEntityComponentIdPair()); + } + + AZStd::vector JointsComponentMode::PopulateActionsImpl() + { + const AZ::EntityComponentIdPair entityComponentIdPair = GetEntityComponentIdPair(); + + AZStd::vector subModesState; + EditorJointRequestBus::EventResult(subModesState, entityComponentIdPair, &EditorJointRequests::GetSubComponentModesState); + + auto makeActionOverride = [](const AZ::EntityComponentIdPair& entityComponentIdPair, const AZ::Crc32& actionUri, + const QString& title, const QString& tip,const AZStd::function&& callback) + { + AzToolsFramework::ActionOverride actionOverride; + actionOverride.SetTitle(title); + actionOverride.SetTip(tip); + actionOverride.SetUri(actionUri); + actionOverride.SetEntityComponentIdPair(entityComponentIdPair); + actionOverride.SetCallback(callback); + return actionOverride; + }; + + AZStd::vector actions; + + // translation action + { + AzToolsFramework::ActionOverride translateAction = makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToTranslationSubMode, + SubModeData::TranslationTitle, SubModeData::TranslationToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::Translation, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Translation]); + }); + translateAction.SetKeySequence(QKeySequence(Qt::Key_1)); + actions.emplace_back(translateAction); + } + + // rotation action + { + AzToolsFramework::ActionOverride rotationAction = makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToRotationSubMode, + SubModeData::RotationTitle, SubModeData::RotationToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::Rotation, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Rotation]); + }); + rotationAction.SetKeySequence(QKeySequence(Qt::Key_2)); + actions.emplace_back(rotationAction); + } + + //setup action for other enabled options + for (auto [modeType, parameterString] : subModesState) + { + switch (modeType) + { + case JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToMaxForceSubMode, + SubModeData::MaxForceTitle, SubModeData::MaxForceToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce]); + })); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToMaxTorqueSubMode, + SubModeData::MaxTorqueTitle, SubModeData::MaxTorqueToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque]); + })); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::Damping: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToDampingSubMode, + SubModeData::DampingTitle, SubModeData::DampingToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::Damping, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Damping]); + })); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToStiffnessSubMode, + SubModeData::StiffnessTitle, SubModeData::StiffnessToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness]); + })); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToTwistLimitsSubMode, + SubModeData::TwistLimitsTitle, SubModeData::TwistLimitsToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits]); + })); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToSwingLimitsSubMode, + SubModeData::SwingLimitsTitle, SubModeData::SwingLimitsToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits]); + })); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToSnapPositionSubMode, + SubModeData::SnapPositionTitle, SubModeData::SnapPositionToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition]); + })); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::SnapRotation: + { + actions.emplace_back(makeActionOverride( + entityComponentIdPair, SubModeData::SwitchToSnapRotationSubMode, + SubModeData::SnapRotationTitle, SubModeData::SnapRotationToolTip, + [this]() + { + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::SnapRotation, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SnapRotation]); + })); + } + break; + } + } + + // reset values + { + AzToolsFramework::ActionOverride resetValuesAction = makeActionOverride( + entityComponentIdPair, SubModeData::ResetSubMode, + SubModeData::ResetTitle, SubModeData::ResetToolTip, + [this]() + { + ResetCurrentMode(); + }); + resetValuesAction.SetKeySequence(QKeySequence(Qt::Key_R)); + actions.emplace_back(resetValuesAction); + } + + return actions; + } + + AZStd::vector JointsComponentMode::PopulateViewportUiImpl() + { + return AZStd::vector(m_modeSelectionClusterIds.begin(), m_modeSelectionClusterIds.end()); + } + + void JointsComponentMode::SetCurrentMode(JointsComponentModeCommon::SubComponentModes::ModeType newMode, ButtonData& buttonData) + { + + if (auto subMode = m_subModes.find(newMode); + subMode != m_subModes.end()) + { + const AZ::EntityComponentIdPair entityComponentIdPair = GetEntityComponentIdPair(); + m_subModes[m_subMode]->Teardown(entityComponentIdPair); + m_subMode = newMode; + subMode->second->Setup(entityComponentIdPair); + + // if this button is on a different cluster. clear the active state. + if (m_activeButton.m_clusterId != buttonData.m_clusterId) + { + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::ClearClusterActiveButton, m_activeButton.m_clusterId); + } + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterActiveButton, buttonData.m_clusterId, + buttonData.m_buttonId); + m_activeButton = buttonData; + } + else + { + AZ_Assert(false, "PhysXJoints Uninitialized joint component mode selected."); + } + } + + bool JointsComponentMode::HandleMouseInteraction(const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) + { + // Propagate mouse interaction to sub-component mode. + if (m_subModes[m_subMode]) + { + m_subModes[m_subMode]->HandleMouseInteraction(mouseInteraction); + } + + return false; + } + + void JointsComponentMode::SetupSubModes(const AZ::EntityComponentIdPair& entityComponentIdPair) + { + //create the 3 cluster groups + for (auto& clusterId : m_modeSelectionClusterIds) + { + AzToolsFramework::ViewportUi::ViewportUiRequestBus::EventResult( + clusterId, AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::CreateCluster, + AzToolsFramework::ViewportUi::Alignment::TopLeft); + } + + //retrieve the enabled sub components from the entity + AZStd::vector subModesState; + EditorJointRequestBus::EventResult(subModesState, entityComponentIdPair, &EditorJointRequests::GetSubComponentModesState); + + const AzToolsFramework::ViewportUi::ClusterId group1ClusterId = GetClusterId(ClusterGroups::Group1); + const AzToolsFramework::ViewportUi::ClusterId group2ClusterId = GetClusterId(ClusterGroups::Group2); + //hide cluster 2, if something is added to it. it will make is visible + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, + group2ClusterId, false); + + const AzToolsFramework::ViewportUi::ClusterId group3ClusterId = GetClusterId(ClusterGroups::Group3); + // hide cluster 3, if something is added to it. it will make is visible + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, + group3ClusterId, false); + + //translation and rotation are enabled for all joints in group 1 + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::Translation] = + AZStd::make_unique(); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Translation] = + ButtonData{ group1ClusterId, Internal::RegisterClusterButton(group1ClusterId, "Move", SubModeData::TranslationToolTip) }; + + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::Rotation] = AZStd::make_unique(); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Rotation] = + ButtonData{ group1ClusterId, Internal::RegisterClusterButton(group1ClusterId, "Rotate", SubModeData::RotationTitle) }; + + //some constants for some modes + const float ExponentBreakage = 1.0f; + const float ExponentSpring = 2.0f; + + //setup the remaining modes if they're in the enabled list. + for (auto [modeType, parameterString] : subModesState) + { + switch (modeType) + { + case JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce] = + AZStd::make_unique( + parameterString, ExponentBreakage, EditorJointConfig::s_breakageMax, EditorJointConfig::s_breakageMin); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group3ClusterId, "joints/MaxForce", SubModeData::MaxForceToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce] = + ButtonData{ group3ClusterId, buttonId }; + + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group3ClusterId, true); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque] = + AZStd::make_unique( + parameterString, ExponentBreakage, EditorJointConfig::s_breakageMax, EditorJointConfig::s_breakageMin); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group3ClusterId, "joints/MaxTorque", SubModeData::MaxTorqueToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque] = + ButtonData{ group3ClusterId, buttonId }; + + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group3ClusterId, true); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::Damping: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::Damping] = + AZStd::make_unique( + parameterString, ExponentSpring, EditorJointLimitBase::s_springMax, EditorJointLimitBase::s_springMin); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group2ClusterId, "joints/Damping", SubModeData::DampingToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Damping] = ButtonData{ group2ClusterId, buttonId }; + + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness] = + AZStd::make_unique( + parameterString, ExponentSpring, EditorJointLimitBase::s_springMax, EditorJointLimitBase::s_springMin); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group2ClusterId, "joints/Stiffness", SubModeData::StiffnessToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness] = + ButtonData{ group2ClusterId, buttonId }; + + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits] = + AZStd::make_unique( + parameterString, + AZ::Vector3::CreateAxisX(), // PhysX revolute joints uses the x-axis by default + EditorJointLimitPairConfig::s_angleMax, EditorJointLimitPairConfig::s_angleMin); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group2ClusterId, "joints/TwistLimits", SubModeData::TwistLimitsToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits] = + ButtonData{ group2ClusterId, buttonId }; + + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits] = + AZStd::make_unique( + parameterString, EditorJointLimitPairConfig::s_angleMax, EditorJointLimitPairConfig::s_angleMin); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group2ClusterId, "joints/SwingLimits", SubModeData::SwingLimitsToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits] = + ButtonData{ group2ClusterId, buttonId }; + + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::SetClusterVisible, group2ClusterId, true); + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition] = + AZStd::make_unique(); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group1ClusterId, "joints/SnapPosition", SubModeData::SnapPositionToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition] = + ButtonData{ group1ClusterId, buttonId }; + } + break; + case JointsComponentModeCommon::SubComponentModes::ModeType::SnapRotation: + { + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::SnapRotation] = + AZStd::make_unique(); + + const AzToolsFramework::ViewportUi::ButtonId buttonId = + Internal::RegisterClusterButton(group1ClusterId, "joints/SnapRotation", SubModeData::SnapRotationToolTip); + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::SnapRotation] = + ButtonData{ group1ClusterId, buttonId }; + } + break; + } + } + + //register click handler for the buttons + m_modeSelectionHandlers.push_back(AZ::Event::Handler( + [this](AzToolsFramework::ViewportUi::ButtonId buttonId) + { + for (auto itr : m_buttonData) + { + if (itr.second.m_clusterId == GetClusterId(ClusterGroups::Group1) && itr.second.m_buttonId == buttonId) + { + SetCurrentMode(itr.first, itr.second); + break; + } + } + })); + m_modeSelectionHandlers.push_back(AZ::Event::Handler( + [this](AzToolsFramework::ViewportUi::ButtonId buttonId) + { + for (auto itr : m_buttonData) + { + if (itr.second.m_clusterId == GetClusterId(ClusterGroups::Group2) && itr.second.m_buttonId == buttonId) + { + SetCurrentMode(itr.first, itr.second); + break; + } + } + })); + m_modeSelectionHandlers.push_back(AZ::Event::Handler( + [this](AzToolsFramework::ViewportUi::ButtonId buttonId) + { + for (auto itr : m_buttonData) + { + if (itr.second.m_clusterId == GetClusterId(ClusterGroups::Group3) && itr.second.m_buttonId == buttonId) + { + SetCurrentMode(itr.first, itr.second); + break; + } + } + })); + + for (int i = 0; i < static_cast(ClusterGroups::GroupCount); i++) + { + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, + &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::RegisterClusterEventHandler, m_modeSelectionClusterIds[i], + m_modeSelectionHandlers[i]); + } + + // set the translate as enabled by default. + SetCurrentMode( + JointsComponentModeCommon::SubComponentModes::ModeType::Translation, + m_buttonData[JointsComponentModeCommon::SubComponentModes::ModeType::Translation]); + + m_subModes[JointsComponentModeCommon::SubComponentModes::ModeType::Translation]->Setup(GetEntityComponentIdPair()); + m_subMode = JointsComponentModeCommon::SubComponentModes::ModeType::Translation; + } + + void JointsComponentMode::ResetCurrentMode() + { + const AZ::EntityComponentIdPair entityComponentIdPair = GetEntityComponentIdPair(); + m_subModes[m_subMode]->ResetValues(entityComponentIdPair); + m_subModes[m_subMode]->Refresh(entityComponentIdPair); + + Internal::RefreshUI(); + } + + void JointsComponentMode::TeardownSubModes() + { + for (auto clusterid : m_modeSelectionClusterIds) + { + AzToolsFramework::ViewportUi::ViewportUiRequestBus::Event( + AzToolsFramework::ViewportUi::DefaultViewportId, &AzToolsFramework::ViewportUi::ViewportUiRequestBus::Events::RemoveCluster, + clusterid); + } + } + + AzToolsFramework::ViewportUi::ClusterId JointsComponentMode::GetClusterId(ClusterGroups group) + { + return m_modeSelectionClusterIds[static_cast(group)]; + } +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentMode.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentMode.h new file mode 100644 index 0000000000..812bc71ec1 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentMode.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace AZ +{ + class EntityComponentIdPair; +} + +namespace PhysX +{ + //! Class responsible for managing component mode for joints. + class JointsComponentMode final + : public AzToolsFramework::ComponentModeFramework::EditorBaseComponentMode + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsComponentMode(const AZ::EntityComponentIdPair& entityComponentIdPair, AZ::Uuid componentType); + ~JointsComponentMode(); + + // EditorBaseComponentMode ... + void Refresh() override; + AZStd::vector PopulateActionsImpl() override; + AZStd::vector PopulateViewportUiImpl() override; + private: + //! Used to identify the group of component modes. + enum class ClusterGroups + { + Group1 = 0, //!< Position Joint, Rotate Joint, Snap Position, Snap Rotation. + Group2, //!< Damping, Stiffness, Twist Limits, Swing Limits. + Group3, //!< Max Force, Max Torque. + + GroupCount + }; + + //! Used to track the cluster that a specific button is apart of. + struct ButtonData + { + AzToolsFramework::ViewportUi::ClusterId m_clusterId; + AzToolsFramework::ViewportUi::ButtonId m_buttonId; + }; + + void SetCurrentMode(JointsComponentModeCommon::SubComponentModes::ModeType newMode, ButtonData& buttonData); + bool HandleMouseInteraction(const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) override; + void SetupSubModes(const AZ::EntityComponentIdPair& entityComponentIdPair); + void ResetCurrentMode(); + void TeardownSubModes(); + + AzToolsFramework::ViewportUi::ClusterId GetClusterId(ClusterGroups group); + + AZStd::fixed_vector(ClusterGroups::GroupCount)> m_modeSelectionClusterIds; //!< List of the cluster ui's. The sub modes are split across 3 groups and each group is it's own cluster ui. + AZStd::unordered_map m_buttonData; //!< Mapping of joint component modes to the button data. + + AZStd::fixed_vector::Handler, static_cast(ClusterGroups::GroupCount)> + m_modeSelectionHandlers; //!< Input handlers for each cluster UI. + ButtonData m_activeButton; //!< The current highlighted button data. + + JointsComponentModeCommon::SubComponentModes::ModeType m_subMode = JointsComponentModeCommon::SubComponentModes::ModeType::Translation; //!< The current component mode that is active. + AZStd::unordered_map> m_subModes; //!< The logic handlers for each component mode. + }; +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.cpp new file mode 100644 index 0000000000..a400745c51 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace PhysX::JointsComponentModeCommon +{ + const AZStd::string_view ParamaterNames::TwistLimits = "Twist Limits"; + const AZStd::string_view ParamaterNames::Damping = "Damping"; + const AZStd::string_view ParamaterNames::MaxForce = "Maximum Force"; + const AZStd::string_view ParamaterNames::MaxTorque = "Maximum Torque"; + const AZStd::string_view ParamaterNames::Position = "Position"; + const AZStd::string_view ParamaterNames::Rotation = "Rotation"; + const AZStd::string_view ParamaterNames::SnapPosition = "Snap Position"; + const AZStd::string_view ParamaterNames::SnapRotation = "Snap Rotation"; + const AZStd::string_view ParamaterNames::Stiffness = "Stiffness"; + const AZStd::string_view ParamaterNames::SwingLimit = "Swing Limits"; + const AZStd::string_view ParamaterNames::Transform = "Transform"; + const AZStd::string_view ParamaterNames::ComponentMode = "Component Mode"; + const AZStd::string_view ParamaterNames::LeadEntity = "Lead Entity"; + +} // namespace PhysX::JointsComponentModeCommon diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.h new file mode 100644 index 0000000000..3deb3b7e3f --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace PhysX::JointsComponentModeCommon +{ + namespace SubComponentModes + { + //! Used to identify a specific sub component mode used with joints + enum class ModeType : AZ::u32 + { + Translation = 0, + Rotation, + MaxForce, + MaxTorque, + Damping, + Stiffness, + TwistLimits, + SwingLimits, + SnapPosition, + SnapRotation, + + ModeCount + }; + + //! Shared data structure used with Angle Cone and Angle Pair sub component modes. + //! Holds information about the axis and limits of the angle. + struct AngleModesSharedRotationState + { + AZ::Vector3 m_axis; //!< The Axis of rotation to apply the limits. + AZ::Quaternion m_savedOrientation = AZ::Quaternion::CreateIdentity(); //!< The angle delta of the last mouse action. + PhysX::AngleLimitsFloatPair m_valuePair; //!< the current limits of the angle. + }; + } // namespace SubComponentModes + + //! Name Identifiers for the joint components sub modes. + struct ParamaterNames + { + static const AZStd::string_view TwistLimits; + static const AZStd::string_view Damping; + static const AZStd::string_view MaxForce; + static const AZStd::string_view MaxTorque; + static const AZStd::string_view Position; + static const AZStd::string_view Rotation; + static const AZStd::string_view SnapPosition; + static const AZStd::string_view SnapRotation; + static const AZStd::string_view Stiffness; + static const AZStd::string_view SwingLimit; + static const AZStd::string_view Transform; + static const AZStd::string_view ComponentMode; + static const AZStd::string_view LeadEntity; + }; + + //! A pairing of Sub component Names, and Id. + struct SubModeParamaterState + { + SubComponentModes::ModeType m_modeType = SubComponentModes::ModeType::ModeCount; //!< The Id of the sub component mode. + AZStd::string m_parameterName; //!< The name of the sub component mode. + }; +} // namespace PhysX::JointsComponentModeCommon diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp new file mode 100644 index 0000000000..11abe0fa2a --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp @@ -0,0 +1,432 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeAngleCone, AZ::SystemAllocator, 0); + + namespace Internal + { + const float ArrowLength = 2.0f; + const float ConeHeight = 3.0f; + const float XRotationManipulatorRadius = 2.0f; + const float XRotationManipulatorWidth = 0.05f; + } // namespace Internal + + JointsSubComponentModeAngleCone::JointsSubComponentModeAngleCone( + const AZStd::string& propertyName, float max, float min) + : m_propertyName(propertyName) + , m_max(max) + , m_min(min) + { + + } + + void JointsSubComponentModeAngleCone::Setup(const AZ::EntityComponentIdPair& idPair) + { + m_entityComponentIdPair = idPair; + EditorJointRequestBus::EventResult( + m_resetPostion, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); + EditorJointRequestBus::EventResult( + m_resetRotation, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation); + EditorJointRequestBus::EventResult( + m_resetLimits, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + + AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentIdPair.GetEntityId()); + + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + const AZ::Quaternion localRotation = localTransform.GetRotation(); + + // Initialize manipulators used to resize the base of the cone. + m_yLinearManipulator = AzToolsFramework::LinearManipulator::MakeShared(worldTransform); + m_yLinearManipulator->AddEntityComponentIdPair(m_entityComponentIdPair); + m_yLinearManipulator->SetAxis(AZ::Vector3::CreateAxisZ()); + + m_zLinearManipulator = AzToolsFramework::LinearManipulator::MakeShared(worldTransform); + m_zLinearManipulator->AddEntityComponentIdPair(m_entityComponentIdPair); + m_zLinearManipulator->SetAxis(AZ::Vector3::CreateAxisY()); + + m_yzPlanarManipulator = AzToolsFramework::PlanarManipulator::MakeShared(worldTransform); + m_yzPlanarManipulator->AddEntityComponentIdPair(m_entityComponentIdPair); + m_yzPlanarManipulator->SetAxes(AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); + + ConfigureLinearView( + Internal::ArrowLength, AZ::Color(1.0f, 0.0f, 0.0f, 1.0f), AZ::Color(0.0f, 1.0f, 0.0f, 1.0f), AZ::Color(0.0f, 0.0f, 1.0f, 1.0f)); + + ConfigurePlanarView(AZ::Color(0.0f, 1.0f, 0.0f, 1.0f), AZ::Color(0.0f, 0.0f, 1.0f, 1.0f)); + + // Position and orientate manipulators + AZ::Transform displacementTransform = localTransform; + AZ::Vector3 displacementTranslate = localRotation.TransformVector(AZ::Vector3(Internal::ConeHeight, 0.0f, 0.0f)); + displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); + + m_yLinearManipulator->SetLocalTransform(displacementTransform); + m_zLinearManipulator->SetLocalTransform(displacementTransform); + m_yzPlanarManipulator->SetLocalTransform(displacementTransform); + + // Initialize rotation manipulator for rotating cone + m_xRotationManipulator = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); + m_xRotationManipulator->AddEntityComponentIdPair(m_entityComponentIdPair); + m_xRotationManipulator->SetAxis(AZ::Vector3::CreateAxisX()); + m_xRotationManipulator->SetLocalTransform(localTransform); + + const AZ::Color xRotationManipulatorColor = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); + m_xRotationManipulator->SetView(AzToolsFramework::CreateManipulatorViewCircle( + *m_xRotationManipulator, xRotationManipulatorColor, Internal::XRotationManipulatorRadius, Internal::XRotationManipulatorWidth, + AzToolsFramework::DrawHalfDottedCircle)); + + AZStd::shared_ptr sharedRotationState = + AZStd::make_shared(); + + struct SharedState + { + AngleLimitsFloatPair m_startValues; + }; + auto sharedState = AZStd::make_shared(); + + m_yLinearManipulator->InstallLeftMouseDownCallback( + [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable + { + AngleLimitsFloatPair currentValue; + EditorJointRequestBus::EventResult( + currentValue, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + sharedState->m_startValues = currentValue; + }); + + m_yLinearManipulator->InstallMouseMoveCallback( + [this, sharedState](const AzToolsFramework::LinearManipulator::Action& action) + { + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, + JointsComponentModeCommon::ParamaterNames::Transform); + const AZ::Quaternion localRotation = localTransform.GetRotation(); + const float axisDisplacement = action.LocalPositionOffset().Dot(localRotation.TransformVector(action.m_fixed.m_axis)); + const float originalBaseY = tan(AZ::DegToRad(sharedState->m_startValues.first)) * Internal::ConeHeight; + const float newBaseY = originalBaseY + axisDisplacement; + const float newAngle = AZ::GetClamp(AZ::RadToDeg(atan(newBaseY / Internal::ConeHeight)), m_min, m_max); + + EditorJointRequestBus::Event( + m_entityComponentIdPair, &EditorJointRequests::SetLinearValuePair, m_propertyName, + AngleLimitsFloatPair(newAngle, sharedState->m_startValues.second)); + + m_yLinearManipulator->SetBoundsDirty(); + }); + + m_zLinearManipulator->InstallLeftMouseDownCallback( + [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable + { + AngleLimitsFloatPair currentValue; + EditorJointRequestBus::EventResult( + currentValue, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + sharedState->m_startValues = currentValue; + }); + + m_zLinearManipulator->InstallMouseMoveCallback( + [this, sharedState](const AzToolsFramework::LinearManipulator::Action& action) + { + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, + JointsComponentModeCommon::ParamaterNames::Transform); + const AZ::Quaternion localRotation = localTransform.GetRotation(); + const float axisDisplacement = action.LocalPositionOffset().Dot(localRotation.TransformVector(action.m_fixed.m_axis)); + const float originalBaseZ = tan(AZ::DegToRad(sharedState->m_startValues.second)) * Internal::ConeHeight; + const float newBaseZ = originalBaseZ + axisDisplacement; + const float newAngle = AZ::GetClamp(AZ::RadToDeg(atan(newBaseZ / Internal::ConeHeight)), m_min, m_max); + + EditorJointRequestBus::Event( + m_entityComponentIdPair, &EditorJointRequests::SetLinearValuePair, m_propertyName, + AngleLimitsFloatPair(sharedState->m_startValues.first, newAngle)); + + m_zLinearManipulator->SetBoundsDirty(); + }); + + m_yzPlanarManipulator->InstallLeftMouseDownCallback( + [this, sharedState]([[maybe_unused]]const AzToolsFramework::PlanarManipulator::Action& action) mutable + { + AngleLimitsFloatPair currentValue; + EditorJointRequestBus::EventResult( + currentValue, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + sharedState->m_startValues = currentValue; + }); + + m_yzPlanarManipulator->InstallMouseMoveCallback( + [this, sharedState](const AzToolsFramework::PlanarManipulator::Action& action) + { + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, + JointsComponentModeCommon::ParamaterNames::Transform); + + const AZ::Quaternion localRotation = localTransform.GetRotation(); + + const float axisDisplacementY = action.LocalPositionOffset().Dot(localRotation.TransformVector(AZ::Vector3::CreateAxisY())); + const float axisDisplacementZ = action.LocalPositionOffset().Dot(localRotation.TransformVector(AZ::Vector3::CreateAxisZ())); + const float axisDisplacement = axisDisplacementZ > axisDisplacementY ? axisDisplacementZ : axisDisplacementY; + + const float originalBaseY = tan(AZ::DegToRad(sharedState->m_startValues.first)) * Internal::ConeHeight; + const float newBaseY = originalBaseY + axisDisplacement; + const float newAngleY = AZ::GetClamp(AZ::RadToDeg(atan(newBaseY / Internal::ConeHeight)), m_min, m_max); + + const float originalBaseZ = tan(AZ::DegToRad(sharedState->m_startValues.second)) * Internal::ConeHeight; + const float newBaseZ = originalBaseZ + axisDisplacement; + const float newAngleZ = AZ::GetClamp(AZ::RadToDeg(atan(newBaseZ / Internal::ConeHeight)), m_min, m_max); + + EditorJointRequestBus::Event( + m_entityComponentIdPair, &EditorJointRequests::SetLinearValuePair, m_propertyName, + AngleLimitsFloatPair(newAngleY, newAngleZ)); + + m_yzPlanarManipulator->SetBoundsDirty(); + }); + + struct SharedStateXRotate + { + AZ::Transform m_startTM; + }; + auto sharedStateXRotate = AZStd::make_shared(); + + auto mouseDownCallback = [this, sharedRotationState](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + AZ::Quaternion normalizedStart = action.m_start.m_rotation.GetNormalized(); + sharedRotationState->m_axis = AZ::Vector3(normalizedStart.GetX(), normalizedStart.GetY(), normalizedStart.GetZ()); + sharedRotationState->m_savedOrientation = AZ::Quaternion::CreateIdentity(); + + AngleLimitsFloatPair currentValue; + EditorJointRequestBus::EventResult( + currentValue, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + + sharedRotationState->m_valuePair = currentValue; + }; + + auto mouseDownRotateXCallback = + [this, sharedStateXRotate]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + PhysX::EditorJointRequestBus::EventResult( + sharedStateXRotate->m_startTM, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetTransformValue, + JointsComponentModeCommon::ParamaterNames::Transform); + }; + + m_xRotationManipulator->InstallLeftMouseDownCallback(mouseDownRotateXCallback); + + m_xRotationManipulator->InstallMouseMoveCallback( + [this, sharedStateXRotate](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; + + AZ::Transform newTransform = AZ::Transform::CreateIdentity(); + newTransform = sharedStateXRotate->m_startTM * AZ::Transform::CreateFromQuaternion(action.m_current.m_delta); + + PhysX::EditorJointRequestBus::Event( + m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, + newTransform.GetTranslation()); + PhysX::EditorJointRequestBus::Event( + m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation, + newTransform.GetRotation().GetEulerDegrees()); + + m_yLinearManipulator->SetLocalOrientation(manipulatorOrientation); + m_zLinearManipulator->SetLocalOrientation(manipulatorOrientation); + m_yLinearManipulator->SetAxis(action.m_current.m_delta.TransformVector(AZ::Vector3::CreateAxisY())); + m_zLinearManipulator->SetAxis(action.m_current.m_delta.TransformVector(AZ::Vector3::CreateAxisZ())); + m_xRotationManipulator->SetLocalOrientation(manipulatorOrientation); + + m_yLinearManipulator->SetBoundsDirty(); + m_zLinearManipulator->SetBoundsDirty(); + m_xRotationManipulator->SetBoundsDirty(); + }); + + m_xRotationManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + m_yLinearManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + m_zLinearManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + m_yzPlanarManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + + AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(m_entityComponentIdPair.GetEntityId()); + + Refresh(m_entityComponentIdPair); + } + + void JointsSubComponentModeAngleCone::Refresh(const AZ::EntityComponentIdPair& idPair) + { + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, idPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + + float coneHeight = Internal::ConeHeight; + AngleLimitsFloatPair yzSwingAngleLimits; + EditorJointRequestBus::EventResult(yzSwingAngleLimits, idPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + + // Draw inverted cone (negative cone height) if angles are larger than 90 deg. + if (yzSwingAngleLimits.first > 90.0f || yzSwingAngleLimits.second > 90.0f) + { + coneHeight = -Internal::ConeHeight; + } + + // reposition manipulators + const AZ::Quaternion localRotation = localTransform.GetRotation(); + const AZ::Vector3 linearManipulatorOffset = + localTransform.GetTranslation() + localRotation.TransformVector(AZ::Vector3(coneHeight, 0.0f, 0.0f)); + + m_xRotationManipulator->SetLocalTransform(localTransform); + + localTransform.SetTranslation(linearManipulatorOffset); + + m_yLinearManipulator->SetLocalTransform(localTransform); + m_zLinearManipulator->SetLocalTransform(localTransform); + m_yzPlanarManipulator->SetLocalTransform(localTransform); + } + + void JointsSubComponentModeAngleCone::Teardown(const AZ::EntityComponentIdPair& idPair) + { + AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); + + m_xRotationManipulator->RemoveEntityComponentIdPair(idPair); + m_xRotationManipulator->Unregister(); + m_yLinearManipulator->RemoveEntityComponentIdPair(idPair); + m_yLinearManipulator->Unregister(); + m_zLinearManipulator->RemoveEntityComponentIdPair(idPair); + m_zLinearManipulator->Unregister(); + m_yzPlanarManipulator->RemoveEntityComponentIdPair(idPair); + m_yzPlanarManipulator->Unregister(); + } + + void JointsSubComponentModeAngleCone::ResetValues(const AZ::EntityComponentIdPair& idPair) + { + EditorJointRequestBus::Event( + idPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, m_resetPostion); + EditorJointRequestBus::Event( + idPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation, m_resetRotation); + EditorJointRequestBus::Event(idPair, &EditorJointRequests::SetLinearValuePair, m_propertyName, m_resetLimits); + } + + void JointsSubComponentModeAngleCone::ConfigureLinearView( + float axisLength, [[maybe_unused]] const AZ::Color& axis1Color, const AZ::Color& axis2Color, const AZ::Color& axis3Color) + { + const float coneLength = 0.28f; + const float coneRadius = 0.07f; + + const auto configureLinearView = + [coneLength, axisLength, coneRadius](AzToolsFramework::LinearManipulator* linearManipulator, const AZ::Color& color) + { + AzToolsFramework::ManipulatorViews views; + views.emplace_back(CreateManipulatorViewLine( + *linearManipulator, color, axisLength, + AzToolsFramework::ManipulatorLineBoundWidth(AzFramework::InvalidViewportId))); + views.emplace_back(CreateManipulatorViewCone( + *linearManipulator, color, linearManipulator->GetAxis() * (axisLength - coneLength), coneLength, coneRadius)); + linearManipulator->SetViews(AZStd::move(views)); + }; + + configureLinearView(m_yLinearManipulator.get(), axis2Color); + configureLinearView(m_zLinearManipulator.get(), axis3Color); + } + + void JointsSubComponentModeAngleCone::ConfigurePlanarView(const AZ::Color& planeColor, const AZ::Color& plane2Color) + { + const float planeSize = 0.6f; + AzToolsFramework::ManipulatorViews views; + views.emplace_back(CreateManipulatorViewQuad(*m_yzPlanarManipulator, planeColor, plane2Color, planeSize)); + m_yzPlanarManipulator->SetViews(AZStd::move(views)); + } + + void JointsSubComponentModeAngleCone::DisplayEntityViewport( + [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) + { + AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentIdPair.GetEntityId()); + + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, + JointsComponentModeCommon::ParamaterNames::Transform); + + AZ::u32 stateBefore = debugDisplay.GetState(); + debugDisplay.CullOff(); + + debugDisplay.PushMatrix(worldTransform); + debugDisplay.PushMatrix(localTransform); + + const float xAxisArrowLength = 2.0f; + debugDisplay.SetColor(AZ::Color(1.0f, 0.0f, 0.0f, 1.0f)); + debugDisplay.DrawArrow(AZ::Vector3(0.0f, 0.0f, 0.0f), AZ::Vector3(xAxisArrowLength, 0.0f, 0.0f)); + + AngleLimitsFloatPair yzSwingAngleLimits; + EditorJointRequestBus::EventResult( + yzSwingAngleLimits, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + + const AZ::u32 numEllipseSamples = 16; + AZ::Vector3 ellipseSamples[numEllipseSamples]; + float coneHeight = Internal::ConeHeight; + + // Draw inverted cone if angles are larger than 90 deg. + if (yzSwingAngleLimits.first > 90.0f || yzSwingAngleLimits.second > 90.0f) + { + coneHeight = -Internal::ConeHeight; + } + + // Compute points along perimeter of cone base + const float coney = tanf(AZ::DegToRad(yzSwingAngleLimits.first)) * coneHeight; + const float conez = tanf(AZ::DegToRad(yzSwingAngleLimits.second)) * coneHeight; + const float step = AZ::Constants::TwoPi / numEllipseSamples; + for (size_t i = 0; i < numEllipseSamples; ++i) + { + const float angleStep = step * i; + ellipseSamples[i].SetX(coneHeight); + ellipseSamples[i].SetY(conez * sin(angleStep)); + ellipseSamples[i].SetZ(coney * cos(angleStep)); + } + + // draw cone + for (size_t i = 0; i < numEllipseSamples; ++i) + { + size_t nextIndex = i + 1; + if (i == numEllipseSamples - 1) + { + nextIndex = 0; + } + + // draw cone sides + debugDisplay.SetColor(AZ::Color(1.0f, 1.0f, 1.0f, 0.2f)); + debugDisplay.DrawTri(AZ::Vector3(0.0f, 0.0f, 0.0f), ellipseSamples[i], ellipseSamples[nextIndex]); + + // draw parameter of cone base + debugDisplay.SetColor(AZ::Color(0.4f, 0.4f, 0.4f, 0.4f)); + debugDisplay.DrawLine(ellipseSamples[i], ellipseSamples[nextIndex]); + } + + // draw axis lines at base of cone, and from tip to base. + debugDisplay.SetColor(AZ::Color(0.5f, 0.5f, 0.5f, 0.6f)); + debugDisplay.DrawLine(ellipseSamples[0], ellipseSamples[numEllipseSamples / 2]); + debugDisplay.DrawLine(ellipseSamples[numEllipseSamples * 3 / 4], ellipseSamples[numEllipseSamples / 4]); + debugDisplay.DrawLine(AZ::Vector3(0.0f, 0.0f, 0.0f), AZ::Vector3(coneHeight, 0.0f, 0.0f)); + + debugDisplay.PopMatrix(); // pop local transform + debugDisplay.PopMatrix(); // pop world transform + debugDisplay.SetState(stateBefore); + + // reposition and reorientate manipulators + Refresh(m_entityComponentIdPair); + } + +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.h new file mode 100644 index 0000000000..3f6d001112 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + class AngularManipulator; + class LinearManipulator; + class PlanarManipulator; +} // namespace AzToolsFramework + +namespace PhysX +{ + class JointsSubComponentModeAngleCone final + : public PhysXSubComponentModeBase + , private AzFramework::EntityDebugDisplayEventBus::Handler + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsSubComponentModeAngleCone(const AZStd::string& propertyName, float max, float min); + + // PhysXSubComponentModeBase ... + void Setup(const AZ::EntityComponentIdPair& idPair) override; + void Refresh(const AZ::EntityComponentIdPair& idPair) override; + void Teardown(const AZ::EntityComponentIdPair& idPair) override; + void ResetValues(const AZ::EntityComponentIdPair& idPair) override; + + private: + void ConfigureLinearView( + float axisLength, + const AZ::Color& axis1Color, + const AZ::Color& axis2Color, + const AZ::Color& axis3Color = AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)); + + void ConfigurePlanarView( + const AZ::Color& planeColor = AZ::Color(0.0f, 1.0f, 0.0f, 0.5f), + const AZ::Color& plane2Color = AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)); + + // AzFramework::EntityDebugDisplayEventBus + void DisplayEntityViewport(const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) override; + + float m_max = AZStd::numeric_limits::max(); + float m_min = -AZStd::numeric_limits::max(); + + AZ::EntityComponentIdPair m_entityComponentIdPair; + AZ::Vector3 m_resetPostion; + AZ::Vector3 m_resetRotation; + AngleLimitsFloatPair m_resetLimits; + AZStd::string m_propertyName; + AZStd::shared_ptr m_xRotationManipulator; + AZStd::shared_ptr m_yLinearManipulator; + AZStd::shared_ptr m_zLinearManipulator; + AZStd::shared_ptr m_yzPlanarManipulator; + }; +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.cpp new file mode 100644 index 0000000000..84b0cd4b5b --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.cpp @@ -0,0 +1,305 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeAnglePair, AZ::SystemAllocator, 0); + + namespace Internal + { + const float Alpha = 0.6f; + const AZ::Color ColorDefault = AZ::Color(1.0f, 1.0f, 1.0f, Alpha); + const AZ::Color ColorFirst = AZ::Color(1.0f, 0.0f, 0.0f, Alpha); + const AZ::Color ColorSecond = AZ::Color(0.0f, 1.0f, 0.0f, Alpha); + const AZ::Color ColorSweepArc = AZ::Color(1.0f, 1.0f, 1.0f, Alpha); + + const float SweepLineDisplaceFactor = 0.5f; + const float SweepLineThickness = 1.0f; + const float SweepLineGranularity = 1.0f; + } // namespace Internal + + JointsSubComponentModeAnglePair::JointsSubComponentModeAnglePair( + const AZStd::string& propertyName, const AZ::Vector3& axis, float max, float min) + : m_propertyName(propertyName) + , m_axis(axis) + , m_firstMax(max) + , m_firstMin(min) + , m_secondMax(min) + , m_secondMin(-max) + { + + } + + void JointsSubComponentModeAnglePair::Setup(const AZ::EntityComponentIdPair& idPair) + { + m_entityComponentIdPair = idPair; + EditorJointRequestBus::EventResult(m_resetValue, idPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + + const AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(idPair.GetEntityId()); + + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, idPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + const AZ::Quaternion localRotation = localTransform.GetRotation(); + + AZ::Vector3 displacement = m_axis; + AZ::Transform displacementTransform = localTransform; + AZ::Vector3 displacementTranslate = localRotation.TransformVector(displacement); + displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); + + m_firstManipulator = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); + m_firstManipulator->AddEntityComponentIdPair(idPair); + m_firstManipulator->SetAxis(m_axis); + m_firstManipulator->SetLocalTransform(displacementTransform); + + displacement = -m_axis; + displacementTranslate = localRotation.TransformVector(displacement); + displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); + m_secondManipulator = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); + m_secondManipulator->AddEntityComponentIdPair(idPair); + m_secondManipulator->SetAxis(m_axis); + m_secondManipulator->SetLocalTransform(displacementTransform); + + const float manipulatorRadius = 2.0f; + const float manipulatorWidth = 0.05f; + m_firstManipulator->SetView(AzToolsFramework::CreateManipulatorViewCircle( + *m_firstManipulator, Internal::ColorFirst, manipulatorRadius, manipulatorWidth, AzToolsFramework::DrawHalfDottedCircle)); + + m_secondManipulator->SetView(AzToolsFramework::CreateManipulatorViewCircle( + *m_secondManipulator, Internal::ColorSecond, manipulatorRadius, manipulatorWidth, AzToolsFramework::DrawHalfDottedCircle)); + + Refresh(idPair); + + m_sharedRotationState = AZStd::make_shared(); + + auto mouseDownCallback = [this, + idPair](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + const AZ::Quaternion normalizedStart = action.m_start.m_rotation.GetNormalized(); + m_sharedRotationState->m_axis = AZ::Vector3(normalizedStart.GetX(), normalizedStart.GetY(), normalizedStart.GetZ()); + m_sharedRotationState->m_savedOrientation = AZ::Quaternion::CreateIdentity(); + + AngleLimitsFloatPair currentValue; + EditorJointRequestBus::EventResult(currentValue, idPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + + m_sharedRotationState->m_valuePair = currentValue; + }; + + m_firstManipulator->InstallLeftMouseDownCallback(mouseDownCallback); + + m_secondManipulator->InstallLeftMouseDownCallback(mouseDownCallback); + + m_firstManipulator->InstallMouseMoveCallback( + [this, idPair](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + float angleDelta; + AZ::Quaternion manipulatorOrientation; + const float newValue = MouseMove(m_sharedRotationState, action, true, angleDelta, manipulatorOrientation); + if (newValue > m_firstMax || newValue < m_firstMin) + { + return; + } + m_firstManipulator->SetLocalOrientation(manipulatorOrientation); + const float newFirstValue = AZ::GetClamp(m_sharedRotationState->m_valuePair.first + angleDelta, m_firstMin, m_firstMax); + + EditorJointRequestBus::Event( + idPair, &EditorJointRequests::SetLinearValuePair, m_propertyName, + AngleLimitsFloatPair(newFirstValue, m_sharedRotationState->m_valuePair.second)); + }); + + m_secondManipulator->InstallMouseMoveCallback( + [this, idPair](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + float angleDelta; + AZ::Quaternion manipulatorOrientation; + const float newValue = MouseMove(m_sharedRotationState, action, false, angleDelta, manipulatorOrientation); + if (newValue > m_secondMax || newValue < m_secondMin) + { + return; // Not handling values exceeding limits + } + + m_secondManipulator->SetLocalOrientation(manipulatorOrientation); + float newSecondValue = AZ::GetClamp(m_sharedRotationState->m_valuePair.second + angleDelta, m_secondMin, m_secondMax); + + EditorJointRequestBus::Event( + idPair, &EditorJointRequests::SetLinearValuePair, m_propertyName, + AngleLimitsFloatPair(m_sharedRotationState->m_valuePair.first, newSecondValue)); + }); + + m_firstManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + m_secondManipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + + AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(idPair.GetEntityId()); + } + + void JointsSubComponentModeAnglePair::Refresh(const AZ::EntityComponentIdPair& idPair) + { + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, idPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + const AZ::Quaternion localRotation = localTransform.GetRotation(); + + AZ::Transform displacementTransform = localTransform; + AZ::Vector3 displacement = m_axis; + AZ::Vector3 displacementTranslate = localRotation.TransformVector(displacement); + displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); + m_firstManipulator->SetLocalTransform(displacementTransform); + + displacement = -m_axis; + displacementTranslate = localRotation.TransformVector(displacement); + displacementTransform.SetTranslation(localTransform.GetTranslation() + displacementTranslate); + m_secondManipulator->SetLocalTransform(displacementTransform); + } + + void JointsSubComponentModeAnglePair::Teardown(const AZ::EntityComponentIdPair& idPair) + { + AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); + m_firstManipulator->RemoveEntityComponentIdPair(idPair); + m_firstManipulator->Unregister(); + m_secondManipulator->RemoveEntityComponentIdPair(idPair); + m_secondManipulator->Unregister(); + } + + void JointsSubComponentModeAnglePair::ResetValues(const AZ::EntityComponentIdPair& idPair) + { + EditorJointRequestBus::Event(idPair, &EditorJointRequests::SetLinearValuePair, m_propertyName, m_resetValue); + + m_firstManipulator->SetLocalOrientation(AZ::Quaternion::CreateFromAxisAngle(m_axis, m_resetValue.first)); + m_secondManipulator->SetLocalOrientation(AZ::Quaternion::CreateFromAxisAngle(m_axis, m_resetValue.first)); + } + + float JointsSubComponentModeAnglePair::MouseMove( + AZStd::shared_ptr& sharedRotationState, + const AzToolsFramework::AngularManipulator::Action& action, + bool isFirstValue, + float& angleDelta, + AZ::Quaternion& manipulatorOrientation) + { + sharedRotationState->m_savedOrientation = action.m_current.m_delta.GetInverseFull(); + angleDelta = 0.0f; + AZ::Vector3 axis = m_axis; + sharedRotationState->m_savedOrientation.ConvertToAxisAngle(axis, angleDelta); + // Polarity of axis is switched by ConvertToAxisAngle call depending on direction of rotation + if (abs(m_axis.GetX() - 1.0f) < FLT_EPSILON) + { + angleDelta = AZ::RadToDeg(angleDelta) * axis.GetX(); + } + else if (abs(m_axis.GetY() - 1.0f) < FLT_EPSILON) + { + angleDelta = AZ::RadToDeg(angleDelta) * axis.GetY(); + } + else if (abs(m_axis.GetZ() - 1.0f) < FLT_EPSILON) + { + angleDelta = AZ::RadToDeg(angleDelta) * axis.GetZ(); + } + + manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; + + if (isFirstValue) + { + return sharedRotationState->m_valuePair.first + angleDelta; + } + return sharedRotationState->m_valuePair.second + angleDelta; + } + + void JointsSubComponentModeAnglePair::DisplayEntityViewport( + [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) + { + AngleLimitsFloatPair currentValue; + EditorJointRequestBus::EventResult(currentValue, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); + + const float size = 2.0f; + AZ::Vector3 axisPoint = m_axis * size * 0.5f; + + AZStd::array points = { -axisPoint, axisPoint, axisPoint, -axisPoint }; + + if (abs(m_axis.GetX() - 1.0f) < FLT_EPSILON) + { + points[2].SetZ(size); + points[3].SetZ(size); + } + else if (abs(m_axis.GetY() - 1.0f) < FLT_EPSILON) + { + points[2].SetX(size); + points[3].SetX(size); + } + else if (abs(m_axis.GetZ() - 1.0f) < FLT_EPSILON) + { + points[2].SetX(size); + points[3].SetX(size); + } + + AZ::u32 stateBefore = debugDisplay.GetState(); + debugDisplay.CullOff(); + debugDisplay.SetAlpha(Internal::Alpha); + + AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentIdPair.GetEntityId()); + + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + + debugDisplay.PushMatrix(worldTransform); + debugDisplay.PushMatrix(localTransform); + + debugDisplay.SetColor(Internal::ColorSweepArc); + + const AZ::Vector3 zeroVector = AZ::Vector3::CreateZero(); + const AZ::Vector3 posPosition = m_axis * Internal::SweepLineDisplaceFactor; + const AZ::Vector3 negPosition = -posPosition; + debugDisplay.DrawArc( + posPosition, Internal::SweepLineThickness, -currentValue.first, currentValue.first, Internal::SweepLineGranularity, -m_axis); + debugDisplay.DrawArc( + zeroVector, Internal::SweepLineThickness, -currentValue.first, currentValue.first, Internal::SweepLineGranularity, -m_axis); + debugDisplay.DrawArc( + negPosition, Internal::SweepLineThickness, -currentValue.first, currentValue.first, Internal::SweepLineGranularity, -m_axis); + debugDisplay.DrawArc( + posPosition, Internal::SweepLineThickness, 0.0f, abs(currentValue.second), Internal::SweepLineGranularity, -m_axis); + debugDisplay.DrawArc( + zeroVector, Internal::SweepLineThickness, 0.0f, abs(currentValue.second), Internal::SweepLineGranularity, -m_axis); + debugDisplay.DrawArc( + negPosition, Internal::SweepLineThickness, 0.0f, abs(currentValue.second), Internal::SweepLineGranularity, -m_axis); + + AZ::Quaternion firstRotate = AZ::Quaternion::CreateFromAxisAngle(m_axis, AZ::DegToRad(currentValue.first)); + AZ::Transform firstTM = AZ::Transform::CreateFromQuaternion(firstRotate); + debugDisplay.PushMatrix(firstTM); + debugDisplay.SetColor(Internal::ColorFirst); + debugDisplay.DrawQuad(points[0], points[1], points[2], points[3]); + debugDisplay.PopMatrix(); + + AZ::Quaternion secondRotate = AZ::Quaternion::CreateFromAxisAngle(m_axis, AZ::DegToRad(currentValue.second)); + AZ::Transform secondTM = AZ::Transform::CreateFromQuaternion(secondRotate); + debugDisplay.PushMatrix(secondTM); + debugDisplay.SetColor(Internal::ColorSecond); + debugDisplay.DrawQuad(points[0], points[1], points[2], points[3]); + debugDisplay.PopMatrix(); + + debugDisplay.SetColor(Internal::ColorDefault); + debugDisplay.DrawQuad(points[0], points[1], points[2], points[3]); + + debugDisplay.PopMatrix(); // pop local transform + debugDisplay.PopMatrix(); // pop global transform + debugDisplay.SetState(stateBefore); + + // reposition and reorientate manipulators + Refresh(m_entityComponentIdPair); + } + +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.h new file mode 100644 index 0000000000..b50a16bf77 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + class Vector3; +} // namespace AZ + +namespace PhysX +{ + namespace AngleComponentModes + { + struct SharedRotationState; + } // namespace AngleComponentModes + + class JointsSubComponentModeAnglePair final + : public PhysXSubComponentModeBase + , private AzFramework::EntityDebugDisplayEventBus::Handler + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsSubComponentModeAnglePair(const AZStd::string& propertyName, const AZ::Vector3& axis, float max, float min); + + // PhysXSubComponentModeBase ... + void Setup(const AZ::EntityComponentIdPair& idPair) override; + void Refresh(const AZ::EntityComponentIdPair& idPair) override; + void Teardown(const AZ::EntityComponentIdPair& idPair) override; + void ResetValues(const AZ::EntityComponentIdPair& idPair) override; + + private: + float MouseMove( + AZStd::shared_ptr& sharedRotationState, + const AzToolsFramework::AngularManipulator::Action& action, + bool isFirstValue, + float& angleDelta, + AZ::Quaternion& manipulatorOrientation); + + // AzFramework::EntityDebugDisplayEventBus + void DisplayEntityViewport(const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) override; + + AZ::Vector3 m_axis = AZ::Vector3::CreateAxisX(); + float m_firstMax = AZStd::numeric_limits::max(); + float m_firstMin = -AZStd::numeric_limits::max(); + float m_secondMax = AZStd::numeric_limits::max(); + float m_secondMin = -AZStd::numeric_limits::max(); + AZStd::shared_ptr m_sharedRotationState; + AngleLimitsFloatPair m_resetValue; + AZ::EntityComponentIdPair m_entityComponentIdPair; + + AZStd::string m_propertyName; + AZStd::shared_ptr m_firstManipulator; + AZStd::shared_ptr m_secondManipulator; + }; +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.cpp new file mode 100644 index 0000000000..ec073b49ef --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeLinearFloat, AZ::SystemAllocator, 0); + + JointsSubComponentModeLinearFloat::JointsSubComponentModeLinearFloat( + const AZStd::string& propertyName, float exponent, float max, float min) + : m_propertyName(propertyName) + , m_exponent(exponent) + , m_inverseExponent(1.0f / exponent) + , m_max(max) + , m_min(min) + { + + } + + void JointsSubComponentModeLinearFloat::Setup(const AZ::EntityComponentIdPair& idPair) + { + EditorJointRequestBus::EventResult(m_resetValue, idPair, &EditorJointRequests::GetLinearValue, m_propertyName); + + const AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(idPair.GetEntityId()); + + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, idPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + + m_manipulator = AzToolsFramework::LinearManipulator::MakeShared(worldTransform); + m_manipulator->AddEntityComponentIdPair(idPair); + m_manipulator->SetAxis(AZ::Vector3::CreateAxisX()); + m_manipulator->SetLocalTransform(localTransform); + + Refresh(idPair); + + const AZ::Color manipulatorColor(0.3f, 0.3f, 0.3f, 1.0f); + const float manipulatorSize = 0.05f; + + AzToolsFramework::ManipulatorViews views; + views.emplace_back(AzToolsFramework::CreateManipulatorViewQuadBillboard(manipulatorColor, manipulatorSize)); + m_manipulator->SetViews(AZStd::move(views)); + + struct SharedState + { + float m_startingValue = 0.0f; + }; + auto sharedState = AZStd::make_shared(); + + m_manipulator->InstallLeftMouseDownCallback( + [this, sharedState, idPair]([[maybe_unused]]const AzToolsFramework::LinearManipulator::Action& action) mutable + { + float currentValue = 0.0f; + + EditorJointRequestBus::EventResult(currentValue, idPair, &EditorJointRequests::GetLinearValue, m_propertyName); + sharedState->m_startingValue = currentValue; + }); + + m_manipulator->InstallMouseMoveCallback( + [this, sharedState, idPair](const AzToolsFramework::LinearManipulator::Action& action) + { + const float axisDisplacement = action.LocalPositionOffset().Dot(action.m_fixed.m_axis); + + float newValue = AZ::GetClamp(sharedState->m_startingValue + DisplacementToDeltaValue(axisDisplacement), m_min, m_max); + EditorJointRequestBus::Event(idPair, &EditorJointRequests::SetLinearValue, m_propertyName, newValue); + + const AZ::Vector3 localPosition = action.LocalPosition().GetMax(AZ::Vector3(0.01f, 0.0f, 0.0f)); + m_manipulator->SetLocalTransform(AZ::Transform::CreateTranslation(localPosition)); + }); + + m_manipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + } + + void JointsSubComponentModeLinearFloat::Refresh(const AZ::EntityComponentIdPair& idPair) + { + float currentValue = 0.0f; + EditorJointRequestBus::EventResult(currentValue, idPair, &EditorJointRequests::GetLinearValue, m_propertyName); + + m_manipulator->SetLocalTransform(AZ::Transform::CreateTranslation(AZ::Vector3::CreateAxisX() * ValueToDisplacement(currentValue))); + } + + void JointsSubComponentModeLinearFloat::Teardown(const AZ::EntityComponentIdPair& idPair) + { + m_manipulator->RemoveEntityComponentIdPair(idPair); + m_manipulator->Unregister(); + m_manipulator.reset(); + } + + void JointsSubComponentModeLinearFloat::ResetValues(const AZ::EntityComponentIdPair& idPair) + { + EditorJointRequestBus::Event(idPair, &EditorJointRequests::SetLinearValue, m_propertyName, m_resetValue); + m_manipulator->SetLocalTransform(AZ::Transform::CreateTranslation(AZ::Vector3::CreateAxisX() * ValueToDisplacement(m_resetValue))); + } + + float JointsSubComponentModeLinearFloat::DisplacementToDeltaValue(float displacement) const + { + if (displacement > 0.0f) + { + return AZStd::pow(displacement, m_exponent); + } + else if (displacement < 0.0f) + { + return -AZStd::pow(fabsf(displacement), m_exponent); + } + else + { + return 0.0f; + } + } + + float JointsSubComponentModeLinearFloat::ValueToDisplacement(float value) const + { + return AZStd::pow(value, m_inverseExponent); + } + +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.h new file mode 100644 index 0000000000..d65e59d081 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace AZ +{ + class Vector3; +} // namespace AZ + +namespace AzToolsFramework +{ + class LinearManipulator; +} // namespace AzToolsFramework + +namespace PhysX +{ + class JointsSubComponentModeLinearFloat final + : public PhysXSubComponentModeBase + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsSubComponentModeLinearFloat( + const AZStd::string& propertyName, float exponent, float max, float min); + + // PhysXSubComponentModeBase ... + void Setup(const AZ::EntityComponentIdPair& idPair) override; + void Refresh(const AZ::EntityComponentIdPair& idPair) override; + void Teardown(const AZ::EntityComponentIdPair& idPair) override; + void ResetValues(const AZ::EntityComponentIdPair& idPair) override; + + private: + float DisplacementToDeltaValue(float displacement) const; + float ValueToDisplacement(float value) const; + + float m_exponent = 1.0f; + float m_inverseExponent = 1.0f; + float m_max = AZStd::numeric_limits::max(); + float m_min = -AZStd::numeric_limits::max(); + float m_resetValue = 0.0f; + AZStd::string m_propertyName; + AZStd::shared_ptr m_manipulator; + }; +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.cpp new file mode 100644 index 0000000000..2bca1700e5 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeRotation, AZ::SystemAllocator, 0); + + void JointsSubComponentModeRotation::Setup(const AZ::EntityComponentIdPair& idPair) + { + AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(idPair.GetEntityId()); + + const AZ::Quaternion worldRotation = worldTransform.GetRotation(); + + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, idPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + + EditorJointRequestBus::EventResult( + m_resetValue, idPair, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation); + + const AZStd::array axes = { AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ() }; + + const AZStd::array colors = { AZ::Color(1.0f, 0.0f, 0.0f, 1.0f), AZ::Color(0.0f, 1.0f, 0.0f, 1.0f), + AZ::Color(0.0f, 0.0f, 1.0f, 1.0f) }; + + for (AZ::u32 i = 0; i < 3; ++i) + { + m_manipulators[i] = AzToolsFramework::AngularManipulator::MakeShared(worldTransform); + m_manipulators[i]->AddEntityComponentIdPair(idPair); + m_manipulators[i]->SetAxis(axes[i]); + m_manipulators[i]->SetLocalTransform(localTransform); + const float manipulatorRadius = 2.0f; + m_manipulators[i]->SetView(AzToolsFramework::CreateManipulatorViewCircle( + *m_manipulators[i], colors[i], manipulatorRadius, + AzToolsFramework::ManipulatorCicleBoundWidth(), AzToolsFramework::DrawHalfDottedCircle)); + + m_manipulators[i]->Register(AzToolsFramework::g_mainManipulatorManagerId); + } + InstallManipulatorMouseCallbacks(idPair); + } + + void JointsSubComponentModeRotation::Refresh(const AZ::EntityComponentIdPair& idPair) + { + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, idPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + + for (auto rotationManipulator : m_manipulators) + { + rotationManipulator->SetLocalTransform(localTransform); + } + } + + void JointsSubComponentModeRotation::Teardown(const AZ::EntityComponentIdPair& idPair) + { + for (auto rotationManipulator : m_manipulators) + { + rotationManipulator->RemoveEntityComponentIdPair(idPair); + rotationManipulator->Unregister(); + } + } + + void JointsSubComponentModeRotation::ResetValues(const AZ::EntityComponentIdPair& idPair) + { + EditorJointRequestBus::Event( + idPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation, m_resetValue); + + const AZ::Quaternion reset = AZ::Quaternion::CreateFromEulerAnglesDegrees(m_resetValue); + for (auto manipulator : m_manipulators) + { + manipulator->SetLocalOrientation(reset); + } + } + + void JointsSubComponentModeRotation::InstallManipulatorMouseCallbacks(const AZ::EntityComponentIdPair& idPair) + { + struct SharedState + { + AZ::Transform m_startTM; + }; + auto sharedState = AZStd::make_shared(); + + auto mouseDownRotateXCallback = + [sharedState, idPair]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + EditorJointRequestBus::EventResult( + sharedState->m_startTM, idPair, &PhysX::EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + }; + + for (AZ::u32 index = 0; index < 3; ++index) + { + m_manipulators[index]->InstallLeftMouseDownCallback(mouseDownRotateXCallback); + + m_manipulators[index]->InstallMouseMoveCallback( + [this, index, sharedState, idPair](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + { + const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; + + AZ::Transform newTransform = AZ::Transform::CreateIdentity(); + newTransform = sharedState->m_startTM * AZ::Transform::CreateFromQuaternion(action.m_current.m_delta); + + EditorJointRequestBus::Event( + idPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation, + newTransform.GetRotation().GetEulerDegrees()); + + m_manipulators[index]->SetLocalOrientation(manipulatorOrientation); + }); + } + } +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.h new file mode 100644 index 0000000000..a9a1888dd0 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + class AngularManipulator; +} + +namespace PhysX +{ + class JointsSubComponentModeRotation final + : public PhysXSubComponentModeBase + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsSubComponentModeRotation() = default; + + // PhysXSubComponentModeBase ... + void Setup(const AZ::EntityComponentIdPair& idPair) override; + void Refresh(const AZ::EntityComponentIdPair& idPair) override; + void Teardown(const AZ::EntityComponentIdPair& idPair) override; + void ResetValues(const AZ::EntityComponentIdPair& idPair) override; + + private: + void InstallManipulatorMouseCallbacks(const AZ::EntityComponentIdPair& idPair); + + AZ::Vector3 m_resetValue = AZ::Vector3::CreateZero(); + AZStd::array, 3> m_manipulators; + }; +} diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnap.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.cpp similarity index 71% rename from Gems/PhysX/Code/Editor/EditorSubComponentModeSnap.cpp rename to Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.cpp index 5220b2e274..0f3467eb54 100644 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnap.cpp +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.cpp @@ -1,4 +1,3 @@ - /* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. @@ -6,49 +5,67 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include -#include +#include + +#include #include +#include #include -#include -#include +#include #include #include namespace PhysX { - EditorSubComponentModeSnap::EditorSubComponentModeSnap( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name) - : EditorSubComponentModeBase(entityComponentIdPair, componentType, name) + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeSnap, AZ::SystemAllocator, 0); + + void JointsSubComponentModeSnap::Setup(const AZ::EntityComponentIdPair& idPair) { + m_entityComponentId = idPair; + AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); AZ::Transform localTransform = AZ::Transform::CreateIdentity(); EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); + localTransform, m_entityComponentId, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); m_manipulator = AzToolsFramework::LinearManipulator::MakeShared(worldTransform); m_manipulator->AddEntityComponentIdPair(m_entityComponentId); m_manipulator->SetAxis(AZ::Vector3::CreateAxisX()); m_manipulator->SetLocalTransform(localTransform); - Refresh(); + Refresh(idPair); const AZ::Color manipulatorColor(0.3f, 0.3f, 0.3f, 1.0f); const float manipulatorSize = 0.05f; AzToolsFramework::ManipulatorViews views; - views.emplace_back(AzToolsFramework::CreateManipulatorViewQuadBillboard(manipulatorColor - , manipulatorSize)); + views.emplace_back(AzToolsFramework::CreateManipulatorViewQuadBillboard(manipulatorColor, manipulatorSize)); m_manipulator->SetViews(AZStd::move(views)); + + m_manipulator->Register(AzToolsFramework::g_mainManipulatorManagerId); + AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(m_entityComponentId.GetEntityId()); } - void EditorSubComponentModeSnap::HandleMouseInteraction( - const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) + void JointsSubComponentModeSnap::Refresh(const AZ::EntityComponentIdPair& idPair) + { + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, idPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + + m_manipulator->SetLocalTransform(localTransform); + } + + void JointsSubComponentModeSnap::Teardown(const AZ::EntityComponentIdPair& idPair) + { + AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); + + m_manipulator->RemoveEntityComponentIdPair(idPair); + m_manipulator->Unregister(); + m_manipulator.reset(); + } + + void JointsSubComponentModeSnap::HandleMouseInteraction(const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) { if (mouseInteraction.m_mouseEvent == AzToolsFramework::ViewportInteraction::MouseEvent::Move) { @@ -63,25 +80,36 @@ namespace PhysX const AZ::Quaternion worldRotateInv = worldRotate.GetInverseFull(); m_manipulator->SetLocalPosition(worldRotateInv.TransformVector(m_pickedPosition - worldTransform.GetTranslation())); - m_manipulator->SetBoundsDirty(); } } } - void EditorSubComponentModeSnap::Refresh() + AZStd::string JointsSubComponentModeSnap::GetPickedEntityName() + { + AZStd::string pickedEntityName; + if (m_pickedEntity.IsValid()) + { + AZ::ComponentApplicationBus::BroadcastResult( + pickedEntityName, &AZ::ComponentApplicationRequests::GetEntityName, m_pickedEntity); + } + return pickedEntityName; + } + + AZ::Vector3 JointsSubComponentModeSnap::GetPosition() const { + AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); + + AZ::Quaternion worldRotate = worldTransform.GetRotation(); + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); + localTransform, m_entityComponentId, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); - m_manipulator->SetLocalTransform(localTransform); + return worldTransform.GetTranslation() + worldRotate.TransformVector(localTransform.GetTranslation()); } - void EditorSubComponentModeSnap::DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) + void JointsSubComponentModeSnap::DisplayEntityViewport( + const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) { AZ::u32 stateBefore = debugDisplay.GetState(); @@ -89,11 +117,9 @@ namespace PhysX AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - AZ::Transform localTransform = AZ::Transform::CreateIdentity();; + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); + localTransform, m_entityComponentId, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); debugDisplay.PushMatrix(worldTransform); debugDisplay.PushMatrix(localTransform); @@ -104,9 +130,7 @@ namespace PhysX AngleLimitsFloatPair yzSwingAngleLimits; EditorJointRequestBus::EventResult( - yzSwingAngleLimits, m_entityComponentId - , &EditorJointRequests::GetLinearValuePair - , PhysX::EditorJointComponentMode::s_parameterSwingLimit); + yzSwingAngleLimits, m_entityComponentId, &EditorJointRequests::GetLinearValuePair, JointsComponentModeCommon::ParamaterNames::SwingLimit); const AZ::u32 numEllipseSamples = 16; AZStd::array ellipseSamples; @@ -154,8 +178,8 @@ namespace PhysX debugDisplay.DrawLine(ellipseSamples[numEllipseSamples * 3 / 4], ellipseSamples[numEllipseSamples / 4]); debugDisplay.DrawLine(AZ::Vector3(0.0f, 0.0f, 0.0f), AZ::Vector3(coneHeight, 0.0f, 0.0f)); - debugDisplay.PopMatrix();//pop local transform - debugDisplay.PopMatrix();//pop world transform + debugDisplay.PopMatrix(); // pop local transform + debugDisplay.PopMatrix(); // pop world transform // draw line from joint to mouse-over entity if (m_pickedEntity.IsValid()) @@ -173,40 +197,9 @@ namespace PhysX debugDisplay.DrawWireBox(m_pickedEntityAabb.GetMin(), m_pickedEntityAabb.GetMax()); // draw something, e.g. an icon, to indicate type of snapping - DisplaySpecificSnapType(viewportInfo, - debugDisplay, - position, - directionNorm, - directionLength); + DisplaySpecificSnapType(viewportInfo, debugDisplay, position, directionNorm, directionLength); } debugDisplay.SetState(stateBefore); } - - AZStd::string EditorSubComponentModeSnap::GetPickedEntityName() - { - AZStd::string pickedEntityName; - if (m_pickedEntity.IsValid()) - { - AZ::ComponentApplicationBus::BroadcastResult(pickedEntityName, - &AZ::ComponentApplicationRequests::GetEntityName, - m_pickedEntity); - } - return pickedEntityName; - } - - AZ::Vector3 EditorSubComponentModeSnap::GetPosition() const - { - AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(m_entityComponentId.GetEntityId()); - - AZ::Quaternion worldRotate = worldTransform.GetRotation(); - - AZ::Transform localTransform = AZ::Transform::CreateIdentity(); - EditorJointRequestBus::EventResult( - localTransform, m_entityComponentId - , &EditorJointRequests::GetTransformValue - , PhysX::EditorJointComponentMode::s_parameterTransform); - - return worldTransform.GetTranslation() + worldRotate.TransformVector(localTransform.GetTranslation()); - } } // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnap.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.h similarity index 51% rename from Gems/PhysX/Code/Editor/EditorSubComponentModeSnap.h rename to Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.h index 585d46c2b6..843fffd4c8 100644 --- a/Gems/PhysX/Code/Editor/EditorSubComponentModeSnap.h +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.h @@ -1,4 +1,3 @@ - /* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. @@ -6,12 +5,16 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + #pragma once +#include +#include +#include #include -#include #include +#include namespace AzToolsFramework { @@ -20,48 +23,43 @@ namespace AzToolsFramework namespace PhysX { - /// This sub-component mode uses EditorViewportEntityPicker to get the position of an entity that the mouse is hovering over. - /// Classes inheriting from this class can use the mouse-over entity position to perform custom actions. - class EditorSubComponentModeSnap - : public PhysX::EditorSubComponentModeBase + class JointsSubComponentModeSnap + : public PhysXSubComponentModeBase , protected AzFramework::EntityDebugDisplayEventBus::Handler { public: - EditorSubComponentModeSnap( - const AZ::EntityComponentIdPair& entityComponentIdPair - , const AZ::Uuid& componentType - , const AZStd::string& name); - virtual ~EditorSubComponentModeSnap() = default; + AZ_CLASS_ALLOCATOR_DECL; - // PhysX::EditorSubComponentModeBase - void HandleMouseInteraction( - const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) override; - void Refresh() override; + JointsSubComponentModeSnap() = default; + + // PhysXSubComponentModeBase ... + virtual void Setup(const AZ::EntityComponentIdPair& idPair) override; + virtual void Refresh(const AZ::EntityComponentIdPair& idPair) override; + virtual void Teardown(const AZ::EntityComponentIdPair& idPair) override; + void HandleMouseInteraction(const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) override; protected: + AZStd::string GetPickedEntityName(); + AZ::Vector3 GetPosition() const; + // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; + void DisplayEntityViewport(const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) override; - /// Override to draw specific snap type display + //! Override to draw specific snap type display virtual void DisplaySpecificSnapType( [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, [[maybe_unused]] AzFramework::DebugDisplayRequests& debugDisplay, [[maybe_unused]] const AZ::Vector3& jointPosition, [[maybe_unused]] const AZ::Vector3& snapDirection, - [[maybe_unused]] float snapLength) {} - - virtual void InitMouseDownCallBack() = 0; - - AZStd::string GetPickedEntityName(); - AZ::Vector3 GetPosition() const; - - AZStd::shared_ptr m_manipulator; + [[maybe_unused]] float snapLength) + { + } EditorViewportEntityPicker m_picker; AZ::EntityId m_pickedEntity; AZ::Aabb m_pickedEntityAabb = AZ::Aabb::CreateNull(); AZ::Vector3 m_pickedPosition; + AZ::EntityComponentIdPair m_entityComponentId; + AZStd::shared_ptr m_manipulator; }; -} // namespace PhysX +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.cpp new file mode 100644 index 0000000000..809ccd97cb --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeSnapPosition, AZ::SystemAllocator, 0); + + void JointsSubComponentModeSnapPosition::Setup(const AZ::EntityComponentIdPair& idPair) + { + JointsSubComponentModeSnap::Setup(idPair); + + PhysX::EditorJointRequestBus::EventResult( + m_resetPosition, m_entityComponentId, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); + + PhysX::EditorJointRequestBus::EventResult( + m_resetLeadEntity, m_entityComponentId, &PhysX::EditorJointRequests::GetEntityIdValue, + JointsComponentModeCommon::ParamaterNames::LeadEntity); + + m_manipulator->InstallLeftMouseDownCallback( + [this](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable + { + if (!m_pickedEntity.IsValid()) + { + return; + } + + const AZ::Vector3 newLocalPosition = PhysX::Utils::ComputeJointLocalTransform( + PhysX::Utils::GetEntityWorldTransformWithScale(m_pickedEntity), + PhysX::Utils::GetEntityWorldTransformWithScale(m_entityComponentId.GetEntityId())) + .GetTranslation(); + + PhysX::EditorJointRequestBus::Event( + m_entityComponentId, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, + newLocalPosition); + + const bool selectedEntityIsNotJointEntity = m_pickedEntity != m_entityComponentId.GetEntityId(); + + AZ_Error( + "EditorSubComponentModeSnapPosition", selectedEntityIsNotJointEntity, + "Joint's lead entity cannot be the same as the entity in which the joint resides. Select lead entity on snap failed."); + + if (selectedEntityIsNotJointEntity) + { + PhysX::EditorJointRequestBus::Event( + m_entityComponentId, &PhysX::EditorJointRequests::SetEntityIdValue, JointsComponentModeCommon::ParamaterNames::LeadEntity, + m_pickedEntity); + } + }); + } + + void JointsSubComponentModeSnapPosition::ResetValues([[maybe_unused]]const AZ::EntityComponentIdPair& idPair) + { + PhysX::EditorJointRequestBus::Event( + m_entityComponentId, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, m_resetPosition); + PhysX::EditorJointRequestBus::Event( + m_entityComponentId, &PhysX::EditorJointRequests::SetEntityIdValue, JointsComponentModeCommon::ParamaterNames::LeadEntity, m_resetLeadEntity); + } + + void JointsSubComponentModeSnapPosition::DisplaySpecificSnapType( + [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, + AzFramework::DebugDisplayRequests& debugDisplay, + const AZ::Vector3& jointPosition, + const AZ::Vector3& snapDirection, + float snapLength) + { + const float arrowLength = 1.0f; + const float iconGap = 1.0f; + const AZ::Vector3 iconPosition = jointPosition + (snapDirection * (snapLength + arrowLength + iconGap)); + + debugDisplay.SetColor(AZ::Colors::Red); + debugDisplay.DrawArrow(iconPosition, iconPosition + AZ::Vector3(arrowLength, 0.0f, 0.0f)); + debugDisplay.SetColor(AZ::Colors::Green); + debugDisplay.DrawArrow(iconPosition, iconPosition + AZ::Vector3(0.2f, arrowLength, 0.2f)); + debugDisplay.SetColor(AZ::Colors::Blue); + debugDisplay.DrawArrow(iconPosition, iconPosition + AZ::Vector3(0.0f, 0.0f, arrowLength)); + } + +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.h new file mode 100644 index 0000000000..c762db54d2 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace PhysX +{ + class JointsSubComponentModeSnapPosition final + : public JointsSubComponentModeSnap + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsSubComponentModeSnapPosition() = default; + + // JointsSubComponentModeSnap ... + void Setup(const AZ::EntityComponentIdPair& idPair) override; + void ResetValues(const AZ::EntityComponentIdPair& idPair) override; + + protected: + // JointsSubComponentModeSnap ... + void DisplaySpecificSnapType( + const AzFramework::ViewportInfo& viewportInfo, + AzFramework::DebugDisplayRequests& debugDisplay, + const AZ::Vector3& jointPosition, + const AZ::Vector3& snapDirection, + float snapLength) override; + + private: + AZ::Vector3 m_resetPosition; + AZ::EntityId m_resetLeadEntity; + }; +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.cpp new file mode 100644 index 0000000000..7d48bf7772 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.cpp @@ -0,0 +1,117 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeSnapRotation, AZ::SystemAllocator, 0); + + void JointsSubComponentModeSnapRotation::Setup(const AZ::EntityComponentIdPair& idPair) + { + JointsSubComponentModeSnap::Setup(idPair); + + PhysX::EditorJointRequestBus::EventResult( + m_resetRotation, m_entityComponentId, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation); + + m_manipulator->InstallLeftMouseDownCallback( + [this]([[maybe_unused]] const AzToolsFramework::LinearManipulator::Action& action) mutable + { + if (!m_pickedEntity.IsValid()) + { + return; + } + + AZ::EntityId leadEntityId; + PhysX::EditorJointRequestBus::EventResult( + leadEntityId, m_entityComponentId, &PhysX::EditorJointRequests::GetEntityIdValue, + JointsComponentModeCommon::ParamaterNames::LeadEntity); + + if (leadEntityId.IsValid() && m_pickedEntity == leadEntityId) + { + AZ_Warning( + "EditorsubComponentModeSnapRotation", false, + "The entity %s is the lead of the joint. Please snap rotation (or orientation) of joint to another entity that is " + "not the lead entity.", + GetPickedEntityName().c_str()); + return; + } + + AZ::Transform worldTransform = AZ::Transform::CreateIdentity(); + AZ::TransformBus::EventResult(worldTransform, m_entityComponentId.GetEntityId(), &AZ::TransformInterface::GetWorldTM); + worldTransform.ExtractUniformScale(); + + AZ::Transform localTransform = AZ::Transform::CreateIdentity(); + EditorJointRequestBus::EventResult( + localTransform, m_entityComponentId, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + + AZ::Transform pickedEntityTransform = AZ::Transform::CreateIdentity(); + AZ::TransformBus::EventResult(pickedEntityTransform, m_pickedEntity, &AZ::TransformInterface::GetWorldTM); + + const AZ::Transform worldTransformInv = worldTransform.GetInverse(); + const AZ::Vector3 pickedLocalPosition = + worldTransformInv.TransformVector(pickedEntityTransform.GetTranslation()) - localTransform.GetTranslation(); + + if (AZStd::abs(pickedLocalPosition.GetLength()) < FLT_EPSILON) + { + AZ_Warning( + "EditorsubComponentModeSnapRotation", false, + "The entity %s is too close to the joint position. Please snap rotation to an entity that is not at the position " + "of the joint.", + GetPickedEntityName().c_str()); + return; + } + + const AZ::Vector3 targetDirection = pickedLocalPosition.GetNormalized(); + const AZ::Vector3 sourceDirection = AZ::Vector3::CreateAxisX(); + const AZ::Quaternion newLocalRotation = AZ::Quaternion::CreateShortestArc(sourceDirection, targetDirection); + + PhysX::EditorJointRequestBus::Event( + m_entityComponentId, &PhysX::EditorJointRequests::SetVector3Value, + JointsComponentModeCommon::ParamaterNames::Rotation // using rotation parameter name to set the local rotation value + , + newLocalRotation.GetEulerDegrees()); + }); + } + + void JointsSubComponentModeSnapRotation::ResetValues([[maybe_unused]] const AZ::EntityComponentIdPair& idPair) + { + PhysX::EditorJointRequestBus::Event( + m_entityComponentId, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation, m_resetRotation); + } + + void JointsSubComponentModeSnapRotation::DisplaySpecificSnapType( + [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, + AzFramework::DebugDisplayRequests& debugDisplay, + const AZ::Vector3& jointPosition, + const AZ::Vector3& snapDirection, + float snapLength) + { + const float circleRadius = 0.5f; + const float iconGap = 1.0f; + + const AZ::Vector3 iconPosition = jointPosition + (snapDirection * (snapLength + circleRadius * 2.0f + iconGap)); + + debugDisplay.SetColor(AZ::Colors::Red); + debugDisplay.DrawCircle(iconPosition, circleRadius, 0); + debugDisplay.SetColor(AZ::Colors::Green); + debugDisplay.DrawCircle(iconPosition, circleRadius, 1); + debugDisplay.SetColor(AZ::Colors::Blue); + debugDisplay.DrawCircle(iconPosition, circleRadius, 2); + } + +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.h new file mode 100644 index 0000000000..d8aa613684 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace PhysX +{ + class JointsSubComponentModeSnapRotation final + : public JointsSubComponentModeSnap + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsSubComponentModeSnapRotation() = default; + + // JointsSubComponentModeSnap ... + void Setup(const AZ::EntityComponentIdPair& idPair) override; + void ResetValues(const AZ::EntityComponentIdPair& idPair) override; + + protected: + // JointsSubComponentModeSnap ... + void DisplaySpecificSnapType( + const AzFramework::ViewportInfo& viewportInfo, + AzFramework::DebugDisplayRequests& debugDisplay, + const AZ::Vector3& jointPosition, + const AZ::Vector3& snapDirection, + float snapLength) override; + + private: + AZ::Vector3 m_resetRotation; + }; +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.cpp new file mode 100644 index 0000000000..becb79a1d9 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include + +namespace PhysX +{ + AZ_CLASS_ALLOCATOR_IMPL(JointsSubComponentModeTranslation, AZ::SystemAllocator, 0); + + JointsSubComponentModeTranslation::JointsSubComponentModeTranslation() + : m_manipulator( + AzToolsFramework::TranslationManipulators::Dimensions::Three, AZ::Transform::Identity(), AZ::Vector3::CreateOne()) + { + } + + void JointsSubComponentModeTranslation::Setup(const AZ::EntityComponentIdPair& idPair) + { + AZ::Transform worldTransform = PhysX::Utils::GetEntityWorldTransformWithoutScale(idPair.GetEntityId()); + + EditorJointRequestBus::EventResult( + m_resetValue, idPair, &EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); + + m_manipulator.SetSpace(worldTransform); + m_manipulator.SetLocalPosition(m_resetValue); + + m_manipulator.AddEntityComponentIdPair(idPair); + m_manipulator.Register(AzToolsFramework::g_mainManipulatorManagerId); + AzToolsFramework::ConfigureTranslationManipulatorAppearance3d(&m_manipulator); + m_manipulator.InstallLinearManipulatorMouseMoveCallback( + [this, idPair](const AzToolsFramework::LinearManipulator::Action& action) + { + OnManipulatorMoved(action.LocalPosition(), idPair); + }); + + m_manipulator.InstallPlanarManipulatorMouseMoveCallback( + [this, idPair](const AzToolsFramework::PlanarManipulator::Action& action) + { + OnManipulatorMoved(action.LocalPosition(), idPair); + }); + + m_manipulator.InstallSurfaceManipulatorMouseMoveCallback( + [this, idPair](const AzToolsFramework::SurfaceManipulator::Action& action) + { + OnManipulatorMoved(action.LocalPosition(), idPair); + }); + } + + void JointsSubComponentModeTranslation::Refresh(const AZ::EntityComponentIdPair& idPair) + { + AZ::Vector3 localTranslation; + EditorJointRequestBus::EventResult( + localTranslation, idPair, &EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); + m_manipulator.SetLocalPosition(localTranslation); + } + + void JointsSubComponentModeTranslation::Teardown(const AZ::EntityComponentIdPair& idPair) + { + m_manipulator.RemoveEntityComponentIdPair(idPair); + m_manipulator.Unregister(); + } + + void JointsSubComponentModeTranslation::ResetValues(const AZ::EntityComponentIdPair& idPair) + { + PhysX::EditorJointRequestBus::Event( + idPair, &EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, m_resetValue); + m_manipulator.SetLocalPosition(m_resetValue); + } + + void JointsSubComponentModeTranslation::OnManipulatorMoved(const AZ::Vector3& position, const AZ::EntityComponentIdPair& idPair) + { + m_manipulator.SetLocalPosition(position); + PhysX::EditorJointRequestBus::Event( + idPair, &EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, position); + } + +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.h new file mode 100644 index 0000000000..2e25556889 --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace AZ +{ + class Vector3; +} // namespace AZ + +namespace PhysX +{ + class JointsSubComponentModeTranslation final + : public PhysXSubComponentModeBase + { + public: + AZ_CLASS_ALLOCATOR_DECL; + + JointsSubComponentModeTranslation(); + + // PhysXSubComponentModeBase ... + void Setup(const AZ::EntityComponentIdPair& idPair) override; + void Refresh(const AZ::EntityComponentIdPair& idPair) override; + void Teardown(const AZ::EntityComponentIdPair& idPair) override; + void ResetValues(const AZ::EntityComponentIdPair& idPair) override; + + private: + void OnManipulatorMoved(const AZ::Vector3& position, const AZ::EntityComponentIdPair& idPair); + + AZ::Vector3 m_resetValue = AZ::Vector3::CreateZero(); + AzToolsFramework::TranslationManipulators m_manipulator; + }; +} diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/PhysXSubComponentModeBase.h b/Gems/PhysX/Code/Editor/Source/ComponentModes/PhysXSubComponentModeBase.h new file mode 100644 index 0000000000..0478d6e1ee --- /dev/null +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/PhysXSubComponentModeBase.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +namespace AZ +{ + class EntityComponentIdPair; +} // namespace AZ + +namespace AzToolsFramework::ViewportInteraction +{ + struct MouseInteractionEvent; +} // namespace AzToolsFramework::ViewportInteraction + +namespace PhysX +{ + class PhysXSubComponentModeBase + { + public: + virtual ~PhysXSubComponentModeBase() = default; + + //! Called when the mode is entered to initialize the mode. + //! @param idPair The entity/component id pair. + virtual void Setup(const AZ::EntityComponentIdPair& idPair) = 0; + + //! Called when the mode needs to refresh it's values. + //! @param idPair The entity/component id pair. + virtual void Refresh(const AZ::EntityComponentIdPair& idPair) = 0; + + //! Called when the mode exits to perform cleanup. + //! @param idPair The entity/component id pair. + virtual void Teardown(const AZ::EntityComponentIdPair& idPair) = 0; + + //! Called when reset hot key is pressed. + //! Should reset values in the sub component mode to sensible defaults. + //! @param idPair The entity/component id pair. + virtual void ResetValues(const AZ::EntityComponentIdPair& idPair) = 0; + + //! Additional mouse handling by sub-component mode. Does not absorb mouse event. + virtual void HandleMouseInteraction( + [[maybe_unused]] const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteraction) {}; + }; +} // namespace PhysX diff --git a/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp b/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp index f65768cec9..a5b6430591 100644 --- a/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp +++ b/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp @@ -8,7 +8,9 @@ #include "EditorSystemComponent.h" #include +#include #include +#include #include #include #include @@ -23,7 +25,7 @@ namespace PhysX { - constexpr const char* DefaultAssetFilePath = "Physics/SurfaceTypeMaterialLibrary"; + constexpr const char* DefaultAssetFilePath = "Assets/Physics/SurfaceTypeMaterialLibrary"; constexpr const char* TemplateAssetFilename = "PhysX/TemplateMaterialLibrary"; static AZStd::optional> GetMaterialLibraryTemplate() @@ -67,7 +69,7 @@ namespace PhysX assetId, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, relativePath.c_str(), assetType, true /*autoRegisterIfNotFound*/); AZ::Data::Asset newAsset = - AZ::Data::AssetManager::Instance().GetAsset(assetId, assetType, AZ::Data::AssetLoadBehavior::Default); + AZ::Data::AssetManager::Instance().FindOrCreateAsset(assetId, assetType, AZ::Data::AssetLoadBehavior::Default); if (auto* newMaterialLibraryData = azrtti_cast(newAsset.GetData())) { @@ -138,6 +140,14 @@ namespace PhysX if (auto retrievedMaterialLibrary = RetrieveDefaultMaterialLibrary()) { physxSystem->UpdateMaterialLibrary(retrievedMaterialLibrary.value()); + + // After setting the default material library, save the physx configuration. + auto saveCallback = []([[maybe_unused]] const PhysXSystemConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the PhysX configuration after setting default material library."); + }; + physxSystem->GetSettingsRegistryManager().SaveSystemConfiguration(physxSystem->GetPhysXConfiguration(), saveCallback); } } } @@ -236,11 +246,15 @@ namespace PhysX if (!resultAssetId.IsValid()) { // No file for the default material library, create it - const char* assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectsourceassets@"); - AZStd::string fullPath; - AzFramework::StringFunc::Path::ConstructFull(assetRoot, DefaultAssetFilePath, assetExtension.c_str(), fullPath); + AZ::IO::Path fullPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + settingsRegistry->Get(fullPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); + } + fullPath /= DefaultAssetFilePath; + fullPath.ReplaceExtension(AZ::IO::PathView(assetExtension)); - if (auto materialLibraryOpt = CreateMaterialLibrary(fullPath, relativePath)) + if (auto materialLibraryOpt = CreateMaterialLibrary(fullPath.Native(), relativePath)) { return materialLibraryOpt; } diff --git a/Gems/PhysX/Code/Include/PhysX/EditorJointBus.h b/Gems/PhysX/Code/Include/PhysX/EditorJointBus.h index e62a8b7e15..20145f1f76 100644 --- a/Gems/PhysX/Code/Include/PhysX/EditorJointBus.h +++ b/Gems/PhysX/Code/Include/PhysX/EditorJointBus.h @@ -9,59 +9,58 @@ #include #include +#include +#include namespace PhysX { - /// Pair of floating point values for angular limits. - using AngleLimitsFloatPair = AZStd::pair; - - /// Messages serviced by Editor Joint Components. + //! Messages serviced by Editor Joint Components. class EditorJointRequests : public AZ::EntityComponentBus { public: static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - /// Get bool parameter value identified by name. - /// @return Value of bool parameter. + //! Get bool parameter value identified by name. + //! @return Value of bool parameter. virtual bool GetBoolValue(const AZStd::string& parameterName) = 0; - /// Get entityID parameter value identified by name. - /// @return Value of entityID parameter. + //! Get entityID parameter value identified by name. + //! @return Value of entityID parameter. virtual AZ::EntityId GetEntityIdValue(const AZStd::string& parameterName) = 0; - /// Get linear parameter value identified by name. - /// @return Value of linear value parameter. + //! Get linear parameter value identified by name. + //! @return Value of linear value parameter. virtual float GetLinearValue(const AZStd::string& parameterName) = 0; - /// Get linear parameter value pair identified by name. - /// @return Linear parameter value pair. + //! Get linear parameter value pair identified by name. + //! @return Linear parameter value pair. virtual AngleLimitsFloatPair GetLinearValuePair(const AZStd::string& parameterName) = 0; - /// Get vector3 value identified by name. - /// @return Vector3 parameter value. + //! Get vector3 value identified by name. + //! @return Vector3 parameter value. virtual AZ::Vector3 GetVector3Value(const AZStd::string& parameterName) = 0; - /// Get transform value identified by name. - /// @return Transform parameter value. + //! Get transform value identified by name. + //! @return Transform parameter value. virtual AZ::Transform GetTransformValue(const AZStd::string& parameterName) = 0; - /// Checks if parameter is used. - virtual bool IsParameterUsed(const AZStd::string& parameterName) = 0; + //! Get the Sub Component modes to enable. + virtual AZStd::vector GetSubComponentModesState() = 0; - /// Set bool parameter value identified by name. + //! Set bool parameter value identified by name. virtual void SetBoolValue(const AZStd::string& parameterName, bool value) = 0; - /// Set entity ID parameter value identified by name. + //! Set entity ID parameter value identified by name. virtual void SetEntityIdValue(const AZStd::string& parameterName, AZ::EntityId value) = 0; - /// Set linear parameter value identified by name. + //! Set linear parameter value identified by name. virtual void SetLinearValue(const AZStd::string& parameterName, float value) = 0; - /// Set linear parameter value pair identified by name. + //! Set linear parameter value pair identified by name. virtual void SetLinearValuePair(const AZStd::string& parameterName, const AngleLimitsFloatPair& valuePair) = 0; - /// Set vector3 parameter value identified by name. + //! Set vector3 parameter value identified by name. virtual void SetVector3Value(const AZStd::string& parameterName, const AZ::Vector3& value) = 0; }; using EditorJointRequestBus = AZ::EBus; diff --git a/Gems/PhysX/Code/Source/EditorBallJointComponent.cpp b/Gems/PhysX/Code/Source/EditorBallJointComponent.cpp index da000baeed..92952bcdaa 100644 --- a/Gems/PhysX/Code/Source/EditorBallJointComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorBallJointComponent.cpp @@ -13,7 +13,8 @@ #include #include -#include +#include +#include #include #include @@ -73,9 +74,8 @@ namespace PhysX AzToolsFramework::EditorComponentSelectionNotificationsBus::Handler::BusConnect(entityId); AzToolsFramework::EditorComponentSelectionRequestsBus::Handler* selection = this; - m_componentModeDelegate.ConnectWithSingleComponentMode < - EditorBallJointComponent, EditorBallJointComponentMode>( - AZ::EntityComponentIdPair(entityId, GetId()), selection); + m_componentModeDelegate.ConnectWithSingleComponentMode( + AZ::EntityComponentIdPair(entityId, GetId()), selection); PhysX::EditorJointRequestBus::Handler::BusConnect(AZ::EntityComponentIdPair(entityId, GetId())); } @@ -100,23 +100,19 @@ namespace PhysX float EditorBallJointComponent::GetLinearValue(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxForce) { return m_config.m_forceMax; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxTorque) { return m_config.m_torqueMax; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterTolerance) - { - return m_swingLimit.m_standardLimitConfig.m_tolerance; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterDamping) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Damping) { return m_swingLimit.m_standardLimitConfig.m_damping; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterStiffness) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Stiffness) { return m_swingLimit.m_standardLimitConfig.m_stiffness; } @@ -126,7 +122,7 @@ namespace PhysX AngleLimitsFloatPair EditorBallJointComponent::GetLinearValuePair(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterSwingLimit) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::SwingLimit) { return AngleLimitsFloatPair(m_swingLimit.m_limitY, m_swingLimit.m_limitZ); } @@ -134,49 +130,58 @@ namespace PhysX return AngleLimitsFloatPair(); } - bool EditorBallJointComponent::IsParameterUsed(const AZStd::string& parameterName) + AZStd::vector EditorBallJointComponent::GetSubComponentModesState() { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce - || parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque - ) - { - return m_config.m_breakable; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterTolerance) + AZStd::vector subModes; + + subModes.emplace_back(JointsComponentModeCommon::SubModeParamaterState{ + JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition, + JointsComponentModeCommon::ParamaterNames::SnapPosition }); + subModes.emplace_back(JointsComponentModeCommon::SubModeParamaterState{ + JointsComponentModeCommon::SubComponentModes::ModeType::SnapRotation, + JointsComponentModeCommon::ParamaterNames::SnapRotation }); + + if (AZStd::vector baseSubModes = + EditorJointComponent::GetSubComponentModesState(); + !baseSubModes.empty()) { - return !m_swingLimit.m_standardLimitConfig.m_isSoftLimit; + subModes.insert(subModes.end(), baseSubModes.begin(), baseSubModes.end()); } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterDamping) - { - return m_swingLimit.m_standardLimitConfig.m_isSoftLimit; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterStiffness) + + if (m_swingLimit.m_standardLimitConfig.m_isLimited) { - return m_swingLimit.m_standardLimitConfig.m_isSoftLimit; - } + subModes.emplace_back( + JointsComponentModeCommon::SubModeParamaterState{ JointsComponentModeCommon::SubComponentModes::ModeType::SwingLimits, + JointsComponentModeCommon::ParamaterNames::SwingLimit }); - return true; // Sub-component mode always enabled unless disabled explicitly. + if (m_swingLimit.m_standardLimitConfig.m_isSoftLimit) + { + subModes.emplace_back(JointsComponentModeCommon::SubModeParamaterState{ + JointsComponentModeCommon::SubComponentModes::ModeType::Damping, JointsComponentModeCommon::ParamaterNames::Damping }); + subModes.emplace_back( + JointsComponentModeCommon::SubModeParamaterState{ JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness, + JointsComponentModeCommon::ParamaterNames::Stiffness }); + } + } + + return subModes; } void EditorBallJointComponent::SetLinearValue(const AZStd::string& parameterName, float value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxForce) { m_config.m_forceMax = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxTorque) { m_config.m_torqueMax = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterTolerance) - { - m_swingLimit.m_standardLimitConfig.m_tolerance = value; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterDamping) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Damping) { m_swingLimit.m_standardLimitConfig.m_damping = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterStiffness) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Stiffness) { m_swingLimit.m_standardLimitConfig.m_stiffness = value; } @@ -184,7 +189,7 @@ namespace PhysX void EditorBallJointComponent::SetLinearValuePair(const AZStd::string& parameterName, const AngleLimitsFloatPair& valuePair) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterSwingLimit) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::SwingLimit) { m_swingLimit.m_limitY = valuePair.first; m_swingLimit.m_limitZ = valuePair.second; @@ -193,7 +198,7 @@ namespace PhysX void EditorBallJointComponent::SetBoolValue(const AZStd::string& parameterName, bool value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterComponentMode) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::ComponentMode) { m_swingLimit.m_standardLimitConfig.m_inComponentMode = value; m_config.m_inComponentMode = value; @@ -202,10 +207,6 @@ namespace PhysX &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay , AzToolsFramework::Refresh_EntireTree); } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterSelectOnSnap) - { - m_config.m_selectLeadOnSnap = value; - } } void EditorBallJointComponent::DisplayEntityViewport( @@ -228,7 +229,7 @@ namespace PhysX EditorJointRequestBus::EventResult(localTransform, AZ::EntityComponentIdPair(entityId, GetId()), &EditorJointRequests::GetTransformValue, - PhysX::EditorJointComponentMode::s_parameterTransform); + PhysX::JointsComponentModeCommon::ParamaterNames::Transform); AZ::u32 stateBefore = debugDisplay.GetState(); debugDisplay.CullOff(); diff --git a/Gems/PhysX/Code/Source/EditorBallJointComponent.h b/Gems/PhysX/Code/Source/EditorBallJointComponent.h index 1702532a88..ad925dc79d 100644 --- a/Gems/PhysX/Code/Source/EditorBallJointComponent.h +++ b/Gems/PhysX/Code/Source/EditorBallJointComponent.h @@ -41,7 +41,7 @@ namespace PhysX // PhysX::EditorJointRequests float GetLinearValue(const AZStd::string& parameterName) override; AngleLimitsFloatPair GetLinearValuePair(const AZStd::string& parameterName) override; - bool IsParameterUsed(const AZStd::string& parameterName) override; + AZStd::vector GetSubComponentModesState() override; void SetBoolValue(const AZStd::string& parameterName, bool value) override; void SetLinearValue(const AZStd::string& parameterName, float value) override; void SetLinearValuePair(const AZStd::string& parameterName, const AngleLimitsFloatPair& valuePair) override; diff --git a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp index 566903d84a..7c07ca207c 100644 --- a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -31,6 +32,7 @@ #include #include #include +#include #include #include diff --git a/Gems/PhysX/Code/Source/EditorFixedJointComponent.cpp b/Gems/PhysX/Code/Source/EditorFixedJointComponent.cpp index bf5af6b78d..94f57690ba 100644 --- a/Gems/PhysX/Code/Source/EditorFixedJointComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorFixedJointComponent.cpp @@ -13,7 +13,7 @@ #include #include -#include +#include #include namespace PhysX @@ -70,9 +70,8 @@ namespace PhysX AzToolsFramework::EditorComponentSelectionNotificationsBus::Handler::BusConnect(entityId); AzToolsFramework::EditorComponentSelectionRequestsBus::Handler* selection = this; - m_componentModeDelegate.ConnectWithSingleComponentMode < - EditorFixedJointComponent, EditorFixedJointComponentMode>( - AZ::EntityComponentIdPair(entityId, GetId()), selection); + m_componentModeDelegate.ConnectWithSingleComponentMode( + AZ::EntityComponentIdPair(entityId, GetId()), selection); PhysX::EditorJointRequestBus::Handler::BusConnect(AZ::EntityComponentIdPair(entityId, GetId())); } @@ -91,4 +90,9 @@ namespace PhysX m_config.m_followerEntity = GetEntityId(); // joint is always in the same entity as the follower body. gameEntity->CreateComponent(m_config.ToGameTimeConfig(), m_config.ToGenericProperties()); } + + AZStd::vector EditorFixedJointComponent::GetSubComponentModesState() + { + return EditorJointComponent::GetSubComponentModesState(); + } } diff --git a/Gems/PhysX/Code/Source/EditorFixedJointComponent.h b/Gems/PhysX/Code/Source/EditorFixedJointComponent.h index 10056020d8..f32243776d 100644 --- a/Gems/PhysX/Code/Source/EditorFixedJointComponent.h +++ b/Gems/PhysX/Code/Source/EditorFixedJointComponent.h @@ -37,6 +37,9 @@ namespace PhysX // EditorComponentBase void BuildGameEntity(AZ::Entity* gameEntity) override; + // EditorJointComponent + AZStd::vector GetSubComponentModesState() override; + private: using ComponentModeDelegate = AzToolsFramework::ComponentModeFramework::ComponentModeDelegate; ComponentModeDelegate m_componentModeDelegate; ///< Responsible for detecting ComponentMode activation diff --git a/Gems/PhysX/Code/Source/EditorHingeJointComponent.cpp b/Gems/PhysX/Code/Source/EditorHingeJointComponent.cpp index 6676b9865e..5537502327 100644 --- a/Gems/PhysX/Code/Source/EditorHingeJointComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorHingeJointComponent.cpp @@ -12,8 +12,9 @@ #include #include +#include +#include #include -#include #include #include @@ -74,7 +75,7 @@ namespace PhysX AzToolsFramework::EditorComponentSelectionRequestsBus::Handler* selection = this; m_componentModeDelegate.ConnectWithSingleComponentMode < - EditorHingeJointComponent, EditorHingeJointComponentMode>( + EditorHingeJointComponent, JointsComponentMode>( AZ::EntityComponentIdPair(entityId, GetId()), selection); PhysX::EditorJointRequestBus::Handler::BusConnect(AZ::EntityComponentIdPair(entityId, GetId())); @@ -100,23 +101,19 @@ namespace PhysX float EditorHingeJointComponent::GetLinearValue(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxForce) { return m_config.m_forceMax; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxTorque) { return m_config.m_torqueMax; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterTolerance) - { - return m_angularLimit.m_standardLimitConfig.m_tolerance; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterDamping) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Damping) { return m_angularLimit.m_standardLimitConfig.m_damping; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterStiffness) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Stiffness) { return m_angularLimit.m_standardLimitConfig.m_stiffness; } @@ -126,7 +123,7 @@ namespace PhysX AngleLimitsFloatPair EditorHingeJointComponent::GetLinearValuePair(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterAngularPair) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::TwistLimits) { return AngleLimitsFloatPair(m_angularLimit.m_limitPositive, m_angularLimit.m_limitNegative); } @@ -134,33 +131,41 @@ namespace PhysX return AngleLimitsFloatPair(); } - bool EditorHingeJointComponent::IsParameterUsed(const AZStd::string& parameterName) + AZStd::vector EditorHingeJointComponent::GetSubComponentModesState() { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce - || parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque - ) - { - return m_config.m_breakable; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterTolerance) + AZStd::vector subModes; + subModes.emplace_back(JointsComponentModeCommon::SubModeParamaterState{ + JointsComponentModeCommon::SubComponentModes::ModeType::SnapPosition, + JointsComponentModeCommon::ParamaterNames::SnapPosition }); + + if (AZStd::vector baseSubModes = + EditorJointComponent::GetSubComponentModesState(); + !baseSubModes.empty()) { - return !m_angularLimit.m_standardLimitConfig.m_isSoftLimit; + subModes.insert(subModes.end(), baseSubModes.begin(), baseSubModes.end()); } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterDamping) - { - return m_angularLimit.m_standardLimitConfig.m_isSoftLimit; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterStiffness) + + if (m_angularLimit.m_standardLimitConfig.m_isLimited) { - return m_angularLimit.m_standardLimitConfig.m_isSoftLimit; - } + subModes.emplace_back( + JointsComponentModeCommon::SubModeParamaterState{ JointsComponentModeCommon::SubComponentModes::ModeType::TwistLimits, + JointsComponentModeCommon::ParamaterNames::TwistLimits }); - return true; // Sub-component mode always enabled unless disabled explicitly. + if (m_angularLimit.m_standardLimitConfig.m_isSoftLimit) + { + subModes.emplace_back(JointsComponentModeCommon::SubModeParamaterState{ + JointsComponentModeCommon::SubComponentModes::ModeType::Damping, JointsComponentModeCommon::ParamaterNames::Damping }); + subModes.emplace_back( + JointsComponentModeCommon::SubModeParamaterState{ JointsComponentModeCommon::SubComponentModes::ModeType::Stiffness, + JointsComponentModeCommon::ParamaterNames::Stiffness }); + } + } + return subModes; } void EditorHingeJointComponent::SetBoolValue(const AZStd::string& parameterName, bool value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterComponentMode) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::ComponentMode) { m_angularLimit.m_standardLimitConfig.m_inComponentMode = value; m_config.m_inComponentMode = value; @@ -169,31 +174,23 @@ namespace PhysX &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay , AzToolsFramework::Refresh_EntireTree); } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterSelectOnSnap) - { - m_config.m_selectLeadOnSnap = value; - } } void EditorHingeJointComponent::SetLinearValue(const AZStd::string& parameterName, float value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxForce) { m_config.m_forceMax = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::MaxTorque) { m_config.m_torqueMax = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterTolerance) - { - m_angularLimit.m_standardLimitConfig.m_tolerance = value; - } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterDamping) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Damping) { m_angularLimit.m_standardLimitConfig.m_damping = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterStiffness) + else if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::Stiffness) { m_angularLimit.m_standardLimitConfig.m_stiffness = value; } @@ -201,7 +198,7 @@ namespace PhysX void EditorHingeJointComponent::SetLinearValuePair(const AZStd::string& parameterName, const AngleLimitsFloatPair& valuePair) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterAngularPair) + if (parameterName == PhysX::JointsComponentModeCommon::ParamaterNames::TwistLimits) { m_angularLimit.m_limitPositive = valuePair.first; m_angularLimit.m_limitNegative = valuePair.second; @@ -267,7 +264,7 @@ namespace PhysX EditorJointRequestBus::EventResult(localTransform, AZ::EntityComponentIdPair(entityId, GetId()), &EditorJointRequests::GetTransformValue, - PhysX::EditorJointComponentMode::s_parameterTransform); + PhysX::JointsComponentModeCommon::ParamaterNames::Transform); debugDisplay.PushMatrix(worldTransform); debugDisplay.PushMatrix(localTransform); diff --git a/Gems/PhysX/Code/Source/EditorHingeJointComponent.h b/Gems/PhysX/Code/Source/EditorHingeJointComponent.h index 7c5bd8ad2f..6a2010464e 100644 --- a/Gems/PhysX/Code/Source/EditorHingeJointComponent.h +++ b/Gems/PhysX/Code/Source/EditorHingeJointComponent.h @@ -41,7 +41,7 @@ namespace PhysX // PhysX::EditorJointRequests float GetLinearValue(const AZStd::string& parameterName) override; AngleLimitsFloatPair GetLinearValuePair(const AZStd::string& parameterName) override; - bool IsParameterUsed(const AZStd::string& parameterName) override; + AZStd::vector GetSubComponentModesState() override; void SetBoolValue(const AZStd::string& parameterName, bool value) override; void SetLinearValue(const AZStd::string& parameterName, float value) override; void SetLinearValuePair(const AZStd::string& parameterName, const AngleLimitsFloatPair& valuePair) override; diff --git a/Gems/PhysX/Code/Source/EditorJointComponent.cpp b/Gems/PhysX/Code/Source/EditorJointComponent.cpp index 7b2d612cf1..88e192026d 100644 --- a/Gems/PhysX/Code/Source/EditorJointComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorJointComponent.cpp @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include #include @@ -134,21 +134,18 @@ namespace PhysX bool EditorJointComponent::GetBoolValue(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterComponentMode) + if (parameterName == JointsComponentModeCommon::ParamaterNames::ComponentMode) { return m_config.m_inComponentMode; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterSelectOnSnap) - { - return m_config.m_selectLeadOnSnap; - } + AZ_Error("EditorJointComponent::GetBoolValue", false, "bool parameter not recognized: %s", parameterName.c_str()); return false; } AZ::EntityId EditorJointComponent::GetEntityIdValue(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterLeadEntity) + if (parameterName == JointsComponentModeCommon::ParamaterNames::LeadEntity) { return m_config.m_leadEntity; } @@ -160,11 +157,11 @@ namespace PhysX float EditorJointComponent::GetLinearValue(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce) + if (parameterName == JointsComponentModeCommon::ParamaterNames::MaxForce) { return m_config.m_forceMax; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque) + else if (parameterName == JointsComponentModeCommon::ParamaterNames::MaxTorque) { return m_config.m_torqueMax; } @@ -181,7 +178,7 @@ namespace PhysX AZ::Transform EditorJointComponent::GetTransformValue(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterTransform) + if (parameterName == JointsComponentModeCommon::ParamaterNames::Transform) { return AZ::Transform::CreateFromQuaternionAndTranslation(AZ::Quaternion::CreateFromEulerAnglesDegrees(m_config.m_localRotation), m_config.m_localPosition); @@ -192,11 +189,11 @@ namespace PhysX AZ::Vector3 EditorJointComponent::GetVector3Value(const AZStd::string& parameterName) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterPosition) + if (parameterName == JointsComponentModeCommon::ParamaterNames::Position) { return m_config.m_localPosition; } - if (parameterName == PhysX::EditorJointComponentMode::s_parameterRotation) + if (parameterName == JointsComponentModeCommon::ParamaterNames::Rotation) { return m_config.m_localRotation; } @@ -204,24 +201,27 @@ namespace PhysX return AZ::Vector3::CreateZero(); } - bool EditorJointComponent::IsParameterUsed(const AZStd::string& parameterName) + AZStd::vector EditorJointComponent::GetSubComponentModesState() { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce - || parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque - ) + AZStd::vector subModes; + if (m_config.m_breakable) { - return m_config.m_breakable; + subModes.emplace_back(JointsComponentModeCommon::SubModeParamaterState{ + JointsComponentModeCommon::SubComponentModes::ModeType::MaxForce, JointsComponentModeCommon::ParamaterNames::MaxForce }); + subModes.emplace_back(JointsComponentModeCommon::SubModeParamaterState{ + JointsComponentModeCommon::SubComponentModes::ModeType::MaxTorque, + JointsComponentModeCommon::ParamaterNames::MaxTorque }); } - return true; // Sub-component mode always enabled unless disabled explicitly. + return subModes; } void EditorJointComponent::SetLinearValue(const AZStd::string& parameterName, float value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxForce) + if (parameterName == JointsComponentModeCommon::ParamaterNames::MaxForce) { m_config.m_forceMax = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterMaxTorque) + else if (parameterName == JointsComponentModeCommon::ParamaterNames::MaxTorque) { m_config.m_torqueMax = value; } @@ -235,11 +235,11 @@ namespace PhysX void EditorJointComponent::SetVector3Value(const AZStd::string& parameterName, const AZ::Vector3& value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterPosition) + if (parameterName == JointsComponentModeCommon::ParamaterNames::Position) { m_config.m_localPosition = value; } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterRotation) + else if (parameterName == JointsComponentModeCommon::ParamaterNames::Rotation) { m_config.m_localRotation = value; } @@ -247,7 +247,7 @@ namespace PhysX void EditorJointComponent::SetBoolValue(const AZStd::string& parameterName, bool value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterComponentMode) + if (parameterName == JointsComponentModeCommon::ParamaterNames::ComponentMode) { m_config.m_inComponentMode = value; @@ -255,15 +255,11 @@ namespace PhysX &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay , AzToolsFramework::Refresh_EntireTree); } - else if (parameterName == PhysX::EditorJointComponentMode::s_parameterSelectOnSnap) - { - m_config.m_selectLeadOnSnap = value; - } } void EditorJointComponent::SetEntityIdValue(const AZStd::string& parameterName, AZ::EntityId value) { - if (parameterName == PhysX::EditorJointComponentMode::s_parameterLeadEntity) + if (parameterName == JointsComponentModeCommon::ParamaterNames::LeadEntity) { m_config.SetLeadEntityId(value); } diff --git a/Gems/PhysX/Code/Source/EditorJointComponent.h b/Gems/PhysX/Code/Source/EditorJointComponent.h index 8e92e9820a..69142e6aed 100644 --- a/Gems/PhysX/Code/Source/EditorJointComponent.h +++ b/Gems/PhysX/Code/Source/EditorJointComponent.h @@ -56,7 +56,7 @@ namespace PhysX AngleLimitsFloatPair GetLinearValuePair(const AZStd::string& parameterName) override; AZ::Transform GetTransformValue(const AZStd::string& parameterName) override; AZ::Vector3 GetVector3Value(const AZStd::string& parameterName) override; - bool IsParameterUsed(const AZStd::string& parameterName) override; + AZStd::vector GetSubComponentModesState() override; void SetBoolValue(const AZStd::string& parameterName, bool value) override; void SetEntityIdValue(const AZStd::string& parameterName, AZ::EntityId value) override; void SetLinearValue(const AZStd::string& parameterName, float value) override; diff --git a/Gems/PhysX/Code/Source/EditorShapeColliderComponent.cpp b/Gems/PhysX/Code/Source/EditorShapeColliderComponent.cpp index 57bfe17a30..2bbc04faae 100644 --- a/Gems/PhysX/Code/Source/EditorShapeColliderComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorShapeColliderComponent.cpp @@ -676,7 +676,6 @@ namespace PhysX LmbrCentral::ShapeComponentNotificationsBus::Handler::BusDisconnect(); AZ::TransformNotificationBus::Handler::BusDisconnect(); AzToolsFramework::EntitySelectionEvents::Bus::Handler::BusDisconnect(); - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); AzToolsFramework::Components::EditorComponentBase::Deactivate(); if (m_sceneInterface && m_editorBodyHandle != AzPhysics::InvalidSimulatedBodyHandle) diff --git a/Gems/PhysX/Code/Source/EditorShapeColliderComponent.h b/Gems/PhysX/Code/Source/EditorShapeColliderComponent.h index 792d3c4327..431b34b1ae 100644 --- a/Gems/PhysX/Code/Source/EditorShapeColliderComponent.h +++ b/Gems/PhysX/Code/Source/EditorShapeColliderComponent.h @@ -10,7 +10,6 @@ #include #include -#include #include #include #include @@ -58,7 +57,6 @@ namespace PhysX //! component to create geometry in the PhysX simulation. class EditorShapeColliderComponent : public AzToolsFramework::Components::EditorComponentBase - , protected AzFramework::EntityDebugDisplayEventBus::Handler , protected AzToolsFramework::EntitySelectionEvents::Bus::Handler , private AZ::TransformNotificationBus::Handler , protected DebugDraw::DisplayCallback diff --git a/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterGameplayComponent.cpp b/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterGameplayComponent.cpp index bb32f707be..4a4f12558d 100644 --- a/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterGameplayComponent.cpp +++ b/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterGameplayComponent.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp b/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp index 412e53d0da..0bb3639826 100644 --- a/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp +++ b/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp @@ -298,8 +298,10 @@ namespace PhysX assetMaterialData.m_nodesToPerFaceMaterialIndices.emplace(nodeName, AZStd::vector(faceCount)); - // Convex and primitive methods can only have 1 material + // Convex and primitive methods can only have 1 material per node. const bool limitToOneMaterial = meshGroup.GetExportAsConvex() || meshGroup.GetExportAsPrimitive(); + AZStd::string firstMaterial; + AZStd::set nodeMaterials; for (AZ::u32 faceIndex = 0; faceIndex < faceCount; ++faceIndex) { @@ -318,18 +320,28 @@ namespace PhysX materialName = localSourceSceneMaterialsList[materialId]; - // Keep using the first material when it has to be limited to one. - if (limitToOneMaterial && - assetMaterialData.m_sourceSceneMaterialNames.size() == 1 && - assetMaterialData.m_sourceSceneMaterialNames[0] != materialName) + // Use the first material found in the mesh when it has to be limited to one. + if (limitToOneMaterial) { - materialName = assetMaterialData.m_sourceSceneMaterialNames[0]; + nodeMaterials.insert(materialName); + if (firstMaterial.empty()) + { + firstMaterial = materialName; + } + materialName = firstMaterial; } } const AZ::u16 materialIndex = InsertMaterialIndexByName(materialName, assetMaterialData); assetMaterialData.m_nodesToPerFaceMaterialIndices[nodeName][faceIndex] = materialIndex; } + + if (limitToOneMaterial && nodeMaterials.size() > 1) + { + AZ_TracePrintf(AZ::SceneAPI::Utilities::WarningWindow, + "Node '%s' has %d materials, but cooking methods Convex and Primitive support one material per node. The first material '%s' will be used.", + sceneNodeSelectionList.GetSelectedNode(index).c_str(), nodeMaterials.size(), firstMaterial.c_str()); + } } return assetMaterialData; diff --git a/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp b/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp index f95804e805..d0ff4008b2 100644 --- a/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp +++ b/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp @@ -852,16 +852,7 @@ namespace PhysX { if (index < m_materialSlots.size()) { - // When limited to one material, clarify in the label the material - // will be used for the entire object. - if (index == 0 && (GetExportAsConvex() || GetExportAsPrimitive())) - { - return m_materialSlots[index] + " (entire object)"; - } - else - { - return m_materialSlots[index]; - } + return m_materialSlots[index]; } else { diff --git a/Gems/PhysX/Code/Source/System/PhysXSystem.cpp b/Gems/PhysX/Code/Source/System/PhysXSystem.cpp index ebdfc5d417..cc21285f8c 100644 --- a/Gems/PhysX/Code/Source/System/PhysXSystem.cpp +++ b/Gems/PhysX/Code/Source/System/PhysXSystem.cpp @@ -511,10 +511,12 @@ namespace PhysX materialLibrary.BlockUntilLoadComplete(); - AZ_Warning("PhysX", (materialLibrary.GetData() != nullptr), + const bool loadedSuccessfully = materialLibrary.GetData() != nullptr && !materialLibrary.IsError(); + + AZ_Warning("PhysX", loadedSuccessfully, "LoadDefaultMaterialLibrary: Default Material Library asset data is invalid."); - return materialLibrary.GetData() != nullptr && !materialLibrary.IsError(); + return loadedSuccessfully; } //TEMP -- until these are fully moved over here diff --git a/Gems/PhysX/Code/Source/SystemComponent.cpp b/Gems/PhysX/Code/Source/SystemComponent.cpp index 42c78d2c1d..f56ad43079 100644 --- a/Gems/PhysX/Code/Source/SystemComponent.cpp +++ b/Gems/PhysX/Code/Source/SystemComponent.cpp @@ -458,7 +458,13 @@ namespace PhysX { const PhysXSystemConfiguration defaultConfig = PhysXSystemConfiguration::CreateDefault(); m_physXSystem->Initialize(&defaultConfig); - registryManager.SaveSystemConfiguration(defaultConfig, {}); + + auto saveCallback = []([[maybe_unused]] const PhysXSystemConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the default PhysX configuration."); + }; + registryManager.SaveSystemConfiguration(defaultConfig, saveCallback); } //Load the DefaultSceneConfig @@ -471,7 +477,13 @@ namespace PhysX { const AzPhysics::SceneConfiguration defaultConfig = AzPhysics::SceneConfiguration::CreateDefault(); m_physXSystem->UpdateDefaultSceneConfiguration(defaultConfig); - registryManager.SaveDefaultSceneConfiguration(defaultConfig, {}); + + auto saveCallback = []([[maybe_unused]] const AzPhysics::SceneConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the default Scene configuration."); + }; + registryManager.SaveDefaultSceneConfiguration(defaultConfig, saveCallback); } //load the debug configuration and initialize the PhysX debug interface @@ -486,7 +498,13 @@ namespace PhysX { const Debug::DebugConfiguration defaultConfig = Debug::DebugConfiguration::CreateDefault(); debug->Initialize(defaultConfig); - registryManager.SaveDebugConfiguration(defaultConfig, {}); + + auto saveCallback = []([[maybe_unused]] const Debug::DebugConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the default PhysX Debug configuration."); + }; + registryManager.SaveDebugConfiguration(defaultConfig, saveCallback); } } } diff --git a/Gems/PhysX/Code/Tests/PhysXMultithreadingTest.cpp b/Gems/PhysX/Code/Tests/PhysXMultithreadingTest.cpp index a0013402b1..205ad4f377 100644 --- a/Gems/PhysX/Code/Tests/PhysXMultithreadingTest.cpp +++ b/Gems/PhysX/Code/Tests/PhysXMultithreadingTest.cpp @@ -119,7 +119,7 @@ namespace PhysX void Start(int waitTimeMilliseconds) { m_waitTimeMilliseconds = waitTimeMilliseconds; - m_thread = AZStd::thread(AZStd::bind(&SceneQueryBase::Tick, this), &m_threadDesc); + m_thread = AZStd::thread(m_threadDesc, AZStd::bind(&SceneQueryBase::Tick, this)); } void Join() diff --git a/Gems/PhysX/Code/Tests/PhysXTestUtil.h b/Gems/PhysX/Code/Tests/PhysXTestUtil.h index 8e81b9cb89..1c86768de7 100644 --- a/Gems/PhysX/Code/Tests/PhysXTestUtil.h +++ b/Gems/PhysX/Code/Tests/PhysXTestUtil.h @@ -115,7 +115,11 @@ namespace PhysX } float GetHeightFromFloats(float, float, Sampler, bool*) const override { return {}; } AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeight(AZ::Vector3, Sampler, bool*) const override { return {}; } + AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromVector2(const AZ::Vector2&, Sampler, bool*) const override { return {}; } AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromFloats(float, float, Sampler, bool*) const override { return {}; } + void GetSurfaceWeights(const AZ::Vector3&, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet&, Sampler, bool*) const override {} + void GetSurfaceWeightsFromVector2(const AZ::Vector2&, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet&, Sampler, bool*) const override{}; + void GetSurfaceWeightsFromFloats(float, float, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet&, Sampler, bool*) const override {} const char* GetMaxSurfaceName(AZ::Vector3, Sampler, bool*) const override { return {}; } bool GetIsHoleFromFloats(float, float, Sampler) const override { return {}; } AZ::Vector3 GetNormal(AZ::Vector3, Sampler, bool*) const override { return {}; } diff --git a/Gems/PhysX/Code/physx_editor_files.cmake b/Gems/PhysX/Code/physx_editor_files.cmake index 82f26feff3..5c0c038976 100644 --- a/Gems/PhysX/Code/physx_editor_files.cmake +++ b/Gems/PhysX/Code/physx_editor_files.cmake @@ -82,7 +82,6 @@ set(FILES Editor/ComboBoxEditButtonPair.cpp Editor/ColliderComponentMode.h Editor/ColliderComponentMode.cpp - Editor/ColliderSubComponentMode.h Editor/ColliderOffsetMode.h Editor/ColliderOffsetMode.cpp Editor/ColliderBoxMode.h @@ -99,36 +98,35 @@ set(FILES Editor/DebugDraw.h Editor/PolygonPrismMeshUtils.cpp Editor/PolygonPrismMeshUtils.h - Editor/EditorJointComponentMode.cpp - Editor/EditorJointComponentMode.h + Editor/EditorJointCommon.h Editor/EditorJointConfiguration.cpp Editor/EditorJointConfiguration.h - Editor/EditorJointTypeDrawer.cpp - Editor/EditorJointTypeDrawer.h - Editor/EditorJointTypeDrawerBus.h - Editor/EditorSubComponentModeAngleCone.cpp - Editor/EditorSubComponentModeAngleCone.h - Editor/EditorSubComponentModeAnglePair.cpp - Editor/EditorSubComponentModeAnglePair.h - Editor/EditorSubComponentModeBase.cpp - Editor/EditorSubComponentModeBase.h - Editor/EditorSubComponentModeLinear.cpp - Editor/EditorSubComponentModeLinear.h - Editor/EditorSubComponentModeRotation.cpp - Editor/EditorSubComponentModeRotation.h - Editor/EditorSubComponentModeSnap.cpp - Editor/EditorSubComponentModeSnap.h - Editor/EditorSubComponentModeSnapPosition.cpp - Editor/EditorSubComponentModeSnapPosition.h - Editor/EditorSubComponentModeSnapRotation.cpp - Editor/EditorSubComponentModeSnapRotation.h - Editor/EditorSubComponentModeVec3.cpp - Editor/EditorSubComponentModeVec3.h Editor/EditorViewportEntityPicker.cpp Editor/EditorViewportEntityPicker.h Editor/Source/Components/EditorSystemComponent.h Editor/Source/Components/EditorSystemComponent.cpp + Editor/Source/ComponentModes/Joints/JointsComponentMode.h + Editor/Source/ComponentModes/Joints/JointsComponentMode.cpp + Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.h + Editor/Source/ComponentModes/Joints/JointsComponentModeCommon.cpp + Editor/Source/ComponentModes/PhysXSubComponentModeBase.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp + Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeAnglePair.cpp + Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeLinearFloat.cpp + Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeRotation.cpp + Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnap.cpp + Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapPosition.cpp + Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeSnapRotation.cpp + Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.h + Editor/Source/ComponentModes/Joints/JointsSubComponentModeTranslate.cpp Editor/Source/Configuration/PhysXEditorSettingsRegistryManager.h Editor/Source/Configuration/PhysXEditorSettingsRegistryManager.cpp ) diff --git a/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace b/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace index 1727656092..8bc507082c 100644 --- a/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace +++ b/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@assets@/Characters/Cowboy/AnimationEditorFiles/Cowboy.motionset\"\nLoadAnimGraph -filename \"@assets@/Characters/Cowboy/AnimationEditorFiles/Cowboy.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" +startScript="ImportActor -filename \"@products@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@products@/Characters/Cowboy/AnimationEditorFiles/Cowboy.motionset\"\nLoadAnimGraph -filename \"@products@/Characters/Cowboy/AnimationEditorFiles/Cowboy.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" diff --git a/Gems/Prefab/PrefabBuilder/CMakeLists.txt b/Gems/Prefab/PrefabBuilder/CMakeLists.txt index 450b8d0408..9aedbd3d99 100644 --- a/Gems/Prefab/PrefabBuilder/CMakeLists.txt +++ b/Gems/Prefab/PrefabBuilder/CMakeLists.txt @@ -13,6 +13,9 @@ endif() ly_add_target( NAME PrefabBuilder.Static STATIC NAMESPACE Gem + INCLUDE_DIRECTORIES + PRIVATE + . FILES_CMAKE prefabbuilder_files.cmake BUILD_DEPENDENCIES @@ -20,6 +23,9 @@ ly_add_target( AZ::AzCore AZ::AzToolsFramework AZ::AssetBuilderSDK + AZ::SceneCore + AZ::SceneData + 3rdParty::RapidJSON ) ly_add_target( @@ -35,7 +41,8 @@ ly_add_target( Gem::PrefabBuilder.Static ) -# the prefab builder only needs to be active in builders +# create an alias for the tool version +ly_create_alias(NAME PrefabBuilder.Tools NAMESPACE Gem TARGETS Gem::PrefabBuilder.Builders) # we automatically add this gem, if it is present, to all our known set of builder applications: ly_enable_gems(GEMS PrefabBuilder) diff --git a/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp b/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp index 762f459d9d..2bf7026549 100644 --- a/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp +++ b/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp @@ -8,6 +8,7 @@ #include #include +#include namespace AZ::Prefab { @@ -22,7 +23,8 @@ namespace AZ::Prefab : Module() { m_descriptors.insert(m_descriptors.end(), { - PrefabBuilderComponent::CreateDescriptor() + PrefabBuilderComponent::CreateDescriptor(), + AZ::SceneAPI::Behaviors::PrefabGroupBehavior::CreateDescriptor() }); } }; diff --git a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp index 7d3096a6da..ab6770c3fe 100644 --- a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp +++ b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp @@ -7,6 +7,7 @@ */ #include "PrefabBuilderTests.h" +#include #include #include #include diff --git a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h index 3aea173ba4..2aec317e69 100644 --- a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h +++ b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h @@ -13,6 +13,7 @@ #include #include #include +#include namespace UnitTest { diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/IPrefabGroup.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/IPrefabGroup.h new file mode 100644 index 0000000000..c2f8313b95 --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/IPrefabGroup.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include + +namespace AZ::SceneAPI::DataTypes +{ + class IPrefabGroup + : public ISceneNodeGroup + { + public: + AZ_RTTI(IPrefabGroup, "{7E50FAEF-3379-4521-99C5-B428FDEE3B7B}", ISceneNodeGroup); + + ~IPrefabGroup() override = default; + virtual AzToolsFramework::Prefab::PrefabDomConstReference GetPrefabDomRef() const = 0; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.cpp new file mode 100644 index 0000000000..856aba979b --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.cpp @@ -0,0 +1,161 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace UnitTest +{ + class PrefabBehaviorTests + : public PrefabBuilderTests + { + public: + static void SetUpTestCase() + { + // Allocator needed by SceneCore + if (!AZ::AllocatorInstance().IsReady()) + { + AZ::AllocatorInstance().Create(); + } + AZ::SceneAPI::SceneCoreStandaloneAllocator::Initialize(AZ::Environment::GetInstance()); + } + + static void TearDownTestCase() + { + AZ::SceneAPI::SceneCoreStandaloneAllocator::TearDown(); + AZ::AllocatorInstance().Destroy(); + } + + void SetUp() override + { + PrefabBuilderTests::SetUp(); + m_prefabGroupBehavior = AZStd::make_unique(); + m_prefabGroupBehavior->Activate(); + + // Mocking the asset system replacing the AssetSystem::AssetSystemComponent + AZ::Entity* systemEntity = m_app.FindEntity(AZ::SystemEntityId); + systemEntity->FindComponent()->Deactivate(); + using namespace testing; + ON_CALL(m_assetSystemRequestMock, GetSourceInfoBySourcePath(_, _, _)).WillByDefault([](auto* path, auto& info, auto&) + { + return PrefabBehaviorTests::OnGetSourceInfoBySourcePath(path, info); + }); + m_assetSystemRequestMock.BusConnect(); + } + + void TearDown() override + { + m_assetSystemRequestMock.BusDisconnect(); + + m_prefabGroupBehavior->Deactivate(); + m_prefabGroupBehavior.reset(); + + PrefabBuilderTests::TearDown(); + } + + static bool OnGetSourceInfoBySourcePath(AZStd::string_view sourcePath, AZ::Data::AssetInfo& assetInfo) + { + if (sourcePath == AZStd::string_view("mock")) + { + assetInfo.m_assetId = AZ::Uuid::CreateRandom(); + assetInfo.m_assetType = azrtti_typeid(); + assetInfo.m_relativePath = "mock/path"; + assetInfo.m_sizeBytes = 0; + } + return true; + } + + struct TestPreExportEventContext + { + TestPreExportEventContext() + : m_scene("test_context") + { + using namespace AZ::SceneAPI::Events; + m_preExportEventContext = AZStd::make_unique(m_productList, m_outputDirectory, m_scene, "mock"); + } + + void SetOutputDirectory(AZStd::string outputDirectory) + { + using namespace AZ::SceneAPI::Events; + m_outputDirectory = AZStd::move(outputDirectory); + m_preExportEventContext = AZStd::make_unique(m_productList, m_outputDirectory, m_scene, "mock"); + } + + AZStd::unique_ptr m_preExportEventContext; + AZ::SceneAPI::Events::ExportProductList m_productList; + AZStd::string m_outputDirectory; + AZ::SceneAPI::Containers::Scene m_scene; + }; + + AZStd::unique_ptr m_prefabGroupBehavior; + testing::NiceMock m_assetSystemRequestMock; + }; + + TEST_F(PrefabBehaviorTests, PrefabBehavior_EmptyContextIgnored_Works) + { + auto context = TestPreExportEventContext{}; + + auto result = AZ::SceneAPI::Events::ProcessingResult::Failure; + AZ::SceneAPI::Events::CallProcessorBus::BroadcastResult( + result, + &AZ::SceneAPI::Events::CallProcessorBus::Events::Process, + context.m_preExportEventContext.get()); + + EXPECT_EQ(result, AZ::SceneAPI::Events::ProcessingResult::Ignored); + } + + TEST_F(PrefabBehaviorTests, PrefabBehavior_SimplePrefab_Works) + { + auto context = TestPreExportEventContext{}; + + // check for the file at /mock/fake_prefab.procprefab + AZ::Test::ScopedAutoTempDirectory tempDir; + context.SetOutputDirectory(tempDir.GetDirectory()); + + auto jsonOutcome = AZ::JsonSerializationUtils::ReadJsonString(Data::jsonPrefab); + ASSERT_TRUE(jsonOutcome); + + auto prefabGroup = AZStd::make_shared(); + prefabGroup.get()->SetId(AZ::Uuid::CreateRandom()); + prefabGroup.get()->SetName("fake_prefab"); + prefabGroup.get()->SetPrefabDom(AZStd::move(jsonOutcome.GetValue())); + context.m_scene.GetManifest().AddEntry(prefabGroup); + context.m_scene.SetSource("mock", AZ::Uuid::CreateRandom()); + + auto result = AZ::SceneAPI::Events::ProcessingResult::Failure; + AZ::SceneAPI::Events::CallProcessorBus::BroadcastResult( + result, + &AZ::SceneAPI::Events::CallProcessorBus::Events::Process, + context.m_preExportEventContext.get()); + + EXPECT_EQ(result, AZ::SceneAPI::Events::ProcessingResult::Success); + + AZStd::string pathStr; + AzFramework::StringFunc::Path::ConstructFull(tempDir.GetDirectory(), "mock/fake_prefab.procprefab", pathStr, true); + if (!AZ::IO::SystemFile::Exists(pathStr.c_str())) + { + AZ_Warning("testing", false, "The product asset (%s) is missing", pathStr.c_str()); + } + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.inl b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.inl new file mode 100644 index 0000000000..b39f782a1e --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.inl @@ -0,0 +1,104 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +namespace UnitTest +{ + namespace Data + { + const char* jsonPrefab = R"JSON( + { + "ContainerEntity": { + "Id": "ContainerEntity", + "Name": "test_template_1", + "Components": { + "Component_[12122553907433030840]": { + "$type": "EditorVisibilityComponent", + "Id": 12122553907433030840 + }, + "Component_[5666150279650800686]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 5666150279650800686, + "Parent Entity": "" + }, + "Component_[8790726658974076423]": { + "$type": "EditorOnlyEntityComponent", + "Id": 8790726658974076423 + } + } + }, + "Entities": { + "Entity_[1588652751483]": { + "Id": "Entity_[1588652751483]", + "Name": "root", + "Components": { + "Component_[11872748096995986607]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 11872748096995986607, + "Parent Entity": "ContainerEntity", + "Transform Data": { + "Rotate": [ + 0.0, + 0.10000000149011612, + 180.0 + ] + } + }, + "Component_[12138841758570858610]": { + "$type": "EditorVisibilityComponent", + "Id": 12138841758570858610 + }, + "Component_[15735658354806796004]": { + "$type": "EditorOnlyEntityComponent", + "Id": 15735658354806796004 + } + } + }, + "Entity_[1592947718779]": { + "Id": "Entity_[1592947718779]", + "Name": "cube", + "Components": { + "Component_[2505301170249328189]": { + "$type": "EditorOnlyEntityComponent", + "Id": 2505301170249328189 + }, + "Component_[3716170894544198343]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 3716170894544198343, + "Parent Entity": "Entity_[1588652751483]" + }, + "Component_[5862175558847453681]": { + "$type": "EditorVisibilityComponent", + "Id": 5862175558847453681 + } + } + }, + "Entity_[1597242686075]": { + "Id": "Entity_[1597242686075]", + "Name": "cubeKid", + "Components": { + "Component_[10128771992421174485]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 10128771992421174485, + "Parent Entity": "Entity_[1592947718779]" + }, + "Component_[14936165953779771344]": { + "$type": "EditorVisibilityComponent", + "Id": 14936165953779771344 + }, + "Component_[403416213715997356]": { + "$type": "EditorOnlyEntityComponent", + "Id": 403416213715997356 + } + } + } + } + } + )JSON"; + + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.cpp new file mode 100644 index 0000000000..f4dd37b86c --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.cpp @@ -0,0 +1,136 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ::SceneAPI::SceneData +{ + // PrefabGroup + + PrefabGroup::PrefabGroup() + : m_id(Uuid::CreateNull()) + , m_name() + { + } + + const AZStd::string& PrefabGroup::GetName() const + { + return m_name; + } + + void PrefabGroup::SetName(AZStd::string name) + { + m_name = AZStd::move(name); + } + + const Uuid& PrefabGroup::GetId() const + { + return m_id; + } + + void PrefabGroup::SetId(Uuid id) + { + m_id = AZStd::move(id); + } + + Containers::RuleContainer& PrefabGroup::GetRuleContainer() + { + return m_rules; + } + + const Containers::RuleContainer& PrefabGroup::GetRuleContainerConst() const + { + return m_rules; + } + + DataTypes::ISceneNodeSelectionList& PrefabGroup::GetSceneNodeSelectionList() + { + return m_nodeSelectionList; + } + + const DataTypes::ISceneNodeSelectionList& PrefabGroup::GetSceneNodeSelectionList() const + { + return m_nodeSelectionList; + } + + void PrefabGroup::SetPrefabDom(AzToolsFramework::Prefab::PrefabDom prefabDom) + { + m_prefabDomData = AZStd::make_shared(); + m_prefabDomData->CopyValue(prefabDom); + } + + AzToolsFramework::Prefab::PrefabDomConstReference PrefabGroup::GetPrefabDomRef() const + { + if (m_prefabDomData) + { + return m_prefabDomData->GetValue(); + } + return {}; + } + + void PrefabGroup::Reflect(ReflectContext* context) + { + SerializeContext* serializeContext = azrtti_cast(context); + if (serializeContext) + { + serializeContext->Class() + ->Version(1); + + serializeContext->Class() + ->Version(1) + ->Field("name", &PrefabGroup::m_name) + ->Field("nodeSelectionList", &PrefabGroup::m_nodeSelectionList) + ->Field("rules", &PrefabGroup::m_rules) + ->Field("id", &PrefabGroup::m_id) + ->Field("prefabDomData", &PrefabGroup::m_prefabDomData); + } + + BehaviorContext* behaviorContext = azrtti_cast(context); + if (behaviorContext) + { + auto setPrefabDomData = [](PrefabGroup& self, const AZStd::string& json) + { + auto jsonOutcome = JsonSerializationUtils::ReadJsonString(json); + if (jsonOutcome.IsSuccess()) + { + self.SetPrefabDom(AZStd::move(jsonOutcome.GetValue())); + return true; + } + AZ_Error("prefab", false, "Set PrefabDom failed (%s)", jsonOutcome.GetError().c_str()); + return false; + }; + + auto getPrefabDomData = [](const PrefabGroup& self) -> AZStd::string + { + if (self.GetPrefabDomRef().has_value() == false) + { + return {}; + } + AZStd::string buffer; + JsonSerializationUtils::WriteJsonString(self.GetPrefabDomRef().value(), buffer); + return buffer; + }; + + behaviorContext->Class() + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Attribute(Script::Attributes::Scope, Script::Attributes::ScopeFlags::Common) + ->Attribute(Script::Attributes::Module, "prefab") + ->Property("name", BehaviorValueProperty(&PrefabGroup::m_name)) + ->Property("id", BehaviorValueProperty(&PrefabGroup::m_id)) + ->Property("prefabDomData", getPrefabDomData, setPrefabDomData); + } + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.h new file mode 100644 index 0000000000..e5c47186eb --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AZ::SceneAPI::Containers +{ + class Scene; +} + +namespace AZ::SceneAPI::SceneData +{ + class PrefabGroup final + : public DataTypes::IPrefabGroup + { + public: + AZ_RTTI(PrefabGroup, "{99FE3C6F-5B55-4D8B-8013-2708010EC715}", DataTypes::IPrefabGroup); + AZ_CLASS_ALLOCATOR(PrefabGroup, SystemAllocator, 0); + + static void Reflect(AZ::ReflectContext* context); + + PrefabGroup(); + ~PrefabGroup() override = default; + + // DataTypes::IPrefabGroup + AzToolsFramework::Prefab::PrefabDomConstReference GetPrefabDomRef() const override; + const AZStd::string& GetName() const override; + const Uuid& GetId() const override; + Containers::RuleContainer& GetRuleContainer() override; + const Containers::RuleContainer& GetRuleContainerConst() const override; + DataTypes::ISceneNodeSelectionList& GetSceneNodeSelectionList() override; + const DataTypes::ISceneNodeSelectionList& GetSceneNodeSelectionList() const override; + + // Concrete API + void SetId(Uuid id); + void SetName(AZStd::string name); + void SetPrefabDom(AzToolsFramework::Prefab::PrefabDom prefabDom); + + private: + SceneNodeSelectionList m_nodeSelectionList; + Containers::RuleContainer m_rules; + AZStd::string m_name; + Uuid m_id; + AZStd::shared_ptr m_prefabDomData; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.cpp new file mode 100644 index 0000000000..13828e5f8c --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.cpp @@ -0,0 +1,251 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ::SceneAPI::Behaviors +{ + // + // ExportEventHandler + // + + struct PrefabGroupBehavior::ExportEventHandler final + : public AZ::SceneAPI::SceneCore::ExportingComponent + { + using PreExportEventContextFunction = AZStd::function; + PreExportEventContextFunction m_preExportEventContextFunction; + AZ::Prefab::PrefabGroupAssetHandler m_prefabGroupAssetHandler; + + ExportEventHandler() = delete; + + ExportEventHandler(PreExportEventContextFunction function) + : m_preExportEventContextFunction(AZStd::move(function)) + { + BindToCall(&ExportEventHandler::PrepareForExport); + AZ::SceneAPI::SceneCore::ExportingComponent::Activate(); + } + + ~ExportEventHandler() + { + AZ::SceneAPI::SceneCore::ExportingComponent::Deactivate(); + } + + Events::ProcessingResult PrepareForExport(Events::PreExportEventContext& context) + { + return m_preExportEventContextFunction(context); + } + }; + + // + // PrefabGroupBehavior + // + + void PrefabGroupBehavior::Activate() + { + m_exportEventHandler = AZStd::make_shared([this](auto& context) + { + return this->OnPrepareForExport(context); + }); + } + + void PrefabGroupBehavior::Deactivate() + { + m_exportEventHandler.reset(); + } + + AZStd::unique_ptr PrefabGroupBehavior::CreateProductAssetData(const SceneData::PrefabGroup* prefabGroup) const + { + using namespace AzToolsFramework::Prefab; + + auto* prefabLoaderInterface = AZ::Interface::Get(); + if (!prefabLoaderInterface) + { + AZ_Error("prefab", false, "Could not get PrefabLoaderInterface"); + return {}; + } + + // write to a UTF-8 string buffer + auto prefabDomRef = prefabGroup->GetPrefabDomRef(); + if (!prefabDomRef) + { + AZ_Error("prefab", false, "PrefabGroup(%s) missing PrefabDom", prefabGroup->GetName().c_str()); + return {}; + } + + const AzToolsFramework::Prefab::PrefabDom& prefabDom = prefabDomRef.value(); + rapidjson::StringBuffer sb; + rapidjson::Writer> writer(sb); + if (prefabDom.Accept(writer) == false) + { + AZ_Error("prefab", false, "Could not write PrefabGroup(%s) to JSON", prefabGroup->GetName().c_str()); + return {}; + } + + // validate the PrefabDom will make a valid Prefab template instance + auto templateId = prefabLoaderInterface->LoadTemplateFromString(sb.GetString(), prefabGroup->GetName().c_str()); + if (templateId == InvalidTemplateId) + { + AZ_Error("prefab", false, "PrefabGroup(%s) Could not write load template", prefabGroup->GetName().c_str()); + return {}; + } + + auto* prefabSystemComponentInterface = AZ::Interface::Get(); + if (!prefabSystemComponentInterface) + { + AZ_Error("prefab", false, "Could not get PrefabSystemComponentInterface"); + return {}; + } + + // create instance to update the asset hints + auto instance = prefabSystemComponentInterface->InstantiatePrefab(templateId); + if (!instance) + { + AZ_Error("prefab", false, "PrefabGroup(%s) Could not instantiate prefab", prefabGroup->GetName().c_str()); + return {}; + } + + auto* instanceToTemplateInterface = AZ::Interface::Get(); + if (!instanceToTemplateInterface) + { + AZ_Error("prefab", false, "Could not get InstanceToTemplateInterface"); + return {}; + } + + // fill out a JSON DOM + auto proceduralPrefab = AZStd::make_unique(rapidjson::kObjectType); + instanceToTemplateInterface->GenerateDomForInstance(*proceduralPrefab.get(), *instance.get()); + return proceduralPrefab; + } + + bool PrefabGroupBehavior::WriteOutProductAsset( + Events::PreExportEventContext& context, + const SceneData::PrefabGroup* prefabGroup, + const rapidjson::Document& doc) const + { + // Retrieve source asset info so we can get a string with the relative path to the asset + bool assetInfoResult; + Data::AssetInfo info; + AZStd::string watchFolder; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult( + assetInfoResult, + &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, + context.GetScene().GetSourceFilename().c_str(), + info, + watchFolder); + + AZ::IO::FixedMaxPath assetPath(info.m_relativePath); + assetPath.ReplaceFilename(prefabGroup->GetName().c_str()); + + AZStd::string filePath = AZ::SceneAPI::Utilities::FileUtilities::CreateOutputFileName( + assetPath.c_str(), + context.GetOutputDirectory(), + AZ::Prefab::PrefabGroupAssetHandler::s_Extension); + + AZ::IO::FileIOStream fileStream(filePath.c_str(), AZ::IO::OpenMode::ModeWrite); + if (fileStream.IsOpen() == false) + { + AZ_Error("prefab", false, "File path(%s) could not open for write", filePath.c_str()); + return false; + } + + // write to a UTF-8 string buffer + rapidjson::StringBuffer sb; + rapidjson::Writer> writer(sb); + if (doc.Accept(writer) == false) + { + AZ_Error("prefab", false, "PrefabGroup(%s) Could not buffer JSON", prefabGroup->GetName().c_str()); + return false; + } + + const auto bytesWritten = fileStream.Write(sb.GetSize(), sb.GetString()); + if (bytesWritten > 1) + { + AZ::u32 subId = AZ::Crc32(filePath.c_str()); + context.GetProductList().AddProduct( + filePath, + context.GetScene().GetSourceGuid(), + azrtti_typeid(), + {}, + AZStd::make_optional(subId)); + + return true; + } + return false; + } + + Events::ProcessingResult PrefabGroupBehavior::OnPrepareForExport(Events::PreExportEventContext& context) const + { + AZStd::vector prefabGroupCollection; + const Containers::SceneManifest& manifest = context.GetScene().GetManifest(); + + for (size_t i = 0; i < manifest.GetEntryCount(); ++i) + { + const auto* group = azrtti_cast(manifest.GetValue(i).get()); + if (group) + { + prefabGroupCollection.push_back(group); + } + } + + if (prefabGroupCollection.empty()) + { + return AZ::SceneAPI::Events::ProcessingResult::Ignored; + } + + for (const auto* prefabGroup : prefabGroupCollection) + { + auto result = CreateProductAssetData(prefabGroup); + if (!result) + { + return Events::ProcessingResult::Failure; + } + + if (WriteOutProductAsset(context, prefabGroup, *result.get()) == false) + { + return Events::ProcessingResult::Failure; + } + } + + return Events::ProcessingResult::Success; + } + + void PrefabGroupBehavior::Reflect(ReflectContext* context) + { + AZ::SceneAPI::SceneData::PrefabGroup::Reflect(context); + Prefab::ProceduralPrefabAsset::Reflect(context); + + SerializeContext* serializeContext = azrtti_cast(context); + if (serializeContext) + { + serializeContext->Class()->Version(1); + } + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.h new file mode 100644 index 0000000000..b57d30695a --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AZ::SceneAPI::Events +{ + class PreExportEventContext; +} + +namespace AZ::SceneAPI::Behaviors +{ + class PrefabGroupBehavior + : public SceneCore::BehaviorComponent + { + public: + AZ_COMPONENT(PrefabGroupBehavior, "{13DC2819-CAC2-4977-91D7-C870087072AB}", SceneCore::BehaviorComponent); + + ~PrefabGroupBehavior() override = default; + + void Activate() override; + void Deactivate() override; + static void Reflect(ReflectContext* context); + + private: + Events::ProcessingResult OnPrepareForExport(Events::PreExportEventContext& context) const; + AZStd::unique_ptr CreateProductAssetData(const SceneData::PrefabGroup* prefabGroup) const; + + bool WriteOutProductAsset( + Events::PreExportEventContext& context, + const SceneData::PrefabGroup* prefabGroup, + const rapidjson::Document& doc) const; + + struct ExportEventHandler; + AZStd::shared_ptr m_exportEventHandler; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp new file mode 100644 index 0000000000..9fb935ce9f --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp @@ -0,0 +1,161 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include + +namespace UnitTest +{ + TEST_F(PrefabBuilderTests, PrefabGroup_FindsRequiredReflection_True) + { + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + + auto findElementWithName = [](const AZ::SerializeContext::ClassData* classData, const char* name) + { + auto it = AZStd::find_if(classData->m_elements.begin(), classData->m_elements.end(), [name](const auto& element) + { + return strcmp(element.m_name, name) == 0; + }); + return it != classData->m_elements.end(); + }; + + auto* prefabGroupClassData = serializeContext->FindClassData(azrtti_typeid()); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "name")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "nodeSelectionList")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "rules")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "id")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "prefabDomData")); + + m_app.GetJsonRegistrationContext()->EnableRemoveReflection(); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_JsonWithPrefabArbitraryPrefab_Works) + { + namespace JSR = AZ::JsonSerializationResult; + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + AZ::Prefab::ProceduralPrefabAsset::Reflect(serializeContext); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + AZ::Prefab::ProceduralPrefabAsset::Reflect(m_app.GetJsonRegistrationContext()); + + // fill out a PrefabGroup using JSON + AZStd::string_view input = R"JSON( + { + "name" : "tester", + "id" : "{49698DBC-B447-49EF-9B56-25BB29342AFB}", + "prefabDomData" : {"foo": "bar"} + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + ASSERT_FALSE(document.HasParseError()); + + SceneData::PrefabGroup instancePrefabGroup; + EXPECT_EQ(AZ::JsonSerialization::Load(instancePrefabGroup, document).GetOutcome(), JSR::Outcomes::PartialDefaults); + + ASSERT_TRUE(instancePrefabGroup.GetPrefabDomRef().has_value()); + const AzToolsFramework::Prefab::PrefabDom& dom = instancePrefabGroup.GetPrefabDomRef().value(); + EXPECT_TRUE(dom.IsObject()); + EXPECT_TRUE(dom.GetObject().HasMember("foo")); + EXPECT_STREQ(dom.GetObject().FindMember("foo")->value.GetString(), "bar"); + EXPECT_STREQ(instancePrefabGroup.GetName().c_str(), "tester"); + EXPECT_STREQ(instancePrefabGroup.GetId().ToString().c_str(), "{49698DBC-B447-49EF-9B56-25BB29342AFB}"); + + m_app.GetJsonRegistrationContext()->EnableRemoveReflection(); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + AZ::Prefab::ProceduralPrefabAsset::Reflect(m_app.GetJsonRegistrationContext()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_InvalidPrefabJson_Detected) + { + using namespace AZ::SceneAPI; + + AZStd::string_view input = R"JSON( + { + bad json that will not parse + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + + SceneData::PrefabGroup prefabGroup; + prefabGroup.SetId(AZ::Uuid::CreateRandom()); + prefabGroup.SetName("tester"); + prefabGroup.SetPrefabDom(AZStd::move(document)); + + const AzToolsFramework::Prefab::PrefabDom& dom = prefabGroup.GetPrefabDomRef().value(); + EXPECT_TRUE(dom.IsNull()); + EXPECT_STREQ("tester", prefabGroup.GetName().c_str()); + } + + struct PrefabBuilderBehaviorTests + : public PrefabBuilderTests + { + void SetUp() override + { + using namespace AZ::SceneAPI; + + PrefabBuilderTests::SetUp(); + SceneData::PrefabGroup::Reflect(m_app.GetSerializeContext()); + SceneData::PrefabGroup::Reflect(m_app.GetBehaviorContext()); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + m_scriptContext = AZStd::make_unique(); + m_scriptContext->BindTo(m_app.GetBehaviorContext()); + } + + void TearDown() override + { + using namespace AZ::SceneAPI; + m_app.GetJsonRegistrationContext()->EnableRemoveReflection(); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + + m_scriptContext.reset(); + PrefabBuilderTests::TearDown(); + } + + void ExpectExecute(AZStd::string_view script) + { + EXPECT_TRUE(m_scriptContext->Execute(script.data())); + } + + AZStd::unique_ptr m_scriptContext; + }; + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupClass_Exists) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("assert(group)"); + ExpectExecute("assert(group.name)"); + ExpectExecute("assert(group.id)"); + ExpectExecute("assert(group.prefabDomData)"); + } + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupAssignment_Works) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("group.name = 'tester'"); + ExpectExecute("group.id = Uuid.CreateString('{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}', 0)"); + ExpectExecute("group.prefabDomData = '{\"foo\": \"bar\"}'"); + ExpectExecute("assert(group.name == 'tester')"); + ExpectExecute("assert(tostring(group.id) == '{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}')"); + ExpectExecute("assert(group.prefabDomData == '{\\n \"foo\": \"bar\"\\n}')"); + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.cpp new file mode 100644 index 0000000000..17ed4d9c0c --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.cpp @@ -0,0 +1,185 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ::Prefab +{ + // AssetTypeInfoHandler + + class PrefabGroupAssetHandler::AssetTypeInfoHandler final + : public AZ::AssetTypeInfoBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(AssetTypeInfoHandler, AZ::SystemAllocator, 0); + AssetTypeInfoHandler(); + ~AssetTypeInfoHandler() override; + AZ::Data::AssetType GetAssetType() const override; + const char* GetAssetTypeDisplayName() const override; + const char* GetGroup() const override; + const char* GetBrowserIcon() const override; + void GetAssetTypeExtensions(AZStd::vector& extensions) override; + }; + + PrefabGroupAssetHandler::AssetTypeInfoHandler::AssetTypeInfoHandler() + { + AZ::AssetTypeInfoBus::Handler::BusConnect(azrtti_typeid()); + } + + PrefabGroupAssetHandler::AssetTypeInfoHandler::~AssetTypeInfoHandler() + { + AZ::AssetTypeInfoBus::Handler::BusDisconnect(azrtti_typeid()); + } + + AZ::Data::AssetType PrefabGroupAssetHandler::AssetTypeInfoHandler::GetAssetType() const + { + return azrtti_typeid(); + } + + const char* PrefabGroupAssetHandler::AssetTypeInfoHandler::GetAssetTypeDisplayName() const + { + return "Procedural Prefab"; + } + + const char* PrefabGroupAssetHandler::AssetTypeInfoHandler::GetGroup() const + { + return "Prefab"; + } + + const char* PrefabGroupAssetHandler::AssetTypeInfoHandler::GetBrowserIcon() const + { + return "Icons/Components/Box.png"; + } + + void PrefabGroupAssetHandler::AssetTypeInfoHandler::GetAssetTypeExtensions(AZStd::vector& extensions) + { + extensions.push_back(PrefabGroupAssetHandler::s_Extension); + } + + // PrefabGroupAssetHandler + + AZStd::string_view PrefabGroupAssetHandler::s_Extension{ "procprefab" }; + + PrefabGroupAssetHandler::PrefabGroupAssetHandler() + { + auto assetCatalog = AZ::Data::AssetCatalogRequestBus::FindFirstHandler(); + if (assetCatalog) + { + assetCatalog->EnableCatalogForAsset(azrtti_typeid()); + assetCatalog->AddExtension(s_Extension.data()); + } + if (AZ::Data::AssetManager::IsReady()) + { + AZ::Data::AssetManager::Instance().RegisterHandler(this, azrtti_typeid()); + } + m_assetTypeInfoHandler = AZStd::make_shared(); + } + + PrefabGroupAssetHandler::~PrefabGroupAssetHandler() + { + m_assetTypeInfoHandler.reset(); + if (AZ::Data::AssetManager::IsReady()) + { + AZ::Data::AssetManager::Instance().UnregisterHandler(this); + } + } + + AZ::Data::AssetData* PrefabGroupAssetHandler::CreateAsset([[maybe_unused]] const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) + { + if (type != azrtti_typeid()) + { + AZ_Error("prefab", false, "Invalid asset type! Only handle 'ProceduralPrefabAsset'"); + return nullptr; + } + return aznew ProceduralPrefabAsset{}; + } + + void PrefabGroupAssetHandler::DestroyAsset(AZ::Data::AssetData* ptr) + { + // Note: the PrefabLoaderInterface will handle the lifetime of the Prefab Template + delete ptr; + } + + void PrefabGroupAssetHandler::GetHandledAssetTypes(AZStd::vector& assetTypes) + { + assetTypes.push_back(azrtti_typeid()); + } + + AZ::Data::AssetHandler::LoadResult PrefabGroupAssetHandler::LoadAssetData( + const AZ::Data::Asset& asset, + AZStd::shared_ptr stream, + [[maybe_unused]] const AZ::Data::AssetFilterCB& assetLoadFilterCB) + { + using namespace AzToolsFramework::Prefab; + + auto* proceduralPrefabAsset = asset.GetAs(); + if (!proceduralPrefabAsset) + { + AZ_Error("prefab", false, "This should be a ProceduralPrefabAsset type, as this is the only type we process!"); + return LoadResult::Error; + } + + AZStd::string buffer; + buffer.resize(stream->GetLoadedSize()); + stream->Read(stream->GetLoadedSize(), buffer.data()); + + auto jsonOutcome = AZ::JsonSerializationUtils::ReadJsonString(buffer); + if (jsonOutcome.IsSuccess() == false) + { + AZ_Error("prefab", false, "Asset JSON failed to compile %s", jsonOutcome.GetError().c_str()); + return LoadResult::Error; + } + const auto& jsonDoc = jsonOutcome.GetValue(); + + if (jsonDoc.IsObject() == false) + { + return LoadResult::Error; + } + + if (jsonDoc.FindMember("Source") == jsonDoc.MemberEnd()) + { + return LoadResult::Error; + } + const auto& templateName = jsonDoc["Source"]; + + AZStd::string stringJson; + auto stringOutcome = AZ::JsonSerializationUtils::WriteJsonString(jsonDoc, stringJson); + if (stringOutcome.IsSuccess() == false) + { + AZ_Error("prefab", false, "Could not write to JSON string %s", stringOutcome.GetError().c_str()); + return LoadResult::Error; + } + + // prepare the template + auto* prefabLoaderInterface = AZ::Interface::Get(); + if (!prefabLoaderInterface) + { + return LoadResult::Error; + } + + auto templateId = prefabLoaderInterface->LoadTemplateFromString(stringJson.data(), templateName.GetString()); + if (templateId == InvalidTemplateId) + { + return LoadResult::Error; + } + + proceduralPrefabAsset->SetTemplateId(templateId); + proceduralPrefabAsset->SetTemplateName(templateName.GetString()); + return LoadResult::LoadComplete; + } + + AZStd::unique_ptr s_PrefabGroupAssetHandler; +} + diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.h new file mode 100644 index 0000000000..301f8a467a --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace AZ::Prefab +{ + class PrefabGroupAssetHandler final + : public AZ::Data::AssetHandler + { + public: + AZ_CLASS_ALLOCATOR(PrefabGroupAssetHandler, AZ::SystemAllocator, 0); + PrefabGroupAssetHandler(); + ~PrefabGroupAssetHandler() override; + + static AZStd::string_view s_Extension; + + protected: + AZ::Data::AssetData* CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) override; + void DestroyAsset(AZ::Data::AssetData* ptr) override; + void GetHandledAssetTypes(AZStd::vector& assetTypes) override; + AZ::Data::AssetHandler::LoadResult LoadAssetData( + const AZ::Data::Asset& asset, + AZStd::shared_ptr stream, + const AZ::Data::AssetFilterCB& assetLoadFilterCB) override; + + class AssetTypeInfoHandler; + AZStd::shared_ptr m_assetTypeInfoHandler; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroupTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroupTests.cpp new file mode 100644 index 0000000000..a63c0caa69 --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroupTests.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace UnitTest +{ + TEST_F(PrefabBuilderTests, PrefabGroup_FindsRequiredReflection_True) + { + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + + auto findElementWithName = [](const AZ::SerializeContext::ClassData* classData, const char* name) + { + auto it = AZStd::find_if(classData->m_elements.begin(), classData->m_elements.end(), [name](const auto& element) + { + return strcmp(element.m_name, name) == 0; + }); + return it != classData->m_elements.end(); + }; + + auto* prefabGroupClassData = serializeContext->FindClassData(azrtti_typeid()); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "name")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "nodeSelectionList")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "rules")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "id")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "prefabDomBuffer")); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_JsonWithPrefabArbitraryPrefab_Works) + { + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + + // fill out a PrefabGroup using JSON + AZStd::string_view input = R"JSON( + { + "name" : "tester", + "id" : "{49698DBC-B447-49EF-9B56-25BB29342AFB}", + "prefabDomBuffer" : "{\"foo\":\"bar\"}" + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + ASSERT_FALSE(document.HasParseError()); + + SceneData::PrefabGroup instancePrefabGroup; + AZ::JsonSerialization::Load(instancePrefabGroup, document); + + const auto& dom = instancePrefabGroup.GetPrefabDom(); + EXPECT_TRUE(dom.GetObject().HasMember("foo")); + EXPECT_STREQ(dom.GetObject().FindMember("foo")->value.GetString(), "bar"); + EXPECT_STREQ(instancePrefabGroup.GetName().c_str(), "tester"); + EXPECT_STREQ( + instancePrefabGroup.GetId().ToString().c_str(), + "{49698DBC-B447-49EF-9B56-25BB29342AFB}"); + EXPECT_TRUE(instancePrefabGroup.GetPrefabDom().IsObject()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_InvalidPrefabJson_Detected) + { + using namespace AZ::SceneAPI; + + AZStd::string_view input = R"JSON( + { + bad json that will not parse + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + + SceneData::PrefabGroup prefabGroup; + prefabGroup.SetId(AZStd::move(AZ::Uuid::CreateRandom())); + prefabGroup.SetName(AZStd::move("tester")); + prefabGroup.SetPrefabDom(AZStd::move(document)); + + const auto& dom = prefabGroup.GetPrefabDom(); + EXPECT_TRUE(dom.IsNull()); + EXPECT_STREQ("tester", prefabGroup.GetName().c_str()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_InvalidPrefabJsonBuffer_Detected) + { + using namespace AZ::SceneAPI; + + AZStd::string_view inputJson = R"JSON( + { + bad json that will not parse + })JSON"; + + SceneData::PrefabGroup prefabGroup; + prefabGroup.SetId(AZStd::move(AZ::Uuid::CreateRandom())); + prefabGroup.SetName(AZStd::move("tester")); + prefabGroup.SetPrefabDomBuffer(std::move(inputJson)); + + const auto& dom = prefabGroup.GetPrefabDom(); + EXPECT_TRUE(dom.IsNull()); + EXPECT_STREQ("tester", prefabGroup.GetName().c_str()); + } + + struct PrefabBuilderBehaviorTests + : public PrefabBuilderTests + { + void SetUp() override + { + using namespace AZ::SceneAPI; + + PrefabBuilderTests::SetUp(); + SceneData::PrefabGroup::Reflect(m_app.GetSerializeContext()); + SceneData::PrefabGroup::Reflect(m_app.GetBehaviorContext()); + m_scriptContext = AZStd::make_unique(); + m_scriptContext->BindTo(m_app.GetBehaviorContext()); + } + + void TearDown() override + { + m_scriptContext.reset(); + PrefabBuilderTests::TearDown(); + } + + void ExpectExecute(AZStd::string_view script) + { + EXPECT_TRUE(m_scriptContext->Execute(script.data())); + } + + AZStd::unique_ptr m_scriptContext; + }; + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupClass_Exists) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("assert(group)"); + ExpectExecute("assert(group.name)"); + ExpectExecute("assert(group.id)"); + ExpectExecute("assert(group.prefabDomBuffer)"); + } + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupAssignment_Works) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("group.name = 'tester'"); + ExpectExecute("group.id = Uuid.CreateString('{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}', 0)"); + ExpectExecute("group.prefabDomBuffer = '{}'"); + ExpectExecute("assert(group.name == 'tester')"); + ExpectExecute("assert(tostring(group.id) == '{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}')"); + ExpectExecute("assert(group.prefabDomBuffer == '{}')"); + } +} diff --git a/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake b/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake index 9cdf90d951..4f3bf860be 100644 --- a/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake +++ b/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake @@ -9,4 +9,11 @@ set(FILES PrefabBuilderComponent.h PrefabBuilderComponent.cpp + PrefabGroup/IPrefabGroup.h + PrefabGroup/PrefabGroup.cpp + PrefabGroup/PrefabGroup.h + PrefabGroup/PrefabGroupBehavior.cpp + PrefabGroup/PrefabGroupBehavior.h + PrefabGroup/ProceduralAssetHandler.cpp + PrefabGroup/ProceduralAssetHandler.h ) diff --git a/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake b/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake index 3f1ae0388b..faf2f88b5e 100644 --- a/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake +++ b/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake @@ -9,4 +9,7 @@ set(FILES PrefabBuilderTests.h PrefabBuilderTests.cpp + PrefabGroup/PrefabGroupTests.cpp + PrefabGroup/PrefabBehaviorTests.cpp + PrefabGroup/PrefabBehaviorTests.inl ) diff --git a/Gems/PythonAssetBuilder/Code/Source/PythonBuilderNotificationHandler.h b/Gems/PythonAssetBuilder/Code/Source/PythonBuilderNotificationHandler.h index 669ef21914..099bc9d587 100644 --- a/Gems/PythonAssetBuilder/Code/Source/PythonBuilderNotificationHandler.h +++ b/Gems/PythonAssetBuilder/Code/Source/PythonBuilderNotificationHandler.h @@ -9,6 +9,7 @@ #include #include +#include namespace PythonAssetBuilder { diff --git a/Gems/PythonAssetBuilder/Code/Source/PythonBuilderWorker.cpp b/Gems/PythonAssetBuilder/Code/Source/PythonBuilderWorker.cpp index 0e05c5e7bf..f06b4a22d7 100644 --- a/Gems/PythonAssetBuilder/Code/Source/PythonBuilderWorker.cpp +++ b/Gems/PythonAssetBuilder/Code/Source/PythonBuilderWorker.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -56,7 +57,7 @@ namespace PythonAssetBuilder { this->ProcessJob(request, response); }; - + // connect to the shutdown signal handler AssetBuilderCommandBus::Handler::BusConnect(m_assetBuilderDesc->m_busId); diff --git a/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py b/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py index 2c63e5f90c..2578efeae2 100755 --- a/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py +++ b/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py @@ -104,6 +104,15 @@ class SceneManifest(): self.manifest['values'].append(meshGroup) return meshGroup + def add_prefab_group(self, name, id, json) -> dict: + prefabGroup = {} + prefabGroup['$type'] = '{99FE3C6F-5B55-4D8B-8013-2708010EC715} PrefabGroup' + prefabGroup['name'] = name + prefabGroup['id'] = id + prefabGroup['prefabDomData'] = json + self.manifest['values'].append(prefabGroup) + return prefabGroup + def mesh_group_select_node(self, meshGroup, nodeName): meshGroup['nodeSelectionList']['selectedNodes'].append(nodeName) diff --git a/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp b/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp index a7bd193fd7..83a158dd18 100644 --- a/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp +++ b/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp @@ -202,9 +202,6 @@ namespace QtForPython QtBootstrapParameters QtForPythonSystemComponent::GetQtBootstrapParameters() const { QtBootstrapParameters params; - - char devroot[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devroot@", devroot, AZ_MAX_PATH_LEN); #if !defined(Q_OS_WIN) #error Unsupported OS platform for this QtForPython gem diff --git a/Gems/SaveData/Code/Source/SaveDataSystemComponent.cpp b/Gems/SaveData/Code/Source/SaveDataSystemComponent.cpp index dad6e24abc..e92df0da68 100644 --- a/Gems/SaveData/Code/Source/SaveDataSystemComponent.cpp +++ b/Gems/SaveData/Code/Source/SaveDataSystemComponent.cpp @@ -172,14 +172,15 @@ namespace SaveData // This is safe access outside the lock guard because we only remove elements from the list // after the thread completion flag has been set to true (see also JoinAllCompletedThreads). - threadCompletionPair->m_thread = AZStd::make_unique([&threadCompleteFlag = threadCompletionPair->m_threadComplete, - dataBuffer = AZStd::move(saveDataBufferParams.dataBuffer), - dataBufferSize = saveDataBufferParams.dataBufferSize, - dataBufferName = saveDataBufferParams.dataBufferName, - onSavedCallback = saveDataBufferParams.callback, - localUserId = saveDataBufferParams.localUserId, - absoluteFilePath, - useTemporaryFile]() + threadCompletionPair->m_thread = AZStd::make_unique(saveThreadDesc, + [&threadCompleteFlag = threadCompletionPair->m_threadComplete, + dataBuffer = AZStd::move(saveDataBufferParams.dataBuffer), + dataBufferSize = saveDataBufferParams.dataBufferSize, + dataBufferName = saveDataBufferParams.dataBufferName, + onSavedCallback = saveDataBufferParams.callback, + localUserId = saveDataBufferParams.localUserId, + absoluteFilePath, + useTemporaryFile]() { SaveDataNotifications::Result result = SaveDataNotifications::Result::ErrorUnspecified; @@ -234,7 +235,7 @@ namespace SaveData // Set the thread completion flag so it will be joined in JoinAllCompletedThreads. threadCompleteFlag = true; - }, &saveThreadDesc); + }); if (waitForCompletion) { @@ -301,9 +302,10 @@ namespace SaveData // This is safe access outside the lock guard because we only remove elements from the list // after the thread completion flag has been set to true (see also JoinAllCompletedThreads). - threadCompletionPair->m_thread = AZStd::make_unique([&threadCompleteFlag = threadCompletionPair->m_threadComplete, - loadDataBufferParams, - absoluteFilePath]() + threadCompletionPair->m_thread = AZStd::make_unique(loadThreadDesc, + [&threadCompleteFlag = threadCompletionPair->m_threadComplete, + loadDataBufferParams, + absoluteFilePath]() { SaveDataNotifications::DataBuffer dataBuffer = nullptr; AZ::u64 dataBufferSize = 0; @@ -352,7 +354,7 @@ namespace SaveData // Set the thread completion flag so it will be joined in JoinAllCompletedThreads. threadCompleteFlag = true; - }, &loadThreadDesc); + }); if (waitForCompletion) { diff --git a/Gems/SceneProcessing/Code/Source/Config/Components/SceneProcessingConfigSystemComponent.cpp b/Gems/SceneProcessing/Code/Source/Config/Components/SceneProcessingConfigSystemComponent.cpp index ea0c3520bf..281def11b5 100644 --- a/Gems/SceneProcessing/Code/Source/Config/Components/SceneProcessingConfigSystemComponent.cpp +++ b/Gems/SceneProcessing/Code/Source/Config/Components/SceneProcessingConfigSystemComponent.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include diff --git a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp index c1a1252c6b..1d3cd60e49 100644 --- a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp +++ b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,9 @@ #include #include +#include +#include +#include #include #include @@ -81,6 +85,93 @@ namespace SceneBuilder return m_cachedFingerprint.c_str(); } + void SceneBuilderWorker::PopulateSourceDependencies(const AZStd::string& manifestJson, AZStd::vector& sourceFileDependencies) + { + auto readJsonOutcome = AZ::JsonSerializationUtils::ReadJsonString(manifestJson); + AZStd::string errorMsg; + if (!readJsonOutcome.IsSuccess()) + { + // This may be an old format xml file. We don't have any dependencies in the old format so there's no point trying to parse an xml + return; + } + + rapidjson::Document document = readJsonOutcome.TakeValue(); + + auto manifestObject = document.GetObject(); + auto valuesIterator = manifestObject.FindMember("values"); + auto valuesArray = valuesIterator->value.GetArray(); + + AZStd::vector paths; + AZ::SceneAPI::Events::AssetImportRequestBus::Broadcast( + &AZ::SceneAPI::Events::AssetImportRequestBus::Events::GetManifestDependencyPaths, paths); + + for (const auto& value : valuesArray) + { + auto object = value.GetObject(); + + for (const auto& path : paths) + { + rapidjson::Pointer pointer(path.c_str()); + + auto dependencyValue = pointer.Get(object); + + if (dependencyValue && dependencyValue->IsString()) + { + AZStd::string dependency = dependencyValue->GetString(); + + sourceFileDependencies.emplace_back(AssetBuilderSDK::SourceFileDependency( + dependency, AZ::Uuid::CreateNull(), AssetBuilderSDK::SourceFileDependency::SourceFileDependencyType::Absolute)); + } + } + } + } + + bool SceneBuilderWorker::ManifestDependencyCheck(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response) + { + AZStd::string manifestExtension; + AZStd::string generatedManifestExtension; + + AZ::SceneAPI::Events::AssetImportRequestBus::Broadcast( + &AZ::SceneAPI::Events::AssetImportRequestBus::Events::GetManifestExtension, manifestExtension); + AZ::SceneAPI::Events::AssetImportRequestBus::Broadcast( + &AZ::SceneAPI::Events::AssetImportRequestBus::Events::GetGeneratedManifestExtension, generatedManifestExtension); + + if (manifestExtension.empty() || generatedManifestExtension.empty()) + { + AZ_Error("SceneBuilderWorker", false, "Failed to get scene manifest extension"); + return false; + } + + AZ::SettingsRegistryInterface::FixedValueString assetCacheRoot; + AZ::SettingsRegistry::Get()->Get(assetCacheRoot, AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder); + + auto manifestPath = (AZ::IO::Path(request.m_watchFolder) / (request.m_sourceFile + manifestExtension)); + auto generatedManifestPath = (AZ::IO::Path(assetCacheRoot) / (request.m_sourceFile + generatedManifestExtension)); + + auto populateDependenciesFunc = [&response](const AZStd::string& path) + { + auto readFileOutcome = AZ::Utils::ReadFile(path, AZ::SceneAPI::Containers::SceneManifest::MaxSceneManifestFileSizeInBytes); + if (!readFileOutcome.IsSuccess()) + { + AZ_Error("SceneBuilderWorker", false, "%s", readFileOutcome.GetError().c_str()); + return; + } + + PopulateSourceDependencies(readFileOutcome.TakeValue(), response.m_sourceFileDependencyList); + }; + + if (AZ::IO::FileIOBase::GetInstance()->Exists(manifestPath.Native().c_str())) + { + populateDependenciesFunc(manifestPath.Native()); + } + else if (AZ::IO::FileIOBase::GetInstance()->Exists(generatedManifestPath.Native().c_str())) + { + populateDependenciesFunc(generatedManifestPath.Native()); + } + + return true; + } + void SceneBuilderWorker::CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response) { // Check for shutdown @@ -118,6 +209,11 @@ namespace SceneBuilder sourceFileDependencyInfo.m_sourceDependencyType = AssetBuilderSDK::SourceFileDependency::SourceFileDependencyType::Wildcards; response.m_sourceFileDependencyList.push_back(sourceFileDependencyInfo); + if (!ManifestDependencyCheck(request, response)) + { + return; + } + response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success; } diff --git a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h index 3ecc657a3a..32456f9b2d 100644 --- a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h +++ b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h @@ -11,6 +11,7 @@ #include #include #include +#include namespace AssetBuilderSDK { @@ -45,11 +46,15 @@ namespace SceneBuilder public: ~SceneBuilderWorker() override = default; + void CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response); void ProcessJob(const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response); void ShutDown() override; const char* GetFingerprint() const; + static void PopulateSourceDependencies( + const AZStd::string& manifestJson, AZStd::vector& sourceFileDependencies); + static bool ManifestDependencyCheck(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response); static AZ::Uuid GetUUID(); void PopulateProductDependencies(const AZ::SceneAPI::Events::ExportProduct& exportProduct, const char* watchFolder, AssetBuilderSDK::JobProduct& jobProduct) const; diff --git a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp index a4da836aeb..ba1a186e5a 100644 --- a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp +++ b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp @@ -11,11 +11,14 @@ #include #include #include +#include #include #include #include +#include #include #include +#include using namespace AZ; using namespace SceneBuilder; @@ -36,13 +39,12 @@ protected: m_app.Start(AZ::ComponentApplication::Descriptor()); AZ::Debug::TraceMessageBus::Handler::BusConnect(); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); m_workingDirectory = m_app.GetExecutableFolder(); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", m_workingDirectory); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", m_workingDirectory); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", m_workingDirectory); } void TearDown() override @@ -78,7 +80,7 @@ protected: } void TestSuccessCase(const SceneAPI::Events::ExportProduct& exportProduct, - const AssetBuilderSDK::ProductPathDependency* expectedPathDependency = nullptr, + const AssetBuilderSDK::ProductPathDependency* expectedPathDependency = nullptr, const AZ::Uuid* expectedProductDependency = nullptr) { AssetBuilderSDK::ProductPathDependencySet expectedPathDependencies; @@ -86,13 +88,13 @@ protected: { expectedPathDependencies.emplace(*expectedPathDependency); } - + AZStd::vector expectedProductDependencies; if (expectedProductDependency) { expectedProductDependencies.push_back(*expectedProductDependency); } - + TestSuccessCase(exportProduct, expectedPathDependencies, expectedProductDependencies); } @@ -121,7 +123,7 @@ TEST_F(SceneBuilderTests, SceneBuilderWorker_ExportProductDependencies_PathDepen const char* absolutePathToFile = "/some/test/file.mtl"; #endif // AZ_TRAIT_OS_USE_WINDOWS_FILE_PATHS AssetBuilderSDK::ProductPathDependency expectedPathDependency(absolutePathToFile, AssetBuilderSDK::ProductPathDependencyType::SourceFile); - + SceneAPI::Events::ExportProduct product("testExportFile", AZ::Uuid::CreateRandom(), AZ::Data::AssetType::CreateNull(), u8(0), AZStd::nullopt); product.m_legacyPathDependencies.push_back(absolutePathToFile); TestSuccessCase(product, &expectedPathDependency); @@ -133,7 +135,7 @@ TEST_F(SceneBuilderTests, SceneBuilderWorker_ExportProductDependencies_PathDepen const char* relativeDependencyPathToFile = "some/test/file.mtl"; AssetBuilderSDK::ProductPathDependency expectedPathDependency(relativeDependencyPathToFile, AssetBuilderSDK::ProductPathDependencyType::ProductFile); - + SceneAPI::Events::ExportProduct product("testExportFile", AZ::Uuid::CreateRandom(), AZ::Data::AssetType::CreateNull(), u8(0), AZStd::nullopt); product.m_legacyPathDependencies.push_back(relativeDependencyPathToFile); @@ -194,3 +196,200 @@ TEST_F(SceneBuilderTests, SceneBuilderWorker_ExportProductDependencies_ProductAn TestSuccessCase(exportProduct, expectedPathDependencies, { dependencyId }); } + +struct ImportHandler + : SceneAPI::Events::AssetImportRequestBus::Handler +{ + ImportHandler() + { + BusConnect(); + } + + ~ImportHandler() override + { + BusDisconnect(); + } + + void GetManifestDependencyPaths(AZStd::vector& paths) override + { + paths.emplace_back("/scriptFilename"); + paths.emplace_back("/layer1/layer2/0/target"); + } + + void GetManifestExtension(AZStd::string& result) override + { + result = ".test"; + } + + void GetGeneratedManifestExtension(AZStd::string& result) override + { + result = ".test.gen"; + } +}; + +using SourceDependencyTests = UnitTest::ScopedAllocatorSetupFixture; + +namespace SourceDependencyJson +{ + constexpr const char* TestJson = R"JSON( +{ + "values": [ + { + "$type": "Test1", + "scriptFilename": "a/test/path.png" + }, + { + "$type": "Test2", + "layer1" : { + "layer2" : [ + { + "target": "value.png", + "otherData": "value2.png" + }, + { + "target" : "wrong.png" + } + ] + } + } + ] +} + )JSON"; +} + +TEST_F(SourceDependencyTests, SourceDependencyTest) +{ + ImportHandler handler; + AZStd::vector dependencies; + + SceneBuilderWorker::PopulateSourceDependencies(SourceDependencyJson::TestJson, dependencies); + + ASSERT_EQ(dependencies.size(), 2); + ASSERT_STREQ(dependencies[0].m_sourceFileDependencyPath.c_str(), "a/test/path.png"); + ASSERT_STREQ(dependencies[1].m_sourceFileDependencyPath.c_str(), "value.png"); +} + +struct SettingsRegistryMock : AZ::Interface::Registrar +{ + bool Get(FixedValueString& result, AZStd::string_view) const override + { + result = "cache"; + return true; + } + + void SetApplyPatchSettings(const AZ::JsonApplyPatchSettings& /*applyPatchSettings*/) override{} + void GetApplyPatchSettings(AZ::JsonApplyPatchSettings& /*applyPatchSettings*/) override{} + + MOCK_CONST_METHOD1(GetType, Type (AZStd::string_view)); + MOCK_CONST_METHOD2(Visit, bool (Visitor&, AZStd::string_view)); + MOCK_CONST_METHOD2(Visit, bool (const VisitorCallback&, AZStd::string_view)); + MOCK_METHOD1(RegisterNotifier, NotifyEventHandler (const NotifyCallback&)); + MOCK_METHOD1(RegisterNotifier, NotifyEventHandler (NotifyCallback&&)); + MOCK_METHOD1(RegisterPreMergeEvent, PreMergeEventHandler (const PreMergeEventCallback&)); + MOCK_METHOD1(RegisterPreMergeEvent, PreMergeEventHandler (PreMergeEventCallback&&)); + MOCK_METHOD1(RegisterPostMergeEvent, PostMergeEventHandler (const PostMergeEventCallback&)); + MOCK_METHOD1(RegisterPostMergeEvent, PostMergeEventHandler (PostMergeEventCallback&&)); + MOCK_CONST_METHOD2(Get, bool (bool&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (s64&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (u64&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (double&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (AZStd::string&, AZStd::string_view)); + MOCK_CONST_METHOD3(GetObject, bool (void*, Uuid, AZStd::string_view)); + MOCK_METHOD2(Set, bool (AZStd::string_view, bool)); + MOCK_METHOD2(Set, bool (AZStd::string_view, s64)); + MOCK_METHOD2(Set, bool (AZStd::string_view, u64)); + MOCK_METHOD2(Set, bool (AZStd::string_view, double)); + MOCK_METHOD2(Set, bool (AZStd::string_view, AZStd::string_view)); + MOCK_METHOD2(Set, bool (AZStd::string_view, const char*)); + MOCK_METHOD3(SetObject, bool (AZStd::string_view, const void*, Uuid)); + MOCK_METHOD1(Remove, bool (AZStd::string_view)); + MOCK_METHOD3(MergeCommandLineArgument, bool (AZStd::string_view, AZStd::string_view, const CommandLineArgumentSettings&)); + MOCK_METHOD2(MergeSettings, bool (AZStd::string_view, Format)); + MOCK_METHOD4(MergeSettingsFile, bool (AZStd::string_view, Format, AZStd::string_view, AZStd::vector*)); + MOCK_METHOD5(MergeSettingsFolder, bool (AZStd::string_view, const Specializations&, AZStd::string_view, AZStd::string_view, AZStd::vector*)); + MOCK_METHOD1(SetUseFileIO, void (bool)); +}; + +struct SourceDependencyMockedIOTests : UnitTest::ScopedAllocatorSetupFixture + , UnitTest::SetRestoreFileIOBaseRAII +{ + SourceDependencyMockedIOTests() + : UnitTest::SetRestoreFileIOBaseRAII(m_ioMock) + { + + } + + void SetUp() override + { + using namespace ::testing; + + ON_CALL(m_ioMock, Open(_, _, _)) + .WillByDefault(Invoke( + [](auto, auto, IO::HandleType& handle) + { + handle = 1234; + return AZ::IO::Result(AZ::IO::ResultCode::Success); + })); + + ON_CALL(m_ioMock, Size(An(), _)).WillByDefault(Invoke([](auto, AZ::u64& size) + { + size = strlen(SourceDependencyJson::TestJson); + return AZ::IO::ResultCode::Success; + })); + + EXPECT_CALL(m_ioMock, Read(_, _, _, _, _)) + .WillRepeatedly(Invoke( + [](auto, void* buffer, auto, auto, AZ::u64* bytesRead) + { + memcpy(buffer, SourceDependencyJson::TestJson, strlen(SourceDependencyJson::TestJson)); + *bytesRead = strlen(SourceDependencyJson::TestJson); + return AZ::IO::ResultCode::Success; + })); + + EXPECT_CALL(m_ioMock, Close(_)).WillRepeatedly(Return(AZ::IO::ResultCode::Success)); + } + + IO::NiceFileIOBaseMock m_ioMock; +}; + +TEST_F(SourceDependencyMockedIOTests, RegularManifestHasPriority) +{ + ImportHandler handler; + SettingsRegistryMock settingsRegistry; + + AssetBuilderSDK::CreateJobsRequest request; + AssetBuilderSDK::CreateJobsResponse response; + + request.m_sourceFile = "file.fbx"; + + using namespace ::testing; + + AZStd::string genPath = AZStd::string("cache").append(1, AZ_TRAIT_OS_PATH_SEPARATOR).append("file.fbx.test.gen"); + + EXPECT_CALL(m_ioMock, Exists(StrEq("file.fbx.test"))).WillRepeatedly(Return(true)); + EXPECT_CALL(m_ioMock, Exists(StrEq(genPath.c_str()))).Times(Exactly(0)); + + ASSERT_TRUE(SceneBuilderWorker::ManifestDependencyCheck(request, response)); + ASSERT_EQ(response.m_sourceFileDependencyList.size(), 2); +} + +TEST_F(SourceDependencyMockedIOTests, GeneratedManifestTest) +{ + ImportHandler handler; + SettingsRegistryMock settingsRegistry; + + AssetBuilderSDK::CreateJobsRequest request; + AssetBuilderSDK::CreateJobsResponse response; + + request.m_sourceFile = "file.fbx"; + + using namespace ::testing; + + AZStd::string genPath = AZStd::string("cache").append(1, AZ_TRAIT_OS_PATH_SEPARATOR).append("file.fbx.test.gen"); + + EXPECT_CALL(m_ioMock, Exists(StrEq("file.fbx.test"))).WillRepeatedly(Return(false)); + EXPECT_CALL(m_ioMock, Exists(StrEq(genPath.c_str()))).WillRepeatedly(Return(true)); + + ASSERT_TRUE(SceneBuilderWorker::ManifestDependencyCheck(request, response)); + ASSERT_EQ(response.m_sourceFileDependencyList.size(), 2); +} diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp index 9c3cdca3e8..0eb748b2f1 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace ScriptCanvasBuilderCpp { @@ -181,12 +182,15 @@ namespace ScriptCanvasBuilder continue; } - // copy to override unused list for editor display - m_overridesUnused.push_back(*graphVariable); - auto& overrideValue = m_overridesUnused.back(); - overrideValue.DeepCopy(*graphVariable); - overrideValue.SetScriptInputControlVisibility(AZ::Edit::PropertyVisibility::Hide); - overrideValue.SetAllowSignalOnChange(false); + if (graphVariable->IsComponentProperty()) + { + // copy to override unused list for editor display + m_overridesUnused.push_back(*graphVariable); + auto& overrideValue = m_overridesUnused.back(); + overrideValue.DeepCopy(*graphVariable); + overrideValue.SetScriptInputControlVisibility(AZ::Edit::PropertyVisibility::Hide); + overrideValue.SetAllowSignalOnChange(false); + } } } diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp index 0853789b19..7d4cfec909 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp @@ -110,13 +110,12 @@ namespace ScriptCanvasBuilder const ScriptCanvas::Translation::Result translationResult = TranslateToLua(request); auto isSuccessOutcome = translationResult.IsSuccess(ScriptCanvas::Translation::TargetFlags::Lua); - if (!isSuccessOutcome.IsSuccess()) { return AZ::Failure(isSuccessOutcome.TakeError()); } - auto& translation = translationResult.m_translations.find(ScriptCanvas::Translation::TargetFlags::Lua)->second; + auto& translation = translationResult.m_translations.find(ScriptCanvas::Translation::TargetFlags::Lua)->second; AZ::Data::Asset asset; scriptAssetId.m_subId = AZ::ScriptAsset::CompiledAssetSubId; asset.Create(scriptAssetId); @@ -481,6 +480,7 @@ namespace ScriptCanvasBuilder buildEntity->Activate(); } + AZ_Assert(buildEntity->GetState() == AZ::Entity::State::Active, "build entity not active"); return sourceGraph; } diff --git a/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp b/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp index e87c82e186..0e5f11fa40 100644 --- a/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp @@ -519,7 +519,7 @@ namespace ScriptCanvasEditor if (validationResults.HasErrors()) { - AZ::Interface::Get()->GraphNeedsManualUpgrade(sm->m_asset.GetId()); + sm->MarkError("Failed to Parse"); for (auto& err : validationResults.GetEvents()) { @@ -686,7 +686,7 @@ namespace ScriptCanvasEditor void EditorGraphUpgradeMachine::OnComplete(IState::ExitStatus exitStatus) { - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnGraphUpgradeComplete, m_asset, exitStatus == IState::ExitStatus::Skipped); + UpgradeNotificationsBus::Broadcast(&UpgradeNotifications::OnGraphUpgradeComplete, m_asset, exitStatus == IState::ExitStatus::Skipped); m_asset = {}; } @@ -735,7 +735,7 @@ namespace ScriptCanvasEditor { AZ::SystemTickBus::Handler::BusDisconnect(); - OnComplete(exitStatus); + OnComplete(m_error.empty() ? exitStatus : IState::ExitStatus::Skipped); } } diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h index fdc8cbc1d8..0fb0f567e8 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h @@ -41,7 +41,7 @@ namespace ScriptCanvasEditor azrtti_typeid(), "Script Canvas", "Script Canvas Graph Asset", - "@devassets@/scriptcanvas", + "@projectroot@/scriptcanvas", ".scriptcanvas", "Script Canvas", "Untitled-%i", diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h index 4497968ffc..7e7b600081 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h @@ -215,21 +215,6 @@ namespace ScriptCanvasEditor using EditorLoggingComponentNotificationBus = AZ::EBus; - class IUpgradeRequests - { - public: - AZ_TYPE_INFO(IUpgradeRequests, "{D25318F2-4DDA-4E76-98CB-6D561BB6234D}"); - - using AssetList = AZStd::list; - virtual AssetList& GetAssetsToUpgrade() = 0; - - virtual void ClearGraphsThatNeedUpgrade() = 0; - virtual void GraphNeedsManualUpgrade(const AZ::Data::AssetId&) = 0; - virtual const AZStd::vector& GetGraphsThatNeedManualUpgrade() const = 0; - virtual bool IsUpgrading() = 0; - virtual void SetIsUpgrading(bool isUpgrading) = 0; - }; - class UpgradeNotifications : public AZ::EBusTraits { @@ -237,15 +222,11 @@ namespace ScriptCanvasEditor static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - using Bus = AZ::EBus; - virtual void OnUpgradeStart() {} - virtual void OnUpgradeComplete() {} virtual void OnUpgradeCancelled() {} virtual void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) { (void)skipped; } }; - - + using UpgradeNotificationsBus = AZ::EBus; } diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h index fb6e109156..817b883695 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h @@ -133,18 +133,23 @@ namespace ScriptCanvasEditor bool GetVerbose() const; + const AZStd::string GetError() const { return m_error; } + void SetVerbose(bool isVerbose); const AZStd::string& GetDebugPrefix() const; void SetDebugPrefix(AZStd::string_view); + void MarkError(AZStd::string_view error) { m_error = error; } + AZStd::shared_ptr m_currentState = nullptr; AZStd::vector> m_states; private: bool m_isVerbose = true; AZStd::string m_debugPrefix; + AZStd::string m_error; }; //! This state machine will collect and share a variety of data from the EditorGraph diff --git a/Gems/ScriptCanvas/Code/Editor/Settings.h b/Gems/ScriptCanvas/Code/Editor/Settings.h index 7eff40ec43..eefb7454c3 100644 --- a/Gems/ScriptCanvas/Code/Editor/Settings.h +++ b/Gems/ScriptCanvas/Code/Editor/Settings.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp index 4b60fd357c..f901915fdb 100644 --- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp +++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp @@ -6,46 +6,35 @@ * */ - -#include -#include -#include #include +#include +#include +#include +#include #include - #include - +#include #include +#include #include - -#include - +#include +#include #include - -#include #include #include -#include - +#include +#include +#include +#include +#include #include +#include +#include #include #include #include #include -#include -#include - -#include - -#include -#include - #include -#include -#include - -#include -#include namespace ScriptCanvasEditor { @@ -54,6 +43,7 @@ namespace ScriptCanvasEditor SystemComponent::SystemComponent() { AzToolsFramework::AssetSeedManagerRequests::Bus::Handler::BusConnect(); + m_versionExplorer = AZStd::make_unique(); } SystemComponent::~SystemComponent() @@ -61,7 +51,6 @@ namespace ScriptCanvasEditor AzToolsFramework::UnregisterViewPane(LyViewPane::ScriptCanvas); AzToolsFramework::EditorContextMenuBus::Handler::BusDisconnect(); AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect(); - AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); AzToolsFramework::AssetSeedManagerRequests::Bus::Handler::BusDisconnect(); } @@ -141,17 +130,12 @@ namespace ScriptCanvasEditor { if (userSettings->m_showUpgradeDialog) { - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); } else { m_upgradeDisabled = true; } } - else - { - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); - } } void SystemComponent::NotifyRegisterViews() @@ -172,7 +156,6 @@ namespace ScriptCanvasEditor AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect(); ScriptCanvasExecutionBus::Handler::BusDisconnect(); SystemRequestBus::Handler::BusDisconnect(); - AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); m_jobContext.reset(); m_jobManager.reset(); @@ -397,64 +380,6 @@ namespace ScriptCanvasEditor return reporter; } - void SystemComponent::OnCatalogLoaded(const char* /*catalogFile*/) - { - // Enumerate all ScriptCanvas assets - AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::EnumerateAssets, - nullptr, - [this](const AZ::Data::AssetId, const AZ::Data::AssetInfo& assetInfo) { - - if (assetInfo.m_assetType == azrtti_typeid()) - { - AddAssetToUpgrade(assetInfo); - } - }, - nullptr - ); - } - - void SystemComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) - { - if (IsUpgrading()) - { - return; - } - - auto assetInfo = ScriptCanvasEditor::AssetHelpers::GetAssetInfo(assetId); - AddAssetToUpgrade(assetInfo); - } - - void SystemComponent::OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& /*assetInfo*/) - { - if (IsUpgrading()) - { - return; - } - - AZStd::erase_if(m_assetsToConvert, [assetId](const AZ::Data::AssetInfo& assetToConvert) - { - return assetToConvert.m_assetId == assetId; - } - ); - } - - void SystemComponent::AddAssetToUpgrade(const AZ::Data::AssetInfo& assetInfo) - { - auto query = AZStd::find_if(m_assetsToConvert.begin(), m_assetsToConvert.end(), [assetInfo](const AZ::Data::AssetInfo& assetToConvert) - { - return assetToConvert.m_assetId == assetInfo.m_assetId; - } - ); - - if (query == m_assetsToConvert.end()) - { - if (assetInfo.m_assetType == azrtti_typeid()) - { - m_assetsToConvert.push_back(assetInfo); - } - } - } - AzToolsFramework::AssetSeedManagerRequests::AssetTypePairs SystemComponent::GetAssetTypeMapping() { return { diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h index 3e18262c98..6f85b3c5a6 100644 --- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h +++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h @@ -9,23 +9,20 @@ #pragma once -#include -#include -#include - #include -#include +#include +#include #include - +#include #include +#include #include #include +#include #include - -#include - -#include -#include +#include +#include +#include namespace ScriptCanvasEditor { @@ -36,9 +33,7 @@ namespace ScriptCanvasEditor , private AzToolsFramework::AssetBrowser::AssetBrowserInteractionNotificationBus::Handler , private ScriptCanvasExecutionBus::Handler , private AZ::UserSettingsNotificationBus::Handler - , private AzFramework::AssetCatalogEventBus::Handler , private AZ::Data::AssetBus::MultiHandler - , private AZ::Interface::Registrar , private AzToolsFramework::AssetSeedManagerRequests::Bus::Handler , private AzToolsFramework::EditorContextMenuBus::Handler { @@ -96,74 +91,30 @@ namespace ScriptCanvasEditor void OnUserSettingsActivated() override; //////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////// - // AzFramework::AssetCatalogEventBus::Handler... - void OnCatalogLoaded(const char* /*catalogFile*/) override; - void OnCatalogAssetAdded(const AZ::Data::AssetId& /*assetId*/) override; - void OnCatalogAssetRemoved(const AZ::Data::AssetId& /*assetId*/, const AZ::Data::AssetInfo& /*assetInfo*/) override; - //////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////// // AssetSeedManagerRequests::Bus::Handler... AzToolsFramework::AssetSeedManagerRequests::AssetTypePairs GetAssetTypeMapping() override; //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// - // IUpgradeRequests... - void ClearGraphsThatNeedUpgrade() override - { - m_assetsThatNeedManualUpgrade.clear(); - } - - IUpgradeRequests::AssetList& GetAssetsToUpgrade() override - { - return m_assetsToConvert; - } - - void GraphNeedsManualUpgrade(const AZ::Data::AssetId& assetId) override - { - if (AZStd::find(m_assetsThatNeedManualUpgrade.begin(), m_assetsThatNeedManualUpgrade.end(), assetId) == m_assetsThatNeedManualUpgrade.end()) - { - m_assetsThatNeedManualUpgrade.push_back(assetId); - } - } - - const AZStd::vector& GetGraphsThatNeedManualUpgrade() const override - { - return m_assetsThatNeedManualUpgrade; - } - - bool IsUpgrading() override - { - return m_isUpgrading; - } - - void SetIsUpgrading(bool isUpgrading) override - { - m_isUpgrading = isUpgrading; - } - - //////////////////////////////////////////////////////////////////////// - + private: SystemComponent(const SystemComponent&) = delete; void FilterForScriptCanvasEnabledEntities(AzToolsFramework::EntityIdList& sourceList, AzToolsFramework::EntityIdList& targetList); void PopulateEditorCreatableTypes(); - void AddAssetToUpgrade(const AZ::Data::AssetInfo& assetInfo); - + AZStd::unique_ptr m_jobManager; AZStd::unique_ptr m_jobContext; + AZStd::unique_ptr m_versionExplorer; AZStd::unordered_set m_creatableTypes; AssetTracker m_assetTracker; - IUpgradeRequests::AssetList m_assetsToConvert; AZStd::vector m_assetsThatNeedManualUpgrade; bool m_isUpgrading = false; bool m_upgradeDisabled = false; - }; } diff --git a/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp b/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp index 15cbd12d7e..a7c39fbf0f 100644 --- a/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp @@ -9,27 +9,20 @@ #include "CommonSettingsConfigurations.h" #include +#include +#include #include namespace ScriptCanvasEditor { AZStd::string GetEditingGameDataFolder() { - const char* resultValue = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(resultValue, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); - if (!resultValue) + AZ::IO::Path projectPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - if (AZ::IO::FileIOBase::GetInstance()) - { - resultValue = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); - } + settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); } - if (!resultValue) - { - resultValue = "."; - } - - return resultValue; + return projectPath.Native(); } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/AssetGraphSceneDataBus.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/AssetGraphSceneDataBus.h index 2b53cf9fd5..cbb8ef12d6 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/AssetGraphSceneDataBus.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/AssetGraphSceneDataBus.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp index b29992f9b1..047a07cd0b 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp @@ -829,12 +829,12 @@ namespace ScriptCanvasEditor NodePaletteModel::NodePaletteModel() : m_paletteId(AZ::Entity::MakeId()) { - UpgradeNotifications::Bus::Handler::BusConnect(); + UpgradeNotificationsBus::Handler::BusConnect(); } NodePaletteModel::~NodePaletteModel() { - UpgradeNotifications::Bus::Handler::BusDisconnect(); + UpgradeNotificationsBus::Handler::BusDisconnect(); DisconnectLambdas(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h index b27bfd97f1..28d627af01 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h @@ -61,7 +61,7 @@ namespace ScriptCanvasEditor class NodePaletteModel : public GraphCanvas::CategorizerInterface - , UpgradeNotifications::Bus::Handler + , UpgradeNotificationsBus::Handler { public: typedef AZStd::unordered_map< ScriptCanvas::NodeTypeIdentifier, NodePaletteModelInformation* > NodePaletteRegistry; @@ -104,10 +104,6 @@ namespace ScriptCanvasEditor { DisconnectLambdas(); } - void OnUpgradeComplete() override - { - ConnectLambdas(); - } // Asset Node Support void OnRowsInserted(const QModelIndex& parentIndex, int first, int last); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp index 704f67e034..da0e9c6045 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp @@ -154,7 +154,9 @@ namespace ScriptCanvasEditor const ScriptEvents::ScriptEvent& definition = data->m_definition; +#if defined(AZ_ENABLE_TRACING) bool recategorize = previousDefinition ? definition.GetCategory().compare(previousDefinition->GetCategory()) != 0 : false; +#endif AZ_Warning("ScriptCanvas", !recategorize, "Unable to recategorize ScriptEvents events while open. Please close and re-open the Script Canvas Editor to see the new categorization"); if (definition.GetName().empty()) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp index 96b0ac353f..9e51c1896f 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp @@ -148,7 +148,7 @@ namespace ScriptCanvasEditor , m_assetModel(assetModel) , m_categorizer(nodePaletteModel) { - UpgradeNotifications::Bus::Handler::BusConnect(); + UpgradeNotificationsBus::Handler::BusConnect(); if (m_assetModel) { @@ -166,7 +166,7 @@ namespace ScriptCanvasEditor AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); AZ::Data::AssetBus::MultiHandler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); + UpgradeNotificationsBus::Handler::BusDisconnect(); } @@ -386,15 +386,6 @@ namespace ScriptCanvasEditor AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); } - void ScriptCanvasRootPaletteTreeItem::OnUpgradeComplete() - { - ConnectLambdas(); - - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); - - TraverseTree(); - } - void ScriptCanvasRootPaletteTreeItem::OnUpgradeCancelled() { if (!AzFramework::AssetCatalogEventBus::Handler::BusIsConnected()) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h index 7b2e9293bd..45645ceb33 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h @@ -57,7 +57,7 @@ namespace ScriptCanvasEditor : public GraphCanvas::NodePaletteTreeItem , AzFramework::AssetCatalogEventBus::Handler , AZ::Data::AssetBus::MultiHandler - , UpgradeNotifications::Bus::Handler + , UpgradeNotificationsBus::Handler , AZ::SystemTickBus::Handler { public: @@ -92,7 +92,6 @@ namespace ScriptCanvasEditor // UpgradeNotifications::Bus void OnUpgradeStart() override; - void OnUpgradeComplete() override; void OnUpgradeCancelled() override; //// diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp index 91f85ae36a..5b78c62bac 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp @@ -411,10 +411,7 @@ namespace ScriptCanvasEditor case Qt::TextAlignmentRole: { - if (index.column() == ColumnIndex::Type) - { - return QVariant(Qt::AlignLeft | Qt::AlignVCenter); - } + return QVariant(Qt::AlignLeft | Qt::AlignVCenter); } break; @@ -880,6 +877,11 @@ namespace ScriptCanvasEditor return tr(m_columnNames[section]); } + if (role == Qt::TextAlignmentRole) + { + return QVariant(Qt::AlignLeft | Qt::AlignVCenter); + } + return QAbstractItemModel::headerData(section, orientation, role); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index fbe03ffc0a..1ad8b58317 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -72,6 +72,7 @@ #include #include #include +#include #include #include #include @@ -134,7 +135,6 @@ #include #include #include -#include #include @@ -224,7 +224,7 @@ namespace ScriptCanvasEditor } } } // anonymous namespace. - + void Workspace::Save() { auto workspace = AZ::UserSettings::CreateFind(AZ_CRC("ScriptCanvasEditorWindowState", 0x10c47d36), AZ::UserSettings::CT_LOCAL); @@ -423,7 +423,7 @@ namespace ScriptCanvasEditor , m_queueCloseRequest(false) , m_hasQueuedClose(false) , m_isInAutomation(false) - , m_allowAutoSave(true) + , m_allowAutoSave(true) , m_systemTickActions(0) , m_closeCurrentGraphAfterSave(false) , m_styleManager(ScriptCanvasEditor::AssetEditorId, "ScriptCanvas/StyleSheet/graphcanvas_style.json") @@ -432,7 +432,7 @@ namespace ScriptCanvasEditor GraphCanvas::AssetEditorAutomationRequestBus::Handler::BusConnect(ScriptCanvasEditor::AssetEditorId); AZStd::array unresolvedPath; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@assets@/translation/scriptcanvas_en_us.qm", unresolvedPath.data(), unresolvedPath.size()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@products@/translation/scriptcanvas_en_us.qm", unresolvedPath.data(), unresolvedPath.size()); QString translationFilePath(unresolvedPath.data()); if ( m_translator.load(QLocale::Language::English, translationFilePath) ) @@ -541,7 +541,7 @@ namespace ScriptCanvasEditor m_editorToolbar->AddCustomAction(m_createFunctionOutput); connect(m_createFunctionOutput, &QToolButton::clicked, this, &MainWindow::CreateFunctionOutput); - + { m_validateGraphToolButton = new QToolButton(); @@ -553,7 +553,7 @@ namespace ScriptCanvasEditor m_editorToolbar->AddCustomAction(m_validateGraphToolButton); connect(m_validateGraphToolButton, &QToolButton::clicked, this, &MainWindow::OnValidateCurrentGraph); - + m_layout->addWidget(m_editorToolbar); // Tab bar @@ -578,7 +578,7 @@ namespace ScriptCanvasEditor m_commandLine = new Widget::CommandLine(this); m_commandLine->setBaseSize(QSize(size().width(), m_commandLine->size().height())); - m_commandLine->setObjectName("CommandLine"); + m_commandLine->setObjectName("CommandLine"); m_layout->addWidget(m_commandLine); m_layout->addWidget(m_emptyCanvas); @@ -602,7 +602,7 @@ namespace ScriptCanvasEditor // in sync with the order we display under tools for consistency. { const bool isInContextMenu = false; - Widget::ScriptCanvasNodePaletteConfig nodePaletteConfig(m_nodePaletteModel, m_scriptEventsAssetModel, isInContextMenu); + Widget::ScriptCanvasNodePaletteConfig nodePaletteConfig(m_nodePaletteModel, m_scriptEventsAssetModel, isInContextMenu); m_nodePalette = aznew Widget::NodePaletteDockWidget(tr("Node Palette"), this, nodePaletteConfig); m_nodePalette->setObjectName("NodePalette"); @@ -704,78 +704,7 @@ namespace ScriptCanvasEditor m_autoSaveTimer.setSingleShot(true); connect(&m_autoSaveTimer, &QTimer::timeout, this, &MainWindow::OnAutoSave); - UpdateMenuState(false); - - PromptForUpgrade(); - } - - void MainWindow::PromptForUpgrade() - { - static bool displayUpgradePrompt = false; // Set to true if you need the upgrade dialog to show up on ScriptCanvas editor open - if (displayUpgradePrompt && m_showUpgradeTool) - { - QTimer::singleShot(1.f, this, [this]() - { - UpgradeTool* upgradeTool = aznew UpgradeTool(this); - - QPoint centerPoint = frameGeometry().center(); - - upgradeTool->adjustSize(); - upgradeTool->move(centerPoint.x() - upgradeTool->width() / 2, centerPoint.y() - upgradeTool->height() / 2); - - if (upgradeTool->exec() == QDialog::Accepted) - { - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - QString message = QObject::tr("%1 Graph(s) upgraded
%2 graph(s) did not require upgrade").arg(upgradeTool->UpgradedGraphCount()).arg(upgradeTool->SkippedGraphCount()); - if (assetsThatNeedManualInspection > 0) - { - message.append(QObject::tr("
%1 graph(s) that need manual corrections. You will be prompted to review them after you close this dialog.
").arg(assetsThatNeedManualInspection)); - } - - // Report - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string outputFileName = AZStd::string::format("@devroot@/ScriptCanvasUpgradeReport.html"); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZStd::string urlToReport = AZStd::string::format("For more information see the Upgrade Report.", resolvedBuffer); - message.append(QObject::tr("
%1").arg(urlToReport.c_str())); - - // Backup - if (upgradeTool->HasBackup()) - { - AZStd::string outputFileName2 = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP"); - - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName2.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - - AZStd::string backupPath = AZStd::string::format("
Open the Backup Folder.", resolvedBuffer); - message.append(QObject::tr("%1").arg(backupPath.c_str())); - } - - // Done upgrading, show details - QMessageBox mb(QMessageBox::Information, - QObject::tr("Upgrade Complete"), - message, - QMessageBox::Ok, this); - mb.setTextFormat(Qt::RichText); - - centerPoint = frameGeometry().center(); - - mb.adjustSize(); - mb.move(centerPoint.x() - width() / 2, centerPoint.y() - height() / 2); - - mb.exec(); - - // If there are graphs that need manual correction, show the helper - if (assetsThatNeedManualInspection > 0) - { - UpgradeHelper* upgradeHelper = new UpgradeHelper(this); - upgradeHelper->show(); - } - } - - }); - } } MainWindow::~MainWindow() @@ -882,14 +811,14 @@ namespace ScriptCanvasEditor connect(ui->action_ViewVariableManager, &QAction::triggered, this, &MainWindow::OnVariableManager); connect(m_variableDockWidget, &QDockWidget::visibilityChanged, this, &MainWindow::OnViewVisibilityChanged); - + connect(ui->action_ViewLogWindow, &QAction::triggered, this, &MainWindow::OnViewLogWindow); connect(m_loggingWindow, &QDockWidget::visibilityChanged, this, &MainWindow::OnViewVisibilityChanged); connect(ui->action_ViewDebugger, &QAction::triggered, this, &MainWindow::OnViewDebugger); connect(ui->action_ViewCommandLine, &QAction::triggered, this, &MainWindow::OnViewCommandLine); connect(ui->action_ViewLog, &QAction::triggered, this, &MainWindow::OnViewLog); - + connect(ui->action_GraphValidation, &QAction::triggered, this, &MainWindow::OnViewGraphValidation); connect(ui->action_Debugging, &QAction::triggered, this, &MainWindow::OnViewDebuggingWindow); @@ -897,7 +826,7 @@ namespace ScriptCanvasEditor connect(ui->action_NodeStatistics, &QAction::triggered, this, &MainWindow::OnViewStatisticsPanel); connect(ui->action_PresetsEditor, &QAction::triggered, this, &MainWindow::OnViewPresetsEditor); - connect(ui->action_ViewRestoreDefaultLayout, &QAction::triggered, this, &MainWindow::OnRestoreDefaultLayout); + connect(ui->action_ViewRestoreDefaultLayout, &QAction::triggered, this, &MainWindow::OnRestoreDefaultLayout); } void MainWindow::SignalActiveSceneChanged(AZ::Data::AssetId assetId) @@ -920,7 +849,7 @@ namespace ScriptCanvasEditor // The paste action refreshes based on the scene's mimetype RefreshPasteAction(); - + bool enabled = false; if (graphId.IsValid()) @@ -1016,7 +945,7 @@ namespace ScriptCanvasEditor QString tabName = m_tabBar->tabText(tabCounter); UnsavedChangesOptions shouldSaveResults = ShowSaveDialog(tabName); - + if (shouldSaveResults == UnsavedChangesOptions::SAVE) { Callbacks::OnSave saveCB = [this](bool isSuccessful, AZ::Data::AssetPtr, AZ::Data::AssetId) @@ -1041,7 +970,7 @@ namespace ScriptCanvasEditor { m_processedClosedAssetIds.clear(); event->ignore(); - + return; } else if (shouldSaveResults == UnsavedChangesOptions::CONTINUE_WITHOUT_SAVING && @@ -1066,7 +995,7 @@ namespace ScriptCanvasEditor } m_processedClosedAssetIds.clear(); - + event->accept(); } @@ -1232,7 +1161,7 @@ namespace ScriptCanvasEditor const Tracker::ScriptCanvasFileState& fileState = GetAssetFileState(memoryAssetId); if (fileState != Tracker::ScriptCanvasFileState::NEW) { - AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::UpdateFileState, memoryAssetId, Tracker::ScriptCanvasFileState::MODIFIED); + AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::UpdateFileState, memoryAssetId, Tracker::ScriptCanvasFileState::MODIFIED); } } } @@ -1734,12 +1663,12 @@ namespace ScriptCanvasEditor { currentTarget.SetInvalid(); } - } + } } return retVal; } - + void MainWindow::OnFileNew() { MakeNewFile(); @@ -1756,7 +1685,7 @@ namespace ScriptCanvasEditor m_tabBar->InsertGraphTab(tabIndex, assetId); if (!IsTabOpen(assetId, outTabIndex)) - { + { AZ_Assert(false, AZStd::string::format("Unable to open new Script Canvas Asset with id %s in the Script Canvas Editor", AssetHelpers::AssetIdToString(assetId).c_str()).c_str()); return -1; } @@ -1854,7 +1783,7 @@ namespace ScriptCanvasEditor } PrepareAssetForSave(inMemoryAssetId); - + AZStd::string suggestedFilename; AZStd::string suggestedFileFilter; GetSuggestedFullFilenameToSaveAs(inMemoryAssetId, suggestedFilename, suggestedFileFilter); @@ -1881,7 +1810,7 @@ namespace ScriptCanvasEditor AZStd::string assetRoot; AZStd::array assetRootChar; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devroot@", assetRootChar.data(), assetRootChar.size()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@engroot@", assetRootChar.data(), assetRootChar.size()); assetRoot = assetRootChar.data(); /* if (!AZ::StringFunc::StartsWith(filePath, assetRoot)) @@ -1906,7 +1835,7 @@ namespace ScriptCanvasEditor if (isValidFileName) { - AZStd::string internalStringFile = selectedFile.toUtf8().data(); + AZStd::string internalStringFile = selectedFile.toUtf8().data(); if (!AssetHelpers::IsValidSourceFile(internalStringFile, GetActiveScriptCanvasId())) { @@ -1923,7 +1852,7 @@ namespace ScriptCanvasEditor return true; } - + return false; } @@ -1965,7 +1894,7 @@ namespace ScriptCanvasEditor saveTabIndex = m_tabBar->FindTab(previousFileAssetId); } } - + AzFramework::StringFunc::Path::GetFileName(memoryAsset->GetAbsolutePath().c_str(), tabName); // Update the tab's assetId to the file asset Id (necessary when saving a new asset) @@ -2047,7 +1976,7 @@ namespace ScriptCanvasEditor } m_closeCurrentGraphAfterSave = false; - + EnableAssetView(memoryAsset); UnblockCloseRequests(); @@ -2071,7 +2000,7 @@ namespace ScriptCanvasEditor AZStd::invoke(onSave, saveSuccess, asset, previousAssetId); } }; - + AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::Save, assetId, onSaveCallback); UpdateSaveState(); @@ -2109,7 +2038,7 @@ namespace ScriptCanvasEditor // Disable the current view if we are saving. if (memoryAsset) { - DisableAssetView(memoryAsset); + DisableAssetView(memoryAsset); } BlockCloseRequests(); @@ -2126,7 +2055,7 @@ namespace ScriptCanvasEditor AZStd::string assetRoot; { AZStd::array assetRootChar; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", assetRootChar.data(), assetRootChar.size()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", assetRootChar.data(), assetRootChar.size()); assetRoot = assetRootChar.data(); } @@ -2147,7 +2076,7 @@ namespace ScriptCanvasEditor AssetRegistryRequestBus::BroadcastResult(fileFilters, &AssetRegistryRequests::GetAssetHandlerFileFilters); QString filter; - + AZStd::set filterSet; auto aggregateFilters = fileFilters.values; for (auto aggregateFilters2 : fileFilters.values) @@ -2190,7 +2119,7 @@ namespace ScriptCanvasEditor dialog.setFileMode(QFileDialog::ExistingFiles); dialog.setNameFilters(nameFilters); - if (dialog.exec() == QDialog::Accepted) + if (dialog.exec() == QDialog::Accepted) { m_filesToOpen = dialog.selectedFiles(); @@ -2206,7 +2135,7 @@ namespace ScriptCanvasEditor ui->action_Paste->setShortcut(QKeySequence(QKeySequence::Paste)); ui->action_Delete->setShortcut(QKeySequence(QKeySequence::Delete)); - connect(ui->menuEdit, &QMenu::aboutToShow, this, &MainWindow::OnEditMenuShow); + connect(ui->menuEdit, &QMenu::aboutToShow, this, &MainWindow::OnEditMenuShow); // Edit Menu connect(ui->action_Undo, &QAction::triggered, this, &MainWindow::TriggerUndo); @@ -2215,8 +2144,8 @@ namespace ScriptCanvasEditor connect(ui->action_Copy, &QAction::triggered, this, &MainWindow::OnEditCopy); connect(ui->action_Paste, &QAction::triggered, this, &MainWindow::OnEditPaste); connect(ui->action_Duplicate, &QAction::triggered, this, &MainWindow::OnEditDuplicate); - connect(ui->action_Delete, &QAction::triggered, this, &MainWindow::OnEditDelete); - connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &MainWindow::RefreshPasteAction); + connect(ui->action_Delete, &QAction::triggered, this, &MainWindow::OnEditDelete); + connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &MainWindow::RefreshPasteAction); connect(ui->action_RemoveUnusedNodes, &QAction::triggered, this, &MainWindow::OnRemoveUnusedNodes); connect(ui->action_RemoveUnusedVariables, &QAction::triggered, this, &MainWindow::OnRemoveUnusedVariables); connect(ui->action_RemoveUnusedElements, &QAction::triggered, this, &MainWindow::OnRemoveUnusedElements); @@ -2246,7 +2175,7 @@ namespace ScriptCanvasEditor connect(ui->action_GotoEndOfChain, &QAction::triggered, this, &MainWindow::OnGotoEndOfChain); - connect(ui->action_GlobalPreferences, &QAction::triggered, [this]() + connect(ui->action_GlobalPreferences, &QAction::triggered, [this]() { ScriptCanvasEditor::SettingsDialog(ui->action_GlobalPreferences->text(), ScriptCanvas::ScriptCanvasId(), this).exec(); @@ -2372,7 +2301,7 @@ namespace ScriptCanvasEditor { AZ::EntityId graphCanvasGraphId = GetActiveGraphCanvasGraphId(); - GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::SelectAllRelative, GraphCanvas::ConnectionType::CT_Input); + GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::SelectAllRelative, GraphCanvas::ConnectionType::CT_Input); } void MainWindow::OnSelectOutputs() @@ -2635,8 +2564,8 @@ namespace ScriptCanvasEditor { ScriptCanvas::ScriptCanvasId scriptCanvasId; AssetTrackerRequestBus::BroadcastResult(scriptCanvasId, &AssetTrackerRequests::GetScriptCanvasId, assetId); - return scriptCanvasId; - } + return scriptCanvasId; + } ScriptCanvas::ScriptCanvasId MainWindow::GetScriptCanvasId(const GraphCanvas::GraphId& graphCanvasGraphId) const { @@ -2849,7 +2778,7 @@ namespace ScriptCanvasEditor AssetTrackerRequests::AssetList assets; AssetTrackerRequestBus::BroadcastResult(assets, &AssetTrackerRequests::GetAssets); - + for (auto asset : assets) { RemoveScriptCanvasAsset(asset->GetAsset().GetId()); @@ -2927,14 +2856,14 @@ namespace ScriptCanvasEditor } void MainWindow::SaveTab(int index) - { + { QVariant tabdata = m_tabBar->tabData(index); if (tabdata.isValid()) { auto assetId = tabdata.value(); SaveAssetImpl(assetId, nullptr); } - + } void MainWindow::CloseAllTabs() @@ -2955,7 +2884,7 @@ namespace ScriptCanvasEditor m_isClosingTabs = true; m_skipTabOnClose = assetId; CloseNextTab(); - } + } } void MainWindow::CopyPathToClipboard(int index) @@ -3051,7 +2980,7 @@ namespace ScriptCanvasEditor // The last tab has been removed. SetActiveAsset({}); } - + // Handling various close all events because the save is async need to deal with this in a bunch of different ways // Always want to trigger this, even if we don't have any active tabs to avoid doubling the clean-up // information @@ -3069,7 +2998,7 @@ namespace ScriptCanvasEditor for (const auto& slotId : outputDataSlotIds) { - + if (!IsInUndoRedo(graphCanvasGraphId) && !isPaste && CreateAzEventHandlerSlotMenuAction::FindBehaviorMethodWithAzEventReturn(graphCanvasGraphId, slotId)) { CreateAzEventHandlerSlotMenuAction eventHandlerAction(this); @@ -3195,7 +3124,7 @@ namespace ScriptCanvasEditor m_minimap->hide(); } */ - + resizeDocks( { m_nodePalette, m_propertyGrid }, { static_cast(size().width() * 0.15f), static_cast(size().width() * 0.2f) }, @@ -3204,7 +3133,7 @@ namespace ScriptCanvasEditor resizeDocks({ m_nodePalette, m_minimap }, { static_cast(size().height() * 0.70f), static_cast(size().height() * 0.30f) }, Qt::Vertical); - + resizeDocks({ m_propertyGrid, m_variableDockWidget }, { static_cast(size().height() * 0.70f), static_cast(size().height() * 0.30f) }, @@ -3229,7 +3158,7 @@ namespace ScriptCanvasEditor AZ::EntityId graphCanvasGraphId; EditorGraphRequestBus::EventResult(graphCanvasGraphId, scriptCanvasId, &EditorGraphRequests::GetGraphCanvasGraphId); - + bool hasCopiableSelection = false; bool hasSelection = false; @@ -3268,7 +3197,7 @@ namespace ScriptCanvasEditor ui->action_Duplicate->setEnabled(hasCopiableSelection); // Delete will work for anything that is selectable - ui->action_Delete->setEnabled(hasSelection); + ui->action_Delete->setEnabled(hasSelection); } void MainWindow::OnViewNodePalette() @@ -3470,7 +3399,7 @@ namespace ScriptCanvasEditor if (ui->action_Debugging->isChecked() != m_loggingWindow->isVisible()) { ui->action_Debugging->setChecked(m_loggingWindow->isVisible()); - } + } // Want these two elements to be mutually exclusive. if (m_statusWidget->isVisible() == m_validationDockWidget->isVisible()) @@ -3507,18 +3436,20 @@ namespace ScriptCanvasEditor void MainWindow::RunUpgradeTool() { - VersionExplorer* versionExplorer = aznew VersionExplorer(this); + using namespace VersionExplorer; + auto versionExplorer = aznew VersionExplorer::Controller(this); versionExplorer->exec(); - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - - // If there are graphs that need manual correction, show the helper - if (assetsThatNeedManualInspection > 0) + const ModificationResults* result = nullptr; + ModelRequestsBus::BroadcastResult(result, &ModelRequestsTraits::GetResults); + if (result && !result->m_failures.empty()) { + // If there are graphs that need manual correction, show the helper UpgradeHelper* upgradeHelper = new UpgradeHelper(this); upgradeHelper->show(); } + + delete versionExplorer; } void MainWindow::OnShowValidationErrors() @@ -3624,7 +3555,7 @@ namespace ScriptCanvasEditor if (m_isRestoringWorkspace) { m_isRestoringWorkspace = false; - + if (m_queuedFocusOverride.IsValid()) { SetActiveAsset(m_queuedFocusOverride); @@ -3701,7 +3632,7 @@ namespace ScriptCanvasEditor hasModifications = ( fileState == Tracker::ScriptCanvasFileState::MODIFIED || fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED); - + AssetTrackerRequestBus::BroadcastResult(isSaving, &AssetTrackerRequests::IsSaving, m_activeAssetId); } @@ -4084,7 +4015,7 @@ namespace ScriptCanvasEditor if (action == nullptr) { GraphCanvas::GraphCanvasMimeEvent* mimeEvent = m_sceneContextMenu->GetNodePalette()->GetContextMenuEvent(); - + NodeIdPair finalNode = ProcessCreateNodeMimeEvent(mimeEvent, graphCanvasGraphId, AZ::Vector2(aznumeric_cast(scenePoint.x()), aznumeric_cast(scenePoint.y()))); GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::ClearSelection); @@ -4436,7 +4367,7 @@ namespace ScriptCanvasEditor targetLayer = (*selectedEntityIdIter); - selectedEntityIdIter = selectedEntityIds.erase(selectedEntityIdIter); + selectedEntityIdIter = selectedEntityIds.erase(selectedEntityIdIter); } else { @@ -4456,7 +4387,7 @@ namespace ScriptCanvasEditor AZ::TransformBus::Event(createdId, &AZ::TransformBus::Events::SetParent, targetLayer); } } - + for (const AZ::EntityId& entityId : selectedEntityIds) { AssignGraphToEntityImpl(entityId); @@ -4515,7 +4446,7 @@ namespace ScriptCanvasEditor { usableRequestBus = firstRequestBus; } - + if (usableRequestBus == nullptr) { AzToolsFramework::EntityCompositionRequestBus::Broadcast(&EntityCompositionRequests::AddComponentsToEntities, AzToolsFramework::EntityIdList{ entityId } @@ -4681,7 +4612,7 @@ namespace ScriptCanvasEditor } bool MainWindow::IsNodeNudgingEnabled() const - { + { if (m_userSettings) { return m_userSettings->m_allowNodeNudging; @@ -4720,7 +4651,7 @@ namespace ScriptCanvasEditor return 0.03f; } - float MainWindow::GetShakeDeadZonePercent() const + float MainWindow::GetShakeDeadZonePercent() const { if (m_userSettings) { @@ -4730,7 +4661,7 @@ namespace ScriptCanvasEditor return 0.01f; } - float MainWindow::GetShakeStraightnessPercent() const + float MainWindow::GetShakeStraightnessPercent() const { if (m_userSettings) { diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h index ba5ff7f97f..2c84412e28 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h @@ -51,8 +51,7 @@ #include -#include -#include +#include #if SCRIPTCANVAS_EDITOR #include @@ -99,30 +98,25 @@ namespace ScriptCanvasEditor class ScriptCanvasAssetBrowserModel : public AzToolsFramework::AssetBrowser::AssetBrowserFilterModel - , private UpgradeNotifications::Bus::Handler + , private UpgradeNotificationsBus::Handler { public: explicit ScriptCanvasAssetBrowserModel(QObject* parent = nullptr) : AzToolsFramework::AssetBrowser::AssetBrowserFilterModel(parent) { - UpgradeNotifications::Bus::Handler::BusConnect(); + UpgradeNotificationsBus::Handler::BusConnect(); } ~ScriptCanvasAssetBrowserModel() override { - UpgradeNotifications::Bus::Handler::BusDisconnect(); + UpgradeNotificationsBus::Handler::BusDisconnect(); } void OnUpgradeStart() override { AzToolsFramework::AssetBrowser::AssetBrowserComponentNotificationBus::Handler::BusDisconnect(); } - - void OnUpgradeComplete() override - { - AzToolsFramework::AssetBrowser::AssetBrowserComponentNotificationBus::Handler::BusConnect(); - } }; class OnSaveToast @@ -673,7 +667,7 @@ namespace ScriptCanvasEditor AZStd::array assetRootArray; if (!AZ::IO::FileIOBase::GetInstance()->ResolvePath(ScriptCanvas::AssetDescription::GetSuggestedSavePath(), assetRootArray.data(), assetRootArray.size())) { - AZ_ErrorOnce("Script Canvas", false, "Unable to resolve @devassets@ path"); + AZ_ErrorOnce("Script Canvas", false, "Unable to resolve @projectroot@ path"); } AZStd::string assetPath; @@ -806,7 +800,5 @@ namespace ScriptCanvasEditor Workspace* m_workspace; void OnSaveCallback(bool saveSuccess, AZ::Data::AssetPtr, AZ::Data::AssetId previousFileAssetId); - - void PromptForUpgrade(); }; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp new file mode 100644 index 0000000000..dbcd176ee5 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -0,0 +1,629 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + Controller::Controller(QWidget* parent) + : AzQtComponents::StyledDialog(parent) + , m_view(new Ui::View()) + { + m_view->setupUi(this); + m_view->tableWidget->horizontalHeader()->setVisible(false); + m_view->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + m_view->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); + m_view->tableWidget->setColumnWidth(3, 22); + m_view->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); + m_view->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + connect(m_view->scanButton, &QPushButton::pressed, this, &Controller::OnButtonPressScan); + connect(m_view->closeButton, &QPushButton::pressed, this, &Controller::OnButtonPressClose); + m_view->upgradeAllButton->setVisible(false); + connect(m_view->upgradeAllButton, &QPushButton::pressed, this, &Controller::OnButtonPressUpgrade); + m_view->progressBar->setValue(0); + m_view->progressBar->setVisible(false); + + UpgradeNotificationsBus::Handler::BusConnect(); + ModelNotificationsBus::Handler::BusConnect(); + } + + Controller::~Controller() + { + delete m_view; + } + + void Controller::AddLogEntries() + { + const AZStd::vector* logs = nullptr; + LogBus::BroadcastResult(logs, &LogTraits::GetEntries); + if (!logs || logs->empty()) + { + return; + } + + const QTextCursor oldCursor = m_view->textEdit->textCursor(); + QScrollBar* scrollBar = m_view->textEdit->verticalScrollBar(); + + m_view->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_view->textEdit->textCursor(); + + for (auto& entry : *logs) + { + textCursor.insertText("\n"); + textCursor.insertText(entry.c_str()); + } + + scrollBar->setValue(scrollBar->maximum()); + m_view->textEdit->moveCursor(QTextCursor::StartOfLine); + LogBus::Broadcast(&LogTraits::Clear); + } + + void Controller::EnableAllUpgradeButtons() + { + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(true); + } + } + } + + QList Controller::FindTableItems(const AZ::Data::AssetInfo& info) + { + return m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + } + + void Controller::OnButtonPressClose() + { + reject(); + } + + void Controller::OnButtonPressScan() + { + // \todo move to another file + auto isUpToDate = [this](AZ::Data::Asset asset) + { + AZ::Entity* scriptCanvasEntity = nullptr; + + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + if (!scriptCanvasAsset) + { + AZ_Warning + (ScriptCanvas::k_VersionExplorerWindow.data() + , false + , "InspectAsset: %s, AsestData failed to return ScriptCanvasAsset" + , asset.GetHint().c_str()); + return true; + } + + scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + } + + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + return !m_view->forceUpgrade->isChecked() && graphComponent->GetVersion().IsLatest(); + }; + + ScanConfiguration config; + config.reportFilteredGraphs = !m_view->onlyShowOutdated->isChecked(); + config.filter = isUpToDate; + + SetLoggingPreferences(); + ModelRequestsBus::Broadcast(&ModelRequestsTraits::Scan, config); + } + + void Controller::OnButtonPressUpgrade() + { + OnButtonPressUpgradeImplementation({}); + } + + void Controller::OnButtonPressUpgradeImplementation(const AZ::Data::AssetInfo& assetInfo) + { + auto simpleUpdate = [this](AZ::Data::Asset asset) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); + if (!scriptCanvasAsset) + { + return; + } + + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "View::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } + + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) + { + if (queryEntity->GetState() == AZ::Entity::State::Active) + { + queryEntity->Deactivate(); + } + + scriptCanvasEntity = queryEntity; + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) + { + scriptCanvasEntity->Init(); + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + { + scriptCanvasEntity->Activate(); + } + + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + if (graphComponent) + { + graphComponent->UpgradeGraph + (asset + , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_view->verbose->isChecked()); + } + } + }; + + auto onReadyOnlyFile = [this]()->bool + { + int result = QMessageBox::No; + QMessageBox mb + (QMessageBox::Warning + , QObject::tr("Failed to Save Upgraded File") + , QObject::tr("The upgraded file could not be saved because the file is read only.\n" + "Do you want to make it writeable and overwrite it?") + , QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No + , this); + result = mb.exec(); + return result == QMessageBox::YesToAll; + }; + + SetLoggingPreferences(); + ModifyConfiguration config; + config.modifySingleAsset = assetInfo; + config.modification = simpleUpdate; + config.onReadOnlyFile = onReadyOnlyFile; + config.backupGraphBeforeModification = m_view->makeBackupCheckbox->isChecked(); + ModelRequestsBus::Broadcast(&ModelRequestsTraits::Modify, config); + } + + void Controller::OnButtonPressUpgradeSingle(const AZ::Data::AssetInfo& assetInfo) + { + OnButtonPressUpgradeImplementation(assetInfo); + } + + void Controller::OnUpgradeModificationBegin([[maybe_unused]] const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) + { + for (auto* item : FindTableItems(info)) + { + int row = item->row(); + SetRowBusy(row); + m_view->tableWidget->setCellWidget(row, ColumnAction, nullptr); + } + } + + void Controller::OnUpgradeModificationEnd + ( [[maybe_unused]] const ModifyConfiguration& config + , const AZ::Data::AssetInfo& info + , ModificationResult result) + { + if (result.errorMessage.empty()) + { + VE_LOG("Successfully modified %s", result.assetInfo.m_relativePath.c_str()); + } + else + { + VE_LOG("Failed to modify %s: %s", result.assetInfo.m_relativePath.c_str(), result.errorMessage.data()); + } + + for (auto* item : FindTableItems(info)) + { + int row = item->row(); + + if (result.errorMessage.empty()) + { + SetRowSucceeded(row); + } + else + { + SetRowFailed(row, ""); + + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + } + } + } + + m_view->progressBar->setVisible(true); + ++m_handledAssetCount; + m_view->progressBar->setValue(m_handledAssetCount); + AddLogEntries(); + } + + void Controller::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool skipped) + { + ModificationResult result; + result.asset = asset; + AZ::Data::AssetCatalogRequestBus::BroadcastResult + ( result.assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, asset.GetId()); + + if (skipped) + { + result.errorMessage = "Failed in editor upgrade state machine - check logs"; + } + + ModificationNotificationsBus::Broadcast(&ModificationNotificationsTraits::ModificationComplete, result); + } + + void Controller::OnScanBegin(size_t assetCount) + { + m_handledAssetCount = 0; + m_view->tableWidget->setRowCount(0); + m_view->progressBar->setVisible(true); + m_view->progressBar->setRange(0, aznumeric_cast(assetCount)); + m_view->progressBar->setValue(0); + m_view->scanButton->setEnabled(false); + m_view->upgradeAllButton->setEnabled(false); + m_view->onlyShowOutdated->setEnabled(false); + + QString spinnerText = QStringLiteral("Scan in progress - gathering graphs that can be updated"); + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(true); + } + + void Controller::OnScanComplete(const ScanResult& result) + { + m_view->onlyShowOutdated->setEnabled(true); + + QString spinnerText = QStringLiteral("Scan Complete"); + spinnerText.append(QString::asprintf(" - Discovered: %zu, Failed: %zu, Upgradeable: %zu, Up-to-date: %zu" + , result.m_catalogAssets.size() + , result.m_loadErrors.size() + , result.m_unfiltered.size() + , result.m_filteredAssets.size())); + + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(false); + m_view->progressBar->setVisible(false); + EnableAllUpgradeButtons(); + + if (!result.m_unfiltered.empty()) + { + m_view->upgradeAllButton->setEnabled(true); + } + } + + void Controller::OnScanFilteredGraph(const AZ::Data::AssetInfo& info) + { + OnScannedGraph(info, Filtered::Yes); + } + + void Controller::OnScannedGraph(const AZ::Data::AssetInfo& assetInfo, [[maybe_unused]] Filtered filtered) + { + const int rowIndex = m_view->tableWidget->rowCount(); + + if (filtered == Filtered::No || !m_view->onlyShowOutdated->isChecked()) + { + m_view->tableWidget->insertRow(rowIndex); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); + m_view->tableWidget->setItem(rowIndex, static_cast(ColumnAsset), rowName); + SetRowSucceeded(rowIndex); + + if (filtered == Filtered::No) + { + QPushButton* upgradeButton = new QPushButton(this); + upgradeButton->setText("Upgrade"); + upgradeButton->setEnabled(false); + SetRowBusy(rowIndex); + + connect + ( upgradeButton + , &QPushButton::pressed + , this + , [this, assetInfo]() + { + this->OnButtonPressUpgradeSingle(assetInfo); + }); + + m_view->tableWidget->setCellWidget(rowIndex, static_cast(ColumnAction), upgradeButton); + } + + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", assetInfo.m_relativePath.c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); + + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = assetInfo.m_relativePath.c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult + ( result + , &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath + , assetNameUtf8 + , info + , watchFolder); + AZ_Error + ( ScriptCanvas::k_VersionExplorerWindow.data() + , result + , "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); + }); + + m_view->tableWidget->setCellWidget(rowIndex, static_cast(ColumnBrowse), browseButton); + } + + OnScannedGraphResult(assetInfo); + } + + void Controller::OnScannedGraphResult([[maybe_unused]] const AZ::Data::AssetInfo& info) + { + m_view->progressBar->setValue(aznumeric_cast(m_handledAssetCount)); + ++m_handledAssetCount; + AddLogEntries(); + } + + void Controller::OnScanLoadFailure(const AZ::Data::AssetInfo& info) + { + const int rowIndex = m_view->tableWidget->rowCount(); + m_view->tableWidget->insertRow(rowIndex); + QTableWidgetItem* rowName = new QTableWidgetItem + ( tr(AZStd::string::format("Load Error: %s", info.m_relativePath.c_str()).c_str())); + m_view->tableWidget->setItem(rowIndex, static_cast(ColumnAsset), rowName); + SetRowFailed(rowIndex, "Load failed"); + OnScannedGraphResult(info); + } + + void Controller::OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) + { + OnScannedGraph(info, Filtered::No); + } + + void Controller::OnUpgradeBegin + ( const ModifyConfiguration& config + , [[maybe_unused]] const WorkingAssets& assets) + { + QString spinnerText = QStringLiteral("Upgrade in progress - "); + if (config.modifySingleAsset.m_assetId.IsValid()) + { + spinnerText.append(" single graph"); + + if (assets.size() == 1) + { + for (auto* item : FindTableItems(assets.front().info)) + { + int row = item->row(); + SetRowBusy(row); + } + } + } + else + { + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + } + + SetRowBusy(row); + } + + spinnerText.append(" all scanned graphs"); + } + + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(true); + } + + void Controller::SetLoggingPreferences() + { + LogBus::Broadcast(&LogTraits::SetVerbose, m_view->verbose->isChecked()); + LogBus::Broadcast(&LogTraits::SetVersionExporerExclusivity, m_view->updateReportingOnly->isChecked()); + } + + void Controller::SetSpinnerIsBusy(bool isBusy) + { + m_view->spinner->SetIsBusy(isBusy); + m_view->spinner->SetBusyIconSize(16); + } + + void Controller::OnUpgradeComplete(const ModificationResults& result) + { + QString spinnerText = QStringLiteral("Upgrade Complete - "); + spinnerText.append(QString::asprintf(" - Upgraded: %zu, Failed: %zu" + , result.m_successes.size() + , result.m_failures.size())); + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(false); + AddLogEntries(); + EnableAllUpgradeButtons(); + m_view->scanButton->setEnabled(true); + } + + void Controller::OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) + { + for (auto* item : FindTableItems(info)) + { + int row = item->row(); + + if (result == Result::Success) + { + SetRowSucceeded(row); + } + else + { + SetRowFailed(row, ""); + } + + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(true); + } + } + + m_view->progressBar->setVisible(true); + ++m_handledAssetCount; + m_view->progressBar->setValue(m_handledAssetCount); + AddLogEntries(); + } + + void Controller::OnUpgradeDependencySortBegin + ( [[maybe_unused]] const ModifyConfiguration& config + , const WorkingAssets& assets) + { + m_handledAssetCount = 0; + m_view->progressBar->setVisible(true); + m_view->progressBar->setRange(0, aznumeric_caster(assets.size())); + m_view->progressBar->setValue(0); + m_view->scanButton->setEnabled(false); + m_view->upgradeAllButton->setEnabled(false); + m_view->onlyShowOutdated->setEnabled(false); + + for (int row = 0; row != m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + SetRowBusy(row); + } + } + + QString spinnerText = QStringLiteral("Upgrade in progress - gathering dependencies for the scanned graphs"); + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(true); + } + + void Controller::OnUpgradeDependencySortEnd + ( [[maybe_unused]] const ModifyConfiguration& config + , const WorkingAssets& assets + , [[maybe_unused]] const AZStd::vector& sortedOrder) + { + m_handledAssetCount = 0; + m_view->progressBar->setRange(0, aznumeric_caster(assets.size())); + m_view->progressBar->setValue(0); + m_view->progressBar->setVisible(true); + + for (int row = 0; row != m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + SetRowPending(row); + } + } + + QString spinnerText = QStringLiteral("Upgrade in progress - gathering dependencies is complete"); + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(false); + AddLogEntries(); + } + + void Controller::SetRowBusy(int index) + { + if (index >= m_view->tableWidget->rowCount()) + { + return; + } + + AzQtComponents::StyledBusyLabel* busy = new AzQtComponents::StyledBusyLabel(this); + busy->SetBusyIconSize(16); + m_view->tableWidget->setCellWidget(index, ColumnStatus, busy); + } + + void Controller::SetRowFailed(int index, AZStd::string_view message) + { + if (index >= m_view->tableWidget->rowCount()) + { + return; + } + + QToolButton* doneButton = new QToolButton(this); + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); + doneButton->setToolTip(message.data()); + m_view->tableWidget->setCellWidget(index, ColumnStatus, doneButton); + } + + void Controller::SetRowPending(int index) + { + m_view->tableWidget->removeCellWidget(index, ColumnStatus); + } + + void Controller::SetRowsBusy() + { + for (int i = 0; i != m_view->tableWidget->rowCount(); ++i) + { + SetRowBusy(i); + } + } + + void Controller::SetRowSucceeded(int index) + { + if (index >= m_view->tableWidget->rowCount()) + { + return; + } + + QToolButton* doneButton = new QToolButton(this); + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); + m_view->tableWidget->setCellWidget(index, ColumnStatus, doneButton); + } + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h new file mode 100644 index 0000000000..9842ea3da4 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if !defined(Q_MOC_RUN) +#include +#include +#include +#include +#include +#include +#include +#include +AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING +#endif + +class QPushButton; +class QTableWidgetItem; + +namespace Ui +{ + class View; +} + +namespace AzQtComponents +{ + class StyledBusyLabel; +} + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog + //! Handles display change notifications, handles state change notifications, sends control requests + class Controller + : public AzQtComponents::StyledDialog + , private UpgradeNotificationsBus::Handler + , private ModelNotificationsBus::Handler + { + Q_OBJECT + + public: + AZ_CLASS_ALLOCATOR(Controller, AZ::SystemAllocator, 0); + + explicit Controller(QWidget* parent = nullptr); + ~Controller(); + + private: + static constexpr int ColumnAsset = 0; + static constexpr int ColumnAction = 1; + static constexpr int ColumnBrowse = 2; + static constexpr int ColumnStatus = 3; + + Ui::View* m_view = nullptr; + int m_handledAssetCount = 0; + + void AddLogEntries(); + void EnableAllUpgradeButtons(); + QList FindTableItems(const AZ::Data::AssetInfo& assetInfo); + + void OnButtonPressClose(); + void OnButtonPressScan(); + void OnButtonPressUpgrade(); + void OnButtonPressUpgradeImplementation(const AZ::Data::AssetInfo& assetInfo); + void OnButtonPressUpgradeSingle(const AZ::Data::AssetInfo& assetInfo); + + void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped) override; + + void OnScanBegin(size_t assetCount) override; + void OnScanComplete(const ScanResult& result) override; + void OnScanFilteredGraph(const AZ::Data::AssetInfo& info) override; + void OnScanLoadFailure(const AZ::Data::AssetInfo& info) override; + void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) override; + enum class Filtered { No, Yes }; + void OnScannedGraph(const AZ::Data::AssetInfo& info, Filtered filtered); + void OnScannedGraphResult(const AZ::Data::AssetInfo& info); + + // for single operation UI updates, just check the assets size, or note it on the request + void OnUpgradeBegin(const ModifyConfiguration& config, const WorkingAssets& assets) override; + void OnUpgradeComplete(const ModificationResults& results) override; + void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) override; + void OnUpgradeDependencySortBegin(const ModifyConfiguration& config, const WorkingAssets& assets) override; + void OnUpgradeDependencySortEnd + ( const ModifyConfiguration& config + , const WorkingAssets& assets + , const AZStd::vector& sortedOrder) override; + void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) override; + void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) override; + + void SetLoggingPreferences(); + void SetSpinnerIsBusy(bool isBusy); + void SetRowBusy(int index); + void SetRowFailed(int index, AZStd::string_view message); + void SetRowPending(int index); + void SetRowsBusy(); + void SetRowSucceeded(int index); + }; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp new file mode 100644 index 0000000000..f067feeca4 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp @@ -0,0 +1,233 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace FileSaverCpp +{ + class FileEventHandler + : public AZ::IO::FileIOEventBus::Handler + { + public: + int m_errorCode = 0; + AZStd::string m_fileName; + + FileEventHandler() + { + BusConnect(); + } + + ~FileEventHandler() + { + BusDisconnect(); + } + + void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override + { + m_errorCode = errorCode; + + if (fileName) + { + m_fileName = fileName; + } + } + }; +} + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + FileSaver::FileSaver + ( AZStd::function onReadOnlyFile + , AZStd::function onComplete) + : m_onReadOnlyFile(onReadOnlyFile) + , m_onComplete(onComplete) + {} + + void FileSaver::PerformMove + ( AZStd::string tmpFileName + , AZStd::string target + , size_t remainingAttempts) + { + FileSaverCpp::FileEventHandler fileEventHandler; + + if (remainingAttempts == 0) + { + AZ::SystemTickBus::QueueFunction([this, tmpFileName]() + { + FileSaveResult result; + result.fileSaveError = "Failed to move updated file from temporary location to tmpFileName destination"; + result.tempFileRemovalError = RemoveTempFile(tmpFileName); + m_onComplete(result); + }); + } + else if (remainingAttempts == 2) + { + auto streamer = AZ::Interface::Get(); + // before the last attempt, flush all the caches + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); + streamer->SetRequestCompleteCallback(flushRequest + , [this, remainingAttempts, tmpFileName, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // One last try + AZ::SystemTickBus::QueueFunction( + [this, remainingAttempts, tmpFileName, target]() { PerformMove(tmpFileName, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + else + { + // the actual move attempt + auto moveResult = AZ::IO::SmartMove(tmpFileName.c_str(), target.c_str()); + if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + { + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + // Bump the slice asset up in the asset processor's queue. + AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); + AZ::SystemTickBus::QueueFunction([this, tmpFileName]() + { + FileSaveResult result; + result.tempFileRemovalError = RemoveTempFile(tmpFileName); + m_onComplete(result); + }); + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to tmpFileName destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + streamer->SetRequestCompleteCallback(flushRequest, [this, tmpFileName, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction([this, tmpFileName, target, remainingAttempts]() { PerformMove(tmpFileName, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + } + } + + void FileSaver::OnSourceFileReleased(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + AZStd::string tmpFileName; + // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. + // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. + if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) + { + FileSaveResult result; + result.fileSaveError = "Failure to create temporary file name"; + m_onComplete(result); + return; + } + + bool tempSavedSucceeded = false; + AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); + if (fileStream.IsOpen()) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasEditor::ScriptCanvasAssetHandler handler; + tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); + } + + fileStream.Close(); + } + + if (!tempSavedSucceeded) + { + FileSaveResult result; + result.fileSaveError = "Save asset data to temporary file failed"; + m_onComplete(result); + return; + } + + AzToolsFramework::SourceControlCommandBus::Broadcast + ( &AzToolsFramework::SourceControlCommandBus::Events::RequestEdit + , fullPath.c_str() + , true + , [this, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) + { + constexpr const size_t k_maxAttemps = 10; + + if (!info.IsReadOnly()) + { + PerformMove(tmpFileName, fullPath, k_maxAttemps); + } + else if (m_onReadOnlyFile && m_onReadOnlyFile()) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(tmpFileName, fullPath, k_maxAttemps); + } + else + { + FileSaveResult result; + result.fileSaveError = "Source file was and remained read-only"; + result.tempFileRemovalError = RemoveTempFile(tmpFileName); + m_onComplete(result); + } + }); + } + + AZStd::string FileSaver::RemoveTempFile(AZStd::string_view tempFile) + { + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + if (!fileIO) + { + return "GraphUpgradeComplete: No FileIO instance"; + } + + if (fileIO->Exists(tempFile.data()) && !fileIO->Remove(tempFile.data())) + { + return AZStd::string::format("Failed to remove temporary file: %s", tempFile.data()); + } + + return ""; + } + + void FileSaver::Save(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult + (fullPathFound + , &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath + , relativePath, fullPath); + + if (!fullPathFound) + { + FileSaveResult result; + result.fileSaveError = "Full source path not found"; + m_onComplete(result); + } + else + { + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + this->OnSourceFileReleased(asset); + }); + streamer->QueueRequest(flushRequest); + } + } + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h new file mode 100644 index 0000000000..dd333927ed --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + struct FileSaveResult + { + AZStd::string fileSaveError; + AZStd::string tempFileRemovalError; + }; + + class FileSaver + { + public: + AZ_CLASS_ALLOCATOR(FileSaver, AZ::SystemAllocator, 0); + + FileSaver + ( AZStd::function onReadOnlyFile + , AZStd::function onComplete); + + void Save(AZ::Data::Asset asset); + + private: + AZStd::function m_onComplete; + AZStd::function m_onReadOnlyFile; + + void OnSourceFileReleased(AZ::Data::Asset asset); + + void PerformMove + ( AZStd::string source + , AZStd::string target + , size_t remainingAttempts); + + AZStd::string RemoveTempFile(AZStd::string_view tempFile); + }; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h new file mode 100644 index 0000000000..47cebe7324 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include + +#define VE_LOG(...) LogBus::Broadcast(&LogTraits::Entry, __VA_ARGS__); + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + class LogTraits + : public AZ::EBusTraits + { + public: + virtual void Activate() = 0; + virtual void Clear() = 0; + virtual void Deactivate() = 0; + virtual void Entry(const char* format, ...) = 0; + virtual const AZStd::vector* GetEntries() const = 0; + virtual void SetVersionExporerExclusivity(bool enabled) = 0; + virtual void SetVerbose(bool verbosity) = 0; + }; + using LogBus = AZ::EBus; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp new file mode 100644 index 0000000000..d8d242adbb --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include + +namespace ModifierCpp +{ + +} + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + EditorKeepAlive::EditorKeepAlive() + { + ISystem* system = nullptr; + CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); + + if (system) + { + m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + + if (m_edKeepEditorActive) + { + m_keepEditorActive = m_edKeepEditorActive->GetIVal(); + m_edKeepEditorActive->Set(1); + } + } + } + + EditorKeepAlive::~EditorKeepAlive() + { + if (m_edKeepEditorActive) + { + m_edKeepEditorActive->Set(m_keepEditorActive); + } + } + + Model::Model() + { + ModelRequestsBus::Handler::BusConnect(); + } + + void Model::CacheSettings() + { + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + } + + const ModificationResults* Model::GetResults() + { + return !IsWorking() ? &m_modResults : nullptr; + } + + void Model::Idle() + { + m_state = State::Idle; + m_keepEditorAlive.reset(); + m_log.Deactivate(); + } + + bool Model::IsReadyToModify() const + { + if (IsWorking()) + { + return false; + } + + if (!m_scanner) + { + return false; + } + + return !m_scanner->GetResult().m_unfiltered.empty(); + } + + bool Model::IsWorking() const + { + return m_state != State::Idle; + } + + void Model::Modify(const ModifyConfiguration& modification) + { + if (!IsReadyToModify()) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Explorer is not ready to modify graphs."); + return; + } + + if (modification.modifySingleAsset.m_assetId.IsValid()) + { + const auto& results = m_scanner->GetResult(); + auto iter = AZStd::find_if + ( results.m_unfiltered.begin() + , results.m_unfiltered.end() + , [&modification](const auto& candidate) + { + return candidate.info.m_assetId == modification.modifySingleAsset.m_assetId; + }); + + if (iter == results.m_unfiltered.end()) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Requested upgrade graph not found in scanned list."); + return; + } + + + m_state = State::ModifySingle; + m_modifier = AZStd::make_unique(modification, WorkingAssets{ *iter }, [this]() { OnModificationComplete(); }); + } + else + { + auto results = m_scanner->TakeResult(); + m_state = State::ModifyAll; + m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this]() { OnModificationComplete(); }); + } + + m_modResults = {}; + m_log.Activate(); + m_keepEditorAlive = AZStd::make_unique(); + } + + void Model::OnModificationComplete() + { + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeComplete, m_modifier->GetResult()); + m_modifier.reset(); + + if (m_state == State::ModifyAll) + { + m_scanner.reset(); + } + + Idle(); + } + + void Model::OnScanComplete() + { + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanComplete, m_scanner->GetResult()); + Idle(); + } + + void Model::Scan(const ScanConfiguration& config) + { + if (IsWorking()) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Explorer is already working"); + return; + } + + m_state = State::Scanning; + m_log.Activate(); + m_keepEditorAlive = AZStd::make_unique(); + m_scanner = AZStd::make_unique(config, [this](){ OnScanComplete(); }); + } + + void Model::RestoreSettings() + { + m_settingsCache.reset(); + } + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h new file mode 100644 index 0000000000..ab0f710870 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +struct ICVar; + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow + //! the upgrade tool to work even if the editor is not in the foreground + class EditorKeepAlive + { + public: + EditorKeepAlive(); + ~EditorKeepAlive(); + + private: + int m_keepEditorActive; + ICVar* m_edKeepEditorActive; + }; + + //! Handles model change requests, state queries; sends state change notifications + class Model + : public ModelRequestsBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(Model, AZ::SystemAllocator, 0); + + Model(); + + const ModificationResults* GetResults() override; + + void Modify(const ModifyConfiguration& modification) override; + + void Scan(const ScanConfiguration& config) override; + + private: + enum class State + { + Idle, + Scanning, + ModifyAll, + ModifySingle + }; + + State m_state = State::Idle; + Log m_log; + + // these two are managed by the same class because the modifer will only operate on the results of the scanner + AZStd::unique_ptr m_modifier; + AZStd::unique_ptr m_scanner; + AZStd::unique_ptr m_settingsCache; + AZStd::unique_ptr m_keepEditorAlive; + + ModificationResults m_modResults; + + void CacheSettings(); + void Idle(); + bool IsReadyToModify() const; + bool IsWorking() const; + void OnModificationComplete(); + void OnScanComplete(); + void RestoreSettings(); + }; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h new file mode 100644 index 0000000000..01eb200542 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + struct WorkingAsset + { + AZ::Data::Asset asset; + AZ::Data::AssetInfo info; + }; + + using WorkingAssets = AZStd::vector; + + struct ModifyConfiguration + { + AZStd::function)> modification; + AZStd::function onReadOnlyFile; + AZ::Data::AssetInfo modifySingleAsset; + bool backupGraphBeforeModification = false; + bool successfulDependencyUpgradeRequired = true; + }; + + struct ModificationResult + { + AZ::Data::Asset asset; + AZ::Data::AssetInfo assetInfo; + AZStd::string errorMessage; + }; + + struct ModificationResults + { + AZStd::vector m_successes; + AZStd::vector m_failures; + }; + + struct ScanConfiguration + { + AZStd::function)> filter; + bool reportFilteredGraphs = false; + }; + + struct ScanResult + { + AZStd::vector m_catalogAssets; + WorkingAssets m_unfiltered; + AZStd::vector m_filteredAssets; + AZStd::vector m_loadErrors; + }; + + enum Result + { + Failure, + Success + }; + + class ModificationNotificationsTraits + : public AZ::EBusTraits + { + public: + virtual void ModificationComplete(const ModificationResult& result) = 0; + }; + using ModificationNotificationsBus = AZ::EBus; + + class ModelRequestsTraits + : public AZ::EBusTraits + { + public: + virtual const ModificationResults* GetResults() = 0; + virtual void Modify(const ModifyConfiguration& modification) = 0; + virtual void Scan(const ScanConfiguration& filter) = 0; + }; + using ModelRequestsBus = AZ::EBus; + + class ModelNotificationsTraits + : public AZ::EBusTraits + { + public: + virtual void OnScanBegin(size_t assetCount) = 0; + virtual void OnScanComplete(const ScanResult& result) = 0; + virtual void OnScanFilteredGraph(const AZ::Data::AssetInfo& info) = 0; + virtual void OnScanLoadFailure(const AZ::Data::AssetInfo& info) = 0; + virtual void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) = 0; + + virtual void OnUpgradeBegin(const ModifyConfiguration& config, const WorkingAssets& assets) = 0; + virtual void OnUpgradeComplete(const ModificationResults& results) = 0; + virtual void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) = 0; + virtual void OnUpgradeDependencySortBegin(const ModifyConfiguration& config, const WorkingAssets& assets) = 0; + virtual void OnUpgradeDependencySortEnd + ( const ModifyConfiguration& config + , const WorkingAssets& assets + , const AZStd::vector& sortedOrder) = 0; + virtual void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) = 0; + virtual void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) = 0; + }; + using ModelNotificationsBus = AZ::EBus; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp new file mode 100644 index 0000000000..f3da1ba309 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -0,0 +1,405 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include + +namespace ModifierCpp +{ + +} + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + Modifier::Modifier + ( const ModifyConfiguration& modification + , WorkingAssets&& assets + , AZStd::function onComplete) + : m_state(State::GatheringDependencies) + , m_config(modification) + , m_assets(assets) + , m_onComplete(onComplete) + { + AZ_Assert(m_config.modification, "No modification function provided"); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeBegin, modification, m_assets); + AZ::SystemTickBus::Handler::BusConnect(); + } + + const AZ::Data::AssetInfo& Modifier::GetCurrentAsset() const + { + return m_state == State::GatheringDependencies + ? m_assets[m_assetIndex].info + : m_assets[m_dependencyOrderedAssetIndicies[m_assetIndex]].info; + } + + AZStd::unordered_set& Modifier::GetOrCreateDependencyIndexSet() + { + auto iter = m_dependencies.find(m_assetIndex); + if (iter == m_dependencies.end()) + { + iter = m_dependencies.insert_or_assign(m_assetIndex, AZStd::unordered_set()).first; + } + + return iter->second; + } + + const ModificationResults& Modifier::GetResult() const + { + return m_results; + } + + void Modifier::GatherDependencies() + { + AZ::SerializeContext* serializeContext{}; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + AZ_Assert(serializeContext, "SerializeContext is required to enumerate dependent assets in the ScriptCanvas file"); + + bool anyFailures = false; + auto asset = LoadAsset(); + + if (asset + && asset.GetAs() + && asset.GetAs()->GetScriptCanvasGraph() + && asset.GetAs()->GetScriptCanvasGraph()->GetGraphData()) + { + auto graphData = asset.GetAs()->GetScriptCanvasGraph()->GetGraphData(); + + auto dependencyGrabber = [this] + ( void* instancePointer + , const AZ::SerializeContext::ClassData* classData + , [[maybe_unused]] const AZ::SerializeContext::ClassElement* classElement) + { + if (auto azTypeId = classData->m_azRtti->GetTypeId(); + azTypeId == azrtti_typeid>()) + { + const auto* subgraphAsset = + reinterpret_cast*>(instancePointer); + if (subgraphAsset->GetId().IsValid()) + { + if (auto iter = m_assetInfoIndexById.find(subgraphAsset->GetId().m_guid); iter != m_assetInfoIndexById.end()) + { + // insert the index of the dependency into the set that belongs to this asset + GetOrCreateDependencyIndexSet().insert(iter->second); + } + } + } + // always continue, make note of the script canvas dependencies + return true; + }; + + if (!serializeContext->EnumerateInstanceConst + ( graphData + , azrtti_typeid() + , dependencyGrabber + , {} + , AZ::SerializeContext::ENUM_ACCESS_FOR_READ + , nullptr + , nullptr)) + { + anyFailures = true; + VE_LOG("Modifier: ERROR - Failed to gather dependencies from graph data: %s" + , GetCurrentAsset().m_relativePath.c_str()) + } + } + else + { + anyFailures = true; + VE_LOG("Modifier: ERROR - Failed to load asset %s for modification, even though it scanned properly" + , GetCurrentAsset().m_relativePath.c_str()); + } + + ModelNotificationsBus::Broadcast + ( &ModelNotificationsTraits::OnUpgradeDependenciesGathered + , GetCurrentAsset() + , anyFailures ? Result::Failure : Result::Success); + + // Flush asset database events to ensure no asset references are held by closures queued on Ebuses. + AZ::Data::AssetManager::Instance().DispatchEvents(); + } + + AZ::Data::Asset Modifier::LoadAsset() + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( GetCurrentAsset().m_assetId + , azrtti_typeid() + , AZ::Data::AssetLoadBehavior::PreLoad); + + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + return asset; + } + else + { + return {}; + } + } + + void Modifier::ModificationComplete(const ModificationResult& result) + { + m_result = result; + + if (result.errorMessage.empty()) + { + SaveModifiedGraph(result); + } + else + { + ReportModificationError(result.errorMessage); + } + } + + void Modifier::ModifyCurrentAsset() + { + m_result = {}; + m_result.assetInfo = GetCurrentAsset(); + + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeModificationBegin, m_config, GetCurrentAsset()); + + if (auto asset = LoadAsset()) + { + ModificationNotificationsBus::Handler::BusConnect(); + m_modifyState = ModifyState::InProgress; + m_config.modification(asset); + } + else + { + ReportModificationError("Failed to load during modification"); + } + } + + void Modifier::ModifyNextAsset() + { + ModelNotificationsBus::Broadcast + ( &ModelNotificationsTraits::OnUpgradeModificationEnd, m_config, GetCurrentAsset(), m_result); + ModificationNotificationsBus::Handler::BusDisconnect(); + m_modifyState = ModifyState::Idle; + ++m_assetIndex; + m_result = {}; + } + + void Modifier::ReportModificationError(AZStd::string_view report) + { + m_result.asset = {}; + m_result.errorMessage = report; + m_results.m_failures.push_back(m_result); + ModifyNextAsset(); + } + + void Modifier::ReportModificationSuccess() + { + m_results.m_successes.push_back(m_result.assetInfo); + ModifyNextAsset(); + } + + void Modifier::ReportSaveResult() + { + AZStd::lock_guard lock(m_mutex); + m_fileSaver.reset(); + + if (m_fileSaveResult.fileSaveError.empty()) + { + ReportModificationSuccess(); + } + else + { + ReportModificationError(m_fileSaveResult.fileSaveError); + } + + m_fileSaveResult = {}; + m_modifyState = ModifyState::Idle; + } + + void Modifier::OnFileSaveComplete(const FileSaveResult& result) + { + if (!result.tempFileRemovalError.empty()) + { + VE_LOG + ( "Temporary file not removed for %s: %s" + , m_result.assetInfo.m_relativePath.c_str() + , result.tempFileRemovalError.c_str()); + } + + AZStd::lock_guard lock(m_mutex); + m_modifyState = ModifyState::ReportResult; + m_fileSaver.reset(); + m_fileSaveResult = result; + } + + void Modifier::OnSystemTick() + { + switch (m_state) + { + case State::GatheringDependencies: + TickGatherDependencies(); + break; + + case State::ModifyingGraphs: + TickUpdateGraph(); + break; + } + + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::SystemTickBus::ExecuteQueuedEvents(); + } + + void Modifier::SaveModifiedGraph(const ModificationResult& result) + { + m_modifyState = ModifyState::Saving; + m_fileSaver = AZStd::make_unique + ( m_config.onReadOnlyFile + , [this](const FileSaveResult& result) { OnFileSaveComplete(result); }); + m_fileSaver->Save(result.asset); + } + + void Modifier::SortGraphsByDependencies() + { + m_dependencyOrderedAssetIndicies.reserve(m_assets.size()); + Sorter sorter; + sorter.modifier = this; + sorter.Sort(); + } + + ModificationResults&& Modifier::TakeResult() + { + return AZStd::move(m_results); + } + + void Modifier::TickGatherDependencies() + { + if (m_assetIndex == 0) + { + if (m_config.successfulDependencyUpgradeRequired) + { + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeDependencySortBegin, m_config, m_assets); + m_assetInfoIndexById.reserve(m_assets.size()); + + for (size_t index = 0; index != m_assets.size(); ++index) + { + m_assetInfoIndexById.insert({ m_assets[index].info.m_assetId.m_guid, index }); + } + } + else + { + m_dependencyOrderedAssetIndicies.reserve(m_assets.size()); + + for (size_t index = 0; index != m_assets.size(); ++index) + { + m_dependencyOrderedAssetIndicies.push_back(index); + } + + // go straight into ModifyinGraphs + m_assetIndex = m_assets.size(); + } + } + + if (m_assetIndex == m_assets.size()) + { + if (m_config.successfulDependencyUpgradeRequired) + { + SortGraphsByDependencies(); + ModelNotificationsBus::Broadcast + ( &ModelNotificationsTraits::OnUpgradeDependencySortEnd + , m_config + , m_assets + , m_dependencyOrderedAssetIndicies); + } + + m_assetIndex = 0; + m_state = State::ModifyingGraphs; + } + else + { + GatherDependencies(); + ++m_assetIndex; + } + } + + void Modifier::TickUpdateGraph() + { + if (m_assetIndex == m_assets.size()) + { + VE_LOG("Modifier: Complete."); + AZ::SystemTickBus::Handler::BusDisconnect(); + + if (m_onComplete) + { + m_onComplete(); + } + } + else + { + AZStd::lock_guard lock(m_mutex); + + switch (m_modifyState) + { + case ScriptCanvasEditor::VersionExplorer::Modifier::ModifyState::Idle: + ModifyCurrentAsset(); + break; + case ScriptCanvasEditor::VersionExplorer::Modifier::ModifyState::ReportResult: + ReportSaveResult(); + break; + default: + break; + } + } + } + + const AZStd::unordered_set* Modifier::Sorter::GetDependencies(size_t index) const + { + auto iter = modifier->m_dependencies.find(index); + return iter != modifier->m_dependencies.end() ? &iter->second : nullptr; + } + + void Modifier::Sorter::Sort() + { + for (size_t index = 0; index != modifier->m_assets.size(); ++index) + { + Visit(index); + } + } + + void Modifier::Sorter::Visit(size_t index) + { + if (markedPermanent.contains(index)) + { + return; + } + + if (markedTemporary.contains(index)) + { + AZ_Error + (ScriptCanvas::k_VersionExplorerWindow.data() + , false + , "Modifier: Dependency sort has failed during, circular dependency detected for Asset: %s" + , modifier->GetCurrentAsset().m_relativePath.c_str()); + return; + } + + markedTemporary.insert(index); + + if (auto dependencies = GetDependencies(index)) + { + for (auto& dependency : *dependencies) + { + Visit(dependency); + } + } + + markedTemporary.erase(index); + markedPermanent.insert(index); + modifier->m_dependencyOrderedAssetIndicies.push_back(index); + } + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h new file mode 100644 index 0000000000..981a1eb746 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + class Modifier + : private AZ::SystemTickBus::Handler + , private ModificationNotificationsBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(Modifier, AZ::SystemAllocator, 0); + + Modifier + ( const ModifyConfiguration& modification + , WorkingAssets&& assets + , AZStd::function onComplete); + + const ModificationResults& GetResult() const; + ModificationResults&& TakeResult(); + + private: + friend class Sorter; + + struct Sorter + { + Modifier* modifier; + AZStd::unordered_set markedPermanent; + AZStd::unordered_set markedTemporary; + void Sort(); + + private: + void Visit(size_t index); + const AZStd::unordered_set* GetDependencies(size_t index) const; + }; + + enum class State + { + GatheringDependencies, + ModifyingGraphs + }; + + enum class ModifyState + { + Idle, + InProgress, + Saving, + ReportResult + }; + + AZStd::recursive_mutex m_mutex; + + // the two states reside in this class because the modification is only complete if the new source file saves out + State m_state = State::GatheringDependencies; + ModifyState m_modifyState = ModifyState::Idle; + size_t m_assetIndex = 0; + AZStd::function m_onComplete; + // asset infos in scanned order + WorkingAssets m_assets; + // dependency sorted order indices into the asset vector + AZStd::vector m_dependencyOrderedAssetIndicies; + // dependency indices by asset info index (only exist if graphs have them) + AZStd::unordered_map> m_dependencies; + AZStd::unordered_map m_assetInfoIndexById; + AZStd::vector m_failures; + ModifyConfiguration m_config; + ModificationResult m_result; + ModificationResults m_results; + AZStd::unique_ptr m_fileSaver; + FileSaveResult m_fileSaveResult; + + void GatherDependencies(); + const AZ::Data::AssetInfo& GetCurrentAsset() const; + AZStd::unordered_set& GetOrCreateDependencyIndexSet(); + AZ::Data::Asset LoadAsset(); + void ModifyCurrentAsset(); + void ModifyNextAsset(); + void ModificationComplete(const ModificationResult& result) override; + void ReportModificationError(AZStd::string_view report); + void ReportModificationSuccess(); + void ReportSaveResult(); + void SaveModifiedGraph(const ModificationResult& result); + void SortGraphsByDependencies(); + void OnFileSaveComplete(const FileSaveResult& result); + void OnSystemTick() override; + void TickGatherDependencies(); + void TickUpdateGraph(); + }; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp new file mode 100644 index 0000000000..bc69f6e634 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + Scanner::Scanner(const ScanConfiguration& config, AZStd::function onComplete) + : m_config(config) + , m_onComplete(onComplete) + { + AZ::Data::AssetCatalogRequestBus::Broadcast + ( &AZ::Data::AssetCatalogRequestBus::Events::EnumerateAssets + , nullptr + , [this](const AZ::Data::AssetId, const AZ::Data::AssetInfo& assetInfo) + { + if (assetInfo.m_assetType == azrtti_typeid()) + { + m_result.m_catalogAssets.push_back(assetInfo); + } + } + , nullptr); + + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanBegin, m_result.m_catalogAssets.size()); + AZ::SystemTickBus::Handler::BusConnect(); + } + + void Scanner::FilterAsset(AZ::Data::Asset asset) + { + if (m_config.filter && m_config.filter(asset)) + { + VE_LOG("Scanner: Excluded: %s ", GetCurrentAsset().m_relativePath.c_str()); + m_result.m_filteredAssets.push_back(GetCurrentAsset()); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanFilteredGraph, GetCurrentAsset()); + } + else + { + VE_LOG("Scanner: Included: %s ", GetCurrentAsset().m_relativePath.c_str()); + m_result.m_unfiltered.push_back({ asset, GetCurrentAsset() }); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanUnFilteredGraph, GetCurrentAsset()); + } + } + + const AZ::Data::AssetInfo& Scanner::GetCurrentAsset() const + { + return m_result.m_catalogAssets[m_catalogAssetIndex]; + } + + const ScanResult& Scanner::GetResult() const + { + return m_result; + } + + AZ::Data::Asset Scanner::LoadAsset() + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( GetCurrentAsset().m_assetId + , azrtti_typeid() + , AZ::Data::AssetLoadBehavior::PreLoad); + + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + return asset; + } + else + { + return {}; + } + } + + void Scanner::OnSystemTick() + { + if (m_catalogAssetIndex == m_result.m_catalogAssets.size()) + { + VE_LOG("Scanner: Complete."); + AZ::SystemTickBus::Handler::BusDisconnect(); + + if (m_onComplete) + { + m_onComplete(); + } + } + else + { + if (auto asset = LoadAsset()) + { + VE_LOG("Scanner: Loaded: %s ", GetCurrentAsset().m_relativePath.c_str()); + FilterAsset(asset); + } + else + { + VE_LOG("Scanner: Failed to load: %s ", GetCurrentAsset().m_relativePath.c_str()); + m_result.m_loadErrors.push_back(GetCurrentAsset()); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanLoadFailure, GetCurrentAsset()); + } + + VE_LOG("Scanner: scan of %s complete", GetCurrentAsset().m_relativePath.c_str()); + ++m_catalogAssetIndex; + } + } + + ScanResult&& Scanner::TakeResult() + { + return AZStd::move(m_result); + } + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h new file mode 100644 index 0000000000..fb030845c7 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + class Scanner + : private AZ::SystemTickBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(Scanner, AZ::SystemAllocator, 0); + + Scanner(const ScanConfiguration& config, AZStd::function onComplete); + + const ScanResult& GetResult() const; + ScanResult&& TakeResult(); + + private: + size_t m_catalogAssetIndex = 0; + AZStd::function m_onComplete; + ScanConfiguration m_config; + ScanResult m_result; + + void FilterAsset(AZ::Data::Asset); + const AZ::Data::AssetInfo& GetCurrentAsset() const; + AZ::Data::Asset LoadAsset(); + void OnSystemTick() override; + }; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp index 9670bb2f1f..14bc1c4dc8 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp @@ -6,37 +6,32 @@ * */ +#include +#include #include #include -#include #include -#include #include -#include "UpgradeHelper.h" - #include #include #include #include - #include #include - +#include +#include #include #include #include - -#include - +#include #include +#include +#include #include #include - #include #include -#include -#include namespace ScriptCanvasEditor { @@ -52,40 +47,47 @@ namespace ScriptCanvasEditor m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); int rows = 0; - auto& graphsToUpgrade = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade(); - for (auto& assetId : graphsToUpgrade) + const VersionExplorer::ModificationResults* result = nullptr; + VersionExplorer::ModelRequestsBus::BroadcastResult(result, &VersionExplorer::ModelRequestsTraits::GetResults); + + if (result && !result->m_failures.empty()) { - auto assetInfo = ScriptCanvasEditor::AssetHelpers::GetAssetInfo(assetId); - m_ui->tableWidget->insertRow(rows); + for (auto& failedUpdate : result->m_failures) + { + auto& assetInfo = failedUpdate.assetInfo; + auto assetId = assetInfo.m_assetId; - connect(m_ui->closeButton, &QPushButton::pressed, this, &QDialog::accept); - connect(m_ui->tableWidget, &QTableWidget::itemDoubleClicked, this, [this, rows, assetId](QTableWidgetItem* item) - { - if (item && item->data(Qt::UserRole).toInt() == rows) + m_ui->tableWidget->insertRow(rows); + + connect(m_ui->closeButton, &QPushButton::pressed, this, &QDialog::accept); + connect(m_ui->tableWidget, &QTableWidget::itemDoubleClicked, this, [this, rows, assetId](QTableWidgetItem* item) { - OpenGraph(assetId); + if (item && item->data(Qt::UserRole).toInt() == rows) + { + OpenGraph(assetId); + } } - } - ); + ); + + auto openGraph = [this, assetId] { + OpenGraph(assetId); + }; - auto openGraph = [this, assetId] { - OpenGraph(assetId); - }; + QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); + rowName->setData(Qt::UserRole, rows); + m_ui->tableWidget->setItem(rows, 0, rowName); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); - rowName->setData(Qt::UserRole, rows); - m_ui->tableWidget->setItem(rows, 0, rowName); + QToolButton* rowGoToButton = new QToolButton(this); + rowGoToButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg")); + rowGoToButton->setToolTip("Open Graph"); - QToolButton* rowGoToButton = new QToolButton(this); - rowGoToButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg")); - rowGoToButton->setToolTip("Open Graph"); - - connect(rowGoToButton, &QToolButton::clicked, openGraph); + connect(rowGoToButton, &QToolButton::clicked, openGraph); - m_ui->tableWidget->setCellWidget(rows, 1, rowGoToButton); + m_ui->tableWidget->setCellWidget(rows, 1, rowGoToButton); - ++rows; + ++rows; + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp deleted file mode 100644 index 5e6858c993..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp +++ /dev/null @@ -1,697 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include - -#include "UpgradeTool.h" - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include "UpgradeHelper.h" - -namespace ScriptCanvasEditor -{ - UpgradeTool::UpgradeTool(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::UpgradeTool()) - { - m_ui->setupUi(this); - - AzQtComponents::CheckBox::applyToggleSwitchStyle(m_ui->doNotAskCheckbox); - AzQtComponents::CheckBox::applyToggleSwitchStyle(m_ui->makeBackupCheckbox); - - m_ui->progressFrame->setVisible(false); - - connect(m_ui->upgradeButton, &QPushButton::pressed, this, &UpgradeTool::OnUpgrade); - connect(m_ui->notNowButton, &QPushButton::pressed, this, &UpgradeTool::OnNoThanks); - - UpgradeNotifications::Bus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - resize(700, 100); - } - - void UpgradeTool::OnNoThanks() - { - DisconnectBuses(); - - UpdateSettings(); - - reject(); - } - - void UpgradeTool::UpdateSettings() - { - auto userSettings = AZ::UserSettings::CreateFind(AZ_CRC("ScriptCanvasPreviewSettings", 0x1c5a2965), AZ::UserSettings::CT_LOCAL); - if (userSettings) - { - userSettings->m_showUpgradeDialog = !m_ui->doNotAskCheckbox->isChecked(); - - AZ::UserSettingsOwnerRequestBus::Event(AZ::UserSettings::CT_LOCAL, &AZ::UserSettingsOwnerRequests::SaveSettings); - } - } - - UpgradeTool::~UpgradeTool() - { - DisconnectBuses(); - } - - void UpgradeTool::DisconnectBuses() - { - UpgradeNotifications::Bus::Handler::BusDisconnect(); - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Data::AssetBus::MultiHandler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - void UpgradeTool::closeEvent(QCloseEvent* event) - { - // m_keepEditorAlive.reset(); - - DisconnectBuses(); - - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnUpgradeCancelled); - - AzQtComponents::StyledDialog::closeEvent(event); - } - - bool UpgradeTool::HasBackup() const - { - return m_ui->makeBackupCheckbox->isChecked(); - } - - void UpgradeTool::OnUpgrade() - { - setWindowFlag(Qt::WindowCloseButtonHint, false); - - // m_keepEditorAlive = AZStd::make_unique(); - - UpdateSettings(); - - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnUpgradeStart); - - m_assetsToUpgrade.clear(); - - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToUpgrade = upgradeRequests->GetAssetsToUpgrade(); - - AZ::SystemTickBus::Handler::BusConnect(); - - if (m_ui->makeBackupCheckbox->isChecked()) - { - if (!DoBackup()) - { - // There was a problem, ask if the user wants to keep going or abort - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Backup Failed"), - QObject::tr("Failed to backup your Script Canvas graphs, do you want to proceed with upgrade?"), - QMessageBox::Yes | QMessageBox::No, this); - - if (mb.exec() == QMessageBox::Yes) - { - DoUpgrade(); - } - } - } - else - { - DoUpgrade(); - } - } - - bool UpgradeTool::DoBackup() - { - if (!m_assetsToUpgrade.empty()) - { - m_state = UpgradeState::Backup; - - m_inProgressAsset = m_assetsToUpgrade.begin(); - - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->upgradeButton->setEnabled(false); - m_ui->notNowButton->setEnabled(false); - m_ui->doNotAskCheckbox->setEnabled(false); - m_ui->makeBackupCheckbox->setEnabled(false); - - // Make the folder for the backup - - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - m_backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(m_backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - m_backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(m_backupPath.c_str())) - { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(m_backupPath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Error("Script Canvas", false, "Failed to create backup folder %s", m_backupPath.c_str()); - - return false; - } - } - } - - return true; - } - - void UpgradeTool::BackupComplete() - { - m_currentAssetIndex = 0; - m_ui->progressBar->setValue(0); - - DoUpgrade(); - } - - void UpgradeTool::DoUpgrade() - { - m_state = UpgradeState::Upgrade; - - if (!m_assetsToUpgrade.empty()) - { - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->upgradeButton->setEnabled(false); - m_ui->notNowButton->setEnabled(false); - m_ui->doNotAskCheckbox->setEnabled(false); - m_ui->makeBackupCheckbox->setEnabled(false); - - m_inProgressAsset = m_assetsToUpgrade.begin(); - } - } - - void UpgradeTool::OnAssetReady(AZ::Data::Asset asset) - { - // Start asset upgrade job when current asset is unassigned only - // If current asset is present, there is ongoing progress handling this asset already - if (IsOnReadyAssetForCurrentProcess(asset.GetId())) - { - m_inProgress = true; - m_currentAsset = asset; - m_scriptCanvasEntity = AssetUpgradeJob(asset); - if (!m_scriptCanvasEntity) - { - ResetUpgradeCurrentAsset(); - } - } - } - - void UpgradeTool::OnAssetError(AZ::Data::Asset asset) - { - // Reset upgrade target when script canvas entity is unassigned only. - // If script canvas entity is present, we should let the conversion progress finish itself. - if (IsCurrentProcessFreeToAbort(asset.GetId())) - { - AZ_TracePrintf("Script Canvas", "Asset fails to get load: %s\n", asset.GetHint().c_str()); - ResetUpgradeCurrentAsset(); - } - } - - void UpgradeTool::OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType) - { - // Reset upgrade target when script canvas entity is unassigned only. - // If script canvas entity is present, we should let the conversion progress finish itself. - if (IsCurrentProcessFreeToAbort(assetId)) - { - AZ_TracePrintf("Script Canvas", "Asset gets unloaded: %s\n", m_inProgressAsset->m_relativePath.c_str()); - ResetUpgradeCurrentAsset(); - } - } - - - void UpgradeTool::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool skipped /*=false*/) - { - if (!skipped) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - - AZStd::string tmpFileName; - bool tmpFilesaved = false; - - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) - { - tmpFilesaved = AZ::Utils::SaveObjectToStream(fileStream, AZ::DataStream::ST_XML, &asset.GetAs()->GetScriptCanvasData()); - } - - fileStream.Close(); - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, &asset, fullPath, tmpFileName, tmpFilesaved](bool /*success*/, const AzToolsFramework::SourceControlFileInfo& info) - { - if (!info.IsReadOnly()) - { - if (tmpFilesaved) - { - PerformMove(asset, tmpFileName, fullPath); - } - } - else - { - if (m_overwriteAll) - { - MakeWriteable(info); - - if (tmpFilesaved) - { - PerformMove(asset, tmpFileName, fullPath); - } - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - MakeWriteable(info); - - if (tmpFilesaved) - { - PerformMove(asset, tmpFileName, fullPath); - } - } - - } - } - }); - } - } - else - { - // We skipped the upgrade (it's up to date), just mark it complete - AZ::SystemTickBus::QueueFunction([this, asset]() { UpgradeComplete(asset, true); }); - - } - - } - - void UpgradeTool::MakeWriteable(const AzToolsFramework::SourceControlFileInfo& info) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - } - - void UpgradeTool::PerformMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target) - { - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - - AZ::SystemTickBus::QueueFunction([this, &asset]() { UpgradeComplete(asset); }); - } - else - { - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, &asset, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, &asset, source, target]() { RetryMove(asset, source, target); }); - }); - streamer->QueueRequest(flushRequest); - } - } - - bool UpgradeTool::IsOnReadyAssetForCurrentProcess(const AZ::Data::AssetId& assetId) - { - return !m_currentAsset && m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgressAsset->m_assetId == assetId; - } - - bool UpgradeTool::IsCurrentProcessFreeToAbort(const AZ::Data::AssetId& assetId) - { - return !m_scriptCanvasEntity && m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgressAsset->m_assetId == assetId; - } - - bool UpgradeTool::IsUpgradeCompleteForAllAssets() - { - return !m_inProgress && !m_currentAsset && !m_scriptCanvasEntity && m_inProgressAsset == m_assetsToUpgrade.end(); - } - - bool UpgradeTool::IsUpgradeCompleteForCurrentAsset() - { - return !m_inProgress && !m_currentAsset && !m_scriptCanvasEntity && m_inProgressAsset != m_assetsToUpgrade.end(); - } - - void UpgradeTool::ResetUpgradeCurrentAsset() - { - AZ::Data::AssetBus::MultiHandler::BusDisconnect(m_currentAsset.GetId()); - - if (m_scriptCanvasEntity) - { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; - } - - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - } - - m_currentAsset.Release(); - m_currentAsset = {}; - m_inProgress = false; - } - - void UpgradeTool::OnSystemTick() - { - switch (m_state) - { - case UpgradeTool::UpgradeState::Upgrade: - - if (IsUpgradeCompleteForCurrentAsset()) - { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inProgressAsset; - - if (!AZ::Data::AssetBus::MultiHandler::BusIsConnectedId(assetToUpgrade.m_assetId)) - { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetToUpgrade.m_assetId); - } - - auto asset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::Default); - asset.BlockUntilLoadComplete(); - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(assetToUpgrade.m_relativePath); - streamer->SetRequestCompleteCallback(flushRequest, []([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - }); - streamer->QueueRequest(flushRequest); - - if (asset.IsReady() || asset.GetStatus() == AZ::Data::AssetData::AssetStatus::ReadyPreNotify) - { - m_currentAsset = asset; - m_scriptCanvasEntity = AssetUpgradeJob(asset); - if (!m_scriptCanvasEntity) - { - ResetUpgradeCurrentAsset(); - } - } - - m_ui->spinner->SetText(QObject::tr("%1").arg(assetToUpgrade.m_relativePath.c_str())); - } - else if (IsUpgradeCompleteForAllAssets()) - { - FinalizeUpgrade(); - } - break; - - case UpgradeTool::UpgradeState::Backup: - - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - AZ::Data::AssetInfo& assetToBackup = *m_inProgressAsset; - - m_ui->spinner->SetText(QObject::tr("%1").arg(assetToBackup.m_relativePath.c_str())); - - BackupAsset(assetToBackup); - - m_ui->progressBar->setValue(aznumeric_cast(++m_currentAssetIndex)); - } - else - { - BackupComplete(); - } - break; - - default: - break; - } - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - - } - - void UpgradeTool::BackupAsset(const AZ::Data::AssetInfo& assetInfo) - { - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - // Using this to get the watch folder - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo2; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetInfo.m_relativePath.c_str(), assetInfo2, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string targetFilePath; - AzFramework::StringFunc::Path::Join(m_backupPath.c_str(), relativePath.c_str(), targetFilePath); - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Error) - { - AZStd::string filename; - AzFramework::StringFunc::Path::GetFileName(sourceFilePath.c_str(), filename); - AZ_TracePrintf("Script Canvas", "Backup: %s -> %s\n", filename.c_str(), targetFilePath.c_str()); - } - else - { - AZ_TracePrintf("Script Canvas", "(Error) Failed to create backup: %s -> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - } - - ++m_inProgressAsset; - } - - void UpgradeTool::UpgradeComplete(const AZ::Data::Asset& asset, bool skipped /*= false*/) - { - m_ui->progressBar->setValue(aznumeric_cast(++m_currentAssetIndex)); - - ResetUpgradeCurrentAsset(); - - if (!skipped) - { - AZStd::string filename; - AzFramework::StringFunc::Path::GetFileName(asset.GetHint().c_str(), filename); - AZ_TracePrintf("Script Canvas", "%s -> Upgraded and Saved!\n", filename.c_str()); - } - } - - void UpgradeTool::FinalizeUpgrade() - { - setWindowFlag(Qt::WindowCloseButtonHint, true); - - AZ::SystemTickBus::Handler::BusDisconnect(); - - m_currentAsset = {}; - - SaveLog(); - - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnUpgradeComplete); - - AZ_TracePrintf("Script Canvas", "\nUpgrade Complete!\n"); - - DisconnectBuses(); - - accept(); - } - - void UpgradeTool::SaveLog() - { - AZStd::string outputFileName = AZStd::string::format("@devroot@/ScriptCanvasUpgradeReport.html"); - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - - AZStd::string endPath = resolvedBuffer; - AZ::StringFunc::Path::Normalize(endPath); - - AZ::IO::SystemFile outputFile; - if (!outputFile.Open(endPath.c_str(), - AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY)) - { - AZ_Error("Script Canvas", false, "Failed to open file for writing: %s", endPath.c_str()); - return; - } - - QDateTime theTime = QDateTime::currentDateTime(); - AZStd::string timeStamp = theTime.toString("yyyy-MM-dd [HH.mm.ss]").toUtf8().data(); - - AZStd::string header = "\n\n\n\n\n"; - header.append(AZStd::string::format("Log captured: %s
\n", timeStamp.c_str()).c_str()); - - outputFile.Write(header.c_str(), header.size()); - for (auto& log : m_logs) - { - AZStd::string logText = AZStd::string::format("%s
", log.c_str()); - AzFramework::StringFunc::Replace(logText, "\n", "
\n"); - outputFile.Write(logText.data(), logText.size()); - } - AZStd::string footer = "\n\n"; - outputFile.Write(footer.c_str(), footer.size()); - - - - outputFile.Close(); - } - - AZ::Entity* UpgradeTool::AssetUpgradeJob(AZ::Data::Asset&) - { - return nullptr; - } - - void UpgradeTool::RetryMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target) - { - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - - AZ::SystemTickBus::QueueFunction([this, &asset]() { UpgradeComplete(asset); }); - } - else - { - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, &asset, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, &asset, source, target]() { RetryMove(asset, source, target); }); - }); - streamer->QueueRequest(flushRequest); - - - //AZ::SystemTickBus::QueueFunction([this, &asset, source, target]() { RetryMove(asset, source, target); }); - } - } - - void UpgradeTool::CaptureLogFromTraceBus(const char* /*window*/, const char* message) - { - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } - - m_logs.push_back(msg); - } - - bool UpgradeTool::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s
", message); - CaptureLogFromTraceBus(window, msg.c_str()); - - return false; - } - - bool UpgradeTool::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s
", message); - CaptureLogFromTraceBus(window, msg.c_str()); - - return false; - } - - bool UpgradeTool::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s
", message); - CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - - return false; - } - - bool UpgradeTool::OnPrintf(const char* window, const char* message) - { - CaptureLogFromTraceBus(window, message); - return false; - } - -#include - -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h deleted file mode 100644 index be00198457..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#if !defined(Q_MOC_RUN) -#include - -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -#include -#include - -#include - -#include - -#include - -#include -#include -#include -#endif - -class QPushButton; - -namespace Ui -{ - class UpgradeTool; -} - -namespace ScriptCanvasEditor -{ - class KeepEditorAlive; - - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class UpgradeTool - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private AZ::Data::AssetBus::MultiHandler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler - { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(UpgradeTool, AZ::SystemAllocator, 0); - - UpgradeTool(QWidget* parent = nullptr); - ~UpgradeTool(); - - size_t& UpgradedGraphCount() { return m_upgradedAssets; } - size_t& SkippedGraphCount() { return m_skippedAssets; } - - bool HasBackup() const; - - private: - - bool IsOnReadyAssetForCurrentProcess(const AZ::Data::AssetId& assetId); - bool IsCurrentProcessFreeToAbort(const AZ::Data::AssetId& assetId); - bool IsUpgradeCompleteForAllAssets(); - bool IsUpgradeCompleteForCurrentAsset(); - void ResetUpgradeCurrentAsset(); - - void OnUpgrade(); - void OnNoThanks(); - void UpdateSettings(); - - enum class UpgradeState - { - Inactive, - Backup, - Upgrade - }; - UpgradeState m_state = UpgradeState::Inactive; - - bool DoBackup(); - void BackupAsset(const AZ::Data::AssetInfo& assetInfo); - void BackupComplete(); - - void DoUpgrade(); - void UpgradeComplete(const AZ::Data::Asset&, bool skipped = false); - - AZ::Entity* AssetUpgradeJob(AZ::Data::Asset& asset); - - // SystemTickBus::Handler - void OnSystemTick() override; - // - - // AssetBus::Handler - void OnAssetReady(AZ::Data::Asset asset) override; - void OnAssetError(AZ::Data::Asset asset) override; - void OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType assetType) override; - // - - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // - - void CaptureLogFromTraceBus(const char* window, const char* message); - - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void RetryMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target); - - void SaveLog(); - - bool m_inProgress = false; - size_t m_currentAssetIndex = 0; - - size_t m_upgradedAssets = 0; - size_t m_skippedAssets = 0; - - IUpgradeRequests::AssetList m_assetsToUpgrade; - IUpgradeRequests::AssetList::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_ui; - AZStd::recursive_mutex m_mutex; - - // AZStd::unique_ptr m_keepEditorAlive; - - AZStd::vector m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - AZStd::string m_backupPath; - - void FinalizeUpgrade(); - void DisconnectBuses(); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void MakeWriteable(const AzToolsFramework::SourceControlFileInfo& info); - void PerformMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target); - }; -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui deleted file mode 100644 index 78a63ce727..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui +++ /dev/null @@ -1,260 +0,0 @@ - - - UpgradeTool - - - Qt::WindowModal - - - - 0 - 0 - 801 - 328 - - - - - 0 - 0 - - - - Script Canvas Upgrade - - - - 5 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - - - - - 0 - 0 - - - - <html><head/><body><p>Script Canvas graphs are now compiled into Lua by the Asset Processor! In order to complete this upgrade, all graphs in your current project must be updated.</p><p>This upgrading is making changes to the underlying Script Canvas graph format. Depending on the number of scripts you've created this process could take a few minutes to complete. </p><p>This upgrade is required for any projects saved on 1.26 or earlier.</p><p>If you choose &quot;Not now&quot;, your project may not work correctly.</p></body></html> - - - false - - - true - - - - - - - - 0 - 80 - - - - QFrame::NoFrame - - - QFrame::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - true - - - - 0 - 0 - - - - - 0 - 0 - - - - false - - - background-color: rgb(47, 47, 47); - - - QFrame::NoFrame - - - QFrame::Raised - - - - - - - 0 - 0 - - - - - 32 - 32 - - - - false - - - - - - - - 0 - 0 - - - - - - - 24 - - - true - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 20 - 0 - - - - - - - - - - - - Backup my source graphs - - - true - - - - - - - Do not ask me again - - - - - - - - 0 - 0 - - - - Qt::LeftToRight - - - Upgrade - - - - - - - - 0 - 0 - - - - Qt::LeftToRight - - - Not now - - - false - - - - - - - - - - - - - - - - AzQtComponents::StyledBusyLabel - QWidget -
AzQtComponents/Components/StyledBusyLabel.h
- 1 -
-
- - -
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp deleted file mode 100644 index eb182ed291..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp +++ /dev/null @@ -1,1023 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace VersionExplorerCpp -{ - class FileEventHandler - : public AZ::IO::FileIOEventBus::Handler - { - public: - int m_errorCode = 0; - AZStd::string m_fileName; - - FileEventHandler() - { - BusConnect(); - } - - ~FileEventHandler() - { - BusDisconnect(); - } - - void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override - { - m_errorCode = errorCode; - - if (fileName) - { - m_fileName = fileName; - } - } - }; -} - -namespace ScriptCanvasEditor -{ - EditorKeepAlive::EditorKeepAlive() - { - ISystem* system = nullptr; - CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); - - m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); - - if (m_edKeepEditorActive) - { - m_keepEditorActive = m_edKeepEditorActive->GetIVal(); - m_edKeepEditorActive->Set(1); - } - } - - EditorKeepAlive::~EditorKeepAlive() - { - if (m_edKeepEditorActive) - { - m_edKeepEditorActive->Set(m_keepEditorActive); - } - } - - VersionExplorer::VersionExplorer(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::VersionExplorer()) - { - m_ui->setupUi(this); - - m_ui->tableWidget->horizontalHeader()->setVisible(false); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); - m_ui->tableWidget->setColumnWidth(3, 22); - - m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); - m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); - - connect(m_ui->scanButton, &QPushButton::pressed, this, &VersionExplorer::OnScan); - connect(m_ui->closeButton, &QPushButton::pressed, this, &VersionExplorer::OnClose); - connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &VersionExplorer::OnUpgradeAll); - - m_ui->progressBar->setValue(0); - m_ui->progressBar->setVisible(false); - - m_keepEditorAlive = AZStd::make_unique(); - m_inspectingAsset = m_assetsToInspect.end(); - - } - - VersionExplorer::~VersionExplorer() - { - AZ::SystemTickBus::Handler::BusDisconnect(); - - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - - } - - void VersionExplorer::Log(const char* format, ...) - { - if (m_ui->verbose->isChecked()) - { - char sBuffer[2048]; - va_list ArgList; - va_start(ArgList, format); - azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); - sBuffer[sizeof(sBuffer) - 1] = '\0'; - va_end(ArgList); - - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); - } - } - - void VersionExplorer::OnClose() - { - reject(); - } - - bool VersionExplorer::IsUpgrading() const - { - return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; - } - - void VersionExplorer::OnSystemTick() - { - switch (m_state) - { - case ProcessState::Scan: - - if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) - { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; - m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); - m_currentAsset.BlockUntilLoadComplete(); - if (m_currentAsset.IsReady()) - { - // The asset is ready, grab its info - m_inProgress = true; - InspectAsset(m_currentAsset, assetToUpgrade); - } - else - { - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem - ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - ++m_currentAssetRowIndex; - - Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); - ++m_failedAssets; - ScanComplete(m_currentAsset); - } - } - break; - - case ProcessState::Upgrade: - { - AZStd::lock_guard lock(m_mutex); - if (m_upgradeComplete) - { - ++m_upgradeAssetIndex; - m_inProgress = false; - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - - if (m_scriptCanvasEntity) - { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; - } - - GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); - - if (!m_isUpgradingSingleGraph) - { - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - } - - if (m_inProgressAsset == m_assetsToUpgrade.end()) - { - FinalizeUpgrade(); - } - } - else - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - m_inProgress = false; - m_state = ProcessState::Inactive; - m_settingsCache.reset(); - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - m_isUpgradingSingleGraph = false; - - if (m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(false); - } - - m_upgradeComplete = false; - } - - if (!IsUpgrading() && m_state == ProcessState::Upgrade) - { - AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); - // Make the backup - if (errorMessage.empty()) - { - Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); - QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); - spinner->SetIsBusy(true); - } - } - - // Upgrade the graph - UpgradeGraph(*m_inProgressAsset); - } - else - { - Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); - GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); - } - - } - break; - } - default: - break; - } - - FlushLogs(); - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - } - - // Backup - - void VersionExplorer::OnUpgradeAll() - { - m_state = ProcessState::Upgrade; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::Interface::Get()->SetIsUpgrading(true); - AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); - m_inProgressAsset = m_assetsToUpgrade.begin(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - AZ::SystemTickBus::Handler::BusConnect(); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - m_keepEditorAlive = AZStd::make_unique(); - } - - AZStd::string VersionExplorer::BackupGraph(const AZ::Data::Asset& asset) - { - if (!m_ui->makeBackupCheckbox->isChecked()) - { - // considered a success - return ""; - } - - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) - { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); - return "Failed to create backup folder"; - } - } - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); - return "Failed to find source file"; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return "Failed to copy source file to backup location"; - } - - Log("VersionExplorer::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return ""; - } - - void VersionExplorer::UpgradeGraph(const AZ::Data::Asset& asset) - { - m_inProgress = true; - m_upgradeComplete = false; - Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); - m_scriptCanvasEntity = nullptr; - - UpgradeNotifications::Bus::Handler::BusConnect(); - - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - - if (!scriptCanvasAsset) - { - return; - } - - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "VersionExplorer::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) - { - return; - } - - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) - { - if (queryEntity->GetState() == AZ::Entity::State::Active) - { - queryEntity->Deactivate(); - } - - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) - { - scriptCanvasEntity->Activate(); - } - - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - if (graphComponent) - { - m_scriptCanvasEntity = scriptCanvasEntity; - - graphComponent->UpgradeGraph - ( asset - , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_ui->verbose->isChecked()); - } - } - - AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); - } - - void VersionExplorer::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - if (!fullPathFound) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); - } - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - this->OnSourceFileReleased(asset); - }); - streamer->QueueRequest(flushRequest); - } - - void VersionExplorer::OnSourceFileReleased(AZ::Data::Asset asset) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - m_tmpFileName.clear(); - AZStd::string tmpFileName; - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); - return; - } - - bool tempSavedSucceeded = false; - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasEditor::ScriptCanvasAssetHandler handler; - tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); - } - - fileStream.Close(); - } - - // attempt to remove temporary file no matter what - m_tmpFileName = tmpFileName; - if (!tempSavedSucceeded) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); - return; - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) - { - constexpr const size_t k_maxAttemps = 10; - - if (!info.IsReadOnly()) - { - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - if (m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - } - } - }); - } - - void VersionExplorer::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target - , size_t remainingAttempts) - { - VersionExplorerCpp::FileEventHandler fileEventHandler; - - if (remainingAttempts == 0) - { - // all attempts failed, give up - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); - GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); - } - else if (remainingAttempts == 2) - { - // before the final attempt, flush all caches - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); - streamer->SetRequestCompleteCallback(flushRequest - , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction( - [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - else - { - // the actual move attempt - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - m_tmpFileName.clear(); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - AZ::SystemTickBus::QueueFunction([this, asset]() - { - GraphUpgradeComplete(asset, OperationResult::Success, ""); - }); - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - } - } - - void VersionExplorer::GraphUpgradeComplete - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - AZStd::lock_guard lock(m_mutex); - m_upgradeComplete = true; - m_upgradeResult = result; - m_upgradeMessage = message; - m_upgradeAsset = asset; - - if (!m_tmpFileName.empty()) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); - - if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) - { - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); - } - } - - if (m_upgradeResult == OperationResult::Failure) - { - AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); - } - - m_tmpFileName.clear(); - } - - void VersionExplorer::GraphUpgradeCompleteUIUpdate - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - QString text = asset.GetHint().c_str(); - QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); - - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); - QString assetName = asset.GetHint().c_str(); - - if (label->text().compare(assetName) == 0) - { - m_ui->tableWidget->removeCellWidget(row, ColumnAction); - m_ui->tableWidget->removeCellWidget(row, ColumnStatus); - - QToolButton* doneButton = new QToolButton(this); - doneButton->setToolTip("Upgrade complete"); - if (result == OperationResult::Success) - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); - } - else - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); - doneButton->setToolTip(message.data()); - } - - m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); - } - } - } - } - - void VersionExplorer::FinalizeUpgrade() - { - Log("FinalizeUpgrade!"); - m_inProgress = false; - m_assetsToUpgrade.clear(); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(true); - m_keepEditorAlive.reset(); - m_ui->progressBar->setVisible(false); - - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - if (assetsThatNeedManualInspection > 0) - { - m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); - } - else - { - m_ui->spinner->SetText("Upgrade complete."); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Interface::Get()->SetIsUpgrading(false); - m_settingsCache.reset(); - } - - // Scanning - - void VersionExplorer::OnScan() - { - m_assetsToUpgrade.clear(); - m_assetsToInspect.clear(); - m_ui->tableWidget->setRowCount(0); - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); - DoScan(); - } - - void VersionExplorer::DoScan() - { - m_state = ProcessState::Scan; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - - AZ::SystemTickBus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - if (!m_assetsToInspect.empty()) - { - m_discoveredAssets = m_assetsToInspect.size(); - m_failedAssets = 0; - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); - m_ui->progressBar->setValue(0); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->scanButton->setEnabled(false); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(false); - - m_inspectingAsset = m_assetsToInspect.begin(); - m_keepEditorAlive = AZStd::make_unique(); - } - } - - void VersionExplorer::BackupComplete() - { - m_currentAssetRowIndex = 0; - m_ui->progressBar->setValue(0); - DoScan(); - } - - void VersionExplorer::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) - { - Log("InspectAsset: %s", asset.GetHint().c_str()); - AZ::Entity* scriptCanvasEntity = nullptr; - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - if (!scriptCanvasAsset) - { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); - return; - } - - scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); - } - - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); - bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); - - - if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) - { - ScanComplete(asset); - Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); - return; - } - - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - - if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) - { - m_assetsToUpgrade.push_back(asset); - - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); - - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); - - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { - - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { - // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, assetInfo); - }); - - AZ::SystemTickBus::ExecuteQueuedEvents(); - - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); - } - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = asset.GetHint().c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); - - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); - ScanComplete(asset); - ++m_inspectedAssets; - ++m_currentAssetRowIndex; - } - - void VersionExplorer::UpgradeSingle - ( QPushButton* rowGoToButton - , AzQtComponents::StyledBusyLabel* spinner - , AZ::Data::AssetInfo assetInfo) - { - AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - - if (asset) - { - asset.BlockUntilLoadComplete(); - - if (asset.IsReady()) - { - AZ::Interface::Get()->SetIsUpgrading(true); - m_isUpgradingSingleGraph = true; - m_logs.clear(); - m_ui->textEdit->clear(); - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); - - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() - , [asset](const UpgradeAssets::value_type& assetToUpgrade) - { - return assetToUpgrade.GetId() == asset.GetId(); - }); - - m_state = ProcessState::Upgrade; - AZ::SystemTickBus::Handler::BusConnect(); - } - } - } - - void VersionExplorer::ScanComplete(const AZ::Data::Asset& asset) - { - Log("ScanComplete: %s", asset.GetHint().c_str()); - m_inProgress = false; - m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_ui->scanButton->setEnabled(true); - - m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); - - if (m_inspectingAsset == m_assetsToInspect.end()) - { - AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - } - } - - void VersionExplorer::FinalizeScan() - { - Log("FinalizeScan()"); - - m_ui->spinner->SetIsBusy(false); - m_ui->onlyShowOutdated->setEnabled(true); - - // Enable all the Upgrade buttons - for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) - { - QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); - if (button) - { - button->setEnabled(true); - } - } - - QString spinnerText = QStringLiteral("Scan Complete"); - if (m_assetsToUpgrade.empty()) - { - spinnerText.append(" - No graphs require upgrade!"); - } - else - { - spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" - , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); - } - - - m_ui->spinner->SetText(spinnerText); - m_ui->progressBar->setVisible(false); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - - m_keepEditorAlive.reset(); - m_settingsCache.reset(); - m_state = ProcessState::Inactive; - } - - void VersionExplorer::FlushLogs() - { - if (m_logs.empty()) - { - return; - } - - const QTextCursor oldCursor = m_ui->textEdit->textCursor(); - QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); - - m_ui->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_ui->textEdit->textCursor(); - - while (!m_logs.empty()) - { - auto line = "\n" + m_logs.front(); - - m_logs.pop_front(); - - textCursor.insertText(line.c_str()); - } - - scrollBar->setValue(scrollBar->maximum()); - m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); - - } - - bool VersionExplorer::CaptureLogFromTraceBus(const char* window, const char* message) - { - if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) - { - return true; - } - - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } - - m_logs.push_back(msg); - return m_ui->updateReportingOnly->isChecked(); - } - - bool VersionExplorer::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool VersionExplorer::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool VersionExplorer::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s", message); - return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - } - - bool VersionExplorer::OnPrintf(const char* window, const char* message) - { - return CaptureLogFromTraceBus(window, message); - } - - void VersionExplorer::closeEvent(QCloseEvent* event) - { - m_keepEditorAlive.reset(); - - AzQtComponents::StyledDialog::closeEvent(event); - } - -#include - -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h deleted file mode 100644 index acb28a7dba..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#if !defined(Q_MOC_RUN) -#include - -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -#include -#include -#include - -#include -#include - -#include -#include -#include -#endif - -class QPushButton; - -namespace Ui -{ - class VersionExplorer; -} - -namespace AzQtComponents -{ - class StyledBusyLabel; -} - -namespace ScriptCanvasEditor -{ - //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow - //! the upgrade tool to work even if the editor is not in the foreground - class EditorKeepAlive - { - public: - EditorKeepAlive(); - ~EditorKeepAlive(); - - private: - int m_keepEditorActive; - ICVar* m_edKeepEditorActive; - }; - - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class VersionExplorer - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler - { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(VersionExplorer, AZ::SystemAllocator, 0); - - explicit VersionExplorer(QWidget* parent = nullptr); - ~VersionExplorer(); - - private: - - static constexpr int ColumnAsset = 0; - static constexpr int ColumnAction = 1; - static constexpr int ColumnBrowse = 2; - static constexpr int ColumnStatus = 3; - - void OnScan(); - void OnClose(); - - enum class ProcessState - { - Inactive, - Backup, - Scan, - Upgrade, - }; - ProcessState m_state = ProcessState::Inactive; - - void DoScan(); - void ScanComplete(const AZ::Data::Asset&); - - void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); - - void OnUpgradeAll(); - - // SystemTickBus::Handler - void OnSystemTick() override; - // - - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // - - bool CaptureLogFromTraceBus(const char* window, const char* message); - - enum class OperationResult - { - Success, - Failure, - }; - - void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); - - bool IsUpgrading() const; - - bool m_inProgress = false; - // scan fields - size_t m_currentAssetRowIndex = 0; - size_t m_inspectedAssets = 0; - size_t m_failedAssets = 0; - size_t m_discoveredAssets = 0; - - IUpgradeRequests::AssetList m_assetsToInspect; - IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; - UpgradeAssets m_assetsToUpgrade; - UpgradeAssets::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_ui; - - AZStd::unique_ptr m_settingsCache; - - // upgrade fields - AZStd::recursive_mutex m_mutex; - bool m_upgradeComplete = false; - AZ::Data::Asset m_upgradeAsset; - int m_upgradeAssetIndex = 0; - OperationResult m_upgradeResult; - AZStd::string m_upgradeMessage; - AZStd::string m_tmpFileName; - - AZStd::unique_ptr m_keepEditorAlive; - - AZStd::deque m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - bool m_isUpgradingSingleGraph = false; - - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); - - void FlushLogs(); - - void FinalizeUpgrade(); - void FinalizeScan(); - - void BackupComplete(); - AZStd::string BackupGraph(const AZ::Data::Asset&); - void UpgradeGraph(const AZ::Data::Asset&); - - void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void OnSourceFileReleased(AZ::Data::Asset asset); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); - - void Log(const char* format, ...); - }; -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp new file mode 100644 index 0000000000..c1faedc3a3 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + void Log::Activate() + { + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + LogBus::Handler::BusConnect(); + } + + void Log::Clear() + { + m_logs.clear(); + } + + bool Log::CaptureFromTraceBus(const char* window, const char* message) + { + if (m_isExclusiveReportingEnabled && window != ScriptCanvas::k_VersionExplorerWindow) + { + return true; + } + + AZStd::string msg = message; + if (msg.ends_with("\n")) + { + msg = msg.substr(0, msg.size() - 1); + } + + m_logs.push_back(msg); + return m_isExclusiveReportingEnabled; + } + + void Log::Deactivate() + { + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + } + + void Log::Entry(const char* format, ...) + { + if (m_isVerbose) + { + char sBuffer[2048]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); + } + } + + const AZStd::vector* Log::GetEntries() const + { + return &m_logs; + } + + void Log::SetVersionExporerExclusivity(bool enabled) + { + m_isExclusiveReportingEnabled = enabled; + } + + void Log::SetVerbose(bool verbosity) + { + m_isVerbose = verbosity; + } + + bool Log::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Error): %s", message); + return CaptureFromTraceBus(window, msg.c_str()); + } + + bool Log::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Warning): %s", message); + return CaptureFromTraceBus(window, msg.c_str()); + } + + bool Log::OnException(const char* message) + { + AZStd::string msg = AZStd::string::format("(Exception): %s", message); + return CaptureFromTraceBus("Script Canvas", msg.c_str()); + } + + bool Log::OnPrintf(const char* window, const char* message) + { + return CaptureFromTraceBus(window, message); + } + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h new file mode 100644 index 0000000000..7399b085da --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + class Log + : private AZ::Debug::TraceMessageBus::Handler + , private LogBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(Log, AZ::SystemAllocator, 0); + + void Activate() override; + void Clear() override; + void Deactivate(); + void Entry(const char* format, ...) override; + const AZStd::vector* GetEntries() const override; + void SetVersionExporerExclusivity(bool enabled) override; + void SetVerbose(bool verbosity) override; + + private: + bool m_isExclusiveReportingEnabled = false; + bool m_isVerbose = false; + AZStd::vector m_logs; + + bool CaptureFromTraceBus(const char* window, const char* message); + bool OnException(const char* /*message*/) override; + bool OnPrintf(const char* /*window*/, const char* /*message*/) override; + bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + }; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui similarity index 99% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui index 0cd67bcf22..f549c821d6 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui @@ -1,7 +1,7 @@ - VersionExplorer - + View + Qt::WindowModal diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp index 51cb034f35..e1fe71d4d9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp @@ -85,7 +85,7 @@ namespace ScriptCanvas const char* ExecutionLogAsset::GetDefaultDirectoryRoot() { - return AZ::IO::FileIOBase::GetInstance()->GetAlias("@devroot@"); + return AZ::IO::FileIOBase::GetInstance()->GetAlias("@engroot@"); } ExecutionLogAsset::ExecutionLogAsset(const AZ::Data::AssetId& assetId, AZ::Data::AssetData::AssetStatus status) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.cpp index e708efc71f..0dcd8ebbbd 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.cpp @@ -9,6 +9,7 @@ #include "RuntimeAsset.h" #include +#include namespace ScriptCanvasRuntimeAssetCpp { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h index 037985d980..24c83b20a1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h @@ -36,7 +36,7 @@ namespace ScriptCanvas azrtti_typeid(), "Script Canvas Runtime", "Script Canvas Runtime Graph", - "@devassets@/scriptcanvas", + "@projectroot@/scriptcanvas", ".scriptcanvas_compiled", "Script Canvas Runtime", "Untitled-%i", @@ -177,7 +177,7 @@ namespace ScriptCanvas azrtti_typeid(), "Script Canvas Function Interface", "Script Canvas Function Interface", - "@devassets@/scriptcanvas", + "@projectroot@/scriptcanvas", ".scriptcanvas_fn_compiled", "Script Canvas Function Interface", "Untitled-Function-%i", diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Source.jinja b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Source.jinja index 64e92c1ac7..1ddffe3de9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Source.jinja +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Source.jinja @@ -14,6 +14,7 @@ SPDX-License-Identifier: Apache-2.0 OR MIT {% endmacro %} #include #include +#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja index 236866ffeb..f80c932735 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja @@ -15,6 +15,7 @@ SPDX-License-Identifier: Apache-2.0 OR MIT // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp index 8d324e95c0..4d7c8a2cda 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp @@ -503,7 +503,7 @@ namespace ScriptCanvas void InitializeInterpretedStatics(const RuntimeData& runtimeData) { -#if defined(PROFILE) || defined(AZ_DEBUG_BUILD) +#if defined(AZ_PROFILE_BUILD) || defined(AZ_DEBUG_BUILD) Execution::InitializeFromLuaStackFunctions(const_cast(runtimeData.m_debugMap)); #endif if (runtimeData.RequiresStaticInitialization()) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp index 4509e7e907..7d76dbc27d 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp @@ -4320,6 +4320,12 @@ namespace ScriptCanvas { AZ_Assert(execution->GetSymbol() != Symbol::FunctionDefinition, "Function definition input is not handled in AbstractCodeModel::ParseInputDatum"); + if (!input.GetDataType().IsValid()) + { + AddError(nullptr, aznew Internal::ParseError(execution->GetNodeId(), ParseErrors::InvalidDataTypeInInput)); + return; + } + auto nodes = execution->GetId().m_node->GetConnectedNodes(input); if (nodes.empty()) { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp index 6cda0b75dd..542fc2f0c1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp @@ -14,6 +14,7 @@ #include #include +#include namespace FunctionDefinitionNodeCpp { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp index 5a2eb80187..c548176af5 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp @@ -67,7 +67,7 @@ namespace ScriptCanvas void ReceiveScriptEvent::PopulateAsset(AZ::Data::Asset asset, SlotIdMapping& populationMapping) { - if (CreateHandler(asset)) + if (InitializeDefinition(asset)) { if (!CreateEbus()) { @@ -140,7 +140,6 @@ namespace ScriptCanvas } } - void ReceiveScriptEvent::InitializeEvent(AZ::Data::Asset asset, int eventIndex, SlotIdMapping& populationMapping) { if (!m_handler) @@ -353,6 +352,13 @@ namespace ScriptCanvas AZStd::optional ReceiveScriptEvent::GetEventIndex(AZStd::string eventName) const { + if (!m_handler) + { + const_cast(this)->InitializeDefinition(m_asset); + const_cast(this)->CreateEbus(); + } + + AZ_Error("ScriptCanvas", m_handler != nullptr, "GetEventIndex called and handler was not created"); return m_handler ? AZStd::optional(m_handler->GetFunctionIndex(eventName.c_str())) : AZStd::nullopt; } @@ -490,15 +496,10 @@ namespace ScriptCanvas return m_definition.IsAddressRequired() || (slot && slot->GetDataType().IsValid()); } - bool ReceiveScriptEvent::CreateHandler(AZ::Data::Asset asset) + bool ReceiveScriptEvent::InitializeDefinition(AZ::Data::Asset asset) { AZStd::lock_guard lock(m_mutex); - if (m_handler) - { - return true; - } - if (!asset) { return false; @@ -518,12 +519,11 @@ namespace ScriptCanvas } return true; - } void ReceiveScriptEvent::OnScriptEventReady(const AZ::Data::Asset& asset) { - if (CreateHandler(asset)) + if (InitializeDefinition(asset)) { CompleteInitialize(asset); } @@ -531,7 +531,7 @@ namespace ScriptCanvas bool ReceiveScriptEvent::CreateEbus() { - if (!m_ebus) + if (!m_ebus || !m_handler) { AZ::BehaviorContext* behaviorContext = nullptr; AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationBus::Events::GetBehaviorContext); @@ -547,13 +547,11 @@ namespace ScriptCanvas AZ_Assert(m_ebus, "Behavior Context EBus does not exist: %s", m_definition.GetName().c_str()); AZ_Assert(m_ebus->m_createHandler, "The ebus %s has no create handler!", m_definition.GetName().c_str()); AZ_Assert(m_ebus->m_destroyHandler, "The ebus %s has no destroy handler!", m_definition.GetName().c_str()); - AZ_Verify(m_ebus->m_createHandler->InvokeResult(m_handler, &m_definition), "Behavior Context EBus handler creation failed %s", m_definition.GetName().c_str()); - AZ_Assert(m_handler, "Ebus create handler failed %s", m_definition.GetName().c_str()); } - return true; + return m_ebus != nullptr && m_handler != nullptr; } bool ReceiveScriptEvent::IsOutOfDate(const VersionData& graphVersion) const @@ -597,7 +595,6 @@ namespace ScriptCanvas } } - AZStd::string ReceiveScriptEvent::GetUpdateString() const { if (m_ebus) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h index 0f8d673629..a41d0ba3f9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h @@ -101,7 +101,7 @@ namespace ScriptCanvas Internal::ScriptEventEntry ConfigureEbusEntry(const ScriptEvents::Method& methodDefinition, const AZ::BehaviorEBusHandler::BusForwarderEvent& event, SlotIdMapping& populationMapping); - bool CreateHandler(AZ::Data::Asset asset); + bool InitializeDefinition(AZ::Data::Asset asset); void CompleteInitialize(AZ::Data::Asset asset); void PopulateAsset(AZ::Data::Asset asset, SlotIdMapping& populationMapping); bool m_eventInitComplete = false; @@ -120,7 +120,6 @@ namespace ScriptCanvas bool m_autoConnectToGraphOwner = true; bool m_connected; - }; } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp index 3b01a8fa7c..e4cbfc94f7 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp @@ -122,11 +122,8 @@ namespace ScriptCanvas void ScriptEventBase::OnActivate() { - if (!m_asset || m_asset.GetStatus() == AZ::Data::AssetData::AssetStatus::NotLoaded) - { - m_asset = AZ::Data::AssetManager::Instance().GetAsset(m_scriptEventAssetId, AZ::Data::AssetLoadBehavior::PreLoad); - m_asset.BlockUntilLoadComplete(); - } + m_asset = AZ::Data::AssetManager::Instance().GetAsset(m_scriptEventAssetId, AZ::Data::AssetLoadBehavior::PreLoad); + m_asset.BlockUntilLoadComplete(); } void ScriptEventBase::OnAssetReady(AZ::Data::Asset asset) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h index da9a1ebc1f..a803ea862e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h @@ -41,6 +41,7 @@ namespace ScriptCanvas constexpr const char* InactiveGraph = "This graph defines no functions, it is never activated, and will never execute. Add a Start node or connect an event handler or define functions."; constexpr const char* InfiniteLoopWritingToVariable = "infinite loop when writing to variable"; constexpr const char* InfiniteSelfActivationLoop = "infinite loop when activating the entity that owns this graph"; + constexpr const char* InvalidDataTypeInInput = "invalid data type in input slot"; constexpr const char* MetaDataNeedsTupleTypeIdForEventCall = "Meta data needs an AzTypeId for Tuple if an EBus call returns multiple types to ScriptCanvas"; constexpr const char* MetaDataRequiredForEventCall = "Meta data is required for ACM node that is an EBus call"; constexpr const char* MissingFalseExecutionSlotOnIf = "A 'False' Execution output slot is required in an If branch node"; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp index 9a1ef73126..ee7eb704bb 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp @@ -246,8 +246,7 @@ namespace ScriptCanvas } else { - ErrorList errors = { AZStd::string("provide translation failure details") }; - return AZ::Failure(errors); + return AZ::Failure(translation.MoveErrors()); } } @@ -874,7 +873,13 @@ namespace ScriptCanvas AZStd::optional eventIndex = ebusHandling->m_node->GetEventIndex(nameAndEventThread.first); if (!eventIndex) { - AddError(nullptr, aznew Internal::ParseError(ebusHandling->m_node->GetEntityId(), AZStd::string::format("EBus handler did not return a valid index for event %s", nameAndEventThread.first.c_str()))); + AddError(nullptr, + aznew Internal::ParseError( + ebusHandling->m_node->GetEntityId() + , AZStd::string::format + ( "EBus Handler %s did not return a valid index for event %s" + , ebusHandling->m_ebusName.c_str() + , nameAndEventThread.first.c_str()))); return; } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp index 09315ec4b0..d21fb354b1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp @@ -107,27 +107,9 @@ namespace ScriptCanvas m_translationDuration = AZStd::chrono::microseconds(AZStd::chrono::system_clock::now() - m_translationStartTime).count(); } - AZStd::string GraphToX::ResolveScope(const AZStd::vector& namespaces) - { - AZStd::string resolution; - - if (!namespaces.empty()) - { - resolution = Grammar::ToIdentifier(namespaces[0]); - - for (size_t index = 1; index < namespaces.size(); ++index) - { - resolution += m_configuration.m_lexicalScopeDelimiter; - resolution += Grammar::ToIdentifier(namespaces[index]); - } - } - - return resolution; - } - - void GraphToX::SingleLineComment(Writer& writer) + AZStd::vector&& GraphToX::MoveErrors() { - writer.Write(m_configuration.m_singleLineComment); + return AZStd::move(m_errors); } void GraphToX::OpenBlockComment(Writer& writer) @@ -160,6 +142,29 @@ namespace ScriptCanvas writer.Indent(); } + AZStd::string GraphToX::ResolveScope(const AZStd::vector& namespaces) + { + AZStd::string resolution; + + if (!namespaces.empty()) + { + resolution = Grammar::ToIdentifier(namespaces[0]); + + for (size_t index = 1; index < namespaces.size(); ++index) + { + resolution += m_configuration.m_lexicalScopeDelimiter; + resolution += Grammar::ToIdentifier(namespaces[index]); + } + } + + return resolution; + } + + void GraphToX::SingleLineComment(Writer& writer) + { + writer.Write(m_configuration.m_singleLineComment); + } + void GraphToX::WriteCopyright(Writer& writer) { OpenBlockComment(writer); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h index 062a58efe1..c4e189679a 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h @@ -51,12 +51,13 @@ namespace ScriptCanvas AZStd::string_view GetGraphName() const; AZStd::string_view GetFullPath() const; AZStd::sys_time_t GetTranslationDuration() const; - AZStd::string ResolveScope(const AZStd::vector& namespaces); - void SingleLineComment(Writer& writer); + AZStd::vector&& MoveErrors(); void OpenBlockComment(Writer& writer); void OpenFunctionBlock(Writer& writer); void OpenNamespace(Writer& writer, AZStd::string_view ns); void OpenScope(Writer& writer); + AZStd::string ResolveScope(const AZStd::vector& namespaces); + void SingleLineComment(Writer& writer); void WriteCopyright(Writer& writer); void WriteDoNotModify(Writer& writer); void WriteLastWritten(Writer& writer); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp index dd8b42730d..c39cac13a3 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp @@ -72,6 +72,15 @@ namespace ScriptCanvas resultString += entry->GetDescription(); } + for (const auto& errors : m_errors) + { + for (auto& entry : errors.second) + { + resultString += "* "; + resultString += entry->GetDescription(); + } + } + return resultString; } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h index 0cde56d5dd..bd616fbfbb 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h @@ -12,10 +12,11 @@ #include #include #include -#include #include -#include +#include +#include #include +#include namespace AZ { @@ -85,7 +86,7 @@ namespace ScriptCanvas AZStd::sys_time_t m_duration; }; - using ErrorList = AZStd::vector; + using ErrorList = AZStd::vector; using Errors = AZStd::unordered_map; using Translations = AZStd::unordered_map; @@ -102,7 +103,6 @@ namespace ScriptCanvas const AZStd::sys_time_t m_translationDuration; Result(AZStd::string invalidSourceInfo); - Result(Result&& source); Result(Grammar::AbstractCodeModelConstPtr model); Result(Grammar::AbstractCodeModelConstPtr model, Translations&& translations, Errors&& errors); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Utils/VersionConverters.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Utils/VersionConverters.cpp index 2998b3c2ee..23e4a8cc7a 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Utils/VersionConverters.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Utils/VersionConverters.cpp @@ -7,6 +7,7 @@ */ #include "VersionConverters.h" +#include #include #include diff --git a/Gems/ScriptCanvas/Code/Tests/ScriptCanvasBuilderTests.cpp b/Gems/ScriptCanvas/Code/Tests/ScriptCanvasBuilderTests.cpp index 5b38b640ca..cba14feac6 100644 --- a/Gems/ScriptCanvas/Code/Tests/ScriptCanvasBuilderTests.cpp +++ b/Gems/ScriptCanvas/Code/Tests/ScriptCanvasBuilderTests.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index 52b1cc4772..609f7cd454 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -259,15 +259,24 @@ set(FILES Editor/View/Windows/ScriptCanvasContextMenus.cpp Editor/View/Windows/ScriptCanvasContextMenus.h Editor/View/Windows/ScriptCanvasEditorResources.qrc - Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h + Editor/View/Windows/Tools/UpgradeTool/Controller.cpp + Editor/View/Windows/Tools/UpgradeTool/Controller.h + Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp + Editor/View/Windows/Tools/UpgradeTool/FileSaver.h + Editor/View/Windows/Tools/UpgradeTool/LogTraits.h + Editor/View/Windows/Tools/UpgradeTool/Model.cpp + Editor/View/Windows/Tools/UpgradeTool/Model.h + Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp + Editor/View/Windows/Tools/UpgradeTool/Modifier.h + Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h + Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp + Editor/View/Windows/Tools/UpgradeTool/Scanner.h Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp + Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.ui - Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp - Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h - Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui - Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h - Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp - Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui + Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp + Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h + Editor/View/Windows/Tools/UpgradeTool/View.ui Editor/Framework/ScriptCanvasGraphUtilities.inl Editor/Framework/ScriptCanvasGraphUtilities.h Editor/Framework/ScriptCanvasTraceUtilities.h diff --git a/Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationTest.h b/Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationTest.h index 4a3ba89832..1e4fb27831 100644 --- a/Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationTest.h +++ b/Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationTest.h @@ -11,6 +11,7 @@ #include #include +#include #include #include diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas index 1d316c4dc0..1770d0e6c2 100644 --- a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas @@ -1,5227 +1,3238 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "ScriptCanvasData", + "ClassData": { + "m_scriptCanvas": { + "Id": { + "id": 20005528169920 + }, + "Name": "LY_SC_UnitTest_MultipleOut", + "Components": { + "Component_[14476721853276197761]": { + "$type": "EditorGraphVariableManagerComponent", + "Id": 14476721853276197761, + "m_variableData": { + "m_nameVariableMap": [ + { + "Key": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Boolean" + }, + "VariableId": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + }, + "VariableName": "Exec 1" + } + }, + { + "Key": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 3.0, + "label": "Three" + }, + "VariableId": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + }, + "VariableName": "Three" + } + }, + { + "Key": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + "VariableId": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + }, + "VariableName": "counter" + } + }, + { + "Key": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Boolean" + }, + "VariableId": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + }, + "VariableName": "Exec 3" + } + }, + { + "Key": { + "m_id": "{DB5D6C5D-FD69-474C-BBBE-4984C5715FA8}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Boolean" + }, + "VariableId": { + "m_id": "{DB5D6C5D-FD69-474C-BBBE-4984C5715FA8}" + }, + "VariableName": "Exec 2" + } + } + ] + } + }, + "Component_[16621147190561896838]": { + "$type": "{4D755CA9-AB92-462C-B24F-0B3376F19967} Graph", + "Id": 16621147190561896838, + "m_graphData": { + "m_nodes": [ + { + "Id": { + "id": 20044182875584 + }, + "Name": "SC-Node(Start)", + "Components": { + "Component_[10424525019465666117]": { + "$type": "Start", + "Id": 10424525019465666117, + "Slots": [ + { + "id": { + "m_id": "{25061884-0633-4061-B583-0796CDC9B215}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled when the entity that owns this graph is fully activated.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ] + } + } + }, + { + "Id": { + "id": 20014118104512 + }, + "Name": "SC-Node(OperatorAdd)", + "Components": { + "Component_[12328748346053958726]": { + "$type": "OperatorAdd", + "Id": 12328748346053958726, + "Slots": [ + { + "id": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B20F1E7F-B2BA-43E4-AD32-D58B8CFA5B57}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{265B8942-C187-4D83-A017-20BEE053B96D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{5B25184E-0BC4-44A8-9539-772AC75432B4}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Result", + "toolTip": "The result of the specified operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 1.0, + "label": "Number" + } + ] + } + } + }, + { + "Id": { + "id": 20022708039104 + }, + "Name": "SC-Node(OperatorAdd)", + "Components": { + "Component_[12328748346053958726]": { + "$type": "OperatorAdd", + "Id": 12328748346053958726, + "Slots": [ + { + "id": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B20F1E7F-B2BA-43E4-AD32-D58B8CFA5B57}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{265B8942-C187-4D83-A017-20BEE053B96D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{5B25184E-0BC4-44A8-9539-772AC75432B4}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Result", + "toolTip": "The result of the specified operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 1.0, + "label": "Number" + } + ] + } + } + }, + { + "Id": { + "id": 20061362744768 + }, + "Name": "SC-Node(OperatorAdd)", + "Components": { + "Component_[12328748346053958726]": { + "$type": "OperatorAdd", + "Id": 12328748346053958726, + "Slots": [ + { + "id": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B20F1E7F-B2BA-43E4-AD32-D58B8CFA5B57}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{265B8942-C187-4D83-A017-20BEE053B96D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{5B25184E-0BC4-44A8-9539-772AC75432B4}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Result", + "toolTip": "The result of the specified operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 1.0, + "label": "Number" + } + ] + } + } + }, + { + "Id": { + "id": 20009823137216 + }, + "Name": "SC-Node(EqualTo)", + "Components": { + "Component_[13545476611799837370]": { + "$type": "EqualTo", + "Id": 13545476611799837370, + "Slots": [ + { + "id": { + "m_id": "{3A36FFEC-1706-4E84-AF24-9CA117ED9A08}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Result", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Signal to perform the evaluation when desired.", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "True", + "toolTip": "Signaled if the result of the operation is true.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F17CFAD4-F1FB-4E17-B466-DDEAE1D0C4D7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "False", + "toolTip": "Signaled if the result of the operation is false.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F89D9F4D-8840-4420-BB13-A62BE5E0248C}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value A", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{11C3CEF3-4EED-405E-88CB-B25B55C28D5D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value B", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value A" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value B" + } + ] + } + } + }, + { + "Id": { + "id": 20065657712064 + }, + "Name": "SC-Node(EqualTo)", + "Components": { + "Component_[13545476611799837370]": { + "$type": "EqualTo", + "Id": 13545476611799837370, + "Slots": [ + { + "id": { + "m_id": "{3A36FFEC-1706-4E84-AF24-9CA117ED9A08}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Result", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Signal to perform the evaluation when desired.", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "True", + "toolTip": "Signaled if the result of the operation is true.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F17CFAD4-F1FB-4E17-B466-DDEAE1D0C4D7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "False", + "toolTip": "Signaled if the result of the operation is false.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F89D9F4D-8840-4420-BB13-A62BE5E0248C}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value A", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{11C3CEF3-4EED-405E-88CB-B25B55C28D5D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value B", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value A" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value B" + } + ] + } + } + }, + { + "Id": { + "id": 20069952679360 + }, + "Name": "SC-Node(EqualTo)", + "Components": { + "Component_[13545476611799837370]": { + "$type": "EqualTo", + "Id": 13545476611799837370, + "Slots": [ + { + "id": { + "m_id": "{3A36FFEC-1706-4E84-AF24-9CA117ED9A08}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Result", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Signal to perform the evaluation when desired.", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "True", + "toolTip": "Signaled if the result of the operation is true.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F17CFAD4-F1FB-4E17-B466-DDEAE1D0C4D7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "False", + "toolTip": "Signaled if the result of the operation is false.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F89D9F4D-8840-4420-BB13-A62BE5E0248C}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value A", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{11C3CEF3-4EED-405E-88CB-B25B55C28D5D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value B", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value A" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value B" + } + ] + } + } + }, + { + "Id": { + "id": 20048477842880 + }, + "Name": "SC Node(SetVariable)", + "Components": { + "Component_[14507547243373092664]": { + "$type": "SetVariableNode", + "Id": 14507547243373092664, + "Slots": [ + { + "id": { + "m_id": "{A23CADFC-70B4-45EB-8178-D9570EE659ED}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "When signaled sends the variable referenced by this node to a Data Output slot", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{69C4E25F-AD39-4CE9-9E19-87DC8C6B43AB}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled after the referenced variable has been pushed to the Data Output slot", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{87AF01EE-69E7-441F-BE3D-8DBD95475AF9}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Boolean", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{D0C36DFD-8ED8-4E64-8765-556123BAF3C1}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Boolean", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": true, + "label": "Boolean" + } + ], + "m_variableId": { + "m_id": "{DB5D6C5D-FD69-474C-BBBE-4984C5715FA8}" + }, + "m_variableDataInSlotId": { + "m_id": "{87AF01EE-69E7-441F-BE3D-8DBD95475AF9}" + }, + "m_variableDataOutSlotId": { + "m_id": "{D0C36DFD-8ED8-4E64-8765-556123BAF3C1}" + } + } + } + }, + { + "Id": { + "id": 20057067777472 + }, + "Name": "SC-Node(Print)", + "Components": { + "Component_[17364567436915815279]": { + "$type": "Print", + "Id": 17364567436915815279, + "Slots": [ + { + "id": { + "m_id": "{DE4E1FFE-8F36-4272-81AD-9973CC9DC197}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Input signal", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "m_format": "Hello", + "m_unresolvedString": [ + "Hello" + ] + } + } + }, + { + "Id": { + "id": 20052772810176 + }, + "Name": "SC Node(SetVariable)", + "Components": { + "Component_[18169977638437689378]": { + "$type": "SetVariableNode", + "Id": 18169977638437689378, + "Slots": [ + { + "id": { + "m_id": "{F65A6861-482D-4014-8532-31F31E9F64AC}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "When signaled sends the variable referenced by this node to a Data Output slot", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{D4DD8502-2960-4E11-81F5-3CCAC7FCFBCE}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled after the referenced variable has been pushed to the Data Output slot", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{0E4216CC-2501-4ED7-8B85-343813337526}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Boolean", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{B150FE31-45A9-4E45-929A-AE9799BA8E31}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Boolean", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": true, + "label": "Boolean" + } + ], + "m_variableId": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + }, + "m_variableDataInSlotId": { + "m_id": "{0E4216CC-2501-4ED7-8B85-343813337526}" + }, + "m_variableDataOutSlotId": { + "m_id": "{B150FE31-45A9-4E45-929A-AE9799BA8E31}" + } + } + } + }, + { + "Id": { + "id": 20018413071808 + }, + "Name": "SC Node(SetVariable)", + "Components": { + "Component_[2433126846967649500]": { + "$type": "SetVariableNode", + "Id": 2433126846967649500, + "Slots": [ + { + "id": { + "m_id": "{EA436CD0-DBC5-4DE6-B658-BA88DB2DD8FB}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "When signaled sends the variable referenced by this node to a Data Output slot", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{EF2E6C1F-3960-45D1-AC20-B49B92785FF9}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled after the referenced variable has been pushed to the Data Output slot", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B2EB9354-2D69-4A25-990E-E321FDF0EDDA}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Boolean", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{FD662FEC-08F9-410B-BAA9-1AF2D8229766}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Boolean", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": true, + "label": "Boolean" + } + ], + "m_variableId": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + }, + "m_variableDataInSlotId": { + "m_id": "{B2EB9354-2D69-4A25-990E-E321FDF0EDDA}" + }, + "m_variableDataOutSlotId": { + "m_id": "{FD662FEC-08F9-410B-BAA9-1AF2D8229766}" + } + } + } + }, + { + "Id": { + "id": 20027003006400 + }, + "Name": "SC-Node(Expect True)", + "Components": { + "Component_[4200368161720158321]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4200368161720158321, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{982114AA-80C2-479A-BB0E-040B8C119422}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{58E5597B-3073-45DD-86B7-E14097E3EC0B}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Candidate", + "toolTip": "a value that must be true", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + } + }, + { + "id": { + "m_id": "{232AB412-02EB-4201-BA96-BEC573A758EF}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Candidate" + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Expect True", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + }, + { + "Id": { + "id": 20035592940992 + }, + "Name": "SC-Node(Expect True)", + "Components": { + "Component_[4200368161720158321]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4200368161720158321, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{982114AA-80C2-479A-BB0E-040B8C119422}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{58E5597B-3073-45DD-86B7-E14097E3EC0B}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Candidate", + "toolTip": "a value that must be true", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + } + }, + { + "id": { + "m_id": "{232AB412-02EB-4201-BA96-BEC573A758EF}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Candidate" + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Expect True", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + }, + { + "Id": { + "id": 20039887908288 + }, + "Name": "SC-Node(Expect True)", + "Components": { + "Component_[4200368161720158321]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4200368161720158321, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{982114AA-80C2-479A-BB0E-040B8C119422}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{58E5597B-3073-45DD-86B7-E14097E3EC0B}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Candidate", + "toolTip": "a value that must be true", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + } + }, + { + "id": { + "m_id": "{232AB412-02EB-4201-BA96-BEC573A758EF}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Candidate" + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Expect True", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + }, + { + "Id": { + "id": 20031297973696 + }, + "Name": "SC-Node(Mark Complete)", + "Components": { + "Component_[4383017650724706609]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4383017650724706609, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{716C2DBF-F48F-48DC-A1B0-2A0D05ED2DC3}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{39BDE16A-0CBB-46D1-9C26-24F85A7183FC}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{496BD222-4D88-4AD0-992E-3873EB3E51F9}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{AD0780F8-7FB5-480D-B7C0-9CC8208223C4}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Mark Complete", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + } + ], + "m_connections": [ + { + "Id": { + "id": 20074247646656 + }, + "Name": "srcEndpoint=(On Graph Start: Out), destEndpoint=(Print: In)", + "Components": { + "Component_[9544956642945817670]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 9544956642945817670, + "sourceEndpoint": { + "nodeId": { + "id": 20044182875584 + }, + "slotId": { + "m_id": "{25061884-0633-4061-B583-0796CDC9B215}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{DE4E1FFE-8F36-4272-81AD-9973CC9DC197}" + } + } + } + } + }, + { + "Id": { + "id": 20078542613952 + }, + "Name": "srcEndpoint=(Print: Out), destEndpoint=(Set Variable: In)", + "Components": { + "Component_[5846765668694970625]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 5846765668694970625, + "sourceEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20052772810176 + }, + "slotId": { + "m_id": "{F65A6861-482D-4014-8532-31F31E9F64AC}" + } + } + } + } + }, + { + "Id": { + "id": 20082837581248 + }, + "Name": "srcEndpoint=(Print: Out), destEndpoint=(Set Variable: In)", + "Components": { + "Component_[12462935459010319786]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 12462935459010319786, + "sourceEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20048477842880 + }, + "slotId": { + "m_id": "{A23CADFC-70B4-45EB-8178-D9570EE659ED}" + } + } + } + } + }, + { + "Id": { + "id": 20087132548544 + }, + "Name": "srcEndpoint=(Print: Out), destEndpoint=(Set Variable: In)", + "Components": { + "Component_[15367103920447716135]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 15367103920447716135, + "sourceEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20018413071808 + }, + "slotId": { + "m_id": "{EA436CD0-DBC5-4DE6-B658-BA88DB2DD8FB}" + } + } + } + } + }, + { + "Id": { + "id": 20091427515840 + }, + "Name": "srcEndpoint=(Add (+): Out), destEndpoint=(Equal To (==): In)", + "Components": { + "Component_[1770958354285950060]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 1770958354285950060, + "sourceEndpoint": { + "nodeId": { + "id": 20061362744768 + }, + "slotId": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20009823137216 + }, + "slotId": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + } + } + } + } + }, + { + "Id": { + "id": 20095722483136 + }, + "Name": "srcEndpoint=(Add (+): Out), destEndpoint=(Equal To (==): In)", + "Components": { + "Component_[15742434548170508999]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 15742434548170508999, + "sourceEndpoint": { + "nodeId": { + "id": 20014118104512 + }, + "slotId": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20065657712064 + }, + "slotId": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + } + } + } + } + }, + { + "Id": { + "id": 20100017450432 + }, + "Name": "srcEndpoint=(Add (+): Out), destEndpoint=(Equal To (==): In)", + "Components": { + "Component_[5888192785906240625]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 5888192785906240625, + "sourceEndpoint": { + "nodeId": { + "id": 20022708039104 + }, + "slotId": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20069952679360 + }, + "slotId": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + } + } + } + } + }, + { + "Id": { + "id": 20104312417728 + }, + "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(Add (+): In)", + "Components": { + "Component_[14484850856034595321]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 14484850856034595321, + "sourceEndpoint": { + "nodeId": { + "id": 20048477842880 + }, + "slotId": { + "m_id": "{69C4E25F-AD39-4CE9-9E19-87DC8C6B43AB}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20014118104512 + }, + "slotId": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + } + } + } + } + }, + { + "Id": { + "id": 20108607385024 + }, + "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(Add (+): In)", + "Components": { + "Component_[13948374526923268574]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 13948374526923268574, + "sourceEndpoint": { + "nodeId": { + "id": 20052772810176 + }, + "slotId": { + "m_id": "{D4DD8502-2960-4E11-81F5-3CCAC7FCFBCE}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20061362744768 + }, + "slotId": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + } + } + } + } + }, + { + "Id": { + "id": 20112902352320 + }, + "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(Add (+): In)", + "Components": { + "Component_[17650800042816564839]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 17650800042816564839, + "sourceEndpoint": { + "nodeId": { + "id": 20018413071808 + }, + "slotId": { + "m_id": "{EF2E6C1F-3960-45D1-AC20-B49B92785FF9}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20022708039104 + }, + "slotId": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + } + } + } + } + }, + { + "Id": { + "id": 20117197319616 + }, + "Name": "srcEndpoint=(Expect True: Out), destEndpoint=(Expect True: In)", + "Components": { + "Component_[9927163777207365219]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 9927163777207365219, + "sourceEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20039887908288 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20121492286912 + }, + "Name": "srcEndpoint=(Expect True: Out), destEndpoint=(Expect True: In)", + "Components": { + "Component_[6569354793892923961]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 6569354793892923961, + "sourceEndpoint": { + "nodeId": { + "id": 20039887908288 + }, + "slotId": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20027003006400 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20125787254208 + }, + "Name": "srcEndpoint=(Equal To (==): True), destEndpoint=(Expect True: In)", + "Components": { + "Component_[8734972779133126833]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 8734972779133126833, + "sourceEndpoint": { + "nodeId": { + "id": 20009823137216 + }, + "slotId": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20130082221504 + }, + "Name": "srcEndpoint=(Equal To (==): True), destEndpoint=(Expect True: In)", + "Components": { + "Component_[13233443675773627954]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 13233443675773627954, + "sourceEndpoint": { + "nodeId": { + "id": 20065657712064 + }, + "slotId": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20134377188800 + }, + "Name": "srcEndpoint=(Equal To (==): True), destEndpoint=(Expect True: In)", + "Components": { + "Component_[8564488729834246542]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 8564488729834246542, + "sourceEndpoint": { + "nodeId": { + "id": 20069952679360 + }, + "slotId": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20138672156096 + }, + "Name": "srcEndpoint=(Expect True: Out), destEndpoint=(Mark Complete: In)", + "Components": { + "Component_[17252410557193957278]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 17252410557193957278, + "sourceEndpoint": { + "nodeId": { + "id": 20027003006400 + }, + "slotId": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20031297973696 + }, + "slotId": { + "m_id": "{496BD222-4D88-4AD0-992E-3873EB3E51F9}" + } + } + } + } + } + ] + }, + "m_assetType": "{3E2AC8CD-713F-453E-967F-29517F331784}", + "versionData": { + "_grammarVersion": 1, + "_runtimeVersion": 1, + "_fileVersion": 1 + }, + "m_variableCounter": 3, + "GraphCanvasData": [ + { + "Key": { + "id": 20005528169920 + }, + "Value": { + "ComponentData": { + "{5F84B500-8C45-40D1-8EFC-A5306B241444}": { + "$type": "SceneComponentSaveData", + "ViewParams": { + "Scale": 0.7164653965189688, + "AnchorX": -554.109130859375, + "AnchorY": -334.977783203125 + } + } + } + } + }, + { + "Key": { + "id": 20009823137216 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1520.0, + 80.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{4B494FF9-7CD7-496F-9778-8E01DAAE393B}" + } + } + } + }, + { + "Key": { + "id": 20014118104512 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 880.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{DF978315-8A60-40C7-8889-A1C2EF190012}" + } + } + } + }, + { + "Key": { + "id": 20018413071808 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "SetVariableNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 560.0, + 420.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".setVariable" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{C1E23F0C-0829-4CBC-9176-29CF13B83640}" + } + } + } + }, + { + "Key": { + "id": 20022708039104 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 920.0, + 540.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{16FFB986-E605-47C3-8BAC-C5449F871465}" + } + } + } + }, + { + "Key": { + "id": 20027003006400 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 2600.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{F5ACF848-9D4E-45DA-AA58-42DE9695AAB0}" + } + } + } + }, + { + "Key": { + "id": 20031297973696 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 2900.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{456E2F70-A915-450F-B570-57C61FD8713C}" + } + } + } + }, + { + "Key": { + "id": 20035592940992 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1980.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{ED35AAD0-F976-4FA9-B6C7-08ED30452D33}" + } + } + } + }, + { + "Key": { + "id": 20039887908288 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 2280.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{D2CF914D-DFC1-40B6-884F-85EBD5DF95B6}" + } + } + } + }, + { + "Key": { + "id": 20044182875584 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "TimeNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 0.0, + 260.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{8133F38D-4D68-4244-8999-BE5E019A24E0}" + } + } + } + }, + { + "Key": { + "id": 20048477842880 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "SetVariableNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 560.0, + 260.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".setVariable" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{377A822F-6220-45A6-91CB-A3E5F8E9ACFB}" + } + } + } + }, + { + "Key": { + "id": 20052772810176 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "SetVariableNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 560.0, + 60.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".setVariable" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{EF322638-4ADC-43B3-9398-105F49D40D96}" + } + } + } + }, + { + "Key": { + "id": 20057067777472 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "StringNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 200.0, + 260.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{6A6126C8-7C7E-48C1-A8A5-D26B9EA59578}" + } + } + } + }, + { + "Key": { + "id": 20061362744768 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 880.0, + 60.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{01CF2659-C0C0-4D6B-9C48-B47989D98148}" + } + } + } + }, + { + "Key": { + "id": 20065657712064 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1500.0, + 300.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{F8D64912-B290-443F-90A1-891A893D9F3D}" + } + } + } + }, + { + "Key": { + "id": 20069952679360 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1540.0, + 560.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{A380E8D9-CEA5-44CF-A9DC-69A3C0115256}" + } + } + } + } + ], + "StatisticsHelper": { + "InstanceCounter": [ + { + "Key": 1244476766431948410, + "Value": 3 + }, + { + "Key": 2150378447039925262, + "Value": 1 + }, + { + "Key": 3117476785392655547, + "Value": 3 + }, + { + "Key": 4199610336680704683, + "Value": 1 + }, + { + "Key": 8132426562032687196, + "Value": 1 + }, + { + "Key": 10204019744198319120, + "Value": 1 + }, + { + "Key": 10684225535275896474, + "Value": 1 + }, + { + "Key": 12033332465728181077, + "Value": 3 + }, + { + "Key": 12096037962474910421, + "Value": 1 + } + ] + } + } + } + } + } +} \ No newline at end of file diff --git a/Gems/ScriptCanvasTesting/Code/Source/Nodes/BehaviorContextObjectTestNode.h b/Gems/ScriptCanvasTesting/Code/Source/Nodes/BehaviorContextObjectTestNode.h index 2093912dd9..cc7bda1c95 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/Nodes/BehaviorContextObjectTestNode.h +++ b/Gems/ScriptCanvasTesting/Code/Source/Nodes/BehaviorContextObjectTestNode.h @@ -10,6 +10,9 @@ #include +#include +#include + namespace ScriptCanvasTestingNodes { //! This object is used to test the use of BehaviorContext classes diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp index 00705bfbaa..9d75d3ed9d 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp @@ -779,7 +779,7 @@ TEST_F(ScriptCanvasTestFixture, InterpretedPrintConnectedInput) TEST_F(ScriptCanvasTestFixture, InterpretedPrintFormatEmptyValue) { - RunUnitTestGraph("LY_SC_UnitTest_PrintFormatEmptyValue", ExecutionMode::Interpreted); + ExpectParseError("LY_SC_UnitTest_PrintFormatEmptyValue"); } TEST_F(ScriptCanvasTestFixture, InterpretedProperties) @@ -819,7 +819,7 @@ TEST_F(ScriptCanvasTestFixture, InterpretedStringFormat) TEST_F(ScriptCanvasTestFixture, InterpretedStringFormatEmptyValue) { - RunUnitTestGraph("LY_SC_UnitTest_StringFormatEmptyValue", ExecutionMode::Interpreted); + ExpectParseError("LY_SC_UnitTest_StringFormatEmptyValue"); } TEST_F(ScriptCanvasTestFixture, InterpretedStringFormatWithRepeatedValueName) diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventBroadcast.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventBroadcast.h index de2563c6ad..d29bf5910c 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventBroadcast.h +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventBroadcast.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include @@ -38,8 +39,8 @@ namespace ScriptEvents void ReserveArguments(size_t numArguments); - size_t GetNumArguments() const override { return m_behaviorParameters.size(); } - const AZ::BehaviorParameter* GetArgument(size_t index) const override + size_t GetNumArguments() const override { return m_behaviorParameters.size(); } + const AZ::BehaviorParameter* GetArgument(size_t index) const override { if (index >= m_behaviorParameters.size()) { diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventMethod.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventMethod.h index 0ff8194e56..a0893417fc 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventMethod.h +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/Internal/BehaviorContextBinding/ScriptEventMethod.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include @@ -38,8 +39,8 @@ namespace ScriptEvents void ReserveArguments(size_t numArguments); - size_t GetNumArguments() const override { return m_behaviorParameters.size(); } - const AZ::BehaviorParameter* GetArgument(size_t index) const override + size_t GetNumArguments() const override { return m_behaviorParameters.size(); } + const AZ::BehaviorParameter* GetArgument(size_t index) const override { if (index >= m_behaviorParameters.size()) { @@ -47,7 +48,7 @@ namespace ScriptEvents return nullptr; } - return &m_behaviorParameters[index]; + return &m_behaviorParameters[index]; } const AZStd::string* GetArgumentName(size_t index) const override { return &m_argumentNames[index]; } diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h index bc8112802b..a56e9b422b 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h @@ -11,7 +11,7 @@ #include #include -#include +#include #include namespace ScriptEvents diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventMethod.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventMethod.h deleted file mode 100644 index a04b5969bf..0000000000 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventMethod.h +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include -#include - -namespace ScriptEvents -{ - //! Holds the versioned definition for each of a script events. - //! You can think of this as a function declaration with a name, a return type - //! and an optional list of parameters (see ScriptEventParameter). - class Method - { - public: - - AZ_TYPE_INFO(Method, "{E034EA83-C798-413D-ACE8-4923C51CF4F7}"); - - Method() - : m_name("Name") - , m_tooltip("Tooltip") - , m_returnType("Return Type") - { - m_name.Set("MethodName"); - m_tooltip.Set(""); - m_returnType.Set(azrtti_typeid()); - } - - Method(const Method& rhs) - { - m_name = rhs.m_name; - m_tooltip = rhs.m_tooltip; - m_returnType = rhs.m_returnType; - m_parameters = rhs.m_parameters; - } - - Method& operator=(const Method& rhs) - { - if (this != &rhs) - { - m_name = rhs.m_name; - m_tooltip = rhs.m_tooltip; - m_returnType = rhs.m_returnType; - m_parameters.assign(rhs.m_parameters.begin(), rhs.m_parameters.end()); - } - return *this; - } - - Method(Method&& rhs) - { - m_name = AZStd::move(rhs.m_name); - m_tooltip = AZStd::move(rhs.m_tooltip); - m_returnType = AZStd::move(rhs.m_returnType); - m_parameters.swap(rhs.m_parameters); - } - - Method(AZ::ScriptDataContext& dc) - { - FromScript(dc); - } - - void FromScript(AZ::ScriptDataContext& dc) - { - if (dc.GetNumArguments() > 0) - { - AZStd::string name; - if (dc.IsString(0) && dc.ReadArg(0, name)) - { - m_name.Set(name.c_str()); - } - - if (dc.GetNumArguments() > 1) - { - AZ::Uuid returnType; - if (dc.ReadArg(1, returnType)) - { - m_returnType.Set(returnType); - } - } - } - - //AZ_TracePrintf("Script Events", "Added Script Method: %s (return type: %s)\n", GetName().c_str(), m_returnType.IsEmpty() ? "none" : GetReturnType().ToString().c_str()); - - } - - ~Method() - { - m_parameters.clear(); - } - - void AddParameter(AZ::ScriptDataContext& dc) - { - Parameter& parameter = NewParameter(); - parameter.FromScript(dc); - dc.PushResult(parameter); - } - - bool IsValid() const; - - Parameter& NewParameter() - { - m_parameters.emplace_back(); - return m_parameters.back(); - } - - static void Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Field("m_name", &Method::m_name) - ->Field("m_tooltip", &Method::m_tooltip) - ->Field("m_returnType", &Method::m_returnType) - ->Field("m_parameters", &Method::m_parameters) - ; - - if (AZ::EditContext* editContext = serializeContext->GetEditContext()) - { - editContext->Class("Script Event", "A script event's definition") - ->DataElement(AZ::Edit::UIHandlers::Default, &Method::m_name, "Name", "The specified name for this event, represents a callable function (i.e. MyScriptEvent())") - ->DataElement(AZ::Edit::UIHandlers::Default, &Method::m_tooltip, "Tooltip", "A description of this event") - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &Method::m_returnType, "Return value type", "the typeid of the return value, ex. AZ::type_info::Uuid foo()") - ->Attribute(AZ::Edit::Attributes::GenericValueList, &Types::GetValidReturnTypes) - ->DataElement(AZ::Edit::UIHandlers::Default, &Method::m_parameters, "Parameters", "A list of parameters for the EBus event, ex. void foo(Parameter1, Parameter2)") - ; - } - } - - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) - { - behaviorContext->Class("Method") - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Method("AddParameter", &Method::AddParameter) - ->Property("Name", BehaviorValueProperty(&Method::m_name)) - ->Property("ReturnType", BehaviorValueProperty(&Method::m_returnType)) - ->Property("Parameters", BehaviorValueProperty(&Method::m_parameters)) - ; - } - } - - AZStd::string GetName() const { return m_name.Get() ? *m_name.Get() : ""; } - AZStd::string GetTooltip() const { return m_tooltip.Get() ? *m_tooltip.Get() : ""; } - const AZ::Uuid GetReturnType() const { return m_returnType.Get() ? *m_returnType.Get() : AZ::Uuid::CreateNull(); } - const AZStd::vector& GetParameters() const { return m_parameters; } - - ScriptEventData::VersionedProperty& GetNameProperty() { return m_name; } - ScriptEventData::VersionedProperty& GetTooltipProperty() { return m_tooltip; } - ScriptEventData::VersionedProperty& GetReturnTypeProperty() { return m_returnType; } - - const ScriptEventData::VersionedProperty& GetNameProperty() const { return m_name; } - const ScriptEventData::VersionedProperty& GetTooltipProperty() const { return m_tooltip; } - const ScriptEventData::VersionedProperty& GetReturnTypeProperty() const { return m_returnType; } - - AZ::Crc32 GetEventId() const { return AZ::Crc32(GetNameProperty().GetId().ToString().c_str()); } - - //! Validates that the asset data being stored is valid and supported. - AZ::Outcome Validate() const - { - const AZStd::string name = GetName(); - const AZ::Uuid returnType = GetReturnType(); - - // Validate address type - if (!Types::IsValidReturnType(returnType)) - { - return AZ::Failure(AZStd::string::format("The specified type %s is not valid as return type for Script Event: %s", returnType.ToString().c_str(), name.c_str())); - } - - // Definition name cannot be empty - if (name.empty()) - { - return AZ::Failure(AZStd::string("Definition name cannot be empty")); - } - - // Name cannot start with a number - if (isdigit(name.at(0))) - { - return AZ::Failure(AZStd::string::format("%s, names cannot start with a number", name.c_str())); - } - - // Conform to valid function names - AZStd::smatch match; - - // Ascii-only - AZStd::regex asciionly_regex("[^\x0A\x0D\x20-\x7E]"); - AZStd::regex_match(name, match, asciionly_regex); - if (!match.empty()) - { - return AZ::Failure(AZStd::string::format("%s, invalid name, names may only contain ASCII characters", name.c_str())); - } - - AZStd::regex validate_regex("[_[:alpha:]][_[:alnum:]]*"); - AZStd::regex_match(name, match, validate_regex); - if (match.empty()) - { - return AZ::Failure(AZStd::string::format("%s, invalid name specified", name.c_str())); - } - - AZStd::string parameterName; - int parameterIndex = 0; - for (const Parameter& parameter : m_parameters) - { - auto outcome = parameter.Validate(); - if (!outcome.IsSuccess()) - { - return outcome; - } - - if (parameter.GetName().compare(parameterName) == 0) - { - return AZ::Failure(AZStd::string::format("Cannot have duplicate parameter names (%d: %s) make sure each parameter name is unique", parameterIndex, parameterName.c_str())); - } - - parameterName = parameter.GetName(); - ++parameterIndex; - } - - return AZ::Success(true); - } - - void PreSave() - { - m_name.PreSave(); - m_tooltip.PreSave(); - m_returnType.PreSave(); - - for (Parameter parameter : m_parameters) - { - parameter.PreSave(); - } - } - - void Flatten() - { - m_name.Flatten(); - m_tooltip.Flatten(); - m_returnType.Flatten(); - for (Parameter& parameter : m_parameters) - { - parameter.Flatten(); - } - } - - private: - - ScriptEventData::VersionedProperty m_name; - ScriptEventData::VersionedProperty m_tooltip; - ScriptEventData::VersionedProperty m_returnType; - AZStd::vector m_parameters; - - }; - -} diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventParameter.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventParameter.h index 3871a04be5..ad5b872d79 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventParameter.h +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventParameter.h @@ -9,10 +9,7 @@ #pragma once #include -#include #include -#include -#include namespace ScriptEvents { @@ -45,109 +42,11 @@ namespace ScriptEvents FromScript(dc); } - void FromScript(AZ::ScriptDataContext& dc) - { - if (dc.GetNumArguments() > 0) - { - AZStd::string name; - if (dc.ReadArg(0, name)) - { - m_name.Set(name.c_str()); - } - - if (dc.GetNumArguments() > 1) - { - AZ::Uuid parameterType; - if (dc.ReadArg(1, parameterType)) - { - m_type.Set(parameterType); - } - } - } - - //AZ_TracePrintf("Script Events", "Added Parameter: %s (type: %s)\n", GetName().c_str(), GetType().ToString() .c_str()); - - } + void FromScript(AZ::ScriptDataContext& dc); - static void Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Field("m_name", &Parameter::m_name) - ->Field("m_tooltip", &Parameter::m_tooltip) - ->Field("m_type", &Parameter::m_type) - ; - - if (AZ::EditContext* editContext = serializeContext->GetEditContext()) - { - editContext->Class("A Script Event's method parameter", "A parameter to a Script Event's event definition") - ->DataElement(AZ::Edit::UIHandlers::Default, &Parameter::m_name, "Name", "Name of the parameter, ex. void foo(int thisIsTheParameterName)") - ->DataElement(AZ::Edit::UIHandlers::Default, &Parameter::m_tooltip, "Tooltip", "A description of this parameter") - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &Parameter::m_type, "Type", "The typeid of the parameter, ex. void foo(AZ::type_info::Uuid())") - ->Attribute(AZ::Edit::Attributes::GenericValueList, &Types::GetValidParameterTypes) - ; - } - } - - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) - { - behaviorContext->Class("Parameter") - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Property("Name", BehaviorValueProperty(&Parameter::m_name)) - ->Property("Type", BehaviorValueProperty(&Parameter::m_type)) - ; - } - } - - AZ::Outcome Validate() const - { - const AZStd::string& name = GetName(); - const AZ::Uuid* parameterType = m_type.Get(); - - AZ_Assert(parameterType && !parameterType->IsNull(), "The Parameter type should not be null"); - - // Validate address type - if (!Types::IsValidParameterType(*parameterType)) - { - return AZ::Failure(AZStd::string::format("The specified type %s is not valid as parameter type for Script Event: %s", (*parameterType).ToString().c_str(), name.c_str())); - } - - // Definition name cannot be empty - if (name.empty()) - { - return AZ::Failure(AZStd::string("Definition name cannot be empty")); - } - - // Name cannot start with a number - if (isdigit(name.at(0))) - { - return AZ::Failure(AZStd::string::format("%s, names cannot start with a number", name.c_str())); - } - - // Conform to valid function names - AZStd::smatch match; - - // Ascii-only - AZStd::regex asciionly_regex("[^\x0A\x0D\x20-\x7E]"); - AZStd::regex_match(name, match, asciionly_regex); - if (match.size() > 0) - { - return AZ::Failure(AZStd::string::format("%s, invalid name, names may only contain ASCII characters", name.c_str())); - } - - // Function name syntax - AZStd::regex validate_regex("[_[:alpha:]][_[:alnum:]]*"); - AZStd::regex_match(name, match, validate_regex); - if (match.size() == 0) - { - return AZ::Failure(AZStd::string::format("%s, invalid name specified", name.c_str())); - } - - return AZ::Success(true); - - } + static void Reflect(AZ::ReflectContext* context); + AZ::Outcome Validate() const; AZStd::string GetName() const { return m_name.Get() ? *m_name.Get() : ""; } AZStd::string GetTooltip() const { return m_tooltip.Get() ? *m_tooltip.Get() : ""; } AZ::Uuid GetType() const { return m_type.Get() ? *m_type.Get() : AZ::Uuid::CreateNull(); } diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventTypes.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventTypes.h index a523d932ea..96233e5867 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventTypes.h +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventTypes.h @@ -10,6 +10,14 @@ #include +#include + +namespace AZ +{ + class BehaviorClass; + class BehaviorMethod; +} + namespace ScriptEvents { namespace Types diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsAssetRef.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsAssetRef.h index 619dd42483..526a36f6b9 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsAssetRef.h +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsAssetRef.h @@ -9,12 +9,10 @@ #include #include -#include #include #include #include #include -#include #include @@ -38,40 +36,7 @@ namespace ScriptEvents using AssetChangedCB = AZStd::function&, void* userData)>; - static void Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Version(0) - ->Field("Asset", &ScriptEventsAssetRef::m_asset) - ; - - if (AZ::EditContext* editContext = serializeContext->GetEditContext()) - { - editContext->Class("Script Event Asset", "") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptEventsAssetRef::m_asset, "Script Event Asset", "") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &ScriptEventsAssetRef::OnAssetChanged) - //TODO #lsempe: hook up to open Asset Editor when ready - //->Attribute("EditButton", "") - //->Attribute("EditDescription", "Open in Script Canvas Editor") - //->Attribute("EditCallback", &ScriptEventsAssetRef::LaunchScriptCanvasEditor) - ; - } - } - - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) - { - behaviorContext->Class() - ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) - ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) - ->Attribute(AZ::Script::Attributes::ConstructibleFromNil, false) - ->Method("Get", &ScriptEventsAssetRef::GetDefinition) - ; - } - } + static void Reflect(AZ::ReflectContext* context); ScriptEventsAssetRef() = default; @@ -100,98 +65,22 @@ namespace ScriptEvents return nullptr; } - void SetAsset(const AZ::Data::Asset& asset) - { - m_asset = asset; - - if (m_asset.IsReady()) - { - if (ScriptEventsAsset* scriptEventAsset = m_asset.GetAs()) - { - scriptEventAsset->m_definition.RegisterInternal(); - } - } - else - { - if (AZ::Data::AssetBus::Handler::BusIsConnectedId(m_asset.GetId())) - { - AZ::Data::AssetBus::Handler::BusDisconnect(m_asset.GetId()); - } - - AZ::Data::AssetBus::Handler::BusConnect(m_asset.GetId()); - } - } + void SetAsset(const AZ::Data::Asset& asset); AZ::Data::Asset GetAsset() const { return m_asset; } - void Load(bool loadBlocking /*= false*/) - { - if (!m_asset.IsReady()) - { - AZ::Data::AssetInfo assetInfo; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, m_asset.GetId()); - if (assetInfo.m_assetId.IsValid()) - { - auto& assetManager = AZ::Data::AssetManager::Instance(); - m_asset = assetManager.GetAsset(m_asset.GetId(), azrtti_typeid(), m_asset.GetAutoLoadBehavior()); - - if(loadBlocking) - { - m_asset.BlockUntilLoadComplete(); - } - } - } - } - - AZ::u32 OnAssetChanged() - { - SetAsset(m_asset); - Load(false); - - if (m_assetNotifyCallback) - { - m_assetNotifyCallback(m_asset, m_userData); - } - - return AZ::Edit::PropertyRefreshLevels::None; - } + void Load(bool loadBlocking /*= false*/); + AZ::u32 OnAssetChanged(); //===================================================================== // AZ::Data::AssetBus - void OnAssetReady(AZ::Data::Asset asset) override - { - if (ScriptEventsAsset* scriptEventAsset = m_asset.GetAs()) - { - scriptEventAsset->m_definition.RegisterInternal(); - } - } - - void OnAssetReloaded(AZ::Data::Asset asset) override - { - SetAsset(asset); - - if (m_assetNotifyCallback) - { - m_assetNotifyCallback(m_asset, m_userData); - } - } - - void OnAssetUnloaded([[maybe_unused]] const AZ::Data::AssetId assetId, [[maybe_unused]] const AZ::Data::AssetType assetType) override - { - if (ScriptEventsAsset* ebusAsset = m_asset.GetAs()) - { - bool isRegistered = false; - //ScriptEventsLegacy::RegistrationRequestBus::BroadcastResult(isRegistered, &ScriptEventsLegacy::RegistrationRequestBus::Events::IsBusRegistered, ebusAsset->m_scriptEventsDefinition.m_name); - if (isRegistered) - { - //ScriptEventsLegacy::RegistrationRequestBus::Broadcast(&ScriptEventsLegacy::RegistrationRequestBus::Events::Unregister, ebusAsset->m_scriptEventsDefinition.m_name); - } - } - } + void OnAssetReady(AZ::Data::Asset asset) override; + void OnAssetReloaded(AZ::Data::Asset asset) override; + void OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType assetType) override; void OnAssetSaved(AZ::Data::Asset asset, [[maybe_unused]] bool isSuccessful) override { diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsMethod.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsMethod.h new file mode 100644 index 0000000000..77f8d1cbd4 --- /dev/null +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsMethod.h @@ -0,0 +1,160 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + class ReflectContext; +} +namespace ScriptEvents +{ + //! Holds the versioned definition for each of a script events. + //! You can think of this as a function declaration with a name, a return type + //! and an optional list of parameters (see ScriptEventParameter). + class Method + { + public: + AZ_TYPE_INFO(Method, "{E034EA83-C798-413D-ACE8-4923C51CF4F7}"); + + Method() + : m_name("Name") + , m_tooltip("Tooltip") + , m_returnType("Return Type") + { + m_name.Set("MethodName"); + m_tooltip.Set(""); + m_returnType.Set(azrtti_typeid()); + } + + Method(const Method& rhs) + { + m_name = rhs.m_name; + m_tooltip = rhs.m_tooltip; + m_returnType = rhs.m_returnType; + m_parameters = rhs.m_parameters; + } + + Method& operator=(const Method& rhs) + { + if (this != &rhs) + { + m_name = rhs.m_name; + m_tooltip = rhs.m_tooltip; + m_returnType = rhs.m_returnType; + m_parameters.assign(rhs.m_parameters.begin(), rhs.m_parameters.end()); + } + return *this; + } + + Method(Method&& rhs) + { + m_name = AZStd::move(rhs.m_name); + m_tooltip = AZStd::move(rhs.m_tooltip); + m_returnType = AZStd::move(rhs.m_returnType); + m_parameters.swap(rhs.m_parameters); + } + + Method(AZ::ScriptDataContext& dc) + { + FromScript(dc); + } + + void FromScript(AZ::ScriptDataContext& dc); + + ~Method() + { + m_parameters.clear(); + } + + void AddParameter(AZ::ScriptDataContext& dc) + { + Parameter& parameter = NewParameter(); + parameter.FromScript(dc); + dc.PushResult(parameter); + } + + bool IsValid() const; + + Parameter& NewParameter() + { + m_parameters.emplace_back(); + return m_parameters.back(); + } + + static void Reflect(AZ::ReflectContext* context); + + AZStd::string GetName() const + { + return m_name.Get() ? *m_name.Get() : ""; + } + AZStd::string GetTooltip() const + { + return m_tooltip.Get() ? *m_tooltip.Get() : ""; + } + + const AZ::Uuid GetReturnType() const + { + return m_returnType.Get() ? *m_returnType.Get() : AZ::Uuid::CreateNull(); + } + + const AZStd::vector& GetParameters() const + { + return m_parameters; + } + + ScriptEventData::VersionedProperty& GetNameProperty() + { + return m_name; + } + + ScriptEventData::VersionedProperty& GetTooltipProperty() + { + return m_tooltip; + } + + ScriptEventData::VersionedProperty& GetReturnTypeProperty() + { + return m_returnType; + } + + const ScriptEventData::VersionedProperty& GetNameProperty() const + { + return m_name; + } + + const ScriptEventData::VersionedProperty& GetTooltipProperty() const + { + return m_tooltip; + } + + const ScriptEventData::VersionedProperty& GetReturnTypeProperty() const + { + return m_returnType; + } + + AZ::Crc32 GetEventId() const + { + return AZ::Crc32(GetNameProperty().GetId().ToString().c_str()); + } + //! Validates that the asset data being stored is valid and supported. + AZ::Outcome Validate() const; + void PreSave(); + void Flatten(); + + private: + ScriptEventData::VersionedProperty m_name; + ScriptEventData::VersionedProperty m_tooltip; + ScriptEventData::VersionedProperty m_returnType; + AZStd::vector m_parameters; + }; + +} // namespace ScriptEvents diff --git a/Gems/ScriptEvents/Code/Source/Editor/ScriptEventsEditorGem.cpp b/Gems/ScriptEvents/Code/Source/Editor/ScriptEventsEditorGem.cpp index 8ac100c01f..8ab014ec15 100644 --- a/Gems/ScriptEvents/Code/Source/Editor/ScriptEventsEditorGem.cpp +++ b/Gems/ScriptEvents/Code/Source/Editor/ScriptEventsEditorGem.cpp @@ -13,6 +13,7 @@ #include #include +#include #if defined(SCRIPTEVENTS_EDITOR) namespace ScriptEvents diff --git a/Gems/ScriptEvents/Code/Source/ScriptEventParameter.cpp b/Gems/ScriptEvents/Code/Source/ScriptEventParameter.cpp new file mode 100644 index 0000000000..1f888de10f --- /dev/null +++ b/Gems/ScriptEvents/Code/Source/ScriptEventParameter.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "ScriptEvents/ScriptEventParameter.h" + +#include +#include +#include +#include + +namespace ScriptEvents +{ + void Parameter::FromScript(AZ::ScriptDataContext& dc) + { + if (dc.GetNumArguments() > 0) + { + AZStd::string name; + if (dc.ReadArg(0, name)) + { + m_name.Set(name.c_str()); + } + + if (dc.GetNumArguments() > 1) + { + AZ::Uuid parameterType; + if (dc.ReadArg(1, parameterType)) + { + m_type.Set(parameterType); + } + } + } + + // AZ_TracePrintf("Script Events", "Added Parameter: %s (type: %s)\n", GetName().c_str(), GetType().ToString() + // .c_str()); + } + + void Parameter::Reflect(AZ::ReflectContext* context) + { + if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Field("m_name", &Parameter::m_name) + ->Field("m_tooltip", &Parameter::m_tooltip) + ->Field("m_type", &Parameter::m_type); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("A Script Event's method parameter", "A parameter to a Script Event's event definition") + ->DataElement( + AZ::Edit::UIHandlers::Default, &Parameter::m_name, "Name", + "Name of the parameter, ex. void foo(int thisIsTheParameterName)") + ->DataElement(AZ::Edit::UIHandlers::Default, &Parameter::m_tooltip, "Tooltip", "A description of this parameter") + ->DataElement( + AZ::Edit::UIHandlers::ComboBox, &Parameter::m_type, "Type", + "The typeid of the parameter, ex. void foo(AZ::type_info::Uuid())") + ->Attribute(AZ::Edit::Attributes::GenericValueList, &Types::GetValidParameterTypes); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("Parameter") + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Property("Name", BehaviorValueProperty(&Parameter::m_name)) + ->Property("Type", BehaviorValueProperty(&Parameter::m_type)); + } + } + + AZ::Outcome Parameter::Validate() const + { + const AZStd::string& name = GetName(); + const AZ::Uuid* parameterType = m_type.Get(); + + AZ_Assert(parameterType && !parameterType->IsNull(), "The Parameter type should not be null"); + + // Validate address type + if (!Types::IsValidParameterType(*parameterType)) + { + return AZ::Failure(AZStd::string::format( + "The specified type %s is not valid as parameter type for Script Event: %s", + (*parameterType).ToString().c_str(), name.c_str())); + } + + // Definition name cannot be empty + if (name.empty()) + { + return AZ::Failure(AZStd::string("Definition name cannot be empty")); + } + + // Name cannot start with a number + if (isdigit(name.at(0))) + { + return AZ::Failure(AZStd::string::format("%s, names cannot start with a number", name.c_str())); + } + + // Conform to valid function names + AZStd::smatch match; + + // Ascii-only + AZStd::regex asciionly_regex("[^\x0A\x0D\x20-\x7E]"); + AZStd::regex_match(name, match, asciionly_regex); + if (match.size() > 0) + { + return AZ::Failure(AZStd::string::format("%s, invalid name, names may only contain ASCII characters", name.c_str())); + } + + // Function name syntax + AZStd::regex validate_regex("[_[:alpha:]][_[:alnum:]]*"); + AZStd::regex_match(name, match, validate_regex); + if (match.size() == 0) + { + return AZ::Failure(AZStd::string::format("%s, invalid name specified", name.c_str())); + } + + return AZ::Success(true); + } +} // namespace ScriptEvents diff --git a/Gems/ScriptEvents/Code/Source/ScriptEventsAssetRef.cpp b/Gems/ScriptEvents/Code/Source/ScriptEventsAssetRef.cpp new file mode 100644 index 0000000000..d0aa4e1b10 --- /dev/null +++ b/Gems/ScriptEvents/Code/Source/ScriptEventsAssetRef.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "ScriptEvents/ScriptEventsAssetRef.h" + +#include +#include +#include + +namespace ScriptEvents +{ + void ScriptEventsAssetRef::Reflect(AZ::ReflectContext* context) + { + if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) + { + serializeContext->Class()->Version(0)->Field("Asset", &ScriptEventsAssetRef::m_asset); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("Script Event Asset", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptEventsAssetRef::m_asset, "Script Event Asset", "") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &ScriptEventsAssetRef::OnAssetChanged) + // TODO #lsempe: hook up to open Asset Editor when ready + //->Attribute("EditButton", "") + //->Attribute("EditDescription", "Open in Script Canvas Editor") + //->Attribute("EditCallback", &ScriptEventsAssetRef::LaunchScriptCanvasEditor) + ; + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class() + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Attribute(AZ::Script::Attributes::ConstructibleFromNil, false) + ->Method("Get", &ScriptEventsAssetRef::GetDefinition); + } + } + + void ScriptEventsAssetRef::SetAsset(const AZ::Data::Asset& asset) + { + m_asset = asset; + + if (m_asset.IsReady()) + { + if (ScriptEventsAsset* scriptEventAsset = m_asset.GetAs()) + { + scriptEventAsset->m_definition.RegisterInternal(); + } + } + else + { + if (AZ::Data::AssetBus::Handler::BusIsConnectedId(m_asset.GetId())) + { + AZ::Data::AssetBus::Handler::BusDisconnect(m_asset.GetId()); + } + + AZ::Data::AssetBus::Handler::BusConnect(m_asset.GetId()); + } + } + + void ScriptEventsAssetRef::Load(bool loadBlocking /*= false*/) + { + if (!m_asset.IsReady()) + { + AZ::Data::AssetInfo assetInfo; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, m_asset.GetId()); + if (assetInfo.m_assetId.IsValid()) + { + auto& assetManager = AZ::Data::AssetManager::Instance(); + m_asset = assetManager.GetAsset(m_asset.GetId(), azrtti_typeid(), m_asset.GetAutoLoadBehavior()); + + if(loadBlocking) + { + m_asset.BlockUntilLoadComplete(); + } + } + } + } + + AZ::u32 ScriptEventsAssetRef::OnAssetChanged() + { + SetAsset(m_asset); + Load(false); + + if (m_assetNotifyCallback) + { + m_assetNotifyCallback(m_asset, m_userData); + } + + return AZ::Edit::PropertyRefreshLevels::None; + } + + void ScriptEventsAssetRef::OnAssetReady(AZ::Data::Asset asset) + { + if (ScriptEventsAsset* scriptEventAsset = m_asset.GetAs()) + { + scriptEventAsset->m_definition.RegisterInternal(); + } + } + + void ScriptEventsAssetRef::OnAssetReloaded(AZ::Data::Asset asset) + { + SetAsset(asset); + + if (m_assetNotifyCallback) + { + m_assetNotifyCallback(m_asset, m_userData); + } + } + + void ScriptEventsAssetRef::OnAssetUnloaded( + [[maybe_unused]] const AZ::Data::AssetId assetId, [[maybe_unused]] const AZ::Data::AssetType assetType) + { + if (ScriptEventsAsset* ebusAsset = m_asset.GetAs()) + { + bool isRegistered = false; + // ScriptEventsLegacy::RegistrationRequestBus::BroadcastResult(isRegistered, + // &ScriptEventsLegacy::RegistrationRequestBus::Events::IsBusRegistered, ebusAsset->m_scriptEventsDefinition.m_name); + if (isRegistered) + { + // ScriptEventsLegacy::RegistrationRequestBus::Broadcast(&ScriptEventsLegacy::RegistrationRequestBus::Events::Unregister, + // ebusAsset->m_scriptEventsDefinition.m_name); + } + } + } +} // namespace ScriptEvents diff --git a/Gems/ScriptEvents/Code/Source/ScriptEventsMethod.cpp b/Gems/ScriptEvents/Code/Source/ScriptEventsMethod.cpp new file mode 100644 index 0000000000..579c51a782 --- /dev/null +++ b/Gems/ScriptEvents/Code/Source/ScriptEventsMethod.cpp @@ -0,0 +1,167 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "ScriptEvents/ScriptEventsMethod.h" + +#include +#include +#include + +namespace ScriptEvents +{ + void Method::FromScript(AZ::ScriptDataContext& dc) + { + if (dc.GetNumArguments() > 0) + { + AZStd::string name; + if (dc.IsString(0) && dc.ReadArg(0, name)) + { + m_name.Set(name.c_str()); + } + + if (dc.GetNumArguments() > 1) + { + AZ::Uuid returnType; + if (dc.ReadArg(1, returnType)) + { + m_returnType.Set(returnType); + } + } + } + + // AZ_TracePrintf("Script Events", "Added Script Method: %s (return type: %s)\n", GetName().c_str(), m_returnType.IsEmpty() ? "none" + // : GetReturnType().ToString().c_str()); + } + void Method::Reflect(AZ::ReflectContext* context) + { + if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Field("m_name", &Method::m_name) + ->Field("m_tooltip", &Method::m_tooltip) + ->Field("m_returnType", &Method::m_returnType) + ->Field("m_parameters", &Method::m_parameters); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("Script Event", "A script event's definition") + ->DataElement( + AZ::Edit::UIHandlers::Default, &Method::m_name, "Name", + "The specified name for this event, represents a callable function (i.e. MyScriptEvent())") + ->DataElement(AZ::Edit::UIHandlers::Default, &Method::m_tooltip, "Tooltip", "A description of this event") + ->DataElement( + AZ::Edit::UIHandlers::ComboBox, &Method::m_returnType, "Return value type", + "the typeid of the return value, ex. AZ::type_info::Uuid foo()") + ->Attribute(AZ::Edit::Attributes::GenericValueList, &Types::GetValidReturnTypes) + ->DataElement( + AZ::Edit::UIHandlers::Default, &Method::m_parameters, "Parameters", + "A list of parameters for the EBus event, ex. void foo(Parameter1, Parameter2)"); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("Method") + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Method("AddParameter", &Method::AddParameter) + ->Property("Name", BehaviorValueProperty(&Method::m_name)) + ->Property("ReturnType", BehaviorValueProperty(&Method::m_returnType)) + ->Property("Parameters", BehaviorValueProperty(&Method::m_parameters)); + } + } + + AZ::Outcome Method::Validate() const + { + const AZStd::string name = GetName(); + const AZ::Uuid returnType = GetReturnType(); + + // Validate address type + if (!Types::IsValidReturnType(returnType)) + { + return AZ::Failure(AZStd::string::format( + "The specified type %s is not valid as return type for Script Event: %s", returnType.ToString().c_str(), + name.c_str())); + } + + // Definition name cannot be empty + if (name.empty()) + { + return AZ::Failure(AZStd::string("Definition name cannot be empty")); + } + + // Name cannot start with a number + if (isdigit(name.at(0))) + { + return AZ::Failure(AZStd::string::format("%s, names cannot start with a number", name.c_str())); + } + + // Conform to valid function names + AZStd::smatch match; + + // Ascii-only + AZStd::regex asciionly_regex("[^\x0A\x0D\x20-\x7E]"); + AZStd::regex_match(name, match, asciionly_regex); + if (!match.empty()) + { + return AZ::Failure(AZStd::string::format("%s, invalid name, names may only contain ASCII characters", name.c_str())); + } + + AZStd::regex validate_regex("[_[:alpha:]][_[:alnum:]]*"); + AZStd::regex_match(name, match, validate_regex); + if (match.empty()) + { + return AZ::Failure(AZStd::string::format("%s, invalid name specified", name.c_str())); + } + + AZStd::string parameterName; + int parameterIndex = 0; + for (const Parameter& parameter : m_parameters) + { + auto outcome = parameter.Validate(); + if (!outcome.IsSuccess()) + { + return outcome; + } + + if (parameter.GetName().compare(parameterName) == 0) + { + return AZ::Failure(AZStd::string::format( + "Cannot have duplicate parameter names (%d: %s) make sure each parameter name is unique", parameterIndex, + parameterName.c_str())); + } + + parameterName = parameter.GetName(); + ++parameterIndex; + } + + return AZ::Success(true); + } + + void Method::PreSave() + { + m_name.PreSave(); + m_tooltip.PreSave(); + m_returnType.PreSave(); + + for (Parameter parameter : m_parameters) + { + parameter.PreSave(); + } + } + + void Method::Flatten() + { + m_name.Flatten(); + m_tooltip.Flatten(); + m_returnType.Flatten(); + for (Parameter& parameter : m_parameters) + { + parameter.Flatten(); + } + } +} // namespace ScriptEvents diff --git a/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h b/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h index 78c7308dde..53d4fd58b9 100644 --- a/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h +++ b/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include "ScriptEventTestUtilities.h" diff --git a/Gems/ScriptEvents/Code/scriptevents_common_files.cmake b/Gems/ScriptEvents/Code/scriptevents_common_files.cmake index c83518db32..a7ecd9e049 100644 --- a/Gems/ScriptEvents/Code/scriptevents_common_files.cmake +++ b/Gems/ScriptEvents/Code/scriptevents_common_files.cmake @@ -9,6 +9,9 @@ set(FILES Source/ScriptEventsSystemComponent.h Source/ScriptEventsSystemComponent.cpp + Source/ScriptEventParameter.cpp + Source/ScriptEventsMethod.cpp + Source/ScriptEventsAssetRef.cpp Include/ScriptEvents/ScriptEventsGem.h Include/ScriptEvents/ScriptEventsAsset.h Include/ScriptEvents/ScriptEventsAsset.cpp @@ -20,7 +23,7 @@ set(FILES Include/ScriptEvents/ScriptEventDefinition.h Include/ScriptEvents/ScriptEventDefinition.cpp Include/ScriptEvents/ScriptEvent.h - Include/ScriptEvents/ScriptEventMethod.h + Include/ScriptEvents/ScriptEventsMethod.h Include/ScriptEvents/ScriptEvent.cpp Include/ScriptEvents/ScriptEventParameter.h Include/ScriptEvents/ScriptEventSystem.h diff --git a/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp b/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp index 42fa05473c..215efd4656 100644 --- a/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp +++ b/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp @@ -7,11 +7,12 @@ */ #include "InputConfigurationComponent.h" +#include #include +#include #include -#include #include -#include +#include #include namespace StartingPointInput diff --git a/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h b/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h index 9b18e4f9e7..3f4a1bb605 100644 --- a/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h +++ b/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h @@ -9,12 +9,13 @@ #pragma once #include +#include namespace SurfaceData { namespace Constants { - static const char* s_unassignedTagName = "(unassigned)"; + static const char* s_unassignedTagName = AzFramework::SurfaceData::Constants::s_unassignedTagName; static const char* s_terrainHoleTagName = "terrainHole"; static const char* s_terrainTagName = "terrain"; diff --git a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp index e9f7861125..a5bf51d0fe 100644 --- a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp +++ b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp @@ -163,65 +163,61 @@ namespace SurfaceData // AssetManager::FindOrCreateAsset, it's possible for those locks to get locked in reverse on a loading thread, causing a deadlock. for (auto& assetId : surfaceTagAssetIds) { - m_surfaceTagNameAssets[assetId] = AZ::Data::AssetManager::Instance().GetAsset( - assetId, azrtti_typeid(), AZ::Data::AssetLoadBehavior::Default); - - // If any assets are still loading (which they likely will be), listen for the OnAssetReady event and refresh the Editor - // UI as each one finishes loading. - if (!m_surfaceTagNameAssets[assetId].IsReady()) - { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); - } + LoadAsset(assetId); } } - void EditorSurfaceDataSystemComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) + void EditorSurfaceDataSystemComponent::LoadAsset(const AZ::Data::AssetId& assetId) { - AZ::Data::AssetInfo assetInfo; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, assetId); + m_surfaceTagNameAssets[assetId] = AZ::Data::AssetManager::Instance().GetAsset( + assetId, azrtti_typeid(), AZ::Data::AssetLoadBehavior::Default); - const auto assetType = azrtti_typeid(); - if (assetInfo.m_assetType == assetType) - { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); - } + // Connect to the bus for this asset so we can monitor for both OnAssetReady and OnAssetReloaded events + AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); } - void EditorSurfaceDataSystemComponent::OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) + void EditorSurfaceDataSystemComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) { AZ::Data::AssetInfo assetInfo; AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, assetId); - const auto assetType = azrtti_typeid(); - if (assetInfo.m_assetType == assetType) + if (assetInfo.m_assetType == azrtti_typeid()) { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); + // A new Surface Tag asset was added, so load it. + LoadAsset(assetId); } } - void EditorSurfaceDataSystemComponent::OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& /*assetInfo*/) + void EditorSurfaceDataSystemComponent::OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& assetInfo) { - m_surfaceTagNameAssets.erase(assetId); + if (assetInfo.m_assetType == azrtti_typeid()) + { + // A Surface Tag asset was removed, so stop listening for it and remove it from our set of loaded assets. + // Note: This case should never really happen in practice - we're keeping the asset loaded, so the file will remain + // locked while the Editor is running and shouldn't be able to be deleted. + AZ::Data::AssetBus::MultiHandler::BusDisconnect(assetId); + m_surfaceTagNameAssets.erase(assetId); + } } void EditorSurfaceDataSystemComponent::OnAssetReloaded(AZ::Data::Asset asset) { - OnAssetReady(asset); + AddAsset(asset); } void EditorSurfaceDataSystemComponent::OnAssetReady(AZ::Data::Asset asset) { - AZ::Data::AssetBus::MultiHandler::BusDisconnect(asset.GetId()); AddAsset(asset); } void EditorSurfaceDataSystemComponent::AddAsset(AZ::Data::Asset& asset) { - const auto assetType = azrtti_typeid(); - if (asset.GetType() == assetType) + if (asset.GetType() == azrtti_typeid()) { m_surfaceTagNameAssets[asset.GetId()] = asset; - AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, AzToolsFramework::PropertyModificationRefreshLevel::Refresh_AttributesAndValues); + AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast( + &AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, + AzToolsFramework::PropertyModificationRefreshLevel::Refresh_AttributesAndValues); } } } diff --git a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h index f35cab56f4..603cffc56d 100644 --- a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h +++ b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h @@ -48,6 +48,7 @@ namespace SurfaceData private: + void LoadAsset(const AZ::Data::AssetId& assetId); void AddAsset(AZ::Data::Asset& asset); //////////////////////////////////////////////////////////////////////// @@ -63,7 +64,6 @@ namespace SurfaceData //////////////////////////////////////////////////////////////////////// // AzFramework::AssetCatalogEventBus void OnCatalogLoaded(const char* /*catalogFile*/) override; - void OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) override; void OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) override; void OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& assetInfo) override; diff --git a/Gems/Terrain/Assets/Materials/Terrain/DefaultPbrTerrain.material b/Gems/Terrain/Assets/Materials/Terrain/DefaultPbrTerrain.material new file mode 100644 index 0000000000..c0de5969b2 --- /dev/null +++ b/Gems/Terrain/Assets/Materials/Terrain/DefaultPbrTerrain.material @@ -0,0 +1,30 @@ +{ + "description": "", + "materialType": "PbrTerrain.materialtype", + "parentMaterial": "", + "propertyLayoutVersion": 1, + "properties": { + "macroColor": { + "useTexture": false + }, + "macroNormal": { + "useTexture": false + }, + "baseColor": { + "color": [ 0.18, 0.18, 0.18 ], + "useTexture": false + }, + "normal": + { + "useTexture": false + }, + "roughness": + { + "useTexture": false + }, + "specularF0": + { + "useTexture": false + } + } +} diff --git a/Gems/Terrain/Assets/Materials/Terrain/DefaultTerrainMacroMaterial.material b/Gems/Terrain/Assets/Materials/Terrain/DefaultTerrainMacroMaterial.material new file mode 100644 index 0000000000..afaf7e1947 --- /dev/null +++ b/Gems/Terrain/Assets/Materials/Terrain/DefaultTerrainMacroMaterial.material @@ -0,0 +1,8 @@ +{ + "description": "", + "materialType": "TerrainMacroMaterial.materialtype", + "parentMaterial": "", + "propertyLayoutVersion": 1, + "properties": { + } +} diff --git a/Gems/Terrain/Assets/Materials/Terrain/PbrTerrain.materialtype b/Gems/Terrain/Assets/Materials/Terrain/PbrTerrain.materialtype new file mode 100644 index 0000000000..191fa7a731 --- /dev/null +++ b/Gems/Terrain/Assets/Materials/Terrain/PbrTerrain.materialtype @@ -0,0 +1,434 @@ +{ + "description": "A material for rendering terrain with a physically-based rendering (PBR) material shading model.", + "propertyLayout": { + "version": 1, + "groups": [ + { + "id": "settings", + "displayName": "Settings" + } + ], + "properties": { + "general": [ + { + "id": "applySpecularAA", + "displayName": "Apply Specular AA", + "description": "Whether to apply specular anti-aliasing in the shader.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderOption", + "id": "o_applySpecularAA" + } + }, + { + "id": "enableShadows", + "displayName": "Enable Shadows", + "description": "Whether to use the shadow maps.", + "type": "Bool", + "defaultValue": true, + "connection": { + "type": "ShaderOption", + "id": "o_enableShadows" + } + }, + { + "id": "enableDirectionalLights", + "displayName": "Enable Directional Lights", + "description": "Whether to use directional lights.", + "type": "Bool", + "defaultValue": true, + "connection": { + "type": "ShaderOption", + "id": "o_enableDirectionalLights" + } + }, + { + "id": "enablePunctualLights", + "displayName": "Enable Punctual Lights", + "description": "Whether to use punctual lights.", + "type": "Bool", + "defaultValue": true, + "connection": { + "type": "ShaderOption", + "id": "o_enablePunctualLights" + } + }, + { + "id": "enableAreaLights", + "displayName": "Enable Area Lights", + "description": "Whether to use area lights.", + "type": "Bool", + "defaultValue": true, + "connection": { + "type": "ShaderOption", + "id": "o_enableAreaLights" + } + }, + { + "id": "enableIBL", + "displayName": "Enable IBL", + "description": "Whether to use Image Based Lighting (IBL).", + "type": "Bool", + "defaultValue": true, + "connection": { + "type": "ShaderOption", + "id": "o_enableIBL" + } + }, + { + "id": "forwardPassIBLSpecular", + "displayName": "Forward Pass IBL Specular", + "description": "Whether to apply IBL specular in the forward pass.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderOption", + "id": "o_materialUseForwardPassIBLSpecular" + } + } + ], + "settings": [ + { + "id": "heightmapImage", + "displayName": "Heightmap Image", + "description": "Heightmap of the terrain, controlled by the runtime.", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_heightmapImage" + } + }, + { + "id": "detailTextureMultiplier", + "displayName": "Detail Texture UV Multiplier", + "description": "How many times to repeat the detail texture per sector", + "type": "Float", + "defaultValue": 8.0, + "connection": { + "type": "ShaderInput", + "id": "m_detailTextureMultiplier" + } + }, + { + "id": "detailFadeDistance", + "displayName": "Detail Fade Distance (meters)", + "description": "The distance in meters that the detail texture starts to fade", + "type": "Float", + "defaultValue": 100.0, + "connection": { + "type": "ShaderInput", + "id": "m_detailFadeDistance" + } + }, + { + "id": "detailFadeLength", + "displayName": "Detail Fade Length", + "description": "How far beyond Detail Fade Distance where the detail texture no longer applies.", + "type": "Float", + "defaultValue": 50.0, + "connection": { + "type": "ShaderInput", + "id": "m_detailFadeLength" + } + } + ], + "macroColor": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Macro color texture map", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_macroColorMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + } + + ], + "macroNormal": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Macro normal texture map", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_macroNormalMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "flipX", + "displayName": "Flip X Channel", + "description": "Flip tangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipMacroNormalX" + } + }, + { + "id": "flipY", + "displayName": "Flip Y Channel", + "description": "Flip bitangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipMacroNormalY" + } + } + ], + "baseColor": [ + { + "id": "color", + "displayName": "Color", + "description": "Color is displayed as sRGB but the values are stored as linear color.", + "type": "Color", + "defaultValue": [ 1.0, 1.0, 1.0 ], + "connection": { + "type": "ShaderInput", + "id": "m_baseColor" + } + }, + { + "id": "factor", + "displayName": "Factor", + "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", + "type": "Float", + "defaultValue": 1.0, + "min": 0.0, + "max": 1.0, + "connection": { + "type": "ShaderInput", + "id": "m_baseColorFactor" + } + }, + { + "id": "textureMap", + "displayName": "Texture", + "description": "Base color texture map", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_baseColorMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "textureBlendMode", + "displayName": "Texture Blend Mode", + "description": "Selects the equation to use when combining Color, Factor, and Texture.", + "type": "Enum", + "enumValues": [ "Multiply", "LinearLight", "Lerp", "Overlay" ], + "defaultValue": "Overlay", + "connection": { + "type": "ShaderOption", + "id": "o_baseColorTextureBlendMode" + } + } + ], + "normal": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Texture for defining surface normal direction.", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_normalMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture, or just rely on vertex normals.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "flipX", + "displayName": "Flip X Channel", + "description": "Flip tangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipNormalX" + } + }, + { + "id": "flipY", + "displayName": "Flip Y Channel", + "description": "Flip bitangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipNormalY" + } + }, + { + "id": "factor", + "displayName": "Factor", + "description": "Strength factor for scaling the values", + "type": "Float", + "defaultValue": 1.0, + "min": 0.0, + "softMax": 2.0, + "connection": { + "type": "ShaderInput", + "id": "m_normalFactor" + } + } + ], + "roughness": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Texture for defining surface roughness.", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_roughnessMap" + } + }, + { + "id": "useTexture", + "description": "Whether to use the texture, or just default to the Factor value.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "factor", + "displayName": "Factor", + "description": "Controls the roughness value", + "type": "Float", + "defaultValue": 1.0, + "min": 0.0, + "max": 1.0, + "connection": { + "type": "ShaderInput", + "id": "m_roughnessFactor" + } + } + ], + "specularF0": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Texture for defining surface reflectance.", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_specularF0Map" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture, or just default to the Factor value.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "factor", + "displayName": "Factor", + "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", + "type": "Float", + "defaultValue": 0.5, + "min": 0.0, + "max": 1.0, + "connection": { + "type": "ShaderInput", + "id": "m_specularF0Factor" + } + } + ] + } + }, + "shaders": [ + { + "file": "../../Shaders/Terrain/TerrainPBR_ForwardPass.shader" + }, + { + "file": "../../Shaders/Terrain/Terrain_Shadowmap.shader" + }, + { + "file": "../../Shaders/Terrain/Terrain_DepthPass.shader" + } + ], + "functors": [ + { + "type": "UseTexture", + "args": { + "textureProperty": "macroColor.textureMap", + "useTextureProperty": "macroColor.useTexture", + "shaderOption": "o_macroColor_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "macroNormal.textureMap", + "useTextureProperty": "macroNormal.useTexture", + "shaderOption": "o_macroNormal_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "baseColor.textureMap", + "useTextureProperty": "baseColor.useTexture", + "dependentProperties": ["baseColor.textureBlendMode"], + "shaderOption": "o_baseColor_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "specularF0.textureMap", + "useTextureProperty": "specularF0.useTexture", + "shaderOption": "o_specularF0_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "normal.textureMap", + "useTextureProperty": "normal.useTexture", + "dependentProperties": ["normal.factor", "normal.flipX", "normal.flipY"], + "shaderOption": "o_normal_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "roughness.textureMap", + "useTextureProperty": "roughness.useTexture", + "shaderOption": "o_roughness_useTexture" + } + } + ] +} diff --git a/Gems/Terrain/Assets/Materials/Terrain/TerrainMacroMaterial.materialtype b/Gems/Terrain/Assets/Materials/Terrain/TerrainMacroMaterial.materialtype new file mode 100644 index 0000000000..0a4f6d0229 --- /dev/null +++ b/Gems/Terrain/Assets/Materials/Terrain/TerrainMacroMaterial.materialtype @@ -0,0 +1,46 @@ +{ + "description": "A material for providing terrain with low-fidelity color and normals. This material will get blended with surface detail materials.", + "propertyLayout": { + "version": 1, + "groups": [ + { + "id": "settings", + "displayName": "Settings" + } + ], + "properties": { + "macroColor": [ + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + } + + ], + "macroNormal": [ + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + } + ] + } + }, + "shaders": [ + { + "file": "../../Shaders/Terrain/TerrainPBR_ForwardPass.shader" + }, + { + "file": "../../Shaders/Terrain/Terrain_Shadowmap.shader" + }, + { + "file": "../../Shaders/Terrain/Terrain_DepthPass.shader" + } + ], + "functors": [ + ] +} diff --git a/Gems/Terrain/Assets/Shaders/Terrain/Terrain.azsl b/Gems/Terrain/Assets/Shaders/Terrain/Terrain.azsl deleted file mode 100644 index 50d11ca610..0000000000 --- a/Gems/Terrain/Assets/Shaders/Terrain/Terrain.azsl +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include "TerrainCommon.azsli" - -struct VertexOutput -{ - linear centroid float4 m_position : SV_Position; - float3 m_normal : NORMAL; - float3 m_tangent : TANGENT; - float3 m_bitangent : BITANGENT; - float m_height : UV; -}; - -struct ForwardPassOutput -{ - float4 m_diffuseColor : SV_Target0; //!< RGB = Diffuse Lighting, A = Blend Alpha (for blended surfaces) OR A = special encoding of surfaceScatteringFactor, m_subsurfaceScatteringQuality, o_enableSubsurfaceScattering - float4 m_specularColor : SV_Target1; //!< RGB = Specular Lighting, A = Unused - float4 m_albedo : SV_Target2; //!< RGB = Surface albedo pre-multiplied by other factors that will be multiplied later by diffuse GI, A = specularOcclusion - float4 m_specularF0 : SV_Target3; //!< RGB = Specular F0, A = roughness - float4 m_normal : SV_Target4; //!< RGB10 = EncodeNormalSignedOctahedron(worldNormal), A2 = multiScatterCompensationEnabled -}; - -struct PixelOutput -{ - float4 m_color : SV_Target0; -}; - -VertexOutput MainVS(in VertexInput input) -{ - VertexOutput output; - ObjectSrg::TerrainData terrainData = ObjectSrg::m_terrainData; - - float2 uv = input.m_uv; - float2 origUv = lerp(terrainData.m_uvMin, terrainData.m_uvMax, uv); - output.m_position = GetTerrainProjectedPosition(terrainData, input.m_position, origUv); - - // Calculate normal - float up = GetHeight(origUv + terrainData.m_uvStep * float2( 0.0f, -1.0f)); - float right = GetHeight(origUv + terrainData.m_uvStep * float2( 1.0f, 0.0f)); - float down = GetHeight(origUv + terrainData.m_uvStep * float2( 0.0f, 1.0f)); - float left = GetHeight(origUv + terrainData.m_uvStep * float2(-1.0f, 0.0f)); - - output.m_bitangent = normalize(float3(0.0, terrainData.m_sampleSpacing * 2.0f, down - up)); - output.m_tangent = normalize(float3(terrainData.m_sampleSpacing * 2.0f, 0.0, right - left)); - output.m_normal = cross(output.m_tangent, output.m_bitangent); - - output.m_height = GetHeight(origUv); - return output; -} - -ForwardPassOutput MainPS(in VertexOutput input) -{ - ForwardPassOutput output; - - float3 lightDirection = normalize(float3(-1.0, 1.0, -1.0)); - float3 lightIntensity = float3(1.0, 1.0, 1.0); - if (SceneSrg::m_directionalLightCount > 0) - { - lightDirection = SceneSrg::m_directionalLights[0].m_direction; - lightIntensity = SceneSrg::m_directionalLights[0].m_rgbIntensityLux; - } - - // Fake light intensity ranges from 1.0 for normals directly facing the light to zero for those - // directly facing away. - const float minLight = 0.01; - const float midLight = 0.1; - float lightDot = dot(normalize(input.m_normal), -lightDirection); - lightIntensity *= lightDot > 0.0 ? - lightDot * (1.0 - midLight) + midLight : // surface facing light - (lightDot + 1.0) * (midLight - minLight) + minLight; // surface facing away - - output.m_diffuseColor.rgb = 0.5 * lightIntensity; - output.m_diffuseColor.a = 0.0f; - - output.m_specularColor.rgb = 0.0; - - output.m_albedo.rgb = 0.25 + input.m_height * 0.5; - output.m_albedo.a = 0.0; - - output.m_specularF0.rgb = 0.04; - output.m_specularF0.a = 1.0; - - output.m_normal.rgb = input.m_normal; - output.m_normal.a = 0.0; - - return output; -} diff --git a/Gems/Terrain/Assets/Shaders/Terrain/Terrain.shader b/Gems/Terrain/Assets/Shaders/Terrain/Terrain.shader deleted file mode 100644 index e844a54a21..0000000000 --- a/Gems/Terrain/Assets/Shaders/Terrain/Terrain.shader +++ /dev/null @@ -1,33 +0,0 @@ -{ - "Source" : "./Terrain.azsl", - - "DepthStencilState" : - { - "Depth" : - { - "Enable" : true, - "CompareFunc" : "GreaterEqual" - } - }, - - "DrawList" : "forward", - - "ProgramSettings": - { - "EntryPoints": - [ - { - "name": "MainVS", - "type": "Vertex" - }, - { - "name": "MainPS", - "type": "Fragment" - } - ] - }, - - "BlendState" : { - "Enable" : false - } -} diff --git a/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli b/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli index 18b85bbd43..95d1a73bbd 100644 --- a/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli +++ b/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli @@ -7,20 +7,14 @@ #pragma once +#include <../Materials/Types/MaterialInputs/BaseColorInput.azsli> +#include <../Materials/Types/MaterialInputs/RoughnessInput.azsli> +#include <../Materials/Types/MaterialInputs/MetallicInput.azsli> +#include <../Materials/Types/MaterialInputs/SpecularInput.azsli> +#include <../Materials/Types/MaterialInputs/NormalInput.azsli> + ShaderResourceGroup ObjectSrg : SRG_PerObject { - Texture2D m_heightmapImage; - - Sampler PointSampler - { - MinFilter = Point; - MagFilter = Point; - MipFilter = Point; - AddressU = Clamp; - AddressV = Clamp; - AddressW = Clamp; - }; - row_major float3x4 m_modelToWorld; struct TerrainData @@ -33,14 +27,175 @@ ShaderResourceGroup ObjectSrg : SRG_PerObject }; TerrainData m_terrainData; + + // The below shouldn't be in this SRG but needs to be for now because the lighting functions depend on them. + + //! Reflection Probe (smallest probe volume that overlaps the object position) + struct ReflectionProbeData + { + row_major float3x4 m_modelToWorld; + row_major float3x4 m_modelToWorldInverse; // does not include extents + float3 m_outerObbHalfLengths; + float3 m_innerObbHalfLengths; + float m_padding; + bool m_useReflectionProbe; + bool m_useParallaxCorrection; + }; + + ReflectionProbeData m_reflectionProbeData; + TextureCube m_reflectionProbeCubeMap; + + float4x4 GetReflectionProbeWorldMatrix() + { + float4x4 modelToWorld = float4x4( + float4(1, 0, 0, 0), + float4(0, 1, 0, 0), + float4(0, 0, 1, 0), + float4(0, 0, 0, 1)); + + modelToWorld[0] = m_reflectionProbeData.m_modelToWorld[0]; + modelToWorld[1] = m_reflectionProbeData.m_modelToWorld[1]; + modelToWorld[2] = m_reflectionProbeData.m_modelToWorld[2]; + return modelToWorld; + } + + float4x4 GetReflectionProbeWorldMatrixInverse() + { + float4x4 modelToWorldInverse = float4x4( + float4(1, 0, 0, 0), + float4(0, 1, 0, 0), + float4(0, 0, 1, 0), + float4(0, 0, 0, 1)); + + modelToWorldInverse[0] = m_reflectionProbeData.m_modelToWorldInverse[0]; + modelToWorldInverse[1] = m_reflectionProbeData.m_modelToWorldInverse[1]; + modelToWorldInverse[2] = m_reflectionProbeData.m_modelToWorldInverse[2]; + return modelToWorldInverse; + } } +ShaderResourceGroup TerrainMaterialSrg : SRG_PerMaterial +{ + Texture2D m_heightmapImage; + float m_detailTextureMultiplier; + float m_detailFadeDistance; + float m_detailFadeLength; + + Sampler HeightmapSampler + { + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Point; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; + }; + + Sampler m_sampler + { + AddressU = Wrap; + AddressV = Wrap; + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + MaxAnisotropy = 16; + }; + + // Macro Color + Texture2D m_macroColorMap; + + // Macro normal + Texture2D m_macroNormalMap; + bool m_flipMacroNormalX; + bool m_flipMacroNormalY; + + // Base Color + float3 m_baseColor; + float m_baseColorFactor; + Texture2D m_baseColorMap; + + // Normal + Texture2D m_normalMap; + bool m_flipNormalX; + bool m_flipNormalY; + float m_normalFactor; + + // Roughness + Texture2D m_roughnessMap; + float m_roughnessFactor; + + // Specular + Texture2D m_specularF0Map; + float m_specularF0Factor; +} + +option bool o_useTerrainSmoothing = false; +option bool o_macroColor_useTexture = true; +option bool o_macroNormal_useTexture = true; +option bool o_baseColor_useTexture = true; +option bool o_specularF0_useTexture = true; +option bool o_normal_useTexture = true; +option bool o_roughness_useTexture = true; +option TextureBlendMode o_baseColorTextureBlendMode = TextureBlendMode::Multiply; + struct VertexInput { float2 m_position : POSITION; float2 m_uv : UV; }; +// Sample a texture with a 5 tap B-Spline. Consider ripping this out and putting in a more general location. +// This function samples a 4x4 neighborhood around the uv. Normally this would take 16 samples, but by taking +// advantage of bilinear filtering this can be done with 9 taps on the edges between pixels. The cost is further +// reduced by dropping the diagonals. +float SampleBSpline5Tap(Texture2D texture, SamplerState textureSampler, float2 uv, float2 textureSize, float2 rcpTextureSize) +{ + // Think of sample locations in the 4x4 neighborhood as having a top left coordinate of 0,0 and + // a bottom right coordinate of 3,3. + + // Find the position in texture space then round it to get the center of the 1,1 pixel (tc1) + float2 texelPos = uv * textureSize; + float2 tc1= floor(texelPos - 0.5) + 0.5; + + // Offset from center position to texel + float2 f = texelPos - tc1; + + // Compute B-Spline weights based on the offset + float2 OneMinusF = (1.0 - f); + float2 OneMinusF2 = OneMinusF * OneMinusF; + float2 OneMinusF3 = OneMinusF2 * OneMinusF; + float2 w0 = OneMinusF3; + float2 w1 = 4.0 + 3.0 * f * f * f - 6.0 * f * f; + float2 w2 = 4.0 + 3.0 * OneMinusF3 - 6.0 * OneMinusF2; + float2 w3 = f * f * f; + + float2 w12 = w1 + w2; + + // Compute uv coordinates for sampling the texture + float2 tc0 = (tc1 - 1.0f) * rcpTextureSize; + float2 tc3 = (tc1 + 2.0f) * rcpTextureSize; + float2 tc12 = (tc1 + w2 / w12) * rcpTextureSize; + + // Compute sample weights + float sw0 = w12.x * w12.y; // middle + float sw1 = w12.x * w0.y; // top + float sw2 = w0.x * w12.y; // left + float sw3 = w12.x * w3.y; // bottom + float sw4 = w3.x * w12.y; // right + + // total weight of samples to normalize result. + float totalWeight = sw0 + sw1 + sw2 + sw3 + sw4; + + float result = 0.0f; + result += texture.SampleLevel(textureSampler, float2(tc12.x, tc12.y), 0.0).r * sw0; + result += texture.SampleLevel(textureSampler, float2(tc12.x, tc0.y), 0.0).r * sw1; + result += texture.SampleLevel(textureSampler, float2( tc0.x, tc12.y), 0.0).r * sw2; + result += texture.SampleLevel(textureSampler, float2(tc12.x, tc3.y), 0.0).r * sw3; + result += texture.SampleLevel(textureSampler, float2( tc3.x, tc12.y), 0.0).r * sw4; + + return result / totalWeight; +} + float4x4 GetObject_WorldMatrix() { float4x4 modelToWorld = float4x4( @@ -58,10 +213,23 @@ float4x4 GetObject_WorldMatrix() float GetHeight(float2 origUv) { float2 uv = clamp(origUv + (ObjectSrg::m_terrainData.m_uvStep * 0.5f), 0.0f, 1.0f); - return ObjectSrg::m_terrainData.m_heightScale * (ObjectSrg::m_heightmapImage.SampleLevel(ObjectSrg::PointSampler, uv, 0).r - 0.5f); + float height = 0.0f; + + if (o_useTerrainSmoothing) + { + float2 textureSize; + TerrainMaterialSrg::m_heightmapImage.GetDimensions(textureSize.x, textureSize.y); + height = SampleBSpline5Tap(TerrainMaterialSrg::m_heightmapImage, TerrainMaterialSrg::HeightmapSampler, uv, textureSize, rcp(textureSize)); + } + else + { + height = TerrainMaterialSrg::m_heightmapImage.SampleLevel(TerrainMaterialSrg::HeightmapSampler, uv, 0).r; + } + + return ObjectSrg::m_terrainData.m_heightScale * (height - 0.5f); } -float4 GetTerrainProjectedPosition(ObjectSrg::TerrainData terrainData, float2 vertexPosition, float2 uv) +float3 GetTerrainWorldPosition(ObjectSrg::TerrainData terrainData, float2 vertexPosition, float2 uv) { // Remove all vertices outside our bounds by turning them into NaN positions. if (any(uv > 1.0) || any (uv < 0.0)) @@ -71,6 +239,10 @@ float4 GetTerrainProjectedPosition(ObjectSrg::TerrainData terrainData, float2 ve // Loop up the height and calculate our final position. float height = GetHeight(uv); - float4 worldPosition = mul(GetObject_WorldMatrix(), float4(vertexPosition, height, 1.0f)); - return mul(ViewSrg::m_viewProjectionMatrix, worldPosition); + return mul(GetObject_WorldMatrix(), float4(vertexPosition, height, 1.0f)).xyz; +} + +float4 GetTerrainProjectedPosition(ObjectSrg::TerrainData terrainData, float2 vertexPosition, float2 uv) +{ + return mul(ViewSrg::m_viewProjectionMatrix, float4(GetTerrainWorldPosition(terrainData, vertexPosition, uv), 1.0)); } diff --git a/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.azsl b/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.azsl new file mode 100644 index 0000000000..df2a801969 --- /dev/null +++ b/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.azsl @@ -0,0 +1,165 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct VSOutput +{ + float4 m_position : SV_Position; + float3 m_normal: NORMAL; + float3 m_tangent : TANGENT; + float3 m_bitangent : BITANGENT; + float3 m_worldPosition : UV0; + float3 m_shadowCoords[ViewSrg::MaxCascadeCount] : UV2; + float2 m_uv : UV1; +}; + +VSOutput TerrainPBR_MainPassVS(VertexInput IN) +{ + VSOutput OUT; + + ObjectSrg::TerrainData terrainData = ObjectSrg::m_terrainData; + + float2 uv = IN.m_uv; + float2 origUv = lerp(terrainData.m_uvMin, terrainData.m_uvMax, uv); + float3 worldPosition = GetTerrainWorldPosition(terrainData, IN.m_position, origUv); + OUT.m_position = mul(ViewSrg::m_viewProjectionMatrix, float4(worldPosition, 1.0)); + OUT.m_worldPosition = worldPosition; + + // Calculate normal + float up = GetHeight(origUv + terrainData.m_uvStep * float2( 0.0f, -1.0f)); + float right = GetHeight(origUv + terrainData.m_uvStep * float2( 1.0f, 0.0f)); + float down = GetHeight(origUv + terrainData.m_uvStep * float2( 0.0f, 1.0f)); + float left = GetHeight(origUv + terrainData.m_uvStep * float2(-1.0f, 0.0f)); + + OUT.m_bitangent = normalize(float3(0.0, terrainData.m_sampleSpacing * 2.0f, down - up)); + OUT.m_tangent = normalize(float3(terrainData.m_sampleSpacing * 2.0f, 0.0, right - left)); + OUT.m_normal = cross(OUT.m_tangent, OUT.m_bitangent); + OUT.m_uv = uv; + + // directional light shadow + const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight; + if (o_enableShadows && shadowIndex < SceneSrg::m_directionalLightCount) + { + DirectionalLightShadow::GetShadowCoords( + shadowIndex, + worldPosition, + OUT.m_shadowCoords); + } + + return OUT; +} + +ForwardPassOutput TerrainPBR_MainPassPS(VSOutput IN) +{ + // ------- Surface ------- + + Surface surface; + + // Position + surface.position = IN.m_worldPosition.xyz; + float viewDistance = length(ViewSrg::m_worldPosition - surface.position); + float detailFactor = saturate((viewDistance - TerrainMaterialSrg::m_detailFadeDistance) / max(TerrainMaterialSrg::m_detailFadeLength, EPSILON)); + + ObjectSrg::TerrainData terrainData = ObjectSrg::m_terrainData; + float2 origUv = lerp(terrainData.m_uvMin, terrainData.m_uvMax, IN.m_uv); + origUv.y = 1.0 - origUv.y; + float2 detailUv = IN.m_uv * TerrainMaterialSrg::m_detailTextureMultiplier; + + // ------- Normal ------- + float3 macroNormal = IN.m_normal; + if (o_macroNormal_useTexture) + { + macroNormal = GetNormalInputTS(TerrainMaterialSrg::m_macroNormalMap, TerrainMaterialSrg::m_sampler, + origUv, TerrainMaterialSrg::m_flipMacroNormalX, TerrainMaterialSrg::m_flipMacroNormalY, CreateIdentity3x3(), true, 1.0); + } + + float3 detailNormal = GetNormalInputTS(TerrainMaterialSrg::m_normalMap, TerrainMaterialSrg::m_sampler, + detailUv, TerrainMaterialSrg::m_flipNormalX, TerrainMaterialSrg::m_flipNormalY, CreateIdentity3x3(), o_normal_useTexture, TerrainMaterialSrg::m_normalFactor); + + detailNormal = ReorientTangentSpaceNormal(macroNormal, detailNormal); + surface.normal = lerp(detailNormal, macroNormal, detailFactor); + surface.normal = normalize(surface.normal); + + // ------- Macro Color ------- + float3 macroColor = GetBaseColorInput(TerrainMaterialSrg::m_macroColorMap, TerrainMaterialSrg::m_sampler, origUv, TerrainMaterialSrg::m_baseColor.rgb, o_baseColor_useTexture); + + // ------- Base Color ------- + float3 detailColor = GetBaseColorInput(TerrainMaterialSrg::m_baseColorMap, TerrainMaterialSrg::m_sampler, detailUv, TerrainMaterialSrg::m_baseColor.rgb, o_baseColor_useTexture); + float3 blendedColor = BlendBaseColor(lerp(detailColor, TerrainMaterialSrg::m_baseColor.rgb, detailFactor), macroColor, TerrainMaterialSrg::m_baseColorFactor, o_baseColorTextureBlendMode, o_baseColor_useTexture); + + // ------- Specular ------- + float specularF0Factor = GetSpecularInput(TerrainMaterialSrg::m_specularF0Map, TerrainMaterialSrg::m_sampler, detailUv, TerrainMaterialSrg::m_specularF0Factor, o_specularF0_useTexture); + specularF0Factor = lerp(specularF0Factor, 0.5, detailFactor); + surface.SetAlbedoAndSpecularF0(blendedColor, specularF0Factor, 0.0); + + // ------- Roughness ------- + surface.roughnessLinear = GetRoughnessInput(TerrainMaterialSrg::m_roughnessMap, TerrainMaterialSrg::m_sampler, detailUv, TerrainMaterialSrg::m_roughnessFactor, 0.0, 1.0, o_roughness_useTexture); + surface.roughnessLinear = lerp(surface.roughnessLinear, 1.0, detailFactor); + surface.CalculateRoughnessA(); + + // Clear Coat, Transmission (Not used for terrain) + surface.clearCoat.InitializeToZero(); + surface.transmission.InitializeToZero(); + + // ------- LightingData ------- + + LightingData lightingData; + + // Light iterator + lightingData.tileIterator.Init(IN.m_position, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); + lightingData.Init(surface.position, surface.normal, surface.roughnessLinear); + + // Shadow, Occlusion + lightingData.shadowCoords = IN.m_shadowCoords; + + // Diffuse and Specular response + lightingData.specularResponse = FresnelSchlickWithRoughness(lightingData.NdotV, surface.specularF0, surface.roughnessLinear); + lightingData.diffuseResponse = 1.0f - lightingData.specularResponse; + + const float alpha = 1.0f; + + // ------- Lighting Calculation ------- + + // Apply Decals + ApplyDecals(lightingData.tileIterator, surface); + + // Apply Direct Lighting + ApplyDirectLighting(surface, lightingData); + + // Apply Image Based Lighting (IBL) + ApplyIBL(surface, lightingData); + + // Finalize Lighting + lightingData.FinalizeLighting(surface.transmission.tint); + + PbrLightingOutput lightingOutput = GetPbrLightingOutput(surface, lightingData, alpha); + + // ------- Output ------- + + ForwardPassOutput OUT; + + OUT.m_diffuseColor = lightingOutput.m_diffuseColor; + OUT.m_diffuseColor.w = -1; // Subsurface scattering is disabled + OUT.m_specularColor = lightingOutput.m_specularColor; + OUT.m_specularF0 = lightingOutput.m_specularF0; + OUT.m_albedo = lightingOutput.m_albedo; + OUT.m_normal = lightingOutput.m_normal; + + return OUT; +} diff --git a/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.shader b/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.shader new file mode 100644 index 0000000000..0e6f0beb1d --- /dev/null +++ b/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.shader @@ -0,0 +1,42 @@ +{ + "Source" : "./TerrainPBR_ForwardPass.azsl", + + "DepthStencilState" : + { + "Depth" : + { + "Enable" : true, + "CompareFunc" : "GreaterEqual" + }, + "Stencil" : + { + "Enable" : true, + "ReadMask" : "0x00", + "WriteMask" : "0xFF", + "FrontFace" : + { + "Func" : "Always", + "DepthFailOp" : "Keep", + "FailOp" : "Keep", + "PassOp" : "Replace" + } + } + }, + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "TerrainPBR_MainPassVS", + "type": "Vertex" + }, + { + "name": "TerrainPBR_MainPassPS", + "type": "Fragment" + } + ] + }, + + "DrawList" : "forward" +} diff --git a/Gems/Terrain/Assets/Shaders/Terrain/Terrain_DepthPass.azsl b/Gems/Terrain/Assets/Shaders/Terrain/Terrain_DepthPass.azsl index 20c56323ac..fd855a1bcd 100644 --- a/Gems/Terrain/Assets/Shaders/Terrain/Terrain_DepthPass.azsl +++ b/Gems/Terrain/Assets/Shaders/Terrain/Terrain_DepthPass.azsl @@ -8,6 +8,7 @@ #include #include #include "TerrainCommon.azsli" +#include struct VSDepthOutput { diff --git a/Gems/Terrain/Assets/Shaders/Terrain/Terrain_Shadowmap.shader b/Gems/Terrain/Assets/Shaders/Terrain/Terrain_Shadowmap.shader new file mode 100644 index 0000000000..290c83bddf --- /dev/null +++ b/Gems/Terrain/Assets/Shaders/Terrain/Terrain_Shadowmap.shader @@ -0,0 +1,26 @@ +{ + "Source" : "Terrain_DepthPass", + + "DepthStencilState" : { + "Depth" : { "Enable" : true, "CompareFunc" : "LessEqual" } + }, + + "DrawList" : "shadow", + + "RasterState" : + { + "depthBias" : "10", + "depthBiasSlopeScale" : "4" + }, + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "MainVS", + "type": "Vertex" + } + ] + } +} diff --git a/Gems/Terrain/Code/CMakeLists.txt b/Gems/Terrain/Code/CMakeLists.txt index fc07294dab..17ac3d8474 100644 --- a/Gems/Terrain/Code/CMakeLists.txt +++ b/Gems/Terrain/Code/CMakeLists.txt @@ -21,6 +21,7 @@ ly_add_target( AZ::AzFramework Gem::Atom_RPI.Public Gem::Atom_Utils.Static + Gem::Atom_Feature_Common Gem::GradientSignal Gem::SurfaceData Gem::LmbrCentral diff --git a/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h new file mode 100644 index 0000000000..4c04cf1e42 --- /dev/null +++ b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +namespace Terrain +{ + + //! This bus provides retrieval of information from Terrain Surfaces. + class TerrainAreaSurfaceRequests + : public AZ::ComponentBus + { + public: + //////////////////////////////////////////////////////////////////////// + // EBusTraits + using MutexType = AZStd::recursive_mutex; + //////////////////////////////////////////////////////////////////////// + + virtual ~TerrainAreaSurfaceRequests() = default; + + //! Get the surfaces and weights from a gradient at a given position sorted into descending order of weight. + virtual void GetSurfaceWeights(const AZ::Vector3& inPosition, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const = 0; + }; + + using TerrainAreaSurfaceRequestBus = AZ::EBus; +} // namespace Terrain diff --git a/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainGradientSurfaceListBus.h b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainGradientSurfaceListBus.h new file mode 100644 index 0000000000..5734a6e023 --- /dev/null +++ b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainGradientSurfaceListBus.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +namespace Terrain +{ + + //! This bus provides retrieval of information from Terrain Surfaces. + class TerrainAreaSurfaceRequests + : public AZ::ComponentBus + { + public: + //////////////////////////////////////////////////////////////////////// + // EBusTraits + using MutexType = AZStd::recursive_mutex; + //////////////////////////////////////////////////////////////////////// + + virtual ~TerrainAreaSurfaceRequests() = default; + + virtual void GetSurfaceWeights(const AZ::Vector3& inPosition, SurfaceData::SurfaceTagWeightMap& surfaceWeights) const = 0; + }; + + using TerrainAreaSurfaceRequestBus = AZ::EBus; +} // namespace Terrain diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp index 04c94b24d6..0346ff7281 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp @@ -156,9 +156,19 @@ namespace Terrain point.m_entityId = GetEntityId(); point.m_position = AZ::Vector3(inPosition.GetX(), inPosition.GetY(), terrainHeight); point.m_normal = terrain->GetNormal(inPosition); + + // Always add a "terrain" or "terrainHole" tag. const AZ::Crc32 terrainTag = isHole ? SurfaceData::Constants::s_terrainHoleTagCrc : SurfaceData::Constants::s_terrainTagCrc; SurfaceData::AddMaxValueForMasks(point.m_masks, terrainTag, 1.0f); + + // Add all of the surface tags that the terrain has at this point. + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet surfaceWeights; + terrain->GetSurfaceWeights(point.m_position, surfaceWeights); + for (auto& tag : surfaceWeights) + { + SurfaceData::AddMaxValueForMasks(point.m_masks, tag.m_surfaceType, tag.m_weight); + } surfacePointList.push_back(point); } // Only one handler should exist. diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp new file mode 100644 index 0000000000..958e175cf3 --- /dev/null +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include + +#include +#include + +namespace Terrain +{ + void TerrainSurfaceGradientMapping::Reflect(AZ::ReflectContext* context) + { + if (auto serialize = azrtti_cast(context)) + { + serialize->Class() + ->Version(1) + ->Field("Gradient Entity", &TerrainSurfaceGradientMapping::m_gradientEntityId) + ->Field("Surface Tag", &TerrainSurfaceGradientMapping::m_surfaceTag) + ; + + if (auto edit = serialize->GetEditContext()) + { + edit->Class("Terrain Surface Gradient Mapping", "Mapping between a gradient and a surface.") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::Show) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientMapping::m_gradientEntityId, + "Gradient Entity", "ID of Entity providing a gradient.") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::AttributesAndValues) + ->UIElement("GradientPreviewer", "Previewer") + ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "") + ->Attribute(AZ_CRC_CE("GradientEntity"), &TerrainSurfaceGradientMapping::m_gradientEntityId) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientMapping::m_surfaceTag, "Surface Tag", + "Surface type to map to this gradient.") + ; + } + } + } + + void TerrainSurfaceGradientListConfig::Reflect(AZ::ReflectContext* context) + { + TerrainSurfaceGradientMapping::Reflect(context); + + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(1) + ->Field("Mappings", &TerrainSurfaceGradientListConfig::m_gradientSurfaceMappings) + ; + + AZ::EditContext* edit = serialize->GetEditContext(); + if (edit) + { + edit->Class( + "Terrain Surface Gradient List Component", "Provide mapping between gradients and surfaces.") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::Show) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientListConfig::m_gradientSurfaceMappings, + "Gradient to Surface Mappings", "Maps Gradient Entities to Surfaces.") + ; + } + } + } + + void TerrainSurfaceGradientListComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainSurfaceProviderService")); + } + + void TerrainSurfaceGradientListComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainSurfaceProviderService")); + } + + void TerrainSurfaceGradientListComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC("TerrainAreaService")); + } + + void TerrainSurfaceGradientListComponent::Reflect(AZ::ReflectContext* context) + { + TerrainSurfaceGradientListConfig::Reflect(context); + + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(0)->Field("Configuration", &TerrainSurfaceGradientListComponent::m_configuration) + ; + } + } + + TerrainSurfaceGradientListComponent::TerrainSurfaceGradientListComponent(const TerrainSurfaceGradientListConfig& configuration) + : m_configuration(configuration) + { + } + + void TerrainSurfaceGradientListComponent::Activate() + { + LmbrCentral::DependencyNotificationBus::Handler::BusConnect(GetEntityId()); + Terrain::TerrainAreaSurfaceRequestBus::Handler::BusConnect(GetEntityId()); + + // Make sure we get update notifications whenever this entity or any dependent gradient entity changes in any way. + // We'll use that to notify the terrain system that the surface information needs to be refreshed. + m_dependencyMonitor.Reset(); + m_dependencyMonitor.ConnectOwner(GetEntityId()); + m_dependencyMonitor.ConnectDependency(GetEntityId()); + + for (auto& surfaceMapping : m_configuration.m_gradientSurfaceMappings) + { + if (surfaceMapping.m_gradientEntityId != GetEntityId()) + { + m_dependencyMonitor.ConnectDependency(surfaceMapping.m_gradientEntityId); + } + } + + // Notify that the area has changed. + OnCompositionChanged(); + } + + void TerrainSurfaceGradientListComponent::Deactivate() + { + m_dependencyMonitor.Reset(); + + Terrain::TerrainAreaSurfaceRequestBus::Handler::BusDisconnect(); + LmbrCentral::DependencyNotificationBus::Handler::BusDisconnect(); + + // Since this surface data will no longer exist, notify the terrain system to refresh the area. + OnCompositionChanged(); + } + + bool TerrainSurfaceGradientListComponent::ReadInConfig(const AZ::ComponentConfig* baseConfig) + { + if (auto config = azrtti_cast(baseConfig)) + { + m_configuration = *config; + return true; + } + return false; + } + + bool TerrainSurfaceGradientListComponent::WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const + { + if (auto config = azrtti_cast(outBaseConfig)) + { + *config = m_configuration; + return true; + } + return false; + } + + void TerrainSurfaceGradientListComponent::GetSurfaceWeights( + const AZ::Vector3& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const + { + outSurfaceWeights.clear(); + + const GradientSignal::GradientSampleParams params(AZ::Vector3(inPosition.GetX(), inPosition.GetY(), 0.0f)); + + for (const auto& mapping : m_configuration.m_gradientSurfaceMappings) + { + float weight = 0.0f; + GradientSignal::GradientRequestBus::EventResult(weight, + mapping.m_gradientEntityId, &GradientSignal::GradientRequestBus::Events::GetValue, params); + + AzFramework::SurfaceData::SurfaceTagWeight tagWeight; + tagWeight.m_surfaceType = mapping.m_surfaceTag; + tagWeight.m_weight = weight; + outSurfaceWeights.emplace(tagWeight); + } + } + + void TerrainSurfaceGradientListComponent::OnCompositionChanged() + { + TerrainSystemServiceRequestBus::Broadcast(&TerrainSystemServiceRequestBus::Events::RefreshArea, GetEntityId()); + } + +} // namespace Terrain diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h new file mode 100644 index 0000000000..bb30029f35 --- /dev/null +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include + +namespace LmbrCentral +{ + template + class EditorWrappedComponentBase; +} + +namespace Terrain +{ + class TerrainSurfaceGradientMapping final + { + public: + AZ_CLASS_ALLOCATOR(TerrainSurfaceGradientMapping, AZ::SystemAllocator, 0); + AZ_RTTI(TerrainSurfaceGradientMapping, "{473AD2CE-F22A-45A9-803F-2192F3D9F2BF}"); + static void Reflect(AZ::ReflectContext* context); + + AZ::EntityId m_gradientEntityId; + SurfaceData::SurfaceTag m_surfaceTag; + }; + + class TerrainSurfaceGradientListConfig : public AZ::ComponentConfig + { + public: + AZ_CLASS_ALLOCATOR(TerrainSurfaceGradientListConfig, AZ::SystemAllocator, 0); + AZ_RTTI(TerrainSurfaceGradientListConfig, "{E9B083AD-8D30-47DA-8F8E-AA089BFA35E9}", AZ::ComponentConfig); + static void Reflect(AZ::ReflectContext* context); + + AZStd::vector m_gradientSurfaceMappings; + }; + + class TerrainSurfaceGradientListComponent + : public AZ::Component + , public Terrain::TerrainAreaSurfaceRequestBus::Handler + , private LmbrCentral::DependencyNotificationBus::Handler + { + public: + template + friend class LmbrCentral::EditorWrappedComponentBase; + AZ_COMPONENT(TerrainSurfaceGradientListComponent, "{51F97C95-6B8A-4B06-B394-BD25BFCC8B7E}"); + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void Reflect(AZ::ReflectContext* context); + + TerrainSurfaceGradientListComponent(const TerrainSurfaceGradientListConfig& configuration); + TerrainSurfaceGradientListComponent() = default; + ~TerrainSurfaceGradientListComponent() = default; + + ////////////////////////////////////////////////////////////////////////// + // AZ::Component interface implementation + void Activate() override; + void Deactivate() override; + bool ReadInConfig(const AZ::ComponentConfig* baseConfig) override; + bool WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const override; + + // TerrainAreaSurfaceRequestBus + void GetSurfaceWeights(const AZ::Vector3& inPosition, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const override; + + private: + ////////////////////////////////////////////////////////////////////////// + // LmbrCentral::DependencyNotificationBus + void OnCompositionChanged() override; + + TerrainSurfaceGradientListConfig m_configuration; + LmbrCentral::DependencyMonitor m_dependencyMonitor; + }; +} // namespace Terrain diff --git a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp index 3bf34fa019..9cd9ce9fb2 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp +++ b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp @@ -13,8 +13,6 @@ #include #include -#include - #include #include #include @@ -28,16 +26,27 @@ namespace Terrain AZ::SerializeContext* serialize = azrtti_cast(context); if (serialize) { - serialize->Class()->Version(1); + serialize->Class() + ->Version(1) + ->Field("WorldSize", &TerrainWorldRendererConfig::m_worldSize) + ; - AZ::EditContext* edit = serialize->GetEditContext(); - if (edit) + AZ::EditContext* editContext = serialize->GetEditContext(); + if (editContext) { - edit->Class("Terrain World Renderer Component", "Enables terrain rendering") + editContext->Class("Terrain World Renderer Component", "Enables terrain rendering") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true); + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + ->DataElement(AZ::Edit::UIHandlers::ComboBox, &TerrainWorldRendererConfig::m_worldSize, "Rendered world size", "The maximum amount of terrain that's rendered") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_512Meters, "512 Meters") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_1024Meters, "1 Kilometer") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_2048Meters, "2 Kilometers") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_4096Meters, "4 Kilometers") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_8192Meters, "8 Kilometers") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_16384Meters, "16 Kilometers") + ; } } } @@ -72,6 +81,28 @@ namespace Terrain TerrainWorldRendererComponent::TerrainWorldRendererComponent(const TerrainWorldRendererConfig& configuration) : m_configuration(configuration) { + switch (configuration.m_worldSize) + { + case TerrainWorldRendererConfig::WorldSize::_512Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(512.0f, 512.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_1024Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(1024.0f, 1024.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_2048Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(2048.0f, 2048.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_4096Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(4096.0f, 4096.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_8192Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(8192.0f, 8192.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_16384Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(16384.0f, 16384.0f)); + break; + + } } TerrainWorldRendererComponent::~TerrainWorldRendererComponent() @@ -102,17 +133,13 @@ namespace Terrain { m_terrainFeatureProcessor = scene->EnableFeatureProcessor(); } - - AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusConnect(); m_terrainRendererActive = true; } void TerrainWorldRendererComponent::Deactivate() { // On component deactivation, unregister the feature processor and remove it from the default scene. - m_terrainRendererActive = false; - AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusDisconnect(); if (AZ::RPI::Scene* scene = GetScene(); scene) { @@ -145,69 +172,4 @@ namespace Terrain } return false; } - - void TerrainWorldRendererComponent::OnTerrainDataDestroyBegin() - { - // If the terrain is being destroyed, remove all existing terrain data from the feature processor. - - if (m_terrainFeatureProcessor) - { - m_terrainFeatureProcessor->RemoveTerrainData(); - } - } - - void TerrainWorldRendererComponent::OnTerrainDataChanged([[maybe_unused]] const AZ::Aabb& dirtyRegion, [[maybe_unused]] TerrainDataChangedMask dataChangedMask) - { - // Block other threads from accessing the surface data bus while we are in GetValue (which may call into the SurfaceData bus). - // We lock our surface data mutex *before* checking / setting "isRequestInProgress" so that we prevent race conditions - // that create false detection of cyclic dependencies when multiple requests occur on different threads simultaneously. - // (One case where this was previously able to occur was in rapid updating of the Preview widget on the - // GradientSurfaceDataComponent in the Editor when moving the threshold sliders back and forth rapidly) - auto& surfaceDataContext = SurfaceData::SurfaceDataSystemRequestBus::GetOrCreateContext(false); - typename SurfaceData::SurfaceDataSystemRequestBus::Context::DispatchLockGuard scopeLock(surfaceDataContext.m_contextMutex); - - AZ::Vector2 queryResolution = AZ::Vector2(1.0f); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( - queryResolution, &AzFramework::Terrain::TerrainDataRequests::GetTerrainHeightQueryResolution); - - AZ::Aabb worldBounds = AZ::Aabb::CreateNull(); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( - worldBounds, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); - - - AZ::Transform transform = AZ::Transform::CreateTranslation(worldBounds.GetCenter()); - - uint32_t width = aznumeric_cast( - (float)worldBounds.GetXExtent() / queryResolution.GetX()); - uint32_t height = aznumeric_cast( - (float)worldBounds.GetYExtent() / queryResolution.GetY()); - AZStd::vector pixels; - pixels.resize_no_construct(width * height); - const uint32_t pixelDataSize = width * height * sizeof(float); - memset(pixels.data(), 0, pixelDataSize); - - for (uint32_t y = 0; y < height; y++) - { - for (uint32_t x = 0; x < width; x++) - { - bool terrainExists = true; - float terrainHeight = 0.0f; - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( - terrainHeight, &AzFramework::Terrain::TerrainDataRequests::GetHeightFromFloats, - (x * queryResolution.GetX()) + worldBounds.GetMin().GetX(), - (y * queryResolution.GetY()) + worldBounds.GetMin().GetY(), - AzFramework::Terrain::TerrainDataRequests::Sampler::EXACT, - &terrainExists); - - pixels[(y * width) + x] = - (terrainHeight - worldBounds.GetMin().GetZ()) / worldBounds.GetExtents().GetZ(); - } - } - - if (m_terrainFeatureProcessor) - { - m_terrainFeatureProcessor->UpdateTerrainData(transform, worldBounds, queryResolution.GetX(), width, height, pixels); - } - } - } diff --git a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h index a1e9498be8..354b2fde34 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h +++ b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h @@ -9,8 +9,6 @@ #pragma once #include -#include -#include namespace LmbrCentral { @@ -27,19 +25,33 @@ namespace Terrain { class TerrainFeatureProcessor; - class TerrainWorldRendererConfig + struct TerrainWorldRendererConfig final : public AZ::ComponentConfig { - public: AZ_CLASS_ALLOCATOR(TerrainWorldRendererConfig, AZ::SystemAllocator, 0); AZ_RTTI(TerrainWorldRendererConfig, "{08C5863C-092D-4A69-8226-4978E4F6E343}", AZ::ComponentConfig); static void Reflect(AZ::ReflectContext* context); + + enum class WorldSize : uint8_t + { + Unknown, + + _512Meters, + _1024Meters, + _2048Meters, + _4096Meters, + _8192Meters, + _16384Meters, + + WorldSizeCount, + }; + + WorldSize m_worldSize; }; class TerrainWorldRendererComponent : public AZ::Component - , public AzFramework::Terrain::TerrainDataNotificationBus::Handler { public: template @@ -62,8 +74,6 @@ namespace Terrain bool WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const override; protected: - void OnTerrainDataDestroyBegin() override; - void OnTerrainDataChanged(const AZ::Aabb& dirtyRegion, TerrainDataChangedMask dataChangedMask) override; AZ::RPI::Scene* GetScene() const; diff --git a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp new file mode 100644 index 0000000000..cf2c44225a --- /dev/null +++ b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace Terrain +{ + void EditorTerrainSurfaceGradientListComponent::Reflect(AZ::ReflectContext* context) + { + BaseClassType::ReflectSubClass(context, 1, + &LmbrCentral::EditorWrappedComponentBaseVersionConverter + ); + } +} diff --git a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h new file mode 100644 index 0000000000..e2c5f1b280 --- /dev/null +++ b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace Terrain +{ + class EditorTerrainSurfaceGradientListComponent + : public LmbrCentral::EditorWrappedComponentBase + { + public: + using BaseClassType = LmbrCentral::EditorWrappedComponentBase; + AZ_EDITOR_COMPONENT(EditorTerrainSurfaceGradientListComponent, "{49831E91-A11F-4EFF-A824-6D85C284B934}", BaseClassType); + static void Reflect(AZ::ReflectContext* context); + + static constexpr const char* const s_categoryName = "Terrain"; + static constexpr const char* const s_componentName = "Terrain Surface Gradient List"; + static constexpr const char* const s_componentDescription = "Provides a mapping between gradients and surface tags for use by the terrain system."; + static constexpr const char* const s_icon = "Editor/Icons/Components/TerrainLayerSpawner.svg"; + static constexpr const char* const s_viewportIcon = "Editor/Icons/Components/Viewport/TerrainLayerSpawner.svg"; + static constexpr const char* const s_helpUrl = ""; + }; +} diff --git a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp index 2d42585fa5..3dd8d1e911 100644 --- a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp +++ b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp @@ -29,10 +29,10 @@ namespace Terrain editContext->Class( "Terrain World Renderer", "") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Terrain") - ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/TerrainWorldRenderer.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/TerrainWorldRenderer.svg") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) + ->Attribute(AZ::Edit::Attributes::Category, "Terrain") + ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/TerrainWorldRenderer.svg") + ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/TerrainWorldRenderer.svg") + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) ; } } diff --git a/Gems/Terrain/Code/Source/EditorTerrainModule.cpp b/Gems/Terrain/Code/Source/EditorTerrainModule.cpp index 5305087694..94c6f5c3c6 100644 --- a/Gems/Terrain/Code/Source/EditorTerrainModule.cpp +++ b/Gems/Terrain/Code/Source/EditorTerrainModule.cpp @@ -9,10 +9,12 @@ #include #include #include +#include #include #include #include #include +#include namespace Terrain { @@ -23,6 +25,8 @@ namespace Terrain { Terrain::EditorTerrainHeightGradientListComponent::CreateDescriptor(), Terrain::EditorTerrainLayerSpawnerComponent::CreateDescriptor(), + Terrain::EditorTerrainMacroMaterialComponent::CreateDescriptor(), + Terrain::EditorTerrainSurfaceGradientListComponent::CreateDescriptor(), Terrain::EditorTerrainSystemComponent::CreateDescriptor(), Terrain::EditorTerrainWorldComponent::CreateDescriptor(), Terrain::EditorTerrainWorldDebuggerComponent::CreateDescriptor(), diff --git a/Gems/Terrain/Code/Source/TerrainModule.cpp b/Gems/Terrain/Code/Source/TerrainModule.cpp index 24b87b4ab3..878c6b44c8 100644 --- a/Gems/Terrain/Code/Source/TerrainModule.cpp +++ b/Gems/Terrain/Code/Source/TerrainModule.cpp @@ -16,7 +16,9 @@ #include #include #include +#include #include +#include namespace Terrain { @@ -30,6 +32,8 @@ namespace Terrain TerrainWorldRendererComponent::CreateDescriptor(), TerrainHeightGradientListComponent::CreateDescriptor(), TerrainLayerSpawnerComponent::CreateDescriptor(), + TerrainMacroMaterialComponent::CreateDescriptor(), + TerrainSurfaceGradientListComponent::CreateDescriptor(), TerrainSurfaceDataSystemComponent::CreateDescriptor(), }); } diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp new file mode 100644 index 0000000000..55653c64fa --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp @@ -0,0 +1,287 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace Terrain +{ + AZ::Data::AssetId TerrainMacroMaterialConfig::s_macroMaterialTypeAssetId{}; + + void TerrainMacroMaterialConfig::Reflect(AZ::ReflectContext* context) + { + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(1) + ->Field("MacroMaterial", &TerrainMacroMaterialConfig::m_materialAsset) + ; + + // The edit context for this appears in EditorTerrainMacroMaterialComponent.cpp. + } + } + + AZ::Data::AssetId TerrainMacroMaterialConfig::GetTerrainMacroMaterialTypeAssetId() + { + // Get the Asset ID for the TerrainMacroMaterial material type and store it in a class static so that we don't have to look it + // up again. + if (!s_macroMaterialTypeAssetId.IsValid()) + { + AZ::Data::AssetCatalogRequestBus::BroadcastResult( + s_macroMaterialTypeAssetId, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, TerrainMacroMaterialTypeAsset, + azrtti_typeid(), false); + AZ_Assert(s_macroMaterialTypeAssetId.IsValid(), "The asset '%s' couldn't be found.", TerrainMacroMaterialTypeAsset); + } + + return s_macroMaterialTypeAssetId; + } + + bool TerrainMacroMaterialConfig::IsMaterialTypeCorrect(const AZ::Data::AssetId& assetId) + { + // We'll verify that whatever material we try to load has this material type as a dependency, as a way to implicitly detect + // that we're only trying to use terrain macro materials even before we load the asset. + auto macroMaterialTypeAssetId = GetTerrainMacroMaterialTypeAssetId(); + + // Get the dependencies for the requested asset. + AZ::Outcome, AZStd::string> result; + AZ::Data::AssetCatalogRequestBus::BroadcastResult( + result, &AZ::Data::AssetCatalogRequestBus::Events::GetDirectProductDependencies, assetId); + + // If any of the dependencies match the TerrainMacroMaterial materialtype asset, then this should be the correct type of material. + if (result) + { + for (auto& dependency : result.GetValue()) + { + if (dependency.m_assetId == macroMaterialTypeAssetId) + { + return true; + } + } + } + + // Didn't have the expected dependency, so it must not be the right material type. + return false; + } + + AZ::Outcome TerrainMacroMaterialConfig::ValidateMaterialAsset(void* newValue, const AZ::Uuid& valueType) + { + if (azrtti_typeid>() != valueType) + { + AZ_Assert(false, "Unexpected value type"); + return AZ::Failure(AZStd::string("Unexpectedly received something other than a material asset for the MacroMaterial!")); + } + + auto newMaterialAsset = *static_cast*>(newValue); + + if (!IsMaterialTypeCorrect(newMaterialAsset.GetId())) + { + return AZ::Failure(AZStd::string::format( + "The selected MacroMaterial ('%s') needs to use the TerrainMacroMaterial material type.", + newMaterialAsset.GetHint().c_str())); + } + + return AZ::Success(); + } + + + void TerrainMacroMaterialComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainMacroMaterialProviderService")); + } + + void TerrainMacroMaterialComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainMacroMaterialProviderService")); + } + + void TerrainMacroMaterialComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("AxisAlignedBoxShapeService")); + } + + void TerrainMacroMaterialComponent::Reflect(AZ::ReflectContext* context) + { + TerrainMacroMaterialConfig::Reflect(context); + + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(0) + ->Field("Configuration", &TerrainMacroMaterialComponent::m_configuration) + ; + } + } + + TerrainMacroMaterialComponent::TerrainMacroMaterialComponent(const TerrainMacroMaterialConfig& configuration) + : m_configuration(configuration) + { + } + + void TerrainMacroMaterialComponent::Activate() + { + // Clear out our shape bounds and make sure the material is queued to load. + m_cachedShapeBounds = AZ::Aabb::CreateNull(); + m_configuration.m_materialAsset.QueueLoad(); + + // Don't mark our material as active until it's finished loading and is valid. + m_macroMaterialActive = false; + + // Listen for the material asset to complete loading. + AZ::Data::AssetBus::Handler::BusConnect(m_configuration.m_materialAsset.GetId()); + } + + void TerrainMacroMaterialComponent::Deactivate() + { + TerrainMacroMaterialRequestBus::Handler::BusDisconnect(); + + AZ::Data::AssetBus::Handler::BusDisconnect(); + m_configuration.m_materialAsset.Release(); + + m_macroMaterialInstance.reset(); + + // Send out any notifications as appropriate based on the macro material destruction. + HandleMaterialStateChange(); + } + + bool TerrainMacroMaterialComponent::ReadInConfig(const AZ::ComponentConfig* baseConfig) + { + if (auto config = azrtti_cast(baseConfig)) + { + m_configuration = *config; + return true; + } + return false; + } + + bool TerrainMacroMaterialComponent::WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const + { + if (auto config = azrtti_cast(outBaseConfig)) + { + *config = m_configuration; + return true; + } + return false; + } + + void TerrainMacroMaterialComponent::OnShapeChanged([[maybe_unused]] ShapeComponentNotifications::ShapeChangeReasons reasons) + { + // This should only get called while the macro material is active. If it gets called while the macro material isn't active, + // we've got a bug where we haven't managed the bus connections properly. + AZ_Assert(m_macroMaterialActive, "The ShapeComponentNotificationBus connection is out of sync with the material load."); + + AZ::Aabb oldShapeBounds = m_cachedShapeBounds; + + LmbrCentral::ShapeComponentRequestsBus::EventResult( + m_cachedShapeBounds, GetEntityId(), &LmbrCentral::ShapeComponentRequestsBus::Events::GetEncompassingAabb); + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialRegionChanged, + GetEntityId(), oldShapeBounds, m_cachedShapeBounds); + } + + void TerrainMacroMaterialComponent::HandleMaterialStateChange() + { + // We only want our component to appear active during the time that the macro material is loaded and valid. The logic below + // will handle all transition possibilities to notify if we've become active, inactive, or just changed. We'll also only + // keep a valid up-to-date copy of the shape bounds while the material is valid, since we don't need it any other time. + + bool wasPreviouslyActive = m_macroMaterialActive; + bool isNowActive = (m_macroMaterialInstance != nullptr); + + // Set our state to active or inactive, based on whether or not the macro material instance is now valid. + m_macroMaterialActive = isNowActive; + + // Handle the different inactive/active transition possibilities. + + if (!wasPreviouslyActive && !isNowActive) + { + // Do nothing, we haven't yet successfully loaded a valid material. + } + else if (!wasPreviouslyActive && isNowActive) + { + // We've transitioned from inactive to active, so send out a message saying that we've been created and start tracking the + // overall shape bounds. + + // Get the current shape bounds. + LmbrCentral::ShapeComponentRequestsBus::EventResult( + m_cachedShapeBounds, GetEntityId(), &LmbrCentral::ShapeComponentRequestsBus::Events::GetEncompassingAabb); + + // Start listening for terrain macro material requests. + TerrainMacroMaterialRequestBus::Handler::BusConnect(GetEntityId()); + + // Start listening for shape changes. + LmbrCentral::ShapeComponentNotificationsBus::Handler::BusConnect(GetEntityId()); + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialCreated, GetEntityId(), m_macroMaterialInstance, + m_cachedShapeBounds); + } + else if (wasPreviouslyActive && !isNowActive) + { + // Stop listening to macro material requests or shape changes, and send out a notification that we no longer have a valid + // macro material. + + TerrainMacroMaterialRequestBus::Handler::BusDisconnect(); + LmbrCentral::ShapeComponentNotificationsBus::Handler::BusDisconnect(); + + m_cachedShapeBounds = AZ::Aabb::CreateNull(); + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialDestroyed, GetEntityId()); + } + else + { + // We were active both before and after, so just send out a material changed event. + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialChanged, GetEntityId(), m_macroMaterialInstance); + } + } + + void TerrainMacroMaterialComponent::OnAssetReady(AZ::Data::Asset asset) + { + m_configuration.m_materialAsset = asset; + + if (m_configuration.m_materialAsset.Get()->GetMaterialTypeAsset().GetId() == + TerrainMacroMaterialConfig::GetTerrainMacroMaterialTypeAssetId()) + { + m_macroMaterialInstance = AZ::RPI::Material::FindOrCreate(m_configuration.m_materialAsset); + } + else + { + AZ_Error("Terrain", false, "Material '%s' has the wrong material type.", m_configuration.m_materialAsset.GetHint().c_str()); + m_macroMaterialInstance.reset(); + } + + // Clear the material asset reference to make sure we don't prevent hot-reloading. + m_configuration.m_materialAsset.Release(); + + HandleMaterialStateChange(); + } + + void TerrainMacroMaterialComponent::OnAssetReloaded(AZ::Data::Asset asset) + { + OnAssetReady(asset); + } + + void TerrainMacroMaterialComponent::GetTerrainMacroMaterialData( + AZ::Data::Instance& macroMaterial, AZ::Aabb& macroMaterialRegion) + { + macroMaterial = m_macroMaterialInstance; + macroMaterialRegion = m_cachedShapeBounds; + } +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h new file mode 100644 index 0000000000..b60f6b2a94 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + + +namespace LmbrCentral +{ + template + class EditorWrappedComponentBase; +} + +namespace Terrain +{ + class TerrainMacroMaterialConfig + : public AZ::ComponentConfig + { + public: + AZ_CLASS_ALLOCATOR(TerrainMacroMaterialConfig, AZ::SystemAllocator, 0); + AZ_RTTI(TerrainMacroMaterialConfig, "{9DBAFFF0-FD20-4594-8884-E3266D8CCAC8}", AZ::ComponentConfig); + static void Reflect(AZ::ReflectContext* context); + + AZ::Data::Asset m_materialAsset = { AZ::Data::AssetLoadBehavior::QueueLoad }; + + static AZ::Data::AssetId GetTerrainMacroMaterialTypeAssetId(); + static bool IsMaterialTypeCorrect(const AZ::Data::AssetId&); + AZ::Outcome ValidateMaterialAsset(void* newValue, const AZ::Uuid& valueType); + + private: + static inline constexpr const char* TerrainMacroMaterialTypeAsset = "materials/terrain/terrainmacromaterial.azmaterialtype"; + static AZ::Data::AssetId s_macroMaterialTypeAssetId; + + }; + + class TerrainMacroMaterialComponent + : public AZ::Component + , public TerrainMacroMaterialRequestBus::Handler + , private LmbrCentral::ShapeComponentNotificationsBus::Handler + , private AZ::Data::AssetBus::Handler + { + public: + template + friend class LmbrCentral::EditorWrappedComponentBase; + AZ_COMPONENT(TerrainMacroMaterialComponent, "{F82379FB-E2AE-4F75-A6F4-1AE5F5DA42E8}"); + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void Reflect(AZ::ReflectContext* context); + + TerrainMacroMaterialComponent(const TerrainMacroMaterialConfig& configuration); + TerrainMacroMaterialComponent() = default; + ~TerrainMacroMaterialComponent() = default; + + ////////////////////////////////////////////////////////////////////////// + // AZ::Component interface implementation + void Activate() override; + void Deactivate() override; + bool ReadInConfig(const AZ::ComponentConfig* baseConfig) override; + bool WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const override; + + void GetTerrainMacroMaterialData(AZ::Data::Instance& macroMaterial, AZ::Aabb& macroMaterialRegion) override; + + private: + //////////////////////////////////////////////////////////////////////// + // ShapeComponentNotificationsBus + void OnShapeChanged(ShapeComponentNotifications::ShapeChangeReasons reasons) override; + + ////////////////////////////////////////////////////////////////////////// + // AZ::Data::AssetBus::Handler + void OnAssetReady(AZ::Data::Asset asset) override; + void OnAssetReloaded(AZ::Data::Asset asset) override; + + void HandleMaterialStateChange(); + + TerrainMacroMaterialConfig m_configuration; + AZ::Aabb m_cachedShapeBounds; + AZ::Data::Instance m_macroMaterialInstance; + bool m_macroMaterialActive{ false }; + }; +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp new file mode 100644 index 0000000000..07472d1b85 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace Terrain +{ + void EditorTerrainMacroMaterialComponent::Reflect(AZ::ReflectContext* context) + { + BaseClassType::ReflectSubClass( + context, 1, + &LmbrCentral::EditorWrappedComponentBaseVersionConverter + ); + + AZ::SerializeContext* serializeContext = azrtti_cast(context); + + if (serializeContext) + { + AZ::EditContext* editContext = serializeContext->GetEditContext(); + + // The edit context for TerrainMacroMaterialConfig is specified here to make it easier to add custom filtering to the + // asset picker for the material asset so that we can eventually only display materials that inherit from the proper + // material type. + if (editContext) + { + editContext + ->Class( + "Terrain Macro Material Component", "Provide a terrain macro material for a region of the world") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainMacroMaterialConfig::m_materialAsset, "Macro Material", + "Terrain macro material for use by any terrain inside the bounding box on this entity.") + // This is disabled until ChangeValidate can support the Asset type. :( + //->Attribute(AZ::Edit::Attributes::ChangeValidate, &TerrainMacroMaterialConfig::ValidateMaterialAsset) + ; + } + } + + } +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h new file mode 100644 index 0000000000..a2fddf5768 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace Terrain +{ + class EditorTerrainMacroMaterialComponent + : public LmbrCentral::EditorWrappedComponentBase + { + public: + using BaseClassType = LmbrCentral::EditorWrappedComponentBase; + AZ_EDITOR_COMPONENT(EditorTerrainMacroMaterialComponent, "{24D87D5F-6845-4F1F-81DC-05B4CEBA3EF4}", BaseClassType); + static void Reflect(AZ::ReflectContext* context); + + static constexpr const char* const s_categoryName = "Terrain"; + static constexpr const char* const s_componentName = "Terrain Macro Material"; + static constexpr const char* const s_componentDescription = "Provides a macro material for a region to the terrain renderer"; + static constexpr const char* const s_icon = "Editor/Icons/Components/TerrainLayerRenderer.svg"; + static constexpr const char* const s_viewportIcon = "Editor/Icons/Components/Viewport/TerrainLayerRenderer.svg"; + static constexpr const char* const s_helpUrl = ""; + }; +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp index 511b206b84..560fe1eb60 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp @@ -10,38 +10,50 @@ #include #include +#include #include #include +#include #include #include -#include +#include + #include #include #include -#include -#include +#include +#include #include -#include -#include -#include -#include -#include -#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include namespace Terrain { namespace { - const uint32_t DEFAULT_UploadBufferSize = 512 * 1024; // 512k [[maybe_unused]] const char* TerrainFPName = "TerrainFeatureProcessor"; + const char* TerrainHeightmapChars = "TerrainHeightmap"; + } + + namespace MaterialInputs + { + static const char* const HeightmapImage("settings.heightmapImage"); } namespace ShaderInputs { - static const char* const HeightmapImage("m_heightmapImage"); static const char* const ModelToWorld("m_modelToWorld"); static const char* const TerrainData("m_terrainData"); } @@ -60,434 +72,462 @@ namespace Terrain void TerrainFeatureProcessor::Activate() { m_areaData = {}; - - InitializeAtomStuff(); - EnableSceneNotification(); - } - - void TerrainFeatureProcessor::ConfigurePipelineState(ShaderState& shaderState, bool assertOnFail) - { - if (shaderState.m_shader == nullptr) - { - AZ_Assert(shaderState.m_shader || !assertOnFail, "Terrain shader failed to load correctly."); - return; - } - - bool success = GetParentScene()->ConfigurePipelineState(shaderState.m_shader->GetDrawListTag(), shaderState.m_pipelineStateDescriptor); - AZ_Assert(success || !assertOnFail, "Couldn't configure the pipeline state."); - if (success) - { - shaderState.m_pipelineState = shaderState.m_shader->AcquirePipelineState(shaderState.m_pipelineStateDescriptor); - AZ_Assert(shaderState.m_pipelineState, "Failed to acquire default pipeline state."); - } + m_dirtyRegion = AZ::Aabb::CreateNull(); + Initialize(); + AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusConnect(); } - void TerrainFeatureProcessor::InitializeAtomStuff() + void TerrainFeatureProcessor::Initialize() { - m_rhiSystem = AZ::RHI::RHISystemInterface::Get(); - - { - auto LoadShader = [this](const char* filePath, ShaderState& shaderState) + // Load the terrain material asynchronously + const AZStd::string materialFilePath = "Materials/Terrain/DefaultPbrTerrain.azmaterial"; + m_materialAssetLoader = AZStd::make_unique(); + *m_materialAssetLoader = AZ::RPI::AssetUtils::AsyncAssetLoader::Create(materialFilePath, 0u, + [&](AZ::Data::Asset assetData, bool success) -> void { - shaderState.m_shader = AZ::RPI::LoadShader(filePath); - if (!shaderState.m_shader) + const AZ::Data::Asset& materialAsset = static_cast>(assetData); + if (success) { - AZ_Error(TerrainFPName, false, "Failed to find or create a shader instance from shader asset '%s'", filePath); - return; - } - - // Create the data layout - shaderState.m_pipelineStateDescriptor = AZ::RHI::PipelineStateDescriptorForDraw{}; - { - AZ::RHI::InputStreamLayoutBuilder layoutBuilder; - - layoutBuilder.AddBuffer() - ->Channel("POSITION", AZ::RHI::Format::R32G32_FLOAT) - ->Channel("UV", AZ::RHI::Format::R32G32_FLOAT) - ; - shaderState.m_pipelineStateDescriptor.m_inputStreamLayout = layoutBuilder.End(); + m_materialInstance = AZ::RPI::Material::FindOrCreate(assetData); + AZ::RPI::MaterialReloadNotificationBus::Handler::BusConnect(materialAsset->GetId()); + if (!materialAsset->GetObjectSrgLayout()) + { + AZ_Error("TerrainFeatureProcessor", false, "No per-object ShaderResourceGroup found on terrain material."); + } } - - auto shaderVariant = shaderState.m_shader->GetVariant(AZ::RPI::ShaderAsset::RootShaderVariantStableId); - shaderVariant.ConfigurePipelineState(shaderState.m_pipelineStateDescriptor); - - // If this fails to run now, it's ok, we'll initialize it in OnRenderPipelineAdded later. - ConfigurePipelineState(shaderState, false); - }; - - LoadShader("Shaders/Terrain/Terrain.azshader", m_shaderStates[ShaderType::Forward]); - LoadShader("Shaders/Terrain/Terrain_DepthPass.azshader", m_shaderStates[ShaderType::Depth]); - - // Forward and depth shader use same srg layout. - AZ::RHI::Ptr perObjectSrgLayout = - m_shaderStates[ShaderType::Forward].m_shader->FindShaderResourceGroupLayout(AZ::Name{"ObjectSrg"}); - - if (!perObjectSrgLayout) - { - AZ_Error(TerrainFPName, false, "Failed to get shader resource group layout"); - return; } - else if (!perObjectSrgLayout->IsFinalized()) - { - AZ_Error(TerrainFPName, false, "Shader resource group layout is not loaded"); - return; - } - - m_heightmapImageIndex = perObjectSrgLayout->FindShaderInputImageIndex(AZ::Name(ShaderInputs::HeightmapImage)); - AZ_Error(TerrainFPName, m_heightmapImageIndex.IsValid(), "Failed to find shader input image %s.", ShaderInputs::HeightmapImage); - - m_modelToWorldIndex = perObjectSrgLayout->FindShaderInputConstantIndex(AZ::Name(ShaderInputs::ModelToWorld)); - AZ_Error(TerrainFPName, m_modelToWorldIndex.IsValid(), "Failed to find shader input constant %s.", ShaderInputs::ModelToWorld); - - m_terrainDataIndex = perObjectSrgLayout->FindShaderInputConstantIndex(AZ::Name(ShaderInputs::TerrainData)); - AZ_Error(TerrainFPName, m_terrainDataIndex.IsValid(), "Failed to find shader input constant %s.", ShaderInputs::TerrainData); - } - - AZ::RHI::BufferPoolDescriptor dmaPoolDescriptor; - dmaPoolDescriptor.m_heapMemoryLevel = AZ::RHI::HeapMemoryLevel::Host; - dmaPoolDescriptor.m_bindFlags = AZ::RHI::BufferBindFlags::InputAssembly; - - m_hostPool = AZ::RHI::Factory::Get().CreateBufferPool(); - m_hostPool->SetName(AZ::Name("TerrainVertexPool")); - AZ::RHI::ResultCode resultCode = m_hostPool->Init(*m_rhiSystem->GetDevice(), dmaPoolDescriptor); - - if (resultCode != AZ::RHI::ResultCode::Success) - { - AZ_Error(TerrainFPName, false, "Failed to create host buffer pool from RPI"); - return; - } - - InitializeTerrainPatch(); - - if (!InitializeRenderBuffers()) + ); + if (!InitializePatchModel()) { AZ_Error(TerrainFPName, false, "Failed to create Terrain render buffers!"); return; } + OnTerrainDataChanged(AZ::Aabb::CreateNull(), TerrainDataChangedMask::HeightData); } - void TerrainFeatureProcessor::OnRenderPipelineAdded([[maybe_unused]] AZ::RPI::RenderPipelinePtr pipeline) + void TerrainFeatureProcessor::Deactivate() { - for (ShaderState& shaderState: m_shaderStates) - { - ConfigurePipelineState(shaderState, true); - } + AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusDisconnect(); + AZ::RPI::MaterialReloadNotificationBus::Handler::BusDisconnect(); + + m_patchModel = {}; + m_areaData = {}; } - void TerrainFeatureProcessor::OnRenderPipelineRemoved([[maybe_unused]] AZ::RPI::RenderPipeline* pipeline) + void TerrainFeatureProcessor::Render(const AZ::RPI::FeatureProcessor::RenderPacket& packet) { + ProcessSurfaces(packet); } - void TerrainFeatureProcessor::OnRenderPipelinePassesChanged([[maybe_unused]] AZ::RPI::RenderPipeline* renderPipeline) + void TerrainFeatureProcessor::OnTerrainDataDestroyBegin() { + m_areaData = {}; } + + void TerrainFeatureProcessor::OnTerrainDataChanged(const AZ::Aabb& dirtyRegion, TerrainDataChangedMask dataChangedMask) + { + if (dataChangedMask != TerrainDataChangedMask::HeightData && dataChangedMask != TerrainDataChangedMask::Settings) + { + return; + } + AZ::Aabb worldBounds = AZ::Aabb::CreateNull(); + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( + worldBounds, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); - void TerrainFeatureProcessor::Deactivate() - { - DisableSceneNotification(); + const AZ::Aabb& regionToUpdate = dirtyRegion.IsValid() ? dirtyRegion : worldBounds; - DestroyRenderBuffers(); - m_areaData = {}; + m_dirtyRegion.AddAabb(regionToUpdate); + m_dirtyRegion.Clamp(worldBounds); - if (m_hostPool) - { - m_hostPool.reset(); - } + AZ::Transform transform = AZ::Transform::CreateTranslation(worldBounds.GetCenter()); + + AZ::Vector2 queryResolution = AZ::Vector2(1.0f); + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( + queryResolution, &AzFramework::Terrain::TerrainDataRequests::GetTerrainHeightQueryResolution); - m_rhiSystem = nullptr; + m_areaData.m_transform = transform; + m_areaData.m_heightScale = worldBounds.GetZExtent(); + m_areaData.m_terrainBounds = worldBounds; + m_areaData.m_heightmapImageWidth = aznumeric_cast(worldBounds.GetXExtent() / queryResolution.GetX()); + m_areaData.m_heightmapImageHeight = aznumeric_cast(worldBounds.GetYExtent() / queryResolution.GetY()); + m_areaData.m_updateWidth = aznumeric_cast(m_dirtyRegion.GetXExtent() / queryResolution.GetX()); + m_areaData.m_updateHeight = aznumeric_cast(m_dirtyRegion.GetYExtent() / queryResolution.GetY()); + // Currently query resolution is multidimensional but the rendering system only supports this changing in one dimension. + m_areaData.m_sampleSpacing = queryResolution.GetX(); + m_areaData.m_propertiesDirty = true; } - void TerrainFeatureProcessor::Render(const AZ::RPI::FeatureProcessor::RenderPacket& packet) + void TerrainFeatureProcessor::UpdateTerrainData() { - ProcessSurfaces(packet); - } + static const AZ::Name TerrainHeightmapName = AZ::Name(TerrainHeightmapChars); - void TerrainFeatureProcessor::UpdateTerrainData( - const AZ::Transform& transform, - const AZ::Aabb& worldBounds, - float sampleSpacing, - uint32_t width, uint32_t height, const AZStd::vector& heightData) - { - if (!worldBounds.IsValid()) + uint32_t width = m_areaData.m_updateWidth; + uint32_t height = m_areaData.m_updateHeight; + const AZ::Aabb& worldBounds = m_areaData.m_terrainBounds; + float queryResolution = m_areaData.m_sampleSpacing; + + AZ::RHI::Size worldSize = AZ::RHI::Size(m_areaData.m_heightmapImageWidth, m_areaData.m_heightmapImageHeight, 1); + + if (!m_areaData.m_heightmapImage || m_areaData.m_heightmapImage->GetDescriptor().m_size != worldSize) { - return; + // World size changed, so the whole world needs updating. + width = worldSize.m_width; + height = worldSize.m_height; + m_dirtyRegion = worldBounds; + + AZ::Data::Instance imagePool = AZ::RPI::ImageSystemInterface::Get()->GetSystemAttachmentPool(); + AZ::RHI::ImageDescriptor imageDescriptor = AZ::RHI::ImageDescriptor::Create2D( + AZ::RHI::ImageBindFlags::ShaderRead, width, height, AZ::RHI::Format::R16_UNORM + ); + m_areaData.m_heightmapImage = AZ::RPI::AttachmentImage::Create(*imagePool.get(), imageDescriptor, TerrainHeightmapName, nullptr, nullptr); + AZ_Error(TerrainFPName, m_areaData.m_heightmapImage, "Failed to initialize the heightmap image!"); } - m_areaData.m_transform = transform; - m_areaData.m_heightScale = worldBounds.GetZExtent(); - m_areaData.m_terrainBounds = worldBounds; - m_areaData.m_heightmapImageHeight = height; - m_areaData.m_heightmapImageWidth = width; - m_areaData.m_sampleSpacing = sampleSpacing; + AZStd::vector pixels; + pixels.reserve(width * height); - // Create heightmap image data { - m_areaData.m_propertiesDirty = true; + // Block other threads from accessing the surface data bus while we are in GetHeightFromFloats (which may call into the SurfaceData bus). + // We lock our surface data mutex *before* checking / setting "isRequestInProgress" so that we prevent race conditions + // that create false detection of cyclic dependencies when multiple requests occur on different threads simultaneously. + // (One case where this was previously able to occur was in rapid updating of the Preview widget on the + // GradientSurfaceDataComponent in the Editor when moving the threshold sliders back and forth rapidly) - AZ::RHI::Size imageSize; - imageSize.m_width = width; - imageSize.m_height = height; + auto& surfaceDataContext = SurfaceData::SurfaceDataSystemRequestBus::GetOrCreateContext(false); + typename SurfaceData::SurfaceDataSystemRequestBus::Context::DispatchLockGuard scopeLock(surfaceDataContext.m_contextMutex); - AZStd::vector uint16Heights; - uint16Heights.reserve(heightData.size()); - for (float sampleHeight : heightData) + for (uint32_t y = 0; y < height; y++) { - float clampedSample = AZ::GetClamp(sampleHeight, 0.0f, 1.0f); - constexpr uint16_t MaxUint16 = 0xFFFF; - uint16Heights.push_back(aznumeric_cast(clampedSample * MaxUint16)); + for (uint32_t x = 0; x < width; x++) + { + bool terrainExists = true; + float terrainHeight = 0.0f; + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( + terrainHeight, &AzFramework::Terrain::TerrainDataRequests::GetHeightFromFloats, + (x * queryResolution) + m_dirtyRegion.GetMin().GetX(), + (y * queryResolution) + m_dirtyRegion.GetMin().GetY(), + AzFramework::Terrain::TerrainDataRequests::Sampler::EXACT, + &terrainExists); + + float clampedHeight = AZ::GetClamp((terrainHeight - worldBounds.GetMin().GetZ()) / worldBounds.GetExtents().GetZ(), 0.0f, 1.0f); + float expandedHeight = AZStd::roundf(clampedHeight * AZStd::numeric_limits::max()); + uint16_t uint16Height = aznumeric_cast(expandedHeight); + + pixels.push_back(uint16Height); + } } - - AZ::Data::Instance streamingImagePool = AZ::RPI::ImageSystemInterface::Get()->GetSystemStreamingPool(); - m_areaData.m_heightmapImage = AZ::RPI::StreamingImage::CreateFromCpuData(*streamingImagePool, - AZ::RHI::ImageDimension::Image2D, - imageSize, - AZ::RHI::Format::R16_UNORM, - (uint8_t*)uint16Heights.data(), - heightData.size() * sizeof(uint16_t)); - AZ_Error(TerrainFPName, m_areaData.m_heightmapImage, "Failed to initialize the heightmap image!"); } + if (m_areaData.m_heightmapImage) + { + const float left = (m_dirtyRegion.GetMin().GetX() - worldBounds.GetMin().GetX()) / queryResolution; + const float top = (m_dirtyRegion.GetMin().GetY() - worldBounds.GetMin().GetY()) / queryResolution; + AZ::RHI::ImageUpdateRequest imageUpdateRequest; + imageUpdateRequest.m_imageSubresourcePixelOffset.m_left = aznumeric_cast(left); + imageUpdateRequest.m_imageSubresourcePixelOffset.m_top = aznumeric_cast(top); + imageUpdateRequest.m_sourceSubresourceLayout.m_bytesPerRow = width * sizeof(uint16_t); + imageUpdateRequest.m_sourceSubresourceLayout.m_bytesPerImage = width * height * sizeof(uint16_t); + imageUpdateRequest.m_sourceSubresourceLayout.m_rowCount = height; + imageUpdateRequest.m_sourceSubresourceLayout.m_size.m_width = width; + imageUpdateRequest.m_sourceSubresourceLayout.m_size.m_height = height; + imageUpdateRequest.m_sourceSubresourceLayout.m_size.m_depth = 1; + imageUpdateRequest.m_sourceData = pixels.data(); + imageUpdateRequest.m_image = m_areaData.m_heightmapImage->GetRHIImage(); + + m_areaData.m_heightmapImage->UpdateImageContents(imageUpdateRequest); + } + + m_dirtyRegion = AZ::Aabb::CreateNull(); } void TerrainFeatureProcessor::ProcessSurfaces(const FeatureProcessor::RenderPacket& process) { AZ_PROFILE_FUNCTION(AzRender); - if ((m_shaderStates[ShaderType::Forward].m_shader == nullptr) || - (m_shaderStates[ShaderType::Depth].m_shader == nullptr) || - m_shaderStates[ShaderType::Forward].m_shader->GetDrawListTag().IsNull() || - m_shaderStates[ShaderType::Depth].m_shader->GetDrawListTag().IsNull()) - { - return; - } - if (!m_areaData.m_terrainBounds.IsValid()) { return; } - if (m_areaData.m_propertiesDirty) + if (m_areaData.m_propertiesDirty && m_materialInstance && m_materialInstance->CanCompile()) { + UpdateTerrainData(); + m_areaData.m_propertiesDirty = false; m_sectorData.clear(); - AZ::RHI::DrawPacketBuilder drawPacketBuilder; + AZ::RPI::MaterialPropertyIndex heightmapPropertyIndex = + m_materialInstance->GetMaterialPropertiesLayout()->FindPropertyIndex(AZ::Name(MaterialInputs::HeightmapImage)); + AZ_Error(TerrainFPName, heightmapPropertyIndex.IsValid(), "Failed to find material input constant %s.", MaterialInputs::HeightmapImage); + AZ::Data::Instance heightmapImage = m_areaData.m_heightmapImage; + m_materialInstance->SetPropertyValue(heightmapPropertyIndex, heightmapImage); + m_materialInstance->Compile(); - uint32_t numIndices = static_cast(m_gridIndices.size()); + const auto layout = m_materialInstance->GetAsset()->GetObjectSrgLayout(); - AZ::RHI::DrawIndexed drawIndexed; - drawIndexed.m_indexCount = numIndices; - drawIndexed.m_indexOffset = 0; - drawIndexed.m_vertexOffset = 0; + m_modelToWorldIndex = layout->FindShaderInputConstantIndex(AZ::Name(ShaderInputs::ModelToWorld)); + AZ_Error(TerrainFPName, m_modelToWorldIndex.IsValid(), "Failed to find shader input constant %s.", ShaderInputs::ModelToWorld); + + m_terrainDataIndex = layout->FindShaderInputConstantIndex(AZ::Name(ShaderInputs::TerrainData)); + AZ_Error(TerrainFPName, m_terrainDataIndex.IsValid(), "Failed to find shader input constant %s.", ShaderInputs::TerrainData); float xFirstPatchStart = - m_areaData.m_terrainBounds.GetMin().GetX() - fmod(m_areaData.m_terrainBounds.GetMin().GetX(), m_gridMeters); - float xLastPatchStart = m_areaData.m_terrainBounds.GetMax().GetX() - fmod(m_areaData.m_terrainBounds.GetMax().GetX(), m_gridMeters); + m_areaData.m_terrainBounds.GetMin().GetX() - fmod(m_areaData.m_terrainBounds.GetMin().GetX(), GridMeters); + float xLastPatchStart = m_areaData.m_terrainBounds.GetMax().GetX() - fmod(m_areaData.m_terrainBounds.GetMax().GetX(), GridMeters); float yFirstPatchStart = - m_areaData.m_terrainBounds.GetMin().GetY() - fmod(m_areaData.m_terrainBounds.GetMin().GetY(), m_gridMeters); - float yLastPatchStart = m_areaData.m_terrainBounds.GetMax().GetY() - fmod(m_areaData.m_terrainBounds.GetMax().GetY(), m_gridMeters); + m_areaData.m_terrainBounds.GetMin().GetY() - fmod(m_areaData.m_terrainBounds.GetMin().GetY(), GridMeters); + float yLastPatchStart = m_areaData.m_terrainBounds.GetMax().GetY() - fmod(m_areaData.m_terrainBounds.GetMax().GetY(), GridMeters); - for (float yPatch = yFirstPatchStart; yPatch <= yLastPatchStart; yPatch += m_gridMeters) + for (float yPatch = yFirstPatchStart; yPatch <= yLastPatchStart; yPatch += GridMeters) { - for (float xPatch = xFirstPatchStart; xPatch <= xLastPatchStart; xPatch += m_gridMeters) + for (float xPatch = xFirstPatchStart; xPatch <= xLastPatchStart; xPatch += GridMeters) { - drawPacketBuilder.Begin(nullptr); - drawPacketBuilder.SetDrawArguments(drawIndexed); - drawPacketBuilder.SetIndexBufferView(m_indexBufferView); - auto& forwardShader = m_shaderStates[ShaderType::Forward].m_shader; - - auto resourceGroup = AZ::RPI::ShaderResourceGroup::Create(forwardShader->GetAsset(), forwardShader->GetSupervariantIndex(), AZ::Name("ObjectSrg")); - if (!resourceGroup) + const auto& materialAsset = m_materialInstance->GetAsset(); + auto& shaderAsset = materialAsset->GetMaterialTypeAsset()->GetShaderAssetForObjectSrg(); + auto objectSrg = AZ::RPI::ShaderResourceGroup::Create(shaderAsset, materialAsset->GetObjectSrgLayout()->GetName()); + if (!objectSrg) { - AZ_Error(TerrainFPName, false, "Failed to create shader resource group"); - return; + AZ_Warning("TerrainFeatureProcessor", false, "Failed to create a new shader resource group, skipping."); + continue; } - AZStd::array uvMin = { 0.0f, 0.0f }; - AZStd::array uvMax = { 1.0f, 1.0f }; + { // Update SRG + + AZStd::array uvMin = { 0.0f, 0.0f }; + AZStd::array uvMax = { 1.0f, 1.0f }; - uvMin[0] = (float)((xPatch - m_areaData.m_terrainBounds.GetMin().GetX()) / m_areaData.m_terrainBounds.GetXExtent()); - uvMin[1] = (float)((yPatch - m_areaData.m_terrainBounds.GetMin().GetY()) / m_areaData.m_terrainBounds.GetYExtent()); + uvMin[0] = (float)((xPatch - m_areaData.m_terrainBounds.GetMin().GetX()) / m_areaData.m_terrainBounds.GetXExtent()); + uvMin[1] = (float)((yPatch - m_areaData.m_terrainBounds.GetMin().GetY()) / m_areaData.m_terrainBounds.GetYExtent()); - uvMax[0] = - (float)(((xPatch + m_gridMeters) - m_areaData.m_terrainBounds.GetMin().GetX()) / m_areaData.m_terrainBounds.GetXExtent()); - uvMax[1] = - (float)(((yPatch + m_gridMeters) - m_areaData.m_terrainBounds.GetMin().GetY()) / m_areaData.m_terrainBounds.GetYExtent()); + uvMax[0] = + (float)(((xPatch + GridMeters) - m_areaData.m_terrainBounds.GetMin().GetX()) / m_areaData.m_terrainBounds.GetXExtent()); + uvMax[1] = + (float)(((yPatch + GridMeters) - m_areaData.m_terrainBounds.GetMin().GetY()) / m_areaData.m_terrainBounds.GetYExtent()); - AZStd::array uvStep = - { - 1.0f / m_areaData.m_heightmapImageWidth, 1.0f / m_areaData.m_heightmapImageHeight, - }; + AZStd::array uvStep = + { + 1.0f / m_areaData.m_heightmapImageWidth, 1.0f / m_areaData.m_heightmapImageHeight, + }; - AZ::Transform transform = m_areaData.m_transform; - transform.SetTranslation(xPatch, yPatch, m_areaData.m_transform.GetTranslation().GetZ()); + AZ::Transform transform = m_areaData.m_transform; + transform.SetTranslation(xPatch, yPatch, m_areaData.m_transform.GetTranslation().GetZ()); - AZ::Matrix3x4 matrix3x4 = AZ::Matrix3x4::CreateFromTransform(transform); + AZ::Matrix3x4 matrix3x4 = AZ::Matrix3x4::CreateFromTransform(transform); - resourceGroup->SetImage(m_heightmapImageIndex, m_areaData.m_heightmapImage); - resourceGroup->SetConstant(m_modelToWorldIndex, matrix3x4); + objectSrg->SetConstant(m_modelToWorldIndex, matrix3x4); - ShaderTerrainData terrainDataForSrg; - terrainDataForSrg.m_sampleSpacing = m_areaData.m_sampleSpacing; - terrainDataForSrg.m_heightScale = m_areaData.m_heightScale; - terrainDataForSrg.m_uvMin = uvMin; - terrainDataForSrg.m_uvMax = uvMax; - terrainDataForSrg.m_uvStep = uvStep; - resourceGroup->SetConstant(m_terrainDataIndex, terrainDataForSrg); + ShaderTerrainData terrainDataForSrg; + terrainDataForSrg.m_sampleSpacing = m_areaData.m_sampleSpacing; + terrainDataForSrg.m_heightScale = m_areaData.m_heightScale; + terrainDataForSrg.m_uvMin = uvMin; + terrainDataForSrg.m_uvMax = uvMax; + terrainDataForSrg.m_uvStep = uvStep; + objectSrg->SetConstant(m_terrainDataIndex, terrainDataForSrg); - resourceGroup->Compile(); - drawPacketBuilder.AddShaderResourceGroup(resourceGroup->GetRHIShaderResourceGroup()); + objectSrg->Compile(); + } - auto addDrawItem = [&](ShaderState& shaderState) - { - AZ::RHI::DrawPacketBuilder::DrawRequest drawRequest; - drawRequest.m_listTag = shaderState.m_shader->GetDrawListTag(); - drawRequest.m_pipelineState = shaderState.m_pipelineState.get(); - drawRequest.m_streamBufferViews = AZStd::array_view(&m_vertexBufferView, 1); - drawPacketBuilder.AddDrawItem(drawRequest); - }; - - for (ShaderState& shaderState : m_shaderStates) + m_sectorData.push_back(); + SectorData& sectorData = m_sectorData.back(); + + for (auto& lod : m_patchModel->GetLods()) { - addDrawItem(shaderState); + AZ::RPI::ModelLod& modelLod = *lod.get(); + sectorData.m_drawPackets.emplace_back(modelLod, 0, m_materialInstance, objectSrg); + AZ::RPI::MeshDrawPacket& drawPacket = sectorData.m_drawPackets.back(); + + // set the shader option to select forward pass IBL specular if necessary + if (!drawPacket.SetShaderOption(AZ::Name("o_meshUseForwardPassIBLSpecular"), AZ::RPI::ShaderOptionValue{ false })) + { + AZ_Warning("MeshDrawPacket", false, "Failed to set o_meshUseForwardPassIBLSpecular on mesh draw packet"); + } + uint8_t stencilRef = AZ::Render::StencilRefs::UseDiffuseGIPass | AZ::Render::StencilRefs::UseIBLSpecularPass; + drawPacket.SetStencilRef(stencilRef); + drawPacket.Update(*GetParentScene(), true); } - //addDrawItem(m_shaderStates[ShaderType::Forward]); - - m_sectorData.emplace_back( - drawPacketBuilder.End(), + + sectorData.m_aabb = AZ::Aabb::CreateFromMinMax( AZ::Vector3(xPatch, yPatch, m_areaData.m_terrainBounds.GetMin().GetZ()), - AZ::Vector3(xPatch + m_gridMeters, yPatch + m_gridMeters, m_areaData.m_terrainBounds.GetMax().GetZ()) - ), - resourceGroup - ); + AZ::Vector3(xPatch + GridMeters, yPatch + GridMeters, m_areaData.m_terrainBounds.GetMax().GetZ()) + ); + sectorData.m_srg = objectSrg; } } } - - for (auto& view : process.m_views) + + for (auto& sectorData : m_sectorData) { - AZ::Frustum viewFrustum = AZ::Frustum::CreateFromMatrixColumnMajor(view->GetWorldToClipMatrix()); - for (auto& sectorData : m_sectorData) + uint8_t lodChoice = AZ::RPI::ModelLodAsset::LodCountMax; + + // Go through all cameras and choose an LOD based on the closest camera. + for (auto& view : process.m_views) + { + if ((view->GetUsageFlags() & AZ::RPI::View::UsageFlags::UsageCamera) > 0) + { + AZ::Vector3 cameraPosition = view->GetCameraTransform().GetTranslation(); + AZ::Vector2 cameraPositionXY = AZ::Vector2(cameraPosition.GetX(), cameraPosition.GetY()); + AZ::Vector2 sectorCenterXY = AZ::Vector2(sectorData.m_aabb.GetCenter().GetX(), sectorData.m_aabb.GetCenter().GetY()); + + float sectorDistance = sectorCenterXY.GetDistance(cameraPositionXY); + float lodForCamera = floorf(AZ::GetMax(0.0f, log2f(sectorDistance / (GridMeters * 4.0f)))); + lodChoice = AZ::GetMin(lodChoice, aznumeric_cast(lodForCamera)); + } + } + + // Add the correct LOD draw packet for visible sectors. + for (auto& view : process.m_views) { + AZ::Frustum viewFrustum = AZ::Frustum::CreateFromMatrixColumnMajor(view->GetWorldToClipMatrix()); if (viewFrustum.IntersectAabb(sectorData.m_aabb) != AZ::IntersectResult::Exterior) { - view->AddDrawPacket(sectorData.m_drawPacket.get()); + uint8_t lodToRender = AZ::GetMin(lodChoice, aznumeric_cast(sectorData.m_drawPackets.size() - 1)); + view->AddDrawPacket(sectorData.m_drawPackets.at(lodToRender).GetRHIDrawPacket()); } } } } - void TerrainFeatureProcessor::InitializeTerrainPatch() + void TerrainFeatureProcessor::InitializeTerrainPatch(uint16_t gridSize, float gridSpacing, PatchData& patchdata) { - m_gridVertices.clear(); - m_gridIndices.clear(); + patchdata.m_positions.clear(); + patchdata.m_uvs.clear(); + patchdata.m_indices.clear(); - for (float y = 0.0f; y < m_gridMeters; y += m_gridSpacing) + uint16_t gridVertices = gridSize + 1; // For m_gridSize quads, (m_gridSize + 1) vertices are needed. + size_t size = gridVertices * gridVertices; + size *= size; + + patchdata.m_positions.reserve(size); + patchdata.m_uvs.reserve(size); + + for (uint16_t y = 0; y < gridVertices; ++y) { - for (float x = 0.0f; x < m_gridMeters; x += m_gridSpacing) + for (uint16_t x = 0; x < gridVertices; ++x) { - float x0 = x; - float x1 = x + m_gridSpacing; - float y0 = y; - float y1 = y + m_gridSpacing; - - uint16_t startIndex = (uint16_t)(m_gridVertices.size()); - - m_gridVertices.emplace_back(x0, y0, x0 / m_gridMeters, y0 / m_gridMeters); - m_gridVertices.emplace_back(x1, y0, x1 / m_gridMeters, y0 / m_gridMeters); - m_gridVertices.emplace_back(x0, y1, x0 / m_gridMeters, y1 / m_gridMeters); - m_gridVertices.emplace_back(x1, y1, x1 / m_gridMeters, y1 / m_gridMeters); - - m_gridIndices.emplace_back(startIndex); - m_gridIndices.emplace_back(aznumeric_cast(startIndex + 1)); - m_gridIndices.emplace_back(aznumeric_cast(startIndex + 2)); - m_gridIndices.emplace_back(aznumeric_cast(startIndex + 1)); - m_gridIndices.emplace_back(aznumeric_cast(startIndex + 3)); - m_gridIndices.emplace_back(aznumeric_cast(startIndex + 2)); + patchdata.m_positions.push_back({ aznumeric_cast(x) * gridSpacing, aznumeric_cast(y) * gridSpacing }); + patchdata.m_uvs.push_back({ aznumeric_cast(x) / gridSize, aznumeric_cast(y) / gridSize }); } } - } - bool TerrainFeatureProcessor::InitializeRenderBuffers() + patchdata.m_indices.reserve(gridSize * gridSize * 6); // total number of quads, 2 triangles with 6 indices per quad. + + for (uint16_t y = 0; y < gridSize; ++y) + { + for (uint16_t x = 0; x < gridSize; ++x) + { + uint16_t topLeft = y * gridVertices + x; + uint16_t topRight = topLeft + 1; + uint16_t bottomLeft = (y + 1) * gridVertices + x; + uint16_t bottomRight = bottomLeft + 1; + + patchdata.m_indices.emplace_back(topLeft); + patchdata.m_indices.emplace_back(topRight); + patchdata.m_indices.emplace_back(bottomLeft); + patchdata.m_indices.emplace_back(bottomLeft); + patchdata.m_indices.emplace_back(topRight); + patchdata.m_indices.emplace_back(bottomRight); + } + } + } + + AZ::Outcome> TerrainFeatureProcessor::CreateBufferAsset( + const void* data, const AZ::RHI::BufferViewDescriptor& bufferViewDescriptor, const AZStd::string& bufferName) { - AZ::RHI::ResultCode result = AZ::RHI::ResultCode::Fail; + AZ::RPI::BufferAssetCreator creator; + creator.Begin(AZ::Uuid::CreateRandom()); - // Create geometry buffers - m_indexBuffer = AZ::RHI::Factory::Get().CreateBuffer(); - m_vertexBuffer = AZ::RHI::Factory::Get().CreateBuffer(); + AZ::RHI::BufferDescriptor bufferDescriptor; + bufferDescriptor.m_bindFlags = AZ::RHI::BufferBindFlags::InputAssembly | AZ::RHI::BufferBindFlags::ShaderRead; + bufferDescriptor.m_byteCount = static_cast(bufferViewDescriptor.m_elementSize) * static_cast(bufferViewDescriptor.m_elementCount); - m_indexBuffer->SetName(AZ::Name("TerrainIndexBuffer")); - m_vertexBuffer->SetName(AZ::Name("TerrainVertexBuffer")); + creator.SetBuffer(data, bufferDescriptor.m_byteCount, bufferDescriptor); + creator.SetBufferViewDescriptor(bufferViewDescriptor); + creator.SetUseCommonPool(AZ::RPI::CommonBufferPoolType::StaticInputAssembly); - AZStd::vector> buffers = { m_indexBuffer , m_vertexBuffer }; - - // Fill our buffers with the vertex/index data - for (size_t bufferIndex = 0; bufferIndex < buffers.size(); ++bufferIndex) + AZ::Data::Asset bufferAsset; + if (creator.End(bufferAsset)) { - AZ::RHI::Ptr buffer = buffers[bufferIndex]; + bufferAsset.SetHint(bufferName); + return AZ::Success(bufferAsset); + } + + return AZ::Failure(); + } - // Initialize the buffer + bool TerrainFeatureProcessor::InitializePatchModel() + { + AZ::RPI::ModelAssetCreator modelAssetCreator; + modelAssetCreator.Begin(AZ::Uuid::CreateRandom()); + + uint16_t gridSize = GridSize; + float gridSpacing = GridSpacing; - AZ::RHI::BufferInitRequest bufferRequest; - bufferRequest.m_descriptor = AZ::RHI::BufferDescriptor{ AZ::RHI::BufferBindFlags::InputAssembly, DEFAULT_UploadBufferSize }; - bufferRequest.m_buffer = buffer.get(); + for (uint32_t i = 0; i < AZ::RPI::ModelLodAsset::LodCountMax && gridSize > 0; ++i) + { + PatchData patchData; + InitializeTerrainPatch(gridSize, gridSpacing, patchData); - result = m_hostPool->InitBuffer(bufferRequest); + auto positionBufferViewDesc = AZ::RHI::BufferViewDescriptor::CreateTyped(0, aznumeric_cast(patchData.m_positions.size()), AZ::RHI::Format::R32G32_FLOAT); + auto positionsOutcome = CreateBufferAsset(patchData.m_positions.data(), positionBufferViewDesc, "TerrainPatchPositions"); + + auto uvBufferViewDesc = AZ::RHI::BufferViewDescriptor::CreateTyped(0, aznumeric_cast(patchData.m_uvs.size()), AZ::RHI::Format::R32G32_FLOAT); + auto uvsOutcome = CreateBufferAsset(patchData.m_uvs.data(), uvBufferViewDesc, "TerrainPatchUvs"); + + auto indexBufferViewDesc = AZ::RHI::BufferViewDescriptor::CreateTyped(0, aznumeric_cast(patchData.m_indices.size()), AZ::RHI::Format::R16_UINT); + auto indicesOutcome = CreateBufferAsset(patchData.m_indices.data(), indexBufferViewDesc, "TerrainPatchIndices"); - if (result != AZ::RHI::ResultCode::Success) + if (!positionsOutcome.IsSuccess() || !uvsOutcome.IsSuccess() || !indicesOutcome.IsSuccess()) { AZ_Error(TerrainFPName, false, "Failed to create GPU buffers for Terrain"); return false; } + + AZ::RPI::ModelLodAssetCreator modelLodAssetCreator; + modelLodAssetCreator.Begin(AZ::Uuid::CreateRandom()); - // Grab a pointer to the buffer's data + modelLodAssetCreator.BeginMesh(); + modelLodAssetCreator.AddMeshStreamBuffer(AZ::RHI::ShaderSemantic{ "POSITION" }, AZ::Name(), {positionsOutcome.GetValue(), positionBufferViewDesc}); + modelLodAssetCreator.AddMeshStreamBuffer(AZ::RHI::ShaderSemantic{ "UV" }, AZ::Name(), {uvsOutcome.GetValue(), uvBufferViewDesc}); + modelLodAssetCreator.SetMeshIndexBuffer({indicesOutcome.GetValue(), indexBufferViewDesc}); - m_hostPool->OrphanBuffer(*buffer); + AZ::Aabb aabb = AZ::Aabb::CreateFromMinMax(AZ::Vector3(0.0, 0.0, 0.0), AZ::Vector3(GridMeters, GridMeters, 0.0)); + modelLodAssetCreator.SetMeshAabb(AZStd::move(aabb)); + modelLodAssetCreator.SetMeshName(AZ::Name("Terrain Patch")); + modelLodAssetCreator.EndMesh(); - AZ::RHI::BufferMapResponse mapResponse; - m_hostPool->MapBuffer(AZ::RHI::BufferMapRequest(*buffer, 0, DEFAULT_UploadBufferSize), mapResponse); + AZ::Data::Asset modelLodAsset; + modelLodAssetCreator.End(modelLodAsset); + + modelAssetCreator.AddLodAsset(AZStd::move(modelLodAsset)); - auto* mappedData = reinterpret_cast(mapResponse.m_data); + gridSize = gridSize / 2; + gridSpacing *= 2.0f; + } - //0th index should always be the index buffer - if (bufferIndex == 0) - { - // Fill the index buffer with our terrain patch indices - const uint64_t idxSize = m_gridIndices.size() * sizeof(uint16_t); - memcpy(mappedData, m_gridIndices.data(), idxSize); + AZ::Data::Asset modelAsset; + bool success = modelAssetCreator.End(modelAsset); - m_indexBufferView = AZ::RHI::IndexBufferView( - *buffer, 0, static_cast(idxSize), AZ::RHI::IndexFormat::Uint16); - } - else - { - // Fill the vertex buffer with our terrain patch vertices - const uint64_t elementSize = m_gridVertices.size() * sizeof(Vertex); - memcpy(mappedData, m_gridVertices.data(), elementSize); + m_patchModel = AZ::RPI::Model::FindOrCreate(modelAsset); - m_vertexBufferView = AZ::RHI::StreamBufferView( - *buffer, 0, static_cast(elementSize), static_cast(sizeof(Vertex))); + return success; + } + + void TerrainFeatureProcessor::OnMaterialReinitialized([[maybe_unused]] const AZ::Data::Instance& material) + { + for (auto& sectorData : m_sectorData) + { + for (auto& drawPacket : sectorData.m_drawPackets) + { + drawPacket.Update(*GetParentScene()); } - - m_hostPool->UnmapBuffer(*buffer); } - - return true; } - void TerrainFeatureProcessor::DestroyRenderBuffers() + void TerrainFeatureProcessor::SetWorldSize([[maybe_unused]] AZ::Vector2 sizeInMeters) { - m_indexBuffer.reset(); - m_vertexBuffer.reset(); - - m_indexBufferView = {}; - m_vertexBufferView = {}; - - for (ShaderState& shaderState : m_shaderStates) - { - shaderState.Reset(); - } + // This will control the max rendering size. Actual terrain size can be much + // larger but this will limit how much is rendered. } } diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h index 382f473b25..d8df9b328c 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h @@ -9,27 +9,30 @@ #pragma once #include -#include -#include -#include + +#include #include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include + +namespace AZ::RPI +{ + namespace AssetUtils + { + class AsyncAssetLoader; + } + class Material; + class Model; +} namespace Terrain { class TerrainFeatureProcessor final : public AZ::RPI::FeatureProcessor + , private AZ::RPI::MaterialReloadNotificationBus::Handler + , private AzFramework::Terrain::TerrainDataNotificationBus::Handler { public: AZ_RTTI(TerrainFeatureProcessor, "{D7DAC1F9-4A9F-4D3C-80AE-99579BF8AB1C}", AZ::RPI::FeatureProcessor); @@ -41,44 +44,15 @@ namespace Terrain TerrainFeatureProcessor() = default; ~TerrainFeatureProcessor() = default; - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation + // AZ::RPI::FeatureProcessor overrides... void Activate() override; void Deactivate() override; void Render(const AZ::RPI::FeatureProcessor::RenderPacket& packet) override; - void UpdateTerrainData(const AZ::Transform& transform, const AZ::Aabb& worldBounds, float sampleSpacing, - uint32_t width, uint32_t height, const AZStd::vector& heightData); - - void RemoveTerrainData() - { - m_areaData = {}; - } + void SetWorldSize(AZ::Vector2 sizeInMeters); private: - // System-level references to the shader, pipeline, and shader-related information - enum ShaderType - { - Depth, - Forward, - Count, - }; - - struct ShaderState - { - AZ::Data::Instance m_shader; - AZ::RHI::ConstPtr m_pipelineState; - AZ::RHI::PipelineStateDescriptorForDraw m_pipelineStateDescriptor; - - void Reset() - { - m_shader.reset(); - m_pipelineState.reset(); - m_pipelineStateDescriptor = {}; - } - }; - struct ShaderTerrainData // Must align with struct in Object Srg { AZStd::array m_uvMin; @@ -87,62 +61,56 @@ namespace Terrain float m_sampleSpacing; float m_heightScale; }; + + struct VertexPosition + { + float m_posx; + float m_posy; + }; - // RPI::SceneNotificationBus overrides ... - void OnRenderPipelineAdded(AZ::RPI::RenderPipelinePtr pipeline) override; - void OnRenderPipelineRemoved(AZ::RPI::RenderPipeline* pipeline) override; - void OnRenderPipelinePassesChanged(AZ::RPI::RenderPipeline* renderPipeline) override; + struct VertexUv + { + float m_u; + float m_v; + }; - void InitializeAtomStuff(); - void ConfigurePipelineState(ShaderState& shaderState, bool assertOnFail); + struct PatchData + { + AZStd::vector m_positions; + AZStd::vector m_uvs; + AZStd::vector m_indices; + }; + + // AZ::RPI::MaterialReloadNotificationBus::Handler overrides... + void OnMaterialReinitialized(const AZ::Data::Instance& material) override; - void InitializeTerrainPatch(); + // AzFramework::Terrain::TerrainDataNotificationBus overrides... + void OnTerrainDataDestroyBegin() override; + void OnTerrainDataChanged(const AZ::Aabb& dirtyRegion, TerrainDataChangedMask dataChangedMask) override; - bool InitializeRenderBuffers(); - void DestroyRenderBuffers(); + void Initialize(); + void InitializeTerrainPatch(uint16_t gridSize, float gridSpacing, PatchData& patchdata); + bool InitializePatchModel(); + + void UpdateTerrainData(); void ProcessSurfaces(const FeatureProcessor::RenderPacket& process); + + AZ::Outcome> CreateBufferAsset( + const void* data, const AZ::RHI::BufferViewDescriptor& bufferViewDescriptor, const AZStd::string& bufferName); // System-level parameters - const float m_gridSpacing{ 1.0f }; - const float m_gridMeters{ 32.0f }; - - // System-level cached reference to the Atom RHI - AZ::RHI::RHISystemInterface* m_rhiSystem = nullptr; + static constexpr float GridSpacing{ 1.0f }; + static constexpr uint32_t GridSize{ 64 }; // number of terrain quads (vertices are m_gridSize + 1) + static constexpr float GridMeters{ GridSpacing * GridSize }; - AZStd::array m_shaderStates; + AZStd::unique_ptr m_materialAssetLoader; + AZ::Data::Instance m_materialInstance; - AZ::RHI::ShaderInputImageIndex m_heightmapImageIndex; AZ::RHI::ShaderInputConstantIndex m_modelToWorldIndex; AZ::RHI::ShaderInputConstantIndex m_terrainDataIndex; - // Pos_float_2 + UV_float_2 - struct Vertex - { - float m_posx; - float m_posy; - float m_u; - float m_v; - - Vertex(float posx, float posy, float u, float v) - : m_posx(posx) - , m_posy(posy) - , m_u(u) - , m_v(v) - { - } - }; - - // System-level definition of a grid patch. (ex: 32m x 32m) - AZStd::vector m_gridVertices; - AZStd::vector m_gridIndices; - - // System-level data related to the grid patch - AZ::RHI::Ptr m_hostPool = nullptr; - AZ::RHI::Ptr m_indexBuffer; - AZ::RHI::Ptr m_vertexBuffer; - AZ::RHI::IndexBufferView m_indexBufferView; - AZ::RHI::StreamBufferView m_vertexBufferView; + AZ::Data::Instance m_patchModel; // Per-area data struct TerrainAreaData @@ -150,26 +118,23 @@ namespace Terrain AZ::Transform m_transform{ AZ::Transform::CreateIdentity() }; AZ::Aabb m_terrainBounds{ AZ::Aabb::CreateNull() }; float m_heightScale{ 0.0f }; - AZ::Data::Instance m_heightmapImage; + AZ::Data::Instance m_heightmapImage; uint32_t m_heightmapImageWidth{ 0 }; uint32_t m_heightmapImageHeight{ 0 }; + uint32_t m_updateWidth{ 0 }; + uint32_t m_updateHeight{ 0 }; bool m_propertiesDirty{ true }; float m_sampleSpacing{ 0.0f }; }; TerrainAreaData m_areaData; + AZ::Aabb m_dirtyRegion{ AZ::Aabb::CreateNull() }; struct SectorData { - AZ::Data::Instance m_srg; + AZ::Data::Instance m_srg; // Hold on to ref so it's not dropped AZ::Aabb m_aabb; - AZStd::unique_ptr m_drawPacket; - - SectorData(const AZ::RHI::DrawPacket* drawPacket, AZ::Aabb aabb, AZ::Data::Instance srg) - : m_srg(srg) - , m_aabb(aabb) - , m_drawPacket(drawPacket) - {} + AZStd::fixed_vector m_drawPackets; }; AZStd::vector m_sectorData; diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainMacroMaterialBus.h b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainMacroMaterialBus.h new file mode 100644 index 0000000000..c0618a7f66 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainMacroMaterialBus.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +#include + +namespace Terrain +{ + /** + * Request terrain macro material data. + */ + class TerrainMacroMaterialRequests + : public AZ::ComponentBus + { + public: + //////////////////////////////////////////////////////////////////////// + // EBusTraits + using MutexType = AZStd::recursive_mutex; + //////////////////////////////////////////////////////////////////////// + + virtual ~TerrainMacroMaterialRequests() = default; + + // Get the terrain macro material and the region that it covers. + virtual void GetTerrainMacroMaterialData(AZ::Data::Instance& macroMaterial, AZ::Aabb& macroMaterialRegion) = 0; + }; + + using TerrainMacroMaterialRequestBus = AZ::EBus; + + /** + * Notifications for when the terrain macro material data changes. + */ + class TerrainMacroMaterialNotifications : public AZ::EBusTraits + { + public: + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + ////////////////////////////////////////////////////////////////////////// + + virtual void OnTerrainMacroMaterialCreated( + [[maybe_unused]] AZ::EntityId macroMaterialEntity, + [[maybe_unused]] AZ::Data::Instance macroMaterial, + [[maybe_unused]] const AZ::Aabb& macroMaterialRegion) + { + } + + virtual void OnTerrainMacroMaterialChanged( + [[maybe_unused]] AZ::EntityId macroMaterialEntity, + [[maybe_unused]] AZ::Data::Instance macroMaterial) + { + } + + virtual void OnTerrainMacroMaterialRegionChanged( + [[maybe_unused]] AZ::EntityId macroMaterialEntity, + [[maybe_unused]] const AZ::Aabb& oldRegion, + [[maybe_unused]] const AZ::Aabb& newRegion) + { + } + + virtual void OnTerrainMacroMaterialDestroyed([[maybe_unused]] AZ::EntityId macroMaterialEntity) + { + } + }; + using TerrainMacroMaterialNotificationBus = AZ::EBus; + +} diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp index 46ac677dd1..821e0bd2e2 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp @@ -8,10 +8,17 @@ #include #include +#include #include #include #include +#include +#include +#include + +#include + using namespace Terrain; bool TerrainLayerPriorityComparator::operator()(const AZ::EntityId& layer1id, const AZ::EntityId& layer2id) const @@ -201,6 +208,7 @@ float TerrainSystem::GetHeightSynchronous(float x, float y, Sampler sampler, boo break; } + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. if (terrainExistsPtr) { *terrainExistsPtr = terrainExists; @@ -291,50 +299,143 @@ AZ::Vector3 TerrainSystem::GetNormalFromFloats(float x, float y, Sampler sampler AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeight( - [[maybe_unused]] AZ::Vector3 position, [[maybe_unused]] Sampler sampleFilter, [[maybe_unused]] bool* terrainExistsPtr) const + const AZ::Vector3 position, Sampler sampleFilter, bool* terrainExistsPtr) const +{ + return GetMaxSurfaceWeightFromFloats(position.GetX(), position.GetY(), sampleFilter, terrainExistsPtr); +} + +AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeightFromVector2(const AZ::Vector2& inPosition, Sampler sampleFilter, bool* terrainExistsPtr) const +{ + return GetMaxSurfaceWeightFromFloats(inPosition.GetX(), inPosition.GetY(), sampleFilter, terrainExistsPtr); +} + +AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeightFromFloats( + const float x, const float y, Sampler sampleFilter, bool* terrainExistsPtr) const { if (terrainExistsPtr) { *terrainExistsPtr = true; } - return AzFramework::SurfaceData::SurfaceTagWeight(); + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet weightSet; + + GetOrderedSurfaceWeights(x, y, sampleFilter, weightSet, terrainExistsPtr); + + if (weightSet.empty()) + { + return {}; + } + + return *weightSet.begin(); } -AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeightFromFloats( - [[maybe_unused]] float x, - [[maybe_unused]] float y, - [[maybe_unused]] Sampler sampleFilter, - [[maybe_unused]] bool* terrainExistsPtr) const +AZ::EntityId TerrainSystem::FindBestAreaEntityAtPosition(float x, float y, AZ::Aabb& bounds) const +{ + AZ::Vector3 inPosition = AZ::Vector3(x, y, 0); + + // Find the highest priority layer that encompasses this position + AZStd::shared_lock lock(m_areaMutex); + + // The areas are sorted into priority order: the first area that contains inPosition is the most suitable. + for (const auto& [areaId, areaBounds] : m_registeredAreas) + { + inPosition.SetZ(areaBounds.GetMin().GetZ()); + if (areaBounds.Contains(inPosition)) + { + bounds = areaBounds; + return areaId; + } + } + + return AZ::EntityId(); +} + +void TerrainSystem::GetOrderedSurfaceWeights( + const float x, + const float y, + [[maybe_unused]] Sampler sampler, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + bool* terrainExistsPtr) const +{ + AZ::Aabb bounds; + AZ::EntityId bestAreaId = FindBestAreaEntityAtPosition(x, y, bounds); + + if (terrainExistsPtr) + { + GetHeightFromFloats(x, y, AzFramework::Terrain::TerrainDataRequests::Sampler::EXACT, terrainExistsPtr); + } + + outSurfaceWeights.clear(); + + if (!bestAreaId.IsValid()) + { + return; + } + + const AZ::Vector3 inPosition = AZ::Vector3(x, y, 0.0f); + + // Get all the surfaces with weights at the given point. + Terrain::TerrainAreaSurfaceRequestBus::Event( + bestAreaId, &Terrain::TerrainAreaSurfaceRequestBus::Events::GetSurfaceWeights, inPosition, outSurfaceWeights); +} + +void TerrainSystem::GetSurfaceWeights( + const AZ::Vector3& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter, + bool* terrainExistsPtr) const { if (terrainExistsPtr) { *terrainExistsPtr = true; } - return AzFramework::SurfaceData::SurfaceTagWeight(); + GetOrderedSurfaceWeights(inPosition.GetX(), inPosition.GetY(), sampleFilter, outSurfaceWeights, terrainExistsPtr); } -const char* TerrainSystem::GetMaxSurfaceName( - [[maybe_unused]] AZ::Vector3 position, [[maybe_unused]] Sampler sampleFilter, [[maybe_unused]] bool* terrainExistsPtr) const +void TerrainSystem::GetSurfaceWeightsFromVector2( + const AZ::Vector2& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter, + bool* terrainExistsPtr) const { + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. if (terrainExistsPtr) { *terrainExistsPtr = true; } - return ""; + GetOrderedSurfaceWeights(inPosition.GetX(), inPosition.GetY(), sampleFilter, outSurfaceWeights, terrainExistsPtr); } -/* -void TerrainSystem::GetSurfaceWeights( - [[maybe_unused]] const AZ::Vector3& inPosition, - [[maybe_unused]] Sampler sampleFilter, - [[maybe_unused]] SurfaceData::SurfaceTagWeightMap& outSurfaceWeights) +void TerrainSystem::GetSurfaceWeightsFromFloats( + float x, + float y, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter, + bool* terrainExistsPtr) const { - // TODO: implement + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. + if (terrainExistsPtr) + { + *terrainExistsPtr = true; + } + + GetOrderedSurfaceWeights(x, y, sampleFilter, outSurfaceWeights, terrainExistsPtr); } +const char* TerrainSystem::GetMaxSurfaceName([[maybe_unused]] AZ::Vector3 position, [[maybe_unused]] Sampler sampleFilter, [[maybe_unused]] bool* terrainExistsPtr) const +{ + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. + if (terrainExistsPtr) + { + *terrainExistsPtr = true; + } + + return ""; +} + +/* void TerrainSystem::GetSurfacePoint( const AZ::Vector3& inPosition, [[maybe_unused]] Sampler sampleFilter, SurfaceData::SurfacePoint& outSurfacePoint) { diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h index a9240e02a6..66c48850ef 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h @@ -70,9 +70,28 @@ namespace Terrain //! HOLE then *terrainExistsPtr will be set to false, //! otherwise *terrainExistsPtr will be set to true. AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeight( - AZ::Vector3 position, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + const AZ::Vector3 position, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromVector2( + const AZ::Vector2& inPosition, Sampler sampleFilter = Sampler::DEFAULT, bool* terrainExistsPtr = nullptr) const override; AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromFloats( - float x, float y, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + const float x, const float y, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + + void GetSurfaceWeights( + const AZ::Vector3& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const override; + void GetSurfaceWeightsFromVector2( + const AZ::Vector2& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const override; + void GetSurfaceWeightsFromFloats( + float x, + float y, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const override; //! Convenience function for low level systems that can't do a reverse lookup from Crc to string. Everyone else should use //! GetMaxSurfaceWeight or GetMaxSurfaceWeightFromFloats. Not available in the behavior context. Returns nullptr if the position is @@ -96,6 +115,13 @@ namespace Terrain private: void ClampPosition(float x, float y, AZ::Vector2& outPosition, AZ::Vector2& normalizedDelta) const; + AZ::EntityId FindBestAreaEntityAtPosition(float x, float y, AZ::Aabb& bounds) const; + void GetOrderedSurfaceWeights( + const float x, + const float y, + Sampler sampler, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + bool* terrainExistsPtr) const; float GetHeightSynchronous(float x, float y, Sampler sampler, bool* terrainExistsPtr) const; float GetTerrainAreaHeight(float x, float y, bool& terrainExists) const; AZ::Vector3 GetNormalSynchronous(float x, float y, Sampler sampler, bool* terrainExistsPtr) const; diff --git a/Gems/Terrain/Code/terrain_editor_shared_files.cmake b/Gems/Terrain/Code/terrain_editor_shared_files.cmake index d4719f46d5..2db46dc264 100644 --- a/Gems/Terrain/Code/terrain_editor_shared_files.cmake +++ b/Gems/Terrain/Code/terrain_editor_shared_files.cmake @@ -11,6 +11,8 @@ set(FILES Source/EditorComponents/EditorTerrainHeightGradientListComponent.h Source/EditorComponents/EditorTerrainLayerSpawnerComponent.cpp Source/EditorComponents/EditorTerrainLayerSpawnerComponent.h + Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp + Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h Source/EditorComponents/EditorTerrainWorldComponent.cpp Source/EditorComponents/EditorTerrainWorldComponent.h Source/EditorComponents/EditorTerrainWorldDebuggerComponent.cpp @@ -23,4 +25,6 @@ set(FILES Source/EditorTerrainModule.h Source/TerrainModule.cpp Source/TerrainModule.h + Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp + Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h ) diff --git a/Gems/Terrain/Code/terrain_files.cmake b/Gems/Terrain/Code/terrain_files.cmake index 2c013fa332..5739ed6079 100644 --- a/Gems/Terrain/Code/terrain_files.cmake +++ b/Gems/Terrain/Code/terrain_files.cmake @@ -7,12 +7,15 @@ # set(FILES + Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h Source/Components/TerrainHeightGradientListComponent.cpp Source/Components/TerrainHeightGradientListComponent.h Source/Components/TerrainLayerSpawnerComponent.cpp Source/Components/TerrainLayerSpawnerComponent.h Source/Components/TerrainSurfaceDataSystemComponent.cpp Source/Components/TerrainSurfaceDataSystemComponent.h + Source/Components/TerrainSurfaceGradientListComponent.cpp + Source/Components/TerrainSurfaceGradientListComponent.h Source/Components/TerrainSystemComponent.cpp Source/Components/TerrainSystemComponent.h Source/Components/TerrainWorldComponent.cpp @@ -21,8 +24,11 @@ set(FILES Source/Components/TerrainWorldDebuggerComponent.h Source/Components/TerrainWorldRendererComponent.cpp Source/Components/TerrainWorldRendererComponent.h + Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp + Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h Source/TerrainRenderer/TerrainFeatureProcessor.cpp Source/TerrainRenderer/TerrainFeatureProcessor.h + Source/TerrainRenderer/TerrainMacroMaterialBus.h Source/TerrainSystem/TerrainSystem.cpp Source/TerrainSystem/TerrainSystem.h Source/TerrainSystem/TerrainSystemBus.h diff --git a/Gems/Vegetation/Code/Source/Components/DescriptorListComponent.cpp b/Gems/Vegetation/Code/Source/Components/DescriptorListComponent.cpp index 96bef0abda..de2078e2e5 100644 --- a/Gems/Vegetation/Code/Source/Components/DescriptorListComponent.cpp +++ b/Gems/Vegetation/Code/Source/Components/DescriptorListComponent.cpp @@ -8,6 +8,7 @@ #include "DescriptorListComponent.h" #include +#include #include #include #include diff --git a/Gems/Vegetation/Code/Source/Components/MeshBlockerComponent.cpp b/Gems/Vegetation/Code/Source/Components/MeshBlockerComponent.cpp index dc205079fd..9c7fa34dac 100644 --- a/Gems/Vegetation/Code/Source/Components/MeshBlockerComponent.cpp +++ b/Gems/Vegetation/Code/Source/Components/MeshBlockerComponent.cpp @@ -19,6 +19,7 @@ #include #include #include +#include namespace Vegetation { diff --git a/Gems/Vegetation/Code/Source/DynamicSliceInstanceSpawner.cpp b/Gems/Vegetation/Code/Source/DynamicSliceInstanceSpawner.cpp index 0186bba89d..8e6bbf0ed8 100644 --- a/Gems/Vegetation/Code/Source/DynamicSliceInstanceSpawner.cpp +++ b/Gems/Vegetation/Code/Source/DynamicSliceInstanceSpawner.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/Vegetation/Code/Source/PrefabInstanceSpawner.cpp b/Gems/Vegetation/Code/Source/PrefabInstanceSpawner.cpp index efeb60d598..b386f17cab 100644 --- a/Gems/Vegetation/Code/Source/PrefabInstanceSpawner.cpp +++ b/Gems/Vegetation/Code/Source/PrefabInstanceSpawner.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include diff --git a/Gems/Vegetation/Code/Tests/DynamicSliceInstanceSpawnerTests.cpp b/Gems/Vegetation/Code/Tests/DynamicSliceInstanceSpawnerTests.cpp index 9838a7b6a1..26d8028522 100644 --- a/Gems/Vegetation/Code/Tests/DynamicSliceInstanceSpawnerTests.cpp +++ b/Gems/Vegetation/Code/Tests/DynamicSliceInstanceSpawnerTests.cpp @@ -50,80 +50,25 @@ namespace UnitTest } }; - // To test Dynamic Slice spawning, we need to mock up enough of the asset management system and the dynamic slice - // asset handling to pretend like we're loading/unloading dynamic slices successfully. - class DynamicSliceInstanceSpawnerTests - : public VegetationComponentTests - , public UnitTest::SetRestoreFileIOBaseRAII - , public Vegetation::DescriptorNotificationBus::Handler + class DynamicSliceAssetCatalogAndHandler + : public Vegetation::DescriptorNotificationBus::Handler , public AZ::Data::AssetCatalogRequestBus::Handler , public AZ::Data::AssetHandler , public AZ::Data::AssetCatalog , public AzFramework::SliceGameEntityOwnershipServiceRequestBus::Handler { public: - DynamicSliceInstanceSpawnerTests() - : UnitTest::SetRestoreFileIOBaseRAII(m_fileIOMock) - { - AZ::IO::MockFileIOBase::InstallDefaultReturns(m_fileIOMock); - } - - void RegisterComponentDescriptors() override + DynamicSliceAssetCatalogAndHandler() { - m_app.RegisterComponentDescriptor(MockDynamicSliceInstanceVegetationSystemComponent::CreateDescriptor()); - } - - void SetUp() override - { - VegetationComponentTests::SetUp(); - - // Create a real Asset Mananger, and point to ourselves as the handler for DynamicSliceAsset. - AZ::AllocatorInstance::Create(); - AZ::AllocatorInstance::Create(); - - - // Initialize the job manager with 1 thread for the AssetManager to use. - AZ::JobManagerDesc jobDesc; - AZ::JobManagerThreadDesc threadDesc; - jobDesc.m_workerThreads.push_back(threadDesc); - m_jobManager = aznew AZ::JobManager(jobDesc); - m_jobContext = aznew AZ::JobContext(*m_jobManager); - AZ::JobContext::SetGlobalContext(m_jobContext); - - AZ::Data::AssetManager::Descriptor descriptor; - AZ::Data::AssetManager::Create(descriptor); - AZ::Data::AssetManager::Instance().RegisterHandler(this, AZ::AzTypeInfo::Uuid()); - AZ::Data::AssetManager::Instance().RegisterCatalog(this, AZ::AzTypeInfo::Uuid()); - - m_app.RegisterComponentDescriptor(AZ::SliceComponent::CreateDescriptor()); - // Intercept messages for finding assets by name and creating/destroying slices. AZ::Data::AssetCatalogRequestBus::Handler::BusConnect(); AzFramework::SliceGameEntityOwnershipServiceRequestBus::Handler::BusConnect(); } - void TearDown() override + ~DynamicSliceAssetCatalogAndHandler() { - // Give the AssetManager a chance to fire off any lingering events and perform cleanup for any - // dynamic slice assets we loaded. - AZ::Data::AssetManager::Instance().DispatchEvents(); - AzFramework::SliceGameEntityOwnershipServiceRequestBus::Handler::BusDisconnect(); - AZ::Data::AssetManager::Instance().UnregisterCatalog(this); - AZ::Data::AssetManager::Instance().UnregisterHandler(this); - AZ::Data::AssetCatalogRequestBus::Handler::BusDisconnect(); - - AZ::Data::AssetManager::Destroy(); - - AZ::JobContext::SetGlobalContext(nullptr); - delete m_jobContext; - delete m_jobManager; - - AZ::AllocatorInstance::Destroy(); - AZ::AllocatorInstance::Destroy(); - - VegetationComponentTests::TearDown(); } // Helper methods: @@ -207,7 +152,7 @@ namespace UnitTest AZStd::string GetAssetPathById(const AZ::Data::AssetId& /*id*/) override { return m_assetPath; } AZ::Data::AssetId GetAssetIdByPath(const char* /*path*/, const AZ::Data::AssetType& /*typeToRegister*/, bool /*autoRegisterIfNotFound*/) override { return m_assetId; } AZ::Data::AssetInfo GetAssetInfoById(const AZ::Data::AssetId& /*id*/) override - { + { AZ::Data::AssetInfo assetInfo; assetInfo.m_assetId = m_assetId; assetInfo.m_assetType = AZ::AzTypeInfo::Uuid(); @@ -244,9 +189,77 @@ namespace UnitTest AZStd::string m_assetPath; AZ::Data::AssetId m_assetId; int m_numOnLoadedCalls = 0; + }; + + // To test Dynamic Slice spawning, we need to mock up enough of the asset management system and the dynamic slice + // asset handling to pretend like we're loading/unloading dynamic slices successfully. + class DynamicSliceInstanceSpawnerTests + : public VegetationComponentTests + { + public: + DynamicSliceInstanceSpawnerTests() + : m_restoreFileIO(m_fileIOMock) + { + AZ::IO::MockFileIOBase::InstallDefaultReturns(m_fileIOMock); + } + void SetUp() override + { + VegetationComponentTests::SetUp(); + + // Create a real Asset Mananger, and point to ourselves as the handler for DynamicSliceAsset. + AZ::AllocatorInstance::Create(); + AZ::AllocatorInstance::Create(); + + // Initialize the job manager with 1 thread for the AssetManager to use. + AZ::JobManagerDesc jobDesc; + AZ::JobManagerThreadDesc threadDesc; + jobDesc.m_workerThreads.push_back(threadDesc); + m_jobManager = aznew AZ::JobManager(jobDesc); + m_jobContext = aznew AZ::JobContext(*m_jobManager); + AZ::JobContext::SetGlobalContext(m_jobContext); + + AZ::Data::AssetManager::Descriptor descriptor; + AZ::Data::AssetManager::Create(descriptor); + m_testHandler = AZStd::make_unique(); + AZ::Data::AssetManager::Instance().RegisterHandler(m_testHandler.get(), AZ::AzTypeInfo::Uuid()); + AZ::Data::AssetManager::Instance().RegisterCatalog(m_testHandler.get(), AZ::AzTypeInfo::Uuid()); + + m_app.RegisterComponentDescriptor(AZ::SliceComponent::CreateDescriptor()); + } + + void TearDown() override + { + // Clear out the list of queued AssetBus Events before unregistering the AssetHandler + // to make sure pending references to Asset instances are cleared + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::Data::AssetManager::Instance().UnregisterHandler(m_testHandler.get()); + AZ::Data::AssetManager::Instance().UnregisterCatalog(m_testHandler.get()); + AZ::Data::AssetManager::Destroy(); + + m_testHandler.reset(); + + AZ::JobContext::SetGlobalContext(nullptr); + delete m_jobContext; + delete m_jobManager; + + AZ::AllocatorInstance::Destroy(); + AZ::AllocatorInstance::Destroy(); + + VegetationComponentTests::TearDown(); + } + + void RegisterComponentDescriptors() override + { + m_app.RegisterComponentDescriptor(MockDynamicSliceInstanceVegetationSystemComponent::CreateDescriptor()); + } + + protected: + AZStd::unique_ptr m_testHandler; + private: AZ::JobManager* m_jobManager{ nullptr }; AZ::JobContext* m_jobContext{ nullptr }; + SetRestoreFileIOBaseRAII m_restoreFileIO; ::testing::NiceMock m_fileIOMock; }; @@ -276,7 +289,7 @@ namespace UnitTest Vegetation::DynamicSliceInstanceSpawner instanceSpawner2; // Give the second instance spawner a non-default asset reference. - CreateAndSetMockAsset(instanceSpawner2, AZ::Uuid::CreateRandom(), "test"); + m_testHandler->CreateAndSetMockAsset(instanceSpawner2, AZ::Uuid::CreateRandom(), "test"); // The test is written this way because only the == operator is overloaded. EXPECT_TRUE(!(instanceSpawner1 == instanceSpawner2)); @@ -292,14 +305,14 @@ namespace UnitTest EXPECT_TRUE(instanceSpawner.HasEmptyAssetReferences()); // This will test the asset load. - CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); + m_testHandler->CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); // Test the asset unload works too. - Vegetation::DescriptorNotificationBus::Handler::BusConnect(&instanceSpawner); + m_testHandler->Vegetation::DescriptorNotificationBus::Handler::BusConnect(&instanceSpawner); instanceSpawner.UnloadAssets(); EXPECT_FALSE(instanceSpawner.IsLoaded()); EXPECT_FALSE(instanceSpawner.IsSpawnable()); - Vegetation::DescriptorNotificationBus::Handler::BusDisconnect(); + m_testHandler->Vegetation::DescriptorNotificationBus::Handler::BusDisconnect(); } TEST_F(DynamicSliceInstanceSpawnerTests, CreateAndDestroyInstance) @@ -308,7 +321,7 @@ namespace UnitTest Vegetation::DynamicSliceInstanceSpawner instanceSpawner; - CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); + m_testHandler->CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); instanceSpawner.OnRegisterUniqueDescriptor(); diff --git a/Gems/Vegetation/Code/Tests/PrefabInstanceSpawnerTests.cpp b/Gems/Vegetation/Code/Tests/PrefabInstanceSpawnerTests.cpp index b0d88f2d63..3398dba20f 100644 --- a/Gems/Vegetation/Code/Tests/PrefabInstanceSpawnerTests.cpp +++ b/Gems/Vegetation/Code/Tests/PrefabInstanceSpawnerTests.cpp @@ -51,76 +51,21 @@ namespace UnitTest } }; - // To test prefab spawning, we need to mock up enough of the asset management system and the spawnable - // asset handling to pretend like we're loading/unloading spawnables successfully. - class PrefabInstanceSpawnerTests - : public VegetationComponentTests - , public UnitTest::SetRestoreFileIOBaseRAII - , public Vegetation::DescriptorNotificationBus::Handler + class PrefabInstanceHandlerAndCatalog + : public Vegetation::DescriptorNotificationBus::Handler , public AZ::Data::AssetCatalogRequestBus::Handler , public AZ::Data::AssetHandler , public AZ::Data::AssetCatalog { public: - PrefabInstanceSpawnerTests() - : UnitTest::SetRestoreFileIOBaseRAII(m_fileIOMock) + PrefabInstanceHandlerAndCatalog() { - AZ::IO::MockFileIOBase::InstallDefaultReturns(m_fileIOMock); - AzFramework::MockSpawnableEntitiesInterface::InstallDefaultReturns(m_spawnableEntitiesInterfaceMock); - } - - void RegisterComponentDescriptors() override - { - m_app.RegisterComponentDescriptor(MockPrefabInstanceVegetationSystemComponent::CreateDescriptor()); - } - - void SetUp() override - { - VegetationComponentTests::SetUp(); - - // Create a real Asset Mananger, and point to ourselves as the handler for Spawnable. - AZ::AllocatorInstance::Create(); - AZ::AllocatorInstance::Create(); - - - // Initialize the job manager with 1 thread for the AssetManager to use. - AZ::JobManagerDesc jobDesc; - AZ::JobManagerThreadDesc threadDesc; - jobDesc.m_workerThreads.push_back(threadDesc); - m_jobManager = aznew AZ::JobManager(jobDesc); - m_jobContext = aznew AZ::JobContext(*m_jobManager); - AZ::JobContext::SetGlobalContext(m_jobContext); - - AZ::Data::AssetManager::Descriptor descriptor; - AZ::Data::AssetManager::Create(descriptor); - AZ::Data::AssetManager::Instance().RegisterHandler(this, AZ::AzTypeInfo::Uuid()); - AZ::Data::AssetManager::Instance().RegisterCatalog(this, AZ::AzTypeInfo::Uuid()); - - // Intercept messages for finding assets by name. AZ::Data::AssetCatalogRequestBus::Handler::BusConnect(); } - void TearDown() override + ~PrefabInstanceHandlerAndCatalog() { - // Give the AssetManager a chance to fire off any lingering events and perform cleanup for any - // spawnable assets we loaded. - AZ::Data::AssetManager::Instance().DispatchEvents(); - - AZ::Data::AssetManager::Instance().UnregisterCatalog(this); - AZ::Data::AssetManager::Instance().UnregisterHandler(this); - AZ::Data::AssetCatalogRequestBus::Handler::BusDisconnect(); - - AZ::Data::AssetManager::Destroy(); - - AZ::JobContext::SetGlobalContext(nullptr); - delete m_jobContext; - delete m_jobManager; - - AZ::AllocatorInstance::Destroy(); - AZ::AllocatorInstance::Destroy(); - - VegetationComponentTests::TearDown(); } // Helper methods: @@ -227,9 +172,79 @@ namespace UnitTest AZStd::string m_assetPath; AZ::Data::AssetId m_assetId; int m_numOnLoadedCalls = 0; + }; + + // To test Dynamic Slice spawning, we need to mock up enough of the asset management system and the dynamic slice + // asset handling to pretend like we're loading/unloading dynamic slices successfully. + class PrefabInstanceSpawnerTests + : public VegetationComponentTests + { + public: + PrefabInstanceSpawnerTests() + : m_restoreFileIO(m_fileIOMock) + { + AZ::IO::MockFileIOBase::InstallDefaultReturns(m_fileIOMock); + AzFramework::MockSpawnableEntitiesInterface::InstallDefaultReturns(m_spawnableEntitiesInterfaceMock); + } + + void SetUp() override + { + VegetationComponentTests::SetUp(); + + // Create a real Asset Mananger, and point to ourselves as the handler for DynamicSliceAsset. + AZ::AllocatorInstance::Create(); + AZ::AllocatorInstance::Create(); + + // Initialize the job manager with 1 thread for the AssetManager to use. + AZ::JobManagerDesc jobDesc; + AZ::JobManagerThreadDesc threadDesc; + jobDesc.m_workerThreads.push_back(threadDesc); + m_jobManager = aznew AZ::JobManager(jobDesc); + m_jobContext = aznew AZ::JobContext(*m_jobManager); + AZ::JobContext::SetGlobalContext(m_jobContext); + + AZ::Data::AssetManager::Descriptor descriptor; + AZ::Data::AssetManager::Create(descriptor); + m_testHandler = AZStd::make_unique(); + AZ::Data::AssetManager::Instance().RegisterHandler(m_testHandler.get(), AZ::AzTypeInfo::Uuid()); + AZ::Data::AssetManager::Instance().RegisterCatalog(m_testHandler.get(), AZ::AzTypeInfo::Uuid()); + + m_app.RegisterComponentDescriptor(AZ::SliceComponent::CreateDescriptor()); + } + + void TearDown() override + { + // Clear out the list of queued AssetBus Events before unregistering the AssetHandler + // to make sure pending references to Asset instances are cleared + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::Data::AssetManager::Instance().UnregisterHandler(m_testHandler.get()); + AZ::Data::AssetManager::Instance().UnregisterCatalog(m_testHandler.get()); + AZ::Data::AssetManager::Destroy(); + + m_testHandler.reset(); + + AZ::JobContext::SetGlobalContext(nullptr); + delete m_jobContext; + delete m_jobManager; + + AZ::AllocatorInstance::Destroy(); + AZ::AllocatorInstance::Destroy(); + + VegetationComponentTests::TearDown(); + } + + void RegisterComponentDescriptors() override + { + m_app.RegisterComponentDescriptor(MockPrefabInstanceVegetationSystemComponent::CreateDescriptor()); + } + + protected: + AZStd::unique_ptr m_testHandler; + private: AZ::JobManager* m_jobManager{ nullptr }; AZ::JobContext* m_jobContext{ nullptr }; + SetRestoreFileIOBaseRAII m_restoreFileIO; ::testing::NiceMock m_fileIOMock; ::testing::NiceMock m_spawnableEntitiesInterfaceMock; }; @@ -259,7 +274,7 @@ namespace UnitTest Vegetation::PrefabInstanceSpawner instanceSpawner2; // Give the second instance spawner a non-default asset reference. - CreateAndSetMockAsset(instanceSpawner2, AZ::Uuid::CreateRandom(), "test"); + m_testHandler->CreateAndSetMockAsset(instanceSpawner2, AZ::Uuid::CreateRandom(), "test"); // The test is written this way because only the == operator is overloaded. EXPECT_TRUE(!(instanceSpawner1 == instanceSpawner2)); @@ -275,14 +290,14 @@ namespace UnitTest EXPECT_TRUE(instanceSpawner.HasEmptyAssetReferences()); // This will test the asset load. - CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); + m_testHandler->CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); // Test the asset unload works too. - Vegetation::DescriptorNotificationBus::Handler::BusConnect(&instanceSpawner); + m_testHandler->Vegetation::DescriptorNotificationBus::Handler::BusConnect(&instanceSpawner); instanceSpawner.UnloadAssets(); EXPECT_FALSE(instanceSpawner.IsLoaded()); EXPECT_FALSE(instanceSpawner.IsSpawnable()); - Vegetation::DescriptorNotificationBus::Handler::BusDisconnect(); + m_testHandler->Vegetation::DescriptorNotificationBus::Handler::BusDisconnect(); } TEST_F(PrefabInstanceSpawnerTests, CreateAndDestroyInstance) @@ -291,7 +306,7 @@ namespace UnitTest Vegetation::PrefabInstanceSpawner instanceSpawner; - CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); + m_testHandler->CreateAndSetMockAsset(instanceSpawner, AZ::Uuid::CreateRandom(), "test"); instanceSpawner.OnRegisterUniqueDescriptor(); diff --git a/Gems/Vegetation/Code/Tests/VegetationMocks.h b/Gems/Vegetation/Code/Tests/VegetationMocks.h index ee620c81a2..ec3760057c 100644 --- a/Gems/Vegetation/Code/Tests/VegetationMocks.h +++ b/Gems/Vegetation/Code/Tests/VegetationMocks.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/Vegetation/Code/Tests/VegetationTest.h b/Gems/Vegetation/Code/Tests/VegetationTest.h index cf7c9b70a1..2ae8ac9cca 100644 --- a/Gems/Vegetation/Code/Tests/VegetationTest.h +++ b/Gems/Vegetation/Code/Tests/VegetationTest.h @@ -21,21 +21,34 @@ namespace UnitTest { class VegetationComponentTests - : public ::testing::Test + : public ScopedAllocatorSetupFixture { protected: + VegetationComponentTests() + : ScopedAllocatorSetupFixture( + []() { + AZ::SystemAllocator::Descriptor desc; + desc.m_heap.m_fixedMemoryBlocksByteSize[0] = 20 * 1024 * 1024; + desc.m_stackRecordLevels = 20; + return desc; + }() + ) + { + } + AZ::ComponentApplication m_app; virtual void RegisterComponentDescriptors() {} void SetUp() override { - AZ::ComponentApplication::Descriptor appDesc; - appDesc.m_memoryBlocksByteSize = 20 * 1024 * 1024; - appDesc.m_recordingMode = AZ::Debug::AllocationRecords::RECORD_NO_RECORDS; - appDesc.m_stackRecordLevels = 20; + if (AZ::Debug::AllocationRecords* records = AZ::AllocatorInstance::GetAllocator().GetRecords(); + records != nullptr) + { + records->SetMode(AZ::Debug::AllocationRecords::RECORD_NO_RECORDS); + } - m_app.Create(appDesc); + m_app.Create({}); RegisterComponentDescriptors(); } diff --git a/Gems/WhiteBox/Code/Source/Asset/EditorWhiteBoxMeshAsset.cpp b/Gems/WhiteBox/Code/Source/Asset/EditorWhiteBoxMeshAsset.cpp index 00f5c0e4f4..a02f0e3c6b 100644 --- a/Gems/WhiteBox/Code/Source/Asset/EditorWhiteBoxMeshAsset.cpp +++ b/Gems/WhiteBox/Code/Source/Asset/EditorWhiteBoxMeshAsset.cpp @@ -11,6 +11,7 @@ #include "EditorWhiteBoxMeshAsset.h" #include "Util/WhiteBoxEditorUtil.h" +#include #include #include #include diff --git a/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp b/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp index f18b69393c..ee0052d5b9 100644 --- a/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp +++ b/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp @@ -16,12 +16,14 @@ #include "Util/WhiteBoxEditorUtil.h" #include "WhiteBoxComponent.h" +#include #include #include #include #include #include #include +#include #include #include #include @@ -128,7 +130,7 @@ namespace WhiteBox AzToolsFramework::EditorPythonRunnerRequestBus::Broadcast( &AzToolsFramework::EditorPythonRunnerRequestBus::Events::ExecuteByFilenameWithArgs, - "@devroot@/Gems/WhiteBox/Editor/Scripts/default_shapes.py", scriptArgs); + "@engroot@/Gems/WhiteBox/Editor/Scripts/default_shapes.py", scriptArgs); EditorWhiteBoxComponentNotificationBus::Event( AZ::EntityComponentIdPair(GetEntityId(), GetId()), @@ -498,13 +500,13 @@ namespace WhiteBox static AZStd::string WhiteBoxPathAtProjectRoot(const AZStd::string_view name, const AZStd::string_view extension) { - const char* projectFolder = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult( - projectFolder, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); - - return AZStd::string::format( - "%s\\%.*s_whitebox.%.*s", projectFolder, aznumeric_cast(name.size()), name.data(), - aznumeric_cast(extension.size()), extension.data()); + AZ::IO::Path whiteBoxPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + settingsRegistry->Get(whiteBoxPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); + } + whiteBoxPath /= AZ::IO::FixedMaxPathString::format("%.*s.%.*s", AZ_STRING_ARG(name), AZ_STRING_ARG(extension)); + return whiteBoxPath.Native(); } void EditorWhiteBoxComponent::ExportToFile() diff --git a/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp b/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp index a43b48d3b9..913778cc44 100644 --- a/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp +++ b/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp @@ -73,7 +73,9 @@ namespace WhiteBox for (AZ::u32 i = 0; i < triangleCount; ++i) { +#if defined(AZ_ENABLE_TRACING) const auto& trianglePositions = trianglesPositions[i]; +#endif const auto& triangleUVs = trianglesUVs[i]; const auto& triangleEdges = trianglesEdges[i]; diff --git a/Registry/CMakeLists.txt b/Registry/CMakeLists.txt index 100867010d..773adac07f 100644 --- a/Registry/CMakeLists.txt +++ b/Registry/CMakeLists.txt @@ -12,8 +12,6 @@ endif() ly_install_directory(DIRECTORIES .) -cmake_path(RELATIVE_PATH CMAKE_RUNTIME_OUTPUT_DIRECTORY BASE_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE runtime_output_directory) - ly_install_directory(DIRECTORIES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/Registry - DESTINATION ${runtime_output_directory}/${PAL_PLATFORM_NAME}/$ + DESTINATION ${runtime_output_directory} ) diff --git a/Registry/fileio.setreg b/Registry/fileio.setreg new file mode 100644 index 0000000000..d89e9f3f89 --- /dev/null +++ b/Registry/fileio.setreg @@ -0,0 +1,26 @@ +{ + "O3DE": { + "AzCore": { + "FileIO": { + "DeprecatedAliases": [ + { + "OldAlias": "@assets@", + "NewAlias": "@products@" + }, + { + "OldAlias": "@root@", + "NewAlias": "@products@" + }, + { + "OldAlias": "@devassets@", + "NewAlias": "@projectroot@" + }, + { + "OldAlias": "@devroot@", + "NewAlias": "@engroot@" + } + ] + } + } + } +} diff --git a/Templates/DefaultProject/Template/project.json b/Templates/DefaultProject/Template/project.json index 7f6b5d3b78..b52b0baf27 100644 --- a/Templates/DefaultProject/Template/project.json +++ b/Templates/DefaultProject/Template/project.json @@ -11,5 +11,6 @@ "${Name}" ], "icon_path": "preview.png", - "engine": "o3de" + "engine": "o3de", + "external_subdirectories": [] } diff --git a/Templates/MinimalProject/Template/project.json b/Templates/MinimalProject/Template/project.json index 7f6b5d3b78..b52b0baf27 100644 --- a/Templates/MinimalProject/Template/project.json +++ b/Templates/MinimalProject/Template/project.json @@ -11,5 +11,6 @@ "${Name}" ], "icon_path": "preview.png", - "engine": "o3de" + "engine": "o3de", + "external_subdirectories": [] } diff --git a/Tools/7za.exe b/Tools/7za.exe deleted file mode 100644 index 8a7a9ab6fb..0000000000 --- a/Tools/7za.exe +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:77613cca716edf68b9d5bab951463ed7fade5bc0ec465b36190a76299c50f117 -size 733696 diff --git a/Tools/7za_legal_notice.txt b/Tools/7za_legal_notice.txt deleted file mode 100644 index 6bcdfb1e31..0000000000 --- a/Tools/7za_legal_notice.txt +++ /dev/null @@ -1,36 +0,0 @@ -Amazon note: Source for 7-zip is hosted at -https://s3-us-west-2.amazonaws.com/ly-legal/LicenseConformance/7-zip/18.05/7z1805-src.7z - - - - 7-Zip Extra - ~~~~~~~~~~~ - License for use and distribution - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Copyright (C) 1999-2015 Igor Pavlov. - - 7-Zip Extra files are under the GNU LGPL license. - - - Notes: - You can use 7-Zip Extra on any computer, including a computer in a commercial - organization. You don't need to register or pay for 7-Zip. - - - GNU LGPL information - -------------------- - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You can receive a copy of the GNU Lesser General Public License from - http://www.gnu.org/ - diff --git a/Tools/LyTestTools/ly_test_tools/__init__.py b/Tools/LyTestTools/ly_test_tools/__init__.py index 3fb84e9fe5..58340342ab 100755 --- a/Tools/LyTestTools/ly_test_tools/__init__.py +++ b/Tools/LyTestTools/ly_test_tools/__init__.py @@ -11,16 +11,16 @@ import sys logger = logging.getLogger(__name__) -# Supported platforms. +# Supported platforms ALL_PLATFORM_OPTIONS = ['android', 'ios', 'linux', 'mac', 'windows'] -ALL_LAUNCHER_OPTIONS = ['android', 'base', 'mac', 'windows', 'windows_editor', 'windows_dedicated', 'windows_generic'] +ALL_LAUNCHER_OPTIONS = ['android', 'base', 'linux', 'mac', 'windows', 'windows_editor', 'windows_dedicated', 'windows_generic'] ANDROID = False IOS = False # Not implemented - see SPEC-2505 LINUX = sys.platform.startswith('linux') # Not implemented - see SPEC-2501 MAC = sys.platform.startswith('darwin') WINDOWS = sys.platform.startswith('win') -# Detect platforms. +# Detect available platforms HOST_OS_PLATFORM = 'unknown' HOST_OS_EDITOR = 'unknown' HOST_OS_DEDICATED_SERVER = 'unknown' @@ -51,9 +51,12 @@ elif MAC: from ly_test_tools.launchers import MacLauncher LAUNCHERS['mac'] = MacLauncher elif LINUX: - logger.warning(f'Linux operating system is currently not supported, LyTestTools only supports Windows and Mac.') HOST_OS_PLATFORM = 'linux' - HOST_OS_EDITOR = NotImplementedError('LyTestTools does not yet support Linux editor') - HOST_OS_DEDICATED_SERVER = NotImplementedError('LyTestTools does not yet support Linux dedicated server') + HOST_OS_EDITOR = 'linux_editor' + HOST_OS_DEDICATED_SERVER = 'linux_dedicated' + from ly_test_tools.launchers.platforms.linux.launcher import (LinuxLauncher, LinuxEditor, DedicatedLinuxLauncher) + LAUNCHERS['linux'] = LinuxLauncher + LAUNCHERS['linux_editor'] = LinuxEditor + LAUNCHERS['linux_dedicated'] = DedicatedLinuxLauncher else: - logger.warning(f'WARNING: LyTestTools only supports Windows and Mac, got HOST_OS_PLATFORM: "{HOST_OS_PLATFORM}".') + logger.warning(f'WARNING: LyTestTools only supports Windows, Mac, and Linux. Unexpectedly detected HOST_OS_PLATFORM: "{HOST_OS_PLATFORM}".') diff --git a/Tools/LyTestTools/ly_test_tools/_internal/managers/platforms/linux.py b/Tools/LyTestTools/ly_test_tools/_internal/managers/platforms/linux.py new file mode 100644 index 0000000000..cdbd379183 --- /dev/null +++ b/Tools/LyTestTools/ly_test_tools/_internal/managers/platforms/linux.py @@ -0,0 +1,78 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT + +Linux directory and workspace mappings +""" + +import os +import logging + +from ly_test_tools._internal.managers.workspace import AbstractWorkspaceManager +from ly_test_tools._internal.managers.abstract_resource_locator import AbstractResourceLocator + +logger = logging.getLogger(__name__) + +CACHE_DIR = 'linux' +CONFIG_FILE = 'system_linux_pc.cfg' + + +class _LinuxResourceManager(AbstractResourceLocator): + """ + Override for locating resources in a Linux operating system running LyTestTools. + """ + def __init__(self, build_directory: str, project: str): + pass + + def platform_config_file(self): + """ + :return: path to the platform config file + """ + return os.path.join(self.engine_root(), CONFIG_FILE) + + def platform_cache(self): + """ + :return: path to cache for the Linux operating system + """ + return os.path.join(self.project_cache(), CACHE_DIR) + + def project_log(self): + """ + :return: path to 'log' dir in the platform cache dir + """ + return os.path.join(self.project(), 'user', 'log') + + def project_screenshots(self): + """ + :return: path to 'screenshot' dir in the platform cache dir + """ + return os.path.join(self.project(), 'user', 'ScreenShots') + + def editor_log(self): + """ + :return: path to editor.log + """ + return os.path.join(self.project_log(), "editor.log") + + +class LinuxWorkspaceManager(AbstractWorkspaceManager): + """ + A Linux host WorkspaceManager. Contains Mac overridden functions for the AbstractWorkspaceManager class. + Also creates a Mac host ResourceLocator for directory and build mappings. + """ + def __init__( + self, + build_directory=None, + project=None, + tmp_path=None, + output_path=None, + ): + # Type: (str,str,str,str) -> None + super(LinuxWorkspaceManager, self).__init__( + _LinuxResourceManager(build_directory, project), + project=project, + tmp_path=tmp_path, + output_path=output_path, + ) diff --git a/Tools/LyTestTools/ly_test_tools/builtin/helpers.py b/Tools/LyTestTools/ly_test_tools/builtin/helpers.py index f40c8c2234..59117a42f9 100755 --- a/Tools/LyTestTools/ly_test_tools/builtin/helpers.py +++ b/Tools/LyTestTools/ly_test_tools/builtin/helpers.py @@ -9,7 +9,7 @@ Helper file for assisting in building workspaces and setting up LTT with the cur import ly_test_tools._internal.pytest_plugin as pytest_plugin import ly_test_tools._internal.managers.workspace as internal_workspace -from ly_test_tools import MAC, WINDOWS +from ly_test_tools import LINUX, MAC, WINDOWS import os, stat @@ -47,6 +47,11 @@ def create_builtin_workspace( elif MAC: from ly_test_tools._internal.managers.platforms.mac import MacWorkspaceManager build_class = MacWorkspaceManager + elif LINUX: + from ly_test_tools._internal.managers.platforms.linux import LinuxWorkspaceManager + build_class = LinuxWorkspaceManager + else: + raise NotImplementedError("No workspace manager found for current Operating System") instance = build_class( build_directory=build_directory, diff --git a/Tools/LyTestTools/ly_test_tools/environment/process_utils.py b/Tools/LyTestTools/ly_test_tools/environment/process_utils.py index be2f279512..1c0be299a8 100755 --- a/Tools/LyTestTools/ly_test_tools/environment/process_utils.py +++ b/Tools/LyTestTools/ly_test_tools/environment/process_utils.py @@ -12,8 +12,8 @@ import psutil import subprocess import ctypes +import ly_test_tools import ly_test_tools.environment.waiter as waiter -from ly_test_tools import WINDOWS, MAC logger = logging.getLogger(__name__) _PROCESS_OUTPUT_ENCODING = 'utf-8' @@ -182,7 +182,7 @@ def process_is_unresponsive(name): :param name: the name of the process to check :return: True if the specified process is unresponsive and False otherwise """ - if WINDOWS: + if ly_test_tools.WINDOWS: output = check_output(['tasklist', '/FI', f'IMAGENAME eq {name}', '/FI', 'STATUS eq NOT RESPONDING']) @@ -194,7 +194,7 @@ def process_is_unresponsive(name): return True logger.debug(f"Process '{name}' was not unresponsive.") return False - elif MAC: + else: cmd = ["ps", "-axc", "-o", "command,state"] output = check_output(cmd) for line in output.splitlines()[1:]: @@ -209,8 +209,6 @@ def process_is_unresponsive(name): return True logger.debug(f"Process '{name}' was not unresponsive.") return False - else: - raise NotImplementedError('Only Windows and Mac hosts are supported.') def check_output(command, **kwargs): @@ -406,7 +404,7 @@ def close_windows_process(pid, timeout=20, raise_on_missing=False): :param pid: the pid of the process to kill :param raise_on_missing: if set to True, raise RuntimeError if the process does not already exist """ - if not WINDOWS: + if not ly_test_tools.WINDOWS: raise NotImplementedError("close_windows_process() is only implemented on Windows.") if pid is None: diff --git a/Tools/LyTestTools/ly_test_tools/environment/reg_cleaner.py b/Tools/LyTestTools/ly_test_tools/environment/reg_cleaner.py index a3dee1319f..1ffd5a1b4c 100755 --- a/Tools/LyTestTools/ly_test_tools/environment/reg_cleaner.py +++ b/Tools/LyTestTools/ly_test_tools/environment/reg_cleaner.py @@ -8,8 +8,10 @@ Reg cleaner: tools for working with the lumberyard windows registry keys """ import logging import os -import winreg +import ly_test_tools +if ly_test_tools.WINDOWS: + import winreg # OS-specific module availability, must be mocked if this file is accessed elsewhere e.g. unit tests import ly_test_tools.environment.process_utils as process_utils CONST_LY_REG = r'SOFTWARE\O3DE\O3DE' diff --git a/Tools/LyTestTools/ly_test_tools/environment/watchdog.py b/Tools/LyTestTools/ly_test_tools/environment/watchdog.py index 58ac87d9e7..6186a3d354 100755 --- a/Tools/LyTestTools/ly_test_tools/environment/watchdog.py +++ b/Tools/LyTestTools/ly_test_tools/environment/watchdog.py @@ -14,8 +14,8 @@ import re import psutil import time +import ly_test_tools import ly_test_tools.environment.process_utils as process_utils -from ly_test_tools import WINDOWS logger = logging.getLogger(__name__) @@ -28,7 +28,7 @@ class Watchdog(object): DEFAULT_JOIN_TIMEOUT = 10 # seconds def __init__(self, bool_fn, interval=1, raise_on_condition=True, name='ly_test_watchdog', error_message=''): - # type: (func, int, bool, str, str) -> Watchdog + # type: (function, int, bool, str, str) -> Watchdog """ A Watchdog object that takes in a boolean function. It spawns a thread that loops over the boolean function until it returns True. If the boolean function returns True, then a flag will be set and an exception @@ -44,7 +44,7 @@ class Watchdog(object): """ self.caught_failure = False self.name = name - + self._bool_fn = bool_fn self._interval = interval self._raise_on_condition = raise_on_condition @@ -66,7 +66,7 @@ class Watchdog(object): self.caught_failure = False def stop(self, join_timeout=DEFAULT_JOIN_TIMEOUT): - # type: () -> None + # type: (int) -> None """ Stops the watchdog's thread if it's executing by enabling its shutdown Event. If the target function's condition was found, then it will either raise an exception or log an error message. @@ -106,7 +106,7 @@ class Watchdog(object): """ The main function of the watchdog thread. It will repeatedly call its target function until the target function returns True, in which it will set the self.caught_failure attribute to True. - + :return: None """ while True: @@ -128,7 +128,7 @@ class ProcessUnresponsiveWatchdog(Watchdog): Watches a process ID and reports if it is unresponsive for a given timeout. If multiple processes need to be watched, then multiple watchdogs should be instantiated. Note: This is for windows OS only. - + :param process_id: The process id to watch :param interval: The interval (in seconds) for how frequently the bool_fn is called on the thread. :param raise_on_condition: If True, raises an exception when bool_fn returns True. If False, logs an error @@ -138,8 +138,8 @@ class ProcessUnresponsiveWatchdog(Watchdog): :param unresponsive_timeout_seconds: How long the process needs to be unresponsive for in order for the watchdog to report (in seconds). """ - if not WINDOWS: - raise (NotImplementedError, "Process watchdog is only implemented on Windows.") + if not ly_test_tools.WINDOWS: + pass # TODO add non-windows support self._unresponsive_timeout = unresponsive_timeout_seconds self._calculated_timeout_point = None self._pid = process_id diff --git a/Tools/LyTestTools/ly_test_tools/launchers/__init__.py b/Tools/LyTestTools/ly_test_tools/launchers/__init__.py index bb299d89f9..94b712bade 100755 --- a/Tools/LyTestTools/ly_test_tools/launchers/__init__.py +++ b/Tools/LyTestTools/ly_test_tools/launchers/__init__.py @@ -6,7 +6,7 @@ SPDX-License-Identifier: Apache-2.0 OR MIT """ from ly_test_tools.launchers.platforms.base import Launcher +from ly_test_tools.launchers.platforms.linux.launcher import LinuxLauncher, LinuxEditor, DedicatedLinuxLauncher from ly_test_tools.launchers.platforms.mac.launcher import MacLauncher -from ly_test_tools.launchers.platforms.win.launcher import ( - WinLauncher, DedicatedWinLauncher, WinEditor, WinGenericLauncher) +from ly_test_tools.launchers.platforms.win.launcher import WinLauncher, DedicatedWinLauncher, WinEditor, WinGenericLauncher from ly_test_tools.launchers.platforms.android.launcher import AndroidLauncher diff --git a/Tools/LyTestTools/ly_test_tools/launchers/platforms/linux/__init__.py b/Tools/LyTestTools/ly_test_tools/launchers/platforms/linux/__init__.py new file mode 100644 index 0000000000..f5193b300e --- /dev/null +++ b/Tools/LyTestTools/ly_test_tools/launchers/platforms/linux/__init__.py @@ -0,0 +1,6 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" diff --git a/Tools/LyTestTools/ly_test_tools/launchers/platforms/linux/launcher.py b/Tools/LyTestTools/ly_test_tools/launchers/platforms/linux/launcher.py new file mode 100644 index 0000000000..210519d197 --- /dev/null +++ b/Tools/LyTestTools/ly_test_tools/launchers/platforms/linux/launcher.py @@ -0,0 +1,224 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT + +Linux compatible launcher +""" + +import logging +import os +import subprocess + +import ly_test_tools.environment.waiter +import ly_test_tools.launchers.exceptions + +from ly_test_tools.launchers.platforms.base import Launcher +from ly_test_tools.launchers.exceptions import TeardownError, ProcessNotStartedError +from tempfile import TemporaryFile + +log = logging.getLogger(__name__) + + +class LinuxLauncher(Launcher): + def __init__(self, build, args): + super(LinuxLauncher, self).__init__(build, args) + self._proc = None + self._ret_code = None + self._tmpout = None + log.debug("Initialized Linux Launcher") + + def binary_path(self): + """ + Return full path to the launcher for this build's configuration and project + + :return: full path to .GameLauncher + """ + assert self.workspace.project is not None + return os.path.join(self.workspace.paths.build_directory(), f"{self.workspace.project}.GameLauncher") + + def setup(self, backupFiles=True, launch_ap=True, configure_settings=True): + """ + Perform setup of this launcher, must be called before launching. + Subclasses should call its parent's setup() before calling its own code, unless it changes configuration files + + :param backupFiles: Bool to backup setup files + :param lauch_ap: Bool to lauch the asset processor + :return: None + """ + # Backup + if backupFiles: + self.backup_settings() + + # Base setup defaults to None + if launch_ap is None: + launch_ap = True + + # Modify and re-configure + if configure_settings: + self.configure_settings() + super(LinuxLauncher, self).setup(backupFiles, launch_ap) + + def launch(self): + """ + Launch the executable and track the subprocess + + :return: None + """ + command = [self.binary_path()] + self.args + self._tmpout = TemporaryFile() + self._proc = subprocess.Popen(command, stdout=self._tmpout, stderr=self._tmpout, universal_newlines=True) + log.debug(f"Started Linux Launcher with command: {command}") + + def get_output(self, encoding="utf-8"): + if self._tmpout is None: + raise ProcessNotStartedError("Process must be started before retrieving output") + + self._tmpout.seek(0) + return self._tmpout.read().decode(encoding) + + def teardown(self): + """ + Perform teardown of this launcher, undoing actions taken by calling setup() + Subclasses should call its parent's teardown() after performing its own teardown. + + :return: None + """ + self.restore_settings() + super(LinuxLauncher, self).teardown() + + def kill(self): + """ + This is a hard kill, and then wait to make sure until it actually ended. + + :return: None + """ + if self._proc is not None: + self._proc.kill() + ly_test_tools.environment.waiter.wait_for( + lambda: not self.is_alive(), + exc=ly_test_tools.launchers.exceptions.TeardownError( + f"Unable to terminate active Linux Launcher with process ID {self._proc.pid}") + ) + self._proc = None + self._ret_code = None + log.debug("Linux Launcher terminated successfully") + + def is_alive(self): + """ + Check the process to verify activity. Side effect of setting self.proc to None if it has ended. + + :return: None + """ + if self._proc is None: + return False + else: + if self._proc.poll() is not None: + self._ret_code = self._proc.poll() + self._proc = None + return False + return True + + def get_pid(self): + # type: () -> int or None + """ + Returns the pid of the launcher process if it exists, else it returns None + + :return: process id or None + """ + if self._proc: + return self._proc.pid + return None + + def get_returncode(self): + # type: () -> int or None + """ + Returns the returncode of the launcher process if it exists, else return None. + The returncode attribute is set when the process is terminated. + + :return: The returncode of the launcher's process + """ + if self._proc: + return self._proc.poll() + else: + return self._ret_code + + def check_returncode(self): + # type: () -> None + """ + Checks the return code of the launcher if it exists. Raises a CrashError if the returncode is non-zero. Returns + None otherwise. This function must be called after exiting the launcher properly and NOT using its provided + teardown(). Provided teardown() will always return a non-zero returncode and should not be checked. + + :return: None + """ + return_code = self.get_returncode() + if return_code != 0: + log.error(f"Launcher exited with non-zero return code: {return_code}") + raise ly_test_tools.launchers.exceptions.CrashError() + return None + + def configure_settings(self): + """ + Configures system level settings and syncs the launcher to the targeted console IP. + + :return: None + """ + # Update settings via the settings registry to avoid modifying the bootstrap.cfg + host_ip = '127.0.0.1' + self.args.append(f'--regset="/Amazon/AzCore/Bootstrap/project_path={self.workspace.paths.project()}"') + self.args.append(f'--regset="/Amazon/AzCore/Bootstrap/remote_ip={host_ip}"') + self.args.append('--regset="/Amazon/AzCore/Bootstrap/wait_for_connect=1"') + self.args.append(f'--regset="/Amazon/AzCore/Bootstrap/allowed_list={host_ip}"') + + self.workspace.settings.modify_platform_setting("r_AssetProcessorShaderCompiler", 1) + self.workspace.settings.modify_platform_setting("r_ShaderCompilerServer", host_ip) + self.workspace.settings.modify_platform_setting("log_RemoteConsoleAllowedAddresses", host_ip) + + +class DedicatedLinuxLauncher(LinuxLauncher): + + def setup(self, backupFiles=True, launch_ap=False): + """ + Perform setup of this launcher, must be called before launching. + Subclasses should call its parent's setup() before calling its own code, unless it changes configuration files + + :param backupFiles: Bool to backup setup files + :param lauch_ap: Bool to lauch the asset processor + :return: None + """ + # Base setup defaults to None + if launch_ap is None: + launch_ap = False + + super(DedicatedLinuxLauncher, self).setup(backupFiles, launch_ap) + + def binary_path(self): + """ + Return full path to the dedicated server launcher for the build directory. + + :return: full path to Launcher_Server + """ + assert self.workspace.project is not None, ( + 'Project cannot be NoneType - please specify a project name string.') + return os.path.join(f"{self.workspace.paths.build_directory()}", + f"{self.workspace.project}.ServerLauncher") + + +class LinuxEditor(LinuxLauncher): + + def __init__(self, build, args): + super(LinuxEditor, self).__init__(build, args) + self.args.append('--regset="/Amazon/Settings/EnableSourceControl=false"') + self.args.append('--regset="/Amazon/AWS/Preferences/AWSAttributionConsentShown=true"') + self.args.append('--regset="/Amazon/AWS/Preferences/AWSAttributionEnabled=false"') + + def binary_path(self): + """ + Return full path to the Editor for this build's configuration and project + + :return: full path to Editor + """ + assert self.workspace.project is not None + return os.path.join(self.workspace.paths.build_directory(), "Editor") diff --git a/Tools/LyTestTools/tests/CMakeLists.txt b/Tools/LyTestTools/tests/CMakeLists.txt index a6d7a0734c..31766f3080 100644 --- a/Tools/LyTestTools/tests/CMakeLists.txt +++ b/Tools/LyTestTools/tests/CMakeLists.txt @@ -39,6 +39,14 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedT TEST_SUITE smoke COMPONENT TestTools ) + + ly_add_pytest( + NAME LyTestTools_IntegTests_ProcessUtilsLinux_smoke_no_gpu + PATH ${CMAKE_CURRENT_LIST_DIR}/integ/test_process_utils_linux.py + TEST_SERIAL + TEST_SUITE smoke + COMPONENT TestTools + ) # Regression tests. ly_add_pytest( diff --git a/Tools/LyTestTools/tests/integ/test_process_utils_linux.py b/Tools/LyTestTools/tests/integ/test_process_utils_linux.py new file mode 100644 index 0000000000..23ad8f6653 --- /dev/null +++ b/Tools/LyTestTools/tests/integ/test_process_utils_linux.py @@ -0,0 +1,39 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" +import subprocess +import pytest + +import ly_test_tools.environment.process_utils as process_utils +import ly_test_tools.environment.waiter as waiter +from ly_test_tools import LINUX + +if LINUX: + pytestmark = pytest.mark.SUITE_smoke +else: + pytestmark = pytest.mark.skipif(not LINUX, reason="Only runs on Linux") + + +class TestProcessUtils(object): + + def test_KillLinuxProcess_ProcessStarted_KilledSuccessfully(self): + # Construct a simple timeout command + linux_executable = 'timeout' + command = [linux_executable, '5s', 'echo'] + + # Verification function for the waiter to call + def process_killed(): + return not process_utils.process_exists(linux_executable, ignore_extensions=True) + + # Create a new process with no output in a new session + with subprocess.Popen(command, stdout=subprocess.DEVNULL, start_new_session=True): + # Ensure that the process was started + assert process_utils.process_exists(linux_executable, ignore_extensions=True), \ + f"Process '{linux_executable}' was expected to exist, but could not be found." + # Kill the process using the process_utils module + process_utils.kill_processes_named(linux_executable, ignore_extensions=True) + # Verify that the process was killed + waiter.wait_for(process_killed, timeout=2) # Raises exception if the process is alive. diff --git a/Tools/LyTestTools/tests/unit/test_builtin_helpers.py b/Tools/LyTestTools/tests/unit/test_builtin_helpers.py index 9eb8a1703d..1c583632a8 100755 --- a/Tools/LyTestTools/tests/unit/test_builtin_helpers.py +++ b/Tools/LyTestTools/tests/unit/test_builtin_helpers.py @@ -8,7 +8,6 @@ Unit tests for ly_test_tools.builtin.helpers functions. """ import unittest.mock as mock import os - import pytest import ly_test_tools.builtin.helpers @@ -112,10 +111,11 @@ class TestBuiltinHelpers(object): ly_test_tools._internal.managers.abstract_resource_locator._find_engine_root( initial_path='mock_dev_dir') + @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager.teardown') @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager.setup') @mock.patch('ly_test_tools._internal.managers.artifact_manager.NullArtifactManager', mock.MagicMock()) @mock.patch('os.path.exists', mock.MagicMock(return_value=True)) - def test_SetupBuiltinWorkspace_ValidWorkspaceSetup_ReturnsWorkspaceObject(self, mock_setup): + def test_SetupTeardownBuiltinWorkspace_ValidWorkspaceSetup_ReturnsWorkspaceObject(self, mock_setup, mock_teardown): mock_test_name = 'mock_test_name' mock_test_amount = 10 mock_workspace = ly_test_tools.builtin.helpers.create_builtin_workspace( @@ -125,25 +125,16 @@ class TestBuiltinHelpers(object): output_path='mock_output_path', ) - under_test = ly_test_tools.builtin.helpers.setup_builtin_workspace( + setup_test = ly_test_tools.builtin.helpers.setup_builtin_workspace( mock_workspace, mock_test_name, mock_test_amount) - assert under_test == mock_workspace + assert setup_test == mock_workspace assert mock_setup.call_count == 1 mock_workspace.artifact_manager.set_test_name.assert_called_with( test_name=mock_test_name, amount=mock_test_amount) - @mock.patch('ly_test_tools._internal.managers.workspace.AbstractWorkspaceManager.teardown') - @mock.patch('os.path.exists', mock.MagicMock(return_value=True)) - def test_TeardownBuiltinWorkspace_ValidWorkspaceSetup_ReturnsWorkspaceObject(self, mock_teardown): - mock_workspace = ly_test_tools.builtin.helpers.create_builtin_workspace( - build_directory='build_directory', - project='mock_project', - tmp_path='mock_tmp_path', - output_path='mock_output_path', - ) - - under_test = ly_test_tools.builtin.helpers.teardown_builtin_workspace(mock_workspace) + # Teardown not tested separately due to patched MockedAbstractResourceLocator creating a StopIteration error on Linux + teardown_test = ly_test_tools.builtin.helpers.teardown_builtin_workspace(mock_workspace) - assert under_test == mock_workspace + assert teardown_test == mock_workspace assert mock_teardown.call_count == 1 diff --git a/Tools/LyTestTools/tests/unit/test_file_system.py b/Tools/LyTestTools/tests/unit/test_file_system.py index 80c7e51f53..53ca5a700e 100755 --- a/Tools/LyTestTools/tests/unit/test_file_system.py +++ b/Tools/LyTestTools/tests/unit/test_file_system.py @@ -208,20 +208,6 @@ class TestUnZip(unittest.TestCase): self.assertEqual(path, expected_path) - @mock.patch('os.path.exists') - @mock.patch('ly_test_tools.environment.file_system.check_free_space') - @mock.patch('os.path.join') - def test_Unzip_ReleaseBuild_JoinCalledWithNoPathNoExtension(self, mock_join, mock_check_free, mock_exists): - - path = '' - self.src_path = r'C:\packages\lumberyard-1.2.0.3-54321-pc-1234.zip' - mock_exists.return_value = self.exists - - with mock.patch(self.decomp_obj_name, self.mock_decomp): - path = self.call_decomp(self.dest_path, self.src_path) - - mock_join.assert_called_once_with(self.dest_path, 'lumberyard-1.2.0.3-54321-pc-1234') - @mock.patch('ly_test_tools.environment.file_system.logger') @mock.patch('os.path.exists') @mock.patch('ly_test_tools.environment.file_system.check_free_space') @@ -375,20 +361,6 @@ class TestUnTgz(unittest.TestCase): self.assertEqual(path, expected_path) - @mock.patch('ly_test_tools.environment.file_system.check_free_space') - @mock.patch('os.path.join') - @mock.patch('os.stat') - def test_Untgz_ReleaseBuild_JoinCalledWithNoPathNoExtension(self, mock_stat, mock_join, mock_check_free): - - mock_stat.return_value = self.src_stat - - path = '' - self.src_path = r'C:\packages\lumberyard-1.2.0.3-54321-pc-1234.zip' - with mock.patch(self.decomp_obj_name, self.mock_decomp): - path = self.call_decomp(self.dest_path, self.src_path) - - mock_join.assert_called_once_with(self.dest_path, 'lumberyard-1.2.0.3-54321-pc-1234') - @mock.patch('ly_test_tools.environment.file_system.logger') @mock.patch('os.path.exists') @mock.patch('ly_test_tools.environment.file_system.check_free_space') diff --git a/Tools/LyTestTools/tests/unit/test_launcher_base.py b/Tools/LyTestTools/tests/unit/test_launcher_base.py index 8d7daaab72..1ab9129a7d 100755 --- a/Tools/LyTestTools/tests/unit/test_launcher_base.py +++ b/Tools/LyTestTools/tests/unit/test_launcher_base.py @@ -204,21 +204,20 @@ class TestLauncherBuilder(object): """ def test_CreateLauncher_DummyWorkspace_DefaultLauncher(self): dummy_workspace = mock.MagicMock() - launcher_platform = 'windows' under_test = ly_test_tools.launchers.launcher_helper.create_launcher( - dummy_workspace, launcher_platform) + dummy_workspace, ly_test_tools.HOST_OS_EDITOR) assert isinstance(under_test, ly_test_tools.launchers.Launcher) def test_CreateDedicateLauncher_DummyWorkspace_DefaultLauncher(self): dummy_workspace = mock.MagicMock() - launcher_platform = 'windows_dedicated' under_test = ly_test_tools.launchers.launcher_helper.create_dedicated_launcher( - dummy_workspace, launcher_platform) + dummy_workspace, ly_test_tools.HOST_OS_DEDICATED_SERVER) assert isinstance(under_test, ly_test_tools.launchers.Launcher) + @mock.patch('os.path.exists', mock.MagicMock(return_value=True)) def test_CreateEditor_DummyWorkspace_DefaultLauncher(self): dummy_workspace = mock.MagicMock() - launcher_platform = 'windows_editor' + dummy_workspace.paths.build_directory.return_value = 'dummy' under_test = ly_test_tools.launchers.launcher_helper.create_editor( - dummy_workspace, launcher_platform) + dummy_workspace, ly_test_tools.HOST_OS_GENERIC_EXECUTABLE) assert isinstance(under_test, ly_test_tools.launchers.Launcher) diff --git a/Tools/LyTestTools/tests/unit/test_launcher_linux.py b/Tools/LyTestTools/tests/unit/test_launcher_linux.py new file mode 100644 index 0000000000..2a6c6f7014 --- /dev/null +++ b/Tools/LyTestTools/tests/unit/test_launcher_linux.py @@ -0,0 +1,63 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT + +Unit Tests for linux launcher-wrappers: all are sanity code-path tests, since no interprocess actions should be taken +""" +import os +import pytest +import unittest.mock as mock + +import ly_test_tools.launchers + +pytestmark = pytest.mark.SUITE_smoke + + +class TestLinuxLauncher(object): + + def test_Construct_TestDoubles_LinuxLauncherCreated(self): + under_test = ly_test_tools.launchers.LinuxLauncher(mock.MagicMock(), ["some_args"]) + assert isinstance(under_test, ly_test_tools.launchers.Launcher) + assert isinstance(under_test, ly_test_tools.launchers.LinuxLauncher) + + def test_BinaryPath_DummyPath_AddPathToApp(self): + dummy_path = "dummy_workspace_path" + dummy_project = "dummy_project" + mock_workspace = mock.MagicMock() + mock_workspace.paths.build_directory.return_value = dummy_path + mock_workspace.project = dummy_project + launcher = ly_test_tools.launchers.LinuxLauncher(mock_workspace, ["some_args"]) + + under_test = launcher.binary_path() + expected = os.path.join(dummy_path, f"{dummy_project}.GameLauncher") + + assert under_test == expected + + @mock.patch('ly_test_tools.launchers.LinuxLauncher.binary_path', mock.MagicMock) + @mock.patch('subprocess.Popen') + def test_Launch_DummyArgs_ArgsPassedToPopen(self, mock_subprocess): + dummy_args = ["some_args"] + launcher = ly_test_tools.launchers.LinuxLauncher(mock.MagicMock(), dummy_args) + + launcher.launch() + + mock_subprocess.assert_called_once() + name, args, kwargs = mock_subprocess.mock_calls[0] + unpacked_args = args[0] # args is a list inside a tuple + assert len(dummy_args) > 0, "accidentally removed dummy_args" + for expected_arg in dummy_args: + assert expected_arg in unpacked_args + + @mock.patch('ly_test_tools.launchers.LinuxLauncher.is_alive') + def test_Kill_MockAliveFalse_SilentSuccess(self, mock_alive): + mock_alive.return_value = False + mock_proc = mock.MagicMock() + launcher = ly_test_tools.launchers.LinuxLauncher(mock.MagicMock(), ["dummy"]) + launcher._proc = mock_proc + + launcher.kill() + + mock_proc.kill.assert_called_once() + mock_alive.assert_called_once() diff --git a/Tools/LyTestTools/tests/unit/test_process_utils.py b/Tools/LyTestTools/tests/unit/test_process_utils.py index a3cdae84ad..de40fb8e34 100755 --- a/Tools/LyTestTools/tests/unit/test_process_utils.py +++ b/Tools/LyTestTools/tests/unit/test_process_utils.py @@ -191,7 +191,7 @@ class TestSubprocessCheckCallWrapperSafe(unittest.TestCase): reason="tests.unit.test_process_utils is restricted to the Windows platform.") class TestCloseWindowsProcess(unittest.TestCase): - @mock.patch('ly_test_tools.environment.process_utils.WINDOWS', False) + @mock.patch('ly_test_tools.WINDOWS', False) def test_CloseWindowsProccess_NotOnWindows_Error(self): with pytest.raises(NotImplementedError): process_utils.close_windows_process(1) diff --git a/cmake/3rdParty/BuiltInPackages.cmake b/cmake/3rdParty/BuiltInPackages.cmake index c583774e3a..743e2e983e 100644 --- a/cmake/3rdParty/BuiltInPackages.cmake +++ b/cmake/3rdParty/BuiltInPackages.cmake @@ -18,4 +18,13 @@ set(LY_PAL_PACKAGE_FILE_NAME ${CMAKE_CURRENT_LIST_DIR}/${pal_dir}/BuiltInPackage include(${LY_PAL_PACKAGE_FILE_NAME}) # add the above file to the ALLFILES list, so that they show up in IDEs -set(ALLFILES ${ALLFILES} ${LY_PAL_PACKAGE_FILE_NAME}) \ No newline at end of file +set(ALLFILES ${ALLFILES} ${LY_PAL_PACKAGE_FILE_NAME}) + +# temporary compatibility: +# Some 3p libraries may still refer to zlib as "3rdParty::zlib" instead of +# the correct "3rdParty::ZLIB" (Case difference). Until those libraries are updated +# we alias the casing here. This also provides backward compatibility for Gems that use 3rdParty::zlib +# that are not part of the core O3DE repo. +ly_download_associated_package(ZLIB) +find_package(ZLIB) +add_library(3rdParty::zlib ALIAS 3rdParty::ZLIB) diff --git a/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake b/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake index 47c3c66463..c1a770d1ff 100644 --- a/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake +++ b/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake @@ -18,14 +18,15 @@ ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux # platform-specific: ly_associate_package(PACKAGE_NAME tiff-4.2.0.15-rev2-android TARGETS tiff PACKAGE_HASH 252b99e5886ec59fdccf38603c1399dd3fc02d878641aba35a7f8d2504065a06) ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-android TARGETS freetype PACKAGE_HASH df9e4d559ea0f03b0666b48c79813b1cd4d9624429148a249865de9f5c2c11cd) -ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev6-android TARGETS AWSNativeSDK PACKAGE_HASH 1624ba9aaf03d001ed0ffc57d2f945ff82590e75a7ea868de35043cf673e82fb) +ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.9.50-rev1-android TARGETS AWSNativeSDK PACKAGE_HASH 33771499f9080cbaab613459927e52911e68f94fa356397885e85005efbd1490) ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev5-android TARGETS Lua PACKAGE_HASH 1f638e94a17a87fe9e588ea456d5893876094b4db191234380e4c4eb9e06c300) ly_associate_package(PACKAGE_NAME PhysX-4.1.2.29882248-rev3-android TARGETS PhysX PACKAGE_HASH b8cb6aa46b2a21671f6cb1f6a78713a3ba88824d0447560ff5ce6c01014b9f43) ly_associate_package(PACKAGE_NAME mikkelsen-1.0.0.4-android TARGETS mikkelsen PACKAGE_HASH 075e8e4940884971063b5a9963014e2e517246fa269c07c7dc55b8cf2cd99705) ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-android TARGETS googletest PACKAGE_HASH 95671be75287a61c9533452835c3647e9c1b30f81b34b43bcb0ec1997cc23894) ly_associate_package(PACKAGE_NAME googlebenchmark-1.5.0-rev2-android TARGETS GoogleBenchmark PACKAGE_HASH 20b46e572211a69d7d94ddad1c89ec37bb958711d6ad4025368ac89ea83078fb) +ly_associate_package(PACKAGE_NAME libpng-1.6.37-rev1-android TARGETS libpng PACKAGE_HASH 51d3ec1559c5595196c11e11674cf5745989d3073bf33dabc6697e3eee77a1cc) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-android TARGETS libsamplerate PACKAGE_HASH bf13662afe65d02bcfa16258a4caa9b875534978227d6f9f36c9cfa92b3fb12b) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev1-android TARGETS OpenSSL PACKAGE_HASH 4036d4019d722f0e1b7a1621bf60b5a17ca6a65c9c78fd8701cee1131eec8480) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-android TARGETS zlib PACKAGE_HASH 85b730b97176772538cfcacd6b6aaf4655fc2d368d134d6dd55e02f28f183826) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-android TARGETS ZLIB PACKAGE_HASH 73c9e88892c237a3fc6eafc04268ccd9d479e6d55f9df2ed58b236c8f9cf2cae) ly_associate_package(PACKAGE_NAME lz4-1.9.3-vcpkg-rev4-android TARGETS lz4 PACKAGE_HASH f5b22642d218dbbb442cae61e469e5b241c4740acd258c3e8678e60dec61ea93) diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index 65e046c8ba..fb02a80088 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -36,12 +36,13 @@ ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-linux ly_associate_package(PACKAGE_NAME googlebenchmark-1.5.0-rev2-linux TARGETS GoogleBenchmark PACKAGE_HASH 4038878f337fc7e0274f0230f71851b385b2e0327c495fc3dd3d1c18a807928d) ly_associate_package(PACKAGE_NAME unwind-1.2.1-linux TARGETS unwind PACKAGE_HASH 3453265fb056e25432f611a61546a25f60388e315515ad39007b5925dd054a77) ly_associate_package(PACKAGE_NAME qt-5.15.2-rev5-linux TARGETS Qt PACKAGE_HASH 76b395897b941a173002845c7219a5f8a799e44b269ffefe8091acc048130f28) +ly_associate_package(PACKAGE_NAME libpng-1.6.37-rev1-linux TARGETS libpng PACKAGE_HASH 896451999f1de76375599aec4b34ae0573d8d34620d9ab29cc30b8739c265ba6) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-linux TARGETS libsamplerate PACKAGE_HASH 41643c31bc6b7d037f895f89d8d8d6369e906b92eff42b0fe05ee6a100f06261) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev2-linux TARGETS OpenSSL PACKAGE_HASH b779426d1e9c5ddf71160d5ae2e639c3b956e0fb5e9fcaf9ce97c4526024e3bc) ly_associate_package(PACKAGE_NAME DirectXShaderCompilerDxc-1.6.2104-o3de-rev3-linux TARGETS DirectXShaderCompilerDxc PACKAGE_HASH 88c4a359325d749bc34090b9ac466424847f3b71ba0de15045cf355c17c07099) ly_associate_package(PACKAGE_NAME SPIRVCross-2021.04.29-rev1-linux TARGETS SPIRVCross PACKAGE_HASH 7889ee5460a688e9b910c0168b31445c0079d363affa07b25d4c8aeb608a0b80) ly_associate_package(PACKAGE_NAME azslc-1.7.23-rev2-linux TARGETS azslc PACKAGE_HASH 1ba84d8321a566d35a1e9aa7400211ba8e6d1c11c08e4be3c93e6e74b8f7aef1) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-linux TARGETS zlib PACKAGE_HASH 16f3b9e11cda525efb62144f354c1cfc30a5def9eff020dbe49cb00ee7d8234f) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-linux TARGETS ZLIB PACKAGE_HASH 9be5ea85722fc27a8645a9c8a812669d107c68e6baa2ca0740872eaeb6a8b0fc) ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-linux TARGETS squish-ccr PACKAGE_HASH 85fecafbddc6a41a27c5f59ed4a5dfb123a94cb4666782cf26e63c0a4724c530) ly_associate_package(PACKAGE_NAME astc-encoder-3.2-rev1-linux TARGETS astc-encoder PACKAGE_HASH 2ba97a06474d609945f0ab4419af1f6bbffdd294ca6b869f5fcebec75c573c0f) ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-linux TARGETS ISPCTexComp PACKAGE_HASH 065fd12abe4247dde247330313763cf816c3375c221da030bdec35024947f259) diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index acddb879d4..e80956530a 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -38,8 +38,9 @@ ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-mac ly_associate_package(PACKAGE_NAME googlebenchmark-1.5.0-rev2-mac TARGETS GoogleBenchmark PACKAGE_HASH ad25de0146769c91e179953d845de2bec8ed4a691f973f47e3eb37639381f665) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev1-mac TARGETS OpenSSL PACKAGE_HASH 28adc1c0616ac0482b2a9d7b4a3a3635a1020e87b163f8aba687c501cf35f96c) ly_associate_package(PACKAGE_NAME qt-5.15.2-rev5-mac TARGETS Qt PACKAGE_HASH 9d25918351898b308ded3e9e571fff6f26311b2071aeafd00dd5b249fdf53f7e) +ly_associate_package(PACKAGE_NAME libpng-1.6.37-mac TARGETS libpng PACKAGE_HASH 1ad76cd038ccc1f288f83c5fe2859a0f35c5154e1fe7658e1230cc428d318a8b) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-mac TARGETS libsamplerate PACKAGE_HASH b912af40c0ac197af9c43d85004395ba92a6a859a24b7eacd920fed5854a97fe) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-mac TARGETS zlib PACKAGE_HASH 21714e8a6de4f2523ee92a7f52d51fbee29c5f37ced334e00dc3c029115b472e) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-mac TARGETS ZLIB PACKAGE_HASH b6fea9c79b8bf106d4703b67fecaa133f832ad28696c2ceef45fb5f20013c096) ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-mac TARGETS squish-ccr PACKAGE_HASH 155bfbfa17c19a9cd2ef025de14c5db598f4290045d5b0d83ab58cb345089a77) ly_associate_package(PACKAGE_NAME astc-encoder-3.2-rev1-mac TARGETS astc-encoder PACKAGE_HASH 96f6ea8c3e45ec7fe525230c7c53ca665c8300d8e28456cc19bb3159ce6f8dcc) ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-mac TARGETS ISPCTexComp PACKAGE_HASH 8a4e93277b8face6ea2fd57c6d017bdb55643ed3d6387110bc5f6b3b884dd169) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index d56a03f515..7e112c405e 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -41,12 +41,13 @@ ly_associate_package(PACKAGE_NAME d3dx12-headers-rev1-windows ly_associate_package(PACKAGE_NAME pyside2-qt-5.15.1-rev2-windows TARGETS pyside2 PACKAGE_HASH c90f3efcc7c10e79b22a33467855ad861f9dbd2e909df27a5cba9db9fa3edd0f) ly_associate_package(PACKAGE_NAME openimageio-2.1.16.0-rev2-windows TARGETS OpenImageIO PACKAGE_HASH 85a2a6cf35cbc4c967c56ca8074babf0955c5b490c90c6e6fd23c78db99fc282) ly_associate_package(PACKAGE_NAME qt-5.15.2-rev4-windows TARGETS Qt PACKAGE_HASH a4634caaf48192cad5c5f408504746e53d338856148285057274f6a0ccdc071d) +ly_associate_package(PACKAGE_NAME libpng-1.6.37-rev1-windows TARGETS libpng PACKAGE_HASH aa20c894fbd7cdaea585a54e37620b3454a7e414a58128acd68ccf6fe76c47d6) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-windows TARGETS libsamplerate PACKAGE_HASH dcf3c11a96f212a52e2c9241abde5c364ee90b0f32fe6eeb6dcdca01d491829f) ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows TARGETS OpenMesh PACKAGE_HASH 1c1df639358526c368e790dfce40c45cbdfcfb1c9a041b9d7054a8949d88ee77) ly_associate_package(PACKAGE_NAME civetweb-1.8-rev1-windows TARGETS civetweb PACKAGE_HASH 36d0e58a59bcdb4dd70493fb1b177aa0354c945b06c30416348fd326cf323dd4) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev2-windows TARGETS OpenSSL PACKAGE_HASH 9af1c50343f89146b4053101a7aeb20513319a3fe2f007e356d7ce25f9241040) ly_associate_package(PACKAGE_NAME Crashpad-0.8.0-rev1-windows TARGETS Crashpad PACKAGE_HASH d162aa3070147bc0130a44caab02c5fe58606910252caf7f90472bd48d4e31e2) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-windows TARGETS zlib PACKAGE_HASH 9afab1d67641ed8bef2fb38fc53942da47f2ab339d9e77d3d20704a48af2da0b) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-windows TARGETS ZLIB PACKAGE_HASH 8847112429744eb11d92c44026fc5fc53caa4a06709382b5f13978f3c26c4cbd) ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-windows TARGETS squish-ccr PACKAGE_HASH 5c3d9fa491e488ccaf802304ad23b932268a2b2846e383f088779962af2bfa84) ly_associate_package(PACKAGE_NAME astc-encoder-3.2-rev1-windows TARGETS astc-encoder PACKAGE_HASH 3addc6fc1a7eb0d6b7f3d530e962af967e6d92b3825ef485da243346357cf78e) ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-windows TARGETS ISPCTexComp PACKAGE_HASH b6fa6ea28a2808a9a5524c72c37789c525925e435770f2d94eb2d387360fa2d0) diff --git a/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake b/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake index 25fbaf830f..abfba29e5a 100644 --- a/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake +++ b/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake @@ -19,13 +19,14 @@ ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux # platform-specific: ly_associate_package(PACKAGE_NAME tiff-4.2.0.15-rev2-ios TARGETS tiff PACKAGE_HASH d864beb0c955a55f28c2a993843afb2ecf6e01519ddfc857cedf34fc5db68d49) ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-ios TARGETS freetype PACKAGE_HASH 3ac3c35e056ae4baec2e40caa023d76a7a3320895ef172b6655e9261b0dc2e29) -ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev3-ios TARGETS AWSNativeSDK PACKAGE_HASH 1246219a213ccfff76b526011febf521586d44dbc1753e474f8fb5fd861654a4) +ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev4-ios TARGETS AWSNativeSDK PACKAGE_HASH d10e7496ca705577032821011beaf9f2507689f23817bfa0ed4d2a2758afcd02) ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev5-ios TARGETS Lua PACKAGE_HASH c2d3c4e67046c293049292317a7d60fdb8f23effeea7136aefaef667163e5ffe) ly_associate_package(PACKAGE_NAME PhysX-4.1.2.29882248-rev3-ios TARGETS PhysX PACKAGE_HASH b1bbc1fc068d2c6e1eb18eecd4e8b776adc516833e8da3dcb1970cef2a8f0cbd) ly_associate_package(PACKAGE_NAME mikkelsen-1.0.0.4-ios TARGETS mikkelsen PACKAGE_HASH 976aaa3ccd8582346132a10af253822ccc5d5bcc9ea5ba44d27848f65ee88a8a) ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-ios TARGETS googletest PACKAGE_HASH 2f121ad9784c0ab73dfaa58e1fee05440a82a07cc556bec162eeb407688111a7) ly_associate_package(PACKAGE_NAME googlebenchmark-1.5.0-rev2-ios TARGETS GoogleBenchmark PACKAGE_HASH c2ffaed2b658892b1bcf81dee4b44cd1cb09fc78d55584ef5cb8ab87f2d8d1ae) +ly_associate_package(PACKAGE_NAME libpng-1.6.37-ios TARGETS libpng PACKAGE_HASH 18a8217721083c4dc46514105be43ca764fa9c994a74aa0b57766ea6f8187e7b) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-ios TARGETS libsamplerate PACKAGE_HASH 7656b961697f490d4f9c35d2e61559f6fc38c32102e542a33c212cd618fc2119) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev1-ios TARGETS OpenSSL PACKAGE_HASH cd0dfce3086a7172777c63dadbaf0ac3695b676119ecb6d0614b5fb1da03462f) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-ios TARGETS zlib PACKAGE_HASH a59fc0f83a02c616b679799310e9d86fde84514c6d2acefa12c6def0ae4a880c) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-ios TARGETS ZLIB PACKAGE_HASH c7f10b4d0fe63192054d926f53b08e852cdf472bc2b18e2f7be5aecac1869f7f) ly_associate_package(PACKAGE_NAME lz4-1.9.3-vcpkg-rev4-ios TARGETS lz4 PACKAGE_HASH 588ea05739caa9231a9a17a1e8cf64c5b9a265e16528bc05420af7e2534e86c1) diff --git a/cmake/Packaging.cmake b/cmake/Packaging.cmake index 477a5f24ea..006689549b 100644 --- a/cmake/Packaging.cmake +++ b/cmake/Packaging.cmake @@ -89,37 +89,49 @@ endif() set(_cmake_package_dest ${CPACK_BINARY_DIR}/${CPACK_CMAKE_PACKAGE_FILE}) -string(REPLACE "." ";" _version_componets "${CPACK_DESIRED_CMAKE_VERSION}") -list(GET _version_componets 0 _major_version) -list(GET _version_componets 1 _minor_version) - -set(_url_version_tag "v${_major_version}.${_minor_version}") -set(_package_url "https://cmake.org/files/${_url_version_tag}/${CPACK_CMAKE_PACKAGE_FILE}") - -message(STATUS "Downloading CMake ${CPACK_DESIRED_CMAKE_VERSION} for packaging...") -download_file( - URL ${_package_url} - TARGET_FILE ${_cmake_package_dest} - EXPECTED_HASH ${CPACK_CMAKE_PACKAGE_HASH} - RESULTS _results -) -list(GET _results 0 _status_code) +if(EXISTS ${_cmake_package_dest}) + file(SHA256 ${_cmake_package_dest} hash_of_downloaded_file) + if (NOT "${hash_of_downloaded_file}" STREQUAL "${CPACK_CMAKE_PACKAGE_HASH}") + message(STATUS "CMake ${CPACK_DESIRED_CMAKE_VERSION} found at ${_cmake_package_dest} but expected hash missmatches, re-downloading...") + file(REMOVE ${_cmake_package_dest}) + else() + message(STATUS "CMake ${CPACK_DESIRED_CMAKE_VERSION} found") + endif() +endif() +if(NOT EXISTS ${_cmake_package_dest}) + # download it + string(REPLACE "." ";" _version_componets "${CPACK_DESIRED_CMAKE_VERSION}") + list(GET _version_componets 0 _major_version) + list(GET _version_componets 1 _minor_version) + + set(_url_version_tag "v${_major_version}.${_minor_version}") + set(_package_url "https://cmake.org/files/${_url_version_tag}/${CPACK_CMAKE_PACKAGE_FILE}") + + message(STATUS "Downloading CMake ${CPACK_DESIRED_CMAKE_VERSION} for packaging...") + download_file( + URL ${_package_url} + TARGET_FILE ${_cmake_package_dest} + EXPECTED_HASH ${CPACK_CMAKE_PACKAGE_HASH} + RESULTS _results + ) + list(GET _results 0 _status_code) + + if (${_status_code} EQUAL 0 AND EXISTS ${_cmake_package_dest}) + message(STATUS "CMake ${CPACK_DESIRED_CMAKE_VERSION} found") + else() + file(REMOVE ${_cmake_package_dest}) + list(REMOVE_AT _results 0) -if (${_status_code} EQUAL 0 AND EXISTS ${_cmake_package_dest}) - message(STATUS "Package found and verified!") -else() - file(REMOVE ${_cmake_package_dest}) - list(REMOVE_AT _results 0) + set(_error_message "An error occurred, code ${_status_code}. URL ${_package_url} - ${_results}") - set(_error_message "An error occurred, code ${_status_code}. URL ${_package_url} - ${_results}") + if(${_status_code} EQUAL 1) + string(APPEND _error_message + " Please double check the CPACK_CMAKE_PACKAGE_FILE and " + "CPACK_CMAKE_PACKAGE_HASH properties before trying again.") + endif() - if(${_status_code} EQUAL 1) - string(APPEND _error_message - " Please double check the CPACK_CMAKE_PACKAGE_FILE and " - "CPACK_CMAKE_PACKAGE_HASH properties before trying again.") + message(FATAL_ERROR ${_error_message}) endif() - - message(FATAL_ERROR ${_error_message}) endif() install(FILES ${_cmake_package_dest} diff --git a/cmake/Platform/Common/Configurations_common.cmake b/cmake/Platform/Common/Configurations_common.cmake index 15f7344958..d16dfa3eea 100644 --- a/cmake/Platform/Common/Configurations_common.cmake +++ b/cmake/Platform/Common/Configurations_common.cmake @@ -36,7 +36,7 @@ ly_append_configurations_options( AZ_BUILD_CONFIGURATION_TYPE="${LY_BUILD_CONFIGURATION_TYPE_DEBUG}" DEFINES_PROFILE _PROFILE - PROFILE + AZ_PROFILE_BUILD=1 NDEBUG AZ_ENABLE_TRACING AZ_ENABLE_DEBUG_TOOLS diff --git a/cmake/Platform/Windows/Packaging/Bootstrapper.wxs b/cmake/Platform/Windows/Packaging/Bootstrapper.wxs index 079c20e212..f3af199bc2 100644 --- a/cmake/Platform/Windows/Packaging/Bootstrapper.wxs +++ b/cmake/Platform/Windows/Packaging/Bootstrapper.wxs @@ -20,7 +20,7 @@ + Value="[InstallFolder]\bin\Windows\profile\Default\o3de.exe"/> diff --git a/cmake/Platform/Windows/Packaging/Shortcuts.wxs b/cmake/Platform/Windows/Packaging/Shortcuts.wxs index fefd15294a..fbfa174d06 100644 --- a/cmake/Platform/Windows/Packaging/Shortcuts.wxs +++ b/cmake/Platform/Windows/Packaging/Shortcuts.wxs @@ -18,7 +18,9 @@ - + + + @@ -52,18 +54,18 @@ diff --git a/cmake/Platform/Windows/PackagingPostBuild.cmake b/cmake/Platform/Windows/PackagingPostBuild.cmake index 5e09743373..377a9fb221 100644 --- a/cmake/Platform/Windows/PackagingPostBuild.cmake +++ b/cmake/Platform/Windows/PackagingPostBuild.cmake @@ -32,6 +32,9 @@ set(_addtional_defines -dCPACK_RESOURCE_PATH=${CPACK_SOURCE_DIR}/Platform/Windows/Packaging ) +file(REAL_PATH "${CPACK_SOURCE_DIR}/.." _root_path) +file(TO_NATIVE_PATH "${_root_path}/scripts/signer/Platform/Windows/signer.ps1" _sign_script) + if(CPACK_LICENSE_URL) list(APPEND _addtional_defines -dCPACK_LICENSE_URL=${CPACK_LICENSE_URL}) endif() @@ -55,6 +58,30 @@ set(_light_command -o "${_bootstrap_output_file}" ) +set(_signing_command + psexec.exe + -accepteula + -nobanner + -s + powershell.exe + -NoLogo + -ExecutionPolicy Bypass + -File ${_sign_script} +) + +message(STATUS "Signing package files in ${_cpack_wix_out_dir}") +execute_process( + COMMAND ${_signing_command} -packagePath ${_cpack_wix_out_dir} + RESULT_VARIABLE _signing_result + ERROR_VARIABLE _signing_errors + OUTPUT_VARIABLE _signing_output + ECHO_OUTPUT_VARIABLE +) + +if(NOT ${_signing_result} EQUAL 0) + message(FATAL_ERROR "An error occurred during signing package files. ${_signing_errors}") +endif() + message(STATUS "Creating Bootstrap Installer...") execute_process( COMMAND ${_candle_command} @@ -80,6 +107,19 @@ file(COPY ${_bootstrap_output_file} message(STATUS "Bootstrap installer generated to ${CPACK_PACKAGE_DIRECTORY}/${_bootstrap_filename}") +message(STATUS "Signing bootstrap installer in ${CPACK_PACKAGE_DIRECTORY}") +execute_process( + COMMAND ${_signing_command} -bootstrapPath ${CPACK_PACKAGE_DIRECTORY}/${_bootstrap_filename} + RESULT_VARIABLE _signing_result + ERROR_VARIABLE _signing_errors + OUTPUT_VARIABLE _signing_output + ECHO_OUTPUT_VARIABLE +) + +if(NOT ${_signing_result} EQUAL 0) + message(FATAL_ERROR "An error occurred during signing bootstrap installer. ${_signing_errors}") +endif() + # use the internal default path if somehow not specified from cpack_configure_downloads if(NOT CPACK_UPLOAD_DIRECTORY) set(CPACK_UPLOAD_DIRECTORY ${CPACK_PACKAGE_DIRECTORY}/CPackUploads) @@ -100,11 +140,9 @@ if(NOT CPACK_UPLOAD_URL) return() endif() -file(REAL_PATH "${CPACK_SOURCE_DIR}/.." _root_path) - +file(TO_NATIVE_PATH "${_cpack_wix_out_dir}" _cpack_wix_out_dir) file(TO_NATIVE_PATH "${_root_path}/python/python.cmd" _python_cmd) file(TO_NATIVE_PATH "${_root_path}/scripts/build/tools/upload_to_s3.py" _upload_script) -file(TO_NATIVE_PATH "${_cpack_wix_out_dir}" _cpack_wix_out_dir) function(upload_to_s3 in_url in_local_path in_file_regex) diff --git a/cmake/Platform/Windows/PackagingPreBuild.cmake b/cmake/Platform/Windows/PackagingPreBuild.cmake new file mode 100644 index 0000000000..d3924c7a02 --- /dev/null +++ b/cmake/Platform/Windows/PackagingPreBuild.cmake @@ -0,0 +1,37 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +file(REAL_PATH "${CPACK_SOURCE_DIR}/.." _root_path) +set(_cpack_wix_out_dir ${CPACK_TOPLEVEL_DIRECTORY}) +file(TO_NATIVE_PATH "${_root_path}/scripts/signer/Platform/Windows/signer.ps1" _sign_script) + +set(_signing_command + psexec.exe + -accepteula + -nobanner + -s + powershell.exe + -NoLogo + -ExecutionPolicy Bypass + -File ${_sign_script} +) + +message(STATUS "Signing executable files in ${_cpack_wix_out_dir}") +execute_process( + COMMAND ${_signing_command} -exePath ${_cpack_wix_out_dir} + RESULT_VARIABLE _signing_result + ERROR_VARIABLE _signing_errors + OUTPUT_VARIABLE _signing_output + ECHO_OUTPUT_VARIABLE +) + +if(NOT ${_signing_result} EQUAL 0) + message(FATAL_ERROR "An error occurred during signing executable files. ${_signing_errors}") +endif() + +message(STATUS "Signing exes complete!") diff --git a/cmake/Platform/Windows/Packaging_windows.cmake b/cmake/Platform/Windows/Packaging_windows.cmake index 5bb9928b61..4a03df2fd2 100644 --- a/cmake/Platform/Windows/Packaging_windows.cmake +++ b/cmake/Platform/Windows/Packaging_windows.cmake @@ -23,6 +23,7 @@ set(CPACK_WIX_ROOT ${LY_INSTALLER_WIX_ROOT}) set(CPACK_GENERATOR WIX) +set(CPACK_THREADS 0) set(_cmake_package_name "cmake-${CPACK_DESIRED_CMAKE_VERSION}-windows-x86_64") set(CPACK_CMAKE_PACKAGE_FILE "${_cmake_package_name}.zip") set(CPACK_CMAKE_PACKAGE_HASH "15a49e2ab81c1822d75b1b1a92f7863f58e31f6d6aac1c4103eef2b071be3112") @@ -108,7 +109,6 @@ set(_raw_text_license [[ ]]) if(LY_INSTALLER_DOWNLOAD_URL) - set(WIX_THEME_WARNING_IMAGE ${CPACK_SOURCE_DIR}/Platform/Windows/Packaging/warning.png) if(LY_INSTALLER_LICENSE_URL) @@ -138,6 +138,10 @@ if(LY_INSTALLER_DOWNLOAD_URL) # the bootstrapper will at the very least need a different upgrade guid generate_wix_guid(CPACK_WIX_BOOTSTRAP_UPGRADE_GUID "${_guid_seed_base}_Bootstrap_UpgradeCode") + set(CPACK_PRE_BUILD_SCRIPTS + ${CPACK_SOURCE_DIR}/Platform/Windows/PackagingPreBuild.cmake + ) + set(CPACK_POST_BUILD_SCRIPTS ${CPACK_SOURCE_DIR}/Platform/Windows/PackagingPostBuild.cmake ) diff --git a/cmake/Projects.cmake b/cmake/Projects.cmake index d3f4b33b03..c09fe0fc6f 100644 --- a/cmake/Projects.cmake +++ b/cmake/Projects.cmake @@ -10,6 +10,10 @@ include_guard() +# Passing ${LY_PROJECTS} as the default since in project-centric LY_PROJECTS is defined by the project and +# we want to pick up that one as the value of the variable. +# Ideally this cache variable would be defined before the project sets LY_PROJECTS, but that would mean +# it would have to be defined in each project. set(LY_PROJECTS "${LY_PROJECTS}" CACHE STRING "List of projects to enable, this can be a relative path to the engine root or an absolute path") #! ly_add_target_dependencies: adds module load dependencies for this target. @@ -143,30 +147,35 @@ foreach(project ${LY_PROJECTS}) ly_generate_project_build_path_setreg(${full_directory_path}) add_project_json_external_subdirectories(${full_directory_path}) + # Get project name + o3de_read_json_key(project_name ${full_directory_path}/project.json "project_name") + # Generate pak for project in release installs - cmake_path(RELATIVE_PATH CMAKE_RUNTIME_OUTPUT_DIRECTORY BASE_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE runtime_output_directory) + cmake_path(RELATIVE_PATH CMAKE_RUNTIME_OUTPUT_DIRECTORY BASE_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE install_base_runtime_output_directory) set(install_engine_pak_template [=[ if("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$") - set(install_output_folder "${CMAKE_INSTALL_PREFIX}/@runtime_output_directory@/@PAL_PLATFORM_NAME@/${CMAKE_INSTALL_CONFIG_NAME}/@LY_BUILD_PERMUTATION@") + set(install_output_folder "${CMAKE_INSTALL_PREFIX}/@install_base_runtime_output_directory@/@PAL_PLATFORM_NAME@/${CMAKE_INSTALL_CONFIG_NAME}/@LY_BUILD_PERMUTATION@") + set(install_pak_output_folder "${install_output_folder}/Cache/@LY_ASSET_DEPLOY_ASSET_TYPE@") if(NOT DEFINED LY_ASSET_DEPLOY_ASSET_TYPE) set(LY_ASSET_DEPLOY_ASSET_TYPE @LY_ASSET_DEPLOY_ASSET_TYPE@) endif() - message(STATUS "Generating ${install_output_folder}/Engine.pak from @full_directory_path@/Cache/${LY_ASSET_DEPLOY_ASSET_TYPE}") - file(MAKE_DIRECTORY "${install_output_folder}") + message(STATUS "Generating ${install_pak_output_folder}/engine.pak from @full_directory_path@/Cache/${LY_ASSET_DEPLOY_ASSET_TYPE}") + file(MAKE_DIRECTORY "${install_pak_output_folder}") cmake_path(SET cache_product_path "@full_directory_path@/Cache/${LY_ASSET_DEPLOY_ASSET_TYPE}") file(GLOB product_assets "${cache_product_path}/*") if(product_assets) execute_process( - COMMAND ${CMAKE_COMMAND} -E tar "cf" "${install_output_folder}/Engine.pak" --format=zip -- ${product_assets} + COMMAND ${CMAKE_COMMAND} -E tar "cf" "${install_pak_output_folder}/engine.pak" --format=zip -- ${product_assets} WORKING_DIRECTORY "${cache_product_path}" RESULT_VARIABLE archive_creation_result ) if(archive_creation_result EQUAL 0) - message(STATUS "${install_output_folder}/Engine.pak generated") + message(STATUS "${install_output_folder}/engine.pak generated") endif() endif() endif() ]=]) + string(CONFIGURE "${install_engine_pak_template}" install_engine_pak_code @ONLY) ly_install_run_code("${install_engine_pak_code}") diff --git a/cmake/Tools/Platform/Android/android_support.py b/cmake/Tools/Platform/Android/android_support.py index 77c8a37a35..54f1a4c8f4 100755 --- a/cmake/Tools/Platform/Android/android_support.py +++ b/cmake/Tools/Platform/Android/android_support.py @@ -381,6 +381,23 @@ CUSTOM_GRADLE_COPY_NATIVE_CONFIG_BUILD_ARTIFACTS_DEPENDENCY_FORMAT_STR = """ }} """ +CUSTOM_GRADLE_COPY_REGISTRY_FOLDER_FORMAT_STR = """ + task copyRegistryFolder{config}(type: Copy) {{ + from ('build/intermediates/cmake/{config_lower}/obj/arm64-v8a/{config_lower}/Registry') + into ('{asset_layout_folder}/registry') + include ('*.setreg') + }} + + compile{config}Sources.dependsOn copyRegistryFolder{config} +""" + +CUSTOM_GRADLE_COPY_REGISTRY_FOLDER_DEPENDENCY_FORMAT_STR = """ + + copyRegistryFolder{config}.mustRunAfter {{ + tasks.findAll {{ task->task.name.contains('syncLYLayoutMode{config}') }} + }} +""" + CUSTOM_APPLY_ASSET_LAYOUT_TASK_FORMAT_STR = """ task syncLYLayoutMode{config}(type:Exec) {{ workingDir '{working_dir}' @@ -851,14 +868,13 @@ class AndroidProjectGenerator(object): config=native_config) # Copy over settings registry files from the Registry folder with build output directory gradle_build_env[f'CUSTOM_APPLY_ASSET_LAYOUT_{native_config_upper}_TASK'] += \ - CUSTOM_GRADLE_COPY_NATIVE_CONFIG_BUILD_ARTIFACTS_FORMAT_STR.format(config=native_config, - config_lower=native_config_lower, - asset_layout_folder=(self.build_dir / 'app/src/main/assets').resolve().as_posix(), - file_includes='**/Registry/*.setreg') + CUSTOM_GRADLE_COPY_REGISTRY_FOLDER_FORMAT_STR.format(config=native_config, + config_lower=native_config_lower, + asset_layout_folder=(self.build_dir / 'app/src/main/assets').resolve().as_posix()) if self.include_assets_in_apk: # This is a dependency of the layout sync only if we are including assets in the APK gradle_build_env[f'CUSTOM_APPLY_ASSET_LAYOUT_{native_config_upper}_TASK'] += \ - CUSTOM_GRADLE_COPY_NATIVE_CONFIG_BUILD_ARTIFACTS_DEPENDENCY_FORMAT_STR.format(config=native_config) + CUSTOM_GRADLE_COPY_REGISTRY_FOLDER_DEPENDENCY_FORMAT_STR.format(config=native_config) diff --git a/cmake/Tools/Platform/Android/generate_android_project.py b/cmake/Tools/Platform/Android/generate_android_project.py index a508329d02..d8f1021590 100755 --- a/cmake/Tools/Platform/Android/generate_android_project.py +++ b/cmake/Tools/Platform/Android/generate_android_project.py @@ -368,7 +368,6 @@ def main(args): if not third_party_path.is_dir(): raise common.LmbrCmdError(f"Invalid --third-party-path '{parsed_args.third_party_path}'.", common.ERROR_CODE_INVALID_PARAMETER) - third_party_path = third_party_path.parent build_dir = parsed_args.build_dir diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index 5fe19ddf46..ffca69a14f 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -793,27 +793,32 @@ catch(Exception e) { } finally { try { - if(env.SNS_TOPIC) { - snsPublish( - topicArn: env.SNS_TOPIC, - subject:'Build Result', - message:"${currentBuild.currentResult}:${BUILD_URL}:${env.RECREATE_VOLUME}:${env.CLEAN_OUTPUT_DIRECTORY}:${env.CLEAN_ASSETS}" - ) - } node('controller') { if("${currentBuild.currentResult}" == "SUCCESS") { + buildFailure = "" emailBody = "${BUILD_URL}\nSuccess!" } else { buildFailure = tm('${BUILD_FAILURE_ANALYZER}') emailBody = "${BUILD_URL}\n${buildFailure}!" - if(env.SNS_TOPIC_BUILD_FAILURE) { - message_json = ["build_url":env.BUILD_URL, "repository_name":env.REPOSITORY_NAME, "branch_name":env.BRANCH_NAME, "build_failure":buildFailure] - snsPublish( - topicArn: env.SNS_TOPIC_BUILD_FAILURE, - subject:'Build Failure', - message:JsonOutput.toJson(message_json) - ) - } + + } + if(env.POST_AR_BUILD_SNS_TOPIC) { + message_json = [ + "build_url": env.BUILD_URL, + "build_number": env.BUILD_NUMBER, + "repository_name": env.REPOSITORY_NAME, + "branch_name": env.BRANCH_NAME, + "build_result": "${currentBuild.currentResult}", + "build_failure": buildFailure, + "recreate_volume": env.RECREATE_VOLUME, + "clean_output_directory": env.CLEAN_OUTPUT_DIRECTORY, + "clean_assets": env.CLEAN_ASSETS + ] + snsPublish( + topicArn: env.POST_AR_BUILD_SNS_TOPIC, + subject:'Build Result', + message:JsonOutput.toJson(message_json) + ) } emailext ( body: "${emailBody}", diff --git a/scripts/build/Platform/Linux/build_config.json b/scripts/build/Platform/Linux/build_config.json index e70fa32878..ee4c27b0a9 100644 --- a/scripts/build/Platform/Linux/build_config.json +++ b/scripts/build/Platform/Linux/build_config.json @@ -83,7 +83,8 @@ "CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=TRUE -DLY_PARALLEL_LINK_JOBS=4", "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "all", - "CTEST_OPTIONS": "-E Gem::EMotionFX.Editor.Tests -LE (SUITE_sandbox|SUITE_awsi) -L FRAMEWORK_googletest" + "CTEST_OPTIONS": "-E Gem::EMotionFX.Editor.Tests -LE (SUITE_sandbox|SUITE_awsi) -L FRAMEWORK_googletest", + "TEST_RESULTS": "True" } }, "test_profile_nounity": { @@ -95,7 +96,8 @@ "CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=FALSE -DLY_PARALLEL_LINK_JOBS=4", "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "all", - "CTEST_OPTIONS": "-E Gem::EMotionFX.Editor.Tests -LE (SUITE_sandbox|SUITE_awsi) -L FRAMEWORK_googletest" + "CTEST_OPTIONS": "-E Gem::EMotionFX.Editor.Tests -LE (SUITE_sandbox|SUITE_awsi) -L FRAMEWORK_googletest", + "TEST_RESULTS": "True" } }, "asset_profile": { @@ -143,7 +145,8 @@ "CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=TRUE -DLY_PARALLEL_LINK_JOBS=4", "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_periodic", - "CTEST_OPTIONS": "-L (SUITE_periodic)" + "CTEST_OPTIONS": "-L (SUITE_periodic)", + "TEST_RESULTS": "True" } }, "sandbox_test_profile": { @@ -178,7 +181,8 @@ "CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=TRUE -DLY_PARALLEL_LINK_JOBS=4", "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_benchmark", - "CTEST_OPTIONS": "-L (SUITE_benchmark)" + "CTEST_OPTIONS": "-L (SUITE_benchmark)", + "TEST_RESULTS": "True" } }, "release": { diff --git a/scripts/build/Platform/Mac/build_config.json b/scripts/build/Platform/Mac/build_config.json index 2cf445a836..7eb3cb5699 100644 --- a/scripts/build/Platform/Mac/build_config.json +++ b/scripts/build/Platform/Mac/build_config.json @@ -102,7 +102,8 @@ "CMAKE_OPTIONS": "-G Xcode -DLY_UNITY_BUILD=TRUE", "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_periodic", - "CTEST_OPTIONS": "-L \"(SUITE_periodic)\"" + "CTEST_OPTIONS": "-L \"(SUITE_periodic)\"", + "TEST_RESULTS": "True" } }, "benchmark_test_profile": { @@ -118,7 +119,8 @@ "CMAKE_OPTIONS": "-G Xcode -DLY_UNITY_BUILD=TRUE", "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_benchmark", - "CTEST_OPTIONS": "-L \"(SUITE_benchmark)\"" + "CTEST_OPTIONS": "-L \"(SUITE_benchmark)\"", + "TEST_RESULTS": "True" } }, "release": { diff --git a/scripts/build/Platform/Windows/build_config.json b/scripts/build/Platform/Windows/build_config.json index 3848e6f980..7c39661273 100644 --- a/scripts/build/Platform/Windows/build_config.json +++ b/scripts/build/Platform/Windows/build_config.json @@ -31,7 +31,6 @@ ], "steps": [ "profile_vs2019", - "test_impact_analysis_profile_vs2019", "asset_profile_vs2019", "test_cpu_profile_vs2019" ] @@ -306,6 +305,7 @@ }, "release_vs2019": { "TAGS": [ + "default", "nightly-incremental", "nightly-clean", "weekly-build-metrics" @@ -351,17 +351,21 @@ "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo" } }, - "windows_installer": { + "installer_vs2019": { "TAGS": [ - "nightly-clean" + "nightly-clean", + "nightly-installer" ], + "PIPELINE_ENV":{ + "NODE_LABEL":"windows-packaging" + }, "COMMAND": "build_installer_windows.cmd", "PARAMETERS": { "CONFIGURATION": "profile", "OUTPUT_DIRECTORY": "build\\windows_vs2019", "CMAKE_OPTIONS": "-G \"Visual Studio 16 2019\" -DCMAKE_SYSTEM_VERSION=10.0 -DLY_UNITY_BUILD=TRUE -DLY_DISABLE_TEST_MODULES=TRUE -DLY_VERSION_ENGINE_NAME=o3de-sdk -DLY_INSTALLER_WIX_ROOT=\"!WIX! \"", - "EXTRA_CMAKE_OPTIONS": "-DLY_INSTALLER_AUTO_GEN_TAG=ON -DLY_INSTALLER_DOWNLOAD_URL=https://www.o3debinaries.org -DLY_INSTALLER_LICENSE_URL=https://www.o3debinaries.org/license", - "CPACK_BUCKET": "spectra-prism-staging-us-west-2", + "EXTRA_CMAKE_OPTIONS": "-DLY_INSTALLER_AUTO_GEN_TAG=ON -DLY_INSTALLER_DOWNLOAD_URL=!INSTALLER_DOWNLOAD_URL! -DLY_INSTALLER_LICENSE_URL=!INSTALLER_DOWNLOAD_URL!/license", + "CPACK_BUCKET": "!INSTALLER_BUCKET!", "CMAKE_LY_PROJECTS": "", "CMAKE_TARGET": "ALL_BUILD", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo" diff --git a/scripts/o3de/o3de/register.py b/scripts/o3de/o3de/register.py index 7db09368ec..c3d201f23c 100644 --- a/scripts/o3de/o3de/register.py +++ b/scripts/o3de/o3de/register.py @@ -487,14 +487,14 @@ def register_repo(json_data: dict, if remove: logger.warn(f'Removing repo uri {repo_uri}.') return 0 - repo_sha256 = hashlib.sha256(url.encode()) cache_file = manifest.get_o3de_cache_folder() / str(repo_sha256.hexdigest() + '.json') - result = utils.download_file(url, cache_file) + result = utils.download_file(parsed_uri, cache_file) if result == 0: - json_data['repos'].insert(0, repo_uri.as_posix()) + json_data['repos'].insert(0, repo_uri) + repo_set = set() result = repo.process_add_o3de_repo(cache_file, repo_set) return result @@ -621,6 +621,7 @@ def register(engine_path: pathlib.Path = None, return 1 result = result or register_gem_path(json_data, gem_path, remove, external_subdir_engine_path, external_subdir_project_path) + if isinstance(external_subdir_path, pathlib.PurePath): if not external_subdir_path: logger.error(f'External Subdirectory path is None.') diff --git a/scripts/o3de/o3de/repo.py b/scripts/o3de/o3de/repo.py index 8492f391e5..52abfc3386 100644 --- a/scripts/o3de/o3de/repo.py +++ b/scripts/o3de/o3de/repo.py @@ -12,6 +12,7 @@ import pathlib import shutil import urllib.parse import urllib.request +import hashlib from o3de import manifest, utils, validation @@ -24,7 +25,6 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, file_name = pathlib.Path(file_name).resolve() if not validation.valid_o3de_repo_json(file_name): return 1 - cache_folder = manifest.get_o3de_cache_folder() with file_name.open('r') as f: @@ -34,11 +34,30 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, logger.error(f'{file_name} failed to load: {str(e)}') return 1 - for o3de_object_uris, manifest_json in [(repo_data['engines'], 'engine.json'), - (repo_data['projects'], 'project.json'), - (repo_data['gems'], 'gem.json'), - (repo_data['template'], 'template.json'), - (repo_data['restricted'], 'restricted.json')]: + # A repo may not contain all types of object. + manifest_download_list = [] + try: + manifest_download_list.append((repo_data['engines'], 'engine.json')) + except KeyError: + pass + try: + manifest_download_list.append((repo_data['projects'], 'project.json')) + except KeyError: + pass + try: + manifest_download_list.append((repo_data['gems'], 'gem.json')) + except KeyError: + pass + try: + manifest_download_list.append((repo_data['templates'], 'template.json')) + except KeyError: + pass + try: + manifest_download_list.append((repo_data['restricted'], 'restricted.json')) + except KeyError: + pass + + for o3de_object_uris, manifest_json in manifest_download_list: for o3de_object_uri in o3de_object_uris: manifest_json_uri = f'{o3de_object_uri}/{manifest_json}' manifest_json_sha256 = hashlib.sha256(manifest_json_uri.encode()) @@ -49,7 +68,27 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, if download_file_result != 0: return download_file_result - repo_set |= repo_data['repos'] + # Having a repo is also optional + repo_list = [] + try: + repo_list.add(repo_data['repos']) + except KeyError: + pass + + for repo in repo_list: + if repo not in repo_set: + repo_set.add(repo) + for o3de_object_uri in o3de_object_uris: + parsed_uri = urllib.parse.urlparse(f'{repo}/repo.json') + manifest_json_sha256 = hashlib.sha256(parsed_uri.geturl().encode()) + cache_file = cache_folder / str(manifest_json_sha256.hexdigest() + '.json') + if cache_file.is_file(): + cache_file.unlink() + download_file_result = utils.download_file(parsed_uri, cache_file) + if download_file_result != 0: + return download_file_result + + return process_add_o3de_repo(parsed_uri.geturl(), repo_set) return 0 @@ -70,11 +109,10 @@ def refresh_repos() -> int: if repo_uri not in repo_set: repo_set.add(repo_uri) - repo_uri = f'{repo_uri}/repo.json' - repo_sha256 = hashlib.sha256(repo_uri.encode()) + parsed_uri = urllib.parse.urlparse(f'{repo_uri}/repo.json') + repo_sha256 = hashlib.sha256(parsed_uri.geturl().encode()) cache_file = cache_folder / str(repo_sha256.hexdigest() + '.json') if not cache_file.is_file(): - parsed_uri = urllib.parse.urlparse(repo_uri) download_file_result = utils.download_file(parsed_uri, cache_file) if download_file_result != 0: return download_file_result diff --git a/scripts/o3de/o3de/utils.py b/scripts/o3de/o3de/utils.py index 18f80584cc..9f9c747390 100755 --- a/scripts/o3de/o3de/utils.py +++ b/scripts/o3de/o3de/utils.py @@ -13,6 +13,10 @@ import uuid import pathlib import shutil import urllib.request +import logging + +logger = logging.getLogger() +logging.basicConfig() def validate_identifier(identifier: str) -> bool: """ @@ -97,11 +101,11 @@ def download_file(parsed_uri, download_path: pathlib.Path) -> int: if download_path.is_file(): logger.warn(f'File already downloaded to {download_path}.') elif parsed_uri.scheme in ['http', 'https', 'ftp', 'ftps']: - with urllib.request.urlopen(url) as s: + with urllib.request.urlopen(parsed_uri.geturl()) as s: with download_path.open('wb') as f: shutil.copyfileobj(s, f) else: - origin_file = pathlib.Path(url).resolve() + origin_file = pathlib.Path(parsed_uri.geturl()).resolve() if not origin_file.is_file(): return 1 shutil.copy(origin_file, download_path) diff --git a/scripts/signer/Platform/Windows/signer.ps1 b/scripts/signer/Platform/Windows/signer.ps1 new file mode 100644 index 0000000000..5366564140 --- /dev/null +++ b/scripts/signer/Platform/Windows/signer.ps1 @@ -0,0 +1,99 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +param ( + [String[]] $exePath, + [String[]] $packagePath, + [String[]] $bootstrapPath, + [String[]] $certificate +) + +# Get prerequisites, certs, and paths ready +$tempPath = [System.IO.Path]::GetTempPath() # Order of operations defined here: https://docs.microsoft.com/en-us/dotnet/api/system.io.path.gettemppath?view=net-5.0&tabs=windows#remarks +$certThumbprint = Get-ChildItem -Path Cert:LocalMachine\MY -CodeSigningCert -ErrorAction Stop | Select-Object -ExpandProperty Thumbprint # Grab first certificate from local machine store + +if ($certificate) { + Write-Output "Checking certificate thumbprint $certificate" + Get-ChildItem -Path Cert:LocalMachine\MY -ErrorAction SilentlyContinue | Where-Object {$_.Thumbprint -eq $certificate} # Prints certificate Thumbprint and Subject if found + if($?) { + $certThumbprint = $certificate + } + else { + Write-Error "$certificate thumbprint not found, using $certThumbprint thumbprint instead" + } +} + +Try { + $signtoolPath = Resolve-Path "C:\Program Files*\Windows Kits\10\bin\*\x64\signtool.exe" -ErrorAction Stop | Select-Object -Last 1 -ExpandProperty Path + $insigniaPath = Resolve-Path "C:\Program Files*\WiX*\bin\insignia.exe" -ErrorAction Stop | Select-Object -Last 1 -ExpandProperty Path +} +Catch { + Write-Error "Signtool or Wix insignia not found! Exiting." +} + +function Write-Signature { + param ( + $signtool, + $thumbprint, + $filename + ) + + $attempts = 2 + $sleepSec = 5 + + Do { + $attempts-- + Try { + & $signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 $thumbprint /sm $filename + & $signtool verify /pa /v $filename + return + } + Catch { + Write-Error $_.Exception.InnerException.Message -ErrorAction Continue + Start-Sleep -Seconds $sleepSec + } + } while ($attempts -lt 0) + + throw "Failed to sign $filename" # Bypassed in try block if the command is successful +} + +# Looping through each path insteaad of globbing to prevent hitting maximum command string length limit +if ($exePath) { + Write-Output "### Signing EXE files ###" + $files = @(Get-ChildItem $exePath -Recurse *.exe | % { $_.FullName }) + foreach ($file in $files) { + Write-Signature -signtool $signtoolPath -thumbprint $certThumbprint -filename $file + } +} + +if ($packagePath) { + Write-Output "### Signing CAB files ###" + $files = @(Get-ChildItem $packagePath -Recurse *.cab | % { $_.FullName }) + foreach ($file in $files) { + Write-Signature -signtool $signtoolPath -thumbprint $certThumbprint -filename $file + } + + Write-Output "### Signing MSI files ###" + $files = @(Get-ChildItem $packagePath -Recurse *.msi | % { $_.FullName }) + foreach ($file in $files) { + & $insigniaPath -im $files + Write-Signature -signtool $signtoolPath -thumbprint $certThumbprint -filename $file + } +} + +if ($bootstrapPath) { + Write-Output "### Signing bootstrapper EXE ###" + $files = @(Get-ChildItem $bootstrapPath -Recurse *.exe | % { $_.FullName }) + foreach ($file in $files) { + & $insigniaPath -ib $file -o $tempPath\engine.exe + Write-Signature -signtool $signtoolPath -thumbprint $certThumbprint -filename $tempPath\engine.exe + & $insigniaPath -ab $tempPath\engine.exe $file -o $file + Write-Signature -signtool $signtoolPath -thumbprint $certThumbprint -filename $file + Remove-Item -Force $tempPath\engine.exe + } +} \ No newline at end of file